@k2b/ui 0.49.0 → 0.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (461) hide show
  1. package/dist/base.css +70 -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/ContextMenu.js +3 -0
  8. package/dist/browser/actions/ContextMenu.js.map +1 -1
  9. package/dist/browser/actions/Dropdown.js +43 -10
  10. package/dist/browser/actions/Dropdown.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 +188 -0
  20. package/dist/browser/charts/core/area.js.map +1 -0
  21. package/dist/browser/charts/core/calendar.js +186 -0
  22. package/dist/browser/charts/core/calendar.js.map +1 -0
  23. package/dist/browser/charts/core/chart-map-data.js +9 -0
  24. package/dist/browser/charts/core/chart-map-data.js.map +1 -0
  25. package/dist/browser/charts/core/chart-messages.js +17 -0
  26. package/dist/browser/charts/core/chart-messages.js.map +1 -0
  27. package/dist/browser/charts/core/hbar-layout.js +118 -0
  28. package/dist/browser/charts/core/hbar-layout.js.map +1 -0
  29. package/dist/browser/charts/core/hbar.js +39 -0
  30. package/dist/browser/charts/core/hbar.js.map +1 -0
  31. package/dist/browser/charts/core/index.js +17 -0
  32. package/dist/browser/charts/core/index.js.map +1 -0
  33. package/dist/browser/charts/core/inspection.js +9 -0
  34. package/dist/browser/charts/core/inspection.js.map +1 -0
  35. package/dist/browser/charts/core/map.js +116 -0
  36. package/dist/browser/charts/core/map.js.map +1 -0
  37. package/dist/browser/charts/core/registry.js +35 -0
  38. package/dist/browser/charts/core/registry.js.map +1 -0
  39. package/dist/browser/charts/core/render-size.js +13 -0
  40. package/dist/browser/charts/core/render-size.js.map +1 -0
  41. package/dist/browser/charts/core/render.js +113 -0
  42. package/dist/browser/charts/core/render.js.map +1 -0
  43. package/dist/browser/charts/core/snapshot.js +65 -0
  44. package/dist/browser/charts/core/snapshot.js.map +1 -0
  45. package/dist/browser/charts/core/svg-renderers.js +2406 -0
  46. package/dist/browser/charts/core/svg-renderers.js.map +1 -0
  47. package/dist/browser/charts/core/svg.js +21 -0
  48. package/dist/browser/charts/core/svg.js.map +1 -0
  49. package/dist/browser/charts/core/termination.test-fixture.js +162 -0
  50. package/dist/browser/charts/core/termination.test-fixture.js.map +1 -0
  51. package/dist/browser/charts/core/text.js +13 -0
  52. package/dist/browser/charts/core/text.js.map +1 -0
  53. package/dist/browser/charts/core/types.js +6 -0
  54. package/dist/browser/charts/core/types.js.map +1 -0
  55. package/dist/browser/charts/core/waterfall.js +162 -0
  56. package/dist/browser/charts/core/waterfall.js.map +1 -0
  57. package/dist/browser/charts/description.js +2 -0
  58. package/dist/browser/charts/description.js.map +1 -0
  59. package/dist/browser/charts.js +4 -2
  60. package/dist/browser/charts.js.map +1 -1
  61. package/dist/browser/content/BalanceSummary.js +106 -0
  62. package/dist/browser/content/BalanceSummary.js.map +1 -0
  63. package/dist/browser/content/Chart.js +21 -616
  64. package/dist/browser/content/Chart.js.map +1 -1
  65. package/dist/browser/content/ChartExplorer.js +366 -122
  66. package/dist/browser/content/ChartExplorer.js.map +1 -1
  67. package/dist/browser/content/ChartRoot.js +632 -0
  68. package/dist/browser/content/ChartRoot.js.map +1 -0
  69. package/dist/browser/content/ChartSnapshotView.js +16 -9
  70. package/dist/browser/content/ChartSnapshotView.js.map +1 -1
  71. package/dist/browser/content/ChartSparkline.js +24 -0
  72. package/dist/browser/content/ChartSparkline.js.map +1 -0
  73. package/dist/browser/content/DataTable.js +676 -293
  74. package/dist/browser/content/DataTable.js.map +1 -1
  75. package/dist/browser/content/DataTableTools.js +119 -0
  76. package/dist/browser/content/DataTableTools.js.map +1 -0
  77. package/dist/browser/content/FileView.js +111 -61
  78. package/dist/browser/content/FileView.js.map +1 -1
  79. package/dist/browser/content/FlowAmount.js +82 -0
  80. package/dist/browser/content/FlowAmount.js.map +1 -0
  81. package/dist/browser/content/Lightbox.js +8 -8
  82. package/dist/browser/content/Lightbox.js.map +1 -1
  83. package/dist/browser/content/MapView.js +30 -28
  84. package/dist/browser/content/MapView.js.map +1 -1
  85. package/dist/browser/content/PdfPreview.js +84 -52
  86. package/dist/browser/content/PdfPreview.js.map +1 -1
  87. package/dist/browser/content/PdfViewer.js +588 -0
  88. package/dist/browser/content/PdfViewer.js.map +1 -0
  89. package/dist/browser/content/balance-summary-messages.js +26 -0
  90. package/dist/browser/content/balance-summary-messages.js.map +1 -0
  91. package/dist/browser/content/chart-bar.js +251 -21
  92. package/dist/browser/content/chart-bar.js.map +1 -1
  93. package/dist/browser/content/chart-calendar.js +43 -0
  94. package/dist/browser/content/chart-calendar.js.map +1 -0
  95. package/dist/browser/content/chart-inspection-core.js +178 -50
  96. package/dist/browser/content/chart-inspection-core.js.map +1 -1
  97. package/dist/browser/content/chart-inspection.js.map +1 -1
  98. package/dist/browser/content/chart-line-gaps.js +2 -2
  99. package/dist/browser/content/chart-line-gaps.js.map +1 -1
  100. package/dist/browser/content/chart-map-viewport.js.map +1 -1
  101. package/dist/browser/content/chart-message-catalog.js +174 -0
  102. package/dist/browser/content/chart-message-catalog.js.map +1 -0
  103. package/dist/browser/content/chart-messages.js +2 -138
  104. package/dist/browser/content/chart-messages.js.map +1 -1
  105. package/dist/browser/content/chart-snapshot.js +1 -62
  106. package/dist/browser/content/chart-snapshot.js.map +1 -1
  107. package/dist/browser/content/chart-state-timeline.js +1 -1
  108. package/dist/browser/content/chart-state-timeline.js.map +1 -1
  109. package/dist/browser/content/chart-svg.js +4 -2
  110. package/dist/browser/content/chart-svg.js.map +1 -1
  111. package/dist/browser/content/chart-time-axis.js +139 -0
  112. package/dist/browser/content/chart-time-axis.js.map +1 -0
  113. package/dist/browser/content/data-table-columns.js +160 -0
  114. package/dist/browser/content/data-table-columns.js.map +1 -0
  115. package/dist/browser/content/data-table-messages.js +38 -2
  116. package/dist/browser/content/data-table-messages.js.map +1 -1
  117. package/dist/browser/content/flow-amount-messages.js +26 -0
  118. package/dist/browser/content/flow-amount-messages.js.map +1 -0
  119. package/dist/browser/content/index.js +5 -0
  120. package/dist/browser/content/index.js.map +1 -1
  121. package/dist/browser/content/pdf-document.js +29 -0
  122. package/dist/browser/content/pdf-document.js.map +1 -0
  123. package/dist/browser/content/pdf-limits.js +31 -0
  124. package/dist/browser/content/pdf-limits.js.map +1 -0
  125. package/dist/browser/content/pdf-messages.js +34 -2
  126. package/dist/browser/content/pdf-messages.js.map +1 -1
  127. package/dist/browser/content/pdf-viewer-engine.js +57 -0
  128. package/dist/browser/content/pdf-viewer-worker.js +28 -0
  129. package/dist/browser/inputs/ChoiceInputs.js +94 -51
  130. package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
  131. package/dist/browser/inputs/ChoiceSlider.js +75 -58
  132. package/dist/browser/inputs/ChoiceSlider.js.map +1 -1
  133. package/dist/browser/inputs/DatePicker.js +118 -102
  134. package/dist/browser/inputs/DatePicker.js.map +1 -1
  135. package/dist/browser/inputs/PeriodPicker.js +874 -0
  136. package/dist/browser/inputs/PeriodPicker.js.map +1 -0
  137. package/dist/browser/inputs/SelectChip.js +50 -17
  138. package/dist/browser/inputs/SelectChip.js.map +1 -1
  139. package/dist/browser/inputs/date-picker.js +13 -0
  140. package/dist/browser/inputs/date-picker.js.map +1 -1
  141. package/dist/browser/inputs/index.js +4 -1
  142. package/dist/browser/inputs/index.js.map +1 -1
  143. package/dist/browser/inputs/input-messages.js +8 -2
  144. package/dist/browser/inputs/input-messages.js.map +1 -1
  145. package/dist/browser/inputs/markdown/MarkdownEditor.js +14 -10
  146. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  147. package/dist/browser/inputs/markdown/SlashCommands.js +402 -0
  148. package/dist/browser/inputs/markdown/SlashCommands.js.map +1 -0
  149. package/dist/browser/inputs/period-picker-messages.js +71 -0
  150. package/dist/browser/inputs/period-picker-messages.js.map +1 -0
  151. package/dist/browser/inputs/period.js +263 -0
  152. package/dist/browser/inputs/period.js.map +1 -0
  153. package/dist/browser/intl/Format.js +31 -8
  154. package/dist/browser/intl/Format.js.map +1 -1
  155. package/dist/browser/layout/AppWorkspace.js +7 -1
  156. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  157. package/dist/browser/layout/DetailPanel.js +147 -120
  158. package/dist/browser/layout/DetailPanel.js.map +1 -1
  159. package/dist/browser/layout/Discussion.js +101 -108
  160. package/dist/browser/layout/Discussion.js.map +1 -1
  161. package/dist/browser/layout/index.js.map +1 -1
  162. package/dist/browser/surfaces/BudgetList.js +281 -0
  163. package/dist/browser/surfaces/BudgetList.js.map +1 -0
  164. package/dist/browser/surfaces/DescriptionList.js +5 -2
  165. package/dist/browser/surfaces/DescriptionList.js.map +1 -1
  166. package/dist/browser/surfaces/ProgressBar.js +134 -21
  167. package/dist/browser/surfaces/ProgressBar.js.map +1 -1
  168. package/dist/browser/surfaces/StatCell.js +327 -146
  169. package/dist/browser/surfaces/StatCell.js.map +1 -1
  170. package/dist/browser/surfaces/StatGrid.js +75 -57
  171. package/dist/browser/surfaces/StatGrid.js.map +1 -1
  172. package/dist/browser/surfaces/budget-messages.js +64 -0
  173. package/dist/browser/surfaces/budget-messages.js.map +1 -0
  174. package/dist/browser/surfaces/delta-badge.js +79 -0
  175. package/dist/browser/surfaces/delta-badge.js.map +1 -0
  176. package/dist/browser/surfaces/index.js +2 -1
  177. package/dist/browser/surfaces/index.js.map +1 -1
  178. package/dist/browser/surfaces/person-color.js +2 -2
  179. package/dist/browser/surfaces/person-color.js.map +1 -1
  180. package/dist/browser/surfaces/stat-cell-messages.js +41 -0
  181. package/dist/browser/surfaces/stat-cell-messages.js.map +1 -0
  182. package/dist/browser/widgets/Dashboard.js +137 -0
  183. package/dist/browser/widgets/Dashboard.js.map +1 -0
  184. package/dist/browser/widgets/DashboardFrame.js +310 -0
  185. package/dist/browser/widgets/DashboardFrame.js.map +1 -0
  186. package/dist/browser/widgets/index.js +2 -0
  187. package/dist/browser/widgets/index.js.map +1 -1
  188. package/dist/licenses/pdfjs-dist.txt +177 -0
  189. package/dist/ssr/actions/Button.js.map +1 -1
  190. package/dist/ssr/actions/CommandList.js +638 -0
  191. package/dist/ssr/actions/CommandList.js.map +1 -0
  192. package/dist/ssr/actions/CommandMenu.js +197 -0
  193. package/dist/ssr/actions/CommandMenu.js.map +1 -0
  194. package/dist/ssr/actions/ContextMenu.js +3 -0
  195. package/dist/ssr/actions/ContextMenu.js.map +1 -1
  196. package/dist/ssr/actions/Dropdown.js +43 -10
  197. package/dist/ssr/actions/Dropdown.js.map +1 -1
  198. package/dist/ssr/actions/command-dock.js +47 -0
  199. package/dist/ssr/actions/command-dock.js.map +1 -0
  200. package/dist/ssr/actions/command-items.js +84 -0
  201. package/dist/ssr/actions/command-items.js.map +1 -0
  202. package/dist/ssr/actions/command-messages.js +42 -0
  203. package/dist/ssr/actions/command-messages.js.map +1 -0
  204. package/dist/ssr/actions/index.js +1 -0
  205. package/dist/ssr/actions/index.js.map +1 -1
  206. package/dist/ssr/charts/core/area.js +188 -0
  207. package/dist/ssr/charts/core/area.js.map +1 -0
  208. package/dist/ssr/charts/core/calendar.js +186 -0
  209. package/dist/ssr/charts/core/calendar.js.map +1 -0
  210. package/dist/ssr/charts/core/chart-map-data.js +9 -0
  211. package/dist/ssr/charts/core/chart-map-data.js.map +1 -0
  212. package/dist/ssr/charts/core/chart-messages.js +17 -0
  213. package/dist/ssr/charts/core/chart-messages.js.map +1 -0
  214. package/dist/ssr/charts/core/hbar-layout.js +118 -0
  215. package/dist/ssr/charts/core/hbar-layout.js.map +1 -0
  216. package/dist/ssr/charts/core/hbar.js +39 -0
  217. package/dist/ssr/charts/core/hbar.js.map +1 -0
  218. package/dist/ssr/charts/core/index.js +17 -0
  219. package/dist/ssr/charts/core/index.js.map +1 -0
  220. package/dist/ssr/charts/core/inspection.js +9 -0
  221. package/dist/ssr/charts/core/inspection.js.map +1 -0
  222. package/dist/ssr/charts/core/map.js +116 -0
  223. package/dist/ssr/charts/core/map.js.map +1 -0
  224. package/dist/ssr/charts/core/registry.js +35 -0
  225. package/dist/ssr/charts/core/registry.js.map +1 -0
  226. package/dist/ssr/charts/core/render-size.js +13 -0
  227. package/dist/ssr/charts/core/render-size.js.map +1 -0
  228. package/dist/ssr/charts/core/render.js +113 -0
  229. package/dist/ssr/charts/core/render.js.map +1 -0
  230. package/dist/ssr/charts/core/snapshot.js +65 -0
  231. package/dist/ssr/charts/core/snapshot.js.map +1 -0
  232. package/dist/ssr/charts/core/svg-renderers.js +2406 -0
  233. package/dist/ssr/charts/core/svg-renderers.js.map +1 -0
  234. package/dist/ssr/charts/core/svg.js +21 -0
  235. package/dist/ssr/charts/core/svg.js.map +1 -0
  236. package/dist/ssr/charts/core/termination.test-fixture.js +162 -0
  237. package/dist/ssr/charts/core/termination.test-fixture.js.map +1 -0
  238. package/dist/ssr/charts/core/text.js +13 -0
  239. package/dist/ssr/charts/core/text.js.map +1 -0
  240. package/dist/ssr/charts/core/types.js +6 -0
  241. package/dist/ssr/charts/core/types.js.map +1 -0
  242. package/dist/ssr/charts/core/waterfall.js +162 -0
  243. package/dist/ssr/charts/core/waterfall.js.map +1 -0
  244. package/dist/ssr/charts/description.js +2 -0
  245. package/dist/ssr/charts/description.js.map +1 -0
  246. package/dist/ssr/charts.js +4 -2
  247. package/dist/ssr/charts.js.map +1 -1
  248. package/dist/ssr/content/BalanceSummary.js +75 -0
  249. package/dist/ssr/content/BalanceSummary.js.map +1 -0
  250. package/dist/ssr/content/Chart.js +21 -483
  251. package/dist/ssr/content/Chart.js.map +1 -1
  252. package/dist/ssr/content/ChartExplorer.js +190 -46
  253. package/dist/ssr/content/ChartExplorer.js.map +1 -1
  254. package/dist/ssr/content/ChartRoot.js +475 -0
  255. package/dist/ssr/content/ChartRoot.js.map +1 -0
  256. package/dist/ssr/content/ChartSnapshotView.js +5 -1
  257. package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
  258. package/dist/ssr/content/ChartSparkline.js +24 -0
  259. package/dist/ssr/content/ChartSparkline.js.map +1 -0
  260. package/dist/ssr/content/DataTable.js +287 -78
  261. package/dist/ssr/content/DataTable.js.map +1 -1
  262. package/dist/ssr/content/DataTableTools.js +106 -0
  263. package/dist/ssr/content/DataTableTools.js.map +1 -0
  264. package/dist/ssr/content/FileView.js +56 -7
  265. package/dist/ssr/content/FileView.js.map +1 -1
  266. package/dist/ssr/content/FlowAmount.js +58 -0
  267. package/dist/ssr/content/FlowAmount.js.map +1 -0
  268. package/dist/ssr/content/Lightbox.js +8 -8
  269. package/dist/ssr/content/Lightbox.js.map +1 -1
  270. package/dist/ssr/content/MapView.js +9 -9
  271. package/dist/ssr/content/MapView.js.map +1 -1
  272. package/dist/ssr/content/PdfPreview.js +49 -20
  273. package/dist/ssr/content/PdfPreview.js.map +1 -1
  274. package/dist/ssr/content/PdfViewer.js +484 -0
  275. package/dist/ssr/content/PdfViewer.js.map +1 -0
  276. package/dist/ssr/content/balance-summary-messages.js +26 -0
  277. package/dist/ssr/content/balance-summary-messages.js.map +1 -0
  278. package/dist/ssr/content/chart-bar.js +251 -21
  279. package/dist/ssr/content/chart-bar.js.map +1 -1
  280. package/dist/ssr/content/chart-calendar.js +43 -0
  281. package/dist/ssr/content/chart-calendar.js.map +1 -0
  282. package/dist/ssr/content/chart-inspection-core.js +178 -50
  283. package/dist/ssr/content/chart-inspection-core.js.map +1 -1
  284. package/dist/ssr/content/chart-inspection.js.map +1 -1
  285. package/dist/ssr/content/chart-line-gaps.js +2 -2
  286. package/dist/ssr/content/chart-line-gaps.js.map +1 -1
  287. package/dist/ssr/content/chart-map-viewport.js.map +1 -1
  288. package/dist/ssr/content/chart-message-catalog.js +174 -0
  289. package/dist/ssr/content/chart-message-catalog.js.map +1 -0
  290. package/dist/ssr/content/chart-messages.js +2 -138
  291. package/dist/ssr/content/chart-messages.js.map +1 -1
  292. package/dist/ssr/content/chart-snapshot.js +1 -62
  293. package/dist/ssr/content/chart-snapshot.js.map +1 -1
  294. package/dist/ssr/content/chart-state-timeline.js +1 -1
  295. package/dist/ssr/content/chart-state-timeline.js.map +1 -1
  296. package/dist/ssr/content/chart-svg.js +4 -2
  297. package/dist/ssr/content/chart-svg.js.map +1 -1
  298. package/dist/ssr/content/chart-time-axis.js +139 -0
  299. package/dist/ssr/content/chart-time-axis.js.map +1 -0
  300. package/dist/ssr/content/data-table-columns.js +160 -0
  301. package/dist/ssr/content/data-table-columns.js.map +1 -0
  302. package/dist/ssr/content/data-table-messages.js +38 -2
  303. package/dist/ssr/content/data-table-messages.js.map +1 -1
  304. package/dist/ssr/content/flow-amount-messages.js +26 -0
  305. package/dist/ssr/content/flow-amount-messages.js.map +1 -0
  306. package/dist/ssr/content/index.js +5 -0
  307. package/dist/ssr/content/index.js.map +1 -1
  308. package/dist/ssr/content/pdf-document.js +29 -0
  309. package/dist/ssr/content/pdf-document.js.map +1 -0
  310. package/dist/ssr/content/pdf-limits.js +31 -0
  311. package/dist/ssr/content/pdf-limits.js.map +1 -0
  312. package/dist/ssr/content/pdf-messages.js +34 -2
  313. package/dist/ssr/content/pdf-messages.js.map +1 -1
  314. package/dist/ssr/inputs/ChoiceInputs.js +49 -12
  315. package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
  316. package/dist/ssr/inputs/ChoiceSlider.js +17 -12
  317. package/dist/ssr/inputs/ChoiceSlider.js.map +1 -1
  318. package/dist/ssr/inputs/DatePicker.js +19 -13
  319. package/dist/ssr/inputs/DatePicker.js.map +1 -1
  320. package/dist/ssr/inputs/PeriodPicker.js +598 -0
  321. package/dist/ssr/inputs/PeriodPicker.js.map +1 -0
  322. package/dist/ssr/inputs/SelectChip.js +26 -9
  323. package/dist/ssr/inputs/SelectChip.js.map +1 -1
  324. package/dist/ssr/inputs/date-picker.js +13 -0
  325. package/dist/ssr/inputs/date-picker.js.map +1 -1
  326. package/dist/ssr/inputs/index.js +4 -1
  327. package/dist/ssr/inputs/index.js.map +1 -1
  328. package/dist/ssr/inputs/input-messages.js +8 -2
  329. package/dist/ssr/inputs/input-messages.js.map +1 -1
  330. package/dist/ssr/inputs/markdown/MarkdownEditor.js +3 -2
  331. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  332. package/dist/ssr/inputs/markdown/SlashCommands.js +339 -0
  333. package/dist/ssr/inputs/markdown/SlashCommands.js.map +1 -0
  334. package/dist/ssr/inputs/period-picker-messages.js +71 -0
  335. package/dist/ssr/inputs/period-picker-messages.js.map +1 -0
  336. package/dist/ssr/inputs/period.js +263 -0
  337. package/dist/ssr/inputs/period.js.map +1 -0
  338. package/dist/ssr/intl/Format.js +22 -2
  339. package/dist/ssr/intl/Format.js.map +1 -1
  340. package/dist/ssr/layout/AppWorkspace.js +7 -1
  341. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  342. package/dist/ssr/layout/DetailPanel.js +27 -4
  343. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  344. package/dist/ssr/layout/Discussion.js +16 -2
  345. package/dist/ssr/layout/Discussion.js.map +1 -1
  346. package/dist/ssr/layout/index.js.map +1 -1
  347. package/dist/ssr/surfaces/BudgetList.js +170 -0
  348. package/dist/ssr/surfaces/BudgetList.js.map +1 -0
  349. package/dist/ssr/surfaces/DescriptionList.js +1 -1
  350. package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
  351. package/dist/ssr/surfaces/ProgressBar.js +96 -5
  352. package/dist/ssr/surfaces/ProgressBar.js.map +1 -1
  353. package/dist/ssr/surfaces/StatCell.js +157 -52
  354. package/dist/ssr/surfaces/StatCell.js.map +1 -1
  355. package/dist/ssr/surfaces/StatGrid.js +24 -35
  356. package/dist/ssr/surfaces/StatGrid.js.map +1 -1
  357. package/dist/ssr/surfaces/budget-messages.js +64 -0
  358. package/dist/ssr/surfaces/budget-messages.js.map +1 -0
  359. package/dist/ssr/surfaces/delta-badge.js +55 -0
  360. package/dist/ssr/surfaces/delta-badge.js.map +1 -0
  361. package/dist/ssr/surfaces/index.js +2 -1
  362. package/dist/ssr/surfaces/index.js.map +1 -1
  363. package/dist/ssr/surfaces/person-color.js +2 -2
  364. package/dist/ssr/surfaces/person-color.js.map +1 -1
  365. package/dist/ssr/surfaces/stat-cell-messages.js +41 -0
  366. package/dist/ssr/surfaces/stat-cell-messages.js.map +1 -0
  367. package/dist/ssr/widgets/Dashboard.js +84 -0
  368. package/dist/ssr/widgets/Dashboard.js.map +1 -0
  369. package/dist/ssr/widgets/DashboardFrame.js +200 -0
  370. package/dist/ssr/widgets/DashboardFrame.js.map +1 -0
  371. package/dist/ssr/widgets/index.js +2 -0
  372. package/dist/ssr/widgets/index.js.map +1 -1
  373. package/dist/styles.css +1 -1
  374. package/dist/types/actions/Button.d.ts +1 -1
  375. package/dist/types/actions/CommandList.d.ts +120 -0
  376. package/dist/types/actions/CommandMenu.d.ts +39 -0
  377. package/dist/types/actions/Dropdown.d.ts +17 -0
  378. package/dist/types/actions/command-dock.d.ts +8 -0
  379. package/dist/types/actions/command-items.d.ts +134 -0
  380. package/dist/types/actions/command-messages.d.ts +19 -0
  381. package/dist/types/actions/index.d.ts +3 -0
  382. package/dist/types/charts/core/area.d.ts +62 -0
  383. package/dist/types/charts/core/calendar.d.ts +57 -0
  384. package/dist/types/charts/core/chart-map-data.d.ts +3 -0
  385. package/dist/types/charts/core/chart-messages.d.ts +5 -0
  386. package/dist/types/charts/core/hbar-layout.d.ts +74 -0
  387. package/dist/types/charts/core/hbar.d.ts +13 -0
  388. package/dist/types/charts/core/index.d.ts +16 -0
  389. package/dist/types/charts/core/inspection.d.ts +16 -0
  390. package/dist/types/charts/core/map.d.ts +3 -0
  391. package/dist/types/charts/core/registry.d.ts +33 -0
  392. package/dist/types/charts/core/render-size.d.ts +7 -0
  393. package/dist/types/charts/core/render.d.ts +37 -0
  394. package/dist/types/charts/core/snapshot.d.ts +27 -0
  395. package/dist/types/charts/core/svg-renderers.d.ts +722 -0
  396. package/dist/types/charts/core/svg.d.ts +20 -0
  397. package/dist/types/charts/core/termination.test-fixture.d.ts +1 -0
  398. package/dist/types/charts/core/text.d.ts +5 -0
  399. package/dist/types/charts/core/types.d.ts +20 -0
  400. package/dist/types/charts/core/waterfall.d.ts +68 -0
  401. package/dist/types/charts/description.d.ts +226 -0
  402. package/dist/types/charts.d.ts +5 -2
  403. package/dist/types/content/BalanceSummary.d.ts +29 -0
  404. package/dist/types/content/Chart.d.ts +19 -117
  405. package/dist/types/content/ChartExplorer.d.ts +43 -2
  406. package/dist/types/content/ChartRoot.d.ts +92 -0
  407. package/dist/types/content/ChartSnapshotView.d.ts +1 -0
  408. package/dist/types/content/ChartSparkline.d.ts +5 -0
  409. package/dist/types/content/DataTable.d.ts +28 -0
  410. package/dist/types/content/DataTableTools.d.ts +44 -0
  411. package/dist/types/content/FlowAmount.d.ts +28 -0
  412. package/dist/types/content/PdfViewer.d.ts +32 -0
  413. package/dist/types/content/balance-summary-messages.d.ts +11 -0
  414. package/dist/types/content/chart-bar.d.ts +95 -2
  415. package/dist/types/content/chart-calendar.d.ts +4 -0
  416. package/dist/types/content/chart-inspection-core.d.ts +21 -16
  417. package/dist/types/content/chart-inspection.d.ts +5 -1
  418. package/dist/types/content/chart-map-viewport.d.ts +1 -1
  419. package/dist/types/content/chart-message-catalog.d.ts +84 -0
  420. package/dist/types/content/chart-messages.d.ts +2 -33
  421. package/dist/types/content/chart-snapshot.d.ts +1 -26
  422. package/dist/types/content/chart-svg.d.ts +1 -1
  423. package/dist/types/content/chart-time-axis.d.ts +26 -0
  424. package/dist/types/content/data-table-columns.d.ts +72 -0
  425. package/dist/types/content/data-table-messages.d.ts +18 -0
  426. package/dist/types/content/flow-amount-messages.d.ts +11 -0
  427. package/dist/types/content/index.d.ts +12 -2
  428. package/dist/types/content/pdf-document.d.ts +5 -0
  429. package/dist/types/content/pdf-engine.d.ts +9 -0
  430. package/dist/types/content/pdf-limits.d.ts +43 -0
  431. package/dist/types/content/pdf-messages.d.ts +16 -0
  432. package/dist/types/inputs/ChoiceInputs.d.ts +4 -0
  433. package/dist/types/inputs/ChoiceSlider.d.ts +12 -0
  434. package/dist/types/inputs/DatePicker.d.ts +22 -0
  435. package/dist/types/inputs/PeriodPicker.d.ts +24 -0
  436. package/dist/types/inputs/SelectChip.d.ts +2 -0
  437. package/dist/types/inputs/date-picker.d.ts +6 -0
  438. package/dist/types/inputs/index.d.ts +8 -2
  439. package/dist/types/inputs/input-messages.d.ts +3 -0
  440. package/dist/types/inputs/markdown/MarkdownEditor.d.ts +5 -0
  441. package/dist/types/inputs/markdown/SlashCommands.d.ts +20 -0
  442. package/dist/types/inputs/period-picker-messages.d.ts +34 -0
  443. package/dist/types/inputs/period.d.ts +134 -0
  444. package/dist/types/intl/Format.d.ts +5 -0
  445. package/dist/types/layout/AppWorkspace.d.ts +5 -0
  446. package/dist/types/layout/DetailPanel.d.ts +12 -0
  447. package/dist/types/layout/index.d.ts +1 -1
  448. package/dist/types/surfaces/BudgetList.d.ts +42 -0
  449. package/dist/types/surfaces/DescriptionList.d.ts +5 -0
  450. package/dist/types/surfaces/ProgressBar.d.ts +38 -2
  451. package/dist/types/surfaces/StatCell.d.ts +40 -2
  452. package/dist/types/surfaces/StatGrid.d.ts +3 -1
  453. package/dist/types/surfaces/budget-messages.d.ts +30 -0
  454. package/dist/types/surfaces/delta-badge.d.ts +10 -0
  455. package/dist/types/surfaces/index.d.ts +4 -3
  456. package/dist/types/surfaces/person-color.d.ts +2 -2
  457. package/dist/types/surfaces/stat-cell-messages.d.ts +19 -0
  458. package/dist/types/widgets/Dashboard.d.ts +42 -0
  459. package/dist/types/widgets/DashboardFrame.d.ts +58 -0
  460. package/dist/types/widgets/index.d.ts +2 -0
  461. package/package.json +8 -1
