@rafaelaugusto/jolt 0.1.0-beta.2 → 0.1.0-beta.3
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 +60 -6
- package/dist/animate.d.ts +3 -1
- package/dist/animate.d.ts.map +1 -1
- package/dist/animate.js +65 -1
- package/dist/animate.js.map +1 -1
- 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/driver/android.d.ts +1 -1
- package/dist/driver/android.d.ts.map +1 -1
- package/dist/driver/android.js +95 -5
- package/dist/driver/android.js.map +1 -1
- package/dist/driver/index.d.ts +3 -1
- package/dist/driver/index.d.ts.map +1 -1
- package/dist/driver/index.js.map +1 -1
- package/dist/engine.d.ts +1 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +6 -3
- package/dist/engine.js.map +1 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/loader.d.ts +19 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +172 -0
- package/dist/loader.js.map +1 -0
- package/dist/properties.d.ts +1 -1
- package/dist/properties.d.ts.map +1 -1
- package/dist/properties.js +1 -1
- 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 +293 -0
- package/dist/reveal.js.map +1 -0
- package/dist/text-layout.d.ts +22 -0
- package/dist/text-layout.d.ts.map +1 -0
- package/dist/text-layout.js +179 -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 +264 -0
- package/dist/text.js.map +1 -0
- package/dist/track.d.ts.map +1 -1
- package/dist/track.js +25 -3
- package/dist/track.js.map +1 -1
- package/dist/transition.d.ts +5 -0
- package/dist/transition.d.ts.map +1 -1
- package/dist/transition.js.map +1 -1
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/animate.ts +75 -1
- package/src/decay.ts +45 -0
- package/src/driver/android.ts +112 -6
- package/src/driver/index.ts +3 -1
- package/src/engine.ts +8 -4
- package/src/index.ts +7 -1
- package/src/loader.ts +201 -0
- package/src/properties.ts +1 -1
- package/src/reveal.ts +374 -0
- package/src/text-layout.ts +216 -0
- package/src/text.ts +296 -0
- package/src/track.ts +42 -3
- package/src/transition.ts +6 -0
- package/src/types.ts +13 -0
package/dist/track.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track.js","sourceRoot":"","sources":["../src/track.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,SAAS,EAAiB,MAAM,iBAAiB,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"track.js","sourceRoot":"","sources":["../src/track.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,SAAS,EAAiB,MAAM,iBAAiB,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAoCxD,MAAM,kBAAkB,GAAG,EAAE,CAAA;AAC7B,MAAM,iBAAiB,GAAG,IAAI,CAAA;AAC9B,MAAM,iBAAiB,GAAG,IAAI,CAAA;AAE9B,MAAM,UAAU,WAAW,CACzB,QAAkB,EAClB,SAA4B,EAC5B,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAsB,EACrD,QAAgB;IAEhB,MAAM,MAAM,GACV,KAAK,CAAC,IAAI,KAAK,QAAQ;QACrB,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC;QAC9C,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO;YACtB,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAE,EAAE,KAAK,CAAC;YACvC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;IAC/B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;IAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAE,CAAA;IAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAA;IAClC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IACtC,MAAM,aAAa,GAAG,OAAO,IAAI,MAAM,IAAI,MAAM,GAAG,CAAC,KAAK,CAAC,CAAA;IAC3D,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;IAElE,MAAM,SAAS,GAAG,CAAC,OAAe,EAAqC,EAAE;QACvE,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,CAAA;QAC5B,IAAI,IAAI,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC5B,IAAI,IAAI,IAAI,GAAG,GAAG,KAAK;YAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAA;QAC7C,MAAM,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAA;QACzC,OAAO,OAAO,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IAC7E,CAAC,CAAA;IAED,OAAO;QACL,QAAQ;QACR,KAAK;QACL,QAAQ;QACR,MAAM;QACN,OAAO;QACP,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,EAAE,EAAE,CAAC,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;QAC3C,GAAG;QACH,OAAO,EACL,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;YACjF,MAAM,KAAK,CAAC;YACV,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;YACzB,CAAC,CAAC,GAAG;QACT,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE;YACtB,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,IAAI,GAAG;gBAAE,OAAO,CAAC,CAAA;YAChD,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;YAC5C,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,CAAA;QAC1C,CAAC;KACF,CAAA;AACH,CAAC;AAED,SAAS,KAAK,CACZ,QAAkB,EAClB,IAAY,EACZ,KAAwC;IAExC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;IACpF,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAC7C,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAC5E,CAAA;QACD,OAAO,MAAM,CACX,QAAQ,EACR,CAAC,IAAI,EAAE,EAAE,CAAC,EACV,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,EACxE,CAAC,CACF,CAAA;IACH,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,kBAAkB,CAAC,CAAC,CACtF,CAAA;IACD,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAA;QACrB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC7D,CAAC;IACD,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;AACrC,CAAC;AAED,SAAS,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAU;IAClD,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAA;IAC7B,MAAM,SAAS,GACb,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAA;IAClF,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;IACzB,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,MAAM,CAAC,IAAI,SAAS;QAAE,CAAC,EAAE,CAAA;IACnE,OAAO,KAAK,CAAC,CAAC,CAAE,GAAG,QAAQ,CAAA;AAC7B,CAAC;AAED,SAAS,MAAM,CACb,QAAkB,EAClB,CAAC,IAAI,EAAE,EAAE,CAAoB,EAC7B,KAAyC,EACzC,QAAgB;IAEhB,MAAM,MAAM,GAAG,WAAW,CACxB,KAAK,CAAC,OAAO,EACb,IAAK,EACL,EAAG,EACH,KAAK,CAAC,QAAQ,IAAI,QAAQ,EAC1B,SAAS,CAAC,QAAQ,CAAC,CACpB,CAAA;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAA;IACnF,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAA;QACrB,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;IACjF,CAAC;IACD,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;AACrC,CAAC;AAED,SAAS,KAAK,CACZ,SAA4B,EAC5B,KAAwC;IAExC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;IAChC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;IAElF,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAE;QAChC,MAAM,QAAQ,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC7E,IAAI,CAAC,GAAG,CAAC,CAAA;QACT,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAE;YAAE,CAAC,EAAE,CAAA;QAChE,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAE,CAAA;QACzB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,KAAK,CAAA;QACpC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;QACtD,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAE,CAAA;QAC1B,OAAO,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAA;IAC5D,CAAC,CAAA;IAED,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;IACjB,MAAM,MAAM,GAAG,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,CAAA;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAE,CAAA;QACzB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,KAAK,CAAA;QACpC,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAE,CAAA;QAC1B,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAE,CAAA;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAE,CAAA;QACvB,MAAM,KAAK,GACT,MAAM,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YAC9B,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAA;QAC7E,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;YACzC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,CAAA;YACzC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAA;QAC9E,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ;QACR,QAAQ;QACR,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI;QACxE,KAAK;QACL,MAAM;KACP,CAAA;AACH,CAAC"}
|
package/dist/transition.d.ts
CHANGED
|
@@ -42,6 +42,11 @@ export type Curve = {
|
|
|
42
42
|
type: 'spring';
|
|
43
43
|
physics: SpringPhysics;
|
|
44
44
|
velocity: number | undefined;
|
|
45
|
+
} | {
|
|
46
|
+
type: 'decay';
|
|
47
|
+
friction: number;
|
|
48
|
+
velocity: number;
|
|
49
|
+
snap: readonly number[] | undefined;
|
|
45
50
|
};
|
|
46
51
|
export interface ResolvedTransition {
|
|
47
52
|
curve: Curve;
|
package/dist/transition.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transition.d.ts","sourceRoot":"","sources":["../src/transition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,MAAM,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA;AAC7E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAE/D,MAAM,WAAW,MAAM;IACrB,sFAAsF;IACtF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAChC;AAED,MAAM,WAAW,KAAM,SAAQ,MAAM;IACnC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAA;IACjC,uEAAuE;IACvE,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC1B;AAED,MAAM,WAAW,MAAO,SAAQ,MAAM;IACpC,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qHAAqH;IACrH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,CAAA;AAEvC,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAEvD,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAI9C,CAAA;AAED,MAAM,MAAM,KAAK,GACb;IACE,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,SAAS,cAAc,EAAE,CAAA;IAC/B,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;CACrC,GACD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"transition.d.ts","sourceRoot":"","sources":["../src/transition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,MAAM,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA;AAC7E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAE/D,MAAM,WAAW,MAAM;IACrB,sFAAsF;IACtF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAChC;AAED,MAAM,WAAW,KAAM,SAAQ,MAAM;IACnC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAA;IACjC,uEAAuE;IACvE,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC1B;AAED,MAAM,WAAW,MAAO,SAAQ,MAAM;IACpC,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qHAAqH;IACrH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,CAAA;AAEvC,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAEvD,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAI9C,CAAA;AAED,MAAM,MAAM,KAAK,GACb;IACE,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,SAAS,cAAc,EAAE,CAAA;IAC/B,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;CACrC,GACD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GACxE;IACE,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;CACpC,CAAA;AAEL,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,KAAK,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;CACjB;AAMD,eAAO,MAAM,gBAAgB,MAAM,CAAA;AAEnC,wBAAgB,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAIxD;AAED,wBAAgB,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAMvD;AAED,sFAAsF;AACtF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,GAAG,UAAU,CAInF;AAED,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,GAChB,kBAAkB,CA8DpB"}
|
package/dist/transition.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transition.js","sourceRoot":"","sources":["../src/transition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAoC,MAAM,aAAa,CAAA;AAE7E,OAAO,EAAE,aAAa,EAAsB,MAAM,aAAa,CAAA;AAsC/D,MAAM,CAAC,MAAM,OAAO,GAA+B;IACjD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE;IACpD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IACvD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;CACvD,CAAA;
|
|
1
|
+
{"version":3,"file":"transition.js","sourceRoot":"","sources":["../src/transition.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -24,6 +24,20 @@ export type Target = View | {
|
|
|
24
24
|
} | {
|
|
25
25
|
readonly nativeElement: View;
|
|
26
26
|
};
|
|
27
|
+
/** Translation velocities in DIPs per second. Omitted axes keep their current motion. */
|
|
28
|
+
export interface DecayVelocity {
|
|
29
|
+
x?: number;
|
|
30
|
+
y?: number;
|
|
31
|
+
}
|
|
32
|
+
export interface DecayOptions {
|
|
33
|
+
/** Velocity multiplier per millisecond, between 0 and 1 exclusively. Defaults to 0.998. */
|
|
34
|
+
friction?: number;
|
|
35
|
+
/** Spring to the closest stop to the projected landing, shared or set per axis. */
|
|
36
|
+
snap?: readonly number[] | {
|
|
37
|
+
x?: readonly number[];
|
|
38
|
+
y?: readonly number[];
|
|
39
|
+
};
|
|
40
|
+
}
|
|
27
41
|
export interface Stagger {
|
|
28
42
|
/** Milliseconds between one target and the next. */
|
|
29
43
|
each: number;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE7D,+GAA+G;AAC/G,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAA;AAE/D,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,qCAAqC;IACrC,CAAC,CAAC,EAAE,aAAa,CAAA;IACjB,qCAAqC;IACrC,CAAC,CAAC,EAAE,aAAa,CAAA;IACjB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,eAAe;IACf,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB;AAED,+FAA+F;AAC/F,MAAM,MAAM,MAAM,GAChB,IAAI,GAAG;IAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAA;CAAE,CAAA;AAEzE,MAAM,WAAW,OAAO;IACtB,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAA;IACZ,iCAAiC;IACjC,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAA;CAC5C;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG;KACvC,CAAC,IAAI,MAAM,SAAS,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU;CACjD,GAAG;IACF,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IAC1B,mFAAmF;IACnF,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE7D,+GAA+G;AAC/G,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAA;AAE/D,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,qCAAqC;IACrC,CAAC,CAAC,EAAE,aAAa,CAAA;IACjB,qCAAqC;IACrC,CAAC,CAAC,EAAE,aAAa,CAAA;IACjB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,eAAe;IACf,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB;AAED,+FAA+F;AAC/F,MAAM,MAAM,MAAM,GAChB,IAAI,GAAG;IAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAA;CAAE,CAAA;AAEzE,yFAAyF;AACzF,MAAM,WAAW,aAAa;IAC5B,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,CAAC,CAAC,EAAE,MAAM,CAAA;CACX;AAED,MAAM,WAAW,YAAY;IAC3B,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,mFAAmF;IACnF,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;CAC5E;AAED,MAAM,WAAW,OAAO;IACtB,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAA;IACZ,iCAAiC;IACjC,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAA;CAC5C;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG;KACvC,CAAC,IAAI,MAAM,SAAS,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU;CACjD,GAAG;IACF,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IAC1B,mFAAmF;IACnF,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA"}
|
package/package.json
CHANGED
package/src/animate.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { View } from '@nativescript/core'
|
|
2
|
+
import { DEFAULT_FRICTION, solveDecay } from './decay.js'
|
|
2
3
|
import {
|
|
3
4
|
arrivalOf,
|
|
4
5
|
setArrival,
|
|
@@ -9,7 +10,7 @@ import {
|
|
|
9
10
|
} from './engine.js'
|
|
10
11
|
import { getPreset, type PresetName } from './presets.js'
|
|
11
12
|
import { resolveHaptic, type Haptic } from './haptics.js'
|
|
12
|
-
import { isProperty, type Property } from './properties.js'
|
|
13
|
+
import { isProperty, precision, type Property } from './properties.js'
|
|
13
14
|
import {
|
|
14
15
|
hasCurve,
|
|
15
16
|
mergeTransitions,
|
|
@@ -20,6 +21,8 @@ import {
|
|
|
20
21
|
} from './transition.js'
|
|
21
22
|
import type {
|
|
22
23
|
AnimateOptions,
|
|
24
|
+
DecayOptions,
|
|
25
|
+
DecayVelocity,
|
|
23
26
|
Keyframes,
|
|
24
27
|
KeyframeValue,
|
|
25
28
|
Stagger,
|
|
@@ -82,6 +85,77 @@ export function animate(
|
|
|
82
85
|
)
|
|
83
86
|
}
|
|
84
87
|
|
|
88
|
+
/** Starts at the current translation and slows down from a velocity in DIPs per second. */
|
|
89
|
+
export function decay(
|
|
90
|
+
target: Target | readonly Target[],
|
|
91
|
+
velocity: DecayVelocity,
|
|
92
|
+
options: DecayOptions = {},
|
|
93
|
+
): Animation {
|
|
94
|
+
const friction = options.friction ?? DEFAULT_FRICTION
|
|
95
|
+
if (!Number.isFinite(friction) || friction <= 0 || friction >= 1) {
|
|
96
|
+
throw new RangeError('Decay friction must be between 0 and 1 exclusively.')
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const stops = (values: readonly number[] | undefined) => {
|
|
100
|
+
if (values === undefined) return undefined
|
|
101
|
+
if (
|
|
102
|
+
!Array.isArray(values) ||
|
|
103
|
+
values.length === 0 ||
|
|
104
|
+
![...values].every(Number.isFinite)
|
|
105
|
+
) {
|
|
106
|
+
throw new RangeError('Decay snap needs a nonempty array of finite positions.')
|
|
107
|
+
}
|
|
108
|
+
return [...values]
|
|
109
|
+
}
|
|
110
|
+
const snap = options.snap
|
|
111
|
+
if (
|
|
112
|
+
snap !== undefined &&
|
|
113
|
+
!Array.isArray(snap) &&
|
|
114
|
+
(snap === null ||
|
|
115
|
+
typeof snap !== 'object' ||
|
|
116
|
+
Object.keys(snap).some((key) => key !== 'x' && key !== 'y'))
|
|
117
|
+
) {
|
|
118
|
+
throw new TypeError('Decay snap must be an array or an object with x and y stops.')
|
|
119
|
+
}
|
|
120
|
+
const shared = Array.isArray(snap)
|
|
121
|
+
const perAxis = snap as { x?: readonly number[]; y?: readonly number[] } | undefined
|
|
122
|
+
const snapped = shared ? stops(snap) : undefined
|
|
123
|
+
const snapX = shared ? snapped : stops(perAxis?.x)
|
|
124
|
+
const snapY = shared ? snapped : stops(perAxis?.y)
|
|
125
|
+
|
|
126
|
+
const plans = Object.entries(velocity).flatMap<Plan>(([property, value]) => {
|
|
127
|
+
if (property !== 'x' && property !== 'y') {
|
|
128
|
+
throw new Error(`Can't decay "${property}". Use x or y.`)
|
|
129
|
+
}
|
|
130
|
+
if (value === undefined) return []
|
|
131
|
+
if (!Number.isFinite(value)) {
|
|
132
|
+
throw new RangeError(`Invalid decay velocity for "${property}".`)
|
|
133
|
+
}
|
|
134
|
+
// Validate every axis before handing any plans to the engine.
|
|
135
|
+
solveDecay(0, value, friction, precision[property])
|
|
136
|
+
return [
|
|
137
|
+
{
|
|
138
|
+
property,
|
|
139
|
+
keyframes: [null, null],
|
|
140
|
+
transition: {
|
|
141
|
+
curve: {
|
|
142
|
+
type: 'decay',
|
|
143
|
+
friction,
|
|
144
|
+
velocity: value,
|
|
145
|
+
snap: property === 'x' ? snapX : snapY,
|
|
146
|
+
},
|
|
147
|
+
delay: 0,
|
|
148
|
+
repeat: 0,
|
|
149
|
+
reverse: false,
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
]
|
|
153
|
+
})
|
|
154
|
+
const views = toViews(target)
|
|
155
|
+
if (plans.length === 0) return group([])
|
|
156
|
+
return group(views.map((view) => new ViewAnimation(view, plans)))
|
|
157
|
+
}
|
|
158
|
+
|
|
85
159
|
/** Stops all or selected properties at their current values. `scale` stops both axes. */
|
|
86
160
|
export function stop(
|
|
87
161
|
target: Target | readonly Target[],
|
package/src/decay.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export interface DecayMotion {
|
|
2
|
+
duration: number
|
|
3
|
+
to: number
|
|
4
|
+
position(time: number): number
|
|
5
|
+
velocity(time: number): number
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/** Velocity retains this fraction every millisecond, independently of the display's refresh rate. */
|
|
9
|
+
export const DEFAULT_FRICTION = 0.998
|
|
10
|
+
|
|
11
|
+
/** Exponential motion, with velocity in units per second and time in milliseconds. */
|
|
12
|
+
export function solveDecay(
|
|
13
|
+
from: number,
|
|
14
|
+
velocity: number,
|
|
15
|
+
friction: number,
|
|
16
|
+
precision: number,
|
|
17
|
+
): DecayMotion {
|
|
18
|
+
const rate = -Math.log(friction)
|
|
19
|
+
const distance = velocity / (1000 * rate)
|
|
20
|
+
const to = from + distance
|
|
21
|
+
// Stop only when both the remaining distance and speed are imperceptible.
|
|
22
|
+
const duration =
|
|
23
|
+
velocity === 0
|
|
24
|
+
? 0
|
|
25
|
+
: Math.ceil(
|
|
26
|
+
Math.max(
|
|
27
|
+
0,
|
|
28
|
+
Math.log(Math.abs(distance) / precision) / rate,
|
|
29
|
+
Math.log(Math.abs(velocity) / (precision * 10)) / rate,
|
|
30
|
+
),
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
if (!Number.isFinite(to) || !Number.isFinite(duration) || duration > 2_147_483_647) {
|
|
34
|
+
throw new RangeError('Decay velocity and friction produce an unplayable motion.')
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return {
|
|
38
|
+
duration,
|
|
39
|
+
to,
|
|
40
|
+
position: (time) =>
|
|
41
|
+
time >= duration ? to : from - distance * Math.expm1(-rate * Math.max(0, time)),
|
|
42
|
+
velocity: (time) =>
|
|
43
|
+
time >= duration ? 0 : velocity * Math.exp(-rate * Math.max(0, time)),
|
|
44
|
+
}
|
|
45
|
+
}
|
package/src/driver/android.ts
CHANGED
|
@@ -1,9 +1,48 @@
|
|
|
1
1
|
import { Utils, type View } from '@nativescript/core'
|
|
2
2
|
import type { Property } from '../properties.js'
|
|
3
|
-
import {
|
|
3
|
+
import type { Driver } from './index.js'
|
|
4
4
|
|
|
5
5
|
type NativeView = android.view.View
|
|
6
6
|
|
|
7
|
+
interface Handle {
|
|
8
|
+
cancel(): void
|
|
9
|
+
elapsed(): number
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/** Own only layers we create; keep app-configured hardware/software layers and paints intact. */
|
|
13
|
+
function fadeLayer(view: View, nativeView: NativeView): (() => void) | undefined {
|
|
14
|
+
const { View, ViewGroup } = android.view
|
|
15
|
+
if (
|
|
16
|
+
!view.isLoaded ||
|
|
17
|
+
view.nativeViewProtected !== nativeView ||
|
|
18
|
+
!(nativeView instanceof ViewGroup) ||
|
|
19
|
+
nativeView.getChildCount() === 0 ||
|
|
20
|
+
!nativeView.isHardwareAccelerated() ||
|
|
21
|
+
nativeView.getLayerType() !== View.LAYER_TYPE_NONE
|
|
22
|
+
)
|
|
23
|
+
return undefined
|
|
24
|
+
|
|
25
|
+
// Do not cache an entire oversized scrolling/content tree into a GPU texture.
|
|
26
|
+
const { widthPixels, heightPixels } = nativeView.getResources().getDisplayMetrics()
|
|
27
|
+
const width = nativeView.getWidth()
|
|
28
|
+
const height = nativeView.getHeight()
|
|
29
|
+
if (width <= 0 || height <= 0 || width > widthPixels || height > heightPixels)
|
|
30
|
+
return undefined
|
|
31
|
+
|
|
32
|
+
nativeView.setLayerType(View.LAYER_TYPE_HARDWARE, null)
|
|
33
|
+
let active = true
|
|
34
|
+
const restore = () => {
|
|
35
|
+
if (!active) return
|
|
36
|
+
active = false
|
|
37
|
+
view.off('unloaded', restore)
|
|
38
|
+
if (nativeView.getLayerType() === View.LAYER_TYPE_HARDWARE) {
|
|
39
|
+
nativeView.setLayerType(View.LAYER_TYPE_NONE, null)
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
view.on('unloaded', restore)
|
|
43
|
+
return restore
|
|
44
|
+
}
|
|
45
|
+
|
|
7
46
|
const accessors: Record<
|
|
8
47
|
Property,
|
|
9
48
|
{ get(view: NativeView): number; set(view: NativeView, value: number): void }
|
|
@@ -42,6 +81,12 @@ export function createAndroidDriver(): Driver {
|
|
|
42
81
|
const nativeView = view.nativeViewProtected as NativeView
|
|
43
82
|
const scale = unit(track.property)
|
|
44
83
|
|
|
84
|
+
if (track.property === 'rotateX' || track.property === 'rotateY') {
|
|
85
|
+
nativeView.setCameraDistance(
|
|
86
|
+
(view.perspective || 300) * Utils.layout.getDisplayDensity(),
|
|
87
|
+
)
|
|
88
|
+
}
|
|
89
|
+
|
|
45
90
|
const keyframes = Array.create(android.animation.Keyframe, track.values.length)
|
|
46
91
|
track.values.forEach((value, i) => {
|
|
47
92
|
keyframes[i] = android.animation.Keyframe.ofFloat(track.times[i]!, value * scale)
|
|
@@ -56,6 +101,14 @@ export function createAndroidDriver(): Driver {
|
|
|
56
101
|
nativeView,
|
|
57
102
|
holders,
|
|
58
103
|
)
|
|
104
|
+
let cancelled = false
|
|
105
|
+
let ended = false
|
|
106
|
+
let started = false
|
|
107
|
+
let restoreLayer: (() => void) | undefined
|
|
108
|
+
const releaseLayer = () => {
|
|
109
|
+
restoreLayer?.()
|
|
110
|
+
restoreLayer = undefined
|
|
111
|
+
}
|
|
59
112
|
animator.setDuration(Math.max(track.duration, 1))
|
|
60
113
|
animator.setStartDelay(track.delay)
|
|
61
114
|
animator.setInterpolator(interpolator)
|
|
@@ -73,10 +126,25 @@ export function createAndroidDriver(): Driver {
|
|
|
73
126
|
}
|
|
74
127
|
animator.addListener(
|
|
75
128
|
new android.animation.Animator.AnimatorListener({
|
|
76
|
-
onAnimationStart() {
|
|
129
|
+
onAnimationStart() {
|
|
130
|
+
started = true
|
|
131
|
+
if (
|
|
132
|
+
!cancelled &&
|
|
133
|
+
!ended &&
|
|
134
|
+
track.property === 'opacity' &&
|
|
135
|
+
track.values.some((value) => value !== track.values[0])
|
|
136
|
+
)
|
|
137
|
+
restoreLayer = fadeLayer(view, nativeView)
|
|
138
|
+
},
|
|
77
139
|
onAnimationRepeat() {},
|
|
78
|
-
onAnimationCancel() {
|
|
140
|
+
onAnimationCancel() {
|
|
141
|
+
cancelled = true
|
|
142
|
+
releaseLayer()
|
|
143
|
+
},
|
|
79
144
|
onAnimationEnd() {
|
|
145
|
+
if (ended) return
|
|
146
|
+
ended = true
|
|
147
|
+
releaseLayer()
|
|
80
148
|
onEnd()
|
|
81
149
|
},
|
|
82
150
|
}),
|
|
@@ -84,18 +152,56 @@ export function createAndroidDriver(): Driver {
|
|
|
84
152
|
|
|
85
153
|
accessors[track.property].set(nativeView, track.values[0]! * scale)
|
|
86
154
|
animator.start()
|
|
87
|
-
return
|
|
155
|
+
return {
|
|
156
|
+
elapsed: () => (started ? track.delay + animator.getCurrentPlayTime() : 0),
|
|
157
|
+
cancel() {
|
|
158
|
+
// Cancel before native callbacks: Android can send onStart while cancelling a delay.
|
|
159
|
+
cancelled = true
|
|
160
|
+
releaseLayer()
|
|
161
|
+
animator.cancel()
|
|
162
|
+
},
|
|
163
|
+
} satisfies Handle
|
|
88
164
|
},
|
|
89
165
|
|
|
90
166
|
stop(_view, handle) {
|
|
91
|
-
;(handle as
|
|
167
|
+
;(handle as Handle).cancel()
|
|
92
168
|
},
|
|
93
169
|
|
|
170
|
+
elapsed: (handle) => (handle as Handle).elapsed(),
|
|
171
|
+
|
|
94
172
|
presented(view, property) {
|
|
95
173
|
const nativeView = view.nativeViewProtected as NativeView | undefined
|
|
96
174
|
return nativeView ? accessors[property].get(nativeView) / unit(property) : undefined
|
|
97
175
|
},
|
|
98
176
|
|
|
99
|
-
after,
|
|
177
|
+
after(ms, callback) {
|
|
178
|
+
// A native marker follows animator duration scale, including changes during playback.
|
|
179
|
+
// Only completion crosses the bridge; there is no JavaScript update listener.
|
|
180
|
+
const values = Array.create('float', 2)
|
|
181
|
+
values[0] = 0
|
|
182
|
+
values[1] = 1
|
|
183
|
+
const marker = android.animation.ValueAnimator.ofFloat(values)
|
|
184
|
+
marker.setDuration(ms)
|
|
185
|
+
let active = true
|
|
186
|
+
marker.addListener(
|
|
187
|
+
new android.animation.Animator.AnimatorListener({
|
|
188
|
+
onAnimationStart() {},
|
|
189
|
+
onAnimationRepeat() {},
|
|
190
|
+
onAnimationCancel() {
|
|
191
|
+
active = false
|
|
192
|
+
},
|
|
193
|
+
onAnimationEnd() {
|
|
194
|
+
if (!active) return
|
|
195
|
+
active = false
|
|
196
|
+
callback()
|
|
197
|
+
},
|
|
198
|
+
}),
|
|
199
|
+
)
|
|
200
|
+
marker.start()
|
|
201
|
+
return () => {
|
|
202
|
+
active = false
|
|
203
|
+
marker.cancel()
|
|
204
|
+
}
|
|
205
|
+
},
|
|
100
206
|
}
|
|
101
207
|
}
|
package/src/driver/index.ts
CHANGED
|
@@ -10,9 +10,11 @@ export interface Driver {
|
|
|
10
10
|
/** Starts the track at `startedAt + track.delay` and calls `onEnd` once, however it ends. */
|
|
11
11
|
play(view: View, track: Track, startedAt: number, onEnd: () => void): unknown
|
|
12
12
|
stop(view: View, handle: unknown): void
|
|
13
|
+
/** Track time, including its delay, when the native clock differs from `now()`. */
|
|
14
|
+
elapsed?(handle: unknown): number
|
|
13
15
|
/** The value on screen, when the platform knows it better than the track does. */
|
|
14
16
|
presented(view: View, property: Property): number | undefined
|
|
15
|
-
/** Calls back after `ms`
|
|
17
|
+
/** Calls back after `ms` of animation time, respecting platform speed settings. */
|
|
16
18
|
after(ms: number, callback: () => void): () => void
|
|
17
19
|
}
|
|
18
20
|
|
package/src/engine.ts
CHANGED
|
@@ -12,7 +12,7 @@ export interface Animation extends PromiseLike<boolean> {
|
|
|
12
12
|
* Never rejects.
|
|
13
13
|
*/
|
|
14
14
|
readonly finished: Promise<boolean>
|
|
15
|
-
/** Stops playback.
|
|
15
|
+
/** Stops playback. Each effect documents whether it preserves or restores its visual state. */
|
|
16
16
|
stop(): void
|
|
17
17
|
}
|
|
18
18
|
|
|
@@ -107,7 +107,7 @@ export class ViewAnimation implements Animation {
|
|
|
107
107
|
let current: number
|
|
108
108
|
let velocity = 0
|
|
109
109
|
if (previous) {
|
|
110
|
-
const elapsed = now
|
|
110
|
+
const elapsed = elapsedOf(previous, now)
|
|
111
111
|
current = driver.presented(this.view, property) ?? previous.track.valueAt(elapsed)
|
|
112
112
|
velocity = previous.track.velocityAt(elapsed)
|
|
113
113
|
release(previous, now, false)
|
|
@@ -157,7 +157,7 @@ export class ViewAnimation implements Animation {
|
|
|
157
157
|
|
|
158
158
|
const arrival = Math.max(...this.entries.map((entry) => entry.track.arrival))
|
|
159
159
|
if (this.pending === 0) this.settle()
|
|
160
|
-
else if (Number.isFinite(arrival)) {
|
|
160
|
+
else if (Number.isFinite(arrival) && tracks.some((track) => track.end > arrival)) {
|
|
161
161
|
this.cancelArrival = driver.after(arrival, this.arrive)
|
|
162
162
|
}
|
|
163
163
|
}
|
|
@@ -220,9 +220,13 @@ function release(entry: Entry, now: number, commit: boolean) {
|
|
|
220
220
|
forget(entry)
|
|
221
221
|
if (commit) {
|
|
222
222
|
const value =
|
|
223
|
-
driver.presented(view, property) ?? entry.track.valueAt(now
|
|
223
|
+
driver.presented(view, property) ?? entry.track.valueAt(elapsedOf(entry, now))
|
|
224
224
|
writeValue(view, property, value)
|
|
225
225
|
}
|
|
226
226
|
driver.stop(view, entry.handle)
|
|
227
227
|
entry.owner.ended(false)
|
|
228
228
|
}
|
|
229
|
+
|
|
230
|
+
function elapsedOf(entry: Entry, now: number) {
|
|
231
|
+
return getDriver().elapsed?.(entry.handle) ?? now - entry.startedAt
|
|
232
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { animate, stop } from './animate.js'
|
|
1
|
+
export { animate, decay, stop } from './animate.js'
|
|
2
2
|
export { sequence } from './sequence.js'
|
|
3
3
|
export type { Step } from './sequence.js'
|
|
4
4
|
export { press } from './press.js'
|
|
@@ -7,6 +7,12 @@ export { confetti, particles } from './particles.js'
|
|
|
7
7
|
export type { ConfettiOptions, ParticleOptions } from './particles.js'
|
|
8
8
|
export { shimmer } from './shimmer.js'
|
|
9
9
|
export type { ShimmerOptions } from './shimmer.js'
|
|
10
|
+
export { loader } from './loader.js'
|
|
11
|
+
export type { LoaderOptions, LoaderStyle } from './loader.js'
|
|
12
|
+
export { reveal, conceal } from './reveal.js'
|
|
13
|
+
export type { RevealOptions, ConcealOptions } from './reveal.js'
|
|
14
|
+
export { animateText } from './text.js'
|
|
15
|
+
export type { TextOptions } from './text.js'
|
|
10
16
|
export { symbolEffect } from './symbol-effect.js'
|
|
11
17
|
export type {
|
|
12
18
|
SymbolEffect,
|