@fundar/data-chart-telling 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (560) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/README.md +58 -19
  3. package/dist/configuration/config.svelte.d.ts +1 -1
  4. package/dist/configuration/config.svelte.js +172 -95
  5. package/dist/configuration/themes/index.d.ts +5 -1304
  6. package/dist/index.d.ts +24 -14
  7. package/dist/index.js +20 -10
  8. package/dist/layout/base/BasePlotLayout.svelte +129 -51
  9. package/dist/layout/base/BasePlotLayout.svelte.d.ts +1 -38
  10. package/dist/layout/coordinates/CoordinatesLayout.svelte +42 -40
  11. package/dist/layout/coordinates/CoordinatesLayout.svelte.d.ts +0 -2
  12. package/dist/layout/coordinates/ProjectionZoom.svelte +48 -0
  13. package/dist/layout/coordinates/ProjectionZoom.svelte.d.ts +10 -0
  14. package/dist/layout/coordinates/ZoomedProjection.d.ts +11 -0
  15. package/dist/layout/coordinates/ZoomedProjection.js +24 -0
  16. package/dist/layout/coordinates/camera.svelte.js +11 -8
  17. package/dist/layout/coordinates/projections/argentina.js +1 -1
  18. package/dist/layout/coordinates/projections/fit.d.ts +1 -1
  19. package/dist/layout/coordinates/projections/fit.js +1 -1
  20. package/dist/layout/coordinates/zoom.svelte.d.ts +4 -5
  21. package/dist/layout/coordinates/zoom.svelte.js +4 -5
  22. package/dist/layout/facet/FacetLayout.svelte +1 -1
  23. package/dist/layout/facet/config.js +1 -1
  24. package/dist/layout/figure/Figure.svelte +2 -0
  25. package/dist/layout/geometry/GeometryLayout.svelte +14 -9
  26. package/dist/layout/geometry/GeometryLayout.svelte.d.ts +0 -3
  27. package/dist/layout/geometry/MarkerOffset.svelte +28 -0
  28. package/dist/layout/geometry/MarkerOffset.svelte.d.ts +13 -0
  29. package/dist/layout/grid/GridCell.svelte +6 -8
  30. package/dist/layout/hover/HoverSettings.d.ts +20 -6
  31. package/dist/layout/hover/HoverSettings.js +29 -4
  32. package/dist/layout/legend/ContinuousSection.svelte +44 -9
  33. package/dist/layout/legend/DiscreteBadgeItem.svelte +2 -2
  34. package/dist/layout/legend/DiscreteSection.svelte +2 -2
  35. package/dist/layout/legend/DiscreteSymbolIcon.svelte +1 -1
  36. package/dist/layout/legend/LegendChannels.js +36 -12
  37. package/dist/layout/legend/LegendLayout.svelte +9 -1
  38. package/dist/layout/legend/LegendState.svelte.d.ts +9 -0
  39. package/dist/layout/legend/LegendState.svelte.js +24 -3
  40. package/dist/layout/legend/SizeSection.svelte +1 -1
  41. package/dist/layout/margins/PlotMargins.svelte.d.ts +2 -5
  42. package/dist/layout/margins/PlotMargins.svelte.js +4 -8
  43. package/dist/layout/plot/Plot.svelte +6 -3
  44. package/dist/layout/plot/PublicPlotContext.d.ts +5 -4
  45. package/dist/layout/plot/PublicPlotContext.js +7 -3
  46. package/dist/layout/plot/Slice.d.ts +5 -1
  47. package/dist/layout/plot/Slice.js +18 -6
  48. package/dist/layout/scales/EdgeTicks.d.ts +39 -0
  49. package/dist/layout/scales/EdgeTicks.js +82 -0
  50. package/dist/layout/scales/NiceTicks.d.ts +43 -0
  51. package/dist/layout/scales/NiceTicks.js +76 -0
  52. package/dist/layout/scales/ScalesLayout.svelte +133 -34
  53. package/dist/layout/scales/ScalesLayout.svelte.d.ts +10 -0
  54. package/dist/layout/scales/SveltePlotScale.d.ts +15 -0
  55. package/dist/layout/scales/SveltePlotScale.js +86 -0
  56. package/dist/layout/scales/TickLabels.d.ts +32 -0
  57. package/dist/layout/scales/TickLabels.js +55 -0
  58. package/dist/layout/styles/StylesLayout.svelte +2 -2
  59. package/dist/layout/styles/ValueLabels.d.ts +33 -5
  60. package/dist/layout/styles/ValueLabels.js +83 -23
  61. package/dist/layout/timeline/Timeline.svelte +5 -2
  62. package/dist/layout/timeline/Timeline.svelte.d.ts +2 -0
  63. package/dist/layout/timeline/TimelineLayout.svelte +39 -13
  64. package/dist/layout/timeline/TimelineLayout.svelte.d.ts +7 -5
  65. package/dist/layout/timeline/TimelineRule.svelte +1 -0
  66. package/dist/layout/timeline/TimelineState.svelte.d.ts +13 -5
  67. package/dist/layout/timeline/TimelineState.svelte.js +42 -8
  68. package/dist/layout/timeline/TimelineTime.d.ts +18 -0
  69. package/dist/layout/timeline/TimelineTime.js +117 -0
  70. package/dist/layout/tooltip/Tooltip.svelte +10 -7
  71. package/dist/layout/tooltip/Tooltip.svelte.d.ts +6 -4
  72. package/dist/layout/tooltip/TooltipState.svelte.d.ts +8 -2
  73. package/dist/layout/tooltip/TooltipState.svelte.js +23 -4
  74. package/dist/markers/MarkerKinds.d.ts +5 -0
  75. package/dist/markers/MarkerKinds.js +1 -0
  76. package/dist/markers/area/AreaMarker.svelte +15 -63
  77. package/dist/markers/arrow/ArrowMarker.svelte +51 -9
  78. package/dist/markers/bar/BarMarker.svelte +8 -4
  79. package/dist/markers/bollinger/BollingerMarker.svelte +33 -18
  80. package/dist/markers/box/BoxMarker.svelte +40 -9
  81. package/dist/markers/delta/Delta.js +1 -1
  82. package/dist/markers/delta/DeltaMarker.svelte +9 -7
  83. package/dist/markers/dot/DotMarker.svelte +24 -27
  84. package/dist/markers/image/ImageMarker.svelte +17 -12
  85. package/dist/markers/inset/InsetMarker.svelte +2 -2
  86. package/dist/markers/line/LineMarker.svelte +1 -0
  87. package/dist/markers/link/LinkMarker.svelte +174 -29
  88. package/dist/markers/regression/RegressionMarker.svelte +16 -33
  89. package/dist/markers/rule/RuleMarker.svelte +9 -3
  90. package/dist/markers/text/Declutter.d.ts +4 -0
  91. package/dist/markers/text/Declutter.js +26 -11
  92. package/dist/markers/text/TextMarker.svelte +91 -48
  93. package/dist/markers/tick/TickMarker.svelte +27 -25
  94. package/dist/markers/utils/MarkerChannels.d.ts +24 -0
  95. package/dist/markers/utils/MarkerChannels.js +42 -7
  96. package/dist/markers/utils/RowOffset.d.ts +23 -0
  97. package/dist/markers/utils/RowOffset.js +23 -0
  98. package/dist/markers/utils/RowOffsetMarks.svelte +30 -0
  99. package/dist/markers/utils/RowOffsetMarks.svelte.d.ts +33 -0
  100. package/dist/markers/utils/RowStroke.d.ts +31 -0
  101. package/dist/markers/utils/RowStroke.js +28 -0
  102. package/dist/markers/violin/ViolinMarker.svelte +75 -0
  103. package/dist/markers/violin/ViolinMarker.svelte.d.ts +7 -0
  104. package/dist/markers/violin/ViolinProfiles.d.ts +29 -0
  105. package/dist/markers/violin/ViolinProfiles.js +55 -0
  106. package/dist/markers/waffle/WaffleMarker.svelte +17 -37
  107. package/dist/phases/Pipeline.d.ts +5 -0
  108. package/dist/phases/Pipeline.js +8 -2
  109. package/dist/phases/data/DataPhase.d.ts +5 -11
  110. package/dist/phases/data/DataPhase.js +14 -11
  111. package/dist/phases/data/PlotAxes.d.ts +10 -0
  112. package/dist/phases/data/PlotAxes.js +14 -1
  113. package/dist/phases/facet/FacetPanels.d.ts +55 -0
  114. package/dist/phases/facet/FacetPanels.js +96 -0
  115. package/dist/phases/facet/FacetPhase.d.ts +1 -42
  116. package/dist/phases/facet/FacetPhase.js +1 -87
  117. package/dist/phases/hover/HoverPhase.d.ts +6 -43
  118. package/dist/phases/hover/HoverPhase.js +19 -54
  119. package/dist/phases/mapping/MappingPhase.d.ts +1 -1
  120. package/dist/phases/mapping/MappingPhase.js +3 -5
  121. package/dist/phases/markers/MarkersPhase.js +2 -1
  122. package/dist/phases/scales/CategoryOrder.d.ts +23 -0
  123. package/dist/phases/scales/CategoryOrder.js +73 -0
  124. package/dist/phases/scales/ScalesPhase.d.ts +1 -3
  125. package/dist/phases/scales/ScalesPhase.js +37 -27
  126. package/dist/phases/sharedScales/SharedScalesPhase.d.ts +6 -2
  127. package/dist/phases/sharedScales/SharedScalesPhase.js +14 -8
  128. package/dist/phases/statistics/Statistics.d.ts +10 -6
  129. package/dist/phases/statistics/Statistics.js +20 -10
  130. package/dist/phases/statistics/StatisticsPhase.js +10 -6
  131. package/dist/phases/statistics/methods/BollingerStatistic.d.ts +1 -1
  132. package/dist/phases/statistics/methods/BollingerStatistic.js +13 -11
  133. package/dist/phases/statistics/methods/BoxStatistic.d.ts +1 -1
  134. package/dist/phases/statistics/methods/BoxStatistic.js +14 -12
  135. package/dist/phases/statistics/methods/Density2dStatistic.d.ts +1 -1
  136. package/dist/phases/statistics/methods/Density2dStatistic.js +13 -11
  137. package/dist/phases/statistics/methods/DensityStatistic.d.ts +1 -1
  138. package/dist/phases/statistics/methods/DensityStatistic.js +11 -9
  139. package/dist/phases/statistics/methods/DeviationStatistic.d.ts +8 -0
  140. package/dist/phases/statistics/methods/DeviationStatistic.js +111 -0
  141. package/dist/phases/statistics/methods/MovingAverageStatistic.d.ts +1 -1
  142. package/dist/phases/statistics/methods/MovingAverageStatistic.js +11 -9
  143. package/dist/phases/statistics/methods/RegressionStatistic.d.ts +1 -1
  144. package/dist/phases/statistics/methods/RegressionStatistic.js +16 -14
  145. package/dist/phases/tooltip/TooltipPhase.d.ts +4 -2
  146. package/dist/phases/tooltip/TooltipPhase.js +10 -3
  147. package/dist/phases/transforms/ProcessedPositions.d.ts +30 -0
  148. package/dist/phases/transforms/ProcessedPositions.js +74 -0
  149. package/dist/phases/transforms/TransformsPhase.d.ts +5 -42
  150. package/dist/phases/transforms/TransformsPhase.js +67 -58
  151. package/dist/phases/transforms/ValueSelection.d.ts +30 -0
  152. package/dist/phases/transforms/ValueSelection.js +53 -0
  153. package/dist/plots/{heatmap → correlation/heatmap}/Plot.svelte +5 -2
  154. package/dist/plots/{heatmap → correlation/heatmap}/Plot.svelte.d.ts +2 -2
  155. package/dist/plots/{heatmap → correlation/heatmap}/defaults.d.ts +2 -2
  156. package/dist/plots/{heatmap → correlation/heatmap}/defaults.js +5 -5
  157. package/dist/plots/{heatmap → correlation/heatmap}/markers.d.ts +4 -4
  158. package/dist/plots/{heatmap → correlation/heatmap}/markers.js +4 -3
  159. package/dist/plots/{scatter → correlation/scatter}/Plot.svelte +5 -2
  160. package/dist/plots/{scatter → correlation/scatter}/Plot.svelte.d.ts +2 -2
  161. package/dist/plots/{scatter → correlation/scatter}/defaults.d.ts +2 -2
  162. package/dist/plots/{scatter → correlation/scatter}/defaults.js +6 -5
  163. package/dist/plots/{scatter → correlation/scatter}/markers.d.ts +4 -4
  164. package/dist/plots/{scatter → correlation/scatter}/markers.js +5 -4
  165. package/dist/plots/distribution/box/BoxSummaries.d.ts +19 -0
  166. package/dist/plots/distribution/box/BoxSummaries.js +101 -0
  167. package/dist/plots/distribution/box/Plot.svelte +42 -0
  168. package/dist/plots/distribution/box/Plot.svelte.d.ts +26 -0
  169. package/dist/plots/distribution/box/defaults.d.ts +12 -0
  170. package/dist/plots/distribution/box/defaults.js +34 -0
  171. package/dist/plots/distribution/box/markers.d.ts +12 -0
  172. package/dist/plots/distribution/box/markers.js +34 -0
  173. package/dist/plots/distribution/density/Plot.svelte +45 -0
  174. package/dist/plots/distribution/density/Plot.svelte.d.ts +26 -0
  175. package/dist/plots/distribution/density/defaults.d.ts +9 -0
  176. package/dist/plots/distribution/density/defaults.js +29 -0
  177. package/dist/plots/distribution/density/markers.d.ts +9 -0
  178. package/dist/plots/distribution/density/markers.js +42 -0
  179. package/dist/plots/{histogram → distribution/histogram}/Plot.svelte +2 -2
  180. package/dist/plots/{histogram → distribution/histogram}/Plot.svelte.d.ts +2 -2
  181. package/dist/plots/{histogram → distribution/histogram}/defaults.d.ts +2 -2
  182. package/dist/plots/{histogram → distribution/histogram}/defaults.js +4 -4
  183. package/dist/plots/{histogram → distribution/histogram}/markers.d.ts +3 -3
  184. package/dist/plots/{histogram → distribution/histogram}/markers.js +7 -7
  185. package/dist/plots/{pyramid → distribution/pyramid}/Plot.svelte +5 -2
  186. package/dist/plots/{pyramid → distribution/pyramid}/Plot.svelte.d.ts +2 -2
  187. package/dist/plots/{pyramid → distribution/pyramid}/defaults.d.ts +2 -2
  188. package/dist/plots/{pyramid → distribution/pyramid}/defaults.js +7 -6
  189. package/dist/plots/{pyramid → distribution/pyramid}/markers.d.ts +4 -4
  190. package/dist/plots/{pyramid → distribution/pyramid}/markers.js +8 -11
  191. package/dist/plots/distribution/violin/Plot.svelte +45 -0
  192. package/dist/plots/distribution/violin/Plot.svelte.d.ts +26 -0
  193. package/dist/plots/distribution/violin/defaults.d.ts +10 -0
  194. package/dist/plots/distribution/violin/defaults.js +58 -0
  195. package/dist/plots/distribution/violin/markers.d.ts +10 -0
  196. package/dist/plots/distribution/violin/markers.js +71 -0
  197. package/dist/plots/{area → evolution/area}/Plot.svelte +2 -2
  198. package/dist/plots/{area → evolution/area}/Plot.svelte.d.ts +2 -2
  199. package/dist/plots/{area → evolution/area}/defaults.d.ts +2 -2
  200. package/dist/plots/{area → evolution/area}/defaults.js +2 -0
  201. package/dist/plots/{area → evolution/area}/markers.d.ts +2 -2
  202. package/dist/plots/{area → evolution/area}/markers.js +2 -3
  203. package/dist/plots/{line → evolution/line}/Plot.svelte +2 -2
  204. package/dist/plots/{line → evolution/line}/Plot.svelte.d.ts +2 -2
  205. package/dist/plots/{line → evolution/line}/defaults.d.ts +2 -2
  206. package/dist/plots/{line → evolution/line}/defaults.js +2 -0
  207. package/dist/plots/{line → evolution/line}/markers.d.ts +11 -8
  208. package/dist/plots/{line → evolution/line}/markers.js +7 -6
  209. package/dist/plots/evolution/slope/Plot.svelte +42 -0
  210. package/dist/plots/evolution/slope/Plot.svelte.d.ts +26 -0
  211. package/dist/plots/evolution/slope/defaults.d.ts +8 -0
  212. package/dist/plots/evolution/slope/defaults.js +31 -0
  213. package/dist/plots/evolution/slope/markers.d.ts +16 -0
  214. package/dist/plots/evolution/slope/markers.js +79 -0
  215. package/dist/plots/evolution/sparkline/Plot.svelte +45 -0
  216. package/dist/plots/evolution/sparkline/Plot.svelte.d.ts +26 -0
  217. package/dist/plots/evolution/sparkline/defaults.d.ts +7 -0
  218. package/dist/plots/evolution/sparkline/defaults.js +23 -0
  219. package/dist/plots/evolution/sparkline/markers.d.ts +7 -0
  220. package/dist/plots/evolution/sparkline/markers.js +56 -0
  221. package/dist/plots/{geo → map/geo}/Core.svelte +11 -10
  222. package/dist/plots/{geo → map/geo}/Core.svelte.d.ts +1 -1
  223. package/dist/plots/map/geo/GeoFeatures.svelte.d.ts +9 -0
  224. package/dist/plots/map/geo/GeoFeatures.svelte.js +55 -0
  225. package/dist/plots/map/geo/GeoGeometry.d.ts +27 -0
  226. package/dist/plots/map/geo/GeoGeometry.js +142 -0
  227. package/dist/plots/map/geo/GeoSegments.d.ts +16 -0
  228. package/dist/plots/map/geo/GeoSegments.js +23 -0
  229. package/dist/plots/{geo → map/geo}/Plot.svelte +10 -10
  230. package/dist/plots/{geo → map/geo}/Plot.svelte.d.ts +2 -2
  231. package/dist/plots/{geo → map/geo}/defaults.d.ts +2 -2
  232. package/dist/plots/{geo → map/geo}/defaults.js +1 -1
  233. package/dist/plots/{geo → map/geo}/phases/data.d.ts +1 -1
  234. package/dist/plots/{geo → map/geo}/phases/data.js +7 -6
  235. package/dist/plots/{geo → map/geo}/phases/hover.d.ts +1 -1
  236. package/dist/plots/{geo → map/geo}/phases/hover.js +5 -5
  237. package/dist/plots/{geo → map/geo}/phases/markers.d.ts +1 -1
  238. package/dist/plots/{geo → map/geo}/phases/markers.js +8 -13
  239. package/dist/plots/{geo → map/geo}/phases/scales.d.ts +2 -2
  240. package/dist/plots/{geo → map/geo}/phases/scales.js +28 -12
  241. package/dist/plots/{geo → map/geo}/phases/tooltip.d.ts +1 -1
  242. package/dist/plots/map/geo/phases/tooltip.js +5 -0
  243. package/dist/plots/{geo → map/geo}/slices.d.ts +2 -2
  244. package/dist/plots/{geo → map/geo}/slices.js +7 -4
  245. package/dist/plots/{bar → ranking/bar}/Plot.svelte +2 -2
  246. package/dist/plots/{bar → ranking/bar}/Plot.svelte.d.ts +2 -2
  247. package/dist/plots/ranking/bar/defaults.d.ts +16 -0
  248. package/dist/plots/{bar → ranking/bar}/defaults.js +17 -15
  249. package/dist/plots/{bar → ranking/bar}/markers.d.ts +8 -8
  250. package/dist/plots/{bar → ranking/bar}/markers.js +11 -19
  251. package/dist/plots/ranking/bullet/Plot.svelte +42 -0
  252. package/dist/plots/ranking/bullet/Plot.svelte.d.ts +26 -0
  253. package/dist/plots/ranking/bullet/defaults.d.ts +8 -0
  254. package/dist/plots/ranking/bullet/defaults.js +24 -0
  255. package/dist/plots/ranking/bullet/markers.d.ts +10 -0
  256. package/dist/plots/ranking/bullet/markers.js +90 -0
  257. package/dist/plots/ranking/cleveland/ClevelandConnector.d.ts +48 -0
  258. package/dist/plots/ranking/cleveland/ClevelandConnector.js +140 -0
  259. package/dist/plots/ranking/cleveland/ClevelandMarkers.d.ts +33 -0
  260. package/dist/plots/ranking/cleveland/ClevelandMarkers.js +375 -0
  261. package/dist/plots/ranking/cleveland/ClevelandRanges.d.ts +31 -0
  262. package/dist/plots/ranking/cleveland/ClevelandRanges.js +116 -0
  263. package/dist/plots/ranking/cleveland/Plot.svelte +45 -0
  264. package/dist/plots/ranking/cleveland/Plot.svelte.d.ts +26 -0
  265. package/dist/plots/ranking/cleveland/defaults.d.ts +13 -0
  266. package/dist/plots/ranking/cleveland/defaults.js +66 -0
  267. package/dist/plots/ranking/dumbbell/Plot.svelte +45 -0
  268. package/dist/plots/ranking/dumbbell/Plot.svelte.d.ts +26 -0
  269. package/dist/plots/ranking/dumbbell/defaults.d.ts +9 -0
  270. package/dist/plots/ranking/dumbbell/defaults.js +19 -0
  271. package/dist/plots/ranking/forest/Plot.svelte +42 -0
  272. package/dist/plots/ranking/forest/Plot.svelte.d.ts +26 -0
  273. package/dist/plots/ranking/forest/defaults.d.ts +11 -0
  274. package/dist/plots/ranking/forest/defaults.js +20 -0
  275. package/dist/plots/ranking/lollipop/Plot.svelte +45 -0
  276. package/dist/plots/ranking/lollipop/Plot.svelte.d.ts +26 -0
  277. package/dist/plots/ranking/lollipop/defaults.d.ts +9 -0
  278. package/dist/plots/ranking/lollipop/defaults.js +18 -0
  279. package/dist/plots/utils/RowNumbers.d.ts +16 -0
  280. package/dist/plots/utils/RowNumbers.js +24 -0
  281. package/dist/plots/utils/gaps.js +1 -1
  282. package/dist/plots/utils/segments.js +1 -1
  283. package/dist/types/configuration/styling.d.ts +287 -132
  284. package/dist/types/layout/composer.d.ts +5 -2
  285. package/dist/types/layout/coordinates.d.ts +5 -4
  286. package/dist/types/layout/legend.d.ts +21 -5
  287. package/dist/types/layout/plot.d.ts +44 -1
  288. package/dist/types/layout/scales.d.ts +51 -3
  289. package/dist/types/layout/statistics/deviation.d.ts +40 -0
  290. package/dist/types/layout/statistics/index.d.ts +7 -2
  291. package/dist/types/layout/styles/base.d.ts +18 -0
  292. package/dist/types/layout/styles/bullet.d.ts +25 -0
  293. package/dist/types/layout/styles/connector.d.ts +98 -0
  294. package/dist/types/layout/styles/curve.d.ts +11 -0
  295. package/dist/types/layout/styles/frame.d.ts +17 -0
  296. package/dist/types/layout/styles/gaps.d.ts +12 -0
  297. package/dist/types/layout/styles/geo.d.ts +55 -0
  298. package/dist/types/layout/styles/index.d.ts +8 -0
  299. package/dist/types/layout/styles/index.js +8 -0
  300. package/dist/types/layout/styles/values.d.ts +47 -0
  301. package/dist/types/layout/timeline.d.ts +19 -7
  302. package/dist/types/layout/tooltip.d.ts +6 -2
  303. package/dist/types/markers/axis/area.d.ts +2 -2
  304. package/dist/types/markers/axis/arrow.d.ts +3 -0
  305. package/dist/types/markers/axis/axisBasedMarkersConfig.d.ts +2 -1
  306. package/dist/types/markers/axis/bar.d.ts +1 -1
  307. package/dist/types/markers/axis/box.d.ts +5 -0
  308. package/dist/types/markers/axis/difference.d.ts +2 -2
  309. package/dist/types/markers/axis/image.d.ts +3 -2
  310. package/dist/types/markers/axis/line.d.ts +2 -0
  311. package/dist/types/markers/axis/rule.d.ts +9 -0
  312. package/dist/types/markers/axis/trail.d.ts +2 -3
  313. package/dist/types/markers/axis/violin.d.ts +25 -0
  314. package/dist/types/markers/basic/dot.d.ts +3 -2
  315. package/dist/types/markers/basic/text.d.ts +13 -3
  316. package/dist/types/markers/channels/commonMarkerConfig.d.ts +7 -3
  317. package/dist/types/markers/channels/commonMarkerConfigWithRowOffset.d.ts +13 -0
  318. package/dist/types/markers/common.d.ts +1 -1
  319. package/dist/types/markers/common.js +1 -0
  320. package/dist/types/markers/geo/link.d.ts +5 -1
  321. package/dist/types/phases/hover/phase.d.ts +6 -0
  322. package/dist/types/phases/index.d.ts +1 -1
  323. package/dist/types/phases/scales/phase.d.ts +5 -1
  324. package/dist/types/phases/state.d.ts +20 -4
  325. package/dist/types/phases/statistics/phase.d.ts +3 -1
  326. package/dist/types/phases/statistics/source.d.ts +3 -1
  327. package/dist/types/phases/transforms/phase.d.ts +32 -0
  328. package/dist/types/plots/{heatmap → correlation/heatmap}/props.d.ts +6 -6
  329. package/dist/types/plots/{heatmap → correlation/heatmap}/state.d.ts +4 -4
  330. package/dist/types/plots/{scatter → correlation/scatter}/props.d.ts +6 -6
  331. package/dist/types/plots/{scatter → correlation/scatter}/state.d.ts +2 -2
  332. package/dist/types/plots/distribution/box/props.d.ts +10 -0
  333. package/dist/types/plots/distribution/box/state.d.ts +23 -0
  334. package/dist/types/plots/distribution/density/props.d.ts +23 -0
  335. package/dist/types/plots/distribution/density/state.d.ts +6 -0
  336. package/dist/types/plots/distribution/density/state.js +1 -0
  337. package/dist/types/plots/{histogram → distribution/histogram}/props.d.ts +7 -7
  338. package/dist/types/plots/distribution/histogram/props.js +1 -0
  339. package/dist/types/plots/{histogram → distribution/histogram}/state.d.ts +2 -2
  340. package/dist/types/plots/distribution/histogram/state.js +1 -0
  341. package/dist/types/plots/{pyramid → distribution/pyramid}/props.d.ts +6 -6
  342. package/dist/types/plots/distribution/pyramid/props.js +1 -0
  343. package/dist/types/plots/{pyramid → distribution/pyramid}/state.d.ts +3 -3
  344. package/dist/types/plots/distribution/pyramid/state.js +1 -0
  345. package/dist/types/plots/distribution/violin/props.d.ts +23 -0
  346. package/dist/types/plots/distribution/violin/props.js +1 -0
  347. package/dist/types/plots/distribution/violin/state.d.ts +6 -0
  348. package/dist/types/plots/distribution/violin/state.js +1 -0
  349. package/dist/types/plots/{area → evolution/area}/props.d.ts +6 -6
  350. package/dist/types/plots/evolution/area/props.js +1 -0
  351. package/dist/types/plots/{area → evolution/area}/state.d.ts +2 -2
  352. package/dist/types/plots/evolution/area/state.js +1 -0
  353. package/dist/types/plots/evolution/line/props.d.ts +10 -0
  354. package/dist/types/plots/evolution/line/props.js +1 -0
  355. package/dist/types/plots/{line → evolution/line}/state.d.ts +3 -3
  356. package/dist/types/plots/evolution/line/state.js +1 -0
  357. package/dist/types/plots/evolution/slope/props.d.ts +5 -0
  358. package/dist/types/plots/evolution/slope/props.js +1 -0
  359. package/dist/types/plots/evolution/slope/state.d.ts +5 -0
  360. package/dist/types/plots/evolution/slope/state.js +1 -0
  361. package/dist/types/plots/evolution/sparkline/props.d.ts +5 -0
  362. package/dist/types/plots/evolution/sparkline/props.js +1 -0
  363. package/dist/types/plots/evolution/sparkline/state.d.ts +5 -0
  364. package/dist/types/plots/evolution/sparkline/state.js +1 -0
  365. package/dist/types/plots/{geo → map/geo}/props.d.ts +8 -8
  366. package/dist/types/plots/map/geo/props.js +1 -0
  367. package/dist/types/plots/{geo → map/geo}/state.d.ts +18 -11
  368. package/dist/types/plots/map/geo/state.js +1 -0
  369. package/dist/types/plots/props.d.ts +3 -1
  370. package/dist/types/plots/{bar → ranking/bar}/props.d.ts +6 -6
  371. package/dist/types/plots/ranking/bar/props.js +1 -0
  372. package/dist/types/plots/{bar → ranking/bar}/state.d.ts +2 -2
  373. package/dist/types/plots/ranking/bar/state.js +1 -0
  374. package/dist/types/plots/ranking/bullet/props.d.ts +22 -0
  375. package/dist/types/plots/ranking/bullet/props.js +1 -0
  376. package/dist/types/plots/ranking/bullet/state.d.ts +5 -0
  377. package/dist/types/plots/ranking/bullet/state.js +1 -0
  378. package/dist/types/plots/ranking/cleveland/props.d.ts +10 -0
  379. package/dist/types/plots/ranking/cleveland/props.js +1 -0
  380. package/dist/types/plots/ranking/cleveland/state.d.ts +49 -0
  381. package/dist/types/plots/ranking/cleveland/state.js +1 -0
  382. package/dist/types/plots/ranking/dumbbell/props.d.ts +10 -0
  383. package/dist/types/plots/ranking/dumbbell/props.js +1 -0
  384. package/dist/types/plots/ranking/dumbbell/state.d.ts +5 -0
  385. package/dist/types/plots/ranking/dumbbell/state.js +1 -0
  386. package/dist/types/plots/ranking/forest/props.d.ts +23 -0
  387. package/dist/types/plots/ranking/forest/props.js +1 -0
  388. package/dist/types/plots/ranking/forest/state.d.ts +5 -0
  389. package/dist/types/plots/ranking/forest/state.js +1 -0
  390. package/dist/types/plots/ranking/lollipop/props.d.ts +10 -0
  391. package/dist/types/plots/ranking/lollipop/props.js +1 -0
  392. package/dist/types/plots/ranking/lollipop/state.d.ts +5 -0
  393. package/dist/types/plots/ranking/lollipop/state.js +1 -0
  394. package/dist/types/plots/segments/common.d.ts +4 -1
  395. package/dist/utils/OpacityScale.d.ts +14 -0
  396. package/dist/utils/OpacityScale.js +43 -0
  397. package/dist/utils/{symbol.d.ts → SymbolPath.d.ts} +0 -12
  398. package/dist/utils/{symbol.js → SymbolPath.js} +0 -24
  399. package/dist/utils/SymbolScale.d.ts +18 -0
  400. package/dist/utils/SymbolScale.js +29 -0
  401. package/dist/utils/color/ColorRamp.d.ts +27 -0
  402. package/dist/utils/color/ColorRamp.js +120 -0
  403. package/dist/utils/color/CssColor.d.ts +19 -0
  404. package/dist/utils/color/CssColor.js +114 -0
  405. package/dist/utils/color/Palette.d.ts +21 -0
  406. package/dist/utils/color/Palette.js +52 -0
  407. package/dist/utils/color/index.d.ts +11 -3
  408. package/dist/utils/color/index.js +14 -3
  409. package/dist/utils/grouping.js +1 -1
  410. package/docs/architecture.md +1 -1
  411. package/docs/chrome.md +39 -8
  412. package/docs/composer.md +19 -3
  413. package/docs/concepts.md +1 -1
  414. package/docs/development.md +14 -5
  415. package/docs/facets.md +62 -8
  416. package/docs/getting-started.md +8 -9
  417. package/docs/legend.md +73 -24
  418. package/docs/markers.md +45 -32
  419. package/docs/plots/correlation/heatmap.md +26 -0
  420. package/docs/plots/correlation/scatter.md +35 -0
  421. package/docs/plots/distribution/box.md +28 -0
  422. package/docs/plots/distribution/density.md +26 -0
  423. package/docs/plots/distribution/histogram.md +33 -0
  424. package/docs/plots/distribution/pyramid.md +31 -0
  425. package/docs/plots/distribution/violin.md +35 -0
  426. package/docs/plots/evolution/area.md +32 -0
  427. package/docs/plots/evolution/line.md +93 -0
  428. package/docs/plots/evolution/slope.md +39 -0
  429. package/docs/plots/evolution/sparkline.md +34 -0
  430. package/docs/plots/ranking/bar.md +59 -0
  431. package/docs/plots/ranking/bullet.md +37 -0
  432. package/docs/plots/ranking/cleveland.md +54 -0
  433. package/docs/plots/ranking/dumbbell.md +39 -0
  434. package/docs/plots/ranking/forest.md +40 -0
  435. package/docs/plots/ranking/lollipop.md +39 -0
  436. package/docs/plots.md +22 -154
  437. package/docs/scales.md +50 -27
  438. package/docs/state.md +1 -1
  439. package/docs/styles-and-segments.md +96 -39
  440. package/docs/theming.md +33 -19
  441. package/docs/timeline.md +62 -28
  442. package/docs/tooltip-and-hover.md +72 -24
  443. package/docs/transforms-and-statistics.md +56 -25
  444. package/examples/BarValues.svelte +2 -2
  445. package/examples/Box.svelte +7 -0
  446. package/examples/Bullet.svelte +17 -0
  447. package/examples/Chrome.svelte +17 -0
  448. package/examples/ChromeOrder.svelte +18 -0
  449. package/examples/Cleveland.svelte +15 -0
  450. package/examples/Composer.svelte +23 -0
  451. package/examples/CustomTooltip.svelte +21 -14
  452. package/examples/Density.svelte +7 -0
  453. package/examples/Dumbbell.svelte +16 -0
  454. package/examples/Facets.svelte +3 -3
  455. package/examples/FacetsCarousel.svelte +14 -0
  456. package/examples/FacetsRowsCols.svelte +23 -0
  457. package/examples/FirstPlot.svelte +7 -0
  458. package/examples/Forest.svelte +17 -0
  459. package/examples/Gaps.svelte +21 -0
  460. package/examples/GroupedBars.svelte +15 -0
  461. package/examples/Heatmap.svelte +7 -0
  462. package/examples/HeatmapSegments.svelte +26 -0
  463. package/examples/Histogram.svelte +14 -0
  464. package/examples/HorizontalBars.svelte +15 -0
  465. package/examples/LegendSections.svelte +27 -0
  466. package/examples/LegendToggle.svelte +3 -3
  467. package/examples/LineByRegion.svelte +18 -0
  468. package/examples/LineDates.svelte +15 -0
  469. package/examples/LineStep.svelte +16 -0
  470. package/examples/LineStepSegment.svelte +18 -0
  471. package/examples/Lollipop.svelte +17 -0
  472. package/examples/Markers.svelte +27 -0
  473. package/examples/MovingAverage.svelte +15 -0
  474. package/examples/Pyramid.svelte +14 -0
  475. package/examples/Regression.svelte +14 -0
  476. package/examples/ResponsiveLine.svelte +7 -7
  477. package/examples/Scales.svelte +26 -0
  478. package/examples/Scatter.svelte +16 -0
  479. package/examples/SegmentHighlight.svelte +22 -0
  480. package/examples/Segments.svelte +11 -3
  481. package/examples/SegmentsBySeries.svelte +25 -0
  482. package/examples/Slope.svelte +17 -0
  483. package/examples/Sparkline.svelte +14 -0
  484. package/examples/StackedArea.svelte +16 -0
  485. package/examples/StackedBars.svelte +15 -0
  486. package/examples/TimelinePlayer.svelte +8 -7
  487. package/examples/TimelineRule.svelte +19 -0
  488. package/examples/Tooltip.svelte +3 -3
  489. package/examples/ValueLabels.svelte +21 -0
  490. package/examples/Violin.svelte +14 -0
  491. package/examples/datasets/argentina-chile-trends.ts +34 -0
  492. package/examples/datasets/commodity-prices.ts +48 -0
  493. package/examples/datasets/countries-over-time.ts +368 -0
  494. package/examples/datasets/daily-temperature.ts +121 -0
  495. package/examples/datasets/earthquakes.ts +977 -0
  496. package/examples/datasets/flight-routes.ts +29 -0
  497. package/examples/datasets/height-density.ts +37 -0
  498. package/examples/datasets/heights.ts +370 -0
  499. package/examples/datasets/index.ts +24 -0
  500. package/examples/datasets/inflation-by-region.ts +44 -0
  501. package/examples/datasets/inflation-ranges.ts +34 -0
  502. package/examples/datasets/iris-flower.ts +207 -0
  503. package/examples/datasets/life-expectancy.ts +95 -0
  504. package/examples/datasets/napoleons-march.ts +182 -0
  505. package/examples/datasets/penguins.ts +54 -0
  506. package/examples/datasets/population-by-age-with-gaps.ts +23 -0
  507. package/examples/datasets/population-by-age.ts +890 -0
  508. package/examples/datasets/province-population.ts +521 -0
  509. package/examples/datasets/stock-prices.ts +63 -0
  510. package/examples/datasets/weather-stations-over-time.ts +31 -0
  511. package/examples/datasets/weather-stations.ts +22 -0
  512. package/examples/datasets/wind-vectors.ts +30 -0
  513. package/examples/datasets/world-temperature.ts +400 -0
  514. package/llms-full.txt +51 -12
  515. package/llms.txt +60 -4
  516. package/package.json +12 -2
  517. package/dist/layout/scales/buildScale.d.ts +0 -8
  518. package/dist/layout/scales/buildScale.js +0 -67
  519. package/dist/layout/scales/niceDomain.d.ts +0 -23
  520. package/dist/layout/scales/niceDomain.js +0 -59
  521. package/dist/plots/bar/defaults.d.ts +0 -9
  522. package/dist/plots/geo/features.svelte.d.ts +0 -5
  523. package/dist/plots/geo/features.svelte.js +0 -44
  524. package/dist/plots/geo/phases/tooltip.js +0 -5
  525. package/dist/plots/utils/geoAccessors.d.ts +0 -72
  526. package/dist/plots/utils/geoAccessors.js +0 -220
  527. package/dist/plots/utils/geoSegments.d.ts +0 -29
  528. package/dist/plots/utils/geoSegments.js +0 -37
  529. package/dist/types/layout/styles.d.ts +0 -122
  530. package/dist/types/markers/axis/curveName.d.ts +0 -2
  531. package/dist/types/plots/line/props.d.ts +0 -10
  532. package/dist/utils/color/contrast.d.ts +0 -9
  533. package/dist/utils/color/contrast.js +0 -40
  534. package/dist/utils/color/cssColor.d.ts +0 -4
  535. package/dist/utils/color/cssColor.js +0 -77
  536. package/dist/utils/color/ramp.d.ts +0 -17
  537. package/dist/utils/color/ramp.js +0 -110
  538. package/dist/utils/opacity.d.ts +0 -9
  539. package/dist/utils/opacity.js +0 -38
  540. package/examples/data.ts +0 -12
  541. /package/dist/types/layout/{styles.js → statistics/deviation.js} +0 -0
  542. /package/dist/types/{markers/axis/curveName.js → layout/styles/base.js} +0 -0
  543. /package/dist/types/{plots/area/props.js → layout/styles/bullet.js} +0 -0
  544. /package/dist/types/{plots/area/state.js → layout/styles/connector.js} +0 -0
  545. /package/dist/types/{plots/bar/props.js → layout/styles/curve.js} +0 -0
  546. /package/dist/types/{plots/bar/state.js → layout/styles/frame.js} +0 -0
  547. /package/dist/types/{plots/geo/props.js → layout/styles/gaps.js} +0 -0
  548. /package/dist/types/{plots/geo/state.js → layout/styles/geo.js} +0 -0
  549. /package/dist/types/{plots/heatmap/props.js → layout/styles/values.js} +0 -0
  550. /package/dist/types/{plots/heatmap/state.js → markers/axis/violin.js} +0 -0
  551. /package/dist/types/{plots/histogram/props.js → markers/channels/commonMarkerConfigWithRowOffset.js} +0 -0
  552. /package/dist/types/plots/{line → correlation/heatmap}/props.js +0 -0
  553. /package/dist/types/plots/{histogram → correlation/heatmap}/state.js +0 -0
  554. /package/dist/types/plots/{pyramid → correlation/scatter}/props.js +0 -0
  555. /package/dist/types/plots/{line → correlation/scatter}/state.js +0 -0
  556. /package/dist/types/plots/{scatter → distribution/box}/props.js +0 -0
  557. /package/dist/types/plots/{pyramid → distribution/box}/state.js +0 -0
  558. /package/dist/types/plots/{scatter/state.js → distribution/density/props.js} +0 -0
  559. /package/dist/{plots/utils → utils}/accessors.d.ts +0 -0
  560. /package/dist/{plots/utils → utils}/accessors.js +0 -0
