@rafaelaugusto/jolt 0.1.0-beta.0 → 0.1.0-beta.10
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 +441 -25
- package/dist/animate.d.ts +21 -5
- package/dist/animate.d.ts.map +1 -1
- package/dist/animate.js +205 -25
- package/dist/animate.js.map +1 -1
- package/dist/color.d.ts +11 -0
- package/dist/color.d.ts.map +1 -0
- package/dist/color.js +73 -0
- package/dist/color.js.map +1 -0
- package/dist/config.d.ts +31 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +73 -0
- package/dist/config.js.map +1 -0
- package/dist/decay.d.ts +11 -0
- package/dist/decay.d.ts.map +1 -0
- package/dist/decay.js +22 -0
- package/dist/decay.js.map +1 -0
- package/dist/decoration.d.ts +18 -0
- package/dist/decoration.d.ts.map +1 -0
- package/dist/decoration.js +155 -0
- package/dist/decoration.js.map +1 -0
- package/dist/drag-input.d.ts +15 -0
- package/dist/drag-input.d.ts.map +1 -0
- package/dist/drag-input.js +66 -0
- package/dist/drag-input.js.map +1 -0
- package/dist/drag-physics.d.ts +20 -0
- package/dist/drag-physics.d.ts.map +1 -0
- package/dist/drag-physics.js +75 -0
- package/dist/drag-physics.js.map +1 -0
- package/dist/drag.d.ts +58 -0
- package/dist/drag.d.ts.map +1 -0
- package/dist/drag.js +324 -0
- package/dist/drag.js.map +1 -0
- package/dist/driver/android-color.d.ts +20 -0
- package/dist/driver/android-color.d.ts.map +1 -0
- package/dist/driver/android-color.js +136 -0
- package/dist/driver/android-color.js.map +1 -0
- package/dist/driver/android-decoration.d.ts +22 -0
- package/dist/driver/android-decoration.d.ts.map +1 -0
- package/dist/driver/android-decoration.js +139 -0
- package/dist/driver/android-decoration.js.map +1 -0
- package/dist/driver/android-playback.d.ts +13 -0
- package/dist/driver/android-playback.d.ts.map +1 -0
- package/dist/driver/android-playback.js +141 -0
- package/dist/driver/android-playback.js.map +1 -0
- package/dist/driver/android.d.ts +1 -1
- package/dist/driver/android.d.ts.map +1 -1
- package/dist/driver/android.js +165 -13
- package/dist/driver/android.js.map +1 -1
- package/dist/driver/index.d.ts +25 -2
- package/dist/driver/index.d.ts.map +1 -1
- package/dist/driver/index.js.map +1 -1
- package/dist/driver/ios-color.d.ts +16 -0
- package/dist/driver/ios-color.d.ts.map +1 -0
- package/dist/driver/ios-color.js +392 -0
- package/dist/driver/ios-color.js.map +1 -0
- package/dist/driver/ios-decoration.d.ts +17 -0
- package/dist/driver/ios-decoration.d.ts.map +1 -0
- package/dist/driver/ios-decoration.js +271 -0
- package/dist/driver/ios-decoration.js.map +1 -0
- package/dist/driver/ios-layout.d.ts +9 -0
- package/dist/driver/ios-layout.d.ts.map +1 -0
- package/dist/driver/ios-layout.js +52 -0
- package/dist/driver/ios-layout.js.map +1 -0
- package/dist/driver/ios-playback.d.ts +10 -0
- package/dist/driver/ios-playback.d.ts.map +1 -0
- package/dist/driver/ios-playback.js +47 -0
- package/dist/driver/ios-playback.js.map +1 -0
- package/dist/driver/ios-shadow.d.ts +6 -0
- package/dist/driver/ios-shadow.d.ts.map +1 -0
- package/dist/driver/ios-shadow.js +52 -0
- package/dist/driver/ios-shadow.js.map +1 -0
- package/dist/driver/ios.d.ts.map +1 -1
- package/dist/driver/ios.js +164 -20
- package/dist/driver/ios.js.map +1 -1
- package/dist/engine.d.ts +76 -5
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +303 -23
- package/dist/engine.js.map +1 -1
- package/dist/haptics.d.ts +21 -0
- package/dist/haptics.d.ts.map +1 -0
- package/dist/haptics.js +120 -0
- package/dist/haptics.js.map +1 -0
- package/dist/image-effect-native.d.ts +26 -0
- package/dist/image-effect-native.d.ts.map +1 -0
- package/dist/image-effect-native.js +73 -0
- package/dist/image-effect-native.js.map +1 -0
- package/dist/image-effect.d.ts +50 -0
- package/dist/image-effect.d.ts.map +1 -0
- package/dist/image-effect.js +290 -0
- package/dist/image-effect.js.map +1 -0
- package/dist/image-owner.d.ts +3 -0
- package/dist/image-owner.d.ts.map +1 -0
- package/dist/image-owner.js +11 -0
- package/dist/image-owner.js.map +1 -0
- package/dist/index.d.ts +45 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -2
- package/dist/index.js.map +1 -1
- package/dist/interaction-surface.d.ts +12 -0
- package/dist/interaction-surface.d.ts.map +1 -0
- package/dist/interaction-surface.js +36 -0
- package/dist/interaction-surface.js.map +1 -0
- package/dist/items.d.ts +20 -0
- package/dist/items.d.ts.map +1 -0
- package/dist/items.js +109 -0
- package/dist/items.js.map +1 -0
- package/dist/keyboard.d.ts +41 -0
- package/dist/keyboard.d.ts.map +1 -0
- package/dist/keyboard.js +256 -0
- package/dist/keyboard.js.map +1 -0
- package/dist/label.d.ts +7 -0
- package/dist/label.d.ts.map +1 -0
- package/dist/label.js +60 -0
- package/dist/label.js.map +1 -0
- package/dist/layout.d.ts +13 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +348 -0
- package/dist/layout.js.map +1 -0
- package/dist/liquid-grid.d.ts +3 -0
- package/dist/liquid-grid.d.ts.map +1 -0
- package/dist/liquid-grid.js +24 -0
- package/dist/liquid-grid.js.map +1 -0
- package/dist/liquid.d.ts +18 -0
- package/dist/liquid.d.ts.map +1 -0
- package/dist/liquid.js +234 -0
- package/dist/liquid.js.map +1 -0
- package/dist/loader.d.ts +19 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +173 -0
- package/dist/loader.js.map +1 -0
- package/dist/motion-scope.d.ts +39 -0
- package/dist/motion-scope.d.ts.map +1 -0
- package/dist/motion-scope.js +238 -0
- package/dist/motion-scope.js.map +1 -0
- package/dist/motion-states.d.ts +36 -0
- package/dist/motion-states.d.ts.map +1 -0
- package/dist/motion-states.js +165 -0
- package/dist/motion-states.js.map +1 -0
- package/dist/particles.d.ts +39 -0
- package/dist/particles.d.ts.map +1 -0
- package/dist/particles.js +265 -0
- package/dist/particles.js.map +1 -0
- package/dist/path.d.ts +12 -0
- package/dist/path.d.ts.map +1 -0
- package/dist/path.js +90 -0
- package/dist/path.js.map +1 -0
- package/dist/playback-group.d.ts +6 -0
- package/dist/playback-group.d.ts.map +1 -0
- package/dist/playback-group.js +141 -0
- package/dist/playback-group.js.map +1 -0
- package/dist/playback.d.ts +25 -0
- package/dist/playback.d.ts.map +1 -0
- package/dist/playback.js +35 -0
- package/dist/playback.js.map +1 -0
- package/dist/presets.d.ts +16 -1
- package/dist/presets.d.ts.map +1 -1
- package/dist/presets.js +24 -6
- package/dist/presets.js.map +1 -1
- package/dist/press.d.ts.map +1 -1
- package/dist/press.js +25 -7
- package/dist/press.js.map +1 -1
- package/dist/properties.d.ts +6 -3
- package/dist/properties.d.ts.map +1 -1
- package/dist/properties.js +26 -2
- package/dist/properties.js.map +1 -1
- package/dist/reveal.d.ts +25 -0
- package/dist/reveal.d.ts.map +1 -0
- package/dist/reveal.js +294 -0
- package/dist/reveal.js.map +1 -0
- package/dist/roll-diff.d.ts +22 -0
- package/dist/roll-diff.d.ts.map +1 -0
- package/dist/roll-diff.js +36 -0
- package/dist/roll-diff.js.map +1 -0
- package/dist/roll.d.ts +29 -0
- package/dist/roll.d.ts.map +1 -0
- package/dist/roll.js +442 -0
- package/dist/roll.js.map +1 -0
- package/dist/scroll-linked.d.ts +10 -0
- package/dist/scroll-linked.d.ts.map +1 -0
- package/dist/scroll-linked.js +58 -0
- package/dist/scroll-linked.js.map +1 -0
- package/dist/sequence.d.ts +13 -7
- package/dist/sequence.d.ts.map +1 -1
- package/dist/sequence.js +214 -19
- package/dist/sequence.js.map +1 -1
- package/dist/shimmer.d.ts +12 -0
- package/dist/shimmer.d.ts.map +1 -0
- package/dist/shimmer.js +161 -0
- package/dist/shimmer.js.map +1 -0
- package/dist/svg-path.d.ts +14 -0
- package/dist/svg-path.d.ts.map +1 -0
- package/dist/svg-path.js +281 -0
- package/dist/svg-path.js.map +1 -0
- package/dist/symbol-effect.d.ts +23 -0
- package/dist/symbol-effect.d.ts.map +1 -0
- package/dist/symbol-effect.js +187 -0
- package/dist/symbol-effect.js.map +1 -0
- package/dist/text-layout.d.ts +30 -0
- package/dist/text-layout.d.ts.map +1 -0
- package/dist/text-layout.js +185 -0
- package/dist/text-layout.js.map +1 -0
- package/dist/text.d.ts +17 -0
- package/dist/text.d.ts.map +1 -0
- package/dist/text.js +263 -0
- package/dist/text.js.map +1 -0
- package/dist/track.d.ts +3 -1
- package/dist/track.d.ts.map +1 -1
- package/dist/track.js +266 -13
- package/dist/track.js.map +1 -1
- package/dist/transition.d.ts +17 -1
- package/dist/transition.d.ts.map +1 -1
- package/dist/transition.js +41 -6
- package/dist/transition.js.map +1 -1
- package/dist/types.d.ts +50 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/vue/index.d.ts +95 -0
- package/dist/vue/index.d.ts.map +1 -0
- package/dist/vue/index.js +163 -0
- package/dist/vue/index.js.map +1 -0
- package/dist/zoom-native.d.ts +30 -0
- package/dist/zoom-native.d.ts.map +1 -0
- package/dist/zoom-native.js +56 -0
- package/dist/zoom-native.js.map +1 -0
- package/dist/zoomable.d.ts +48 -0
- package/dist/zoomable.d.ts.map +1 -0
- package/dist/zoomable.js +249 -0
- package/dist/zoomable.js.map +1 -0
- package/package.json +33 -5
- package/platforms/android/include.gradle +7 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/ColorTarget.java +102 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/DecorationTarget.java +154 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/ImageEffect.java +288 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/KeyboardFollower.java +91 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/KeyboardObserver.java +97 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/NumberRoll.java +190 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/PhotoZoom.java +250 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/TextReveal.java +180 -0
- package/platforms/android/proguard-rules.pro +19 -0
- package/platforms/ios/build.xcconfig +1 -0
- package/platforms/ios/src/JoltImageEffect.h +25 -0
- package/platforms/ios/src/JoltImageEffect.mm +242 -0
- package/platforms/ios/src/JoltInteractiveAnimation.h +18 -0
- package/platforms/ios/src/JoltInteractiveAnimation.m +123 -0
- package/platforms/ios/src/JoltPhotoZoom.h +23 -0
- package/platforms/ios/src/JoltPhotoZoom.m +229 -0
- package/platforms/ios/src/module.modulemap +6 -0
- package/src/android-plugin.d.ts +155 -0
- package/src/animate.ts +278 -38
- package/src/color.ts +101 -0
- package/src/config.ts +84 -0
- package/src/decay.ts +45 -0
- package/src/decoration.ts +180 -0
- package/src/drag-input.ts +74 -0
- package/src/drag-physics.ts +110 -0
- package/src/drag.ts +395 -0
- package/src/driver/android-color.ts +170 -0
- package/src/driver/android-decoration.ts +182 -0
- package/src/driver/android-playback.ts +157 -0
- package/src/driver/android.ts +208 -20
- package/src/driver/index.ts +37 -2
- package/src/driver/ios-color.ts +441 -0
- package/src/driver/ios-decoration.ts +332 -0
- package/src/driver/ios-layout.ts +63 -0
- package/src/driver/ios-playback.ts +51 -0
- package/src/driver/ios-shadow.ts +50 -0
- package/src/driver/ios.ts +194 -25
- package/src/engine.ts +329 -27
- package/src/haptics.ts +148 -0
- package/src/image-effect-native.ts +129 -0
- package/src/image-effect.ts +336 -0
- package/src/image-owner.ts +12 -0
- package/src/index.ts +61 -4
- package/src/interaction-surface.ts +41 -0
- package/src/ios-plugin.d.ts +81 -0
- package/src/items.ts +140 -0
- package/src/keyboard.ts +291 -0
- package/src/label.ts +76 -0
- package/src/layout.ts +408 -0
- package/src/liquid-grid.ts +28 -0
- package/src/liquid.ts +287 -0
- package/src/loader.ts +202 -0
- package/src/motion-scope.ts +279 -0
- package/src/motion-states.ts +215 -0
- package/src/particles.ts +323 -0
- package/src/path.ts +124 -0
- package/src/playback-group.ts +143 -0
- package/src/playback.ts +62 -0
- package/src/presets.ts +31 -7
- package/src/press.ts +32 -10
- package/src/properties.ts +32 -6
- package/src/reveal.ts +374 -0
- package/src/roll-diff.ts +57 -0
- package/src/roll.ts +515 -0
- package/src/scroll-linked.ts +73 -0
- package/src/sequence.ts +212 -19
- package/src/shimmer.ts +180 -0
- package/src/svg-path.ts +355 -0
- package/src/symbol-effect.ts +226 -0
- package/src/text-layout.ts +228 -0
- package/src/text.ts +279 -0
- package/src/track.ts +347 -12
- package/src/transition.ts +63 -6
- package/src/types.ts +51 -1
- package/src/vue/index.ts +231 -0
- package/src/zoom-native.ts +124 -0
- package/src/zoomable.ts +330 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decay.d.ts","sourceRoot":"","sources":["../src/decay.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CAC/B;AAED,qGAAqG;AACrG,eAAO,MAAM,gBAAgB,QAAQ,CAAA;AAErC,sFAAsF;AACtF,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,WAAW,CA4Bb"}
|
package/dist/decay.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** Velocity retains this fraction every millisecond, independently of the display's refresh rate. */
|
|
2
|
+
export const DEFAULT_FRICTION = 0.998;
|
|
3
|
+
/** Exponential motion, with velocity in units per second and time in milliseconds. */
|
|
4
|
+
export function solveDecay(from, velocity, friction, precision) {
|
|
5
|
+
const rate = -Math.log(friction);
|
|
6
|
+
const distance = velocity / (1000 * rate);
|
|
7
|
+
const to = from + distance;
|
|
8
|
+
// Stop only when both the remaining distance and speed are imperceptible.
|
|
9
|
+
const duration = velocity === 0
|
|
10
|
+
? 0
|
|
11
|
+
: Math.ceil(Math.max(0, Math.log(Math.abs(distance) / precision) / rate, Math.log(Math.abs(velocity) / (precision * 10)) / rate));
|
|
12
|
+
if (!Number.isFinite(to) || !Number.isFinite(duration) || duration > 2_147_483_647) {
|
|
13
|
+
throw new RangeError('Decay velocity and friction produce an unplayable motion.');
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
duration,
|
|
17
|
+
to,
|
|
18
|
+
position: (time) => time >= duration ? to : from - distance * Math.expm1(-rate * Math.max(0, time)),
|
|
19
|
+
velocity: (time) => time >= duration ? 0 : velocity * Math.exp(-rate * Math.max(0, time)),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=decay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decay.js","sourceRoot":"","sources":["../src/decay.ts"],"names":[],"mappings":"AAOA,qGAAqG;AACrG,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAA;AAErC,sFAAsF;AACtF,MAAM,UAAU,UAAU,CACxB,IAAY,EACZ,QAAgB,EAChB,QAAgB,EAChB,SAAiB;IAEjB,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAChC,MAAM,QAAQ,GAAG,QAAQ,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;IACzC,MAAM,EAAE,GAAG,IAAI,GAAG,QAAQ,CAAA;IAC1B,0EAA0E;IAC1E,MAAM,QAAQ,GACZ,QAAQ,KAAK,CAAC;QACZ,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,IAAI,CAAC,IAAI,CACP,IAAI,CAAC,GAAG,CACN,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC,GAAG,IAAI,EAC/C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CACvD,CACF,CAAA;IAEP,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,aAAa,EAAE,CAAC;QACnF,MAAM,IAAI,UAAU,CAAC,2DAA2D,CAAC,CAAA;IACnF,CAAC;IAED,OAAO;QACL,QAAQ;QACR,EAAE;QACF,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CACjB,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACjF,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CACjB,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;KACxE,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type View } from '@nativescript/core';
|
|
2
|
+
type Shadow = Exclude<View['boxShadow'], string>[number];
|
|
3
|
+
export type DecorationProperty = 'borderRadius' | 'borderWidth' | 'shadowOpacity' | 'shadowRadius' | 'shadowOffsetX' | 'shadowOffsetY' | 'elevation' | 'translationZ';
|
|
4
|
+
export declare const decorationProperties: readonly DecorationProperty[];
|
|
5
|
+
export declare const radiusKeys: readonly ['borderTopLeftRadius', 'borderTopRightRadius', 'borderBottomRightRadius', 'borderBottomLeftRadius'];
|
|
6
|
+
export declare const widthKeys: readonly ['borderTopWidth', 'borderRightWidth', 'borderBottomWidth', 'borderLeftWidth'];
|
|
7
|
+
export declare const isWritingDecoration: (view: View) => boolean;
|
|
8
|
+
export declare const isDecorationProperty: (key: string) => key is DecorationProperty;
|
|
9
|
+
/** Core lengths may be numbers, px strings or parsed { value, unit } lengths. */
|
|
10
|
+
export declare function dip(value: unknown): number;
|
|
11
|
+
export declare function singleShadow(view: View): Shadow;
|
|
12
|
+
export declare function validateDecorationTarget(view: View, property: DecorationProperty): void;
|
|
13
|
+
export declare function validateDecorationFrames(property: DecorationProperty, frames: readonly (number | null)[]): void;
|
|
14
|
+
export declare function clampDecoration(property: DecorationProperty, value: number): number;
|
|
15
|
+
export declare function readDecoration(view: View, property: DecorationProperty): number;
|
|
16
|
+
export declare function writeDecoration(view: View, property: DecorationProperty, raw: number): void;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=decoration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decoration.d.ts","sourceRoot":"","sources":["../src/decoration.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAEvE,KAAK,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,CAAA;AACxD,MAAM,MAAM,kBAAkB,GAC1B,cAAc,GACd,aAAa,GACb,eAAe,GACf,cAAc,GACd,eAAe,GACf,eAAe,GACf,WAAW,GACX,cAAc,CAAA;AAElB,eAAO,MAAM,oBAAoB,EAAE,SAAS,kBAAkB,EAS7D,CAAA;AACD,eAAO,MAAM,UAAU,YACrB,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,CAChB,CAAA;AACV,eAAO,MAAM,SAAS,YACpB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,CACT,CAAA;AAEV,eAAO,MAAM,mBAAmB,SAAU,IAAI,YAAsB,CAAA;AACpE,eAAO,MAAM,oBAAoB,QAAS,MAAM,KAAG,GAAG,IAAI,kBACA,CAAA;AAE1D,iFAAiF;AACjF,wBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAc1C;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAK/C;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,QA4ChF;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,kBAAkB,EAC5B,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,QAMnC;AACD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQnF;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAqB/E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,QA0BpF"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { preserveZeroShadow } from './driver/ios-shadow.js';
|
|
2
|
+
import { Color, Utils, isAndroid } from '@nativescript/core';
|
|
3
|
+
export const decorationProperties = [
|
|
4
|
+
'borderRadius',
|
|
5
|
+
'borderWidth',
|
|
6
|
+
'shadowOpacity',
|
|
7
|
+
'shadowRadius',
|
|
8
|
+
'shadowOffsetX',
|
|
9
|
+
'shadowOffsetY',
|
|
10
|
+
'elevation',
|
|
11
|
+
'translationZ',
|
|
12
|
+
];
|
|
13
|
+
export const radiusKeys = [
|
|
14
|
+
'borderTopLeftRadius',
|
|
15
|
+
'borderTopRightRadius',
|
|
16
|
+
'borderBottomRightRadius',
|
|
17
|
+
'borderBottomLeftRadius',
|
|
18
|
+
];
|
|
19
|
+
export const widthKeys = [
|
|
20
|
+
'borderTopWidth',
|
|
21
|
+
'borderRightWidth',
|
|
22
|
+
'borderBottomWidth',
|
|
23
|
+
'borderLeftWidth',
|
|
24
|
+
];
|
|
25
|
+
const writing = new WeakSet();
|
|
26
|
+
export const isWritingDecoration = (view) => writing.has(view);
|
|
27
|
+
export const isDecorationProperty = (key) => decorationProperties.includes(key);
|
|
28
|
+
/** Core lengths may be numbers, px strings or parsed { value, unit } lengths. */
|
|
29
|
+
export function dip(value) {
|
|
30
|
+
if (value === undefined || value === null)
|
|
31
|
+
return 0;
|
|
32
|
+
if (typeof value === 'number' && Number.isFinite(value))
|
|
33
|
+
return value;
|
|
34
|
+
if (typeof value === 'string') {
|
|
35
|
+
const match = /^(-?(?:\d+(?:\.\d*)?|\.\d+))(dip|px)?$/.exec(value.trim());
|
|
36
|
+
if (match)
|
|
37
|
+
return Number(match[1]) / (match[2] === 'px' ? Utils.layout.getDisplayDensity() : 1);
|
|
38
|
+
}
|
|
39
|
+
if (typeof value === 'object' && 'value' in value && 'unit' in value) {
|
|
40
|
+
const length = value;
|
|
41
|
+
if (Number.isFinite(length.value) && (length.unit === 'dip' || length.unit === 'px'))
|
|
42
|
+
return length.value / (length.unit === 'px' ? Utils.layout.getDisplayDensity() : 1);
|
|
43
|
+
}
|
|
44
|
+
throw new TypeError('Decoration animations require finite DIP or px lengths.');
|
|
45
|
+
}
|
|
46
|
+
export function singleShadow(view) {
|
|
47
|
+
const shadows = view.boxShadow;
|
|
48
|
+
if (!Array.isArray(shadows) || shadows.length !== 1 || shadows[0].inset)
|
|
49
|
+
throw new TypeError('Shadow animation requires one existing outer boxShadow.');
|
|
50
|
+
return shadows[0];
|
|
51
|
+
}
|
|
52
|
+
export function validateDecorationTarget(view, property) {
|
|
53
|
+
const shadow = property.startsWith('shadow');
|
|
54
|
+
const z = property === 'elevation' || property === 'translationZ';
|
|
55
|
+
if ((shadow && isAndroid) || (z && !isAndroid))
|
|
56
|
+
throw new TypeError(`"${property}" is only supported on ${z ? 'Android' : 'iOS'}.`);
|
|
57
|
+
if (z)
|
|
58
|
+
return;
|
|
59
|
+
if (view.style.clipPath || view.style.cornerShape === 'squircle')
|
|
60
|
+
throw new TypeError('Decoration animations require circular corners without a clipPath.');
|
|
61
|
+
for (const keys of [radiusKeys, widthKeys]) {
|
|
62
|
+
const values = keys.map((key) => dip(view[key]));
|
|
63
|
+
if (values.some((value) => value !== values[0]))
|
|
64
|
+
throw new TypeError('Decoration animations require uniform border widths and radii.');
|
|
65
|
+
}
|
|
66
|
+
const colors = [
|
|
67
|
+
view.borderTopColor,
|
|
68
|
+
view.borderRightColor,
|
|
69
|
+
view.borderBottomColor,
|
|
70
|
+
view.borderLeftColor,
|
|
71
|
+
].map((color) => color?.argb ?? 0);
|
|
72
|
+
if (colors.some((color) => color !== colors[0]))
|
|
73
|
+
throw new TypeError('Decoration animations require uniform border colors.');
|
|
74
|
+
if (shadow) {
|
|
75
|
+
const value = singleShadow(view);
|
|
76
|
+
for (const length of [
|
|
77
|
+
value.offsetX,
|
|
78
|
+
value.offsetY,
|
|
79
|
+
value.blurRadius,
|
|
80
|
+
value.spreadRadius,
|
|
81
|
+
])
|
|
82
|
+
dip(length);
|
|
83
|
+
}
|
|
84
|
+
if (property === 'borderRadius' &&
|
|
85
|
+
isAndroid &&
|
|
86
|
+
view.boxShadow &&
|
|
87
|
+
(!Array.isArray(view.boxShadow) || view.boxShadow.length))
|
|
88
|
+
throw new TypeError('Animate Android radius with elevation shadows; CSS boxShadow caches its shape.');
|
|
89
|
+
}
|
|
90
|
+
export function validateDecorationFrames(property, frames) {
|
|
91
|
+
if (frames.some((value) => value !== null && clampDecoration(property, value) !== value))
|
|
92
|
+
throw new RangeError(`Invalid keyframes for "${property}".`);
|
|
93
|
+
}
|
|
94
|
+
export function clampDecoration(property, value) {
|
|
95
|
+
if (property === 'shadowOpacity')
|
|
96
|
+
return Math.max(0, Math.min(1, value));
|
|
97
|
+
return property === 'borderRadius' ||
|
|
98
|
+
property === 'borderWidth' ||
|
|
99
|
+
property === 'shadowRadius' ||
|
|
100
|
+
property === 'elevation'
|
|
101
|
+
? Math.max(0, value)
|
|
102
|
+
: value;
|
|
103
|
+
}
|
|
104
|
+
export function readDecoration(view, property) {
|
|
105
|
+
if (property === 'borderRadius') {
|
|
106
|
+
const radius = !isAndroid ? view.nativeViewProtected?.layer?.cornerRadius : undefined;
|
|
107
|
+
return typeof radius === 'number' ? radius : dip(view.borderTopLeftRadius);
|
|
108
|
+
}
|
|
109
|
+
if (property === 'borderWidth')
|
|
110
|
+
return dip(view.borderTopWidth);
|
|
111
|
+
if (property === 'elevation')
|
|
112
|
+
return view.nativeViewProtected?.getElevation
|
|
113
|
+
? view.nativeViewProtected.getElevation() / Utils.layout.getDisplayDensity()
|
|
114
|
+
: view.androidElevation || 0;
|
|
115
|
+
if (property === 'translationZ')
|
|
116
|
+
return (view.nativeViewProtected?.getTranslationZ?.() / Utils.layout.getDisplayDensity() ||
|
|
117
|
+
0);
|
|
118
|
+
const shadow = singleShadow(view);
|
|
119
|
+
if (property === 'shadowOpacity')
|
|
120
|
+
return ((shadow.color?.argb ?? 0xff000000) >>> 24) / 255;
|
|
121
|
+
return property === 'shadowRadius'
|
|
122
|
+
? dip(shadow.blurRadius) / 2
|
|
123
|
+
: dip(property === 'shadowOffsetX' ? shadow.offsetX : shadow.offsetY);
|
|
124
|
+
}
|
|
125
|
+
export function writeDecoration(view, property, raw) {
|
|
126
|
+
const value = clampDecoration(property, raw);
|
|
127
|
+
writing.add(view);
|
|
128
|
+
try {
|
|
129
|
+
if (property === 'borderRadius' || property === 'borderWidth')
|
|
130
|
+
view[property] = value;
|
|
131
|
+
else if (property === 'elevation')
|
|
132
|
+
view.androidElevation = value;
|
|
133
|
+
else if (property === 'translationZ')
|
|
134
|
+
view.nativeViewProtected?.setTranslationZ?.(value * Utils.layout.getDisplayDensity());
|
|
135
|
+
else {
|
|
136
|
+
const shadow = { ...singleShadow(view) };
|
|
137
|
+
if (property === 'shadowOpacity')
|
|
138
|
+
shadow.color = new Color(((Math.round(value * 255) << 24) | ((shadow.color?.argb ?? 0) & 0xffffff)) >>>
|
|
139
|
+
0);
|
|
140
|
+
else if (property === 'shadowRadius')
|
|
141
|
+
shadow.blurRadius = value * 2;
|
|
142
|
+
else if (property === 'shadowOffsetX')
|
|
143
|
+
shadow.offsetX = value;
|
|
144
|
+
else
|
|
145
|
+
shadow.offsetY = value;
|
|
146
|
+
view.boxShadow = [shadow];
|
|
147
|
+
if (!isAndroid)
|
|
148
|
+
preserveZeroShadow(view);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
finally {
|
|
152
|
+
writing.delete(view);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=decoration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decoration.js","sourceRoot":"","sources":["../src/decoration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type PanGestureEventData, type View } from '@nativescript/core';
|
|
2
|
+
/** Android's raw coordinates avoid feedback from translating the touched view. */
|
|
3
|
+
export declare class DragInput {
|
|
4
|
+
private samples;
|
|
5
|
+
private lastMoved;
|
|
6
|
+
reset(): void;
|
|
7
|
+
read(event: PanGestureEventData, view: View): {
|
|
8
|
+
x: number;
|
|
9
|
+
y: number;
|
|
10
|
+
velocityX: number;
|
|
11
|
+
velocityY: number;
|
|
12
|
+
cancelled: boolean;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=drag-input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drag-input.d.ts","sourceRoot":"","sources":["../src/drag-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,mBAAmB,EAAE,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAS/E,kFAAkF;AAClF,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,SAAS,CAAI;IACrB,KAAK,SAGJ;IACD,IAAI,CAAC,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,IAAI;QA4CvC,CAAC;QACD,CAAC;QACD,SAAS;QACT,SAAS;QACT,SAAS;MAOZ;CACF"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Utils } from '@nativescript/core';
|
|
2
|
+
import { getDriver } from './driver/index.js';
|
|
3
|
+
/** Android's raw coordinates avoid feedback from translating the touched view. */
|
|
4
|
+
export class DragInput {
|
|
5
|
+
samples = [];
|
|
6
|
+
lastMoved = 0;
|
|
7
|
+
reset() {
|
|
8
|
+
this.samples = [];
|
|
9
|
+
this.lastMoved = 0;
|
|
10
|
+
}
|
|
11
|
+
read(event, view) {
|
|
12
|
+
const ios = event.ios;
|
|
13
|
+
const android = event.android?.current;
|
|
14
|
+
const parent = view.parent?.nativeViewProtected ?? view.nativeViewProtected;
|
|
15
|
+
const delta = ios
|
|
16
|
+
? ios.translationInView(parent)
|
|
17
|
+
: { x: event.deltaX, y: event.deltaY };
|
|
18
|
+
const density = Utils.layout.getDisplayDensity();
|
|
19
|
+
const sample = android
|
|
20
|
+
? {
|
|
21
|
+
x: android.getRawX() / density,
|
|
22
|
+
y: android.getRawY() / density,
|
|
23
|
+
time: Number(android.getEventTime()),
|
|
24
|
+
}
|
|
25
|
+
: { ...delta, time: getDriver().now() };
|
|
26
|
+
if (Number.isFinite(sample.x) &&
|
|
27
|
+
Number.isFinite(sample.y) &&
|
|
28
|
+
Number.isFinite(sample.time)) {
|
|
29
|
+
const previous = this.samples.at(-1);
|
|
30
|
+
if (!previous || sample.x !== previous.x || sample.y !== previous.y)
|
|
31
|
+
this.lastMoved = sample.time;
|
|
32
|
+
// Replace duplicate times (Android sends began + changed for the same event).
|
|
33
|
+
if (this.samples.at(-1)?.time === sample.time)
|
|
34
|
+
this.samples.pop();
|
|
35
|
+
this.samples.push(sample);
|
|
36
|
+
while (this.samples.length > 2 && this.samples[1].time < sample.time - 100)
|
|
37
|
+
this.samples.shift();
|
|
38
|
+
}
|
|
39
|
+
const first = this.samples[0];
|
|
40
|
+
const elapsed = first ? sample.time - first.time : 0;
|
|
41
|
+
// UIKit may retain its last movement velocity when the finger holds still
|
|
42
|
+
// before lifting. A stale velocity must not turn that hold into a fling.
|
|
43
|
+
const nativeVelocity = ios
|
|
44
|
+
? sample.time - this.lastMoved > 100
|
|
45
|
+
? { x: 0, y: 0 }
|
|
46
|
+
: ios.velocityInView(parent)
|
|
47
|
+
: undefined;
|
|
48
|
+
const velocity = nativeVelocity ?? {
|
|
49
|
+
x: elapsed > 0 && elapsed <= 150 ? ((sample.x - first.x) * 1000) / elapsed : 0,
|
|
50
|
+
y: elapsed > 0 && elapsed <= 150 ? ((sample.y - first.y) * 1000) / elapsed : 0,
|
|
51
|
+
};
|
|
52
|
+
const action = android?.getActionMasked();
|
|
53
|
+
return {
|
|
54
|
+
x: delta.x,
|
|
55
|
+
y: delta.y,
|
|
56
|
+
velocityX: Number.isFinite(velocity.x) ? velocity.x : 0,
|
|
57
|
+
velocityY: Number.isFinite(velocity.y) ? velocity.y : 0,
|
|
58
|
+
cancelled: event.state === 0 ||
|
|
59
|
+
action === 3 ||
|
|
60
|
+
action === 5 ||
|
|
61
|
+
action === 6 ||
|
|
62
|
+
(android ? android.getPointerCount() > 1 : (ios?.numberOfTouches ?? 1) > 1),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=drag-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drag-input.js","sourceRoot":"","sources":["../src/drag-input.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface DragCurve {
|
|
2
|
+
type: 'drag';
|
|
3
|
+
velocity: number;
|
|
4
|
+
friction: number;
|
|
5
|
+
bounds: readonly [number, number];
|
|
6
|
+
snap?: readonly number[];
|
|
7
|
+
rubberband: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare const clampDrag: (value: number, [min, max]: readonly [number, number]) => number;
|
|
10
|
+
/** Bounded resistance; coordinates and the resistance length are DIPs. */
|
|
11
|
+
export declare function resistDrag(value: number, bounds: readonly [number, number], length: number): number;
|
|
12
|
+
/** Recover the finger-space origin when grabbing an already rubberbanded pose. */
|
|
13
|
+
export declare function resumeDrag(value: number, bounds: readonly [number, number], length: number): {
|
|
14
|
+
origin: number;
|
|
15
|
+
length: number;
|
|
16
|
+
};
|
|
17
|
+
export declare function dragDestination(from: number, curve: DragCurve): number;
|
|
18
|
+
/** One precomputed motion. Native keyframes play both the coast and edge recovery. */
|
|
19
|
+
export declare function solveDragRelease(from: number, curve: DragCurve): import("./decay.js").DecayMotion;
|
|
20
|
+
//# sourceMappingURL=drag-physics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drag-physics.d.ts","sourceRoot":"","sources":["../src/drag-physics.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACxB,UAAU,EAAE,OAAO,CAAA;CACpB;AAED,eAAO,MAAM,SAAS,UAAW,MAAM,cAAc,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,WACzC,CAAA;AAErC,0EAA0E;AAC1E,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,MAAM,EAAE,MAAM,UAKf;AAED,kFAAkF;AAClF,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,MAAM,EAAE,MAAM;;;EAQf;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,UAO7D;AAED,sFAAsF;AACtF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,oCA2D9D"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { solveDecay } from './decay.js';
|
|
2
|
+
import { solveSpring, springPhysics } from './spring.js';
|
|
3
|
+
export const clampDrag = (value, [min, max]) => Math.max(min, Math.min(max, value));
|
|
4
|
+
/** Bounded resistance; coordinates and the resistance length are DIPs. */
|
|
5
|
+
export function resistDrag(value, bounds, length) {
|
|
6
|
+
const edge = clampDrag(value, bounds);
|
|
7
|
+
const distance = value - edge;
|
|
8
|
+
return edge + (distance / (1 + Math.abs(distance) / length)) * 0.55;
|
|
9
|
+
}
|
|
10
|
+
/** Recover the finger-space origin when grabbing an already rubberbanded pose. */
|
|
11
|
+
export function resumeDrag(value, bounds, length) {
|
|
12
|
+
const edge = clampDrag(value, bounds);
|
|
13
|
+
const distance = value - edge;
|
|
14
|
+
// A native edge spring or external owner can exceed the usual resistance range.
|
|
15
|
+
// Expand it for this gesture so every finite visible pose has a stable inverse.
|
|
16
|
+
length = Math.max(length, Math.abs(distance) * 4);
|
|
17
|
+
return { origin: edge + distance / (0.55 - Math.abs(distance) / length), length };
|
|
18
|
+
}
|
|
19
|
+
export function dragDestination(from, curve) {
|
|
20
|
+
const projected = solveDecay(from, curve.velocity, curve.friction, 0.25).to;
|
|
21
|
+
if (curve.snap)
|
|
22
|
+
return curve.snap.reduce((best, point) => Math.abs(point - projected) < Math.abs(best - projected) ? point : best);
|
|
23
|
+
return clampDrag(projected, curve.bounds);
|
|
24
|
+
}
|
|
25
|
+
/** One precomputed motion. Native keyframes play both the coast and edge recovery. */
|
|
26
|
+
export function solveDragRelease(from, curve) {
|
|
27
|
+
const to = dragDestination(from, curve);
|
|
28
|
+
const coast = solveDecay(from, curve.velocity, curve.friction, 0.25);
|
|
29
|
+
const edge = clampDrag(from, curve.bounds);
|
|
30
|
+
const springTo = (start, target, velocity) => {
|
|
31
|
+
const motion = solveSpring(springPhysics({ duration: 500, bounce: 0 }), start, target, velocity, 0.25);
|
|
32
|
+
const position = (time) => {
|
|
33
|
+
const value = time >= motion.duration ? target : motion.position(time);
|
|
34
|
+
return curve.rubberband ? value : clampDrag(value, curve.bounds);
|
|
35
|
+
};
|
|
36
|
+
return {
|
|
37
|
+
...motion,
|
|
38
|
+
position,
|
|
39
|
+
velocity: (time) => {
|
|
40
|
+
const raw = motion.position(time);
|
|
41
|
+
return time >= motion.duration ||
|
|
42
|
+
(!curve.rubberband && raw !== clampDrag(raw, curve.bounds))
|
|
43
|
+
? 0
|
|
44
|
+
: motion.velocity(time);
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
if (curve.snap || from !== edge)
|
|
49
|
+
return {
|
|
50
|
+
...springTo(from, curve.snap ? to : edge, curve.velocity),
|
|
51
|
+
to: curve.snap ? to : edge,
|
|
52
|
+
};
|
|
53
|
+
if (to === coast.to)
|
|
54
|
+
return coast;
|
|
55
|
+
// Reach the boundary with the decay's actual velocity, then absorb that velocity.
|
|
56
|
+
const rate = -Math.log(curve.friction);
|
|
57
|
+
const collision = Math.max(0, -Math.log1p((-(to - from) * rate * 1000) / curve.velocity) / rate);
|
|
58
|
+
const recovery = springTo(to, to, coast.velocity(collision));
|
|
59
|
+
const duration = collision + (curve.rubberband ? recovery.duration : 0);
|
|
60
|
+
return {
|
|
61
|
+
to,
|
|
62
|
+
duration,
|
|
63
|
+
position: (time) => time >= duration
|
|
64
|
+
? to
|
|
65
|
+
: time < collision
|
|
66
|
+
? coast.position(time)
|
|
67
|
+
: recovery.position(time - collision),
|
|
68
|
+
velocity: (time) => time >= duration
|
|
69
|
+
? 0
|
|
70
|
+
: time < collision
|
|
71
|
+
? coast.velocity(time)
|
|
72
|
+
: recovery.velocity(time - collision),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=drag-physics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drag-physics.js","sourceRoot":"","sources":["../src/drag-physics.ts"],"names":[],"mappings":"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"}
|
package/dist/drag.d.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { PlaybackAnimation } from './playback.js';
|
|
2
|
+
import type { Target } from './types.js';
|
|
3
|
+
export interface DragPoint {
|
|
4
|
+
readonly x: number;
|
|
5
|
+
readonly y: number;
|
|
6
|
+
}
|
|
7
|
+
export interface DragEvent extends DragPoint {
|
|
8
|
+
/** DIPs per second, in the same coordinates as the translation. */
|
|
9
|
+
readonly velocityX: number;
|
|
10
|
+
readonly velocityY: number;
|
|
11
|
+
}
|
|
12
|
+
export interface DragRelease extends DragEvent {
|
|
13
|
+
readonly target: DragPoint;
|
|
14
|
+
/** False on interruption/cancellation. Check before applying completion effects. */
|
|
15
|
+
readonly animation: PlaybackAnimation;
|
|
16
|
+
}
|
|
17
|
+
export interface DragOptions {
|
|
18
|
+
/** Defaults to both. One finger only. */
|
|
19
|
+
axis?: 'x' | 'y' | 'both';
|
|
20
|
+
/** Absolute translateX/translateY limits in DIPs; omitted edges are unbounded. */
|
|
21
|
+
bounds?: {
|
|
22
|
+
left?: number;
|
|
23
|
+
right?: number;
|
|
24
|
+
top?: number;
|
|
25
|
+
bottom?: number;
|
|
26
|
+
};
|
|
27
|
+
/** Closest stop to the projected landing. Arrays apply to every enabled axis. */
|
|
28
|
+
snap?: readonly number[] | {
|
|
29
|
+
x?: readonly number[];
|
|
30
|
+
y?: readonly number[];
|
|
31
|
+
};
|
|
32
|
+
/** Resist beyond bounds and spring back. Defaults to false (hard limits). */
|
|
33
|
+
rubberband?: boolean;
|
|
34
|
+
/** Decay retention per millisecond. Defaults to 0.998. */
|
|
35
|
+
friction?: number;
|
|
36
|
+
onStart?: (event: DragEvent) => void;
|
|
37
|
+
onMove?: (event: DragEvent) => void;
|
|
38
|
+
onRelease?: (event: DragRelease) => void;
|
|
39
|
+
onCancel?: (event: DragEvent) => void;
|
|
40
|
+
onSettle?: (position: DragPoint) => void;
|
|
41
|
+
}
|
|
42
|
+
export interface Drag {
|
|
43
|
+
readonly dragging: boolean;
|
|
44
|
+
readonly settling: boolean;
|
|
45
|
+
readonly paused: boolean;
|
|
46
|
+
readonly disposed: boolean;
|
|
47
|
+
/** Current presentation, including a native release animation in flight. */
|
|
48
|
+
readonly position: DragPoint;
|
|
49
|
+
/** Cancel contact/release at its visible position, keeping the subscription. */
|
|
50
|
+
cancel(): void;
|
|
51
|
+
/** Cancel and detach input. play() accepts new gestures; cancelled work stays cancelled. */
|
|
52
|
+
pause(): void;
|
|
53
|
+
play(): void;
|
|
54
|
+
dispose(): void;
|
|
55
|
+
}
|
|
56
|
+
/** Main-thread pan updates; release physics play through Jolt's native animation drivers. */
|
|
57
|
+
export declare function drag(target: Target, options?: DragOptions): Drag;
|
|
58
|
+
//# sourceMappingURL=drag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drag.d.ts","sourceRoot":"","sources":["../src/drag.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;CACnB;AACD,MAAM,WAAW,SAAU,SAAQ,SAAS;IAC1C,mEAAmE;IACnE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AACD,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;IAC1B,oFAAoF;IACpF,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAA;CACtC;AACD,MAAM,WAAW,WAAW;IAC1B,yCAAyC;IACzC,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,MAAM,CAAA;IACzB,kFAAkF;IAClF,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACzE,iFAAiF;IACjF,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG;QAAE,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAA;IAC3E,6EAA6E;IAC7E,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAA;IACpC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAA;IACnC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAA;IACxC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAA;IACrC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,IAAI,CAAA;CACzC;AACD,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;IAC5B,gFAAgF;IAChF,MAAM,IAAI,IAAI,CAAA;IACd,4FAA4F;IAC5F,KAAK,IAAI,IAAI,CAAA;IACb,IAAI,IAAI,IAAI,CAAA;IACZ,OAAO,IAAI,IAAI,CAAA;CAChB;AAkGD,6FAA6F;AAC7F,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,IAAI,CAcpE"}
|