@fundar/data-chart-telling 1.1.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 (524) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +6 -6
  3. package/dist/configuration/config.svelte.d.ts +1 -1
  4. package/dist/configuration/config.svelte.js +165 -100
  5. package/dist/configuration/themes/index.d.ts +5 -1428
  6. package/dist/index.d.ts +23 -14
  7. package/dist/index.js +20 -11
  8. package/dist/layout/base/BasePlotLayout.svelte +115 -50
  9. package/dist/layout/base/BasePlotLayout.svelte.d.ts +1 -38
  10. package/dist/layout/coordinates/CoordinatesLayout.svelte +42 -40
  11. package/dist/layout/coordinates/CoordinatesLayout.svelte.d.ts +0 -2
  12. package/dist/layout/coordinates/ProjectionZoom.svelte +48 -0
  13. package/dist/layout/coordinates/ProjectionZoom.svelte.d.ts +10 -0
  14. package/dist/layout/coordinates/ZoomedProjection.d.ts +11 -0
  15. package/dist/layout/coordinates/ZoomedProjection.js +24 -0
  16. package/dist/layout/coordinates/camera.svelte.js +11 -8
  17. package/dist/layout/coordinates/projections/argentina.js +1 -1
  18. package/dist/layout/coordinates/projections/fit.d.ts +1 -1
  19. package/dist/layout/coordinates/projections/fit.js +1 -1
  20. package/dist/layout/coordinates/zoom.svelte.d.ts +4 -5
  21. package/dist/layout/coordinates/zoom.svelte.js +4 -5
  22. package/dist/layout/facet/FacetLayout.svelte +1 -1
  23. package/dist/layout/facet/config.js +1 -1
  24. package/dist/layout/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/legend/ContinuousSection.svelte +44 -9
  31. package/dist/layout/legend/DiscreteBadgeItem.svelte +2 -2
  32. package/dist/layout/legend/DiscreteSection.svelte +2 -2
  33. package/dist/layout/legend/DiscreteSymbolIcon.svelte +1 -1
  34. package/dist/layout/legend/LegendChannels.js +36 -12
  35. package/dist/layout/legend/LegendLayout.svelte +9 -1
  36. package/dist/layout/legend/LegendState.svelte.d.ts +4 -0
  37. package/dist/layout/legend/LegendState.svelte.js +20 -3
  38. package/dist/layout/legend/SizeSection.svelte +1 -1
  39. package/dist/layout/margins/PlotMargins.svelte.d.ts +2 -5
  40. package/dist/layout/margins/PlotMargins.svelte.js +4 -8
  41. package/dist/layout/plot/Slice.d.ts +5 -1
  42. package/dist/layout/plot/Slice.js +14 -4
  43. package/dist/layout/scales/NiceTicks.d.ts +3 -0
  44. package/dist/layout/scales/NiceTicks.js +4 -0
  45. package/dist/layout/scales/ScalesLayout.svelte +72 -7
  46. package/dist/layout/scales/ScalesLayout.svelte.d.ts +5 -0
  47. package/dist/layout/scales/SveltePlotScale.d.ts +2 -2
  48. package/dist/layout/scales/SveltePlotScale.js +13 -6
  49. package/dist/layout/scales/TickLabels.d.ts +32 -0
  50. package/dist/layout/scales/TickLabels.js +55 -0
  51. package/dist/layout/styles/StylesLayout.svelte +2 -2
  52. package/dist/layout/styles/ValueLabels.d.ts +33 -5
  53. package/dist/layout/styles/ValueLabels.js +80 -21
  54. package/dist/layout/timeline/TimelineLayout.svelte +1 -1
  55. package/dist/layout/tooltip/Tooltip.svelte +4 -4
  56. package/dist/layout/tooltip/Tooltip.svelte.d.ts +4 -4
  57. package/dist/layout/tooltip/TooltipState.svelte.js +1 -1
  58. package/dist/markers/MarkerKinds.d.ts +5 -0
  59. package/dist/markers/MarkerKinds.js +1 -0
  60. package/dist/markers/area/AreaMarker.svelte +15 -63
  61. package/dist/markers/arrow/ArrowMarker.svelte +51 -9
  62. package/dist/markers/bar/BarMarker.svelte +8 -4
  63. package/dist/markers/bollinger/BollingerMarker.svelte +33 -18
  64. package/dist/markers/box/BoxMarker.svelte +40 -9
  65. package/dist/markers/delta/Delta.js +1 -1
  66. package/dist/markers/dot/DotMarker.svelte +24 -27
  67. package/dist/markers/image/ImageMarker.svelte +17 -12
  68. package/dist/markers/inset/InsetMarker.svelte +2 -2
  69. package/dist/markers/line/LineMarker.svelte +1 -0
  70. package/dist/markers/link/LinkMarker.svelte +174 -29
  71. package/dist/markers/regression/RegressionMarker.svelte +16 -33
  72. package/dist/markers/rule/RuleMarker.svelte +9 -3
  73. package/dist/markers/text/Declutter.d.ts +4 -0
  74. package/dist/markers/text/Declutter.js +26 -11
  75. package/dist/markers/text/TextMarker.svelte +91 -48
  76. package/dist/markers/tick/TickMarker.svelte +27 -25
  77. package/dist/markers/utils/MarkerChannels.d.ts +24 -0
  78. package/dist/markers/utils/MarkerChannels.js +42 -7
  79. package/dist/markers/utils/RowOffset.d.ts +23 -0
  80. package/dist/markers/utils/RowOffset.js +23 -0
  81. package/dist/markers/utils/RowOffsetMarks.svelte +30 -0
  82. package/dist/markers/utils/RowOffsetMarks.svelte.d.ts +33 -0
  83. package/dist/markers/utils/RowStroke.d.ts +31 -0
  84. package/dist/markers/utils/RowStroke.js +28 -0
  85. package/dist/markers/violin/ViolinMarker.svelte +75 -0
  86. package/dist/markers/violin/ViolinMarker.svelte.d.ts +7 -0
  87. package/dist/markers/violin/ViolinProfiles.d.ts +29 -0
  88. package/dist/markers/violin/ViolinProfiles.js +55 -0
  89. package/dist/markers/waffle/WaffleMarker.svelte +17 -37
  90. package/dist/phases/Pipeline.d.ts +5 -0
  91. package/dist/phases/Pipeline.js +5 -0
  92. package/dist/phases/data/DataPhase.js +3 -3
  93. package/dist/phases/data/PlotAxes.d.ts +10 -0
  94. package/dist/phases/data/PlotAxes.js +14 -1
  95. package/dist/phases/facet/FacetPanels.d.ts +1 -0
  96. package/dist/phases/facet/FacetPanels.js +1 -0
  97. package/dist/phases/mapping/MappingPhase.js +1 -1
  98. package/dist/phases/markers/MarkersPhase.js +2 -1
  99. package/dist/phases/scales/CategoryOrder.d.ts +23 -0
  100. package/dist/phases/scales/CategoryOrder.js +73 -0
  101. package/dist/phases/scales/ScalesPhase.js +21 -7
  102. package/dist/phases/sharedScales/SharedScalesPhase.d.ts +3 -2
  103. package/dist/phases/sharedScales/SharedScalesPhase.js +5 -2
  104. package/dist/phases/statistics/Statistics.d.ts +10 -6
  105. package/dist/phases/statistics/Statistics.js +20 -10
  106. package/dist/phases/statistics/StatisticsPhase.js +7 -2
  107. package/dist/phases/statistics/methods/BollingerStatistic.d.ts +1 -1
  108. package/dist/phases/statistics/methods/BollingerStatistic.js +13 -11
  109. package/dist/phases/statistics/methods/BoxStatistic.d.ts +1 -1
  110. package/dist/phases/statistics/methods/BoxStatistic.js +14 -12
  111. package/dist/phases/statistics/methods/Density2dStatistic.d.ts +1 -1
  112. package/dist/phases/statistics/methods/Density2dStatistic.js +13 -11
  113. package/dist/phases/statistics/methods/DensityStatistic.d.ts +1 -1
  114. package/dist/phases/statistics/methods/DensityStatistic.js +11 -9
  115. package/dist/phases/statistics/methods/DeviationStatistic.d.ts +8 -0
  116. package/dist/phases/statistics/methods/DeviationStatistic.js +111 -0
  117. package/dist/phases/statistics/methods/MovingAverageStatistic.d.ts +1 -1
  118. package/dist/phases/statistics/methods/MovingAverageStatistic.js +11 -9
  119. package/dist/phases/statistics/methods/RegressionStatistic.d.ts +1 -1
  120. package/dist/phases/statistics/methods/RegressionStatistic.js +16 -14
  121. package/dist/phases/transforms/ProcessedPositions.js +1 -1
  122. package/dist/phases/transforms/TransformsPhase.js +49 -3
  123. package/dist/phases/transforms/ValueSelection.d.ts +30 -0
  124. package/dist/phases/transforms/ValueSelection.js +53 -0
  125. package/dist/plots/{heatmap → correlation/heatmap}/Plot.svelte +5 -2
  126. package/dist/plots/{heatmap → correlation/heatmap}/Plot.svelte.d.ts +2 -2
  127. package/dist/plots/{heatmap → correlation/heatmap}/defaults.d.ts +2 -2
  128. package/dist/plots/{heatmap → correlation/heatmap}/defaults.js +5 -5
  129. package/dist/plots/{heatmap → correlation/heatmap}/markers.d.ts +4 -4
  130. package/dist/plots/{heatmap → correlation/heatmap}/markers.js +3 -3
  131. package/dist/plots/{scatter → correlation/scatter}/Plot.svelte +5 -2
  132. package/dist/plots/{scatter → correlation/scatter}/Plot.svelte.d.ts +2 -2
  133. package/dist/plots/{scatter → correlation/scatter}/defaults.d.ts +2 -2
  134. package/dist/plots/{scatter → correlation/scatter}/defaults.js +4 -4
  135. package/dist/plots/{scatter → correlation/scatter}/markers.d.ts +4 -4
  136. package/dist/plots/{scatter → correlation/scatter}/markers.js +3 -3
  137. package/dist/plots/{box → distribution/box}/BoxSummaries.d.ts +2 -2
  138. package/dist/plots/{box → distribution/box}/BoxSummaries.js +6 -6
  139. package/dist/plots/{box → distribution/box}/Plot.svelte +2 -2
  140. package/dist/plots/{box → distribution/box}/Plot.svelte.d.ts +2 -2
  141. package/dist/plots/{box → distribution/box}/defaults.d.ts +2 -2
  142. package/dist/plots/{box → distribution/box}/defaults.js +1 -1
  143. package/dist/plots/{box → distribution/box}/markers.d.ts +2 -2
  144. package/dist/plots/distribution/density/Plot.svelte +45 -0
  145. package/dist/plots/distribution/density/Plot.svelte.d.ts +26 -0
  146. package/dist/plots/distribution/density/defaults.d.ts +9 -0
  147. package/dist/plots/distribution/density/defaults.js +29 -0
  148. package/dist/plots/distribution/density/markers.d.ts +9 -0
  149. package/dist/plots/distribution/density/markers.js +42 -0
  150. package/dist/plots/{histogram → distribution/histogram}/Plot.svelte +2 -2
  151. package/dist/plots/{histogram → distribution/histogram}/Plot.svelte.d.ts +2 -2
  152. package/dist/plots/{histogram → distribution/histogram}/defaults.d.ts +2 -2
  153. package/dist/plots/{histogram → distribution/histogram}/defaults.js +3 -3
  154. package/dist/plots/{histogram → distribution/histogram}/markers.d.ts +3 -3
  155. package/dist/plots/{histogram → distribution/histogram}/markers.js +5 -5
  156. package/dist/plots/{pyramid → distribution/pyramid}/Plot.svelte +5 -2
  157. package/dist/plots/{pyramid → distribution/pyramid}/Plot.svelte.d.ts +2 -2
  158. package/dist/plots/{pyramid → distribution/pyramid}/defaults.d.ts +2 -2
  159. package/dist/plots/{pyramid → distribution/pyramid}/defaults.js +6 -6
  160. package/dist/plots/{pyramid → distribution/pyramid}/markers.d.ts +4 -4
  161. package/dist/plots/{pyramid → distribution/pyramid}/markers.js +6 -6
  162. package/dist/plots/distribution/violin/Plot.svelte +45 -0
  163. package/dist/plots/distribution/violin/Plot.svelte.d.ts +26 -0
  164. package/dist/plots/distribution/violin/defaults.d.ts +10 -0
  165. package/dist/plots/distribution/violin/defaults.js +58 -0
  166. package/dist/plots/distribution/violin/markers.d.ts +10 -0
  167. package/dist/plots/distribution/violin/markers.js +71 -0
  168. package/dist/plots/{area → evolution/area}/Plot.svelte +2 -2
  169. package/dist/plots/{area → evolution/area}/Plot.svelte.d.ts +2 -2
  170. package/dist/plots/{area → evolution/area}/defaults.d.ts +2 -2
  171. package/dist/plots/{area → evolution/area}/defaults.js +2 -0
  172. package/dist/plots/{area → evolution/area}/markers.d.ts +2 -2
  173. package/dist/plots/{area → evolution/area}/markers.js +1 -1
  174. package/dist/plots/{line → evolution/line}/Plot.svelte +2 -2
  175. package/dist/plots/{line → evolution/line}/Plot.svelte.d.ts +2 -2
  176. package/dist/plots/{line → evolution/line}/defaults.d.ts +2 -2
  177. package/dist/plots/{line → evolution/line}/defaults.js +2 -0
  178. package/dist/plots/{line → evolution/line}/markers.d.ts +11 -8
  179. package/dist/plots/{line → evolution/line}/markers.js +6 -4
  180. package/dist/plots/evolution/slope/Plot.svelte +42 -0
  181. package/dist/plots/evolution/slope/Plot.svelte.d.ts +26 -0
  182. package/dist/plots/evolution/slope/defaults.d.ts +8 -0
  183. package/dist/plots/evolution/slope/defaults.js +31 -0
  184. package/dist/plots/evolution/slope/markers.d.ts +16 -0
  185. package/dist/plots/evolution/slope/markers.js +79 -0
  186. package/dist/plots/evolution/sparkline/Plot.svelte +45 -0
  187. package/dist/plots/evolution/sparkline/Plot.svelte.d.ts +26 -0
  188. package/dist/plots/evolution/sparkline/defaults.d.ts +7 -0
  189. package/dist/plots/evolution/sparkline/defaults.js +23 -0
  190. package/dist/plots/evolution/sparkline/markers.d.ts +7 -0
  191. package/dist/plots/evolution/sparkline/markers.js +56 -0
  192. package/dist/plots/{geo → map/geo}/Core.svelte +11 -10
  193. package/dist/plots/{geo → map/geo}/Core.svelte.d.ts +1 -1
  194. package/dist/plots/map/geo/GeoFeatures.svelte.d.ts +9 -0
  195. package/dist/plots/map/geo/GeoFeatures.svelte.js +55 -0
  196. package/dist/plots/map/geo/GeoGeometry.d.ts +27 -0
  197. package/dist/plots/map/geo/GeoGeometry.js +142 -0
  198. package/dist/plots/map/geo/GeoSegments.d.ts +16 -0
  199. package/dist/plots/map/geo/GeoSegments.js +23 -0
  200. package/dist/plots/{geo → map/geo}/Plot.svelte +10 -10
  201. package/dist/plots/{geo → map/geo}/Plot.svelte.d.ts +2 -2
  202. package/dist/plots/{geo → map/geo}/defaults.d.ts +2 -2
  203. package/dist/plots/{geo → map/geo}/defaults.js +1 -1
  204. package/dist/plots/{geo → map/geo}/phases/data.d.ts +1 -1
  205. package/dist/plots/{geo → map/geo}/phases/data.js +7 -6
  206. package/dist/plots/{geo → map/geo}/phases/hover.d.ts +1 -1
  207. package/dist/plots/{geo → map/geo}/phases/hover.js +2 -2
  208. package/dist/plots/{geo → map/geo}/phases/markers.d.ts +1 -1
  209. package/dist/plots/{geo → map/geo}/phases/markers.js +6 -10
  210. package/dist/plots/{geo → map/geo}/phases/scales.d.ts +2 -2
  211. package/dist/plots/{geo → map/geo}/phases/scales.js +28 -12
  212. package/dist/plots/{geo → map/geo}/phases/tooltip.d.ts +1 -1
  213. package/dist/plots/map/geo/phases/tooltip.js +5 -0
  214. package/dist/plots/{geo → map/geo}/slices.d.ts +2 -2
  215. package/dist/plots/{geo → map/geo}/slices.js +2 -2
  216. package/dist/plots/{bar → ranking/bar}/Plot.svelte +2 -2
  217. package/dist/plots/{bar → ranking/bar}/Plot.svelte.d.ts +2 -2
  218. package/dist/plots/ranking/bar/defaults.d.ts +16 -0
  219. package/dist/plots/{bar → ranking/bar}/defaults.js +15 -9
  220. package/dist/plots/{bar → ranking/bar}/markers.d.ts +8 -8
  221. package/dist/plots/{bar → ranking/bar}/markers.js +8 -17
  222. package/dist/plots/ranking/bullet/Plot.svelte +42 -0
  223. package/dist/plots/ranking/bullet/Plot.svelte.d.ts +26 -0
  224. package/dist/plots/ranking/bullet/defaults.d.ts +8 -0
  225. package/dist/plots/ranking/bullet/defaults.js +24 -0
  226. package/dist/plots/ranking/bullet/markers.d.ts +10 -0
  227. package/dist/plots/ranking/bullet/markers.js +90 -0
  228. package/dist/plots/ranking/cleveland/ClevelandConnector.d.ts +48 -0
  229. package/dist/plots/ranking/cleveland/ClevelandConnector.js +140 -0
  230. package/dist/plots/ranking/cleveland/ClevelandMarkers.d.ts +33 -0
  231. package/dist/plots/ranking/cleveland/ClevelandMarkers.js +375 -0
  232. package/dist/plots/ranking/cleveland/ClevelandRanges.d.ts +31 -0
  233. package/dist/plots/ranking/cleveland/ClevelandRanges.js +116 -0
  234. package/dist/plots/ranking/cleveland/Plot.svelte +45 -0
  235. package/dist/plots/ranking/cleveland/Plot.svelte.d.ts +26 -0
  236. package/dist/plots/ranking/cleveland/defaults.d.ts +13 -0
  237. package/dist/plots/ranking/cleveland/defaults.js +66 -0
  238. package/dist/plots/ranking/dumbbell/Plot.svelte +45 -0
  239. package/dist/plots/ranking/dumbbell/Plot.svelte.d.ts +26 -0
  240. package/dist/plots/ranking/dumbbell/defaults.d.ts +9 -0
  241. package/dist/plots/ranking/dumbbell/defaults.js +19 -0
  242. package/dist/plots/ranking/forest/Plot.svelte +42 -0
  243. package/dist/plots/ranking/forest/Plot.svelte.d.ts +26 -0
  244. package/dist/plots/ranking/forest/defaults.d.ts +11 -0
  245. package/dist/plots/ranking/forest/defaults.js +20 -0
  246. package/dist/plots/ranking/lollipop/Plot.svelte +45 -0
  247. package/dist/plots/ranking/lollipop/Plot.svelte.d.ts +26 -0
  248. package/dist/plots/ranking/lollipop/defaults.d.ts +9 -0
  249. package/dist/plots/ranking/lollipop/defaults.js +18 -0
  250. package/dist/plots/utils/RowNumbers.d.ts +16 -0
  251. package/dist/plots/utils/RowNumbers.js +24 -0
  252. package/dist/plots/utils/gaps.js +1 -1
  253. package/dist/plots/utils/segments.js +1 -1
  254. package/dist/types/configuration/styling.d.ts +276 -143
  255. package/dist/types/layout/coordinates.d.ts +5 -4
  256. package/dist/types/layout/legend.d.ts +21 -5
  257. package/dist/types/layout/plot.d.ts +44 -1
  258. package/dist/types/layout/scales.d.ts +39 -7
  259. package/dist/types/layout/statistics/deviation.d.ts +40 -0
  260. package/dist/types/layout/statistics/index.d.ts +7 -2
  261. package/dist/types/layout/styles/base.d.ts +18 -0
  262. package/dist/types/layout/styles/bullet.d.ts +25 -0
  263. package/dist/types/layout/styles/connector.d.ts +98 -0
  264. package/dist/types/layout/styles/curve.d.ts +11 -0
  265. package/dist/types/layout/styles/frame.d.ts +17 -0
  266. package/dist/types/layout/styles/gaps.d.ts +12 -0
  267. package/dist/types/layout/styles/geo.d.ts +55 -0
  268. package/dist/types/layout/styles/index.d.ts +8 -0
  269. package/dist/types/layout/styles/index.js +8 -0
  270. package/dist/types/layout/styles/values.d.ts +47 -0
  271. package/dist/types/layout/timeline.d.ts +5 -2
  272. package/dist/types/layout/tooltip.d.ts +6 -2
  273. package/dist/types/markers/axis/area.d.ts +2 -2
  274. package/dist/types/markers/axis/arrow.d.ts +3 -0
  275. package/dist/types/markers/axis/axisBasedMarkersConfig.d.ts +2 -1
  276. package/dist/types/markers/axis/bar.d.ts +1 -1
  277. package/dist/types/markers/axis/box.d.ts +5 -0
  278. package/dist/types/markers/axis/difference.d.ts +2 -2
  279. package/dist/types/markers/axis/image.d.ts +3 -2
  280. package/dist/types/markers/axis/line.d.ts +2 -0
  281. package/dist/types/markers/axis/rule.d.ts +9 -0
  282. package/dist/types/markers/axis/trail.d.ts +2 -3
  283. package/dist/types/markers/axis/violin.d.ts +25 -0
  284. package/dist/types/markers/basic/dot.d.ts +3 -2
  285. package/dist/types/markers/basic/text.d.ts +13 -3
  286. package/dist/types/markers/channels/commonMarkerConfig.d.ts +7 -3
  287. package/dist/types/markers/channels/commonMarkerConfigWithRowOffset.d.ts +13 -0
  288. package/dist/types/markers/common.d.ts +1 -1
  289. package/dist/types/markers/common.js +1 -0
  290. package/dist/types/markers/geo/link.d.ts +5 -1
  291. package/dist/types/phases/index.d.ts +1 -1
  292. package/dist/types/phases/scales/phase.d.ts +5 -1
  293. package/dist/types/phases/state.d.ts +15 -2
  294. package/dist/types/phases/statistics/source.d.ts +3 -1
  295. package/dist/types/phases/transforms/phase.d.ts +22 -0
  296. package/dist/types/plots/{heatmap → correlation/heatmap}/props.d.ts +6 -6
  297. package/dist/types/plots/{heatmap → correlation/heatmap}/state.d.ts +4 -4
  298. package/dist/types/plots/{scatter → correlation/scatter}/props.d.ts +6 -6
  299. package/dist/types/plots/{scatter → correlation/scatter}/state.d.ts +2 -2
  300. package/dist/types/plots/{box → distribution/box}/props.d.ts +6 -6
  301. package/dist/types/plots/{box → distribution/box}/state.d.ts +3 -3
  302. package/dist/types/plots/distribution/density/props.d.ts +23 -0
  303. package/dist/types/plots/distribution/density/state.d.ts +6 -0
  304. package/dist/types/plots/{histogram → distribution/histogram}/props.d.ts +7 -7
  305. package/dist/types/plots/{histogram → distribution/histogram}/state.d.ts +2 -2
  306. package/dist/types/plots/distribution/histogram/state.js +1 -0
  307. package/dist/types/plots/{pyramid → distribution/pyramid}/props.d.ts +6 -6
  308. package/dist/types/plots/distribution/pyramid/props.js +1 -0
  309. package/dist/types/plots/{pyramid → distribution/pyramid}/state.d.ts +3 -3
  310. package/dist/types/plots/distribution/pyramid/state.js +1 -0
  311. package/dist/types/plots/distribution/violin/props.d.ts +23 -0
  312. package/dist/types/plots/distribution/violin/props.js +1 -0
  313. package/dist/types/plots/distribution/violin/state.d.ts +6 -0
  314. package/dist/types/plots/distribution/violin/state.js +1 -0
  315. package/dist/types/plots/{area → evolution/area}/props.d.ts +6 -6
  316. package/dist/types/plots/evolution/area/props.js +1 -0
  317. package/dist/types/plots/{area → evolution/area}/state.d.ts +2 -2
  318. package/dist/types/plots/evolution/area/state.js +1 -0
  319. package/dist/types/plots/evolution/line/props.d.ts +10 -0
  320. package/dist/types/plots/evolution/line/props.js +1 -0
  321. package/dist/types/plots/{line → evolution/line}/state.d.ts +3 -3
  322. package/dist/types/plots/evolution/line/state.js +1 -0
  323. package/dist/types/plots/evolution/slope/props.d.ts +5 -0
  324. package/dist/types/plots/evolution/slope/props.js +1 -0
  325. package/dist/types/plots/evolution/slope/state.d.ts +5 -0
  326. package/dist/types/plots/evolution/slope/state.js +1 -0
  327. package/dist/types/plots/evolution/sparkline/props.d.ts +5 -0
  328. package/dist/types/plots/evolution/sparkline/props.js +1 -0
  329. package/dist/types/plots/evolution/sparkline/state.d.ts +5 -0
  330. package/dist/types/plots/evolution/sparkline/state.js +1 -0
  331. package/dist/types/plots/{geo → map/geo}/props.d.ts +8 -8
  332. package/dist/types/plots/map/geo/props.js +1 -0
  333. package/dist/types/plots/{geo → map/geo}/state.d.ts +18 -11
  334. package/dist/types/plots/map/geo/state.js +1 -0
  335. package/dist/types/plots/props.d.ts +1 -1
  336. package/dist/types/plots/{bar → ranking/bar}/props.d.ts +6 -6
  337. package/dist/types/plots/ranking/bar/props.js +1 -0
  338. package/dist/types/plots/{bar → ranking/bar}/state.d.ts +2 -2
  339. package/dist/types/plots/ranking/bar/state.js +1 -0
  340. package/dist/types/plots/ranking/bullet/props.d.ts +22 -0
  341. package/dist/types/plots/ranking/bullet/props.js +1 -0
  342. package/dist/types/plots/ranking/bullet/state.d.ts +5 -0
  343. package/dist/types/plots/ranking/bullet/state.js +1 -0
  344. package/dist/types/plots/ranking/cleveland/props.d.ts +10 -0
  345. package/dist/types/plots/ranking/cleveland/props.js +1 -0
  346. package/dist/types/plots/ranking/cleveland/state.d.ts +49 -0
  347. package/dist/types/plots/ranking/cleveland/state.js +1 -0
  348. package/dist/types/plots/ranking/dumbbell/props.d.ts +10 -0
  349. package/dist/types/plots/ranking/dumbbell/props.js +1 -0
  350. package/dist/types/plots/ranking/dumbbell/state.d.ts +5 -0
  351. package/dist/types/plots/ranking/dumbbell/state.js +1 -0
  352. package/dist/types/plots/ranking/forest/props.d.ts +23 -0
  353. package/dist/types/plots/ranking/forest/props.js +1 -0
  354. package/dist/types/plots/ranking/forest/state.d.ts +5 -0
  355. package/dist/types/plots/ranking/forest/state.js +1 -0
  356. package/dist/types/plots/ranking/lollipop/props.d.ts +10 -0
  357. package/dist/types/plots/ranking/lollipop/props.js +1 -0
  358. package/dist/types/plots/ranking/lollipop/state.d.ts +5 -0
  359. package/dist/types/plots/ranking/lollipop/state.js +1 -0
  360. package/dist/types/plots/segments/common.d.ts +4 -1
  361. package/dist/utils/OpacityScale.d.ts +14 -0
  362. package/dist/utils/OpacityScale.js +43 -0
  363. package/dist/utils/{symbol.d.ts → SymbolPath.d.ts} +0 -12
  364. package/dist/utils/{symbol.js → SymbolPath.js} +0 -24
  365. package/dist/utils/SymbolScale.d.ts +18 -0
  366. package/dist/utils/SymbolScale.js +29 -0
  367. package/dist/utils/color/ColorRamp.d.ts +27 -0
  368. package/dist/utils/color/ColorRamp.js +120 -0
  369. package/dist/utils/color/CssColor.d.ts +19 -0
  370. package/dist/utils/color/CssColor.js +114 -0
  371. package/dist/utils/color/Palette.d.ts +21 -0
  372. package/dist/utils/color/Palette.js +52 -0
  373. package/dist/utils/color/index.d.ts +11 -3
  374. package/dist/utils/color/index.js +14 -3
  375. package/dist/utils/grouping.js +1 -1
  376. package/docs/architecture.md +1 -1
  377. package/docs/chrome.md +2 -2
  378. package/docs/composer.md +2 -2
  379. package/docs/concepts.md +1 -1
  380. package/docs/development.md +1 -1
  381. package/docs/facets.md +3 -3
  382. package/docs/getting-started.md +2 -2
  383. package/docs/legend.md +13 -11
  384. package/docs/markers.md +29 -27
  385. package/docs/plots/correlation/heatmap.md +26 -0
  386. package/docs/plots/correlation/scatter.md +35 -0
  387. package/docs/plots/distribution/box.md +28 -0
  388. package/docs/plots/distribution/density.md +26 -0
  389. package/docs/plots/distribution/histogram.md +33 -0
  390. package/docs/plots/distribution/pyramid.md +31 -0
  391. package/docs/plots/distribution/violin.md +35 -0
  392. package/docs/plots/evolution/area.md +32 -0
  393. package/docs/plots/evolution/line.md +93 -0
  394. package/docs/plots/evolution/slope.md +39 -0
  395. package/docs/plots/evolution/sparkline.md +34 -0
  396. package/docs/plots/ranking/bar.md +59 -0
  397. package/docs/plots/ranking/bullet.md +37 -0
  398. package/docs/plots/ranking/cleveland.md +54 -0
  399. package/docs/plots/ranking/dumbbell.md +39 -0
  400. package/docs/plots/ranking/forest.md +40 -0
  401. package/docs/plots/ranking/lollipop.md +39 -0
  402. package/docs/plots.md +22 -280
  403. package/docs/scales.md +30 -24
  404. package/docs/styles-and-segments.md +24 -21
  405. package/docs/theming.md +23 -20
  406. package/docs/timeline.md +3 -3
  407. package/docs/tooltip-and-hover.md +10 -10
  408. package/docs/transforms-and-statistics.md +13 -12
  409. package/examples/BarValues.svelte +1 -1
  410. package/examples/Box.svelte +1 -1
  411. package/examples/Bullet.svelte +17 -0
  412. package/examples/Chrome.svelte +1 -1
  413. package/examples/ChromeOrder.svelte +1 -1
  414. package/examples/Cleveland.svelte +15 -0
  415. package/examples/Composer.svelte +2 -2
  416. package/examples/CustomTooltip.svelte +1 -1
  417. package/examples/Density.svelte +7 -0
  418. package/examples/Dumbbell.svelte +16 -0
  419. package/examples/Facets.svelte +1 -1
  420. package/examples/FacetsCarousel.svelte +1 -1
  421. package/examples/FacetsRowsCols.svelte +1 -1
  422. package/examples/FirstPlot.svelte +1 -1
  423. package/examples/Forest.svelte +17 -0
  424. package/examples/Gaps.svelte +2 -2
  425. package/examples/GroupedBars.svelte +1 -1
  426. package/examples/Heatmap.svelte +3 -3
  427. package/examples/HeatmapSegments.svelte +8 -8
  428. package/examples/Histogram.svelte +1 -1
  429. package/examples/HorizontalBars.svelte +1 -1
  430. package/examples/LegendSections.svelte +1 -1
  431. package/examples/LegendToggle.svelte +1 -1
  432. package/examples/LineByRegion.svelte +1 -1
  433. package/examples/LineDates.svelte +1 -1
  434. package/examples/LineStep.svelte +16 -0
  435. package/examples/LineStepSegment.svelte +18 -0
  436. package/examples/Lollipop.svelte +17 -0
  437. package/examples/Markers.svelte +1 -1
  438. package/examples/MovingAverage.svelte +1 -1
  439. package/examples/Pyramid.svelte +9 -2
  440. package/examples/Regression.svelte +2 -2
  441. package/examples/ResponsiveLine.svelte +1 -1
  442. package/examples/Scales.svelte +1 -1
  443. package/examples/Scatter.svelte +2 -2
  444. package/examples/SegmentHighlight.svelte +1 -1
  445. package/examples/Segments.svelte +1 -1
  446. package/examples/SegmentsBySeries.svelte +1 -1
  447. package/examples/Slope.svelte +17 -0
  448. package/examples/Sparkline.svelte +14 -0
  449. package/examples/StackedArea.svelte +1 -1
  450. package/examples/StackedBars.svelte +1 -1
  451. package/examples/TimelinePlayer.svelte +1 -1
  452. package/examples/TimelineRule.svelte +1 -1
  453. package/examples/Tooltip.svelte +1 -1
  454. package/examples/ValueLabels.svelte +1 -1
  455. package/examples/Violin.svelte +14 -0
  456. package/examples/datasets/argentina-chile-trends.ts +34 -0
  457. package/examples/datasets/commodity-prices.ts +48 -0
  458. package/examples/datasets/countries-over-time.ts +368 -0
  459. package/examples/datasets/daily-temperature.ts +121 -0
  460. package/examples/datasets/earthquakes.ts +977 -0
  461. package/examples/datasets/flight-routes.ts +29 -0
  462. package/examples/datasets/height-density.ts +37 -0
  463. package/examples/datasets/heights.ts +370 -0
  464. package/examples/datasets/index.ts +24 -0
  465. package/examples/datasets/inflation-by-region.ts +44 -0
  466. package/examples/datasets/inflation-ranges.ts +34 -0
  467. package/examples/datasets/iris-flower.ts +207 -0
  468. package/examples/datasets/life-expectancy.ts +95 -0
  469. package/examples/datasets/napoleons-march.ts +182 -0
  470. package/examples/datasets/penguins.ts +54 -0
  471. package/examples/datasets/population-by-age-with-gaps.ts +23 -0
  472. package/examples/datasets/population-by-age.ts +890 -0
  473. package/examples/datasets/province-population.ts +521 -0
  474. package/examples/datasets/stock-prices.ts +63 -0
  475. package/examples/datasets/weather-stations-over-time.ts +31 -0
  476. package/examples/datasets/weather-stations.ts +22 -0
  477. package/examples/datasets/wind-vectors.ts +30 -0
  478. package/examples/datasets/world-temperature.ts +400 -0
  479. package/llms-full.txt +22 -11
  480. package/llms.txt +32 -4
  481. package/package.json +10 -1
  482. package/dist/plots/bar/defaults.d.ts +0 -9
  483. package/dist/plots/geo/features.svelte.d.ts +0 -5
  484. package/dist/plots/geo/features.svelte.js +0 -44
  485. package/dist/plots/geo/phases/tooltip.js +0 -5
  486. package/dist/plots/utils/geoAccessors.d.ts +0 -72
  487. package/dist/plots/utils/geoAccessors.js +0 -220
  488. package/dist/plots/utils/geoSegments.d.ts +0 -29
  489. package/dist/plots/utils/geoSegments.js +0 -37
  490. package/dist/types/layout/styles.d.ts +0 -122
  491. package/dist/types/markers/axis/curveName.d.ts +0 -2
  492. package/dist/types/plots/line/props.d.ts +0 -10
  493. package/dist/utils/color/contrast.d.ts +0 -9
  494. package/dist/utils/color/contrast.js +0 -40
  495. package/dist/utils/color/cssColor.d.ts +0 -4
  496. package/dist/utils/color/cssColor.js +0 -77
  497. package/dist/utils/color/ramp.d.ts +0 -17
  498. package/dist/utils/color/ramp.js +0 -110
  499. package/dist/utils/opacity.d.ts +0 -9
  500. package/dist/utils/opacity.js +0 -38
  501. package/examples/data.ts +0 -324
  502. /package/dist/plots/{box → distribution/box}/markers.js +0 -0
  503. /package/dist/types/layout/{styles.js → statistics/deviation.js} +0 -0
  504. /package/dist/types/{markers/axis/curveName.js → layout/styles/base.js} +0 -0
  505. /package/dist/types/{plots/area/props.js → layout/styles/bullet.js} +0 -0
  506. /package/dist/types/{plots/area/state.js → layout/styles/connector.js} +0 -0
  507. /package/dist/types/{plots/bar/props.js → layout/styles/curve.js} +0 -0
  508. /package/dist/types/{plots/bar/state.js → layout/styles/frame.js} +0 -0
  509. /package/dist/types/{plots/box/props.js → layout/styles/gaps.js} +0 -0
  510. /package/dist/types/{plots/box/state.js → layout/styles/geo.js} +0 -0
  511. /package/dist/types/{plots/geo/props.js → layout/styles/values.js} +0 -0
  512. /package/dist/types/{plots/geo/state.js → markers/axis/violin.js} +0 -0
  513. /package/dist/types/{plots/heatmap/props.js → markers/channels/commonMarkerConfigWithRowOffset.js} +0 -0
  514. /package/dist/types/plots/{histogram → correlation/heatmap}/props.js +0 -0
  515. /package/dist/types/plots/{heatmap → correlation/heatmap}/state.js +0 -0
  516. /package/dist/types/plots/{line → correlation/scatter}/props.js +0 -0
  517. /package/dist/types/plots/{histogram → correlation/scatter}/state.js +0 -0
  518. /package/dist/types/plots/{pyramid → distribution/box}/props.js +0 -0
  519. /package/dist/types/plots/{line → distribution/box}/state.js +0 -0
  520. /package/dist/types/plots/{scatter → distribution/density}/props.js +0 -0
  521. /package/dist/types/plots/{pyramid → distribution/density}/state.js +0 -0
  522. /package/dist/types/plots/{scatter/state.js → distribution/histogram/props.js} +0 -0
  523. /package/dist/{plots/utils → utils}/accessors.d.ts +0 -0
  524. /package/dist/{plots/utils → utils}/accessors.js +0 -0