@@ -10,35 +10,37 @@
10
10
 
11
11
  const plot = usePlot();
12
12
  const isHorizontal = $derived(plot.axes?.isHorizontal ?? false);
13
+ const TickMark = $derived(isHorizontal ? TickX : TickY);
13
14
 
14
15
  const cfg = $derived(getConfiguration());
15
16
  const data = $derived(marker.data ?? []);
16
17
  const channelStroke = $derived(MarkerChannels.buildFill(data, marker.color, marker.scales, cfg));
17
18
  const stroke = $derived(channelStroke ?? marker.styles?.stroke ?? 'currentColor');
19
+
20
+ /**
21
+ * A tick across a band axis spans the whole band, whatever `tickLength` says -
22
+ * svelteplot reads it only off a band-less axis. A fixed `tickLength` there is
23
+ * made true by insetting the tick from both edges of its band.
24
+ */
25
+ const inset = $derived.by(() => {
26
+ const length = marker.tickLength;
27
+ const across = plot.svelteplot.scales[isHorizontal ? 'y' : 'x'];
28
+ if (typeof length !== 'number' || across.type !== 'band') return undefined;
29
+ return Math.max(0, (across.fn.bandwidth() - length) / 2);
30
+ });
31
+ /** svelteplot's tick marks read `inset` though their types do not list it. */
32
+ const insetProps = $derived((inset === undefined ? {} : { inset }) as Record<string, unknown>);
18
33
  </script>
