@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
@@ -35,7 +35,7 @@ pnpm test:stories # every story as a test (boots Storybook
35
35
 
36
36
  - Component tests must end in `.svelte.test.ts`; that suffix is what routes a file to the browser project.
37
37
  - Browser tests render with `vitest-browser-svelte`. A dot renders as a `<path>`, not a `<circle>`; styles live in the `style` attribute.
38
- - `tests/unit/docs` and `tests/unit/examples.svelte.test.ts` guard the LLM-facing docs: every example mounts, and the links and exports named in `llms.txt` and `llms-full.txt` exist.
38
+ - `tests/unit/docs` and `tests/unit/examples.svelte.test.ts` guard the LLM-facing docs: every example mounts, the links and exports named in `llms.txt` and `llms-full.txt` exist, and the example snippets in the Markdown match their files.
39
39
 
40
40
  ## Storybook
41
41
 
@@ -53,14 +53,23 @@ Every option has a story under `stories/`, grouped as Plots, Markers, Transforms
53
53
 
54
54
  ## Documentation figures
55
55
 
56
- Every screenshot in the docs is a real component in `scripts/docs-figures/figures/`, type-checked by `pnpm check` and rendered by Playwright:
56
+ Every screenshot in the docs is an example, rendered by Playwright to `docs/images/<name>.png` in kebab-case (`examples/LineByRegion.svelte` is `line-by-region.png`). The examples and the screenshots share small real datasets, one file each in `examples/datasets/`, which name their source, and axes are set to English. `docs/images` is left out of the npm package. So are the map boundaries the stories draw: the GeoJSON files in `examples/geo/`, and the datasets in `examples/datasets/` that load them (provinces, countries, comunas, partidos), which are not in the `$datasets` barrel - import them as `$datasets/<name>`.
57
57
 
58
58
  ```bash
59
- pnpm docs:images # regenerate docs/images/*.png
60
- pnpm docs:images tooltip scales # only these figures
59
+ pnpm docs:images # regenerate docs/images/*.png
60
+ pnpm docs:images tooltip scales # only these
61
61
  ```
62
62
 
63
- A figure can set `export const meta = { hover: { x, y } }` in a `<script module>` block to rest the pointer before the shot. The data is synthetic and deterministic (`scripts/docs-figures/data.ts`), and axes are set to English. `docs/images` is left out of the npm package.
63
+ `scripts/docs-figures/figures.json` lists the examples that get no screenshot (`skip`) and where the pointer rests before a shot (`meta`, e.g. `{ "hover": { "x": 330, "y": 160 } }`). The maps are the exception: their GeoJSON is too large to ship in `examples/`, so they are components of their own in `scripts/docs-figures/figures/`, importing it from `stories/`, and their snippets in `geo.md` and `styles-and-segments.md` are written by hand.
64
+
65
+ The Markdown shows each example's source between `<!-- example: examples/Name.svelte -->` and `<!-- /example -->`:
66
+
67
+ ```bash
68
+ pnpm docs:examples # copy each example's source into README.md and docs/*.md
69
+ pnpm docs:examples --check # fail when a block is out of date
70
+ ```
71
+
72
+ `tests/unit/docs/examples-sync.test.ts` runs the check, so a snippet never drifts from its example or its screenshot.
64
73
 
65
74
  ## Continuous integration
66
75
 
package/docs/facets.md CHANGED
@@ -2,18 +2,29 @@
2
2
 
3
3
  `facet` splits a plot's rows into small multiples: one panel per value of a field, each drawn with the same plot configuration.
4
4
 
5
+ <!-- example: examples/Facets.svelte -->
6
+
5
7
  ```svelte
8
+ <script lang="ts">
9
+ import { LinePlot } from '@fundar/data-chart-telling';
10
+ import { REGION_VALUES } from './datasets';
11
+ </script>
12
+
13
+ <!-- One panel per region, three columns, sharing scales. A tooltip with `sync` shows in every panel on purpose. -->
6
14
  <LinePlot
7
- {width}
8
- {height}
9
- data={rows}
10
- x="year"
15
+ width={900}
16
+ height={360}
17
+ data={REGION_VALUES}
18
+ x="date"
11
19
  y="value"
12
- facet={{ by: 'region', columns: 3, gap: 12 }}
20
+ facet={{ by: 'region', columns: 3, gap: 12, scales: 'shared' }}
21
+ tooltip={{ sync: true }}
13
22
  />
14
23
  ```
