@fundar/data-chart-telling 1.1.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (539) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/README.md +8 -7
  3. package/dist/configuration/config.svelte.d.ts +1 -1
  4. package/dist/configuration/config.svelte.js +177 -100
  5. package/dist/configuration/themes/index.d.ts +5 -1428
  6. package/dist/index.d.ts +23 -14
  7. package/dist/index.js +20 -11
  8. package/dist/layout/base/BasePlotLayout.svelte +115 -50
  9. package/dist/layout/base/BasePlotLayout.svelte.d.ts +1 -38
  10. package/dist/layout/coordinates/CoordinatesLayout.svelte +42 -40
  11. package/dist/layout/coordinates/CoordinatesLayout.svelte.d.ts +0 -2
  12. package/dist/layout/coordinates/ProjectionZoom.svelte +48 -0
  13. package/dist/layout/coordinates/ProjectionZoom.svelte.d.ts +10 -0
  14. package/dist/layout/coordinates/ZoomedProjection.d.ts +11 -0
  15. package/dist/layout/coordinates/ZoomedProjection.js +24 -0
  16. package/dist/layout/coordinates/camera.svelte.js +11 -8
  17. package/dist/layout/coordinates/projections/argentina.js +1 -1
  18. package/dist/layout/coordinates/projections/fit.d.ts +1 -1
  19. package/dist/layout/coordinates/projections/fit.js +1 -1
  20. package/dist/layout/coordinates/zoom.svelte.d.ts +4 -5
  21. package/dist/layout/coordinates/zoom.svelte.js +4 -5
  22. package/dist/layout/facet/FacetLayout.svelte +1 -1
  23. package/dist/layout/facet/config.js +1 -1
  24. package/dist/layout/facet/scope.d.ts +40 -0
  25. package/dist/layout/facet/scope.js +104 -0
  26. package/dist/layout/figure/Figure.svelte +2 -0
  27. package/dist/layout/geometry/GeometryLayout.svelte +14 -9
  28. package/dist/layout/geometry/GeometryLayout.svelte.d.ts +0 -3
  29. package/dist/layout/geometry/MarkerOffset.svelte +28 -0
  30. package/dist/layout/geometry/MarkerOffset.svelte.d.ts +13 -0
  31. package/dist/layout/grid/GridCell.svelte +6 -8
  32. package/dist/layout/legend/ContinuousSection.svelte +44 -9
  33. package/dist/layout/legend/DiscreteBadgeItem.svelte +2 -2
  34. package/dist/layout/legend/DiscreteSection.svelte +2 -2
  35. package/dist/layout/legend/DiscreteSymbolIcon.svelte +39 -15
  36. package/dist/layout/legend/LegendChannels.js +36 -12
  37. package/dist/layout/legend/LegendLayout.svelte +9 -1
  38. package/dist/layout/legend/LegendState.svelte.d.ts +4 -0
  39. package/dist/layout/legend/LegendState.svelte.js +23 -8
  40. package/dist/layout/legend/SizeSection.svelte +1 -1
  41. package/dist/layout/margins/PlotMargins.svelte.d.ts +2 -5
  42. package/dist/layout/margins/PlotMargins.svelte.js +35 -8
  43. package/dist/layout/plot/Plot.svelte +22 -2
  44. package/dist/layout/plot/Slice.d.ts +5 -1
  45. package/dist/layout/plot/Slice.js +14 -4
  46. package/dist/layout/scales/NiceTicks.d.ts +3 -0
  47. package/dist/layout/scales/NiceTicks.js +4 -0
  48. package/dist/layout/scales/ScalesLayout.svelte +93 -7
  49. package/dist/layout/scales/ScalesLayout.svelte.d.ts +5 -0
  50. package/dist/layout/scales/SveltePlotScale.d.ts +2 -2
  51. package/dist/layout/scales/SveltePlotScale.js +13 -6
  52. package/dist/layout/scales/TickLabels.d.ts +32 -0
  53. package/dist/layout/scales/TickLabels.js +55 -0
  54. package/dist/layout/styles/StylesLayout.svelte +2 -2
  55. package/dist/layout/styles/ValueLabels.d.ts +33 -5
  56. package/dist/layout/styles/ValueLabels.js +80 -21
  57. package/dist/layout/timeline/TimelineLayout.svelte +1 -1
  58. package/dist/layout/tooltip/Tooltip.svelte +4 -4
  59. package/dist/layout/tooltip/Tooltip.svelte.d.ts +4 -4
  60. package/dist/layout/tooltip/TooltipState.svelte.js +1 -1
  61. package/dist/markers/MarkerKinds.d.ts +5 -0
  62. package/dist/markers/MarkerKinds.js +1 -0
  63. package/dist/markers/area/AreaMarker.svelte +15 -63
  64. package/dist/markers/arrow/ArrowMarker.svelte +51 -9
  65. package/dist/markers/bar/BarMarker.svelte +8 -4
  66. package/dist/markers/bollinger/BollingerMarker.svelte +33 -18
  67. package/dist/markers/box/BoxMarker.svelte +40 -9
  68. package/dist/markers/delta/Delta.d.ts +6 -1
  69. package/dist/markers/delta/Delta.js +16 -1
  70. package/dist/markers/delta/DeltaMarker.svelte +9 -87
  71. package/dist/markers/delta/DeltaPoint.svelte +97 -0
  72. package/dist/markers/delta/DeltaPoint.svelte.d.ts +29 -0
  73. package/dist/markers/dot/DotMarker.svelte +24 -27
  74. package/dist/markers/image/ImageMarker.svelte +17 -12
  75. package/dist/markers/inset/InsetMarker.svelte +2 -2
  76. package/dist/markers/line/LineMarker.svelte +1 -0
  77. package/dist/markers/link/LinkMarker.svelte +174 -29
  78. package/dist/markers/regression/RegressionMarker.svelte +16 -33
  79. package/dist/markers/rule/RuleMarker.svelte +14 -5
  80. package/dist/markers/text/Declutter.d.ts +4 -0
  81. package/dist/markers/text/Declutter.js +26 -11
  82. package/dist/markers/text/TextMarker.svelte +91 -48
  83. package/dist/markers/tick/TickMarker.svelte +27 -25
  84. package/dist/markers/utils/MarkerChannels.d.ts +24 -0
  85. package/dist/markers/utils/MarkerChannels.js +42 -7
  86. package/dist/markers/utils/RowOffset.d.ts +23 -0
  87. package/dist/markers/utils/RowOffset.js +23 -0
  88. package/dist/markers/utils/RowOffsetMarks.svelte +30 -0
  89. package/dist/markers/utils/RowOffsetMarks.svelte.d.ts +33 -0
  90. package/dist/markers/utils/RowStroke.d.ts +31 -0
  91. package/dist/markers/utils/RowStroke.js +28 -0
  92. package/dist/markers/violin/ViolinMarker.svelte +75 -0
  93. package/dist/markers/violin/ViolinMarker.svelte.d.ts +7 -0
  94. package/dist/markers/violin/ViolinProfiles.d.ts +29 -0
  95. package/dist/markers/violin/ViolinProfiles.js +55 -0
  96. package/dist/markers/waffle/WaffleMarker.svelte +17 -37
  97. package/dist/phases/Pipeline.d.ts +5 -0
  98. package/dist/phases/Pipeline.js +5 -0
  99. package/dist/phases/data/DataPhase.js +3 -3
  100. package/dist/phases/data/PlotAxes.d.ts +10 -0
  101. package/dist/phases/data/PlotAxes.js +14 -1
  102. package/dist/phases/facet/FacetPanels.d.ts +1 -0
  103. package/dist/phases/facet/FacetPanels.js +1 -0
  104. package/dist/phases/facet/FacetPhase.d.ts +2 -1
  105. package/dist/phases/facet/FacetPhase.js +19 -4
  106. package/dist/phases/mapping/MappingPhase.js +1 -1
  107. package/dist/phases/markers/MarkersPhase.js +2 -1
  108. package/dist/phases/scales/CategoryOrder.d.ts +23 -0
  109. package/dist/phases/scales/CategoryOrder.js +73 -0
  110. package/dist/phases/scales/ScalesPhase.js +21 -7
  111. package/dist/phases/sharedScales/SharedScalesPhase.d.ts +3 -2
  112. package/dist/phases/sharedScales/SharedScalesPhase.js +5 -2
  113. package/dist/phases/statistics/Statistics.d.ts +10 -6
  114. package/dist/phases/statistics/Statistics.js +20 -10
  115. package/dist/phases/statistics/StatisticsPhase.js +16 -3
  116. package/dist/phases/statistics/methods/BollingerStatistic.d.ts +1 -1
  117. package/dist/phases/statistics/methods/BollingerStatistic.js +13 -11
  118. package/dist/phases/statistics/methods/BoxStatistic.d.ts +1 -1
  119. package/dist/phases/statistics/methods/BoxStatistic.js +14 -12
  120. package/dist/phases/statistics/methods/Density2dStatistic.d.ts +1 -1
  121. package/dist/phases/statistics/methods/Density2dStatistic.js +13 -11
  122. package/dist/phases/statistics/methods/DensityStatistic.d.ts +1 -1
  123. package/dist/phases/statistics/methods/DensityStatistic.js +11 -9
  124. package/dist/phases/statistics/methods/DeviationStatistic.d.ts +8 -0
  125. package/dist/phases/statistics/methods/DeviationStatistic.js +111 -0
  126. package/dist/phases/statistics/methods/MovingAverageStatistic.d.ts +1 -1
  127. package/dist/phases/statistics/methods/MovingAverageStatistic.js +11 -9
  128. package/dist/phases/statistics/methods/RegressionStatistic.d.ts +1 -1
  129. package/dist/phases/statistics/methods/RegressionStatistic.js +16 -14
  130. package/dist/phases/transforms/ProcessedPositions.js +1 -1
  131. package/dist/phases/transforms/TransformsPhase.js +49 -3
  132. package/dist/phases/transforms/ValueSelection.d.ts +30 -0
  133. package/dist/phases/transforms/ValueSelection.js +53 -0
  134. package/dist/plots/{heatmap → correlation/heatmap}/Plot.svelte +5 -2
  135. package/dist/plots/{heatmap → correlation/heatmap}/Plot.svelte.d.ts +2 -2
  136. package/dist/plots/{heatmap → correlation/heatmap}/defaults.d.ts +2 -2
  137. package/dist/plots/{heatmap → correlation/heatmap}/defaults.js +5 -5
  138. package/dist/plots/{heatmap → correlation/heatmap}/markers.d.ts +4 -4
  139. package/dist/plots/{heatmap → correlation/heatmap}/markers.js +3 -3
  140. package/dist/plots/{scatter → correlation/scatter}/Plot.svelte +5 -2
  141. package/dist/plots/{scatter → correlation/scatter}/Plot.svelte.d.ts +2 -2
  142. package/dist/plots/{scatter → correlation/scatter}/defaults.d.ts +2 -2
  143. package/dist/plots/{scatter → correlation/scatter}/defaults.js +4 -4
  144. package/dist/plots/{scatter → correlation/scatter}/markers.d.ts +4 -4
  145. package/dist/plots/{scatter → correlation/scatter}/markers.js +3 -3
  146. package/dist/plots/{box → distribution/box}/BoxSummaries.d.ts +2 -2
  147. package/dist/plots/{box → distribution/box}/BoxSummaries.js +6 -6
  148. package/dist/plots/{box → distribution/box}/Plot.svelte +2 -2
  149. package/dist/plots/{box → distribution/box}/Plot.svelte.d.ts +2 -2
  150. package/dist/plots/{box → distribution/box}/defaults.d.ts +2 -2
  151. package/dist/plots/{box → distribution/box}/defaults.js +1 -1
  152. package/dist/plots/{box → distribution/box}/markers.d.ts +2 -2
  153. package/dist/plots/distribution/density/Plot.svelte +45 -0
  154. package/dist/plots/distribution/density/Plot.svelte.d.ts +26 -0
  155. package/dist/plots/distribution/density/defaults.d.ts +9 -0
  156. package/dist/plots/distribution/density/defaults.js +29 -0
  157. package/dist/plots/distribution/density/markers.d.ts +9 -0
  158. package/dist/plots/distribution/density/markers.js +42 -0
  159. package/dist/plots/{histogram → distribution/histogram}/Plot.svelte +2 -2
  160. package/dist/plots/{histogram → distribution/histogram}/Plot.svelte.d.ts +2 -2
  161. package/dist/plots/{histogram → distribution/histogram}/defaults.d.ts +2 -2
  162. package/dist/plots/{histogram → distribution/histogram}/defaults.js +3 -3
  163. package/dist/plots/{histogram → distribution/histogram}/markers.d.ts +3 -3
  164. package/dist/plots/{histogram → distribution/histogram}/markers.js +5 -5
  165. package/dist/plots/{pyramid → distribution/pyramid}/Plot.svelte +5 -2
  166. package/dist/plots/{pyramid → distribution/pyramid}/Plot.svelte.d.ts +2 -2
  167. package/dist/plots/{pyramid → distribution/pyramid}/defaults.d.ts +2 -2
  168. package/dist/plots/{pyramid → distribution/pyramid}/defaults.js +6 -6
  169. package/dist/plots/{pyramid → distribution/pyramid}/markers.d.ts +4 -4
  170. package/dist/plots/{pyramid → distribution/pyramid}/markers.js +6 -6
  171. package/dist/plots/distribution/violin/Plot.svelte +45 -0
  172. package/dist/plots/distribution/violin/Plot.svelte.d.ts +26 -0
  173. package/dist/plots/distribution/violin/defaults.d.ts +10 -0
  174. package/dist/plots/distribution/violin/defaults.js +58 -0
  175. package/dist/plots/distribution/violin/markers.d.ts +10 -0
  176. package/dist/plots/distribution/violin/markers.js +71 -0
  177. package/dist/plots/{area → evolution/area}/Plot.svelte +2 -2
  178. package/dist/plots/{area → evolution/area}/Plot.svelte.d.ts +2 -2
  179. package/dist/plots/{area → evolution/area}/defaults.d.ts +2 -2
  180. package/dist/plots/{area → evolution/area}/defaults.js +2 -0
  181. package/dist/plots/{area → evolution/area}/markers.d.ts +2 -2
  182. package/dist/plots/{area → evolution/area}/markers.js +1 -1
  183. package/dist/plots/{line → evolution/line}/Plot.svelte +2 -2
  184. package/dist/plots/{line → evolution/line}/Plot.svelte.d.ts +2 -2
  185. package/dist/plots/{line → evolution/line}/defaults.d.ts +2 -2
  186. package/dist/plots/{line → evolution/line}/defaults.js +2 -0
  187. package/dist/plots/{line → evolution/line}/markers.d.ts +11 -8
  188. package/dist/plots/{line → evolution/line}/markers.js +6 -4
  189. package/dist/plots/evolution/slope/Plot.svelte +42 -0
  190. package/dist/plots/evolution/slope/Plot.svelte.d.ts +26 -0
  191. package/dist/plots/evolution/slope/defaults.d.ts +8 -0
  192. package/dist/plots/evolution/slope/defaults.js +31 -0
  193. package/dist/plots/evolution/slope/markers.d.ts +16 -0
  194. package/dist/plots/evolution/slope/markers.js +79 -0
  195. package/dist/plots/evolution/sparkline/Plot.svelte +45 -0
  196. package/dist/plots/evolution/sparkline/Plot.svelte.d.ts +26 -0
  197. package/dist/plots/evolution/sparkline/defaults.d.ts +7 -0
  198. package/dist/plots/evolution/sparkline/defaults.js +23 -0
  199. package/dist/plots/evolution/sparkline/markers.d.ts +7 -0
  200. package/dist/plots/evolution/sparkline/markers.js +56 -0
  201. package/dist/plots/{geo → map/geo}/Core.svelte +11 -10
  202. package/dist/plots/{geo → map/geo}/Core.svelte.d.ts +1 -1
  203. package/dist/plots/map/geo/GeoFeatures.svelte.d.ts +9 -0
  204. package/dist/plots/map/geo/GeoFeatures.svelte.js +55 -0
  205. package/dist/plots/map/geo/GeoGeometry.d.ts +27 -0
  206. package/dist/plots/map/geo/GeoGeometry.js +142 -0
  207. package/dist/plots/map/geo/GeoSegments.d.ts +16 -0
  208. package/dist/plots/map/geo/GeoSegments.js +23 -0
  209. package/dist/plots/{geo → map/geo}/Plot.svelte +10 -10
  210. package/dist/plots/{geo → map/geo}/Plot.svelte.d.ts +2 -2
  211. package/dist/plots/{geo → map/geo}/defaults.d.ts +2 -2
  212. package/dist/plots/{geo → map/geo}/defaults.js +1 -1
  213. package/dist/plots/{geo → map/geo}/phases/data.d.ts +1 -1
  214. package/dist/plots/{geo → map/geo}/phases/data.js +7 -6
  215. package/dist/plots/{geo → map/geo}/phases/hover.d.ts +1 -1
  216. package/dist/plots/{geo → map/geo}/phases/hover.js +2 -2
  217. package/dist/plots/{geo → map/geo}/phases/markers.d.ts +1 -1
  218. package/dist/plots/{geo → map/geo}/phases/markers.js +6 -10
  219. package/dist/plots/{geo → map/geo}/phases/scales.d.ts +2 -2
  220. package/dist/plots/{geo → map/geo}/phases/scales.js +28 -12
  221. package/dist/plots/{geo → map/geo}/phases/tooltip.d.ts +1 -1
  222. package/dist/plots/map/geo/phases/tooltip.js +5 -0
  223. package/dist/plots/{geo → map/geo}/slices.d.ts +2 -2
  224. package/dist/plots/{geo → map/geo}/slices.js +2 -2
  225. package/dist/plots/{bar → ranking/bar}/Plot.svelte +2 -2
  226. package/dist/plots/{bar → ranking/bar}/Plot.svelte.d.ts +2 -2
  227. package/dist/plots/ranking/bar/defaults.d.ts +16 -0
  228. package/dist/plots/{bar → ranking/bar}/defaults.js +15 -9
  229. package/dist/plots/{bar → ranking/bar}/markers.d.ts +8 -8
  230. package/dist/plots/{bar → ranking/bar}/markers.js +8 -17
  231. package/dist/plots/ranking/bullet/Plot.svelte +42 -0
  232. package/dist/plots/ranking/bullet/Plot.svelte.d.ts +26 -0
  233. package/dist/plots/ranking/bullet/defaults.d.ts +8 -0
  234. package/dist/plots/ranking/bullet/defaults.js +24 -0
  235. package/dist/plots/ranking/bullet/markers.d.ts +10 -0
  236. package/dist/plots/ranking/bullet/markers.js +90 -0
  237. package/dist/plots/ranking/cleveland/ClevelandConnector.d.ts +48 -0
  238. package/dist/plots/ranking/cleveland/ClevelandConnector.js +140 -0
  239. package/dist/plots/ranking/cleveland/ClevelandMarkers.d.ts +33 -0
  240. package/dist/plots/ranking/cleveland/ClevelandMarkers.js +375 -0
  241. package/dist/plots/ranking/cleveland/ClevelandRanges.d.ts +31 -0
  242. package/dist/plots/ranking/cleveland/ClevelandRanges.js +116 -0
  243. package/dist/plots/ranking/cleveland/Plot.svelte +45 -0
  244. package/dist/plots/ranking/cleveland/Plot.svelte.d.ts +26 -0
  245. package/dist/plots/ranking/cleveland/defaults.d.ts +13 -0
  246. package/dist/plots/ranking/cleveland/defaults.js +66 -0
  247. package/dist/plots/ranking/dumbbell/Plot.svelte +45 -0
  248. package/dist/plots/ranking/dumbbell/Plot.svelte.d.ts +26 -0
  249. package/dist/plots/ranking/dumbbell/defaults.d.ts +9 -0
  250. package/dist/plots/ranking/dumbbell/defaults.js +19 -0
  251. package/dist/plots/ranking/forest/Plot.svelte +42 -0
  252. package/dist/plots/ranking/forest/Plot.svelte.d.ts +26 -0
  253. package/dist/plots/ranking/forest/defaults.d.ts +11 -0
  254. package/dist/plots/ranking/forest/defaults.js +20 -0
  255. package/dist/plots/ranking/lollipop/Plot.svelte +45 -0
  256. package/dist/plots/ranking/lollipop/Plot.svelte.d.ts +26 -0
  257. package/dist/plots/ranking/lollipop/defaults.d.ts +9 -0
  258. package/dist/plots/ranking/lollipop/defaults.js +18 -0
  259. package/dist/plots/utils/RowNumbers.d.ts +16 -0
  260. package/dist/plots/utils/RowNumbers.js +24 -0
  261. package/dist/plots/utils/gaps.js +1 -1
  262. package/dist/plots/utils/segments.d.ts +4 -1
  263. package/dist/plots/utils/segments.js +20 -7
  264. package/dist/types/configuration/styling.d.ts +284 -143
  265. package/dist/types/layout/coordinates.d.ts +5 -4
  266. package/dist/types/layout/facet.d.ts +18 -0
  267. package/dist/types/layout/legend.d.ts +23 -5
  268. package/dist/types/layout/plot.d.ts +46 -1
  269. package/dist/types/layout/scales.d.ts +39 -7
  270. package/dist/types/layout/statistics/deviation.d.ts +40 -0
  271. package/dist/types/layout/statistics/index.d.ts +7 -2
  272. package/dist/types/layout/styles/base.d.ts +18 -0
  273. package/dist/types/layout/styles/bullet.d.ts +25 -0
  274. package/dist/types/layout/styles/connector.d.ts +98 -0
  275. package/dist/types/layout/styles/curve.d.ts +11 -0
  276. package/dist/types/layout/styles/frame.d.ts +17 -0
  277. package/dist/types/layout/styles/gaps.d.ts +12 -0
  278. package/dist/types/layout/styles/geo.d.ts +55 -0
  279. package/dist/types/layout/styles/index.d.ts +8 -0
  280. package/dist/types/layout/styles/index.js +8 -0
  281. package/dist/types/layout/styles/values.d.ts +47 -0
  282. package/dist/types/layout/timeline.d.ts +5 -2
  283. package/dist/types/layout/tooltip.d.ts +6 -2
  284. package/dist/types/markers/axis/area.d.ts +2 -2
  285. package/dist/types/markers/axis/arrow.d.ts +3 -0
  286. package/dist/types/markers/axis/axisBasedMarkersConfig.d.ts +2 -1
  287. package/dist/types/markers/axis/bar.d.ts +1 -1
  288. package/dist/types/markers/axis/box.d.ts +5 -0
  289. package/dist/types/markers/axis/delta.d.ts +15 -2
  290. package/dist/types/markers/axis/difference.d.ts +2 -2
  291. package/dist/types/markers/axis/image.d.ts +3 -2
  292. package/dist/types/markers/axis/line.d.ts +2 -0
  293. package/dist/types/markers/axis/rule.d.ts +18 -2
  294. package/dist/types/markers/axis/trail.d.ts +2 -3
  295. package/dist/types/markers/axis/violin.d.ts +25 -0
  296. package/dist/types/markers/basic/dot.d.ts +3 -2
  297. package/dist/types/markers/basic/text.d.ts +13 -3
  298. package/dist/types/markers/channels/commonMarkerConfig.d.ts +7 -3
  299. package/dist/types/markers/channels/commonMarkerConfigWithRowOffset.d.ts +13 -0
  300. package/dist/types/markers/common.d.ts +1 -1
  301. package/dist/types/markers/common.js +1 -0
  302. package/dist/types/markers/geo/link.d.ts +5 -1
  303. package/dist/types/phases/facet/phase.d.ts +4 -0
  304. package/dist/types/phases/index.d.ts +1 -1
  305. package/dist/types/phases/scales/phase.d.ts +5 -1
  306. package/dist/types/phases/state.d.ts +15 -2
  307. package/dist/types/phases/statistics/source.d.ts +3 -1
  308. package/dist/types/phases/transforms/phase.d.ts +22 -0
  309. package/dist/types/plots/{heatmap → correlation/heatmap}/props.d.ts +6 -6
  310. package/dist/types/plots/{heatmap → correlation/heatmap}/state.d.ts +4 -4
  311. package/dist/types/plots/{scatter → correlation/scatter}/props.d.ts +6 -6
  312. package/dist/types/plots/{scatter → correlation/scatter}/state.d.ts +2 -2
  313. package/dist/types/plots/{box → distribution/box}/props.d.ts +6 -6
  314. package/dist/types/plots/{box → distribution/box}/state.d.ts +3 -3
  315. package/dist/types/plots/distribution/density/props.d.ts +23 -0
  316. package/dist/types/plots/distribution/density/state.d.ts +6 -0
  317. package/dist/types/plots/{histogram → distribution/histogram}/props.d.ts +7 -7
  318. package/dist/types/plots/{histogram → distribution/histogram}/state.d.ts +2 -2
  319. package/dist/types/plots/distribution/histogram/state.js +1 -0
  320. package/dist/types/plots/{pyramid → distribution/pyramid}/props.d.ts +6 -6
  321. package/dist/types/plots/distribution/pyramid/props.js +1 -0
  322. package/dist/types/plots/{pyramid → distribution/pyramid}/state.d.ts +3 -3
  323. package/dist/types/plots/distribution/pyramid/state.js +1 -0
  324. package/dist/types/plots/distribution/violin/props.d.ts +23 -0
  325. package/dist/types/plots/distribution/violin/props.js +1 -0
  326. package/dist/types/plots/distribution/violin/state.d.ts +6 -0
  327. package/dist/types/plots/distribution/violin/state.js +1 -0
  328. package/dist/types/plots/{area → evolution/area}/props.d.ts +6 -6
  329. package/dist/types/plots/evolution/area/props.js +1 -0
  330. package/dist/types/plots/{area → evolution/area}/state.d.ts +2 -2
  331. package/dist/types/plots/evolution/area/state.js +1 -0
  332. package/dist/types/plots/evolution/line/props.d.ts +10 -0
  333. package/dist/types/plots/evolution/line/props.js +1 -0
  334. package/dist/types/plots/{line → evolution/line}/state.d.ts +3 -3
  335. package/dist/types/plots/evolution/line/state.js +1 -0
  336. package/dist/types/plots/evolution/slope/props.d.ts +5 -0
  337. package/dist/types/plots/evolution/slope/props.js +1 -0
  338. package/dist/types/plots/evolution/slope/state.d.ts +5 -0
  339. package/dist/types/plots/evolution/slope/state.js +1 -0
  340. package/dist/types/plots/evolution/sparkline/props.d.ts +5 -0
  341. package/dist/types/plots/evolution/sparkline/props.js +1 -0
  342. package/dist/types/plots/evolution/sparkline/state.d.ts +5 -0
  343. package/dist/types/plots/evolution/sparkline/state.js +1 -0
  344. package/dist/types/plots/{geo → map/geo}/props.d.ts +8 -8
  345. package/dist/types/plots/map/geo/props.js +1 -0
  346. package/dist/types/plots/{geo → map/geo}/state.d.ts +18 -11
  347. package/dist/types/plots/map/geo/state.js +1 -0
  348. package/dist/types/plots/props.d.ts +7 -4
  349. package/dist/types/plots/{bar → ranking/bar}/props.d.ts +6 -6
  350. package/dist/types/plots/ranking/bar/props.js +1 -0
  351. package/dist/types/plots/{bar → ranking/bar}/state.d.ts +2 -2
  352. package/dist/types/plots/ranking/bar/state.js +1 -0
  353. package/dist/types/plots/ranking/bullet/props.d.ts +22 -0
  354. package/dist/types/plots/ranking/bullet/props.js +1 -0
  355. package/dist/types/plots/ranking/bullet/state.d.ts +5 -0
  356. package/dist/types/plots/ranking/bullet/state.js +1 -0
  357. package/dist/types/plots/ranking/cleveland/props.d.ts +10 -0
  358. package/dist/types/plots/ranking/cleveland/props.js +1 -0
  359. package/dist/types/plots/ranking/cleveland/state.d.ts +49 -0
  360. package/dist/types/plots/ranking/cleveland/state.js +1 -0
  361. package/dist/types/plots/ranking/dumbbell/props.d.ts +10 -0
  362. package/dist/types/plots/ranking/dumbbell/props.js +1 -0
  363. package/dist/types/plots/ranking/dumbbell/state.d.ts +5 -0
  364. package/dist/types/plots/ranking/dumbbell/state.js +1 -0
  365. package/dist/types/plots/ranking/forest/props.d.ts +23 -0
  366. package/dist/types/plots/ranking/forest/props.js +1 -0
  367. package/dist/types/plots/ranking/forest/state.d.ts +5 -0
  368. package/dist/types/plots/ranking/forest/state.js +1 -0
  369. package/dist/types/plots/ranking/lollipop/props.d.ts +10 -0
  370. package/dist/types/plots/ranking/lollipop/props.js +1 -0
  371. package/dist/types/plots/ranking/lollipop/state.d.ts +5 -0
  372. package/dist/types/plots/ranking/lollipop/state.js +1 -0
  373. package/dist/types/plots/segments/common.d.ts +4 -1
  374. package/dist/types/plots/segments/config.d.ts +4 -2
  375. package/dist/utils/OpacityScale.d.ts +14 -0
  376. package/dist/utils/OpacityScale.js +43 -0
  377. package/dist/utils/{symbol.d.ts → SymbolPath.d.ts} +0 -12
  378. package/dist/utils/{symbol.js → SymbolPath.js} +0 -24
  379. package/dist/utils/SymbolScale.d.ts +18 -0
  380. package/dist/utils/SymbolScale.js +29 -0
  381. package/dist/utils/color/ColorRamp.d.ts +27 -0
  382. package/dist/utils/color/ColorRamp.js +120 -0
  383. package/dist/utils/color/CssColor.d.ts +19 -0
  384. package/dist/utils/color/CssColor.js +114 -0
  385. package/dist/utils/color/Palette.d.ts +21 -0
  386. package/dist/utils/color/Palette.js +52 -0
  387. package/dist/utils/color/index.d.ts +11 -3
  388. package/dist/utils/color/index.js +14 -3
  389. package/dist/utils/grouping.js +1 -1
  390. package/docs/architecture.md +1 -1
  391. package/docs/chrome.md +2 -2
  392. package/docs/composer.md +2 -2
  393. package/docs/concepts.md +1 -1
  394. package/docs/development.md +1 -1
  395. package/docs/facets.md +50 -3
  396. package/docs/getting-started.md +2 -2
  397. package/docs/legend.md +13 -11
  398. package/docs/markers.md +57 -27
  399. package/docs/plots/correlation/heatmap.md +26 -0
  400. package/docs/plots/correlation/scatter.md +35 -0
  401. package/docs/plots/distribution/box.md +28 -0
  402. package/docs/plots/distribution/density.md +26 -0
  403. package/docs/plots/distribution/histogram.md +33 -0
  404. package/docs/plots/distribution/pyramid.md +31 -0
  405. package/docs/plots/distribution/violin.md +35 -0
  406. package/docs/plots/evolution/area.md +32 -0
  407. package/docs/plots/evolution/line.md +93 -0
  408. package/docs/plots/evolution/slope.md +39 -0
  409. package/docs/plots/evolution/sparkline.md +34 -0
  410. package/docs/plots/ranking/bar.md +59 -0
  411. package/docs/plots/ranking/bullet.md +37 -0
  412. package/docs/plots/ranking/cleveland.md +54 -0
  413. package/docs/plots/ranking/dumbbell.md +39 -0
  414. package/docs/plots/ranking/forest.md +40 -0
  415. package/docs/plots/ranking/lollipop.md +39 -0
  416. package/docs/plots.md +22 -280
  417. package/docs/scales.md +30 -24
  418. package/docs/styles-and-segments.md +25 -21
  419. package/docs/theming.md +23 -20
  420. package/docs/timeline.md +3 -3
  421. package/docs/tooltip-and-hover.md +10 -10
  422. package/docs/transforms-and-statistics.md +13 -12
  423. package/examples/BarValues.svelte +1 -1
  424. package/examples/Box.svelte +1 -1
  425. package/examples/Bullet.svelte +17 -0
  426. package/examples/Chrome.svelte +1 -1
  427. package/examples/ChromeOrder.svelte +1 -1
  428. package/examples/Cleveland.svelte +15 -0
  429. package/examples/Composer.svelte +2 -2
  430. package/examples/CustomTooltip.svelte +1 -1
  431. package/examples/Density.svelte +7 -0
  432. package/examples/Dumbbell.svelte +16 -0
  433. package/examples/Facets.svelte +1 -1
  434. package/examples/FacetsCarousel.svelte +1 -1
  435. package/examples/FacetsRowsCols.svelte +1 -1
  436. package/examples/FacetsScoped.svelte +26 -0
  437. package/examples/FirstPlot.svelte +1 -1
  438. package/examples/Forest.svelte +17 -0
  439. package/examples/Gaps.svelte +2 -2
  440. package/examples/GroupedBars.svelte +1 -1
  441. package/examples/Heatmap.svelte +3 -3
  442. package/examples/HeatmapSegments.svelte +8 -8
  443. package/examples/Histogram.svelte +1 -1
  444. package/examples/HorizontalBars.svelte +1 -1
  445. package/examples/LegendSections.svelte +1 -1
  446. package/examples/LegendToggle.svelte +1 -1
  447. package/examples/LineByRegion.svelte +1 -1
  448. package/examples/LineDates.svelte +1 -1
  449. package/examples/LineStep.svelte +16 -0
  450. package/examples/LineStepSegment.svelte +18 -0
  451. package/examples/Lollipop.svelte +17 -0
  452. package/examples/Markers.svelte +1 -1
  453. package/examples/MovingAverage.svelte +1 -1
  454. package/examples/Pyramid.svelte +9 -2
  455. package/examples/Regression.svelte +2 -2
  456. package/examples/ResponsiveLine.svelte +1 -1
  457. package/examples/Scales.svelte +1 -1
  458. package/examples/Scatter.svelte +2 -2
  459. package/examples/SegmentHighlight.svelte +1 -1
  460. package/examples/Segments.svelte +1 -1
  461. package/examples/SegmentsBySeries.svelte +1 -1
  462. package/examples/Slope.svelte +17 -0
  463. package/examples/Sparkline.svelte +14 -0
  464. package/examples/StackedArea.svelte +1 -1
  465. package/examples/StackedBars.svelte +1 -1
  466. package/examples/TimelinePlayer.svelte +1 -1
  467. package/examples/TimelineRule.svelte +1 -1
  468. package/examples/Tooltip.svelte +1 -1
  469. package/examples/ValueLabels.svelte +1 -1
  470. package/examples/Violin.svelte +14 -0
  471. package/examples/datasets/argentina-chile-trends.ts +34 -0
  472. package/examples/datasets/commodity-prices.ts +48 -0
  473. package/examples/datasets/countries-over-time.ts +368 -0
  474. package/examples/datasets/daily-temperature.ts +121 -0
  475. package/examples/datasets/earthquakes.ts +977 -0
  476. package/examples/datasets/flight-routes.ts +29 -0
  477. package/examples/datasets/height-density.ts +37 -0
  478. package/examples/datasets/heights.ts +370 -0
  479. package/examples/datasets/index.ts +24 -0
  480. package/examples/datasets/inflation-by-region.ts +44 -0
  481. package/examples/datasets/inflation-ranges.ts +34 -0
  482. package/examples/datasets/iris-flower.ts +207 -0
  483. package/examples/datasets/life-expectancy.ts +95 -0
  484. package/examples/datasets/napoleons-march.ts +182 -0
  485. package/examples/datasets/penguins.ts +54 -0
  486. package/examples/datasets/population-by-age-with-gaps.ts +23 -0
  487. package/examples/datasets/population-by-age.ts +890 -0
  488. package/examples/datasets/province-population.ts +521 -0
  489. package/examples/datasets/stock-prices.ts +63 -0
  490. package/examples/datasets/weather-stations-over-time.ts +31 -0
  491. package/examples/datasets/weather-stations.ts +22 -0
  492. package/examples/datasets/wind-vectors.ts +30 -0
  493. package/examples/datasets/world-temperature.ts +400 -0
  494. package/llms-full.txt +27 -14
  495. package/llms.txt +33 -4
  496. package/package.json +10 -1
  497. package/dist/plots/bar/defaults.d.ts +0 -9
  498. package/dist/plots/geo/features.svelte.d.ts +0 -5
  499. package/dist/plots/geo/features.svelte.js +0 -44
  500. package/dist/plots/geo/phases/tooltip.js +0 -5
  501. package/dist/plots/utils/geoAccessors.d.ts +0 -72
  502. package/dist/plots/utils/geoAccessors.js +0 -220
  503. package/dist/plots/utils/geoSegments.d.ts +0 -29
  504. package/dist/plots/utils/geoSegments.js +0 -37
  505. package/dist/types/layout/styles.d.ts +0 -122
  506. package/dist/types/markers/axis/curveName.d.ts +0 -2
  507. package/dist/types/plots/line/props.d.ts +0 -10
  508. package/dist/utils/color/contrast.d.ts +0 -9
  509. package/dist/utils/color/contrast.js +0 -40
  510. package/dist/utils/color/cssColor.d.ts +0 -4
  511. package/dist/utils/color/cssColor.js +0 -77
  512. package/dist/utils/color/ramp.d.ts +0 -17
  513. package/dist/utils/color/ramp.js +0 -110
  514. package/dist/utils/opacity.d.ts +0 -9
  515. package/dist/utils/opacity.js +0 -38
  516. package/examples/data.ts +0 -324
  517. /package/dist/plots/{box → distribution/box}/markers.js +0 -0
  518. /package/dist/types/layout/{styles.js → statistics/deviation.js} +0 -0
  519. /package/dist/types/{markers/axis/curveName.js → layout/styles/base.js} +0 -0
  520. /package/dist/types/{plots/area/props.js → layout/styles/bullet.js} +0 -0
  521. /package/dist/types/{plots/area/state.js → layout/styles/connector.js} +0 -0
  522. /package/dist/types/{plots/bar/props.js → layout/styles/curve.js} +0 -0
  523. /package/dist/types/{plots/bar/state.js → layout/styles/frame.js} +0 -0
  524. /package/dist/types/{plots/box/props.js → layout/styles/gaps.js} +0 -0
  525. /package/dist/types/{plots/box/state.js → layout/styles/geo.js} +0 -0
  526. /package/dist/types/{plots/geo/props.js → layout/styles/values.js} +0 -0
  527. /package/dist/types/{plots/geo/state.js → markers/axis/violin.js} +0 -0
  528. /package/dist/types/{plots/heatmap/props.js → markers/channels/commonMarkerConfigWithRowOffset.js} +0 -0
  529. /package/dist/types/plots/{histogram → correlation/heatmap}/props.js +0 -0
  530. /package/dist/types/plots/{heatmap → correlation/heatmap}/state.js +0 -0
  531. /package/dist/types/plots/{line → correlation/scatter}/props.js +0 -0
  532. /package/dist/types/plots/{histogram → correlation/scatter}/state.js +0 -0
  533. /package/dist/types/plots/{pyramid → distribution/box}/props.js +0 -0
  534. /package/dist/types/plots/{line → distribution/box}/state.js +0 -0
  535. /package/dist/types/plots/{scatter → distribution/density}/props.js +0 -0
  536. /package/dist/types/plots/{pyramid → distribution/density}/state.js +0 -0
  537. /package/dist/types/plots/{scatter/state.js → distribution/histogram/props.js} +0 -0
  538. /package/dist/{plots/utils → utils}/accessors.d.ts +0 -0
  539. /package/dist/{plots/utils → utils}/accessors.js +0 -0
