@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
@@ -0,0 +1,45 @@
1
+ <script lang="ts" generics="TData extends Record<string, unknown>">
2
+ import Plot from '../../../layout/plot/Plot.svelte';
3
+ import { buildSparklineDefaults } from './defaults';
4
+ import type {
5
+ SparklinePlotProps,
6
+ SparklinePlotCoreProps
7
+ } from '../../../types/plots/evolution/sparkline/props';
8
+
9
+ /**
10
+ * A sparkline: a small line plot with no axes or legend, a dot on the last point of each series and its value beside it. Draws from pre-built `series` or flat `data` rows.
11
+ * Optional chrome (`title`, `subtitle`, `caption`, `header`, `footer`,
12
+ * `legend`) frames it, though none is there by default; `timeline` and `facet` slice its `data` rows.
13
+ * `margins` is bindable: it reports the margin the plot settled on.
14
+ */
15
+ let {
16
+ title,
17
+ subtitle,
18
+ caption,
19
+ header,
20
+ footer,
21
+ legend = false,
22
+ order,
23
+ timeline,
24
+ facet,
25
+ tooltip,
26
+ margins = $bindable({ top: 6, bottom: 6, left: 4 }),
27
+ ...core
28
+ }: SparklinePlotProps<TData> = $props();
29
+ </script>
30
+
31
+ <Plot
32
+ core={core as SparklinePlotCoreProps<TData>}
33
+ defaults={buildSparklineDefaults}
34
+ bind:margins
35
+ {title}
36
+ {subtitle}
37
+ {caption}
38
+ {header}
39
+ {footer}
40
+ {legend}
41
+ {order}
42
+ {timeline}
43
+ {facet}
44
+ {tooltip}
45
+ />
@@ -0,0 +1,26 @@
1
+ import Plot from '../../../layout/plot/Plot.svelte';
2
+ import type { SparklinePlotProps } from '../../../types/plots/evolution/sparkline/props';
3
+ declare function $$render<TData extends Record<string, unknown>>(): {
4
+ props: SparklinePlotProps<TData>;
5
+ exports: {};
6
+ bindings: "margins";
7
+ slots: {};
8
+ events: {};
9
+ };
10
+ declare class __sveltets_Render<TData extends Record<string, unknown>> {
11
+ props(): ReturnType<typeof $$render<TData>>['props'];
12
+ events(): ReturnType<typeof $$render<TData>>['events'];
13
+ slots(): ReturnType<typeof $$render<TData>>['slots'];
14
+ bindings(): "margins";
15
+ exports(): {};
16
+ }
17
+ interface $$IsomorphicComponent {
18
+ new <TData extends Record<string, unknown>>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TData>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TData>['props']>, ReturnType<__sveltets_Render<TData>['events']>, ReturnType<__sveltets_Render<TData>['slots']>> & {
19
+ $$bindings?: ReturnType<__sveltets_Render<TData>['bindings']>;
20
+ } & ReturnType<__sveltets_Render<TData>['exports']>;
21
+ <TData extends Record<string, unknown>>(internal: unknown, props: ReturnType<__sveltets_Render<TData>['props']> & {}): ReturnType<__sveltets_Render<TData>['exports']>;
22
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
23
+ }
24
+ declare const Plot: $$IsomorphicComponent;
25
+ type Plot<TData extends Record<string, unknown>> = InstanceType<typeof Plot<TData>>;
26
+ export default Plot;
@@ -0,0 +1,7 @@
1
+ import type { AxisPlotDefaults } from '../../../types/phases';
2
+ import type { SparklinePlotState, SparklinePlotCtx } from '../../../types/plots/evolution/sparkline/state';
3
+ /**
4
+ * SparklinePlot on the shared pipeline: a LinePlot with its axes left out, a
5
+ * thin line, and a dot and value on the last point of each series.
6
+ */
7
+ export declare function buildSparklineDefaults<TData extends Record<string, unknown>>(): AxisPlotDefaults<SparklinePlotState<TData>, SparklinePlotCtx>;
@@ -0,0 +1,23 @@
1
+ import { buildMarks } from './markers';
2
+ import { ValueLabels } from '../../../layout/styles/ValueLabels';
3
+ import { buildLineDefaults } from '../line/defaults';
4
+ /**
5
+ * SparklinePlot on the shared pipeline: a LinePlot with its axes left out, a
6
+ * thin line, and a dot and value on the last point of each series.
7
+ */
8
+ export function buildSparklineDefaults() {
9
+ const line = buildLineDefaults();
10
+ return {
11
+ ...line,
12
+ transforms: { labels: { select: 'last', skip: ValueLabels.skipGaps, show: true } },
13
+ scales: { defaults: () => ({ x: { axisDisplay: 'none' }, y: { axisDisplay: 'none' } }) },
14
+ styles: {
15
+ values: {
16
+ ...line.styles?.values,
17
+ show: true,
18
+ format: (value) => `${value}`
19
+ }
20
+ },
21
+ markers: { marks: buildMarks, valueLabels: line.markers.valueLabels }
22
+ };
23
+ }
@@ -0,0 +1,7 @@
1
+ import type { AxisBasedMarkersConfig } from '../../../types/markers/common';
2
+ import type { SparklinePlotState, SparklinePlotCtx } from '../../../types/plots/evolution/sparkline/state';
3
+ /**
4
+ * SparklinePlot's "markers" phase: each series' line, thin, and a dot on its
5
+ * last point with a value.
6
+ */
7
+ export declare function buildMarks<TData extends Record<string, unknown>>(state: SparklinePlotState<TData>, ctx: SparklinePlotCtx): AxisBasedMarkersConfig[];
@@ -0,0 +1,56 @@
1
+ import { getConfiguration } from '../../../configuration/config.svelte';
2
+ import { buildLineMarkers } from '../line/markers';
3
+ import { resolveAccessor } from '../../../utils/accessors';
4
+ import { isGapValue } from '../../utils/gaps';
5
+ /**
6
+ * SparklinePlot's "markers" phase: each series' line, thin, and a dot on its
7
+ * last point with a value.
8
+ */
9
+ export function buildMarks(state, ctx) {
10
+ const { sparkline } = getConfiguration();
11
+ const groups = state.processedGroups ?? [];
12
+ const disabledDotsFor = (name) => ctx.interaction?.dotsFor(name);
13
+ const lines = buildLineMarkers({
14
+ groupedSeries: groups.map((group) => ({
15
+ ...group,
16
+ visualSegments: group.visualSegments.map((segment) => ({
17
+ ...segment,
18
+ styles: {
19
+ ...segment.styles,
20
+ stroke: { strokeWidth: sparkline.strokeWidth, ...segment.styles.stroke }
21
+ }
22
+ }))
23
+ })),
24
+ colorFor: state.colorForSeries,
25
+ disabledStrokeFor: (name) => ctx.interaction?.strokeFor(name),
26
+ disabledDotsFor,
27
+ curve: state.styles?.curve
28
+ });
29
+ const dots = groups.flatMap((group) => {
30
+ const { series } = group;
31
+ const value = resolveAccessor(series.y);
32
+ const last = [...series.data].reverse().find((row) => !isGapValue(value(row)));
33
+ if (last === undefined)
34
+ return [];
35
+ // The dot takes the color of the stretch it ends.
36
+ const color = group.visualSegments.at(-1)?.styles.stroke?.stroke ?? state.colorForSeries(series.name);
37
+ const disabled = disabledDotsFor(series.name);
38
+ return [
39
+ {
40
+ type: 'dot',
41
+ data: [last],
42
+ x: series.x,
43
+ y: series.y,
44
+ styles: {
45
+ dotRadius: sparkline.dotRadius,
46
+ dotFill: color,
47
+ dotStroke: color,
48
+ dotStrokeWidth: 1,
49
+ dotFillOpacity: disabled?.dotFillOpacity ?? 1,
50
+ dotStrokeOpacity: disabled?.dotStrokeOpacity ?? 1
51
+ }
52
+ }
53
+ ];
54
+ });
55
+ return [...lines, ...dots];
56
+ }
@@ -1,13 +1,13 @@
1
1
  <script lang="ts" generics="TProps extends Record<string, unknown>">