@@ -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
- }
@@ -1,122 +0,0 @@
1
- import type { ValueAnchor } from '../plots/constants';
2
- import type { FontStyle, StrokeStyle, AreaStyle } from '../plots/styling';
3
- import type { GeoFeature } from '../plots/data/geo';
4
- import type { GapsConfig } from '../plots/gaps';
5
- /**
6
- * Controls if and how value labels are rendered on a plot, drawn as a `text`
7
- * marker over the rows the plot itself draws (after its own `transforms`):
8
- * one at the end of each series on a line or area plot, one per bar on a bar,
9
- * pyramid or histogram plot, one per point on a scatter plot and one per cell
10
- * on a heatmap. The high-level `anchor` sets sensible defaults for placement;
11
- * `fontStyle` (`dx`, `dy`, `textAnchor`, `lineAnchor`, `lineHeight`, `rotate`,
12
- * `class`, `textClass`, `fill`, …) overrides those defaults field-by-field when
13
- * provided - mirrors {@link DeltaConfig}'s `fontStyle`/`strokeStyle` split, so
14
- * label text and connector-line styling never mix into one flat bag of props.
15
- */
16
- export type ValuesStyle = {
17
- /** Whether the labels are drawn. Off by default, except on a heatmap. */
18
- show?: boolean;
19
- /** Where each label sits on its mark - see {@link ValueAnchor}. */
20
- anchor?: ValueAnchor;
21
- /** A label's text, from its row's own value (a histogram bin's count) and its series. */
22
- format?: (value: number, seriesName: string) => string;
23
- /** Hovering a label dims every other series, like toggling them off in the legend. */
24
- hoverIsolate?: boolean;
25
- fontStyle?: FontStyle;
26
- /** The connectors a line or area plot routes back from labels that had to move apart. */
27
- strokeStyle?: StrokeStyle;
28
- };
29
- /**
30
- * Decorative border around the plot's own content box - svelteplot's
31
- * `Frame` mark, purely cosmetic (drawn from the box geometry, never from
32
- * data). `true` enables it with svelteplot's own defaults; an object
33
- * enables it and overrides its look field-by-field. Insets pull the frame
34
- * in from the content box's own edges, in pixels.
35
- */
36
- export type FrameStyle = AreaStyle & {
37
- inset?: number;
38
- insetTop?: number;
39
- insetRight?: number;
40
- insetBottom?: number;
41
- insetLeft?: number;
42
- };
43
- /** Author-facing `styles.frame` prop - see {@link FrameStyle}. */
44
- export type FrameProp = boolean | FrameStyle;
45
- /**
46
- * The fields every plot kind's own `styles` shape shares - the common parent
47
- * of {@link AxisBasedStylesConfig} and {@link GeoStylesConfig}.
48
- */
49
- export type BasePlotStylesConfig = {
50
- /** Decorative border around the plot's content box - see {@link FrameStyle}. Available on every plot kind. */
51
- frame?: FrameProp;
52
- };
53
- /**
54
- * Top-level rendering style overrides shared by the non-geo plot kinds.
55
- * Passed as the `styles` prop. Each plot reads only the fields it cares
56
- * about.
57
- */
58
- export type AxisBasedStylesConfig = BasePlotStylesConfig & {
59
- values?: ValuesStyle;
60
- };
61
- /**
62
- * `AxisBasedStylesConfig` extended with `gaps` - the interpolated
63
- * missing-data bridge fill available to plot kinds with an inherent
64
- * category/sequence ordering (`LinePlot`, `BarPlot`, `PyramidPlot`).
65
- * Resolved per series like `segments`, at zone granularity - see
66
- * {@link GapsConfig}.
67
- */
68
- export type GapsAwarePlotStylesConfig<TSegmentStyle extends object> = AxisBasedStylesConfig & {
69
- gaps?: GapsConfig<TSegmentStyle>;
70
- };
71
- export type GeoTileLayerConfig = {
72
- /** XYZ tile URL template, e.g. `'https://tile.openstreetmap.org/{z}/{x}/{y}.png'`. */
73
- url: string;
74
- attribution?: string;
75
- opacity?: number;
76
- minZoom?: number;
77
- maxZoom?: number;
78
- /** Tile edge length in pixels. Defaults to `256`. */
79
- tileSize?: number;
80
- };
81
- /**
82
- * `styles` prop for GeoPlot - the geo analog of `AxisBasedStylesConfig`,
83
- * sharing only {@link BasePlotStylesConfig}'s common ground with it. Unlike
84
- * the other plot kinds, GeoPlot's styling needs (base map, choropleth ramp,
85
- * tile background, click handling) are unlike anything x/y plots need, so
86
- * this is its own type rather than a reuse of `AxisBasedStylesConfig`.
87
- */
88
- export type GeoStylesConfig<TProps extends Record<string, unknown> = Record<string, unknown>> = BasePlotStylesConfig & {
89
- /** Base map fill, used when a feature isn't styled by `segments` or the choropleth ramp. */
90
- fill?: string;
91
- fillOpacity?: number;
92
- stroke?: string;
93
- strokeWidth?: number;
94
- /** Raster XYZ tile basemap under the vector geometry. Mercator-family projections only. */
95
- tileLayer?: GeoTileLayerConfig;
96
- /** Fired when a base-map feature is clicked. */
97
- onFeatureClick?: (feature: GeoFeature<TProps>, event: Event) => void;
98
- };
99
- /**
100
- * `GeoTileLayerConfig`, plus `features` - never author-facing (the public
101
- * `styles.tileLayer` shape, {@link GeoTileLayerConfig}, doesn't declare it).
102
- * `GeoPlot` tacks it onto its own internal copy of `styles` so `StylesLayout`
103
- * can compute the tile layer's auto-fit bounds without needing raw geometry
104
- * threaded through as a separate prop.
105
- */
106
- type GeoTileLayerConfigWithFeatures = GeoTileLayerConfig & {
107
- features?: {
108
- geometry: GeoJSON.Geometry;
109
- }[];
110
- };
111
- /**
112
- * The minimal slice of a plot kind's own `styles` prop `StylesLayout` reads -
113
- * every concrete `styles` type ({@link AxisBasedStylesConfig},
114
- * {@link GeoStylesConfig}) structurally satisfies this whether or not it
115
- * declares `tileLayer` at all (a missing optional field type-checks fine).
116
- */
117
- export type StylesLayoutConfig = {
118
- tileLayer?: GeoTileLayerConfigWithFeatures;
119
- frame?: FrameProp;
120
- [key: string]: unknown;
121
- };
122
- export {};
@@ -1,2 +0,0 @@
1
- /** Curve interpolation for an area, difference or trail marker - svelteplot's own `CurveName`. */
2
- export type MarkerCurveName = 'basis' | 'basis-closed' | 'basis-open' | 'bundle' | 'bump-x' | 'bump-y' | 'cardinal' | 'cardinal-closed' | 'cardinal-open' | 'catmull-rom' | 'catmull-rom-closed' | 'catmull-rom-open' | 'linear' | 'linear-closed' | 'monotone-x' | 'monotone-y' | 'natural' | 'step' | 'step-after' | 'step-before';
@@ -1,10 +0,0 @@
1
- import type { BasePlotProps, PlotCoreProps } from '../props';
2
- import type { AxisBasedScalesConfig } from '../../layout/scales';
3
- import type { AxisBasedMarkersConfig } from '../../markers/common';
4
- import type { SeriesProps, DataProps } from '../data/common';
5
- import type { GapsAwarePlotStylesConfig } from '../../layout/styles';
6
- import type { LineSegmentStyle } from '../segments/common';
7
- /** `LinePlot`'s public props. */
8
- export type LinePlotProps<TData extends Record<string, unknown>> = BasePlotProps<SeriesProps<TData> | DataProps<TData>, TData, GapsAwarePlotStylesConfig<LineSegmentStyle>, LineSegmentStyle, AxisBasedMarkersConfig, AxisBasedScalesConfig<TData>>;
9
- /** What `LinePlot`'s core draws from. */
10
- export type LinePlotCoreProps<TData extends Record<string, unknown>> = PlotCoreProps<SeriesProps<TData> | DataProps<TData>, TData, GapsAwarePlotStylesConfig<LineSegmentStyle>, LineSegmentStyle, AxisBasedMarkersConfig, AxisBasedScalesConfig<TData>>;
@@ -1,9 +0,0 @@
1
- /** WCAG contrast ratio between two colors, from 1 (no contrast) to 21 (black on white). */
2
- export declare function contrastRatio(colorA: string, colorB: string): number;
3
- /**
4
- * The `candidates` entry with the highest WCAG contrast ratio against
5
- * `background`. Defaults to plain white/black; pass a grayscale or other
6
- * palette to widen the choice. Falls back to the first candidate when
7
- * `background` can't be parsed.
8
- */
9
- export declare function contrastTextColor(background: string, candidates?: string[]): string;
@@ -1,40 +0,0 @@
1
- import { resolveCssColor, parseRgb } from './cssColor';
2
- function relativeLuminance([r, g, b]) {
3
- const [rs, gs, bs] = [r, g, b].map((c) => {
4
- const s = c / 255;
5
- return s <= 0.03928 ? s / 12.92 : Math.pow((s + 0.055) / 1.055, 2.4);
6
- });
7
- return 0.2126 * rs + 0.7152 * gs + 0.0722 * bs;
8
- }
9
- /** WCAG contrast ratio between two colors, from 1 (no contrast) to 21 (black on white). */
10
- export function contrastRatio(colorA, colorB) {
11
- const a = parseRgb(resolveCssColor(colorA));
12
- const b = parseRgb(resolveCssColor(colorB));
13
- if (!a || !b)
14
- return 1;
15
- const lA = relativeLuminance(a);
16
- const lB = relativeLuminance(b);
17
- const lighter = Math.max(lA, lB);
18
- const darker = Math.min(lA, lB);
19
- return (lighter + 0.05) / (darker + 0.05);
20
- }
21
- /**
22
- * The `candidates` entry with the highest WCAG contrast ratio against
23
- * `background`. Defaults to plain white/black; pass a grayscale or other
24
- * palette to widen the choice. Falls back to the first candidate when
25
- * `background` can't be parsed.
26
- */
27
- export function contrastTextColor(background, candidates = ['#ffffff', '#000000']) {
28
- if (candidates.length === 0)
29
- return '#000000';
30
- let best = candidates[0];
31
- let bestRatio = -Infinity;
32
- for (const candidate of candidates) {
33
- const ratio = contrastRatio(background, candidate);
34
- if (ratio > bestRatio) {
35
- bestRatio = ratio;
36
- best = candidate;
37
- }
38
- }
39
- return best;
40
- }
@@ -1,4 +0,0 @@
1
- /** Resolves a `var(--x)` reference to its computed value; any other CSS color string passes through unchanged. */
2
- export declare function resolveCssColor(color: string): string;
3
- /** Parses any CSS color syntax (hex, rgb(), oklch(), named colors, hsl(), ...) into an `[r, g, b]` (0-255) triple, or `null` if it can't be resolved. */
4
- export declare function parseRgb(color: string): [number, number, number] | null;