package/dist/index.d.ts CHANGED
@@ -1,12 +1,21 @@
1
- export { default as AreaPlot } from './plots/area/Plot.svelte';
2
- export { default as BarPlot } from './plots/bar/Plot.svelte';
3
- export { default as BoxPlot } from './plots/box/Plot.svelte';
4
- export { default as HistogramPlot } from './plots/histogram/Plot.svelte';
5
- export { default as HeatmapPlot } from './plots/heatmap/Plot.svelte';
6
- export { default as LinePlot } from './plots/line/Plot.svelte';
7
- export { default as PyramidPlot } from './plots/pyramid/Plot.svelte';
8
- export { default as ScatterPlot } from './plots/scatter/Plot.svelte';
9
- export { default as GeoPlot } from './plots/geo/Plot.svelte';
1
+ export { default as AreaPlot } from './plots/evolution/area/Plot.svelte';
2
+ export { default as BarPlot } from './plots/ranking/bar/Plot.svelte';
3
+ export { default as BoxPlot } from './plots/distribution/box/Plot.svelte';
4
+ export { default as BulletPlot } from './plots/ranking/bullet/Plot.svelte';
5
+ export { default as ClevelandPlot } from './plots/ranking/cleveland/Plot.svelte';
6
+ export { default as DensityPlot } from './plots/distribution/density/Plot.svelte';
7
+ export { default as DumbbellPlot } from './plots/ranking/dumbbell/Plot.svelte';
8
+ export { default as ForestPlot } from './plots/ranking/forest/Plot.svelte';
9
+ export { default as GeoPlot } from './plots/map/geo/Plot.svelte';
10
+ export { default as HeatmapPlot } from './plots/correlation/heatmap/Plot.svelte';
11
+ export { default as HistogramPlot } from './plots/distribution/histogram/Plot.svelte';
12
+ export { default as LinePlot } from './plots/evolution/line/Plot.svelte';
13
+ export { default as LollipopPlot } from './plots/ranking/lollipop/Plot.svelte';
14
+ export { default as PyramidPlot } from './plots/distribution/pyramid/Plot.svelte';
15
+ export { default as ScatterPlot } from './plots/correlation/scatter/Plot.svelte';
16
+ export { default as SlopePlot } from './plots/evolution/slope/Plot.svelte';
17
+ export { default as SparklinePlot } from './plots/evolution/sparkline/Plot.svelte';
18
+ export { default as ViolinPlot } from './plots/distribution/violin/Plot.svelte';
10
19
  export { default as PlotComposer } from './layout/composer/PlotComposer.svelte';