15
24
 
16
- ![One panel per region](images/facets-grid.png)
25
+ <!-- /example -->
26
+
27
+ ![One panel per region](images/facets.png)
17
28
 
18
29
  The data phases (grouping, transforms, statistics, shared scales) run once for all panels; each panel then lays itself out in its own box. Panels share legend toggles and hover, so one legend controls them all.
19
30
 
@@ -36,20 +47,63 @@ The data phases (grouping, transforms, statistics, shared scales) run once for a
36
47
  | `scales` | `'shared'` (default), `'free'`, `'free-x'`, `'free-y'` |
37
48
  | `axes` | `'all'` (default) draws every panel's axes; `'outer'` draws only the left column's y and the bottom row's x, with panels resized to equal boxes |
38
49
 
50
+ <!-- example: examples/FacetsCarousel.svelte -->
51
+
39
52
  ```svelte
40
- <BarPlot ... facet={{ by: 'group', columns: 3, mode: 'carousel', visible: 2 }} />
53
+ <script lang="ts">
54
+ import { LinePlot } from '@fundar/data-chart-telling';
55
+ import { REGION_VALUES } from './datasets';
56
+ </script>
57
+
58
+ <!-- A carousel shows `visible` panels at a time, with navigation below. -->
59
+ <LinePlot
60
+ width={720}
61
+ height={340}
62
+ data={REGION_VALUES}
63
+ x="date"
64
+ y="value"
65
+ facet={{ by: 'region', columns: 3, mode: 'carousel', visible: 2, navLayout: 'below' }}
66
+ />
41
67
  ```
42
68
 
69
+ <!-- /example -->
70
+
43
71
  ![A carousel showing two panels at a time](images/facets-carousel.png)
44
72
 
45
73
  ## Rows by columns
46
74
 
47
75
  `{ rows, cols }` makes one panel per combination of a row field and a column field, with each value labelled. Combinations without data stay empty. `rowValues` and `colValues` choose and order the values. A free `x` scale is shared down each column and a free `y` along each row.
48
76
 
77
+ <!-- example: examples/FacetsRowsCols.svelte -->
78
+
49
79
  ```svelte
50
- <LinePlot ... facet={{ rows: 'region', cols: 'sector', scales: 'free' }} />
80
+ <script lang="ts">
81
+ import { LinePlot } from '@fundar/data-chart-telling';
82
+ import { REGION_VALUES } from './datasets';
83
+
84
+ // Each region's value split into two sectors.
85
+ const SECTORS = [
86
+ { sector: 'Goods', share: 0.8 },
87
+ { sector: 'Services', share: 1.4 }
88
+ ];
89
+ const rows = REGION_VALUES.flatMap((row) =>
90
+ SECTORS.map(({ sector, share }) => ({ ...row, sector, value: row.value * share }))
91
+ );
92
+ </script>
93
+
94
+ <!-- One panel per region and sector; `scales: 'free'` fits each panel to its own data. -->
95
+ <LinePlot
96
+ width={720}
97
+ height={420}
98
+ data={rows}
99
+ x="date"
100
+ y="value"
101
+ facet={{ rows: 'region', cols: 'sector', scales: 'free' }}
102
+ />
51
103
  ```
52
104
 
105
+ <!-- /example -->
106
+
53
107
  ![Panels for each combination of region and sector](images/facets-rows-cols.png)
54
108
 
55
109
  ## Alignment
@@ -13,24 +13,23 @@ pnpm add @fundar/data-chart-telling svelte svelteplot
13
13
 
14
14
  ## A first plot
15
15
 
