@rafaelaugusto/jolt 0.1.0-beta.1 → 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.
Files changed (302) hide show
  1. package/README.md +367 -18
  2. package/dist/animate.d.ts +19 -3
  3. package/dist/animate.d.ts.map +1 -1
  4. package/dist/animate.js +186 -14
  5. package/dist/animate.js.map +1 -1
  6. package/dist/color.d.ts +11 -0
  7. package/dist/color.d.ts.map +1 -0
  8. package/dist/color.js +73 -0
  9. package/dist/color.js.map +1 -0
  10. package/dist/config.d.ts +31 -0
  11. package/dist/config.d.ts.map +1 -0
  12. package/dist/config.js +73 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/decay.d.ts +11 -0
  15. package/dist/decay.d.ts.map +1 -0
  16. package/dist/decay.js +22 -0
  17. package/dist/decay.js.map +1 -0
  18. package/dist/decoration.d.ts +18 -0
  19. package/dist/decoration.d.ts.map +1 -0
  20. package/dist/decoration.js +155 -0
  21. package/dist/decoration.js.map +1 -0
  22. package/dist/drag-input.d.ts +15 -0
  23. package/dist/drag-input.d.ts.map +1 -0
  24. package/dist/drag-input.js +66 -0
  25. package/dist/drag-input.js.map +1 -0
  26. package/dist/drag-physics.d.ts +20 -0
  27. package/dist/drag-physics.d.ts.map +1 -0
  28. package/dist/drag-physics.js +75 -0
  29. package/dist/drag-physics.js.map +1 -0
  30. package/dist/drag.d.ts +58 -0
  31. package/dist/drag.d.ts.map +1 -0
  32. package/dist/drag.js +324 -0
  33. package/dist/drag.js.map +1 -0
  34. package/dist/driver/android-color.d.ts +20 -0
  35. package/dist/driver/android-color.d.ts.map +1 -0
  36. package/dist/driver/android-color.js +136 -0
  37. package/dist/driver/android-color.js.map +1 -0
  38. package/dist/driver/android-decoration.d.ts +22 -0
  39. package/dist/driver/android-decoration.d.ts.map +1 -0
  40. package/dist/driver/android-decoration.js +139 -0
  41. package/dist/driver/android-decoration.js.map +1 -0
  42. package/dist/driver/android-playback.d.ts +13 -0
  43. package/dist/driver/android-playback.d.ts.map +1 -0
  44. package/dist/driver/android-playback.js +141 -0
  45. package/dist/driver/android-playback.js.map +1 -0
  46. package/dist/driver/android.d.ts +1 -1
  47. package/dist/driver/android.d.ts.map +1 -1
  48. package/dist/driver/android.js +165 -13
  49. package/dist/driver/android.js.map +1 -1
  50. package/dist/driver/index.d.ts +25 -2
  51. package/dist/driver/index.d.ts.map +1 -1
  52. package/dist/driver/index.js.map +1 -1
  53. package/dist/driver/ios-color.d.ts +16 -0
  54. package/dist/driver/ios-color.d.ts.map +1 -0
  55. package/dist/driver/ios-color.js +392 -0
  56. package/dist/driver/ios-color.js.map +1 -0
  57. package/dist/driver/ios-decoration.d.ts +17 -0
  58. package/dist/driver/ios-decoration.d.ts.map +1 -0
  59. package/dist/driver/ios-decoration.js +271 -0
  60. package/dist/driver/ios-decoration.js.map +1 -0
  61. package/dist/driver/ios-layout.d.ts +9 -0
  62. package/dist/driver/ios-layout.d.ts.map +1 -0
  63. package/dist/driver/ios-layout.js +52 -0
  64. package/dist/driver/ios-layout.js.map +1 -0
  65. package/dist/driver/ios-playback.d.ts +10 -0
  66. package/dist/driver/ios-playback.d.ts.map +1 -0
  67. package/dist/driver/ios-playback.js +47 -0
  68. package/dist/driver/ios-playback.js.map +1 -0
  69. package/dist/driver/ios-shadow.d.ts +6 -0
  70. package/dist/driver/ios-shadow.d.ts.map +1 -0
  71. package/dist/driver/ios-shadow.js +52 -0
  72. package/dist/driver/ios-shadow.js.map +1 -0
  73. package/dist/driver/ios.d.ts.map +1 -1
  74. package/dist/driver/ios.js +163 -28
  75. package/dist/driver/ios.js.map +1 -1
  76. package/dist/engine.d.ts +75 -5
  77. package/dist/engine.d.ts.map +1 -1
  78. package/dist/engine.js +293 -23
  79. package/dist/engine.js.map +1 -1
  80. package/dist/haptics.d.ts +21 -0
  81. package/dist/haptics.d.ts.map +1 -0
  82. package/dist/haptics.js +120 -0
  83. package/dist/haptics.js.map +1 -0
  84. package/dist/image-effect-native.d.ts +26 -0
  85. package/dist/image-effect-native.d.ts.map +1 -0
  86. package/dist/image-effect-native.js +73 -0
  87. package/dist/image-effect-native.js.map +1 -0
  88. package/dist/image-effect.d.ts +50 -0
  89. package/dist/image-effect.d.ts.map +1 -0
  90. package/dist/image-effect.js +290 -0
  91. package/dist/image-effect.js.map +1 -0
  92. package/dist/image-owner.d.ts +3 -0
  93. package/dist/image-owner.d.ts.map +1 -0
  94. package/dist/image-owner.js +11 -0
  95. package/dist/image-owner.js.map +1 -0
  96. package/dist/index.d.ts +43 -2
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +20 -1
  99. package/dist/index.js.map +1 -1
  100. package/dist/interaction-surface.d.ts +12 -0
  101. package/dist/interaction-surface.d.ts.map +1 -0
  102. package/dist/interaction-surface.js +36 -0
  103. package/dist/interaction-surface.js.map +1 -0
  104. package/dist/items.d.ts +20 -0
  105. package/dist/items.d.ts.map +1 -0
  106. package/dist/items.js +109 -0
  107. package/dist/items.js.map +1 -0
  108. package/dist/keyboard.d.ts +41 -0
  109. package/dist/keyboard.d.ts.map +1 -0
  110. package/dist/keyboard.js +256 -0
  111. package/dist/keyboard.js.map +1 -0
  112. package/dist/label.d.ts +7 -0
  113. package/dist/label.d.ts.map +1 -0
  114. package/dist/label.js +60 -0
  115. package/dist/label.js.map +1 -0
  116. package/dist/layout.d.ts +13 -0
  117. package/dist/layout.d.ts.map +1 -0
  118. package/dist/layout.js +348 -0
  119. package/dist/layout.js.map +1 -0
  120. package/dist/liquid-grid.d.ts +3 -0
  121. package/dist/liquid-grid.d.ts.map +1 -0
  122. package/dist/liquid-grid.js +24 -0
  123. package/dist/liquid-grid.js.map +1 -0
  124. package/dist/liquid.d.ts +18 -0
  125. package/dist/liquid.d.ts.map +1 -0
  126. package/dist/liquid.js +234 -0
  127. package/dist/liquid.js.map +1 -0
  128. package/dist/loader.d.ts +19 -0
  129. package/dist/loader.d.ts.map +1 -0
  130. package/dist/loader.js +173 -0
  131. package/dist/loader.js.map +1 -0
  132. package/dist/motion-scope.d.ts +39 -0
  133. package/dist/motion-scope.d.ts.map +1 -0
  134. package/dist/motion-scope.js +238 -0
  135. package/dist/motion-scope.js.map +1 -0
  136. package/dist/motion-states.d.ts +36 -0
  137. package/dist/motion-states.d.ts.map +1 -0
  138. package/dist/motion-states.js +165 -0
  139. package/dist/motion-states.js.map +1 -0
  140. package/dist/particles.d.ts +39 -0
  141. package/dist/particles.d.ts.map +1 -0
  142. package/dist/particles.js +265 -0
  143. package/dist/particles.js.map +1 -0
  144. package/dist/path.d.ts +12 -0
  145. package/dist/path.d.ts.map +1 -0
  146. package/dist/path.js +90 -0
  147. package/dist/path.js.map +1 -0
  148. package/dist/playback-group.d.ts +6 -0
  149. package/dist/playback-group.d.ts.map +1 -0
  150. package/dist/playback-group.js +141 -0
  151. package/dist/playback-group.js.map +1 -0
  152. package/dist/playback.d.ts +25 -0
  153. package/dist/playback.d.ts.map +1 -0
  154. package/dist/playback.js +35 -0
  155. package/dist/playback.js.map +1 -0
  156. package/dist/press.d.ts.map +1 -1
  157. package/dist/press.js +23 -7
  158. package/dist/press.js.map +1 -1
  159. package/dist/properties.d.ts +6 -3
  160. package/dist/properties.d.ts.map +1 -1
  161. package/dist/properties.js +26 -2
  162. package/dist/properties.js.map +1 -1
  163. package/dist/reveal.d.ts +25 -0
  164. package/dist/reveal.d.ts.map +1 -0
  165. package/dist/reveal.js +294 -0
  166. package/dist/reveal.js.map +1 -0
  167. package/dist/roll-diff.d.ts +22 -0
  168. package/dist/roll-diff.d.ts.map +1 -0
  169. package/dist/roll-diff.js +36 -0
  170. package/dist/roll-diff.js.map +1 -0
  171. package/dist/roll.d.ts +29 -0
  172. package/dist/roll.d.ts.map +1 -0
  173. package/dist/roll.js +442 -0
  174. package/dist/roll.js.map +1 -0
  175. package/dist/scroll-linked.d.ts +10 -0
  176. package/dist/scroll-linked.d.ts.map +1 -0
  177. package/dist/scroll-linked.js +58 -0
  178. package/dist/scroll-linked.js.map +1 -0
  179. package/dist/sequence.d.ts +10 -5
  180. package/dist/sequence.d.ts.map +1 -1
  181. package/dist/sequence.js +208 -14
  182. package/dist/sequence.js.map +1 -1
  183. package/dist/shimmer.d.ts +12 -0
  184. package/dist/shimmer.d.ts.map +1 -0
  185. package/dist/shimmer.js +161 -0
  186. package/dist/shimmer.js.map +1 -0
  187. package/dist/svg-path.d.ts +14 -0
  188. package/dist/svg-path.d.ts.map +1 -0
  189. package/dist/svg-path.js +281 -0
  190. package/dist/svg-path.js.map +1 -0
  191. package/dist/symbol-effect.d.ts +23 -0
  192. package/dist/symbol-effect.d.ts.map +1 -0
  193. package/dist/symbol-effect.js +187 -0
  194. package/dist/symbol-effect.js.map +1 -0
  195. package/dist/text-layout.d.ts +30 -0
  196. package/dist/text-layout.d.ts.map +1 -0
  197. package/dist/text-layout.js +185 -0
  198. package/dist/text-layout.js.map +1 -0
  199. package/dist/text.d.ts +17 -0
  200. package/dist/text.d.ts.map +1 -0
  201. package/dist/text.js +263 -0
  202. package/dist/text.js.map +1 -0
  203. package/dist/track.d.ts +3 -1
  204. package/dist/track.d.ts.map +1 -1
  205. package/dist/track.js +266 -13
  206. package/dist/track.js.map +1 -1
  207. package/dist/transition.d.ts +17 -1
  208. package/dist/transition.d.ts.map +1 -1
  209. package/dist/transition.js +41 -6
  210. package/dist/transition.js.map +1 -1
  211. package/dist/types.d.ts +48 -1
  212. package/dist/types.d.ts.map +1 -1
  213. package/dist/vue/index.d.ts +95 -0
  214. package/dist/vue/index.d.ts.map +1 -0
  215. package/dist/vue/index.js +163 -0
  216. package/dist/vue/index.js.map +1 -0
  217. package/dist/zoom-native.d.ts +30 -0
  218. package/dist/zoom-native.d.ts.map +1 -0
  219. package/dist/zoom-native.js +56 -0
  220. package/dist/zoom-native.js.map +1 -0
  221. package/dist/zoomable.d.ts +48 -0
  222. package/dist/zoomable.d.ts.map +1 -0
  223. package/dist/zoomable.js +249 -0
  224. package/dist/zoomable.js.map +1 -0
  225. package/package.json +29 -5
  226. package/platforms/android/include.gradle +7 -0
  227. package/platforms/android/java/org/rafaelaugusto/jolt/ColorTarget.java +102 -0
  228. package/platforms/android/java/org/rafaelaugusto/jolt/DecorationTarget.java +154 -0
  229. package/platforms/android/java/org/rafaelaugusto/jolt/ImageEffect.java +288 -0
  230. package/platforms/android/java/org/rafaelaugusto/jolt/KeyboardFollower.java +91 -0
  231. package/platforms/android/java/org/rafaelaugusto/jolt/KeyboardObserver.java +97 -0
  232. package/platforms/android/java/org/rafaelaugusto/jolt/NumberRoll.java +190 -0
  233. package/platforms/android/java/org/rafaelaugusto/jolt/PhotoZoom.java +250 -0
  234. package/platforms/android/java/org/rafaelaugusto/jolt/TextReveal.java +180 -0
  235. package/platforms/android/proguard-rules.pro +19 -0
  236. package/platforms/ios/build.xcconfig +1 -0
  237. package/platforms/ios/src/JoltImageEffect.h +25 -0
  238. package/platforms/ios/src/JoltImageEffect.mm +242 -0
  239. package/platforms/ios/src/JoltInteractiveAnimation.h +18 -0
  240. package/platforms/ios/src/JoltInteractiveAnimation.m +123 -0
  241. package/platforms/ios/src/JoltPhotoZoom.h +23 -0
  242. package/platforms/ios/src/JoltPhotoZoom.m +229 -0
  243. package/platforms/ios/src/module.modulemap +6 -0
  244. package/src/android-plugin.d.ts +155 -0
  245. package/src/animate.ts +249 -36
  246. package/src/color.ts +101 -0
  247. package/src/config.ts +84 -0
  248. package/src/decay.ts +45 -0
  249. package/src/decoration.ts +180 -0
  250. package/src/drag-input.ts +74 -0
  251. package/src/drag-physics.ts +110 -0
  252. package/src/drag.ts +395 -0
  253. package/src/driver/android-color.ts +170 -0
  254. package/src/driver/android-decoration.ts +182 -0
  255. package/src/driver/android-playback.ts +157 -0
  256. package/src/driver/android.ts +208 -20
  257. package/src/driver/index.ts +37 -2
  258. package/src/driver/ios-color.ts +441 -0
  259. package/src/driver/ios-decoration.ts +332 -0
  260. package/src/driver/ios-layout.ts +63 -0
  261. package/src/driver/ios-playback.ts +51 -0
  262. package/src/driver/ios-shadow.ts +50 -0
  263. package/src/driver/ios.ts +193 -33
  264. package/src/engine.ts +321 -27
  265. package/src/haptics.ts +148 -0
  266. package/src/image-effect-native.ts +129 -0
  267. package/src/image-effect.ts +336 -0
  268. package/src/image-owner.ts +12 -0
  269. package/src/index.ts +59 -2
  270. package/src/interaction-surface.ts +41 -0
  271. package/src/ios-plugin.d.ts +81 -0
  272. package/src/items.ts +140 -0
  273. package/src/keyboard.ts +291 -0
  274. package/src/label.ts +76 -0
  275. package/src/layout.ts +408 -0
  276. package/src/liquid-grid.ts +28 -0
  277. package/src/liquid.ts +287 -0
  278. package/src/loader.ts +202 -0
  279. package/src/motion-scope.ts +279 -0
  280. package/src/motion-states.ts +215 -0
  281. package/src/particles.ts +323 -0
  282. package/src/path.ts +124 -0
  283. package/src/playback-group.ts +143 -0
  284. package/src/playback.ts +62 -0
  285. package/src/press.ts +26 -10
  286. package/src/properties.ts +32 -6
  287. package/src/reveal.ts +374 -0
  288. package/src/roll-diff.ts +57 -0
  289. package/src/roll.ts +515 -0
  290. package/src/scroll-linked.ts +73 -0
  291. package/src/sequence.ts +204 -14
  292. package/src/shimmer.ts +180 -0
  293. package/src/svg-path.ts +355 -0
  294. package/src/symbol-effect.ts +226 -0
  295. package/src/text-layout.ts +228 -0
  296. package/src/text.ts +279 -0
  297. package/src/track.ts +347 -12
  298. package/src/transition.ts +63 -6
  299. package/src/types.ts +49 -1
  300. package/src/vue/index.ts +231 -0
  301. package/src/zoom-native.ts +124 -0
  302. package/src/zoomable.ts +330 -0