2
- import { createGeoFeatures } from './features.svelte';
3
- import { getConfiguration } from '../../configuration/config.svelte';
4
- import { LegendState } from '../../layout/legend/LegendState.svelte';
5
- import { ChannelName } from '../utils/ChannelName';
6
- import { Margins } from '../../layout/margins/Margins';
7
- import BasePlotLayout from '../../layout/base/BasePlotLayout.svelte';
8
- import type { GeoPlotCoreProps } from '../../types/plots/geo/props';
9
- import type { CoordinatesConfig } from '../../types/layout/coordinates';
10
- import type { GeoPlotState, GeoPlotCtx } from '../../types/plots/geo/state';
2
+ import { GeoFeatures } from './GeoFeatures.svelte';
3
+ import { getConfiguration } from '../../../configuration/config.svelte';
4
+ import { LegendState } from '../../../layout/legend/LegendState.svelte';
5
+ import { ChannelName } from '../../utils/ChannelName';
6
+ import { Margins } from '../../../layout/margins/Margins';
7
+ import BasePlotLayout from '../../../layout/base/BasePlotLayout.svelte';
8
+ import type { GeoPlotCoreProps } from '../../../types/plots/map/geo/props';
9
+ import type { CoordinatesConfig } from '../../../types/layout/coordinates';
10
+ import type { GeoPlotState, GeoPlotCtx } from '../../../types/plots/map/geo/state';
11
11
 