@@ -0,0 +1,118 @@
1
+ import { barSeriesLegend, chartTextWidth, headerHeight, wrapLabel } from "../../content/chart-bar";
2
+ import { chartMessages } from "../../content/chart-message-catalog";
3
+ import { extendDomainToNice, niceStep } from "./svg-renderers";
4
+ /** Stacks start at zero, group headings keep their first-appearance order. */
5
+ export function hbarLayout(spec, size = {
6
+ width: 480,
7
+ height: 280
8
+ }) {
9
+ if (spec.rows.some(row => row.values.length !== spec.series.length || row.values.some(v => v !== null && (!Number.isFinite(v) || v < 0)))) throw new RangeError("Horizontal bars require aligned nonnegative segment values");
10
+ const format = spec.valueFormat ?? String;
11
+ const labels = chartMessages.resolve([spec.locale ?? "en"]).t;
12
+ const groups = [...new Set(spec.rows.map(r => r.group))];
13
+ const totals = spec.rows.map(r => r.values.some(v => v !== null) ? r.values.reduce((sum, v) => sum + (v ?? 0), 0) : null);
14
+ const max = Math.max(0, ...totals.filter(v => v !== null));
15
+ const scale = extendDomainToNice(0, max || 1, niceStep(max || 1, 4));
16
+ const unit = size.width / 296;
17
+ const left = Math.min(104 * unit, size.width * 0.26);
18
+ const right = size.width - Math.max(52 * unit, ...totals.map(v => (chartTextWidth(v === null ? "–" : format(v)) + 8) * unit));
19
+ const legendLayout = barSeriesLegend(spec.series.map((label, i) => ({
20
+ label,
21
+ data: spec.rows.map(r => r.values[i] ?? null)
22
+ })), format, size.width, 296, 70 // One legend budget even when rows grow the initial 280-unit drawing.
23
+ );
24
+ const legend = {
25
+ ...legendLayout,
26
+ items: legendLayout.items.map(entry => ({
27
+ ...entry,
28
+ valueText: entry.total === null ? "–" : format(entry.total),
29
+ text: wrapLabel(entry.label, entry.labelWidth, 1).lines[0] ?? entry.label
30
+ }))
31
+ };
32
+ const header = headerHeight({
33
+ title: spec.title,
34
+ subtitle: spec.subtitle
35
+ });
36
+ const top = header + (spec.legend === false ? 0 : legend.height);
37
+ const groupHeight = 20;
38
+ const pitch = Math.max(32, (size.height - top - 24 - groups.filter(g => g !== undefined).length * groupHeight) / Math.max(1, spec.rows.length));
39
+ const x = v => left + v / scale.domain[1] * (right - left);
40
+ let y = top;
41
+ const rows = groups.flatMap(group => {
42
+ if (group !== undefined) y += groupHeight;
43
+ let first = true;
44
+ return spec.rows.flatMap((row, index) => {
45
+ if (row.group !== group) return [];
46
+ const groupHeading = first ? group : undefined;
47
+ first = false;
48
+ const center = y + pitch / 2;
49
+ y += pitch;
50
+ let acc = 0;
51
+ const segments = row.values.map((value, seriesIndex) => {
52
+ const start = acc;
53
+ acc += value ?? 0;
54
+ const width = x(acc) - x(start);
55
+ const label = value === null ? "–" : format(value);
56
+ return {
57
+ value,
58
+ seriesIndex,
59
+ x: x(start),
60
+ width,
61
+ label,
62
+ showLabel: width / unit > chartTextWidth(label) + 10
63
+ };
64
+ });
65
+ const labelLines = wrapLabel(row.label, Math.max(8, left / unit - 8), 2).lines;
66
+ const total = totals[index];
67
+ const valueText = total === null ? "–" : format(total);
68
+ const datum = {
69
+ role: "item",
70
+ index,
71
+ label: [row.label, row.group].filter(Boolean).join(" · "),
72
+ anchor: [x(total ?? 0) + 4, center],
73
+ values: [...row.values.map((v, i) => ({
74
+ key: `series:${i}`,
75
+ value: v ?? "–",
76
+ formatted: v === null ? "–" : format(v)
77
+ })), {
78
+ key: "total",
79
+ value: total ?? "–",
80
+ formatted: valueText
81
+ }]
82
+ };
83
+ const title = [row.label, row.group, ...row.values.map((v, i) => `${spec.series[i]}: ${v === null ? "–" : format(v)}`), `${labels.chartFields({
84
+ key: "total"
85
+ })}: ${valueText}`].filter(Boolean).join(" · ");
86
+ return [{
87
+ ...row,
88
+ labelLines,
89
+ groupHeading,
90
+ index,
91
+ center,
92
+ segments,
93
+ total,
94
+ valueText,
95
+ datum,
96
+ title,
97
+ groupY: center - pitch / 2 - groupHeight
98
+ }];
99
+ });
100
+ });
101
+ return {
102
+ ...size,
103
+ header,
104
+ height: Math.max(size.height, y + 24),
105
+ top,
106
+ left,
107
+ right,
108
+ rows,
109
+ groups,
110
+ pitch,
111
+ x,
112
+ scale,
113
+ format,
114
+ unit,
115
+ legend
116
+ };
117
+ }
118
+ //# sourceMappingURL=hbar-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["charts/core/hbar-layout.ts"],"sourcesContent":["import { barSeriesLegend, chartTextWidth, headerHeight, wrapLabel } from \"../../content/chart-bar\";\nimport { chartMessages } from \"../../content/chart-message-catalog\";\nimport { extendDomainToNice, niceStep } from \"./svg-renderers\";\nimport type { ChartDatum } from \"./types\";\n\nexport type HorizontalBarOptions = {\n series: string[];\n rows: { group?: string; label: string; values: (number | null)[] }[];\n valueFormat?: (value: number) => string;\n legend?: boolean;\n title?: string;\n subtitle?: string;\n locale?: string;\n className?: string;\n};\n\n/** Stacks start at zero, group headings keep their first-appearance order. */\nexport function hbarLayout(spec: HorizontalBarOptions, size = { width: 480, height: 280 }) {\n if (\n spec.rows.some(\n (row) => row.values.length !== spec.series.length || row.values.some((v) => v !== null && (!Number.isFinite(v) || v < 0)),\n )\n )\n throw new RangeError(\"Horizontal bars require aligned nonnegative segment values\");\n const format = spec.valueFormat ?? String;\n const labels = chartMessages.resolve([spec.locale ?? \"en\"]).t;\n const groups = [...new Set(spec.rows.map((r) => r.group))];\n const totals = spec.rows.map((r) => (r.values.some((v) => v !== null) ? r.values.reduce<number>((sum, v) => sum + (v ?? 0), 0) : null));\n const max = Math.max(0, ...totals.filter((v): v is number => v !== null));\n const scale = extendDomainToNice(0, max || 1, niceStep(max || 1, 4));\n const unit = size.width / 296;\n const left = Math.min(104 * unit, size.width * 0.26);\n const right = size.width - Math.max(52 * unit, ...totals.map((v) => (chartTextWidth(v === null ? \"–\" : format(v)) + 8) * unit));\n const legendLayout = barSeriesLegend(\n spec.series.map((label, i) => ({ label, data: spec.rows.map((r) => r.values[i] ?? null) })),\n format,\n size.width,\n 296,\n 70, // One legend budget even when rows grow the initial 280-unit drawing.\n );\n const legend = {\n ...legendLayout,\n items: legendLayout.items.map((entry) => ({\n ...entry,\n valueText: entry.total === null ? \"–\" : format(entry.total),\n text: wrapLabel(entry.label, entry.labelWidth, 1).lines[0] ?? entry.label,\n })),\n };\n const header = headerHeight({ title: spec.title, subtitle: spec.subtitle });\n const top = header + (spec.legend === false ? 0 : legend.height);\n const groupHeight = 20;\n const pitch = Math.max(\n 32,\n (size.height - top - 24 - groups.filter((g) => g !== undefined).length * groupHeight) / Math.max(1, spec.rows.length),\n );\n const x = (v: number) => left + (v / scale.domain[1]) * (right - left);\n let y = top;\n const rows = groups.flatMap((group) => {\n if (group !== undefined) y += groupHeight;\n let first = true;\n return spec.rows.flatMap((row, index) => {\n if (row.group !== group) return [];\n const groupHeading = first ? group : undefined;\n first = false;\n const center = y + pitch / 2;\n y += pitch;\n let acc = 0;\n const segments = row.values.map((value, seriesIndex) => {\n const start = acc;\n acc += value ?? 0;\n const width = x(acc) - x(start);\n const label = value === null ? \"–\" : format(value);\n return { value, seriesIndex, x: x(start), width, label, showLabel: width / unit > chartTextWidth(label) + 10 };\n });\n const labelLines = wrapLabel(row.label, Math.max(8, left / unit - 8), 2).lines;\n const total = totals[index]!;\n const valueText = total === null ? \"–\" : format(total);\n const datum: ChartDatum = {\n role: \"item\",\n index,\n label: [row.label, row.group].filter(Boolean).join(\" · \"),\n anchor: [x(total ?? 0) + 4, center],\n values: [\n ...row.values.map((v, i) => ({ key: `series:${i}`, value: v ?? \"–\", formatted: v === null ? \"–\" : format(v) })),\n { key: \"total\", value: total ?? \"–\", formatted: valueText },\n ],\n };\n const title = [\n row.label,\n row.group,\n ...row.values.map((v, i) => `${spec.series[i]}: ${v === null ? \"–\" : format(v)}`),\n `${labels.chartFields({ key: \"total\" })}: ${valueText}`,\n ]\n .filter(Boolean)\n .join(\" · \");\n return [\n {\n ...row,\n labelLines,\n groupHeading,\n index,\n center,\n segments,\n total,\n valueText,\n datum,\n title,\n groupY: center - pitch / 2 - groupHeight,\n },\n ];\n });\n });\n return { ...size, header, height: Math.max(size.height, y + 24), top, left, right, rows, groups, pitch, x, scale, format, unit, legend };\n}\n\nexport type HorizontalBarLayout = ReturnType<typeof hbarLayout>;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,39 @@
1
+ import { hbarLayout } from "./hbar-layout";
2
+ import { chartDatumSvg, escapeXml, renderHeader, svgRoot } from "./svg-renderers";
3
+ export { hbarLayout } from "./hbar-layout";
4
+ export function renderHbarSvg(spec) {
5
+ return renderHbarLayoutSvg(spec, hbarLayout(spec, spec));
6
+ }
7
+
8
+ /** Draw an already prepared layout; lazy hosts reuse the geometry reserved before loading. */
9
+ export function renderHbarLayoutSvg(spec, g) {
10
+ const text = (x, y, value, anchor = "start", extra = "", attrs = 'class="stdlib-chart-tick-label"') => `<text ${attrs} x="${x}" y="${y}" text-anchor="${anchor}" ${extra}>${escapeXml(value)}</text>`;
11
+ const parts = [renderHeader(spec.width, spec.title, spec.subtitle).svg];
12
+ const header = g.header;
13
+ if (spec.legend !== false) g.legend.items.forEach((entry, i) => {
14
+ const y = header + entry.y;
15
+ parts.push(`<rect class="stdlib-chart-series-${i % 8}" x="${entry.x}" y="${y - 8}" width="${8 * g.unit}" height="8"/>`, text(entry.x + 14 * g.unit, y, entry.text), text(entry.valueX, y, entry.valueText, "end", `data-chart-legend-value data-field="series:${i}" data-default="${escapeXml(entry.valueText)}"`));
16
+ });
17
+ if (spec.legend !== false && g.legend.hidden) parts.push(text(0, header + g.legend.height - 8, `+${g.legend.hidden}`));
18
+ for (const tick of g.scale.ticks) parts.push(`<line class="stdlib-chart-grid" x1="${g.x(tick)}" x2="${g.x(tick)}" y1="${g.top}" y2="${g.height - 24}"/>`, text(g.x(tick), g.height - 5, g.format(tick), "middle"));
19
+ for (const row of g.rows) {
20
+ if (row.groupHeading !== undefined) {
21
+ parts.push(text(0, row.groupY + 14, row.groupHeading, "start", "", 'class="k2b-chart-group-heading" font-size="11.5" font-weight="600" fill="currentColor"'));
22
+ }
23
+ const height = Math.min(26, g.pitch * 0.74);
24
+ const marks = [`<rect class="k2b-chart-category-band" fill="none" pointer-events="all" x="0" y="${row.center - g.pitch / 2}" width="${spec.width}" height="${g.pitch}" rx="6"/>`];
25
+ for (const segment of row.segments) {
26
+ if (segment.value === null) continue;
27
+ marks.push(`<rect class="stdlib-chart-bar stdlib-chart-series-${segment.seriesIndex % 8}" x="${segment.x}" y="${row.center - height / 2}" width="${Math.max(segment.width / 2, segment.width - 1.5)}" height="${height}" rx="3" stroke="none" stroke-width="0" style="fill:var(--stdlib-chart-c${segment.seriesIndex % 8 + 1},#3b82f6);fill-opacity:.18"/>`);
28
+ if (segment.showLabel) marks.push(text(segment.x + segment.width / 2, row.center + 4, segment.label, "middle", "", 'class="k2b-chart-segment-value" font-size="11" font-weight="500" fill="currentColor"'));
29
+ }
30
+ parts.push(chartDatumSvg(marks.join(""), row.datum, spec.inspect ?? false, row.title));
31
+ row.labelLines.forEach((line, i) => parts.push(text(g.left - 8 * g.unit, row.center + 4 + (row.labelLines.length > 1 ? i === 0 ? -6.5 : 6.5 : 0), line, "end")));
32
+ parts.push(text(g.x(row.total ?? 0) + 6 * g.unit, row.center + 4, row.valueText));
33
+ }
34
+ return svgRoot({
35
+ ...spec,
36
+ height: g.height
37
+ }, parts.join("")).replace("<svg ", '<svg data-bar-layout="rows" ');
38
+ }
39
+ //# sourceMappingURL=hbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["charts/core/hbar.ts"],"sourcesContent":["import { type HorizontalBarLayout, type HorizontalBarOptions, hbarLayout } from \"./hbar-layout\";\nimport { chartDatumSvg, escapeXml, renderHeader, svgRoot } from \"./svg-renderers\";\n\nexport { type HorizontalBarLayout, type HorizontalBarOptions, hbarLayout } from \"./hbar-layout\";\n\nexport function renderHbarSvg(spec: HorizontalBarOptions & { width: number; height: number; inspect?: boolean }) {\n return renderHbarLayoutSvg(spec, hbarLayout(spec, spec));\n}\n\n/** Draw an already prepared layout; lazy hosts reuse the geometry reserved before loading. */\nexport function renderHbarLayoutSvg(\n spec: HorizontalBarOptions & { width: number; height: number; inspect?: boolean },\n g: HorizontalBarLayout,\n) {\n const text = (x: number, y: number, value: string, anchor = \"start\", extra = \"\", attrs = 'class=\"stdlib-chart-tick-label\"') =>\n `<text ${attrs} x=\"${x}\" y=\"${y}\" text-anchor=\"${anchor}\" ${extra}>${escapeXml(value)}</text>`;\n const parts: string[] = [renderHeader(spec.width, spec.title, spec.subtitle).svg];\n const header = g.header;\n if (spec.legend !== false)\n g.legend.items.forEach((entry, i) => {\n const y = header + entry.y;\n parts.push(\n `<rect class=\"stdlib-chart-series-${i % 8}\" x=\"${entry.x}\" y=\"${y - 8}\" width=\"${8 * g.unit}\" height=\"8\"/>`,\n text(entry.x + 14 * g.unit, y, entry.text),\n text(\n entry.valueX,\n y,\n entry.valueText,\n \"end\",\n `data-chart-legend-value data-field=\"series:${i}\" data-default=\"${escapeXml(entry.valueText)}\"`,\n ),\n );\n });\n if (spec.legend !== false && g.legend.hidden) parts.push(text(0, header + g.legend.height - 8, `+${g.legend.hidden}`));\n for (const tick of g.scale.ticks)\n parts.push(\n `<line class=\"stdlib-chart-grid\" x1=\"${g.x(tick)}\" x2=\"${g.x(tick)}\" y1=\"${g.top}\" y2=\"${g.height - 24}\"/>`,\n text(g.x(tick), g.height - 5, g.format(tick), \"middle\"),\n );\n for (const row of g.rows) {\n if (row.groupHeading !== undefined) {\n parts.push(\n text(\n 0,\n row.groupY + 14,\n row.groupHeading,\n \"start\",\n \"\",\n 'class=\"k2b-chart-group-heading\" font-size=\"11.5\" font-weight=\"600\" fill=\"currentColor\"',\n ),\n );\n }\n const height = Math.min(26, g.pitch * 0.74);\n const marks = [\n `<rect class=\"k2b-chart-category-band\" fill=\"none\" pointer-events=\"all\" x=\"0\" y=\"${row.center - g.pitch / 2}\" width=\"${spec.width}\" height=\"${g.pitch}\" rx=\"6\"/>`,\n ];\n for (const segment of row.segments) {\n if (segment.value === null) continue;\n marks.push(\n `<rect class=\"stdlib-chart-bar stdlib-chart-series-${segment.seriesIndex % 8}\" x=\"${segment.x}\" y=\"${row.center - height / 2}\" width=\"${Math.max(segment.width / 2, segment.width - 1.5)}\" height=\"${height}\" rx=\"3\" stroke=\"none\" stroke-width=\"0\" style=\"fill:var(--stdlib-chart-c${(segment.seriesIndex % 8) + 1},#3b82f6);fill-opacity:.18\"/>`,\n );\n if (segment.showLabel)\n marks.push(\n text(\n segment.x + segment.width / 2,\n row.center + 4,\n segment.label,\n \"middle\",\n \"\",\n 'class=\"k2b-chart-segment-value\" font-size=\"11\" font-weight=\"500\" fill=\"currentColor\"',\n ),\n );\n }\n parts.push(chartDatumSvg(marks.join(\"\"), row.datum, spec.inspect ?? false, row.title));\n row.labelLines.forEach((line, i) =>\n parts.push(text(g.left - 8 * g.unit, row.center + 4 + (row.labelLines.length > 1 ? (i === 0 ? -6.5 : 6.5) : 0), line, \"end\")),\n );\n parts.push(text(g.x(row.total ?? 0) + 6 * g.unit, row.center + 4, row.valueText));\n }\n return svgRoot({ ...spec, height: g.height }, parts.join(\"\")).replace(\"<svg \", '<svg data-bar-layout=\"rows\" ');\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,17 @@
1
+ /** Portable chart contracts. This entry never imports Solid or browser APIs. */
2
+
3
+ export { barChartLayout, renderBarChartSvg, seriesBarLayout } from "../../content/chart-bar";
4
+ export { renderStateTimelineSvg, stateTimelineDomain, stateTimelineHeight } from "../../content/chart-state-timeline";
5
+ export { areaLayout, renderAreaSvg } from "./area";
6
+ export * from "./calendar";
7
+ export { hbarLayout, renderHbarLayoutSvg, renderHbarSvg } from "./hbar";
8
+ export * from "./inspection";
9
+ export { map } from "./map";
10
+ export * from "./render";
11
+ export { chartRenderHeight, preservesAspectRatio } from "./render-size";
12
+ export * from "./snapshot";
13
+ export { charts } from "./svg";
14
+ export { arcPathD, autoBin, bar, barGauge, boxplot, chartDatumSvg, computeBoxStats, computeDomain, donut, escapeXml, extendDomainToNice, gauge, heatmap, histogram, line, linearRegression, linePathD, mapLog, mapRange, markerPath, niceLogTicks, niceStep, normalizePadding, pie, scatter, smoothPathD, sparkline, stat, stateTimeline, stepPathD, svgRoot } from "./svg-renderers";
15
+ export { chartDatumRoles } from "./types";
16
+ export { renderWaterfallLayoutSvg, renderWaterfallSvg, waterfallLayout } from "./waterfall";
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["charts/core/index.ts"],"sourcesContent":["/** Portable chart contracts. This entry never imports Solid or browser APIs. */\n\nexport { type BarChartLayout, type BarChartOptions, barChartLayout, renderBarChartSvg, seriesBarLayout } from \"../../content/chart-bar\";\nexport {\n renderStateTimelineSvg,\n type StateTimelineChartOptions,\n type StateTimelineDomain,\n stateTimelineDomain,\n stateTimelineHeight,\n} from \"../../content/chart-state-timeline\";\nexport { type ChartTimeAxis } from \"../../content/chart-time-axis\";\nexport { type AreaOptions, areaLayout, renderAreaSvg } from \"./area\";\nexport * from \"./calendar\";\nexport { type HorizontalBarLayout, type HorizontalBarOptions, hbarLayout, renderHbarLayoutSvg, renderHbarSvg } from \"./hbar\";\nexport * from \"./inspection\";\nexport { map } from \"./map\";\nexport * from \"./render\";\nexport { chartRenderHeight, preservesAspectRatio } from \"./render-size\";\nexport * from \"./snapshot\";\nexport { charts } from \"./svg\";\nexport {\n type AxisOptions,\n arcPathD,\n autoBin,\n type BarItem,\n bar,\n barGauge,\n boxplot,\n type ChartOptions,\n chartDatumSvg,\n computeBoxStats,\n computeDomain,\n donut,\n escapeXml,\n extendDomainToNice,\n gauge,\n heatmap,\n histogram,\n type LineStyle,\n line,\n linearRegression,\n linePathD,\n type MapOptions,\n type MapPoint,\n type MapSeries,\n type MapViewport,\n type MarkerShape,\n mapLog,\n mapRange,\n markerPath,\n niceLogTicks,\n niceStep,\n normalizePadding,\n type Padding,\n type Point,\n pie,\n type ReferenceLine,\n type Series,\n type SliceItem,\n scatter,\n smoothPathD,\n sparkline,\n stat,\n stateTimeline,\n stepPathD,\n svgRoot,\n} from \"./svg-renderers\";\nexport {\n type ChartDateFormat,\n type ChartDatum,\n type ChartDatumRole,\n type ChartFormat,\n type ChartKind,\n type ChartNumberFormat,\n chartDatumRoles,\n} from \"./types\";\n\nexport { renderWaterfallLayoutSvg, renderWaterfallSvg, type WaterfallLayout, type WaterfallOptions, waterfallLayout } from \"./waterfall\";\n"],"mappings":"AAAA;;AAEA,SAAoD,cAAc,EAAE,iBAAiB,EAAE,eAAe,QAAQ,yBAAyB;AACvI,SACE,sBAAsB,EAGtB,mBAAmB,EACnB,mBAAmB,QACd,oCAAoC;AAE3C,SAA2B,UAAU,EAAE,aAAa,QAAQ,QAAQ;AACpE,cAAc,YAAY;AAC1B,SAA8D,UAAU,EAAE,mBAAmB,EAAE,aAAa,QAAQ,QAAQ;AAC5H,cAAc,cAAc;AAC5B,SAAS,GAAG,QAAQ,OAAO;AAC3B,cAAc,UAAU;AACxB,SAAS,iBAAiB,EAAE,oBAAoB,QAAQ,eAAe;AACvE,cAAc,YAAY;AAC1B,SAAS,MAAM,QAAQ,OAAO;AAC9B,SAEE,QAAQ,EACR,OAAO,EAEP,GAAG,EACH,QAAQ,EACR,OAAO,EAEP,aAAa,EACb,eAAe,EACf,aAAa,EACb,KAAK,EACL,SAAS,EACT,kBAAkB,EAClB,KAAK,EACL,OAAO,EACP,SAAS,EAET,IAAI,EACJ,gBAAgB,EAChB,SAAS,EAMT,MAAM,EACN,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,gBAAgB,EAGhB,GAAG,EAIH,OAAO,EACP,WAAW,EACX,SAAS,EACT,IAAI,EACJ,aAAa,EACb,SAAS,EACT,OAAO,QACF,iBAAiB;AACxB,SAOE,eAAe,QACV,SAAS;AAEhB,SAAS,wBAAwB,EAAE,kBAAkB,EAA+C,eAAe,QAAQ,aAAa","ignoreList":[]}
@@ -0,0 +1,9 @@
1
+ import { chartDatumRoles } from "./types";
2
+ export const sameChartDatum = (a, b) => a.role === b.role && a.index === b.index && a.seriesIndex === b.seriesIndex;
3
+ const object = value => typeof value === "object" && value !== null;
4
+ const pair = value => Array.isArray(value) && value.length === 2 && value.every(n => typeof n === "number" && Number.isFinite(n));
5
+ const roles = new Set(chartDatumRoles);
6
+ export function isChartDatum(value) {
7
+ return object(value) && Number.isInteger(value.index) && typeof value.index === "number" && value.index >= 0 && (value.seriesIndex === undefined || typeof value.seriesIndex === "number" && Number.isInteger(value.seriesIndex) && value.seriesIndex >= 0) && typeof value.role === "string" && roles.has(value.role) && pair(value.anchor) && (value.grid === undefined || pair(value.grid)) && (value.label === undefined || typeof value.label === "string") && Array.isArray(value.values) && value.values.every(field => object(field) && typeof field.key === "string" && (typeof field.value === "string" || typeof field.value === "number" && Number.isFinite(field.value)) && (field.formatted === undefined || typeof field.formatted === "string"));
8
+ }
9
+ //# sourceMappingURL=inspection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["charts/core/inspection.ts"],"sourcesContent":["import { type ChartDatum, type ChartKind, chartDatumRoles } from \"./types\";\n\nexport type ChartDatumRef = Pick<ChartDatum, \"role\" | \"index\" | \"seriesIndex\">;\nexport const sameChartDatum = (a: ChartDatumRef, b: ChartDatumRef) =>\n a.role === b.role && a.index === b.index && a.seriesIndex === b.seriesIndex;\n\nexport type ChartSelection = { kind: ChartKind; datum: ChartDatum };\nexport type ChartTooltip = { title?: string; rows: readonly { label: string; value: string }[] };\nexport type ChartTooltipFormatter = (selection: ChartSelection) => ChartTooltip;\n\nconst object = (value: unknown): value is Record<string, unknown> => typeof value === \"object\" && value !== null;\nconst pair = (value: unknown): value is [number, number] =>\n Array.isArray(value) && value.length === 2 && value.every((n) => typeof n === \"number\" && Number.isFinite(n));\nconst roles: ReadonlySet<string> = new Set(chartDatumRoles);\nexport function isChartDatum(value: unknown): value is ChartDatum {\n return (\n object(value) &&\n Number.isInteger(value.index) &&\n typeof value.index === \"number\" &&\n value.index >= 0 &&\n (value.seriesIndex === undefined ||\n (typeof value.seriesIndex === \"number\" && Number.isInteger(value.seriesIndex) && value.seriesIndex >= 0)) &&\n typeof value.role === \"string\" &&\n roles.has(value.role) &&\n pair(value.anchor) &&\n (value.grid === undefined || pair(value.grid)) &&\n (value.label === undefined || typeof value.label === \"string\") &&\n Array.isArray(value.values) &&\n value.values.every(\n (field) =>\n object(field) &&\n typeof field.key === \"string\" &&\n (typeof field.value === \"string\" || (typeof field.value === \"number\" && Number.isFinite(field.value))) &&\n (field.formatted === undefined || typeof field.formatted === \"string\"),\n )\n );\n}\n"],"mappings":"AAAA,SAA0C,eAAe,QAAQ,SAAS;AAG1E,OAAO,MAAM,cAAc,GAAG,CAAC,CAAgB,EAAE,CAAgB,KAC/D,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW;AAM7E,MAAM,MAAM,GAAI,KAAc,IAAuC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;AAChH,MAAM,IAAI,GAAI,KAAc,IAC1B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAE,CAAC,IAAK,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC/G,MAAM,KAA0B,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC;AAC3D,OAAO,SAAS,YAAY,CAAC,KAAc,EAAuB;EAChE,OACE,MAAM,CAAC,KAAK,CAAC,IACb,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAC7B,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAC/B,KAAK,CAAC,KAAK,IAAI,CAAC,KACf,KAAK,CAAC,WAAW,KAAK,SAAS,IAC7B,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,WAAW,IAAI,CAAE,CAAC,IAC3G,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAC9B,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IACrB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KACjB,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAC7C,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,IAC9D,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAC3B,KAAK,CAAC,MAAM,CAAC,KAAK,CACf,KAAK,IACJ,MAAM,CAAC,KAAK,CAAC,IACb,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,KAC5B,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAK,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC,KACrG,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,CACzE,CAAC;AAEL","ignoreList":[]}
@@ -0,0 +1,116 @@
1
+ import { WORLD_LAND_PATH, WORLD_MAP_HEIGHT, WORLD_MAP_WIDTH } from "./chart-map-data";
2
+ import { chartDatumSvg, clamp, computePlotArea, escapeXml, fmt, mapRange, measureLegendHeight, normalizePadding, renderHeader, renderLegend, svgRoot } from "./svg-renderers";
3
+ const isMapPoint = point => Number.isFinite(point.latitude) && Number.isFinite(point.longitude) && point.latitude >= -90 && point.latitude <= 90 && point.longitude >= -180 && point.longitude <= 180;
4
+ const MAP_MIN_ZOOM = 0;
5
+ const MAP_MAX_ZOOM = 5;
6
+ const normalizeMapViewport = viewport => {
7
+ const zoom = clamp(viewport && Number.isFinite(viewport.zoom) ? viewport.zoom : MAP_MIN_ZOOM, MAP_MIN_ZOOM, MAP_MAX_ZOOM);
8
+ const zoomScale = 2 ** zoom;
9
+ const latitudeLimit = 90 - 90 / zoomScale;
10
+ const longitudeLimit = 180 - 180 / zoomScale;
11
+ return {
12
+ latitude: clamp(viewport && Number.isFinite(viewport.latitude) ? viewport.latitude : 0, -latitudeLimit, latitudeLimit),
13
+ longitude: clamp(viewport && Number.isFinite(viewport.longitude) ? viewport.longitude : 0, -longitudeLimit, longitudeLimit),
14
+ zoom
15
+ };
16
+ };
17
+
18
+ /** Render geographic point series over a dependency-free world land map. */
19
+ export function map(opts) {
20
+ const width = opts.width ?? 640;
21
+ const height = opts.height ?? 340;
22
+ const padding = normalizePadding(opts.padding ?? {
23
+ top: 12,
24
+ right: 16,
25
+ bottom: 12,
26
+ left: 16
27
+ });
28
+ const header = renderHeader(width, opts.title, opts.subtitle);
29
+ const legendItems = opts.legend ? opts.series.map((series, index) => ({
30
+ label: series.label && series.label.length > 0 ? series.label : `Series ${index + 1}`,
31
+ seriesIndex: index
32
+ })) : [];
33
+ const legendHeight = measureLegendHeight(legendItems, width);
34
+ const area = computePlotArea(width, height, padding, false, false, header.height, legendHeight);
35
+ const availableWidth = Math.max(0, area.x1 - area.x0);
36
+ const availableHeight = Math.max(0, area.y1 - area.y0);
37
+ const scale = Math.max(0, Math.min(availableWidth / WORLD_MAP_WIDTH, availableHeight / WORLD_MAP_HEIGHT));
38
+ const mapWidth = WORLD_MAP_WIDTH * scale;
39
+ const mapHeight = WORLD_MAP_HEIGHT * scale;
40
+ const mapX = area.x0 + (availableWidth - mapWidth) / 2;
41
+ const mapY = area.y0 + (availableHeight - mapHeight) / 2;
42
+ const viewport = normalizeMapViewport(opts.viewport);
43
+ const zoomScale = 2 ** viewport.zoom;
44
+ const projectedScale = scale * zoomScale;
45
+ const centerWorldX = (viewport.longitude + 180) / 360 * WORLD_MAP_WIDTH;
46
+ const centerWorldY = (90 - viewport.latitude) / 180 * WORLD_MAP_HEIGHT;
47
+ const finitePoints = opts.series.flatMap((series, seriesIndex) => series.data.map((point, index) => ({
48
+ point,
49
+ seriesIndex,
50
+ index
51
+ })).filter(({
52
+ point
53
+ }) => isMapPoint(point)));
54
+ let sizeMin = Number.POSITIVE_INFINITY;
55
+ let sizeMax = Number.NEGATIVE_INFINITY;
56
+ for (const {
57
+ point
58
+ } of finitePoints) {
59
+ if (typeof point.size !== "number" || !Number.isFinite(point.size) || point.size < 0) {
60
+ continue;
61
+ }
62
+ if (point.size < sizeMin) sizeMin = point.size;
63
+ if (point.size > sizeMax) sizeMax = point.size;
64
+ }
65
+ const hasSizes = Number.isFinite(sizeMin) && Number.isFinite(sizeMax);
66
+ const requestedSizeRange = opts.sizeRange ?? [3, 12];
67
+ const firstRadius = Number.isFinite(requestedSizeRange[0]) ? Math.max(0, requestedSizeRange[0]) : 3;
68
+ const secondRadius = Number.isFinite(requestedSizeRange[1]) ? Math.max(0, requestedSizeRange[1]) : 12;
69
+ const radiusRange = firstRadius <= secondRadius ? [firstRadius, secondRadius] : [secondRadius, firstRadius];
70
+ const body = [header.svg];
71
+ if (scale > 0) {
72
+ body.push(`<svg class="stdlib-chart-map-viewport" x="${fmt(mapX)}" y="${fmt(mapY)}" width="${fmt(mapWidth)}" height="${fmt(mapHeight)}" viewBox="0 0 ${fmt(mapWidth)} ${fmt(mapHeight)}" overflow="hidden">`, `<path class="stdlib-chart-map-land" fill-rule="evenodd" transform="translate(${fmt(mapWidth / 2)} ${fmt(mapHeight / 2)}) scale(${fmt(projectedScale)}) translate(${fmt(-centerWorldX)} ${fmt(-centerWorldY)})" d="${WORLD_LAND_PATH}"/>`);
73
+ for (const {
74
+ point,
75
+ seriesIndex,
76
+ index
77
+ } of finitePoints) {
78
+ const pointWorldX = (point.longitude + 180) / 360 * WORLD_MAP_WIDTH;
79
+ const pointWorldY = (90 - point.latitude) / 180 * WORLD_MAP_HEIGHT;
80
+ const x = mapWidth / 2 + (pointWorldX - centerWorldX) * projectedScale;
81
+ const y = mapHeight / 2 + (pointWorldY - centerWorldY) * projectedScale;
82
+ const radius = hasSizes && typeof point.size === "number" && Number.isFinite(point.size) && point.size >= 0 ? sizeMin === sizeMax ? (radiusRange[0] + radiusRange[1]) / 2 : mapRange(point.size, [sizeMin, sizeMax], radiusRange) : 4;
83
+ const title = point.label && point.label.length > 0 ? `<title>${escapeXml(point.label)}</title>` : "";
84
+ body.push(chartDatumSvg(`<circle class="stdlib-chart-map-point stdlib-chart-series-${seriesIndex % 8}" cx="${fmt(x)}" cy="${fmt(y)}" r="${fmt(radius)}">${title}</circle>`, {
85
+ index,
86
+ seriesIndex,
87
+ role: "point",
88
+ label: point.label ?? opts.series[seriesIndex]?.label,
89
+ anchor: [x, y],
90
+ values: [{
91
+ key: "latitude",
92
+ value: point.latitude
93
+ }, {
94
+ key: "longitude",
95
+ value: point.longitude
96
+ }, ...(point.size !== undefined && Number.isFinite(point.size) ? [{
97
+ key: "size",
98
+ value: point.size
99
+ }] : [])]
100
+ }, opts.inspect && x >= 0 && y >= 0 && x <= mapWidth && y <= mapHeight));
101
+ }
102
+ body.push("</svg>");
103
+ }
104
+ if (finitePoints.length === 0) {
105
+ body.push(`<text class="stdlib-chart-map-empty" x="${fmt(area.x0 + availableWidth / 2)}" y="${fmt(area.y0 + availableHeight / 2)}" text-anchor="middle" dominant-baseline="middle">No data</text>`);
106
+ }
107
+ if (legendItems.length > 0) {
108
+ body.push(renderLegend(legendItems, width, height - legendHeight).svg);
109
+ }
110
+ return svgRoot({
111
+ width,
112
+ height,
113
+ className: opts.className
114
+ }, body.join(""));
115
+ }
116
+ //# sourceMappingURL=map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["charts/core/map.ts"],"sourcesContent":["import { WORLD_LAND_PATH, WORLD_MAP_HEIGHT, WORLD_MAP_WIDTH } from \"./chart-map-data\";\nimport {\n chartDatumSvg,\n clamp,\n computePlotArea,\n escapeXml,\n fmt,\n type MapOptions,\n type MapPoint,\n type MapViewport,\n mapRange,\n measureLegendHeight,\n normalizePadding,\n renderHeader,\n renderLegend,\n svgRoot,\n} from \"./svg-renderers\";\n\nconst isMapPoint = (point: MapPoint): boolean =>\n Number.isFinite(point.latitude) &&\n Number.isFinite(point.longitude) &&\n point.latitude >= -90 &&\n point.latitude <= 90 &&\n point.longitude >= -180 &&\n point.longitude <= 180;\n\nconst MAP_MIN_ZOOM = 0;\nconst MAP_MAX_ZOOM = 5;\n\nconst normalizeMapViewport = (viewport: MapViewport | undefined): MapViewport => {\n const zoom = clamp(viewport && Number.isFinite(viewport.zoom) ? viewport.zoom : MAP_MIN_ZOOM, MAP_MIN_ZOOM, MAP_MAX_ZOOM);\n const zoomScale = 2 ** zoom;\n const latitudeLimit = 90 - 90 / zoomScale;\n const longitudeLimit = 180 - 180 / zoomScale;\n\n return {\n latitude: clamp(viewport && Number.isFinite(viewport.latitude) ? viewport.latitude : 0, -latitudeLimit, latitudeLimit),\n longitude: clamp(viewport && Number.isFinite(viewport.longitude) ? viewport.longitude : 0, -longitudeLimit, longitudeLimit),\n zoom,\n };\n};\n\n/** Render geographic point series over a dependency-free world land map. */\nexport function map(opts: MapOptions): string {\n const width = opts.width ?? 640;\n const height = opts.height ?? 340;\n const padding = normalizePadding(opts.padding ?? { top: 12, right: 16, bottom: 12, left: 16 });\n const header = renderHeader(width, opts.title, opts.subtitle);\n const legendItems = opts.legend\n ? opts.series.map((series, index) => ({\n label: series.label && series.label.length > 0 ? series.label : `Series ${index + 1}`,\n seriesIndex: index,\n }))\n : [];\n const legendHeight = measureLegendHeight(legendItems, width);\n const area = computePlotArea(width, height, padding, false, false, header.height, legendHeight);\n const availableWidth = Math.max(0, area.x1 - area.x0);\n const availableHeight = Math.max(0, area.y1 - area.y0);\n const scale = Math.max(0, Math.min(availableWidth / WORLD_MAP_WIDTH, availableHeight / WORLD_MAP_HEIGHT));\n const mapWidth = WORLD_MAP_WIDTH * scale;\n const mapHeight = WORLD_MAP_HEIGHT * scale;\n const mapX = area.x0 + (availableWidth - mapWidth) / 2;\n const mapY = area.y0 + (availableHeight - mapHeight) / 2;\n const viewport = normalizeMapViewport(opts.viewport);\n const zoomScale = 2 ** viewport.zoom;\n const projectedScale = scale * zoomScale;\n const centerWorldX = ((viewport.longitude + 180) / 360) * WORLD_MAP_WIDTH;\n const centerWorldY = ((90 - viewport.latitude) / 180) * WORLD_MAP_HEIGHT;\n\n const finitePoints = opts.series.flatMap((series, seriesIndex) =>\n series.data.map((point, index) => ({ point, seriesIndex, index })).filter(({ point }) => isMapPoint(point)),\n );\n\n let sizeMin = Number.POSITIVE_INFINITY;\n let sizeMax = Number.NEGATIVE_INFINITY;\n for (const { point } of finitePoints) {\n if (typeof point.size !== \"number\" || !Number.isFinite(point.size) || point.size < 0) {\n continue;\n }\n if (point.size < sizeMin) sizeMin = point.size;\n if (point.size > sizeMax) sizeMax = point.size;\n }\n const hasSizes = Number.isFinite(sizeMin) && Number.isFinite(sizeMax);\n const requestedSizeRange = opts.sizeRange ?? [3, 12];\n const firstRadius = Number.isFinite(requestedSizeRange[0]) ? Math.max(0, requestedSizeRange[0]) : 3;\n const secondRadius = Number.isFinite(requestedSizeRange[1]) ? Math.max(0, requestedSizeRange[1]) : 12;\n const radiusRange: [number, number] = firstRadius <= secondRadius ? [firstRadius, secondRadius] : [secondRadius, firstRadius];\n\n const body: string[] = [header.svg];\n if (scale > 0) {\n body.push(\n `<svg class=\"stdlib-chart-map-viewport\" x=\"${fmt(mapX)}\" y=\"${fmt(mapY)}\" width=\"${fmt(mapWidth)}\" height=\"${fmt(mapHeight)}\" viewBox=\"0 0 ${fmt(mapWidth)} ${fmt(mapHeight)}\" overflow=\"hidden\">`,\n `<path class=\"stdlib-chart-map-land\" fill-rule=\"evenodd\" transform=\"translate(${fmt(mapWidth / 2)} ${fmt(mapHeight / 2)}) scale(${fmt(projectedScale)}) translate(${fmt(-centerWorldX)} ${fmt(-centerWorldY)})\" d=\"${WORLD_LAND_PATH}\"/>`,\n );\n\n for (const { point, seriesIndex, index } of finitePoints) {\n const pointWorldX = ((point.longitude + 180) / 360) * WORLD_MAP_WIDTH;\n const pointWorldY = ((90 - point.latitude) / 180) * WORLD_MAP_HEIGHT;\n const x = mapWidth / 2 + (pointWorldX - centerWorldX) * projectedScale;\n const y = mapHeight / 2 + (pointWorldY - centerWorldY) * projectedScale;\n const radius =\n hasSizes && typeof point.size === \"number\" && Number.isFinite(point.size) && point.size >= 0\n ? sizeMin === sizeMax\n ? (radiusRange[0] + radiusRange[1]) / 2\n : mapRange(point.size, [sizeMin, sizeMax], radiusRange)\n : 4;\n const title = point.label && point.label.length > 0 ? `<title>${escapeXml(point.label)}</title>` : \"\";\n body.push(\n chartDatumSvg(\n `<circle class=\"stdlib-chart-map-point stdlib-chart-series-${seriesIndex % 8}\" cx=\"${fmt(x)}\" cy=\"${fmt(y)}\" r=\"${fmt(radius)}\">${title}</circle>`,\n {\n index,\n seriesIndex,\n role: \"point\",\n label: point.label ?? opts.series[seriesIndex]?.label,\n anchor: [x, y],\n values: [\n { key: \"latitude\", value: point.latitude },\n { key: \"longitude\", value: point.longitude },\n ...(point.size !== undefined && Number.isFinite(point.size) ? [{ key: \"size\", value: point.size }] : []),\n ],\n },\n opts.inspect && x >= 0 && y >= 0 && x <= mapWidth && y <= mapHeight,\n ),\n );\n }\n body.push(\"</svg>\");\n }\n\n if (finitePoints.length === 0) {\n body.push(\n `<text class=\"stdlib-chart-map-empty\" x=\"${fmt(area.x0 + availableWidth / 2)}\" y=\"${fmt(area.y0 + availableHeight / 2)}\" text-anchor=\"middle\" dominant-baseline=\"middle\">No data</text>`,\n );\n }\n if (legendItems.length > 0) {\n body.push(renderLegend(legendItems, width, height - legendHeight).svg);\n }\n\n return svgRoot({ width, height, className: opts.className }, body.join(\"\"));\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,35 @@
1
+ import { renderBarChartSvg } from "../../content/chart-bar";
2
+ import { renderStateTimelineSvg } from "../../content/chart-state-timeline";
3
+ import { renderAreaSvg } from "./area";
4
+ import { renderHeatmapSvg } from "./calendar";
5
+ import { renderHbarSvg } from "./hbar";
6
+ import { map } from "./map";
7
+ import { barGauge, boxplot, donut, gauge, histogram, line, pie, scatter, sparkline, stat } from "./svg-renderers";
8
+ import { renderWaterfallSvg } from "./waterfall";
9
+
10
+ // Add one renderer here: its key defines the discriminator, ChartKind and the capitalized Chart namespace member.
11
+ // Keep kind-specific adaptations in renderChartSvg and add a fixture to the namespace parity test.
12
+ const createChartRenderers = () => ({
13
+ waterfall: renderWaterfallSvg,
14
+ area: renderAreaSvg,
15
+ line: line,
16
+ bar: renderBarChartSvg,
17
+ hbar: renderHbarSvg,
18
+ pie: pie,
19
+ donut: donut,
20
+ scatter: scatter,
21
+ sparkline: sparkline,
22
+ histogram: histogram,
23
+ boxplot: boxplot,
24
+ gauge: gauge,
25
+ barGauge: barGauge,
26
+ stat: stat,
27
+ heatmap: renderHeatmapSvg,
28
+ map: map,
29
+ stateTimeline: renderStateTimelineSvg
30
+ });
31
+ export const chartRenderers = /* @__PURE__ */createChartRenderers();
32
+ // Object.entries loses literal keys; names are constructed from those same keys here.
33
+ const kinds = () => Object.fromEntries(Object.keys(chartRenderers).map(kind => [kind[0].toUpperCase() + kind.slice(1), kind]));
34
+ export const chartKinds = /* @__PURE__ */kinds();
35
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["charts/core/registry.ts"],"sourcesContent":["import { renderBarChartSvg } from \"../../content/chart-bar\";\nimport { renderStateTimelineSvg } from \"../../content/chart-state-timeline\";\nimport { renderAreaSvg } from \"./area\";\nimport { renderHeatmapSvg } from \"./calendar\";\nimport { renderHbarSvg } from \"./hbar\";\nimport { map } from \"./map\";\nimport { barGauge, boxplot, donut, gauge, histogram, line, pie, scatter, sparkline, stat } from \"./svg-renderers\";\nimport { renderWaterfallSvg } from \"./waterfall\";\n\n// Add one renderer here: its key defines the discriminator, ChartKind and the capitalized Chart namespace member.\n// Keep kind-specific adaptations in renderChartSvg and add a fixture to the namespace parity test.\nconst createChartRenderers = () => ({\n waterfall: renderWaterfallSvg,\n area: renderAreaSvg,\n line: line,\n bar: renderBarChartSvg,\n hbar: renderHbarSvg,\n pie: pie,\n donut: donut,\n scatter: scatter,\n sparkline: sparkline,\n histogram: histogram,\n boxplot: boxplot,\n gauge: gauge,\n barGauge: barGauge,\n stat: stat,\n heatmap: renderHeatmapSvg,\n map: map,\n stateTimeline: renderStateTimelineSvg,\n});\nexport const chartRenderers = /* @__PURE__ */ createChartRenderers();\ntype Kind = keyof typeof chartRenderers;\ntype ChartKinds = { [K in Kind as Capitalize<K>]: K };\n// Object.entries loses literal keys; names are constructed from those same keys here.\nconst kinds = () =>\n Object.fromEntries(Object.keys(chartRenderers).map((kind) => [kind[0]!.toUpperCase() + kind.slice(1), kind])) as ChartKinds;\nexport const chartKinds = /* @__PURE__ */ kinds();\n"],"mappings":"AAAA,SAAS,iBAAiB,QAAQ,yBAAyB;AAC3D,SAAS,sBAAsB,QAAQ,oCAAoC;AAC3E,SAAS,aAAa,QAAQ,QAAQ;AACtC,SAAS,gBAAgB,QAAQ,YAAY;AAC7C,SAAS,aAAa,QAAQ,QAAQ;AACtC,SAAS,GAAG,QAAQ,OAAO;AAC3B,SAAS,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,QAAQ,iBAAiB;AACjH,SAAS,kBAAkB,QAAQ,aAAa;;AAEhD;AACA;AACA,MAAM,oBAAoB,GAAG,OAAO;EAClC,SAAS,EAAE,kBAAkB;EAC7B,IAAI,EAAE,aAAa;EACnB,IAAI,EAAE,IAAI;EACV,GAAG,EAAE,iBAAiB;EACtB,IAAI,EAAE,aAAa;EACnB,GAAG,EAAE,GAAG;EACR,KAAK,EAAE,KAAK;EACZ,OAAO,EAAE,OAAO;EAChB,SAAS,EAAE,SAAS;EACpB,SAAS,EAAE,SAAS;EACpB,OAAO,EAAE,OAAO;EAChB,KAAK,EAAE,KAAK;EACZ,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,IAAI;EACV,OAAO,EAAE,gBAAgB;EACzB,GAAG,EAAE,GAAG;EACR,aAAa,EAAE;AACjB,CAAC,CAAC;AACF,OAAO,MAAM,cAAc,GAAG,eAAgB,oBAAoB,CAAC,CAAC;AAGpE;AACA,MAAM,KAAK,GAAG,MACZ,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAE,IAAI,IAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAe;AAC7H,OAAO,MAAM,UAAU,GAAG,eAAgB,KAAK,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ import { barChartLayout } from "../../content/chart-bar";
2
+ import { stateTimelineHeight } from "../../content/chart-state-timeline";
3
+ import { hbarLayout } from "./hbar";
4
+ /** Standard logical height, or compact bar-gauge rows for a host without an explicit height. */
5
+ export const chartRenderHeight = (props, sizing = {}) => {
6
+ if (props.kind === "stateTimeline") return stateTimelineHeight(props.rows.length, props.legend !== false);
7
+ if (props.kind === "bar") return barChartLayout(props).height;
8
+ if (props.kind === "hbar") return hbarLayout(props).height;
9
+ if (props.kind === "barGauge") return Math.max(sizing.contentHeight ? 80 : 280, (props.title || props.subtitle ? 42 : 16) + props.data.length * 28 + 14);
10
+ return 280;
11
+ };
12
+ export const preservesAspectRatio = kind => kind === "map" || kind === "pie" || kind === "donut" || kind === "gauge";
13
+ //# sourceMappingURL=render-size.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["charts/core/render-size.ts"],"sourcesContent":["import { barChartLayout } from \"../../content/chart-bar\";\nimport { stateTimelineHeight } from \"../../content/chart-state-timeline\";\nimport { hbarLayout } from \"./hbar\";\nimport type { ChartRenderOptions } from \"./render\";\nimport type { ChartKind } from \"./types\";\n\n/** Standard logical height, or compact bar-gauge rows for a host without an explicit height. */\nexport const chartRenderHeight = (props: ChartRenderOptions, sizing: { contentHeight?: boolean } = {}): number => {\n if (props.kind === \"stateTimeline\") return stateTimelineHeight(props.rows.length, props.legend !== false);\n if (props.kind === \"bar\") return barChartLayout(props).height;\n if (props.kind === \"hbar\") return hbarLayout(props).height;\n if (props.kind === \"barGauge\")\n return Math.max(sizing.contentHeight ? 80 : 280, (props.title || props.subtitle ? 42 : 16) + props.data.length * 28 + 14);\n return 280;\n};\n\nexport const preservesAspectRatio = (kind: ChartKind) => kind === \"map\" || kind === \"pie\" || kind === \"donut\" || kind === \"gauge\";\n"],"mappings":"AAAA,SAAS,cAAc,QAAQ,yBAAyB;AACxD,SAAS,mBAAmB,QAAQ,oCAAoC;AACxE,SAAS,UAAU,QAAQ,QAAQ;AAInC;AACA,OAAO,MAAM,iBAAiB,GAAG,CAAC,KAAyB,EAAE,MAAmC,GAAG,CAAC,CAAC,KAAa;EAChH,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,OAAO,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC;EACzG,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC,MAAM;EAC7D,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM;EAC1D,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC;EAC3H,OAAO,GAAG;AACZ,CAAC;AAED,OAAO,MAAM,oBAAoB,GAAI,IAAe,IAAK,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO","ignoreList":[]}
@@ -0,0 +1,113 @@
1
+ import { renderBarChartSvg } from "../../content/chart-bar";
2
+ import { lineGapsSvg } from "../../content/chart-line-gaps";
3
+ import { DEFAULT_MAP_VIEWPORT, normalizeMapViewport } from "../../content/chart-map-viewport";
4
+ import { renderStateTimelineSvg } from "../../content/chart-state-timeline";
5
+ import { responsiveChartSvg, responsiveMapSvg } from "../../content/chart-svg";
6
+ import { timeAxisSvg } from "../../content/chart-time-axis";
7
+ import { renderAreaSvg } from "./area";
8
+ import { renderHbarSvg } from "./hbar";
9
+ import { chartRenderers } from "./registry";
10
+ import { renderWaterfallSvg } from "./waterfall";
11
+ export { chartRenderHeight, preservesAspectRatio } from "./render-size";
12
+ import { preservesAspectRatio } from "./render-size";
13
+
14
+ /** Shared logical SVG renderer; callbacks and browser interaction stay with the Solid host. */
15
+ export const renderChartSvg = (props, width, height, mapViewport, timelineViewport, renderLocale) => {
16
+ if (props.kind === "heatmap" && props.layout === "calendar") return chartRenderers.heatmap({
17
+ ...props,
18
+ width,
19
+ height,
20
+ inspect: true
21
+ });
22
+ const {
23
+ kind,
24
+ zoomFocus: _zoomFocus,
25
+ legendPlacement: _legendPlacement,
26
+ timeAxis: _timeAxis,
27
+ ...opts
28
+ } = props;
29
+ if (kind === "stateTimeline") {
30
+ return responsiveChartSvg(renderStateTimelineSvg({
31
+ ...opts,
32
+ width,
33
+ height,
34
+ viewport: timelineViewport,
35
+ interactive: true
36
+ }));
37
+ }
38
+ if (kind === "hbar") return responsiveChartSvg(renderHbarSvg({
39
+ ...opts,
40
+ width,
41
+ height,
42
+ inspect: true
43
+ }));
44
+ if (kind === "waterfall") return responsiveChartSvg(renderWaterfallSvg({
45
+ ...opts,
46
+ displayWidth: opts.displayWidth ?? 296,
47
+ locale: opts.locale ?? renderLocale,
48
+ width,
49
+ height,
50
+ inspect: true
51
+ }, true));
52
+ if (kind === "area") return responsiveChartSvg(renderAreaSvg({
53
+ ...opts,
54
+ locale: opts.locale ?? renderLocale,
55
+ legend: false,
56
+ width,
57
+ height,
58
+ inspect: true
59
+ }));
60
+ if (kind === "bar") return responsiveChartSvg(renderBarChartSvg({
61
+ ...opts,
62
+ width,
63
+ height,
64
+ inspect: true
65
+ }));
66
+ // A time axis needs an explicit X domain: it maps its round ticks onto the axis the renderer drew over it.
67
+ const timeAxis = props.kind === "line" ? props.timeAxis : undefined;
68
+ const timeDomain = timeAxis && props.kind === "line" ? lineTimeDomain(props) : undefined;
69
+ let svg = chartRenderers[kind]({
70
+ ...opts,
71
+ ...(timeDomain && props.kind === "line" ? {
72
+ xAxis: {
73
+ ...props.xAxis,
74
+ domain: timeDomain,
75
+ format: () => ""
76
+ }
77
+ } : {}),
78
+ ...(props.kind === "line" && props.legend && props.legendPlacement === "top-start" ? {
79
+ legend: false
80
+ } : {}),
81
+ ...(kind === "map" ? {
82
+ viewport: DEFAULT_MAP_VIEWPORT
83
+ } : {}),
84
+ width,
85
+ height,
86
+ inspect: true
87
+ });
88
+ if (props.kind === "line" && props.maxGap !== undefined) {
89
+ if (props.area || props.errorBand) throw new Error("Chart maxGap does not support area or errorBand fills");
90
+ svg = lineGapsSvg(svg, props.maxGap, props);
91
+ }
92
+ if (timeAxis && timeDomain && props.kind === "line") svg = timeAxisSvg(svg, timeDomain, timeAxis, (props.xAxis?.ticks ?? 3) + 2, props.xAxis?.format);
93
+ if (props.kind === "map") return responsiveMapSvg(svg, width, height, normalizeMapViewport(mapViewport ?? props.viewport));
94
+ return preservesAspectRatio(kind) ? svg : responsiveChartSvg(svg);
95
+ };
96
+
97
+ /** The given X domain, or the span of the plotted instants. */
98
+ const lineTimeDomain = props => {
99
+ if (props.xAxis?.domain) return props.xAxis.domain;
100
+ const xs = props.series.flatMap(series => series.data.map(point => point.x)).filter(Number.isFinite);
101
+ if (!xs.length) return undefined;
102
+ const lo = Math.min(...xs),
103
+ hi = Math.max(...xs);
104
+ return lo < hi ? [lo, hi] : undefined;
105
+ };
106
+ /** Lay out a chart in a fixed logical coordinate space, without browser measurement. */
107
+ export const layout = (spec, size) => ({
108
+ ...size,
109
+ kind: spec.kind,
110
+ svg: renderChartSvg(spec, size.width, size.height)
111
+ });
112
+ export const toSvg = scene => scene.svg;
113
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["charts/core/render.ts"],"sourcesContent":["import { type BarChartOptions, renderBarChartSvg } from \"../../content/chart-bar\";\nimport { lineGapsSvg } from \"../../content/chart-line-gaps\";\nimport { DEFAULT_MAP_VIEWPORT, normalizeMapViewport } from \"../../content/chart-map-viewport\";\nimport { renderStateTimelineSvg, type StateTimelineChartOptions, type StateTimelineDomain } from \"../../content/chart-state-timeline\";\nimport { responsiveChartSvg, responsiveMapSvg } from \"../../content/chart-svg\";\nimport { type ChartTimeAxis, timeAxisSvg } from \"../../content/chart-time-axis\";\nimport { type AreaOptions, renderAreaSvg } from \"./area\";\nimport { type HorizontalBarOptions, renderHbarSvg } from \"./hbar\";\nimport { chartRenderers } from \"./registry\";\nimport type { MapViewport } from \"./svg\";\nimport type { ChartKind } from \"./types\";\nimport { renderWaterfallSvg, type WaterfallOptions } from \"./waterfall\";\n\ntype DrawingOptions<T> = T extends unknown ? Omit<T, \"width\" | \"height\" | \"inspect\" | \"interactive\"> : never;\ntype RenderOptions<T> = T extends unknown ? Omit<T, \"legendPlacement\"> : never;\n\nexport type ChartDrawingOptions = {\n [K in ChartKind]: { kind: K } & (K extends \"map\"\n ? {\n /** Target when zooming in from the world view. Defaults to Europe (50, 10). */\n zoomFocus?: Pick<MapViewport, \"latitude\" | \"longitude\">;\n }\n : {}) &\n (K extends \"line\"\n ? {\n /** Largest connected X distance; positive, finite, without area/errorBand fills. */\n maxGap?: number;\n /** Wrap the legend above the plot inside the caller's total chart height. Requires legend=true. */\n legendPlacement?: \"top-start\";\n /** Round ticks for instant X values (Unix ms), in the supplied zone. xAxis.format labels them. */\n timeAxis?: ChartTimeAxis;\n }\n : {}) &\n DrawingOptions<Parameters<(typeof chartRenderers)[K]>[0]>;\n}[ChartKind];\nexport type ChartRenderOptions = RenderOptions<ChartDrawingOptions>;\n\nexport { chartRenderHeight, preservesAspectRatio } from \"./render-size\";\n\nimport { preservesAspectRatio } from \"./render-size\";\n\n/** Shared logical SVG renderer; callbacks and browser interaction stay with the Solid host. */\nexport const renderChartSvg = (\n props: ChartDrawingOptions,\n width: number,\n height: number,\n mapViewport?: MapViewport,\n timelineViewport?: StateTimelineDomain,\n renderLocale?: string,\n): string => {\n if (props.kind === \"heatmap\" && props.layout === \"calendar\") return chartRenderers.heatmap({ ...props, width, height, inspect: true });\n const {\n kind,\n zoomFocus: _zoomFocus,\n legendPlacement: _legendPlacement,\n timeAxis: _timeAxis,\n ...opts\n } = props as ChartDrawingOptions & {\n zoomFocus?: Pick<MapViewport, \"latitude\" | \"longitude\">;\n legendPlacement?: \"top-start\";\n timeAxis?: ChartTimeAxis;\n };\n if (kind === \"stateTimeline\") {\n return responsiveChartSvg(\n renderStateTimelineSvg({\n ...(opts as StateTimelineChartOptions),\n width,\n height,\n viewport: timelineViewport,\n interactive: true,\n }),\n );\n }\n if (kind === \"hbar\") return responsiveChartSvg(renderHbarSvg({ ...(opts as HorizontalBarOptions), width, height, inspect: true }));\n if (kind === \"waterfall\")\n return responsiveChartSvg(\n renderWaterfallSvg(\n {\n ...(opts as WaterfallOptions),\n displayWidth: (opts as WaterfallOptions).displayWidth ?? 296,\n locale: (opts as WaterfallOptions).locale ?? renderLocale,\n width,\n height,\n inspect: true,\n },\n true,\n ),\n );\n if (kind === \"area\")\n return responsiveChartSvg(\n renderAreaSvg({\n ...(opts as AreaOptions),\n locale: (opts as AreaOptions).locale ?? renderLocale,\n legend: false,\n width,\n height,\n inspect: true,\n }),\n );\n if (kind === \"bar\") return responsiveChartSvg(renderBarChartSvg({ ...(opts as BarChartOptions), width, height, inspect: true }));\n // A time axis needs an explicit X domain: it maps its round ticks onto the axis the renderer drew over it.\n const timeAxis = props.kind === \"line\" ? props.timeAxis : undefined;\n const timeDomain = timeAxis && props.kind === \"line\" ? lineTimeDomain(props) : undefined;\n let svg = (chartRenderers[kind] as (o: unknown) => string)({\n ...opts,\n ...(timeDomain && props.kind === \"line\" ? { xAxis: { ...props.xAxis, domain: timeDomain, format: () => \"\" } } : {}),\n ...(props.kind === \"line\" && props.legend && props.legendPlacement === \"top-start\" ? { legend: false } : {}),\n ...(kind === \"map\" ? { viewport: DEFAULT_MAP_VIEWPORT } : {}),\n width,\n height,\n inspect: true,\n });\n if (props.kind === \"line\" && props.maxGap !== undefined) {\n if (props.area || props.errorBand) throw new Error(\"Chart maxGap does not support area or errorBand fills\");\n svg = lineGapsSvg(svg, props.maxGap, props);\n }\n if (timeAxis && timeDomain && props.kind === \"line\")\n svg = timeAxisSvg(svg, timeDomain, timeAxis, (props.xAxis?.ticks ?? 3) + 2, props.xAxis?.format);\n if (props.kind === \"map\") return responsiveMapSvg(svg, width, height, normalizeMapViewport(mapViewport ?? props.viewport));\n return preservesAspectRatio(kind) ? svg : responsiveChartSvg(svg);\n};\n\n/** The given X domain, or the span of the plotted instants. */\nconst lineTimeDomain = (props: Extract<ChartDrawingOptions, { kind: \"line\" }>): [number, number] | undefined => {\n if (props.xAxis?.domain) return props.xAxis.domain;\n const xs = props.series.flatMap((series) => series.data.map((point) => point.x)).filter(Number.isFinite);\n if (!xs.length) return undefined;\n const lo = Math.min(...xs),\n hi = Math.max(...xs);\n return lo < hi ? [lo, hi] : undefined;\n};\n\nexport type ChartSize = { width: number; height: number };\nexport type ChartScene = ChartSize & { kind: ChartKind; svg: string };\n/** Lay out a chart in a fixed logical coordinate space, without browser measurement. */\nexport const layout = (spec: ChartDrawingOptions, size: ChartSize): ChartScene => ({\n ...size,\n kind: spec.kind,\n svg: renderChartSvg(spec, size.width, size.height),\n});\nexport const toSvg = (scene: ChartScene): string => scene.svg;\n"],"mappings":"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","ignoreList":[]}