@pibbl/core 0.0.2 → 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/THIRD_PARTY_NOTICES.txt +81 -0
- 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/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/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/world/rapier.js +22 -26
- package/dist/features/physics/lib/2d/world/rapier.js.map +2 -2
- package/dist/features/sprites/loader.js +6 -3
- package/dist/features/sprites/loader.js.map +2 -2
- 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 +68 -6
- package/dist/features/viz/index.js +164 -2
- 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-title.js +2 -1
- package/dist/features/viz/lib/axis-title.js.map +2 -2
- package/dist/features/viz/lib/axis.js +1 -1
- package/dist/features/viz/lib/axis.js.map +2 -2
- package/dist/features/viz/lib/bar-series.d.ts +3 -1
- package/dist/features/viz/lib/bar-series.js +16 -1
- 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/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 +5 -2
- package/dist/features/viz/lib/hover-data.js.map +2 -2
- 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.js +1 -1
- package/dist/features/viz/lib/linear-scale.js.map +2 -2
- 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/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/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-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.js +4 -1
- package/dist/features/viz/lib/reference-band.js.map +2 -2
- package/dist/features/viz/lib/scale-context.d.ts +1 -1
- package/dist/features/viz/lib/scale-ticks.js +21 -6
- package/dist/features/viz/lib/scale-ticks.js.map +2 -2
- 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/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 +20 -4
- package/dist/features/viz/lib/use-continuous-scale.js +6 -1
- package/dist/features/viz/lib/use-continuous-scale.js.map +2 -2
- package/dist/features/viz/lib/utc-scale.js +11 -10
- package/dist/features/viz/lib/utc-scale.js.map +2 -2
- 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 +9 -5
- 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/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/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 +26 -3
|
@@ -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;
|