@fundar/data-chart-telling 1.1.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 +32 -0
- package/README.md +6 -6
- package/dist/configuration/config.svelte.d.ts +1 -1
- package/dist/configuration/config.svelte.js +165 -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/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 +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 +4 -0
- package/dist/layout/legend/LegendState.svelte.js +20 -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/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 +72 -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.js +1 -1
- 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 +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/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 +7 -2
- 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.js +1 -1
- package/dist/types/configuration/styling.d.ts +276 -143
- 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 +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/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/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 +1 -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 +2 -2
- package/docs/composer.md +2 -2
- package/docs/concepts.md +1 -1
- package/docs/development.md +1 -1
- package/docs/facets.md +3 -3
- package/docs/getting-started.md +2 -2
- package/docs/legend.md +13 -11
- package/docs/markers.md +29 -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 +24 -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/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 +22 -11
- package/llms.txt +32 -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
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
import { usePlot } from '../../layout/plot/usePlot';
|
|
4
4
|
import { getConfiguration } from '../../configuration/config.svelte';
|
|
5
5
|
import { BandNudge } from '../utils/BandNudge';
|
|
6
|
+
import { RowOffset } from '../utils/RowOffset';
|
|
7
|
+
import RowOffsetMarks from '../utils/RowOffsetMarks.svelte';
|
|
6
8
|
import { Declutter } from './Declutter';
|
|
7
9
|
import { PlotMargins } from '../../layout/margins/PlotMargins.svelte';
|
|
8
10
|
import { Box } from '../../layout/margins/Box';
|
|
@@ -34,7 +36,12 @@
|
|
|
34
36
|
const text = $derived(marker.text ?? '');
|
|
35
37
|
const styles = $derived(marker.styles);
|
|
36
38
|
|
|
37
|
-
|
|
39
|
+
// A label placed by a literal (or by the frame) draws once without rows; one placed by a field of its rows draws nothing.
|
|
40
|
+
const placedByRows = (position: unknown) =>
|
|
41
|
+
['string', 'function', 'symbol'].includes(typeof position);
|
|
42
|
+
const displayData = $derived(
|
|
43
|
+
data.length > 0 ? data : placedByRows(x) || placedByRows(y) ? [] : [{} as TData]
|
|
44
|
+
);
|
|
38
45
|
// Per-row accessors give literal values; an empty one takes the flat default.
|
|
39
46
|
const flatFill = $derived(styles?.fill ?? 'currentColor');
|
|
40
47
|
const fill = $derived.by(() => {
|
|
@@ -50,14 +57,27 @@
|
|
|
50
57
|
const fontWeight = $derived(styles?.fontWeight ?? 'normal');
|
|
51
58
|
const fontStyleProp = $derived(styles?.fontStyle ?? 'normal');
|
|
52
59
|
// An unresolved `'outside'` falls back to `'start'`.
|
|
53
|
-
const
|
|
54
|
-
|
|
60
|
+
const anchorOf = (anchor: TextAnchor | undefined): Exclude<TextAnchor, 'outside'> =>
|
|
61
|
+
anchor === 'outside' ? 'start' : (anchor ?? 'middle');
|
|
62
|
+
const textAnchor = $derived(
|
|
63
|
+
anchorOf(
|
|
64
|
+
typeof marker.textAnchor === 'function'
|
|
65
|
+
? undefined
|
|
66
|
+
: (marker.textAnchor ?? styles?.textAnchor)
|
|
67
|
+
)
|
|
55
68
|
);
|
|
56
69
|
const lineAnchor = $derived(styles?.lineAnchor ?? 'middle');
|
|
57
70
|
// A label in a slice of its band sits off the band's middle, at its drawn width.
|
|
58
71
|
const nudge = $derived(BandNudge.of(plot.scales, marker.bandSlice));
|
|
59
|
-
|
|
60
|
-
const
|
|
72
|
+
// The fixed offset, which `declutter` and `edgeAware` place labels by; a function of the row moves each label after that, through `RowOffsetMarks`.
|
|
73
|
+
const fixedOffset = $derived(
|
|
74
|
+
RowOffset.whole(marker, { dx: styles?.dx ?? 0, dy: styles?.dy ?? 0 })
|
|
75
|
+
);
|
|
76
|
+
const dx = $derived(fixedOffset.dx + nudge.dx);
|
|
77
|
+
const dy = $derived(fixedOffset.dy + nudge.dy);
|
|
78
|
+
const anchorAt = (d: TData) =>
|
|
79
|
+
typeof marker.textAnchor === 'function' ? anchorOf(marker.textAnchor(d)) : textAnchor;
|
|
80
|
+
const projected = $derived(!!plot.scales.projection);
|
|
61
81
|
|
|
62
82
|
const declutter = $derived.by(() => {
|
|
63
83
|
if (!marker.declutter) return undefined;
|
|
@@ -67,11 +87,17 @@
|
|
|
67
87
|
elbowGap: own.elbowGap ?? defaults.elbowGap,
|
|
68
88
|
laneStep: own.laneStep ?? defaults.laneStep,
|
|
69
89
|
labelGap: own.labelGap ?? defaults.labelGap,
|
|
90
|
+
aligned: own.aligned,
|
|
91
|
+
flip: own.flip,
|
|
70
92
|
connector: { ...defaults.connector, ...own.connector }
|
|
71
93
|
};
|
|
72
94
|
});
|
|
73
95
|
const perRow = $derived(
|
|
74
|
-
!!declutter ||
|
|
96
|
+
!!declutter ||
|
|
97
|
+
!!marker.edgeAware ||
|
|
98
|
+
!!marker.onPointerEnter ||
|
|
99
|
+
!!marker.onPointerLeave ||
|
|
100
|
+
typeof marker.textAnchor === 'function'
|
|
75
101
|
);
|
|
76
102
|
const dir = $derived(Math.sign(dx) || 1);
|
|
77
103
|
|
|
@@ -99,9 +125,13 @@
|
|
|
99
125
|
if ((!declutter && !marker.edgeAware) || !xScale || !yScale) return undefined;
|
|
100
126
|
const xOf = channel(x ?? 0);
|
|
101
127
|
const yOf = channel(y ?? 0);
|
|
128
|
+
// A band's position is its start; a mark sits at its middle.
|
|
129
|
+
const middle = (scale: typeof plot.scales.x) =>
|
|
130
|
+
scale?.type === 'band' ? scale.fn.bandwidth() / 2 : 0;
|
|
131
|
+
const [dx0, dy0] = [middle(plot.scales.x), middle(plot.scales.y)];
|
|
102
132
|
return displayData.map((d) => ({
|
|
103
|
-
px: Number(xScale(xOf(d) as never)),
|
|
104
|
-
py: Number(yScale(yOf(d) as never))
|
|
133
|
+
px: Number(xScale(xOf(d) as never)) + dx0,
|
|
134
|
+
py: Number(yScale(yOf(d) as never)) + dy0
|
|
105
135
|
}));
|
|
106
136
|
});
|
|
107
137
|
|
|
@@ -112,6 +142,8 @@
|
|
|
112
142
|
dx,
|
|
113
143
|
fontSize,
|
|
114
144
|
geometry: declutter,
|
|
145
|
+
forceAligned: declutter.aligned,
|
|
146
|
+
flip: declutter.flip,
|
|
115
147
|
bounds
|
|
116
148
|
})
|
|
117
149
|
: undefined
|
|
@@ -157,33 +189,40 @@
|
|
|
157
189
|
rowAnchor: typeof textAnchor,
|
|
158
190
|
rowLineAnchor: typeof lineAnchor
|
|
159
191
|
)}
|
|
160
|
-
<
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
192
|
+
<g transform={projected ? `translate(${rowDx},${rowDy})` : undefined}>
|
|
193
|
+
<Text
|
|
194
|
+
data={rows}
|
|
195
|
+
x={x ?? (marker.frameAnchor ? undefined : 0)}
|
|
196
|
+
y={y ?? (marker.frameAnchor ? undefined : 0)}
|
|
197
|
+
frameAnchor={marker.frameAnchor}
|
|
198
|
+
text={text ?? ''}
|
|
199
|
+
dx={projected ? 0 : rowDx}
|
|
200
|
+
dy={projected ? 0 : rowDy}
|
|
201
|
+
fill={fill as never}
|
|
202
|
+
fillOpacity={fillOpacity as never}
|
|
203
|
+
{fontSize}
|
|
204
|
+
{fontWeight}
|
|
205
|
+
textAnchor={rowAnchor}
|
|
206
|
+
lineAnchor={rowLineAnchor}
|
|
207
|
+
fontStyle={fontStyleProp}
|
|
208
|
+
lineHeight={styles?.lineHeight}
|
|
209
|
+
rotate={styles?.rotate}
|
|
210
|
+
stroke={styles?.stroke}
|
|
211
|
+
strokeWidth={styles?.strokeWidth}
|
|
212
|
+
paintOrder={styles?.paintOrder}
|
|
213
|
+
class={styles?.class}
|
|
214
|
+
textClass={styles?.textClass}
|
|
215
|
+
/>
|
|
216
|
+
</g>
|
|
182
217
|
{/snippet}
|
|
183
218
|
|
|
184
219
|
{#snippet labels()}
|
|
185
220
|
{#if !perRow}
|
|
186
|
-
{
|
|
221
|
+
<RowOffsetMarks {marker} rows={displayData}>
|
|
222
|
+
{#snippet mark(rows)}
|
|
223
|
+
{@render label(rows, dx, dy, textAnchor, lineAnchor)}
|
|
224
|
+
{/snippet}
|
|
225
|
+
</RowOffsetMarks>
|
|
187
226
|
{:else if (!declutter && !marker.edgeAware) || points}
|
|
188
227
|
<!-- A decluttered or edge-aware label waits for both scales. -->
|
|
189
228
|
{#each displayData as d, i (i)}
|
|
@@ -213,23 +252,27 @@
|
|
|
213
252
|
onpointerenter={marker.onPointerEnter && (() => marker.onPointerEnter?.(d))}
|
|
214
253
|
onpointerleave={marker.onPointerLeave && (() => marker.onPointerLeave?.(d))}
|
|
215
254
|
>
|
|
216
|
-
{
|
|
217
|
-
{
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
255
|
+
<RowOffsetMarks {marker} rows={[d]}>
|
|
256
|
+
{#snippet mark(rows)}
|
|
257
|
+
{#if placement}
|
|
258
|
+
{@render label(
|
|
259
|
+
rows,
|
|
260
|
+
placement.dx,
|
|
261
|
+
placement.dy + extraDy,
|
|
262
|
+
placement.textAnchor,
|
|
263
|
+
placement.lineAnchor
|
|
264
|
+
)}
|
|
265
|
+
{:else}
|
|
266
|
+
{@render label(
|
|
267
|
+
rows,
|
|
268
|
+
labelDx,
|
|
269
|
+
dy + extraDy,
|
|
270
|
+
lane?.aligned && laneDir !== dir ? flipAnchor(anchorAt(d)) : anchorAt(d),
|
|
271
|
+
lineAnchor
|
|
272
|
+
)}
|
|
273
|
+
{/if}
|
|
274
|
+
{/snippet}
|
|
275
|
+
</RowOffsetMarks>
|
|
233
276
|
</g>
|
|
234
277
|
{/each}
|
|
235
278
|
{/if}
|
|
@@ -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;
|