package/dist/animate.js CHANGED
@@ -1,7 +1,13 @@
1
+ import { isDecorationProperty, validateDecorationTarget, validateDecorationFrames, } from './decoration.js';
2
+ import { playbackGroup } from './playback-group.js';
3
+ import { preparePath } from './path.js';
1
4
  import { View } from '@nativescript/core';
5
+ import { isColorProperty, parseColor, validateColorTarget, } from './color.js';
6
+ import { DEFAULT_FRICTION, solveDecay } from './decay.js';
2
7
  import { arrivalOf, setArrival, stopView, ViewAnimation, } from './engine.js';
3
8
  import { getPreset } from './presets.js';
4
- import { isProperty } from './properties.js';
9
+ import { resolveHaptic } from './haptics.js';
10
+ import { isProperty, precision } from './properties.js';
5
11
  import { hasCurve, mergeTransitions, resolveTransition, springs, } from './transition.js';
6
12
  /**
7
13
  * Animates one view, or several. Takes keyframes or the name of a preset,
@@ -14,12 +20,94 @@ import { hasCurve, mergeTransitions, resolveTransition, springs, } from './trans
14
20
  * ```
15
21
  */
16
22
  export function animate(target, animation, options) {
17
- const { keyframes, base, overrides, stagger, relative } = prepare(animation, options);
23
+ return prepareAnimation(target, animation, options)();
24
+ }
25
+ /** Validate and snapshot a complete animation before changing any view ownership. */
26
+ export function prepareAnimation(target, animation, options) {
27
+ const { keyframes, base, overrides, stagger, relative, haptic, path } = prepare(animation, options);
28
+ const feedback = resolveHaptic(haptic);
18
29
  if (!isList(target)) {
19
- return new ViewAnimation(toView(target), plan(keyframes, base, overrides, 0, relative));
30
+ const view = toView(target);
31
+ for (const property of Object.keys(keyframes))
32
+ if (isColorProperty(property))
33
+ validateColorTarget(view, property);
34
+ else if (isDecorationProperty(property))
35
+ validateDecorationTarget(view, property);
36
+ const plans = plan(keyframes, base, overrides, 0, relative, path);
37
+ return () => new ViewAnimation(view, plans, feedback);
20
38
  }
21
39
  const views = target.map(toView);
22
- return group(views.map((view, index) => new ViewAnimation(view, plan(keyframes, base, overrides, staggerDelay(stagger, index, views.length), relative))));
40
+ for (const view of views)
41
+ for (const property of Object.keys(keyframes))
42
+ if (isColorProperty(property))
43
+ validateColorTarget(view, property);
44
+ else if (isDecorationProperty(property))
45
+ validateDecorationTarget(view, property);
46
+ const plans = views.map((_, index) => plan(keyframes, base, overrides, staggerDelay(stagger, index, views.length), relative, path));
47
+ return () => playbackGroup(views.map((view, index) => new ViewAnimation(view, plans[index], feedback, true)));
48
+ }
49
+ /** Starts at the current translation and slows down from a velocity in DIPs per second. */
50
+ export function decay(target, velocity, options = {}) {
51
+ const friction = options.friction ?? DEFAULT_FRICTION;
52
+ if (!Number.isFinite(friction) || friction <= 0 || friction >= 1) {
53
+ throw new RangeError('Decay friction must be between 0 and 1 exclusively.');
54
+ }
55
+ const stops = (values) => {
56
+ if (values === undefined)
57
+ return undefined;
58
+ if (!Array.isArray(values) ||
59
+ values.length === 0 ||
60
+ ![...values].every(Number.isFinite)) {
61
+ throw new RangeError('Decay snap needs a nonempty array of finite positions.');
62
+ }
63
+ return [...values];
64
+ };
65
+ const snap = options.snap;
66
+ if (snap !== undefined &&
67
+ !Array.isArray(snap) &&
68
+ (snap === null ||
69
+ typeof snap !== 'object' ||
70
+ Object.keys(snap).some((key) => key !== 'x' && key !== 'y'))) {
71
+ throw new TypeError('Decay snap must be an array or an object with x and y stops.');
72
+ }
73
+ const shared = Array.isArray(snap);
74
+ const perAxis = snap;
75
+ const snapped = shared ? stops(snap) : undefined;
76
+ const snapX = shared ? snapped : stops(perAxis?.x);
77
+ const snapY = shared ? snapped : stops(perAxis?.y);
78
+ const plans = Object.entries(velocity).flatMap(([property, value]) => {
79
+ if (property !== 'x' && property !== 'y') {
80
+ throw new Error(`Can't decay "${property}". Use x or y.`);
81
+ }
82
+ if (value === undefined)
83
+ return [];
84
+ if (!Number.isFinite(value)) {
85
+ throw new RangeError(`Invalid decay velocity for "${property}".`);
86
+ }
87
+ // Validate every axis before handing any plans to the engine.
88
+ solveDecay(0, value, friction, precision[property]);
89
+ return [
90
+ {
91
+ property,
92
+ keyframes: [null, null],
93
+ transition: {
94
+ curve: {
95
+ type: 'decay',
96
+ friction,
97
+ velocity: value,
98
+ snap: property === 'x' ? snapX : snapY,
99
+ },
100
+ delay: 0,
101
+ repeat: 0,
102
+ reverse: false,
103
+ },
104
+ },
105
+ ];
106
+ });
107
+ const views = toViews(target);
108
+ if (plans.length === 0)
109
+ return playbackGroup([]);
110
+ return playbackGroup(views.map((view) => new ViewAnimation(view, plans, undefined, true)));
23
111
  }
