@fundar/data-chart-telling 0.0.64 → 1.1.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 (839) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/LICENSE +21 -0
  3. package/README.md +112 -553
  4. package/dist/configuration/config.svelte.d.ts +5 -5
  5. package/dist/configuration/config.svelte.js +142 -46
  6. package/dist/configuration/fonts.d.ts +6 -0
  7. package/dist/configuration/fonts.js +6 -0
  8. package/dist/configuration/themes/compact.d.ts +2 -2
  9. package/dist/configuration/themes/compact.js +1 -1
  10. package/dist/configuration/themes/dark.d.ts +2 -2
  11. package/dist/configuration/themes/dark.js +5 -4
  12. package/dist/configuration/themes/default.d.ts +8 -3
  13. package/dist/configuration/themes/default.js +8 -2
  14. package/dist/configuration/themes/editorial.d.ts +2 -2
  15. package/dist/configuration/themes/editorial.js +2 -2
  16. package/dist/configuration/themes/index.d.ts +545 -80
  17. package/dist/configuration/themes/index.js +6 -5
  18. package/dist/index.d.ts +35 -48
  19. package/dist/index.js +20 -35
  20. package/dist/layout/base/BasePlotLayout.svelte +325 -0
  21. package/dist/layout/base/BasePlotLayout.svelte.d.ts +111 -0
  22. package/dist/layout/composer/PlotComposer.svelte +94 -0
  23. package/dist/layout/composer/PlotComposer.svelte.d.ts +13 -0
  24. package/dist/layout/coordinates/CameraFit.svelte +4 -4
  25. package/dist/layout/coordinates/CoordinatesLayout.svelte +11 -3
  26. package/dist/layout/coordinates/CoordinatesLayout.svelte.d.ts +6 -2
  27. package/dist/layout/coordinates/camera.svelte.d.ts +1 -1
  28. package/dist/layout/coordinates/camera.svelte.js +6 -6
  29. package/dist/layout/coordinates/projections/argentina.js +3 -3
  30. package/dist/layout/coordinates/projections/fit.js +1 -1
  31. package/dist/layout/coordinates/resolveCameraTarget.d.ts +1 -1
  32. package/dist/layout/coordinates/resolveProjection.d.ts +1 -1
  33. package/dist/layout/coordinates/resolveProjection.js +2 -2
  34. package/dist/layout/coordinates/rotate.svelte.d.ts +3 -3
  35. package/dist/layout/coordinates/rotate.svelte.js +8 -8
  36. package/dist/layout/coordinates/zoom.svelte.d.ts +1 -1
  37. package/dist/layout/facet/FacetIndicator.svelte +23 -23
  38. package/dist/layout/facet/FacetLayout.svelte +435 -398
  39. package/dist/layout/facet/FacetLayout.svelte.d.ts +9 -3
  40. package/dist/layout/facet/axes.d.ts +16 -0
  41. package/dist/layout/facet/axes.js +25 -0
  42. package/dist/layout/facet/config.d.ts +32 -0
  43. package/dist/layout/facet/config.js +82 -0
  44. package/dist/layout/figure/Figure.svelte +177 -0
  45. package/dist/layout/figure/Figure.svelte.d.ts +14 -0
  46. package/dist/layout/figure/FigureChrome.svelte +341 -0
  47. package/dist/layout/figure/FigureChrome.svelte.d.ts +21 -0
  48. package/dist/layout/geometry/FrameClip.svelte +45 -0
  49. package/dist/layout/geometry/FrameClip.svelte.d.ts +8 -0
  50. package/dist/layout/geometry/FrameClipping.d.ts +24 -0
  51. package/dist/layout/geometry/FrameClipping.js +40 -0
  52. package/dist/layout/geometry/GeometryLayout.svelte +287 -224
  53. package/dist/layout/geometry/GeometryLayout.svelte.d.ts +10 -10
  54. package/dist/layout/grid/Grid.svelte +194 -0
  55. package/dist/layout/grid/Grid.svelte.d.ts +26 -0
  56. package/dist/layout/grid/GridAlignment.svelte.d.ts +31 -0
  57. package/dist/layout/grid/GridAlignment.svelte.js +56 -0
  58. package/dist/layout/grid/GridCell.svelte +141 -0
  59. package/dist/layout/grid/GridCell.svelte.d.ts +17 -0
  60. package/dist/layout/grid/GridCellsRegistry.svelte.d.ts +52 -0
  61. package/dist/layout/grid/GridCellsRegistry.svelte.js +70 -0
  62. package/dist/layout/grid/GridPlan.d.ts +49 -0
  63. package/dist/layout/grid/GridPlan.js +167 -0
  64. package/dist/layout/grid/Tags.d.ts +8 -0
  65. package/dist/layout/grid/Tags.js +39 -0
  66. package/dist/layout/hover/HoverScope.svelte +11 -0
  67. package/dist/layout/hover/HoverScope.svelte.d.ts +8 -0
  68. package/dist/layout/hover/HoverSettings.d.ts +34 -0
  69. package/dist/layout/hover/HoverSettings.js +52 -0
  70. package/dist/layout/hover/HoverState.svelte.d.ts +47 -0
  71. package/dist/layout/hover/HoverState.svelte.js +99 -0
  72. package/dist/layout/hover/PlotHover.svelte.d.ts +63 -0
  73. package/dist/layout/hover/PlotHover.svelte.js +133 -0
  74. package/dist/layout/interaction/PlotInteraction.svelte.d.ts +38 -0
  75. package/dist/layout/interaction/PlotInteraction.svelte.js +56 -0
  76. package/dist/layout/legend/AxisNumberFormat.d.ts +12 -0
  77. package/dist/layout/legend/AxisNumberFormat.js +25 -0
  78. package/dist/layout/legend/ContinuousSection.svelte +363 -351
  79. package/dist/layout/legend/DisabledStyle.d.ts +19 -0
  80. package/dist/layout/legend/DisabledStyle.js +57 -0
  81. package/dist/layout/legend/DiscreteBadgeItem.svelte +6 -3
  82. package/dist/layout/legend/DiscreteSection.svelte +32 -32
  83. package/dist/layout/legend/DiscreteSwatchItem.svelte +4 -1
  84. package/dist/layout/legend/DiscreteSymbolIcon.svelte +14 -9
  85. package/dist/layout/legend/LegendChannels.d.ts +21 -0
  86. package/dist/layout/legend/LegendChannels.js +221 -0
  87. package/dist/layout/legend/LegendLayout.svelte +49 -43
  88. package/dist/layout/legend/LegendState.svelte.d.ts +84 -0
  89. package/dist/layout/legend/LegendState.svelte.js +333 -0
  90. package/dist/layout/legend/LegendText.d.ts +12 -0
  91. package/dist/layout/legend/LegendText.js +22 -0
  92. package/dist/layout/legend/SizeSection.svelte +84 -0
  93. package/dist/layout/legend/SizeSection.svelte.d.ts +7 -0
  94. package/dist/layout/legend/SymbolSection.svelte +31 -0
  95. package/dist/layout/legend/SymbolSection.svelte.d.ts +8 -0
  96. package/dist/layout/margins/Box.d.ts +84 -0
  97. package/dist/layout/margins/Box.js +138 -0
  98. package/dist/layout/margins/Margins.d.ts +37 -0
  99. package/dist/layout/margins/Margins.js +71 -0
  100. package/dist/layout/margins/PlotMargins.svelte.d.ts +101 -0
  101. package/dist/layout/margins/PlotMargins.svelte.js +219 -0
  102. package/dist/layout/plot/Core.svelte +61 -0
  103. package/dist/layout/plot/Core.svelte.d.ts +41 -0
  104. package/dist/layout/plot/PanelRun.svelte +28 -0
  105. package/dist/{charts/heatmap/Chart.svelte.d.ts → layout/plot/PanelRun.svelte.d.ts} +11 -7
  106. package/dist/layout/plot/Plot.svelte +287 -0
  107. package/dist/layout/plot/Plot.svelte.d.ts +49 -0
  108. package/dist/layout/plot/PlotContext.d.ts +41 -0
  109. package/dist/layout/plot/PlotContext.js +46 -0
  110. package/dist/layout/plot/PublicPlotContext.d.ts +131 -0
  111. package/dist/layout/plot/PublicPlotContext.js +240 -0
  112. package/dist/layout/plot/Slice.d.ts +44 -0
  113. package/dist/layout/plot/Slice.js +100 -0
  114. package/dist/layout/plot/usePlot.d.ts +9 -0
  115. package/dist/layout/plot/usePlot.js +13 -0
  116. package/dist/layout/scales/EdgeTicks.d.ts +39 -0
  117. package/dist/layout/scales/EdgeTicks.js +82 -0
  118. package/dist/layout/scales/NiceTicks.d.ts +40 -0
  119. package/dist/layout/scales/NiceTicks.js +72 -0
  120. package/dist/layout/scales/ScalesLayout.svelte +275 -206
  121. package/dist/layout/scales/ScalesLayout.svelte.d.ts +7 -1
  122. package/dist/layout/scales/SveltePlotScale.d.ts +15 -0
  123. package/dist/layout/scales/SveltePlotScale.js +79 -0
  124. package/dist/layout/styles/StylesLayout.svelte +65 -65
  125. package/dist/layout/styles/TileLayer.svelte +78 -76
  126. package/dist/layout/styles/TileLayer.svelte.d.ts +1 -1
  127. package/dist/layout/styles/ValueLabels.d.ts +97 -0
  128. package/dist/layout/styles/ValueLabels.js +238 -0
  129. package/dist/layout/timeline/Timeline.svelte +83 -74
  130. package/dist/layout/timeline/Timeline.svelte.d.ts +2 -0
  131. package/dist/layout/timeline/TimelineFrame.svelte +86 -0
  132. package/dist/layout/timeline/TimelineFrame.svelte.d.ts +16 -0
  133. package/dist/layout/timeline/TimelineLayout.svelte +140 -169
  134. package/dist/layout/timeline/TimelineLayout.svelte.d.ts +7 -3
  135. package/dist/layout/timeline/TimelinePlayer.svelte +195 -0
  136. package/dist/layout/timeline/TimelinePlayer.svelte.d.ts +7 -0
  137. package/dist/layout/timeline/TimelineRule.svelte +51 -0
  138. package/dist/layout/timeline/TimelineRule.svelte.d.ts +7 -0
  139. package/dist/layout/timeline/TimelineState.svelte.d.ts +90 -0
  140. package/dist/layout/timeline/TimelineState.svelte.js +260 -0
  141. package/dist/layout/timeline/TimelineSteps.d.ts +24 -0
  142. package/dist/layout/timeline/TimelineSteps.js +48 -0
  143. package/dist/layout/timeline/TimelineTime.d.ts +18 -0
  144. package/dist/layout/timeline/TimelineTime.js +117 -0
  145. package/dist/layout/tooltip/Tooltip.svelte +85 -85
  146. package/dist/layout/tooltip/Tooltip.svelte.d.ts +45 -24
  147. package/dist/layout/tooltip/TooltipState.svelte.d.ts +67 -0
  148. package/dist/layout/tooltip/TooltipState.svelte.js +126 -0
  149. package/dist/markers/MarkerKinds.d.ts +173 -0
  150. package/dist/markers/MarkerKinds.js +51 -0
  151. package/dist/markers/area/AreaMarker.svelte +110 -0
  152. package/dist/markers/area/AreaMarker.svelte.d.ts +7 -0
  153. package/dist/markers/arrow/ArrowMarker.svelte +28 -0
  154. package/dist/markers/arrow/ArrowMarker.svelte.d.ts +7 -0
  155. package/dist/markers/{BarMarker.svelte → bar/BarMarker.svelte} +54 -52
  156. package/dist/markers/{BarMarker.svelte.d.ts → bar/BarMarker.svelte.d.ts} +1 -1
  157. package/dist/markers/bollinger/BollingerMarker.svelte +44 -0
  158. package/dist/markers/bollinger/BollingerMarker.svelte.d.ts +7 -0
  159. package/dist/markers/box/BoxMarker.svelte +143 -0
  160. package/dist/markers/box/BoxMarker.svelte.d.ts +7 -0
  161. package/dist/markers/brush/BrushMarker.svelte +32 -0
  162. package/dist/markers/brush/BrushMarker.svelte.d.ts +7 -0
  163. package/dist/markers/cell/CellMarker.svelte +27 -0
  164. package/dist/markers/{CellMarker.svelte.d.ts → cell/CellMarker.svelte.d.ts} +1 -1
  165. package/dist/markers/contour/ContourClipMarker.svelte +83 -0
  166. package/dist/markers/{ContourClipMarker.svelte.d.ts → contour/ContourClipMarker.svelte.d.ts} +1 -1
  167. package/dist/markers/contour/ContourMarker.svelte +28 -0
  168. package/dist/markers/{ContourMarker.svelte.d.ts → contour/ContourMarker.svelte.d.ts} +1 -1
  169. package/dist/markers/delaunay/DelaunayLinkMarker.svelte +26 -0
  170. package/dist/markers/delaunay/DelaunayLinkMarker.svelte.d.ts +7 -0
  171. package/dist/markers/delaunay/DelaunayMeshMarker.svelte +26 -0
  172. package/dist/markers/delaunay/DelaunayMeshMarker.svelte.d.ts +7 -0
  173. package/dist/markers/delta/Delta.d.ts +21 -0
  174. package/dist/markers/delta/Delta.js +60 -0
  175. package/dist/markers/delta/DeltaMarker.svelte +96 -0
  176. package/dist/markers/{DeltaMarker.svelte.d.ts → delta/DeltaMarker.svelte.d.ts} +2 -2
  177. package/dist/markers/density/DensityMarker.svelte +63 -0
  178. package/dist/markers/density/DensityMarker.svelte.d.ts +7 -0
  179. package/dist/markers/difference/DifferenceMarker.svelte +30 -0
  180. package/dist/markers/difference/DifferenceMarker.svelte.d.ts +7 -0
  181. package/dist/markers/dot/DotMarker.svelte +102 -0
  182. package/dist/markers/{DotMarker.svelte.d.ts → dot/DotMarker.svelte.d.ts} +5 -17
  183. package/dist/markers/geo/GeoFeaturesMarker.svelte +39 -0
  184. package/dist/markers/{GeoFeaturesMarker.svelte.d.ts → geo/GeoFeaturesMarker.svelte.d.ts} +1 -1
  185. package/dist/markers/geo/GeoHoverMarker.svelte +28 -0
  186. package/dist/markers/{GeoHoverMarker.svelte.d.ts → geo/GeoHoverMarker.svelte.d.ts} +2 -2
  187. package/dist/markers/geo/GraticuleMarker.svelte +18 -0
  188. package/dist/markers/{GraticuleMarker.svelte.d.ts → geo/GraticuleMarker.svelte.d.ts} +1 -1
  189. package/dist/markers/geo/SphereMarker.svelte +15 -0
  190. package/dist/markers/{SphereMarker.svelte.d.ts → geo/SphereMarker.svelte.d.ts} +1 -1
  191. package/dist/markers/hover/HoverMarker.svelte +252 -0
  192. package/dist/markers/{HoverMarker.svelte.d.ts → hover/HoverMarker.svelte.d.ts} +10 -10
  193. package/dist/markers/hull/HullMarker.svelte +25 -0
  194. package/dist/markers/hull/HullMarker.svelte.d.ts +7 -0
  195. package/dist/markers/image/ImageMarker.svelte +22 -0
  196. package/dist/markers/image/ImageMarker.svelte.d.ts +7 -0
  197. package/dist/markers/inset/InsetMarker.svelte +184 -150
  198. package/dist/markers/inset/InsetMarker.svelte.d.ts +4 -4
  199. package/dist/markers/inset/insetLayout.d.ts +1 -1
  200. package/dist/markers/inset/insetLayout.js +6 -2
  201. package/dist/markers/inset/insetProjection.d.ts +1 -1
  202. package/dist/markers/inset/insetProjection.js +3 -3
  203. package/dist/markers/line/LineMarker.svelte +30 -0
  204. package/dist/markers/{LineMarker.svelte.d.ts → line/LineMarker.svelte.d.ts} +1 -1
  205. package/dist/markers/link/LinkMarker.svelte +47 -0
  206. package/dist/markers/{LinkMarker.svelte.d.ts → link/LinkMarker.svelte.d.ts} +1 -1
  207. package/dist/markers/raster/RasterMarker.svelte +31 -0
  208. package/dist/markers/raster/RasterMarker.svelte.d.ts +7 -0
  209. package/dist/markers/rect/RectMarker.svelte +62 -0
  210. package/dist/markers/rect/RectMarker.svelte.d.ts +7 -0
  211. package/dist/markers/regression/RegressionMarker.svelte +60 -0
  212. package/dist/markers/regression/RegressionMarker.svelte.d.ts +7 -0
  213. package/dist/markers/rule/RuleMarker.svelte +47 -0
  214. package/dist/markers/{RuleMarker.svelte.d.ts → rule/RuleMarker.svelte.d.ts} +2 -5
  215. package/dist/markers/text/Declutter.d.ts +35 -0
  216. package/dist/markers/text/Declutter.js +157 -0
  217. package/dist/markers/text/TextMarker.svelte +244 -0
  218. package/dist/markers/{TextMarker.svelte.d.ts → text/TextMarker.svelte.d.ts} +5 -9
  219. package/dist/markers/tick/TickMarker.svelte +44 -0
  220. package/dist/markers/tick/TickMarker.svelte.d.ts +7 -0
  221. package/dist/markers/trail/TrailMarker.svelte +27 -0
  222. package/dist/markers/trail/TrailMarker.svelte.d.ts +7 -0
  223. package/dist/markers/utils/BandNudge.d.ts +22 -0
  224. package/dist/markers/utils/BandNudge.js +23 -0
  225. package/dist/markers/utils/MarkerChannels.d.ts +49 -0
  226. package/dist/markers/utils/MarkerChannels.js +97 -0
  227. package/dist/markers/vector/VectorMarker.svelte +29 -0
  228. package/dist/markers/{VectorMarker.svelte.d.ts → vector/VectorMarker.svelte.d.ts} +1 -1
  229. package/dist/markers/voronoi/VoronoiMarker.svelte +26 -0
  230. package/dist/markers/voronoi/VoronoiMarker.svelte.d.ts +7 -0
  231. package/dist/markers/voronoi/VoronoiMeshMarker.svelte +26 -0
  232. package/dist/markers/voronoi/VoronoiMeshMarker.svelte.d.ts +7 -0
  233. package/dist/markers/waffle/WaffleMarker.svelte +56 -0
  234. package/dist/markers/waffle/WaffleMarker.svelte.d.ts +7 -0
  235. package/dist/phases/Pipeline.d.ts +108 -0
  236. package/dist/phases/Pipeline.js +227 -0
  237. package/dist/phases/data/DataPhase.d.ts +19 -0
  238. package/dist/phases/data/DataPhase.js +85 -0
  239. package/dist/phases/data/PlotAxes.d.ts +75 -0
  240. package/dist/phases/data/PlotAxes.js +151 -0
  241. package/dist/phases/facet/FacetPanels.d.ts +54 -0
  242. package/dist/phases/facet/FacetPanels.js +95 -0
  243. package/dist/phases/facet/FacetPhase.d.ts +11 -0
  244. package/dist/phases/facet/FacetPhase.js +28 -0
  245. package/dist/phases/hover/HoverPhase.d.ts +36 -0
  246. package/dist/phases/hover/HoverPhase.js +109 -0
  247. package/dist/phases/mapping/MappingPhase.d.ts +17 -0
  248. package/dist/phases/mapping/MappingPhase.js +40 -0
  249. package/dist/phases/markers/MarkersPhase.d.ts +14 -0
  250. package/dist/phases/markers/MarkersPhase.js +27 -0
  251. package/dist/phases/scales/MarkerAxisValues.d.ts +12 -0
  252. package/dist/phases/scales/MarkerAxisValues.js +34 -0
  253. package/dist/phases/scales/ScalesPhase.d.ts +29 -0
  254. package/dist/phases/scales/ScalesPhase.js +153 -0
  255. package/dist/phases/sharedScales/SharedScalesPhase.d.ts +58 -0
  256. package/dist/phases/sharedScales/SharedScalesPhase.js +171 -0
  257. package/dist/phases/statistics/AuthorMarkers.d.ts +43 -0
  258. package/dist/phases/statistics/AuthorMarkers.js +69 -0
  259. package/dist/phases/statistics/MarkerGrouping.d.ts +48 -0
  260. package/dist/phases/statistics/MarkerGrouping.js +113 -0
  261. package/dist/phases/statistics/Statistics.d.ts +53 -0
  262. package/dist/phases/statistics/Statistics.js +156 -0
  263. package/dist/phases/statistics/StatisticsPhase.d.ts +18 -0
  264. package/dist/phases/statistics/StatisticsPhase.js +67 -0
  265. package/dist/phases/statistics/methods/BollingerStatistic.d.ts +9 -0
  266. package/dist/phases/statistics/methods/BollingerStatistic.js +18 -0
  267. package/dist/phases/statistics/methods/BoxStatistic.d.ts +9 -0
  268. package/dist/phases/statistics/methods/BoxStatistic.js +18 -0
  269. package/dist/phases/statistics/methods/Density2dStatistic.d.ts +9 -0
  270. package/dist/phases/statistics/methods/Density2dStatistic.js +18 -0
  271. package/dist/phases/statistics/methods/DensityStatistic.d.ts +12 -0
  272. package/dist/phases/statistics/methods/DensityStatistic.js +29 -0
  273. package/dist/phases/statistics/methods/MovingAverageStatistic.d.ts +12 -0
  274. package/dist/phases/statistics/methods/MovingAverageStatistic.js +30 -0
  275. package/dist/phases/statistics/methods/RegressionStatistic.d.ts +9 -0
  276. package/dist/phases/statistics/methods/RegressionStatistic.js +21 -0
  277. package/dist/phases/styles/StylesPhase.d.ts +13 -0
  278. package/dist/phases/styles/StylesPhase.js +17 -0
  279. package/dist/phases/tooltip/TooltipPhase.d.ts +14 -0
  280. package/dist/phases/tooltip/TooltipPhase.js +17 -0
  281. package/dist/phases/transforms/ProcessedPositions.d.ts +30 -0
  282. package/dist/phases/transforms/ProcessedPositions.js +74 -0
  283. package/dist/phases/transforms/Transforms.d.ts +42 -0
  284. package/dist/phases/transforms/Transforms.js +130 -0
  285. package/dist/phases/transforms/TransformsPhase.d.ts +27 -0
  286. package/dist/phases/transforms/TransformsPhase.js +205 -0
  287. package/dist/phases/transforms/methods/AnchorBar.d.ts +13 -0
  288. package/dist/phases/transforms/methods/AnchorBar.js +21 -0
  289. package/dist/phases/transforms/methods/BinTransform.d.ts +7 -0
  290. package/dist/phases/transforms/methods/BinTransform.js +48 -0
  291. package/dist/phases/transforms/methods/DensityTransform.d.ts +6 -0
  292. package/dist/phases/transforms/methods/DensityTransform.js +13 -0
  293. package/dist/phases/transforms/methods/GroupTransform.d.ts +8 -0
  294. package/dist/phases/transforms/methods/GroupTransform.js +39 -0
  295. package/dist/phases/transforms/methods/NormalizeTransform.d.ts +10 -0
  296. package/dist/phases/transforms/methods/NormalizeTransform.js +30 -0
  297. package/dist/phases/transforms/methods/OrderTransform.d.ts +16 -0
  298. package/dist/phases/transforms/methods/OrderTransform.js +43 -0
  299. package/dist/phases/transforms/methods/PerGroup.d.ts +11 -0
  300. package/dist/phases/transforms/methods/PerGroup.js +39 -0
  301. package/dist/phases/transforms/methods/PositionTransform.d.ts +15 -0
  302. package/dist/phases/transforms/methods/PositionTransform.js +74 -0
  303. package/dist/phases/transforms/methods/StackTransform.d.ts +8 -0
  304. package/dist/phases/transforms/methods/StackTransform.js +29 -0
  305. package/dist/phases/transforms/methods/WindowTransform.d.ts +8 -0
  306. package/dist/phases/transforms/methods/WindowTransform.js +23 -0
  307. package/dist/plots/area/Plot.svelte +42 -0
  308. package/dist/plots/{heatmap/ValueLabels.svelte.d.ts → area/Plot.svelte.d.ts} +8 -16
  309. package/dist/plots/area/defaults.d.ts +4 -0
  310. package/dist/plots/area/defaults.js +21 -0
  311. package/dist/plots/area/markers.d.ts +14 -0
  312. package/dist/plots/area/markers.js +39 -0
  313. package/dist/plots/bar/Plot.svelte +33 -438
  314. package/dist/plots/bar/Plot.svelte.d.ts +5 -8
  315. package/dist/plots/bar/defaults.d.ts +9 -0
  316. package/dist/plots/bar/defaults.js +88 -0
  317. package/dist/plots/bar/markers.d.ts +45 -0
  318. package/dist/plots/bar/markers.js +233 -0
  319. package/dist/plots/box/BoxSummaries.d.ts +19 -0
  320. package/dist/plots/box/BoxSummaries.js +101 -0
  321. package/dist/plots/box/Plot.svelte +42 -0
  322. package/dist/plots/box/Plot.svelte.d.ts +26 -0
  323. package/dist/plots/box/defaults.d.ts +12 -0
  324. package/dist/plots/box/defaults.js +34 -0
  325. package/dist/plots/box/markers.d.ts +12 -0
  326. package/dist/plots/box/markers.js +34 -0
  327. package/dist/plots/geo/Core.svelte +151 -0
  328. package/dist/plots/geo/Core.svelte.d.ts +25 -0
  329. package/dist/plots/geo/Plot.svelte +103 -324
  330. package/dist/plots/geo/Plot.svelte.d.ts +5 -9
  331. package/dist/plots/geo/defaults.d.ts +4 -0
  332. package/dist/plots/geo/defaults.js +16 -0
  333. package/dist/plots/geo/features.svelte.d.ts +5 -0
  334. package/dist/plots/geo/features.svelte.js +44 -0
  335. package/dist/plots/geo/phases/data.d.ts +6 -0
  336. package/dist/plots/geo/phases/data.js +26 -0
  337. package/dist/plots/geo/phases/hover.d.ts +9 -0
  338. package/dist/plots/geo/phases/hover.js +45 -0
  339. package/dist/plots/geo/phases/markers.d.ts +9 -0
  340. package/dist/plots/geo/phases/markers.js +75 -0
  341. package/dist/plots/geo/phases/scales.d.ts +10 -0
  342. package/dist/plots/geo/phases/scales.js +85 -0
  343. package/dist/plots/geo/phases/tooltip.d.ts +3 -0
  344. package/dist/plots/geo/phases/tooltip.js +5 -0
  345. package/dist/plots/geo/slices.d.ts +18 -0
  346. package/dist/plots/geo/slices.js +59 -0
  347. package/dist/plots/heatmap/Plot.svelte +55 -249
  348. package/dist/plots/heatmap/Plot.svelte.d.ts +5 -8
  349. package/dist/plots/heatmap/defaults.d.ts +11 -0
  350. package/dist/plots/heatmap/defaults.js +91 -0
  351. package/dist/plots/heatmap/markers.d.ts +17 -0
  352. package/dist/plots/heatmap/markers.js +142 -0
  353. package/dist/plots/histogram/Plot.svelte +45 -0
  354. package/dist/plots/histogram/Plot.svelte.d.ts +26 -0
  355. package/dist/plots/histogram/defaults.d.ts +9 -0
  356. package/dist/plots/histogram/defaults.js +87 -0
  357. package/dist/plots/histogram/markers.d.ts +18 -0
  358. package/dist/plots/histogram/markers.js +89 -0
  359. package/dist/plots/line/Plot.svelte +37 -268
  360. package/dist/plots/line/Plot.svelte.d.ts +3 -7
  361. package/dist/plots/line/defaults.d.ts +4 -0
  362. package/dist/plots/line/defaults.js +29 -0
  363. package/dist/plots/line/markers.d.ts +49 -0
  364. package/dist/plots/line/markers.js +199 -0
  365. package/dist/plots/pyramid/Plot.svelte +34 -362
  366. package/dist/plots/pyramid/Plot.svelte.d.ts +5 -8
  367. package/dist/plots/pyramid/defaults.d.ts +13 -0
  368. package/dist/plots/pyramid/defaults.js +87 -0
  369. package/dist/plots/pyramid/markers.d.ts +21 -0
  370. package/dist/plots/pyramid/markers.js +156 -0
  371. package/dist/plots/scatter/Plot.svelte +34 -288
  372. package/dist/plots/scatter/Plot.svelte.d.ts +5 -8
  373. package/dist/plots/scatter/defaults.d.ts +4 -0
  374. package/dist/plots/scatter/defaults.js +80 -0
  375. package/dist/plots/scatter/markers.d.ts +19 -0
  376. package/dist/plots/scatter/markers.js +129 -0
  377. package/dist/plots/utils/ChannelName.d.ts +9 -0
  378. package/dist/plots/utils/ChannelName.js +14 -0
  379. package/dist/plots/utils/accessors.d.ts +1 -1
  380. package/dist/plots/utils/accessors.js +4 -2
  381. package/dist/plots/utils/gaps.d.ts +14 -19
  382. package/dist/plots/utils/gaps.js +38 -18
  383. package/dist/plots/utils/geoAccessors.d.ts +8 -8
  384. package/dist/plots/utils/geoAccessors.js +16 -12
  385. package/dist/plots/utils/geoSegments.d.ts +24 -9
  386. package/dist/plots/utils/geoSegments.js +31 -11
  387. package/dist/plots/utils/segments.d.ts +5 -16
  388. package/dist/plots/utils/segments.js +40 -52
  389. package/dist/plots/utils/tiles.d.ts +9 -9
  390. package/dist/plots/utils/tiles.js +35 -25
  391. package/dist/plots/utils/topojson.d.ts +1 -1
  392. package/dist/plots/utils/topojson.js +3 -3
  393. package/dist/stores/device.js +2 -4
  394. package/dist/types/configuration/styling.d.ts +174 -27
  395. package/dist/types/layout/box.d.ts +24 -0
  396. package/dist/types/layout/composer.d.ts +39 -0
  397. package/dist/types/layout/coordinates.d.ts +14 -14
  398. package/dist/types/layout/facet.d.ts +44 -22
  399. package/dist/types/layout/figure.d.ts +7 -0
  400. package/dist/types/layout/geometry.d.ts +6 -2
  401. package/dist/types/layout/grid.d.ts +66 -0
  402. package/dist/types/layout/hover.d.ts +48 -0
  403. package/dist/types/layout/legend.d.ts +256 -55
  404. package/dist/types/layout/mapping.d.ts +68 -0
  405. package/dist/types/layout/plot.d.ts +41 -0
  406. package/dist/types/layout/scales.d.ts +108 -24
  407. package/dist/types/layout/scales.js +19 -1
  408. package/dist/types/layout/statistics/bollinger.d.ts +18 -0
  409. package/dist/types/layout/statistics/box.d.ts +8 -0
  410. package/dist/types/layout/statistics/box.js +1 -0
  411. package/dist/types/layout/statistics/density.d.ts +27 -0
  412. package/dist/types/layout/statistics/density.js +1 -0
  413. package/dist/types/layout/statistics/index.d.ts +46 -0
  414. package/dist/types/layout/statistics/index.js +1 -0
  415. package/dist/types/layout/statistics/movingAverage.d.ts +12 -0
  416. package/dist/types/layout/statistics/movingAverage.js +1 -0
  417. package/dist/types/layout/statistics/regression.d.ts +20 -0
  418. package/dist/types/layout/statistics/regression.js +1 -0
  419. package/dist/types/layout/styles.d.ts +24 -35
  420. package/dist/types/layout/timeline.d.ts +62 -6
  421. package/dist/types/layout/tooltip.d.ts +7 -85
  422. package/dist/types/markers/all.d.ts +3 -4
  423. package/dist/types/markers/axis/area.d.ts +12 -0
  424. package/dist/types/markers/axis/area.js +1 -0
  425. package/dist/types/markers/axis/arrow.d.ts +15 -0
  426. package/dist/types/markers/axis/arrow.js +1 -0
  427. package/dist/types/markers/axis/axisBasedMarkersConfig.d.ts +29 -0
  428. package/dist/types/markers/axis/axisBasedMarkersConfig.js +1 -0
  429. package/dist/types/markers/axis/bar.d.ts +18 -0
  430. package/dist/types/markers/axis/bar.js +1 -0
  431. package/dist/types/markers/axis/bollinger.d.ts +6 -0
  432. package/dist/types/markers/axis/bollinger.js +1 -0
  433. package/dist/types/markers/axis/box.d.ts +14 -0
  434. package/dist/types/markers/axis/box.js +1 -0
  435. package/dist/types/markers/axis/brush.d.ts +28 -0
  436. package/dist/types/markers/axis/brush.js +1 -0
  437. package/dist/types/markers/axis/cell.d.ts +9 -0
  438. package/dist/types/markers/axis/cell.js +1 -0
  439. package/dist/types/markers/axis/component.d.ts +9 -0
  440. package/dist/types/markers/axis/component.js +1 -0
  441. package/dist/types/markers/axis/curveName.d.ts +2 -0
  442. package/dist/types/markers/axis/curveName.js +1 -0
  443. package/dist/types/markers/axis/delaunayLink.d.ts +7 -0
  444. package/dist/types/markers/axis/delaunayLink.js +1 -0
  445. package/dist/types/markers/axis/delaunayMesh.d.ts +7 -0
  446. package/dist/types/markers/axis/delaunayMesh.js +1 -0
  447. package/dist/types/markers/axis/delta.d.ts +27 -0
  448. package/dist/types/markers/axis/delta.js +1 -0
  449. package/dist/types/markers/axis/density.d.ts +12 -0
  450. package/dist/types/markers/axis/density.js +1 -0
  451. package/dist/types/markers/axis/difference.d.ts +12 -0
  452. package/dist/types/markers/axis/difference.js +1 -0
  453. package/dist/types/markers/axis/hover.d.ts +21 -0
  454. package/dist/types/markers/axis/hover.js +1 -0
  455. package/dist/types/markers/axis/hull.d.ts +7 -0
  456. package/dist/types/markers/axis/hull.js +1 -0
  457. package/dist/types/markers/axis/image.d.ts +12 -0
  458. package/dist/types/markers/axis/image.js +1 -0
  459. package/dist/types/markers/axis/line.d.ts +7 -0
  460. package/dist/types/markers/axis/line.js +1 -0
  461. package/dist/types/markers/axis/raster.d.ts +18 -0
  462. package/dist/types/markers/axis/raster.js +1 -0
  463. package/dist/types/markers/axis/rect.d.ts +15 -0
  464. package/dist/types/markers/axis/rect.js +1 -0
  465. package/dist/types/markers/axis/regression.d.ts +6 -0
  466. package/dist/types/markers/axis/regression.js +1 -0
  467. package/dist/types/markers/axis/rule.d.ts +15 -0
  468. package/dist/types/markers/axis/rule.js +1 -0
  469. package/dist/types/markers/axis/tick.d.ts +8 -0
  470. package/dist/types/markers/axis/tick.js +1 -0
  471. package/dist/types/markers/axis/trail.d.ts +14 -0
  472. package/dist/types/markers/axis/trail.js +1 -0
  473. package/dist/types/markers/axis/voronoi.d.ts +7 -0
  474. package/dist/types/markers/axis/voronoi.js +1 -0
  475. package/dist/types/markers/axis/voronoiMesh.d.ts +7 -0
  476. package/dist/types/markers/axis/voronoiMesh.js +1 -0
  477. package/dist/types/markers/axis/waffle.d.ts +13 -0
  478. package/dist/types/markers/axis/waffle.js +1 -0
  479. package/dist/types/markers/basic/basicMarkersConfig.d.ts +4 -0
  480. package/dist/types/markers/basic/basicMarkersConfig.js +1 -0
  481. package/dist/types/markers/basic/dot.d.ts +9 -0
  482. package/dist/types/markers/basic/dot.js +1 -0
  483. package/dist/types/markers/basic/text.d.ts +60 -0
  484. package/dist/types/markers/basic/text.js +1 -0
  485. package/dist/types/markers/basic.d.ts +4 -0
  486. package/dist/types/markers/basic.js +1 -0
  487. package/dist/types/markers/channels/commonMarkerConfig.d.ts +26 -0
  488. package/dist/types/markers/channels/commonMarkerConfig.js +1 -0
  489. package/dist/types/markers/channels/commonMarkerConfigWithArea.d.ts +6 -0
  490. package/dist/types/markers/channels/commonMarkerConfigWithArea.js +1 -0
  491. package/dist/types/markers/channels/commonMarkerConfigWithColor.d.ts +5 -0
  492. package/dist/types/markers/channels/commonMarkerConfigWithColor.js +1 -0
  493. package/dist/types/markers/channels/commonMarkerConfigWithInterval.d.ts +9 -0
  494. package/dist/types/markers/channels/commonMarkerConfigWithInterval.js +1 -0
  495. package/dist/types/markers/channels/commonMarkerConfigWithRadius.d.ts +5 -0
  496. package/dist/types/markers/channels/commonMarkerConfigWithRadius.js +1 -0
  497. package/dist/types/markers/channels/commonMarkerConfigWithSymbol.d.ts +5 -0
  498. package/dist/types/markers/channels/commonMarkerConfigWithSymbol.js +1 -0
  499. package/dist/types/markers/channels/commonMarkerConfigWithWeight.d.ts +5 -0
  500. package/dist/types/markers/channels/commonMarkerConfigWithWeight.js +1 -0
  501. package/dist/types/markers/common.d.ts +30 -103
  502. package/dist/types/markers/common.js +29 -1
  503. package/dist/types/markers/geo/contour.d.ts +27 -0
  504. package/dist/types/markers/geo/contour.js +1 -0
  505. package/dist/types/markers/geo/features.d.ts +12 -0
  506. package/dist/types/markers/geo/features.js +1 -0
  507. package/dist/types/markers/geo/geoComponent.d.ts +7 -0
  508. package/dist/types/markers/geo/geoComponent.js +1 -0
  509. package/dist/types/markers/geo/geoHover.d.ts +6 -0
  510. package/dist/types/markers/geo/geoHover.js +1 -0
  511. package/dist/types/markers/geo/geoMarkersConfig.d.ts +11 -0
  512. package/dist/types/markers/geo/geoMarkersConfig.js +1 -0
  513. package/dist/types/markers/geo/graticule.d.ts +11 -0
  514. package/dist/types/markers/geo/graticule.js +1 -0
  515. package/dist/types/markers/geo/inset.d.ts +50 -0
  516. package/dist/types/markers/geo/inset.js +1 -0
  517. package/dist/types/markers/geo/link.d.ts +13 -0
  518. package/dist/types/markers/geo/link.js +1 -0
  519. package/dist/types/markers/geo/sphere.d.ts +11 -0
  520. package/dist/types/markers/geo/sphere.js +1 -0
  521. package/dist/types/markers/geo/vector.d.ts +17 -0
  522. package/dist/types/markers/geo/vector.js +1 -0
  523. package/dist/types/markers/geo.d.ts +10 -212
  524. package/dist/types/markers/geo.js +10 -1
  525. package/dist/types/markers/traits.d.ts +22 -0
  526. package/dist/types/markers/traits.js +1 -0
  527. package/dist/types/misc/easing.js +1 -0
  528. package/dist/types/misc/viewport.js +1 -0
  529. package/dist/types/phases/data/axes.d.ts +18 -0
  530. package/dist/types/phases/data/axes.js +1 -0
  531. package/dist/types/phases/data/phase.d.ts +26 -0
  532. package/dist/types/phases/data/phase.js +2 -0
  533. package/dist/types/phases/facet/phase.d.ts +18 -0
  534. package/dist/types/phases/facet/phase.js +1 -0
  535. package/dist/types/phases/hover/phase.d.ts +40 -0
  536. package/dist/types/phases/hover/phase.js +1 -0
  537. package/dist/types/phases/index.d.ts +14 -0
  538. package/dist/types/phases/index.js +1 -0
  539. package/dist/types/phases/kind.d.ts +59 -0
  540. package/dist/types/phases/kind.js +1 -0
  541. package/dist/types/phases/mapping/phase.d.ts +5 -0
  542. package/dist/types/phases/mapping/phase.js +1 -0
  543. package/dist/types/phases/markers/phase.d.ts +13 -0
  544. package/dist/types/phases/markers/phase.js +1 -0
  545. package/dist/types/phases/pipeline.d.ts +10 -0
  546. package/dist/types/phases/pipeline.js +1 -0
  547. package/dist/types/phases/scales/phase.d.ts +26 -0
  548. package/dist/types/phases/scales/phase.js +1 -0
  549. package/dist/types/phases/sharedScales/phase.d.ts +12 -0
  550. package/dist/types/phases/sharedScales/phase.js +1 -0
  551. package/dist/types/phases/stage.d.ts +12 -0
  552. package/dist/types/phases/stage.js +1 -0
  553. package/dist/types/phases/state.d.ts +76 -0
  554. package/dist/types/phases/state.js +1 -0
  555. package/dist/types/phases/statistics/phase.d.ts +43 -0
  556. package/dist/types/phases/statistics/phase.js +1 -0
  557. package/dist/types/phases/statistics/source.d.ts +20 -0
  558. package/dist/types/phases/statistics/source.js +7 -0
  559. package/dist/types/phases/styles/phase.d.ts +24 -0
  560. package/dist/types/phases/styles/phase.js +1 -0
  561. package/dist/types/phases/transforms/adapter.d.ts +27 -0
  562. package/dist/types/phases/transforms/adapter.js +1 -0
  563. package/dist/types/phases/transforms/phase.d.ts +50 -0
  564. package/dist/types/phases/transforms/phase.js +1 -0
  565. package/dist/types/plots/area/props.d.ts +10 -0
  566. package/dist/types/plots/area/props.js +1 -0
  567. package/dist/types/plots/area/state.d.ts +6 -0
  568. package/dist/types/plots/area/state.js +1 -0
  569. package/dist/types/plots/bar/props.d.ts +10 -0
  570. package/dist/types/plots/bar/props.js +1 -0
  571. package/dist/types/plots/bar/state.d.ts +6 -0
  572. package/dist/types/plots/bar/state.js +1 -0
  573. package/dist/types/plots/box/props.d.ts +10 -0
  574. package/dist/types/plots/box/props.js +1 -0
  575. package/dist/types/plots/box/state.d.ts +23 -0
  576. package/dist/types/plots/box/state.js +1 -0
  577. package/dist/types/plots/camera.d.ts +7 -17
  578. package/dist/types/plots/constants.d.ts +16 -8
  579. package/dist/types/plots/data/common.d.ts +25 -17
  580. package/dist/types/plots/data/geo.d.ts +26 -12
  581. package/dist/types/plots/gaps.d.ts +19 -38
  582. package/dist/types/plots/geo/props.d.ts +23 -0
  583. package/dist/types/plots/geo/props.js +1 -0
  584. package/dist/types/plots/geo/state.d.ts +82 -0
  585. package/dist/types/plots/geo/state.js +1 -0
  586. package/dist/types/plots/heatmap/props.d.ts +10 -0
  587. package/dist/types/plots/heatmap/props.js +1 -0
  588. package/dist/types/plots/heatmap/state.d.ts +28 -0
  589. package/dist/types/plots/heatmap/state.js +1 -0
  590. package/dist/types/plots/histogram/props.d.ts +18 -0
  591. package/dist/types/plots/histogram/props.js +1 -0
  592. package/dist/types/plots/histogram/state.d.ts +6 -0
  593. package/dist/types/plots/histogram/state.js +1 -0
  594. package/dist/types/plots/line/props.d.ts +10 -0
  595. package/dist/types/plots/line/props.js +1 -0
  596. package/dist/types/plots/line/state.d.ts +9 -0
  597. package/dist/types/plots/line/state.js +1 -0
  598. package/dist/types/plots/props.d.ts +145 -35
  599. package/dist/types/plots/pyramid/props.d.ts +10 -0
  600. package/dist/types/plots/pyramid/props.js +1 -0
  601. package/dist/types/plots/pyramid/state.d.ts +16 -0
  602. package/dist/types/plots/pyramid/state.js +1 -0
  603. package/dist/types/plots/scatter/props.d.ts +10 -0
  604. package/dist/types/plots/scatter/props.js +1 -0
  605. package/dist/types/plots/scatter/state.d.ts +6 -0
  606. package/dist/types/plots/scatter/state.js +1 -0
  607. package/dist/types/plots/segments/common.d.ts +1 -1
  608. package/dist/types/plots/segments/config.d.ts +12 -6
  609. package/dist/types/plots/styling.d.ts +5 -5
  610. package/dist/types/transforms/bin.d.ts +84 -0
  611. package/dist/types/transforms/bin.js +28 -0
  612. package/dist/types/transforms/bollinger.d.ts +21 -0
  613. package/dist/types/transforms/bollinger.js +1 -0
  614. package/dist/types/transforms/common.d.ts +29 -0
  615. package/dist/types/transforms/common.js +16 -0
  616. package/dist/types/transforms/density.d.ts +45 -0
  617. package/dist/types/transforms/density.js +10 -0
  618. package/dist/types/transforms/filter.d.ts +12 -0
  619. package/dist/types/transforms/filter.js +14 -0
  620. package/dist/types/transforms/group.d.ts +70 -0
  621. package/dist/types/transforms/group.js +8 -0
  622. package/dist/types/transforms/index.d.ts +36 -0
  623. package/dist/types/transforms/index.js +1 -0
  624. package/dist/types/transforms/interval.d.ts +21 -0
  625. package/dist/types/transforms/interval.js +14 -0
  626. package/dist/types/transforms/jitter.d.ts +34 -0
  627. package/dist/types/transforms/jitter.js +1 -0
  628. package/dist/types/transforms/map.d.ts +24 -0
  629. package/dist/types/transforms/map.js +1 -0
  630. package/dist/types/transforms/normalize.d.ts +36 -0
  631. package/dist/types/transforms/normalize.js +1 -0
  632. package/dist/types/transforms/select.d.ts +15 -0
  633. package/dist/types/transforms/select.js +1 -0
  634. package/dist/types/transforms/shift.d.ts +20 -0
  635. package/dist/types/transforms/shift.js +1 -0
  636. package/dist/types/transforms/sort.d.ts +31 -0
  637. package/dist/types/transforms/sort.js +14 -0
  638. package/dist/types/transforms/stack.d.ts +64 -0
  639. package/dist/types/transforms/stack.js +12 -0
  640. package/dist/types/transforms/window.d.ts +29 -0
  641. package/dist/types/transforms/window.js +1 -0
  642. package/dist/utils/ContinuousDomain.d.ts +12 -0
  643. package/dist/utils/ContinuousDomain.js +19 -0
  644. package/dist/utils/Interpolation.d.ts +26 -0
  645. package/dist/utils/Interpolation.js +65 -0
  646. package/dist/utils/{color.d.ts → color/contrast.d.ts} +0 -5
  647. package/dist/utils/color/contrast.js +40 -0
  648. package/dist/utils/color/cssColor.d.ts +4 -0
  649. package/dist/utils/color/cssColor.js +77 -0
  650. package/dist/utils/color/index.d.ts +3 -0
  651. package/dist/utils/color/index.js +3 -0
  652. package/dist/utils/color/ramp.d.ts +17 -0
  653. package/dist/utils/color/ramp.js +110 -0
  654. package/dist/utils/grouping.d.ts +9 -5
  655. package/dist/utils/grouping.js +19 -10
  656. package/dist/utils/merge.d.ts +7 -0
  657. package/dist/utils/merge.js +17 -0
  658. package/dist/utils/opacity.d.ts +9 -0
  659. package/dist/utils/opacity.js +38 -0
  660. package/dist/utils/symbol.d.ts +31 -0
  661. package/dist/utils/symbol.js +92 -0
  662. package/docs/architecture.md +137 -0
  663. package/docs/chrome.md +99 -0
  664. package/docs/composer.md +69 -0
  665. package/docs/concepts.md +99 -0
  666. package/docs/development.md +103 -0
  667. package/docs/facets.md +123 -0
  668. package/docs/geo.md +151 -0
  669. package/docs/getting-started.md +78 -0
  670. package/docs/legend.md +153 -0
  671. package/docs/markers.md +117 -0
  672. package/docs/plots.md +284 -0
  673. package/docs/scales.md +95 -0
  674. package/docs/state.md +71 -0
  675. package/docs/styles-and-segments.md +269 -0
  676. package/docs/theming.md +226 -0
  677. package/docs/timeline.md +128 -0
  678. package/docs/tooltip-and-hover.md +128 -0
  679. package/docs/transforms-and-statistics.md +118 -0
  680. package/examples/BarValues.svelte +14 -0
  681. package/examples/Box.svelte +7 -0
  682. package/examples/Chrome.svelte +17 -0
  683. package/examples/ChromeOrder.svelte +18 -0
  684. package/examples/Composer.svelte +23 -0
  685. package/examples/CustomTooltip.svelte +44 -0
  686. package/examples/Facets.svelte +15 -0
  687. package/examples/FacetsCarousel.svelte +14 -0
  688. package/examples/FacetsRowsCols.svelte +23 -0
  689. package/examples/FirstPlot.svelte +7 -0
  690. package/examples/Gaps.svelte +21 -0
  691. package/examples/GroupedBars.svelte +15 -0
  692. package/examples/Heatmap.svelte +7 -0
  693. package/examples/HeatmapSegments.svelte +26 -0
  694. package/examples/Histogram.svelte +14 -0
  695. package/examples/HorizontalBars.svelte +15 -0
  696. package/examples/LegendReader.svelte +8 -0
  697. package/examples/LegendSections.svelte +27 -0
  698. package/examples/LegendToggle.svelte +25 -0
  699. package/examples/LineByRegion.svelte +18 -0
  700. package/examples/LineDates.svelte +15 -0
  701. package/examples/Markers.svelte +27 -0
  702. package/examples/MovingAverage.svelte +15 -0
  703. package/examples/Pyramid.svelte +7 -0
  704. package/examples/Regression.svelte +14 -0
  705. package/examples/ResponsiveLine.svelte +37 -0
  706. package/examples/Scales.svelte +26 -0
  707. package/examples/Scatter.svelte +16 -0
  708. package/examples/SegmentHighlight.svelte +22 -0
  709. package/examples/Segments.svelte +25 -0
  710. package/examples/SegmentsBySeries.svelte +25 -0
  711. package/examples/StackedArea.svelte +16 -0
  712. package/examples/StackedBars.svelte +15 -0
  713. package/examples/TimelinePlayer.svelte +21 -0
  714. package/examples/TimelineRule.svelte +19 -0
  715. package/examples/Tooltip.svelte +19 -0
  716. package/examples/TooltipCard.svelte +86 -0
  717. package/examples/ValueLabels.svelte +21 -0
  718. package/examples/data.ts +324 -0
  719. package/llms-full.txt +142 -0
  720. package/llms.txt +77 -0
  721. package/package.json +42 -5
  722. package/dist/charts/BaseChart.svelte +0 -149
  723. package/dist/charts/BaseChart.svelte.d.ts +0 -47
  724. package/dist/charts/bar/Chart.svelte +0 -110
  725. package/dist/charts/bar/Chart.svelte.d.ts +0 -26
  726. package/dist/charts/container/ChartContainer.svelte +0 -137
  727. package/dist/charts/container/ChartContainer.svelte.d.ts +0 -16
  728. package/dist/charts/heatmap/Chart.svelte +0 -114
  729. package/dist/charts/line/Chart.svelte +0 -112
  730. package/dist/charts/line/Chart.svelte.d.ts +0 -26
  731. package/dist/charts/pyramid/Chart.svelte +0 -134
  732. package/dist/charts/pyramid/Chart.svelte.d.ts +0 -30
  733. package/dist/charts/scatter/Chart.svelte +0 -95
  734. package/dist/charts/scatter/Chart.svelte.d.ts +0 -28
  735. package/dist/layout/coordinates/margins.d.ts +0 -16
  736. package/dist/layout/coordinates/margins.js +0 -11
  737. package/dist/layout/legend/interaction.svelte.d.ts +0 -15
  738. package/dist/layout/legend/interaction.svelte.js +0 -32
  739. package/dist/layout/plot/BasePlotLayout.svelte +0 -332
  740. package/dist/layout/plot/BasePlotLayout.svelte.d.ts +0 -122
  741. package/dist/layout/plot/margins.d.ts +0 -18
  742. package/dist/layout/plot/margins.js +0 -15
  743. package/dist/layout/plot/measureText.d.ts +0 -4
  744. package/dist/layout/plot/measureText.js +0 -19
  745. package/dist/layout/scales/buildScale.d.ts +0 -25
  746. package/dist/layout/scales/buildScale.js +0 -90
  747. package/dist/layout/scales/niceDomain.d.ts +0 -23
  748. package/dist/layout/scales/niceDomain.js +0 -59
  749. package/dist/layout/tooltip/TooltipLayout.svelte +0 -51
  750. package/dist/layout/tooltip/TooltipLayout.svelte.d.ts +0 -45
  751. package/dist/layout/tooltip/controller.svelte.d.ts +0 -61
  752. package/dist/layout/tooltip/controller.svelte.js +0 -173
  753. package/dist/layout/tooltip/hover.svelte.d.ts +0 -7
  754. package/dist/layout/tooltip/hover.svelte.js +0 -28
  755. package/dist/layout/tooltip/resolveTooltipPlacement.d.ts +0 -24
  756. package/dist/layout/tooltip/resolveTooltipPlacement.js +0 -49
  757. package/dist/layout/tooltip/utils.d.ts +0 -49
  758. package/dist/layout/tooltip/utils.js +0 -82
  759. package/dist/markers/CellMarker.svelte +0 -21
  760. package/dist/markers/ContourClipMarker.svelte +0 -77
  761. package/dist/markers/ContourMarker.svelte +0 -28
  762. package/dist/markers/DeltaMarker.svelte +0 -109
  763. package/dist/markers/DotMarker.svelte +0 -70
  764. package/dist/markers/GeoFeaturesMarker.svelte +0 -19
  765. package/dist/markers/GeoHoverMarker.svelte +0 -25
  766. package/dist/markers/GraticuleMarker.svelte +0 -18
  767. package/dist/markers/HoverMarker.svelte +0 -212
  768. package/dist/markers/LineMarker.svelte +0 -19
  769. package/dist/markers/LinkMarker.svelte +0 -42
  770. package/dist/markers/PeakMarker.svelte +0 -80
  771. package/dist/markers/PeakMarker.svelte.d.ts +0 -13
  772. package/dist/markers/RuleMarker.svelte +0 -24
  773. package/dist/markers/SphereMarker.svelte +0 -15
  774. package/dist/markers/TextMarker.svelte +0 -62
  775. package/dist/markers/VectorMarker.svelte +0 -20
  776. package/dist/plots/bar/ValueLabels.svelte +0 -149
  777. package/dist/plots/bar/ValueLabels.svelte.d.ts +0 -58
  778. package/dist/plots/bar/buildBarMarkers.d.ts +0 -27
  779. package/dist/plots/bar/buildBarMarkers.js +0 -151
  780. package/dist/plots/bar/hoverPoints.d.ts +0 -15
  781. package/dist/plots/bar/hoverPoints.js +0 -37
  782. package/dist/plots/bar/layout.svelte.d.ts +0 -42
  783. package/dist/plots/bar/layout.svelte.js +0 -182
  784. package/dist/plots/geo/buildGeoMarkers.d.ts +0 -33
  785. package/dist/plots/geo/buildGeoMarkers.js +0 -47
  786. package/dist/plots/heatmap/ValueLabels.svelte +0 -56
  787. package/dist/plots/heatmap/buildCellMarkers.d.ts +0 -21
  788. package/dist/plots/heatmap/buildCellMarkers.js +0 -25
  789. package/dist/plots/line/ValueLabels.svelte +0 -269
  790. package/dist/plots/line/ValueLabels.svelte.d.ts +0 -52
  791. package/dist/plots/line/buildGapMarkers.d.ts +0 -28
  792. package/dist/plots/line/buildGapMarkers.js +0 -74
  793. package/dist/plots/line/buildLineMarkers.d.ts +0 -16
  794. package/dist/plots/line/buildLineMarkers.js +0 -56
  795. package/dist/plots/line/valueLabelMargin.d.ts +0 -19
  796. package/dist/plots/line/valueLabelMargin.js +0 -65
  797. package/dist/plots/pyramid/ValueLabels.svelte +0 -139
  798. package/dist/plots/pyramid/ValueLabels.svelte.d.ts +0 -56
  799. package/dist/plots/pyramid/buildPyramidBarMarkers.d.ts +0 -26
  800. package/dist/plots/pyramid/buildPyramidBarMarkers.js +0 -72
  801. package/dist/plots/scatter/ValueLabels.svelte +0 -163
  802. package/dist/plots/scatter/ValueLabels.svelte.d.ts +0 -52
  803. package/dist/plots/scatter/buildScatterMarkers.d.ts +0 -12
  804. package/dist/plots/scatter/buildScatterMarkers.js +0 -36
  805. package/dist/plots/scatter/resolveRadiusPaddedDomain.d.ts +0 -10
  806. package/dist/plots/scatter/resolveRadiusPaddedDomain.js +0 -23
  807. package/dist/plots/utils/categoricalAxisMargin.d.ts +0 -14
  808. package/dist/plots/utils/categoricalAxisMargin.js +0 -20
  809. package/dist/plots/utils/declutter.d.ts +0 -120
  810. package/dist/plots/utils/declutter.js +0 -240
  811. package/dist/plots/utils/labelOverflow.svelte.d.ts +0 -107
  812. package/dist/plots/utils/labelOverflow.svelte.js +0 -257
  813. package/dist/plots/utils/legendDisabled.d.ts +0 -27
  814. package/dist/plots/utils/legendDisabled.js +0 -68
  815. package/dist/plots/utils/valueLabelMargin.d.ts +0 -67
  816. package/dist/plots/utils/valueLabelMargin.js +0 -60
  817. package/dist/types/charts/common.d.ts +0 -22
  818. package/dist/types/charts/props.d.ts +0 -50
  819. package/dist/types/markers/base.d.ts +0 -45
  820. package/dist/types/markers/line.d.ts +0 -34
  821. package/dist/types/markers/props.d.ts +0 -11
  822. package/dist/types/plots/data/scatter.d.ts +0 -13
  823. package/dist/utils/color.js +0 -141
  824. package/dist/utils/delta.d.ts +0 -12
  825. package/dist/utils/delta.js +0 -69
  826. package/dist/utils/edgeAwareAnchor.d.ts +0 -34
  827. package/dist/utils/edgeAwareAnchor.js +0 -60
  828. package/dist/utils/interpolate.d.ts +0 -31
  829. package/dist/utils/interpolate.js +0 -71
  830. /package/dist/types/{charts/common.js → layout/box.js} +0 -0
  831. /package/dist/types/{charts/interpolate.js → layout/composer.js} +0 -0
  832. /package/dist/types/{charts/props.js → layout/figure.js} +0 -0
  833. /package/dist/types/{markers/base.js → layout/grid.js} +0 -0
  834. /package/dist/types/{markers/line.js → layout/hover.js} +0 -0
  835. /package/dist/types/{markers/props.js → layout/mapping.js} +0 -0
  836. /package/dist/types/{plots/data/scatter.js → layout/plot.js} +0 -0
  837. /package/dist/types/{viewport.js → layout/statistics/bollinger.js} +0 -0
  838. /package/dist/types/{charts/interpolate.d.ts → misc/easing.d.ts} +0 -0
  839. /package/dist/types/{viewport.d.ts → misc/viewport.d.ts} +0 -0
