@pibbl/core 0.0.1 → 0.0.3-alpha.109.1
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/README.md +1 -1
- package/THIRD_PARTY_NOTICES.txt +81 -0
- package/dist/features/machines/animation.d.ts +64 -0
- package/dist/features/machines/animation.js +55 -0
- package/dist/features/machines/animation.js.map +7 -0
- package/dist/features/machines/animation.mjs +1 -0
- package/dist/features/machines/assign.d.ts +16 -0
- package/dist/features/machines/assign.js +15 -0
- package/dist/features/machines/assign.js.map +7 -0
- package/dist/features/machines/callback.d.ts +9 -0
- package/dist/features/machines/callback.js +7 -0
- package/dist/features/machines/callback.js.map +7 -0
- package/dist/features/machines/hook.d.ts +30 -0
- package/dist/features/machines/hook.js +37 -0
- package/dist/features/machines/hook.js.map +7 -0
- package/dist/features/machines/index.d.ts +6 -0
- package/dist/features/machines/index.js +12 -0
- package/dist/features/machines/index.js.map +7 -0
- package/dist/features/machines/index.mjs +1 -0
- package/dist/features/machines/runtime.d.ts +18 -0
- package/dist/features/machines/runtime.js +363 -0
- package/dist/features/machines/runtime.js.map +7 -0
- package/dist/features/machines/types.d.ts +164 -0
- package/dist/features/physics/2d-geometry.d.ts +3 -3
- package/dist/features/physics/2d-geometry.js.map +1 -1
- package/dist/features/physics/2d-testing.d.ts +1 -1
- package/dist/features/physics/2d-testing.js +2 -2
- package/dist/features/physics/2d-testing.js.map +2 -2
- package/dist/features/physics/2d.d.ts +115 -62
- package/dist/features/physics/2d.js +59 -28
- package/dist/features/physics/2d.js.map +2 -2
- package/dist/features/physics/lib/2d/canvas/components.js +25 -21
- package/dist/features/physics/lib/2d/canvas/components.js.map +2 -2
- package/dist/features/physics/lib/2d/canvas/presentation.js +1 -2
- package/dist/features/physics/lib/2d/canvas/presentation.js.map +2 -2
- package/dist/features/physics/lib/2d/collision/casts.js +4 -2
- package/dist/features/physics/lib/2d/collision/casts.js.map +2 -2
- package/dist/features/physics/lib/2d/query-types.d.ts +6 -0
- package/dist/features/physics/lib/2d/runtime/controller.d.ts +7 -6
- package/dist/features/physics/lib/2d/runtime/controller.js +1 -1
- package/dist/features/physics/lib/2d/runtime/controller.js.map +2 -2
- package/dist/features/physics/lib/2d/runtime/obstacles.js +9 -11
- package/dist/features/physics/lib/2d/runtime/obstacles.js.map +2 -2
- package/dist/features/physics/lib/2d/shapes.js +8 -9
- package/dist/features/physics/lib/2d/shapes.js.map +2 -2
- package/dist/features/physics/lib/2d/types.d.ts +8 -30
- package/dist/features/physics/lib/2d/world/queries.d.ts +7 -6
- package/dist/features/physics/lib/2d/world/queries.js.map +2 -2
- package/dist/features/physics/lib/2d/world/rapier.js +22 -26
- package/dist/features/physics/lib/2d/world/rapier.js.map +2 -2
- package/dist/features/sprites/formats/aseprite.d.ts +5 -0
- package/dist/features/sprites/formats/texture-packer.d.ts +5 -0
- package/dist/features/sprites/index.d.ts +6 -0
- package/dist/features/sprites/loader.d.ts +25 -0
- package/dist/features/sprites/loader.js +6 -3
- package/dist/features/sprites/loader.js.map +2 -2
- package/dist/features/sprites/model.d.ts +75 -0
- package/dist/features/sprites/sprite.d.ts +22 -0
- package/dist/features/textures/index.d.ts +12 -2
- package/dist/features/textures/index.js +33 -1
- package/dist/features/textures/index.js.map +2 -2
- package/dist/features/textures/lib/chemical-field.d.ts +56 -0
- package/dist/features/textures/lib/chemical-field.js +154 -0
- package/dist/features/textures/lib/chemical-field.js.map +7 -0
- package/dist/features/textures/lib/chemical-recipes.d.ts +119 -0
- package/dist/features/textures/lib/chemical-recipes.js +275 -0
- package/dist/features/textures/lib/chemical-recipes.js.map +7 -0
- package/dist/features/textures/lib/definitions.d.ts +3 -18
- package/dist/features/textures/lib/definitions.js +17 -24
- package/dist/features/textures/lib/definitions.js.map +2 -2
- package/dist/features/textures/lib/geometric-patterns.d.ts +149 -0
- package/dist/features/textures/lib/geometric-patterns.js +305 -0
- package/dist/features/textures/lib/geometric-patterns.js.map +7 -0
- package/dist/features/textures/lib/gray-scott.d.ts +55 -0
- package/dist/features/textures/lib/gray-scott.js +37 -0
- package/dist/features/textures/lib/gray-scott.js.map +7 -0
- package/dist/features/textures/lib/palette.js +1 -3
- package/dist/features/textures/lib/palette.js.map +2 -2
- package/dist/features/textures/lib/patterns.d.ts +123 -0
- package/dist/features/textures/lib/patterns.js +344 -0
- package/dist/features/textures/lib/patterns.js.map +7 -0
- package/dist/features/textures/lib/rain-drops.js +2 -1
- package/dist/features/textures/lib/rain-drops.js.map +2 -2
- package/dist/features/textures/lib/reaction-diffusion.d.ts +3 -2
- package/dist/features/textures/lib/reaction-diffusion.js +9 -20
- package/dist/features/textures/lib/reaction-diffusion.js.map +2 -2
- package/dist/features/textures/lib/simulation.d.ts +10 -4
- package/dist/features/textures/lib/simulation.js +23 -13
- package/dist/features/textures/lib/simulation.js.map +2 -2
- package/dist/features/textures/lib/wasm/electric.js +8 -1
- package/dist/features/textures/lib/wasm/electric.js.map +2 -2
- package/dist/features/textures/lib/water-surface.js +1 -3
- package/dist/features/textures/lib/water-surface.js.map +2 -2
- package/dist/features/viz/index.d.ts +92 -5
- package/dist/features/viz/index.js +202 -4
- package/dist/features/viz/index.js.map +2 -2
- package/dist/features/viz/inspection/bar.d.ts +79 -0
- package/dist/features/viz/inspection/bar.js +49 -0
- package/dist/features/viz/inspection/bar.js.map +7 -0
- package/dist/features/viz/inspection/candle.d.ts +156 -0
- package/dist/features/viz/inspection/candle.js +120 -0
- package/dist/features/viz/inspection/candle.js.map +7 -0
- package/dist/features/viz/inspection/capture-types.d.ts +65 -0
- package/dist/features/viz/inspection/capture.d.ts +16 -0
- package/dist/features/viz/inspection/capture.js +49 -0
- package/dist/features/viz/inspection/capture.js.map +7 -0
- package/dist/features/viz/inspection/handler.d.ts +36 -0
- package/dist/features/viz/inspection/handler.js +91 -0
- package/dist/features/viz/inspection/handler.js.map +7 -0
- package/dist/features/viz/inspection/ohlc-bar.d.ts +132 -0
- package/dist/features/viz/inspection/ohlc-bar.js +118 -0
- package/dist/features/viz/inspection/ohlc-bar.js.map +7 -0
- package/dist/features/viz/inspection/owned-ref.d.ts +16 -0
- package/dist/features/viz/inspection/owned-ref.js +99 -0
- package/dist/features/viz/inspection/owned-ref.js.map +7 -0
- package/dist/features/viz/inspection/painted-point.d.ts +22 -0
- package/dist/features/viz/inspection/painted-point.js +29 -0
- package/dist/features/viz/inspection/painted-point.js.map +7 -0
- package/dist/features/viz/inspection/queries.d.ts +100 -0
- package/dist/features/viz/inspection/queries.js +192 -0
- package/dist/features/viz/inspection/queries.js.map +7 -0
- package/dist/features/viz/inspection/query-types.d.ts +177 -0
- package/dist/features/viz/inspection/volume.d.ts +104 -0
- package/dist/features/viz/inspection/volume.js +95 -0
- package/dist/features/viz/inspection/volume.js.map +7 -0
- package/dist/features/viz/inspection.d.ts +19 -0
- package/dist/features/viz/inspection.js +54 -0
- package/dist/features/viz/inspection.js.map +7 -0
- package/dist/features/viz/inspection.mjs +1 -0
- package/dist/features/viz/lib/area-series.d.ts +62 -0
- package/dist/features/viz/lib/area-series.js +120 -0
- package/dist/features/viz/lib/area-series.js.map +7 -0
- package/dist/features/viz/lib/axis-labels.d.ts +2 -0
- package/dist/features/viz/lib/axis-labels.js +41 -0
- package/dist/features/viz/lib/axis-labels.js.map +7 -0
- package/dist/features/viz/lib/axis-title.d.ts +23 -0
- package/dist/features/viz/lib/axis-title.js +24 -0
- package/dist/features/viz/lib/axis-title.js.map +7 -0
- package/dist/features/viz/lib/axis.d.ts +1 -1
- package/dist/features/viz/lib/axis.js +50 -50
- package/dist/features/viz/lib/axis.js.map +2 -2
- package/dist/features/viz/lib/bar-scale.d.ts +7 -0
- package/dist/features/viz/lib/bar-scale.js +34 -0
- package/dist/features/viz/lib/bar-scale.js.map +7 -0
- package/dist/features/viz/lib/bar-series.d.ts +3 -1
- package/dist/features/viz/lib/bar-series.js +21 -5
- package/dist/features/viz/lib/bar-series.js.map +2 -2
- package/dist/features/viz/lib/baseline-series.d.ts +55 -0
- package/dist/features/viz/lib/baseline-series.js +136 -0
- package/dist/features/viz/lib/baseline-series.js.map +7 -0
- package/dist/features/viz/lib/candlestick-series.d.ts +62 -0
- package/dist/features/viz/lib/candlestick-series.js +150 -0
- package/dist/features/viz/lib/candlestick-series.js.map +7 -0
- package/dist/features/viz/lib/censored-point-series.d.ts +71 -0
- package/dist/features/viz/lib/censored-point-series.js +129 -0
- package/dist/features/viz/lib/censored-point-series.js.map +7 -0
- package/dist/features/viz/lib/chart-lines.d.ts +41 -0
- package/dist/features/viz/lib/chart-lines.js +32 -0
- package/dist/features/viz/lib/chart-lines.js.map +7 -0
- package/dist/features/viz/lib/color-context.d.ts +4 -0
- package/dist/features/viz/lib/color-context.js +41 -0
- package/dist/features/viz/lib/color-context.js.map +7 -0
- package/dist/features/viz/lib/color-math.d.ts +4 -0
- package/dist/features/viz/lib/color-math.js +31 -0
- package/dist/features/viz/lib/color-math.js.map +7 -0
- package/dist/features/viz/lib/color-types.d.ts +53 -0
- package/dist/features/viz/lib/curve-definition.d.ts +49 -0
- package/dist/features/viz/lib/curve-definition.js +142 -0
- package/dist/features/viz/lib/curve-definition.js.map +7 -0
- package/dist/features/viz/lib/diverging-color-scale.d.ts +11 -0
- package/dist/features/viz/lib/diverging-color-scale.js +51 -0
- package/dist/features/viz/lib/diverging-color-scale.js.map +7 -0
- package/dist/features/viz/lib/domain-navigation.d.ts +40 -0
- package/dist/features/viz/lib/domain-navigation.js +77 -0
- package/dist/features/viz/lib/domain-navigation.js.map +7 -0
- package/dist/features/viz/lib/editable-chart-elements.d.ts +178 -0
- package/dist/features/viz/lib/editable-chart-elements.js +733 -0
- package/dist/features/viz/lib/editable-chart-elements.js.map +7 -0
- package/dist/features/viz/lib/financial-aggregation.d.ts +127 -0
- package/dist/features/viz/lib/financial-aggregation.js +116 -0
- package/dist/features/viz/lib/financial-aggregation.js.map +7 -0
- package/dist/features/viz/lib/financial-autoscale.d.ts +64 -0
- package/dist/features/viz/lib/financial-autoscale.js +61 -0
- package/dist/features/viz/lib/financial-autoscale.js.map +7 -0
- package/dist/features/viz/lib/financial-comparison.d.ts +62 -0
- package/dist/features/viz/lib/financial-comparison.js +98 -0
- package/dist/features/viz/lib/financial-comparison.js.map +7 -0
- package/dist/features/viz/lib/financial-geometry.d.ts +77 -0
- package/dist/features/viz/lib/financial-geometry.js +67 -0
- package/dist/features/viz/lib/financial-geometry.js.map +7 -0
- package/dist/features/viz/lib/financial-indicators.d.ts +114 -0
- package/dist/features/viz/lib/financial-indicators.js +135 -0
- package/dist/features/viz/lib/financial-indicators.js.map +7 -0
- package/dist/features/viz/lib/financial-oscillators.d.ts +171 -0
- package/dist/features/viz/lib/financial-oscillators.js +265 -0
- package/dist/features/viz/lib/financial-oscillators.js.map +7 -0
- package/dist/features/viz/lib/graph/bipartite.d.ts +14 -0
- package/dist/features/viz/lib/graph/bipartite.js +250 -0
- package/dist/features/viz/lib/graph/bipartite.js.map +7 -0
- package/dist/features/viz/lib/graph/chord.d.ts +44 -0
- package/dist/features/viz/lib/graph/chord.js +348 -0
- package/dist/features/viz/lib/graph/chord.js.map +7 -0
- package/dist/features/viz/lib/graph/dependency.d.ts +26 -0
- package/dist/features/viz/lib/graph/dependency.js +140 -0
- package/dist/features/viz/lib/graph/dependency.js.map +7 -0
- package/dist/features/viz/lib/graph/force.d.ts +28 -0
- package/dist/features/viz/lib/graph/force.js +580 -0
- package/dist/features/viz/lib/graph/force.js.map +7 -0
- package/dist/features/viz/lib/graph/hierarchy.d.ts +21 -0
- package/dist/features/viz/lib/graph/hierarchy.js +112 -0
- package/dist/features/viz/lib/graph/hierarchy.js.map +7 -0
- package/dist/features/viz/lib/graph/icicle.d.ts +16 -0
- package/dist/features/viz/lib/graph/icicle.js +153 -0
- package/dist/features/viz/lib/graph/icicle.js.map +7 -0
- package/dist/features/viz/lib/graph/matrix.d.ts +30 -0
- package/dist/features/viz/lib/graph/matrix.js +243 -0
- package/dist/features/viz/lib/graph/matrix.js.map +7 -0
- package/dist/features/viz/lib/graph/neighborhood.d.ts +11 -0
- package/dist/features/viz/lib/graph/neighborhood.js +281 -0
- package/dist/features/viz/lib/graph/neighborhood.js.map +7 -0
- package/dist/features/viz/lib/graph/routes.d.ts +35 -0
- package/dist/features/viz/lib/graph/routes.js +101 -0
- package/dist/features/viz/lib/graph/routes.js.map +7 -0
- package/dist/features/viz/lib/graph/sankey.d.ts +44 -0
- package/dist/features/viz/lib/graph/sankey.js +341 -0
- package/dist/features/viz/lib/graph/sankey.js.map +7 -0
- package/dist/features/viz/lib/graph/shared.d.ts +59 -0
- package/dist/features/viz/lib/graph/shared.js +301 -0
- package/dist/features/viz/lib/graph/shared.js.map +7 -0
- package/dist/features/viz/lib/graph/tree.d.ts +11 -0
- package/dist/features/viz/lib/graph/tree.js +232 -0
- package/dist/features/viz/lib/graph/tree.js.map +7 -0
- package/dist/features/viz/lib/graph/treemap.d.ts +20 -0
- package/dist/features/viz/lib/graph/treemap.js +227 -0
- package/dist/features/viz/lib/graph/treemap.js.map +7 -0
- package/dist/features/viz/lib/graph/types.d.ts +1097 -0
- package/dist/features/viz/lib/hover-card.js +8 -9
- package/dist/features/viz/lib/hover-card.js.map +2 -2
- package/dist/features/viz/lib/hover-data.d.ts +1 -1
- package/dist/features/viz/lib/hover-data.js +6 -3
- package/dist/features/viz/lib/hover-data.js.map +2 -2
- package/dist/features/viz/lib/hover-types.d.ts +5 -5
- package/dist/features/viz/lib/interval-band-series.d.ts +49 -0
- package/dist/features/viz/lib/interval-band-series.js +136 -0
- package/dist/features/viz/lib/interval-band-series.js.map +7 -0
- package/dist/features/viz/lib/interval-diamond-series.d.ts +43 -0
- package/dist/features/viz/lib/interval-diamond-series.js +122 -0
- package/dist/features/viz/lib/interval-diamond-series.js.map +7 -0
- package/dist/features/viz/lib/interval-series.d.ts +79 -0
- package/dist/features/viz/lib/interval-series.js +158 -0
- package/dist/features/viz/lib/interval-series.js.map +7 -0
- package/dist/features/viz/lib/layout-pie.js +9 -13
- package/dist/features/viz/lib/layout-pie.js.map +2 -2
- package/dist/features/viz/lib/line-series.d.ts +1 -1
- package/dist/features/viz/lib/line-series.js +47 -28
- package/dist/features/viz/lib/line-series.js.map +2 -2
- package/dist/features/viz/lib/linear-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/linear-scale-component.js +18 -0
- package/dist/features/viz/lib/linear-scale-component.js.map +7 -0
- package/dist/features/viz/lib/linear-scale.js +1 -1
- package/dist/features/viz/lib/linear-scale.js.map +2 -2
- package/dist/features/viz/lib/log-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/log-scale-component.js +19 -0
- package/dist/features/viz/lib/log-scale-component.js.map +7 -0
- package/dist/features/viz/lib/log-scale.d.ts +2 -0
- package/dist/features/viz/lib/log-scale.js +53 -0
- package/dist/features/viz/lib/log-scale.js.map +7 -0
- package/dist/features/viz/lib/monotone-curve.d.ts +11 -0
- package/dist/features/viz/lib/monotone-curve.js +63 -0
- package/dist/features/viz/lib/monotone-curve.js.map +7 -0
- package/dist/features/viz/lib/nearest.d.ts +9 -9
- package/dist/features/viz/lib/nearest.js.map +1 -1
- package/dist/features/viz/lib/numeric-range-interpolation.d.ts +15 -0
- package/dist/features/viz/lib/numeric-range-interpolation.js +36 -0
- package/dist/features/viz/lib/numeric-range-interpolation.js.map +7 -0
- package/dist/features/viz/lib/numeric-ticks.d.ts +38 -0
- package/dist/features/viz/lib/numeric-ticks.js +54 -0
- package/dist/features/viz/lib/numeric-ticks.js.map +7 -0
- package/dist/features/viz/lib/ohlc-bar-series.d.ts +55 -0
- package/dist/features/viz/lib/ohlc-bar-series.js +168 -0
- package/dist/features/viz/lib/ohlc-bar-series.js.map +7 -0
- package/dist/features/viz/lib/paired-series.d.ts +44 -0
- package/dist/features/viz/lib/paired-series.js +93 -0
- package/dist/features/viz/lib/paired-series.js.map +7 -0
- package/dist/features/viz/lib/pie-layout.js +2 -1
- package/dist/features/viz/lib/pie-layout.js.map +2 -2
- package/dist/features/viz/lib/plot-series.js +11 -6
- package/dist/features/viz/lib/plot-series.js.map +2 -2
- package/dist/features/viz/lib/plot-types.d.ts +4 -3
- package/dist/features/viz/lib/point-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/point-scale-component.js +19 -0
- package/dist/features/viz/lib/point-scale-component.js.map +7 -0
- package/dist/features/viz/lib/point-scale.d.ts +2 -0
- package/dist/features/viz/lib/point-scale.js +45 -0
- package/dist/features/viz/lib/point-scale.js.map +7 -0
- package/dist/features/viz/lib/point-series.d.ts +1 -1
- package/dist/features/viz/lib/point-series.js +36 -9
- package/dist/features/viz/lib/point-series.js.map +2 -2
- package/dist/features/viz/lib/point-types.d.ts +5 -2
- package/dist/features/viz/lib/reference-band.d.ts +16 -0
- package/dist/features/viz/lib/reference-band.js +30 -0
- package/dist/features/viz/lib/reference-band.js.map +7 -0
- package/dist/features/viz/lib/scale-adjust.js +9 -4
- package/dist/features/viz/lib/scale-adjust.js.map +2 -2
- package/dist/features/viz/lib/scale-context.d.ts +5 -4
- package/dist/features/viz/lib/scale-context.js +15 -11
- package/dist/features/viz/lib/scale-context.js.map +2 -2
- package/dist/features/viz/lib/scale-provider.d.ts +2 -0
- package/dist/features/viz/lib/scale-provider.js +13 -0
- package/dist/features/viz/lib/scale-provider.js.map +7 -0
- package/dist/features/viz/lib/scale-ticks.d.ts +5 -0
- package/dist/features/viz/lib/scale-ticks.js +64 -0
- package/dist/features/viz/lib/scale-ticks.js.map +7 -0
- package/dist/features/viz/lib/scale-view.d.ts +4 -0
- package/dist/features/viz/lib/scale-view.js +21 -0
- package/dist/features/viz/lib/scale-view.js.map +7 -0
- package/dist/features/viz/lib/sequential-color-scale.d.ts +11 -0
- package/dist/features/viz/lib/sequential-color-scale.js +49 -0
- package/dist/features/viz/lib/sequential-color-scale.js.map +7 -0
- package/dist/features/viz/lib/series-position.d.ts +12 -0
- package/dist/features/viz/lib/series-position.js +44 -0
- package/dist/features/viz/lib/series-position.js.map +7 -0
- package/dist/features/viz/lib/step-curves.d.ts +19 -0
- package/dist/features/viz/lib/step-curves.js +53 -0
- package/dist/features/viz/lib/step-curves.js.map +7 -0
- package/dist/features/viz/lib/symlog-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/symlog-scale-component.js +19 -0
- package/dist/features/viz/lib/symlog-scale-component.js.map +7 -0
- package/dist/features/viz/lib/symlog-scale.d.ts +2 -0
- package/dist/features/viz/lib/symlog-scale.js +38 -0
- package/dist/features/viz/lib/symlog-scale.js.map +7 -0
- package/dist/features/viz/lib/threshold-color-scale.d.ts +43 -0
- package/dist/features/viz/lib/threshold-color-scale.js +59 -0
- package/dist/features/viz/lib/threshold-color-scale.js.map +7 -0
- package/dist/features/viz/lib/trading-time-mapping.d.ts +32 -0
- package/dist/features/viz/lib/trading-time-mapping.js +89 -0
- package/dist/features/viz/lib/trading-time-mapping.js.map +7 -0
- package/dist/features/viz/lib/trading-time-scale.d.ts +83 -0
- package/dist/features/viz/lib/trading-time-scale.js +96 -0
- package/dist/features/viz/lib/trading-time-scale.js.map +7 -0
- package/dist/features/viz/lib/trajectory-series.d.ts +71 -0
- package/dist/features/viz/lib/trajectory-series.js +111 -0
- package/dist/features/viz/lib/trajectory-series.js.map +7 -0
- package/dist/features/viz/lib/types.d.ts +114 -21
- package/dist/features/viz/lib/use-bar-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-bar-scale.js +9 -0
- package/dist/features/viz/lib/use-bar-scale.js.map +7 -0
- package/dist/features/viz/lib/use-continuous-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-continuous-scale.js +14 -0
- package/dist/features/viz/lib/use-continuous-scale.js.map +7 -0
- package/dist/features/viz/lib/use-linear-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-linear-scale.js +9 -0
- package/dist/features/viz/lib/use-linear-scale.js.map +7 -0
- package/dist/features/viz/lib/use-log-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-log-scale.js +9 -0
- package/dist/features/viz/lib/use-log-scale.js.map +7 -0
- package/dist/features/viz/lib/use-point-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-point-scale.js +9 -0
- package/dist/features/viz/lib/use-point-scale.js.map +7 -0
- package/dist/features/viz/lib/use-symlog-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-symlog-scale.js +9 -0
- package/dist/features/viz/lib/use-symlog-scale.js.map +7 -0
- package/dist/features/viz/lib/use-utc-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-utc-scale.js +9 -0
- package/dist/features/viz/lib/use-utc-scale.js.map +7 -0
- package/dist/features/viz/lib/utc-labels.d.ts +12 -0
- package/dist/features/viz/lib/utc-labels.js +27 -0
- package/dist/features/viz/lib/utc-labels.js.map +7 -0
- package/dist/features/viz/lib/utc-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/utc-scale-component.js +18 -0
- package/dist/features/viz/lib/utc-scale-component.js.map +7 -0
- package/dist/features/viz/lib/utc-scale.d.ts +21 -0
- package/dist/features/viz/lib/utc-scale.js +124 -0
- package/dist/features/viz/lib/utc-scale.js.map +7 -0
- package/dist/features/viz/lib/volume-series.d.ts +59 -0
- package/dist/features/viz/lib/volume-series.js +117 -0
- package/dist/features/viz/lib/volume-series.js.map +7 -0
- package/dist/features/viz/lib/weighted-point-series.d.ts +71 -0
- package/dist/features/viz/lib/weighted-point-series.js +169 -0
- package/dist/features/viz/lib/weighted-point-series.js.map +7 -0
- package/dist/filters/backdrop-contrast-gpu.d.ts +5 -0
- package/dist/filters/backdrop-contrast-gpu.js +33 -0
- package/dist/filters/backdrop-contrast-gpu.js.map +7 -0
- package/dist/filters/backdrop-contrast.d.ts +21 -0
- package/dist/filters/backdrop-contrast.js +61 -0
- package/dist/filters/backdrop-contrast.js.map +7 -0
- package/dist/filters/displacement.js +1 -1
- package/dist/filters/displacement.js.map +2 -2
- package/dist/filters/emboss-gpu.d.ts +4 -0
- package/dist/filters/emboss-gpu.js +39 -0
- package/dist/filters/emboss-gpu.js.map +7 -0
- package/dist/filters/emboss.d.ts +32 -0
- package/dist/filters/emboss.js +104 -0
- package/dist/filters/emboss.js.map +7 -0
- package/dist/filters/filter-executor.d.ts +11 -4
- package/dist/filters/filter-executor.js +104 -49
- package/dist/filters/filter-executor.js.map +2 -2
- package/dist/filters/reflected-light.js +1 -1
- package/dist/filters/reflected-light.js.map +2 -2
- package/dist/filters/reflection-gpu.d.ts +3 -1
- package/dist/filters/reflection-gpu.js +5 -2
- package/dist/filters/reflection-gpu.js.map +2 -2
- package/dist/filters/render-backdrop-contrast-boundary.d.ts +31 -0
- package/dist/filters/render-backdrop-contrast-boundary.js +116 -0
- package/dist/filters/render-backdrop-contrast-boundary.js.map +7 -0
- package/dist/filters/render-emboss-boundary.d.ts +13 -0
- package/dist/filters/render-emboss-boundary.js +131 -0
- package/dist/filters/render-emboss-boundary.js.map +7 -0
- package/dist/filters.d.ts +9 -5
- package/dist/filters.js +4 -0
- package/dist/filters.js.map +2 -2
- package/dist/index.d.ts +10 -6
- package/dist/index.js +18 -2
- package/dist/index.js.map +2 -2
- package/dist/internal.d.ts +4 -0
- package/dist/internal.js +6 -0
- package/dist/internal.js.map +2 -2
- package/dist/layout-kernel.d.ts +12 -0
- package/dist/layout-kernel.js +11 -0
- package/dist/layout-kernel.js.map +7 -0
- package/dist/layout-kernel.mjs +1 -0
- package/dist/lib/animation/definition.d.ts +5 -3
- package/dist/lib/animation/definition.js +29 -4
- package/dist/lib/animation/definition.js.map +2 -2
- package/dist/lib/animation/playback.d.ts +8 -0
- package/dist/lib/animation/playback.js +33 -11
- package/dist/lib/animation/playback.js.map +2 -2
- package/dist/lib/animation/spring.d.ts +3 -1
- package/dist/lib/animation/spring.js.map +2 -2
- package/dist/lib/animation/types.d.ts +29 -73
- package/dist/lib/backend/types.d.ts +13 -1
- package/dist/lib/backend/types.js.map +2 -2
- package/dist/lib/components/arc-geometry.js +2 -1
- package/dist/lib/components/arc-geometry.js.map +2 -2
- package/dist/lib/components/g.js +2 -0
- package/dist/lib/components/g.js.map +2 -2
- package/dist/lib/components/html-box.js +2 -1
- package/dist/lib/components/html-box.js.map +2 -2
- package/dist/lib/components/img.js +3 -3
- package/dist/lib/components/img.js.map +2 -2
- package/dist/lib/components/layer.js +98 -16
- package/dist/lib/components/layer.js.map +3 -3
- package/dist/lib/components/text.d.ts +16 -0
- package/dist/lib/components/text.js +131 -24
- package/dist/lib/components/text.js.map +2 -2
- package/dist/lib/define-primitive.d.ts +4 -2
- package/dist/lib/define-primitive.js +3 -1
- package/dist/lib/define-primitive.js.map +2 -2
- package/dist/lib/element/metadata.d.ts +9 -0
- package/dist/lib/element/metadata.js +19 -0
- package/dist/lib/element/metadata.js.map +2 -2
- package/dist/lib/element/resolve-primitive-inputs.d.ts +2 -0
- package/dist/lib/element/resolve-primitive-inputs.js +17 -4
- package/dist/lib/element/resolve-primitive-inputs.js.map +2 -2
- package/dist/lib/events/event-facade.d.ts +18 -0
- package/dist/lib/events/event-facade.js +28 -2
- package/dist/lib/events/event-facade.js.map +2 -2
- package/dist/lib/events/hit-test.js +2 -1
- package/dist/lib/events/hit-test.js.map +2 -2
- package/dist/lib/events/propagation.d.ts +2 -1
- package/dist/lib/events/propagation.js +22 -16
- package/dist/lib/events/propagation.js.map +2 -2
- package/dist/lib/events/registrations.d.ts +10 -0
- package/dist/lib/events/registrations.js +160 -5
- package/dist/lib/events/registrations.js.map +2 -2
- package/dist/lib/execute-render.js +25 -1
- package/dist/lib/execute-render.js.map +2 -2
- package/dist/lib/filter/filter-region.js +3 -10
- package/dist/lib/filter/filter-region.js.map +2 -2
- package/dist/lib/focus/focus-manager.d.ts +8 -1
- package/dist/lib/focus/focus-manager.js +87 -43
- package/dist/lib/focus/focus-manager.js.map +2 -2
- package/dist/lib/focus/geometry.d.ts +2 -0
- package/dist/lib/focus/geometry.js +6 -0
- package/dist/lib/focus/geometry.js.map +2 -2
- package/dist/lib/geometry/path-bend-guide.js +1 -1
- package/dist/lib/geometry/path-bend-guide.js.map +2 -2
- package/dist/lib/geometry/path-geometry.js +12 -11
- package/dist/lib/geometry/path-geometry.js.map +2 -2
- package/dist/lib/geometry/path-transforms.js +17 -21
- package/dist/lib/geometry/path-transforms.js.map +2 -2
- package/dist/lib/geometry/path-warp-bezier.js +3 -1
- package/dist/lib/geometry/path-warp-bezier.js.map +2 -2
- package/dist/lib/geometry/path-warp.js +1 -1
- package/dist/lib/geometry/path-warp.js.map +2 -2
- package/dist/lib/global-state.js +2 -0
- package/dist/lib/global-state.js.map +2 -2
- package/dist/lib/hooks/use-animated-value.d.ts +11 -21
- package/dist/lib/hooks/use-animated-value.js +23 -70
- package/dist/lib/hooks/use-animated-value.js.map +3 -3
- package/dist/lib/hooks/use-playback.js +1 -0
- package/dist/lib/hooks/use-playback.js.map +2 -2
- package/dist/lib/html/html-events.d.ts +32 -0
- package/dist/lib/html/html-events.js +179 -0
- package/dist/lib/html/html-events.js.map +7 -0
- package/dist/lib/html/html-service.d.ts +8 -2
- package/dist/lib/html/html-service.js +198 -65
- package/dist/lib/html/html-service.js.map +2 -2
- package/dist/lib/html/overlay-config.js +7 -6
- package/dist/lib/html/overlay-config.js.map +2 -2
- package/dist/lib/html/types.d.ts +29 -2
- package/dist/lib/layout/absolute.d.ts +11 -5
- package/dist/lib/layout/absolute.js +329 -55
- package/dist/lib/layout/absolute.js.map +3 -3
- package/dist/lib/layout/allocation-checkpoint-owner.d.ts +11 -0
- package/dist/lib/layout/allocation-checkpoint-owner.js +86 -0
- package/dist/lib/layout/allocation-checkpoint-owner.js.map +7 -0
- package/dist/lib/layout/allocation-checkpoint.d.ts +53 -0
- package/dist/lib/layout/allocation-checkpoint.js +463 -0
- package/dist/lib/layout/allocation-checkpoint.js.map +7 -0
- package/dist/lib/layout/allocation-dependencies.d.ts +30 -0
- package/dist/lib/layout/allocation-dependencies.js +90 -0
- package/dist/lib/layout/allocation-dependencies.js.map +7 -0
- package/dist/lib/layout/allocation-revision.d.ts +13 -0
- package/dist/lib/layout/allocation-revision.js +67 -0
- package/dist/lib/layout/allocation-revision.js.map +7 -0
- package/dist/lib/layout/box-insets.d.ts +17 -0
- package/dist/lib/layout/box-insets.js +138 -0
- package/dist/lib/layout/box-insets.js.map +7 -0
- package/dist/lib/layout/box-sizing.d.ts +16 -0
- package/dist/lib/layout/box-sizing.js +77 -0
- package/dist/lib/layout/box-sizing.js.map +7 -0
- package/dist/lib/layout/box.js +42 -12
- package/dist/lib/layout/box.js.map +2 -2
- package/dist/lib/layout/canvas-measurement.d.ts +13 -0
- package/dist/lib/layout/canvas-measurement.js +57 -0
- package/dist/lib/layout/canvas-measurement.js.map +7 -0
- package/dist/lib/layout/context.d.ts +35 -6
- package/dist/lib/layout/context.js +72 -3
- package/dist/lib/layout/context.js.map +2 -2
- package/dist/lib/layout/define-layout-component.d.ts +23 -0
- package/dist/lib/layout/define-layout-component.js +84 -0
- package/dist/lib/layout/define-layout-component.js.map +7 -0
- package/dist/lib/layout/flex-allocation-cache.d.ts +42 -0
- package/dist/lib/layout/flex-baseline-mode.d.ts +2 -0
- package/dist/lib/layout/flex-baseline-mode.js +7 -0
- package/dist/lib/layout/flex-baseline-mode.js.map +7 -0
- package/dist/lib/layout/flex.d.ts +50 -15
- package/dist/lib/layout/flex.js +2124 -195
- package/dist/lib/layout/flex.js.map +3 -3
- package/dist/lib/layout/flow.js +225 -49
- package/dist/lib/layout/flow.js.map +2 -2
- package/dist/lib/layout/geometry-publication.d.ts +53 -0
- package/dist/lib/layout/geometry-publication.js +244 -0
- package/dist/lib/layout/geometry-publication.js.map +7 -0
- package/dist/lib/layout/grid-kernel.d.ts +63 -0
- package/dist/lib/layout/grid-kernel.js +168 -0
- package/dist/lib/layout/grid-kernel.js.map +7 -0
- package/dist/lib/layout/grid.d.ts +63 -4
- package/dist/lib/layout/grid.js +767 -171
- package/dist/lib/layout/grid.js.map +3 -3
- package/dist/lib/layout/measure.d.ts +55 -3
- package/dist/lib/layout/measure.js +448 -15
- package/dist/lib/layout/measure.js.map +2 -2
- package/dist/lib/layout/overlay.js +81 -23
- package/dist/lib/layout/overlay.js.map +2 -2
- package/dist/lib/layout/participation.d.ts +27 -0
- package/dist/lib/layout/participation.js +188 -0
- package/dist/lib/layout/participation.js.map +7 -0
- package/dist/lib/layout/place-child.js +1 -1
- package/dist/lib/layout/place-child.js.map +2 -2
- package/dist/lib/layout/positioning-diagnostics.d.ts +1 -1
- package/dist/lib/layout/positioning-diagnostics.js +13 -2
- package/dist/lib/layout/positioning-diagnostics.js.map +2 -2
- package/dist/lib/layout/prepared-root.d.ts +121 -0
- package/dist/lib/layout/prepared-root.js +360 -0
- package/dist/lib/layout/prepared-root.js.map +7 -0
- package/dist/lib/layout/standalone-kernel.d.ts +60 -0
- package/dist/lib/layout/standalone-kernel.js +722 -0
- package/dist/lib/layout/standalone-kernel.js.map +7 -0
- package/dist/lib/layout/topology.d.ts +21 -0
- package/dist/lib/layout/topology.js +113 -0
- package/dist/lib/layout/topology.js.map +7 -0
- package/dist/lib/layout/types.d.ts +5 -0
- package/dist/lib/layout/wasm/artifact.d.ts +1 -0
- package/dist/lib/layout/wasm/artifact.js +5 -0
- package/dist/lib/layout/wasm/artifact.js.map +7 -0
- package/dist/lib/layout/wasm/bytes.d.ts +1 -0
- package/dist/lib/layout/wasm/bytes.js +5 -0
- package/dist/lib/layout/wasm/bytes.js.map +7 -0
- package/dist/lib/layout/wasm/embedded.d.ts +2 -0
- package/dist/lib/layout/wasm/embedded.js +12 -0
- package/dist/lib/layout/wasm/embedded.js.map +7 -0
- package/dist/lib/layout/wasm/layout.wasm +0 -0
- package/dist/lib/layout/wasm/module.d.ts +8 -0
- package/dist/lib/layout/wasm/module.js +70 -0
- package/dist/lib/layout/wasm/module.js.map +7 -0
- package/dist/lib/layout/wasm/region.d.ts +267 -0
- package/dist/lib/layout/wasm/region.js +1018 -0
- package/dist/lib/layout/wasm/region.js.map +7 -0
- package/dist/lib/manipulation/controller.js +4 -7
- package/dist/lib/manipulation/controller.js.map +2 -2
- package/dist/lib/manipulation/frame.js +1 -1
- package/dist/lib/manipulation/frame.js.map +2 -2
- package/dist/lib/manipulation/handles.js +32 -33
- package/dist/lib/manipulation/handles.js.map +2 -2
- package/dist/lib/manipulation/solve.js +12 -10
- package/dist/lib/manipulation/solve.js.map +2 -2
- package/dist/lib/mount-pibbl.js +1 -0
- package/dist/lib/mount-pibbl.js.map +2 -2
- package/dist/lib/mount-prepared-pibbl.d.ts +5 -0
- package/dist/lib/mount-prepared-pibbl.js +29 -0
- package/dist/lib/mount-prepared-pibbl.js.map +7 -0
- package/dist/lib/mount-request.d.ts +8 -0
- package/dist/lib/mount-request.js +41 -0
- package/dist/lib/mount-request.js.map +7 -0
- package/dist/lib/pibbl.d.ts +21 -13
- package/dist/lib/pibbl.js +18 -16
- package/dist/lib/pibbl.js.map +2 -2
- package/dist/lib/recording/recording.d.ts +43 -0
- package/dist/lib/recording/recording.js +555 -0
- package/dist/lib/recording/recording.js.map +7 -0
- package/dist/lib/recording/types.d.ts +118 -0
- package/dist/lib/recording/wasm-bytes.d.ts +1 -0
- package/dist/lib/recording/wasm-bytes.js +5 -0
- package/dist/lib/recording/wasm-bytes.js.map +7 -0
- package/dist/lib/recording/worker-source.d.ts +1 -0
- package/dist/lib/recording/worker-source.js +5 -0
- package/dist/lib/recording/worker-source.js.map +7 -0
- package/dist/lib/render-layer/controller.d.ts +9 -3
- package/dist/lib/render-layer/controller.js +259 -110
- package/dist/lib/render-layer/controller.js.map +2 -2
- package/dist/lib/render-transaction.d.ts +12 -2
- package/dist/lib/render-transaction.js +69 -1
- package/dist/lib/render-transaction.js.map +2 -2
- package/dist/lib/render.js +32 -8
- package/dist/lib/render.js.map +2 -2
- package/dist/lib/scheduler/realm-scheduler.d.ts +2 -0
- package/dist/lib/scheduler/realm-scheduler.js +55 -26
- package/dist/lib/scheduler/realm-scheduler.js.map +2 -2
- package/dist/lib/scheduler/renderer-participant.js +1 -0
- package/dist/lib/scheduler/renderer-participant.js.map +2 -2
- package/dist/lib/series-inspection-frame.d.ts +18 -0
- package/dist/lib/series-inspection-frame.js +70 -0
- package/dist/lib/series-inspection-frame.js.map +7 -0
- package/dist/lib/signals/edge.d.ts +7 -4
- package/dist/lib/signals/edge.js +25 -3
- package/dist/lib/signals/edge.js.map +2 -2
- package/dist/lib/signals/graph.d.ts +16 -2
- package/dist/lib/signals/graph.js +54 -12
- package/dist/lib/signals/graph.js.map +2 -2
- package/dist/lib/signals/input-provision.d.ts +15 -0
- package/dist/lib/signals/input-provision.js +53 -3
- package/dist/lib/signals/input-provision.js.map +2 -2
- package/dist/lib/signals/render-consumer.d.ts +3 -0
- package/dist/lib/signals/render-consumer.js +22 -14
- package/dist/lib/signals/render-consumer.js.map +2 -2
- package/dist/lib/style/positioning.d.ts +50 -2
- package/dist/lib/style/positioning.js +28 -4
- package/dist/lib/style/positioning.js.map +2 -2
- package/dist/lib/style/resolve-built-in.d.ts +4 -3
- package/dist/lib/style/resolve-built-in.js +17 -3
- package/dist/lib/style/resolve-built-in.js.map +2 -2
- package/dist/lib/style/resolve-dispatch.d.ts +3 -0
- package/dist/lib/style/resolve-dispatch.js +77 -4
- package/dist/lib/style/resolve-dispatch.js.map +2 -2
- package/dist/lib/style/resolve-length.d.ts +2 -0
- package/dist/lib/style/resolve-length.js +13 -9
- package/dist/lib/style/resolve-length.js.map +2 -2
- package/dist/lib/style/sizing-length.d.ts +51 -0
- package/dist/lib/style/sizing-length.js +77 -0
- package/dist/lib/style/sizing-length.js.map +7 -0
- package/dist/lib/style/types.d.ts +63 -25
- package/dist/lib/surface/root-surface.js +10 -6
- package/dist/lib/surface/root-surface.js.map +2 -2
- package/dist/lib/textures/texture.js +10 -8
- package/dist/lib/textures/texture.js.map +2 -2
- package/dist/lib/transitions/capture.js +4 -1
- package/dist/lib/transitions/capture.js.map +2 -2
- package/dist/lib/transitions/embers-physics.js +17 -10
- package/dist/lib/transitions/embers-physics.js.map +2 -2
- package/dist/lib/types.d.ts +110 -1
- package/dist/sync.d.ts +16 -0
- package/dist/sync.js +13 -0
- package/dist/sync.js.map +7 -0
- package/dist/sync.mjs +1 -0
- package/package.json +43 -6
- package/dist/features/viz/lib/scale.d.ts +0 -11
- package/dist/features/viz/lib/scale.js +0 -80
- package/dist/features/viz/lib/scale.js.map +0 -7
- package/dist/features/viz/lib/use-scale.d.ts +0 -20
- package/dist/features/viz/lib/use-scale.js +0 -10
- package/dist/features/viz/lib/use-scale.js.map +0 -7
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/lib/geometry/path-transforms.ts"],
|
|
4
|
-
"sourcesContent": ["import { PathGeometry } from './path-geometry.js';\nimport {\n bendSpans,\n bendSpanBounds,\n splitBendSpan,\n type BendSpan,\n} from './path-bend-spans.js';\nimport {\n absI,\n constant,\n add,\n sub,\n scale,\n mul,\n lerp,\n reciprocal,\n type Pair,\n} from './transform-math.js';\nimport {\n snapshotGuide,\n sampleGuide,\n type PathGuide,\n} from './transform-guide.js';\nimport {\n warpPath,\n type PathWarpCorners,\n type PathWarpMode,\n} from './path-warp.js';\n\n/**\n * A point in source or destination path coordinates.\n *\n * @see {@link PathTransform}\n * @see {@link PathRect}\n */\nexport interface PathPoint {\n /**\n * Horizontal coordinate or displacement in the containing coordinate system. See\n * {@link PathPoint}.\n */\n readonly x: number;\n /**\n * Vertical coordinate or displacement in the containing coordinate system. See {@link PathPoint}\n * .\n */\n readonly y: number;\n}\n/**\n * A source rectangle with an origin and finite positive dimensions.\n *\n * @see {@link PathPoint}\n * @see {@link QuadTransformOptions}\n * @see {@link EnvelopeTransformOptions}\n */\nexport interface PathRect extends PathPoint {\n /** Horizontal extent in the units of the containing geometry or surface. See {@link PathRect}. */\n readonly width: number;\n /** Vertical extent in the units of the containing geometry or surface. See {@link PathRect}. */\n readonly height: number;\n}\ndeclare const transformBrand: unique symbol;\n/**\n * A constructor-created, reusable coordinate mapping for path transformation.\n *\n * @see {@link PathPoint}\n * @see {@link transformPath}\n * @see {@link composeTransforms}\n * @see {@link affineTransform}\n */\nexport interface PathTransform {\n readonly [transformBrand]: true;\n /**\n * Evaluate in ordinary source/destination coordinates. Guide approximation is bounded by\n * tolerance.\n * @param point - Source point in the transform's input coordinate system. See {@link PathPoint}.\n * @param options - Optional approximation tolerance for evaluating the mapping.\n * @returns The mapped point in the transform's output coordinate system. See {@link PathPoint}.\n */\n mapPoint(\n point: PathPoint,\n options?: {\n /** Positive maximum geometric approximation error. See {@link PathTransform}. */\n readonly tolerance?: number;\n },\n ): PathPoint;\n}\n/**\n * Accuracy and output-segment limits for applying a path transform.\n *\n * @see {@link transformPath}\n */\nexport interface TransformPathOptions {\n /** Positive maximum geometric approximation error. See {@link TransformPathOptions}. */\n readonly tolerance: number;\n /** Upper bound on the number of output path segments. See {@link TransformPathOptions}. */\n readonly maxSegments?: number;\n}\n/**\n * The four destination corners used by a quadrilateral path transform.\n *\n * @see {@link QuadTransformOptions}\n */\nexport type PathQuadCorners = PathWarpCorners;\n/**\n * Selects bilinear or perspective interpolation for a quadrilateral transform.\n *\n * @see {@link QuadTransformOptions}\n */\nexport type PathQuadMode = PathWarpMode;\n/**\n * Source rectangle, destination corners, and interpolation mode for a quadrilateral transform.\n *\n * @see {@link PathRect}\n * @see {@link PathQuadCorners}\n * @see {@link PathQuadMode}\n * @see {@link quadTransform}\n */\nexport interface QuadTransformOptions {\n /** Source rectangle mapped to the destination quadrilateral. See {@link PathRect}. */\n readonly source: PathRect;\n /** Destination corners into which the source rectangle maps. See {@link PathQuadCorners}. */\n readonly destination: PathQuadCorners;\n /** Selects the supported mapping, placement, or result policy. See {@link PathQuadMode}. */\n readonly mode?: PathQuadMode;\n}\n/**\n * A guide path positioned at a normalized station across an envelope.\n *\n * @see {@link PathGuide}\n * @see {@link EnvelopeTransformOptions}\n */\nexport interface EnvelopeGuide {\n /** Normalized station position. See {@link EnvelopeGuide}. */\n readonly at: number;\n /** Path geometry used by this operation. See {@link PathGuide}. */\n readonly path: PathGuide;\n}\n/**\n * Source rectangle and either a top/bottom pair or ordered envelope guides.\n *\n * @see {@link PathRect}\n * @see {@link PathGuide}\n * @see {@link EnvelopeGuide}\n * @see {@link envelopeTransform}\n */\nexport type EnvelopeTransformOptions = {\n /** Source rectangle mapped between the envelope guides. See {@link PathRect}. */\n readonly source: PathRect;\n /** Interpolation between successive guide paths; only linear interpolation is supported. See {@link EnvelopeTransformOptions}. */\n readonly interpolation?: 'linear';\n} & (\n | {\n /** Top edge value or top envelope guide. See {@link PathGuide}. */\n readonly top: PathGuide;\n /** Bottom edge value or bottom envelope guide. See {@link PathGuide}. */\n readonly bottom: PathGuide;\n /**\n * Not accepted in this variant; use the alternative fields instead. See\n * {@link EnvelopeTransformOptions}.\n */\n readonly guides?: never;\n }\n | {\n /**\n * Ordered guide paths defining the envelope from its first to last station. See\n * {@link EnvelopeGuide}.\n */\n readonly guides: readonly EnvelopeGuide[];\n /**\n * Not accepted in this variant; use the alternative fields instead. See\n * {@link EnvelopeTransformOptions}.\n */\n readonly top?: never;\n /**\n * Not accepted in this variant; use the alternative fields instead. See\n * {@link EnvelopeTransformOptions}.\n */\n readonly bottom?: never;\n }\n);\nexport type {\n PathGuide,\n PathGuideOptions,\n PathGuideStation,\n} from './transform-guide.js';\n\nexport interface Stage {\n apply?(path: PathGeometry, options: TransformPathOptions): PathGeometry;\n evaluate(input: Pair): Pair;\n error(input: Pair): number;\n domain?(point: Pair, margin: number): boolean;\n affine?: Affine;\n}\nexport type Factory = (accuracy: number) => Stage;\nconst definitions = new WeakMap<PathTransform, readonly Factory[]>();\nconst MAX_WORK = 2_000_000;\nexport const coordinate = (value: number, label = 'coordinate') => {\n if (typeof value !== 'number')\n throw new TypeError(`${label} must be a number.`);\n if (!Number.isFinite(value)) throw new RangeError(`${label} must be finite.`);\n return value;\n};\nexport const positive = (value: number, label: string) => {\n coordinate(value, label);\n if (value <= 0) throw new RangeError(`${label} must be positive.`);\n return value;\n};\nexport function rectangle(input: PathRect): PathRect {\n return {\n x: coordinate(input?.x),\n y: coordinate(input?.y),\n width: positive(input?.width, 'source.width'),\n height: positive(input?.height, 'source.height'),\n };\n}\nexport const normalize = (input: Pair, r: PathRect): Pair => [\n scale(sub(input[0], constant(r.x)), 1 / r.width),\n scale(sub(input[1], constant(r.y)), 1 / r.height),\n];\nexport function make(factories: readonly Factory[]): PathTransform {\n // One cached preparation only; drag sessions cannot grow a tolerance cache indefinitely.\n let cachedAccuracy = NaN,\n cached: readonly Stage[] = [];\n const prepare = (accuracy: number) => {\n if (accuracy !== cachedAccuracy) {\n cached = factories.map((f) => f(accuracy));\n cachedAccuracy = accuracy;\n }\n return cached;\n };\n const value = Object.freeze({\n mapPoint(point: PathPoint, options: { tolerance?: number } = {}) {\n const tolerance = positive(options.tolerance ?? 0.0001, 'tolerance');\n const input: Pair = [\n constant(coordinate(point?.x)),\n constant(coordinate(point?.y)),\n ];\n for (\n let accuracy = tolerance / 16, attempt = 0;\n attempt < 9;\n attempt++, accuracy /= 16\n ) {\n const result = evaluate(prepare(accuracy), input);\n const x = result.value[0].v[0],\n y = result.value[1].v[0];\n if (!result.domain)\n throw new RangeError(\n 'Point lies outside a transformation source rectangle.',\n );\n if (result.error + roundoff(result.value) <= tolerance)\n return { x: coordinate(x), y: coordinate(y) };\n }\n throw new RangeError(\n 'Cannot certify point accuracy at available precision.',\n );\n },\n }) as PathTransform;\n definitions.set(value, factories);\n return value;\n}\nfunction definition(value: PathTransform): readonly Factory[] {\n const result = definitions.get(value);\n if (!result)\n throw new TypeError('Expected a constructor-created PathTransform.');\n return result;\n}\n/**\n * Apply mappings in the order written. Empty composition is identity.\n *\n * @param transforms - Point mappings in the order they should be applied. See\n * {@link PathTransform} .\n * @returns One mapping that applies each supplied transform in order. See {@link PathTransform}.\n *\n * @see {@link PathTransform}\n */\nexport function composeTransforms(\n ...transforms: readonly PathTransform[]\n): PathTransform {\n return make(transforms.flatMap((t) => [...definition(t)]));\n}\n/**\n * Creates a reusable 2D affine mapping; an omitted matrix produces identity.\n *\n * @param matrix - Affine matrix coefficients; omitted coefficients use the identity matrix.\n * @returns A point mapping applying the matrix. See {@link PathTransform}.\n *\n * @see {@link PathTransform}\n */\nexport function affineTransform(matrix: DOMMatrix2DInit = {}): PathTransform {\n const m = affineMatrix(matrix);\n return make([\n () => ({\n affine: m,\n error: () => 0,\n evaluate: ([x, y]) => [\n add(add(scale(x, m.a), scale(y, m.c)), constant(m.e)),\n add(add(scale(x, m.b), scale(y, m.d)), constant(m.f)),\n ],\n }),\n ]);\n}\n/**\n * Maps a source rectangle into four destination corners using bilinear or perspective\n * interpolation.\n *\n * @param options - Source rectangle and destination corner positions. See\n * {@link QuadTransformOptions} .\n * @returns A point mapping from the source rectangle to the destination quadrilateral. See\n * {@link PathTransform} .\n *\n * @see {@link QuadTransformOptions}\n * @see {@link PathTransform}\n */\nexport function quadTransform(options: QuadTransformOptions): PathTransform {\n const source = rectangle(options.source),\n mode = options.mode === undefined ? 'bilinear' : options.mode;\n const names = ['topLeft', 'topRight', 'bottomLeft', 'bottomRight'] as const;\n const corners = names.map((n) => ({\n x: coordinate(options.destination?.[n]?.x),\n y: coordinate(options.destination?.[n]?.y),\n }));\n const destination = Object.fromEntries(\n names.map((n, i) => [n, corners[i]]),\n ) as unknown as PathWarpCorners;\n // Reuse the existing convexity/pole validation, including empty geometry validation.\n warpPath(new PathGeometry(), { source, destination, mode, tolerance: 1 });\n const [a, b, c, d] = corners;\n const dx1 = b.x - d.x,\n dx2 = c.x - d.x,\n dx3 = a.x - b.x - c.x + d.x;\n const dy1 = b.y - d.y,\n dy2 = c.y - d.y,\n dy3 = a.y - b.y - c.y + d.y;\n const det = dx1 * dy2 - dx2 * dy1;\n const g = mode === 'perspective' ? (dx3 * dy2 - dx2 * dy3) / det : 0;\n const h = mode === 'perspective' ? (dx1 * dy3 - dx3 * dy1) / det : 0;\n return make([\n () => ({\n apply: (path, quality) =>\n warpPath(path, {\n source,\n destination,\n mode,\n tolerance: quality.tolerance,\n maxSegments: quality.maxSegments,\n }),\n error: () => 0,\n evaluate: (input) => {\n const [u, v] = normalize(input, source);\n if (mode === 'bilinear')\n return [\n lerp(\n lerp(constant(a.x), constant(b.x), u),\n lerp(constant(c.x), constant(d.x), u),\n v,\n ),\n lerp(\n lerp(constant(a.y), constant(b.y), u),\n lerp(constant(c.y), constant(d.y), u),\n v,\n ),\n ];\n const w = reciprocal(add(add(scale(u, g), scale(v, h)), constant(1)));\n return [\n mul(\n add(\n add(scale(u, b.x - a.x + g * b.x), scale(v, c.x - a.x + h * c.x)),\n constant(a.x),\n ),\n w,\n ),\n mul(\n add(\n add(scale(u, b.y - a.y + g * b.y), scale(v, c.y - a.y + h * c.y)),\n constant(a.y),\n ),\n w,\n ),\n ];\n },\n }),\n ]);\n}\n/**\n * Maps a source rectangle between ordered guide paths using linear interpolation.\n *\n * @param options - Source bounds and envelope guides defining the deformation. See\n * {@link EnvelopeTransformOptions} .\n * @returns A point mapping that deforms the source into the envelope. See {@link PathTransform}.\n *\n * @see {@link EnvelopeTransformOptions}\n * @see {@link PathTransform}\n */\nexport function envelopeTransform(\n options: EnvelopeTransformOptions,\n): PathTransform {\n const source = rectangle(options.source);\n if (options.interpolation !== undefined && options.interpolation !== 'linear')\n throw new TypeError('Unsupported envelope interpolation.');\n if (options.guides && (options.top || options.bottom))\n throw new TypeError('Specify guides or top/bottom, not both.');\n const guides = (\n options.guides ?? [\n { at: 0, path: options.top! },\n { at: 1, path: options.bottom! },\n ]\n ).map((g) => ({ at: coordinate(g.at), guide: snapshotGuide(g.path) }));\n if (\n guides.length < 2 ||\n guides[0].at !== 0 ||\n guides.at(-1)!.at !== 1 ||\n guides.some((g, i) => i > 0 && g.at <= guides[i - 1].at)\n )\n throw new RangeError('Envelope guides must strictly increase from 0 to 1.');\n return make([\n (accuracy) => {\n const sampled = guides.map((g) => sampleGuide(g.guide, accuracy));\n const error = Math.max(...sampled.map((g) => g.error));\n const evaluateBand = (input: Pair, i: number): Pair => {\n const [u, v] = normalize(input, source),\n a = sampled[i].evaluate(u),\n b = sampled[i + 1].evaluate(u);\n const t = scale(\n sub(v, constant(guides[i].at)),\n 1 / (guides[i + 1].at - guides[i].at),\n );\n return [lerp(a[0], b[0], t), lerp(a[1], b[1], t)];\n };\n return {\n error: () => error,\n domain: (input, margin) =>\n input[0].v[0] >= source.x - margin &&\n input[0].v[1] <= source.x + source.width + margin &&\n input[1].v[0] >= source.y - margin &&\n input[1].v[1] <= source.y + source.height + margin,\n evaluate: (input) => {\n const v0 = (input[1].v[0] - source.y) / source.height,\n v1 = (input[1].v[1] - source.y) / source.height;\n let first = 0;\n while (first < guides.length - 2 && guides[first + 1].at <= v0)\n first++;\n let last = first;\n while (last < guides.length - 2 && guides[last + 1].at < v1) last++;\n if (first === last) return evaluateBand(input, first);\n const outputs: Pair[] = [];\n for (let i = first; i <= last; i++) {\n const y = {\n ...input[1],\n v: [\n Math.max(\n input[1].v[0],\n source.y + guides[i].at * source.height,\n ),\n Math.min(\n input[1].v[1],\n source.y + guides[i + 1].at * source.height,\n ),\n ] as const,\n };\n outputs.push(evaluateBand([input[0], y], i));\n }\n return [0, 1].map((axis) => ({\n v: [\n Math.min(...outputs.map((p) => p[axis].v[0])),\n Math.max(...outputs.map((p) => p[axis].v[1])),\n ],\n d: [\n Math.min(...outputs.map((p) => p[axis].d[0])),\n Math.max(...outputs.map((p) => p[axis].d[1])),\n ],\n dd: [-Infinity, Infinity],\n })) as unknown as Pair;\n },\n };\n },\n ]);\n}\nfunction roundoff(pair: Pair): number {\n return Number.EPSILON * 512 * Math.max(1, ...pair.map((p) => absI(p.v)));\n}\nfunction evaluate(\n stages: readonly Stage[],\n input: Pair,\n): { value: Pair; error: number; domain: boolean } {\n let value = input,\n error = 0,\n domain = true;\n for (const stage of stages) {\n // Bound propagation of guide approximation through every later map via its Jacobian.\n if (error > 0) {\n const box = value.map((p) => ({\n v: [p.v[0] - error, p.v[1] + error] as const,\n d: [0, 0] as const,\n dd: [0, 0] as const,\n })) as unknown as Pair;\n const dx = stage.evaluate([{ ...box[0], d: [1, 1] }, box[1]]);\n const dy = stage.evaluate([box[0], { ...box[1], d: [1, 1] }]);\n error *= Math.hypot(\n absI(dx[0].d),\n absI(dx[1].d),\n absI(dy[0].d),\n absI(dy[1].d),\n );\n }\n domain &&= stage.domain?.(value, roundoff(value)) ?? true;\n error += stage.error(value);\n value = stage.evaluate(value);\n }\n return { value, error, domain };\n}\n/**\n * Return independent geometry. Nonlinear mappings approximate the final composed curve once.\n *\n * @param path - Source geometry; it is not modified. See {@link PathGeometry}.\n * @param transform - Point mapping to apply to the source. See {@link PathTransform}.\n * @param options - Approximation tolerance and work limits for transformed curves. See\n * {@link TransformPathOptions} .\n * @returns Independent geometry containing the transformed path. See {@link PathGeometry}.\n *\n * @see {@link PathGeometry}\n * @see {@link PathTransform}\n * @see {@link TransformPathOptions}\n */\nexport function transformPath(\n path: PathGeometry,\n transform: PathTransform,\n options: TransformPathOptions,\n): PathGeometry {\n if (!(path instanceof PathGeometry))\n throw new TypeError('transformPath requires PathGeometry.');\n const factories = definition(transform),\n tolerance = positive(options?.tolerance, 'tolerance');\n const maxSegments = positive(\n options.maxSegments === undefined ? 1_000_000 : options.maxSegments,\n 'maxSegments',\n );\n if (!Number.isSafeInteger(maxSegments))\n throw new RangeError('maxSegments must be a safe integer.');\n let work = 0;\n for (\n let attempt = 0, accuracy = tolerance / 32;\n attempt < 9;\n attempt++, accuracy /= 16\n ) {\n const stages = factories.map((f) => f(accuracy));\n if (stages.length === 1 && stages[0].apply)\n return stages[0].apply(path, options);\n if (stages.every((s) => s.affine)) {\n if (path.segmentCount > maxSegments)\n throw new RangeError('transformPath exceeded maxSegments.');\n let result = path.clone();\n for (const s of stages) result = applyAffine(result, s.affine!);\n return result;\n }\n const output = new PathGeometry();\n let retry = false;\n const reserve = () => {\n if (output.segmentCount >= maxSegments)\n throw new RangeError('transformPath exceeded maxSegments.');\n };\n for (const item of bendSpans(path)) {\n if (item.type === 'close') {\n reserve();\n output.closePath();\n continue;\n }\n if (item.type === 'move') {\n const r = evaluate(stages, [\n constant(item.point[0]),\n constant(item.point[1]),\n ]);\n if (!r.domain)\n throw new RangeError(\n 'Path lies outside a transformation source rectangle.',\n );\n if (r.error > tolerance / 4) {\n retry = true;\n break;\n }\n if (r.error + roundoff(r.value) > tolerance)\n throw new RangeError('Cannot certify transform precision.');\n reserve();\n output.moveTo(coordinate(r.value[0].v[0]), coordinate(r.value[1].v[0]));\n continue;\n }\n const stack: { span: BendSpan; depth: number }[] = [\n { span: item.span, depth: 0 },\n ];\n while (stack.length) {\n if (++work > MAX_WORK)\n throw new RangeError('transformPath exceeded its work limit.');\n const { span, depth } = stack.pop()!,\n b = bendSpanBounds(span);\n const r = evaluate(stages, [\n { v: [b.xmin, b.xmax], d: [-b.dx, b.dx], dd: [-b.ddx, b.ddx] },\n { v: [b.ymin, b.ymax], d: [-b.dy, b.dy], dd: [-b.ddy, b.ddy] },\n ]);\n if (r.error > tolerance / 4) {\n retry = true;\n break;\n }\n const second = Math.hypot(absI(r.value[0].dd), absI(r.value[1].dd)) / 8;\n // A Lipschitz bound also covers piecewise-smooth guides and crossed cell boundaries.\n const first = Math.hypot(absI(r.value[0].d), absI(r.value[1].d)) / 2;\n const bound = Math.min(second, first) + 2 * r.error + roundoff(r.value);\n if (r.domain && bound <= tolerance) {\n const end =\n 'points' in span\n ? span.points.at(-1)!\n : [\n span.arc.cx +\n span.arc.ux *\n Math.cos(span.arc.startAngle + span.arc.sweep) +\n span.arc.vx *\n Math.sin(span.arc.startAngle + span.arc.sweep),\n span.arc.cy +\n span.arc.uy *\n Math.cos(span.arc.startAngle + span.arc.sweep) +\n span.arc.vy *\n Math.sin(span.arc.startAngle + span.arc.sweep),\n ];\n const p = evaluate(stages, [constant(end[0]), constant(end[1])]);\n reserve();\n output.lineTo(\n coordinate(p.value[0].v[0]),\n coordinate(p.value[1].v[0]),\n );\n } else {\n if (depth >= 52)\n throw new RangeError(\n 'Cannot certify transform tolerance or source domain.',\n );\n const [left, right] = splitBendSpan(span);\n stack.push(\n { span: right, depth: depth + 1 },\n { span: left, depth: depth + 1 },\n );\n }\n }\n if (retry) break;\n }\n if (!retry) return output;\n }\n throw new RangeError('Cannot certify composed guide accuracy.');\n}\n\n/** @internal Merge cell enclosures; derivatives may jump at the shared edge. */\nexport function mergePairs(outputs: readonly Pair[]): Pair {\n return [0, 1].map((axis) => ({\n v: [\n Math.min(...outputs.map((p) => p[axis].v[0])),\n Math.max(...outputs.map((p) => p[axis].v[1])),\n ],\n d: [\n Math.min(...outputs.map((p) => p[axis].d[0])),\n Math.max(...outputs.map((p) => p[axis].d[1])),\n ],\n dd: [-Infinity, Infinity],\n })) as unknown as Pair;\n}\nexport function sourceDomain(\n input: Pair,\n source: PathRect,\n margin: number,\n): boolean {\n return (\n input[0].v[0] >= source.x - margin &&\n input[0].v[1] <= source.x + source.width + margin &&\n input[1].v[0] >= source.y - margin &&\n input[1].v[1] <= source.y + source.height + margin\n );\n}\nexport { meshTransform, type MeshTransformOptions } from './transform-mesh.js';\nexport {\n arcBendTransform,\n pathBendTransform,\n type ArcBendTransformOptions,\n type PathBendTransformOptions,\n type BendTransformOptions,\n} from './transform-bend.js';\n\ninterface Affine {\n readonly a: number;\n readonly b: number;\n readonly c: number;\n readonly d: number;\n readonly e: number;\n readonly f: number;\n}\nfunction affineMatrix(matrix: DOMMatrix2DInit): Affine {\n if (!matrix || typeof matrix !== 'object')\n throw new TypeError('Expected a finite 2D affine matrix.');\n const value = matrix as DOMMatrixInit;\n if (\n value.is2D === false ||\n ['m13', 'm14', 'm23', 'm24', 'm31', 'm32', 'm34', 'm43'].some(\n (k) =>\n value[k as keyof DOMMatrixInit] !== undefined &&\n value[k as keyof DOMMatrixInit] !== 0,\n ) ||\n [value.m33, value.m44].some((n) => n !== undefined && n !== 1)\n )\n throw new RangeError('Expected a finite 2D affine matrix.');\n const pairs = [\n ['a', 'm11', 1],\n ['b', 'm12', 0],\n ['c', 'm21', 0],\n ['d', 'm22', 1],\n ['e', 'm41', 0],\n ['f', 'm42', 0],\n ] as const;\n const result = {} as Record<string, number>;\n for (const [key, alias, fallback] of pairs) {\n const a = value[key],\n b = value[alias];\n if (a !== undefined && b !== undefined && a !== b)\n throw new TypeError('Conflicting affine matrix aliases.');\n result[key] = coordinate(\n a === undefined ? (b === undefined ? fallback : b) : a,\n );\n }\n return result as unknown as Affine;\n}\nfunction applyAffine(path: PathGeometry, m: Affine): PathGeometry {\n const p = (x: number, y: number, vector = false) => ({\n x: coordinate(m.a * x + m.c * y + (vector ? 0 : m.e)),\n y: coordinate(m.b * x + m.d * y + (vector ? 0 : m.f)),\n });\n const segments = Array.from(path, (segment) => {\n switch (segment.type) {\n case 'close':\n return segment;\n case 'move':\n case 'line':\n return { ...segment, ...p(segment.x, segment.y) };\n case 'quadratic': {\n const control = p(segment.cpx, segment.cpy);\n return {\n ...segment,\n ...p(segment.x, segment.y),\n cpx: control.x,\n cpy: control.y,\n };\n }\n case 'cubic': {\n const a = p(segment.cp1x, segment.cp1y),\n b = p(segment.cp2x, segment.cp2y);\n return {\n ...segment,\n ...p(segment.x, segment.y),\n cp1x: a.x,\n cp1y: a.y,\n cp2x: b.x,\n cp2y: b.y,\n };\n }\n case 'arc': {\n const center = p(segment.cx, segment.cy),\n u = p(segment.ux, segment.uy, true),\n v = p(segment.vx, segment.vy, true);\n return {\n ...segment,\n cx: center.x,\n cy: center.y,\n ux: u.x,\n uy: u.y,\n vx: v.x,\n vy: v.y,\n };\n }\n }\n });\n const result = new PathGeometry();\n result.spliceSegments(0, 0, segments);\n return result;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { PathGeometry } from './path-geometry.js';\nimport {\n bendSpans,\n bendSpanBounds,\n splitBendSpan,\n type BendSpan,\n} from './path-bend-spans.js';\nimport {\n absI,\n constant,\n add,\n sub,\n scale,\n mul,\n lerp,\n reciprocal,\n type Pair,\n} from './transform-math.js';\nimport {\n snapshotGuide,\n sampleGuide,\n type PathGuide,\n} from './transform-guide.js';\nimport {\n warpPath,\n type PathWarpCorners,\n type PathWarpMode,\n} from './path-warp.js';\n\n/**\n * A point in source or destination path coordinates.\n *\n * @see {@link PathTransform}\n * @see {@link PathRect}\n */\nexport interface PathPoint {\n /**\n * Horizontal coordinate or displacement in the containing coordinate system. See\n * {@link PathPoint}.\n */\n readonly x: number;\n /**\n * Vertical coordinate or displacement in the containing coordinate system. See {@link PathPoint}\n * .\n */\n readonly y: number;\n}\n/**\n * A source rectangle with an origin and finite positive dimensions.\n *\n * @see {@link PathPoint}\n * @see {@link QuadTransformOptions}\n * @see {@link EnvelopeTransformOptions}\n */\nexport interface PathRect extends PathPoint {\n /** Horizontal extent in the units of the containing geometry or surface. See {@link PathRect}. */\n readonly width: number;\n /** Vertical extent in the units of the containing geometry or surface. See {@link PathRect}. */\n readonly height: number;\n}\ndeclare const transformBrand: unique symbol;\n/**\n * A constructor-created, reusable coordinate mapping for path transformation.\n *\n * @see {@link PathPoint}\n * @see {@link transformPath}\n * @see {@link composeTransforms}\n * @see {@link affineTransform}\n */\nexport interface PathTransform {\n readonly [transformBrand]: true;\n /**\n * Evaluate in ordinary source/destination coordinates. Guide approximation is bounded by\n * tolerance.\n * @param point - Source point in the transform's input coordinate system. See {@link PathPoint}.\n * @param options - Optional approximation tolerance for evaluating the mapping.\n * @returns The mapped point in the transform's output coordinate system. See {@link PathPoint}.\n */\n mapPoint(\n point: PathPoint,\n options?: {\n /** Positive maximum geometric approximation error. See {@link PathTransform}. */\n readonly tolerance?: number;\n },\n ): PathPoint;\n}\n/**\n * Accuracy and output-segment limits for applying a path transform.\n *\n * @see {@link transformPath}\n */\nexport interface TransformPathOptions {\n /** Positive maximum geometric approximation error. See {@link TransformPathOptions}. */\n readonly tolerance: number;\n /** Upper bound on the number of output path segments. See {@link TransformPathOptions}. */\n readonly maxSegments?: number;\n}\n/**\n * The four destination corners used by a quadrilateral path transform.\n *\n * @see {@link QuadTransformOptions}\n */\nexport type PathQuadCorners = PathWarpCorners;\n/**\n * Selects bilinear or perspective interpolation for a quadrilateral transform.\n *\n * @see {@link QuadTransformOptions}\n */\nexport type PathQuadMode = PathWarpMode;\n/**\n * Source rectangle, destination corners, and interpolation mode for a quadrilateral transform.\n *\n * @see {@link PathRect}\n * @see {@link PathQuadCorners}\n * @see {@link PathQuadMode}\n * @see {@link quadTransform}\n */\nexport interface QuadTransformOptions {\n /** Source rectangle mapped to the destination quadrilateral. See {@link PathRect}. */\n readonly source: PathRect;\n /** Destination corners into which the source rectangle maps. See {@link PathQuadCorners}. */\n readonly destination: PathQuadCorners;\n /** Selects the supported mapping, placement, or result policy. See {@link PathQuadMode}. */\n readonly mode?: PathQuadMode;\n}\n/**\n * A guide path positioned at a normalized station across an envelope.\n *\n * @see {@link PathGuide}\n * @see {@link EnvelopeTransformOptions}\n */\nexport interface EnvelopeGuide {\n /** Normalized station position. See {@link EnvelopeGuide}. */\n readonly at: number;\n /** Path geometry used by this operation. See {@link PathGuide}. */\n readonly path: PathGuide;\n}\n/**\n * Source rectangle and either a top/bottom pair or ordered envelope guides.\n *\n * @see {@link PathRect}\n * @see {@link PathGuide}\n * @see {@link EnvelopeGuide}\n * @see {@link envelopeTransform}\n */\nexport type EnvelopeTransformOptions = {\n /** Source rectangle mapped between the envelope guides. See {@link PathRect}. */\n readonly source: PathRect;\n /** Interpolation between successive guide paths; only linear interpolation is supported. See {@link EnvelopeTransformOptions}. */\n readonly interpolation?: 'linear';\n} & (\n | {\n /** Top edge value or top envelope guide. See {@link PathGuide}. */\n readonly top: PathGuide;\n /** Bottom edge value or bottom envelope guide. See {@link PathGuide}. */\n readonly bottom: PathGuide;\n /**\n * Not accepted in this variant; use the alternative fields instead. See\n * {@link EnvelopeTransformOptions}.\n */\n readonly guides?: never;\n }\n | {\n /**\n * Ordered guide paths defining the envelope from its first to last station. See\n * {@link EnvelopeGuide}.\n */\n readonly guides: readonly EnvelopeGuide[];\n /**\n * Not accepted in this variant; use the alternative fields instead. See\n * {@link EnvelopeTransformOptions}.\n */\n readonly top?: never;\n /**\n * Not accepted in this variant; use the alternative fields instead. See\n * {@link EnvelopeTransformOptions}.\n */\n readonly bottom?: never;\n }\n);\nexport type {\n PathGuide,\n PathGuideOptions,\n PathGuideStation,\n} from './transform-guide.js';\n\nexport interface Stage {\n apply?(path: PathGeometry, options: TransformPathOptions): PathGeometry;\n evaluate(input: Pair): Pair;\n error(input: Pair): number;\n domain?(point: Pair, margin: number): boolean;\n affine?: Affine;\n}\nexport type Factory = (accuracy: number) => Stage;\nconst definitions = new WeakMap<PathTransform, readonly Factory[]>();\nconst MAX_WORK = 2_000_000;\nexport const coordinate = (value: number, label = 'coordinate') => {\n if (typeof value !== 'number')\n throw new TypeError(`${label} must be a number.`);\n if (!Number.isFinite(value)) throw new RangeError(`${label} must be finite.`);\n return value;\n};\nexport const positive = (value: number, label: string) => {\n coordinate(value, label);\n if (value <= 0) throw new RangeError(`${label} must be positive.`);\n return value;\n};\nexport function rectangle(input: PathRect): PathRect {\n return {\n x: coordinate(input?.x),\n y: coordinate(input?.y),\n width: positive(input?.width, 'source.width'),\n height: positive(input?.height, 'source.height'),\n };\n}\nexport const normalize = (input: Pair, r: PathRect): Pair => [\n scale(sub(input[0], constant(r.x)), 1 / r.width),\n scale(sub(input[1], constant(r.y)), 1 / r.height),\n];\nexport function make(factories: readonly Factory[]): PathTransform {\n // One cached preparation only; drag sessions cannot grow a tolerance cache indefinitely.\n let cachedAccuracy = NaN,\n cached: readonly Stage[] = [];\n const prepare = (accuracy: number) => {\n if (accuracy !== cachedAccuracy) {\n cached = factories.map((f) => f(accuracy));\n cachedAccuracy = accuracy;\n }\n return cached;\n };\n const value = Object.freeze({\n mapPoint(point: PathPoint, options: { tolerance?: number } = {}) {\n const tolerance = positive(options.tolerance ?? 0.0001, 'tolerance');\n const input: Pair = [\n constant(coordinate(point?.x)),\n constant(coordinate(point?.y)),\n ];\n for (\n let accuracy = tolerance / 16, attempt = 0;\n attempt < 9;\n attempt++, accuracy /= 16\n ) {\n const result = evaluate(prepare(accuracy), input);\n const x = result.value[0].v[0],\n y = result.value[1].v[0];\n if (!result.domain)\n throw new RangeError(\n 'Point lies outside a transformation source rectangle.',\n );\n if (result.error + roundoff(result.value) <= tolerance)\n return { x: coordinate(x), y: coordinate(y) };\n }\n throw new RangeError(\n 'Cannot certify point accuracy at available precision.',\n );\n },\n }) as PathTransform;\n definitions.set(value, factories);\n return value;\n}\nfunction definition(value: PathTransform): readonly Factory[] {\n const result = definitions.get(value);\n if (!result)\n throw new TypeError('Expected a constructor-created PathTransform.');\n return result;\n}\n/**\n * Apply mappings in the order written. Empty composition is identity.\n *\n * @param transforms - Point mappings in the order they should be applied. See\n * {@link PathTransform} .\n * @returns One mapping that applies each supplied transform in order. See {@link PathTransform}.\n *\n * @see {@link PathTransform}\n */\nexport function composeTransforms(\n ...transforms: readonly PathTransform[]\n): PathTransform {\n return make(transforms.flatMap((t) => [...definition(t)]));\n}\n/**\n * Creates a reusable 2D affine mapping; an omitted matrix produces identity.\n *\n * @param matrix - Affine matrix coefficients; omitted coefficients use the identity matrix.\n * @returns A point mapping applying the matrix. See {@link PathTransform}.\n *\n * @see {@link PathTransform}\n */\nexport function affineTransform(matrix: DOMMatrix2DInit = {}): PathTransform {\n const m = affineMatrix(matrix);\n return make([\n () => ({\n affine: m,\n error: () => 0,\n evaluate: ([x, y]) => [\n add(add(scale(x, m.a), scale(y, m.c)), constant(m.e)),\n add(add(scale(x, m.b), scale(y, m.d)), constant(m.f)),\n ],\n }),\n ]);\n}\n/**\n * Maps a source rectangle into four destination corners using bilinear or perspective\n * interpolation.\n *\n * @param options - Source rectangle and destination corner positions. See\n * {@link QuadTransformOptions} .\n * @returns A point mapping from the source rectangle to the destination quadrilateral. See\n * {@link PathTransform} .\n *\n * @see {@link QuadTransformOptions}\n * @see {@link PathTransform}\n */\nexport function quadTransform(options: QuadTransformOptions): PathTransform {\n const source = rectangle(options.source),\n mode = options.mode === undefined ? 'bilinear' : options.mode;\n const names = ['topLeft', 'topRight', 'bottomLeft', 'bottomRight'] as const;\n const corners = names.map((n) => ({\n x: coordinate(options.destination?.[n]?.x),\n y: coordinate(options.destination?.[n]?.y),\n }));\n const destination = Object.fromEntries(\n names.map((n, i) => [n, corners[i]]),\n ) as unknown as PathWarpCorners;\n // Reuse the existing convexity/pole validation, including empty geometry validation.\n warpPath(new PathGeometry(), { source, destination, mode, tolerance: 1 });\n const [a, b, c, d] = corners;\n const dx1 = b.x - d.x,\n dx2 = c.x - d.x,\n dx3 = a.x - b.x - c.x + d.x;\n const dy1 = b.y - d.y,\n dy2 = c.y - d.y,\n dy3 = a.y - b.y - c.y + d.y;\n const det = dx1 * dy2 - dx2 * dy1;\n const g = mode === 'perspective' ? (dx3 * dy2 - dx2 * dy3) / det : 0;\n const h = mode === 'perspective' ? (dx1 * dy3 - dx3 * dy1) / det : 0;\n return make([\n () => ({\n apply: (path, quality) =>\n warpPath(path, {\n source,\n destination,\n mode,\n tolerance: quality.tolerance,\n maxSegments: quality.maxSegments,\n }),\n error: () => 0,\n evaluate: (input) => {\n const [u, v] = normalize(input, source);\n if (mode === 'bilinear')\n return [\n lerp(\n lerp(constant(a.x), constant(b.x), u),\n lerp(constant(c.x), constant(d.x), u),\n v,\n ),\n lerp(\n lerp(constant(a.y), constant(b.y), u),\n lerp(constant(c.y), constant(d.y), u),\n v,\n ),\n ];\n const w = reciprocal(add(add(scale(u, g), scale(v, h)), constant(1)));\n return [\n mul(\n add(\n add(scale(u, b.x - a.x + g * b.x), scale(v, c.x - a.x + h * c.x)),\n constant(a.x),\n ),\n w,\n ),\n mul(\n add(\n add(scale(u, b.y - a.y + g * b.y), scale(v, c.y - a.y + h * c.y)),\n constant(a.y),\n ),\n w,\n ),\n ];\n },\n }),\n ]);\n}\n/**\n * Maps a source rectangle between ordered guide paths using linear interpolation.\n *\n * @param options - Source bounds and envelope guides defining the deformation. See\n * {@link EnvelopeTransformOptions} .\n * @returns A point mapping that deforms the source into the envelope. See {@link PathTransform}.\n *\n * @see {@link EnvelopeTransformOptions}\n * @see {@link PathTransform}\n */\nexport function envelopeTransform(\n options: EnvelopeTransformOptions,\n): PathTransform {\n const source = rectangle(options.source);\n if (options.interpolation !== undefined && options.interpolation !== 'linear')\n throw new TypeError('Unsupported envelope interpolation.');\n if (options.guides && (options.top || options.bottom))\n throw new TypeError('Specify guides or top/bottom, not both.');\n const guides = (\n options.guides ?? [\n { at: 0, path: options.top! },\n { at: 1, path: options.bottom! },\n ]\n ).map((g) => ({ at: coordinate(g.at), guide: snapshotGuide(g.path) }));\n if (\n guides.length < 2 ||\n guides[0].at !== 0 ||\n guides.at(-1)!.at !== 1 ||\n guides.some((g, i) => i > 0 && g.at <= guides[i - 1].at)\n )\n throw new RangeError('Envelope guides must strictly increase from 0 to 1.');\n return make([\n (accuracy) => {\n const sampled = guides.map((g) => sampleGuide(g.guide, accuracy));\n const error = Math.max(...sampled.map((g) => g.error));\n const evaluateBand = (input: Pair, i: number): Pair => {\n const [u, v] = normalize(input, source),\n a = sampled[i].evaluate(u),\n b = sampled[i + 1].evaluate(u);\n const t = scale(\n sub(v, constant(guides[i].at)),\n 1 / (guides[i + 1].at - guides[i].at),\n );\n return [lerp(a[0], b[0], t), lerp(a[1], b[1], t)];\n };\n return {\n error: () => error,\n domain: (input, margin) =>\n input[0].v[0] >= source.x - margin &&\n input[0].v[1] <= source.x + source.width + margin &&\n input[1].v[0] >= source.y - margin &&\n input[1].v[1] <= source.y + source.height + margin,\n evaluate: (input) => {\n const v0 = (input[1].v[0] - source.y) / source.height,\n v1 = (input[1].v[1] - source.y) / source.height;\n let first = 0;\n while (first < guides.length - 2 && guides[first + 1].at <= v0)\n first++;\n let last = first;\n while (last < guides.length - 2 && guides[last + 1].at < v1) last++;\n if (first === last) return evaluateBand(input, first);\n const outputs: Pair[] = [];\n for (let i = first; i <= last; i++) {\n const y = {\n ...input[1],\n v: [\n Math.max(\n input[1].v[0],\n source.y + guides[i].at * source.height,\n ),\n Math.min(\n input[1].v[1],\n source.y + guides[i + 1].at * source.height,\n ),\n ] as const,\n };\n outputs.push(evaluateBand([input[0], y], i));\n }\n return [0, 1].map((axis) => ({\n v: [\n Math.min(...outputs.map((p) => p[axis].v[0])),\n Math.max(...outputs.map((p) => p[axis].v[1])),\n ],\n d: [\n Math.min(...outputs.map((p) => p[axis].d[0])),\n Math.max(...outputs.map((p) => p[axis].d[1])),\n ],\n dd: [-Infinity, Infinity],\n })) as unknown as Pair;\n },\n };\n },\n ]);\n}\nfunction roundoff(pair: Pair): number {\n return Number.EPSILON * 512 * Math.max(1, ...pair.map((p) => absI(p.v)));\n}\nfunction evaluate(\n stages: readonly Stage[],\n input: Pair,\n): { value: Pair; error: number; domain: boolean } {\n let value = input,\n error = 0,\n domain = true;\n for (const stage of stages) {\n // Bound propagation of guide approximation through every later map via its Jacobian.\n if (error > 0) {\n const box = value.map((p) => ({\n v: [p.v[0] - error, p.v[1] + error] as const,\n d: [0, 0] as const,\n dd: [0, 0] as const,\n })) as unknown as Pair;\n const dx = stage.evaluate([{ ...box[0], d: [1, 1] }, box[1]]);\n const dy = stage.evaluate([box[0], { ...box[1], d: [1, 1] }]);\n error *= Math.hypot(\n absI(dx[0].d),\n absI(dx[1].d),\n absI(dy[0].d),\n absI(dy[1].d),\n );\n }\n domain &&= stage.domain?.(value, roundoff(value)) ?? true;\n error += stage.error(value);\n value = stage.evaluate(value);\n }\n return { value, error, domain };\n}\n/**\n * Return independent geometry. Nonlinear mappings approximate the final composed curve once.\n *\n * @param path - Source geometry; it is not modified. See {@link PathGeometry}.\n * @param transform - Point mapping to apply to the source. See {@link PathTransform}.\n * @param options - Approximation tolerance and work limits for transformed curves. See\n * {@link TransformPathOptions} .\n * @returns Independent geometry containing the transformed path. See {@link PathGeometry}.\n *\n * @see {@link PathGeometry}\n * @see {@link PathTransform}\n * @see {@link TransformPathOptions}\n */\nexport function transformPath(\n path: PathGeometry,\n transform: PathTransform,\n options: TransformPathOptions,\n): PathGeometry {\n if (!(path instanceof PathGeometry))\n throw new TypeError('transformPath requires PathGeometry.');\n const factories = definition(transform),\n tolerance = positive(options?.tolerance, 'tolerance');\n const maxSegments = positive(\n options.maxSegments === undefined ? 1_000_000 : options.maxSegments,\n 'maxSegments',\n );\n if (!Number.isSafeInteger(maxSegments))\n throw new RangeError('maxSegments must be a safe integer.');\n let work = 0;\n for (\n let attempt = 0, accuracy = tolerance / 32;\n attempt < 9;\n attempt++, accuracy /= 16\n ) {\n const stages = factories.map((f) => f(accuracy));\n if (stages.length === 1 && stages[0].apply)\n return stages[0].apply(path, options);\n if (stages.every((s) => s.affine)) {\n if (path.segmentCount > maxSegments)\n throw new RangeError('transformPath exceeded maxSegments.');\n let result = path.clone();\n for (const s of stages) result = applyAffine(result, s.affine!);\n return result;\n }\n const output = new PathGeometry();\n let retry = false;\n const reserve = () => {\n if (output.segmentCount >= maxSegments)\n throw new RangeError('transformPath exceeded maxSegments.');\n };\n for (const item of bendSpans(path)) {\n if (item.type === 'close') {\n reserve();\n output.closePath();\n continue;\n }\n if (item.type === 'move') {\n const r = evaluate(stages, [\n constant(item.point[0]),\n constant(item.point[1]),\n ]);\n if (!r.domain)\n throw new RangeError(\n 'Path lies outside a transformation source rectangle.',\n );\n if (r.error > tolerance / 4) {\n retry = true;\n break;\n }\n if (r.error + roundoff(r.value) > tolerance)\n throw new RangeError('Cannot certify transform precision.');\n reserve();\n output.moveTo(coordinate(r.value[0].v[0]), coordinate(r.value[1].v[0]));\n continue;\n }\n const stack: { span: BendSpan; depth: number }[] = [\n { span: item.span, depth: 0 },\n ];\n while (stack.length) {\n if (++work > MAX_WORK)\n throw new RangeError('transformPath exceeded its work limit.');\n const { span, depth } = stack.pop()!,\n b = bendSpanBounds(span);\n const r = evaluate(stages, [\n { v: [b.xmin, b.xmax], d: [-b.dx, b.dx], dd: [-b.ddx, b.ddx] },\n { v: [b.ymin, b.ymax], d: [-b.dy, b.dy], dd: [-b.ddy, b.ddy] },\n ]);\n if (r.error > tolerance / 4) {\n retry = true;\n break;\n }\n const second = Math.hypot(absI(r.value[0].dd), absI(r.value[1].dd)) / 8;\n // A Lipschitz bound also covers piecewise-smooth guides and crossed cell boundaries.\n const first = Math.hypot(absI(r.value[0].d), absI(r.value[1].d)) / 2;\n const bound = Math.min(second, first) + 2 * r.error + roundoff(r.value);\n if (r.domain && bound <= tolerance) {\n const end =\n 'points' in span\n ? span.points.at(-1)!\n : [\n span.arc.cx +\n span.arc.ux *\n Math.cos(span.arc.startAngle + span.arc.sweep) +\n span.arc.vx *\n Math.sin(span.arc.startAngle + span.arc.sweep),\n span.arc.cy +\n span.arc.uy *\n Math.cos(span.arc.startAngle + span.arc.sweep) +\n span.arc.vy *\n Math.sin(span.arc.startAngle + span.arc.sweep),\n ];\n const p = evaluate(stages, [constant(end[0]), constant(end[1])]);\n reserve();\n output.lineTo(\n coordinate(p.value[0].v[0]),\n coordinate(p.value[1].v[0]),\n );\n } else {\n if (depth >= 52)\n throw new RangeError(\n 'Cannot certify transform tolerance or source domain.',\n );\n const [left, right] = splitBendSpan(span);\n stack.push(\n { span: right, depth: depth + 1 },\n { span: left, depth: depth + 1 },\n );\n }\n }\n if (retry) break;\n }\n if (!retry) return output;\n }\n throw new RangeError('Cannot certify composed guide accuracy.');\n}\n\n/** @internal Merge cell enclosures; derivatives may jump at the shared edge. */\nexport function mergePairs(outputs: readonly Pair[]): Pair {\n return [0, 1].map((axis) => ({\n v: [\n Math.min(...outputs.map((p) => p[axis].v[0])),\n Math.max(...outputs.map((p) => p[axis].v[1])),\n ],\n d: [\n Math.min(...outputs.map((p) => p[axis].d[0])),\n Math.max(...outputs.map((p) => p[axis].d[1])),\n ],\n dd: [-Infinity, Infinity],\n })) as unknown as Pair;\n}\nexport function sourceDomain(\n input: Pair,\n source: PathRect,\n margin: number,\n): boolean {\n return (\n input[0].v[0] >= source.x - margin &&\n input[0].v[1] <= source.x + source.width + margin &&\n input[1].v[0] >= source.y - margin &&\n input[1].v[1] <= source.y + source.height + margin\n );\n}\nexport { meshTransform, type MeshTransformOptions } from './transform-mesh.js';\nexport {\n arcBendTransform,\n pathBendTransform,\n type ArcBendTransformOptions,\n type PathBendTransformOptions,\n type BendTransformOptions,\n} from './transform-bend.js';\n\ninterface Affine {\n readonly a: number;\n readonly b: number;\n readonly c: number;\n readonly d: number;\n readonly e: number;\n readonly f: number;\n}\nfunction affineMatrix(matrix: DOMMatrix2DInit): Affine {\n if (!matrix || typeof matrix !== 'object')\n throw new TypeError('Expected a finite 2D affine matrix.');\n const value = matrix as DOMMatrixInit;\n if (\n value.is2D === false ||\n nonzeroMatrixValue(value.m13) || nonzeroMatrixValue(value.m14) ||\n nonzeroMatrixValue(value.m23) || nonzeroMatrixValue(value.m24) ||\n nonzeroMatrixValue(value.m31) || nonzeroMatrixValue(value.m32) ||\n nonzeroMatrixValue(value.m34) || nonzeroMatrixValue(value.m43) ||\n (value.m33 !== undefined && value.m33 !== 1) ||\n (value.m44 !== undefined && value.m44 !== 1)\n )\n throw new RangeError('Expected a finite 2D affine matrix.');\n return {\n a: affineValue(value.a, value.m11, 1),\n b: affineValue(value.b, value.m12, 0),\n c: affineValue(value.c, value.m21, 0),\n d: affineValue(value.d, value.m22, 1),\n e: affineValue(value.e, value.m41, 0),\n f: affineValue(value.f, value.m42, 0),\n };\n}\nfunction affineValue(value: number | undefined, alias: number | undefined, fallback: number): number {\n if (value !== undefined && alias !== undefined && value !== alias)\n throw new TypeError('Conflicting affine matrix aliases.');\n return coordinate(value === undefined ? (alias === undefined ? fallback : alias) : value);\n}\n\nfunction applyAffine(path: PathGeometry, m: Affine): PathGeometry {\n const p = (x: number, y: number, vector = false) => ({\n x: coordinate(m.a * x + m.c * y + (vector ? 0 : m.e)),\n y: coordinate(m.b * x + m.d * y + (vector ? 0 : m.f)),\n });\n const segments = Array.from(path, (segment) => {\n switch (segment.type) {\n case 'close':\n return segment;\n case 'move':\n case 'line':\n return { ...segment, ...p(segment.x, segment.y) };\n case 'quadratic': {\n const control = p(segment.cpx, segment.cpy);\n return {\n ...segment,\n ...p(segment.x, segment.y),\n cpx: control.x,\n cpy: control.y,\n };\n }\n case 'cubic': {\n const a = p(segment.cp1x, segment.cp1y),\n b = p(segment.cp2x, segment.cp2y);\n return {\n ...segment,\n ...p(segment.x, segment.y),\n cp1x: a.x,\n cp1y: a.y,\n cp2x: b.x,\n cp2y: b.y,\n };\n }\n case 'arc': {\n const center = p(segment.cx, segment.cy),\n u = p(segment.ux, segment.uy, true),\n v = p(segment.vx, segment.vy, true);\n return {\n ...segment,\n cx: center.x,\n cy: center.y,\n ux: u.x,\n uy: u.y,\n vx: v.x,\n vy: v.y,\n };\n }\n }\n });\n const result = new PathGeometry();\n result.spliceSegments(0, 0, segments);\n return result;\n}\n\nfunction nonzeroMatrixValue(value: number | undefined): boolean {\n return value !== undefined && value !== 0;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const homogeneousCoordinateKeys = ["x", "y", "w"];
|
|
1
2
|
const choose = Array.from({ length: 8 }, (_, n) => {
|
|
2
3
|
const row = [1];
|
|
3
4
|
for (let i = 1; i <= n; i++) row[i] = row[i - 1] * (n - i + 1) / i;
|
|
@@ -64,7 +65,8 @@ function frame(work, index) {
|
|
|
64
65
|
}
|
|
65
66
|
function emitSpan(span, tolerance, work, emit) {
|
|
66
67
|
const first = frame(work, 0);
|
|
67
|
-
for (
|
|
68
|
+
for (let keyIndex = 0; keyIndex < homogeneousCoordinateKeys.length; keyIndex++) {
|
|
69
|
+
const key = homogeneousCoordinateKeys[keyIndex];
|
|
68
70
|
first[key].length = span[key].length;
|
|
69
71
|
for (let i = 0; i < span[key].length; i++) {
|
|
70
72
|
const value = span[key][i];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/lib/geometry/path-warp-bezier.ts"],
|
|
4
|
-
"sourcesContent": ["/** @internal Homogeneous Bernstein curves, degree at most six after warping. */\nexport interface WarpSpan { x: number[]; y: number[]; w: number[] }\nexport type WarpPoint = readonly [number, number];\n\nconst choose = Array.from({ length: 8 }, (_, n) => {\n const row = [1];\n for (let i = 1; i <= n; i++) row[i] = row[i - 1] * (n - i + 1) / i;\n return row;\n});\n\nexport function product(a: readonly number[], b: readonly number[]): number[] {\n const n = a.length - 1, m = b.length - 1;\n const result = new Array<number>(n + m + 1).fill(0);\n for (let i = 0; i <= n; i++) {\n for (let j = 0; j <= m; j++) {\n result[i + j] += a[i] * b[j] * choose[n][i] * choose[m][j] / choose[n + m][i + j];\n }\n }\n return result;\n}\n\nexport function endpoint(span: WarpSpan, index: number): WarpPoint {\n const w = span.w[index], x = span.x[index] / w, y = span.y[index] / w;\n if (w === 0 || !Number.isFinite(x) || !Number.isFinite(y)) {\n throw new RangeError('warpPath encountered a projection pole or coordinate overflow.');\n }\n return [x, y];\n}\n\n/** Bound |R(t)-lerp(R(0),R(1),t)|, including collinear backtracking. */\nfunction errorBound(span: WarpSpan, ax: number, ay: number, bx: number, by: number): number {\n const n = span.w.length - 1;\n const sign = Math.sign(span.w[0]);\n let lower = Infinity, scale = 0, magnitude = 0;\n for (let i = 0; i <= n; i++) {\n lower = Math.min(lower, sign * span.w[i]);\n scale = Math.max(scale, Math.abs(span.w[i]));\n magnitude = Math.max(magnitude, Math.abs(span.x[i]), Math.abs(span.y[i]));\n }\n if (lower <= 0) return Infinity;\n let bound = 0;\n // Degree elevation of N minus the Bernstein product W*L. Computing\n // centered terms reduces cancellation compared with subtracting products.\n for (let i = 0; i <= n + 1; i++) {\n const t = i / (n + 1);\n let x = 0, y = 0;\n if (i <= n) {\n x += (1 - t) * (span.x[i] - span.w[i] * ax);\n y += (1 - t) * (span.y[i] - span.w[i] * ay);\n }\n if (i > 0) {\n x += t * (span.x[i - 1] - span.w[i - 1] * bx);\n y += t * (span.y[i - 1] - span.w[i - 1] * by);\n }\n bound = Math.max(bound, Math.hypot(x, y));\n }\n const roundoff = 64 * Number.EPSILON * (magnitude + scale * Math.max(Math.abs(ax), Math.abs(ay), Math.abs(bx), Math.abs(by)));\n return (bound + roundoff) / lower;\n}\n\n/** Split into reusable buffers. The right destination may alias the input. */\nfunction split(values: readonly number[], left: number[], right: number[], scratch: number[]): void {\n const n = values.length - 1;\n for (let i = 0; i <= n; i++) scratch[i] = values[i];\n left.length = right.length = n + 1;\n left[0] = scratch[0]; right[n] = scratch[n];\n for (let level = 1; level <= n; level++) {\n for (let i = 0; i <= n - level; i++) scratch[i] = scratch[i] / 2 + scratch[i + 1] / 2;\n left[level] = scratch[0]; right[n - level] = scratch[n - level];\n }\n}\n\n/** Call-owned workspace; at most 53 frames (degree <= 6), reused across spans. */\nexport interface WarpWork {\n remaining: number;\n pool: WarpSpan[];\n depths: number[];\n scratch: number[];\n}\nfunction frame(work: WarpWork, index: number): WarpSpan {\n return work.pool[index] ?? (work.pool[index] = { x: [], y: [], w: [] });\n}\nexport function emitSpan(span: WarpSpan
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["\nconst homogeneousCoordinateKeys = ['x', 'y', 'w'] as const;\n/** @internal Homogeneous Bernstein curves, degree at most six after warping. */\nexport interface WarpSpan { x: number[]; y: number[]; w: number[] }\nexport type WarpPoint = readonly [number, number];\n\nconst choose = Array.from({ length: 8 }, (_, n) => {\n const row = [1];\n for (let i = 1; i <= n; i++) row[i] = row[i - 1] * (n - i + 1) / i;\n return row;\n});\n\nexport function product(a: readonly number[], b: readonly number[]): number[] {\n const n = a.length - 1, m = b.length - 1;\n const result = new Array<number>(n + m + 1).fill(0);\n for (let i = 0; i <= n; i++) {\n for (let j = 0; j <= m; j++) {\n result[i + j] += a[i] * b[j] * choose[n][i] * choose[m][j] / choose[n + m][i + j];\n }\n }\n return result;\n}\n\nexport function endpoint(span: WarpSpan, index: number): WarpPoint {\n const w = span.w[index], x = span.x[index] / w, y = span.y[index] / w;\n if (w === 0 || !Number.isFinite(x) || !Number.isFinite(y)) {\n throw new RangeError('warpPath encountered a projection pole or coordinate overflow.');\n }\n return [x, y];\n}\n\n/** Bound |R(t)-lerp(R(0),R(1),t)|, including collinear backtracking. */\nfunction errorBound(span: WarpSpan, ax: number, ay: number, bx: number, by: number): number {\n const n = span.w.length - 1;\n const sign = Math.sign(span.w[0]);\n let lower = Infinity, scale = 0, magnitude = 0;\n for (let i = 0; i <= n; i++) {\n lower = Math.min(lower, sign * span.w[i]);\n scale = Math.max(scale, Math.abs(span.w[i]));\n magnitude = Math.max(magnitude, Math.abs(span.x[i]), Math.abs(span.y[i]));\n }\n if (lower <= 0) return Infinity;\n let bound = 0;\n // Degree elevation of N minus the Bernstein product W*L. Computing\n // centered terms reduces cancellation compared with subtracting products.\n for (let i = 0; i <= n + 1; i++) {\n const t = i / (n + 1);\n let x = 0, y = 0;\n if (i <= n) {\n x += (1 - t) * (span.x[i] - span.w[i] * ax);\n y += (1 - t) * (span.y[i] - span.w[i] * ay);\n }\n if (i > 0) {\n x += t * (span.x[i - 1] - span.w[i - 1] * bx);\n y += t * (span.y[i - 1] - span.w[i - 1] * by);\n }\n bound = Math.max(bound, Math.hypot(x, y));\n }\n const roundoff = 64 * Number.EPSILON * (magnitude + scale * Math.max(Math.abs(ax), Math.abs(ay), Math.abs(bx), Math.abs(by)));\n return (bound + roundoff) / lower;\n}\n\n/** Split into reusable buffers. The right destination may alias the input. */\nfunction split(values: readonly number[], left: number[], right: number[], scratch: number[]): void {\n const n = values.length - 1;\n for (let i = 0; i <= n; i++) scratch[i] = values[i];\n left.length = right.length = n + 1;\n left[0] = scratch[0]; right[n] = scratch[n];\n for (let level = 1; level <= n; level++) {\n for (let i = 0; i <= n - level; i++) scratch[i] = scratch[i] / 2 + scratch[i + 1] / 2;\n left[level] = scratch[0]; right[n - level] = scratch[n - level];\n }\n}\n\n/** Call-owned workspace; at most 53 frames (degree <= 6), reused across spans. */\nexport interface WarpWork {\n remaining: number;\n pool: WarpSpan[];\n depths: number[];\n scratch: number[];\n}\nfunction frame(work: WarpWork, index: number): WarpSpan {\n return work.pool[index] ?? (work.pool[index] = { x: [], y: [], w: [] });\n}\nexport function emitSpan(\n span: WarpSpan,\n tolerance: number,\n work: WarpWork,\n emit: (x: number, y: number) => void,\n): void {\n const first = frame(work, 0);\n for (\n let keyIndex = 0;\n keyIndex < homogeneousCoordinateKeys.length;\n keyIndex++\n ) {\n const key = homogeneousCoordinateKeys[keyIndex];\n first[key].length = span[key].length;\n for (let i = 0; i < span[key].length; i++) {\n const value = span[key][i];\n if (!Number.isFinite(value)) throw new RangeError('warpPath homogeneous coordinates overflowed.');\n first[key][i] = value;\n }\n }\n let size = 1;\n work.depths[0] = 0;\n while (size) {\n if (--work.remaining < 0) throw new RangeError('warpPath exceeded its subdivision work limit.');\n const index = --size, current = work.pool[index], depth = work.depths[index];\n const n = current.w.length - 1;\n const aw = current.w[0], bw = current.w[n];\n const ax = current.x[0] / aw, ay = current.y[0] / aw, bx = current.x[n] / bw, by = current.y[n] / bw;\n if (aw === 0 || bw === 0 || !Number.isFinite(ax) || !Number.isFinite(ay) || !Number.isFinite(bx) || !Number.isFinite(by)) {\n throw new RangeError('warpPath encountered a projection pole or coordinate overflow.');\n }\n if (Math.sign(aw) !== Math.sign(bw)) throw new RangeError('warpPath crosses a projection pole.');\n // A degree-one rational curve with like-signed weights traverses the\n // endpoint chord monotonically. Nonlinear parameter speed is not error.\n if (n === 1 && 64 * Number.EPSILON * Math.max(Math.abs(ax), Math.abs(ay), Math.abs(bx), Math.abs(by)) <= tolerance) {\n emit(bx, by); continue;\n }\n if (errorBound(current, ax, ay, bx, by) <= tolerance) { emit(bx, by); continue; }\n // 52 halvings exhaust meaningful double-precision parameter resolution.\n if (depth >= 52) throw new RangeError('warpPath cannot certify tolerance or finiteness at available precision.');\n const left = frame(work, index + 1);\n split(current.x, left.x, current.x, work.scratch);\n split(current.y, left.y, current.y, work.scratch);\n split(current.w, left.w, current.w, work.scratch);\n work.depths[index] = work.depths[index + 1] = depth + 1;\n size += 2;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -40,7 +40,7 @@ function perspective(corners) {
|
|
|
40
40
|
}
|
|
41
41
|
const g = (dx3 * dy2 - dx2 * dy3) / determinant;
|
|
42
42
|
const h = (dx1 * dy3 - dx3 * dy1) / determinant;
|
|
43
|
-
if (
|
|
43
|
+
if (1 + g <= 64 * Number.EPSILON * (1 + Math.abs(g) + Math.abs(h)) || 1 + h <= 64 * Number.EPSILON * (1 + Math.abs(g) + Math.abs(h)) || 1 + g + h <= 64 * Number.EPSILON * (1 + Math.abs(g) + Math.abs(h))) {
|
|
44
44
|
throw new RangeError("Perspective mapping cannot certify a finite source rectangle.");
|
|
45
45
|
}
|
|
46
46
|
const xx = b[0] - a[0] + g * b[0], xy = c[0] - a[0] + h * c[0];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/lib/geometry/path-warp.ts"],
|
|
4
|
-
"sourcesContent": ["import { arcPoint } from './path-arc.js';\nimport { PathGeometry } from './path-geometry.js';\nimport { emitSpan, endpoint, product, type WarpPoint, type WarpSpan, type WarpWork } from './path-warp-bezier.js';\n\nexport interface PathWarpPoint { readonly x: number; readonly y: number }\nexport interface PathWarpRect { readonly x: number; readonly y: number; readonly width: number; readonly height: number }\nexport interface PathWarpCorners {\n readonly topLeft: PathWarpPoint;\n readonly topRight: PathWarpPoint;\n readonly bottomLeft: PathWarpPoint;\n readonly bottomRight: PathWarpPoint;\n}\nexport type PathWarpMode = 'bilinear' | 'perspective';\nexport interface WarpPathOptions {\n readonly source: PathWarpRect;\n readonly destination: PathWarpCorners;\n readonly mode?: PathWarpMode;\n readonly tolerance: number;\n readonly maxSegments?: number;\n}\n\nfunction number(value: unknown, name: string): number {\n if (typeof value !== 'number') throw new TypeError(`warpPath ${name} must be a number.`);\n if (!Number.isFinite(value)) throw new RangeError(`warpPath ${name} must be finite.`);\n return value;\n}\nfunction point(value: PathWarpPoint | undefined, name: string): WarpPoint {\n return [number(value?.x, `${name}.x`), number(value?.y, `${name}.y`)];\n}\nfunction polynomial(points: readonly WarpPoint[]): WarpSpan {\n return { x: points.map(p => p[0]), y: points.map(p => p[1]), w: points.map(() => 1) };\n}\n\n/** Normalize destination coordinates before solving the unit-square homography. */\nfunction perspective(corners: readonly WarpPoint[]): (span: WarpSpan) => WarpSpan {\n const scale = Math.max(...corners.flatMap(p => [Math.abs(p[0]), Math.abs(p[1])]));\n if (scale === 0) throw new RangeError('Perspective warp requires a strictly convex quadrilateral.');\n const normalized = corners.map(p => [p[0] / scale, p[1] / scale] as const);\n const origin = normalized[0];\n const extent = Math.max(...normalized.flatMap(p => [Math.abs(p[0] - origin[0]), Math.abs(p[1] - origin[1])]));\n if (extent === 0) throw new RangeError('Perspective destination is degenerate.');\n const q = normalized.map(p => [(p[0] - origin[0]) / extent, (p[1] - origin[1]) / extent] as const);\n const perimeter = [q[0], q[1], q[3], q[2]];\n let orientation = 0;\n for (let i = 0; i < 4; i++) {\n const a = perimeter[i], b = perimeter[(i + 1) % 4], c = perimeter[(i + 2) % 4];\n const p = (b[0] - a[0]) * (c[1] - b[1]), r = (b[1] - a[1]) * (c[0] - b[0]);\n const cross = p - r;\n if (Math.abs(cross) <= 32 * Number.EPSILON * (Math.abs(p) + Math.abs(r)) ||\n (orientation !== 0 && Math.sign(cross) !== orientation)) {\n throw new RangeError('Perspective warp requires a strictly convex, nondegenerate quadrilateral.');\n }\n orientation = Math.sign(cross);\n }\n const [a, b, c, d] = q;\n const dx1 = b[0] - d[0], dx2 = c[0] - d[0], dx3 = a[0] - b[0] - c[0] + d[0];\n const dy1 = b[1] - d[1], dy2 = c[1] - d[1], dy3 = a[1] - b[1] - c[1] + d[1];\n const determinant = dx1 * dy2 - dx2 * dy1;\n if (Math.abs(determinant) <= 32 * Number.EPSILON * (Math.abs(dx1 * dy2) + Math.abs(dx2 * dy1))) {\n throw new RangeError('Perspective mapping is numerically singular.');\n }\n const g = (dx3 * dy2 - dx2 * dy3) / determinant;\n const h = (dx1 * dy3 - dx3 * dy1) / determinant;\n if (
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import { arcPoint } from './path-arc.js';\nimport { PathGeometry } from './path-geometry.js';\nimport { emitSpan, endpoint, product, type WarpPoint, type WarpSpan, type WarpWork } from './path-warp-bezier.js';\n\nexport interface PathWarpPoint { readonly x: number; readonly y: number }\nexport interface PathWarpRect { readonly x: number; readonly y: number; readonly width: number; readonly height: number }\nexport interface PathWarpCorners {\n readonly topLeft: PathWarpPoint;\n readonly topRight: PathWarpPoint;\n readonly bottomLeft: PathWarpPoint;\n readonly bottomRight: PathWarpPoint;\n}\nexport type PathWarpMode = 'bilinear' | 'perspective';\nexport interface WarpPathOptions {\n readonly source: PathWarpRect;\n readonly destination: PathWarpCorners;\n readonly mode?: PathWarpMode;\n readonly tolerance: number;\n readonly maxSegments?: number;\n}\n\nfunction number(value: unknown, name: string): number {\n if (typeof value !== 'number') throw new TypeError(`warpPath ${name} must be a number.`);\n if (!Number.isFinite(value)) throw new RangeError(`warpPath ${name} must be finite.`);\n return value;\n}\nfunction point(value: PathWarpPoint | undefined, name: string): WarpPoint {\n return [number(value?.x, `${name}.x`), number(value?.y, `${name}.y`)];\n}\nfunction polynomial(points: readonly WarpPoint[]): WarpSpan {\n return { x: points.map(p => p[0]), y: points.map(p => p[1]), w: points.map(() => 1) };\n}\n\n/** Normalize destination coordinates before solving the unit-square homography. */\nfunction perspective(corners: readonly WarpPoint[]): (span: WarpSpan) => WarpSpan {\n const scale = Math.max(...corners.flatMap(p => [Math.abs(p[0]), Math.abs(p[1])]));\n if (scale === 0) throw new RangeError('Perspective warp requires a strictly convex quadrilateral.');\n const normalized = corners.map(p => [p[0] / scale, p[1] / scale] as const);\n const origin = normalized[0];\n const extent = Math.max(...normalized.flatMap(p => [Math.abs(p[0] - origin[0]), Math.abs(p[1] - origin[1])]));\n if (extent === 0) throw new RangeError('Perspective destination is degenerate.');\n const q = normalized.map(p => [(p[0] - origin[0]) / extent, (p[1] - origin[1]) / extent] as const);\n const perimeter = [q[0], q[1], q[3], q[2]];\n let orientation = 0;\n for (let i = 0; i < 4; i++) {\n const a = perimeter[i], b = perimeter[(i + 1) % 4], c = perimeter[(i + 2) % 4];\n const p = (b[0] - a[0]) * (c[1] - b[1]), r = (b[1] - a[1]) * (c[0] - b[0]);\n const cross = p - r;\n if (Math.abs(cross) <= 32 * Number.EPSILON * (Math.abs(p) + Math.abs(r)) ||\n (orientation !== 0 && Math.sign(cross) !== orientation)) {\n throw new RangeError('Perspective warp requires a strictly convex, nondegenerate quadrilateral.');\n }\n orientation = Math.sign(cross);\n }\n const [a, b, c, d] = q;\n const dx1 = b[0] - d[0], dx2 = c[0] - d[0], dx3 = a[0] - b[0] - c[0] + d[0];\n const dy1 = b[1] - d[1], dy2 = c[1] - d[1], dy3 = a[1] - b[1] - c[1] + d[1];\n const determinant = dx1 * dy2 - dx2 * dy1;\n if (Math.abs(determinant) <= 32 * Number.EPSILON * (Math.abs(dx1 * dy2) + Math.abs(dx2 * dy1))) {\n throw new RangeError('Perspective mapping is numerically singular.');\n }\n const g = (dx3 * dy2 - dx2 * dy3) / determinant;\n const h = (dx1 * dy3 - dx3 * dy1) / determinant;\n if (\n 1 + g <= 64 * Number.EPSILON * (1 + Math.abs(g) + Math.abs(h)) ||\n 1 + h <= 64 * Number.EPSILON * (1 + Math.abs(g) + Math.abs(h)) ||\n 1 + g + h <= 64 * Number.EPSILON * (1 + Math.abs(g) + Math.abs(h))\n ) {\n throw new RangeError('Perspective mapping cannot certify a finite source rectangle.');\n }\n const xx = b[0] - a[0] + g * b[0], xy = c[0] - a[0] + h * c[0];\n const yx = b[1] - a[1] + g * b[1], yy = c[1] - a[1] + h * c[1];\n return span => {\n const w = span.w.map((weight, i) => g * span.x[i] + h * span.y[i] + weight);\n const x = w.map((weight, i) => ((xx * span.x[i] + xy * span.y[i] + a[0] * span.w[i]) * extent + origin[0] * weight) * scale);\n const y = w.map((weight, i) => ((yx * span.x[i] + yy * span.y[i] + a[1] * span.w[i]) * extent + origin[1] * weight) * scale);\n return { x, y, w };\n };\n}\n\n/** Approximate a four-corner warp in destination units, returning independent line geometry. */\nexport function warpPath(path: PathGeometry, options: Readonly<WarpPathOptions>): PathGeometry {\n if (!(path instanceof PathGeometry)) throw new TypeError('warpPath requires PathGeometry.');\n const source = options?.source, destination = options?.destination;\n const sx = number(source?.x, 'source.x'), sy = number(source?.y, 'source.y');\n const width = number(source?.width, 'source.width'), height = number(source?.height, 'source.height');\n const tolerance = number(options?.tolerance, 'tolerance');\n const requestedLimit = options?.maxSegments;\n const maxSegments = number(requestedLimit === undefined ? 1_000_000 : requestedLimit, 'maxSegments');\n if (width <= 0 || height <= 0 || tolerance <= 0 || !Number.isSafeInteger(maxSegments) || maxSegments <= 0) {\n throw new RangeError('warpPath requires positive dimensions, tolerance, and a positive safe-integer maxSegments.');\n }\n const requestedMode = options?.mode;\n const mode = requestedMode === undefined ? 'bilinear' : requestedMode;\n if (mode !== 'bilinear' && mode !== 'perspective') throw new TypeError('Unknown warpPath mode.');\n const corners = [point(destination?.topLeft, 'topLeft'), point(destination?.topRight, 'topRight'),\n point(destination?.bottomLeft, 'bottomLeft'), point(destination?.bottomRight, 'bottomRight')];\n const project = mode === 'perspective' ? perspective(corners) : undefined;\n const map = (span: WarpSpan): WarpSpan => {\n const u = span.x.map((x, i) => (x - sx * span.w[i]) / width);\n const v = span.y.map((y, i) => (y - sy * span.w[i]) / height);\n if (project) return project({ x: u, y: v, w: span.w });\n const wu = span.w.map((w, i) => w - u[i]), wv = span.w.map((w, i) => w - v[i]);\n const weights = [product(wu, wv), product(u, wv), product(wu, v), product(u, v)];\n const w = product(span.w, span.w);\n const x = w.map((_, i) => weights.reduce((sum, ws, j) => sum + ws[i] * corners[j][0], 0));\n const y = w.map((_, i) => weights.reduce((sum, ws, j) => sum + ws[i] * corners[j][1], 0));\n return { x, y, w };\n };\n const output = new PathGeometry();\n let count = 0, closed = false;\n const reserve = () => {\n if (++count > maxSegments) throw new RangeError('warpPath exceeded maxSegments.');\n };\n const line = (x: number, y: number) => { reserve(); output.lineTo(x, y); closed = false; };\n // At most 4M subdivision visits per call, even for a pole with no output.\n const work: WarpWork = { remaining: Math.min(4_000_000, 2 * maxSegments + 53), pool: [], depths: [], scratch: [] };\n const emit = (span: WarpSpan) => {\n if (count >= maxSegments) throw new RangeError('warpPath exceeded maxSegments.');\n emitSpan(map(span), tolerance, work, line);\n };\n let current: WarpPoint = [0, 0], start: WarpPoint = current;\n for (const segment of path) {\n switch (segment.type) {\n case 'move': {\n current = start = [segment.x, segment.y];\n const p = endpoint(map(polynomial([current])), 0);\n reserve(); output.moveTo(p[0], p[1]); closed = false;\n break;\n }\n case 'line': {\n const end: WarpPoint = [segment.x, segment.y];\n emit(polynomial([current, end])); current = end; break;\n }\n case 'quadratic': {\n const end: WarpPoint = [segment.x, segment.y];\n emit(polynomial([current, [segment.cpx, segment.cpy], end])); current = end; break;\n }\n case 'cubic': {\n const end: WarpPoint = [segment.x, segment.y];\n emit(polynomial([current, [segment.cp1x, segment.cp1y], [segment.cp2x, segment.cp2y], end]));\n current = end; break;\n }\n case 'arc': {\n const first = arcPoint(segment, segment.startAngle);\n if (current[0] !== first[0] || current[1] !== first[1]) emit(polynomial([current, first]));\n const pieces = Math.max(1, Math.ceil(Math.abs(segment.sweep) / (Math.PI / 2)));\n for (let i = 0; i < pieces; i++) {\n const a = segment.startAngle + segment.sweep * i / pieces;\n const b = segment.startAngle + segment.sweep * (i + 1) / pieces;\n const mid = (a + b) / 2, weight = Math.cos((b - a) / 2);\n const p = arcPoint(segment, a), q = arcPoint(segment, b);\n emit({\n x: [p[0], segment.cx * weight + segment.ux * Math.cos(mid) + segment.vx * Math.sin(mid), q[0]],\n y: [p[1], segment.cy * weight + segment.uy * Math.cos(mid) + segment.vy * Math.sin(mid), q[1]],\n w: [1, weight, 1],\n });\n }\n current = arcPoint(segment, segment.startAngle + segment.sweep);\n break;\n }\n case 'close':\n if (current[0] !== start[0] || current[1] !== start[1]) emit(polynomial([current, start]));\n if (!closed) { reserve(); output.closePath(); closed = true; }\n current = start; break;\n }\n }\n return output;\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,gBAAgB;AACzB,SAAS,oBAAoB;AAC7B,SAAS,UAAU,UAAU,eAA6D;AAmB1F,SAAS,OAAO,OAAgB,MAAsB;AACpD,MAAI,OAAO,UAAU,SAAU,OAAM,IAAI,UAAU,YAAY,IAAI,oBAAoB;AACvF,MAAI,CAAC,OAAO,SAAS,KAAK,EAAG,OAAM,IAAI,WAAW,YAAY,IAAI,kBAAkB;AACpF,SAAO;AACT;AACA,SAAS,MAAM,OAAkC,MAAyB;AACxE,SAAO,CAAC,OAAO,OAAO,GAAG,GAAG,IAAI,IAAI,GAAG,OAAO,OAAO,GAAG,GAAG,IAAI,IAAI,CAAC;AACtE;AACA,SAAS,WAAW,QAAwC;AAC1D,SAAO,EAAE,GAAG,OAAO,IAAI,OAAK,EAAE,CAAC,CAAC,GAAG,GAAG,OAAO,IAAI,OAAK,EAAE,CAAC,CAAC,GAAG,GAAG,OAAO,IAAI,MAAM,CAAC,EAAE;AACtF;AAGA,SAAS,YAAY,SAA6D;AAChF,QAAM,QAAQ,KAAK,IAAI,GAAG,QAAQ,QAAQ,OAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,MAAI,UAAU,EAAG,OAAM,IAAI,WAAW,4DAA4D;AAClG,QAAM,aAAa,QAAQ,IAAI,OAAK,CAAC,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,IAAI,KAAK,CAAU;AACzE,QAAM,SAAS,WAAW,CAAC;AAC3B,QAAM,SAAS,KAAK,IAAI,GAAG,WAAW,QAAQ,OAAK,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5G,MAAI,WAAW,EAAG,OAAM,IAAI,WAAW,wCAAwC;AAC/E,QAAM,IAAI,WAAW,IAAI,OAAK,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,KAAK,SAAS,EAAE,CAAC,IAAI,OAAO,CAAC,KAAK,MAAM,CAAU;AACjG,QAAM,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACzC,MAAI,cAAc;AAClB,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,UAAMA,KAAI,UAAU,CAAC,GAAGC,KAAI,WAAW,IAAI,KAAK,CAAC,GAAGC,KAAI,WAAW,IAAI,KAAK,CAAC;AAC7E,UAAM,KAAKD,GAAE,CAAC,IAAID,GAAE,CAAC,MAAME,GAAE,CAAC,IAAID,GAAE,CAAC,IAAI,KAAKA,GAAE,CAAC,IAAID,GAAE,CAAC,MAAME,GAAE,CAAC,IAAID,GAAE,CAAC;AACxE,UAAM,QAAQ,IAAI;AAClB,QAAI,KAAK,IAAI,KAAK,KAAK,KAAK,OAAO,WAAW,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,MACjE,gBAAgB,KAAK,KAAK,KAAK,KAAK,MAAM,aAAc;AAC3D,YAAM,IAAI,WAAW,2EAA2E;AAAA,IAClG;AACA,kBAAc,KAAK,KAAK,KAAK;AAAA,EAC/B;AACA,QAAM,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI;AACrB,QAAM,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AAC1E,QAAM,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AAC1E,QAAM,cAAc,MAAM,MAAM,MAAM;AACtC,MAAI,KAAK,IAAI,WAAW,KAAK,KAAK,OAAO,WAAW,KAAK,IAAI,MAAM,GAAG,IAAI,KAAK,IAAI,MAAM,GAAG,IAAI;AAC9F,UAAM,IAAI,WAAW,8CAA8C;AAAA,EACrE;AACA,QAAM,KAAK,MAAM,MAAM,MAAM,OAAO;AACpC,QAAM,KAAK,MAAM,MAAM,MAAM,OAAO;AACpC,MACE,IAAI,KAAK,KAAK,OAAO,WAAW,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,MAC5D,IAAI,KAAK,KAAK,OAAO,WAAW,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,MAC5D,IAAI,IAAI,KAAK,KAAK,OAAO,WAAW,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAChE;AACA,UAAM,IAAI,WAAW,+DAA+D;AAAA,EACtF;AACA,QAAM,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;AAC7D,QAAM,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;AAC7D,SAAO,UAAQ;AACb,UAAM,IAAI,KAAK,EAAE,IAAI,CAAC,QAAQ,MAAM,IAAI,KAAK,EAAE,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,IAAI,MAAM;AAC1E,UAAM,IAAI,EAAE,IAAI,CAAC,QAAQ,QAAQ,KAAK,KAAK,EAAE,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,KAAK,SAAS,OAAO,CAAC,IAAI,UAAU,KAAK;AAC3H,UAAM,IAAI,EAAE,IAAI,CAAC,QAAQ,QAAQ,KAAK,KAAK,EAAE,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,KAAK,SAAS,OAAO,CAAC,IAAI,UAAU,KAAK;AAC3H,WAAO,EAAE,GAAG,GAAG,EAAE;AAAA,EACnB;AACF;AAGO,SAAS,SAAS,MAAoB,SAAkD;AAC7F,MAAI,EAAE,gBAAgB,cAAe,OAAM,IAAI,UAAU,iCAAiC;AAC1F,QAAM,SAAS,SAAS,QAAQ,cAAc,SAAS;AACvD,QAAM,KAAK,OAAO,QAAQ,GAAG,UAAU,GAAG,KAAK,OAAO,QAAQ,GAAG,UAAU;AAC3E,QAAM,QAAQ,OAAO,QAAQ,OAAO,cAAc,GAAG,SAAS,OAAO,QAAQ,QAAQ,eAAe;AACpG,QAAM,YAAY,OAAO,SAAS,WAAW,WAAW;AACxD,QAAM,iBAAiB,SAAS;AAChC,QAAM,cAAc,OAAO,mBAAmB,SAAY,MAAY,gBAAgB,aAAa;AACnG,MAAI,SAAS,KAAK,UAAU,KAAK,aAAa,KAAK,CAAC,OAAO,cAAc,WAAW,KAAK,eAAe,GAAG;AACzG,UAAM,IAAI,WAAW,4FAA4F;AAAA,EACnH;AACA,QAAM,gBAAgB,SAAS;AAC/B,QAAM,OAAO,kBAAkB,SAAY,aAAa;AACxD,MAAI,SAAS,cAAc,SAAS,cAAe,OAAM,IAAI,UAAU,wBAAwB;AAC/F,QAAM,UAAU;AAAA,IAAC,MAAM,aAAa,SAAS,SAAS;AAAA,IAAG,MAAM,aAAa,UAAU,UAAU;AAAA,IAC9F,MAAM,aAAa,YAAY,YAAY;AAAA,IAAG,MAAM,aAAa,aAAa,aAAa;AAAA,EAAC;AAC9F,QAAM,UAAU,SAAS,gBAAgB,YAAY,OAAO,IAAI;AAChE,QAAM,MAAM,CAAC,SAA6B;AACxC,UAAM,IAAI,KAAK,EAAE,IAAI,CAACE,IAAG,OAAOA,KAAI,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK;AAC3D,UAAM,IAAI,KAAK,EAAE,IAAI,CAACC,IAAG,OAAOA,KAAI,KAAK,KAAK,EAAE,CAAC,KAAK,MAAM;AAC5D,QAAI,QAAS,QAAO,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,EAAE,CAAC;AACrD,UAAM,KAAK,KAAK,EAAE,IAAI,CAACC,IAAG,MAAMA,KAAI,EAAE,CAAC,CAAC,GAAG,KAAK,KAAK,EAAE,IAAI,CAACA,IAAG,MAAMA,KAAI,EAAE,CAAC,CAAC;AAC7E,UAAM,UAAU,CAAC,QAAQ,IAAI,EAAE,GAAG,QAAQ,GAAG,EAAE,GAAG,QAAQ,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC;AAC/E,UAAM,IAAI,QAAQ,KAAK,GAAG,KAAK,CAAC;AAChC,UAAM,IAAI,EAAE,IAAI,CAAC,GAAG,MAAM,QAAQ,OAAO,CAAC,KAAK,IAAI,MAAM,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACxF,UAAM,IAAI,EAAE,IAAI,CAAC,GAAG,MAAM,QAAQ,OAAO,CAAC,KAAK,IAAI,MAAM,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACxF,WAAO,EAAE,GAAG,GAAG,EAAE;AAAA,EACnB;AACA,QAAM,SAAS,IAAI,aAAa;AAChC,MAAI,QAAQ,GAAG,SAAS;AACxB,QAAM,UAAU,MAAM;AACpB,QAAI,EAAE,QAAQ,YAAa,OAAM,IAAI,WAAW,gCAAgC;AAAA,EAClF;AACA,QAAM,OAAO,CAAC,GAAW,MAAc;AAAE,YAAQ;AAAG,WAAO,OAAO,GAAG,CAAC;AAAG,aAAS;AAAA,EAAO;AAEzF,QAAM,OAAiB,EAAE,WAAW,KAAK,IAAI,KAAW,IAAI,cAAc,EAAE,GAAG,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,SAAS,CAAC,EAAE;AACjH,QAAM,OAAO,CAAC,SAAmB;AAC/B,QAAI,SAAS,YAAa,OAAM,IAAI,WAAW,gCAAgC;AAC/E,aAAS,IAAI,IAAI,GAAG,WAAW,MAAM,IAAI;AAAA,EAC3C;AACA,MAAI,UAAqB,CAAC,GAAG,CAAC,GAAG,QAAmB;AACpD,aAAW,WAAW,MAAM;AAC1B,YAAQ,QAAQ,MAAM;AAAA,MACpB,KAAK,QAAQ;AACX,kBAAU,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACvC,cAAM,IAAI,SAAS,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC;AAChD,gBAAQ;AAAG,eAAO,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAAG,iBAAS;AAC/C;AAAA,MACF;AAAA,MACA,KAAK,QAAQ;AACX,cAAM,MAAiB,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC5C,aAAK,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC;AAAG,kBAAU;AAAK;AAAA,MACnD;AAAA,MACA,KAAK,aAAa;AAChB,cAAM,MAAiB,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC5C,aAAK,WAAW,CAAC,SAAS,CAAC,QAAQ,KAAK,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC;AAAG,kBAAU;AAAK;AAAA,MAC/E;AAAA,MACA,KAAK,SAAS;AACZ,cAAM,MAAiB,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC5C,aAAK,WAAW,CAAC,SAAS,CAAC,QAAQ,MAAM,QAAQ,IAAI,GAAG,CAAC,QAAQ,MAAM,QAAQ,IAAI,GAAG,GAAG,CAAC,CAAC;AAC3F,kBAAU;AAAK;AAAA,MACjB;AAAA,MACA,KAAK,OAAO;AACV,cAAM,QAAQ,SAAS,SAAS,QAAQ,UAAU;AAClD,YAAI,QAAQ,CAAC,MAAM,MAAM,CAAC,KAAK,QAAQ,CAAC,MAAM,MAAM,CAAC,EAAG,MAAK,WAAW,CAAC,SAAS,KAAK,CAAC,CAAC;AACzF,cAAM,SAAS,KAAK,IAAI,GAAG,KAAK,KAAK,KAAK,IAAI,QAAQ,KAAK,KAAK,KAAK,KAAK,EAAE,CAAC;AAC7E,iBAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,gBAAM,IAAI,QAAQ,aAAa,QAAQ,QAAQ,IAAI;AACnD,gBAAM,IAAI,QAAQ,aAAa,QAAQ,SAAS,IAAI,KAAK;AACzD,gBAAM,OAAO,IAAI,KAAK,GAAG,SAAS,KAAK,KAAK,IAAI,KAAK,CAAC;AACtD,gBAAM,IAAI,SAAS,SAAS,CAAC,GAAG,IAAI,SAAS,SAAS,CAAC;AACvD,eAAK;AAAA,YACH,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,KAAK,SAAS,QAAQ,KAAK,KAAK,IAAI,GAAG,IAAI,QAAQ,KAAK,KAAK,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC;AAAA,YAC7F,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,KAAK,SAAS,QAAQ,KAAK,KAAK,IAAI,GAAG,IAAI,QAAQ,KAAK,KAAK,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC;AAAA,YAC7F,GAAG,CAAC,GAAG,QAAQ,CAAC;AAAA,UAClB,CAAC;AAAA,QACH;AACA,kBAAU,SAAS,SAAS,QAAQ,aAAa,QAAQ,KAAK;AAC9D;AAAA,MACF;AAAA,MACA,KAAK;AACH,YAAI,QAAQ,CAAC,MAAM,MAAM,CAAC,KAAK,QAAQ,CAAC,MAAM,MAAM,CAAC,EAAG,MAAK,WAAW,CAAC,SAAS,KAAK,CAAC,CAAC;AACzF,YAAI,CAAC,QAAQ;AAAE,kBAAQ;AAAG,iBAAO,UAAU;AAAG,mBAAS;AAAA,QAAM;AAC7D,kBAAU;AAAO;AAAA,IACrB;AAAA,EACF;AACA,SAAO;AACT;",
|
|
6
6
|
"names": ["a", "b", "c", "x", "y", "w"]
|
|
7
7
|
}
|
package/dist/lib/global-state.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { cancelPendingMount } from "./mount-request.js";
|
|
1
2
|
import { unregisterRootInstance } from "./scheduler/realm-scheduler.js";
|
|
2
3
|
import { runTeardown } from "./teardowns.js";
|
|
3
4
|
const NO_PENDING_ROOT = /* @__PURE__ */ Symbol("PIBBL_NO_PENDING_ROOT");
|
|
@@ -82,6 +83,7 @@ function cleanupPibblInstance(pibblInstance) {
|
|
|
82
83
|
unregisterRootInstance(pibblInstance);
|
|
83
84
|
}
|
|
84
85
|
if (GLOBAL_STATE.pibblInstances.get(canvas) === pibblInstance) {
|
|
86
|
+
if (!pibblInstance.parent) cancelPendingMount(canvas);
|
|
85
87
|
GLOBAL_STATE.pibblInstances.delete(canvas);
|
|
86
88
|
}
|
|
87
89
|
pibblInstance.eventParent = void 0;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/lib/global-state.ts"],
|
|
4
|
-
"sourcesContent": ["import type { LayoutContext } from './layout/types.js';\nimport type { PibblNode } from './element/types.js';\nimport type { RenderTargetSnapshot } from './render-target.js';\nimport type { PibblFrameSnapshot } from './scheduler/types.js';\nimport { unregisterRootInstance } from './scheduler/realm-scheduler.js';\nimport type {\n PibblBackendDriver,\n PibblBackendFrame,\n} from './backend/types.js';\nimport type {\n Canvas,\n PibblComponentRefs,\n PibblClippingStackEntry,\n PibblInstance,\n PibblRenderTransaction,\n RenderingContext2D,\n} from './types.js';\nimport { runTeardown } from './teardowns.js';\n\nexport const NO_PENDING_ROOT = Symbol('PIBBL_NO_PENDING_ROOT');\nexport type PendingRoot = PibblNode | typeof NO_PENDING_ROOT;\n\n/** @internal Exact Pibbl-owned presentation transforms for the active traversal. */\nexport interface PibblPresentationTransformLineage {\n readonly parent: PibblPresentationTransformLineage | undefined;\n readonly localTransform: DOMMatrix;\n /** Number of raw Canvas transform deltas absorbed before this Pibbl node. */\n readonly untrackedCanvasTransformCount: number;\n}\n\nexport interface GlobalState {\n pibblInstances: Map<Canvas, PibblInstance>;\n currentPibblInstance: PibblInstance | undefined;\n componentRefs: PibblComponentRefs<any> | undefined;\n canvas: Canvas | undefined;\n componentIsMounting: boolean;\n componentHookIndex: number;\n backendDriver: PibblBackendDriver<unknown> | undefined;\n backendFrame: PibblBackendFrame<unknown> | undefined;\n backendEnvironment: unknown;\n renderContext: RenderingContext2D | undefined;\n renderTarget: RenderTargetSnapshot | undefined;\n worldBaseTransform: DOMMatrix | undefined;\n worldExactTransform: DOMMatrix | undefined;\n worldPaintAnchorTransform: DOMMatrix | undefined;\n presentationTransformLineage: PibblPresentationTransformLineage | undefined;\n presentationTransformLineageTrackingDepth: number;\n renderTransaction: PibblRenderTransaction | undefined;\n frameSnapshot: PibblFrameSnapshot | undefined;\n primitiveReceiverToken: object | undefined;\n seenIds: Set<string> | undefined;\n seenKeys: Set<string> | undefined;\n clippingStack: PibblClippingStackEntry[];\n htmlFilterDepth: number;\n layoutStack: LayoutContext[] | undefined;\n anonElementNames: WeakMap<any, string>;\n anon: number;\n}\n\nexport const GLOBAL_STATE: GlobalState = {\n pibblInstances: new Map(),\n currentPibblInstance: undefined,\n componentRefs: undefined,\n canvas: undefined,\n componentIsMounting: false,\n componentHookIndex: 0,\n backendDriver: undefined,\n backendFrame: undefined,\n backendEnvironment: undefined,\n renderContext: undefined,\n renderTarget: undefined,\n worldBaseTransform: undefined,\n worldExactTransform: undefined,\n worldPaintAnchorTransform: undefined,\n presentationTransformLineage: undefined,\n presentationTransformLineageTrackingDepth: 0,\n renderTransaction: undefined,\n frameSnapshot: undefined,\n primitiveReceiverToken: undefined,\n seenIds: undefined,\n seenKeys: undefined,\n clippingStack: [],\n htmlFilterDepth: 0,\n layoutStack: undefined,\n anonElementNames: new WeakMap(),\n anon: 0,\n};\n\nexport function getComponentRefs() {\n if (!GLOBAL_STATE.componentRefs) {\n throw new Error('No component refs available');\n }\n return GLOBAL_STATE.componentRefs;\n}\n\nexport function getCanvas() {\n if (!GLOBAL_STATE.canvas) {\n throw new Error('No canvas available');\n }\n return GLOBAL_STATE.canvas;\n}\n\nexport function getCurrentPibblInstance() {\n if (!GLOBAL_STATE.currentPibblInstance) {\n throw new Error('No Pibbl instance available');\n }\n return GLOBAL_STATE.currentPibblInstance;\n}\n\nexport function getInteractionRoot(pibblInstance: PibblInstance): PibblInstance {\n return pibblInstance.interactionRoot ?? pibblInstance;\n}\n\nexport function getPibblInstance(canvas: Canvas) {\n const pibblInstance = GLOBAL_STATE.pibblInstances.get(canvas);\n if (!pibblInstance) {\n throw new Error('Pibbl instance not found');\n }\n return pibblInstance;\n}\n\n/**\n * Used to get a name for an anonymous function.\n * @param fn The anonymous function to get a name for\n * @returns A name for the anonymous function\n */\nexport function getAnonElemName(fn: any) {\n if (!GLOBAL_STATE.anonElementNames.has(fn)) {\n GLOBAL_STATE.anonElementNames.set(fn, `Anon${GLOBAL_STATE.anon++}`);\n }\n return GLOBAL_STATE.anonElementNames.get(fn)!;\n}\n\n/**\n * Useful for testing and HMR.\n * DO NOT USE IN PROD\n */\nexport function clearSharedState() {\n for (const pibblInstance of Array.from(GLOBAL_STATE.pibblInstances.values())) {\n pibblInstance.controller.dispose();\n }\n GLOBAL_STATE.pibblInstances.clear();\n GLOBAL_STATE.clippingStack = [];\n GLOBAL_STATE.layoutStack = undefined;\n GLOBAL_STATE.anonElementNames = new WeakMap<any, string>();\n clearTempState();\n}\n\nexport function cleanupPibblInstance(pibblInstance: PibblInstance): void {\n const { canvas } = pibblInstance;\n if (pibblInstance.mainTeardowns.closed) {\n return;\n }\n\n if (!pibblInstance.parent) {\n unregisterRootInstance(pibblInstance);\n }\n\n if (GLOBAL_STATE.pibblInstances.get(canvas) === pibblInstance) {\n GLOBAL_STATE.pibblInstances.delete(canvas);\n }\n pibblInstance.eventParent = undefined;\n pibblInstance.focusParentBridge = undefined;\n pibblInstance.mainTeardowns.execute();\n runTeardown(() => pibblInstance.backendDriver.dispose());\n runTeardown(() => {\n for (const service of pibblInstance.optionalServices.values()) service.dispose();\n pibblInstance.optionalServices.clear();\n });\n if (!pibblInstance.parent) {\n for (const observers of pibblInstance.eventRoot.observers.values()) {\n observers.clear();\n }\n pibblInstance.eventRoot.observers.clear();\n pibblInstance.eventRoot.targets.clear();\n for (const listeners of pibblInstance.eventRoot.listenersByComponent.values()) {\n listeners.clear();\n }\n pibblInstance.eventRoot.listenersByComponent.clear();\n pibblInstance.eventRoot.pointerCaptures.clear();\n pibblInstance.eventRoot.onNodeRelease = undefined;\n pibblInstance.eventRoot.onTargetUpdate = undefined;\n pibblInstance.eventRoot.focusPolicy = undefined;\n pibblInstance.eventRoot.renderTransaction = undefined;\n pibblInstance.eventRoot.rootInstance = undefined;\n }\n pibblInstance.regions?.clear();\n pibblInstance.paintEntries?.clear();\n pibblInstance.cursorDefaults?.clear();\n const interaction = pibblInstance.interaction;\n if (interaction) {\n if (\n interaction.cursorCanvas &&\n interaction.cursorStyle &&\n interaction.cursorCanvas.style.cursor === interaction.cursorStyle\n ) {\n interaction.cursorCanvas.style.removeProperty('cursor');\n }\n interaction.hoveredRegion = undefined;\n interaction.primaryDown = undefined;\n interaction.primaryUp = undefined;\n interaction.auxiliaryDown.clear();\n interaction.auxiliaryUp.clear();\n interaction.clickStreakTarget = undefined;\n interaction.clickStreak = 0;\n interaction.cursorRegion = undefined;\n interaction.cursorDefault = undefined;\n interaction.pointerCanvas = undefined;\n interaction.cursorCanvas = undefined;\n interaction.cursorStyle = undefined;\n }\n pibblInstance.refs.clear();\n pibblInstance.pendingRoot = NO_PENDING_ROOT;\n pibblInstance.pendingUpdateParents = false;\n}\n\nexport function clearTempState() {\n GLOBAL_STATE.seenIds = undefined;\n GLOBAL_STATE.seenKeys = undefined;\n GLOBAL_STATE.canvas = undefined;\n GLOBAL_STATE.backendDriver = undefined;\n GLOBAL_STATE.backendFrame = undefined;\n GLOBAL_STATE.backendEnvironment = undefined;\n GLOBAL_STATE.renderContext = undefined;\n GLOBAL_STATE.renderTarget = undefined;\n GLOBAL_STATE.worldBaseTransform = undefined;\n GLOBAL_STATE.worldExactTransform = undefined;\n GLOBAL_STATE.worldPaintAnchorTransform = undefined;\n GLOBAL_STATE.presentationTransformLineage = undefined;\n GLOBAL_STATE.presentationTransformLineageTrackingDepth = 0;\n GLOBAL_STATE.renderTransaction = undefined;\n GLOBAL_STATE.frameSnapshot = undefined;\n GLOBAL_STATE.primitiveReceiverToken = undefined;\n GLOBAL_STATE.layoutStack = undefined;\n clearComponentState();\n}\n\nexport function clearComponentState() {\n GLOBAL_STATE.componentRefs = undefined;\n GLOBAL_STATE.componentIsMounting = false;\n GLOBAL_STATE.componentHookIndex = 0;\n}\n"],
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { cancelPendingMount } from './mount-request.js';\nimport type { LayoutContext } from './layout/types.js';\nimport type { PibblNode } from './element/types.js';\nimport type { RenderTargetSnapshot } from './render-target.js';\nimport type { PibblFrameSnapshot } from './scheduler/types.js';\nimport { unregisterRootInstance } from './scheduler/realm-scheduler.js';\nimport type {\n PibblBackendDriver,\n PibblBackendFrame,\n} from './backend/types.js';\nimport type {\n Canvas,\n PibblComponentRefs,\n PibblClippingStackEntry,\n PibblInstance,\n PibblRenderTransaction,\n RenderingContext2D,\n} from './types.js';\nimport { runTeardown } from './teardowns.js';\n\nexport const NO_PENDING_ROOT = Symbol('PIBBL_NO_PENDING_ROOT');\nexport type PendingRoot = PibblNode | typeof NO_PENDING_ROOT;\n\n/** @internal Exact Pibbl-owned presentation transforms for the active traversal. */\nexport interface PibblPresentationTransformLineage {\n readonly parent: PibblPresentationTransformLineage | undefined;\n readonly localTransform: DOMMatrix;\n /** Number of raw Canvas transform deltas absorbed before this Pibbl node. */\n readonly untrackedCanvasTransformCount: number;\n}\n\nexport interface GlobalState {\n pibblInstances: Map<Canvas, PibblInstance>;\n currentPibblInstance: PibblInstance | undefined;\n componentRefs: PibblComponentRefs<any> | undefined;\n canvas: Canvas | undefined;\n componentIsMounting: boolean;\n componentHookIndex: number;\n backendDriver: PibblBackendDriver<unknown> | undefined;\n backendFrame: PibblBackendFrame<unknown> | undefined;\n backendEnvironment: unknown;\n renderContext: RenderingContext2D | undefined;\n renderTarget: RenderTargetSnapshot | undefined;\n worldBaseTransform: DOMMatrix | undefined;\n worldExactTransform: DOMMatrix | undefined;\n worldPaintAnchorTransform: DOMMatrix | undefined;\n presentationTransformLineage: PibblPresentationTransformLineage | undefined;\n presentationTransformLineageTrackingDepth: number;\n renderTransaction: PibblRenderTransaction | undefined;\n frameSnapshot: PibblFrameSnapshot | undefined;\n primitiveReceiverToken: object | undefined;\n seenIds: Set<string> | undefined;\n seenKeys: Set<string> | undefined;\n clippingStack: PibblClippingStackEntry[];\n htmlFilterDepth: number;\n layoutStack: LayoutContext[] | undefined;\n anonElementNames: WeakMap<any, string>;\n anon: number;\n}\n\nexport const GLOBAL_STATE: GlobalState = {\n pibblInstances: new Map(),\n currentPibblInstance: undefined,\n componentRefs: undefined,\n canvas: undefined,\n componentIsMounting: false,\n componentHookIndex: 0,\n backendDriver: undefined,\n backendFrame: undefined,\n backendEnvironment: undefined,\n renderContext: undefined,\n renderTarget: undefined,\n worldBaseTransform: undefined,\n worldExactTransform: undefined,\n worldPaintAnchorTransform: undefined,\n presentationTransformLineage: undefined,\n presentationTransformLineageTrackingDepth: 0,\n renderTransaction: undefined,\n frameSnapshot: undefined,\n primitiveReceiverToken: undefined,\n seenIds: undefined,\n seenKeys: undefined,\n clippingStack: [],\n htmlFilterDepth: 0,\n layoutStack: undefined,\n anonElementNames: new WeakMap(),\n anon: 0,\n};\n\nexport function getComponentRefs() {\n if (!GLOBAL_STATE.componentRefs) {\n throw new Error('No component refs available');\n }\n return GLOBAL_STATE.componentRefs;\n}\n\nexport function getCanvas() {\n if (!GLOBAL_STATE.canvas) {\n throw new Error('No canvas available');\n }\n return GLOBAL_STATE.canvas;\n}\n\nexport function getCurrentPibblInstance() {\n if (!GLOBAL_STATE.currentPibblInstance) {\n throw new Error('No Pibbl instance available');\n }\n return GLOBAL_STATE.currentPibblInstance;\n}\n\nexport function getInteractionRoot(pibblInstance: PibblInstance): PibblInstance {\n return pibblInstance.interactionRoot ?? pibblInstance;\n}\n\nexport function getPibblInstance(canvas: Canvas) {\n const pibblInstance = GLOBAL_STATE.pibblInstances.get(canvas);\n if (!pibblInstance) {\n throw new Error('Pibbl instance not found');\n }\n return pibblInstance;\n}\n\n/**\n * Used to get a name for an anonymous function.\n * @param fn The anonymous function to get a name for\n * @returns A name for the anonymous function\n */\nexport function getAnonElemName(fn: any) {\n if (!GLOBAL_STATE.anonElementNames.has(fn)) {\n GLOBAL_STATE.anonElementNames.set(fn, `Anon${GLOBAL_STATE.anon++}`);\n }\n return GLOBAL_STATE.anonElementNames.get(fn)!;\n}\n\n/**\n * Useful for testing and HMR.\n * DO NOT USE IN PROD\n */\nexport function clearSharedState() {\n for (const pibblInstance of Array.from(GLOBAL_STATE.pibblInstances.values())) {\n pibblInstance.controller.dispose();\n }\n GLOBAL_STATE.pibblInstances.clear();\n GLOBAL_STATE.clippingStack = [];\n GLOBAL_STATE.layoutStack = undefined;\n GLOBAL_STATE.anonElementNames = new WeakMap<any, string>();\n clearTempState();\n}\n\nexport function cleanupPibblInstance(pibblInstance: PibblInstance): void {\n const { canvas } = pibblInstance;\n if (pibblInstance.mainTeardowns.closed) {\n return;\n }\n\n if (!pibblInstance.parent) {\n unregisterRootInstance(pibblInstance);\n }\n\n if (GLOBAL_STATE.pibblInstances.get(canvas) === pibblInstance) {\n if (!pibblInstance.parent) cancelPendingMount(canvas);\n GLOBAL_STATE.pibblInstances.delete(canvas);\n }\n pibblInstance.eventParent = undefined;\n pibblInstance.focusParentBridge = undefined;\n pibblInstance.mainTeardowns.execute();\n runTeardown(() => pibblInstance.backendDriver.dispose());\n runTeardown(() => {\n for (const service of pibblInstance.optionalServices.values()) service.dispose();\n pibblInstance.optionalServices.clear();\n });\n if (!pibblInstance.parent) {\n for (const observers of pibblInstance.eventRoot.observers.values()) {\n observers.clear();\n }\n pibblInstance.eventRoot.observers.clear();\n pibblInstance.eventRoot.targets.clear();\n for (const listeners of pibblInstance.eventRoot.listenersByComponent.values()) {\n listeners.clear();\n }\n pibblInstance.eventRoot.listenersByComponent.clear();\n pibblInstance.eventRoot.pointerCaptures.clear();\n pibblInstance.eventRoot.onNodeRelease = undefined;\n pibblInstance.eventRoot.onTargetUpdate = undefined;\n pibblInstance.eventRoot.focusPolicy = undefined;\n pibblInstance.eventRoot.renderTransaction = undefined;\n pibblInstance.eventRoot.rootInstance = undefined;\n }\n pibblInstance.regions?.clear();\n pibblInstance.paintEntries?.clear();\n pibblInstance.cursorDefaults?.clear();\n const interaction = pibblInstance.interaction;\n if (interaction) {\n if (\n interaction.cursorCanvas &&\n interaction.cursorStyle &&\n interaction.cursorCanvas.style.cursor === interaction.cursorStyle\n ) {\n interaction.cursorCanvas.style.removeProperty('cursor');\n }\n interaction.hoveredRegion = undefined;\n interaction.primaryDown = undefined;\n interaction.primaryUp = undefined;\n interaction.auxiliaryDown.clear();\n interaction.auxiliaryUp.clear();\n interaction.clickStreakTarget = undefined;\n interaction.clickStreak = 0;\n interaction.cursorRegion = undefined;\n interaction.cursorDefault = undefined;\n interaction.pointerCanvas = undefined;\n interaction.cursorCanvas = undefined;\n interaction.cursorStyle = undefined;\n }\n pibblInstance.refs.clear();\n pibblInstance.pendingRoot = NO_PENDING_ROOT;\n pibblInstance.pendingUpdateParents = false;\n}\n\nexport function clearTempState() {\n GLOBAL_STATE.seenIds = undefined;\n GLOBAL_STATE.seenKeys = undefined;\n GLOBAL_STATE.canvas = undefined;\n GLOBAL_STATE.backendDriver = undefined;\n GLOBAL_STATE.backendFrame = undefined;\n GLOBAL_STATE.backendEnvironment = undefined;\n GLOBAL_STATE.renderContext = undefined;\n GLOBAL_STATE.renderTarget = undefined;\n GLOBAL_STATE.worldBaseTransform = undefined;\n GLOBAL_STATE.worldExactTransform = undefined;\n GLOBAL_STATE.worldPaintAnchorTransform = undefined;\n GLOBAL_STATE.presentationTransformLineage = undefined;\n GLOBAL_STATE.presentationTransformLineageTrackingDepth = 0;\n GLOBAL_STATE.renderTransaction = undefined;\n GLOBAL_STATE.frameSnapshot = undefined;\n GLOBAL_STATE.primitiveReceiverToken = undefined;\n GLOBAL_STATE.layoutStack = undefined;\n clearComponentState();\n}\n\nexport function clearComponentState() {\n GLOBAL_STATE.componentRefs = undefined;\n GLOBAL_STATE.componentIsMounting = false;\n GLOBAL_STATE.componentHookIndex = 0;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,24 +1,14 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { PibblAnimatedValueOptions } from '../animation/types.js';
|
|
2
2
|
import type { Signal, SignalValue } from '../signals/types.js';
|
|
3
|
+
type AnimatedValueInputs<T> = {
|
|
4
|
+
readonly [K in keyof PibblAnimatedValueOptions<T>]: SignalValue<PibblAnimatedValueOptions<T>[K]>;
|
|
5
|
+
};
|
|
3
6
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* @param
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* @returns A readonly signal containing the animated value. See {@link Signal}.
|
|
7
|
+
* Presents a target through an immutable animation definition or a pure animation factory.
|
|
8
|
+
* @param targetInput - Target value or signal. See {@link SignalValue}.
|
|
9
|
+
* @param optionsInput - Animation definition, initial value, equality, and diagnostic settings;
|
|
10
|
+
* fields and the options object may be signals. See {@link PibblAnimatedValueOptions}.
|
|
11
|
+
* @returns One stable readonly animated signal. See {@link Signal}.
|
|
10
12
|
*/
|
|
11
|
-
export declare function useAnimatedValue(
|
|
12
|
-
|
|
13
|
-
}>): Signal<number>;
|
|
14
|
-
/**
|
|
15
|
-
* Animates a target using a tween and optional custom interpolation. See
|
|
16
|
-
* {@link PibblTweenAnimatedValueOptions} and {@link Signal}.
|
|
17
|
-
* @param target - Target value or signal whose changes start transitions. See {@link SignalValue}.
|
|
18
|
-
* @param options - Spring or tween configuration, including signal-backed fields. See
|
|
19
|
-
* {@link SignalValue} , {@link PibblTweenAnimatedValueOptions} .
|
|
20
|
-
* @returns A readonly signal containing the animated value. See {@link Signal}.
|
|
21
|
-
*/
|
|
22
|
-
export declare function useAnimatedValue<T>(target: SignalValue<T>, options: SignalValue<{
|
|
23
|
-
readonly [K in keyof PibblTweenAnimatedValueOptions<T>]: SignalValue<PibblTweenAnimatedValueOptions<T>[K]>;
|
|
24
|
-
}>): Signal<T>;
|
|
13
|
+
export declare function useAnimatedValue<T>(targetInput: SignalValue<T>, optionsInput: SignalValue<AnimatedValueInputs<NoInfer<T>>>): Signal<T>;
|
|
14
|
+
export {};
|