@fundar/data-chart-telling 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +53 -0
- package/README.md +58 -19
- package/dist/configuration/config.svelte.d.ts +1 -1
- package/dist/configuration/config.svelte.js +172 -95
- package/dist/configuration/themes/index.d.ts +5 -1304
- package/dist/index.d.ts +24 -14
- package/dist/index.js +20 -10
- package/dist/layout/base/BasePlotLayout.svelte +129 -51
- package/dist/layout/base/BasePlotLayout.svelte.d.ts +1 -38
- package/dist/layout/coordinates/CoordinatesLayout.svelte +42 -40
- package/dist/layout/coordinates/CoordinatesLayout.svelte.d.ts +0 -2
- package/dist/layout/coordinates/ProjectionZoom.svelte +48 -0
- package/dist/layout/coordinates/ProjectionZoom.svelte.d.ts +10 -0
- package/dist/layout/coordinates/ZoomedProjection.d.ts +11 -0
- package/dist/layout/coordinates/ZoomedProjection.js +24 -0
- package/dist/layout/coordinates/camera.svelte.js +11 -8
- package/dist/layout/coordinates/projections/argentina.js +1 -1
- package/dist/layout/coordinates/projections/fit.d.ts +1 -1
- package/dist/layout/coordinates/projections/fit.js +1 -1
- package/dist/layout/coordinates/zoom.svelte.d.ts +4 -5
- package/dist/layout/coordinates/zoom.svelte.js +4 -5
- package/dist/layout/facet/FacetLayout.svelte +1 -1
- package/dist/layout/facet/config.js +1 -1
- package/dist/layout/figure/Figure.svelte +2 -0
- package/dist/layout/geometry/GeometryLayout.svelte +14 -9
- package/dist/layout/geometry/GeometryLayout.svelte.d.ts +0 -3
- package/dist/layout/geometry/MarkerOffset.svelte +28 -0
- package/dist/layout/geometry/MarkerOffset.svelte.d.ts +13 -0
- package/dist/layout/grid/GridCell.svelte +6 -8
- package/dist/layout/hover/HoverSettings.d.ts +20 -6
- package/dist/layout/hover/HoverSettings.js +29 -4
- package/dist/layout/legend/ContinuousSection.svelte +44 -9
- package/dist/layout/legend/DiscreteBadgeItem.svelte +2 -2
- package/dist/layout/legend/DiscreteSection.svelte +2 -2
- package/dist/layout/legend/DiscreteSymbolIcon.svelte +1 -1
- package/dist/layout/legend/LegendChannels.js +36 -12
- package/dist/layout/legend/LegendLayout.svelte +9 -1
- package/dist/layout/legend/LegendState.svelte.d.ts +9 -0
- package/dist/layout/legend/LegendState.svelte.js +24 -3
- package/dist/layout/legend/SizeSection.svelte +1 -1
- package/dist/layout/margins/PlotMargins.svelte.d.ts +2 -5
- package/dist/layout/margins/PlotMargins.svelte.js +4 -8
- package/dist/layout/plot/Plot.svelte +6 -3
- package/dist/layout/plot/PublicPlotContext.d.ts +5 -4
- package/dist/layout/plot/PublicPlotContext.js +7 -3
- package/dist/layout/plot/Slice.d.ts +5 -1
- package/dist/layout/plot/Slice.js +18 -6
- package/dist/layout/scales/EdgeTicks.d.ts +39 -0
- package/dist/layout/scales/EdgeTicks.js +82 -0
- package/dist/layout/scales/NiceTicks.d.ts +43 -0
- package/dist/layout/scales/NiceTicks.js +76 -0
- package/dist/layout/scales/ScalesLayout.svelte +133 -34
- package/dist/layout/scales/ScalesLayout.svelte.d.ts +10 -0
- package/dist/layout/scales/SveltePlotScale.d.ts +15 -0
- package/dist/layout/scales/SveltePlotScale.js +86 -0
- package/dist/layout/scales/TickLabels.d.ts +32 -0
- package/dist/layout/scales/TickLabels.js +55 -0
- package/dist/layout/styles/StylesLayout.svelte +2 -2
- package/dist/layout/styles/ValueLabels.d.ts +33 -5
- package/dist/layout/styles/ValueLabels.js +83 -23
- package/dist/layout/timeline/Timeline.svelte +5 -2
- package/dist/layout/timeline/Timeline.svelte.d.ts +2 -0
- package/dist/layout/timeline/TimelineLayout.svelte +39 -13
- package/dist/layout/timeline/TimelineLayout.svelte.d.ts +7 -5
- package/dist/layout/timeline/TimelineRule.svelte +1 -0
- package/dist/layout/timeline/TimelineState.svelte.d.ts +13 -5
- package/dist/layout/timeline/TimelineState.svelte.js +42 -8
- package/dist/layout/timeline/TimelineTime.d.ts +18 -0
- package/dist/layout/timeline/TimelineTime.js +117 -0
- package/dist/layout/tooltip/Tooltip.svelte +10 -7
- package/dist/layout/tooltip/Tooltip.svelte.d.ts +6 -4
- package/dist/layout/tooltip/TooltipState.svelte.d.ts +8 -2
- package/dist/layout/tooltip/TooltipState.svelte.js +23 -4
- package/dist/markers/MarkerKinds.d.ts +5 -0
- package/dist/markers/MarkerKinds.js +1 -0
- package/dist/markers/area/AreaMarker.svelte +15 -63
- package/dist/markers/arrow/ArrowMarker.svelte +51 -9
- package/dist/markers/bar/BarMarker.svelte +8 -4
- package/dist/markers/bollinger/BollingerMarker.svelte +33 -18
- package/dist/markers/box/BoxMarker.svelte +40 -9
- package/dist/markers/delta/Delta.js +1 -1
- package/dist/markers/delta/DeltaMarker.svelte +9 -7
- package/dist/markers/dot/DotMarker.svelte +24 -27
- package/dist/markers/image/ImageMarker.svelte +17 -12
- package/dist/markers/inset/InsetMarker.svelte +2 -2
- package/dist/markers/line/LineMarker.svelte +1 -0
- package/dist/markers/link/LinkMarker.svelte +174 -29
- package/dist/markers/regression/RegressionMarker.svelte +16 -33
- package/dist/markers/rule/RuleMarker.svelte +9 -3
- package/dist/markers/text/Declutter.d.ts +4 -0
- package/dist/markers/text/Declutter.js +26 -11
- package/dist/markers/text/TextMarker.svelte +91 -48
- package/dist/markers/tick/TickMarker.svelte +27 -25
- package/dist/markers/utils/MarkerChannels.d.ts +24 -0
- package/dist/markers/utils/MarkerChannels.js +42 -7
- package/dist/markers/utils/RowOffset.d.ts +23 -0
- package/dist/markers/utils/RowOffset.js +23 -0
- package/dist/markers/utils/RowOffsetMarks.svelte +30 -0
- package/dist/markers/utils/RowOffsetMarks.svelte.d.ts +33 -0
- package/dist/markers/utils/RowStroke.d.ts +31 -0
- package/dist/markers/utils/RowStroke.js +28 -0
- package/dist/markers/violin/ViolinMarker.svelte +75 -0
- package/dist/markers/violin/ViolinMarker.svelte.d.ts +7 -0
- package/dist/markers/violin/ViolinProfiles.d.ts +29 -0
- package/dist/markers/violin/ViolinProfiles.js +55 -0
- package/dist/markers/waffle/WaffleMarker.svelte +17 -37
- package/dist/phases/Pipeline.d.ts +5 -0
- package/dist/phases/Pipeline.js +8 -2
- package/dist/phases/data/DataPhase.d.ts +5 -11
- package/dist/phases/data/DataPhase.js +14 -11
- package/dist/phases/data/PlotAxes.d.ts +10 -0
- package/dist/phases/data/PlotAxes.js +14 -1
- package/dist/phases/facet/FacetPanels.d.ts +55 -0
- package/dist/phases/facet/FacetPanels.js +96 -0
- package/dist/phases/facet/FacetPhase.d.ts +1 -42
- package/dist/phases/facet/FacetPhase.js +1 -87
- package/dist/phases/hover/HoverPhase.d.ts +6 -43
- package/dist/phases/hover/HoverPhase.js +19 -54
- package/dist/phases/mapping/MappingPhase.d.ts +1 -1
- package/dist/phases/mapping/MappingPhase.js +3 -5
- package/dist/phases/markers/MarkersPhase.js +2 -1
- package/dist/phases/scales/CategoryOrder.d.ts +23 -0
- package/dist/phases/scales/CategoryOrder.js +73 -0
- package/dist/phases/scales/ScalesPhase.d.ts +1 -3
- package/dist/phases/scales/ScalesPhase.js +37 -27
- package/dist/phases/sharedScales/SharedScalesPhase.d.ts +6 -2
- package/dist/phases/sharedScales/SharedScalesPhase.js +14 -8
- package/dist/phases/statistics/Statistics.d.ts +10 -6
- package/dist/phases/statistics/Statistics.js +20 -10
- package/dist/phases/statistics/StatisticsPhase.js +10 -6
- package/dist/phases/statistics/methods/BollingerStatistic.d.ts +1 -1
- package/dist/phases/statistics/methods/BollingerStatistic.js +13 -11
- package/dist/phases/statistics/methods/BoxStatistic.d.ts +1 -1
- package/dist/phases/statistics/methods/BoxStatistic.js +14 -12
- package/dist/phases/statistics/methods/Density2dStatistic.d.ts +1 -1
- package/dist/phases/statistics/methods/Density2dStatistic.js +13 -11
- package/dist/phases/statistics/methods/DensityStatistic.d.ts +1 -1
- package/dist/phases/statistics/methods/DensityStatistic.js +11 -9
- package/dist/phases/statistics/methods/DeviationStatistic.d.ts +8 -0
- package/dist/phases/statistics/methods/DeviationStatistic.js +111 -0
- package/dist/phases/statistics/methods/MovingAverageStatistic.d.ts +1 -1
- package/dist/phases/statistics/methods/MovingAverageStatistic.js +11 -9
- package/dist/phases/statistics/methods/RegressionStatistic.d.ts +1 -1
- package/dist/phases/statistics/methods/RegressionStatistic.js +16 -14
- package/dist/phases/tooltip/TooltipPhase.d.ts +4 -2
- package/dist/phases/tooltip/TooltipPhase.js +10 -3
- package/dist/phases/transforms/ProcessedPositions.d.ts +30 -0
- package/dist/phases/transforms/ProcessedPositions.js +74 -0
- package/dist/phases/transforms/TransformsPhase.d.ts +5 -42
- package/dist/phases/transforms/TransformsPhase.js +67 -58
- package/dist/phases/transforms/ValueSelection.d.ts +30 -0
- package/dist/phases/transforms/ValueSelection.js +53 -0
- package/dist/plots/{heatmap → correlation/heatmap}/Plot.svelte +5 -2
- package/dist/plots/{heatmap → correlation/heatmap}/Plot.svelte.d.ts +2 -2
- package/dist/plots/{heatmap → correlation/heatmap}/defaults.d.ts +2 -2
- package/dist/plots/{heatmap → correlation/heatmap}/defaults.js +5 -5
- package/dist/plots/{heatmap → correlation/heatmap}/markers.d.ts +4 -4
- package/dist/plots/{heatmap → correlation/heatmap}/markers.js +4 -3
- package/dist/plots/{scatter → correlation/scatter}/Plot.svelte +5 -2
- package/dist/plots/{scatter → correlation/scatter}/Plot.svelte.d.ts +2 -2
- package/dist/plots/{scatter → correlation/scatter}/defaults.d.ts +2 -2
- package/dist/plots/{scatter → correlation/scatter}/defaults.js +6 -5
- package/dist/plots/{scatter → correlation/scatter}/markers.d.ts +4 -4
- package/dist/plots/{scatter → correlation/scatter}/markers.js +5 -4
- package/dist/plots/distribution/box/BoxSummaries.d.ts +19 -0
- package/dist/plots/distribution/box/BoxSummaries.js +101 -0
- package/dist/plots/distribution/box/Plot.svelte +42 -0
- package/dist/plots/distribution/box/Plot.svelte.d.ts +26 -0
- package/dist/plots/distribution/box/defaults.d.ts +12 -0
- package/dist/plots/distribution/box/defaults.js +34 -0
- package/dist/plots/distribution/box/markers.d.ts +12 -0
- package/dist/plots/distribution/box/markers.js +34 -0
- package/dist/plots/distribution/density/Plot.svelte +45 -0
- package/dist/plots/distribution/density/Plot.svelte.d.ts +26 -0
- package/dist/plots/distribution/density/defaults.d.ts +9 -0
- package/dist/plots/distribution/density/defaults.js +29 -0
- package/dist/plots/distribution/density/markers.d.ts +9 -0
- package/dist/plots/distribution/density/markers.js +42 -0
- package/dist/plots/{histogram → distribution/histogram}/Plot.svelte +2 -2
- package/dist/plots/{histogram → distribution/histogram}/Plot.svelte.d.ts +2 -2
- package/dist/plots/{histogram → distribution/histogram}/defaults.d.ts +2 -2
- package/dist/plots/{histogram → distribution/histogram}/defaults.js +4 -4
- package/dist/plots/{histogram → distribution/histogram}/markers.d.ts +3 -3
- package/dist/plots/{histogram → distribution/histogram}/markers.js +7 -7
- package/dist/plots/{pyramid → distribution/pyramid}/Plot.svelte +5 -2
- package/dist/plots/{pyramid → distribution/pyramid}/Plot.svelte.d.ts +2 -2
- package/dist/plots/{pyramid → distribution/pyramid}/defaults.d.ts +2 -2
- package/dist/plots/{pyramid → distribution/pyramid}/defaults.js +7 -6
- package/dist/plots/{pyramid → distribution/pyramid}/markers.d.ts +4 -4
- package/dist/plots/{pyramid → distribution/pyramid}/markers.js +8 -11
- package/dist/plots/distribution/violin/Plot.svelte +45 -0
- package/dist/plots/distribution/violin/Plot.svelte.d.ts +26 -0
- package/dist/plots/distribution/violin/defaults.d.ts +10 -0
- package/dist/plots/distribution/violin/defaults.js +58 -0
- package/dist/plots/distribution/violin/markers.d.ts +10 -0
- package/dist/plots/distribution/violin/markers.js +71 -0
- package/dist/plots/{area → evolution/area}/Plot.svelte +2 -2
- package/dist/plots/{area → evolution/area}/Plot.svelte.d.ts +2 -2
- package/dist/plots/{area → evolution/area}/defaults.d.ts +2 -2
- package/dist/plots/{area → evolution/area}/defaults.js +2 -0
- package/dist/plots/{area → evolution/area}/markers.d.ts +2 -2
- package/dist/plots/{area → evolution/area}/markers.js +2 -3
- package/dist/plots/{line → evolution/line}/Plot.svelte +2 -2
- package/dist/plots/{line → evolution/line}/Plot.svelte.d.ts +2 -2
- package/dist/plots/{line → evolution/line}/defaults.d.ts +2 -2
- package/dist/plots/{line → evolution/line}/defaults.js +2 -0
- package/dist/plots/{line → evolution/line}/markers.d.ts +11 -8
- package/dist/plots/{line → evolution/line}/markers.js +7 -6
- package/dist/plots/evolution/slope/Plot.svelte +42 -0
- package/dist/plots/evolution/slope/Plot.svelte.d.ts +26 -0
- package/dist/plots/evolution/slope/defaults.d.ts +8 -0
- package/dist/plots/evolution/slope/defaults.js +31 -0
- package/dist/plots/evolution/slope/markers.d.ts +16 -0
- package/dist/plots/evolution/slope/markers.js +79 -0
- package/dist/plots/evolution/sparkline/Plot.svelte +45 -0
- package/dist/plots/evolution/sparkline/Plot.svelte.d.ts +26 -0
- package/dist/plots/evolution/sparkline/defaults.d.ts +7 -0
- package/dist/plots/evolution/sparkline/defaults.js +23 -0
- package/dist/plots/evolution/sparkline/markers.d.ts +7 -0
- package/dist/plots/evolution/sparkline/markers.js +56 -0
- package/dist/plots/{geo → map/geo}/Core.svelte +11 -10
- package/dist/plots/{geo → map/geo}/Core.svelte.d.ts +1 -1
- package/dist/plots/map/geo/GeoFeatures.svelte.d.ts +9 -0
- package/dist/plots/map/geo/GeoFeatures.svelte.js +55 -0
- package/dist/plots/map/geo/GeoGeometry.d.ts +27 -0
- package/dist/plots/map/geo/GeoGeometry.js +142 -0
- package/dist/plots/map/geo/GeoSegments.d.ts +16 -0
- package/dist/plots/map/geo/GeoSegments.js +23 -0
- package/dist/plots/{geo → map/geo}/Plot.svelte +10 -10
- package/dist/plots/{geo → map/geo}/Plot.svelte.d.ts +2 -2
- package/dist/plots/{geo → map/geo}/defaults.d.ts +2 -2
- package/dist/plots/{geo → map/geo}/defaults.js +1 -1
- package/dist/plots/{geo → map/geo}/phases/data.d.ts +1 -1
- package/dist/plots/{geo → map/geo}/phases/data.js +7 -6
- package/dist/plots/{geo → map/geo}/phases/hover.d.ts +1 -1
- package/dist/plots/{geo → map/geo}/phases/hover.js +5 -5
- package/dist/plots/{geo → map/geo}/phases/markers.d.ts +1 -1
- package/dist/plots/{geo → map/geo}/phases/markers.js +8 -13
- package/dist/plots/{geo → map/geo}/phases/scales.d.ts +2 -2
- package/dist/plots/{geo → map/geo}/phases/scales.js +28 -12
- package/dist/plots/{geo → map/geo}/phases/tooltip.d.ts +1 -1
- package/dist/plots/map/geo/phases/tooltip.js +5 -0
- package/dist/plots/{geo → map/geo}/slices.d.ts +2 -2
- package/dist/plots/{geo → map/geo}/slices.js +7 -4
- package/dist/plots/{bar → ranking/bar}/Plot.svelte +2 -2
- package/dist/plots/{bar → ranking/bar}/Plot.svelte.d.ts +2 -2
- package/dist/plots/ranking/bar/defaults.d.ts +16 -0
- package/dist/plots/{bar → ranking/bar}/defaults.js +17 -15
- package/dist/plots/{bar → ranking/bar}/markers.d.ts +8 -8
- package/dist/plots/{bar → ranking/bar}/markers.js +11 -19
- package/dist/plots/ranking/bullet/Plot.svelte +42 -0
- package/dist/plots/ranking/bullet/Plot.svelte.d.ts +26 -0
- package/dist/plots/ranking/bullet/defaults.d.ts +8 -0
- package/dist/plots/ranking/bullet/defaults.js +24 -0
- package/dist/plots/ranking/bullet/markers.d.ts +10 -0
- package/dist/plots/ranking/bullet/markers.js +90 -0
- package/dist/plots/ranking/cleveland/ClevelandConnector.d.ts +48 -0
- package/dist/plots/ranking/cleveland/ClevelandConnector.js +140 -0
- package/dist/plots/ranking/cleveland/ClevelandMarkers.d.ts +33 -0
- package/dist/plots/ranking/cleveland/ClevelandMarkers.js +375 -0
- package/dist/plots/ranking/cleveland/ClevelandRanges.d.ts +31 -0
- package/dist/plots/ranking/cleveland/ClevelandRanges.js +116 -0
- package/dist/plots/ranking/cleveland/Plot.svelte +45 -0
- package/dist/plots/ranking/cleveland/Plot.svelte.d.ts +26 -0
- package/dist/plots/ranking/cleveland/defaults.d.ts +13 -0
- package/dist/plots/ranking/cleveland/defaults.js +66 -0
- package/dist/plots/ranking/dumbbell/Plot.svelte +45 -0
- package/dist/plots/ranking/dumbbell/Plot.svelte.d.ts +26 -0
- package/dist/plots/ranking/dumbbell/defaults.d.ts +9 -0
- package/dist/plots/ranking/dumbbell/defaults.js +19 -0
- package/dist/plots/ranking/forest/Plot.svelte +42 -0
- package/dist/plots/ranking/forest/Plot.svelte.d.ts +26 -0
- package/dist/plots/ranking/forest/defaults.d.ts +11 -0
- package/dist/plots/ranking/forest/defaults.js +20 -0
- package/dist/plots/ranking/lollipop/Plot.svelte +45 -0
- package/dist/plots/ranking/lollipop/Plot.svelte.d.ts +26 -0
- package/dist/plots/ranking/lollipop/defaults.d.ts +9 -0
- package/dist/plots/ranking/lollipop/defaults.js +18 -0
- package/dist/plots/utils/RowNumbers.d.ts +16 -0
- package/dist/plots/utils/RowNumbers.js +24 -0
- package/dist/plots/utils/gaps.js +1 -1
- package/dist/plots/utils/segments.js +1 -1
- package/dist/types/configuration/styling.d.ts +287 -132
- package/dist/types/layout/composer.d.ts +5 -2
- package/dist/types/layout/coordinates.d.ts +5 -4
- package/dist/types/layout/legend.d.ts +21 -5
- package/dist/types/layout/plot.d.ts +44 -1
- package/dist/types/layout/scales.d.ts +51 -3
- package/dist/types/layout/statistics/deviation.d.ts +40 -0
- package/dist/types/layout/statistics/index.d.ts +7 -2
- package/dist/types/layout/styles/base.d.ts +18 -0
- package/dist/types/layout/styles/bullet.d.ts +25 -0
- package/dist/types/layout/styles/connector.d.ts +98 -0
- package/dist/types/layout/styles/curve.d.ts +11 -0
- package/dist/types/layout/styles/frame.d.ts +17 -0
- package/dist/types/layout/styles/gaps.d.ts +12 -0
- package/dist/types/layout/styles/geo.d.ts +55 -0
- package/dist/types/layout/styles/index.d.ts +8 -0
- package/dist/types/layout/styles/index.js +8 -0
- package/dist/types/layout/styles/values.d.ts +47 -0
- package/dist/types/layout/timeline.d.ts +19 -7
- package/dist/types/layout/tooltip.d.ts +6 -2
- package/dist/types/markers/axis/area.d.ts +2 -2
- package/dist/types/markers/axis/arrow.d.ts +3 -0
- package/dist/types/markers/axis/axisBasedMarkersConfig.d.ts +2 -1
- package/dist/types/markers/axis/bar.d.ts +1 -1
- package/dist/types/markers/axis/box.d.ts +5 -0
- package/dist/types/markers/axis/difference.d.ts +2 -2
- package/dist/types/markers/axis/image.d.ts +3 -2
- package/dist/types/markers/axis/line.d.ts +2 -0
- package/dist/types/markers/axis/rule.d.ts +9 -0
- package/dist/types/markers/axis/trail.d.ts +2 -3
- package/dist/types/markers/axis/violin.d.ts +25 -0
- package/dist/types/markers/basic/dot.d.ts +3 -2
- package/dist/types/markers/basic/text.d.ts +13 -3
- package/dist/types/markers/channels/commonMarkerConfig.d.ts +7 -3
- package/dist/types/markers/channels/commonMarkerConfigWithRowOffset.d.ts +13 -0
- package/dist/types/markers/common.d.ts +1 -1
- package/dist/types/markers/common.js +1 -0
- package/dist/types/markers/geo/link.d.ts +5 -1
- package/dist/types/phases/hover/phase.d.ts +6 -0
- package/dist/types/phases/index.d.ts +1 -1
- package/dist/types/phases/scales/phase.d.ts +5 -1
- package/dist/types/phases/state.d.ts +20 -4
- package/dist/types/phases/statistics/phase.d.ts +3 -1
- package/dist/types/phases/statistics/source.d.ts +3 -1
- package/dist/types/phases/transforms/phase.d.ts +32 -0
- package/dist/types/plots/{heatmap → correlation/heatmap}/props.d.ts +6 -6
- package/dist/types/plots/{heatmap → correlation/heatmap}/state.d.ts +4 -4
- package/dist/types/plots/{scatter → correlation/scatter}/props.d.ts +6 -6
- package/dist/types/plots/{scatter → correlation/scatter}/state.d.ts +2 -2
- package/dist/types/plots/distribution/box/props.d.ts +10 -0
- package/dist/types/plots/distribution/box/state.d.ts +23 -0
- package/dist/types/plots/distribution/density/props.d.ts +23 -0
- package/dist/types/plots/distribution/density/state.d.ts +6 -0
- package/dist/types/plots/distribution/density/state.js +1 -0
- package/dist/types/plots/{histogram → distribution/histogram}/props.d.ts +7 -7
- package/dist/types/plots/distribution/histogram/props.js +1 -0
- package/dist/types/plots/{histogram → distribution/histogram}/state.d.ts +2 -2
- package/dist/types/plots/distribution/histogram/state.js +1 -0
- package/dist/types/plots/{pyramid → distribution/pyramid}/props.d.ts +6 -6
- package/dist/types/plots/distribution/pyramid/props.js +1 -0
- package/dist/types/plots/{pyramid → distribution/pyramid}/state.d.ts +3 -3
- package/dist/types/plots/distribution/pyramid/state.js +1 -0
- package/dist/types/plots/distribution/violin/props.d.ts +23 -0
- package/dist/types/plots/distribution/violin/props.js +1 -0
- package/dist/types/plots/distribution/violin/state.d.ts +6 -0
- package/dist/types/plots/distribution/violin/state.js +1 -0
- package/dist/types/plots/{area → evolution/area}/props.d.ts +6 -6
- package/dist/types/plots/evolution/area/props.js +1 -0
- package/dist/types/plots/{area → evolution/area}/state.d.ts +2 -2
- package/dist/types/plots/evolution/area/state.js +1 -0
- package/dist/types/plots/evolution/line/props.d.ts +10 -0
- package/dist/types/plots/evolution/line/props.js +1 -0
- package/dist/types/plots/{line → evolution/line}/state.d.ts +3 -3
- package/dist/types/plots/evolution/line/state.js +1 -0
- package/dist/types/plots/evolution/slope/props.d.ts +5 -0
- package/dist/types/plots/evolution/slope/props.js +1 -0
- package/dist/types/plots/evolution/slope/state.d.ts +5 -0
- package/dist/types/plots/evolution/slope/state.js +1 -0
- package/dist/types/plots/evolution/sparkline/props.d.ts +5 -0
- package/dist/types/plots/evolution/sparkline/props.js +1 -0
- package/dist/types/plots/evolution/sparkline/state.d.ts +5 -0
- package/dist/types/plots/evolution/sparkline/state.js +1 -0
- package/dist/types/plots/{geo → map/geo}/props.d.ts +8 -8
- package/dist/types/plots/map/geo/props.js +1 -0
- package/dist/types/plots/{geo → map/geo}/state.d.ts +18 -11
- package/dist/types/plots/map/geo/state.js +1 -0
- package/dist/types/plots/props.d.ts +3 -1
- package/dist/types/plots/{bar → ranking/bar}/props.d.ts +6 -6
- package/dist/types/plots/ranking/bar/props.js +1 -0
- package/dist/types/plots/{bar → ranking/bar}/state.d.ts +2 -2
- package/dist/types/plots/ranking/bar/state.js +1 -0
- package/dist/types/plots/ranking/bullet/props.d.ts +22 -0
- package/dist/types/plots/ranking/bullet/props.js +1 -0
- package/dist/types/plots/ranking/bullet/state.d.ts +5 -0
- package/dist/types/plots/ranking/bullet/state.js +1 -0
- package/dist/types/plots/ranking/cleveland/props.d.ts +10 -0
- package/dist/types/plots/ranking/cleveland/props.js +1 -0
- package/dist/types/plots/ranking/cleveland/state.d.ts +49 -0
- package/dist/types/plots/ranking/cleveland/state.js +1 -0
- package/dist/types/plots/ranking/dumbbell/props.d.ts +10 -0
- package/dist/types/plots/ranking/dumbbell/props.js +1 -0
- package/dist/types/plots/ranking/dumbbell/state.d.ts +5 -0
- package/dist/types/plots/ranking/dumbbell/state.js +1 -0
- package/dist/types/plots/ranking/forest/props.d.ts +23 -0
- package/dist/types/plots/ranking/forest/props.js +1 -0
- package/dist/types/plots/ranking/forest/state.d.ts +5 -0
- package/dist/types/plots/ranking/forest/state.js +1 -0
- package/dist/types/plots/ranking/lollipop/props.d.ts +10 -0
- package/dist/types/plots/ranking/lollipop/props.js +1 -0
- package/dist/types/plots/ranking/lollipop/state.d.ts +5 -0
- package/dist/types/plots/ranking/lollipop/state.js +1 -0
- package/dist/types/plots/segments/common.d.ts +4 -1
- package/dist/utils/OpacityScale.d.ts +14 -0
- package/dist/utils/OpacityScale.js +43 -0
- package/dist/utils/{symbol.d.ts → SymbolPath.d.ts} +0 -12
- package/dist/utils/{symbol.js → SymbolPath.js} +0 -24
- package/dist/utils/SymbolScale.d.ts +18 -0
- package/dist/utils/SymbolScale.js +29 -0
- package/dist/utils/color/ColorRamp.d.ts +27 -0
- package/dist/utils/color/ColorRamp.js +120 -0
- package/dist/utils/color/CssColor.d.ts +19 -0
- package/dist/utils/color/CssColor.js +114 -0
- package/dist/utils/color/Palette.d.ts +21 -0
- package/dist/utils/color/Palette.js +52 -0
- package/dist/utils/color/index.d.ts +11 -3
- package/dist/utils/color/index.js +14 -3
- package/dist/utils/grouping.js +1 -1
- package/docs/architecture.md +1 -1
- package/docs/chrome.md +39 -8
- package/docs/composer.md +19 -3
- package/docs/concepts.md +1 -1
- package/docs/development.md +14 -5
- package/docs/facets.md +62 -8
- package/docs/getting-started.md +8 -9
- package/docs/legend.md +73 -24
- package/docs/markers.md +45 -32
- package/docs/plots/correlation/heatmap.md +26 -0
- package/docs/plots/correlation/scatter.md +35 -0
- package/docs/plots/distribution/box.md +28 -0
- package/docs/plots/distribution/density.md +26 -0
- package/docs/plots/distribution/histogram.md +33 -0
- package/docs/plots/distribution/pyramid.md +31 -0
- package/docs/plots/distribution/violin.md +35 -0
- package/docs/plots/evolution/area.md +32 -0
- package/docs/plots/evolution/line.md +93 -0
- package/docs/plots/evolution/slope.md +39 -0
- package/docs/plots/evolution/sparkline.md +34 -0
- package/docs/plots/ranking/bar.md +59 -0
- package/docs/plots/ranking/bullet.md +37 -0
- package/docs/plots/ranking/cleveland.md +54 -0
- package/docs/plots/ranking/dumbbell.md +39 -0
- package/docs/plots/ranking/forest.md +40 -0
- package/docs/plots/ranking/lollipop.md +39 -0
- package/docs/plots.md +22 -154
- package/docs/scales.md +50 -27
- package/docs/state.md +1 -1
- package/docs/styles-and-segments.md +96 -39
- package/docs/theming.md +33 -19
- package/docs/timeline.md +62 -28
- package/docs/tooltip-and-hover.md +72 -24
- package/docs/transforms-and-statistics.md +56 -25
- package/examples/BarValues.svelte +2 -2
- package/examples/Box.svelte +7 -0
- package/examples/Bullet.svelte +17 -0
- package/examples/Chrome.svelte +17 -0
- package/examples/ChromeOrder.svelte +18 -0
- package/examples/Cleveland.svelte +15 -0
- package/examples/Composer.svelte +23 -0
- package/examples/CustomTooltip.svelte +21 -14
- package/examples/Density.svelte +7 -0
- package/examples/Dumbbell.svelte +16 -0
- package/examples/Facets.svelte +3 -3
- package/examples/FacetsCarousel.svelte +14 -0
- package/examples/FacetsRowsCols.svelte +23 -0
- package/examples/FirstPlot.svelte +7 -0
- package/examples/Forest.svelte +17 -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/LegendSections.svelte +27 -0
- package/examples/LegendToggle.svelte +3 -3
- package/examples/LineByRegion.svelte +18 -0
- package/examples/LineDates.svelte +15 -0
- package/examples/LineStep.svelte +16 -0
- package/examples/LineStepSegment.svelte +18 -0
- package/examples/Lollipop.svelte +17 -0
- package/examples/Markers.svelte +27 -0
- package/examples/MovingAverage.svelte +15 -0
- package/examples/Pyramid.svelte +14 -0
- package/examples/Regression.svelte +14 -0
- package/examples/ResponsiveLine.svelte +7 -7
- package/examples/Scales.svelte +26 -0
- package/examples/Scatter.svelte +16 -0
- package/examples/SegmentHighlight.svelte +22 -0
- package/examples/Segments.svelte +11 -3
- package/examples/SegmentsBySeries.svelte +25 -0
- package/examples/Slope.svelte +17 -0
- package/examples/Sparkline.svelte +14 -0
- package/examples/StackedArea.svelte +16 -0
- package/examples/StackedBars.svelte +15 -0
- package/examples/TimelinePlayer.svelte +8 -7
- package/examples/TimelineRule.svelte +19 -0
- package/examples/Tooltip.svelte +3 -3
- package/examples/ValueLabels.svelte +21 -0
- package/examples/Violin.svelte +14 -0
- package/examples/datasets/argentina-chile-trends.ts +34 -0
- package/examples/datasets/commodity-prices.ts +48 -0
- package/examples/datasets/countries-over-time.ts +368 -0
- package/examples/datasets/daily-temperature.ts +121 -0
- package/examples/datasets/earthquakes.ts +977 -0
- package/examples/datasets/flight-routes.ts +29 -0
- package/examples/datasets/height-density.ts +37 -0
- package/examples/datasets/heights.ts +370 -0
- package/examples/datasets/index.ts +24 -0
- package/examples/datasets/inflation-by-region.ts +44 -0
- package/examples/datasets/inflation-ranges.ts +34 -0
- package/examples/datasets/iris-flower.ts +207 -0
- package/examples/datasets/life-expectancy.ts +95 -0
- package/examples/datasets/napoleons-march.ts +182 -0
- package/examples/datasets/penguins.ts +54 -0
- package/examples/datasets/population-by-age-with-gaps.ts +23 -0
- package/examples/datasets/population-by-age.ts +890 -0
- package/examples/datasets/province-population.ts +521 -0
- package/examples/datasets/stock-prices.ts +63 -0
- package/examples/datasets/weather-stations-over-time.ts +31 -0
- package/examples/datasets/weather-stations.ts +22 -0
- package/examples/datasets/wind-vectors.ts +30 -0
- package/examples/datasets/world-temperature.ts +400 -0
- package/llms-full.txt +51 -12
- package/llms.txt +60 -4
- package/package.json +12 -2
- package/dist/layout/scales/buildScale.d.ts +0 -8
- package/dist/layout/scales/buildScale.js +0 -67
- package/dist/layout/scales/niceDomain.d.ts +0 -23
- package/dist/layout/scales/niceDomain.js +0 -59
- package/dist/plots/bar/defaults.d.ts +0 -9
- package/dist/plots/geo/features.svelte.d.ts +0 -5
- package/dist/plots/geo/features.svelte.js +0 -44
- package/dist/plots/geo/phases/tooltip.js +0 -5
- package/dist/plots/utils/geoAccessors.d.ts +0 -72
- package/dist/plots/utils/geoAccessors.js +0 -220
- package/dist/plots/utils/geoSegments.d.ts +0 -29
- package/dist/plots/utils/geoSegments.js +0 -37
- package/dist/types/layout/styles.d.ts +0 -122
- package/dist/types/markers/axis/curveName.d.ts +0 -2
- package/dist/types/plots/line/props.d.ts +0 -10
- package/dist/utils/color/contrast.d.ts +0 -9
- package/dist/utils/color/contrast.js +0 -40
- package/dist/utils/color/cssColor.d.ts +0 -4
- package/dist/utils/color/cssColor.js +0 -77
- package/dist/utils/color/ramp.d.ts +0 -17
- package/dist/utils/color/ramp.js +0 -110
- package/dist/utils/opacity.d.ts +0 -9
- package/dist/utils/opacity.js +0 -38
- package/examples/data.ts +0 -12
- /package/dist/types/layout/{styles.js → statistics/deviation.js} +0 -0
- /package/dist/types/{markers/axis/curveName.js → layout/styles/base.js} +0 -0
- /package/dist/types/{plots/area/props.js → layout/styles/bullet.js} +0 -0
- /package/dist/types/{plots/area/state.js → layout/styles/connector.js} +0 -0
- /package/dist/types/{plots/bar/props.js → layout/styles/curve.js} +0 -0
- /package/dist/types/{plots/bar/state.js → layout/styles/frame.js} +0 -0
- /package/dist/types/{plots/geo/props.js → layout/styles/gaps.js} +0 -0
- /package/dist/types/{plots/geo/state.js → layout/styles/geo.js} +0 -0
- /package/dist/types/{plots/heatmap/props.js → layout/styles/values.js} +0 -0
- /package/dist/types/{plots/heatmap/state.js → markers/axis/violin.js} +0 -0
- /package/dist/types/{plots/histogram/props.js → markers/channels/commonMarkerConfigWithRowOffset.js} +0 -0
- /package/dist/types/plots/{line → correlation/heatmap}/props.js +0 -0
- /package/dist/types/plots/{histogram → correlation/heatmap}/state.js +0 -0
- /package/dist/types/plots/{pyramid → correlation/scatter}/props.js +0 -0
- /package/dist/types/plots/{line → correlation/scatter}/state.js +0 -0
- /package/dist/types/plots/{scatter → distribution/box}/props.js +0 -0
- /package/dist/types/plots/{pyramid → distribution/box}/state.js +0 -0
- /package/dist/types/plots/{scatter/state.js → distribution/density/props.js} +0 -0
- /package/dist/{plots/utils → utils}/accessors.d.ts +0 -0
- /package/dist/{plots/utils → utils}/accessors.js +0 -0
|
@@ -10,35 +10,37 @@
|
|
|
10
10
|
|
|
11
11
|
const plot = usePlot();
|
|
12
12
|
const isHorizontal = $derived(plot.axes?.isHorizontal ?? false);
|
|
13
|
+
const TickMark = $derived(isHorizontal ? TickX : TickY);
|
|
13
14
|
|
|
14
15
|
const cfg = $derived(getConfiguration());
|
|
15
16
|
const data = $derived(marker.data ?? []);
|
|
16
17
|
const channelStroke = $derived(MarkerChannels.buildFill(data, marker.color, marker.scales, cfg));
|
|
17
18
|
const stroke = $derived(channelStroke ?? marker.styles?.stroke ?? 'currentColor');
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* A tick across a band axis spans the whole band, whatever `tickLength` says -
|
|
22
|
+
* svelteplot reads it only off a band-less axis. A fixed `tickLength` there is
|
|
23
|
+
* made true by insetting the tick from both edges of its band.
|
|
24
|
+
*/
|
|
25
|
+
const inset = $derived.by(() => {
|
|
26
|
+
const length = marker.tickLength;
|
|
27
|
+
const across = plot.svelteplot.scales[isHorizontal ? 'y' : 'x'];
|
|
28
|
+
if (typeof length !== 'number' || across.type !== 'band') return undefined;
|
|
29
|
+
return Math.max(0, (across.fn.bandwidth() - length) / 2);
|
|
30
|
+
});
|
|
31
|
+
/** svelteplot's tick marks read `inset` though their types do not list it. */
|
|
32
|
+
const insetProps = $derived((inset === undefined ? {} : { inset }) as Record<string, unknown>);
|
|
18
33
|
</script>
|
|
19
34
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
{:else}
|
|
33
|
-
<TickY
|
|
34
|
-
{data}
|
|
35
|
-
x={marker.x}
|
|
36
|
-
y={marker.y}
|
|
37
|
-
tickLength={marker.tickLength}
|
|
38
|
-
{stroke}
|
|
39
|
-
strokeWidth={marker.styles?.strokeWidth}
|
|
40
|
-
strokeOpacity={marker.styles?.strokeOpacity}
|
|
41
|
-
strokeDasharray={marker.styles?.strokeDasharray}
|
|
42
|
-
strokeLinecap={marker.styles?.strokeLinecap}
|
|
43
|
-
/>
|
|
44
|
-
{/if}
|
|
35
|
+
<TickMark
|
|
36
|
+
{data}
|
|
37
|
+
x={marker.x}
|
|
38
|
+
y={marker.y}
|
|
39
|
+
tickLength={marker.tickLength}
|
|
40
|
+
{...insetProps}
|
|
41
|
+
{stroke}
|
|
42
|
+
strokeWidth={marker.styles?.strokeWidth}
|
|
43
|
+
strokeOpacity={marker.styles?.strokeOpacity}
|
|
44
|
+
strokeDasharray={marker.styles?.strokeDasharray}
|
|
45
|
+
strokeLinecap={marker.styles?.strokeLinecap}
|
|
46
|
+
/>
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ChannelScalesConfig } from '../../types/layout/scales';
|
|
2
|
+
import type { ProcessedData } from '../../types/phases';
|
|
2
3
|
import type { SymbolType } from '../../types/plots/constants';
|
|
3
4
|
import type { PlotStylesConfig } from '../../types/configuration/styling';
|
|
4
5
|
/** One resolved opacity bucket: every row in `data` renders at exactly `value`. */
|
|
@@ -11,6 +12,29 @@ export type OpacityBucket<TData> = {
|
|
|
11
12
|
* over its rows, shared by every marker kind that intersects `CommonMarkerConfig`.
|
|
12
13
|
*/
|
|
13
14
|
export declare class MarkerChannels {
|
|
15
|
+
/**
|
|
16
|
+
* The scales a marker with none of its own draws with: the plot's, except
|
|
17
|
+
* a numeric color `domain` - it spans the plot's own values, so the
|
|
18
|
+
* marker's own values would all land at one end of it. The scheme (and
|
|
19
|
+
* pivot) carry over; the domain is read from the marker's own rows.
|
|
20
|
+
*/
|
|
21
|
+
static inheritScales(own: ChannelScalesConfig | undefined, plot: ChannelScalesConfig | undefined): ChannelScalesConfig | undefined;
|
|
22
|
+
/** `markers`, each `dot` with no scales of its own carrying the plot's ({@link inheritScales}). */
|
|
23
|
+
static inheritAll<TMarker extends {
|
|
24
|
+
type: string;
|
|
25
|
+
scales?: ChannelScalesConfig;
|
|
26
|
+
}>(markers: TMarker[], plot: ChannelScalesConfig | undefined): TMarker[];
|
|
27
|
+
/**
|
|
28
|
+
* `markers`, each `bollinger` that draws the plot's own rows (it sets no `data`)
|
|
29
|
+
* and no `x` or `y` of its own, reading the plot's: they are the same rows, so
|
|
30
|
+
* the same channels place them.
|
|
31
|
+
*/
|
|
32
|
+
static inheritPosition<TMarker extends {
|
|
33
|
+
type: string;
|
|
34
|
+
data?: unknown;
|
|
35
|
+
x?: unknown;
|
|
36
|
+
y?: unknown;
|
|
37
|
+
}>(markers: TMarker[], processed: ProcessedData | undefined): TMarker[];
|
|
14
38
|
/**
|
|
15
39
|
* Resolves a `CommonMarkerConfig` pair into a per-row fill accessor, or
|
|
16
40
|
* `undefined` when `color` is unset (caller falls back to its own flat
|
|
@@ -1,11 +1,45 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { resolveAccessor } from '../../utils/accessors';
|
|
2
|
+
import { ColorRamp } from '../../utils/color';
|
|
3
|
+
import { OpacityScale } from '../../utils/OpacityScale';
|
|
4
|
+
import { SymbolScale } from '../../utils/SymbolScale';
|
|
4
5
|
/**
|
|
5
6
|
* What a marker's own `color`, `symbol` and `opacity` channels resolve to,
|
|
6
7
|
* over its rows, shared by every marker kind that intersects `CommonMarkerConfig`.
|
|
7
8
|
*/
|
|
8
9
|
export class MarkerChannels {
|
|
10
|
+
/**
|
|
11
|
+
* The scales a marker with none of its own draws with: the plot's, except
|
|
12
|
+
* a numeric color `domain` - it spans the plot's own values, so the
|
|
13
|
+
* marker's own values would all land at one end of it. The scheme (and
|
|
14
|
+
* pivot) carry over; the domain is read from the marker's own rows.
|
|
15
|
+
*/
|
|
16
|
+
static inheritScales(own, plot) {
|
|
17
|
+
if (own || !plot?.color)
|
|
18
|
+
return own ?? plot;
|
|
19
|
+
const { domain, ...color } = plot.color;
|
|
20
|
+
const numeric = Array.isArray(domain) && domain.every((v) => typeof v === 'number');
|
|
21
|
+
return { ...plot, color: numeric ? color : plot.color };
|
|
22
|
+
}
|
|
23
|
+
/** `markers`, each `dot` with no scales of its own carrying the plot's ({@link inheritScales}). */
|
|
24
|
+
static inheritAll(markers, plot) {
|
|
25
|
+
return markers.map((marker) => marker.type === 'dot' && !marker.scales
|
|
26
|
+
? { ...marker, scales: MarkerChannels.inheritScales(undefined, plot) }
|
|
27
|
+
: marker);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* `markers`, each `bollinger` that draws the plot's own rows (it sets no `data`)
|
|
31
|
+
* and no `x` or `y` of its own, reading the plot's: they are the same rows, so
|
|
32
|
+
* the same channels place them.
|
|
33
|
+
*/
|
|
34
|
+
static inheritPosition(markers, processed) {
|
|
35
|
+
if (!processed)
|
|
36
|
+
return markers;
|
|
37
|
+
const read = (channel) => channel === undefined ? undefined : resolveAccessor(channel);
|
|
38
|
+
const plot = { x: read(processed.channels.x), y: read(processed.channels.y) };
|
|
39
|
+
return markers.map((marker) => marker.type === 'bollinger' && marker.data === undefined
|
|
40
|
+
? { ...marker, x: marker.x ?? plot.x, y: marker.y ?? plot.y }
|
|
41
|
+
: marker);
|
|
42
|
+
}
|
|
9
43
|
/**
|
|
10
44
|
* Resolves a `CommonMarkerConfig` pair into a per-row fill accessor, or
|
|
11
45
|
* `undefined` when `color` is unset (caller falls back to its own flat
|
|
@@ -29,8 +63,9 @@ export class MarkerChannels {
|
|
|
29
63
|
const domain = allNumeric
|
|
30
64
|
? [Math.min(...rawVals.map(Number)), Math.max(...rawVals.map(Number))]
|
|
31
65
|
: [...new Set(rawVals.map(String))];
|
|
32
|
-
const
|
|
33
|
-
|
|
66
|
+
const colorScale = allNumeric
|
|
67
|
+
? ColorRamp.continuous(cfg, scales?.color, domain)
|
|
68
|
+
: ColorRamp.resolve(scales?.color, domain, cfg.palette);
|
|
34
69
|
return (d) => colorScale(colorFn(d));
|
|
35
70
|
}
|
|
36
71
|
/**
|
|
@@ -51,7 +86,7 @@ export class MarkerChannels {
|
|
|
51
86
|
];
|
|
52
87
|
if (!domain.length)
|
|
53
88
|
return undefined;
|
|
54
|
-
const scale =
|
|
89
|
+
const scale = SymbolScale.resolve(scales?.symbol, domain, cfg.symbols);
|
|
55
90
|
return (d) => scale(symbolFn(d));
|
|
56
91
|
}
|
|
57
92
|
/**
|
|
@@ -83,7 +118,7 @@ export class MarkerChannels {
|
|
|
83
118
|
const domain = allNumeric
|
|
84
119
|
? [Math.min(...rawVals.map(Number)), Math.max(...rawVals.map(Number))]
|
|
85
120
|
: [...new Set(rawVals.map(String))];
|
|
86
|
-
const scale =
|
|
121
|
+
const scale = OpacityScale.resolve(scales?.opacity, domain, cfg.continuous.opacityRange);
|
|
87
122
|
const buckets = new Map();
|
|
88
123
|
for (const d of data) {
|
|
89
124
|
const resolved = scale(opacityFn(d));
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { RowOffset as RowOffsetConfig } from '../../types/markers/channels/commonMarkerConfigWithRowOffset';
|
|
2
|
+
type Offsets = {
|
|
3
|
+
dx?: RowOffsetConfig;
|
|
4
|
+
dy?: RowOffsetConfig;
|
|
5
|
+
};
|
|
6
|
+
type Pixels = {
|
|
7
|
+
dx: number;
|
|
8
|
+
dy: number;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* A marker's `dx`/`dy`: numbers move the whole marker (drawn once by
|
|
12
|
+
* `MarkerOffset`), functions move each row (drawn by the marker itself, with
|
|
13
|
+
* `RowOffsetMarks`), so no part is applied twice.
|
|
14
|
+
*/
|
|
15
|
+
export declare class RowOffset {
|
|
16
|
+
/** The numeric part, for the whole marker; a part left unset takes `fallback`, a function counts as none. */
|
|
17
|
+
static whole(marker: Offsets, fallback?: Pixels): Pixels;
|
|
18
|
+
/** Whether any part of the offset is a function of the row. */
|
|
19
|
+
static isPerRow(marker: Offsets): boolean;
|
|
20
|
+
/** The functional part, for one row. */
|
|
21
|
+
static ofRow(marker: Offsets, row: unknown): Pixels;
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A marker's `dx`/`dy`: numbers move the whole marker (drawn once by
|
|
3
|
+
* `MarkerOffset`), functions move each row (drawn by the marker itself, with
|
|
4
|
+
* `RowOffsetMarks`), so no part is applied twice.
|
|
5
|
+
*/
|
|
6
|
+
export class RowOffset {
|
|
7
|
+
/** The numeric part, for the whole marker; a part left unset takes `fallback`, a function counts as none. */
|
|
8
|
+
static whole(marker, fallback = { dx: 0, dy: 0 }) {
|
|
9
|
+
const part = (own, otherwise) => typeof own === 'function' ? 0 : (own ?? otherwise);
|
|
10
|
+
return { dx: part(marker.dx, fallback.dx), dy: part(marker.dy, fallback.dy) };
|
|
11
|
+
}
|
|
12
|
+
/** Whether any part of the offset is a function of the row. */
|
|
13
|
+
static isPerRow(marker) {
|
|
14
|
+
return typeof marker.dx === 'function' || typeof marker.dy === 'function';
|
|
15
|
+
}
|
|
16
|
+
/** The functional part, for one row. */
|
|
17
|
+
static ofRow(marker, row) {
|
|
18
|
+
return {
|
|
19
|
+
dx: typeof marker.dx === 'function' ? (marker.dx(row) ?? 0) : 0,
|
|
20
|
+
dy: typeof marker.dy === 'function' ? (marker.dy(row) ?? 0) : 0
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<script lang="ts" generics="TRow">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
import { RowOffset } from './RowOffset';
|
|
4
|
+
import type { RowOffset as RowOffsetConfig } from '../../types/markers/channels/commonMarkerConfigWithRowOffset';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Draws a marker's rows through `mark`, each moved by the marker's per-row
|
|
8
|
+
* `dx`/`dy` (a function of the row). A fixed offset is not applied here -
|
|
9
|
+
* `MarkerOffset` moves the whole marker. With no function offset, the rows
|
|
10
|
+
* are drawn together as they are.
|
|
11
|
+
*/
|
|
12
|
+
let {
|
|
13
|
+
marker,
|
|
14
|
+
rows,
|
|
15
|
+
mark
|
|
16
|
+
}: {
|
|
17
|
+
marker: { dx?: RowOffsetConfig; dy?: RowOffsetConfig };
|
|
18
|
+
rows: TRow[];
|
|
19
|
+
mark: Snippet<[TRow[]]>;
|
|
20
|
+
} = $props();
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
{#if RowOffset.isPerRow(marker)}
|
|
24
|
+
{#each rows as row, index (index)}
|
|
25
|
+
{@const { dx, dy } = RowOffset.ofRow(marker, row)}
|
|
26
|
+
<g transform="translate({dx},{dy})">{@render mark([row])}</g>
|
|
27
|
+
{/each}
|
|
28
|
+
{:else}
|
|
29
|
+
{@render mark(rows)}
|
|
30
|
+
{/if}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { RowOffset as RowOffsetConfig } from '../../types/markers/channels/commonMarkerConfigWithRowOffset';
|
|
3
|
+
declare function $$render<TRow>(): {
|
|
4
|
+
props: {
|
|
5
|
+
marker: {
|
|
6
|
+
dx?: RowOffsetConfig;
|
|
7
|
+
dy?: RowOffsetConfig;
|
|
8
|
+
};
|
|
9
|
+
rows: TRow[];
|
|
10
|
+
mark: Snippet<[TRow[]]>;
|
|
11
|
+
};
|
|
12
|
+
exports: {};
|
|
13
|
+
bindings: "";
|
|
14
|
+
slots: {};
|
|
15
|
+
events: {};
|
|
16
|
+
};
|
|
17
|
+
declare class __sveltets_Render<TRow> {
|
|
18
|
+
props(): ReturnType<typeof $$render<TRow>>['props'];
|
|
19
|
+
events(): ReturnType<typeof $$render<TRow>>['events'];
|
|
20
|
+
slots(): ReturnType<typeof $$render<TRow>>['slots'];
|
|
21
|
+
bindings(): "";
|
|
22
|
+
exports(): {};
|
|
23
|
+
}
|
|
24
|
+
interface $$IsomorphicComponent {
|
|
25
|
+
new <TRow>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TRow>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TRow>['props']>, ReturnType<__sveltets_Render<TRow>['events']>, ReturnType<__sveltets_Render<TRow>['slots']>> & {
|
|
26
|
+
$$bindings?: ReturnType<__sveltets_Render<TRow>['bindings']>;
|
|
27
|
+
} & ReturnType<__sveltets_Render<TRow>['exports']>;
|
|
28
|
+
<TRow>(internal: unknown, props: ReturnType<__sveltets_Render<TRow>['props']> & {}): ReturnType<__sveltets_Render<TRow>['exports']>;
|
|
29
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
30
|
+
}
|
|
31
|
+
declare const RowOffsetMarks: $$IsomorphicComponent;
|
|
32
|
+
type RowOffsetMarks<TRow> = InstanceType<typeof RowOffsetMarks<TRow>>;
|
|
33
|
+
export default RowOffsetMarks;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { StrokeStyle } from '../../types/plots/styling';
|
|
2
|
+
/** A stroke channel per row: a field key of the row, or a function of it. */
|
|
3
|
+
type RowChannel<T> = string | ((d: never) => T) | undefined;
|
|
4
|
+
/**
|
|
5
|
+
* The stroke of a line-like marker that takes it row by row (a `rule`, an
|
|
6
|
+
* `arrow`): each of `stroke`, `strokeWidth` and `strokeOpacity` is a field of
|
|
7
|
+
* the row or a function of it, else the marker's own `styles`, else a default.
|
|
8
|
+
* A color and an opacity per row are drawn as they are - svelteplot would map
|
|
9
|
+
* them through its own color and opacity scales.
|
|
10
|
+
*/
|
|
11
|
+
export declare class RowStroke {
|
|
12
|
+
#private;
|
|
13
|
+
/** The props a mark takes for `channels`, over `styles` and the given `fallback`s. */
|
|
14
|
+
static of(channels: {
|
|
15
|
+
stroke?: RowChannel<string | undefined>;
|
|
16
|
+
strokeWidth?: RowChannel<number>;
|
|
17
|
+
strokeOpacity?: RowChannel<number>;
|
|
18
|
+
}, styles: StrokeStyle | undefined, fallback: {
|
|
19
|
+
stroke: string;
|
|
20
|
+
strokeWidth?: number;
|
|
21
|
+
strokeOpacity?: number;
|
|
22
|
+
}): {
|
|
23
|
+
stroke: string | {
|
|
24
|
+
value: (d: Record<string, unknown>) => string | undefined;
|
|
25
|
+
scale: null;
|
|
26
|
+
};
|
|
27
|
+
strokeWidth: number | ((d: Record<string, unknown>) => number) | undefined;
|
|
28
|
+
strokeOpacity: never;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The stroke of a line-like marker that takes it row by row (a `rule`, an
|
|
3
|
+
* `arrow`): each of `stroke`, `strokeWidth` and `strokeOpacity` is a field of
|
|
4
|
+
* the row or a function of it, else the marker's own `styles`, else a default.
|
|
5
|
+
* A color and an opacity per row are drawn as they are - svelteplot would map
|
|
6
|
+
* them through its own color and opacity scales.
|
|
7
|
+
*/
|
|
8
|
+
export class RowStroke {
|
|
9
|
+
/** A per-row channel as the function svelteplot reads. */
|
|
10
|
+
static #accessor(channel) {
|
|
11
|
+
return typeof channel === 'string'
|
|
12
|
+
? (d) => d[channel]
|
|
13
|
+
: channel;
|
|
14
|
+
}
|
|
15
|
+
/** The props a mark takes for `channels`, over `styles` and the given `fallback`s. */
|
|
16
|
+
static of(channels, styles, fallback) {
|
|
17
|
+
const color = RowStroke.#accessor(channels.stroke);
|
|
18
|
+
const width = RowStroke.#accessor(channels.strokeWidth);
|
|
19
|
+
const opacity = RowStroke.#accessor(channels.strokeOpacity);
|
|
20
|
+
return {
|
|
21
|
+
stroke: color ? { value: color, scale: null } : (styles?.stroke ?? fallback.stroke),
|
|
22
|
+
strokeWidth: width ?? styles?.strokeWidth ?? fallback.strokeWidth,
|
|
23
|
+
strokeOpacity: (opacity
|
|
24
|
+
? { value: opacity, scale: null }
|
|
25
|
+
: (styles?.strokeOpacity ?? fallback.strokeOpacity))
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { usePlot } from '../../layout/plot/usePlot';
|
|
3
|
+
import { getConfiguration } from '../../configuration/config.svelte';
|
|
4
|
+
import { resolveAccessor } from '../../utils/accessors';
|
|
5
|
+
import { ViolinProfiles } from './ViolinProfiles';
|
|
6
|
+
import type { ViolinMarkerConfig } from '../../types/markers/common';
|
|
7
|
+
import type { ProcessedRow } from '../../types/phases';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Renders one `'violin'` marker: for each category of its rows, the density
|
|
11
|
+
* curve mirrored around the middle of the category's band, or of the share of
|
|
12
|
+
* it the marker's `slot` takes. The curve is drawn on the plot's own scales;
|
|
13
|
+
* the plot's axes say which of `x`/`y` holds the category.
|
|
14
|
+
*/
|
|
15
|
+
let { marker }: { marker: ViolinMarkerConfig } = $props();
|
|
16
|
+
|
|
17
|
+
const plot = usePlot();
|
|
18
|
+
const cfg = $derived(getConfiguration());
|
|
19
|
+
const isHorizontal = $derived(plot.axes?.isHorizontal ?? false);
|
|
20
|
+
const categoryScale = $derived(
|
|
21
|
+
isHorizontal ? plot.svelteplot.scales.y : plot.svelteplot.scales.x
|
|
22
|
+
);
|
|
23
|
+
const valueScale = $derived(isHorizontal ? plot.svelteplot.scales.x : plot.svelteplot.scales.y);
|
|
24
|
+
|
|
25
|
+
const data = $derived((marker.data ?? []) as ProcessedRow[]);
|
|
26
|
+
const profiles = $derived(
|
|
27
|
+
ViolinProfiles.of(
|
|
28
|
+
data,
|
|
29
|
+
{
|
|
30
|
+
category: resolveAccessor((isHorizontal ? marker.y : marker.x) as never),
|
|
31
|
+
value: resolveAccessor((isHorizontal ? marker.x : marker.y) as never)
|
|
32
|
+
},
|
|
33
|
+
{ kernel: marker.kernel, bandwidth: marker.bandwidth, trim: marker.trim }
|
|
34
|
+
)
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
const slotIndex = $derived(marker.slot?.index ?? 0);
|
|
38
|
+
const slotCount = $derived(marker.slot?.count ?? 1);
|
|
39
|
+
const bandwidth = $derived(categoryScale?.type === 'band' ? categoryScale.fn.bandwidth() : 0);
|
|
40
|
+
const share = $derived(bandwidth / slotCount);
|
|
41
|
+
|
|
42
|
+
/** The pixel point at `along` the value axis and `across` the category axis. */
|
|
43
|
+
const point = (across: number, along: number): [number, number] =>
|
|
44
|
+
isHorizontal ? [along, across] : [across, along];
|
|
45
|
+
const at = (value: number) => Number(valueScale?.fn?.(value as never));
|
|
46
|
+
|
|
47
|
+
const shapes = $derived.by(() => {
|
|
48
|
+
if (categoryScale?.type !== 'band' || !valueScale?.fn) return [];
|
|
49
|
+
return profiles.flatMap((profile) => {
|
|
50
|
+
const start = Number(categoryScale.fn(profile.category as never));
|
|
51
|
+
if (!Number.isFinite(start)) return [];
|
|
52
|
+
const center = start + share * slotIndex + share / 2;
|
|
53
|
+
const full = marker.peak ?? Math.max(...profile.curve.map((p) => p.density));
|
|
54
|
+
const half = (density: number) => (full > 0 ? (density / full) * (share / 2) : 0);
|
|
55
|
+
const side = (sign: 1 | -1) =>
|
|
56
|
+
profile.curve.map((p) => point(center + sign * half(p.density), at(p.value)));
|
|
57
|
+
const outline = [...side(-1), ...side(1).reverse()];
|
|
58
|
+
return [outline.map(([x, y], i) => `${i ? 'L' : 'M'}${x},${y}`).join('') + 'Z'];
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
</script>
|
|
62
|
+
|
|
63
|
+
<g class="dct-violin">
|
|
64
|
+
{#each shapes as d, i (i)}
|
|
65
|
+
<path
|
|
66
|
+
{d}
|
|
67
|
+
fill={marker.styles?.fill}
|
|
68
|
+
fill-opacity={marker.styles?.fillOpacity ?? cfg.violin.fillOpacity}
|
|
69
|
+
stroke={marker.styles?.stroke}
|
|
70
|
+
stroke-width={marker.styles?.strokeWidth}
|
|
71
|
+
stroke-opacity={marker.styles?.strokeOpacity}
|
|
72
|
+
stroke-dasharray={marker.styles?.strokeDasharray}
|
|
73
|
+
/>
|
|
74
|
+
{/each}
|
|
75
|
+
</g>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ViolinMarkerConfig } from '../../types/markers/common';
|
|
2
|
+
type $$ComponentProps = {
|
|
3
|
+
marker: ViolinMarkerConfig;
|
|
4
|
+
};
|
|
5
|
+
declare const ViolinMarker: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
6
|
+
type ViolinMarker = ReturnType<typeof ViolinMarker>;
|
|
7
|
+
export default ViolinMarker;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ProcessedRow } from '../../types/phases';
|
|
2
|
+
import type { DensityKernel } from '../../types/transforms/density';
|
|
3
|
+
/** One violin: a category's density curve. */
|
|
4
|
+
export type ViolinProfile = {
|
|
5
|
+
category: unknown;
|
|
6
|
+
/** The density estimate, in order along the value axis. */
|
|
7
|
+
curve: {
|
|
8
|
+
value: number;
|
|
9
|
+
density: number;
|
|
10
|
+
}[];
|
|
11
|
+
};
|
|
12
|
+
/** How the density of each category is estimated. */
|
|
13
|
+
export type ViolinEstimate = {
|
|
14
|
+
kernel?: DensityKernel;
|
|
15
|
+
bandwidth?: number;
|
|
16
|
+
/** Keeps each curve within its values' own extent. Defaults to `true`. */
|
|
17
|
+
trim?: boolean;
|
|
18
|
+
};
|
|
19
|
+
/** The violins of a set of rows, one per category. */
|
|
20
|
+
export declare class ViolinProfiles {
|
|
21
|
+
#private;
|
|
22
|
+
/** One profile per category of `rows` with at least two values, in the order the rows first reach it. */
|
|
23
|
+
static of(rows: ProcessedRow[], read: {
|
|
24
|
+
category: (row: ProcessedRow) => unknown;
|
|
25
|
+
value: (row: ProcessedRow) => unknown;
|
|
26
|
+
}, estimate?: ViolinEstimate): ViolinProfile[];
|
|
27
|
+
/** The densest point of any of `profiles`, for violins that share one density scale. */
|
|
28
|
+
static peak(profiles: ViolinProfile[]): number;
|
|
29
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Transforms } from '../../phases/transforms/Transforms';
|
|
2
|
+
import { resolveAccessor } from '../../utils/accessors';
|
|
3
|
+
import { isGapValue } from '../../plots/utils/gaps';
|
|
4
|
+
/** The violins of a set of rows, one per category. */
|
|
5
|
+
export class ViolinProfiles {
|
|
6
|
+
/** One profile per category of `rows` with at least two values, in the order the rows first reach it. */
|
|
7
|
+
static of(rows, read, estimate = {}) {
|
|
8
|
+
const groups = new Map();
|
|
9
|
+
for (const row of rows) {
|
|
10
|
+
const raw = read.value(row);
|
|
11
|
+
if (isGapValue(raw))
|
|
12
|
+
continue;
|
|
13
|
+
const value = Number(raw);
|
|
14
|
+
if (!Number.isFinite(value))
|
|
15
|
+
continue;
|
|
16
|
+
const category = read.category(row);
|
|
17
|
+
const key = String(category);
|
|
18
|
+
const group = groups.get(key);
|
|
19
|
+
if (group) {
|
|
20
|
+
group.rows.push(row);
|
|
21
|
+
group.values.push(value);
|
|
22
|
+
}
|
|
23
|
+
else
|
|
24
|
+
groups.set(key, { category, rows: [row], values: [value] });
|
|
25
|
+
}
|
|
26
|
+
return [...groups.values()].flatMap(({ category, rows: own, values }) => {
|
|
27
|
+
if (values.length < 2)
|
|
28
|
+
return [];
|
|
29
|
+
const extent = [Math.min(...values), Math.max(...values)];
|
|
30
|
+
const curve = ViolinProfiles.#curve(own, read.value, estimate, extent);
|
|
31
|
+
return curve.length < 2 ? [] : [{ category, curve }];
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
/** The densest point of any of `profiles`, for violins that share one density scale. */
|
|
35
|
+
static peak(profiles) {
|
|
36
|
+
return Math.max(0, ...profiles.flatMap((p) => p.curve.map((point) => point.density)));
|
|
37
|
+
}
|
|
38
|
+
static #curve(rows, value, estimate, extent) {
|
|
39
|
+
const trim = estimate.trim ?? true;
|
|
40
|
+
const result = Transforms.run({
|
|
41
|
+
type: 'densityY',
|
|
42
|
+
data: rows,
|
|
43
|
+
y: value,
|
|
44
|
+
kernel: estimate.kernel,
|
|
45
|
+
bandwidth: estimate.bandwidth,
|
|
46
|
+
trim
|
|
47
|
+
});
|
|
48
|
+
const along = resolveAccessor(result.y);
|
|
49
|
+
const density = resolveAccessor(result.x);
|
|
50
|
+
return result.data
|
|
51
|
+
.map((row) => ({ value: Number(along(row)), density: Number(density(row)) }))
|
|
52
|
+
.map((p) => (trim ? { ...p, value: Math.min(Math.max(p.value, extent[0]), extent[1]) } : p))
|
|
53
|
+
.filter((p) => Number.isFinite(p.value) && Number.isFinite(p.density));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
const plot = usePlot();
|
|
12
12
|
const isHorizontal = $derived(plot.axes?.isHorizontal ?? false);
|
|
13
|
+
const WaffleMark = $derived(isHorizontal ? WaffleX : WaffleY);
|
|
13
14
|
|
|
14
15
|
const cfg = $derived(getConfiguration());
|
|
15
16
|
const data = $derived(marker.data ?? []);
|
|
@@ -17,40 +18,19 @@
|
|
|
17
18
|
const fill = $derived(channelFill ?? marker.styles?.fill ?? cfg.palette[0]);
|
|
18
19
|
</script>
|
|
19
20
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
strokeOpacity={marker.styles?.strokeOpacity}
|
|
37
|
-
/>
|
|
38
|
-
{:else}
|
|
39
|
-
<WaffleY
|
|
40
|
-
{data}
|
|
41
|
-
x={marker.x}
|
|
42
|
-
y={marker.y}
|
|
43
|
-
y1={marker.y1}
|
|
44
|
-
y2={marker.y2}
|
|
45
|
-
unit={marker.unit}
|
|
46
|
-
multiple={marker.multiple}
|
|
47
|
-
gap={marker.gap}
|
|
48
|
-
round={marker.round}
|
|
49
|
-
borderRadius={marker.styles?.borderRadius}
|
|
50
|
-
{fill}
|
|
51
|
-
fillOpacity={marker.styles?.fillOpacity}
|
|
52
|
-
stroke={marker.styles?.stroke}
|
|
53
|
-
strokeWidth={marker.styles?.strokeWidth}
|
|
54
|
-
strokeOpacity={marker.styles?.strokeOpacity}
|
|
55
|
-
/>
|
|
56
|
-
{/if}
|
|
21
|
+
<WaffleMark
|
|
22
|
+
{data}
|
|
23
|
+
x={marker.x}
|
|
24
|
+
y={marker.y}
|
|
25
|
+
{...isHorizontal ? { x1: marker.x1, x2: marker.x2 } : { y1: marker.y1, y2: marker.y2 }}
|
|
26
|
+
unit={marker.unit}
|
|
27
|
+
multiple={marker.multiple}
|
|
28
|
+
gap={marker.gap}
|
|
29
|
+
round={marker.round}
|
|
30
|
+
borderRadius={marker.styles?.borderRadius}
|
|
31
|
+
{fill}
|
|
32
|
+
fillOpacity={marker.styles?.fillOpacity}
|
|
33
|
+
stroke={marker.styles?.stroke}
|
|
34
|
+
strokeWidth={marker.styles?.strokeWidth}
|
|
35
|
+
strokeOpacity={marker.styles?.strokeOpacity}
|
|
36
|
+
/>
|
|
@@ -15,6 +15,11 @@ export type AxisPipelineProps<TData extends Record<string, unknown>> = {
|
|
|
15
15
|
opacity?: unknown;
|
|
16
16
|
r?: unknown;
|
|
17
17
|
symbol?: unknown;
|
|
18
|
+
lower?: Accessor<TData, unknown>;
|
|
19
|
+
upper?: Accessor<TData, unknown>;
|
|
20
|
+
error?: Accessor<TData, unknown>;
|
|
21
|
+
target?: unknown;
|
|
22
|
+
ranges?: unknown[];
|
|
18
23
|
segments?: unknown;
|
|
19
24
|
styles?: {
|
|
20
25
|
gaps?: unknown;
|
package/dist/phases/Pipeline.js
CHANGED
|
@@ -9,6 +9,7 @@ import { StylesPhase } from './styles/StylesPhase';
|
|
|
9
9
|
import { MarkersPhase } from './markers/MarkersPhase';
|
|
10
10
|
import { TooltipPhase } from './tooltip/TooltipPhase';
|
|
11
11
|
import { HoverPhase } from './hover/HoverPhase';
|
|
12
|
+
import { HoverSettings } from '../layout/hover/HoverSettings';
|
|
12
13
|
import { PlotInteraction } from '../layout/interaction/PlotInteraction.svelte';
|
|
13
14
|
import { DEFAULT_CONFIG } from '../configuration/config.svelte';
|
|
14
15
|
/**
|
|
@@ -77,7 +78,7 @@ export class Pipeline {
|
|
|
77
78
|
new FacetPhase(),
|
|
78
79
|
new DataPhase(kind.data),
|
|
79
80
|
new MappingPhase(kind.mapping),
|
|
80
|
-
new TransformsPhase(kind.transforms),
|
|
81
|
+
new TransformsPhase(kind.transforms, kind.data?.segments?.connect),
|
|
81
82
|
new StatisticsPhase(kind.statistics),
|
|
82
83
|
new SharedScalesPhase(kind.sharedScales, scales),
|
|
83
84
|
scales,
|
|
@@ -143,7 +144,7 @@ export class Pipeline {
|
|
|
143
144
|
return fixed;
|
|
144
145
|
const upToData = this.stages.filter((s) => s.phase === 'data');
|
|
145
146
|
const state = Pipeline.#through(upToData, this.#seed(props), Pipeline.#ctxFor(cfg, null));
|
|
146
|
-
return
|
|
147
|
+
return HoverSettings.strategyOf(state.axes);
|
|
147
148
|
}
|
|
148
149
|
/** The plot's default `timeline.filterMode`. */
|
|
149
150
|
get filterMode() {
|
|
@@ -209,6 +210,11 @@ export class Pipeline {
|
|
|
209
210
|
opacity: props.opacity,
|
|
210
211
|
r: props.r,
|
|
211
212
|
symbol: props.symbol,
|
|
213
|
+
lower: props.lower,
|
|
214
|
+
upper: props.upper,
|
|
215
|
+
error: props.error,
|
|
216
|
+
target: props.target,
|
|
217
|
+
ranges: props.ranges,
|
|
212
218
|
segments: props.segments ?? {},
|
|
213
219
|
styles: props.styles,
|
|
214
220
|
gaps: props.styles?.gaps,
|