@rafaelaugusto/jolt 0.1.0-beta.9 → 0.1.0-rc.2
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 +167 -21
- package/dist/animate.d.ts +25 -4
- package/dist/animate.d.ts.map +1 -1
- package/dist/animate.js +67 -26
- package/dist/animate.js.map +1 -1
- package/dist/blur/index.d.ts +6 -0
- package/dist/blur/index.d.ts.map +1 -0
- package/dist/blur/index.js +196 -0
- package/dist/blur/index.js.map +1 -0
- package/dist/blur/native.d.ts +17 -0
- package/dist/blur/native.d.ts.map +1 -0
- package/dist/blur/native.js +44 -0
- package/dist/blur/native.js.map +1 -0
- package/dist/blur/types.d.ts +32 -0
- package/dist/blur/types.d.ts.map +1 -0
- package/dist/blur/types.js +2 -0
- package/dist/blur/types.js.map +1 -0
- package/dist/bottom-sheet/geometry.d.ts +18 -0
- package/dist/bottom-sheet/geometry.d.ts.map +1 -0
- package/dist/bottom-sheet/geometry.js +51 -0
- package/dist/bottom-sheet/geometry.js.map +1 -0
- package/dist/bottom-sheet/index.d.ts +56 -0
- package/dist/bottom-sheet/index.d.ts.map +1 -0
- package/dist/bottom-sheet/index.js +462 -0
- package/dist/bottom-sheet/index.js.map +1 -0
- package/dist/bottom-sheet/native.d.ts +11 -0
- package/dist/bottom-sheet/native.d.ts.map +1 -0
- package/dist/bottom-sheet/native.js +173 -0
- package/dist/bottom-sheet/native.js.map +1 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +40 -1
- package/dist/config.js.map +1 -1
- package/dist/decay.d.ts +1 -0
- package/dist/decay.d.ts.map +1 -1
- package/dist/decay.js +7 -0
- package/dist/decay.js.map +1 -1
- package/dist/drag-physics.d.ts +6 -1
- package/dist/drag-physics.d.ts.map +1 -1
- package/dist/drag.d.ts +17 -3
- package/dist/drag.d.ts.map +1 -1
- package/dist/drag.js +34 -11
- package/dist/drag.js.map +1 -1
- package/dist/driver/android-gradient.d.ts +5 -0
- package/dist/driver/android-gradient.d.ts.map +1 -0
- package/dist/driver/android-gradient.js +99 -0
- package/dist/driver/android-gradient.js.map +1 -0
- package/dist/driver/android-particles.d.ts +6 -0
- package/dist/driver/android-particles.d.ts.map +1 -0
- package/dist/driver/android-particles.js +93 -0
- package/dist/driver/android-particles.js.map +1 -0
- package/dist/driver/android.d.ts.map +1 -1
- package/dist/driver/android.js +27 -1
- package/dist/driver/android.js.map +1 -1
- package/dist/driver/frame.d.ts +3 -0
- package/dist/driver/frame.d.ts.map +1 -0
- package/dist/driver/frame.js +7 -0
- package/dist/driver/frame.js.map +1 -0
- package/dist/driver/index.d.ts +4 -0
- package/dist/driver/index.d.ts.map +1 -1
- package/dist/driver/index.js.map +1 -1
- package/dist/driver/ios-gradient.d.ts +5 -0
- package/dist/driver/ios-gradient.d.ts.map +1 -0
- package/dist/driver/ios-gradient.js +131 -0
- package/dist/driver/ios-gradient.js.map +1 -0
- package/dist/driver/ios-scroll-delegate.d.ts +4 -0
- package/dist/driver/ios-scroll-delegate.d.ts.map +1 -0
- package/dist/driver/ios-scroll-delegate.js +26 -0
- package/dist/driver/ios-scroll-delegate.js.map +1 -0
- package/dist/driver/ios.d.ts.map +1 -1
- package/dist/driver/ios.js +9 -0
- package/dist/driver/ios.js.map +1 -1
- package/dist/easing.d.ts +3 -1
- package/dist/easing.d.ts.map +1 -1
- package/dist/easing.js +18 -1
- package/dist/easing.js.map +1 -1
- package/dist/engine.d.ts +31 -2
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +194 -42
- package/dist/engine.js.map +1 -1
- package/dist/gesture-native.d.ts +28 -0
- package/dist/gesture-native.d.ts.map +1 -0
- package/dist/gesture-native.js +61 -0
- package/dist/gesture-native.js.map +1 -0
- package/dist/gestures/index.d.ts +69 -0
- package/dist/gestures/index.d.ts.map +1 -0
- package/dist/gestures/index.js +262 -0
- package/dist/gestures/index.js.map +1 -0
- package/dist/glass/index.d.ts +55 -0
- package/dist/glass/index.d.ts.map +1 -0
- package/dist/glass/index.js +205 -0
- package/dist/glass/index.js.map +1 -0
- package/dist/gradient-binding.d.ts +38 -0
- package/dist/gradient-binding.d.ts.map +1 -0
- package/dist/gradient-binding.js +128 -0
- package/dist/gradient-binding.js.map +1 -0
- package/dist/gradient.d.ts +105 -0
- package/dist/gradient.d.ts.map +1 -0
- package/dist/gradient.js +514 -0
- package/dist/gradient.js.map +1 -0
- package/dist/gravity.d.ts +13 -0
- package/dist/gravity.d.ts.map +1 -0
- package/dist/gravity.js +84 -0
- package/dist/gravity.js.map +1 -0
- package/dist/haptics.d.ts.map +1 -1
- package/dist/haptics.js +101 -28
- package/dist/haptics.js.map +1 -1
- package/dist/image-effect.d.ts +1 -0
- package/dist/image-effect.d.ts.map +1 -1
- package/dist/image-effect.js +10 -2
- package/dist/image-effect.js.map +1 -1
- package/dist/index.d.ts +19 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/inspector/index.d.ts +86 -0
- package/dist/inspector/index.d.ts.map +1 -0
- package/dist/inspector/index.js +419 -0
- package/dist/inspector/index.js.map +1 -0
- package/dist/inspector/plot.d.ts +4 -0
- package/dist/inspector/plot.d.ts.map +1 -0
- package/dist/inspector/plot.js +23 -0
- package/dist/inspector/plot.js.map +1 -0
- package/dist/inspector/probe.d.ts +19 -0
- package/dist/inspector/probe.d.ts.map +1 -0
- package/dist/inspector/probe.js +37 -0
- package/dist/inspector/probe.js.map +1 -0
- package/dist/inspector/tuning.d.ts +19 -0
- package/dist/inspector/tuning.d.ts.map +1 -0
- package/dist/inspector/tuning.js +37 -0
- package/dist/inspector/tuning.js.map +1 -0
- package/dist/interactive-navigation/index.d.ts +44 -0
- package/dist/interactive-navigation/index.d.ts.map +1 -0
- package/dist/interactive-navigation/index.js +350 -0
- package/dist/interactive-navigation/index.js.map +1 -0
- package/dist/keyboard.d.ts +24 -0
- package/dist/keyboard.d.ts.map +1 -1
- package/dist/keyboard.js +199 -6
- package/dist/keyboard.js.map +1 -1
- package/dist/live-spring-driver.d.ts +52 -0
- package/dist/live-spring-driver.d.ts.map +1 -0
- package/dist/live-spring-driver.js +104 -0
- package/dist/live-spring-driver.js.map +1 -0
- package/dist/mixer.d.ts +55 -0
- package/dist/mixer.d.ts.map +1 -0
- package/dist/mixer.js +286 -0
- package/dist/mixer.js.map +1 -0
- package/dist/motion-scope.d.ts +8 -2
- package/dist/motion-scope.d.ts.map +1 -1
- package/dist/motion-scope.js +24 -3
- package/dist/motion-scope.js.map +1 -1
- package/dist/motion-states.d.ts +19 -7
- package/dist/motion-states.d.ts.map +1 -1
- package/dist/motion-states.js +116 -26
- package/dist/motion-states.js.map +1 -1
- package/dist/motion-value.d.ts +227 -0
- package/dist/motion-value.d.ts.map +1 -0
- package/dist/motion-value.js +1074 -0
- package/dist/motion-value.js.map +1 -0
- package/dist/native/index.d.ts +10 -0
- package/dist/native/index.d.ts.map +1 -0
- package/dist/native/index.js +6 -0
- package/dist/native/index.js.map +1 -0
- package/dist/native-properties.d.ts +28 -0
- package/dist/native-properties.d.ts.map +1 -0
- package/dist/native-properties.js +154 -0
- package/dist/native-properties.js.map +1 -0
- package/dist/native-property-driver.d.ts +19 -0
- package/dist/native-property-driver.d.ts.map +1 -0
- package/dist/native-property-driver.js +69 -0
- package/dist/native-property-driver.js.map +1 -0
- package/dist/native-property.d.ts +37 -0
- package/dist/native-property.d.ts.map +1 -0
- package/dist/native-property.js +285 -0
- package/dist/native-property.js.map +1 -0
- package/dist/particles.d.ts +5 -2
- package/dist/particles.d.ts.map +1 -1
- package/dist/particles.js +16 -10
- package/dist/particles.js.map +1 -1
- package/dist/path.d.ts.map +1 -1
- package/dist/path.js +2 -2
- package/dist/path.js.map +1 -1
- package/dist/physics/index.d.ts +139 -0
- package/dist/physics/index.d.ts.map +1 -0
- package/dist/physics/index.js +316 -0
- package/dist/physics/index.js.map +1 -0
- package/dist/physics/native.d.ts +54 -0
- package/dist/physics/native.d.ts.map +1 -0
- package/dist/physics/native.js +64 -0
- package/dist/physics/native.js.map +1 -0
- package/dist/playback-group.d.ts.map +1 -1
- package/dist/playback-group.js +17 -1
- package/dist/playback-group.js.map +1 -1
- package/dist/playback.d.ts +15 -0
- package/dist/playback.d.ts.map +1 -1
- package/dist/playback.js +23 -0
- package/dist/playback.js.map +1 -1
- package/dist/predictive-back/index.d.ts +45 -0
- package/dist/predictive-back/index.d.ts.map +1 -0
- package/dist/predictive-back/index.js +220 -0
- package/dist/predictive-back/index.js.map +1 -0
- package/dist/predictive-back/presentation.d.ts +4 -0
- package/dist/predictive-back/presentation.d.ts.map +1 -0
- package/dist/predictive-back/presentation.js +3 -0
- package/dist/predictive-back/presentation.js.map +1 -0
- package/dist/press.d.ts.map +1 -1
- package/dist/press.js +11 -2
- package/dist/press.js.map +1 -1
- package/dist/reorder/handle.d.ts +6 -0
- package/dist/reorder/handle.d.ts.map +1 -0
- package/dist/reorder/handle.js +10 -0
- package/dist/reorder/handle.js.map +1 -0
- package/dist/reorder/index.d.ts +10 -0
- package/dist/reorder/index.d.ts.map +1 -0
- package/dist/reorder/index.js +233 -0
- package/dist/reorder/index.js.map +1 -0
- package/dist/reorder/list-view.d.ts +5 -0
- package/dist/reorder/list-view.d.ts.map +1 -0
- package/dist/reorder/list-view.js +238 -0
- package/dist/reorder/list-view.js.map +1 -0
- package/dist/reorder/model.d.ts +6 -0
- package/dist/reorder/model.d.ts.map +1 -0
- package/dist/reorder/model.js +30 -0
- package/dist/reorder/model.js.map +1 -0
- package/dist/reorder/surface.d.ts +6 -0
- package/dist/reorder/surface.d.ts.map +1 -0
- package/dist/reorder/surface.js +10 -0
- package/dist/reorder/surface.js.map +1 -0
- package/dist/reorder/types.d.ts +92 -0
- package/dist/reorder/types.d.ts.map +1 -0
- package/dist/reorder/types.js +2 -0
- package/dist/reorder/types.js.map +1 -0
- package/dist/sampling.d.ts +35 -0
- package/dist/sampling.d.ts.map +1 -0
- package/dist/sampling.js +123 -0
- package/dist/sampling.js.map +1 -0
- package/dist/scene-appearance.d.ts +14 -0
- package/dist/scene-appearance.d.ts.map +1 -0
- package/dist/scene-appearance.js +68 -0
- package/dist/scene-appearance.js.map +1 -0
- package/dist/scene-camera.d.ts +5 -0
- package/dist/scene-camera.d.ts.map +1 -0
- package/dist/scene-camera.js +23 -0
- package/dist/scene-camera.js.map +1 -0
- package/dist/scene-shader.d.ts +18 -0
- package/dist/scene-shader.d.ts.map +1 -0
- package/dist/scene-shader.js +76 -0
- package/dist/scene-shader.js.map +1 -0
- package/dist/scroll-header/geometry.d.ts +18 -0
- package/dist/scroll-header/geometry.d.ts.map +1 -0
- package/dist/scroll-header/geometry.js +46 -0
- package/dist/scroll-header/geometry.js.map +1 -0
- package/dist/scroll-header/index.d.ts +48 -0
- package/dist/scroll-header/index.d.ts.map +1 -0
- package/dist/scroll-header/index.js +399 -0
- package/dist/scroll-header/index.js.map +1 -0
- package/dist/scroll-header/native.d.ts +28 -0
- package/dist/scroll-header/native.d.ts.map +1 -0
- package/dist/scroll-header/native.js +43 -0
- package/dist/scroll-header/native.js.map +1 -0
- package/dist/sensors/index.d.ts +69 -0
- package/dist/sensors/index.d.ts.map +1 -0
- package/dist/sensors/index.js +149 -0
- package/dist/sensors/index.js.map +1 -0
- package/dist/sensors/native.d.ts +20 -0
- package/dist/sensors/native.d.ts.map +1 -0
- package/dist/sensors/native.js +48 -0
- package/dist/sensors/native.js.map +1 -0
- package/dist/sequence.d.ts +24 -0
- package/dist/sequence.d.ts.map +1 -1
- package/dist/sequence.js +181 -19
- package/dist/sequence.js.map +1 -1
- package/dist/shapes/android.d.ts +3 -0
- package/dist/shapes/android.d.ts.map +1 -0
- package/dist/shapes/android.js +51 -0
- package/dist/shapes/android.js.map +1 -0
- package/dist/shapes/index.d.ts +6 -0
- package/dist/shapes/index.d.ts.map +1 -0
- package/dist/shapes/index.js +238 -0
- package/dist/shapes/index.js.map +1 -0
- package/dist/shapes/ios.d.ts +3 -0
- package/dist/shapes/ios.d.ts.map +1 -0
- package/dist/shapes/ios.js +164 -0
- package/dist/shapes/ios.js.map +1 -0
- package/dist/shapes/native.d.ts +18 -0
- package/dist/shapes/native.d.ts.map +1 -0
- package/dist/shapes/native.js +10 -0
- package/dist/shapes/native.js.map +1 -0
- package/dist/shapes/path.d.ts +10 -0
- package/dist/shapes/path.d.ts.map +1 -0
- package/dist/shapes/path.js +106 -0
- package/dist/shapes/path.js.map +1 -0
- package/dist/shapes/types.d.ts +55 -0
- package/dist/shapes/types.d.ts.map +1 -0
- package/dist/shapes/types.js +11 -0
- package/dist/shapes/types.js.map +1 -0
- package/dist/shared-layout/index.d.ts +40 -0
- package/dist/shared-layout/index.d.ts.map +1 -0
- package/dist/shared-layout/index.js +267 -0
- package/dist/shared-layout/index.js.map +1 -0
- package/dist/shared-layout/native.d.ts +15 -0
- package/dist/shared-layout/native.d.ts.map +1 -0
- package/dist/shared-layout/native.js +79 -0
- package/dist/shared-layout/native.js.map +1 -0
- package/dist/shared-layout/timing.d.ts +9 -0
- package/dist/shared-layout/timing.d.ts.map +1 -0
- package/dist/shared-layout/timing.js +68 -0
- package/dist/shared-layout/timing.js.map +1 -0
- package/dist/shared-navigation/entry.d.ts +51 -0
- package/dist/shared-navigation/entry.d.ts.map +1 -0
- package/dist/shared-navigation/entry.js +619 -0
- package/dist/shared-navigation/entry.js.map +1 -0
- package/dist/shared-navigation/index.d.ts +58 -0
- package/dist/shared-navigation/index.d.ts.map +1 -0
- package/dist/shared-navigation/index.js +318 -0
- package/dist/shared-navigation/index.js.map +1 -0
- package/dist/shared-navigation/return-signal.d.ts +16 -0
- package/dist/shared-navigation/return-signal.d.ts.map +1 -0
- package/dist/shared-navigation/return-signal.js +35 -0
- package/dist/shared-navigation/return-signal.js.map +1 -0
- package/dist/shared-navigation/return-target.d.ts +32 -0
- package/dist/shared-navigation/return-target.d.ts.map +1 -0
- package/dist/shared-navigation/return-target.js +168 -0
- package/dist/shared-navigation/return-target.js.map +1 -0
- package/dist/shared-navigation/scope.d.ts +4 -0
- package/dist/shared-navigation/scope.d.ts.map +1 -0
- package/dist/shared-navigation/scope.js +2 -0
- package/dist/shared-navigation/scope.js.map +1 -0
- package/dist/shared-navigation/targets.d.ts +6 -0
- package/dist/shared-navigation/targets.d.ts.map +1 -0
- package/dist/shared-navigation/targets.js +36 -0
- package/dist/shared-navigation/targets.js.map +1 -0
- package/dist/size-layout.d.ts +19 -0
- package/dist/size-layout.d.ts.map +1 -0
- package/dist/size-layout.js +216 -0
- package/dist/size-layout.js.map +1 -0
- package/dist/size.d.ts +19 -0
- package/dist/size.d.ts.map +1 -0
- package/dist/size.js +251 -0
- package/dist/size.js.map +1 -0
- package/dist/spring.d.ts +2 -0
- package/dist/spring.d.ts.map +1 -1
- package/dist/spring.js +11 -0
- package/dist/spring.js.map +1 -1
- package/dist/svg-path.d.ts +18 -0
- package/dist/svg-path.d.ts.map +1 -1
- package/dist/svg-path.js +3 -2
- package/dist/svg-path.js.map +1 -1
- package/dist/testing/clock.d.ts +40 -0
- package/dist/testing/clock.d.ts.map +1 -0
- package/dist/testing/clock.js +116 -0
- package/dist/testing/clock.js.map +1 -0
- package/dist/testing/handoff-recorder.d.ts +8 -0
- package/dist/testing/handoff-recorder.d.ts.map +1 -0
- package/dist/testing/handoff-recorder.js +77 -0
- package/dist/testing/handoff-recorder.js.map +1 -0
- package/dist/testing/index.d.ts +5 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +5 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/native.d.ts +46 -0
- package/dist/testing/native.d.ts.map +1 -0
- package/dist/testing/native.js +313 -0
- package/dist/testing/native.js.map +1 -0
- package/dist/testing/presentation.d.ts +11 -0
- package/dist/testing/presentation.d.ts.map +1 -0
- package/dist/testing/presentation.js +45 -0
- package/dist/testing/presentation.js.map +1 -0
- package/dist/testing/replay.d.ts +39 -0
- package/dist/testing/replay.d.ts.map +1 -0
- package/dist/testing/replay.js +99 -0
- package/dist/testing/replay.js.map +1 -0
- package/dist/testing/scroll-handoff-native.d.ts +10 -0
- package/dist/testing/scroll-handoff-native.d.ts.map +1 -0
- package/dist/testing/scroll-handoff-native.js +151 -0
- package/dist/testing/scroll-handoff-native.js.map +1 -0
- package/dist/testing/scroll-handoff.d.ts +25 -0
- package/dist/testing/scroll-handoff.d.ts.map +1 -0
- package/dist/testing/scroll-handoff.js +127 -0
- package/dist/testing/scroll-handoff.js.map +1 -0
- package/dist/testing/sensors.d.ts +13 -0
- package/dist/testing/sensors.d.ts.map +1 -0
- package/dist/testing/sensors.js +26 -0
- package/dist/testing/sensors.js.map +1 -0
- package/dist/testing/trace.d.ts +101 -0
- package/dist/testing/trace.d.ts.map +1 -0
- package/dist/testing/trace.js +263 -0
- package/dist/testing/trace.js.map +1 -0
- package/dist/timed-animation.d.ts +38 -0
- package/dist/timed-animation.d.ts.map +1 -0
- package/dist/timed-animation.js +177 -0
- package/dist/timed-animation.js.map +1 -0
- package/dist/track.d.ts +3 -0
- package/dist/track.d.ts.map +1 -1
- package/dist/track.js +281 -40
- package/dist/track.js.map +1 -1
- package/dist/transition.d.ts +54 -2
- package/dist/transition.d.ts.map +1 -1
- package/dist/transition.js +128 -8
- package/dist/transition.js.map +1 -1
- package/dist/types.d.ts +10 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/value-observers.d.ts +22 -0
- package/dist/value-observers.d.ts.map +1 -0
- package/dist/value-observers.js +122 -0
- package/dist/value-observers.js.map +1 -0
- package/dist/value-track.d.ts +13 -0
- package/dist/value-track.d.ts.map +1 -0
- package/dist/value-track.js +59 -0
- package/dist/value-track.js.map +1 -0
- package/dist/vue/index.d.ts +33 -3
- package/dist/vue/index.d.ts.map +1 -1
- package/dist/vue/index.js +118 -3
- package/dist/vue/index.js.map +1 -1
- package/dist/zoomable.d.ts +1 -1
- package/dist/zoomable.d.ts.map +1 -1
- package/package.json +68 -3
- package/platforms/android/include.gradle +10 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/BlurEffect.java +89 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/CircleMath.java +158 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/CircleWorld.java +221 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/GestureSession.java +227 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/GestureSurface.java +54 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/GradientLayer.java +224 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/KeyboardFrame.java +53 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/KeyboardFrameFollower.java +57 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/KeyboardObserver.java +97 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/LiveSpring.java +277 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/MotionProbe.java +70 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/ParticleEmitter.java +192 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/ParticleSimulation.java +114 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/PredictiveBackSession.java +212 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/ReorderHandle.java +25 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/ReorderSession.java +213 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/ReorderSurface.java +27 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/ScrollHeader.java +84 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/SensorMath.java +28 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/SensorSource.java +217 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/ShapeLayer.java +120 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/SharedLayoutFlight.java +287 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/SharedNavigationScene.java +115 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/SpringState.java +39 -0
- package/platforms/android/proguard-rules.pro +20 -0
- package/platforms/ios/build.xcconfig +1 -1
- package/platforms/ios/src/JoltBlur.h +14 -0
- package/platforms/ios/src/JoltBlur.m +86 -0
- package/platforms/ios/src/JoltCircleMath.h +191 -0
- package/platforms/ios/src/JoltCircleWorld.h +18 -0
- package/platforms/ios/src/JoltCircleWorld.m +218 -0
- package/platforms/ios/src/JoltGestureSession.h +23 -0
- package/platforms/ios/src/JoltGestureSession.m +251 -0
- package/platforms/ios/src/JoltInteractiveNavigation.h +23 -0
- package/platforms/ios/src/JoltInteractiveNavigation.m +255 -0
- package/platforms/ios/src/JoltLiveSpring.h +29 -0
- package/platforms/ios/src/JoltLiveSpring.m +243 -0
- package/platforms/ios/src/JoltMotionProbe.h +9 -0
- package/platforms/ios/src/JoltMotionProbe.m +72 -0
- package/platforms/ios/src/JoltReorderSession.h +15 -0
- package/platforms/ios/src/JoltReorderSession.m +205 -0
- package/platforms/ios/src/JoltScrollHeader.h +13 -0
- package/platforms/ios/src/JoltScrollHeader.m +101 -0
- package/platforms/ios/src/JoltSensorMath.h +39 -0
- package/platforms/ios/src/JoltSensorSource.h +13 -0
- package/platforms/ios/src/JoltSensorSource.m +201 -0
- package/platforms/ios/src/JoltSharedLayoutFlight.h +19 -0
- package/platforms/ios/src/JoltSharedLayoutFlight.m +250 -0
- package/platforms/ios/src/JoltSpringState.h +35 -0
- package/platforms/ios/src/module.modulemap +10 -0
- package/src/android-plugin.d.ts +464 -0
- package/src/animate.ts +129 -15
- package/src/blur/index.ts +195 -0
- package/src/blur/native.ts +70 -0
- package/src/blur/types.ts +32 -0
- package/src/bottom-sheet/geometry.ts +84 -0
- package/src/bottom-sheet/index.ts +536 -0
- package/src/bottom-sheet/native.ts +214 -0
- package/src/config.ts +39 -1
- package/src/decay.ts +9 -0
- package/src/drag.ts +67 -21
- package/src/driver/android-gradient.ts +116 -0
- package/src/driver/android-particles.ts +118 -0
- package/src/driver/android.ts +31 -1
- package/src/driver/frame.ts +10 -0
- package/src/driver/index.ts +4 -0
- package/src/driver/ios-gradient.ts +136 -0
- package/src/driver/ios-scroll-delegate.ts +23 -0
- package/src/driver/ios.ts +10 -0
- package/src/easing.ts +21 -1
- package/src/engine.ts +209 -60
- package/src/gesture-native.ts +139 -0
- package/src/gestures/index.ts +365 -0
- package/src/glass/index.ts +218 -0
- package/src/gradient-binding.ts +158 -0
- package/src/gradient.ts +663 -0
- package/src/gravity.ts +107 -0
- package/src/haptics.ts +106 -28
- package/src/image-effect.ts +10 -2
- package/src/index.ts +56 -7
- package/src/inspector/index.ts +523 -0
- package/src/inspector/plot.ts +27 -0
- package/src/inspector/probe.ts +50 -0
- package/src/inspector/tuning.ts +51 -0
- package/src/interactive-navigation/index.ts +427 -0
- package/src/ios-plugin.d.ts +280 -0
- package/src/keyboard.ts +231 -7
- package/src/live-spring-driver.ts +181 -0
- package/src/mixer.ts +312 -0
- package/src/motion-scope.ts +39 -6
- package/src/motion-states.ts +149 -42
- package/src/motion-value.ts +1289 -0
- package/src/native/index.ts +30 -0
- package/src/native-properties.ts +188 -0
- package/src/native-property-driver.ts +123 -0
- package/src/native-property.ts +366 -0
- package/src/particles.ts +18 -17
- package/src/path.ts +2 -1
- package/src/physics/index.ts +476 -0
- package/src/physics/native.ts +121 -0
- package/src/playback-group.ts +17 -1
- package/src/playback.ts +41 -0
- package/src/predictive-back/index.ts +280 -0
- package/src/predictive-back/presentation.ts +6 -0
- package/src/press.ts +10 -2
- package/src/reorder/handle.ts +9 -0
- package/src/reorder/index.ts +243 -0
- package/src/reorder/list-view.ts +262 -0
- package/src/reorder/model.ts +47 -0
- package/src/reorder/surface.ts +10 -0
- package/src/reorder/types.ts +87 -0
- package/src/sampling.ts +173 -0
- package/src/scene-appearance.ts +92 -0
- package/src/scene-camera.ts +30 -0
- package/src/scene-shader.ts +139 -0
- package/src/scroll-header/geometry.ts +88 -0
- package/src/scroll-header/index.ts +530 -0
- package/src/scroll-header/native.ts +89 -0
- package/src/sensors/index.ts +246 -0
- package/src/sensors/native.ts +72 -0
- package/src/sequence.ts +209 -20
- package/src/shapes/android.ts +63 -0
- package/src/shapes/index.ts +267 -0
- package/src/shapes/ios.ts +194 -0
- package/src/shapes/native.ts +27 -0
- package/src/shapes/path.ts +127 -0
- package/src/shapes/types.ts +63 -0
- package/src/shared-layout/index.ts +343 -0
- package/src/shared-layout/native.ts +138 -0
- package/src/shared-layout/timing.ts +87 -0
- package/src/shared-navigation/entry.ts +695 -0
- package/src/shared-navigation/index.ts +414 -0
- package/src/shared-navigation/return-signal.ts +41 -0
- package/src/shared-navigation/return-target.ts +197 -0
- package/src/shared-navigation/scope.ts +3 -0
- package/src/shared-navigation/targets.ts +38 -0
- package/src/size-layout.ts +237 -0
- package/src/size.ts +302 -0
- package/src/spring.ts +18 -0
- package/src/svg-path.ts +8 -3
- package/src/testing/clock.ts +128 -0
- package/src/testing/handoff-recorder.ts +98 -0
- package/src/testing/index.ts +4 -0
- package/src/testing/native.ts +386 -0
- package/src/testing/presentation.ts +46 -0
- package/src/testing/replay.ts +149 -0
- package/src/testing/scroll-handoff-native.ts +201 -0
- package/src/testing/scroll-handoff.ts +140 -0
- package/src/testing/sensors.ts +41 -0
- package/src/testing/trace.ts +340 -0
- package/src/timed-animation.ts +192 -0
- package/src/track.ts +334 -38
- package/src/transition.ts +197 -9
- package/src/types.ts +11 -1
- package/src/value-observers.ts +147 -0
- package/src/value-track.ts +71 -0
- package/src/vue/index.ts +147 -1
- package/src/zoomable.ts +1 -1
package/src/engine.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createClock,
|
|
3
|
+
registerPlayback,
|
|
3
4
|
validateProgress,
|
|
4
5
|
type PlaybackAnimation,
|
|
5
6
|
type PlaybackClock,
|
|
6
7
|
type PlaybackCommand,
|
|
7
8
|
} from './playback.js'
|
|
8
|
-
import type
|
|
9
|
+
import { Application, type View } from '@nativescript/core'
|
|
9
10
|
import { getDriver } from './driver/index.js'
|
|
10
11
|
import { playHaptics, type HapticOptions } from './haptics.js'
|
|
11
12
|
import { readValue, writeValue, type Property } from './properties.js'
|
|
@@ -13,6 +14,7 @@ import { createTrack, type Track } from './track.js'
|
|
|
13
14
|
import type { ResolvedTransition } from './transition.js'
|
|
14
15
|
import { isColorProperty } from './color.js'
|
|
15
16
|
import type { PreparedPath, PathProperty } from './path.js'
|
|
17
|
+
import { BASE, identity, MixHandle, mixFor, mixOf, mixesOf } from './mixer.js'
|
|
16
18
|
|
|
17
19
|
export interface Animation extends PromiseLike<boolean> {
|
|
18
20
|
/**
|
|
@@ -32,10 +34,17 @@ export interface Plan {
|
|
|
32
34
|
transition: ResolvedTransition
|
|
33
35
|
relative?: boolean
|
|
34
36
|
path?: PreparedPath
|
|
37
|
+
/** A track that is already sampled, like a motion value mapped onto a property. */
|
|
38
|
+
track?: () => Track
|
|
39
|
+
/** A named layer composed with the property's base instead of replacing it. */
|
|
40
|
+
layer?: string
|
|
35
41
|
}
|
|
36
42
|
|
|
37
43
|
interface Entry {
|
|
38
44
|
readonly track: Track
|
|
45
|
+
/** The property, or the property and its layer. */
|
|
46
|
+
readonly key: string
|
|
47
|
+
readonly layer?: string
|
|
39
48
|
readonly startedAt: number
|
|
40
49
|
readonly owner: ViewAnimation
|
|
41
50
|
handle: unknown
|
|
@@ -48,7 +57,7 @@ interface Entry {
|
|
|
48
57
|
|
|
49
58
|
const revisions = new WeakMap<View, Map<Property, symbol>>()
|
|
50
59
|
|
|
51
|
-
const running = new WeakMap<View, Map<
|
|
60
|
+
const running = new WeakMap<View, Map<string, Entry>>()
|
|
52
61
|
const arrivals = new WeakMap<Animation, Promise<unknown>>()
|
|
53
62
|
|
|
54
63
|
/** Internal forecast for starting a timeline step before another one arrives. */
|
|
@@ -101,7 +110,9 @@ export class ViewAnimation implements PlaybackAnimation {
|
|
|
101
110
|
private readyListener: (() => void) | undefined
|
|
102
111
|
private readonly endless: boolean
|
|
103
112
|
private readonly timingListeners = new Set<() => void>()
|
|
113
|
+
private readonly playbackChanged: () => void
|
|
104
114
|
private timingChanged() {
|
|
115
|
+
this.playbackChanged()
|
|
105
116
|
for (const callback of [...this.timingListeners]) callback()
|
|
106
117
|
}
|
|
107
118
|
|
|
@@ -134,6 +145,7 @@ export class ViewAnimation implements PlaybackAnimation {
|
|
|
134
145
|
if (this.settled) return
|
|
135
146
|
if (!this.started) {
|
|
136
147
|
this.pendingProgress = value
|
|
148
|
+
this.timingChanged()
|
|
137
149
|
return
|
|
138
150
|
}
|
|
139
151
|
this.seekTime(this.duration * value)
|
|
@@ -188,7 +200,7 @@ export class ViewAnimation implements PlaybackAnimation {
|
|
|
188
200
|
entry.done = false
|
|
189
201
|
entry.finished = false
|
|
190
202
|
this.pending++
|
|
191
|
-
entriesOf(this.view).set(entry.
|
|
203
|
+
entriesOf(this.view).set(entry.key, entry)
|
|
192
204
|
this.playEntry(entry, position)
|
|
193
205
|
}
|
|
194
206
|
}
|
|
@@ -199,9 +211,9 @@ export class ViewAnimation implements PlaybackAnimation {
|
|
|
199
211
|
this.timingChanged()
|
|
200
212
|
}
|
|
201
213
|
elapsed(entry: Entry, now: number) {
|
|
202
|
-
return this.
|
|
203
|
-
|
|
204
|
-
|
|
214
|
+
if (this.controlled) return this.time()
|
|
215
|
+
if (entry.handle instanceof MixHandle) return entry.handle.elapsed()
|
|
216
|
+
return getDriver().elapsed?.(entry.handle) ?? now - entry.startedAt
|
|
205
217
|
}
|
|
206
218
|
private time() {
|
|
207
219
|
return this.clock?.time() ?? 0
|
|
@@ -209,8 +221,10 @@ export class ViewAnimation implements PlaybackAnimation {
|
|
|
209
221
|
private controlTracks(position: number, command: PlaybackCommand = 'seek') {
|
|
210
222
|
const driver = getDriver()
|
|
211
223
|
for (const entry of this.entries)
|
|
212
|
-
if (
|
|
213
|
-
|
|
224
|
+
if (entry.done) continue
|
|
225
|
+
else if (entry.handle instanceof MixHandle)
|
|
226
|
+
entry.handle.control(position, this._paused)
|
|
227
|
+
else driver.control?.(this.view, entry.handle, position, this._paused, command)
|
|
214
228
|
}
|
|
215
229
|
private scheduleArrival() {
|
|
216
230
|
this.cancelArrival?.()
|
|
@@ -244,21 +258,38 @@ export class ViewAnimation implements PlaybackAnimation {
|
|
|
244
258
|
const initial = entry.generation === 0
|
|
245
259
|
const instance = ++entry.generation
|
|
246
260
|
const driver = getDriver()
|
|
247
|
-
entry.
|
|
248
|
-
|
|
249
|
-
entry.
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
261
|
+
const startedAt = initial ? entry.startedAt : driver.now() - elapsed
|
|
262
|
+
const onEnd = (finished = true) => {
|
|
263
|
+
if (entry.done || instance !== entry.generation) return
|
|
264
|
+
entry.done = true
|
|
265
|
+
entry.finished = finished
|
|
266
|
+
entry.completedValue = readValue(this.view, entry.track.property)
|
|
267
|
+
forget(entry)
|
|
268
|
+
this.ended(finished)
|
|
269
|
+
}
|
|
270
|
+
const { property } = entry.track
|
|
271
|
+
const mix =
|
|
272
|
+
entry.layer !== undefined ? mixing(this.view, property) : mixOf(this.view, property)
|
|
273
|
+
entry.handle = mix
|
|
274
|
+
? mix.adopt(entry.layer ?? BASE, entry.track, startedAt, onEnd)
|
|
275
|
+
: driver.play(this.view, entry.track, startedAt, onEnd)
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/** Moves a natively playing entry into its property's mix, without restarting it. */
|
|
279
|
+
rehome(entry: Entry) {
|
|
280
|
+
if (entry.done || entry.handle instanceof MixHandle) return
|
|
281
|
+
const elapsed = this.elapsed(entry, getDriver().now())
|
|
282
|
+
const handle = entry.handle
|
|
283
|
+
entry.generation++
|
|
284
|
+
getDriver().stop(this.view, handle)
|
|
285
|
+
this.playEntry(entry, elapsed)
|
|
286
|
+
}
|
|
287
|
+
private unloaded = () => {
|
|
288
|
+
// NativeScript unloads the root view when iOS enters the background.
|
|
289
|
+
// An explicitly paused owner can resume after that temporary unload.
|
|
290
|
+
if (this._paused && Application.suspended) return
|
|
291
|
+
this.stop()
|
|
260
292
|
}
|
|
261
|
-
private unloaded = () => this.stop()
|
|
262
293
|
|
|
263
294
|
constructor(
|
|
264
295
|
readonly view: View,
|
|
@@ -273,6 +304,18 @@ export class ViewAnimation implements PlaybackAnimation {
|
|
|
273
304
|
!Number.isFinite(plan.transition.curve.duration)),
|
|
274
305
|
)
|
|
275
306
|
this.finished = new Promise((resolve) => (this.resolve = resolve))
|
|
307
|
+
this.playbackChanged = registerPlayback(this, () => ({
|
|
308
|
+
position: this.pendingProgress,
|
|
309
|
+
time:
|
|
310
|
+
this.pendingProgress === undefined
|
|
311
|
+
? this.time()
|
|
312
|
+
: this.pendingProgress * this.duration,
|
|
313
|
+
duration: this.duration,
|
|
314
|
+
paused: this._paused,
|
|
315
|
+
ready: this.ready,
|
|
316
|
+
settled: this.settled,
|
|
317
|
+
completed: this.settled && this.complete,
|
|
318
|
+
}))
|
|
276
319
|
setArrival(this, new Promise<void>((resolve) => (this.arrive = resolve)))
|
|
277
320
|
setArrivalTiming(this, {
|
|
278
321
|
read: () => ({
|
|
@@ -322,52 +365,79 @@ export class ViewAnimation implements PlaybackAnimation {
|
|
|
322
365
|
const now = driver.now()
|
|
323
366
|
const entries = entriesOf(this.view)
|
|
324
367
|
|
|
325
|
-
const
|
|
326
|
-
const
|
|
368
|
+
const made = plans.map((plan) => {
|
|
369
|
+
const { property, keyframes, transition, relative, path, layer } = plan
|
|
370
|
+
const key = layer === undefined ? property : `${property}#${layer}`
|
|
371
|
+
const mixed = layer !== undefined || mixOf(this.view, property) !== undefined
|
|
372
|
+
const previous = entries.get(key)
|
|
327
373
|
let current: number
|
|
328
374
|
let velocity = 0
|
|
329
375
|
if (previous) {
|
|
330
376
|
const elapsed = elapsedOf(previous, now)
|
|
331
|
-
current =
|
|
377
|
+
current =
|
|
378
|
+
(mixed ? undefined : driver.presented(this.view, property)) ??
|
|
379
|
+
previous.track.valueAt(elapsed)
|
|
332
380
|
velocity = previous.owner.paused ? 0 : previous.track.velocityAt(elapsed)
|
|
333
|
-
|
|
381
|
+
} else if (mixed) {
|
|
382
|
+
current =
|
|
383
|
+
mixOf(this.view, property)?.rest(layer ?? BASE) ??
|
|
384
|
+
(layer === undefined ? readValue(this.view, property) : identity(property))
|
|
334
385
|
} else {
|
|
335
386
|
current =
|
|
336
387
|
(isColorProperty(property)
|
|
337
388
|
? driver.presented(this.view, property)
|
|
338
389
|
: undefined) ?? readValue(this.view, property)
|
|
339
390
|
}
|
|
340
|
-
|
|
341
|
-
return
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
391
|
+
const build = () => {
|
|
392
|
+
if (plan.track) return plan.track()
|
|
393
|
+
if (path)
|
|
394
|
+
return path.track(
|
|
395
|
+
property as PathProperty,
|
|
396
|
+
relative ? current : 0,
|
|
397
|
+
transition.delay,
|
|
398
|
+
)
|
|
399
|
+
return createTrack(
|
|
400
|
+
property,
|
|
401
|
+
keyframes.map((value) => {
|
|
402
|
+
if (value === null) return current
|
|
403
|
+
if (layer !== undefined || !relative || isColorProperty(property))
|
|
404
|
+
return value
|
|
405
|
+
return property === 'opacity' || property.startsWith('scale')
|
|
406
|
+
? current * value
|
|
407
|
+
: current + value
|
|
408
|
+
}),
|
|
409
|
+
transition,
|
|
410
|
+
velocity,
|
|
345
411
|
)
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
keyframes.map((value) => {
|
|
349
|
-
if (value === null) return current
|
|
350
|
-
if (!relative || isColorProperty(property)) return value
|
|
351
|
-
return property === 'opacity' || property.startsWith('scale')
|
|
352
|
-
? current * value
|
|
353
|
-
: current + value
|
|
354
|
-
}),
|
|
355
|
-
transition,
|
|
356
|
-
velocity,
|
|
357
|
-
)
|
|
412
|
+
}
|
|
413
|
+
return { track: build(), key, layer, previous }
|
|
358
414
|
})
|
|
359
|
-
|
|
360
|
-
for (const
|
|
415
|
+
// Validate every trajectory before interrupting any existing property owner.
|
|
416
|
+
for (const { previous } of made) if (previous) release(previous, now, false)
|
|
417
|
+
const tracks = made.map(({ track }) => track)
|
|
418
|
+
|
|
419
|
+
for (const { track, layer } of made) {
|
|
420
|
+
const mix =
|
|
421
|
+
layer !== undefined
|
|
422
|
+
? mixing(this.view, track.property)
|
|
423
|
+
: mixOf(this.view, track.property)
|
|
424
|
+
if (!mix) writeValue(this.view, track.property, track.to)
|
|
425
|
+
else if (track.end === 0) mix.setRest(layer ?? BASE, track.to)
|
|
426
|
+
}
|
|
361
427
|
driver.sync?.(this.view)
|
|
362
428
|
|
|
363
|
-
for (const track of
|
|
364
|
-
let tokens = revisions.get(this.view)
|
|
365
|
-
if (!tokens) revisions.set(this.view, (tokens = new Map()))
|
|
429
|
+
for (const { track, key, layer } of made) {
|
|
366
430
|
const token = Symbol(track.property)
|
|
367
|
-
|
|
431
|
+
if (layer === undefined) {
|
|
432
|
+
let tokens = revisions.get(this.view)
|
|
433
|
+
if (!tokens) revisions.set(this.view, (tokens = new Map()))
|
|
434
|
+
tokens.set(track.property, token)
|
|
435
|
+
}
|
|
368
436
|
if (track.end === 0) continue
|
|
369
437
|
const entry: Entry = {
|
|
370
438
|
track,
|
|
439
|
+
key,
|
|
440
|
+
layer,
|
|
371
441
|
startedAt: now,
|
|
372
442
|
owner: this,
|
|
373
443
|
handle: undefined,
|
|
@@ -376,7 +446,7 @@ export class ViewAnimation implements PlaybackAnimation {
|
|
|
376
446
|
generation: 0,
|
|
377
447
|
token,
|
|
378
448
|
}
|
|
379
|
-
entries.set(
|
|
449
|
+
entries.set(key, entry)
|
|
380
450
|
this.entries.push(entry)
|
|
381
451
|
this.pending++
|
|
382
452
|
}
|
|
@@ -388,11 +458,17 @@ export class ViewAnimation implements PlaybackAnimation {
|
|
|
388
458
|
createClock(() => driver.now())
|
|
389
459
|
if (this._paused) this.clock.pause()
|
|
390
460
|
this.view.on('unloaded', this.unloaded)
|
|
391
|
-
this.haptics = playHaptics(this.view, tracks, this.haptic, driver, now, () =>
|
|
392
|
-
this.time(),
|
|
393
|
-
)
|
|
394
|
-
if (this._paused) this.haptics?.pause()
|
|
395
461
|
for (const entry of this.entries) this.playEntry(entry)
|
|
462
|
+
// Register discrete feedback after the visual animators. Android dispatches
|
|
463
|
+
// these callbacks in registration order within a frame: feedback should see
|
|
464
|
+
// that frame's updated pose, not the preceding frame's position.
|
|
465
|
+
// Scale-zero native playback may already have completed synchronously.
|
|
466
|
+
if (!this.settled) {
|
|
467
|
+
this.haptics = playHaptics(this.view, tracks, this.haptic, driver, now, () =>
|
|
468
|
+
this.time(),
|
|
469
|
+
)
|
|
470
|
+
if (this._paused) this.haptics?.pause()
|
|
471
|
+
}
|
|
396
472
|
if (this.pendingProgress !== undefined) {
|
|
397
473
|
const progress = this.pendingProgress
|
|
398
474
|
this.pendingProgress = undefined
|
|
@@ -405,8 +481,8 @@ export class ViewAnimation implements PlaybackAnimation {
|
|
|
405
481
|
}
|
|
406
482
|
|
|
407
483
|
private waitForLoad(plans: readonly Plan[]) {
|
|
408
|
-
for (const { property, keyframes, relative } of plans) {
|
|
409
|
-
if (relative && !isColorProperty(property)) continue
|
|
484
|
+
for (const { property, keyframes, relative, layer } of plans) {
|
|
485
|
+
if (layer !== undefined || (relative && !isColorProperty(property))) continue
|
|
410
486
|
const first = keyframes[0]
|
|
411
487
|
if (first !== null && first !== undefined) writeValue(this.view, property, first)
|
|
412
488
|
}
|
|
@@ -438,6 +514,8 @@ export class ViewAnimation implements PlaybackAnimation {
|
|
|
438
514
|
|
|
439
515
|
/** Current native presentation when available, otherwise the active curve or model. */
|
|
440
516
|
export function currentValue(view: View, property: Property): number {
|
|
517
|
+
const mix = mixOf(view, property)
|
|
518
|
+
if (mix) return mix.value()
|
|
441
519
|
const entry = running.get(view)?.get(property)
|
|
442
520
|
if (!entry) return readValue(view, property)
|
|
443
521
|
const driver = getDriver()
|
|
@@ -452,6 +530,22 @@ export function propertyRevision(view: View, property: Property) {
|
|
|
452
530
|
return revisions.get(view)?.get(property)
|
|
453
531
|
}
|
|
454
532
|
|
|
533
|
+
/** Internal read-only diagnostics. No observers or frame hooks are installed. */
|
|
534
|
+
export function inspectViewMotion(view: View) {
|
|
535
|
+
const now = getDriver().now()
|
|
536
|
+
return [...(running.get(view)?.values() ?? [])].map((entry) => ({
|
|
537
|
+
owner: entry.owner,
|
|
538
|
+
handle: entry.handle,
|
|
539
|
+
key: entry.key,
|
|
540
|
+
property: entry.track.property,
|
|
541
|
+
layer: entry.layer,
|
|
542
|
+
track: entry.track,
|
|
543
|
+
// A development hook may inspect while playEntry is still obtaining its handle.
|
|
544
|
+
elapsed: entry.handle === undefined ? 0 : elapsedOf(entry, now),
|
|
545
|
+
paused: entry.owner.paused,
|
|
546
|
+
}))
|
|
547
|
+
}
|
|
548
|
+
|
|
455
549
|
/** Sample an existing owner at layout time, without stealing an animation started meanwhile. */
|
|
456
550
|
export function captureValue(view: View, property: Property): () => number | undefined {
|
|
457
551
|
const token = propertyRevision(view, property)
|
|
@@ -465,19 +559,69 @@ export function captureValue(view: View, property: Property): () => number | und
|
|
|
465
559
|
}
|
|
466
560
|
}
|
|
467
561
|
|
|
468
|
-
/** Stops whatever is animating these properties of the view, or all of them. */
|
|
562
|
+
/** Stops whatever is animating these properties of the view, or all of them, layers included. */
|
|
469
563
|
export function stopView(view: View, properties?: readonly Property[]) {
|
|
470
564
|
const tokens = revisions.get(view)
|
|
471
565
|
for (const property of properties ?? tokens?.keys() ?? [])
|
|
472
566
|
tokens?.set(property, Symbol(property))
|
|
567
|
+
for (const mix of mixesOf(view))
|
|
568
|
+
if (!properties || properties.includes(mix.property)) mix.freeze()
|
|
473
569
|
const entries = running.get(view)
|
|
474
570
|
if (!entries) return
|
|
475
571
|
const now = getDriver().now()
|
|
476
|
-
for (const
|
|
477
|
-
if (!properties || properties.includes(property))
|
|
572
|
+
for (const entry of [...entries.values()]) {
|
|
573
|
+
if (!properties || properties.includes(entry.track.property))
|
|
574
|
+
release(entry, now, true)
|
|
478
575
|
}
|
|
479
576
|
}
|
|
480
577
|
|
|
578
|
+
/** Stops the regular animations of these properties and leaves their layers running. */
|
|
579
|
+
export function stopBase(view: View, properties: readonly Property[]) {
|
|
580
|
+
const tokens = revisions.get(view)
|
|
581
|
+
for (const property of properties) tokens?.set(property, Symbol(property))
|
|
582
|
+
const now = getDriver().now()
|
|
583
|
+
for (const property of properties) {
|
|
584
|
+
const entry = running.get(view)?.get(property)
|
|
585
|
+
if (entry) release(entry, now, true)
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
/** Stops one layer and takes away what it adds, also after it finished. */
|
|
590
|
+
export function stopLayer(view: View, layer: string, properties?: readonly Property[]) {
|
|
591
|
+
const now = getDriver().now()
|
|
592
|
+
for (const entry of [...(running.get(view)?.values() ?? [])])
|
|
593
|
+
if (
|
|
594
|
+
entry.layer === layer &&
|
|
595
|
+
(!properties || properties.includes(entry.track.property))
|
|
596
|
+
)
|
|
597
|
+
release(entry, now, true)
|
|
598
|
+
for (const mix of mixesOf(view))
|
|
599
|
+
if (!properties || properties.includes(mix.property))
|
|
600
|
+
mix.setRest(layer, identity(mix.property))
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
/** Writes a property's base value, under its layers when it has any. */
|
|
604
|
+
export function setBase(view: View, property: Property, value: number) {
|
|
605
|
+
const mix = mixOf(view, property)
|
|
606
|
+
if (mix) mix.setRest(BASE, value)
|
|
607
|
+
else writeValue(view, property, value)
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
/** A property's base value, without what its layers add. */
|
|
611
|
+
export function baseValue(view: View, property: Property): number {
|
|
612
|
+
return mixOf(view, property)?.rest(BASE) ?? readValue(view, property)
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
/** The property's mix, created on its first layer; a base playing natively moves into it. */
|
|
616
|
+
function mixing(view: View, property: Property) {
|
|
617
|
+
const existing = mixOf(view, property)
|
|
618
|
+
if (existing) return existing
|
|
619
|
+
const mix = mixFor(view, property)
|
|
620
|
+
const base = running.get(view)?.get(property)
|
|
621
|
+
if (base) base.owner.rehome(base)
|
|
622
|
+
return mix
|
|
623
|
+
}
|
|
624
|
+
|
|
481
625
|
function entriesOf(view: View) {
|
|
482
626
|
let entries = running.get(view)
|
|
483
627
|
if (!entries) running.set(view, (entries = new Map()))
|
|
@@ -486,7 +630,7 @@ function entriesOf(view: View) {
|
|
|
486
630
|
|
|
487
631
|
function forget(entry: Entry) {
|
|
488
632
|
const entries = running.get(entry.owner.view)
|
|
489
|
-
if (entries?.get(entry.
|
|
633
|
+
if (entries?.get(entry.key) === entry) entries.delete(entry.key)
|
|
490
634
|
}
|
|
491
635
|
|
|
492
636
|
function release(entry: Entry, now: number, commit: boolean) {
|
|
@@ -495,6 +639,11 @@ function release(entry: Entry, now: number, commit: boolean) {
|
|
|
495
639
|
const { property } = entry.track
|
|
496
640
|
entry.done = true
|
|
497
641
|
forget(entry)
|
|
642
|
+
if (entry.handle instanceof MixHandle) {
|
|
643
|
+
entry.handle.mix.detach(entry.layer ?? BASE, commit)
|
|
644
|
+
entry.owner.ended(false)
|
|
645
|
+
return
|
|
646
|
+
}
|
|
498
647
|
if (commit) {
|
|
499
648
|
const value =
|
|
500
649
|
driver.presented(view, property) ?? entry.track.valueAt(elapsedOf(entry, now))
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { isIOS, type View, type ScrollView } from '@nativescript/core'
|
|
2
|
+
import { liveValueInput, type DerivedValue } from './motion-value.js'
|
|
3
|
+
import { nativeLiveNode } from './live-spring-driver.js'
|
|
4
|
+
import { retainScrollDelegate } from './driver/ios-scroll-delegate.js'
|
|
5
|
+
|
|
6
|
+
export interface GestureSettings {
|
|
7
|
+
axis: number
|
|
8
|
+
threshold: number
|
|
9
|
+
failOffset: number
|
|
10
|
+
pinch: boolean
|
|
11
|
+
rotate: boolean
|
|
12
|
+
tap: boolean
|
|
13
|
+
doubleTap: boolean
|
|
14
|
+
contactEvents: boolean
|
|
15
|
+
minX: number
|
|
16
|
+
maxX: number
|
|
17
|
+
minY: number
|
|
18
|
+
maxY: number
|
|
19
|
+
minScale: number
|
|
20
|
+
maxScale: number
|
|
21
|
+
}
|
|
22
|
+
export interface GestureDriver {
|
|
23
|
+
readonly active: boolean
|
|
24
|
+
cancel(): void
|
|
25
|
+
enabled(value: boolean): void
|
|
26
|
+
settle(values: readonly number[], animated: boolean): void
|
|
27
|
+
bounds(settings: GestureSettings): void
|
|
28
|
+
dispose(): void
|
|
29
|
+
}
|
|
30
|
+
export function createGestureDriver(
|
|
31
|
+
surface: View,
|
|
32
|
+
scroll: ScrollView | undefined,
|
|
33
|
+
values: readonly DerivedValue[],
|
|
34
|
+
options: GestureSettings,
|
|
35
|
+
callback: (state: number, vx: number, vy: number) => void,
|
|
36
|
+
): GestureDriver {
|
|
37
|
+
const inputs = values.map(liveValueInput)
|
|
38
|
+
const nodes = inputs.map((input) => nativeLiveNode(input.node))
|
|
39
|
+
const changed = (state: number, vx: number, vy: number) => {
|
|
40
|
+
for (const input of inputs) input.changed()
|
|
41
|
+
callback(state, vx, vy)
|
|
42
|
+
}
|
|
43
|
+
const json = JSON.stringify(options)
|
|
44
|
+
if (isIOS) {
|
|
45
|
+
if (typeof JoltGestureSession === 'undefined')
|
|
46
|
+
throw new Error('Rebuild the native app to use gestures().')
|
|
47
|
+
if (
|
|
48
|
+
options.contactEvents &&
|
|
49
|
+
typeof JoltGestureSession.supportsContactEvents !== 'function'
|
|
50
|
+
)
|
|
51
|
+
throw new Error(
|
|
52
|
+
'Rebuild the native app to use gesture contact events and bottomSheet().',
|
|
53
|
+
)
|
|
54
|
+
const [x, y, scale, rotation] = nodes as [
|
|
55
|
+
JoltLiveSpring,
|
|
56
|
+
JoltLiveSpring,
|
|
57
|
+
JoltLiveSpring,
|
|
58
|
+
JoltLiveSpring,
|
|
59
|
+
]
|
|
60
|
+
const native = JoltGestureSession.attachScrollXYScaleRotationOptionsOnState(
|
|
61
|
+
surface.nativeViewProtected,
|
|
62
|
+
scroll?.nativeViewProtected ?? null,
|
|
63
|
+
x,
|
|
64
|
+
y,
|
|
65
|
+
scale,
|
|
66
|
+
rotation,
|
|
67
|
+
json,
|
|
68
|
+
changed,
|
|
69
|
+
)
|
|
70
|
+
const releaseDelegate = scroll
|
|
71
|
+
? retainScrollDelegate(scroll, () => native.refreshScrollDelegate())
|
|
72
|
+
: () => {}
|
|
73
|
+
return {
|
|
74
|
+
get active() {
|
|
75
|
+
return native.active
|
|
76
|
+
},
|
|
77
|
+
cancel: () => native.cancel(),
|
|
78
|
+
enabled: (value) => native.setEnabled(value),
|
|
79
|
+
settle: (values, animated) => {
|
|
80
|
+
native.settleXYScaleRotationAnimated(
|
|
81
|
+
values[0]!,
|
|
82
|
+
values[1]!,
|
|
83
|
+
values[2]!,
|
|
84
|
+
values[3]!,
|
|
85
|
+
animated,
|
|
86
|
+
)
|
|
87
|
+
inputs.forEach((input) => input.changed())
|
|
88
|
+
},
|
|
89
|
+
bounds: (settings) =>
|
|
90
|
+
native.updateLeftRightTopBottom(
|
|
91
|
+
settings.minX,
|
|
92
|
+
settings.maxX,
|
|
93
|
+
settings.minY,
|
|
94
|
+
settings.maxY,
|
|
95
|
+
),
|
|
96
|
+
dispose: () => {
|
|
97
|
+
releaseDelegate()
|
|
98
|
+
native.dispose()
|
|
99
|
+
},
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
if (
|
|
103
|
+
options.contactEvents &&
|
|
104
|
+
typeof org.rafaelaugusto.jolt.GestureSession.supportsContactEvents !== 'function'
|
|
105
|
+
)
|
|
106
|
+
throw new Error(
|
|
107
|
+
'Rebuild the native app to use gesture contact events and bottomSheet().',
|
|
108
|
+
)
|
|
109
|
+
const [x, y, scale, rotation] = nodes as [
|
|
110
|
+
org.rafaelaugusto.jolt.LiveSpring,
|
|
111
|
+
org.rafaelaugusto.jolt.LiveSpring,
|
|
112
|
+
org.rafaelaugusto.jolt.LiveSpring,
|
|
113
|
+
org.rafaelaugusto.jolt.LiveSpring,
|
|
114
|
+
]
|
|
115
|
+
const native = new org.rafaelaugusto.jolt.GestureSession(
|
|
116
|
+
surface.nativeViewProtected,
|
|
117
|
+
scroll?.nativeViewProtected ?? null,
|
|
118
|
+
x,
|
|
119
|
+
y,
|
|
120
|
+
scale,
|
|
121
|
+
rotation,
|
|
122
|
+
json,
|
|
123
|
+
new org.rafaelaugusto.jolt.GestureSession.Listener({ onState: changed }),
|
|
124
|
+
)
|
|
125
|
+
return {
|
|
126
|
+
get active() {
|
|
127
|
+
return native.isActive()
|
|
128
|
+
},
|
|
129
|
+
cancel: () => native.cancel(),
|
|
130
|
+
enabled: (value) => native.setEnabled(value),
|
|
131
|
+
settle: (values, animated) => {
|
|
132
|
+
native.settle(values[0]!, values[1]!, values[2]!, values[3]!, animated)
|
|
133
|
+
inputs.forEach((input) => input.changed())
|
|
134
|
+
},
|
|
135
|
+
bounds: (settings) =>
|
|
136
|
+
native.updateBounds(settings.minX, settings.maxX, settings.minY, settings.maxY),
|
|
137
|
+
dispose: () => native.dispose(),
|
|
138
|
+
}
|
|
139
|
+
}
|