@fundar/data-chart-telling 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (560) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/README.md +58 -19
  3. package/dist/configuration/config.svelte.d.ts +1 -1
  4. package/dist/configuration/config.svelte.js +172 -95
  5. package/dist/configuration/themes/index.d.ts +5 -1304
  6. package/dist/index.d.ts +24 -14
  7. package/dist/index.js +20 -10
  8. package/dist/layout/base/BasePlotLayout.svelte +129 -51
  9. package/dist/layout/base/BasePlotLayout.svelte.d.ts +1 -38
  10. package/dist/layout/coordinates/CoordinatesLayout.svelte +42 -40
  11. package/dist/layout/coordinates/CoordinatesLayout.svelte.d.ts +0 -2
  12. package/dist/layout/coordinates/ProjectionZoom.svelte +48 -0
  13. package/dist/layout/coordinates/ProjectionZoom.svelte.d.ts +10 -0
  14. package/dist/layout/coordinates/ZoomedProjection.d.ts +11 -0
  15. package/dist/layout/coordinates/ZoomedProjection.js +24 -0
  16. package/dist/layout/coordinates/camera.svelte.js +11 -8
  17. package/dist/layout/coordinates/projections/argentina.js +1 -1
  18. package/dist/layout/coordinates/projections/fit.d.ts +1 -1
  19. package/dist/layout/coordinates/projections/fit.js +1 -1
  20. package/dist/layout/coordinates/zoom.svelte.d.ts +4 -5
  21. package/dist/layout/coordinates/zoom.svelte.js +4 -5
  22. package/dist/layout/facet/FacetLayout.svelte +1 -1
  23. package/dist/layout/facet/config.js +1 -1
  24. package/dist/layout/figure/Figure.svelte +2 -0
  25. package/dist/layout/geometry/GeometryLayout.svelte +14 -9
  26. package/dist/layout/geometry/GeometryLayout.svelte.d.ts +0 -3
  27. package/dist/layout/geometry/MarkerOffset.svelte +28 -0
  28. package/dist/layout/geometry/MarkerOffset.svelte.d.ts +13 -0
  29. package/dist/layout/grid/GridCell.svelte +6 -8
  30. package/dist/layout/hover/HoverSettings.d.ts +20 -6
  31. package/dist/layout/hover/HoverSettings.js +29 -4
  32. package/dist/layout/legend/ContinuousSection.svelte +44 -9
  33. package/dist/layout/legend/DiscreteBadgeItem.svelte +2 -2
  34. package/dist/layout/legend/DiscreteSection.svelte +2 -2
  35. package/dist/layout/legend/DiscreteSymbolIcon.svelte +1 -1
  36. package/dist/layout/legend/LegendChannels.js +36 -12
  37. package/dist/layout/legend/LegendLayout.svelte +9 -1
  38. package/dist/layout/legend/LegendState.svelte.d.ts +9 -0
  39. package/dist/layout/legend/LegendState.svelte.js +24 -3
  40. package/dist/layout/legend/SizeSection.svelte +1 -1
  41. package/dist/layout/margins/PlotMargins.svelte.d.ts +2 -5
  42. package/dist/layout/margins/PlotMargins.svelte.js +4 -8
  43. package/dist/layout/plot/Plot.svelte +6 -3
  44. package/dist/layout/plot/PublicPlotContext.d.ts +5 -4
  45. package/dist/layout/plot/PublicPlotContext.js +7 -3
  46. package/dist/layout/plot/Slice.d.ts +5 -1
  47. package/dist/layout/plot/Slice.js +18 -6
  48. package/dist/layout/scales/EdgeTicks.d.ts +39 -0
  49. package/dist/layout/scales/EdgeTicks.js +82 -0
  50. package/dist/layout/scales/NiceTicks.d.ts +43 -0
  51. package/dist/layout/scales/NiceTicks.js +76 -0
  52. package/dist/layout/scales/ScalesLayout.svelte +133 -34
  53. package/dist/layout/scales/ScalesLayout.svelte.d.ts +10 -0
  54. package/dist/layout/scales/SveltePlotScale.d.ts +15 -0
  55. package/dist/layout/scales/SveltePlotScale.js +86 -0
  56. package/dist/layout/scales/TickLabels.d.ts +32 -0
  57. package/dist/layout/scales/TickLabels.js +55 -0
  58. package/dist/layout/styles/StylesLayout.svelte +2 -2
  59. package/dist/layout/styles/ValueLabels.d.ts +33 -5
  60. package/dist/layout/styles/ValueLabels.js +83 -23
  61. package/dist/layout/timeline/Timeline.svelte +5 -2
  62. package/dist/layout/timeline/Timeline.svelte.d.ts +2 -0
  63. package/dist/layout/timeline/TimelineLayout.svelte +39 -13
  64. package/dist/layout/timeline/TimelineLayout.svelte.d.ts +7 -5
  65. package/dist/layout/timeline/TimelineRule.svelte +1 -0
  66. package/dist/layout/timeline/TimelineState.svelte.d.ts +13 -5
  67. package/dist/layout/timeline/TimelineState.svelte.js +42 -8
  68. package/dist/layout/timeline/TimelineTime.d.ts +18 -0
  69. package/dist/layout/timeline/TimelineTime.js +117 -0
  70. package/dist/layout/tooltip/Tooltip.svelte +10 -7
  71. package/dist/layout/tooltip/Tooltip.svelte.d.ts +6 -4
  72. package/dist/layout/tooltip/TooltipState.svelte.d.ts +8 -2
  73. package/dist/layout/tooltip/TooltipState.svelte.js +23 -4
  74. package/dist/markers/MarkerKinds.d.ts +5 -0
  75. package/dist/markers/MarkerKinds.js +1 -0
  76. package/dist/markers/area/AreaMarker.svelte +15 -63
  77. package/dist/markers/arrow/ArrowMarker.svelte +51 -9
  78. package/dist/markers/bar/BarMarker.svelte +8 -4
  79. package/dist/markers/bollinger/BollingerMarker.svelte +33 -18
  80. package/dist/markers/box/BoxMarker.svelte +40 -9
  81. package/dist/markers/delta/Delta.js +1 -1
  82. package/dist/markers/delta/DeltaMarker.svelte +9 -7
  83. package/dist/markers/dot/DotMarker.svelte +24 -27
  84. package/dist/markers/image/ImageMarker.svelte +17 -12
  85. package/dist/markers/inset/InsetMarker.svelte +2 -2
  86. package/dist/markers/line/LineMarker.svelte +1 -0
  87. package/dist/markers/link/LinkMarker.svelte +174 -29
  88. package/dist/markers/regression/RegressionMarker.svelte +16 -33
  89. package/dist/markers/rule/RuleMarker.svelte +9 -3
  90. package/dist/markers/text/Declutter.d.ts +4 -0
  91. package/dist/markers/text/Declutter.js +26 -11
  92. package/dist/markers/text/TextMarker.svelte +91 -48
  93. package/dist/markers/tick/TickMarker.svelte +27 -25
  94. package/dist/markers/utils/MarkerChannels.d.ts +24 -0
  95. package/dist/markers/utils/MarkerChannels.js +42 -7
  96. package/dist/markers/utils/RowOffset.d.ts +23 -0
  97. package/dist/markers/utils/RowOffset.js +23 -0
  98. package/dist/markers/utils/RowOffsetMarks.svelte +30 -0
  99. package/dist/markers/utils/RowOffsetMarks.svelte.d.ts +33 -0
  100. package/dist/markers/utils/RowStroke.d.ts +31 -0
  101. package/dist/markers/utils/RowStroke.js +28 -0
  102. package/dist/markers/violin/ViolinMarker.svelte +75 -0
  103. package/dist/markers/violin/ViolinMarker.svelte.d.ts +7 -0
  104. package/dist/markers/violin/ViolinProfiles.d.ts +29 -0
  105. package/dist/markers/violin/ViolinProfiles.js +55 -0
  106. package/dist/markers/waffle/WaffleMarker.svelte +17 -37
  107. package/dist/phases/Pipeline.d.ts +5 -0
  108. package/dist/phases/Pipeline.js +8 -2
  109. package/dist/phases/data/DataPhase.d.ts +5 -11
  110. package/dist/phases/data/DataPhase.js +14 -11
  111. package/dist/phases/data/PlotAxes.d.ts +10 -0
  112. package/dist/phases/data/PlotAxes.js +14 -1
  113. package/dist/phases/facet/FacetPanels.d.ts +55 -0
  114. package/dist/phases/facet/FacetPanels.js +96 -0
  115. package/dist/phases/facet/FacetPhase.d.ts +1 -42
  116. package/dist/phases/facet/FacetPhase.js +1 -87
  117. package/dist/phases/hover/HoverPhase.d.ts +6 -43
  118. package/dist/phases/hover/HoverPhase.js +19 -54
  119. package/dist/phases/mapping/MappingPhase.d.ts +1 -1
  120. package/dist/phases/mapping/MappingPhase.js +3 -5
  121. package/dist/phases/markers/MarkersPhase.js +2 -1
  122. package/dist/phases/scales/CategoryOrder.d.ts +23 -0
  123. package/dist/phases/scales/CategoryOrder.js +73 -0
  124. package/dist/phases/scales/ScalesPhase.d.ts +1 -3
  125. package/dist/phases/scales/ScalesPhase.js +37 -27
  126. package/dist/phases/sharedScales/SharedScalesPhase.d.ts +6 -2
  127. package/dist/phases/sharedScales/SharedScalesPhase.js +14 -8
  128. package/dist/phases/statistics/Statistics.d.ts +10 -6
  129. package/dist/phases/statistics/Statistics.js +20 -10
  130. package/dist/phases/statistics/StatisticsPhase.js +10 -6
  131. package/dist/phases/statistics/methods/BollingerStatistic.d.ts +1 -1
  132. package/dist/phases/statistics/methods/BollingerStatistic.js +13 -11
  133. package/dist/phases/statistics/methods/BoxStatistic.d.ts +1 -1
  134. package/dist/phases/statistics/methods/BoxStatistic.js +14 -12
  135. package/dist/phases/statistics/methods/Density2dStatistic.d.ts +1 -1
  136. package/dist/phases/statistics/methods/Density2dStatistic.js +13 -11
  137. package/dist/phases/statistics/methods/DensityStatistic.d.ts +1 -1
  138. package/dist/phases/statistics/methods/DensityStatistic.js +11 -9
  139. package/dist/phases/statistics/methods/DeviationStatistic.d.ts +8 -0
  140. package/dist/phases/statistics/methods/DeviationStatistic.js +111 -0
  141. package/dist/phases/statistics/methods/MovingAverageStatistic.d.ts +1 -1
  142. package/dist/phases/statistics/methods/MovingAverageStatistic.js +11 -9
  143. package/dist/phases/statistics/methods/RegressionStatistic.d.ts +1 -1
  144. package/dist/phases/statistics/methods/RegressionStatistic.js +16 -14
  145. package/dist/phases/tooltip/TooltipPhase.d.ts +4 -2
  146. package/dist/phases/tooltip/TooltipPhase.js +10 -3
  147. package/dist/phases/transforms/ProcessedPositions.d.ts +30 -0
  148. package/dist/phases/transforms/ProcessedPositions.js +74 -0
  149. package/dist/phases/transforms/TransformsPhase.d.ts +5 -42
  150. package/dist/phases/transforms/TransformsPhase.js +67 -58
  151. package/dist/phases/transforms/ValueSelection.d.ts +30 -0
  152. package/dist/phases/transforms/ValueSelection.js +53 -0
  153. package/dist/plots/{heatmap → correlation/heatmap}/Plot.svelte +5 -2
  154. package/dist/plots/{heatmap → correlation/heatmap}/Plot.svelte.d.ts +2 -2
  155. package/dist/plots/{heatmap → correlation/heatmap}/defaults.d.ts +2 -2
  156. package/dist/plots/{heatmap → correlation/heatmap}/defaults.js +5 -5
  157. package/dist/plots/{heatmap → correlation/heatmap}/markers.d.ts +4 -4
  158. package/dist/plots/{heatmap → correlation/heatmap}/markers.js +4 -3
  159. package/dist/plots/{scatter → correlation/scatter}/Plot.svelte +5 -2
  160. package/dist/plots/{scatter → correlation/scatter}/Plot.svelte.d.ts +2 -2
  161. package/dist/plots/{scatter → correlation/scatter}/defaults.d.ts +2 -2
  162. package/dist/plots/{scatter → correlation/scatter}/defaults.js +6 -5
  163. package/dist/plots/{scatter → correlation/scatter}/markers.d.ts +4 -4
  164. package/dist/plots/{scatter → correlation/scatter}/markers.js +5 -4
  165. package/dist/plots/distribution/box/BoxSummaries.d.ts +19 -0
  166. package/dist/plots/distribution/box/BoxSummaries.js +101 -0
  167. package/dist/plots/distribution/box/Plot.svelte +42 -0
  168. package/dist/plots/distribution/box/Plot.svelte.d.ts +26 -0
  169. package/dist/plots/distribution/box/defaults.d.ts +12 -0
  170. package/dist/plots/distribution/box/defaults.js +34 -0
  171. package/dist/plots/distribution/box/markers.d.ts +12 -0
  172. package/dist/plots/distribution/box/markers.js +34 -0
  173. package/dist/plots/distribution/density/Plot.svelte +45 -0
  174. package/dist/plots/distribution/density/Plot.svelte.d.ts +26 -0
  175. package/dist/plots/distribution/density/defaults.d.ts +9 -0
  176. package/dist/plots/distribution/density/defaults.js +29 -0
  177. package/dist/plots/distribution/density/markers.d.ts +9 -0
  178. package/dist/plots/distribution/density/markers.js +42 -0
  179. package/dist/plots/{histogram → distribution/histogram}/Plot.svelte +2 -2
  180. package/dist/plots/{histogram → distribution/histogram}/Plot.svelte.d.ts +2 -2
  181. package/dist/plots/{histogram → distribution/histogram}/defaults.d.ts +2 -2
  182. package/dist/plots/{histogram → distribution/histogram}/defaults.js +4 -4
  183. package/dist/plots/{histogram → distribution/histogram}/markers.d.ts +3 -3
  184. package/dist/plots/{histogram → distribution/histogram}/markers.js +7 -7
  185. package/dist/plots/{pyramid → distribution/pyramid}/Plot.svelte +5 -2
  186. package/dist/plots/{pyramid → distribution/pyramid}/Plot.svelte.d.ts +2 -2
  187. package/dist/plots/{pyramid → distribution/pyramid}/defaults.d.ts +2 -2
  188. package/dist/plots/{pyramid → distribution/pyramid}/defaults.js +7 -6
  189. package/dist/plots/{pyramid → distribution/pyramid}/markers.d.ts +4 -4
  190. package/dist/plots/{pyramid → distribution/pyramid}/markers.js +8 -11
  191. package/dist/plots/distribution/violin/Plot.svelte +45 -0
  192. package/dist/plots/distribution/violin/Plot.svelte.d.ts +26 -0
  193. package/dist/plots/distribution/violin/defaults.d.ts +10 -0
  194. package/dist/plots/distribution/violin/defaults.js +58 -0
  195. package/dist/plots/distribution/violin/markers.d.ts +10 -0
  196. package/dist/plots/distribution/violin/markers.js +71 -0
  197. package/dist/plots/{area → evolution/area}/Plot.svelte +2 -2
  198. package/dist/plots/{area → evolution/area}/Plot.svelte.d.ts +2 -2
  199. package/dist/plots/{area → evolution/area}/defaults.d.ts +2 -2
  200. package/dist/plots/{area → evolution/area}/defaults.js +2 -0
  201. package/dist/plots/{area → evolution/area}/markers.d.ts +2 -2
  202. package/dist/plots/{area → evolution/area}/markers.js +2 -3
  203. package/dist/plots/{line → evolution/line}/Plot.svelte +2 -2
  204. package/dist/plots/{line → evolution/line}/Plot.svelte.d.ts +2 -2
  205. package/dist/plots/{line → evolution/line}/defaults.d.ts +2 -2
  206. package/dist/plots/{line → evolution/line}/defaults.js +2 -0
  207. package/dist/plots/{line → evolution/line}/markers.d.ts +11 -8
  208. package/dist/plots/{line → evolution/line}/markers.js +7 -6
  209. package/dist/plots/evolution/slope/Plot.svelte +42 -0
  210. package/dist/plots/evolution/slope/Plot.svelte.d.ts +26 -0
  211. package/dist/plots/evolution/slope/defaults.d.ts +8 -0
  212. package/dist/plots/evolution/slope/defaults.js +31 -0
  213. package/dist/plots/evolution/slope/markers.d.ts +16 -0
  214. package/dist/plots/evolution/slope/markers.js +79 -0
  215. package/dist/plots/evolution/sparkline/Plot.svelte +45 -0
  216. package/dist/plots/evolution/sparkline/Plot.svelte.d.ts +26 -0
  217. package/dist/plots/evolution/sparkline/defaults.d.ts +7 -0
  218. package/dist/plots/evolution/sparkline/defaults.js +23 -0
  219. package/dist/plots/evolution/sparkline/markers.d.ts +7 -0
  220. package/dist/plots/evolution/sparkline/markers.js +56 -0
  221. package/dist/plots/{geo → map/geo}/Core.svelte +11 -10
  222. package/dist/plots/{geo → map/geo}/Core.svelte.d.ts +1 -1
  223. package/dist/plots/map/geo/GeoFeatures.svelte.d.ts +9 -0
  224. package/dist/plots/map/geo/GeoFeatures.svelte.js +55 -0
  225. package/dist/plots/map/geo/GeoGeometry.d.ts +27 -0
  226. package/dist/plots/map/geo/GeoGeometry.js +142 -0
  227. package/dist/plots/map/geo/GeoSegments.d.ts +16 -0
  228. package/dist/plots/map/geo/GeoSegments.js +23 -0
  229. package/dist/plots/{geo → map/geo}/Plot.svelte +10 -10
  230. package/dist/plots/{geo → map/geo}/Plot.svelte.d.ts +2 -2
  231. package/dist/plots/{geo → map/geo}/defaults.d.ts +2 -2
  232. package/dist/plots/{geo → map/geo}/defaults.js +1 -1
  233. package/dist/plots/{geo → map/geo}/phases/data.d.ts +1 -1
  234. package/dist/plots/{geo → map/geo}/phases/data.js +7 -6
  235. package/dist/plots/{geo → map/geo}/phases/hover.d.ts +1 -1
  236. package/dist/plots/{geo → map/geo}/phases/hover.js +5 -5
  237. package/dist/plots/{geo → map/geo}/phases/markers.d.ts +1 -1
  238. package/dist/plots/{geo → map/geo}/phases/markers.js +8 -13
  239. package/dist/plots/{geo → map/geo}/phases/scales.d.ts +2 -2
  240. package/dist/plots/{geo → map/geo}/phases/scales.js +28 -12
  241. package/dist/plots/{geo → map/geo}/phases/tooltip.d.ts +1 -1
  242. package/dist/plots/map/geo/phases/tooltip.js +5 -0
  243. package/dist/plots/{geo → map/geo}/slices.d.ts +2 -2
  244. package/dist/plots/{geo → map/geo}/slices.js +7 -4
  245. package/dist/plots/{bar → ranking/bar}/Plot.svelte +2 -2
  246. package/dist/plots/{bar → ranking/bar}/Plot.svelte.d.ts +2 -2
  247. package/dist/plots/ranking/bar/defaults.d.ts +16 -0
  248. package/dist/plots/{bar → ranking/bar}/defaults.js +17 -15
  249. package/dist/plots/{bar → ranking/bar}/markers.d.ts +8 -8
  250. package/dist/plots/{bar → ranking/bar}/markers.js +11 -19
  251. package/dist/plots/ranking/bullet/Plot.svelte +42 -0
  252. package/dist/plots/ranking/bullet/Plot.svelte.d.ts +26 -0
  253. package/dist/plots/ranking/bullet/defaults.d.ts +8 -0
  254. package/dist/plots/ranking/bullet/defaults.js +24 -0
  255. package/dist/plots/ranking/bullet/markers.d.ts +10 -0
  256. package/dist/plots/ranking/bullet/markers.js +90 -0
  257. package/dist/plots/ranking/cleveland/ClevelandConnector.d.ts +48 -0
  258. package/dist/plots/ranking/cleveland/ClevelandConnector.js +140 -0
  259. package/dist/plots/ranking/cleveland/ClevelandMarkers.d.ts +33 -0
  260. package/dist/plots/ranking/cleveland/ClevelandMarkers.js +375 -0
  261. package/dist/plots/ranking/cleveland/ClevelandRanges.d.ts +31 -0
  262. package/dist/plots/ranking/cleveland/ClevelandRanges.js +116 -0
  263. package/dist/plots/ranking/cleveland/Plot.svelte +45 -0
  264. package/dist/plots/ranking/cleveland/Plot.svelte.d.ts +26 -0
  265. package/dist/plots/ranking/cleveland/defaults.d.ts +13 -0
  266. package/dist/plots/ranking/cleveland/defaults.js +66 -0
  267. package/dist/plots/ranking/dumbbell/Plot.svelte +45 -0
  268. package/dist/plots/ranking/dumbbell/Plot.svelte.d.ts +26 -0
  269. package/dist/plots/ranking/dumbbell/defaults.d.ts +9 -0
  270. package/dist/plots/ranking/dumbbell/defaults.js +19 -0
  271. package/dist/plots/ranking/forest/Plot.svelte +42 -0
  272. package/dist/plots/ranking/forest/Plot.svelte.d.ts +26 -0
  273. package/dist/plots/ranking/forest/defaults.d.ts +11 -0
  274. package/dist/plots/ranking/forest/defaults.js +20 -0
  275. package/dist/plots/ranking/lollipop/Plot.svelte +45 -0
  276. package/dist/plots/ranking/lollipop/Plot.svelte.d.ts +26 -0
  277. package/dist/plots/ranking/lollipop/defaults.d.ts +9 -0
  278. package/dist/plots/ranking/lollipop/defaults.js +18 -0
  279. package/dist/plots/utils/RowNumbers.d.ts +16 -0
  280. package/dist/plots/utils/RowNumbers.js +24 -0
  281. package/dist/plots/utils/gaps.js +1 -1
  282. package/dist/plots/utils/segments.js +1 -1
  283. package/dist/types/configuration/styling.d.ts +287 -132
  284. package/dist/types/layout/composer.d.ts +5 -2
  285. package/dist/types/layout/coordinates.d.ts +5 -4
  286. package/dist/types/layout/legend.d.ts +21 -5
  287. package/dist/types/layout/plot.d.ts +44 -1
  288. package/dist/types/layout/scales.d.ts +51 -3
  289. package/dist/types/layout/statistics/deviation.d.ts +40 -0
  290. package/dist/types/layout/statistics/index.d.ts +7 -2
  291. package/dist/types/layout/styles/base.d.ts +18 -0
  292. package/dist/types/layout/styles/bullet.d.ts +25 -0
  293. package/dist/types/layout/styles/connector.d.ts +98 -0
  294. package/dist/types/layout/styles/curve.d.ts +11 -0
  295. package/dist/types/layout/styles/frame.d.ts +17 -0
  296. package/dist/types/layout/styles/gaps.d.ts +12 -0
  297. package/dist/types/layout/styles/geo.d.ts +55 -0
  298. package/dist/types/layout/styles/index.d.ts +8 -0
  299. package/dist/types/layout/styles/index.js +8 -0
  300. package/dist/types/layout/styles/values.d.ts +47 -0
  301. package/dist/types/layout/timeline.d.ts +19 -7
  302. package/dist/types/layout/tooltip.d.ts +6 -2
  303. package/dist/types/markers/axis/area.d.ts +2 -2
  304. package/dist/types/markers/axis/arrow.d.ts +3 -0
  305. package/dist/types/markers/axis/axisBasedMarkersConfig.d.ts +2 -1
  306. package/dist/types/markers/axis/bar.d.ts +1 -1
  307. package/dist/types/markers/axis/box.d.ts +5 -0
  308. package/dist/types/markers/axis/difference.d.ts +2 -2
  309. package/dist/types/markers/axis/image.d.ts +3 -2
  310. package/dist/types/markers/axis/line.d.ts +2 -0
  311. package/dist/types/markers/axis/rule.d.ts +9 -0
  312. package/dist/types/markers/axis/trail.d.ts +2 -3
  313. package/dist/types/markers/axis/violin.d.ts +25 -0
  314. package/dist/types/markers/basic/dot.d.ts +3 -2
  315. package/dist/types/markers/basic/text.d.ts +13 -3
  316. package/dist/types/markers/channels/commonMarkerConfig.d.ts +7 -3
  317. package/dist/types/markers/channels/commonMarkerConfigWithRowOffset.d.ts +13 -0
  318. package/dist/types/markers/common.d.ts +1 -1
  319. package/dist/types/markers/common.js +1 -0
  320. package/dist/types/markers/geo/link.d.ts +5 -1
  321. package/dist/types/phases/hover/phase.d.ts +6 -0
  322. package/dist/types/phases/index.d.ts +1 -1
  323. package/dist/types/phases/scales/phase.d.ts +5 -1
  324. package/dist/types/phases/state.d.ts +20 -4
  325. package/dist/types/phases/statistics/phase.d.ts +3 -1
  326. package/dist/types/phases/statistics/source.d.ts +3 -1
  327. package/dist/types/phases/transforms/phase.d.ts +32 -0
  328. package/dist/types/plots/{heatmap → correlation/heatmap}/props.d.ts +6 -6
  329. package/dist/types/plots/{heatmap → correlation/heatmap}/state.d.ts +4 -4
  330. package/dist/types/plots/{scatter → correlation/scatter}/props.d.ts +6 -6
  331. package/dist/types/plots/{scatter → correlation/scatter}/state.d.ts +2 -2
  332. package/dist/types/plots/distribution/box/props.d.ts +10 -0
  333. package/dist/types/plots/distribution/box/state.d.ts +23 -0
  334. package/dist/types/plots/distribution/density/props.d.ts +23 -0
  335. package/dist/types/plots/distribution/density/state.d.ts +6 -0
  336. package/dist/types/plots/distribution/density/state.js +1 -0
  337. package/dist/types/plots/{histogram → distribution/histogram}/props.d.ts +7 -7
  338. package/dist/types/plots/distribution/histogram/props.js +1 -0
  339. package/dist/types/plots/{histogram → distribution/histogram}/state.d.ts +2 -2
  340. package/dist/types/plots/distribution/histogram/state.js +1 -0
  341. package/dist/types/plots/{pyramid → distribution/pyramid}/props.d.ts +6 -6
  342. package/dist/types/plots/distribution/pyramid/props.js +1 -0
  343. package/dist/types/plots/{pyramid → distribution/pyramid}/state.d.ts +3 -3
  344. package/dist/types/plots/distribution/pyramid/state.js +1 -0
  345. package/dist/types/plots/distribution/violin/props.d.ts +23 -0
  346. package/dist/types/plots/distribution/violin/props.js +1 -0
  347. package/dist/types/plots/distribution/violin/state.d.ts +6 -0
  348. package/dist/types/plots/distribution/violin/state.js +1 -0
  349. package/dist/types/plots/{area → evolution/area}/props.d.ts +6 -6
  350. package/dist/types/plots/evolution/area/props.js +1 -0
  351. package/dist/types/plots/{area → evolution/area}/state.d.ts +2 -2
  352. package/dist/types/plots/evolution/area/state.js +1 -0
  353. package/dist/types/plots/evolution/line/props.d.ts +10 -0
  354. package/dist/types/plots/evolution/line/props.js +1 -0
  355. package/dist/types/plots/{line → evolution/line}/state.d.ts +3 -3
  356. package/dist/types/plots/evolution/line/state.js +1 -0
  357. package/dist/types/plots/evolution/slope/props.d.ts +5 -0
  358. package/dist/types/plots/evolution/slope/props.js +1 -0
  359. package/dist/types/plots/evolution/slope/state.d.ts +5 -0
  360. package/dist/types/plots/evolution/slope/state.js +1 -0
  361. package/dist/types/plots/evolution/sparkline/props.d.ts +5 -0
  362. package/dist/types/plots/evolution/sparkline/props.js +1 -0
  363. package/dist/types/plots/evolution/sparkline/state.d.ts +5 -0
  364. package/dist/types/plots/evolution/sparkline/state.js +1 -0
  365. package/dist/types/plots/{geo → map/geo}/props.d.ts +8 -8
  366. package/dist/types/plots/map/geo/props.js +1 -0
  367. package/dist/types/plots/{geo → map/geo}/state.d.ts +18 -11
  368. package/dist/types/plots/map/geo/state.js +1 -0
  369. package/dist/types/plots/props.d.ts +3 -1
  370. package/dist/types/plots/{bar → ranking/bar}/props.d.ts +6 -6
  371. package/dist/types/plots/ranking/bar/props.js +1 -0
  372. package/dist/types/plots/{bar → ranking/bar}/state.d.ts +2 -2
  373. package/dist/types/plots/ranking/bar/state.js +1 -0
  374. package/dist/types/plots/ranking/bullet/props.d.ts +22 -0
  375. package/dist/types/plots/ranking/bullet/props.js +1 -0
  376. package/dist/types/plots/ranking/bullet/state.d.ts +5 -0
  377. package/dist/types/plots/ranking/bullet/state.js +1 -0
  378. package/dist/types/plots/ranking/cleveland/props.d.ts +10 -0
  379. package/dist/types/plots/ranking/cleveland/props.js +1 -0
  380. package/dist/types/plots/ranking/cleveland/state.d.ts +49 -0
  381. package/dist/types/plots/ranking/cleveland/state.js +1 -0
  382. package/dist/types/plots/ranking/dumbbell/props.d.ts +10 -0
  383. package/dist/types/plots/ranking/dumbbell/props.js +1 -0
  384. package/dist/types/plots/ranking/dumbbell/state.d.ts +5 -0
  385. package/dist/types/plots/ranking/dumbbell/state.js +1 -0
  386. package/dist/types/plots/ranking/forest/props.d.ts +23 -0
  387. package/dist/types/plots/ranking/forest/props.js +1 -0
  388. package/dist/types/plots/ranking/forest/state.d.ts +5 -0
  389. package/dist/types/plots/ranking/forest/state.js +1 -0
  390. package/dist/types/plots/ranking/lollipop/props.d.ts +10 -0
  391. package/dist/types/plots/ranking/lollipop/props.js +1 -0
  392. package/dist/types/plots/ranking/lollipop/state.d.ts +5 -0
  393. package/dist/types/plots/ranking/lollipop/state.js +1 -0
  394. package/dist/types/plots/segments/common.d.ts +4 -1
  395. package/dist/utils/OpacityScale.d.ts +14 -0
  396. package/dist/utils/OpacityScale.js +43 -0
  397. package/dist/utils/{symbol.d.ts → SymbolPath.d.ts} +0 -12
  398. package/dist/utils/{symbol.js → SymbolPath.js} +0 -24
  399. package/dist/utils/SymbolScale.d.ts +18 -0
  400. package/dist/utils/SymbolScale.js +29 -0
  401. package/dist/utils/color/ColorRamp.d.ts +27 -0
  402. package/dist/utils/color/ColorRamp.js +120 -0
  403. package/dist/utils/color/CssColor.d.ts +19 -0
  404. package/dist/utils/color/CssColor.js +114 -0
  405. package/dist/utils/color/Palette.d.ts +21 -0
  406. package/dist/utils/color/Palette.js +52 -0
  407. package/dist/utils/color/index.d.ts +11 -3
  408. package/dist/utils/color/index.js +14 -3
  409. package/dist/utils/grouping.js +1 -1
  410. package/docs/architecture.md +1 -1
  411. package/docs/chrome.md +39 -8
  412. package/docs/composer.md +19 -3
  413. package/docs/concepts.md +1 -1
  414. package/docs/development.md +14 -5
  415. package/docs/facets.md +62 -8
  416. package/docs/getting-started.md +8 -9
  417. package/docs/legend.md +73 -24
  418. package/docs/markers.md +45 -32
  419. package/docs/plots/correlation/heatmap.md +26 -0
  420. package/docs/plots/correlation/scatter.md +35 -0
  421. package/docs/plots/distribution/box.md +28 -0
  422. package/docs/plots/distribution/density.md +26 -0
  423. package/docs/plots/distribution/histogram.md +33 -0
  424. package/docs/plots/distribution/pyramid.md +31 -0
  425. package/docs/plots/distribution/violin.md +35 -0
  426. package/docs/plots/evolution/area.md +32 -0
  427. package/docs/plots/evolution/line.md +93 -0
  428. package/docs/plots/evolution/slope.md +39 -0
  429. package/docs/plots/evolution/sparkline.md +34 -0
  430. package/docs/plots/ranking/bar.md +59 -0
  431. package/docs/plots/ranking/bullet.md +37 -0
  432. package/docs/plots/ranking/cleveland.md +54 -0
  433. package/docs/plots/ranking/dumbbell.md +39 -0
  434. package/docs/plots/ranking/forest.md +40 -0
  435. package/docs/plots/ranking/lollipop.md +39 -0
  436. package/docs/plots.md +22 -154
  437. package/docs/scales.md +50 -27
  438. package/docs/state.md +1 -1
  439. package/docs/styles-and-segments.md +96 -39
  440. package/docs/theming.md +33 -19
  441. package/docs/timeline.md +62 -28
  442. package/docs/tooltip-and-hover.md +72 -24
  443. package/docs/transforms-and-statistics.md +56 -25
  444. package/examples/BarValues.svelte +2 -2
  445. package/examples/Box.svelte +7 -0
  446. package/examples/Bullet.svelte +17 -0
  447. package/examples/Chrome.svelte +17 -0
  448. package/examples/ChromeOrder.svelte +18 -0
  449. package/examples/Cleveland.svelte +15 -0
  450. package/examples/Composer.svelte +23 -0
  451. package/examples/CustomTooltip.svelte +21 -14
  452. package/examples/Density.svelte +7 -0
  453. package/examples/Dumbbell.svelte +16 -0
  454. package/examples/Facets.svelte +3 -3
  455. package/examples/FacetsCarousel.svelte +14 -0
  456. package/examples/FacetsRowsCols.svelte +23 -0
  457. package/examples/FirstPlot.svelte +7 -0
  458. package/examples/Forest.svelte +17 -0
  459. package/examples/Gaps.svelte +21 -0
  460. package/examples/GroupedBars.svelte +15 -0
  461. package/examples/Heatmap.svelte +7 -0
  462. package/examples/HeatmapSegments.svelte +26 -0
  463. package/examples/Histogram.svelte +14 -0
  464. package/examples/HorizontalBars.svelte +15 -0
  465. package/examples/LegendSections.svelte +27 -0
  466. package/examples/LegendToggle.svelte +3 -3
  467. package/examples/LineByRegion.svelte +18 -0
  468. package/examples/LineDates.svelte +15 -0
  469. package/examples/LineStep.svelte +16 -0
  470. package/examples/LineStepSegment.svelte +18 -0
  471. package/examples/Lollipop.svelte +17 -0
  472. package/examples/Markers.svelte +27 -0
  473. package/examples/MovingAverage.svelte +15 -0
  474. package/examples/Pyramid.svelte +14 -0
  475. package/examples/Regression.svelte +14 -0
  476. package/examples/ResponsiveLine.svelte +7 -7
  477. package/examples/Scales.svelte +26 -0
  478. package/examples/Scatter.svelte +16 -0
  479. package/examples/SegmentHighlight.svelte +22 -0
  480. package/examples/Segments.svelte +11 -3
  481. package/examples/SegmentsBySeries.svelte +25 -0
  482. package/examples/Slope.svelte +17 -0
  483. package/examples/Sparkline.svelte +14 -0
  484. package/examples/StackedArea.svelte +16 -0
  485. package/examples/StackedBars.svelte +15 -0
  486. package/examples/TimelinePlayer.svelte +8 -7
  487. package/examples/TimelineRule.svelte +19 -0
  488. package/examples/Tooltip.svelte +3 -3
  489. package/examples/ValueLabels.svelte +21 -0
  490. package/examples/Violin.svelte +14 -0
  491. package/examples/datasets/argentina-chile-trends.ts +34 -0
  492. package/examples/datasets/commodity-prices.ts +48 -0
  493. package/examples/datasets/countries-over-time.ts +368 -0
  494. package/examples/datasets/daily-temperature.ts +121 -0
  495. package/examples/datasets/earthquakes.ts +977 -0
  496. package/examples/datasets/flight-routes.ts +29 -0
  497. package/examples/datasets/height-density.ts +37 -0
  498. package/examples/datasets/heights.ts +370 -0
  499. package/examples/datasets/index.ts +24 -0
  500. package/examples/datasets/inflation-by-region.ts +44 -0
  501. package/examples/datasets/inflation-ranges.ts +34 -0
  502. package/examples/datasets/iris-flower.ts +207 -0
  503. package/examples/datasets/life-expectancy.ts +95 -0
  504. package/examples/datasets/napoleons-march.ts +182 -0
  505. package/examples/datasets/penguins.ts +54 -0
  506. package/examples/datasets/population-by-age-with-gaps.ts +23 -0
  507. package/examples/datasets/population-by-age.ts +890 -0
  508. package/examples/datasets/province-population.ts +521 -0
  509. package/examples/datasets/stock-prices.ts +63 -0
  510. package/examples/datasets/weather-stations-over-time.ts +31 -0
  511. package/examples/datasets/weather-stations.ts +22 -0
  512. package/examples/datasets/wind-vectors.ts +30 -0
  513. package/examples/datasets/world-temperature.ts +400 -0
  514. package/llms-full.txt +51 -12
  515. package/llms.txt +60 -4
  516. package/package.json +12 -2
  517. package/dist/layout/scales/buildScale.d.ts +0 -8
  518. package/dist/layout/scales/buildScale.js +0 -67
  519. package/dist/layout/scales/niceDomain.d.ts +0 -23
  520. package/dist/layout/scales/niceDomain.js +0 -59
  521. package/dist/plots/bar/defaults.d.ts +0 -9
  522. package/dist/plots/geo/features.svelte.d.ts +0 -5
  523. package/dist/plots/geo/features.svelte.js +0 -44
  524. package/dist/plots/geo/phases/tooltip.js +0 -5
  525. package/dist/plots/utils/geoAccessors.d.ts +0 -72
  526. package/dist/plots/utils/geoAccessors.js +0 -220
  527. package/dist/plots/utils/geoSegments.d.ts +0 -29
  528. package/dist/plots/utils/geoSegments.js +0 -37
  529. package/dist/types/layout/styles.d.ts +0 -122
  530. package/dist/types/markers/axis/curveName.d.ts +0 -2
  531. package/dist/types/plots/line/props.d.ts +0 -10
  532. package/dist/utils/color/contrast.d.ts +0 -9
  533. package/dist/utils/color/contrast.js +0 -40
  534. package/dist/utils/color/cssColor.d.ts +0 -4
  535. package/dist/utils/color/cssColor.js +0 -77
  536. package/dist/utils/color/ramp.d.ts +0 -17
  537. package/dist/utils/color/ramp.js +0 -110
  538. package/dist/utils/opacity.d.ts +0 -9
  539. package/dist/utils/opacity.js +0 -38
  540. package/examples/data.ts +0 -12
  541. /package/dist/types/layout/{styles.js → statistics/deviation.js} +0 -0
  542. /package/dist/types/{markers/axis/curveName.js → layout/styles/base.js} +0 -0
  543. /package/dist/types/{plots/area/props.js → layout/styles/bullet.js} +0 -0
  544. /package/dist/types/{plots/area/state.js → layout/styles/connector.js} +0 -0
  545. /package/dist/types/{plots/bar/props.js → layout/styles/curve.js} +0 -0
  546. /package/dist/types/{plots/bar/state.js → layout/styles/frame.js} +0 -0
  547. /package/dist/types/{plots/geo/props.js → layout/styles/gaps.js} +0 -0
  548. /package/dist/types/{plots/geo/state.js → layout/styles/geo.js} +0 -0
  549. /package/dist/types/{plots/heatmap/props.js → layout/styles/values.js} +0 -0
  550. /package/dist/types/{plots/heatmap/state.js → markers/axis/violin.js} +0 -0
  551. /package/dist/types/{plots/histogram/props.js → markers/channels/commonMarkerConfigWithRowOffset.js} +0 -0
  552. /package/dist/types/plots/{line → correlation/heatmap}/props.js +0 -0
  553. /package/dist/types/plots/{histogram → correlation/heatmap}/state.js +0 -0
  554. /package/dist/types/plots/{pyramid → correlation/scatter}/props.js +0 -0
  555. /package/dist/types/plots/{line → correlation/scatter}/state.js +0 -0
  556. /package/dist/types/plots/{scatter → distribution/box}/props.js +0 -0
  557. /package/dist/types/plots/{pyramid → distribution/box}/state.js +0 -0
  558. /package/dist/types/plots/{scatter/state.js → distribution/density/props.js} +0 -0
  559. /package/dist/{plots/utils → utils}/accessors.d.ts +0 -0
  560. /package/dist/{plots/utils → utils}/accessors.js +0 -0
