@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
package/CHANGELOG.md CHANGED
@@ -2,6 +2,59 @@
2
2
 
3
3
  All notable changes to this project are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project adheres to [Semantic Versioning](https://semver.org/).
4
4
 
5
+ ## [1.2.0] - 2026-10-24
6
+
7
+ ### Added
8
+
9
+ - `LollipopPlot`, a dot on a stem for the value of each category.
10
+ - `DumbbellPlot`, two series joined by a connector for each category.
11
+ - `ClevelandPlot`, any number of series per category joined from the lowest to the highest value, with connectors you can color, turn into arrows and sort by series value or range.
12
+ - `ForestPlot`, a dot per row on a stem spanning its confidence interval.
13
+ - `BulletPlot`, a bar against a target tick and shaded qualitative ranges.
14
+ - `SlopePlot`, the change of each series between two moments, labelled at both ends.
15
+ - `SparklinePlot`, a small axisless line with a dot and a label on its last point.
16
+ - `DensityPlot`, a kernel density curve of one numeric field, and `ViolinPlot`, the mirrored density of each category with a box inside.
17
+ - Step lines through `styles.curve: 'step'`, `'step-after'` or `'step-before'` on `LinePlot`.
18
+ - A `deviation` statistic that draws an estimator of the values and a band around it, with optional labels.
19
+ - `styles.values.select` chooses which points get a value label (`'first'`, `'last'`, `'min'`, `'max'` or a list), for line, area and Cleveland-family plots.
20
+ - The size channel (`r`) works on the dots of the Cleveland family, and its automatic legend is configured under the `r` key.
21
+ - Every marker takes `dx` and `dy` to move it a number of pixels, on a map too, and `dot`, `text` and `image` markers also take a function of the row to move each row on its own.
22
+ - `setConfiguration({ palette })` takes the name of a d3-scale-chromatic scheme (`'viridis'`, `'dark2'`...) or `{ scheme, count, schemeRange }` instead of just a list of colors.
23
+ - `continuous.scheme` and `continuous.schemeRange` in the configuration set the default continuous ramp by the name of a d3-scale-chromatic ramp, as an alternative to its `min` and `max` colors.
24
+ - Tick labels turn or thin out on small plots when they would not fit, and the last label of an axis that is not rounded to nice values stays inside the plot.
25
+ - A timeline can free one axis at a time (`scales: 'free-x'` or `'free-y'`) while the other keeps its shared domain.
26
+ - `link` markers on a map can lift their arcs off the surface (`altitude`) and cut them where a globe hides them (`occlusion`).
27
+
28
+ ### Changed
29
+
30
+ - The default palette is Tableau 10, and the default continuous ramp, the timeline and player accents and the connector colors follow it.
31
+
32
+ ### Fixed
33
+
34
+ - The example datasets moved out of the stories into `examples/datasets`, where real data replaces the synthetic rows and the docs, examples and stories all read the same files.
35
+ - The Minard map of Napoleon's march is rebuilt with `GeoPlot` and `LinePlot` markers instead of a hand-assembled svelteplot chart.
36
+
37
+ ## [1.1.0] - 2026-10-20
38
+
39
+ ### Added
40
+
41
+ - `BoxPlot`, a new plot kind for the distribution of values per category. It draws one box per category of each series: the quartiles, the median, whiskers that reach the farthest values within 1.5 times the interquartile range, and the values past them as outlier dots.
42
+ - Boxes stand upright when the categories are on `x` and lie sideways when they are on `y`.
43
+ - `grouping` or `color` gives each group its own box and color, and `facet` compares groups in separate panels.
44
+ - The tooltip reads one box at a time instead of every value inside it. The hovered row carries `category`, `min`, `p25`, `median`, `p75`, `max`, `count` and `outliers` for a custom `format`.
45
+ - Categories keep the order the data gives them, and the value axis fits the values without reaching for zero.
46
+ - It takes the same props as every other plot: `segments` to restyle whole categories, the interactive legend, `markers`, `styles.frame` and the rest.
47
+ - New `box` block in the configuration for the box fill opacity and the spacing between boxes (`fillOpacity`, `paddingInner`, `paddingOuter`).
48
+
49
+ ### Fixed
50
+
51
+ - Nice axis domains no longer grow a whole extra step when the data ends just past a round value (parts that sum to `100.00000000000001` stay on `100`). `niceTolerance` on a scale sets how far past a tick, as a share of the step, the data may end and still stay on it.
52
+ - Ticks at the data's first and last values no longer crowd the nice tick next to them. `axis.edgeTicks` in the configuration (or `edgeTicks` on a scale) chooses what happens then: `collision` is `'drop-nice'`, `'drop-edge'` or `'extend'`.
53
+ - A tooltip that lists several rows shows them highest value first.
54
+ - The timeline accepts steps given as `Date` objects or date strings (ISO, or any pattern set with `dateFormat`), not only numbers.
55
+ - The `delta` marker's label offset and anchor have defaults per axis in the configuration (`delta.text`).
56
+ - Documentation and examples brought up to date with the current API.
57
+
5
58
  ## [1.0.0] - 2026-10-16
6
59
 
7
60
  First stable release.
package/README.md CHANGED
@@ -18,24 +18,21 @@ Svelte 5 plots for data storytelling, built on [svelteplot](https://svelteplot.d
18
18
 
19
19
  It aims for a sweet spot between the flexibility of `d3`, the declarative spirit of the _grammar of graphics_ (data mapped to channels, scales and marks) and the convenience of a classic plotting library, where each plot kind is a first-class component.
20
20
 
21
+ <!-- example: examples/LineByRegion.svelte -->
22
+
21
23
  ```svelte
22
24
  <script lang="ts">
23
25
  import { LinePlot } from '@fundar/data-chart-telling';
24
-
25
- const rows = [
26
- { year: 2020, region: 'North', value: 3.1 },
27
- { year: 2021, region: 'North', value: 3.8 },
28
- { year: 2020, region: 'South', value: 2.2 },
29
- { year: 2021, region: 'South', value: 2.9 }
30
- ];
26
+ import { REGION_VALUES } from './datasets';
31
27
  </script>
32
28
 
29
+ <!-- One line per region, with a title, the automatic legend, end-of-line values and a tooltip. -->
33
30
  <LinePlot
34
31
  width={720}
35
32
  height={400}
36
- title="Value by region"
37
- data={rows}
38
- x="year"
33
+ title="Monthly inflation by region (%)"
34
+ data={REGION_VALUES}
35
+ x="date"
39
36
  y="value"
40
37
  color="region"
41
38
  tooltip
@@ -44,9 +41,13 @@ It aims for a sweet spot between the flexibility of `d3`, the declarative spirit
44
41
  />
45
42
  ```
46
43
 
47
- ![A line plot with a title, a legend, end-of-line value labels and a tooltip](docs/images/readme-hero.png)
44
+ <!-- /example -->
45
+
46
+ ![A line plot with a title, a legend, end-of-line value labels and a tooltip](docs/images/line-by-region.png)
48
47
 
49
- Eight plot kinds - line, area, bar, histogram, heatmap, pyramid, scatter and geographic maps - share one vocabulary: the same channels (`x`, `y`, `color`, `grouping`, `opacity`, `symbol`, `r`), the same `scales`, `styles`, `segments`, `markers`, `transforms`, `tooltip`, `legend`, `timeline` and `facet` props, and one global theme.
48
+ Every Svelte snippet in this README is a runnable file in [examples/](examples/), and the data comes from [examples/datasets/](examples/datasets/).
49
+
50
+ Every plot kind shares one vocabulary: the same channels (`x`, `y`, `color`, `grouping`, `opacity`, `symbol`, `r`), the same `scales`, `styles`, `segments`, `markers`, `transforms`, `tooltip`, `legend`, `timeline` and `facet` props, and one global theme.
50
51
 
51
52
  ## Install
52
53
 
@@ -62,26 +63,64 @@ The package ships Svelte components, so the app needs the Svelte compiler (`@sve
62
63
 
63
64
  `timeline` slices the rows by a field and steps through them. It draws as a **player** by default: play and pause, the current step and a slider, in the figure's chrome.
64
65
 
66
+ <!-- example: examples/TimelinePlayer.svelte -->
67
+
65
68
  ```svelte
66
- <BarPlot {width} {height} data={rows} x="region" y="value" timeline={{ accessor: 'year' }} />
69
+ <script lang="ts">
70
+ import { BarPlot } from '@fundar/data-chart-telling';
71
+ import { REGION_VALUES } from './datasets';
72
+ </script>
73
+
74
+ <!--
75
+ `timeline` slices the rows by `accessor`. A timeline is a player by default:
76
+ play/pause, the current step and a slider in the chrome. `progress` sets where
77
+ it starts. `type: 'rule'` draws a guide beside the plot with no controls
78
+ instead (see TimelineRule). To build your own widget, read
79
+ `useFigure().timeline` (seek, play, pause, next, ...).
80
+ -->
81
+ <BarPlot
82
+ width={720}
83
+ height={400}
84
+ data={REGION_VALUES}
85
+ x="region"
86
+ y="value"
87
+ scales={{ y: { domain: [0, 30] } }}
88
+ timeline={{ accessor: 'date', progress: 0.25, player: { autoplay: false, loop: true } }}
89
+ />
67
90
  ```
68
91
 
92
+ <!-- /example -->
93
+
69
94
  ![A bar plot with a player bar](docs/images/timeline-player.png)
70
95
 
71
96
  `type: 'rule'` draws a **rule** beside the plot instead, a line with the steps written along it. The page drives it through `progress` (`0` to `1`), from a slider, scroll position or anything else.
72
97
 
98
+ <!-- example: examples/TimelineRule.svelte -->
99
+
73
100
  ```svelte
101
+ <script lang="ts">
102
+ import { LinePlot } from '@fundar/data-chart-telling';
103
+ import { REGION_VALUES } from './datasets';
104
+
105
+ // A rule has no controls of its own: the page moves it through `progress` (0 to 1).
106
+ // One step per year; a line plot shows every row up to the current step.
107
+ let progress = $state(0.5);
108
+ </script>
109
+
110
+ <input type="range" min="0" max="1" step="0.001" bind:value={progress} />
74
111
  <LinePlot
75
- {width}
76
- {height}
77
- data={rows}
78
- x="year"
112
+ width={720}
113
+ height={400}
114
+ data={REGION_VALUES}
115
+ x="date"
79
116
  y="value"
80
117
  color="region"
81
- timeline={{ accessor: 'year', type: 'rule', progress }}
118
+ timeline={{ accessor: (row) => row.date.getUTCFullYear(), type: 'rule', progress }}
82
119
  />
83
120
  ```
84
121
 
122
+ <!-- /example -->
123
+
85
124
  ![A line plot revealed up to the current step, with a timeline rule](docs/images/timeline-rule.png)
86
125
 
87
126
  See [Timeline](docs/timeline.md) for both in detail.
@@ -94,7 +133,7 @@ Start with the concepts; the rest is organised by what you want a plot to do.
94
133
  | -------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
95
134
  | [Getting started](docs/getting-started.md) | Installing, a first plot, sizing a plot to its container, loading data |
96
135
  | [Concepts](docs/concepts.md) | Plots and figures, rows and series, channels, the props every plot shares |
97
- | [Plots](docs/plots.md) | The eight plot kinds: what each one draws and what it needs |
136
+ | [Plots](docs/plots.md) | Every plot kind: what it draws and what it needs |
98
137
  | [Scales](docs/scales.md) | Axes (`x`, `y`) and channel scales (`color`, `grouping`, `opacity`, `symbol`, `r`, `length`) |
99
138
  | [Styles and segments](docs/styles-and-segments.md) | Value labels, frames, gap filling, and styling ranges of the data |
100
139
  | [Markers](docs/markers.md) | Extra marks on a plot: annotations, regions, hover highlights, custom components |
@@ -2,7 +2,7 @@ import type { PlotStylesConfig, PlotStylesConfigInput } from '../types/configura
2
2
  export declare const DEFAULT_CONFIG: PlotStylesConfig;
3
3
  /** Read the live, reactive configuration. */
4
4
  export declare function getConfiguration(): PlotStylesConfig;
5
- /** Deep-merge a partial override into the global configuration. Reactive. */
5
+ /** Deep-merge a partial override into the global configuration - a `palette` may be a scheme name. Reactive. */
6
6
  export declare function setConfiguration(patch: PlotStylesConfigInput): PlotStylesConfig;
7
7
  /** Restore the shipped defaults. */
8
8
  export declare function resetConfiguration(): void;
@@ -1,4 +1,5 @@
1
1
  import { merge } from '../utils/merge';
2
+ import { Palette } from '../utils/color';
2
3
  /**
3
4
  * Global, reactive styling configuration. Chrome reads it as CSS custom
4
5
  * properties ({@link configToCssVars}); plots read it as plain values.
@@ -16,9 +17,17 @@ const text = (over) => ({
16
17
  ...over
17
18
  });
18
19
  export const DEFAULT_CONFIG = {
20
+ // ── General look ────────────────────────────────────────────────────────────
19
21
  font: 'inherit',
20
22
  color: 'currentColor',
21
23
  background: 'transparent',
24
+ title: text({ size: '1.5rem', weight: 500, leading: '1.2' }),
25
+ subtitle: text({
26
+ size: '1rem',
27
+ weight: 400,
28
+ color: 'color-mix(in srgb, currentColor 85%, transparent)'
29
+ }),
30
+ caption: text({ size: '0.75rem', color: 'color-mix(in srgb, currentColor 75%, transparent)' }),
22
31
  spacing: {
23
32
  headerPadding: '0.5rem 0',
24
33
  legendPadding: '0.5rem 0',
@@ -48,13 +57,32 @@ export const DEFAULT_CONFIG = {
48
57
  ],
49
58
  rowGap: '1rem'
50
59
  },
51
- title: text({ size: '1.5rem', weight: 500, leading: '1.2' }),
52
- subtitle: text({
53
- size: '1rem',
54
- weight: 400,
55
- color: 'color-mix(in srgb, currentColor 85%, transparent)'
56
- }),
57
- caption: text({ size: '0.75rem', color: 'color-mix(in srgb, currentColor 75%, transparent)' }),
60
+ // Tableau 10 - qualitative, with a muted blue first, and distinct enough to tell ten series apart.
61
+ palette: Palette.resolve('tableau10'),
62
+ symbols: ['circle', 'square', 'triangle', 'diamond', 'star', 'cross'],
63
+ // A light tint of the palette's first color up to the color itself.
64
+ continuous: { min: '#eaf0f6', max: '#4e79a7', labelColor: '#111827', opacityRange: [0.2, 1] },
65
+ margins: { top: 'auto', right: 'auto', bottom: 'auto', left: 'auto' },
66
+ frameClip: { tolerance: 2 },
67
+ // ── Features ────────────────────────────────────────────────────────────────
68
+ axis: {
69
+ color: 'currentColor',
70
+ fontSize: 14,
71
+ labelFontSize: 14,
72
+ titleFontSize: 14,
73
+ xTickSize: 5,
74
+ yTickSize: 5,
75
+ xTickPadding: 10,
76
+ yTickPadding: 10,
77
+ grid: false,
78
+ locale: 'es-AR',
79
+ compactDisplay: 'short',
80
+ edgeTicks: {
81
+ x: { enabled: true, collision: 'drop-nice' },
82
+ y: { enabled: false, collision: 'drop-nice' }
83
+ },
84
+ autoRotate: true
85
+ },
58
86
  legend: {
59
87
  font: 'inherit',
60
88
  size: '0.875rem',
@@ -79,6 +107,10 @@ export const DEFAULT_CONFIG = {
79
107
  height: 20,
80
108
  barHeight: 12,
81
109
  barRadius: 2,
110
+ opacity: {
111
+ color: '#000',
112
+ checker: { size: 4, light: '#fff', dark: '#d4d4d8' }
113
+ },
82
114
  // A slim vertical bar handle, taller than the 12px gradient track.
83
115
  handle: {
84
116
  width: '6px',
@@ -105,19 +137,6 @@ export const DEFAULT_CONFIG = {
105
137
  }
106
138
  }
107
139
  },
108
- axis: {
109
- color: 'currentColor',
110
- fontSize: 14,
111
- labelFontSize: 14,
112
- titleFontSize: 14,
113
- xTickSize: 5,
114
- yTickSize: 5,
115
- xTickPadding: 10,
116
- yTickPadding: 10,
117
- grid: false,
118
- locale: 'es-AR',
119
- compactDisplay: 'short'
120
- },
121
140
  tooltip: {
122
141
  background: '#111827',
123
142
  color: '#ffffff',
@@ -126,41 +145,31 @@ export const DEFAULT_CONFIG = {
126
145
  radius: '0.375rem',
127
146
  border: 'none'
128
147
  },
129
- margins: { top: 'auto', right: 'auto', bottom: 'auto', left: 'auto' },
130
- frameClip: { tolerance: 5 },
131
- // ColorBrewer Dark2 - qualitative, harmonious, and dark enough to read on white.
132
- palette: ['#1b9e77', '#d95f02', '#7570b3', '#e7298a', '#66a61e', '#e6ab02', '#a6761d', '#666666'],
133
- symbols: ['circle', 'square', 'triangle', 'diamond', 'star', 'cross'],
134
- continuous: { min: '#f7fcfd', max: '#1b9e77', labelColor: '#111827', opacityRange: [0.2, 1] },
135
- line: {
136
- strokeWidth: 3,
137
- dotRadius: 4,
138
- gap: {
139
- stroke: { strokeOpacity: 0.6, strokeDasharray: '4 4' },
140
- dots: {}
141
- }
148
+ hover: {
149
+ rule: { stroke: '#e6580d', strokeOpacity: 0.35, strokeWidth: 1.5, strokeDasharray: '4 4' },
150
+ dot: { dotRadius: 5, dotFill: 'currentColor' },
151
+ font: { fill: 'currentColor', fontSize: 12, dy: -18 },
152
+ area: { fill: '#94a3b8', fillOpacity: 0.4 }
142
153
  },
143
- text: {
144
- declutter: {
145
- elbowGap: 10,
146
- laneStep: 7,
147
- labelGap: 6,
148
- connector: { stroke: '#94a3b8', strokeWidth: 0.5 }
154
+ facet: {
155
+ indicator: {
156
+ background: '#111827',
157
+ color: '#ffffff',
158
+ fontSize: '0.8125rem',
159
+ padding: '0.125rem 0.5rem',
160
+ radius: '999px'
161
+ },
162
+ navButton: {
163
+ background: '#111827',
164
+ color: '#ffffff',
165
+ size: '2rem',
166
+ fontSize: '1.1rem',
167
+ disabledOpacity: 0.3
149
168
  }
150
169
  },
151
- bar: {
152
- gap: { fillOpacity: 0.5 },
153
- seriesPadding: 0.2,
154
- paddingInner: 0.15,
155
- paddingOuter: 0.15
156
- },
157
- pyramid: { gap: { fillOpacity: 0.5 } },
158
- area: { fillOpacity: 0.6 },
159
- histogram: { inset: 1, fillOpacity: 1 },
160
- scatter: { dotRadius: 5 },
161
170
  timeline: {
162
171
  axisColor: 'currentColor',
163
- activeColor: '#1b9e77',
172
+ activeColor: '#4e79a7',
164
173
  thickness: 60,
165
174
  gap: '12px',
166
175
  rule: {
@@ -185,22 +194,22 @@ export const DEFAULT_CONFIG = {
185
194
  valueWidth: '3rem',
186
195
  button: {
187
196
  size: '2rem',
188
- background: '#1b9e77',
197
+ background: '#4e79a7',
189
198
  color: '#ffffff',
190
- hoverBackground: '#0c4937',
199
+ hoverBackground: '#24384d',
191
200
  radius: '999px'
192
201
  },
193
202
  track: {
194
203
  height: '3px',
195
204
  color: 'color-mix(in srgb, currentColor 25%, transparent)',
196
- fillColor: '#1b9e77',
205
+ fillColor: '#4e79a7',
197
206
  radius: '999px'
198
207
  },
199
- thumb: { size: '14px', color: '#1b9e77' },
208
+ thumb: { size: '14px', color: '#4e79a7' },
200
209
  toggle: {
201
210
  background: 'transparent',
202
211
  color: 'currentColor',
203
- activeBackground: '#1b9e77',
212
+ activeBackground: '#4e79a7',
204
213
  activeColor: '#ffffff',
205
214
  radius: '0.375rem',
206
215
  fontSize: '0.75rem',
@@ -208,28 +217,96 @@ export const DEFAULT_CONFIG = {
208
217
  }
209
218
  }
210
219
  },
211
- hover: {
212
- rule: { stroke: '#e6580d', strokeOpacity: 0.35, strokeWidth: 1.5, strokeDasharray: '4 4' },
213
- dot: { dotRadius: 5, dotFill: 'currentColor' },
214
- font: { fill: 'currentColor', fontSize: 12, dy: -18 },
215
- area: { fill: '#94a3b8', fillOpacity: 0.25 }
220
+ connector: {
221
+ sign: { positive: '#59a14f', negative: '#e15759', zero: '#9ca3af' },
222
+ lengthScheme: ['#d1d5db', '#374151'],
223
+ differenceScheme: ['#e15759', '#e5e7eb', '#59a14f'],
224
+ arrow: { width: 2, headLength: 8, headAngle: 60 },
225
+ capLength: 8,
226
+ outsideOpacity: 0.4,
227
+ labelFontSize: 11,
228
+ labelGap: 4
216
229
  },
217
- facet: {
218
- indicator: {
219
- background: '#111827',
220
- color: '#ffffff',
221
- fontSize: '0.8125rem',
222
- padding: '0.125rem 0.5rem',
223
- radius: '999px'
224
- },
225
- navButton: {
226
- background: '#111827',
227
- color: '#ffffff',
228
- size: '2rem',
229
- fontSize: '1.1rem',
230
- disabledOpacity: 0.3
230
+ // Beside a vertical delta (taken on x), above a horizontal one (on y).
231
+ delta: {
232
+ text: {
233
+ x: { dx: 12, dy: 0, lineAnchor: 'middle', textAnchor: 'start' },
234
+ y: { dx: 0, dy: -10, lineAnchor: 'middle', textAnchor: 'middle' }
235
+ }
236
+ },
237
+ text: {
238
+ declutter: {
239
+ elbowGap: 10,
240
+ laneStep: 7,
241
+ labelGap: 6,
242
+ connector: { stroke: '#94a3b8', strokeWidth: 0.5 }
231
243
  }
232
- }
244
+ },
245
+ // ── Plot kinds ──────────────────────────────────────────────────────────────
246
+ area: { fillOpacity: 0.6 },
247
+ bar: {
248
+ gap: { fillOpacity: 0.5 },
249
+ seriesPadding: 0.2,
250
+ paddingInner: 0.15,
251
+ paddingOuter: 0.15
252
+ },
253
+ box: { fillOpacity: 0.9, paddingInner: 0.4, paddingOuter: 0.2 },
254
+ bullet: {
255
+ barThickness: 10,
256
+ rangeWidth: 28,
257
+ rangeColors: ['#9ca3af', '#d1d5db', '#eceff3'],
258
+ targetLength: 22,
259
+ targetWidth: 3,
260
+ paddingInner: 0.4,
261
+ paddingOuter: 0.3
262
+ },
263
+ cleveland: {
264
+ dotRadius: 5,
265
+ stemWidth: 5,
266
+ connectorColor: '#9ca3af',
267
+ labelGap: 10,
268
+ paddingInner: 0.5,
269
+ paddingOuter: 0.5
270
+ },
271
+ density: { fillOpacity: 0.6, strokeWidth: 2 },
272
+ dumbbell: {
273
+ dotRadius: 6,
274
+ stemWidth: 'dots',
275
+ connectorColor: '#9ca3af',
276
+ labelGap: 10,
277
+ paddingInner: 0.5,
278
+ paddingOuter: 0.5
279
+ },
280
+ forest: {
281
+ dotRadius: 5,
282
+ stemWidth: 2,
283
+ caps: true,
284
+ labelGap: 10,
285
+ paddingInner: 0.5,
286
+ paddingOuter: 0.5
287
+ },
288
+ histogram: { inset: 1, fillOpacity: 1 },
289
+ line: {
290
+ curve: 'auto',
291
+ strokeWidth: 3,
292
+ dotRadius: 4,
293
+ gap: {
294
+ stroke: { strokeOpacity: 0.6, strokeDasharray: '4 4' },
295
+ dots: {}
296
+ }
297
+ },
298
+ lollipop: {
299
+ dotRadius: 6,
300
+ stemWidth: 2,
301
+ labelGap: 10,
302
+ paddingInner: 0.5,
303
+ paddingOuter: 0.5
304
+ },
305
+ pyramid: { gap: { fillOpacity: 0.5 } },
306
+ scatter: { dotRadius: 5 },
307
+ slope: { strokeWidth: 2, dotRadius: 5, padding: 0 },
308
+ sparkline: { strokeWidth: 1.5, dotRadius: 3 },
309
+ violin: { fillOpacity: 0.6, paddingInner: 0.2, paddingOuter: 0.2, boxWidth: 8 }
233
310
  };
234
311
  // ── Reactive store ──────────────────────────────────────────────────────────
235
312
  let current = $state(structuredClone(DEFAULT_CONFIG));
@@ -237,9 +314,9 @@ let current = $state(structuredClone(DEFAULT_CONFIG));
237
314
  export function getConfiguration() {
238
315
  return current;
239
316
  }
240
- /** Deep-merge a partial override into the global configuration. Reactive. */
317
+ /** Deep-merge a partial override into the global configuration - a `palette` may be a scheme name. Reactive. */
241
318
  export function setConfiguration(patch) {
242
- current = merge(current, patch);
319
+ current = merge(current, Palette.resolveIn(patch));
243
320
  return current;
244
321
  }
245
322
  /** Restore the shipped defaults. */
@@ -261,6 +338,9 @@ export function configToCssVars(c) {
261
338
  '--dct-font': c.font,
262
339
  '--dct-fg': c.color,
263
340
  '--dct-bg': c.background,
341
+ ...t('title', c.title),
342
+ ...t('subtitle', c.subtitle),
343
+ ...t('caption', c.caption),
264
344
  '--dct-header-pad': c.spacing.headerPadding,
265
345
  '--dct-legend-pad': c.spacing.legendPadding,
266
346
  '--dct-caption-pad': c.spacing.captionPadding,
@@ -270,9 +350,10 @@ export function configToCssVars(c) {
270
350
  '--dct-divider-style': c.divider.style,
271
351
  '--dct-divider-margin': c.divider.margin,
272
352
  '--dct-row-gap': c.chrome.rowGap,
273
- ...t('title', c.title),
274
- ...t('subtitle', c.subtitle),
275
- ...t('caption', c.caption),
353
+ '--dct-heat-min': c.continuous.min,
354
+ '--dct-heat-max': c.continuous.max,
355
+ '--dct-heat-text': c.continuous.labelColor,
356
+ '--dct-axis-color': c.axis.color,
276
357
  '--dct-legend-font': c.legend.font,
277
358
  '--dct-legend-size': c.legend.size,
278
359
  '--dct-legend-weight': String(c.legend.weight),
@@ -300,13 +381,22 @@ export function configToCssVars(c) {
300
381
  '--dct-continuous-label-size': c.legend.continuous.label.size,
301
382
  '--dct-continuous-label-weight': String(c.legend.continuous.label.weight),
302
383
  '--dct-continuous-label-overlap-rotate': c.legend.continuous.label.overlap.rotate,
303
- '--dct-axis-color': c.axis.color,
304
384
  '--dct-tooltip-bg': c.tooltip.background,
305
385
  '--dct-tooltip-color': c.tooltip.color,
306
386
  '--dct-tooltip-size': c.tooltip.fontSize,
307
387
  '--dct-tooltip-pad': c.tooltip.padding,
308
388
  '--dct-tooltip-radius': c.tooltip.radius,
309
389
  '--dct-tooltip-border': c.tooltip.border,
390
+ '--dct-facet-indicator-bg': c.facet.indicator.background,
391
+ '--dct-facet-indicator-color': c.facet.indicator.color,
392
+ '--dct-facet-indicator-size': c.facet.indicator.fontSize,
393
+ '--dct-facet-indicator-pad': c.facet.indicator.padding,
394
+ '--dct-facet-indicator-radius': c.facet.indicator.radius,
395
+ '--dct-facet-nav-bg': c.facet.navButton.background,
396
+ '--dct-facet-nav-color': c.facet.navButton.color,
397
+ '--dct-facet-nav-btn-size': c.facet.navButton.size,
398
+ '--dct-facet-nav-font-size': c.facet.navButton.fontSize,
399
+ '--dct-facet-nav-disabled-opacity': String(c.facet.navButton.disabledOpacity),
310
400
  '--dct-timeline-axis': c.timeline.axisColor,
311
401
  '--dct-timeline-active': c.timeline.activeColor,
312
402
  '--dct-timeline-gap': c.timeline.gap,
@@ -335,20 +425,7 @@ export function configToCssVars(c) {
335
425
  '--dct-player-toggle-active-color': c.timeline.player.toggle.activeColor,
336
426
  '--dct-player-toggle-radius': c.timeline.player.toggle.radius,
337
427
  '--dct-player-toggle-size': c.timeline.player.toggle.fontSize,
338
- '--dct-player-toggle-pad': c.timeline.player.toggle.padding,
339
- '--dct-heat-min': c.continuous.min,
340
- '--dct-heat-max': c.continuous.max,
341
- '--dct-heat-text': c.continuous.labelColor,
342
- '--dct-facet-indicator-bg': c.facet.indicator.background,
343
- '--dct-facet-indicator-color': c.facet.indicator.color,
344
- '--dct-facet-indicator-size': c.facet.indicator.fontSize,
345
- '--dct-facet-indicator-pad': c.facet.indicator.padding,
346
- '--dct-facet-indicator-radius': c.facet.indicator.radius,
347
- '--dct-facet-nav-bg': c.facet.navButton.background,
348
- '--dct-facet-nav-color': c.facet.navButton.color,
349
- '--dct-facet-nav-btn-size': c.facet.navButton.size,
350
- '--dct-facet-nav-font-size': c.facet.navButton.fontSize,
351
- '--dct-facet-nav-disabled-opacity': String(c.facet.navButton.disabledOpacity)
428
+ '--dct-player-toggle-pad': c.timeline.player.toggle.padding
352
429
  };
353
430
  }
354
431
  /** Serialize a CSS-vars record into a `style` attribute string. */