@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,44 @@
|
|
|
1
|
+
import { evaluatePointerBrushEnd, } from "./area-brush.js";
|
|
2
|
+
/**
|
|
3
|
+
* Pure routing after brush-end evaluation for pointer finish-brush and
|
|
4
|
+
* keyboard complete-area.
|
|
5
|
+
*
|
|
6
|
+
* Takes the full ended discriminant so actions carry rect/corners payloads —
|
|
7
|
+
* host must not re-narrow `ended.kind` for emit/apply.
|
|
8
|
+
*
|
|
9
|
+
* Priority:
|
|
10
|
+
* 1. keep-second-corner — too-small (wins for any tool); carries corners
|
|
11
|
+
* 2. select-end — commit + select-area; carries rect
|
|
12
|
+
* 3. zoom-end — commit + zoom-area; carries rect
|
|
13
|
+
* 4. end-area — commit + any other tool (clear draft + cancel-area, no emit)
|
|
14
|
+
*
|
|
15
|
+
* Host on keep-second-corner: brushRect = action.corners, announce, no cancel-area.
|
|
16
|
+
* Host on select-end/zoom-end/end-area: brushRect=null, cancel-area; emit/apply
|
|
17
|
+
* using action.rect when present.
|
|
18
|
+
*
|
|
19
|
+
* Keyboard complete-area always supplies `kind: "commit"` (no free-corner
|
|
20
|
+
* too-small evaluation); pointer uses `resolvePointerFinishBrushAction`.
|
|
21
|
+
*/
|
|
22
|
+
export function resolveFinishBrushAction(input) {
|
|
23
|
+
if (input.ended.kind === "too-small") {
|
|
24
|
+
return { type: "keep-second-corner", corners: input.ended.corners };
|
|
25
|
+
}
|
|
26
|
+
if (input.activeTool === "select-area") {
|
|
27
|
+
return { type: "select-end", rect: input.ended.rect };
|
|
28
|
+
}
|
|
29
|
+
if (input.activeTool === "zoom-area") {
|
|
30
|
+
return { type: "zoom-end", rect: input.ended.rect };
|
|
31
|
+
}
|
|
32
|
+
return { type: "end-area" };
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Compose free-corner evaluation + finish routing for pointer finish-brush.
|
|
36
|
+
* Host supplies draft corners and the up event plot point; pure owns too-small
|
|
37
|
+
* vs commit and select/zoom/end payloads.
|
|
38
|
+
*/
|
|
39
|
+
export function resolvePointerFinishBrushAction(input) {
|
|
40
|
+
return resolveFinishBrushAction({
|
|
41
|
+
ended: evaluatePointerBrushEnd(input.brushCorners, input.endPoint),
|
|
42
|
+
activeTool: input.activeTool,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { type InteractionTool } from "../interaction/interaction.js";
|
|
2
|
+
import { type BrushCorners, type PlotPoint } from "./area-brush.js";
|
|
3
|
+
import { type PanelBounds } from "../scene/geometry.js";
|
|
4
|
+
import { type FinishBrushAction } from "./brush-finish.js";
|
|
5
|
+
/**
|
|
6
|
+
* Capture-surface keyboard decision input.
|
|
7
|
+
*
|
|
8
|
+
* `brushCorners` is the sole draft source of truth (host: `brushRect`).
|
|
9
|
+
* Distinct from reducer `brushing`, which can diverge when the draft corners
|
|
10
|
+
* and area machine are out of sync. Null means no draft — no separate
|
|
11
|
+
* `hasBrushDraft` boolean so illegal combos are unrepresentable.
|
|
12
|
+
*/
|
|
13
|
+
export type SurfaceKeyboardInput = {
|
|
14
|
+
readonly key: string;
|
|
15
|
+
readonly shiftKey: boolean;
|
|
16
|
+
readonly activeTool: InteractionTool;
|
|
17
|
+
/**
|
|
18
|
+
* Host: `brushRect`. Non-null when a draft free corner exists.
|
|
19
|
+
* Gates nudge-brush, complete-area, and Escape returnToInspect.
|
|
20
|
+
*/
|
|
21
|
+
readonly brushCorners: BrushCorners | null;
|
|
22
|
+
readonly hasInspection: boolean;
|
|
23
|
+
readonly pinEnabled: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Inspection focus key when `hasInspection` (host: `inspection?.focus.key ?? null`).
|
|
26
|
+
* Meaningful only for `toggle-point-keys`; unused on other actions.
|
|
27
|
+
*/
|
|
28
|
+
readonly focusKey: PropertyKey | null;
|
|
29
|
+
/**
|
|
30
|
+
* Inspection sourceKeys when `hasInspection` (host: `inspection?.focus.sourceKeys ?? []`).
|
|
31
|
+
* Meaningful only for `toggle-point-keys`; unused on other actions.
|
|
32
|
+
*/
|
|
33
|
+
readonly sourceKeys: readonly PropertyKey[];
|
|
34
|
+
/**
|
|
35
|
+
* Host: `inspection?.focus.anchor ?? null`.
|
|
36
|
+
* Meaningful for `begin-area` (preferred over firstPanel center).
|
|
37
|
+
*/
|
|
38
|
+
readonly inspectionAnchor: PlotPoint | null;
|
|
39
|
+
/**
|
|
40
|
+
* Host: panel containing inspection focus anchor, or null.
|
|
41
|
+
* Preferred clamp panel for nudge-brush over `firstPanel`.
|
|
42
|
+
*/
|
|
43
|
+
readonly inspectionPanel: PanelBounds | null;
|
|
44
|
+
/**
|
|
45
|
+
* Host: first semantic-viewport panel bounds (`panelBoundsFrom(viewport.panels[0].bounds)`).
|
|
46
|
+
* Panel-center fallback for `begin-area` when no inspection anchor; also
|
|
47
|
+
* nudge clamp fallback after inspectionPanel (#1038).
|
|
48
|
+
*/
|
|
49
|
+
readonly firstPanel: PanelBounds | undefined;
|
|
50
|
+
};
|
|
51
|
+
type SurfaceKeyAction = {
|
|
52
|
+
readonly type: "nudge-brush";
|
|
53
|
+
/** Clamped draft after free-corner nudge; host assigns brushRect. */
|
|
54
|
+
readonly corners: BrushCorners;
|
|
55
|
+
} | {
|
|
56
|
+
readonly type: "begin-area";
|
|
57
|
+
/** Inspection anchor if present, else panel center (or {0,0}). */
|
|
58
|
+
readonly anchor: PlotPoint;
|
|
59
|
+
} | {
|
|
60
|
+
/**
|
|
61
|
+
* Pure table owns normalize + select/zoom/end routing (shared finish
|
|
62
|
+
* owner with pointer). Keyboard always commits the current draft
|
|
63
|
+
* (`kind: "commit"`) — no free-corner too-small evaluation.
|
|
64
|
+
*/
|
|
65
|
+
readonly type: "complete-area";
|
|
66
|
+
readonly finish: FinishBrushAction;
|
|
67
|
+
} | {
|
|
68
|
+
readonly type: "cycle-coincident";
|
|
69
|
+
readonly delta: 1 | -1;
|
|
70
|
+
} | {
|
|
71
|
+
readonly type: "navigate-direction";
|
|
72
|
+
readonly dx: number;
|
|
73
|
+
readonly dy: number;
|
|
74
|
+
} | {
|
|
75
|
+
readonly type: "toggle-point-keys";
|
|
76
|
+
/** Keys to toggle: `[focusKey]` when non-null, else `sourceKeys`. */
|
|
77
|
+
readonly keys: readonly PropertyKey[];
|
|
78
|
+
} | {
|
|
79
|
+
readonly type: "toggle-pin";
|
|
80
|
+
} | {
|
|
81
|
+
readonly type: "escape";
|
|
82
|
+
readonly returnToInspect: boolean;
|
|
83
|
+
} | {
|
|
84
|
+
readonly type: "none";
|
|
85
|
+
};
|
|
86
|
+
type SurfaceKeyResolution = {
|
|
87
|
+
readonly action: SurfaceKeyAction;
|
|
88
|
+
readonly preventDefault: boolean;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Pure decision table for the plot capture-surface `keydown` handler.
|
|
92
|
+
* Preserves existing priority: area draft arrows → area Enter/Space →
|
|
93
|
+
* coincident cycle → inspect arrows → point toggle → pin → Escape.
|
|
94
|
+
* Callers own side effects (brush mutation, inspection, tool changes).
|
|
95
|
+
*/
|
|
96
|
+
export declare function resolveSurfaceKeyAction(input: SurfaceKeyboardInput): SurfaceKeyResolution;
|
|
97
|
+
export {};
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { isAreaTool } from "../interaction/interaction.js";
|
|
2
|
+
import { nudgeBrushEnd, panelCenterAnchor, } from "./area-brush.js";
|
|
3
|
+
import { normalizedRect } from "../scene/geometry.js";
|
|
4
|
+
import { resolveFinishBrushAction } from "./brush-finish.js";
|
|
5
|
+
function arrowDelta(key, step) {
|
|
6
|
+
const horizontal = key === "ArrowLeft" ? -step : key === "ArrowRight" ? step : 0;
|
|
7
|
+
const vertical = key === "ArrowUp" ? -step : key === "ArrowDown" ? step : 0;
|
|
8
|
+
return { x: horizontal, y: vertical };
|
|
9
|
+
}
|
|
10
|
+
function resolveAreaArrow(input) {
|
|
11
|
+
const panel = input.inspectionPanel ?? input.firstPanel;
|
|
12
|
+
if (panel === undefined || input.brushCorners === null) {
|
|
13
|
+
return { preventDefault: true, action: { type: "none" } };
|
|
14
|
+
}
|
|
15
|
+
const { x: dx, y: dy } = arrowDelta(input.key, input.shiftKey ? 10 : 1);
|
|
16
|
+
return {
|
|
17
|
+
preventDefault: true,
|
|
18
|
+
action: {
|
|
19
|
+
type: "nudge-brush",
|
|
20
|
+
corners: nudgeBrushEnd(input.brushCorners, dx, dy, panel),
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function resolveAreaCommit(input) {
|
|
25
|
+
const action = input.brushCorners === null
|
|
26
|
+
? {
|
|
27
|
+
type: "begin-area",
|
|
28
|
+
anchor: input.inspectionAnchor ?? panelCenterAnchor(input.firstPanel),
|
|
29
|
+
}
|
|
30
|
+
: {
|
|
31
|
+
type: "complete-area",
|
|
32
|
+
finish: resolveFinishBrushAction({
|
|
33
|
+
ended: { kind: "commit", rect: normalizedRect(input.brushCorners) },
|
|
34
|
+
activeTool: input.activeTool,
|
|
35
|
+
}),
|
|
36
|
+
};
|
|
37
|
+
return { preventDefault: true, action };
|
|
38
|
+
}
|
|
39
|
+
function resolveInspectionActivation(input) {
|
|
40
|
+
if (input.activeTool === "point" && input.hasInspection) {
|
|
41
|
+
return {
|
|
42
|
+
preventDefault: true,
|
|
43
|
+
action: {
|
|
44
|
+
type: "toggle-point-keys",
|
|
45
|
+
keys: input.focusKey === null ? input.sourceKeys : [input.focusKey],
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
if (input.hasInspection && input.pinEnabled) {
|
|
50
|
+
return { preventDefault: true, action: { type: "toggle-pin" } };
|
|
51
|
+
}
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Pure decision table for the plot capture-surface `keydown` handler.
|
|
56
|
+
* Preserves existing priority: area draft arrows → area Enter/Space →
|
|
57
|
+
* coincident cycle → inspect arrows → point toggle → pin → Escape.
|
|
58
|
+
* Callers own side effects (brush mutation, inspection, tool changes).
|
|
59
|
+
*/
|
|
60
|
+
export function resolveSurfaceKeyAction(input) {
|
|
61
|
+
const { key, activeTool, brushCorners } = input;
|
|
62
|
+
const area = isAreaTool(activeTool);
|
|
63
|
+
const hasDraft = brushCorners !== null;
|
|
64
|
+
if (area && key.startsWith("Arrow") && hasDraft) {
|
|
65
|
+
return resolveAreaArrow(input);
|
|
66
|
+
}
|
|
67
|
+
if (area && (key === "Enter" || key === " ")) {
|
|
68
|
+
return resolveAreaCommit(input);
|
|
69
|
+
}
|
|
70
|
+
if (key === "]" || key === "[") {
|
|
71
|
+
return {
|
|
72
|
+
preventDefault: true,
|
|
73
|
+
action: {
|
|
74
|
+
type: "cycle-coincident",
|
|
75
|
+
delta: key === "]" ? 1 : -1,
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
if (key.startsWith("Arrow")) {
|
|
80
|
+
const { x: dx, y: dy } = arrowDelta(key, 1);
|
|
81
|
+
return {
|
|
82
|
+
preventDefault: true,
|
|
83
|
+
action: {
|
|
84
|
+
type: "navigate-direction",
|
|
85
|
+
dx,
|
|
86
|
+
dy,
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
if (key === "Enter" || key === " ") {
|
|
91
|
+
const activation = resolveInspectionActivation(input);
|
|
92
|
+
if (activation !== null)
|
|
93
|
+
return activation;
|
|
94
|
+
}
|
|
95
|
+
if (key === "Escape") {
|
|
96
|
+
return {
|
|
97
|
+
preventDefault: true,
|
|
98
|
+
action: {
|
|
99
|
+
type: "escape",
|
|
100
|
+
returnToInspect: !hasDraft && area,
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
return { preventDefault: false, action: { type: "none" } };
|
|
105
|
+
}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { type InteractionTool } from "../interaction/interaction.js";
|
|
2
|
+
import { type BrushCorners, type PlotPoint } from "./area-brush.js";
|
|
3
|
+
import { type FinishBrushAction } from "./brush-finish.js";
|
|
4
|
+
/**
|
|
5
|
+
* Capture-surface pointer decision input for pointerdown.
|
|
6
|
+
*
|
|
7
|
+
* `brushCorners` is the sole draft source of truth (host: `brushRect`).
|
|
8
|
+
* Distinct from reducer `areaAwaitingSecond` — both must hold to extend.
|
|
9
|
+
* `point` is the down-event plot point (host always computes it).
|
|
10
|
+
*/
|
|
11
|
+
export type SurfacePointerDownInput = {
|
|
12
|
+
readonly pointerType: string;
|
|
13
|
+
readonly button: number;
|
|
14
|
+
readonly activeTool: InteractionTool;
|
|
15
|
+
/** Reducer "awaiting second corner" flag. */
|
|
16
|
+
readonly areaAwaitingSecond: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Host: `brushRect`. Non-null when a draft free corner exists.
|
|
19
|
+
* Extend only when combined with `areaAwaitingSecond`.
|
|
20
|
+
*/
|
|
21
|
+
readonly brushCorners: BrushCorners | null;
|
|
22
|
+
/** Host: `plotPoint(event)` — always available on pointerdown. */
|
|
23
|
+
readonly point: PlotPoint;
|
|
24
|
+
};
|
|
25
|
+
export type SurfacePointerDownAction = {
|
|
26
|
+
readonly type: "touch-inspect-start";
|
|
27
|
+
} | {
|
|
28
|
+
readonly type: "begin-area";
|
|
29
|
+
/**
|
|
30
|
+
* Pure-owned draft corners (fresh degenerate or extended free corner).
|
|
31
|
+
* Host assigns `brushRect = action.corners` without re-deriving policy.
|
|
32
|
+
*/
|
|
33
|
+
readonly corners: BrushCorners;
|
|
34
|
+
/** Emit select-area start event (not zoom; not second-corner await). */
|
|
35
|
+
readonly emitSelectStart: boolean;
|
|
36
|
+
/** Interaction source for setInspection clear + select-start emission. */
|
|
37
|
+
readonly source: "touch" | "pointer";
|
|
38
|
+
} | {
|
|
39
|
+
readonly type: "none";
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Pure decision for the plot capture-surface `pointerdown` handler.
|
|
43
|
+
* Priority: touch-inspect start (before button/tool checks) → primary-button
|
|
44
|
+
* area begin/extend → none. Owns extend-vs-fresh corner policy via
|
|
45
|
+
* `initialBrushRect`. Callers own queued-inspection cancel, draft mutation,
|
|
46
|
+
* reducer dispatch, selection start emission, and capture.
|
|
47
|
+
*/
|
|
48
|
+
export declare function resolvePointerDownAction(input: SurfacePointerDownInput): SurfacePointerDownAction;
|
|
49
|
+
/**
|
|
50
|
+
* Domain inspect snapshot for pointer move/up (host: resolved
|
|
51
|
+
* `interactionConfig.inspect`). Pass the domain object, not a pre-derived
|
|
52
|
+
* `inspectEnabled` boolean — matches inspection-state domain convention.
|
|
53
|
+
*/
|
|
54
|
+
type SurfaceInspectConfig = {
|
|
55
|
+
readonly mode: "auto" | "exact" | "x" | "y" | "xy";
|
|
56
|
+
readonly maxDistance: number;
|
|
57
|
+
readonly pin: boolean;
|
|
58
|
+
} | null;
|
|
59
|
+
/**
|
|
60
|
+
* Capture-surface pointerup decision input.
|
|
61
|
+
* Touch-inspect fields only matter when tool is inspect + pointer is touch.
|
|
62
|
+
*
|
|
63
|
+
* `brushCorners` is the sole draft source of truth for finish-brush (host:
|
|
64
|
+
* `brushRect`). Distinct from reducer `brushing`, which can diverge.
|
|
65
|
+
* `endPoint` is always the up-event plot point (host always computes it).
|
|
66
|
+
*/
|
|
67
|
+
export type SurfacePointerUpInput = {
|
|
68
|
+
readonly pointerType: string;
|
|
69
|
+
readonly activeTool: InteractionTool;
|
|
70
|
+
/** Host: resolved `interactionConfig.inspect`. */
|
|
71
|
+
readonly inspect: SurfaceInspectConfig;
|
|
72
|
+
readonly hasTouchInspectStart: boolean;
|
|
73
|
+
readonly touchInspectMoved: boolean;
|
|
74
|
+
/** Reducer brushing flag — can diverge from draft. */
|
|
75
|
+
readonly brushing: boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Host: `brushRect`. Non-null when a draft free corner exists.
|
|
78
|
+
* Finish-brush requires both brushing and non-null corners.
|
|
79
|
+
*/
|
|
80
|
+
readonly brushCorners: BrushCorners | null;
|
|
81
|
+
/** Host: `plotPoint(event)` — always available on pointerup. */
|
|
82
|
+
readonly endPoint: PlotPoint;
|
|
83
|
+
};
|
|
84
|
+
export type SurfacePointerUpAction = {
|
|
85
|
+
readonly type: "touch-inspect-tap";
|
|
86
|
+
/** Inspection state for setInspection (from inspect.pin). */
|
|
87
|
+
readonly state: "pinned" | "transient";
|
|
88
|
+
/** Nearest-query params from inspect snapshot at decision time. */
|
|
89
|
+
readonly mode: "auto" | "exact" | "x" | "y" | "xy";
|
|
90
|
+
readonly maxDistance: number;
|
|
91
|
+
} | {
|
|
92
|
+
readonly type: "touch-inspect-drag-ignore";
|
|
93
|
+
} | {
|
|
94
|
+
readonly type: "finish-brush";
|
|
95
|
+
/** Interaction source for selection/zoom emission. */
|
|
96
|
+
readonly source: "touch" | "pointer";
|
|
97
|
+
/**
|
|
98
|
+
* Pure-owned too-small/commit + select/zoom/end routing (shared with
|
|
99
|
+
* keyboard complete-area via surface/brush-finish).
|
|
100
|
+
*/
|
|
101
|
+
readonly finish: FinishBrushAction;
|
|
102
|
+
} | {
|
|
103
|
+
readonly type: "none";
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Pure decision for the plot capture-surface `pointerup` handler.
|
|
107
|
+
* Priority: touch-inspect tap/drag → finish-brush (both brushing and draft)
|
|
108
|
+
* → none. Finish-brush carries the complete finish payload (too-small vs
|
|
109
|
+
* commit, select/zoom/end). Host cancels scheduled pointer then
|
|
110
|
+
* `applyFinishBrush(action.finish, action.source)`. Host always clears
|
|
111
|
+
* touch-inspect start state for both touch-inspect actions.
|
|
112
|
+
*/
|
|
113
|
+
export declare function resolvePointerUpAction(input: SurfacePointerUpInput): SurfacePointerUpAction;
|
|
114
|
+
export type SurfaceClickInput = {
|
|
115
|
+
/** True when `performance.now() < suppressClickUntil`. */
|
|
116
|
+
readonly suppressClick: boolean;
|
|
117
|
+
readonly activeTool: InteractionTool;
|
|
118
|
+
/** True when interval/point select is configured as point. */
|
|
119
|
+
readonly pointSelectEnabled: boolean;
|
|
120
|
+
readonly inspectEnabled: boolean;
|
|
121
|
+
readonly pinEnabled: boolean;
|
|
122
|
+
readonly hasInspection: boolean;
|
|
123
|
+
};
|
|
124
|
+
export type SurfaceClickAction = {
|
|
125
|
+
readonly type: "suppress";
|
|
126
|
+
} | {
|
|
127
|
+
readonly type: "toggle-point";
|
|
128
|
+
} | {
|
|
129
|
+
readonly type: "toggle-pin";
|
|
130
|
+
} | {
|
|
131
|
+
readonly type: "none";
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* Pure decision for the capture-surface click handler.
|
|
135
|
+
* Priority: suppress → point toggle → inspect pin toggle → none.
|
|
136
|
+
* Host clears the suppress timestamp when action is `suppress`.
|
|
137
|
+
*/
|
|
138
|
+
export declare function resolveCaptureClickAction(input: SurfaceClickInput): SurfaceClickAction;
|
|
139
|
+
/** Pixel threshold for sticky touch-inspect drag (plotPoint coordinates). */
|
|
140
|
+
export declare const TOUCH_INSPECT_MOVE_PX = 4;
|
|
141
|
+
/**
|
|
142
|
+
* Suppress synthetic click after a successful touch-inspect tap (ms).
|
|
143
|
+
* Host: `suppressClickUntil = performance.now() + TOUCH_INSPECT_CLICK_SUPPRESS_MS`.
|
|
144
|
+
*/
|
|
145
|
+
export declare const TOUCH_INSPECT_CLICK_SUPPRESS_MS = 500;
|
|
146
|
+
/**
|
|
147
|
+
* Nearest-candidate radius (plot px) for capture-surface point-tool click.
|
|
148
|
+
* Owned by `interaction/target` (#1080); re-exported here for existing
|
|
149
|
+
* surface-pointer unit tests and callers that import the constant from
|
|
150
|
+
* the pointer decision-table module.
|
|
151
|
+
*/
|
|
152
|
+
export { POINT_SELECT_NEAREST_MAX_DISTANCE_PX } from "../interaction/target.js";
|
|
153
|
+
/**
|
|
154
|
+
* Sticky OR of touch-inspect drag past threshold in plotPoint coordinates.
|
|
155
|
+
* Exactly `TOUCH_INSPECT_MOVE_PX` counts as moved (`>=`).
|
|
156
|
+
* Host calls only when `pointerType === "touch" && touchInspectStart !== null`.
|
|
157
|
+
*/
|
|
158
|
+
export declare function advanceTouchInspectMoved(alreadyMoved: boolean, start: Readonly<{
|
|
159
|
+
x: number;
|
|
160
|
+
y: number;
|
|
161
|
+
}>, point: Readonly<{
|
|
162
|
+
x: number;
|
|
163
|
+
y: number;
|
|
164
|
+
}>): boolean;
|
|
165
|
+
export type SurfacePointerMoveInput = {
|
|
166
|
+
readonly pointerType: string;
|
|
167
|
+
readonly activeTool: InteractionTool;
|
|
168
|
+
/** Host sticky flag after `advanceTouchInspectMoved` (or false if no touch start). */
|
|
169
|
+
readonly touchInspectMoved: boolean;
|
|
170
|
+
/** True when `touchInspectStart !== null`. */
|
|
171
|
+
readonly hasTouchInspectStart: boolean;
|
|
172
|
+
/** Reducer brushing flag — can diverge from draft. */
|
|
173
|
+
readonly brushing: boolean;
|
|
174
|
+
/** True when `brushRect !== null`. */
|
|
175
|
+
readonly hasBrushDraft: boolean;
|
|
176
|
+
/** Host: resolved `interactionConfig.inspect` (domain object, not a boolean). */
|
|
177
|
+
readonly inspect: SurfaceInspectConfig;
|
|
178
|
+
};
|
|
179
|
+
export type SurfacePointerMoveAction = {
|
|
180
|
+
readonly type: "touch-inspect-drag-cancel";
|
|
181
|
+
} | {
|
|
182
|
+
readonly type: "queue-area-move";
|
|
183
|
+
readonly source: "touch" | "pointer";
|
|
184
|
+
} | {
|
|
185
|
+
readonly type: "queue-inspect";
|
|
186
|
+
readonly source: "touch" | "pointer";
|
|
187
|
+
/** Nearest-query params from inspect snapshot at decision time. */
|
|
188
|
+
readonly mode: "auto" | "exact" | "x" | "y" | "xy";
|
|
189
|
+
readonly maxDistance: number;
|
|
190
|
+
} | {
|
|
191
|
+
readonly type: "none";
|
|
192
|
+
};
|
|
193
|
+
/** Map a PointerEvent.pointerType string to InteractionSource surface values. */
|
|
194
|
+
export declare function interactionSourceFromPointerType(pointerType: string): "touch" | "pointer";
|
|
195
|
+
/**
|
|
196
|
+
* Pure decision for the plot capture-surface `pointermove` handler.
|
|
197
|
+
* Priority: touch-inspect drag cancel → queue area move → queue inspect → none.
|
|
198
|
+
*
|
|
199
|
+
* Cancel requires `pointerType === "touch"` (mouse/pen with residual start must
|
|
200
|
+
* not cancel). Cancel does **not** require inspect config — only the inspect
|
|
201
|
+
* tool, matching the current host.
|
|
202
|
+
*
|
|
203
|
+
* Host advances `touchInspectMoved` separately on touch+start before calling.
|
|
204
|
+
* Host on cancel: clear `queuedPointerInspection`, cancel scheduled pointer
|
|
205
|
+
* (`queuedPointerToken` left untouched). Host on queue-inspect: nearest with
|
|
206
|
+
* action.mode / action.maxDistance (no config re-read).
|
|
207
|
+
*/
|
|
208
|
+
export declare function resolvePointerMoveAction(input: SurfacePointerMoveInput): SurfacePointerMoveAction;
|
|
209
|
+
/**
|
|
210
|
+
* Whether pointerleave should clear inspection after its microtask flush.
|
|
211
|
+
* Host must call this **inside** `queueMicrotask` so `brushing` and
|
|
212
|
+
* `tooltipHovered` reflect post-flush state (not leave-time snapshots).
|
|
213
|
+
*/
|
|
214
|
+
export declare function shouldClearInspectionOnPointerLeave(input: {
|
|
215
|
+
readonly brushing: boolean;
|
|
216
|
+
readonly tooltipHovered: boolean;
|
|
217
|
+
}): boolean;
|
|
218
|
+
/** Reducer area.kind values that the host may observe on lostpointercapture. */
|
|
219
|
+
export type AreaKind = "idle" | "first-corner" | "dragging";
|
|
220
|
+
/** True while an area brush session is active (not idle). */
|
|
221
|
+
export declare function isAreaBrushing(areaKind: AreaKind): boolean;
|
|
222
|
+
/** True while waiting for the second brush corner (keyboard / too-small path). */
|
|
223
|
+
export declare function isAreaAwaitingSecond(areaKind: AreaKind): boolean;
|
|
224
|
+
export type LostPointerCaptureAction = {
|
|
225
|
+
readonly type: "ignore";
|
|
226
|
+
} | {
|
|
227
|
+
readonly type: "cancel-keep-draft";
|
|
228
|
+
} | {
|
|
229
|
+
readonly type: "cancel-clear-draft";
|
|
230
|
+
};
|
|
231
|
+
/**
|
|
232
|
+
* Pure routing for capture-surface `lostpointercapture`.
|
|
233
|
+
*
|
|
234
|
+
* Takes reducer `area.kind` (not derived booleans) so illegal combos like
|
|
235
|
+
* `!brushing && areaAwaitingSecond` are unrepresentable.
|
|
236
|
+
*
|
|
237
|
+
* idle → ignore (no cancel-area)
|
|
238
|
+
* first-corner → cancel-keep-draft (dispatch cancel-area; retain brushRect)
|
|
239
|
+
* dragging → cancel-clear-draft (clear brushRect + dispatch cancel-area)
|
|
240
|
+
*/
|
|
241
|
+
export declare function resolveLostPointerCaptureAction(areaKind: AreaKind): LostPointerCaptureAction;
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { isAreaTool } from "../interaction/interaction.js";
|
|
2
|
+
import { initialBrushRect } from "./area-brush.js";
|
|
3
|
+
import { resolvePointerFinishBrushAction } from "./brush-finish.js";
|
|
4
|
+
/**
|
|
5
|
+
* Pure decision for the plot capture-surface `pointerdown` handler.
|
|
6
|
+
* Priority: touch-inspect start (before button/tool checks) → primary-button
|
|
7
|
+
* area begin/extend → none. Owns extend-vs-fresh corner policy via
|
|
8
|
+
* `initialBrushRect`. Callers own queued-inspection cancel, draft mutation,
|
|
9
|
+
* reducer dispatch, selection start emission, and capture.
|
|
10
|
+
*/
|
|
11
|
+
export function resolvePointerDownAction(input) {
|
|
12
|
+
const { pointerType, button, activeTool, areaAwaitingSecond, brushCorners, point } = input;
|
|
13
|
+
if (activeTool === "inspect" && pointerType === "touch")
|
|
14
|
+
return { type: "touch-inspect-start" };
|
|
15
|
+
if (button !== 0)
|
|
16
|
+
return { type: "none" };
|
|
17
|
+
if (!isAreaTool(activeTool))
|
|
18
|
+
return { type: "none" };
|
|
19
|
+
return {
|
|
20
|
+
type: "begin-area",
|
|
21
|
+
corners: initialBrushRect({
|
|
22
|
+
areaAwaitingSecond,
|
|
23
|
+
existing: brushCorners,
|
|
24
|
+
point,
|
|
25
|
+
}),
|
|
26
|
+
emitSelectStart: activeTool === "select-area" && !areaAwaitingSecond,
|
|
27
|
+
source: interactionSourceFromPointerType(pointerType),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Pure decision for the plot capture-surface `pointerup` handler.
|
|
32
|
+
* Priority: touch-inspect tap/drag → finish-brush (both brushing and draft)
|
|
33
|
+
* → none. Finish-brush carries the complete finish payload (too-small vs
|
|
34
|
+
* commit, select/zoom/end). Host cancels scheduled pointer then
|
|
35
|
+
* `applyFinishBrush(action.finish, action.source)`. Host always clears
|
|
36
|
+
* touch-inspect start state for both touch-inspect actions.
|
|
37
|
+
*/
|
|
38
|
+
export function resolvePointerUpAction(input) {
|
|
39
|
+
const { pointerType, activeTool, inspect, hasTouchInspectStart, touchInspectMoved, brushing, brushCorners, endPoint, } = input;
|
|
40
|
+
if (activeTool === "inspect" &&
|
|
41
|
+
pointerType === "touch" &&
|
|
42
|
+
inspect !== null &&
|
|
43
|
+
hasTouchInspectStart) {
|
|
44
|
+
if (touchInspectMoved)
|
|
45
|
+
return { type: "touch-inspect-drag-ignore" };
|
|
46
|
+
return {
|
|
47
|
+
type: "touch-inspect-tap",
|
|
48
|
+
state: inspect.pin ? "pinned" : "transient",
|
|
49
|
+
mode: inspect.mode,
|
|
50
|
+
maxDistance: inspect.maxDistance,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
if (!brushing || brushCorners === null)
|
|
54
|
+
return { type: "none" };
|
|
55
|
+
return {
|
|
56
|
+
type: "finish-brush",
|
|
57
|
+
source: interactionSourceFromPointerType(pointerType),
|
|
58
|
+
finish: resolvePointerFinishBrushAction({
|
|
59
|
+
brushCorners,
|
|
60
|
+
endPoint,
|
|
61
|
+
activeTool,
|
|
62
|
+
}),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Pure decision for the capture-surface click handler.
|
|
67
|
+
* Priority: suppress → point toggle → inspect pin toggle → none.
|
|
68
|
+
* Host clears the suppress timestamp when action is `suppress`.
|
|
69
|
+
*/
|
|
70
|
+
export function resolveCaptureClickAction(input) {
|
|
71
|
+
if (input.suppressClick)
|
|
72
|
+
return { type: "suppress" };
|
|
73
|
+
if (input.activeTool === "point" && input.pointSelectEnabled)
|
|
74
|
+
return { type: "toggle-point" };
|
|
75
|
+
if (input.activeTool === "inspect" &&
|
|
76
|
+
input.inspectEnabled &&
|
|
77
|
+
input.hasInspection &&
|
|
78
|
+
input.pinEnabled)
|
|
79
|
+
return { type: "toggle-pin" };
|
|
80
|
+
return { type: "none" };
|
|
81
|
+
}
|
|
82
|
+
// ---- pointer move ----
|
|
83
|
+
/** Pixel threshold for sticky touch-inspect drag (plotPoint coordinates). */
|
|
84
|
+
export const TOUCH_INSPECT_MOVE_PX = 4;
|
|
85
|
+
/**
|
|
86
|
+
* Suppress synthetic click after a successful touch-inspect tap (ms).
|
|
87
|
+
* Host: `suppressClickUntil = performance.now() + TOUCH_INSPECT_CLICK_SUPPRESS_MS`.
|
|
88
|
+
*/
|
|
89
|
+
export const TOUCH_INSPECT_CLICK_SUPPRESS_MS = 500;
|
|
90
|
+
/**
|
|
91
|
+
* Nearest-candidate radius (plot px) for capture-surface point-tool click.
|
|
92
|
+
* Owned by `interaction/target` (#1080); re-exported here for existing
|
|
93
|
+
* surface-pointer unit tests and callers that import the constant from
|
|
94
|
+
* the pointer decision-table module.
|
|
95
|
+
*/
|
|
96
|
+
export { POINT_SELECT_NEAREST_MAX_DISTANCE_PX } from "../interaction/target.js";
|
|
97
|
+
/**
|
|
98
|
+
* Sticky OR of touch-inspect drag past threshold in plotPoint coordinates.
|
|
99
|
+
* Exactly `TOUCH_INSPECT_MOVE_PX` counts as moved (`>=`).
|
|
100
|
+
* Host calls only when `pointerType === "touch" && touchInspectStart !== null`.
|
|
101
|
+
*/
|
|
102
|
+
export function advanceTouchInspectMoved(alreadyMoved, start, point) {
|
|
103
|
+
if (alreadyMoved)
|
|
104
|
+
return true;
|
|
105
|
+
return Math.hypot(point.x - start.x, point.y - start.y) >= TOUCH_INSPECT_MOVE_PX;
|
|
106
|
+
}
|
|
107
|
+
/** Map a PointerEvent.pointerType string to InteractionSource surface values. */
|
|
108
|
+
export function interactionSourceFromPointerType(pointerType) {
|
|
109
|
+
return pointerType === "touch" ? "touch" : "pointer";
|
|
110
|
+
}
|
|
111
|
+
const pointerSource = (pointerType) => interactionSourceFromPointerType(pointerType);
|
|
112
|
+
/**
|
|
113
|
+
* Pure decision for the plot capture-surface `pointermove` handler.
|
|
114
|
+
* Priority: touch-inspect drag cancel → queue area move → queue inspect → none.
|
|
115
|
+
*
|
|
116
|
+
* Cancel requires `pointerType === "touch"` (mouse/pen with residual start must
|
|
117
|
+
* not cancel). Cancel does **not** require inspect config — only the inspect
|
|
118
|
+
* tool, matching the current host.
|
|
119
|
+
*
|
|
120
|
+
* Host advances `touchInspectMoved` separately on touch+start before calling.
|
|
121
|
+
* Host on cancel: clear `queuedPointerInspection`, cancel scheduled pointer
|
|
122
|
+
* (`queuedPointerToken` left untouched). Host on queue-inspect: nearest with
|
|
123
|
+
* action.mode / action.maxDistance (no config re-read).
|
|
124
|
+
*/
|
|
125
|
+
export function resolvePointerMoveAction(input) {
|
|
126
|
+
const { pointerType, activeTool, touchInspectMoved, hasTouchInspectStart, brushing, hasBrushDraft, inspect, } = input;
|
|
127
|
+
if (pointerType === "touch" &&
|
|
128
|
+
hasTouchInspectStart &&
|
|
129
|
+
touchInspectMoved &&
|
|
130
|
+
activeTool === "inspect") {
|
|
131
|
+
return { type: "touch-inspect-drag-cancel" };
|
|
132
|
+
}
|
|
133
|
+
if (brushing && hasBrushDraft) {
|
|
134
|
+
return { type: "queue-area-move", source: pointerSource(pointerType) };
|
|
135
|
+
}
|
|
136
|
+
if (activeTool === "inspect" && inspect !== null) {
|
|
137
|
+
return {
|
|
138
|
+
type: "queue-inspect",
|
|
139
|
+
source: pointerSource(pointerType),
|
|
140
|
+
mode: inspect.mode,
|
|
141
|
+
maxDistance: inspect.maxDistance,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
return { type: "none" };
|
|
145
|
+
}
|
|
146
|
+
// ---- pointer leave / finish-brush ----
|
|
147
|
+
/**
|
|
148
|
+
* Whether pointerleave should clear inspection after its microtask flush.
|
|
149
|
+
* Host must call this **inside** `queueMicrotask` so `brushing` and
|
|
150
|
+
* `tooltipHovered` reflect post-flush state (not leave-time snapshots).
|
|
151
|
+
*/
|
|
152
|
+
export function shouldClearInspectionOnPointerLeave(input) {
|
|
153
|
+
return !input.brushing && !input.tooltipHovered;
|
|
154
|
+
}
|
|
155
|
+
/** True while an area brush session is active (not idle). */
|
|
156
|
+
export function isAreaBrushing(areaKind) {
|
|
157
|
+
return areaKind !== "idle";
|
|
158
|
+
}
|
|
159
|
+
/** True while waiting for the second brush corner (keyboard / too-small path). */
|
|
160
|
+
export function isAreaAwaitingSecond(areaKind) {
|
|
161
|
+
return areaKind === "first-corner";
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Pure routing for capture-surface `lostpointercapture`.
|
|
165
|
+
*
|
|
166
|
+
* Takes reducer `area.kind` (not derived booleans) so illegal combos like
|
|
167
|
+
* `!brushing && areaAwaitingSecond` are unrepresentable.
|
|
168
|
+
*
|
|
169
|
+
* idle → ignore (no cancel-area)
|
|
170
|
+
* first-corner → cancel-keep-draft (dispatch cancel-area; retain brushRect)
|
|
171
|
+
* dragging → cancel-clear-draft (clear brushRect + dispatch cancel-area)
|
|
172
|
+
*/
|
|
173
|
+
export function resolveLostPointerCaptureAction(areaKind) {
|
|
174
|
+
if (areaKind === "idle")
|
|
175
|
+
return { type: "ignore" };
|
|
176
|
+
if (areaKind === "first-corner")
|
|
177
|
+
return { type: "cancel-keep-draft" };
|
|
178
|
+
return { type: "cancel-clear-draft" };
|
|
179
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure a11y description strings for the capture surface live region.
|
|
3
|
+
* Host reads these into a construction-time `$derived` keyed on active tool.
|
|
4
|
+
*
|
|
5
|
+
* Callers must pass `inspectPinEnabled` only when `activeTool === "inspect"`
|
|
6
|
+
* (or compute it lazily) so Svelte dependency tracking does not subscribe to
|
|
7
|
+
* inspect config while another tool is active.
|
|
8
|
+
*/
|
|
9
|
+
import type { InteractionTool } from "../interaction/interaction.js";
|
|
10
|
+
export declare function buildSurfaceDescription(activeTool: InteractionTool, inspectPinEnabled: boolean): string;
|