11
20
  export { default as GridCell } from './layout/grid/GridCell.svelte';
12
21
  export { default as Plot } from './layout/plot/Plot.svelte';
@@ -21,20 +30,20 @@ export type { ThemeName } from './configuration/themes';
21
30
  export { groupBy, buildSeries } from './utils/grouping';
22
31
  export { makeColorScale, resolveColorScale, normalize, resolveCssColor, paletteColor, contrastTextColor, contrastRatio } from './utils/color';
23
32
  export { Margins } from './layout/margins/Margins';
24
- export { resolveOpacityScale } from './utils/opacity';
25
- export { resolveSymbolScale } from './utils/symbol';
33
+ export { resolveOpacityScale } from './utils/OpacityScale';
34
+ export { resolveSymbolScale } from './utils/SymbolScale';
26
35
  export { Statistics } from './phases/statistics/Statistics';
27
36
  export type { AxisValue, ChannelValue, ChannelName, AxisChannelName, IndependentChannelName, SizeChannelName, ChannelAccessors } from './types/layout/mapping';
28
37
  export type { AxisScale, AxisBasedScalesConfig, ChannelScalesConfig } from './types/layout/scales';
29
38
  export type { Accessor, Series, SeriesProps, DataProps } from './types/plots/data/common';
30
39
  export type { BasePlotProps, PlotCoreProps, PlotChromeProps, FigureBoxProps, SegmentsConfig, ScalesConfig, MarginConfig, TooltipConfig, HoverConfig } from './types/plots/props';