16
+ <!-- example: examples/FirstPlot.svelte -->
17
+
16
18
  ```svelte
17
19
  <script lang="ts">
18
20
  import { LinePlot } from '@fundar/data-chart-telling';
19
-
20
- const rows = [
21
- { year: 2020, region: 'North', value: 3.1 },
22
- { year: 2021, region: 'North', value: 3.8 },
23
- { year: 2020, region: 'South', value: 2.2 },
24
- { year: 2021, region: 'South', value: 2.9 }
25
- ];
21
+ import { REGION_VALUES } from './datasets';
26
22
  </script>
27
23
 
28
- <LinePlot width={720} height={400} data={rows} x="year" y="value" color="region" />
24
+ <!-- The smallest useful plot: rows, the fields to map and a pixel size. -->
25
+ <LinePlot width={720} height={400} data={REGION_VALUES} x="date" y="value" color="region" />
29
26
  ```
30
27
 
28
+ <!-- /example -->
29
+
31
30
  ![A line plot with one line per region](images/first-plot.png)
32
31
 
33
- - `data` is an array of flat rows; `x` and `y` name the fields that position each row.
32
+ - `data` is an array of flat rows, here `{ date, region, value }` from [examples/datasets/inflation-by-region.ts](../examples/datasets/inflation-by-region.ts); `x` and `y` name the fields that position each row.
34
33
  - `color="region"` splits the rows into one series per region and gives each its own color.
35
34
  - `width` and `height` are pixels.
36
35
 
package/docs/legend.md CHANGED
@@ -6,13 +6,13 @@ A plot builds its legend from what it draws: its series, the scales its channels
6
6
 
7
7
  `legend` is unset or `true` for the automatic legend, `false` for none. The automatic legend can have these sections:
8
8
 
9
- | Section | Appears when | Content |
10
- | ------------------ | ------------------------------- | ------------------------------------------ |
11
- | series (discrete) | the plot has several series | one item per series, in its color and mark |
12
- | color (continuous) | `color` is a continuous value | a ramp with its min and max |
13
- | opacity | `opacity` is a continuous value | a ramp fading across the opacity range |
14
- | size | `r` is mapped | a few dots at representative values |
15
- | symbol | `symbol` is mapped | each category next to its shape |
9
+ | Section | Appears when | Content |
10
+ | ------------------ | ------------------------------- | ---------------------------------------------------------- |
11
+ | series (discrete) | the plot has several series | one item per series, in its color and mark |
12
+ | color (continuous) | `color` is a continuous value | a ramp with its min and max |
13
+ | opacity | `opacity` is a continuous value | a bar fading across the opacity range, over a checkerboard |
14
+ | size | `r` is mapped | a few dots at representative values |
15
+ | symbol | `symbol` is mapped | each category next to its shape |
16
16
 
17
17
  Segments and markers join the series section when they carry a `legend` label:
18
18
 
@@ -37,11 +37,39 @@ Segments and markers join the series section when they carry a `legend` label:
37
37
 
38
38
  Items become clickable with `interactive` on the series section. `disabled` says what a hidden series becomes:
39
39
 
40
+ <!-- example: examples/LegendToggle.svelte -->
41
+
40
42
  ```svelte
41
- <LinePlot ... legend={{ series: { interactive: { enabled: true, disabled: { mode: 'omit' } } } }} />
43
+ <script lang="ts">
44
+ import { LinePlot } from '@fundar/data-chart-telling';
45
+ import { REGION_VALUES } from './datasets';
46
+ import LegendReader from './LegendReader.svelte';
47
+ </script>
48
+
49
+ <!--
50
+ The automatic legend can toggle series. `mode: 'omit'` drops a hidden series
51
+ and refits the axes to what is left; 'dim' and 'hide' keep the axes.
52
+ Anything inside the figure (here, the footer) reads the toggles through
53
+ `useFigure().legend` - see LegendReader.
54
+ -->
55
+ <LinePlot
56
+ width={720}
57
+ height={400}
58
+ data={REGION_VALUES}
59
+ x="date"
60
+ y="value"
61
+ color="region"
62
+ legend={{ series: { interactive: { enabled: true, disabled: { mode: 'omit' } } } }}
63
+ >
64
+ {#snippet footer()}
65
+ <LegendReader />
66
+ {/snippet}
67
+ </LinePlot>
42
68
  ```
43
69
 
44
- ![Legend items as toggles](images/legend-interactive.png)
70
+ <!-- /example -->
71
+
72
+ ![Legend items as toggles](images/legend-toggle.png)
45
73
 
46
74
  | `disabled.mode` | A hidden series... |
47
75
  | ----------------- | ------------------------------------------------------------------------------------- |
