@fundar/data-chart-telling 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +53 -0
- package/README.md +58 -19
- package/dist/configuration/config.svelte.d.ts +1 -1
- package/dist/configuration/config.svelte.js +172 -95
- package/dist/configuration/themes/index.d.ts +5 -1304
- package/dist/index.d.ts +24 -14
- package/dist/index.js +20 -10
- package/dist/layout/base/BasePlotLayout.svelte +129 -51
- package/dist/layout/base/BasePlotLayout.svelte.d.ts +1 -38
- package/dist/layout/coordinates/CoordinatesLayout.svelte +42 -40
- package/dist/layout/coordinates/CoordinatesLayout.svelte.d.ts +0 -2
- package/dist/layout/coordinates/ProjectionZoom.svelte +48 -0
- package/dist/layout/coordinates/ProjectionZoom.svelte.d.ts +10 -0
- package/dist/layout/coordinates/ZoomedProjection.d.ts +11 -0
- package/dist/layout/coordinates/ZoomedProjection.js +24 -0
- package/dist/layout/coordinates/camera.svelte.js +11 -8
- package/dist/layout/coordinates/projections/argentina.js +1 -1
- package/dist/layout/coordinates/projections/fit.d.ts +1 -1
- package/dist/layout/coordinates/projections/fit.js +1 -1
- package/dist/layout/coordinates/zoom.svelte.d.ts +4 -5
- package/dist/layout/coordinates/zoom.svelte.js +4 -5
- package/dist/layout/facet/FacetLayout.svelte +1 -1
- package/dist/layout/facet/config.js +1 -1
- package/dist/layout/figure/Figure.svelte +2 -0
- package/dist/layout/geometry/GeometryLayout.svelte +14 -9
- package/dist/layout/geometry/GeometryLayout.svelte.d.ts +0 -3
- package/dist/layout/geometry/MarkerOffset.svelte +28 -0
- package/dist/layout/geometry/MarkerOffset.svelte.d.ts +13 -0
- package/dist/layout/grid/GridCell.svelte +6 -8
- package/dist/layout/hover/HoverSettings.d.ts +20 -6
- package/dist/layout/hover/HoverSettings.js +29 -4
- package/dist/layout/legend/ContinuousSection.svelte +44 -9
- package/dist/layout/legend/DiscreteBadgeItem.svelte +2 -2
- package/dist/layout/legend/DiscreteSection.svelte +2 -2
- package/dist/layout/legend/DiscreteSymbolIcon.svelte +1 -1
- package/dist/layout/legend/LegendChannels.js +36 -12
- package/dist/layout/legend/LegendLayout.svelte +9 -1
- package/dist/layout/legend/LegendState.svelte.d.ts +9 -0
- package/dist/layout/legend/LegendState.svelte.js +24 -3
- package/dist/layout/legend/SizeSection.svelte +1 -1
- package/dist/layout/margins/PlotMargins.svelte.d.ts +2 -5
- package/dist/layout/margins/PlotMargins.svelte.js +4 -8
- package/dist/layout/plot/Plot.svelte +6 -3
- package/dist/layout/plot/PublicPlotContext.d.ts +5 -4
- package/dist/layout/plot/PublicPlotContext.js +7 -3
- package/dist/layout/plot/Slice.d.ts +5 -1
- package/dist/layout/plot/Slice.js +18 -6
- package/dist/layout/scales/EdgeTicks.d.ts +39 -0
- package/dist/layout/scales/EdgeTicks.js +82 -0
- package/dist/layout/scales/NiceTicks.d.ts +43 -0
- package/dist/layout/scales/NiceTicks.js +76 -0
- package/dist/layout/scales/ScalesLayout.svelte +133 -34
- package/dist/layout/scales/ScalesLayout.svelte.d.ts +10 -0
- package/dist/layout/scales/SveltePlotScale.d.ts +15 -0
- package/dist/layout/scales/SveltePlotScale.js +86 -0
- package/dist/layout/scales/TickLabels.d.ts +32 -0
- package/dist/layout/scales/TickLabels.js +55 -0
- package/dist/layout/styles/StylesLayout.svelte +2 -2
- package/dist/layout/styles/ValueLabels.d.ts +33 -5
- package/dist/layout/styles/ValueLabels.js +83 -23
- package/dist/layout/timeline/Timeline.svelte +5 -2
- package/dist/layout/timeline/Timeline.svelte.d.ts +2 -0
- package/dist/layout/timeline/TimelineLayout.svelte +39 -13
- package/dist/layout/timeline/TimelineLayout.svelte.d.ts +7 -5
- package/dist/layout/timeline/TimelineRule.svelte +1 -0
- package/dist/layout/timeline/TimelineState.svelte.d.ts +13 -5
- package/dist/layout/timeline/TimelineState.svelte.js +42 -8
- package/dist/layout/timeline/TimelineTime.d.ts +18 -0
- package/dist/layout/timeline/TimelineTime.js +117 -0
- package/dist/layout/tooltip/Tooltip.svelte +10 -7
- package/dist/layout/tooltip/Tooltip.svelte.d.ts +6 -4
- package/dist/layout/tooltip/TooltipState.svelte.d.ts +8 -2
- package/dist/layout/tooltip/TooltipState.svelte.js +23 -4
- package/dist/markers/MarkerKinds.d.ts +5 -0
- package/dist/markers/MarkerKinds.js +1 -0
- package/dist/markers/area/AreaMarker.svelte +15 -63
- package/dist/markers/arrow/ArrowMarker.svelte +51 -9
- package/dist/markers/bar/BarMarker.svelte +8 -4
- package/dist/markers/bollinger/BollingerMarker.svelte +33 -18
- package/dist/markers/box/BoxMarker.svelte +40 -9
- package/dist/markers/delta/Delta.js +1 -1
- package/dist/markers/delta/DeltaMarker.svelte +9 -7
- package/dist/markers/dot/DotMarker.svelte +24 -27
- package/dist/markers/image/ImageMarker.svelte +17 -12
- package/dist/markers/inset/InsetMarker.svelte +2 -2
- package/dist/markers/line/LineMarker.svelte +1 -0
- package/dist/markers/link/LinkMarker.svelte +174 -29
- package/dist/markers/regression/RegressionMarker.svelte +16 -33
- package/dist/markers/rule/RuleMarker.svelte +9 -3
- package/dist/markers/text/Declutter.d.ts +4 -0
- package/dist/markers/text/Declutter.js +26 -11
- package/dist/markers/text/TextMarker.svelte +91 -48
- package/dist/markers/tick/TickMarker.svelte +27 -25
- package/dist/markers/utils/MarkerChannels.d.ts +24 -0
- package/dist/markers/utils/MarkerChannels.js +42 -7
- package/dist/markers/utils/RowOffset.d.ts +23 -0
- package/dist/markers/utils/RowOffset.js +23 -0
- package/dist/markers/utils/RowOffsetMarks.svelte +30 -0
- package/dist/markers/utils/RowOffsetMarks.svelte.d.ts +33 -0
- package/dist/markers/utils/RowStroke.d.ts +31 -0
- package/dist/markers/utils/RowStroke.js +28 -0
- package/dist/markers/violin/ViolinMarker.svelte +75 -0
- package/dist/markers/violin/ViolinMarker.svelte.d.ts +7 -0
- package/dist/markers/violin/ViolinProfiles.d.ts +29 -0
- package/dist/markers/violin/ViolinProfiles.js +55 -0
- package/dist/markers/waffle/WaffleMarker.svelte +17 -37
- package/dist/phases/Pipeline.d.ts +5 -0
- package/dist/phases/Pipeline.js +8 -2
- package/dist/phases/data/DataPhase.d.ts +5 -11
- package/dist/phases/data/DataPhase.js +14 -11
- package/dist/phases/data/PlotAxes.d.ts +10 -0
- package/dist/phases/data/PlotAxes.js +14 -1
- package/dist/phases/facet/FacetPanels.d.ts +55 -0
- package/dist/phases/facet/FacetPanels.js +96 -0
- package/dist/phases/facet/FacetPhase.d.ts +1 -42
- package/dist/phases/facet/FacetPhase.js +1 -87
- package/dist/phases/hover/HoverPhase.d.ts +6 -43
- package/dist/phases/hover/HoverPhase.js +19 -54
- package/dist/phases/mapping/MappingPhase.d.ts +1 -1
- package/dist/phases/mapping/MappingPhase.js +3 -5
- package/dist/phases/markers/MarkersPhase.js +2 -1
- package/dist/phases/scales/CategoryOrder.d.ts +23 -0
- package/dist/phases/scales/CategoryOrder.js +73 -0
- package/dist/phases/scales/ScalesPhase.d.ts +1 -3
- package/dist/phases/scales/ScalesPhase.js +37 -27
- package/dist/phases/sharedScales/SharedScalesPhase.d.ts +6 -2
- package/dist/phases/sharedScales/SharedScalesPhase.js +14 -8
- package/dist/phases/statistics/Statistics.d.ts +10 -6
- package/dist/phases/statistics/Statistics.js +20 -10
- package/dist/phases/statistics/StatisticsPhase.js +10 -6
- package/dist/phases/statistics/methods/BollingerStatistic.d.ts +1 -1
- package/dist/phases/statistics/methods/BollingerStatistic.js +13 -11
- package/dist/phases/statistics/methods/BoxStatistic.d.ts +1 -1
- package/dist/phases/statistics/methods/BoxStatistic.js +14 -12
- package/dist/phases/statistics/methods/Density2dStatistic.d.ts +1 -1
- package/dist/phases/statistics/methods/Density2dStatistic.js +13 -11
- package/dist/phases/statistics/methods/DensityStatistic.d.ts +1 -1
- package/dist/phases/statistics/methods/DensityStatistic.js +11 -9
- package/dist/phases/statistics/methods/DeviationStatistic.d.ts +8 -0
- package/dist/phases/statistics/methods/DeviationStatistic.js +111 -0
- package/dist/phases/statistics/methods/MovingAverageStatistic.d.ts +1 -1
- package/dist/phases/statistics/methods/MovingAverageStatistic.js +11 -9
- package/dist/phases/statistics/methods/RegressionStatistic.d.ts +1 -1
- package/dist/phases/statistics/methods/RegressionStatistic.js +16 -14
- package/dist/phases/tooltip/TooltipPhase.d.ts +4 -2
- package/dist/phases/tooltip/TooltipPhase.js +10 -3
- package/dist/phases/transforms/ProcessedPositions.d.ts +30 -0
- package/dist/phases/transforms/ProcessedPositions.js +74 -0
- package/dist/phases/transforms/TransformsPhase.d.ts +5 -42
- package/dist/phases/transforms/TransformsPhase.js +67 -58
- package/dist/phases/transforms/ValueSelection.d.ts +30 -0
- package/dist/phases/transforms/ValueSelection.js +53 -0
- package/dist/plots/{heatmap → correlation/heatmap}/Plot.svelte +5 -2
- package/dist/plots/{heatmap → correlation/heatmap}/Plot.svelte.d.ts +2 -2
- package/dist/plots/{heatmap → correlation/heatmap}/defaults.d.ts +2 -2
- package/dist/plots/{heatmap → correlation/heatmap}/defaults.js +5 -5
- package/dist/plots/{heatmap → correlation/heatmap}/markers.d.ts +4 -4
- package/dist/plots/{heatmap → correlation/heatmap}/markers.js +4 -3
- package/dist/plots/{scatter → correlation/scatter}/Plot.svelte +5 -2
- package/dist/plots/{scatter → correlation/scatter}/Plot.svelte.d.ts +2 -2
- package/dist/plots/{scatter → correlation/scatter}/defaults.d.ts +2 -2
- package/dist/plots/{scatter → correlation/scatter}/defaults.js +6 -5
- package/dist/plots/{scatter → correlation/scatter}/markers.d.ts +4 -4
- package/dist/plots/{scatter → correlation/scatter}/markers.js +5 -4
- package/dist/plots/distribution/box/BoxSummaries.d.ts +19 -0
- package/dist/plots/distribution/box/BoxSummaries.js +101 -0
- package/dist/plots/distribution/box/Plot.svelte +42 -0
- package/dist/plots/distribution/box/Plot.svelte.d.ts +26 -0
- package/dist/plots/distribution/box/defaults.d.ts +12 -0
- package/dist/plots/distribution/box/defaults.js +34 -0
- package/dist/plots/distribution/box/markers.d.ts +12 -0
- package/dist/plots/distribution/box/markers.js +34 -0
- package/dist/plots/distribution/density/Plot.svelte +45 -0
- package/dist/plots/distribution/density/Plot.svelte.d.ts +26 -0
- package/dist/plots/distribution/density/defaults.d.ts +9 -0
- package/dist/plots/distribution/density/defaults.js +29 -0
- package/dist/plots/distribution/density/markers.d.ts +9 -0
- package/dist/plots/distribution/density/markers.js +42 -0
- package/dist/plots/{histogram → distribution/histogram}/Plot.svelte +2 -2
- package/dist/plots/{histogram → distribution/histogram}/Plot.svelte.d.ts +2 -2
- package/dist/plots/{histogram → distribution/histogram}/defaults.d.ts +2 -2
- package/dist/plots/{histogram → distribution/histogram}/defaults.js +4 -4
- package/dist/plots/{histogram → distribution/histogram}/markers.d.ts +3 -3
- package/dist/plots/{histogram → distribution/histogram}/markers.js +7 -7
- package/dist/plots/{pyramid → distribution/pyramid}/Plot.svelte +5 -2
- package/dist/plots/{pyramid → distribution/pyramid}/Plot.svelte.d.ts +2 -2
- package/dist/plots/{pyramid → distribution/pyramid}/defaults.d.ts +2 -2
- package/dist/plots/{pyramid → distribution/pyramid}/defaults.js +7 -6
- package/dist/plots/{pyramid → distribution/pyramid}/markers.d.ts +4 -4
- package/dist/plots/{pyramid → distribution/pyramid}/markers.js +8 -11
- package/dist/plots/distribution/violin/Plot.svelte +45 -0
- package/dist/plots/distribution/violin/Plot.svelte.d.ts +26 -0
- package/dist/plots/distribution/violin/defaults.d.ts +10 -0
- package/dist/plots/distribution/violin/defaults.js +58 -0
- package/dist/plots/distribution/violin/markers.d.ts +10 -0
- package/dist/plots/distribution/violin/markers.js +71 -0
- package/dist/plots/{area → evolution/area}/Plot.svelte +2 -2
- package/dist/plots/{area → evolution/area}/Plot.svelte.d.ts +2 -2
- package/dist/plots/{area → evolution/area}/defaults.d.ts +2 -2
- package/dist/plots/{area → evolution/area}/defaults.js +2 -0
- package/dist/plots/{area → evolution/area}/markers.d.ts +2 -2
- package/dist/plots/{area → evolution/area}/markers.js +2 -3
- package/dist/plots/{line → evolution/line}/Plot.svelte +2 -2
- package/dist/plots/{line → evolution/line}/Plot.svelte.d.ts +2 -2
- package/dist/plots/{line → evolution/line}/defaults.d.ts +2 -2
- package/dist/plots/{line → evolution/line}/defaults.js +2 -0
- package/dist/plots/{line → evolution/line}/markers.d.ts +11 -8
- package/dist/plots/{line → evolution/line}/markers.js +7 -6
- package/dist/plots/evolution/slope/Plot.svelte +42 -0
- package/dist/plots/evolution/slope/Plot.svelte.d.ts +26 -0
- package/dist/plots/evolution/slope/defaults.d.ts +8 -0
- package/dist/plots/evolution/slope/defaults.js +31 -0
- package/dist/plots/evolution/slope/markers.d.ts +16 -0
- package/dist/plots/evolution/slope/markers.js +79 -0
- package/dist/plots/evolution/sparkline/Plot.svelte +45 -0
- package/dist/plots/evolution/sparkline/Plot.svelte.d.ts +26 -0
- package/dist/plots/evolution/sparkline/defaults.d.ts +7 -0
- package/dist/plots/evolution/sparkline/defaults.js +23 -0
- package/dist/plots/evolution/sparkline/markers.d.ts +7 -0
- package/dist/plots/evolution/sparkline/markers.js +56 -0
- package/dist/plots/{geo → map/geo}/Core.svelte +11 -10
- package/dist/plots/{geo → map/geo}/Core.svelte.d.ts +1 -1
- package/dist/plots/map/geo/GeoFeatures.svelte.d.ts +9 -0
- package/dist/plots/map/geo/GeoFeatures.svelte.js +55 -0
- package/dist/plots/map/geo/GeoGeometry.d.ts +27 -0
- package/dist/plots/map/geo/GeoGeometry.js +142 -0
- package/dist/plots/map/geo/GeoSegments.d.ts +16 -0
- package/dist/plots/map/geo/GeoSegments.js +23 -0
- package/dist/plots/{geo → map/geo}/Plot.svelte +10 -10
- package/dist/plots/{geo → map/geo}/Plot.svelte.d.ts +2 -2
- package/dist/plots/{geo → map/geo}/defaults.d.ts +2 -2
- package/dist/plots/{geo → map/geo}/defaults.js +1 -1
- package/dist/plots/{geo → map/geo}/phases/data.d.ts +1 -1
- package/dist/plots/{geo → map/geo}/phases/data.js +7 -6
- package/dist/plots/{geo → map/geo}/phases/hover.d.ts +1 -1
- package/dist/plots/{geo → map/geo}/phases/hover.js +5 -5
- package/dist/plots/{geo → map/geo}/phases/markers.d.ts +1 -1
- package/dist/plots/{geo → map/geo}/phases/markers.js +8 -13
- package/dist/plots/{geo → map/geo}/phases/scales.d.ts +2 -2
- package/dist/plots/{geo → map/geo}/phases/scales.js +28 -12
- package/dist/plots/{geo → map/geo}/phases/tooltip.d.ts +1 -1
- package/dist/plots/map/geo/phases/tooltip.js +5 -0
- package/dist/plots/{geo → map/geo}/slices.d.ts +2 -2
- package/dist/plots/{geo → map/geo}/slices.js +7 -4
- package/dist/plots/{bar → ranking/bar}/Plot.svelte +2 -2
- package/dist/plots/{bar → ranking/bar}/Plot.svelte.d.ts +2 -2
- package/dist/plots/ranking/bar/defaults.d.ts +16 -0
- package/dist/plots/{bar → ranking/bar}/defaults.js +17 -15
- package/dist/plots/{bar → ranking/bar}/markers.d.ts +8 -8
- package/dist/plots/{bar → ranking/bar}/markers.js +11 -19
- package/dist/plots/ranking/bullet/Plot.svelte +42 -0
- package/dist/plots/ranking/bullet/Plot.svelte.d.ts +26 -0
- package/dist/plots/ranking/bullet/defaults.d.ts +8 -0
- package/dist/plots/ranking/bullet/defaults.js +24 -0
- package/dist/plots/ranking/bullet/markers.d.ts +10 -0
- package/dist/plots/ranking/bullet/markers.js +90 -0
- package/dist/plots/ranking/cleveland/ClevelandConnector.d.ts +48 -0
- package/dist/plots/ranking/cleveland/ClevelandConnector.js +140 -0
- package/dist/plots/ranking/cleveland/ClevelandMarkers.d.ts +33 -0
- package/dist/plots/ranking/cleveland/ClevelandMarkers.js +375 -0
- package/dist/plots/ranking/cleveland/ClevelandRanges.d.ts +31 -0
- package/dist/plots/ranking/cleveland/ClevelandRanges.js +116 -0
- package/dist/plots/ranking/cleveland/Plot.svelte +45 -0
- package/dist/plots/ranking/cleveland/Plot.svelte.d.ts +26 -0
- package/dist/plots/ranking/cleveland/defaults.d.ts +13 -0
- package/dist/plots/ranking/cleveland/defaults.js +66 -0
- package/dist/plots/ranking/dumbbell/Plot.svelte +45 -0
- package/dist/plots/ranking/dumbbell/Plot.svelte.d.ts +26 -0
- package/dist/plots/ranking/dumbbell/defaults.d.ts +9 -0
- package/dist/plots/ranking/dumbbell/defaults.js +19 -0
- package/dist/plots/ranking/forest/Plot.svelte +42 -0
- package/dist/plots/ranking/forest/Plot.svelte.d.ts +26 -0
- package/dist/plots/ranking/forest/defaults.d.ts +11 -0
- package/dist/plots/ranking/forest/defaults.js +20 -0
- package/dist/plots/ranking/lollipop/Plot.svelte +45 -0
- package/dist/plots/ranking/lollipop/Plot.svelte.d.ts +26 -0
- package/dist/plots/ranking/lollipop/defaults.d.ts +9 -0
- package/dist/plots/ranking/lollipop/defaults.js +18 -0
- package/dist/plots/utils/RowNumbers.d.ts +16 -0
- package/dist/plots/utils/RowNumbers.js +24 -0
- package/dist/plots/utils/gaps.js +1 -1
- package/dist/plots/utils/segments.js +1 -1
- package/dist/types/configuration/styling.d.ts +287 -132
- package/dist/types/layout/composer.d.ts +5 -2
- package/dist/types/layout/coordinates.d.ts +5 -4
- package/dist/types/layout/legend.d.ts +21 -5
- package/dist/types/layout/plot.d.ts +44 -1
- package/dist/types/layout/scales.d.ts +51 -3
- package/dist/types/layout/statistics/deviation.d.ts +40 -0
- package/dist/types/layout/statistics/index.d.ts +7 -2
- package/dist/types/layout/styles/base.d.ts +18 -0
- package/dist/types/layout/styles/bullet.d.ts +25 -0
- package/dist/types/layout/styles/connector.d.ts +98 -0
- package/dist/types/layout/styles/curve.d.ts +11 -0
- package/dist/types/layout/styles/frame.d.ts +17 -0
- package/dist/types/layout/styles/gaps.d.ts +12 -0
- package/dist/types/layout/styles/geo.d.ts +55 -0
- package/dist/types/layout/styles/index.d.ts +8 -0
- package/dist/types/layout/styles/index.js +8 -0
- package/dist/types/layout/styles/values.d.ts +47 -0
- package/dist/types/layout/timeline.d.ts +19 -7
- package/dist/types/layout/tooltip.d.ts +6 -2
- package/dist/types/markers/axis/area.d.ts +2 -2
- package/dist/types/markers/axis/arrow.d.ts +3 -0
- package/dist/types/markers/axis/axisBasedMarkersConfig.d.ts +2 -1
- package/dist/types/markers/axis/bar.d.ts +1 -1
- package/dist/types/markers/axis/box.d.ts +5 -0
- package/dist/types/markers/axis/difference.d.ts +2 -2
- package/dist/types/markers/axis/image.d.ts +3 -2
- package/dist/types/markers/axis/line.d.ts +2 -0
- package/dist/types/markers/axis/rule.d.ts +9 -0
- package/dist/types/markers/axis/trail.d.ts +2 -3
- package/dist/types/markers/axis/violin.d.ts +25 -0
- package/dist/types/markers/basic/dot.d.ts +3 -2
- package/dist/types/markers/basic/text.d.ts +13 -3
- package/dist/types/markers/channels/commonMarkerConfig.d.ts +7 -3
- package/dist/types/markers/channels/commonMarkerConfigWithRowOffset.d.ts +13 -0
- package/dist/types/markers/common.d.ts +1 -1
- package/dist/types/markers/common.js +1 -0
- package/dist/types/markers/geo/link.d.ts +5 -1
- package/dist/types/phases/hover/phase.d.ts +6 -0
- package/dist/types/phases/index.d.ts +1 -1
- package/dist/types/phases/scales/phase.d.ts +5 -1
- package/dist/types/phases/state.d.ts +20 -4
- package/dist/types/phases/statistics/phase.d.ts +3 -1
- package/dist/types/phases/statistics/source.d.ts +3 -1
- package/dist/types/phases/transforms/phase.d.ts +32 -0
- package/dist/types/plots/{heatmap → correlation/heatmap}/props.d.ts +6 -6
- package/dist/types/plots/{heatmap → correlation/heatmap}/state.d.ts +4 -4
- package/dist/types/plots/{scatter → correlation/scatter}/props.d.ts +6 -6
- package/dist/types/plots/{scatter → correlation/scatter}/state.d.ts +2 -2
- package/dist/types/plots/distribution/box/props.d.ts +10 -0
- package/dist/types/plots/distribution/box/state.d.ts +23 -0
- package/dist/types/plots/distribution/density/props.d.ts +23 -0
- package/dist/types/plots/distribution/density/state.d.ts +6 -0
- package/dist/types/plots/distribution/density/state.js +1 -0
- package/dist/types/plots/{histogram → distribution/histogram}/props.d.ts +7 -7
- package/dist/types/plots/distribution/histogram/props.js +1 -0
- package/dist/types/plots/{histogram → distribution/histogram}/state.d.ts +2 -2
- package/dist/types/plots/distribution/histogram/state.js +1 -0
- package/dist/types/plots/{pyramid → distribution/pyramid}/props.d.ts +6 -6
- package/dist/types/plots/distribution/pyramid/props.js +1 -0
- package/dist/types/plots/{pyramid → distribution/pyramid}/state.d.ts +3 -3
- package/dist/types/plots/distribution/pyramid/state.js +1 -0
- package/dist/types/plots/distribution/violin/props.d.ts +23 -0
- package/dist/types/plots/distribution/violin/props.js +1 -0
- package/dist/types/plots/distribution/violin/state.d.ts +6 -0
- package/dist/types/plots/distribution/violin/state.js +1 -0
- package/dist/types/plots/{area → evolution/area}/props.d.ts +6 -6
- package/dist/types/plots/evolution/area/props.js +1 -0
- package/dist/types/plots/{area → evolution/area}/state.d.ts +2 -2
- package/dist/types/plots/evolution/area/state.js +1 -0
- package/dist/types/plots/evolution/line/props.d.ts +10 -0
- package/dist/types/plots/evolution/line/props.js +1 -0
- package/dist/types/plots/{line → evolution/line}/state.d.ts +3 -3
- package/dist/types/plots/evolution/line/state.js +1 -0
- package/dist/types/plots/evolution/slope/props.d.ts +5 -0
- package/dist/types/plots/evolution/slope/props.js +1 -0
- package/dist/types/plots/evolution/slope/state.d.ts +5 -0
- package/dist/types/plots/evolution/slope/state.js +1 -0
- package/dist/types/plots/evolution/sparkline/props.d.ts +5 -0
- package/dist/types/plots/evolution/sparkline/props.js +1 -0
- package/dist/types/plots/evolution/sparkline/state.d.ts +5 -0
- package/dist/types/plots/evolution/sparkline/state.js +1 -0
- package/dist/types/plots/{geo → map/geo}/props.d.ts +8 -8
- package/dist/types/plots/map/geo/props.js +1 -0
- package/dist/types/plots/{geo → map/geo}/state.d.ts +18 -11
- package/dist/types/plots/map/geo/state.js +1 -0
- package/dist/types/plots/props.d.ts +3 -1
- package/dist/types/plots/{bar → ranking/bar}/props.d.ts +6 -6
- package/dist/types/plots/ranking/bar/props.js +1 -0
- package/dist/types/plots/{bar → ranking/bar}/state.d.ts +2 -2
- package/dist/types/plots/ranking/bar/state.js +1 -0
- package/dist/types/plots/ranking/bullet/props.d.ts +22 -0
- package/dist/types/plots/ranking/bullet/props.js +1 -0
- package/dist/types/plots/ranking/bullet/state.d.ts +5 -0
- package/dist/types/plots/ranking/bullet/state.js +1 -0
- package/dist/types/plots/ranking/cleveland/props.d.ts +10 -0
- package/dist/types/plots/ranking/cleveland/props.js +1 -0
- package/dist/types/plots/ranking/cleveland/state.d.ts +49 -0
- package/dist/types/plots/ranking/cleveland/state.js +1 -0
- package/dist/types/plots/ranking/dumbbell/props.d.ts +10 -0
- package/dist/types/plots/ranking/dumbbell/props.js +1 -0
- package/dist/types/plots/ranking/dumbbell/state.d.ts +5 -0
- package/dist/types/plots/ranking/dumbbell/state.js +1 -0
- package/dist/types/plots/ranking/forest/props.d.ts +23 -0
- package/dist/types/plots/ranking/forest/props.js +1 -0
- package/dist/types/plots/ranking/forest/state.d.ts +5 -0
- package/dist/types/plots/ranking/forest/state.js +1 -0
- package/dist/types/plots/ranking/lollipop/props.d.ts +10 -0
- package/dist/types/plots/ranking/lollipop/props.js +1 -0
- package/dist/types/plots/ranking/lollipop/state.d.ts +5 -0
- package/dist/types/plots/ranking/lollipop/state.js +1 -0
- package/dist/types/plots/segments/common.d.ts +4 -1
- package/dist/utils/OpacityScale.d.ts +14 -0
- package/dist/utils/OpacityScale.js +43 -0
- package/dist/utils/{symbol.d.ts → SymbolPath.d.ts} +0 -12
- package/dist/utils/{symbol.js → SymbolPath.js} +0 -24
- package/dist/utils/SymbolScale.d.ts +18 -0
- package/dist/utils/SymbolScale.js +29 -0
- package/dist/utils/color/ColorRamp.d.ts +27 -0
- package/dist/utils/color/ColorRamp.js +120 -0
- package/dist/utils/color/CssColor.d.ts +19 -0
- package/dist/utils/color/CssColor.js +114 -0
- package/dist/utils/color/Palette.d.ts +21 -0
- package/dist/utils/color/Palette.js +52 -0
- package/dist/utils/color/index.d.ts +11 -3
- package/dist/utils/color/index.js +14 -3
- package/dist/utils/grouping.js +1 -1
- package/docs/architecture.md +1 -1
- package/docs/chrome.md +39 -8
- package/docs/composer.md +19 -3
- package/docs/concepts.md +1 -1
- package/docs/development.md +14 -5
- package/docs/facets.md +62 -8
- package/docs/getting-started.md +8 -9
- package/docs/legend.md +73 -24
- package/docs/markers.md +45 -32
- package/docs/plots/correlation/heatmap.md +26 -0
- package/docs/plots/correlation/scatter.md +35 -0
- package/docs/plots/distribution/box.md +28 -0
- package/docs/plots/distribution/density.md +26 -0
- package/docs/plots/distribution/histogram.md +33 -0
- package/docs/plots/distribution/pyramid.md +31 -0
- package/docs/plots/distribution/violin.md +35 -0
- package/docs/plots/evolution/area.md +32 -0
- package/docs/plots/evolution/line.md +93 -0
- package/docs/plots/evolution/slope.md +39 -0
- package/docs/plots/evolution/sparkline.md +34 -0
- package/docs/plots/ranking/bar.md +59 -0
- package/docs/plots/ranking/bullet.md +37 -0
- package/docs/plots/ranking/cleveland.md +54 -0
- package/docs/plots/ranking/dumbbell.md +39 -0
- package/docs/plots/ranking/forest.md +40 -0
- package/docs/plots/ranking/lollipop.md +39 -0
- package/docs/plots.md +22 -154
- package/docs/scales.md +50 -27
- package/docs/state.md +1 -1
- package/docs/styles-and-segments.md +96 -39
- package/docs/theming.md +33 -19
- package/docs/timeline.md +62 -28
- package/docs/tooltip-and-hover.md +72 -24
- package/docs/transforms-and-statistics.md +56 -25
- package/examples/BarValues.svelte +2 -2
- package/examples/Box.svelte +7 -0
- package/examples/Bullet.svelte +17 -0
- package/examples/Chrome.svelte +17 -0
- package/examples/ChromeOrder.svelte +18 -0
- package/examples/Cleveland.svelte +15 -0
- package/examples/Composer.svelte +23 -0
- package/examples/CustomTooltip.svelte +21 -14
- package/examples/Density.svelte +7 -0
- package/examples/Dumbbell.svelte +16 -0
- package/examples/Facets.svelte +3 -3
- package/examples/FacetsCarousel.svelte +14 -0
- package/examples/FacetsRowsCols.svelte +23 -0
- package/examples/FirstPlot.svelte +7 -0
- package/examples/Forest.svelte +17 -0
- package/examples/Gaps.svelte +21 -0
- package/examples/GroupedBars.svelte +15 -0
- package/examples/Heatmap.svelte +7 -0
- package/examples/HeatmapSegments.svelte +26 -0
- package/examples/Histogram.svelte +14 -0
- package/examples/HorizontalBars.svelte +15 -0
- package/examples/LegendSections.svelte +27 -0
- package/examples/LegendToggle.svelte +3 -3
- package/examples/LineByRegion.svelte +18 -0
- package/examples/LineDates.svelte +15 -0
- package/examples/LineStep.svelte +16 -0
- package/examples/LineStepSegment.svelte +18 -0
- package/examples/Lollipop.svelte +17 -0
- package/examples/Markers.svelte +27 -0
- package/examples/MovingAverage.svelte +15 -0
- package/examples/Pyramid.svelte +14 -0
- package/examples/Regression.svelte +14 -0
- package/examples/ResponsiveLine.svelte +7 -7
- package/examples/Scales.svelte +26 -0
- package/examples/Scatter.svelte +16 -0
- package/examples/SegmentHighlight.svelte +22 -0
- package/examples/Segments.svelte +11 -3
- package/examples/SegmentsBySeries.svelte +25 -0
- package/examples/Slope.svelte +17 -0
- package/examples/Sparkline.svelte +14 -0
- package/examples/StackedArea.svelte +16 -0
- package/examples/StackedBars.svelte +15 -0
- package/examples/TimelinePlayer.svelte +8 -7
- package/examples/TimelineRule.svelte +19 -0
- package/examples/Tooltip.svelte +3 -3
- package/examples/ValueLabels.svelte +21 -0
- package/examples/Violin.svelte +14 -0
- package/examples/datasets/argentina-chile-trends.ts +34 -0
- package/examples/datasets/commodity-prices.ts +48 -0
- package/examples/datasets/countries-over-time.ts +368 -0
- package/examples/datasets/daily-temperature.ts +121 -0
- package/examples/datasets/earthquakes.ts +977 -0
- package/examples/datasets/flight-routes.ts +29 -0
- package/examples/datasets/height-density.ts +37 -0
- package/examples/datasets/heights.ts +370 -0
- package/examples/datasets/index.ts +24 -0
- package/examples/datasets/inflation-by-region.ts +44 -0
- package/examples/datasets/inflation-ranges.ts +34 -0
- package/examples/datasets/iris-flower.ts +207 -0
- package/examples/datasets/life-expectancy.ts +95 -0
- package/examples/datasets/napoleons-march.ts +182 -0
- package/examples/datasets/penguins.ts +54 -0
- package/examples/datasets/population-by-age-with-gaps.ts +23 -0
- package/examples/datasets/population-by-age.ts +890 -0
- package/examples/datasets/province-population.ts +521 -0
- package/examples/datasets/stock-prices.ts +63 -0
- package/examples/datasets/weather-stations-over-time.ts +31 -0
- package/examples/datasets/weather-stations.ts +22 -0
- package/examples/datasets/wind-vectors.ts +30 -0
- package/examples/datasets/world-temperature.ts +400 -0
- package/llms-full.txt +51 -12
- package/llms.txt +60 -4
- package/package.json +12 -2
- package/dist/layout/scales/buildScale.d.ts +0 -8
- package/dist/layout/scales/buildScale.js +0 -67
- package/dist/layout/scales/niceDomain.d.ts +0 -23
- package/dist/layout/scales/niceDomain.js +0 -59
- package/dist/plots/bar/defaults.d.ts +0 -9
- package/dist/plots/geo/features.svelte.d.ts +0 -5
- package/dist/plots/geo/features.svelte.js +0 -44
- package/dist/plots/geo/phases/tooltip.js +0 -5
- package/dist/plots/utils/geoAccessors.d.ts +0 -72
- package/dist/plots/utils/geoAccessors.js +0 -220
- package/dist/plots/utils/geoSegments.d.ts +0 -29
- package/dist/plots/utils/geoSegments.js +0 -37
- package/dist/types/layout/styles.d.ts +0 -122
- package/dist/types/markers/axis/curveName.d.ts +0 -2
- package/dist/types/plots/line/props.d.ts +0 -10
- package/dist/utils/color/contrast.d.ts +0 -9
- package/dist/utils/color/contrast.js +0 -40
- package/dist/utils/color/cssColor.d.ts +0 -4
- package/dist/utils/color/cssColor.js +0 -77
- package/dist/utils/color/ramp.d.ts +0 -17
- package/dist/utils/color/ramp.js +0 -110
- package/dist/utils/opacity.d.ts +0 -9
- package/dist/utils/opacity.js +0 -38
- package/examples/data.ts +0 -12
- /package/dist/types/layout/{styles.js → statistics/deviation.js} +0 -0
- /package/dist/types/{markers/axis/curveName.js → layout/styles/base.js} +0 -0
- /package/dist/types/{plots/area/props.js → layout/styles/bullet.js} +0 -0
- /package/dist/types/{plots/area/state.js → layout/styles/connector.js} +0 -0
- /package/dist/types/{plots/bar/props.js → layout/styles/curve.js} +0 -0
- /package/dist/types/{plots/bar/state.js → layout/styles/frame.js} +0 -0
- /package/dist/types/{plots/geo/props.js → layout/styles/gaps.js} +0 -0
- /package/dist/types/{plots/geo/state.js → layout/styles/geo.js} +0 -0
- /package/dist/types/{plots/heatmap/props.js → layout/styles/values.js} +0 -0
- /package/dist/types/{plots/heatmap/state.js → markers/axis/violin.js} +0 -0
- /package/dist/types/{plots/histogram/props.js → markers/channels/commonMarkerConfigWithRowOffset.js} +0 -0
- /package/dist/types/plots/{line → correlation/heatmap}/props.js +0 -0
- /package/dist/types/plots/{histogram → correlation/heatmap}/state.js +0 -0
- /package/dist/types/plots/{pyramid → correlation/scatter}/props.js +0 -0
- /package/dist/types/plots/{line → correlation/scatter}/state.js +0 -0
- /package/dist/types/plots/{scatter → distribution/box}/props.js +0 -0
- /package/dist/types/plots/{pyramid → distribution/box}/state.js +0 -0
- /package/dist/types/plots/{scatter/state.js → distribution/density/props.js} +0 -0
- /package/dist/{plots/utils → utils}/accessors.d.ts +0 -0
- /package/dist/{plots/utils → utils}/accessors.js +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fundar/data-chart-telling",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Declarative charts, maps and small multiples for Svelte, built on svelteplot.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Ezequiel Puerta",
|
|
@@ -26,6 +26,14 @@
|
|
|
26
26
|
"docs",
|
|
27
27
|
"!docs/images",
|
|
28
28
|
"examples",
|
|
29
|
+
"!examples/geo",
|
|
30
|
+
"!examples/datasets/amba-partidos.ts",
|
|
31
|
+
"!examples/datasets/argentina-provinces.ts",
|
|
32
|
+
"!examples/datasets/caba-comunas.ts",
|
|
33
|
+
"!examples/datasets/napoleons-rivers.ts",
|
|
34
|
+
"!examples/datasets/usa-country.ts",
|
|
35
|
+
"!examples/datasets/world-countries.ts",
|
|
36
|
+
"!examples/datasets/world-countries-topology.ts",
|
|
29
37
|
"llms.txt",
|
|
30
38
|
"llms-full.txt"
|
|
31
39
|
],
|
|
@@ -120,9 +128,11 @@
|
|
|
120
128
|
"format": "prettier --write .",
|
|
121
129
|
"test": "vitest run --project=unit --project=browser",
|
|
122
130
|
"test:coverage": "node scripts/coverage.mjs",
|
|
131
|
+
"test:perf": "vitest run --project=perf --reporter=verbose",
|
|
123
132
|
"test:stories": "vitest run --project=storybook",
|
|
124
133
|
"storybook": "storybook dev -p 6006",
|
|
125
134
|
"build-storybook": "storybook build",
|
|
126
|
-
"docs:images": "node scripts/docs-images.mjs"
|
|
135
|
+
"docs:images": "node scripts/docs-images.mjs",
|
|
136
|
+
"docs:examples": "node scripts/sync-examples.mjs"
|
|
127
137
|
}
|
|
128
138
|
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { AxisScale } from '../../types/layout/scales';
|
|
2
|
-
import type { AxisValue } from '../../types/layout/mapping';
|
|
3
|
-
/**
|
|
4
|
-
* An {@link AxisScale} as svelteplot's `<Plot x>`/`<Plot y>` accepts it: without
|
|
5
|
-
* `grid`, `axisDisplay` and a vertical `label`, which `ScalesLayout` draws, and
|
|
6
|
-
* with `nice: true` on an unpinned numeric axis.
|
|
7
|
-
*/
|
|
8
|
-
export declare function buildScale<TData>(scale: AxisScale<TData> | undefined, rows: TData[], getAxisValue: (d: TData) => AxisValue): AxisScale<TData> | undefined;
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { SvelteSet } from 'svelte/reactivity';
|
|
2
|
-
/** One representative row per unique axis value (first occurrence in `rows`). */
|
|
3
|
-
function uniqueRows(rows, getAxisValue) {
|
|
4
|
-
const seen = new SvelteSet();
|
|
5
|
-
const out = [];
|
|
6
|
-
for (const row of rows) {
|
|
7
|
-
const v = getAxisValue(row);
|
|
8
|
-
if (seen.has(v))
|
|
9
|
-
continue;
|
|
10
|
-
seen.add(v);
|
|
11
|
-
out.push(row);
|
|
12
|
-
}
|
|
13
|
-
return out;
|
|
14
|
-
}
|
|
15
|
-
/** svelteplot's `sort` option only does a fixed ascending sort; a custom `scale.sort` comparator is resolved into an explicit `domain` instead, which svelteplot honors as-is. */
|
|
16
|
-
function sortedScale(scale, rows, getAxisValue) {
|
|
17
|
-
const sort = scale?.sort;
|
|
18
|
-
if (!sort || scale?.domain)
|
|
19
|
-
return scale;
|
|
20
|
-
const reps = uniqueRows(rows, getAxisValue);
|
|
21
|
-
if (reps.length === 0 || !reps.every((r) => typeof getAxisValue(r) === 'string'))
|
|
22
|
-
return scale;
|
|
23
|
-
const domain = [...reps].sort(sort).map(getAxisValue);
|
|
24
|
-
return { ...scale, domain };
|
|
25
|
-
}
|
|
26
|
-
/** Scale types {@link buildScale}'s default `nice` only applies to - every other type has its own tick semantics (or isn't numeric at all). */
|
|
27
|
-
const CONTINUOUS_NUMERIC_TYPES = new Set(['auto', 'linear', 'pow', 'sqrt', 'log', 'symlog']);
|
|
28
|
-
/** Whether the axis' values are numeric; `nice` on a categorical axis would make svelteplot treat it as linear. */
|
|
29
|
-
function isNumericAxis(rows, getAxisValue) {
|
|
30
|
-
let numericSeen = 0;
|
|
31
|
-
for (const row of rows) {
|
|
32
|
-
const v = getAxisValue(row);
|
|
33
|
-
if (v == null)
|
|
34
|
-
continue;
|
|
35
|
-
if (typeof v !== 'number')
|
|
36
|
-
return false;
|
|
37
|
-
if (++numericSeen >= 2)
|
|
38
|
-
return true;
|
|
39
|
-
}
|
|
40
|
-
return numericSeen > 0;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* An {@link AxisScale} as svelteplot's `<Plot x>`/`<Plot y>` accepts it: without
|
|
44
|
-
* `grid`, `axisDisplay` and a vertical `label`, which `ScalesLayout` draws, and
|
|
45
|
-
* with `nice: true` on an unpinned numeric axis.
|
|
46
|
-
*/
|
|
47
|
-
export function buildScale(scale, rows, getAxisValue) {
|
|
48
|
-
const sorted = sortedScale(scale, rows, getAxisValue);
|
|
49
|
-
const wantsNice = scale?.domain == null &&
|
|
50
|
-
scale?.ticks == null &&
|
|
51
|
-
scale?.nice == null &&
|
|
52
|
-
(scale?.type == null || CONTINUOUS_NUMERIC_TYPES.has(scale.type)) &&
|
|
53
|
-
isNumericAxis(rows, getAxisValue);
|
|
54
|
-
const removesAxis = scale?.axisDisplay === 'none';
|
|
55
|
-
if (!sorted && !wantsNice && !removesAxis)
|
|
56
|
-
return sorted;
|
|
57
|
-
const out = { ...sorted };
|
|
58
|
-
delete out.grid;
|
|
59
|
-
delete out.axisDisplay;
|
|
60
|
-
if (removesAxis)
|
|
61
|
-
out.axis = false;
|
|
62
|
-
if (scale?.labelOrientation === 'vertical')
|
|
63
|
-
out.label = false;
|
|
64
|
-
if (wantsNice)
|
|
65
|
-
out.nice = true;
|
|
66
|
-
return out;
|
|
67
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/** Step between "nice" (1/2/5×10ⁿ) tick values for an approximate `count` over `[start, stop]`. */
|
|
2
|
-
export declare function tickStep(start: number, stop: number, count: number): number;
|
|
3
|
-
/** Multiples of `step` covering `[start, stop]`, inclusive of either endpoint when it lands exactly on one. */
|
|
4
|
-
export declare function ticksInRange(start: number, stop: number, step: number): number[];
|
|
5
|
-
/** Ticks-per-axis heuristic - used by `ScalesLayout` to pick a target count from an axis's actual pixel span. */
|
|
6
|
-
export declare function naturalTickCount(span: number, spacing: number, min: number): number;
|
|
7
|
-
/**
|
|
8
|
-
* Widens `[lo, hi]` outward to the nearest `count`-ish "nice" step -
|
|
9
|
-
* equivalent to d3's own `scale.nice(count)`, except a value within
|
|
10
|
-
* `epsilonFraction × step` of a step boundary is treated as already sitting
|
|
11
|
-
* on it, rather than needing a full extra step to clear it.
|
|
12
|
-
*
|
|
13
|
-
* Exists because plain `Math.ceil`/`Math.floor` (what `nice()` uses
|
|
14
|
-
* internally, both here and in d3) has zero tolerance: a value meant to be
|
|
15
|
-
* exactly `100` that comes out `100.00000000000001` after summing several
|
|
16
|
-
* independently-rounded parts (a common shape for "these categories add up
|
|
17
|
-
* to a whole" data, e.g. percentages of a total) still fails `hi <= step*N`
|
|
18
|
-
* and gets rounded up a full step further than the data actually warrants
|
|
19
|
-
* (`100` → `110`, not just a hair past `100`). `epsilonFraction` defaults to
|
|
20
|
-
* 1% of the step - small enough to only catch rounding/summation noise, not
|
|
21
|
-
* data that's genuinely meaningfully past the boundary.
|
|
22
|
-
*/
|
|
23
|
-
export declare function niceDomain(lo: number, hi: number, count?: number, epsilonFraction?: number): [number, number];
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
// d3-array-compatible "nice" tick step/generation, reimplemented locally to
|
|
2
|
-
// avoid depending on internals svelteplot itself pulls in (not one of our
|
|
3
|
-
// declared dependencies) - see https://d3js.org/d3-array/ticks.
|
|
4
|
-
/** Step between "nice" (1/2/5×10ⁿ) tick values for an approximate `count` over `[start, stop]`. */
|
|
5
|
-
export function tickStep(start, stop, count) {
|
|
6
|
-
const e10 = Math.sqrt(50);
|
|
7
|
-
const e5 = Math.sqrt(10);
|
|
8
|
-
const e2 = Math.sqrt(2);
|
|
9
|
-
const step0 = Math.abs(stop - start) / Math.max(0, count);
|
|
10
|
-
let step1 = 10 ** Math.floor(Math.log10(step0));
|
|
11
|
-
const error = step0 / step1;
|
|
12
|
-
if (error >= e10)
|
|
13
|
-
step1 *= 10;
|
|
14
|
-
else if (error >= e5)
|
|
15
|
-
step1 *= 5;
|
|
16
|
-
else if (error >= e2)
|
|
17
|
-
step1 *= 2;
|
|
18
|
-
return step1;
|
|
19
|
-
}
|
|
20
|
-
/** Multiples of `step` covering `[start, stop]`, inclusive of either endpoint when it lands exactly on one. */
|
|
21
|
-
export function ticksInRange(start, stop, step) {
|
|
22
|
-
if (!(step > 0) || !Number.isFinite(step))
|
|
23
|
-
return [];
|
|
24
|
-
const lo = Math.ceil(start / step);
|
|
25
|
-
const hi = Math.floor(stop / step);
|
|
26
|
-
const out = [];
|
|
27
|
-
for (let i = lo; i <= hi; i++)
|
|
28
|
-
out.push(i * step);
|
|
29
|
-
return out;
|
|
30
|
-
}
|
|
31
|
-
/** Ticks-per-axis heuristic - used by `ScalesLayout` to pick a target count from an axis's actual pixel span. */
|
|
32
|
-
export function naturalTickCount(span, spacing, min) {
|
|
33
|
-
return Math.max(min, Math.round(span / spacing));
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Widens `[lo, hi]` outward to the nearest `count`-ish "nice" step -
|
|
37
|
-
* equivalent to d3's own `scale.nice(count)`, except a value within
|
|
38
|
-
* `epsilonFraction × step` of a step boundary is treated as already sitting
|
|
39
|
-
* on it, rather than needing a full extra step to clear it.
|
|
40
|
-
*
|
|
41
|
-
* Exists because plain `Math.ceil`/`Math.floor` (what `nice()` uses
|
|
42
|
-
* internally, both here and in d3) has zero tolerance: a value meant to be
|
|
43
|
-
* exactly `100` that comes out `100.00000000000001` after summing several
|
|
44
|
-
* independently-rounded parts (a common shape for "these categories add up
|
|
45
|
-
* to a whole" data, e.g. percentages of a total) still fails `hi <= step*N`
|
|
46
|
-
* and gets rounded up a full step further than the data actually warrants
|
|
47
|
-
* (`100` → `110`, not just a hair past `100`). `epsilonFraction` defaults to
|
|
48
|
-
* 1% of the step - small enough to only catch rounding/summation noise, not
|
|
49
|
-
* data that's genuinely meaningfully past the boundary.
|
|
50
|
-
*/
|
|
51
|
-
export function niceDomain(lo, hi, count = 5, epsilonFraction = 0.01) {
|
|
52
|
-
if (!(hi > lo))
|
|
53
|
-
return [lo, hi];
|
|
54
|
-
const step = tickStep(lo, hi, count);
|
|
55
|
-
const eps = step * epsilonFraction;
|
|
56
|
-
const niceLo = Math.floor((lo + eps) / step) * step;
|
|
57
|
-
const niceHi = Math.ceil((hi - eps) / step) * step;
|
|
58
|
-
return [niceLo, niceHi];
|
|
59
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { AxisPlotDefaults } from '../../types/phases';
|
|
2
|
-
import type { BarPlotState, BarPlotCtx } from '../../types/plots/bar/state';
|
|
3
|
-
/**
|
|
4
|
-
* BarPlot on the shared pipeline: discrete bars with gap fills along one
|
|
5
|
-
* category axis - `x`, or `y` for horizontal bars, as the "data" phase reads
|
|
6
|
-
* it off the values - its own scales (padding, bar layout) and markers.
|
|
7
|
-
* Its plot defaults to: hover along the category axis, timeline tweens matched per category and group.
|
|
8
|
-
*/
|
|
9
|
-
export declare function buildBarDefaults<TData extends Record<string, unknown>>(): AxisPlotDefaults<BarPlotState<TData>, BarPlotCtx>;
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { GeoFeature, GeoJsonInput, Topology } from '../../types/plots/data/geo';
|
|
2
|
-
/** A GeoPlot's `data` as a feature list: GeoJSON as is, a TopoJSON `Topology` converted under `object`. */
|
|
3
|
-
export declare function createGeoFeatures<TProps extends Record<string, unknown>>(getData: () => GeoJsonInput<TProps> | Topology, getObject: () => string | undefined): {
|
|
4
|
-
readonly features: GeoFeature<TProps>[];
|
|
5
|
-
};
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { isTopology, topologyToGeoJson } from '../utils/topojson';
|
|
2
|
-
/** A GeoPlot's `data` as a feature list: GeoJSON as is, a TopoJSON `Topology` converted under `object`. */
|
|
3
|
-
export function createGeoFeatures(getData, getObject) {
|
|
4
|
-
let topoFeatures = $state(null);
|
|
5
|
-
$effect(() => {
|
|
6
|
-
const data = getData();
|
|
7
|
-
const object = getObject();
|
|
8
|
-
if (!isTopology(data))
|
|
9
|
-
return;
|
|
10
|
-
if (!object) {
|
|
11
|
-
console.warn('GeoPlot: `data` is a TopoJSON Topology but no `object` key was given - nothing will render.');
|
|
12
|
-
topoFeatures = [];
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
let cancelled = false;
|
|
16
|
-
topologyToGeoJson(data, object)
|
|
17
|
-
.then((resolved) => {
|
|
18
|
-
if (!cancelled)
|
|
19
|
-
topoFeatures = resolved;
|
|
20
|
-
})
|
|
21
|
-
.catch((err) => {
|
|
22
|
-
if (!cancelled) {
|
|
23
|
-
console.warn(err instanceof Error ? err.message : String(err));
|
|
24
|
-
topoFeatures = [];
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
return () => {
|
|
28
|
-
cancelled = true;
|
|
29
|
-
};
|
|
30
|
-
});
|
|
31
|
-
const features = $derived.by(() => {
|
|
32
|
-
const data = getData();
|
|
33
|
-
if (isTopology(data))
|
|
34
|
-
return topoFeatures ?? [];
|
|
35
|
-
if (Array.isArray(data))
|
|
36
|
-
return data;
|
|
37
|
-
return data.features;
|
|
38
|
-
});
|
|
39
|
-
return {
|
|
40
|
-
get features() {
|
|
41
|
-
return features;
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import type { GeoFeature } from '../../types/plots/data/geo';
|
|
2
|
-
/**
|
|
3
|
-
* Bounding-box center of a geometry's flattened coordinates - a cheap
|
|
4
|
-
* approximation used for default label placement, not a true
|
|
5
|
-
* geographic/area centroid (no polygon-hole or geodesic-area weighting).
|
|
6
|
-
* For hover-matching specifically, see `geometryPartCentroids` instead -
|
|
7
|
-
* this single combined point can land far from every actual part of a
|
|
8
|
-
* multi-part geometry whose pieces are geographically spread out.
|
|
9
|
-
*/
|
|
10
|
-
export declare function geometryCentroid(geometry: GeoJSON.Geometry): [number, number];
|
|
11
|
-
/**
|
|
12
|
-
* Splits a geometry into its disjoint parts: one `Polygon` per element of a
|
|
13
|
-
* `MultiPolygon`'s `coordinates`, one `LineString` per element of a
|
|
14
|
-
* `MultiLineString`'s, `GeometryCollection` recursed and flattened, and any
|
|
15
|
-
* other geometry type returned unchanged as its own single-element array.
|
|
16
|
-
* The shared building block behind `geometryPartCentroids` (one centroid per
|
|
17
|
-
* part) and `filterGeometryParts` (keep/drop whole parts).
|
|
18
|
-
*/
|
|
19
|
-
export declare function splitGeometryParts(geometry: GeoJSON.Geometry): GeoJSON.Geometry[];
|
|
20
|
-
/**
|
|
21
|
-
* Like `geometryCentroid`, but returns one point per disjoint part instead
|
|
22
|
-
* of a single bounding-box center across all of them. A `MultiPolygon`
|
|
23
|
-
* whose parts are geographically far apart - e.g. Argentina's "Tierra del
|
|
24
|
-
* Fuego, Antártida e Islas del Atlántico Sur" province, whose `MultiPolygon`
|
|
25
|
-
* spans the mainland island, the Antarctic sector, and the South Atlantic
|
|
26
|
-
* islands in one feature - would otherwise get a single hover point
|
|
27
|
-
* stranded somewhere between all of them, matching hovers over *none* of
|
|
28
|
-
* the actually-rendered shapes. Multiple points attributed to the same
|
|
29
|
-
* feature is fine for hover-matching (nearest point wins, whichever part
|
|
30
|
-
* that is); it's only label placement (`geometryCentroid`) that needs a
|
|
31
|
-
* single point.
|
|
32
|
-
*/
|
|
33
|
-
export declare function geometryPartCentroids(geometry: GeoJSON.Geometry): [number, number][];
|
|
34
|
-
/**
|
|
35
|
-
* Keeps or drops each disjoint part of a geometry (see `splitGeometryParts`)
|
|
36
|
-
* based on a per-part predicate, reassembling a geometry of the same type
|
|
37
|
-
* from whatever survives - `null` if nothing does. Used to let a single
|
|
38
|
-
* feature's geometry be split between the main map and an `inset` marker
|
|
39
|
-
* (see `GeoDataProps.excludeParts`/`GeoInsetMarkerConfig.featurePartsFilter`)
|
|
40
|
-
* without preprocessing the source data: e.g. a province whose `MultiPolygon`
|
|
41
|
-
* spans both a mainland part and a far-flung part can have the main map
|
|
42
|
-
* exclude the latter while an inset shows only it.
|
|
43
|
-
*/
|
|
44
|
-
export declare function filterGeometryParts(geometry: GeoJSON.Geometry, keep: (part: {
|
|
45
|
-
centroid: [number, number];
|
|
46
|
-
geometry: GeoJSON.Geometry;
|
|
47
|
-
}) => boolean): GeoJSON.Geometry | null;
|
|
48
|
-
/** Default `featureId`: `feature.id`, else `properties.id`, else `properties.name`. */
|
|
49
|
-
export declare function defaultFeatureId<TProps extends Record<string, unknown>>(f: GeoFeature<TProps>): string;
|
|
50
|
-
/**
|
|
51
|
-
* `[minLon, minLat, maxLon, maxLat]` across every coordinate of a geometry -
|
|
52
|
-
* `null` for one with none (an empty `GeometryCollection`). Used by
|
|
53
|
-
* `Plot.svelte`'s `dataLonLatBounds` to cap how far a tile layer's
|
|
54
|
-
* letterboxed margin reaches (see `clampBoundsToDataPadding` in
|
|
55
|
-
* `$lib/plots/utils/tiles`).
|
|
56
|
-
*/
|
|
57
|
-
export declare function geometryLonLatBounds(geometry: GeoJSON.Geometry): [number, number, number, number] | null;
|
|
58
|
-
/**
|
|
59
|
-
* Densifies a great-circle arc between two lon/lat points into `steps + 1`
|
|
60
|
-
* points via spherical linear interpolation (slerp) - used to draw a `link`
|
|
61
|
-
* marker's geodesic curve through the `Geo` mark (see `Plot.svelte`).
|
|
62
|
-
*
|
|
63
|
-
* Not delegated to svelteplot's own `Link` mark: its 0.14.2 projection
|
|
64
|
-
* integration (`Mark.svelte`'s paired-channel handling) reads a single
|
|
65
|
-
* `row.x`/`row.y` pair regardless of channel suffix, so a mark bound to
|
|
66
|
-
* `x1`/`y1`/`x2`/`y2` (never plain `x`/`y`) resolves every point as invalid
|
|
67
|
-
* whenever the plot has an active `projection` scale - which GeoPlot always
|
|
68
|
-
* does. `Geo` has no such limitation (geo marks are explicitly excluded from
|
|
69
|
-
* that code path), so a manually-interpolated `LineString` feature sidesteps
|
|
70
|
-
* the bug entirely while still producing the same geodesic visual.
|
|
71
|
-
*/
|
|
72
|
-
export declare function greatCircleInterpolate(lon1: number, lat1: number, lon2: number, lat2: number, steps?: number): [number, number][];
|
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
function flattenCoords(geom, out) {
|
|
2
|
-
switch (geom.type) {
|
|
3
|
-
case 'Point':
|
|
4
|
-
out.push(geom.coordinates);
|
|
5
|
-
break;
|
|
6
|
-
case 'MultiPoint':
|
|
7
|
-
case 'LineString':
|
|
8
|
-
for (const c of geom.coordinates)
|
|
9
|
-
out.push(c);
|
|
10
|
-
break;
|
|
11
|
-
case 'MultiLineString':
|
|
12
|
-
case 'Polygon':
|
|
13
|
-
for (const ring of geom.coordinates) {
|
|
14
|
-
for (const c of ring)
|
|
15
|
-
out.push(c);
|
|
16
|
-
}
|
|
17
|
-
break;
|
|
18
|
-
case 'MultiPolygon':
|
|
19
|
-
for (const poly of geom.coordinates) {
|
|
20
|
-
for (const ring of poly) {
|
|
21
|
-
for (const c of ring)
|
|
22
|
-
out.push(c);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
break;
|
|
26
|
-
case 'GeometryCollection':
|
|
27
|
-
for (const g of geom.geometries)
|
|
28
|
-
flattenCoords(g, out);
|
|
29
|
-
break;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
function boundsCenter(coords) {
|
|
33
|
-
if (coords.length === 0)
|
|
34
|
-
return [0, 0];
|
|
35
|
-
let minX = Infinity;
|
|
36
|
-
let maxX = -Infinity;
|
|
37
|
-
let minY = Infinity;
|
|
38
|
-
let maxY = -Infinity;
|
|
39
|
-
for (const [x, y] of coords) {
|
|
40
|
-
if (x < minX)
|
|
41
|
-
minX = x;
|
|
42
|
-
if (x > maxX)
|
|
43
|
-
maxX = x;
|
|
44
|
-
if (y < minY)
|
|
45
|
-
minY = y;
|
|
46
|
-
if (y > maxY)
|
|
47
|
-
maxY = y;
|
|
48
|
-
}
|
|
49
|
-
return [(minX + maxX) / 2, (minY + maxY) / 2];
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Bounding-box center of a geometry's flattened coordinates - a cheap
|
|
53
|
-
* approximation used for default label placement, not a true
|
|
54
|
-
* geographic/area centroid (no polygon-hole or geodesic-area weighting).
|
|
55
|
-
* For hover-matching specifically, see `geometryPartCentroids` instead -
|
|
56
|
-
* this single combined point can land far from every actual part of a
|
|
57
|
-
* multi-part geometry whose pieces are geographically spread out.
|
|
58
|
-
*/
|
|
59
|
-
export function geometryCentroid(geometry) {
|
|
60
|
-
const coords = [];
|
|
61
|
-
flattenCoords(geometry, coords);
|
|
62
|
-
return boundsCenter(coords);
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Splits a geometry into its disjoint parts: one `Polygon` per element of a
|
|
66
|
-
* `MultiPolygon`'s `coordinates`, one `LineString` per element of a
|
|
67
|
-
* `MultiLineString`'s, `GeometryCollection` recursed and flattened, and any
|
|
68
|
-
* other geometry type returned unchanged as its own single-element array.
|
|
69
|
-
* The shared building block behind `geometryPartCentroids` (one centroid per
|
|
70
|
-
* part) and `filterGeometryParts` (keep/drop whole parts).
|
|
71
|
-
*/
|
|
72
|
-
export function splitGeometryParts(geometry) {
|
|
73
|
-
switch (geometry.type) {
|
|
74
|
-
case 'MultiPolygon':
|
|
75
|
-
return geometry.coordinates.map((polygon) => ({ type: 'Polygon', coordinates: polygon }));
|
|
76
|
-
case 'MultiLineString':
|
|
77
|
-
return geometry.coordinates.map((line) => ({ type: 'LineString', coordinates: line }));
|
|
78
|
-
case 'GeometryCollection':
|
|
79
|
-
return geometry.geometries.flatMap((g) => splitGeometryParts(g));
|
|
80
|
-
default:
|
|
81
|
-
return [geometry];
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Like `geometryCentroid`, but returns one point per disjoint part instead
|
|
86
|
-
* of a single bounding-box center across all of them. A `MultiPolygon`
|
|
87
|
-
* whose parts are geographically far apart - e.g. Argentina's "Tierra del
|
|
88
|
-
* Fuego, Antártida e Islas del Atlántico Sur" province, whose `MultiPolygon`
|
|
89
|
-
* spans the mainland island, the Antarctic sector, and the South Atlantic
|
|
90
|
-
* islands in one feature - would otherwise get a single hover point
|
|
91
|
-
* stranded somewhere between all of them, matching hovers over *none* of
|
|
92
|
-
* the actually-rendered shapes. Multiple points attributed to the same
|
|
93
|
-
* feature is fine for hover-matching (nearest point wins, whichever part
|
|
94
|
-
* that is); it's only label placement (`geometryCentroid`) that needs a
|
|
95
|
-
* single point.
|
|
96
|
-
*/
|
|
97
|
-
export function geometryPartCentroids(geometry) {
|
|
98
|
-
return splitGeometryParts(geometry).map((part) => geometryCentroid(part));
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Keeps or drops each disjoint part of a geometry (see `splitGeometryParts`)
|
|
102
|
-
* based on a per-part predicate, reassembling a geometry of the same type
|
|
103
|
-
* from whatever survives - `null` if nothing does. Used to let a single
|
|
104
|
-
* feature's geometry be split between the main map and an `inset` marker
|
|
105
|
-
* (see `GeoDataProps.excludeParts`/`GeoInsetMarkerConfig.featurePartsFilter`)
|
|
106
|
-
* without preprocessing the source data: e.g. a province whose `MultiPolygon`
|
|
107
|
-
* spans both a mainland part and a far-flung part can have the main map
|
|
108
|
-
* exclude the latter while an inset shows only it.
|
|
109
|
-
*/
|
|
110
|
-
export function filterGeometryParts(geometry, keep) {
|
|
111
|
-
const parts = splitGeometryParts(geometry);
|
|
112
|
-
const keptParts = parts.filter((part) => keep({ centroid: geometryCentroid(part), geometry: part }));
|
|
113
|
-
if (keptParts.length === parts.length)
|
|
114
|
-
return geometry;
|
|
115
|
-
if (keptParts.length === 0)
|
|
116
|
-
return null;
|
|
117
|
-
if (parts.length === 1)
|
|
118
|
-
return keptParts[0];
|
|
119
|
-
switch (geometry.type) {
|
|
120
|
-
case 'MultiPolygon':
|
|
121
|
-
return {
|
|
122
|
-
type: 'MultiPolygon',
|
|
123
|
-
coordinates: keptParts.map((part) => part.coordinates)
|
|
124
|
-
};
|
|
125
|
-
case 'MultiLineString':
|
|
126
|
-
return {
|
|
127
|
-
type: 'MultiLineString',
|
|
128
|
-
coordinates: keptParts.map((part) => part.coordinates)
|
|
129
|
-
};
|
|
130
|
-
case 'GeometryCollection':
|
|
131
|
-
return { type: 'GeometryCollection', geometries: keptParts };
|
|
132
|
-
default:
|
|
133
|
-
return geometry;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
/** Default `featureId`: `feature.id`, else `properties.id`, else `properties.name`. */
|
|
137
|
-
export function defaultFeatureId(f) {
|
|
138
|
-
const props = f.properties;
|
|
139
|
-
return String(f.id ?? props?.id ?? props?.name ?? '');
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* `[minLon, minLat, maxLon, maxLat]` across every coordinate of a geometry -
|
|
143
|
-
* `null` for one with none (an empty `GeometryCollection`). Used by
|
|
144
|
-
* `Plot.svelte`'s `dataLonLatBounds` to cap how far a tile layer's
|
|
145
|
-
* letterboxed margin reaches (see `clampBoundsToDataPadding` in
|
|
146
|
-
* `$lib/plots/utils/tiles`).
|
|
147
|
-
*/
|
|
148
|
-
export function geometryLonLatBounds(geometry) {
|
|
149
|
-
const coords = [];
|
|
150
|
-
flattenCoords(geometry, coords);
|
|
151
|
-
if (coords.length === 0)
|
|
152
|
-
return null;
|
|
153
|
-
let minLon = Infinity;
|
|
154
|
-
let maxLon = -Infinity;
|
|
155
|
-
let minLat = Infinity;
|
|
156
|
-
let maxLat = -Infinity;
|
|
157
|
-
for (const [lon, lat] of coords) {
|
|
158
|
-
if (lon < minLon)
|
|
159
|
-
minLon = lon;
|
|
160
|
-
if (lon > maxLon)
|
|
161
|
-
maxLon = lon;
|
|
162
|
-
if (lat < minLat)
|
|
163
|
-
minLat = lat;
|
|
164
|
-
if (lat > maxLat)
|
|
165
|
-
maxLat = lat;
|
|
166
|
-
}
|
|
167
|
-
return [minLon, minLat, maxLon, maxLat];
|
|
168
|
-
}
|
|
169
|
-
function toRad(deg) {
|
|
170
|
-
return (deg * Math.PI) / 180;
|
|
171
|
-
}
|
|
172
|
-
function toDeg(rad) {
|
|
173
|
-
return (rad * 180) / Math.PI;
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* Densifies a great-circle arc between two lon/lat points into `steps + 1`
|
|
177
|
-
* points via spherical linear interpolation (slerp) - used to draw a `link`
|
|
178
|
-
* marker's geodesic curve through the `Geo` mark (see `Plot.svelte`).
|
|
179
|
-
*
|
|
180
|
-
* Not delegated to svelteplot's own `Link` mark: its 0.14.2 projection
|
|
181
|
-
* integration (`Mark.svelte`'s paired-channel handling) reads a single
|
|
182
|
-
* `row.x`/`row.y` pair regardless of channel suffix, so a mark bound to
|
|
183
|
-
* `x1`/`y1`/`x2`/`y2` (never plain `x`/`y`) resolves every point as invalid
|
|
184
|
-
* whenever the plot has an active `projection` scale - which GeoPlot always
|
|
185
|
-
* does. `Geo` has no such limitation (geo marks are explicitly excluded from
|
|
186
|
-
* that code path), so a manually-interpolated `LineString` feature sidesteps
|
|
187
|
-
* the bug entirely while still producing the same geodesic visual.
|
|
188
|
-
*/
|
|
189
|
-
export function greatCircleInterpolate(lon1, lat1, lon2, lat2, steps = 64) {
|
|
190
|
-
const phi1 = toRad(lat1);
|
|
191
|
-
const lambda1 = toRad(lon1);
|
|
192
|
-
const phi2 = toRad(lat2);
|
|
193
|
-
const lambda2 = toRad(lon2);
|
|
194
|
-
const sinPhi1 = Math.sin(phi1);
|
|
195
|
-
const cosPhi1 = Math.cos(phi1);
|
|
196
|
-
const sinPhi2 = Math.sin(phi2);
|
|
197
|
-
const cosPhi2 = Math.cos(phi2);
|
|
198
|
-
const d = 2 *
|
|
199
|
-
Math.asin(Math.sqrt(Math.sin((phi2 - phi1) / 2) ** 2 +
|
|
200
|
-
cosPhi1 * cosPhi2 * Math.sin((lambda2 - lambda1) / 2) ** 2));
|
|
201
|
-
if (!Number.isFinite(d) || d === 0) {
|
|
202
|
-
return [
|
|
203
|
-
[lon1, lat1],
|
|
204
|
-
[lon2, lat2]
|
|
205
|
-
];
|
|
206
|
-
}
|
|
207
|
-
const points = [];
|
|
208
|
-
for (let i = 0; i <= steps; i++) {
|
|
209
|
-
const f = i / steps;
|
|
210
|
-
const a = Math.sin((1 - f) * d) / Math.sin(d);
|
|
211
|
-
const b = Math.sin(f * d) / Math.sin(d);
|
|
212
|
-
const x = a * cosPhi1 * Math.cos(lambda1) + b * cosPhi2 * Math.cos(lambda2);
|
|
213
|
-
const y = a * cosPhi1 * Math.sin(lambda1) + b * cosPhi2 * Math.sin(lambda2);
|
|
214
|
-
const z = a * sinPhi1 + b * sinPhi2;
|
|
215
|
-
const phi = Math.atan2(z, Math.sqrt(x * x + y * y));
|
|
216
|
-
const lambda = Math.atan2(y, x);
|
|
217
|
-
points.push([toDeg(lambda), toDeg(phi)]);
|
|
218
|
-
}
|
|
219
|
-
return points;
|
|
220
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import type { ChannelScalesConfig } from '../../types/layout/scales';
|
|
2
|
-
import type { Segment } from '../../types/plots/segments/config';
|
|
3
|
-
import type { SegmentsConfig } from '../../types/plots/props';
|
|
4
|
-
/**
|
|
5
|
-
* Feature-specific segments listed after 'default' so they override it on
|
|
6
|
-
* merge (see `resolveFeatureStyle`). When the feature has a resolved
|
|
7
|
-
* `grouping` bucket, that bucket's own entries are listed in between -
|
|
8
|
-
* `default` < grouping bucket < feature-specific, most specific last.
|
|
9
|
-
*/
|
|
10
|
-
export declare function resolveSegmentsForFeature<TStyle>(segments: SegmentsConfig<TStyle>, featureId: string, groupingValue?: string): Segment<TStyle>[];
|
|
11
|
-
/**
|
|
12
|
-
* A geo feature is atomic - `Segment.areas` (x/y range restriction) doesn't
|
|
13
|
-
* apply, so every entry under a key is treated as a flat style patch applied
|
|
14
|
-
* in order: `'default'` entries apply first, then the grouping bucket's (if
|
|
15
|
-
* any), then feature-specific entries. This intentionally does NOT reuse
|
|
16
|
-
* `segments.ts`'s `validateSegments` - its "only the first catch-all wins"
|
|
17
|
-
* warning assumes area-based semantics that don't hold here, since every geo
|
|
18
|
-
* segment entry merges rather than being dropped.
|
|
19
|
-
*/
|
|
20
|
-
export declare function resolveFeatureStyle<TStyle extends object>(segments: SegmentsConfig<TStyle>, featureId: string, groupingValue?: string): TStyle;
|
|
21
|
-
/**
|
|
22
|
-
* A feature's own effective `scales` override, if any of its matching
|
|
23
|
-
* segments (`default`, its grouping bucket, or itself) set one - the last
|
|
24
|
-
* (most specific) entry that defines `scales` wins outright, unlike
|
|
25
|
-
* `resolveFeatureStyle`'s field-by-field merge, since a ramp config isn't
|
|
26
|
-
* sensibly mergeable key-by-key (a `domain` from one entry and a `scheme`
|
|
27
|
-
* from another wouldn't be a coherent scale).
|
|
28
|
-
*/
|
|
29
|
-
export declare function resolveFeatureScales<TStyle>(segments: SegmentsConfig<TStyle>, featureId: string, groupingValue?: string): ChannelScalesConfig | undefined;
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
const DEFAULT_KEY = 'default';
|
|
2
|
-
/**
|
|
3
|
-
* Feature-specific segments listed after 'default' so they override it on
|
|
4
|
-
* merge (see `resolveFeatureStyle`). When the feature has a resolved
|
|
5
|
-
* `grouping` bucket, that bucket's own entries are listed in between -
|
|
6
|
-
* `default` < grouping bucket < feature-specific, most specific last.
|
|
7
|
-
*/
|
|
8
|
-
export function resolveSegmentsForFeature(segments, featureId, groupingValue) {
|
|
9
|
-
return [
|
|
10
|
-
...(segments[DEFAULT_KEY] ?? []),
|
|
11
|
-
...(groupingValue ? (segments[groupingValue] ?? []) : []),
|
|
12
|
-
...(segments[featureId] ?? [])
|
|
13
|
-
];
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* A geo feature is atomic - `Segment.areas` (x/y range restriction) doesn't
|
|
17
|
-
* apply, so every entry under a key is treated as a flat style patch applied
|
|
18
|
-
* in order: `'default'` entries apply first, then the grouping bucket's (if
|
|
19
|
-
* any), then feature-specific entries. This intentionally does NOT reuse
|
|
20
|
-
* `segments.ts`'s `validateSegments` - its "only the first catch-all wins"
|
|
21
|
-
* warning assumes area-based semantics that don't hold here, since every geo
|
|
22
|
-
* segment entry merges rather than being dropped.
|
|
23
|
-
*/
|
|
24
|
-
export function resolveFeatureStyle(segments, featureId, groupingValue) {
|
|
25
|
-
return resolveSegmentsForFeature(segments, featureId, groupingValue).reduce((acc, seg) => ({ ...acc, ...(seg.styles ?? {}) }), {});
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* A feature's own effective `scales` override, if any of its matching
|
|
29
|
-
* segments (`default`, its grouping bucket, or itself) set one - the last
|
|
30
|
-
* (most specific) entry that defines `scales` wins outright, unlike
|
|
31
|
-
* `resolveFeatureStyle`'s field-by-field merge, since a ramp config isn't
|
|
32
|
-
* sensibly mergeable key-by-key (a `domain` from one entry and a `scheme`
|
|
33
|
-
* from another wouldn't be a coherent scale).
|
|
34
|
-
*/
|
|
35
|
-
export function resolveFeatureScales(segments, featureId, groupingValue) {
|
|
36
|
-
return resolveSegmentsForFeature(segments, featureId, groupingValue).reduce((acc, seg) => seg.scales ?? acc, undefined);
|
|
37
|
-
}
|