31
- export type { AxisBasedStylesConfig, GapsAwarePlotStylesConfig, GeoStylesConfig, GeoTileLayerConfig } from './types/layout/styles';
40
+ export type { AxisBasedStylesConfig, ConnectorBasedStylesConfig, BulletStylesConfig, GapsAwarePlotStylesConfig, CurveAwarePlotStylesConfig, GeoStylesConfig, GeoTileLayerConfig } from './types/layout/styles';
32
41
  export type { GapsConfig } from './types/plots/gaps';
33
42
  export type { LineSegmentStyle, BarSegmentStyle, CellSegmentStyle, GeoSegmentStyle, ScatterSegmentStyle } from './types/plots/segments/common';
34
43
  export type { Range, Area, Segment } from './types/plots/segments/config';
35
44
  export type { SymbolType } from './types/plots/constants';
36
45
  export type { FontStyle, StrokeStyle, DotStyle, AreaStyle } from './types/plots/styling';
37
- export type { AxisBasedMarkersConfig, BrushSelection, MarkerCurveName } from './types/markers/common';
46
+ export type { AxisBasedMarkersConfig, BrushSelection } from './types/markers/common';
38
47
  export type { StatisticConfig } from './types/layout/statistics';
39
48
  export type * from './types/transforms';
40
49
  export type { GeoFeature, GeoJsonInput, GeoDataProps, Topology } from './types/plots/data/geo';
