@fundar/data-chart-telling 1.1.0 → 1.3.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 +45 -0
- package/README.md +8 -7
- package/dist/configuration/config.svelte.d.ts +1 -1
- package/dist/configuration/config.svelte.js +177 -100
- package/dist/configuration/themes/index.d.ts +5 -1428
- package/dist/index.d.ts +23 -14
- package/dist/index.js +20 -11
- package/dist/layout/base/BasePlotLayout.svelte +115 -50
- 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/facet/scope.d.ts +40 -0
- package/dist/layout/facet/scope.js +104 -0
- 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/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 +39 -15
- package/dist/layout/legend/LegendChannels.js +36 -12
- package/dist/layout/legend/LegendLayout.svelte +9 -1
- package/dist/layout/legend/LegendState.svelte.d.ts +4 -0
- package/dist/layout/legend/LegendState.svelte.js +23 -8
- 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 +35 -8
- package/dist/layout/plot/Plot.svelte +22 -2
- package/dist/layout/plot/Slice.d.ts +5 -1
- package/dist/layout/plot/Slice.js +14 -4
- package/dist/layout/scales/NiceTicks.d.ts +3 -0
- package/dist/layout/scales/NiceTicks.js +4 -0
- package/dist/layout/scales/ScalesLayout.svelte +93 -7
- package/dist/layout/scales/ScalesLayout.svelte.d.ts +5 -0
- package/dist/layout/scales/SveltePlotScale.d.ts +2 -2
- package/dist/layout/scales/SveltePlotScale.js +13 -6
- 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 +80 -21
- package/dist/layout/timeline/TimelineLayout.svelte +1 -1
- package/dist/layout/tooltip/Tooltip.svelte +4 -4
- package/dist/layout/tooltip/Tooltip.svelte.d.ts +4 -4
- package/dist/layout/tooltip/TooltipState.svelte.js +1 -1
- 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.d.ts +6 -1
- package/dist/markers/delta/Delta.js +16 -1
- package/dist/markers/delta/DeltaMarker.svelte +9 -87
- package/dist/markers/delta/DeltaPoint.svelte +97 -0
- package/dist/markers/delta/DeltaPoint.svelte.d.ts +29 -0
- 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 +14 -5
- 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 +5 -0
- package/dist/phases/data/DataPhase.js +3 -3
- package/dist/phases/data/PlotAxes.d.ts +10 -0
- package/dist/phases/data/PlotAxes.js +14 -1
- package/dist/phases/facet/FacetPanels.d.ts +1 -0
- package/dist/phases/facet/FacetPanels.js +1 -0
- package/dist/phases/facet/FacetPhase.d.ts +2 -1
- package/dist/phases/facet/FacetPhase.js +19 -4
- package/dist/phases/mapping/MappingPhase.js +1 -1
- 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.js +21 -7
- package/dist/phases/sharedScales/SharedScalesPhase.d.ts +3 -2
- package/dist/phases/sharedScales/SharedScalesPhase.js +5 -2
- package/dist/phases/statistics/Statistics.d.ts +10 -6
- package/dist/phases/statistics/Statistics.js +20 -10
- package/dist/phases/statistics/StatisticsPhase.js +16 -3
- 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/transforms/ProcessedPositions.js +1 -1
- package/dist/phases/transforms/TransformsPhase.js +49 -3
- 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 +3 -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 +4 -4
- package/dist/plots/{scatter → correlation/scatter}/markers.d.ts +4 -4
- package/dist/plots/{scatter → correlation/scatter}/markers.js +3 -3
- package/dist/plots/{box → distribution/box}/BoxSummaries.d.ts +2 -2
- package/dist/plots/{box → distribution/box}/BoxSummaries.js +6 -6
- package/dist/plots/{box → distribution/box}/Plot.svelte +2 -2
- package/dist/plots/{box → distribution/box}/Plot.svelte.d.ts +2 -2
- package/dist/plots/{box → distribution/box}/defaults.d.ts +2 -2
- package/dist/plots/{box → distribution/box}/defaults.js +1 -1
- package/dist/plots/{box → distribution/box}/markers.d.ts +2 -2
- 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 +3 -3
- package/dist/plots/{histogram → distribution/histogram}/markers.d.ts +3 -3
- package/dist/plots/{histogram → distribution/histogram}/markers.js +5 -5
- 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 +6 -6
- package/dist/plots/{pyramid → distribution/pyramid}/markers.d.ts +4 -4
- package/dist/plots/{pyramid → distribution/pyramid}/markers.js +6 -6
- 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 +1 -1
- 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 +6 -4
- 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 +2 -2
- package/dist/plots/{geo → map/geo}/phases/markers.d.ts +1 -1
- package/dist/plots/{geo → map/geo}/phases/markers.js +6 -10
- 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 +2 -2
- 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 +15 -9
- package/dist/plots/{bar → ranking/bar}/markers.d.ts +8 -8
- package/dist/plots/{bar → ranking/bar}/markers.js +8 -17
- 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.d.ts +4 -1
- package/dist/plots/utils/segments.js +20 -7
- package/dist/types/configuration/styling.d.ts +284 -143
- package/dist/types/layout/coordinates.d.ts +5 -4
- package/dist/types/layout/facet.d.ts +18 -0
- package/dist/types/layout/legend.d.ts +23 -5
- package/dist/types/layout/plot.d.ts +46 -1
- package/dist/types/layout/scales.d.ts +39 -7
- 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 +5 -2
- 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/delta.d.ts +15 -2
- 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 +18 -2
- 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/facet/phase.d.ts +4 -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 +15 -2
- package/dist/types/phases/statistics/source.d.ts +3 -1
- package/dist/types/phases/transforms/phase.d.ts +22 -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/{box → distribution/box}/props.d.ts +6 -6
- package/dist/types/plots/{box → distribution/box}/state.d.ts +3 -3
- 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/{histogram → distribution/histogram}/props.d.ts +7 -7
- 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 +7 -4
- 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/types/plots/segments/config.d.ts +4 -2
- 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 +2 -2
- package/docs/composer.md +2 -2
- package/docs/concepts.md +1 -1
- package/docs/development.md +1 -1
- package/docs/facets.md +50 -3
- package/docs/getting-started.md +2 -2
- package/docs/legend.md +13 -11
- package/docs/markers.md +57 -27
- 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 -280
- package/docs/scales.md +30 -24
- package/docs/styles-and-segments.md +25 -21
- package/docs/theming.md +23 -20
- package/docs/timeline.md +3 -3
- package/docs/tooltip-and-hover.md +10 -10
- package/docs/transforms-and-statistics.md +13 -12
- package/examples/BarValues.svelte +1 -1
- package/examples/Box.svelte +1 -1
- package/examples/Bullet.svelte +17 -0
- package/examples/Chrome.svelte +1 -1
- package/examples/ChromeOrder.svelte +1 -1
- package/examples/Cleveland.svelte +15 -0
- package/examples/Composer.svelte +2 -2
- package/examples/CustomTooltip.svelte +1 -1
- package/examples/Density.svelte +7 -0
- package/examples/Dumbbell.svelte +16 -0
- package/examples/Facets.svelte +1 -1
- package/examples/FacetsCarousel.svelte +1 -1
- package/examples/FacetsRowsCols.svelte +1 -1
- package/examples/FacetsScoped.svelte +26 -0
- package/examples/FirstPlot.svelte +1 -1
- package/examples/Forest.svelte +17 -0
- package/examples/Gaps.svelte +2 -2
- package/examples/GroupedBars.svelte +1 -1
- package/examples/Heatmap.svelte +3 -3
- package/examples/HeatmapSegments.svelte +8 -8
- package/examples/Histogram.svelte +1 -1
- package/examples/HorizontalBars.svelte +1 -1
- package/examples/LegendSections.svelte +1 -1
- package/examples/LegendToggle.svelte +1 -1
- package/examples/LineByRegion.svelte +1 -1
- package/examples/LineDates.svelte +1 -1
- package/examples/LineStep.svelte +16 -0
- package/examples/LineStepSegment.svelte +18 -0
- package/examples/Lollipop.svelte +17 -0
- package/examples/Markers.svelte +1 -1
- package/examples/MovingAverage.svelte +1 -1
- package/examples/Pyramid.svelte +9 -2
- package/examples/Regression.svelte +2 -2
- package/examples/ResponsiveLine.svelte +1 -1
- package/examples/Scales.svelte +1 -1
- package/examples/Scatter.svelte +2 -2
- package/examples/SegmentHighlight.svelte +1 -1
- package/examples/Segments.svelte +1 -1
- package/examples/SegmentsBySeries.svelte +1 -1
- package/examples/Slope.svelte +17 -0
- package/examples/Sparkline.svelte +14 -0
- package/examples/StackedArea.svelte +1 -1
- package/examples/StackedBars.svelte +1 -1
- package/examples/TimelinePlayer.svelte +1 -1
- package/examples/TimelineRule.svelte +1 -1
- package/examples/Tooltip.svelte +1 -1
- package/examples/ValueLabels.svelte +1 -1
- 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 +27 -14
- package/llms.txt +33 -4
- package/package.json +10 -1
- 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 -324
- /package/dist/plots/{box → distribution/box}/markers.js +0 -0
- /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/box/props.js → layout/styles/gaps.js} +0 -0
- /package/dist/types/{plots/box/state.js → layout/styles/geo.js} +0 -0
- /package/dist/types/{plots/geo/props.js → layout/styles/values.js} +0 -0
- /package/dist/types/{plots/geo/state.js → markers/axis/violin.js} +0 -0
- /package/dist/types/{plots/heatmap/props.js → markers/channels/commonMarkerConfigWithRowOffset.js} +0 -0
- /package/dist/types/plots/{histogram → correlation/heatmap}/props.js +0 -0
- /package/dist/types/plots/{heatmap → correlation/heatmap}/state.js +0 -0
- /package/dist/types/plots/{line → correlation/scatter}/props.js +0 -0
- /package/dist/types/plots/{histogram → correlation/scatter}/state.js +0 -0
- /package/dist/types/plots/{pyramid → distribution/box}/props.js +0 -0
- /package/dist/types/plots/{line → distribution/box}/state.js +0 -0
- /package/dist/types/plots/{scatter → distribution/density}/props.js +0 -0
- /package/dist/types/plots/{pyramid → distribution/density}/state.js +0 -0
- /package/dist/types/plots/{scatter/state.js → distribution/histogram/props.js} +0 -0
- /package/dist/{plots/utils → utils}/accessors.d.ts +0 -0
- /package/dist/{plots/utils → utils}/accessors.js +0 -0
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import type { Snippet } from 'svelte';
|
|
2
|
-
import type { TooltipAnchorX, TooltipAnchorY } from '../../types/layout/tooltip';
|
|
2
|
+
import type { TooltipAnchorX, TooltipAnchorY, TooltipRow } from '../../types/layout/tooltip';
|
|
3
3
|
declare function $$render<TRow extends Record<string, unknown>>(): {
|
|
4
4
|
props: {
|
|
5
5
|
visible: boolean;
|
|
6
6
|
x: number;
|
|
7
7
|
y: number;
|
|
8
|
-
/** Every row the hover matched. */
|
|
9
|
-
rows: TRow[];
|
|
8
|
+
/** Every row the hover matched, with the color the plot draws it in. */
|
|
9
|
+
rows: TooltipRow<TRow>[];
|
|
10
10
|
format: (row: TRow) => string;
|
|
11
11
|
/** The order the `format` text reads the rows in. Unset, as matched. */
|
|
12
12
|
sort?: (a: TRow, b: TRow) => number;
|
|
13
13
|
/** Custom tooltip body, given every row; replaces the `format` text and the default box. */
|
|
14
14
|
content?: Snippet<[{
|
|
15
|
-
rows: TRow[];
|
|
15
|
+
rows: TooltipRow<TRow>[];
|
|
16
16
|
}]>;
|
|
17
17
|
/** Box the tooltip must stay within. Defaults to its plot's box. */
|
|
18
18
|
bounds?: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Box } from '../margins/Box';
|
|
2
2
|
import { PlotMargins } from '../margins/PlotMargins.svelte';
|
|
3
|
-
import { resolveAccessor } from '../../
|
|
3
|
+
import { resolveAccessor } from '../../utils/accessors';
|
|
4
4
|
import { SERIES_KEY } from '../../phases/transforms/TransformsPhase';
|
|
5
5
|
import { ValueLabels } from '../styles/ValueLabels';
|
|
6
6
|
/** A tooltip anchor as the side of the point the tooltip sits on. */
|
|
@@ -38,6 +38,7 @@ export class MarkerKinds {
|
|
|
38
38
|
tick: { clip: true, drawsRows: true },
|
|
39
39
|
trail: { clip: true, drawsRows: true, legendSymbol: 'line' },
|
|
40
40
|
vector: { clip: false, drawsRows: false },
|
|
41
|
+
violin: { clip: true, drawsRows: true, legendSymbol: 'area' },
|
|
41
42
|
voronoi: { clip: true, drawsRows: true },
|
|
42
43
|
voronoiMesh: { clip: true, drawsRows: true },
|
|
43
44
|
waffle: { clip: true, drawsRows: true }
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
const plot = usePlot();
|
|
17
17
|
const isHorizontal = $derived(plot.axes?.isHorizontal ?? false);
|
|
18
|
+
const AreaMark = $derived(isHorizontal ? AreaX : AreaY);
|
|
18
19
|
|
|
19
20
|
const cfg = $derived(getConfiguration());
|
|
20
21
|
const data = $derived(marker.data ?? []);
|
|
@@ -29,82 +30,33 @@
|
|
|
29
30
|
const y2 = $derived(hasYBand ? marker.y2 : (marker.y ?? 0));
|
|
30
31
|
const x1 = $derived(hasXBand ? marker.x1 : 0);
|
|
31
32
|
const x2 = $derived(hasXBand ? marker.x2 : (marker.x ?? 0));
|
|
33
|
+
/** The band's two ends: along `x` when the plot runs horizontally, else along `y`. */
|
|
34
|
+
const band = $derived(isHorizontal ? { x1, x2 } : { y1, y2 });
|
|
32
35
|
</script>
|
|
33
36
|
|
|
34
|
-
{#
|
|
35
|
-
|
|
36
|
-
{
|
|
37
|
-
<AreaX
|
|
38
|
-
data={bucket.data}
|
|
39
|
-
x={marker.x}
|
|
40
|
-
{x1}
|
|
41
|
-
{x2}
|
|
42
|
-
y={marker.y}
|
|
43
|
-
z={marker.grouping}
|
|
44
|
-
stack={false}
|
|
45
|
-
curve={marker.curve}
|
|
46
|
-
tension={marker.tension}
|
|
47
|
-
fill={channelFill ?? marker.styles?.fill}
|
|
48
|
-
fillOpacity={bucket.value}
|
|
49
|
-
stroke={marker.styles?.stroke}
|
|
50
|
-
strokeWidth={marker.styles?.strokeWidth}
|
|
51
|
-
strokeOpacity={marker.styles?.strokeOpacity}
|
|
52
|
-
strokeDasharray={marker.styles?.strokeDasharray}
|
|
53
|
-
/>
|
|
54
|
-
{:else}
|
|
55
|
-
<AreaY
|
|
56
|
-
data={bucket.data}
|
|
57
|
-
x={marker.x}
|
|
58
|
-
y={marker.y}
|
|
59
|
-
{y1}
|
|
60
|
-
{y2}
|
|
61
|
-
z={marker.grouping}
|
|
62
|
-
stack={false}
|
|
63
|
-
curve={marker.curve}
|
|
64
|
-
tension={marker.tension}
|
|
65
|
-
fill={channelFill ?? marker.styles?.fill}
|
|
66
|
-
fillOpacity={bucket.value}
|
|
67
|
-
stroke={marker.styles?.stroke}
|
|
68
|
-
strokeWidth={marker.styles?.strokeWidth}
|
|
69
|
-
strokeOpacity={marker.styles?.strokeOpacity}
|
|
70
|
-
strokeDasharray={marker.styles?.strokeDasharray}
|
|
71
|
-
/>
|
|
72
|
-
{/if}
|
|
73
|
-
{/each}
|
|
74
|
-
{:else if isHorizontal}
|
|
75
|
-
<AreaX
|
|
76
|
-
{data}
|
|
37
|
+
{#snippet area(rows: typeof data, fillOpacity: number | undefined)}
|
|
38
|
+
<AreaMark
|
|
39
|
+
data={rows}
|
|
77
40
|
x={marker.x}
|
|
78
|
-
{x1}
|
|
79
|
-
{x2}
|
|
80
41
|
y={marker.y}
|
|
42
|
+
{...band}
|
|
81
43
|
z={marker.grouping}
|
|
82
44
|
stack={false}
|
|
83
45
|
curve={marker.curve}
|
|
84
46
|
tension={marker.tension}
|
|
85
47
|
fill={channelFill ?? marker.styles?.fill}
|
|
86
|
-
|
|
48
|
+
{fillOpacity}
|
|
87
49
|
stroke={marker.styles?.stroke}
|
|
88
50
|
strokeWidth={marker.styles?.strokeWidth}
|
|
89
51
|
strokeOpacity={marker.styles?.strokeOpacity}
|
|
90
52
|
strokeDasharray={marker.styles?.strokeDasharray}
|
|
91
53
|
/>
|
|
54
|
+
{/snippet}
|
|
55
|
+
|
|
56
|
+
{#if opacityBuckets}
|
|
57
|
+
{#each opacityBuckets as bucket (bucket.value)}
|
|
58
|
+
{@render area(bucket.data, bucket.value)}
|
|
59
|
+
{/each}
|
|
92
60
|
{:else}
|
|
93
|
-
|
|
94
|
-
{data}
|
|
95
|
-
x={marker.x}
|
|
96
|
-
y={marker.y}
|
|
97
|
-
{y1}
|
|
98
|
-
{y2}
|
|
99
|
-
z={marker.grouping}
|
|
100
|
-
stack={false}
|
|
101
|
-
curve={marker.curve}
|
|
102
|
-
tension={marker.tension}
|
|
103
|
-
fill={channelFill ?? marker.styles?.fill}
|
|
104
|
-
fillOpacity={marker.styles?.fillOpacity ?? cfg.area.fillOpacity}
|
|
105
|
-
stroke={marker.styles?.stroke}
|
|
106
|
-
strokeWidth={marker.styles?.strokeWidth}
|
|
107
|
-
strokeOpacity={marker.styles?.strokeOpacity}
|
|
108
|
-
strokeDasharray={marker.styles?.strokeDasharray}
|
|
109
|
-
/>
|
|
61
|
+
{@render area(data, marker.styles?.fillOpacity ?? cfg.area.fillOpacity)}
|
|
110
62
|
{/if}
|
|
@@ -1,19 +1,61 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { Arrow } from 'svelteplot';
|
|
3
|
+
import { usePlot } from '../../layout/plot/usePlot';
|
|
4
|
+
import { RowStroke } from '../utils/RowStroke';
|
|
3
5
|
import type { ArrowMarkerConfig } from '../../types/markers/common';
|
|
4
6
|
|
|
5
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
* Renders one `'arrow'` marker as `<Arrow>` - a point-to-point annotation.
|
|
9
|
+
* Restates svelteplot's own defaults, which an explicit `undefined` would
|
|
10
|
+
* otherwise erase. An arrow on a band axis ends at the middle of its band: the
|
|
11
|
+
* `<Arrow>` mark reads its start as the band's first edge and its end as the
|
|
12
|
+
* last, so such an arrow is placed in pixels instead.
|
|
13
|
+
*/
|
|
6
14
|
let { marker }: { marker: ArrowMarkerConfig } = $props();
|
|
7
15
|
|
|
16
|
+
const plot = usePlot().svelteplot;
|
|
8
17
|
const data = $derived(marker.data ?? []);
|
|
18
|
+
/** Each row's own stroke, over the marker's `styles`. */
|
|
19
|
+
const row = $derived(RowStroke.of(marker, marker.styles, { stroke: 'currentColor' }));
|
|
20
|
+
|
|
21
|
+
type Row = Record<string, unknown>;
|
|
22
|
+
type Channel = string | number | ((d: never) => unknown) | undefined;
|
|
23
|
+
/** A channel of a row: a field key, a function of the row, or a literal. */
|
|
24
|
+
const read = (channel: Channel, d: Row) =>
|
|
25
|
+
typeof channel === 'string'
|
|
26
|
+
? d[channel]
|
|
27
|
+
: typeof channel === 'function'
|
|
28
|
+
? (channel as (d: Row) => unknown)(d)
|
|
29
|
+
: channel;
|
|
30
|
+
/** Where `value` sits along `axis`, in pixels, at the middle of its band on a band axis. */
|
|
31
|
+
const pixel = (axis: 'x' | 'y', value: unknown) => {
|
|
32
|
+
const scale = plot.scales[axis];
|
|
33
|
+
const at = scale.fn(value as never) as number;
|
|
34
|
+
return scale.type === 'band' ? at + scale.fn.bandwidth() / 2 : at;
|
|
35
|
+
};
|
|
36
|
+
const onBand = $derived(plot.scales.x.type === 'band' || plot.scales.y.type === 'band');
|
|
37
|
+
/** The rows with their ends in pixels, when an axis is a band. */
|
|
38
|
+
const placed = $derived(
|
|
39
|
+
onBand
|
|
40
|
+
? data.map((d) => ({
|
|
41
|
+
...d,
|
|
42
|
+
__x1: pixel('x', read(marker.x1, d as Row)),
|
|
43
|
+
__x2: pixel('x', read(marker.x2, d as Row)),
|
|
44
|
+
__y1: pixel('y', read(marker.y1, d as Row)),
|
|
45
|
+
__y2: pixel('y', read(marker.y2, d as Row))
|
|
46
|
+
}))
|
|
47
|
+
: data
|
|
48
|
+
);
|
|
49
|
+
/** A pixel channel the scales leave alone. */
|
|
50
|
+
const own = (key: string) => ({ value: (d: Row) => d[key], scale: null }) as never;
|
|
9
51
|
</script>
|
|
10
52
|
|
|
11
53
|
<Arrow
|
|
12
|
-
{
|
|
13
|
-
x1={marker.x1}
|
|
14
|
-
y1={marker.y1}
|
|
15
|
-
x2={marker.x2}
|
|
16
|
-
y2={marker.y2}
|
|
54
|
+
data={placed}
|
|
55
|
+
x1={onBand ? own('__x1') : marker.x1}
|
|
56
|
+
y1={onBand ? own('__y1') : marker.y1}
|
|
57
|
+
x2={onBand ? own('__x2') : marker.x2}
|
|
58
|
+
y2={onBand ? own('__y2') : marker.y2}
|
|
17
59
|
bend={marker.bend}
|
|
18
60
|
headAngle={marker.headAngle ?? 60}
|
|
19
61
|
headLength={marker.headLength ?? 8}
|
|
@@ -21,8 +63,8 @@
|
|
|
21
63
|
insetStart={marker.insetStart}
|
|
22
64
|
insetEnd={marker.insetEnd}
|
|
23
65
|
sweep={marker.sweep}
|
|
24
|
-
stroke={
|
|
25
|
-
strokeWidth={
|
|
26
|
-
strokeOpacity={
|
|
66
|
+
stroke={row.stroke}
|
|
67
|
+
strokeWidth={row.strokeWidth}
|
|
68
|
+
strokeOpacity={row.strokeOpacity}
|
|
27
69
|
strokeDasharray={marker.styles?.strokeDasharray}
|
|
28
70
|
/>
|
|
@@ -43,14 +43,17 @@
|
|
|
43
43
|
{#if marker.role === 'segment'}
|
|
44
44
|
{@const categoryScale = categoryScaleFor(marker.isHorizontal)}
|
|
45
45
|
{@const bandwidth = categoryScale?.type === 'band' ? categoryScale.fn.bandwidth() : 0}
|
|
46
|
+
{@const centered =
|
|
47
|
+
marker.thickness != null ? Math.max(0, (bandwidth - marker.thickness) / 2) : undefined}
|
|
46
48
|
{#if marker.isHorizontal}
|
|
47
49
|
<BarX
|
|
48
50
|
{data}
|
|
49
51
|
y={marker.y}
|
|
50
52
|
x1={marker.x1}
|
|
51
53
|
x2={marker.x2}
|
|
52
|
-
insetTop={marker.insetTop != null ? marker.insetTop * bandwidth : undefined}
|
|
53
|
-
insetBottom={
|
|
54
|
+
insetTop={centered ?? (marker.insetTop != null ? marker.insetTop * bandwidth : undefined)}
|
|
55
|
+
insetBottom={centered ??
|
|
56
|
+
(marker.insetBottom != null ? marker.insetBottom * bandwidth : undefined)}
|
|
54
57
|
fill={channelFill ?? marker.styles?.fill}
|
|
55
58
|
fillOpacity={marker.styles?.fillOpacity}
|
|
56
59
|
stroke={marker.styles?.stroke}
|
|
@@ -65,8 +68,9 @@
|
|
|
65
68
|
x={marker.x}
|
|
66
69
|
y1={marker.y1}
|
|
67
70
|
y2={marker.y2}
|
|
68
|
-
insetLeft={marker.insetLeft != null ? marker.insetLeft * bandwidth : undefined}
|
|
69
|
-
insetRight={
|
|
71
|
+
insetLeft={centered ?? (marker.insetLeft != null ? marker.insetLeft * bandwidth : undefined)}
|
|
72
|
+
insetRight={centered ??
|
|
73
|
+
(marker.insetRight != null ? marker.insetRight * bandwidth : undefined)}
|
|
70
74
|
fill={channelFill ?? marker.styles?.fill}
|
|
71
75
|
fillOpacity={marker.styles?.fillOpacity}
|
|
72
76
|
stroke={marker.styles?.stroke}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
+
import { SvelteMap } from 'svelte/reactivity';
|
|
2
3
|
import { BollingerX, BollingerY } from 'svelteplot';
|
|
3
4
|
import { usePlot } from '../../layout/plot/usePlot';
|
|
5
|
+
import { MarkerChannels } from '../utils/MarkerChannels';
|
|
6
|
+
import { resolveAccessor } from '../../utils/accessors';
|
|
7
|
+
import { getConfiguration } from '../../configuration/config.svelte';
|
|
4
8
|
import type { BollingerMarkerConfig } from '../../types/markers/common';
|
|
5
9
|
|
|
6
10
|
/**
|
|
@@ -9,36 +13,47 @@
|
|
|
9
13
|
* (`usePlot().axes`). A `stroke`-independent `fill`-style option
|
|
10
14
|
* is deliberately not offered - confirmed empirically to have no visible
|
|
11
15
|
* effect on svelteplot's own line (see `BollingerStatisticOptions`'s own
|
|
12
|
-
* doc comment).
|
|
16
|
+
* doc comment). svelteplot draws one line and one band over all its rows, so
|
|
17
|
+
* with a `grouping` each group is drawn as a mark of its own, in the color
|
|
18
|
+
* the plot gives that group unless `styles` sets one.
|
|
13
19
|
*/
|
|
14
20
|
let { marker }: { marker: BollingerMarkerConfig } = $props();
|
|
15
21
|
|
|
16
22
|
const plot = usePlot();
|
|
17
23
|
const isHorizontal = $derived(plot.axes?.isHorizontal ?? false);
|
|
24
|
+
const BollingerMark = $derived(isHorizontal ? BollingerX : BollingerY);
|
|
18
25
|
|
|
26
|
+
const cfg = $derived(getConfiguration());
|
|
19
27
|
const data = $derived(marker.data ?? []);
|
|
28
|
+
|
|
29
|
+
/** The rows of each group, in the order the groups first appear. */
|
|
30
|
+
const groups = $derived.by(() => {
|
|
31
|
+
if (!marker.grouping) return [{ key: 'all', rows: data }];
|
|
32
|
+
const groupOf = resolveAccessor(marker.grouping as never) as (row: unknown) => unknown;
|
|
33
|
+
const byKey = new SvelteMap<string, typeof data>();
|
|
34
|
+
for (const row of data) {
|
|
35
|
+
const key = String(groupOf(row));
|
|
36
|
+
const rows = byKey.get(key);
|
|
37
|
+
if (rows) rows.push(row);
|
|
38
|
+
else byKey.set(key, [row]);
|
|
39
|
+
}
|
|
40
|
+
return [...byKey].map(([key, rows]) => ({ key, rows }));
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
/** What the plot's palette gives a row's group. */
|
|
44
|
+
const groupFill = $derived(MarkerChannels.buildFill(data, marker.grouping, marker.scales, cfg));
|
|
20
45
|
</script>
|
|
21
46
|
|
|
22
|
-
{#
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
y={marker.y}
|
|
27
|
-
n={marker.n}
|
|
28
|
-
k={marker.k}
|
|
29
|
-
stroke={marker.styles?.stroke}
|
|
30
|
-
strokeOpacity={marker.styles?.strokeOpacity}
|
|
31
|
-
fill={marker.styles?.bandFill}
|
|
32
|
-
/>
|
|
33
|
-
{:else}
|
|
34
|
-
<BollingerY
|
|
35
|
-
{data}
|
|
47
|
+
{#each groups as group (group.key)}
|
|
48
|
+
{@const color = marker.grouping ? groupFill?.(group.rows[0]) : undefined}
|
|
49
|
+
<BollingerMark
|
|
50
|
+
data={group.rows}
|
|
36
51
|
x={marker.x}
|
|
37
52
|
y={marker.y}
|
|
38
53
|
n={marker.n}
|
|
39
54
|
k={marker.k}
|
|
40
|
-
stroke={marker.styles?.stroke}
|
|
55
|
+
stroke={marker.styles?.stroke ?? color}
|
|
41
56
|
strokeOpacity={marker.styles?.strokeOpacity}
|
|
42
|
-
fill={marker.styles?.bandFill}
|
|
57
|
+
fill={marker.styles?.bandFill ?? color}
|
|
43
58
|
/>
|
|
44
|
-
{/
|
|
59
|
+
{/each}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { BoxX, BoxY } from 'svelteplot';
|
|
3
3
|
import { usePlot } from '../../layout/plot/usePlot';
|
|
4
|
-
import {
|
|
4
|
+
import { CssColor } from '../../utils/color';
|
|
5
5
|
import { getConfiguration } from '../../configuration/config.svelte';
|
|
6
6
|
import type { BoxMarkerConfig } from '../../types/markers/common';
|
|
7
7
|
|
|
@@ -18,6 +18,33 @@
|
|
|
18
18
|
|
|
19
19
|
const plot = usePlot();
|
|
20
20
|
const isHorizontal = $derived(plot.axes?.isHorizontal ?? false);
|
|
21
|
+
const BoxMark = $derived(isHorizontal ? BoxX : BoxY);
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* With `thickness`, the box is that many pixels across, centered on the
|
|
25
|
+
* marker's share of its category's band (`slot`), instead of filling the band:
|
|
26
|
+
* the bar's insets and every sub-mark's offset follow it.
|
|
27
|
+
*/
|
|
28
|
+
const thickness = $derived(marker.thickness);
|
|
29
|
+
const slotIndex = $derived(marker.slot?.index ?? 0);
|
|
30
|
+
const slotCount = $derived(marker.slot?.count ?? 1);
|
|
31
|
+
const bandwidth = $derived.by(() => {
|
|
32
|
+
const scale = isHorizontal ? plot.svelteplot.scales.y : plot.svelteplot.scales.x;
|
|
33
|
+
return scale?.type === 'band' ? scale.fn.bandwidth() : 0;
|
|
34
|
+
});
|
|
35
|
+
const placement = $derived.by(() => {
|
|
36
|
+
if (thickness == null || !bandwidth) return undefined;
|
|
37
|
+
const share = bandwidth / slotCount;
|
|
38
|
+
const offset = share * slotIndex + share / 2 - bandwidth / 2;
|
|
39
|
+
const inset = Math.max(0, (bandwidth - thickness) / 2);
|
|
40
|
+
return {
|
|
41
|
+
inset,
|
|
42
|
+
side: isHorizontal
|
|
43
|
+
? { insetTop: inset, insetBottom: inset }
|
|
44
|
+
: { insetLeft: inset, insetRight: inset },
|
|
45
|
+
shift: isHorizontal ? { dy: offset } : { dx: offset }
|
|
46
|
+
};
|
|
47
|
+
});
|
|
21
48
|
|
|
22
49
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
23
50
|
const data = $derived((marker.data ?? []) as any[]);
|
|
@@ -39,12 +66,15 @@
|
|
|
39
66
|
(typeof marker.bar === 'object' && marker.bar.fill != null
|
|
40
67
|
? (marker.bar.fill as string)
|
|
41
68
|
: undefined) ?? cfg.palette[0],
|
|
69
|
+
...placement?.side,
|
|
70
|
+
...placement?.shift,
|
|
42
71
|
...(typeof marker.bar === 'object' ? marker.bar : {})
|
|
43
72
|
});
|
|
44
73
|
const barFill = $derived(bar.fill as string);
|
|
45
74
|
|
|
46
75
|
/** `bar.insetLeft`/`insetRight` averaged into one symmetric value - a tick's own `inset` is a single number/percentage, not independent left/right. */
|
|
47
76
|
const tickInset = $derived.by(() => {
|
|
77
|
+
if (placement) return placement.inset;
|
|
48
78
|
const l = typeof bar.insetLeft === 'number' ? bar.insetLeft : undefined;
|
|
49
79
|
const r = typeof bar.insetRight === 'number' ? bar.insetRight : undefined;
|
|
50
80
|
if (l === undefined && r === undefined) return undefined;
|
|
@@ -77,14 +107,19 @@
|
|
|
77
107
|
return out;
|
|
78
108
|
}
|
|
79
109
|
|
|
80
|
-
const ruleDefault = $derived(lineStyleDefaults(barFill));
|
|
81
|
-
const dotDefault = $derived(
|
|
110
|
+
const ruleDefault = $derived({ ...lineStyleDefaults(barFill), ...placement?.shift });
|
|
111
|
+
const dotDefault: Record<string, unknown> = $derived({
|
|
112
|
+
...fillStyleDefaults(),
|
|
113
|
+
...placement?.shift
|
|
114
|
+
});
|
|
82
115
|
const tickMedianDefault = $derived({
|
|
83
|
-
...lineStyleDefaults(
|
|
116
|
+
...lineStyleDefaults(CssColor.contrastText(barFill)),
|
|
117
|
+
...placement?.shift,
|
|
84
118
|
...(tickInset !== undefined ? { inset: tickInset } : {})
|
|
85
119
|
});
|
|
86
120
|
const tickMinMaxDefault = $derived({
|
|
87
121
|
...lineStyleDefaults(barFill),
|
|
122
|
+
...placement?.shift,
|
|
88
123
|
...(tickInset !== undefined ? { inset: tickInset } : {})
|
|
89
124
|
});
|
|
90
125
|
|
|
@@ -136,8 +171,4 @@
|
|
|
136
171
|
});
|
|
137
172
|
</script>
|
|
138
173
|
|
|
139
|
-
{
|
|
140
|
-
<BoxX {data} x={marker.x} y={marker.y} sort={marker.sort} {...passthrough} />
|
|
141
|
-
{:else}
|
|
142
|
-
<BoxY {data} x={marker.x} y={marker.y} sort={marker.sort} {...passthrough} />
|
|
143
|
-
{/if}
|
|
174
|
+
<BoxMark {data} x={marker.x} y={marker.y} sort={marker.sort} {...passthrough} />
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Series } from '../../types/plots/data/common';
|
|
2
|
-
import type { DeltaConfig } from '../../types/markers/axis/delta';
|
|
2
|
+
import type { DeltaConfig, DeltaMarkerConfig, DeltaPointConfig } from '../../types/markers/axis/delta';
|
|
3
3
|
/** A delta, measured: where it sits (`at`), its two ends and what lies between. */
|
|
4
4
|
export type ResolvedDelta = {
|
|
5
5
|
cfg: DeltaConfig;
|
|
@@ -16,6 +16,11 @@ export type ResolvedDelta = {
|
|
|
16
16
|
*/
|
|
17
17
|
export declare class Delta {
|
|
18
18
|
#private;
|
|
19
|
+
/**
|
|
20
|
+
* The deltas a marker draws: one for its `at`, or one for each position of a list, each with the
|
|
21
|
+
* `line`, `text` and `dot` its style functions give for that position.
|
|
22
|
+
*/
|
|
23
|
+
static points(marker: DeltaMarkerConfig): DeltaPointConfig[];
|
|
19
24
|
/** The delta `config` asks for over `allSeries`, or `undefined` while an end has no value there. */
|
|
20
25
|
static build<T extends Record<string, unknown>>(axis: 'x' | 'y', allSeries: Series<T>[], config: DeltaConfig): ResolvedDelta | undefined;
|
|
21
26
|
}
|
|
@@ -1,10 +1,25 @@
|
|
|
1
|
-
import { resolveAccessor } from '../../
|
|
1
|
+
import { resolveAccessor } from '../../utils/accessors';
|
|
2
2
|
/**
|
|
3
3
|
* A delta marker's measure: the gap, at one position along `axis`, between
|
|
4
4
|
* the two curves (or axis lines) it compares. A target series is read where
|
|
5
5
|
* it crosses that position, interpolated linearly between its two nearest points.
|
|
6
6
|
*/
|
|
7
7
|
export class Delta {
|
|
8
|
+
/**
|
|
9
|
+
* The deltas a marker draws: one for its `at`, or one for each position of a list, each with the
|
|
10
|
+
* `line`, `text` and `dot` its style functions give for that position.
|
|
11
|
+
*/
|
|
12
|
+
static points(marker) {
|
|
13
|
+
const positions = Array.isArray(marker.at) ? marker.at : [marker.at];
|
|
14
|
+
const own = (style, at) => typeof style === 'function' ? style(at) : style;
|
|
15
|
+
return positions.map((at) => ({
|
|
16
|
+
...marker,
|
|
17
|
+
at,
|
|
18
|
+
line: own(marker.line, at),
|
|
19
|
+
text: own(marker.text, at),
|
|
20
|
+
dot: own(marker.dot, at)
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
8
23
|
/** The delta `config` asks for over `allSeries`, or `undefined` while an end has no value there. */
|
|
9
24
|
static build(axis, allSeries, config) {
|
|
10
25
|
const at = Number(config.at);
|
|
@@ -1,96 +1,18 @@
|
|
|
1
1
|
<script lang="ts" generics="TData extends Record<string, unknown>">
|
|
2
|
-
import
|
|
3
|
-
import DotMarker from '../dot/DotMarker.svelte';
|
|
4
|
-
import TextMarker from '../text/TextMarker.svelte';
|
|
2
|
+
import DeltaPoint from './DeltaPoint.svelte';
|
|
5
3
|
import { Delta } from './Delta';
|
|
6
|
-
import { getConfiguration } from '../../configuration/config.svelte';
|
|
7
4
|
import type { Series } from '../../types/plots/data/common';
|
|
8
5
|
import type { DeltaMarkerConfig } from '../../types/markers/axis/delta';
|
|
9
6
|
|
|
7
|
+
/**
|
|
8
|
+
* A delta annotation: one at `marker.at`, or, when it is a list, one at each position - all with the
|
|
9
|
+
* same ends. `line`, `text` and `dot` can be functions of the position.
|
|
10
|
+
*/
|
|
10
11
|
let { marker, data = [] }: { marker: DeltaMarkerConfig; data?: Series<TData>[] } = $props();
|
|
11
12
|
|
|
12
|
-
const
|
|
13
|
-
const label = $derived(getConfiguration().delta.text[marker.axis]);
|
|
14
|
-
const lineAnchor = $derived(marker.text?.lineAnchor ?? label.lineAnchor);
|
|
15
|
-
|
|
16
|
-
const clampRange = $derived.by((): [number, number] | undefined => {
|
|
17
|
-
const domain = marker.axis === 'x' ? marker.yDomain : marker.xDomain;
|
|
18
|
-
if (!domain || domain.length < 2) return undefined;
|
|
19
|
-
const lo = Number(domain[0]);
|
|
20
|
-
const hi = Number(domain[domain.length - 1]);
|
|
21
|
-
return isNaN(lo) || isNaN(hi) ? undefined : [Math.min(lo, hi), Math.max(lo, hi)];
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
function clamp(v: number): number {
|
|
25
|
-
return clampRange ? Math.max(clampRange[0], Math.min(clampRange[1], v)) : v;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
function pt(fixed: number, varying: number) {
|
|
29
|
-
return marker.axis === 'x' ? { x: fixed, y: varying } : { x: varying, y: fixed };
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
function textVaryCoord(fromVis: number, toVis: number) {
|
|
33
|
-
return lineAnchor === 'top'
|
|
34
|
-
? Math.max(fromVis, toVis)
|
|
35
|
-
: lineAnchor === 'bottom'
|
|
36
|
-
? Math.min(fromVis, toVis)
|
|
37
|
-
: (fromVis + toVis) / 2;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// Pre-derive all coordinates as script-level signals so prop getters read safe
|
|
41
|
-
// values during Svelte 5 teardown, before the {#if} guard finishes unmounting.
|
|
42
|
-
const coords = $derived.by(() => {
|
|
43
|
-
if (!resolved) return null;
|
|
44
|
-
const fromVis = clamp(resolved.from ?? 0);
|
|
45
|
-
const toVis = clamp(resolved.to ?? 0);
|
|
46
|
-
const at = resolved.at ?? 0;
|
|
47
|
-
return {
|
|
48
|
-
fromPt: pt(at, fromVis),
|
|
49
|
-
toPt: pt(at, toVis),
|
|
50
|
-
textPt: pt(at, textVaryCoord(fromVis, toVis)),
|
|
51
|
-
lineData: [pt(at, fromVis), pt(at, toVis)],
|
|
52
|
-
diff: resolved.diff ?? 0
|
|
53
|
-
};
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
const dotStyles = $derived({
|
|
57
|
-
dotRadius: 4,
|
|
58
|
-
dotFill: marker.line?.stroke,
|
|
59
|
-
dotStroke: marker.line?.stroke,
|
|
60
|
-
dotStrokeWidth: 2,
|
|
61
|
-
...marker.dot
|
|
62
|
-
});
|
|
13
|
+
const points = $derived(Delta.points(marker));
|
|
63
14
|
</script>
|
|
64
15
|
|
|
65
|
-
{#
|
|
66
|
-
<
|
|
67
|
-
|
|
68
|
-
x={(p) => p.x}
|
|
69
|
-
y={(p) => p.y}
|
|
70
|
-
stroke={marker.line?.stroke ?? 'currentColor'}
|
|
71
|
-
strokeWidth={marker.line?.strokeWidth ?? 2}
|
|
72
|
-
strokeOpacity={marker.line?.strokeOpacity ?? 0.8}
|
|
73
|
-
strokeDasharray={marker.line?.strokeDasharray ?? '6 6'}
|
|
74
|
-
strokeLinecap={marker.line?.strokeLinecap ?? 'round'}
|
|
75
|
-
/>
|
|
76
|
-
<DotMarker marker={{ type: 'dot', x: coords.fromPt.x, y: coords.fromPt.y, styles: dotStyles }} />
|
|
77
|
-
<DotMarker marker={{ type: 'dot', x: coords.toPt.x, y: coords.toPt.y, styles: dotStyles }} />
|
|
78
|
-
<TextMarker
|
|
79
|
-
marker={{
|
|
80
|
-
type: 'text',
|
|
81
|
-
x: coords.textPt.x,
|
|
82
|
-
y: coords.textPt.y,
|
|
83
|
-
text: (marker.formatDiff ?? ((v: number) => v.toFixed(1)))(coords.diff),
|
|
84
|
-
styles: {
|
|
85
|
-
fontWeight: 'bold',
|
|
86
|
-
fontSize: 14,
|
|
87
|
-
textAnchor: label.textAnchor,
|
|
88
|
-
fill: marker.line?.stroke ?? 'currentColor',
|
|
89
|
-
...marker.text,
|
|
90
|
-
dx: marker.text?.dx ?? label.dx,
|
|
91
|
-
dy: marker.text?.dy ?? label.dy,
|
|
92
|
-
lineAnchor
|
|
93
|
-
}
|
|
94
|
-
}}
|
|
95
|
-
/>
|
|
96
|
-
{/if}
|
|
16
|
+
{#each points as point (String(point.at))}
|
|
17
|
+
<DeltaPoint marker={point} {data} />
|
|
18
|
+
{/each}
|