@pibbl/core 0.0.2 → 0.0.3-alpha.109.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/THIRD_PARTY_NOTICES.txt +81 -0
- package/dist/features/physics/2d-testing.d.ts +1 -1
- package/dist/features/physics/2d-testing.js +2 -2
- package/dist/features/physics/2d-testing.js.map +2 -2
- package/dist/features/physics/lib/2d/canvas/components.js +25 -21
- package/dist/features/physics/lib/2d/canvas/components.js.map +2 -2
- package/dist/features/physics/lib/2d/canvas/presentation.js +1 -2
- package/dist/features/physics/lib/2d/canvas/presentation.js.map +2 -2
- package/dist/features/physics/lib/2d/collision/casts.js +4 -2
- package/dist/features/physics/lib/2d/collision/casts.js.map +2 -2
- package/dist/features/physics/lib/2d/runtime/controller.js +1 -1
- package/dist/features/physics/lib/2d/runtime/controller.js.map +2 -2
- package/dist/features/physics/lib/2d/runtime/obstacles.js +9 -11
- package/dist/features/physics/lib/2d/runtime/obstacles.js.map +2 -2
- package/dist/features/physics/lib/2d/shapes.js +8 -9
- package/dist/features/physics/lib/2d/shapes.js.map +2 -2
- package/dist/features/physics/lib/2d/world/rapier.js +22 -26
- package/dist/features/physics/lib/2d/world/rapier.js.map +2 -2
- package/dist/features/sprites/loader.js +6 -3
- package/dist/features/sprites/loader.js.map +2 -2
- package/dist/features/textures/index.d.ts +12 -2
- package/dist/features/textures/index.js +33 -1
- package/dist/features/textures/index.js.map +2 -2
- package/dist/features/textures/lib/chemical-field.d.ts +56 -0
- package/dist/features/textures/lib/chemical-field.js +154 -0
- package/dist/features/textures/lib/chemical-field.js.map +7 -0
- package/dist/features/textures/lib/chemical-recipes.d.ts +119 -0
- package/dist/features/textures/lib/chemical-recipes.js +275 -0
- package/dist/features/textures/lib/chemical-recipes.js.map +7 -0
- package/dist/features/textures/lib/definitions.d.ts +3 -18
- package/dist/features/textures/lib/definitions.js +17 -24
- package/dist/features/textures/lib/definitions.js.map +2 -2
- package/dist/features/textures/lib/geometric-patterns.d.ts +149 -0
- package/dist/features/textures/lib/geometric-patterns.js +305 -0
- package/dist/features/textures/lib/geometric-patterns.js.map +7 -0
- package/dist/features/textures/lib/gray-scott.d.ts +55 -0
- package/dist/features/textures/lib/gray-scott.js +37 -0
- package/dist/features/textures/lib/gray-scott.js.map +7 -0
- package/dist/features/textures/lib/palette.js +1 -3
- package/dist/features/textures/lib/palette.js.map +2 -2
- package/dist/features/textures/lib/patterns.d.ts +123 -0
- package/dist/features/textures/lib/patterns.js +344 -0
- package/dist/features/textures/lib/patterns.js.map +7 -0
- package/dist/features/textures/lib/rain-drops.js +2 -1
- package/dist/features/textures/lib/rain-drops.js.map +2 -2
- package/dist/features/textures/lib/reaction-diffusion.d.ts +3 -2
- package/dist/features/textures/lib/reaction-diffusion.js +9 -20
- package/dist/features/textures/lib/reaction-diffusion.js.map +2 -2
- package/dist/features/textures/lib/simulation.d.ts +10 -4
- package/dist/features/textures/lib/simulation.js +23 -13
- package/dist/features/textures/lib/simulation.js.map +2 -2
- package/dist/features/textures/lib/wasm/electric.js +8 -1
- package/dist/features/textures/lib/wasm/electric.js.map +2 -2
- package/dist/features/textures/lib/water-surface.js +1 -3
- package/dist/features/textures/lib/water-surface.js.map +2 -2
- package/dist/features/viz/index.d.ts +68 -6
- package/dist/features/viz/index.js +164 -2
- package/dist/features/viz/index.js.map +2 -2
- package/dist/features/viz/inspection/bar.d.ts +79 -0
- package/dist/features/viz/inspection/bar.js +49 -0
- package/dist/features/viz/inspection/bar.js.map +7 -0
- package/dist/features/viz/inspection/candle.d.ts +156 -0
- package/dist/features/viz/inspection/candle.js +120 -0
- package/dist/features/viz/inspection/candle.js.map +7 -0
- package/dist/features/viz/inspection/capture-types.d.ts +65 -0
- package/dist/features/viz/inspection/capture.d.ts +16 -0
- package/dist/features/viz/inspection/capture.js +49 -0
- package/dist/features/viz/inspection/capture.js.map +7 -0
- package/dist/features/viz/inspection/handler.d.ts +36 -0
- package/dist/features/viz/inspection/handler.js +91 -0
- package/dist/features/viz/inspection/handler.js.map +7 -0
- package/dist/features/viz/inspection/ohlc-bar.d.ts +132 -0
- package/dist/features/viz/inspection/ohlc-bar.js +118 -0
- package/dist/features/viz/inspection/ohlc-bar.js.map +7 -0
- package/dist/features/viz/inspection/owned-ref.d.ts +16 -0
- package/dist/features/viz/inspection/owned-ref.js +99 -0
- package/dist/features/viz/inspection/owned-ref.js.map +7 -0
- package/dist/features/viz/inspection/painted-point.d.ts +22 -0
- package/dist/features/viz/inspection/painted-point.js +29 -0
- package/dist/features/viz/inspection/painted-point.js.map +7 -0
- package/dist/features/viz/inspection/queries.d.ts +100 -0
- package/dist/features/viz/inspection/queries.js +192 -0
- package/dist/features/viz/inspection/queries.js.map +7 -0
- package/dist/features/viz/inspection/query-types.d.ts +177 -0
- package/dist/features/viz/inspection/volume.d.ts +104 -0
- package/dist/features/viz/inspection/volume.js +95 -0
- package/dist/features/viz/inspection/volume.js.map +7 -0
- package/dist/features/viz/inspection.d.ts +19 -0
- package/dist/features/viz/inspection.js +54 -0
- package/dist/features/viz/inspection.js.map +7 -0
- package/dist/features/viz/inspection.mjs +1 -0
- package/dist/features/viz/lib/area-series.d.ts +62 -0
- package/dist/features/viz/lib/area-series.js +120 -0
- package/dist/features/viz/lib/area-series.js.map +7 -0
- package/dist/features/viz/lib/axis-title.js +2 -1
- package/dist/features/viz/lib/axis-title.js.map +2 -2
- package/dist/features/viz/lib/axis.js +1 -1
- package/dist/features/viz/lib/axis.js.map +2 -2
- package/dist/features/viz/lib/bar-series.d.ts +3 -1
- package/dist/features/viz/lib/bar-series.js +16 -1
- package/dist/features/viz/lib/bar-series.js.map +2 -2
- package/dist/features/viz/lib/baseline-series.d.ts +55 -0
- package/dist/features/viz/lib/baseline-series.js +136 -0
- package/dist/features/viz/lib/baseline-series.js.map +7 -0
- package/dist/features/viz/lib/candlestick-series.d.ts +62 -0
- package/dist/features/viz/lib/candlestick-series.js +150 -0
- package/dist/features/viz/lib/candlestick-series.js.map +7 -0
- package/dist/features/viz/lib/censored-point-series.d.ts +71 -0
- package/dist/features/viz/lib/censored-point-series.js +129 -0
- package/dist/features/viz/lib/censored-point-series.js.map +7 -0
- package/dist/features/viz/lib/color-context.d.ts +4 -0
- package/dist/features/viz/lib/color-context.js +41 -0
- package/dist/features/viz/lib/color-context.js.map +7 -0
- package/dist/features/viz/lib/color-math.d.ts +4 -0
- package/dist/features/viz/lib/color-math.js +31 -0
- package/dist/features/viz/lib/color-math.js.map +7 -0
- package/dist/features/viz/lib/color-types.d.ts +53 -0
- package/dist/features/viz/lib/curve-definition.d.ts +49 -0
- package/dist/features/viz/lib/curve-definition.js +142 -0
- package/dist/features/viz/lib/curve-definition.js.map +7 -0
- package/dist/features/viz/lib/diverging-color-scale.d.ts +11 -0
- package/dist/features/viz/lib/diverging-color-scale.js +51 -0
- package/dist/features/viz/lib/diverging-color-scale.js.map +7 -0
- package/dist/features/viz/lib/domain-navigation.d.ts +40 -0
- package/dist/features/viz/lib/domain-navigation.js +77 -0
- package/dist/features/viz/lib/domain-navigation.js.map +7 -0
- package/dist/features/viz/lib/editable-chart-elements.d.ts +178 -0
- package/dist/features/viz/lib/editable-chart-elements.js +733 -0
- package/dist/features/viz/lib/editable-chart-elements.js.map +7 -0
- package/dist/features/viz/lib/financial-aggregation.d.ts +127 -0
- package/dist/features/viz/lib/financial-aggregation.js +116 -0
- package/dist/features/viz/lib/financial-aggregation.js.map +7 -0
- package/dist/features/viz/lib/financial-autoscale.d.ts +64 -0
- package/dist/features/viz/lib/financial-autoscale.js +61 -0
- package/dist/features/viz/lib/financial-autoscale.js.map +7 -0
- package/dist/features/viz/lib/financial-comparison.d.ts +62 -0
- package/dist/features/viz/lib/financial-comparison.js +98 -0
- package/dist/features/viz/lib/financial-comparison.js.map +7 -0
- package/dist/features/viz/lib/financial-geometry.d.ts +77 -0
- package/dist/features/viz/lib/financial-geometry.js +67 -0
- package/dist/features/viz/lib/financial-geometry.js.map +7 -0
- package/dist/features/viz/lib/financial-indicators.d.ts +114 -0
- package/dist/features/viz/lib/financial-indicators.js +135 -0
- package/dist/features/viz/lib/financial-indicators.js.map +7 -0
- package/dist/features/viz/lib/financial-oscillators.d.ts +171 -0
- package/dist/features/viz/lib/financial-oscillators.js +265 -0
- package/dist/features/viz/lib/financial-oscillators.js.map +7 -0
- package/dist/features/viz/lib/graph/bipartite.d.ts +14 -0
- package/dist/features/viz/lib/graph/bipartite.js +250 -0
- package/dist/features/viz/lib/graph/bipartite.js.map +7 -0
- package/dist/features/viz/lib/graph/chord.d.ts +44 -0
- package/dist/features/viz/lib/graph/chord.js +348 -0
- package/dist/features/viz/lib/graph/chord.js.map +7 -0
- package/dist/features/viz/lib/graph/dependency.d.ts +26 -0
- package/dist/features/viz/lib/graph/dependency.js +140 -0
- package/dist/features/viz/lib/graph/dependency.js.map +7 -0
- package/dist/features/viz/lib/graph/force.d.ts +28 -0
- package/dist/features/viz/lib/graph/force.js +580 -0
- package/dist/features/viz/lib/graph/force.js.map +7 -0
- package/dist/features/viz/lib/graph/hierarchy.d.ts +21 -0
- package/dist/features/viz/lib/graph/hierarchy.js +112 -0
- package/dist/features/viz/lib/graph/hierarchy.js.map +7 -0
- package/dist/features/viz/lib/graph/icicle.d.ts +16 -0
- package/dist/features/viz/lib/graph/icicle.js +153 -0
- package/dist/features/viz/lib/graph/icicle.js.map +7 -0
- package/dist/features/viz/lib/graph/matrix.d.ts +30 -0
- package/dist/features/viz/lib/graph/matrix.js +243 -0
- package/dist/features/viz/lib/graph/matrix.js.map +7 -0
- package/dist/features/viz/lib/graph/neighborhood.d.ts +11 -0
- package/dist/features/viz/lib/graph/neighborhood.js +281 -0
- package/dist/features/viz/lib/graph/neighborhood.js.map +7 -0
- package/dist/features/viz/lib/graph/routes.d.ts +35 -0
- package/dist/features/viz/lib/graph/routes.js +101 -0
- package/dist/features/viz/lib/graph/routes.js.map +7 -0
- package/dist/features/viz/lib/graph/sankey.d.ts +44 -0
- package/dist/features/viz/lib/graph/sankey.js +341 -0
- package/dist/features/viz/lib/graph/sankey.js.map +7 -0
- package/dist/features/viz/lib/graph/shared.d.ts +59 -0
- package/dist/features/viz/lib/graph/shared.js +301 -0
- package/dist/features/viz/lib/graph/shared.js.map +7 -0
- package/dist/features/viz/lib/graph/tree.d.ts +11 -0
- package/dist/features/viz/lib/graph/tree.js +232 -0
- package/dist/features/viz/lib/graph/tree.js.map +7 -0
- package/dist/features/viz/lib/graph/treemap.d.ts +20 -0
- package/dist/features/viz/lib/graph/treemap.js +227 -0
- package/dist/features/viz/lib/graph/treemap.js.map +7 -0
- package/dist/features/viz/lib/graph/types.d.ts +1097 -0
- package/dist/features/viz/lib/hover-card.js +8 -9
- package/dist/features/viz/lib/hover-card.js.map +2 -2
- package/dist/features/viz/lib/hover-data.d.ts +1 -1
- package/dist/features/viz/lib/hover-data.js +5 -2
- package/dist/features/viz/lib/hover-data.js.map +2 -2
- package/dist/features/viz/lib/interval-band-series.d.ts +49 -0
- package/dist/features/viz/lib/interval-band-series.js +136 -0
- package/dist/features/viz/lib/interval-band-series.js.map +7 -0
- package/dist/features/viz/lib/interval-diamond-series.d.ts +43 -0
- package/dist/features/viz/lib/interval-diamond-series.js +122 -0
- package/dist/features/viz/lib/interval-diamond-series.js.map +7 -0
- package/dist/features/viz/lib/interval-series.d.ts +79 -0
- package/dist/features/viz/lib/interval-series.js +158 -0
- package/dist/features/viz/lib/interval-series.js.map +7 -0
- package/dist/features/viz/lib/layout-pie.js +9 -13
- package/dist/features/viz/lib/layout-pie.js.map +2 -2
- package/dist/features/viz/lib/line-series.d.ts +1 -1
- package/dist/features/viz/lib/line-series.js +47 -28
- package/dist/features/viz/lib/line-series.js.map +2 -2
- package/dist/features/viz/lib/linear-scale.js +1 -1
- package/dist/features/viz/lib/linear-scale.js.map +2 -2
- package/dist/features/viz/lib/monotone-curve.d.ts +11 -0
- package/dist/features/viz/lib/monotone-curve.js +63 -0
- package/dist/features/viz/lib/monotone-curve.js.map +7 -0
- package/dist/features/viz/lib/numeric-range-interpolation.d.ts +15 -0
- package/dist/features/viz/lib/numeric-range-interpolation.js +36 -0
- package/dist/features/viz/lib/numeric-range-interpolation.js.map +7 -0
- package/dist/features/viz/lib/ohlc-bar-series.d.ts +55 -0
- package/dist/features/viz/lib/ohlc-bar-series.js +168 -0
- package/dist/features/viz/lib/ohlc-bar-series.js.map +7 -0
- package/dist/features/viz/lib/paired-series.d.ts +44 -0
- package/dist/features/viz/lib/paired-series.js +93 -0
- package/dist/features/viz/lib/paired-series.js.map +7 -0
- package/dist/features/viz/lib/pie-layout.js +2 -1
- package/dist/features/viz/lib/pie-layout.js.map +2 -2
- package/dist/features/viz/lib/plot-series.js +11 -6
- package/dist/features/viz/lib/plot-series.js.map +2 -2
- package/dist/features/viz/lib/plot-types.d.ts +4 -3
- package/dist/features/viz/lib/point-series.d.ts +1 -1
- package/dist/features/viz/lib/point-series.js +36 -9
- package/dist/features/viz/lib/point-series.js.map +2 -2
- package/dist/features/viz/lib/point-types.d.ts +5 -2
- package/dist/features/viz/lib/reference-band.js +4 -1
- package/dist/features/viz/lib/reference-band.js.map +2 -2
- package/dist/features/viz/lib/scale-context.d.ts +1 -1
- package/dist/features/viz/lib/scale-ticks.js +21 -6
- package/dist/features/viz/lib/scale-ticks.js.map +2 -2
- package/dist/features/viz/lib/sequential-color-scale.d.ts +11 -0
- package/dist/features/viz/lib/sequential-color-scale.js +49 -0
- package/dist/features/viz/lib/sequential-color-scale.js.map +7 -0
- package/dist/features/viz/lib/series-position.d.ts +12 -0
- package/dist/features/viz/lib/series-position.js +44 -0
- package/dist/features/viz/lib/series-position.js.map +7 -0
- package/dist/features/viz/lib/step-curves.d.ts +19 -0
- package/dist/features/viz/lib/step-curves.js +53 -0
- package/dist/features/viz/lib/step-curves.js.map +7 -0
- package/dist/features/viz/lib/threshold-color-scale.d.ts +43 -0
- package/dist/features/viz/lib/threshold-color-scale.js +59 -0
- package/dist/features/viz/lib/threshold-color-scale.js.map +7 -0
- package/dist/features/viz/lib/trading-time-mapping.d.ts +32 -0
- package/dist/features/viz/lib/trading-time-mapping.js +89 -0
- package/dist/features/viz/lib/trading-time-mapping.js.map +7 -0
- package/dist/features/viz/lib/trading-time-scale.d.ts +83 -0
- package/dist/features/viz/lib/trading-time-scale.js +96 -0
- package/dist/features/viz/lib/trading-time-scale.js.map +7 -0
- package/dist/features/viz/lib/trajectory-series.d.ts +71 -0
- package/dist/features/viz/lib/trajectory-series.js +111 -0
- package/dist/features/viz/lib/trajectory-series.js.map +7 -0
- package/dist/features/viz/lib/types.d.ts +20 -4
- package/dist/features/viz/lib/use-continuous-scale.js +6 -1
- package/dist/features/viz/lib/use-continuous-scale.js.map +2 -2
- package/dist/features/viz/lib/utc-scale.js +11 -10
- package/dist/features/viz/lib/utc-scale.js.map +2 -2
- package/dist/features/viz/lib/volume-series.d.ts +59 -0
- package/dist/features/viz/lib/volume-series.js +117 -0
- package/dist/features/viz/lib/volume-series.js.map +7 -0
- package/dist/features/viz/lib/weighted-point-series.d.ts +71 -0
- package/dist/features/viz/lib/weighted-point-series.js +169 -0
- package/dist/features/viz/lib/weighted-point-series.js.map +7 -0
- package/dist/filters/backdrop-contrast-gpu.d.ts +5 -0
- package/dist/filters/backdrop-contrast-gpu.js +33 -0
- package/dist/filters/backdrop-contrast-gpu.js.map +7 -0
- package/dist/filters/backdrop-contrast.d.ts +21 -0
- package/dist/filters/backdrop-contrast.js +61 -0
- package/dist/filters/backdrop-contrast.js.map +7 -0
- package/dist/filters/displacement.js +1 -1
- package/dist/filters/displacement.js.map +2 -2
- package/dist/filters/emboss-gpu.d.ts +4 -0
- package/dist/filters/emboss-gpu.js +39 -0
- package/dist/filters/emboss-gpu.js.map +7 -0
- package/dist/filters/emboss.d.ts +32 -0
- package/dist/filters/emboss.js +104 -0
- package/dist/filters/emboss.js.map +7 -0
- package/dist/filters/filter-executor.d.ts +11 -4
- package/dist/filters/filter-executor.js +104 -49
- package/dist/filters/filter-executor.js.map +2 -2
- package/dist/filters/reflected-light.js +1 -1
- package/dist/filters/reflected-light.js.map +2 -2
- package/dist/filters/reflection-gpu.d.ts +3 -1
- package/dist/filters/reflection-gpu.js +5 -2
- package/dist/filters/reflection-gpu.js.map +2 -2
- package/dist/filters/render-backdrop-contrast-boundary.d.ts +31 -0
- package/dist/filters/render-backdrop-contrast-boundary.js +116 -0
- package/dist/filters/render-backdrop-contrast-boundary.js.map +7 -0
- package/dist/filters/render-emboss-boundary.d.ts +13 -0
- package/dist/filters/render-emboss-boundary.js +131 -0
- package/dist/filters/render-emboss-boundary.js.map +7 -0
- package/dist/filters.d.ts +9 -5
- package/dist/filters.js +4 -0
- package/dist/filters.js.map +2 -2
- package/dist/index.d.ts +9 -5
- package/dist/index.js +18 -2
- package/dist/index.js.map +2 -2
- package/dist/internal.d.ts +4 -0
- package/dist/internal.js +6 -0
- package/dist/internal.js.map +2 -2
- package/dist/layout-kernel.d.ts +12 -0
- package/dist/layout-kernel.js +11 -0
- package/dist/layout-kernel.js.map +7 -0
- package/dist/layout-kernel.mjs +1 -0
- package/dist/lib/backend/types.d.ts +13 -1
- package/dist/lib/backend/types.js.map +2 -2
- package/dist/lib/components/arc-geometry.js +2 -1
- package/dist/lib/components/arc-geometry.js.map +2 -2
- package/dist/lib/components/g.js +2 -0
- package/dist/lib/components/g.js.map +2 -2
- package/dist/lib/components/html-box.js +2 -1
- package/dist/lib/components/html-box.js.map +2 -2
- package/dist/lib/components/img.js +3 -3
- package/dist/lib/components/img.js.map +2 -2
- package/dist/lib/components/layer.js +98 -16
- package/dist/lib/components/layer.js.map +3 -3
- package/dist/lib/components/text.d.ts +16 -0
- package/dist/lib/components/text.js +131 -24
- package/dist/lib/components/text.js.map +2 -2
- package/dist/lib/define-primitive.d.ts +4 -2
- package/dist/lib/define-primitive.js +3 -1
- package/dist/lib/define-primitive.js.map +2 -2
- package/dist/lib/element/metadata.d.ts +9 -0
- package/dist/lib/element/metadata.js +19 -0
- package/dist/lib/element/metadata.js.map +2 -2
- package/dist/lib/element/resolve-primitive-inputs.d.ts +2 -0
- package/dist/lib/element/resolve-primitive-inputs.js +17 -4
- package/dist/lib/element/resolve-primitive-inputs.js.map +2 -2
- package/dist/lib/events/event-facade.d.ts +18 -0
- package/dist/lib/events/event-facade.js +28 -2
- package/dist/lib/events/event-facade.js.map +2 -2
- package/dist/lib/events/hit-test.js +2 -1
- package/dist/lib/events/hit-test.js.map +2 -2
- package/dist/lib/events/propagation.d.ts +2 -1
- package/dist/lib/events/propagation.js +22 -16
- package/dist/lib/events/propagation.js.map +2 -2
- package/dist/lib/events/registrations.d.ts +10 -0
- package/dist/lib/events/registrations.js +160 -5
- package/dist/lib/events/registrations.js.map +2 -2
- package/dist/lib/execute-render.js +25 -1
- package/dist/lib/execute-render.js.map +2 -2
- package/dist/lib/filter/filter-region.js +3 -10
- package/dist/lib/filter/filter-region.js.map +2 -2
- package/dist/lib/focus/focus-manager.d.ts +8 -1
- package/dist/lib/focus/focus-manager.js +87 -43
- package/dist/lib/focus/focus-manager.js.map +2 -2
- package/dist/lib/focus/geometry.d.ts +2 -0
- package/dist/lib/focus/geometry.js +6 -0
- package/dist/lib/focus/geometry.js.map +2 -2
- package/dist/lib/geometry/path-bend-guide.js +1 -1
- package/dist/lib/geometry/path-bend-guide.js.map +2 -2
- package/dist/lib/geometry/path-geometry.js +12 -11
- package/dist/lib/geometry/path-geometry.js.map +2 -2
- package/dist/lib/geometry/path-transforms.js +17 -21
- package/dist/lib/geometry/path-transforms.js.map +2 -2
- package/dist/lib/geometry/path-warp-bezier.js +3 -1
- package/dist/lib/geometry/path-warp-bezier.js.map +2 -2
- package/dist/lib/geometry/path-warp.js +1 -1
- package/dist/lib/geometry/path-warp.js.map +2 -2
- package/dist/lib/global-state.js +2 -0
- package/dist/lib/global-state.js.map +2 -2
- package/dist/lib/html/html-events.d.ts +32 -0
- package/dist/lib/html/html-events.js +179 -0
- package/dist/lib/html/html-events.js.map +7 -0
- package/dist/lib/html/html-service.d.ts +8 -2
- package/dist/lib/html/html-service.js +198 -65
- package/dist/lib/html/html-service.js.map +2 -2
- package/dist/lib/html/overlay-config.js +7 -6
- package/dist/lib/html/overlay-config.js.map +2 -2
- package/dist/lib/html/types.d.ts +29 -2
- package/dist/lib/layout/absolute.d.ts +11 -5
- package/dist/lib/layout/absolute.js +329 -55
- package/dist/lib/layout/absolute.js.map +3 -3
- package/dist/lib/layout/allocation-checkpoint-owner.d.ts +11 -0
- package/dist/lib/layout/allocation-checkpoint-owner.js +86 -0
- package/dist/lib/layout/allocation-checkpoint-owner.js.map +7 -0
- package/dist/lib/layout/allocation-checkpoint.d.ts +53 -0
- package/dist/lib/layout/allocation-checkpoint.js +463 -0
- package/dist/lib/layout/allocation-checkpoint.js.map +7 -0
- package/dist/lib/layout/allocation-dependencies.d.ts +30 -0
- package/dist/lib/layout/allocation-dependencies.js +90 -0
- package/dist/lib/layout/allocation-dependencies.js.map +7 -0
- package/dist/lib/layout/allocation-revision.d.ts +13 -0
- package/dist/lib/layout/allocation-revision.js +67 -0
- package/dist/lib/layout/allocation-revision.js.map +7 -0
- package/dist/lib/layout/box-insets.d.ts +17 -0
- package/dist/lib/layout/box-insets.js +138 -0
- package/dist/lib/layout/box-insets.js.map +7 -0
- package/dist/lib/layout/box-sizing.d.ts +16 -0
- package/dist/lib/layout/box-sizing.js +77 -0
- package/dist/lib/layout/box-sizing.js.map +7 -0
- package/dist/lib/layout/box.js +42 -12
- package/dist/lib/layout/box.js.map +2 -2
- package/dist/lib/layout/canvas-measurement.d.ts +13 -0
- package/dist/lib/layout/canvas-measurement.js +57 -0
- package/dist/lib/layout/canvas-measurement.js.map +7 -0
- package/dist/lib/layout/context.d.ts +35 -6
- package/dist/lib/layout/context.js +72 -3
- package/dist/lib/layout/context.js.map +2 -2
- package/dist/lib/layout/define-layout-component.d.ts +23 -0
- package/dist/lib/layout/define-layout-component.js +84 -0
- package/dist/lib/layout/define-layout-component.js.map +7 -0
- package/dist/lib/layout/flex-allocation-cache.d.ts +42 -0
- package/dist/lib/layout/flex-baseline-mode.d.ts +2 -0
- package/dist/lib/layout/flex-baseline-mode.js +7 -0
- package/dist/lib/layout/flex-baseline-mode.js.map +7 -0
- package/dist/lib/layout/flex.d.ts +50 -15
- package/dist/lib/layout/flex.js +2124 -195
- package/dist/lib/layout/flex.js.map +3 -3
- package/dist/lib/layout/flow.js +225 -49
- package/dist/lib/layout/flow.js.map +2 -2
- package/dist/lib/layout/geometry-publication.d.ts +53 -0
- package/dist/lib/layout/geometry-publication.js +244 -0
- package/dist/lib/layout/geometry-publication.js.map +7 -0
- package/dist/lib/layout/grid-kernel.d.ts +63 -0
- package/dist/lib/layout/grid-kernel.js +168 -0
- package/dist/lib/layout/grid-kernel.js.map +7 -0
- package/dist/lib/layout/grid.d.ts +63 -4
- package/dist/lib/layout/grid.js +767 -171
- package/dist/lib/layout/grid.js.map +3 -3
- package/dist/lib/layout/measure.d.ts +55 -3
- package/dist/lib/layout/measure.js +448 -15
- package/dist/lib/layout/measure.js.map +2 -2
- package/dist/lib/layout/overlay.js +81 -23
- package/dist/lib/layout/overlay.js.map +2 -2
- package/dist/lib/layout/participation.d.ts +27 -0
- package/dist/lib/layout/participation.js +188 -0
- package/dist/lib/layout/participation.js.map +7 -0
- package/dist/lib/layout/place-child.js +1 -1
- package/dist/lib/layout/place-child.js.map +2 -2
- package/dist/lib/layout/positioning-diagnostics.d.ts +1 -1
- package/dist/lib/layout/positioning-diagnostics.js +13 -2
- package/dist/lib/layout/positioning-diagnostics.js.map +2 -2
- package/dist/lib/layout/prepared-root.d.ts +121 -0
- package/dist/lib/layout/prepared-root.js +360 -0
- package/dist/lib/layout/prepared-root.js.map +7 -0
- package/dist/lib/layout/standalone-kernel.d.ts +60 -0
- package/dist/lib/layout/standalone-kernel.js +722 -0
- package/dist/lib/layout/standalone-kernel.js.map +7 -0
- package/dist/lib/layout/topology.d.ts +21 -0
- package/dist/lib/layout/topology.js +113 -0
- package/dist/lib/layout/topology.js.map +7 -0
- package/dist/lib/layout/types.d.ts +5 -0
- package/dist/lib/layout/wasm/artifact.d.ts +1 -0
- package/dist/lib/layout/wasm/artifact.js +5 -0
- package/dist/lib/layout/wasm/artifact.js.map +7 -0
- package/dist/lib/layout/wasm/bytes.d.ts +1 -0
- package/dist/lib/layout/wasm/bytes.js +5 -0
- package/dist/lib/layout/wasm/bytes.js.map +7 -0
- package/dist/lib/layout/wasm/embedded.d.ts +2 -0
- package/dist/lib/layout/wasm/embedded.js +12 -0
- package/dist/lib/layout/wasm/embedded.js.map +7 -0
- package/dist/lib/layout/wasm/layout.wasm +0 -0
- package/dist/lib/layout/wasm/module.d.ts +8 -0
- package/dist/lib/layout/wasm/module.js +70 -0
- package/dist/lib/layout/wasm/module.js.map +7 -0
- package/dist/lib/layout/wasm/region.d.ts +267 -0
- package/dist/lib/layout/wasm/region.js +1018 -0
- package/dist/lib/layout/wasm/region.js.map +7 -0
- package/dist/lib/manipulation/controller.js +4 -7
- package/dist/lib/manipulation/controller.js.map +2 -2
- package/dist/lib/manipulation/frame.js +1 -1
- package/dist/lib/manipulation/frame.js.map +2 -2
- package/dist/lib/manipulation/handles.js +32 -33
- package/dist/lib/manipulation/handles.js.map +2 -2
- package/dist/lib/manipulation/solve.js +12 -10
- package/dist/lib/manipulation/solve.js.map +2 -2
- package/dist/lib/mount-pibbl.js +1 -0
- package/dist/lib/mount-pibbl.js.map +2 -2
- package/dist/lib/mount-prepared-pibbl.d.ts +5 -0
- package/dist/lib/mount-prepared-pibbl.js +29 -0
- package/dist/lib/mount-prepared-pibbl.js.map +7 -0
- package/dist/lib/mount-request.d.ts +8 -0
- package/dist/lib/mount-request.js +41 -0
- package/dist/lib/mount-request.js.map +7 -0
- package/dist/lib/pibbl.d.ts +21 -13
- package/dist/lib/pibbl.js +18 -16
- package/dist/lib/pibbl.js.map +2 -2
- package/dist/lib/recording/recording.d.ts +43 -0
- package/dist/lib/recording/recording.js +555 -0
- package/dist/lib/recording/recording.js.map +7 -0
- package/dist/lib/recording/types.d.ts +118 -0
- package/dist/lib/recording/wasm-bytes.d.ts +1 -0
- package/dist/lib/recording/wasm-bytes.js +5 -0
- package/dist/lib/recording/wasm-bytes.js.map +7 -0
- package/dist/lib/recording/worker-source.d.ts +1 -0
- package/dist/lib/recording/worker-source.js +5 -0
- package/dist/lib/recording/worker-source.js.map +7 -0
- package/dist/lib/render-layer/controller.d.ts +9 -3
- package/dist/lib/render-layer/controller.js +259 -110
- package/dist/lib/render-layer/controller.js.map +2 -2
- package/dist/lib/render-transaction.d.ts +12 -2
- package/dist/lib/render-transaction.js +69 -1
- package/dist/lib/render-transaction.js.map +2 -2
- package/dist/lib/render.js +32 -8
- package/dist/lib/render.js.map +2 -2
- package/dist/lib/scheduler/realm-scheduler.d.ts +2 -0
- package/dist/lib/scheduler/realm-scheduler.js +55 -26
- package/dist/lib/scheduler/realm-scheduler.js.map +2 -2
- package/dist/lib/scheduler/renderer-participant.js +1 -0
- package/dist/lib/scheduler/renderer-participant.js.map +2 -2
- package/dist/lib/series-inspection-frame.d.ts +18 -0
- package/dist/lib/series-inspection-frame.js +70 -0
- package/dist/lib/series-inspection-frame.js.map +7 -0
- package/dist/lib/signals/edge.d.ts +7 -4
- package/dist/lib/signals/edge.js +25 -3
- package/dist/lib/signals/edge.js.map +2 -2
- package/dist/lib/signals/graph.d.ts +16 -2
- package/dist/lib/signals/graph.js +54 -12
- package/dist/lib/signals/graph.js.map +2 -2
- package/dist/lib/signals/input-provision.d.ts +15 -0
- package/dist/lib/signals/input-provision.js +53 -3
- package/dist/lib/signals/input-provision.js.map +2 -2
- package/dist/lib/signals/render-consumer.d.ts +3 -0
- package/dist/lib/signals/render-consumer.js +22 -14
- package/dist/lib/signals/render-consumer.js.map +2 -2
- package/dist/lib/style/positioning.d.ts +50 -2
- package/dist/lib/style/positioning.js +28 -4
- package/dist/lib/style/positioning.js.map +2 -2
- package/dist/lib/style/resolve-built-in.d.ts +4 -3
- package/dist/lib/style/resolve-built-in.js +17 -3
- package/dist/lib/style/resolve-built-in.js.map +2 -2
- package/dist/lib/style/resolve-dispatch.d.ts +3 -0
- package/dist/lib/style/resolve-dispatch.js +77 -4
- package/dist/lib/style/resolve-dispatch.js.map +2 -2
- package/dist/lib/style/resolve-length.d.ts +2 -0
- package/dist/lib/style/resolve-length.js +13 -9
- package/dist/lib/style/resolve-length.js.map +2 -2
- package/dist/lib/style/sizing-length.d.ts +51 -0
- package/dist/lib/style/sizing-length.js +77 -0
- package/dist/lib/style/sizing-length.js.map +7 -0
- package/dist/lib/style/types.d.ts +63 -25
- package/dist/lib/surface/root-surface.js +10 -6
- package/dist/lib/surface/root-surface.js.map +2 -2
- package/dist/lib/textures/texture.js +10 -8
- package/dist/lib/textures/texture.js.map +2 -2
- package/dist/lib/transitions/capture.js +4 -1
- package/dist/lib/transitions/capture.js.map +2 -2
- package/dist/lib/transitions/embers-physics.js +17 -10
- package/dist/lib/transitions/embers-physics.js.map +2 -2
- package/dist/lib/types.d.ts +110 -1
- package/dist/sync.d.ts +16 -0
- package/dist/sync.js +13 -0
- package/dist/sync.js.map +7 -0
- package/dist/sync.mjs +1 -0
- package/package.json +26 -3
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/lib/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;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { preparedLayoutHtmlGeometry, preparedLayoutTargetBounds } from "../layout/geometry-publication.js";
|
|
1
2
|
import { GLOBAL_STATE } from "../global-state.js";
|
|
2
3
|
import { Teardowns } from "../teardowns.js";
|
|
3
4
|
import { resolveTargetRootBounds } from "./geometry.js";
|
|
@@ -14,6 +15,7 @@ import {
|
|
|
14
15
|
isHtmlFocusCandidate
|
|
15
16
|
} from "./types.js";
|
|
16
17
|
import { getManagedTabStops } from "./dom-tab-stops.js";
|
|
18
|
+
const EMPTY_NAVIGATION = Object.freeze([]);
|
|
17
19
|
const UNFOCUSED_SNAPSHOT = Object.freeze({
|
|
18
20
|
isFocused: false,
|
|
19
21
|
isFocusVisible: false
|
|
@@ -133,10 +135,10 @@ class FocusManagerCoordinator {
|
|
|
133
135
|
restored: void 0
|
|
134
136
|
};
|
|
135
137
|
this.transactions.set(transaction, state);
|
|
136
|
-
transaction.onFinish((success) => this.finishTransaction(state, success));
|
|
138
|
+
transaction.onFinish((success) => this.finishTransaction(state, success, transaction.failed === false));
|
|
137
139
|
return state;
|
|
138
140
|
}
|
|
139
|
-
finishTransaction(state, success) {
|
|
141
|
+
finishTransaction(state, success, cancelled = false) {
|
|
140
142
|
if (state.finished) return;
|
|
141
143
|
state.finished = true;
|
|
142
144
|
if (success) {
|
|
@@ -155,7 +157,7 @@ class FocusManagerCoordinator {
|
|
|
155
157
|
return;
|
|
156
158
|
}
|
|
157
159
|
const attemptedReplacement = state.claimed && state.claimed !== state.prior || state.prepared && state.prepared !== state.prior;
|
|
158
|
-
const restored = state.prior && attemptedReplacement && !state.prior.isDestroyed ? state.prior : void 0;
|
|
160
|
+
const restored = state.prior && (attemptedReplacement || cancelled) && !state.prior.isDestroyed ? state.prior : void 0;
|
|
159
161
|
state.restored = restored;
|
|
160
162
|
this.active = restored;
|
|
161
163
|
this.eventRoot.focusPolicy = restored;
|
|
@@ -229,6 +231,7 @@ class PibblFocusManager {
|
|
|
229
231
|
committedNavigationCandidates = Object.freeze([]);
|
|
230
232
|
committedBoundaries = /* @__PURE__ */ new Set();
|
|
231
233
|
pending;
|
|
234
|
+
retainedNavigationTransaction;
|
|
232
235
|
transactionalPending;
|
|
233
236
|
directionalStack = [];
|
|
234
237
|
focusedTarget;
|
|
@@ -318,12 +321,22 @@ class PibblFocusManager {
|
|
|
318
321
|
const transaction = this.eventRoot.renderTransaction;
|
|
319
322
|
if (transaction) {
|
|
320
323
|
this.transactionalPending = { transaction, frame: pending };
|
|
324
|
+
let prepared;
|
|
325
|
+
if (transaction.onPreflight && transaction.onAdopt) {
|
|
326
|
+
transaction.onPreflight(() => {
|
|
327
|
+
prepared = this.prepareCollection(pending, transaction);
|
|
328
|
+
});
|
|
329
|
+
transaction.onAdopt(() => {
|
|
330
|
+
if (prepared && !this.destroyed) this.adoptNavigationCandidates(prepared);
|
|
331
|
+
});
|
|
332
|
+
}
|
|
321
333
|
transaction.onFinish((transactionSucceeded) => {
|
|
322
334
|
if (this.transactionalPending?.transaction === transaction) {
|
|
323
335
|
this.transactionalPending = void 0;
|
|
324
336
|
}
|
|
325
337
|
if (transactionSucceeded && !this.destroyed) {
|
|
326
|
-
this.
|
|
338
|
+
if (prepared) this.finishNavigationCandidates();
|
|
339
|
+
else this.commitCollection(pending);
|
|
327
340
|
}
|
|
328
341
|
});
|
|
329
342
|
return;
|
|
@@ -331,6 +344,10 @@ class PibblFocusManager {
|
|
|
331
344
|
this.commitCollection(pending);
|
|
332
345
|
}
|
|
333
346
|
commitCollection(pending) {
|
|
347
|
+
this.adoptNavigationCandidates(this.prepareCollection(pending));
|
|
348
|
+
this.finishNavigationCandidates();
|
|
349
|
+
}
|
|
350
|
+
prepareCollection(pending, transaction) {
|
|
334
351
|
const collected = [];
|
|
335
352
|
for (const [sourceIndex, observed] of pending.entries.entries()) {
|
|
336
353
|
if ("target" in observed) {
|
|
@@ -340,37 +357,25 @@ class PibblFocusManager {
|
|
|
340
357
|
target,
|
|
341
358
|
sourceIndex,
|
|
342
359
|
directionalBoundary: observed.directionalBoundary,
|
|
343
|
-
rootBounds: resolveTargetRootBounds(target)
|
|
360
|
+
rootBounds: transaction ? preparedLayoutTargetBounds(transaction, target) : resolveTargetRootBounds(target)
|
|
344
361
|
})
|
|
345
362
|
);
|
|
346
363
|
continue;
|
|
347
364
|
}
|
|
348
365
|
const region = observed.region;
|
|
349
|
-
|
|
366
|
+
const geometry = transaction ? preparedLayoutHtmlGeometry(transaction, region) : void 0;
|
|
367
|
+
if (geometry ? geometry.active : region.active && region.content)
|
|
350
368
|
collected.push(
|
|
351
369
|
Object.freeze({
|
|
352
370
|
region,
|
|
353
371
|
sourceIndex,
|
|
354
372
|
directionalBoundary: observed.directionalBoundary,
|
|
355
|
-
rootBounds: region.rootBounds
|
|
373
|
+
rootBounds: geometry?.bounds ?? region.rootBounds
|
|
356
374
|
})
|
|
357
375
|
);
|
|
358
376
|
}
|
|
359
377
|
const navigation = Object.freeze(collected);
|
|
360
|
-
this.
|
|
361
|
-
const candidates = navigation.filter(
|
|
362
|
-
(candidate) => !isHtmlFocusCandidate(candidate)
|
|
363
|
-
);
|
|
364
|
-
for (const candidate of candidates) {
|
|
365
|
-
if (candidate.directionalBoundary) {
|
|
366
|
-
retainedDirectionalBoundaries.set(
|
|
367
|
-
candidate.target,
|
|
368
|
-
asDirectionalBoundary(candidate.directionalBoundary)
|
|
369
|
-
);
|
|
370
|
-
} else {
|
|
371
|
-
retainedDirectionalBoundaries.delete(candidate.target);
|
|
372
|
-
}
|
|
373
|
-
}
|
|
378
|
+
return this.prepareNavigationCandidates(navigation, pending.boundaries);
|
|
374
379
|
}
|
|
375
380
|
observeTarget(target) {
|
|
376
381
|
const pending = this.pending;
|
|
@@ -451,15 +456,14 @@ class PibblFocusManager {
|
|
|
451
456
|
}
|
|
452
457
|
if (focused) this.clearHtmlFocus(focused);
|
|
453
458
|
}
|
|
454
|
-
observeTransactionalTarget(target) {
|
|
459
|
+
observeTransactionalTarget(target, preparedFocusable) {
|
|
455
460
|
const transactional = this.transactionalPending;
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
const pending = transactional.frame;
|
|
461
|
+
const pending = this.pending ?? (transactional?.transaction === this.eventRoot.renderTransaction ? transactional?.frame : void 0);
|
|
462
|
+
if (!pending) return;
|
|
459
463
|
if (this.pendingSpaceTarget === target && !target.handlers.click) {
|
|
460
464
|
this.cancelSpaceActivation();
|
|
461
465
|
}
|
|
462
|
-
if (!isKeyboardFocusable(target)) {
|
|
466
|
+
if (!(preparedFocusable ?? isKeyboardFocusable(target))) {
|
|
463
467
|
pending.ineligibleTargets.add(target);
|
|
464
468
|
const index = pending.targets.findIndex(
|
|
465
469
|
(candidate) => candidate.target === target
|
|
@@ -679,6 +683,7 @@ class PibblFocusManager {
|
|
|
679
683
|
return;
|
|
680
684
|
}
|
|
681
685
|
if (retained.length === 0) return;
|
|
686
|
+
if (this.stageRetainedNavigation()) return;
|
|
682
687
|
const replayed = new Set(retained);
|
|
683
688
|
const candidates = Object.freeze(
|
|
684
689
|
this.committedNavigationCandidates.map((candidate) => {
|
|
@@ -711,6 +716,7 @@ class PibblFocusManager {
|
|
|
711
716
|
}
|
|
712
717
|
return;
|
|
713
718
|
}
|
|
719
|
+
if (this.stageRetainedNavigation()) return;
|
|
714
720
|
const replayed = new Set(targets);
|
|
715
721
|
if (!this.committedCandidates.some(
|
|
716
722
|
(candidate) => replayed.has(candidate.target)
|
|
@@ -726,6 +732,36 @@ class PibblFocusManager {
|
|
|
726
732
|
);
|
|
727
733
|
this.commitCandidates(candidates, this.committedBoundaries);
|
|
728
734
|
}
|
|
735
|
+
/** A clean inner manager still joins its parent root's geometry adoption. */
|
|
736
|
+
stageRetainedNavigation() {
|
|
737
|
+
const transaction = this.eventRoot.renderTransaction;
|
|
738
|
+
if (!transaction?.onPreflight || !transaction.onAdopt) return false;
|
|
739
|
+
if (this.retainedNavigationTransaction === transaction) return true;
|
|
740
|
+
this.retainedNavigationTransaction = transaction;
|
|
741
|
+
let prepared;
|
|
742
|
+
transaction.onPreflight(() => {
|
|
743
|
+
if (this.destroyed) return;
|
|
744
|
+
const candidates = [];
|
|
745
|
+
for (const candidate of this.committedNavigationCandidates) {
|
|
746
|
+
if (isHtmlFocusCandidate(candidate)) {
|
|
747
|
+
const geometry = preparedLayoutHtmlGeometry(transaction, candidate.region);
|
|
748
|
+
if (geometry ? !geometry.active : !candidate.region.active || !candidate.region.content) continue;
|
|
749
|
+
candidates.push(Object.freeze({ ...candidate, rootBounds: geometry?.bounds ?? candidate.region.rootBounds }));
|
|
750
|
+
} else {
|
|
751
|
+
candidates.push(Object.freeze({ ...candidate, rootBounds: preparedLayoutTargetBounds(transaction, candidate.target) }));
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
prepared = this.prepareNavigationCandidates(Object.freeze(candidates), this.committedBoundaries);
|
|
755
|
+
});
|
|
756
|
+
transaction.onAdopt(() => {
|
|
757
|
+
if (prepared && !this.destroyed) this.adoptNavigationCandidates(prepared);
|
|
758
|
+
});
|
|
759
|
+
transaction.onFinish((success) => {
|
|
760
|
+
if (this.retainedNavigationTransaction === transaction) this.retainedNavigationTransaction = void 0;
|
|
761
|
+
if (success && prepared && !this.destroyed) this.finishNavigationCandidates();
|
|
762
|
+
});
|
|
763
|
+
return true;
|
|
764
|
+
}
|
|
729
765
|
setFocusState(target, focusVisible) {
|
|
730
766
|
if (target && !this.committedCandidates.some((candidate) => candidate.target === target)) {
|
|
731
767
|
throw new Error(
|
|
@@ -838,6 +874,10 @@ class PibblFocusManager {
|
|
|
838
874
|
this.commitNavigationCandidates(Object.freeze(navigation), boundaries);
|
|
839
875
|
}
|
|
840
876
|
commitNavigationCandidates(candidates, boundaries) {
|
|
877
|
+
this.adoptNavigationCandidates(this.prepareNavigationCandidates(candidates, boundaries));
|
|
878
|
+
this.finishNavigationCandidates();
|
|
879
|
+
}
|
|
880
|
+
prepareNavigationCandidates(candidates, boundaries) {
|
|
841
881
|
const pendingByBoundary = /* @__PURE__ */ new Map();
|
|
842
882
|
for (const boundary of boundaries) pendingByBoundary.set(boundary, []);
|
|
843
883
|
for (const candidate of candidates) {
|
|
@@ -849,26 +889,30 @@ class PibblFocusManager {
|
|
|
849
889
|
for (const [boundary, directCandidates] of pendingByBoundary) {
|
|
850
890
|
committedByBoundary.set(boundary, Object.freeze(directCandidates));
|
|
851
891
|
}
|
|
892
|
+
return {
|
|
893
|
+
navigation: candidates,
|
|
894
|
+
canvas: Object.freeze(candidates.filter((candidate) => !isHtmlFocusCandidate(candidate))),
|
|
895
|
+
html: Object.freeze(candidates.filter((candidate) => isHtmlFocusCandidate(candidate))),
|
|
896
|
+
byBoundary: committedByBoundary,
|
|
897
|
+
boundaries: new Set(committedByBoundary.keys())
|
|
898
|
+
};
|
|
899
|
+
}
|
|
900
|
+
adoptNavigationCandidates(prepared) {
|
|
852
901
|
for (const boundary of this.committedBoundaries) {
|
|
853
|
-
if (!
|
|
854
|
-
boundary.commit(Object.freeze([]));
|
|
855
|
-
}
|
|
902
|
+
if (!prepared.byBoundary.has(boundary)) boundary.commit(EMPTY_NAVIGATION);
|
|
856
903
|
}
|
|
857
|
-
for (const [boundary,
|
|
858
|
-
|
|
904
|
+
for (const [boundary, candidates] of prepared.byBoundary) boundary.commit(candidates);
|
|
905
|
+
this.committedBoundaries = prepared.boundaries;
|
|
906
|
+
this.committedNavigationCandidates = prepared.navigation;
|
|
907
|
+
this.committedCandidates = prepared.canvas;
|
|
908
|
+
this.committedHtmlCandidates = prepared.html;
|
|
909
|
+
for (const candidate of prepared.canvas) {
|
|
910
|
+
if (candidate.directionalBoundary) retainedDirectionalBoundaries.set(candidate.target, asDirectionalBoundary(candidate.directionalBoundary));
|
|
911
|
+
else retainedDirectionalBoundaries.delete(candidate.target);
|
|
859
912
|
}
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
candidates.filter(
|
|
864
|
-
(candidate) => !isHtmlFocusCandidate(candidate)
|
|
865
|
-
)
|
|
866
|
-
);
|
|
867
|
-
this.committedHtmlCandidates = Object.freeze(
|
|
868
|
-
candidates.filter(
|
|
869
|
-
(candidate) => isHtmlFocusCandidate(candidate)
|
|
870
|
-
)
|
|
871
|
-
);
|
|
913
|
+
}
|
|
914
|
+
finishNavigationCandidates() {
|
|
915
|
+
const candidates = this.committedNavigationCandidates;
|
|
872
916
|
if (this.focusedTarget && !candidates.some(
|
|
873
917
|
(candidate) => !isHtmlFocusCandidate(candidate) && candidate.target === this.focusedTarget
|
|
874
918
|
)) {
|