@pibbl/core 0.0.1 → 0.0.3-alpha.109.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/THIRD_PARTY_NOTICES.txt +81 -0
- package/dist/features/machines/animation.d.ts +64 -0
- package/dist/features/machines/animation.js +55 -0
- package/dist/features/machines/animation.js.map +7 -0
- package/dist/features/machines/animation.mjs +1 -0
- package/dist/features/machines/assign.d.ts +16 -0
- package/dist/features/machines/assign.js +15 -0
- package/dist/features/machines/assign.js.map +7 -0
- package/dist/features/machines/callback.d.ts +9 -0
- package/dist/features/machines/callback.js +7 -0
- package/dist/features/machines/callback.js.map +7 -0
- package/dist/features/machines/hook.d.ts +30 -0
- package/dist/features/machines/hook.js +37 -0
- package/dist/features/machines/hook.js.map +7 -0
- package/dist/features/machines/index.d.ts +6 -0
- package/dist/features/machines/index.js +12 -0
- package/dist/features/machines/index.js.map +7 -0
- package/dist/features/machines/index.mjs +1 -0
- package/dist/features/machines/runtime.d.ts +18 -0
- package/dist/features/machines/runtime.js +363 -0
- package/dist/features/machines/runtime.js.map +7 -0
- package/dist/features/machines/types.d.ts +164 -0
- package/dist/features/physics/2d-geometry.d.ts +3 -3
- package/dist/features/physics/2d-geometry.js.map +1 -1
- package/dist/features/physics/2d-testing.d.ts +1 -1
- package/dist/features/physics/2d-testing.js +2 -2
- package/dist/features/physics/2d-testing.js.map +2 -2
- package/dist/features/physics/2d.d.ts +115 -62
- package/dist/features/physics/2d.js +59 -28
- package/dist/features/physics/2d.js.map +2 -2
- package/dist/features/physics/lib/2d/canvas/components.js +25 -21
- package/dist/features/physics/lib/2d/canvas/components.js.map +2 -2
- package/dist/features/physics/lib/2d/canvas/presentation.js +1 -2
- package/dist/features/physics/lib/2d/canvas/presentation.js.map +2 -2
- package/dist/features/physics/lib/2d/collision/casts.js +4 -2
- package/dist/features/physics/lib/2d/collision/casts.js.map +2 -2
- package/dist/features/physics/lib/2d/query-types.d.ts +6 -0
- package/dist/features/physics/lib/2d/runtime/controller.d.ts +7 -6
- package/dist/features/physics/lib/2d/runtime/controller.js +1 -1
- package/dist/features/physics/lib/2d/runtime/controller.js.map +2 -2
- package/dist/features/physics/lib/2d/runtime/obstacles.js +9 -11
- package/dist/features/physics/lib/2d/runtime/obstacles.js.map +2 -2
- package/dist/features/physics/lib/2d/shapes.js +8 -9
- package/dist/features/physics/lib/2d/shapes.js.map +2 -2
- package/dist/features/physics/lib/2d/types.d.ts +8 -30
- package/dist/features/physics/lib/2d/world/queries.d.ts +7 -6
- package/dist/features/physics/lib/2d/world/queries.js.map +2 -2
- package/dist/features/physics/lib/2d/world/rapier.js +22 -26
- package/dist/features/physics/lib/2d/world/rapier.js.map +2 -2
- package/dist/features/sprites/formats/aseprite.d.ts +5 -0
- package/dist/features/sprites/formats/texture-packer.d.ts +5 -0
- package/dist/features/sprites/index.d.ts +6 -0
- package/dist/features/sprites/loader.d.ts +25 -0
- package/dist/features/sprites/loader.js +6 -3
- package/dist/features/sprites/loader.js.map +2 -2
- package/dist/features/sprites/model.d.ts +75 -0
- package/dist/features/sprites/sprite.d.ts +22 -0
- package/dist/features/textures/index.d.ts +12 -2
- package/dist/features/textures/index.js +33 -1
- package/dist/features/textures/index.js.map +2 -2
- package/dist/features/textures/lib/chemical-field.d.ts +56 -0
- package/dist/features/textures/lib/chemical-field.js +154 -0
- package/dist/features/textures/lib/chemical-field.js.map +7 -0
- package/dist/features/textures/lib/chemical-recipes.d.ts +119 -0
- package/dist/features/textures/lib/chemical-recipes.js +275 -0
- package/dist/features/textures/lib/chemical-recipes.js.map +7 -0
- package/dist/features/textures/lib/definitions.d.ts +3 -18
- package/dist/features/textures/lib/definitions.js +17 -24
- package/dist/features/textures/lib/definitions.js.map +2 -2
- package/dist/features/textures/lib/geometric-patterns.d.ts +149 -0
- package/dist/features/textures/lib/geometric-patterns.js +305 -0
- package/dist/features/textures/lib/geometric-patterns.js.map +7 -0
- package/dist/features/textures/lib/gray-scott.d.ts +55 -0
- package/dist/features/textures/lib/gray-scott.js +37 -0
- package/dist/features/textures/lib/gray-scott.js.map +7 -0
- package/dist/features/textures/lib/palette.js +1 -3
- package/dist/features/textures/lib/palette.js.map +2 -2
- package/dist/features/textures/lib/patterns.d.ts +123 -0
- package/dist/features/textures/lib/patterns.js +344 -0
- package/dist/features/textures/lib/patterns.js.map +7 -0
- package/dist/features/textures/lib/rain-drops.js +2 -1
- package/dist/features/textures/lib/rain-drops.js.map +2 -2
- package/dist/features/textures/lib/reaction-diffusion.d.ts +3 -2
- package/dist/features/textures/lib/reaction-diffusion.js +9 -20
- package/dist/features/textures/lib/reaction-diffusion.js.map +2 -2
- package/dist/features/textures/lib/simulation.d.ts +10 -4
- package/dist/features/textures/lib/simulation.js +23 -13
- package/dist/features/textures/lib/simulation.js.map +2 -2
- package/dist/features/textures/lib/wasm/electric.js +8 -1
- package/dist/features/textures/lib/wasm/electric.js.map +2 -2
- package/dist/features/textures/lib/water-surface.js +1 -3
- package/dist/features/textures/lib/water-surface.js.map +2 -2
- package/dist/features/viz/index.d.ts +92 -5
- package/dist/features/viz/index.js +202 -4
- package/dist/features/viz/index.js.map +2 -2
- package/dist/features/viz/inspection/bar.d.ts +79 -0
- package/dist/features/viz/inspection/bar.js +49 -0
- package/dist/features/viz/inspection/bar.js.map +7 -0
- package/dist/features/viz/inspection/candle.d.ts +156 -0
- package/dist/features/viz/inspection/candle.js +120 -0
- package/dist/features/viz/inspection/candle.js.map +7 -0
- package/dist/features/viz/inspection/capture-types.d.ts +65 -0
- package/dist/features/viz/inspection/capture.d.ts +16 -0
- package/dist/features/viz/inspection/capture.js +49 -0
- package/dist/features/viz/inspection/capture.js.map +7 -0
- package/dist/features/viz/inspection/handler.d.ts +36 -0
- package/dist/features/viz/inspection/handler.js +91 -0
- package/dist/features/viz/inspection/handler.js.map +7 -0
- package/dist/features/viz/inspection/ohlc-bar.d.ts +132 -0
- package/dist/features/viz/inspection/ohlc-bar.js +118 -0
- package/dist/features/viz/inspection/ohlc-bar.js.map +7 -0
- package/dist/features/viz/inspection/owned-ref.d.ts +16 -0
- package/dist/features/viz/inspection/owned-ref.js +99 -0
- package/dist/features/viz/inspection/owned-ref.js.map +7 -0
- package/dist/features/viz/inspection/painted-point.d.ts +22 -0
- package/dist/features/viz/inspection/painted-point.js +29 -0
- package/dist/features/viz/inspection/painted-point.js.map +7 -0
- package/dist/features/viz/inspection/queries.d.ts +100 -0
- package/dist/features/viz/inspection/queries.js +192 -0
- package/dist/features/viz/inspection/queries.js.map +7 -0
- package/dist/features/viz/inspection/query-types.d.ts +177 -0
- package/dist/features/viz/inspection/volume.d.ts +104 -0
- package/dist/features/viz/inspection/volume.js +95 -0
- package/dist/features/viz/inspection/volume.js.map +7 -0
- package/dist/features/viz/inspection.d.ts +19 -0
- package/dist/features/viz/inspection.js +54 -0
- package/dist/features/viz/inspection.js.map +7 -0
- package/dist/features/viz/inspection.mjs +1 -0
- package/dist/features/viz/lib/area-series.d.ts +62 -0
- package/dist/features/viz/lib/area-series.js +120 -0
- package/dist/features/viz/lib/area-series.js.map +7 -0
- package/dist/features/viz/lib/axis-labels.d.ts +2 -0
- package/dist/features/viz/lib/axis-labels.js +41 -0
- package/dist/features/viz/lib/axis-labels.js.map +7 -0
- package/dist/features/viz/lib/axis-title.d.ts +23 -0
- package/dist/features/viz/lib/axis-title.js +24 -0
- package/dist/features/viz/lib/axis-title.js.map +7 -0
- package/dist/features/viz/lib/axis.d.ts +1 -1
- package/dist/features/viz/lib/axis.js +50 -50
- package/dist/features/viz/lib/axis.js.map +2 -2
- package/dist/features/viz/lib/bar-scale.d.ts +7 -0
- package/dist/features/viz/lib/bar-scale.js +34 -0
- package/dist/features/viz/lib/bar-scale.js.map +7 -0
- package/dist/features/viz/lib/bar-series.d.ts +3 -1
- package/dist/features/viz/lib/bar-series.js +21 -5
- package/dist/features/viz/lib/bar-series.js.map +2 -2
- package/dist/features/viz/lib/baseline-series.d.ts +55 -0
- package/dist/features/viz/lib/baseline-series.js +136 -0
- package/dist/features/viz/lib/baseline-series.js.map +7 -0
- package/dist/features/viz/lib/candlestick-series.d.ts +62 -0
- package/dist/features/viz/lib/candlestick-series.js +150 -0
- package/dist/features/viz/lib/candlestick-series.js.map +7 -0
- package/dist/features/viz/lib/censored-point-series.d.ts +71 -0
- package/dist/features/viz/lib/censored-point-series.js +129 -0
- package/dist/features/viz/lib/censored-point-series.js.map +7 -0
- package/dist/features/viz/lib/chart-lines.d.ts +41 -0
- package/dist/features/viz/lib/chart-lines.js +32 -0
- package/dist/features/viz/lib/chart-lines.js.map +7 -0
- package/dist/features/viz/lib/color-context.d.ts +4 -0
- package/dist/features/viz/lib/color-context.js +41 -0
- package/dist/features/viz/lib/color-context.js.map +7 -0
- package/dist/features/viz/lib/color-math.d.ts +4 -0
- package/dist/features/viz/lib/color-math.js +31 -0
- package/dist/features/viz/lib/color-math.js.map +7 -0
- package/dist/features/viz/lib/color-types.d.ts +53 -0
- package/dist/features/viz/lib/curve-definition.d.ts +49 -0
- package/dist/features/viz/lib/curve-definition.js +142 -0
- package/dist/features/viz/lib/curve-definition.js.map +7 -0
- package/dist/features/viz/lib/diverging-color-scale.d.ts +11 -0
- package/dist/features/viz/lib/diverging-color-scale.js +51 -0
- package/dist/features/viz/lib/diverging-color-scale.js.map +7 -0
- package/dist/features/viz/lib/domain-navigation.d.ts +40 -0
- package/dist/features/viz/lib/domain-navigation.js +77 -0
- package/dist/features/viz/lib/domain-navigation.js.map +7 -0
- package/dist/features/viz/lib/editable-chart-elements.d.ts +178 -0
- package/dist/features/viz/lib/editable-chart-elements.js +733 -0
- package/dist/features/viz/lib/editable-chart-elements.js.map +7 -0
- package/dist/features/viz/lib/financial-aggregation.d.ts +127 -0
- package/dist/features/viz/lib/financial-aggregation.js +116 -0
- package/dist/features/viz/lib/financial-aggregation.js.map +7 -0
- package/dist/features/viz/lib/financial-autoscale.d.ts +64 -0
- package/dist/features/viz/lib/financial-autoscale.js +61 -0
- package/dist/features/viz/lib/financial-autoscale.js.map +7 -0
- package/dist/features/viz/lib/financial-comparison.d.ts +62 -0
- package/dist/features/viz/lib/financial-comparison.js +98 -0
- package/dist/features/viz/lib/financial-comparison.js.map +7 -0
- package/dist/features/viz/lib/financial-geometry.d.ts +77 -0
- package/dist/features/viz/lib/financial-geometry.js +67 -0
- package/dist/features/viz/lib/financial-geometry.js.map +7 -0
- package/dist/features/viz/lib/financial-indicators.d.ts +114 -0
- package/dist/features/viz/lib/financial-indicators.js +135 -0
- package/dist/features/viz/lib/financial-indicators.js.map +7 -0
- package/dist/features/viz/lib/financial-oscillators.d.ts +171 -0
- package/dist/features/viz/lib/financial-oscillators.js +265 -0
- package/dist/features/viz/lib/financial-oscillators.js.map +7 -0
- package/dist/features/viz/lib/graph/bipartite.d.ts +14 -0
- package/dist/features/viz/lib/graph/bipartite.js +250 -0
- package/dist/features/viz/lib/graph/bipartite.js.map +7 -0
- package/dist/features/viz/lib/graph/chord.d.ts +44 -0
- package/dist/features/viz/lib/graph/chord.js +348 -0
- package/dist/features/viz/lib/graph/chord.js.map +7 -0
- package/dist/features/viz/lib/graph/dependency.d.ts +26 -0
- package/dist/features/viz/lib/graph/dependency.js +140 -0
- package/dist/features/viz/lib/graph/dependency.js.map +7 -0
- package/dist/features/viz/lib/graph/force.d.ts +28 -0
- package/dist/features/viz/lib/graph/force.js +580 -0
- package/dist/features/viz/lib/graph/force.js.map +7 -0
- package/dist/features/viz/lib/graph/hierarchy.d.ts +21 -0
- package/dist/features/viz/lib/graph/hierarchy.js +112 -0
- package/dist/features/viz/lib/graph/hierarchy.js.map +7 -0
- package/dist/features/viz/lib/graph/icicle.d.ts +16 -0
- package/dist/features/viz/lib/graph/icicle.js +153 -0
- package/dist/features/viz/lib/graph/icicle.js.map +7 -0
- package/dist/features/viz/lib/graph/matrix.d.ts +30 -0
- package/dist/features/viz/lib/graph/matrix.js +243 -0
- package/dist/features/viz/lib/graph/matrix.js.map +7 -0
- package/dist/features/viz/lib/graph/neighborhood.d.ts +11 -0
- package/dist/features/viz/lib/graph/neighborhood.js +281 -0
- package/dist/features/viz/lib/graph/neighborhood.js.map +7 -0
- package/dist/features/viz/lib/graph/routes.d.ts +35 -0
- package/dist/features/viz/lib/graph/routes.js +101 -0
- package/dist/features/viz/lib/graph/routes.js.map +7 -0
- package/dist/features/viz/lib/graph/sankey.d.ts +44 -0
- package/dist/features/viz/lib/graph/sankey.js +341 -0
- package/dist/features/viz/lib/graph/sankey.js.map +7 -0
- package/dist/features/viz/lib/graph/shared.d.ts +59 -0
- package/dist/features/viz/lib/graph/shared.js +301 -0
- package/dist/features/viz/lib/graph/shared.js.map +7 -0
- package/dist/features/viz/lib/graph/tree.d.ts +11 -0
- package/dist/features/viz/lib/graph/tree.js +232 -0
- package/dist/features/viz/lib/graph/tree.js.map +7 -0
- package/dist/features/viz/lib/graph/treemap.d.ts +20 -0
- package/dist/features/viz/lib/graph/treemap.js +227 -0
- package/dist/features/viz/lib/graph/treemap.js.map +7 -0
- package/dist/features/viz/lib/graph/types.d.ts +1097 -0
- package/dist/features/viz/lib/hover-card.js +8 -9
- package/dist/features/viz/lib/hover-card.js.map +2 -2
- package/dist/features/viz/lib/hover-data.d.ts +1 -1
- package/dist/features/viz/lib/hover-data.js +6 -3
- package/dist/features/viz/lib/hover-data.js.map +2 -2
- package/dist/features/viz/lib/hover-types.d.ts +5 -5
- package/dist/features/viz/lib/interval-band-series.d.ts +49 -0
- package/dist/features/viz/lib/interval-band-series.js +136 -0
- package/dist/features/viz/lib/interval-band-series.js.map +7 -0
- package/dist/features/viz/lib/interval-diamond-series.d.ts +43 -0
- package/dist/features/viz/lib/interval-diamond-series.js +122 -0
- package/dist/features/viz/lib/interval-diamond-series.js.map +7 -0
- package/dist/features/viz/lib/interval-series.d.ts +79 -0
- package/dist/features/viz/lib/interval-series.js +158 -0
- package/dist/features/viz/lib/interval-series.js.map +7 -0
- package/dist/features/viz/lib/layout-pie.js +9 -13
- package/dist/features/viz/lib/layout-pie.js.map +2 -2
- package/dist/features/viz/lib/line-series.d.ts +1 -1
- package/dist/features/viz/lib/line-series.js +47 -28
- package/dist/features/viz/lib/line-series.js.map +2 -2
- package/dist/features/viz/lib/linear-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/linear-scale-component.js +18 -0
- package/dist/features/viz/lib/linear-scale-component.js.map +7 -0
- package/dist/features/viz/lib/linear-scale.js +1 -1
- package/dist/features/viz/lib/linear-scale.js.map +2 -2
- package/dist/features/viz/lib/log-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/log-scale-component.js +19 -0
- package/dist/features/viz/lib/log-scale-component.js.map +7 -0
- package/dist/features/viz/lib/log-scale.d.ts +2 -0
- package/dist/features/viz/lib/log-scale.js +53 -0
- package/dist/features/viz/lib/log-scale.js.map +7 -0
- package/dist/features/viz/lib/monotone-curve.d.ts +11 -0
- package/dist/features/viz/lib/monotone-curve.js +63 -0
- package/dist/features/viz/lib/monotone-curve.js.map +7 -0
- package/dist/features/viz/lib/nearest.d.ts +9 -9
- package/dist/features/viz/lib/nearest.js.map +1 -1
- package/dist/features/viz/lib/numeric-range-interpolation.d.ts +15 -0
- package/dist/features/viz/lib/numeric-range-interpolation.js +36 -0
- package/dist/features/viz/lib/numeric-range-interpolation.js.map +7 -0
- package/dist/features/viz/lib/numeric-ticks.d.ts +38 -0
- package/dist/features/viz/lib/numeric-ticks.js +54 -0
- package/dist/features/viz/lib/numeric-ticks.js.map +7 -0
- package/dist/features/viz/lib/ohlc-bar-series.d.ts +55 -0
- package/dist/features/viz/lib/ohlc-bar-series.js +168 -0
- package/dist/features/viz/lib/ohlc-bar-series.js.map +7 -0
- package/dist/features/viz/lib/paired-series.d.ts +44 -0
- package/dist/features/viz/lib/paired-series.js +93 -0
- package/dist/features/viz/lib/paired-series.js.map +7 -0
- package/dist/features/viz/lib/pie-layout.js +2 -1
- package/dist/features/viz/lib/pie-layout.js.map +2 -2
- package/dist/features/viz/lib/plot-series.js +11 -6
- package/dist/features/viz/lib/plot-series.js.map +2 -2
- package/dist/features/viz/lib/plot-types.d.ts +4 -3
- package/dist/features/viz/lib/point-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/point-scale-component.js +19 -0
- package/dist/features/viz/lib/point-scale-component.js.map +7 -0
- package/dist/features/viz/lib/point-scale.d.ts +2 -0
- package/dist/features/viz/lib/point-scale.js +45 -0
- package/dist/features/viz/lib/point-scale.js.map +7 -0
- package/dist/features/viz/lib/point-series.d.ts +1 -1
- package/dist/features/viz/lib/point-series.js +36 -9
- package/dist/features/viz/lib/point-series.js.map +2 -2
- package/dist/features/viz/lib/point-types.d.ts +5 -2
- package/dist/features/viz/lib/reference-band.d.ts +16 -0
- package/dist/features/viz/lib/reference-band.js +30 -0
- package/dist/features/viz/lib/reference-band.js.map +7 -0
- package/dist/features/viz/lib/scale-adjust.js +9 -4
- package/dist/features/viz/lib/scale-adjust.js.map +2 -2
- package/dist/features/viz/lib/scale-context.d.ts +5 -4
- package/dist/features/viz/lib/scale-context.js +15 -11
- package/dist/features/viz/lib/scale-context.js.map +2 -2
- package/dist/features/viz/lib/scale-provider.d.ts +2 -0
- package/dist/features/viz/lib/scale-provider.js +13 -0
- package/dist/features/viz/lib/scale-provider.js.map +7 -0
- package/dist/features/viz/lib/scale-ticks.d.ts +5 -0
- package/dist/features/viz/lib/scale-ticks.js +64 -0
- package/dist/features/viz/lib/scale-ticks.js.map +7 -0
- package/dist/features/viz/lib/scale-view.d.ts +4 -0
- package/dist/features/viz/lib/scale-view.js +21 -0
- package/dist/features/viz/lib/scale-view.js.map +7 -0
- package/dist/features/viz/lib/sequential-color-scale.d.ts +11 -0
- package/dist/features/viz/lib/sequential-color-scale.js +49 -0
- package/dist/features/viz/lib/sequential-color-scale.js.map +7 -0
- package/dist/features/viz/lib/series-position.d.ts +12 -0
- package/dist/features/viz/lib/series-position.js +44 -0
- package/dist/features/viz/lib/series-position.js.map +7 -0
- package/dist/features/viz/lib/step-curves.d.ts +19 -0
- package/dist/features/viz/lib/step-curves.js +53 -0
- package/dist/features/viz/lib/step-curves.js.map +7 -0
- package/dist/features/viz/lib/symlog-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/symlog-scale-component.js +19 -0
- package/dist/features/viz/lib/symlog-scale-component.js.map +7 -0
- package/dist/features/viz/lib/symlog-scale.d.ts +2 -0
- package/dist/features/viz/lib/symlog-scale.js +38 -0
- package/dist/features/viz/lib/symlog-scale.js.map +7 -0
- package/dist/features/viz/lib/threshold-color-scale.d.ts +43 -0
- package/dist/features/viz/lib/threshold-color-scale.js +59 -0
- package/dist/features/viz/lib/threshold-color-scale.js.map +7 -0
- package/dist/features/viz/lib/trading-time-mapping.d.ts +32 -0
- package/dist/features/viz/lib/trading-time-mapping.js +89 -0
- package/dist/features/viz/lib/trading-time-mapping.js.map +7 -0
- package/dist/features/viz/lib/trading-time-scale.d.ts +83 -0
- package/dist/features/viz/lib/trading-time-scale.js +96 -0
- package/dist/features/viz/lib/trading-time-scale.js.map +7 -0
- package/dist/features/viz/lib/trajectory-series.d.ts +71 -0
- package/dist/features/viz/lib/trajectory-series.js +111 -0
- package/dist/features/viz/lib/trajectory-series.js.map +7 -0
- package/dist/features/viz/lib/types.d.ts +114 -21
- package/dist/features/viz/lib/use-bar-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-bar-scale.js +9 -0
- package/dist/features/viz/lib/use-bar-scale.js.map +7 -0
- package/dist/features/viz/lib/use-continuous-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-continuous-scale.js +14 -0
- package/dist/features/viz/lib/use-continuous-scale.js.map +7 -0
- package/dist/features/viz/lib/use-linear-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-linear-scale.js +9 -0
- package/dist/features/viz/lib/use-linear-scale.js.map +7 -0
- package/dist/features/viz/lib/use-log-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-log-scale.js +9 -0
- package/dist/features/viz/lib/use-log-scale.js.map +7 -0
- package/dist/features/viz/lib/use-point-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-point-scale.js +9 -0
- package/dist/features/viz/lib/use-point-scale.js.map +7 -0
- package/dist/features/viz/lib/use-symlog-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-symlog-scale.js +9 -0
- package/dist/features/viz/lib/use-symlog-scale.js.map +7 -0
- package/dist/features/viz/lib/use-utc-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-utc-scale.js +9 -0
- package/dist/features/viz/lib/use-utc-scale.js.map +7 -0
- package/dist/features/viz/lib/utc-labels.d.ts +12 -0
- package/dist/features/viz/lib/utc-labels.js +27 -0
- package/dist/features/viz/lib/utc-labels.js.map +7 -0
- package/dist/features/viz/lib/utc-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/utc-scale-component.js +18 -0
- package/dist/features/viz/lib/utc-scale-component.js.map +7 -0
- package/dist/features/viz/lib/utc-scale.d.ts +21 -0
- package/dist/features/viz/lib/utc-scale.js +124 -0
- package/dist/features/viz/lib/utc-scale.js.map +7 -0
- package/dist/features/viz/lib/volume-series.d.ts +59 -0
- package/dist/features/viz/lib/volume-series.js +117 -0
- package/dist/features/viz/lib/volume-series.js.map +7 -0
- package/dist/features/viz/lib/weighted-point-series.d.ts +71 -0
- package/dist/features/viz/lib/weighted-point-series.js +169 -0
- package/dist/features/viz/lib/weighted-point-series.js.map +7 -0
- package/dist/filters/backdrop-contrast-gpu.d.ts +5 -0
- package/dist/filters/backdrop-contrast-gpu.js +33 -0
- package/dist/filters/backdrop-contrast-gpu.js.map +7 -0
- package/dist/filters/backdrop-contrast.d.ts +21 -0
- package/dist/filters/backdrop-contrast.js +61 -0
- package/dist/filters/backdrop-contrast.js.map +7 -0
- package/dist/filters/displacement.js +1 -1
- package/dist/filters/displacement.js.map +2 -2
- package/dist/filters/emboss-gpu.d.ts +4 -0
- package/dist/filters/emboss-gpu.js +39 -0
- package/dist/filters/emboss-gpu.js.map +7 -0
- package/dist/filters/emboss.d.ts +32 -0
- package/dist/filters/emboss.js +104 -0
- package/dist/filters/emboss.js.map +7 -0
- package/dist/filters/filter-executor.d.ts +11 -4
- package/dist/filters/filter-executor.js +104 -49
- package/dist/filters/filter-executor.js.map +2 -2
- package/dist/filters/reflected-light.js +1 -1
- package/dist/filters/reflected-light.js.map +2 -2
- package/dist/filters/reflection-gpu.d.ts +3 -1
- package/dist/filters/reflection-gpu.js +5 -2
- package/dist/filters/reflection-gpu.js.map +2 -2
- package/dist/filters/render-backdrop-contrast-boundary.d.ts +31 -0
- package/dist/filters/render-backdrop-contrast-boundary.js +116 -0
- package/dist/filters/render-backdrop-contrast-boundary.js.map +7 -0
- package/dist/filters/render-emboss-boundary.d.ts +13 -0
- package/dist/filters/render-emboss-boundary.js +131 -0
- package/dist/filters/render-emboss-boundary.js.map +7 -0
- package/dist/filters.d.ts +9 -5
- package/dist/filters.js +4 -0
- package/dist/filters.js.map +2 -2
- package/dist/index.d.ts +10 -6
- package/dist/index.js +18 -2
- package/dist/index.js.map +2 -2
- package/dist/internal.d.ts +4 -0
- package/dist/internal.js +6 -0
- package/dist/internal.js.map +2 -2
- package/dist/layout-kernel.d.ts +12 -0
- package/dist/layout-kernel.js +11 -0
- package/dist/layout-kernel.js.map +7 -0
- package/dist/layout-kernel.mjs +1 -0
- package/dist/lib/animation/definition.d.ts +5 -3
- package/dist/lib/animation/definition.js +29 -4
- package/dist/lib/animation/definition.js.map +2 -2
- package/dist/lib/animation/playback.d.ts +8 -0
- package/dist/lib/animation/playback.js +33 -11
- package/dist/lib/animation/playback.js.map +2 -2
- package/dist/lib/animation/spring.d.ts +3 -1
- package/dist/lib/animation/spring.js.map +2 -2
- package/dist/lib/animation/types.d.ts +29 -73
- package/dist/lib/backend/types.d.ts +13 -1
- package/dist/lib/backend/types.js.map +2 -2
- package/dist/lib/components/arc-geometry.js +2 -1
- package/dist/lib/components/arc-geometry.js.map +2 -2
- package/dist/lib/components/g.js +2 -0
- package/dist/lib/components/g.js.map +2 -2
- package/dist/lib/components/html-box.js +2 -1
- package/dist/lib/components/html-box.js.map +2 -2
- package/dist/lib/components/img.js +3 -3
- package/dist/lib/components/img.js.map +2 -2
- package/dist/lib/components/layer.js +98 -16
- package/dist/lib/components/layer.js.map +3 -3
- package/dist/lib/components/text.d.ts +16 -0
- package/dist/lib/components/text.js +131 -24
- package/dist/lib/components/text.js.map +2 -2
- package/dist/lib/define-primitive.d.ts +4 -2
- package/dist/lib/define-primitive.js +3 -1
- package/dist/lib/define-primitive.js.map +2 -2
- package/dist/lib/element/metadata.d.ts +9 -0
- package/dist/lib/element/metadata.js +19 -0
- package/dist/lib/element/metadata.js.map +2 -2
- package/dist/lib/element/resolve-primitive-inputs.d.ts +2 -0
- package/dist/lib/element/resolve-primitive-inputs.js +17 -4
- package/dist/lib/element/resolve-primitive-inputs.js.map +2 -2
- package/dist/lib/events/event-facade.d.ts +18 -0
- package/dist/lib/events/event-facade.js +28 -2
- package/dist/lib/events/event-facade.js.map +2 -2
- package/dist/lib/events/hit-test.js +2 -1
- package/dist/lib/events/hit-test.js.map +2 -2
- package/dist/lib/events/propagation.d.ts +2 -1
- package/dist/lib/events/propagation.js +22 -16
- package/dist/lib/events/propagation.js.map +2 -2
- package/dist/lib/events/registrations.d.ts +10 -0
- package/dist/lib/events/registrations.js +160 -5
- package/dist/lib/events/registrations.js.map +2 -2
- package/dist/lib/execute-render.js +25 -1
- package/dist/lib/execute-render.js.map +2 -2
- package/dist/lib/filter/filter-region.js +3 -10
- package/dist/lib/filter/filter-region.js.map +2 -2
- package/dist/lib/focus/focus-manager.d.ts +8 -1
- package/dist/lib/focus/focus-manager.js +87 -43
- package/dist/lib/focus/focus-manager.js.map +2 -2
- package/dist/lib/focus/geometry.d.ts +2 -0
- package/dist/lib/focus/geometry.js +6 -0
- package/dist/lib/focus/geometry.js.map +2 -2
- package/dist/lib/geometry/path-bend-guide.js +1 -1
- package/dist/lib/geometry/path-bend-guide.js.map +2 -2
- package/dist/lib/geometry/path-geometry.js +12 -11
- package/dist/lib/geometry/path-geometry.js.map +2 -2
- package/dist/lib/geometry/path-transforms.js +17 -21
- package/dist/lib/geometry/path-transforms.js.map +2 -2
- package/dist/lib/geometry/path-warp-bezier.js +3 -1
- package/dist/lib/geometry/path-warp-bezier.js.map +2 -2
- package/dist/lib/geometry/path-warp.js +1 -1
- package/dist/lib/geometry/path-warp.js.map +2 -2
- package/dist/lib/global-state.js +2 -0
- package/dist/lib/global-state.js.map +2 -2
- package/dist/lib/hooks/use-animated-value.d.ts +11 -21
- package/dist/lib/hooks/use-animated-value.js +23 -70
- package/dist/lib/hooks/use-animated-value.js.map +3 -3
- package/dist/lib/hooks/use-playback.js +1 -0
- package/dist/lib/hooks/use-playback.js.map +2 -2
- package/dist/lib/html/html-events.d.ts +32 -0
- package/dist/lib/html/html-events.js +179 -0
- package/dist/lib/html/html-events.js.map +7 -0
- package/dist/lib/html/html-service.d.ts +8 -2
- package/dist/lib/html/html-service.js +198 -65
- package/dist/lib/html/html-service.js.map +2 -2
- package/dist/lib/html/overlay-config.js +7 -6
- package/dist/lib/html/overlay-config.js.map +2 -2
- package/dist/lib/html/types.d.ts +29 -2
- package/dist/lib/layout/absolute.d.ts +11 -5
- package/dist/lib/layout/absolute.js +329 -55
- package/dist/lib/layout/absolute.js.map +3 -3
- package/dist/lib/layout/allocation-checkpoint-owner.d.ts +11 -0
- package/dist/lib/layout/allocation-checkpoint-owner.js +86 -0
- package/dist/lib/layout/allocation-checkpoint-owner.js.map +7 -0
- package/dist/lib/layout/allocation-checkpoint.d.ts +53 -0
- package/dist/lib/layout/allocation-checkpoint.js +463 -0
- package/dist/lib/layout/allocation-checkpoint.js.map +7 -0
- package/dist/lib/layout/allocation-dependencies.d.ts +30 -0
- package/dist/lib/layout/allocation-dependencies.js +90 -0
- package/dist/lib/layout/allocation-dependencies.js.map +7 -0
- package/dist/lib/layout/allocation-revision.d.ts +13 -0
- package/dist/lib/layout/allocation-revision.js +67 -0
- package/dist/lib/layout/allocation-revision.js.map +7 -0
- package/dist/lib/layout/box-insets.d.ts +17 -0
- package/dist/lib/layout/box-insets.js +138 -0
- package/dist/lib/layout/box-insets.js.map +7 -0
- package/dist/lib/layout/box-sizing.d.ts +16 -0
- package/dist/lib/layout/box-sizing.js +77 -0
- package/dist/lib/layout/box-sizing.js.map +7 -0
- package/dist/lib/layout/box.js +42 -12
- package/dist/lib/layout/box.js.map +2 -2
- package/dist/lib/layout/canvas-measurement.d.ts +13 -0
- package/dist/lib/layout/canvas-measurement.js +57 -0
- package/dist/lib/layout/canvas-measurement.js.map +7 -0
- package/dist/lib/layout/context.d.ts +35 -6
- package/dist/lib/layout/context.js +72 -3
- package/dist/lib/layout/context.js.map +2 -2
- package/dist/lib/layout/define-layout-component.d.ts +23 -0
- package/dist/lib/layout/define-layout-component.js +84 -0
- package/dist/lib/layout/define-layout-component.js.map +7 -0
- package/dist/lib/layout/flex-allocation-cache.d.ts +42 -0
- package/dist/lib/layout/flex-baseline-mode.d.ts +2 -0
- package/dist/lib/layout/flex-baseline-mode.js +7 -0
- package/dist/lib/layout/flex-baseline-mode.js.map +7 -0
- package/dist/lib/layout/flex.d.ts +50 -15
- package/dist/lib/layout/flex.js +2124 -195
- package/dist/lib/layout/flex.js.map +3 -3
- package/dist/lib/layout/flow.js +225 -49
- package/dist/lib/layout/flow.js.map +2 -2
- package/dist/lib/layout/geometry-publication.d.ts +53 -0
- package/dist/lib/layout/geometry-publication.js +244 -0
- package/dist/lib/layout/geometry-publication.js.map +7 -0
- package/dist/lib/layout/grid-kernel.d.ts +63 -0
- package/dist/lib/layout/grid-kernel.js +168 -0
- package/dist/lib/layout/grid-kernel.js.map +7 -0
- package/dist/lib/layout/grid.d.ts +63 -4
- package/dist/lib/layout/grid.js +767 -171
- package/dist/lib/layout/grid.js.map +3 -3
- package/dist/lib/layout/measure.d.ts +55 -3
- package/dist/lib/layout/measure.js +448 -15
- package/dist/lib/layout/measure.js.map +2 -2
- package/dist/lib/layout/overlay.js +81 -23
- package/dist/lib/layout/overlay.js.map +2 -2
- package/dist/lib/layout/participation.d.ts +27 -0
- package/dist/lib/layout/participation.js +188 -0
- package/dist/lib/layout/participation.js.map +7 -0
- package/dist/lib/layout/place-child.js +1 -1
- package/dist/lib/layout/place-child.js.map +2 -2
- package/dist/lib/layout/positioning-diagnostics.d.ts +1 -1
- package/dist/lib/layout/positioning-diagnostics.js +13 -2
- package/dist/lib/layout/positioning-diagnostics.js.map +2 -2
- package/dist/lib/layout/prepared-root.d.ts +121 -0
- package/dist/lib/layout/prepared-root.js +360 -0
- package/dist/lib/layout/prepared-root.js.map +7 -0
- package/dist/lib/layout/standalone-kernel.d.ts +60 -0
- package/dist/lib/layout/standalone-kernel.js +722 -0
- package/dist/lib/layout/standalone-kernel.js.map +7 -0
- package/dist/lib/layout/topology.d.ts +21 -0
- package/dist/lib/layout/topology.js +113 -0
- package/dist/lib/layout/topology.js.map +7 -0
- package/dist/lib/layout/types.d.ts +5 -0
- package/dist/lib/layout/wasm/artifact.d.ts +1 -0
- package/dist/lib/layout/wasm/artifact.js +5 -0
- package/dist/lib/layout/wasm/artifact.js.map +7 -0
- package/dist/lib/layout/wasm/bytes.d.ts +1 -0
- package/dist/lib/layout/wasm/bytes.js +5 -0
- package/dist/lib/layout/wasm/bytes.js.map +7 -0
- package/dist/lib/layout/wasm/embedded.d.ts +2 -0
- package/dist/lib/layout/wasm/embedded.js +12 -0
- package/dist/lib/layout/wasm/embedded.js.map +7 -0
- package/dist/lib/layout/wasm/layout.wasm +0 -0
- package/dist/lib/layout/wasm/module.d.ts +8 -0
- package/dist/lib/layout/wasm/module.js +70 -0
- package/dist/lib/layout/wasm/module.js.map +7 -0
- package/dist/lib/layout/wasm/region.d.ts +267 -0
- package/dist/lib/layout/wasm/region.js +1018 -0
- package/dist/lib/layout/wasm/region.js.map +7 -0
- package/dist/lib/manipulation/controller.js +4 -7
- package/dist/lib/manipulation/controller.js.map +2 -2
- package/dist/lib/manipulation/frame.js +1 -1
- package/dist/lib/manipulation/frame.js.map +2 -2
- package/dist/lib/manipulation/handles.js +32 -33
- package/dist/lib/manipulation/handles.js.map +2 -2
- package/dist/lib/manipulation/solve.js +12 -10
- package/dist/lib/manipulation/solve.js.map +2 -2
- package/dist/lib/mount-pibbl.js +1 -0
- package/dist/lib/mount-pibbl.js.map +2 -2
- package/dist/lib/mount-prepared-pibbl.d.ts +5 -0
- package/dist/lib/mount-prepared-pibbl.js +29 -0
- package/dist/lib/mount-prepared-pibbl.js.map +7 -0
- package/dist/lib/mount-request.d.ts +8 -0
- package/dist/lib/mount-request.js +41 -0
- package/dist/lib/mount-request.js.map +7 -0
- package/dist/lib/pibbl.d.ts +21 -13
- package/dist/lib/pibbl.js +18 -16
- package/dist/lib/pibbl.js.map +2 -2
- package/dist/lib/recording/recording.d.ts +43 -0
- package/dist/lib/recording/recording.js +555 -0
- package/dist/lib/recording/recording.js.map +7 -0
- package/dist/lib/recording/types.d.ts +118 -0
- package/dist/lib/recording/wasm-bytes.d.ts +1 -0
- package/dist/lib/recording/wasm-bytes.js +5 -0
- package/dist/lib/recording/wasm-bytes.js.map +7 -0
- package/dist/lib/recording/worker-source.d.ts +1 -0
- package/dist/lib/recording/worker-source.js +5 -0
- package/dist/lib/recording/worker-source.js.map +7 -0
- package/dist/lib/render-layer/controller.d.ts +9 -3
- package/dist/lib/render-layer/controller.js +259 -110
- package/dist/lib/render-layer/controller.js.map +2 -2
- package/dist/lib/render-transaction.d.ts +12 -2
- package/dist/lib/render-transaction.js +69 -1
- package/dist/lib/render-transaction.js.map +2 -2
- package/dist/lib/render.js +32 -8
- package/dist/lib/render.js.map +2 -2
- package/dist/lib/scheduler/realm-scheduler.d.ts +2 -0
- package/dist/lib/scheduler/realm-scheduler.js +55 -26
- package/dist/lib/scheduler/realm-scheduler.js.map +2 -2
- package/dist/lib/scheduler/renderer-participant.js +1 -0
- package/dist/lib/scheduler/renderer-participant.js.map +2 -2
- package/dist/lib/series-inspection-frame.d.ts +18 -0
- package/dist/lib/series-inspection-frame.js +70 -0
- package/dist/lib/series-inspection-frame.js.map +7 -0
- package/dist/lib/signals/edge.d.ts +7 -4
- package/dist/lib/signals/edge.js +25 -3
- package/dist/lib/signals/edge.js.map +2 -2
- package/dist/lib/signals/graph.d.ts +16 -2
- package/dist/lib/signals/graph.js +54 -12
- package/dist/lib/signals/graph.js.map +2 -2
- package/dist/lib/signals/input-provision.d.ts +15 -0
- package/dist/lib/signals/input-provision.js +53 -3
- package/dist/lib/signals/input-provision.js.map +2 -2
- package/dist/lib/signals/render-consumer.d.ts +3 -0
- package/dist/lib/signals/render-consumer.js +22 -14
- package/dist/lib/signals/render-consumer.js.map +2 -2
- package/dist/lib/style/positioning.d.ts +50 -2
- package/dist/lib/style/positioning.js +28 -4
- package/dist/lib/style/positioning.js.map +2 -2
- package/dist/lib/style/resolve-built-in.d.ts +4 -3
- package/dist/lib/style/resolve-built-in.js +17 -3
- package/dist/lib/style/resolve-built-in.js.map +2 -2
- package/dist/lib/style/resolve-dispatch.d.ts +3 -0
- package/dist/lib/style/resolve-dispatch.js +77 -4
- package/dist/lib/style/resolve-dispatch.js.map +2 -2
- package/dist/lib/style/resolve-length.d.ts +2 -0
- package/dist/lib/style/resolve-length.js +13 -9
- package/dist/lib/style/resolve-length.js.map +2 -2
- package/dist/lib/style/sizing-length.d.ts +51 -0
- package/dist/lib/style/sizing-length.js +77 -0
- package/dist/lib/style/sizing-length.js.map +7 -0
- package/dist/lib/style/types.d.ts +63 -25
- package/dist/lib/surface/root-surface.js +10 -6
- package/dist/lib/surface/root-surface.js.map +2 -2
- package/dist/lib/textures/texture.js +10 -8
- package/dist/lib/textures/texture.js.map +2 -2
- package/dist/lib/transitions/capture.js +4 -1
- package/dist/lib/transitions/capture.js.map +2 -2
- package/dist/lib/transitions/embers-physics.js +17 -10
- package/dist/lib/transitions/embers-physics.js.map +2 -2
- package/dist/lib/types.d.ts +110 -1
- package/dist/sync.d.ts +16 -0
- package/dist/sync.js +13 -0
- package/dist/sync.js.map +7 -0
- package/dist/sync.mjs +1 -0
- package/package.json +43 -6
- package/dist/features/viz/lib/scale.d.ts +0 -11
- package/dist/features/viz/lib/scale.js +0 -80
- package/dist/features/viz/lib/scale.js.map +0 -7
- package/dist/features/viz/lib/use-scale.d.ts +0 -20
- package/dist/features/viz/lib/use-scale.js +0 -10
- package/dist/features/viz/lib/use-scale.js.map +0 -7
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/lib/events/registrations.ts"],
|
|
4
|
-
"sourcesContent": ["import type { PibblHitTestOutput } from './paint-entry.js';\nimport type { isBackendEventTargetLive, useBackendEventTarget } from '../../internal.js';\nimport { PIBBL_EVENT_DEFINITIONS } from \"./event-definitions.js\";\nimport type {\n PibblEventHandler,\n PibblEventHandlers,\n PibblEventTarget,\n PibblEventTargetOptions,\n PibblEventType,\n} from \"./types.js\";\nimport { GLOBAL_STATE } from \"../global-state.js\";\nimport { resolvePath } from '../geometry/resolve-path.js';\nimport type { PathGeometry } from '../geometry/path-geometry.js';\nimport type { LayoutBox } from \"../layout/types.js\";\nimport { getCurrentWorldTransform } from \"../render-target.js\";\nimport type {\n PibblComponentRefs,\n PibblInstance,\n} from \"../types.js\";\nimport { PibblPaintEntryKind, type PibblPathPaintEntry } from \"./paint-entry.js\";\nimport {\n clearPointerCapturesForTarget,\n hasLogicalPointerCapture,\n releaseLogicalPointerCapture,\n setLogicalPointerCapture,\n} from \"./pointer-capture.js\";\n\ntype PibblNormalizedCaptureKey = `${PibblEventType}Capture`;\n\nexport type PibblNormalizedHandlers = Partial<\n {\n [K in PibblEventType]: PibblEventHandler<K>;\n } & {\n [K in PibblEventType as `${K}Capture`]: PibblEventHandler<K>;\n }\n>;\n\n/**\n * Mount-owned event target registration and cleanup state.\n *\n * @see {@link PibblEventTarget}\n * @see {@link LayoutBox}\n * @see {@link PibblHitTestOutput}\n * @see {@link useBackendEventTarget}\n * @see {@link isBackendEventTargetLive}\n */\nexport interface PibblEventTargetRegistration {\n /** Selects the kind of geometry, material, or result. See {@link PibblEventTargetRegistration}. */\n readonly kind: \"target\";\n /** Mount or runtime resource owning this registration. See {@link PibblInstance}. */\n readonly owner: PibblInstance;\n /**\n * Component identity or diagnostic name associated with this value. See {@link PibblComponentRefs}\n * .\n */\n readonly component: PibblComponentRefs<any>;\n /** Mount-local hook or registration slot. See {@link PibblEventTargetRegistration}. */\n readonly slot: number;\n /** Logical target exposed to application event handlers. See {@link PibblEventTarget}. */\n readonly publicTarget: PibblEventTarget;\n /** Paint-ledger entry associated with this registration. See {@link PibblPathPaintEntry}. */\n paintEntry: PibblPathPaintEntry | undefined;\n /** Event handlers dispatched for this logical target. See {@link PibblNormalizedHandlers}. */\n handlers: PibblNormalizedHandlers;\n /** Logical event types currently present in `handlers`, split across two 32-bit words. */\n handlerTypesLow: number;\n /**\n * High event-mask bits identifying registered handler types. See\n * {@link PibblEventTargetRegistration}.\n */\n handlerTypesHigh: number;\n /** Native event dependency signature derived from the current handlers and cursor. */\n requiredNativeTypesLow: number;\n /**\n * High event-mask bits identifying required native listeners. See\n * {@link PibblEventTargetRegistration}.\n */\n requiredNativeTypesHigh: number;\n /** Last native signature reconciled with `nativeReleases`. */\n ownedNativeTypesLow: number;\n /**\n * High event-mask bits identifying native listeners owned by this registration. See\n * {@link PibblEventTargetRegistration}.\n */\n ownedNativeTypesHigh: number;\n /**\n * Cursor shown while this target owns pointer presentation. See\n * {@link PibblEventTargetRegistration}.\n */\n cursor: string | undefined;\n /** Whether the target may receive keyboard focus. See {@link PibblEventTargetRegistration}. */\n keyboardFocusable: boolean | undefined;\n /** Logical rectangle used for directional keyboard navigation. See {@link LayoutBox}. */\n keyboardNavigationBounds: Readonly<LayoutBox> | undefined;\n /** @internal Backend-projected points retained until root-space resolution. */\n keyboardNavigationPoints:\n | readonly Readonly<{\n /**\n * Horizontal coordinate or displacement in the containing coordinate system. See\n * {@link PibblEventTargetRegistration}.\n */\n x: number;\n /**\n * Vertical coordinate or displacement in the containing coordinate system. See\n * {@link PibblEventTargetRegistration}.\n */\n y: number;\n }>[]\n | undefined;\n /**\n * Whether this registration is currently attached to a live owner. See\n * {@link PibblEventTargetRegistration}.\n */\n live: boolean;\n}\n\nexport interface PibblEventListenerRegistration {\n readonly kind: \"listener\";\n readonly owner: PibblInstance;\n readonly component: PibblComponentRefs<any>;\n readonly slot: number;\n readonly publicTarget: PibblEventTarget;\n handlers: PibblNormalizedHandlers;\n /** Logical event types currently present in `handlers`, split across two 32-bit words. */\n handlerTypesLow: number;\n handlerTypesHigh: number;\n /** Native event dependency signature derived from the current handlers. */\n requiredNativeTypesLow: number;\n requiredNativeTypesHigh: number;\n /** Last native signature reconciled with `nativeReleases`. */\n ownedNativeTypesLow: number;\n ownedNativeTypesHigh: number;\n live: boolean;\n}\n\nexport type PibblEventNode =\n PibblEventTargetRegistration | PibblEventListenerRegistration;\n\n// Masks make membership/diff checks cheap; this map retains the exact release\n// closure returned by the shared hub for each bit that was actually acquired.\nconst nativeReleases = new WeakMap<\n PibblEventTargetRegistration | PibblEventListenerRegistration,\n Map<PibblEventType, () => void>\n>();\n\nexport function createTarget(\n owner: PibblInstance,\n component: PibblComponentRefs<any>,\n slot: number,\n): PibblEventTargetRegistration {\n const target = {} as PibblEventTargetRegistration;\n const publicTarget = createPublicTarget(() => target);\n Object.assign(target, {\n kind: \"target\" as const,\n owner,\n component,\n slot,\n publicTarget,\n paintEntry: undefined,\n handlers: {},\n handlerTypesLow: 0,\n handlerTypesHigh: 0,\n requiredNativeTypesLow: 0,\n requiredNativeTypesHigh: 0,\n ownedNativeTypesLow: 0,\n ownedNativeTypesHigh: 0,\n cursor: undefined,\n keyboardFocusable: undefined,\n keyboardNavigationBounds: undefined,\n keyboardNavigationPoints: undefined,\n live: false,\n });\n return target;\n}\n\nexport function updateTarget(\n target: PibblEventTargetRegistration,\n handlers: PibblEventHandlers,\n options: PibblEventTargetOptions,\n participatesInPaint = false,\n preserveKeyboardNavigationGeometry = false,\n): void {\n updateTargetRegistration(\n target,\n handlers,\n { ...options, path: resolvePath(options.path) },\n participatesInPaint,\n preserveKeyboardNavigationGeometry,\n );\n if (target.live) target.owner.regions.add(target);\n}\n\nexport function updateCursorTarget(\n target: PibblEventTargetRegistration,\n {\n path,\n fill = false,\n lineInteractionWidth = 0,\n cursor,\n }: {\n path: Path2D | PathGeometry;\n fill?: boolean;\n lineInteractionWidth?: number;\n cursor?: string;\n },\n): void {\n updateTargetRegistration(\n target,\n {},\n {\n path: resolvePath(path),\n fill,\n lineInteractionWidth,\n cursor,\n },\n );\n if (target.live) target.owner.regions.add(target);\n}\n\nfunction updateTargetRegistration(\n target: PibblEventTargetRegistration,\n handlers: PibblEventHandlers,\n options: Omit<PibblEventTargetOptions, 'path'> & { readonly path: Path2D },\n participatesInPaint = false,\n preserveKeyboardNavigationGeometry = false,\n): void {\n if (target.live) {\n // Remove while the previous handler map is still current so ownership\n // diagnostics and mutation observers attribute the release correctly.\n if (target.paintEntry) target.owner.paintEntries.delete(target.paintEntry);\n target.owner.eventRoot.targets.delete(target);\n }\n\n refreshHandlers(target, handlers, Boolean(options.cursor));\n const paintEntry =\n target.paintEntry ??\n ({\n paintKind: PibblPaintEntryKind.Path,\n } as PibblPathPaintEntry);\n paintEntry.target = target;\n paintEntry.path = options.path;\n paintEntry.fill = options.fill ?? false;\n paintEntry.lineInteractionWidth = options.lineInteractionWidth ?? 0;\n if (GLOBAL_STATE.renderContext) {\n paintEntry.transform = getCurrentWorldTransform();\n paintEntry.clippingStack = Array.from(GLOBAL_STATE.clippingStack);\n } else {\n paintEntry.transform ??= new DOMMatrix();\n paintEntry.clippingStack ??= [];\n }\n target.cursor = options.cursor;\n target.keyboardFocusable = options.keyboardFocusable;\n if (!preserveKeyboardNavigationGeometry) {\n target.keyboardNavigationBounds = options.keyboardNavigationBounds;\n target.keyboardNavigationPoints = undefined;\n }\n\n if (\n !participatesInPaint &&\n target.handlerTypesLow === 0 &&\n target.handlerTypesHigh === 0 &&\n !target.cursor &&\n target.keyboardFocusable !== true\n ) {\n if (target.live) {\n target.owner.eventRoot.focusPolicy?.removeTarget(target);\n target.owner.eventRoot.onNodeRelease?.(target);\n }\n target.owner.regions.delete(target);\n target.paintEntry = undefined;\n target.live = false;\n clearPointerCapturesForTarget(target);\n releaseNativeOwnership(target);\n return;\n }\n\n target.live = true;\n target.paintEntry = paintEntry;\n target.owner.paintEntries.add(paintEntry);\n target.owner.eventRoot.targets.add(target);\n updateNativeOwnership(target);\n target.owner.eventRoot.focusPolicy?.observeTarget(target);\n target.owner.eventRoot.onTargetUpdate?.(target);\n}\n\nexport function releaseTarget(target: PibblEventTargetRegistration): void {\n if (target.live) {\n if (target.paintEntry) target.owner.paintEntries.delete(target.paintEntry);\n target.owner.eventRoot.targets.delete(target);\n target.owner.eventRoot.focusPolicy?.removeTarget(target);\n target.owner.eventRoot.onNodeRelease?.(target);\n }\n target.owner.regions.delete(target);\n target.paintEntry = undefined;\n target.live = false;\n clearPointerCapturesForTarget(target);\n releaseNativeOwnership(target);\n}\n\nexport function createListener(\n owner: PibblInstance,\n component: PibblComponentRefs<any>,\n slot: number,\n): PibblEventListenerRegistration {\n const listener = {} as PibblEventListenerRegistration;\n const publicTarget = createPublicTarget(() => listener);\n Object.assign(listener, {\n kind: \"listener\",\n owner,\n component,\n slot,\n publicTarget,\n handlers: {},\n handlerTypesLow: 0,\n handlerTypesHigh: 0,\n requiredNativeTypesLow: 0,\n requiredNativeTypesHigh: 0,\n ownedNativeTypesLow: 0,\n ownedNativeTypesHigh: 0,\n live: false,\n });\n return listener;\n}\n\nexport function updateListener(\n listener: PibblEventListenerRegistration,\n handlers: PibblEventHandlers,\n): void {\n let registrations = listener.owner.eventRoot.listenersByComponent.get(\n listener.component.id,\n );\n if (listener.live) {\n // Keep the registration stable while refreshing its current source-order\n // position and preserving the previous handler map for release observers.\n registrations?.delete(listener);\n }\n refreshHandlers(listener, handlers, false);\n\n if (listener.handlerTypesLow === 0 && listener.handlerTypesHigh === 0) {\n if (registrations?.size === 0) {\n listener.owner.eventRoot.listenersByComponent.delete(\n listener.component.id,\n );\n }\n if (listener.live) listener.owner.eventRoot.onNodeRelease?.(listener);\n listener.live = false;\n clearPointerCapturesForTarget(listener);\n releaseNativeOwnership(listener);\n return;\n }\n\n if (!registrations) {\n registrations = new Set();\n listener.owner.eventRoot.listenersByComponent.set(\n listener.component.id,\n registrations,\n );\n }\n registrations.add(listener);\n listener.live = true;\n updateNativeOwnership(listener);\n}\n\nexport function releaseListener(listener: PibblEventListenerRegistration): void {\n if (listener.live) {\n const registrations = listener.owner.eventRoot.listenersByComponent.get(\n listener.component.id,\n );\n registrations?.delete(listener);\n if (registrations?.size === 0) {\n listener.owner.eventRoot.listenersByComponent.delete(\n listener.component.id,\n );\n }\n listener.owner.eventRoot.onNodeRelease?.(listener);\n }\n listener.live = false;\n clearPointerCapturesForTarget(listener);\n releaseNativeOwnership(listener);\n}\n\nexport function normalizeHandlers(\n handlers: PibblEventHandlers,\n): PibblNormalizedHandlers {\n const state = createHandlerState();\n refreshHandlers(state, handlers, false);\n return state.handlers;\n}\n\ninterface PibblHandlerState {\n handlers: PibblNormalizedHandlers;\n handlerTypesLow: number;\n handlerTypesHigh: number;\n requiredNativeTypesLow: number;\n requiredNativeTypesHigh: number;\n}\n\ninterface PibblEventPropMetadata {\n readonly normalizedKey: PibblEventType | PibblNormalizedCaptureKey;\n readonly handlerTypesLow: number;\n readonly handlerTypesHigh: number;\n readonly requiredNativeTypesLow: number;\n readonly requiredNativeTypesHigh: number;\n}\n\n/**\n * Hot-path property lookup built once from the closed event vocabulary.\n *\n * Each definition owns one bit position. JavaScript bitwise operators use\n * signed 32-bit integers, but sign is irrelevant here: the words are opaque\n * bit sets compared and combined only with bitwise operations.\n */\nconst eventPropMetadata = Object.create(null) as Record<\n string,\n PibblEventPropMetadata | undefined\n>;\nconst eventIndexByType = Object.create(null) as Record<\n string,\n number | undefined\n>;\n\nif (PIBBL_EVENT_DEFINITIONS.length > 64) {\n throw new Error(\"Pibbl event masks support at most 64 logical event types.\");\n}\n\nfor (let index = 0; index < PIBBL_EVENT_DEFINITIONS.length; index++) {\n eventIndexByType[PIBBL_EVENT_DEFINITIONS[index]!.type] = index;\n}\n\nfor (let index = 0; index < PIBBL_EVENT_DEFINITIONS.length; index++) {\n const definition = PIBBL_EVENT_DEFINITIONS[index]!;\n const handlerTypesLow = index < 32 ? 1 << index : 0;\n const handlerTypesHigh = index < 32 ? 0 : 1 << (index - 32);\n // Expand logical-to-native prerequisites once. The render path only ORs\n // these precomputed words and never allocates dependency Sets.\n const nativeTypes = expandNativeTypesForMetadata(\n new Set([definition.type]),\n false,\n );\n let requiredNativeTypesLow = 0;\n let requiredNativeTypesHigh = 0;\n for (const type of nativeTypes) {\n const nativeIndex = eventIndexByType[type]!;\n if (nativeIndex < 32) {\n requiredNativeTypesLow |= 1 << nativeIndex;\n } else {\n requiredNativeTypesHigh |= 1 << (nativeIndex - 32);\n }\n }\n const bubble: PibblEventPropMetadata = Object.freeze({\n normalizedKey: definition.type,\n handlerTypesLow,\n handlerTypesHigh,\n requiredNativeTypesLow,\n requiredNativeTypesHigh,\n });\n const capture: PibblEventPropMetadata = Object.freeze({\n ...bubble,\n normalizedKey: `${definition.type}Capture` as PibblNormalizedCaptureKey,\n });\n eventPropMetadata[definition.prop] = bubble;\n eventPropMetadata[definition.captureProp] = capture;\n}\n\n// Cursor tracking has native movement/exit requirements even without a\n// logical callback, so it receives the same precomputed representation.\nconst cursorNativeTypes = expandNativeTypesForMetadata(new Set(), true);\nlet cursorNativeTypesLow = 0;\nlet cursorNativeTypesHigh = 0;\nfor (const type of cursorNativeTypes) {\n const index = eventIndexByType[type]!;\n if (index < 32) {\n cursorNativeTypesLow |= 1 << index;\n } else {\n cursorNativeTypesHigh |= 1 << (index - 32);\n }\n}\n\nfunction createHandlerState(): PibblHandlerState {\n return {\n handlers: {},\n handlerTypesLow: 0,\n handlerTypesHigh: 0,\n requiredNativeTypesLow: 0,\n requiredNativeTypesHigh: 0,\n };\n}\n\nfunction refreshHandlers(\n state: PibblHandlerState,\n handlers: PibblEventHandlers,\n hasCursor: boolean,\n): void {\n const normalized: PibblNormalizedHandlers = {};\n let handlerTypesLow = 0;\n let handlerTypesHigh = 0;\n let requiredNativeTypesLow = hasCursor ? cursorNativeTypesLow : 0;\n let requiredNativeTypesHigh = hasCursor ? cursorNativeTypesHigh : 0;\n // Iterate supplied props rather than probing every supported bubble and\n // capture name. Keep the normalized object fresh so dispatch always sees\n // the newest closures even when the type signature is unchanged.\n for (const prop in handlers) {\n const metadata = eventPropMetadata[prop];\n if (!metadata) continue;\n const handler = handlers[prop as keyof PibblEventHandlers];\n if (handler) {\n (normalized as Record<string, unknown>)[metadata.normalizedKey] = handler;\n handlerTypesLow |= metadata.handlerTypesLow;\n handlerTypesHigh |= metadata.handlerTypesHigh;\n requiredNativeTypesLow |= metadata.requiredNativeTypesLow;\n requiredNativeTypesHigh |= metadata.requiredNativeTypesHigh;\n }\n }\n state.handlers = normalized;\n state.handlerTypesLow = handlerTypesLow;\n state.handlerTypesHigh = handlerTypesHigh;\n state.requiredNativeTypesLow = requiredNativeTypesLow;\n state.requiredNativeTypesHigh = requiredNativeTypesHigh;\n}\n\n/**\n * Cold module-initialization helper. Do not call this from registration or\n * render code: its Sets deliberately trade startup simplicity for precomputed\n * allocation-free metadata in the hot path.\n */\nfunction expandNativeTypesForMetadata(\n types: ReadonlySet<PibblEventType>,\n hasCursor: boolean,\n): ReadonlySet<PibblEventType> {\n const nativeTypes = new Set(types);\n const hasPointerBoundary =\n types.has(\"pointerover\") ||\n types.has(\"pointerenter\") ||\n types.has(\"pointerout\") ||\n types.has(\"pointerleave\");\n if (hasPointerBoundary || types.has(\"pointermove\")) {\n nativeTypes.delete(\"pointerenter\");\n nativeTypes.delete(\"pointerleave\");\n nativeTypes.add(\"pointermove\");\n nativeTypes.add(\"pointerout\");\n if (hasPointerBoundary) nativeTypes.add(\"pointerover\");\n }\n if (\n hasCursor ||\n types.has(\"mouseover\") ||\n types.has(\"mouseenter\") ||\n types.has(\"mousemove\") ||\n types.has(\"mouseout\") ||\n types.has(\"mouseleave\")\n ) {\n nativeTypes.delete(\"mouseover\");\n nativeTypes.delete(\"mouseenter\");\n nativeTypes.delete(\"mouseleave\");\n nativeTypes.add(\"mousemove\");\n nativeTypes.add(\"mouseout\");\n }\n if (types.has(\"click\") || types.has(\"dblclick\") || types.has(\"auxclick\")) {\n nativeTypes.add(\"mousedown\");\n nativeTypes.add(\"mouseup\");\n }\n if (types.has(\"dblclick\")) nativeTypes.add(\"click\");\n if (\n types.has(\"touchstart\") ||\n types.has(\"touchmove\") ||\n types.has(\"touchend\") ||\n types.has(\"touchcancel\")\n ) {\n nativeTypes.add(\"touchstart\");\n nativeTypes.add(\"touchend\");\n nativeTypes.add(\"touchcancel\");\n }\n const hasDragBoundary = types.has(\"dragenter\") || types.has(\"dragleave\");\n if (hasDragBoundary) nativeTypes.add(\"dragenter\");\n if (hasDragBoundary || types.has(\"dragover\")) {\n nativeTypes.add(\"dragover\");\n nativeTypes.add(\"dragleave\");\n nativeTypes.add(\"drop\");\n nativeTypes.add(\"dragend\");\n }\n return nativeTypes;\n}\n\nfunction updateNativeOwnership(\n registration: PibblEventTargetRegistration | PibblEventListenerRegistration,\n): void {\n const previousLow = registration.ownedNativeTypesLow;\n const previousHigh = registration.ownedNativeTypesHigh;\n const nextLow = registration.requiredNativeTypesLow;\n const nextHigh = registration.requiredNativeTypesHigh;\n // Callback values may change every render while their native requirements\n // remain identical. Two integer comparisons make that common case a no-op.\n if (previousLow === nextLow && previousHigh === nextHigh) return;\n\n let releases = nativeReleases.get(registration);\n if (!releases) {\n releases = new Map();\n nativeReleases.set(registration, releases);\n }\n\n // A & ~B is the set difference A \u2212 B. Release all removals before\n // acquiring additions so hub reference counts always describe this target's\n // current requirement transition.\n forEachChangedType(\n previousLow & ~nextLow,\n previousHigh & ~nextHigh,\n (type) => {\n releases.get(type)?.();\n releases.delete(type);\n },\n );\n\n const hub = registration.owner.eventRoot.nativeListeners;\n if (hub) {\n // B & ~A is B \u2212 A: only newly required native types are acquired.\n forEachChangedType(\n nextLow & ~previousLow,\n nextHigh & ~previousHigh,\n (type) => {\n if (!releases.has(type)) releases.set(type, hub.acquire(type));\n },\n );\n }\n registration.ownedNativeTypesLow = nextLow;\n registration.ownedNativeTypesHigh = nextHigh;\n}\n\nfunction releaseNativeOwnership(\n registration: PibblEventTargetRegistration | PibblEventListenerRegistration,\n): void {\n // Zero first so a stable hook slot revived after release cannot mistake its\n // old signature for live ownership and skip reacquisition.\n registration.ownedNativeTypesLow = 0;\n registration.ownedNativeTypesHigh = 0;\n const releases = nativeReleases.get(registration);\n if (!releases) return;\n nativeReleases.delete(registration);\n for (const release of releases.values()) {\n release();\n }\n releases.clear();\n}\n\nfunction forEachChangedType(\n low: number,\n high: number,\n visit: (type: PibblEventType) => void,\n): void {\n // `word & -word` isolates the least-significant set bit. `word & (word - 1)`\n // clears it, so this loop is O(number of changed types), not O(52 events).\n // Math.clz32 converts the isolated bit to its definition index; the high\n // word starts at definition 32.\n while (low !== 0) {\n const bit = low & -low;\n visit(PIBBL_EVENT_DEFINITIONS[31 - Math.clz32(bit)]!.type);\n low &= low - 1;\n }\n while (high !== 0) {\n const bit = high & -high;\n visit(PIBBL_EVENT_DEFINITIONS[32 + 31 - Math.clz32(bit)]!.type);\n high &= high - 1;\n }\n}\n\nfunction createPublicTarget(\n getRegistration: () => PibblEventNode,\n): PibblEventTarget {\n return {\n setPointerCapture(pointerId) {\n setLogicalPointerCapture(getRegistration(), pointerId);\n },\n hasPointerCapture(pointerId) {\n return hasLogicalPointerCapture(getRegistration(), pointerId);\n },\n releasePointerCapture(pointerId) {\n releaseLogicalPointerCapture(getRegistration(), pointerId);\n },\n };\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { releaseLayoutTargetGeometry } from '../layout/geometry-publication.js';\nimport { registerLayoutSuspensionResource, unregisterLayoutSuspensionResource, isLayoutComponentSuspended, isLayoutInstanceSuspended } from '../layout/participation.js';\nimport type { PibblHitTestOutput } from './paint-entry.js';\nimport type { isBackendEventTargetLive, useBackendEventTarget } from '../../internal.js';\nimport { PIBBL_EVENT_DEFINITIONS } from \"./event-definitions.js\";\nimport type {\n PibblEventHandler,\n PibblEventHandlers,\n PibblEventTarget,\n PibblEventTargetOptions,\n PibblEventType,\n} from \"./types.js\";\nimport { GLOBAL_STATE } from \"../global-state.js\";\nimport { resolvePath } from '../geometry/resolve-path.js';\nimport type { PathGeometry } from '../geometry/path-geometry.js';\nimport type { LayoutBox } from \"../layout/types.js\";\nimport { getCurrentWorldTransform } from \"../render-target.js\";\nimport type {\n PibblComponentRefs,\n PibblInstance,\n} from \"../types.js\";\nimport { PibblPaintEntryKind, type PibblPathPaintEntry } from \"./paint-entry.js\";\nimport {\n clearPointerCapturesForTarget,\n hasLogicalPointerCapture,\n releaseLogicalPointerCapture,\n setLogicalPointerCapture,\n} from \"./pointer-capture.js\";\n\ntype PibblNormalizedCaptureKey = `${PibblEventType}Capture`;\n\nexport type PibblNormalizedHandlers = Partial<\n {\n [K in PibblEventType]: PibblEventHandler<K>;\n } & {\n [K in PibblEventType as `${K}Capture`]: PibblEventHandler<K>;\n }\n>;\n\n/**\n * Mount-owned event target registration and cleanup state.\n *\n * @see {@link PibblEventTarget}\n * @see {@link LayoutBox}\n * @see {@link PibblHitTestOutput}\n * @see {@link useBackendEventTarget}\n * @see {@link isBackendEventTargetLive}\n */\nexport interface PibblEventTargetRegistration {\n /** @internal Withdraws published interaction while preserving mount-owned resources. */\n suspendLayout(): void;\n /** Selects the kind of geometry, material, or result. See {@link PibblEventTargetRegistration}. */\n readonly kind: \"target\";\n /** Mount or runtime resource owning this registration. See {@link PibblInstance}. */\n readonly owner: PibblInstance;\n /**\n * Component identity or diagnostic name associated with this value. See {@link PibblComponentRefs}\n * .\n */\n readonly component: PibblComponentRefs<any>;\n /** Mount-local hook or registration slot. See {@link PibblEventTargetRegistration}. */\n readonly slot: number;\n /** Logical target exposed to application event handlers. See {@link PibblEventTarget}. */\n readonly publicTarget: PibblEventTarget;\n /** Paint-ledger entry associated with this registration. See {@link PibblPathPaintEntry}. */\n paintEntry: PibblPathPaintEntry | undefined;\n /** Event handlers dispatched for this logical target. See {@link PibblNormalizedHandlers}. */\n handlers: PibblNormalizedHandlers;\n /** Logical event types currently present in `handlers`, split across two 32-bit words. */\n handlerTypesLow: number;\n /**\n * High event-mask bits identifying registered handler types. See\n * {@link PibblEventTargetRegistration}.\n */\n handlerTypesHigh: number;\n /** Native event dependency signature derived from the current handlers and cursor. */\n requiredNativeTypesLow: number;\n /**\n * High event-mask bits identifying required native listeners. See\n * {@link PibblEventTargetRegistration}.\n */\n requiredNativeTypesHigh: number;\n /** Last native signature reconciled with `nativeReleases`. */\n ownedNativeTypesLow: number;\n /**\n * High event-mask bits identifying native listeners owned by this registration. See\n * {@link PibblEventTargetRegistration}.\n */\n ownedNativeTypesHigh: number;\n /**\n * Cursor shown while this target owns pointer presentation. See\n * {@link PibblEventTargetRegistration}.\n */\n cursor: string | undefined;\n /** Whether the target may receive keyboard focus. See {@link PibblEventTargetRegistration}. */\n keyboardFocusable: boolean | undefined;\n /** Logical rectangle used for directional keyboard navigation. See {@link LayoutBox}. */\n keyboardNavigationBounds: Readonly<LayoutBox> | undefined;\n /** @internal Backend-projected points retained until root-space resolution. */\n keyboardNavigationPoints:\n | readonly Readonly<{\n /**\n * Horizontal coordinate or displacement in the containing coordinate system. See\n * {@link PibblEventTargetRegistration}.\n */\n x: number;\n /**\n * Vertical coordinate or displacement in the containing coordinate system. See\n * {@link PibblEventTargetRegistration}.\n */\n y: number;\n }>[]\n | undefined;\n /**\n * Whether this registration is currently attached to a live owner. See\n * {@link PibblEventTargetRegistration}.\n */\n live: boolean;\n}\n\nexport interface PibblEventListenerRegistration {\n /** @internal Withdraws listeners while preserving mount-owned resources. */\n suspendLayout(): void;\n readonly kind: \"listener\";\n readonly owner: PibblInstance;\n readonly component: PibblComponentRefs<any>;\n readonly slot: number;\n readonly publicTarget: PibblEventTarget;\n handlers: PibblNormalizedHandlers;\n /** Logical event types currently present in `handlers`, split across two 32-bit words. */\n handlerTypesLow: number;\n handlerTypesHigh: number;\n /** Native event dependency signature derived from the current handlers. */\n requiredNativeTypesLow: number;\n requiredNativeTypesHigh: number;\n /** Last native signature reconciled with `nativeReleases`. */\n ownedNativeTypesLow: number;\n ownedNativeTypesHigh: number;\n live: boolean;\n}\n\nexport type PibblEventNode =\n PibblEventTargetRegistration | PibblEventListenerRegistration;\n\n// Masks make membership/diff checks cheap; this map retains the exact release\n// closure returned by the shared hub for each bit that was actually acquired.\nconst nativeReleases = new WeakMap<\n PibblEventTargetRegistration | PibblEventListenerRegistration,\n Map<PibblEventType, () => void>\n>();\n\nexport function createTarget(\n owner: PibblInstance,\n component: PibblComponentRefs<any>,\n slot: number,\n): PibblEventTargetRegistration {\n const target = {} as PibblEventTargetRegistration;\n const publicTarget = createPublicTarget(() => target);\n Object.assign(target, {\n kind: \"target\" as const,\n suspendLayout: suspendTargetLayout,\n owner,\n component,\n slot,\n publicTarget,\n paintEntry: undefined,\n handlers: {},\n handlerTypesLow: 0,\n handlerTypesHigh: 0,\n requiredNativeTypesLow: 0,\n requiredNativeTypesHigh: 0,\n ownedNativeTypesLow: 0,\n ownedNativeTypesHigh: 0,\n cursor: undefined,\n keyboardFocusable: undefined,\n keyboardNavigationBounds: undefined,\n keyboardNavigationPoints: undefined,\n live: false,\n });\n registerLayoutSuspensionResource(component, target);\n return target;\n}\n\n/** Prepared external registrations acquire fallible native leases before adoption. */\nexport function prepareTargetUpdate(\n target: PibblEventTargetRegistration,\n handlers: PibblEventHandlers,\n options: PibblEventTargetOptions,\n transform: DOMMatrix,\n clippingStack: PibblPathPaintEntry['clippingStack'],\n): { adopt(): void; finish(): void; notify(): void } {\n const state = { ...target };\n refreshHandlers(state, handlers, Boolean(options.cursor));\n const paintEntry: PibblPathPaintEntry = {\n paintKind: PibblPaintEntryKind.Path, target, path: resolvePath(options.path),\n fill: options.fill ?? false, lineInteractionWidth: options.lineInteractionWidth ?? 0,\n transform, clippingStack,\n };\n const leases = new Map<PibblEventType, () => void>();\n const existing = nativeReleases.get(target);\n const additions: (() => void)[] = [];\n const hub = target.owner.eventRoot.nativeListeners;\n try {\n if (hub) forEachChangedType(state.requiredNativeTypesLow, state.requiredNativeTypesHigh,\n type => {\n let lease = existing?.get(type);\n if (!lease) { lease = hub.acquire(type); additions.push(lease); }\n leases.set(type, lease);\n });\n } catch (error) {\n const errors: unknown[] = [error];\n for (const release of additions) { try { release(); } catch (releaseError) { errors.push(releaseError); } }\n if (errors.length > 1) throw new AggregateError(errors, 'Prepared target acquisition failed.', { cause: error });\n throw error;\n }\n let previous: Map<PibblEventType, () => void> | undefined;\n let adopted = false;\n return {\n adopt() {\n previous = nativeReleases.get(target);\n nativeReleases.set(target, leases);\n if (target.paintEntry) target.owner.paintEntries.delete(target.paintEntry);\n target.handlers = state.handlers;\n target.handlerTypesLow = state.handlerTypesLow; target.handlerTypesHigh = state.handlerTypesHigh;\n target.requiredNativeTypesLow = target.ownedNativeTypesLow = state.requiredNativeTypesLow;\n target.requiredNativeTypesHigh = target.ownedNativeTypesHigh = state.requiredNativeTypesHigh;\n target.cursor = options.cursor; target.keyboardFocusable = options.keyboardFocusable;\n target.keyboardNavigationBounds = options.keyboardNavigationBounds;\n target.keyboardNavigationPoints = undefined;\n target.paintEntry = paintEntry; target.live = true;\n target.owner.regions.add(target); target.owner.eventRoot.targets.add(target);\n adopted = true;\n },\n finish() {\n const errors: unknown[] = [];\n const complete = (callback: () => void) => { try { callback(); } catch (error) { errors.push(error); } };\n if (adopted) {\n for (const [type, release] of previous ?? []) if (!leases.has(type)) complete(release);\n previous = undefined;\n\n } else {\n for (const release of additions) complete(release);\n additions.length = 0;\n }\n if (errors.length === 1) throw errors[0];\n if (errors.length) throw new AggregateError(errors, 'Prepared target completion failed.');\n },\n notify() {\n if (!adopted || !target.live) return;\n const errors: unknown[] = [];\n try { target.owner.eventRoot.focusPolicy?.observeTarget(target); } catch (error) { errors.push(error); }\n try { target.owner.eventRoot.onTargetUpdate?.(target); } catch (error) { errors.push(error); }\n if (errors.length === 1) throw errors[0];\n if (errors.length) throw new AggregateError(errors, 'Prepared target notification failed.');\n },\n };\n}\n\nexport function updateTarget(\n target: PibblEventTargetRegistration,\n handlers: PibblEventHandlers,\n options: PibblEventTargetOptions,\n participatesInPaint = false,\n preserveKeyboardNavigationGeometry = false,\n): void {\n updateTargetRegistration(\n target,\n handlers,\n { ...options, path: resolvePath(options.path) },\n participatesInPaint,\n preserveKeyboardNavigationGeometry,\n );\n if (target.live) target.owner.regions.add(target);\n}\n\nexport function updateCursorTarget(\n target: PibblEventTargetRegistration,\n {\n path,\n fill = false,\n lineInteractionWidth = 0,\n cursor,\n }: {\n path: Path2D | PathGeometry;\n fill?: boolean;\n lineInteractionWidth?: number;\n cursor?: string;\n },\n): void {\n updateTargetRegistration(\n target,\n {},\n {\n path: resolvePath(path),\n fill,\n lineInteractionWidth,\n cursor,\n },\n );\n if (target.live) target.owner.regions.add(target);\n}\n\nfunction updateTargetRegistration(\n target: PibblEventTargetRegistration,\n handlers: PibblEventHandlers,\n options: Omit<PibblEventTargetOptions, 'path'> & { readonly path: Path2D },\n participatesInPaint = false,\n preserveKeyboardNavigationGeometry = false,\n): void {\n if (target.live) {\n // Remove while the previous handler map is still current so ownership\n // diagnostics and mutation observers attribute the release correctly.\n if (target.paintEntry) target.owner.paintEntries.delete(target.paintEntry);\n target.owner.eventRoot.targets.delete(target);\n }\n\n refreshHandlers(target, handlers, Boolean(options.cursor));\n const paintEntry =\n target.paintEntry ??\n ({\n paintKind: PibblPaintEntryKind.Path,\n } as PibblPathPaintEntry);\n paintEntry.target = target;\n paintEntry.path = options.path;\n paintEntry.fill = options.fill ?? false;\n paintEntry.lineInteractionWidth = options.lineInteractionWidth ?? 0;\n if (GLOBAL_STATE.renderContext) {\n paintEntry.transform = getCurrentWorldTransform();\n paintEntry.clippingStack = Array.from(GLOBAL_STATE.clippingStack);\n } else {\n paintEntry.transform ??= new DOMMatrix();\n paintEntry.clippingStack ??= [];\n }\n target.cursor = options.cursor;\n target.keyboardFocusable = options.keyboardFocusable;\n if (!preserveKeyboardNavigationGeometry) {\n target.keyboardNavigationBounds = options.keyboardNavigationBounds;\n target.keyboardNavigationPoints = undefined;\n }\n\n if (\n !participatesInPaint &&\n target.handlerTypesLow === 0 &&\n target.handlerTypesHigh === 0 &&\n !target.cursor &&\n target.keyboardFocusable !== true\n ) {\n if (target.live) {\n target.owner.eventRoot.focusPolicy?.removeTarget(target);\n target.owner.eventRoot.onNodeRelease?.(target);\n }\n target.owner.regions.delete(target);\n target.paintEntry = undefined;\n target.live = false;\n clearPointerCapturesForTarget(target);\n releaseNativeOwnership(target);\n return;\n }\n\n target.live = true;\n target.paintEntry = paintEntry;\n target.owner.paintEntries.add(paintEntry);\n target.owner.eventRoot.targets.add(target);\n updateNativeOwnership(target);\n if (isLayoutComponentSuspended(target.component) || isLayoutInstanceSuspended(target.owner)) { target.suspendLayout(); return; }\n target.owner.eventRoot.focusPolicy?.observeTarget(target);\n target.owner.eventRoot.onTargetUpdate?.(target);\n}\n\nfunction suspendTargetLayout(this: PibblEventTargetRegistration): void {\n if (!this.live) return;\n if (this.paintEntry) this.owner.paintEntries.delete(this.paintEntry);\n this.owner.regions.delete(this);\n this.owner.eventRoot.targets.delete(this);\n this.owner.eventRoot.focusPolicy?.removeTarget(this);\n this.owner.eventRoot.onNodeRelease?.(this);\n this.paintEntry = undefined;\n this.live = false;\n clearPointerCapturesForTarget(this);\n}\n\nfunction suspendListenerLayout(this: PibblEventListenerRegistration): void {\n if (!this.live) return;\n const entries = this.owner.eventRoot.listenersByComponent.get(this.component.id);\n entries?.delete(this);\n if (entries?.size === 0) this.owner.eventRoot.listenersByComponent.delete(this.component.id);\n this.owner.eventRoot.onNodeRelease?.(this);\n this.live = false;\n clearPointerCapturesForTarget(this);\n}\n\nexport function releaseTarget(target: PibblEventTargetRegistration): void {\n releaseLayoutTargetGeometry(target);\n const errors: unknown[] = [];\n const release = (callback: () => void) => { try { callback(); } catch (error) { errors.push(error); } };\n release(() => unregisterLayoutSuspensionResource(target.component, target));\n if (target.live) {\n if (target.paintEntry) target.owner.paintEntries.delete(target.paintEntry);\n target.owner.eventRoot.targets.delete(target);\n release(() => target.owner.eventRoot.focusPolicy?.removeTarget(target));\n release(() => target.owner.eventRoot.onNodeRelease?.(target));\n }\n target.owner.regions.delete(target);\n target.paintEntry = undefined;\n target.live = false;\n release(() => clearPointerCapturesForTarget(target));\n release(() => releaseNativeOwnership(target));\n if (errors.length === 1) throw errors[0];\n if (errors.length) throw new AggregateError(errors, 'Target release failed.');\n}\n\nexport function createListener(\n owner: PibblInstance,\n component: PibblComponentRefs<any>,\n slot: number,\n): PibblEventListenerRegistration {\n const listener = {} as PibblEventListenerRegistration;\n const publicTarget = createPublicTarget(() => listener);\n Object.assign(listener, {\n kind: \"listener\",\n suspendLayout: suspendListenerLayout,\n owner,\n component,\n slot,\n publicTarget,\n handlers: {},\n handlerTypesLow: 0,\n handlerTypesHigh: 0,\n requiredNativeTypesLow: 0,\n requiredNativeTypesHigh: 0,\n ownedNativeTypesLow: 0,\n ownedNativeTypesHigh: 0,\n live: false,\n });\n registerLayoutSuspensionResource(component, listener);\n return listener;\n}\n\nexport function updateListener(\n listener: PibblEventListenerRegistration,\n handlers: PibblEventHandlers,\n): void {\n let registrations = listener.owner.eventRoot.listenersByComponent.get(\n listener.component.id,\n );\n if (listener.live) {\n // Keep the registration stable while refreshing its current source-order\n // position and preserving the previous handler map for release observers.\n registrations?.delete(listener);\n }\n refreshHandlers(listener, handlers, false);\n\n if (listener.handlerTypesLow === 0 && listener.handlerTypesHigh === 0) {\n if (registrations?.size === 0) {\n listener.owner.eventRoot.listenersByComponent.delete(\n listener.component.id,\n );\n }\n if (listener.live) listener.owner.eventRoot.onNodeRelease?.(listener);\n listener.live = false;\n clearPointerCapturesForTarget(listener);\n releaseNativeOwnership(listener);\n return;\n }\n\n if (!registrations) {\n registrations = new Set();\n listener.owner.eventRoot.listenersByComponent.set(\n listener.component.id,\n registrations,\n );\n }\n registrations.add(listener);\n listener.live = true;\n if (isLayoutComponentSuspended(listener.component) || isLayoutInstanceSuspended(listener.owner)) { listener.suspendLayout(); return; }\n updateNativeOwnership(listener);\n}\n\nexport function releaseListener(listener: PibblEventListenerRegistration): void {\n unregisterLayoutSuspensionResource(listener.component, listener);\n if (listener.live) {\n const registrations = listener.owner.eventRoot.listenersByComponent.get(\n listener.component.id,\n );\n registrations?.delete(listener);\n if (registrations?.size === 0) {\n listener.owner.eventRoot.listenersByComponent.delete(\n listener.component.id,\n );\n }\n listener.owner.eventRoot.onNodeRelease?.(listener);\n }\n listener.live = false;\n clearPointerCapturesForTarget(listener);\n releaseNativeOwnership(listener);\n}\n\nexport function normalizeHandlers(\n handlers: PibblEventHandlers,\n): PibblNormalizedHandlers {\n const state = createHandlerState();\n refreshHandlers(state, handlers, false);\n return state.handlers;\n}\n\ninterface PibblHandlerState {\n handlers: PibblNormalizedHandlers;\n handlerTypesLow: number;\n handlerTypesHigh: number;\n requiredNativeTypesLow: number;\n requiredNativeTypesHigh: number;\n}\n\ninterface PibblEventPropMetadata {\n readonly normalizedKey: PibblEventType | PibblNormalizedCaptureKey;\n readonly handlerTypesLow: number;\n readonly handlerTypesHigh: number;\n readonly requiredNativeTypesLow: number;\n readonly requiredNativeTypesHigh: number;\n}\n\n/**\n * Hot-path property lookup built once from the closed event vocabulary.\n *\n * Each definition owns one bit position. JavaScript bitwise operators use\n * signed 32-bit integers, but sign is irrelevant here: the words are opaque\n * bit sets compared and combined only with bitwise operations.\n */\nconst eventPropMetadata = Object.create(null) as Record<\n string,\n PibblEventPropMetadata | undefined\n>;\nconst eventIndexByType = Object.create(null) as Record<\n string,\n number | undefined\n>;\n\nif (PIBBL_EVENT_DEFINITIONS.length > 64) {\n throw new Error(\"Pibbl event masks support at most 64 logical event types.\");\n}\n\nfor (let index = 0; index < PIBBL_EVENT_DEFINITIONS.length; index++) {\n eventIndexByType[PIBBL_EVENT_DEFINITIONS[index]!.type] = index;\n}\n\nfor (let index = 0; index < PIBBL_EVENT_DEFINITIONS.length; index++) {\n const definition = PIBBL_EVENT_DEFINITIONS[index]!;\n const handlerTypesLow = index < 32 ? 1 << index : 0;\n const handlerTypesHigh = index < 32 ? 0 : 1 << (index - 32);\n // Expand logical-to-native prerequisites once. The render path only ORs\n // these precomputed words and never allocates dependency Sets.\n const nativeTypes = expandNativeTypesForMetadata(\n new Set([definition.type]),\n false,\n );\n let requiredNativeTypesLow = 0;\n let requiredNativeTypesHigh = 0;\n for (const type of nativeTypes) {\n const nativeIndex = eventIndexByType[type]!;\n if (nativeIndex < 32) {\n requiredNativeTypesLow |= 1 << nativeIndex;\n } else {\n requiredNativeTypesHigh |= 1 << (nativeIndex - 32);\n }\n }\n const bubble: PibblEventPropMetadata = Object.freeze({\n normalizedKey: definition.type,\n handlerTypesLow,\n handlerTypesHigh,\n requiredNativeTypesLow,\n requiredNativeTypesHigh,\n });\n const capture: PibblEventPropMetadata = Object.freeze({\n ...bubble,\n normalizedKey: `${definition.type}Capture` as PibblNormalizedCaptureKey,\n });\n eventPropMetadata[definition.prop] = bubble;\n eventPropMetadata[definition.captureProp] = capture;\n}\n\n// Cursor tracking has native movement/exit requirements even without a\n// logical callback, so it receives the same precomputed representation.\nconst cursorNativeTypes = expandNativeTypesForMetadata(new Set(), true);\nlet cursorNativeTypesLow = 0;\nlet cursorNativeTypesHigh = 0;\nfor (const type of cursorNativeTypes) {\n const index = eventIndexByType[type]!;\n if (index < 32) {\n cursorNativeTypesLow |= 1 << index;\n } else {\n cursorNativeTypesHigh |= 1 << (index - 32);\n }\n}\n\nfunction createHandlerState(): PibblHandlerState {\n return {\n handlers: {},\n handlerTypesLow: 0,\n handlerTypesHigh: 0,\n requiredNativeTypesLow: 0,\n requiredNativeTypesHigh: 0,\n };\n}\n\nfunction refreshHandlers(\n state: PibblHandlerState,\n handlers: PibblEventHandlers,\n hasCursor: boolean,\n): void {\n const normalized: PibblNormalizedHandlers = {};\n let handlerTypesLow = 0;\n let handlerTypesHigh = 0;\n let requiredNativeTypesLow = hasCursor ? cursorNativeTypesLow : 0;\n let requiredNativeTypesHigh = hasCursor ? cursorNativeTypesHigh : 0;\n // Iterate supplied props rather than probing every supported bubble and\n // capture name. Keep the normalized object fresh so dispatch always sees\n // the newest closures even when the type signature is unchanged.\n for (const prop in handlers) {\n const metadata = eventPropMetadata[prop];\n if (!metadata) continue;\n const handler = handlers[prop as keyof PibblEventHandlers];\n if (handler) {\n (normalized as Record<string, unknown>)[metadata.normalizedKey] = handler;\n handlerTypesLow |= metadata.handlerTypesLow;\n handlerTypesHigh |= metadata.handlerTypesHigh;\n requiredNativeTypesLow |= metadata.requiredNativeTypesLow;\n requiredNativeTypesHigh |= metadata.requiredNativeTypesHigh;\n }\n }\n state.handlers = normalized;\n state.handlerTypesLow = handlerTypesLow;\n state.handlerTypesHigh = handlerTypesHigh;\n state.requiredNativeTypesLow = requiredNativeTypesLow;\n state.requiredNativeTypesHigh = requiredNativeTypesHigh;\n}\n\n/**\n * Cold module-initialization helper. Do not call this from registration or\n * render code: its Sets deliberately trade startup simplicity for precomputed\n * allocation-free metadata in the hot path.\n */\nfunction expandNativeTypesForMetadata(\n types: ReadonlySet<PibblEventType>,\n hasCursor: boolean,\n): ReadonlySet<PibblEventType> {\n const nativeTypes = new Set(types);\n const hasPointerBoundary =\n types.has(\"pointerover\") ||\n types.has(\"pointerenter\") ||\n types.has(\"pointerout\") ||\n types.has(\"pointerleave\");\n if (hasPointerBoundary || types.has(\"pointermove\")) {\n nativeTypes.delete(\"pointerenter\");\n nativeTypes.delete(\"pointerleave\");\n nativeTypes.add(\"pointermove\");\n nativeTypes.add(\"pointerout\");\n if (hasPointerBoundary) nativeTypes.add(\"pointerover\");\n }\n if (\n hasCursor ||\n types.has(\"mouseover\") ||\n types.has(\"mouseenter\") ||\n types.has(\"mousemove\") ||\n types.has(\"mouseout\") ||\n types.has(\"mouseleave\")\n ) {\n nativeTypes.delete(\"mouseover\");\n nativeTypes.delete(\"mouseenter\");\n nativeTypes.delete(\"mouseleave\");\n nativeTypes.add(\"mousemove\");\n nativeTypes.add(\"mouseout\");\n }\n if (types.has(\"click\") || types.has(\"dblclick\") || types.has(\"auxclick\")) {\n nativeTypes.add(\"mousedown\");\n nativeTypes.add(\"mouseup\");\n }\n if (types.has(\"dblclick\")) nativeTypes.add(\"click\");\n if (\n types.has(\"touchstart\") ||\n types.has(\"touchmove\") ||\n types.has(\"touchend\") ||\n types.has(\"touchcancel\")\n ) {\n nativeTypes.add(\"touchstart\");\n nativeTypes.add(\"touchend\");\n nativeTypes.add(\"touchcancel\");\n }\n const hasDragBoundary = types.has(\"dragenter\") || types.has(\"dragleave\");\n if (hasDragBoundary) nativeTypes.add(\"dragenter\");\n if (hasDragBoundary || types.has(\"dragover\")) {\n nativeTypes.add(\"dragover\");\n nativeTypes.add(\"dragleave\");\n nativeTypes.add(\"drop\");\n nativeTypes.add(\"dragend\");\n }\n return nativeTypes;\n}\n\nfunction updateNativeOwnership(\n registration: PibblEventTargetRegistration | PibblEventListenerRegistration,\n): void {\n const previousLow = registration.ownedNativeTypesLow;\n const previousHigh = registration.ownedNativeTypesHigh;\n const nextLow = registration.requiredNativeTypesLow;\n const nextHigh = registration.requiredNativeTypesHigh;\n // Callback values may change every render while their native requirements\n // remain identical. Two integer comparisons make that common case a no-op.\n if (previousLow === nextLow && previousHigh === nextHigh) return;\n\n let releases = nativeReleases.get(registration);\n if (!releases) {\n releases = new Map();\n nativeReleases.set(registration, releases);\n }\n\n // A & ~B is the set difference A \u2212 B. Release all removals before\n // acquiring additions so hub reference counts always describe this target's\n // current requirement transition.\n forEachChangedType(\n previousLow & ~nextLow,\n previousHigh & ~nextHigh,\n (type) => {\n releases.get(type)?.();\n releases.delete(type);\n },\n );\n\n const hub = registration.owner.eventRoot.nativeListeners;\n if (hub) {\n // B & ~A is B \u2212 A: only newly required native types are acquired.\n forEachChangedType(\n nextLow & ~previousLow,\n nextHigh & ~previousHigh,\n (type) => {\n if (!releases.has(type)) releases.set(type, hub.acquire(type));\n },\n );\n }\n registration.ownedNativeTypesLow = nextLow;\n registration.ownedNativeTypesHigh = nextHigh;\n}\n\nfunction releaseNativeOwnership(\n registration: PibblEventTargetRegistration | PibblEventListenerRegistration,\n): void {\n // Zero first so a stable hook slot revived after release cannot mistake its\n // old signature for live ownership and skip reacquisition.\n registration.ownedNativeTypesLow = 0;\n registration.ownedNativeTypesHigh = 0;\n const releases = nativeReleases.get(registration);\n if (!releases) return;\n nativeReleases.delete(registration);\n const errors: unknown[] = [];\n for (const release of releases.values()) {\n try { release(); } catch (error) { errors.push(error); }\n }\n releases.clear();\n if (errors.length === 1) throw errors[0];\n if (errors.length) throw new AggregateError(errors, 'Native listener release failed.');\n}\n\nfunction forEachChangedType(\n low: number,\n high: number,\n visit: (type: PibblEventType) => void,\n): void {\n // `word & -word` isolates the least-significant set bit. `word & (word - 1)`\n // clears it, so this loop is O(number of changed types), not O(52 events).\n // Math.clz32 converts the isolated bit to its definition index; the high\n // word starts at definition 32.\n while (low !== 0) {\n const bit = low & -low;\n visit(PIBBL_EVENT_DEFINITIONS[31 - Math.clz32(bit)]!.type);\n low &= low - 1;\n }\n while (high !== 0) {\n const bit = high & -high;\n visit(PIBBL_EVENT_DEFINITIONS[32 + 31 - Math.clz32(bit)]!.type);\n high &= high - 1;\n }\n}\n\nfunction createPublicTarget(\n getRegistration: () => PibblEventNode,\n): PibblEventTarget {\n return {\n setPointerCapture(pointerId) {\n setLogicalPointerCapture(getRegistration(), pointerId);\n },\n hasPointerCapture(pointerId) {\n return hasLogicalPointerCapture(getRegistration(), pointerId);\n },\n releasePointerCapture(pointerId) {\n releaseLogicalPointerCapture(getRegistration(), pointerId);\n },\n };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { beginLayoutGeometry } from "./layout/geometry-publication.js";
|
|
1
2
|
import { RootRenderTransaction } from "./render-transaction.js";
|
|
2
3
|
import {
|
|
3
4
|
clearTempState,
|
|
@@ -64,6 +65,14 @@ function executeRender(canvas, renderTimestamp, updatedRoot, _updateParents = fa
|
|
|
64
65
|
GLOBAL_STATE.currentPibblInstance = pibblInstance;
|
|
65
66
|
for (const service of pibblInstance.optionalServices.values()) service.beginRender?.();
|
|
66
67
|
GLOBAL_STATE.renderTransaction = renderTransaction;
|
|
68
|
+
beginLayoutGeometry(pibblInstance, renderTransaction);
|
|
69
|
+
const releaseFailedGeneration = (success) => {
|
|
70
|
+
if (success || renderTransaction.failed === false) return;
|
|
71
|
+
for (const refs of pibblInstance.refs.values()) refs.teardowns.execute();
|
|
72
|
+
pibblInstance.refs.clear();
|
|
73
|
+
};
|
|
74
|
+
if (renderTransaction.onAfterFinish) renderTransaction.onAfterFinish(releaseFailedGeneration);
|
|
75
|
+
else renderTransaction.onFinish(releaseFailedGeneration);
|
|
67
76
|
GLOBAL_STATE.currentPibblInstance.renderTimestamp = activeFrameSnapshot.logicalTime;
|
|
68
77
|
GLOBAL_STATE.canvas = canvas;
|
|
69
78
|
const rootNode = arguments.length >= 3 && updatedRoot !== NO_PENDING_ROOT ? updatedRoot : GLOBAL_STATE.currentPibblInstance.root;
|
|
@@ -111,9 +120,23 @@ function executeRender(canvas, renderTimestamp, updatedRoot, _updateParents = fa
|
|
|
111
120
|
}
|
|
112
121
|
GLOBAL_STATE.layoutStack = [{
|
|
113
122
|
allocation: pibblInstance.rootLayoutBox,
|
|
114
|
-
percentageBasis: pibblInstance.rootLayoutBox
|
|
123
|
+
percentageBasis: pibblInstance.rootLayoutBox,
|
|
124
|
+
layoutDirection: pibblInstance.rootLayoutDirection
|
|
115
125
|
}];
|
|
116
126
|
const renderGeneration = ++pibblInstance.renderGeneration;
|
|
127
|
+
if (!pibblInstance.parent) {
|
|
128
|
+
renderTransaction.onFinish((success) => {
|
|
129
|
+
if (success) pibblInstance.committedRenderGeneration = renderGeneration;
|
|
130
|
+
});
|
|
131
|
+
if (pibblInstance.rootFrameObservers?.size) {
|
|
132
|
+
renderTransaction.onAfterFinish?.((success) => {
|
|
133
|
+
const observers = pibblInstance.rootFrameObservers;
|
|
134
|
+
if (!observers) return;
|
|
135
|
+
for (const observer of observers)
|
|
136
|
+
observer(success, renderGeneration);
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
117
140
|
renderSeenIds = pibblInstance.renderSeenIds;
|
|
118
141
|
renderSeenKeys = pibblInstance.renderSeenKeys;
|
|
119
142
|
renderSeenIds.clear();
|
|
@@ -136,6 +159,7 @@ function executeRender(canvas, renderTimestamp, updatedRoot, _updateParents = fa
|
|
|
136
159
|
driver.finishFrame(frame, true);
|
|
137
160
|
finishTransaction(true);
|
|
138
161
|
} catch (error) {
|
|
162
|
+
renderTransaction.fail?.();
|
|
139
163
|
for (const service of pibblInstance.optionalServices.values()) service.endRender?.(false);
|
|
140
164
|
finishTransaction(false);
|
|
141
165
|
for (const refs of pibblInstance.refs.values()) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/lib/execute-render.ts"],
|
|
4
|
-
"sourcesContent": ["import { RootRenderTransaction } from './render-transaction.js';\nimport {\n clearTempState,\n GLOBAL_STATE,\n NO_PENDING_ROOT,\n} from './global-state.js';\nimport { render } from './render.js';\nimport { initializeCurrentWorldTransformAnchor } from './render-target.js';\nimport {\n Canvas,\n type PibblNode,\n} from './types.js';\nimport type {\n PibblBackendFrame,\n} from './backend/types.js';\nimport type { PibblFrameSnapshot } from './scheduler/types.js';\nimport { withSignalWriteForbidden } from './signals/graph.js';\n\n/**\n * Gets the root element for a canvas and renders it. This is the\n * entry point for rendering the entire tree.\n * @param canvas The canvas to render on\n */\nexport function executeRender(\n canvas: Canvas,\n renderTimestamp: number,\n updatedRoot?: PibblNode | typeof NO_PENDING_ROOT,\n _updateParents = false,\n frameSnapshot?: PibblFrameSnapshot,\n): void {\n if (!canvas) {\n throw new Error('No canvas element provided');\n }\n\n const pibblInstance = GLOBAL_STATE.pibblInstances.get(canvas);\n\n if (!pibblInstance) {\n throw new Error('Pibbl is not mounted on this element');\n }\n\n if (pibblInstance.mainTeardowns.closed) return;\n\n const inheritedTransaction = pibblInstance.eventRoot.renderTransaction;\n const renderTransaction = inheritedTransaction ?? new RootRenderTransaction();\n const ownsRenderTransaction = !inheritedTransaction;\n if (ownsRenderTransaction) {\n pibblInstance.eventRoot.renderTransaction = renderTransaction;\n }\n let transactionFinished = false;\n const finishTransaction = (success: boolean) => {\n if (!ownsRenderTransaction || transactionFinished) return;\n transactionFinished = true;\n (renderTransaction as RootRenderTransaction).finish(success);\n };\n\n const prevCurrentPibblInstance = GLOBAL_STATE.currentPibblInstance;\n const prevCanvas = GLOBAL_STATE.canvas;\n const prevRenderContext = GLOBAL_STATE.renderContext;\n const prevRenderTarget = GLOBAL_STATE.renderTarget;\n const prevWorldBaseTransform = GLOBAL_STATE.worldBaseTransform;\n const prevWorldExactTransform = GLOBAL_STATE.worldExactTransform;\n const prevWorldPaintAnchorTransform = GLOBAL_STATE.worldPaintAnchorTransform;\n const prevPresentationTransformLineage = GLOBAL_STATE.presentationTransformLineage;\n const prevPresentationTransformLineageTrackingDepth =\n GLOBAL_STATE.presentationTransformLineageTrackingDepth;\n const prevRenderTransaction = GLOBAL_STATE.renderTransaction;\n const prevFrameSnapshot = GLOBAL_STATE.frameSnapshot;\n const prevPrimitiveReceiverToken = GLOBAL_STATE.primitiveReceiverToken;\n const prevSeenIds = GLOBAL_STATE.seenIds;\n const prevSeenKeys = GLOBAL_STATE.seenKeys;\n const prevComponentRefs = GLOBAL_STATE.componentRefs;\n const prevComponentHookIndex = GLOBAL_STATE.componentHookIndex;\n const prevComponentIsMounting = GLOBAL_STATE.componentIsMounting;\n const prevClippingStack = GLOBAL_STATE.clippingStack;\n const prevLayoutStack = GLOBAL_STATE.layoutStack;\n const prevBackendDriver = GLOBAL_STATE.backendDriver;\n const prevBackendFrame = GLOBAL_STATE.backendFrame;\n const prevBackendEnvironment = GLOBAL_STATE.backendEnvironment;\n let frame: PibblBackendFrame<unknown> | undefined;\n let frameSuccess = false;\n let renderSeenIds: Set<string> | undefined;\n let renderSeenKeys: Set<string> | undefined;\n try {\n const activeFrameSnapshot = frameSnapshot ?? (\n prevFrameSnapshot?.logicalTime === renderTimestamp ?\n prevFrameSnapshot :\n Object.freeze({\n frameId: prevFrameSnapshot?.frameId ?? 0,\n hostTime: prevFrameSnapshot?.hostTime ?? renderTimestamp,\n logicalTime: renderTimestamp,\n })\n );\n GLOBAL_STATE.frameSnapshot = activeFrameSnapshot;\n GLOBAL_STATE.currentPibblInstance = pibblInstance;\n for (const service of pibblInstance.optionalServices.values()) service.beginRender?.();\n GLOBAL_STATE.renderTransaction = renderTransaction;\n GLOBAL_STATE.currentPibblInstance.renderTimestamp = activeFrameSnapshot.logicalTime;\n GLOBAL_STATE.canvas = canvas;\n const rootNode = arguments.length >= 3 && updatedRoot !== NO_PENDING_ROOT ?\n updatedRoot :\n GLOBAL_STATE.currentPibblInstance.root;\n GLOBAL_STATE.currentPibblInstance.root = rootNode;\n const driver = pibblInstance.backendDriver;\n GLOBAL_STATE.backendDriver = driver;\n frame = driver.beginFrame({\n canvas,\n logicalWidth: pibblInstance.rootLayoutBox.width,\n logicalHeight: pibblInstance.rootLayoutBox.height,\n backingWidth: canvas.width,\n backingHeight: canvas.height,\n renderTimestamp: activeFrameSnapshot.logicalTime,\n });\n if (!frame) {\n pibblInstance.eventRoot.html?.suspend(pibblInstance);\n finishTransaction(true);\n return;\n }\n pibblInstance.eventRoot.html?.beginRender(pibblInstance);\n GLOBAL_STATE.backendFrame = frame;\n GLOBAL_STATE.backendEnvironment = frame.environment;\n GLOBAL_STATE.renderContext = frame.context2D;\n GLOBAL_STATE.renderTarget = frame.renderTarget;\n GLOBAL_STATE.worldBaseTransform = frame.worldBaseTransform;\n GLOBAL_STATE.worldExactTransform = undefined;\n GLOBAL_STATE.worldPaintAnchorTransform = undefined;\n GLOBAL_STATE.presentationTransformLineage = undefined;\n GLOBAL_STATE.presentationTransformLineageTrackingDepth = 0;\n if (\n frame.context2D !== undefined &&\n frame.renderTarget !== undefined &&\n frame.worldBaseTransform !== undefined\n ) {\n initializeCurrentWorldTransformAnchor(frame.worldBaseTransform);\n }\n GLOBAL_STATE.clippingStack = [];\n const surface = pibblInstance.surface.snapshot;\n const logicalWidth = surface?.logicalWidth ?? pibblInstance.rootLayoutBox.width;\n const logicalHeight = surface?.logicalHeight ?? pibblInstance.rootLayoutBox.height;\n const previousRootBox = pibblInstance.rootLayoutBox;\n if (\n previousRootBox.width !== logicalWidth ||\n previousRootBox.height !== logicalHeight\n ) {\n pibblInstance.rootLayoutBox = Object.freeze({\n x: 0,\n y: 0,\n width: logicalWidth,\n height: logicalHeight,\n });\n }\n GLOBAL_STATE.layoutStack = [{\n allocation: pibblInstance.rootLayoutBox,\n percentageBasis: pibblInstance.rootLayoutBox,\n }];\n\n const renderGeneration = ++pibblInstance.renderGeneration;\n renderSeenIds = pibblInstance.renderSeenIds;\n renderSeenKeys = pibblInstance.renderSeenKeys;\n renderSeenIds.clear();\n renderSeenKeys.clear();\n GLOBAL_STATE.seenIds = renderSeenIds;\n GLOBAL_STATE.seenKeys = renderSeenKeys;\n const id = 'root';\n renderSeenIds.add(id);\n withSignalWriteForbidden(\n 'Pibbl render',\n () => render(rootNode, id, undefined),\n );\n\n for (const [id, componentRefs] of pibblInstance.refs) {\n if (componentRefs.renderGeneration === renderGeneration) continue;\n componentRefs.teardowns.execute();\n pibblInstance.refs.delete(id);\n }\n frameSuccess = true;\n for (const service of pibblInstance.optionalServices.values()) service.endRender?.(true);\n driver.finishFrame(frame, true);\n finishTransaction(true);\n } catch (error) {\n for (const service of pibblInstance.optionalServices.values()) service.endRender?.(false);\n finishTransaction(false);\n for (const refs of pibblInstance.refs.values()) {\n refs.teardowns.execute();\n }\n pibblInstance.refs.clear();\n throw error;\n } finally {\n try {\n if (frame && !frameSuccess) {\n pibblInstance.backendDriver.finishFrame(frame, false);\n }\n } finally {\n try {\n clearTempState();\n GLOBAL_STATE.clippingStack = prevClippingStack;\n GLOBAL_STATE.layoutStack = prevLayoutStack;\n if (ownsRenderTransaction) {\n try {\n finishTransaction(false);\n } finally {\n if (pibblInstance.eventRoot.renderTransaction === renderTransaction) {\n pibblInstance.eventRoot.renderTransaction = undefined;\n }\n }\n }\n } finally {\n renderSeenIds?.clear();\n renderSeenKeys?.clear();\n GLOBAL_STATE.currentPibblInstance = prevCurrentPibblInstance;\n GLOBAL_STATE.canvas = prevCanvas;\n GLOBAL_STATE.renderContext = prevRenderContext;\n GLOBAL_STATE.renderTarget = prevRenderTarget;\n GLOBAL_STATE.worldBaseTransform = prevWorldBaseTransform;\n GLOBAL_STATE.worldExactTransform = prevWorldExactTransform;\n GLOBAL_STATE.worldPaintAnchorTransform = prevWorldPaintAnchorTransform;\n GLOBAL_STATE.presentationTransformLineage = prevPresentationTransformLineage;\n GLOBAL_STATE.presentationTransformLineageTrackingDepth =\n prevPresentationTransformLineageTrackingDepth;\n GLOBAL_STATE.renderTransaction = prevRenderTransaction;\n GLOBAL_STATE.frameSnapshot = prevFrameSnapshot;\n GLOBAL_STATE.primitiveReceiverToken = prevPrimitiveReceiverToken;\n GLOBAL_STATE.seenIds = prevSeenIds;\n GLOBAL_STATE.seenKeys = prevSeenKeys;\n GLOBAL_STATE.componentRefs = prevComponentRefs;\n GLOBAL_STATE.componentHookIndex = prevComponentHookIndex;\n GLOBAL_STATE.componentIsMounting = prevComponentIsMounting;\n GLOBAL_STATE.backendDriver = prevBackendDriver;\n GLOBAL_STATE.backendFrame = prevBackendFrame;\n GLOBAL_STATE.backendEnvironment = prevBackendEnvironment;\n }\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { beginLayoutGeometry } from './layout/geometry-publication.js';\nimport { RootRenderTransaction } from './render-transaction.js';\nimport {\n clearTempState,\n GLOBAL_STATE,\n NO_PENDING_ROOT,\n} from './global-state.js';\nimport { render } from './render.js';\nimport { initializeCurrentWorldTransformAnchor } from './render-target.js';\nimport {\n Canvas,\n type PibblNode,\n} from './types.js';\nimport type {\n PibblBackendFrame,\n} from './backend/types.js';\nimport type { PibblFrameSnapshot } from './scheduler/types.js';\nimport { withSignalWriteForbidden } from './signals/graph.js';\n\n/**\n * Gets the root element for a canvas and renders it. This is the\n * entry point for rendering the entire tree.\n * @param canvas The canvas to render on\n */\nexport function executeRender(\n canvas: Canvas,\n renderTimestamp: number,\n updatedRoot?: PibblNode | typeof NO_PENDING_ROOT,\n _updateParents = false,\n frameSnapshot?: PibblFrameSnapshot,\n): void {\n if (!canvas) {\n throw new Error('No canvas element provided');\n }\n\n const pibblInstance = GLOBAL_STATE.pibblInstances.get(canvas);\n\n if (!pibblInstance) {\n throw new Error('Pibbl is not mounted on this element');\n }\n\n if (pibblInstance.mainTeardowns.closed) return;\n\n const inheritedTransaction = pibblInstance.eventRoot.renderTransaction;\n const renderTransaction = inheritedTransaction ?? new RootRenderTransaction();\n const ownsRenderTransaction = !inheritedTransaction;\n if (ownsRenderTransaction) {\n pibblInstance.eventRoot.renderTransaction = renderTransaction;\n }\n let transactionFinished = false;\n const finishTransaction = (success: boolean) => {\n if (!ownsRenderTransaction || transactionFinished) return;\n transactionFinished = true;\n (renderTransaction as RootRenderTransaction).finish(success);\n };\n\n const prevCurrentPibblInstance = GLOBAL_STATE.currentPibblInstance;\n const prevCanvas = GLOBAL_STATE.canvas;\n const prevRenderContext = GLOBAL_STATE.renderContext;\n const prevRenderTarget = GLOBAL_STATE.renderTarget;\n const prevWorldBaseTransform = GLOBAL_STATE.worldBaseTransform;\n const prevWorldExactTransform = GLOBAL_STATE.worldExactTransform;\n const prevWorldPaintAnchorTransform = GLOBAL_STATE.worldPaintAnchorTransform;\n const prevPresentationTransformLineage = GLOBAL_STATE.presentationTransformLineage;\n const prevPresentationTransformLineageTrackingDepth =\n GLOBAL_STATE.presentationTransformLineageTrackingDepth;\n const prevRenderTransaction = GLOBAL_STATE.renderTransaction;\n const prevFrameSnapshot = GLOBAL_STATE.frameSnapshot;\n const prevPrimitiveReceiverToken = GLOBAL_STATE.primitiveReceiverToken;\n const prevSeenIds = GLOBAL_STATE.seenIds;\n const prevSeenKeys = GLOBAL_STATE.seenKeys;\n const prevComponentRefs = GLOBAL_STATE.componentRefs;\n const prevComponentHookIndex = GLOBAL_STATE.componentHookIndex;\n const prevComponentIsMounting = GLOBAL_STATE.componentIsMounting;\n const prevClippingStack = GLOBAL_STATE.clippingStack;\n const prevLayoutStack = GLOBAL_STATE.layoutStack;\n const prevBackendDriver = GLOBAL_STATE.backendDriver;\n const prevBackendFrame = GLOBAL_STATE.backendFrame;\n const prevBackendEnvironment = GLOBAL_STATE.backendEnvironment;\n let frame: PibblBackendFrame<unknown> | undefined;\n let frameSuccess = false;\n let renderSeenIds: Set<string> | undefined;\n let renderSeenKeys: Set<string> | undefined;\n try {\n const activeFrameSnapshot = frameSnapshot ?? (\n prevFrameSnapshot?.logicalTime === renderTimestamp ?\n prevFrameSnapshot :\n Object.freeze({\n frameId: prevFrameSnapshot?.frameId ?? 0,\n hostTime: prevFrameSnapshot?.hostTime ?? renderTimestamp,\n logicalTime: renderTimestamp,\n })\n );\n GLOBAL_STATE.frameSnapshot = activeFrameSnapshot;\n GLOBAL_STATE.currentPibblInstance = pibblInstance;\n for (const service of pibblInstance.optionalServices.values()) service.beginRender?.();\n GLOBAL_STATE.renderTransaction = renderTransaction;\n beginLayoutGeometry(pibblInstance, renderTransaction);\n // Scheduled publication happens after executeRender returns. Its failure\n // must retire the same mount-owned state as a traversal failure, so a later\n // render cannot re-enter a policy or resource already destroyed by abort.\n const releaseFailedGeneration = (success: boolean) => {\n if (success || renderTransaction.failed === false) return;\n for (const refs of pibblInstance.refs.values()) refs.teardowns.execute();\n pibblInstance.refs.clear();\n };\n if (renderTransaction.onAfterFinish) renderTransaction.onAfterFinish(releaseFailedGeneration);\n else renderTransaction.onFinish(releaseFailedGeneration);\n GLOBAL_STATE.currentPibblInstance.renderTimestamp = activeFrameSnapshot.logicalTime;\n GLOBAL_STATE.canvas = canvas;\n const rootNode = arguments.length >= 3 && updatedRoot !== NO_PENDING_ROOT ?\n updatedRoot :\n GLOBAL_STATE.currentPibblInstance.root;\n GLOBAL_STATE.currentPibblInstance.root = rootNode;\n const driver = pibblInstance.backendDriver;\n GLOBAL_STATE.backendDriver = driver;\n frame = driver.beginFrame({\n canvas,\n logicalWidth: pibblInstance.rootLayoutBox.width,\n logicalHeight: pibblInstance.rootLayoutBox.height,\n backingWidth: canvas.width,\n backingHeight: canvas.height,\n renderTimestamp: activeFrameSnapshot.logicalTime,\n });\n if (!frame) {\n pibblInstance.eventRoot.html?.suspend(pibblInstance);\n finishTransaction(true);\n return;\n }\n pibblInstance.eventRoot.html?.beginRender(pibblInstance);\n GLOBAL_STATE.backendFrame = frame;\n GLOBAL_STATE.backendEnvironment = frame.environment;\n GLOBAL_STATE.renderContext = frame.context2D;\n GLOBAL_STATE.renderTarget = frame.renderTarget;\n GLOBAL_STATE.worldBaseTransform = frame.worldBaseTransform;\n GLOBAL_STATE.worldExactTransform = undefined;\n GLOBAL_STATE.worldPaintAnchorTransform = undefined;\n GLOBAL_STATE.presentationTransformLineage = undefined;\n GLOBAL_STATE.presentationTransformLineageTrackingDepth = 0;\n if (\n frame.context2D !== undefined &&\n frame.renderTarget !== undefined &&\n frame.worldBaseTransform !== undefined\n ) {\n initializeCurrentWorldTransformAnchor(frame.worldBaseTransform);\n }\n GLOBAL_STATE.clippingStack = [];\n const surface = pibblInstance.surface.snapshot;\n const logicalWidth = surface?.logicalWidth ?? pibblInstance.rootLayoutBox.width;\n const logicalHeight = surface?.logicalHeight ?? pibblInstance.rootLayoutBox.height;\n const previousRootBox = pibblInstance.rootLayoutBox;\n if (\n previousRootBox.width !== logicalWidth ||\n previousRootBox.height !== logicalHeight\n ) {\n pibblInstance.rootLayoutBox = Object.freeze({\n x: 0,\n y: 0,\n width: logicalWidth,\n height: logicalHeight,\n });\n }\n GLOBAL_STATE.layoutStack = [{\n allocation: pibblInstance.rootLayoutBox,\n percentageBasis: pibblInstance.rootLayoutBox,\n layoutDirection: pibblInstance.rootLayoutDirection,\n }];\n\n const renderGeneration = ++pibblInstance.renderGeneration;\n if (!pibblInstance.parent) {\n renderTransaction.onFinish((success) => {\n if (success) pibblInstance.committedRenderGeneration = renderGeneration;\n });\n if (pibblInstance.rootFrameObservers?.size) {\n renderTransaction.onAfterFinish?.((success) => {\n const observers = pibblInstance.rootFrameObservers;\n if (!observers) return;\n for (const observer of observers)\n observer(success, renderGeneration);\n });\n }\n }\n renderSeenIds = pibblInstance.renderSeenIds;\n renderSeenKeys = pibblInstance.renderSeenKeys;\n renderSeenIds.clear();\n renderSeenKeys.clear();\n GLOBAL_STATE.seenIds = renderSeenIds;\n GLOBAL_STATE.seenKeys = renderSeenKeys;\n const id = 'root';\n renderSeenIds.add(id);\n withSignalWriteForbidden(\n 'Pibbl render',\n () => render(rootNode, id, undefined),\n );\n\n for (const [id, componentRefs] of pibblInstance.refs) {\n if (componentRefs.renderGeneration === renderGeneration) continue;\n componentRefs.teardowns.execute();\n pibblInstance.refs.delete(id);\n }\n frameSuccess = true;\n for (const service of pibblInstance.optionalServices.values()) service.endRender?.(true);\n driver.finishFrame(frame, true);\n finishTransaction(true);\n } catch (error) {\n renderTransaction.fail?.();\n for (const service of pibblInstance.optionalServices.values()) service.endRender?.(false);\n finishTransaction(false);\n for (const refs of pibblInstance.refs.values()) {\n refs.teardowns.execute();\n }\n pibblInstance.refs.clear();\n throw error;\n } finally {\n try {\n if (frame && !frameSuccess) {\n pibblInstance.backendDriver.finishFrame(frame, false);\n }\n } finally {\n try {\n clearTempState();\n GLOBAL_STATE.clippingStack = prevClippingStack;\n GLOBAL_STATE.layoutStack = prevLayoutStack;\n if (ownsRenderTransaction) {\n try {\n finishTransaction(false);\n } finally {\n if (pibblInstance.eventRoot.renderTransaction === renderTransaction) {\n pibblInstance.eventRoot.renderTransaction = undefined;\n }\n }\n }\n } finally {\n renderSeenIds?.clear();\n renderSeenKeys?.clear();\n GLOBAL_STATE.currentPibblInstance = prevCurrentPibblInstance;\n GLOBAL_STATE.canvas = prevCanvas;\n GLOBAL_STATE.renderContext = prevRenderContext;\n GLOBAL_STATE.renderTarget = prevRenderTarget;\n GLOBAL_STATE.worldBaseTransform = prevWorldBaseTransform;\n GLOBAL_STATE.worldExactTransform = prevWorldExactTransform;\n GLOBAL_STATE.worldPaintAnchorTransform = prevWorldPaintAnchorTransform;\n GLOBAL_STATE.presentationTransformLineage = prevPresentationTransformLineage;\n GLOBAL_STATE.presentationTransformLineageTrackingDepth =\n prevPresentationTransformLineageTrackingDepth;\n GLOBAL_STATE.renderTransaction = prevRenderTransaction;\n GLOBAL_STATE.frameSnapshot = prevFrameSnapshot;\n GLOBAL_STATE.primitiveReceiverToken = prevPrimitiveReceiverToken;\n GLOBAL_STATE.seenIds = prevSeenIds;\n GLOBAL_STATE.seenKeys = prevSeenKeys;\n GLOBAL_STATE.componentRefs = prevComponentRefs;\n GLOBAL_STATE.componentHookIndex = prevComponentHookIndex;\n GLOBAL_STATE.componentIsMounting = prevComponentIsMounting;\n GLOBAL_STATE.backendDriver = prevBackendDriver;\n GLOBAL_STATE.backendFrame = prevBackendFrame;\n GLOBAL_STATE.backendEnvironment = prevBackendEnvironment;\n }\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["id"]
|
|
7
7
|
}
|
|
@@ -81,7 +81,7 @@ function resolveFilterWindows(parentTarget, parentPaintTransform, filters) {
|
|
|
81
81
|
function projectBounds(bounds, inverseProject) {
|
|
82
82
|
const right = bounds.x + bounds.width;
|
|
83
83
|
const bottom = bounds.y + bounds.height;
|
|
84
|
-
if (!
|
|
84
|
+
if (!(Number.isFinite(bounds.x) && Number.isFinite(bounds.y) && Number.isFinite(right) && Number.isFinite(bottom))) {
|
|
85
85
|
return void 0;
|
|
86
86
|
}
|
|
87
87
|
const points = [
|
|
@@ -168,7 +168,7 @@ function snapToBackingPixels(bounds, density) {
|
|
|
168
168
|
const scaledTop = bounds.y * density;
|
|
169
169
|
const scaledRight = (bounds.x + bounds.width) * density;
|
|
170
170
|
const scaledBottom = (bounds.y + bounds.height) * density;
|
|
171
|
-
if (!
|
|
171
|
+
if (!(Number.isFinite(scaledLeft) && Number.isFinite(scaledTop) && Number.isFinite(scaledRight) && Number.isFinite(scaledBottom))) {
|
|
172
172
|
throw filterRegionError(
|
|
173
173
|
{ scaledLeft, scaledTop, scaledRight, scaledBottom },
|
|
174
174
|
"filter backing edge arithmetic overflowed"
|
|
@@ -262,14 +262,7 @@ function assertCanvasPixelBounds(bounds) {
|
|
|
262
262
|
}
|
|
263
263
|
}
|
|
264
264
|
function isFiniteAffine(matrix) {
|
|
265
|
-
return matrix.is2D &&
|
|
266
|
-
matrix.a,
|
|
267
|
-
matrix.b,
|
|
268
|
-
matrix.c,
|
|
269
|
-
matrix.d,
|
|
270
|
-
matrix.e,
|
|
271
|
-
matrix.f
|
|
272
|
-
].every(Number.isFinite);
|
|
265
|
+
return matrix.is2D && Number.isFinite(matrix.a) && Number.isFinite(matrix.b) && Number.isFinite(matrix.c) && Number.isFinite(matrix.d) && Number.isFinite(matrix.e) && Number.isFinite(matrix.f);
|
|
273
266
|
}
|
|
274
267
|
function filterRegionError(value, reason) {
|
|
275
268
|
const type = GLOBAL_STATE.componentRefs?.element.type;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/lib/filter/filter-region.ts"],
|
|
4
|
-
"sourcesContent": ["import { GLOBAL_STATE } from '../global-state.js';\nimport type { LayoutBox } from '../layout/types.js';\nimport type { RenderTargetSnapshot } from '../render-target.js';\nimport { layoutDiagnostic } from '../style/diagnostics.js';\nimport type { NativePreparedFilter } from '../../filters/native-operations.js';\n\nexport const BLUR_EXTENT_FACTOR = (3 * Math.sqrt(2 * Math.PI)) / 4;\n\nconst MAX_UNSIGNED_LONG = 0xffff_ffff;\n\nexport interface PixelBounds {\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n}\n\nexport interface FilterPixelWindow {\n readonly logicalBounds: Readonly<LayoutBox>;\n readonly backingX: number;\n readonly backingY: number;\n readonly backingWidth: number;\n readonly backingHeight: number;\n readonly renderTransform: DOMMatrix;\n readonly inverseRenderTransform: DOMMatrix;\n}\n\nexport interface FilterWindows {\n readonly source: FilterPixelWindow;\n readonly output: FilterPixelWindow;\n readonly density: number;\n readonly sourceToOutputX: number;\n readonly sourceToOutputY: number;\n}\n\nexport function reverseFilterInfluence(\n output: Readonly<PixelBounds>,\n filters: { readonly values: readonly NativePreparedFilter[] },\n density: number,\n): PixelBounds {\n let left = output.x;\n let top = output.y;\n let right = output.x + output.width;\n let bottom = output.y + output.height;\n assertPixelEdges(left, top, right, bottom);\n\n for (let index = filters.values.length - 1; index >= 0; index -= 1) {\n const filter = filters.values[index]!;\n const influenced = filter.reverseInfluence({\n x: left,\n y: top,\n width: right - left,\n height: bottom - top,\n }, density);\n left = influenced.x;\n top = influenced.y;\n right = influenced.x + influenced.width;\n bottom = influenced.y + influenced.height;\n assertPixelEdges(left, top, right, bottom);\n }\n\n return {\n x: left,\n y: top,\n width: right - left,\n height: bottom - top,\n };\n}\n\nexport function largestAffineScale(matrix: DOMMatrixReadOnly): number {\n const { a, b, c, d } = matrix;\n const coefficientScale = Math.max(\n Math.abs(a),\n Math.abs(b),\n Math.abs(c),\n Math.abs(d),\n );\n if (coefficientScale === 0) return 0;\n if (!Number.isFinite(coefficientScale)) return Number.NaN;\n\n const normalizedA = a / coefficientScale;\n const normalizedB = b / coefficientScale;\n const normalizedC = c / coefficientScale;\n const normalizedD = d / coefficientScale;\n const sumOfSquares =\n normalizedA * normalizedA + normalizedB * normalizedB +\n normalizedC * normalizedC + normalizedD * normalizedD;\n const determinant =\n normalizedA * normalizedD - normalizedB * normalizedC;\n const discriminant = Math.max(\n 0,\n sumOfSquares * sumOfSquares - 4 * determinant * determinant,\n );\n return coefficientScale *\n Math.sqrt((sumOfSquares + Math.sqrt(discriminant)) / 2);\n}\n\nexport function resolveFilterWindows(\n parentTarget: RenderTargetSnapshot,\n parentPaintTransform: DOMMatrixReadOnly,\n filters: { readonly values: readonly NativePreparedFilter[] },\n): FilterWindows | 'discard' {\n if (!isFiniteAffine(parentPaintTransform)) return 'discard';\n const inverseProject = createInverseProjector(parentPaintTransform);\n if (!inverseProject) return 'discard';\n\n const localToParentBacking = parentTarget.renderTransform.multiply(\n parentPaintTransform,\n );\n if (!isFiniteAffine(localToParentBacking)) return 'discard';\n const density = largestAffineScale(localToParentBacking);\n if (!Number.isFinite(density) || density <= 0) return 'discard';\n\n const projected = projectBounds(parentTarget.logicalBounds, inverseProject);\n if (!projected) return 'discard';\n const outputPixels = snapToBackingPixels(projected, density);\n const sourcePixels = reverseFilterInfluence(outputPixels, filters, density);\n assertCanvasPixelBounds(outputPixels);\n assertCanvasPixelBounds(sourcePixels);\n\n const output = createWindow(outputPixels, density);\n const source = createWindow(sourcePixels, density);\n if (!output || !source) return 'discard';\n return {\n source,\n output,\n density,\n sourceToOutputX: source.backingX - output.backingX,\n sourceToOutputY: source.backingY - output.backingY,\n };\n}\n\nfunction projectBounds(\n bounds: Readonly<LayoutBox>,\n inverseProject: InverseProjector,\n): LayoutBox | undefined {\n const right = bounds.x + bounds.width;\n const bottom = bounds.y + bounds.height;\n if (![bounds.x, bounds.y, right, bottom].every(Number.isFinite)) {\n return undefined;\n }\n\n const points = [\n inverseProject(bounds.x, bounds.y),\n inverseProject(right, bounds.y),\n inverseProject(bounds.x, bottom),\n inverseProject(right, bottom),\n ];\n if (points.some(point => !point)) return undefined;\n const projectedPoints = points as readonly ProjectedPoint[];\n if (projectedPoints.some(\n point => !Number.isFinite(point.x) || !Number.isFinite(point.y),\n )) {\n return undefined;\n }\n const xs = projectedPoints.map(point => point.x);\n const ys = projectedPoints.map(point => point.y);\n const left = Math.min(...xs);\n const top = Math.min(...ys);\n const projectedRight = Math.max(...xs);\n const projectedBottom = Math.max(...ys);\n return {\n x: left,\n y: top,\n width: projectedRight - left,\n height: projectedBottom - top,\n };\n}\n\ninterface ProjectedPoint {\n readonly x: number;\n readonly y: number;\n}\n\ntype InverseProjector = (\n parentX: number,\n parentY: number,\n) => ProjectedPoint | undefined;\n\nfunction createInverseProjector(\n matrix: DOMMatrixReadOnly,\n): InverseProjector | undefined {\n const { a, b, c, d, e, f } = matrix;\n const firstRowScale = Math.max(Math.abs(a), Math.abs(c));\n const secondRowScale = Math.max(Math.abs(b), Math.abs(d));\n if (firstRowScale === 0 || secondRowScale === 0) return undefined;\n\n const rowA = a / firstRowScale;\n const rowB = b / secondRowScale;\n const rowC = c / firstRowScale;\n const rowD = d / secondRowScale;\n const firstColumnScale = Math.max(Math.abs(rowA), Math.abs(rowB));\n const secondColumnScale = Math.max(Math.abs(rowC), Math.abs(rowD));\n if (firstColumnScale === 0 || secondColumnScale === 0) return undefined;\n\n const normalizedA = rowA / firstColumnScale;\n const normalizedB = rowB / firstColumnScale;\n const normalizedC = rowC / secondColumnScale;\n const normalizedD = rowD / secondColumnScale;\n if (Math.abs(normalizedA) >= Math.abs(normalizedB)) {\n if (normalizedA === 0) return undefined;\n const ratio = normalizedB / normalizedA;\n const schurComplement = normalizedD - ratio * normalizedC;\n if (schurComplement === 0 || !Number.isFinite(schurComplement)) {\n return undefined;\n }\n return (parentX, parentY) => {\n const rightX = scaledDifference(parentX, e, firstRowScale);\n const rightY = scaledDifference(parentY, f, secondRowScale);\n const normalizedY =\n (rightY - ratio * rightX) / schurComplement;\n const normalizedX =\n (rightX - normalizedC * normalizedY) / normalizedA;\n const x = normalizedX / firstColumnScale;\n const y = normalizedY / secondColumnScale;\n return Number.isFinite(x) && Number.isFinite(y) ? { x, y } : undefined;\n };\n }\n\n const ratio = normalizedA / normalizedB;\n const schurComplement = normalizedC - ratio * normalizedD;\n if (schurComplement === 0 || !Number.isFinite(schurComplement)) {\n return undefined;\n }\n return (parentX, parentY) => {\n const rightX = scaledDifference(parentX, e, firstRowScale);\n const rightY = scaledDifference(parentY, f, secondRowScale);\n const normalizedY = (rightX - ratio * rightY) / schurComplement;\n const normalizedX =\n (rightY - normalizedD * normalizedY) / normalizedB;\n const x = normalizedX / firstColumnScale;\n const y = normalizedY / secondColumnScale;\n return Number.isFinite(x) && Number.isFinite(y) ? { x, y } : undefined;\n };\n}\n\nfunction scaledDifference(\n value: number,\n offset: number,\n scale: number,\n): number {\n const difference = value - offset;\n if (Number.isFinite(difference)) return difference / scale;\n return value / scale - offset / scale;\n}\n\nfunction snapToBackingPixels(\n bounds: Readonly<LayoutBox>,\n density: number,\n): PixelBounds {\n const scaledLeft = bounds.x * density;\n const scaledTop = bounds.y * density;\n const scaledRight = (bounds.x + bounds.width) * density;\n const scaledBottom = (bounds.y + bounds.height) * density;\n if (![scaledLeft, scaledTop, scaledRight, scaledBottom].every(Number.isFinite)) {\n throw filterRegionError(\n { scaledLeft, scaledTop, scaledRight, scaledBottom },\n 'filter backing edge arithmetic overflowed',\n );\n }\n const left = Math.floor(scaledLeft);\n const top = Math.floor(scaledTop);\n const right = Math.ceil(scaledRight);\n const bottom = Math.ceil(scaledBottom);\n assertPixelEdges(left, top, right, bottom);\n return {\n x: left,\n y: top,\n width: right - left,\n height: bottom - top,\n };\n}\n\nfunction createWindow(\n pixels: Readonly<PixelBounds>,\n density: number,\n): FilterPixelWindow | undefined {\n const inverseDensity = 1 / density;\n const logicalBounds = {\n x: pixels.x / density,\n y: pixels.y / density,\n width: pixels.width / density,\n height: pixels.height / density,\n };\n const inverseOriginX = pixels.x / density;\n const inverseOriginY = pixels.y / density;\n if (\n !Number.isFinite(inverseDensity) ||\n inverseDensity <= 0 ||\n !Object.values(logicalBounds).every(Number.isFinite) ||\n !Number.isFinite(inverseOriginX) ||\n !Number.isFinite(inverseOriginY)\n ) {\n return undefined;\n }\n const renderTransform = new DOMMatrix([\n density,\n 0,\n 0,\n density,\n -pixels.x,\n -pixels.y,\n ]);\n const inverseRenderTransform = new DOMMatrix([\n inverseDensity,\n 0,\n 0,\n inverseDensity,\n inverseOriginX,\n inverseOriginY,\n ]);\n if (\n !isFiniteAffine(renderTransform) ||\n !isFiniteAffine(inverseRenderTransform)\n ) {\n return undefined;\n }\n return {\n logicalBounds: Object.freeze(logicalBounds),\n backingX: pixels.x,\n backingY: pixels.y,\n backingWidth: pixels.width,\n backingHeight: pixels.height,\n renderTransform,\n inverseRenderTransform,\n };\n}\n\nfunction assertPixelEdges(\n left: number,\n top: number,\n right: number,\n bottom: number,\n): void {\n const edges = { left, top, right, bottom };\n if (!Object.values(edges).every(Number.isSafeInteger)) {\n throw filterRegionError(\n edges,\n 'filter backing edges must remain finite safe integers',\n );\n }\n const width = right - left;\n const height = bottom - top;\n if (!Number.isSafeInteger(width) || !Number.isSafeInteger(height)) {\n throw filterRegionError(\n { width, height },\n 'filter backing dimensions must remain finite safe integers',\n );\n }\n}\n\nfunction assertCanvasPixelBounds(bounds: Readonly<PixelBounds>): void {\n const { width, height } = bounds;\n if (\n !Number.isSafeInteger(width) ||\n !Number.isSafeInteger(height) ||\n width <= 0 ||\n height <= 0 ||\n width > MAX_UNSIGNED_LONG ||\n height > MAX_UNSIGNED_LONG\n ) {\n throw filterRegionError(\n { width, height },\n `filter backing dimensions must be positive unsigned-long integers no greater than ${MAX_UNSIGNED_LONG}`,\n );\n }\n const area = width * height;\n if (!Number.isSafeInteger(area)) {\n throw filterRegionError(\n area,\n 'filter backing area must remain a finite safe integer',\n );\n }\n}\n\nfunction isFiniteAffine(matrix: DOMMatrixReadOnly): boolean {\n return matrix.is2D && [\n matrix.a,\n matrix.b,\n matrix.c,\n matrix.d,\n matrix.e,\n matrix.f,\n ].every(Number.isFinite);\n}\n\nfunction filterRegionError(value: unknown, reason: string): Error {\n const type = GLOBAL_STATE.componentRefs?.element.type;\n const component = typeof type === 'function' && type.name ?\n type.name : 'filter boundary';\n return layoutDiagnostic({\n component,\n property: 'filter.backingDimensions',\n value,\n algorithm: 'filter-capture',\n reason,\n });\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import { GLOBAL_STATE } from '../global-state.js';\nimport type { LayoutBox } from '../layout/types.js';\nimport type { RenderTargetSnapshot } from '../render-target.js';\nimport { layoutDiagnostic } from '../style/diagnostics.js';\nimport type { NativePreparedFilter } from '../../filters/native-operations.js';\n\nexport const BLUR_EXTENT_FACTOR = (3 * Math.sqrt(2 * Math.PI)) / 4;\n\nconst MAX_UNSIGNED_LONG = 0xffff_ffff;\n\nexport interface PixelBounds {\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n}\n\nexport interface FilterPixelWindow {\n readonly logicalBounds: Readonly<LayoutBox>;\n readonly backingX: number;\n readonly backingY: number;\n readonly backingWidth: number;\n readonly backingHeight: number;\n readonly renderTransform: DOMMatrix;\n readonly inverseRenderTransform: DOMMatrix;\n}\n\nexport interface FilterWindows {\n readonly source: FilterPixelWindow;\n readonly output: FilterPixelWindow;\n readonly density: number;\n readonly sourceToOutputX: number;\n readonly sourceToOutputY: number;\n}\n\nexport function reverseFilterInfluence(\n output: Readonly<PixelBounds>,\n filters: { readonly values: readonly NativePreparedFilter[] },\n density: number,\n): PixelBounds {\n let left = output.x;\n let top = output.y;\n let right = output.x + output.width;\n let bottom = output.y + output.height;\n assertPixelEdges(left, top, right, bottom);\n\n for (let index = filters.values.length - 1; index >= 0; index -= 1) {\n const filter = filters.values[index]!;\n const influenced = filter.reverseInfluence({\n x: left,\n y: top,\n width: right - left,\n height: bottom - top,\n }, density);\n left = influenced.x;\n top = influenced.y;\n right = influenced.x + influenced.width;\n bottom = influenced.y + influenced.height;\n assertPixelEdges(left, top, right, bottom);\n }\n\n return {\n x: left,\n y: top,\n width: right - left,\n height: bottom - top,\n };\n}\n\nexport function largestAffineScale(matrix: DOMMatrixReadOnly): number {\n const { a, b, c, d } = matrix;\n const coefficientScale = Math.max(\n Math.abs(a),\n Math.abs(b),\n Math.abs(c),\n Math.abs(d),\n );\n if (coefficientScale === 0) return 0;\n if (!Number.isFinite(coefficientScale)) return Number.NaN;\n\n const normalizedA = a / coefficientScale;\n const normalizedB = b / coefficientScale;\n const normalizedC = c / coefficientScale;\n const normalizedD = d / coefficientScale;\n const sumOfSquares =\n normalizedA * normalizedA + normalizedB * normalizedB +\n normalizedC * normalizedC + normalizedD * normalizedD;\n const determinant =\n normalizedA * normalizedD - normalizedB * normalizedC;\n const discriminant = Math.max(\n 0,\n sumOfSquares * sumOfSquares - 4 * determinant * determinant,\n );\n return coefficientScale *\n Math.sqrt((sumOfSquares + Math.sqrt(discriminant)) / 2);\n}\n\nexport function resolveFilterWindows(\n parentTarget: RenderTargetSnapshot,\n parentPaintTransform: DOMMatrixReadOnly,\n filters: { readonly values: readonly NativePreparedFilter[] },\n): FilterWindows | 'discard' {\n if (!isFiniteAffine(parentPaintTransform)) return 'discard';\n const inverseProject = createInverseProjector(parentPaintTransform);\n if (!inverseProject) return 'discard';\n\n const localToParentBacking = parentTarget.renderTransform.multiply(\n parentPaintTransform,\n );\n if (!isFiniteAffine(localToParentBacking)) return 'discard';\n const density = largestAffineScale(localToParentBacking);\n if (!Number.isFinite(density) || density <= 0) return 'discard';\n\n const projected = projectBounds(parentTarget.logicalBounds, inverseProject);\n if (!projected) return 'discard';\n const outputPixels = snapToBackingPixels(projected, density);\n const sourcePixels = reverseFilterInfluence(outputPixels, filters, density);\n assertCanvasPixelBounds(outputPixels);\n assertCanvasPixelBounds(sourcePixels);\n\n const output = createWindow(outputPixels, density);\n const source = createWindow(sourcePixels, density);\n if (!output || !source) return 'discard';\n return {\n source,\n output,\n density,\n sourceToOutputX: source.backingX - output.backingX,\n sourceToOutputY: source.backingY - output.backingY,\n };\n}\n\nfunction projectBounds(\n bounds: Readonly<LayoutBox>,\n inverseProject: InverseProjector,\n): LayoutBox | undefined {\n const right = bounds.x + bounds.width;\n const bottom = bounds.y + bounds.height;\n if (!(Number.isFinite(bounds.x) && Number.isFinite(bounds.y) && Number.isFinite(right) && Number.isFinite(bottom))) {\n return undefined;\n }\n\n const points = [\n inverseProject(bounds.x, bounds.y),\n inverseProject(right, bounds.y),\n inverseProject(bounds.x, bottom),\n inverseProject(right, bottom),\n ];\n if (points.some(point => !point)) return undefined;\n const projectedPoints = points as readonly ProjectedPoint[];\n if (projectedPoints.some(\n point => !Number.isFinite(point.x) || !Number.isFinite(point.y),\n )) {\n return undefined;\n }\n const xs = projectedPoints.map(point => point.x);\n const ys = projectedPoints.map(point => point.y);\n const left = Math.min(...xs);\n const top = Math.min(...ys);\n const projectedRight = Math.max(...xs);\n const projectedBottom = Math.max(...ys);\n return {\n x: left,\n y: top,\n width: projectedRight - left,\n height: projectedBottom - top,\n };\n}\n\ninterface ProjectedPoint {\n readonly x: number;\n readonly y: number;\n}\n\ntype InverseProjector = (\n parentX: number,\n parentY: number,\n) => ProjectedPoint | undefined;\n\nfunction createInverseProjector(\n matrix: DOMMatrixReadOnly,\n): InverseProjector | undefined {\n const { a, b, c, d, e, f } = matrix;\n const firstRowScale = Math.max(Math.abs(a), Math.abs(c));\n const secondRowScale = Math.max(Math.abs(b), Math.abs(d));\n if (firstRowScale === 0 || secondRowScale === 0) return undefined;\n\n const rowA = a / firstRowScale;\n const rowB = b / secondRowScale;\n const rowC = c / firstRowScale;\n const rowD = d / secondRowScale;\n const firstColumnScale = Math.max(Math.abs(rowA), Math.abs(rowB));\n const secondColumnScale = Math.max(Math.abs(rowC), Math.abs(rowD));\n if (firstColumnScale === 0 || secondColumnScale === 0) return undefined;\n\n const normalizedA = rowA / firstColumnScale;\n const normalizedB = rowB / firstColumnScale;\n const normalizedC = rowC / secondColumnScale;\n const normalizedD = rowD / secondColumnScale;\n if (Math.abs(normalizedA) >= Math.abs(normalizedB)) {\n if (normalizedA === 0) return undefined;\n const ratio = normalizedB / normalizedA;\n const schurComplement = normalizedD - ratio * normalizedC;\n if (schurComplement === 0 || !Number.isFinite(schurComplement)) {\n return undefined;\n }\n return (parentX, parentY) => {\n const rightX = scaledDifference(parentX, e, firstRowScale);\n const rightY = scaledDifference(parentY, f, secondRowScale);\n const normalizedY =\n (rightY - ratio * rightX) / schurComplement;\n const normalizedX =\n (rightX - normalizedC * normalizedY) / normalizedA;\n const x = normalizedX / firstColumnScale;\n const y = normalizedY / secondColumnScale;\n return Number.isFinite(x) && Number.isFinite(y) ? { x, y } : undefined;\n };\n }\n\n const ratio = normalizedA / normalizedB;\n const schurComplement = normalizedC - ratio * normalizedD;\n if (schurComplement === 0 || !Number.isFinite(schurComplement)) {\n return undefined;\n }\n return (parentX, parentY) => {\n const rightX = scaledDifference(parentX, e, firstRowScale);\n const rightY = scaledDifference(parentY, f, secondRowScale);\n const normalizedY = (rightX - ratio * rightY) / schurComplement;\n const normalizedX =\n (rightY - normalizedD * normalizedY) / normalizedB;\n const x = normalizedX / firstColumnScale;\n const y = normalizedY / secondColumnScale;\n return Number.isFinite(x) && Number.isFinite(y) ? { x, y } : undefined;\n };\n}\n\nfunction scaledDifference(\n value: number,\n offset: number,\n scale: number,\n): number {\n const difference = value - offset;\n if (Number.isFinite(difference)) return difference / scale;\n return value / scale - offset / scale;\n}\n\nfunction snapToBackingPixels(\n bounds: Readonly<LayoutBox>,\n density: number,\n): PixelBounds {\n const scaledLeft = bounds.x * density;\n const scaledTop = bounds.y * density;\n const scaledRight = (bounds.x + bounds.width) * density;\n const scaledBottom = (bounds.y + bounds.height) * density;\n if (!(\n Number.isFinite(scaledLeft) &&\n Number.isFinite(scaledTop) &&\n Number.isFinite(scaledRight) &&\n Number.isFinite(scaledBottom)\n )) {\n throw filterRegionError(\n { scaledLeft, scaledTop, scaledRight, scaledBottom },\n 'filter backing edge arithmetic overflowed',\n );\n }\n const left = Math.floor(scaledLeft);\n const top = Math.floor(scaledTop);\n const right = Math.ceil(scaledRight);\n const bottom = Math.ceil(scaledBottom);\n assertPixelEdges(left, top, right, bottom);\n return {\n x: left,\n y: top,\n width: right - left,\n height: bottom - top,\n };\n}\n\nfunction createWindow(\n pixels: Readonly<PixelBounds>,\n density: number,\n): FilterPixelWindow | undefined {\n const inverseDensity = 1 / density;\n const logicalBounds = {\n x: pixels.x / density,\n y: pixels.y / density,\n width: pixels.width / density,\n height: pixels.height / density,\n };\n const inverseOriginX = pixels.x / density;\n const inverseOriginY = pixels.y / density;\n if (\n !Number.isFinite(inverseDensity) ||\n inverseDensity <= 0 ||\n !Object.values(logicalBounds).every(Number.isFinite) ||\n !Number.isFinite(inverseOriginX) ||\n !Number.isFinite(inverseOriginY)\n ) {\n return undefined;\n }\n const renderTransform = new DOMMatrix([\n density,\n 0,\n 0,\n density,\n -pixels.x,\n -pixels.y,\n ]);\n const inverseRenderTransform = new DOMMatrix([\n inverseDensity,\n 0,\n 0,\n inverseDensity,\n inverseOriginX,\n inverseOriginY,\n ]);\n if (\n !isFiniteAffine(renderTransform) ||\n !isFiniteAffine(inverseRenderTransform)\n ) {\n return undefined;\n }\n return {\n logicalBounds: Object.freeze(logicalBounds),\n backingX: pixels.x,\n backingY: pixels.y,\n backingWidth: pixels.width,\n backingHeight: pixels.height,\n renderTransform,\n inverseRenderTransform,\n };\n}\n\nfunction assertPixelEdges(\n left: number,\n top: number,\n right: number,\n bottom: number,\n): void {\n const edges = { left, top, right, bottom };\n if (!Object.values(edges).every(Number.isSafeInteger)) {\n throw filterRegionError(\n edges,\n 'filter backing edges must remain finite safe integers',\n );\n }\n const width = right - left;\n const height = bottom - top;\n if (!Number.isSafeInteger(width) || !Number.isSafeInteger(height)) {\n throw filterRegionError(\n { width, height },\n 'filter backing dimensions must remain finite safe integers',\n );\n }\n}\n\nfunction assertCanvasPixelBounds(bounds: Readonly<PixelBounds>): void {\n const { width, height } = bounds;\n if (\n !Number.isSafeInteger(width) ||\n !Number.isSafeInteger(height) ||\n width <= 0 ||\n height <= 0 ||\n width > MAX_UNSIGNED_LONG ||\n height > MAX_UNSIGNED_LONG\n ) {\n throw filterRegionError(\n { width, height },\n `filter backing dimensions must be positive unsigned-long integers no greater than ${MAX_UNSIGNED_LONG}`,\n );\n }\n const area = width * height;\n if (!Number.isSafeInteger(area)) {\n throw filterRegionError(\n area,\n 'filter backing area must remain a finite safe integer',\n );\n }\n}\n\nfunction isFiniteAffine(matrix: DOMMatrixReadOnly): boolean {\n return (\n matrix.is2D &&\n Number.isFinite(matrix.a) &&\n Number.isFinite(matrix.b) &&\n Number.isFinite(matrix.c) &&\n Number.isFinite(matrix.d) &&\n Number.isFinite(matrix.e) &&\n Number.isFinite(matrix.f)\n );\n}\n\nfunction filterRegionError(value: unknown, reason: string): Error {\n const type = GLOBAL_STATE.componentRefs?.element.type;\n const component = typeof type === 'function' && type.name ?\n type.name : 'filter boundary';\n return layoutDiagnostic({\n component,\n property: 'filter.backingDimensions',\n value,\n algorithm: 'filter-capture',\n reason,\n });\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["ratio", "schurComplement"]
|
|
7
7
|
}
|
|
@@ -10,6 +10,7 @@ export declare class PibblFocusManager implements PibblFocusPolicyBridge {
|
|
|
10
10
|
private committedNavigationCandidates;
|
|
11
11
|
private committedBoundaries;
|
|
12
12
|
private pending;
|
|
13
|
+
private retainedNavigationTransaction;
|
|
13
14
|
private transactionalPending;
|
|
14
15
|
private directionalStack;
|
|
15
16
|
private focusedTarget;
|
|
@@ -47,6 +48,7 @@ export declare class PibblFocusManager implements PibblFocusPolicyBridge {
|
|
|
47
48
|
beginCollection(): void;
|
|
48
49
|
finishCollection(success: boolean): void;
|
|
49
50
|
private commitCollection;
|
|
51
|
+
private prepareCollection;
|
|
50
52
|
observeTarget(target: PibblEventTargetRegistration): void;
|
|
51
53
|
/** @internal Collects one published HtmlBox in source order. */
|
|
52
54
|
observeHtmlRegion(region: HtmlFocusRegion): void;
|
|
@@ -54,7 +56,7 @@ export declare class PibblFocusManager implements PibblFocusPolicyBridge {
|
|
|
54
56
|
removeHtmlFocusRegion(region: HtmlFocusRegion): void;
|
|
55
57
|
/** @internal Deactivates retained DOM hosts while the root has no display area. */
|
|
56
58
|
suspendHtmlRegions(): void;
|
|
57
|
-
observeTransactionalTarget(target: PibblEventTargetRegistration): void;
|
|
59
|
+
observeTransactionalTarget(target: PibblEventTargetRegistration, preparedFocusable?: boolean): void;
|
|
58
60
|
removeTarget(target: PibblEventTargetRegistration): void;
|
|
59
61
|
snapshot(target: PibblEventTargetRegistration): Readonly<{
|
|
60
62
|
isFocused: false;
|
|
@@ -82,6 +84,8 @@ export declare class PibblFocusManager implements PibblFocusPolicyBridge {
|
|
|
82
84
|
layerFocusRenderRevision(instance: PibblInstance): number | undefined;
|
|
83
85
|
private replayRetainedTargets;
|
|
84
86
|
private replayCanvasOnlyTargets;
|
|
87
|
+
/** A clean inner manager still joins its parent root's geometry adoption. */
|
|
88
|
+
private stageRetainedNavigation;
|
|
85
89
|
setFocusState(target: PibblEventTargetRegistration | undefined, focusVisible: boolean): void;
|
|
86
90
|
liveFocusCandidate(target: PibblEventTargetRegistration | undefined): PibblEventTargetRegistration | undefined;
|
|
87
91
|
commitLogicalFocus(target: PibblEventTargetRegistration | undefined, focusVisible: boolean): void;
|
|
@@ -96,6 +100,9 @@ export declare class PibblFocusManager implements PibblFocusPolicyBridge {
|
|
|
96
100
|
private markPendingIneligible;
|
|
97
101
|
private commitCandidates;
|
|
98
102
|
private commitNavigationCandidates;
|
|
103
|
+
private prepareNavigationCandidates;
|
|
104
|
+
private adoptNavigationCandidates;
|
|
105
|
+
private finishNavigationCandidates;
|
|
99
106
|
private commitRemovedTarget;
|
|
100
107
|
private clearFocusState;
|
|
101
108
|
private adoptHtmlFocus;
|