@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
@@ -3,6 +3,7 @@ import type { AxisValue } from '../../layout/mapping';
3
3
  import type { Series } from '../data/common';
4
4
  import type { LineSegmentStyle } from './common';
5
5
  import type { MarkLegend } from '../../layout/legend';
6
+ import type { FacetScoped } from '../../layout/facet';
6
7
  /** A half-open interval on one axis. Both bounds are inclusive; omit either to leave that end open. */
7
8
  export type Range = {
8
9
  from?: AxisValue;
@@ -22,7 +23,8 @@ export type Area = {
22
23
  };
23
24
  /**
24
25
  * One styled rule for a plot. A data point (or cell) is styled when it falls
25
- * inside **any** of the listed `areas`. Omitting `areas` (or passing an empty
26
+ * inside **any** of the listed `areas`. With a `facet`, the rule exists only in
27
+ * the facet panels it names. Omitting `areas` (or passing an empty
26
28
  * array) makes the segment a catch-all that matches every data point - useful
27
29
  * as a baseline style. `TStyle` is the per-mark shape ({@link LineSegmentStyle},
28
30
  * {@link BarSegmentStyle}, {@link CellSegmentStyle}, …).
@@ -31,7 +33,7 @@ export type Area = {
31
33
  * priority, regardless of their position in the list. A catch-all placed first
32
34
  * therefore acts as a fallback baseline that area-specific segments override.
33
35
  */
34
- export type Segment<TStyle> = {
36
+ export type Segment<TStyle> = FacetScoped & {
35
37
  areas?: Area[];
36
38
  scales?: ChannelScalesConfig;
37
39
  styles?: TStyle;
@@ -0,0 +1,14 @@
1
+ import type { OpacityScaleConfig } from '../types/layout/scales';
2
+ /** A value of the opacity channel mapped to an opacity. */
3
+ export declare class OpacityScale {
4
+ /**
5
+ * Resolves an {@link OpacityScaleConfig} into a `value => opacity` function -
6
+ * mirrors {@link ColorRamp.resolve}'s shape, but the output is always a number in
7
+ * roughly `[0,1]` instead of a CSS color string. Callers must apply the
8
+ * result as a literal constant per mark instance (never a per-row function
9
+ * handed straight to svelteplot) - see the type's own doc comment for why.
10
+ */
11
+ static resolve(config: OpacityScaleConfig | undefined, computedDomain: [number, number] | string[] | undefined, defaultRange: [number, number]): (value: unknown) => number;
12
+ }
13
+ /** The package's public function name, over {@link OpacityScale.resolve}. */
14
+ export declare const resolveOpacityScale: typeof OpacityScale.resolve;
@@ -0,0 +1,43 @@
1
+ import { ColorRamp } from './color';
2
+ /** A value of the opacity channel mapped to an opacity. */
3
+ export class OpacityScale {
4
+ /**
5
+ * Resolves an {@link OpacityScaleConfig} into a `value => opacity` function -
6
+ * mirrors {@link ColorRamp.resolve}'s shape, but the output is always a number in
7
+ * roughly `[0,1]` instead of a CSS color string. Callers must apply the
8
+ * result as a literal constant per mark instance (never a per-row function
9
+ * handed straight to svelteplot) - see the type's own doc comment for why.
10
+ */
11
+ static resolve(config, computedDomain, defaultRange) {
12
+ const domain = config?.domain ?? computedDomain;
13
+ const range = config?.range ?? defaultRange;
14
+ const unknown = config?.unknown ?? 1;
15
+ if (!domain || domain.length === 0)
16
+ return () => unknown;
17
+ if (typeof range === 'object' && !Array.isArray(range)) {
18
+ return (v) => (v == null ? unknown : (range[String(v)] ?? unknown));
19
+ }
20
+ if (typeof domain[0] === 'string') {
21
+ const categories = domain;
22
+ const [lo, hi] = range;
23
+ return (v) => {
24
+ if (v == null)
25
+ return unknown;
26
+ const idx = categories.indexOf(String(v));
27
+ if (idx < 0)
28
+ return unknown;
29
+ return categories.length > 1 ? lo + ((hi - lo) * idx) / (categories.length - 1) : lo;
30
+ };
31
+ }
32
+ const [dLo, dHi] = domain;
33
+ const [rLo, rHi] = range;
34
+ return (v) => {
35
+ if (v == null)
36
+ return unknown;
37
+ const t = ColorRamp.normalize(Number(v), dLo, dHi);
38
+ return rLo + (rHi - rLo) * t;
39
+ };
40
+ }
41
+ }
42
+ /** The package's public function name, over {@link OpacityScale.resolve}. */
43
+ export const resolveOpacityScale = OpacityScale.resolve;
@@ -1,16 +1,4 @@
1
- import type { SymbolScaleConfig } from '../types/layout/scales';
2
1
  import type { SymbolType } from '../types/plots/constants';
3
- /**
4
- * Resolves a {@link SymbolScaleConfig} into a `value => shape` function -
5
- * always a discrete category lookup, unlike every other channel here (there's
6
- * no continuous case for a shape). Resolves to a plain shape-name string,
7
- * which svelteplot recognizes as a literal and renders as-is - safe to hand
8
- * straight to a per-row accessor, unlike `resolveOpacityScale`'s output.
9
- * `defaultRange` mirrors `resolveOpacityScale`'s own required (not defaulted)
10
- * parameter - callers pass the theme's own `cfg.symbols` rather than this
11
- * module hardcoding a second copy of the default cycle.
12
- */
13
- export declare function resolveSymbolScale(config: SymbolScaleConfig | undefined, computedDomain: string[] | undefined, defaultRange: SymbolType[]): (value: unknown) => SymbolType;
14
2
  /**
15
3
  * A symbol's SVG path, as svelteplot's `dot` mark draws it: the same
16
4
  * d3-shape symbol, sized to the area of a circle of the given radius.
@@ -1,28 +1,4 @@
1
1
  import { maybeSymbol } from 'svelteplot/helpers/symbols.js';
2
- /**
3
- * Resolves a {@link SymbolScaleConfig} into a `value => shape` function -
4
- * always a discrete category lookup, unlike every other channel here (there's
5
- * no continuous case for a shape). Resolves to a plain shape-name string,
6
- * which svelteplot recognizes as a literal and renders as-is - safe to hand
7
- * straight to a per-row accessor, unlike `resolveOpacityScale`'s output.
8
- * `defaultRange` mirrors `resolveOpacityScale`'s own required (not defaulted)
9
- * parameter - callers pass the theme's own `cfg.symbols` rather than this
10
- * module hardcoding a second copy of the default cycle.
11
- */
12
- export function resolveSymbolScale(config, computedDomain, defaultRange) {
13
- const domain = config?.domain ?? computedDomain ?? [];
14
- const range = config?.range ?? defaultRange;
15
- const unknown = config?.unknown ?? 'circle';
16
- if (typeof range === 'object' && !Array.isArray(range)) {
17
- return (v) => (v == null ? unknown : (range[String(v)] ?? unknown));
18
- }
19
- return (v) => {
20
- if (v == null || !domain.length)
21
- return unknown;
22
- const idx = domain.indexOf(String(v));
23
- return idx < 0 ? unknown : range[idx % range.length];
24
- };
25
- }
26
2
  /**
27
3
  * A symbol's SVG path, as svelteplot's `dot` mark draws it: the same
28
4
  * d3-shape symbol, sized to the area of a circle of the given radius.
@@ -0,0 +1,18 @@
1
+ import type { SymbolScaleConfig } from '../types/layout/scales';
2
+ import type { SymbolType } from '../types/plots/constants';
3
+ /** A value of the symbol channel mapped to a shape. */
4
+ export declare class SymbolScale {
5
+ /**
6
+ * Resolves a {@link SymbolScaleConfig} into a `value => shape` function -
7
+ * always a discrete category lookup, unlike every other channel here (there's
8
+ * no continuous case for a shape). Resolves to a plain shape-name string,
9
+ * which svelteplot recognizes as a literal and renders as-is - safe to hand
10
+ * straight to a per-row accessor, unlike `OpacityScale.resolve`'s output.
11
+ * `defaultRange` mirrors `OpacityScale.resolve`'s own required (not defaulted)
12
+ * parameter - callers pass the theme's own `cfg.symbols` rather than this
13
+ * module hardcoding a second copy of the default cycle.
14
+ */
15
+ static resolve(config: SymbolScaleConfig | undefined, computedDomain: string[] | undefined, defaultRange: SymbolType[]): (value: unknown) => SymbolType;
16
+ }
17
+ /** The package's public function name, over {@link SymbolScale.resolve}. */
18
+ export declare const resolveSymbolScale: typeof SymbolScale.resolve;
@@ -0,0 +1,29 @@
1
+ /** A value of the symbol channel mapped to a shape. */
2
+ export class SymbolScale {
3
+ /**
4
+ * Resolves a {@link SymbolScaleConfig} into a `value => shape` function -
5
+ * always a discrete category lookup, unlike every other channel here (there's
6
+ * no continuous case for a shape). Resolves to a plain shape-name string,
7
+ * which svelteplot recognizes as a literal and renders as-is - safe to hand
8
+ * straight to a per-row accessor, unlike `OpacityScale.resolve`'s output.
9
+ * `defaultRange` mirrors `OpacityScale.resolve`'s own required (not defaulted)
10
+ * parameter - callers pass the theme's own `cfg.symbols` rather than this
11
+ * module hardcoding a second copy of the default cycle.
12
+ */
13
+ static resolve(config, computedDomain, defaultRange) {
14
+ const domain = config?.domain ?? computedDomain ?? [];
15
+ const range = config?.range ?? defaultRange;
16
+ const unknown = config?.unknown ?? 'circle';
17
+ if (typeof range === 'object' && !Array.isArray(range)) {
18
+ return (v) => (v == null ? unknown : (range[String(v)] ?? unknown));
19
+ }
20
+ return (v) => {
21
+ if (v == null || !domain.length)
22
+ return unknown;
23
+ const idx = domain.indexOf(String(v));
24
+ return idx < 0 ? unknown : range[idx % range.length];
25
+ };
26
+ }
27
+ }
28
+ /** The package's public function name, over {@link SymbolScale.resolve}. */
29
+ export const resolveSymbolScale = SymbolScale.resolve;
@@ -0,0 +1,27 @@
1
+ import type { ColorScaleConfig } from '../../types/layout/scales';
2
+ import type { PlotStylesConfig } from '../../types/configuration/styling';
3
+ /** A value mapped to a color: a continuous ramp between colors, or a color per category. */
4
+ export declare class ColorRamp {
5
+ /** `{turbo: interpolateTurbo, blues: interpolateBlues, ...}`, built from every `interpolate*` d3-scale-chromatic export. */
6
+ static readonly NAMED: Readonly<Record<string, (t: number) => string>>;
7
+ /** Linearly maps `v` from `[min, max]` onto `[0, 1]`, clamped at both ends. */
8
+ static normalize(v: number, min: number, max: number): number;
9
+ /** A simple 2-color continuous ramp over `[min, max]`. */
10
+ static between(min: number, max: number, colorMin: string, colorMax: string): (v: number) => string;
11
+ /**
12
+ * Resolves a {@link ColorScaleConfig} into a `value => color` function - the
13
+ * one shared implementation for every level the config can appear at
14
+ * (`scales.color`, a `segments` entry, a marker's own `scales`).
15
+ * `computedDomain` is the fallback when `config.domain` is unset;
16
+ * `defaultScheme` is used when `config.scheme` is unset - the theme's own
17
+ * 2-color continuous ramp, or a discrete palette for a categorical domain
18
+ * (e.g. per-series identity colors).
19
+ */
20
+ static resolve(config: ColorScaleConfig | undefined, computedDomain: [number, number] | string[] | undefined, defaultScheme: NonNullable<ColorScaleConfig['scheme']>): (value: unknown) => string;
21
+ /**
22
+ * A numeric value as a color, through the configuration's default continuous ramp
23
+ * (a named `scheme`, else the colors `min` and `max`) unless `own` sets a scheme of its
24
+ * own. The configuration's `schemeRange` only trims the ramp it names.
25
+ */
26
+ static continuous(cfg: Pick<PlotStylesConfig, 'continuous'>, own: ColorScaleConfig | undefined, domain: [number, number]): (value: unknown) => string;
27
+ }
@@ -0,0 +1,120 @@
1
+ import { interpolateRgb, piecewise } from 'd3-interpolate';
2
+ import * as d3Chromatic from 'd3-scale-chromatic';
3
+ import { CssColor } from './CssColor';
4
+ /** A value mapped to a color: a continuous ramp between colors, or a color per category. */
5
+ export class ColorRamp {
6
+ /** `{turbo: interpolateTurbo, blues: interpolateBlues, ...}`, built from every `interpolate*` d3-scale-chromatic export. */
7
+ static NAMED = Object.fromEntries(Object.entries(d3Chromatic)
8
+ .filter((entry) => entry[0].startsWith('interpolate'))
9
+ .map(([name, fn]) => [name.slice('interpolate'.length).toLowerCase(), fn]));
10
+ /** Linearly maps `v` from `[min, max]` onto `[0, 1]`, clamped at both ends. */
11
+ static normalize(v, min, max) {
12
+ if (v == null)
13
+ return 0;
14
+ const denom = max - min || 1;
15
+ return Math.max(0, Math.min(1, (v - min) / denom));
16
+ }
17
+ /** A simple 2-color continuous ramp over `[min, max]`. */
18
+ static between(min, max, colorMin, colorMax) {
19
+ let interpolator;
20
+ try {
21
+ interpolator = interpolateRgb(CssColor.resolve(colorMin), CssColor.resolve(colorMax));
22
+ }
23
+ catch {
24
+ return () => '#ccc';
25
+ }
26
+ return (v) => {
27
+ if (v == null)
28
+ return '#ccc';
29
+ return interpolator(ColorRamp.normalize(v, min, max));
30
+ };
31
+ }
32
+ /**
33
+ * Resolves a {@link ColorScaleConfig} into a `value => color` function - the
34
+ * one shared implementation for every level the config can appear at
35
+ * (`scales.color`, a `segments` entry, a marker's own `scales`).
36
+ * `computedDomain` is the fallback when `config.domain` is unset;
37
+ * `defaultScheme` is used when `config.scheme` is unset - the theme's own
38
+ * 2-color continuous ramp, or a discrete palette for a categorical domain
39
+ * (e.g. per-series identity colors).
40
+ */
41
+ static resolve(config, computedDomain, defaultScheme) {
42
+ const domain = config?.domain ?? computedDomain;
43
+ const scheme = config?.scheme ?? defaultScheme;
44
+ const unknown = config?.unknown ?? '#ccc';
45
+ if (!domain || domain.length === 0)
46
+ return () => unknown;
47
+ // A category → color map always resolves by direct lookup, regardless of domain shape.
48
+ if (typeof scheme === 'object' && !Array.isArray(scheme)) {
49
+ return (v) => (v == null ? unknown : (scheme[String(v)] ?? unknown));
50
+ }
51
+ // A named d3-scale-chromatic ramp (e.g. 'turbo') resolves straight to its own interpolator.
52
+ const namedInterpolator = typeof scheme === 'string' ? ColorRamp.NAMED[scheme.toLowerCase()] : undefined;
53
+ if (typeof scheme === 'string' && !namedInterpolator)
54
+ return () => unknown;
55
+ const [from, to] = config?.schemeRange ?? [0, 1];
56
+ const named = namedInterpolator && ((t) => namedInterpolator(from + t * (to - from)));
57
+ const resolvedScheme = namedInterpolator
58
+ ? undefined
59
+ : scheme.map(CssColor.resolve);
60
+ if (resolvedScheme && resolvedScheme.length === 0)
61
+ return () => unknown;
62
+ if (resolvedScheme && resolvedScheme.length === 1) {
63
+ const only = resolvedScheme[0];
64
+ return () => only;
65
+ }
66
+ // Categorical domain (explicit category list): sample the ramp evenly, one stop per category.
67
+ if (typeof domain[0] === 'string') {
68
+ const categories = domain;
69
+ const swatches = resolvedScheme ??
70
+ categories.map((_, i) => named(categories.length > 1 ? i / (categories.length - 1) : 0));
71
+ return (v) => {
72
+ if (v == null)
73
+ return unknown;
74
+ const idx = categories.indexOf(String(v));
75
+ return idx < 0 ? unknown : swatches[idx % swatches.length];
76
+ };
77
+ }
78
+ // Continuous domain: interpolate smoothly across every scheme stop (or the named ramp directly).
79
+ const [lo, hi] = domain;
80
+ let interpolator;
81
+ if (namedInterpolator) {
82
+ interpolator = named;
83
+ }
84
+ else {
85
+ try {
86
+ interpolator = piecewise(interpolateRgb, resolvedScheme);
87
+ }
88
+ catch {
89
+ return () => unknown;
90
+ }
91
+ }
92
+ const pivot = config?.pivot;
93
+ const stopCount = resolvedScheme?.length ?? Infinity;
94
+ return (v) => {
95
+ if (v == null)
96
+ return unknown;
97
+ const n = Number(v);
98
+ if (Number.isNaN(n))
99
+ return unknown;
100
+ const t = pivot != null && stopCount >= 3
101
+ ? n <= pivot
102
+ ? 0.5 * ColorRamp.normalize(n, lo, pivot)
103
+ : 0.5 + 0.5 * ColorRamp.normalize(n, pivot, hi)
104
+ : ColorRamp.normalize(n, lo, hi);
105
+ return interpolator(t);
106
+ };
107
+ }
108
+ /**
109
+ * A numeric value as a color, through the configuration's default continuous ramp
110
+ * (a named `scheme`, else the colors `min` and `max`) unless `own` sets a scheme of its
111
+ * own. The configuration's `schemeRange` only trims the ramp it names.
112
+ */
113
+ static continuous(cfg, own, domain) {
114
+ const { scheme, schemeRange, min, max } = cfg.continuous;
115
+ const config = own?.scheme === undefined && scheme && schemeRange
116
+ ? { ...own, schemeRange: own?.schemeRange ?? schemeRange }
117
+ : own;
118
+ return ColorRamp.resolve({ ...config, domain }, domain, scheme ?? [min, max]);
119
+ }
120
+ }
@@ -0,0 +1,19 @@
1
+ type Rgb = [number, number, number];
2
+ /** A CSS color string: read into its red, green and blue, and judged against another by WCAG contrast. */
3
+ export declare class CssColor {
4
+ #private;
5
+ /** Resolves a `var(--x)` reference to its computed value; any other CSS color string passes through unchanged. */
6
+ static resolve(color: string): string;
7
+ /** Parses any CSS color syntax (hex, rgb(), oklch(), named colors, hsl(), ...) into an `[r, g, b]` (0-255) triple, or `null` if it can't be resolved. */
8
+ static parse(color: string): Rgb | null;
9
+ /** WCAG contrast ratio between two colors, from 1 (no contrast) to 21 (black on white). */
10
+ static contrastRatio(colorA: string, colorB: string): number;
11
+ /**
12
+ * The `candidates` entry with the highest WCAG contrast ratio against
13
+ * `background`. Defaults to plain white/black; pass a grayscale or other
14
+ * palette to widen the choice. Falls back to the first candidate when
15
+ * `background` can't be parsed.
16
+ */
17
+ static contrastText(background: string, candidates?: string[]): string;
18
+ }
19
+ export {};
@@ -0,0 +1,114 @@
1
+ import { isBrowser } from '../../stores/device';
2
+ /** A CSS color string: read into its red, green and blue, and judged against another by WCAG contrast. */
3
+ export class CssColor {
4
+ /** Resolves a `var(--x)` reference to its computed value; any other CSS color string passes through unchanged. */
5
+ static resolve(color) {
6
+ if (!isBrowser)
7
+ return color;
8
+ if (!color.startsWith('var('))
9
+ return color;
10
+ const varName = color.slice(4, -1).trim();
11
+ const value = getComputedStyle(document.documentElement).getPropertyValue(varName).trim();
12
+ return value || color;
13
+ }
14
+ /** Parses any CSS color syntax (hex, rgb(), oklch(), named colors, hsl(), ...) into an `[r, g, b]` (0-255) triple, or `null` if it can't be resolved. */
15
+ static parse(color) {
16
+ const hex = /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(color.trim());
17
+ if (hex) {
18
+ const digits = hex[1].length === 3
19
+ ? hex[1]
20
+ .split('')
21
+ .map((c) => c + c)
22
+ .join('')
23
+ : hex[1];
24
+ const num = parseInt(digits, 16);
25
+ return [(num >> 16) & 255, (num >> 8) & 255, num & 255];
26
+ }
27
+ const rgb = /^rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)/i.exec(color);
28
+ if (rgb)
29
+ return [Number(rgb[1]), Number(rgb[2]), Number(rgb[3])];
30
+ const oklch = CssColor.#parseOklch(color);
31
+ if (oklch)
32
+ return oklch;
33
+ // Named colors, hsl(), and any other CSS color syntax: resolved to
34
+ // `rgb(...)` via the browser's computed style, then reparsed.
35
+ if (!isBrowser)
36
+ return null;
37
+ const el = document.createElement('div');
38
+ el.style.color = color;
39
+ document.body.appendChild(el);
40
+ const computed = getComputedStyle(el).color;
41
+ document.body.removeChild(el);
42
+ if (!computed || computed === color)
43
+ return null;
44
+ return CssColor.parse(computed);
45
+ }
46
+ /** WCAG contrast ratio between two colors, from 1 (no contrast) to 21 (black on white). */
47
+ static contrastRatio(colorA, colorB) {
48
+ const a = CssColor.parse(CssColor.resolve(colorA));
49
+ const b = CssColor.parse(CssColor.resolve(colorB));
50
+ if (!a || !b)
51
+ return 1;
52
+ const lA = CssColor.#luminance(a);
53
+ const lB = CssColor.#luminance(b);
54
+ return (Math.max(lA, lB) + 0.05) / (Math.min(lA, lB) + 0.05);
55
+ }
56
+ /**
57
+ * The `candidates` entry with the highest WCAG contrast ratio against
58
+ * `background`. Defaults to plain white/black; pass a grayscale or other
59
+ * palette to widen the choice. Falls back to the first candidate when
60
+ * `background` can't be parsed.
61
+ */
62
+ static contrastText(background, candidates = ['#ffffff', '#000000']) {
63
+ if (candidates.length === 0)
64
+ return '#000000';
65
+ let best = candidates[0];
66
+ let bestRatio = -Infinity;
67
+ for (const candidate of candidates) {
68
+ const ratio = CssColor.contrastRatio(background, candidate);
69
+ if (ratio > bestRatio) {
70
+ bestRatio = ratio;
71
+ best = candidate;
72
+ }
73
+ }
74
+ return best;
75
+ }
76
+ static #luminance([r, g, b]) {
77
+ const [rs, gs, bs] = [r, g, b].map((c) => {
78
+ const s = c / 255;
79
+ return s <= 0.03928 ? s / 12.92 : Math.pow((s + 0.055) / 1.055, 2.4);
80
+ });
81
+ return 0.2126 * rs + 0.7152 * gs + 0.0722 * bs;
82
+ }
83
+ static #linearToSrgb8(c) {
84
+ const s = c <= 0.0031308 ? 12.92 * c : 1.055 * Math.pow(c, 1 / 2.4) - 0.055;
85
+ return Math.max(0, Math.min(1, s)) * 255;
86
+ }
87
+ /**
88
+ * Parses `oklch(L C H)` directly instead of round-tripping through the
89
+ * browser's computed style: Chromium/Firefox serialize computed oklch()
90
+ * values back as oklch() (not rgb()), so the generic browser-fallback in
91
+ * {@link CssColor.parse} sees an unchanged string on the second pass and its
92
+ * infinite-loop guard mistakes that for a parse failure.
93
+ */
94
+ static #parseOklch(color) {
95
+ const match = /^oklch\(\s*([\d.]+)(%)?\s+([\d.]+)\s+([\d.]+)/i.exec(color.trim());
96
+ if (!match)
97
+ return null;
98
+ const L = match[2] ? Number(match[1]) / 100 : Number(match[1]);
99
+ const C = Number(match[3]);
100
+ const H = (Number(match[4]) * Math.PI) / 180;
101
+ const a = C * Math.cos(H);
102
+ const b = C * Math.sin(H);
103
+ const l_ = L + 0.3963377774 * a + 0.2158037573 * b;
104
+ const m_ = L - 0.1055613458 * a - 0.0638541728 * b;
105
+ const s_ = L - 0.0894841775 * a - 1.291485548 * b;
106
+ const l = l_ ** 3;
107
+ const m = m_ ** 3;
108
+ const s = s_ ** 3;
109
+ const r = 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s;
110
+ const g = -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s;
111
+ const bl = -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s;
112
+ return [CssColor.#linearToSrgb8(r), CssColor.#linearToSrgb8(g), CssColor.#linearToSrgb8(bl)];
113
+ }
114
+ }
@@ -0,0 +1,21 @@
1
+ import type { PaletteInput } from '../../types/configuration/styling';
2
+ /** The categorical palette of a configuration, as a list of colors. */
3
+ export declare class Palette {
4
+ /** How many colors a palette named after a continuous ramp takes, unless it says. */
5
+ static readonly COUNT = 8;
6
+ /** The color at `index` of `palette`, cycling when the index runs past its end: the default color for an unstyled series. */
7
+ static at(index: number, palette: string[]): string;
8
+ /**
9
+ * `input` as a list of colors: a list as it is; a name as the d3-scale-chromatic color list of
10
+ * that name (`'dark2'`, `'tableau10'`...) or, for a ramp (`'viridis'`, `'blues'`...), colors spread
11
+ * evenly along it; `{ scheme, count, schemeRange }` the same with its own count and part of the ramp.
12
+ * `undefined` when the name is not one of those.
13
+ */
14
+ static resolve(input: PaletteInput): string[] | undefined;
15
+ /** `patch` with its `palette` resolved to a list of colors, or left out (with a warning) when it names no scheme. */
16
+ static resolveIn<T extends {
17
+ palette?: PaletteInput;
18
+ } & Record<string, unknown>>(patch: T): Omit<T, 'palette'> & {
19
+ palette?: string[];
20
+ };
21
+ }
@@ -0,0 +1,52 @@
1
+ import * as d3Chromatic from 'd3-scale-chromatic';
2
+ import { ColorRamp } from './ColorRamp';
3
+ /** `{dark2: [...], tableau10: [...], ...}`, from every flat `scheme*` color list d3-scale-chromatic exports. */
4
+ const DISCRETE_SCHEMES = Object.fromEntries(Object.entries(d3Chromatic)
5
+ .filter((entry) => entry[0].startsWith('scheme') &&
6
+ Array.isArray(entry[1]) &&
7
+ entry[1].every((color) => typeof color === 'string'))
8
+ .map(([name, colors]) => [name.slice('scheme'.length).toLowerCase(), colors]));
9
+ /** The categorical palette of a configuration, as a list of colors. */
10
+ export class Palette {
11
+ /** How many colors a palette named after a continuous ramp takes, unless it says. */
12
+ static COUNT = 8;
13
+ /** The color at `index` of `palette`, cycling when the index runs past its end: the default color for an unstyled series. */
14
+ static at(index, palette) {
15
+ if (palette.length === 0)
16
+ return 'currentColor';
17
+ return palette[index % palette.length];
18
+ }
19
+ /**
20
+ * `input` as a list of colors: a list as it is; a name as the d3-scale-chromatic color list of
21
+ * that name (`'dark2'`, `'tableau10'`...) or, for a ramp (`'viridis'`, `'blues'`...), colors spread
22
+ * evenly along it; `{ scheme, count, schemeRange }` the same with its own count and part of the ramp.
23
+ * `undefined` when the name is not one of those.
24
+ */
25
+ static resolve(input) {
26
+ if (Array.isArray(input))
27
+ return [...input];
28
+ const { scheme, count, schemeRange } = typeof input === 'string' ? { scheme: input } : input;
29
+ const name = scheme.toLowerCase();
30
+ const list = DISCRETE_SCHEMES[name];
31
+ if (list)
32
+ return count === undefined ? [...list] : list.slice(0, count);
33
+ const ramp = ColorRamp.NAMED[name];
34
+ if (!ramp)
35
+ return undefined;
36
+ const [from, to] = schemeRange ?? [0, 1];
37
+ const total = Math.max(1, count ?? Palette.COUNT);
38
+ return Array.from({ length: total }, (_, index) => ramp(from + (total > 1 ? index / (total - 1) : 0.5) * (to - from)));
39
+ }
40
+ /** `patch` with its `palette` resolved to a list of colors, or left out (with a warning) when it names no scheme. */
41
+ static resolveIn(patch) {
42
+ const { palette, ...rest } = patch;
43
+ if (palette === undefined)
44
+ return rest;
45
+ const colors = Palette.resolve(palette);
46
+ if (!colors) {
47
+ console.warn(`setConfiguration: palette ${JSON.stringify(palette)} is not a list of colors or a d3-scale-chromatic scheme name; the palette is left as it was.`);
48
+ return rest;
49
+ }
50
+ return { ...rest, palette: colors };
51
+ }
52
+ }
@@ -1,3 +1,11 @@
1
- export { resolveCssColor } from './cssColor';
2
- export { contrastRatio, contrastTextColor } from './contrast';
3
- export { normalize, paletteColor, makeColorScale, resolveColorScale } from './ramp';
1
+ export { CssColor } from './CssColor';
2
+ export { ColorRamp } from './ColorRamp';
3
+ export { Palette } from './Palette';
4
+ import { ColorRamp } from './ColorRamp';
5
+ export declare const resolveCssColor: (color: string) => string;
6
+ export declare const contrastRatio: (colorA: string, colorB: string) => number;
7
+ export declare const contrastTextColor: (background: string, candidates?: string[]) => string;
8
+ export declare const normalize: (v: number, min: number, max: number) => number;
9
+ export declare const makeColorScale: (min: number, max: number, colorMin: string, colorMax: string) => (v: number) => string;
10
+ export declare const resolveColorScale: typeof ColorRamp.resolve;
11
+ export declare const paletteColor: (index: number, palette: string[]) => string;
@@ -1,3 +1,14 @@
1
- export { resolveCssColor } from './cssColor';
2
- export { contrastRatio, contrastTextColor } from './contrast';
3
- export { normalize, paletteColor, makeColorScale, resolveColorScale } from './ramp';
1
+ export { CssColor } from './CssColor';
2
+ export { ColorRamp } from './ColorRamp';
3
+ export { Palette } from './Palette';
4
+ import { CssColor } from './CssColor';
5
+ import { ColorRamp } from './ColorRamp';
6
+ import { Palette } from './Palette';
7
+ // The package's public function names, over the classes above.
8
+ export const resolveCssColor = (color) => CssColor.resolve(color);
9
+ export const contrastRatio = (colorA, colorB) => CssColor.contrastRatio(colorA, colorB);
10
+ export const contrastTextColor = (background, candidates) => CssColor.contrastText(background, candidates);
11
+ export const normalize = (v, min, max) => ColorRamp.normalize(v, min, max);
12
+ export const makeColorScale = (min, max, colorMin, colorMax) => ColorRamp.between(min, max, colorMin, colorMax);
13
+ export const resolveColorScale = ColorRamp.resolve;
14
+ export const paletteColor = (index, palette) => Palette.at(index, palette);
@@ -1,4 +1,4 @@
1
- import { resolveAccessor } from '../plots/utils/accessors';
1
+ import { resolveAccessor } from './accessors';
2
2
  /**
3
3
  * Splits rows into ordered groups keyed by the stringified accessor value.
4
4
  * Insertion order of first appearance is preserved, which keeps colours stable
@@ -127,7 +127,7 @@ The public readers of that state are `useFigure()` and `usePlot()` ([Reading plo
127
127
  1. Define its props and state types under `types/plots/<kind>/`.
128
128
  2. Write `plots/<kind>/defaults.ts`: a builder returning the options of each phase it customises (`data`, `mapping`, `scales`, `styles`, `markers`, `hover`, `timeline`, ...).
129
129
  3. Write `plots/<kind>/Plot.svelte`: split chrome, `timeline`, `facet` and core props and render the shared `Plot` with the builder.
130
- 4. Export it from `src/lib/index.ts`, add stories under `stories/plots/<kind>/`, tests under `tests/unit/plots/<kind>/`, and a section in [Plots](plots.md).
130
+ 4. Export it from `src/lib/index.ts`, add stories under `stories/plots/<kind>/`, tests under `tests/unit/plots/<kind>/`, and a page in `docs/plots/` with a row in the [Plots](plots.md) table.
131
131
 
132
132
  ## Conventions
133
133
 
package/docs/chrome.md CHANGED
@@ -7,7 +7,7 @@ The chrome is everything a figure draws around its plot: title, subtitle, legend
7
7
  ```svelte
8
8
  <script lang="ts">
9
9
  import { LinePlot } from '@fundar/data-chart-telling';
10
- import { PRICES } from './data';
10
+ import { PRICES } from './datasets';
11
11
  </script>
12
12
 
13
13
  <!-- A plot carries its own chrome: title, subtitle, legend and caption. -->
@@ -70,7 +70,7 @@ A `header` takes the place of `title` and `subtitle`, and a `footer` the place o
70
70
  ```svelte
71
71
  <script lang="ts">
72
72
  import { LinePlot } from '@fundar/data-chart-telling';
73
- import { PRICES } from './data';
73
+ import { PRICES } from './datasets';
74
74
  </script>
75
75
 
76
76
  <!-- `order` places the chrome blocks; `divider` draws a rule between them. -->
package/docs/composer.md CHANGED
@@ -7,7 +7,7 @@
7
7
  ```svelte
8
8
  <script lang="ts">
9
9
  import { PlotComposer, LinePlot, BarPlot, ScatterPlot } from '@fundar/data-chart-telling';
10
- import { REGION_VALUES, PROVINCE_VALUES, COUNTRIES } from './data';
10
+ import { REGION_VALUES, PROVINCE_VALUES, COUNTRIES_AT_2007 } from './datasets';
11
11
  </script>
12
12
 
13
13
  <!-- Several plots in one figure, placed on named areas of a grid. -->
@@ -26,7 +26,7 @@
26
26
  x="province"
27
27
  y="value"
28
28
  />
29
- <ScatterPlot area="c" data={COUNTRIES} x="gdp" y="life" />
29
+ <ScatterPlot area="c" data={COUNTRIES_AT_2007} x="gdp" y="life" />
30
30
  </PlotComposer>
31
31
  ```
32
32
 
package/docs/concepts.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Plots and figures
4
4
 
5
- A **plot** is one graph: axes and marks. Every plot is a component named after what it draws - `LinePlot`, `AreaPlot`, `BarPlot`, `HistogramPlot`, `BoxPlot`, `HeatmapPlot`, `PyramidPlot`, `ScatterPlot`, `GeoPlot` (see [Plots](plots.md)).
5
+ A **plot** is one graph: axes and marks. Every plot is a component named after what it draws, such as `LinePlot` or `BarPlot` (see [Plots](plots.md) for all of them).
6
6
 
7
7
  A plot is drawn inside a **figure**: the box that holds the plot together with its [chrome](chrome.md) (title, subtitle, legend, timeline, caption). Every plot component is a figure, so a plot with a `title` and a `legend` is still one component. A [`PlotComposer`](composer.md) is a figure that holds several plots.
8
8