19
34
 
20
- {#if isHorizontal}
21
- <TickX
22
- {data}
23
- x={marker.x}
24
- y={marker.y}
25
- tickLength={marker.tickLength}
26
- {stroke}
27
- strokeWidth={marker.styles?.strokeWidth}
28
- strokeOpacity={marker.styles?.strokeOpacity}
29
- strokeDasharray={marker.styles?.strokeDasharray}
30
- strokeLinecap={marker.styles?.strokeLinecap}
31
- />
32
- {:else}
33
- <TickY
34
- {data}
35
- x={marker.x}
36
- y={marker.y}
37
- tickLength={marker.tickLength}
38
- {stroke}
39
- strokeWidth={marker.styles?.strokeWidth}
40
- strokeOpacity={marker.styles?.strokeOpacity}
41
- strokeDasharray={marker.styles?.strokeDasharray}
42
- strokeLinecap={marker.styles?.strokeLinecap}
43
- />
44
- {/if}
35
+ <TickMark
36
+ {data}
37
+ x={marker.x}
38
+ y={marker.y}
39
+ tickLength={marker.tickLength}
40
+ {...insetProps}
41
+ {stroke}
42
+ strokeWidth={marker.styles?.strokeWidth}
43
+ strokeOpacity={marker.styles?.strokeOpacity}
44
+ strokeDasharray={marker.styles?.strokeDasharray}
45
+ strokeLinecap={marker.styles?.strokeLinecap}
46
+ />
@@ -1,4 +1,5 @@
1
1
  import type { ChannelScalesConfig } from '../../types/layout/scales';
2
+ import type { ProcessedData } from '../../types/phases';
2
3
  import type { SymbolType } from '../../types/plots/constants';
3
4
  import type { PlotStylesConfig } from '../../types/configuration/styling';
4
5
  /** One resolved opacity bucket: every row in `data` renders at exactly `value`. */
@@ -11,6 +12,29 @@ export type OpacityBucket<TData> = {
11
12
  * over its rows, shared by every marker kind that intersects `CommonMarkerConfig`.
12
13
  */
13
14
  export declare class MarkerChannels {
15
+ /**
16
+ * The scales a marker with none of its own draws with: the plot's, except
17
+ * a numeric color `domain` - it spans the plot's own values, so the
18
+ * marker's own values would all land at one end of it. The scheme (and
19
+ * pivot) carry over; the domain is read from the marker's own rows.
20
+ */
21
+ static inheritScales(own: ChannelScalesConfig | undefined, plot: ChannelScalesConfig | undefined): ChannelScalesConfig | undefined;
22
+ /** `markers`, each `dot` with no scales of its own carrying the plot's ({@link inheritScales}). */
23
+ static inheritAll<TMarker extends {
24
+ type: string;
25
+ scales?: ChannelScalesConfig;
26
+ }>(markers: TMarker[], plot: ChannelScalesConfig | undefined): TMarker[];
27
+ /**
28
+ * `markers`, each `bollinger` that draws the plot's own rows (it sets no `data`)
29
+ * and no `x` or `y` of its own, reading the plot's: they are the same rows, so
30
+ * the same channels place them.
31
+ */
32
+ static inheritPosition<TMarker extends {
33
+ type: string;
34
+ data?: unknown;
35
+ x?: unknown;
36
+ y?: unknown;
37
+ }>(markers: TMarker[], processed: ProcessedData | undefined): TMarker[];
14
38
  /**
15
39
  * Resolves a `CommonMarkerConfig` pair into a per-row fill accessor, or
16
40
  * `undefined` when `color` is unset (caller falls back to its own flat
@@ -1,11 +1,45 @@
1
- import { resolveColorScale } from '../../utils/color';
2
- import { resolveOpacityScale } from '../../utils/opacity';
3
- import { resolveSymbolScale } from '../../utils/symbol';
1
+ import { resolveAccessor } from '../../utils/accessors';
2
+ import { ColorRamp } from '../../utils/color';
3
+ import { OpacityScale } from '../../utils/OpacityScale';
4
+ import { SymbolScale } from '../../utils/SymbolScale';
4
5
  /**
5
6
  * What a marker's own `color`, `symbol` and `opacity` channels resolve to,
6
7
  * over its rows, shared by every marker kind that intersects `CommonMarkerConfig`.
7
8
  */
8
9
  export class MarkerChannels {
10
+ /**
11
+ * The scales a marker with none of its own draws with: the plot's, except
12
+ * a numeric color `domain` - it spans the plot's own values, so the
13
+ * marker's own values would all land at one end of it. The scheme (and
14
+ * pivot) carry over; the domain is read from the marker's own rows.
15
+ */
16
+ static inheritScales(own, plot) {
17
+ if (own || !plot?.color)
18
+ return own ?? plot;
19
+ const { domain, ...color } = plot.color;
20
+ const numeric = Array.isArray(domain) && domain.every((v) => typeof v === 'number');
21
+ return { ...plot, color: numeric ? color : plot.color };
22
+ }
23
+ /** `markers`, each `dot` with no scales of its own carrying the plot's ({@link inheritScales}). */
24
+ static inheritAll(markers, plot) {
25
+ return markers.map((marker) => marker.type === 'dot' && !marker.scales
26
+ ? { ...marker, scales: MarkerChannels.inheritScales(undefined, plot) }
27
+ : marker);
28
+ }
29
+ /**
30
+ * `markers`, each `bollinger` that draws the plot's own rows (it sets no `data`)
31
+ * and no `x` or `y` of its own, reading the plot's: they are the same rows, so
32
+ * the same channels place them.
33
+ */
34
+ static inheritPosition(markers, processed) {
35
+ if (!processed)
36
+ return markers;
37
+ const read = (channel) => channel === undefined ? undefined : resolveAccessor(channel);
38
+ const plot = { x: read(processed.channels.x), y: read(processed.channels.y) };
39
+ return markers.map((marker) => marker.type === 'bollinger' && marker.data === undefined
40
+ ? { ...marker, x: marker.x ?? plot.x, y: marker.y ?? plot.y }
41
+ : marker);
42
+ }
9
43
  /**
10
44
  * Resolves a `CommonMarkerConfig` pair into a per-row fill accessor, or
11
45
  * `undefined` when `color` is unset (caller falls back to its own flat
@@ -29,8 +63,9 @@ export class MarkerChannels {
29
63
  const domain = allNumeric
30
64
  ? [Math.min(...rawVals.map(Number)), Math.max(...rawVals.map(Number))]
31
65
  : [...new Set(rawVals.map(String))];
32
- const defaultScheme = allNumeric ? [cfg.continuous.min, cfg.continuous.max] : cfg.palette;
33
- const colorScale = resolveColorScale(scales?.color, domain, defaultScheme);
66
+ const colorScale = allNumeric
67
+ ? ColorRamp.continuous(cfg, scales?.color, domain)
68
+ : ColorRamp.resolve(scales?.color, domain, cfg.palette);
34
69
  return (d) => colorScale(colorFn(d));
35
70
  }
36
71
  /**
@@ -51,7 +86,7 @@ export class MarkerChannels {
51
86
  ];
52
87
  if (!domain.length)
53
88
  return undefined;
54
- const scale = resolveSymbolScale(scales?.symbol, domain, cfg.symbols);
89
+ const scale = SymbolScale.resolve(scales?.symbol, domain, cfg.symbols);
55
90
  return (d) => scale(symbolFn(d));
56
91
  }
57
92
  /**
@@ -83,7 +118,7 @@ export class MarkerChannels {
83
118
  const domain = allNumeric
84
119
  ? [Math.min(...rawVals.map(Number)), Math.max(...rawVals.map(Number))]
85
120
  : [...new Set(rawVals.map(String))];
86
- const scale = resolveOpacityScale(scales?.opacity, domain, cfg.continuous.opacityRange);
121
+ const scale = OpacityScale.resolve(scales?.opacity, domain, cfg.continuous.opacityRange);
87
122
  const buckets = new Map();
88
123
  for (const d of data) {
89
124
  const resolved = scale(opacityFn(d));
@@ -0,0 +1,23 @@
1
+ import type { RowOffset as RowOffsetConfig } from '../../types/markers/channels/commonMarkerConfigWithRowOffset';
2
+ type Offsets = {
3
+ dx?: RowOffsetConfig;
4
+ dy?: RowOffsetConfig;
5
+ };
6
+ type Pixels = {
7
+ dx: number;
8
+ dy: number;
9
+ };
10
+ /**
11
+ * A marker's `dx`/`dy`: numbers move the whole marker (drawn once by
12
+ * `MarkerOffset`), functions move each row (drawn by the marker itself, with
13
+ * `RowOffsetMarks`), so no part is applied twice.
14
+ */
15
+ export declare class RowOffset {
16
+ /** The numeric part, for the whole marker; a part left unset takes `fallback`, a function counts as none. */
17
+ static whole(marker: Offsets, fallback?: Pixels): Pixels;
18
+ /** Whether any part of the offset is a function of the row. */
19
+ static isPerRow(marker: Offsets): boolean;
20
+ /** The functional part, for one row. */
21
+ static ofRow(marker: Offsets, row: unknown): Pixels;
22
+ }
23
+ export {};
@@ -0,0 +1,23 @@
1
+ /**
2
+ * A marker's `dx`/`dy`: numbers move the whole marker (drawn once by
3
+ * `MarkerOffset`), functions move each row (drawn by the marker itself, with
4
+ * `RowOffsetMarks`), so no part is applied twice.
5
+ */
6
+ export class RowOffset {
7
+ /** The numeric part, for the whole marker; a part left unset takes `fallback`, a function counts as none. */
8
+ static whole(marker, fallback = { dx: 0, dy: 0 }) {
9
+ const part = (own, otherwise) => typeof own === 'function' ? 0 : (own ?? otherwise);
10
+ return { dx: part(marker.dx, fallback.dx), dy: part(marker.dy, fallback.dy) };
11
+ }
12
+ /** Whether any part of the offset is a function of the row. */
13
+ static isPerRow(marker) {
14
+ return typeof marker.dx === 'function' || typeof marker.dy === 'function';
15
+ }
16
+ /** The functional part, for one row. */
17
+ static ofRow(marker, row) {
18
+ return {
19
+ dx: typeof marker.dx === 'function' ? (marker.dx(row) ?? 0) : 0,
20
+ dy: typeof marker.dy === 'function' ? (marker.dy(row) ?? 0) : 0
21
+ };
22
+ }
23
+ }
@@ -0,0 +1,30 @@
1
+ <script lang="ts" generics="TRow">
2
+ import type { Snippet } from 'svelte';
3
+ import { RowOffset } from './RowOffset';
4
+ import type { RowOffset as RowOffsetConfig } from '../../types/markers/channels/commonMarkerConfigWithRowOffset';
5
+
6
+ /**
7
+ * Draws a marker's rows through `mark`, each moved by the marker's per-row
8
+ * `dx`/`dy` (a function of the row). A fixed offset is not applied here -
9
+ * `MarkerOffset` moves the whole marker. With no function offset, the rows
10
+ * are drawn together as they are.
11
+ */
12
+ let {
13
+ marker,
14
+ rows,
15
+ mark
16
+ }: {
17
+ marker: { dx?: RowOffsetConfig; dy?: RowOffsetConfig };
18
+ rows: TRow[];
19
+ mark: Snippet<[TRow[]]>;
20
+ } = $props();
21
+ </script>
22
+
23
+ {#if RowOffset.isPerRow(marker)}
24
+ {#each rows as row, index (index)}
25
+ {@const { dx, dy } = RowOffset.ofRow(marker, row)}
26
+ <g transform="translate({dx},{dy})">{@render mark([row])}</g>
27
+ {/each}
28
+ {:else}
29
+ {@render mark(rows)}
30
+ {/if}
@@ -0,0 +1,33 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { RowOffset as RowOffsetConfig } from '../../types/markers/channels/commonMarkerConfigWithRowOffset';
3
+ declare function $$render<TRow>(): {
4
+ props: {
5
+ marker: {
6
+ dx?: RowOffsetConfig;
7
+ dy?: RowOffsetConfig;
8
+ };
9
+ rows: TRow[];
10
+ mark: Snippet<[TRow[]]>;
11
+ };
12
+ exports: {};
13
+ bindings: "";
14
+ slots: {};
15
+ events: {};
16
+ };
17
+ declare class __sveltets_Render<TRow> {
18
+ props(): ReturnType<typeof $$render<TRow>>['props'];
19
+ events(): ReturnType<typeof $$render<TRow>>['events'];
20
+ slots(): ReturnType<typeof $$render<TRow>>['slots'];
21
+ bindings(): "";
22
+ exports(): {};
23
+ }
24
+ interface $$IsomorphicComponent {
25
+ new <TRow>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TRow>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TRow>['props']>, ReturnType<__sveltets_Render<TRow>['events']>, ReturnType<__sveltets_Render<TRow>['slots']>> & {
26
+ $$bindings?: ReturnType<__sveltets_Render<TRow>['bindings']>;
27
+ } & ReturnType<__sveltets_Render<TRow>['exports']>;
28
+ <TRow>(internal: unknown, props: ReturnType<__sveltets_Render<TRow>['props']> & {}): ReturnType<__sveltets_Render<TRow>['exports']>;
29
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
30
+ }
31
+ declare const RowOffsetMarks: $$IsomorphicComponent;
32
+ type RowOffsetMarks<TRow> = InstanceType<typeof RowOffsetMarks<TRow>>;
33
+ export default RowOffsetMarks;
@@ -0,0 +1,31 @@
1
+ import type { StrokeStyle } from '../../types/plots/styling';
2
+ /** A stroke channel per row: a field key of the row, or a function of it. */
3
+ type RowChannel<T> = string | ((d: never) => T) | undefined;
4
+ /**
5
+ * The stroke of a line-like marker that takes it row by row (a `rule`, an
6
+ * `arrow`): each of `stroke`, `strokeWidth` and `strokeOpacity` is a field of
7
+ * the row or a function of it, else the marker's own `styles`, else a default.
8
+ * A color and an opacity per row are drawn as they are - svelteplot would map
9
+ * them through its own color and opacity scales.
10
+ */
11
+ export declare class RowStroke {
12
+ #private;
13
+ /** The props a mark takes for `channels`, over `styles` and the given `fallback`s. */
14
+ static of(channels: {
15
+ stroke?: RowChannel<string | undefined>;
16
+ strokeWidth?: RowChannel<number>;
17
+ strokeOpacity?: RowChannel<number>;
18
+ }, styles: StrokeStyle | undefined, fallback: {
19
+ stroke: string;
20
+ strokeWidth?: number;
21
+ strokeOpacity?: number;
22
+ }): {
23
+ stroke: string | {
24
+ value: (d: Record<string, unknown>) => string | undefined;
25
+ scale: null;
26
+ };
27
+ strokeWidth: number | ((d: Record<string, unknown>) => number) | undefined;
28
+ strokeOpacity: never;
29
+ };
30
+ }
31
+ export {};
@@ -0,0 +1,28 @@
1
+ /**
2
+ * The stroke of a line-like marker that takes it row by row (a `rule`, an
3
+ * `arrow`): each of `stroke`, `strokeWidth` and `strokeOpacity` is a field of
4
+ * the row or a function of it, else the marker's own `styles`, else a default.
5
+ * A color and an opacity per row are drawn as they are - svelteplot would map
6
+ * them through its own color and opacity scales.
7
+ */
8
+ export class RowStroke {
9
+ /** A per-row channel as the function svelteplot reads. */
10
+ static #accessor(channel) {
11
+ return typeof channel === 'string'
12
+ ? (d) => d[channel]
13
+ : channel;
14
+ }
15
+ /** The props a mark takes for `channels`, over `styles` and the given `fallback`s. */
16
+ static of(channels, styles, fallback) {
17
+ const color = RowStroke.#accessor(channels.stroke);
18
+ const width = RowStroke.#accessor(channels.strokeWidth);
19
+ const opacity = RowStroke.#accessor(channels.strokeOpacity);
20
+ return {
21
+ stroke: color ? { value: color, scale: null } : (styles?.stroke ?? fallback.stroke),
22
+ strokeWidth: width ?? styles?.strokeWidth ?? fallback.strokeWidth,
23
+ strokeOpacity: (opacity
24
+ ? { value: opacity, scale: null }
25
+ : (styles?.strokeOpacity ?? fallback.strokeOpacity))
26
+ };
27
+ }
28
+ }
@@ -0,0 +1,75 @@
1
+ <script lang="ts">
2
+ import { usePlot } from '../../layout/plot/usePlot';
3
+ import { getConfiguration } from '../../configuration/config.svelte';
4
+ import { resolveAccessor } from '../../utils/accessors';
5
+ import { ViolinProfiles } from './ViolinProfiles';
6
+ import type { ViolinMarkerConfig } from '../../types/markers/common';
7
+ import type { ProcessedRow } from '../../types/phases';
8
+
9
+ /**
10
+ * Renders one `'violin'` marker: for each category of its rows, the density
11
+ * curve mirrored around the middle of the category's band, or of the share of
12
+ * it the marker's `slot` takes. The curve is drawn on the plot's own scales;
13
+ * the plot's axes say which of `x`/`y` holds the category.
14
+ */
15
+ let { marker }: { marker: ViolinMarkerConfig } = $props();
16
+
17
+ const plot = usePlot();
18
+ const cfg = $derived(getConfiguration());
19
+ const isHorizontal = $derived(plot.axes?.isHorizontal ?? false);
20
+ const categoryScale = $derived(
21
+ isHorizontal ? plot.svelteplot.scales.y : plot.svelteplot.scales.x
22
+ );
23
+ const valueScale = $derived(isHorizontal ? plot.svelteplot.scales.x : plot.svelteplot.scales.y);
24
+
25
+ const data = $derived((marker.data ?? []) as ProcessedRow[]);
26
+ const profiles = $derived(
27
+ ViolinProfiles.of(
28
+ data,
29
+ {
30
+ category: resolveAccessor((isHorizontal ? marker.y : marker.x) as never),
31
+ value: resolveAccessor((isHorizontal ? marker.x : marker.y) as never)
32
+ },
33
+ { kernel: marker.kernel, bandwidth: marker.bandwidth, trim: marker.trim }
34
+ )
35
+ );
36
+
37
+ const slotIndex = $derived(marker.slot?.index ?? 0);
38
+ const slotCount = $derived(marker.slot?.count ?? 1);
39
+ const bandwidth = $derived(categoryScale?.type === 'band' ? categoryScale.fn.bandwidth() : 0);
40
+ const share = $derived(bandwidth / slotCount);
41
+
42
+ /** The pixel point at `along` the value axis and `across` the category axis. */
43
+ const point = (across: number, along: number): [number, number] =>
44
+ isHorizontal ? [along, across] : [across, along];
45
+ const at = (value: number) => Number(valueScale?.fn?.(value as never));
46
+
47
+ const shapes = $derived.by(() => {
48
+ if (categoryScale?.type !== 'band' || !valueScale?.fn) return [];
49
+ return profiles.flatMap((profile) => {
50
+ const start = Number(categoryScale.fn(profile.category as never));
51
+ if (!Number.isFinite(start)) return [];
52
+ const center = start + share * slotIndex + share / 2;
53
+ const full = marker.peak ?? Math.max(...profile.curve.map((p) => p.density));
54
+ const half = (density: number) => (full > 0 ? (density / full) * (share / 2) : 0);
55
+ const side = (sign: 1 | -1) =>
56
+ profile.curve.map((p) => point(center + sign * half(p.density), at(p.value)));
57
+ const outline = [...side(-1), ...side(1).reverse()];
58
+ return [outline.map(([x, y], i) => `${i ? 'L' : 'M'}${x},${y}`).join('') + 'Z'];
59
+ });
60
+ });
61
+ </script>
62
+
63
+ <g class="dct-violin">
64
+ {#each shapes as d, i (i)}
65
+ <path
66
+ {d}
67
+ fill={marker.styles?.fill}
68
+ fill-opacity={marker.styles?.fillOpacity ?? cfg.violin.fillOpacity}
69
+ stroke={marker.styles?.stroke}
70
+ stroke-width={marker.styles?.strokeWidth}
71
+ stroke-opacity={marker.styles?.strokeOpacity}
72
+ stroke-dasharray={marker.styles?.strokeDasharray}
73
+ />
74
+ {/each}
75
+ </g>
@@ -0,0 +1,7 @@
1
+ import type { ViolinMarkerConfig } from '../../types/markers/common';
2
+ type $$ComponentProps = {
3
+ marker: ViolinMarkerConfig;
4
+ };
5
+ declare const ViolinMarker: import("svelte").Component<$$ComponentProps, {}, "">;
6
+ type ViolinMarker = ReturnType<typeof ViolinMarker>;
7
+ export default ViolinMarker;
@@ -0,0 +1,29 @@
1
+ import type { ProcessedRow } from '../../types/phases';
2
+ import type { DensityKernel } from '../../types/transforms/density';
3
+ /** One violin: a category's density curve. */
4
+ export type ViolinProfile = {
5
+ category: unknown;
6
+ /** The density estimate, in order along the value axis. */
7
+ curve: {
8
+ value: number;
9
+ density: number;
10
+ }[];
11
+ };
12
+ /** How the density of each category is estimated. */
13
+ export type ViolinEstimate = {
14
+ kernel?: DensityKernel;
15
+ bandwidth?: number;
16
+ /** Keeps each curve within its values' own extent. Defaults to `true`. */
17
+ trim?: boolean;
18
+ };
19
+ /** The violins of a set of rows, one per category. */
20
+ export declare class ViolinProfiles {
21
+ #private;
22
+ /** One profile per category of `rows` with at least two values, in the order the rows first reach it. */
23
+ static of(rows: ProcessedRow[], read: {
24
+ category: (row: ProcessedRow) => unknown;
25
+ value: (row: ProcessedRow) => unknown;
26
+ }, estimate?: ViolinEstimate): ViolinProfile[];
27
+ /** The densest point of any of `profiles`, for violins that share one density scale. */
28
+ static peak(profiles: ViolinProfile[]): number;
29
+ }
@@ -0,0 +1,55 @@
1
+ import { Transforms } from '../../phases/transforms/Transforms';
2
+ import { resolveAccessor } from '../../utils/accessors';
3
+ import { isGapValue } from '../../plots/utils/gaps';
4
+ /** The violins of a set of rows, one per category. */
5
+ export class ViolinProfiles {
6
+ /** One profile per category of `rows` with at least two values, in the order the rows first reach it. */
7
+ static of(rows, read, estimate = {}) {
8
+ const groups = new Map();
9
+ for (const row of rows) {
10
+ const raw = read.value(row);
11
+ if (isGapValue(raw))
12
+ continue;
13
+ const value = Number(raw);
14
+ if (!Number.isFinite(value))
15
+ continue;
16
+ const category = read.category(row);
17
+ const key = String(category);
18
+ const group = groups.get(key);
19
+ if (group) {
20
+ group.rows.push(row);
21
+ group.values.push(value);
22
+ }
23
+ else
24
+ groups.set(key, { category, rows: [row], values: [value] });
25
+ }
26
+ return [...groups.values()].flatMap(({ category, rows: own, values }) => {
27
+ if (values.length < 2)
28
+ return [];
29
+ const extent = [Math.min(...values), Math.max(...values)];
30
+ const curve = ViolinProfiles.#curve(own, read.value, estimate, extent);
31
+ return curve.length < 2 ? [] : [{ category, curve }];
32
+ });
33
+ }
34
+ /** The densest point of any of `profiles`, for violins that share one density scale. */
35
+ static peak(profiles) {
36
+ return Math.max(0, ...profiles.flatMap((p) => p.curve.map((point) => point.density)));
37
+ }
38
+ static #curve(rows, value, estimate, extent) {
39
+ const trim = estimate.trim ?? true;
40
+ const result = Transforms.run({
41
+ type: 'densityY',
42
+ data: rows,
43
+ y: value,
44
+ kernel: estimate.kernel,
45
+ bandwidth: estimate.bandwidth,
46
+ trim
47
+ });
48
+ const along = resolveAccessor(result.y);
49
+ const density = resolveAccessor(result.x);
50
+ return result.data
51
+ .map((row) => ({ value: Number(along(row)), density: Number(density(row)) }))
52
+ .map((p) => (trim ? { ...p, value: Math.min(Math.max(p.value, extent[0]), extent[1]) } : p))
53
+ .filter((p) => Number.isFinite(p.value) && Number.isFinite(p.density));
54
+ }
55
+ }
@@ -10,6 +10,7 @@
10
10
 
11
11
  const plot = usePlot();
12
12
  const isHorizontal = $derived(plot.axes?.isHorizontal ?? false);
13
+ const WaffleMark = $derived(isHorizontal ? WaffleX : WaffleY);
13
14
 
14
15
  const cfg = $derived(getConfiguration());
15
16
  const data = $derived(marker.data ?? []);
@@ -17,40 +18,19 @@
17
18
  const fill = $derived(channelFill ?? marker.styles?.fill ?? cfg.palette[0]);
18
19
  </script>
19
20
 
20
- {#if isHorizontal}
21
- <WaffleX
22
- {data}
23
- x={marker.x}
24
- x1={marker.x1}
25
- x2={marker.x2}
26
- y={marker.y}
27
- unit={marker.unit}
28
- multiple={marker.multiple}
29
- gap={marker.gap}
30
- round={marker.round}
31
- borderRadius={marker.styles?.borderRadius}
32
- {fill}
33
- fillOpacity={marker.styles?.fillOpacity}
34
- stroke={marker.styles?.stroke}
35
- strokeWidth={marker.styles?.strokeWidth}
36
- strokeOpacity={marker.styles?.strokeOpacity}
37
- />
38
- {:else}
39
- <WaffleY
40
- {data}
41
- x={marker.x}
42
- y={marker.y}
43
- y1={marker.y1}
44
- y2={marker.y2}
45
- unit={marker.unit}
46
- multiple={marker.multiple}
47
- gap={marker.gap}
48
- round={marker.round}
49
- borderRadius={marker.styles?.borderRadius}
50
- {fill}
51
- fillOpacity={marker.styles?.fillOpacity}
52
- stroke={marker.styles?.stroke}
53
- strokeWidth={marker.styles?.strokeWidth}
54
- strokeOpacity={marker.styles?.strokeOpacity}
55
- />
56
- {/if}
21
+ <WaffleMark
22
+ {data}
23
+ x={marker.x}
24
+ y={marker.y}
25
+ {...isHorizontal ? { x1: marker.x1, x2: marker.x2 } : { y1: marker.y1, y2: marker.y2 }}
26
+ unit={marker.unit}
27
+ multiple={marker.multiple}
28
+ gap={marker.gap}
29
+ round={marker.round}
30
+ borderRadius={marker.styles?.borderRadius}
31
+ {fill}
32
+ fillOpacity={marker.styles?.fillOpacity}
33
+ stroke={marker.styles?.stroke}
34
+ strokeWidth={marker.styles?.strokeWidth}
35
+ strokeOpacity={marker.styles?.strokeOpacity}
36
+ />
@@ -15,6 +15,11 @@ export type AxisPipelineProps<TData extends Record<string, unknown>> = {
15
15
  opacity?: unknown;
16
16
  r?: unknown;
17
17
  symbol?: unknown;
18
+ lower?: Accessor<TData, unknown>;
19
+ upper?: Accessor<TData, unknown>;
20
+ error?: Accessor<TData, unknown>;
21
+ target?: unknown;
22
+ ranges?: unknown[];
18
23
  segments?: unknown;
19
24
  styles?: {
20
25
  gaps?: unknown;
@@ -9,6 +9,7 @@ import { StylesPhase } from './styles/StylesPhase';
9
9
  import { MarkersPhase } from './markers/MarkersPhase';
10
10
  import { TooltipPhase } from './tooltip/TooltipPhase';
11
11
  import { HoverPhase } from './hover/HoverPhase';
12
+ import { HoverSettings } from '../layout/hover/HoverSettings';
12
13
  import { PlotInteraction } from '../layout/interaction/PlotInteraction.svelte';
13
14
  import { DEFAULT_CONFIG } from '../configuration/config.svelte';
14
15
  /**
@@ -77,7 +78,7 @@ export class Pipeline {
77
78
  new FacetPhase(),
78
79
  new DataPhase(kind.data),
79
80
  new MappingPhase(kind.mapping),
80
- new TransformsPhase(kind.transforms),
81
+ new TransformsPhase(kind.transforms, kind.data?.segments?.connect),
81
82
  new StatisticsPhase(kind.statistics),
82
83
  new SharedScalesPhase(kind.sharedScales, scales),
83
84
  scales,
@@ -143,7 +144,7 @@ export class Pipeline {
143
144
  return fixed;
144
145
  const upToData = this.stages.filter((s) => s.phase === 'data');
145
146
  const state = Pipeline.#through(upToData, this.#seed(props), Pipeline.#ctxFor(cfg, null));
146
- return HoverPhase.strategyOf(state);
147
+ return HoverSettings.strategyOf(state.axes);
147
148
  }
148
149
  /** The plot's default `timeline.filterMode`. */
149
150
  get filterMode() {
@@ -209,6 +210,11 @@ export class Pipeline {
209
210
  opacity: props.opacity,
210
211
  r: props.r,
211
212
  symbol: props.symbol,
213
+ lower: props.lower,
214
+ upper: props.upper,
215
+ error: props.error,
216
+ target: props.target,
217
+ ranges: props.ranges,
212
218
  segments: props.segments ?? {},
213
219
  styles: props.styles,
214
220
  gaps: props.styles?.gaps,