@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundar/data-chart-telling",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "description": "Declarative charts, maps and small multiples for Svelte, built on svelteplot.",
5
5
  "license": "MIT",
6
6
  "author": "Ezequiel Puerta",
@@ -26,6 +26,14 @@
26
26
  "docs",
27
27
  "!docs/images",
28
28
  "examples",
29
+ "!examples/geo",
30
+ "!examples/datasets/amba-partidos.ts",
31
+ "!examples/datasets/argentina-provinces.ts",
32
+ "!examples/datasets/caba-comunas.ts",
33
+ "!examples/datasets/napoleons-rivers.ts",
34
+ "!examples/datasets/usa-country.ts",
35
+ "!examples/datasets/world-countries.ts",
36
+ "!examples/datasets/world-countries-topology.ts",
29
37
  "llms.txt",
30
38
  "llms-full.txt"
31
39
  ],
@@ -120,9 +128,11 @@
120
128
  "format": "prettier --write .",
121
129
  "test": "vitest run --project=unit --project=browser",
122
130
  "test:coverage": "node scripts/coverage.mjs",
131
+ "test:perf": "vitest run --project=perf --reporter=verbose",
123
132
  "test:stories": "vitest run --project=storybook",
124
133
  "storybook": "storybook dev -p 6006",
125
134
  "build-storybook": "storybook build",
126
- "docs:images": "node scripts/docs-images.mjs"
135
+ "docs:images": "node scripts/docs-images.mjs",
136
+ "docs:examples": "node scripts/sync-examples.mjs"
127
137
  }
128
138
  }
