@pibbl/core 0.0.1 → 0.0.3-alpha.109.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/THIRD_PARTY_NOTICES.txt +81 -0
- package/dist/features/machines/animation.d.ts +64 -0
- package/dist/features/machines/animation.js +55 -0
- package/dist/features/machines/animation.js.map +7 -0
- package/dist/features/machines/animation.mjs +1 -0
- package/dist/features/machines/assign.d.ts +16 -0
- package/dist/features/machines/assign.js +15 -0
- package/dist/features/machines/assign.js.map +7 -0
- package/dist/features/machines/callback.d.ts +9 -0
- package/dist/features/machines/callback.js +7 -0
- package/dist/features/machines/callback.js.map +7 -0
- package/dist/features/machines/hook.d.ts +30 -0
- package/dist/features/machines/hook.js +37 -0
- package/dist/features/machines/hook.js.map +7 -0
- package/dist/features/machines/index.d.ts +6 -0
- package/dist/features/machines/index.js +12 -0
- package/dist/features/machines/index.js.map +7 -0
- package/dist/features/machines/index.mjs +1 -0
- package/dist/features/machines/runtime.d.ts +18 -0
- package/dist/features/machines/runtime.js +363 -0
- package/dist/features/machines/runtime.js.map +7 -0
- package/dist/features/machines/types.d.ts +164 -0
- package/dist/features/physics/2d-geometry.d.ts +3 -3
- package/dist/features/physics/2d-geometry.js.map +1 -1
- package/dist/features/physics/2d-testing.d.ts +1 -1
- package/dist/features/physics/2d-testing.js +2 -2
- package/dist/features/physics/2d-testing.js.map +2 -2
- package/dist/features/physics/2d.d.ts +115 -62
- package/dist/features/physics/2d.js +59 -28
- package/dist/features/physics/2d.js.map +2 -2
- package/dist/features/physics/lib/2d/canvas/components.js +25 -21
- package/dist/features/physics/lib/2d/canvas/components.js.map +2 -2
- package/dist/features/physics/lib/2d/canvas/presentation.js +1 -2
- package/dist/features/physics/lib/2d/canvas/presentation.js.map +2 -2
- package/dist/features/physics/lib/2d/collision/casts.js +4 -2
- package/dist/features/physics/lib/2d/collision/casts.js.map +2 -2
- package/dist/features/physics/lib/2d/query-types.d.ts +6 -0
- package/dist/features/physics/lib/2d/runtime/controller.d.ts +7 -6
- package/dist/features/physics/lib/2d/runtime/controller.js +1 -1
- package/dist/features/physics/lib/2d/runtime/controller.js.map +2 -2
- package/dist/features/physics/lib/2d/runtime/obstacles.js +9 -11
- package/dist/features/physics/lib/2d/runtime/obstacles.js.map +2 -2
- package/dist/features/physics/lib/2d/shapes.js +8 -9
- package/dist/features/physics/lib/2d/shapes.js.map +2 -2
- package/dist/features/physics/lib/2d/types.d.ts +8 -30
- package/dist/features/physics/lib/2d/world/queries.d.ts +7 -6
- package/dist/features/physics/lib/2d/world/queries.js.map +2 -2
- package/dist/features/physics/lib/2d/world/rapier.js +22 -26
- package/dist/features/physics/lib/2d/world/rapier.js.map +2 -2
- package/dist/features/sprites/formats/aseprite.d.ts +5 -0
- package/dist/features/sprites/formats/texture-packer.d.ts +5 -0
- package/dist/features/sprites/index.d.ts +6 -0
- package/dist/features/sprites/loader.d.ts +25 -0
- package/dist/features/sprites/loader.js +6 -3
- package/dist/features/sprites/loader.js.map +2 -2
- package/dist/features/sprites/model.d.ts +75 -0
- package/dist/features/sprites/sprite.d.ts +22 -0
- package/dist/features/textures/index.d.ts +12 -2
- package/dist/features/textures/index.js +33 -1
- package/dist/features/textures/index.js.map +2 -2
- package/dist/features/textures/lib/chemical-field.d.ts +56 -0
- package/dist/features/textures/lib/chemical-field.js +154 -0
- package/dist/features/textures/lib/chemical-field.js.map +7 -0
- package/dist/features/textures/lib/chemical-recipes.d.ts +119 -0
- package/dist/features/textures/lib/chemical-recipes.js +275 -0
- package/dist/features/textures/lib/chemical-recipes.js.map +7 -0
- package/dist/features/textures/lib/definitions.d.ts +3 -18
- package/dist/features/textures/lib/definitions.js +17 -24
- package/dist/features/textures/lib/definitions.js.map +2 -2
- package/dist/features/textures/lib/geometric-patterns.d.ts +149 -0
- package/dist/features/textures/lib/geometric-patterns.js +305 -0
- package/dist/features/textures/lib/geometric-patterns.js.map +7 -0
- package/dist/features/textures/lib/gray-scott.d.ts +55 -0
- package/dist/features/textures/lib/gray-scott.js +37 -0
- package/dist/features/textures/lib/gray-scott.js.map +7 -0
- package/dist/features/textures/lib/palette.js +1 -3
- package/dist/features/textures/lib/palette.js.map +2 -2
- package/dist/features/textures/lib/patterns.d.ts +123 -0
- package/dist/features/textures/lib/patterns.js +344 -0
- package/dist/features/textures/lib/patterns.js.map +7 -0
- package/dist/features/textures/lib/rain-drops.js +2 -1
- package/dist/features/textures/lib/rain-drops.js.map +2 -2
- package/dist/features/textures/lib/reaction-diffusion.d.ts +3 -2
- package/dist/features/textures/lib/reaction-diffusion.js +9 -20
- package/dist/features/textures/lib/reaction-diffusion.js.map +2 -2
- package/dist/features/textures/lib/simulation.d.ts +10 -4
- package/dist/features/textures/lib/simulation.js +23 -13
- package/dist/features/textures/lib/simulation.js.map +2 -2
- package/dist/features/textures/lib/wasm/electric.js +8 -1
- package/dist/features/textures/lib/wasm/electric.js.map +2 -2
- package/dist/features/textures/lib/water-surface.js +1 -3
- package/dist/features/textures/lib/water-surface.js.map +2 -2
- package/dist/features/viz/index.d.ts +92 -5
- package/dist/features/viz/index.js +202 -4
- package/dist/features/viz/index.js.map +2 -2
- package/dist/features/viz/inspection/bar.d.ts +79 -0
- package/dist/features/viz/inspection/bar.js +49 -0
- package/dist/features/viz/inspection/bar.js.map +7 -0
- package/dist/features/viz/inspection/candle.d.ts +156 -0
- package/dist/features/viz/inspection/candle.js +120 -0
- package/dist/features/viz/inspection/candle.js.map +7 -0
- package/dist/features/viz/inspection/capture-types.d.ts +65 -0
- package/dist/features/viz/inspection/capture.d.ts +16 -0
- package/dist/features/viz/inspection/capture.js +49 -0
- package/dist/features/viz/inspection/capture.js.map +7 -0
- package/dist/features/viz/inspection/handler.d.ts +36 -0
- package/dist/features/viz/inspection/handler.js +91 -0
- package/dist/features/viz/inspection/handler.js.map +7 -0
- package/dist/features/viz/inspection/ohlc-bar.d.ts +132 -0
- package/dist/features/viz/inspection/ohlc-bar.js +118 -0
- package/dist/features/viz/inspection/ohlc-bar.js.map +7 -0
- package/dist/features/viz/inspection/owned-ref.d.ts +16 -0
- package/dist/features/viz/inspection/owned-ref.js +99 -0
- package/dist/features/viz/inspection/owned-ref.js.map +7 -0
- package/dist/features/viz/inspection/painted-point.d.ts +22 -0
- package/dist/features/viz/inspection/painted-point.js +29 -0
- package/dist/features/viz/inspection/painted-point.js.map +7 -0
- package/dist/features/viz/inspection/queries.d.ts +100 -0
- package/dist/features/viz/inspection/queries.js +192 -0
- package/dist/features/viz/inspection/queries.js.map +7 -0
- package/dist/features/viz/inspection/query-types.d.ts +177 -0
- package/dist/features/viz/inspection/volume.d.ts +104 -0
- package/dist/features/viz/inspection/volume.js +95 -0
- package/dist/features/viz/inspection/volume.js.map +7 -0
- package/dist/features/viz/inspection.d.ts +19 -0
- package/dist/features/viz/inspection.js +54 -0
- package/dist/features/viz/inspection.js.map +7 -0
- package/dist/features/viz/inspection.mjs +1 -0
- package/dist/features/viz/lib/area-series.d.ts +62 -0
- package/dist/features/viz/lib/area-series.js +120 -0
- package/dist/features/viz/lib/area-series.js.map +7 -0
- package/dist/features/viz/lib/axis-labels.d.ts +2 -0
- package/dist/features/viz/lib/axis-labels.js +41 -0
- package/dist/features/viz/lib/axis-labels.js.map +7 -0
- package/dist/features/viz/lib/axis-title.d.ts +23 -0
- package/dist/features/viz/lib/axis-title.js +24 -0
- package/dist/features/viz/lib/axis-title.js.map +7 -0
- package/dist/features/viz/lib/axis.d.ts +1 -1
- package/dist/features/viz/lib/axis.js +50 -50
- package/dist/features/viz/lib/axis.js.map +2 -2
- package/dist/features/viz/lib/bar-scale.d.ts +7 -0
- package/dist/features/viz/lib/bar-scale.js +34 -0
- package/dist/features/viz/lib/bar-scale.js.map +7 -0
- package/dist/features/viz/lib/bar-series.d.ts +3 -1
- package/dist/features/viz/lib/bar-series.js +21 -5
- package/dist/features/viz/lib/bar-series.js.map +2 -2
- package/dist/features/viz/lib/baseline-series.d.ts +55 -0
- package/dist/features/viz/lib/baseline-series.js +136 -0
- package/dist/features/viz/lib/baseline-series.js.map +7 -0
- package/dist/features/viz/lib/candlestick-series.d.ts +62 -0
- package/dist/features/viz/lib/candlestick-series.js +150 -0
- package/dist/features/viz/lib/candlestick-series.js.map +7 -0
- package/dist/features/viz/lib/censored-point-series.d.ts +71 -0
- package/dist/features/viz/lib/censored-point-series.js +129 -0
- package/dist/features/viz/lib/censored-point-series.js.map +7 -0
- package/dist/features/viz/lib/chart-lines.d.ts +41 -0
- package/dist/features/viz/lib/chart-lines.js +32 -0
- package/dist/features/viz/lib/chart-lines.js.map +7 -0
- package/dist/features/viz/lib/color-context.d.ts +4 -0
- package/dist/features/viz/lib/color-context.js +41 -0
- package/dist/features/viz/lib/color-context.js.map +7 -0
- package/dist/features/viz/lib/color-math.d.ts +4 -0
- package/dist/features/viz/lib/color-math.js +31 -0
- package/dist/features/viz/lib/color-math.js.map +7 -0
- package/dist/features/viz/lib/color-types.d.ts +53 -0
- package/dist/features/viz/lib/curve-definition.d.ts +49 -0
- package/dist/features/viz/lib/curve-definition.js +142 -0
- package/dist/features/viz/lib/curve-definition.js.map +7 -0
- package/dist/features/viz/lib/diverging-color-scale.d.ts +11 -0
- package/dist/features/viz/lib/diverging-color-scale.js +51 -0
- package/dist/features/viz/lib/diverging-color-scale.js.map +7 -0
- package/dist/features/viz/lib/domain-navigation.d.ts +40 -0
- package/dist/features/viz/lib/domain-navigation.js +77 -0
- package/dist/features/viz/lib/domain-navigation.js.map +7 -0
- package/dist/features/viz/lib/editable-chart-elements.d.ts +178 -0
- package/dist/features/viz/lib/editable-chart-elements.js +733 -0
- package/dist/features/viz/lib/editable-chart-elements.js.map +7 -0
- package/dist/features/viz/lib/financial-aggregation.d.ts +127 -0
- package/dist/features/viz/lib/financial-aggregation.js +116 -0
- package/dist/features/viz/lib/financial-aggregation.js.map +7 -0
- package/dist/features/viz/lib/financial-autoscale.d.ts +64 -0
- package/dist/features/viz/lib/financial-autoscale.js +61 -0
- package/dist/features/viz/lib/financial-autoscale.js.map +7 -0
- package/dist/features/viz/lib/financial-comparison.d.ts +62 -0
- package/dist/features/viz/lib/financial-comparison.js +98 -0
- package/dist/features/viz/lib/financial-comparison.js.map +7 -0
- package/dist/features/viz/lib/financial-geometry.d.ts +77 -0
- package/dist/features/viz/lib/financial-geometry.js +67 -0
- package/dist/features/viz/lib/financial-geometry.js.map +7 -0
- package/dist/features/viz/lib/financial-indicators.d.ts +114 -0
- package/dist/features/viz/lib/financial-indicators.js +135 -0
- package/dist/features/viz/lib/financial-indicators.js.map +7 -0
- package/dist/features/viz/lib/financial-oscillators.d.ts +171 -0
- package/dist/features/viz/lib/financial-oscillators.js +265 -0
- package/dist/features/viz/lib/financial-oscillators.js.map +7 -0
- package/dist/features/viz/lib/graph/bipartite.d.ts +14 -0
- package/dist/features/viz/lib/graph/bipartite.js +250 -0
- package/dist/features/viz/lib/graph/bipartite.js.map +7 -0
- package/dist/features/viz/lib/graph/chord.d.ts +44 -0
- package/dist/features/viz/lib/graph/chord.js +348 -0
- package/dist/features/viz/lib/graph/chord.js.map +7 -0
- package/dist/features/viz/lib/graph/dependency.d.ts +26 -0
- package/dist/features/viz/lib/graph/dependency.js +140 -0
- package/dist/features/viz/lib/graph/dependency.js.map +7 -0
- package/dist/features/viz/lib/graph/force.d.ts +28 -0
- package/dist/features/viz/lib/graph/force.js +580 -0
- package/dist/features/viz/lib/graph/force.js.map +7 -0
- package/dist/features/viz/lib/graph/hierarchy.d.ts +21 -0
- package/dist/features/viz/lib/graph/hierarchy.js +112 -0
- package/dist/features/viz/lib/graph/hierarchy.js.map +7 -0
- package/dist/features/viz/lib/graph/icicle.d.ts +16 -0
- package/dist/features/viz/lib/graph/icicle.js +153 -0
- package/dist/features/viz/lib/graph/icicle.js.map +7 -0
- package/dist/features/viz/lib/graph/matrix.d.ts +30 -0
- package/dist/features/viz/lib/graph/matrix.js +243 -0
- package/dist/features/viz/lib/graph/matrix.js.map +7 -0
- package/dist/features/viz/lib/graph/neighborhood.d.ts +11 -0
- package/dist/features/viz/lib/graph/neighborhood.js +281 -0
- package/dist/features/viz/lib/graph/neighborhood.js.map +7 -0
- package/dist/features/viz/lib/graph/routes.d.ts +35 -0
- package/dist/features/viz/lib/graph/routes.js +101 -0
- package/dist/features/viz/lib/graph/routes.js.map +7 -0
- package/dist/features/viz/lib/graph/sankey.d.ts +44 -0
- package/dist/features/viz/lib/graph/sankey.js +341 -0
- package/dist/features/viz/lib/graph/sankey.js.map +7 -0
- package/dist/features/viz/lib/graph/shared.d.ts +59 -0
- package/dist/features/viz/lib/graph/shared.js +301 -0
- package/dist/features/viz/lib/graph/shared.js.map +7 -0
- package/dist/features/viz/lib/graph/tree.d.ts +11 -0
- package/dist/features/viz/lib/graph/tree.js +232 -0
- package/dist/features/viz/lib/graph/tree.js.map +7 -0
- package/dist/features/viz/lib/graph/treemap.d.ts +20 -0
- package/dist/features/viz/lib/graph/treemap.js +227 -0
- package/dist/features/viz/lib/graph/treemap.js.map +7 -0
- package/dist/features/viz/lib/graph/types.d.ts +1097 -0
- package/dist/features/viz/lib/hover-card.js +8 -9
- package/dist/features/viz/lib/hover-card.js.map +2 -2
- package/dist/features/viz/lib/hover-data.d.ts +1 -1
- package/dist/features/viz/lib/hover-data.js +6 -3
- package/dist/features/viz/lib/hover-data.js.map +2 -2
- package/dist/features/viz/lib/hover-types.d.ts +5 -5
- package/dist/features/viz/lib/interval-band-series.d.ts +49 -0
- package/dist/features/viz/lib/interval-band-series.js +136 -0
- package/dist/features/viz/lib/interval-band-series.js.map +7 -0
- package/dist/features/viz/lib/interval-diamond-series.d.ts +43 -0
- package/dist/features/viz/lib/interval-diamond-series.js +122 -0
- package/dist/features/viz/lib/interval-diamond-series.js.map +7 -0
- package/dist/features/viz/lib/interval-series.d.ts +79 -0
- package/dist/features/viz/lib/interval-series.js +158 -0
- package/dist/features/viz/lib/interval-series.js.map +7 -0
- package/dist/features/viz/lib/layout-pie.js +9 -13
- package/dist/features/viz/lib/layout-pie.js.map +2 -2
- package/dist/features/viz/lib/line-series.d.ts +1 -1
- package/dist/features/viz/lib/line-series.js +47 -28
- package/dist/features/viz/lib/line-series.js.map +2 -2
- package/dist/features/viz/lib/linear-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/linear-scale-component.js +18 -0
- package/dist/features/viz/lib/linear-scale-component.js.map +7 -0
- package/dist/features/viz/lib/linear-scale.js +1 -1
- package/dist/features/viz/lib/linear-scale.js.map +2 -2
- package/dist/features/viz/lib/log-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/log-scale-component.js +19 -0
- package/dist/features/viz/lib/log-scale-component.js.map +7 -0
- package/dist/features/viz/lib/log-scale.d.ts +2 -0
- package/dist/features/viz/lib/log-scale.js +53 -0
- package/dist/features/viz/lib/log-scale.js.map +7 -0
- package/dist/features/viz/lib/monotone-curve.d.ts +11 -0
- package/dist/features/viz/lib/monotone-curve.js +63 -0
- package/dist/features/viz/lib/monotone-curve.js.map +7 -0
- package/dist/features/viz/lib/nearest.d.ts +9 -9
- package/dist/features/viz/lib/nearest.js.map +1 -1
- package/dist/features/viz/lib/numeric-range-interpolation.d.ts +15 -0
- package/dist/features/viz/lib/numeric-range-interpolation.js +36 -0
- package/dist/features/viz/lib/numeric-range-interpolation.js.map +7 -0
- package/dist/features/viz/lib/numeric-ticks.d.ts +38 -0
- package/dist/features/viz/lib/numeric-ticks.js +54 -0
- package/dist/features/viz/lib/numeric-ticks.js.map +7 -0
- package/dist/features/viz/lib/ohlc-bar-series.d.ts +55 -0
- package/dist/features/viz/lib/ohlc-bar-series.js +168 -0
- package/dist/features/viz/lib/ohlc-bar-series.js.map +7 -0
- package/dist/features/viz/lib/paired-series.d.ts +44 -0
- package/dist/features/viz/lib/paired-series.js +93 -0
- package/dist/features/viz/lib/paired-series.js.map +7 -0
- package/dist/features/viz/lib/pie-layout.js +2 -1
- package/dist/features/viz/lib/pie-layout.js.map +2 -2
- package/dist/features/viz/lib/plot-series.js +11 -6
- package/dist/features/viz/lib/plot-series.js.map +2 -2
- package/dist/features/viz/lib/plot-types.d.ts +4 -3
- package/dist/features/viz/lib/point-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/point-scale-component.js +19 -0
- package/dist/features/viz/lib/point-scale-component.js.map +7 -0
- package/dist/features/viz/lib/point-scale.d.ts +2 -0
- package/dist/features/viz/lib/point-scale.js +45 -0
- package/dist/features/viz/lib/point-scale.js.map +7 -0
- package/dist/features/viz/lib/point-series.d.ts +1 -1
- package/dist/features/viz/lib/point-series.js +36 -9
- package/dist/features/viz/lib/point-series.js.map +2 -2
- package/dist/features/viz/lib/point-types.d.ts +5 -2
- package/dist/features/viz/lib/reference-band.d.ts +16 -0
- package/dist/features/viz/lib/reference-band.js +30 -0
- package/dist/features/viz/lib/reference-band.js.map +7 -0
- package/dist/features/viz/lib/scale-adjust.js +9 -4
- package/dist/features/viz/lib/scale-adjust.js.map +2 -2
- package/dist/features/viz/lib/scale-context.d.ts +5 -4
- package/dist/features/viz/lib/scale-context.js +15 -11
- package/dist/features/viz/lib/scale-context.js.map +2 -2
- package/dist/features/viz/lib/scale-provider.d.ts +2 -0
- package/dist/features/viz/lib/scale-provider.js +13 -0
- package/dist/features/viz/lib/scale-provider.js.map +7 -0
- package/dist/features/viz/lib/scale-ticks.d.ts +5 -0
- package/dist/features/viz/lib/scale-ticks.js +64 -0
- package/dist/features/viz/lib/scale-ticks.js.map +7 -0
- package/dist/features/viz/lib/scale-view.d.ts +4 -0
- package/dist/features/viz/lib/scale-view.js +21 -0
- package/dist/features/viz/lib/scale-view.js.map +7 -0
- package/dist/features/viz/lib/sequential-color-scale.d.ts +11 -0
- package/dist/features/viz/lib/sequential-color-scale.js +49 -0
- package/dist/features/viz/lib/sequential-color-scale.js.map +7 -0
- package/dist/features/viz/lib/series-position.d.ts +12 -0
- package/dist/features/viz/lib/series-position.js +44 -0
- package/dist/features/viz/lib/series-position.js.map +7 -0
- package/dist/features/viz/lib/step-curves.d.ts +19 -0
- package/dist/features/viz/lib/step-curves.js +53 -0
- package/dist/features/viz/lib/step-curves.js.map +7 -0
- package/dist/features/viz/lib/symlog-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/symlog-scale-component.js +19 -0
- package/dist/features/viz/lib/symlog-scale-component.js.map +7 -0
- package/dist/features/viz/lib/symlog-scale.d.ts +2 -0
- package/dist/features/viz/lib/symlog-scale.js +38 -0
- package/dist/features/viz/lib/symlog-scale.js.map +7 -0
- package/dist/features/viz/lib/threshold-color-scale.d.ts +43 -0
- package/dist/features/viz/lib/threshold-color-scale.js +59 -0
- package/dist/features/viz/lib/threshold-color-scale.js.map +7 -0
- package/dist/features/viz/lib/trading-time-mapping.d.ts +32 -0
- package/dist/features/viz/lib/trading-time-mapping.js +89 -0
- package/dist/features/viz/lib/trading-time-mapping.js.map +7 -0
- package/dist/features/viz/lib/trading-time-scale.d.ts +83 -0
- package/dist/features/viz/lib/trading-time-scale.js +96 -0
- package/dist/features/viz/lib/trading-time-scale.js.map +7 -0
- package/dist/features/viz/lib/trajectory-series.d.ts +71 -0
- package/dist/features/viz/lib/trajectory-series.js +111 -0
- package/dist/features/viz/lib/trajectory-series.js.map +7 -0
- package/dist/features/viz/lib/types.d.ts +114 -21
- package/dist/features/viz/lib/use-bar-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-bar-scale.js +9 -0
- package/dist/features/viz/lib/use-bar-scale.js.map +7 -0
- package/dist/features/viz/lib/use-continuous-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-continuous-scale.js +14 -0
- package/dist/features/viz/lib/use-continuous-scale.js.map +7 -0
- package/dist/features/viz/lib/use-linear-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-linear-scale.js +9 -0
- package/dist/features/viz/lib/use-linear-scale.js.map +7 -0
- package/dist/features/viz/lib/use-log-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-log-scale.js +9 -0
- package/dist/features/viz/lib/use-log-scale.js.map +7 -0
- package/dist/features/viz/lib/use-point-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-point-scale.js +9 -0
- package/dist/features/viz/lib/use-point-scale.js.map +7 -0
- package/dist/features/viz/lib/use-symlog-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-symlog-scale.js +9 -0
- package/dist/features/viz/lib/use-symlog-scale.js.map +7 -0
- package/dist/features/viz/lib/use-utc-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-utc-scale.js +9 -0
- package/dist/features/viz/lib/use-utc-scale.js.map +7 -0
- package/dist/features/viz/lib/utc-labels.d.ts +12 -0
- package/dist/features/viz/lib/utc-labels.js +27 -0
- package/dist/features/viz/lib/utc-labels.js.map +7 -0
- package/dist/features/viz/lib/utc-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/utc-scale-component.js +18 -0
- package/dist/features/viz/lib/utc-scale-component.js.map +7 -0
- package/dist/features/viz/lib/utc-scale.d.ts +21 -0
- package/dist/features/viz/lib/utc-scale.js +124 -0
- package/dist/features/viz/lib/utc-scale.js.map +7 -0
- package/dist/features/viz/lib/volume-series.d.ts +59 -0
- package/dist/features/viz/lib/volume-series.js +117 -0
- package/dist/features/viz/lib/volume-series.js.map +7 -0
- package/dist/features/viz/lib/weighted-point-series.d.ts +71 -0
- package/dist/features/viz/lib/weighted-point-series.js +169 -0
- package/dist/features/viz/lib/weighted-point-series.js.map +7 -0
- package/dist/filters/backdrop-contrast-gpu.d.ts +5 -0
- package/dist/filters/backdrop-contrast-gpu.js +33 -0
- package/dist/filters/backdrop-contrast-gpu.js.map +7 -0
- package/dist/filters/backdrop-contrast.d.ts +21 -0
- package/dist/filters/backdrop-contrast.js +61 -0
- package/dist/filters/backdrop-contrast.js.map +7 -0
- package/dist/filters/displacement.js +1 -1
- package/dist/filters/displacement.js.map +2 -2
- package/dist/filters/emboss-gpu.d.ts +4 -0
- package/dist/filters/emboss-gpu.js +39 -0
- package/dist/filters/emboss-gpu.js.map +7 -0
- package/dist/filters/emboss.d.ts +32 -0
- package/dist/filters/emboss.js +104 -0
- package/dist/filters/emboss.js.map +7 -0
- package/dist/filters/filter-executor.d.ts +11 -4
- package/dist/filters/filter-executor.js +104 -49
- package/dist/filters/filter-executor.js.map +2 -2
- package/dist/filters/reflected-light.js +1 -1
- package/dist/filters/reflected-light.js.map +2 -2
- package/dist/filters/reflection-gpu.d.ts +3 -1
- package/dist/filters/reflection-gpu.js +5 -2
- package/dist/filters/reflection-gpu.js.map +2 -2
- package/dist/filters/render-backdrop-contrast-boundary.d.ts +31 -0
- package/dist/filters/render-backdrop-contrast-boundary.js +116 -0
- package/dist/filters/render-backdrop-contrast-boundary.js.map +7 -0
- package/dist/filters/render-emboss-boundary.d.ts +13 -0
- package/dist/filters/render-emboss-boundary.js +131 -0
- package/dist/filters/render-emboss-boundary.js.map +7 -0
- package/dist/filters.d.ts +9 -5
- package/dist/filters.js +4 -0
- package/dist/filters.js.map +2 -2
- package/dist/index.d.ts +10 -6
- package/dist/index.js +18 -2
- package/dist/index.js.map +2 -2
- package/dist/internal.d.ts +4 -0
- package/dist/internal.js +6 -0
- package/dist/internal.js.map +2 -2
- package/dist/layout-kernel.d.ts +12 -0
- package/dist/layout-kernel.js +11 -0
- package/dist/layout-kernel.js.map +7 -0
- package/dist/layout-kernel.mjs +1 -0
- package/dist/lib/animation/definition.d.ts +5 -3
- package/dist/lib/animation/definition.js +29 -4
- package/dist/lib/animation/definition.js.map +2 -2
- package/dist/lib/animation/playback.d.ts +8 -0
- package/dist/lib/animation/playback.js +33 -11
- package/dist/lib/animation/playback.js.map +2 -2
- package/dist/lib/animation/spring.d.ts +3 -1
- package/dist/lib/animation/spring.js.map +2 -2
- package/dist/lib/animation/types.d.ts +29 -73
- package/dist/lib/backend/types.d.ts +13 -1
- package/dist/lib/backend/types.js.map +2 -2
- package/dist/lib/components/arc-geometry.js +2 -1
- package/dist/lib/components/arc-geometry.js.map +2 -2
- package/dist/lib/components/g.js +2 -0
- package/dist/lib/components/g.js.map +2 -2
- package/dist/lib/components/html-box.js +2 -1
- package/dist/lib/components/html-box.js.map +2 -2
- package/dist/lib/components/img.js +3 -3
- package/dist/lib/components/img.js.map +2 -2
- package/dist/lib/components/layer.js +98 -16
- package/dist/lib/components/layer.js.map +3 -3
- package/dist/lib/components/text.d.ts +16 -0
- package/dist/lib/components/text.js +131 -24
- package/dist/lib/components/text.js.map +2 -2
- package/dist/lib/define-primitive.d.ts +4 -2
- package/dist/lib/define-primitive.js +3 -1
- package/dist/lib/define-primitive.js.map +2 -2
- package/dist/lib/element/metadata.d.ts +9 -0
- package/dist/lib/element/metadata.js +19 -0
- package/dist/lib/element/metadata.js.map +2 -2
- package/dist/lib/element/resolve-primitive-inputs.d.ts +2 -0
- package/dist/lib/element/resolve-primitive-inputs.js +17 -4
- package/dist/lib/element/resolve-primitive-inputs.js.map +2 -2
- package/dist/lib/events/event-facade.d.ts +18 -0
- package/dist/lib/events/event-facade.js +28 -2
- package/dist/lib/events/event-facade.js.map +2 -2
- package/dist/lib/events/hit-test.js +2 -1
- package/dist/lib/events/hit-test.js.map +2 -2
- package/dist/lib/events/propagation.d.ts +2 -1
- package/dist/lib/events/propagation.js +22 -16
- package/dist/lib/events/propagation.js.map +2 -2
- package/dist/lib/events/registrations.d.ts +10 -0
- package/dist/lib/events/registrations.js +160 -5
- package/dist/lib/events/registrations.js.map +2 -2
- package/dist/lib/execute-render.js +25 -1
- package/dist/lib/execute-render.js.map +2 -2
- package/dist/lib/filter/filter-region.js +3 -10
- package/dist/lib/filter/filter-region.js.map +2 -2
- package/dist/lib/focus/focus-manager.d.ts +8 -1
- package/dist/lib/focus/focus-manager.js +87 -43
- package/dist/lib/focus/focus-manager.js.map +2 -2
- package/dist/lib/focus/geometry.d.ts +2 -0
- package/dist/lib/focus/geometry.js +6 -0
- package/dist/lib/focus/geometry.js.map +2 -2
- package/dist/lib/geometry/path-bend-guide.js +1 -1
- package/dist/lib/geometry/path-bend-guide.js.map +2 -2
- package/dist/lib/geometry/path-geometry.js +12 -11
- package/dist/lib/geometry/path-geometry.js.map +2 -2
- package/dist/lib/geometry/path-transforms.js +17 -21
- package/dist/lib/geometry/path-transforms.js.map +2 -2
- package/dist/lib/geometry/path-warp-bezier.js +3 -1
- package/dist/lib/geometry/path-warp-bezier.js.map +2 -2
- package/dist/lib/geometry/path-warp.js +1 -1
- package/dist/lib/geometry/path-warp.js.map +2 -2
- package/dist/lib/global-state.js +2 -0
- package/dist/lib/global-state.js.map +2 -2
- package/dist/lib/hooks/use-animated-value.d.ts +11 -21
- package/dist/lib/hooks/use-animated-value.js +23 -70
- package/dist/lib/hooks/use-animated-value.js.map +3 -3
- package/dist/lib/hooks/use-playback.js +1 -0
- package/dist/lib/hooks/use-playback.js.map +2 -2
- package/dist/lib/html/html-events.d.ts +32 -0
- package/dist/lib/html/html-events.js +179 -0
- package/dist/lib/html/html-events.js.map +7 -0
- package/dist/lib/html/html-service.d.ts +8 -2
- package/dist/lib/html/html-service.js +198 -65
- package/dist/lib/html/html-service.js.map +2 -2
- package/dist/lib/html/overlay-config.js +7 -6
- package/dist/lib/html/overlay-config.js.map +2 -2
- package/dist/lib/html/types.d.ts +29 -2
- package/dist/lib/layout/absolute.d.ts +11 -5
- package/dist/lib/layout/absolute.js +329 -55
- package/dist/lib/layout/absolute.js.map +3 -3
- package/dist/lib/layout/allocation-checkpoint-owner.d.ts +11 -0
- package/dist/lib/layout/allocation-checkpoint-owner.js +86 -0
- package/dist/lib/layout/allocation-checkpoint-owner.js.map +7 -0
- package/dist/lib/layout/allocation-checkpoint.d.ts +53 -0
- package/dist/lib/layout/allocation-checkpoint.js +463 -0
- package/dist/lib/layout/allocation-checkpoint.js.map +7 -0
- package/dist/lib/layout/allocation-dependencies.d.ts +30 -0
- package/dist/lib/layout/allocation-dependencies.js +90 -0
- package/dist/lib/layout/allocation-dependencies.js.map +7 -0
- package/dist/lib/layout/allocation-revision.d.ts +13 -0
- package/dist/lib/layout/allocation-revision.js +67 -0
- package/dist/lib/layout/allocation-revision.js.map +7 -0
- package/dist/lib/layout/box-insets.d.ts +17 -0
- package/dist/lib/layout/box-insets.js +138 -0
- package/dist/lib/layout/box-insets.js.map +7 -0
- package/dist/lib/layout/box-sizing.d.ts +16 -0
- package/dist/lib/layout/box-sizing.js +77 -0
- package/dist/lib/layout/box-sizing.js.map +7 -0
- package/dist/lib/layout/box.js +42 -12
- package/dist/lib/layout/box.js.map +2 -2
- package/dist/lib/layout/canvas-measurement.d.ts +13 -0
- package/dist/lib/layout/canvas-measurement.js +57 -0
- package/dist/lib/layout/canvas-measurement.js.map +7 -0
- package/dist/lib/layout/context.d.ts +35 -6
- package/dist/lib/layout/context.js +72 -3
- package/dist/lib/layout/context.js.map +2 -2
- package/dist/lib/layout/define-layout-component.d.ts +23 -0
- package/dist/lib/layout/define-layout-component.js +84 -0
- package/dist/lib/layout/define-layout-component.js.map +7 -0
- package/dist/lib/layout/flex-allocation-cache.d.ts +42 -0
- package/dist/lib/layout/flex-baseline-mode.d.ts +2 -0
- package/dist/lib/layout/flex-baseline-mode.js +7 -0
- package/dist/lib/layout/flex-baseline-mode.js.map +7 -0
- package/dist/lib/layout/flex.d.ts +50 -15
- package/dist/lib/layout/flex.js +2124 -195
- package/dist/lib/layout/flex.js.map +3 -3
- package/dist/lib/layout/flow.js +225 -49
- package/dist/lib/layout/flow.js.map +2 -2
- package/dist/lib/layout/geometry-publication.d.ts +53 -0
- package/dist/lib/layout/geometry-publication.js +244 -0
- package/dist/lib/layout/geometry-publication.js.map +7 -0
- package/dist/lib/layout/grid-kernel.d.ts +63 -0
- package/dist/lib/layout/grid-kernel.js +168 -0
- package/dist/lib/layout/grid-kernel.js.map +7 -0
- package/dist/lib/layout/grid.d.ts +63 -4
- package/dist/lib/layout/grid.js +767 -171
- package/dist/lib/layout/grid.js.map +3 -3
- package/dist/lib/layout/measure.d.ts +55 -3
- package/dist/lib/layout/measure.js +448 -15
- package/dist/lib/layout/measure.js.map +2 -2
- package/dist/lib/layout/overlay.js +81 -23
- package/dist/lib/layout/overlay.js.map +2 -2
- package/dist/lib/layout/participation.d.ts +27 -0
- package/dist/lib/layout/participation.js +188 -0
- package/dist/lib/layout/participation.js.map +7 -0
- package/dist/lib/layout/place-child.js +1 -1
- package/dist/lib/layout/place-child.js.map +2 -2
- package/dist/lib/layout/positioning-diagnostics.d.ts +1 -1
- package/dist/lib/layout/positioning-diagnostics.js +13 -2
- package/dist/lib/layout/positioning-diagnostics.js.map +2 -2
- package/dist/lib/layout/prepared-root.d.ts +121 -0
- package/dist/lib/layout/prepared-root.js +360 -0
- package/dist/lib/layout/prepared-root.js.map +7 -0
- package/dist/lib/layout/standalone-kernel.d.ts +60 -0
- package/dist/lib/layout/standalone-kernel.js +722 -0
- package/dist/lib/layout/standalone-kernel.js.map +7 -0
- package/dist/lib/layout/topology.d.ts +21 -0
- package/dist/lib/layout/topology.js +113 -0
- package/dist/lib/layout/topology.js.map +7 -0
- package/dist/lib/layout/types.d.ts +5 -0
- package/dist/lib/layout/wasm/artifact.d.ts +1 -0
- package/dist/lib/layout/wasm/artifact.js +5 -0
- package/dist/lib/layout/wasm/artifact.js.map +7 -0
- package/dist/lib/layout/wasm/bytes.d.ts +1 -0
- package/dist/lib/layout/wasm/bytes.js +5 -0
- package/dist/lib/layout/wasm/bytes.js.map +7 -0
- package/dist/lib/layout/wasm/embedded.d.ts +2 -0
- package/dist/lib/layout/wasm/embedded.js +12 -0
- package/dist/lib/layout/wasm/embedded.js.map +7 -0
- package/dist/lib/layout/wasm/layout.wasm +0 -0
- package/dist/lib/layout/wasm/module.d.ts +8 -0
- package/dist/lib/layout/wasm/module.js +70 -0
- package/dist/lib/layout/wasm/module.js.map +7 -0
- package/dist/lib/layout/wasm/region.d.ts +267 -0
- package/dist/lib/layout/wasm/region.js +1018 -0
- package/dist/lib/layout/wasm/region.js.map +7 -0
- package/dist/lib/manipulation/controller.js +4 -7
- package/dist/lib/manipulation/controller.js.map +2 -2
- package/dist/lib/manipulation/frame.js +1 -1
- package/dist/lib/manipulation/frame.js.map +2 -2
- package/dist/lib/manipulation/handles.js +32 -33
- package/dist/lib/manipulation/handles.js.map +2 -2
- package/dist/lib/manipulation/solve.js +12 -10
- package/dist/lib/manipulation/solve.js.map +2 -2
- package/dist/lib/mount-pibbl.js +1 -0
- package/dist/lib/mount-pibbl.js.map +2 -2
- package/dist/lib/mount-prepared-pibbl.d.ts +5 -0
- package/dist/lib/mount-prepared-pibbl.js +29 -0
- package/dist/lib/mount-prepared-pibbl.js.map +7 -0
- package/dist/lib/mount-request.d.ts +8 -0
- package/dist/lib/mount-request.js +41 -0
- package/dist/lib/mount-request.js.map +7 -0
- package/dist/lib/pibbl.d.ts +21 -13
- package/dist/lib/pibbl.js +18 -16
- package/dist/lib/pibbl.js.map +2 -2
- package/dist/lib/recording/recording.d.ts +43 -0
- package/dist/lib/recording/recording.js +555 -0
- package/dist/lib/recording/recording.js.map +7 -0
- package/dist/lib/recording/types.d.ts +118 -0
- package/dist/lib/recording/wasm-bytes.d.ts +1 -0
- package/dist/lib/recording/wasm-bytes.js +5 -0
- package/dist/lib/recording/wasm-bytes.js.map +7 -0
- package/dist/lib/recording/worker-source.d.ts +1 -0
- package/dist/lib/recording/worker-source.js +5 -0
- package/dist/lib/recording/worker-source.js.map +7 -0
- package/dist/lib/render-layer/controller.d.ts +9 -3
- package/dist/lib/render-layer/controller.js +259 -110
- package/dist/lib/render-layer/controller.js.map +2 -2
- package/dist/lib/render-transaction.d.ts +12 -2
- package/dist/lib/render-transaction.js +69 -1
- package/dist/lib/render-transaction.js.map +2 -2
- package/dist/lib/render.js +32 -8
- package/dist/lib/render.js.map +2 -2
- package/dist/lib/scheduler/realm-scheduler.d.ts +2 -0
- package/dist/lib/scheduler/realm-scheduler.js +55 -26
- package/dist/lib/scheduler/realm-scheduler.js.map +2 -2
- package/dist/lib/scheduler/renderer-participant.js +1 -0
- package/dist/lib/scheduler/renderer-participant.js.map +2 -2
- package/dist/lib/series-inspection-frame.d.ts +18 -0
- package/dist/lib/series-inspection-frame.js +70 -0
- package/dist/lib/series-inspection-frame.js.map +7 -0
- package/dist/lib/signals/edge.d.ts +7 -4
- package/dist/lib/signals/edge.js +25 -3
- package/dist/lib/signals/edge.js.map +2 -2
- package/dist/lib/signals/graph.d.ts +16 -2
- package/dist/lib/signals/graph.js +54 -12
- package/dist/lib/signals/graph.js.map +2 -2
- package/dist/lib/signals/input-provision.d.ts +15 -0
- package/dist/lib/signals/input-provision.js +53 -3
- package/dist/lib/signals/input-provision.js.map +2 -2
- package/dist/lib/signals/render-consumer.d.ts +3 -0
- package/dist/lib/signals/render-consumer.js +22 -14
- package/dist/lib/signals/render-consumer.js.map +2 -2
- package/dist/lib/style/positioning.d.ts +50 -2
- package/dist/lib/style/positioning.js +28 -4
- package/dist/lib/style/positioning.js.map +2 -2
- package/dist/lib/style/resolve-built-in.d.ts +4 -3
- package/dist/lib/style/resolve-built-in.js +17 -3
- package/dist/lib/style/resolve-built-in.js.map +2 -2
- package/dist/lib/style/resolve-dispatch.d.ts +3 -0
- package/dist/lib/style/resolve-dispatch.js +77 -4
- package/dist/lib/style/resolve-dispatch.js.map +2 -2
- package/dist/lib/style/resolve-length.d.ts +2 -0
- package/dist/lib/style/resolve-length.js +13 -9
- package/dist/lib/style/resolve-length.js.map +2 -2
- package/dist/lib/style/sizing-length.d.ts +51 -0
- package/dist/lib/style/sizing-length.js +77 -0
- package/dist/lib/style/sizing-length.js.map +7 -0
- package/dist/lib/style/types.d.ts +63 -25
- package/dist/lib/surface/root-surface.js +10 -6
- package/dist/lib/surface/root-surface.js.map +2 -2
- package/dist/lib/textures/texture.js +10 -8
- package/dist/lib/textures/texture.js.map +2 -2
- package/dist/lib/transitions/capture.js +4 -1
- package/dist/lib/transitions/capture.js.map +2 -2
- package/dist/lib/transitions/embers-physics.js +17 -10
- package/dist/lib/transitions/embers-physics.js.map +2 -2
- package/dist/lib/types.d.ts +110 -1
- package/dist/sync.d.ts +16 -0
- package/dist/sync.js +13 -0
- package/dist/sync.js.map +7 -0
- package/dist/sync.mjs +1 -0
- package/package.json +43 -6
- package/dist/features/viz/lib/scale.d.ts +0 -11
- package/dist/features/viz/lib/scale.js +0 -80
- package/dist/features/viz/lib/scale.js.map +0 -7
- package/dist/features/viz/lib/use-scale.d.ts +0 -20
- package/dist/features/viz/lib/use-scale.js +0 -10
- package/dist/features/viz/lib/use-scale.js.map +0 -7
package/dist/lib/render.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/lib/render.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n clearComponentState,\n getAnonElemName,\n GLOBAL_STATE,\n} from './global-state.js';\nimport { Teardowns } from './teardowns.js';\nimport { PibblComponentRefs } from './types.js';\nimport type { LayoutBox } from './layout/types.js';\nimport { finalizeHookSlots } from './hooks/hook-slot.js';\nimport { resolveElementStyle, takePreNormalizedStyle } from './style/resolve-dispatch.js';\nimport {\n getPlacementSignalHandoff,\n enterPlacementHandoffCapture,\n withPlacementHandoff,\n} from './style/positioning.js';\nimport {\n enterElementEnhancers,\n exitElementEnhancers,\n hasElementEnhancers,\n prepareElementEnhancers,\n reconcileElementEnhancers,\n} from './element-enhancers.js';\nimport {\n getPlacementIdentityHint,\n getPrimitiveDefinition,\n getPrimitiveReceiverToken,\n getElementSource,\n isPlacementConsumed,\n} from './element/metadata.js';\nimport { resolvePrimitiveInputs } from './element/resolve-primitive-inputs.js';\nimport { materializeContainerChildren } from './element/children.js';\nimport { isFragmentElement } from './element/fragment.js';\nimport type { PibblElement, PibblNode, PibblNodeInput } from './element/types.js';\nimport {\n backendMismatchError,\n type PibblBackendDriver,\n type PibblBackendFrame,\n} from './backend/types.js';\nimport {\n collectComponentSignalReads,\n disposeSignalRenderConsumer,\n} from './signals/render-consumer.js';\nimport { adoptReceiverInputProvision } from './signals/input-provision.js';\nimport { untracked } from './signals/graph.js';\nimport { requestInstanceRender } from './scheduler/realm-scheduler.js';\nimport {\n getCurrentWorldTransform,\n hasCurrentWorldTransformCanvasDelta,\n} from './render-target.js';\n\nexport function render(\n node: PibblNode,\n parentId: string,\n parent: PibblComponentRefs<any> | undefined,\n): void {\n const elements = materializeContainerChildren(node, 'Pibbl root');\n renderPreparedChildren(elements, parentId, parent);\n}\n\nfunction renderPreparedChildren(\n elements: readonly PibblElement<any>[],\n parentId: string,\n parent: PibblComponentRefs<any> | undefined,\n): void {\n for (const element of elements) {\n renderPreparedElement(element, parentId, parent);\n }\n}\n\nfunction renderPreparedElement(\n element: PibblElement<any>,\n parentId: string,\n parent: PibblComponentRefs<any> | undefined,\n): void {\n if (isFragmentElement(element)) {\n renderKeyedFragment(element, parentId, parent);\n return;\n }\n renderComponentElement(element, parentId, parent);\n}\n\nfunction renderKeyedFragment(\n element: PibblElement<any>,\n parentId: string,\n parent: PibblComponentRefs<any> | undefined,\n): void {\n try {\n const componentRefs = prepareComponentScope(\n element,\n parentId,\n parent,\n );\n reconcileElementEnhancers(\n componentRefs,\n GLOBAL_STATE.currentPibblInstance!,\n );\n const enteredEnhancers = enterElementEnhancers(componentRefs);\n let enhancerSuccess = false;\n let releaseComponent: (() => void) | undefined;\n try {\n releaseComponent = enterBackendComponent();\n collectComponentSignalReads(\n componentRefs,\n () => componentSignalReadOptions(componentRefs),\n commitSignalReads => {\n const receiverToken =\n getPrimitiveReceiverToken(componentRefs.element) ?? componentRefs;\n adoptReceiverInputProvision(\n GLOBAL_STATE.renderTransaction,\n receiverToken,\n );\n const children = materializeContainerChildren(\n element.props.children,\n element,\n );\n commitSignalReads();\n untracked(() => {\n renderPreparedChildren(children, componentRefs.id, componentRefs);\n });\n },\n );\n componentRefs.signalConsumer?.markClean();\n enhancerSuccess = true;\n } finally {\n try {\n releaseComponent?.();\n } finally {\n exitElementEnhancers(enteredEnhancers, enhancerSuccess);\n }\n }\n } finally {\n clearComponentState();\n }\n}\n\nfunction renderComponentElement<P>(\n element: PibblElement<P>,\n parentId: string,\n parent: PibblComponentRefs<any> | undefined,\n): void {\n try {\n const componentRefs = prepareComponentScope(element, parentId, parent);\n const id = componentRefs.id;\n GLOBAL_STATE.componentRefs = componentRefs;\n GLOBAL_STATE.componentHookIndex = 0;\n const definition = getPrimitiveDefinition(componentRefs.element.type);\n const receiverToken =\n getPrimitiveReceiverToken(componentRefs.element) ?? componentRefs;\n\n reconcileElementEnhancers(\n componentRefs,\n GLOBAL_STATE.currentPibblInstance!,\n definition !== undefined,\n );\n const enteredEnhancers = enterElementEnhancers(componentRefs);\n let enhancerSuccess = false;\n let releaseComponent: (() => void) | undefined;\n try {\n const { driver, frame } = requireBackendFrame();\n releaseComponent = driver.enterComponent(frame);\n let onAfterRender: (() => void) | undefined;\n let afterRenderFinished = false;\n const finishAfterRender = () => {\n if (afterRenderFinished) return;\n afterRenderFinished = true;\n onAfterRender ??= componentRefs.onAfterRender;\n componentRefs.onAfterRender = undefined;\n onAfterRender?.();\n };\n try {\n collectComponentSignalReads(componentRefs, () => ({\n ...componentSignalReadOptions(componentRefs),\n }), commitSignalReads => {\n adoptReceiverInputProvision(\n GLOBAL_STATE.renderTransaction,\n receiverToken,\n );\n const renderProgram = (invoke: () => PibblNodeInput | void) => {\n try {\n const previousReceiverToken = GLOBAL_STATE.primitiveReceiverToken;\n GLOBAL_STATE.primitiveReceiverToken = receiverToken;\n let result: PibblNodeInput | void;\n try {\n result = invoke();\n } finally {\n GLOBAL_STATE.primitiveReceiverToken = previousReceiverToken;\n }\n finalizeHookSlots(componentRefs);\n\n onAfterRender = componentRefs.onAfterRender;\n componentRefs.onAfterRender = undefined;\n const children = materializeContainerChildren(\n result as PibblNodeInput,\n componentRefs.element,\n );\n commitSignalReads();\n\n untracked(() => {\n renderPreparedChildren(children, id, componentRefs);\n });\n } finally {\n finishAfterRender();\n }\n };\n if (definition) {\n if (definition.backend !== driver.token) {\n throw backendMismatchError(\n componentRefs.element.type.name || 'Anonymous',\n definition.backend,\n driver,\n getElementSource(componentRefs.element),\n );\n }\n const preparedStyle = takePreNormalizedStyle(componentRefs.element);\n const inputs = resolvePrimitiveInputs(\n componentRefs.element,\n definition,\n preparedStyle,\n );\n const style = (() => {\n const previousReceiverToken = GLOBAL_STATE.primitiveReceiverToken;\n GLOBAL_STATE.primitiveReceiverToken = receiverToken;\n try {\n return resolveElementStyle(\n componentRefs.element,\n inputs.style,\n true,\n preparedStyle,\n );\n } finally {\n GLOBAL_STATE.primitiveReceiverToken = previousReceiverToken;\n }\n })();\n const componentName = componentRefs.element.type.name || 'Anonymous';\n const source = getElementSource(componentRefs.element);\n const props = inputs.props;\n const tracksPresentationLineage = hasElementEnhancers(componentRefs);\n const tracksCanvasWorldTransform =\n GLOBAL_STATE.worldBaseTransform !== undefined &&\n GLOBAL_STATE.renderContext !== undefined &&\n GLOBAL_STATE.renderTarget !== undefined;\n const prepared = tracksPresentationLineage\n ? prepareElementEnhancers(componentRefs, {\n componentType: componentRefs.element.type,\n componentName,\n props,\n style,\n source,\n parentWorldTransform: tracksCanvasWorldTransform ?\n getCurrentWorldTransform() : new DOMMatrix(),\n presentationTransformLineage:\n GLOBAL_STATE.presentationTransformLineage,\n hasUntrackedCanvasTransform: tracksCanvasWorldTransform &&\n hasCurrentWorldTransformCanvasDelta(),\n })\n : undefined;\n let invoked = false;\n if (tracksPresentationLineage) {\n GLOBAL_STATE.presentationTransformLineageTrackingDepth += 1;\n }\n try {\n driver.runPrimitive(frame, {\n componentName,\n source,\n definition,\n props,\n style,\n presentationTransform2D: prepared?.presentationTransform2D,\n }, invoke => {\n if (invoked) {\n throw new Error(\n `${driver.name} invoked ${componentName} more than once in one traversal.`,\n );\n }\n invoked = true;\n renderProgram(invoke);\n });\n } finally {\n if (tracksPresentationLineage) {\n GLOBAL_STATE.presentationTransformLineageTrackingDepth -= 1;\n }\n }\n if (!invoked) {\n throw new Error(\n `${driver.name} did not invoke ${componentName} during traversal.`,\n );\n }\n } else {\n // Layout owns the outer translation. A private marker survives one\n // intentional `{ ...style }` forward without changing other children.\n const preparedStyle = takePreNormalizedStyle(componentRefs.element);\n const signalHandoff = getPlacementSignalHandoff(componentRefs.element);\n const consumedStyle = preparedStyle?.style ?? signalHandoff;\n const receivesPlacementHandoff =\n isPlacementConsumed(componentRefs.element) ||\n signalHandoff !== undefined;\n const props = isPlacementConsumed(componentRefs.element) ?\n withPlacementHandoff(componentRefs.element.props, consumedStyle) :\n componentRefs.element.props;\n renderProgram(() => {\n const releaseHandoff = receivesPlacementHandoff ?\n enterPlacementHandoffCapture(props, consumedStyle) :\n undefined;\n try {\n return componentRefs.element.type(props);\n } finally {\n releaseHandoff?.();\n }\n });\n }\n });\n componentRefs.signalConsumer?.markClean();\n } finally {\n try {\n finishAfterRender();\n } finally {\n releaseComponent?.();\n }\n }\n enhancerSuccess = true;\n } finally {\n exitElementEnhancers(enteredEnhancers, enhancerSuccess);\n }\n } finally {\n clearComponentState();\n }\n}\n\nfunction componentSignalReadOptions(\n componentRefs: PibblComponentRefs<any>,\n) {\n const pibblInstance = GLOBAL_STATE.currentPibblInstance!;\n return {\n debugName: `${componentRefs.element.type.name || 'Anonymous'} (${componentRefs.id})`,\n invalidate: () => {\n if (\n GLOBAL_STATE.pibblInstances.get(pibblInstance.canvas) !== pibblInstance ||\n pibblInstance.mainTeardowns.closed ||\n componentRefs.teardowns.closed ||\n pibblInstance.refs.get(componentRefs.id) !== componentRefs\n ) {\n return;\n }\n requestInstanceRender(pibblInstance);\n },\n onMaterialize: () => {\n if (componentRefs.signalConsumerTeardownAttached) return;\n componentRefs.signalConsumerTeardownAttached = true;\n componentRefs.teardowns.add(() => {\n const consumer = componentRefs.signalConsumer;\n componentRefs.signalConsumer = undefined;\n if (consumer !== undefined) {\n disposeSignalRenderConsumer(consumer);\n }\n });\n },\n };\n}\n\nfunction requireBackendFrame(): {\n driver: PibblBackendDriver<unknown>;\n frame: PibblBackendFrame<unknown>;\n} {\n const driver = GLOBAL_STATE.backendDriver;\n const frame = GLOBAL_STATE.backendFrame;\n if (!driver || !frame) {\n throw new Error('Pibbl component traversal requires an active backend frame.');\n }\n return { driver, frame };\n}\n\nfunction enterBackendComponent(): () => void {\n const { driver, frame } = requireBackendFrame();\n return driver.enterComponent(frame);\n}\n\nfunction prepareComponentScope<P>(\n element: PibblElement<P>,\n parentId: string,\n parent: PibblComponentRefs<any> | undefined,\n): PibblComponentRefs<P> {\n const pibblInstance = GLOBAL_STATE.currentPibblInstance!;\n const typeName = getElementTypeName(element, parentId);\n const id = ensureUniqueId(parentId, typeName);\n GLOBAL_STATE.seenIds!.add(id);\n let componentRefs = pibblInstance.refs.get(id) as\n PibblComponentRefs<P> | undefined;\n GLOBAL_STATE.componentIsMounting = componentRefs === undefined;\n if (componentRefs === undefined) {\n const teardowns = new Teardowns();\n teardowns.follow(pibblInstance.mainTeardowns);\n const mountedRefs: PibblComponentRefs<P> = {\n id,\n parent,\n element,\n renderGeneration: pibblInstance.renderGeneration,\n refs: [],\n hooks: [],\n signalConsumer: undefined,\n signalConsumerTeardownAttached: false,\n teardowns,\n onAfterRender: undefined,\n };\n pibblInstance.refs.set(id, mountedRefs);\n componentRefs = mountedRefs;\n }\n\n componentRefs.parent = parent;\n componentRefs.element = element;\n componentRefs.renderGeneration = pibblInstance.renderGeneration;\n const layout = GLOBAL_STATE.layoutStack?.at(-1);\n if (!layout) componentRefs.layoutEntry = undefined;\n else {\n const previous = componentRefs.layoutEntry;\n const allocation = captureLayoutBox(previous?.allocation, layout.allocation);\n const percentageBasis = captureLayoutBox(previous?.percentageBasis, layout.percentageBasis);\n if (allocation !== previous?.allocation || percentageBasis !== previous?.percentageBasis) {\n componentRefs.layoutEntry = Object.freeze({ allocation, percentageBasis });\n }\n }\n return componentRefs;\n}\n\n/** Constant-sized numeric evidence; unchanged entry contexts allocate nothing. */\nfunction captureLayoutBox(previous: Readonly<LayoutBox> | undefined, box: Readonly<LayoutBox>): Readonly<LayoutBox> {\n if (previous && previous.x === box.x && previous.y === box.y &&\n previous.width === box.width && previous.height === box.height) return previous;\n return Object.freeze({ x: box.x, y: box.y, width: box.width, height: box.height });\n}\n\nfunction getElementTypeName(element: PibblElement<any>, parentId: string): string {\n const identityHint = getPlacementIdentityHint<{\n type: PibblElement<any>['type'];\n key: string | undefined;\n occurrence: number;\n }>(element);\n const identityType = identityHint?.type ?? element.type;\n const typeIdentity = getAnonElemName(identityType);\n const typeName = identityType.name || 'Anonymous';\n const key = identityHint ? identityHint.key : element.key;\n if (key === undefined) {\n const occurrence = identityHint?.occurrence ?? 0;\n return `${typeName}:${typeIdentity}${occurrence ? `_${occurrence}` : ''}`;\n }\n\n const encodedKey = encodeURIComponent(key);\n const siblingKey = `${parentId}/${encodedKey}`;\n if (GLOBAL_STATE.seenKeys!.has(siblingKey)) {\n throw new Error(`Duplicate Pibbl key \"${key}\" under \"${parentId}\"`);\n }\n GLOBAL_STATE.seenKeys!.add(siblingKey);\n return `${typeName}:${typeIdentity}[${encodedKey}]`;\n}\n\nfunction ensureUniqueId(parentId: string, typeName: string) {\n let id = `${parentId}/${typeName}`;\n let n = 1;\n while (GLOBAL_STATE.seenIds!.has(id)) {\n id = `${parentId}/${typeName}_${n++}`;\n }\n return id;\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import { stageLayoutGeometry } from './layout/geometry-publication.js';\nimport { wireStructuralEvents, type PibblStructuralEventProps } from './components/structural-events.js';\nimport { layoutParticipation, contentsChildren, isContentsTransform, registerLayoutComponentMount, resumeLayoutComponent, retainHiddenLayoutDescendants } from './layout/participation.js';\nimport { isLayoutComponent, placedLayoutComponentRoot } from './layout/define-layout-component.js';\nimport {\n clearComponentState,\n getAnonElemName,\n GLOBAL_STATE,\n NO_PENDING_ROOT,\n} from './global-state.js';\nimport { Teardowns } from './teardowns.js';\nimport { PibblComponentRefs } from './types.js';\nimport type { LayoutBox } from './layout/types.js';\nimport { finalizeHookSlots } from './hooks/hook-slot.js';\nimport { resolveElementStyle, takePreNormalizedStyle } from './style/resolve-dispatch.js';\nimport {\n getPlacementSignalHandoff,\n enterPlacementHandoffCapture,\n withPlacementHandoff,\n} from './style/positioning.js';\nimport {\n enterElementEnhancers,\n exitElementEnhancers,\n hasElementEnhancers,\n prepareElementEnhancers,\n reconcileElementEnhancers,\n} from './element-enhancers.js';\nimport {\n getElementMetadata,\n getPlacementIdentityHint,\n getPrimitiveDefinition,\n getPrimitiveReceiverToken,\n getElementSource,\n isPlacementConsumed,\n} from './element/metadata.js';\nimport { resolvePrimitiveInputs } from './element/resolve-primitive-inputs.js';\nimport { materializeContainerChildren } from './element/children.js';\nimport { isFragmentElement } from './element/fragment.js';\nimport type { PibblElement, PibblNode, PibblNodeInput } from './element/types.js';\nimport {\n backendMismatchError,\n type PibblBackendDriver,\n type PibblBackendFrame,\n} from './backend/types.js';\nimport {\n collectComponentSignalReads,\n disposeSignalRenderConsumer,\n} from './signals/render-consumer.js';\nimport { adoptReceiverInputProvision } from './signals/input-provision.js';\nimport { untracked } from './signals/graph.js';\nimport { requestInstanceRender } from './scheduler/realm-scheduler.js';\nimport {\n getCurrentWorldTransform,\n hasCurrentWorldTransformCanvasDelta,\n} from './render-target.js';\n\nexport function render(\n node: PibblNode,\n parentId: string,\n parent: PibblComponentRefs<any> | undefined,\n): void {\n const elements = materializeContainerChildren(node, 'Pibbl root');\n renderPreparedChildren(elements, parentId, parent);\n}\n\nfunction renderPreparedChildren(\n elements: readonly PibblElement<any>[],\n parentId: string,\n parent: PibblComponentRefs<any> | undefined,\n): void {\n for (const element of elements) {\n renderPreparedElement(element, parentId, parent);\n }\n}\n\nfunction renderPreparedElement(\n element: PibblElement<any>,\n parentId: string,\n parent: PibblComponentRefs<any> | undefined,\n): void {\n if (isFragmentElement(element)) {\n renderKeyedFragment(element, parentId, parent);\n return;\n }\n renderComponentElement(element, parentId, parent);\n}\n\nfunction renderKeyedFragment(\n element: PibblElement<any>,\n parentId: string,\n parent: PibblComponentRefs<any> | undefined,\n): void {\n try {\n const componentRefs = prepareComponentScope(\n element,\n parentId,\n parent,\n );\n reconcileElementEnhancers(\n componentRefs,\n GLOBAL_STATE.currentPibblInstance!,\n );\n const enteredEnhancers = enterElementEnhancers(componentRefs);\n let enhancerSuccess = false;\n let releaseComponent: (() => void) | undefined;\n try {\n releaseComponent = enterBackendComponent();\n collectComponentSignalReads(\n componentRefs,\n () => componentSignalReadOptions(componentRefs),\n commitSignalReads => {\n const receiverToken =\n getPrimitiveReceiverToken(componentRefs.element) ?? componentRefs;\n adoptReceiverInputProvision(\n GLOBAL_STATE.renderTransaction,\n receiverToken,\n );\n const children = materializeContainerChildren(\n element.props.children,\n element,\n );\n commitSignalReads();\n untracked(() => {\n renderPreparedChildren(children, componentRefs.id, componentRefs);\n });\n },\n );\n componentRefs.signalConsumer?.markClean();\n enhancerSuccess = true;\n } finally {\n try {\n releaseComponent?.();\n } finally {\n exitElementEnhancers(enteredEnhancers, enhancerSuccess);\n }\n }\n } finally {\n clearComponentState();\n }\n}\n\nfunction renderComponentElement<P>(\n element: PibblElement<P>,\n parentId: string,\n parent: PibblComponentRefs<any> | undefined,\n): void {\n try {\n const componentRefs = prepareComponentScope(element, parentId, parent);\n const id = componentRefs.id;\n GLOBAL_STATE.componentRefs = componentRefs;\n GLOBAL_STATE.componentHookIndex = 0;\n const definition = getPrimitiveDefinition(componentRefs.element.type);\n const receiverToken =\n getPrimitiveReceiverToken(componentRefs.element) ?? componentRefs;\n\n reconcileElementEnhancers(\n componentRefs,\n GLOBAL_STATE.currentPibblInstance!,\n definition !== undefined,\n );\n const enteredEnhancers = enterElementEnhancers(componentRefs);\n let enhancerSuccess = false;\n let releaseComponent: (() => void) | undefined;\n try {\n const { driver, frame } = requireBackendFrame();\n releaseComponent = driver.enterComponent(frame);\n let onAfterRender: (() => void) | undefined;\n let afterRenderFinished = false;\n const finishAfterRender = () => {\n if (afterRenderFinished) return;\n afterRenderFinished = true;\n onAfterRender ??= componentRefs.onAfterRender;\n componentRefs.onAfterRender = undefined;\n onAfterRender?.();\n };\n try {\n collectComponentSignalReads(componentRefs, () => ({\n ...componentSignalReadOptions(componentRefs),\n }), commitSignalReads => {\n adoptReceiverInputProvision(\n GLOBAL_STATE.renderTransaction,\n receiverToken,\n );\n const preparedStyle = takePreNormalizedStyle(componentRefs.element);\n const participation = layoutParticipation(componentRefs.element, preparedStyle ?? null);\n if (participation === 'hidden') {\n retainHiddenLayoutDescendants(componentRefs);\n commitSignalReads();\n return;\n }\n const renderProgram = (invoke: () => PibblNodeInput | void) => {\n try {\n const previousReceiverToken = GLOBAL_STATE.primitiveReceiverToken;\n GLOBAL_STATE.primitiveReceiverToken = receiverToken;\n let result: PibblNodeInput | void;\n try {\n stageLayoutGeometry(componentRefs);\n result = invoke();\n } finally {\n GLOBAL_STATE.primitiveReceiverToken = previousReceiverToken;\n }\n finalizeHookSlots(componentRefs);\n\n onAfterRender = componentRefs.onAfterRender;\n componentRefs.onAfterRender = undefined;\n const children = materializeContainerChildren(\n result as PibblNodeInput,\n componentRefs.element,\n );\n commitSignalReads();\n\n untracked(() => {\n renderPreparedChildren(children, id, componentRefs);\n });\n } finally {\n finishAfterRender();\n }\n };\n const assignedContents = getElementMetadata(componentRefs.element)?.layoutContentsChildren;\n if (participation === 'contents' && !isContentsTransform(componentRefs.element.type)) {\n const children = assignedContents ?? contentsChildren(componentRefs.element);\n wireStructuralEvents(componentRefs.element.props as PibblStructuralEventProps);\n renderProgram(() => children);\n return;\n }\n if (definition) {\n if (definition.backend !== driver.token) {\n throw backendMismatchError(\n componentRefs.element.type.name || 'Anonymous',\n definition.backend,\n driver,\n getElementSource(componentRefs.element),\n );\n }\n const inputs = resolvePrimitiveInputs(\n componentRefs.element,\n definition,\n preparedStyle,\n );\n const style = (() => {\n const previousReceiverToken = GLOBAL_STATE.primitiveReceiverToken;\n GLOBAL_STATE.primitiveReceiverToken = receiverToken;\n try {\n return resolveElementStyle(\n componentRefs.element,\n inputs.style,\n true,\n preparedStyle,\n );\n } finally {\n GLOBAL_STATE.primitiveReceiverToken = previousReceiverToken;\n }\n })();\n const componentName = componentRefs.element.type.name || 'Anonymous';\n const source = getElementSource(componentRefs.element);\n const props = assignedContents ? { ...inputs.props, children: assignedContents } : inputs.props;\n const tracksPresentationLineage = hasElementEnhancers(componentRefs);\n const tracksCanvasWorldTransform =\n GLOBAL_STATE.worldBaseTransform !== undefined &&\n GLOBAL_STATE.renderContext !== undefined &&\n GLOBAL_STATE.renderTarget !== undefined;\n const prepared = tracksPresentationLineage\n ? prepareElementEnhancers(componentRefs, {\n componentType: componentRefs.element.type,\n componentName,\n props,\n style,\n source,\n parentWorldTransform: tracksCanvasWorldTransform ?\n getCurrentWorldTransform() : new DOMMatrix(),\n presentationTransformLineage:\n GLOBAL_STATE.presentationTransformLineage,\n hasUntrackedCanvasTransform: tracksCanvasWorldTransform &&\n hasCurrentWorldTransformCanvasDelta(),\n })\n : undefined;\n let invoked = false;\n if (tracksPresentationLineage) {\n GLOBAL_STATE.presentationTransformLineageTrackingDepth += 1;\n }\n try {\n driver.runPrimitive(frame, {\n componentName,\n source,\n definition,\n props,\n style,\n presentationTransform2D: prepared?.presentationTransform2D,\n }, invoke => {\n if (invoked) {\n throw new Error(\n `${driver.name} invoked ${componentName} more than once in one traversal.`,\n );\n }\n invoked = true;\n renderProgram(invoke);\n });\n } finally {\n if (tracksPresentationLineage) {\n GLOBAL_STATE.presentationTransformLineageTrackingDepth -= 1;\n }\n }\n if (!invoked) {\n throw new Error(\n `${driver.name} did not invoke ${componentName} during traversal.`,\n );\n }\n } else {\n // Layout owns the outer translation. A private marker survives one\n // intentional `{ ...style }` forward without changing other children.\n const signalHandoff = getPlacementSignalHandoff(componentRefs.element);\n const consumedStyle = preparedStyle?.style ?? signalHandoff;\n const receivesPlacementHandoff =\n isPlacementConsumed(componentRefs.element) ||\n signalHandoff !== undefined;\n const props = isPlacementConsumed(componentRefs.element) ?\n withPlacementHandoff(componentRefs.element.props, consumedStyle) :\n componentRefs.element.props;\n renderProgram(() => {\n const releaseHandoff = receivesPlacementHandoff ?\n enterPlacementHandoffCapture(props, consumedStyle) :\n undefined;\n try {\n return isLayoutComponent(componentRefs.element.type) ?\n placedLayoutComponentRoot(componentRefs.element, preparedStyle) :\n componentRefs.element.type(props);\n } finally {\n releaseHandoff?.();\n }\n });\n }\n });\n componentRefs.signalConsumer?.markClean();\n } finally {\n try {\n finishAfterRender();\n } finally {\n releaseComponent?.();\n }\n }\n enhancerSuccess = true;\n } finally {\n exitElementEnhancers(enteredEnhancers, enhancerSuccess);\n }\n } finally {\n clearComponentState();\n }\n}\n\nlet signalInputRender: Parameters<typeof requestInstanceRender>[1];\n\nfunction componentSignalReadOptions(\n componentRefs: PibblComponentRefs<any>,\n) {\n const pibblInstance = GLOBAL_STATE.currentPibblInstance!;\n return {\n debugName: `${componentRefs.element.type.name || 'Anonymous'} (${componentRefs.id})`,\n layoutOwner: pibblInstance,\n allocationReceiver: componentRefs,\n invalidate: () => {\n if (\n GLOBAL_STATE.pibblInstances.get(pibblInstance.canvas) !== pibblInstance ||\n pibblInstance.mainTeardowns.closed ||\n componentRefs.teardowns.closed ||\n pibblInstance.refs.get(componentRefs.id) !== componentRefs\n ) {\n return;\n }\n requestInstanceRender(pibblInstance, signalInputRender ??= { pendingRoot: NO_PENDING_ROOT, pendingUpdateParents: false, signalInput: true });\n },\n onMaterialize: () => {\n if (componentRefs.signalConsumerTeardownAttached) return;\n componentRefs.signalConsumerTeardownAttached = true;\n componentRefs.teardowns.add(() => {\n const consumer = componentRefs.signalConsumer;\n componentRefs.signalConsumer = undefined;\n if (consumer !== undefined) {\n disposeSignalRenderConsumer(consumer);\n }\n });\n },\n };\n}\n\nfunction requireBackendFrame(): {\n driver: PibblBackendDriver<unknown>;\n frame: PibblBackendFrame<unknown>;\n} {\n const driver = GLOBAL_STATE.backendDriver;\n const frame = GLOBAL_STATE.backendFrame;\n if (!driver || !frame) {\n throw new Error('Pibbl component traversal requires an active backend frame.');\n }\n return { driver, frame };\n}\n\nfunction enterBackendComponent(): () => void {\n const { driver, frame } = requireBackendFrame();\n return driver.enterComponent(frame);\n}\n\nfunction prepareComponentScope<P>(\n element: PibblElement<P>,\n parentId: string,\n parent: PibblComponentRefs<any> | undefined,\n): PibblComponentRefs<P> {\n const pibblInstance = GLOBAL_STATE.currentPibblInstance!;\n const typeName = getElementTypeName(element, parentId);\n const id = ensureUniqueId(parentId, typeName);\n GLOBAL_STATE.seenIds!.add(id);\n let componentRefs = pibblInstance.refs.get(id) as\n PibblComponentRefs<P> | undefined;\n GLOBAL_STATE.componentIsMounting = componentRefs === undefined;\n if (componentRefs === undefined) {\n const teardowns = new Teardowns();\n teardowns.follow(pibblInstance.mainTeardowns);\n const mountedRefs: PibblComponentRefs<P> = {\n id,\n parent,\n element,\n renderGeneration: pibblInstance.renderGeneration,\n refs: [],\n hooks: [],\n signalConsumer: undefined,\n signalConsumerTeardownAttached: false,\n teardowns,\n onAfterRender: undefined,\n };\n pibblInstance.refs.set(id, mountedRefs);\n registerLayoutComponentMount(mountedRefs);\n componentRefs = mountedRefs;\n }\n\n resumeLayoutComponent(componentRefs);\n componentRefs.parent = parent;\n componentRefs.element = element;\n componentRefs.renderGeneration = pibblInstance.renderGeneration;\n const layout = GLOBAL_STATE.layoutStack?.at(-1);\n if (!layout) componentRefs.layoutEntry = undefined;\n else {\n const previous = componentRefs.layoutEntry;\n const allocation = captureLayoutBox(previous?.allocation, layout.allocation);\n const percentageBasis = captureLayoutBox(previous?.percentageBasis, layout.percentageBasis);\n if (allocation !== previous?.allocation || percentageBasis !== previous?.percentageBasis || layout.layoutDirection !== previous?.layoutDirection) {\n componentRefs.layoutEntry = Object.freeze({ allocation, percentageBasis, layoutDirection: layout.layoutDirection });\n }\n }\n return componentRefs;\n}\n\n/** Constant-sized numeric evidence; unchanged entry contexts allocate nothing. */\nfunction captureLayoutBox(previous: Readonly<LayoutBox> | undefined, box: Readonly<LayoutBox>): Readonly<LayoutBox> {\n if (previous && previous.x === box.x && previous.y === box.y &&\n previous.width === box.width && previous.height === box.height) return previous;\n return Object.freeze({ x: box.x, y: box.y, width: box.width, height: box.height });\n}\n\nfunction getElementTypeName(element: PibblElement<any>, parentId: string): string {\n const identityHint = getPlacementIdentityHint<{\n type: PibblElement<any>['type'];\n key: string | undefined;\n occurrence: number;\n }>(element);\n const identityType = identityHint?.type ?? element.type;\n const typeIdentity = getAnonElemName(identityType);\n const typeName = identityType.name || 'Anonymous';\n const key = identityHint ? identityHint.key : element.key;\n if (key === undefined) {\n const occurrence = identityHint?.occurrence ?? 0;\n return `${typeName}:${typeIdentity}${occurrence ? `_${occurrence}` : ''}`;\n }\n\n const encodedKey = encodeURIComponent(key);\n const siblingKey = `${parentId}/${encodedKey}`;\n if (GLOBAL_STATE.seenKeys!.has(siblingKey)) {\n throw new Error(`Duplicate Pibbl key \"${key}\" under \"${parentId}\"`);\n }\n GLOBAL_STATE.seenKeys!.add(siblingKey);\n return `${typeName}:${typeIdentity}[${encodedKey}]`;\n}\n\nfunction ensureUniqueId(parentId: string, typeName: string) {\n let id = `${parentId}/${typeName}`;\n let n = 1;\n while (GLOBAL_STATE.seenIds!.has(id)) {\n id = `${parentId}/${typeName}_${n++}`;\n }\n return id;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,6 +2,7 @@ import type { ManualSchedulerDriver } from "./testing.js";
|
|
|
2
2
|
import type { PibblInstance } from "../types.js";
|
|
3
3
|
import type { PibblAdvanceLane, PibblAdvanceParticipant, PibblBeginCommand, PibblBeginCommandHandle, PibblFrameCommitAcknowledgement, PibblFrameCompletion, PibblFrameSnapshot, RealmSchedulerSnapshot, PibblSchedulerTraceCollector, PibblSchedulerTraceRecord, SchedulerDriver } from "./types.js";
|
|
4
4
|
interface InstanceRenderRequest {
|
|
5
|
+
readonly signalInput?: boolean;
|
|
5
6
|
readonly pendingRoot: PibblInstance["pendingRoot"];
|
|
6
7
|
readonly pendingUpdateParents: boolean;
|
|
7
8
|
}
|
|
@@ -14,6 +15,7 @@ interface RendererParticipantWorkRequest {
|
|
|
14
15
|
readonly kind: "resource" | "draw" | "compose";
|
|
15
16
|
readonly run: PibblFrameCompletion;
|
|
16
17
|
}
|
|
18
|
+
export declare function setInstanceAllocationParent(instance: PibblInstance, parent?: PibblInstance): void;
|
|
17
19
|
export declare function registerRootInstance(instance: PibblInstance): void;
|
|
18
20
|
export declare function unregisterRootInstance(instance: PibblInstance): void;
|
|
19
21
|
export declare function requestInstanceRender(instance: PibblInstance, request?: InstanceRenderRequest): number;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { isLayoutInstanceSuspended } from "../layout/participation.js";
|
|
2
|
+
import { invalidateAllocationInputs } from "../layout/allocation-revision.js";
|
|
1
3
|
import { RootRenderTransaction } from "../render-transaction.js";
|
|
2
4
|
import { executeRender } from "../execute-render.js";
|
|
3
5
|
import { GLOBAL_STATE, NO_PENDING_ROOT } from "../global-state.js";
|
|
@@ -45,6 +47,15 @@ let nextOrderedPlaybackCompletionSequence = 0;
|
|
|
45
47
|
let schedulerTraceCollector;
|
|
46
48
|
let schedulerTraceExclusive = false;
|
|
47
49
|
setSignalGraphPlanWorkNotifier(syncSignalGraphPlanWork);
|
|
50
|
+
const allocationParents = /* @__PURE__ */ new WeakMap();
|
|
51
|
+
let allocationParentCount = 0;
|
|
52
|
+
const noAllocationDeferred = /* @__PURE__ */ new Set();
|
|
53
|
+
function setInstanceAllocationParent(instance, parent) {
|
|
54
|
+
if (parent) {
|
|
55
|
+
if (!allocationParents.has(instance)) allocationParentCount++;
|
|
56
|
+
allocationParents.set(instance, parent);
|
|
57
|
+
} else if (allocationParents.delete(instance)) allocationParentCount--;
|
|
58
|
+
}
|
|
48
59
|
function registerRootInstance(instance) {
|
|
49
60
|
if (!instance.parent && !registeredRoots.has(instance)) {
|
|
50
61
|
registeredRoots.add(instance);
|
|
@@ -62,6 +73,7 @@ function requestInstanceRender(instance, request = {
|
|
|
62
73
|
pendingRoot: NO_PENDING_ROOT,
|
|
63
74
|
pendingUpdateParents: false
|
|
64
75
|
}) {
|
|
76
|
+
if (!request.signalInput) invalidateAllocationInputs(instance);
|
|
65
77
|
const revision = ++nextWorkRevision;
|
|
66
78
|
const target = shouldDeferNewFrameWork() ? nextInstanceWork : currentInstanceWork;
|
|
67
79
|
if (target === currentInstanceWork && request.pendingRoot !== NO_PENDING_ROOT) {
|
|
@@ -225,17 +237,8 @@ function queueRendererParticipantComplete(owner, callback) {
|
|
|
225
237
|
function removeRendererParticipantOwner(owner) {
|
|
226
238
|
currentRendererWorkByOwner.delete(owner);
|
|
227
239
|
nextRendererWorkByOwner.delete(owner);
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
nextRendererParticipantCompletions
|
|
231
|
-
]) {
|
|
232
|
-
for (let index = completions.length - 1; index >= 0; index--) {
|
|
233
|
-
if (completions[index].owner === owner) {
|
|
234
|
-
completions.splice(index, 1);
|
|
235
|
-
releasedCompletionCallbacks++;
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
}
|
|
240
|
+
removeParticipantCompletions(currentRendererParticipantCompletions, owner);
|
|
241
|
+
removeParticipantCompletions(nextRendererParticipantCompletions, owner);
|
|
239
242
|
cancelIdleHostFrame();
|
|
240
243
|
}
|
|
241
244
|
function getCurrentFrameSnapshot() {
|
|
@@ -418,10 +421,11 @@ function runFrame(hostTime) {
|
|
|
418
421
|
rootJob.root.eventRoot.renderTransaction = transaction;
|
|
419
422
|
let failedInstance;
|
|
420
423
|
let rendererFailed = false;
|
|
424
|
+
const allocationDeferred = captureAllocationDeferredJobs(rootJob, rendererWork);
|
|
421
425
|
try {
|
|
422
426
|
for (let jobIndex = 0; jobIndex < rootJob.instances.length; jobIndex++) {
|
|
423
427
|
const job = rootJob.instances[jobIndex];
|
|
424
|
-
if (job.instance.mainTeardowns.closed) continue;
|
|
428
|
+
if (job.instance.mainTeardowns.closed || allocationDeferred.has(job.instance) || isLayoutInstanceSuspended(job.instance)) continue;
|
|
425
429
|
const participantWork = rendererWork.get(job.instance);
|
|
426
430
|
const resourceFailures = runRendererParticipantStage(
|
|
427
431
|
participantWork,
|
|
@@ -595,6 +599,18 @@ function createFrameCompletionCancellation(callback, ownedCompletions) {
|
|
|
595
599
|
}
|
|
596
600
|
};
|
|
597
601
|
}
|
|
602
|
+
function captureAllocationDeferredJobs(rootJob, rendererWork) {
|
|
603
|
+
if (allocationParentCount === 0) return noAllocationDeferred;
|
|
604
|
+
const deferred = /* @__PURE__ */ new Set();
|
|
605
|
+
for (const job of rootJob.instances) {
|
|
606
|
+
const parent = allocationParents.get(job.instance);
|
|
607
|
+
if (!parent || !rootJob.instances.some((candidate) => candidate.instance === parent)) continue;
|
|
608
|
+
const branch = rootJob.instances.filter((candidate) => isInstanceWithin(candidate.instance, job.instance));
|
|
609
|
+
if (branch.some((candidate) => rendererWork.get(candidate.instance)?.length || candidate.pendingRoot !== NO_PENDING_ROOT || nextInstanceWork.has(candidate.instance))) continue;
|
|
610
|
+
for (const candidate of branch) deferred.add(candidate.instance);
|
|
611
|
+
}
|
|
612
|
+
return deferred;
|
|
613
|
+
}
|
|
598
614
|
function captureRootJobs() {
|
|
599
615
|
const requested = Array.from(currentInstanceWork);
|
|
600
616
|
currentInstanceWork.clear();
|
|
@@ -714,23 +730,13 @@ function instanceDepth(instance) {
|
|
|
714
730
|
return depth;
|
|
715
731
|
}
|
|
716
732
|
function removeRootWork(root) {
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
if (findRoot(instance) === root) {
|
|
720
|
-
workByInstance.delete(instance);
|
|
721
|
-
synchronizeInstancePendingState(instance);
|
|
722
|
-
}
|
|
723
|
-
}
|
|
724
|
-
}
|
|
733
|
+
removeRootWorkFrom(currentInstanceWork, root);
|
|
734
|
+
removeRootWorkFrom(nextInstanceWork, root);
|
|
725
735
|
}
|
|
726
736
|
function countDirtyRoots() {
|
|
727
737
|
const roots = /* @__PURE__ */ new Set();
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
const root = findRoot(instance);
|
|
731
|
-
if (root && registeredRoots.has(root)) roots.add(root);
|
|
732
|
-
}
|
|
733
|
-
}
|
|
738
|
+
collectDirtyRoots(currentInstanceWork, roots);
|
|
739
|
+
collectDirtyRoots(nextInstanceWork, roots);
|
|
734
740
|
return roots.size;
|
|
735
741
|
}
|
|
736
742
|
function countDirtyInstances() {
|
|
@@ -939,6 +945,28 @@ function throwCollectedErrors(errors) {
|
|
|
939
945
|
throw new AggregateError(errors, "Multiple Pibbl frame operations failed.");
|
|
940
946
|
}
|
|
941
947
|
}
|
|
948
|
+
function removeParticipantCompletions(completions, owner) {
|
|
949
|
+
for (let index = completions.length - 1; index >= 0; index--) {
|
|
950
|
+
if (completions[index].owner === owner) {
|
|
951
|
+
completions.splice(index, 1);
|
|
952
|
+
releasedCompletionCallbacks++;
|
|
953
|
+
}
|
|
954
|
+
}
|
|
955
|
+
}
|
|
956
|
+
function removeRootWorkFrom(workByInstance, root) {
|
|
957
|
+
for (const instance of workByInstance.keys()) {
|
|
958
|
+
if (findRoot(instance) === root) {
|
|
959
|
+
workByInstance.delete(instance);
|
|
960
|
+
synchronizeInstancePendingState(instance);
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
}
|
|
964
|
+
function collectDirtyRoots(workByInstance, roots) {
|
|
965
|
+
for (const instance of workByInstance.keys()) {
|
|
966
|
+
const root = findRoot(instance);
|
|
967
|
+
if (root && registeredRoots.has(root)) roots.add(root);
|
|
968
|
+
}
|
|
969
|
+
}
|
|
942
970
|
export {
|
|
943
971
|
completeInstanceRenderRevision,
|
|
944
972
|
getCurrentFrameSnapshot,
|
|
@@ -958,6 +986,7 @@ export {
|
|
|
958
986
|
removeRendererParticipantOwner,
|
|
959
987
|
requestInstanceRender,
|
|
960
988
|
requestRendererParticipantWork,
|
|
989
|
+
setInstanceAllocationParent,
|
|
961
990
|
snapshotRealmScheduler,
|
|
962
991
|
unregisterRootInstance
|
|
963
992
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/lib/scheduler/realm-scheduler.ts"],
|
|
4
|
-
"sourcesContent": ["import type { ManualSchedulerDriver } from './testing.js';\nimport { RootRenderTransaction } from '../render-transaction.js';\nimport { executeRender } from \"../execute-render.js\";\nimport { GLOBAL_STATE, NO_PENDING_ROOT } from \"../global-state.js\";\nimport {\n createSignalCommitBatch,\n flushPendingComputedValidations,\n hasPendingComputedValidations,\n setSignalGraphPlanWorkNotifier,\n withDirectSignalWriteForbidden,\n} from \"../signals/graph.js\";\nimport type { PibblInstance, PibblRenderTransaction } from \"../types.js\";\nimport { runTeardown } from \"../teardowns.js\";\nimport type {\n PibblAdvanceLane,\n PibblAdvanceParticipant,\n PibblBeginCommand,\n PibblBeginCommandHandle,\n PibblFrameCommitAcknowledgement,\n PibblFrameCompletion,\n PibblFramePhase,\n PibblFrameSnapshot,\n RealmSchedulerSnapshot,\n PibblSchedulerTraceCollector,\n PibblSchedulerTraceRecord,\n SchedulerDriver,\n} from \"./types.js\";\n\ninterface InstanceRenderJob {\n readonly instance: PibblInstance;\n readonly firstRevision: number;\n readonly revision: number;\n readonly pendingRoot: PibblInstance[\"pendingRoot\"];\n readonly pendingRootRevision: number;\n readonly pendingUpdateParents: boolean;\n}\n\ninterface PendingInstanceWork {\n /** Earliest accepted revision not yet completed in this eligibility bucket. */\n firstRevision: number;\n revision: number;\n pendingRoot: PibblInstance[\"pendingRoot\"];\n pendingRootRevision: number;\n pendingUpdateParents: boolean;\n}\n\ninterface InstanceRenderRequest {\n readonly pendingRoot: PibblInstance[\"pendingRoot\"];\n readonly pendingUpdateParents: boolean;\n}\n\ninterface RootRenderJob {\n readonly root: PibblInstance;\n readonly instances: InstanceRenderJob[];\n}\n\ninterface RootTransaction extends PibblRenderTransaction {\n finish(success: boolean): void;\n}\n\ninterface AdvanceRegistration {\n readonly participant: PibblAdvanceParticipant;\n readonly lane: PibblAdvanceLane;\n readonly registrationOrder: number;\n readonly requestsFrames: boolean;\n active: boolean;\n}\n\ninterface BeginCommandRegistration {\n readonly accepted: {\n readonly sequence: number;\n readonly command: PibblBeginCommand;\n };\n active: boolean;\n owned: boolean;\n}\n\ninterface OrderedPlaybackCompletion {\n readonly registrationOrder: number;\n readonly sequence: number;\n readonly callback: PibblFrameCompletion;\n}\n\nexport interface RendererParticipantOwner {\n readonly instance: PibblInstance;\n isActive(): boolean;\n}\n\ninterface RendererParticipantWorkRequest {\n readonly key: object;\n readonly kind: \"resource\" | \"draw\" | \"compose\";\n readonly run: PibblFrameCompletion;\n}\n\ninterface RendererParticipantWorkRegistration {\n readonly owner: RendererParticipantOwner;\n request: RendererParticipantWorkRequest;\n readonly order: number;\n}\n\ninterface RendererParticipantCompletion {\n readonly owner: RendererParticipantOwner;\n readonly callback: PibblFrameCompletion;\n readonly order: number;\n}\n\nconst registeredRoots = new Set<PibblInstance>();\n// A running frame drains only current work. Late work is promoted after\n// Complete, so equal owner/key requests never coalesce across frame epochs.\nconst currentInstanceWork = new Map<PibblInstance, PendingInstanceWork>();\nconst nextInstanceWork = new Map<PibblInstance, PendingInstanceWork>();\nconst advanceRegistrations = new Set<AdvanceRegistration>();\nconst ADVANCE_LANE_ORDER = { animation: 0, physics: 1 } as const;\nconst beginCommands: BeginCommandRegistration[] = [];\nconst frameCompletions: PibblFrameCompletion[] = [];\nconst reactionCompletions: PibblFrameCompletion[] = [];\nconst currentRendererWorkByOwner = new Map<\n RendererParticipantOwner,\n Map<object, RendererParticipantWorkRegistration>\n>();\nconst nextRendererWorkByOwner = new Map<\n RendererParticipantOwner,\n Map<object, RendererParticipantWorkRegistration>\n>();\nconst currentRendererParticipantCompletions: RendererParticipantCompletion[] =\n [];\nconst nextRendererParticipantCompletions: RendererParticipantCompletion[] = [];\n\nlet phase: PibblFramePhase = \"idle\";\nlet pendingHostFrame: number | undefined;\nlet currentFrame: PibblFrameSnapshot | undefined;\nlet nextFrameId = 0;\nlet nextAdvanceRegistrationOrder = 0;\nlet nextWorkRevision = 0;\nlet nextRendererWorkOrder = 0;\nlet nextRendererCompletionOrder = 0;\nlet schedulerDriver: SchedulerDriver | undefined;\nlet createdRootRegistrations = 0;\nlet releasedRootRegistrations = 0;\nlet createdBeginCommands = 0;\nlet releasedBeginCommands = 0;\nlet createdCompletionCallbacks = 0;\nlet releasedCompletionCallbacks = 0;\nlet currentFramePlanAdmissionDepth = 0;\nlet nextBeginCommandSequence = 0;\nlet currentFramePlaybackCompletions: PibblFrameCompletion[] | undefined;\nlet currentFrameCommitAcknowledgements:\n PibblFrameCommitAcknowledgement[] | undefined;\nlet currentFrameOrderedPlaybackCompletions:\n OrderedPlaybackCompletion[] | undefined;\nlet nextOrderedPlaybackCompletionSequence = 0;\nlet schedulerTraceCollector: PibblSchedulerTraceCollector | undefined;\nlet schedulerTraceExclusive = false;\n\nsetSignalGraphPlanWorkNotifier(syncSignalGraphPlanWork);\n\nexport function registerRootInstance(instance: PibblInstance): void {\n if (!instance.parent && !registeredRoots.has(instance)) {\n registeredRoots.add(instance);\n createdRootRegistrations++;\n }\n}\n\nexport function unregisterRootInstance(instance: PibblInstance): void {\n if (registeredRoots.delete(instance)) {\n releasedRootRegistrations++;\n }\n removeRootWork(instance);\n cancelIdleHostFrame();\n}\n\nexport function requestInstanceRender(\n instance: PibblInstance,\n request: InstanceRenderRequest = {\n pendingRoot: NO_PENDING_ROOT,\n pendingUpdateParents: false,\n },\n): number {\n const revision = ++nextWorkRevision;\n const target = shouldDeferNewFrameWork()\n ? nextInstanceWork\n : currentInstanceWork;\n if (\n target === currentInstanceWork &&\n request.pendingRoot !== NO_PENDING_ROOT\n ) {\n supersedeDeferredRootPayloads(instance, revision);\n }\n let current: PibblInstance | undefined = instance;\n while (current) {\n current.requestedRenderRevision = revision;\n mergePendingInstanceWork(target, current, {\n firstRevision: revision,\n revision,\n pendingRoot: current === instance ? request.pendingRoot : NO_PENDING_ROOT,\n pendingRootRevision:\n current === instance && request.pendingRoot !== NO_PENDING_ROOT\n ? revision\n : 0,\n pendingUpdateParents:\n current === instance && request.pendingUpdateParents,\n });\n synchronizeInstancePendingState(current);\n current = current.parent\n ? GLOBAL_STATE.pibblInstances.get(current.parent)\n : undefined;\n }\n requestHostFrameIfNeeded();\n return revision;\n}\n\n/** Whether an instance has work that has not yet completed a successful render. */\nexport function hasPendingInstanceRender(instance: PibblInstance): boolean {\n return (\n instance.requestedRenderRevision > instance.completedRenderRevision &&\n !(phase === \"render\" && nextInstanceWork.has(instance))\n );\n}\n\nexport function registerAdvanceParticipant(\n participant: PibblAdvanceParticipant,\n lane: PibblAdvanceLane = \"animation\",\n requestsFrames = true,\n): () => void {\n const registration: AdvanceRegistration = {\n participant,\n lane,\n registrationOrder: ++nextAdvanceRegistrationOrder,\n requestsFrames,\n active: true,\n };\n advanceRegistrations.add(registration);\n requestHostFrameIfNeeded();\n return () => {\n if (!registration.active) return;\n registration.active = false;\n advanceRegistrations.delete(registration);\n cancelIdleHostFrame();\n };\n}\n\n/** Queues immutable, realm-ordered work for the next frozen Begin prefix. */\nexport function queueBeginCommand(\n command: PibblBeginCommand,\n): PibblBeginCommandHandle {\n const sequence = ++nextBeginCommandSequence;\n const registration: BeginCommandRegistration = {\n accepted: Object.freeze({ sequence, command }),\n active: true,\n owned: true,\n };\n beginCommands.push(registration);\n createdBeginCommands++;\n requestHostFrameIfNeeded();\n return Object.freeze({\n sequence,\n cancel(): void {\n if (!registration.active) return;\n registration.active = false;\n const index = beginCommands.indexOf(registration);\n if (index >= 0) {\n beginCommands.splice(index, 1);\n releaseBeginCommand(registration);\n }\n cancelIdleHostFrame();\n },\n });\n}\n\n/** Queues scheduler-owned work for Complete in the currently advancing frame. */\nexport function queueCurrentFrameCompletion(\n callback: PibblFrameCompletion,\n): () => void {\n if (\n currentFramePlaybackCompletions === undefined ||\n (phase !== \"begin\" && phase !== \"advance\")\n ) {\n return queueFrameCompletion(callback);\n }\n currentFramePlaybackCompletions.push(callback);\n createdCompletionCallbacks++;\n return createFrameCompletionCancellation(callback);\n}\n\n/** Registers playback state adoption against this frame's explicit Commit outcome. */\nexport function queueCurrentFrameCommitAcknowledgement(\n callback: PibblFrameCommitAcknowledgement,\n): () => void {\n if (\n currentFrameCommitAcknowledgements === undefined ||\n (phase !== \"begin\" && phase !== \"advance\")\n ) {\n throw new Error(\n \"Pibbl frame Commit acknowledgements may only be queued during Begin or Advance.\",\n );\n }\n currentFrameCommitAcknowledgements.push(callback);\n createdCompletionCallbacks++;\n let active = true;\n return () => {\n if (!active) return;\n active = false;\n const acknowledgements = currentFrameCommitAcknowledgements;\n const index = acknowledgements?.indexOf(callback) ?? -1;\n if (index < 0) return;\n acknowledgements!.splice(index, 1);\n releasedCompletionCallbacks++;\n cancelIdleHostFrame();\n };\n}\n\n/** Queues one playback delivery ordered by run identity, then source insertion. */\nexport function queueCurrentFrameOrderedPlaybackCompletion(\n registrationOrder: number,\n callback: PibblFrameCompletion,\n): void {\n if (currentFrameOrderedPlaybackCompletions === undefined) {\n queueFrameCompletion(callback);\n return;\n }\n currentFrameOrderedPlaybackCompletions.push({\n registrationOrder,\n sequence: ++nextOrderedPlaybackCompletionSequence,\n callback,\n });\n createdCompletionCallbacks++;\n}\n\nexport function queueFrameCompletion(callback: PibblFrameCompletion): () => void {\n frameCompletions.push(callback);\n createdCompletionCallbacks++;\n requestHostFrameIfNeeded();\n return createFrameCompletionCancellation(callback);\n}\n\n/** Queues signal-driven imperative work for an eligible Complete phase. */\nexport function queueReactionCompletion(\n callback: PibblFrameCompletion,\n): () => void {\n reactionCompletions.push(callback);\n createdCompletionCallbacks++;\n requestHostFrameIfNeeded();\n return createFrameCompletionCancellation(callback, reactionCompletions);\n}\n\n/** @internal Emits one immutable fact only while a source-only collector is installed. */\nexport function recordSchedulerTrace(record: PibblSchedulerTraceRecord): void {\n const collector = schedulerTraceCollector;\n if (collector === undefined) return;\n try {\n collector(Object.freeze(record));\n } catch {\n if (schedulerTraceCollector === collector) {\n schedulerTraceCollector = undefined;\n schedulerTraceExclusive = false;\n }\n }\n}\n\nexport function requestRendererParticipantWork(\n owner: RendererParticipantOwner,\n request: RendererParticipantWorkRequest,\n): void {\n if (!owner.isActive()) return;\n const rendererWorkByOwner = shouldDeferNewFrameWork()\n ? nextRendererWorkByOwner\n : currentRendererWorkByOwner;\n let workByKey = rendererWorkByOwner.get(owner);\n if (!workByKey) {\n workByKey = new Map();\n rendererWorkByOwner.set(owner, workByKey);\n }\n const existing = workByKey.get(request.key);\n if (existing) {\n existing.request = request;\n } else {\n workByKey.set(request.key, {\n owner,\n request,\n order: ++nextRendererWorkOrder,\n });\n }\n requestInstanceRender(owner.instance);\n}\n\nexport function queueRendererParticipantComplete(\n owner: RendererParticipantOwner,\n callback: PibblFrameCompletion,\n): void {\n if (!owner.isActive()) return;\n const completions = shouldDeferNewFrameWork()\n ? nextRendererParticipantCompletions\n : currentRendererParticipantCompletions;\n completions.push({\n owner,\n callback,\n order: ++nextRendererCompletionOrder,\n });\n createdCompletionCallbacks++;\n requestHostFrameIfNeeded();\n}\n\nexport function removeRendererParticipantOwner(\n owner: RendererParticipantOwner,\n): void {\n currentRendererWorkByOwner.delete(owner);\n nextRendererWorkByOwner.delete(owner);\n for (const completions of [\n currentRendererParticipantCompletions,\n nextRendererParticipantCompletions,\n ]) {\n for (let index = completions.length - 1; index >= 0; index--) {\n if (completions[index].owner === owner) {\n completions.splice(index, 1);\n releasedCompletionCallbacks++;\n }\n }\n }\n cancelIdleHostFrame();\n}\n\nexport function getCurrentFrameSnapshot(): PibblFrameSnapshot | undefined {\n return GLOBAL_STATE.frameSnapshot ?? currentFrame;\n}\n\n/**\n * Returns a diagnostic snapshot of the shared realm scheduler without advancing it.\n *\n * @returns Current scheduler counters and pending-work state. See {@link RealmSchedulerSnapshot}.\n *\n * @see {@link ManualSchedulerDriver}\n */\nexport function snapshotRealmScheduler(): RealmSchedulerSnapshot {\n return Object.freeze({\n phase,\n pendingHostFrames: pendingHostFrame === undefined ? 0 : 1,\n registeredRoots: registeredRoots.size,\n advanceParticipants: advanceRegistrations.size,\n completionCallbacks:\n frameCompletions.length +\n reactionCompletions.length +\n (currentFrameCommitAcknowledgements?.length ?? 0) +\n (currentFramePlaybackCompletions?.length ?? 0) +\n (currentFrameOrderedPlaybackCompletions?.length ?? 0) +\n currentRendererParticipantCompletions.length +\n nextRendererParticipantCompletions.length,\n createdRootRegistrations,\n releasedRootRegistrations,\n createdBeginCommands,\n releasedBeginCommands,\n createdCompletionCallbacks,\n releasedCompletionCallbacks,\n dirtyInstances: countDirtyInstances(),\n dirtyRoots: countDirtyRoots(),\n registeredAdvanceParticipants: advanceRegistrations.size,\n queuedFrameCompletions: frameCompletions.length,\n queuedReactionCompletions: reactionCompletions.length,\n queuedBeginCommands: beginCommands.length,\n currentFrame,\n });\n}\n\nexport function installSchedulerDriverForTest(\n driver: SchedulerDriver,\n): () => void {\n if (pendingHostFrame !== undefined || phase !== \"idle\") {\n throw new Error(\n \"Cannot replace the Pibbl scheduler driver while a frame is active.\",\n );\n }\n const previous = schedulerDriver;\n schedulerDriver = driver;\n return () => {\n if (pendingHostFrame !== undefined || phase !== \"idle\") {\n throw new Error(\n \"Cannot restore the Pibbl scheduler driver while a frame is active.\",\n );\n }\n schedulerDriver = previous;\n };\n}\n\n/** @internal Test/diagnostic seam; production retains no trace history. */\nexport function installSchedulerTraceCollectorForTest(\n collector: PibblSchedulerTraceCollector,\n exclusive = false,\n): () => void {\n if (schedulerTraceExclusive || (exclusive && schedulerTraceCollector !== undefined)) {\n throw new Error('Scheduler trace collector is already owned.');\n }\n const previous = schedulerTraceCollector;\n schedulerTraceCollector = collector;\n schedulerTraceExclusive = exclusive;\n return () => {\n if (schedulerTraceCollector === collector) {\n schedulerTraceCollector = previous;\n schedulerTraceExclusive = false;\n }\n };\n}\n\nfunction requestHostFrameIfNeeded(): void {\n if (pendingHostFrame !== undefined || phase !== \"idle\" || !hasFrameWork()) {\n return;\n }\n const driver = getSchedulerDriver();\n pendingHostFrame = driver.requestFrame(runFrame);\n}\n\nfunction runFrame(hostTime: number): void {\n pendingHostFrame = undefined;\n const snapshot = Object.freeze({\n frameId: ++nextFrameId,\n hostTime,\n logicalTime: hostTime,\n });\n currentFrame = snapshot;\n const errors: unknown[] = [];\n const transactions: Array<{\n root: PibblInstance;\n transaction: RootTransaction;\n success: boolean;\n }> = [];\n\n phase = \"begin\";\n if (schedulerTraceCollector) recordSchedulerTrace({ kind: 'scheduler-phase', collectedErrors: errors.length, phase, ...snapshot });\n let rootJobs = captureRootJobs();\n const commands = beginCommands.splice(0);\n const completions = frameCompletions.splice(0);\n const batch = createSignalCommitBatch();\n currentFramePlaybackCompletions = [];\n currentFrameCommitAcknowledgements = [];\n currentFrameOrderedPlaybackCompletions = [];\n for (const registration of commands) {\n if (!registration.active) {\n releaseBeginCommand(registration);\n continue;\n }\n registration.active = false;\n const { command, sequence } = registration.accepted;\n try {\n command(snapshot, batch, sequence);\n } catch (error) {\n batch.discardWriter(command);\n errors.push(error);\n } finally {\n releaseBeginCommand(registration);\n }\n }\n const registrations = Object.freeze(\n Array.from(advanceRegistrations).sort(\n (a, b) =>\n ADVANCE_LANE_ORDER[a.lane] - ADVANCE_LANE_ORDER[b.lane] ||\n a.registrationOrder - b.registrationOrder,\n ),\n );\n\n phase = \"advance\";\n if (schedulerTraceCollector) recordSchedulerTrace({ kind: 'scheduler-phase', collectedErrors: errors.length, phase, ...snapshot });\n for (const registration of registrations) {\n if (!registration.active) continue;\n const { participant } = registration;\n try {\n withDirectSignalWriteForbidden(\n \"Cannot write to a signal directly during Pibbl scheduler Advance; stage it through the provided batch.\",\n () => participant(snapshot, batch),\n );\n } catch (error) {\n batch.discardWriter(participant);\n errors.push(error);\n }\n }\n\n phase = \"commit\";\n if (schedulerTraceCollector) recordSchedulerTrace({ kind: 'scheduler-phase', collectedErrors: errors.length, phase, ...snapshot });\n let commitApplied = false;\n try {\n withCurrentFramePlanAdmission(() =>\n batch.commit(() => {\n commitApplied = true;\n }),\n );\n } catch (error) {\n errors.push(error);\n }\n const commitAcknowledgements = currentFrameCommitAcknowledgements;\n currentFrameCommitAcknowledgements = undefined;\n const commitOutcome = Object.freeze({ applied: commitApplied });\n for (const acknowledgement of commitAcknowledgements) {\n try {\n acknowledgement(snapshot, commitOutcome);\n } catch (error) {\n errors.push(error);\n } finally {\n releasedCompletionCallbacks++;\n }\n }\n\n phase = \"plan\";\n if (schedulerTraceCollector) recordSchedulerTrace({ kind: 'scheduler-phase', collectedErrors: errors.length, commitApplied, phase, ...snapshot });\n try {\n withCurrentFramePlanAdmission(flushPendingComputedValidations);\n } catch (error) {\n errors.push(error);\n }\n rootJobs = mergeRootJobs(rootJobs, captureRootJobs());\n const executableInstances = new Set(\n rootJobs.flatMap((rootJob) =>\n rootJob.instances.map((instanceJob) => instanceJob.instance),\n ),\n );\n const blockedRendererOwners = new Set<RendererParticipantOwner>();\n const rendererWork = captureRendererParticipantWork(\n executableInstances,\n blockedRendererOwners,\n );\n const rendererCompletions = captureRendererParticipantCompletions(\n blockedRendererOwners,\n );\n const retryRendererOwners = new Set<RendererParticipantOwner>();\n\n phase = \"render\";\n if (schedulerTraceCollector) recordSchedulerTrace({ kind: 'scheduler-phase', collectedErrors: errors.length, commitApplied, phase, ...snapshot });\n for (const rootJob of rootJobs) {\n if (\n !registeredRoots.has(rootJob.root) ||\n rootJob.root.mainTeardowns.closed\n ) {\n continue;\n }\n const transaction = createRootTransaction();\n const transactionRecord = {\n root: rootJob.root,\n transaction,\n success: false,\n };\n transactions.push(transactionRecord);\n rootJob.root.eventRoot.renderTransaction = transaction;\n let failedInstance: PibblInstance | undefined;\n let rendererFailed = false;\n try {\n for (let jobIndex = 0; jobIndex < rootJob.instances.length; jobIndex++) {\n const job = rootJob.instances[jobIndex];\n if (job.instance.mainTeardowns.closed) continue;\n const participantWork = rendererWork.get(job.instance);\n const resourceFailures = runRendererParticipantStage(\n participantWork,\n \"resource\",\n snapshot,\n );\n if (resourceFailures.length > 0) {\n restoreRendererParticipantFailure(\n rootJob,\n rendererWork,\n jobIndex,\n retryRendererOwners,\n );\n errors.push(...resourceFailures);\n rendererFailed = true;\n break;\n }\n const drawFailures = runRendererParticipantStage(\n participantWork,\n \"draw\",\n snapshot,\n );\n if (drawFailures.length > 0) {\n restoreRendererParticipantFailure(\n rootJob,\n rendererWork,\n jobIndex,\n retryRendererOwners,\n );\n errors.push(...drawFailures);\n rendererFailed = true;\n break;\n }\n try {\n executeRender(\n job.instance.canvas,\n snapshot.logicalTime,\n job.pendingRoot,\n false,\n snapshot,\n );\n const composeFailures = runRendererParticipantStage(\n participantWork,\n \"compose\",\n snapshot,\n );\n if (composeFailures.length > 0) {\n restoreRendererParticipantFailure(\n rootJob,\n rendererWork,\n jobIndex,\n retryRendererOwners,\n );\n errors.push(...composeFailures);\n rendererFailed = true;\n break;\n }\n } catch (error) {\n failedInstance = job.instance;\n throw error;\n }\n completeInstanceRenderRevision(job.instance, job.revision);\n }\n transactionRecord.success = !rendererFailed;\n } catch (error) {\n if (failedInstance && failedInstance !== rootJob.root) {\n restoreRootJob(rootJob);\n }\n errors.push(error);\n }\n }\n\n phase = \"complete\";\n if (schedulerTraceCollector) recordSchedulerTrace({ kind: 'scheduler-phase', collectedErrors: errors.length, commitApplied, phase, ...snapshot });\n const reactions = reactionCompletions.splice(0);\n for (const record of transactions) {\n try {\n record.transaction.finish(record.success);\n } catch (error) {\n errors.push(error);\n } finally {\n if (record.root.eventRoot.renderTransaction === record.transaction) {\n record.root.eventRoot.renderTransaction = undefined;\n }\n }\n }\n for (const reaction of reactions) {\n try {\n reaction(snapshot);\n } catch (error) {\n errors.push(error);\n } finally {\n releasedCompletionCallbacks++;\n }\n }\n for (const completion of completions) {\n try {\n completion(snapshot);\n } catch (error) {\n errors.push(error);\n } finally {\n releasedCompletionCallbacks++;\n }\n }\n const playbackCompletions = currentFramePlaybackCompletions;\n for (const completion of playbackCompletions) {\n try {\n completion(snapshot);\n } catch (error) {\n errors.push(error);\n } finally {\n releasedCompletionCallbacks++;\n }\n }\n currentFramePlaybackCompletions = undefined;\n const orderedPlaybackCompletions = currentFrameOrderedPlaybackCompletions;\n currentFrameOrderedPlaybackCompletions = undefined;\n orderedPlaybackCompletions.sort(\n (left, right) =>\n left.registrationOrder - right.registrationOrder ||\n left.sequence - right.sequence,\n );\n for (const completion of orderedPlaybackCompletions) {\n try {\n completion.callback(snapshot);\n } catch (error) {\n errors.push(error);\n } finally {\n releasedCompletionCallbacks++;\n }\n }\n for (const completion of rendererCompletions) {\n if (!completion.owner.isActive()) {\n releasedCompletionCallbacks++;\n continue;\n }\n if (retryRendererOwners.has(completion.owner)) {\n nextRendererParticipantCompletions.push(completion);\n continue;\n }\n try {\n completion.callback(snapshot);\n } catch (error) {\n errors.push(error);\n } finally {\n releasedCompletionCallbacks++;\n }\n }\n batch.clear();\n currentFrame = undefined;\n phase = \"idle\";\n if (schedulerTraceCollector) recordSchedulerTrace({ kind: 'scheduler-phase', collectedErrors: errors.length, commitApplied, phase, ...snapshot, errorCount: errors.length });\n promoteNextFrameWork();\n requestHostFrameIfNeeded();\n throwCollectedErrors(errors);\n}\n\nfunction releaseBeginCommand(registration: BeginCommandRegistration): void {\n if (!registration.owned) return;\n registration.owned = false;\n releasedBeginCommands++;\n}\n\nfunction createFrameCompletionCancellation(\n callback: PibblFrameCompletion,\n ownedCompletions?: PibblFrameCompletion[],\n): () => void {\n let active = true;\n return () => {\n if (!active) return;\n active = false;\n for (const completions of ownedCompletions === undefined\n ? [frameCompletions, currentFramePlaybackCompletions]\n : [ownedCompletions]) {\n const index = completions?.indexOf(callback) ?? -1;\n if (index < 0) continue;\n completions!.splice(index, 1);\n releasedCompletionCallbacks++;\n cancelIdleHostFrame();\n return;\n }\n };\n}\n\nfunction captureRootJobs(): RootRenderJob[] {\n const requested = Array.from(currentInstanceWork);\n currentInstanceWork.clear();\n const jobsByRoot = new Map<PibblInstance, InstanceRenderJob[]>();\n for (const [instance, work] of requested) {\n synchronizeInstancePendingState(instance);\n if (instance.mainTeardowns.closed) continue;\n const root = findRoot(instance);\n if (!root || !registeredRoots.has(root)) continue;\n const jobs = jobsByRoot.get(root) ?? [];\n jobs.push({\n instance,\n firstRevision: work.firstRevision,\n revision: work.revision,\n pendingRoot: work.pendingRoot,\n pendingRootRevision: work.pendingRootRevision,\n pendingUpdateParents: work.pendingUpdateParents,\n });\n jobsByRoot.set(root, jobs);\n }\n\n const result: RootRenderJob[] = [];\n for (const root of registeredRoots) {\n const jobs = jobsByRoot.get(root);\n if (!jobs) continue;\n jobs.sort(\n (left, right) =>\n instanceDepth(right.instance) - instanceDepth(left.instance),\n );\n result.push({ root, instances: jobs });\n }\n return result;\n}\n\nfunction mergeRootJobs(\n initial: RootRenderJob[],\n planned: RootRenderJob[],\n): RootRenderJob[] {\n const plannedByRoot = new Map(\n planned.map((job) => [job.root, job.instances]),\n );\n const merged: RootRenderJob[] = [];\n for (const root of registeredRoots) {\n const initialJob = initial.find((job) => job.root === root);\n const plannedInstances = plannedByRoot.get(root);\n if (!initialJob && !plannedInstances) continue;\n const byInstance = new Map<PibblInstance, InstanceRenderJob>();\n for (const job of initialJob?.instances ?? []) {\n byInstance.set(job.instance, job);\n }\n for (const job of plannedInstances ?? []) {\n const existing = byInstance.get(job.instance);\n byInstance.set(\n job.instance,\n existing\n ? {\n instance: job.instance,\n firstRevision: Math.min(\n existing.firstRevision,\n job.firstRevision,\n ),\n revision: Math.max(existing.revision, job.revision),\n pendingRoot:\n job.pendingRootRevision > existing.pendingRootRevision\n ? job.pendingRoot\n : existing.pendingRoot,\n pendingRootRevision: Math.max(\n existing.pendingRootRevision,\n job.pendingRootRevision,\n ),\n pendingUpdateParents:\n existing.pendingUpdateParents || job.pendingUpdateParents,\n }\n : job,\n );\n }\n const instances = Array.from(byInstance.values());\n instances.sort(\n (left, right) =>\n instanceDepth(right.instance) - instanceDepth(left.instance),\n );\n merged.push({ root, instances });\n }\n return merged;\n}\n\nfunction findRoot(instance: PibblInstance): PibblInstance | undefined {\n let current: PibblInstance | undefined = instance;\n while (current?.parent) {\n current = GLOBAL_STATE.pibblInstances.get(current.parent);\n }\n return current;\n}\n\nfunction supersedeDeferredRootPayloads(\n ancestor: PibblInstance,\n revision: number,\n): void {\n for (const [instance, deferred] of nextInstanceWork) {\n if (\n deferred.pendingRootRevision > 0 &&\n deferred.pendingRootRevision < revision &&\n isInstanceWithin(instance, ancestor)\n ) {\n // A later sanctioned ancestor root owns the retained subtree. Preserve\n // the older revision/composition job, but never let its obsolete root\n // payload overwrite the newer tree in the following frame.\n deferred.pendingRoot = NO_PENDING_ROOT;\n deferred.pendingRootRevision = 0;\n synchronizeInstancePendingState(instance);\n }\n }\n}\n\nfunction isInstanceWithin(\n instance: PibblInstance,\n ancestor: PibblInstance,\n): boolean {\n let current: PibblInstance | undefined = instance;\n while (current) {\n if (current === ancestor) return true;\n current = current.parent\n ? GLOBAL_STATE.pibblInstances.get(current.parent)\n : undefined;\n }\n return false;\n}\n\nfunction restoreRootJob(rootJob: RootRenderJob): void {\n if (!registeredRoots.has(rootJob.root) || rootJob.root.mainTeardowns.closed) {\n return;\n }\n for (const job of rootJob.instances) {\n const { instance } = job;\n if (\n instance.mainTeardowns.closed ||\n GLOBAL_STATE.pibblInstances.get(instance.canvas) !== instance\n ) {\n continue;\n }\n mergePendingInstanceWork(nextInstanceWork, instance, job);\n synchronizeInstancePendingState(instance);\n }\n}\n\nfunction instanceDepth(instance: PibblInstance): number {\n let depth = 0;\n let current: PibblInstance | undefined = instance;\n while (current?.parent) {\n depth++;\n current = GLOBAL_STATE.pibblInstances.get(current.parent);\n }\n return depth;\n}\n\nfunction removeRootWork(root: PibblInstance): void {\n for (const workByInstance of [currentInstanceWork, nextInstanceWork]) {\n for (const instance of workByInstance.keys()) {\n if (findRoot(instance) === root) {\n workByInstance.delete(instance);\n synchronizeInstancePendingState(instance);\n }\n }\n }\n}\n\nfunction countDirtyRoots(): number {\n const roots = new Set<PibblInstance>();\n for (const workByInstance of [currentInstanceWork, nextInstanceWork]) {\n for (const instance of workByInstance.keys()) {\n const root = findRoot(instance);\n if (root && registeredRoots.has(root)) roots.add(root);\n }\n }\n return roots.size;\n}\n\nfunction countDirtyInstances(): number {\n return new Set([...currentInstanceWork.keys(), ...nextInstanceWork.keys()])\n .size;\n}\n\nfunction hasActiveAdvanceParticipant(): boolean {\n for (const registration of advanceRegistrations)\n if (registration.requestsFrames) return true;\n return false;\n}\n\nfunction hasFrameWork(): boolean {\n return (\n currentInstanceWork.size > 0 ||\n nextInstanceWork.size > 0 ||\n hasPendingComputedValidations() ||\n beginCommands.length > 0 ||\n hasActiveAdvanceParticipant() ||\n frameCompletions.length > 0 ||\n reactionCompletions.length > 0 ||\n currentRendererWorkByOwner.size > 0 ||\n nextRendererWorkByOwner.size > 0 ||\n currentRendererParticipantCompletions.length > 0 ||\n nextRendererParticipantCompletions.length > 0\n );\n}\n\nfunction captureRendererParticipantWork(\n executableInstances: ReadonlySet<PibblInstance>,\n blockedOwners: Set<RendererParticipantOwner>,\n): Map<PibblInstance, RendererParticipantWorkRegistration[]> {\n const byInstance = new Map<\n PibblInstance,\n RendererParticipantWorkRegistration[]\n >();\n for (const [owner, workByKey] of currentRendererWorkByOwner) {\n if (!owner.isActive()) {\n currentRendererWorkByOwner.delete(owner);\n continue;\n }\n if (!executableInstances.has(owner.instance)) {\n blockedOwners.add(owner);\n continue;\n }\n const work = byInstance.get(owner.instance) ?? [];\n for (const registration of workByKey.values()) {\n work.push(registration);\n }\n currentRendererWorkByOwner.delete(owner);\n if (work.length > 0) byInstance.set(owner.instance, work);\n }\n const kindOrder = { resource: 0, draw: 1, compose: 2 } as const;\n for (const work of byInstance.values()) {\n work.sort(\n (left, right) =>\n kindOrder[left.request.kind] - kindOrder[right.request.kind] ||\n left.order - right.order,\n );\n }\n return byInstance;\n}\n\nfunction captureRendererParticipantCompletions(\n blockedOwners: ReadonlySet<RendererParticipantOwner>,\n): RendererParticipantCompletion[] {\n const captured: RendererParticipantCompletion[] = [];\n for (let index = 0; index < currentRendererParticipantCompletions.length;) {\n const completion = currentRendererParticipantCompletions[index];\n if (blockedOwners.has(completion.owner)) {\n index++;\n continue;\n }\n currentRendererParticipantCompletions.splice(index, 1);\n captured.push(completion);\n }\n captured.sort((left, right) => left.order - right.order);\n return captured;\n}\n\nfunction runRendererParticipantStage(\n work: RendererParticipantWorkRegistration[] | undefined,\n kind: RendererParticipantWorkRequest[\"kind\"],\n snapshot: PibblFrameSnapshot,\n): unknown[] {\n const errors: unknown[] = [];\n if (!work) return errors;\n for (const registration of work) {\n if (registration.request.kind !== kind || !registration.owner.isActive()) {\n continue;\n }\n try {\n registration.request.run(snapshot);\n } catch (error) {\n errors.push(error);\n }\n }\n return errors;\n}\n\nfunction restoreRendererParticipantFailure(\n rootJob: RootRenderJob,\n rendererWork: Map<PibblInstance, RendererParticipantWorkRegistration[]>,\n failedJobIndex: number,\n retryOwners: Set<RendererParticipantOwner>,\n): void {\n restoreRootJob(rootJob);\n const ownersToRequest = new Set<RendererParticipantOwner>();\n for (\n let jobIndex = failedJobIndex;\n jobIndex < rootJob.instances.length;\n jobIndex++\n ) {\n const work = rendererWork.get(rootJob.instances[jobIndex].instance);\n if (!work) continue;\n for (const registration of work) {\n const { owner, request } = registration;\n if (!owner.isActive()) continue;\n let workByKey = nextRendererWorkByOwner.get(owner);\n if (!workByKey) {\n workByKey = new Map();\n nextRendererWorkByOwner.set(owner, workByKey);\n }\n if (!workByKey.has(request.key)) {\n workByKey.set(request.key, registration);\n }\n ownersToRequest.add(owner);\n retryOwners.add(owner);\n }\n }\n for (const owner of ownersToRequest) {\n requestInstanceRender(owner.instance);\n }\n}\n\nfunction mergePendingInstanceWork(\n target: Map<PibblInstance, PendingInstanceWork>,\n instance: PibblInstance,\n incoming: PendingInstanceWork,\n): void {\n const existing = target.get(instance);\n if (!existing) {\n target.set(instance, { ...incoming });\n return;\n }\n existing.firstRevision = Math.min(\n existing.firstRevision,\n incoming.firstRevision,\n );\n existing.revision = Math.max(existing.revision, incoming.revision);\n if (incoming.pendingRootRevision > existing.pendingRootRevision) {\n existing.pendingRoot = incoming.pendingRoot;\n existing.pendingRootRevision = incoming.pendingRootRevision;\n }\n existing.pendingUpdateParents ||= incoming.pendingUpdateParents;\n}\n\nfunction synchronizeInstancePendingState(instance: PibblInstance): void {\n const current = currentInstanceWork.get(instance);\n const next = nextInstanceWork.get(instance);\n const rootSource = !current\n ? next\n : !next\n ? current\n : current.pendingRootRevision >= next.pendingRootRevision\n ? current\n : next;\n instance.pendingRoot = rootSource ? rootSource.pendingRoot : NO_PENDING_ROOT;\n instance.pendingUpdateParents = Boolean(\n current?.pendingUpdateParents || next?.pendingUpdateParents,\n );\n}\n\nexport function completeInstanceRenderRevision(\n instance: PibblInstance,\n revision: number,\n): void {\n const pendingFirstRevisions = [\n currentInstanceWork.get(instance)?.firstRevision,\n nextInstanceWork.get(instance)?.firstRevision,\n ].filter((value): value is number => value !== undefined);\n if (pendingFirstRevisions.length === 0) {\n instance.completedRenderRevision = instance.requestedRenderRevision;\n return;\n }\n // Revisions are global request order. Do not advance across an older hole\n // that was deferred before newer Commit/Plan work joined this frame.\n if (Math.min(...pendingFirstRevisions) > revision) {\n instance.completedRenderRevision = Math.max(\n instance.completedRenderRevision,\n revision,\n );\n }\n}\n\nfunction promoteNextFrameWork(): void {\n const pendingInstances = new Set<PibblInstance>();\n for (const [instance, work] of nextInstanceWork) {\n mergePendingInstanceWork(currentInstanceWork, instance, work);\n pendingInstances.add(instance);\n }\n nextInstanceWork.clear();\n for (const instance of pendingInstances) {\n synchronizeInstancePendingState(instance);\n }\n\n for (const [owner, nextWorkByKey] of nextRendererWorkByOwner) {\n let currentWorkByKey = currentRendererWorkByOwner.get(owner);\n if (!currentWorkByKey) {\n currentWorkByKey = new Map();\n currentRendererWorkByOwner.set(owner, currentWorkByKey);\n }\n for (const [key, registration] of nextWorkByKey) {\n const existing = currentWorkByKey.get(key);\n if (existing) {\n existing.request = registration.request;\n } else {\n currentWorkByKey.set(key, registration);\n }\n }\n }\n nextRendererWorkByOwner.clear();\n\n currentRendererParticipantCompletions.push(\n ...nextRendererParticipantCompletions,\n );\n currentRendererParticipantCompletions.sort(\n (left, right) => left.order - right.order,\n );\n nextRendererParticipantCompletions.length = 0;\n}\n\nfunction cancelIdleHostFrame(): void {\n if (pendingHostFrame === undefined || hasFrameWork()) return;\n const frame = pendingHostFrame;\n pendingHostFrame = undefined;\n runTeardown(() => getSchedulerDriver().cancelFrame(frame));\n}\n\nfunction syncSignalGraphPlanWork(): void {\n if (hasPendingComputedValidations()) {\n requestHostFrameIfNeeded();\n } else {\n cancelIdleHostFrame();\n }\n}\n\nfunction withCurrentFramePlanAdmission<T>(callback: () => T): T {\n currentFramePlanAdmissionDepth++;\n try {\n return callback();\n } finally {\n currentFramePlanAdmissionDepth--;\n }\n}\n\nfunction shouldDeferNewFrameWork(): boolean {\n return (\n phase !== \"idle\" &&\n phase !== \"begin\" &&\n currentFramePlanAdmissionDepth === 0\n );\n}\n\nfunction getSchedulerDriver(): SchedulerDriver {\n return (\n schedulerDriver ?? {\n requestFrame: (callback) => globalThis.requestAnimationFrame(callback),\n cancelFrame: (frameId) => globalThis.cancelAnimationFrame(frameId),\n }\n );\n}\n\nfunction createRootTransaction(): RootTransaction {\n return new RootRenderTransaction();\n}\n\nfunction throwCollectedErrors(errors: unknown[]): void {\n if (errors.length === 1) throw errors[0];\n if (errors.length > 1) {\n throw new AggregateError(errors, \"Multiple Pibbl frame operations failed.\");\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { isLayoutInstanceSuspended } from '../layout/participation.js';\nimport { invalidateAllocationInputs } from '../layout/allocation-revision.js';\nimport type { ManualSchedulerDriver } from './testing.js';\nimport { RootRenderTransaction } from '../render-transaction.js';\nimport { executeRender } from \"../execute-render.js\";\nimport { GLOBAL_STATE, NO_PENDING_ROOT } from \"../global-state.js\";\nimport {\n createSignalCommitBatch,\n flushPendingComputedValidations,\n hasPendingComputedValidations,\n setSignalGraphPlanWorkNotifier,\n withDirectSignalWriteForbidden,\n} from \"../signals/graph.js\";\nimport type { PibblInstance, PibblRenderTransaction } from \"../types.js\";\nimport { runTeardown } from \"../teardowns.js\";\nimport type {\n PibblAdvanceLane,\n PibblAdvanceParticipant,\n PibblBeginCommand,\n PibblBeginCommandHandle,\n PibblFrameCommitAcknowledgement,\n PibblFrameCompletion,\n PibblFramePhase,\n PibblFrameSnapshot,\n RealmSchedulerSnapshot,\n PibblSchedulerTraceCollector,\n PibblSchedulerTraceRecord,\n SchedulerDriver,\n} from \"./types.js\";\n\ninterface InstanceRenderJob {\n readonly instance: PibblInstance;\n readonly firstRevision: number;\n readonly revision: number;\n readonly pendingRoot: PibblInstance[\"pendingRoot\"];\n readonly pendingRootRevision: number;\n readonly pendingUpdateParents: boolean;\n}\n\ninterface PendingInstanceWork {\n /** Earliest accepted revision not yet completed in this eligibility bucket. */\n firstRevision: number;\n revision: number;\n pendingRoot: PibblInstance[\"pendingRoot\"];\n pendingRootRevision: number;\n pendingUpdateParents: boolean;\n}\n\ninterface InstanceRenderRequest {\n readonly signalInput?: boolean;\n readonly pendingRoot: PibblInstance[\"pendingRoot\"];\n readonly pendingUpdateParents: boolean;\n}\n\ninterface RootRenderJob {\n readonly root: PibblInstance;\n readonly instances: InstanceRenderJob[];\n}\n\ninterface RootTransaction extends PibblRenderTransaction {\n finish(success: boolean): void;\n}\n\ninterface AdvanceRegistration {\n readonly participant: PibblAdvanceParticipant;\n readonly lane: PibblAdvanceLane;\n readonly registrationOrder: number;\n readonly requestsFrames: boolean;\n active: boolean;\n}\n\ninterface BeginCommandRegistration {\n readonly accepted: {\n readonly sequence: number;\n readonly command: PibblBeginCommand;\n };\n active: boolean;\n owned: boolean;\n}\n\ninterface OrderedPlaybackCompletion {\n readonly registrationOrder: number;\n readonly sequence: number;\n readonly callback: PibblFrameCompletion;\n}\n\nexport interface RendererParticipantOwner {\n readonly instance: PibblInstance;\n isActive(): boolean;\n}\n\ninterface RendererParticipantWorkRequest {\n readonly key: object;\n readonly kind: \"resource\" | \"draw\" | \"compose\";\n readonly run: PibblFrameCompletion;\n}\n\ninterface RendererParticipantWorkRegistration {\n readonly owner: RendererParticipantOwner;\n request: RendererParticipantWorkRequest;\n readonly order: number;\n}\n\ninterface RendererParticipantCompletion {\n readonly owner: RendererParticipantOwner;\n readonly callback: PibblFrameCompletion;\n readonly order: number;\n}\n\nconst registeredRoots = new Set<PibblInstance>();\n// A running frame drains only current work. Late work is promoted after\n// Complete, so equal owner/key requests never coalesce across frame epochs.\nconst currentInstanceWork = new Map<PibblInstance, PendingInstanceWork>();\nconst nextInstanceWork = new Map<PibblInstance, PendingInstanceWork>();\nconst advanceRegistrations = new Set<AdvanceRegistration>();\nconst ADVANCE_LANE_ORDER = { animation: 0, physics: 1 } as const;\nconst beginCommands: BeginCommandRegistration[] = [];\nconst frameCompletions: PibblFrameCompletion[] = [];\nconst reactionCompletions: PibblFrameCompletion[] = [];\nconst currentRendererWorkByOwner = new Map<\n RendererParticipantOwner,\n Map<object, RendererParticipantWorkRegistration>\n>();\nconst nextRendererWorkByOwner = new Map<\n RendererParticipantOwner,\n Map<object, RendererParticipantWorkRegistration>\n>();\nconst currentRendererParticipantCompletions: RendererParticipantCompletion[] =\n [];\nconst nextRendererParticipantCompletions: RendererParticipantCompletion[] = [];\n\nlet phase: PibblFramePhase = \"idle\";\nlet pendingHostFrame: number | undefined;\nlet currentFrame: PibblFrameSnapshot | undefined;\nlet nextFrameId = 0;\nlet nextAdvanceRegistrationOrder = 0;\nlet nextWorkRevision = 0;\nlet nextRendererWorkOrder = 0;\nlet nextRendererCompletionOrder = 0;\nlet schedulerDriver: SchedulerDriver | undefined;\nlet createdRootRegistrations = 0;\nlet releasedRootRegistrations = 0;\nlet createdBeginCommands = 0;\nlet releasedBeginCommands = 0;\nlet createdCompletionCallbacks = 0;\nlet releasedCompletionCallbacks = 0;\nlet currentFramePlanAdmissionDepth = 0;\nlet nextBeginCommandSequence = 0;\nlet currentFramePlaybackCompletions: PibblFrameCompletion[] | undefined;\nlet currentFrameCommitAcknowledgements:\n PibblFrameCommitAcknowledgement[] | undefined;\nlet currentFrameOrderedPlaybackCompletions:\n OrderedPlaybackCompletion[] | undefined;\nlet nextOrderedPlaybackCompletionSequence = 0;\nlet schedulerTraceCollector: PibblSchedulerTraceCollector | undefined;\nlet schedulerTraceExclusive = false;\n\nsetSignalGraphPlanWorkNotifier(syncSignalGraphPlanWork);\n\n// Managed Canvas Layers may depend on a parent layout allocation.\n// Weak ownership follows the existing Layer lifetime, not a second scheduler.\nconst allocationParents = new WeakMap<PibblInstance, PibblInstance>();\nlet allocationParentCount = 0;\nconst noAllocationDeferred = new Set<PibblInstance>();\nexport function setInstanceAllocationParent(instance: PibblInstance, parent?: PibblInstance): void {\n if (parent) {\n if (!allocationParents.has(instance)) allocationParentCount++;\n allocationParents.set(instance, parent);\n } else if (allocationParents.delete(instance)) allocationParentCount--;\n}\n\nexport function registerRootInstance(instance: PibblInstance): void {\n if (!instance.parent && !registeredRoots.has(instance)) {\n registeredRoots.add(instance);\n createdRootRegistrations++;\n }\n}\n\nexport function unregisterRootInstance(instance: PibblInstance): void {\n if (registeredRoots.delete(instance)) {\n releasedRootRegistrations++;\n }\n removeRootWork(instance);\n cancelIdleHostFrame();\n}\n\nexport function requestInstanceRender(\n instance: PibblInstance,\n request: InstanceRenderRequest = {\n pendingRoot: NO_PENDING_ROOT,\n pendingUpdateParents: false,\n },\n): number {\n if (!request.signalInput) invalidateAllocationInputs(instance);\n const revision = ++nextWorkRevision;\n const target = shouldDeferNewFrameWork()\n ? nextInstanceWork\n : currentInstanceWork;\n if (\n target === currentInstanceWork &&\n request.pendingRoot !== NO_PENDING_ROOT\n ) {\n supersedeDeferredRootPayloads(instance, revision);\n }\n let current: PibblInstance | undefined = instance;\n while (current) {\n current.requestedRenderRevision = revision;\n mergePendingInstanceWork(target, current, {\n firstRevision: revision,\n revision,\n pendingRoot: current === instance ? request.pendingRoot : NO_PENDING_ROOT,\n pendingRootRevision:\n current === instance && request.pendingRoot !== NO_PENDING_ROOT\n ? revision\n : 0,\n pendingUpdateParents:\n current === instance && request.pendingUpdateParents,\n });\n synchronizeInstancePendingState(current);\n current = current.parent\n ? GLOBAL_STATE.pibblInstances.get(current.parent)\n : undefined;\n }\n requestHostFrameIfNeeded();\n return revision;\n}\n\n/** Whether an instance has work that has not yet completed a successful render. */\nexport function hasPendingInstanceRender(instance: PibblInstance): boolean {\n return (\n instance.requestedRenderRevision > instance.completedRenderRevision &&\n !(phase === \"render\" && nextInstanceWork.has(instance))\n );\n}\n\nexport function registerAdvanceParticipant(\n participant: PibblAdvanceParticipant,\n lane: PibblAdvanceLane = \"animation\",\n requestsFrames = true,\n): () => void {\n const registration: AdvanceRegistration = {\n participant,\n lane,\n registrationOrder: ++nextAdvanceRegistrationOrder,\n requestsFrames,\n active: true,\n };\n advanceRegistrations.add(registration);\n requestHostFrameIfNeeded();\n return () => {\n if (!registration.active) return;\n registration.active = false;\n advanceRegistrations.delete(registration);\n cancelIdleHostFrame();\n };\n}\n\n/** Queues immutable, realm-ordered work for the next frozen Begin prefix. */\nexport function queueBeginCommand(\n command: PibblBeginCommand,\n): PibblBeginCommandHandle {\n const sequence = ++nextBeginCommandSequence;\n const registration: BeginCommandRegistration = {\n accepted: Object.freeze({ sequence, command }),\n active: true,\n owned: true,\n };\n beginCommands.push(registration);\n createdBeginCommands++;\n requestHostFrameIfNeeded();\n return Object.freeze({\n sequence,\n cancel(): void {\n if (!registration.active) return;\n registration.active = false;\n const index = beginCommands.indexOf(registration);\n if (index >= 0) {\n beginCommands.splice(index, 1);\n releaseBeginCommand(registration);\n }\n cancelIdleHostFrame();\n },\n });\n}\n\n/** Queues scheduler-owned work for Complete in the currently advancing frame. */\nexport function queueCurrentFrameCompletion(\n callback: PibblFrameCompletion,\n): () => void {\n if (\n currentFramePlaybackCompletions === undefined ||\n (phase !== \"begin\" && phase !== \"advance\")\n ) {\n return queueFrameCompletion(callback);\n }\n currentFramePlaybackCompletions.push(callback);\n createdCompletionCallbacks++;\n return createFrameCompletionCancellation(callback);\n}\n\n/** Registers playback state adoption against this frame's explicit Commit outcome. */\nexport function queueCurrentFrameCommitAcknowledgement(\n callback: PibblFrameCommitAcknowledgement,\n): () => void {\n if (\n currentFrameCommitAcknowledgements === undefined ||\n (phase !== \"begin\" && phase !== \"advance\")\n ) {\n throw new Error(\n \"Pibbl frame Commit acknowledgements may only be queued during Begin or Advance.\",\n );\n }\n currentFrameCommitAcknowledgements.push(callback);\n createdCompletionCallbacks++;\n let active = true;\n return () => {\n if (!active) return;\n active = false;\n const acknowledgements = currentFrameCommitAcknowledgements;\n const index = acknowledgements?.indexOf(callback) ?? -1;\n if (index < 0) return;\n acknowledgements!.splice(index, 1);\n releasedCompletionCallbacks++;\n cancelIdleHostFrame();\n };\n}\n\n/** Queues one playback delivery ordered by run identity, then source insertion. */\nexport function queueCurrentFrameOrderedPlaybackCompletion(\n registrationOrder: number,\n callback: PibblFrameCompletion,\n): void {\n if (currentFrameOrderedPlaybackCompletions === undefined) {\n queueFrameCompletion(callback);\n return;\n }\n currentFrameOrderedPlaybackCompletions.push({\n registrationOrder,\n sequence: ++nextOrderedPlaybackCompletionSequence,\n callback,\n });\n createdCompletionCallbacks++;\n}\n\nexport function queueFrameCompletion(callback: PibblFrameCompletion): () => void {\n frameCompletions.push(callback);\n createdCompletionCallbacks++;\n requestHostFrameIfNeeded();\n return createFrameCompletionCancellation(callback);\n}\n\n/** Queues signal-driven imperative work for an eligible Complete phase. */\nexport function queueReactionCompletion(\n callback: PibblFrameCompletion,\n): () => void {\n reactionCompletions.push(callback);\n createdCompletionCallbacks++;\n requestHostFrameIfNeeded();\n return createFrameCompletionCancellation(callback, reactionCompletions);\n}\n\n/** @internal Emits one immutable fact only while a source-only collector is installed. */\nexport function recordSchedulerTrace(record: PibblSchedulerTraceRecord): void {\n const collector = schedulerTraceCollector;\n if (collector === undefined) return;\n try {\n collector(Object.freeze(record));\n } catch {\n if (schedulerTraceCollector === collector) {\n schedulerTraceCollector = undefined;\n schedulerTraceExclusive = false;\n }\n }\n}\n\nexport function requestRendererParticipantWork(\n owner: RendererParticipantOwner,\n request: RendererParticipantWorkRequest,\n): void {\n if (!owner.isActive()) return;\n const rendererWorkByOwner = shouldDeferNewFrameWork()\n ? nextRendererWorkByOwner\n : currentRendererWorkByOwner;\n let workByKey = rendererWorkByOwner.get(owner);\n if (!workByKey) {\n workByKey = new Map();\n rendererWorkByOwner.set(owner, workByKey);\n }\n const existing = workByKey.get(request.key);\n if (existing) {\n existing.request = request;\n } else {\n workByKey.set(request.key, {\n owner,\n request,\n order: ++nextRendererWorkOrder,\n });\n }\n requestInstanceRender(owner.instance);\n}\n\nexport function queueRendererParticipantComplete(\n owner: RendererParticipantOwner,\n callback: PibblFrameCompletion,\n): void {\n if (!owner.isActive()) return;\n const completions = shouldDeferNewFrameWork()\n ? nextRendererParticipantCompletions\n : currentRendererParticipantCompletions;\n completions.push({\n owner,\n callback,\n order: ++nextRendererCompletionOrder,\n });\n createdCompletionCallbacks++;\n requestHostFrameIfNeeded();\n}\n\nexport function removeRendererParticipantOwner(\n owner: RendererParticipantOwner,\n): void {\n currentRendererWorkByOwner.delete(owner);\n nextRendererWorkByOwner.delete(owner);\n removeParticipantCompletions(currentRendererParticipantCompletions, owner);\n removeParticipantCompletions(nextRendererParticipantCompletions, owner);\n cancelIdleHostFrame();\n}\n\nexport function getCurrentFrameSnapshot(): PibblFrameSnapshot | undefined {\n return GLOBAL_STATE.frameSnapshot ?? currentFrame;\n}\n\n/**\n * Returns a diagnostic snapshot of the shared realm scheduler without advancing it.\n *\n * @returns Current scheduler counters and pending-work state. See {@link RealmSchedulerSnapshot}.\n *\n * @see {@link ManualSchedulerDriver}\n */\nexport function snapshotRealmScheduler(): RealmSchedulerSnapshot {\n return Object.freeze({\n phase,\n pendingHostFrames: pendingHostFrame === undefined ? 0 : 1,\n registeredRoots: registeredRoots.size,\n advanceParticipants: advanceRegistrations.size,\n completionCallbacks:\n frameCompletions.length +\n reactionCompletions.length +\n (currentFrameCommitAcknowledgements?.length ?? 0) +\n (currentFramePlaybackCompletions?.length ?? 0) +\n (currentFrameOrderedPlaybackCompletions?.length ?? 0) +\n currentRendererParticipantCompletions.length +\n nextRendererParticipantCompletions.length,\n createdRootRegistrations,\n releasedRootRegistrations,\n createdBeginCommands,\n releasedBeginCommands,\n createdCompletionCallbacks,\n releasedCompletionCallbacks,\n dirtyInstances: countDirtyInstances(),\n dirtyRoots: countDirtyRoots(),\n registeredAdvanceParticipants: advanceRegistrations.size,\n queuedFrameCompletions: frameCompletions.length,\n queuedReactionCompletions: reactionCompletions.length,\n queuedBeginCommands: beginCommands.length,\n currentFrame,\n });\n}\n\nexport function installSchedulerDriverForTest(\n driver: SchedulerDriver,\n): () => void {\n if (pendingHostFrame !== undefined || phase !== \"idle\") {\n throw new Error(\n \"Cannot replace the Pibbl scheduler driver while a frame is active.\",\n );\n }\n const previous = schedulerDriver;\n schedulerDriver = driver;\n return () => {\n if (pendingHostFrame !== undefined || phase !== \"idle\") {\n throw new Error(\n \"Cannot restore the Pibbl scheduler driver while a frame is active.\",\n );\n }\n schedulerDriver = previous;\n };\n}\n\n/** @internal Test/diagnostic seam; production retains no trace history. */\nexport function installSchedulerTraceCollectorForTest(\n collector: PibblSchedulerTraceCollector,\n exclusive = false,\n): () => void {\n if (schedulerTraceExclusive || (exclusive && schedulerTraceCollector !== undefined)) {\n throw new Error('Scheduler trace collector is already owned.');\n }\n const previous = schedulerTraceCollector;\n schedulerTraceCollector = collector;\n schedulerTraceExclusive = exclusive;\n return () => {\n if (schedulerTraceCollector === collector) {\n schedulerTraceCollector = previous;\n schedulerTraceExclusive = false;\n }\n };\n}\n\nfunction requestHostFrameIfNeeded(): void {\n if (pendingHostFrame !== undefined || phase !== \"idle\" || !hasFrameWork()) {\n return;\n }\n const driver = getSchedulerDriver();\n pendingHostFrame = driver.requestFrame(runFrame);\n}\n\nfunction runFrame(hostTime: number): void {\n pendingHostFrame = undefined;\n const snapshot = Object.freeze({\n frameId: ++nextFrameId,\n hostTime,\n logicalTime: hostTime,\n });\n currentFrame = snapshot;\n const errors: unknown[] = [];\n const transactions: Array<{\n root: PibblInstance;\n transaction: RootTransaction;\n success: boolean;\n }> = [];\n\n phase = \"begin\";\n if (schedulerTraceCollector) recordSchedulerTrace({ kind: 'scheduler-phase', collectedErrors: errors.length, phase, ...snapshot });\n let rootJobs = captureRootJobs();\n const commands = beginCommands.splice(0);\n const completions = frameCompletions.splice(0);\n const batch = createSignalCommitBatch();\n currentFramePlaybackCompletions = [];\n currentFrameCommitAcknowledgements = [];\n currentFrameOrderedPlaybackCompletions = [];\n for (const registration of commands) {\n if (!registration.active) {\n releaseBeginCommand(registration);\n continue;\n }\n registration.active = false;\n const { command, sequence } = registration.accepted;\n try {\n command(snapshot, batch, sequence);\n } catch (error) {\n batch.discardWriter(command);\n errors.push(error);\n } finally {\n releaseBeginCommand(registration);\n }\n }\n const registrations = Object.freeze(\n Array.from(advanceRegistrations).sort(\n (a, b) =>\n ADVANCE_LANE_ORDER[a.lane] - ADVANCE_LANE_ORDER[b.lane] ||\n a.registrationOrder - b.registrationOrder,\n ),\n );\n\n phase = \"advance\";\n if (schedulerTraceCollector) recordSchedulerTrace({ kind: 'scheduler-phase', collectedErrors: errors.length, phase, ...snapshot });\n for (const registration of registrations) {\n if (!registration.active) continue;\n const { participant } = registration;\n try {\n withDirectSignalWriteForbidden(\n \"Cannot write to a signal directly during Pibbl scheduler Advance; stage it through the provided batch.\",\n () => participant(snapshot, batch),\n );\n } catch (error) {\n batch.discardWriter(participant);\n errors.push(error);\n }\n }\n\n phase = \"commit\";\n if (schedulerTraceCollector) recordSchedulerTrace({ kind: 'scheduler-phase', collectedErrors: errors.length, phase, ...snapshot });\n let commitApplied = false;\n try {\n withCurrentFramePlanAdmission(() =>\n batch.commit(() => {\n commitApplied = true;\n }),\n );\n } catch (error) {\n errors.push(error);\n }\n const commitAcknowledgements = currentFrameCommitAcknowledgements;\n currentFrameCommitAcknowledgements = undefined;\n const commitOutcome = Object.freeze({ applied: commitApplied });\n for (const acknowledgement of commitAcknowledgements) {\n try {\n acknowledgement(snapshot, commitOutcome);\n } catch (error) {\n errors.push(error);\n } finally {\n releasedCompletionCallbacks++;\n }\n }\n\n phase = \"plan\";\n if (schedulerTraceCollector) recordSchedulerTrace({ kind: 'scheduler-phase', collectedErrors: errors.length, commitApplied, phase, ...snapshot });\n try {\n withCurrentFramePlanAdmission(flushPendingComputedValidations);\n } catch (error) {\n errors.push(error);\n }\n rootJobs = mergeRootJobs(rootJobs, captureRootJobs());\n const executableInstances = new Set(\n rootJobs.flatMap((rootJob) =>\n rootJob.instances.map((instanceJob) => instanceJob.instance),\n ),\n );\n const blockedRendererOwners = new Set<RendererParticipantOwner>();\n const rendererWork = captureRendererParticipantWork(\n executableInstances,\n blockedRendererOwners,\n );\n const rendererCompletions = captureRendererParticipantCompletions(\n blockedRendererOwners,\n );\n const retryRendererOwners = new Set<RendererParticipantOwner>();\n\n phase = \"render\";\n if (schedulerTraceCollector) recordSchedulerTrace({ kind: 'scheduler-phase', collectedErrors: errors.length, commitApplied, phase, ...snapshot });\n for (const rootJob of rootJobs) {\n if (\n !registeredRoots.has(rootJob.root) ||\n rootJob.root.mainTeardowns.closed\n ) {\n continue;\n }\n const transaction = createRootTransaction();\n const transactionRecord = {\n root: rootJob.root,\n transaction,\n success: false,\n };\n transactions.push(transactionRecord);\n rootJob.root.eventRoot.renderTransaction = transaction;\n let failedInstance: PibblInstance | undefined;\n let rendererFailed = false;\n const allocationDeferred = captureAllocationDeferredJobs(rootJob, rendererWork);\n try {\n for (let jobIndex = 0; jobIndex < rootJob.instances.length; jobIndex++) {\n const job = rootJob.instances[jobIndex];\n if (job.instance.mainTeardowns.closed || allocationDeferred.has(job.instance) || isLayoutInstanceSuspended(job.instance)) continue;\n const participantWork = rendererWork.get(job.instance);\n const resourceFailures = runRendererParticipantStage(\n participantWork,\n \"resource\",\n snapshot,\n );\n if (resourceFailures.length > 0) {\n restoreRendererParticipantFailure(\n rootJob,\n rendererWork,\n jobIndex,\n retryRendererOwners,\n );\n errors.push(...resourceFailures);\n rendererFailed = true;\n break;\n }\n const drawFailures = runRendererParticipantStage(\n participantWork,\n \"draw\",\n snapshot,\n );\n if (drawFailures.length > 0) {\n restoreRendererParticipantFailure(\n rootJob,\n rendererWork,\n jobIndex,\n retryRendererOwners,\n );\n errors.push(...drawFailures);\n rendererFailed = true;\n break;\n }\n try {\n executeRender(\n job.instance.canvas,\n snapshot.logicalTime,\n job.pendingRoot,\n false,\n snapshot,\n );\n const composeFailures = runRendererParticipantStage(\n participantWork,\n \"compose\",\n snapshot,\n );\n if (composeFailures.length > 0) {\n restoreRendererParticipantFailure(\n rootJob,\n rendererWork,\n jobIndex,\n retryRendererOwners,\n );\n errors.push(...composeFailures);\n rendererFailed = true;\n break;\n }\n } catch (error) {\n failedInstance = job.instance;\n throw error;\n }\n completeInstanceRenderRevision(job.instance, job.revision);\n }\n transactionRecord.success = !rendererFailed;\n } catch (error) {\n if (failedInstance && failedInstance !== rootJob.root) {\n restoreRootJob(rootJob);\n }\n errors.push(error);\n }\n }\n\n phase = \"complete\";\n if (schedulerTraceCollector) recordSchedulerTrace({ kind: 'scheduler-phase', collectedErrors: errors.length, commitApplied, phase, ...snapshot });\n const reactions = reactionCompletions.splice(0);\n for (const record of transactions) {\n try {\n record.transaction.finish(record.success);\n } catch (error) {\n errors.push(error);\n } finally {\n if (record.root.eventRoot.renderTransaction === record.transaction) {\n record.root.eventRoot.renderTransaction = undefined;\n }\n }\n }\n for (const reaction of reactions) {\n try {\n reaction(snapshot);\n } catch (error) {\n errors.push(error);\n } finally {\n releasedCompletionCallbacks++;\n }\n }\n for (const completion of completions) {\n try {\n completion(snapshot);\n } catch (error) {\n errors.push(error);\n } finally {\n releasedCompletionCallbacks++;\n }\n }\n const playbackCompletions = currentFramePlaybackCompletions;\n for (const completion of playbackCompletions) {\n try {\n completion(snapshot);\n } catch (error) {\n errors.push(error);\n } finally {\n releasedCompletionCallbacks++;\n }\n }\n currentFramePlaybackCompletions = undefined;\n const orderedPlaybackCompletions = currentFrameOrderedPlaybackCompletions;\n currentFrameOrderedPlaybackCompletions = undefined;\n orderedPlaybackCompletions.sort(\n (left, right) =>\n left.registrationOrder - right.registrationOrder ||\n left.sequence - right.sequence,\n );\n for (const completion of orderedPlaybackCompletions) {\n try {\n completion.callback(snapshot);\n } catch (error) {\n errors.push(error);\n } finally {\n releasedCompletionCallbacks++;\n }\n }\n for (const completion of rendererCompletions) {\n if (!completion.owner.isActive()) {\n releasedCompletionCallbacks++;\n continue;\n }\n if (retryRendererOwners.has(completion.owner)) {\n nextRendererParticipantCompletions.push(completion);\n continue;\n }\n try {\n completion.callback(snapshot);\n } catch (error) {\n errors.push(error);\n } finally {\n releasedCompletionCallbacks++;\n }\n }\n batch.clear();\n currentFrame = undefined;\n phase = \"idle\";\n if (schedulerTraceCollector) recordSchedulerTrace({ kind: 'scheduler-phase', collectedErrors: errors.length, commitApplied, phase, ...snapshot, errorCount: errors.length });\n promoteNextFrameWork();\n requestHostFrameIfNeeded();\n throwCollectedErrors(errors);\n}\n\nfunction releaseBeginCommand(registration: BeginCommandRegistration): void {\n if (!registration.owned) return;\n registration.owned = false;\n releasedBeginCommands++;\n}\n\nfunction createFrameCompletionCancellation(\n callback: PibblFrameCompletion,\n ownedCompletions?: PibblFrameCompletion[],\n): () => void {\n let active = true;\n return () => {\n if (!active) return;\n active = false;\n for (const completions of ownedCompletions === undefined\n ? [frameCompletions, currentFramePlaybackCompletions]\n : [ownedCompletions]) {\n const index = completions?.indexOf(callback) ?? -1;\n if (index < 0) continue;\n completions!.splice(index, 1);\n releasedCompletionCallbacks++;\n cancelIdleHostFrame();\n return;\n }\n };\n}\n\nfunction captureAllocationDeferredJobs(\n rootJob: RootRenderJob,\n rendererWork: Map<PibblInstance, RendererParticipantWorkRegistration[]>,\n): Set<PibblInstance> {\n if (allocationParentCount === 0) return noAllocationDeferred;\n const deferred = new Set<PibblInstance>();\n for (const job of rootJob.instances) {\n const parent = allocationParents.get(job.instance);\n if (!parent || !rootJob.instances.some(candidate => candidate.instance === parent)) continue;\n const branch = rootJob.instances.filter(candidate => isInstanceWithin(candidate.instance, job.instance));\n // Parent traversal already rasterizes pending Canvas children inline after\n // settling allocation. Renderer work and root payload admission keep their\n // established ordering until integrated explicitly with that handoff.\n if (branch.some(candidate => rendererWork.get(candidate.instance)?.length ||\n candidate.pendingRoot !== NO_PENDING_ROOT || nextInstanceWork.has(candidate.instance))) continue;\n for (const candidate of branch) deferred.add(candidate.instance);\n }\n return deferred;\n}\n\nfunction captureRootJobs(): RootRenderJob[] {\n const requested = Array.from(currentInstanceWork);\n currentInstanceWork.clear();\n const jobsByRoot = new Map<PibblInstance, InstanceRenderJob[]>();\n for (const [instance, work] of requested) {\n synchronizeInstancePendingState(instance);\n if (instance.mainTeardowns.closed) continue;\n const root = findRoot(instance);\n if (!root || !registeredRoots.has(root)) continue;\n const jobs = jobsByRoot.get(root) ?? [];\n jobs.push({\n instance,\n firstRevision: work.firstRevision,\n revision: work.revision,\n pendingRoot: work.pendingRoot,\n pendingRootRevision: work.pendingRootRevision,\n pendingUpdateParents: work.pendingUpdateParents,\n });\n jobsByRoot.set(root, jobs);\n }\n\n const result: RootRenderJob[] = [];\n for (const root of registeredRoots) {\n const jobs = jobsByRoot.get(root);\n if (!jobs) continue;\n jobs.sort(\n (left, right) =>\n instanceDepth(right.instance) - instanceDepth(left.instance),\n );\n result.push({ root, instances: jobs });\n }\n return result;\n}\n\nfunction mergeRootJobs(\n initial: RootRenderJob[],\n planned: RootRenderJob[],\n): RootRenderJob[] {\n const plannedByRoot = new Map(\n planned.map((job) => [job.root, job.instances]),\n );\n const merged: RootRenderJob[] = [];\n for (const root of registeredRoots) {\n const initialJob = initial.find((job) => job.root === root);\n const plannedInstances = plannedByRoot.get(root);\n if (!initialJob && !plannedInstances) continue;\n const byInstance = new Map<PibblInstance, InstanceRenderJob>();\n for (const job of initialJob?.instances ?? []) {\n byInstance.set(job.instance, job);\n }\n for (const job of plannedInstances ?? []) {\n const existing = byInstance.get(job.instance);\n byInstance.set(\n job.instance,\n existing\n ? {\n instance: job.instance,\n firstRevision: Math.min(\n existing.firstRevision,\n job.firstRevision,\n ),\n revision: Math.max(existing.revision, job.revision),\n pendingRoot:\n job.pendingRootRevision > existing.pendingRootRevision\n ? job.pendingRoot\n : existing.pendingRoot,\n pendingRootRevision: Math.max(\n existing.pendingRootRevision,\n job.pendingRootRevision,\n ),\n pendingUpdateParents:\n existing.pendingUpdateParents || job.pendingUpdateParents,\n }\n : job,\n );\n }\n const instances = Array.from(byInstance.values());\n instances.sort(\n (left, right) =>\n instanceDepth(right.instance) - instanceDepth(left.instance),\n );\n merged.push({ root, instances });\n }\n return merged;\n}\n\nfunction findRoot(instance: PibblInstance): PibblInstance | undefined {\n let current: PibblInstance | undefined = instance;\n while (current?.parent) {\n current = GLOBAL_STATE.pibblInstances.get(current.parent);\n }\n return current;\n}\n\nfunction supersedeDeferredRootPayloads(\n ancestor: PibblInstance,\n revision: number,\n): void {\n for (const [instance, deferred] of nextInstanceWork) {\n if (\n deferred.pendingRootRevision > 0 &&\n deferred.pendingRootRevision < revision &&\n isInstanceWithin(instance, ancestor)\n ) {\n // A later sanctioned ancestor root owns the retained subtree. Preserve\n // the older revision/composition job, but never let its obsolete root\n // payload overwrite the newer tree in the following frame.\n deferred.pendingRoot = NO_PENDING_ROOT;\n deferred.pendingRootRevision = 0;\n synchronizeInstancePendingState(instance);\n }\n }\n}\n\nfunction isInstanceWithin(\n instance: PibblInstance,\n ancestor: PibblInstance,\n): boolean {\n let current: PibblInstance | undefined = instance;\n while (current) {\n if (current === ancestor) return true;\n current = current.parent\n ? GLOBAL_STATE.pibblInstances.get(current.parent)\n : undefined;\n }\n return false;\n}\n\nfunction restoreRootJob(rootJob: RootRenderJob): void {\n if (!registeredRoots.has(rootJob.root) || rootJob.root.mainTeardowns.closed) {\n return;\n }\n for (const job of rootJob.instances) {\n const { instance } = job;\n if (\n instance.mainTeardowns.closed ||\n GLOBAL_STATE.pibblInstances.get(instance.canvas) !== instance\n ) {\n continue;\n }\n mergePendingInstanceWork(nextInstanceWork, instance, job);\n synchronizeInstancePendingState(instance);\n }\n}\n\nfunction instanceDepth(instance: PibblInstance): number {\n let depth = 0;\n let current: PibblInstance | undefined = instance;\n while (current?.parent) {\n depth++;\n current = GLOBAL_STATE.pibblInstances.get(current.parent);\n }\n return depth;\n}\n\nfunction removeRootWork(root: PibblInstance): void {\n removeRootWorkFrom(currentInstanceWork, root);\n removeRootWorkFrom(nextInstanceWork, root);\n}\n\nfunction countDirtyRoots(): number {\n const roots = new Set<PibblInstance>();\n collectDirtyRoots(currentInstanceWork, roots);\n collectDirtyRoots(nextInstanceWork, roots);\n return roots.size;\n}\n\nfunction countDirtyInstances(): number {\n return new Set([...currentInstanceWork.keys(), ...nextInstanceWork.keys()])\n .size;\n}\n\nfunction hasActiveAdvanceParticipant(): boolean {\n for (const registration of advanceRegistrations)\n if (registration.requestsFrames) return true;\n return false;\n}\n\nfunction hasFrameWork(): boolean {\n return (\n currentInstanceWork.size > 0 ||\n nextInstanceWork.size > 0 ||\n hasPendingComputedValidations() ||\n beginCommands.length > 0 ||\n hasActiveAdvanceParticipant() ||\n frameCompletions.length > 0 ||\n reactionCompletions.length > 0 ||\n currentRendererWorkByOwner.size > 0 ||\n nextRendererWorkByOwner.size > 0 ||\n currentRendererParticipantCompletions.length > 0 ||\n nextRendererParticipantCompletions.length > 0\n );\n}\n\nfunction captureRendererParticipantWork(\n executableInstances: ReadonlySet<PibblInstance>,\n blockedOwners: Set<RendererParticipantOwner>,\n): Map<PibblInstance, RendererParticipantWorkRegistration[]> {\n const byInstance = new Map<\n PibblInstance,\n RendererParticipantWorkRegistration[]\n >();\n for (const [owner, workByKey] of currentRendererWorkByOwner) {\n if (!owner.isActive()) {\n currentRendererWorkByOwner.delete(owner);\n continue;\n }\n if (!executableInstances.has(owner.instance)) {\n blockedOwners.add(owner);\n continue;\n }\n const work = byInstance.get(owner.instance) ?? [];\n for (const registration of workByKey.values()) {\n work.push(registration);\n }\n currentRendererWorkByOwner.delete(owner);\n if (work.length > 0) byInstance.set(owner.instance, work);\n }\n const kindOrder = { resource: 0, draw: 1, compose: 2 } as const;\n for (const work of byInstance.values()) {\n work.sort(\n (left, right) =>\n kindOrder[left.request.kind] - kindOrder[right.request.kind] ||\n left.order - right.order,\n );\n }\n return byInstance;\n}\n\nfunction captureRendererParticipantCompletions(\n blockedOwners: ReadonlySet<RendererParticipantOwner>,\n): RendererParticipantCompletion[] {\n const captured: RendererParticipantCompletion[] = [];\n for (let index = 0; index < currentRendererParticipantCompletions.length;) {\n const completion = currentRendererParticipantCompletions[index];\n if (blockedOwners.has(completion.owner)) {\n index++;\n continue;\n }\n currentRendererParticipantCompletions.splice(index, 1);\n captured.push(completion);\n }\n captured.sort((left, right) => left.order - right.order);\n return captured;\n}\n\nfunction runRendererParticipantStage(\n work: RendererParticipantWorkRegistration[] | undefined,\n kind: RendererParticipantWorkRequest[\"kind\"],\n snapshot: PibblFrameSnapshot,\n): unknown[] {\n const errors: unknown[] = [];\n if (!work) return errors;\n for (const registration of work) {\n if (registration.request.kind !== kind || !registration.owner.isActive()) {\n continue;\n }\n try {\n registration.request.run(snapshot);\n } catch (error) {\n errors.push(error);\n }\n }\n return errors;\n}\n\nfunction restoreRendererParticipantFailure(\n rootJob: RootRenderJob,\n rendererWork: Map<PibblInstance, RendererParticipantWorkRegistration[]>,\n failedJobIndex: number,\n retryOwners: Set<RendererParticipantOwner>,\n): void {\n restoreRootJob(rootJob);\n const ownersToRequest = new Set<RendererParticipantOwner>();\n for (\n let jobIndex = failedJobIndex;\n jobIndex < rootJob.instances.length;\n jobIndex++\n ) {\n const work = rendererWork.get(rootJob.instances[jobIndex].instance);\n if (!work) continue;\n for (const registration of work) {\n const { owner, request } = registration;\n if (!owner.isActive()) continue;\n let workByKey = nextRendererWorkByOwner.get(owner);\n if (!workByKey) {\n workByKey = new Map();\n nextRendererWorkByOwner.set(owner, workByKey);\n }\n if (!workByKey.has(request.key)) {\n workByKey.set(request.key, registration);\n }\n ownersToRequest.add(owner);\n retryOwners.add(owner);\n }\n }\n for (const owner of ownersToRequest) {\n requestInstanceRender(owner.instance);\n }\n}\n\nfunction mergePendingInstanceWork(\n target: Map<PibblInstance, PendingInstanceWork>,\n instance: PibblInstance,\n incoming: PendingInstanceWork,\n): void {\n const existing = target.get(instance);\n if (!existing) {\n target.set(instance, { ...incoming });\n return;\n }\n existing.firstRevision = Math.min(\n existing.firstRevision,\n incoming.firstRevision,\n );\n existing.revision = Math.max(existing.revision, incoming.revision);\n if (incoming.pendingRootRevision > existing.pendingRootRevision) {\n existing.pendingRoot = incoming.pendingRoot;\n existing.pendingRootRevision = incoming.pendingRootRevision;\n }\n existing.pendingUpdateParents ||= incoming.pendingUpdateParents;\n}\n\nfunction synchronizeInstancePendingState(instance: PibblInstance): void {\n const current = currentInstanceWork.get(instance);\n const next = nextInstanceWork.get(instance);\n const rootSource = !current\n ? next\n : !next\n ? current\n : current.pendingRootRevision >= next.pendingRootRevision\n ? current\n : next;\n instance.pendingRoot = rootSource ? rootSource.pendingRoot : NO_PENDING_ROOT;\n instance.pendingUpdateParents = Boolean(\n current?.pendingUpdateParents || next?.pendingUpdateParents,\n );\n}\n\nexport function completeInstanceRenderRevision(\n instance: PibblInstance,\n revision: number,\n): void {\n const pendingFirstRevisions = [\n currentInstanceWork.get(instance)?.firstRevision,\n nextInstanceWork.get(instance)?.firstRevision,\n ].filter((value): value is number => value !== undefined);\n if (pendingFirstRevisions.length === 0) {\n instance.completedRenderRevision = instance.requestedRenderRevision;\n return;\n }\n // Revisions are global request order. Do not advance across an older hole\n // that was deferred before newer Commit/Plan work joined this frame.\n if (Math.min(...pendingFirstRevisions) > revision) {\n instance.completedRenderRevision = Math.max(\n instance.completedRenderRevision,\n revision,\n );\n }\n}\n\nfunction promoteNextFrameWork(): void {\n const pendingInstances = new Set<PibblInstance>();\n for (const [instance, work] of nextInstanceWork) {\n mergePendingInstanceWork(currentInstanceWork, instance, work);\n pendingInstances.add(instance);\n }\n nextInstanceWork.clear();\n for (const instance of pendingInstances) {\n synchronizeInstancePendingState(instance);\n }\n\n for (const [owner, nextWorkByKey] of nextRendererWorkByOwner) {\n let currentWorkByKey = currentRendererWorkByOwner.get(owner);\n if (!currentWorkByKey) {\n currentWorkByKey = new Map();\n currentRendererWorkByOwner.set(owner, currentWorkByKey);\n }\n for (const [key, registration] of nextWorkByKey) {\n const existing = currentWorkByKey.get(key);\n if (existing) {\n existing.request = registration.request;\n } else {\n currentWorkByKey.set(key, registration);\n }\n }\n }\n nextRendererWorkByOwner.clear();\n\n currentRendererParticipantCompletions.push(\n ...nextRendererParticipantCompletions,\n );\n currentRendererParticipantCompletions.sort(\n (left, right) => left.order - right.order,\n );\n nextRendererParticipantCompletions.length = 0;\n}\n\nfunction cancelIdleHostFrame(): void {\n if (pendingHostFrame === undefined || hasFrameWork()) return;\n const frame = pendingHostFrame;\n pendingHostFrame = undefined;\n runTeardown(() => getSchedulerDriver().cancelFrame(frame));\n}\n\nfunction syncSignalGraphPlanWork(): void {\n if (hasPendingComputedValidations()) {\n requestHostFrameIfNeeded();\n } else {\n cancelIdleHostFrame();\n }\n}\n\nfunction withCurrentFramePlanAdmission<T>(callback: () => T): T {\n currentFramePlanAdmissionDepth++;\n try {\n return callback();\n } finally {\n currentFramePlanAdmissionDepth--;\n }\n}\n\nfunction shouldDeferNewFrameWork(): boolean {\n return (\n phase !== \"idle\" &&\n phase !== \"begin\" &&\n currentFramePlanAdmissionDepth === 0\n );\n}\n\nfunction getSchedulerDriver(): SchedulerDriver {\n return (\n schedulerDriver ?? {\n requestFrame: (callback) => globalThis.requestAnimationFrame(callback),\n cancelFrame: (frameId) => globalThis.cancelAnimationFrame(frameId),\n }\n );\n}\n\nfunction createRootTransaction(): RootTransaction {\n return new RootRenderTransaction();\n}\n\nfunction throwCollectedErrors(errors: unknown[]): void {\n if (errors.length === 1) throw errors[0];\n if (errors.length > 1) {\n throw new AggregateError(errors, \"Multiple Pibbl frame operations failed.\");\n }\n}\n\nfunction removeParticipantCompletions(\n completions: RendererParticipantCompletion[],\n owner: RendererParticipantOwner,\n): void {\n for (let index = completions.length - 1; index >= 0; index--) {\n if (completions[index].owner === owner) {\n completions.splice(index, 1);\n releasedCompletionCallbacks++;\n }\n }\n}\n\nfunction removeRootWorkFrom(\n workByInstance: Map<PibblInstance, PendingInstanceWork>,\n root: PibblInstance,\n): void {\n for (const instance of workByInstance.keys()) {\n if (findRoot(instance) === root) {\n workByInstance.delete(instance);\n synchronizeInstancePendingState(instance);\n }\n }\n}\n\nfunction collectDirtyRoots(\n workByInstance: Map<PibblInstance, PendingInstanceWork>,\n roots: Set<PibblInstance>,\n): void {\n for (const instance of workByInstance.keys()) {\n const root = findRoot(instance);\n if (root && registeredRoots.has(root)) roots.add(root);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -57,6 +57,7 @@ function pibblInternalCreateSignalConsumer(options) {
|
|
|
57
57
|
const ownerState = requireActiveOwner(options.owner);
|
|
58
58
|
let disposed = false;
|
|
59
59
|
const signalConsumer = createSignalRenderConsumer({
|
|
60
|
+
layoutOwner: ownerState.instance,
|
|
60
61
|
debugName: options.debugName ?? `official renderer (${ownerState.component.id})`,
|
|
61
62
|
invalidate: () => {
|
|
62
63
|
if (!disposed && ownerState.schedulerOwner.isActive()) {
|