24
112
  /** Stops all or selected properties at their current values. `scale` stops both axes. */
25
113
  export function stop(target, properties) {
@@ -27,6 +115,29 @@ export function stop(target, properties) {
27
115
  for (const view of toViews(target))
28
116
  stopView(view, expanded);
29
117
  }
118
+ /**
119
+ * Applies values at once, stopping whatever animates those properties.
120
+ * `scale` sets both axes. A view that isn't loaded yet gets them right away.
121
+ *
122
+ * ```ts
123
+ * set(logo, { opacity: 1, scale: 1, y: 0 })
124
+ * ```
125
+ */
126
+ export function set(target, values) {
127
+ if (values === null || typeof values !== 'object' || Array.isArray(values))
128
+ throw new TypeError('set() takes an object of values.');
129
+ const keyframes = {};
130
+ for (const [key, value] of Object.entries(values)) {
131
+ if (value === undefined)
132
+ continue;
133
+ if (key !== 'scale' && !isProperty(key))
134
+ throw new Error(`Can't set "${key}".`);
135
+ if (value === null || Array.isArray(value))
136
+ throw new TypeError(`set() takes one value per property, got ${String(value)} for "${key}".`);
137
+ keyframes[key] = [value, value];
138
+ }
139
+ animate(target, keyframes, { duration: 0 });
140
+ }
30
141
  /** Plays several animations as one: finished once they all are, and stopped together. */
31
142
  export function group(animations) {
32
143
  const finished = Promise.all(animations.map((animation) => animation.finished)).then((results) => results.every(Boolean));
@@ -54,6 +165,13 @@ function isList(target) {
54
165
  return Array.isArray(target);
55
166
  }
56
167
  function prepare(animation, options) {
168
+ const prepared = resolveAnimation(animation, options);
169
+ return {
170
+ ...prepared,
171
+ path: preparePath(prepared.keyframes, prepared.base, prepared.overrides),
172
+ };
173
+ }
174
+ function resolveAnimation(animation, options) {
57
175
  const user = normalize(options);
58
176
  if (typeof animation !== 'string')
59
177
  return { keyframes: animation, ...user };
@@ -67,22 +185,31 @@ function prepare(animation, options) {
67
185
  : { ...own.overrides, ...user.overrides },
68
186
  stagger: user.stagger ?? own.stagger,
69
187
  relative: user.relative ?? own.relative,
188
+ haptic: user.haptic ?? own.haptic,
70
189
  };
71
190
  }
72
191
  function normalize(options) {
73
192
  if (options === undefined)
74
- return { base: {}, overrides: {}, stagger: undefined, relative: undefined };
193
+ return {
194
+ base: {},
195
+ overrides: {},
196
+ stagger: undefined,
197
+ relative: undefined,
198
+ haptic: undefined,
199
+ };
75
200
  if (typeof options === 'string')
76
201
  return {
77
202
  base: spring(options),
78
203
  overrides: {},
79
204
  stagger: undefined,
80
205
  relative: undefined,
206
+ haptic: undefined,
81
207
  };
82
208
  const base = {};
83
209
  const overrides = {};
84
210
  let stagger;
85
211
  let relative;
212
+ let haptic;
86
213
  for (const [key, value] of Object.entries(options)) {
87
214
  if (value === undefined)
88
215
  continue;
@@ -90,16 +217,30 @@ function normalize(options) {
90
217
  stagger = value;
91
218
  else if (key === 'relative')
92
219
  relative = value;
93
- else if (key === 'scale' || isProperty(key)) {
220
+ else if (key === 'haptic')
221
+ haptic = value;
222
+ else if (key === 'path' || key === 'scale' || isProperty(key)) {
94
223
  overrides[key] = typeof value === 'string' ? spring(value) : value;
95
224
  }
96
225
  else
97
226
  base[key] = value;
98
227
  }
99
- return { base, overrides, stagger, relative };
228
+ return { base, overrides, stagger, relative, haptic };
100
229
  }
101
- function plan(keyframes, base, overrides, offset, relative = false) {
102
- return expand(keyframes).map(([property, frames]) => {
230
+ function plan(keyframes, base, overrides, offset, relative = false, path) {
231
+ return expand(keyframes, path).map(([property, frames]) => {
232
+ if (path?.properties.includes(property)) {
233
+ if (!Number.isFinite(path.transition.delay + offset) ||
234
+ path.transition.delay + offset < 0)
235
+ throw new RangeError('Path delays, including stagger, must be finite and nonnegative.');
236
+ return {
237
+ property,
238
+ keyframes: frames,
239
+ transition: { ...path.transition, delay: path.transition.delay + offset },
240
+ relative,
241
+ path,
242
+ };
243
+ }
103
244
  const override = overrides[property] ?? (property.startsWith('scale') ? overrides.scale : undefined);
104
245
  const transition = resolveTransition(override ? mergeTransitions(base, override) : base, property, frames.length);
105
246
  transition.delay += offset;
@@ -108,15 +249,29 @@ function plan(keyframes, base, overrides, offset, relative = false) {
108
249
  }
109
250
  /** Each property the animation touches, with the value it starts from when it sets one. */
110
251
  export function startingValues(animation, options) {
111
- const { keyframes, relative } = prepare(animation, options);
252
+ const { keyframes, relative, path } = prepare(animation, options);
112
253
  if (!keyframes)
113
254
  throw new Error(`Unknown preset "${animation}".`);
114
- return new Map(expand(keyframes).map(([property, [first]]) => [property, relative ? null : first]));
255
+ return new Map(expand(keyframes, path).map(([property, [first]]) => [
256
+ property,
257
+ relative && !isColorProperty(property) ? null : first,
258
+ ]));
259
+ }
260
+ /** Each property the animation touches, with the value it leaves behind when that is known up front. */
261
+ export function endingValues(animation, options) {
262
+ const { keyframes, base, overrides, relative, path } = prepare(animation, options);
263
+ return new Map(plan(keyframes, base, overrides, 0, relative, path).map(({ property, keyframes: frames, transition, path: owned }) => {
264
+ const finite = Number.isFinite(transition.repeat);
265
+ const backwards = transition.reverse && finite && transition.repeat % 2 === 1;
266
+ const unknown = owned !== undefined || (relative && !isColorProperty(property));
267
+ const frame = !finite || backwards ? frames[0] : frames.at(-1);
268
+ return [property, unknown ? null : frame];
269
+ }));
115
270
  }
116
- function expand(keyframes) {
271
+ function expand(keyframes, path) {
117
272
  const expanded = [];
118
273
  for (const [key, value] of Object.entries(keyframes)) {
119
- if (value === undefined)
274
+ if (value === undefined || key === 'path' || key === 'orient')
120
275
  continue;
121
276
  if (key !== 'scale' && !isProperty(key))
122
277
  throw new Error(`Can't animate "${key}".`);
@@ -124,12 +279,27 @@ function expand(keyframes) {
124
279
  for (const property of properties) {
125
280
  if (key === 'scale' && keyframes[property] !== undefined)
126
281
  continue;
127
- expanded.push([property, toKeyframes(property, value)]);
282
+ expanded.push([
283
+ property,
284
+ toKeyframes(property, value),
285
+ ]);
128
286
  }
129
287
  }
288
+ for (const [property, value] of path?.starts ?? [])
289
+ expanded.push([property, [value, value]]);
130
290
  return expanded;
131
291
  }
132
292
  function toKeyframes(property, value) {
293
+ if (isColorProperty(property)) {
294
+ const frames = Array.isArray(value) ? [...value] : [null, value];
295
+ if (!frames.length)
296
+ throw new TypeError(`Empty color keyframes for "${property}".`);
297
+ if (frames.length === 1)
298
+ frames.unshift(null);
299
+ return frames.map((frame) => (frame === null ? null : parseColor(frame)));
300
+ }
301
+ if (typeof value !== 'number' && !Array.isArray(value))
302
+ throw new TypeError(`Invalid numeric keyframes for "${property}".`);
133
303
  const frames = typeof value === 'number' ? [null, value] : [...value];
134
304
  if (frames.length === 1)
135
305
  frames.unshift(null);
@@ -137,6 +307,8 @@ function toKeyframes(property, value) {
137
307
  frames.some((frame) => frame !== null && !Number.isFinite(frame))) {
138
308
  throw new Error(`Invalid keyframes for "${property}": ${JSON.stringify(value)}.`);
139
309
  }
310
+ if (isDecorationProperty(property))
311
+ validateDecorationFrames(property, frames);
140
312
  return frames;
141
313
  }
142
314
  function staggerDelay(stagger, index, count) {
@@ -1 +1 @@
1
- {"version":3,"file":"animate.js","sourceRoot":"","sources":["../src/animate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AACzC,OAAO,EACL,SAAS,EACT,UAAU,EACV,QAAQ,EACR,aAAa,GAGd,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,SAAS,EAAmB,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,UAAU,EAAiB,MAAM,iBAAiB,CAAA;AAC3D,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,iBAAiB,EACjB,OAAO,GAGR,MAAM,iBAAiB,CAAA;AAgBxB;;;;;;;;;GASG;AACH,MAAM,UAAU,OAAO,CACrB,MAAkC,EAClC,SAAiC,EACjC,OAAqC;IAErC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IAErF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACpB,OAAO,IAAI,aAAa,CACtB,MAAM,CAAC,MAAM,CAAC,EACd,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,CAAC,CAC9C,CAAA;IACH,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAChC,OAAO,KAAK,CACV,KAAK,CAAC,GAAG,CACP,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACd,IAAI,aAAa,CACf,IAAI,EACJ,IAAI,CACF,SAAS,EACT,IAAI,EACJ,SAAS,EACT,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAC1C,QAAQ,CACT,CACF,CACJ,CACF,CAAA;AACH,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,IAAI,CAClB,MAAkC,EAClC,UAAyC;IAEzC,MAAM,QAAQ,GAAG,UAAU,EAAE,OAAO,CAAW,CAAC,QAAQ,EAAE,EAAE,CAC1D,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CACzD,CAAA;IACD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;QAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AAC9D,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,KAAK,CAAC,UAAgC;IACpD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAClF,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CACpC,CAAA;IACD,MAAM,SAAS,GAAc;QAC3B,QAAQ;QACR,IAAI,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAC/D,IAAI,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;KAC1E,CAAA;IACD,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IAC7D,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,MAAc;IACnC,IAAI,MAAM,YAAY,IAAI;QAAE,OAAO,MAAM,CAAA;IACzC,MAAM,IAAI,GACP,MAA0C,EAAE,UAAU;QACtD,MAA6C,EAAE,aAAa,CAAA;IAC/D,IAAI,IAAI,YAAY,IAAI;QAAE,OAAO,IAAI,CAAA;IACrC,MAAM,IAAI,SAAS,CAAC,qCAAqC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AAC7E,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,MAAkC;IACxD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;AAC/D,CAAC;AAED,SAAS,MAAM,CAAI,MAAwB;IACzC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;AAC9B,CAAC;AAED,SAAS,OAAO,CACd,SAAiC,EACjC,OAAqC;IAErC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;IAC/B,IAAI,OAAO,SAAS,KAAK,QAAQ;QAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,CAAA;IAE3E,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAAA;IACnC,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IACxC,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,IAAI,EAAE,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;QAC3C,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YAC5B,CAAC,CAAC,IAAI,CAAC,SAAS;YAChB,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;QAC3C,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO;QACpC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ;KACxC,CAAA;AACH,CAAC;AAED,SAAS,SAAS,CAAC,OAAgD;IACjE,IAAI,OAAO,KAAK,SAAS;QACvB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAA;IAC7E,IAAI,OAAO,OAAO,KAAK,QAAQ;QAC7B,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC;YACrB,SAAS,EAAE,EAAE;YACb,OAAO,EAAE,SAAS;YAClB,QAAQ,EAAE,SAAS;SACpB,CAAA;IAEH,MAAM,IAAI,GAA4B,EAAE,CAAA;IACxC,MAAM,SAAS,GAAyB,EAAE,CAAA;IAC1C,IAAI,OAA2B,CAAA;IAC/B,IAAI,QAA6B,CAAA;IACjC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,KAAK,KAAK,SAAS;YAAE,SAAQ;QACjC,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,GAAG,KAA2B,CAAA;aACvD,IAAI,GAAG,KAAK,UAAU;YAAE,QAAQ,GAAG,KAA4B,CAAA;aAC/D,IAAI,GAAG,KAAK,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5C,SAAS,CAAC,GAAG,CAAC,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAmB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QAClF,CAAC;;YAAM,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IAC1B,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAA;AAC/C,CAAC;AAED,SAAS,IAAI,CACX,SAAoB,EACpB,IAAgB,EAChB,SAA+B,EAC/B,MAAc,EACd,QAAQ,GAAG,KAAK;IAEhB,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE;QAClD,MAAM,QAAQ,GACZ,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QACrF,MAAM,UAAU,GAAG,iBAAiB,CAClC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAClD,QAAQ,EACR,MAAM,CAAC,MAAM,CACd,CAAA;QACD,UAAU,CAAC,KAAK,IAAI,MAAM,CAAA;QAC1B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAA;IAC9D,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,cAAc,CAC5B,SAAiC,EACjC,OAAqC;IAErC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IAC3D,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,SAAS,IAAI,CAAC,CAAA;IACjE,OAAO,IAAI,GAAG,CACZ,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAM,CAAC,CAAC,CACrF,CAAA;AACH,CAAC;AAED,SAAS,MAAM,CAAC,SAAoB;IAClC,MAAM,QAAQ,GAAoC,EAAE,CAAA;IACpD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAGhD,EAAE,CAAC;QACJ,IAAI,KAAK,KAAK,SAAS;YAAE,SAAQ;QACjC,IAAI,GAAG,KAAK,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAA;QAEnF,MAAM,UAAU,GAAe,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAC7E,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;YAClC,IAAI,GAAG,KAAK,OAAO,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,SAAS;gBAAE,SAAQ;YAClE,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;QACzD,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,WAAW,CAAC,QAAkB,EAAE,KAAoB;IAC3D,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAA;IACrE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C,IACE,MAAM,CAAC,MAAM,KAAK,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EACjE,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACnF,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,YAAY,CAAC,OAA2B,EAAE,KAAa,EAAE,KAAa;IAC7E,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,CAAC,CAAA;IACnC,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,EAAE,GAC5B,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAA;IAC3D,MAAM,MAAM,GACV,IAAI,KAAK,OAAO;QACd,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,IAAI,KAAK,MAAM;YACf,CAAC,CAAC,KAAK,GAAG,CAAC;YACX,CAAC,CAAC,IAAI,KAAK,QAAQ;gBACjB,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;gBACjB,CAAC,CAAC,IAAI,CAAA;IACd,OAAO,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,CAAA;AACxC,CAAC;AAED,SAAS,MAAM,CAAC,IAAgB;IAC9B,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChC,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,IAAI,CAAC,CAAA;IAC7D,OAAO,UAAU,CAAA;AACnB,CAAC"}
1
+ {"version":3,"file":"animate.js","sourceRoot":"","sources":["../src/animate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Color, type View } from '@nativescript/core';
2
+ export type ColorProperty = 'backgroundColor' | 'borderColor' | 'color';
3
+ export type ColorValue = string | Color;
4
+ export type ColorKeyframes = ColorValue | readonly (ColorValue | null)[];
5
+ export declare const isColorProperty: (property: string) => property is ColorProperty;
6
+ export declare function parseColor(value: unknown): number;
7
+ export declare function readColor(view: View, property: ColorProperty): number;
8
+ export declare function validateColorTarget(view: View, property: ColorProperty): void;
9
+ /** Premultiplied OKLab interpolation, clipped to the sRGB output gamut. */
10
+ export declare function colorMixer(from: number, to: number): (progress: number) => number;
11
+ //# sourceMappingURL=color.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../src/color.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAA0B,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAErF,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAAG,aAAa,GAAG,OAAO,CAAA;AACvE,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,KAAK,CAAA;AACvC,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAA;AACxE,eAAO,MAAM,eAAe,aAAc,MAAM,KAAG,QAAQ,IAAI,aACuB,CAAA;AAEtF,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKjD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,CAOrE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,QAwBtE;AAsBD,2EAA2E;AAC3E,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CA6BjF"}
package/dist/color.js ADDED
@@ -0,0 +1,73 @@
1
+ import { Button, Color, Label, TextBase, isIOS } from '@nativescript/core';
2
+ export const isColorProperty = (property) => property === 'backgroundColor' || property === 'borderColor' || property === 'color';
3
+ export function parseColor(value) {
4
+ if (value instanceof Color)
5
+ return value.argb >>> 0;
6
+ if (typeof value !== 'string' || !Color.isValid(value))
7
+ throw new TypeError(`Invalid animation color: ${String(value)}.`);
8
+ return new Color(value).argb >>> 0;
9
+ }
10
+ export function readColor(view, property) {
11
+ const value = property === 'borderColor' ? view.borderTopColor : view[property];
12
+ return value instanceof Color
13
+ ? value.argb >>> 0
14
+ : property === 'backgroundColor'
15
+ ? 0
16
+ : 0xff000000;
17
+ }
18
+ export function validateColorTarget(view, property) {
19
+ if (property === 'color' &&
20
+ !(isIOS ? view instanceof Label || view instanceof Button : view instanceof TextBase))
21
+ throw new TypeError('Text color animation requires a Label or Button on iOS, or a TextBase on Android.');
22
+ if (property === 'borderColor') {
23
+ const colors = [
24
+ view.borderTopColor,
25
+ view.borderRightColor,
26
+ view.borderBottomColor,
27
+ view.borderLeftColor,
28
+ ];
29
+ if (colors.some((color) => (color?.argb ?? 0xff000000) !== (colors[0]?.argb ?? 0xff000000)))
30
+ throw new TypeError('borderColor animation requires the same starting color on every edge.');
31
+ }
32
+ }
33
+ const clamp = (value) => Math.max(0, Math.min(1, value));
34
+ const linear = (channel) => channel <= 0.04045 ? channel / 12.92 : ((channel + 0.055) / 1.055) ** 2.4;
35
+ const encoded = (channel) => channel <= 0.0031308 ? 12.92 * channel : 1.055 * channel ** (1 / 2.4) - 0.055;
36
+ function lab(value) {
37
+ const r = linear(((value >>> 16) & 255) / 255);
38
+ const g = linear(((value >>> 8) & 255) / 255);
39
+ const b = linear((value & 255) / 255);
40
+ const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b);
41
+ const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b);
42
+ const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b);
43
+ return [
44
+ 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,
45
+ 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,
46
+ 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s,
47
+ ];
48
+ }
49
+ /** Premultiplied OKLab interpolation, clipped to the sRGB output gamut. */
50
+ export function colorMixer(from, to) {
51
+ const a = lab(from), b = lab(to);
52
+ const alphaA = (from >>> 24) / 255, alphaB = (to >>> 24) / 255;
53
+ return (progress) => {
54
+ const p = clamp(progress);
55
+ if (p === 0)
56
+ return from;
57
+ if (p === 1)
58
+ return to;
59
+ const alpha = alphaA + (alphaB - alphaA) * p;
60
+ if (alpha <= 0)
61
+ return 0;
62
+ const channel = (i) => (a[i] * alphaA * (1 - p) + b[i] * alphaB * p) / alpha;
63
+ const L = channel(0), A = channel(1), B = channel(2);
64
+ const l = (L + 0.3963377774 * A + 0.2158037573 * B) ** 3;
65
+ const m = (L - 0.1055613458 * A - 0.0638541728 * B) ** 3;
66
+ const s = (L - 0.0894841775 * A - 1.291485548 * B) ** 3;
67
+ const r = Math.round(clamp(encoded(4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s)) * 255);
68
+ const g = Math.round(clamp(encoded(-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s)) * 255);
69
+ const blue = Math.round(clamp(encoded(-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s)) * 255);
70
+ return ((Math.round(alpha * 255) << 24) | (r << 16) | (g << 8) | blue) >>> 0;
71
+ };
72
+ }
73
+ //# sourceMappingURL=color.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.js","sourceRoot":"","sources":["../src/color.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export interface JoltConfig {
2
+ /** Playback speed for every engine animation. `0.2` plays everything five times slower. */
3
+ timeScale?: number;
4
+ /**
5
+ * When transforms, paths, decorations and decay jump to their end instead of animating.
6
+ * `user` follows the platform setting. Opacity and colors still animate.
7
+ */
8
+ reducedMotion?: 'user' | 'always' | 'never';
9
+ }
10
+ /**
11
+ * Global settings, applied to animations that start after the call.
12
+ *
13
+ * ```ts
14
+ * configure({ timeScale: 0.2 }) // tune a spring in slow motion
15
+ * configure({ reducedMotion: 'always' }) // check the reduced layout
16
+ * ```
17
+ */
18
+ export declare function configure(options: JoltConfig): void;
19
+ export declare function timeScale(): number;
20
+ /** Whether motion is reduced right now. `user` asks the platform each time. */
21
+ export declare function reducedMotion(): boolean;
22
+ /**
23
+ * Calls back with the new value whenever `reducedMotion()` changes, from `configure()`
24
+ * or the platform setting. Returns a cleanup function.
25
+ *
26
+ * ```ts
27
+ * const off = onReducedMotion((reduced) => (illustration.visibility = reduced ? 'visible' : 'collapse'))
28
+ * ```
29
+ */
30
+ export declare function onReducedMotion(callback: (reduced: boolean) => void): () => void;
31
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;CAC5C;AAQD;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAenD;AAED,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,IAAI,OAAO,CAGvC;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAchF"}
package/dist/config.js ADDED
@@ -0,0 +1,73 @@
1
+ import { getDriver } from './driver/index.js';
2
+ const settings = { timeScale: 1, reducedMotion: 'user' };
3
+ const listeners = new Set();
4
+ let reported = false;
5
+ let unwatch;
6
+ const preferences = ['user', 'always', 'never'];
7
+ /**
8
+ * Global settings, applied to animations that start after the call.
9
+ *
10
+ * ```ts
11
+ * configure({ timeScale: 0.2 }) // tune a spring in slow motion
12
+ * configure({ reducedMotion: 'always' }) // check the reduced layout
13
+ * ```
14
+ */
15
+ export function configure(options) {
16
+ if (options === null || typeof options !== 'object')
17
+ throw new TypeError('configure() takes an options object.');
18
+ const { timeScale, reducedMotion } = options;
19
+ if (timeScale !== undefined && (!Number.isFinite(timeScale) || timeScale <= 0))
20
+ throw new RangeError(`Time scale must be a positive finite number, got ${timeScale}.`);
21
+ if (reducedMotion !== undefined && !preferences.includes(reducedMotion))
22
+ throw new TypeError(`Reduced motion must be 'user', 'always' or 'never', got ${String(reducedMotion)}.`);
23
+ if (timeScale !== undefined)
24
+ settings.timeScale = timeScale;
25
+ if (reducedMotion !== undefined) {
26
+ settings.reducedMotion = reducedMotion;
27
+ changed();
28
+ }
29
+ }
30
+ export function timeScale() {
31
+ return settings.timeScale;
32
+ }
33
+ /** Whether motion is reduced right now. `user` asks the platform each time. */
34
+ export function reducedMotion() {
35
+ if (settings.reducedMotion === 'user')
36
+ return getDriver().reducedMotion?.() ?? false;
37
+ return settings.reducedMotion === 'always';
38
+ }
39
+ /**
40
+ * Calls back with the new value whenever `reducedMotion()` changes, from `configure()`
41
+ * or the platform setting. Returns a cleanup function.
42
+ *
43
+ * ```ts
44
+ * const off = onReducedMotion((reduced) => (illustration.visibility = reduced ? 'visible' : 'collapse'))
45
+ * ```
46
+ */
47
+ export function onReducedMotion(callback) {
48
+ if (typeof callback !== 'function')
49
+ throw new TypeError('onReducedMotion() takes a callback.');
50
+ const listener = (reduced) => callback(reduced);
51
+ if (listeners.size === 0) {
52
+ reported = reducedMotion();
53
+ unwatch = getDriver().watchReducedMotion?.(changed);
54
+ }
55
+ listeners.add(listener);
56
+ return () => {
57
+ if (!listeners.delete(listener) || listeners.size > 0)
58
+ return;
59
+ unwatch?.();
60
+ unwatch = undefined;
61
+ };
62
+ }
63
+ function changed() {
64
+ if (listeners.size === 0)
65
+ return;
66
+ const reduced = reducedMotion();
67
+ if (reduced === reported)
68
+ return;
69
+ reported = reduced;
70
+ for (const listener of [...listeners])
71
+ listener(reduced);
72
+ }
73
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAY7C,MAAM,QAAQ,GAAyB,EAAE,SAAS,EAAE,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,CAAA;AAC9E,MAAM,SAAS,GAAG,IAAI,GAAG,EAA8B,CAAA;AACvD,IAAI,QAAQ,GAAG,KAAK,CAAA;AACpB,IAAI,OAAiC,CAAA;AACrC,MAAM,WAAW,GAA2C,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;AAEvF;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,OAAmB;IAC3C,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;QACjD,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAA;IAC7D,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,OAAO,CAAA;IAC5C,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,CAAC;QAC5E,MAAM,IAAI,UAAU,CAAC,oDAAoD,SAAS,GAAG,CAAC,CAAA;IACxF,IAAI,aAAa,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC;QACrE,MAAM,IAAI,SAAS,CACjB,2DAA2D,MAAM,CAAC,aAAa,CAAC,GAAG,CACpF,CAAA;IACH,IAAI,SAAS,KAAK,SAAS;QAAE,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAA;IAC3D,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,QAAQ,CAAC,aAAa,GAAG,aAAa,CAAA;QACtC,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,QAAQ,CAAC,SAAS,CAAA;AAC3B,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,aAAa;IAC3B,IAAI,QAAQ,CAAC,aAAa,KAAK,MAAM;QAAE,OAAO,SAAS,EAAE,CAAC,aAAa,EAAE,EAAE,IAAI,KAAK,CAAA;IACpF,OAAO,QAAQ,CAAC,aAAa,KAAK,QAAQ,CAAA;AAC5C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,QAAoC;IAClE,IAAI,OAAO,QAAQ,KAAK,UAAU;QAChC,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC,CAAA;IAC5D,MAAM,QAAQ,GAAG,CAAC,OAAgB,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IACxD,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACzB,QAAQ,GAAG,aAAa,EAAE,CAAA;QAC1B,OAAO,GAAG,SAAS,EAAE,CAAC,kBAAkB,EAAE,CAAC,OAAO,CAAC,CAAA;IACrD,CAAC;IACD,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACvB,OAAO,GAAG,EAAE;QACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,IAAI,GAAG,CAAC;YAAE,OAAM;QAC7D,OAAO,EAAE,EAAE,CAAA;QACX,OAAO,GAAG,SAAS,CAAA;IACrB,CAAC,CAAA;AACH,CAAC;AAED,SAAS,OAAO;IACd,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC;QAAE,OAAM;IAChC,MAAM,OAAO,GAAG,aAAa,EAAE,CAAA;IAC/B,IAAI,OAAO,KAAK,QAAQ;QAAE,OAAM;IAChC,QAAQ,GAAG,OAAO,CAAA;IAClB,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,SAAS,CAAC;QAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;AAC1D,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface DecayMotion {
2
+ duration: number;
3
+ to: number;
4
+ position(time: number): number;
5
+ velocity(time: number): number;
6
+ }
7
+ /** Velocity retains this fraction every millisecond, independently of the display's refresh rate. */
8
+ export declare const DEFAULT_FRICTION = 0.998;
9
+ /** Exponential motion, with velocity in units per second and time in milliseconds. */
10
+ export declare function solveDecay(from: number, velocity: number, friction: number, precision: number): DecayMotion;
11
+ //# sourceMappingURL=decay.d.ts.map
@@ -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"}