@ggts-sh/svelte 0.43.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/LICENSE +21 -0
- package/README.md +97 -0
- package/bin/ggts-codemod.js +47 -0
- package/dist/GGPlot.svelte +491 -0
- package/dist/GGPlot.svelte.d.ts +67 -0
- package/dist/a11y/CanvasA11y.svelte +115 -0
- package/dist/a11y/CanvasA11y.svelte.d.ts +15 -0
- package/dist/a11y/canvas-a11y.d.ts +1 -0
- package/dist/a11y/canvas-a11y.js +2 -0
- package/dist/assembly/assemble.d.ts +1 -0
- package/dist/assembly/assemble.js +1 -0
- package/dist/assembly/labels.d.ts +43 -0
- package/dist/assembly/labels.js +126 -0
- package/dist/assembly/layout.d.ts +158 -0
- package/dist/assembly/layout.js +175 -0
- package/dist/chrome/StatusChrome.svelte +125 -0
- package/dist/chrome/StatusChrome.svelte.d.ts +16 -0
- package/dist/chrome/ToolRail.svelte +293 -0
- package/dist/chrome/ToolRail.svelte.d.ts +26 -0
- package/dist/chrome/chrome-state.svelte.d.ts +63 -0
- package/dist/chrome/chrome-state.svelte.js +158 -0
- package/dist/chrome/theme-css.d.ts +16 -0
- package/dist/chrome/theme-css.js +16 -0
- package/dist/codemod/cli.d.ts +16 -0
- package/dist/codemod/cli.js +150 -0
- package/dist/codemod/edits.d.ts +28 -0
- package/dist/codemod/edits.js +36 -0
- package/dist/codemod/index.d.ts +10 -0
- package/dist/codemod/index.js +10 -0
- package/dist/codemod/migrate-plot-props-rewrite.d.ts +86 -0
- package/dist/codemod/migrate-plot-props-rewrite.js +228 -0
- package/dist/codemod/migrate-plot-props.d.ts +38 -0
- package/dist/codemod/migrate-plot-props.js +159 -0
- package/dist/coord/Coord.svelte +21 -0
- package/dist/coord/Coord.svelte.d.ts +16 -0
- package/dist/coord/CoordCartesian.svelte +11 -0
- package/dist/coord/CoordCartesian.svelte.d.ts +18 -0
- package/dist/coord/CoordFixed.svelte +17 -0
- package/dist/coord/CoordFixed.svelte.d.ts +10 -0
- package/dist/coord/CoordFlip.svelte +11 -0
- package/dist/coord/CoordFlip.svelte.d.ts +18 -0
- package/dist/coord/CoordPolar.svelte +16 -0
- package/dist/coord/CoordPolar.svelte.d.ts +9 -0
- package/dist/coord/CoordRadial.svelte +16 -0
- package/dist/coord/CoordRadial.svelte.d.ts +9 -0
- package/dist/coord/CoordSf.svelte +16 -0
- package/dist/coord/CoordSf.svelte.d.ts +9 -0
- package/dist/coord/CoordTransform.svelte +16 -0
- package/dist/coord/CoordTransform.svelte.d.ts +9 -0
- package/dist/data/index.d.ts +1 -0
- package/dist/data/index.js +2 -0
- package/dist/diagnostics/composition.d.ts +112 -0
- package/dist/diagnostics/composition.js +203 -0
- package/dist/diagnostics/deprecation.d.ts +58 -0
- package/dist/diagnostics/deprecation.js +27 -0
- package/dist/diagnostics/plot-engine-diagnostics.svelte.d.ts +44 -0
- package/dist/diagnostics/plot-engine-diagnostics.svelte.js +193 -0
- package/dist/facet/Facet.svelte +23 -0
- package/dist/facet/Facet.svelte.d.ts +16 -0
- package/dist/facet/FacetGrid.svelte +32 -0
- package/dist/facet/FacetGrid.svelte.d.ts +16 -0
- package/dist/facet/FacetWrap.svelte +32 -0
- package/dist/facet/FacetWrap.svelte.d.ts +16 -0
- package/dist/fonts/RobotoCondensed-Bold.ttf +0 -0
- package/dist/fonts/RobotoCondensed-Light.ttf +0 -0
- package/dist/fonts/RobotoCondensed-Regular.ttf +0 -0
- package/dist/fonts/THIRD_PARTY_NOTICES.txt +416 -0
- package/dist/geoms/GeomAbline.svelte +25 -0
- package/dist/geoms/GeomAbline.svelte.d.ts +7 -0
- package/dist/geoms/GeomArea.svelte +12 -0
- package/dist/geoms/GeomArea.svelte.d.ts +7 -0
- package/dist/geoms/GeomBar.svelte +12 -0
- package/dist/geoms/GeomBar.svelte.d.ts +7 -0
- package/dist/geoms/GeomBin2d.svelte +21 -0
- package/dist/geoms/GeomBin2d.svelte.d.ts +7 -0
- package/dist/geoms/GeomBlank.svelte +12 -0
- package/dist/geoms/GeomBlank.svelte.d.ts +7 -0
- package/dist/geoms/GeomBoxplot.svelte +25 -0
- package/dist/geoms/GeomBoxplot.svelte.d.ts +7 -0
- package/dist/geoms/GeomCol.svelte +12 -0
- package/dist/geoms/GeomCol.svelte.d.ts +7 -0
- package/dist/geoms/GeomContour.svelte +25 -0
- package/dist/geoms/GeomContour.svelte.d.ts +7 -0
- package/dist/geoms/GeomCount.svelte +12 -0
- package/dist/geoms/GeomCount.svelte.d.ts +7 -0
- package/dist/geoms/GeomCrossbar.svelte +25 -0
- package/dist/geoms/GeomCrossbar.svelte.d.ts +7 -0
- package/dist/geoms/GeomCurve.svelte +21 -0
- package/dist/geoms/GeomCurve.svelte.d.ts +7 -0
- package/dist/geoms/GeomDensity.svelte +25 -0
- package/dist/geoms/GeomDensity.svelte.d.ts +7 -0
- package/dist/geoms/GeomDensity2d.svelte +25 -0
- package/dist/geoms/GeomDensity2d.svelte.d.ts +7 -0
- package/dist/geoms/GeomDensity2dFilled.svelte +25 -0
- package/dist/geoms/GeomDensity2dFilled.svelte.d.ts +7 -0
- package/dist/geoms/GeomDotplot.svelte +25 -0
- package/dist/geoms/GeomDotplot.svelte.d.ts +7 -0
- package/dist/geoms/GeomErrorbar.svelte +25 -0
- package/dist/geoms/GeomErrorbar.svelte.d.ts +7 -0
- package/dist/geoms/GeomFreqpoly.svelte +25 -0
- package/dist/geoms/GeomFreqpoly.svelte.d.ts +7 -0
- package/dist/geoms/GeomFunction.svelte +25 -0
- package/dist/geoms/GeomFunction.svelte.d.ts +7 -0
- package/dist/geoms/GeomHex.svelte +21 -0
- package/dist/geoms/GeomHex.svelte.d.ts +7 -0
- package/dist/geoms/GeomHistogram.svelte +25 -0
- package/dist/geoms/GeomHistogram.svelte.d.ts +7 -0
- package/dist/geoms/GeomHline.svelte +12 -0
- package/dist/geoms/GeomHline.svelte.d.ts +7 -0
- package/dist/geoms/GeomJitter.svelte +35 -0
- package/dist/geoms/GeomJitter.svelte.d.ts +13 -0
- package/dist/geoms/GeomLabel.svelte +12 -0
- package/dist/geoms/GeomLabel.svelte.d.ts +7 -0
- package/dist/geoms/GeomLine.svelte +12 -0
- package/dist/geoms/GeomLine.svelte.d.ts +7 -0
- package/dist/geoms/GeomLinerange.svelte +25 -0
- package/dist/geoms/GeomLinerange.svelte.d.ts +7 -0
- package/dist/geoms/GeomMap.svelte +21 -0
- package/dist/geoms/GeomMap.svelte.d.ts +7 -0
- package/dist/geoms/GeomPath.svelte +12 -0
- package/dist/geoms/GeomPath.svelte.d.ts +7 -0
- package/dist/geoms/GeomPoint.svelte +12 -0
- package/dist/geoms/GeomPoint.svelte.d.ts +7 -0
- package/dist/geoms/GeomPointrange.svelte +25 -0
- package/dist/geoms/GeomPointrange.svelte.d.ts +7 -0
- package/dist/geoms/GeomPolygon.svelte +25 -0
- package/dist/geoms/GeomPolygon.svelte.d.ts +7 -0
- package/dist/geoms/GeomQq.svelte +21 -0
- package/dist/geoms/GeomQq.svelte.d.ts +7 -0
- package/dist/geoms/GeomQqLine.svelte +25 -0
- package/dist/geoms/GeomQqLine.svelte.d.ts +7 -0
- package/dist/geoms/GeomQuantile.svelte +25 -0
- package/dist/geoms/GeomQuantile.svelte.d.ts +7 -0
- package/dist/geoms/GeomRaster.svelte +25 -0
- package/dist/geoms/GeomRaster.svelte.d.ts +7 -0
- package/dist/geoms/GeomRect.svelte +12 -0
- package/dist/geoms/GeomRect.svelte.d.ts +7 -0
- package/dist/geoms/GeomRibbon.svelte +16 -0
- package/dist/geoms/GeomRibbon.svelte.d.ts +7 -0
- package/dist/geoms/GeomRug.svelte +21 -0
- package/dist/geoms/GeomRug.svelte.d.ts +7 -0
- package/dist/geoms/GeomRule.svelte +12 -0
- package/dist/geoms/GeomRule.svelte.d.ts +7 -0
- package/dist/geoms/GeomSegment.svelte +16 -0
- package/dist/geoms/GeomSegment.svelte.d.ts +7 -0
- package/dist/geoms/GeomSf.svelte +21 -0
- package/dist/geoms/GeomSf.svelte.d.ts +7 -0
- package/dist/geoms/GeomSfLabel.svelte +25 -0
- package/dist/geoms/GeomSfLabel.svelte.d.ts +7 -0
- package/dist/geoms/GeomSfText.svelte +25 -0
- package/dist/geoms/GeomSfText.svelte.d.ts +7 -0
- package/dist/geoms/GeomSmooth.svelte +25 -0
- package/dist/geoms/GeomSmooth.svelte.d.ts +7 -0
- package/dist/geoms/GeomSpoke.svelte +21 -0
- package/dist/geoms/GeomSpoke.svelte.d.ts +7 -0
- package/dist/geoms/GeomStep.svelte +12 -0
- package/dist/geoms/GeomStep.svelte.d.ts +7 -0
- package/dist/geoms/GeomText.svelte +12 -0
- package/dist/geoms/GeomText.svelte.d.ts +7 -0
- package/dist/geoms/GeomTile.svelte +21 -0
- package/dist/geoms/GeomTile.svelte.d.ts +7 -0
- package/dist/geoms/GeomViolin.svelte +25 -0
- package/dist/geoms/GeomViolin.svelte.d.ts +7 -0
- package/dist/geoms/GeomVline.svelte +12 -0
- package/dist/geoms/GeomVline.svelte.d.ts +7 -0
- package/dist/geoms/factory.svelte.d.ts +41 -0
- package/dist/geoms/factory.svelte.js +60 -0
- package/dist/geoms/registry.svelte.d.ts +71 -0
- package/dist/geoms/registry.svelte.js +177 -0
- package/dist/guides/GuideAxis.svelte +20 -0
- package/dist/guides/GuideAxis.svelte.d.ts +14 -0
- package/dist/guides/GuideColorbar.svelte +22 -0
- package/dist/guides/GuideColorbar.svelte.d.ts +13 -0
- package/dist/guides/GuideColorsteps.svelte +22 -0
- package/dist/guides/GuideColorsteps.svelte.d.ts +13 -0
- package/dist/guides/GuideLegend.svelte +90 -0
- package/dist/guides/GuideLegend.svelte.d.ts +37 -0
- package/dist/guides/GuideNone.svelte +19 -0
- package/dist/guides/GuideNone.svelte.d.ts +7 -0
- package/dist/guides/Guides.svelte +14 -0
- package/dist/guides/Guides.svelte.d.ts +13 -0
- package/dist/guides/factory.svelte.d.ts +36 -0
- package/dist/guides/factory.svelte.js +15 -0
- package/dist/index.d.ts +418 -0
- package/dist/index.js +376 -0
- package/dist/inspection/Inspect.svelte +71 -0
- package/dist/inspection/Inspect.svelte.d.ts +36 -0
- package/dist/inspection/Tooltip.svelte +439 -0
- package/dist/inspection/Tooltip.svelte.d.ts +32 -0
- package/dist/inspection/apply.d.ts +120 -0
- package/dist/inspection/apply.js +99 -0
- package/dist/inspection/coordinator.d.ts +51 -0
- package/dist/inspection/coordinator.js +354 -0
- package/dist/inspection/display-members.d.ts +1 -0
- package/dist/inspection/display-members.js +2 -0
- package/dist/inspection/frame.d.ts +90 -0
- package/dist/inspection/frame.js +76 -0
- package/dist/inspection/group-total.d.ts +1 -0
- package/dist/inspection/group-total.js +2 -0
- package/dist/inspection/inspect-guide-axes.d.ts +10 -0
- package/dist/inspection/inspect-guide-axes.js +24 -0
- package/dist/inspection/inspection-reconcile.svelte.d.ts +37 -0
- package/dist/inspection/inspection-reconcile.svelte.js +33 -0
- package/dist/inspection/inspection-state.svelte.d.ts +86 -0
- package/dist/inspection/inspection-state.svelte.js +347 -0
- package/dist/inspection/inspection-traversal.svelte.d.ts +29 -0
- package/dist/inspection/inspection-traversal.svelte.js +52 -0
- package/dist/inspection/pointer-inspect.d.ts +74 -0
- package/dist/inspection/pointer-inspect.js +158 -0
- package/dist/inspection/resolver.d.ts +3 -0
- package/dist/inspection/resolver.js +4 -0
- package/dist/inspection/teardown.d.ts +199 -0
- package/dist/inspection/teardown.js +181 -0
- package/dist/inspection/tooltip-chrome.d.ts +19 -0
- package/dist/inspection/tooltip-chrome.js +17 -0
- package/dist/inspection/tooltip-motion.d.ts +25 -0
- package/dist/inspection/tooltip-motion.js +32 -0
- package/dist/inspection/tooltip-presence.svelte.d.ts +49 -0
- package/dist/inspection/tooltip-presence.svelte.js +110 -0
- package/dist/inspection/tooltip-total.d.ts +1 -0
- package/dist/inspection/tooltip-total.js +2 -0
- package/dist/interaction/capability-resolution.svelte.d.ts +42 -0
- package/dist/interaction/capability-resolution.svelte.js +40 -0
- package/dist/interaction/capability.d.ts +129 -0
- package/dist/interaction/capability.js +134 -0
- package/dist/interaction/controller.svelte.d.ts +4 -0
- package/dist/interaction/controller.svelte.js +43 -0
- package/dist/interaction/inspect-geom-advisories.d.ts +10 -0
- package/dist/interaction/inspect-geom-advisories.js +10 -0
- package/dist/interaction/interaction-context.svelte.d.ts +57 -0
- package/dist/interaction/interaction-context.svelte.js +4 -0
- package/dist/interaction/interaction-diagnostics.d.ts +11 -0
- package/dist/interaction/interaction-diagnostics.js +173 -0
- package/dist/interaction/interaction-states.svelte.d.ts +84 -0
- package/dist/interaction/interaction-states.svelte.js +55 -0
- package/dist/interaction/interaction.d.ts +304 -0
- package/dist/interaction/interaction.js +7 -0
- package/dist/interaction/normalize-interaction-config.d.ts +9 -0
- package/dist/interaction/normalize-interaction-config.js +112 -0
- package/dist/interaction/reducer.d.ts +97 -0
- package/dist/interaction/reducer.js +117 -0
- package/dist/interaction/resolve-inspect-capability.d.ts +40 -0
- package/dist/interaction/resolve-inspect-capability.js +50 -0
- package/dist/interaction/scoped-store.svelte.d.ts +73 -0
- package/dist/interaction/scoped-store.svelte.js +93 -0
- package/dist/interaction/target.d.ts +91 -0
- package/dist/interaction/target.js +68 -0
- package/dist/interaction/transition-owner.d.ts +19 -0
- package/dist/interaction/transition-owner.js +10 -0
- package/dist/interaction/wiring-advisories.d.ts +33 -0
- package/dist/interaction/wiring-advisories.js +46 -0
- package/dist/interval/BoundsEditor.svelte +332 -0
- package/dist/interval/BoundsEditor.svelte.d.ts +10 -0
- package/dist/interval/bounds-editor.d.ts +1 -0
- package/dist/interval/bounds-editor.js +2 -0
- package/dist/interval/consumption.d.ts +1 -0
- package/dist/interval/consumption.js +2 -0
- package/dist/interval/interval-bounds-state.svelte.d.ts +53 -0
- package/dist/interval/interval-bounds-state.svelte.js +117 -0
- package/dist/interval/interval-state-helpers.d.ts +10 -0
- package/dist/interval/interval-state-helpers.js +34 -0
- package/dist/interval/interval-state.svelte.d.ts +60 -0
- package/dist/interval/interval-state.svelte.js +360 -0
- package/dist/interval/interval.d.ts +1 -0
- package/dist/interval/interval.js +2 -0
- package/dist/interval/precise-bounds.d.ts +1 -0
- package/dist/interval/precise-bounds.js +2 -0
- package/dist/interval/query.d.ts +1 -0
- package/dist/interval/query.js +2 -0
- package/dist/labs/Labs.svelte +29 -0
- package/dist/labs/Labs.svelte.d.ts +16 -0
- package/dist/layers/fold.d.ts +2 -0
- package/dist/layers/fold.js +1 -0
- package/dist/layers/grammar-families.d.ts +2 -0
- package/dist/layers/grammar-families.js +1 -0
- package/dist/layers/plot-layer-contract.d.ts +1 -0
- package/dist/layers/plot-layer-contract.js +29 -0
- package/dist/layers/plot-layer.svelte.d.ts +42 -0
- package/dist/layers/plot-layer.svelte.js +34 -0
- package/dist/layers/types.d.ts +2 -0
- package/dist/layers/types.js +1 -0
- package/dist/legend/Legend.svelte +24 -0
- package/dist/legend/Legend.svelte.d.ts +5 -0
- package/dist/legend/LegendFilters.svelte +196 -0
- package/dist/legend/LegendFilters.svelte.d.ts +8 -0
- package/dist/legend/LegendTargets.svelte +393 -0
- package/dist/legend/LegendTargets.svelte.d.ts +31 -0
- package/dist/legend/entry-key-index.d.ts +1 -0
- package/dist/legend/entry-key-index.js +2 -0
- package/dist/legend/entry-key-index.svelte.d.ts +34 -0
- package/dist/legend/entry-key-index.svelte.js +35 -0
- package/dist/legend/filter-state.svelte.d.ts +66 -0
- package/dist/legend/filter-state.svelte.js +284 -0
- package/dist/legend/filter.d.ts +1 -0
- package/dist/legend/filter.js +2 -0
- package/dist/legend/focus-emphasis.d.ts +72 -0
- package/dist/legend/focus-emphasis.js +91 -0
- package/dist/legend/focus-plans.d.ts +89 -0
- package/dist/legend/focus-plans.js +72 -0
- package/dist/legend/focus-reconcile.svelte.d.ts +53 -0
- package/dist/legend/focus-reconcile.svelte.js +113 -0
- package/dist/legend/focus-state.svelte.d.ts +73 -0
- package/dist/legend/focus-state.svelte.js +338 -0
- package/dist/legend/focus.d.ts +1 -0
- package/dist/legend/focus.js +2 -0
- package/dist/legend/resolve-legend-capability.d.ts +52 -0
- package/dist/legend/resolve-legend-capability.js +68 -0
- package/dist/legend/resolve-legend-filter.d.ts +65 -0
- package/dist/legend/resolve-legend-filter.js +54 -0
- package/dist/legend/resolve-legend-focus.d.ts +58 -0
- package/dist/legend/resolve-legend-focus.js +36 -0
- package/dist/legend/surface.d.ts +190 -0
- package/dist/legend/surface.js +158 -0
- package/dist/plot-engine-deriveds.svelte.d.ts +75 -0
- package/dist/plot-engine-deriveds.svelte.js +166 -0
- package/dist/plot-engine.svelte.d.ts +116 -0
- package/dist/plot-engine.svelte.js +316 -0
- package/dist/plot-props.d.ts +144 -0
- package/dist/plot-props.js +81 -0
- package/dist/runtime/announcer.svelte.d.ts +17 -0
- package/dist/runtime/announcer.svelte.js +28 -0
- package/dist/runtime/paint.d.ts +38 -0
- package/dist/runtime/paint.js +45 -0
- package/dist/runtime/resolve-datum-key.d.ts +53 -0
- package/dist/runtime/resolve-datum-key.js +73 -0
- package/dist/runtime/runtime.svelte.d.ts +37 -0
- package/dist/runtime/runtime.svelte.js +233 -0
- package/dist/runtime/semantic-candidate-projection.svelte.d.ts +29 -0
- package/dist/runtime/semantic-candidate-projection.svelte.js +137 -0
- package/dist/runtime/semantic-data-identity.d.ts +64 -0
- package/dist/runtime/semantic-data-identity.js +153 -0
- package/dist/runtime/semantic-keys-projection.d.ts +22 -0
- package/dist/runtime/semantic-keys-projection.js +40 -0
- package/dist/runtime/semantic-keys-resolve.d.ts +69 -0
- package/dist/runtime/semantic-keys-resolve.js +122 -0
- package/dist/runtime/semantic-keys.svelte.d.ts +30 -0
- package/dist/runtime/semantic-keys.svelte.js +69 -0
- package/dist/runtime/semantic-source-identity.d.ts +9 -0
- package/dist/runtime/semantic-source-identity.js +16 -0
- package/dist/scale/Scale.svelte +26 -0
- package/dist/scale/Scale.svelte.d.ts +21 -0
- package/dist/scale/ScaleAlphaBinned.svelte +14 -0
- package/dist/scale/ScaleAlphaBinned.svelte.d.ts +4 -0
- package/dist/scale/ScaleAlphaContinuous.svelte +14 -0
- package/dist/scale/ScaleAlphaContinuous.svelte.d.ts +4 -0
- package/dist/scale/ScaleAlphaDate.svelte +15 -0
- package/dist/scale/ScaleAlphaDate.svelte.d.ts +5 -0
- package/dist/scale/ScaleAlphaDatetime.svelte +15 -0
- package/dist/scale/ScaleAlphaDatetime.svelte.d.ts +5 -0
- package/dist/scale/ScaleAlphaDiscrete.svelte +14 -0
- package/dist/scale/ScaleAlphaDiscrete.svelte.d.ts +4 -0
- package/dist/scale/ScaleAlphaIdentity.svelte +14 -0
- package/dist/scale/ScaleAlphaIdentity.svelte.d.ts +4 -0
- package/dist/scale/ScaleAlphaManual.svelte +14 -0
- package/dist/scale/ScaleAlphaManual.svelte.d.ts +4 -0
- package/dist/scale/ScaleColorBinned.svelte +14 -0
- package/dist/scale/ScaleColorBinned.svelte.d.ts +3 -0
- package/dist/scale/ScaleColorBrewer.svelte +14 -0
- package/dist/scale/ScaleColorBrewer.svelte.d.ts +4 -0
- package/dist/scale/ScaleColorContinuous.svelte +14 -0
- package/dist/scale/ScaleColorContinuous.svelte.d.ts +4 -0
- package/dist/scale/ScaleColorDate.svelte +15 -0
- package/dist/scale/ScaleColorDate.svelte.d.ts +5 -0
- package/dist/scale/ScaleColorDatetime.svelte +15 -0
- package/dist/scale/ScaleColorDatetime.svelte.d.ts +5 -0
- package/dist/scale/ScaleColorDiscrete.svelte +14 -0
- package/dist/scale/ScaleColorDiscrete.svelte.d.ts +4 -0
- package/dist/scale/ScaleColorDistiller.svelte +14 -0
- package/dist/scale/ScaleColorDistiller.svelte.d.ts +4 -0
- package/dist/scale/ScaleColorFermenter.svelte +14 -0
- package/dist/scale/ScaleColorFermenter.svelte.d.ts +4 -0
- package/dist/scale/ScaleColorGradient.svelte +11 -0
- package/dist/scale/ScaleColorGradient.svelte.d.ts +4 -0
- package/dist/scale/ScaleColorGradient2.svelte +14 -0
- package/dist/scale/ScaleColorGradient2.svelte.d.ts +4 -0
- package/dist/scale/ScaleColorGradientn.svelte +14 -0
- package/dist/scale/ScaleColorGradientn.svelte.d.ts +4 -0
- package/dist/scale/ScaleColorGrey.svelte +11 -0
- package/dist/scale/ScaleColorGrey.svelte.d.ts +4 -0
- package/dist/scale/ScaleColorHue.svelte +11 -0
- package/dist/scale/ScaleColorHue.svelte.d.ts +4 -0
- package/dist/scale/ScaleColorIdentity.svelte +14 -0
- package/dist/scale/ScaleColorIdentity.svelte.d.ts +4 -0
- package/dist/scale/ScaleColorLog10.svelte +14 -0
- package/dist/scale/ScaleColorLog10.svelte.d.ts +4 -0
- package/dist/scale/ScaleColorManual.svelte +14 -0
- package/dist/scale/ScaleColorManual.svelte.d.ts +4 -0
- package/dist/scale/ScaleColorOrdinal.svelte +14 -0
- package/dist/scale/ScaleColorOrdinal.svelte.d.ts +3 -0
- package/dist/scale/ScaleColorSqrt.svelte +14 -0
- package/dist/scale/ScaleColorSqrt.svelte.d.ts +4 -0
- package/dist/scale/ScaleColorSteps.svelte +11 -0
- package/dist/scale/ScaleColorSteps.svelte.d.ts +4 -0
- package/dist/scale/ScaleColorSteps2.svelte +11 -0
- package/dist/scale/ScaleColorSteps2.svelte.d.ts +4 -0
- package/dist/scale/ScaleColorStepsn.svelte +11 -0
- package/dist/scale/ScaleColorStepsn.svelte.d.ts +4 -0
- package/dist/scale/ScaleColorViridisB.svelte +11 -0
- package/dist/scale/ScaleColorViridisB.svelte.d.ts +4 -0
- package/dist/scale/ScaleColorViridisC.svelte +11 -0
- package/dist/scale/ScaleColorViridisC.svelte.d.ts +4 -0
- package/dist/scale/ScaleColorViridisD.svelte +11 -0
- package/dist/scale/ScaleColorViridisD.svelte.d.ts +4 -0
- package/dist/scale/ScaleFillBinned.svelte +11 -0
- package/dist/scale/ScaleFillBinned.svelte.d.ts +3 -0
- package/dist/scale/ScaleFillBrewer.svelte +11 -0
- package/dist/scale/ScaleFillBrewer.svelte.d.ts +4 -0
- package/dist/scale/ScaleFillContinuous.svelte +14 -0
- package/dist/scale/ScaleFillContinuous.svelte.d.ts +4 -0
- package/dist/scale/ScaleFillDate.svelte +12 -0
- package/dist/scale/ScaleFillDate.svelte.d.ts +5 -0
- package/dist/scale/ScaleFillDatetime.svelte +15 -0
- package/dist/scale/ScaleFillDatetime.svelte.d.ts +5 -0
- package/dist/scale/ScaleFillDiscrete.svelte +14 -0
- package/dist/scale/ScaleFillDiscrete.svelte.d.ts +4 -0
- package/dist/scale/ScaleFillDistiller.svelte +14 -0
- package/dist/scale/ScaleFillDistiller.svelte.d.ts +4 -0
- package/dist/scale/ScaleFillFermenter.svelte +14 -0
- package/dist/scale/ScaleFillFermenter.svelte.d.ts +4 -0
- package/dist/scale/ScaleFillGradient.svelte +11 -0
- package/dist/scale/ScaleFillGradient.svelte.d.ts +4 -0
- package/dist/scale/ScaleFillGradient2.svelte +14 -0
- package/dist/scale/ScaleFillGradient2.svelte.d.ts +4 -0
- package/dist/scale/ScaleFillGradientn.svelte +14 -0
- package/dist/scale/ScaleFillGradientn.svelte.d.ts +4 -0
- package/dist/scale/ScaleFillGrey.svelte +11 -0
- package/dist/scale/ScaleFillGrey.svelte.d.ts +4 -0
- package/dist/scale/ScaleFillHue.svelte +11 -0
- package/dist/scale/ScaleFillHue.svelte.d.ts +4 -0
- package/dist/scale/ScaleFillIdentity.svelte +14 -0
- package/dist/scale/ScaleFillIdentity.svelte.d.ts +4 -0
- package/dist/scale/ScaleFillLog10.svelte +14 -0
- package/dist/scale/ScaleFillLog10.svelte.d.ts +4 -0
- package/dist/scale/ScaleFillManual.svelte +11 -0
- package/dist/scale/ScaleFillManual.svelte.d.ts +4 -0
- package/dist/scale/ScaleFillOrdinal.svelte +14 -0
- package/dist/scale/ScaleFillOrdinal.svelte.d.ts +3 -0
- package/dist/scale/ScaleFillSqrt.svelte +14 -0
- package/dist/scale/ScaleFillSqrt.svelte.d.ts +4 -0
- package/dist/scale/ScaleFillSteps.svelte +11 -0
- package/dist/scale/ScaleFillSteps.svelte.d.ts +4 -0
- package/dist/scale/ScaleFillSteps2.svelte +11 -0
- package/dist/scale/ScaleFillSteps2.svelte.d.ts +4 -0
- package/dist/scale/ScaleFillStepsn.svelte +11 -0
- package/dist/scale/ScaleFillStepsn.svelte.d.ts +4 -0
- package/dist/scale/ScaleFillViridisB.svelte +11 -0
- package/dist/scale/ScaleFillViridisB.svelte.d.ts +4 -0
- package/dist/scale/ScaleFillViridisC.svelte +11 -0
- package/dist/scale/ScaleFillViridisC.svelte.d.ts +4 -0
- package/dist/scale/ScaleFillViridisD.svelte +11 -0
- package/dist/scale/ScaleFillViridisD.svelte.d.ts +4 -0
- package/dist/scale/ScaleLinetypeBinned.svelte +15 -0
- package/dist/scale/ScaleLinetypeBinned.svelte.d.ts +4 -0
- package/dist/scale/ScaleLinetypeDiscrete.svelte +15 -0
- package/dist/scale/ScaleLinetypeDiscrete.svelte.d.ts +4 -0
- package/dist/scale/ScaleLinetypeIdentity.svelte +15 -0
- package/dist/scale/ScaleLinetypeIdentity.svelte.d.ts +4 -0
- package/dist/scale/ScaleLinetypeManual.svelte +15 -0
- package/dist/scale/ScaleLinetypeManual.svelte.d.ts +4 -0
- package/dist/scale/ScaleLinewidthBinned.svelte +14 -0
- package/dist/scale/ScaleLinewidthBinned.svelte.d.ts +4 -0
- package/dist/scale/ScaleLinewidthContinuous.svelte +14 -0
- package/dist/scale/ScaleLinewidthContinuous.svelte.d.ts +4 -0
- package/dist/scale/ScaleLinewidthDate.svelte +15 -0
- package/dist/scale/ScaleLinewidthDate.svelte.d.ts +5 -0
- package/dist/scale/ScaleLinewidthDatetime.svelte +15 -0
- package/dist/scale/ScaleLinewidthDatetime.svelte.d.ts +5 -0
- package/dist/scale/ScaleLinewidthDiscrete.svelte +14 -0
- package/dist/scale/ScaleLinewidthDiscrete.svelte.d.ts +4 -0
- package/dist/scale/ScaleLinewidthIdentity.svelte +14 -0
- package/dist/scale/ScaleLinewidthIdentity.svelte.d.ts +4 -0
- package/dist/scale/ScaleLinewidthManual.svelte +14 -0
- package/dist/scale/ScaleLinewidthManual.svelte.d.ts +4 -0
- package/dist/scale/ScaleRadius.svelte +11 -0
- package/dist/scale/ScaleRadius.svelte.d.ts +4 -0
- package/dist/scale/ScaleShapeBinned.svelte +15 -0
- package/dist/scale/ScaleShapeBinned.svelte.d.ts +4 -0
- package/dist/scale/ScaleShapeDiscrete.svelte +15 -0
- package/dist/scale/ScaleShapeDiscrete.svelte.d.ts +4 -0
- package/dist/scale/ScaleShapeIdentity.svelte +15 -0
- package/dist/scale/ScaleShapeIdentity.svelte.d.ts +4 -0
- package/dist/scale/ScaleShapeManual.svelte +15 -0
- package/dist/scale/ScaleShapeManual.svelte.d.ts +4 -0
- package/dist/scale/ScaleSizeArea.svelte +11 -0
- package/dist/scale/ScaleSizeArea.svelte.d.ts +4 -0
- package/dist/scale/ScaleSizeBinned.svelte +14 -0
- package/dist/scale/ScaleSizeBinned.svelte.d.ts +4 -0
- package/dist/scale/ScaleSizeBinnedArea.svelte +14 -0
- package/dist/scale/ScaleSizeBinnedArea.svelte.d.ts +4 -0
- package/dist/scale/ScaleSizeContinuous.svelte +14 -0
- package/dist/scale/ScaleSizeContinuous.svelte.d.ts +4 -0
- package/dist/scale/ScaleSizeDate.svelte +15 -0
- package/dist/scale/ScaleSizeDate.svelte.d.ts +5 -0
- package/dist/scale/ScaleSizeDatetime.svelte +15 -0
- package/dist/scale/ScaleSizeDatetime.svelte.d.ts +5 -0
- package/dist/scale/ScaleSizeDiscrete.svelte +14 -0
- package/dist/scale/ScaleSizeDiscrete.svelte.d.ts +4 -0
- package/dist/scale/ScaleSizeIdentity.svelte +14 -0
- package/dist/scale/ScaleSizeIdentity.svelte.d.ts +4 -0
- package/dist/scale/ScaleSizeManual.svelte +14 -0
- package/dist/scale/ScaleSizeManual.svelte.d.ts +4 -0
- package/dist/scale/ScaleXBinned.svelte +14 -0
- package/dist/scale/ScaleXBinned.svelte.d.ts +4 -0
- package/dist/scale/ScaleXContinuous.svelte +14 -0
- package/dist/scale/ScaleXContinuous.svelte.d.ts +4 -0
- package/dist/scale/ScaleXDate.svelte +12 -0
- package/dist/scale/ScaleXDate.svelte.d.ts +5 -0
- package/dist/scale/ScaleXDatetime.svelte +12 -0
- package/dist/scale/ScaleXDatetime.svelte.d.ts +5 -0
- package/dist/scale/ScaleXDiscrete.svelte +14 -0
- package/dist/scale/ScaleXDiscrete.svelte.d.ts +4 -0
- package/dist/scale/ScaleXLog10.svelte +14 -0
- package/dist/scale/ScaleXLog10.svelte.d.ts +4 -0
- package/dist/scale/ScaleXMonthDay.svelte +12 -0
- package/dist/scale/ScaleXMonthDay.svelte.d.ts +5 -0
- package/dist/scale/ScaleXReverse.svelte +15 -0
- package/dist/scale/ScaleXReverse.svelte.d.ts +4 -0
- package/dist/scale/ScaleXSqrt.svelte +14 -0
- package/dist/scale/ScaleXSqrt.svelte.d.ts +4 -0
- package/dist/scale/ScaleXTime.svelte +12 -0
- package/dist/scale/ScaleXTime.svelte.d.ts +5 -0
- package/dist/scale/ScaleYBinned.svelte +14 -0
- package/dist/scale/ScaleYBinned.svelte.d.ts +4 -0
- package/dist/scale/ScaleYContinuous.svelte +14 -0
- package/dist/scale/ScaleYContinuous.svelte.d.ts +4 -0
- package/dist/scale/ScaleYDate.svelte +12 -0
- package/dist/scale/ScaleYDate.svelte.d.ts +5 -0
- package/dist/scale/ScaleYDatetime.svelte +12 -0
- package/dist/scale/ScaleYDatetime.svelte.d.ts +5 -0
- package/dist/scale/ScaleYDiscrete.svelte +14 -0
- package/dist/scale/ScaleYDiscrete.svelte.d.ts +4 -0
- package/dist/scale/ScaleYLog10.svelte +14 -0
- package/dist/scale/ScaleYLog10.svelte.d.ts +4 -0
- package/dist/scale/ScaleYMonthDay.svelte +12 -0
- package/dist/scale/ScaleYMonthDay.svelte.d.ts +5 -0
- package/dist/scale/ScaleYReverse.svelte +15 -0
- package/dist/scale/ScaleYReverse.svelte.d.ts +4 -0
- package/dist/scale/ScaleYSqrt.svelte +14 -0
- package/dist/scale/ScaleYSqrt.svelte.d.ts +4 -0
- package/dist/scale/ScaleYTime.svelte +12 -0
- package/dist/scale/ScaleYTime.svelte.d.ts +5 -0
- package/dist/scene/Axis.svelte +159 -0
- package/dist/scene/Axis.svelte.d.ts +12 -0
- package/dist/scene/Batch.svelte +252 -0
- package/dist/scene/Batch.svelte.d.ts +23 -0
- package/dist/scene/InteractionOverlay.svelte +402 -0
- package/dist/scene/InteractionOverlay.svelte.d.ts +44 -0
- package/dist/scene/Legend.svelte +278 -0
- package/dist/scene/Legend.svelte.d.ts +8 -0
- package/dist/scene/MarkStrata.svelte +129 -0
- package/dist/scene/MarkStrata.svelte.d.ts +15 -0
- package/dist/scene/SceneOverlays.svelte +118 -0
- package/dist/scene/SceneOverlays.svelte.d.ts +49 -0
- package/dist/scene/SceneView.svelte +478 -0
- package/dist/scene/SceneView.svelte.d.ts +32 -0
- package/dist/scene/batch-presentation.svelte.d.ts +111 -0
- package/dist/scene/batch-presentation.svelte.js +207 -0
- package/dist/scene/geometry.d.ts +2 -0
- package/dist/scene/geometry.js +3 -0
- package/dist/scene/stratum-paint.d.ts +25 -0
- package/dist/scene/stratum-paint.js +40 -0
- package/dist/selection/selection-state.svelte.d.ts +23 -0
- package/dist/selection/selection-state.svelte.js +73 -0
- package/dist/selection/selection.d.ts +1 -0
- package/dist/selection/selection.js +2 -0
- package/dist/surface/CaptureSurface.svelte +109 -0
- package/dist/surface/CaptureSurface.svelte.d.ts +27 -0
- package/dist/surface/area-brush.d.ts +48 -0
- package/dist/surface/area-brush.js +44 -0
- package/dist/surface/brush-finish.d.ts +49 -0
- package/dist/surface/brush-finish.js +44 -0
- package/dist/surface/keyboard.d.ts +97 -0
- package/dist/surface/keyboard.js +105 -0
- package/dist/surface/pointer.d.ts +241 -0
- package/dist/surface/pointer.js +179 -0
- package/dist/surface/surface-description.d.ts +10 -0
- package/dist/surface/surface-description.js +11 -0
- package/dist/surface/surface-handlers.svelte.d.ts +53 -0
- package/dist/surface/surface-handlers.svelte.js +418 -0
- package/dist/surface/surface-state.svelte.d.ts +90 -0
- package/dist/surface/surface-state.svelte.js +161 -0
- package/dist/theme/Theme.svelte +27 -0
- package/dist/theme/Theme.svelte.d.ts +23 -0
- package/dist/theme/ThemeBase.svelte +13 -0
- package/dist/theme/ThemeBase.svelte.d.ts +8 -0
- package/dist/theme/ThemeBw.svelte +13 -0
- package/dist/theme/ThemeBw.svelte.d.ts +8 -0
- package/dist/theme/ThemeClassic.svelte +13 -0
- package/dist/theme/ThemeClassic.svelte.d.ts +8 -0
- package/dist/theme/ThemeClean.svelte +13 -0
- package/dist/theme/ThemeClean.svelte.d.ts +8 -0
- package/dist/theme/ThemeDark.svelte +13 -0
- package/dist/theme/ThemeDark.svelte.d.ts +8 -0
- package/dist/theme/ThemeDefault.svelte +13 -0
- package/dist/theme/ThemeDefault.svelte.d.ts +8 -0
- package/dist/theme/ThemeEconomist.svelte +13 -0
- package/dist/theme/ThemeEconomist.svelte.d.ts +8 -0
- package/dist/theme/ThemeEconomistwhite.svelte +13 -0
- package/dist/theme/ThemeEconomistwhite.svelte.d.ts +8 -0
- package/dist/theme/ThemeFew.svelte +13 -0
- package/dist/theme/ThemeFew.svelte.d.ts +8 -0
- package/dist/theme/ThemeFivethirtyeight.svelte +14 -0
- package/dist/theme/ThemeFivethirtyeight.svelte.d.ts +9 -0
- package/dist/theme/ThemeGgplot2.svelte +13 -0
- package/dist/theme/ThemeGgplot2.svelte.d.ts +8 -0
- package/dist/theme/ThemeGray.svelte +13 -0
- package/dist/theme/ThemeGray.svelte.d.ts +8 -0
- package/dist/theme/ThemeGrey.svelte +13 -0
- package/dist/theme/ThemeGrey.svelte.d.ts +8 -0
- package/dist/theme/ThemeHc.svelte +13 -0
- package/dist/theme/ThemeHc.svelte.d.ts +8 -0
- package/dist/theme/ThemeHcdark.svelte +13 -0
- package/dist/theme/ThemeHcdark.svelte.d.ts +8 -0
- package/dist/theme/ThemeHrbr.svelte +13 -0
- package/dist/theme/ThemeHrbr.svelte.d.ts +8 -0
- package/dist/theme/ThemeIgray.svelte +13 -0
- package/dist/theme/ThemeIgray.svelte.d.ts +8 -0
- package/dist/theme/ThemeLight.svelte +13 -0
- package/dist/theme/ThemeLight.svelte.d.ts +8 -0
- package/dist/theme/ThemeLinedraw.svelte +13 -0
- package/dist/theme/ThemeLinedraw.svelte.d.ts +8 -0
- package/dist/theme/ThemeMap.svelte +13 -0
- package/dist/theme/ThemeMap.svelte.d.ts +8 -0
- package/dist/theme/ThemeMinimal.svelte +13 -0
- package/dist/theme/ThemeMinimal.svelte.d.ts +8 -0
- package/dist/theme/ThemePander.svelte +13 -0
- package/dist/theme/ThemePander.svelte.d.ts +8 -0
- package/dist/theme/ThemeSolarized.svelte +13 -0
- package/dist/theme/ThemeSolarized.svelte.d.ts +8 -0
- package/dist/theme/ThemeSolarized2.svelte +13 -0
- package/dist/theme/ThemeSolarized2.svelte.d.ts +8 -0
- package/dist/theme/ThemeSolarized2dark.svelte +13 -0
- package/dist/theme/ThemeSolarized2dark.svelte.d.ts +8 -0
- package/dist/theme/ThemeSolarizeddark.svelte +14 -0
- package/dist/theme/ThemeSolarizeddark.svelte.d.ts +9 -0
- package/dist/theme/ThemeSolid.svelte +13 -0
- package/dist/theme/ThemeSolid.svelte.d.ts +8 -0
- package/dist/theme/ThemeStata.svelte +13 -0
- package/dist/theme/ThemeStata.svelte.d.ts +8 -0
- package/dist/theme/ThemeStatas1color.svelte +13 -0
- package/dist/theme/ThemeStatas1color.svelte.d.ts +8 -0
- package/dist/theme/ThemeTest.svelte +14 -0
- package/dist/theme/ThemeTest.svelte.d.ts +9 -0
- package/dist/theme/ThemeTufte.svelte +13 -0
- package/dist/theme/ThemeTufte.svelte.d.ts +8 -0
- package/dist/theme/ThemeVoid.svelte +14 -0
- package/dist/theme/ThemeVoid.svelte.d.ts +9 -0
- package/dist/theme/ThemeWsj.svelte +13 -0
- package/dist/theme/ThemeWsj.svelte.d.ts +8 -0
- package/dist/theme/factory.svelte.d.ts +36 -0
- package/dist/theme/factory.svelte.js +100 -0
- package/dist/zoom/zoom-state.svelte.d.ts +44 -0
- package/dist/zoom/zoom-state.svelte.js +121 -0
- package/dist/zoom/zoom.d.ts +1 -0
- package/dist/zoom/zoom.js +2 -0
- package/package.json +83 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure plot-root layout chrome: inline size/theme style, responsive
|
|
3
|
+
* breakpoint helpers, tooltip viewport clamp, and legend clear-control
|
|
4
|
+
* anchor lookup. Hosts own class bindings and tool-rail visibility.
|
|
5
|
+
*/
|
|
6
|
+
const NARROW_TOOLS_MAX_WIDTH_PX = 560;
|
|
7
|
+
const DOCKED_TOOLTIP_MAX_WIDTH_PX = 480;
|
|
8
|
+
/**
|
|
9
|
+
* Pre-measure fallback for container-width plots (SSR and collapsed hosts).
|
|
10
|
+
* 52rem at the common 16px root — matches docs `.plot-panel` max width so a
|
|
11
|
+
* typical laptop does not paint a skinny chart and then jump wider after
|
|
12
|
+
* ResizeObserver. Not a phone-first size; phones are not the design target.
|
|
13
|
+
*/
|
|
14
|
+
const DEFAULT_PLOT_WIDTH_PX = 832;
|
|
15
|
+
const DEFAULT_PLOT_HEIGHT_PX = 400;
|
|
16
|
+
/**
|
|
17
|
+
* True when the width prop is omitted or `"container"` (responsive layout).
|
|
18
|
+
* Shared by resolvePlotSize, paint readiness widthMode, root class, ResizeObserver
|
|
19
|
+
* install, and plotRootInlineStyle containerWidth flag.
|
|
20
|
+
* Type predicate so fixed-mode branches narrow to `number`.
|
|
21
|
+
*/
|
|
22
|
+
export function isContainerWidthProp(width) {
|
|
23
|
+
return width === undefined || width === "container";
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Resolved plot pixel size for the pipeline and root style.
|
|
27
|
+
* Container mode: measured container width, then assembled, then
|
|
28
|
+
* DEFAULT_PLOT_WIDTH_PX (832). Fixed mode: the numeric width prop (assembled
|
|
29
|
+
* fallback is unused once fixed). Height: height prop, then assembled, then 400.
|
|
30
|
+
*/
|
|
31
|
+
export function resolvePlotSize(input) {
|
|
32
|
+
const width = isContainerWidthProp(input.width)
|
|
33
|
+
? (input.containerWidth ?? input.assembledWidth ?? DEFAULT_PLOT_WIDTH_PX)
|
|
34
|
+
: input.width;
|
|
35
|
+
const height = input.height ?? input.assembledHeight ?? DEFAULT_PLOT_HEIGHT_PX;
|
|
36
|
+
return { width, height };
|
|
37
|
+
}
|
|
38
|
+
/** True when the tool rail should use the narrow layout (width < 560). */
|
|
39
|
+
export function isNarrowToolsWidth(widthPx) {
|
|
40
|
+
return widthPx < NARROW_TOOLS_MAX_WIDTH_PX;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* True when a pinned tooltip should dock (width < 480).
|
|
44
|
+
* Prefer `isTooltipDocked` at call sites that also gate on pin state.
|
|
45
|
+
*/
|
|
46
|
+
export function isDockedTooltipWidth(widthPx) {
|
|
47
|
+
return widthPx < DOCKED_TOOLTIP_MAX_WIDTH_PX;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Whether the inspection tooltip (and root docked chrome class) should dock.
|
|
51
|
+
* Unifies root class and Tooltip `docked` prop (both used pinned + width).
|
|
52
|
+
*/
|
|
53
|
+
export function isTooltipDocked(input) {
|
|
54
|
+
return input.inspectionState === "pinned" && isDockedTooltipWidth(input.widthPx);
|
|
55
|
+
}
|
|
56
|
+
/** Stable DOM id for the plot's inspection tooltip element. */
|
|
57
|
+
export function plotTooltipDomId(plotId) {
|
|
58
|
+
return `${plotId}-tooltip`;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Capture-surface `aria-controls` when a pinned interactive tooltip is up.
|
|
62
|
+
* Undefined otherwise (attribute omitted).
|
|
63
|
+
*
|
|
64
|
+
* Takes domain state (not pre-derived booleans) so hosts pass `inspection?.state`
|
|
65
|
+
* and inspect `contentMode` directly — same shape as `isTooltipDocked`.
|
|
66
|
+
*/
|
|
67
|
+
export function resolveCaptureAriaControls(input) {
|
|
68
|
+
if (input.inspectionState !== "pinned" || input.contentMode !== "interactive")
|
|
69
|
+
return undefined;
|
|
70
|
+
return plotTooltipDomId(input.plotId);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Tooltip layout box: min(scene, client) per axis.
|
|
74
|
+
* Uses nullish coalesce so a laid-out zero client size does not fall back
|
|
75
|
+
* to the scene (matches historical `root?.clientWidth ?? sceneWidth`).
|
|
76
|
+
*/
|
|
77
|
+
export function tooltipViewportSize(input) {
|
|
78
|
+
return {
|
|
79
|
+
width: Math.min(input.sceneWidth, input.clientWidth ?? input.sceneWidth),
|
|
80
|
+
height: Math.min(input.sceneHeight, input.clientHeight ?? input.sceneHeight),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Root `style` attribute value.
|
|
85
|
+
* Sized box: `width:…;height:…;` then raw `themeStyle` (no extra separator).
|
|
86
|
+
* Empty concatenation → `undefined` (matches host `… || undefined`).
|
|
87
|
+
*/
|
|
88
|
+
export function plotRootInlineStyle(input) {
|
|
89
|
+
const sizeCss = input.needsSizedBox
|
|
90
|
+
? `width:${input.containerWidth ? "100%" : `${input.sceneWidth}px`};height:${input.sceneHeight}px;`
|
|
91
|
+
: "";
|
|
92
|
+
return `${sizeCss}${input.themeStyle}` || undefined;
|
|
93
|
+
}
|
|
94
|
+
/** Edge/gap pad between a pressed legend box and the Clear recovery control. */
|
|
95
|
+
export const CLEAR_CONTROL_GAP_PX = 4;
|
|
96
|
+
/**
|
|
97
|
+
* Compact control height — matches discrete legend row targets (min 24px AA
|
|
98
|
+
* target size) rather than the old 44×44 AAA square that dwarfed swatches.
|
|
99
|
+
*/
|
|
100
|
+
export const CLEAR_CONTROL_HEIGHT_PX = 24;
|
|
101
|
+
/** Approximate painted width of the "Clear" label + horizontal padding (layout clamp only). */
|
|
102
|
+
const CLEAR_CONTROL_WIDTH_PX = 44;
|
|
103
|
+
/** Grace period after pointer leaves legend chrome before Clear fades for screenshots. */
|
|
104
|
+
export const CLEAR_HIDE_DELAY_MS = 2500;
|
|
105
|
+
/**
|
|
106
|
+
* Scene-local position for the legend Clear recovery control, or null to hide.
|
|
107
|
+
*
|
|
108
|
+
* Placement (collision-safe relative to the pressed legend):
|
|
109
|
+
* - **right / vertical** — prefer **below** the stack; if that would clamp into
|
|
110
|
+
* the legend box (tall low guide), try **above**, then **left** of the box
|
|
111
|
+
* - **bottom / horizontal** — prefer **right** of the strip; else under, then above
|
|
112
|
+
*
|
|
113
|
+
* Candidates are clamped into the scene, then the first that does not intersect
|
|
114
|
+
* the pressed legend box wins. null when focus is off / nothing pressed / no match.
|
|
115
|
+
*/
|
|
116
|
+
export function resolveClearControlLayout(input) {
|
|
117
|
+
if (!input.legendFocusEnabled || input.pressedScale === null)
|
|
118
|
+
return null;
|
|
119
|
+
const legend = input.legends.find((entry) => entry.scale === input.pressedScale);
|
|
120
|
+
if (legend === undefined)
|
|
121
|
+
return null;
|
|
122
|
+
const position = legend.position ?? "right";
|
|
123
|
+
const direction = legend.direction ?? (position === "bottom" ? "horizontal" : "vertical");
|
|
124
|
+
const gap = CLEAR_CONTROL_GAP_PX;
|
|
125
|
+
const btnW = CLEAR_CONTROL_WIDTH_PX;
|
|
126
|
+
const btnH = CLEAR_CONTROL_HEIGHT_PX;
|
|
127
|
+
const maxLeft = Math.max(gap, input.sceneWidth - btnW - gap);
|
|
128
|
+
const maxTop = Math.max(gap, input.sceneHeight - btnH - gap);
|
|
129
|
+
const clamp = (left, top) => ({
|
|
130
|
+
left: Math.min(Math.max(gap, left), maxLeft),
|
|
131
|
+
top: Math.min(Math.max(gap, top), maxTop),
|
|
132
|
+
});
|
|
133
|
+
const overlapsLegend = (layout) => {
|
|
134
|
+
const right = layout.left + btnW;
|
|
135
|
+
const bottom = layout.top + btnH;
|
|
136
|
+
const legRight = legend.x + legend.width;
|
|
137
|
+
const legBottom = legend.y + legend.height;
|
|
138
|
+
return !(right <= legend.x ||
|
|
139
|
+
layout.left >= legRight ||
|
|
140
|
+
bottom <= legend.y ||
|
|
141
|
+
layout.top >= legBottom);
|
|
142
|
+
};
|
|
143
|
+
const candidates = position === "bottom" || direction === "horizontal"
|
|
144
|
+
? [
|
|
145
|
+
// beside, then under, then above the horizontal strip
|
|
146
|
+
clamp(legend.x + legend.width + gap, legend.y + Math.max(0, (legend.height - btnH) / 2)),
|
|
147
|
+
clamp(legend.x, legend.y + legend.height + gap),
|
|
148
|
+
clamp(legend.x, legend.y - gap - btnH),
|
|
149
|
+
]
|
|
150
|
+
: [
|
|
151
|
+
// under, then above, then left of the vertical stack
|
|
152
|
+
clamp(legend.x, legend.y + legend.height + gap),
|
|
153
|
+
clamp(legend.x, legend.y - gap - btnH),
|
|
154
|
+
clamp(legend.x - gap - btnW, legend.y),
|
|
155
|
+
];
|
|
156
|
+
for (const candidate of candidates) {
|
|
157
|
+
if (!overlapsLegend(candidate))
|
|
158
|
+
return candidate;
|
|
159
|
+
}
|
|
160
|
+
// Last resort: first candidate (still scene-clamped) when every park collides
|
|
161
|
+
// (degenerate: legend fills the scene). Prefer under/beside intent over hide.
|
|
162
|
+
return candidates[0] ?? null;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Whether the Clear control should paint (opacity / pointer-events) while a
|
|
166
|
+
* series remains pressed. Host owns the hide timer; this pure gate only
|
|
167
|
+
* combines pressed + chrome hover/focus + elapsed hide.
|
|
168
|
+
*/
|
|
169
|
+
export function shouldRevealClearControl(input) {
|
|
170
|
+
if (!input.pressed)
|
|
171
|
+
return false;
|
|
172
|
+
if (input.chromeActive)
|
|
173
|
+
return true;
|
|
174
|
+
return !input.hideElapsed;
|
|
175
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* Status / a11y chrome for GGPlot (sr-only instructions, live region,
|
|
4
|
+
* empty state, capability status). Host owns interaction state and text.
|
|
5
|
+
*
|
|
6
|
+
* Element ids stay plot-scoped so capture `aria-describedby` and live
|
|
7
|
+
* region wiring remain stable across extraction.
|
|
8
|
+
*/
|
|
9
|
+
const {
|
|
10
|
+
plotId,
|
|
11
|
+
showInstructions = false,
|
|
12
|
+
description = "Use arrow keys to inspect data. Press Enter to pin. Press Escape to dismiss.",
|
|
13
|
+
activeDatumLabel = "No active datum",
|
|
14
|
+
showAreaInstruction = false,
|
|
15
|
+
showLiveRegion = false,
|
|
16
|
+
liveText = "",
|
|
17
|
+
emptyPlot = false,
|
|
18
|
+
capabilityStatus = null,
|
|
19
|
+
}: {
|
|
20
|
+
plotId: string;
|
|
21
|
+
/** When true, render description + active datum sr-only pair. */
|
|
22
|
+
showInstructions?: boolean;
|
|
23
|
+
/** Keyboard-usage description for the capture surface (tool-specific). */
|
|
24
|
+
description?: string;
|
|
25
|
+
activeDatumLabel?: string;
|
|
26
|
+
showAreaInstruction?: boolean;
|
|
27
|
+
showLiveRegion?: boolean;
|
|
28
|
+
liveText?: string;
|
|
29
|
+
emptyPlot?: boolean;
|
|
30
|
+
capabilityStatus?: string | null;
|
|
31
|
+
} = $props();
|
|
32
|
+
</script>
|
|
33
|
+
|
|
34
|
+
{#if showInstructions}
|
|
35
|
+
<p id={`${plotId}-description`} class="gg-sr-only">
|
|
36
|
+
{description}
|
|
37
|
+
</p>
|
|
38
|
+
<p id={`${plotId}-active`} class="gg-sr-only">
|
|
39
|
+
{activeDatumLabel}
|
|
40
|
+
</p>
|
|
41
|
+
{/if}
|
|
42
|
+
{#if showAreaInstruction}
|
|
43
|
+
<p class="gg-area-instruction">Choose opposite corner</p>
|
|
44
|
+
{/if}
|
|
45
|
+
{#if showLiveRegion}
|
|
46
|
+
<div
|
|
47
|
+
id={`${plotId}-live`}
|
|
48
|
+
class="gg-sr-only"
|
|
49
|
+
aria-live="polite"
|
|
50
|
+
aria-atomic="true"
|
|
51
|
+
>
|
|
52
|
+
{liveText}
|
|
53
|
+
</div>
|
|
54
|
+
{/if}
|
|
55
|
+
{#if emptyPlot}
|
|
56
|
+
<div class="gg-empty-state" role="status">No data to display</div>
|
|
57
|
+
{/if}
|
|
58
|
+
{#if capabilityStatus !== null}
|
|
59
|
+
<p class="gg-capability-status" role="status">{capabilityStatus}</p>
|
|
60
|
+
{/if}
|
|
61
|
+
|
|
62
|
+
<style>
|
|
63
|
+
.gg-area-instruction {
|
|
64
|
+
position: absolute;
|
|
65
|
+
right: 8px;
|
|
66
|
+
bottom: 8px;
|
|
67
|
+
z-index: 2;
|
|
68
|
+
margin: 0;
|
|
69
|
+
border-radius: 3px;
|
|
70
|
+
padding: 4px 7px;
|
|
71
|
+
background: var(--gg-tooltipBg, var(--gg-theme-tooltipBg, #fff));
|
|
72
|
+
color: var(--gg-foreground, var(--gg-theme-foreground, currentColor));
|
|
73
|
+
font-size: 13px;
|
|
74
|
+
line-height: 1.25;
|
|
75
|
+
pointer-events: none;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.gg-empty-state {
|
|
79
|
+
position: absolute;
|
|
80
|
+
left: 50%;
|
|
81
|
+
top: 50%;
|
|
82
|
+
transform: translate(-50%, -50%);
|
|
83
|
+
/* --gg-theme-interactionMuted is a numeric alpha token — invalid in a
|
|
84
|
+
color position (see ToolRail.svelte). Inactive chrome uses --gg-toolInactive. */
|
|
85
|
+
color: var(--gg-toolInactive, currentColor);
|
|
86
|
+
font: 12px/1.4 var(--gg-font-family, sans-serif);
|
|
87
|
+
pointer-events: none;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.gg-capability-status {
|
|
91
|
+
position: absolute;
|
|
92
|
+
top: calc(100% + 4px);
|
|
93
|
+
left: 0;
|
|
94
|
+
margin: 0;
|
|
95
|
+
/* Numeric alpha token — invalid in a color position (see ToolRail). */
|
|
96
|
+
color: var(--gg-toolInactive, currentColor);
|
|
97
|
+
font: 11px/1.4 var(--gg-font-family, sans-serif);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/* sr-only pattern (NOT display:none — must stay in the a11y tree). */
|
|
101
|
+
.gg-sr-only {
|
|
102
|
+
position: absolute;
|
|
103
|
+
width: 1px;
|
|
104
|
+
height: 1px;
|
|
105
|
+
padding: 0;
|
|
106
|
+
margin: -1px;
|
|
107
|
+
overflow: hidden;
|
|
108
|
+
clip-path: inset(50%);
|
|
109
|
+
white-space: nowrap;
|
|
110
|
+
border: 0;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/* Mirrors GGPlot root reduced-motion policy for this component scope
|
|
114
|
+
(parent `.gg-plot-root *` cannot cross Svelte style boundaries). */
|
|
115
|
+
@media (prefers-reduced-motion: reduce) {
|
|
116
|
+
.gg-area-instruction,
|
|
117
|
+
.gg-empty-state,
|
|
118
|
+
.gg-capability-status,
|
|
119
|
+
.gg-sr-only {
|
|
120
|
+
scroll-behavior: auto;
|
|
121
|
+
transition: none !important;
|
|
122
|
+
animation: none !important;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
</style>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
type $$ComponentProps = {
|
|
2
|
+
plotId: string;
|
|
3
|
+
/** When true, render description + active datum sr-only pair. */
|
|
4
|
+
showInstructions?: boolean;
|
|
5
|
+
/** Keyboard-usage description for the capture surface (tool-specific). */
|
|
6
|
+
description?: string;
|
|
7
|
+
activeDatumLabel?: string;
|
|
8
|
+
showAreaInstruction?: boolean;
|
|
9
|
+
showLiveRegion?: boolean;
|
|
10
|
+
liveText?: string;
|
|
11
|
+
emptyPlot?: boolean;
|
|
12
|
+
capabilityStatus?: string | null;
|
|
13
|
+
};
|
|
14
|
+
declare const StatusChrome: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
15
|
+
type StatusChrome = ReturnType<typeof StatusChrome>;
|
|
16
|
+
export default StatusChrome;
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type {
|
|
3
|
+
InteractionTool,
|
|
4
|
+
ZoomDomains,
|
|
5
|
+
} from "../interaction/interaction.js";
|
|
6
|
+
|
|
7
|
+
type RecoveryInputSource = "keyboard" | "pointer" | "touch";
|
|
8
|
+
|
|
9
|
+
const {
|
|
10
|
+
availableTools,
|
|
11
|
+
activeTool,
|
|
12
|
+
ready,
|
|
13
|
+
emptyPlot,
|
|
14
|
+
narrow = false,
|
|
15
|
+
zoomDomains = null,
|
|
16
|
+
hasPointSelection = false,
|
|
17
|
+
hasIntervalSelection = false,
|
|
18
|
+
intervalTargetLabel,
|
|
19
|
+
canSetIntervalBounds = false,
|
|
20
|
+
canSetZoomBounds = false,
|
|
21
|
+
intervalAxes = [],
|
|
22
|
+
zoomAxes = [],
|
|
23
|
+
onChooseTool,
|
|
24
|
+
onResetZoom,
|
|
25
|
+
onClearPointSelection,
|
|
26
|
+
onClearIntervalSelection,
|
|
27
|
+
onClearCurrentInterval,
|
|
28
|
+
onEditBounds,
|
|
29
|
+
}: {
|
|
30
|
+
availableTools: readonly InteractionTool[];
|
|
31
|
+
activeTool: InteractionTool;
|
|
32
|
+
ready: boolean;
|
|
33
|
+
emptyPlot: boolean;
|
|
34
|
+
narrow?: boolean;
|
|
35
|
+
zoomDomains?: ZoomDomains | null;
|
|
36
|
+
hasPointSelection?: boolean;
|
|
37
|
+
hasIntervalSelection?: boolean;
|
|
38
|
+
intervalTargetLabel?: string | undefined;
|
|
39
|
+
canSetIntervalBounds?: boolean;
|
|
40
|
+
canSetZoomBounds?: boolean;
|
|
41
|
+
intervalAxes?: readonly ("x" | "y")[];
|
|
42
|
+
zoomAxes?: readonly ("x" | "y")[];
|
|
43
|
+
onChooseTool: (tool: InteractionTool) => void;
|
|
44
|
+
onResetZoom: (source: RecoveryInputSource) => void;
|
|
45
|
+
onClearPointSelection: (source: RecoveryInputSource) => void;
|
|
46
|
+
onClearIntervalSelection: (source: RecoveryInputSource) => void;
|
|
47
|
+
onClearCurrentInterval: (source: RecoveryInputSource) => void;
|
|
48
|
+
onEditBounds: (
|
|
49
|
+
action: "select" | "zoom",
|
|
50
|
+
axis: "x" | "y",
|
|
51
|
+
trigger: HTMLElement,
|
|
52
|
+
) => void;
|
|
53
|
+
} = $props();
|
|
54
|
+
|
|
55
|
+
let recoveryPointerType: string | null = null;
|
|
56
|
+
|
|
57
|
+
function recoverySource(event: MouseEvent): RecoveryInputSource {
|
|
58
|
+
const source =
|
|
59
|
+
recoveryPointerType === "touch"
|
|
60
|
+
? "touch"
|
|
61
|
+
: recoveryPointerType === null && event.detail === 0
|
|
62
|
+
? "keyboard"
|
|
63
|
+
: "pointer";
|
|
64
|
+
recoveryPointerType = null;
|
|
65
|
+
return source;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function captureRecoveryPointer(event: PointerEvent): void {
|
|
69
|
+
recoveryPointerType = event.pointerType;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function labelFor(tool: InteractionTool): string {
|
|
73
|
+
if (tool === "select-area") return "Select area";
|
|
74
|
+
if (tool === "zoom-area") return "Zoom area";
|
|
75
|
+
if (tool === "point") return "Select point";
|
|
76
|
+
return "Inspect";
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function boundsLabel(
|
|
80
|
+
action: "select" | "zoom",
|
|
81
|
+
axis: "x" | "y",
|
|
82
|
+
editing: boolean,
|
|
83
|
+
): string {
|
|
84
|
+
const target =
|
|
85
|
+
action === "select" && intervalTargetLabel !== undefined
|
|
86
|
+
? `: ${intervalTargetLabel}`
|
|
87
|
+
: "";
|
|
88
|
+
return `${editing ? "Edit" : "Set"} ${axis} ${action === "select" ? "selection" : "zoom"} bounds${target}`;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function panelClearLabel(): string {
|
|
92
|
+
return `Clear panel selection${intervalTargetLabel === undefined ? "" : `: ${intervalTargetLabel}`}`;
|
|
93
|
+
}
|
|
94
|
+
</script>
|
|
95
|
+
|
|
96
|
+
<div
|
|
97
|
+
class="gg-tool-rail"
|
|
98
|
+
class:gg-tool-rail-narrow={narrow}
|
|
99
|
+
role="toolbar"
|
|
100
|
+
aria-label="Chart interaction tools"
|
|
101
|
+
aria-busy={!ready}
|
|
102
|
+
>
|
|
103
|
+
<div class="gg-tool-modes">
|
|
104
|
+
{#each availableTools as available (available)}
|
|
105
|
+
<button
|
|
106
|
+
type="button"
|
|
107
|
+
disabled={!ready ||
|
|
108
|
+
(emptyPlot &&
|
|
109
|
+
(available === "select-area" || available === "zoom-area"))}
|
|
110
|
+
class:active={activeTool === available}
|
|
111
|
+
aria-pressed={activeTool === available}
|
|
112
|
+
onclick={() => onChooseTool(available)}>{labelFor(available)}</button
|
|
113
|
+
>
|
|
114
|
+
{/each}
|
|
115
|
+
</div>
|
|
116
|
+
<div class="gg-tool-recovery-actions">
|
|
117
|
+
{#if zoomDomains !== null}
|
|
118
|
+
<button
|
|
119
|
+
type="button"
|
|
120
|
+
disabled={!ready}
|
|
121
|
+
onpointerdown={captureRecoveryPointer}
|
|
122
|
+
onpointercancel={() => (recoveryPointerType = null)}
|
|
123
|
+
onclick={(event) => onResetZoom(recoverySource(event))}
|
|
124
|
+
>Reset zoom</button
|
|
125
|
+
>
|
|
126
|
+
{/if}
|
|
127
|
+
{#if canSetZoomBounds}
|
|
128
|
+
{#each zoomAxes as axis (axis)}
|
|
129
|
+
<button
|
|
130
|
+
type="button"
|
|
131
|
+
disabled={!ready}
|
|
132
|
+
onclick={(event) => onEditBounds("zoom", axis, event.currentTarget)}
|
|
133
|
+
>{boundsLabel("zoom", axis, zoomDomains !== null)}</button
|
|
134
|
+
>
|
|
135
|
+
{/each}
|
|
136
|
+
{/if}
|
|
137
|
+
{#if hasPointSelection}
|
|
138
|
+
<button
|
|
139
|
+
type="button"
|
|
140
|
+
disabled={!ready}
|
|
141
|
+
onpointerdown={captureRecoveryPointer}
|
|
142
|
+
onpointercancel={() => (recoveryPointerType = null)}
|
|
143
|
+
onclick={(event) => onClearPointSelection(recoverySource(event))}
|
|
144
|
+
>Clear selection</button
|
|
145
|
+
>
|
|
146
|
+
{/if}
|
|
147
|
+
{#if hasIntervalSelection}
|
|
148
|
+
<button
|
|
149
|
+
type="button"
|
|
150
|
+
disabled={!ready}
|
|
151
|
+
onpointerdown={captureRecoveryPointer}
|
|
152
|
+
onpointercancel={() => (recoveryPointerType = null)}
|
|
153
|
+
onclick={(event) => onClearCurrentInterval(recoverySource(event))}
|
|
154
|
+
>{panelClearLabel()}</button
|
|
155
|
+
>
|
|
156
|
+
<button
|
|
157
|
+
type="button"
|
|
158
|
+
disabled={!ready}
|
|
159
|
+
onpointerdown={captureRecoveryPointer}
|
|
160
|
+
onpointercancel={() => (recoveryPointerType = null)}
|
|
161
|
+
onclick={(event) => onClearIntervalSelection(recoverySource(event))}
|
|
162
|
+
>Clear all selections</button
|
|
163
|
+
>
|
|
164
|
+
{/if}
|
|
165
|
+
{#if canSetIntervalBounds}
|
|
166
|
+
{#each intervalAxes as axis (axis)}
|
|
167
|
+
<button
|
|
168
|
+
type="button"
|
|
169
|
+
disabled={!ready}
|
|
170
|
+
onclick={(event) => onEditBounds("select", axis, event.currentTarget)}
|
|
171
|
+
>{boundsLabel("select", axis, hasIntervalSelection)}</button
|
|
172
|
+
>
|
|
173
|
+
{/each}
|
|
174
|
+
{/if}
|
|
175
|
+
</div>
|
|
176
|
+
</div>
|
|
177
|
+
|
|
178
|
+
<style>
|
|
179
|
+
.gg-tool-rail {
|
|
180
|
+
position: absolute;
|
|
181
|
+
left: 8px;
|
|
182
|
+
right: 8px;
|
|
183
|
+
top: -48px;
|
|
184
|
+
display: grid;
|
|
185
|
+
/* Modes keep their content width; R3 recovery/bounds actions can outgrow
|
|
186
|
+
any plot width, so their track shrinks and scrolls instead of
|
|
187
|
+
overlapping the mode tabs. */
|
|
188
|
+
grid-template-columns: auto minmax(0, 1fr);
|
|
189
|
+
gap: 4px;
|
|
190
|
+
align-items: center;
|
|
191
|
+
z-index: 1;
|
|
192
|
+
line-height: 1.2;
|
|
193
|
+
pointer-events: auto;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.gg-tool-modes,
|
|
197
|
+
.gg-tool-recovery-actions {
|
|
198
|
+
display: flex;
|
|
199
|
+
align-items: center;
|
|
200
|
+
gap: 4px;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
.gg-tool-recovery-actions {
|
|
204
|
+
overflow-x: auto;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
.gg-tool-rail button {
|
|
208
|
+
min-height: 44px;
|
|
209
|
+
min-width: 44px;
|
|
210
|
+
border: 0;
|
|
211
|
+
border-bottom: 2px solid transparent;
|
|
212
|
+
border-radius: 0;
|
|
213
|
+
padding: 0 10px;
|
|
214
|
+
background: transparent;
|
|
215
|
+
/* --gg-theme-interactionMuted is a NUMERIC alpha token (theme.ts
|
|
216
|
+
interactionMuted: 0.36). Inactive chrome ink uses --gg-toolInactive so
|
|
217
|
+
it never collides with --gg-interactionMuted (themeVar opacity). */
|
|
218
|
+
color: var(--gg-toolInactive, currentColor);
|
|
219
|
+
font: inherit;
|
|
220
|
+
font-size: 14px;
|
|
221
|
+
white-space: nowrap;
|
|
222
|
+
flex-shrink: 0;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
.gg-tool-rail button:focus-visible {
|
|
226
|
+
outline: 2px solid var(--gg-focusRing, var(--gg-theme-focusRing, Highlight));
|
|
227
|
+
outline-offset: 2px;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
.gg-tool-rail button.active {
|
|
231
|
+
border-bottom-color: var(
|
|
232
|
+
--gg-toolActive,
|
|
233
|
+
var(--gg-theme-toolActive, currentColor)
|
|
234
|
+
);
|
|
235
|
+
color: var(--gg-toolActive, var(--gg-theme-toolActive, currentColor));
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
.gg-tool-recovery-actions:empty {
|
|
239
|
+
display: none;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/* Container queries cascade across component boundaries; keep the
|
|
243
|
+
responsive narrow layout for engines that honour named containers. */
|
|
244
|
+
@container gg-plot (max-width: 559px) {
|
|
245
|
+
.gg-tool-rail {
|
|
246
|
+
top: -92px;
|
|
247
|
+
grid-template-columns: 1fr;
|
|
248
|
+
grid-template-rows: auto auto;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
.gg-tool-modes,
|
|
252
|
+
.gg-tool-recovery-actions {
|
|
253
|
+
width: 100%;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/* Prop-driven fallback for engines that do not apply a query to
|
|
258
|
+
descendants of a component-owned named container during hydration. */
|
|
259
|
+
.gg-tool-rail-narrow {
|
|
260
|
+
top: -92px;
|
|
261
|
+
grid-template-columns: 1fr;
|
|
262
|
+
grid-template-rows: auto auto;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
.gg-tool-rail-narrow .gg-tool-modes,
|
|
266
|
+
.gg-tool-rail-narrow .gg-tool-recovery-actions {
|
|
267
|
+
width: 100%;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
@media (forced-colors: active) {
|
|
271
|
+
.gg-tool-rail button:focus-visible {
|
|
272
|
+
outline-color: Highlight;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
.gg-tool-rail button.active {
|
|
276
|
+
border-bottom-color: Highlight;
|
|
277
|
+
color: ButtonText;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/* Chromium does not repaint a button's forced text/border color when
|
|
281
|
+
`disabled` is removed unless the COMPUTED value changes with the state
|
|
282
|
+
(these buttons render disabled during SSR and are enabled after
|
|
283
|
+
hydration, so without this rule they froze race-dependently on the
|
|
284
|
+
disabled GrayText paint — PR #160's vr flake). Both properties are
|
|
285
|
+
needed: the base rule's `transparent` border is also forced-painted.
|
|
286
|
+
Placed after `.active` so a disabled active tool still reads as
|
|
287
|
+
disabled. */
|
|
288
|
+
.gg-tool-rail button:disabled {
|
|
289
|
+
border-bottom-color: GrayText;
|
|
290
|
+
color: GrayText;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
</style>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { InteractionTool, ZoomDomains } from "../interaction/interaction.js";
|
|
2
|
+
type RecoveryInputSource = "keyboard" | "pointer" | "touch";
|
|
3
|
+
type $$ComponentProps = {
|
|
4
|
+
availableTools: readonly InteractionTool[];
|
|
5
|
+
activeTool: InteractionTool;
|
|
6
|
+
ready: boolean;
|
|
7
|
+
emptyPlot: boolean;
|
|
8
|
+
narrow?: boolean;
|
|
9
|
+
zoomDomains?: ZoomDomains | null;
|
|
10
|
+
hasPointSelection?: boolean;
|
|
11
|
+
hasIntervalSelection?: boolean;
|
|
12
|
+
intervalTargetLabel?: string | undefined;
|
|
13
|
+
canSetIntervalBounds?: boolean;
|
|
14
|
+
canSetZoomBounds?: boolean;
|
|
15
|
+
intervalAxes?: readonly ("x" | "y")[];
|
|
16
|
+
zoomAxes?: readonly ("x" | "y")[];
|
|
17
|
+
onChooseTool: (tool: InteractionTool) => void;
|
|
18
|
+
onResetZoom: (source: RecoveryInputSource) => void;
|
|
19
|
+
onClearPointSelection: (source: RecoveryInputSource) => void;
|
|
20
|
+
onClearIntervalSelection: (source: RecoveryInputSource) => void;
|
|
21
|
+
onClearCurrentInterval: (source: RecoveryInputSource) => void;
|
|
22
|
+
onEditBounds: (action: "select" | "zoom", axis: "x" | "y", trigger: HTMLElement) => void;
|
|
23
|
+
};
|
|
24
|
+
declare const ToolRail: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
25
|
+
type ToolRail = ReturnType<typeof ToolRail>;
|
|
26
|
+
export default ToolRail;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plot chrome controller extracted from GGPlot for S8.
|
|
3
|
+
*
|
|
4
|
+
* Owns the fifteen construction-time chrome deriveds (tool rail, capability
|
|
5
|
+
* status, precise axes, theme/root style, etc.) plus `markLabel` as a
|
|
6
|
+
* derived-FUNCTION accessor and `datumLabel` as a plain method.
|
|
7
|
+
*
|
|
8
|
+
* Pure deriveds only — no $state, no handlers, no effects. Every construction
|
|
9
|
+
* input is earlier-declared at the host factory site (original line 581).
|
|
10
|
+
*/
|
|
11
|
+
import type { CellValue, RenderModel } from "@ggts-sh/core";
|
|
12
|
+
import { type InteractionDiagnostic, type InteractionTool, type PlotInteractionInterval, type ResolvedInteractionConfig } from "../interaction/interaction.js";
|
|
13
|
+
import type { ContinuousZoomDomains } from "../scene/geometry.js";
|
|
14
|
+
export type PlotChromeStateDeps = {
|
|
15
|
+
model: () => RenderModel | null;
|
|
16
|
+
/** Narrow getter over `interactionConfig.zoom`. */
|
|
17
|
+
zoomConfig: () => ResolvedInteractionConfig["zoom"];
|
|
18
|
+
/** Narrow getter over `interactionConfig.select`. */
|
|
19
|
+
selectConfig: () => ResolvedInteractionConfig["select"];
|
|
20
|
+
/** Configured (unfiltered) available tools from normalizeInteractionConfig. */
|
|
21
|
+
configuredAvailableTools: () => readonly InteractionTool[];
|
|
22
|
+
/** Interaction config diagnostics (facet-unsupported, etc.). */
|
|
23
|
+
interactionDiagnostics: () => readonly InteractionDiagnostic[];
|
|
24
|
+
interactive: () => boolean;
|
|
25
|
+
effectiveZoomDomains: () => ContinuousZoomDomains | null;
|
|
26
|
+
effectiveIntervals: () => readonly PlotInteractionInterval<PropertyKey>[];
|
|
27
|
+
/** Host alias over the selection controller. */
|
|
28
|
+
effectiveSelectedKeys: () => readonly PropertyKey[];
|
|
29
|
+
effectiveEmphasisKeys: () => readonly PropertyKey[];
|
|
30
|
+
legendFocusEnabled: () => boolean;
|
|
31
|
+
hasCanvas: () => boolean;
|
|
32
|
+
/** Width prop (number | "container" | undefined). */
|
|
33
|
+
width: () => number | "container" | undefined;
|
|
34
|
+
resolvedWidth: () => number;
|
|
35
|
+
resolvedHeight: () => number;
|
|
36
|
+
};
|
|
37
|
+
export type PlotChromeState = {
|
|
38
|
+
readonly availableTools: readonly InteractionTool[];
|
|
39
|
+
readonly canPublishPointSelection: boolean;
|
|
40
|
+
readonly hasPointSelection: boolean;
|
|
41
|
+
readonly hasIntervalSelection: boolean;
|
|
42
|
+
readonly showToolRail: boolean;
|
|
43
|
+
readonly emptyPlot: boolean;
|
|
44
|
+
readonly preciseIntervalAxes: readonly ("x" | "y")[];
|
|
45
|
+
readonly preciseZoomAxes: readonly ("x" | "y")[];
|
|
46
|
+
readonly areaScaleDiagnostics: readonly InteractionDiagnostic[];
|
|
47
|
+
readonly legendDiagnostics: readonly InteractionDiagnostic[];
|
|
48
|
+
readonly capabilityStatus: string | null;
|
|
49
|
+
readonly rootStyle: string | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* Derived function accessor — callback identity changes only when `model`
|
|
52
|
+
* changes (codex P2-8 / r2 P2-4).
|
|
53
|
+
*/
|
|
54
|
+
readonly markLabel: (row: number) => string;
|
|
55
|
+
/** Method reading the current model at call time. */
|
|
56
|
+
datumLabel(values: Record<string, CellValue> | null): string;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Create the plot chrome controller. All deriveds are construction-time —
|
|
60
|
+
* every dep is earlier-declared at the host factory position. No $state,
|
|
61
|
+
* handlers, or effects.
|
|
62
|
+
*/
|
|
63
|
+
export declare function createPlotChromeState(deps: PlotChromeStateDeps): PlotChromeState;
|