@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
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Liam O'Dea
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# @ggts-sh/svelte
|
|
2
|
+
|
|
3
|
+
[](https://app.codecov.io/gh/ggts-sh/ggts/tree/main/packages%2Fsvelte)
|
|
4
|
+
|
|
5
|
+
Svelte 5 components for ggts. Re-exports `@ggts-sh/spec` and
|
|
6
|
+
`@ggts-sh/core`. The agent skill ships separately as
|
|
7
|
+
[`@ggts-sh/skill`](https://www.npmjs.com/package/@ggts-sh/skill), and the
|
|
8
|
+
`ggts render` CLI as
|
|
9
|
+
[`@ggts-sh/cli`](https://www.npmjs.com/package/@ggts-sh/cli) — install both in
|
|
10
|
+
every sandbox where an agent authors specs.
|
|
11
|
+
|
|
12
|
+
```sh
|
|
13
|
+
bun add @ggts-sh/svelte @ggts-sh/core
|
|
14
|
+
# or: npm install @ggts-sh/svelte @ggts-sh/core
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Requires Node.js 22+ and Svelte 5.33.1+. The example imports bundled data
|
|
18
|
+
from `@ggts-sh/core/data`, so it installs core as a direct dependency.
|
|
19
|
+
Charts with inline data need only `@ggts-sh/svelte`.
|
|
20
|
+
|
|
21
|
+
## Example
|
|
22
|
+
|
|
23
|
+
Compose with declaration-only children (theme, scales, labs, geoms). Do not put
|
|
24
|
+
`theme`, `scales`, `labs`, `guides`, `facet`, `coord`, or `legend` on
|
|
25
|
+
`<GGPlot>` — those props were removed in 0.13.0.
|
|
26
|
+
|
|
27
|
+
```svelte
|
|
28
|
+
<script lang="ts">
|
|
29
|
+
import {
|
|
30
|
+
GeomPoint,
|
|
31
|
+
GeomSmooth,
|
|
32
|
+
GGPlot,
|
|
33
|
+
Labs,
|
|
34
|
+
ThemeMinimal,
|
|
35
|
+
} from "@ggts-sh/svelte";
|
|
36
|
+
import { kyotoSakura } from "@ggts-sh/core/data";
|
|
37
|
+
</script>
|
|
38
|
+
|
|
39
|
+
<GGPlot data={kyotoSakura} aes={{ x: "year", y: "bloomDoy" }}>
|
|
40
|
+
<GeomSmooth method="loess" se={false} />
|
|
41
|
+
<GeomPoint size={2} alpha={0.7} />
|
|
42
|
+
<ThemeMinimal />
|
|
43
|
+
<Labs
|
|
44
|
+
title="Kyoto cherry blossom full-bloom dates, 812–2026"
|
|
45
|
+
subtitle="Full bloom moved about ten days earlier after the industrial era"
|
|
46
|
+
x="Year"
|
|
47
|
+
y="Day of year"
|
|
48
|
+
/>
|
|
49
|
+
</GGPlot>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Convention (ggplot2 thinking order): mark layers first, then scales / coords /
|
|
53
|
+
facets, then theme / guides / labs, then host-only `<Inspect>` last. Dense
|
|
54
|
+
points may render on canvas; axes, legends, text, and accessible descriptions
|
|
55
|
+
stay in the DOM. Prefer `<Inspect />` and `<GuideLegend channel focus>` /
|
|
56
|
+
`<GuideLegend channel filter>` for interaction — not plot-level `inspect`,
|
|
57
|
+
`legendFocus`, or `legendFilter`.
|
|
58
|
+
|
|
59
|
+
## Agent skill
|
|
60
|
+
|
|
61
|
+
Published separately as
|
|
62
|
+
[`@ggts-sh/skill`](https://www.npmjs.com/package/@ggts-sh/skill):
|
|
63
|
+
`node_modules/@ggts-sh/skill/SKILL.md`. Copy it into your agent's skills
|
|
64
|
+
directory as `ggts/` and re-copy on version bumps — dependabot surfaces
|
|
65
|
+
those. (Removed from this package in 0.27.0.)
|
|
66
|
+
|
|
67
|
+
Emit PortableSpec JSON, run `validate()`, apply `fix.example` at `path`,
|
|
68
|
+
re-validate, then render with `<GGPlot spec={…} />`, `renderToSVGString`, or
|
|
69
|
+
`ggts render`. Schema: [schema/v0.json](https://ggts.sh/schema/v0.json).
|
|
70
|
+
|
|
71
|
+
## Migrating old code
|
|
72
|
+
|
|
73
|
+
If you still have pre-0.13 sources with grammar props on `<GGPlot>`, the
|
|
74
|
+
codemod rewrites them to children:
|
|
75
|
+
|
|
76
|
+
```sh
|
|
77
|
+
npm exec --package=@ggts-sh/svelte -- ggts-codemod src # show what would change
|
|
78
|
+
npm exec --package=@ggts-sh/svelte -- ggts-codemod --write src # apply
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Shapes it will not rewrite mechanically are printed as `manual change
|
|
82
|
+
required` with a link to the [upgrading
|
|
83
|
+
guide](https://ggts.sh/guide/upgrading), never half-migrated.
|
|
84
|
+
|
|
85
|
+
## Links
|
|
86
|
+
|
|
87
|
+
- [Documentation](https://ggts.sh/)
|
|
88
|
+
- [Getting started](https://ggts.sh/guide/getting-started)
|
|
89
|
+
- [Example gallery](https://ggts.sh/examples)
|
|
90
|
+
- [Interactions](https://ggts.sh/reference/interactions)
|
|
91
|
+
- [Upgrading](https://ggts.sh/guide/upgrading)
|
|
92
|
+
- [CLI (`@ggts-sh/cli`)](https://www.npmjs.com/package/@ggts-sh/cli)
|
|
93
|
+
- [Repository](https://github.com/ggts-sh/ggts)
|
|
94
|
+
|
|
95
|
+
Pre-1.0. Lifecycle and compatibility contracts are on the docs site.
|
|
96
|
+
|
|
97
|
+
[MIT](https://github.com/ggts-sh/ggts/blob/main/LICENSE) © Liam O'Dea
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// ggts-codemod — migrate deprecated <GGPlot> grammar props to child layers.
|
|
3
|
+
//
|
|
4
|
+
// Thin wrapper: all logic lives in runCodemodCLI (pure entry, tested in
|
|
5
|
+
// tests/codemod/), mirroring @ggts-sh/cli's bin/ggsvelte-render.js. This file only wires the
|
|
6
|
+
// filesystem, process streams, and the exit code.
|
|
7
|
+
//
|
|
8
|
+
// Dry-run by default (ADR 0013) — writes only with --write.
|
|
9
|
+
//
|
|
10
|
+
// Exit codes: 0 ok · 1 a file failed to parse · 2 usage error.
|
|
11
|
+
import { readdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
|
|
12
|
+
import { join } from "node:path";
|
|
13
|
+
import process from "node:process";
|
|
14
|
+
|
|
15
|
+
import { runCodemodCLI } from "../dist/codemod/index.js";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @param {string} path
|
|
19
|
+
* @returns {string[]}
|
|
20
|
+
*/
|
|
21
|
+
function listSvelteFiles(path) {
|
|
22
|
+
if (!statSync(path).isDirectory()) return [path];
|
|
23
|
+
/** @type {string[]} */
|
|
24
|
+
const found = [];
|
|
25
|
+
for (const entry of readdirSync(path, { withFileTypes: true })) {
|
|
26
|
+
if (entry.name === "node_modules" || entry.name.startsWith(".")) continue;
|
|
27
|
+
const child = join(path, entry.name);
|
|
28
|
+
if (entry.isDirectory()) found.push(...listSvelteFiles(child));
|
|
29
|
+
else if (entry.name.endsWith(".svelte")) found.push(child);
|
|
30
|
+
}
|
|
31
|
+
return found;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const code = runCodemodCLI(process.argv.slice(2), {
|
|
35
|
+
listSvelteFiles,
|
|
36
|
+
readFile: (path) => readFileSync(path, "utf8"),
|
|
37
|
+
writeFile: (path, content) => {
|
|
38
|
+
writeFileSync(path, content);
|
|
39
|
+
},
|
|
40
|
+
writeOut: (line) => {
|
|
41
|
+
process.stdout.write(line + "\n");
|
|
42
|
+
},
|
|
43
|
+
writeErr: (line) => {
|
|
44
|
+
process.stderr.write(line + "\n");
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
process.exit(code);
|
|
@@ -0,0 +1,491 @@
|
|
|
1
|
+
<script
|
|
2
|
+
lang="ts"
|
|
3
|
+
generics="Row extends Record<string, CellValue> = Record<string, CellValue>, Identity extends keyof Row | ((row: Row, index: number) => PropertyKey) = keyof Row"
|
|
4
|
+
>
|
|
5
|
+
/**
|
|
6
|
+
* <GGPlot> — the props-first Svelte adapter (plan: "Svelte adapter").
|
|
7
|
+
*
|
|
8
|
+
* Guaranteed API: `spec={...}` or `data`/`aes`/`layers` props. Declaration-
|
|
9
|
+
* only children (<GeomPoint>/<GeomLine>) are OPTIONAL sugar; explicit
|
|
10
|
+
* `layers` props win over children when both are present.
|
|
11
|
+
*
|
|
12
|
+
* Reactivity: spec assembly is $derived; model production runs in the plot
|
|
13
|
+
* runtime with run-id gating; the committed scale
|
|
14
|
+
* state lives in a NON-reactive box (never read-modify-write shared reactive
|
|
15
|
+
* state across init/teardown — decision 0001, finding 3). That box is what
|
|
16
|
+
* makes discrete colors value-stable across data changes AND across
|
|
17
|
+
* brush-to-zoom respecs.
|
|
18
|
+
*
|
|
19
|
+
* M2 compositing (decision 0006): when any layer resolves to the canvas
|
|
20
|
+
* backend, the plot root becomes an ordered list of full-size sibling
|
|
21
|
+
* strata (SVG chrome-bottom, mark strata in svg/canvas, SVG chrome-top) —
|
|
22
|
+
* document order = paint order, no z-index anywhere. Every stratum is
|
|
23
|
+
* pointer-events: none; ONE transparent capture layer (last child) owns
|
|
24
|
+
* all pointer events and resolves them through the semantic viewport, so
|
|
25
|
+
* hover/tooltip/brush never care which stratum painted a mark. Hover,
|
|
26
|
+
* tooltip, and the transient brush are pure overlays — the pipeline NEVER
|
|
27
|
+
* re-runs for them. Brush-to-zoom is an intentional respec (explicit
|
|
28
|
+
* continuous domains via scale inversion) with prevScales flowing, so
|
|
29
|
+
* color assignments never shift. Double-click resets the zoom;
|
|
30
|
+
* resetScales() (component export) also clears grow-mode scale state.
|
|
31
|
+
*
|
|
32
|
+
* Memory (plan: "Memory ownership"): the previous RenderModel is disposed
|
|
33
|
+
* on commit ($effect cleanup — runs after the DOM has moved to the new
|
|
34
|
+
* model) and the last one on unmount.
|
|
35
|
+
*
|
|
36
|
+
* Controller wiring lives in `plot-engine.svelte.ts` (construction /
|
|
37
|
+
* effect-order contract documented there).
|
|
38
|
+
*/
|
|
39
|
+
import type { CellValue } from "@ggts-sh/core";
|
|
40
|
+
import { sceneLabel } from "@ggts-sh/core";
|
|
41
|
+
|
|
42
|
+
import type { ZoomDomains } from "./interaction/interaction.js";
|
|
43
|
+
import { provideRegistry } from "./geoms/registry.svelte.js";
|
|
44
|
+
import { createTooltipPresenceState } from "./inspection/tooltip-presence.svelte.js";
|
|
45
|
+
import { shouldRenderInteractionLiveRegion } from "./legend/surface.js";
|
|
46
|
+
import { resolveInteractionLiveText } from "./assembly/labels.js";
|
|
47
|
+
import {
|
|
48
|
+
isContainerWidthProp,
|
|
49
|
+
isNarrowToolsWidth,
|
|
50
|
+
isTooltipDocked,
|
|
51
|
+
plotTooltipDomId,
|
|
52
|
+
resolveCaptureAriaControls,
|
|
53
|
+
resolveClearControlLayout,
|
|
54
|
+
tooltipViewportSize,
|
|
55
|
+
} from "./assembly/layout.js";
|
|
56
|
+
import BoundsEditor from "./interval/BoundsEditor.svelte";
|
|
57
|
+
import type { EnginePlotProps, GGPlotProps } from "./plot-props.js";
|
|
58
|
+
import { widenPlotProps } from "./plot-props.js";
|
|
59
|
+
import { createPlotEngine } from "./plot-engine.svelte.js";
|
|
60
|
+
import CaptureSurface from "./surface/CaptureSurface.svelte";
|
|
61
|
+
import LegendFilters from "./legend/LegendFilters.svelte";
|
|
62
|
+
import LegendTargets from "./legend/LegendTargets.svelte";
|
|
63
|
+
import MarkStrata from "./scene/MarkStrata.svelte";
|
|
64
|
+
import SceneOverlays from "./scene/SceneOverlays.svelte";
|
|
65
|
+
import StatusChrome from "./chrome/StatusChrome.svelte";
|
|
66
|
+
import Tooltip from "./inspection/Tooltip.svelte";
|
|
67
|
+
import ToolRail from "./chrome/ToolRail.svelte";
|
|
68
|
+
|
|
69
|
+
// Do not destructure $props — later destructure freezes values (#1040 / Claude).
|
|
70
|
+
// Markup reads props.width / props.ariaLabel / props.children; engine gets a
|
|
71
|
+
// lazy widened view (six PublicKey casts live in widenPlotProps).
|
|
72
|
+
const props: GGPlotProps<Row, Identity> = $props();
|
|
73
|
+
|
|
74
|
+
const registry = provideRegistry();
|
|
75
|
+
let root = $state<HTMLDivElement | null>(null);
|
|
76
|
+
let captureSurface = $state<HTMLDivElement | null>(null);
|
|
77
|
+
let a11yTableOpen = $state(false);
|
|
78
|
+
const plotId = $props.id();
|
|
79
|
+
|
|
80
|
+
// Getter so construction does not snapshot $props (state_referenced_locally).
|
|
81
|
+
// The widened proxy is memoized once; field access stays lazy on the source.
|
|
82
|
+
let engineProps: EnginePlotProps | undefined;
|
|
83
|
+
const engine = createPlotEngine({
|
|
84
|
+
registry,
|
|
85
|
+
plotId,
|
|
86
|
+
root: () => root,
|
|
87
|
+
captureSurface: () => captureSurface,
|
|
88
|
+
get props() {
|
|
89
|
+
return (engineProps ??= widenPlotProps(props));
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
const {
|
|
94
|
+
zoomState,
|
|
95
|
+
legendFilterState,
|
|
96
|
+
runtime,
|
|
97
|
+
inspectionState,
|
|
98
|
+
surfaceState,
|
|
99
|
+
selectionState,
|
|
100
|
+
legendFocusState,
|
|
101
|
+
intervalState,
|
|
102
|
+
chromeState,
|
|
103
|
+
announcer,
|
|
104
|
+
} = engine;
|
|
105
|
+
|
|
106
|
+
// Tooltip session/ghost/presence lives in its own factory (live inspection
|
|
107
|
+
// getter; timer/rAF cleanup on unmount; SSR-safe). Call must stay here,
|
|
108
|
+
// during component init, after the engine destructure.
|
|
109
|
+
const presence = createTooltipPresenceState({
|
|
110
|
+
getInspection: () => inspectionState.inspection,
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Clear committed grow-mode scale state and any brush zoom so the next
|
|
115
|
+
* render re-trains scales from the current data. Call after data changes
|
|
116
|
+
* that drop categories whose reserved colors should not persist.
|
|
117
|
+
*/
|
|
118
|
+
export function resetScales(): void {
|
|
119
|
+
runtime.resetScales();
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/** Replace one or both continuous zoom domains without disturbing the
|
|
123
|
+
* other channel. This is the controlled linking/programmatic-zoom path. */
|
|
124
|
+
export function setZoom(domains: Partial<ZoomDomains>): void {
|
|
125
|
+
zoomState.setZoomDomains(domains);
|
|
126
|
+
}
|
|
127
|
+
</script>
|
|
128
|
+
|
|
129
|
+
<!-- Declaration-only children emit no markup. Render them outside and before
|
|
130
|
+
the root so SSR registers every layer before root attributes read derived
|
|
131
|
+
plot state; placing them inside the root is too late in Svelte's one-pass
|
|
132
|
+
server evaluation even when they appear first in source order. -->
|
|
133
|
+
{@render props.children?.()}
|
|
134
|
+
|
|
135
|
+
<!-- The root div is the plot's stable mount point and carries the
|
|
136
|
+
data-gg-ready readiness signal. Compositing (decision 0006): ordered
|
|
137
|
+
full-size sibling strata, document order = paint order, no z-index;
|
|
138
|
+
all strata inert; the capture layer (last child) owns pointer events. -->
|
|
139
|
+
<div
|
|
140
|
+
bind:this={root}
|
|
141
|
+
class="gg-plot-root"
|
|
142
|
+
class:gg-container-width={isContainerWidthProp(props.width)}
|
|
143
|
+
class:gg-with-tool-rail={chromeState.showToolRail}
|
|
144
|
+
class:gg-with-legend-clear={engine.legendClearActive}
|
|
145
|
+
class:gg-with-legend-filters={engine.filterableLegendEntries.length > 0}
|
|
146
|
+
class:gg-narrow-tools={isNarrowToolsWidth(runtime.resolvedWidth)}
|
|
147
|
+
class:gg-with-docked-tooltip={isTooltipDocked({
|
|
148
|
+
inspectionState: inspectionState.inspection?.state,
|
|
149
|
+
widthPx: runtime.resolvedWidth,
|
|
150
|
+
})}
|
|
151
|
+
data-gg-ready={runtime.ready ? "true" : "false"}
|
|
152
|
+
style={chromeState.rootStyle}
|
|
153
|
+
>
|
|
154
|
+
{#if chromeState.showToolRail}
|
|
155
|
+
<ToolRail
|
|
156
|
+
availableTools={chromeState.availableTools}
|
|
157
|
+
activeTool={surfaceState.activeTool}
|
|
158
|
+
ready={runtime.ready}
|
|
159
|
+
emptyPlot={chromeState.emptyPlot}
|
|
160
|
+
narrow={isNarrowToolsWidth(runtime.resolvedWidth)}
|
|
161
|
+
zoomDomains={zoomState.effectiveZoomDomains}
|
|
162
|
+
hasPointSelection={chromeState.hasPointSelection}
|
|
163
|
+
hasIntervalSelection={chromeState.hasIntervalSelection}
|
|
164
|
+
intervalTargetLabel={intervalState.currentIntervalTargetLabel}
|
|
165
|
+
canSetIntervalBounds={!chromeState.emptyPlot &&
|
|
166
|
+
chromeState.preciseIntervalAxes.length > 0 &&
|
|
167
|
+
intervalState.intervalBoundsTargetAvailable}
|
|
168
|
+
canSetZoomBounds={!chromeState.emptyPlot &&
|
|
169
|
+
chromeState.preciseZoomAxes.length > 0}
|
|
170
|
+
intervalAxes={chromeState.preciseIntervalAxes}
|
|
171
|
+
zoomAxes={chromeState.preciseZoomAxes}
|
|
172
|
+
onChooseTool={surfaceState.chooseTool}
|
|
173
|
+
onResetZoom={zoomState.resetZoom}
|
|
174
|
+
onClearPointSelection={selectionState.clearPointSelection}
|
|
175
|
+
onClearIntervalSelection={intervalState.clearIntervalSelection}
|
|
176
|
+
onClearCurrentInterval={intervalState.clearCurrentPanelInterval}
|
|
177
|
+
onEditBounds={intervalState.openBoundsEditor}
|
|
178
|
+
/>
|
|
179
|
+
{/if}
|
|
180
|
+
{#if intervalState.boundsEditorInput !== null}
|
|
181
|
+
<div class="gg-precise-bounds">
|
|
182
|
+
<BoundsEditor
|
|
183
|
+
input={intervalState.boundsEditorInput}
|
|
184
|
+
returnFocus={intervalState.boundsReturnFocus}
|
|
185
|
+
onapply={intervalState.applyPreciseBounds}
|
|
186
|
+
oncancel={intervalState.cancelBoundsEditor}
|
|
187
|
+
/>
|
|
188
|
+
</div>
|
|
189
|
+
{/if}
|
|
190
|
+
{#if runtime.model !== null}
|
|
191
|
+
{@const currentModel = runtime.model}
|
|
192
|
+
<MarkStrata
|
|
193
|
+
model={currentModel}
|
|
194
|
+
strata={runtime.strata}
|
|
195
|
+
ariaLabel={props.ariaLabel}
|
|
196
|
+
markLabel={chromeState.markLabel}
|
|
197
|
+
interactionMasks={engine.interactionMasks}
|
|
198
|
+
{a11yTableOpen}
|
|
199
|
+
onA11yToggle={() => (a11yTableOpen = !a11yTableOpen)}
|
|
200
|
+
onPainted={runtime.notifyPainted}
|
|
201
|
+
/>
|
|
202
|
+
<LegendTargets
|
|
203
|
+
entries={engine.interactiveLegendEntries}
|
|
204
|
+
previewIdentity={legendFocusState.previewIdentity}
|
|
205
|
+
pressedIdentity={engine.effectiveLegendPressed}
|
|
206
|
+
rovingIndex={legendFocusState.rovingIndex}
|
|
207
|
+
sceneWidth={currentModel.scene.width}
|
|
208
|
+
sceneHeight={currentModel.scene.height}
|
|
209
|
+
clearLayout={resolveClearControlLayout({
|
|
210
|
+
legendFocusEnabled: engine.legendFocusEnabled,
|
|
211
|
+
pressedScale: engine.effectiveLegendPressed?.scale ?? null,
|
|
212
|
+
legends: currentModel.scene.legends,
|
|
213
|
+
sceneWidth: currentModel.scene.width,
|
|
214
|
+
sceneHeight: currentModel.scene.height,
|
|
215
|
+
})}
|
|
216
|
+
onPreviewIndex={legendFocusState.onPreviewIndex}
|
|
217
|
+
onPreviewClear={legendFocusState.onPreviewClear}
|
|
218
|
+
onPointerDown={legendFocusState.onLegendPointerDown}
|
|
219
|
+
onPointerUp={legendFocusState.onLegendPointerUp}
|
|
220
|
+
onPointerCancel={legendFocusState.setTouchIndexCleared}
|
|
221
|
+
onFocus={legendFocusState.onLegendFocus}
|
|
222
|
+
onBlur={legendFocusState.onLegendBlur}
|
|
223
|
+
onClick={legendFocusState.onLegendClick}
|
|
224
|
+
onKeyDown={legendFocusState.onLegendKeydown}
|
|
225
|
+
onClearPointerDown={legendFocusState.setClearPointerType}
|
|
226
|
+
onClearPointerCancel={() => legendFocusState.setClearPointerType(null)}
|
|
227
|
+
onClearClick={legendFocusState.clearLegendFromControl}
|
|
228
|
+
/>
|
|
229
|
+
<LegendFilters
|
|
230
|
+
controller={legendFilterState}
|
|
231
|
+
entries={engine.filterableLegendEntries}
|
|
232
|
+
/>
|
|
233
|
+
<SceneOverlays
|
|
234
|
+
width={currentModel.scene.width}
|
|
235
|
+
height={currentModel.scene.height}
|
|
236
|
+
interactive={engine.interactive}
|
|
237
|
+
surfaceInteractive={engine.surfaceInteractive}
|
|
238
|
+
inspection={inspectionState.inspection}
|
|
239
|
+
inspectionPanel={inspectionState.inspectionPanel}
|
|
240
|
+
coordFlipped={engine.coordFlipped}
|
|
241
|
+
hoverChrome={engine.hoverChrome}
|
|
242
|
+
hoverBoxWidth={engine.hoverBoxWidth}
|
|
243
|
+
hoverBoxHeight={engine.hoverBoxHeight}
|
|
244
|
+
hoverBoxAnchor={engine.hoverBoxAnchor}
|
|
245
|
+
crosshairGapObstacles={engine.crosshairGapObstacles}
|
|
246
|
+
selectedAnchors={engine.selectedAnchors}
|
|
247
|
+
emphasizedAnchors={engine.emphasizedAnchors}
|
|
248
|
+
brushRect={surfaceState.brushRect}
|
|
249
|
+
activeTool={surfaceState.activeTool}
|
|
250
|
+
areaAwaitingSecond={surfaceState.areaAwaitingSecond}
|
|
251
|
+
committedInterval={intervalState.committedInterval}
|
|
252
|
+
/>
|
|
253
|
+
{#if engine.surfaceInteractive}
|
|
254
|
+
<!-- Order (document = paint): overlay → capture → Tooltip → status chrome. -->
|
|
255
|
+
<CaptureSurface
|
|
256
|
+
bind:element={captureSurface}
|
|
257
|
+
{plotId}
|
|
258
|
+
activeTool={surfaceState.activeTool}
|
|
259
|
+
ariaLabel={props.ariaLabel ??
|
|
260
|
+
engine.assembled?.labs?.title ??
|
|
261
|
+
sceneLabel(currentModel.scene)}
|
|
262
|
+
ariaControls={resolveCaptureAriaControls({
|
|
263
|
+
inspectionState: inspectionState.inspection?.state,
|
|
264
|
+
contentMode: engine.interactionConfig.inspect?.contentMode,
|
|
265
|
+
plotId,
|
|
266
|
+
})}
|
|
267
|
+
onFocus={() => {
|
|
268
|
+
if (inspectionState.inspection === null) inspectionState.navigate(1);
|
|
269
|
+
presence.queueSync();
|
|
270
|
+
}}
|
|
271
|
+
onBlur={(event) => {
|
|
272
|
+
presence.markExplicitClose();
|
|
273
|
+
surfaceState.onSurfaceBlur(event);
|
|
274
|
+
presence.queueSync();
|
|
275
|
+
}}
|
|
276
|
+
onPointerMove={(event) => {
|
|
277
|
+
presence.setPointerOnCapture(true);
|
|
278
|
+
surfaceState.onPointerMove(event);
|
|
279
|
+
presence.queueSync();
|
|
280
|
+
}}
|
|
281
|
+
onPointerLeave={() => {
|
|
282
|
+
presence.setPointerOnCapture(false);
|
|
283
|
+
surfaceState.onPointerLeave();
|
|
284
|
+
queueMicrotask(presence.queueSync);
|
|
285
|
+
}}
|
|
286
|
+
onPointerDown={(event) => {
|
|
287
|
+
surfaceState.onPointerDown(event);
|
|
288
|
+
presence.queueSync();
|
|
289
|
+
}}
|
|
290
|
+
onPointerUp={(event) => {
|
|
291
|
+
surfaceState.onPointerUp(event);
|
|
292
|
+
presence.queueSync();
|
|
293
|
+
}}
|
|
294
|
+
onPointerCancel={() => {
|
|
295
|
+
surfaceState.onPointerCancel();
|
|
296
|
+
presence.queueSync();
|
|
297
|
+
}}
|
|
298
|
+
onLostPointerCapture={() => {
|
|
299
|
+
surfaceState.onLostPointerCapture();
|
|
300
|
+
presence.queueSync();
|
|
301
|
+
}}
|
|
302
|
+
onClick={(event) => {
|
|
303
|
+
surfaceState.onCaptureClick(event);
|
|
304
|
+
presence.queueSync();
|
|
305
|
+
}}
|
|
306
|
+
onKeyDown={(event) => {
|
|
307
|
+
if (event.key === "Escape") presence.markExplicitClose();
|
|
308
|
+
surfaceState.onSurfaceKeyDown(event);
|
|
309
|
+
presence.queueSync();
|
|
310
|
+
}}
|
|
311
|
+
onDblClick={zoomState.onDblClick}
|
|
312
|
+
/>
|
|
313
|
+
{#if inspectionState.inspection !== null}
|
|
314
|
+
{@const currentInspection = inspectionState.inspection}
|
|
315
|
+
{@const tooltipSize = tooltipViewportSize({
|
|
316
|
+
sceneWidth: currentModel.scene.width,
|
|
317
|
+
sceneHeight: currentModel.scene.height,
|
|
318
|
+
clientWidth: root?.clientWidth,
|
|
319
|
+
clientHeight: root?.clientHeight,
|
|
320
|
+
})}
|
|
321
|
+
<Tooltip
|
|
322
|
+
id={plotTooltipDomId(plotId)}
|
|
323
|
+
inspection={currentInspection}
|
|
324
|
+
width={tooltipSize.width}
|
|
325
|
+
height={tooltipSize.height}
|
|
326
|
+
content={engine.interactionConfig.inspect?.content}
|
|
327
|
+
interactive={engine.interactionConfig.inspect?.contentMode ===
|
|
328
|
+
"interactive"}
|
|
329
|
+
docked={isTooltipDocked({
|
|
330
|
+
inspectionState: currentInspection.state,
|
|
331
|
+
widthPx: runtime.resolvedWidth,
|
|
332
|
+
})}
|
|
333
|
+
motion={!presence.sessionActive() && !presence.reducedMotion()
|
|
334
|
+
? "enter"
|
|
335
|
+
: "none"}
|
|
336
|
+
labs={engine.assembled?.labs ?? null}
|
|
337
|
+
fontSizePx={currentModel.scene.theme.fontSize}
|
|
338
|
+
pin={engine.interactionConfig.inspect?.pin ?? true}
|
|
339
|
+
tooltipBorder={currentModel.scene.theme.tooltipBorder}
|
|
340
|
+
axisFormatters={currentModel.axisFormatters}
|
|
341
|
+
tooltipTotal={engine.interactionConfig.inspect?.tooltipTotal ??
|
|
342
|
+
"auto"}
|
|
343
|
+
onenter={() => (engine.tooltipHovered = true)}
|
|
344
|
+
onleave={() => {
|
|
345
|
+
engine.tooltipHovered = false;
|
|
346
|
+
if (inspectionState.inspection?.state !== "pinned")
|
|
347
|
+
inspectionState.setInspection(null, "pointer");
|
|
348
|
+
presence.queueSync();
|
|
349
|
+
}}
|
|
350
|
+
onclose={(source) => {
|
|
351
|
+
presence.markExplicitClose();
|
|
352
|
+
inspectionState.closeInspection(source, true);
|
|
353
|
+
presence.queueSync();
|
|
354
|
+
}}
|
|
355
|
+
/>
|
|
356
|
+
{/if}
|
|
357
|
+
{#if presence.ghost !== null}
|
|
358
|
+
{@const ghostSize = tooltipViewportSize({
|
|
359
|
+
sceneWidth: currentModel.scene.width,
|
|
360
|
+
sceneHeight: currentModel.scene.height,
|
|
361
|
+
clientWidth: root?.clientWidth,
|
|
362
|
+
clientHeight: root?.clientHeight,
|
|
363
|
+
})}
|
|
364
|
+
{@const ghostGenerationAtMount = presence.ghostEpoch}
|
|
365
|
+
<Tooltip
|
|
366
|
+
inspection={presence.ghost}
|
|
367
|
+
width={ghostSize.width}
|
|
368
|
+
height={ghostSize.height}
|
|
369
|
+
content={engine.interactionConfig.inspect?.content}
|
|
370
|
+
docked={isTooltipDocked({
|
|
371
|
+
inspectionState: presence.ghost.state,
|
|
372
|
+
widthPx: runtime.resolvedWidth,
|
|
373
|
+
})}
|
|
374
|
+
motion="exit"
|
|
375
|
+
labs={engine.assembled?.labs ?? null}
|
|
376
|
+
fontSizePx={currentModel.scene.theme.fontSize}
|
|
377
|
+
pin={engine.interactionConfig.inspect?.pin ?? true}
|
|
378
|
+
tooltipBorder={currentModel.scene.theme.tooltipBorder}
|
|
379
|
+
axisFormatters={currentModel.axisFormatters}
|
|
380
|
+
tooltipTotal={engine.interactionConfig.inspect?.tooltipTotal ??
|
|
381
|
+
"auto"}
|
|
382
|
+
onexited={() => presence.clearGhost(ghostGenerationAtMount)}
|
|
383
|
+
/>
|
|
384
|
+
{/if}
|
|
385
|
+
{/if}
|
|
386
|
+
<!-- Status chrome after capture/tooltip; ids stay plot-scoped for
|
|
387
|
+
aria-describedby. Parent reduced-motion rule does not match child
|
|
388
|
+
nodes (chrome has no transitions — intentional no-op). -->
|
|
389
|
+
<StatusChrome
|
|
390
|
+
{plotId}
|
|
391
|
+
showInstructions={engine.surfaceInteractive}
|
|
392
|
+
description={surfaceState.surfaceDescription}
|
|
393
|
+
activeDatumLabel={chromeState.datumLabel(
|
|
394
|
+
inspectionState.inspection?.focus.row ?? null,
|
|
395
|
+
)}
|
|
396
|
+
showAreaInstruction={engine.surfaceInteractive &&
|
|
397
|
+
surfaceState.areaAwaitingSecond}
|
|
398
|
+
showLiveRegion={shouldRenderInteractionLiveRegion({
|
|
399
|
+
surfaceInteractive: engine.surfaceInteractive,
|
|
400
|
+
legendFocusEnabled: engine.legendFocusEnabled,
|
|
401
|
+
legendFilterEnabled: legendFilterState.options !== null,
|
|
402
|
+
})}
|
|
403
|
+
liveText={resolveInteractionLiveText({
|
|
404
|
+
announcement: announcer.text,
|
|
405
|
+
model: currentModel,
|
|
406
|
+
inspection: inspectionState.inspection,
|
|
407
|
+
})}
|
|
408
|
+
emptyPlot={chromeState.emptyPlot}
|
|
409
|
+
capabilityStatus={chromeState.capabilityStatus}
|
|
410
|
+
/>
|
|
411
|
+
{/if}
|
|
412
|
+
</div>
|
|
413
|
+
|
|
414
|
+
<style>
|
|
415
|
+
.gg-precise-bounds {
|
|
416
|
+
position: absolute;
|
|
417
|
+
/* Above the transparent legend hit targets (z-index 5): the open editor
|
|
418
|
+
must be the top interactive layer or invisible legend buttons
|
|
419
|
+
intercept pointer input meant for its fields. */
|
|
420
|
+
z-index: 6;
|
|
421
|
+
top: 8px;
|
|
422
|
+
left: 8px;
|
|
423
|
+
right: 8px;
|
|
424
|
+
max-width: 560px;
|
|
425
|
+
padding: 8px;
|
|
426
|
+
background: var(--gg-panelBg, var(--gg-theme-panelBg, Canvas));
|
|
427
|
+
box-shadow: 0 2px 12px color-mix(in srgb, currentColor 18%, transparent);
|
|
428
|
+
pointer-events: auto;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
.gg-plot-root {
|
|
432
|
+
position: relative;
|
|
433
|
+
display: inline-block;
|
|
434
|
+
line-height: 0;
|
|
435
|
+
max-width: 100%;
|
|
436
|
+
container: gg-plot / inline-size;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
.gg-container-width {
|
|
440
|
+
display: block;
|
|
441
|
+
width: 100%;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
/* Keep controls in their own row so they never obscure titles, legends,
|
|
445
|
+
marks, or axes. The plot retains its exact scene coordinate system. */
|
|
446
|
+
.gg-with-tool-rail {
|
|
447
|
+
margin-top: 52px;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
/* Clear sits top-right inside the scene (absolute) — no layout margin.
|
|
451
|
+
Filters still need a bottom row when present. */
|
|
452
|
+
.gg-with-legend-filters {
|
|
453
|
+
margin-bottom: 58px;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
.gg-with-docked-tooltip {
|
|
457
|
+
margin-bottom: 260px;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
/* Strata: full-size positioned siblings; document order = paint order
|
|
461
|
+
(no z-index anywhere — decision 0006). All inert; the capture layer
|
|
462
|
+
owns pointer events. Parent-owned so extracted overlay SVGs with
|
|
463
|
+
class gg-stratum stay absolutely positioned. */
|
|
464
|
+
.gg-plot-root :global(.gg-stratum) {
|
|
465
|
+
position: absolute;
|
|
466
|
+
inset: 0;
|
|
467
|
+
pointer-events: none;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
@container gg-plot (max-width: 559px) {
|
|
471
|
+
.gg-with-tool-rail {
|
|
472
|
+
margin-top: 96px;
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
/* ResizeObserver-backed fallback for engines that do not apply a query to
|
|
477
|
+
descendants of a component-owned named container during hydration. */
|
|
478
|
+
.gg-narrow-tools.gg-with-tool-rail {
|
|
479
|
+
margin-top: 96px;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
@media (prefers-reduced-motion: reduce) {
|
|
483
|
+
/* :global so the policy reaches extracted child components (mark strata,
|
|
484
|
+
capture surface, status chrome) whose nodes are outside this scope. */
|
|
485
|
+
.gg-plot-root :global(*) {
|
|
486
|
+
scroll-behavior: auto;
|
|
487
|
+
transition: none !important;
|
|
488
|
+
animation: none !important;
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
</style>
|