@pibbl/core 0.0.1 → 0.0.3-alpha.109.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/THIRD_PARTY_NOTICES.txt +81 -0
- package/dist/features/machines/animation.d.ts +64 -0
- package/dist/features/machines/animation.js +55 -0
- package/dist/features/machines/animation.js.map +7 -0
- package/dist/features/machines/animation.mjs +1 -0
- package/dist/features/machines/assign.d.ts +16 -0
- package/dist/features/machines/assign.js +15 -0
- package/dist/features/machines/assign.js.map +7 -0
- package/dist/features/machines/callback.d.ts +9 -0
- package/dist/features/machines/callback.js +7 -0
- package/dist/features/machines/callback.js.map +7 -0
- package/dist/features/machines/hook.d.ts +30 -0
- package/dist/features/machines/hook.js +37 -0
- package/dist/features/machines/hook.js.map +7 -0
- package/dist/features/machines/index.d.ts +6 -0
- package/dist/features/machines/index.js +12 -0
- package/dist/features/machines/index.js.map +7 -0
- package/dist/features/machines/index.mjs +1 -0
- package/dist/features/machines/runtime.d.ts +18 -0
- package/dist/features/machines/runtime.js +363 -0
- package/dist/features/machines/runtime.js.map +7 -0
- package/dist/features/machines/types.d.ts +164 -0
- package/dist/features/physics/2d-geometry.d.ts +3 -3
- package/dist/features/physics/2d-geometry.js.map +1 -1
- package/dist/features/physics/2d-testing.d.ts +1 -1
- package/dist/features/physics/2d-testing.js +2 -2
- package/dist/features/physics/2d-testing.js.map +2 -2
- package/dist/features/physics/2d.d.ts +115 -62
- package/dist/features/physics/2d.js +59 -28
- package/dist/features/physics/2d.js.map +2 -2
- package/dist/features/physics/lib/2d/canvas/components.js +25 -21
- package/dist/features/physics/lib/2d/canvas/components.js.map +2 -2
- package/dist/features/physics/lib/2d/canvas/presentation.js +1 -2
- package/dist/features/physics/lib/2d/canvas/presentation.js.map +2 -2
- package/dist/features/physics/lib/2d/collision/casts.js +4 -2
- package/dist/features/physics/lib/2d/collision/casts.js.map +2 -2
- package/dist/features/physics/lib/2d/query-types.d.ts +6 -0
- package/dist/features/physics/lib/2d/runtime/controller.d.ts +7 -6
- package/dist/features/physics/lib/2d/runtime/controller.js +1 -1
- package/dist/features/physics/lib/2d/runtime/controller.js.map +2 -2
- package/dist/features/physics/lib/2d/runtime/obstacles.js +9 -11
- package/dist/features/physics/lib/2d/runtime/obstacles.js.map +2 -2
- package/dist/features/physics/lib/2d/shapes.js +8 -9
- package/dist/features/physics/lib/2d/shapes.js.map +2 -2
- package/dist/features/physics/lib/2d/types.d.ts +8 -30
- package/dist/features/physics/lib/2d/world/queries.d.ts +7 -6
- package/dist/features/physics/lib/2d/world/queries.js.map +2 -2
- package/dist/features/physics/lib/2d/world/rapier.js +22 -26
- package/dist/features/physics/lib/2d/world/rapier.js.map +2 -2
- package/dist/features/sprites/formats/aseprite.d.ts +5 -0
- package/dist/features/sprites/formats/texture-packer.d.ts +5 -0
- package/dist/features/sprites/index.d.ts +6 -0
- package/dist/features/sprites/loader.d.ts +25 -0
- package/dist/features/sprites/loader.js +6 -3
- package/dist/features/sprites/loader.js.map +2 -2
- package/dist/features/sprites/model.d.ts +75 -0
- package/dist/features/sprites/sprite.d.ts +22 -0
- package/dist/features/textures/index.d.ts +12 -2
- package/dist/features/textures/index.js +33 -1
- package/dist/features/textures/index.js.map +2 -2
- package/dist/features/textures/lib/chemical-field.d.ts +56 -0
- package/dist/features/textures/lib/chemical-field.js +154 -0
- package/dist/features/textures/lib/chemical-field.js.map +7 -0
- package/dist/features/textures/lib/chemical-recipes.d.ts +119 -0
- package/dist/features/textures/lib/chemical-recipes.js +275 -0
- package/dist/features/textures/lib/chemical-recipes.js.map +7 -0
- package/dist/features/textures/lib/definitions.d.ts +3 -18
- package/dist/features/textures/lib/definitions.js +17 -24
- package/dist/features/textures/lib/definitions.js.map +2 -2
- package/dist/features/textures/lib/geometric-patterns.d.ts +149 -0
- package/dist/features/textures/lib/geometric-patterns.js +305 -0
- package/dist/features/textures/lib/geometric-patterns.js.map +7 -0
- package/dist/features/textures/lib/gray-scott.d.ts +55 -0
- package/dist/features/textures/lib/gray-scott.js +37 -0
- package/dist/features/textures/lib/gray-scott.js.map +7 -0
- package/dist/features/textures/lib/palette.js +1 -3
- package/dist/features/textures/lib/palette.js.map +2 -2
- package/dist/features/textures/lib/patterns.d.ts +123 -0
- package/dist/features/textures/lib/patterns.js +344 -0
- package/dist/features/textures/lib/patterns.js.map +7 -0
- package/dist/features/textures/lib/rain-drops.js +2 -1
- package/dist/features/textures/lib/rain-drops.js.map +2 -2
- package/dist/features/textures/lib/reaction-diffusion.d.ts +3 -2
- package/dist/features/textures/lib/reaction-diffusion.js +9 -20
- package/dist/features/textures/lib/reaction-diffusion.js.map +2 -2
- package/dist/features/textures/lib/simulation.d.ts +10 -4
- package/dist/features/textures/lib/simulation.js +23 -13
- package/dist/features/textures/lib/simulation.js.map +2 -2
- package/dist/features/textures/lib/wasm/electric.js +8 -1
- package/dist/features/textures/lib/wasm/electric.js.map +2 -2
- package/dist/features/textures/lib/water-surface.js +1 -3
- package/dist/features/textures/lib/water-surface.js.map +2 -2
- package/dist/features/viz/index.d.ts +92 -5
- package/dist/features/viz/index.js +202 -4
- package/dist/features/viz/index.js.map +2 -2
- package/dist/features/viz/inspection/bar.d.ts +79 -0
- package/dist/features/viz/inspection/bar.js +49 -0
- package/dist/features/viz/inspection/bar.js.map +7 -0
- package/dist/features/viz/inspection/candle.d.ts +156 -0
- package/dist/features/viz/inspection/candle.js +120 -0
- package/dist/features/viz/inspection/candle.js.map +7 -0
- package/dist/features/viz/inspection/capture-types.d.ts +65 -0
- package/dist/features/viz/inspection/capture.d.ts +16 -0
- package/dist/features/viz/inspection/capture.js +49 -0
- package/dist/features/viz/inspection/capture.js.map +7 -0
- package/dist/features/viz/inspection/handler.d.ts +36 -0
- package/dist/features/viz/inspection/handler.js +91 -0
- package/dist/features/viz/inspection/handler.js.map +7 -0
- package/dist/features/viz/inspection/ohlc-bar.d.ts +132 -0
- package/dist/features/viz/inspection/ohlc-bar.js +118 -0
- package/dist/features/viz/inspection/ohlc-bar.js.map +7 -0
- package/dist/features/viz/inspection/owned-ref.d.ts +16 -0
- package/dist/features/viz/inspection/owned-ref.js +99 -0
- package/dist/features/viz/inspection/owned-ref.js.map +7 -0
- package/dist/features/viz/inspection/painted-point.d.ts +22 -0
- package/dist/features/viz/inspection/painted-point.js +29 -0
- package/dist/features/viz/inspection/painted-point.js.map +7 -0
- package/dist/features/viz/inspection/queries.d.ts +100 -0
- package/dist/features/viz/inspection/queries.js +192 -0
- package/dist/features/viz/inspection/queries.js.map +7 -0
- package/dist/features/viz/inspection/query-types.d.ts +177 -0
- package/dist/features/viz/inspection/volume.d.ts +104 -0
- package/dist/features/viz/inspection/volume.js +95 -0
- package/dist/features/viz/inspection/volume.js.map +7 -0
- package/dist/features/viz/inspection.d.ts +19 -0
- package/dist/features/viz/inspection.js +54 -0
- package/dist/features/viz/inspection.js.map +7 -0
- package/dist/features/viz/inspection.mjs +1 -0
- package/dist/features/viz/lib/area-series.d.ts +62 -0
- package/dist/features/viz/lib/area-series.js +120 -0
- package/dist/features/viz/lib/area-series.js.map +7 -0
- package/dist/features/viz/lib/axis-labels.d.ts +2 -0
- package/dist/features/viz/lib/axis-labels.js +41 -0
- package/dist/features/viz/lib/axis-labels.js.map +7 -0
- package/dist/features/viz/lib/axis-title.d.ts +23 -0
- package/dist/features/viz/lib/axis-title.js +24 -0
- package/dist/features/viz/lib/axis-title.js.map +7 -0
- package/dist/features/viz/lib/axis.d.ts +1 -1
- package/dist/features/viz/lib/axis.js +50 -50
- package/dist/features/viz/lib/axis.js.map +2 -2
- package/dist/features/viz/lib/bar-scale.d.ts +7 -0
- package/dist/features/viz/lib/bar-scale.js +34 -0
- package/dist/features/viz/lib/bar-scale.js.map +7 -0
- package/dist/features/viz/lib/bar-series.d.ts +3 -1
- package/dist/features/viz/lib/bar-series.js +21 -5
- package/dist/features/viz/lib/bar-series.js.map +2 -2
- package/dist/features/viz/lib/baseline-series.d.ts +55 -0
- package/dist/features/viz/lib/baseline-series.js +136 -0
- package/dist/features/viz/lib/baseline-series.js.map +7 -0
- package/dist/features/viz/lib/candlestick-series.d.ts +62 -0
- package/dist/features/viz/lib/candlestick-series.js +150 -0
- package/dist/features/viz/lib/candlestick-series.js.map +7 -0
- package/dist/features/viz/lib/censored-point-series.d.ts +71 -0
- package/dist/features/viz/lib/censored-point-series.js +129 -0
- package/dist/features/viz/lib/censored-point-series.js.map +7 -0
- package/dist/features/viz/lib/chart-lines.d.ts +41 -0
- package/dist/features/viz/lib/chart-lines.js +32 -0
- package/dist/features/viz/lib/chart-lines.js.map +7 -0
- package/dist/features/viz/lib/color-context.d.ts +4 -0
- package/dist/features/viz/lib/color-context.js +41 -0
- package/dist/features/viz/lib/color-context.js.map +7 -0
- package/dist/features/viz/lib/color-math.d.ts +4 -0
- package/dist/features/viz/lib/color-math.js +31 -0
- package/dist/features/viz/lib/color-math.js.map +7 -0
- package/dist/features/viz/lib/color-types.d.ts +53 -0
- package/dist/features/viz/lib/curve-definition.d.ts +49 -0
- package/dist/features/viz/lib/curve-definition.js +142 -0
- package/dist/features/viz/lib/curve-definition.js.map +7 -0
- package/dist/features/viz/lib/diverging-color-scale.d.ts +11 -0
- package/dist/features/viz/lib/diverging-color-scale.js +51 -0
- package/dist/features/viz/lib/diverging-color-scale.js.map +7 -0
- package/dist/features/viz/lib/domain-navigation.d.ts +40 -0
- package/dist/features/viz/lib/domain-navigation.js +77 -0
- package/dist/features/viz/lib/domain-navigation.js.map +7 -0
- package/dist/features/viz/lib/editable-chart-elements.d.ts +178 -0
- package/dist/features/viz/lib/editable-chart-elements.js +733 -0
- package/dist/features/viz/lib/editable-chart-elements.js.map +7 -0
- package/dist/features/viz/lib/financial-aggregation.d.ts +127 -0
- package/dist/features/viz/lib/financial-aggregation.js +116 -0
- package/dist/features/viz/lib/financial-aggregation.js.map +7 -0
- package/dist/features/viz/lib/financial-autoscale.d.ts +64 -0
- package/dist/features/viz/lib/financial-autoscale.js +61 -0
- package/dist/features/viz/lib/financial-autoscale.js.map +7 -0
- package/dist/features/viz/lib/financial-comparison.d.ts +62 -0
- package/dist/features/viz/lib/financial-comparison.js +98 -0
- package/dist/features/viz/lib/financial-comparison.js.map +7 -0
- package/dist/features/viz/lib/financial-geometry.d.ts +77 -0
- package/dist/features/viz/lib/financial-geometry.js +67 -0
- package/dist/features/viz/lib/financial-geometry.js.map +7 -0
- package/dist/features/viz/lib/financial-indicators.d.ts +114 -0
- package/dist/features/viz/lib/financial-indicators.js +135 -0
- package/dist/features/viz/lib/financial-indicators.js.map +7 -0
- package/dist/features/viz/lib/financial-oscillators.d.ts +171 -0
- package/dist/features/viz/lib/financial-oscillators.js +265 -0
- package/dist/features/viz/lib/financial-oscillators.js.map +7 -0
- package/dist/features/viz/lib/graph/bipartite.d.ts +14 -0
- package/dist/features/viz/lib/graph/bipartite.js +250 -0
- package/dist/features/viz/lib/graph/bipartite.js.map +7 -0
- package/dist/features/viz/lib/graph/chord.d.ts +44 -0
- package/dist/features/viz/lib/graph/chord.js +348 -0
- package/dist/features/viz/lib/graph/chord.js.map +7 -0
- package/dist/features/viz/lib/graph/dependency.d.ts +26 -0
- package/dist/features/viz/lib/graph/dependency.js +140 -0
- package/dist/features/viz/lib/graph/dependency.js.map +7 -0
- package/dist/features/viz/lib/graph/force.d.ts +28 -0
- package/dist/features/viz/lib/graph/force.js +580 -0
- package/dist/features/viz/lib/graph/force.js.map +7 -0
- package/dist/features/viz/lib/graph/hierarchy.d.ts +21 -0
- package/dist/features/viz/lib/graph/hierarchy.js +112 -0
- package/dist/features/viz/lib/graph/hierarchy.js.map +7 -0
- package/dist/features/viz/lib/graph/icicle.d.ts +16 -0
- package/dist/features/viz/lib/graph/icicle.js +153 -0
- package/dist/features/viz/lib/graph/icicle.js.map +7 -0
- package/dist/features/viz/lib/graph/matrix.d.ts +30 -0
- package/dist/features/viz/lib/graph/matrix.js +243 -0
- package/dist/features/viz/lib/graph/matrix.js.map +7 -0
- package/dist/features/viz/lib/graph/neighborhood.d.ts +11 -0
- package/dist/features/viz/lib/graph/neighborhood.js +281 -0
- package/dist/features/viz/lib/graph/neighborhood.js.map +7 -0
- package/dist/features/viz/lib/graph/routes.d.ts +35 -0
- package/dist/features/viz/lib/graph/routes.js +101 -0
- package/dist/features/viz/lib/graph/routes.js.map +7 -0
- package/dist/features/viz/lib/graph/sankey.d.ts +44 -0
- package/dist/features/viz/lib/graph/sankey.js +341 -0
- package/dist/features/viz/lib/graph/sankey.js.map +7 -0
- package/dist/features/viz/lib/graph/shared.d.ts +59 -0
- package/dist/features/viz/lib/graph/shared.js +301 -0
- package/dist/features/viz/lib/graph/shared.js.map +7 -0
- package/dist/features/viz/lib/graph/tree.d.ts +11 -0
- package/dist/features/viz/lib/graph/tree.js +232 -0
- package/dist/features/viz/lib/graph/tree.js.map +7 -0
- package/dist/features/viz/lib/graph/treemap.d.ts +20 -0
- package/dist/features/viz/lib/graph/treemap.js +227 -0
- package/dist/features/viz/lib/graph/treemap.js.map +7 -0
- package/dist/features/viz/lib/graph/types.d.ts +1097 -0
- package/dist/features/viz/lib/hover-card.js +8 -9
- package/dist/features/viz/lib/hover-card.js.map +2 -2
- package/dist/features/viz/lib/hover-data.d.ts +1 -1
- package/dist/features/viz/lib/hover-data.js +6 -3
- package/dist/features/viz/lib/hover-data.js.map +2 -2
- package/dist/features/viz/lib/hover-types.d.ts +5 -5
- package/dist/features/viz/lib/interval-band-series.d.ts +49 -0
- package/dist/features/viz/lib/interval-band-series.js +136 -0
- package/dist/features/viz/lib/interval-band-series.js.map +7 -0
- package/dist/features/viz/lib/interval-diamond-series.d.ts +43 -0
- package/dist/features/viz/lib/interval-diamond-series.js +122 -0
- package/dist/features/viz/lib/interval-diamond-series.js.map +7 -0
- package/dist/features/viz/lib/interval-series.d.ts +79 -0
- package/dist/features/viz/lib/interval-series.js +158 -0
- package/dist/features/viz/lib/interval-series.js.map +7 -0
- package/dist/features/viz/lib/layout-pie.js +9 -13
- package/dist/features/viz/lib/layout-pie.js.map +2 -2
- package/dist/features/viz/lib/line-series.d.ts +1 -1
- package/dist/features/viz/lib/line-series.js +47 -28
- package/dist/features/viz/lib/line-series.js.map +2 -2
- package/dist/features/viz/lib/linear-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/linear-scale-component.js +18 -0
- package/dist/features/viz/lib/linear-scale-component.js.map +7 -0
- package/dist/features/viz/lib/linear-scale.js +1 -1
- package/dist/features/viz/lib/linear-scale.js.map +2 -2
- package/dist/features/viz/lib/log-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/log-scale-component.js +19 -0
- package/dist/features/viz/lib/log-scale-component.js.map +7 -0
- package/dist/features/viz/lib/log-scale.d.ts +2 -0
- package/dist/features/viz/lib/log-scale.js +53 -0
- package/dist/features/viz/lib/log-scale.js.map +7 -0
- package/dist/features/viz/lib/monotone-curve.d.ts +11 -0
- package/dist/features/viz/lib/monotone-curve.js +63 -0
- package/dist/features/viz/lib/monotone-curve.js.map +7 -0
- package/dist/features/viz/lib/nearest.d.ts +9 -9
- package/dist/features/viz/lib/nearest.js.map +1 -1
- package/dist/features/viz/lib/numeric-range-interpolation.d.ts +15 -0
- package/dist/features/viz/lib/numeric-range-interpolation.js +36 -0
- package/dist/features/viz/lib/numeric-range-interpolation.js.map +7 -0
- package/dist/features/viz/lib/numeric-ticks.d.ts +38 -0
- package/dist/features/viz/lib/numeric-ticks.js +54 -0
- package/dist/features/viz/lib/numeric-ticks.js.map +7 -0
- package/dist/features/viz/lib/ohlc-bar-series.d.ts +55 -0
- package/dist/features/viz/lib/ohlc-bar-series.js +168 -0
- package/dist/features/viz/lib/ohlc-bar-series.js.map +7 -0
- package/dist/features/viz/lib/paired-series.d.ts +44 -0
- package/dist/features/viz/lib/paired-series.js +93 -0
- package/dist/features/viz/lib/paired-series.js.map +7 -0
- package/dist/features/viz/lib/pie-layout.js +2 -1
- package/dist/features/viz/lib/pie-layout.js.map +2 -2
- package/dist/features/viz/lib/plot-series.js +11 -6
- package/dist/features/viz/lib/plot-series.js.map +2 -2
- package/dist/features/viz/lib/plot-types.d.ts +4 -3
- package/dist/features/viz/lib/point-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/point-scale-component.js +19 -0
- package/dist/features/viz/lib/point-scale-component.js.map +7 -0
- package/dist/features/viz/lib/point-scale.d.ts +2 -0
- package/dist/features/viz/lib/point-scale.js +45 -0
- package/dist/features/viz/lib/point-scale.js.map +7 -0
- package/dist/features/viz/lib/point-series.d.ts +1 -1
- package/dist/features/viz/lib/point-series.js +36 -9
- package/dist/features/viz/lib/point-series.js.map +2 -2
- package/dist/features/viz/lib/point-types.d.ts +5 -2
- package/dist/features/viz/lib/reference-band.d.ts +16 -0
- package/dist/features/viz/lib/reference-band.js +30 -0
- package/dist/features/viz/lib/reference-band.js.map +7 -0
- package/dist/features/viz/lib/scale-adjust.js +9 -4
- package/dist/features/viz/lib/scale-adjust.js.map +2 -2
- package/dist/features/viz/lib/scale-context.d.ts +5 -4
- package/dist/features/viz/lib/scale-context.js +15 -11
- package/dist/features/viz/lib/scale-context.js.map +2 -2
- package/dist/features/viz/lib/scale-provider.d.ts +2 -0
- package/dist/features/viz/lib/scale-provider.js +13 -0
- package/dist/features/viz/lib/scale-provider.js.map +7 -0
- package/dist/features/viz/lib/scale-ticks.d.ts +5 -0
- package/dist/features/viz/lib/scale-ticks.js +64 -0
- package/dist/features/viz/lib/scale-ticks.js.map +7 -0
- package/dist/features/viz/lib/scale-view.d.ts +4 -0
- package/dist/features/viz/lib/scale-view.js +21 -0
- package/dist/features/viz/lib/scale-view.js.map +7 -0
- package/dist/features/viz/lib/sequential-color-scale.d.ts +11 -0
- package/dist/features/viz/lib/sequential-color-scale.js +49 -0
- package/dist/features/viz/lib/sequential-color-scale.js.map +7 -0
- package/dist/features/viz/lib/series-position.d.ts +12 -0
- package/dist/features/viz/lib/series-position.js +44 -0
- package/dist/features/viz/lib/series-position.js.map +7 -0
- package/dist/features/viz/lib/step-curves.d.ts +19 -0
- package/dist/features/viz/lib/step-curves.js +53 -0
- package/dist/features/viz/lib/step-curves.js.map +7 -0
- package/dist/features/viz/lib/symlog-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/symlog-scale-component.js +19 -0
- package/dist/features/viz/lib/symlog-scale-component.js.map +7 -0
- package/dist/features/viz/lib/symlog-scale.d.ts +2 -0
- package/dist/features/viz/lib/symlog-scale.js +38 -0
- package/dist/features/viz/lib/symlog-scale.js.map +7 -0
- package/dist/features/viz/lib/threshold-color-scale.d.ts +43 -0
- package/dist/features/viz/lib/threshold-color-scale.js +59 -0
- package/dist/features/viz/lib/threshold-color-scale.js.map +7 -0
- package/dist/features/viz/lib/trading-time-mapping.d.ts +32 -0
- package/dist/features/viz/lib/trading-time-mapping.js +89 -0
- package/dist/features/viz/lib/trading-time-mapping.js.map +7 -0
- package/dist/features/viz/lib/trading-time-scale.d.ts +83 -0
- package/dist/features/viz/lib/trading-time-scale.js +96 -0
- package/dist/features/viz/lib/trading-time-scale.js.map +7 -0
- package/dist/features/viz/lib/trajectory-series.d.ts +71 -0
- package/dist/features/viz/lib/trajectory-series.js +111 -0
- package/dist/features/viz/lib/trajectory-series.js.map +7 -0
- package/dist/features/viz/lib/types.d.ts +114 -21
- package/dist/features/viz/lib/use-bar-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-bar-scale.js +9 -0
- package/dist/features/viz/lib/use-bar-scale.js.map +7 -0
- package/dist/features/viz/lib/use-continuous-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-continuous-scale.js +14 -0
- package/dist/features/viz/lib/use-continuous-scale.js.map +7 -0
- package/dist/features/viz/lib/use-linear-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-linear-scale.js +9 -0
- package/dist/features/viz/lib/use-linear-scale.js.map +7 -0
- package/dist/features/viz/lib/use-log-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-log-scale.js +9 -0
- package/dist/features/viz/lib/use-log-scale.js.map +7 -0
- package/dist/features/viz/lib/use-point-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-point-scale.js +9 -0
- package/dist/features/viz/lib/use-point-scale.js.map +7 -0
- package/dist/features/viz/lib/use-symlog-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-symlog-scale.js +9 -0
- package/dist/features/viz/lib/use-symlog-scale.js.map +7 -0
- package/dist/features/viz/lib/use-utc-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-utc-scale.js +9 -0
- package/dist/features/viz/lib/use-utc-scale.js.map +7 -0
- package/dist/features/viz/lib/utc-labels.d.ts +12 -0
- package/dist/features/viz/lib/utc-labels.js +27 -0
- package/dist/features/viz/lib/utc-labels.js.map +7 -0
- package/dist/features/viz/lib/utc-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/utc-scale-component.js +18 -0
- package/dist/features/viz/lib/utc-scale-component.js.map +7 -0
- package/dist/features/viz/lib/utc-scale.d.ts +21 -0
- package/dist/features/viz/lib/utc-scale.js +124 -0
- package/dist/features/viz/lib/utc-scale.js.map +7 -0
- package/dist/features/viz/lib/volume-series.d.ts +59 -0
- package/dist/features/viz/lib/volume-series.js +117 -0
- package/dist/features/viz/lib/volume-series.js.map +7 -0
- package/dist/features/viz/lib/weighted-point-series.d.ts +71 -0
- package/dist/features/viz/lib/weighted-point-series.js +169 -0
- package/dist/features/viz/lib/weighted-point-series.js.map +7 -0
- package/dist/filters/backdrop-contrast-gpu.d.ts +5 -0
- package/dist/filters/backdrop-contrast-gpu.js +33 -0
- package/dist/filters/backdrop-contrast-gpu.js.map +7 -0
- package/dist/filters/backdrop-contrast.d.ts +21 -0
- package/dist/filters/backdrop-contrast.js +61 -0
- package/dist/filters/backdrop-contrast.js.map +7 -0
- package/dist/filters/displacement.js +1 -1
- package/dist/filters/displacement.js.map +2 -2
- package/dist/filters/emboss-gpu.d.ts +4 -0
- package/dist/filters/emboss-gpu.js +39 -0
- package/dist/filters/emboss-gpu.js.map +7 -0
- package/dist/filters/emboss.d.ts +32 -0
- package/dist/filters/emboss.js +104 -0
- package/dist/filters/emboss.js.map +7 -0
- package/dist/filters/filter-executor.d.ts +11 -4
- package/dist/filters/filter-executor.js +104 -49
- package/dist/filters/filter-executor.js.map +2 -2
- package/dist/filters/reflected-light.js +1 -1
- package/dist/filters/reflected-light.js.map +2 -2
- package/dist/filters/reflection-gpu.d.ts +3 -1
- package/dist/filters/reflection-gpu.js +5 -2
- package/dist/filters/reflection-gpu.js.map +2 -2
- package/dist/filters/render-backdrop-contrast-boundary.d.ts +31 -0
- package/dist/filters/render-backdrop-contrast-boundary.js +116 -0
- package/dist/filters/render-backdrop-contrast-boundary.js.map +7 -0
- package/dist/filters/render-emboss-boundary.d.ts +13 -0
- package/dist/filters/render-emboss-boundary.js +131 -0
- package/dist/filters/render-emboss-boundary.js.map +7 -0
- package/dist/filters.d.ts +9 -5
- package/dist/filters.js +4 -0
- package/dist/filters.js.map +2 -2
- package/dist/index.d.ts +10 -6
- package/dist/index.js +18 -2
- package/dist/index.js.map +2 -2
- package/dist/internal.d.ts +4 -0
- package/dist/internal.js +6 -0
- package/dist/internal.js.map +2 -2
- package/dist/layout-kernel.d.ts +12 -0
- package/dist/layout-kernel.js +11 -0
- package/dist/layout-kernel.js.map +7 -0
- package/dist/layout-kernel.mjs +1 -0
- package/dist/lib/animation/definition.d.ts +5 -3
- package/dist/lib/animation/definition.js +29 -4
- package/dist/lib/animation/definition.js.map +2 -2
- package/dist/lib/animation/playback.d.ts +8 -0
- package/dist/lib/animation/playback.js +33 -11
- package/dist/lib/animation/playback.js.map +2 -2
- package/dist/lib/animation/spring.d.ts +3 -1
- package/dist/lib/animation/spring.js.map +2 -2
- package/dist/lib/animation/types.d.ts +29 -73
- package/dist/lib/backend/types.d.ts +13 -1
- package/dist/lib/backend/types.js.map +2 -2
- package/dist/lib/components/arc-geometry.js +2 -1
- package/dist/lib/components/arc-geometry.js.map +2 -2
- package/dist/lib/components/g.js +2 -0
- package/dist/lib/components/g.js.map +2 -2
- package/dist/lib/components/html-box.js +2 -1
- package/dist/lib/components/html-box.js.map +2 -2
- package/dist/lib/components/img.js +3 -3
- package/dist/lib/components/img.js.map +2 -2
- package/dist/lib/components/layer.js +98 -16
- package/dist/lib/components/layer.js.map +3 -3
- package/dist/lib/components/text.d.ts +16 -0
- package/dist/lib/components/text.js +131 -24
- package/dist/lib/components/text.js.map +2 -2
- package/dist/lib/define-primitive.d.ts +4 -2
- package/dist/lib/define-primitive.js +3 -1
- package/dist/lib/define-primitive.js.map +2 -2
- package/dist/lib/element/metadata.d.ts +9 -0
- package/dist/lib/element/metadata.js +19 -0
- package/dist/lib/element/metadata.js.map +2 -2
- package/dist/lib/element/resolve-primitive-inputs.d.ts +2 -0
- package/dist/lib/element/resolve-primitive-inputs.js +17 -4
- package/dist/lib/element/resolve-primitive-inputs.js.map +2 -2
- package/dist/lib/events/event-facade.d.ts +18 -0
- package/dist/lib/events/event-facade.js +28 -2
- package/dist/lib/events/event-facade.js.map +2 -2
- package/dist/lib/events/hit-test.js +2 -1
- package/dist/lib/events/hit-test.js.map +2 -2
- package/dist/lib/events/propagation.d.ts +2 -1
- package/dist/lib/events/propagation.js +22 -16
- package/dist/lib/events/propagation.js.map +2 -2
- package/dist/lib/events/registrations.d.ts +10 -0
- package/dist/lib/events/registrations.js +160 -5
- package/dist/lib/events/registrations.js.map +2 -2
- package/dist/lib/execute-render.js +25 -1
- package/dist/lib/execute-render.js.map +2 -2
- package/dist/lib/filter/filter-region.js +3 -10
- package/dist/lib/filter/filter-region.js.map +2 -2
- package/dist/lib/focus/focus-manager.d.ts +8 -1
- package/dist/lib/focus/focus-manager.js +87 -43
- package/dist/lib/focus/focus-manager.js.map +2 -2
- package/dist/lib/focus/geometry.d.ts +2 -0
- package/dist/lib/focus/geometry.js +6 -0
- package/dist/lib/focus/geometry.js.map +2 -2
- package/dist/lib/geometry/path-bend-guide.js +1 -1
- package/dist/lib/geometry/path-bend-guide.js.map +2 -2
- package/dist/lib/geometry/path-geometry.js +12 -11
- package/dist/lib/geometry/path-geometry.js.map +2 -2
- package/dist/lib/geometry/path-transforms.js +17 -21
- package/dist/lib/geometry/path-transforms.js.map +2 -2
- package/dist/lib/geometry/path-warp-bezier.js +3 -1
- package/dist/lib/geometry/path-warp-bezier.js.map +2 -2
- package/dist/lib/geometry/path-warp.js +1 -1
- package/dist/lib/geometry/path-warp.js.map +2 -2
- package/dist/lib/global-state.js +2 -0
- package/dist/lib/global-state.js.map +2 -2
- package/dist/lib/hooks/use-animated-value.d.ts +11 -21
- package/dist/lib/hooks/use-animated-value.js +23 -70
- package/dist/lib/hooks/use-animated-value.js.map +3 -3
- package/dist/lib/hooks/use-playback.js +1 -0
- package/dist/lib/hooks/use-playback.js.map +2 -2
- package/dist/lib/html/html-events.d.ts +32 -0
- package/dist/lib/html/html-events.js +179 -0
- package/dist/lib/html/html-events.js.map +7 -0
- package/dist/lib/html/html-service.d.ts +8 -2
- package/dist/lib/html/html-service.js +198 -65
- package/dist/lib/html/html-service.js.map +2 -2
- package/dist/lib/html/overlay-config.js +7 -6
- package/dist/lib/html/overlay-config.js.map +2 -2
- package/dist/lib/html/types.d.ts +29 -2
- package/dist/lib/layout/absolute.d.ts +11 -5
- package/dist/lib/layout/absolute.js +329 -55
- package/dist/lib/layout/absolute.js.map +3 -3
- package/dist/lib/layout/allocation-checkpoint-owner.d.ts +11 -0
- package/dist/lib/layout/allocation-checkpoint-owner.js +86 -0
- package/dist/lib/layout/allocation-checkpoint-owner.js.map +7 -0
- package/dist/lib/layout/allocation-checkpoint.d.ts +53 -0
- package/dist/lib/layout/allocation-checkpoint.js +463 -0
- package/dist/lib/layout/allocation-checkpoint.js.map +7 -0
- package/dist/lib/layout/allocation-dependencies.d.ts +30 -0
- package/dist/lib/layout/allocation-dependencies.js +90 -0
- package/dist/lib/layout/allocation-dependencies.js.map +7 -0
- package/dist/lib/layout/allocation-revision.d.ts +13 -0
- package/dist/lib/layout/allocation-revision.js +67 -0
- package/dist/lib/layout/allocation-revision.js.map +7 -0
- package/dist/lib/layout/box-insets.d.ts +17 -0
- package/dist/lib/layout/box-insets.js +138 -0
- package/dist/lib/layout/box-insets.js.map +7 -0
- package/dist/lib/layout/box-sizing.d.ts +16 -0
- package/dist/lib/layout/box-sizing.js +77 -0
- package/dist/lib/layout/box-sizing.js.map +7 -0
- package/dist/lib/layout/box.js +42 -12
- package/dist/lib/layout/box.js.map +2 -2
- package/dist/lib/layout/canvas-measurement.d.ts +13 -0
- package/dist/lib/layout/canvas-measurement.js +57 -0
- package/dist/lib/layout/canvas-measurement.js.map +7 -0
- package/dist/lib/layout/context.d.ts +35 -6
- package/dist/lib/layout/context.js +72 -3
- package/dist/lib/layout/context.js.map +2 -2
- package/dist/lib/layout/define-layout-component.d.ts +23 -0
- package/dist/lib/layout/define-layout-component.js +84 -0
- package/dist/lib/layout/define-layout-component.js.map +7 -0
- package/dist/lib/layout/flex-allocation-cache.d.ts +42 -0
- package/dist/lib/layout/flex-baseline-mode.d.ts +2 -0
- package/dist/lib/layout/flex-baseline-mode.js +7 -0
- package/dist/lib/layout/flex-baseline-mode.js.map +7 -0
- package/dist/lib/layout/flex.d.ts +50 -15
- package/dist/lib/layout/flex.js +2124 -195
- package/dist/lib/layout/flex.js.map +3 -3
- package/dist/lib/layout/flow.js +225 -49
- package/dist/lib/layout/flow.js.map +2 -2
- package/dist/lib/layout/geometry-publication.d.ts +53 -0
- package/dist/lib/layout/geometry-publication.js +244 -0
- package/dist/lib/layout/geometry-publication.js.map +7 -0
- package/dist/lib/layout/grid-kernel.d.ts +63 -0
- package/dist/lib/layout/grid-kernel.js +168 -0
- package/dist/lib/layout/grid-kernel.js.map +7 -0
- package/dist/lib/layout/grid.d.ts +63 -4
- package/dist/lib/layout/grid.js +767 -171
- package/dist/lib/layout/grid.js.map +3 -3
- package/dist/lib/layout/measure.d.ts +55 -3
- package/dist/lib/layout/measure.js +448 -15
- package/dist/lib/layout/measure.js.map +2 -2
- package/dist/lib/layout/overlay.js +81 -23
- package/dist/lib/layout/overlay.js.map +2 -2
- package/dist/lib/layout/participation.d.ts +27 -0
- package/dist/lib/layout/participation.js +188 -0
- package/dist/lib/layout/participation.js.map +7 -0
- package/dist/lib/layout/place-child.js +1 -1
- package/dist/lib/layout/place-child.js.map +2 -2
- package/dist/lib/layout/positioning-diagnostics.d.ts +1 -1
- package/dist/lib/layout/positioning-diagnostics.js +13 -2
- package/dist/lib/layout/positioning-diagnostics.js.map +2 -2
- package/dist/lib/layout/prepared-root.d.ts +121 -0
- package/dist/lib/layout/prepared-root.js +360 -0
- package/dist/lib/layout/prepared-root.js.map +7 -0
- package/dist/lib/layout/standalone-kernel.d.ts +60 -0
- package/dist/lib/layout/standalone-kernel.js +722 -0
- package/dist/lib/layout/standalone-kernel.js.map +7 -0
- package/dist/lib/layout/topology.d.ts +21 -0
- package/dist/lib/layout/topology.js +113 -0
- package/dist/lib/layout/topology.js.map +7 -0
- package/dist/lib/layout/types.d.ts +5 -0
- package/dist/lib/layout/wasm/artifact.d.ts +1 -0
- package/dist/lib/layout/wasm/artifact.js +5 -0
- package/dist/lib/layout/wasm/artifact.js.map +7 -0
- package/dist/lib/layout/wasm/bytes.d.ts +1 -0
- package/dist/lib/layout/wasm/bytes.js +5 -0
- package/dist/lib/layout/wasm/bytes.js.map +7 -0
- package/dist/lib/layout/wasm/embedded.d.ts +2 -0
- package/dist/lib/layout/wasm/embedded.js +12 -0
- package/dist/lib/layout/wasm/embedded.js.map +7 -0
- package/dist/lib/layout/wasm/layout.wasm +0 -0
- package/dist/lib/layout/wasm/module.d.ts +8 -0
- package/dist/lib/layout/wasm/module.js +70 -0
- package/dist/lib/layout/wasm/module.js.map +7 -0
- package/dist/lib/layout/wasm/region.d.ts +267 -0
- package/dist/lib/layout/wasm/region.js +1018 -0
- package/dist/lib/layout/wasm/region.js.map +7 -0
- package/dist/lib/manipulation/controller.js +4 -7
- package/dist/lib/manipulation/controller.js.map +2 -2
- package/dist/lib/manipulation/frame.js +1 -1
- package/dist/lib/manipulation/frame.js.map +2 -2
- package/dist/lib/manipulation/handles.js +32 -33
- package/dist/lib/manipulation/handles.js.map +2 -2
- package/dist/lib/manipulation/solve.js +12 -10
- package/dist/lib/manipulation/solve.js.map +2 -2
- package/dist/lib/mount-pibbl.js +1 -0
- package/dist/lib/mount-pibbl.js.map +2 -2
- package/dist/lib/mount-prepared-pibbl.d.ts +5 -0
- package/dist/lib/mount-prepared-pibbl.js +29 -0
- package/dist/lib/mount-prepared-pibbl.js.map +7 -0
- package/dist/lib/mount-request.d.ts +8 -0
- package/dist/lib/mount-request.js +41 -0
- package/dist/lib/mount-request.js.map +7 -0
- package/dist/lib/pibbl.d.ts +21 -13
- package/dist/lib/pibbl.js +18 -16
- package/dist/lib/pibbl.js.map +2 -2
- package/dist/lib/recording/recording.d.ts +43 -0
- package/dist/lib/recording/recording.js +555 -0
- package/dist/lib/recording/recording.js.map +7 -0
- package/dist/lib/recording/types.d.ts +118 -0
- package/dist/lib/recording/wasm-bytes.d.ts +1 -0
- package/dist/lib/recording/wasm-bytes.js +5 -0
- package/dist/lib/recording/wasm-bytes.js.map +7 -0
- package/dist/lib/recording/worker-source.d.ts +1 -0
- package/dist/lib/recording/worker-source.js +5 -0
- package/dist/lib/recording/worker-source.js.map +7 -0
- package/dist/lib/render-layer/controller.d.ts +9 -3
- package/dist/lib/render-layer/controller.js +259 -110
- package/dist/lib/render-layer/controller.js.map +2 -2
- package/dist/lib/render-transaction.d.ts +12 -2
- package/dist/lib/render-transaction.js +69 -1
- package/dist/lib/render-transaction.js.map +2 -2
- package/dist/lib/render.js +32 -8
- package/dist/lib/render.js.map +2 -2
- package/dist/lib/scheduler/realm-scheduler.d.ts +2 -0
- package/dist/lib/scheduler/realm-scheduler.js +55 -26
- package/dist/lib/scheduler/realm-scheduler.js.map +2 -2
- package/dist/lib/scheduler/renderer-participant.js +1 -0
- package/dist/lib/scheduler/renderer-participant.js.map +2 -2
- package/dist/lib/series-inspection-frame.d.ts +18 -0
- package/dist/lib/series-inspection-frame.js +70 -0
- package/dist/lib/series-inspection-frame.js.map +7 -0
- package/dist/lib/signals/edge.d.ts +7 -4
- package/dist/lib/signals/edge.js +25 -3
- package/dist/lib/signals/edge.js.map +2 -2
- package/dist/lib/signals/graph.d.ts +16 -2
- package/dist/lib/signals/graph.js +54 -12
- package/dist/lib/signals/graph.js.map +2 -2
- package/dist/lib/signals/input-provision.d.ts +15 -0
- package/dist/lib/signals/input-provision.js +53 -3
- package/dist/lib/signals/input-provision.js.map +2 -2
- package/dist/lib/signals/render-consumer.d.ts +3 -0
- package/dist/lib/signals/render-consumer.js +22 -14
- package/dist/lib/signals/render-consumer.js.map +2 -2
- package/dist/lib/style/positioning.d.ts +50 -2
- package/dist/lib/style/positioning.js +28 -4
- package/dist/lib/style/positioning.js.map +2 -2
- package/dist/lib/style/resolve-built-in.d.ts +4 -3
- package/dist/lib/style/resolve-built-in.js +17 -3
- package/dist/lib/style/resolve-built-in.js.map +2 -2
- package/dist/lib/style/resolve-dispatch.d.ts +3 -0
- package/dist/lib/style/resolve-dispatch.js +77 -4
- package/dist/lib/style/resolve-dispatch.js.map +2 -2
- package/dist/lib/style/resolve-length.d.ts +2 -0
- package/dist/lib/style/resolve-length.js +13 -9
- package/dist/lib/style/resolve-length.js.map +2 -2
- package/dist/lib/style/sizing-length.d.ts +51 -0
- package/dist/lib/style/sizing-length.js +77 -0
- package/dist/lib/style/sizing-length.js.map +7 -0
- package/dist/lib/style/types.d.ts +63 -25
- package/dist/lib/surface/root-surface.js +10 -6
- package/dist/lib/surface/root-surface.js.map +2 -2
- package/dist/lib/textures/texture.js +10 -8
- package/dist/lib/textures/texture.js.map +2 -2
- package/dist/lib/transitions/capture.js +4 -1
- package/dist/lib/transitions/capture.js.map +2 -2
- package/dist/lib/transitions/embers-physics.js +17 -10
- package/dist/lib/transitions/embers-physics.js.map +2 -2
- package/dist/lib/types.d.ts +110 -1
- package/dist/sync.d.ts +16 -0
- package/dist/sync.js +13 -0
- package/dist/sync.js.map +7 -0
- package/dist/sync.mjs +1 -0
- package/package.json +43 -6
- package/dist/features/viz/lib/scale.d.ts +0 -11
- package/dist/features/viz/lib/scale.js +0 -80
- package/dist/features/viz/lib/scale.js.map +0 -7
- package/dist/features/viz/lib/use-scale.d.ts +0 -20
- package/dist/features/viz/lib/use-scale.js +0 -10
- package/dist/features/viz/lib/use-scale.js.map +0 -7
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/lib/render-layer/controller.ts"],
|
|
4
|
-
"sourcesContent": ["import { GLOBAL_STATE, getCurrentPibblInstance } from \"../global-state.js\";\nimport { getCurrentWorldTransform } from \"../render-target.js\";\nimport {\n queueFrameCompletion,\n requestInstanceRender,\n} from \"../scheduler/realm-scheduler.js\";\nimport type { PibblComponentRefs, RenderingContext2D } from \"../types.js\";\nimport type { PibblPointerEvents } from \"../events/types.js\";\nimport {\n PibblHitDisposition,\n PibblPaintEntryKind,\n type PibblHitTestOutput,\n type PibblNestedPaintEntry,\n} from \"../events/paint-entry.js\";\nimport {\n createTarget,\n releaseTarget,\n updateTarget,\n type PibblEventTargetRegistration,\n} from \"../events/registrations.js\";\nimport {\n hasResolverPointerCapture,\n releaseResolverInputWinner,\n releaseResolverPointerCapture,\n setResolverPointerCapture,\n type PibblResolverInputType,\n type PibblResolverInputWinner,\n} from \"../events/resolver-input.js\";\nimport type {\n PibblRenderLayerContext,\n PibblRenderLayerDefinition,\n PibblRenderLayerFrame,\n PibblRenderLayerHit,\n PibblRenderLayerInteractionSnapshot,\n PibblRenderLayerSize,\n PibblRenderLayerTarget,\n} from \"./types.js\";\n\nclass SynchronousLifecycleError extends TypeError {}\n\ninterface StagedInteraction<Target extends object> {\n readonly snapshot: PibblRenderLayerInteractionSnapshot<Target>;\n readonly targets: readonly PibblRenderLayerTarget<Target>[];\n readonly transform: DOMMatrix;\n readonly clippingStack: PibblNestedPaintEntry[\"clippingStack\"];\n}\n\ninterface RenderCandidate<Target extends object> {\n readonly bitmap: ImageBitmap;\n readonly interaction: StagedInteraction<Target>;\n readonly policy: RenderLayerPolicy;\n}\n\ninterface RenderLayerPolicy {\n readonly missBehavior: \"pass-through\" | \"block\" | \"target-layer\";\n readonly pointerEvents: PibblPointerEvents | undefined;\n readonly keyboardFocusable: boolean | undefined;\n readonly keyboardNavigationBounds:\n | Readonly<{\n x: number;\n y: number;\n width: number;\n height: number;\n }>\n | undefined;\n}\n\ninterface WinnerState<Target extends object> {\n readonly point: Readonly<{ x: number; y: number }>;\n readonly hit: PibblRenderLayerHit<Target>;\n}\n\nconst MISS_SNAPSHOT: PibblRenderLayerInteractionSnapshot<object> = Object.freeze({\n targets: Object.freeze([]),\n hitTest: () => Object.freeze({ kind: \"miss\" as const }),\n});\n\nconst RESOLVER_INPUT_TYPES = Object.freeze([\n \"pointerdown\",\n \"pointermove\",\n \"pointerup\",\n \"pointercancel\",\n \"wheel\",\n \"contextmenu\",\n \"click\",\n] as const);\n\nconst RESOLVER_CAPTURE_INPUT_TYPES = Object.freeze([\n \"pointermove\",\n \"pointerup\",\n \"pointercancel\",\n] as const);\n\n// The private target deliberately owns no user callback. This eligibility\n// marker lets the shared keyboard default dispatch its click through the\n// component's one structural listener.\nconst STRUCTURAL_CLICK_ELIGIBILITY = () => {};\n\nexport function assertSynchronous(value: unknown, callback: string): void {\n if (value && typeof (value as { then?: unknown }).then === \"function\") {\n throw new SynchronousLifecycleError(\n `defineRenderLayer ${callback}() must be synchronous.`,\n );\n }\n}\n\nexport class RenderLayerController<Props, Resources, Target extends object> {\n private readonly instance = getCurrentPibblInstance();\n private readonly refs: PibblComponentRefs<any>;\n private readonly canvas: OffscreenCanvas;\n private readonly context: PibblRenderLayerContext;\n private resources: Resources | undefined;\n private created = false;\n private disposed = false;\n private size: PibblRenderLayerSize | undefined;\n private props: Readonly<Props> | undefined;\n private needsRender = true;\n private needsResize = true;\n private inputGated = true;\n private candidate: RenderCandidate<Target> | undefined;\n private committed: ImageBitmap | undefined;\n private committedInteraction:\n PibblRenderLayerInteractionSnapshot<Target> | undefined;\n private committedTargetDescriptors: readonly PibblRenderLayerTarget<Target>[] =\n Object.freeze([]);\n private readonly committedTargets = new Map<\n Target,\n PibblEventTargetRegistration\n >();\n private readonly layerTarget: PibblEventTargetRegistration;\n private committedPolicy: RenderLayerPolicy = Object.freeze({\n missBehavior: \"pass-through\",\n pointerEvents: undefined,\n keyboardFocusable: undefined,\n keyboardNavigationBounds: undefined,\n });\n private resolverTransform = new DOMMatrix();\n private resolverInverseTransform = new DOMMatrix();\n private resolverBounds = new Path2D();\n private resolverSize: PibblRenderLayerSize | undefined;\n private resolutionErrorQueued = false;\n private readonly inputNativeReleases = new Map<\n PibblResolverInputType,\n () => void\n >();\n private readonly resolverEntry: PibblNestedPaintEntry;\n private readonly inputWinner: PibblResolverInputWinner;\n private lastTime: number | undefined;\n\n constructor(\n private readonly definition: PibblRenderLayerDefinition<\n Props,\n Resources,\n Target\n >,\n refs: PibblComponentRefs<any>,\n ) {\n this.refs = refs;\n this.layerTarget = createTarget(this.instance, refs, -1);\n this.inputWinner = {\n eventRoot: this.instance.eventRoot,\n deliver: (type, point, originalEvent, state) =>\n this.deliverInput(type, point, originalEvent, state),\n onPointerCaptureChange: () =>\n this.updateInputNativeOwnership(\n Boolean(this.committedInteraction?.onInput),\n ),\n };\n this.resolverEntry = {\n paintKind: PibblPaintEntryKind.Resolver,\n instance: this.instance,\n bounds: this.resolverBounds,\n transform: this.resolverTransform,\n clippingStack: [],\n resolveLocal: (x, y, output) => this.resolveLocal(x, y, output),\n };\n assertCapability();\n this.canvas = new OffscreenCanvas(1, 1);\n const controller = this;\n this.context = Object.freeze({\n canvas: this.canvas,\n get size() {\n if (!controller.size) {\n throw new Error(\"Render layer size is unavailable before mount.\");\n }\n return controller.size;\n },\n invalidate() {\n controller.invalidate(true);\n },\n });\n refs.teardowns.add(() => this.dispose());\n }\n\n render(\n props: Readonly<Props>,\n size: PibblRenderLayerSize,\n ctx: RenderingContext2D,\n policy: RenderLayerPolicy = this.committedPolicy,\n ): void {\n if (this.disposed) return;\n const initial = !this.created;\n const propsChanged = !initial && !sameProps(this.props, props);\n const sizeChanged = !sameSize(this.size, size);\n const policyChanged = !samePolicy(this.committedPolicy, policy);\n this.size = size;\n this.publishResolver(size);\n if (sizeChanged) {\n this.canvas.width = size.backingWidth;\n this.canvas.height = size.backingHeight;\n this.needsResize = true;\n this.needsRender = true;\n }\n if (initial) {\n const resources = this.definition.create(this.context, props);\n assertSynchronous(resources, \"create\");\n this.resources = resources;\n this.created = true;\n } else {\n try {\n if (propsChanged && this.definition.update) {\n assertSynchronous(\n this.definition.update(this.resources!, props, this.context),\n \"update\",\n );\n }\n if (this.needsResize && this.definition.resize) {\n assertSynchronous(\n this.definition.resize(this.resources!, size, this.context),\n \"resize\",\n );\n this.needsResize = false;\n }\n } catch (error) {\n if (isSynchronousViolation(error)) throw error;\n this.failCandidate(ctx, size, error);\n return;\n }\n }\n if (initial && this.needsResize && this.definition.resize) {\n try {\n assertSynchronous(\n this.definition.resize(this.resources!, size, this.context),\n \"resize\",\n );\n this.needsResize = false;\n } catch (error) {\n if (isSynchronousViolation(error)) throw error;\n this.failCandidate(ctx, size, error);\n return;\n }\n }\n if (!this.definition.resize) this.needsResize = false;\n this.props = snapshotProps(props);\n if (initial || propsChanged || sizeChanged || this.needsRender) {\n const frame = this.createFrame();\n this.needsRender = false;\n try {\n assertSynchronous(\n this.definition.render(this.resources!, frame, this.context),\n \"render\",\n );\n } catch (error) {\n if (isSynchronousViolation(error)) throw error;\n this.failCandidate(ctx, size, error);\n return;\n }\n let interaction: StagedInteraction<Target>;\n try {\n interaction = this.settleInteraction(props);\n } catch (error) {\n if (isSynchronousViolation(error)) throw error;\n this.failCandidate(ctx, size, error);\n return;\n }\n const stagedPolicy = snapshotPolicy(policy);\n const candidate = this.canvas.transferToImageBitmap();\n this.candidate?.bitmap.close();\n const stagedCandidate = {\n bitmap: candidate,\n interaction,\n policy: stagedPolicy,\n };\n this.candidate = stagedCandidate;\n const transaction = GLOBAL_STATE.renderTransaction;\n transaction?.onFinish((success) =>\n this.finishCandidate(stagedCandidate, success),\n );\n if (!transaction) this.finishCandidate(stagedCandidate, true);\n ctx.drawImage(\n candidate,\n 0,\n 0,\n size.backingWidth,\n size.backingHeight,\n 0,\n 0,\n size.width,\n size.height,\n );\n return;\n }\n const transaction = GLOBAL_STATE.renderTransaction;\n transaction?.onFinish((success) => {\n if (success && !this.disposed) {\n if (policyChanged && this.committedInteraction) {\n this.commitInteraction(\n {\n snapshot: this.committedInteraction,\n targets: this.committedTargetDescriptors,\n transform: this.resolverTransform,\n clippingStack: this.resolverEntry.clippingStack,\n },\n snapshotPolicy(policy),\n );\n }\n this.refreshCommittedTargetGeometry();\n }\n });\n if (!transaction && policyChanged && this.committedInteraction) {\n this.commitInteraction(\n {\n snapshot: this.committedInteraction,\n targets: this.committedTargetDescriptors,\n transform: this.resolverTransform,\n clippingStack: this.resolverEntry.clippingStack,\n },\n snapshotPolicy(policy),\n );\n }\n this.drawCommitted(ctx, size);\n }\n\n private publishResolver(size: PibblRenderLayerSize): void {\n if (!sameSize(this.resolverSize, size)) {\n const bounds = new Path2D();\n bounds.rect(0, 0, size.width, size.height);\n this.resolverBounds = bounds;\n this.resolverEntry.bounds = bounds;\n this.resolverSize = size;\n }\n this.resolverTransform = getCurrentWorldTransform();\n this.resolverInverseTransform = this.resolverTransform.inverse();\n this.resolverEntry.transform = this.resolverTransform;\n this.resolverEntry.clippingStack = Array.from(GLOBAL_STATE.clippingStack);\n // Sets preserve insertion order, so refresh the retained entry at its\n // current Canvas paint position on every traversal.\n this.instance.paintEntries.delete(this.resolverEntry);\n this.instance.paintEntries.add(this.resolverEntry);\n }\n\n private drawCommitted(\n ctx: RenderingContext2D,\n size: PibblRenderLayerSize,\n ): void {\n if (this.committed) {\n ctx.drawImage(\n this.committed,\n 0,\n 0,\n size.backingWidth,\n size.backingHeight,\n 0,\n 0,\n size.width,\n size.height,\n );\n }\n }\n\n private createFrame(): PibblRenderLayerFrame {\n const snapshot = GLOBAL_STATE.frameSnapshot;\n const time = snapshot?.logicalTime ?? this.instance.renderTimestamp;\n const delta = this.lastTime === undefined ? 0 : time - this.lastTime;\n this.lastTime = time;\n return Object.freeze({\n frameId: snapshot?.frameId ?? 0,\n time,\n delta,\n deltaSeconds: delta / 1000,\n invalidate: () => this.invalidate(false),\n });\n }\n\n private invalidate(gateInput: boolean): void {\n if (\n this.disposed ||\n this.refs.teardowns.closed ||\n this.instance.mainTeardowns.closed\n )\n return;\n this.needsRender = true;\n if (gateInput) this.inputGated = true;\n requestInstanceRender(this.instance);\n }\n\n private settleInteraction(props: Readonly<Props>): StagedInteraction<Target> {\n const snapshot =\n this.definition.interaction?.settle(this.resources!, props, this.size!) ??\n (MISS_SNAPSHOT as PibblRenderLayerInteractionSnapshot<Target>);\n assertSynchronous(snapshot, \"interaction.settle\");\n const targets: PibblRenderLayerTarget<Target>[] = [];\n const identities = new Set<Target>();\n for (const target of snapshot.targets) {\n if (identities.has(target.target)) {\n throw new Error(\n \"Render layer interaction contains a duplicate target identity.\",\n );\n }\n identities.add(target.target);\n targets.push(\n Object.freeze({\n ...target,\n handlers: target.handlers\n ? Object.freeze({ ...target.handlers })\n : undefined,\n keyboardNavigationBounds: target.keyboardNavigationBounds\n ? Object.freeze({ ...target.keyboardNavigationBounds })\n : undefined,\n }),\n );\n }\n return {\n snapshot,\n targets: Object.freeze(targets),\n transform: this.resolverTransform,\n clippingStack: this.resolverEntry.clippingStack,\n };\n }\n\n private finishCandidate(\n candidate: RenderCandidate<Target>,\n success: boolean,\n ): void {\n if (this.candidate !== candidate) return;\n this.candidate = undefined;\n if (!success || this.disposed) {\n candidate.bitmap.close();\n return;\n }\n this.commitInteraction(candidate.interaction, candidate.policy);\n this.committed?.close();\n this.committed = candidate.bitmap;\n this.resolutionErrorQueued = false;\n this.inputGated = false;\n }\n\n /** Publishes one interaction snapshot only after its bitmap transaction wins. */\n private commitInteraction(\n interaction: StagedInteraction<Target>,\n policy: RenderLayerPolicy,\n ): void {\n const retained = new Set<Target>();\n for (const descriptor of policy.pointerEvents === \"none\"\n ? []\n : interaction.targets) {\n if (descriptor.pointerEvents === \"none\") continue;\n retained.add(descriptor.target);\n let registration = this.committedTargets.get(descriptor.target);\n if (!registration) {\n registration = createTarget(\n this.instance,\n this.refs,\n this.committedTargets.size + 1,\n );\n this.committedTargets.set(descriptor.target, registration);\n }\n updateTarget(\n registration,\n descriptor.handlers ?? {},\n {\n path: new Path2D(),\n cursor: descriptor.cursor,\n keyboardFocusable: descriptor.keyboardFocusable,\n keyboardNavigationBounds: descriptor.keyboardNavigationBounds,\n },\n true,\n );\n this.applyResolverGeometry(registration, interaction);\n this.observeTransactionalFocusTarget(registration);\n }\n for (const [identity, registration] of this.committedTargets) {\n if (retained.has(identity)) continue;\n releaseTarget(registration);\n this.committedTargets.delete(identity);\n }\n if (\n policy.pointerEvents !== \"none\" &&\n policy.missBehavior === \"target-layer\"\n ) {\n updateTarget(\n this.layerTarget,\n { onClick: STRUCTURAL_CLICK_ELIGIBILITY },\n {\n path: new Path2D(),\n keyboardFocusable: policy.keyboardFocusable,\n keyboardNavigationBounds: policy.keyboardNavigationBounds,\n },\n true,\n );\n this.applyResolverGeometry(this.layerTarget, interaction);\n this.observeTransactionalFocusTarget(this.layerTarget);\n } else {\n releaseTarget(this.layerTarget);\n }\n this.committedInteraction = interaction.snapshot;\n this.committedTargetDescriptors = interaction.targets;\n this.committedPolicy = policy;\n this.updateInputNativeOwnership(Boolean(interaction.snapshot.onInput));\n }\n\n private applyResolverGeometry(\n target: PibblEventTargetRegistration,\n interaction: StagedInteraction<Target>,\n ): void {\n if (!target.paintEntry) return;\n target.paintEntry.transform = interaction.transform;\n target.paintEntry.clippingStack = interaction.clippingStack;\n target.owner.paintEntries.delete(target.paintEntry);\n }\n\n private refreshCommittedTargetGeometry(): void {\n const interaction = {\n transform: this.resolverTransform,\n clippingStack: this.resolverEntry.clippingStack,\n } as StagedInteraction<Target>;\n for (const target of this.committedTargets.values()) {\n this.applyResolverGeometry(target, interaction);\n this.instance.eventRoot.focusPolicy?.observeTarget(target);\n this.observeTransactionalFocusTarget(target);\n }\n if (this.layerTarget.live) {\n this.applyResolverGeometry(this.layerTarget, interaction);\n this.instance.eventRoot.focusPolicy?.observeTarget(this.layerTarget);\n this.observeTransactionalFocusTarget(this.layerTarget);\n }\n }\n\n private observeTransactionalFocusTarget(\n target: PibblEventTargetRegistration,\n ): void {\n this.instance.eventRoot.focusPolicy?.observeTransactionalTarget?.(target);\n }\n\n private resolveLocal(\n localX: number,\n localY: number,\n output: PibblHitTestOutput,\n ): void {\n if (this.committedPolicy.pointerEvents === \"none\") {\n output.disposition = PibblHitDisposition.Miss;\n output.target = null;\n return;\n }\n const state = this.resolveWinnerState(localX, localY);\n output.winner = this.inputWinner;\n output.winnerState = state;\n switch (state.hit.kind) {\n case \"miss\":\n if (this.committedPolicy.missBehavior === \"pass-through\") {\n output.disposition = PibblHitDisposition.Miss;\n output.target = null;\n delete output.winner;\n delete output.winnerState;\n } else if (this.committedPolicy.missBehavior === \"block\") {\n output.disposition = PibblHitDisposition.Block;\n output.target = null;\n } else {\n output.disposition = PibblHitDisposition.Target;\n output.target = this.layerTarget.live ? this.layerTarget : null;\n }\n return;\n case \"block\":\n output.disposition = PibblHitDisposition.Block;\n output.target = null;\n return;\n case \"target\": {\n const target = this.committedTargets.get(state.hit.target);\n if (!target?.live) {\n output.disposition = PibblHitDisposition.Block;\n output.target = null;\n output.winnerState = {\n point: state.point,\n hit: Object.freeze({ kind: \"block\" as const }),\n } satisfies WinnerState<Target>;\n this.reportUnknownTarget();\n return;\n }\n output.disposition = PibblHitDisposition.Target;\n output.target = target;\n }\n }\n }\n\n private resolveWinnerState(\n localX: number,\n localY: number,\n ): WinnerState<Target> {\n const point = Object.freeze({ x: localX, y: localY });\n if (this.inputGated || !this.committedInteraction) {\n return { point, hit: Object.freeze({ kind: \"block\" }) };\n }\n const hit = this.committedInteraction.hitTest(point);\n if (hit.kind === \"target\" && !this.committedTargets.has(hit.target)) {\n this.reportUnknownTarget();\n return { point, hit: Object.freeze({ kind: \"block\" }) };\n }\n return { point, hit };\n }\n\n private reportUnknownTarget(): void {\n if (this.resolutionErrorQueued) return;\n this.resolutionErrorQueued = true;\n queueFrameCompletion(() => {\n throw new Error(\n \"Render layer hitTest() returned a target absent from its committed snapshot.\",\n );\n });\n }\n\n private deliverInput(\n type: PibblResolverInputType,\n rootPoint: Readonly<{ x: number; y: number }>,\n originalEvent: PointerEvent | WheelEvent | MouseEvent,\n resolvedState: unknown,\n ): void {\n const snapshot = this.committedInteraction;\n if (!snapshot?.onInput || this.disposed) return;\n let state = resolvedState as WinnerState<Target> | undefined;\n if (!state) {\n const local = this.resolverInverseTransform.transformPoint(\n new DOMPoint(rootPoint.x, rootPoint.y),\n );\n state = this.resolveWinnerState(local.x, local.y);\n }\n snapshot.onInput(\n Object.freeze({\n type,\n point: state.point,\n hit: state.hit,\n originalEvent,\n setPointerCapture: (pointerId: number) =>\n setResolverPointerCapture(this.inputWinner, pointerId),\n releasePointerCapture: (pointerId: number) =>\n releaseResolverPointerCapture(this.inputWinner, pointerId),\n }),\n );\n }\n\n private updateInputNativeOwnership(enabled: boolean): void {\n const required = new Set<PibblResolverInputType>(\n enabled\n ? RESOLVER_INPUT_TYPES\n : hasResolverPointerCapture(this.inputWinner)\n ? RESOLVER_CAPTURE_INPUT_TYPES\n : [],\n );\n for (const [type, release] of this.inputNativeReleases) {\n if (required.has(type)) continue;\n release();\n this.inputNativeReleases.delete(type);\n }\n const hub = this.instance.eventRoot.nativeListeners;\n if (!hub) return;\n for (const type of required) {\n if (!this.inputNativeReleases.has(type)) {\n this.inputNativeReleases.set(type, hub.acquire(type));\n }\n }\n }\n\n private failCandidate(\n ctx: RenderingContext2D,\n size: PibblRenderLayerSize,\n error: unknown,\n ): void {\n this.inputGated = true;\n this.drawCommitted(ctx, size);\n queueFrameCompletion(() => {\n throw error;\n });\n }\n\n private dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n try {\n if (this.created && this.definition.dispose) {\n assertSynchronous(\n this.definition.dispose(this.resources!, this.context),\n \"dispose\",\n );\n }\n } finally {\n this.canvas.width = this.canvas.height = 0;\n this.candidate?.bitmap.close();\n this.committed?.close();\n for (const target of this.committedTargets.values())\n releaseTarget(target);\n this.committedTargets.clear();\n releaseTarget(this.layerTarget);\n releaseResolverInputWinner(this.inputWinner);\n this.updateInputNativeOwnership(false);\n this.candidate = undefined;\n this.committed = undefined;\n this.committedInteraction = undefined;\n }\n }\n}\n\nfunction assertCapability(): void {\n if (\n typeof OffscreenCanvas !== \"function\" ||\n typeof OffscreenCanvas.prototype.transferToImageBitmap !== \"function\"\n ) {\n throw new Error(\n \"defineRenderLayer requires OffscreenCanvas with transferToImageBitmap().\",\n );\n }\n}\n\nfunction sameSize(\n a: PibblRenderLayerSize | undefined,\n b: PibblRenderLayerSize,\n): boolean {\n return (\n !!a &&\n a.width === b.width &&\n a.height === b.height &&\n a.backingWidth === b.backingWidth &&\n a.backingHeight === b.backingHeight\n );\n}\n\nfunction isSynchronousViolation(error: unknown): boolean {\n return error instanceof SynchronousLifecycleError;\n}\n\nfunction snapshotProps<Props>(props: Readonly<Props>): Readonly<Props> {\n return Object.freeze({ ...props });\n}\n\nfunction sameProps<Props>(\n a: Readonly<Props> | undefined,\n b: Readonly<Props>,\n): boolean {\n if (!a) return false;\n const aKeys = Reflect.ownKeys(a);\n const bKeys = Reflect.ownKeys(b as object);\n return (\n aKeys.length === bKeys.length &&\n aKeys.every(\n (key) =>\n Object.prototype.hasOwnProperty.call(b, key) &&\n Object.is(a[key as keyof Props], b[key as keyof Props]),\n )\n );\n}\n\nfunction snapshotPolicy(policy: RenderLayerPolicy): RenderLayerPolicy {\n return Object.freeze({\n missBehavior: policy.missBehavior,\n pointerEvents: policy.pointerEvents,\n keyboardFocusable: policy.keyboardFocusable,\n keyboardNavigationBounds: policy.keyboardNavigationBounds\n ? Object.freeze({\n ...policy.keyboardNavigationBounds,\n })\n : undefined,\n });\n}\n\nfunction samePolicy(a: RenderLayerPolicy, b: RenderLayerPolicy): boolean {\n return (\n a.missBehavior === b.missBehavior &&\n a.pointerEvents === b.pointerEvents &&\n a.keyboardFocusable === b.keyboardFocusable &&\n a.keyboardNavigationBounds?.x === b.keyboardNavigationBounds?.x &&\n a.keyboardNavigationBounds?.y === b.keyboardNavigationBounds?.y &&\n a.keyboardNavigationBounds?.width === b.keyboardNavigationBounds?.width &&\n a.keyboardNavigationBounds?.height === b.keyboardNavigationBounds?.height\n );\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { committedInstanceRootTransform, snapshotLayoutGeometry, stageLayoutTargetGeometry, stageLayoutTargetRetirement } from '../layout/geometry-publication.js';\nimport { GLOBAL_STATE, getCurrentPibblInstance } from \"../global-state.js\";\nimport { registerLayoutSuspensionResource, unregisterLayoutSuspensionResource } from \"../layout/participation.js\";\nimport { getCurrentWorldTransform } from \"../render-target.js\";\nimport {\n queueFrameCompletion,\n requestInstanceRender,\n} from \"../scheduler/realm-scheduler.js\";\nimport type { PibblComponentRefs, RenderingContext2D } from \"../types.js\";\nimport type { PibblPointerEvents } from \"../events/types.js\";\nimport {\n PibblHitDisposition,\n PibblPaintEntryKind,\n type PibblHitTestOutput,\n type PibblNestedPaintEntry,\n} from \"../events/paint-entry.js\";\nimport {\n createTarget,\n releaseTarget,\n updateTarget,\n normalizeHandlers,\n prepareTargetUpdate,\n type PibblEventTargetRegistration,\n} from \"../events/registrations.js\";\nimport {\n hasResolverPointerCapture,\n releaseResolverInputWinner,\n releaseResolverPointerCapture,\n setResolverPointerCapture,\n type PibblResolverInputType,\n type PibblResolverInputWinner,\n} from \"../events/resolver-input.js\";\nimport type {\n PibblRenderLayerContext,\n PibblRenderLayerDefinition,\n PibblRenderLayerFrame,\n PibblRenderLayerHit,\n PibblRenderLayerInteractionSnapshot,\n PibblRenderLayerSize,\n PibblRenderLayerTarget,\n} from \"./types.js\";\n\nclass SynchronousLifecycleError extends TypeError {}\n\ninterface StagedInteraction<Target extends object> {\n readonly snapshot: PibblRenderLayerInteractionSnapshot<Target>;\n readonly targets: readonly PibblRenderLayerTarget<Target>[];\n readonly transform: DOMMatrix;\n readonly clippingStack: PibblNestedPaintEntry[\"clippingStack\"];\n}\n\ninterface RenderCandidate<Target extends object> {\n readonly bitmap: ImageBitmap;\n readonly interaction: StagedInteraction<Target>;\n readonly policy: RenderLayerPolicy;\n prepared?: PreparedInteraction<Target>;\n}\n\ninterface PreparedInteraction<Target extends object> {\n readonly interaction: StagedInteraction<Target>;\n readonly policy: RenderLayerPolicy;\n readonly targets: Map<Target, PibblEventTargetRegistration>;\n readonly created: PibblEventTargetRegistration[];\n readonly retired: PibblEventTargetRegistration[];\n readonly registrations: ReturnType<typeof prepareTargetUpdate>[];\n readonly inputLeases: Map<PibblResolverInputType, () => void>;\n readonly addedInputLeases: (() => void)[];\n previousInputLeases?: Map<PibblResolverInputType, () => void>;\n settled?: boolean;\n adopted?: boolean;\n readonly inverse: DOMMatrix;\n readonly layerEnabled: boolean;\n}\n\ninterface RenderLayerPolicy {\n readonly missBehavior: \"pass-through\" | \"block\" | \"target-layer\";\n readonly pointerEvents: PibblPointerEvents | undefined;\n readonly keyboardFocusable: boolean | undefined;\n readonly keyboardNavigationBounds:\n | Readonly<{\n x: number;\n y: number;\n width: number;\n height: number;\n }>\n | undefined;\n}\n\ninterface WinnerState<Target extends object> {\n readonly generation: number;\n readonly geometryGeneration: number;\n readonly point: Readonly<{ x: number; y: number }>;\n readonly hit: PibblRenderLayerHit<Target>;\n}\n\nconst MISS_SNAPSHOT: PibblRenderLayerInteractionSnapshot<object> = Object.freeze({\n targets: Object.freeze([]),\n hitTest: () => Object.freeze({ kind: \"miss\" as const }),\n});\n\nconst RESOLVER_INPUT_TYPES = Object.freeze([\n \"pointerdown\",\n \"pointermove\",\n \"pointerup\",\n \"pointercancel\",\n \"wheel\",\n \"contextmenu\",\n \"click\",\n] as const);\n\nconst RESOLVER_CAPTURE_INPUT_TYPES = Object.freeze([\n \"pointermove\",\n \"pointerup\",\n \"pointercancel\",\n] as const);\n\n// The private target deliberately owns no user callback. This eligibility\n// marker lets the shared keyboard default dispatch its click through the\n// component's one structural listener.\nconst STRUCTURAL_CLICK_ELIGIBILITY = () => {};\n\nexport function assertSynchronous(value: unknown, callback: string): void {\n if (value && typeof (value as { then?: unknown }).then === \"function\") {\n throw new SynchronousLifecycleError(\n `defineRenderLayer ${callback}() must be synchronous.`,\n );\n }\n}\n\nexport class RenderLayerController<Props, Resources, Target extends object> {\n private readonly instance = getCurrentPibblInstance();\n private readonly refs: PibblComponentRefs<any>;\n private readonly canvas: OffscreenCanvas;\n private readonly context: PibblRenderLayerContext;\n private resources: Resources | undefined;\n private created = false;\n private disposed = false;\n private size: PibblRenderLayerSize | undefined;\n private props: Readonly<Props> | undefined;\n private needsRender = true;\n private needsResize = true;\n private inputDeliveryGated = false;\n private inputGated = true;\n private candidate: RenderCandidate<Target> | undefined;\n private committed: ImageBitmap | undefined;\n private committedInteraction:\n PibblRenderLayerInteractionSnapshot<Target> | undefined;\n private committedTargetDescriptors: readonly PibblRenderLayerTarget<Target>[] =\n Object.freeze([]);\n private committedTargets = new Map<\n Target,\n PibblEventTargetRegistration\n >();\n private readonly layerTarget: PibblEventTargetRegistration;\n private committedPolicy: RenderLayerPolicy = Object.freeze({\n missBehavior: \"pass-through\",\n pointerEvents: undefined,\n keyboardFocusable: undefined,\n keyboardNavigationBounds: undefined,\n });\n private resolverTransform = new DOMMatrix();\n private resolverInverseTransform = new DOMMatrix();\n private resolverBounds = new Path2D();\n private resolverSize: PibblRenderLayerSize | undefined;\n private interactionGeneration = 0;\n private resolutionErrorQueued = false;\n private inputNativeReleases = new Map<\n PibblResolverInputType,\n () => void\n >();\n private readonly resolverEntry: PibblNestedPaintEntry;\n private readonly inputWinner: PibblResolverInputWinner;\n private lastTime: number | undefined;\n\n constructor(\n private readonly definition: PibblRenderLayerDefinition<\n Props,\n Resources,\n Target\n >,\n refs: PibblComponentRefs<any>,\n ) {\n this.refs = refs;\n this.layerTarget = createTarget(this.instance, refs, -1);\n this.inputWinner = {\n eventRoot: this.instance.eventRoot,\n deliver: (type, point, originalEvent, state) =>\n this.deliverInput(type, point, originalEvent, state),\n onPointerCaptureChange: () =>\n this.updateInputNativeOwnership(\n Boolean(this.committedInteraction?.onInput),\n ),\n };\n this.resolverEntry = {\n paintKind: PibblPaintEntryKind.Resolver,\n instance: this.instance,\n bounds: this.resolverBounds,\n transform: this.resolverTransform,\n clippingStack: [],\n resolveLocal: (x, y, output) => this.resolveLocal(x, y, output),\n };\n const suspensionResource = {\n suspendLayout: () => this.instance.paintEntries.delete(this.resolverEntry),\n };\n registerLayoutSuspensionResource(refs, suspensionResource);\n assertCapability();\n this.canvas = new OffscreenCanvas(1, 1);\n const controller = this;\n this.context = Object.freeze({\n canvas: this.canvas,\n get size() {\n if (!controller.size) {\n throw new Error(\"Render layer size is unavailable before mount.\");\n }\n return controller.size;\n },\n invalidate() {\n controller.invalidate(true);\n },\n });\n refs.teardowns.add(() => {\n unregisterLayoutSuspensionResource(refs, suspensionResource);\n this.dispose();\n });\n }\n\n render(\n props: Readonly<Props>,\n size: PibblRenderLayerSize,\n ctx: RenderingContext2D,\n policy: RenderLayerPolicy = this.committedPolicy,\n ): void {\n if (this.disposed) return;\n const initial = !this.created;\n const propsChanged = !initial && !sameProps(this.props, props);\n const sizeChanged = !sameSize(this.size, size);\n const policyChanged = !samePolicy(this.committedPolicy, policy);\n // Renderer callbacks may mutate shared scene resources. No old picker can\n // safely inspect those resources until its candidate generation settles.\n if (initial || propsChanged || sizeChanged || this.needsRender) { this.inputGated = true; this.inputDeliveryGated = true; }\n this.size = size;\n this.publishResolver(size);\n if (sizeChanged) {\n this.canvas.width = size.backingWidth;\n this.canvas.height = size.backingHeight;\n this.needsResize = true;\n this.needsRender = true;\n }\n if (initial) {\n const resources = this.definition.create(this.context, props);\n assertSynchronous(resources, \"create\");\n this.resources = resources;\n this.created = true;\n } else {\n try {\n if (propsChanged && this.definition.update) {\n assertSynchronous(\n this.definition.update(this.resources!, props, this.context),\n \"update\",\n );\n }\n if (this.needsResize && this.definition.resize) {\n assertSynchronous(\n this.definition.resize(this.resources!, size, this.context),\n \"resize\",\n );\n this.needsResize = false;\n }\n } catch (error) {\n if (isSynchronousViolation(error)) throw error;\n this.failCandidate(ctx, size, error);\n return;\n }\n }\n if (initial && this.needsResize && this.definition.resize) {\n try {\n assertSynchronous(\n this.definition.resize(this.resources!, size, this.context),\n \"resize\",\n );\n this.needsResize = false;\n } catch (error) {\n if (isSynchronousViolation(error)) throw error;\n this.failCandidate(ctx, size, error);\n return;\n }\n }\n if (!this.definition.resize) this.needsResize = false;\n this.props = snapshotProps(props);\n if (initial || propsChanged || sizeChanged || this.needsRender) {\n const frame = this.createFrame();\n this.needsRender = false;\n try {\n assertSynchronous(\n this.definition.render(this.resources!, frame, this.context),\n \"render\",\n );\n } catch (error) {\n if (isSynchronousViolation(error)) throw error;\n this.failCandidate(ctx, size, error);\n return;\n }\n let interaction: StagedInteraction<Target>;\n try {\n interaction = this.settleInteraction(props);\n } catch (error) {\n if (isSynchronousViolation(error)) throw error;\n this.failCandidate(ctx, size, error);\n return;\n }\n const stagedPolicy = snapshotPolicy(policy);\n const candidate = this.canvas.transferToImageBitmap();\n this.candidate?.bitmap.close();\n if (this.candidate?.prepared) this.finishPrepared(this.candidate.prepared, false);\n const stagedCandidate: RenderCandidate<Target> = {\n bitmap: candidate,\n interaction,\n policy: stagedPolicy,\n };\n this.candidate = stagedCandidate;\n const transaction = GLOBAL_STATE.renderTransaction;\n if (transaction?.onAdopt) {\n try { stagedCandidate.prepared = this.prepareInteraction(interaction, stagedPolicy); }\n catch (error) { this.finishCandidate(stagedCandidate, false); throw error; }\n transaction.onAdopt(() => this.finishCandidate(stagedCandidate, true));\n transaction.onFinish(success => {\n if (!success) {\n this.finishCandidate(stagedCandidate, false);\n }\n else if (stagedCandidate.prepared) this.finishPrepared(stagedCandidate.prepared, true);\n });\n } else {\n transaction?.onFinish(success => this.finishCandidate(stagedCandidate, success));\n if (!transaction) this.finishCandidate(stagedCandidate, true);\n }\n ctx.drawImage(\n candidate,\n 0,\n 0,\n size.backingWidth,\n size.backingHeight,\n 0,\n 0,\n size.width,\n size.height,\n );\n return;\n }\n const transaction = GLOBAL_STATE.renderTransaction;\n if (transaction?.onAdopt && this.committedInteraction) {\n const prepared = this.prepareInteraction({ snapshot: this.committedInteraction, targets: this.committedTargetDescriptors,\n transform: this.resolverTransform, clippingStack: this.resolverEntry.clippingStack }, snapshotPolicy(policy));\n transaction.onAdopt(() => { if (!this.disposed) this.adoptInteraction(prepared); });\n transaction.onFinish(success => {\n this.finishPrepared(prepared, success);\n });\n } else {\n transaction?.onFinish(success => {\n if (success && !this.disposed) {\n if (policyChanged && this.committedInteraction) this.commitInteraction({ snapshot: this.committedInteraction,\n targets: this.committedTargetDescriptors, transform: this.resolverTransform, clippingStack: this.resolverEntry.clippingStack }, snapshotPolicy(policy));\n this.refreshCommittedTargetGeometry();\n }\n });\n if (!transaction && policyChanged && this.committedInteraction) this.commitInteraction({ snapshot: this.committedInteraction,\n targets: this.committedTargetDescriptors, transform: this.resolverTransform, clippingStack: this.resolverEntry.clippingStack }, snapshotPolicy(policy));\n }\n this.drawCommitted(ctx, size);\n }\n\n private publishResolver(size: PibblRenderLayerSize): void {\n if (!sameSize(this.resolverSize, size)) {\n const bounds = new Path2D();\n bounds.rect(0, 0, size.width, size.height);\n this.resolverBounds = bounds;\n this.resolverEntry.bounds = bounds;\n this.resolverSize = size;\n }\n this.resolverTransform = getCurrentWorldTransform();\n this.resolverEntry.transform = this.resolverTransform;\n this.resolverEntry.clippingStack = Array.from(GLOBAL_STATE.clippingStack);\n // Sets preserve insertion order, so refresh the retained entry at its\n // current Canvas paint position on every traversal.\n this.instance.paintEntries.delete(this.resolverEntry);\n this.instance.paintEntries.add(this.resolverEntry);\n }\n\n private drawCommitted(\n ctx: RenderingContext2D,\n size: PibblRenderLayerSize,\n ): void {\n if (this.committed) {\n ctx.drawImage(\n this.committed,\n 0,\n 0,\n size.backingWidth,\n size.backingHeight,\n 0,\n 0,\n size.width,\n size.height,\n );\n }\n }\n\n private createFrame(): PibblRenderLayerFrame {\n const snapshot = GLOBAL_STATE.frameSnapshot;\n const time = snapshot?.logicalTime ?? this.instance.renderTimestamp;\n const delta = this.lastTime === undefined ? 0 : time - this.lastTime;\n this.lastTime = time;\n return Object.freeze({\n frameId: snapshot?.frameId ?? 0,\n time,\n delta,\n deltaSeconds: delta / 1000,\n invalidate: () => this.invalidate(false),\n });\n }\n\n private invalidate(gateInput: boolean): void {\n if (\n this.disposed ||\n this.refs.teardowns.closed ||\n this.instance.mainTeardowns.closed\n )\n return;\n this.needsRender = true;\n if (gateInput) this.inputGated = true;\n requestInstanceRender(this.instance);\n }\n\n private settleInteraction(props: Readonly<Props>): StagedInteraction<Target> {\n const snapshot =\n this.definition.interaction?.settle(this.resources!, props, this.size!) ??\n (MISS_SNAPSHOT as PibblRenderLayerInteractionSnapshot<Target>);\n assertSynchronous(snapshot, \"interaction.settle\");\n const targets: PibblRenderLayerTarget<Target>[] = [];\n const identities = new Set<Target>();\n for (const target of snapshot.targets) {\n if (identities.has(target.target)) {\n throw new Error(\n \"Render layer interaction contains a duplicate target identity.\",\n );\n }\n identities.add(target.target);\n targets.push(\n Object.freeze({\n ...target,\n handlers: target.handlers\n ? Object.freeze({ ...target.handlers })\n : undefined,\n keyboardNavigationBounds: target.keyboardNavigationBounds\n ? Object.freeze({ ...target.keyboardNavigationBounds })\n : undefined,\n }),\n );\n }\n return {\n snapshot,\n targets: Object.freeze(targets),\n transform: this.resolverTransform,\n clippingStack: this.resolverEntry.clippingStack,\n };\n }\n\n private finishCandidate(\n candidate: RenderCandidate<Target>,\n success: boolean,\n ): void {\n if (this.candidate !== candidate) return;\n if (!success || this.disposed) {\n this.candidate = undefined;\n this.needsRender = true;\n this.inputGated = true;\n candidate.bitmap.close();\n if (candidate.prepared) this.finishPrepared(candidate.prepared, false);\n return;\n }\n if (candidate.prepared) this.adoptInteraction(candidate.prepared);\n else this.commitInteraction(candidate.interaction, candidate.policy);\n this.committed?.close();\n this.committed = candidate.bitmap;\n this.candidate = undefined;\n this.resolutionErrorQueued = false;\n this.inputGated = false;\n this.inputDeliveryGated = false;\n }\n\n /** Prepares descriptors without mutating the current target identities or handlers. */\n private prepareInteraction(interaction: StagedInteraction<Target>, policy: RenderLayerPolicy): PreparedInteraction<Target> {\n const targets = new Map<Target, PibblEventTargetRegistration>();\n const created: PibblEventTargetRegistration[] = [];\n const registrations: PreparedInteraction<Target>['registrations'] = [];\n const inputLeases = new Map<PibblResolverInputType, () => void>();\n const addedInputLeases: (() => void)[] = [];\n const transaction = GLOBAL_STATE.renderTransaction ?? this.instance.eventRoot.renderTransaction;\n const stage = (target: PibblEventTargetRegistration, bounds: PibblRenderLayerTarget<Target>['keyboardNavigationBounds'], focusable: boolean) => {\n if (transaction) stageLayoutTargetGeometry(transaction, target, { bounds, transform: interaction.transform });\n this.instance.eventRoot.focusPolicy?.observeTransactionalTarget?.(target, focusable);\n };\n try {\n if (policy.pointerEvents !== 'none') for (const descriptor of interaction.targets) {\n if (descriptor.pointerEvents === 'none') continue;\n let target = this.committedTargets.get(descriptor.target);\n if (!target) { target = createTarget(this.instance, this.refs, this.committedTargets.size + created.length + 1); created.push(target); }\n targets.set(descriptor.target, target);\n registrations.push(prepareTargetUpdate(target, descriptor.handlers ?? {}, {\n path: new Path2D(), cursor: descriptor.cursor, keyboardFocusable: descriptor.keyboardFocusable,\n keyboardNavigationBounds: descriptor.keyboardNavigationBounds,\n }, interaction.transform, interaction.clippingStack));\n const handlers = normalizeHandlers(descriptor.handlers ?? {});\n stage(target, descriptor.keyboardNavigationBounds, descriptor.keyboardFocusable ?? Boolean(handlers.click || handlers.keydown || handlers.keyup));\n }\n const layerEnabled = policy.pointerEvents !== 'none' && policy.missBehavior === 'target-layer';\n stage(this.layerTarget, policy.keyboardNavigationBounds, layerEnabled && (policy.keyboardFocusable ?? true));\n if (layerEnabled) registrations.push(prepareTargetUpdate(this.layerTarget, { onClick: STRUCTURAL_CLICK_ELIGIBILITY }, {\n path: new Path2D(), keyboardFocusable: policy.keyboardFocusable, keyboardNavigationBounds: policy.keyboardNavigationBounds,\n }, interaction.transform, interaction.clippingStack));\n const hub = this.instance.eventRoot.nativeListeners;\n const types = interaction.snapshot.onInput ? RESOLVER_INPUT_TYPES : hasResolverPointerCapture(this.inputWinner) ? RESOLVER_CAPTURE_INPUT_TYPES : [];\n if (hub) for (const type of types) {\n let lease = this.inputNativeReleases.get(type);\n if (!lease) { lease = hub.acquire(type); addedInputLeases.push(lease); }\n inputLeases.set(type, lease);\n }\n const retired: PibblEventTargetRegistration[] = [];\n for (const [identity, target] of this.committedTargets) if (!targets.has(identity)) retired.push(target);\n if (!layerEnabled && this.layerTarget.live) retired.push(this.layerTarget);\n if (transaction) for (const target of retired) stageLayoutTargetRetirement(transaction, target);\n return { interaction, policy, targets, created, retired, registrations, inputLeases, addedInputLeases, layerEnabled, inverse: interaction.transform.inverse() };\n } catch (error) {\n const errors: unknown[] = [error];\n const release = (callback: () => void) => { try { callback(); } catch (releaseError) { errors.push(releaseError); } };\n for (const registration of registrations) release(() => registration.finish());\n for (const lease of addedInputLeases) release(lease);\n for (const target of created) release(() => releaseTarget(target));\n if (errors.length > 1) throw new AggregateError(errors, 'Render layer interaction preparation failed.', { cause: error });\n throw error;\n }\n }\n\n private adoptInteraction(prepared: PreparedInteraction<Target>): void {\n const { interaction, policy } = prepared;\n for (const registration of prepared.registrations) registration.adopt();\n prepared.previousInputLeases = this.inputNativeReleases;\n this.inputNativeReleases = prepared.inputLeases;\n this.committedTargets = prepared.targets;\n this.committedInteraction = interaction.snapshot;\n this.committedTargetDescriptors = interaction.targets;\n this.committedPolicy = policy;\n this.resolverInverseTransform = prepared.inverse;\n this.interactionGeneration++;\n prepared.adopted = true;\n }\n\n private finishPrepared(prepared: PreparedInteraction<Target>, success: boolean): void {\n if (prepared.settled) return;\n prepared.settled = true;\n success = success && prepared.adopted === true;\n const errors: unknown[] = [];\n const finish = (callback: () => void) => { try { callback(); } catch (error) { errors.push(error); } };\n for (const registration of prepared.registrations) finish(() => registration.finish());\n if (prepared.previousInputLeases) {\n for (const [type, release] of prepared.previousInputLeases) if (!prepared.inputLeases.has(type)) finish(release);\n } else if (!success) for (const release of prepared.addedInputLeases) finish(release);\n for (const target of success ? prepared.retired : prepared.created) finish(() => releaseTarget(target));\n if (success) for (const registration of prepared.registrations) finish(() => registration.notify());\n if (errors.length === 1) throw errors[0];\n if (errors.length) throw new AggregateError(errors, 'Render layer registration completion failed.');\n }\n\n /** Immediate fallback for callers without a root transaction. */\n private commitInteraction(interaction: StagedInteraction<Target>, policy: RenderLayerPolicy): void {\n const prepared = this.prepareInteraction(interaction, policy);\n this.adoptInteraction(prepared);\n this.finishPrepared(prepared, true);\n }\n\n private applyResolverGeometry(\n target: PibblEventTargetRegistration,\n interaction: StagedInteraction<Target>,\n ): void {\n if (!target.paintEntry) return;\n target.paintEntry.transform = interaction.transform;\n target.paintEntry.clippingStack = interaction.clippingStack;\n target.owner.paintEntries.delete(target.paintEntry);\n }\n\n private refreshCommittedTargetGeometry(): void {\n const interaction = {\n transform: this.resolverTransform,\n clippingStack: this.resolverEntry.clippingStack,\n } as StagedInteraction<Target>;\n if (this.committedPolicy.pointerEvents !== \"none\") {\n for (const descriptor of this.committedTargetDescriptors) {\n if (descriptor.pointerEvents === \"none\") continue;\n const target = this.committedTargets.get(descriptor.target);\n if (!target) continue;\n // Hidden participation releases the registration while retaining this\n // controller's committed bitmap and interaction snapshot. Re-register\n // it on the first visible traversal so it regains paint, target, and\n // focus ownership without forcing the external renderer to repaint.\n if (!target.live) {\n updateTarget(\n target,\n descriptor.handlers ?? {},\n {\n path: new Path2D(),\n cursor: descriptor.cursor,\n keyboardFocusable: descriptor.keyboardFocusable,\n keyboardNavigationBounds: descriptor.keyboardNavigationBounds,\n },\n true,\n );\n }\n this.applyResolverGeometry(target, interaction);\n this.instance.eventRoot.focusPolicy?.observeTarget(target);\n this.observeTransactionalFocusTarget(target);\n }\n }\n if (\n this.committedPolicy.pointerEvents !== \"none\" &&\n this.committedPolicy.missBehavior === \"target-layer\" &&\n !this.layerTarget.live\n ) {\n updateTarget(\n this.layerTarget,\n { onClick: STRUCTURAL_CLICK_ELIGIBILITY },\n {\n path: new Path2D(),\n keyboardFocusable: this.committedPolicy.keyboardFocusable,\n keyboardNavigationBounds:\n this.committedPolicy.keyboardNavigationBounds,\n },\n true,\n );\n }\n if (this.layerTarget.live) {\n this.applyResolverGeometry(this.layerTarget, interaction);\n this.instance.eventRoot.focusPolicy?.observeTarget(this.layerTarget);\n this.observeTransactionalFocusTarget(this.layerTarget);\n }\n }\n\n private observeTransactionalFocusTarget(\n target: PibblEventTargetRegistration,\n ): void {\n this.instance.eventRoot.focusPolicy?.observeTransactionalTarget?.(target);\n }\n\n private resolveLocal(\n localX: number,\n localY: number,\n output: PibblHitTestOutput,\n ): void {\n if (this.committedPolicy.pointerEvents === \"none\") {\n output.disposition = PibblHitDisposition.Miss;\n output.target = null;\n return;\n }\n const state = this.resolveWinnerState(localX, localY);\n if ((state.generation !== this.interactionGeneration || state.geometryGeneration !== snapshotLayoutGeometry(this.instance).generation) || this.disposed || this.inputDeliveryGated) {\n output.disposition = PibblHitDisposition.Block;\n output.target = null;\n delete output.winner;\n delete output.winnerState;\n return;\n }\n output.winner = this.inputWinner;\n output.winnerState = state;\n switch (state.hit.kind) {\n case \"miss\":\n if (this.committedPolicy.missBehavior === \"pass-through\") {\n output.disposition = PibblHitDisposition.Miss;\n output.target = null;\n delete output.winner;\n delete output.winnerState;\n } else if (this.committedPolicy.missBehavior === \"block\") {\n output.disposition = PibblHitDisposition.Block;\n output.target = null;\n } else {\n output.disposition = PibblHitDisposition.Target;\n output.target = this.layerTarget.live ? this.layerTarget : null;\n }\n return;\n case \"block\":\n output.disposition = PibblHitDisposition.Block;\n output.target = null;\n return;\n case \"target\": {\n const target = this.committedTargets.get(state.hit.target);\n if (!target?.live) {\n output.disposition = PibblHitDisposition.Block;\n output.target = null;\n output.winnerState = {\n point: state.point, generation: state.generation, geometryGeneration: state.geometryGeneration,\n hit: Object.freeze({ kind: \"block\" as const }),\n } satisfies WinnerState<Target>;\n this.reportUnknownTarget();\n return;\n }\n output.disposition = PibblHitDisposition.Target;\n output.target = target;\n }\n }\n }\n\n private resolveWinnerState(\n localX: number,\n localY: number,\n ): WinnerState<Target> {\n const point = Object.freeze({ x: localX, y: localY });\n const generation = this.interactionGeneration;\n const geometryGeneration = snapshotLayoutGeometry(this.instance).generation;\n if (this.inputGated || !this.committedInteraction) {\n return { point, generation, geometryGeneration, hit: Object.freeze({ kind: \"block\" }) };\n }\n const hit = this.committedInteraction.hitTest(point);\n if ((generation !== this.interactionGeneration || geometryGeneration !== snapshotLayoutGeometry(this.instance).generation) || this.disposed || this.inputGated) {\n return { point, generation, geometryGeneration, hit: Object.freeze({ kind: \"block\" }) };\n }\n if (hit.kind === \"target\" && !this.committedTargets.has(hit.target)) {\n this.reportUnknownTarget();\n return { point, generation, geometryGeneration, hit: Object.freeze({ kind: \"block\" }) };\n }\n return { point, hit, generation, geometryGeneration };\n }\n\n private reportUnknownTarget(): void {\n if (this.resolutionErrorQueued) return;\n this.resolutionErrorQueued = true;\n queueFrameCompletion(() => {\n throw new Error(\n \"Render layer hitTest() returned a target absent from its committed snapshot.\",\n );\n });\n }\n\n private deliverInput(\n type: PibblResolverInputType,\n rootPoint: Readonly<{ x: number; y: number }>,\n originalEvent: PointerEvent | WheelEvent | MouseEvent,\n resolvedState: unknown,\n ): void {\n const snapshot = this.committedInteraction;\n if (!snapshot?.onInput || this.disposed || this.inputDeliveryGated) return;\n let state = resolvedState as WinnerState<Target> | undefined;\n // A reentrant render between picking and delivery must not pair an old hit\n // with a newer renderer callback or coordinate frame.\n if (state && (state.generation !== this.interactionGeneration || state.geometryGeneration !== snapshotLayoutGeometry(this.instance).generation)) return;\n if (!state) {\n const bridge = committedInstanceRootTransform(this.instance);\n if (!bridge) return;\n const ownerPoint = bridge.inverse().transformPoint(new DOMPoint(rootPoint.x, rootPoint.y));\n const local = this.resolverInverseTransform.transformPoint(ownerPoint);\n state = this.resolveWinnerState(local.x, local.y);\n }\n if (this.inputDeliveryGated || (state.generation !== this.interactionGeneration || state.geometryGeneration !== snapshotLayoutGeometry(this.instance).generation)) return;\n snapshot.onInput(\n Object.freeze({\n type,\n point: state.point,\n hit: state.hit,\n originalEvent,\n setPointerCapture: (pointerId: number) =>\n setResolverPointerCapture(this.inputWinner, pointerId),\n releasePointerCapture: (pointerId: number) =>\n releaseResolverPointerCapture(this.inputWinner, pointerId),\n }),\n );\n }\n\n private updateInputNativeOwnership(enabled: boolean): void {\n const required = new Set<PibblResolverInputType>(\n enabled\n ? RESOLVER_INPUT_TYPES\n : hasResolverPointerCapture(this.inputWinner)\n ? RESOLVER_CAPTURE_INPUT_TYPES\n : [],\n );\n for (const [type, release] of this.inputNativeReleases) {\n if (required.has(type)) continue;\n release();\n this.inputNativeReleases.delete(type);\n }\n const hub = this.instance.eventRoot.nativeListeners;\n if (!hub) return;\n for (const type of required) {\n if (!this.inputNativeReleases.has(type)) {\n this.inputNativeReleases.set(type, hub.acquire(type));\n }\n }\n }\n\n private failCandidate(\n ctx: RenderingContext2D,\n size: PibblRenderLayerSize,\n error: unknown,\n ): void {\n this.inputGated = true;\n this.drawCommitted(ctx, size);\n queueFrameCompletion(() => {\n throw error;\n });\n }\n\n private dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n const errors: unknown[] = [];\n const release = (callback: () => void) => { try { callback(); } catch (error) { errors.push(error); } };\n if (this.created && this.definition.dispose) release(() => assertSynchronous(\n this.definition.dispose!(this.resources!, this.context), 'dispose'));\n release(() => { this.canvas.width = this.canvas.height = 0; });\n release(() => this.candidate?.bitmap.close());\n if (this.candidate?.prepared) release(() => this.finishPrepared(this.candidate!.prepared!, false));\n release(() => this.committed?.close());\n for (const target of this.committedTargets.values()) release(() => releaseTarget(target));\n this.committedTargets.clear();\n release(() => releaseTarget(this.layerTarget));\n release(() => releaseResolverInputWinner(this.inputWinner));\n for (const lease of this.inputNativeReleases.values()) release(lease);\n this.inputNativeReleases.clear();\n this.candidate = undefined;\n this.committed = undefined;\n this.committedInteraction = undefined;\n if (errors.length === 1) throw errors[0];\n if (errors.length) throw new AggregateError(errors, 'Render layer disposal failed.');\n }\n}\n\nfunction assertCapability(): void {\n if (\n typeof OffscreenCanvas !== \"function\" ||\n typeof OffscreenCanvas.prototype.transferToImageBitmap !== \"function\"\n ) {\n throw new Error(\n \"defineRenderLayer requires OffscreenCanvas with transferToImageBitmap().\",\n );\n }\n}\n\nfunction sameSize(\n a: PibblRenderLayerSize | undefined,\n b: PibblRenderLayerSize,\n): boolean {\n return (\n !!a &&\n a.width === b.width &&\n a.height === b.height &&\n a.backingWidth === b.backingWidth &&\n a.backingHeight === b.backingHeight\n );\n}\n\nfunction isSynchronousViolation(error: unknown): boolean {\n return error instanceof SynchronousLifecycleError;\n}\n\nfunction snapshotProps<Props>(props: Readonly<Props>): Readonly<Props> {\n return Object.freeze({ ...props });\n}\n\nfunction sameProps<Props>(\n a: Readonly<Props> | undefined,\n b: Readonly<Props>,\n): boolean {\n if (!a) return false;\n const aKeys = Reflect.ownKeys(a);\n const bKeys = Reflect.ownKeys(b as object);\n return (\n aKeys.length === bKeys.length &&\n aKeys.every(\n (key) =>\n Object.prototype.hasOwnProperty.call(b, key) &&\n Object.is(a[key as keyof Props], b[key as keyof Props]),\n )\n );\n}\n\nfunction snapshotPolicy(policy: RenderLayerPolicy): RenderLayerPolicy {\n return Object.freeze({\n missBehavior: policy.missBehavior,\n pointerEvents: policy.pointerEvents,\n keyboardFocusable: policy.keyboardFocusable,\n keyboardNavigationBounds: policy.keyboardNavigationBounds\n ? Object.freeze({\n ...policy.keyboardNavigationBounds,\n })\n : undefined,\n });\n}\n\nfunction samePolicy(a: RenderLayerPolicy, b: RenderLayerPolicy): boolean {\n return (\n a.missBehavior === b.missBehavior &&\n a.pointerEvents === b.pointerEvents &&\n a.keyboardFocusable === b.keyboardFocusable &&\n a.keyboardNavigationBounds?.x === b.keyboardNavigationBounds?.x &&\n a.keyboardNavigationBounds?.y === b.keyboardNavigationBounds?.y &&\n a.keyboardNavigationBounds?.width === b.keyboardNavigationBounds?.width &&\n a.keyboardNavigationBounds?.height === b.keyboardNavigationBounds?.height\n );\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["transaction"]
|
|
7
7
|
}
|
|
@@ -1,10 +1,20 @@
|
|
|
1
|
-
import type { PibblRenderTransaction } from
|
|
2
|
-
/** Root-wide
|
|
1
|
+
import type { PibblRenderTransaction } from "./types.js";
|
|
2
|
+
/** Root-wide publications and ordinary commit callbacks precede completion observers. */
|
|
3
3
|
export declare class RootRenderTransaction implements PibblRenderTransaction {
|
|
4
|
+
private preflights;
|
|
4
5
|
private publications;
|
|
6
|
+
private adoptions;
|
|
5
7
|
private callbacks;
|
|
8
|
+
private afterFinishCallbacks;
|
|
6
9
|
private result;
|
|
10
|
+
private failure;
|
|
11
|
+
get failed(): boolean;
|
|
12
|
+
fail(): void;
|
|
13
|
+
private afterFinishDelivered;
|
|
14
|
+
onPreflight(callback: () => void): void;
|
|
7
15
|
onPublish(callback: () => void): void;
|
|
16
|
+
onAdopt(callback: () => void): void;
|
|
8
17
|
onFinish(callback: (success: boolean) => void): void;
|
|
18
|
+
onAfterFinish(callback: (success: boolean) => void): void;
|
|
9
19
|
finish(success: boolean): void;
|
|
10
20
|
}
|
|
@@ -1,31 +1,86 @@
|
|
|
1
1
|
class RootRenderTransaction {
|
|
2
|
+
preflights = /* @__PURE__ */ new Set();
|
|
2
3
|
publications = /* @__PURE__ */ new Set();
|
|
4
|
+
adoptions = /* @__PURE__ */ new Set();
|
|
3
5
|
callbacks = /* @__PURE__ */ new Set();
|
|
6
|
+
afterFinishCallbacks = /* @__PURE__ */ new Set();
|
|
4
7
|
result;
|
|
8
|
+
failure = false;
|
|
9
|
+
get failed() {
|
|
10
|
+
return this.failure;
|
|
11
|
+
}
|
|
12
|
+
fail() {
|
|
13
|
+
this.failure = true;
|
|
14
|
+
}
|
|
15
|
+
afterFinishDelivered = false;
|
|
16
|
+
onPreflight(callback) {
|
|
17
|
+
if (this.result !== void 0) {
|
|
18
|
+
if (this.result) callback();
|
|
19
|
+
} else this.preflights.add(callback);
|
|
20
|
+
}
|
|
5
21
|
onPublish(callback) {
|
|
6
22
|
if (this.result !== void 0) {
|
|
7
23
|
if (this.result) callback();
|
|
8
24
|
} else this.publications.add(callback);
|
|
9
25
|
}
|
|
26
|
+
onAdopt(callback) {
|
|
27
|
+
if (this.result !== void 0) {
|
|
28
|
+
if (this.result) callback();
|
|
29
|
+
} else this.adoptions.add(callback);
|
|
30
|
+
}
|
|
10
31
|
onFinish(callback) {
|
|
11
32
|
if (this.result !== void 0) callback(this.result);
|
|
12
33
|
else this.callbacks.add(callback);
|
|
13
34
|
}
|
|
35
|
+
onAfterFinish(callback) {
|
|
36
|
+
if (this.afterFinishDelivered) {
|
|
37
|
+
callback(this.result);
|
|
38
|
+
} else {
|
|
39
|
+
this.afterFinishCallbacks.add(callback);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
14
42
|
finish(success) {
|
|
15
43
|
if (this.result !== void 0) return;
|
|
16
44
|
const errors = [];
|
|
45
|
+
if (success) {
|
|
46
|
+
for (const preflight of this.preflights) {
|
|
47
|
+
try {
|
|
48
|
+
preflight();
|
|
49
|
+
} catch (error) {
|
|
50
|
+
errors.push(error);
|
|
51
|
+
this.failure = true;
|
|
52
|
+
success = false;
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
this.preflights.clear();
|
|
17
58
|
if (success) {
|
|
18
59
|
for (const publish of this.publications) {
|
|
19
60
|
try {
|
|
20
61
|
publish();
|
|
21
62
|
} catch (error) {
|
|
22
63
|
errors.push(error);
|
|
64
|
+
this.failure = true;
|
|
23
65
|
success = false;
|
|
24
66
|
break;
|
|
25
67
|
}
|
|
26
68
|
}
|
|
27
69
|
}
|
|
28
70
|
this.publications.clear();
|
|
71
|
+
if (success) {
|
|
72
|
+
for (const adopt of this.adoptions) {
|
|
73
|
+
try {
|
|
74
|
+
adopt();
|
|
75
|
+
} catch (error) {
|
|
76
|
+
errors.push(error);
|
|
77
|
+
this.failure = true;
|
|
78
|
+
success = false;
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
this.adoptions.clear();
|
|
29
84
|
this.result = success;
|
|
30
85
|
const callbacks = Array.from(this.callbacks);
|
|
31
86
|
this.callbacks.clear();
|
|
@@ -36,8 +91,21 @@ class RootRenderTransaction {
|
|
|
36
91
|
errors.push(error);
|
|
37
92
|
}
|
|
38
93
|
}
|
|
94
|
+
while (this.afterFinishCallbacks.size) {
|
|
95
|
+
const afterFinishCallbacks = Array.from(this.afterFinishCallbacks);
|
|
96
|
+
this.afterFinishCallbacks.clear();
|
|
97
|
+
for (const callback of afterFinishCallbacks) {
|
|
98
|
+
try {
|
|
99
|
+
callback(success);
|
|
100
|
+
} catch (error) {
|
|
101
|
+
errors.push(error);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
this.afterFinishDelivered = true;
|
|
39
106
|
if (errors.length === 1) throw errors[0];
|
|
40
|
-
if (errors.length)
|
|
107
|
+
if (errors.length)
|
|
108
|
+
throw new AggregateError(errors, "Pibbl render completion failed.");
|
|
41
109
|
}
|
|
42
110
|
}
|
|
43
111
|
export {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/lib/render-transaction.ts"],
|
|
4
|
-
"sourcesContent": ["import type { PibblRenderTransaction } from
|
|
5
|
-
"mappings": "AAGO,MAAM,sBAAwD;AAAA,EAC3D,eAAe,oBAAI,IAAgB;AAAA,EACnC,YAAY,oBAAI,IAAgC;AAAA,EAChD;AAAA,
|
|
4
|
+
"sourcesContent": ["import type { PibblRenderTransaction } from \"./types.js\";\n\n/** Root-wide publications and ordinary commit callbacks precede completion observers. */\nexport class RootRenderTransaction implements PibblRenderTransaction {\n private preflights = new Set<() => void>();\n private publications = new Set<() => void>();\n private adoptions = new Set<() => void>();\n private callbacks = new Set<(success: boolean) => void>();\n private afterFinishCallbacks = new Set<(success: boolean) => void>();\n private result: boolean | undefined;\n private failure = false;\n get failed(): boolean { return this.failure; }\n fail(): void { this.failure = true; }\n private afterFinishDelivered = false;\n\n onPreflight(callback: () => void): void {\n if (this.result !== undefined) {\n if (this.result) callback();\n } else this.preflights.add(callback);\n }\n\n onPublish(callback: () => void): void {\n if (this.result !== undefined) {\n if (this.result) callback();\n } else this.publications.add(callback);\n }\n\n onAdopt(callback: () => void): void {\n if (this.result !== undefined) {\n if (this.result) callback();\n } else this.adoptions.add(callback);\n }\n\n onFinish(callback: (success: boolean) => void): void {\n if (this.result !== undefined) callback(this.result);\n else this.callbacks.add(callback);\n }\n\n onAfterFinish(callback: (success: boolean) => void): void {\n if (this.afterFinishDelivered) {\n callback(this.result!);\n } else {\n this.afterFinishCallbacks.add(callback);\n }\n }\n\n finish(success: boolean): void {\n if (this.result !== undefined) return;\n const errors: unknown[] = [];\n if (success) {\n for (const preflight of this.preflights) {\n try { preflight(); }\n catch (error) { errors.push(error); this.failure = true; success = false; break; }\n }\n }\n this.preflights.clear();\n if (success) {\n for (const publish of this.publications) {\n try {\n publish();\n } catch (error) {\n errors.push(error);\n this.failure = true;\n success = false;\n break;\n }\n }\n }\n this.publications.clear();\n if (success) {\n for (const adopt of this.adoptions) {\n try { adopt(); }\n catch (error) { errors.push(error); this.failure = true; success = false; break; }\n }\n }\n this.adoptions.clear();\n this.result = success;\n const callbacks = Array.from(this.callbacks);\n this.callbacks.clear();\n for (const callback of callbacks) {\n try {\n callback(success);\n } catch (error) {\n errors.push(error);\n }\n }\n while (this.afterFinishCallbacks.size) {\n const afterFinishCallbacks = Array.from(this.afterFinishCallbacks);\n this.afterFinishCallbacks.clear();\n for (const callback of afterFinishCallbacks) {\n try {\n callback(success);\n } catch (error) {\n errors.push(error);\n }\n }\n }\n this.afterFinishDelivered = true;\n if (errors.length === 1) throw errors[0];\n if (errors.length)\n throw new AggregateError(errors, \"Pibbl render completion failed.\");\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/lib/render.js
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
|
+
import { stageLayoutGeometry } from "./layout/geometry-publication.js";
|
|
2
|
+
import { wireStructuralEvents } from "./components/structural-events.js";
|
|
3
|
+
import { layoutParticipation, contentsChildren, isContentsTransform, registerLayoutComponentMount, resumeLayoutComponent, retainHiddenLayoutDescendants } from "./layout/participation.js";
|
|
4
|
+
import { isLayoutComponent, placedLayoutComponentRoot } from "./layout/define-layout-component.js";
|
|
1
5
|
import {
|
|
2
6
|
clearComponentState,
|
|
3
7
|
getAnonElemName,
|
|
4
|
-
GLOBAL_STATE
|
|
8
|
+
GLOBAL_STATE,
|
|
9
|
+
NO_PENDING_ROOT
|
|
5
10
|
} from "./global-state.js";
|
|
6
11
|
import { Teardowns } from "./teardowns.js";
|
|
7
12
|
import { finalizeHookSlots } from "./hooks/hook-slot.js";
|
|
@@ -19,6 +24,7 @@ import {
|
|
|
19
24
|
reconcileElementEnhancers
|
|
20
25
|
} from "./element-enhancers.js";
|
|
21
26
|
import {
|
|
27
|
+
getElementMetadata,
|
|
22
28
|
getPlacementIdentityHint,
|
|
23
29
|
getPrimitiveDefinition,
|
|
24
30
|
getPrimitiveReceiverToken,
|
|
@@ -142,12 +148,20 @@ function renderComponentElement(element, parentId, parent) {
|
|
|
142
148
|
GLOBAL_STATE.renderTransaction,
|
|
143
149
|
receiverToken
|
|
144
150
|
);
|
|
151
|
+
const preparedStyle = takePreNormalizedStyle(componentRefs.element);
|
|
152
|
+
const participation = layoutParticipation(componentRefs.element, preparedStyle ?? null);
|
|
153
|
+
if (participation === "hidden") {
|
|
154
|
+
retainHiddenLayoutDescendants(componentRefs);
|
|
155
|
+
commitSignalReads();
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
145
158
|
const renderProgram = (invoke) => {
|
|
146
159
|
try {
|
|
147
160
|
const previousReceiverToken = GLOBAL_STATE.primitiveReceiverToken;
|
|
148
161
|
GLOBAL_STATE.primitiveReceiverToken = receiverToken;
|
|
149
162
|
let result;
|
|
150
163
|
try {
|
|
164
|
+
stageLayoutGeometry(componentRefs);
|
|
151
165
|
result = invoke();
|
|
152
166
|
} finally {
|
|
153
167
|
GLOBAL_STATE.primitiveReceiverToken = previousReceiverToken;
|
|
@@ -167,6 +181,13 @@ function renderComponentElement(element, parentId, parent) {
|
|
|
167
181
|
finishAfterRender();
|
|
168
182
|
}
|
|
169
183
|
};
|
|
184
|
+
const assignedContents = getElementMetadata(componentRefs.element)?.layoutContentsChildren;
|
|
185
|
+
if (participation === "contents" && !isContentsTransform(componentRefs.element.type)) {
|
|
186
|
+
const children = assignedContents ?? contentsChildren(componentRefs.element);
|
|
187
|
+
wireStructuralEvents(componentRefs.element.props);
|
|
188
|
+
renderProgram(() => children);
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
170
191
|
if (definition) {
|
|
171
192
|
if (definition.backend !== driver.token) {
|
|
172
193
|
throw backendMismatchError(
|
|
@@ -176,7 +197,6 @@ function renderComponentElement(element, parentId, parent) {
|
|
|
176
197
|
getElementSource(componentRefs.element)
|
|
177
198
|
);
|
|
178
199
|
}
|
|
179
|
-
const preparedStyle = takePreNormalizedStyle(componentRefs.element);
|
|
180
200
|
const inputs = resolvePrimitiveInputs(
|
|
181
201
|
componentRefs.element,
|
|
182
202
|
definition,
|
|
@@ -198,7 +218,7 @@ function renderComponentElement(element, parentId, parent) {
|
|
|
198
218
|
})();
|
|
199
219
|
const componentName = componentRefs.element.type.name || "Anonymous";
|
|
200
220
|
const source = getElementSource(componentRefs.element);
|
|
201
|
-
const props = inputs.props;
|
|
221
|
+
const props = assignedContents ? { ...inputs.props, children: assignedContents } : inputs.props;
|
|
202
222
|
const tracksPresentationLineage = hasElementEnhancers(componentRefs);
|
|
203
223
|
const tracksCanvasWorldTransform = GLOBAL_STATE.worldBaseTransform !== void 0 && GLOBAL_STATE.renderContext !== void 0 && GLOBAL_STATE.renderTarget !== void 0;
|
|
204
224
|
const prepared = tracksPresentationLineage ? prepareElementEnhancers(componentRefs, {
|
|
@@ -243,7 +263,6 @@ function renderComponentElement(element, parentId, parent) {
|
|
|
243
263
|
);
|
|
244
264
|
}
|
|
245
265
|
} else {
|
|
246
|
-
const preparedStyle = takePreNormalizedStyle(componentRefs.element);
|
|
247
266
|
const signalHandoff = getPlacementSignalHandoff(componentRefs.element);
|
|
248
267
|
const consumedStyle = preparedStyle?.style ?? signalHandoff;
|
|
249
268
|
const receivesPlacementHandoff = isPlacementConsumed(componentRefs.element) || signalHandoff !== void 0;
|
|
@@ -251,7 +270,7 @@ function renderComponentElement(element, parentId, parent) {
|
|
|
251
270
|
renderProgram(() => {
|
|
252
271
|
const releaseHandoff = receivesPlacementHandoff ? enterPlacementHandoffCapture(props, consumedStyle) : void 0;
|
|
253
272
|
try {
|
|
254
|
-
return componentRefs.element.type(props);
|
|
273
|
+
return isLayoutComponent(componentRefs.element.type) ? placedLayoutComponentRoot(componentRefs.element, preparedStyle) : componentRefs.element.type(props);
|
|
255
274
|
} finally {
|
|
256
275
|
releaseHandoff?.();
|
|
257
276
|
}
|
|
@@ -274,15 +293,18 @@ function renderComponentElement(element, parentId, parent) {
|
|
|
274
293
|
clearComponentState();
|
|
275
294
|
}
|
|
276
295
|
}
|
|
296
|
+
let signalInputRender;
|
|
277
297
|
function componentSignalReadOptions(componentRefs) {
|
|
278
298
|
const pibblInstance = GLOBAL_STATE.currentPibblInstance;
|
|
279
299
|
return {
|
|
280
300
|
debugName: `${componentRefs.element.type.name || "Anonymous"} (${componentRefs.id})`,
|
|
301
|
+
layoutOwner: pibblInstance,
|
|
302
|
+
allocationReceiver: componentRefs,
|
|
281
303
|
invalidate: () => {
|
|
282
304
|
if (GLOBAL_STATE.pibblInstances.get(pibblInstance.canvas) !== pibblInstance || pibblInstance.mainTeardowns.closed || componentRefs.teardowns.closed || pibblInstance.refs.get(componentRefs.id) !== componentRefs) {
|
|
283
305
|
return;
|
|
284
306
|
}
|
|
285
|
-
requestInstanceRender(pibblInstance);
|
|
307
|
+
requestInstanceRender(pibblInstance, signalInputRender ??= { pendingRoot: NO_PENDING_ROOT, pendingUpdateParents: false, signalInput: true });
|
|
286
308
|
},
|
|
287
309
|
onMaterialize: () => {
|
|
288
310
|
if (componentRefs.signalConsumerTeardownAttached) return;
|
|
@@ -332,8 +354,10 @@ function prepareComponentScope(element, parentId, parent) {
|
|
|
332
354
|
onAfterRender: void 0
|
|
333
355
|
};
|
|
334
356
|
pibblInstance.refs.set(id, mountedRefs);
|
|
357
|
+
registerLayoutComponentMount(mountedRefs);
|
|
335
358
|
componentRefs = mountedRefs;
|
|
336
359
|
}
|
|
360
|
+
resumeLayoutComponent(componentRefs);
|
|
337
361
|
componentRefs.parent = parent;
|
|
338
362
|
componentRefs.element = element;
|
|
339
363
|
componentRefs.renderGeneration = pibblInstance.renderGeneration;
|
|
@@ -343,8 +367,8 @@ function prepareComponentScope(element, parentId, parent) {
|
|
|
343
367
|
const previous = componentRefs.layoutEntry;
|
|
344
368
|
const allocation = captureLayoutBox(previous?.allocation, layout.allocation);
|
|
345
369
|
const percentageBasis = captureLayoutBox(previous?.percentageBasis, layout.percentageBasis);
|
|
346
|
-
if (allocation !== previous?.allocation || percentageBasis !== previous?.percentageBasis) {
|
|
347
|
-
componentRefs.layoutEntry = Object.freeze({ allocation, percentageBasis });
|
|
370
|
+
if (allocation !== previous?.allocation || percentageBasis !== previous?.percentageBasis || layout.layoutDirection !== previous?.layoutDirection) {
|
|
371
|
+
componentRefs.layoutEntry = Object.freeze({ allocation, percentageBasis, layoutDirection: layout.layoutDirection });
|
|
348
372
|
}
|
|
349
373
|
}
|
|
350
374
|
return componentRefs;
|