@@ -48,4 +57,4 @@ export type { GridPlacement, GridInset, GridCellContext, GridCellSnippet } from
48
57
  export type { Responsive, FacetConfig, FacetCellContext, FacetIndicatorContext, FacetIndicatorSnippet, FacetNavDirection, FacetNavContext, FacetNavSnippet } from './types/layout/facet';
49
58
  export type { LegendSection, DiscreteLegendSection, ContinuousLegendSection, LegendItem, LegendNavDirection, LegendNavContext, LegendNavSnippet, LegendEntry, LegendMark, LegendRange } from './types/layout/legend';
50
59
  export type { HoverStrategy, HoverPoint, HoverDisplayPoint } from './types/layout/hover';
51
- export type { PlotStylesConfig, PlotStylesConfigInput, DividerLineStyle, TextStyle } from './types/configuration/styling';
60
+ export type { PlotStylesConfig, PlotStylesConfigInput, PaletteInput, DividerLineStyle, TextStyle } from './types/configuration/styling';
package/dist/index.js CHANGED
@@ -1,15 +1,24 @@
1
1
  // ── Plots ───────────────────────────────────────────────────────────────────
2
2
  // One mark family each, with optional chrome (title, legend, caption),
3
3
  // timeline and facets around it.
4
- export { default as AreaPlot } from './plots/area/Plot.svelte';
5
- export { default as BarPlot } from './plots/bar/Plot.svelte';
6
- export { default as BoxPlot } from './plots/box/Plot.svelte';
7
- export { default as HistogramPlot } from './plots/histogram/Plot.svelte';
8
- export { default as HeatmapPlot } from './plots/heatmap/Plot.svelte';
9
- export { default as LinePlot } from './plots/line/Plot.svelte';
10
- export { default as PyramidPlot } from './plots/pyramid/Plot.svelte';
11
- export { default as ScatterPlot } from './plots/scatter/Plot.svelte';
12
- export { default as GeoPlot } from './plots/geo/Plot.svelte';
4
+ export { default as AreaPlot } from './plots/evolution/area/Plot.svelte';
5
+ export { default as BarPlot } from './plots/ranking/bar/Plot.svelte';
6
+ export { default as BoxPlot } from './plots/distribution/box/Plot.svelte';
7
+ export { default as BulletPlot } from './plots/ranking/bullet/Plot.svelte';
8
+ export { default as ClevelandPlot } from './plots/ranking/cleveland/Plot.svelte';
9
+ export { default as DensityPlot } from './plots/distribution/density/Plot.svelte';
10
+ export { default as DumbbellPlot } from './plots/ranking/dumbbell/Plot.svelte';
11
+ export { default as ForestPlot } from './plots/ranking/forest/Plot.svelte';
12
+ export { default as GeoPlot } from './plots/map/geo/Plot.svelte';
13
+ export { default as HeatmapPlot } from './plots/correlation/heatmap/Plot.svelte';
14
+ export { default as HistogramPlot } from './plots/distribution/histogram/Plot.svelte';
15
+ export { default as LinePlot } from './plots/evolution/line/Plot.svelte';
16
+ export { default as LollipopPlot } from './plots/ranking/lollipop/Plot.svelte';
17
+ export { default as PyramidPlot } from './plots/distribution/pyramid/Plot.svelte';
18
+ export { default as ScatterPlot } from './plots/correlation/scatter/Plot.svelte';
19
+ export { default as SlopePlot } from './plots/evolution/slope/Plot.svelte';
20
+ export { default as SparklinePlot } from './plots/evolution/sparkline/Plot.svelte';
21
+ export { default as ViolinPlot } from './plots/distribution/violin/Plot.svelte';
13
22
  // ── Composition ─────────────────────────────────────────────────────────────