12
12
  /**
13
13
  * A map from GeoJSON or TopoJSON. `segments` styles features by id,
@@ -39,7 +39,7 @@
39
39
  const cfg = $derived(getConfiguration());
40
40
 
41
41
  // ── Resolve data: GeoJSON is synchronous, TopoJSON is converted async ────
42
- const resolved = createGeoFeatures<TProps>(
42
+ const resolved = new GeoFeatures<TProps>(
43
43
  () => data,
44
44
  () => object
45
45
  );
@@ -134,6 +134,7 @@
134
134
  opacity: { source: ChannelName.of(opacity, 'opacity') }
135
135
  },
136
136
  colorDomain: plotState.colorDomain,
137
+ colorRamps: plotState.colorRamps,
137
138
  opacityDomain: plotState.opacityDomain,
138
139
  styles: resolvedStyles,
139
140
  marginEstimate: Margins.GEO_ESTIMATE
@@ -1,4 +1,4 @@
1
- import type { GeoPlotCoreProps } from '../../types/plots/geo/props';
1
+ import type { GeoPlotCoreProps } from '../../../types/plots/map/geo/props';
2
2
  declare function $$render<TProps extends Record<string, unknown>>(): {
3
3
  props: GeoPlotCoreProps<TProps>;
4
4
  exports: {};
@@ -0,0 +1,9 @@
1
+ import type { GeoFeature, GeoJsonInput, Topology } from '../../../types/plots/data/geo';
2
+ /** A GeoPlot's `data` as a feature list: GeoJSON as is, a TopoJSON `Topology` converted under `object`. Create it while a component initializes. */
3
+ export declare class GeoFeatures<TProps extends Record<string, unknown>> {
4
+ #private;
5
+ constructor(getData: () => GeoJsonInput<TProps> | Topology, getObject: () => string | undefined);
6
+ get features(): GeoFeature<TProps>[];
7
+ /** The default `featureId`: `feature.id`, else `properties.id`, else `properties.name`. */
8
+ static defaultId<TProps extends Record<string, unknown>>(feature: GeoFeature<TProps>): string;
9
+ }
@@ -0,0 +1,55 @@
1
+ import { isTopology, topologyToGeoJson } from '../../utils/topojson';
2
+ /** A GeoPlot's `data` as a feature list: GeoJSON as is, a TopoJSON `Topology` converted under `object`. Create it while a component initializes. */
3
+ export class GeoFeatures {
4
+ #getData;
5
+ #getObject;
6
+ #converted = $state(null);
7
+ #list = $derived.by(() => {
8
+ const data = this.#getData();
9
+ if (isTopology(data))
10
+ return this.#converted ?? [];
11
+ if (Array.isArray(data))
12
+ return data;
13
+ return data.features;
14
+ });
15
+ constructor(getData, getObject) {
16
+ this.#getData = getData;
17
+ this.#getObject = getObject;
18
+ $effect(() => this.#convert());
19
+ }
20
+ get features() {
21
+ return this.#list;
22
+ }
23
+ /** The default `featureId`: `feature.id`, else `properties.id`, else `properties.name`. */
24
+ static defaultId(feature) {
25
+ const props = feature.properties;
26
+ return String(feature.id ?? props?.id ?? props?.name ?? '');
27
+ }
28
+ /** Converts a TopoJSON `data` into features once, dropping the result if `data` changes meanwhile. */
29
+ #convert() {
30
+ const data = this.#getData();
31
+ const object = this.#getObject();
32
+ if (!isTopology(data))
33
+ return;
34
+ if (!object) {
35
+ console.warn('GeoPlot: `data` is a TopoJSON Topology but no `object` key was given - nothing will render.');
36
+ this.#converted = [];
37
+ return;
38
+ }
39
+ let cancelled = false;
40
+ topologyToGeoJson(data, object)
41
+ .then((features) => {
42
+ if (!cancelled)
43
+ this.#converted = features;
44
+ })
45
+ .catch((error) => {
46
+ if (!cancelled) {
47
+ console.warn(error instanceof Error ? error.message : String(error));
48
+ this.#converted = [];
49
+ }
50
+ });
51
+ return () => {
52
+ cancelled = true;
53
+ };
54
+ }
55
+ }
@@ -0,0 +1,27 @@
1
+ type LonLat = [number, number];
2
+ /** Operations on GeoJSON geometries: their centroids, bounds, disjoint parts and great-circle arcs. */
3
+ export declare class GeoGeometry {
4
+ #private;
5
+ /** Bounding-box center of a geometry's coordinates: a cheap point for a label, not an area centroid. */
6
+ static centroid(geometry: GeoJSON.Geometry): LonLat;
7
+ /** `[minLon, minLat, maxLon, maxLat]` of a geometry, or `null` when it has no coordinates. */
8
+ static lonLatBounds(geometry: GeoJSON.Geometry): [number, number, number, number] | null;
9
+ /** A multi-part geometry as its disjoint parts, one `Polygon` or `LineString` each; any other geometry as itself. */
10
+ static parts(geometry: GeoJSON.Geometry): GeoJSON.Geometry[];
11
+ /** One centroid per disjoint part, so a feature whose parts lie far apart matches a hover over any of them. */
12
+ static partCentroids(geometry: GeoJSON.Geometry): LonLat[];
13
+ /** The geometry without the parts `keep` rejects, or `null` when none stays. The same geometry when all do. */
14
+ static filterParts(geometry: GeoJSON.Geometry, keep: (part: {
15
+ centroid: LonLat;
16
+ geometry: GeoJSON.Geometry;
17
+ }) => boolean): GeoJSON.Geometry | null;
18
+ /** The path between two points that changes longitude and latitude at a steady rate, the short way around: it keeps near its parallels where a great circle bends toward a pole. */
19
+ static parallelPath(from: LonLat, to: LonLat, steps?: number): LonLat[];
20
+ /**
21
+ * The great-circle arc between two points, as `steps + 1` points. Drawn
22
+ * through `Geo` because svelteplot's `Link` cannot read `x1`/`y1`/`x2`/`y2`
23
+ * under a projection (0.14.2).
24
+ */
25
+ static greatCircle(from: LonLat, to: LonLat, steps?: number): LonLat[];
26
+ }
27
+ export {};
@@ -0,0 +1,142 @@
1
+ /** Operations on GeoJSON geometries: their centroids, bounds, disjoint parts and great-circle arcs. */
2
+ export class GeoGeometry {
3
+ /** Bounding-box center of a geometry's coordinates: a cheap point for a label, not an area centroid. */
4
+ static centroid(geometry) {
5
+ const coords = GeoGeometry.#coordinates(geometry);
6
+ if (coords.length === 0)
7
+ return [0, 0];
8
+ const [minLon, minLat, maxLon, maxLat] = GeoGeometry.#extent(coords);
9
+ return [(minLon + maxLon) / 2, (minLat + maxLat) / 2];
10
+ }
11
+ /** `[minLon, minLat, maxLon, maxLat]` of a geometry, or `null` when it has no coordinates. */
12
+ static lonLatBounds(geometry) {
13
+ const coords = GeoGeometry.#coordinates(geometry);
14
+ return coords.length === 0 ? null : GeoGeometry.#extent(coords);
15
+ }
16
+ /** A multi-part geometry as its disjoint parts, one `Polygon` or `LineString` each; any other geometry as itself. */
17
+ static parts(geometry) {
18
+ switch (geometry.type) {
19
+ case 'MultiPolygon':
20
+ return geometry.coordinates.map((polygon) => ({ type: 'Polygon', coordinates: polygon }));
21
+ case 'MultiLineString':
22
+ return geometry.coordinates.map((line) => ({ type: 'LineString', coordinates: line }));
23
+ case 'GeometryCollection':
24
+ return geometry.geometries.flatMap((part) => GeoGeometry.parts(part));
25
+ default:
26
+ return [geometry];
27
+ }
28
+ }
29
+ /** One centroid per disjoint part, so a feature whose parts lie far apart matches a hover over any of them. */
30
+ static partCentroids(geometry) {
31
+ return GeoGeometry.parts(geometry).map((part) => GeoGeometry.centroid(part));
32
+ }
33
+ /** The geometry without the parts `keep` rejects, or `null` when none stays. The same geometry when all do. */
34
+ static filterParts(geometry, keep) {
35
+ const parts = GeoGeometry.parts(geometry);
36
+ const kept = parts.filter((part) => keep({ centroid: GeoGeometry.centroid(part), geometry: part }));
37
+ if (kept.length === parts.length)
38
+ return geometry;
39
+ if (kept.length === 0)
40
+ return null;
41
+ if (parts.length === 1)
42
+ return kept[0];
43
+ switch (geometry.type) {
44
+ case 'MultiPolygon':
45
+ return {
46
+ type: 'MultiPolygon',
47
+ coordinates: kept.map((part) => part.coordinates)
48
+ };
49
+ case 'MultiLineString':
50
+ return {
51
+ type: 'MultiLineString',
52
+ coordinates: kept.map((part) => part.coordinates)
53
+ };
54
+ case 'GeometryCollection':
55
+ return { type: 'GeometryCollection', geometries: kept };
56
+ default:
57
+ return geometry;
58
+ }
59
+ }
60
+ /** The path between two points that changes longitude and latitude at a steady rate, the short way around: it keeps near its parallels where a great circle bends toward a pole. */
61
+ static parallelPath(from, to, steps = 64) {
62
+ const shift = ((((to[0] - from[0] + 180) % 360) + 360) % 360) - 180;
63
+ return Array.from({ length: steps + 1 }, (_, index) => {
64
+ const fraction = index / steps;
65
+ const lon = ((((from[0] + shift * fraction + 180) % 360) + 360) % 360) - 180;
66
+ return [lon, from[1] + (to[1] - from[1]) * fraction];
67
+ });
68
+ }
69
+ /**
70
+ * The great-circle arc between two points, as `steps + 1` points. Drawn
71
+ * through `Geo` because svelteplot's `Link` cannot read `x1`/`y1`/`x2`/`y2`
72
+ * under a projection (0.14.2).
73
+ */
74
+ static greatCircle(from, to, steps = 64) {
75
+ const [lambda1, phi1] = [GeoGeometry.#radians(from[0]), GeoGeometry.#radians(from[1])];
76
+ const [lambda2, phi2] = [GeoGeometry.#radians(to[0]), GeoGeometry.#radians(to[1])];
77
+ const distance = 2 *
78
+ Math.asin(Math.sqrt(Math.sin((phi2 - phi1) / 2) ** 2 +
79
+ Math.cos(phi1) * Math.cos(phi2) * Math.sin((lambda2 - lambda1) / 2) ** 2));
80
+ if (!Number.isFinite(distance) || distance === 0)
81
+ return [from, to];
82
+ return Array.from({ length: steps + 1 }, (_, index) => {
83
+ const fraction = index / steps;
84
+ const a = Math.sin((1 - fraction) * distance) / Math.sin(distance);
85
+ const b = Math.sin(fraction * distance) / Math.sin(distance);
86
+ const x = a * Math.cos(phi1) * Math.cos(lambda1) + b * Math.cos(phi2) * Math.cos(lambda2);
87
+ const y = a * Math.cos(phi1) * Math.sin(lambda1) + b * Math.cos(phi2) * Math.sin(lambda2);
88
+ const z = a * Math.sin(phi1) + b * Math.sin(phi2);
89
+ return [
90
+ GeoGeometry.#degrees(Math.atan2(y, x)),
91
+ GeoGeometry.#degrees(Math.atan2(z, Math.sqrt(x * x + y * y)))
92
+ ];
93
+ });
94
+ }
95
+ static #radians(degrees) {
96
+ return (degrees * Math.PI) / 180;
97
+ }
98
+ static #degrees(radians) {
99
+ return (radians * 180) / Math.PI;
100
+ }
101
+ static #extent(coords) {
102
+ let [minLon, minLat, maxLon, maxLat] = [Infinity, Infinity, -Infinity, -Infinity];
103
+ for (const [lon, lat] of coords) {
104
+ if (lon < minLon)
105
+ minLon = lon;
106
+ if (lon > maxLon)
107
+ maxLon = lon;
108
+ if (lat < minLat)
109
+ minLat = lat;
110
+ if (lat > maxLat)
111
+ maxLat = lat;
112
+ }
113
+ return [minLon, minLat, maxLon, maxLat];
114
+ }
115
+ static #coordinates(geometry, out = []) {
116
+ switch (geometry.type) {
117
+ case 'Point':
118
+ out.push(geometry.coordinates);
119
+ break;
120
+ case 'MultiPoint':
121
+ case 'LineString':
122
+ out.push(...geometry.coordinates);
123
+ break;
124
+ case 'MultiLineString':
125
+ case 'Polygon':
126
+ for (const line of geometry.coordinates)
127
+ out.push(...line);
128
+ break;
129
+ case 'MultiPolygon':
130
+ for (const polygon of geometry.coordinates) {
131
+ for (const ring of polygon)
132
+ out.push(...ring);
133
+ }
134
+ break;
135
+ case 'GeometryCollection':
136
+ for (const part of geometry.geometries)
137
+ GeoGeometry.#coordinates(part, out);
138
+ break;
139
+ }
140
+ return out;
141
+ }
142
+ }
@@ -0,0 +1,16 @@
1
+ import type { ChannelScalesConfig } from '../../../types/layout/scales';
2
+ import type { Segment } from '../../../types/plots/segments/config';
3
+ import type { SegmentsConfig } from '../../../types/plots/props';
4
+ /**
5
+ * The segments that apply to one geo feature. A feature is atomic, so a segment's
6
+ * `areas` do not apply: every entry is a plain patch, merged in order.
7
+ */
8
+ export declare class GeoSegments {
9
+ #private;
10
+ /** The feature's entries, least specific first: `default`, its grouping bucket, then itself. */
11
+ static forFeature<TStyle>(segments: SegmentsConfig<TStyle>, featureId: string, groupingValue?: string): Segment<TStyle>[];
12
+ /** Every matching entry's `styles` merged field by field, the most specific winning. */
13
+ static style<TStyle extends object>(segments: SegmentsConfig<TStyle>, featureId: string, groupingValue?: string): TStyle;
14
+ /** The `scales` of the most specific matching entry that sets one: a ramp config does not merge key by key. */
15
+ static scales<TStyle>(segments: SegmentsConfig<TStyle>, featureId: string, groupingValue?: string): ChannelScalesConfig | undefined;
16
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * The segments that apply to one geo feature. A feature is atomic, so a segment's
3
+ * `areas` do not apply: every entry is a plain patch, merged in order.
4
+ */
5
+ export class GeoSegments {
6
+ static #DEFAULT_KEY = 'default';
7
+ /** The feature's entries, least specific first: `default`, its grouping bucket, then itself. */
8
+ static forFeature(segments, featureId, groupingValue) {
9
+ return [
10
+ ...(segments[GeoSegments.#DEFAULT_KEY] ?? []),
11
+ ...(groupingValue ? (segments[groupingValue] ?? []) : []),
12
+ ...(segments[featureId] ?? [])
13
+ ];
14
+ }
15
+ /** Every matching entry's `styles` merged field by field, the most specific winning. */
16
+ static style(segments, featureId, groupingValue) {
17
+ return GeoSegments.forFeature(segments, featureId, groupingValue).reduce((merged, segment) => ({ ...merged, ...(segment.styles ?? {}) }), {});
18
+ }
19
+ /** The `scales` of the most specific matching entry that sets one: a ramp config does not merge key by key. */
20
+ static scales(segments, featureId, groupingValue) {
21
+ return GeoSegments.forFeature(segments, featureId, groupingValue).reduce((found, segment) => segment.scales ?? found, undefined);
22
+ }
23
+ }
@@ -1,16 +1,16 @@
1
1
  <script lang="ts" generics="TProps extends Record<string, unknown>">
2
2
  import Core from './Core.svelte';
3
- import Plot from '../../layout/plot/Plot.svelte';
4
- import { merge } from '../../utils/merge';
3
+ import Plot from '../../../layout/plot/Plot.svelte';
4
+ import { merge } from '../../../utils/merge';
5
5
  import { buildGeoDefaults } from './defaults';
6
6
  import { buildGeoSlicing } from './slices';
7
- import { createGeoFeatures } from './features.svelte';
8
- import type { GeoPlotProps, GeoPlotCoreProps } from '../../types/plots/geo/props';
9
- import type { GeoFeature } from '../../types/plots/data/geo';
10
- import type { GeoScalesConfig } from '../../types/layout/coordinates';
11
- import type { PlotCellContext } from '../../types/layout/plot';
12
- import type { TooltipConfig } from '../../types/plots/props';
13
- import type { TooltipProp } from '../../types/layout/tooltip';
7
+ import { GeoFeatures } from './GeoFeatures.svelte';
8
+ import type { GeoPlotProps, GeoPlotCoreProps } from '../../../types/plots/map/geo/props';
9
+ import type { GeoFeature } from '../../../types/plots/data/geo';
10
+ import type { GeoScalesConfig } from '../../../types/layout/coordinates';
11
+ import type { PlotCellContext } from '../../../types/layout/plot';
12
+ import type { TooltipConfig } from '../../../types/plots/props';
13
+ import type { TooltipProp } from '../../../types/layout/tooltip';
14
14
 
15
15
  type Row = Record<string, unknown>;
16
16
 
@@ -40,7 +40,7 @@
40
40
 
41
41
  const sliced = $derived(timeline != null || facet != null);
42
42
  // Only resolved here when slicing; otherwise the core resolves `data` itself.
43
- const resolved = createGeoFeatures<TProps>(
43
+ const resolved = new GeoFeatures<TProps>(
44
44
  () => (sliced ? core.data : []),
45
45
  () => core.object
46
46
  );
@@ -1,5 +1,5 @@
1
- import Plot from '../../layout/plot/Plot.svelte';
2
- import type { GeoPlotProps } from '../../types/plots/geo/props';
1
+ import Plot from '../../../layout/plot/Plot.svelte';
2
+ import type { GeoPlotProps } from '../../../types/plots/map/geo/props';
3
3
  declare function $$render<TProps extends Record<string, unknown>>(): {
4
4
  props: GeoPlotProps<TProps>;
5
5
  exports: {};
@@ -1,4 +1,4 @@
1
- import type { GeoPlotState, GeoPlotCtx } from '../../types/plots/geo/state';
2
- import { Pipeline } from '../../phases/Pipeline';
1
+ import type { GeoPlotState, GeoPlotCtx } from '../../../types/plots/map/geo/state';
2
+ import { Pipeline } from '../../../phases/Pipeline';
3
3
  /** GeoPlot's own pipeline (data, scales, markers, tooltip, hover), run over the state its core seeds, hovering one feature at a time. */
4
4
  export declare function buildGeoDefaults<TProps extends Record<string, unknown>>(): Pipeline<GeoPlotState<TProps>, GeoPlotCtx<TProps>>;
@@ -3,7 +3,7 @@ import { buildScales } from './phases/scales';
3
3
  import { buildMarkers } from './phases/markers';
4
4
  import { buildTooltip } from './phases/tooltip';
5
5
  import { buildHover } from './phases/hover';
6
- import { Pipeline } from '../../phases/Pipeline';
6
+ import { Pipeline } from '../../../phases/Pipeline';
7
7
  /** GeoPlot's own pipeline (data, scales, markers, tooltip, hover), run over the state its core seeds, hovering one feature at a time. */
8
8
  export function buildGeoDefaults() {
9
9
  return new Pipeline([
@@ -1,4 +1,4 @@
1
- import type { GeoPlotState } from '../../../types/plots/geo/state';
1
+ import type { GeoPlotState } from '../../../../types/plots/map/geo/state';
2
2
  /**
3
3
  * GeoPlot's "data" phase: every feature tagged with its resolved id/centroid,
4
4
  * then reduced by `excludeParts`. Reads no ctx.
@@ -1,5 +1,6 @@
1
- import { resolveAccessor } from '../../utils/accessors';
2
- import { geometryCentroid, filterGeometryParts, defaultFeatureId } from '../../utils/geoAccessors';
1
+ import { resolveAccessor } from '../../../../utils/accessors';
2
+ import { GeoGeometry } from '../GeoGeometry';
3
+ import { GeoFeatures } from '../GeoFeatures.svelte';
3
4
  /**
4
5
  * GeoPlot's "data" phase: every feature tagged with its resolved id/centroid,
5
6
  * then reduced by `excludeParts`. Reads no ctx.
@@ -8,18 +9,18 @@ export function buildData(state) {
8
9
  const { rawFeatures, featureId, excludeParts } = state;
9
10
  const getFeatureId = featureId
10
11
  ? resolveAccessor(featureId)
11
- : defaultFeatureId;
12
+ : GeoFeatures.defaultId;
12
13
  const allFeatures = rawFeatures.map((f) => {
13
- const [cx, cy] = geometryCentroid(f.geometry);
14
+ const [cx, cy] = GeoGeometry.centroid(f.geometry);
14
15
  return { ...f, __id: getFeatureId(f), __cx: cx, __cy: cy };
15
16
  });
16
17
  const features = !excludeParts
17
18
  ? allFeatures
18
19
  : allFeatures.flatMap((f) => {
19
- const geometry = filterGeometryParts(f.geometry, (part) => !excludeParts(part, f));
20
+ const geometry = GeoGeometry.filterParts(f.geometry, (part) => !excludeParts(part, f));
20
21
  if (!geometry)
21
22
  return [];
22
- const [cx, cy] = geometryCentroid(geometry);
23
+ const [cx, cy] = GeoGeometry.centroid(geometry);
23
24
  return [{ ...f, geometry, __cx: cx, __cy: cy }];
24
25
  });
25
26
  return { ...state, allFeatures, features };
@@ -1,4 +1,4 @@
1
- import type { GeoPlotState, GeoPlotCtx } from '../../../types/plots/geo/state';
1
+ import type { GeoPlotState, GeoPlotCtx } from '../../../../types/plots/map/geo/state';
2
2
  /** Whether a pointer event is over an `inset` marker's panel, which has its own hover. */
3
3
  export declare function isOverInset(e: PointerEvent): boolean;
4
4
  /**
@@ -1,5 +1,5 @@
1
- import { LegendState } from '../../../layout/legend/LegendState.svelte';
2
- import { HoverSettings } from '../../../layout/hover/HoverSettings';
1
+ import { LegendState } from '../../../../layout/legend/LegendState.svelte';
2
+ import { HoverSettings } from '../../../../layout/hover/HoverSettings';
3
3
  /** Whether a pointer event is over an `inset` marker's panel, which has its own hover. */
4
4
  export function isOverInset(e) {
5
5
  return e.target?.closest?.('.dct-geo-inset') != null;
@@ -1,4 +1,4 @@
1
- import type { GeoPlotState, GeoPlotCtx } from '../../../types/plots/geo/state';
1
+ import type { GeoPlotState, GeoPlotCtx } from '../../../../types/plots/map/geo/state';
2
2
  /**
3
3
  * GeoPlot's "markers" phase: per-feature style resolution/grouping, the base
4
4
  * `'geo'` marker(s), and the full draw order - any authored marker with