@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/animation/playback.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n getSignalNode,\n signal,\n type SignalCommitBatch,\n} from '../signals/graph.js';\nimport type { WritableSignal } from '../signals/types.js';\nimport {\n queueBeginCommand,\n queueCurrentFrameCommitAcknowledgement,\n queueCurrentFrameCompletion,\n queueCurrentFrameOrderedPlaybackCompletion,\n recordSchedulerTrace,\n registerAdvanceParticipant,\n snapshotRealmScheduler,\n} from '../scheduler/realm-scheduler.js';\nimport type {\n PibblBeginCommandHandle,\n PibblFrameSnapshot,\n} from '../scheduler/types.js';\nimport { getDefinitionRecord } from './definition.js';\nimport { sampleSpring, type SpringSample } from './spring.js';\nimport {\n adoptProgramActivationFork,\n evaluateProgram,\n finishProgram,\n forkProgramActivation,\n getProgramActivationRecord,\n preflightProgramActivation,\n releaseProgramActivation,\n seekProgram,\n type ProgramActivation,\n type ProgramEvaluationResult,\n} from './evaluate.js';\nimport { getProgramRecord, type ProgramDuration } from './program.js';\nimport type {\n PibblAnimationProgram,\n PibblPlayback,\n PibblPlaybackEvent,\n PibblPlaybackOptions,\n PibblPlaybackStatus,\n} from './types.js';\nimport {\n acquireTransactionalProgramWriterLeases,\n preflightProgramWriterLeaseAcquisition,\n type AnimationWriterLeaseReplacement,\n type TransactionalProgramWriterLease,\n} from './writer-leases.js';\n\ntype PlaybackCommandName =\n | 'play'\n | 'pause'\n | 'resume'\n | 'cancel'\n | 'finish'\n | 'seek'\n | 'reverse'\n | 'setPlaybackRate';\n\ntype PendingEvaluation =\n | {\n readonly kind: 'seek';\n readonly time: number;\n readonly direction?: 'forward' | 'reverse';\n }\n | { readonly kind: 'finish' };\n\ninterface PlaybackRun {\n readonly generation: number;\n readonly registration: object;\n readonly registrationOrder: number;\n readonly token: object;\n readonly lease: TransactionalProgramWriterLease;\n readonly activation: ProgramActivation;\n readonly program: PibblAnimationProgram;\n direction: 'forward' | 'reverse';\n playbackRate: number;\n position: number;\n anchorPosition: number;\n anchorLogicalTime: number;\n previousTime: number | undefined;\n status: 'running' | 'paused' | 'ending';\n pendingEvaluation: PendingEvaluation | undefined;\n unregisterAdvance: (() => void) | undefined;\n released: boolean;\n startPending: boolean;\n startQueuedFrameId: number | undefined;\n}\n\ninterface PendingTraceWrite {\n readonly signal: WritableSignal<unknown>;\n readonly version: number;\n readonly target: string;\n}\n\ninterface FrameDelivery {\n readonly frameId: number;\n readonly logicalTime: number;\n readonly events: Array<{\n readonly event: PibblPlaybackEvent;\n readonly registrationOrder: number;\n }>;\n readonly errors: Array<{\n readonly error: unknown;\n readonly registrationOrder: number;\n readonly commitRequired: boolean;\n }>;\n readonly terminalRuns: Set<PlaybackRun>;\n readonly writes: PendingTraceWrite[];\n commitApplied: boolean;\n}\n\nexport interface AnimationPlaybackSnapshot {\n readonly activePlaybacks: number;\n readonly createdPlaybacks: number;\n readonly releasedPlaybacks: number;\n readonly queuedCommands: number;\n readonly queuedMilestones: number;\n readonly outputStageAttempts: number;\n}\n\nexport interface AnimationPlaybackController {\n readonly handle: PibblPlayback;\n adopt(program: PibblAnimationProgram, options?: PibblPlaybackOptions): void;\n committedSpringSnapshot(): SpringSample | undefined;\n retarget(program: PibblAnimationProgram, options?: PibblPlaybackOptions): void;\n dispose(): void;\n}\n\nexport interface AnimationPlaybackCandidate {\n readonly program: PibblAnimationProgram;\n readonly options: PibblPlaybackOptions;\n}\n\nlet nextPlaybackRegistrationOrder = 0;\nlet activePlaybacks = 0;\nlet createdPlaybacks = 0;\nlet releasedPlaybacks = 0;\nlet queuedCommands = 0;\nlet queuedMilestones = 0;\nlet outputStageAttempts = 0;\nlet activePlaybackBeginContext: {\n readonly snapshot: PibblFrameSnapshot;\n readonly batch: SignalCommitBatch;\n} | undefined;\n\n/** @internal Deterministic resource counters for tests and diagnostics. */\nexport function animationPlaybackSnapshot(): AnimationPlaybackSnapshot {\n return Object.freeze({\n activePlaybacks,\n createdPlaybacks,\n releasedPlaybacks,\n queuedCommands,\n queuedMilestones,\n outputStageAttempts,\n });\n}\n\nfunction freezePath(path: readonly number[]): readonly number[] {\n return Object.freeze([...path]);\n}\n\nfunction playbackEvent(\n type: PibblPlaybackEvent['type'],\n snapshot: PibblFrameSnapshot,\n programPath: readonly number[] = [],\n iteration = 0,\n marker?: string,\n): PibblPlaybackEvent {\n return Object.freeze({\n type,\n logicalTime: snapshot.logicalTime,\n frameId: snapshot.frameId,\n programPath: freezePath(programPath),\n iteration,\n ...(marker === undefined ? {} : { marker }),\n });\n}\n\nfunction validateOptions(options: PibblPlaybackOptions): void {\n if (options.conflict !== undefined &&\n options.conflict !== 'error' && options.conflict !== 'replace') {\n throw new TypeError('Pibbl animation playback conflict must be \"error\" or \"replace\".');\n }\n if (options.debugName !== undefined &&\n (typeof options.debugName !== 'string' || options.debugName.length === 0)) {\n throw new TypeError('Pibbl animation playback debugName must be nonempty when provided.');\n }\n if (options.onEvent !== undefined && typeof options.onEvent !== 'function') {\n throw new TypeError('Pibbl animation playback onEvent must be a function.');\n }\n if (options.onError !== undefined && typeof options.onError !== 'function') {\n throw new TypeError('Pibbl animation playback onError must be a function.');\n }\n}\n\n/** @internal Creates one validated immutable render-time playback candidate. */\nexport function normalizeAnimationPlaybackCandidate(\n program: PibblAnimationProgram,\n options: PibblPlaybackOptions = {},\n): AnimationPlaybackCandidate {\n getProgramRecord(program);\n const normalizedOptions = Object.freeze({ ...options });\n validateOptions(normalizedOptions);\n return Object.freeze({ program, options: normalizedOptions });\n}\n\nfunction firstStepperName(program: PibblAnimationProgram): string | undefined {\n const record = getProgramRecord(program);\n if (record.kind === 'track') {\n const definition = getDefinitionRecord(record.definition);\n return definition.kind === 'stepper' ? definition.debugName : undefined;\n }\n for (const child of record.children) {\n const name = firstStepperName(child);\n if (name !== undefined) return name;\n }\n return undefined;\n}\n\nfunction unavailableControlError(\n program: PibblAnimationProgram,\n control: 'reverse' | 'finish',\n): Error | undefined {\n const duration = getProgramRecord(program).duration;\n if (duration.kind === 'infinite') {\n return new TypeError(\n `Pibbl animation program is infinite; ${control} is unavailable.`,\n );\n }\n if (duration.kind === 'unresolved-stepper') {\n const name = firstStepperName(program);\n const label = name === undefined ? 'Pibbl animation stateful program' :\n `Pibbl animation stepper \"${name}\"`;\n return new TypeError(\n `${label} terminal time is not discovered; ${control} is unavailable.`,\n );\n }\n return undefined;\n}\n\nfunction finiteDuration(duration: ProgramDuration): number | undefined {\n return duration.kind === 'finite' ? duration.milliseconds : undefined;\n}\n\n/**\n * Creates one scheduler-owned playback slot. Component lifetime is added by\n * usePlayback in the following implementation task.\n */\nexport function createAnimationPlaybackController(\n initialProgram: PibblAnimationProgram,\n initialOptions: PibblPlaybackOptions = {},\n): AnimationPlaybackController {\n const initialCandidate = normalizeAnimationPlaybackCandidate(\n initialProgram,\n initialOptions,\n );\n\n let program = initialCandidate.program;\n let options = initialCandidate.options;\n let disposed = false;\n let queuedGeneration = 0;\n let run: PlaybackRun | undefined;\n let storedPlaybackRate = 1;\n let delivery: FrameDelivery | undefined;\n let pendingRetarget: PibblBeginCommandHandle | undefined;\n const pendingCommands = new Set<PibblBeginCommandHandle>();\n const metadataWriter = Object.freeze({ name: 'Pibbl playback metadata' });\n const status = signal<PibblPlaybackStatus>('idle', {\n debugName: options.debugName === undefined ? undefined : `${options.debugName} status`,\n });\n const currentTime = signal(0, {\n debugName: options.debugName === undefined ? undefined : `${options.debugName} current time`,\n });\n\n function debugName(): string | undefined {\n return options.debugName;\n }\n\n function ensureDelivery(snapshot: PibblFrameSnapshot): FrameDelivery {\n if (delivery?.frameId === snapshot.frameId) return delivery;\n const current: FrameDelivery = {\n frameId: snapshot.frameId,\n logicalTime: snapshot.logicalTime,\n events: [],\n errors: [],\n terminalRuns: new Set(),\n writes: [],\n commitApplied: false,\n };\n delivery = current;\n queueCurrentFrameCommitAcknowledgement((_snapshot, outcome) => {\n current.commitApplied = outcome.applied;\n });\n queueCurrentFrameCompletion(() => {\n if (delivery === current) delivery = undefined;\n if (!current.commitApplied) {\n queuedMilestones -= current.events.length;\n } else {\n for (const terminalRun of current.terminalRuns) releaseRun(terminalRun);\n\n for (const write of current.writes) {\n const node = getSignalNode(write.signal);\n recordSchedulerTrace({\n kind: 'animation-write',\n frameId: current.frameId,\n logicalTime: current.logicalTime,\n debugName: debugName(),\n target: write.target,\n outcome: node.version === write.version ?\n 'equality-suppressed' : 'staged',\n });\n }\n\n for (const { event, registrationOrder } of current.events) {\n queueCurrentFrameOrderedPlaybackCompletion(registrationOrder, () => {\n queuedMilestones--;\n if (!disposed) options.onEvent?.(event);\n });\n }\n }\n for (const { error, registrationOrder, commitRequired } of current.errors) {\n if (commitRequired && !current.commitApplied) continue;\n queueCurrentFrameOrderedPlaybackCompletion(registrationOrder, () => {\n if (disposed) return;\n if (options.onError) options.onError(error);\n else throw error;\n });\n }\n });\n return current;\n }\n\n function queueEvent(\n snapshot: PibblFrameSnapshot,\n event: PibblPlaybackEvent,\n registrationOrder: number,\n ): void {\n const frame = ensureDelivery(snapshot);\n frame.events.push({ event, registrationOrder });\n queuedMilestones++;\n recordSchedulerTrace({\n kind: 'animation-milestone',\n frameId: snapshot.frameId,\n logicalTime: snapshot.logicalTime,\n debugName: debugName(),\n event: event.type,\n programPath: event.programPath,\n iteration: event.iteration,\n });\n }\n\n function queueError(\n snapshot: PibblFrameSnapshot,\n error: unknown,\n registrationOrder: number,\n trace = true,\n commitRequired = true,\n ): void {\n ensureDelivery(snapshot).errors.push({ error, registrationOrder, commitRequired });\n if (trace) {\n recordSchedulerTrace({\n kind: 'animation-error',\n frameId: snapshot.frameId,\n logicalTime: snapshot.logicalTime,\n debugName: debugName(),\n error,\n });\n }\n }\n\n function queueDiagnosticError(\n snapshot: PibblFrameSnapshot,\n error: unknown,\n registrationOrder: number,\n ): void {\n queueError(snapshot, error, registrationOrder, true, false);\n }\n\n function queuePendingStart(target: PlaybackRun, snapshot: PibblFrameSnapshot): void {\n if (!target.startPending || target.startQueuedFrameId === snapshot.frameId) return;\n target.startQueuedFrameId = snapshot.frameId;\n queueEvent(snapshot, playbackEvent('start', snapshot), target.registrationOrder);\n queueCurrentFrameCommitAcknowledgement((_committedSnapshot, outcome) => {\n if (outcome.applied && !target.released) target.startPending = false;\n });\n }\n\n function stage<T>(\n batch: SignalCommitBatch,\n snapshot: PibblFrameSnapshot,\n target: WritableSignal<T>,\n value: T,\n label: string,\n ): void {\n const node = getSignalNode(target);\n ensureDelivery(snapshot).writes.push({\n signal: target as WritableSignal<unknown>,\n version: node.version,\n target: label,\n });\n batch.stage(target, value, metadataWriter);\n }\n\n function stageStatus(\n batch: SignalCommitBatch,\n snapshot: PibblFrameSnapshot,\n value: PibblPlaybackStatus,\n ): void {\n stage(batch, snapshot, status, value, 'status');\n }\n\n function stageCurrentTime(\n batch: SignalCommitBatch,\n snapshot: PibblFrameSnapshot,\n value: number,\n ): void {\n stage(batch, snapshot, currentTime, value, 'currentTime');\n }\n\n function releaseRun(target: PlaybackRun): void {\n if (target.released) return;\n target.released = true;\n target.unregisterAdvance?.();\n target.unregisterAdvance = undefined;\n target.lease.release();\n releaseProgramActivation(target.activation);\n activePlaybacks--;\n releasedPlaybacks++;\n if (run === target) run = undefined;\n }\n\n function scheduleTerminal(snapshot: PibblFrameSnapshot, target: PlaybackRun): void {\n ensureDelivery(snapshot).terminalRuns.add(target);\n }\n\n function cancelRun(\n target: PlaybackRun,\n snapshot: PibblFrameSnapshot,\n batch: SignalCommitBatch,\n releaseImmediately = false,\n ): void {\n if (target.status === 'ending') return;\n queuePendingStart(target, snapshot);\n const previousStatus = target.status;\n target.status = 'ending';\n stageStatus(batch, snapshot, 'cancelled');\n queueEvent(snapshot, playbackEvent('cancel', snapshot), target.registrationOrder);\n if (releaseImmediately) {\n target.unregisterAdvance?.();\n target.unregisterAdvance = undefined;\n scheduleTerminal(snapshot, target);\n releaseRun(target);\n return;\n }\n queueCurrentFrameCommitAcknowledgement((_committedSnapshot, outcome) => {\n if (disposed || run !== target || target.released) return;\n if (!outcome.applied) {\n target.status = previousStatus;\n enqueue('cancel', target.generation);\n return;\n }\n target.unregisterAdvance?.();\n target.unregisterAdvance = undefined;\n scheduleTerminal(snapshot, target);\n });\n }\n\n function beginRunReplacement(\n target: PlaybackRun,\n snapshot: PibblFrameSnapshot,\n batch: SignalCommitBatch,\n ): AnimationWriterLeaseReplacement {\n if (target.status === 'ending' || target.released) {\n throw new Error('Pibbl animation playback run is already ending.');\n }\n const previousStatus = target.status;\n const previousStartPending = target.startPending;\n const wasRegistered = target.unregisterAdvance !== undefined;\n queuePendingStart(target, snapshot);\n target.status = 'ending';\n target.unregisterAdvance?.();\n target.unregisterAdvance = undefined;\n stageStatus(batch, snapshot, 'cancelled');\n queueEvent(snapshot, playbackEvent('cancel', snapshot), target.registrationOrder);\n let pending = true;\n return Object.freeze({\n commit(): void {\n if (!pending) return;\n pending = false;\n scheduleTerminal(snapshot, target);\n },\n rollback(): void {\n if (!pending) return;\n pending = false;\n if (target.released) return;\n if (disposed) {\n releaseRun(target);\n return;\n }\n target.status = previousStatus;\n target.startPending = previousStartPending;\n if (wasRegistered) registerRun(target);\n },\n });\n }\n\n function queueEvaluationTraces(\n target: PlaybackRun,\n snapshot: PibblFrameSnapshot,\n result: ProgramEvaluationResult,\n stagedOutputs: ReadonlySet<WritableSignal<unknown>>,\n sampledTime: number,\n ): void {\n recordSchedulerTrace({\n kind: 'animation-sample',\n frameId: snapshot.frameId,\n logicalTime: snapshot.logicalTime,\n registrationOrder: target.registrationOrder,\n debugName: debugName(),\n localTime: sampledTime,\n direction: target.direction,\n });\n for (const output of stagedOutputs) {\n ensureDelivery(snapshot).writes.push({\n signal: output,\n version: getSignalNode(output).version,\n target: getSignalNode(output).debugName ?? '<unnamed signal>',\n });\n }\n for (const trace of result.steppers) {\n recordSchedulerTrace({\n kind: 'animation-stepper',\n frameId: snapshot.frameId,\n logicalTime: snapshot.logicalTime,\n debugName: debugName(),\n programPath: trace.programPath,\n repeatIterations: trace.repeatIterations,\n appliedSteps: trace.appliedSteps,\n retainedRemainderMilliseconds: trace.retainedRemainderMilliseconds,\n clampedElapsedMilliseconds: trace.clampedElapsedMilliseconds,\n discardedElapsedMilliseconds: trace.discardedElapsedMilliseconds,\n });\n }\n }\n\n function queueEvaluationMilestones(\n target: PlaybackRun,\n snapshot: PibblFrameSnapshot,\n result: ProgramEvaluationResult,\n ): void {\n for (const milestone of result.milestones) {\n queueEvent(snapshot, playbackEvent(\n milestone.kind,\n snapshot,\n milestone.programPath,\n milestone.iteration,\n milestone.kind === 'marker' ? milestone.marker : undefined,\n ), target.registrationOrder);\n }\n }\n\n function clampRunTime(target: PlaybackRun, candidate: number): number {\n const record = getProgramActivationRecord(target.activation);\n const knownDuration = record.terminalDuration ??\n finiteDuration(getProgramRecord(target.program).duration);\n return Math.max(0, knownDuration === undefined ? candidate :\n Math.min(candidate, knownDuration));\n }\n\n function registerRun(target: PlaybackRun): void {\n if (target.unregisterAdvance !== undefined || target.released) return;\n target.unregisterAdvance = registerAdvanceParticipant((snapshot, batch) => {\n if (disposed || run !== target || target.released || target.status === 'ending') return;\n advanceRun(target, snapshot, batch);\n }, 'animation');\n }\n\n function advanceRun(\n target: PlaybackRun,\n snapshot: PibblFrameSnapshot,\n batch: SignalCommitBatch,\n ): void {\n queuePendingStart(target, snapshot);\n const evaluationActivation = forkProgramActivation(target.activation);\n const stagedOutputs = new Set<WritableSignal<unknown>>();\n const evaluationBatch: SignalCommitBatch = {\n read<T>(value: WritableSignal<T>): T {\n return batch.read(value);\n },\n stage<T>(value: WritableSignal<T>, nextValue: T, writer: object): void {\n batch.stage(value, nextValue, writer);\n if (writer === target.token) {\n outputStageAttempts++;\n stagedOutputs.add(value as WritableSignal<unknown>);\n }\n },\n discardWriter(writer: object): void {\n batch.discardWriter(writer);\n },\n registerLifecycle(writer, lifecycle): void {\n batch.registerLifecycle(writer, lifecycle);\n },\n commit(): void {\n batch.commit();\n },\n clear(): void {\n batch.clear();\n },\n };\n const pending = target.pendingEvaluation;\n let destination = pending?.kind === 'seek' ? pending.time :\n target.anchorPosition +\n (target.direction === 'forward' ? 1 : -1) *\n (snapshot.logicalTime - target.anchorLogicalTime) * target.playbackRate;\n destination = clampRunTime(target, destination);\n let result: ProgramEvaluationResult;\n try {\n if (pending?.kind === 'finish') {\n const staticDuration = finiteDuration(getProgramRecord(target.program).duration);\n if (staticDuration === undefined) {\n result = finishProgram(evaluationActivation, {\n previousTime: target.previousTime,\n frameId: snapshot.frameId,\n writer: target.token,\n batch: evaluationBatch,\n });\n } else {\n result = seekProgram(evaluationActivation, {\n previousTime: target.previousTime,\n time: staticDuration,\n direction: 'forward',\n frameId: snapshot.frameId,\n writer: target.token,\n batch: evaluationBatch,\n });\n }\n } else if (pending?.kind === 'seek') {\n result = seekProgram(evaluationActivation, {\n previousTime: target.previousTime,\n time: destination,\n direction: pending.direction ??\n (destination < target.position ? 'reverse' : 'forward'),\n frameId: snapshot.frameId,\n writer: target.token,\n batch: evaluationBatch,\n });\n } else {\n result = evaluateProgram(evaluationActivation, {\n previousTime: target.previousTime,\n time: destination,\n direction: target.direction,\n frameId: snapshot.frameId,\n writer: target.token,\n batch: evaluationBatch,\n });\n }\n } catch (error) {\n releaseProgramActivation(evaluationActivation);\n batch.discardWriter(target.token);\n stageStatus(batch, snapshot, 'cancelled');\n recordSchedulerTrace({\n kind: 'animation-error',\n frameId: snapshot.frameId,\n logicalTime: snapshot.logicalTime,\n debugName: debugName(),\n error,\n });\n queueCurrentFrameCommitAcknowledgement((_committedSnapshot, outcome) => {\n if (!outcome.applied || disposed || run !== target || target.released) return;\n target.status = 'ending';\n target.unregisterAdvance?.();\n target.unregisterAdvance = undefined;\n queueEvent(snapshot, playbackEvent('cancel', snapshot), target.registrationOrder);\n queueError(snapshot, error, target.registrationOrder, false);\n scheduleTerminal(snapshot, target);\n });\n return;\n }\n\n if (disposed || run !== target || target.released) {\n releaseProgramActivation(evaluationActivation);\n batch.discardWriter(target.token);\n return;\n }\n\n const duration = result.terminal.duration;\n const presentedTime = duration !== undefined && Number.isFinite(duration) &&\n result.terminal.atEnd ? duration : destination;\n stageCurrentTime(batch, snapshot, presentedTime);\n queueEvaluationTraces(target, snapshot, result, stagedOutputs, presentedTime);\n\n const terminalReached = target.status === 'running' && result.terminal.reached ||\n pending?.kind === 'finish';\n if (terminalReached) {\n stageStatus(batch, snapshot, 'finished');\n } else {\n stageStatus(batch, snapshot, target.status === 'paused' ? 'paused' : 'running');\n }\n queueCurrentFrameCommitAcknowledgement((_committedSnapshot, outcome) => {\n if (!outcome.applied || disposed || run !== target || target.released) {\n releaseProgramActivation(evaluationActivation);\n return;\n }\n adoptProgramActivationFork(target.activation, evaluationActivation);\n target.position = presentedTime;\n target.previousTime = presentedTime;\n if (pending?.kind === 'seek') {\n target.anchorPosition = presentedTime;\n target.anchorLogicalTime = snapshot.logicalTime;\n }\n target.pendingEvaluation = undefined;\n queueEvaluationMilestones(target, snapshot, result);\n if (terminalReached) {\n target.unregisterAdvance?.();\n target.unregisterAdvance = undefined;\n queueEvent(snapshot, playbackEvent('finish', snapshot), target.registrationOrder);\n scheduleTerminal(snapshot, target);\n } else if (target.status === 'paused') {\n target.unregisterAdvance?.();\n target.unregisterAdvance = undefined;\n }\n });\n }\n\n function createRun(\n generation: number,\n snapshot: PibblFrameSnapshot,\n batch: SignalCommitBatch,\n conflict: 'error' | 'replace',\n ignoredToken?: object,\n ): PlaybackRun | undefined {\n const registration = Object.freeze({});\n const registrationOrder = ++nextPlaybackRegistrationOrder;\n const token = Object.freeze({ registrationOrder });\n let target!: PlaybackRun;\n try {\n const lease = acquireTransactionalProgramWriterLeases(program, registration, {\n token,\n registrationOrder,\n debugName: debugName(),\n cancel(): void {\n if (target !== undefined && !target.released) {\n const context = activePlaybackBeginContext;\n if (context === undefined) releaseRun(target);\n else cancelRun(target, context.snapshot, context.batch, true);\n }\n },\n preflightReplacement(): void {\n if (target === undefined || target.released) {\n throw new Error('Pibbl animation replacement owner is unavailable.');\n }\n if (activePlaybackBeginContext === undefined) {\n throw new Error('Pibbl animation replacement must begin during Begin.');\n }\n if (target.status === 'ending') {\n throw new Error('Pibbl animation playback run is already ending.');\n }\n },\n beginReplacement(): AnimationWriterLeaseReplacement {\n if (target === undefined || target.released) {\n throw new Error('Pibbl animation replacement owner is unavailable.');\n }\n const context = activePlaybackBeginContext;\n if (context === undefined) {\n throw new Error('Pibbl animation replacement must begin during Begin.');\n }\n return beginRunReplacement(target, context.snapshot, context.batch);\n },\n }, { conflict, ignoredToken });\n target = {\n generation,\n registration,\n registrationOrder,\n token,\n lease,\n activation: lease.activation,\n program,\n direction: 'forward',\n playbackRate: storedPlaybackRate,\n position: 0,\n anchorPosition: 0,\n anchorLogicalTime: snapshot.logicalTime,\n previousTime: undefined,\n status: 'running',\n pendingEvaluation: undefined,\n unregisterAdvance: undefined,\n released: false,\n startPending: false,\n startQueuedFrameId: undefined,\n };\n } catch (error) {\n stageStatus(batch, snapshot, 'cancelled');\n queueDiagnosticError(snapshot, error, registrationOrder);\n return undefined;\n }\n run = target;\n activePlaybacks++;\n createdPlaybacks++;\n return target;\n }\n\n function settleProvisionalRun(\n target: PlaybackRun,\n previousRun: PlaybackRun | undefined,\n additionalReplacement: AnimationWriterLeaseReplacement | undefined,\n ): void {\n if (target.lease.replacedOwnerCount === 0 && additionalReplacement === undefined) return;\n queueCurrentFrameCommitAcknowledgement((_snapshot, outcome) => {\n if (outcome.applied) {\n target.lease.commitReplacement();\n additionalReplacement?.commit();\n return;\n }\n const targetAlreadyReleased = target.released;\n target.unregisterAdvance?.();\n target.unregisterAdvance = undefined;\n target.released = true;\n if (run === target) run = previousRun;\n if (previousRun !== undefined) queuedGeneration = previousRun.generation;\n if (!targetAlreadyReleased) {\n if (target.lease.replacedOwnerCount === 0) target.lease.release();\n else target.lease.rollbackReplacement();\n }\n additionalReplacement?.rollback();\n if (!targetAlreadyReleased) {\n releaseProgramActivation(target.activation);\n activePlaybacks--;\n releasedPlaybacks++;\n }\n });\n }\n\n function acceptPlay(\n generation: number,\n conflict: 'error' | 'replace',\n snapshot: PibblFrameSnapshot,\n batch: SignalCommitBatch,\n ): void {\n try {\n if (conflict === 'error') {\n preflightProgramWriterLeaseAcquisition(program, run?.token);\n } else {\n preflightProgramActivation(program);\n }\n } catch (error) {\n if (run === undefined || run.status === 'ending') {\n stageStatus(batch, snapshot, 'cancelled');\n } else if (queuedGeneration === generation) {\n queuedGeneration = run.generation;\n }\n queueDiagnosticError(\n snapshot,\n error,\n run?.registrationOrder ?? Number.MAX_SAFE_INTEGER,\n );\n return;\n }\n const previousRun = run;\n const target = createRun(\n generation,\n snapshot,\n batch,\n conflict,\n previousRun?.token,\n );\n if (target === undefined) return;\n let additionalReplacement: AnimationWriterLeaseReplacement | undefined;\n if (previousRun !== undefined && !previousRun.released &&\n previousRun.status !== 'ending') {\n additionalReplacement = beginRunReplacement(previousRun, snapshot, batch);\n }\n stageStatus(batch, snapshot, 'scheduled');\n stageCurrentTime(batch, snapshot, 0);\n stageStatus(batch, snapshot, 'running');\n target.startPending = true;\n queuePendingStart(target, snapshot);\n registerRun(target);\n settleProvisionalRun(target, previousRun, additionalReplacement);\n }\n\n function acceptFreshControl(\n generation: number,\n command: 'seek' | 'reverse' | 'finish',\n snapshot: PibblFrameSnapshot,\n batch: SignalCommitBatch,\n seekTime?: number,\n ): void {\n if (command !== 'seek') {\n const error = unavailableControlError(program, command);\n if (error !== undefined) {\n queueDiagnosticError(snapshot, error, Number.MAX_SAFE_INTEGER);\n return;\n }\n }\n const target = createRun(\n generation,\n snapshot,\n batch,\n options.conflict ?? 'error',\n );\n if (target === undefined) return;\n target.status = command === 'reverse' ? 'running' : 'paused';\n if (command === 'reverse') {\n const duration = finiteDuration(getProgramRecord(target.program).duration)!;\n target.direction = 'reverse';\n target.position = duration;\n target.anchorPosition = duration;\n target.pendingEvaluation = { kind: 'seek', time: duration, direction: 'reverse' };\n stageStatus(batch, snapshot, 'scheduled');\n stageStatus(batch, snapshot, 'running');\n target.startPending = true;\n } else if (command === 'finish') {\n target.status = 'running';\n target.pendingEvaluation = { kind: 'finish' };\n stageStatus(batch, snapshot, 'scheduled');\n stageStatus(batch, snapshot, 'running');\n target.startPending = true;\n } else {\n const staticDuration = finiteDuration(getProgramRecord(target.program).duration);\n target.pendingEvaluation = {\n kind: 'seek',\n time: Math.max(0, staticDuration === undefined ? seekTime! :\n Math.min(seekTime!, staticDuration)),\n };\n stageStatus(batch, snapshot, 'paused');\n }\n queuePendingStart(target, snapshot);\n registerRun(target);\n settleProvisionalRun(target, undefined, undefined);\n }\n\n function enqueue(\n command: PlaybackCommandName,\n generation: number,\n argument?: number | 'error' | 'replace',\n ): PibblBeginCommandHandle | undefined {\n if (disposed) return undefined;\n queuedCommands++;\n let commandHandle!: PibblBeginCommandHandle;\n commandHandle = queueBeginCommand((snapshot, batch, sequence) => {\n pendingCommands.delete(commandHandle);\n if (pendingRetarget === commandHandle) pendingRetarget = undefined;\n queuedCommands--;\n if (disposed || generation !== queuedGeneration) return;\n recordSchedulerTrace({\n kind: 'animation-command',\n frameId: snapshot.frameId,\n logicalTime: snapshot.logicalTime,\n sequence,\n command,\n debugName: debugName(),\n });\n const previousContext = activePlaybackBeginContext;\n activePlaybackBeginContext = { snapshot, batch };\n try {\n acceptCommandWithoutTrace(command, generation, snapshot, batch, argument);\n } finally {\n activePlaybackBeginContext = previousContext;\n }\n });\n pendingCommands.add(commandHandle);\n return commandHandle;\n }\n\n function acceptCommandWithoutTrace(\n command: PlaybackCommandName,\n generation: number,\n snapshot: PibblFrameSnapshot,\n batch: SignalCommitBatch,\n argument?: number | 'error' | 'replace',\n ): void {\n // Keep trace emission in the immutable scheduler command wrapper so the\n // realm sequence, not a controller-local approximation, is recorded.\n if (command === 'play') {\n acceptPlay(generation, argument as 'error' | 'replace', snapshot, batch);\n return;\n }\n const target = run?.generation === generation ? run : undefined;\n if (target === undefined) {\n if (command === 'seek' || command === 'reverse' || command === 'finish') {\n acceptFreshControl(\n generation,\n command,\n snapshot,\n batch,\n command === 'seek' ? argument as number : undefined,\n );\n } else if (command === 'cancel') {\n stageStatus(batch, snapshot, 'cancelled');\n } else if (command === 'setPlaybackRate') {\n storedPlaybackRate = argument as number;\n }\n return;\n }\n if (target.status === 'ending') {\n if (command === 'seek' || command === 'reverse' || command === 'finish') {\n releaseRun(target);\n acceptFreshControl(\n generation,\n command,\n snapshot,\n batch,\n command === 'seek' ? argument as number : undefined,\n );\n } else if (command === 'setPlaybackRate') {\n storedPlaybackRate = argument as number;\n }\n return;\n }\n if (command === 'pause') {\n if (target.status !== 'paused') {\n const previousStatus = target.status;\n target.status = 'paused';\n target.unregisterAdvance?.();\n target.unregisterAdvance = undefined;\n stageStatus(batch, snapshot, 'paused');\n queueCurrentFrameCommitAcknowledgement((_committedSnapshot, outcome) => {\n if (outcome.applied || disposed || run !== target || target.released) return;\n target.status = previousStatus;\n registerRun(target);\n enqueue('pause', target.generation);\n });\n }\n return;\n }\n if (command === 'resume') {\n if (target.status === 'paused') {\n const previousAnchorPosition = target.anchorPosition;\n const previousAnchorLogicalTime = target.anchorLogicalTime;\n target.status = 'running';\n target.anchorPosition = target.position;\n target.anchorLogicalTime = snapshot.logicalTime;\n stageStatus(batch, snapshot, 'running');\n registerRun(target);\n queueCurrentFrameCommitAcknowledgement((_committedSnapshot, outcome) => {\n if (outcome.applied || disposed || run !== target || target.released) return;\n target.status = 'paused';\n target.anchorPosition = previousAnchorPosition;\n target.anchorLogicalTime = previousAnchorLogicalTime;\n target.unregisterAdvance?.();\n target.unregisterAdvance = undefined;\n enqueue('resume', target.generation);\n });\n }\n return;\n }\n if (command === 'cancel') {\n cancelRun(target, snapshot, batch);\n return;\n }\n if (command === 'seek') {\n const staticDuration = finiteDuration(getProgramRecord(target.program).duration);\n const time = Math.max(0, staticDuration === undefined ? argument as number :\n Math.min(argument as number, staticDuration));\n target.pendingEvaluation = { kind: 'seek', time };\n target.anchorPosition = time;\n target.anchorLogicalTime = snapshot.logicalTime;\n registerRun(target);\n return;\n }\n if (command === 'reverse') {\n target.direction = target.direction === 'forward' ? 'reverse' : 'forward';\n target.anchorPosition = target.position;\n target.anchorLogicalTime = snapshot.logicalTime;\n if (target.status === 'running') registerRun(target);\n return;\n }\n if (command === 'setPlaybackRate') {\n storedPlaybackRate = argument as number;\n target.playbackRate = storedPlaybackRate;\n target.anchorPosition = target.position;\n target.anchorLogicalTime = snapshot.logicalTime;\n return;\n }\n const unavailable = unavailableControlError(target.program, 'finish');\n if (unavailable !== undefined &&\n getProgramActivationRecord(target.activation).terminalDuration === undefined) {\n queueDiagnosticError(snapshot, unavailable, target.registrationOrder);\n return;\n }\n target.pendingEvaluation = { kind: 'finish' };\n registerRun(target);\n }\n\n const handle: PibblPlayback = Object.freeze({\n status: status.asReadonly(),\n currentTime: currentTime.asReadonly(),\n play(playOptions: { readonly conflict?: 'error' | 'replace' } = {}): void {\n if (disposed) return;\n const conflict = playOptions.conflict ?? options.conflict ?? 'error';\n if (conflict !== 'error' && conflict !== 'replace') {\n throw new TypeError('Pibbl animation playback conflict must be \"error\" or \"replace\".');\n }\n const generation = ++queuedGeneration;\n enqueue('play', generation, conflict);\n },\n pause(): void {\n enqueue('pause', queuedGeneration);\n },\n resume(): void {\n enqueue('resume', queuedGeneration);\n },\n cancel(): void {\n enqueue('cancel', queuedGeneration);\n },\n finish(): void {\n enqueue('finish', queuedGeneration);\n },\n seek(milliseconds: number): void {\n if (disposed) return;\n if (!Number.isFinite(milliseconds)) {\n throw new RangeError('Pibbl animation playback seek time must be finite.');\n }\n enqueue('seek', queuedGeneration, milliseconds);\n },\n reverse(): void {\n enqueue('reverse', queuedGeneration);\n },\n setPlaybackRate(rate: number): void {\n if (disposed) return;\n if (!Number.isFinite(rate) || rate <= 0) {\n throw new RangeError(\n 'Pibbl animation playback rate must be finite and greater than zero.',\n );\n }\n enqueue('setPlaybackRate', queuedGeneration, rate);\n },\n });\n\n return Object.freeze({\n handle,\n adopt(nextProgram: PibblAnimationProgram, nextOptions: PibblPlaybackOptions = {}): void {\n if (disposed) return;\n const candidate = normalizeAnimationPlaybackCandidate(nextProgram, nextOptions);\n program = candidate.program;\n options = candidate.options;\n },\n committedSpringSnapshot(): SpringSample | undefined {\n const target = run;\n if (disposed || target === undefined || target.released) return undefined;\n const programRecord = getProgramRecord(target.program);\n if (programRecord.kind !== 'track') return undefined;\n const definitionRecord = getDefinitionRecord(programRecord.definition);\n if (definitionRecord.kind !== 'spring') return undefined;\n return sampleSpring(definitionRecord, target.position / 1000);\n },\n retarget(nextProgram: PibblAnimationProgram, nextOptions: PibblPlaybackOptions = {}): void {\n if (disposed) return;\n const candidate = normalizeAnimationPlaybackCandidate(nextProgram, nextOptions);\n program = candidate.program;\n options = candidate.options;\n if (pendingRetarget !== undefined) {\n pendingRetarget.cancel();\n if (pendingCommands.delete(pendingRetarget)) queuedCommands--;\n }\n const generation = ++queuedGeneration;\n pendingRetarget = enqueue('play', generation, 'replace');\n },\n dispose(): void {\n if (disposed) return;\n disposed = true;\n queuedGeneration++;\n for (const commandHandle of pendingCommands) {\n commandHandle.cancel();\n queuedCommands--;\n }\n pendingCommands.clear();\n pendingRetarget = undefined;\n if (run !== undefined) releaseRun(run);\n if (delivery !== undefined) {\n queuedMilestones -= delivery.events.length;\n delivery.events.length = 0;\n delivery.errors.length = 0;\n delivery.terminalRuns.clear();\n }\n const schedulerPhase = snapshotRealmScheduler().phase;\n if (schedulerPhase !== 'advance' && schedulerPhase !== 'render') {\n status.set('disposed');\n } else {\n queueBeginCommand((snapshot, batch) => {\n batch.stage(status, 'disposed', metadataWriter);\n recordSchedulerTrace({\n kind: 'animation-write',\n frameId: snapshot.frameId,\n logicalTime: snapshot.logicalTime,\n debugName: debugName(),\n target: 'status',\n outcome: 'staged',\n });\n });\n }\n },\n });\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import {\n getSignalNode,\n signal,\n type SignalCommitBatch,\n} from '../signals/graph.js';\nimport type { WritableSignal } from '../signals/types.js';\nimport {\n queueBeginCommand,\n queueCurrentFrameCommitAcknowledgement,\n queueCurrentFrameCompletion,\n queueCurrentFrameOrderedPlaybackCompletion,\n recordSchedulerTrace,\n registerAdvanceParticipant,\n snapshotRealmScheduler,\n} from '../scheduler/realm-scheduler.js';\nimport type {\n PibblBeginCommandHandle,\n PibblFrameSnapshot,\n} from '../scheduler/types.js';\nimport { getDefinitionRecord } from './definition.js';\nimport { sampleSpring, type SpringSample } from './spring.js';\nimport {\n adoptProgramActivationFork,\n evaluateProgram,\n finishProgram,\n forkProgramActivation,\n getProgramActivationRecord,\n preflightProgramActivation,\n releaseProgramActivation,\n seekProgram,\n type ProgramActivation,\n type ProgramEvaluationResult,\n} from './evaluate.js';\nimport { getProgramRecord, type ProgramDuration } from './program.js';\nimport type {\n PibblAnimationProgram,\n PibblPlayback,\n PibblPlaybackEvent,\n PibblPlaybackOptions,\n PibblPlaybackStatus,\n} from './types.js';\nimport {\n acquireTransactionalProgramWriterLeases,\n preflightProgramWriterLeaseAcquisition,\n type AnimationWriterLeaseReplacement,\n type TransactionalProgramWriterLease,\n} from './writer-leases.js';\n\ntype PlaybackCommandName =\n | 'play'\n | 'pause'\n | 'resume'\n | 'cancel'\n | 'finish'\n | 'seek'\n | 'reverse'\n | 'setPlaybackRate';\n\ntype PendingEvaluation =\n | {\n readonly kind: 'seek';\n readonly time: number;\n readonly direction?: 'forward' | 'reverse';\n }\n | { readonly kind: 'finish' };\n\ninterface PlaybackRun {\n readonly generation: number;\n readonly registration: object;\n readonly registrationOrder: number;\n readonly token: object;\n readonly lease: TransactionalProgramWriterLease;\n readonly activation: ProgramActivation;\n readonly program: PibblAnimationProgram;\n direction: 'forward' | 'reverse';\n playbackRate: number;\n position: number;\n anchorPosition: number;\n anchorLogicalTime: number;\n previousTime: number | undefined;\n status: 'running' | 'paused' | 'ending';\n pendingEvaluation: PendingEvaluation | undefined;\n unregisterAdvance: (() => void) | undefined;\n released: boolean;\n startPending: boolean;\n startQueuedFrameId: number | undefined;\n}\n\ninterface PendingTraceWrite {\n readonly signal: WritableSignal<unknown>;\n readonly version: number;\n readonly target: string;\n}\n\ninterface FrameDelivery {\n readonly frameId: number;\n readonly logicalTime: number;\n readonly events: Array<{\n readonly event: PibblPlaybackEvent;\n readonly registrationOrder: number;\n }>;\n readonly errors: Array<{\n readonly error: unknown;\n readonly registrationOrder: number;\n readonly commitRequired: boolean;\n }>;\n readonly terminalRuns: Set<PlaybackRun>;\n readonly writes: PendingTraceWrite[];\n commitApplied: boolean;\n}\n\nexport interface AnimationPlaybackSnapshot {\n readonly activePlaybacks: number;\n readonly createdPlaybacks: number;\n readonly releasedPlaybacks: number;\n readonly queuedCommands: number;\n readonly queuedMilestones: number;\n readonly outputStageAttempts: number;\n}\n\n/** Internal root lifetime used to revoke a deferred disposal publication. */\ninterface DeferredStatusCommandOwner {\n add(teardown: () => void): void;\n remove(teardown: () => void): void;\n}\n\nexport interface AnimationPlaybackController {\n readonly handle: PibblPlayback;\n adopt(program: PibblAnimationProgram, options?: PibblPlaybackOptions): void;\n committedSpringSnapshot(): SpringSample | undefined;\n retarget(program: PibblAnimationProgram, options?: PibblPlaybackOptions): void;\n /** @internal Associates render-phase disposal work with the owning root. */\n setDeferredStatusCommandOwner(owner: DeferredStatusCommandOwner): void;\n dispose(): void;\n}\n\nexport interface AnimationPlaybackCandidate {\n readonly program: PibblAnimationProgram;\n readonly options: PibblPlaybackOptions;\n}\n\nlet nextPlaybackRegistrationOrder = 0;\nlet activePlaybacks = 0;\nlet createdPlaybacks = 0;\nlet releasedPlaybacks = 0;\nlet queuedCommands = 0;\nlet queuedMilestones = 0;\nlet outputStageAttempts = 0;\nlet activePlaybackBeginContext: {\n readonly snapshot: PibblFrameSnapshot;\n readonly batch: SignalCommitBatch;\n} | undefined;\n\n/** @internal Deterministic resource counters for tests and diagnostics. */\nexport function animationPlaybackSnapshot(): AnimationPlaybackSnapshot {\n return Object.freeze({\n activePlaybacks,\n createdPlaybacks,\n releasedPlaybacks,\n queuedCommands,\n queuedMilestones,\n outputStageAttempts,\n });\n}\n\nfunction freezePath(path: readonly number[]): readonly number[] {\n return Object.freeze([...path]);\n}\n\nfunction playbackEvent(\n type: PibblPlaybackEvent['type'],\n snapshot: PibblFrameSnapshot,\n programPath: readonly number[] = [],\n iteration = 0,\n marker?: string,\n): PibblPlaybackEvent {\n return Object.freeze({\n type,\n logicalTime: snapshot.logicalTime,\n frameId: snapshot.frameId,\n programPath: freezePath(programPath),\n iteration,\n ...(marker === undefined ? {} : { marker }),\n });\n}\n\nfunction validateOptions(options: PibblPlaybackOptions): void {\n if (options.conflict !== undefined &&\n options.conflict !== 'error' && options.conflict !== 'replace') {\n throw new TypeError('Pibbl animation playback conflict must be \"error\" or \"replace\".');\n }\n if (options.debugName !== undefined &&\n (typeof options.debugName !== 'string' || options.debugName.length === 0)) {\n throw new TypeError('Pibbl animation playback debugName must be nonempty when provided.');\n }\n if (options.onEvent !== undefined && typeof options.onEvent !== 'function') {\n throw new TypeError('Pibbl animation playback onEvent must be a function.');\n }\n if (options.onError !== undefined && typeof options.onError !== 'function') {\n throw new TypeError('Pibbl animation playback onError must be a function.');\n }\n}\n\n/** @internal Creates one validated immutable render-time playback candidate. */\nexport function normalizeAnimationPlaybackCandidate(\n program: PibblAnimationProgram,\n options: PibblPlaybackOptions = {},\n): AnimationPlaybackCandidate {\n getProgramRecord(program);\n const normalizedOptions = Object.freeze({ ...options });\n validateOptions(normalizedOptions);\n return Object.freeze({ program, options: normalizedOptions });\n}\n\nfunction firstStepperName(program: PibblAnimationProgram): string | undefined {\n const record = getProgramRecord(program);\n if (record.kind === 'track') {\n const definition = getDefinitionRecord(record.definition);\n return definition.kind === 'stepper' ? definition.debugName : undefined;\n }\n for (const child of record.children) {\n const name = firstStepperName(child);\n if (name !== undefined) return name;\n }\n return undefined;\n}\n\nfunction unavailableControlError(\n program: PibblAnimationProgram,\n control: 'reverse' | 'finish',\n): Error | undefined {\n const duration = getProgramRecord(program).duration;\n if (duration.kind === 'infinite') {\n return new TypeError(\n `Pibbl animation program is infinite; ${control} is unavailable.`,\n );\n }\n if (duration.kind === 'unresolved-stepper') {\n const name = firstStepperName(program);\n const label = name === undefined ? 'Pibbl animation stateful program' :\n `Pibbl animation stepper \"${name}\"`;\n return new TypeError(\n `${label} terminal time is not discovered; ${control} is unavailable.`,\n );\n }\n return undefined;\n}\n\nfunction finiteDuration(duration: ProgramDuration): number | undefined {\n return duration.kind === 'finite' ? duration.milliseconds : undefined;\n}\n\n/**\n * Creates one scheduler-owned playback slot. Component lifetime is added by\n * usePlayback in the following implementation task.\n */\nexport function createAnimationPlaybackController(\n initialProgram: PibblAnimationProgram,\n initialOptions: PibblPlaybackOptions = {},\n): AnimationPlaybackController {\n const initialCandidate = normalizeAnimationPlaybackCandidate(\n initialProgram,\n initialOptions,\n );\n\n let program = initialCandidate.program;\n let options = initialCandidate.options;\n let disposed = false;\n let queuedGeneration = 0;\n let run: PlaybackRun | undefined;\n let storedPlaybackRate = 1;\n let delivery: FrameDelivery | undefined;\n let pendingRetarget: PibblBeginCommandHandle | undefined;\n let deferredStatusCommandOwner: DeferredStatusCommandOwner | undefined;\n const pendingCommands = new Set<PibblBeginCommandHandle>();\n const metadataWriter = Object.freeze({ name: 'Pibbl playback metadata' });\n const status = signal<PibblPlaybackStatus>('idle', {\n debugName: options.debugName === undefined ? undefined : `${options.debugName} status`,\n });\n const currentTime = signal(0, {\n debugName: options.debugName === undefined ? undefined : `${options.debugName} current time`,\n });\n\n function debugName(): string | undefined {\n return options.debugName;\n }\n\n function ensureDelivery(snapshot: PibblFrameSnapshot): FrameDelivery {\n if (delivery?.frameId === snapshot.frameId) return delivery;\n const current: FrameDelivery = {\n frameId: snapshot.frameId,\n logicalTime: snapshot.logicalTime,\n events: [],\n errors: [],\n terminalRuns: new Set(),\n writes: [],\n commitApplied: false,\n };\n delivery = current;\n queueCurrentFrameCommitAcknowledgement((_snapshot, outcome) => {\n current.commitApplied = outcome.applied;\n });\n queueCurrentFrameCompletion(() => {\n if (delivery === current) delivery = undefined;\n if (!current.commitApplied) {\n queuedMilestones -= current.events.length;\n } else {\n for (const terminalRun of current.terminalRuns) releaseRun(terminalRun);\n\n for (const write of current.writes) {\n const node = getSignalNode(write.signal);\n recordSchedulerTrace({\n kind: 'animation-write',\n frameId: current.frameId,\n logicalTime: current.logicalTime,\n debugName: debugName(),\n target: write.target,\n outcome: node.version === write.version ?\n 'equality-suppressed' : 'staged',\n });\n }\n\n for (const { event, registrationOrder } of current.events) {\n queueCurrentFrameOrderedPlaybackCompletion(registrationOrder, () => {\n queuedMilestones--;\n if (!disposed) options.onEvent?.(event);\n });\n }\n }\n for (const { error, registrationOrder, commitRequired } of current.errors) {\n if (commitRequired && !current.commitApplied) continue;\n queueCurrentFrameOrderedPlaybackCompletion(registrationOrder, () => {\n if (disposed) return;\n if (options.onError) options.onError(error);\n else throw error;\n });\n }\n });\n return current;\n }\n\n function queueEvent(\n snapshot: PibblFrameSnapshot,\n event: PibblPlaybackEvent,\n registrationOrder: number,\n ): void {\n const frame = ensureDelivery(snapshot);\n frame.events.push({ event, registrationOrder });\n queuedMilestones++;\n recordSchedulerTrace({\n kind: 'animation-milestone',\n frameId: snapshot.frameId,\n logicalTime: snapshot.logicalTime,\n debugName: debugName(),\n event: event.type,\n programPath: event.programPath,\n iteration: event.iteration,\n });\n }\n\n function queueError(\n snapshot: PibblFrameSnapshot,\n error: unknown,\n registrationOrder: number,\n trace = true,\n commitRequired = true,\n ): void {\n ensureDelivery(snapshot).errors.push({ error, registrationOrder, commitRequired });\n if (trace) {\n recordSchedulerTrace({\n kind: 'animation-error',\n frameId: snapshot.frameId,\n logicalTime: snapshot.logicalTime,\n debugName: debugName(),\n error,\n });\n }\n }\n\n function queueDiagnosticError(\n snapshot: PibblFrameSnapshot,\n error: unknown,\n registrationOrder: number,\n ): void {\n queueError(snapshot, error, registrationOrder, true, false);\n }\n\n function queuePendingStart(target: PlaybackRun, snapshot: PibblFrameSnapshot): void {\n if (!target.startPending || target.startQueuedFrameId === snapshot.frameId) return;\n target.startQueuedFrameId = snapshot.frameId;\n queueEvent(snapshot, playbackEvent('start', snapshot), target.registrationOrder);\n queueCurrentFrameCommitAcknowledgement((_committedSnapshot, outcome) => {\n if (outcome.applied && !target.released) target.startPending = false;\n });\n }\n\n function stage<T>(\n batch: SignalCommitBatch,\n snapshot: PibblFrameSnapshot,\n target: WritableSignal<T>,\n value: T,\n label: string,\n ): void {\n const node = getSignalNode(target);\n ensureDelivery(snapshot).writes.push({\n signal: target as WritableSignal<unknown>,\n version: node.version,\n target: label,\n });\n batch.stage(target, value, metadataWriter);\n }\n\n function stageStatus(\n batch: SignalCommitBatch,\n snapshot: PibblFrameSnapshot,\n value: PibblPlaybackStatus,\n ): void {\n stage(batch, snapshot, status, value, 'status');\n }\n\n function stageCurrentTime(\n batch: SignalCommitBatch,\n snapshot: PibblFrameSnapshot,\n value: number,\n ): void {\n stage(batch, snapshot, currentTime, value, 'currentTime');\n }\n\n function releaseRun(target: PlaybackRun): void {\n if (target.released) return;\n target.released = true;\n target.unregisterAdvance?.();\n target.unregisterAdvance = undefined;\n target.lease.release();\n releaseProgramActivation(target.activation);\n activePlaybacks--;\n releasedPlaybacks++;\n if (run === target) run = undefined;\n }\n\n function scheduleTerminal(snapshot: PibblFrameSnapshot, target: PlaybackRun): void {\n ensureDelivery(snapshot).terminalRuns.add(target);\n }\n\n function cancelRun(\n target: PlaybackRun,\n snapshot: PibblFrameSnapshot,\n batch: SignalCommitBatch,\n releaseImmediately = false,\n ): void {\n if (target.status === 'ending') return;\n queuePendingStart(target, snapshot);\n const previousStatus = target.status;\n target.status = 'ending';\n stageStatus(batch, snapshot, 'cancelled');\n queueEvent(snapshot, playbackEvent('cancel', snapshot), target.registrationOrder);\n if (releaseImmediately) {\n target.unregisterAdvance?.();\n target.unregisterAdvance = undefined;\n scheduleTerminal(snapshot, target);\n releaseRun(target);\n return;\n }\n queueCurrentFrameCommitAcknowledgement((_committedSnapshot, outcome) => {\n if (disposed || run !== target || target.released) return;\n if (!outcome.applied) {\n target.status = previousStatus;\n enqueue('cancel', target.generation);\n return;\n }\n target.unregisterAdvance?.();\n target.unregisterAdvance = undefined;\n scheduleTerminal(snapshot, target);\n });\n }\n\n function beginRunReplacement(\n target: PlaybackRun,\n snapshot: PibblFrameSnapshot,\n batch: SignalCommitBatch,\n ): AnimationWriterLeaseReplacement {\n if (target.status === 'ending' || target.released) {\n throw new Error('Pibbl animation playback run is already ending.');\n }\n const previousStatus = target.status;\n const previousStartPending = target.startPending;\n const wasRegistered = target.unregisterAdvance !== undefined;\n queuePendingStart(target, snapshot);\n target.status = 'ending';\n target.unregisterAdvance?.();\n target.unregisterAdvance = undefined;\n stageStatus(batch, snapshot, 'cancelled');\n queueEvent(snapshot, playbackEvent('cancel', snapshot), target.registrationOrder);\n let pending = true;\n return Object.freeze({\n commit(): void {\n if (!pending) return;\n pending = false;\n scheduleTerminal(snapshot, target);\n },\n rollback(): void {\n if (!pending) return;\n pending = false;\n if (target.released) return;\n if (disposed) {\n releaseRun(target);\n return;\n }\n target.status = previousStatus;\n target.startPending = previousStartPending;\n if (wasRegistered) registerRun(target);\n },\n });\n }\n\n function queueEvaluationTraces(\n target: PlaybackRun,\n snapshot: PibblFrameSnapshot,\n result: ProgramEvaluationResult,\n stagedOutputs: ReadonlySet<WritableSignal<unknown>>,\n sampledTime: number,\n ): void {\n recordSchedulerTrace({\n kind: 'animation-sample',\n frameId: snapshot.frameId,\n logicalTime: snapshot.logicalTime,\n registrationOrder: target.registrationOrder,\n debugName: debugName(),\n localTime: sampledTime,\n direction: target.direction,\n });\n for (const output of stagedOutputs) {\n ensureDelivery(snapshot).writes.push({\n signal: output,\n version: getSignalNode(output).version,\n target: getSignalNode(output).debugName ?? '<unnamed signal>',\n });\n }\n for (const trace of result.steppers) {\n recordSchedulerTrace({\n kind: 'animation-stepper',\n frameId: snapshot.frameId,\n logicalTime: snapshot.logicalTime,\n debugName: debugName(),\n programPath: trace.programPath,\n repeatIterations: trace.repeatIterations,\n appliedSteps: trace.appliedSteps,\n retainedRemainderMilliseconds: trace.retainedRemainderMilliseconds,\n clampedElapsedMilliseconds: trace.clampedElapsedMilliseconds,\n discardedElapsedMilliseconds: trace.discardedElapsedMilliseconds,\n });\n }\n }\n\n function queueEvaluationMilestones(\n target: PlaybackRun,\n snapshot: PibblFrameSnapshot,\n result: ProgramEvaluationResult,\n ): void {\n for (const milestone of result.milestones) {\n queueEvent(snapshot, playbackEvent(\n milestone.kind,\n snapshot,\n milestone.programPath,\n milestone.iteration,\n milestone.kind === 'marker' ? milestone.marker : undefined,\n ), target.registrationOrder);\n }\n }\n\n function clampRunTime(target: PlaybackRun, candidate: number): number {\n const record = getProgramActivationRecord(target.activation);\n const knownDuration = record.terminalDuration ??\n finiteDuration(getProgramRecord(target.program).duration);\n return Math.max(0, knownDuration === undefined ? candidate :\n Math.min(candidate, knownDuration));\n }\n\n function registerRun(target: PlaybackRun): void {\n if (target.unregisterAdvance !== undefined || target.released) return;\n target.unregisterAdvance = registerAdvanceParticipant((snapshot, batch) => {\n if (disposed || run !== target || target.released || target.status === 'ending') return;\n advanceRun(target, snapshot, batch);\n }, 'animation');\n }\n\n function advanceRun(\n target: PlaybackRun,\n snapshot: PibblFrameSnapshot,\n batch: SignalCommitBatch,\n ): void {\n queuePendingStart(target, snapshot);\n const evaluationActivation = forkProgramActivation(target.activation);\n const stagedOutputs = new Set<WritableSignal<unknown>>();\n const evaluationBatch: SignalCommitBatch = {\n read<T>(value: WritableSignal<T>): T {\n return batch.read(value);\n },\n stage<T>(value: WritableSignal<T>, nextValue: T, writer: object): void {\n batch.stage(value, nextValue, writer);\n if (writer === target.token) {\n outputStageAttempts++;\n stagedOutputs.add(value as WritableSignal<unknown>);\n }\n },\n discardWriter(writer: object): void {\n batch.discardWriter(writer);\n },\n registerLifecycle(writer, lifecycle): void {\n batch.registerLifecycle(writer, lifecycle);\n },\n commit(): void {\n batch.commit();\n },\n clear(): void {\n batch.clear();\n },\n };\n const pending = target.pendingEvaluation;\n let destination = pending?.kind === 'seek' ? pending.time :\n target.anchorPosition +\n (target.direction === 'forward' ? 1 : -1) *\n (snapshot.logicalTime - target.anchorLogicalTime) * target.playbackRate;\n destination = clampRunTime(target, destination);\n let result: ProgramEvaluationResult;\n try {\n if (pending?.kind === 'finish') {\n const staticDuration = finiteDuration(getProgramRecord(target.program).duration);\n if (staticDuration === undefined) {\n result = finishProgram(evaluationActivation, {\n previousTime: target.previousTime,\n frameId: snapshot.frameId,\n writer: target.token,\n batch: evaluationBatch,\n });\n } else {\n result = seekProgram(evaluationActivation, {\n previousTime: target.previousTime,\n time: staticDuration,\n direction: 'forward',\n frameId: snapshot.frameId,\n writer: target.token,\n batch: evaluationBatch,\n });\n }\n } else if (pending?.kind === 'seek') {\n result = seekProgram(evaluationActivation, {\n previousTime: target.previousTime,\n time: destination,\n direction: pending.direction ??\n (destination < target.position ? 'reverse' : 'forward'),\n frameId: snapshot.frameId,\n writer: target.token,\n batch: evaluationBatch,\n });\n } else {\n result = evaluateProgram(evaluationActivation, {\n previousTime: target.previousTime,\n time: destination,\n direction: target.direction,\n frameId: snapshot.frameId,\n writer: target.token,\n batch: evaluationBatch,\n });\n }\n } catch (error) {\n releaseProgramActivation(evaluationActivation);\n batch.discardWriter(target.token);\n stageStatus(batch, snapshot, 'cancelled');\n recordSchedulerTrace({\n kind: 'animation-error',\n frameId: snapshot.frameId,\n logicalTime: snapshot.logicalTime,\n debugName: debugName(),\n error,\n });\n queueCurrentFrameCommitAcknowledgement((_committedSnapshot, outcome) => {\n if (!outcome.applied || disposed || run !== target || target.released) return;\n target.status = 'ending';\n target.unregisterAdvance?.();\n target.unregisterAdvance = undefined;\n queueEvent(snapshot, playbackEvent('cancel', snapshot), target.registrationOrder);\n queueError(snapshot, error, target.registrationOrder, false);\n scheduleTerminal(snapshot, target);\n });\n return;\n }\n\n if (disposed || run !== target || target.released) {\n releaseProgramActivation(evaluationActivation);\n batch.discardWriter(target.token);\n return;\n }\n\n const duration = result.terminal.duration;\n const presentedTime = duration !== undefined && Number.isFinite(duration) &&\n result.terminal.atEnd ? duration : destination;\n stageCurrentTime(batch, snapshot, presentedTime);\n queueEvaluationTraces(target, snapshot, result, stagedOutputs, presentedTime);\n\n const terminalReached = target.status === 'running' && result.terminal.reached ||\n pending?.kind === 'finish';\n if (terminalReached) {\n stageStatus(batch, snapshot, 'finished');\n } else {\n stageStatus(batch, snapshot, target.status === 'paused' ? 'paused' : 'running');\n }\n queueCurrentFrameCommitAcknowledgement((_committedSnapshot, outcome) => {\n if (!outcome.applied || disposed || run !== target || target.released) {\n releaseProgramActivation(evaluationActivation);\n return;\n }\n adoptProgramActivationFork(target.activation, evaluationActivation);\n target.position = presentedTime;\n target.previousTime = presentedTime;\n if (pending?.kind === 'seek') {\n target.anchorPosition = presentedTime;\n target.anchorLogicalTime = snapshot.logicalTime;\n }\n target.pendingEvaluation = undefined;\n queueEvaluationMilestones(target, snapshot, result);\n if (terminalReached) {\n target.unregisterAdvance?.();\n target.unregisterAdvance = undefined;\n queueEvent(snapshot, playbackEvent('finish', snapshot), target.registrationOrder);\n scheduleTerminal(snapshot, target);\n } else if (target.status === 'paused') {\n target.unregisterAdvance?.();\n target.unregisterAdvance = undefined;\n }\n });\n }\n\n function createRun(\n generation: number,\n snapshot: PibblFrameSnapshot,\n batch: SignalCommitBatch,\n conflict: 'error' | 'replace',\n ignoredToken?: object,\n ): PlaybackRun | undefined {\n const registration = Object.freeze({});\n const registrationOrder = ++nextPlaybackRegistrationOrder;\n const token = Object.freeze({ registrationOrder });\n let target!: PlaybackRun;\n try {\n const lease = acquireTransactionalProgramWriterLeases(program, registration, {\n token,\n registrationOrder,\n debugName: debugName(),\n cancel(): void {\n if (target !== undefined && !target.released) {\n const context = activePlaybackBeginContext;\n if (context === undefined) releaseRun(target);\n else cancelRun(target, context.snapshot, context.batch, true);\n }\n },\n preflightReplacement(): void {\n if (target === undefined || target.released) {\n throw new Error('Pibbl animation replacement owner is unavailable.');\n }\n if (activePlaybackBeginContext === undefined) {\n throw new Error('Pibbl animation replacement must begin during Begin.');\n }\n if (target.status === 'ending') {\n throw new Error('Pibbl animation playback run is already ending.');\n }\n },\n beginReplacement(): AnimationWriterLeaseReplacement {\n if (target === undefined || target.released) {\n throw new Error('Pibbl animation replacement owner is unavailable.');\n }\n const context = activePlaybackBeginContext;\n if (context === undefined) {\n throw new Error('Pibbl animation replacement must begin during Begin.');\n }\n return beginRunReplacement(target, context.snapshot, context.batch);\n },\n }, { conflict, ignoredToken });\n target = {\n generation,\n registration,\n registrationOrder,\n token,\n lease,\n activation: lease.activation,\n program,\n direction: 'forward',\n playbackRate: storedPlaybackRate,\n position: 0,\n anchorPosition: 0,\n anchorLogicalTime: snapshot.logicalTime,\n previousTime: undefined,\n status: 'running',\n pendingEvaluation: undefined,\n unregisterAdvance: undefined,\n released: false,\n startPending: false,\n startQueuedFrameId: undefined,\n };\n } catch (error) {\n stageStatus(batch, snapshot, 'cancelled');\n queueDiagnosticError(snapshot, error, registrationOrder);\n return undefined;\n }\n run = target;\n activePlaybacks++;\n createdPlaybacks++;\n return target;\n }\n\n function settleProvisionalRun(\n target: PlaybackRun,\n previousRun: PlaybackRun | undefined,\n additionalReplacement: AnimationWriterLeaseReplacement | undefined,\n ): void {\n if (target.lease.replacedOwnerCount === 0 && additionalReplacement === undefined) return;\n queueCurrentFrameCommitAcknowledgement((_snapshot, outcome) => {\n if (outcome.applied) {\n target.lease.commitReplacement();\n additionalReplacement?.commit();\n return;\n }\n const targetAlreadyReleased = target.released;\n target.unregisterAdvance?.();\n target.unregisterAdvance = undefined;\n target.released = true;\n if (run === target) run = previousRun;\n if (previousRun !== undefined) queuedGeneration = previousRun.generation;\n if (!targetAlreadyReleased) {\n if (target.lease.replacedOwnerCount === 0) target.lease.release();\n else target.lease.rollbackReplacement();\n }\n additionalReplacement?.rollback();\n if (!targetAlreadyReleased) {\n releaseProgramActivation(target.activation);\n activePlaybacks--;\n releasedPlaybacks++;\n }\n });\n }\n\n function acceptPlay(\n generation: number,\n conflict: 'error' | 'replace',\n snapshot: PibblFrameSnapshot,\n batch: SignalCommitBatch,\n ): void {\n try {\n if (conflict === 'error') {\n preflightProgramWriterLeaseAcquisition(program, run?.token);\n } else {\n preflightProgramActivation(program);\n }\n } catch (error) {\n if (run === undefined || run.status === 'ending') {\n stageStatus(batch, snapshot, 'cancelled');\n } else if (queuedGeneration === generation) {\n queuedGeneration = run.generation;\n }\n queueDiagnosticError(\n snapshot,\n error,\n run?.registrationOrder ?? Number.MAX_SAFE_INTEGER,\n );\n return;\n }\n const previousRun = run;\n const target = createRun(\n generation,\n snapshot,\n batch,\n conflict,\n previousRun?.token,\n );\n if (target === undefined) return;\n let additionalReplacement: AnimationWriterLeaseReplacement | undefined;\n if (previousRun !== undefined && !previousRun.released &&\n previousRun.status !== 'ending') {\n additionalReplacement = beginRunReplacement(previousRun, snapshot, batch);\n }\n stageStatus(batch, snapshot, 'scheduled');\n stageCurrentTime(batch, snapshot, 0);\n stageStatus(batch, snapshot, 'running');\n target.startPending = true;\n queuePendingStart(target, snapshot);\n registerRun(target);\n settleProvisionalRun(target, previousRun, additionalReplacement);\n }\n\n function acceptFreshControl(\n generation: number,\n command: 'seek' | 'reverse' | 'finish',\n snapshot: PibblFrameSnapshot,\n batch: SignalCommitBatch,\n seekTime?: number,\n ): void {\n if (command !== 'seek') {\n const error = unavailableControlError(program, command);\n if (error !== undefined) {\n queueDiagnosticError(snapshot, error, Number.MAX_SAFE_INTEGER);\n return;\n }\n }\n const target = createRun(\n generation,\n snapshot,\n batch,\n options.conflict ?? 'error',\n );\n if (target === undefined) return;\n target.status = command === 'reverse' ? 'running' : 'paused';\n if (command === 'reverse') {\n const duration = finiteDuration(getProgramRecord(target.program).duration)!;\n target.direction = 'reverse';\n target.position = duration;\n target.anchorPosition = duration;\n target.pendingEvaluation = { kind: 'seek', time: duration, direction: 'reverse' };\n stageStatus(batch, snapshot, 'scheduled');\n stageStatus(batch, snapshot, 'running');\n target.startPending = true;\n } else if (command === 'finish') {\n target.status = 'running';\n target.pendingEvaluation = { kind: 'finish' };\n stageStatus(batch, snapshot, 'scheduled');\n stageStatus(batch, snapshot, 'running');\n target.startPending = true;\n } else {\n const staticDuration = finiteDuration(getProgramRecord(target.program).duration);\n target.pendingEvaluation = {\n kind: 'seek',\n time: Math.max(0, staticDuration === undefined ? seekTime! :\n Math.min(seekTime!, staticDuration)),\n };\n stageStatus(batch, snapshot, 'paused');\n }\n queuePendingStart(target, snapshot);\n registerRun(target);\n settleProvisionalRun(target, undefined, undefined);\n }\n\n function enqueue(\n command: PlaybackCommandName,\n generation: number,\n argument?: number | 'error' | 'replace',\n ): PibblBeginCommandHandle | undefined {\n if (disposed) return undefined;\n queuedCommands++;\n let commandHandle!: PibblBeginCommandHandle;\n commandHandle = queueBeginCommand((snapshot, batch, sequence) => {\n pendingCommands.delete(commandHandle);\n if (pendingRetarget === commandHandle) pendingRetarget = undefined;\n queuedCommands--;\n if (disposed || generation !== queuedGeneration) return;\n recordSchedulerTrace({\n kind: 'animation-command',\n frameId: snapshot.frameId,\n logicalTime: snapshot.logicalTime,\n sequence,\n command,\n debugName: debugName(),\n });\n const previousContext = activePlaybackBeginContext;\n activePlaybackBeginContext = { snapshot, batch };\n try {\n acceptCommandWithoutTrace(command, generation, snapshot, batch, argument);\n } finally {\n activePlaybackBeginContext = previousContext;\n }\n });\n pendingCommands.add(commandHandle);\n return commandHandle;\n }\n\n function stageDisposedAfterRender(): void {\n let command!: PibblBeginCommandHandle;\n let revokeFromOwner: (() => void) | undefined;\n command = queueBeginCommand((snapshot, batch) => {\n try {\n batch.stage(status, 'disposed', metadataWriter);\n recordSchedulerTrace({\n kind: 'animation-write',\n frameId: snapshot.frameId,\n logicalTime: snapshot.logicalTime,\n debugName: debugName(),\n target: 'status',\n outcome: 'staged',\n });\n } finally {\n revokeFromOwner?.();\n }\n });\n const owner = deferredStatusCommandOwner;\n if (owner === undefined) return;\n const revoke = () => {\n command.cancel();\n const phase = snapshotRealmScheduler().phase;\n if (phase !== 'advance' && phase !== 'render') status.set('disposed');\n };\n revokeFromOwner = () => owner.remove(revoke);\n owner.add(revoke);\n }\n\n function acceptCommandWithoutTrace(\n command: PlaybackCommandName,\n generation: number,\n snapshot: PibblFrameSnapshot,\n batch: SignalCommitBatch,\n argument?: number | 'error' | 'replace',\n ): void {\n // Keep trace emission in the immutable scheduler command wrapper so the\n // realm sequence, not a controller-local approximation, is recorded.\n if (command === 'play') {\n acceptPlay(generation, argument as 'error' | 'replace', snapshot, batch);\n return;\n }\n const target = run?.generation === generation ? run : undefined;\n if (target === undefined) {\n if (command === 'seek' || command === 'reverse' || command === 'finish') {\n acceptFreshControl(\n generation,\n command,\n snapshot,\n batch,\n command === 'seek' ? argument as number : undefined,\n );\n } else if (command === 'cancel') {\n stageStatus(batch, snapshot, 'cancelled');\n } else if (command === 'setPlaybackRate') {\n storedPlaybackRate = argument as number;\n }\n return;\n }\n if (target.status === 'ending') {\n if (command === 'seek' || command === 'reverse' || command === 'finish') {\n releaseRun(target);\n acceptFreshControl(\n generation,\n command,\n snapshot,\n batch,\n command === 'seek' ? argument as number : undefined,\n );\n } else if (command === 'setPlaybackRate') {\n storedPlaybackRate = argument as number;\n }\n return;\n }\n if (command === 'pause') {\n if (target.status !== 'paused') {\n const previousStatus = target.status;\n target.status = 'paused';\n target.unregisterAdvance?.();\n target.unregisterAdvance = undefined;\n stageStatus(batch, snapshot, 'paused');\n queueCurrentFrameCommitAcknowledgement((_committedSnapshot, outcome) => {\n if (outcome.applied || disposed || run !== target || target.released) return;\n target.status = previousStatus;\n registerRun(target);\n enqueue('pause', target.generation);\n });\n }\n return;\n }\n if (command === 'resume') {\n if (target.status === 'paused') {\n const previousAnchorPosition = target.anchorPosition;\n const previousAnchorLogicalTime = target.anchorLogicalTime;\n target.status = 'running';\n target.anchorPosition = target.position;\n target.anchorLogicalTime = snapshot.logicalTime;\n stageStatus(batch, snapshot, 'running');\n registerRun(target);\n queueCurrentFrameCommitAcknowledgement((_committedSnapshot, outcome) => {\n if (outcome.applied || disposed || run !== target || target.released) return;\n target.status = 'paused';\n target.anchorPosition = previousAnchorPosition;\n target.anchorLogicalTime = previousAnchorLogicalTime;\n target.unregisterAdvance?.();\n target.unregisterAdvance = undefined;\n enqueue('resume', target.generation);\n });\n }\n return;\n }\n if (command === 'cancel') {\n cancelRun(target, snapshot, batch);\n return;\n }\n if (command === 'seek') {\n const staticDuration = finiteDuration(getProgramRecord(target.program).duration);\n const time = Math.max(0, staticDuration === undefined ? argument as number :\n Math.min(argument as number, staticDuration));\n target.pendingEvaluation = { kind: 'seek', time };\n target.anchorPosition = time;\n target.anchorLogicalTime = snapshot.logicalTime;\n registerRun(target);\n return;\n }\n if (command === 'reverse') {\n target.direction = target.direction === 'forward' ? 'reverse' : 'forward';\n target.anchorPosition = target.position;\n target.anchorLogicalTime = snapshot.logicalTime;\n if (target.status === 'running') registerRun(target);\n return;\n }\n if (command === 'setPlaybackRate') {\n storedPlaybackRate = argument as number;\n target.playbackRate = storedPlaybackRate;\n target.anchorPosition = target.position;\n target.anchorLogicalTime = snapshot.logicalTime;\n return;\n }\n const unavailable = unavailableControlError(target.program, 'finish');\n if (unavailable !== undefined &&\n getProgramActivationRecord(target.activation).terminalDuration === undefined) {\n queueDiagnosticError(snapshot, unavailable, target.registrationOrder);\n return;\n }\n target.pendingEvaluation = { kind: 'finish' };\n registerRun(target);\n }\n\n const handle: PibblPlayback = Object.freeze({\n status: status.asReadonly(),\n currentTime: currentTime.asReadonly(),\n play(playOptions: { readonly conflict?: 'error' | 'replace' } = {}): void {\n if (disposed) return;\n const conflict = playOptions.conflict ?? options.conflict ?? 'error';\n if (conflict !== 'error' && conflict !== 'replace') {\n throw new TypeError('Pibbl animation playback conflict must be \"error\" or \"replace\".');\n }\n const generation = ++queuedGeneration;\n enqueue('play', generation, conflict);\n },\n pause(): void {\n enqueue('pause', queuedGeneration);\n },\n resume(): void {\n enqueue('resume', queuedGeneration);\n },\n cancel(): void {\n enqueue('cancel', queuedGeneration);\n },\n finish(): void {\n enqueue('finish', queuedGeneration);\n },\n seek(milliseconds: number): void {\n if (disposed) return;\n if (!Number.isFinite(milliseconds)) {\n throw new RangeError('Pibbl animation playback seek time must be finite.');\n }\n enqueue('seek', queuedGeneration, milliseconds);\n },\n reverse(): void {\n enqueue('reverse', queuedGeneration);\n },\n setPlaybackRate(rate: number): void {\n if (disposed) return;\n if (!Number.isFinite(rate) || rate <= 0) {\n throw new RangeError(\n 'Pibbl animation playback rate must be finite and greater than zero.',\n );\n }\n enqueue('setPlaybackRate', queuedGeneration, rate);\n },\n });\n\n return Object.freeze({\n handle,\n adopt(nextProgram: PibblAnimationProgram, nextOptions: PibblPlaybackOptions = {}): void {\n if (disposed) return;\n const candidate = normalizeAnimationPlaybackCandidate(nextProgram, nextOptions);\n program = candidate.program;\n options = candidate.options;\n },\n committedSpringSnapshot(): SpringSample | undefined {\n const target = run;\n if (disposed || target === undefined || target.released) return undefined;\n const programRecord = getProgramRecord(target.program);\n if (programRecord.kind !== 'track') return undefined;\n const definitionRecord = getDefinitionRecord(programRecord.definition);\n if (definitionRecord.kind !== 'spring') return undefined;\n return sampleSpring(definitionRecord, target.position / 1000);\n },\n retarget(nextProgram: PibblAnimationProgram, nextOptions: PibblPlaybackOptions = {}): void {\n if (disposed) return;\n const candidate = normalizeAnimationPlaybackCandidate(nextProgram, nextOptions);\n program = candidate.program;\n options = candidate.options;\n if (pendingRetarget !== undefined) {\n pendingRetarget.cancel();\n if (pendingCommands.delete(pendingRetarget)) queuedCommands--;\n }\n const generation = ++queuedGeneration;\n pendingRetarget = enqueue('play', generation, 'replace');\n },\n setDeferredStatusCommandOwner(owner: DeferredStatusCommandOwner): void {\n deferredStatusCommandOwner = owner;\n },\n dispose(): void {\n if (disposed) return;\n disposed = true;\n queuedGeneration++;\n for (const commandHandle of pendingCommands) {\n commandHandle.cancel();\n queuedCommands--;\n }\n pendingCommands.clear();\n pendingRetarget = undefined;\n if (run !== undefined) releaseRun(run);\n if (delivery !== undefined) {\n queuedMilestones -= delivery.events.length;\n delivery.events.length = 0;\n delivery.errors.length = 0;\n delivery.terminalRuns.clear();\n }\n const schedulerPhase = snapshotRealmScheduler().phase;\n if (schedulerPhase !== 'advance' && schedulerPhase !== 'render') {\n status.set('disposed');\n } else {\n stageDisposedAfterRender();\n }\n },\n });\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -22,7 +22,9 @@ type SpringWithoutDuration = Omit<SpringDefinitionRecord, 'duration'>;
|
|
|
22
22
|
/** @internal Resolves a deterministic settlement duration in milliseconds. */
|
|
23
23
|
export declare function resolveSpringDuration(record: SpringWithoutDuration): number;
|
|
24
24
|
/** @internal Creates the fully normalized immutable spring definition record. */
|
|
25
|
-
export declare function createSpringRecord(options: Readonly<PibblSpringOptions
|
|
25
|
+
export declare function createSpringRecord(options: Readonly<PibblSpringOptions & {
|
|
26
|
+
readonly to: number;
|
|
27
|
+
}>): SpringDefinitionRecord;
|
|
26
28
|
/** @internal Resolves an omitted start from a track's activation snapshot. */
|
|
27
29
|
export declare function resolveSpringStart(record: SpringDefinitionRecord, initialValue: number): SpringDefinitionRecord;
|
|
28
30
|
/** @internal Samples position and logical-units-per-second velocity analytically. */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/lib/animation/spring.ts"],
|
|
4
|
-
"sourcesContent": ["import type { PibblSpringOptions } from './types.js';\n\nconst DEFAULT_MASS = 1;\nconst DEFAULT_STIFFNESS = 170;\nconst DEFAULT_DAMPING = 26;\nconst DEFAULT_INITIAL_VELOCITY = 0;\nconst DEFAULT_REST_SPEED = 0.01;\nconst DEFAULT_REST_DELTA = 0.001;\nconst DEFAULT_MAX_DURATION = 10_000;\n\n/**\n * Ratios this close to one use the critical solution. This avoids dividing by\n * a vanishing damped frequency or root separation without changing visibly\n * distinct underdamped and overdamped springs.\n */\nconst CRITICAL_DAMPING_EPSILON = 1e-7;\nconst DURATION_BISECTION_ITERATIONS = 64;\nconst INITIAL_BRACKET_SECONDS = 0.001;\n\nexport interface SpringDefinitionRecord {\n readonly kind: 'spring';\n readonly duration: number;\n readonly debugName: string | undefined;\n readonly hasFrom: boolean;\n readonly from: number;\n readonly to: number;\n readonly mass: number;\n readonly stiffness: number;\n readonly damping: number;\n readonly initialVelocity: number;\n readonly restSpeed: number;\n readonly restDelta: number;\n readonly maxDuration: number;\n}\n\nexport interface SpringSample {\n readonly position: number;\n readonly velocity: number;\n}\n\ntype SpringWithoutDuration = Omit<SpringDefinitionRecord, 'duration'>;\n\ninterface SpringEnvelope {\n readonly lastPeakSeconds: number;\n readonly displacement: (seconds: number) => number;\n readonly velocity: (seconds: number) => number;\n}\n\ninterface SpringFrequencies {\n readonly natural: number;\n readonly ratio: number;\n readonly decay: number;\n}\n\nfunction definitionLabel(debugName: string | undefined): string {\n return debugName === undefined ? 'Pibbl spring definition' :\n `Pibbl spring definition \"${debugName}\"`;\n}\n\nfunction finite(value: number, property: string, debugName: string | undefined): number {\n if (!Number.isFinite(value)) {\n throw new RangeError(`${definitionLabel(debugName)} ${property} must be finite.`);\n }\n return value;\n}\n\nfunction positive(value: number, property: string, debugName: string | undefined): number {\n finite(value, property, debugName);\n if (value <= 0) {\n throw new RangeError(`${definitionLabel(debugName)} ${property} must be positive.`);\n }\n return value;\n}\n\nfunction nonnegative(\n value: number,\n property: string,\n debugName: string | undefined,\n): number {\n finite(value, property, debugName);\n if (value < 0) {\n throw new RangeError(`${definitionLabel(debugName)} ${property} must be nonnegative.`);\n }\n return value;\n}\n\nfunction defaulted(value: number | undefined, fallback: number): number {\n return value === undefined ? fallback : value;\n}\n\nfunction normalizedSpring(options: Readonly<PibblSpringOptions>): SpringWithoutDuration {\n const debugName = options.debugName;\n const hasFrom = options.from !== undefined;\n return {\n kind: 'spring',\n debugName,\n hasFrom,\n from: finite(defaulted(options.from, 0), 'from', debugName),\n to: finite(options.to, 'to', debugName),\n mass: positive(defaulted(options.mass, DEFAULT_MASS), 'mass', debugName),\n stiffness: positive(\n defaulted(options.stiffness, DEFAULT_STIFFNESS),\n 'stiffness',\n debugName,\n ),\n damping: nonnegative(\n defaulted(options.damping, DEFAULT_DAMPING),\n 'damping',\n debugName,\n ),\n initialVelocity: finite(\n defaulted(options.initialVelocity, DEFAULT_INITIAL_VELOCITY),\n 'initialVelocity',\n debugName,\n ),\n restSpeed: nonnegative(\n defaulted(options.restSpeed, DEFAULT_REST_SPEED),\n 'restSpeed',\n debugName,\n ),\n restDelta: nonnegative(\n defaulted(options.restDelta, DEFAULT_REST_DELTA),\n 'restDelta',\n debugName,\n ),\n maxDuration: positive(\n defaulted(options.maxDuration, DEFAULT_MAX_DURATION),\n 'maxDuration',\n debugName,\n ),\n };\n}\n\nfunction frequencies(record: SpringWithoutDuration): SpringFrequencies {\n const logMass = Math.log(record.mass);\n const logStiffness = Math.log(record.stiffness);\n const natural = Math.exp((logStiffness - logMass) / 2);\n const dampingLog = record.damping === 0 ? Number.NEGATIVE_INFINITY :\n Math.log(record.damping);\n const ratio = record.damping === 0 ? 0 : Math.exp(\n dampingLog - Math.LN2 - logStiffness / 2 - logMass / 2,\n );\n const decay = record.damping === 0 ? 0 : Math.exp(\n dampingLog - Math.LN2 - logMass,\n );\n if (!(natural > 0) || !Number.isFinite(natural) ||\n !Number.isFinite(ratio) || !Number.isFinite(decay)) {\n throw new RangeError(\n `${definitionLabel(record.debugName)} parameters must produce finite representable frequencies.`,\n );\n }\n return { natural, ratio, decay };\n}\n\nfunction displacement(record: SpringWithoutDuration): number {\n const value = record.from - record.to;\n if (!Number.isFinite(value)) {\n throw new RangeError(\n `${definitionLabel(record.debugName)} displacement must be finite and representable.`,\n );\n }\n return value;\n}\n\nfunction assertRepresentable(\n record: SpringWithoutDuration,\n ...values: readonly number[]\n): void {\n if (values.some(value => !Number.isFinite(value))) {\n throw new RangeError(\n `${definitionLabel(record.debugName)} parameters must produce finite representable coefficients.`,\n );\n }\n}\n\nfunction underdampedTerms(\n record: SpringWithoutDuration,\n natural: number,\n ratio: number,\n decay: number,\n): {\n readonly displacement: number;\n readonly damped: number;\n readonly velocityCoefficient: number;\n} {\n const initialDisplacement = displacement(record);\n const damped = natural * Math.sqrt((1 - ratio) * (1 + ratio));\n const velocityCoefficient =\n record.initialVelocity + decay * initialDisplacement;\n const maximumSeconds = record.maxDuration / 1000;\n if (!(damped > 0)) {\n throw new RangeError(\n `${definitionLabel(record.debugName)} parameters must produce finite representable coefficients.`,\n );\n }\n assertRepresentable(\n record,\n damped,\n velocityCoefficient,\n damped * maximumSeconds,\n velocityCoefficient * maximumSeconds,\n initialDisplacement * damped,\n decay * velocityCoefficient * maximumSeconds,\n Math.abs(record.to) + Math.abs(initialDisplacement) +\n Math.abs(velocityCoefficient * maximumSeconds),\n );\n return { displacement: initialDisplacement, damped, velocityCoefficient };\n}\n\nfunction criticalEnvelope(\n record: SpringWithoutDuration,\n natural: number,\n): SpringEnvelope {\n const a = displacement(record);\n const b = record.initialVelocity + natural * a;\n const maximumSeconds = record.maxDuration / 1000;\n assertRepresentable(\n record,\n b,\n b * maximumSeconds,\n natural * a,\n natural * b,\n natural * b * maximumSeconds,\n Math.abs(record.to) + Math.abs(a) + Math.abs(b * maximumSeconds),\n );\n const velocityA = b - natural * a;\n const velocityB = -natural * b;\n const displacementA = Math.abs(a);\n const displacementB = Math.abs(b);\n const speedA = Math.abs(velocityA);\n const speedB = Math.abs(velocityB);\n const peak = (constant: number, slope: number): number => {\n if (slope === 0 || !Number.isFinite(slope)) return 0;\n return Math.max(0, (slope - natural * constant) / (natural * slope));\n };\n return {\n lastPeakSeconds: Math.max(\n peak(displacementA, displacementB),\n peak(speedA, speedB),\n ),\n displacement: seconds =>\n (displacementA + displacementB * seconds) * Math.exp(-natural * seconds),\n velocity: seconds =>\n (speedA + speedB * seconds) * Math.exp(-natural * seconds),\n };\n}\n\nfunction underdampedEnvelope(\n record: SpringWithoutDuration,\n natural: number,\n ratio: number,\n decay: number,\n): SpringEnvelope {\n const terms = underdampedTerms(record, natural, ratio, decay);\n const a = terms.displacement;\n const b = terms.velocityCoefficient / terms.damped;\n const displacementAmplitude = Math.hypot(a, b);\n const velocitySineCoefficient = terms.velocityCoefficient === 0 ? 0 :\n -a * terms.damped - (decay / terms.damped) * terms.velocityCoefficient;\n const velocityAmplitude = Math.hypot(\n record.initialVelocity,\n velocitySineCoefficient,\n );\n const conservative = (value: number): number =>\n Number.isFinite(value) ? value : Number.POSITIVE_INFINITY;\n return {\n lastPeakSeconds: 0,\n displacement: seconds =>\n conservative(displacementAmplitude * Math.exp(-decay * seconds)),\n velocity: seconds =>\n conservative(velocityAmplitude * Math.exp(-decay * seconds)),\n };\n}\n\nfunction overdampedTerms(\n record: SpringWithoutDuration,\n natural: number,\n ratio: number,\n decay: number,\n): {\n readonly firstCoefficient: number;\n readonly firstRoot: number;\n readonly secondCoefficient: number;\n readonly secondRoot: number;\n} {\n const reciprocalRatio = 1 / ratio;\n const rootOffsetRatio = Math.sqrt(\n (1 - reciprocalRatio) * (1 + reciprocalRatio),\n );\n const rootSum = decay * (1 + rootOffsetRatio);\n const firstRoot = -(natural / rootSum) * natural;\n const secondRoot = -rootSum;\n const initialDisplacement = displacement(record);\n const firstCoefficient =\n (record.initialVelocity - secondRoot * initialDisplacement) /\n (firstRoot - secondRoot);\n const secondCoefficient = initialDisplacement - firstCoefficient;\n if (!(firstRoot < 0) || !(secondRoot < 0)) {\n throw new RangeError(\n `${definitionLabel(record.debugName)} parameters must produce finite representable coefficients.`,\n );\n }\n assertRepresentable(\n record,\n firstRoot,\n secondRoot,\n firstCoefficient,\n secondCoefficient,\n firstRoot * firstCoefficient,\n secondRoot * secondCoefficient,\n Math.abs(record.to) + Math.abs(firstCoefficient) + Math.abs(secondCoefficient),\n );\n return {\n firstCoefficient,\n firstRoot,\n secondCoefficient,\n secondRoot,\n };\n}\n\nfunction overdampedEnvelope(\n record: SpringWithoutDuration,\n natural: number,\n ratio: number,\n decay: number,\n): SpringEnvelope {\n const terms = overdampedTerms(record, natural, ratio, decay);\n return {\n lastPeakSeconds: 0,\n displacement: seconds =>\n Math.abs(terms.firstCoefficient) * Math.exp(terms.firstRoot * seconds) +\n Math.abs(terms.secondCoefficient) * Math.exp(terms.secondRoot * seconds),\n velocity: seconds =>\n Math.abs(terms.firstRoot * terms.firstCoefficient) *\n Math.exp(terms.firstRoot * seconds) +\n Math.abs(terms.secondRoot * terms.secondCoefficient) *\n Math.exp(terms.secondRoot * seconds),\n };\n}\n\nfunction springEnvelope(record: SpringWithoutDuration): SpringEnvelope {\n const { natural, ratio, decay } = frequencies(record);\n if (Math.abs(ratio - 1) <= CRITICAL_DAMPING_EPSILON) {\n return criticalEnvelope(record, natural);\n }\n return ratio < 1 ?\n underdampedEnvelope(record, natural, ratio, decay) :\n overdampedEnvelope(record, natural, ratio, decay);\n}\n\n/** @internal Resolves a deterministic settlement duration in milliseconds. */\nexport function resolveSpringDuration(record: SpringWithoutDuration): number {\n if (record.from === record.to && record.initialVelocity === 0) return 0;\n const envelope = springEnvelope(record);\n const maximumSeconds = record.maxDuration / 1000;\n const settled = (seconds: number): boolean =>\n envelope.displacement(seconds) <= record.restDelta &&\n envelope.velocity(seconds) <= record.restSpeed;\n\n let lower = Math.min(maximumSeconds, envelope.lastPeakSeconds);\n if (!Number.isFinite(lower)) return record.maxDuration;\n if (settled(lower)) return lower * 1000;\n\n let bracketSize = Math.max(INITIAL_BRACKET_SECONDS, lower);\n let upper = lower;\n while (upper < maximumSeconds) {\n upper = Math.min(maximumSeconds, lower + bracketSize);\n if (settled(upper)) break;\n lower = upper;\n bracketSize *= 2;\n }\n if (!settled(upper)) return record.maxDuration;\n\n for (let iteration = 0; iteration < DURATION_BISECTION_ITERATIONS; iteration++) {\n const middle = lower + (upper - lower) / 2;\n if (settled(middle)) upper = middle;\n else lower = middle;\n }\n return upper * 1000;\n}\n\n/** @internal Creates the fully normalized immutable spring definition record. */\nexport function createSpringRecord(\n options: Readonly<PibblSpringOptions>,\n): SpringDefinitionRecord {\n const normalized = normalizedSpring(options);\n return Object.freeze({\n ...normalized,\n duration: normalized.hasFrom ?\n resolveSpringDuration(normalized) : normalized.maxDuration,\n });\n}\n\n/** @internal Resolves an omitted start from a track's activation snapshot. */\nexport function resolveSpringStart(\n record: SpringDefinitionRecord,\n initialValue: number,\n): SpringDefinitionRecord {\n if (record.hasFrom) return record;\n const resolved = {\n ...record,\n hasFrom: true,\n from: finite(initialValue, 'activation value', record.debugName),\n };\n return Object.freeze({\n ...resolved,\n duration: resolveSpringDuration(resolved),\n });\n}\n\n/** @internal Samples position and logical-units-per-second velocity analytically. */\nexport function sampleSpring(\n record: SpringDefinitionRecord,\n seconds: number,\n): SpringSample {\n finite(seconds, 'sample time', record.debugName);\n const time = Math.max(0, seconds);\n if (time >= record.duration / 1000) {\n return Object.freeze({ position: record.to, velocity: 0 });\n }\n if (time === 0) {\n return Object.freeze({\n position: record.from,\n velocity: record.initialVelocity,\n });\n }\n\n const initialDisplacement = displacement(record);\n const { natural, ratio, decay: decayRate } = frequencies(record);\n let offset: number;\n let velocity: number;\n if (Math.abs(ratio - 1) <= CRITICAL_DAMPING_EPSILON) {\n const b = record.initialVelocity + natural * initialDisplacement;\n const decay = Math.exp(-natural * time);\n offset = (initialDisplacement + b * time) * decay;\n velocity = (b - natural * (initialDisplacement + b * time)) * decay;\n } else if (ratio < 1) {\n const terms = underdampedTerms(record, natural, ratio, decayRate);\n const angle = terms.damped * time;\n const sine = Math.sin(angle);\n const sineOverFrequency = angle === 0 ? time : time * sine / angle;\n const decay = Math.exp(-decayRate * time);\n const cosine = Math.cos(angle);\n offset = decay * (\n initialDisplacement * cosine +\n terms.velocityCoefficient * sineOverFrequency\n );\n velocity = decay * (\n record.initialVelocity * cosine -\n initialDisplacement * terms.damped * sine -\n decayRate * terms.velocityCoefficient * sineOverFrequency\n );\n } else {\n const terms = overdampedTerms(record, natural, ratio, decayRate);\n const first = terms.firstCoefficient * Math.exp(terms.firstRoot * time);\n const second = terms.secondCoefficient * Math.exp(terms.secondRoot * time);\n offset = first + second;\n velocity = terms.firstRoot * first + terms.secondRoot * second;\n }\n\n const position = record.to + offset;\n if (!Number.isFinite(position) || !Number.isFinite(velocity)) {\n throw new RangeError(`${definitionLabel(record.debugName)} sampled values must be finite.`);\n }\n return Object.freeze({ position, velocity });\n}\n"],
|
|
5
|
-
"mappings": "AAEA,MAAM,eAAe;AACrB,MAAM,oBAAoB;AAC1B,MAAM,kBAAkB;AACxB,MAAM,2BAA2B;AACjC,MAAM,qBAAqB;AAC3B,MAAM,qBAAqB;AAC3B,MAAM,uBAAuB;AAO7B,MAAM,2BAA2B;AACjC,MAAM,gCAAgC;AACtC,MAAM,0BAA0B;AAqChC,SAAS,gBAAgB,WAAuC;AAC9D,SAAO,cAAc,SAAY,4BAC/B,4BAA4B,SAAS;AACzC;AAEA,SAAS,OAAO,OAAe,UAAkB,WAAuC;AACtF,MAAI,CAAC,OAAO,SAAS,KAAK,GAAG;AAC3B,UAAM,IAAI,WAAW,GAAG,gBAAgB,SAAS,CAAC,IAAI,QAAQ,kBAAkB;AAAA,EAClF;AACA,SAAO;AACT;AAEA,SAAS,SAAS,OAAe,UAAkB,WAAuC;AACxF,SAAO,OAAO,UAAU,SAAS;AACjC,MAAI,SAAS,GAAG;AACd,UAAM,IAAI,WAAW,GAAG,gBAAgB,SAAS,CAAC,IAAI,QAAQ,oBAAoB;AAAA,EACpF;AACA,SAAO;AACT;AAEA,SAAS,YACP,OACA,UACA,WACQ;AACR,SAAO,OAAO,UAAU,SAAS;AACjC,MAAI,QAAQ,GAAG;AACb,UAAM,IAAI,WAAW,GAAG,gBAAgB,SAAS,CAAC,IAAI,QAAQ,uBAAuB;AAAA,EACvF;AACA,SAAO;AACT;AAEA,SAAS,UAAU,OAA2B,UAA0B;AACtE,SAAO,UAAU,SAAY,WAAW;AAC1C;AAEA,SAAS,iBAAiB,
|
|
4
|
+
"sourcesContent": ["import type { PibblSpringOptions } from './types.js';\n\nconst DEFAULT_MASS = 1;\nconst DEFAULT_STIFFNESS = 170;\nconst DEFAULT_DAMPING = 26;\nconst DEFAULT_INITIAL_VELOCITY = 0;\nconst DEFAULT_REST_SPEED = 0.01;\nconst DEFAULT_REST_DELTA = 0.001;\nconst DEFAULT_MAX_DURATION = 10_000;\n\n/**\n * Ratios this close to one use the critical solution. This avoids dividing by\n * a vanishing damped frequency or root separation without changing visibly\n * distinct underdamped and overdamped springs.\n */\nconst CRITICAL_DAMPING_EPSILON = 1e-7;\nconst DURATION_BISECTION_ITERATIONS = 64;\nconst INITIAL_BRACKET_SECONDS = 0.001;\n\nexport interface SpringDefinitionRecord {\n readonly kind: 'spring';\n readonly duration: number;\n readonly debugName: string | undefined;\n readonly hasFrom: boolean;\n readonly from: number;\n readonly to: number;\n readonly mass: number;\n readonly stiffness: number;\n readonly damping: number;\n readonly initialVelocity: number;\n readonly restSpeed: number;\n readonly restDelta: number;\n readonly maxDuration: number;\n}\n\nexport interface SpringSample {\n readonly position: number;\n readonly velocity: number;\n}\n\ntype SpringWithoutDuration = Omit<SpringDefinitionRecord, 'duration'>;\n\ninterface SpringEnvelope {\n readonly lastPeakSeconds: number;\n readonly displacement: (seconds: number) => number;\n readonly velocity: (seconds: number) => number;\n}\n\ninterface SpringFrequencies {\n readonly natural: number;\n readonly ratio: number;\n readonly decay: number;\n}\n\nfunction definitionLabel(debugName: string | undefined): string {\n return debugName === undefined ? 'Pibbl spring definition' :\n `Pibbl spring definition \"${debugName}\"`;\n}\n\nfunction finite(value: number, property: string, debugName: string | undefined): number {\n if (!Number.isFinite(value)) {\n throw new RangeError(`${definitionLabel(debugName)} ${property} must be finite.`);\n }\n return value;\n}\n\nfunction positive(value: number, property: string, debugName: string | undefined): number {\n finite(value, property, debugName);\n if (value <= 0) {\n throw new RangeError(`${definitionLabel(debugName)} ${property} must be positive.`);\n }\n return value;\n}\n\nfunction nonnegative(\n value: number,\n property: string,\n debugName: string | undefined,\n): number {\n finite(value, property, debugName);\n if (value < 0) {\n throw new RangeError(`${definitionLabel(debugName)} ${property} must be nonnegative.`);\n }\n return value;\n}\n\nfunction defaulted(value: number | undefined, fallback: number): number {\n return value === undefined ? fallback : value;\n}\n\nfunction normalizedSpring(options: Readonly<PibblSpringOptions & { readonly to: number }>): SpringWithoutDuration {\n const debugName = options.debugName;\n const hasFrom = options.from !== undefined;\n return {\n kind: 'spring',\n debugName,\n hasFrom,\n from: finite(defaulted(options.from, 0), 'from', debugName),\n to: finite(options.to, 'to', debugName),\n mass: positive(defaulted(options.mass, DEFAULT_MASS), 'mass', debugName),\n stiffness: positive(\n defaulted(options.stiffness, DEFAULT_STIFFNESS),\n 'stiffness',\n debugName,\n ),\n damping: nonnegative(\n defaulted(options.damping, DEFAULT_DAMPING),\n 'damping',\n debugName,\n ),\n initialVelocity: finite(\n defaulted(options.initialVelocity, DEFAULT_INITIAL_VELOCITY),\n 'initialVelocity',\n debugName,\n ),\n restSpeed: nonnegative(\n defaulted(options.restSpeed, DEFAULT_REST_SPEED),\n 'restSpeed',\n debugName,\n ),\n restDelta: nonnegative(\n defaulted(options.restDelta, DEFAULT_REST_DELTA),\n 'restDelta',\n debugName,\n ),\n maxDuration: positive(\n defaulted(options.maxDuration, DEFAULT_MAX_DURATION),\n 'maxDuration',\n debugName,\n ),\n };\n}\n\nfunction frequencies(record: SpringWithoutDuration): SpringFrequencies {\n const logMass = Math.log(record.mass);\n const logStiffness = Math.log(record.stiffness);\n const natural = Math.exp((logStiffness - logMass) / 2);\n const dampingLog = record.damping === 0 ? Number.NEGATIVE_INFINITY :\n Math.log(record.damping);\n const ratio = record.damping === 0 ? 0 : Math.exp(\n dampingLog - Math.LN2 - logStiffness / 2 - logMass / 2,\n );\n const decay = record.damping === 0 ? 0 : Math.exp(\n dampingLog - Math.LN2 - logMass,\n );\n if (!(natural > 0) || !Number.isFinite(natural) ||\n !Number.isFinite(ratio) || !Number.isFinite(decay)) {\n throw new RangeError(\n `${definitionLabel(record.debugName)} parameters must produce finite representable frequencies.`,\n );\n }\n return { natural, ratio, decay };\n}\n\nfunction displacement(record: SpringWithoutDuration): number {\n const value = record.from - record.to;\n if (!Number.isFinite(value)) {\n throw new RangeError(\n `${definitionLabel(record.debugName)} displacement must be finite and representable.`,\n );\n }\n return value;\n}\n\nfunction assertRepresentable(\n record: SpringWithoutDuration,\n ...values: readonly number[]\n): void {\n if (values.some(value => !Number.isFinite(value))) {\n throw new RangeError(\n `${definitionLabel(record.debugName)} parameters must produce finite representable coefficients.`,\n );\n }\n}\n\nfunction underdampedTerms(\n record: SpringWithoutDuration,\n natural: number,\n ratio: number,\n decay: number,\n): {\n readonly displacement: number;\n readonly damped: number;\n readonly velocityCoefficient: number;\n} {\n const initialDisplacement = displacement(record);\n const damped = natural * Math.sqrt((1 - ratio) * (1 + ratio));\n const velocityCoefficient =\n record.initialVelocity + decay * initialDisplacement;\n const maximumSeconds = record.maxDuration / 1000;\n if (!(damped > 0)) {\n throw new RangeError(\n `${definitionLabel(record.debugName)} parameters must produce finite representable coefficients.`,\n );\n }\n assertRepresentable(\n record,\n damped,\n velocityCoefficient,\n damped * maximumSeconds,\n velocityCoefficient * maximumSeconds,\n initialDisplacement * damped,\n decay * velocityCoefficient * maximumSeconds,\n Math.abs(record.to) + Math.abs(initialDisplacement) +\n Math.abs(velocityCoefficient * maximumSeconds),\n );\n return { displacement: initialDisplacement, damped, velocityCoefficient };\n}\n\nfunction criticalEnvelope(\n record: SpringWithoutDuration,\n natural: number,\n): SpringEnvelope {\n const a = displacement(record);\n const b = record.initialVelocity + natural * a;\n const maximumSeconds = record.maxDuration / 1000;\n assertRepresentable(\n record,\n b,\n b * maximumSeconds,\n natural * a,\n natural * b,\n natural * b * maximumSeconds,\n Math.abs(record.to) + Math.abs(a) + Math.abs(b * maximumSeconds),\n );\n const velocityA = b - natural * a;\n const velocityB = -natural * b;\n const displacementA = Math.abs(a);\n const displacementB = Math.abs(b);\n const speedA = Math.abs(velocityA);\n const speedB = Math.abs(velocityB);\n const peak = (constant: number, slope: number): number => {\n if (slope === 0 || !Number.isFinite(slope)) return 0;\n return Math.max(0, (slope - natural * constant) / (natural * slope));\n };\n return {\n lastPeakSeconds: Math.max(\n peak(displacementA, displacementB),\n peak(speedA, speedB),\n ),\n displacement: seconds =>\n (displacementA + displacementB * seconds) * Math.exp(-natural * seconds),\n velocity: seconds =>\n (speedA + speedB * seconds) * Math.exp(-natural * seconds),\n };\n}\n\nfunction underdampedEnvelope(\n record: SpringWithoutDuration,\n natural: number,\n ratio: number,\n decay: number,\n): SpringEnvelope {\n const terms = underdampedTerms(record, natural, ratio, decay);\n const a = terms.displacement;\n const b = terms.velocityCoefficient / terms.damped;\n const displacementAmplitude = Math.hypot(a, b);\n const velocitySineCoefficient = terms.velocityCoefficient === 0 ? 0 :\n -a * terms.damped - (decay / terms.damped) * terms.velocityCoefficient;\n const velocityAmplitude = Math.hypot(\n record.initialVelocity,\n velocitySineCoefficient,\n );\n const conservative = (value: number): number =>\n Number.isFinite(value) ? value : Number.POSITIVE_INFINITY;\n return {\n lastPeakSeconds: 0,\n displacement: seconds =>\n conservative(displacementAmplitude * Math.exp(-decay * seconds)),\n velocity: seconds =>\n conservative(velocityAmplitude * Math.exp(-decay * seconds)),\n };\n}\n\nfunction overdampedTerms(\n record: SpringWithoutDuration,\n natural: number,\n ratio: number,\n decay: number,\n): {\n readonly firstCoefficient: number;\n readonly firstRoot: number;\n readonly secondCoefficient: number;\n readonly secondRoot: number;\n} {\n const reciprocalRatio = 1 / ratio;\n const rootOffsetRatio = Math.sqrt(\n (1 - reciprocalRatio) * (1 + reciprocalRatio),\n );\n const rootSum = decay * (1 + rootOffsetRatio);\n const firstRoot = -(natural / rootSum) * natural;\n const secondRoot = -rootSum;\n const initialDisplacement = displacement(record);\n const firstCoefficient =\n (record.initialVelocity - secondRoot * initialDisplacement) /\n (firstRoot - secondRoot);\n const secondCoefficient = initialDisplacement - firstCoefficient;\n if (!(firstRoot < 0) || !(secondRoot < 0)) {\n throw new RangeError(\n `${definitionLabel(record.debugName)} parameters must produce finite representable coefficients.`,\n );\n }\n assertRepresentable(\n record,\n firstRoot,\n secondRoot,\n firstCoefficient,\n secondCoefficient,\n firstRoot * firstCoefficient,\n secondRoot * secondCoefficient,\n Math.abs(record.to) + Math.abs(firstCoefficient) + Math.abs(secondCoefficient),\n );\n return {\n firstCoefficient,\n firstRoot,\n secondCoefficient,\n secondRoot,\n };\n}\n\nfunction overdampedEnvelope(\n record: SpringWithoutDuration,\n natural: number,\n ratio: number,\n decay: number,\n): SpringEnvelope {\n const terms = overdampedTerms(record, natural, ratio, decay);\n return {\n lastPeakSeconds: 0,\n displacement: seconds =>\n Math.abs(terms.firstCoefficient) * Math.exp(terms.firstRoot * seconds) +\n Math.abs(terms.secondCoefficient) * Math.exp(terms.secondRoot * seconds),\n velocity: seconds =>\n Math.abs(terms.firstRoot * terms.firstCoefficient) *\n Math.exp(terms.firstRoot * seconds) +\n Math.abs(terms.secondRoot * terms.secondCoefficient) *\n Math.exp(terms.secondRoot * seconds),\n };\n}\n\nfunction springEnvelope(record: SpringWithoutDuration): SpringEnvelope {\n const { natural, ratio, decay } = frequencies(record);\n if (Math.abs(ratio - 1) <= CRITICAL_DAMPING_EPSILON) {\n return criticalEnvelope(record, natural);\n }\n return ratio < 1 ?\n underdampedEnvelope(record, natural, ratio, decay) :\n overdampedEnvelope(record, natural, ratio, decay);\n}\n\n/** @internal Resolves a deterministic settlement duration in milliseconds. */\nexport function resolveSpringDuration(record: SpringWithoutDuration): number {\n if (record.from === record.to && record.initialVelocity === 0) return 0;\n const envelope = springEnvelope(record);\n const maximumSeconds = record.maxDuration / 1000;\n const settled = (seconds: number): boolean =>\n envelope.displacement(seconds) <= record.restDelta &&\n envelope.velocity(seconds) <= record.restSpeed;\n\n let lower = Math.min(maximumSeconds, envelope.lastPeakSeconds);\n if (!Number.isFinite(lower)) return record.maxDuration;\n if (settled(lower)) return lower * 1000;\n\n let bracketSize = Math.max(INITIAL_BRACKET_SECONDS, lower);\n let upper = lower;\n while (upper < maximumSeconds) {\n upper = Math.min(maximumSeconds, lower + bracketSize);\n if (settled(upper)) break;\n lower = upper;\n bracketSize *= 2;\n }\n if (!settled(upper)) return record.maxDuration;\n\n for (let iteration = 0; iteration < DURATION_BISECTION_ITERATIONS; iteration++) {\n const middle = lower + (upper - lower) / 2;\n if (settled(middle)) upper = middle;\n else lower = middle;\n }\n return upper * 1000;\n}\n\n/** @internal Creates the fully normalized immutable spring definition record. */\nexport function createSpringRecord(\n options: Readonly<PibblSpringOptions & { readonly to: number }>,\n): SpringDefinitionRecord {\n const normalized = normalizedSpring(options);\n return Object.freeze({\n ...normalized,\n duration: normalized.hasFrom ?\n resolveSpringDuration(normalized) : normalized.maxDuration,\n });\n}\n\n/** @internal Resolves an omitted start from a track's activation snapshot. */\nexport function resolveSpringStart(\n record: SpringDefinitionRecord,\n initialValue: number,\n): SpringDefinitionRecord {\n if (record.hasFrom) return record;\n const resolved = {\n ...record,\n hasFrom: true,\n from: finite(initialValue, 'activation value', record.debugName),\n };\n return Object.freeze({\n ...resolved,\n duration: resolveSpringDuration(resolved),\n });\n}\n\n/** @internal Samples position and logical-units-per-second velocity analytically. */\nexport function sampleSpring(\n record: SpringDefinitionRecord,\n seconds: number,\n): SpringSample {\n finite(seconds, 'sample time', record.debugName);\n const time = Math.max(0, seconds);\n if (time >= record.duration / 1000) {\n return Object.freeze({ position: record.to, velocity: 0 });\n }\n if (time === 0) {\n return Object.freeze({\n position: record.from,\n velocity: record.initialVelocity,\n });\n }\n\n const initialDisplacement = displacement(record);\n const { natural, ratio, decay: decayRate } = frequencies(record);\n let offset: number;\n let velocity: number;\n if (Math.abs(ratio - 1) <= CRITICAL_DAMPING_EPSILON) {\n const b = record.initialVelocity + natural * initialDisplacement;\n const decay = Math.exp(-natural * time);\n offset = (initialDisplacement + b * time) * decay;\n velocity = (b - natural * (initialDisplacement + b * time)) * decay;\n } else if (ratio < 1) {\n const terms = underdampedTerms(record, natural, ratio, decayRate);\n const angle = terms.damped * time;\n const sine = Math.sin(angle);\n const sineOverFrequency = angle === 0 ? time : time * sine / angle;\n const decay = Math.exp(-decayRate * time);\n const cosine = Math.cos(angle);\n offset = decay * (\n initialDisplacement * cosine +\n terms.velocityCoefficient * sineOverFrequency\n );\n velocity = decay * (\n record.initialVelocity * cosine -\n initialDisplacement * terms.damped * sine -\n decayRate * terms.velocityCoefficient * sineOverFrequency\n );\n } else {\n const terms = overdampedTerms(record, natural, ratio, decayRate);\n const first = terms.firstCoefficient * Math.exp(terms.firstRoot * time);\n const second = terms.secondCoefficient * Math.exp(terms.secondRoot * time);\n offset = first + second;\n velocity = terms.firstRoot * first + terms.secondRoot * second;\n }\n\n const position = record.to + offset;\n if (!Number.isFinite(position) || !Number.isFinite(velocity)) {\n throw new RangeError(`${definitionLabel(record.debugName)} sampled values must be finite.`);\n }\n return Object.freeze({ position, velocity });\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,8 +2,8 @@ import type { Signal } from "../signals/types.js";
|
|
|
2
2
|
import type { defineAnimation, keyframes, spring, stepper, tween } from "./definition.js";
|
|
3
3
|
import type { marker, parallel, repeat } from "./program.js";
|
|
4
4
|
import type { useAnimatedValue } from "../hooks/use-animated-value.js";
|
|
5
|
-
import type { SignalEquals } from "../signals/types.js";
|
|
6
5
|
import type { usePlayback } from "../hooks/use-playback.js";
|
|
6
|
+
import type { SignalEquals } from '../signals/types.js';
|
|
7
7
|
declare const pibblAnimationDefinitionBrand: unique symbol;
|
|
8
8
|
declare const pibblAnimationProgramBrand: unique symbol;
|
|
9
9
|
/**
|
|
@@ -14,7 +14,6 @@ declare const pibblAnimationProgramBrand: unique symbol;
|
|
|
14
14
|
*
|
|
15
15
|
* @see {@link PibblKeyframesOptions}
|
|
16
16
|
* @see {@link PibblTweenOptions}
|
|
17
|
-
* @see {@link PibblTweenAnimatedValueOptions}
|
|
18
17
|
*/
|
|
19
18
|
export type PibblEasing = (progress: number) => number;
|
|
20
19
|
/**
|
|
@@ -27,7 +26,6 @@ export type PibblEasing = (progress: number) => number;
|
|
|
27
26
|
*
|
|
28
27
|
* @see {@link PibblKeyframesOptions}
|
|
29
28
|
* @see {@link PibblTweenOptions}
|
|
30
|
-
* @see {@link PibblTweenAnimatedValueOptions}
|
|
31
29
|
*/
|
|
32
30
|
export type PibblInterpolator<T> = (from: T, to: T, progress: number) => T;
|
|
33
31
|
/**
|
|
@@ -78,8 +76,8 @@ export interface PibblAnimationRepeatOptions {
|
|
|
78
76
|
export interface PibblTweenOptions<T> {
|
|
79
77
|
/** Starting endpoint or value. See {@link PibblTweenOptions}. */
|
|
80
78
|
readonly from?: T;
|
|
81
|
-
/** Destination endpoint
|
|
82
|
-
readonly to
|
|
79
|
+
/** Destination endpoint; omit when useAnimatedValue supplies the target. See {@link PibblTweenOptions}. */
|
|
80
|
+
readonly to?: T;
|
|
83
81
|
/** Duration of the animation or transition in milliseconds. See {@link PibblTweenOptions}. */
|
|
84
82
|
readonly duration: number;
|
|
85
83
|
/** Maps normalized progress before interpolation. See {@link PibblEasing}. */
|
|
@@ -126,8 +124,8 @@ export interface PibblKeyframesOptions<T> {
|
|
|
126
124
|
export interface PibblSpringOptions {
|
|
127
125
|
/** Starting endpoint or value. See {@link PibblSpringOptions}. */
|
|
128
126
|
readonly from?: number;
|
|
129
|
-
/** Destination endpoint
|
|
130
|
-
readonly to
|
|
127
|
+
/** Destination endpoint; omit when useAnimatedValue supplies the target. See {@link PibblSpringOptions}. */
|
|
128
|
+
readonly to?: number;
|
|
131
129
|
/** Mass used by the spring or physics calculation. See {@link PibblSpringOptions}. */
|
|
132
130
|
readonly mass?: number;
|
|
133
131
|
/** Spring stiffness controlling acceleration toward the target. See {@link PibblSpringOptions}. */
|
|
@@ -155,79 +153,37 @@ export interface PibblSpringOptions {
|
|
|
155
153
|
readonly debugName?: string;
|
|
156
154
|
}
|
|
157
155
|
/**
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
* @see {@link PibblEasing}
|
|
161
|
-
* @see {@link PibblInterpolator}
|
|
162
|
-
* @see {@link SignalEquals}
|
|
156
|
+
* Current endpoints and optional committed spring velocity supplied to an animation factory.
|
|
157
|
+
* @see {@link PibblAnimatedValueOptions}
|
|
163
158
|
*/
|
|
164
|
-
export interface
|
|
165
|
-
/**
|
|
166
|
-
readonly
|
|
167
|
-
/**
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
readonly duration: number;
|
|
172
|
-
/** Maps normalized progress before interpolation. See {@link PibblEasing}. */
|
|
173
|
-
readonly easing?: PibblEasing;
|
|
174
|
-
/**
|
|
175
|
-
* Produces a value between two endpoints at the supplied progress. See {@link PibblInterpolator}.
|
|
176
|
-
*/
|
|
177
|
-
readonly interpolate?: PibblInterpolator<T>;
|
|
178
|
-
/**
|
|
179
|
-
* Compares old and new values to suppress equivalent updates. See
|
|
180
|
-
* {@link PibblTweenAnimatedValueOptions}.
|
|
181
|
-
*/
|
|
182
|
-
readonly equals?: import('../signals/types.js').SignalEquals<T>;
|
|
183
|
-
/** Initial animated value used when the hook mounts. See {@link PibblTweenAnimatedValueOptions}. */
|
|
184
|
-
readonly initial?: T;
|
|
185
|
-
/** Optional label used in diagnostics. See {@link PibblTweenAnimatedValueOptions}. */
|
|
186
|
-
readonly debugName?: string;
|
|
159
|
+
export interface PibblAnimationTarget<T> {
|
|
160
|
+
/** Last presented value, or the explicit mount initial value. See {@link useAnimatedValue}. */
|
|
161
|
+
readonly from: T;
|
|
162
|
+
/** Latest requested target. See {@link useAnimatedValue}. */
|
|
163
|
+
readonly to: T;
|
|
164
|
+
/** Committed analytic spring velocity, when the previous run is a spring. See {@link spring}. */
|
|
165
|
+
readonly velocity?: number;
|
|
187
166
|
}
|
|
188
167
|
/**
|
|
189
|
-
*
|
|
190
|
-
*
|
|
168
|
+
* Definition-based target animation with mount-owned equality and initial presentation.
|
|
191
169
|
* @see {@link useAnimatedValue}
|
|
192
|
-
* @see {@link
|
|
170
|
+
* @see {@link PibblAnimationDefinition}
|
|
193
171
|
*/
|
|
194
|
-
export interface
|
|
195
|
-
/** The literal "spring" identifying this variant. See {@link PibblSpringAnimatedValueOptions}. */
|
|
196
|
-
readonly type: 'spring';
|
|
197
|
-
/** Mass used by the spring or physics calculation. See {@link PibblSpringAnimatedValueOptions}. */
|
|
198
|
-
readonly mass?: number;
|
|
199
|
-
/**
|
|
200
|
-
* Spring stiffness controlling acceleration toward the target. See
|
|
201
|
-
* {@link PibblSpringAnimatedValueOptions}.
|
|
202
|
-
*/
|
|
203
|
-
readonly stiffness?: number;
|
|
204
|
-
/** Spring damping controlling the loss of velocity. See {@link PibblSpringAnimatedValueOptions}. */
|
|
205
|
-
readonly damping?: number;
|
|
206
|
-
/** Starting velocity of the spring. See {@link PibblSpringAnimatedValueOptions}. */
|
|
207
|
-
readonly initialVelocity?: number;
|
|
208
|
-
/**
|
|
209
|
-
* Velocity threshold used to determine when the spring has settled. See
|
|
210
|
-
* {@link PibblSpringAnimatedValueOptions}.
|
|
211
|
-
*/
|
|
212
|
-
readonly restSpeed?: number;
|
|
213
|
-
/**
|
|
214
|
-
* Distance-from-target threshold used to determine when the spring has settled. See
|
|
215
|
-
* {@link PibblSpringAnimatedValueOptions}.
|
|
216
|
-
*/
|
|
217
|
-
readonly restDelta?: number;
|
|
172
|
+
export interface PibblAnimatedValueOptions<T> {
|
|
218
173
|
/**
|
|
219
|
-
*
|
|
220
|
-
*
|
|
174
|
+
* Immutable definition or pure factory receiving the hook-owned endpoints. Factories run
|
|
175
|
+
* synchronously during render and cannot write signals or call hooks.
|
|
176
|
+
* @see {@link PibblAnimationTarget}
|
|
177
|
+
* @see {@link PibblAnimationDefinition}
|
|
178
|
+
* @param target - Current endpoints and previous spring velocity. See {@link PibblAnimationTarget}.
|
|
179
|
+
* @returns A concrete animation definition. See {@link PibblAnimationDefinition}.
|
|
221
180
|
*/
|
|
222
|
-
readonly
|
|
223
|
-
/**
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
/** Initial animated value used when the hook mounts. See {@link PibblSpringAnimatedValueOptions}. */
|
|
229
|
-
readonly initial?: number;
|
|
230
|
-
/** Optional label used in diagnostics. See {@link PibblSpringAnimatedValueOptions}. */
|
|
181
|
+
readonly animation: PibblAnimationDefinition<T> | ((target: PibblAnimationTarget<T>) => PibblAnimationDefinition<T>);
|
|
182
|
+
/** Comparison used to suppress equal targets. See {@link SignalEquals}. */
|
|
183
|
+
readonly equals?: SignalEquals<T>;
|
|
184
|
+
/** Initial presented value; omitted initial values present the target without entrance motion. See {@link useAnimatedValue}. */
|
|
185
|
+
readonly initial?: T;
|
|
186
|
+
/** Optional playback diagnostic label. See {@link useAnimatedValue}. */
|
|
231
187
|
readonly debugName?: string;
|
|
232
188
|
}
|
|
233
189
|
/**
|