@fundar/data-chart-telling 1.1.0 → 1.3.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 (539) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/README.md +8 -7
  3. package/dist/configuration/config.svelte.d.ts +1 -1
  4. package/dist/configuration/config.svelte.js +177 -100
  5. package/dist/configuration/themes/index.d.ts +5 -1428
  6. package/dist/index.d.ts +23 -14
  7. package/dist/index.js +20 -11
  8. package/dist/layout/base/BasePlotLayout.svelte +115 -50
  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/facet/scope.d.ts +40 -0
  25. package/dist/layout/facet/scope.js +104 -0
  26. package/dist/layout/figure/Figure.svelte +2 -0
  27. package/dist/layout/geometry/GeometryLayout.svelte +14 -9
  28. package/dist/layout/geometry/GeometryLayout.svelte.d.ts +0 -3
  29. package/dist/layout/geometry/MarkerOffset.svelte +28 -0
  30. package/dist/layout/geometry/MarkerOffset.svelte.d.ts +13 -0
  31. package/dist/layout/grid/GridCell.svelte +6 -8
  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 +39 -15
  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 +4 -0
  39. package/dist/layout/legend/LegendState.svelte.js +23 -8
  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 +35 -8
  43. package/dist/layout/plot/Plot.svelte +22 -2
  44. package/dist/layout/plot/Slice.d.ts +5 -1
  45. package/dist/layout/plot/Slice.js +14 -4
  46. package/dist/layout/scales/NiceTicks.d.ts +3 -0
  47. package/dist/layout/scales/NiceTicks.js +4 -0
  48. package/dist/layout/scales/ScalesLayout.svelte +93 -7
  49. package/dist/layout/scales/ScalesLayout.svelte.d.ts +5 -0
  50. package/dist/layout/scales/SveltePlotScale.d.ts +2 -2
  51. package/dist/layout/scales/SveltePlotScale.js +13 -6
  52. package/dist/layout/scales/TickLabels.d.ts +32 -0
  53. package/dist/layout/scales/TickLabels.js +55 -0
  54. package/dist/layout/styles/StylesLayout.svelte +2 -2
  55. package/dist/layout/styles/ValueLabels.d.ts +33 -5
  56. package/dist/layout/styles/ValueLabels.js +80 -21
  57. package/dist/layout/timeline/TimelineLayout.svelte +1 -1
  58. package/dist/layout/tooltip/Tooltip.svelte +4 -4
  59. package/dist/layout/tooltip/Tooltip.svelte.d.ts +4 -4
  60. package/dist/layout/tooltip/TooltipState.svelte.js +1 -1
  61. package/dist/markers/MarkerKinds.d.ts +5 -0
  62. package/dist/markers/MarkerKinds.js +1 -0
  63. package/dist/markers/area/AreaMarker.svelte +15 -63
  64. package/dist/markers/arrow/ArrowMarker.svelte +51 -9
  65. package/dist/markers/bar/BarMarker.svelte +8 -4
  66. package/dist/markers/bollinger/BollingerMarker.svelte +33 -18
  67. package/dist/markers/box/BoxMarker.svelte +40 -9
  68. package/dist/markers/delta/Delta.d.ts +6 -1
  69. package/dist/markers/delta/Delta.js +16 -1
  70. package/dist/markers/delta/DeltaMarker.svelte +9 -87
  71. package/dist/markers/delta/DeltaPoint.svelte +97 -0
  72. package/dist/markers/delta/DeltaPoint.svelte.d.ts +29 -0
  73. package/dist/markers/dot/DotMarker.svelte +24 -27
  74. package/dist/markers/image/ImageMarker.svelte +17 -12
  75. package/dist/markers/inset/InsetMarker.svelte +2 -2
  76. package/dist/markers/line/LineMarker.svelte +1 -0
  77. package/dist/markers/link/LinkMarker.svelte +174 -29
  78. package/dist/markers/regression/RegressionMarker.svelte +16 -33
  79. package/dist/markers/rule/RuleMarker.svelte +14 -5
  80. package/dist/markers/text/Declutter.d.ts +4 -0
  81. package/dist/markers/text/Declutter.js +26 -11
  82. package/dist/markers/text/TextMarker.svelte +91 -48
  83. package/dist/markers/tick/TickMarker.svelte +27 -25
  84. package/dist/markers/utils/MarkerChannels.d.ts +24 -0
  85. package/dist/markers/utils/MarkerChannels.js +42 -7
  86. package/dist/markers/utils/RowOffset.d.ts +23 -0
  87. package/dist/markers/utils/RowOffset.js +23 -0
  88. package/dist/markers/utils/RowOffsetMarks.svelte +30 -0
  89. package/dist/markers/utils/RowOffsetMarks.svelte.d.ts +33 -0
  90. package/dist/markers/utils/RowStroke.d.ts +31 -0
  91. package/dist/markers/utils/RowStroke.js +28 -0
  92. package/dist/markers/violin/ViolinMarker.svelte +75 -0
  93. package/dist/markers/violin/ViolinMarker.svelte.d.ts +7 -0
  94. package/dist/markers/violin/ViolinProfiles.d.ts +29 -0
  95. package/dist/markers/violin/ViolinProfiles.js +55 -0
  96. package/dist/markers/waffle/WaffleMarker.svelte +17 -37
  97. package/dist/phases/Pipeline.d.ts +5 -0
  98. package/dist/phases/Pipeline.js +5 -0
  99. package/dist/phases/data/DataPhase.js +3 -3
  100. package/dist/phases/data/PlotAxes.d.ts +10 -0
  101. package/dist/phases/data/PlotAxes.js +14 -1
  102. package/dist/phases/facet/FacetPanels.d.ts +1 -0
  103. package/dist/phases/facet/FacetPanels.js +1 -0
  104. package/dist/phases/facet/FacetPhase.d.ts +2 -1
  105. package/dist/phases/facet/FacetPhase.js +19 -4
  106. package/dist/phases/mapping/MappingPhase.js +1 -1
  107. package/dist/phases/markers/MarkersPhase.js +2 -1
  108. package/dist/phases/scales/CategoryOrder.d.ts +23 -0
  109. package/dist/phases/scales/CategoryOrder.js +73 -0
  110. package/dist/phases/scales/ScalesPhase.js +21 -7
  111. package/dist/phases/sharedScales/SharedScalesPhase.d.ts +3 -2
  112. package/dist/phases/sharedScales/SharedScalesPhase.js +5 -2
  113. package/dist/phases/statistics/Statistics.d.ts +10 -6
  114. package/dist/phases/statistics/Statistics.js +20 -10
  115. package/dist/phases/statistics/StatisticsPhase.js +16 -3
  116. package/dist/phases/statistics/methods/BollingerStatistic.d.ts +1 -1
  117. package/dist/phases/statistics/methods/BollingerStatistic.js +13 -11
  118. package/dist/phases/statistics/methods/BoxStatistic.d.ts +1 -1
  119. package/dist/phases/statistics/methods/BoxStatistic.js +14 -12
  120. package/dist/phases/statistics/methods/Density2dStatistic.d.ts +1 -1
  121. package/dist/phases/statistics/methods/Density2dStatistic.js +13 -11
  122. package/dist/phases/statistics/methods/DensityStatistic.d.ts +1 -1
  123. package/dist/phases/statistics/methods/DensityStatistic.js +11 -9
  124. package/dist/phases/statistics/methods/DeviationStatistic.d.ts +8 -0
  125. package/dist/phases/statistics/methods/DeviationStatistic.js +111 -0
  126. package/dist/phases/statistics/methods/MovingAverageStatistic.d.ts +1 -1
  127. package/dist/phases/statistics/methods/MovingAverageStatistic.js +11 -9
  128. package/dist/phases/statistics/methods/RegressionStatistic.d.ts +1 -1
  129. package/dist/phases/statistics/methods/RegressionStatistic.js +16 -14
  130. package/dist/phases/transforms/ProcessedPositions.js +1 -1
  131. package/dist/phases/transforms/TransformsPhase.js +49 -3
  132. package/dist/phases/transforms/ValueSelection.d.ts +30 -0
  133. package/dist/phases/transforms/ValueSelection.js +53 -0
  134. package/dist/plots/{heatmap → correlation/heatmap}/Plot.svelte +5 -2
  135. package/dist/plots/{heatmap → correlation/heatmap}/Plot.svelte.d.ts +2 -2
  136. package/dist/plots/{heatmap → correlation/heatmap}/defaults.d.ts +2 -2
  137. package/dist/plots/{heatmap → correlation/heatmap}/defaults.js +5 -5
  138. package/dist/plots/{heatmap → correlation/heatmap}/markers.d.ts +4 -4
  139. package/dist/plots/{heatmap → correlation/heatmap}/markers.js +3 -3
  140. package/dist/plots/{scatter → correlation/scatter}/Plot.svelte +5 -2
  141. package/dist/plots/{scatter → correlation/scatter}/Plot.svelte.d.ts +2 -2
  142. package/dist/plots/{scatter → correlation/scatter}/defaults.d.ts +2 -2
  143. package/dist/plots/{scatter → correlation/scatter}/defaults.js +4 -4
  144. package/dist/plots/{scatter → correlation/scatter}/markers.d.ts +4 -4
  145. package/dist/plots/{scatter → correlation/scatter}/markers.js +3 -3
  146. package/dist/plots/{box → distribution/box}/BoxSummaries.d.ts +2 -2
  147. package/dist/plots/{box → distribution/box}/BoxSummaries.js +6 -6
  148. package/dist/plots/{box → distribution/box}/Plot.svelte +2 -2
  149. package/dist/plots/{box → distribution/box}/Plot.svelte.d.ts +2 -2
  150. package/dist/plots/{box → distribution/box}/defaults.d.ts +2 -2
  151. package/dist/plots/{box → distribution/box}/defaults.js +1 -1
  152. package/dist/plots/{box → distribution/box}/markers.d.ts +2 -2
  153. package/dist/plots/distribution/density/Plot.svelte +45 -0
  154. package/dist/plots/distribution/density/Plot.svelte.d.ts +26 -0
  155. package/dist/plots/distribution/density/defaults.d.ts +9 -0
  156. package/dist/plots/distribution/density/defaults.js +29 -0
  157. package/dist/plots/distribution/density/markers.d.ts +9 -0
  158. package/dist/plots/distribution/density/markers.js +42 -0
  159. package/dist/plots/{histogram → distribution/histogram}/Plot.svelte +2 -2
  160. package/dist/plots/{histogram → distribution/histogram}/Plot.svelte.d.ts +2 -2
  161. package/dist/plots/{histogram → distribution/histogram}/defaults.d.ts +2 -2
  162. package/dist/plots/{histogram → distribution/histogram}/defaults.js +3 -3
  163. package/dist/plots/{histogram → distribution/histogram}/markers.d.ts +3 -3
  164. package/dist/plots/{histogram → distribution/histogram}/markers.js +5 -5
  165. package/dist/plots/{pyramid → distribution/pyramid}/Plot.svelte +5 -2
  166. package/dist/plots/{pyramid → distribution/pyramid}/Plot.svelte.d.ts +2 -2
  167. package/dist/plots/{pyramid → distribution/pyramid}/defaults.d.ts +2 -2
  168. package/dist/plots/{pyramid → distribution/pyramid}/defaults.js +6 -6
  169. package/dist/plots/{pyramid → distribution/pyramid}/markers.d.ts +4 -4
  170. package/dist/plots/{pyramid → distribution/pyramid}/markers.js +6 -6
  171. package/dist/plots/distribution/violin/Plot.svelte +45 -0
  172. package/dist/plots/distribution/violin/Plot.svelte.d.ts +26 -0
  173. package/dist/plots/distribution/violin/defaults.d.ts +10 -0
  174. package/dist/plots/distribution/violin/defaults.js +58 -0
  175. package/dist/plots/distribution/violin/markers.d.ts +10 -0
  176. package/dist/plots/distribution/violin/markers.js +71 -0
  177. package/dist/plots/{area → evolution/area}/Plot.svelte +2 -2
  178. package/dist/plots/{area → evolution/area}/Plot.svelte.d.ts +2 -2
  179. package/dist/plots/{area → evolution/area}/defaults.d.ts +2 -2
  180. package/dist/plots/{area → evolution/area}/defaults.js +2 -0
  181. package/dist/plots/{area → evolution/area}/markers.d.ts +2 -2
  182. package/dist/plots/{area → evolution/area}/markers.js +1 -1
  183. package/dist/plots/{line → evolution/line}/Plot.svelte +2 -2
  184. package/dist/plots/{line → evolution/line}/Plot.svelte.d.ts +2 -2
  185. package/dist/plots/{line → evolution/line}/defaults.d.ts +2 -2
  186. package/dist/plots/{line → evolution/line}/defaults.js +2 -0
  187. package/dist/plots/{line → evolution/line}/markers.d.ts +11 -8
  188. package/dist/plots/{line → evolution/line}/markers.js +6 -4
  189. package/dist/plots/evolution/slope/Plot.svelte +42 -0
  190. package/dist/plots/evolution/slope/Plot.svelte.d.ts +26 -0
  191. package/dist/plots/evolution/slope/defaults.d.ts +8 -0
  192. package/dist/plots/evolution/slope/defaults.js +31 -0
  193. package/dist/plots/evolution/slope/markers.d.ts +16 -0
  194. package/dist/plots/evolution/slope/markers.js +79 -0
  195. package/dist/plots/evolution/sparkline/Plot.svelte +45 -0
  196. package/dist/plots/evolution/sparkline/Plot.svelte.d.ts +26 -0
  197. package/dist/plots/evolution/sparkline/defaults.d.ts +7 -0
  198. package/dist/plots/evolution/sparkline/defaults.js +23 -0
  199. package/dist/plots/evolution/sparkline/markers.d.ts +7 -0
  200. package/dist/plots/evolution/sparkline/markers.js +56 -0
  201. package/dist/plots/{geo → map/geo}/Core.svelte +11 -10
  202. package/dist/plots/{geo → map/geo}/Core.svelte.d.ts +1 -1
  203. package/dist/plots/map/geo/GeoFeatures.svelte.d.ts +9 -0
  204. package/dist/plots/map/geo/GeoFeatures.svelte.js +55 -0
  205. package/dist/plots/map/geo/GeoGeometry.d.ts +27 -0
  206. package/dist/plots/map/geo/GeoGeometry.js +142 -0
  207. package/dist/plots/map/geo/GeoSegments.d.ts +16 -0
  208. package/dist/plots/map/geo/GeoSegments.js +23 -0
  209. package/dist/plots/{geo → map/geo}/Plot.svelte +10 -10
  210. package/dist/plots/{geo → map/geo}/Plot.svelte.d.ts +2 -2
  211. package/dist/plots/{geo → map/geo}/defaults.d.ts +2 -2
  212. package/dist/plots/{geo → map/geo}/defaults.js +1 -1
  213. package/dist/plots/{geo → map/geo}/phases/data.d.ts +1 -1
  214. package/dist/plots/{geo → map/geo}/phases/data.js +7 -6
  215. package/dist/plots/{geo → map/geo}/phases/hover.d.ts +1 -1
  216. package/dist/plots/{geo → map/geo}/phases/hover.js +2 -2
  217. package/dist/plots/{geo → map/geo}/phases/markers.d.ts +1 -1
  218. package/dist/plots/{geo → map/geo}/phases/markers.js +6 -10
  219. package/dist/plots/{geo → map/geo}/phases/scales.d.ts +2 -2
  220. package/dist/plots/{geo → map/geo}/phases/scales.js +28 -12
  221. package/dist/plots/{geo → map/geo}/phases/tooltip.d.ts +1 -1
  222. package/dist/plots/map/geo/phases/tooltip.js +5 -0
  223. package/dist/plots/{geo → map/geo}/slices.d.ts +2 -2
  224. package/dist/plots/{geo → map/geo}/slices.js +2 -2
  225. package/dist/plots/{bar → ranking/bar}/Plot.svelte +2 -2
  226. package/dist/plots/{bar → ranking/bar}/Plot.svelte.d.ts +2 -2
  227. package/dist/plots/ranking/bar/defaults.d.ts +16 -0
  228. package/dist/plots/{bar → ranking/bar}/defaults.js +15 -9
  229. package/dist/plots/{bar → ranking/bar}/markers.d.ts +8 -8
  230. package/dist/plots/{bar → ranking/bar}/markers.js +8 -17
  231. package/dist/plots/ranking/bullet/Plot.svelte +42 -0
  232. package/dist/plots/ranking/bullet/Plot.svelte.d.ts +26 -0
  233. package/dist/plots/ranking/bullet/defaults.d.ts +8 -0
  234. package/dist/plots/ranking/bullet/defaults.js +24 -0
  235. package/dist/plots/ranking/bullet/markers.d.ts +10 -0
  236. package/dist/plots/ranking/bullet/markers.js +90 -0
  237. package/dist/plots/ranking/cleveland/ClevelandConnector.d.ts +48 -0
  238. package/dist/plots/ranking/cleveland/ClevelandConnector.js +140 -0
  239. package/dist/plots/ranking/cleveland/ClevelandMarkers.d.ts +33 -0
  240. package/dist/plots/ranking/cleveland/ClevelandMarkers.js +375 -0
  241. package/dist/plots/ranking/cleveland/ClevelandRanges.d.ts +31 -0
  242. package/dist/plots/ranking/cleveland/ClevelandRanges.js +116 -0
  243. package/dist/plots/ranking/cleveland/Plot.svelte +45 -0
  244. package/dist/plots/ranking/cleveland/Plot.svelte.d.ts +26 -0
  245. package/dist/plots/ranking/cleveland/defaults.d.ts +13 -0
  246. package/dist/plots/ranking/cleveland/defaults.js +66 -0
  247. package/dist/plots/ranking/dumbbell/Plot.svelte +45 -0
  248. package/dist/plots/ranking/dumbbell/Plot.svelte.d.ts +26 -0
  249. package/dist/plots/ranking/dumbbell/defaults.d.ts +9 -0
  250. package/dist/plots/ranking/dumbbell/defaults.js +19 -0
  251. package/dist/plots/ranking/forest/Plot.svelte +42 -0
  252. package/dist/plots/ranking/forest/Plot.svelte.d.ts +26 -0
  253. package/dist/plots/ranking/forest/defaults.d.ts +11 -0
  254. package/dist/plots/ranking/forest/defaults.js +20 -0
  255. package/dist/plots/ranking/lollipop/Plot.svelte +45 -0
  256. package/dist/plots/ranking/lollipop/Plot.svelte.d.ts +26 -0
  257. package/dist/plots/ranking/lollipop/defaults.d.ts +9 -0
  258. package/dist/plots/ranking/lollipop/defaults.js +18 -0
  259. package/dist/plots/utils/RowNumbers.d.ts +16 -0
  260. package/dist/plots/utils/RowNumbers.js +24 -0
  261. package/dist/plots/utils/gaps.js +1 -1
  262. package/dist/plots/utils/segments.d.ts +4 -1
  263. package/dist/plots/utils/segments.js +20 -7
  264. package/dist/types/configuration/styling.d.ts +284 -143
  265. package/dist/types/layout/coordinates.d.ts +5 -4
  266. package/dist/types/layout/facet.d.ts +18 -0
  267. package/dist/types/layout/legend.d.ts +23 -5
  268. package/dist/types/layout/plot.d.ts +46 -1
  269. package/dist/types/layout/scales.d.ts +39 -7
  270. package/dist/types/layout/statistics/deviation.d.ts +40 -0
  271. package/dist/types/layout/statistics/index.d.ts +7 -2
  272. package/dist/types/layout/styles/base.d.ts +18 -0
  273. package/dist/types/layout/styles/bullet.d.ts +25 -0
  274. package/dist/types/layout/styles/connector.d.ts +98 -0
  275. package/dist/types/layout/styles/curve.d.ts +11 -0
  276. package/dist/types/layout/styles/frame.d.ts +17 -0
  277. package/dist/types/layout/styles/gaps.d.ts +12 -0
  278. package/dist/types/layout/styles/geo.d.ts +55 -0
  279. package/dist/types/layout/styles/index.d.ts +8 -0
  280. package/dist/types/layout/styles/index.js +8 -0
  281. package/dist/types/layout/styles/values.d.ts +47 -0
  282. package/dist/types/layout/timeline.d.ts +5 -2
  283. package/dist/types/layout/tooltip.d.ts +6 -2
  284. package/dist/types/markers/axis/area.d.ts +2 -2
  285. package/dist/types/markers/axis/arrow.d.ts +3 -0
  286. package/dist/types/markers/axis/axisBasedMarkersConfig.d.ts +2 -1
  287. package/dist/types/markers/axis/bar.d.ts +1 -1
  288. package/dist/types/markers/axis/box.d.ts +5 -0
  289. package/dist/types/markers/axis/delta.d.ts +15 -2
  290. package/dist/types/markers/axis/difference.d.ts +2 -2
  291. package/dist/types/markers/axis/image.d.ts +3 -2
  292. package/dist/types/markers/axis/line.d.ts +2 -0
  293. package/dist/types/markers/axis/rule.d.ts +18 -2
  294. package/dist/types/markers/axis/trail.d.ts +2 -3
  295. package/dist/types/markers/axis/violin.d.ts +25 -0
  296. package/dist/types/markers/basic/dot.d.ts +3 -2
  297. package/dist/types/markers/basic/text.d.ts +13 -3
  298. package/dist/types/markers/channels/commonMarkerConfig.d.ts +7 -3
  299. package/dist/types/markers/channels/commonMarkerConfigWithRowOffset.d.ts +13 -0
  300. package/dist/types/markers/common.d.ts +1 -1
  301. package/dist/types/markers/common.js +1 -0
  302. package/dist/types/markers/geo/link.d.ts +5 -1
  303. package/dist/types/phases/facet/phase.d.ts +4 -0
  304. package/dist/types/phases/index.d.ts +1 -1
  305. package/dist/types/phases/scales/phase.d.ts +5 -1
  306. package/dist/types/phases/state.d.ts +15 -2
  307. package/dist/types/phases/statistics/source.d.ts +3 -1
  308. package/dist/types/phases/transforms/phase.d.ts +22 -0
  309. package/dist/types/plots/{heatmap → correlation/heatmap}/props.d.ts +6 -6
  310. package/dist/types/plots/{heatmap → correlation/heatmap}/state.d.ts +4 -4
  311. package/dist/types/plots/{scatter → correlation/scatter}/props.d.ts +6 -6
  312. package/dist/types/plots/{scatter → correlation/scatter}/state.d.ts +2 -2
  313. package/dist/types/plots/{box → distribution/box}/props.d.ts +6 -6
  314. package/dist/types/plots/{box → distribution/box}/state.d.ts +3 -3
  315. package/dist/types/plots/distribution/density/props.d.ts +23 -0
  316. package/dist/types/plots/distribution/density/state.d.ts +6 -0
  317. package/dist/types/plots/{histogram → distribution/histogram}/props.d.ts +7 -7
  318. package/dist/types/plots/{histogram → distribution/histogram}/state.d.ts +2 -2
  319. package/dist/types/plots/distribution/histogram/state.js +1 -0
  320. package/dist/types/plots/{pyramid → distribution/pyramid}/props.d.ts +6 -6
  321. package/dist/types/plots/distribution/pyramid/props.js +1 -0
  322. package/dist/types/plots/{pyramid → distribution/pyramid}/state.d.ts +3 -3
  323. package/dist/types/plots/distribution/pyramid/state.js +1 -0
  324. package/dist/types/plots/distribution/violin/props.d.ts +23 -0
  325. package/dist/types/plots/distribution/violin/props.js +1 -0
  326. package/dist/types/plots/distribution/violin/state.d.ts +6 -0
  327. package/dist/types/plots/distribution/violin/state.js +1 -0
  328. package/dist/types/plots/{area → evolution/area}/props.d.ts +6 -6
  329. package/dist/types/plots/evolution/area/props.js +1 -0
  330. package/dist/types/plots/{area → evolution/area}/state.d.ts +2 -2
  331. package/dist/types/plots/evolution/area/state.js +1 -0
  332. package/dist/types/plots/evolution/line/props.d.ts +10 -0
  333. package/dist/types/plots/evolution/line/props.js +1 -0
  334. package/dist/types/plots/{line → evolution/line}/state.d.ts +3 -3
  335. package/dist/types/plots/evolution/line/state.js +1 -0
  336. package/dist/types/plots/evolution/slope/props.d.ts +5 -0
  337. package/dist/types/plots/evolution/slope/props.js +1 -0
  338. package/dist/types/plots/evolution/slope/state.d.ts +5 -0
  339. package/dist/types/plots/evolution/slope/state.js +1 -0
  340. package/dist/types/plots/evolution/sparkline/props.d.ts +5 -0
  341. package/dist/types/plots/evolution/sparkline/props.js +1 -0
  342. package/dist/types/plots/evolution/sparkline/state.d.ts +5 -0
  343. package/dist/types/plots/evolution/sparkline/state.js +1 -0
  344. package/dist/types/plots/{geo → map/geo}/props.d.ts +8 -8
  345. package/dist/types/plots/map/geo/props.js +1 -0
  346. package/dist/types/plots/{geo → map/geo}/state.d.ts +18 -11
  347. package/dist/types/plots/map/geo/state.js +1 -0
  348. package/dist/types/plots/props.d.ts +7 -4
  349. package/dist/types/plots/{bar → ranking/bar}/props.d.ts +6 -6
  350. package/dist/types/plots/ranking/bar/props.js +1 -0
  351. package/dist/types/plots/{bar → ranking/bar}/state.d.ts +2 -2
  352. package/dist/types/plots/ranking/bar/state.js +1 -0
  353. package/dist/types/plots/ranking/bullet/props.d.ts +22 -0
  354. package/dist/types/plots/ranking/bullet/props.js +1 -0
  355. package/dist/types/plots/ranking/bullet/state.d.ts +5 -0
  356. package/dist/types/plots/ranking/bullet/state.js +1 -0
  357. package/dist/types/plots/ranking/cleveland/props.d.ts +10 -0
  358. package/dist/types/plots/ranking/cleveland/props.js +1 -0
  359. package/dist/types/plots/ranking/cleveland/state.d.ts +49 -0
  360. package/dist/types/plots/ranking/cleveland/state.js +1 -0
  361. package/dist/types/plots/ranking/dumbbell/props.d.ts +10 -0
  362. package/dist/types/plots/ranking/dumbbell/props.js +1 -0
  363. package/dist/types/plots/ranking/dumbbell/state.d.ts +5 -0
  364. package/dist/types/plots/ranking/dumbbell/state.js +1 -0
  365. package/dist/types/plots/ranking/forest/props.d.ts +23 -0
  366. package/dist/types/plots/ranking/forest/props.js +1 -0
  367. package/dist/types/plots/ranking/forest/state.d.ts +5 -0
  368. package/dist/types/plots/ranking/forest/state.js +1 -0
  369. package/dist/types/plots/ranking/lollipop/props.d.ts +10 -0
  370. package/dist/types/plots/ranking/lollipop/props.js +1 -0
  371. package/dist/types/plots/ranking/lollipop/state.d.ts +5 -0
  372. package/dist/types/plots/ranking/lollipop/state.js +1 -0
  373. package/dist/types/plots/segments/common.d.ts +4 -1
  374. package/dist/types/plots/segments/config.d.ts +4 -2
  375. package/dist/utils/OpacityScale.d.ts +14 -0
  376. package/dist/utils/OpacityScale.js +43 -0
  377. package/dist/utils/{symbol.d.ts → SymbolPath.d.ts} +0 -12
  378. package/dist/utils/{symbol.js → SymbolPath.js} +0 -24
  379. package/dist/utils/SymbolScale.d.ts +18 -0
  380. package/dist/utils/SymbolScale.js +29 -0
  381. package/dist/utils/color/ColorRamp.d.ts +27 -0
  382. package/dist/utils/color/ColorRamp.js +120 -0
  383. package/dist/utils/color/CssColor.d.ts +19 -0
  384. package/dist/utils/color/CssColor.js +114 -0
  385. package/dist/utils/color/Palette.d.ts +21 -0
  386. package/dist/utils/color/Palette.js +52 -0
  387. package/dist/utils/color/index.d.ts +11 -3
  388. package/dist/utils/color/index.js +14 -3
  389. package/dist/utils/grouping.js +1 -1
  390. package/docs/architecture.md +1 -1
  391. package/docs/chrome.md +2 -2
  392. package/docs/composer.md +2 -2
  393. package/docs/concepts.md +1 -1
  394. package/docs/development.md +1 -1
  395. package/docs/facets.md +50 -3
  396. package/docs/getting-started.md +2 -2
  397. package/docs/legend.md +13 -11
  398. package/docs/markers.md +57 -27
  399. package/docs/plots/correlation/heatmap.md +26 -0
  400. package/docs/plots/correlation/scatter.md +35 -0
  401. package/docs/plots/distribution/box.md +28 -0
  402. package/docs/plots/distribution/density.md +26 -0
  403. package/docs/plots/distribution/histogram.md +33 -0
  404. package/docs/plots/distribution/pyramid.md +31 -0
  405. package/docs/plots/distribution/violin.md +35 -0
  406. package/docs/plots/evolution/area.md +32 -0
  407. package/docs/plots/evolution/line.md +93 -0
  408. package/docs/plots/evolution/slope.md +39 -0
  409. package/docs/plots/evolution/sparkline.md +34 -0
  410. package/docs/plots/ranking/bar.md +59 -0
  411. package/docs/plots/ranking/bullet.md +37 -0
  412. package/docs/plots/ranking/cleveland.md +54 -0
  413. package/docs/plots/ranking/dumbbell.md +39 -0
  414. package/docs/plots/ranking/forest.md +40 -0
  415. package/docs/plots/ranking/lollipop.md +39 -0
  416. package/docs/plots.md +22 -280
  417. package/docs/scales.md +30 -24
  418. package/docs/styles-and-segments.md +25 -21
  419. package/docs/theming.md +23 -20
  420. package/docs/timeline.md +3 -3
  421. package/docs/tooltip-and-hover.md +10 -10
  422. package/docs/transforms-and-statistics.md +13 -12
  423. package/examples/BarValues.svelte +1 -1
  424. package/examples/Box.svelte +1 -1
  425. package/examples/Bullet.svelte +17 -0
  426. package/examples/Chrome.svelte +1 -1
  427. package/examples/ChromeOrder.svelte +1 -1
  428. package/examples/Cleveland.svelte +15 -0
  429. package/examples/Composer.svelte +2 -2
  430. package/examples/CustomTooltip.svelte +1 -1
  431. package/examples/Density.svelte +7 -0
  432. package/examples/Dumbbell.svelte +16 -0
  433. package/examples/Facets.svelte +1 -1
  434. package/examples/FacetsCarousel.svelte +1 -1
  435. package/examples/FacetsRowsCols.svelte +1 -1
  436. package/examples/FacetsScoped.svelte +26 -0
  437. package/examples/FirstPlot.svelte +1 -1
  438. package/examples/Forest.svelte +17 -0
  439. package/examples/Gaps.svelte +2 -2
  440. package/examples/GroupedBars.svelte +1 -1
  441. package/examples/Heatmap.svelte +3 -3
  442. package/examples/HeatmapSegments.svelte +8 -8
  443. package/examples/Histogram.svelte +1 -1
  444. package/examples/HorizontalBars.svelte +1 -1
  445. package/examples/LegendSections.svelte +1 -1
  446. package/examples/LegendToggle.svelte +1 -1
  447. package/examples/LineByRegion.svelte +1 -1
  448. package/examples/LineDates.svelte +1 -1
  449. package/examples/LineStep.svelte +16 -0
  450. package/examples/LineStepSegment.svelte +18 -0
  451. package/examples/Lollipop.svelte +17 -0
  452. package/examples/Markers.svelte +1 -1
  453. package/examples/MovingAverage.svelte +1 -1
  454. package/examples/Pyramid.svelte +9 -2
  455. package/examples/Regression.svelte +2 -2
  456. package/examples/ResponsiveLine.svelte +1 -1
  457. package/examples/Scales.svelte +1 -1
  458. package/examples/Scatter.svelte +2 -2
  459. package/examples/SegmentHighlight.svelte +1 -1
  460. package/examples/Segments.svelte +1 -1
  461. package/examples/SegmentsBySeries.svelte +1 -1
  462. package/examples/Slope.svelte +17 -0
  463. package/examples/Sparkline.svelte +14 -0
  464. package/examples/StackedArea.svelte +1 -1
  465. package/examples/StackedBars.svelte +1 -1
  466. package/examples/TimelinePlayer.svelte +1 -1
  467. package/examples/TimelineRule.svelte +1 -1
  468. package/examples/Tooltip.svelte +1 -1
  469. package/examples/ValueLabels.svelte +1 -1
  470. package/examples/Violin.svelte +14 -0
  471. package/examples/datasets/argentina-chile-trends.ts +34 -0
  472. package/examples/datasets/commodity-prices.ts +48 -0
  473. package/examples/datasets/countries-over-time.ts +368 -0
  474. package/examples/datasets/daily-temperature.ts +121 -0
  475. package/examples/datasets/earthquakes.ts +977 -0
  476. package/examples/datasets/flight-routes.ts +29 -0
  477. package/examples/datasets/height-density.ts +37 -0
  478. package/examples/datasets/heights.ts +370 -0
  479. package/examples/datasets/index.ts +24 -0
  480. package/examples/datasets/inflation-by-region.ts +44 -0
  481. package/examples/datasets/inflation-ranges.ts +34 -0
  482. package/examples/datasets/iris-flower.ts +207 -0
  483. package/examples/datasets/life-expectancy.ts +95 -0
  484. package/examples/datasets/napoleons-march.ts +182 -0
  485. package/examples/datasets/penguins.ts +54 -0
  486. package/examples/datasets/population-by-age-with-gaps.ts +23 -0
  487. package/examples/datasets/population-by-age.ts +890 -0
  488. package/examples/datasets/province-population.ts +521 -0
  489. package/examples/datasets/stock-prices.ts +63 -0
  490. package/examples/datasets/weather-stations-over-time.ts +31 -0
  491. package/examples/datasets/weather-stations.ts +22 -0
  492. package/examples/datasets/wind-vectors.ts +30 -0
  493. package/examples/datasets/world-temperature.ts +400 -0
  494. package/llms-full.txt +27 -14
  495. package/llms.txt +33 -4
  496. package/package.json +10 -1
  497. package/dist/plots/bar/defaults.d.ts +0 -9
  498. package/dist/plots/geo/features.svelte.d.ts +0 -5
  499. package/dist/plots/geo/features.svelte.js +0 -44
  500. package/dist/plots/geo/phases/tooltip.js +0 -5
  501. package/dist/plots/utils/geoAccessors.d.ts +0 -72
  502. package/dist/plots/utils/geoAccessors.js +0 -220
  503. package/dist/plots/utils/geoSegments.d.ts +0 -29
  504. package/dist/plots/utils/geoSegments.js +0 -37
  505. package/dist/types/layout/styles.d.ts +0 -122
  506. package/dist/types/markers/axis/curveName.d.ts +0 -2
  507. package/dist/types/plots/line/props.d.ts +0 -10
  508. package/dist/utils/color/contrast.d.ts +0 -9
  509. package/dist/utils/color/contrast.js +0 -40
  510. package/dist/utils/color/cssColor.d.ts +0 -4
  511. package/dist/utils/color/cssColor.js +0 -77
  512. package/dist/utils/color/ramp.d.ts +0 -17
  513. package/dist/utils/color/ramp.js +0 -110
  514. package/dist/utils/opacity.d.ts +0 -9
  515. package/dist/utils/opacity.js +0 -38
  516. package/examples/data.ts +0 -324
  517. /package/dist/plots/{box → distribution/box}/markers.js +0 -0
  518. /package/dist/types/layout/{styles.js → statistics/deviation.js} +0 -0
  519. /package/dist/types/{markers/axis/curveName.js → layout/styles/base.js} +0 -0
  520. /package/dist/types/{plots/area/props.js → layout/styles/bullet.js} +0 -0
  521. /package/dist/types/{plots/area/state.js → layout/styles/connector.js} +0 -0
  522. /package/dist/types/{plots/bar/props.js → layout/styles/curve.js} +0 -0
  523. /package/dist/types/{plots/bar/state.js → layout/styles/frame.js} +0 -0
  524. /package/dist/types/{plots/box/props.js → layout/styles/gaps.js} +0 -0
  525. /package/dist/types/{plots/box/state.js → layout/styles/geo.js} +0 -0
  526. /package/dist/types/{plots/geo/props.js → layout/styles/values.js} +0 -0
  527. /package/dist/types/{plots/geo/state.js → markers/axis/violin.js} +0 -0
  528. /package/dist/types/{plots/heatmap/props.js → markers/channels/commonMarkerConfigWithRowOffset.js} +0 -0
  529. /package/dist/types/plots/{histogram → correlation/heatmap}/props.js +0 -0
  530. /package/dist/types/plots/{heatmap → correlation/heatmap}/state.js +0 -0
  531. /package/dist/types/plots/{line → correlation/scatter}/props.js +0 -0
  532. /package/dist/types/plots/{histogram → correlation/scatter}/state.js +0 -0
  533. /package/dist/types/plots/{pyramid → distribution/box}/props.js +0 -0
  534. /package/dist/types/plots/{line → distribution/box}/state.js +0 -0
  535. /package/dist/types/plots/{scatter → distribution/density}/props.js +0 -0
  536. /package/dist/types/plots/{pyramid → distribution/density}/state.js +0 -0
  537. /package/dist/types/plots/{scatter/state.js → distribution/histogram/props.js} +0 -0
  538. /package/dist/{plots/utils → utils}/accessors.d.ts +0 -0
  539. /package/dist/{plots/utils → utils}/accessors.js +0 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,51 @@
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.3.0] - 2026-10-30
6
+
7
+ ### Added
8
+
9
+ - `legend.icon` in the configuration sets the icon a discrete legend item draws for its series: `rounded` softens its corners, and `marks` picks the shape by how the series draws (`line`, `dot`, `area`, `bar`, `cell`, `rect` or `geo`), unless the series sets its own `symbol`. A legend item can name its `mark` to choose from it.
10
+ - A `rule` marker takes a list as its `value`, and a `delta` marker a list as its `at`: one line, or one delta, at each position, all with the same style, instead of one marker for each. A delta's `line`, `text` and `dot` can be functions of the position, to style each one on its own.
11
+ - `facet` on a marker or a segment limits it to some facet panels, on every plot kind: a `by` value, a list of them, or `{ row, col }` in a `rows`/`cols` grid. Without it a marker or a segment is drawn in every panel, as before, and a plot with no facet leaves out whatever names one.
12
+
13
+ ### Fixed
14
+
15
+ - Automatic margins reserve what a plot needs without taking its drawing area: the label of the top y tick is no longer cut off, since an `'auto'` top margin now leaves room for half its height, and margins that grow to fit labels stop growing once they would leave the plot less than a quarter of its box, which kept svelteplot from drawing marks with negative sizes on small plots.
16
+
17
+ ## [1.2.0] - 2026-10-24
18
+
19
+ ### Added
20
+
21
+ - `LollipopPlot`, a dot on a stem for the value of each category.
22
+ - `DumbbellPlot`, two series joined by a connector for each category.
23
+ - `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.
24
+ - `ForestPlot`, a dot per row on a stem spanning its confidence interval.
25
+ - `BulletPlot`, a bar against a target tick and shaded qualitative ranges.
26
+ - `SlopePlot`, the change of each series between two moments, labelled at both ends.
27
+ - `SparklinePlot`, a small axisless line with a dot and a label on its last point.
28
+ - `DensityPlot`, a kernel density curve of one numeric field, and `ViolinPlot`, the mirrored density of each category with a box inside.
29
+ - Step lines through `styles.curve: 'step'`, `'step-after'` or `'step-before'` on `LinePlot`.
30
+ - A `deviation` statistic that draws an estimator of the values and a band around it, with optional labels.
31
+ - `styles.values.select` chooses which points get a value label (`'first'`, `'last'`, `'min'`, `'max'` or a list), for line, area and Cleveland-family plots.
32
+ - The size channel (`r`) works on the dots of the Cleveland family, and its automatic legend is configured under the `r` key.
33
+ - 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.
34
+ - `setConfiguration({ palette })` takes the name of a d3-scale-chromatic scheme (`'viridis'`, `'dark2'`...) or `{ scheme, count, schemeRange }` instead of just a list of colors.
35
+ - `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.
36
+ - 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.
37
+ - A timeline can free one axis at a time (`scales: 'free-x'` or `'free-y'`) while the other keeps its shared domain.
38
+ - `link` markers on a map can lift their arcs off the surface (`altitude`) and cut them where a globe hides them (`occlusion`).
39
+
40
+ ### Changed
41
+
42
+ - The default palette is Tableau 10, and the default continuous ramp, the timeline and player accents and the connector colors follow it.
43
+ - Plots draw faster: a plot in a facet, a grid or a composer no longer remounts its svelteplot chart each time the margins its labels need settle after mount. `pnpm test:perf` checks that every plot kind draws all the panels of a facet grid within a time budget; it runs before a push but not in CI, where the speed of the machine makes a time limit flaky.
44
+
45
+ ### Fixed
46
+
47
+ - 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.
48
+ - The Minard map of Napoleon's march is rebuilt with `GeoPlot` and `LinePlot` markers instead of a hand-assembled svelteplot chart.
49
+
5
50
  ## [1.1.0] - 2026-10-20