@@ -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,4 +1,5 @@
1
- import { HoverPhase } from '../../../phases/hover/HoverPhase';
1
+ import { LegendState } from '../../../../layout/legend/LegendState.svelte';
2
+ import { HoverSettings } from '../../../../layout/hover/HoverSettings';
2
3
  /** Whether a pointer event is over an `inset` marker's panel, which has its own hover. */
3
4
  export function isOverInset(e) {
4
5
  return e.target?.closest?.('.dct-geo-inset') != null;
@@ -14,10 +15,10 @@ export function buildHover(state, ctx) {
14
15
  const features = state.features;
15
16
  const label = (f) => f.__id;
16
17
  const points = features
17
- .filter((f) => !range || !color || HoverPhase.inRange(color(f), range))
18
+ .filter((f) => !range || !color || LegendState.inRange(color(f), range))
18
19
  .map((f) => ({ x: f.__cx, y: f.__cy, row: f, label: label(f) }));
19
20
  const hover = {
20
- ...HoverPhase.buildHoverConfig({
21
+ ...HoverSettings.buildConfig({
21
22
  tooltip: tooltip,
22
23
  format: state.tooltipFormat,
23
24
  markers: authoredMarkers,
@@ -27,8 +28,7 @@ export function buildHover(state, ctx) {
27
28
  // Match the feature under the cursor, not the nearest centroid.
28
29
  pointMatching: 'contains'
29
30
  }),
30
- // A map has no axis to draw a crosshair rule against - 'punctual' here
31
- // only means "exact XY hover match", unlike heatmap's own use of it.
31
+ // A map has no axes for a crosshair: 'punctual' only means an exact match.
32
32
  strategy: 'punctual',
33
33
  crosshair: false,
34
34
  exclude: isOverInset
@@ -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
@@ -1,6 +1,7 @@
1
- import { HoverPhase } from '../../../phases/hover/HoverPhase';
2
- import { resolveFeatureStyle } from '../../utils/geoSegments';
3
- import { DisabledStyle } from '../../../layout/legend/DisabledStyle';
1
+ import { LegendState } from '../../../../layout/legend/LegendState.svelte';
2
+ import { GeoSegments } from '../GeoSegments';
3
+ import { MarkerChannels } from '../../../../markers/utils/MarkerChannels';
4
+ import { DisabledStyle } from '../../../../layout/legend/DisabledStyle';
4
5
  /**
5
6
  * `graticule`/`sphere`/`contour` opt into drawing underneath the base map's
6
7
  * own fill/stroke instead of on top of it - see each config's own `behind`
@@ -24,13 +25,12 @@ export function buildMarkers(state, ctx) {
24
25
  function rangeFilteredStyle(base, f) {
25
26
  if (range == null || !color)
26
27
  return base;
27
- const v = color(f);
28
- if (v == null || (v >= range.min && v <= range.max))
28
+ if (LegendState.inRange(color(f), range))
29
29
  return base;
30
30
  return { ...base, ...DisabledStyle.fill(range.disabledStyle) };
31
31
  }
32
32
  function getFeatureStyle(f) {
33
- return rangeFilteredStyle(resolveFeatureStyle(segments, f.__id, grouping?.(f)), f);
33
+ return rangeFilteredStyle(GeoSegments.style(segments, f.__id, grouping?.(f)), f);
34
34
  }
35
35
  const groups = new Map();
36
36
  for (const f of features) {
@@ -51,7 +51,7 @@ export function buildMarkers(state, ctx) {
51
51
  }
52
52
  // What the pointer can match: the features inside the legend's range, by id.
53
53
  const hoverable = new Map(features
54
- .filter((f) => !range || !color || HoverPhase.inRange(color(f), range))
54
+ .filter((f) => !range || !color || LegendState.inRange(color(f), range))
55
55
  .map((f) => [f.__id, f]));
56
56
  const featureMarkers = styleGroups.map((group) => ({
57
57
  type: 'geo',
@@ -66,11 +66,6 @@ export function buildMarkers(state, ctx) {
66
66
  const behindMarkers = authoredMarkers.filter(isBehindMarker);
67
67
  const frontMarkers = authoredMarkers.filter((m) => !isBehindMarker(m) && m.type !== 'geo-hover');
68
68
  const hoverMarker = authoredMarkers.find((m) => m.type === 'geo-hover');
69
- const markers = [
70
- ...behindMarkers,
71
- ...featureMarkers,
72
- ...frontMarkers,
73
- ...(hoverMarker ? [hoverMarker] : [])
74
- ];
69
+ const markers = MarkerChannels.inheritAll([...behindMarkers, ...featureMarkers, ...frontMarkers, ...(hoverMarker ? [hoverMarker] : [])], state.scales);
75
70
  return { ...state, markers, styleGroups };
76
71
  }
@@ -1,9 +1,9 @@
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 "scales" phase: each feature's own resolved color (mirrors
4
4
  * HeatmapPlot's own), with a per-feature override for whichever segment
5
5
  * (its `grouping` bucket, or itself by id) sets its own `scales.color` -
6
- * see `resolveFeatureScales`. A segment ramp's domain is built from just
6
+ * see `GeoSegments.scales`. A segment ramp's domain is built from just
7
7
  * the features that share its own key, so e.g. two grouping buckets each
8
8
  * get a ramp scaled to their own value range, not the whole dataset's.
9
9
  */