@@ -1,417 +1,454 @@
1
1
  <script lang="ts" generics="TRow extends Record<string, unknown>">
2
- import { isMobile } from '../../stores/device';
3
- import { groupBy } from '../../utils/grouping';
4
- import FacetIndicator from './FacetIndicator.svelte';
5
- import type {
6
- FacetColumns,
7
- FacetMode,
8
- FacetNavLayout,
9
- Responsive,
10
- FacetCellSnippet,
11
- FacetIndicatorSnippet,
12
- FacetNavSnippet,
13
- FacetNavDirection,
14
- } from '../../types/layout/facet';
15
- import type { Accessor } from '../../types/plots/data/common';
16
- import type { MarginConfig } from '../../types/plots/props';
17
-
18
- /**
19
- * Small-multiples layout. It splits the data by `by` and hands each group to
20
- * the `cell` snippet with its own measured box. Like the other primitives it
21
- * never draws the plot itself — any plot that accepts `{ data, width, height }`
22
- * can be faceted.
23
- *
24
- * `mode` picks how the groups are arranged: `'grid'` (default) lays them all
25
- * out at once; `'paginated'` pages through the same grid in fixed chunks;
26
- * `'carousel'` shows `visible` groups at a time with touch-drag/snap.
27
- *
28
- * `marginsForFacet`, if given, sizes one shared margin (any/all sides)
29
- * across every facet — pass it through `cell`'s own `margins` to a
30
- * faceted plot's `margins` prop so they all share the same content box,
31
- * instead of each facet growing its own margin independently off what its
32
- * own content happens to need (which drifts out of alignment facet to
33
- * facet, and — for a facet cramped enough that its content can never fully
34
- * fit — can grow without bound).
35
- */
36
- let {
37
- data,
38
- by,
39
- columns = { desktop: 3, mobile: 1 },
40
- values,
41
- gap = 12,
42
- mode = 'grid',
43
- visible = 1,
44
- pageSize,
45
- navLayout = 'overlay',
46
- formatIndicator,
47
- indicator,
48
- navButton,
49
- width,
50
- height,
51
- cell,
52
- marginsForFacet,
53
- }: {
54
- data: TRow[];
55
- by: Accessor<TRow, unknown>;
56
- columns?: FacetColumns;
57
- values?: string[];
58
- gap?: number;
59
- mode?: Responsive<FacetMode>;
60
- visible?: number;
61
- pageSize?: number;
62
- navLayout?: FacetNavLayout;
63
- formatIndicator?: (current: number, total: number) => string;
64
- indicator?: FacetIndicatorSnippet;
65
- navButton?: FacetNavSnippet;
66
- width: number;
67
- height: number;
68
- cell: FacetCellSnippet<TRow>;
69
- marginsForFacet?: (rows: TRow[]) => MarginConfig;
70
- } = $props();
71
-
72
- function resolveResponsive<T>(value: Responsive<T>, mobile: boolean): T {
73
- if (typeof value === 'object' && value !== null && 'desktop' in value) {
74
- return mobile ? (value as { desktop: T; mobile: T }).mobile : (value as { desktop: T; mobile: T }).desktop;
75
- }
76
- return value as T;
77
- }
78
-
79
- const groups = $derived(groupBy(data, by));
80
-
81
- const entries = $derived.by((): [string, TRow[]][] => {
82
- if (!values) return [...groups.entries()];
83
- return values
84
- .filter((v) => groups.has(v))
85
- .map((v) => [v, groups.get(v)!] as [string, TRow[]]);
86
- });
87
-
88
- // One shared margin, sized to whatever each facet's own `marginsForFacet`
89
- // reports it naturally needs — componentwise `max` per side across every
90
- // facet. `FacetLayout` itself measures nothing here (no font, no axis
91
- // config, no plot-specific knowledge at all) — that's each plot type's
92
- // own concern, expressed however it estimates its own margin (see e.g.
93
- // `estimateLineValueLabelMargin`); this just compares already-resolved
94
- // numbers. `undefined` when `marginsForFacet` isn't given; any side no
95
- // facet reports (or reports as `'auto'`, which isn't comparable) stays
96
- // unset, falling back to the plot's own default ('auto') sizing.
97
- const MARGIN_SIDES = ['left', 'right', 'top', 'bottom'] as const;
98
- const cellMargins = $derived.by((): MarginConfig | undefined => {
99
- if (!marginsForFacet) return undefined;
100
- const perFacet = entries.map(([, rows]) => marginsForFacet(rows));
101
- const out: MarginConfig = {};
102
- for (const side of MARGIN_SIDES) {
103
- let max: number | undefined;
104
- for (const margin of perFacet) {
105
- const value = margin[side];
106
- if (typeof value !== 'number') continue;
107
- max = max === undefined ? value : Math.max(max, value);
108
- }
109
- if (max !== undefined) out[side] = max;
110
- }
111
- return out;
112
- });
113
-
114
- const resolvedMode = $derived(resolveResponsive(mode, $isMobile));
115
-
116
- // Columns/rows for a "full" grid of every entry — used for plain grid-mode
117
- // layout, and as the default `pageSize` (one page = one full screen).
118
- const gridCols = $derived.by(() => {
119
- const desired = resolveResponsive(columns, $isMobile);
120
- return Math.max(1, Math.min(desired, entries.length || 1));
121
- });
122
- const gridRows = $derived(Math.ceil((entries.length || 1) / gridCols));
123
-
124
- // ── paginated ────────────────────────────────────────────────────────────
125
- const resolvedPageSize = $derived(Math.max(1, pageSize ?? gridCols * gridRows));
126
- let page = $state(0);
127
- const totalPages = $derived(Math.max(1, Math.ceil(entries.length / resolvedPageSize)));
128
- const pageEntries = $derived(
129
- entries.slice(page * resolvedPageSize, page * resolvedPageSize + resolvedPageSize),
130
- );
131
-
132
- $effect(() => {
133
- if (page > totalPages - 1) page = Math.max(0, totalPages - 1);
134
- });
135
-
136
- function prevPage(): void {
137
- page = Math.max(0, page - 1);
138
- }
139
- function nextPage(): void {
140
- page = Math.min(totalPages - 1, page + 1);
141
- }
142
-
143
- const showNav = $derived(resolvedMode === 'paginated' && totalPages > 1);
144
- const NAV_BELOW_H = 44;
145
-
146
- // Columns/rows actually used to size each rendered cell. `grid` mode always
147
- // renders every entry, so it sizes off `gridCols`/`gridRows` as before. In
148
- // `paginated` mode only `pageEntries` (at most `pageSize`, possibly fewer
149
- // on the last page) are ever on screen at once — sizing off the *total*
150
- // entry count instead (as `gridCols`/`gridRows` do) left a page with fewer
151
- // entries than a full grid mostly blank, e.g. `pageSize: 1` still reserved
152
- // room for every other page's rows instead of filling the chart area with
153
- // its one cell.
154
- const cols = $derived(
155
- resolvedMode === 'paginated' ? Math.max(1, Math.min(gridCols, pageEntries.length || 1)) : gridCols,
156
- );
157
- const rows = $derived(
158
- resolvedMode === 'paginated' ? Math.ceil((pageEntries.length || 1) / cols) : gridRows,
159
- );
160
- // In `navLayout: 'below'`, the nav row sits in normal flow beneath the
161
- // grid rather than floating over it, so the cells must be measured against
162
- // the height left over after reserving space for that row.
163
- const contentHeight = $derived(
164
- resolvedMode === 'paginated' && navLayout === 'below' && showNav
165
- ? Math.max(0, height - NAV_BELOW_H)
166
- : height,
167
- );
168
- const cellWidth = $derived(Math.max(0, Math.floor((width - (cols - 1) * gap) / cols)));
169
- const TITLE_H = 24;
170
- const cellHeight = $derived(
171
- Math.max(0, Math.floor((contentHeight - (rows - 1) * gap) / rows) - TITLE_H),
172
- );
173
-
174
- // ── carousel ─────────────────────────────────────────────────────────────
175
- const visibleCount = $derived(Math.max(1, Math.min(visible, entries.length || 1)));
176
- const carouselCellWidth = $derived(
177
- Math.max(0, Math.floor((width - (visibleCount - 1) * gap) / visibleCount)),
178
- );
179
- const carouselCellHeight = $derived(Math.max(0, height - TITLE_H));
180
- const maxIndex = $derived(Math.max(0, entries.length - visibleCount));
181
- const stepWidth = $derived(carouselCellWidth + gap);
182
-
183
- let activeIndex = $state(0);
184
- let dragOffset = $state(0);
185
- let dragging = $state(false);
186
- let dragStartX = 0;
187
-
188
- const translate = $derived(-activeIndex * stepWidth + dragOffset);
189
-
190
- $effect(() => {
191
- if (activeIndex > maxIndex) activeIndex = maxIndex;
192
- });
193
-
194
- // Reset browsing position whenever the faceted field or its value set changes.
195
- $effect(() => {
196
- void by;
197
- void values;
198
- page = 0;
199
- activeIndex = 0;
200
- });
201
-
202
- function handleTouchStart(event: TouchEvent): void {
203
- dragging = true;
204
- dragStartX = event.touches[0].clientX;
205
- dragOffset = 0;
206
- }
207
-
208
- function handleTouchMove(event: TouchEvent): void {
209
- if (!dragging) return;
210
- dragOffset = event.touches[0].clientX - dragStartX;
211
- }
212
-
213
- function handleTouchEnd(): void {
214
- if (!dragging) return;
215
- dragging = false;
216
- const stepsMoved = Math.round(-dragOffset / stepWidth);
217
- activeIndex = Math.max(0, Math.min(maxIndex, activeIndex + stepsMoved));
218
- dragOffset = 0;
219
- }
2
+ import { isMobile } from '../../stores/device';
3
+ import { resolveAccessor } from '../../plots/utils/accessors';
4
+ import FacetIndicator from './FacetIndicator.svelte';
5
+ import Grid from '../grid/Grid.svelte';
6
+ import GridCell from '../grid/GridCell.svelte';
7
+ import { buildFacetPanels } from './config';
8
+ import type {
9
+ FacetColumns,
10
+ FacetMode,
11
+ FacetNavLayout,
12
+ Responsive,
13
+ FacetCellSnippet,
14
+ FacetIndicatorSnippet,
15
+ FacetNavSnippet,
16
+ FacetNavDirection
17
+ } from '../../types/layout/facet';
18
+ import type { Accessor } from '../../types/plots/data/common';
19
+
20
+ /**
21
+ * Small multiples on a `Grid`: splits `data` and gives each group to
22
+ * the `cell` snippet with its own box. Either one facet per `by` value,
23
+ * titled and wrapped into `columns` - all at once (`mode: 'grid'`), a page
24
+ * at a time (`'paginated'`) or as a swipeable `'carousel'` - or one facet
25
+ * per `rows` × `cols` combination, labelled on strips above and beside.
26
+ * With `align` (the default), every facet's plot area lines up with its
27
+ * row and column.
28
+ */
29
+ let {
30
+ data,
31
+ by,
32
+ rows,
33
+ cols,
34
+ rowValues,
35
+ colValues,
36
+ columns = { desktop: 3, mobile: 1 },
37
+ values,
38
+ gap = 12,
39
+ mode = 'grid',
40
+ visible = 1,
41
+ pageSize,
42
+ navLayout = 'overlay',
43
+ formatIndicator,
44
+ indicator,
45
+ navButton,
46
+ width,
47
+ height,
48
+ cell,
49
+ align = true
50
+ }: {
51
+ data: TRow[];
52
+ /** One facet per value, wrapped into `columns`. */
53
+ by?: Accessor<TRow, unknown>;
54
+ /** One facet row per value - with `cols`, a matrix. */
55
+ rows?: Accessor<TRow, unknown>;
56
+ /** One facet column per value - with `rows`, a matrix. */
57
+ cols?: Accessor<TRow, unknown>;
58
+ rowValues?: string[];
59
+ colValues?: string[];
60
+ columns?: FacetColumns;
61
+ values?: string[];
62
+ gap?: number;
63
+ mode?: Responsive<FacetMode>;
64
+ visible?: number;
65
+ pageSize?: number;
66
+ navLayout?: FacetNavLayout;
67
+ formatIndicator?: (current: number, total: number) => string;
68
+ indicator?: FacetIndicatorSnippet;
69
+ navButton?: FacetNavSnippet;
70
+ width: number;
71
+ height: number;
72
+ cell: FacetCellSnippet<TRow>;
73
+ align?: boolean;
74
+ } = $props();
75
+
76
+ /** One facet: its label, rows, and - in a matrix - its row/col values and slot. */
77
+ type Entry = {
78
+ key: string;
79
+ label: string;
80
+ data: TRow[];
81
+ row?: string;
82
+ col?: string;
83
+ r?: number;
84
+ c?: number;
85
+ };
86
+
87
+ const TITLE_H = 24;
88
+ const NAV_BELOW_H = 44;
89
+
90
+ function resolveResponsive<T>(value: Responsive<T>, mobile: boolean): T {
91
+ if (typeof value === 'object' && value !== null && 'desktop' in value) {
92
+ return mobile
93
+ ? (value as { desktop: T; mobile: T }).mobile
94
+ : (value as { desktop: T; mobile: T }).desktop;
95
+ }
96
+ return value as T;
97
+ }
98
+
99
+ const wrap = $derived(by !== undefined);
100
+
101
+ // ── wrapped (`by`) ───────────────────────────────────────────────────────
102
+ // The panels, in the order a plot's "facet" phase lays them out.
103
+ const panels = $derived(
104
+ buildFacetPanels(by !== undefined ? { by, values } : { rows, cols, rowValues, colValues }, data)
105
+ );
106
+
107
+ const wrapEntries = $derived.by((): Entry[] => {
108
+ if (by === undefined) return [];
109
+ return panels.map((panel) => ({ key: panel.key, label: panel.label, data: panel.rows }));
110
+ });
111
+
112
+ // ── matrix (`rows` × `cols`) ─────────────────────────────────────────────
113
+ const getRow = $derived(rows === undefined ? null : resolveAccessor<TRow>(rows));
114
+ const getCol = $derived(cols === undefined ? null : resolveAccessor<TRow>(cols));
115
+
116
+ function distinct(get: ((d: TRow) => unknown) | null, given: string[] | undefined): string[] {
117
+ if (!get) return [''];
118
+ if (given) return given;
119
+ return [...new Set(data.map((d) => String(get(d))))];
120
+ }
121
+
122
+ const rowKeys = $derived(distinct(getRow, rowValues));
123
+ const colKeys = $derived(distinct(getCol, colValues));
124
+
125
+ const matrixEntries = $derived.by((): Entry[] => {
126
+ if (wrap) return [];
127
+ return panels.map((panel) => {
128
+ const r = rowKeys.indexOf(panel.row ?? '');
129
+ const c = colKeys.indexOf(panel.col ?? '');
130
+ return {
131
+ key: `${r}:${c}`,
132
+ label: panel.label,
133
+ data: panel.rows,
134
+ row: panel.row,
135
+ col: panel.col,
136
+ r,
137
+ c
138
+ };
139
+ });
140
+ });
141
+
142
+ // ── wrapped modes ────────────────────────────────────────────────────────
143
+ const resolvedMode = $derived(wrap ? resolveResponsive(mode, $isMobile) : 'grid');
144
+
145
+ const gridCols = $derived(
146
+ Math.max(1, Math.min(resolveResponsive(columns, $isMobile), wrapEntries.length || 1))
147
+ );
148
+ const gridRows = $derived(Math.ceil((wrapEntries.length || 1) / gridCols));
149
+
150
+ const resolvedPageSize = $derived(Math.max(1, pageSize ?? gridCols * gridRows));
151
+ let page = $state(0);
152
+ const totalPages = $derived(Math.max(1, Math.ceil(wrapEntries.length / resolvedPageSize)));
153
+ const pageEntries = $derived(
154
+ resolvedMode === 'paginated'
155
+ ? wrapEntries.slice(page * resolvedPageSize, page * resolvedPageSize + resolvedPageSize)
156
+ : wrapEntries
157
+ );
158
+
159
+ $effect(() => {
160
+ if (page > totalPages - 1) page = Math.max(0, totalPages - 1);
161
+ });
162
+
163
+ const showNav = $derived(resolvedMode === 'paginated' && totalPages > 1);
164
+ // A page sizes its grid off what it shows, not the full entry count.
165
+ const pageCols = $derived(Math.max(1, Math.min(gridCols, pageEntries.length || 1)));
166
+ const gridHeight = $derived(
167
+ navLayout === 'below' && showNav ? Math.max(0, height - NAV_BELOW_H) : height
168
+ );
169
+
170
+ // ── carousel ─────────────────────────────────────────────────────────────
171
+ // A carousel cell slides past every other, so each one draws all its axes.
172
+ const CAROUSEL_EDGES = { top: true, right: true, bottom: true, left: true };
173
+ const visibleCount = $derived(Math.max(1, Math.min(visible, wrapEntries.length || 1)));
174
+ const carouselCellWidth = $derived(
175
+ Math.max(0, Math.floor((width - (visibleCount - 1) * gap) / visibleCount))
176
+ );
177
+ const carouselCellHeight = $derived(Math.max(0, height - TITLE_H));
178
+ const maxIndex = $derived(Math.max(0, wrapEntries.length - visibleCount));
179
+ const stepWidth = $derived(carouselCellWidth + gap);
180
+
181
+ let activeIndex = $state(0);
182
+ let dragOffset = $state(0);
183
+ let dragging = $state(false);
184
+ let dragStartX = 0;
185
+
186
+ const translate = $derived(-activeIndex * stepWidth + dragOffset);
187
+
188
+ $effect(() => {
189
+ if (activeIndex > maxIndex) activeIndex = maxIndex;
190
+ });
191
+
192
+ // Reset browsing position whenever the faceted field or its value set changes.
193
+ $effect(() => {
194
+ void by;
195
+ void values;
196
+ page = 0;
197
+ activeIndex = 0;
198
+ });
199
+
200
+ function handleTouchStart(event: TouchEvent): void {
201
+ dragging = true;
202
+ dragStartX = event.touches[0].clientX;
203
+ dragOffset = 0;
204
+ }
205
+
206
+ function handleTouchMove(event: TouchEvent): void {
207
+ if (!dragging) return;
208
+ dragOffset = event.touches[0].clientX - dragStartX;
209
+ }
210
+
211
+ function handleTouchEnd(): void {
212
+ if (!dragging) return;
213
+ dragging = false;
214
+ const stepsMoved = Math.round(-dragOffset / stepWidth);
215
+ activeIndex = Math.max(0, Math.min(maxIndex, activeIndex + stepsMoved));
216
+ dragOffset = 0;
217
+ }
220
218
  </script>