@@ -66,32 +94,51 @@ legend={{
66
94
  series: { title: 'Division', layout: { type: 'flex' } },
67
95
  color: { title: 'Temperature', interactive: { enabled: true } },
68
96
  opacity: { title: 'Confidence' },
69
- size: { title: 'Population' },
97
+ r: { title: 'Population' },
70
98
  symbol: { title: 'Income group' }
71
99
  }}
72
100
  ```
73
101
 
74
- Each channel key adjusts the section that channel draws: any section field except what the plots compute (items, ranges, domains). An entry with `match` adjusts only the section whose title matches; a list of entries adjusts several.
102
+ Each key is the name of the channel (the plot's own prop: `r` for the size section) and adjusts the section that channel draws: any section field except what the plots compute (items, ranges, domains). An entry with `match` adjusts only the section whose title matches; a list of entries adjusts several.
75
103
 
76
104
  ## Explicit sections
77
105
 
78
106
  A list replaces the automatic legend with exactly those sections:
79
107
 
80
- ```ts
81
- legend={[
82
- {
83
- type: 'discrete',
84
- title: 'Indicator',
85
- interactive: { enabled: true },
86
- items: [
87
- { name: 'GDP', color: '#4f46e5', symbol: 'line' },
88
- { name: 'Employment', color: '#e6580d', symbol: 'line' }
89
- ]
90
- },
91
- { type: 'continuous', title: 'Share', min: 0, max: 100, scheme: 'blues' }
92
- ]}
108
+ <!-- example: examples/LegendSections.svelte -->
109
+
110
+ ```svelte
111
+ <script lang="ts">
112
+ import { LinePlot } from '@fundar/data-chart-telling';
113
+ import { REGION_VALUES } from './datasets';
114
+ </script>
115
+
116
+ <!-- An explicit legend: a discrete section of toggles and a continuous ramp. -->
117
+ <LinePlot
118
+ width={720}
119
+ height={400}
120
+ data={REGION_VALUES}
121
+ x="date"
122
+ y="value"
123
+ color="region"
124
+ legend={[
125
+ {
126
+ type: 'discrete',
127
+ title: 'Region',
128
+ interactive: { enabled: true },
129
+ items: [
130
+ { name: 'GBA', color: '#4f46e5', symbol: 'line' },
131
+ { name: 'Cuyo', color: '#e6580d', symbol: 'line' },
132
+ { name: 'Northwest', color: '#16a34a', symbol: 'line' }
133
+ ]
134
+ },
135
+ { type: 'continuous', title: 'Share', min: 0, max: 100, scheme: 'blues' }
136
+ ]}
137
+ />
93
138
  ```
94
139
 
140
+ <!-- /example -->
141
+
95
142
  ![A legend of explicit sections: discrete items and a continuous ramp](images/legend-sections.png)
96
143
 
97
144
  Section types:
@@ -103,4 +150,6 @@ Section types:
103
150
 
104
151
  ## Placement and look
105
152
 
153
+ An opacity section draws its bar as one color fading over a checkerboard, so it reads as transparency and not as a color ramp; the color is the marker's own when it has one, else `legend.continuous.opacity.color` (black by default), and `legend.continuous.opacity.checker` sets the squares.
154
+
106
155
  The legend is a chrome block: `order` places it (`'legend'`, or in a row with the plot). Its fonts, gaps, swatch size and the continuous bar's geometry are `legend.*` in the [configuration](theming.md). A paginated section's prev/next arrows are replaceable with a `navButton` snippet.
package/docs/markers.md CHANGED
@@ -2,29 +2,40 @@
2
2
 
3
3
  `markers` adds marks to a plot beyond the ones its kind draws: annotations, regions, derived shapes, hover highlights, or any Svelte component. It is an array of objects; `type` picks the marker and the other fields configure it.
4
4
 