14
23
  // Separate plots combined into one figure, with chrome of its own.
15
24
  export { default as PlotComposer } from './layout/composer/PlotComposer.svelte';
@@ -27,6 +36,6 @@ export { SYSTEM_FONT } from './configuration/fonts';
27
36
  export { groupBy, buildSeries } from './utils/grouping';
28
37
  export { makeColorScale, resolveColorScale, normalize, resolveCssColor, paletteColor, contrastTextColor, contrastRatio } from './utils/color';
29
38
  export { Margins } from './layout/margins/Margins';
30
- export { resolveOpacityScale } from './utils/opacity';
31
- export { resolveSymbolScale } from './utils/symbol';
39
+ export { resolveOpacityScale } from './utils/OpacityScale';
40
+ export { resolveSymbolScale } from './utils/SymbolScale';
32
41
  export { Statistics } from './phases/statistics/Statistics';
@@ -1,48 +1,10 @@
1
- <script module lang="ts">
2
- import type { Margins as MarginsType } from '../margins/Margins';
3
- import type { EdgeBox } from '../../types/layout/box';
4
- import type { StylesLayoutConfig } from '../../types/layout/styles';
5
- import type { HoverPosition } from '../../types/phases';
6
- import type { HoverConfig as PlotHoverConfig } from '../../types/plots/props';
7
-
8
- /**
9
- * What `BasePlotLayout` draws from: the end of a plot's pipeline. An axis
10
- * kind's state is one as is; GeoPlot builds its own.
11
- */
12
- export type PlotLayoutState = {
13
- /** What the pointer can match, and how the hover reads. */
14
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
- hover?: PlotHoverConfig<any>;
16
- /** Where each row sits, for hover matching and the plot's scales. */
17
- hoverPosition?: HoverPosition;
18
- /** The rows the plot draws and hovers over. */
19
- hoverRows?: unknown[];
20
- /** The plot's x/y/r/length scales, and the scales a marker without its own inherits. */
21
- scales?: object;
22
- /** What the plot's position channels are and which way it runs, for what draws inside it. */
23
- axes?: PlotAxes;
24
- /** Every marker the pipeline resolved. */
25
- markers?: object[];
26
- /** All resolved series - axis kinds only. */
27
- resolvedSeries?: object[];
28
- /** Each series' color, by name - axis kinds only. */
29
- colorForSeries?: (name: string) => string;
30
- /** Per-series marker groups - axis kinds only. */
31
- scopedGroups?: object[];
32
- /** The plot's `styles`: its frame and, on a map, its tile layer. */
33
- styles?: StylesLayoutConfig;
34
- /** What an `'auto'` margin side reads as. Defaults to {@link Margins.AXIS_ESTIMATE}. */
35
- marginEstimate?: MarginsType;
36
- /** The plot's value labels, whose `reach` is the room the margins start from. */
37
- valueLabels?: { reach: EdgeBox[] };
38
- };
39
- </script>
40
-
41
1
  <script
42
2
  lang="ts"
43
3
  generics="TData extends Record<string, unknown>, TSeries extends Record<string, unknown> = TData"
44
4
  >
45
5
  import { Margins } from '../margins/Margins';
6
+ import type { AxisScale } from '../../types/layout/scales';
7
+ import type { PlotLayoutState } from '../../types/layout/plot';
46
8
  import { PlotMargins } from '../margins/PlotMargins.svelte';
47
9
  import { LegendState } from '../legend/LegendState.svelte';
48
10
  import { onDestroy, untrack } from 'svelte';
@@ -51,6 +13,7 @@
51
13
  import { Plot, Pointer, setPlotDefaults } from 'svelteplot';
52
14
  import { getConfiguration } from '../../configuration/config.svelte';
53
15
  import { SveltePlotScale } from '../scales/SveltePlotScale';
16
+ import { TickLabels } from '../scales/TickLabels';
54
17
  import ScalesLayout from '../scales/ScalesLayout.svelte';
55
18
  import GeometryLayout from '../geometry/GeometryLayout.svelte';
56
19
  import CoordinatesLayout from '../coordinates/CoordinatesLayout.svelte';
@@ -59,7 +22,6 @@
59
22
  import { PlotHover } from '../hover/PlotHover.svelte';
60
23
  import { PlotContext } from '../plot/PlotContext';
61
24
  import { TimelineState } from '../timeline/TimelineState.svelte';
62
- import type { PlotAxes } from '../../phases/data/PlotAxes';
63
25
  import type { AxisBasedScalesConfig } from '../../types/layout/scales';
64
26
  import type { AxisValue } from '../../types/layout/mapping';
65
27
  import type { CoordinatesConfig, GeoScalesConfig } from '../../types/layout/coordinates';
@@ -142,7 +104,9 @@
142
104
  // What this plot draws, on its figure's legend - its series, their colors and marks.
143
105
  const legend = LegendState.current();
144
106
  const legendSource = Symbol('plot');
107
+ const silenced = LegendState.isSilenced();
145
108
  $effect(() => {
109
+ if (silenced) return;
146
110
  const entries = LegendState.entriesOf(state as never);
147
111
  untrack(() => legend?.register(legendSource, entries));
148
112
  });
@@ -162,16 +126,91 @@
162
126
  numberFormat: { useGrouping: 'min2', compactDisplay: untrack(() => cfg.axis.compactDisplay) }
163
127
  });
164
128
 
129
+ /** What an `'auto'` side reads as: the plot's own estimate, less the room of an axis that is not drawn. */
130
+ const marginEstimate = $derived.by(() => {
131
+ const estimate = state.marginEstimate ?? Margins.AXIS_ESTIMATE;
132
+ const bare = { x: scales?.x?.axisDisplay === 'none', y: scales?.y?.axisDisplay === 'none' };
133
+ return estimate.map((value, side) =>
134
+ (bare.x && side === 'bottom') || (bare.y && side === 'left') ? Math.min(value, 8) : value
135
+ );
136
+ });
137
+
138
+ /**
139
+ * How the labels of the plot's category axes (bands, or text laid out as points) are laid out when they would not fit
140
+ * side by side, unless the author set a `tickRotate` of their own or turned
141
+ * `axis.autoRotate` off: the x labels turn (45 degrees, else 90), and either
142
+ * axis leaves some out when even that is not enough. Judged against the plot's
143
+ * width and height less the margins an `'auto'` side is estimated at, so it holds
144
+ * whatever the margins settle on.
145
+ */
146
+ const tickLayout = $derived.by(() => {
147
+ // A kind's band axes, and any axis of text categories a line or scatter lays out as points.
148
+ const bands = (['x', 'y'] as const).filter(
149
+ (axis) => state.axes?.bands.includes(axis) || state.axes?.isDiscrete(axis)
150
+ );
151
+ if (!cfg.axis.autoRotate || bands.length === 0) return undefined;
152
+ const estimate = marginEstimate;
153
+ const categories = (axis: 'x' | 'y') => {
154
+ const given = scales?.[axis]?.domain;
155
+ if (given) return given.map(String);
156
+ const get = axis === 'x' ? getX : getY;
157
+ return [...new Set(data.map((row) => String(get(row))))].sort();
158
+ };
159
+ const out: {
160
+ x?: ReturnType<typeof TickLabels.layout>;
161
+ y?: { every: number; values: string[] };
162
+ } = {};
163
+ if (bands.includes('x') && scales?.x?.tickRotate === undefined) {
164
+ out.x = TickLabels.layout(
165
+ categories('x'),
166
+ width - estimate.left - estimate.right,
167
+ scales?.x?.paddingInner ?? 0.1,
168
+ cfg.axis.fontSize,
169
+ cfg
170
+ );
171
+ }
172
+ if (bands.includes('y') && scales?.y?.ticks == null) {
173
+ const values = categories('y');
174
+ const every = TickLabels.rows(
175
+ values.length,
176
+ height - estimate.top - estimate.bottom,
177
+ cfg.axis.fontSize
178
+ );
179
+ if (every > 1) out.y = { every, values };
180
+ }
181
+ return out;
182
+ });
183
+ /** `scales` with the rotation the tick layout chose for the x labels. */
184
+ const layoutScales = $derived.by(() => {
185
+ const rotate = tickLayout?.x?.rotate;
186
+ if (!rotate || scales === undefined) return scales;
187
+ return { ...scales, x: { ...scales.x, tickRotate: rotate } };
188
+ });
189
+ /** The category labels a crowded axis still writes: one in every few. */
190
+ const tickValues = $derived.by(() => {
191
+ const out: Partial<Record<'x' | 'y', string[]>> = {};
192
+ const x = tickLayout?.x;
193
+ if (x && x.every > 1) {
194
+ const values =
195
+ scales?.x?.domain?.map(String) ?? [...new Set(data.map((row) => String(getX(row))))].sort();
196
+ out.x = values.filter((_, index) => index % x.every === 0);
197
+ }
198
+ const y = tickLayout?.y;
199
+ if (y) out.y = y.values.filter((_, index) => index % y.every === 0);
200
+ return out;
201
+ });
202
+
165
203
  // Created once: this plot's margins, grown to fit the labels its markers report.
