@fundar/data-chart-telling 1.0.0 → 1.2.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 (560) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/README.md +58 -19
  3. package/dist/configuration/config.svelte.d.ts +1 -1
  4. package/dist/configuration/config.svelte.js +172 -95
  5. package/dist/configuration/themes/index.d.ts +5 -1304
  6. package/dist/index.d.ts +24 -14
  7. package/dist/index.js +20 -10
  8. package/dist/layout/base/BasePlotLayout.svelte +129 -51
  9. package/dist/layout/base/BasePlotLayout.svelte.d.ts +1 -38
  10. package/dist/layout/coordinates/CoordinatesLayout.svelte +42 -40
  11. package/dist/layout/coordinates/CoordinatesLayout.svelte.d.ts +0 -2
  12. package/dist/layout/coordinates/ProjectionZoom.svelte +48 -0
  13. package/dist/layout/coordinates/ProjectionZoom.svelte.d.ts +10 -0
  14. package/dist/layout/coordinates/ZoomedProjection.d.ts +11 -0
  15. package/dist/layout/coordinates/ZoomedProjection.js +24 -0
  16. package/dist/layout/coordinates/camera.svelte.js +11 -8
  17. package/dist/layout/coordinates/projections/argentina.js +1 -1
  18. package/dist/layout/coordinates/projections/fit.d.ts +1 -1
  19. package/dist/layout/coordinates/projections/fit.js +1 -1
  20. package/dist/layout/coordinates/zoom.svelte.d.ts +4 -5
  21. package/dist/layout/coordinates/zoom.svelte.js +4 -5
  22. package/dist/layout/facet/FacetLayout.svelte +1 -1
  23. package/dist/layout/facet/config.js +1 -1
  24. package/dist/layout/figure/Figure.svelte +2 -0
  25. package/dist/layout/geometry/GeometryLayout.svelte +14 -9
  26. package/dist/layout/geometry/GeometryLayout.svelte.d.ts +0 -3
  27. package/dist/layout/geometry/MarkerOffset.svelte +28 -0
  28. package/dist/layout/geometry/MarkerOffset.svelte.d.ts +13 -0
  29. package/dist/layout/grid/GridCell.svelte +6 -8
  30. package/dist/layout/hover/HoverSettings.d.ts +20 -6
  31. package/dist/layout/hover/HoverSettings.js +29 -4
  32. package/dist/layout/legend/ContinuousSection.svelte +44 -9
  33. package/dist/layout/legend/DiscreteBadgeItem.svelte +2 -2
  34. package/dist/layout/legend/DiscreteSection.svelte +2 -2
  35. package/dist/layout/legend/DiscreteSymbolIcon.svelte +1 -1
  36. package/dist/layout/legend/LegendChannels.js +36 -12
  37. package/dist/layout/legend/LegendLayout.svelte +9 -1
  38. package/dist/layout/legend/LegendState.svelte.d.ts +9 -0
  39. package/dist/layout/legend/LegendState.svelte.js +24 -3
  40. package/dist/layout/legend/SizeSection.svelte +1 -1
  41. package/dist/layout/margins/PlotMargins.svelte.d.ts +2 -5
  42. package/dist/layout/margins/PlotMargins.svelte.js +4 -8
  43. package/dist/layout/plot/Plot.svelte +6 -3
  44. package/dist/layout/plot/PublicPlotContext.d.ts +5 -4
  45. package/dist/layout/plot/PublicPlotContext.js +7 -3
  46. package/dist/layout/plot/Slice.d.ts +5 -1
  47. package/dist/layout/plot/Slice.js +18 -6
  48. package/dist/layout/scales/EdgeTicks.d.ts +39 -0
  49. package/dist/layout/scales/EdgeTicks.js +82 -0
  50. package/dist/layout/scales/NiceTicks.d.ts +43 -0
  51. package/dist/layout/scales/NiceTicks.js +76 -0
  52. package/dist/layout/scales/ScalesLayout.svelte +133 -34
  53. package/dist/layout/scales/ScalesLayout.svelte.d.ts +10 -0
  54. package/dist/layout/scales/SveltePlotScale.d.ts +15 -0
  55. package/dist/layout/scales/SveltePlotScale.js +86 -0
  56. package/dist/layout/scales/TickLabels.d.ts +32 -0
  57. package/dist/layout/scales/TickLabels.js +55 -0
  58. package/dist/layout/styles/StylesLayout.svelte +2 -2
  59. package/dist/layout/styles/ValueLabels.d.ts +33 -5
  60. package/dist/layout/styles/ValueLabels.js +83 -23
  61. package/dist/layout/timeline/Timeline.svelte +5 -2
  62. package/dist/layout/timeline/Timeline.svelte.d.ts +2 -0
  63. package/dist/layout/timeline/TimelineLayout.svelte +39 -13
  64. package/dist/layout/timeline/TimelineLayout.svelte.d.ts +7 -5
  65. package/dist/layout/timeline/TimelineRule.svelte +1 -0
  66. package/dist/layout/timeline/TimelineState.svelte.d.ts +13 -5
  67. package/dist/layout/timeline/TimelineState.svelte.js +42 -8
  68. package/dist/layout/timeline/TimelineTime.d.ts +18 -0
  69. package/dist/layout/timeline/TimelineTime.js +117 -0
  70. package/dist/layout/tooltip/Tooltip.svelte +10 -7
  71. package/dist/layout/tooltip/Tooltip.svelte.d.ts +6 -4
  72. package/dist/layout/tooltip/TooltipState.svelte.d.ts +8 -2
  73. package/dist/layout/tooltip/TooltipState.svelte.js +23 -4
  74. package/dist/markers/MarkerKinds.d.ts +5 -0
  75. package/dist/markers/MarkerKinds.js +1 -0
  76. package/dist/markers/area/AreaMarker.svelte +15 -63
  77. package/dist/markers/arrow/ArrowMarker.svelte +51 -9
  78. package/dist/markers/bar/BarMarker.svelte +8 -4
  79. package/dist/markers/bollinger/BollingerMarker.svelte +33 -18
  80. package/dist/markers/box/BoxMarker.svelte +40 -9
  81. package/dist/markers/delta/Delta.js +1 -1
  82. package/dist/markers/delta/DeltaMarker.svelte +9 -7
  83. package/dist/markers/dot/DotMarker.svelte +24 -27
  84. package/dist/markers/image/ImageMarker.svelte +17 -12
  85. package/dist/markers/inset/InsetMarker.svelte +2 -2
  86. package/dist/markers/line/LineMarker.svelte +1 -0
  87. package/dist/markers/link/LinkMarker.svelte +174 -29
  88. package/dist/markers/regression/RegressionMarker.svelte +16 -33
  89. package/dist/markers/rule/RuleMarker.svelte +9 -3
  90. package/dist/markers/text/Declutter.d.ts +4 -0
  91. package/dist/markers/text/Declutter.js +26 -11
  92. package/dist/markers/text/TextMarker.svelte +91 -48
  93. package/dist/markers/tick/TickMarker.svelte +27 -25
  94. package/dist/markers/utils/MarkerChannels.d.ts +24 -0
  95. package/dist/markers/utils/MarkerChannels.js +42 -7
  96. package/dist/markers/utils/RowOffset.d.ts +23 -0
  97. package/dist/markers/utils/RowOffset.js +23 -0
  98. package/dist/markers/utils/RowOffsetMarks.svelte +30 -0
  99. package/dist/markers/utils/RowOffsetMarks.svelte.d.ts +33 -0
  100. package/dist/markers/utils/RowStroke.d.ts +31 -0
  101. package/dist/markers/utils/RowStroke.js +28 -0
  102. package/dist/markers/violin/ViolinMarker.svelte +75 -0
  103. package/dist/markers/violin/ViolinMarker.svelte.d.ts +7 -0
  104. package/dist/markers/violin/ViolinProfiles.d.ts +29 -0
  105. package/dist/markers/violin/ViolinProfiles.js +55 -0
  106. package/dist/markers/waffle/WaffleMarker.svelte +17 -37
  107. package/dist/phases/Pipeline.d.ts +5 -0
  108. package/dist/phases/Pipeline.js +8 -2
  109. package/dist/phases/data/DataPhase.d.ts +5 -11
  110. package/dist/phases/data/DataPhase.js +14 -11
  111. package/dist/phases/data/PlotAxes.d.ts +10 -0
  112. package/dist/phases/data/PlotAxes.js +14 -1
  113. package/dist/phases/facet/FacetPanels.d.ts +55 -0
  114. package/dist/phases/facet/FacetPanels.js +96 -0
  115. package/dist/phases/facet/FacetPhase.d.ts +1 -42
  116. package/dist/phases/facet/FacetPhase.js +1 -87
  117. package/dist/phases/hover/HoverPhase.d.ts +6 -43
  118. package/dist/phases/hover/HoverPhase.js +19 -54
  119. package/dist/phases/mapping/MappingPhase.d.ts +1 -1
  120. package/dist/phases/mapping/MappingPhase.js +3 -5
  121. package/dist/phases/markers/MarkersPhase.js +2 -1
  122. package/dist/phases/scales/CategoryOrder.d.ts +23 -0
  123. package/dist/phases/scales/CategoryOrder.js +73 -0
  124. package/dist/phases/scales/ScalesPhase.d.ts +1 -3
  125. package/dist/phases/scales/ScalesPhase.js +37 -27
  126. package/dist/phases/sharedScales/SharedScalesPhase.d.ts +6 -2
  127. package/dist/phases/sharedScales/SharedScalesPhase.js +14 -8
  128. package/dist/phases/statistics/Statistics.d.ts +10 -6
  129. package/dist/phases/statistics/Statistics.js +20 -10
  130. package/dist/phases/statistics/StatisticsPhase.js +10 -6
  131. package/dist/phases/statistics/methods/BollingerStatistic.d.ts +1 -1
  132. package/dist/phases/statistics/methods/BollingerStatistic.js +13 -11
  133. package/dist/phases/statistics/methods/BoxStatistic.d.ts +1 -1
  134. package/dist/phases/statistics/methods/BoxStatistic.js +14 -12
  135. package/dist/phases/statistics/methods/Density2dStatistic.d.ts +1 -1
  136. package/dist/phases/statistics/methods/Density2dStatistic.js +13 -11
  137. package/dist/phases/statistics/methods/DensityStatistic.d.ts +1 -1
  138. package/dist/phases/statistics/methods/DensityStatistic.js +11 -9
  139. package/dist/phases/statistics/methods/DeviationStatistic.d.ts +8 -0
  140. package/dist/phases/statistics/methods/DeviationStatistic.js +111 -0
  141. package/dist/phases/statistics/methods/MovingAverageStatistic.d.ts +1 -1
  142. package/dist/phases/statistics/methods/MovingAverageStatistic.js +11 -9
  143. package/dist/phases/statistics/methods/RegressionStatistic.d.ts +1 -1
  144. package/dist/phases/statistics/methods/RegressionStatistic.js +16 -14
  145. package/dist/phases/tooltip/TooltipPhase.d.ts +4 -2
  146. package/dist/phases/tooltip/TooltipPhase.js +10 -3
  147. package/dist/phases/transforms/ProcessedPositions.d.ts +30 -0
  148. package/dist/phases/transforms/ProcessedPositions.js +74 -0
  149. package/dist/phases/transforms/TransformsPhase.d.ts +5 -42
  150. package/dist/phases/transforms/TransformsPhase.js +67 -58
  151. package/dist/phases/transforms/ValueSelection.d.ts +30 -0
  152. package/dist/phases/transforms/ValueSelection.js +53 -0
  153. package/dist/plots/{heatmap → correlation/heatmap}/Plot.svelte +5 -2
  154. package/dist/plots/{heatmap → correlation/heatmap}/Plot.svelte.d.ts +2 -2
  155. package/dist/plots/{heatmap → correlation/heatmap}/defaults.d.ts +2 -2
  156. package/dist/plots/{heatmap → correlation/heatmap}/defaults.js +5 -5
  157. package/dist/plots/{heatmap → correlation/heatmap}/markers.d.ts +4 -4
  158. package/dist/plots/{heatmap → correlation/heatmap}/markers.js +4 -3
  159. package/dist/plots/{scatter → correlation/scatter}/Plot.svelte +5 -2
  160. package/dist/plots/{scatter → correlation/scatter}/Plot.svelte.d.ts +2 -2
  161. package/dist/plots/{scatter → correlation/scatter}/defaults.d.ts +2 -2
  162. package/dist/plots/{scatter → correlation/scatter}/defaults.js +6 -5
  163. package/dist/plots/{scatter → correlation/scatter}/markers.d.ts +4 -4
  164. package/dist/plots/{scatter → correlation/scatter}/markers.js +5 -4
  165. package/dist/plots/distribution/box/BoxSummaries.d.ts +19 -0
  166. package/dist/plots/distribution/box/BoxSummaries.js +101 -0
  167. package/dist/plots/distribution/box/Plot.svelte +42 -0
  168. package/dist/plots/distribution/box/Plot.svelte.d.ts +26 -0
  169. package/dist/plots/distribution/box/defaults.d.ts +12 -0
  170. package/dist/plots/distribution/box/defaults.js +34 -0
  171. package/dist/plots/distribution/box/markers.d.ts +12 -0
  172. package/dist/plots/distribution/box/markers.js +34 -0
  173. package/dist/plots/distribution/density/Plot.svelte +45 -0
  174. package/dist/plots/distribution/density/Plot.svelte.d.ts +26 -0
  175. package/dist/plots/distribution/density/defaults.d.ts +9 -0
  176. package/dist/plots/distribution/density/defaults.js +29 -0
  177. package/dist/plots/distribution/density/markers.d.ts +9 -0
  178. package/dist/plots/distribution/density/markers.js +42 -0
  179. package/dist/plots/{histogram → distribution/histogram}/Plot.svelte +2 -2
  180. package/dist/plots/{histogram → distribution/histogram}/Plot.svelte.d.ts +2 -2
  181. package/dist/plots/{histogram → distribution/histogram}/defaults.d.ts +2 -2
  182. package/dist/plots/{histogram → distribution/histogram}/defaults.js +4 -4
  183. package/dist/plots/{histogram → distribution/histogram}/markers.d.ts +3 -3
  184. package/dist/plots/{histogram → distribution/histogram}/markers.js +7 -7
  185. package/dist/plots/{pyramid → distribution/pyramid}/Plot.svelte +5 -2
  186. package/dist/plots/{pyramid → distribution/pyramid}/Plot.svelte.d.ts +2 -2
  187. package/dist/plots/{pyramid → distribution/pyramid}/defaults.d.ts +2 -2
  188. package/dist/plots/{pyramid → distribution/pyramid}/defaults.js +7 -6
  189. package/dist/plots/{pyramid → distribution/pyramid}/markers.d.ts +4 -4
  190. package/dist/plots/{pyramid → distribution/pyramid}/markers.js +8 -11
  191. package/dist/plots/distribution/violin/Plot.svelte +45 -0
  192. package/dist/plots/distribution/violin/Plot.svelte.d.ts +26 -0
  193. package/dist/plots/distribution/violin/defaults.d.ts +10 -0
  194. package/dist/plots/distribution/violin/defaults.js +58 -0
  195. package/dist/plots/distribution/violin/markers.d.ts +10 -0
  196. package/dist/plots/distribution/violin/markers.js +71 -0
  197. package/dist/plots/{area → evolution/area}/Plot.svelte +2 -2
  198. package/dist/plots/{area → evolution/area}/Plot.svelte.d.ts +2 -2
  199. package/dist/plots/{area → evolution/area}/defaults.d.ts +2 -2
  200. package/dist/plots/{area → evolution/area}/defaults.js +2 -0
  201. package/dist/plots/{area → evolution/area}/markers.d.ts +2 -2
  202. package/dist/plots/{area → evolution/area}/markers.js +2 -3
  203. package/dist/plots/{line → evolution/line}/Plot.svelte +2 -2
  204. package/dist/plots/{line → evolution/line}/Plot.svelte.d.ts +2 -2
  205. package/dist/plots/{line → evolution/line}/defaults.d.ts +2 -2
  206. package/dist/plots/{line → evolution/line}/defaults.js +2 -0
  207. package/dist/plots/{line → evolution/line}/markers.d.ts +11 -8
  208. package/dist/plots/{line → evolution/line}/markers.js +7 -6
  209. package/dist/plots/evolution/slope/Plot.svelte +42 -0
  210. package/dist/plots/evolution/slope/Plot.svelte.d.ts +26 -0
  211. package/dist/plots/evolution/slope/defaults.d.ts +8 -0
  212. package/dist/plots/evolution/slope/defaults.js +31 -0
  213. package/dist/plots/evolution/slope/markers.d.ts +16 -0
  214. package/dist/plots/evolution/slope/markers.js +79 -0
  215. package/dist/plots/evolution/sparkline/Plot.svelte +45 -0
  216. package/dist/plots/evolution/sparkline/Plot.svelte.d.ts +26 -0
  217. package/dist/plots/evolution/sparkline/defaults.d.ts +7 -0
  218. package/dist/plots/evolution/sparkline/defaults.js +23 -0
  219. package/dist/plots/evolution/sparkline/markers.d.ts +7 -0
  220. package/dist/plots/evolution/sparkline/markers.js +56 -0
  221. package/dist/plots/{geo → map/geo}/Core.svelte +11 -10
  222. package/dist/plots/{geo → map/geo}/Core.svelte.d.ts +1 -1
  223. package/dist/plots/map/geo/GeoFeatures.svelte.d.ts +9 -0
  224. package/dist/plots/map/geo/GeoFeatures.svelte.js +55 -0
  225. package/dist/plots/map/geo/GeoGeometry.d.ts +27 -0
  226. package/dist/plots/map/geo/GeoGeometry.js +142 -0
  227. package/dist/plots/map/geo/GeoSegments.d.ts +16 -0
  228. package/dist/plots/map/geo/GeoSegments.js +23 -0
  229. package/dist/plots/{geo → map/geo}/Plot.svelte +10 -10
  230. package/dist/plots/{geo → map/geo}/Plot.svelte.d.ts +2 -2
  231. package/dist/plots/{geo → map/geo}/defaults.d.ts +2 -2
  232. package/dist/plots/{geo → map/geo}/defaults.js +1 -1
  233. package/dist/plots/{geo → map/geo}/phases/data.d.ts +1 -1
  234. package/dist/plots/{geo → map/geo}/phases/data.js +7 -6
  235. package/dist/plots/{geo → map/geo}/phases/hover.d.ts +1 -1
  236. package/dist/plots/{geo → map/geo}/phases/hover.js +5 -5
  237. package/dist/plots/{geo → map/geo}/phases/markers.d.ts +1 -1
  238. package/dist/plots/{geo → map/geo}/phases/markers.js +8 -13
  239. package/dist/plots/{geo → map/geo}/phases/scales.d.ts +2 -2
  240. package/dist/plots/{geo → map/geo}/phases/scales.js +28 -12
  241. package/dist/plots/{geo → map/geo}/phases/tooltip.d.ts +1 -1
  242. package/dist/plots/map/geo/phases/tooltip.js +5 -0
  243. package/dist/plots/{geo → map/geo}/slices.d.ts +2 -2
  244. package/dist/plots/{geo → map/geo}/slices.js +7 -4
  245. package/dist/plots/{bar → ranking/bar}/Plot.svelte +2 -2
  246. package/dist/plots/{bar → ranking/bar}/Plot.svelte.d.ts +2 -2
  247. package/dist/plots/ranking/bar/defaults.d.ts +16 -0
  248. package/dist/plots/{bar → ranking/bar}/defaults.js +17 -15
  249. package/dist/plots/{bar → ranking/bar}/markers.d.ts +8 -8
  250. package/dist/plots/{bar → ranking/bar}/markers.js +11 -19
  251. package/dist/plots/ranking/bullet/Plot.svelte +42 -0
  252. package/dist/plots/ranking/bullet/Plot.svelte.d.ts +26 -0
  253. package/dist/plots/ranking/bullet/defaults.d.ts +8 -0
  254. package/dist/plots/ranking/bullet/defaults.js +24 -0
  255. package/dist/plots/ranking/bullet/markers.d.ts +10 -0
  256. package/dist/plots/ranking/bullet/markers.js +90 -0
  257. package/dist/plots/ranking/cleveland/ClevelandConnector.d.ts +48 -0
  258. package/dist/plots/ranking/cleveland/ClevelandConnector.js +140 -0
  259. package/dist/plots/ranking/cleveland/ClevelandMarkers.d.ts +33 -0
  260. package/dist/plots/ranking/cleveland/ClevelandMarkers.js +375 -0
  261. package/dist/plots/ranking/cleveland/ClevelandRanges.d.ts +31 -0
  262. package/dist/plots/ranking/cleveland/ClevelandRanges.js +116 -0
  263. package/dist/plots/ranking/cleveland/Plot.svelte +45 -0
  264. package/dist/plots/ranking/cleveland/Plot.svelte.d.ts +26 -0
  265. package/dist/plots/ranking/cleveland/defaults.d.ts +13 -0
  266. package/dist/plots/ranking/cleveland/defaults.js +66 -0
  267. package/dist/plots/ranking/dumbbell/Plot.svelte +45 -0
  268. package/dist/plots/ranking/dumbbell/Plot.svelte.d.ts +26 -0
  269. package/dist/plots/ranking/dumbbell/defaults.d.ts +9 -0
  270. package/dist/plots/ranking/dumbbell/defaults.js +19 -0
  271. package/dist/plots/ranking/forest/Plot.svelte +42 -0
  272. package/dist/plots/ranking/forest/Plot.svelte.d.ts +26 -0
  273. package/dist/plots/ranking/forest/defaults.d.ts +11 -0
  274. package/dist/plots/ranking/forest/defaults.js +20 -0
  275. package/dist/plots/ranking/lollipop/Plot.svelte +45 -0
  276. package/dist/plots/ranking/lollipop/Plot.svelte.d.ts +26 -0
  277. package/dist/plots/ranking/lollipop/defaults.d.ts +9 -0
  278. package/dist/plots/ranking/lollipop/defaults.js +18 -0
  279. package/dist/plots/utils/RowNumbers.d.ts +16 -0
  280. package/dist/plots/utils/RowNumbers.js +24 -0
  281. package/dist/plots/utils/gaps.js +1 -1
  282. package/dist/plots/utils/segments.js +1 -1
  283. package/dist/types/configuration/styling.d.ts +287 -132
  284. package/dist/types/layout/composer.d.ts +5 -2
  285. package/dist/types/layout/coordinates.d.ts +5 -4
  286. package/dist/types/layout/legend.d.ts +21 -5
  287. package/dist/types/layout/plot.d.ts +44 -1
  288. package/dist/types/layout/scales.d.ts +51 -3
  289. package/dist/types/layout/statistics/deviation.d.ts +40 -0
  290. package/dist/types/layout/statistics/index.d.ts +7 -2
  291. package/dist/types/layout/styles/base.d.ts +18 -0
  292. package/dist/types/layout/styles/bullet.d.ts +25 -0
  293. package/dist/types/layout/styles/connector.d.ts +98 -0
  294. package/dist/types/layout/styles/curve.d.ts +11 -0
  295. package/dist/types/layout/styles/frame.d.ts +17 -0
  296. package/dist/types/layout/styles/gaps.d.ts +12 -0
  297. package/dist/types/layout/styles/geo.d.ts +55 -0
  298. package/dist/types/layout/styles/index.d.ts +8 -0
  299. package/dist/types/layout/styles/index.js +8 -0
  300. package/dist/types/layout/styles/values.d.ts +47 -0
  301. package/dist/types/layout/timeline.d.ts +19 -7
  302. package/dist/types/layout/tooltip.d.ts +6 -2
  303. package/dist/types/markers/axis/area.d.ts +2 -2
  304. package/dist/types/markers/axis/arrow.d.ts +3 -0
  305. package/dist/types/markers/axis/axisBasedMarkersConfig.d.ts +2 -1
  306. package/dist/types/markers/axis/bar.d.ts +1 -1
  307. package/dist/types/markers/axis/box.d.ts +5 -0
  308. package/dist/types/markers/axis/difference.d.ts +2 -2
  309. package/dist/types/markers/axis/image.d.ts +3 -2
  310. package/dist/types/markers/axis/line.d.ts +2 -0
  311. package/dist/types/markers/axis/rule.d.ts +9 -0
  312. package/dist/types/markers/axis/trail.d.ts +2 -3
  313. package/dist/types/markers/axis/violin.d.ts +25 -0
  314. package/dist/types/markers/basic/dot.d.ts +3 -2
  315. package/dist/types/markers/basic/text.d.ts +13 -3
  316. package/dist/types/markers/channels/commonMarkerConfig.d.ts +7 -3
  317. package/dist/types/markers/channels/commonMarkerConfigWithRowOffset.d.ts +13 -0
  318. package/dist/types/markers/common.d.ts +1 -1
  319. package/dist/types/markers/common.js +1 -0
  320. package/dist/types/markers/geo/link.d.ts +5 -1
  321. package/dist/types/phases/hover/phase.d.ts +6 -0
  322. package/dist/types/phases/index.d.ts +1 -1
  323. package/dist/types/phases/scales/phase.d.ts +5 -1
  324. package/dist/types/phases/state.d.ts +20 -4
  325. package/dist/types/phases/statistics/phase.d.ts +3 -1
  326. package/dist/types/phases/statistics/source.d.ts +3 -1
  327. package/dist/types/phases/transforms/phase.d.ts +32 -0
  328. package/dist/types/plots/{heatmap → correlation/heatmap}/props.d.ts +6 -6
  329. package/dist/types/plots/{heatmap → correlation/heatmap}/state.d.ts +4 -4
  330. package/dist/types/plots/{scatter → correlation/scatter}/props.d.ts +6 -6
  331. package/dist/types/plots/{scatter → correlation/scatter}/state.d.ts +2 -2
  332. package/dist/types/plots/distribution/box/props.d.ts +10 -0
  333. package/dist/types/plots/distribution/box/state.d.ts +23 -0
  334. package/dist/types/plots/distribution/density/props.d.ts +23 -0
  335. package/dist/types/plots/distribution/density/state.d.ts +6 -0
  336. package/dist/types/plots/distribution/density/state.js +1 -0
  337. package/dist/types/plots/{histogram → distribution/histogram}/props.d.ts +7 -7
  338. package/dist/types/plots/distribution/histogram/props.js +1 -0
  339. package/dist/types/plots/{histogram → distribution/histogram}/state.d.ts +2 -2
  340. package/dist/types/plots/distribution/histogram/state.js +1 -0
  341. package/dist/types/plots/{pyramid → distribution/pyramid}/props.d.ts +6 -6
  342. package/dist/types/plots/distribution/pyramid/props.js +1 -0
  343. package/dist/types/plots/{pyramid → distribution/pyramid}/state.d.ts +3 -3
  344. package/dist/types/plots/distribution/pyramid/state.js +1 -0
  345. package/dist/types/plots/distribution/violin/props.d.ts +23 -0
  346. package/dist/types/plots/distribution/violin/props.js +1 -0
  347. package/dist/types/plots/distribution/violin/state.d.ts +6 -0
  348. package/dist/types/plots/distribution/violin/state.js +1 -0
  349. package/dist/types/plots/{area → evolution/area}/props.d.ts +6 -6
  350. package/dist/types/plots/evolution/area/props.js +1 -0
  351. package/dist/types/plots/{area → evolution/area}/state.d.ts +2 -2
  352. package/dist/types/plots/evolution/area/state.js +1 -0
  353. package/dist/types/plots/evolution/line/props.d.ts +10 -0
  354. package/dist/types/plots/evolution/line/props.js +1 -0
  355. package/dist/types/plots/{line → evolution/line}/state.d.ts +3 -3
  356. package/dist/types/plots/evolution/line/state.js +1 -0
  357. package/dist/types/plots/evolution/slope/props.d.ts +5 -0
  358. package/dist/types/plots/evolution/slope/props.js +1 -0
  359. package/dist/types/plots/evolution/slope/state.d.ts +5 -0
  360. package/dist/types/plots/evolution/slope/state.js +1 -0
  361. package/dist/types/plots/evolution/sparkline/props.d.ts +5 -0
  362. package/dist/types/plots/evolution/sparkline/props.js +1 -0
  363. package/dist/types/plots/evolution/sparkline/state.d.ts +5 -0
  364. package/dist/types/plots/evolution/sparkline/state.js +1 -0
  365. package/dist/types/plots/{geo → map/geo}/props.d.ts +8 -8
  366. package/dist/types/plots/map/geo/props.js +1 -0
  367. package/dist/types/plots/{geo → map/geo}/state.d.ts +18 -11
  368. package/dist/types/plots/map/geo/state.js +1 -0
  369. package/dist/types/plots/props.d.ts +3 -1
  370. package/dist/types/plots/{bar → ranking/bar}/props.d.ts +6 -6
  371. package/dist/types/plots/ranking/bar/props.js +1 -0
  372. package/dist/types/plots/{bar → ranking/bar}/state.d.ts +2 -2
  373. package/dist/types/plots/ranking/bar/state.js +1 -0
  374. package/dist/types/plots/ranking/bullet/props.d.ts +22 -0
  375. package/dist/types/plots/ranking/bullet/props.js +1 -0
  376. package/dist/types/plots/ranking/bullet/state.d.ts +5 -0
  377. package/dist/types/plots/ranking/bullet/state.js +1 -0
  378. package/dist/types/plots/ranking/cleveland/props.d.ts +10 -0
  379. package/dist/types/plots/ranking/cleveland/props.js +1 -0
  380. package/dist/types/plots/ranking/cleveland/state.d.ts +49 -0
  381. package/dist/types/plots/ranking/cleveland/state.js +1 -0
  382. package/dist/types/plots/ranking/dumbbell/props.d.ts +10 -0
  383. package/dist/types/plots/ranking/dumbbell/props.js +1 -0
  384. package/dist/types/plots/ranking/dumbbell/state.d.ts +5 -0
  385. package/dist/types/plots/ranking/dumbbell/state.js +1 -0
  386. package/dist/types/plots/ranking/forest/props.d.ts +23 -0
  387. package/dist/types/plots/ranking/forest/props.js +1 -0
  388. package/dist/types/plots/ranking/forest/state.d.ts +5 -0
  389. package/dist/types/plots/ranking/forest/state.js +1 -0
  390. package/dist/types/plots/ranking/lollipop/props.d.ts +10 -0
  391. package/dist/types/plots/ranking/lollipop/props.js +1 -0
  392. package/dist/types/plots/ranking/lollipop/state.d.ts +5 -0
  393. package/dist/types/plots/ranking/lollipop/state.js +1 -0
  394. package/dist/types/plots/segments/common.d.ts +4 -1
  395. package/dist/utils/OpacityScale.d.ts +14 -0
  396. package/dist/utils/OpacityScale.js +43 -0
  397. package/dist/utils/{symbol.d.ts → SymbolPath.d.ts} +0 -12
  398. package/dist/utils/{symbol.js → SymbolPath.js} +0 -24
  399. package/dist/utils/SymbolScale.d.ts +18 -0
  400. package/dist/utils/SymbolScale.js +29 -0
  401. package/dist/utils/color/ColorRamp.d.ts +27 -0
  402. package/dist/utils/color/ColorRamp.js +120 -0
  403. package/dist/utils/color/CssColor.d.ts +19 -0
  404. package/dist/utils/color/CssColor.js +114 -0
  405. package/dist/utils/color/Palette.d.ts +21 -0
  406. package/dist/utils/color/Palette.js +52 -0
  407. package/dist/utils/color/index.d.ts +11 -3
  408. package/dist/utils/color/index.js +14 -3
  409. package/dist/utils/grouping.js +1 -1
  410. package/docs/architecture.md +1 -1
  411. package/docs/chrome.md +39 -8
  412. package/docs/composer.md +19 -3
  413. package/docs/concepts.md +1 -1
  414. package/docs/development.md +14 -5
  415. package/docs/facets.md +62 -8
  416. package/docs/getting-started.md +8 -9
  417. package/docs/legend.md +73 -24
  418. package/docs/markers.md +45 -32
  419. package/docs/plots/correlation/heatmap.md +26 -0
  420. package/docs/plots/correlation/scatter.md +35 -0
  421. package/docs/plots/distribution/box.md +28 -0
  422. package/docs/plots/distribution/density.md +26 -0
  423. package/docs/plots/distribution/histogram.md +33 -0
  424. package/docs/plots/distribution/pyramid.md +31 -0
  425. package/docs/plots/distribution/violin.md +35 -0
  426. package/docs/plots/evolution/area.md +32 -0
  427. package/docs/plots/evolution/line.md +93 -0
  428. package/docs/plots/evolution/slope.md +39 -0
  429. package/docs/plots/evolution/sparkline.md +34 -0
  430. package/docs/plots/ranking/bar.md +59 -0
  431. package/docs/plots/ranking/bullet.md +37 -0
  432. package/docs/plots/ranking/cleveland.md +54 -0
  433. package/docs/plots/ranking/dumbbell.md +39 -0
  434. package/docs/plots/ranking/forest.md +40 -0
  435. package/docs/plots/ranking/lollipop.md +39 -0
  436. package/docs/plots.md +22 -154
  437. package/docs/scales.md +50 -27
  438. package/docs/state.md +1 -1
  439. package/docs/styles-and-segments.md +96 -39
  440. package/docs/theming.md +33 -19
  441. package/docs/timeline.md +62 -28
  442. package/docs/tooltip-and-hover.md +72 -24
  443. package/docs/transforms-and-statistics.md +56 -25
  444. package/examples/BarValues.svelte +2 -2
  445. package/examples/Box.svelte +7 -0
  446. package/examples/Bullet.svelte +17 -0
  447. package/examples/Chrome.svelte +17 -0
  448. package/examples/ChromeOrder.svelte +18 -0
  449. package/examples/Cleveland.svelte +15 -0
  450. package/examples/Composer.svelte +23 -0
  451. package/examples/CustomTooltip.svelte +21 -14
  452. package/examples/Density.svelte +7 -0
  453. package/examples/Dumbbell.svelte +16 -0
  454. package/examples/Facets.svelte +3 -3
  455. package/examples/FacetsCarousel.svelte +14 -0
  456. package/examples/FacetsRowsCols.svelte +23 -0
  457. package/examples/FirstPlot.svelte +7 -0
  458. package/examples/Forest.svelte +17 -0
  459. package/examples/Gaps.svelte +21 -0
  460. package/examples/GroupedBars.svelte +15 -0
  461. package/examples/Heatmap.svelte +7 -0
  462. package/examples/HeatmapSegments.svelte +26 -0
  463. package/examples/Histogram.svelte +14 -0
  464. package/examples/HorizontalBars.svelte +15 -0
  465. package/examples/LegendSections.svelte +27 -0
  466. package/examples/LegendToggle.svelte +3 -3
  467. package/examples/LineByRegion.svelte +18 -0
  468. package/examples/LineDates.svelte +15 -0
  469. package/examples/LineStep.svelte +16 -0
  470. package/examples/LineStepSegment.svelte +18 -0
  471. package/examples/Lollipop.svelte +17 -0
  472. package/examples/Markers.svelte +27 -0
  473. package/examples/MovingAverage.svelte +15 -0
  474. package/examples/Pyramid.svelte +14 -0
  475. package/examples/Regression.svelte +14 -0
  476. package/examples/ResponsiveLine.svelte +7 -7
  477. package/examples/Scales.svelte +26 -0
  478. package/examples/Scatter.svelte +16 -0
  479. package/examples/SegmentHighlight.svelte +22 -0
  480. package/examples/Segments.svelte +11 -3
  481. package/examples/SegmentsBySeries.svelte +25 -0
  482. package/examples/Slope.svelte +17 -0
  483. package/examples/Sparkline.svelte +14 -0
  484. package/examples/StackedArea.svelte +16 -0
  485. package/examples/StackedBars.svelte +15 -0
  486. package/examples/TimelinePlayer.svelte +8 -7
  487. package/examples/TimelineRule.svelte +19 -0
  488. package/examples/Tooltip.svelte +3 -3
  489. package/examples/ValueLabels.svelte +21 -0
  490. package/examples/Violin.svelte +14 -0
  491. package/examples/datasets/argentina-chile-trends.ts +34 -0
  492. package/examples/datasets/commodity-prices.ts +48 -0
  493. package/examples/datasets/countries-over-time.ts +368 -0
  494. package/examples/datasets/daily-temperature.ts +121 -0
  495. package/examples/datasets/earthquakes.ts +977 -0
  496. package/examples/datasets/flight-routes.ts +29 -0
  497. package/examples/datasets/height-density.ts +37 -0
  498. package/examples/datasets/heights.ts +370 -0
  499. package/examples/datasets/index.ts +24 -0
  500. package/examples/datasets/inflation-by-region.ts +44 -0
  501. package/examples/datasets/inflation-ranges.ts +34 -0
  502. package/examples/datasets/iris-flower.ts +207 -0
  503. package/examples/datasets/life-expectancy.ts +95 -0
  504. package/examples/datasets/napoleons-march.ts +182 -0
  505. package/examples/datasets/penguins.ts +54 -0
  506. package/examples/datasets/population-by-age-with-gaps.ts +23 -0
  507. package/examples/datasets/population-by-age.ts +890 -0
  508. package/examples/datasets/province-population.ts +521 -0
  509. package/examples/datasets/stock-prices.ts +63 -0
  510. package/examples/datasets/weather-stations-over-time.ts +31 -0
  511. package/examples/datasets/weather-stations.ts +22 -0
  512. package/examples/datasets/wind-vectors.ts +30 -0
  513. package/examples/datasets/world-temperature.ts +400 -0
  514. package/llms-full.txt +51 -12
  515. package/llms.txt +60 -4
  516. package/package.json +12 -2
  517. package/dist/layout/scales/buildScale.d.ts +0 -8
  518. package/dist/layout/scales/buildScale.js +0 -67
  519. package/dist/layout/scales/niceDomain.d.ts +0 -23
  520. package/dist/layout/scales/niceDomain.js +0 -59
  521. package/dist/plots/bar/defaults.d.ts +0 -9
  522. package/dist/plots/geo/features.svelte.d.ts +0 -5
  523. package/dist/plots/geo/features.svelte.js +0 -44
  524. package/dist/plots/geo/phases/tooltip.js +0 -5
  525. package/dist/plots/utils/geoAccessors.d.ts +0 -72
  526. package/dist/plots/utils/geoAccessors.js +0 -220
  527. package/dist/plots/utils/geoSegments.d.ts +0 -29
  528. package/dist/plots/utils/geoSegments.js +0 -37
  529. package/dist/types/layout/styles.d.ts +0 -122
  530. package/dist/types/markers/axis/curveName.d.ts +0 -2
  531. package/dist/types/plots/line/props.d.ts +0 -10
  532. package/dist/utils/color/contrast.d.ts +0 -9
  533. package/dist/utils/color/contrast.js +0 -40
  534. package/dist/utils/color/cssColor.d.ts +0 -4
  535. package/dist/utils/color/cssColor.js +0 -77
  536. package/dist/utils/color/ramp.d.ts +0 -17
  537. package/dist/utils/color/ramp.js +0 -110
  538. package/dist/utils/opacity.d.ts +0 -9
  539. package/dist/utils/opacity.js +0 -38
  540. package/examples/data.ts +0 -12
  541. /package/dist/types/layout/{styles.js → statistics/deviation.js} +0 -0
  542. /package/dist/types/{markers/axis/curveName.js → layout/styles/base.js} +0 -0
  543. /package/dist/types/{plots/area/props.js → layout/styles/bullet.js} +0 -0
  544. /package/dist/types/{plots/area/state.js → layout/styles/connector.js} +0 -0
  545. /package/dist/types/{plots/bar/props.js → layout/styles/curve.js} +0 -0
  546. /package/dist/types/{plots/bar/state.js → layout/styles/frame.js} +0 -0
  547. /package/dist/types/{plots/geo/props.js → layout/styles/gaps.js} +0 -0
  548. /package/dist/types/{plots/geo/state.js → layout/styles/geo.js} +0 -0
  549. /package/dist/types/{plots/heatmap/props.js → layout/styles/values.js} +0 -0
  550. /package/dist/types/{plots/heatmap/state.js → markers/axis/violin.js} +0 -0
  551. /package/dist/types/{plots/histogram/props.js → markers/channels/commonMarkerConfigWithRowOffset.js} +0 -0
  552. /package/dist/types/plots/{line → correlation/heatmap}/props.js +0 -0
  553. /package/dist/types/plots/{histogram → correlation/heatmap}/state.js +0 -0
  554. /package/dist/types/plots/{pyramid → correlation/scatter}/props.js +0 -0
  555. /package/dist/types/plots/{line → correlation/scatter}/state.js +0 -0
  556. /package/dist/types/plots/{scatter → distribution/box}/props.js +0 -0
  557. /package/dist/types/plots/{pyramid → distribution/box}/state.js +0 -0
  558. /package/dist/types/plots/{scatter/state.js → distribution/density/props.js} +0 -0
  559. /package/dist/{plots/utils → utils}/accessors.d.ts +0 -0
  560. /package/dist/{plots/utils → utils}/accessors.js +0 -0
