@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,12 +1,12 @@
1
- import { resolveColorScale } from '../../../utils/color';
2
- import { resolveOpacityScale } from '../../../utils/opacity';
3
- import { ContinuousDomain } from '../../../utils/ContinuousDomain';
4
- import { resolveFeatureScales } from '../../utils/geoSegments';
1
+ import { ColorRamp } from '../../../../utils/color';
2
+ import { OpacityScale } from '../../../../utils/OpacityScale';
3
+ import { ContinuousDomain } from '../../../../utils/ContinuousDomain';
4
+ import { GeoSegments } from '../GeoSegments';
5
5
  /**
6
6
  * GeoPlot's "scales" phase: each feature's own resolved color (mirrors
7
7
  * HeatmapPlot's own), with a per-feature override for whichever segment
8
8
  * (its `grouping` bucket, or itself by id) sets its own `scales.color` -
9
- * see `resolveFeatureScales`. A segment ramp's domain is built from just
9
+ * see `GeoSegments.scales`. A segment ramp's domain is built from just
10
10
  * the features that share its own key, so e.g. two grouping buckets each
11
11
  * get a ramp scaled to their own value range, not the whole dataset's.
12
12
  */
@@ -19,14 +19,12 @@ export function buildScales(state, ctx) {
19
19
  const valueDomain = ContinuousDomain.build(scales.color?.domain, colorValues);
20
20
  const effectiveDomain = valueDomain ? ContinuousDomain.ramp(valueDomain, range) : null;
21
21
  const colorScale = effectiveDomain
22
- ? resolveColorScale({ ...scales.color, domain: effectiveDomain }, effectiveDomain, [
23
- cfg.continuous.min,
24
- cfg.continuous.max
25
- ])
22
+ ? ColorRamp.continuous(cfg, scales.color, effectiveDomain)
26
23
  : null;
27
24
  // Per-segment-key ramp cache - built lazily, once per distinct grouping
28
25
  // value/feature id that actually has its own `scales.color`.
29
26
  const segmentScaleCache = new Map();
27
+ const colorRamps = [];
30
28
  function segmentColorScaleFor(key, segScales) {
31
29
  if (segmentScaleCache.has(key))
32
30
  return segmentScaleCache.get(key);
@@ -35,9 +33,16 @@ export function buildScales(state, ctx) {
35
33
  : features.filter((g) => g.__id === key);
36
34
  const vals = peers.map((g) => color?.(g)).filter((v) => v != null);
37
35
  const scale = vals.length
38
- ? resolveColorScale({ ...segScales?.color, domain: [Math.min(...vals), Math.max(...vals)] }, [Math.min(...vals), Math.max(...vals)], [cfg.continuous.min, cfg.continuous.max])
36
+ ? ColorRamp.continuous(cfg, segScales?.color, [Math.min(...vals), Math.max(...vals)])
39
37
  : null;
40
38
  segmentScaleCache.set(key, scale);
39
+ if (vals.length && segScales?.color) {
40
+ colorRamps.push({
41
+ name: key,
42
+ domain: [Math.min(...vals), Math.max(...vals)],
43
+ scale: segScales.color
44
+ });
45
+ }
41
46
  return scale;
42
47
  }
43
48
  const resolveColor = colorScale
@@ -47,7 +52,7 @@ export function buildScales(state, ctx) {
47
52
  return undefined;
48
53
  const groupingValue = grouping?.(f);
49
54
  const featureId = f.__id ?? '';
50
- const segScales = resolveFeatureScales(segments, featureId, groupingValue);
55
+ const segScales = GeoSegments.scales(segments, featureId, groupingValue);
51
56
  if (segScales?.color) {
52
57
  const scale = segmentColorScaleFor(groupingValue ?? featureId, segScales);
53
58
  if (scale)
@@ -56,6 +61,16 @@ export function buildScales(state, ctx) {
56
61
  return colorScale ? colorScale(v) : undefined;
57
62
  }
58
63
  : undefined;
64
+ // Every segment ramp is built up front, so the legend can draw each one.
65
+ if (colorScale) {
66
+ for (const f of features) {
67
+ const featureId = f.__id ?? '';
68
+ const groupingValue = grouping?.(f);
69
+ const segScales = GeoSegments.scales(segments, featureId, groupingValue);
70
+ if (segScales?.color)
71
+ segmentColorScaleFor(groupingValue ?? featureId, segScales);
72
+ }
73
+ }
59
74
  // Plot-level only - no segment-scoped opacity ramp (unlike `resolveColor`
60
75
  // above), since there's no concrete use case yet driving that complexity.
61
76
  const opacityDomain = (() => {
@@ -65,7 +80,7 @@ export function buildScales(state, ctx) {
65
80
  return vals.length ? [Math.min(...vals), Math.max(...vals)] : null;
66
81
  })();
67
82
  const opacityScale = opacityDomain
68
- ? resolveOpacityScale(scales.opacity, opacityDomain, cfg.continuous.opacityRange)
83
+ ? OpacityScale.resolve(scales.opacity, opacityDomain, cfg.continuous.opacityRange)
69
84
  : null;
70
85
  const resolveOpacity = opacityScale
71
86
  ? (f) => {
@@ -76,6 +91,7 @@ export function buildScales(state, ctx) {
76
91
  return {
77
92
  ...state,
78
93
  colorDomain: valueDomain ?? undefined,
94
+ colorRamps: colorRamps.length ? colorRamps : undefined,
79
95
  opacityDomain: opacityDomain && typeof opacityDomain[0] === 'number'
80
96
  ? opacityDomain
81
97
  : undefined,
@@ -1,3 +1,3 @@
1
- import type { GeoPlotState } from '../../../types/plots/geo/state';
1
+ import type { GeoPlotState } from '../../../../types/plots/map/geo/state';
2
2
  /** GeoPlot's "tooltip" phase: a hovered feature reads as its id. */
3
3
  export declare function buildTooltip<TProps extends Record<string, unknown>>(state: GeoPlotState<TProps>): GeoPlotState<TProps>;
@@ -0,0 +1,5 @@
1
+ import { GeoFeatures } from '../GeoFeatures.svelte';
2
+ /** GeoPlot's "tooltip" phase: a hovered feature reads as its id. */
3
+ export function buildTooltip(state) {
4
+ return { ...state, tooltipFormat: (f) => GeoFeatures.defaultId(f) };
5
+ }
@@ -1,5 +1,5 @@
1
- import type { FacetConfig } from '../../types/layout/facet';
2
- import type { TimelineConfig } from '../../types/layout/timeline';
1
+ import type { FacetConfig } from '../../../types/layout/facet';
2
+ import type { TimelineConfig } from '../../../types/layout/timeline';
3
3
  type Row = Record<string, unknown>;
4
4
  /**
5
5
  * What a GeoPlot hands `Plot` to slice by: one stand-in row per value
@@ -1,4 +1,5 @@
1
- import { isFacetWrap } from '../../layout/facet/config';
1
+ import { TimelineTime } from '../../../layout/timeline/TimelineTime';
2
+ import { isFacetWrap } from '../../../layout/facet/config';
2
3
  const SLICE = Symbol('dct-geo-slice');
3
4
  /** A slicing field's value on a feature (from its `properties`) or on a marker's own row. */
4
5
  function readField(field, row) {
@@ -32,9 +33,11 @@ export function buildGeoSlicing(args) {
32
33
  : readField(fields[dimension], row);
33
34
  let combos = [{}];
34
35
  for (const dimension of Object.keys(fields)) {
35
- const values = [
36
- ...new Set(rows.map((row) => readField(fields[dimension], row)).filter((v) => v != null))
37
- ];
36
+ const read = rows.map((row) => readField(fields[dimension], row)).filter((v) => v != null);
37
+ // Dates on the same step are one value.
38
+ const time = new TimelineTime(timeline?.dateFormat);
39
+ const keyOf = (value) => dimension === 'time' ? String(time.toTime(value) ?? value) : value;
40
+ const values = [...new Map(read.map((value) => [keyOf(value), value])).values()];
38
41
  combos = combos.flatMap((combo) => values.map((value) => ({ ...combo, [dimension]: value })));
39
42
  }
40
43
  return {
@@ -1,7 +1,7 @@
1
1
  <script lang="ts" generics="TData extends Record<string, unknown>">
2
- import Plot from '../../layout/plot/Plot.svelte';
2
+ import Plot from '../../../layout/plot/Plot.svelte';
3
3
  import { buildBarDefaults } from './defaults';
4
- import type { BarPlotProps, BarPlotCoreProps } from '../../types/plots/bar/props';
4
+ import type { BarPlotProps, BarPlotCoreProps } from '../../../types/plots/ranking/bar/props';
5
5
 
6
6
  /**
7
7
  * A bar plot: vertical when its categories run along `x`, horizontal when they run along `y` (the value then on `x`, as in svelteplot's `BarX`). Draws from pre-built `series` or flat `data` rows.
@@ -1,5 +1,5 @@
1
- import Plot from '../../layout/plot/Plot.svelte';
2
- import type { BarPlotProps } from '../../types/plots/bar/props';
1
+ import Plot from '../../../layout/plot/Plot.svelte';
2
+ import type { BarPlotProps } from '../../../types/plots/ranking/bar/props';
3
3
  declare function $$render<TData extends Record<string, unknown>>(): {
4
4
  props: BarPlotProps<TData>;
5
5
  exports: {};
@@ -0,0 +1,16 @@
1
+ import type { AxisPlotDefaults } from '../../../types/phases';
2
+ import type { AxisScale } from '../../../types/layout/scales';
3
+ import type { BarPlotState, BarPlotCtx } from '../../../types/plots/ranking/bar/state';
4
+ /**
5
+ * The domain a bar plot fits to its own bars on its value axis: from zero to
6
+ * the tallest span (and the `extra` values a plot draws beyond its bars), niced to as many ticks as fit the plot. Left out when the
7
+ * author pins the axis, and when there is no span to fit.
8
+ */
9
+ export declare function fitValueDomain<TData extends Record<string, unknown>>(state: BarPlotState<TData>, extra?: readonly number[]): Partial<Record<'x' | 'y', Partial<AxisScale<TData>>>>;
10
+ /**
11
+ * BarPlot on the shared pipeline: discrete bars with gap fills along one
12
+ * category axis - `x`, or `y` for horizontal bars, as the "data" phase reads
13
+ * it off the values - its own scales (padding, bar layout) and markers.
14
+ * Its plot defaults to: hover along the category axis, timeline tweens matched per category and group.
15
+ */
16
+ export declare function buildBarDefaults<TData extends Record<string, unknown>>(): AxisPlotDefaults<BarPlotState<TData>, BarPlotCtx>;
@@ -1,24 +1,27 @@
1
+ import { ProcessedPositions } from '../../../phases/transforms/ProcessedPositions';
1
2
  import { buildMarks, buildValueLabels, buildHitAreas, buildBarGeometry } from './markers';
2
- import { niceDomain, naturalTickCount } from '../../layout/scales/niceDomain';
3
- import { Margins } from '../../layout/margins/Margins';
4
- import { SERIES_KEY, TransformsPhase } from '../../phases/transforms/TransformsPhase';
5
- import { PlotAxes } from '../../phases/data/PlotAxes';
3
+ import { NiceTicks } from '../../../layout/scales/NiceTicks';
4
+ import { SERIES_KEY } from '../../../phases/transforms/TransformsPhase';
5
+ import { PlotAxes } from '../../../phases/data/PlotAxes';
6
6
  /**
7
7
  * The domain a bar plot fits to its own bars on its value axis: from zero to
8
- * the tallest span, niced to as many ticks as fit the plot. Left out when the
8
+ * the tallest span (and the `extra` values a plot draws beyond its bars), niced to as many ticks as fit the plot. Left out when the
9
9
  * author pins the axis, and when there is no span to fit.
10
10
  */
11
- function fitValueDomain(state) {
12
- const isHorizontal = state.axes?.isHorizontal ?? false;
11
+ export function fitValueDomain(state, extra = []) {
13
12
  const axis = PlotAxes.valueOf(state);
14
13
  const scale = state.scales[axis];
15
- if (scale?.domain != null || scale?.ticks != null || scale?.nice != null)
14
+ if (scale?.domain != null || scale?.ticks != null || typeof scale?.nice === 'boolean')
16
15
  return {};
17
16
  // Every bar's span, as the "transforms" phase left it - its baseline is
18
17
  // unknown until the domain is, so a plain bar reads as reaching from zero.
19
- const { of: spanOf } = TransformsPhase.processedSpan(state.processedData, axis);
18
+ const { of: spanOf } = ProcessedPositions.span(state.processedData, axis);
20
19
  let lo = 0;
21
20
  let hi = 0;
21
+ for (const value of extra) {
22
+ lo = Math.min(lo, value);
23
+ hi = Math.max(hi, value);
24
+ }
22
25
  for (const row of state.processedData?.data ?? []) {
23
26
  const span = spanOf(row);
24
27
  if (!span)
@@ -28,10 +31,9 @@ function fitValueDomain(state) {
28
31
  }
29
32
  if (hi <= lo)
30
33
  return {};
31
- const spacing = isHorizontal ? 80 : 50;
32
- const box = Margins.AXIS_ESTIMATE.contentBox(state.width, state.height);
33
- const count = naturalTickCount(isHorizontal ? box.width : box.height, spacing, 2);
34
- return { [axis]: { domain: niceDomain(lo, hi, count) } };
34
+ return {
35
+ [axis]: { domain: NiceTicks.fit(state, axis, lo, hi, NiceTicks.toleranceOf(scale?.nice)) }
36
+ };
35
37
  }
36
38
  /**
37
39
  * BarPlot on the shared pipeline: discrete bars with gap fills along one
@@ -50,7 +52,7 @@ export function buildBarDefaults() {
50
52
  defaults: (_state, ctx) => ({
51
53
  category: { paddingInner: ctx.cfg.bar.paddingInner, paddingOuter: ctx.cfg.bar.paddingOuter }
52
54
  }),
53
- fit: fitValueDomain
55
+ fit: (state) => fitValueDomain(state)
54
56
  },
55
57
  styles: {
56
58
  values: {
@@ -59,7 +61,7 @@ export function buildBarDefaults() {
59
61
  if (labels.anchor !== 'outside')
60
62
  return [];
61
63
  const axis = PlotAxes.valueOf(state);
62
- if (TransformsPhase.processedSpan(state.processedData, axis).stacked)
64
+ if (ProcessedPositions.span(state.processedData, axis).stacked)
63
65
  return [];
64
66
  if (!state.axes?.isHorizontal) {
65
67
  const at = { y: -labels.offset('y') };
@@ -1,11 +1,11 @@
1
- import type { BarMarkerConfig, TextMarkerConfig } from '../../types/markers/common';
2
- import type { BarPlotState, BarPlotCtx } from '../../types/plots/bar/state';
3
- import type { ProcessedRow } from '../../types/phases';
4
- import type { AxisValue } from '../../types/layout/mapping';
5
- import type { BandSlice } from '../../types/layout/hover';
6
- import type { HoverConfig } from '../../types/plots/props';
7
- import { ValueLabels } from '../../layout/styles/ValueLabels';
8
- import type { AxisBasedMarkersConfig } from '../../types/markers/common';
1
+ import type { BarMarkerConfig, TextMarkerConfig } from '../../../types/markers/common';
2
+ import type { BarPlotState, BarPlotCtx } from '../../../types/plots/ranking/bar/state';
3
+ import type { ProcessedRow } from '../../../types/phases';
4
+ import type { AxisValue } from '../../../types/layout/mapping';
5
+ import type { BandSlice } from '../../../types/layout/hover';
6
+ import type { HoverConfig } from '../../../types/plots/props';
7
+ import { ValueLabels } from '../../../layout/styles/ValueLabels';
8
+ import type { AxisBasedMarkersConfig } from '../../../types/markers/common';
9
9
  /**
10
10
  * Where a bar plot's bars sit, read off the state its phases leave: each
11
11
  * processed row's category and span along the value axis, whether the series
@@ -1,9 +1,10 @@
1
- import { getConfiguration } from '../../configuration/config.svelte';
2
- import { GAP_KIND, GAP_VALUE, SERIES_ID_KEY, TransformsPhase } from '../../phases/transforms/TransformsPhase';
3
- import { seriesIdOf } from '../../utils/grouping';
4
- import { resolveGapAreaStyle } from '../utils/gaps';
5
- import { PlotAxes } from '../../phases/data/PlotAxes';
6
- import { ValueLabels } from '../../layout/styles/ValueLabels';
1
+ import { ProcessedPositions } from '../../../phases/transforms/ProcessedPositions';
2
+ import { getConfiguration } from '../../../configuration/config.svelte';
3
+ import { GAP_KIND, GAP_VALUE, SERIES_ID_KEY } from '../../../phases/transforms/TransformsPhase';
4
+ import { seriesIdOf } from '../../../utils/grouping';
5
+ import { resolveGapAreaStyle } from '../../utils/gaps';
6
+ import { PlotAxes } from '../../../phases/data/PlotAxes';
7
+ import { ValueLabels } from '../../../layout/styles/ValueLabels';
7
8
  const GAP_KINDS = ['start', 'middle', 'end'];
8
9
  /**
9
10
  * Where a bar plot's bars sit, read off the state its phases leave: each
@@ -14,18 +15,9 @@ const GAP_KINDS = ['start', 'middle', 'end'];
14
15
  export function buildBarGeometry(state, seriesPadding) {
15
16
  const valueAxis = PlotAxes.valueOf(state);
16
17
  const categoryAxis = PlotAxes.categoryOf(state);
17
- const domain = state.scales[valueAxis]?.domain;
18
- // Bars rise from zero, or from the nearest end of a domain that leaves it out.
19
- const baseline = (() => {
20
- const lo = Number(domain?.[0]);
21
- const hi = Number(domain?.[(domain?.length ?? 1) - 1]);
22
- if (!domain || domain.length < 2 || Number.isNaN(lo) || Number.isNaN(hi))
23
- return 0;
24
- const [min, max] = [Math.min(lo, hi), Math.max(lo, hi)];
25
- return min > 0 ? min : max < 0 ? max : 0;
26
- })();
27
- const { stacked, of: spanOf } = TransformsPhase.processedSpan(state.processedData, valueAxis, baseline);
28
- const position = TransformsPhase.processedPosition(state.processedData, valueAxis);
18
+ const baseline = PlotAxes.baselineOf(state);
19
+ const { stacked, of: spanOf } = ProcessedPositions.span(state.processedData, valueAxis, baseline);
20
+ const position = ProcessedPositions.of(state.processedData, valueAxis);
29
21
  const categoryOf = (row) => position[categoryAxis](row);
30
22
  const names = [...new Set((state.groupedSeries ?? []).map((g) => g.series.name))];
31
23
  // A lone series, or a stack, fills its whole band: there's nothing to set side by side.
@@ -197,7 +189,7 @@ export function buildMarks(state, ctx) {
197
189
  }
198
190
  const isReal = (row) => row[GAP_VALUE] === undefined && geometry.spanOf(row) !== undefined;
199
191
  const segmentMarkers = [];
200
- TransformsPhase.buildProcessedGroups(state, false).forEach((group) => {
192
+ (state.processedGroups ?? []).forEach((group) => {
201
193
  const name = group.series.name;
202
194
  const slice = geometry.sliceOf(name);
203
195
  const defaultColor = colorForSeries(name);
@@ -0,0 +1,42 @@
1
+ <script lang="ts" generics="TData extends Record<string, unknown>">
2
+ import Plot from '../../../layout/plot/Plot.svelte';
3
+ import { buildBulletDefaults } from './defaults';
4
+ import type { BulletPlotProps, BulletPlotCoreProps } from '../../../types/plots/ranking/bullet/props';
5
+
6
+ /**
7
+ * A bullet plot: per category, a bar for its value over bands - `ranges` - that grade it, with a tick marking its `target`, upright or sideways when the categories run along `y`. Draws from pre-built `series` or flat `data` rows.
8
+ * Optional chrome (`title`, `subtitle`, `caption`, `header`, `footer`,
9
+ * `legend`) frames it; `timeline` and `facet` slice its `data` rows.
10
+ * `margins` is bindable: it reports the margin the plot settled on.
11
+ */
12
+ let {
13
+ title,
14
+ subtitle,
15
+ caption,
16
+ header,
17
+ footer,
18
+ legend,
19
+ order,
20
+ timeline,
21
+ facet,
22
+ tooltip,
23
+ margins = $bindable(),
24
+ ...core
25
+ }: BulletPlotProps<TData> = $props();
26
+ </script>
27
+
28
+ <Plot
29
+ core={core as BulletPlotCoreProps<TData>}
30
+ defaults={buildBulletDefaults}
31
+ bind:margins
32
+ {title}
33
+ {subtitle}
34
+ {caption}
35
+ {header}
36
+ {footer}
37
+ {legend}
38
+ {order}
39
+ {timeline}
40
+ {facet}
41
+ {tooltip}
42
+ />
@@ -0,0 +1,26 @@
1
+ import Plot from '../../../layout/plot/Plot.svelte';
2
+ import type { BulletPlotProps } from '../../../types/plots/ranking/bullet/props';
3
+ declare function $$render<TData extends Record<string, unknown>>(): {
4
+ props: BulletPlotProps<TData>;
5
+ exports: {};
6
+ bindings: "margins";
7
+ slots: {};
8
+ events: {};
9
+ };
10
+ declare class __sveltets_Render<TData extends Record<string, unknown>> {
11
+ props(): ReturnType<typeof $$render<TData>>['props'];
12
+ events(): ReturnType<typeof $$render<TData>>['events'];
13
+ slots(): ReturnType<typeof $$render<TData>>['slots'];
14
+ bindings(): "margins";
15
+ exports(): {};
16
+ }
17
+ interface $$IsomorphicComponent {
18
+ new <TData extends Record<string, unknown>>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TData>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TData>['props']>, ReturnType<__sveltets_Render<TData>['events']>, ReturnType<__sveltets_Render<TData>['slots']>> & {
19
+ $$bindings?: ReturnType<__sveltets_Render<TData>['bindings']>;
20
+ } & ReturnType<__sveltets_Render<TData>['exports']>;
21
+ <TData extends Record<string, unknown>>(internal: unknown, props: ReturnType<__sveltets_Render<TData>['props']> & {}): ReturnType<__sveltets_Render<TData>['exports']>;
22
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
23
+ }
24
+ declare const Plot: $$IsomorphicComponent;
25
+ type Plot<TData extends Record<string, unknown>> = InstanceType<typeof Plot<TData>>;
26
+ export default Plot;
@@ -0,0 +1,8 @@
1
+ import type { AxisPlotDefaults } from '../../../types/phases';
2
+ import type { BulletPlotState, BulletPlotCtx } from '../../../types/plots/ranking/bullet/state';
3
+ /**
4
+ * BulletPlot on the shared pipeline: a BarPlot whose bars are drawn thinner
5
+ * over `ranges` - bands that grade the value - with a tick at each `target`.
6
+ * Its value axis fits them along with the bars.
7
+ */
8
+ export declare function buildBulletDefaults<TData extends Record<string, unknown>>(): AxisPlotDefaults<BulletPlotState<TData>, BulletPlotCtx>;
@@ -0,0 +1,24 @@
1
+ import { buildBarDefaults, fitValueDomain } from '../bar/defaults';
2
+ import { buildMarks, buildReach } from './markers';
3
+ /**
4
+ * BulletPlot on the shared pipeline: a BarPlot whose bars are drawn thinner
5
+ * over `ranges` - bands that grade the value - with a tick at each `target`.
6
+ * Its value axis fits them along with the bars.
7
+ */
8
+ export function buildBulletDefaults() {
9
+ const bar = buildBarDefaults();
10
+ return {
11
+ ...bar,
12
+ scales: {
13
+ ...bar.scales,
14
+ defaults: (_state, ctx) => ({
15
+ category: {
16
+ paddingInner: ctx.cfg.bullet.paddingInner,
17
+ paddingOuter: ctx.cfg.bullet.paddingOuter
18
+ }
19
+ }),
20
+ fit: (state, ctx) => fitValueDomain(state, buildReach(state, ctx))
21
+ },
22
+ markers: { ...bar.markers, marks: buildMarks }
23
+ };
24
+ }
@@ -0,0 +1,10 @@
1
+ import type { AxisBasedMarkersConfig } from '../../../types/markers/common';
2
+ import type { BulletPlotState, BulletPlotCtx } from '../../../types/plots/ranking/bullet/state';
3
+ /** Every value the axis has to reach beyond the bars. */
4
+ export declare function buildReach<TData extends Record<string, unknown>>(state: BulletPlotState<TData>, ctx: BulletPlotCtx): number[];
5
+ /**
6
+ * BulletPlot's "markers" phase, back to front: a rule per range, the bars of a
7
+ * bar plot - thinner, so the ranges show around them - and a tick at each
8
+ * target.
9
+ */
10
+ export declare function buildMarks<TData extends Record<string, unknown>>(state: BulletPlotState<TData>, ctx: BulletPlotCtx): AxisBasedMarkersConfig[];
@@ -0,0 +1,90 @@
1
+ import { buildMarks as buildBarMarks, buildBarGeometry } from '../bar/markers';
2
+ import { GAP_VALUE } from '../../../phases/transforms/TransformsPhase';
3
+ import { RowNumbers } from '../../utils/RowNumbers';
4
+ /** Each category's target and range bounds, read off the rows the bars draw. */
5
+ function buildMeasures(state, ctx) {
6
+ const geometry = buildBarGeometry(state, ctx.cfg.bar.seriesPadding);
7
+ return (state.processedData?.data ?? [])
8
+ .filter((row) => row[GAP_VALUE] === undefined && geometry.spanOf(row) !== undefined)
9
+ .map((row) => ({
10
+ category: geometry.categoryOf(row),
11
+ target: RowNumbers.of(state.target, row),
12
+ bounds: (state.ranges ?? [])
13
+ .map((range) => RowNumbers.of(range, row))
14
+ .filter((bound) => bound !== undefined)
15
+ .sort((a, b) => a - b)
16
+ }));
17
+ }
18
+ /** Every value the axis has to reach beyond the bars. */
19
+ export function buildReach(state, ctx) {
20
+ return buildMeasures(state, ctx).flatMap(({ target, bounds }) => [
21
+ ...(target === undefined ? [] : [target]),
22
+ ...bounds
23
+ ]);
24
+ }
25
+ /**
26
+ * BulletPlot's "markers" phase, back to front: a rule per range, the bars of a
27
+ * bar plot - thinner, so the ranges show around them - and a tick at each
28
+ * target.
29
+ */
30
+ export function buildMarks(state, ctx) {
31
+ const configured = ctx.cfg.bullet;
32
+ const own = (state.styles ?? {});
33
+ const rangeColors = own.ranges?.colors ?? configured.rangeColors;
34
+ const rangeWidth = own.ranges?.width ?? configured.rangeWidth;
35
+ const target = {
36
+ color: own.target?.color ?? configured.targetColor ?? ctx.cfg.axis.color,
37
+ width: own.target?.width ?? configured.targetWidth,
38
+ length: own.target?.length ?? configured.targetLength
39
+ };
40
+ const isHorizontal = state.axes?.isHorizontal ?? false;
41
+ const baseline = buildBarGeometry(state, ctx.cfg.bar.seriesPadding).baseline;
42
+ const measures = buildMeasures(state, ctx);
43
+ // Each bound is a band from the baseline, drawn widest first so the narrower ones lie over it.
44
+ const rows = measures.flatMap(({ category, bounds }) => bounds
45
+ .map((bound, rank) => ({
46
+ category,
47
+ from: baseline,
48
+ to: bound,
49
+ stroke: rangeColors[Math.min(rank, rangeColors.length - 1)]
50
+ }))
51
+ .reverse());
52
+ const ranges = rows.length === 0
53
+ ? []
54
+ : [
55
+ {
56
+ type: 'rule',
57
+ legend: false,
58
+ axis: isHorizontal ? 'y' : 'x',
59
+ data: rows,
60
+ value: 'category',
61
+ ...(isHorizontal ? { x1: 'from', x2: 'to' } : { y1: 'from', y2: 'to' }),
62
+ stroke: 'stroke',
63
+ styles: { strokeWidth: rangeWidth }
64
+ }
65
+ ];
66
+ // The bars narrowed to a thickness of their own, centered in their band.
67
+ const bars = buildBarMarks(state, ctx).map((marker) => marker.type === 'bar' && marker.role === 'segment'
68
+ ? {
69
+ ...marker,
70
+ thickness: own.bar?.thickness ?? configured.barThickness
71
+ }
72
+ : marker);
73
+ const targets = measures.flatMap(({ category, target }) => target === undefined ? [] : [{ category, end: target }]);
74
+ const ticks = targets.length === 0
75
+ ? []
76
+ : [
77
+ {
78
+ type: 'tick',
79
+ legend: false,
80
+ data: targets,
81
+ ...(isHorizontal ? { x: 'end', y: 'category' } : { x: 'category', y: 'end' }),
82
+ tickLength: target.length,
83
+ styles: {
84
+ stroke: target.color,
85
+ strokeWidth: target.width
86
+ }
87
+ }
88
+ ];
89
+ return [...ranges, ...bars, ...ticks];
90
+ }
@@ -0,0 +1,48 @@
1
+ import type { ClevelandEntry, ClevelandPlotState } from '../../../types/plots/ranking/cleveland/state';
2
+ import type { PlotStylesConfig } from '../../../types/configuration/styling';
3
+ import type { ConnectorLabel, ConnectorRange, ConnectorStyle } from '../../../types/layout/styles';
4
+ /** What a connector falls back to - the configuration's `connector` block. */
5
+ type ConnectorDefaults = PlotStylesConfig['connector'];
6
+ /**
7
+ * The connectors of a Cleveland-style plot as `styles.connector` styles them:
8
+ * what each one measures, its color, its thickness and its label. The plot's
9
+ * marks read each category's connector through it.
10
+ */
11
+ export declare class ClevelandConnector {
12
+ #private;
13
+ readonly style: ConnectorStyle;
14
+ constructor(style: ConnectorStyle | undefined, defaults: ConnectorDefaults, entries: readonly ClevelandEntry[]);
15
+ /** The series a plot's differences run between, from `styles.connector`. */
16
+ static ends<TData extends Record<string, unknown>>(state: ClevelandPlotState<TData>): {
17
+ from?: string;
18
+ to?: string;
19
+ };
20
+ /** `styles.connector` of a plot's state, over the configuration's defaults and what `entries` measure. */
21
+ static of<TData extends Record<string, unknown>>(state: ClevelandPlotState<TData>, defaults: ConnectorDefaults, entries: readonly ClevelandEntry[]): ClevelandConnector;
22
+ /** What `entry`'s connector measures, which every other setting reads. */
23
+ rangeOf(entry: ClevelandEntry): ConnectorRange;
24
+ /** The color the author asks for `range`'s connector, if they do. */
25
+ color(range: ConnectorRange): string | undefined;
26
+ /** The thickness the author asks for `range`'s connector, if they do, given the dots' radius. */
27
+ width(range: ConnectorRange, dotRadius: number): number | undefined;
28
+ /** The opacity the author asks for `range`'s connector, if they do. */
29
+ opacity(range: ConnectorRange): number | undefined;
30
+ /** How the part of a connector outside the `from`-`to` stretch looks, over the plot's neutral `fallback` color. */
31
+ outside(fallback: string): {
32
+ stroke: string;
33
+ strokeOpacity: number;
34
+ };
35
+ /** The head of the arrow a connector is drawn as, `undefined` when it is a line. */
36
+ get arrow(): {
37
+ width: number;
38
+ headLength: number;
39
+ headAngle: number;
40
+ } | undefined;
41
+ /** The length (px) of the caps a connector draws at its ends, `undefined` when it draws none, given whether the plot draws them unless told otherwise. */
42
+ caps(byDefault: boolean | undefined): number | undefined;
43
+ /** The label options: `undefined` without a label. */
44
+ get label(): ConnectorLabel | undefined;
45
+ /** What the label of `range`'s connector says, `undefined` when it has nothing to say (no difference). */
46
+ text(range: ConnectorRange): string | undefined;
47
+ }
48
+ export {};