166
204
  const plotMargins = new PlotMargins({
167
205
  theme: () => cfg.margins,
168
206
  author: () => margins,
169
- estimate: () => state.marginEstimate ?? Margins.AXIS_ESTIMATE,
207
+ estimate: () => marginEstimate,
170
208
  reserve: () => state.valueLabels?.reach ?? [],
171
209
  size: () => ({ width, height }),
172
210
  resetKey: () => state.resolvedSeries,
173
- scales: () => scales,
211
+ scales: () => layoutScales,
174
212
  tickFontSize: () => cfg.axis.fontSize,
213
+ tickWidth: () => ({ x: tickLayout?.x?.width }),
175
214
  settle: (settled) => (margins = settled)
176
215
  });
177
216
  const numericMargins = $derived(plotMargins.numeric);
@@ -191,16 +230,33 @@
191
230
  /** The domains `ScalesLayout` widens an axis to, for an edge tick's `'extend'` (see `EdgeTicks`). */
192
231
  const edgeDomains = new SvelteMap<'x' | 'y', [number, number]>();
193
232
 
233
+ /** The title svelteplot would infer from rows, for a slice with none (it infers nothing then). */
234
+ function titleOfEmpty(axis: 'x' | 'y', scale: AxisScale<TData> | undefined): string | undefined {
235
+ const field = state.channels?.[axis]?.source;
236
+ if (data.length > 0 || typeof field !== 'string' || scale?.label !== undefined)
237
+ return undefined;
238
+ if (scale?.type === 'time' || scale?.type === 'utc') return undefined;
239
+ // `ScalesLayout` draws a vertical title.
240
+ if (scale?.labelOrientation === 'vertical') return undefined;
241
+ if (axis === 'y') return `${scale?.reverse ? '↓' : '↑'} ${field}`;
242
+ if (state.axes?.isDiscrete('x')) return field;
243
+ return scale?.reverse ? `← ${field}` : `${field} →`;
244
+ }
245
+
194
246
  // `SveltePlotScale.build` already left only svelteplot's own scale options.
195
247
  const resolvedX = $derived.by(() => {
196
- const built = SveltePlotScale.build(scales?.x, data, getX);
248
+ const built = SveltePlotScale.build(layoutScales?.x, data, getX);
197
249
  const domain = edgeDomains.get('x');
198
- return (domain ? { ...built, domain, nice: false } : built) as SveltePlotProps['x'];
250
+ const label = titleOfEmpty('x', layoutScales?.x);
251
+ const out = domain ? { ...built, domain, nice: false } : built;
252
+ return (label ? { ...out, label } : out) as SveltePlotProps['x'];
199
253
  });
200
254
  const resolvedY = $derived.by(() => {
201
255
  const built = SveltePlotScale.build(scales?.y, data, getY);
202
256
  const domain = edgeDomains.get('y');
203
- return (domain ? { ...built, domain, nice: false } : built) as SveltePlotProps['y'];
257
+ const label = titleOfEmpty('y', scales?.y);
258
+ const out = domain ? { ...built, domain, nice: false } : built;
259
+ return (label ? { ...out, label } : out) as SveltePlotProps['y'];
204
260
  });
205
261
  /** Threaded straight into svelteplot's own `r` scale option - see `RScaleConfig`'s own doc comment for why this isn't independently resolved like `color`. */
206
262
  const resolvedR = $derived(scales?.r as SveltePlotProps['r']);
@@ -260,18 +316,27 @@
260
316
  locale={cfg.axis.locale}
261
317
  {data}
262
318
  {containerEl}
263
- remountKey={plotMargins.remountKey}
264
319
  >
265
320
  <StylesLayout styles={state.styles} {width} {height} {numericMargins} />
266
321
  <!-- Axes for every kind but GeoPlot. -->
267
322
  {#if scales !== undefined && coordinates === undefined}
268
- <ScalesLayout {data} {getX} {getY} {width} {height} {numericMargins} {scales} {edgeDomains} />
323
+ <ScalesLayout
324
+ {data}
325
+ {getX}
326
+ {getY}
327
+ {width}
328
+ {height}
329
+ {numericMargins}
330
+ scales={layoutScales}
331
+ {edgeDomains}
332
+ {tickValues}
333
+ {state}
334
+ />
269
335
  {/if}
270
336
  <GeometryLayout
271
337
  markers={resolvedMarkers}
272
338
  seriesData={seriesData ?? []}
273
339
  scopedGroups={scopedGroups ?? []}
274
- channelScales={scales}
275
340
  {ctrl}
276
341
  {width}
277
342
  {height}
@@ -307,7 +372,7 @@
307
372
  visible={ctrl.showTooltip && ctrl.tooltipPosition != null}
308
373
  x={ctrl.tooltipPosition?.x ?? 0}
309
374
  y={ctrl.tooltipPosition?.y ?? 0}
310
- rows={ctrl.matchedRows.map((p) => p.row)}
375
+ rows={ctrl.matchedRows.map((p) => ({ ...p.row, seriesColor: p.color }))}
311
376
  format={hover.tooltip.format}
312
377
  sort={hover.tooltip.sort}
313
378
  content={hover.tooltip.content}
@@ -1,42 +1,5 @@
1
- import type { Margins as MarginsType } from '../margins/Margins';
2
- import type { EdgeBox } from '../../types/layout/box';
3
- import type { StylesLayoutConfig } from '../../types/layout/styles';
4
- import type { HoverPosition } from '../../types/phases';
5
- import type { HoverConfig as PlotHoverConfig } from '../../types/plots/props';
6
- /**
7
- * What `BasePlotLayout` draws from: the end of a plot's pipeline. An axis
8
- * kind's state is one as is; GeoPlot builds its own.
9
- */
10
- export type PlotLayoutState = {
11
- /** What the pointer can match, and how the hover reads. */
12
- hover?: PlotHoverConfig<any>;
13
- /** Where each row sits, for hover matching and the plot's scales. */
14
- hoverPosition?: HoverPosition;
15
- /** The rows the plot draws and hovers over. */
16
- hoverRows?: unknown[];
17
- /** The plot's x/y/r/length scales, and the scales a marker without its own inherits. */
18
- scales?: object;
19
- /** What the plot's position channels are and which way it runs, for what draws inside it. */
20
- axes?: PlotAxes;
21
- /** Every marker the pipeline resolved. */
22
- markers?: object[];
23
- /** All resolved series - axis kinds only. */
24
- resolvedSeries?: object[];
25
- /** Each series' color, by name - axis kinds only. */
26
- colorForSeries?: (name: string) => string;
27
- /** Per-series marker groups - axis kinds only. */
28
- scopedGroups?: object[];
29
- /** The plot's `styles`: its frame and, on a map, its tile layer. */
30
- styles?: StylesLayoutConfig;
31
- /** What an `'auto'` margin side reads as. Defaults to {@link Margins.AXIS_ESTIMATE}. */
32
- marginEstimate?: MarginsType;
33
- /** The plot's value labels, whose `reach` is the room the margins start from. */
34
- valueLabels?: {
35
- reach: EdgeBox[];
36
- };
37
- };
1
+ import type { PlotLayoutState } from '../../types/layout/plot';
38
2
  import type { Snippet } from 'svelte';
39
- import type { PlotAxes } from '../../phases/data/PlotAxes';
40
3
  import type { CoordinatesConfig } from '../../types/layout/coordinates';
41
4
  import type { HoverPoint } from '../../types/layout/hover';
42
5
  import type { MarginConfig } from '../../types/plots/props';
@@ -11,6 +11,7 @@
11
11
  createCameraRotateTween
12
12
  } from './camera.svelte';
13
13
  import CameraFit from './CameraFit.svelte';
14
+ import ProjectionZoom from './ProjectionZoom.svelte';
14
15
  import type { CoordinatesConfig } from '../../types/layout/coordinates';
15
16
 
16
17
  type SveltePlotProps = ComponentProps<typeof Plot>;
@@ -19,8 +20,8 @@
19
20
  * Resolves the active coordinate system (a `d3-geo` projection) and owns
20
21
  * `<Plot>` itself, since `projection` must be known before it mounts.
21
22
  * Also owns pan/zoom/rotate gesture state and the declarative `camera`,