5
+ <!-- example: examples/Markers.svelte -->
6
+
5
7
  ```svelte
8
+ <script lang="ts">
9
+ import { LinePlot } from '@fundar/data-chart-telling';
10
+ import { LIFE } from './datasets';
11
+ </script>
12
+
13
+ <!-- Markers add marks to a plot: a hover highlight, a reference rule and a delta between two series. -->
6
14
  <LinePlot
7
- {width}
8
- {height}
9
- data={lifeExpectancy}
15
+ width={720}
16
+ height={400}
17
+ data={LIFE}
10
18
  x="year"
11
19
  y="value"
12
20
  color="sex"
21
+ scales={{ x: { edgeTicks: true } }}
13
22
  markers={[
14
23
  { type: 'hover' },
15
- { type: 'rule', axis: 'x', value: 2020, styles: { stroke: '#999', strokeDasharray: '4 4' } },
24
+ { type: 'rule', axis: 'x', value: 2001, styles: { stroke: '#999', strokeDasharray: '4 4' } },
16
25
  {
17
26
  type: 'delta',
18
27
  axis: 'x',
19
- at: 2018,
28
+ at: 1980,
20
29
  from: { type: 'series', series: 'female' },
21
30
  to: { type: 'series', series: 'male' },
22
- formatDiff: (d) => d.toFixed(1)
31
+ formatDiff: (difference) => difference.toFixed(1)
23
32
  }
24
33
  ]}
25
34
  />
26
35
  ```
27
36
 
37
+ <!-- /example -->
38
+
28
39
  ![A line plot with a reference rule and a delta between two series](images/markers.png)
29
40
 
30
41
  Markers draw in array order. Type a markers array with `satisfies AxisBasedMarkersConfig[]` (or `GeoMarkersConfig[]`) to get completion.
