@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
|
@@ -1,52 +1,58 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import type { LegendItemsLayout, LegendSection } from '../../types/layout/legend';
|
|
3
|
+
import DiscreteSection from './DiscreteSection.svelte';
|
|
4
|
+
import ContinuousSection from './ContinuousSection.svelte';
|
|
5
|
+
import SizeSection from './SizeSection.svelte';
|
|
6
|
+
import SymbolSection from './SymbolSection.svelte';
|
|
5
7
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Renders one or more legend sections side by side, dispatching each to the
|
|
10
|
+
* matching section renderer. Discrete, continuous, size and symbol sections can be mixed.
|
|
11
|
+
* A lone discrete section's items default to horizontal flow; vertical once
|
|
12
|
+
* a second section joins. A section's own `layout` always wins.
|
|
13
|
+
*/
|
|
14
|
+
let { sections }: { sections: LegendSection[] } = $props();
|
|
15
|
+
const defaultItemsLayout = $derived<LegendItemsLayout>(
|
|
16
|
+
sections.length === 1 ? { type: 'horizontal' } : { type: 'vertical' }
|
|
17
|
+
);
|
|
16
18
|
</script>
|
|
17
19
|
|
|
18
20
|
<div class="dct-legend">
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
21
|
+
{#each sections as section, i (section.title ?? i)}
|
|
22
|
+
<div class="dct-legend__section">
|
|
23
|
+
{#if section.title}
|
|
24
|
+
<div class="dct-legend__title">{section.title}</div>
|
|
25
|
+
{/if}
|
|
26
|
+
{#if section.type === 'discrete'}
|
|
27
|
+
<DiscreteSection {section} {defaultItemsLayout} />
|
|
28
|
+
{:else if section.type === 'continuous'}
|
|
29
|
+
<ContinuousSection {section} />
|
|
30
|
+
{:else if section.type === 'size'}
|
|
31
|
+
<SizeSection {section} />
|
|
32
|
+
{:else if section.type === 'symbol'}
|
|
33
|
+
<SymbolSection {section} {defaultItemsLayout} />
|
|
34
|
+
{/if}
|
|
35
|
+
</div>
|
|
36
|
+
{/each}
|
|
31
37
|
</div>
|
|
32
38
|
|
|
33
39
|
<style>
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
40
|
+
.dct-legend {
|
|
41
|
+
display: flex;
|
|
42
|
+
flex-wrap: wrap;
|
|
43
|
+
gap: var(--dct-legend-gap, 0.5rem 2rem);
|
|
44
|
+
align-items: flex-start;
|
|
45
|
+
font-family: var(--dct-legend-font, inherit);
|
|
46
|
+
color: var(--dct-legend-color, inherit);
|
|
47
|
+
}
|
|
48
|
+
.dct-legend__section {
|
|
49
|
+
display: flex;
|
|
50
|
+
flex-direction: column;
|
|
51
|
+
gap: 0.5rem;
|
|
52
|
+
min-width: 0;
|
|
53
|
+
}
|
|
54
|
+
.dct-legend__title {
|
|
55
|
+
font-size: var(--dct-legend-title-size, 0.875rem);
|
|
56
|
+
font-weight: var(--dct-legend-title-weight, 500);
|
|
57
|
+
}
|
|
52
58
|
</style>
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { SvelteMap } from 'svelte/reactivity';
|
|
2
|
+
import type { LegendDisabledAction, LegendEntry, LegendExtension, LegendPlot, LegendRange, LegendSection } from '../../types/layout/legend';
|
|
3
|
+
/**
|
|
4
|
+
* A figure's legend, shared by every plot and legend under it: what the
|
|
5
|
+
* reader turned off - each series' {@link LegendDisabledAction}, and the
|
|
6
|
+
* range a continuous section narrows to - and what the plots draw, as each
|
|
7
|
+
* registers it ({@link register}): its series, their colors and marks, and
|
|
8
|
+
* its continuous scales. From those, {@link sections} reads as a legend of
|
|
9
|
+
* its own, for a figure that sets none.
|
|
10
|
+
*/
|
|
11
|
+
export declare class LegendState {
|
|
12
|
+
#private;
|
|
13
|
+
/** Series name → what turning it off does. A series in here is off. */
|
|
14
|
+
readonly disabled: SvelteMap<string, LegendDisabledAction>;
|
|
15
|
+
/** The narrowed range of the first interactive continuous section, or `null`. */
|
|
16
|
+
range: LegendRange | null;
|
|
17
|
+
/** The enclosing figure's legend, or `null` outside one. Call during component init. */
|
|
18
|
+
static current(): LegendState | null;
|
|
19
|
+
/** A new legend, shared with everything below. Call during component init. */
|
|
20
|
+
static provide(): LegendState;
|
|
21
|
+
/** The enclosing figure's legend, or a private one for a legend drawn outside any. Call during component init. */
|
|
22
|
+
static ensure(): LegendState;
|
|
23
|
+
/** Whether `value` lies within `range`; a missing value always does. */
|
|
24
|
+
static inRange(value: number | null | undefined, range: {
|
|
25
|
+
min: number;
|
|
26
|
+
max: number;
|
|
27
|
+
}): boolean;
|
|
28
|
+
/** Whether `series` is turned off. */
|
|
29
|
+
isOff(series: string): boolean;
|
|
30
|
+
/** What turning `series` off does, while it is off. */
|
|
31
|
+
actionOf(series: string): LegendDisabledAction | undefined;
|
|
32
|
+
turnOff(series: string, action: LegendDisabledAction): void;
|
|
33
|
+
turnOn(series: string): void;
|
|
34
|
+
/** Turns `series` off with `action`, or back on. */
|
|
35
|
+
toggle(series: string, action: LegendDisabledAction): void;
|
|
36
|
+
/** Whether any series is off with `'omit'` - which changes the plot's own rows, not just how they draw. */
|
|
37
|
+
get omits(): boolean;
|
|
38
|
+
/** `series` without those turned off with `'omit'`. */
|
|
39
|
+
withoutOmitted<S extends {
|
|
40
|
+
name: string;
|
|
41
|
+
}>(series: S[]): S[];
|
|
42
|
+
/**
|
|
43
|
+
* Records what the plot `source` draws, replacing what it recorded before.
|
|
44
|
+
* A series or mark that is off keeps its entry, in its place, even when
|
|
45
|
+
* the plot no longer draws it (an `'omit'`): the legend must still list it
|
|
46
|
+
* to turn it back on.
|
|
47
|
+
*/
|
|
48
|
+
register(source: unknown, entries: LegendEntry[]): void;
|
|
49
|
+
unregister(source: unknown): void;
|
|
50
|
+
/**
|
|
51
|
+
* Everything the plots draw: series first, then what names itself, then
|
|
52
|
+
* scales - each once, however many plots (or facet panels) draw it: a
|
|
53
|
+
* series or mark by its name, a size or symbol scale by its title.
|
|
54
|
+
*/
|
|
55
|
+
get entries(): LegendEntry[];
|
|
56
|
+
/**
|
|
57
|
+
* The legend {@link entries} read as, with `extension` added: one discrete
|
|
58
|
+
* section of every series and every segment or marker that names itself -
|
|
59
|
+
* a dot as a circle, a line as its stroke, anything else as a swatch - with
|
|
60
|
+
* `extension.items` after them; a continuous section per color scale, a
|
|
61
|
+
* size section per dot size scale and a symbol section per dot shape
|
|
62
|
+
* scale, each titled by its field name (see `legend.pretty`);
|
|
63
|
+
* then `extension.sections`. A lone series, with nothing else to tell it
|
|
64
|
+
* from, shows no discrete section; with other sections beside it, the
|
|
65
|
+
* discrete one is titled `legend.seriesTitle`.
|
|
66
|
+
*/
|
|
67
|
+
sections(extension?: LegendExtension): LegendSection[];
|
|
68
|
+
/**
|
|
69
|
+
* The author's own `sections`, each discrete item that names something the
|
|
70
|
+
* plots draw - a series, or a segment or marker that names itself - in its
|
|
71
|
+
* color, unless the item sets one. Any other item keeps its own color, or
|
|
72
|
+
* the palette's in item order.
|
|
73
|
+
*/
|
|
74
|
+
colorize(sections: LegendSection[]): LegendSection[];
|
|
75
|
+
/**
|
|
76
|
+
* What a plot draws, as legend entries: each of its series, by name, in
|
|
77
|
+
* its color, drawn as the plot's own mark - the first of its markers a
|
|
78
|
+
* legend can show, as dots in the shape they share - then each of its
|
|
79
|
+
* segments and markers that names itself (its `legend`), in its own color
|
|
80
|
+
* and mark, then what the plot's and its markers' `color`, `opacity`, `r`
|
|
81
|
+
* and `symbol` channels draw with.
|
|
82
|
+
*/
|
|
83
|
+
static entriesOf(plot: LegendPlot): LegendEntry[];
|
|
84
|
+
}
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
import { getContext, setContext, untrack } from 'svelte';
|
|
2
|
+
import { SvelteMap } from 'svelte/reactivity';
|
|
3
|
+
import { getConfiguration } from '../../configuration/config.svelte';
|
|
4
|
+
import { MarkerKinds } from '../../markers/MarkerKinds';
|
|
5
|
+
import { LegendChannels } from './LegendChannels';
|
|
6
|
+
import { LegendText } from './LegendText';
|
|
7
|
+
const LEGEND_KEY = Symbol('dct-legend');
|
|
8
|
+
/**
|
|
9
|
+
* A figure's legend, shared by every plot and legend under it: what the
|
|
10
|
+
* reader turned off - each series' {@link LegendDisabledAction}, and the
|
|
11
|
+
* range a continuous section narrows to - and what the plots draw, as each
|
|
12
|
+
* registers it ({@link register}): its series, their colors and marks, and
|
|
13
|
+
* its continuous scales. From those, {@link sections} reads as a legend of
|
|
14
|
+
* its own, for a figure that sets none.
|
|
15
|
+
*/
|
|
16
|
+
export class LegendState {
|
|
17
|
+
/** Series name → what turning it off does. A series in here is off. */
|
|
18
|
+
disabled = new SvelteMap();
|
|
19
|
+
/** The narrowed range of the first interactive continuous section, or `null`. */
|
|
20
|
+
range = $state(null);
|
|
21
|
+
#sources = new SvelteMap();
|
|
22
|
+
/** The enclosing figure's legend, or `null` outside one. Call during component init. */
|
|
23
|
+
static current() {
|
|
24
|
+
return getContext(LEGEND_KEY) ?? null;
|
|
25
|
+
}
|
|
26
|
+
/** A new legend, shared with everything below. Call during component init. */
|
|
27
|
+
static provide() {
|
|
28
|
+
const legend = new LegendState();
|
|
29
|
+
setContext(LEGEND_KEY, legend);
|
|
30
|
+
return legend;
|
|
31
|
+
}
|
|
32
|
+
/** The enclosing figure's legend, or a private one for a legend drawn outside any. Call during component init. */
|
|
33
|
+
static ensure() {
|
|
34
|
+
return LegendState.current() ?? new LegendState();
|
|
35
|
+
}
|
|
36
|
+
/** Whether `value` lies within `range`; a missing value always does. */
|
|
37
|
+
static inRange(value, range) {
|
|
38
|
+
return value == null || (value >= range.min && value <= range.max);
|
|
39
|
+
}
|
|
40
|
+
/** Whether `series` is turned off. */
|
|
41
|
+
isOff(series) {
|
|
42
|
+
return this.disabled.has(series);
|
|
43
|
+
}
|
|
44
|
+
/** What turning `series` off does, while it is off. */
|
|
45
|
+
actionOf(series) {
|
|
46
|
+
return this.disabled.get(series);
|
|
47
|
+
}
|
|
48
|
+
turnOff(series, action) {
|
|
49
|
+
this.disabled.set(series, action);
|
|
50
|
+
}
|
|
51
|
+
turnOn(series) {
|
|
52
|
+
this.disabled.delete(series);
|
|
53
|
+
}
|
|
54
|
+
/** Turns `series` off with `action`, or back on. */
|
|
55
|
+
toggle(series, action) {
|
|
56
|
+
if (this.isOff(series))
|
|
57
|
+
this.turnOn(series);
|
|
58
|
+
else
|
|
59
|
+
this.turnOff(series, action);
|
|
60
|
+
}
|
|
61
|
+
/** Whether any series is off with `'omit'` - which changes the plot's own rows, not just how they draw. */
|
|
62
|
+
get omits() {
|
|
63
|
+
return [...this.disabled.values()].some((action) => action.mode === 'omit');
|
|
64
|
+
}
|
|
65
|
+
/** `series` without those turned off with `'omit'`. */
|
|
66
|
+
withoutOmitted(series) {
|
|
67
|
+
return series.filter((s) => this.actionOf(s.name)?.mode !== 'omit');
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Records what the plot `source` draws, replacing what it recorded before.
|
|
71
|
+
* A series or mark that is off keeps its entry, in its place, even when
|
|
72
|
+
* the plot no longer draws it (an `'omit'`): the legend must still list it
|
|
73
|
+
* to turn it back on.
|
|
74
|
+
*/
|
|
75
|
+
register(source, entries) {
|
|
76
|
+
untrack(() => {
|
|
77
|
+
const known = this.#sources.get(source);
|
|
78
|
+
const next = known ? this.#keepingOff(known, entries) : entries;
|
|
79
|
+
if (known && JSON.stringify(known) === JSON.stringify(next))
|
|
80
|
+
return;
|
|
81
|
+
this.#sources.set(source, next);
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
/** `entries` in the order `known` had them, with the off series and marks `entries` lacks kept from `known`. */
|
|
85
|
+
#keepingOff(known, entries) {
|
|
86
|
+
const key = (entry) => entry.type === 'series' || entry.type === 'mark' ? `${entry.type}:${entry.name}` : undefined;
|
|
87
|
+
const drawn = (entry) => entries.find((other) => key(other) === key(entry));
|
|
88
|
+
const isKept = (entry) => key(entry) !== undefined &&
|
|
89
|
+
!drawn(entry) &&
|
|
90
|
+
this.disabled.has(entry.name);
|
|
91
|
+
if (!known.some(isKept))
|
|
92
|
+
return entries;
|
|
93
|
+
const ordered = known.flatMap((entry) => {
|
|
94
|
+
const current = isKept(entry) ? entry : drawn(entry);
|
|
95
|
+
return current ? [current] : [];
|
|
96
|
+
});
|
|
97
|
+
return [...ordered, ...entries.filter((entry) => !ordered.includes(entry))];
|
|
98
|
+
}
|
|
99
|
+
unregister(source) {
|
|
100
|
+
this.#sources.delete(source);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Everything the plots draw: series first, then what names itself, then
|
|
104
|
+
* scales - each once, however many plots (or facet panels) draw it: a
|
|
105
|
+
* series or mark by its name, a size or symbol scale by its title.
|
|
106
|
+
*/
|
|
107
|
+
get entries() {
|
|
108
|
+
const all = [...this.#sources.values()].flat();
|
|
109
|
+
const keyOf = (entry) => entry.type === 'series' || entry.type === 'mark'
|
|
110
|
+
? `${entry.type}:${entry.name}`
|
|
111
|
+
: entry.type === 'size' || entry.type === 'symbol'
|
|
112
|
+
? `${entry.type}:${entry.title ?? ''}`
|
|
113
|
+
: entry.type === 'scale' || entry.type === 'opacity'
|
|
114
|
+
? JSON.stringify(entry)
|
|
115
|
+
: undefined;
|
|
116
|
+
const once = (type) => all.filter((entry, i) => entry.type === type &&
|
|
117
|
+
(keyOf(entry) === undefined ||
|
|
118
|
+
all.findIndex((other) => keyOf(other) === keyOf(entry)) === i));
|
|
119
|
+
return [
|
|
120
|
+
...once('series'),
|
|
121
|
+
...once('mark'),
|
|
122
|
+
...once('scale'),
|
|
123
|
+
...once('opacity'),
|
|
124
|
+
...once('size'),
|
|
125
|
+
...once('symbol')
|
|
126
|
+
];
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* The legend {@link entries} read as, with `extension` added: one discrete
|
|
130
|
+
* section of every series and every segment or marker that names itself -
|
|
131
|
+
* a dot as a circle, a line as its stroke, anything else as a swatch - with
|
|
132
|
+
* `extension.items` after them; a continuous section per color scale, a
|
|
133
|
+
* size section per dot size scale and a symbol section per dot shape
|
|
134
|
+
* scale, each titled by its field name (see `legend.pretty`);
|
|
135
|
+
* then `extension.sections`. A lone series, with nothing else to tell it
|
|
136
|
+
* from, shows no discrete section; with other sections beside it, the
|
|
137
|
+
* discrete one is titled `legend.seriesTitle`.
|
|
138
|
+
*/
|
|
139
|
+
sections(extension) {
|
|
140
|
+
const entries = this.entries;
|
|
141
|
+
const cfg = getConfiguration();
|
|
142
|
+
const format = (title) => LegendText.of(title, cfg);
|
|
143
|
+
const adjust = (channel, title) => LegendState.#adjustment(extension?.[channel], title, format);
|
|
144
|
+
const items = [];
|
|
145
|
+
const ramps = [];
|
|
146
|
+
let interactive = false;
|
|
147
|
+
for (const entry of entries) {
|
|
148
|
+
if (entry.type === 'size') {
|
|
149
|
+
const { title, domain, range, color, filled, symbol } = entry;
|
|
150
|
+
ramps.push({
|
|
151
|
+
type: 'size',
|
|
152
|
+
title: title && format(title),
|
|
153
|
+
domain,
|
|
154
|
+
range,
|
|
155
|
+
color,
|
|
156
|
+
filled,
|
|
157
|
+
...(symbol ? { symbol } : {}),
|
|
158
|
+
...adjust('size', title)
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
else if (entry.type === 'symbol') {
|
|
162
|
+
const { title, items: shapes, color, filled } = entry;
|
|
163
|
+
ramps.push({
|
|
164
|
+
type: 'symbol',
|
|
165
|
+
title: title && format(title),
|
|
166
|
+
items: shapes,
|
|
167
|
+
color,
|
|
168
|
+
filled,
|
|
169
|
+
...adjust('symbol', title)
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
else if (entry.type === 'opacity') {
|
|
173
|
+
const { title, min, max, opacityMin, opacityMax, color } = entry;
|
|
174
|
+
ramps.push({
|
|
175
|
+
type: 'continuous',
|
|
176
|
+
title: title && format(title),
|
|
177
|
+
min,
|
|
178
|
+
max,
|
|
179
|
+
opacity: [opacityMin, opacityMax],
|
|
180
|
+
...(color ? { colorMin: color } : {}),
|
|
181
|
+
...adjust('opacity', title)
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
else if (entry.type === 'scale') {
|
|
185
|
+
const { title, min, max, colorMin, colorMax, scheme, pivot } = entry;
|
|
186
|
+
const section = {
|
|
187
|
+
type: 'continuous',
|
|
188
|
+
title: title && format(title),
|
|
189
|
+
min,
|
|
190
|
+
max,
|
|
191
|
+
colorMin,
|
|
192
|
+
colorMax,
|
|
193
|
+
...(scheme !== undefined ? { scheme } : {}),
|
|
194
|
+
...(pivot !== undefined ? { pivot } : {}),
|
|
195
|
+
...adjust('color', title)
|
|
196
|
+
};
|
|
197
|
+
// The legend holds one range, so only the first interactive ramp drives it.
|
|
198
|
+
if (section.interactive?.enabled) {
|
|
199
|
+
if (interactive)
|
|
200
|
+
section.interactive = { ...section.interactive, enabled: false };
|
|
201
|
+
interactive = true;
|
|
202
|
+
}
|
|
203
|
+
ramps.push(section);
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
items.push(LegendState.#itemOf(entry));
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
items.push(...(extension?.items ?? []));
|
|
210
|
+
const named = entries.some((entry) => entry.type === 'mark') || !!extension?.items?.length;
|
|
211
|
+
const others = [...ramps, ...(extension?.sections ?? [])];
|
|
212
|
+
const title = cfg.legend.seriesTitle.enabled && others.length > 0;
|
|
213
|
+
const discrete = items.length > 1 || (named && items.length > 0)
|
|
214
|
+
? [
|
|
215
|
+
{
|
|
216
|
+
type: 'discrete',
|
|
217
|
+
...(title ? { title: cfg.legend.seriesTitle.text } : {}),
|
|
218
|
+
items,
|
|
219
|
+
...LegendState.#adjustment(extension?.color, undefined, format),
|
|
220
|
+
...extension?.series
|
|
221
|
+
}
|
|
222
|
+
]
|
|
223
|
+
: [];
|
|
224
|
+
return [...discrete, ...others];
|
|
225
|
+
}
|
|
226
|
+
/** What `override` changes in the section titled `title`: the entries that match it, in order, merged. */
|
|
227
|
+
static #adjustment(override, title, format) {
|
|
228
|
+
if (!override)
|
|
229
|
+
return {};
|
|
230
|
+
const list = Array.isArray(override) ? override : [override];
|
|
231
|
+
const merged = {};
|
|
232
|
+
for (const { match, ...config } of list) {
|
|
233
|
+
const matches = match === undefined ||
|
|
234
|
+
(title !== undefined && (match === title || match === format(title)));
|
|
235
|
+
if (matches)
|
|
236
|
+
Object.assign(merged, config);
|
|
237
|
+
}
|
|
238
|
+
return merged;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* The author's own `sections`, each discrete item that names something the
|
|
242
|
+
* plots draw - a series, or a segment or marker that names itself - in its
|
|
243
|
+
* color, unless the item sets one. Any other item keeps its own color, or
|
|
244
|
+
* the palette's in item order.
|
|
245
|
+
*/
|
|
246
|
+
colorize(sections) {
|
|
247
|
+
const colorOf = (name) => {
|
|
248
|
+
const entry = this.entries.find((e) => (e.type === 'series' || e.type === 'mark') && e.name === name);
|
|
249
|
+
return entry && (entry.type === 'series' || entry.type === 'mark') ? entry.color : undefined;
|
|
250
|
+
};
|
|
251
|
+
return sections.map((section) => section.type !== 'discrete'
|
|
252
|
+
? section
|
|
253
|
+
: {
|
|
254
|
+
...section,
|
|
255
|
+
items: section.items.map((item) => {
|
|
256
|
+
const drawn = item.color ? undefined : colorOf(item.name);
|
|
257
|
+
return drawn ? { ...item, color: drawn } : item;
|
|
258
|
+
})
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* What a plot draws, as legend entries: each of its series, by name, in
|
|
263
|
+
* its color, drawn as the plot's own mark - the first of its markers a
|
|
264
|
+
* legend can show, as dots in the shape they share - then each of its
|
|
265
|
+
* segments and markers that names itself (its `legend`), in its own color
|
|
266
|
+
* and mark, then what the plot's and its markers' `color`, `opacity`, `r`
|
|
267
|
+
* and `symbol` channels draw with.
|
|
268
|
+
*/
|
|
269
|
+
static entriesOf(plot) {
|
|
270
|
+
const color = (name) => name !== undefined && name !== 'default' ? plot.colorForSeries?.(name) : undefined;
|
|
271
|
+
const mark = plot.markers
|
|
272
|
+
?.map((marker) => MarkerKinds.of(marker.type)?.legendSymbol)
|
|
273
|
+
.find((kind) => kind !== undefined);
|
|
274
|
+
const dots = LegendChannels.look((plot.markers ?? []).filter((marker) => marker.type === 'dot' && !marker.legend));
|
|
275
|
+
const series = (plot.resolvedSeries ?? []).map((s) => ({
|
|
276
|
+
type: 'series',
|
|
277
|
+
name: s.name,
|
|
278
|
+
color: color(s.name),
|
|
279
|
+
...(mark ? { mark } : {}),
|
|
280
|
+
...(mark === 'dot' && dots.symbol ? { symbol: dots.symbol } : {}),
|
|
281
|
+
...(mark === 'dot' && !dots.filled ? { filled: false } : {})
|
|
282
|
+
}));
|
|
283
|
+
const segments = Object.entries(plot.segments ?? {}).flatMap(([name, list]) => (list ?? []).flatMap((segment) => LegendState.#markEntry(segment, mark, color(name))));
|
|
284
|
+
const markers = (plot.markers ?? []).flatMap((marker) => LegendState.#markEntry(marker, MarkerKinds.of(marker.type)?.legendSymbol, color(marker.series)));
|
|
285
|
+
return [...series, ...segments, ...markers, ...LegendChannels.of(plot)];
|
|
286
|
+
}
|
|
287
|
+
/** A segment's or marker's own entry, when it names itself on the legend. */
|
|
288
|
+
static #markEntry(source, mark, fallbackColor) {
|
|
289
|
+
const legend = source.legend;
|
|
290
|
+
if (!legend)
|
|
291
|
+
return [];
|
|
292
|
+
const own = typeof legend === 'string' ? { label: legend } : legend;
|
|
293
|
+
const styles = source.styles ?? {};
|
|
294
|
+
const drawn = [
|
|
295
|
+
styles.fill,
|
|
296
|
+
styles.stroke,
|
|
297
|
+
styles.dotFill,
|
|
298
|
+
styles.dotStroke,
|
|
299
|
+
source.fill,
|
|
300
|
+
source.stroke
|
|
301
|
+
].find((value) => typeof value === 'string' && value !== 'none');
|
|
302
|
+
const dashed = styles.strokeDasharray !== undefined && styles.strokeDasharray !== 'none';
|
|
303
|
+
const dot = mark === 'dot' ? LegendChannels.look([source]) : undefined;
|
|
304
|
+
const symbol = own.symbol ?? dot?.symbol;
|
|
305
|
+
const filled = own.filled ?? dot?.filled;
|
|
306
|
+
return [
|
|
307
|
+
{
|
|
308
|
+
type: 'mark',
|
|
309
|
+
name: own.label,
|
|
310
|
+
label: own.label,
|
|
311
|
+
color: own.color ?? drawn ?? fallbackColor,
|
|
312
|
+
...(mark ? { mark } : {}),
|
|
313
|
+
...(symbol ? { symbol } : {}),
|
|
314
|
+
...(filled === false ? { filled } : {}),
|
|
315
|
+
...(own.lineStyle || dashed ? { lineStyle: own.lineStyle ?? 'dashed' } : {})
|
|
316
|
+
}
|
|
317
|
+
];
|
|
318
|
+
}
|
|
319
|
+
/** A series or mark entry as a discrete legend item. */
|
|
320
|
+
static #itemOf(entry) {
|
|
321
|
+
return {
|
|
322
|
+
name: entry.name,
|
|
323
|
+
...(entry.label ? { label: entry.label } : {}),
|
|
324
|
+
color: entry.color,
|
|
325
|
+
...(entry.filled === false ? { filled: false } : {}),
|
|
326
|
+
...(entry.symbol || entry.mark === 'dot'
|
|
327
|
+
? { symbol: entry.symbol ?? 'circle' }
|
|
328
|
+
: entry.mark === 'line'
|
|
329
|
+
? { symbol: 'line', lineStyle: entry.lineStyle ?? 'solid' }
|
|
330
|
+
: {})
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { PlotStylesConfig } from '../../types/configuration/styling';
|
|
2
|
+
/** How a legend shows the names it reads off the data. */
|
|
3
|
+
export declare class LegendText {
|
|
4
|
+
/** `name` as the legend shows it: as words, unless `legend.pretty` is off. */
|
|
5
|
+
static of(name: string, cfg: Pick<PlotStylesConfig, 'legend'>): string;
|
|
6
|
+
/**
|
|
7
|
+
* A field or category name as words: `_` and camel-case humps split it,
|
|
8
|
+
* all lowercase but the first letter - `gdp_per_capita` and `gdpPerCapita`
|
|
9
|
+
* both read "Gdp per capita". All-caps words (acronyms) keep their case.
|
|
10
|
+
*/
|
|
11
|
+
static humanize(name: string): string;
|
|
12
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** How a legend shows the names it reads off the data. */
|
|
2
|
+
export class LegendText {
|
|
3
|
+
/** `name` as the legend shows it: as words, unless `legend.pretty` is off. */
|
|
4
|
+
static of(name, cfg) {
|
|
5
|
+
return cfg.legend.pretty ? LegendText.humanize(name) : name;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* A field or category name as words: `_` and camel-case humps split it,
|
|
9
|
+
* all lowercase but the first letter - `gdp_per_capita` and `gdpPerCapita`
|
|
10
|
+
* both read "Gdp per capita". All-caps words (acronyms) keep their case.
|
|
11
|
+
*/
|
|
12
|
+
static humanize(name) {
|
|
13
|
+
const words = name
|
|
14
|
+
.replace(/_+/g, ' ')
|
|
15
|
+
.replace(/([a-z\d])([A-Z])/g, '$1 $2')
|
|
16
|
+
.trim()
|
|
17
|
+
.split(/\s+/)
|
|
18
|
+
.map((word) => (word === word.toUpperCase() ? word : word.toLowerCase()))
|
|
19
|
+
.join(' ');
|
|
20
|
+
return words.charAt(0).toUpperCase() + words.slice(1);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { ticks } from 'd3-array';
|
|
3
|
+
import type { SizeLegendSection } from '../../types/layout/legend';
|
|
4
|
+
import { SymbolPath } from '../../utils/symbol';
|
|
5
|
+
import { AxisNumberFormat } from './AxisNumberFormat';
|
|
6
|
+
import { getConfiguration } from '../../configuration/config.svelte';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* A size legend: a row of dots, each the radius one value draws at - its
|
|
10
|
+
* `domain` onto `range` (px) on a square-root scale, as a plot's `r`
|
|
11
|
+
* channel sizes its dots - bottom-aligned, with the value under each,
|
|
12
|
+
* spaced by whichever is wider. Values read as the axes write theirs.
|
|
13
|
+
* Filled, or drawn as rings, in the section's color.
|
|
14
|
+
*/
|
|
15
|
+
let { section }: { section: SizeLegendSection } = $props();
|
|
16
|
+
|
|
17
|
+
const cfg = $derived(getConfiguration());
|
|
18
|
+
const fmt = $derived(section.format ?? AxisNumberFormat.of(section.domain, cfg));
|
|
19
|
+
/** A value's radius: `domain` onto `range` on a square-root scale. */
|
|
20
|
+
function radius(value: number): number {
|
|
21
|
+
const [d0, d1] = section.domain.map(Math.sqrt);
|
|
22
|
+
const [r0, r1] = section.range;
|
|
23
|
+
return r0 + ((r1 - r0) * (Math.sqrt(value) - d0)) / (d1 - d0 || 1);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** A few round values across the domain, above zero: at most four. */
|
|
27
|
+
const values = $derived.by(() => {
|
|
28
|
+
if (section.values) return section.values;
|
|
29
|
+
const [lo, hi] = section.domain;
|
|
30
|
+
const round = ticks(lo, hi, 8).filter((v) => v > 0);
|
|
31
|
+
const step = Math.ceil(round.length / 4);
|
|
32
|
+
return round.filter((_, i) => (round.length - 1 - i) % step === 0);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
const dots = $derived(values.map((value) => ({ value, r: Math.max(1, radius(value)) })));
|
|
36
|
+
const maxR = $derived(Math.max(1, ...dots.map((dot) => dot.r)));
|
|
37
|
+
const color = $derived(section.color ?? 'currentColor');
|
|
38
|
+
const filled = $derived(section.filled ?? true);
|
|
39
|
+
const symbol = $derived(section.symbol ?? 'circle');
|
|
40
|
+
const paint = $derived({
|
|
41
|
+
fill: filled ? color : 'none',
|
|
42
|
+
'fill-opacity': filled ? 0.85 : undefined,
|
|
43
|
+
stroke: color,
|
|
44
|
+
'stroke-width': 1
|
|
45
|
+
});
|
|
46
|
+
</script>
|
|
47
|
+
|
|
48
|
+
<div class="dct-size" role="img" aria-label={section.title ?? 'Size'}>
|
|
49
|
+
{#each dots as dot (dot.value)}
|
|
50
|
+
<div class="dct-size__item">
|
|
51
|
+
<svg width={2 * dot.r + 2} height={2 * maxR + 2} style="overflow: visible">
|
|
52
|
+
{#if symbol === 'circle'}
|
|
53
|
+
<circle cx={dot.r + 1} cy={1 + 2 * maxR - dot.r} r={dot.r} {...paint} />
|
|
54
|
+
{:else}
|
|
55
|
+
<path
|
|
56
|
+
d={SymbolPath.of(symbol, dot.r)}
|
|
57
|
+
transform="translate({dot.r + 1},{1 + 2 * maxR - dot.r})"
|
|
58
|
+
{...paint}
|
|
59
|
+
/>
|
|
60
|
+
{/if}
|
|
61
|
+
</svg>
|
|
62
|
+
<span class="dct-size__label">{fmt(dot.value)}</span>
|
|
63
|
+
</div>
|
|
64
|
+
{/each}
|
|
65
|
+
</div>
|
|
66
|
+
|
|
67
|
+
<style>
|
|
68
|
+
.dct-size {
|
|
69
|
+
display: flex;
|
|
70
|
+
align-items: flex-end;
|
|
71
|
+
gap: var(--dct-legend-size-gap, 12px);
|
|
72
|
+
}
|
|
73
|
+
.dct-size__item {
|
|
74
|
+
display: flex;
|
|
75
|
+
flex-direction: column;
|
|
76
|
+
align-items: center;
|
|
77
|
+
gap: 0.125rem;
|
|
78
|
+
}
|
|
79
|
+
.dct-size__label {
|
|
80
|
+
font-size: var(--dct-continuous-label-size, 0.875rem);
|
|
81
|
+
line-height: 1.2;
|
|
82
|
+
white-space: nowrap;
|
|
83
|
+
}
|
|
84
|
+
</style>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SizeLegendSection } from '../../types/layout/legend';
|
|
2
|
+
type $$ComponentProps = {
|
|
3
|
+
section: SizeLegendSection;
|
|
4
|
+
};
|
|
5
|
+
declare const SizeSection: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
6
|
+
type SizeSection = ReturnType<typeof SizeSection>;
|
|
7
|
+
export default SizeSection;
|