221
219
 
222
220
  {#snippet indicatorContent(current: number, total: number)}
223
- {#if indicator}
224
- {@render indicator({ current, total })}
225
- {:else}
226
- <FacetIndicator {current} {total} format={formatIndicator} />
227
- {/if}
221
+ {#if indicator}
222
+ {@render indicator({ current, total })}
223
+ {:else}
224
+ <FacetIndicator {current} {total} format={formatIndicator} />
225
+ {/if}
228
226
  {/snippet}
229
227
 
230
228
  {#snippet indicatorSlot(current: number, total: number)}
231
- <div class="dct-facet-indicator-slot">
232
- {@render indicatorContent(current, total)}
233
- </div>
229
+ <div class="dct-facet-indicator-slot">
230
+ {@render indicatorContent(current, total)}
231
+ </div>
234
232
  {/snippet}
235
233
 
236
- {#snippet navButtons(direction: FacetNavDirection, disabled: boolean, onclick: () => void, label: string, glyph: string)}
237
- <span class="dct-facet-nav-slot">
238
- {#if navButton}
239
- {@render navButton({ direction, disabled, onclick })}
240
- {:else}
241
- <button
242
- type="button"
243
- class="dct-facet-paginated__btn"
244
- {disabled}
245
- {onclick}
246
- aria-label={label}
247
- >
248
- {glyph}
249
- </button>
250
- {/if}
251
- </span>
234
+ {#snippet navButtons(
235
+ direction: FacetNavDirection,
236
+ disabled: boolean,
237
+ onclick: () => void,
238
+ label: string,
239
+ glyph: string
240
+ )}
241
+ <span class="dct-facet-nav-slot">
242
+ {#if navButton}
243
+ {@render navButton({ direction, disabled, onclick })}
244
+ {:else}
245
+ <button
246
+ type="button"
247
+ class="dct-facet-paginated__btn"
248
+ {disabled}
249
+ {onclick}
250
+ aria-label={label}
251
+ >
252
+ {glyph}
253
+ </button>
254
+ {/if}
255
+ </span>
252
256
  {/snippet}
253
257
 
254
- {#snippet grid(gridEntries: [string, TRow[]][])}
255
- <div class="dct-facet" style:grid-template-columns="repeat({cols}, 1fr)" style:gap="{gap}px">
256
- {#each gridEntries as [facetValue, rowsForCell] (facetValue)}
257
- <div class="dct-facet__cell">
258
- <div class="dct-facet__title">{facetValue}</div>
259
- {#if cellWidth > 0 && cellHeight > 0}
260
- {@render cell({ facetValue, data: rowsForCell, width: cellWidth, height: cellHeight, margins: cellMargins })}
261
- {/if}
262
- </div>
263
- {/each}
264
- </div>
258
+ {#snippet facetCells(entries: Entry[], columnCount: number)}
259
+ {#each entries as entry, i (entry.key)}
260
+ <GridCell
261
+ row={entry.r ?? Math.floor(i / columnCount)}
262
+ col={entry.c ?? i % columnCount}
263
+ label={wrap ? entry.label : undefined}
264
+ data-row={entry.row}
265
+ data-col={entry.col}
266
+ >
267
+ {#snippet children(box)}
268
+ {@render cell({
269
+ facetValue: entry.label,
270
+ row: entry.row,
271
+ col: entry.col,
272
+ data: entry.data,
273
+ width: box.width,
274
+ height: box.height,
275
+ margins: box.margins,
276
+ edges: box.edges
277
+ })}
278
+ {/snippet}
279
+ </GridCell>
280
+ {/each}
265
281
  {/snippet}
266
282
 
267
- {#if resolvedMode === 'paginated'}
268
- <div class="dct-facet-paginated" style:width="{width}px" style:height="{height}px">
269
- {@render grid(pageEntries)}
270
- {#if showNav}
271
- {#if navLayout === 'below'}
272
- <div class="dct-facet-paginated__nav-below" style:height="{NAV_BELOW_H}px">
273
- {@render navButtons('prev', page === 0, prevPage, 'Previous page', '‹')}
274
- {@render indicatorContent(page + 1, totalPages)}
275
- {@render navButtons('next', page >= totalPages - 1, nextPage, 'Next page', '›')}
276
- </div>
277
- {:else}
278
- <div class="dct-facet-paginated__nav">
279
- {@render navButtons('prev', page === 0, prevPage, 'Previous page', '‹')}
280
- {@render navButtons('next', page >= totalPages - 1, nextPage, 'Next page', '›')}
281
- </div>
282
- {@render indicatorSlot(page + 1, totalPages)}
283
- {/if}
284
- {/if}
285
- </div>
283
+ {#if !wrap}
284
+ <Grid
285
+ {width}
286
+ {height}
287
+ {gap}
288
+ {align}
289
+ columns={colKeys.length}
290
+ rows={rowKeys.length}
291
+ colLabels={getCol ? colKeys : undefined}
292
+ rowLabels={getRow ? rowKeys : undefined}
293
+ >
294
+ {@render facetCells(matrixEntries, colKeys.length)}
295
+ </Grid>
286
296
  {:else if resolvedMode === 'carousel'}
287
- <div
288
- class="dct-facet-carousel"
289
- role="group"
290
- aria-roledescription="carousel"
291
- style:width="{width}px"
292
- style:height="{height}px"
293
- ontouchstart={handleTouchStart}
294
- ontouchmove={handleTouchMove}
295
- ontouchend={handleTouchEnd}
296
- >
297
- <div
298
- class="dct-facet-carousel__track"
299
- class:dct-facet-carousel__track--dragging={dragging}
300
- style:gap="{gap}px"
301
- style:transform="translateX({translate}px)"
302
- >
303
- {#each entries as [facetValue, rowsForCell] (facetValue)}
304
- <div class="dct-facet__cell dct-facet-carousel__cell" style:width="{carouselCellWidth}px">
305
- <div class="dct-facet__title">{facetValue}</div>
306
- {#if carouselCellWidth > 0 && carouselCellHeight > 0}
307
- {@render cell({
308
- facetValue,
309
- data: rowsForCell,
310
- width: carouselCellWidth,
311
- height: carouselCellHeight,
312
- margins: cellMargins,
313
- })}
314
- {/if}
315
- </div>
316
- {/each}
317
- </div>
318
- {#if entries.length > 1}
319
- {@render indicatorSlot(activeIndex + 1, entries.length)}
320
- {/if}
321
- </div>
297
+ <div
298
+ class="dct-facet-carousel"
299
+ role="group"
300
+ aria-roledescription="carousel"
301
+ style:width="{width}px"
302
+ style:height="{height}px"
303
+ ontouchstart={handleTouchStart}
304
+ ontouchmove={handleTouchMove}
305
+ ontouchend={handleTouchEnd}
306
+ >
307
+ <div
308
+ class="dct-facet-carousel__track"
309
+ class:dct-facet-carousel__track--dragging={dragging}
310
+ style:gap="{gap}px"
311
+ style:transform="translateX({translate}px)"
312
+ >
313
+ {#each wrapEntries as entry (entry.key)}
314
+ <div class="dct-facet-carousel__cell" style:width="{carouselCellWidth}px">
315
+ <div class="dct-facet-carousel__title" style:height="{TITLE_H}px">{entry.label}</div>
316
+ {#if carouselCellWidth > 0 && carouselCellHeight > 0}
317
+ {@render cell({
318
+ facetValue: entry.label,
319
+ data: entry.data,
320
+ width: carouselCellWidth,
321
+ height: carouselCellHeight,
322
+ edges: CAROUSEL_EDGES
323
+ })}
324
+ {/if}
325
+ </div>
326
+ {/each}
327
+ </div>
328
+ {#if wrapEntries.length > 1}
329
+ {@render indicatorSlot(activeIndex + 1, wrapEntries.length)}
330
+ {/if}
331
+ </div>
322
332
  {:else}
323
- {@render grid(entries)}
333
+ <div class="dct-facet-paginated" style:width="{width}px" style:height="{height}px">
334
+ {#key page}
335
+ <Grid {width} height={gridHeight} {gap} {align} header={TITLE_H} columns={pageCols}>
336
+ {@render facetCells(pageEntries, pageCols)}
337
+ </Grid>
338
+ {/key}
339
+ {#if showNav}
340
+ {#if navLayout === 'below'}
341
+ <div class="dct-facet-paginated__nav-below" style:height="{NAV_BELOW_H}px">
342
+ {@render navButtons(
343
+ 'prev',
344
+ page === 0,
345
+ () => (page = Math.max(0, page - 1)),
346
+ 'Previous page',
347
+ '‹'
348
+ )}
349
+ {@render indicatorContent(page + 1, totalPages)}
350
+ {@render navButtons(
351
+ 'next',
352
+ page >= totalPages - 1,
353
+ () => (page = Math.min(totalPages - 1, page + 1)),
354
+ 'Next page',
355
+ '›'
356
+ )}
357
+ </div>
358
+ {:else}
359
+ <div class="dct-facet-paginated__nav">
360
+ {@render navButtons(
361
+ 'prev',
362
+ page === 0,
363
+ () => (page = Math.max(0, page - 1)),
364
+ 'Previous page',
365
+ '‹'
366
+ )}
367
+ {@render navButtons(
368
+ 'next',
369
+ page >= totalPages - 1,
370
+ () => (page = Math.min(totalPages - 1, page + 1)),
371
+ 'Next page',
372
+ '›'
373
+ )}
374
+ </div>
375
+ {@render indicatorSlot(page + 1, totalPages)}
376
+ {/if}
377
+ {/if}
378
+ </div>
324
379
  {/if}
325
380
 
326
381
  <style>
327
- .dct-facet {
328
- display: grid;
329
- width: 100%;
330
- height: 100%;
331
- /* Only takes effect when `.dct-facet` is itself a flex item (inside
332
- `.dct-facet-paginated`): lets it shrink to the space left over after
333
- a `flex: 0 0 auto` sibling (the below-layout nav row) claims its
334
- fixed height, instead of overflowing past the fixed-height parent
335
- the way a bare `height: 100%` would. No-op outside a flex parent
336
- (e.g. plain `grid` mode), where `width/height: 100%` alone applies. */
337
- flex: 1 1 auto;
338
- min-height: 0;
339
- }
340
- .dct-facet__cell {
341
- display: flex;
342
- flex-direction: column;
343
- min-width: 0;
344
- min-height: 0;
345
- }
346
- .dct-facet__title {
347
- flex: 0 0 auto;
348
- font-size: 0.85rem;
349
- font-weight: 600;
350
- text-align: center;
351
- opacity: 0.9;
352
- }
353
-
354
- .dct-facet-paginated {
355
- position: relative;
356
- display: flex;
357
- flex-direction: column;
358
- }
359
- .dct-facet-paginated__nav {
360
- position: absolute;
361
- top: 50%;
362
- left: 0;
363
- right: 0;
364
- display: flex;
365
- justify-content: space-between;
366
- transform: translateY(-50%);
367
- pointer-events: none;
368
- }
369
- .dct-facet-nav-slot {
370
- pointer-events: auto;
371
- }
372
- .dct-facet-paginated__nav-below {
373
- flex: 0 0 auto;
374
- display: flex;
375
- align-items: center;
376
- justify-content: center;
377
- gap: var(--dct-facet-nav-below-gap, 0.75rem);
378
- }
379
- .dct-facet-paginated__btn {
380
- border: none;
381
- border-radius: 999px;
382
- width: var(--dct-facet-nav-btn-size, 2rem);
383
- height: var(--dct-facet-nav-btn-size, 2rem);
384
- font-size: var(--dct-facet-nav-font-size, 1.1rem);
385
- line-height: 1;
386
- background: var(--dct-facet-nav-bg, #111827);
387
- color: var(--dct-facet-nav-color, #fff);
388
- cursor: pointer;
389
- }
390
- .dct-facet-paginated__btn:disabled {
391
- opacity: var(--dct-facet-nav-disabled-opacity, 0.3);
392
- cursor: default;
393
- }
394
-
395
- .dct-facet-indicator-slot {
396
- position: absolute;
397
- right: 0.5rem;
398
- bottom: 0.5rem;
399
- }
400
-
401
- .dct-facet-carousel {
402
- position: relative;
403
- overflow: hidden;
404
- touch-action: pan-y;
405
- }
406
- .dct-facet-carousel__track {
407
- display: flex;
408
- height: 100%;
409
- transition: transform 0.25s ease;
410
- }
411
- .dct-facet-carousel__track--dragging {
412
- transition: none;
413
- }
414
- .dct-facet-carousel__cell {
415
- flex: 0 0 auto;
416
- }
382
+ .dct-facet-paginated {
383
+ position: relative;
384
+ display: flex;
385
+ flex-direction: column;
386
+ }
387
+ .dct-facet-paginated__nav {
388
+ position: absolute;
389
+ top: 50%;
390
+ left: 0;
391
+ right: 0;
392
+ display: flex;
393
+ justify-content: space-between;
394
+ transform: translateY(-50%);
395
+ pointer-events: none;
396
+ }
397
+ .dct-facet-nav-slot {
398
+ pointer-events: auto;
399
+ }
400
+ .dct-facet-paginated__nav-below {
401
+ flex: 0 0 auto;
402
+ display: flex;
403
+ align-items: center;
404
+ justify-content: center;
405
+ gap: var(--dct-facet-nav-below-gap, 0.75rem);
406
+ }
407
+ .dct-facet-paginated__btn {
408
+ border: none;
409
+ border-radius: 999px;
410
+ width: var(--dct-facet-nav-btn-size, 2rem);
411
+ height: var(--dct-facet-nav-btn-size, 2rem);
412
+ font-size: var(--dct-facet-nav-font-size, 1.1rem);
413
+ line-height: 1;
414
+ background: var(--dct-facet-nav-bg, #111827);
415
+ color: var(--dct-facet-nav-color, #fff);
416
+ cursor: pointer;
417
+ }
418
+ .dct-facet-paginated__btn:disabled {
419
+ opacity: var(--dct-facet-nav-disabled-opacity, 0.3);
420
+ cursor: default;
421
+ }
422
+
423
+ .dct-facet-indicator-slot {
424
+ position: absolute;
425
+ right: 0.5rem;
426
+ bottom: 0.5rem;
427
+ }
428
+
429
+ .dct-facet-carousel {
430
+ position: relative;
431
+ overflow: hidden;
432
+ touch-action: pan-y;
433
+ }
434
+ .dct-facet-carousel__track {
435
+ display: flex;
436
+ height: 100%;
437
+ transition: transform 0.25s ease;
438
+ }
439
+ .dct-facet-carousel__track--dragging {
440
+ transition: none;
441
+ }
442
+ .dct-facet-carousel__cell {
443
+ flex: 0 0 auto;
444
+ display: flex;
445
+ flex-direction: column;
446
+ }
447
+ .dct-facet-carousel__title {
448
+ flex: 0 0 auto;
449
+ font-size: 0.85rem;
450
+ font-weight: 600;
451
+ text-align: center;
452
+ opacity: 0.9;
453
+ }
417
454
  </style>