@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,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolved target ownership (#1080).
|
|
3
|
+
*
|
|
4
|
+
* One module owns panel-scoped nearest (#787), the per-intent distance policy,
|
|
5
|
+
* and the candidate match that hover / tap / point-select all need. Callers
|
|
6
|
+
* stop each carrying their own `panelAtOrOnly().nearest()` and maxDistance.
|
|
7
|
+
*
|
|
8
|
+
* Does not own hit geometry (core) or the inspect pin lifecycle. Semantic
|
|
9
|
+
* keys stay on the host (`candidateSemanticKeys`). Reducer inspect payloads
|
|
10
|
+
* are built from CandidateMatch / CandidateFacts in inspection/frame.ts.
|
|
11
|
+
*/
|
|
12
|
+
import { panelBoundsFrom } from "../scene/geometry.js";
|
|
13
|
+
/**
|
|
14
|
+
* Nearest-candidate radius (plot px) for point-tool click.
|
|
15
|
+
* Deliberate constant — distinct from inspect.maxDistance (default also 24,
|
|
16
|
+
* but hover/tap read config; point-select does not).
|
|
17
|
+
*/
|
|
18
|
+
export const POINT_SELECT_NEAREST_MAX_DISTANCE_PX = 24;
|
|
19
|
+
/**
|
|
20
|
+
* Intent → nearest search params.
|
|
21
|
+
*
|
|
22
|
+
* | intent | mode | maxDistance |
|
|
23
|
+
* |--------------|-------------------|--------------------------------------|
|
|
24
|
+
* | hover | inspect.mode | inspect.maxDistance |
|
|
25
|
+
* | tap | inspect.mode | inspect.maxDistance |
|
|
26
|
+
* | point-select | always `"xy"` | `POINT_SELECT_NEAREST_MAX_DISTANCE_PX` |
|
|
27
|
+
*
|
|
28
|
+
* Returns null when hover/tap has no inspect snapshot (nothing to resolve).
|
|
29
|
+
*/
|
|
30
|
+
export function targetSearch(intent, inspect) {
|
|
31
|
+
if (intent === "point-select") {
|
|
32
|
+
return {
|
|
33
|
+
mode: "xy",
|
|
34
|
+
maxDistance: POINT_SELECT_NEAREST_MAX_DISTANCE_PX,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
if (inspect === null)
|
|
38
|
+
return null;
|
|
39
|
+
return {
|
|
40
|
+
mode: inspect.mode,
|
|
41
|
+
maxDistance: inspect.maxDistance,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Panel-scoped nearest for one intent. Sole call site of
|
|
46
|
+
* `panelAtOrOnly().nearest()` for hover / tap / point-select.
|
|
47
|
+
*/
|
|
48
|
+
export function resolveTarget(input) {
|
|
49
|
+
const search = input.search ?? targetSearch(input.intent, input.inspect);
|
|
50
|
+
if (search === null)
|
|
51
|
+
return null;
|
|
52
|
+
const panel = input.model.viewport.panelAtOrOnly(input.point);
|
|
53
|
+
if (panel === null)
|
|
54
|
+
return null;
|
|
55
|
+
const match = panel.nearest(input.point, search);
|
|
56
|
+
if (match === null)
|
|
57
|
+
return null;
|
|
58
|
+
return {
|
|
59
|
+
epoch: match.epoch,
|
|
60
|
+
candidateId: match.id,
|
|
61
|
+
panelId: match.panelId,
|
|
62
|
+
point: { x: match.x, y: match.y },
|
|
63
|
+
mode: match.mode,
|
|
64
|
+
distance: match.distance,
|
|
65
|
+
match,
|
|
66
|
+
panel: { id: panel.id, ...panelBoundsFrom(panel.bounds) },
|
|
67
|
+
};
|
|
68
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-module interaction transition apply (issue #627).
|
|
3
|
+
*
|
|
4
|
+
* Pure decision tables live in inspection/teardown, surface/brush-finish, etc.
|
|
5
|
+
* This module owns only multi-module *side-effect application* after a plan is
|
|
6
|
+
* decided — not a method-forwarding port over sibling controllers.
|
|
7
|
+
*/
|
|
8
|
+
import type { InteractionTool } from "./interaction.js";
|
|
9
|
+
import type { InspectionDismissPlan } from "../inspection/teardown.js";
|
|
10
|
+
/** Surface ops required when applying an inspection dismiss plan across modules. */
|
|
11
|
+
export type DismissSurfaceSink = {
|
|
12
|
+
clearBrush(): void;
|
|
13
|
+
chooseTool(next: InteractionTool): void;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Apply the cross-module tail of `planInspectionDismiss`.
|
|
17
|
+
* Local inspection clears stay in InspectionState; brush/tool live on surface.
|
|
18
|
+
*/
|
|
19
|
+
export declare function applyInspectionDismissSideEffects(plan: InspectionDismissPlan, surface: DismissSurfaceSink): void;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Apply the cross-module tail of `planInspectionDismiss`.
|
|
3
|
+
* Local inspection clears stay in InspectionState; brush/tool live on surface.
|
|
4
|
+
*/
|
|
5
|
+
export function applyInspectionDismissSideEffects(plan, surface) {
|
|
6
|
+
if (plan.clearBrush)
|
|
7
|
+
surface.clearBrush();
|
|
8
|
+
if (plan.returnToInspect)
|
|
9
|
+
surface.chooseTool("inspect");
|
|
10
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ambiguous-wiring advisories (ADR 0013 audit): prop combinations that
|
|
3
|
+
* silently do nothing.
|
|
4
|
+
*
|
|
5
|
+
* Pure collection — assembly reads current prop snapshots into
|
|
6
|
+
* {@link collectWiringDiagnostics} from a `$derived`. Delivery (once per
|
|
7
|
+
* code:prop per plot instance) stays in assembly.
|
|
8
|
+
*/
|
|
9
|
+
import { type InteractionDiagnostic } from "./interaction-diagnostics.js";
|
|
10
|
+
/** Handler prop → matching capability prop. */
|
|
11
|
+
declare const HANDLER_CAPABILITY_PAIRS: readonly [readonly ["oninspect", "inspect"], readonly ["onselect", "select"], readonly ["onzoom", "zoom"], readonly ["onlegendfocus", "legendFocus"], readonly ["onlegendfilter", "legendFilter"]];
|
|
12
|
+
type WiringHandlerName = (typeof HANDLER_CAPABILITY_PAIRS)[number][0];
|
|
13
|
+
type WiringCapabilityName = (typeof HANDLER_CAPABILITY_PAIRS)[number][1];
|
|
14
|
+
/**
|
|
15
|
+
* Full handler/capability bags (not Partial): missing keys would silently
|
|
16
|
+
* drop advisories when the pair table grows. Call sites must list every
|
|
17
|
+
* entry from HANDLER_CAPABILITY_PAIRS.
|
|
18
|
+
*/
|
|
19
|
+
export type WiringDiagnosticInput = {
|
|
20
|
+
readonly interactionScope: unknown;
|
|
21
|
+
readonly interaction: unknown;
|
|
22
|
+
/** Present handlers only need defined vs undefined; values are not inspected. */
|
|
23
|
+
readonly handlers: Record<WiringHandlerName, unknown>;
|
|
24
|
+
/** Capability "requested" means not undefined and not false. */
|
|
25
|
+
readonly capabilities: Record<WiringCapabilityName, unknown>;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Collect scope-without-controller and handler-without-capability advisories
|
|
29
|
+
* from a plain snapshot. Re-run on every prop recompute so late-bound handlers
|
|
30
|
+
* still advise (assembly's once-per-code:prop Set handles dedup).
|
|
31
|
+
*/
|
|
32
|
+
export declare function collectWiringDiagnostics(input: WiringDiagnosticInput): InteractionDiagnostic[];
|
|
33
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ambiguous-wiring advisories (ADR 0013 audit): prop combinations that
|
|
3
|
+
* silently do nothing.
|
|
4
|
+
*
|
|
5
|
+
* Pure collection — assembly reads current prop snapshots into
|
|
6
|
+
* {@link collectWiringDiagnostics} from a `$derived`. Delivery (once per
|
|
7
|
+
* code:prop per plot instance) stays in assembly.
|
|
8
|
+
*/
|
|
9
|
+
import { INTERACTION_DIAGNOSTIC_CATALOG, } from "./interaction-diagnostics.js";
|
|
10
|
+
/** Handler prop → matching capability prop. */
|
|
11
|
+
const HANDLER_CAPABILITY_PAIRS = [
|
|
12
|
+
["oninspect", "inspect"],
|
|
13
|
+
["onselect", "select"],
|
|
14
|
+
["onzoom", "zoom"],
|
|
15
|
+
["onlegendfocus", "legendFocus"],
|
|
16
|
+
["onlegendfilter", "legendFilter"],
|
|
17
|
+
];
|
|
18
|
+
/**
|
|
19
|
+
* Collect scope-without-controller and handler-without-capability advisories
|
|
20
|
+
* from a plain snapshot. Re-run on every prop recompute so late-bound handlers
|
|
21
|
+
* still advise (assembly's once-per-code:prop Set handles dedup).
|
|
22
|
+
*/
|
|
23
|
+
export function collectWiringDiagnostics(input) {
|
|
24
|
+
const list = [];
|
|
25
|
+
if (input.interactionScope !== undefined && input.interaction === undefined) {
|
|
26
|
+
list.push({ ...INTERACTION_DIAGNOSTIC_CATALOG.INTERACTION_SCOPE_WITHOUT_CONTROLLER });
|
|
27
|
+
}
|
|
28
|
+
for (const [handler, capability] of HANDLER_CAPABILITY_PAIRS) {
|
|
29
|
+
const handlerValue = input.handlers[handler];
|
|
30
|
+
if (handlerValue === undefined)
|
|
31
|
+
continue;
|
|
32
|
+
// Capability "requested" (any value but undefined/false) is enough:
|
|
33
|
+
// requested-but-degraded configs already get their own diagnostics
|
|
34
|
+
// (requires-key, faceted zoom, ...) — never advise twice for one
|
|
35
|
+
// mistake.
|
|
36
|
+
const capabilityValue = input.capabilities[capability];
|
|
37
|
+
if (capabilityValue !== undefined && capabilityValue !== false)
|
|
38
|
+
continue;
|
|
39
|
+
list.push({
|
|
40
|
+
...INTERACTION_DIAGNOSTIC_CATALOG.INTERACTION_HANDLER_WITHOUT_CAPABILITY,
|
|
41
|
+
prop: handler,
|
|
42
|
+
actual: capability,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return list;
|
|
46
|
+
}
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { onMount, tick } from "svelte";
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
formatBoundsDraft,
|
|
6
|
+
validateBoundsDraft,
|
|
7
|
+
type BoundsDraftErrors,
|
|
8
|
+
type BoundsEditorInput,
|
|
9
|
+
type BoundsInputSource,
|
|
10
|
+
type PreciseBoundsApplyEvent,
|
|
11
|
+
} from "./bounds-editor.js";
|
|
12
|
+
|
|
13
|
+
const {
|
|
14
|
+
input,
|
|
15
|
+
onapply,
|
|
16
|
+
oncancel = () => {},
|
|
17
|
+
returnFocus = null,
|
|
18
|
+
}: {
|
|
19
|
+
input: BoundsEditorInput;
|
|
20
|
+
onapply: (event: PreciseBoundsApplyEvent) => void;
|
|
21
|
+
oncancel?: () => void;
|
|
22
|
+
returnFocus?: HTMLElement | null;
|
|
23
|
+
} = $props();
|
|
24
|
+
|
|
25
|
+
const uid = $props.id();
|
|
26
|
+
const initial = (() => formatBoundsDraft(input))();
|
|
27
|
+
let lowerDraft = $state(initial.lower);
|
|
28
|
+
let upperDraft = $state(initial.upper);
|
|
29
|
+
let errors = $state<BoundsDraftErrors>({});
|
|
30
|
+
let lowerControl = $state<HTMLInputElement | HTMLSelectElement | null>(null);
|
|
31
|
+
let upperControl = $state<HTMLInputElement | HTMLSelectElement | null>(null);
|
|
32
|
+
let finished = false;
|
|
33
|
+
let pendingInputSource: BoundsInputSource = "keyboard";
|
|
34
|
+
|
|
35
|
+
const axisName = $derived(input.axis === "x" ? "horizontal" : "vertical");
|
|
36
|
+
const actionName = $derived(input.action === "select" ? "selection" : "zoom");
|
|
37
|
+
const fieldsetLabel = $derived(`Edit ${axisName} ${actionName} bounds`);
|
|
38
|
+
const hint = $derived(
|
|
39
|
+
input.scale === "time"
|
|
40
|
+
? input.temporalKind === "monthDay"
|
|
41
|
+
? "Enter a month-day as MM-DD (for example 04-01)."
|
|
42
|
+
: "Enter an ISO 8601 date, or a date-time with Z or an explicit offset."
|
|
43
|
+
: input.scale === "band"
|
|
44
|
+
? "Endpoints include both selected categories."
|
|
45
|
+
: input.transform === "log10"
|
|
46
|
+
? "Enter positive values in ascending domain order."
|
|
47
|
+
: input.transform === "sqrt"
|
|
48
|
+
? "Enter zero or positive values in ascending domain order."
|
|
49
|
+
: "Enter values in ascending domain order.",
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
// A parent may switch axes or replace the committed interval while keeping
|
|
53
|
+
// the inline editor mounted. Only prop changes reset drafts; typing itself
|
|
54
|
+
// does not feed back into this effect.
|
|
55
|
+
$effect(() => {
|
|
56
|
+
const draft = formatBoundsDraft(input);
|
|
57
|
+
lowerDraft = draft.lower;
|
|
58
|
+
upperDraft = draft.upper;
|
|
59
|
+
errors = {};
|
|
60
|
+
finished = false;
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
function describedBy(field: "lower" | "upper"): string {
|
|
64
|
+
return `${uid}-hint${errors[field] === undefined ? "" : ` ${uid}-${field}-error`}`;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function restoreFocus(): void {
|
|
68
|
+
if (returnFocus === null) return;
|
|
69
|
+
returnFocus.focus();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function resetDraft(): void {
|
|
73
|
+
const draft = formatBoundsDraft(input);
|
|
74
|
+
lowerDraft = draft.lower;
|
|
75
|
+
upperDraft = draft.upper;
|
|
76
|
+
errors = {};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
async function apply(): Promise<void> {
|
|
80
|
+
const inputSource = pendingInputSource;
|
|
81
|
+
pendingInputSource = "keyboard";
|
|
82
|
+
const result = validateBoundsDraft(
|
|
83
|
+
input,
|
|
84
|
+
lowerDraft,
|
|
85
|
+
upperDraft,
|
|
86
|
+
inputSource,
|
|
87
|
+
);
|
|
88
|
+
if (!result.ok) {
|
|
89
|
+
errors = result.errors;
|
|
90
|
+
await tick();
|
|
91
|
+
(errors.lower === undefined ? upperControl : lowerControl)?.focus();
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
errors = {};
|
|
95
|
+
finished = true;
|
|
96
|
+
onapply(result.event);
|
|
97
|
+
restoreFocus();
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function cancel(): void {
|
|
101
|
+
resetDraft();
|
|
102
|
+
finished = true;
|
|
103
|
+
oncancel();
|
|
104
|
+
restoreFocus();
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function keydown(event: KeyboardEvent): void {
|
|
108
|
+
if (event.key !== "Escape") return;
|
|
109
|
+
event.preventDefault();
|
|
110
|
+
event.stopPropagation();
|
|
111
|
+
cancel();
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function escapeKey(node: HTMLElement): { destroy: () => void } {
|
|
115
|
+
node.addEventListener("keydown", keydown);
|
|
116
|
+
return { destroy: () => node.removeEventListener("keydown", keydown) };
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
onMount(() => {
|
|
120
|
+
void tick().then(() => {
|
|
121
|
+
if (!finished) lowerControl?.focus();
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
</script>
|
|
125
|
+
|
|
126
|
+
<form
|
|
127
|
+
class="gg-bounds-editor"
|
|
128
|
+
onsubmit={(event) => {
|
|
129
|
+
event.preventDefault();
|
|
130
|
+
void apply();
|
|
131
|
+
}}
|
|
132
|
+
>
|
|
133
|
+
<fieldset aria-label={fieldsetLabel} use:escapeKey>
|
|
134
|
+
<legend>Precise {axisName} bounds</legend>
|
|
135
|
+
<p class="gg-bounds-hint" id={`${uid}-hint`}>{hint}</p>
|
|
136
|
+
<div class="gg-bounds-fields">
|
|
137
|
+
<div class="gg-bounds-field">
|
|
138
|
+
<label for={`${uid}-lower`}>Lower bound</label>
|
|
139
|
+
{#if input.scale === "band"}
|
|
140
|
+
<select
|
|
141
|
+
id={`${uid}-lower`}
|
|
142
|
+
bind:this={lowerControl}
|
|
143
|
+
value={lowerDraft}
|
|
144
|
+
oninput={(event) => {
|
|
145
|
+
lowerDraft = event.currentTarget.value;
|
|
146
|
+
}}
|
|
147
|
+
aria-invalid={errors.lower === undefined ? undefined : "true"}
|
|
148
|
+
aria-describedby={describedBy("lower")}
|
|
149
|
+
>
|
|
150
|
+
{#each input.categories as category, index}
|
|
151
|
+
<option value={String(index)}>{category.label}</option>
|
|
152
|
+
{/each}
|
|
153
|
+
</select>
|
|
154
|
+
{:else}
|
|
155
|
+
<input
|
|
156
|
+
id={`${uid}-lower`}
|
|
157
|
+
bind:this={lowerControl}
|
|
158
|
+
value={lowerDraft}
|
|
159
|
+
oninput={(event) => {
|
|
160
|
+
lowerDraft = event.currentTarget.value;
|
|
161
|
+
}}
|
|
162
|
+
type={input.scale === "time" ? "text" : "number"}
|
|
163
|
+
inputmode={input.scale === "time" ? undefined : "decimal"}
|
|
164
|
+
step={input.scale === "linear" ? (input.step ?? "any") : undefined}
|
|
165
|
+
autocomplete="off"
|
|
166
|
+
aria-invalid={errors.lower === undefined ? undefined : "true"}
|
|
167
|
+
aria-describedby={describedBy("lower")}
|
|
168
|
+
/>
|
|
169
|
+
{/if}
|
|
170
|
+
{#if errors.lower !== undefined}
|
|
171
|
+
<p class="gg-bounds-error" id={`${uid}-lower-error`} role="alert">
|
|
172
|
+
{errors.lower}
|
|
173
|
+
</p>
|
|
174
|
+
{/if}
|
|
175
|
+
</div>
|
|
176
|
+
<div class="gg-bounds-field">
|
|
177
|
+
<label for={`${uid}-upper`}>Upper bound</label>
|
|
178
|
+
{#if input.scale === "band"}
|
|
179
|
+
<select
|
|
180
|
+
id={`${uid}-upper`}
|
|
181
|
+
bind:this={upperControl}
|
|
182
|
+
value={upperDraft}
|
|
183
|
+
oninput={(event) => {
|
|
184
|
+
upperDraft = event.currentTarget.value;
|
|
185
|
+
}}
|
|
186
|
+
aria-invalid={errors.upper === undefined ? undefined : "true"}
|
|
187
|
+
aria-describedby={describedBy("upper")}
|
|
188
|
+
>
|
|
189
|
+
{#each input.categories as category, index}
|
|
190
|
+
<option value={String(index)}>{category.label}</option>
|
|
191
|
+
{/each}
|
|
192
|
+
</select>
|
|
193
|
+
{:else}
|
|
194
|
+
<input
|
|
195
|
+
id={`${uid}-upper`}
|
|
196
|
+
bind:this={upperControl}
|
|
197
|
+
value={upperDraft}
|
|
198
|
+
oninput={(event) => {
|
|
199
|
+
upperDraft = event.currentTarget.value;
|
|
200
|
+
}}
|
|
201
|
+
type={input.scale === "time" ? "text" : "number"}
|
|
202
|
+
inputmode={input.scale === "time" ? undefined : "decimal"}
|
|
203
|
+
step={input.scale === "linear" ? (input.step ?? "any") : undefined}
|
|
204
|
+
autocomplete="off"
|
|
205
|
+
aria-invalid={errors.upper === undefined ? undefined : "true"}
|
|
206
|
+
aria-describedby={describedBy("upper")}
|
|
207
|
+
/>
|
|
208
|
+
{/if}
|
|
209
|
+
{#if errors.upper !== undefined}
|
|
210
|
+
<p class="gg-bounds-error" id={`${uid}-upper-error`} role="alert">
|
|
211
|
+
{errors.upper}
|
|
212
|
+
</p>
|
|
213
|
+
{/if}
|
|
214
|
+
</div>
|
|
215
|
+
</div>
|
|
216
|
+
<div class="gg-bounds-actions">
|
|
217
|
+
<button
|
|
218
|
+
type="submit"
|
|
219
|
+
onpointerdown={(event) => {
|
|
220
|
+
pendingInputSource =
|
|
221
|
+
event.pointerType === "touch" ? "touch" : "pointer";
|
|
222
|
+
}}
|
|
223
|
+
onpointercancel={() => (pendingInputSource = "keyboard")}>Apply</button
|
|
224
|
+
>
|
|
225
|
+
<button type="button" onclick={cancel}>Cancel</button>
|
|
226
|
+
</div>
|
|
227
|
+
</fieldset>
|
|
228
|
+
</form>
|
|
229
|
+
|
|
230
|
+
<style>
|
|
231
|
+
.gg-bounds-editor {
|
|
232
|
+
color: var(--gg-text, var(--gg-theme-text, currentColor));
|
|
233
|
+
font: inherit;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
.gg-bounds-editor fieldset {
|
|
237
|
+
min-width: 0;
|
|
238
|
+
margin: 0;
|
|
239
|
+
border: 1px solid
|
|
240
|
+
var(--gg-panelBorder, var(--gg-theme-panelBorder, currentColor));
|
|
241
|
+
padding: 12px;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
.gg-bounds-editor legend {
|
|
245
|
+
padding: 0 4px;
|
|
246
|
+
font-weight: 600;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.gg-bounds-hint,
|
|
250
|
+
.gg-bounds-error {
|
|
251
|
+
margin: 0 0 8px;
|
|
252
|
+
font-size: 0.875rem;
|
|
253
|
+
line-height: 1.4;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
.gg-bounds-error {
|
|
257
|
+
margin: 4px 0 0;
|
|
258
|
+
color: var(--gg-error, var(--gg-theme-error, #a40000));
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
.gg-bounds-fields {
|
|
262
|
+
display: grid;
|
|
263
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
264
|
+
gap: 12px;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
.gg-bounds-field {
|
|
268
|
+
display: grid;
|
|
269
|
+
align-content: start;
|
|
270
|
+
gap: 4px;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
.gg-bounds-field label {
|
|
274
|
+
font-weight: 500;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
.gg-bounds-field input,
|
|
278
|
+
.gg-bounds-field select,
|
|
279
|
+
.gg-bounds-actions button {
|
|
280
|
+
box-sizing: border-box;
|
|
281
|
+
min-width: 44px;
|
|
282
|
+
min-height: 44px;
|
|
283
|
+
border: 1px solid
|
|
284
|
+
var(--gg-panelBorder, var(--gg-theme-panelBorder, currentColor));
|
|
285
|
+
border-radius: 2px;
|
|
286
|
+
padding: 8px 10px;
|
|
287
|
+
background: var(--gg-panelBg, var(--gg-theme-panelBg, Canvas));
|
|
288
|
+
color: inherit;
|
|
289
|
+
font: inherit;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
.gg-bounds-field input:focus-visible,
|
|
293
|
+
.gg-bounds-field select:focus-visible,
|
|
294
|
+
.gg-bounds-actions button:focus-visible {
|
|
295
|
+
outline: 2px solid var(--gg-focusRing, var(--gg-theme-focusRing, Highlight));
|
|
296
|
+
outline-offset: 2px;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
.gg-bounds-actions {
|
|
300
|
+
display: flex;
|
|
301
|
+
justify-content: flex-end;
|
|
302
|
+
gap: 8px;
|
|
303
|
+
margin-top: 12px;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
.gg-bounds-actions button {
|
|
307
|
+
cursor: pointer;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
@media (max-width: 359px) {
|
|
311
|
+
.gg-bounds-fields {
|
|
312
|
+
grid-template-columns: 1fr;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
.gg-bounds-actions button {
|
|
316
|
+
flex: 1;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
@media (forced-colors: active) {
|
|
321
|
+
.gg-bounds-editor fieldset,
|
|
322
|
+
.gg-bounds-field input,
|
|
323
|
+
.gg-bounds-field select,
|
|
324
|
+
.gg-bounds-actions button {
|
|
325
|
+
border-color: CanvasText;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
.gg-bounds-error {
|
|
329
|
+
color: MarkText;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
</style>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type BoundsEditorInput, type PreciseBoundsApplyEvent } from "./bounds-editor.js";
|
|
2
|
+
type $$ComponentProps = {
|
|
3
|
+
input: BoundsEditorInput;
|
|
4
|
+
onapply: (event: PreciseBoundsApplyEvent) => void;
|
|
5
|
+
oncancel?: () => void;
|
|
6
|
+
returnFocus?: HTMLElement | null;
|
|
7
|
+
};
|
|
8
|
+
declare const BoundsEditor: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
9
|
+
type BoundsEditor = ReturnType<typeof BoundsEditor>;
|
|
10
|
+
export default BoundsEditor;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { type BoundsInputSource, type BoundsEditorInput, type PreciseBoundsApplyEvent, type BoundsDraftErrors, formatBoundsDraft, validateBoundsDraft, } from "@ggts-sh/core/interaction";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { type IntervalConsumptionCandidate, consumeIntervalKeys, sameIntervalRecord, nextLocalIntervalRecords, recomputePanelIntervalProjection, type PanelIntervalLookupCandidate, recomputePanelIntervalFromLookup, } from "@ggts-sh/core/interaction";
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bounds-editor state machine extracted from interval-state for S5.
|
|
3
|
+
*
|
|
4
|
+
* Owns the boundsEditor + boundsReturnFocus rune state, the boundsEditorInput
|
|
5
|
+
* derivation, the reactive cancel effect, and the open/cancel actions. The
|
|
6
|
+
* committed interval state, scoped store, interval-reconcile effect, and
|
|
7
|
+
* applyPreciseBounds stay in interval-state — applyPreciseBounds drives this
|
|
8
|
+
* module through the live `boundsEditor` getter + `cancel()`.
|
|
9
|
+
*
|
|
10
|
+
* Deps are LIVE getters — never snapshots. The factory is constructed
|
|
11
|
+
* synchronously during component init so the cancel effect registers at the
|
|
12
|
+
* derivation's original position (after the interval-reconcile effect).
|
|
13
|
+
*/
|
|
14
|
+
import type { RenderModel, ScenePanel } from "@ggts-sh/core";
|
|
15
|
+
import type { PlotInteractionInterval } from "../interaction/interaction.js";
|
|
16
|
+
import type { ContinuousZoomDomains } from "../scene/geometry.js";
|
|
17
|
+
import type { BoundsEditorInput } from "./bounds-editor.js";
|
|
18
|
+
type IntervalBoundsEditorRef = {
|
|
19
|
+
action: "select" | "zoom";
|
|
20
|
+
axis: "x" | "y";
|
|
21
|
+
panelId?: string;
|
|
22
|
+
panelLabel?: string;
|
|
23
|
+
};
|
|
24
|
+
export type IntervalBoundsEditorDeps = {
|
|
25
|
+
/** Trained render model (null pre-model). */
|
|
26
|
+
readonly model: () => RenderModel | null;
|
|
27
|
+
/** Stable recovery target for reactive cancellation. */
|
|
28
|
+
readonly captureSurface: () => HTMLDivElement | null;
|
|
29
|
+
/** Stable announcer sink. */
|
|
30
|
+
readonly announce: (message: string) => void;
|
|
31
|
+
/** Zoom controller read path for the zoom branch (live getter). */
|
|
32
|
+
readonly effectiveZoomDomains: () => ContinuousZoomDomains | null;
|
|
33
|
+
/** Owning controller's current interval record (live getter). */
|
|
34
|
+
readonly currentIntervalRecord: () => PlotInteractionInterval<PropertyKey> | null;
|
|
35
|
+
readonly currentIntervalPanel: () => ScenePanel | undefined;
|
|
36
|
+
/** Handler-only inspection fallback target for the select branch. */
|
|
37
|
+
readonly inspectionPanel: () => Readonly<{
|
|
38
|
+
id: string;
|
|
39
|
+
}> | null;
|
|
40
|
+
/** Panel label resolver owned by the interval controller. */
|
|
41
|
+
readonly intervalPanelLabel: (panel: ScenePanel) => string;
|
|
42
|
+
};
|
|
43
|
+
export type IntervalBoundsEditorState = {
|
|
44
|
+
/** Live getter — applyPreciseBounds reads `panelId` through it. */
|
|
45
|
+
readonly boundsEditor: Readonly<IntervalBoundsEditorRef> | null;
|
|
46
|
+
readonly boundsEditorInput: BoundsEditorInput | null;
|
|
47
|
+
readonly boundsReturnFocus: HTMLElement | null;
|
|
48
|
+
openBoundsEditor(action: "select" | "zoom", axis: "x" | "y", trigger: HTMLElement): void;
|
|
49
|
+
/** Close the editor without focus restoration (Apply paths cancel it). */
|
|
50
|
+
cancel(): void;
|
|
51
|
+
};
|
|
52
|
+
export declare function createIntervalBoundsEditor(deps: IntervalBoundsEditorDeps): IntervalBoundsEditorState;
|
|
53
|
+
export {};
|