22
- * composed into the `<g>` transform wrapper (and, for `camera`/`rotate`
23
- * on `orthographic`, into the projection's own `rotate`). A no-op for
23
+ * applied to the projection's output by `ProjectionZoom` (and, for
24
+ * `camera`/`rotate` on `orthographic`, to the projection's own `rotate`). A no-op for
24
25
  * every plot kind but `GeoPlot`.
25
26
  */
26
27
  let {
@@ -35,7 +36,6 @@
35
36
  locale = undefined,
36
37
  data,
37
38
  containerEl,
38
- remountKey = undefined,
39
39
  children
40
40
  }: {
41
41
  width: number;
@@ -53,8 +53,6 @@
53
53
  /** Fed to `resolveProjection`'s `domain: 'data'` sentinel and to `coordinates.camera`'s `{features}` target resolution. */
54
54
  data: TData[];
55
55
  containerEl?: HTMLDivElement;
56
- /** See `BasePlotLayout`'s own `remountKey` doc comment - forwarded verbatim to key svelteplot's `<Plot>` itself. */
57
- remountKey?: string | number;
58
56
  children: Snippet;
59
57
  } = $props();
60
58
 
@@ -131,13 +129,17 @@
131
129
  );
132
130
  const rotateOverrideActive = $derived(cameraOrthoRotate != null || rotateEnabled);
133
131
 
132
+ /** Moving the view past the plot's box needs what is outside it drawn too: the frame clip would cut it at the unmoved box, so the plot's own clip does it instead. */
133
+ const movesView = $derived(zoomEnabled || panEnabled || cameraActive);
134
+
134
135
  const finalProjection = $derived.by(() => {
135
- if (!rotateOverrideActive) return resolvedProjection;
136
+ if (!rotateOverrideActive && !movesView) return resolvedProjection;
136
137
  return {
137
138
  ...(typeof resolvedProjection === 'string'
138
139
  ? { type: resolvedProjection }
139
140
  : resolvedProjection),
140
- rotate: activeRotate
141
+ ...(rotateOverrideActive ? { rotate: activeRotate } : {}),
142
+ ...(movesView ? { clip: false } : {})
141
143
  };
142
144
  });
143
145
 
@@ -149,41 +151,41 @@
149
151
  transition: () => cameraConfig?.transition
150
152
  });
151
153
  const cameraTransform = $derived(cameraTransformTween.current ?? { x: 0, y: 0, k: 1 });
154
+ const clipId = `geo-frame-clip-${Math.random().toString(36).slice(2, 9)}`;
152
155
  </script>
153
156
 
154
- {#key remountKey}
155
- <Plot
156
- {width}
157
- {height}
158
- {margin}
159
- {x}
160
- {y}
161
- {r}
162
- {length}
163
- {locale}
164
- projection={finalProjection as SveltePlotProps['projection']}
165
- >
166
- {#if cameraActive && resolvedCameraTarget}
167
- <CameraFit
168
- target={resolvedCameraTarget}
169
- anchor={cameraConfig?.anchor}
170
- padding={cameraConfig?.padding}
171
- zoom={cameraConfig?.zoom}
172
- {width}
173
- {height}
174
- onFit={(fit) => (cameraFit = fit)}
175
- />
176
- {/if}
177
- <g transform="translate({cameraTransform.x}, {cameraTransform.y}) scale({cameraTransform.k})">
178
- <g
179
- transform="translate({geoZoom.transform.x}, {geoZoom.transform.y}) scale({geoZoom.transform
180
- .k})"
181
- >
182
- {@render children()}
183
- </g>
184
- </g>
185
- </Plot>
186
- {/key}
157
+ <Plot
158
+ {width}
159
+ {height}
160
+ {margin}
161
+ {x}
162
+ {y}
163
+ {r}
164
+ {length}
165
+ {locale}
166
+ projection={finalProjection as SveltePlotProps['projection']}
167
+ >
168
+ {#if cameraActive && resolvedCameraTarget}
169
+ <CameraFit
170
+ target={resolvedCameraTarget}
171
+ anchor={cameraConfig?.anchor}
172
+ padding={cameraConfig?.padding}
173
+ zoom={cameraConfig?.zoom}
174
+ {width}
175
+ {height}
176
+ onFit={(fit) => (cameraFit = fit)}
177
+ />
178
+ {/if}
179
+ <!-- What a zoom or a camera pushes past the plot's box is cut there, so it never covers the legend or the chrome around it. -->
180
+ <defs>
181
+ <clipPath id={clipId}><rect x="0" y="0" {width} {height} /></clipPath>
182
+ </defs>
183
+ <g clip-path="url(#{clipId})">
184
+ <ProjectionZoom inner={geoZoom.transform} outer={cameraTransform}>
185
+ {@render children()}
186
+ </ProjectionZoom>
187
+ </g>
188
+ </Plot>
187
189
 
188
190
  <style>
189
191
  :global(figure.svelteplot svg) {
@@ -17,8 +17,6 @@ declare function $$render<TData extends Record<string, unknown>>(): {
17
17
  /** Fed to `resolveProjection`'s `domain: 'data'` sentinel and to `coordinates.camera`'s `{features}` target resolution. */
18
18
  data: TData[];
19
19
  containerEl?: HTMLDivElement;
20
- /** See `BasePlotLayout`'s own `remountKey` doc comment - forwarded verbatim to key svelteplot's `<Plot>` itself. */
21
- remountKey?: string | number;
22
20
  children: Snippet;
23
21
  };
24
22
  exports: {};
@@ -0,0 +1,48 @@
1
+ <script lang="ts">
2
+ import { getContext, setContext, type Snippet } from 'svelte';
3
+ import { ZoomedProjection } from './ZoomedProjection';
4
+ import type { GeoZoomTransform } from './zoom.svelte';
5
+ import type { StreamingProjection } from '../../plots/utils/tiles';
6
+
7
+ /**
8
+ * Draws everything inside it through the plot's projection moved by `inner`
9
+ * then `outer`, instead of scaling the drawn SVG: a zoom moves and spreads the
10
+ * positions, while dots, text and strokes keep their size. Works by handing
11
+ * the marks below a view of svelteplot's plot state whose `scales.projection`
12
+ * is the moved one.
13
+ */
14
+ let {
15
+ inner,
16
+ outer,
17
+ children
18
+ }: { inner: GeoZoomTransform; outer: GeoZoomTransform; children: Snippet } = $props();
19
+
20
+ type Scales = { projection?: StreamingProjection & { aspectRatio?: number } } | undefined;
21
+ type PlotState = { scales: Scales; publicState: object };
22
+ type PlotContext = { getPlotState: () => PlotState } & Record<string, unknown>;
23
+
24
+ const context = getContext<PlotContext>('svelteplot');
25
+ const state = context.getPlotState();
26
+
27
+ const scales = $derived.by((): Scales => {
28
+ const own = state.scales;
29
+ return own?.projection
30
+ ? { ...own, projection: ZoomedProjection.of(own.projection, inner, outer) }
31
+ : own;
32
+ });
33
+
34
+ const publicState = new Proxy(state.publicState, {
35
+ get: (target, key) => (key === 'scales' ? scales : Reflect.get(target, key, target))
36
+ });
37
+ const movedState = new Proxy(state, {
38
+ get: (target, key) => {
39
+ if (key === 'scales') return scales;
40
+ if (key === 'publicState') return publicState;
41
+ return Reflect.get(target, key, target);
42
+ }
43
+ });
44
+
45
+ setContext('svelteplot', { ...context, getPlotState: () => movedState });
46
+ </script>
47
+
48
+ {@render children()}
@@ -0,0 +1,10 @@
1
+ import { type Snippet } from 'svelte';
2
+ import type { GeoZoomTransform } from './zoom.svelte';
3
+ type $$ComponentProps = {
4
+ inner: GeoZoomTransform;
5
+ outer: GeoZoomTransform;
6
+ children: Snippet;
7
+ };
8
+ declare const ProjectionZoom: import("svelte").Component<$$ComponentProps, {}, "">;
9
+ type ProjectionZoom = ReturnType<typeof ProjectionZoom>;
10
+ export default ProjectionZoom;
@@ -0,0 +1,11 @@
1
+ import type { GeoZoomTransform } from './zoom.svelte';
2
+ import type { StreamingProjection } from '../../plots/utils/tiles';
3
+ /** A fitted projection with a pan and scale applied to where it puts things, so positions move and zoom while what is drawn at them keeps its size. */
4
+ export declare class ZoomedProjection {
5
+ /** `projection`, then `outer` over `inner` (each a pan and scale) as one move in pixels. */
6
+ static of(projection: StreamingProjection & {
7
+ aspectRatio?: number;
8
+ }, inner: GeoZoomTransform, outer: GeoZoomTransform): StreamingProjection & {
9
+ aspectRatio?: number;
10
+ };
11
+ }
@@ -0,0 +1,24 @@
1
+ import { geoTransform } from 'd3-geo';
2
+ /** A fitted projection with a pan and scale applied to where it puts things, so positions move and zoom while what is drawn at them keeps its size. */
3
+ export class ZoomedProjection {
4
+ /** `projection`, then `outer` over `inner` (each a pan and scale) as one move in pixels. */
5
+ static of(projection, inner, outer) {
6
+ const k = inner.k * outer.k;
7
+ const x = outer.k * inner.x + outer.x;
8
+ const y = outer.k * inner.y + outer.y;
9
+ if (k === 1 && x === 0 && y === 0)
10
+ return projection;
11
+ const move = geoTransform({
12
+ point(px, py) {
13
+ this.stream.point(px * k + x, py * k + y);
14
+ }
15
+ });
16
+ return {
17
+ aspectRatio: projection.aspectRatio,
18
+ invert: projection.invert
19
+ ? ([px, py]) => projection.invert([(px - x) / k, (py - y) / k])
20
+ : undefined,
21
+ stream: (sink) => projection.stream(move.stream(sink))
22
+ };
23
+ }
24
+ }