@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
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/lib/layout/wasm/region.ts"],
|
|
4
|
+
"sourcesContent": ["import { disposeAllocationCheckpoint } from '../allocation-checkpoint-owner.js';\n/// <reference types=\"vite/client\" />\nimport type { PrimitiveMeasurementEntry } from '../measure.js';\nimport type { FlexAllocationCache } from '../flex-allocation-cache.js';\nimport { readyLayoutModule } from './module.js';\nimport { GridV2Region, type GridV2Cell, type GridV2Kernel } from '../grid-kernel.js';\nimport { GLOBAL_STATE } from '../../global-state.js';\nimport { signalGraphSnapshot } from '../../signals/graph.js';\nimport type { PibblComponentRefs, PibblInstance } from '../../types.js';\n\n/** Native layout is the supported engine for every build. */\nexport const nativeLayout = true;\nconst counters = { activeGridArenas: 0, gridArenaCreates: 0, flowPlacements: 0, gridCellPlacements: 0, gridTrackResolutions: 0, lineFormations: 0, cachedMeasurements: 0, mainPlacements: 0, crossPlacements: 0, solves: 0, measurementSolves: 0, measuredLeaves: 0, nodeReuses: 0, nodeCreates: 0, activeNodes: 0, activeArenas: 0, activeWasmInstances: 0, wasmInstanceCreates: 0, frames: 0, allocationPasses: 0, allocationItemVisits: 0, allocationCacheHits: 0 };\nexport function snapshotWasmLayoutDiagnostics() {\n const signals = signalGraphSnapshot();\n return {\n ...counters,\n structureInputInvalidations: signals.structureInputInvalidations,\n layoutInputInvalidations: signals.layoutInputInvalidations,\n measurementInputInvalidations: signals.measurementInputInvalidations,\n paintInputInvalidations: signals.paintInputInvalidations,\n transformInputInvalidations: signals.transformInputInvalidations,\n interactionInputInvalidations: signals.interactionInputInvalidations,\n unknownInputInvalidations: signals.unknownInputInvalidations,\n };\n}\nif (nativeLayout) {\n // Dev inspector only. Not a supported package export or signal dependency.\n Object.defineProperty(globalThis, '__PIBBL_LAYOUT_DIAGNOSTICS__', {\n configurable: true, value: snapshotWasmLayoutDiagnostics,\n });\n}\ninterface Kernel {\n memory: WebAssembly.Memory;\n arena_create(): number;\n arena_generation(handle: number): number;\n arena_dispose(handle: number, generation: number): number;\n resize(handle: number, generation: number, count: number): number;\n solve(handle: number, generation: number, main: number, gap: number): number;\n solve_wrap(handle: number, generation: number, main: number, gap: number): number;\n last_wrap_line_count(handle: number, generation: number): number;\n first_wrap_line_count(handle: number, generation: number): number;\n place_wrap_main(handle: number, generation: number, main: number, gap: number, alignment: number, reverse: number): number;\n place_wrap_main_auto(handle: number, generation: number, main: number, gap: number, alignment: number, reverse: number): number;\n place_wrap_cross(handle: number, generation: number, size: number, gap: number, alignment: number, reverse: number): number;\n resize_grid(handle: number, generation: number, count: number, axis: number): number;\n resolve_grid_tracks(handle: number, generation: number, bound: number, gap: number, axis: number): number;\n resize_flow(handle: number, generation: number, count: number): number;\n place_flow(handle: number, generation: number, bound: number, gap: number, lineGap: number, wrap: number): number;\n resize_grid_cells(handle: number, generation: number, count: number): number;\n place_grid_cells(handle: number, generation: number): number;\n resize_cross(handle: number, generation: number, count: number): number;\n place_cross(handle: number, generation: number, size: number, reverse: number): number;\n place_last_baseline(handle: number, generation: number, size: number): number;\n place_wrap_last_baseline(handle: number, generation: number, size: number, gap: number, alignment: number, reverse: number): number;\n place_first_baseline(handle: number, generation: number, size: number): number;\n place_wrap_first_baseline(handle: number, generation: number, size: number, gap: number, alignment: number, reverse: number): number;\n resize_main_auto(handle: number, generation: number, count: number): number;\n place_main_auto(handle: number, generation: number, main: number, gap: number, alignment: number, reverse: number): number;\n place_main(handle: number, generation: number, main: number, gap: number, alignment: number, reverse: number): number;\n resize_intrinsic_main(handle: number, generation: number, count: number): number;\n prepare_intrinsic_main_queries(handle: number, generation: number, externalOwner: number, initialAvailable: number, rootMin: number, rootMax: number, mode: number, gap: number): number;\n resolve_intrinsic_main(handle: number, generation: number, externalOwner: number, initialAvailable: number, rootMin: number, rootMax: number, mode: number, gap: number): number;\n resolve_intrinsic_main_known_owner(handle: number, generation: number, externalOwner: number, initialAvailable: number, rootMin: number, rootMax: number, mode: number, gap: number): number;\n intrinsic_main_auto_free(handle: number, generation: number): number;\n place_main_auto_staged(handle: number, generation: number, main: number, gap: number, alignment: number, reverse: number, autoFree: number): number;\n intrinsic_main_result(handle: number, generation: number): number;\n intrinsic_main_contribution(handle: number, generation: number): number;\n dispose(): void;\n}\nconst rootOwners = new WeakMap<PibblInstance, RootLayoutOwner>();\nclass RootLayoutOwner {\n private exports: Kernel | undefined;\n private handles = new Map<number, number>();\n private readonly grids = new Set<GridV2Region>();\n private teardown: (() => void) | undefined;\n constructor(private readonly mount?: PibblInstance) {\n if (mount?.mainTeardowns.closed) throw new Error('Cannot allocate layout for a disposed root.');\n this.exports = new WebAssembly.Instance(readyLayoutModule()).exports as unknown as Kernel;\n counters.activeWasmInstances++; counters.wasmInstanceCreates++;\n if (mount) {\n this.teardown = () => this.dispose();\n mount.mainTeardowns.add(this.teardown);\n }\n }\n get kernel(): Kernel {\n if (!this.exports) throw new Error('The root layout instance is disposed.');\n return this.exports;\n }\n createGrid(): GridV2Region {\n const grid = new GridV2Region(this.kernel as unknown as GridV2Kernel, () => {\n if (this.grids.delete(grid)) counters.activeGridArenas--;\n });\n this.grids.add(grid); counters.activeGridArenas++; counters.gridArenaCreates++;\n return grid;\n }\n has(handle: number, generation: number): boolean { return this.handles.get(handle) === generation && generation !== 0; }\n create(): { handle: number; generation: number } {\n const handle = this.kernel.arena_create();\n const generation = handle ? this.kernel.arena_generation(handle) : 0;\n if (!handle || !generation) throw new Error('Layout region handle allocation failed.');\n this.handles.set(handle, generation); counters.activeArenas++;\n return { handle, generation };\n }\n release(handle: number, generation: number): void {\n if (!this.has(handle, generation)) return;\n try {\n if (this.kernel.arena_dispose(handle, generation) !== 0) throw new Error('Layout region generation is stale.');\n } catch (error) {\n this.dispose(error instanceof WebAssembly.RuntimeError);\n throw error;\n } finally {\n if (this.has(handle, generation)) { this.handles.delete(handle); counters.activeArenas--; }\n }\n }\n dispose(trapped = false): void {\n const kernel = this.exports;\n if (!kernel) return;\n this.exports = undefined;\n counters.activeArenas -= this.handles.size; this.handles.clear();\n counters.activeWasmInstances--;\n if (this.mount) {\n if (rootOwners.get(this.mount) === this) rootOwners.delete(this.mount);\n if (this.teardown) this.mount.mainTeardowns.remove(this.teardown);\n this.teardown = undefined;\n }\n // A trap can leave Rust RefCell borrows locked; do not re-enter that instance.\n let errors: unknown[] | undefined;\n for (const grid of this.grids) {\n try { if (trapped) grid.abandon(); else grid.dispose(); }\n catch (error) { (errors ??= []).push(error); }\n }\n this.grids.clear();\n if (!trapped) {\n try { kernel.dispose(); } catch (error) { (errors ??= []).push(error); }\n }\n if (errors?.length === 1) throw errors[0];\n if (errors?.length) throw new AggregateError(errors, 'Native layout disposal failed.');\n }\n}\nfunction acquireRootOwner(mount?: PibblInstance): RootLayoutOwner {\n if (!mount) return new RootLayoutOwner();\n let owner = rootOwners.get(mount);\n if (!owner) { owner = new RootLayoutOwner(mount); rootOwners.set(mount, owner); }\n return owner;\n}\n\n// Measurement clears GLOBAL_STATE before recursive provider evaluation. Preserve only\n// the current root owner in this synchronous scope; it never lends a mounted region.\nlet measurementOwner: PibblInstance | undefined;\nexport function withMeasurementLayoutOwner<T>(owner: PibblInstance | undefined, work: () => T): T {\n const previous = measurementOwner;\n if (owner) measurementOwner = owner;\n try { return work(); }\n finally { measurementOwner = previous; }\n}\n\n/**\n * Solves a finite nowrap main axis in a disposable native arena. This is used only\n * while intrinsic measurement has an exact main constraint and must finish before\n * any descendant measurement callback runs.\n */\nexport type NumericFlexMainInput = Pick<NumericFlexItem,\n 'baseMain' | 'minMain' | 'maxMain' | 'paddingMain' | 'grow' | 'shrink' |\n 'marginMainBefore' | 'marginMainAfter'>;\n\ntype IntrinsicMainUnit = 'none' | 'point' | 'percent';\ninterface IntrinsicMainLength { readonly value?: number; readonly unit: IntrinsicMainUnit; }\nexport interface NumericIntrinsicMainItem {\n readonly base: number;\n readonly min: IntrinsicMainLength;\n readonly max: IntrinsicMainLength;\n /** Private two-phase marker for a direct constrained provider. */\n readonly measured?: boolean;\n /** Native envelope copied before invoking application measurement code. */\n readonly queryMaximum?: number;\n}\nexport interface NumericIntrinsicMainQuery {\n readonly externalOwner?: number;\n readonly initialAvailable?: number;\n readonly rootMin?: number;\n readonly rootMax?: number;\n readonly mode: 'exact' | 'fit-content' | 'max-content';\n readonly gap: number;\n}\nexport interface NumericIntrinsicMainResult {\n readonly main: number;\n /** Native root-bound line contribution for a same-axis parent continuation. */\n readonly contributionMain: number;\n readonly autoMarginFreeMain: number;\n readonly targets: readonly number[];\n readonly effectiveMins: readonly number[];\n readonly effectiveMaxes: readonly number[];\n}\nexport interface NumericIntrinsicMainQueries { readonly maximums: readonly number[]; }\nconst intrinsicUnitCode: Record<IntrinsicMainUnit, number> = { none: 0, point: 1, percent: 2 };\nconst intrinsicModeCode: Record<NumericIntrinsicMainQuery['mode'], number> = {\n exact: 0, 'fit-content': 1, 'max-content': 2,\n};\nfunction intrinsicScalar(value: number | undefined, name: string): number {\n if (value === undefined) return Number.NaN;\n if (!Number.isFinite(value) || value < 0) throw new RangeError(`Intrinsic ${name} must be finite and nonnegative.`);\n return value;\n}\nfunction writeIntrinsicLength(records: Float64Array, offset: number, length: IntrinsicMainLength, name: string): void {\n const code = intrinsicUnitCode[length.unit];\n if (length.unit === 'none') {\n if (length.value !== undefined) throw new RangeError(`Intrinsic ${name} without a unit must omit its value.`);\n records[offset] = 0; records[offset + 1] = code; return;\n }\n if (length.value === undefined || !Number.isFinite(length.value) || length.value < 0) {\n throw new RangeError(`Intrinsic ${name} must be finite and nonnegative.`);\n }\n records[offset] = length.value; records[offset + 1] = code;\n}\nfunction writeIntrinsicMainRecord(records: Float64Array, offset: number, item: NumericIntrinsicMainItem, preparing: boolean): void {\n if (!Number.isFinite(item.base) || item.base < 0) throw new RangeError('Intrinsic Flex bases must be finite and nonnegative.');\n records[offset] = item.base;\n writeIntrinsicLength(records, offset + 1, item.min, 'minimum');\n writeIntrinsicLength(records, offset + 3, item.max, 'maximum');\n if (!item.measured) {\n if (item.queryMaximum !== undefined) throw new RangeError('Unmeasured intrinsic Flex items cannot retain a query maximum.');\n records[offset + 8] = 0; records[offset + 9] = 0; return;\n }\n if (preparing) { records[offset + 8] = 1; records[offset + 9] = 0; return; }\n if (item.queryMaximum === undefined || !(Number.isFinite(item.queryMaximum) || item.queryMaximum === Infinity) || item.queryMaximum < 0) throw new RangeError('Measured intrinsic Flex items require a nonnegative query maximum.');\n records[offset + 8] = 2; records[offset + 9] = item.queryMaximum;\n}\nfunction validateIntrinsicQuery(query: NumericIntrinsicMainQuery): { externalOwner: number; initialAvailable: number; rootMin: number; rootMax: number } {\n if (!Number.isFinite(query.gap) || query.gap !== 0) throw new RangeError('Staged intrinsic Flex currently requires a zero numeric gap.');\n if (query.mode === 'max-content' ? query.initialAvailable !== undefined : query.initialAvailable === undefined) throw new RangeError('Intrinsic main query mode and availability do not agree.');\n const externalOwner = intrinsicScalar(query.externalOwner, 'external owner');\n const initialAvailable = intrinsicScalar(query.initialAvailable, 'initial availability');\n const rootMin = intrinsicScalar(query.rootMin, 'root minimum');\n const rootMax = intrinsicScalar(query.rootMax, 'root maximum');\n if (!Number.isNaN(rootMin) && !Number.isNaN(rootMax) && rootMin > rootMax) throw new RangeError('Intrinsic root minimum must not exceed its maximum.');\n return { externalOwner, initialAvailable, rootMin, rootMax };\n}\nfunction intrinsicStatus(status: number, operation: string): void {\n if (status === 2) throw new RangeError('Intrinsic minimum must not exceed maximum.');\n if (status !== 0) throw new Error(`Experimental staged intrinsic Flex ${operation} failed (${status}).`);\n}\n\n/** Copies finite native envelopes before evaluating paired measurement callbacks. */\nexport function prepareTransientIntrinsicMainQueries(items: readonly NumericIntrinsicMainItem[], query: NumericIntrinsicMainQuery): NumericIntrinsicMainQueries {\n const { externalOwner, initialAvailable, rootMin, rootMax } = validateIntrinsicQuery(query);\n const owner = acquireRootOwner(measurementOwner); const standalone = measurementOwner === undefined;\n let handle = 0, generation = 0;\n try {\n ({ handle, generation } = owner.create());\n const pointer = owner.kernel.resize_intrinsic_main(handle, generation, items.length);\n if (!pointer && items.length) throw new Error('Intrinsic Flex measurement storage allocation failed.');\n const records = new Float64Array(owner.kernel.memory.buffer, pointer, items.length * 10);\n for (let index = 0; index < items.length; index++) writeIntrinsicMainRecord(records, index * 10, items[index], true);\n intrinsicStatus(owner.kernel.prepare_intrinsic_main_queries(handle, generation, externalOwner, initialAvailable, rootMin, rootMax, intrinsicModeCode[query.mode], query.gap), 'query preparation');\n const output = new Float64Array(owner.kernel.memory.buffer, pointer, items.length * 10);\n const maximums = new Array<number>(items.length);\n for (let index = 0; index < items.length; index++) {\n const maximum = output[index * 10 + 9];\n if (items[index].measured) {\n if (!(Number.isFinite(maximum) || maximum === Infinity) || maximum < 0) throw new Error('Experimental staged intrinsic Flex query produced an invalid provider maximum.');\n maximums[index] = maximum;\n } else {\n if (maximum !== 0) throw new Error('Experimental staged intrinsic Flex query wrote a numeric item envelope.');\n maximums[index] = 0;\n }\n }\n counters.solves++; counters.measurementSolves++;\n return { maximums };\n } catch (error) { if (error instanceof WebAssembly.RuntimeError) owner.dispose(true); throw error; }\n finally { try { if (handle) owner.release(handle, generation); } finally { if (standalone) owner.dispose(); } }\n}\n\n/**\n * Runs the native staged intrinsic-main query in a disposable arena.\n * The returned effective bounds are a private handoff to the matching normal\n * Flex placement; authored percentage styles are never rewritten.\n */\nexport function resolveTransientIntrinsicMain(items: readonly NumericIntrinsicMainItem[], query: NumericIntrinsicMainQuery): NumericIntrinsicMainResult {\n return resolveIntrinsicMain(items, query, false);\n}\n/** Native normal-placement phase for a direct, unmeasured known owner. */\nexport function resolveTransientKnownOwnerMain(items: readonly NumericIntrinsicMainItem[], query: NumericIntrinsicMainQuery): NumericIntrinsicMainResult {\n return resolveIntrinsicMain(items, query, true);\n}\nfunction resolveIntrinsicMain(items: readonly NumericIntrinsicMainItem[], query: NumericIntrinsicMainQuery, normalOwner: boolean): NumericIntrinsicMainResult {\n const { externalOwner, initialAvailable, rootMin, rootMax } = validateIntrinsicQuery(query);\n const owner = acquireRootOwner(measurementOwner);\n const standalone = measurementOwner === undefined;\n let handle = 0, generation = 0;\n try {\n ({ handle, generation } = owner.create());\n const pointer = owner.kernel.resize_intrinsic_main(handle, generation, items.length);\n if (!pointer && items.length) throw new Error('Intrinsic Flex measurement storage allocation failed.');\n const records = new Float64Array(owner.kernel.memory.buffer, pointer, items.length * 10);\n for (let index = 0; index < items.length; index++) {\n const item = items[index], offset = index * 10;\n writeIntrinsicMainRecord(records, offset, item, false);\n }\n const resolve = normalOwner ? owner.kernel.resolve_intrinsic_main_known_owner : owner.kernel.resolve_intrinsic_main;\n const status = resolve(handle, generation, externalOwner, initialAvailable, rootMin, rootMax,\n intrinsicModeCode[query.mode], query.gap);\n intrinsicStatus(status, 'resolution');\n const main = owner.kernel.intrinsic_main_result(handle, generation);\n const contributionMain = owner.kernel.intrinsic_main_contribution(handle, generation);\n const autoMarginFreeMain = owner.kernel.intrinsic_main_auto_free(handle, generation);\n if (!Number.isFinite(main) || main < 0 || !Number.isFinite(contributionMain) || contributionMain < 0 || !Number.isFinite(autoMarginFreeMain) || autoMarginFreeMain < 0) {\n throw new Error('Experimental staged intrinsic Flex query produced invalid native owner phases.');\n }\n // Native may grow its memory while resolving. Copy all outputs before release.\n const output = new Float64Array(owner.kernel.memory.buffer, pointer, items.length * 10);\n const targets = new Array<number>(items.length);\n const effectiveMins = new Array<number>(items.length);\n const effectiveMaxes = new Array<number>(items.length);\n for (let index = 0; index < items.length; index++) {\n const offset = index * 10;\n const target = output[offset + 5], minimum = output[offset + 6], maximum = output[offset + 7];\n if (!Number.isFinite(target) || target < 0 || !Number.isFinite(minimum) || minimum < 0 ||\n !(Number.isFinite(maximum) || maximum === Infinity) || maximum < minimum) {\n throw new Error('Experimental staged intrinsic Flex query produced invalid child bounds.');\n }\n targets[index] = target; effectiveMins[index] = minimum; effectiveMaxes[index] = maximum;\n }\n counters.solves++; counters.measurementSolves++;\n return { main, contributionMain, autoMarginFreeMain, targets, effectiveMins, effectiveMaxes };\n } catch (error) {\n if (error instanceof WebAssembly.RuntimeError) owner.dispose(true);\n throw error;\n } finally {\n try { if (handle) owner.release(handle, generation); }\n finally { if (standalone) owner.dispose(); }\n }\n}\nfunction writeFlexMainInput(records: Float64Array, offset: number, item: NumericFlexMainInput): void {\n records[offset] = item.baseMain;\n records[offset + 1] = item.minMain;\n records[offset + 2] = item.maxMain;\n records[offset + 3] = item.paddingMain;\n records[offset + 4] = item.grow;\n records[offset + 5] = item.shrink;\n records[offset + 6] = 0;\n records[offset + 7] = 0;\n records[offset + 8] = item.marginMainBefore ?? 0;\n records[offset + 9] = item.marginMainAfter ?? 0;\n}\nexport function solveTransientFlexMain(items: readonly NumericFlexMainInput[], main: number, gap: number): number[] {\n if (!Number.isFinite(main) || main < 0 || !Number.isFinite(gap) || gap < 0) {\n throw new RangeError('Intrinsic Flex main size and gap must be finite and nonnegative.');\n }\n for (let index = 0; index < items.length; index++) {\n const item = items[index];\n if (!Number.isFinite(item.baseMain) || item.baseMain < 0 ||\n !Number.isFinite(item.minMain) || item.minMain < 0 ||\n !(Number.isFinite(item.maxMain) || item.maxMain === Infinity) || item.maxMain < item.minMain ||\n !Number.isFinite(item.paddingMain) || item.paddingMain < 0 ||\n !Number.isFinite(item.grow) || item.grow < 0 ||\n !Number.isFinite(item.shrink) || item.shrink < 0 ||\n !Number.isFinite(item.marginMainBefore ?? 0) || !Number.isFinite(item.marginMainAfter ?? 0)) {\n throw new RangeError('Intrinsic Flex inputs must contain finite numeric factors, sizes and margins with ordered main bounds.');\n }\n }\n const owner = acquireRootOwner(measurementOwner);\n const standalone = measurementOwner === undefined;\n let handle = 0, generation = 0;\n try {\n ({ handle, generation } = owner.create());\n const pointer = owner.kernel.resize(handle, generation, items.length);\n if (!pointer && items.length) throw new Error('Layout measurement storage allocation failed.');\n const records = new Float64Array(owner.kernel.memory.buffer, pointer, items.length * 10);\n for (let index = 0; index < items.length; index++) {\n writeFlexMainInput(records, index * 10, items[index]);\n }\n if (owner.kernel.solve(handle, generation, main, gap) !== 0) {\n throw new Error('Experimental Flex intrinsic main allocation failed; numeric overflow or no progress.');\n }\n // Rust may grow linear memory during solve. Copy results before releasing arena.\n const output = new Float64Array(owner.kernel.memory.buffer, pointer, items.length * 10);\n const results = new Array<number>(items.length);\n for (let index = 0; index < items.length; index++) results[index] = output[index * 10 + 6];\n counters.solves++; counters.measurementSolves++;\n return results;\n } catch (error) {\n if (error instanceof WebAssembly.RuntimeError) owner.dispose(true);\n throw error;\n } finally {\n try { if (handle) owner.release(handle, generation); }\n finally { if (standalone) owner.dispose(); }\n }\n}\nexport interface NumericFlexItem {\n baseMain: number; minMain: number; maxMain: number; paddingMain: number;\n marginMainBefore?: number; marginMainAfter?: number;\n autoMainBefore?: boolean; autoMainAfter?: boolean;\n grow: number; shrink: number; targetMain: number; receiverToken: object; layoutToken?: object;\n}\nexport interface NumericFlexCrossItem {\n preferredCross: number; paddingCross: number; minCross: number; maxCross: number;\n marginCrossBefore?: number; marginCrossAfter?: number;\n autoCrossBefore?: boolean; autoCrossAfter?: boolean;\n crossAuto: boolean; alignSelf: 'auto' | 'stretch' | 'flex-start' | 'flex-end' | 'center';\n /** Signed content-box first baseline; accepted only by dedicated baseline placement. */\n firstBaseline?: number;\n}\ntype CrossAlignment = Exclude<NumericFlexCrossItem['alignSelf'], 'auto'>;\nconst alignmentCodes: Record<CrossAlignment, number> = { stretch: 0, 'flex-start': 1, 'flex-end': 2, center: 3 };\nexport interface NumericFlowItem { width: number; height: number; alignment: 'start' | 'center' | 'end' | 'stretch'; }\ninterface FlowOptions { horizontal: boolean; mainBound: number; gap: number; lineGap: number; wrap: boolean; }\ninterface FlowCache { options: FlowOptions; items: readonly NumericFlowItem[]; boxes: { x: number; y: number; width: number; height: number }[]; }\nconst flowAlignmentCodes = { start: 0, center: 1, end: 2, stretch: 3 };\nexport interface NumericGridCell { columnStart: number; columnSpan: number; rowStart: number; rowSpan: number; }\ninterface GridCellCache { revision: number; cells: readonly NumericGridCell[]; boxes: { x: number; y: number; width: number; height: number }[]; }\nexport type NumericGridTrack = Readonly<{ kind: 'fixed'; value: number }> | Readonly<{ kind: 'percentage' | 'fraction'; factor: number }>;\ninterface GridTrackCache { tracks: readonly NumericGridTrack[]; bound: number; gap: number; values: number[]; }\ninterface GridV2TrackCache { records: readonly number[]; bound: number; gap: number; values: number[]; }\ninterface GridV2ContributionCache { records: readonly number[]; gap: number; }\ninterface GridV2CellCache {\n revision: number;\n cells: readonly GridV2Cell[];\n flow: 0 | 1 | 2 | 3;\n columnGap: number;\n rowGap: number;\n boxes: readonly { x: number; y: number; width: number; height: number }[];\n}\nfunction sameGridTracks(a: readonly NumericGridTrack[], b: readonly NumericGridTrack[]): boolean {\n if (a.length !== b.length) return false;\n for (let index = 0; index < a.length; index++) {\n const left = a[index], right = b[index];\n if (left.kind !== right.kind || (left.kind === 'fixed' ? left.value : left.factor) !== (right.kind === 'fixed' ? right.value : right.factor)) return false;\n }\n return true;\n}\nfunction sameNumbers(a: readonly number[], b: readonly number[]): boolean {\n if (a.length !== b.length) return false;\n for (let index = 0; index < a.length; index++) if (a[index] !== b[index]) return false;\n return true;\n}\nexport class LayoutRegion {\n private gridV2: GridV2Region | undefined;\n private flowCache: FlowCache | undefined;\n placeFlow(items: readonly NumericFlowItem[], options: FlowOptions): readonly { x: number; y: number; width: number; height: number }[] {\n const kernel = this.ensureOwner(); const cached = this.flowCache, prior = cached?.options;\n let equal = prior?.horizontal === options.horizontal && prior.mainBound === options.mainBound && prior.gap === options.gap && prior.lineGap === options.lineGap && prior.wrap === options.wrap && cached!.items.length === items.length;\n if (equal) for (let index = 0; index < items.length; index++) {\n const a = cached!.items[index], b = items[index];\n if (a.width !== b.width || a.height !== b.height || a.alignment !== b.alignment) { equal = false; break; }\n }\n if (equal) return cached!.boxes;\n try {\n const pointer = kernel.resize_flow(this.handle,this.generation,items.length);\n if (!pointer && items.length) throw new Error('Flow storage allocation failed.');\n const records = new Float64Array(kernel.memory.buffer,pointer,items.length*8);\n const inputs = new Array<NumericFlowItem>(items.length);\n for (let index = 0; index < items.length; index++) {\n const item = items[index], offset = index*8;\n inputs[index] = { width: item.width, height: item.height, alignment: item.alignment };\n records[offset] = options.horizontal ? item.width : item.height;\n records[offset+1] = options.horizontal ? item.height : item.width;\n records[offset+2] = flowAlignmentCodes[item.alignment];\n }\n if (kernel.place_flow(this.handle,this.generation,options.mainBound,options.gap,options.lineGap,options.wrap ? 1 : 0) !== 0) throw new RangeError('Native Flow placement produced invalid geometry.');\n const resolved = new Float64Array(kernel.memory.buffer,pointer,items.length*8);\n const boxes = new Array<{ x: number; y: number; width: number; height: number }>(items.length);\n for (let index = 0; index < items.length; index++) {\n const offset = index*8;\n boxes[index] = options.horizontal ? { x: resolved[offset+3], y: resolved[offset+4], width: resolved[offset], height: resolved[offset+5] } : { x: resolved[offset+4], y: resolved[offset+3], width: resolved[offset+5], height: resolved[offset] };\n }\n this.flowCache = { options: { ...options }, items: inputs, boxes }; counters.flowPlacements++; return boxes;\n } catch (error) { return this.fail(error); }\n }\n private gridRevision = 0;\n private gridCells: GridCellCache | undefined;\n private gridColumns: GridTrackCache | undefined;\n private gridRows: GridTrackCache | undefined;\n private gridV2Columns: GridV2TrackCache | undefined;\n private gridV2Rows: GridV2TrackCache | undefined;\n private gridV2ColumnContributions: GridV2ContributionCache | undefined;\n private gridV2RowContributions: GridV2ContributionCache | undefined;\n private gridV2Cells: GridV2CellCache | undefined;\n resolveGridTracks(tracks: readonly NumericGridTrack[], options: { bound: number; gap: number; axis: 'columns' | 'rows' }): number[] {\n const kernel = this.ensureOwner();\n const cached = options.axis === 'columns' ? this.gridColumns : this.gridRows;\n if (cached && cached.bound === options.bound && cached.gap === options.gap && sameGridTracks(cached.tracks, tracks)) return cached.values;\n try {\n const pointer = kernel.resize_grid(this.handle, this.generation, tracks.length, options.axis === 'columns' ? 0 : 1);\n if (!pointer && tracks.length) throw new Error('Grid track storage allocation failed.');\n const records = new Float64Array(kernel.memory.buffer, pointer, tracks.length * 3);\n for (let index = 0; index < tracks.length; index++) {\n const track = tracks[index];\n records[index * 3] = track.kind === 'fixed' ? 0 : track.kind === 'percentage' ? 1 : 2;\n records[index * 3 + 1] = track.kind === 'fixed' ? track.value : track.factor;\n }\n if (kernel.resolve_grid_tracks(this.handle, this.generation, options.bound, options.gap, options.axis === 'columns' ? 0 : 1) !== 0) throw new RangeError('Grid native track resolution produced invalid geometry.');\n const resolved = new Float64Array(kernel.memory.buffer, pointer, tracks.length * 3);\n const values = new Array<number>(tracks.length);\n for (let index = 0; index < tracks.length; index++) values[index] = resolved[index * 3 + 2];\n const entry = { tracks, bound: options.bound, gap: options.gap, values };\n if (options.axis === 'columns') this.gridColumns = entry; else this.gridRows = entry;\n this.gridRevision++; counters.gridTrackResolutions++;\n return values;\n } catch (error) { return this.fail(error); }\n }\n placeGridCells(cells: readonly NumericGridCell[]): readonly { x: number; y: number; width: number; height: number }[] {\n const kernel = this.ensureOwner();\n const cached = this.gridCells;\n let equal = cached?.revision === this.gridRevision && cached.cells.length === cells.length;\n if (equal) for (let index = 0; index < cells.length; index++) {\n const a = cached!.cells[index], b = cells[index];\n if (a.columnStart !== b.columnStart || a.columnSpan !== b.columnSpan || a.rowStart !== b.rowStart || a.rowSpan !== b.rowSpan) { equal = false; break; }\n }\n if (equal) return cached!.boxes;\n try {\n if (!this.gridColumns || !this.gridRows) throw new Error('Native Grid placement requires both resolved axes.');\n const pointer = kernel.resize_grid_cells(this.handle, this.generation, cells.length);\n if (!pointer && cells.length) throw new Error('Grid cell storage allocation failed.');\n const records = new Float64Array(kernel.memory.buffer, pointer, cells.length * 8);\n const inputs = new Array<NumericGridCell>(cells.length);\n for (let index = 0; index < cells.length; index++) {\n const cell = cells[index], offset = index * 8;\n inputs[index] = { columnStart: cell.columnStart, columnSpan: cell.columnSpan, rowStart: cell.rowStart, rowSpan: cell.rowSpan };\n records[offset] = cell.columnStart - 1; records[offset+1] = cell.columnSpan;\n records[offset+2] = cell.rowStart - 1; records[offset+3] = cell.rowSpan;\n }\n if (kernel.place_grid_cells(this.handle, this.generation) !== 0) throw new RangeError('Grid native cell placement produced invalid geometry.');\n const boxes = new Array<{ x: number; y: number; width: number; height: number }>(cells.length);\n for (let index = 0; index < cells.length; index++) {\n const offset = index * 8;\n boxes[index] = { x: records[offset+4], y: records[offset+5], width: records[offset+6], height: records[offset+7] };\n }\n this.gridCells = { revision: this.gridRevision, cells: inputs, boxes }; counters.gridCellPlacements++;\n return boxes;\n } catch (error) { return this.fail(error); }\n }\n /** V2 Grid records remain region-owned so paint-only work reuses native geometry. */\n resolveGridV2Tracks(records: readonly number[], options: { bound: number; gap: number; axis: 0 | 1 }): readonly number[] {\n const cached = options.axis === 0 ? this.gridV2Columns : this.gridV2Rows;\n if (cached && cached.bound === options.bound && cached.gap === options.gap && sameNumbers(cached.records, records)) return cached.values;\n try {\n const values = this.gridV2Region().tracks(records, options.bound, options.gap, options.axis) as number[];\n const entry: GridV2TrackCache = { records: records.slice(), bound: options.bound, gap: options.gap, values };\n if (options.axis === 0) {\n this.gridV2Columns = entry;\n this.gridV2ColumnContributions = undefined;\n } else {\n this.gridV2Rows = entry;\n this.gridV2RowContributions = undefined;\n }\n this.gridRevision++; counters.gridTrackResolutions++;\n return values;\n } catch (error) { return this.fail(error); }\n }\n /** Fresh native track values after Grid contributions; the prior JS snapshot is stale. */\n snapshotGridV2Tracks(axis: 0 | 1): readonly number[] {\n try {\n return this.gridV2Region().resolvedTracks(axis);\n } catch (error) {\n return this.fail(error);\n }\n }\n applyGridV2Contributions(records: readonly number[], gap: number, axis: 0 | 1): void {\n const cached = axis === 0 ? this.gridV2ColumnContributions : this.gridV2RowContributions;\n if (records.length === 0 && !cached) return;\n if (cached && cached.gap === gap && sameNumbers(cached.records, records)) return;\n try {\n // Contributions grow native bases in place. A changed contribution set\n // must start from the authored tracks, including removal of every child.\n const tracks = axis === 0 ? this.gridV2Columns : this.gridV2Rows;\n if (cached && tracks) this.gridV2Region().tracks(tracks.records, tracks.bound, tracks.gap, axis);\n this.gridV2Region().contributions(records, gap, axis);\n const entry = { records: records.slice(), gap };\n if (axis === 0) this.gridV2ColumnContributions = entry; else this.gridV2RowContributions = entry;\n this.gridRevision++; counters.gridTrackResolutions++;\n } catch (error) { this.fail(error); }\n }\n placeGridV2Cells(cells: readonly GridV2Cell[], flow: 0 | 1 | 2 | 3, columnGap: number, rowGap: number): readonly { x: number; y: number; width: number; height: number }[] {\n const cached = this.gridV2Cells;\n let equal = cached?.revision === this.gridRevision && cached.flow === flow && cached.columnGap === columnGap && cached.rowGap === rowGap && cached.cells.length === cells.length;\n if (equal) for (let index = 0; index < cells.length; index++) {\n const left = cached!.cells[index]!, right = cells[index]!;\n if (left.columnStart !== right.columnStart || left.columnSpan !== right.columnSpan || left.rowStart !== right.rowStart || left.rowSpan !== right.rowSpan) { equal = false; break; }\n }\n if (equal) return cached!.boxes;\n try {\n const boxes = this.gridV2Region().cells(cells, flow, columnGap, rowGap);\n this.gridV2Cells = { revision: this.gridRevision, cells: cells.map(cell => ({ ...cell })), flow, columnGap, rowGap, boxes };\n counters.gridCellPlacements++;\n return boxes;\n } catch (error) { return this.fail(error); }\n }\n private cachedAllocation: FlexAllocationCache | undefined;\n private layoutOwner: RootLayoutOwner | undefined;\n private handle = 0;\n private generation = 0;\n constructor(private readonly mountOwner?: PibblInstance) {}\n get allocationCache(): FlexAllocationCache | undefined {\n return this.layoutOwner && !this.layoutOwner.has(this.handle, this.generation) ? undefined : this.cachedAllocation;\n }\n set allocationCache(value: FlexAllocationCache | undefined) { this.cachedAllocation = value; }\n private ensureOwner(): Kernel {\n if (this.layoutOwner && !this.layoutOwner.has(this.handle, this.generation)) this.dispose();\n if (!this.layoutOwner) {\n this.layoutOwner = acquireRootOwner(this.mountOwner);\n const region = this.layoutOwner.create();\n this.handle = region.handle; this.generation = region.generation;\n }\n return this.layoutOwner.kernel;\n }\n /** Region-owned Grid arena; it shares this root's WebAssembly instance. */\n gridV2Region(): GridV2Region {\n if (!this.gridV2) { this.ensureOwner(); this.gridV2 = this.layoutOwner!.createGrid(); }\n return this.gridV2;\n }\n private fail(error: unknown): never {\n if (error instanceof WebAssembly.RuntimeError) this.layoutOwner?.dispose(true);\n this.dispose();\n throw error;\n }\n private records = new Map<object, readonly number[]>();\n private identities = new Map<object, Map<string, object>>();\n identity(type: object, key: string): object {\n let entries = this.identities.get(type);\n if (!entries) { entries = new Map(); this.identities.set(type, entries); }\n let token = entries.get(key);\n if (!token) { token = {}; entries.set(key, token); }\n return token;\n }\n /** Stable measurement identity without adding an absolute leaf to the native line. */\n absoluteMeasurementIdentity(type: object, key: string): object {\n this.hasAbsoluteMeasurements = true;\n const absoluteKey = `absolute:${key}`;\n const existing = this.identities.get(type)?.get(absoluteKey);\n if (existing) return existing;\n const token = this.identity(type, absoluteKey);\n GLOBAL_STATE.renderTransaction?.onFinish(success => {\n if (success) return;\n const entries = this.identities.get(type);\n if (entries?.get(absoluteKey) !== token) return;\n entries.delete(absoluteKey);\n if (entries.size === 0) this.identities.delete(type);\n });\n return token;\n }\n private results: number[] = [];\n private main = -1;\n private wrap = false;\n private crossModeKey = \"\";\n private gap = -1;\n private order: object[] = [];\n private mainPlacementKey = \"\";\n private mainOffsets: number[] = [];\n private allocationRevision = 0;\n private crossSize = -1;\n private crossRecords: readonly (readonly number[])[] = [];\n private crossResults: readonly { outerCross: number; offset: number }[] = [];\n private hasAbsoluteMeasurements = false;\n private readonly intrinsicMeasurements = new Map<object, Map<string, PrimitiveMeasurementEntry>>();\n readPrimitiveMeasurement(token: object, key: string): PrimitiveMeasurementEntry | undefined {\n const entries = this.intrinsicMeasurements.get(token), entry = entries?.get(key);\n if (entry) { entries!.delete(key); entries!.set(key, entry); }\n return entry;\n }\n writePrimitiveMeasurement(token: object, entry: PrimitiveMeasurementEntry): void {\n if (!this.layoutOwner?.has(this.handle, this.generation)) return;\n let entries = this.intrinsicMeasurements.get(token);\n if (!entries) { entries = new Map(); this.intrinsicMeasurements.set(token, entries); }\n if (entries.has(entry.key)) { entries.delete(entry.key); counters.cachedMeasurements--; }\n else if (entries.size >= 3) { entries.delete(entries.keys().next().value!); counters.cachedMeasurements--; }\n entries.set(entry.key, entry); counters.cachedMeasurements++;\n if (entry.key.startsWith('finite:absolute-size:')) this.hasAbsoluteMeasurements = true;\n }\n /** Reuses the region-owned cache without lending native line membership to absolute leaves. */\n pruneAbsoluteMeasurements(live: ReadonlySet<object> | undefined): void {\n // An absolute-only owner still needs a generation for successful cache publication.\n if (live?.size) this.ensureOwner();\n if (!this.hasAbsoluteMeasurements) return;\n let retained = false;\n for (const [token, entries] of this.intrinsicMeasurements) {\n for (const key of entries.keys()) {\n if (!key.startsWith('finite:absolute-size:')) continue;\n if (live?.has(token)) retained = true;\n else { entries.delete(key); counters.cachedMeasurements--; }\n }\n if (entries.size === 0) this.intrinsicMeasurements.delete(token);\n }\n for (const [type, entries] of this.identities) {\n for (const [key, token] of entries) {\n if (!key.startsWith('absolute:')) continue;\n if (live?.has(token)) retained = true;\n else entries.delete(key);\n }\n if (entries.size === 0) this.identities.delete(type);\n }\n this.hasAbsoluteMeasurements = retained;\n }\n private readonly measurements = new Map<object, Map<string, { width: number; height: number }>>();\n\n private textMaximums: Map<object, { content: string; font: string; width: number }> | undefined;\n readTextMaximum(token: object, content: string, font: string): number | undefined {\n const entry = this.textMaximums?.get(token);\n return entry?.content === content && entry.font === font ? entry.width : undefined;\n }\n writeTextMaximum(token: object, content: string, font: string, width: number): void {\n const entries = this.textMaximums ??= new Map();\n if (!entries.has(token)) counters.cachedMeasurements++;\n entries.set(token, { content, font, width });\n }\n readMeasurement(token: object, key: string) {\n const entries = this.measurements.get(token), result = entries?.get(key);\n if (entries && result) { entries.delete(key); entries.set(key, result); }\n return result;\n }\n writeMeasurement(token: object, key: string, size: { width: number; height: number }): void {\n let entries = this.measurements.get(token);\n if (!entries) { entries = new Map(); this.measurements.set(token, entries); }\n if (entries.has(key)) { entries.delete(key); counters.cachedMeasurements--; }\n else if (entries.size >= 2) { entries.delete(entries.keys().next().value!); counters.cachedMeasurements--; }\n entries.set(key, { ...size }); counters.cachedMeasurements++;\n }\n private releaseMeasurements(token: object): void {\n counters.cachedMeasurements -= this.intrinsicMeasurements.get(token)?.size ?? 0;\n this.intrinsicMeasurements.delete(token);\n if (this.textMaximums?.delete(token)) counters.cachedMeasurements--;\n counters.cachedMeasurements -= this.measurements.get(token)?.size ?? 0;\n this.measurements.delete(token);\n }\n\n solve(items: NumericFlexItem[], main: number, gap: number, wrap = false): void {\n try { this.solveRegion(items, main, gap, wrap); } catch (error) { this.fail(error); }\n }\n private solveRegion(items: NumericFlexItem[], main: number, gap: number, wrap: boolean): void {\n const kernel = this.ensureOwner();\n let changed = wrap !== this.wrap || main !== this.main || gap !== this.gap || items.length !== this.order.length;\n const pointer = kernel.resize(this.handle, this.generation, items.length);\n const view = new Float64Array(kernel.memory.buffer, pointer, items.length * 10);\n const alive = new Set<object>();\n for (const [i, item] of items.entries()) {\n const token = item.layoutToken ?? item.receiverToken;\n alive.add(token);\n const record = [item.baseMain, item.minMain, item.maxMain, item.paddingMain, item.grow, item.shrink, 0, 0, item.marginMainBefore ?? 0, item.marginMainAfter ?? 0];\n const previous = this.records.get(token);\n if (previous) counters.nodeReuses++;\n else { counters.nodeCreates++; counters.activeNodes++; }\n if (!previous || record.some((v, n) => v !== previous[n]) || this.order[i] !== token) {\n writeFlexMainInput(view, i * 10, item);\n this.records.set(token, record);\n changed = true;\n }\n }\n for (const token of this.records.keys()) if (!alive.has(token)) {\n this.records.delete(token); this.releaseMeasurements(token); counters.activeNodes--;\n }\n for (const [type, entries] of this.identities) {\n for (const [key, token] of entries) if (!alive.has(token) && !key.startsWith('absolute:')) entries.delete(key);\n if (entries.size === 0) this.identities.delete(type);\n }\n if (changed) {\n try {\n const status = wrap ? kernel.solve_wrap(this.handle, this.generation, main, gap) : kernel.solve(this.handle, this.generation, main, gap);\n if (status !== 0) throw new Error(`Experimental Flex WASM allocation failed (${status}); numeric overflow or no progress.`);\n // Rust scratch allocations may grow memory while solving. Never retain\n // an input view across that boundary.\n const output = new Float64Array(kernel.memory.buffer, pointer, items.length * 10);\n this.results = items.map((_, i) => output[i * 10 + 6]);\n } catch (error) { this.fail(error); }\n counters.solves++; this.allocationRevision++;\n if (wrap) counters.lineFormations++;\n this.wrap = wrap;\n this.main = main; this.gap = gap; this.order = items.map(i => i.layoutToken ?? i.receiverToken);\n }\n items.forEach((item, i) => { item.targetMain = this.results[i]; });\n }\n /** Current native source-line membership, never inferred from placements. */\n firstWrapLineCount(): number {\n if (!this.wrap || !this.layoutOwner?.has(this.handle, this.generation)) {\n return this.fail(new Error('Structural baseline requires a current wrapped allocation.'));\n }\n const count = this.layoutOwner.kernel.first_wrap_line_count(this.handle, this.generation);\n if (!Number.isInteger(count) || count < 0 || count > this.order.length || (count === 0) !== (this.order.length === 0)) {\n return this.fail(new Error('Structural baseline native first-line membership is stale or invalid.'));\n }\n return count;\n }\n /** Current native source-line membership, never inferred from placements. */\n lastWrapLineCount(): number {\n if (!this.wrap || !this.layoutOwner?.has(this.handle, this.generation)) {\n return this.fail(new Error('Structural baseline requires a current wrapped allocation.'));\n }\n const count = this.layoutOwner.kernel.last_wrap_line_count(this.handle, this.generation);\n if (!Number.isInteger(count) || count < 0 || count > this.order.length || (count === 0) !== (this.order.length === 0)) {\n return this.fail(new Error('Structural baseline native last-line membership is stale or invalid.'));\n }\n return count;\n }\n private mainAutoFlags: boolean[] | undefined;\n private mainAutoRevision = 0;\n placeMain(main: number, gap: number, alignment: 'flex-start' | 'flex-end' | 'center' | 'space-between' | 'space-around' | 'space-evenly', reverse = false, autoMargins?: readonly NumericFlexItem[], autoMarginFreeMain?: number): readonly number[] {\n if (!this.layoutOwner?.has(this.handle, this.generation)) throw new Error('Experimental Flex main placement requires a solved region.');\n const kernel = this.layoutOwner.kernel;\n const code = ['flex-start', 'flex-end', 'center', 'space-between', 'space-around', 'space-evenly'].indexOf(alignment);\n if (autoMargins) {\n const flags = this.mainAutoFlags ??= [];\n let changed = flags.length !== autoMargins.length * 2;\n for (let index = 0; index < autoMargins.length; index++) {\n const before = autoMargins[index].autoMainBefore === true;\n const after = autoMargins[index].autoMainAfter === true;\n if (flags[index * 2] !== before || flags[index * 2 + 1] !== after) changed = true;\n flags[index * 2] = before; flags[index * 2 + 1] = after;\n }\n flags.length = autoMargins.length * 2;\n if (changed) this.mainAutoRevision++;\n } else if (this.mainAutoFlags?.length) {\n this.mainAutoFlags.length = 0; this.mainAutoRevision++;\n }\n const key = `${this.allocationRevision}:${main}:${gap}:${code}:${reverse ? 1 : 0}:${this.mainAutoRevision}:${autoMarginFreeMain ?? \"geometric\"}`;\n if (key !== this.mainPlacementKey) {\n try {\n if (autoMargins) {\n if (autoMargins.length !== this.order.length) throw new Error('Auto margin placement requires a matching allocation.');\n const autoPointer = kernel.resize_main_auto(this.handle, this.generation, this.order.length);\n const flags = new Float64Array(kernel.memory.buffer, autoPointer, this.order.length * 2);\n for (let index = 0; index < autoMargins.length; index++) {\n flags[index * 2] = autoMargins[index].autoMainBefore ? 1 : 0;\n flags[index * 2 + 1] = autoMargins[index].autoMainAfter ? 1 : 0;\n }\n }\n const pointer = kernel.resize(this.handle, this.generation, this.order.length);\n let status: number;\n if (autoMargins && autoMarginFreeMain !== undefined) {\n if (this.wrap) throw new Error('Staged intrinsic margins require a single line.');\n status = kernel.place_main_auto_staged(this.handle, this.generation, main, gap, code, reverse ? 1 : 0, autoMarginFreeMain);\n } else if (autoMargins) {\n status = this.wrap ? kernel.place_wrap_main_auto(this.handle, this.generation, main, gap, code, reverse ? 1 : 0) : kernel.place_main_auto(this.handle, this.generation, main, gap, code, reverse ? 1 : 0);\n } else {\n status = this.wrap ? kernel.place_wrap_main(this.handle, this.generation, main, gap, code, reverse ? 1 : 0) : kernel.place_main(this.handle, this.generation, main, gap, code, reverse ? 1 : 0);\n }\n if (status !== 0) throw new Error(`Experimental Flex WASM main placement failed (${status}); nonfinite geometry.`);\n const output = new Float64Array(kernel.memory.buffer, pointer, this.order.length * 10);\n this.mainOffsets = this.order.map((_, i) => output[i * 10 + 7]);\n this.mainPlacementKey = key; counters.mainPlacements++;\n } catch (error) { this.fail(error); }\n }\n return this.mainOffsets;\n }\n placeCross(items: readonly NumericFlexCrossItem[], size: number, alignment: CrossAlignment, options?: { reverse?: boolean; wrap?: { gap: number; alignContent: string }; baseline?: boolean; lastBaseline?: boolean }) {\n const wrap = options?.wrap;\n const reverse = options?.reverse === true;\n const baseline = options?.baseline === true;\n const lastBaseline = baseline && options?.lastBaseline === true;\n if (baseline && reverse && !wrap) throw new Error('Experimental Flex baseline cross reversal requires wrapped line membership.');\n if (!this.layoutOwner?.has(this.handle, this.generation)) throw new Error('Experimental Flex cross placement requires a solved region.');\n const kernel = this.layoutOwner.kernel;\n const records = items.map(item => {\n // Ordinary cross placement reflects logical edges. Baseline groups retain\n // physical content-top offsets, including reversed line allocations.\n const participant = baseline && item.alignSelf === 'auto' && !item.autoCrossBefore && !item.autoCrossAfter;\n const physicalEdges = baseline && reverse && (participant || item.autoCrossBefore || item.autoCrossAfter);\n const beforeAuto = physicalEdges ? item.autoCrossAfter : item.autoCrossBefore;\n const afterAuto = physicalEdges ? item.autoCrossBefore : item.autoCrossAfter;\n const before = physicalEdges ? item.marginCrossAfter : item.marginCrossBefore;\n const after = physicalEdges ? item.marginCrossBefore : item.marginCrossAfter;\n // Baseline inputs are fully resolved outer boxes and outer-relative offsets.\n return [item.preferredCross, item.paddingCross, item.minCross, item.maxCross,\n item.crossAuto ? 1 : 0, alignmentCodes[item.alignSelf === 'auto' ? alignment : item.alignSelf] + (beforeAuto ? 4 : 0) + (afterAuto ? 8 : 0) + (participant ? 16 : 0),\n baseline ? before ?? 0 : 0, baseline ? after ?? 0 : 0,\n baseline ? item.firstBaseline ?? Number.NaN : before ?? 0, baseline ? 0 : after ?? 0];\n });\n const code = wrap ? ['flex-start', 'flex-end', 'center', 'space-between', 'space-around', 'space-evenly', 'stretch'].indexOf(wrap.alignContent) : -1;\n const modeKey = baseline ? `baseline:${lastBaseline ? \"last\" : \"first\"}:${this.allocationRevision}:${wrap ? `wrap:${wrap.gap}:${code}:${reverse ? 1 : 0}` : 'nowrap'}` : wrap ? `${this.allocationRevision}:${wrap.gap}:${code}:${reverse ? 1 : 0}` : `nowrap:${reverse ? 1 : 0}`;\n const changed = modeKey !== this.crossModeKey || size !== this.crossSize || records.length !== this.crossRecords.length ||\n records.some((record, i) => record.some((value, j) => value !== this.crossRecords[i]?.[j]));\n if (changed) {\n try {\n const pointer = kernel.resize_cross(this.handle, this.generation, records.length);\n const input = new Float64Array(kernel.memory.buffer, pointer, records.length * 10);\n records.forEach((record, i) => input.set(record, i * 10));\n const status = baseline ? (wrap ? (lastBaseline ? kernel.place_wrap_last_baseline(this.handle, this.generation, size, wrap.gap, code, reverse ? 1 : 0) : kernel.place_wrap_first_baseline(this.handle, this.generation, size, wrap.gap, code, reverse ? 1 : 0)) : lastBaseline ? kernel.place_last_baseline(this.handle, this.generation, size) : kernel.place_first_baseline(this.handle, this.generation, size)) : wrap ? kernel.place_wrap_cross(this.handle, this.generation, size, wrap.gap, code, reverse ? 1 : 0) : kernel.place_cross(this.handle, this.generation, size, reverse ? 1 : 0);\n if (status !== 0) throw new Error(`Experimental Flex WASM cross placement failed (${status}); invalid or nonfinite geometry.`);\n const output = new Float64Array(kernel.memory.buffer, pointer, records.length * 10);\n this.crossResults = records.map((_, i) => ({ outerCross: output[i * 10 + 6], offset: output[i * 10 + 7] }));\n this.crossRecords = records; this.crossSize = size; this.crossModeKey = modeKey;\n counters.crossPlacements++;\n } catch (error) { this.fail(error); }\n }\n return this.crossResults;\n }\n dispose(): void {\n disposeAllocationCheckpoint(this);\n this.gridV2?.dispose(); this.gridV2 = undefined;\n this.hasAbsoluteMeasurements = false;\n this.flowCache = undefined;\n this.allocationCache = undefined; this.gridColumns = undefined; this.gridRows = undefined; this.gridCells = undefined; this.gridRevision = 0;\n const owner = this.layoutOwner, handle = this.handle, generation = this.generation;\n this.layoutOwner = undefined; this.handle = 0; this.generation = 0;\n counters.activeNodes -= this.records.size;\n for (const token of this.measurements.keys()) this.releaseMeasurements(token);\n for (const token of this.intrinsicMeasurements.keys()) this.releaseMeasurements(token);\n if (this.textMaximums) for (const token of this.textMaximums.keys()) this.releaseMeasurements(token);\n this.textMaximums = undefined;\n this.records.clear(); this.identities.clear(); this.results = []; this.order = []; this.main = -1; this.gap = -1;\n this.mainPlacementKey = \"\"; this.mainOffsets = []; this.mainAutoFlags = undefined; this.mainAutoRevision = 0;\n this.crossRecords = []; this.crossResults = []; this.crossSize = -1; this.crossModeKey = \"\"; this.wrap = false;\n if (owner) { try { owner.release(handle, generation); } finally { if (!this.mountOwner) owner.dispose(); } }\n }\n}\nconst regions = new WeakMap<PibblComponentRefs<any>, LayoutRegion>();\nconst lastFrames = new WeakMap<object, object>();\nexport function mountedLayoutRegion(): LayoutRegion | undefined {\n const refs = GLOBAL_STATE.componentRefs;\n if (!refs) return undefined;\n const owner = GLOBAL_STATE.currentPibblInstance;\n const frame = GLOBAL_STATE.frameSnapshot;\n if (owner && frame && lastFrames.get(owner) !== frame) { lastFrames.set(owner, frame); counters.frames++; }\n let region = regions.get(refs);\n if (!region) {\n region = new LayoutRegion(owner?.interactionRoot ?? owner); regions.set(refs, region);\n refs.teardowns.add(() => { region!.dispose(); regions.delete(refs); });\n }\n return region;\n}\n/** Adopts a preflighted region without creating a second mutable owner. */\nexport function adoptMountedLayoutRegion(region: LayoutRegion, release: () => void): void {\n const refs = GLOBAL_STATE.componentRefs;\n if (!refs) throw new Error('Prepared layout adoption requires a mounted component.');\n const previous = regions.get(refs);\n if (previous === region) return;\n previous?.dispose();\n regions.set(refs, region);\n refs.teardowns.add(() => {\n if (regions.get(refs) !== region) return;\n regions.delete(refs); region.dispose(); release();\n });\n}\n\nexport function recordWasmMeasurement(): void { counters.measuredLeaves++; }\n\nexport function recordWasmAllocationPass(): void { counters.allocationPasses++; }\nexport function recordWasmAllocationItem(): void { counters.allocationItemVisits++; }\nexport function recordWasmAllocationCacheHit(): void { counters.allocationCacheHits++; }\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -173,13 +173,7 @@ function validateSession(state) {
|
|
|
173
173
|
cancel(state, "coordinate-space-changed");
|
|
174
174
|
return;
|
|
175
175
|
}
|
|
176
|
-
if (
|
|
177
|
-
(key) => Math.abs(state.parent[key] - session.parent[key]) > 1e-10 * Math.max(
|
|
178
|
-
1,
|
|
179
|
-
Math.abs(state.parent[key]),
|
|
180
|
-
Math.abs(session.parent[key])
|
|
181
|
-
)
|
|
182
|
-
)) {
|
|
176
|
+
if (transformValueChanged(state.parent.a, session.parent.a) || transformValueChanged(state.parent.b, session.parent.b) || transformValueChanged(state.parent.c, session.parent.c) || transformValueChanged(state.parent.d, session.parent.d) || transformValueChanged(state.parent.e, session.parent.e) || transformValueChanged(state.parent.f, session.parent.f)) {
|
|
183
177
|
cancel(state, "coordinate-space-changed");
|
|
184
178
|
return;
|
|
185
179
|
}
|
|
@@ -454,6 +448,9 @@ function manipulationHandlers(controller, operation, handle, source) {
|
|
|
454
448
|
}
|
|
455
449
|
};
|
|
456
450
|
}
|
|
451
|
+
function transformValueChanged(current, previous) {
|
|
452
|
+
return Math.abs(current - previous) > 1e-10 * Math.max(1, Math.abs(current), Math.abs(previous));
|
|
453
|
+
}
|
|
457
454
|
export {
|
|
458
455
|
detachManipulationFrame,
|
|
459
456
|
isManipulationSourceActive,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/lib/manipulation/controller.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n batch,\n signal,\n isSignal,\n untracked,\n assertSignalCommandAllowed,\n assertDirectSignalWriteAllowed,\n} from \"../signals/graph.js\";\nimport { resolveSignalValue } from \"../signals/resolve-signal-value.js\";\nimport { requireHookContext, useHookSlot } from \"../hooks/hook-slot.js\";\nimport { queueBeginCommand } from \"../scheduler/realm-scheduler.js\";\nimport type {\n PibblEventHandlers,\n PibblEventTarget,\n PibblPointerEvent,\n PibblKeyboardEvent,\n} from \"../events/types.js\";\nimport type { PibblComponentRefs, PibblInstance } from \"../types.js\";\nimport type { WritableSignal } from \"../signals/types.js\";\nimport {\n observeGestureInputs,\n claimGeometryGeneration,\n restoreReleasedGesture,\n} from \"./ownership.js\";\nimport { suppressManipulationActivation } from \"../events/dispatch.js\";\nimport { solveManipulation } from \"./solve.js\";\nimport {\n currentRootCoordinateMapping,\n sameRootCoordinateMapping,\n} from \"./coordinates.js\";\nimport type { PibblResizePosition } from \"./types.js\";\nimport type {\n PibblManipulationActive,\n PibblManipulationCancelReason,\n PibblManipulationController,\n PibblManipulationEvent,\n PibblManipulationGeometry,\n PibblManipulationOperation,\n PibblManipulationOptions,\n PibblManipulationSnapshot,\n} from \"./controller-types.js\";\n\ntype PointerSample = Pick<\n PibblPointerEvent,\n | \"pointerId\"\n | \"x\"\n | \"y\"\n | \"clientX\"\n | \"clientY\"\n | \"shiftKey\"\n | \"altKey\"\n | \"ctrlKey\"\n | \"metaKey\"\n>;\ninterface Session {\n operation: PibblManipulationOperation;\n handle?: PibblResizePosition;\n pointerId: number;\n target: PibblEventTarget;\n before: PibblManipulationGeometry;\n last: PibblManipulationGeometry;\n point: DOMPoint;\n clientX: number;\n clientY: number;\n parent: DOMMatrix;\n started: boolean;\n angle: number;\n rotationDelta: number;\n snapshot: PibblManipulationSnapshot;\n coordinateMapping: readonly number[];\n source?: object;\n releaseObservation?: () => void;\n sample?: PointerSample;\n}\nexport interface ManipulationState {\n controller: PibblManipulationController;\n options: PibblManipulationOptions;\n alive: boolean;\n root: PibblInstance;\n frame?: PibblComponentRefs<any>;\n parent: DOMMatrix;\n coordinateMapping?: readonly number[];\n session?: Session;\n active: WritableSignal<PibblManipulationActive | null>;\n snapshot: WritableSignal<PibblManipulationSnapshot | null>;\n}\nconst states = new WeakMap<PibblManipulationController, ManipulationState>();\nconst owners = new WeakMap<object, ManipulationState>();\nconst claimedPresses = new WeakSet<Event>();\nexport function manipulationState(\n controller: PibblManipulationController,\n): ManipulationState {\n const state = states.get(controller);\n if (!state || !state.alive)\n throw new Error(\n \"Pibbl manipulation requires a live useManipulation controller.\",\n );\n return state;\n}\nfunction geometry(state: ManipulationState): PibblManipulationGeometry {\n return untracked(() =>\n Object.freeze({\n box: Object.freeze({ ...state.options.box.get() }),\n rotation: state.options.rotation?.get() ?? 0,\n }),\n );\n}\nfunction same(a: PibblManipulationGeometry, b: PibblManipulationGeometry): boolean {\n return (\n a.rotation === b.rotation &&\n a.box.left === b.box.left &&\n a.box.top === b.box.top &&\n a.box.width === b.box.width &&\n a.box.height === b.box.height\n );\n}\nfunction event(session: Session): PibblManipulationEvent {\n return Object.freeze({\n ...session.snapshot,\n before: session.before,\n after: session.last,\n });\n}\nfunction publish(\n state: ManipulationState,\n next: PibblManipulationGeometry,\n): void {\n assertDirectSignalWriteAllowed(state.options.box);\n if (state.options.rotation)\n assertDirectSignalWriteAllowed(state.options.rotation);\n batch(() => {\n state.options.box.set(next.box);\n if (state.options.rotation) state.options.rotation.set(next.rotation);\n });\n}\nfunction release(state: ManipulationState, session: Session): void {\n if (state.session !== session) return;\n state.session = undefined;\n session.releaseObservation?.();\n session.releaseObservation = undefined;\n if (state.options.rotation && owners.get(state.options.rotation) === state)\n owners.delete(state.options.rotation);\n if (owners.get(state.options.box) === state) owners.delete(state.options.box);\n if (session.target.hasPointerCapture(session.pointerId))\n session.target.releasePointerCapture(session.pointerId);\n}\nfunction cancel(\n state: ManipulationState,\n reason: PibblManipulationCancelReason,\n): void {\n const session = state.session;\n if (!session) return;\n const restore =\n same(geometry(state), session.last) && reason !== \"external-change\";\n release(state, session);\n batch(() => {\n if (restore && session.started) publish(state, session.before);\n state.active.set(null);\n });\n if (session.started)\n state.options.onCancel?.(\n Object.freeze({ ...event(session), after: geometry(state), reason }),\n );\n}\n/** Release capture synchronously; rollback can defer under renderer write guards. */\nexport function detachManipulationFrame(state: ManipulationState): void {\n const session = state.session;\n if (!session) return;\n const restore = same(geometry(state), session.last);\n release(state, session);\n restoreReleasedGesture({\n box: state.options.box,\n rotation: state.options.rotation,\n before: restore ? session.before : geometry(state),\n active: state.active,\n });\n}\nfunction dispose(state: ManipulationState): void {\n if (!state.alive) return;\n state.alive = false;\n detachManipulationFrame(state);\n}\n/**\n * Creates a mount-owned controller for moving, resizing, and rotating declared geometry.\n *\n * @param options - Target state, enabled operations, constraints, and lifecycle callbacks. See\n * {@link PibblManipulationOptions} .\n * @returns Stable controls and state for the mounted manipulation interaction. See\n * {@link PibblManipulationController} .\n *\n * @see {@link PibblManipulationOptions}\n * @see {@link PibblManipulationController}\n */\nexport function useManipulation(\n options: PibblManipulationOptions,\n): PibblManipulationController {\n const { pibblInstance } = requireHookContext();\n const slot = useHookSlot<ManipulationState>(\"manipulation\", (teardowns) => {\n const state = {\n options,\n root: pibblInstance.eventRoot.rootInstance ?? pibblInstance,\n alive: true,\n parent: new DOMMatrix(),\n active: signal<PibblManipulationActive | null>(null),\n snapshot: signal<PibblManipulationSnapshot | null>(null),\n } as ManipulationState;\n const controller: PibblManipulationController = Object.freeze({\n active: state.active.asReadonly(),\n snapshot: state.snapshot.asReadonly(),\n get frameProps() {\n return frameProps;\n },\n cancel() {\n if (state.alive) {\n assertSignalCommandAllowed();\n cancel(state, \"explicit\");\n }\n },\n });\n const frameProps = Object.freeze({ controller, style: options.box });\n state.controller = controller;\n states.set(controller, state);\n teardowns.add(() => dispose(state));\n return state;\n });\n const state = slot.value;\n if (options.rotate && !options.rotation)\n throw new Error(\n \"useManipulation rotate requires a writable rotation signal in radians.\",\n );\n if (\n options.box !== state.options.box ||\n options.rotation !== state.options.rotation\n )\n throw new Error(\n \"useManipulation geometry signal identity must remain stable.\",\n );\n state.options = options;\n if (state.session && !enabled(state, state.session.operation)) {\n const session = state.session;\n queueBeginCommand(() => {\n if (state.alive && state.session === session) cancel(state, \"disabled\");\n });\n }\n return state.controller;\n}\nfunction enabled(\n state: ManipulationState,\n operation: PibblManipulationOperation,\n): boolean {\n const options =\n operation === \"move\"\n ? state.options.move\n : operation === \"resize\"\n ? state.options.resize\n : state.options.rotate;\n return options !== undefined && resolveSignalValue(options.enabled ?? true);\n}\nfunction validateSession(state: ManipulationState): Session | undefined {\n const session = state.session;\n if (!session) return;\n if (!same(geometry(state), session.last)) {\n cancel(state, \"external-change\");\n return;\n }\n if (!enabled(state, session.operation)) {\n cancel(state, \"disabled\");\n return;\n }\n if (\n !sameRootCoordinateMapping(\n session.coordinateMapping,\n currentRootCoordinateMapping(state.root),\n ) ||\n (state.coordinateMapping !== undefined &&\n !sameRootCoordinateMapping(\n session.coordinateMapping,\n state.coordinateMapping,\n ))\n ) {\n cancel(state, \"coordinate-space-changed\");\n return;\n }\n if (\n [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\"].some(\n (key) =>\n Math.abs(state.parent[key as \"a\"] - session.parent[key as \"a\"]) >\n 1e-10 *\n Math.max(\n 1,\n Math.abs(state.parent[key as \"a\"]),\n Math.abs(session.parent[key as \"a\"]),\n ),\n )\n ) {\n cancel(state, \"coordinate-space-changed\");\n return;\n }\n return session;\n}\nfunction resolvedOptions(state: ManipulationState) {\n const options = state.options;\n const move = options.move && {\n ...options.move,\n snap: options.move.snap && {\n ...options.move.snap,\n enabled: resolveSignalValue(options.move.snap.enabled ?? true),\n },\n };\n const resize = options.resize && {\n ...options.resize,\n snap: options.resize.snap && {\n ...options.resize.snap,\n enabled: resolveSignalValue(options.resize.snap.enabled ?? true),\n },\n };\n const rotate = options.rotate && {\n ...options.rotate,\n snap: options.rotate.snap && {\n ...options.rotate.snap,\n enabled: resolveSignalValue(options.rotate.snap.enabled ?? true),\n },\n };\n return { move, resize, rotate };\n}\nfunction apply(state: ManipulationState, pointer: PointerSample): void {\n const session = validateSession(state);\n if (!session || pointer.pointerId !== session.pointerId) return;\n session.sample = {\n pointerId: pointer.pointerId,\n x: pointer.x,\n y: pointer.y,\n clientX: pointer.clientX,\n clientY: pointer.clientY,\n shiftKey: pointer.shiftKey,\n altKey: pointer.altKey,\n ctrlKey: pointer.ctrlKey,\n metaKey: pointer.metaKey,\n };\n if (!session.started) {\n if (\n Math.hypot(\n pointer.clientX - session.clientX,\n pointer.clientY - session.clientY,\n ) < 3\n )\n return;\n session.started = true;\n suppressManipulationActivation(state.root, session.pointerId);\n state.active.set(\n Object.freeze({\n operation: session.operation,\n handle: session.handle ?? null,\n pointerId: session.pointerId,\n }),\n );\n state.options.onStart?.(event(session));\n if (validateSession(state) !== session) return;\n }\n const { move, resize, rotate } = resolvedOptions(state);\n const currentPoint = session.parent\n .inverse()\n .transformPoint(new DOMPoint(pointer.x, pointer.y));\n if (session.operation === \"rotate\") {\n const centerX = session.before.box.left + session.before.box.width / 2;\n const centerY = session.before.box.top + session.before.box.height / 2;\n if (currentPoint.x !== centerX || currentPoint.y !== centerY) {\n const angle = Math.atan2(\n currentPoint.y - centerY,\n currentPoint.x - centerX,\n );\n const delta = angle - session.angle;\n session.rotationDelta += Math.atan2(Math.sin(delta), Math.cos(delta));\n session.angle = angle;\n }\n }\n let result: ReturnType<typeof solveManipulation>;\n try {\n result = solveManipulation({\n operation: session.operation,\n handle: session.handle,\n initial: session.before.box,\n initialPoint: session.point,\n currentPoint,\n initialRotation: session.before.rotation,\n rotationDelta: session.rotationDelta,\n modifiers: {\n shift: pointer.shiftKey,\n alt: pointer.altKey,\n ctrl: pointer.ctrlKey,\n meta: pointer.metaKey,\n },\n move,\n resize,\n rotate,\n });\n } catch {\n // Options can change after activation; the original preview still belongs\n // to this gesture and must be restored through the normal terminal path.\n cancel(state, \"constraints-unsatisfiable\");\n return;\n }\n const next = Object.freeze({\n box: result.applied,\n rotation: result.appliedRotation,\n });\n const changed = !same(next, session.last);\n session.last = next;\n session.snapshot = Object.freeze({\n operation: session.operation,\n handle: session.handle ?? null,\n initial: session.before,\n proposed: Object.freeze({\n box: result.proposed,\n rotation: result.proposedRotation,\n }),\n applied: next,\n snapActive: result.snapActive,\n snapSatisfied: result.snapSatisfied,\n });\n batch(() => {\n if (changed) publish(state, next);\n state.snapshot.set(session.snapshot);\n });\n if (validateSession(state) !== session) return;\n if (changed) state.options.onChange?.(event(session));\n}\nfunction applySafely(state: ManipulationState, pointer: PointerSample): void {\n try {\n apply(state, pointer);\n } catch (error) {\n try {\n cancel(state, \"explicit\");\n } catch (cleanupError) {\n throw new AggregateError(\n [error, cleanupError],\n \"Manipulation callback and cleanup failed.\",\n { cause: cleanupError },\n );\n }\n throw error;\n }\n}\nfunction updateModifiers(\n state: ManipulationState,\n key: PibblKeyboardEvent,\n): void {\n const sample = state.session?.sample;\n if (!sample || ![\"Shift\", \"Alt\", \"Control\", \"Meta\"].includes(key.key)) return;\n applySafely(state, {\n ...sample,\n shiftKey: key.shiftKey,\n altKey: key.altKey,\n ctrlKey: key.ctrlKey,\n metaKey: key.metaKey,\n });\n}\n\n/** @internal Identifies one private handle source for readout presentation. */\nexport function isManipulationSourceActive(\n controller: PibblManipulationController,\n source: object,\n): boolean {\n const state = manipulationState(controller);\n return state.session?.started === true && state.session.source === source;\n}\n\nexport function manipulationHandlers(\n controller: PibblManipulationController,\n operation: PibblManipulationOperation,\n handle?: PibblResizePosition,\n source?: object,\n): PibblEventHandlers {\n const state = manipulationState(controller);\n return {\n onPointerDown(pointer) {\n if (\n !state.alive ||\n state.session ||\n pointer.defaultPrevented ||\n claimedPresses.has(pointer.originalEvent) ||\n pointer.button !== 0 ||\n !enabled(state, operation)\n )\n return;\n if (\n owners.has(state.options.box) ||\n (state.options.rotation && owners.has(state.options.rotation))\n )\n throw new Error(\n \"Pibbl manipulation geometry already has an active owner.\",\n );\n const before = geometry(state);\n const point = state.parent\n .inverse()\n .transformPoint(new DOMPoint(pointer.x, pointer.y));\n if (!Number.isFinite(point.x) || !Number.isFinite(point.y))\n throw new Error(\n \"Pibbl manipulation cannot use a singular parent transform.\",\n );\n assertDirectSignalWriteAllowed(state.options.box);\n if (state.options.rotation)\n assertDirectSignalWriteAllowed(state.options.rotation);\n const resolved = resolvedOptions(state);\n if (\n operation === \"resize\" &&\n resolved.resize?.snap?.target === \"grid\" &&\n (Math.abs(state.parent.b) > 1e-10 || Math.abs(state.parent.c) > 1e-10)\n ) {\n throw new Error(\n \"Grid resize snapping requires an aligned parent coordinate mapping.\",\n );\n }\n solveManipulation({\n operation,\n handle,\n initial: before.box,\n initialRotation: before.rotation,\n initialPoint: point,\n currentPoint: point,\n modifiers: {},\n ...resolved,\n });\n pointer.currentTarget.setPointerCapture(pointer.pointerId);\n if (!pointer.currentTarget.hasPointerCapture(pointer.pointerId)) return;\n const snapshot = Object.freeze({\n operation,\n handle: handle ?? null,\n initial: before,\n proposed: before,\n applied: before,\n snapActive: false,\n snapSatisfied: false,\n });\n state.session = {\n operation,\n handle,\n pointerId: pointer.pointerId,\n target: pointer.currentTarget,\n before,\n last: before,\n point,\n clientX: pointer.clientX,\n clientY: pointer.clientY,\n parent: DOMMatrix.fromMatrix(state.parent),\n started: false,\n angle: Math.atan2(\n point.y - before.box.top - before.box.height / 2,\n point.x - before.box.left - before.box.width / 2,\n ),\n rotationDelta: 0,\n snapshot,\n coordinateMapping: currentRootCoordinateMapping(state.root),\n source,\n };\n owners.set(state.options.box, state);\n if (state.options.rotation) owners.set(state.options.rotation, state);\n claimGeometryGeneration(state.options.box, state.options.rotation);\n const operationOptions =\n operation === \"move\"\n ? state.options.move\n : operation === \"resize\"\n ? state.options.resize\n : state.options.rotate;\n const values: unknown[] = [\n state.options.box,\n state.options.rotation,\n operationOptions?.enabled,\n ];\n const inputs = values.filter(isSignal);\n state.session.releaseObservation = observeGestureInputs(inputs, () => {\n validateSession(state);\n });\n claimedPresses.add(pointer.originalEvent);\n },\n onPointerMove(pointer) {\n applySafely(state, pointer);\n },\n onPointerUp(pointer) {\n if (state.session?.pointerId !== pointer.pointerId) return;\n applySafely(state, pointer);\n const session = state.session;\n if (!session) return;\n release(state, session);\n state.active.set(null);\n if (session.started)\n state.options.onCommit?.(\n Object.freeze({\n ...event(session),\n changed: !same(session.before, session.last),\n }),\n );\n },\n onPointerCancel(pointer) {\n if (state.session?.pointerId === pointer.pointerId)\n cancel(state, \"pointer-cancel\");\n },\n onLostPointerCapture(pointer) {\n if (state.session?.pointerId === pointer.pointerId)\n cancel(state, \"capture-lost\");\n },\n onKeyUp(key) {\n updateModifiers(state, key);\n },\n onKeyDown(key) {\n if (key.key === \"Escape\") cancel(state, \"escape\");\n else updateModifiers(state, key);\n },\n };\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import {\n batch,\n signal,\n isSignal,\n untracked,\n assertSignalCommandAllowed,\n assertDirectSignalWriteAllowed,\n} from \"../signals/graph.js\";\nimport { resolveSignalValue } from \"../signals/resolve-signal-value.js\";\nimport { requireHookContext, useHookSlot } from \"../hooks/hook-slot.js\";\nimport { queueBeginCommand } from \"../scheduler/realm-scheduler.js\";\nimport type {\n PibblEventHandlers,\n PibblEventTarget,\n PibblPointerEvent,\n PibblKeyboardEvent,\n} from \"../events/types.js\";\nimport type { PibblComponentRefs, PibblInstance } from \"../types.js\";\nimport type { WritableSignal } from \"../signals/types.js\";\nimport {\n observeGestureInputs,\n claimGeometryGeneration,\n restoreReleasedGesture,\n} from \"./ownership.js\";\nimport { suppressManipulationActivation } from \"../events/dispatch.js\";\nimport { solveManipulation } from \"./solve.js\";\nimport {\n currentRootCoordinateMapping,\n sameRootCoordinateMapping,\n} from \"./coordinates.js\";\nimport type { PibblResizePosition } from \"./types.js\";\nimport type {\n PibblManipulationActive,\n PibblManipulationCancelReason,\n PibblManipulationController,\n PibblManipulationEvent,\n PibblManipulationGeometry,\n PibblManipulationOperation,\n PibblManipulationOptions,\n PibblManipulationSnapshot,\n} from \"./controller-types.js\";\n\ntype PointerSample = Pick<\n PibblPointerEvent,\n | \"pointerId\"\n | \"x\"\n | \"y\"\n | \"clientX\"\n | \"clientY\"\n | \"shiftKey\"\n | \"altKey\"\n | \"ctrlKey\"\n | \"metaKey\"\n>;\ninterface Session {\n operation: PibblManipulationOperation;\n handle?: PibblResizePosition;\n pointerId: number;\n target: PibblEventTarget;\n before: PibblManipulationGeometry;\n last: PibblManipulationGeometry;\n point: DOMPoint;\n clientX: number;\n clientY: number;\n parent: DOMMatrix;\n started: boolean;\n angle: number;\n rotationDelta: number;\n snapshot: PibblManipulationSnapshot;\n coordinateMapping: readonly number[];\n source?: object;\n releaseObservation?: () => void;\n sample?: PointerSample;\n}\nexport interface ManipulationState {\n controller: PibblManipulationController;\n options: PibblManipulationOptions;\n alive: boolean;\n root: PibblInstance;\n frame?: PibblComponentRefs<any>;\n parent: DOMMatrix;\n coordinateMapping?: readonly number[];\n session?: Session;\n active: WritableSignal<PibblManipulationActive | null>;\n snapshot: WritableSignal<PibblManipulationSnapshot | null>;\n}\nconst states = new WeakMap<PibblManipulationController, ManipulationState>();\nconst owners = new WeakMap<object, ManipulationState>();\nconst claimedPresses = new WeakSet<Event>();\nexport function manipulationState(\n controller: PibblManipulationController,\n): ManipulationState {\n const state = states.get(controller);\n if (!state || !state.alive)\n throw new Error(\n \"Pibbl manipulation requires a live useManipulation controller.\",\n );\n return state;\n}\nfunction geometry(state: ManipulationState): PibblManipulationGeometry {\n return untracked(() =>\n Object.freeze({\n box: Object.freeze({ ...state.options.box.get() }),\n rotation: state.options.rotation?.get() ?? 0,\n }),\n );\n}\nfunction same(a: PibblManipulationGeometry, b: PibblManipulationGeometry): boolean {\n return (\n a.rotation === b.rotation &&\n a.box.left === b.box.left &&\n a.box.top === b.box.top &&\n a.box.width === b.box.width &&\n a.box.height === b.box.height\n );\n}\nfunction event(session: Session): PibblManipulationEvent {\n return Object.freeze({\n ...session.snapshot,\n before: session.before,\n after: session.last,\n });\n}\nfunction publish(\n state: ManipulationState,\n next: PibblManipulationGeometry,\n): void {\n assertDirectSignalWriteAllowed(state.options.box);\n if (state.options.rotation)\n assertDirectSignalWriteAllowed(state.options.rotation);\n batch(() => {\n state.options.box.set(next.box);\n if (state.options.rotation) state.options.rotation.set(next.rotation);\n });\n}\nfunction release(state: ManipulationState, session: Session): void {\n if (state.session !== session) return;\n state.session = undefined;\n session.releaseObservation?.();\n session.releaseObservation = undefined;\n if (state.options.rotation && owners.get(state.options.rotation) === state)\n owners.delete(state.options.rotation);\n if (owners.get(state.options.box) === state) owners.delete(state.options.box);\n if (session.target.hasPointerCapture(session.pointerId))\n session.target.releasePointerCapture(session.pointerId);\n}\nfunction cancel(\n state: ManipulationState,\n reason: PibblManipulationCancelReason,\n): void {\n const session = state.session;\n if (!session) return;\n const restore =\n same(geometry(state), session.last) && reason !== \"external-change\";\n release(state, session);\n batch(() => {\n if (restore && session.started) publish(state, session.before);\n state.active.set(null);\n });\n if (session.started)\n state.options.onCancel?.(\n Object.freeze({ ...event(session), after: geometry(state), reason }),\n );\n}\n/** Release capture synchronously; rollback can defer under renderer write guards. */\nexport function detachManipulationFrame(state: ManipulationState): void {\n const session = state.session;\n if (!session) return;\n const restore = same(geometry(state), session.last);\n release(state, session);\n restoreReleasedGesture({\n box: state.options.box,\n rotation: state.options.rotation,\n before: restore ? session.before : geometry(state),\n active: state.active,\n });\n}\nfunction dispose(state: ManipulationState): void {\n if (!state.alive) return;\n state.alive = false;\n detachManipulationFrame(state);\n}\n/**\n * Creates a mount-owned controller for moving, resizing, and rotating declared geometry.\n *\n * @param options - Target state, enabled operations, constraints, and lifecycle callbacks. See\n * {@link PibblManipulationOptions} .\n * @returns Stable controls and state for the mounted manipulation interaction. See\n * {@link PibblManipulationController} .\n *\n * @see {@link PibblManipulationOptions}\n * @see {@link PibblManipulationController}\n */\nexport function useManipulation(\n options: PibblManipulationOptions,\n): PibblManipulationController {\n const { pibblInstance } = requireHookContext();\n const slot = useHookSlot<ManipulationState>(\"manipulation\", (teardowns) => {\n const state = {\n options,\n root: pibblInstance.eventRoot.rootInstance ?? pibblInstance,\n alive: true,\n parent: new DOMMatrix(),\n active: signal<PibblManipulationActive | null>(null),\n snapshot: signal<PibblManipulationSnapshot | null>(null),\n } as ManipulationState;\n const controller: PibblManipulationController = Object.freeze({\n active: state.active.asReadonly(),\n snapshot: state.snapshot.asReadonly(),\n get frameProps() {\n return frameProps;\n },\n cancel() {\n if (state.alive) {\n assertSignalCommandAllowed();\n cancel(state, \"explicit\");\n }\n },\n });\n const frameProps = Object.freeze({ controller, style: options.box });\n state.controller = controller;\n states.set(controller, state);\n teardowns.add(() => dispose(state));\n return state;\n });\n const state = slot.value;\n if (options.rotate && !options.rotation)\n throw new Error(\n \"useManipulation rotate requires a writable rotation signal in radians.\",\n );\n if (\n options.box !== state.options.box ||\n options.rotation !== state.options.rotation\n )\n throw new Error(\n \"useManipulation geometry signal identity must remain stable.\",\n );\n state.options = options;\n if (state.session && !enabled(state, state.session.operation)) {\n const session = state.session;\n queueBeginCommand(() => {\n if (state.alive && state.session === session) cancel(state, \"disabled\");\n });\n }\n return state.controller;\n}\nfunction enabled(\n state: ManipulationState,\n operation: PibblManipulationOperation,\n): boolean {\n const options =\n operation === \"move\"\n ? state.options.move\n : operation === \"resize\"\n ? state.options.resize\n : state.options.rotate;\n return options !== undefined && resolveSignalValue(options.enabled ?? true);\n}\nfunction validateSession(state: ManipulationState): Session | undefined {\n const session = state.session;\n if (!session) return;\n if (!same(geometry(state), session.last)) {\n cancel(state, \"external-change\");\n return;\n }\n if (!enabled(state, session.operation)) {\n cancel(state, \"disabled\");\n return;\n }\n if (\n !sameRootCoordinateMapping(\n session.coordinateMapping,\n currentRootCoordinateMapping(state.root),\n ) ||\n (state.coordinateMapping !== undefined &&\n !sameRootCoordinateMapping(\n session.coordinateMapping,\n state.coordinateMapping,\n ))\n ) {\n cancel(state, \"coordinate-space-changed\");\n return;\n }\n if (\n transformValueChanged(state.parent.a, session.parent.a) ||\n transformValueChanged(state.parent.b, session.parent.b) ||\n transformValueChanged(state.parent.c, session.parent.c) ||\n transformValueChanged(state.parent.d, session.parent.d) ||\n transformValueChanged(state.parent.e, session.parent.e) ||\n transformValueChanged(state.parent.f, session.parent.f)\n ) {\n cancel(state, \"coordinate-space-changed\");\n return;\n }\n return session;\n}\nfunction resolvedOptions(state: ManipulationState) {\n const options = state.options;\n const move = options.move && {\n ...options.move,\n snap: options.move.snap && {\n ...options.move.snap,\n enabled: resolveSignalValue(options.move.snap.enabled ?? true),\n },\n };\n const resize = options.resize && {\n ...options.resize,\n snap: options.resize.snap && {\n ...options.resize.snap,\n enabled: resolveSignalValue(options.resize.snap.enabled ?? true),\n },\n };\n const rotate = options.rotate && {\n ...options.rotate,\n snap: options.rotate.snap && {\n ...options.rotate.snap,\n enabled: resolveSignalValue(options.rotate.snap.enabled ?? true),\n },\n };\n return { move, resize, rotate };\n}\nfunction apply(state: ManipulationState, pointer: PointerSample): void {\n const session = validateSession(state);\n if (!session || pointer.pointerId !== session.pointerId) return;\n session.sample = {\n pointerId: pointer.pointerId,\n x: pointer.x,\n y: pointer.y,\n clientX: pointer.clientX,\n clientY: pointer.clientY,\n shiftKey: pointer.shiftKey,\n altKey: pointer.altKey,\n ctrlKey: pointer.ctrlKey,\n metaKey: pointer.metaKey,\n };\n if (!session.started) {\n if (\n Math.hypot(\n pointer.clientX - session.clientX,\n pointer.clientY - session.clientY,\n ) < 3\n )\n return;\n session.started = true;\n suppressManipulationActivation(state.root, session.pointerId);\n state.active.set(\n Object.freeze({\n operation: session.operation,\n handle: session.handle ?? null,\n pointerId: session.pointerId,\n }),\n );\n state.options.onStart?.(event(session));\n if (validateSession(state) !== session) return;\n }\n const { move, resize, rotate } = resolvedOptions(state);\n const currentPoint = session.parent\n .inverse()\n .transformPoint(new DOMPoint(pointer.x, pointer.y));\n if (session.operation === \"rotate\") {\n const centerX = session.before.box.left + session.before.box.width / 2;\n const centerY = session.before.box.top + session.before.box.height / 2;\n if (currentPoint.x !== centerX || currentPoint.y !== centerY) {\n const angle = Math.atan2(\n currentPoint.y - centerY,\n currentPoint.x - centerX,\n );\n const delta = angle - session.angle;\n session.rotationDelta += Math.atan2(Math.sin(delta), Math.cos(delta));\n session.angle = angle;\n }\n }\n let result: ReturnType<typeof solveManipulation>;\n try {\n result = solveManipulation({\n operation: session.operation,\n handle: session.handle,\n initial: session.before.box,\n initialPoint: session.point,\n currentPoint,\n initialRotation: session.before.rotation,\n rotationDelta: session.rotationDelta,\n modifiers: {\n shift: pointer.shiftKey,\n alt: pointer.altKey,\n ctrl: pointer.ctrlKey,\n meta: pointer.metaKey,\n },\n move,\n resize,\n rotate,\n });\n } catch {\n // Options can change after activation; the original preview still belongs\n // to this gesture and must be restored through the normal terminal path.\n cancel(state, \"constraints-unsatisfiable\");\n return;\n }\n const next = Object.freeze({\n box: result.applied,\n rotation: result.appliedRotation,\n });\n const changed = !same(next, session.last);\n session.last = next;\n session.snapshot = Object.freeze({\n operation: session.operation,\n handle: session.handle ?? null,\n initial: session.before,\n proposed: Object.freeze({\n box: result.proposed,\n rotation: result.proposedRotation,\n }),\n applied: next,\n snapActive: result.snapActive,\n snapSatisfied: result.snapSatisfied,\n });\n batch(() => {\n if (changed) publish(state, next);\n state.snapshot.set(session.snapshot);\n });\n if (validateSession(state) !== session) return;\n if (changed) state.options.onChange?.(event(session));\n}\nfunction applySafely(state: ManipulationState, pointer: PointerSample): void {\n try {\n apply(state, pointer);\n } catch (error) {\n try {\n cancel(state, \"explicit\");\n } catch (cleanupError) {\n throw new AggregateError(\n [error, cleanupError],\n \"Manipulation callback and cleanup failed.\",\n { cause: cleanupError },\n );\n }\n throw error;\n }\n}\nfunction updateModifiers(\n state: ManipulationState,\n key: PibblKeyboardEvent,\n): void {\n const sample = state.session?.sample;\n if (!sample || ![\"Shift\", \"Alt\", \"Control\", \"Meta\"].includes(key.key)) return;\n applySafely(state, {\n ...sample,\n shiftKey: key.shiftKey,\n altKey: key.altKey,\n ctrlKey: key.ctrlKey,\n metaKey: key.metaKey,\n });\n}\n\n/** @internal Identifies one private handle source for readout presentation. */\nexport function isManipulationSourceActive(\n controller: PibblManipulationController,\n source: object,\n): boolean {\n const state = manipulationState(controller);\n return state.session?.started === true && state.session.source === source;\n}\n\nexport function manipulationHandlers(\n controller: PibblManipulationController,\n operation: PibblManipulationOperation,\n handle?: PibblResizePosition,\n source?: object,\n): PibblEventHandlers {\n const state = manipulationState(controller);\n return {\n onPointerDown(pointer) {\n if (\n !state.alive ||\n state.session ||\n pointer.defaultPrevented ||\n claimedPresses.has(pointer.originalEvent) ||\n pointer.button !== 0 ||\n !enabled(state, operation)\n )\n return;\n if (\n owners.has(state.options.box) ||\n (state.options.rotation && owners.has(state.options.rotation))\n )\n throw new Error(\n \"Pibbl manipulation geometry already has an active owner.\",\n );\n const before = geometry(state);\n const point = state.parent\n .inverse()\n .transformPoint(new DOMPoint(pointer.x, pointer.y));\n if (!Number.isFinite(point.x) || !Number.isFinite(point.y))\n throw new Error(\n \"Pibbl manipulation cannot use a singular parent transform.\",\n );\n assertDirectSignalWriteAllowed(state.options.box);\n if (state.options.rotation)\n assertDirectSignalWriteAllowed(state.options.rotation);\n const resolved = resolvedOptions(state);\n if (\n operation === \"resize\" &&\n resolved.resize?.snap?.target === \"grid\" &&\n (Math.abs(state.parent.b) > 1e-10 || Math.abs(state.parent.c) > 1e-10)\n ) {\n throw new Error(\n \"Grid resize snapping requires an aligned parent coordinate mapping.\",\n );\n }\n solveManipulation({\n operation,\n handle,\n initial: before.box,\n initialRotation: before.rotation,\n initialPoint: point,\n currentPoint: point,\n modifiers: {},\n ...resolved,\n });\n pointer.currentTarget.setPointerCapture(pointer.pointerId);\n if (!pointer.currentTarget.hasPointerCapture(pointer.pointerId)) return;\n const snapshot = Object.freeze({\n operation,\n handle: handle ?? null,\n initial: before,\n proposed: before,\n applied: before,\n snapActive: false,\n snapSatisfied: false,\n });\n state.session = {\n operation,\n handle,\n pointerId: pointer.pointerId,\n target: pointer.currentTarget,\n before,\n last: before,\n point,\n clientX: pointer.clientX,\n clientY: pointer.clientY,\n parent: DOMMatrix.fromMatrix(state.parent),\n started: false,\n angle: Math.atan2(\n point.y - before.box.top - before.box.height / 2,\n point.x - before.box.left - before.box.width / 2,\n ),\n rotationDelta: 0,\n snapshot,\n coordinateMapping: currentRootCoordinateMapping(state.root),\n source,\n };\n owners.set(state.options.box, state);\n if (state.options.rotation) owners.set(state.options.rotation, state);\n claimGeometryGeneration(state.options.box, state.options.rotation);\n const operationOptions =\n operation === \"move\"\n ? state.options.move\n : operation === \"resize\"\n ? state.options.resize\n : state.options.rotate;\n const values: unknown[] = [\n state.options.box,\n state.options.rotation,\n operationOptions?.enabled,\n ];\n const inputs = values.filter(isSignal);\n state.session.releaseObservation = observeGestureInputs(inputs, () => {\n validateSession(state);\n });\n claimedPresses.add(pointer.originalEvent);\n },\n onPointerMove(pointer) {\n applySafely(state, pointer);\n },\n onPointerUp(pointer) {\n if (state.session?.pointerId !== pointer.pointerId) return;\n applySafely(state, pointer);\n const session = state.session;\n if (!session) return;\n release(state, session);\n state.active.set(null);\n if (session.started)\n state.options.onCommit?.(\n Object.freeze({\n ...event(session),\n changed: !same(session.before, session.last),\n }),\n );\n },\n onPointerCancel(pointer) {\n if (state.session?.pointerId === pointer.pointerId)\n cancel(state, \"pointer-cancel\");\n },\n onLostPointerCapture(pointer) {\n if (state.session?.pointerId === pointer.pointerId)\n cancel(state, \"capture-lost\");\n },\n onKeyUp(key) {\n updateModifiers(state, key);\n },\n onKeyDown(key) {\n if (key.key === \"Escape\") cancel(state, \"escape\");\n else updateModifiers(state, key);\n },\n };\n}\n\nfunction transformValueChanged(current: number, previous: number): boolean {\n return Math.abs(current - previous) > 1e-10 * Math.max(1, Math.abs(current), Math.abs(previous));\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["state"]
|
|
7
7
|
}
|
|
@@ -57,7 +57,7 @@ const ManipulationFrame = definePrimitive(
|
|
|
57
57
|
attachManipulationFrame(state, componentRefs);
|
|
58
58
|
}
|
|
59
59
|
const box = state.options.box.get();
|
|
60
|
-
if (!
|
|
60
|
+
if (!(Number.isFinite(box.left) && Number.isFinite(box.top) && Number.isFinite(style.width) && Number.isFinite(style.height)) || style.width <= 0 || style.height <= 0)
|
|
61
61
|
throw new Error(
|
|
62
62
|
"ManipulationFrame requires finite position and positive dimensions."
|
|
63
63
|
);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/lib/manipulation/frame.ts"],
|
|
4
|
-
"sourcesContent": ["import type { PibblManipulationFrameProps } from './controller-types.js';\nimport { createElement } from \"../element/create-element.js\";\nimport { Group } from \"../components/g.js\";\nimport { definePrimitive } from \"../define-primitive.js\";\nimport { GLOBAL_STATE } from \"../global-state.js\";\nimport { useHookSlot, requireHookContext } from \"../hooks/hook-slot.js\";\nimport { pushLayoutBox } from \"../layout/context.js\";\nimport { getCurrentWorldTransform } from \"../render-target.js\";\nimport { currentRootCoordinateMapping } from \"./coordinates.js\";\nimport type { PibblNode } from \"../element/types.js\";\nimport type { PibblComponentRefs } from \"../types.js\";\nimport type { SystemStyle } from \"../types.js\";\nimport type { PibblManipulationBox } from \"./types.js\";\nimport type { PibblManipulationController } from \"./controller-types.js\";\nimport {\n manipulationState,\n detachManipulationFrame,\n type ManipulationState,\n} from \"./controller.js\";\n\nconst frames: ManipulationState[] = [];\nexport function requireManipulationFrame(\n controller: PibblManipulationController,\n): ManipulationState {\n const state = manipulationState(controller);\n if (frames.at(-1) !== state)\n throw new Error(\n \"Pibbl manipulation handles must be descendants of their controller frame.\",\n );\n return state;\n}\ninterface FrameProps {\n readonly controller: PibblManipulationController;\n readonly children?: PibblNode;\n}\ninterface FrameStyle extends SystemStyle, PibblManipulationBox {}\ninterface FrameAttachment {\n state: ManipulationState;\n}\n\nfunction attachManipulationFrame(\n state: ManipulationState,\n componentRefs: PibblComponentRefs<any>,\n): void {\n if (state.frame && state.frame !== componentRefs) {\n if (GLOBAL_STATE.seenIds?.has(state.frame.id))\n throw new Error(\n \"A manipulation controller can attach to only one frame.\",\n );\n detachManipulationFrame(state);\n }\n state.frame = componentRefs;\n}\n\nfunction releaseManipulationFrame(\n state: ManipulationState,\n componentRefs: PibblComponentRefs<any>,\n): void {\n if (state.frame !== componentRefs) return;\n state.frame = undefined;\n detachManipulationFrame(state);\n}\n\n/**\n * Provides a manipulation controller and its presentation frame to descendant handles.\n *\n * @param props - Authored component inputs, supplied through JSX or createElement. See the linked\n * props and style types.\n * @throws When called directly; Pibbl mounts this component through JSX or createElement.\n *\n * @see {@link PibblManipulationFrameProps}\n */\nexport const ManipulationFrame = definePrimitive<FrameProps, FrameStyle>(\n function ManipulationFrame(props, style) {\n const state = manipulationState(props.controller);\n const { componentRefs, pibblInstance } = requireHookContext();\n if (state.root.eventRoot !== pibblInstance.eventRoot)\n throw new Error(\n \"A manipulation controller cannot attach across Pibbl roots.\",\n );\n const slot = useHookSlot<FrameAttachment>(\"manipulationFrame\", (teardowns) => {\n const attachment: FrameAttachment = { state };\n attachManipulationFrame(state, componentRefs);\n teardowns.add(() => releaseManipulationFrame(attachment.state, componentRefs));\n return attachment;\n });\n const attachment = slot.value;\n if (attachment.state !== state) {\n releaseManipulationFrame(attachment.state, componentRefs);\n attachManipulationFrame(state, componentRefs);\n attachment.state = state;\n } else {\n attachManipulationFrame(state, componentRefs);\n }\n const box = state.options.box.get();\n if (\n !
|
|
5
|
-
"mappings": "AACA,SAAS,qBAAqB;AAC9B,SAAS,aAAa;AACtB,SAAS,uBAAuB;AAChC,SAAS,oBAAoB;AAC7B,SAAS,aAAa,0BAA0B;AAChD,SAAS,qBAAqB;AAC9B,SAAS,gCAAgC;AACzC,SAAS,oCAAoC;AAM7C;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AAEP,MAAM,SAA8B,CAAC;AAC9B,SAAS,yBACd,YACmB;AACnB,QAAM,QAAQ,kBAAkB,UAAU;AAC1C,MAAI,OAAO,GAAG,EAAE,MAAM;AACpB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AACF,SAAO;AACT;AAUA,SAAS,wBACP,OACA,eACM;AACN,MAAI,MAAM,SAAS,MAAM,UAAU,eAAe;AAChD,QAAI,aAAa,SAAS,IAAI,MAAM,MAAM,EAAE;AAC1C,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AACF,4BAAwB,KAAK;AAAA,EAC/B;AACA,QAAM,QAAQ;AAChB;AAEA,SAAS,yBACP,OACA,eACM;AACN,MAAI,MAAM,UAAU,cAAe;AACnC,QAAM,QAAQ;AACd,0BAAwB,KAAK;AAC/B;AAWO,MAAM,oBAAoB;AAAA,EAC/B,SAASA,mBAAkB,OAAO,OAAO;AACvC,UAAM,QAAQ,kBAAkB,MAAM,UAAU;AAChD,UAAM,EAAE,eAAe,cAAc,IAAI,mBAAmB;AAC5D,QAAI,MAAM,KAAK,cAAc,cAAc;AACzC,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AACF,UAAM,OAAO,YAA6B,qBAAqB,CAAC,cAAc;AAC5E,YAAMC,cAA8B,EAAE,MAAM;AAC5C,8BAAwB,OAAO,aAAa;AAC5C,gBAAU,IAAI,MAAM,yBAAyBA,YAAW,OAAO,aAAa,CAAC;AAC7E,aAAOA;AAAA,IACT,CAAC;AACD,UAAM,aAAa,KAAK;AACxB,QAAI,WAAW,UAAU,OAAO;AAC9B,+BAAyB,WAAW,OAAO,aAAa;AACxD,8BAAwB,OAAO,aAAa;AAC5C,iBAAW,QAAQ;AAAA,IACrB,OAAO;AACL,8BAAwB,OAAO,aAAa;AAAA,IAC9C;AACA,UAAM,MAAM,MAAM,QAAQ,IAAI,IAAI;AAClC,QACE,
|
|
4
|
+
"sourcesContent": ["import type { PibblManipulationFrameProps } from './controller-types.js';\nimport { createElement } from \"../element/create-element.js\";\nimport { Group } from \"../components/g.js\";\nimport { definePrimitive } from \"../define-primitive.js\";\nimport { GLOBAL_STATE } from \"../global-state.js\";\nimport { useHookSlot, requireHookContext } from \"../hooks/hook-slot.js\";\nimport { pushLayoutBox } from \"../layout/context.js\";\nimport { getCurrentWorldTransform } from \"../render-target.js\";\nimport { currentRootCoordinateMapping } from \"./coordinates.js\";\nimport type { PibblNode } from \"../element/types.js\";\nimport type { PibblComponentRefs } from \"../types.js\";\nimport type { SystemStyle } from \"../types.js\";\nimport type { PibblManipulationBox } from \"./types.js\";\nimport type { PibblManipulationController } from \"./controller-types.js\";\nimport {\n manipulationState,\n detachManipulationFrame,\n type ManipulationState,\n} from \"./controller.js\";\n\nconst frames: ManipulationState[] = [];\nexport function requireManipulationFrame(\n controller: PibblManipulationController,\n): ManipulationState {\n const state = manipulationState(controller);\n if (frames.at(-1) !== state)\n throw new Error(\n \"Pibbl manipulation handles must be descendants of their controller frame.\",\n );\n return state;\n}\ninterface FrameProps {\n readonly controller: PibblManipulationController;\n readonly children?: PibblNode;\n}\ninterface FrameStyle extends SystemStyle, PibblManipulationBox {}\ninterface FrameAttachment {\n state: ManipulationState;\n}\n\nfunction attachManipulationFrame(\n state: ManipulationState,\n componentRefs: PibblComponentRefs<any>,\n): void {\n if (state.frame && state.frame !== componentRefs) {\n if (GLOBAL_STATE.seenIds?.has(state.frame.id))\n throw new Error(\n \"A manipulation controller can attach to only one frame.\",\n );\n detachManipulationFrame(state);\n }\n state.frame = componentRefs;\n}\n\nfunction releaseManipulationFrame(\n state: ManipulationState,\n componentRefs: PibblComponentRefs<any>,\n): void {\n if (state.frame !== componentRefs) return;\n state.frame = undefined;\n detachManipulationFrame(state);\n}\n\n/**\n * Provides a manipulation controller and its presentation frame to descendant handles.\n *\n * @param props - Authored component inputs, supplied through JSX or createElement. See the linked\n * props and style types.\n * @throws When called directly; Pibbl mounts this component through JSX or createElement.\n *\n * @see {@link PibblManipulationFrameProps}\n */\nexport const ManipulationFrame = definePrimitive<FrameProps, FrameStyle>(\n function ManipulationFrame(props, style) {\n const state = manipulationState(props.controller);\n const { componentRefs, pibblInstance } = requireHookContext();\n if (state.root.eventRoot !== pibblInstance.eventRoot)\n throw new Error(\n \"A manipulation controller cannot attach across Pibbl roots.\",\n );\n const slot = useHookSlot<FrameAttachment>(\"manipulationFrame\", (teardowns) => {\n const attachment: FrameAttachment = { state };\n attachManipulationFrame(state, componentRefs);\n teardowns.add(() => releaseManipulationFrame(attachment.state, componentRefs));\n return attachment;\n });\n const attachment = slot.value;\n if (attachment.state !== state) {\n releaseManipulationFrame(attachment.state, componentRefs);\n attachManipulationFrame(state, componentRefs);\n attachment.state = state;\n } else {\n attachManipulationFrame(state, componentRefs);\n }\n const box = state.options.box.get();\n if (\n !(\n Number.isFinite(box.left) &&\n Number.isFinite(box.top) &&\n Number.isFinite(style.width) &&\n Number.isFinite(style.height)\n ) ||\n style.width <= 0 ||\n style.height <= 0\n )\n throw new Error(\n \"ManipulationFrame requires finite position and positive dimensions.\",\n );\n const parent = getCurrentWorldTransform().translate(-box.left, -box.top);\n const transaction = pibblInstance.eventRoot.renderTransaction;\n if (!transaction)\n throw new Error(\n \"ManipulationFrame requires an active render transaction.\",\n );\n transaction.onFinish((success) => {\n if (success && state.alive && state.frame === componentRefs) {\n state.parent = parent;\n state.coordinateMapping = currentRootCoordinateMapping(state.root);\n }\n });\n const releaseLayout = pushLayoutBox(\n Object.freeze({ x: 0, y: 0, width: style.width, height: style.height }),\n );\n frames.push(state);\n GLOBAL_STATE.componentRefs!.onAfterRender = () => {\n frames.pop();\n releaseLayout();\n };\n const rotation = state.options.rotation?.get() ?? 0;\n if (!Number.isFinite(rotation))\n throw new Error(\"ManipulationFrame rotation must be finite radians.\");\n return createElement(Group, {\n style: {\n rotationDegrees: (rotation * 180) / Math.PI,\n rotationOrigin: [style.width / 2, style.height / 2],\n },\n children: props.children,\n });\n },\n { childInput: \"structural\" },\n);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["ManipulationFrame", "attachment"]
|
|
7
7
|
}
|
|
@@ -282,7 +282,7 @@ function cssPoint(state, x, y) {
|
|
|
282
282
|
function cssBasis(state) {
|
|
283
283
|
const css = frameToCss(state);
|
|
284
284
|
const inverse = new DOMMatrix([css.a, css.b, css.c, css.d, 0, 0]).inverse();
|
|
285
|
-
if (!
|
|
285
|
+
if (!(Number.isFinite(inverse.a) && Number.isFinite(inverse.b) && Number.isFinite(inverse.c) && Number.isFinite(inverse.d)))
|
|
286
286
|
throw new Error(
|
|
287
287
|
"Manipulation handle cannot use a singular presentation transform."
|
|
288
288
|
);
|
|
@@ -293,13 +293,10 @@ function cssHandlePath(state, x, y, size) {
|
|
|
293
293
|
const path = new Path2D();
|
|
294
294
|
const half = size / 2;
|
|
295
295
|
const cos = Math.cos(angle), sin = Math.sin(angle);
|
|
296
|
-
for (
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
[-half, half]
|
|
301
|
-
].entries()) {
|
|
302
|
-
const sx = point[0] * cos - point[1] * sin, sy = point[0] * sin + point[1] * cos;
|
|
296
|
+
for (let i = 0; i < 4; i++) {
|
|
297
|
+
const cornerX = i === 0 || i === 3 ? -half : half;
|
|
298
|
+
const cornerY = i < 2 ? -half : half;
|
|
299
|
+
const sx = cornerX * cos - cornerY * sin, sy = cornerX * sin + cornerY * cos;
|
|
303
300
|
const local = inverse.transformPoint(new DOMPoint(sx, sy));
|
|
304
301
|
if (i === 0) path.moveTo(x + local.x, y + local.y);
|
|
305
302
|
else path.lineTo(x + local.x, y + local.y);
|
|
@@ -381,35 +378,37 @@ function paintRotationDecorations(ctx, state, anchor, style) {
|
|
|
381
378
|
}
|
|
382
379
|
function validateReadoutStyle(value) {
|
|
383
380
|
if (!value || value === true) return;
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
381
|
+
validateReadoutStateStyle(value);
|
|
382
|
+
validateReadoutStateStyle(value.inactive);
|
|
383
|
+
validateReadoutStateStyle(value.focused);
|
|
384
|
+
validateReadoutStateStyle(value.active);
|
|
385
|
+
}
|
|
386
|
+
function validateReadoutStateStyle(style) {
|
|
387
|
+
if (!style) return;
|
|
388
|
+
if (style.gap !== void 0 && (!Number.isFinite(style.gap) || style.gap < 0))
|
|
389
|
+
throw new Error(
|
|
390
|
+
"Manipulation readout gap must be finite non-negative CSS pixels."
|
|
391
|
+
);
|
|
392
|
+
if (style.strokeWidth !== void 0 && (!Number.isFinite(style.strokeWidth) || style.strokeWidth < 0))
|
|
393
|
+
throw new Error(
|
|
394
|
+
"Manipulation readout strokeWidth must be finite and non-negative."
|
|
395
|
+
);
|
|
396
|
+
if (style.opacity !== void 0 && (!Number.isFinite(style.opacity) || style.opacity < 0))
|
|
397
|
+
throw new Error(
|
|
398
|
+
"Manipulation readout opacity must be finite and non-negative."
|
|
399
|
+
);
|
|
400
|
+
}
|
|
401
|
+
function validateGuideDimension(value, property) {
|
|
402
|
+
if (value !== void 0 && (!Number.isFinite(value) || value < 0))
|
|
403
|
+
throw new Error(`Manipulation guide ${property} must be finite and non-negative.`);
|
|
399
404
|
}
|
|
400
405
|
function validateRotationStyle(style) {
|
|
401
406
|
const connector = style.connector && style.connector !== true ? style.connector : void 0;
|
|
402
407
|
const arc = style.arc && style.arc !== true ? style.arc : void 0;
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
);
|
|
408
|
-
for (const value of [connector?.opacity, arc?.opacity])
|
|
409
|
-
if (value !== void 0 && (!Number.isFinite(value) || value < 0))
|
|
410
|
-
throw new Error(
|
|
411
|
-
"Manipulation guide opacity must be finite and non-negative."
|
|
412
|
-
);
|
|
408
|
+
validateGuideDimension(connector?.strokeWidth, "strokeWidth");
|
|
409
|
+
validateGuideDimension(arc?.strokeWidth, "strokeWidth");
|
|
410
|
+
validateGuideDimension(connector?.opacity, "opacity");
|
|
411
|
+
validateGuideDimension(arc?.opacity, "opacity");
|
|
413
412
|
if (arc?.sweep !== void 0 && (!Number.isFinite(arc.sweep) || arc.sweep <= 0 || arc.sweep > Math.PI * 2))
|
|
414
413
|
throw new Error(
|
|
415
414
|
"Manipulation arc sweep must be finite, positive, and no greater than 2\u03C0 radians."
|