6
51
 
7
52
  ### Added
package/README.md CHANGED
@@ -10,6 +10,7 @@
10
10
  [![GitHub release (latest by date)](https://img.shields.io/github/v/release/datos-Fundar/data-chart-telling?label=Latest%20Release&display_name=tag&logo=github&logoColor=white)](https://github.com/datos-Fundar/data-chart-telling/releases/latest)
11
11
  ![GitHub License](https://img.shields.io/github/license/datos-Fundar/data-chart-telling?label=License&logo=github&logoColor=white)
12
12
  [![CI](https://img.shields.io/github/actions/workflow/status/datos-Fundar/data-chart-telling/ci.yml?branch=main&label=CI&logo=githubactions&logoColor=white)](https://github.com/datos-Fundar/data-chart-telling/actions/workflows/ci.yml)
13
+ [![Storybook](https://img.shields.io/badge/Storybook-live-FF4785?logo=storybook&logoColor=white)](https://datos-fundar.github.io/data-chart-telling/)
13
14
  [![CodeQL](https://img.shields.io/github/actions/workflow/status/datos-Fundar/data-chart-telling/codeql.yml?branch=main&label=CodeQL&logo=github&logoColor=white)](https://github.com/datos-Fundar/data-chart-telling/actions/workflows/codeql.yml)
14
15
 
15
16
  ## Introduction
@@ -23,7 +24,7 @@ It aims for a sweet spot between the flexibility of `d3`, the declarative spirit
23
24
  ```svelte
24
25
  <script lang="ts">
25
26
  import { LinePlot } from '@fundar/data-chart-telling';
26
- import { REGION_VALUES } from './data';
27
+ import { REGION_VALUES } from './datasets';
27
28
  </script>
28
29
 
29
30
  <!-- One line per region, with a title, the automatic legend, end-of-line values and a tooltip. -->
@@ -45,9 +46,9 @@ It aims for a sweet spot between the flexibility of `d3`, the declarative spirit
45
46
 
46
47
  ![A line plot with a title, a legend, end-of-line value labels and a tooltip](docs/images/line-by-region.png)
47
48
 
48
- Every Svelte snippet in this README is a runnable file in [examples/](examples/), and the data comes from [examples/data.ts](examples/data.ts).
49
+ Every Svelte snippet in this README is a runnable file in [examples/](examples/), and the data comes from [examples/datasets/](examples/datasets/).
49
50
 
50
- Nine plot kinds - line, area, bar, histogram, box, 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.
51
+ 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.
51
52
 
52
53
  ## Install
53
54
 
@@ -68,7 +69,7 @@ The package ships Svelte components, so the app needs the Svelte compiler (`@sve
68
69
  ```svelte
69
70
  <script lang="ts">
70
71
  import { BarPlot } from '@fundar/data-chart-telling';
71
- import { REGION_VALUES } from './data';
72
+ import { REGION_VALUES } from './datasets';
72
73
  </script>
73
74
 
74
75
  <!--
@@ -100,7 +101,7 @@ The package ships Svelte components, so the app needs the Svelte compiler (`@sve
100
101
  ```svelte
101
102
  <script lang="ts">
102
103
  import { LinePlot } from '@fundar/data-chart-telling';
103
- import { REGION_VALUES } from './data';
104
+ import { REGION_VALUES } from './datasets';
104
105
 
105
106
  // A rule has no controls of its own: the page moves it through `progress` (0 to 1).
106
107
  // One step per year; a line plot shows every row up to the current step.
@@ -133,7 +134,7 @@ Start with the concepts; the rest is organised by what you want a plot to do.
133
134
  | -------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
134
135
  | [Getting started](docs/getting-started.md) | Installing, a first plot, sizing a plot to its container, loading data |
135
136
  | [Concepts](docs/concepts.md) | Plots and figures, rows and series, channels, the props every plot shares |
136
- | [Plots](docs/plots.md) | The eight plot kinds: what each one draws and what it needs |
137
+ | [Plots](docs/plots.md) | Every plot kind: what it draws and what it needs |
137
138
  | [Scales](docs/scales.md) | Axes (`x`, `y`) and channel scales (`color`, `grouping`, `opacity`, `symbol`, `r`, `length`) |
138
139
  | [Styles and segments](docs/styles-and-segments.md) | Value labels, frames, gap filling, and styling ranges of the data |
139
140
  | [Markers](docs/markers.md) | Extra marks on a plot: annotations, regions, hover highlights, custom components |
@@ -150,7 +151,7 @@ Start with the concepts; the rest is organised by what you want a plot to do.
150
151
  | [Architecture](docs/architecture.md) | How a plot is assembled, for contributors |
151
152
  | [Development](docs/development.md) | Building, testing, Storybook and publishing |
152
153
 
153
- Working examples live in [examples/](examples/); the Storybook (`pnpm storybook`) shows every option live.
154
+ Working examples live in [examples/](examples/); the [online Storybook](https://datos-fundar.github.io/data-chart-telling/) (or `pnpm storybook` locally) shows every option live.
154
155
 
155
156
  ## For LLMs and coding agents
156
157
 
@@ -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',
@@ -64,6 +92,18 @@ export const DEFAULT_CONFIG = {
64
92
  titleWeight: 500,
65
93
  gap: '0.5rem 2rem',
66
94
  swatchSize: '0.9rem',
95
+ icon: {
96
+ rounded: false,
97
+ marks: {
98
+ line: 'line',
99
+ dot: 'circle',
100
+ area: 'square',
101
+ bar: 'square',
102
+ cell: 'square',
103
+ rect: 'square',
104
+ geo: 'square'
105
+ }
106
+ },
67
107
  disabledOpacity: 0.12,
68
108
  pretty: true,
69
109
  seriesTitle: { enabled: true, text: 'Series' },
@@ -79,6 +119,10 @@ export const DEFAULT_CONFIG = {
79
119
  height: 20,
80
120
  barHeight: 12,
81
121
  barRadius: 2,
122
+ opacity: {
123
+ color: '#000',
124
+ checker: { size: 4, light: '#fff', dark: '#d4d4d8' }
125
+ },
82
126
  // A slim vertical bar handle, taller than the 12px gradient track.
83
127
  handle: {
84
128
  width: '6px',
@@ -105,23 +149,6 @@ export const DEFAULT_CONFIG = {
105
149
  }
106
150
  }
107
151
  },
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
- edgeTicks: {
121
- x: { enabled: true, collision: 'drop-nice' },
122
- y: { enabled: false, collision: 'drop-nice' }
123
- }
124
- },
125
152
  tooltip: {
126
153
  background: '#111827',
127
154
  color: '#ffffff',
@@ -130,42 +157,31 @@ export const DEFAULT_CONFIG = {
130
157
  radius: '0.375rem',
131
158
  border: 'none'
132
159
  },
133
- margins: { top: 'auto', right: 'auto', bottom: 'auto', left: 'auto' },
134
- frameClip: { tolerance: 5 },
135
- // ColorBrewer Dark2 - qualitative, harmonious, and dark enough to read on white.
136
- palette: ['#1b9e77', '#d95f02', '#7570b3', '#e7298a', '#66a61e', '#e6ab02', '#a6761d', '#666666'],
137
- symbols: ['circle', 'square', 'triangle', 'diamond', 'star', 'cross'],
138
- continuous: { min: '#f7fcfd', max: '#1b9e77', labelColor: '#111827', opacityRange: [0.2, 1] },
139
- line: {
140
- strokeWidth: 3,
141
- dotRadius: 4,
142
- gap: {
143
- stroke: { strokeOpacity: 0.6, strokeDasharray: '4 4' },
144
- dots: {}
145
- }
160
+ hover: {
161
+ rule: { stroke: '#e6580d', strokeOpacity: 0.35, strokeWidth: 1.5, strokeDasharray: '4 4' },
162
+ dot: { dotRadius: 5, dotFill: 'currentColor' },
163
+ font: { fill: 'currentColor', fontSize: 12, dy: -18 },
164
+ area: { fill: '#94a3b8', fillOpacity: 0.4 }
146
165
  },
147
- text: {
148
- declutter: {
149
- elbowGap: 10,
150
- laneStep: 7,
151
- labelGap: 6,
152
- connector: { stroke: '#94a3b8', strokeWidth: 0.5 }
166
+ facet: {
167
+ indicator: {
168
+ background: '#111827',
169
+ color: '#ffffff',
170
+ fontSize: '0.8125rem',
171
+ padding: '0.125rem 0.5rem',
172
+ radius: '999px'
173
+ },
174
+ navButton: {
175
+ background: '#111827',
176
+ color: '#ffffff',
177
+ size: '2rem',
178
+ fontSize: '1.1rem',
179
+ disabledOpacity: 0.3
153
180
  }
154
181
  },
155
- bar: {
156
- gap: { fillOpacity: 0.5 },
157
- seriesPadding: 0.2,
158
- paddingInner: 0.15,
159
- paddingOuter: 0.15
160
- },
161
- pyramid: { gap: { fillOpacity: 0.5 } },
162
- area: { fillOpacity: 0.6 },
163
- histogram: { inset: 1, fillOpacity: 1 },
164
- box: { fillOpacity: 0.9, paddingInner: 0.4, paddingOuter: 0.2 },
165
- scatter: { dotRadius: 5 },
166
182
  timeline: {
167
183
  axisColor: 'currentColor',
168
- activeColor: '#1b9e77',
184
+ activeColor: '#4e79a7',
169
185
  thickness: 60,
170
186
  gap: '12px',
171
187
  rule: {
@@ -190,22 +206,22 @@ export const DEFAULT_CONFIG = {
190
206
  valueWidth: '3rem',
191
207
  button: {
192
208
  size: '2rem',
193
- background: '#1b9e77',
209
+ background: '#4e79a7',
194
210
  color: '#ffffff',
195
- hoverBackground: '#0c4937',
211
+ hoverBackground: '#24384d',
196
212
  radius: '999px'
197
213
  },
198
214
  track: {
199
215
  height: '3px',
200
216
  color: 'color-mix(in srgb, currentColor 25%, transparent)',
201
- fillColor: '#1b9e77',
217
+ fillColor: '#4e79a7',
202
218
  radius: '999px'
203
219
  },
204
- thumb: { size: '14px', color: '#1b9e77' },
220
+ thumb: { size: '14px', color: '#4e79a7' },
205
221
  toggle: {
206
222
  background: 'transparent',
207
223
  color: 'currentColor',
208
- activeBackground: '#1b9e77',
224
+ activeBackground: '#4e79a7',
209
225
  activeColor: '#ffffff',
210
226
  radius: '0.375rem',
211
227
  fontSize: '0.75rem',
@@ -213,11 +229,15 @@ export const DEFAULT_CONFIG = {
213
229
  }
214
230
  }
215
231
  },
216
- hover: {
217
- rule: { stroke: '#e6580d', strokeOpacity: 0.35, strokeWidth: 1.5, strokeDasharray: '4 4' },
218
- dot: { dotRadius: 5, dotFill: 'currentColor' },
219
- font: { fill: 'currentColor', fontSize: 12, dy: -18 },
220
- area: { fill: '#94a3b8', fillOpacity: 0.25 }
232
+ connector: {
233
+ sign: { positive: '#59a14f', negative: '#e15759', zero: '#9ca3af' },
234
+ lengthScheme: ['#d1d5db', '#374151'],
235
+ differenceScheme: ['#e15759', '#e5e7eb', '#59a14f'],
236
+ arrow: { width: 2, headLength: 8, headAngle: 60 },
237
+ capLength: 8,
238
+ outsideOpacity: 0.4,
239
+ labelFontSize: 11,
240
+ labelGap: 4
221
241
  },
222
242
  // Beside a vertical delta (taken on x), above a horizontal one (on y).
223
243
  delta: {
@@ -226,22 +246,79 @@ export const DEFAULT_CONFIG = {
226
246
  y: { dx: 0, dy: -10, lineAnchor: 'middle', textAnchor: 'middle' }
227
247
  }
228
248
  },
229
- facet: {
230
- indicator: {
231
- background: '#111827',
232
- color: '#ffffff',
233
- fontSize: '0.8125rem',
234
- padding: '0.125rem 0.5rem',
235
- radius: '999px'
236
- },
237
- navButton: {
238
- background: '#111827',
239
- color: '#ffffff',
240
- size: '2rem',
241
- fontSize: '1.1rem',
242
- disabledOpacity: 0.3
249
+ text: {
250
+ declutter: {
251
+ elbowGap: 10,
252
+ laneStep: 7,
253
+ labelGap: 6,
254
+ connector: { stroke: '#94a3b8', strokeWidth: 0.5 }
243
255
  }
244
- }
256
+ },
257
+ // ── Plot kinds ──────────────────────────────────────────────────────────────
258
+ area: { fillOpacity: 0.6 },
259
+ bar: {
260
+ gap: { fillOpacity: 0.5 },
261
+ seriesPadding: 0.2,
262
+ paddingInner: 0.15,
263
+ paddingOuter: 0.15
264
+ },
265
+ box: { fillOpacity: 0.9, paddingInner: 0.4, paddingOuter: 0.2 },
266
+ bullet: {
267
+ barThickness: 10,
268
+ rangeWidth: 28,
269
+ rangeColors: ['#9ca3af', '#d1d5db', '#eceff3'],
270
+ targetLength: 22,
271
+ targetWidth: 3,
272
+ paddingInner: 0.4,
273
+ paddingOuter: 0.3
274
+ },
275
+ cleveland: {
276
+ dotRadius: 5,
277
+ stemWidth: 5,
278
+ connectorColor: '#9ca3af',
279
+ labelGap: 10,
280
+ paddingInner: 0.5,
281
+ paddingOuter: 0.5
282
+ },
283
+ density: { fillOpacity: 0.6, strokeWidth: 2 },
284
+ dumbbell: {
285
+ dotRadius: 6,
286
+ stemWidth: 'dots',
287
+ connectorColor: '#9ca3af',
288
+ labelGap: 10,
289
+ paddingInner: 0.5,
290
+ paddingOuter: 0.5
291
+ },
292
+ forest: {
293
+ dotRadius: 5,
294
+ stemWidth: 2,
295
+ caps: true,
296
+ labelGap: 10,
297
+ paddingInner: 0.5,
298
+ paddingOuter: 0.5
299
+ },
300
+ histogram: { inset: 1, fillOpacity: 1 },
301
+ line: {
302
+ curve: 'auto',
303
+ strokeWidth: 3,
304
+ dotRadius: 4,
305
+ gap: {
306
+ stroke: { strokeOpacity: 0.6, strokeDasharray: '4 4' },
307
+ dots: {}
308
+ }
309
+ },
310
+ lollipop: {
311
+ dotRadius: 6,
312
+ stemWidth: 2,
313
+ labelGap: 10,
314
+ paddingInner: 0.5,
315
+ paddingOuter: 0.5
316
+ },
317
+ pyramid: { gap: { fillOpacity: 0.5 } },
318
+ scatter: { dotRadius: 5 },
319
+ slope: { strokeWidth: 2, dotRadius: 5, padding: 0 },
320
+ sparkline: { strokeWidth: 1.5, dotRadius: 3 },
321
+ violin: { fillOpacity: 0.6, paddingInner: 0.2, paddingOuter: 0.2, boxWidth: 8 }
245
322
  };
246
323
  // ── Reactive store ──────────────────────────────────────────────────────────
247
324
  let current = $state(structuredClone(DEFAULT_CONFIG));
@@ -249,9 +326,9 @@ let current = $state(structuredClone(DEFAULT_CONFIG));
249
326
  export function getConfiguration() {
250
327
  return current;
251
328
  }
252
- /** Deep-merge a partial override into the global configuration. Reactive. */
329
+ /** Deep-merge a partial override into the global configuration - a `palette` may be a scheme name. Reactive. */
253
330
  export function setConfiguration(patch) {
254
- current = merge(current, patch);
331
+ current = merge(current, Palette.resolveIn(patch));
255
332
  return current;
256
333
  }
257
334
  /** Restore the shipped defaults. */
@@ -273,6 +350,9 @@ export function configToCssVars(c) {
273
350
  '--dct-font': c.font,
274
351
  '--dct-fg': c.color,
275
352
  '--dct-bg': c.background,
353
+ ...t('title', c.title),
354
+ ...t('subtitle', c.subtitle),
355
+ ...t('caption', c.caption),
276
356
  '--dct-header-pad': c.spacing.headerPadding,
277
357
  '--dct-legend-pad': c.spacing.legendPadding,
278
358
  '--dct-caption-pad': c.spacing.captionPadding,
@@ -282,9 +362,10 @@ export function configToCssVars(c) {
282
362
  '--dct-divider-style': c.divider.style,
283
363
  '--dct-divider-margin': c.divider.margin,
284
364
  '--dct-row-gap': c.chrome.rowGap,
285
- ...t('title', c.title),
286
- ...t('subtitle', c.subtitle),
287
- ...t('caption', c.caption),
365
+ '--dct-heat-min': c.continuous.min,
366
+ '--dct-heat-max': c.continuous.max,
367
+ '--dct-heat-text': c.continuous.labelColor,
368
+ '--dct-axis-color': c.axis.color,
288
369
  '--dct-legend-font': c.legend.font,
289
370
  '--dct-legend-size': c.legend.size,
290
371
  '--dct-legend-weight': String(c.legend.weight),
@@ -312,13 +393,22 @@ export function configToCssVars(c) {
312
393
  '--dct-continuous-label-size': c.legend.continuous.label.size,
313
394
  '--dct-continuous-label-weight': String(c.legend.continuous.label.weight),
314
395
  '--dct-continuous-label-overlap-rotate': c.legend.continuous.label.overlap.rotate,
315
- '--dct-axis-color': c.axis.color,
316
396
  '--dct-tooltip-bg': c.tooltip.background,
317
397
  '--dct-tooltip-color': c.tooltip.color,
318
398
  '--dct-tooltip-size': c.tooltip.fontSize,
319
399
  '--dct-tooltip-pad': c.tooltip.padding,
320
400
  '--dct-tooltip-radius': c.tooltip.radius,
321
401
  '--dct-tooltip-border': c.tooltip.border,
402
+ '--dct-facet-indicator-bg': c.facet.indicator.background,
403
+ '--dct-facet-indicator-color': c.facet.indicator.color,
404
+ '--dct-facet-indicator-size': c.facet.indicator.fontSize,
405
+ '--dct-facet-indicator-pad': c.facet.indicator.padding,
406
+ '--dct-facet-indicator-radius': c.facet.indicator.radius,
407
+ '--dct-facet-nav-bg': c.facet.navButton.background,
408
+ '--dct-facet-nav-color': c.facet.navButton.color,
409
+ '--dct-facet-nav-btn-size': c.facet.navButton.size,
410
+ '--dct-facet-nav-font-size': c.facet.navButton.fontSize,
411
+ '--dct-facet-nav-disabled-opacity': String(c.facet.navButton.disabledOpacity),
322
412
  '--dct-timeline-axis': c.timeline.axisColor,
323
413
  '--dct-timeline-active': c.timeline.activeColor,
324
414
  '--dct-timeline-gap': c.timeline.gap,
@@ -347,20 +437,7 @@ export function configToCssVars(c) {
347
437
  '--dct-player-toggle-active-color': c.timeline.player.toggle.activeColor,
348
438
  '--dct-player-toggle-radius': c.timeline.player.toggle.radius,
349
439
  '--dct-player-toggle-size': c.timeline.player.toggle.fontSize,
350
- '--dct-player-toggle-pad': c.timeline.player.toggle.padding,
351
- '--dct-heat-min': c.continuous.min,
352
- '--dct-heat-max': c.continuous.max,
353
- '--dct-heat-text': c.continuous.labelColor,
354
- '--dct-facet-indicator-bg': c.facet.indicator.background,
355
- '--dct-facet-indicator-color': c.facet.indicator.color,
356
- '--dct-facet-indicator-size': c.facet.indicator.fontSize,
357
- '--dct-facet-indicator-pad': c.facet.indicator.padding,
358
- '--dct-facet-indicator-radius': c.facet.indicator.radius,
359
- '--dct-facet-nav-bg': c.facet.navButton.background,
360
- '--dct-facet-nav-color': c.facet.navButton.color,
361
- '--dct-facet-nav-btn-size': c.facet.navButton.size,
362
- '--dct-facet-nav-font-size': c.facet.navButton.fontSize,
363
- '--dct-facet-nav-disabled-opacity': String(c.facet.navButton.disabledOpacity)
440
+ '--dct-player-toggle-pad': c.timeline.player.toggle.padding
364
441
  };
365
442
  }
366
443
  /** Serialize a CSS-vars record into a `style` attribute string. */