@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.
- package/CHANGELOG.md +38 -0
- package/LICENSE +21 -0
- package/README.md +112 -553
- package/dist/configuration/config.svelte.d.ts +5 -5
- package/dist/configuration/config.svelte.js +142 -46
- package/dist/configuration/fonts.d.ts +6 -0
- package/dist/configuration/fonts.js +6 -0
- package/dist/configuration/themes/compact.d.ts +2 -2
- package/dist/configuration/themes/compact.js +1 -1
- package/dist/configuration/themes/dark.d.ts +2 -2
- package/dist/configuration/themes/dark.js +5 -4
- package/dist/configuration/themes/default.d.ts +8 -3
- package/dist/configuration/themes/default.js +8 -2
- package/dist/configuration/themes/editorial.d.ts +2 -2
- package/dist/configuration/themes/editorial.js +2 -2
- package/dist/configuration/themes/index.d.ts +545 -80
- package/dist/configuration/themes/index.js +6 -5
- package/dist/index.d.ts +35 -48
- package/dist/index.js +20 -35
- package/dist/layout/base/BasePlotLayout.svelte +325 -0
- package/dist/layout/base/BasePlotLayout.svelte.d.ts +111 -0
- package/dist/layout/composer/PlotComposer.svelte +94 -0
- package/dist/layout/composer/PlotComposer.svelte.d.ts +13 -0
- package/dist/layout/coordinates/CameraFit.svelte +4 -4
- package/dist/layout/coordinates/CoordinatesLayout.svelte +11 -3
- package/dist/layout/coordinates/CoordinatesLayout.svelte.d.ts +6 -2
- package/dist/layout/coordinates/camera.svelte.d.ts +1 -1
- package/dist/layout/coordinates/camera.svelte.js +6 -6
- package/dist/layout/coordinates/projections/argentina.js +3 -3
- package/dist/layout/coordinates/projections/fit.js +1 -1
- package/dist/layout/coordinates/resolveCameraTarget.d.ts +1 -1
- package/dist/layout/coordinates/resolveProjection.d.ts +1 -1
- package/dist/layout/coordinates/resolveProjection.js +2 -2
- package/dist/layout/coordinates/rotate.svelte.d.ts +3 -3
- package/dist/layout/coordinates/rotate.svelte.js +8 -8
- package/dist/layout/coordinates/zoom.svelte.d.ts +1 -1
- package/dist/layout/facet/FacetIndicator.svelte +23 -23
- package/dist/layout/facet/FacetLayout.svelte +435 -398
- package/dist/layout/facet/FacetLayout.svelte.d.ts +9 -3
- package/dist/layout/facet/axes.d.ts +16 -0
- package/dist/layout/facet/axes.js +25 -0
- package/dist/layout/facet/config.d.ts +32 -0
- package/dist/layout/facet/config.js +82 -0
- package/dist/layout/figure/Figure.svelte +177 -0
- package/dist/layout/figure/Figure.svelte.d.ts +14 -0
- package/dist/layout/figure/FigureChrome.svelte +341 -0
- package/dist/layout/figure/FigureChrome.svelte.d.ts +21 -0
- package/dist/layout/geometry/FrameClip.svelte +45 -0
- package/dist/layout/geometry/FrameClip.svelte.d.ts +8 -0
- package/dist/layout/geometry/FrameClipping.d.ts +24 -0
- package/dist/layout/geometry/FrameClipping.js +40 -0
- package/dist/layout/geometry/GeometryLayout.svelte +287 -224
- package/dist/layout/geometry/GeometryLayout.svelte.d.ts +10 -10
- package/dist/layout/grid/Grid.svelte +194 -0
- package/dist/layout/grid/Grid.svelte.d.ts +26 -0
- package/dist/layout/grid/GridAlignment.svelte.d.ts +31 -0
- package/dist/layout/grid/GridAlignment.svelte.js +56 -0
- package/dist/layout/grid/GridCell.svelte +141 -0
- package/dist/layout/grid/GridCell.svelte.d.ts +17 -0
- package/dist/layout/grid/GridCellsRegistry.svelte.d.ts +52 -0
- package/dist/layout/grid/GridCellsRegistry.svelte.js +70 -0
- package/dist/layout/grid/GridPlan.d.ts +49 -0
- package/dist/layout/grid/GridPlan.js +167 -0
- package/dist/layout/grid/Tags.d.ts +8 -0
- package/dist/layout/grid/Tags.js +39 -0
- package/dist/layout/hover/HoverScope.svelte +11 -0
- package/dist/layout/hover/HoverScope.svelte.d.ts +8 -0
- package/dist/layout/hover/HoverSettings.d.ts +34 -0
- package/dist/layout/hover/HoverSettings.js +52 -0
- package/dist/layout/hover/HoverState.svelte.d.ts +47 -0
- package/dist/layout/hover/HoverState.svelte.js +99 -0
- package/dist/layout/hover/PlotHover.svelte.d.ts +63 -0
- package/dist/layout/hover/PlotHover.svelte.js +133 -0
- package/dist/layout/interaction/PlotInteraction.svelte.d.ts +38 -0
- package/dist/layout/interaction/PlotInteraction.svelte.js +56 -0
- package/dist/layout/legend/AxisNumberFormat.d.ts +12 -0
- package/dist/layout/legend/AxisNumberFormat.js +25 -0
- package/dist/layout/legend/ContinuousSection.svelte +363 -351
- package/dist/layout/legend/DisabledStyle.d.ts +19 -0
- package/dist/layout/legend/DisabledStyle.js +57 -0
- package/dist/layout/legend/DiscreteBadgeItem.svelte +6 -3
- package/dist/layout/legend/DiscreteSection.svelte +32 -32
- package/dist/layout/legend/DiscreteSwatchItem.svelte +4 -1
- package/dist/layout/legend/DiscreteSymbolIcon.svelte +14 -9
- package/dist/layout/legend/LegendChannels.d.ts +21 -0
- package/dist/layout/legend/LegendChannels.js +221 -0
- package/dist/layout/legend/LegendLayout.svelte +49 -43
- package/dist/layout/legend/LegendState.svelte.d.ts +84 -0
- package/dist/layout/legend/LegendState.svelte.js +333 -0
- package/dist/layout/legend/LegendText.d.ts +12 -0
- package/dist/layout/legend/LegendText.js +22 -0
- package/dist/layout/legend/SizeSection.svelte +84 -0
- package/dist/layout/legend/SizeSection.svelte.d.ts +7 -0
- package/dist/layout/legend/SymbolSection.svelte +31 -0
- package/dist/layout/legend/SymbolSection.svelte.d.ts +8 -0
- package/dist/layout/margins/Box.d.ts +84 -0
- package/dist/layout/margins/Box.js +138 -0
- package/dist/layout/margins/Margins.d.ts +37 -0
- package/dist/layout/margins/Margins.js +71 -0
- package/dist/layout/margins/PlotMargins.svelte.d.ts +101 -0
- package/dist/layout/margins/PlotMargins.svelte.js +219 -0
- package/dist/layout/plot/Core.svelte +61 -0
- package/dist/layout/plot/Core.svelte.d.ts +41 -0
- package/dist/layout/plot/PanelRun.svelte +28 -0
- package/dist/{charts/heatmap/Chart.svelte.d.ts → layout/plot/PanelRun.svelte.d.ts} +11 -7
- package/dist/layout/plot/Plot.svelte +287 -0
- package/dist/layout/plot/Plot.svelte.d.ts +49 -0
- package/dist/layout/plot/PlotContext.d.ts +41 -0
- package/dist/layout/plot/PlotContext.js +46 -0
- package/dist/layout/plot/PublicPlotContext.d.ts +131 -0
- package/dist/layout/plot/PublicPlotContext.js +240 -0
- package/dist/layout/plot/Slice.d.ts +44 -0
- package/dist/layout/plot/Slice.js +100 -0
- package/dist/layout/plot/usePlot.d.ts +9 -0
- package/dist/layout/plot/usePlot.js +13 -0
- package/dist/layout/scales/EdgeTicks.d.ts +39 -0
- package/dist/layout/scales/EdgeTicks.js +82 -0
- package/dist/layout/scales/NiceTicks.d.ts +40 -0
- package/dist/layout/scales/NiceTicks.js +72 -0
- package/dist/layout/scales/ScalesLayout.svelte +275 -206
- package/dist/layout/scales/ScalesLayout.svelte.d.ts +7 -1
- package/dist/layout/scales/SveltePlotScale.d.ts +15 -0
- package/dist/layout/scales/SveltePlotScale.js +79 -0
- package/dist/layout/styles/StylesLayout.svelte +65 -65
- package/dist/layout/styles/TileLayer.svelte +78 -76
- package/dist/layout/styles/TileLayer.svelte.d.ts +1 -1
- package/dist/layout/styles/ValueLabels.d.ts +97 -0
- package/dist/layout/styles/ValueLabels.js +238 -0
- package/dist/layout/timeline/Timeline.svelte +83 -74
- package/dist/layout/timeline/Timeline.svelte.d.ts +2 -0
- package/dist/layout/timeline/TimelineFrame.svelte +86 -0
- package/dist/layout/timeline/TimelineFrame.svelte.d.ts +16 -0
- package/dist/layout/timeline/TimelineLayout.svelte +140 -169
- package/dist/layout/timeline/TimelineLayout.svelte.d.ts +7 -3
- package/dist/layout/timeline/TimelinePlayer.svelte +195 -0
- package/dist/layout/timeline/TimelinePlayer.svelte.d.ts +7 -0
- package/dist/layout/timeline/TimelineRule.svelte +51 -0
- package/dist/layout/timeline/TimelineRule.svelte.d.ts +7 -0
- package/dist/layout/timeline/TimelineState.svelte.d.ts +90 -0
- package/dist/layout/timeline/TimelineState.svelte.js +260 -0
- package/dist/layout/timeline/TimelineSteps.d.ts +24 -0
- package/dist/layout/timeline/TimelineSteps.js +48 -0
- package/dist/layout/timeline/TimelineTime.d.ts +18 -0
- package/dist/layout/timeline/TimelineTime.js +117 -0
- package/dist/layout/tooltip/Tooltip.svelte +85 -85
- package/dist/layout/tooltip/Tooltip.svelte.d.ts +45 -24
- package/dist/layout/tooltip/TooltipState.svelte.d.ts +67 -0
- package/dist/layout/tooltip/TooltipState.svelte.js +126 -0
- package/dist/markers/MarkerKinds.d.ts +173 -0
- package/dist/markers/MarkerKinds.js +51 -0
- package/dist/markers/area/AreaMarker.svelte +110 -0
- package/dist/markers/area/AreaMarker.svelte.d.ts +7 -0
- package/dist/markers/arrow/ArrowMarker.svelte +28 -0
- package/dist/markers/arrow/ArrowMarker.svelte.d.ts +7 -0
- package/dist/markers/{BarMarker.svelte → bar/BarMarker.svelte} +54 -52
- package/dist/markers/{BarMarker.svelte.d.ts → bar/BarMarker.svelte.d.ts} +1 -1
- package/dist/markers/bollinger/BollingerMarker.svelte +44 -0
- package/dist/markers/bollinger/BollingerMarker.svelte.d.ts +7 -0
- package/dist/markers/box/BoxMarker.svelte +143 -0
- package/dist/markers/box/BoxMarker.svelte.d.ts +7 -0
- package/dist/markers/brush/BrushMarker.svelte +32 -0
- package/dist/markers/brush/BrushMarker.svelte.d.ts +7 -0
- package/dist/markers/cell/CellMarker.svelte +27 -0
- package/dist/markers/{CellMarker.svelte.d.ts → cell/CellMarker.svelte.d.ts} +1 -1
- package/dist/markers/contour/ContourClipMarker.svelte +83 -0
- package/dist/markers/{ContourClipMarker.svelte.d.ts → contour/ContourClipMarker.svelte.d.ts} +1 -1
- package/dist/markers/contour/ContourMarker.svelte +28 -0
- package/dist/markers/{ContourMarker.svelte.d.ts → contour/ContourMarker.svelte.d.ts} +1 -1
- package/dist/markers/delaunay/DelaunayLinkMarker.svelte +26 -0
- package/dist/markers/delaunay/DelaunayLinkMarker.svelte.d.ts +7 -0
- package/dist/markers/delaunay/DelaunayMeshMarker.svelte +26 -0
- package/dist/markers/delaunay/DelaunayMeshMarker.svelte.d.ts +7 -0
- package/dist/markers/delta/Delta.d.ts +21 -0
- package/dist/markers/delta/Delta.js +60 -0
- package/dist/markers/delta/DeltaMarker.svelte +96 -0
- package/dist/markers/{DeltaMarker.svelte.d.ts → delta/DeltaMarker.svelte.d.ts} +2 -2
- package/dist/markers/density/DensityMarker.svelte +63 -0
- package/dist/markers/density/DensityMarker.svelte.d.ts +7 -0
- package/dist/markers/difference/DifferenceMarker.svelte +30 -0
- package/dist/markers/difference/DifferenceMarker.svelte.d.ts +7 -0
- package/dist/markers/dot/DotMarker.svelte +102 -0
- package/dist/markers/{DotMarker.svelte.d.ts → dot/DotMarker.svelte.d.ts} +5 -17
- package/dist/markers/geo/GeoFeaturesMarker.svelte +39 -0
- package/dist/markers/{GeoFeaturesMarker.svelte.d.ts → geo/GeoFeaturesMarker.svelte.d.ts} +1 -1
- package/dist/markers/geo/GeoHoverMarker.svelte +28 -0
- package/dist/markers/{GeoHoverMarker.svelte.d.ts → geo/GeoHoverMarker.svelte.d.ts} +2 -2
- package/dist/markers/geo/GraticuleMarker.svelte +18 -0
- package/dist/markers/{GraticuleMarker.svelte.d.ts → geo/GraticuleMarker.svelte.d.ts} +1 -1
- package/dist/markers/geo/SphereMarker.svelte +15 -0
- package/dist/markers/{SphereMarker.svelte.d.ts → geo/SphereMarker.svelte.d.ts} +1 -1
- package/dist/markers/hover/HoverMarker.svelte +252 -0
- package/dist/markers/{HoverMarker.svelte.d.ts → hover/HoverMarker.svelte.d.ts} +10 -10
- package/dist/markers/hull/HullMarker.svelte +25 -0
- package/dist/markers/hull/HullMarker.svelte.d.ts +7 -0
- package/dist/markers/image/ImageMarker.svelte +22 -0
- package/dist/markers/image/ImageMarker.svelte.d.ts +7 -0
- package/dist/markers/inset/InsetMarker.svelte +184 -150
- package/dist/markers/inset/InsetMarker.svelte.d.ts +4 -4
- package/dist/markers/inset/insetLayout.d.ts +1 -1
- package/dist/markers/inset/insetLayout.js +6 -2
- package/dist/markers/inset/insetProjection.d.ts +1 -1
- package/dist/markers/inset/insetProjection.js +3 -3
- package/dist/markers/line/LineMarker.svelte +30 -0
- package/dist/markers/{LineMarker.svelte.d.ts → line/LineMarker.svelte.d.ts} +1 -1
- package/dist/markers/link/LinkMarker.svelte +47 -0
- package/dist/markers/{LinkMarker.svelte.d.ts → link/LinkMarker.svelte.d.ts} +1 -1
- package/dist/markers/raster/RasterMarker.svelte +31 -0
- package/dist/markers/raster/RasterMarker.svelte.d.ts +7 -0
- package/dist/markers/rect/RectMarker.svelte +62 -0
- package/dist/markers/rect/RectMarker.svelte.d.ts +7 -0
- package/dist/markers/regression/RegressionMarker.svelte +60 -0
- package/dist/markers/regression/RegressionMarker.svelte.d.ts +7 -0
- package/dist/markers/rule/RuleMarker.svelte +47 -0
- package/dist/markers/{RuleMarker.svelte.d.ts → rule/RuleMarker.svelte.d.ts} +2 -5
- package/dist/markers/text/Declutter.d.ts +35 -0
- package/dist/markers/text/Declutter.js +157 -0
- package/dist/markers/text/TextMarker.svelte +244 -0
- package/dist/markers/{TextMarker.svelte.d.ts → text/TextMarker.svelte.d.ts} +5 -9
- package/dist/markers/tick/TickMarker.svelte +44 -0
- package/dist/markers/tick/TickMarker.svelte.d.ts +7 -0
- package/dist/markers/trail/TrailMarker.svelte +27 -0
- package/dist/markers/trail/TrailMarker.svelte.d.ts +7 -0
- package/dist/markers/utils/BandNudge.d.ts +22 -0
- package/dist/markers/utils/BandNudge.js +23 -0
- package/dist/markers/utils/MarkerChannels.d.ts +49 -0
- package/dist/markers/utils/MarkerChannels.js +97 -0
- package/dist/markers/vector/VectorMarker.svelte +29 -0
- package/dist/markers/{VectorMarker.svelte.d.ts → vector/VectorMarker.svelte.d.ts} +1 -1
- package/dist/markers/voronoi/VoronoiMarker.svelte +26 -0
- package/dist/markers/voronoi/VoronoiMarker.svelte.d.ts +7 -0
- package/dist/markers/voronoi/VoronoiMeshMarker.svelte +26 -0
- package/dist/markers/voronoi/VoronoiMeshMarker.svelte.d.ts +7 -0
- package/dist/markers/waffle/WaffleMarker.svelte +56 -0
- package/dist/markers/waffle/WaffleMarker.svelte.d.ts +7 -0
- package/dist/phases/Pipeline.d.ts +108 -0
- package/dist/phases/Pipeline.js +227 -0
- package/dist/phases/data/DataPhase.d.ts +19 -0
- package/dist/phases/data/DataPhase.js +85 -0
- package/dist/phases/data/PlotAxes.d.ts +75 -0
- package/dist/phases/data/PlotAxes.js +151 -0
- package/dist/phases/facet/FacetPanels.d.ts +54 -0
- package/dist/phases/facet/FacetPanels.js +95 -0
- package/dist/phases/facet/FacetPhase.d.ts +11 -0
- package/dist/phases/facet/FacetPhase.js +28 -0
- package/dist/phases/hover/HoverPhase.d.ts +36 -0
- package/dist/phases/hover/HoverPhase.js +109 -0
- package/dist/phases/mapping/MappingPhase.d.ts +17 -0
- package/dist/phases/mapping/MappingPhase.js +40 -0
- package/dist/phases/markers/MarkersPhase.d.ts +14 -0
- package/dist/phases/markers/MarkersPhase.js +27 -0
- package/dist/phases/scales/MarkerAxisValues.d.ts +12 -0
- package/dist/phases/scales/MarkerAxisValues.js +34 -0
- package/dist/phases/scales/ScalesPhase.d.ts +29 -0
- package/dist/phases/scales/ScalesPhase.js +153 -0
- package/dist/phases/sharedScales/SharedScalesPhase.d.ts +58 -0
- package/dist/phases/sharedScales/SharedScalesPhase.js +171 -0
- package/dist/phases/statistics/AuthorMarkers.d.ts +43 -0
- package/dist/phases/statistics/AuthorMarkers.js +69 -0
- package/dist/phases/statistics/MarkerGrouping.d.ts +48 -0
- package/dist/phases/statistics/MarkerGrouping.js +113 -0
- package/dist/phases/statistics/Statistics.d.ts +53 -0
- package/dist/phases/statistics/Statistics.js +156 -0
- package/dist/phases/statistics/StatisticsPhase.d.ts +18 -0
- package/dist/phases/statistics/StatisticsPhase.js +67 -0
- package/dist/phases/statistics/methods/BollingerStatistic.d.ts +9 -0
- package/dist/phases/statistics/methods/BollingerStatistic.js +18 -0
- package/dist/phases/statistics/methods/BoxStatistic.d.ts +9 -0
- package/dist/phases/statistics/methods/BoxStatistic.js +18 -0
- package/dist/phases/statistics/methods/Density2dStatistic.d.ts +9 -0
- package/dist/phases/statistics/methods/Density2dStatistic.js +18 -0
- package/dist/phases/statistics/methods/DensityStatistic.d.ts +12 -0
- package/dist/phases/statistics/methods/DensityStatistic.js +29 -0
- package/dist/phases/statistics/methods/MovingAverageStatistic.d.ts +12 -0
- package/dist/phases/statistics/methods/MovingAverageStatistic.js +30 -0
- package/dist/phases/statistics/methods/RegressionStatistic.d.ts +9 -0
- package/dist/phases/statistics/methods/RegressionStatistic.js +21 -0
- package/dist/phases/styles/StylesPhase.d.ts +13 -0
- package/dist/phases/styles/StylesPhase.js +17 -0
- package/dist/phases/tooltip/TooltipPhase.d.ts +14 -0
- package/dist/phases/tooltip/TooltipPhase.js +17 -0
- package/dist/phases/transforms/ProcessedPositions.d.ts +30 -0
- package/dist/phases/transforms/ProcessedPositions.js +74 -0
- package/dist/phases/transforms/Transforms.d.ts +42 -0
- package/dist/phases/transforms/Transforms.js +130 -0
- package/dist/phases/transforms/TransformsPhase.d.ts +27 -0
- package/dist/phases/transforms/TransformsPhase.js +205 -0
- package/dist/phases/transforms/methods/AnchorBar.d.ts +13 -0
- package/dist/phases/transforms/methods/AnchorBar.js +21 -0
- package/dist/phases/transforms/methods/BinTransform.d.ts +7 -0
- package/dist/phases/transforms/methods/BinTransform.js +48 -0
- package/dist/phases/transforms/methods/DensityTransform.d.ts +6 -0
- package/dist/phases/transforms/methods/DensityTransform.js +13 -0
- package/dist/phases/transforms/methods/GroupTransform.d.ts +8 -0
- package/dist/phases/transforms/methods/GroupTransform.js +39 -0
- package/dist/phases/transforms/methods/NormalizeTransform.d.ts +10 -0
- package/dist/phases/transforms/methods/NormalizeTransform.js +30 -0
- package/dist/phases/transforms/methods/OrderTransform.d.ts +16 -0
- package/dist/phases/transforms/methods/OrderTransform.js +43 -0
- package/dist/phases/transforms/methods/PerGroup.d.ts +11 -0
- package/dist/phases/transforms/methods/PerGroup.js +39 -0
- package/dist/phases/transforms/methods/PositionTransform.d.ts +15 -0
- package/dist/phases/transforms/methods/PositionTransform.js +74 -0
- package/dist/phases/transforms/methods/StackTransform.d.ts +8 -0
- package/dist/phases/transforms/methods/StackTransform.js +29 -0
- package/dist/phases/transforms/methods/WindowTransform.d.ts +8 -0
- package/dist/phases/transforms/methods/WindowTransform.js +23 -0
- package/dist/plots/area/Plot.svelte +42 -0
- package/dist/plots/{heatmap/ValueLabels.svelte.d.ts → area/Plot.svelte.d.ts} +8 -16
- package/dist/plots/area/defaults.d.ts +4 -0
- package/dist/plots/area/defaults.js +21 -0
- package/dist/plots/area/markers.d.ts +14 -0
- package/dist/plots/area/markers.js +39 -0
- package/dist/plots/bar/Plot.svelte +33 -438
- package/dist/plots/bar/Plot.svelte.d.ts +5 -8
- package/dist/plots/bar/defaults.d.ts +9 -0
- package/dist/plots/bar/defaults.js +88 -0
- package/dist/plots/bar/markers.d.ts +45 -0
- package/dist/plots/bar/markers.js +233 -0
- package/dist/plots/box/BoxSummaries.d.ts +19 -0
- package/dist/plots/box/BoxSummaries.js +101 -0
- package/dist/plots/box/Plot.svelte +42 -0
- package/dist/plots/box/Plot.svelte.d.ts +26 -0
- package/dist/plots/box/defaults.d.ts +12 -0
- package/dist/plots/box/defaults.js +34 -0
- package/dist/plots/box/markers.d.ts +12 -0
- package/dist/plots/box/markers.js +34 -0
- package/dist/plots/geo/Core.svelte +151 -0
- package/dist/plots/geo/Core.svelte.d.ts +25 -0
- package/dist/plots/geo/Plot.svelte +103 -324
- package/dist/plots/geo/Plot.svelte.d.ts +5 -9
- package/dist/plots/geo/defaults.d.ts +4 -0
- package/dist/plots/geo/defaults.js +16 -0
- package/dist/plots/geo/features.svelte.d.ts +5 -0
- package/dist/plots/geo/features.svelte.js +44 -0
- package/dist/plots/geo/phases/data.d.ts +6 -0
- package/dist/plots/geo/phases/data.js +26 -0
- package/dist/plots/geo/phases/hover.d.ts +9 -0
- package/dist/plots/geo/phases/hover.js +45 -0
- package/dist/plots/geo/phases/markers.d.ts +9 -0
- package/dist/plots/geo/phases/markers.js +75 -0
- package/dist/plots/geo/phases/scales.d.ts +10 -0
- package/dist/plots/geo/phases/scales.js +85 -0
- package/dist/plots/geo/phases/tooltip.d.ts +3 -0
- package/dist/plots/geo/phases/tooltip.js +5 -0
- package/dist/plots/geo/slices.d.ts +18 -0
- package/dist/plots/geo/slices.js +59 -0
- package/dist/plots/heatmap/Plot.svelte +55 -249
- package/dist/plots/heatmap/Plot.svelte.d.ts +5 -8
- package/dist/plots/heatmap/defaults.d.ts +11 -0
- package/dist/plots/heatmap/defaults.js +91 -0
- package/dist/plots/heatmap/markers.d.ts +17 -0
- package/dist/plots/heatmap/markers.js +142 -0
- package/dist/plots/histogram/Plot.svelte +45 -0
- package/dist/plots/histogram/Plot.svelte.d.ts +26 -0
- package/dist/plots/histogram/defaults.d.ts +9 -0
- package/dist/plots/histogram/defaults.js +87 -0
- package/dist/plots/histogram/markers.d.ts +18 -0
- package/dist/plots/histogram/markers.js +89 -0
- package/dist/plots/line/Plot.svelte +37 -268
- package/dist/plots/line/Plot.svelte.d.ts +3 -7
- package/dist/plots/line/defaults.d.ts +4 -0
- package/dist/plots/line/defaults.js +29 -0
- package/dist/plots/line/markers.d.ts +49 -0
- package/dist/plots/line/markers.js +199 -0
- package/dist/plots/pyramid/Plot.svelte +34 -362
- package/dist/plots/pyramid/Plot.svelte.d.ts +5 -8
- package/dist/plots/pyramid/defaults.d.ts +13 -0
- package/dist/plots/pyramid/defaults.js +87 -0
- package/dist/plots/pyramid/markers.d.ts +21 -0
- package/dist/plots/pyramid/markers.js +156 -0
- package/dist/plots/scatter/Plot.svelte +34 -288
- package/dist/plots/scatter/Plot.svelte.d.ts +5 -8
- package/dist/plots/scatter/defaults.d.ts +4 -0
- package/dist/plots/scatter/defaults.js +80 -0
- package/dist/plots/scatter/markers.d.ts +19 -0
- package/dist/plots/scatter/markers.js +129 -0
- package/dist/plots/utils/ChannelName.d.ts +9 -0
- package/dist/plots/utils/ChannelName.js +14 -0
- package/dist/plots/utils/accessors.d.ts +1 -1
- package/dist/plots/utils/accessors.js +4 -2
- package/dist/plots/utils/gaps.d.ts +14 -19
- package/dist/plots/utils/gaps.js +38 -18
- package/dist/plots/utils/geoAccessors.d.ts +8 -8
- package/dist/plots/utils/geoAccessors.js +16 -12
- package/dist/plots/utils/geoSegments.d.ts +24 -9
- package/dist/plots/utils/geoSegments.js +31 -11
- package/dist/plots/utils/segments.d.ts +5 -16
- package/dist/plots/utils/segments.js +40 -52
- package/dist/plots/utils/tiles.d.ts +9 -9
- package/dist/plots/utils/tiles.js +35 -25
- package/dist/plots/utils/topojson.d.ts +1 -1
- package/dist/plots/utils/topojson.js +3 -3
- package/dist/stores/device.js +2 -4
- package/dist/types/configuration/styling.d.ts +174 -27
- package/dist/types/layout/box.d.ts +24 -0
- package/dist/types/layout/composer.d.ts +39 -0
- package/dist/types/layout/coordinates.d.ts +14 -14
- package/dist/types/layout/facet.d.ts +44 -22
- package/dist/types/layout/figure.d.ts +7 -0
- package/dist/types/layout/geometry.d.ts +6 -2
- package/dist/types/layout/grid.d.ts +66 -0
- package/dist/types/layout/hover.d.ts +48 -0
- package/dist/types/layout/legend.d.ts +256 -55
- package/dist/types/layout/mapping.d.ts +68 -0
- package/dist/types/layout/plot.d.ts +41 -0
- package/dist/types/layout/scales.d.ts +108 -24
- package/dist/types/layout/scales.js +19 -1
- package/dist/types/layout/statistics/bollinger.d.ts +18 -0
- package/dist/types/layout/statistics/box.d.ts +8 -0
- package/dist/types/layout/statistics/box.js +1 -0
- package/dist/types/layout/statistics/density.d.ts +27 -0
- package/dist/types/layout/statistics/density.js +1 -0
- package/dist/types/layout/statistics/index.d.ts +46 -0
- package/dist/types/layout/statistics/index.js +1 -0
- package/dist/types/layout/statistics/movingAverage.d.ts +12 -0
- package/dist/types/layout/statistics/movingAverage.js +1 -0
- package/dist/types/layout/statistics/regression.d.ts +20 -0
- package/dist/types/layout/statistics/regression.js +1 -0
- package/dist/types/layout/styles.d.ts +24 -35
- package/dist/types/layout/timeline.d.ts +62 -6
- package/dist/types/layout/tooltip.d.ts +7 -85
- package/dist/types/markers/all.d.ts +3 -4
- package/dist/types/markers/axis/area.d.ts +12 -0
- package/dist/types/markers/axis/area.js +1 -0
- package/dist/types/markers/axis/arrow.d.ts +15 -0
- package/dist/types/markers/axis/arrow.js +1 -0
- package/dist/types/markers/axis/axisBasedMarkersConfig.d.ts +29 -0
- package/dist/types/markers/axis/axisBasedMarkersConfig.js +1 -0
- package/dist/types/markers/axis/bar.d.ts +18 -0
- package/dist/types/markers/axis/bar.js +1 -0
- package/dist/types/markers/axis/bollinger.d.ts +6 -0
- package/dist/types/markers/axis/bollinger.js +1 -0
- package/dist/types/markers/axis/box.d.ts +14 -0
- package/dist/types/markers/axis/box.js +1 -0
- package/dist/types/markers/axis/brush.d.ts +28 -0
- package/dist/types/markers/axis/brush.js +1 -0
- package/dist/types/markers/axis/cell.d.ts +9 -0
- package/dist/types/markers/axis/cell.js +1 -0
- package/dist/types/markers/axis/component.d.ts +9 -0
- package/dist/types/markers/axis/component.js +1 -0
- package/dist/types/markers/axis/curveName.d.ts +2 -0
- package/dist/types/markers/axis/curveName.js +1 -0
- package/dist/types/markers/axis/delaunayLink.d.ts +7 -0
- package/dist/types/markers/axis/delaunayLink.js +1 -0
- package/dist/types/markers/axis/delaunayMesh.d.ts +7 -0
- package/dist/types/markers/axis/delaunayMesh.js +1 -0
- package/dist/types/markers/axis/delta.d.ts +27 -0
- package/dist/types/markers/axis/delta.js +1 -0
- package/dist/types/markers/axis/density.d.ts +12 -0
- package/dist/types/markers/axis/density.js +1 -0
- package/dist/types/markers/axis/difference.d.ts +12 -0
- package/dist/types/markers/axis/difference.js +1 -0
- package/dist/types/markers/axis/hover.d.ts +21 -0
- package/dist/types/markers/axis/hover.js +1 -0
- package/dist/types/markers/axis/hull.d.ts +7 -0
- package/dist/types/markers/axis/hull.js +1 -0
- package/dist/types/markers/axis/image.d.ts +12 -0
- package/dist/types/markers/axis/image.js +1 -0
- package/dist/types/markers/axis/line.d.ts +7 -0
- package/dist/types/markers/axis/line.js +1 -0
- package/dist/types/markers/axis/raster.d.ts +18 -0
- package/dist/types/markers/axis/raster.js +1 -0
- package/dist/types/markers/axis/rect.d.ts +15 -0
- package/dist/types/markers/axis/rect.js +1 -0
- package/dist/types/markers/axis/regression.d.ts +6 -0
- package/dist/types/markers/axis/regression.js +1 -0
- package/dist/types/markers/axis/rule.d.ts +15 -0
- package/dist/types/markers/axis/rule.js +1 -0
- package/dist/types/markers/axis/tick.d.ts +8 -0
- package/dist/types/markers/axis/tick.js +1 -0
- package/dist/types/markers/axis/trail.d.ts +14 -0
- package/dist/types/markers/axis/trail.js +1 -0
- package/dist/types/markers/axis/voronoi.d.ts +7 -0
- package/dist/types/markers/axis/voronoi.js +1 -0
- package/dist/types/markers/axis/voronoiMesh.d.ts +7 -0
- package/dist/types/markers/axis/voronoiMesh.js +1 -0
- package/dist/types/markers/axis/waffle.d.ts +13 -0
- package/dist/types/markers/axis/waffle.js +1 -0
- package/dist/types/markers/basic/basicMarkersConfig.d.ts +4 -0
- package/dist/types/markers/basic/basicMarkersConfig.js +1 -0
- package/dist/types/markers/basic/dot.d.ts +9 -0
- package/dist/types/markers/basic/dot.js +1 -0
- package/dist/types/markers/basic/text.d.ts +60 -0
- package/dist/types/markers/basic/text.js +1 -0
- package/dist/types/markers/basic.d.ts +4 -0
- package/dist/types/markers/basic.js +1 -0
- package/dist/types/markers/channels/commonMarkerConfig.d.ts +26 -0
- package/dist/types/markers/channels/commonMarkerConfig.js +1 -0
- package/dist/types/markers/channels/commonMarkerConfigWithArea.d.ts +6 -0
- package/dist/types/markers/channels/commonMarkerConfigWithArea.js +1 -0
- package/dist/types/markers/channels/commonMarkerConfigWithColor.d.ts +5 -0
- package/dist/types/markers/channels/commonMarkerConfigWithColor.js +1 -0
- package/dist/types/markers/channels/commonMarkerConfigWithInterval.d.ts +9 -0
- package/dist/types/markers/channels/commonMarkerConfigWithInterval.js +1 -0
- package/dist/types/markers/channels/commonMarkerConfigWithRadius.d.ts +5 -0
- package/dist/types/markers/channels/commonMarkerConfigWithRadius.js +1 -0
- package/dist/types/markers/channels/commonMarkerConfigWithSymbol.d.ts +5 -0
- package/dist/types/markers/channels/commonMarkerConfigWithSymbol.js +1 -0
- package/dist/types/markers/channels/commonMarkerConfigWithWeight.d.ts +5 -0
- package/dist/types/markers/channels/commonMarkerConfigWithWeight.js +1 -0
- package/dist/types/markers/common.d.ts +30 -103
- package/dist/types/markers/common.js +29 -1
- package/dist/types/markers/geo/contour.d.ts +27 -0
- package/dist/types/markers/geo/contour.js +1 -0
- package/dist/types/markers/geo/features.d.ts +12 -0
- package/dist/types/markers/geo/features.js +1 -0
- package/dist/types/markers/geo/geoComponent.d.ts +7 -0
- package/dist/types/markers/geo/geoComponent.js +1 -0
- package/dist/types/markers/geo/geoHover.d.ts +6 -0
- package/dist/types/markers/geo/geoHover.js +1 -0
- package/dist/types/markers/geo/geoMarkersConfig.d.ts +11 -0
- package/dist/types/markers/geo/geoMarkersConfig.js +1 -0
- package/dist/types/markers/geo/graticule.d.ts +11 -0
- package/dist/types/markers/geo/graticule.js +1 -0
- package/dist/types/markers/geo/inset.d.ts +50 -0
- package/dist/types/markers/geo/inset.js +1 -0
- package/dist/types/markers/geo/link.d.ts +13 -0
- package/dist/types/markers/geo/link.js +1 -0
- package/dist/types/markers/geo/sphere.d.ts +11 -0
- package/dist/types/markers/geo/sphere.js +1 -0
- package/dist/types/markers/geo/vector.d.ts +17 -0
- package/dist/types/markers/geo/vector.js +1 -0
- package/dist/types/markers/geo.d.ts +10 -212
- package/dist/types/markers/geo.js +10 -1
- package/dist/types/markers/traits.d.ts +22 -0
- package/dist/types/markers/traits.js +1 -0
- package/dist/types/misc/easing.js +1 -0
- package/dist/types/misc/viewport.js +1 -0
- package/dist/types/phases/data/axes.d.ts +18 -0
- package/dist/types/phases/data/axes.js +1 -0
- package/dist/types/phases/data/phase.d.ts +26 -0
- package/dist/types/phases/data/phase.js +2 -0
- package/dist/types/phases/facet/phase.d.ts +18 -0
- package/dist/types/phases/facet/phase.js +1 -0
- package/dist/types/phases/hover/phase.d.ts +40 -0
- package/dist/types/phases/hover/phase.js +1 -0
- package/dist/types/phases/index.d.ts +14 -0
- package/dist/types/phases/index.js +1 -0
- package/dist/types/phases/kind.d.ts +59 -0
- package/dist/types/phases/kind.js +1 -0
- package/dist/types/phases/mapping/phase.d.ts +5 -0
- package/dist/types/phases/mapping/phase.js +1 -0
- package/dist/types/phases/markers/phase.d.ts +13 -0
- package/dist/types/phases/markers/phase.js +1 -0
- package/dist/types/phases/pipeline.d.ts +10 -0
- package/dist/types/phases/pipeline.js +1 -0
- package/dist/types/phases/scales/phase.d.ts +26 -0
- package/dist/types/phases/scales/phase.js +1 -0
- package/dist/types/phases/sharedScales/phase.d.ts +12 -0
- package/dist/types/phases/sharedScales/phase.js +1 -0
- package/dist/types/phases/stage.d.ts +12 -0
- package/dist/types/phases/stage.js +1 -0
- package/dist/types/phases/state.d.ts +76 -0
- package/dist/types/phases/state.js +1 -0
- package/dist/types/phases/statistics/phase.d.ts +43 -0
- package/dist/types/phases/statistics/phase.js +1 -0
- package/dist/types/phases/statistics/source.d.ts +20 -0
- package/dist/types/phases/statistics/source.js +7 -0
- package/dist/types/phases/styles/phase.d.ts +24 -0
- package/dist/types/phases/styles/phase.js +1 -0
- package/dist/types/phases/transforms/adapter.d.ts +27 -0
- package/dist/types/phases/transforms/adapter.js +1 -0
- package/dist/types/phases/transforms/phase.d.ts +50 -0
- package/dist/types/phases/transforms/phase.js +1 -0
- package/dist/types/plots/area/props.d.ts +10 -0
- package/dist/types/plots/area/props.js +1 -0
- package/dist/types/plots/area/state.d.ts +6 -0
- package/dist/types/plots/area/state.js +1 -0
- package/dist/types/plots/bar/props.d.ts +10 -0
- package/dist/types/plots/bar/props.js +1 -0
- package/dist/types/plots/bar/state.d.ts +6 -0
- package/dist/types/plots/bar/state.js +1 -0
- package/dist/types/plots/box/props.d.ts +10 -0
- package/dist/types/plots/box/props.js +1 -0
- package/dist/types/plots/box/state.d.ts +23 -0
- package/dist/types/plots/box/state.js +1 -0
- package/dist/types/plots/camera.d.ts +7 -17
- package/dist/types/plots/constants.d.ts +16 -8
- package/dist/types/plots/data/common.d.ts +25 -17
- package/dist/types/plots/data/geo.d.ts +26 -12
- package/dist/types/plots/gaps.d.ts +19 -38
- package/dist/types/plots/geo/props.d.ts +23 -0
- package/dist/types/plots/geo/props.js +1 -0
- package/dist/types/plots/geo/state.d.ts +82 -0
- package/dist/types/plots/geo/state.js +1 -0
- package/dist/types/plots/heatmap/props.d.ts +10 -0
- package/dist/types/plots/heatmap/props.js +1 -0
- package/dist/types/plots/heatmap/state.d.ts +28 -0
- package/dist/types/plots/heatmap/state.js +1 -0
- package/dist/types/plots/histogram/props.d.ts +18 -0
- package/dist/types/plots/histogram/props.js +1 -0
- package/dist/types/plots/histogram/state.d.ts +6 -0
- package/dist/types/plots/histogram/state.js +1 -0
- package/dist/types/plots/line/props.d.ts +10 -0
- package/dist/types/plots/line/props.js +1 -0
- package/dist/types/plots/line/state.d.ts +9 -0
- package/dist/types/plots/line/state.js +1 -0
- package/dist/types/plots/props.d.ts +145 -35
- package/dist/types/plots/pyramid/props.d.ts +10 -0
- package/dist/types/plots/pyramid/props.js +1 -0
- package/dist/types/plots/pyramid/state.d.ts +16 -0
- package/dist/types/plots/pyramid/state.js +1 -0
- package/dist/types/plots/scatter/props.d.ts +10 -0
- package/dist/types/plots/scatter/props.js +1 -0
- package/dist/types/plots/scatter/state.d.ts +6 -0
- package/dist/types/plots/scatter/state.js +1 -0
- package/dist/types/plots/segments/common.d.ts +1 -1
- package/dist/types/plots/segments/config.d.ts +12 -6
- package/dist/types/plots/styling.d.ts +5 -5
- package/dist/types/transforms/bin.d.ts +84 -0
- package/dist/types/transforms/bin.js +28 -0
- package/dist/types/transforms/bollinger.d.ts +21 -0
- package/dist/types/transforms/bollinger.js +1 -0
- package/dist/types/transforms/common.d.ts +29 -0
- package/dist/types/transforms/common.js +16 -0
- package/dist/types/transforms/density.d.ts +45 -0
- package/dist/types/transforms/density.js +10 -0
- package/dist/types/transforms/filter.d.ts +12 -0
- package/dist/types/transforms/filter.js +14 -0
- package/dist/types/transforms/group.d.ts +70 -0
- package/dist/types/transforms/group.js +8 -0
- package/dist/types/transforms/index.d.ts +36 -0
- package/dist/types/transforms/index.js +1 -0
- package/dist/types/transforms/interval.d.ts +21 -0
- package/dist/types/transforms/interval.js +14 -0
- package/dist/types/transforms/jitter.d.ts +34 -0
- package/dist/types/transforms/jitter.js +1 -0
- package/dist/types/transforms/map.d.ts +24 -0
- package/dist/types/transforms/map.js +1 -0
- package/dist/types/transforms/normalize.d.ts +36 -0
- package/dist/types/transforms/normalize.js +1 -0
- package/dist/types/transforms/select.d.ts +15 -0
- package/dist/types/transforms/select.js +1 -0
- package/dist/types/transforms/shift.d.ts +20 -0
- package/dist/types/transforms/shift.js +1 -0
- package/dist/types/transforms/sort.d.ts +31 -0
- package/dist/types/transforms/sort.js +14 -0
- package/dist/types/transforms/stack.d.ts +64 -0
- package/dist/types/transforms/stack.js +12 -0
- package/dist/types/transforms/window.d.ts +29 -0
- package/dist/types/transforms/window.js +1 -0
- package/dist/utils/ContinuousDomain.d.ts +12 -0
- package/dist/utils/ContinuousDomain.js +19 -0
- package/dist/utils/Interpolation.d.ts +26 -0
- package/dist/utils/Interpolation.js +65 -0
- package/dist/utils/{color.d.ts → color/contrast.d.ts} +0 -5
- package/dist/utils/color/contrast.js +40 -0
- package/dist/utils/color/cssColor.d.ts +4 -0
- package/dist/utils/color/cssColor.js +77 -0
- package/dist/utils/color/index.d.ts +3 -0
- package/dist/utils/color/index.js +3 -0
- package/dist/utils/color/ramp.d.ts +17 -0
- package/dist/utils/color/ramp.js +110 -0
- package/dist/utils/grouping.d.ts +9 -5
- package/dist/utils/grouping.js +19 -10
- package/dist/utils/merge.d.ts +7 -0
- package/dist/utils/merge.js +17 -0
- package/dist/utils/opacity.d.ts +9 -0
- package/dist/utils/opacity.js +38 -0
- package/dist/utils/symbol.d.ts +31 -0
- package/dist/utils/symbol.js +92 -0
- package/docs/architecture.md +137 -0
- package/docs/chrome.md +99 -0
- package/docs/composer.md +69 -0
- package/docs/concepts.md +99 -0
- package/docs/development.md +103 -0
- package/docs/facets.md +123 -0
- package/docs/geo.md +151 -0
- package/docs/getting-started.md +78 -0
- package/docs/legend.md +153 -0
- package/docs/markers.md +117 -0
- package/docs/plots.md +284 -0
- package/docs/scales.md +95 -0
- package/docs/state.md +71 -0
- package/docs/styles-and-segments.md +269 -0
- package/docs/theming.md +226 -0
- package/docs/timeline.md +128 -0
- package/docs/tooltip-and-hover.md +128 -0
- package/docs/transforms-and-statistics.md +118 -0
- package/examples/BarValues.svelte +14 -0
- package/examples/Box.svelte +7 -0
- package/examples/Chrome.svelte +17 -0
- package/examples/ChromeOrder.svelte +18 -0
- package/examples/Composer.svelte +23 -0
- package/examples/CustomTooltip.svelte +44 -0
- package/examples/Facets.svelte +15 -0
- package/examples/FacetsCarousel.svelte +14 -0
- package/examples/FacetsRowsCols.svelte +23 -0
- package/examples/FirstPlot.svelte +7 -0
- package/examples/Gaps.svelte +21 -0
- package/examples/GroupedBars.svelte +15 -0
- package/examples/Heatmap.svelte +7 -0
- package/examples/HeatmapSegments.svelte +26 -0
- package/examples/Histogram.svelte +14 -0
- package/examples/HorizontalBars.svelte +15 -0
- package/examples/LegendReader.svelte +8 -0
- package/examples/LegendSections.svelte +27 -0
- package/examples/LegendToggle.svelte +25 -0
- package/examples/LineByRegion.svelte +18 -0
- package/examples/LineDates.svelte +15 -0
- package/examples/Markers.svelte +27 -0
- package/examples/MovingAverage.svelte +15 -0
- package/examples/Pyramid.svelte +7 -0
- package/examples/Regression.svelte +14 -0
- package/examples/ResponsiveLine.svelte +37 -0
- package/examples/Scales.svelte +26 -0
- package/examples/Scatter.svelte +16 -0
- package/examples/SegmentHighlight.svelte +22 -0
- package/examples/Segments.svelte +25 -0
- package/examples/SegmentsBySeries.svelte +25 -0
- package/examples/StackedArea.svelte +16 -0
- package/examples/StackedBars.svelte +15 -0
- package/examples/TimelinePlayer.svelte +21 -0
- package/examples/TimelineRule.svelte +19 -0
- package/examples/Tooltip.svelte +19 -0
- package/examples/TooltipCard.svelte +86 -0
- package/examples/ValueLabels.svelte +21 -0
- package/examples/data.ts +324 -0
- package/llms-full.txt +142 -0
- package/llms.txt +77 -0
- package/package.json +42 -5
- package/dist/charts/BaseChart.svelte +0 -149
- package/dist/charts/BaseChart.svelte.d.ts +0 -47
- package/dist/charts/bar/Chart.svelte +0 -110
- package/dist/charts/bar/Chart.svelte.d.ts +0 -26
- package/dist/charts/container/ChartContainer.svelte +0 -137
- package/dist/charts/container/ChartContainer.svelte.d.ts +0 -16
- package/dist/charts/heatmap/Chart.svelte +0 -114
- package/dist/charts/line/Chart.svelte +0 -112
- package/dist/charts/line/Chart.svelte.d.ts +0 -26
- package/dist/charts/pyramid/Chart.svelte +0 -134
- package/dist/charts/pyramid/Chart.svelte.d.ts +0 -30
- package/dist/charts/scatter/Chart.svelte +0 -95
- package/dist/charts/scatter/Chart.svelte.d.ts +0 -28
- package/dist/layout/coordinates/margins.d.ts +0 -16
- package/dist/layout/coordinates/margins.js +0 -11
- package/dist/layout/legend/interaction.svelte.d.ts +0 -15
- package/dist/layout/legend/interaction.svelte.js +0 -32
- package/dist/layout/plot/BasePlotLayout.svelte +0 -332
- package/dist/layout/plot/BasePlotLayout.svelte.d.ts +0 -122
- package/dist/layout/plot/margins.d.ts +0 -18
- package/dist/layout/plot/margins.js +0 -15
- package/dist/layout/plot/measureText.d.ts +0 -4
- package/dist/layout/plot/measureText.js +0 -19
- package/dist/layout/scales/buildScale.d.ts +0 -25
- package/dist/layout/scales/buildScale.js +0 -90
- package/dist/layout/scales/niceDomain.d.ts +0 -23
- package/dist/layout/scales/niceDomain.js +0 -59
- package/dist/layout/tooltip/TooltipLayout.svelte +0 -51
- package/dist/layout/tooltip/TooltipLayout.svelte.d.ts +0 -45
- package/dist/layout/tooltip/controller.svelte.d.ts +0 -61
- package/dist/layout/tooltip/controller.svelte.js +0 -173
- package/dist/layout/tooltip/hover.svelte.d.ts +0 -7
- package/dist/layout/tooltip/hover.svelte.js +0 -28
- package/dist/layout/tooltip/resolveTooltipPlacement.d.ts +0 -24
- package/dist/layout/tooltip/resolveTooltipPlacement.js +0 -49
- package/dist/layout/tooltip/utils.d.ts +0 -49
- package/dist/layout/tooltip/utils.js +0 -82
- package/dist/markers/CellMarker.svelte +0 -21
- package/dist/markers/ContourClipMarker.svelte +0 -77
- package/dist/markers/ContourMarker.svelte +0 -28
- package/dist/markers/DeltaMarker.svelte +0 -109
- package/dist/markers/DotMarker.svelte +0 -70
- package/dist/markers/GeoFeaturesMarker.svelte +0 -19
- package/dist/markers/GeoHoverMarker.svelte +0 -25
- package/dist/markers/GraticuleMarker.svelte +0 -18
- package/dist/markers/HoverMarker.svelte +0 -212
- package/dist/markers/LineMarker.svelte +0 -19
- package/dist/markers/LinkMarker.svelte +0 -42
- package/dist/markers/PeakMarker.svelte +0 -80
- package/dist/markers/PeakMarker.svelte.d.ts +0 -13
- package/dist/markers/RuleMarker.svelte +0 -24
- package/dist/markers/SphereMarker.svelte +0 -15
- package/dist/markers/TextMarker.svelte +0 -62
- package/dist/markers/VectorMarker.svelte +0 -20
- package/dist/plots/bar/ValueLabels.svelte +0 -149
- package/dist/plots/bar/ValueLabels.svelte.d.ts +0 -58
- package/dist/plots/bar/buildBarMarkers.d.ts +0 -27
- package/dist/plots/bar/buildBarMarkers.js +0 -151
- package/dist/plots/bar/hoverPoints.d.ts +0 -15
- package/dist/plots/bar/hoverPoints.js +0 -37
- package/dist/plots/bar/layout.svelte.d.ts +0 -42
- package/dist/plots/bar/layout.svelte.js +0 -182
- package/dist/plots/geo/buildGeoMarkers.d.ts +0 -33
- package/dist/plots/geo/buildGeoMarkers.js +0 -47
- package/dist/plots/heatmap/ValueLabels.svelte +0 -56
- package/dist/plots/heatmap/buildCellMarkers.d.ts +0 -21
- package/dist/plots/heatmap/buildCellMarkers.js +0 -25
- package/dist/plots/line/ValueLabels.svelte +0 -269
- package/dist/plots/line/ValueLabels.svelte.d.ts +0 -52
- package/dist/plots/line/buildGapMarkers.d.ts +0 -28
- package/dist/plots/line/buildGapMarkers.js +0 -74
- package/dist/plots/line/buildLineMarkers.d.ts +0 -16
- package/dist/plots/line/buildLineMarkers.js +0 -56
- package/dist/plots/line/valueLabelMargin.d.ts +0 -19
- package/dist/plots/line/valueLabelMargin.js +0 -65
- package/dist/plots/pyramid/ValueLabels.svelte +0 -139
- package/dist/plots/pyramid/ValueLabels.svelte.d.ts +0 -56
- package/dist/plots/pyramid/buildPyramidBarMarkers.d.ts +0 -26
- package/dist/plots/pyramid/buildPyramidBarMarkers.js +0 -72
- package/dist/plots/scatter/ValueLabels.svelte +0 -163
- package/dist/plots/scatter/ValueLabels.svelte.d.ts +0 -52
- package/dist/plots/scatter/buildScatterMarkers.d.ts +0 -12
- package/dist/plots/scatter/buildScatterMarkers.js +0 -36
- package/dist/plots/scatter/resolveRadiusPaddedDomain.d.ts +0 -10
- package/dist/plots/scatter/resolveRadiusPaddedDomain.js +0 -23
- package/dist/plots/utils/categoricalAxisMargin.d.ts +0 -14
- package/dist/plots/utils/categoricalAxisMargin.js +0 -20
- package/dist/plots/utils/declutter.d.ts +0 -120
- package/dist/plots/utils/declutter.js +0 -240
- package/dist/plots/utils/labelOverflow.svelte.d.ts +0 -107
- package/dist/plots/utils/labelOverflow.svelte.js +0 -257
- package/dist/plots/utils/legendDisabled.d.ts +0 -27
- package/dist/plots/utils/legendDisabled.js +0 -68
- package/dist/plots/utils/valueLabelMargin.d.ts +0 -67
- package/dist/plots/utils/valueLabelMargin.js +0 -60
- package/dist/types/charts/common.d.ts +0 -22
- package/dist/types/charts/props.d.ts +0 -50
- package/dist/types/markers/base.d.ts +0 -45
- package/dist/types/markers/line.d.ts +0 -34
- package/dist/types/markers/props.d.ts +0 -11
- package/dist/types/plots/data/scatter.d.ts +0 -13
- package/dist/utils/color.js +0 -141
- package/dist/utils/delta.d.ts +0 -12
- package/dist/utils/delta.js +0 -69
- package/dist/utils/edgeAwareAnchor.d.ts +0 -34
- package/dist/utils/edgeAwareAnchor.js +0 -60
- package/dist/utils/interpolate.d.ts +0 -31
- package/dist/utils/interpolate.js +0 -71
- /package/dist/types/{charts/common.js → layout/box.js} +0 -0
- /package/dist/types/{charts/interpolate.js → layout/composer.js} +0 -0
- /package/dist/types/{charts/props.js → layout/figure.js} +0 -0
- /package/dist/types/{markers/base.js → layout/grid.js} +0 -0
- /package/dist/types/{markers/line.js → layout/hover.js} +0 -0
- /package/dist/types/{markers/props.js → layout/mapping.js} +0 -0
- /package/dist/types/{plots/data/scatter.js → layout/plot.js} +0 -0
- /package/dist/types/{viewport.js → layout/statistics/bollinger.js} +0 -0
- /package/dist/types/{charts/interpolate.d.ts → misc/easing.d.ts} +0 -0
- /package/dist/types/{viewport.d.ts → misc/viewport.d.ts} +0 -0
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { ProcessedPositions } from '../../phases/transforms/ProcessedPositions';
|
|
2
|
+
import { getConfiguration } from '../../configuration/config.svelte';
|
|
3
|
+
import { GAP_KIND, GAP_VALUE, SERIES_ID_KEY } from '../../phases/transforms/TransformsPhase';
|
|
4
|
+
import { seriesIdOf } from '../../utils/grouping';
|
|
5
|
+
import { resolveGapAreaStyle } from '../utils/gaps';
|
|
6
|
+
import { PlotAxes } from '../../phases/data/PlotAxes';
|
|
7
|
+
import { ValueLabels } from '../../layout/styles/ValueLabels';
|
|
8
|
+
const GAP_KINDS = ['start', 'middle', 'end'];
|
|
9
|
+
/**
|
|
10
|
+
* Where a bar plot's bars sit, read off the state its phases leave: each
|
|
11
|
+
* processed row's category and span along the value axis, whether the series
|
|
12
|
+
* stack, and the slice of its category band each series takes when they sit
|
|
13
|
+
* side by side. Slices are fractions of the band, so they hold at any width.
|
|
14
|
+
*/
|
|
15
|
+
export function buildBarGeometry(state, seriesPadding) {
|
|
16
|
+
const valueAxis = PlotAxes.valueOf(state);
|
|
17
|
+
const categoryAxis = PlotAxes.categoryOf(state);
|
|
18
|
+
const domain = state.scales[valueAxis]?.domain;
|
|
19
|
+
// Bars rise from zero, or from the nearest end of a domain that leaves it out.
|
|
20
|
+
const baseline = (() => {
|
|
21
|
+
const lo = Number(domain?.[0]);
|
|
22
|
+
const hi = Number(domain?.[(domain?.length ?? 1) - 1]);
|
|
23
|
+
if (!domain || domain.length < 2 || Number.isNaN(lo) || Number.isNaN(hi))
|
|
24
|
+
return 0;
|
|
25
|
+
const [min, max] = [Math.min(lo, hi), Math.max(lo, hi)];
|
|
26
|
+
return min > 0 ? min : max < 0 ? max : 0;
|
|
27
|
+
})();
|
|
28
|
+
const { stacked, of: spanOf } = ProcessedPositions.span(state.processedData, valueAxis, baseline);
|
|
29
|
+
const position = ProcessedPositions.of(state.processedData, valueAxis);
|
|
30
|
+
const categoryOf = (row) => position[categoryAxis](row);
|
|
31
|
+
const names = [...new Set((state.groupedSeries ?? []).map((g) => g.series.name))];
|
|
32
|
+
// A lone series, or a stack, fills its whole band: there's nothing to set side by side.
|
|
33
|
+
const sideBySide = !stacked && names.length > 1;
|
|
34
|
+
const gap = Math.max(0, Math.min(1, seriesPadding));
|
|
35
|
+
/** A series' slice of the band, `undefined` while it takes the whole of it. */
|
|
36
|
+
const sliceOf = (name) => {
|
|
37
|
+
if (!sideBySide)
|
|
38
|
+
return undefined;
|
|
39
|
+
const index = names.indexOf(name);
|
|
40
|
+
const width = 1 / names.length;
|
|
41
|
+
const margin = (gap * width) / 2;
|
|
42
|
+
return {
|
|
43
|
+
start: index * width + margin,
|
|
44
|
+
end: (names.length - 1 - index) * width + margin
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
return { stacked, baseline, spanOf, categoryOf, sliceOf };
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* BarPlot's invisible `role: 'hitArea'` markers - one per hover candidate: a
|
|
51
|
+
* band across the whole plot along the value axis (full height for vertical
|
|
52
|
+
* bars, full width for horizontal ones), over its category, or its series'
|
|
53
|
+
* slice of it. The pointer needn't be over the visible bar. They drive the
|
|
54
|
+
* plot's hover when it is active.
|
|
55
|
+
*/
|
|
56
|
+
export function buildHitAreas(state,
|
|
57
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
58
|
+
hover, ctx) {
|
|
59
|
+
const { categoryOf, sliceOf } = buildBarGeometry(state, ctx.cfg.bar.seriesPadding);
|
|
60
|
+
const isHorizontal = state.axes?.isHorizontal ?? false;
|
|
61
|
+
return hover.points.map(({ row, series }) => {
|
|
62
|
+
const slice = series === undefined ? undefined : sliceOf(series);
|
|
63
|
+
return {
|
|
64
|
+
type: 'bar',
|
|
65
|
+
role: 'hitArea',
|
|
66
|
+
isHorizontal,
|
|
67
|
+
data: [row],
|
|
68
|
+
category: categoryOf(row),
|
|
69
|
+
hover: hover.active,
|
|
70
|
+
...(slice
|
|
71
|
+
? isHorizontal
|
|
72
|
+
? { insetTop: slice.start, insetBottom: slice.end }
|
|
73
|
+
: { insetLeft: slice.start, insetRight: slice.end }
|
|
74
|
+
: {})
|
|
75
|
+
};
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* BarPlot's `styles.values` as one `'text'` marker per series, over the same
|
|
80
|
+
* processed rows its bars draw (gap rows never get a label). `anchor` places
|
|
81
|
+
* each label along its bar: past its top (`'outside'`), just inside it
|
|
82
|
+
* (`'start'`), at its base (`'end'`), or centred (`'middle'`); a stacked bar's
|
|
83
|
+
* label always sits at the middle of its own span. A grouped bar's label
|
|
84
|
+
* shifts with its series' slice of the band.
|
|
85
|
+
*/
|
|
86
|
+
export function buildValueLabels(labels, state, ctx) {
|
|
87
|
+
const { processedData } = state;
|
|
88
|
+
const isHorizontal = state.axes?.isHorizontal ?? false;
|
|
89
|
+
if (!processedData)
|
|
90
|
+
return [];
|
|
91
|
+
const geometry = buildBarGeometry(state, ctx.cfg.bar.seriesPadding);
|
|
92
|
+
const { font, anchor, format } = labels;
|
|
93
|
+
const valueOf = ValueLabels.valueOf(state);
|
|
94
|
+
const top = (d) => geometry.spanOf(d)?.[1] ?? 0;
|
|
95
|
+
const position = geometry.stacked
|
|
96
|
+
? (d) => {
|
|
97
|
+
const [from, to] = geometry.spanOf(d) ?? [0, 0];
|
|
98
|
+
return (from + to) / 2;
|
|
99
|
+
}
|
|
100
|
+
: anchor === 'middle' && !isHorizontal
|
|
101
|
+
? (d) => top(d) / 2
|
|
102
|
+
: anchor === 'end'
|
|
103
|
+
? () => 0
|
|
104
|
+
: top;
|
|
105
|
+
// Outward from the bar's top along the value axis: up for a vertical bar, right for a horizontal one.
|
|
106
|
+
const outward = anchor === 'outside' ? 6 : anchor === 'start' ? -4 : anchor === 'end' ? 4 : 0;
|
|
107
|
+
const textAnchor = labels.textAnchor ??
|
|
108
|
+
(isHorizontal
|
|
109
|
+
? anchor === 'outside' || anchor === 'end'
|
|
110
|
+
? 'start'
|
|
111
|
+
: anchor === 'start'
|
|
112
|
+
? 'end'
|
|
113
|
+
: 'middle'
|
|
114
|
+
: 'middle');
|
|
115
|
+
const lineAnchor = font?.lineAnchor ??
|
|
116
|
+
(isHorizontal
|
|
117
|
+
? 'middle'
|
|
118
|
+
: anchor === 'outside' || anchor === 'end'
|
|
119
|
+
? 'bottom'
|
|
120
|
+
: anchor === 'start'
|
|
121
|
+
? 'top'
|
|
122
|
+
: 'middle');
|
|
123
|
+
const labelled = processedData.data.filter((d) => d[GAP_VALUE] === undefined && geometry.spanOf(d) !== undefined);
|
|
124
|
+
return (state.resolvedSeries ?? []).flatMap((s) => {
|
|
125
|
+
const data = labelled.filter((d) => d[SERIES_ID_KEY] === seriesIdOf(s));
|
|
126
|
+
if (data.length === 0)
|
|
127
|
+
return [];
|
|
128
|
+
return [
|
|
129
|
+
{
|
|
130
|
+
type: 'text',
|
|
131
|
+
data,
|
|
132
|
+
...(isHorizontal
|
|
133
|
+
? { x: position, y: geometry.categoryOf }
|
|
134
|
+
: { x: geometry.categoryOf, y: position }),
|
|
135
|
+
bandSlice: geometry.sliceOf(s.name),
|
|
136
|
+
text: (d) => format(Number(valueOf(d)), s.name),
|
|
137
|
+
styles: {
|
|
138
|
+
...font,
|
|
139
|
+
fill: font?.fill ?? ctx.cfg.axis.color,
|
|
140
|
+
fontSize: font?.fontSize ?? 12,
|
|
141
|
+
dx: font?.dx ?? (isHorizontal ? outward : 0),
|
|
142
|
+
dy: font?.dy ?? (isHorizontal ? 0 : -outward),
|
|
143
|
+
textAnchor,
|
|
144
|
+
lineAnchor
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
];
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* BarPlot's "markers" phase: visible `role: 'segment'` bars - real data plus
|
|
152
|
+
* gap fills - drawing the rows the "transforms" phase left, prepended onto
|
|
153
|
+
* whatever the "statistics" phase already put in `state.markers`, and its
|
|
154
|
+
* value labels on top of everything.
|
|
155
|
+
*/
|
|
156
|
+
export function buildMarks(state, ctx) {
|
|
157
|
+
const { gapFillMaps, colorForSeries, processedData } = state;
|
|
158
|
+
const isHorizontal = state.axes?.isHorizontal ?? false;
|
|
159
|
+
const [categoryAxis, valueAxis] = isHorizontal ? ['y', 'x'] : ['x', 'y'];
|
|
160
|
+
const geometry = buildBarGeometry(state, ctx.cfg.bar.seriesPadding);
|
|
161
|
+
const { channels } = processedData;
|
|
162
|
+
const gapDefaults = getConfiguration().bar.gap;
|
|
163
|
+
// Forwarded raw when the transforms left a plain channel (a field key keeps
|
|
164
|
+
// feeding svelteplot's axis-title inference), read through the geometry otherwise.
|
|
165
|
+
const category = (channels[categoryAxis] ?? geometry.categoryOf);
|
|
166
|
+
const bottom = (row) => geometry.spanOf(row)?.[0] ?? geometry.baseline;
|
|
167
|
+
const top = (row) => geometry.spanOf(row)?.[1] ?? geometry.baseline;
|
|
168
|
+
// A gap-filled row reads its value through the processed value channel, which
|
|
169
|
+
// falls back to the filled value; a real row through its own series' one,
|
|
170
|
+
// which stays a field key whenever the plot has no transforms.
|
|
171
|
+
const valueOf = (channel) => (geometry.stacked || channel === undefined ? top : channel);
|
|
172
|
+
const gapValue = valueOf(channels[valueAxis]);
|
|
173
|
+
function makeMarker(data, slice, value, styles) {
|
|
174
|
+
if (data.length === 0)
|
|
175
|
+
return null;
|
|
176
|
+
const from = (geometry.stacked ? bottom : geometry.baseline);
|
|
177
|
+
const marker = {
|
|
178
|
+
type: 'bar',
|
|
179
|
+
role: 'segment',
|
|
180
|
+
isHorizontal,
|
|
181
|
+
data,
|
|
182
|
+
styles,
|
|
183
|
+
...(isHorizontal
|
|
184
|
+
? { y: category, x1: from, x2: value }
|
|
185
|
+
: { x: category, y1: from, y2: value })
|
|
186
|
+
};
|
|
187
|
+
if (slice) {
|
|
188
|
+
if (isHorizontal) {
|
|
189
|
+
marker.insetTop = slice.start;
|
|
190
|
+
marker.insetBottom = slice.end;
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
marker.insetLeft = slice.start;
|
|
194
|
+
marker.insetRight = slice.end;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return marker;
|
|
198
|
+
}
|
|
199
|
+
const isReal = (row) => row[GAP_VALUE] === undefined && geometry.spanOf(row) !== undefined;
|
|
200
|
+
const segmentMarkers = [];
|
|
201
|
+
(state.processedGroups ?? []).forEach((group) => {
|
|
202
|
+
const name = group.series.name;
|
|
203
|
+
const slice = geometry.sliceOf(name);
|
|
204
|
+
const defaultColor = colorForSeries(name);
|
|
205
|
+
const disabledFill = ctx.interaction?.fillFor(name);
|
|
206
|
+
for (const seg of group.visualSegments) {
|
|
207
|
+
const marker = makeMarker(seg.data.filter(isReal), slice, valueOf(group.series[valueAxis]), {
|
|
208
|
+
fill: disabledFill?.fill ?? seg.styles.fill ?? defaultColor,
|
|
209
|
+
fillOpacity: disabledFill?.fillOpacity ?? seg.styles.fillOpacity ?? 1
|
|
210
|
+
});
|
|
211
|
+
if (marker)
|
|
212
|
+
segmentMarkers.push(marker);
|
|
213
|
+
}
|
|
214
|
+
const id = seriesIdOf(group.series);
|
|
215
|
+
const fills = [...(gapFillMaps.get(id)?.values() ?? [])];
|
|
216
|
+
const seriesRows = processedData.data.filter((row) => row[SERIES_ID_KEY] === id);
|
|
217
|
+
for (const kind of GAP_KINDS) {
|
|
218
|
+
const fill = fills.find((f) => f.kind === kind);
|
|
219
|
+
if (!fill)
|
|
220
|
+
continue;
|
|
221
|
+
const base = resolveGapAreaStyle(fill.style, defaultColor, gapDefaults);
|
|
222
|
+
const rows = seriesRows.filter((row) => row[GAP_KIND] === kind && geometry.spanOf(row) !== undefined);
|
|
223
|
+
const marker = makeMarker(rows, slice, gapValue, {
|
|
224
|
+
...base,
|
|
225
|
+
fill: disabledFill?.fill ?? base.fill,
|
|
226
|
+
fillOpacity: disabledFill?.fillOpacity ?? base.fillOpacity
|
|
227
|
+
});
|
|
228
|
+
if (marker)
|
|
229
|
+
segmentMarkers.push(marker);
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
return segmentMarkers;
|
|
233
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { HoverPosition } from '../../types/phases';
|
|
2
|
+
import type { BoxPlotState, BoxSummaryRow } from '../../types/plots/box/state';
|
|
3
|
+
/**
|
|
4
|
+
* The boxes a box plot draws, one summary row per series, category and facet
|
|
5
|
+
* panel - the same quartiles and whiskers svelteplot's `BoxX`/`BoxY` compute,
|
|
6
|
+
* so its hover and tooltip read a box rather than every value inside it.
|
|
7
|
+
*/
|
|
8
|
+
export declare class BoxSummaries {
|
|
9
|
+
/** One summary per box, in the order the processed rows first reach it. */
|
|
10
|
+
static of<TData extends Record<string, unknown>>(state: BoxPlotState<TData>): BoxSummaryRow[];
|
|
11
|
+
/** Where a box's summary sits for hover: at its category, level with its median. */
|
|
12
|
+
static position<TData extends Record<string, unknown>>(state: BoxPlotState<TData>): HoverPosition;
|
|
13
|
+
/**
|
|
14
|
+
* How a hovered box reads by default: its series, when the plot groups its
|
|
15
|
+
* rows; its category; then its five numbers, highest first, and how many
|
|
16
|
+
* values fall past the whiskers.
|
|
17
|
+
*/
|
|
18
|
+
static format<TData extends Record<string, unknown>>(state: BoxPlotState<TData>): (row: BoxSummaryRow) => string;
|
|
19
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { ProcessedPositions } from '../../phases/transforms/ProcessedPositions';
|
|
2
|
+
import { quantile } from 'd3-array';
|
|
3
|
+
import { SERIES_ID_KEY, SERIES_KEY } from '../../phases/transforms/TransformsPhase';
|
|
4
|
+
import { PANEL_KEY } from '../../phases/facet/FacetPanels';
|
|
5
|
+
import { PlotAxes } from '../../phases/data/PlotAxes';
|
|
6
|
+
import { TooltipState } from '../../layout/tooltip/TooltipState.svelte';
|
|
7
|
+
import { isGapValue } from '../utils/gaps';
|
|
8
|
+
/** The whiskers reach this many interquartile ranges past the box, as svelteplot draws them. */
|
|
9
|
+
const WHISKER_IQR = 1.5;
|
|
10
|
+
/** A summary value as a tooltip shows it: at most two decimals. */
|
|
11
|
+
const round = (value) => String(Math.round(value * 100) / 100);
|
|
12
|
+
/**
|
|
13
|
+
* The boxes a box plot draws, one summary row per series, category and facet
|
|
14
|
+
* panel - the same quartiles and whiskers svelteplot's `BoxX`/`BoxY` compute,
|
|
15
|
+
* so its hover and tooltip read a box rather than every value inside it.
|
|
16
|
+
*/
|
|
17
|
+
export class BoxSummaries {
|
|
18
|
+
/** One summary per box, in the order the processed rows first reach it. */
|
|
19
|
+
static of(state) {
|
|
20
|
+
const processed = state.processedData;
|
|
21
|
+
if (!processed?.data.length)
|
|
22
|
+
return [];
|
|
23
|
+
const valueAxis = PlotAxes.valueOf(state);
|
|
24
|
+
const categoryAxis = PlotAxes.categoryOf(state);
|
|
25
|
+
const position = ProcessedPositions.of(processed, valueAxis);
|
|
26
|
+
const valueOf = position[valueAxis];
|
|
27
|
+
const categoryOf = position[categoryAxis];
|
|
28
|
+
const categoryField = processed.channels[categoryAxis];
|
|
29
|
+
const boxes = new Map();
|
|
30
|
+
for (const row of processed.data) {
|
|
31
|
+
const value = valueOf(row);
|
|
32
|
+
if (isGapValue(value))
|
|
33
|
+
continue;
|
|
34
|
+
const n = Number(value);
|
|
35
|
+
if (!Number.isFinite(n))
|
|
36
|
+
continue;
|
|
37
|
+
const key = JSON.stringify([
|
|
38
|
+
row[SERIES_ID_KEY],
|
|
39
|
+
row[PANEL_KEY] ?? null,
|
|
40
|
+
String(categoryOf(row))
|
|
41
|
+
]);
|
|
42
|
+
const box = boxes.get(key);
|
|
43
|
+
if (box)
|
|
44
|
+
box.values.push(n);
|
|
45
|
+
else
|
|
46
|
+
boxes.set(key, { first: row, values: [n] });
|
|
47
|
+
}
|
|
48
|
+
return [...boxes.values()].map(({ first, values }) => {
|
|
49
|
+
const sorted = values.sort((a, b) => a - b);
|
|
50
|
+
const p25 = quantile(sorted, 0.25);
|
|
51
|
+
const median = quantile(sorted, 0.5);
|
|
52
|
+
const p75 = quantile(sorted, 0.75);
|
|
53
|
+
const reach = (p75 - p25) * WHISKER_IQR;
|
|
54
|
+
const inside = sorted.filter((v) => v >= p25 - reach && v <= p75 + reach);
|
|
55
|
+
const category = categoryOf(first);
|
|
56
|
+
return {
|
|
57
|
+
...(typeof categoryField === 'string' ? { [categoryField]: category } : {}),
|
|
58
|
+
[SERIES_KEY]: first[SERIES_KEY],
|
|
59
|
+
[SERIES_ID_KEY]: first[SERIES_ID_KEY],
|
|
60
|
+
...(first[PANEL_KEY] !== undefined ? { [PANEL_KEY]: first[PANEL_KEY] } : {}),
|
|
61
|
+
category,
|
|
62
|
+
min: inside[0] ?? p25,
|
|
63
|
+
p25,
|
|
64
|
+
median,
|
|
65
|
+
p75,
|
|
66
|
+
max: inside.at(-1) ?? p75,
|
|
67
|
+
count: sorted.length,
|
|
68
|
+
outliers: sorted.filter((v) => v < p25 - reach || v > p75 + reach)
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
/** Where a box's summary sits for hover: at its category, level with its median. */
|
|
73
|
+
static position(state) {
|
|
74
|
+
const valueAxis = PlotAxes.valueOf(state);
|
|
75
|
+
const at = {
|
|
76
|
+
[valueAxis]: (row) => row.median,
|
|
77
|
+
[PlotAxes.other(valueAxis)]: (row) => row.category
|
|
78
|
+
};
|
|
79
|
+
return at;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* How a hovered box reads by default: its series, when the plot groups its
|
|
83
|
+
* rows; its category; then its five numbers, highest first, and how many
|
|
84
|
+
* values fall past the whiskers.
|
|
85
|
+
*/
|
|
86
|
+
static format(state) {
|
|
87
|
+
const grouped = state.channels?.grouping !== undefined;
|
|
88
|
+
return (row) => {
|
|
89
|
+
const lines = grouped ? [String(row[SERIES_KEY])] : [];
|
|
90
|
+
lines.push(TooltipState.value(row.category));
|
|
91
|
+
lines.push(`max: ${round(row.max)}`);
|
|
92
|
+
lines.push(`p75: ${round(row.p75)}`);
|
|
93
|
+
lines.push(`median: ${round(row.median)}`);
|
|
94
|
+
lines.push(`p25: ${round(row.p25)}`);
|
|
95
|
+
lines.push(`min: ${round(row.min)}`);
|
|
96
|
+
if (row.outliers.length)
|
|
97
|
+
lines.push(`outliers: ${row.outliers.length}`);
|
|
98
|
+
return lines.join('\n');
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<script lang="ts" generics="TData extends Record<string, unknown>">
|
|
2
|
+
import Plot from '../../layout/plot/Plot.svelte';
|
|
3
|
+
import { buildBoxDefaults } from './defaults';
|
|
4
|
+
import type { BoxPlotProps, BoxPlotCoreProps } from '../../types/plots/box/props';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* A box plot: the distribution of each series' values per category - quartiles, whiskers and outliers - one box per category, upright, or sideways when the categories run along `y`. Draws from pre-built `series` or flat `data` rows.
|
|
8
|
+
* Optional chrome (`title`, `subtitle`, `caption`, `header`, `footer`,
|
|
9
|
+
* `legend`) frames it; `timeline` and `facet` slice its `data` rows.
|
|
10
|
+
* `margins` is bindable: it reports the margin the plot settled on.
|
|
11
|
+
*/
|
|
12
|
+
let {
|
|
13
|
+
title,
|
|
14
|
+
subtitle,
|
|
15
|
+
caption,
|
|
16
|
+
header,
|
|
17
|
+
footer,
|
|
18
|
+
legend,
|
|
19
|
+
order,
|
|
20
|
+
timeline,
|
|
21
|
+
facet,
|
|
22
|
+
tooltip,
|
|
23
|
+
margins = $bindable(),
|
|
24
|
+
...core
|
|
25
|
+
}: BoxPlotProps<TData> = $props();
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<Plot
|
|
29
|
+
core={core as BoxPlotCoreProps<TData>}
|
|
30
|
+
defaults={buildBoxDefaults}
|
|
31
|
+
bind:margins
|
|
32
|
+
{title}
|
|
33
|
+
{subtitle}
|
|
34
|
+
{caption}
|
|
35
|
+
{header}
|
|
36
|
+
{footer}
|
|
37
|
+
{legend}
|
|
38
|
+
{order}
|
|
39
|
+
{timeline}
|
|
40
|
+
{facet}
|
|
41
|
+
{tooltip}
|
|
42
|
+
/>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import Plot from '../../layout/plot/Plot.svelte';
|
|
2
|
+
import type { BoxPlotProps } from '../../types/plots/box/props';
|
|
3
|
+
declare function $$render<TData extends Record<string, unknown>>(): {
|
|
4
|
+
props: BoxPlotProps<TData>;
|
|
5
|
+
exports: {};
|
|
6
|
+
bindings: "margins";
|
|
7
|
+
slots: {};
|
|
8
|
+
events: {};
|
|
9
|
+
};
|
|
10
|
+
declare class __sveltets_Render<TData extends Record<string, unknown>> {
|
|
11
|
+
props(): ReturnType<typeof $$render<TData>>['props'];
|
|
12
|
+
events(): ReturnType<typeof $$render<TData>>['events'];
|
|
13
|
+
slots(): ReturnType<typeof $$render<TData>>['slots'];
|
|
14
|
+
bindings(): "margins";
|
|
15
|
+
exports(): {};
|
|
16
|
+
}
|
|
17
|
+
interface $$IsomorphicComponent {
|
|
18
|
+
new <TData extends Record<string, unknown>>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TData>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TData>['props']>, ReturnType<__sveltets_Render<TData>['events']>, ReturnType<__sveltets_Render<TData>['slots']>> & {
|
|
19
|
+
$$bindings?: ReturnType<__sveltets_Render<TData>['bindings']>;
|
|
20
|
+
} & ReturnType<__sveltets_Render<TData>['exports']>;
|
|
21
|
+
<TData extends Record<string, unknown>>(internal: unknown, props: ReturnType<__sveltets_Render<TData>['props']> & {}): ReturnType<__sveltets_Render<TData>['exports']>;
|
|
22
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
23
|
+
}
|
|
24
|
+
declare const Plot: $$IsomorphicComponent;
|
|
25
|
+
type Plot<TData extends Record<string, unknown>> = InstanceType<typeof Plot<TData>>;
|
|
26
|
+
export default Plot;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AxisPlotDefaults } from '../../types/phases';
|
|
2
|
+
import type { BoxPlotState, BoxPlotCtx } from '../../types/plots/box/state';
|
|
3
|
+
/**
|
|
4
|
+
* BoxPlot on the shared pipeline: one box per category of each series along
|
|
5
|
+
* one category axis - `x`, or `y` for horizontal boxes, as the "data" phase
|
|
6
|
+
* reads it off the values, in the order the data gives them - with its own
|
|
7
|
+
* band padding and markers. The value
|
|
8
|
+
* axis fits the values, without reaching for zero. Its plot defaults to:
|
|
9
|
+
* hover along the category axis, over one summary per box rather than every
|
|
10
|
+
* value inside it.
|
|
11
|
+
*/
|
|
12
|
+
export declare function buildBoxDefaults<TData extends Record<string, unknown>>(): AxisPlotDefaults<BoxPlotState<TData>, BoxPlotCtx>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { buildMarks } from './markers';
|
|
2
|
+
import { BoxSummaries } from './BoxSummaries';
|
|
3
|
+
import { TooltipState } from '../../layout/tooltip/TooltipState.svelte';
|
|
4
|
+
/**
|
|
5
|
+
* BoxPlot on the shared pipeline: one box per category of each series along
|
|
6
|
+
* one category axis - `x`, or `y` for horizontal boxes, as the "data" phase
|
|
7
|
+
* reads it off the values, in the order the data gives them - with its own
|
|
8
|
+
* band padding and markers. The value
|
|
9
|
+
* axis fits the values, without reaching for zero. Its plot defaults to:
|
|
10
|
+
* hover along the category axis, over one summary per box rather than every
|
|
11
|
+
* value inside it.
|
|
12
|
+
*/
|
|
13
|
+
export function buildBoxDefaults() {
|
|
14
|
+
return {
|
|
15
|
+
data: {
|
|
16
|
+
discreteAxes: 1,
|
|
17
|
+
segments: { color: (style) => style?.fill, connect: false }
|
|
18
|
+
},
|
|
19
|
+
scales: {
|
|
20
|
+
bandOrder: 'data',
|
|
21
|
+
defaults: (_state, ctx) => ({
|
|
22
|
+
category: { paddingInner: ctx.cfg.box.paddingInner, paddingOuter: ctx.cfg.box.paddingOuter }
|
|
23
|
+
})
|
|
24
|
+
},
|
|
25
|
+
markers: { marks: buildMarks },
|
|
26
|
+
hover: {
|
|
27
|
+
rows: BoxSummaries.of,
|
|
28
|
+
position: BoxSummaries.position,
|
|
29
|
+
label: () => ((row) => String(row.median)),
|
|
30
|
+
format: (state) => BoxSummaries.format(state),
|
|
31
|
+
sort: () => TooltipState.descending((row) => row.median)
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { BoxPlotState, BoxPlotCtx } from '../../types/plots/box/state';
|
|
2
|
+
import type { AxisBasedMarkersConfig } from '../../types/markers/common';
|
|
3
|
+
/**
|
|
4
|
+
* BoxPlot's "markers" phase: one `box` per visual segment of each series,
|
|
5
|
+
* one box per category of its rows, filled with its series' color (or its
|
|
6
|
+
* segment's own `fill`). The markers the "statistics" phase already put in
|
|
7
|
+
* `state.markers` come after, so they render on top.
|
|
8
|
+
*
|
|
9
|
+
* A series toggled off in the legend (style mode), or dimmed by hovering
|
|
10
|
+
* another one, takes the legend's disabled fill.
|
|
11
|
+
*/
|
|
12
|
+
export declare function buildMarks<TData extends Record<string, unknown>>(state: BoxPlotState<TData>, ctx: BoxPlotCtx): AxisBasedMarkersConfig[];
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BoxPlot's "markers" phase: one `box` per visual segment of each series,
|
|
3
|
+
* one box per category of its rows, filled with its series' color (or its
|
|
4
|
+
* segment's own `fill`). The markers the "statistics" phase already put in
|
|
5
|
+
* `state.markers` come after, so they render on top.
|
|
6
|
+
*
|
|
7
|
+
* A series toggled off in the legend (style mode), or dimmed by hovering
|
|
8
|
+
* another one, takes the legend's disabled fill.
|
|
9
|
+
*/
|
|
10
|
+
export function buildMarks(state, ctx) {
|
|
11
|
+
const { channels } = state.processedData;
|
|
12
|
+
const { cfg } = ctx;
|
|
13
|
+
return (state.processedGroups ?? []).flatMap((group) => {
|
|
14
|
+
const name = group.series.name;
|
|
15
|
+
const disabled = ctx.interaction?.fillFor(name);
|
|
16
|
+
return group.visualSegments.map((seg) => {
|
|
17
|
+
const { stroke, strokeWidth, strokeOpacity, borderRadius } = seg.styles;
|
|
18
|
+
const outline = { stroke, strokeWidth, strokeOpacity, borderRadius };
|
|
19
|
+
return {
|
|
20
|
+
type: 'box',
|
|
21
|
+
series: name,
|
|
22
|
+
data: seg.data,
|
|
23
|
+
x: channels.x,
|
|
24
|
+
y: channels.y,
|
|
25
|
+
bar: {
|
|
26
|
+
// The box's own outline, from its segment; unset fields stay svelteplot's.
|
|
27
|
+
...Object.fromEntries(Object.entries(outline).filter(([, v]) => v !== undefined)),
|
|
28
|
+
fill: disabled?.fill ?? seg.styles.fill ?? state.colorForSeries(name),
|
|
29
|
+
fillOpacity: disabled?.fillOpacity ?? seg.styles.fillOpacity ?? cfg.box.fillOpacity
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
<script lang="ts" generics="TProps extends Record<string, unknown>">
|
|
2
|
+
import { createGeoFeatures } from './features.svelte';
|
|
3
|
+
import { getConfiguration } from '../../configuration/config.svelte';
|
|
4
|
+
import { LegendState } from '../../layout/legend/LegendState.svelte';
|
|
5
|
+
import { ChannelName } from '../utils/ChannelName';
|
|
6
|
+
import { Margins } from '../../layout/margins/Margins';
|
|
7
|
+
import BasePlotLayout from '../../layout/base/BasePlotLayout.svelte';
|
|
8
|
+
import type { GeoPlotCoreProps } from '../../types/plots/geo/props';
|
|
9
|
+
import type { CoordinatesConfig } from '../../types/layout/coordinates';
|
|
10
|
+
import type { GeoPlotState, GeoPlotCtx } from '../../types/plots/geo/state';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* A map from GeoJSON or TopoJSON. `segments` styles features by id,
|
|
14
|
+
* `color` + `scales.color` drive a choropleth ramp, and everything drawn on
|
|
15
|
+
* top is a `markers` entry.
|
|
16
|
+
*/
|
|
17
|
+
type Props = GeoPlotCoreProps<TProps>;
|
|
18
|
+
|
|
19
|
+
let {
|
|
20
|
+
data,
|
|
21
|
+
object,
|
|
22
|
+
featureId,
|
|
23
|
+
color,
|
|
24
|
+
grouping,
|
|
25
|
+
opacity,
|
|
26
|
+
excludeParts,
|
|
27
|
+
width,
|
|
28
|
+
height,
|
|
29
|
+
styles = {},
|
|
30
|
+
segments = {},
|
|
31
|
+
markers = [],
|
|
32
|
+
scales = {},
|
|
33
|
+
coordinates = {},
|
|
34
|
+
margins = $bindable(),
|
|
35
|
+
tooltip = undefined,
|
|
36
|
+
pipeline
|
|
37
|
+
}: Props = $props();
|
|
38
|
+
|
|
39
|
+
const cfg = $derived(getConfiguration());
|
|
40
|
+
|
|
41
|
+
// ── Resolve data: GeoJSON is synchronous, TopoJSON is converted async ────
|
|
42
|
+
const resolved = createGeoFeatures<TProps>(
|
|
43
|
+
() => data,
|
|
44
|
+
() => object
|
|
45
|
+
);
|
|
46
|
+
const rawFeatures = $derived(resolved.features);
|
|
47
|
+
|
|
48
|
+
// ── Tile-layer / projection compatibility ────────────────────────────────
|
|
49
|
+
$effect(() => {
|
|
50
|
+
if (!styles.tileLayer) return;
|
|
51
|
+
const proj = coordinates.projection;
|
|
52
|
+
const name = typeof proj === 'string' ? proj : proj?.type;
|
|
53
|
+
if (name && name !== 'mercator' && name !== 'transverse-mercator') {
|
|
54
|
+
console.warn(
|
|
55
|
+
`GeoPlot: styles.tileLayer only renders correctly with a mercator-family projection - got "${name}". Rendering anyway.`
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
/** `coordinates`, with the projection defaulting to `'mercator'` under a tile layer. */
|
|
61
|
+
const resolvedCoordinates = $derived.by(
|
|
62
|
+
(): CoordinatesConfig => ({
|
|
63
|
+
...coordinates,
|
|
64
|
+
projection: coordinates.projection ?? (styles.tileLayer ? 'mercator' : undefined)
|
|
65
|
+
})
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
// ── Legend-driven range filter (mirrors HeatmapPlot's own) ────────────────
|
|
69
|
+
const legendInteraction = $derived(LegendState.current());
|
|
70
|
+
const range = $derived(legendInteraction?.range);
|
|
71
|
+
|
|
72
|
+
/** `scales` plus the fixed lon/lat frame every projection renders against. */
|
|
73
|
+
const layoutScales = $derived({
|
|
74
|
+
...scales,
|
|
75
|
+
x: { domain: [-180, 180] },
|
|
76
|
+
y: { domain: [90, -90] }
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
const ctx = $derived<GeoPlotCtx<TProps>>({
|
|
80
|
+
cfg,
|
|
81
|
+
range,
|
|
82
|
+
fill: styles.fill,
|
|
83
|
+
fillOpacity: styles.fillOpacity,
|
|
84
|
+
stroke: styles.stroke,
|
|
85
|
+
strokeWidth: styles.strokeWidth,
|
|
86
|
+
onFeatureClick: styles.onFeatureClick
|
|
87
|
+
});
|
|
88
|
+
// The kind's pipeline, built once by its plot, over the state this core seeds.
|
|
89
|
+
const plotState = $derived(
|
|
90
|
+
pipeline!.run(
|
|
91
|
+
{
|
|
92
|
+
rawFeatures,
|
|
93
|
+
featureId,
|
|
94
|
+
color,
|
|
95
|
+
grouping,
|
|
96
|
+
opacity,
|
|
97
|
+
excludeParts,
|
|
98
|
+
segments,
|
|
99
|
+
scales,
|
|
100
|
+
authoredMarkers: markers,
|
|
101
|
+
tooltip,
|
|
102
|
+
width,
|
|
103
|
+
height,
|
|
104
|
+
margins
|
|
105
|
+
},
|
|
106
|
+
ctx
|
|
107
|
+
) as GeoPlotState<TProps>
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
const allFeatures = $derived(plotState.allFeatures!);
|
|
111
|
+
const features = $derived(plotState.features!);
|
|
112
|
+
|
|
113
|
+
/** `styles`, with the drawn features handed to the tile layer for its fit. */
|
|
114
|
+
const resolvedStyles = $derived(
|
|
115
|
+
styles.tileLayer ? { ...styles, tileLayer: { ...styles.tileLayer, features } } : styles
|
|
116
|
+
);
|
|
117
|
+
|
|
118
|
+
// The features match the pointer themselves, while the plot's hover is active.
|
|
119
|
+
const markersOut = $derived(
|
|
120
|
+
(plotState.markers ?? []).map((m) =>
|
|
121
|
+
m.type === 'geo' && !plotState.hover!.active ? { ...m, hover: undefined } : m
|
|
122
|
+
)
|
|
123
|
+
);
|
|
124
|
+
|
|
125
|
+
/** What `BasePlotLayout` draws from: the features, where each sits, the hover config and scales. */
|
|
126
|
+
const layoutState = $derived({
|
|
127
|
+
hover: plotState.hover,
|
|
128
|
+
hoverPosition: plotState.hoverPosition,
|
|
129
|
+
hoverRows: plotState.hoverRows,
|
|
130
|
+
markers: markersOut,
|
|
131
|
+
scales: layoutScales,
|
|
132
|
+
channels: {
|
|
133
|
+
color: { source: ChannelName.of(color, 'color') },
|
|
134
|
+
opacity: { source: ChannelName.of(opacity, 'opacity') }
|
|
135
|
+
},
|
|
136
|
+
colorDomain: plotState.colorDomain,
|
|
137
|
+
opacityDomain: plotState.opacityDomain,
|
|
138
|
+
styles: resolvedStyles,
|
|
139
|
+
marginEstimate: Margins.GEO_ESTIMATE
|
|
140
|
+
});
|
|
141
|
+
</script>
|
|
142
|
+
|
|
143
|
+
<!-- `layoutScales` pins x/y to the lon/lat range, which `contour` markers read. -->
|
|
144
|
+
<BasePlotLayout
|
|
145
|
+
{width}
|
|
146
|
+
{height}
|
|
147
|
+
state={layoutState}
|
|
148
|
+
coordinates={resolvedCoordinates}
|
|
149
|
+
bind:margins
|
|
150
|
+
geoAllFeatures={allFeatures}
|
|
151
|
+
/>
|