@@ -1,8 +0,0 @@
1
- import type { AxisScale } from '../../types/layout/scales';
2
- import type { AxisValue } from '../../types/layout/mapping';
3
- /**
4
- * An {@link AxisScale} as svelteplot's `<Plot x>`/`<Plot y>` accepts it: without
5
- * `grid`, `axisDisplay` and a vertical `label`, which `ScalesLayout` draws, and
6
- * with `nice: true` on an unpinned numeric axis.
7
- */
8
- export declare function buildScale<TData>(scale: AxisScale<TData> | undefined, rows: TData[], getAxisValue: (d: TData) => AxisValue): AxisScale<TData> | undefined;
@@ -1,67 +0,0 @@
1
- import { SvelteSet } from 'svelte/reactivity';
2
- /** One representative row per unique axis value (first occurrence in `rows`). */
3
- function uniqueRows(rows, getAxisValue) {
4
- const seen = new SvelteSet();
5
- const out = [];
6
- for (const row of rows) {
7
- const v = getAxisValue(row);
8
- if (seen.has(v))
9
- continue;
10
- seen.add(v);
11
- out.push(row);
12
- }
13
- return out;
14
- }
15
- /** svelteplot's `sort` option only does a fixed ascending sort; a custom `scale.sort` comparator is resolved into an explicit `domain` instead, which svelteplot honors as-is. */
16
- function sortedScale(scale, rows, getAxisValue) {
17
- const sort = scale?.sort;
18
- if (!sort || scale?.domain)
19
- return scale;
20
- const reps = uniqueRows(rows, getAxisValue);
21
- if (reps.length === 0 || !reps.every((r) => typeof getAxisValue(r) === 'string'))
22
- return scale;
23
- const domain = [...reps].sort(sort).map(getAxisValue);
24
- return { ...scale, domain };
25
- }
26
- /** Scale types {@link buildScale}'s default `nice` only applies to - every other type has its own tick semantics (or isn't numeric at all). */
27
- const CONTINUOUS_NUMERIC_TYPES = new Set(['auto', 'linear', 'pow', 'sqrt', 'log', 'symlog']);
28
- /** Whether the axis' values are numeric; `nice` on a categorical axis would make svelteplot treat it as linear. */
29
- function isNumericAxis(rows, getAxisValue) {
30
- let numericSeen = 0;
31
- for (const row of rows) {
32
- const v = getAxisValue(row);
33
- if (v == null)
34
- continue;
35
- if (typeof v !== 'number')
36
- return false;
37
- if (++numericSeen >= 2)
38
- return true;
39
- }
40
- return numericSeen > 0;
41
- }
42
- /**
43
- * An {@link AxisScale} as svelteplot's `<Plot x>`/`<Plot y>` accepts it: without
44
- * `grid`, `axisDisplay` and a vertical `label`, which `ScalesLayout` draws, and
45
- * with `nice: true` on an unpinned numeric axis.
46
- */
47
- export function buildScale(scale, rows, getAxisValue) {
48
- const sorted = sortedScale(scale, rows, getAxisValue);
49
- const wantsNice = scale?.domain == null &&
50
- scale?.ticks == null &&
51
- scale?.nice == null &&
52
- (scale?.type == null || CONTINUOUS_NUMERIC_TYPES.has(scale.type)) &&
53
- isNumericAxis(rows, getAxisValue);
54
- const removesAxis = scale?.axisDisplay === 'none';
55
- if (!sorted && !wantsNice && !removesAxis)
56
- return sorted;
57
- const out = { ...sorted };
58
- delete out.grid;
59
- delete out.axisDisplay;
60
- if (removesAxis)
61
- out.axis = false;
62
- if (scale?.labelOrientation === 'vertical')
63
- out.label = false;
64
- if (wantsNice)
65
- out.nice = true;
66
- return out;
67
- }
@@ -1,23 +0,0 @@
1
- /** Step between "nice" (1/2/5×10ⁿ) tick values for an approximate `count` over `[start, stop]`. */
2
- export declare function tickStep(start: number, stop: number, count: number): number;
3
- /** Multiples of `step` covering `[start, stop]`, inclusive of either endpoint when it lands exactly on one. */
4
- export declare function ticksInRange(start: number, stop: number, step: number): number[];
5
- /** Ticks-per-axis heuristic - used by `ScalesLayout` to pick a target count from an axis's actual pixel span. */
6
- export declare function naturalTickCount(span: number, spacing: number, min: number): number;
7
- /**
8
- * Widens `[lo, hi]` outward to the nearest `count`-ish "nice" step -
9
- * equivalent to d3's own `scale.nice(count)`, except a value within
10
- * `epsilonFraction × step` of a step boundary is treated as already sitting
11
- * on it, rather than needing a full extra step to clear it.
12
- *
13
- * Exists because plain `Math.ceil`/`Math.floor` (what `nice()` uses
14
- * internally, both here and in d3) has zero tolerance: a value meant to be
15
- * exactly `100` that comes out `100.00000000000001` after summing several
16
- * independently-rounded parts (a common shape for "these categories add up
17
- * to a whole" data, e.g. percentages of a total) still fails `hi <= step*N`
18
- * and gets rounded up a full step further than the data actually warrants
19
- * (`100` → `110`, not just a hair past `100`). `epsilonFraction` defaults to
20
- * 1% of the step - small enough to only catch rounding/summation noise, not
21
- * data that's genuinely meaningfully past the boundary.
22
- */
23
- export declare function niceDomain(lo: number, hi: number, count?: number, epsilonFraction?: number): [number, number];
@@ -1,59 +0,0 @@
1
- // d3-array-compatible "nice" tick step/generation, reimplemented locally to
2
- // avoid depending on internals svelteplot itself pulls in (not one of our
3
- // declared dependencies) - see https://d3js.org/d3-array/ticks.
4
- /** Step between "nice" (1/2/5×10ⁿ) tick values for an approximate `count` over `[start, stop]`. */
5
- export function tickStep(start, stop, count) {
6
- const e10 = Math.sqrt(50);
7
- const e5 = Math.sqrt(10);
8
- const e2 = Math.sqrt(2);
9
- const step0 = Math.abs(stop - start) / Math.max(0, count);
10
- let step1 = 10 ** Math.floor(Math.log10(step0));
11
- const error = step0 / step1;
12
- if (error >= e10)
13
- step1 *= 10;
14
- else if (error >= e5)
15
- step1 *= 5;
16
- else if (error >= e2)
17
- step1 *= 2;
18
- return step1;
19
- }
20
- /** Multiples of `step` covering `[start, stop]`, inclusive of either endpoint when it lands exactly on one. */
21
- export function ticksInRange(start, stop, step) {
22
- if (!(step > 0) || !Number.isFinite(step))
23
- return [];
24
- const lo = Math.ceil(start / step);
25
- const hi = Math.floor(stop / step);
26
- const out = [];
27
- for (let i = lo; i <= hi; i++)
28
- out.push(i * step);
29
- return out;
30
- }
31
- /** Ticks-per-axis heuristic - used by `ScalesLayout` to pick a target count from an axis's actual pixel span. */
32
- export function naturalTickCount(span, spacing, min) {
33
- return Math.max(min, Math.round(span / spacing));
34
- }
35
- /**
36
- * Widens `[lo, hi]` outward to the nearest `count`-ish "nice" step -
37
- * equivalent to d3's own `scale.nice(count)`, except a value within
38
- * `epsilonFraction × step` of a step boundary is treated as already sitting
39
- * on it, rather than needing a full extra step to clear it.
40
- *
41
- * Exists because plain `Math.ceil`/`Math.floor` (what `nice()` uses
42
- * internally, both here and in d3) has zero tolerance: a value meant to be
43
- * exactly `100` that comes out `100.00000000000001` after summing several
44
- * independently-rounded parts (a common shape for "these categories add up
45
- * to a whole" data, e.g. percentages of a total) still fails `hi <= step*N`
46
- * and gets rounded up a full step further than the data actually warrants
47
- * (`100` → `110`, not just a hair past `100`). `epsilonFraction` defaults to
48
- * 1% of the step - small enough to only catch rounding/summation noise, not
49
- * data that's genuinely meaningfully past the boundary.
50
- */
51
- export function niceDomain(lo, hi, count = 5, epsilonFraction = 0.01) {
52
- if (!(hi > lo))
53
- return [lo, hi];
54
- const step = tickStep(lo, hi, count);
55
- const eps = step * epsilonFraction;
56
- const niceLo = Math.floor((lo + eps) / step) * step;
57
- const niceHi = Math.ceil((hi - eps) / step) * step;
58
- return [niceLo, niceHi];
59
- }
@@ -1,9 +0,0 @@
1
- import type { AxisPlotDefaults } from '../../types/phases';
2
- import type { BarPlotState, BarPlotCtx } from '../../types/plots/bar/state';
3
- /**
4
- * BarPlot on the shared pipeline: discrete bars with gap fills along one
5
- * category axis - `x`, or `y` for horizontal bars, as the "data" phase reads
6
- * it off the values - its own scales (padding, bar layout) and markers.
7
- * Its plot defaults to: hover along the category axis, timeline tweens matched per category and group.
8
- */
9
- export declare function buildBarDefaults<TData extends Record<string, unknown>>(): AxisPlotDefaults<BarPlotState<TData>, BarPlotCtx>;
@@ -1,5 +0,0 @@
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`. */
3
- export declare function createGeoFeatures<TProps extends Record<string, unknown>>(getData: () => GeoJsonInput<TProps> | Topology, getObject: () => string | undefined): {
4
- readonly features: GeoFeature<TProps>[];
5
- };
@@ -1,44 +0,0 @@
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`. */
3
- export function createGeoFeatures(getData, getObject) {
4
- let topoFeatures = $state(null);
5
- $effect(() => {
6
- const data = getData();
7
- const object = getObject();
8
- if (!isTopology(data))
9
- return;
10
- if (!object) {
11
- console.warn('GeoPlot: `data` is a TopoJSON Topology but no `object` key was given - nothing will render.');
12
- topoFeatures = [];
13
- return;
14
- }
15
- let cancelled = false;
16
- topologyToGeoJson(data, object)
17
- .then((resolved) => {
18
- if (!cancelled)
19
- topoFeatures = resolved;
20
- })
21
- .catch((err) => {
22
- if (!cancelled) {
23
- console.warn(err instanceof Error ? err.message : String(err));
24
- topoFeatures = [];
25
- }
26
- });
27
- return () => {
28
- cancelled = true;
29
- };
30
- });
31
- const features = $derived.by(() => {
32
- const data = getData();
33
- if (isTopology(data))
34
- return topoFeatures ?? [];
35
- if (Array.isArray(data))
36
- return data;
37
- return data.features;
38
- });
39
- return {
40
- get features() {
41
- return features;
42
- }
43
- };
44
- }
@@ -1,5 +0,0 @@
1
- import { defaultFeatureId } from '../../utils/geoAccessors';
2
- /** GeoPlot's "tooltip" phase: a hovered feature reads as its id. */
3
- export function buildTooltip(state) {
4
- return { ...state, tooltipFormat: (f) => defaultFeatureId(f) };
5
- }
@@ -1,72 +0,0 @@
1
- import type { GeoFeature } from '../../types/plots/data/geo';
2
- /**
3
- * Bounding-box center of a geometry's flattened coordinates - a cheap
4
- * approximation used for default label placement, not a true
5
- * geographic/area centroid (no polygon-hole or geodesic-area weighting).
6
- * For hover-matching specifically, see `geometryPartCentroids` instead -
7
- * this single combined point can land far from every actual part of a
8
- * multi-part geometry whose pieces are geographically spread out.
9
- */
10
- export declare function geometryCentroid(geometry: GeoJSON.Geometry): [number, number];
11
- /**
12
- * Splits a geometry into its disjoint parts: one `Polygon` per element of a
13
- * `MultiPolygon`'s `coordinates`, one `LineString` per element of a
14
- * `MultiLineString`'s, `GeometryCollection` recursed and flattened, and any
15
- * other geometry type returned unchanged as its own single-element array.
16
- * The shared building block behind `geometryPartCentroids` (one centroid per
17
- * part) and `filterGeometryParts` (keep/drop whole parts).
18
- */
19
- export declare function splitGeometryParts(geometry: GeoJSON.Geometry): GeoJSON.Geometry[];
20
- /**
21
- * Like `geometryCentroid`, but returns one point per disjoint part instead
22
- * of a single bounding-box center across all of them. A `MultiPolygon`
23
- * whose parts are geographically far apart - e.g. Argentina's "Tierra del
24
- * Fuego, Antártida e Islas del Atlántico Sur" province, whose `MultiPolygon`
25
- * spans the mainland island, the Antarctic sector, and the South Atlantic
26
- * islands in one feature - would otherwise get a single hover point
27
- * stranded somewhere between all of them, matching hovers over *none* of
28
- * the actually-rendered shapes. Multiple points attributed to the same
29
- * feature is fine for hover-matching (nearest point wins, whichever part
30
- * that is); it's only label placement (`geometryCentroid`) that needs a
31
- * single point.
32
- */
33
- export declare function geometryPartCentroids(geometry: GeoJSON.Geometry): [number, number][];
34
- /**
35
- * Keeps or drops each disjoint part of a geometry (see `splitGeometryParts`)
36
- * based on a per-part predicate, reassembling a geometry of the same type
37
- * from whatever survives - `null` if nothing does. Used to let a single
38
- * feature's geometry be split between the main map and an `inset` marker
39
- * (see `GeoDataProps.excludeParts`/`GeoInsetMarkerConfig.featurePartsFilter`)
40
- * without preprocessing the source data: e.g. a province whose `MultiPolygon`
41
- * spans both a mainland part and a far-flung part can have the main map
42
- * exclude the latter while an inset shows only it.
43
- */
44
- export declare function filterGeometryParts(geometry: GeoJSON.Geometry, keep: (part: {
45
- centroid: [number, number];
46
- geometry: GeoJSON.Geometry;
47
- }) => boolean): GeoJSON.Geometry | null;
48
- /** Default `featureId`: `feature.id`, else `properties.id`, else `properties.name`. */
49
- export declare function defaultFeatureId<TProps extends Record<string, unknown>>(f: GeoFeature<TProps>): string;
50
- /**
51
- * `[minLon, minLat, maxLon, maxLat]` across every coordinate of a geometry -
52
- * `null` for one with none (an empty `GeometryCollection`). Used by
53
- * `Plot.svelte`'s `dataLonLatBounds` to cap how far a tile layer's
54
- * letterboxed margin reaches (see `clampBoundsToDataPadding` in
55
- * `$lib/plots/utils/tiles`).
56
- */
57
- export declare function geometryLonLatBounds(geometry: GeoJSON.Geometry): [number, number, number, number] | null;
58
- /**
59
- * Densifies a great-circle arc between two lon/lat points into `steps + 1`
60
- * points via spherical linear interpolation (slerp) - used to draw a `link`
61
- * marker's geodesic curve through the `Geo` mark (see `Plot.svelte`).
62
- *
63
- * Not delegated to svelteplot's own `Link` mark: its 0.14.2 projection
64
- * integration (`Mark.svelte`'s paired-channel handling) reads a single
65
- * `row.x`/`row.y` pair regardless of channel suffix, so a mark bound to
66
- * `x1`/`y1`/`x2`/`y2` (never plain `x`/`y`) resolves every point as invalid
67
- * whenever the plot has an active `projection` scale - which GeoPlot always
68
- * does. `Geo` has no such limitation (geo marks are explicitly excluded from
69
- * that code path), so a manually-interpolated `LineString` feature sidesteps
70
- * the bug entirely while still producing the same geodesic visual.
71
- */
72
- export declare function greatCircleInterpolate(lon1: number, lat1: number, lon2: number, lat2: number, steps?: number): [number, number][];
@@ -1,220 +0,0 @@
1
- function flattenCoords(geom, out) {
2
- switch (geom.type) {
3
- case 'Point':
4
- out.push(geom.coordinates);
5
- break;
6
- case 'MultiPoint':
7
- case 'LineString':
8
- for (const c of geom.coordinates)
9
- out.push(c);
10
- break;
11
- case 'MultiLineString':
12
- case 'Polygon':
13
- for (const ring of geom.coordinates) {
14
- for (const c of ring)
15
- out.push(c);
16
- }
17
- break;
18
- case 'MultiPolygon':
19
- for (const poly of geom.coordinates) {
20
- for (const ring of poly) {
21
- for (const c of ring)
22
- out.push(c);
23
- }
24
- }
25
- break;
26
- case 'GeometryCollection':
27
- for (const g of geom.geometries)
28
- flattenCoords(g, out);
29
- break;
30
- }
31
- }
32
- function boundsCenter(coords) {
33
- if (coords.length === 0)
34
- return [0, 0];
35
- let minX = Infinity;
36
- let maxX = -Infinity;
37
- let minY = Infinity;
38
- let maxY = -Infinity;
39
- for (const [x, y] of coords) {
40
- if (x < minX)
41
- minX = x;
42
- if (x > maxX)
43
- maxX = x;
44
- if (y < minY)
45
- minY = y;
46
- if (y > maxY)
47
- maxY = y;
48
- }
49
- return [(minX + maxX) / 2, (minY + maxY) / 2];
50
- }
51
- /**
52
- * Bounding-box center of a geometry's flattened coordinates - a cheap
53
- * approximation used for default label placement, not a true
54
- * geographic/area centroid (no polygon-hole or geodesic-area weighting).
55
- * For hover-matching specifically, see `geometryPartCentroids` instead -
56
- * this single combined point can land far from every actual part of a
57
- * multi-part geometry whose pieces are geographically spread out.
58
- */
59
- export function geometryCentroid(geometry) {
60
- const coords = [];
61
- flattenCoords(geometry, coords);
62
- return boundsCenter(coords);
63
- }
64
- /**
65
- * Splits a geometry into its disjoint parts: one `Polygon` per element of a
66
- * `MultiPolygon`'s `coordinates`, one `LineString` per element of a
67
- * `MultiLineString`'s, `GeometryCollection` recursed and flattened, and any
68
- * other geometry type returned unchanged as its own single-element array.
69
- * The shared building block behind `geometryPartCentroids` (one centroid per
70
- * part) and `filterGeometryParts` (keep/drop whole parts).
71
- */
72
- export function splitGeometryParts(geometry) {
73
- switch (geometry.type) {
74
- case 'MultiPolygon':
75
- return geometry.coordinates.map((polygon) => ({ type: 'Polygon', coordinates: polygon }));
76
- case 'MultiLineString':
77
- return geometry.coordinates.map((line) => ({ type: 'LineString', coordinates: line }));
78
- case 'GeometryCollection':
79
- return geometry.geometries.flatMap((g) => splitGeometryParts(g));
80
- default:
81
- return [geometry];
82
- }
83
- }
84
- /**
85
- * Like `geometryCentroid`, but returns one point per disjoint part instead
86
- * of a single bounding-box center across all of them. A `MultiPolygon`
87
- * whose parts are geographically far apart - e.g. Argentina's "Tierra del
88
- * Fuego, Antártida e Islas del Atlántico Sur" province, whose `MultiPolygon`
89
- * spans the mainland island, the Antarctic sector, and the South Atlantic
90
- * islands in one feature - would otherwise get a single hover point
91
- * stranded somewhere between all of them, matching hovers over *none* of
92
- * the actually-rendered shapes. Multiple points attributed to the same
93
- * feature is fine for hover-matching (nearest point wins, whichever part
94
- * that is); it's only label placement (`geometryCentroid`) that needs a
95
- * single point.
96
- */
97
- export function geometryPartCentroids(geometry) {
98
- return splitGeometryParts(geometry).map((part) => geometryCentroid(part));
99
- }
100
- /**
101
- * Keeps or drops each disjoint part of a geometry (see `splitGeometryParts`)
102
- * based on a per-part predicate, reassembling a geometry of the same type
103
- * from whatever survives - `null` if nothing does. Used to let a single
104
- * feature's geometry be split between the main map and an `inset` marker
105
- * (see `GeoDataProps.excludeParts`/`GeoInsetMarkerConfig.featurePartsFilter`)
106
- * without preprocessing the source data: e.g. a province whose `MultiPolygon`
107
- * spans both a mainland part and a far-flung part can have the main map
108
- * exclude the latter while an inset shows only it.
109
- */
110
- export function filterGeometryParts(geometry, keep) {
111
- const parts = splitGeometryParts(geometry);
112
- const keptParts = parts.filter((part) => keep({ centroid: geometryCentroid(part), geometry: part }));
113
- if (keptParts.length === parts.length)
114
- return geometry;
115
- if (keptParts.length === 0)
116
- return null;
117
- if (parts.length === 1)
118
- return keptParts[0];
119
- switch (geometry.type) {
120
- case 'MultiPolygon':
121
- return {
122
- type: 'MultiPolygon',
123
- coordinates: keptParts.map((part) => part.coordinates)
124
- };
125
- case 'MultiLineString':
126
- return {
127
- type: 'MultiLineString',
128
- coordinates: keptParts.map((part) => part.coordinates)
129
- };
130
- case 'GeometryCollection':
131
- return { type: 'GeometryCollection', geometries: keptParts };
132
- default:
133
- return geometry;
134
- }
135
- }
136
- /** Default `featureId`: `feature.id`, else `properties.id`, else `properties.name`. */
137
- export function defaultFeatureId(f) {
138
- const props = f.properties;
139
- return String(f.id ?? props?.id ?? props?.name ?? '');
140
- }
141
- /**
142
- * `[minLon, minLat, maxLon, maxLat]` across every coordinate of a geometry -
143
- * `null` for one with none (an empty `GeometryCollection`). Used by
144
- * `Plot.svelte`'s `dataLonLatBounds` to cap how far a tile layer's
145
- * letterboxed margin reaches (see `clampBoundsToDataPadding` in
146
- * `$lib/plots/utils/tiles`).
147
- */
148
- export function geometryLonLatBounds(geometry) {
149
- const coords = [];
150
- flattenCoords(geometry, coords);
151
- if (coords.length === 0)
152
- return null;
153
- let minLon = Infinity;
154
- let maxLon = -Infinity;
155
- let minLat = Infinity;
156
- let maxLat = -Infinity;
157
- for (const [lon, lat] of coords) {
158
- if (lon < minLon)
159
- minLon = lon;
160
- if (lon > maxLon)
161
- maxLon = lon;
162
- if (lat < minLat)
163
- minLat = lat;
164
- if (lat > maxLat)
165
- maxLat = lat;
166
- }
167
- return [minLon, minLat, maxLon, maxLat];
168
- }
169
- function toRad(deg) {
170
- return (deg * Math.PI) / 180;
171
- }
172
- function toDeg(rad) {
173
- return (rad * 180) / Math.PI;
174
- }
175
- /**
176
- * Densifies a great-circle arc between two lon/lat points into `steps + 1`
177
- * points via spherical linear interpolation (slerp) - used to draw a `link`
178
- * marker's geodesic curve through the `Geo` mark (see `Plot.svelte`).
179
- *
180
- * Not delegated to svelteplot's own `Link` mark: its 0.14.2 projection
181
- * integration (`Mark.svelte`'s paired-channel handling) reads a single
182
- * `row.x`/`row.y` pair regardless of channel suffix, so a mark bound to
183
- * `x1`/`y1`/`x2`/`y2` (never plain `x`/`y`) resolves every point as invalid
184
- * whenever the plot has an active `projection` scale - which GeoPlot always
185
- * does. `Geo` has no such limitation (geo marks are explicitly excluded from
186
- * that code path), so a manually-interpolated `LineString` feature sidesteps
187
- * the bug entirely while still producing the same geodesic visual.
188
- */
189
- export function greatCircleInterpolate(lon1, lat1, lon2, lat2, steps = 64) {
190
- const phi1 = toRad(lat1);
191
- const lambda1 = toRad(lon1);
192
- const phi2 = toRad(lat2);
193
- const lambda2 = toRad(lon2);
194
- const sinPhi1 = Math.sin(phi1);
195
- const cosPhi1 = Math.cos(phi1);
196
- const sinPhi2 = Math.sin(phi2);
197
- const cosPhi2 = Math.cos(phi2);
198
- const d = 2 *
199
- Math.asin(Math.sqrt(Math.sin((phi2 - phi1) / 2) ** 2 +
200
- cosPhi1 * cosPhi2 * Math.sin((lambda2 - lambda1) / 2) ** 2));
201
- if (!Number.isFinite(d) || d === 0) {
202
- return [
203
- [lon1, lat1],
204
- [lon2, lat2]
205
- ];
206
- }
207
- const points = [];
208
- for (let i = 0; i <= steps; i++) {
209
- const f = i / steps;
210
- const a = Math.sin((1 - f) * d) / Math.sin(d);
211
- const b = Math.sin(f * d) / Math.sin(d);
212
- const x = a * cosPhi1 * Math.cos(lambda1) + b * cosPhi2 * Math.cos(lambda2);
213
- const y = a * cosPhi1 * Math.sin(lambda1) + b * cosPhi2 * Math.sin(lambda2);
214
- const z = a * sinPhi1 + b * sinPhi2;
215
- const phi = Math.atan2(z, Math.sqrt(x * x + y * y));
216
- const lambda = Math.atan2(y, x);
217
- points.push([toDeg(lambda), toDeg(phi)]);
218
- }
219
- return points;
220
- }
@@ -1,29 +0,0 @@
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
- * Feature-specific segments listed after 'default' so they override it on
6
- * merge (see `resolveFeatureStyle`). When the feature has a resolved
7
- * `grouping` bucket, that bucket's own entries are listed in between -
8
- * `default` < grouping bucket < feature-specific, most specific last.
9
- */
10
- export declare function resolveSegmentsForFeature<TStyle>(segments: SegmentsConfig<TStyle>, featureId: string, groupingValue?: string): Segment<TStyle>[];
11
- /**
12
- * A geo feature is atomic - `Segment.areas` (x/y range restriction) doesn't
13
- * apply, so every entry under a key is treated as a flat style patch applied
14
- * in order: `'default'` entries apply first, then the grouping bucket's (if
15
- * any), then feature-specific entries. This intentionally does NOT reuse
16
- * `segments.ts`'s `validateSegments` - its "only the first catch-all wins"
17
- * warning assumes area-based semantics that don't hold here, since every geo
18
- * segment entry merges rather than being dropped.
19
- */
20
- export declare function resolveFeatureStyle<TStyle extends object>(segments: SegmentsConfig<TStyle>, featureId: string, groupingValue?: string): TStyle;
21
- /**
22
- * A feature's own effective `scales` override, if any of its matching
23
- * segments (`default`, its grouping bucket, or itself) set one - the last
24
- * (most specific) entry that defines `scales` wins outright, unlike
25
- * `resolveFeatureStyle`'s field-by-field merge, since a ramp config isn't
26
- * sensibly mergeable key-by-key (a `domain` from one entry and a `scheme`
27
- * from another wouldn't be a coherent scale).
28
- */
29
- export declare function resolveFeatureScales<TStyle>(segments: SegmentsConfig<TStyle>, featureId: string, groupingValue?: string): ChannelScalesConfig | undefined;
@@ -1,37 +0,0 @@
1
- const DEFAULT_KEY = 'default';
2
- /**
3
- * Feature-specific segments listed after 'default' so they override it on
4
- * merge (see `resolveFeatureStyle`). When the feature has a resolved
5
- * `grouping` bucket, that bucket's own entries are listed in between -
6
- * `default` < grouping bucket < feature-specific, most specific last.
7
- */
8
- export function resolveSegmentsForFeature(segments, featureId, groupingValue) {
9
- return [
10
- ...(segments[DEFAULT_KEY] ?? []),
11
- ...(groupingValue ? (segments[groupingValue] ?? []) : []),
12
- ...(segments[featureId] ?? [])
13
- ];
14
- }
15
- /**
16
- * A geo feature is atomic - `Segment.areas` (x/y range restriction) doesn't
17
- * apply, so every entry under a key is treated as a flat style patch applied
18
- * in order: `'default'` entries apply first, then the grouping bucket's (if
19
- * any), then feature-specific entries. This intentionally does NOT reuse
20
- * `segments.ts`'s `validateSegments` - its "only the first catch-all wins"
21
- * warning assumes area-based semantics that don't hold here, since every geo
22
- * segment entry merges rather than being dropped.
23
- */
24
- export function resolveFeatureStyle(segments, featureId, groupingValue) {
25
- return resolveSegmentsForFeature(segments, featureId, groupingValue).reduce((acc, seg) => ({ ...acc, ...(seg.styles ?? {}) }), {});
26
- }
27
- /**
28
- * A feature's own effective `scales` override, if any of its matching
29
- * segments (`default`, its grouping bucket, or itself) set one - the last
30
- * (most specific) entry that defines `scales` wins outright, unlike
31
- * `resolveFeatureStyle`'s field-by-field merge, since a ramp config isn't
32
- * sensibly mergeable key-by-key (a `domain` from one entry and a `scheme`
33
- * from another wouldn't be a coherent scale).
34
- */
35
- export function resolveFeatureScales(segments, featureId, groupingValue) {
36
- return resolveSegmentsForFeature(segments, featureId, groupingValue).reduce((acc, seg) => seg.scales ?? acc, undefined);
37
- }