@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,11 @@
|
|
|
1
|
+
export function buildSurfaceDescription(activeTool, inspectPinEnabled) {
|
|
2
|
+
if (activeTool === "select-area")
|
|
3
|
+
return "Press Enter or Space to set the first selection corner. Use Arrow keys to move the opposite corner; hold Shift for larger steps. Press Enter or Space to complete the selection. Press Escape to cancel.";
|
|
4
|
+
if (activeTool === "zoom-area")
|
|
5
|
+
return "Press Enter or Space to set the first zoom corner. Use Arrow keys to move the opposite corner; hold Shift for larger steps. Press Enter or Space to complete the zoom. Press Escape to cancel.";
|
|
6
|
+
if (activeTool === "point")
|
|
7
|
+
return "Use Arrow keys to inspect data. Press Enter or Space to toggle the focused point selection. Press Escape to dismiss.";
|
|
8
|
+
return inspectPinEnabled
|
|
9
|
+
? "Use Arrow keys to inspect data. Press Enter or Space to pin. Press Escape to dismiss."
|
|
10
|
+
: "Use Arrow keys to inspect data. Press Escape to dismiss.";
|
|
11
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Surface DOM/event handler implementation, extracted from
|
|
3
|
+
* surface-state.svelte.ts for S5 (plan §4).
|
|
4
|
+
*
|
|
5
|
+
* Receives LIVE accessors and actions only (reducer thunk, construction-time
|
|
6
|
+
* derived reads, brush-draft get/set, sibling controller ports, selection
|
|
7
|
+
* sinks) and reads them at event time — handlers never snapshot rune values:
|
|
8
|
+
* `activeTool()`, `brushing()`, and `getBrushRect()` are re-read whenever the
|
|
9
|
+
* event or rAF frame fires.
|
|
10
|
+
*
|
|
11
|
+
* Handler-private non-rune mutable state lives here (touch-inspect start/
|
|
12
|
+
* moved, queued area source, click-suppress deadline); the brush draft stays
|
|
13
|
+
* $state in surface-state, mutated only through `setBrushRect`. Tool
|
|
14
|
+
* selection (`chooseTool`) stays in surface-state and is injected as an
|
|
15
|
+
* action for the Escape dismissal side effects. Pure decision tables remain
|
|
16
|
+
* in pointer.ts, keyboard.ts, area-brush.ts, and capability.ts — this module
|
|
17
|
+
* owns the switches and side effects.
|
|
18
|
+
*/
|
|
19
|
+
import type { InteractionContext } from "../interaction/interaction-context.svelte.js";
|
|
20
|
+
import type { InteractionSource, InteractionTool } from "../interaction/interaction.js";
|
|
21
|
+
import type { BrushRect, InteractionReducer, SurfaceStateOptions } from "./surface-state.svelte.js";
|
|
22
|
+
/** Live ports for the handlers; sibling ports re-picked from SurfaceStateOptions. */
|
|
23
|
+
export type SurfaceHandlersPorts = {
|
|
24
|
+
/** Shared interaction context (live getters; handler-only invocation). */
|
|
25
|
+
readonly context: InteractionContext;
|
|
26
|
+
/** Reducer thunk — the reducer is constructed after this factory. */
|
|
27
|
+
readonly reducer: () => InteractionReducer;
|
|
28
|
+
/** Construction-time deriveds, read live at event time — never snapshotted. */
|
|
29
|
+
readonly activeTool: () => InteractionTool;
|
|
30
|
+
readonly brushing: () => boolean;
|
|
31
|
+
readonly areaAwaitingSecond: () => boolean;
|
|
32
|
+
/** Brush draft lives in surface-state $state; mutated only via this pair. */
|
|
33
|
+
readonly getBrushRect: () => BrushRect | null;
|
|
34
|
+
readonly setBrushRect: (rect: BrushRect | null) => void;
|
|
35
|
+
/** Tool selection action (owned by surface-state) for Escape side effects. */
|
|
36
|
+
readonly chooseTool: (next: InteractionTool) => void;
|
|
37
|
+
} & Pick<SurfaceStateOptions, "inspection" | "interval" | "zoom" | "emitSelection" | "togglePointKeys" | "pointSelectEnabled">;
|
|
38
|
+
export declare function createSurfaceHandlers(ports: SurfaceHandlersPorts): {
|
|
39
|
+
applyAreaMove: (point: Readonly<{
|
|
40
|
+
x: number;
|
|
41
|
+
y: number;
|
|
42
|
+
}>, source?: InteractionSource) => void;
|
|
43
|
+
clearTouchInspect: () => void;
|
|
44
|
+
onPointerMove: (event: PointerEvent) => void;
|
|
45
|
+
onPointerDown: (event: PointerEvent) => void;
|
|
46
|
+
onPointerUp: (event: PointerEvent) => void;
|
|
47
|
+
onPointerLeave: () => void;
|
|
48
|
+
onPointerCancel: () => void;
|
|
49
|
+
onLostPointerCapture: () => void;
|
|
50
|
+
onCaptureClick: (event: MouseEvent) => void;
|
|
51
|
+
onSurfaceKeyDown: (event: KeyboardEvent) => void;
|
|
52
|
+
onSurfaceBlur: (event: FocusEvent) => void;
|
|
53
|
+
};
|
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
import { resolveTarget } from "../interaction/target.js";
|
|
2
|
+
import { resolveSurfaceBlurAction } from "../inspection/teardown.js";
|
|
3
|
+
import { applyInspectionDismissSideEffects } from "../interaction/transition-owner.js";
|
|
4
|
+
import { buildIntervalSelectionFromScene, intervalQuerySceneFromModel, } from "../interval/query.js";
|
|
5
|
+
import { BRUSH_SECOND_CORNER_ANNOUNCEMENT } from "../assembly/labels.js";
|
|
6
|
+
import { normalizedRect, panelBoundsFrom } from "../scene/geometry.js";
|
|
7
|
+
import { advanceTouchInspectMoved, resolveCaptureClickAction, resolveLostPointerCaptureAction, resolvePointerDownAction, resolvePointerMoveAction, resolvePointerUpAction, shouldClearInspectionOnPointerLeave, TOUCH_INSPECT_CLICK_SUPPRESS_MS, } from "./pointer.js";
|
|
8
|
+
import { brushAtPoint, brushWithEnd } from "./area-brush.js";
|
|
9
|
+
import { resolveSurfaceKeyAction } from "./keyboard.js";
|
|
10
|
+
export function createSurfaceHandlers(ports) {
|
|
11
|
+
const { context } = ports;
|
|
12
|
+
const reducerOf = ports.reducer;
|
|
13
|
+
let queuedAreaSource = "pointer";
|
|
14
|
+
let touchInspectStart = null;
|
|
15
|
+
let touchInspectMoved = false;
|
|
16
|
+
let suppressClickUntil = 0;
|
|
17
|
+
function clearTouchInspect() {
|
|
18
|
+
touchInspectStart = null;
|
|
19
|
+
touchInspectMoved = false;
|
|
20
|
+
}
|
|
21
|
+
function plotPoint(event) {
|
|
22
|
+
const model = context.model();
|
|
23
|
+
if (model === null)
|
|
24
|
+
return { x: 0, y: 0 };
|
|
25
|
+
const target = event.currentTarget;
|
|
26
|
+
if (target === null)
|
|
27
|
+
return { x: 0, y: 0 };
|
|
28
|
+
return model.viewport.locate(event.clientX, event.clientY, target.getBoundingClientRect());
|
|
29
|
+
}
|
|
30
|
+
function panelAtPoint(point) {
|
|
31
|
+
return context.model()?.viewport.panelAtOrOnly(point) ?? null;
|
|
32
|
+
}
|
|
33
|
+
function onPointerMove(event) {
|
|
34
|
+
const p = plotPoint(event);
|
|
35
|
+
// Sticky threshold is pure; host only advances on touch + start set.
|
|
36
|
+
if (event.pointerType === "touch" && touchInspectStart !== null) {
|
|
37
|
+
touchInspectMoved = advanceTouchInspectMoved(touchInspectMoved, touchInspectStart, p);
|
|
38
|
+
}
|
|
39
|
+
// Decision table is pure (surface/pointer); this switch owns queues.
|
|
40
|
+
const action = resolvePointerMoveAction({
|
|
41
|
+
pointerType: event.pointerType,
|
|
42
|
+
activeTool: ports.activeTool(),
|
|
43
|
+
touchInspectMoved,
|
|
44
|
+
hasTouchInspectStart: touchInspectStart !== null,
|
|
45
|
+
brushing: ports.brushing(),
|
|
46
|
+
hasBrushDraft: ports.getBrushRect() !== null,
|
|
47
|
+
inspect: context.inspectConfig(),
|
|
48
|
+
});
|
|
49
|
+
switch (action.type) {
|
|
50
|
+
case "touch-inspect-drag-cancel":
|
|
51
|
+
ports.inspection().cancelPointerInspect({ pendingPinned: "preserve" });
|
|
52
|
+
return;
|
|
53
|
+
case "queue-area-move":
|
|
54
|
+
queuedAreaSource = action.source;
|
|
55
|
+
reducerOf().queuePointer({ type: "move-area", point: p });
|
|
56
|
+
return;
|
|
57
|
+
case "queue-inspect":
|
|
58
|
+
// Pure snapshot: no re-gate; inspection owns nearest lookup/token.
|
|
59
|
+
ports.inspection().schedulePointerInspect({
|
|
60
|
+
point: p,
|
|
61
|
+
source: action.source,
|
|
62
|
+
mode: action.mode,
|
|
63
|
+
maxDistance: action.maxDistance,
|
|
64
|
+
});
|
|
65
|
+
break;
|
|
66
|
+
case "none":
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function applyAreaMove(point, source = queuedAreaSource) {
|
|
71
|
+
const draft = ports.getBrushRect();
|
|
72
|
+
if (!ports.brushing() || draft === null)
|
|
73
|
+
return;
|
|
74
|
+
const next = brushWithEnd(draft, point);
|
|
75
|
+
ports.setBrushRect(next);
|
|
76
|
+
if (ports.activeTool() === "select-area")
|
|
77
|
+
ports.emitSelection(selectionEvent("change", normalizedRect(next), source));
|
|
78
|
+
}
|
|
79
|
+
/** Map the live render model into the pure interval query scene adapter. */
|
|
80
|
+
function intervalQueryScene() {
|
|
81
|
+
const model = context.model();
|
|
82
|
+
if (model === null)
|
|
83
|
+
return null;
|
|
84
|
+
return intervalQuerySceneFromModel(model);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Shared finish-brush effects (select/zoom/end); pointer callers cancel first.
|
|
88
|
+
*/
|
|
89
|
+
function applyFinishBrush(finish, source) {
|
|
90
|
+
switch (finish.type) {
|
|
91
|
+
case "keep-second-corner":
|
|
92
|
+
ports.setBrushRect(finish.corners);
|
|
93
|
+
context.announce(BRUSH_SECOND_CORNER_ANNOUNCEMENT);
|
|
94
|
+
break;
|
|
95
|
+
case "select-end": {
|
|
96
|
+
ports.setBrushRect(null);
|
|
97
|
+
const eventValue = selectionEvent("end", finish.rect, source);
|
|
98
|
+
// Interval owns commit + emit; surface only routes FinishBrushAction.
|
|
99
|
+
ports.interval().finishBrushSelect(eventValue, source);
|
|
100
|
+
reducerOf().dispatch({ type: "cancel-area" });
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
case "zoom-end":
|
|
104
|
+
ports.setBrushRect(null);
|
|
105
|
+
ports.zoom().applyBrushZoom(finish.rect, source);
|
|
106
|
+
reducerOf().dispatch({ type: "cancel-area" });
|
|
107
|
+
break;
|
|
108
|
+
case "end-area":
|
|
109
|
+
// Commit with non-area tool (e.g. tool changed mid-drag): clear only.
|
|
110
|
+
ports.setBrushRect(null);
|
|
111
|
+
reducerOf().dispatch({ type: "cancel-area" });
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
function onPointerLeave() {
|
|
116
|
+
// Evaluate leave clear **inside** the microtask so brushing/tooltip
|
|
117
|
+
// reflect post-flush state (not leave-time snapshots).
|
|
118
|
+
queueMicrotask(() => {
|
|
119
|
+
if (!shouldClearInspectionOnPointerLeave({
|
|
120
|
+
brushing: ports.brushing(),
|
|
121
|
+
tooltipHovered: context.tooltipHovered(),
|
|
122
|
+
}))
|
|
123
|
+
return;
|
|
124
|
+
ports.inspection().cancelPointerInspect({ pendingPinned: "discard" });
|
|
125
|
+
reducerOf().cancelScheduledPointer();
|
|
126
|
+
ports.inspection().setInspection(null, "pointer");
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
function onPointerDown(event) {
|
|
130
|
+
// Always cancel queued inspection before pure routing (host cleanup).
|
|
131
|
+
// Preserve pinned stash; full schedule cancel (inspect + move-area).
|
|
132
|
+
ports.inspection().cancelPointerInspect({ pendingPinned: "preserve" });
|
|
133
|
+
reducerOf().cancelScheduledPointer();
|
|
134
|
+
// point always computed (pure begin-area needs it; touch/none ignore).
|
|
135
|
+
const p = plotPoint(event);
|
|
136
|
+
const action = resolvePointerDownAction({
|
|
137
|
+
pointerType: event.pointerType,
|
|
138
|
+
button: event.button,
|
|
139
|
+
activeTool: ports.activeTool(),
|
|
140
|
+
areaAwaitingSecond: ports.areaAwaitingSecond(),
|
|
141
|
+
brushCorners: ports.getBrushRect(),
|
|
142
|
+
point: p,
|
|
143
|
+
});
|
|
144
|
+
switch (action.type) {
|
|
145
|
+
case "touch-inspect-start":
|
|
146
|
+
touchInspectStart = p;
|
|
147
|
+
touchInspectMoved = false;
|
|
148
|
+
break;
|
|
149
|
+
case "none":
|
|
150
|
+
break;
|
|
151
|
+
case "begin-area": {
|
|
152
|
+
// R3: the brush is panel-scoped — extending stays on the origin
|
|
153
|
+
// panel from the reducer; a fresh brush anchors to the hit panel.
|
|
154
|
+
const area = reducerOf().state.area;
|
|
155
|
+
const extending = ports.areaAwaitingSecond() && ports.getBrushRect() !== null;
|
|
156
|
+
const model = context.model();
|
|
157
|
+
const originPanel = extending
|
|
158
|
+
? area.kind === "idle" || area.panelId === null
|
|
159
|
+
? null
|
|
160
|
+
: (model?.viewport.panel(area.panelId) ?? null)
|
|
161
|
+
: panelAtPoint(p);
|
|
162
|
+
if (originPanel === null)
|
|
163
|
+
break;
|
|
164
|
+
// Pure table owns fresh vs extend corner policy.
|
|
165
|
+
ports.setBrushRect(action.corners);
|
|
166
|
+
ports.inspection().setInspection(null, action.source);
|
|
167
|
+
reducerOf().dispatch({
|
|
168
|
+
type: "begin-area",
|
|
169
|
+
point: p,
|
|
170
|
+
panelId: originPanel.id,
|
|
171
|
+
});
|
|
172
|
+
if (action.emitSelectStart) {
|
|
173
|
+
const startEvent = selectionEvent("start", normalizedRect(action.corners), action.source);
|
|
174
|
+
ports.emitSelection(startEvent);
|
|
175
|
+
}
|
|
176
|
+
try {
|
|
177
|
+
event.currentTarget.setPointerCapture(event.pointerId);
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
// Synthetic events may not register a pointer id; reducer owns cancel.
|
|
181
|
+
}
|
|
182
|
+
break;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
function selectionEvent(phase, rect, source) {
|
|
187
|
+
const area = reducerOf().state.area;
|
|
188
|
+
const originPanelId = area.kind === "idle" ? ports.interval().committedInterval?.panelId : area.panelId;
|
|
189
|
+
return buildIntervalSelectionFromScene({
|
|
190
|
+
phase,
|
|
191
|
+
mode: context.selectConfig()?.mode ?? "xy",
|
|
192
|
+
source,
|
|
193
|
+
pixels: rect,
|
|
194
|
+
scene: intervalQueryScene(),
|
|
195
|
+
...(originPanelId !== undefined && { panelId: originPanelId }),
|
|
196
|
+
keyForRow: (rowIndex) => context.semanticKey(context.model()?.row(rowIndex) ?? null, rowIndex),
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
function onPointerUp(event) {
|
|
200
|
+
// endPoint always computed (pure finish-brush needs it; touch paths ignore).
|
|
201
|
+
const endPoint = plotPoint(event);
|
|
202
|
+
const action = resolvePointerUpAction({
|
|
203
|
+
pointerType: event.pointerType,
|
|
204
|
+
activeTool: ports.activeTool(),
|
|
205
|
+
inspect: context.inspectConfig(),
|
|
206
|
+
hasTouchInspectStart: touchInspectStart !== null,
|
|
207
|
+
touchInspectMoved,
|
|
208
|
+
brushing: ports.brushing(),
|
|
209
|
+
brushCorners: ports.getBrushRect(),
|
|
210
|
+
endPoint,
|
|
211
|
+
});
|
|
212
|
+
switch (action.type) {
|
|
213
|
+
case "touch-inspect-drag-ignore":
|
|
214
|
+
// Always clear touch-inspect start state (host cleanup).
|
|
215
|
+
clearTouchInspect();
|
|
216
|
+
break;
|
|
217
|
+
case "touch-inspect-tap": {
|
|
218
|
+
clearTouchInspect();
|
|
219
|
+
// mode/maxDistance/state from pure inspect snapshot — no re-gate.
|
|
220
|
+
// Resolved target owns panel-scoped nearest + tap distance policy (#1080 / #787).
|
|
221
|
+
const model = context.model();
|
|
222
|
+
const target = model === null
|
|
223
|
+
? null
|
|
224
|
+
: resolveTarget({
|
|
225
|
+
model,
|
|
226
|
+
point: endPoint,
|
|
227
|
+
intent: "tap",
|
|
228
|
+
inspect: { mode: action.mode, maxDistance: action.maxDistance },
|
|
229
|
+
});
|
|
230
|
+
if (target !== null) {
|
|
231
|
+
ports.inspection().setInspection(target.match, "touch", action.state, target.mode);
|
|
232
|
+
suppressClickUntil = performance.now() + TOUCH_INSPECT_CLICK_SUPPRESS_MS;
|
|
233
|
+
}
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
case "none":
|
|
237
|
+
break;
|
|
238
|
+
case "finish-brush": {
|
|
239
|
+
// Pure table owns evaluate + select/zoom/end; host cancels then applies.
|
|
240
|
+
reducerOf().cancelScheduledPointer();
|
|
241
|
+
applyFinishBrush(action.finish, action.source);
|
|
242
|
+
break;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
function onSurfaceBlur(event) {
|
|
247
|
+
const blurAction = resolveSurfaceBlurAction({
|
|
248
|
+
relatedTargetInsideRoot: context.root()?.contains(event.relatedTarget) === true,
|
|
249
|
+
inspectionState: ports.inspection().inspection?.state ?? "none",
|
|
250
|
+
});
|
|
251
|
+
if (blurAction.type === "ignore")
|
|
252
|
+
return;
|
|
253
|
+
// Shared for keep-pinned and clear-inspection (ordering is load-bearing).
|
|
254
|
+
ports.inspection().resetTraversalIndex();
|
|
255
|
+
ports.inspection().cancelPointerInspect({ pendingPinned: "preserve" });
|
|
256
|
+
if (blurAction.type === "blur-clear-inspection")
|
|
257
|
+
ports.inspection().setInspection(null, "keyboard");
|
|
258
|
+
}
|
|
259
|
+
function onSurfaceKeyDown(event) {
|
|
260
|
+
// Decision table is pure (surface/keyboard); this switch owns side
|
|
261
|
+
// effects only. brushCorners is the draft source of truth (not reducer
|
|
262
|
+
// brushing); nudge/complete-area carry pure payloads so host only applies.
|
|
263
|
+
const inspection = ports.inspection();
|
|
264
|
+
const { action, preventDefault } = resolveSurfaceKeyAction({
|
|
265
|
+
key: event.key,
|
|
266
|
+
shiftKey: event.shiftKey,
|
|
267
|
+
activeTool: ports.activeTool(),
|
|
268
|
+
brushCorners: ports.getBrushRect(),
|
|
269
|
+
hasInspection: inspection.inspection !== null,
|
|
270
|
+
pinEnabled: context.inspectConfig()?.pin === true,
|
|
271
|
+
focusKey: inspection.inspection?.focus.key ?? null,
|
|
272
|
+
sourceKeys: inspection.inspection?.focus.sourceKeys ?? [],
|
|
273
|
+
inspectionAnchor: inspection.inspection?.focus.anchor ?? null,
|
|
274
|
+
inspectionPanel: inspection.inspectionPanel,
|
|
275
|
+
// Viewport is the sole panel authority — not scene.panels[0] (#1038).
|
|
276
|
+
firstPanel: (() => {
|
|
277
|
+
const panel = context.model()?.viewport.panels[0];
|
|
278
|
+
return panel === undefined ? undefined : panelBoundsFrom(panel.bounds);
|
|
279
|
+
})(),
|
|
280
|
+
});
|
|
281
|
+
if (preventDefault)
|
|
282
|
+
event.preventDefault();
|
|
283
|
+
switch (action.type) {
|
|
284
|
+
case "nudge-brush": {
|
|
285
|
+
// Pure table owns clamp panel policy and free-corner nudge.
|
|
286
|
+
ports.setBrushRect(action.corners);
|
|
287
|
+
reducerOf().dispatch({
|
|
288
|
+
type: "move-area",
|
|
289
|
+
point: { x: action.corners.x1, y: action.corners.y1 },
|
|
290
|
+
});
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
case "begin-area": {
|
|
294
|
+
// Pure table owns inspection-anchor vs panel-center policy.
|
|
295
|
+
// R3: the brush is panel-scoped — anchor to the panel under it.
|
|
296
|
+
const originPanel = panelAtPoint(action.anchor);
|
|
297
|
+
if (originPanel === null)
|
|
298
|
+
return;
|
|
299
|
+
ports.setBrushRect(brushAtPoint(action.anchor));
|
|
300
|
+
reducerOf().dispatch({
|
|
301
|
+
type: "begin-area",
|
|
302
|
+
point: action.anchor,
|
|
303
|
+
panelId: originPanel.id,
|
|
304
|
+
});
|
|
305
|
+
context.announce(BRUSH_SECOND_CORNER_ANNOUNCEMENT);
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
case "complete-area": {
|
|
309
|
+
// finish payload is pure-owned (normalize + select/zoom/end routing).
|
|
310
|
+
applyFinishBrush(action.finish, "keyboard");
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
case "cycle-coincident":
|
|
314
|
+
inspection.cycleCoincident(action.delta);
|
|
315
|
+
return;
|
|
316
|
+
case "navigate-direction":
|
|
317
|
+
inspection.navigateDirection(action.dx, action.dy);
|
|
318
|
+
return;
|
|
319
|
+
case "toggle-point-keys":
|
|
320
|
+
ports.togglePointKeys(action.keys, "keyboard");
|
|
321
|
+
return;
|
|
322
|
+
case "toggle-pin":
|
|
323
|
+
inspection.toggleInspectionPin("keyboard");
|
|
324
|
+
return;
|
|
325
|
+
case "escape": {
|
|
326
|
+
const plan = inspection.dismissInspection("escape", "keyboard", {
|
|
327
|
+
returnToInspect: action.returnToInspect,
|
|
328
|
+
});
|
|
329
|
+
applyInspectionDismissSideEffects(plan, {
|
|
330
|
+
clearBrush: () => {
|
|
331
|
+
ports.setBrushRect(null);
|
|
332
|
+
},
|
|
333
|
+
chooseTool: ports.chooseTool,
|
|
334
|
+
});
|
|
335
|
+
break;
|
|
336
|
+
}
|
|
337
|
+
case "none":
|
|
338
|
+
break;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
function onCaptureClick(event) {
|
|
342
|
+
const inspection = ports.inspection();
|
|
343
|
+
const action = resolveCaptureClickAction({
|
|
344
|
+
suppressClick: performance.now() < suppressClickUntil,
|
|
345
|
+
activeTool: ports.activeTool(),
|
|
346
|
+
pointSelectEnabled: ports.pointSelectEnabled(),
|
|
347
|
+
inspectEnabled: context.inspectConfig() !== null,
|
|
348
|
+
pinEnabled: context.inspectConfig()?.pin === true,
|
|
349
|
+
hasInspection: inspection.inspection !== null,
|
|
350
|
+
});
|
|
351
|
+
switch (action.type) {
|
|
352
|
+
case "suppress":
|
|
353
|
+
suppressClickUntil = 0;
|
|
354
|
+
break;
|
|
355
|
+
case "toggle-point": {
|
|
356
|
+
const point = plotPoint(event);
|
|
357
|
+
// Resolved target owns panel-scoped nearest + point-select radius (#1080 / #787).
|
|
358
|
+
const model = context.model();
|
|
359
|
+
const target = model === null
|
|
360
|
+
? null
|
|
361
|
+
: resolveTarget({
|
|
362
|
+
model,
|
|
363
|
+
point,
|
|
364
|
+
intent: "point-select",
|
|
365
|
+
inspect: null,
|
|
366
|
+
});
|
|
367
|
+
if (target === null)
|
|
368
|
+
break;
|
|
369
|
+
ports.togglePointKeys(context.candidateSemanticKeys(target.match), "pointer");
|
|
370
|
+
break;
|
|
371
|
+
}
|
|
372
|
+
case "toggle-pin":
|
|
373
|
+
inspection.toggleInspectionPin("pointer");
|
|
374
|
+
break;
|
|
375
|
+
case "none":
|
|
376
|
+
break;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
/** Pointer-cancel always drops draft/queue/touch-inspect and cancels area. */
|
|
380
|
+
function onPointerCancel() {
|
|
381
|
+
// Preserve pinned stash (leave discards; cancel preserves).
|
|
382
|
+
ports.inspection().cancelPointerInspect({ pendingPinned: "preserve" });
|
|
383
|
+
clearTouchInspect();
|
|
384
|
+
reducerOf().cancelScheduledPointer();
|
|
385
|
+
ports.setBrushRect(null);
|
|
386
|
+
reducerOf().dispatch({ type: "cancel-area" });
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Lost capture: pure table owns keep vs clear draft; host mutates brushRect.
|
|
390
|
+
*/
|
|
391
|
+
function onLostPointerCapture() {
|
|
392
|
+
const lost = resolveLostPointerCaptureAction(reducerOf().state.area.kind);
|
|
393
|
+
switch (lost.type) {
|
|
394
|
+
case "ignore":
|
|
395
|
+
break;
|
|
396
|
+
case "cancel-keep-draft":
|
|
397
|
+
reducerOf().dispatch({ type: "cancel-area" });
|
|
398
|
+
break;
|
|
399
|
+
case "cancel-clear-draft":
|
|
400
|
+
ports.setBrushRect(null);
|
|
401
|
+
reducerOf().dispatch({ type: "cancel-area" });
|
|
402
|
+
break;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
return {
|
|
406
|
+
applyAreaMove,
|
|
407
|
+
clearTouchInspect,
|
|
408
|
+
onPointerMove,
|
|
409
|
+
onPointerDown,
|
|
410
|
+
onPointerUp,
|
|
411
|
+
onPointerLeave,
|
|
412
|
+
onPointerCancel,
|
|
413
|
+
onLostPointerCapture,
|
|
414
|
+
onCaptureClick,
|
|
415
|
+
onSurfaceKeyDown,
|
|
416
|
+
onSurfaceBlur,
|
|
417
|
+
};
|
|
418
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Surface controller extracted from GGPlot for S7.
|
|
3
|
+
*
|
|
4
|
+
* Owns the interaction reducer (+ revision), tool/brush state,
|
|
5
|
+
* construction-time deriveds (activeTool, surfaceDescription, brushing,
|
|
6
|
+
* areaAwaitingSecond), tool selection, and both surface effects
|
|
7
|
+
* (window-teardown then tool-sync). The DOM/event handler implementation
|
|
8
|
+
* lives in surface-handlers.svelte.ts and receives live accessors/actions
|
|
9
|
+
* from this factory (reducer thunk, derived reads, brush-draft get/set,
|
|
10
|
+
* sibling controller ports).
|
|
11
|
+
*
|
|
12
|
+
* Construction topology (assembly): surface is constructed BEFORE inspection
|
|
13
|
+
* so the shared reducer exists as a concrete instance; inspection receives it
|
|
14
|
+
* via options. Construction-time deriveds read ONLY module-internal state +
|
|
15
|
+
* context.inspectConfig. Sibling controller ports, sinks, and chrome getters
|
|
16
|
+
* are handler/effect-only (armed for the construction guard).
|
|
17
|
+
*
|
|
18
|
+
* Window-teardown + tool-sync effects register inside this factory (#627).
|
|
19
|
+
* Tool-scoped pure decision tables stay in pointer.ts, keyboard.ts, and
|
|
20
|
+
* area-brush.ts — those seams narrow traffic; this module is the single owner.
|
|
21
|
+
*/
|
|
22
|
+
import type { InspectionState } from "../inspection/inspection-state.svelte.js";
|
|
23
|
+
import type { InteractionContext } from "../interaction/interaction-context.svelte.js";
|
|
24
|
+
import type { IntervalState } from "../interval/interval-state.svelte.js";
|
|
25
|
+
import type { InteractionSource, InteractionTool, PlotSelection, ResolvedInteractionConfig } from "../interaction/interaction.js";
|
|
26
|
+
import { createInteractionReducer } from "../interaction/reducer.js";
|
|
27
|
+
import type { PlotZoomState } from "../zoom/zoom-state.svelte.js";
|
|
28
|
+
/** Component-held reducer shape — factory creates it inside the module. */
|
|
29
|
+
export type InteractionReducer = ReturnType<typeof createInteractionReducer>;
|
|
30
|
+
export type BrushRect = {
|
|
31
|
+
x0: number;
|
|
32
|
+
y0: number;
|
|
33
|
+
x1: number;
|
|
34
|
+
y1: number;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Surface-specific ports beyond the shared InteractionContext. Sibling
|
|
38
|
+
* controllers are wired by the assembly (interaction-states.svelte.ts) as
|
|
39
|
+
* handler-only getters over the bundle under construction.
|
|
40
|
+
*/
|
|
41
|
+
export type SurfaceStateOptions = {
|
|
42
|
+
/** Controlled-tool prop + resolved config/chrome (host-held). */
|
|
43
|
+
readonly toolProp: () => InteractionTool | undefined;
|
|
44
|
+
readonly initialTool: () => ResolvedInteractionConfig["initialTool"];
|
|
45
|
+
readonly availableTools: () => readonly InteractionTool[];
|
|
46
|
+
/**
|
|
47
|
+
* Host point-select enablement (`select?.type === "point"`). Host-derived
|
|
48
|
+
* before this factory so surface does not close over later chromeState
|
|
49
|
+
* (#1082). Same formula as chrome `canPublishPointSelection`.
|
|
50
|
+
*/
|
|
51
|
+
readonly pointSelectEnabled: () => boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Required by the window-teardown effect — NOT derivable from filtered
|
|
54
|
+
* availableTools (codex P1-4).
|
|
55
|
+
*/
|
|
56
|
+
readonly surfaceInteractive: () => boolean;
|
|
57
|
+
/** Sibling controller ports (handler-only reads). */
|
|
58
|
+
readonly inspection: () => Pick<InspectionState, "inspection" | "inspectionPanel" | "schedulePointerInspect" | "cancelPointerInspect" | "onInspectPointerFrame" | "setInspection" | "closeInspection" | "dismissInspection" | "toggleInspectionPin" | "navigateDirection" | "cycleCoincident" | "resetTraversalIndex">;
|
|
59
|
+
readonly interval: () => Pick<IntervalState, "finishBrushSelect" | "committedInterval">;
|
|
60
|
+
readonly zoom: () => Pick<PlotZoomState, "applyBrushZoom">;
|
|
61
|
+
/** Selection controller write paths. */
|
|
62
|
+
readonly emitSelection: (event: PlotSelection) => void;
|
|
63
|
+
readonly togglePointKeys: (keys: readonly PropertyKey[], source: InteractionSource) => void;
|
|
64
|
+
};
|
|
65
|
+
export type SurfaceState = {
|
|
66
|
+
readonly reducer: InteractionReducer;
|
|
67
|
+
readonly activeTool: InteractionTool;
|
|
68
|
+
readonly surfaceDescription: string;
|
|
69
|
+
readonly brushRect: BrushRect | null;
|
|
70
|
+
readonly areaAwaitingSecond: boolean;
|
|
71
|
+
clearBrush(): void;
|
|
72
|
+
chooseTool(next: InteractionTool): void;
|
|
73
|
+
onPointerMove(event: PointerEvent): void;
|
|
74
|
+
onPointerDown(event: PointerEvent): void;
|
|
75
|
+
onPointerUp(event: PointerEvent): void;
|
|
76
|
+
onPointerLeave(): void;
|
|
77
|
+
onPointerCancel(): void;
|
|
78
|
+
onLostPointerCapture(): void;
|
|
79
|
+
onCaptureClick(event: MouseEvent): void;
|
|
80
|
+
onSurfaceKeyDown(event: KeyboardEvent): void;
|
|
81
|
+
onSurfaceBlur(event: FocusEvent): void;
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Create the surface controller. Construction registers deriveds and
|
|
85
|
+
* window-teardown + tool-sync effects.
|
|
86
|
+
*
|
|
87
|
+
* Construction-order note: deps must not be invoked during construction —
|
|
88
|
+
* construction-read discipline enforced by the armed-getter suite.
|
|
89
|
+
*/
|
|
90
|
+
export declare function createSurfaceState(context: InteractionContext, options: SurfaceStateOptions): SurfaceState;
|