@@ -34,43 +45,45 @@ Markers draw in array order. Type a markers array with `satisfies AxisBasedMarke
34
45
  | Field | Meaning |
35
46
  | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
36
47
  | `data` | The marker's own rows. Unset, it draws the plot's rows |
37
- | `x`, `y`, `grouping` | Accessors, when the marker reads other fields than the plot |
48
+ | `x`, `y`, `grouping` | Accessors, when the marker reads other fields than the plot (a `bollinger` marker takes the plot's own `x` and `y` when it sets none) |
38
49
  | `series` | Draw over one series only (by name) |
39
50
  | `scope` | With `series`: `'series'` (default) draws once over the whole series; `'segment'` draws once per [segment](styles-and-segments.md), in its color - a `selectMaxY` marks each segment's own peak |
40
51
  | `scales` | The marker's own `color`/`opacity`/`symbol` scales, independent of the plot's |
41
52
  | `transforms`, `statistics` | Derive rows for this marker ([Transforms](transforms-and-statistics.md)) |
42
53
  | `clip` | Clip to the plot's frame |
54
+ | `dx`, `dy` | Move the marker this many pixels right and down, on a map too. A `dot`, `text` or `image` marker also takes a function of the row, to move each row on its own: `dy: (row) => row.side * 15` |
43
55
  | `legend` | Name the marker on the automatic [legend](legend.md) |
44
56
 
45
57
  Many markers also take channel fields (`color`, `fill`, `opacity`, `r`, `symbol`, `weight`, `x1`/`x2`/`y1`/`y2`) and a `styles` object (`StrokeStyle`, `AreaStyle`, `DotStyle` or `FontStyle` depending on the mark).
46
58
 
47
59
  ## Catalog for axis-based plots
48
60
 
49
- | `type` | Draws |
50
- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
51
- | `dot` | A point per row; `r`, `color`, `symbol`, `styles` (`DotStyle`) |
52
- | `text` | A label per row; `text` (string or function), `styles` (`FontStyle`), `declutter`, `edgeAware`, `fitMargins` |
53
- | `line` | A line through the rows |
54
- | `rule` | A reference line: `axis: 'x' \| 'y'`, `value` (or a function with `data`), `styles` |
55
- | `tick` | A short tick per row along one axis |
56
- | `bar` | A bar; `rect`, `cell`: rectangles and heatmap cells |
57
- | `rect` | A rectangle from `x1`/`x2`/`y1`/`y2`; `interval` turns `x`/`y` into ranges |
58
- | `area` | A filled area under a curve, or between `y1` and `y2`; `curve` |
59
- | `difference` | The area between two series, colored by which one is on top |
60
- | `arrow` | An arrow from `x1,y1` to `x2,y2`; `bend`, `headAngle`, `headLength` |
61
- | `trail` | A variable-width ribbon along a path, its width set by `r` |
62
- | `delta` | The distance between two series (or a series and a fixed value) at a position, as a line and a label |
63
- | `hull` | The convex hull around a cluster of points |
64
- | `density` | 2D density contour bands |
65
- | `box` | A box plot; sub-marks styled through `bar`, `rule`, `dot`, `tickMedian`, `tickMinMax` |
66
- | `regression`, `bollinger` | A fitted curve, a moving-average band |
67
- | `waffle` | The value as a grid of unit squares; `unit`, `multiple`, `gap` |
68
- | `voronoi`, `voronoiMesh`, `delaunayLink`, `delaunayMesh` | Voronoi cells and Delaunay triangulation |
69
- | `image` | An image per row; `src`, `width`, `height` |
70
- | `raster` | A field sampled over a rectangle, drawn to a canvas |
71
- | `brush` | A drag-to-select rectangle with `onbrushstart`, `onbrush`, `onbrushend` |
72
- | `hover` | The in-plot hover highlight (see below) |
73
- | `component` | Your own Svelte component (see below) |
61
+ | `type` | Draws |
62
+ | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
63
+ | `dot` | A point per row; `r`, `color`, `symbol`, `styles` (`DotStyle`) |
64
+ | `text` | A label per row; `text` (string or function), `styles` (`FontStyle`), `declutter`, `edgeAware`, `fitMargins` |
65
+ | `line` | A line through the rows |
66
+ | `rule` | A reference line: `axis: 'x' \| 'y'`, `value` (or a function with `data`), `styles`; with `data`, `stroke`, `strokeWidth` and `strokeOpacity` also take a field or function per row |
67
+ | `tick` | A short tick per row along one axis |
68
+ | `bar` | A bar; `rect`, `cell`: rectangles and heatmap cells |
69
+ | `rect` | A rectangle from `x1`/`x2`/`y1`/`y2`; `interval` turns `x`/`y` into ranges |
70
+ | `area` | A filled area under a curve, or between `y1` and `y2`; `curve` |
71
+ | `difference` | The area between two series, colored by which one is on top |
72
+ | `arrow` | An arrow from `x1,y1` to `x2,y2`; `bend`, `headAngle`, `headLength`; with `data`, `stroke`, `strokeWidth` and `strokeOpacity` also take a field or function per row |
73
+ | `trail` | A variable-width ribbon along a path, its width set by `r` |
74
+ | `delta` | The distance between two series (or a series and a fixed value) at a position, as a line and a label |
75
+ | `hull` | The convex hull around a cluster of points |
76
+ | `density` | 2D density contour bands |
77
+ | `box` | A box plot; sub-marks styled through `bar`, `rule`, `dot`, `tickMedian`, `tickMinMax`; `thickness` sets its width in pixels, `slot` its share of a band |
78
+ | `violin` | A violin per category of its rows: the mirrored density of `y` (or `x`), `kernel`, `bandwidth`, `trim`, `peak`, `slot`; add a narrow `box` over the same rows for the box inside |
79
+ | `regression`, `bollinger` | A fitted curve, a moving-average band |
80
+ | `waffle` | The value as a grid of unit squares; `unit`, `multiple`, `gap` |
81
+ | `voronoi`, `voronoiMesh`, `delaunayLink`, `delaunayMesh` | Voronoi cells and Delaunay triangulation |
82
+ | `image` | An image per row; `src`, `width`, `height` |
83
+ | `raster` | A field sampled over a rectangle, drawn to a canvas |
84
+ | `brush` | A drag-to-select rectangle with `onbrushstart`, `onbrush`, `onbrushend` |
85
+ | `hover` | The in-plot hover highlight (see below) |
86
+ | `component` | Your own Svelte component (see below) |
74
87
 
75
88
  ## Hover highlight
76
89
 
@@ -0,0 +1,26 @@
1
+ # HeatmapPlot
2
+
3
+ Part of [Plots](../../plots.md).
4
+
5
+ A grid of cells, `x` and `y` being the categories of the columns and rows and `color` the value that colors each cell.
6
+
7
+ <!-- example: examples/Heatmap.svelte -->
8
+
9
+ ```svelte
10
+ <script lang="ts">
11
+ import { HeatmapPlot } from '@fundar/data-chart-telling';
12
+ import { PENGUIN_COUNTS } from './datasets';
13
+ </script>
14
+
15
+ <!-- One cell per island and species, colored by the number of penguins. -->
16
+ <HeatmapPlot width={560} height={360} data={PENGUIN_COUNTS} x="island" y="species" color="count" />
17
+ ```
18
+
19
+ <!-- /example -->
20
+
21
+ ![A heatmap with value labels](../../images/heatmap.png)
22
+
23
+ - The color domain spans the whole dataset, so it stays comparable across [facets](../../facets.md).
24
+ - Cell value labels are on by default (`styles.values.show` turns them off).
25
+ - `segments` restyle chosen columns, rows or single cells (see [Styles and segments](../../styles-and-segments.md)).
26
+ - Hover matches one cell at a time.
@@ -0,0 +1,35 @@
1
+ # ScatterPlot
2
+
3
+ Part of [Plots](../../plots.md).
4
+
5
+ A dot per row.
6
+
7
+ <!-- example: examples/Scatter.svelte -->
8
+
9
+ ```svelte
10
+ <script lang="ts">
11
+ import { ScatterPlot } from '@fundar/data-chart-telling';
12
+ import { COUNTRIES_AT_2007 } from './datasets';
13
+ </script>
14
+
15
+ <!-- Points sized by `r`, colored by `color` and shaped by `symbol`. -->
16
+ <ScatterPlot
17
+ width={720}
18
+ height={420}
19
+ data={COUNTRIES_AT_2007}
20
+ x="gdp"
21
+ y="life"
22
+ r="population"
23
+ color="continent"
24
+ symbol="income"
25
+ />
26
+ ```
27
+
28
+ <!-- /example -->
29
+
30
+ ![A scatter plot sized, colored and shaped by channels](../../images/scatter.png)
31
+
32
+ - `r` sizes the dots (area follows the value; configure with `scales.r`). The legend gets a size section.
33
+ - `symbol` varies the dot shape by category (`scales.symbol`), `opacity` varies transparency, `color` colors by category or by a continuous ramp.
34
+ - A literal number for `r` is a fixed radius in pixels.
35
+ - `dotRadius` defaults come from `scatter.dotRadius` in the configuration.
@@ -0,0 +1,28 @@
1
+ # BoxPlot
2
+
3
+ Part of [Plots](../../plots.md).
4
+
5
+ Summarizes the values of each series per category as a box: it spans the middle half of the values (25th to 75th percentile), the line across it is the median, the whiskers reach the farthest values within 1.5 times the box's height, and dots mark the values past them. String values on `x` stand the boxes upright; on `y` they lie sideways.
6
+
7
+ <!-- example: examples/Box.svelte -->
8
+
9
+ ```svelte
10
+ <script lang="ts">
11
+ import { BoxPlot } from '@fundar/data-chart-telling';
12
+ import { HEIGHTS } from './datasets';
13
+ </script>
14
+
15
+ <!-- One box per group: quartiles, median, whiskers and outliers of each height distribution. -->
16
+ <BoxPlot width={720} height={400} data={HEIGHTS} x="group" y="height" color="group" />
17
+ ```
18
+
19
+ <!-- /example -->
20
+
21
+ ![Box plots of two height distributions](../../images/box.png)
22
+
23
+ - `grouping` (or `color`) draws one box per group and category. Groups that share categories draw their boxes on top of each other, so split them with `facet` instead, or color by the category field itself.
24
+ - Categories keep the order the data gives them; `scales.x.domain` (or `y`) orders them.
25
+ - The value axis fits the values without reaching for zero; pin `scales.y.domain` to start it at zero.
26
+ - `scales.x.paddingInner` / `paddingOuter` set how wide the boxes are; the defaults come from `box` in the [configuration](../../theming.md).
27
+ - The tooltip reads one box at a time, not every value inside it: the hovered row carries `category`, `min`, `p25`, `median`, `p75`, `max`, `count` and `outliers`.
28
+ - `segments` restyle whole categories (`areas: [{ x: { from: 'Bus', to: 'Bus' } }]`). A segment that splits one category's values draws two boxes.
@@ -0,0 +1,26 @@
1
+ # DensityPlot
2
+
3
+ Part of [Plots](../../plots.md).
4
+
5
+ Smooths the rows of each series along one axis into a kernel density estimate, the continuous pair of [HistogramPlot](histogram.md). Give `x` alone for a vertical curve or `y` alone for a horizontal one.
6
+
7
+ <!-- example: examples/Density.svelte -->
8
+
9
+ ```svelte
10
+ <script lang="ts">
11
+ import { DensityPlot } from '@fundar/data-chart-telling';
12
+ import { HEIGHTS } from './datasets';
13
+ </script>
14
+
15
+ <!-- A smoothed distribution per `grouping` value, the continuous pair of a histogram. -->
16
+ <DensityPlot width={720} height={400} data={HEIGHTS} x="height" grouping="group" />
17
+ ```
18
+
19
+ <!-- /example -->
20
+
21
+ ![Two density curves](../../images/density.png)
22
+
23
+ - `grouping` (or `color`) draws one curve per group.
24
+ - `styles={{ mark: 'line' }}` draws lines instead of filled areas; `styles.curve` sets how a curve joins its points.
25
+ - Override the estimate with a `densityX` (or `densityY`) transform: `transforms={[{ type: 'densityX', bandwidth: 2 }]}`. A transform given here is merged over the default one; see [Transforms and statistics](../../transforms-and-statistics.md) for its options.
26
+ - `segments={{ default: [{ styles: { fillOpacity: 0.3 } }] }}` restyles the areas.
@@ -0,0 +1,33 @@
1
+ # HistogramPlot
2
+
3
+ Part of [Plots](../../plots.md).
4
+
5
+ Bins the rows of each series along one axis and draws the count per bin. Give `x` alone for vertical bars or `y` alone for horizontal bars.
6
+
7
+ <!-- example: examples/Histogram.svelte -->
8
+
9
+ ```svelte
10
+ <script lang="ts">
11
+ import { HistogramPlot } from '@fundar/data-chart-telling';
12
+ import { HEIGHTS } from './datasets';
13
+ </script>
14
+
15
+ <!-- Two overlapping distributions, one per `grouping` value. -->
16
+ <HistogramPlot
17
+ width={720}
18
+ height={400}
19
+ data={HEIGHTS}
20
+ x="height"
21
+ grouping="group"
22
+ segments={{ default: [{ styles: { fillOpacity: 0.7 } }] }}
23
+ />
24
+ ```
25
+
26
+ <!-- /example -->
27
+
28
+ ![Two overlapping histograms](../../images/histogram.png)
29
+
30
+ - `grouping` (or `color`) draws one histogram per group.
31
+ - Override the default binning with a `binX` (or `binY`) transform: `transforms={[{ type: 'binX', thresholds: 20 }]}`. A transform given here is merged over the default one.
32
+ - `transforms={[{ type: 'stackY' }]}` stacks groups in each bin.
33
+ - `segments={{ default: [{ styles: { fillOpacity: 0.7 } }] }}` makes overlapping groups translucent.
@@ -0,0 +1,31 @@
1
+ # PyramidPlot
2
+
3
+ Part of [Plots](../../plots.md).
4
+
5
+ Two series mirrored around a shared zero baseline, such as a population pyramid. Categories on `y` give horizontal bars; categories on `x` give vertical ones.
6
+
7
+ <!-- example: examples/Pyramid.svelte -->
8
+
9
+ ```svelte
10
+ <script lang="ts">
11
+ import { PyramidPlot } from '@fundar/data-chart-telling';
12
+ import { POPULATION_BY_AGE_AT_2022 } from './datasets';
13
+ </script>
14
+
15
+ <!-- A population pyramid: one side per `color` value. -->
16
+ <PyramidPlot
17
+ width={720}
18
+ height={400}
19
+ data={POPULATION_BY_AGE_AT_2022}
20
+ x="share"
21
+ y="ageGroup"
22
+ color="sex"
23
+ />
24
+ ```
25
+
26
+ <!-- /example -->
27
+
28
+ ![A population pyramid](../../images/pyramid.png)
29
+
30
+ - `scales.grouping.reverse` swaps which series sits on which side.
31
+ - Hover finds the points sharing the hovered category.