@@ -1,10 +1,9 @@
1
- import { resolveAccessor } from '../../plots/utils/accessors';
2
- import { DataPhase } from '../data/DataPhase';
1
+ import { resolveAccessor } from '../../utils/accessors';
3
2
  /**
4
3
  * The "mapping" phase every axis-based plot shares: every channel resolved to
5
4
  * a row accessor. `x`/`y` (and `color`) read the first series' own, falling
6
5
  * back to the plot's props; `grouping` is the key the "data" phase split rows
7
- * by ({@link DataPhase.buildGrouping}); any other channel resolves only when
6
+ * by (its `seriesGrouping`); any other channel resolves only when
8
7
  * its prop is set, and a size channel given a number stays that literal size.
9
8
  * An unset `x`/`y` reads each row itself, with no `source`.
10
9
  */
@@ -17,12 +16,11 @@ export class MappingPhase {
17
16
  run = (state, ctx) => {
18
17
  const first = state.resolvedSeries?.[0];
19
18
  const identity = { accessor: (d) => d };
20
- const grouping = DataPhase.buildGrouping(state);
21
19
  const size = (value) => typeof value === 'number' ? value : MappingPhase.#channel(value);
22
20
  const channels = {
23
21
  x: MappingPhase.#channel(first?.x ?? state.x) ?? identity,
24
22
  y: MappingPhase.#channel(first?.y ?? state.y) ?? identity,
25
- grouping: MappingPhase.#channel(grouping),
23
+ grouping: MappingPhase.#channel(state.seriesGrouping),
26
24
  color: MappingPhase.#channel(first?.color ?? state.color),
27
25
  opacity: MappingPhase.#channel(state.opacity),
28
26
  symbol: MappingPhase.#channel(state.symbol),
@@ -1,3 +1,4 @@
1
+ import { MarkerChannels } from '../../markers/utils/MarkerChannels';
1
2
  /**
2
3
  * The shared "markers" phase: everything the plot draws, bottom to top - the
3
4
  * plot kind's own marks, then what the "statistics" phase left in
@@ -21,7 +22,7 @@ export class MarkersPhase {
21
22
  : [];
22
23
  return {
23
24
  ...state,
24
- markers: [...options.marks(state, ctx), ...(state.markers ?? []), ...valueLabels]
25
+ markers: MarkerChannels.inheritPosition(MarkerChannels.inheritAll([...options.marks(state, ctx), ...(state.markers ?? []), ...valueLabels], state.scales), state.processedData)
25
26
  };
26
27
  };
27
28
  }
@@ -0,0 +1,23 @@
1
+ import { PlotAxes } from '../data/PlotAxes';
2
+ import { type IntervalAccessors } from '../../plots/utils/RowNumbers';
3
+ import type { AxisChannelName } from '../../types/layout/mapping';
4
+ import type { CategorySort } from '../../types/layout/scales';
5
+ import type { ProcessedData } from '../../types/phases';
6
+ /**
7
+ * The order of a plot's categories under a declarative `scales.*.sort`: read off
8
+ * the processed rows, by what each category holds on the value axis - its value
9
+ * in a series, the sum of its values, or the spread between its lowest and its
10
+ * highest.
11
+ */
12
+ export declare class CategoryOrder {
13
+ /** Whether a `sort` is a {@link CategorySort} rather than a comparator. */
14
+ static isDeclarative(sort: unknown): sort is CategorySort;
15
+ /**
16
+ * The categories of `axis`, in the order `sort` gives them; `undefined` without rows to
17
+ * read. The state is whatever has the processed rows and the axes.
18
+ */
19
+ static of(sort: CategorySort, state: {
20
+ processedData?: ProcessedData;
21
+ axes?: PlotAxes;
22
+ } & IntervalAccessors, axis: AxisChannelName): unknown[] | undefined;
23
+ }
@@ -0,0 +1,73 @@
1
+ import { ProcessedPositions } from '../transforms/ProcessedPositions';
2
+ import { SERIES_KEY } from '../transforms/TransformsPhase';
3
+ import { PlotAxes } from '../data/PlotAxes';
4
+ import { RowNumbers } from '../../plots/utils/RowNumbers';
5
+ import { isGapValue } from '../../plots/utils/gaps';
6
+ /**
7
+ * The order of a plot's categories under a declarative `scales.*.sort`: read off
8
+ * the processed rows, by what each category holds on the value axis - its value
9
+ * in a series, the sum of its values, or the spread between its lowest and its
10
+ * highest.
11
+ */
12
+ export class CategoryOrder {
13
+ /** Whether a `sort` is a {@link CategorySort} rather than a comparator. */
14
+ static isDeclarative(sort) {
15
+ return typeof sort === 'object' && sort !== null && 'by' in sort;
16
+ }
17
+ /**
18
+ * The categories of `axis`, in the order `sort` gives them; `undefined` without rows to
19
+ * read. The state is whatever has the processed rows and the axes.
20
+ */
21
+ static of(sort, state, axis) {
22
+ const processed = state.processedData;
23
+ if (!processed)
24
+ return undefined;
25
+ const valueAxis = PlotAxes.valueOf(state);
26
+ const position = ProcessedPositions.of(processed, valueAxis);
27
+ const categoryOf = position[axis];
28
+ const valueOf = position[valueAxis];
29
+ // Each category, in the order the rows give them, with the values it holds.
30
+ const held = new Map();
31
+ for (const row of processed.data) {
32
+ const category = categoryOf(row);
33
+ const key = String(category);
34
+ let entry = held.get(key);
35
+ if (!entry)
36
+ held.set(key, (entry = { category, series: String(row[SERIES_KEY]), values: [], own: [] }));
37
+ const raw = valueOf(row);
38
+ const value = Number(raw);
39
+ if (isGapValue(raw) || !Number.isFinite(value))
40
+ continue;
41
+ entry.values.push(...RowNumbers.interval(state, row, value));
42
+ if (sort.series === undefined || String(row[SERIES_KEY]) === sort.series) {
43
+ entry.own.push(value);
44
+ }
45
+ }
46
+ const keyOf = (entry) => {
47
+ if (sort.by === 'range') {
48
+ return entry.values.length === 0
49
+ ? undefined
50
+ : Math.max(...entry.values) - Math.min(...entry.values);
51
+ }
52
+ return entry.own.length === 0 ? undefined : entry.own.reduce((sum, v) => sum + v, 0);
53
+ };
54
+ const sign = sort.order === 'descending' ? -1 : 1;
55
+ const sorted = (entries) => entries
56
+ .map((entry, index) => ({ entry, index, key: keyOf(entry) }))
57
+ .sort((a, b) => {
58
+ if (a.key === undefined || b.key === undefined) {
59
+ return ((a.key === undefined ? 1 : 0) - (b.key === undefined ? 1 : 0) || a.index - b.index);
60
+ }
61
+ return sign * (a.key - b.key) || a.index - b.index;
62
+ })
63
+ .map(({ entry }) => entry);
64
+ const entries = [...held.values()];
65
+ if (!sort.grouped)
66
+ return sorted(entries).map((entry) => entry.category);
67
+ const bySeries = new Map();
68
+ for (const entry of entries) {
69
+ bySeries.set(entry.series, [...(bySeries.get(entry.series) ?? []), entry]);
70
+ }
71
+ return [...bySeries.values()].flatMap((group) => sorted(group).map((entry) => entry.category));
72
+ }
73
+ }
@@ -1,6 +1,6 @@
1
1
  import { PlotAxes } from '../data/PlotAxes';
2
2
  import type { AxisChannelName } from '../../types/layout/mapping';
3
- import type { AxisPlotState, AxisPlotCtx, PhaseStage, ProcessedData, ScalesStageOptions } from '../../types/phases';
3
+ import type { AxisPlotState, AxisPlotCtx, PhaseStage, ScalesStageOptions } from '../../types/phases';
4
4
  type AnyAxisState = AxisPlotState<any, any, any, any>;
5
5
  /**
6
6
  * The shared "scales" phase. Each axis the kind lays out as categories
@@ -25,7 +25,5 @@ export declare class ScalesPhase<TState extends AnyAxisState, TCtx extends AxisP
25
25
  /** Whether the kind keeps its categories in the order the data gives them. */
26
26
  get keepsDataOrder(): boolean;
27
27
  run: (state: TState, ctx: TCtx) => TState;
28
- /** Every value the plot's own processed rows sit at on one axis. */
29
- static processedValues(processed: ProcessedData | undefined, axis: AxisChannelName): unknown[];
30
28
  }
31
29
  export {};
@@ -1,7 +1,9 @@
1
- import { resolveAccessor } from '../../plots/utils/accessors';
1
+ import { ProcessedPositions } from '../transforms/ProcessedPositions';
2
2
  import { isGapValue } from '../../plots/utils/gaps';
3
3
  import { MarkerAxisValues } from './MarkerAxisValues';
4
4
  import { PlotAxes } from '../data/PlotAxes';
5
+ import { CategoryOrder } from './CategoryOrder';
6
+ import { NiceTicks } from '../../layout/scales/NiceTicks';
5
7
  import { DISCRETE_SCALE_TYPES } from '../../types/layout/scales';
6
8
  const AXES = ['x', 'y'];
7
9
  const POSITION_CHANNELS = {
@@ -52,7 +54,7 @@ export class ScalesPhase {
52
54
  for (const axis of AXES) {
53
55
  const own = ScalesPhase.#defaultsOf(defaults, axis, axes);
54
56
  if (axes?.bands.includes(axis)) {
55
- scales[axis] = this.#band(scales[axis], own, processedData, axis);
57
+ scales[axis] = this.#band(scales[axis], own, state, axis);
56
58
  continue;
57
59
  }
58
60
  // The value axis of a plot with categories is never one itself, whatever it was marked as.
@@ -71,9 +73,14 @@ export class ScalesPhase {
71
73
  }
72
74
  }
73
75
  const fitted = options.fit?.({ ...state, scales }, ctx) ?? {};
76
+ const fittedAxes = [];
74
77
  for (const axis of AXES) {
75
- if (fitted[axis])
76
- scales[axis] = { ...scales[axis], ...fitted[axis] };
78
+ if (!fitted[axis])
79
+ continue;
80
+ const { fitted: ownDomain, ...fit } = fitted[axis];
81
+ scales[axis] = { ...scales[axis], ...fit };
82
+ if (ownDomain)
83
+ fittedAxes.push(axis);
77
84
  }
78
85
  for (const axis of AXES) {
79
86
  if (axes?.bands.includes(axis) || scales[axis]?.domain)
@@ -86,24 +93,32 @@ export class ScalesPhase {
86
93
  const aggregated = (processedData?.transforms.length ?? 0) > 0 && zero.has(axis);
87
94
  if (!derived.length && !ranged && !aggregated)
88
95
  continue;
89
- const own = numeric(ScalesPhase.processedValues(processedData, axis));
96
+ const own = numeric(ProcessedPositions.values(processedData, axis));
90
97
  if (!own)
91
98
  continue;
92
99
  const values = [...own, ...derived, ...(zero.has(axis) ? [0] : [])];
93
- scales[axis] = {
94
- ...scales[axis],
95
- domain: [Math.min(...values), Math.max(...values)],
96
- nice: scales[axis]?.nice ?? true
97
- };
100
+ const lo = Math.min(...values);
101
+ const hi = Math.max(...values);
102
+ const author = scales[axis];
103
+ // Niced here, with a tolerance, so parts that add up to a whole land on its tick.
104
+ const niced = author?.nice !== false && author?.ticks == null && hi > lo;
105
+ scales[axis] = niced
106
+ ? {
107
+ ...author,
108
+ domain: NiceTicks.fit(state, axis, lo, hi, NiceTicks.toleranceOf(author?.nice)),
109
+ nice: false
110
+ }
111
+ : { ...author, domain: [lo, hi], nice: author?.nice ?? true };
98
112
  }
99
- const next = { ...state, scales };
113
+ const next = { ...state, scales, ...(fittedAxes.length ? { fittedAxes } : {}) };
100
114
  return options.extend ? options.extend(next, ctx) : next;
101
115
  };
102
116
  /** A category axis as a band scale: the kind's options under the author's, in the order the kind asks for. */
103
- #band(author, own, processed, axis) {
117
+ #band(author, own, state, axis) {
118
+ const processed = state.processedData;
104
119
  const given = author ?? {};
105
120
  const type = given.type === undefined || given.type === 'auto' || given.type === 'categorical'
106
- ? 'band'
121
+ ? (own.type ?? 'band')
107
122
  : given.type;
108
123
  const band = { ...own, ...given, type };
109
124
  // A padding the author gives replaces the kind's own inner and outer ones.
@@ -115,23 +130,18 @@ export class ScalesPhase {
115
130
  band.paddingOuter = given.padding;
116
131
  }
117
132
  }
133
+ // A sort by what the categories hold is read here, off the rows; the axis then draws from its domain.
134
+ if (CategoryOrder.isDeclarative(band.sort)) {
135
+ const order = band.domain ? undefined : CategoryOrder.of(band.sort, state, axis);
136
+ delete band.sort;
137
+ if (order)
138
+ band.domain = order;
139
+ }
118
140
  if (this.keepsDataOrder && !band.domain) {
119
- band.domain = [...new Set(ScalesPhase.processedValues(processed, axis))];
141
+ band.domain = [...new Set(ProcessedPositions.values(processed, axis))];
120
142
  }
121
143
  return band;
122
144
  }
123
- /** Every value the plot's own processed rows sit at on one axis. */
124
- static processedValues(processed, axis) {
125
- if (!processed)
126
- return [];
127
- return POSITION_CHANNELS[axis].flatMap((name) => {
128
- const channel = processed.channels[name];
129
- if (channel === undefined)
130
- return [];
131
- const read = resolveAccessor(channel);
132
- return processed.data.map((row) => read(row));
133
- });
134
- }
135
145
  /** The axes `refs` name, by name or by the role they play in this state. */
136
146
  static #axesOf(refs, state) {
137
147
  return (refs ?? []).map((ref) => ref === 'value'
@@ -147,7 +157,7 @@ export class ScalesPhase {
147
157
  }
148
158
  /** How far an axis reaches from zero: the largest magnitude its rows, and the gaps filled in between them, sit at. */
149
159
  static #reachOf(state, axis) {
150
- const rows = ScalesPhase.processedValues(state.processedData, axis)
160
+ const rows = ProcessedPositions.values(state.processedData, axis)
151
161
  .filter((v) => !isGapValue(v))
152
162
  .map((v) => Math.abs(Number(v)));
153
163
  const filled = [...(state.gapFillMaps?.values() ?? [])].flatMap((fills) => [...fills.values()].map((fill) => Math.abs(fill.value)));
@@ -2,7 +2,7 @@ import { ScalesPhase } from '../scales/ScalesPhase';
2
2
  import type { PlotAxes } from '../data/PlotAxes';
3
3
  import type { AxisChannelName } from '../../types/layout/mapping';
4
4
  import type { FacetStageState, PhaseStage, ProcessedData, SharedAxisValues, SharedScalesOptions } from '../../types/phases';
5
- import type { AxisBasedScalesConfig } from '../../types/layout/scales';
5
+ import type { AxisBasedScalesConfig, NiceOption } from '../../types/layout/scales';
6
6
  /** One channel's shared scale: its domain, and whether svelteplot may still round it. */
7
7
  type SharedScale = {
8
8
  domain: unknown[];
@@ -13,6 +13,10 @@ type SharedScalesState = FacetStageState & {
13
13
  axes?: PlotAxes;
14
14
  processedData?: ProcessedData;
15
15
  markers?: object[];
16
+ scales?: Partial<Record<AxisChannelName, {
17
+ nice?: NiceOption;
18
+ sort?: unknown;
19
+ }>>;
16
20
  sharedScales?: Record<string, AxisBasedScalesConfig<never>>;
17
21
  };
18
22
  /**
@@ -38,7 +42,7 @@ export declare class SharedScalesPhase<TState extends SharedScalesState, TCtx> i
38
42
  * count derived from each panel's height, which over-rounds short panels and
39
43
  * can disagree between panels of different heights.
40
44
  */
41
- static buildSharedAxisScale(slices: SharedAxisValues[], axis: AxisChannelName): SharedScale;
45
+ static buildSharedAxisScale(slices: SharedAxisValues[], axis: AxisChannelName, niceTolerance?: number): SharedScale;
42
46
  /**
43
47
  * Where one panel's rows and markers sit on each axis, read off a pipeline
44
48
  * run over every panel - or, without a `panel`, where all of them sit.
@@ -1,7 +1,9 @@
1
- import { nice as niceExtent } from 'd3-array';
1
+ import { ProcessedPositions } from '../transforms/ProcessedPositions';
2
+ import { NiceTicks } from '../../layout/scales/NiceTicks';
3
+ import { CategoryOrder } from '../scales/CategoryOrder';
2
4
  import { ScalesPhase } from '../scales/ScalesPhase';
3
5
  import { Pipeline } from '../Pipeline';
4
- import { PANEL_KEY, FacetPhase } from '../facet/FacetPhase';
6
+ import { PANEL_KEY, FacetPanels } from '../facet/FacetPanels';
5
7
  import { isFacetWrap } from '../../layout/facet/config';
6
8
  import { MarkerAxisValues } from '../scales/MarkerAxisValues';
7
9
  /** Natural ascending order, as svelteplot sorts a band domain. */
@@ -38,7 +40,9 @@ export class SharedScalesPhase {
38
40
  // A symmetric axis has no domain but the one the kind's "scales" phase gives it.
39
41
  const fromPhase = new Set([
40
42
  ...(this.#options?.fromScalesPhase ?? []),
41
- ...this.#scales.symmetricAxes(state)
43
+ ...this.#scales.symmetricAxes(state),
44
+ // A category axis ordered by what its categories hold takes the order the "scales" phase reads off every row.
45
+ ...(state.axes?.bands ?? []).filter((axis) => CategoryOrder.isDeclarative(state.scales?.[axis]?.sort))
42
46
  ]);
43
47
  const layout = {
44
48
  band: [...(state.axes?.bands ?? [])],
@@ -49,7 +53,7 @@ export class SharedScalesPhase {
49
53
  /** The channel's domain over `members` panels, or every row without them. */
50
54
  const domainOver = (channel, members) => {
51
55
  if (fromPhase.has(channel)) {
52
- const scoped = members ? FacetPhase.narrowToPanels(state, members) : state;
56
+ const scoped = members ? FacetPanels.narrowToPanels(state, members) : state;
53
57
  const scales = this.#kindScales.run(scoped, ctx).scales;
54
58
  const domain = scales?.[channel]?.domain;
55
59
  return domain === undefined ? undefined : { domain };
@@ -59,7 +63,7 @@ export class SharedScalesPhase {
59
63
  const values = members
60
64
  ? members.map((panel) => SharedScalesPhase.buildPanelAxisValues(state, panel, layout))
61
65
  : [SharedScalesPhase.buildPanelAxisValues(state, undefined, layout)];
62
- return SharedScalesPhase.buildSharedAxisScale(values, channel);
66
+ return SharedScalesPhase.buildSharedAxisScale(values, channel, NiceTicks.toleranceOf(state.scales?.[channel]?.nice));
63
67
  };
64
68
  const cache = new Map();
65
69
  const scalesOf = (place) => {
@@ -103,7 +107,7 @@ export class SharedScalesPhase {
103
107
  * count derived from each panel's height, which over-rounds short panels and
104
108
  * can disagree between panels of different heights.
105
109
  */
106
- static buildSharedAxisScale(slices, axis) {
110
+ static buildSharedAxisScale(slices, axis, niceTolerance) {
107
111
  const values = slices
108
112
  .flatMap((slice) => slice[axis])
109
113
  .filter((v) => v != null && v !== '' && !(typeof v === 'number' && !Number.isFinite(v)));
@@ -119,7 +123,9 @@ export class SharedScalesPhase {
119
123
  const numbers = slices.some((slice) => slice.zero.includes(axis))
120
124
  ? [...values, 0]
121
125
  : values;
122
- return { domain: niceExtent(Math.min(...numbers), Math.max(...numbers), 10), nice: false };
126
+ const lo = Math.min(...numbers);
127
+ const hi = Math.max(...numbers);
128
+ return { domain: NiceTicks.domain(lo, hi, 10, niceTolerance), nice: false };
123
129
  }
124
130
  if (values.every((v) => v instanceof Date)) {
125
131
  const times = values.map((d) => +d);
@@ -139,7 +145,7 @@ export class SharedScalesPhase {
139
145
  };
140
146
  const markers = (state.markers ?? []).filter((marker) => inPanel(marker[PANEL_KEY]));
141
147
  const values = (axis) => [
142
- ...ScalesPhase.processedValues(processed, axis),
148
+ ...ProcessedPositions.values(processed, axis),
143
149
  ...MarkerAxisValues.of(markers, axis)
144
150
  ];
145
151
  return {
@@ -1,4 +1,5 @@
1
1
  import type { StatisticSource } from '../../types/phases/statistics/source';
2
+ import type { AxisChannelName } from '../../types/layout/mapping';
2
3
  import type { Series } from '../../types/plots/data/common';
3
4
  import type { StatisticConfig } from '../../types/layout/statistics';
4
5
  import type { AxisBasedMarkersConfig } from '../../types/markers/common';
@@ -10,12 +11,13 @@ import type { AxisBasedMarkersConfig } from '../../types/markers/common';
10
11
  export declare class Statistics {
11
12
  #private;
12
13
  /**
13
- * Builds one {@link StatisticConfig} over a data source into the marker it
14
- * renders as - `regression`/`bollinger` construct their marker directly
15
- * (svelteplot resolves the curve/band itself, at render time); the others
16
- * compute their rows first.
14
+ * Builds one {@link StatisticConfig} over a data source into the markers it
15
+ * renders as. Every statistic's own `build` returns a list, since one can
16
+ * draw several markers (`deviation`'s band and rule); `regression`/`bollinger`
17
+ * construct their marker directly (svelteplot resolves the curve/band
18
+ * itself, at render time), the others compute their rows first.
17
19
  */
18
- static buildMarker<T extends Record<string, unknown>>(source: StatisticSource<T>, config: StatisticConfig): AxisBasedMarkersConfig;
20
+ static buildMarker<T extends Record<string, unknown>>(source: StatisticSource<T>, config: StatisticConfig): AxisBasedMarkersConfig[];
19
21
  /**
20
22
  * Resolves a plot's own top-level `statistics` prop against its already-built
21
23
  * `Series<T>[]` (every kind has this before `mapping` runs - see
@@ -30,6 +32,8 @@ export declare class Statistics {
30
32
  static buildForPlot<T extends Record<string, unknown>>(args: {
31
33
  series: Series<T>[];
32
34
  statistics: StatisticConfig[] | undefined;
35
+ /** The axis the plot measures along, from its `PlotAxes`. */
36
+ valueAxis?: AxisChannelName;
33
37
  colorFor?: (seriesName: string) => string;
34
38
  }): AxisBasedMarkersConfig[];
35
39
  /**
@@ -49,5 +53,5 @@ export declare class Statistics {
49
53
  */
50
54
  static expandMarkers<TMarker extends {
51
55
  type: string;
52
- }, T extends Record<string, unknown>>(markers: TMarker[], fallbackData: T[]): (TMarker | AxisBasedMarkersConfig)[];
56
+ }, T extends Record<string, unknown>>(markers: TMarker[], fallbackData: T[], valueAxis?: AxisChannelName): (TMarker | AxisBasedMarkersConfig)[];
53
57
  }
@@ -6,6 +6,7 @@ import { Density2dStatistic } from './methods/Density2dStatistic';
6
6
  import { BoxStatistic } from './methods/BoxStatistic';
7
7
  import { RegressionStatistic } from './methods/RegressionStatistic';
8
8
  import { BollingerStatistic } from './methods/BollingerStatistic';
9
+ import { DeviationStatistic } from './methods/DeviationStatistic';
9
10
  /**
10
11
  * The statistics a plot or a marker asks for, as the markers they draw as.
11
12
  * Each statistic type is a class of its own under `methods/`; the same
@@ -13,10 +14,11 @@ import { BollingerStatistic } from './methods/BollingerStatistic';
13
14
  */
14
15
  export class Statistics {
15
16
  /**
16
- * Builds one {@link StatisticConfig} over a data source into the marker it
17
- * renders as - `regression`/`bollinger` construct their marker directly
18
- * (svelteplot resolves the curve/band itself, at render time); the others
19
- * compute their rows first.
17
+ * Builds one {@link StatisticConfig} over a data source into the markers it
18
+ * renders as. Every statistic's own `build` returns a list, since one can
19
+ * draw several markers (`deviation`'s band and rule); `regression`/`bollinger`
20
+ * construct their marker directly (svelteplot resolves the curve/band
21
+ * itself, at render time), the others compute their rows first.
20
22
  */
21
23
  static buildMarker(source, config) {
22
24
  switch (config.type) {
@@ -32,6 +34,8 @@ export class Statistics {
32
34
  return RegressionStatistic.build(source, config);
33
35
  case 'bollinger':
34
36
  return BollingerStatistic.build(source, config);
37
+ case 'deviation':
38
+ return DeviationStatistic.build(source, config);
35
39
  }
36
40
  }
37
41
  /** Narrows a `Series`'s own `Accessor<T,AxisValue>` to a source's field-key-or-function shape - safe in practice, since a real row's field key is always a string. */
@@ -52,7 +56,7 @@ export class Statistics {
52
56
  * accessor). Named `series`: one statistic per listed series.
53
57
  */
54
58
  static buildForPlot(args) {
55
- const { series, statistics, colorFor } = args;
59
+ const { series, statistics, valueAxis, colorFor } = args;
56
60
  if (!statistics?.length || !series.length)
57
61
  return [];
58
62
  return statistics.flatMap((stat) => {
@@ -62,9 +66,10 @@ export class Statistics {
62
66
  data: pooled,
63
67
  x: Statistics.#accessor(series[0].x),
64
68
  y: Statistics.#accessor(series[0].y),
69
+ axis: valueAxis,
65
70
  color: colorFor?.(series[0].name)
66
71
  };
67
- return [Statistics.buildMarker(source, stat)];
72
+ return Statistics.buildMarker(source, stat);
68
73
  }
69
74
  const names = stat.series ?? series.map((s) => s.name);
70
75
  return names.flatMap((name) => {
@@ -75,9 +80,10 @@ export class Statistics {
75
80
  data: match.data,
76
81
  x: Statistics.#accessor(match.x),
77
82
  y: Statistics.#accessor(match.y),
83
+ axis: valueAxis,
78
84
  color: colorFor?.(name)
79
85
  };
80
- return [Statistics.buildMarker(source, stat)];
86
+ return Statistics.buildMarker(source, stat);
81
87
  });
82
88
  });
83
89
  }
@@ -128,7 +134,7 @@ export class Statistics {
128
134
  * (neither field) always falls through the guard below untouched, and a
129
135
  * future "common" marker kind is eligible with no extra bookkeeping here.
130
136
  */
131
- static expandMarkers(markers, fallbackData) {
137
+ static expandMarkers(markers, fallbackData, valueAxis) {
132
138
  return markers.flatMap((marker) => {
133
139
  const statable = marker;
134
140
  const { x, y } = statable;
@@ -137,7 +143,11 @@ export class Statistics {
137
143
  if (!statable.statistics?.length || !isAccessor(x) || !isAccessor(y))
138
144
  return [marker];
139
145
  const data = statable.data ?? fallbackData;
140
- const accessors = { x: x, y: y };
146
+ const accessors = {
147
+ x: x,
148
+ y: y,
149
+ axis: valueAxis
150
+ };
141
151
  // A marker's `color` channel groups it: each statistic is then derived per
142
152
  // group, in that group's own color - same as a plot's statistics per series.
143
153
  const colorFn = statable.color
@@ -146,7 +156,7 @@ export class Statistics {
146
156
  const flatColor = Statistics.#markerBaseColor(statable);
147
157
  const derived = statable.statistics.flatMap((stat) => {
148
158
  if (!colorFn || !statable.color || stat.pooled) {
149
- return [Statistics.buildMarker({ data, ...accessors, color: flatColor }, stat)];
159
+ return Statistics.buildMarker({ data, ...accessors, color: flatColor }, stat);
150
160
  }
151
161
  return Statistics.#groupRowsByColor(data, statable.color).flatMap((rows) => Statistics.buildMarker({ data: rows, ...accessors, color: colorFn(rows[0]) }, stat));
152
162
  });
@@ -1,7 +1,6 @@
1
1
  import { AuthorMarkers } from './AuthorMarkers';
2
2
  import { Statistics } from './Statistics';
3
- import { PANEL_KEY, FacetPhase } from '../facet/FacetPhase';
4
- import { TransformsPhase } from '../transforms/TransformsPhase';
3
+ import { PANEL_KEY, FacetPanels } from '../facet/FacetPanels';
5
4
  import { PlotAxes } from '../data/PlotAxes';
6
5
  /** Marker kinds that draw from a channel pair, so they take the plot's `x`/`y` when the author leaves one out. */
7
6
  const POSITIONED_KINDS = new Set(['line', 'area', 'dot']);
@@ -25,7 +24,7 @@ export class StatisticsPhase {
25
24
  run = (state) => {
26
25
  if (!state.panels)
27
26
  return { ...state, markers: this.#resolve(state) };
28
- const markers = state.panels.flatMap((panel) => this.#resolve(FacetPhase.narrowToPanel(state, panel.key)).map((marker) => ({ ...marker, [PANEL_KEY]: panel.key })));
27
+ const markers = state.panels.flatMap((panel) => this.#resolve(FacetPanels.narrowToPanel(state, panel.key)).map((marker) => ({ ...marker, [PANEL_KEY]: panel.key })));
29
28
  return { ...state, markers };
30
29
  };
31
30
  #resolve(state) {
@@ -51,10 +50,15 @@ export class StatisticsPhase {
51
50
  // A series setting no value of its own (a histogram's) measures its processed rows: its bins.
52
51
  const valueAxis = PlotAxes.valueOf(state);
53
52
  const measured = state.processedData && resolvedSeries.some((s) => s[valueAxis] === undefined)
54
- ? TransformsPhase.buildProcessedGroups(state).map((group) => group.series)
53
+ ? (state.processedGroups ?? []).map((group) => group.series)
55
54
  : resolvedSeries;
56
55
  return [
57
- ...Statistics.buildForPlot({ series: measured, statistics, colorFor: colorForSeries }),
56
+ ...Statistics.buildForPlot({
57
+ series: measured,
58
+ statistics,
59
+ valueAxis,
60
+ colorFor: colorForSeries
61
+ }),
58
62
  ...Statistics.expandMarkers(AuthorMarkers.prepare(positioned, {
59
63
  grouping: inheritGrouping ? state.grouping : undefined,
60
64
  color: inheritGrouping ? state.color : undefined,
@@ -62,7 +66,7 @@ export class StatisticsPhase {
62
66
  flat,
63
67
  resolvedSeries,
64
68
  scopedGroups: state.scopedGroups
65
- }), flat)
69
+ }), flat, valueAxis)
66
70
  ];
67
71
  }
68
72
  }
@@ -5,5 +5,5 @@ import { type StatisticSource } from '../../../types/phases/statistics/source';
5
5
  export declare class BollingerStatistic {
6
6
  static build<T extends Record<string, unknown>>(source: StatisticSource<T>, config: Extract<StatisticConfig, {
7
7
  type: 'bollinger';
8
- }>): BollingerMarkerConfig;
8
+ }>): BollingerMarkerConfig[];
9
9
  }
@@ -2,17 +2,19 @@ import { STATISTIC_FALLBACK_COLOR } from '../../../types/phases/statistics/sourc
2
2
  /** Bollinger bands over the source, drawn as a `bollinger` marker (svelteplot computes them at render time). */
3
3
  export class BollingerStatistic {
4
4
  static build(source, config) {
5
- return {
6
- type: 'bollinger',
7
- data: source.data,
8
- x: source.x,
9
- y: source.y,
10
- n: config.n,
11
- k: config.k,
12
- styles: {
13
- ...config.styles,
14
- stroke: config.styles?.stroke ?? source.color ?? STATISTIC_FALLBACK_COLOR
5
+ return [
6
+ {
7
+ type: 'bollinger',
8
+ data: source.data,
9
+ x: source.x,
10
+ y: source.y,
11
+ n: config.n,
12
+ k: config.k,
13
+ styles: {
14
+ ...config.styles,
15
+ stroke: config.styles?.stroke ?? source.color ?? STATISTIC_FALLBACK_COLOR
16
+ }
15
17
  }
16
- };
18
+ ];
17
19
  }
18
20
  }
@@ -5,5 +5,5 @@ import { type StatisticSource } from '../../../types/phases/statistics/source';
5
5
  export declare class BoxStatistic {
6
6
  static build<T extends Record<string, unknown>>(source: StatisticSource<T>, config: Extract<StatisticConfig, {
7
7
  type: 'box';
8
- }>): BoxMarkerConfig;
8
+ }>): BoxMarkerConfig[];
9
9
  }
@@ -2,17 +2,19 @@ import { STATISTIC_FALLBACK_COLOR } from '../../../types/phases/statistics/sourc
2
2
  /** Box-and-whisker summary of the source, drawn as a `box` marker. */
3
3
  export class BoxStatistic {
4
4
  static build(source, config) {
5
- return {
6
- type: 'box',
7
- data: source.data,
8
- x: source.x,
9
- y: source.y,
10
- sort: config.sort,
11
- bar: { fill: source.color ?? STATISTIC_FALLBACK_COLOR, ...config.bar },
12
- rule: config.rule,
13
- dot: config.dot,
14
- tickMedian: config.tickMedian,
15
- tickMinMax: config.tickMinMax
16
- };
5
+ return [
6
+ {
7
+ type: 'box',
8
+ data: source.data,
9
+ x: source.x,
10
+ y: source.y,
11
+ sort: config.sort,
12
+ bar: { fill: source.color ?? STATISTIC_FALLBACK_COLOR, ...config.bar },
13
+ rule: config.rule,
14
+ dot: config.dot,
15
+ tickMedian: config.tickMedian,
16
+ tickMinMax: config.tickMinMax
17
+ }
18
+ ];
17
19
  }
18
20
  }
@@ -5,5 +5,5 @@ import { type StatisticSource } from '../../../types/phases/statistics/source';
5
5
  export declare class Density2dStatistic {
6
6
  static build<T extends Record<string, unknown>>(source: StatisticSource<T>, config: Extract<StatisticConfig, {
7
7
  type: 'density2d';
8
- }>): DensityMarkerConfig;
8
+ }>): DensityMarkerConfig[];
9
9
  }