@rafaelaugusto/jolt 0.1.0-beta.3 → 0.1.0-beta.5

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 (132) hide show
  1. package/README.md +78 -13
  2. package/dist/animate.d.ts +3 -2
  3. package/dist/animate.d.ts.map +1 -1
  4. package/dist/animate.js +35 -5
  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/decoration.d.ts +18 -0
  11. package/dist/decoration.d.ts.map +1 -0
  12. package/dist/decoration.js +155 -0
  13. package/dist/decoration.js.map +1 -0
  14. package/dist/driver/android-color.d.ts +20 -0
  15. package/dist/driver/android-color.d.ts.map +1 -0
  16. package/dist/driver/android-color.js +136 -0
  17. package/dist/driver/android-color.js.map +1 -0
  18. package/dist/driver/android-decoration.d.ts +22 -0
  19. package/dist/driver/android-decoration.d.ts.map +1 -0
  20. package/dist/driver/android-decoration.js +139 -0
  21. package/dist/driver/android-decoration.js.map +1 -0
  22. package/dist/driver/android-playback.d.ts +13 -0
  23. package/dist/driver/android-playback.d.ts.map +1 -0
  24. package/dist/driver/android-playback.js +141 -0
  25. package/dist/driver/android-playback.js.map +1 -0
  26. package/dist/driver/android.d.ts.map +1 -1
  27. package/dist/driver/android.js +28 -35
  28. package/dist/driver/android.js.map +1 -1
  29. package/dist/driver/index.d.ts +8 -1
  30. package/dist/driver/index.d.ts.map +1 -1
  31. package/dist/driver/index.js.map +1 -1
  32. package/dist/driver/ios-color.d.ts +16 -0
  33. package/dist/driver/ios-color.d.ts.map +1 -0
  34. package/dist/driver/ios-color.js +392 -0
  35. package/dist/driver/ios-color.js.map +1 -0
  36. package/dist/driver/ios-decoration.d.ts +17 -0
  37. package/dist/driver/ios-decoration.d.ts.map +1 -0
  38. package/dist/driver/ios-decoration.js +271 -0
  39. package/dist/driver/ios-decoration.js.map +1 -0
  40. package/dist/driver/ios-playback.d.ts +10 -0
  41. package/dist/driver/ios-playback.d.ts.map +1 -0
  42. package/dist/driver/ios-playback.js +33 -0
  43. package/dist/driver/ios-playback.js.map +1 -0
  44. package/dist/driver/ios-shadow.d.ts +6 -0
  45. package/dist/driver/ios-shadow.d.ts.map +1 -0
  46. package/dist/driver/ios-shadow.js +52 -0
  47. package/dist/driver/ios-shadow.js.map +1 -0
  48. package/dist/driver/ios.d.ts.map +1 -1
  49. package/dist/driver/ios.js +78 -35
  50. package/dist/driver/ios.js.map +1 -1
  51. package/dist/engine.d.ts +48 -2
  52. package/dist/engine.d.ts.map +1 -1
  53. package/dist/engine.js +217 -21
  54. package/dist/engine.js.map +1 -1
  55. package/dist/haptics.d.ts +4 -1
  56. package/dist/haptics.d.ts.map +1 -1
  57. package/dist/haptics.js +27 -3
  58. package/dist/haptics.js.map +1 -1
  59. package/dist/index.d.ts +4 -0
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +1 -0
  62. package/dist/index.js.map +1 -1
  63. package/dist/liquid-grid.d.ts +3 -0
  64. package/dist/liquid-grid.d.ts.map +1 -0
  65. package/dist/liquid-grid.js +24 -0
  66. package/dist/liquid-grid.js.map +1 -0
  67. package/dist/liquid.d.ts +18 -0
  68. package/dist/liquid.d.ts.map +1 -0
  69. package/dist/liquid.js +229 -0
  70. package/dist/liquid.js.map +1 -0
  71. package/dist/playback-group.d.ts +6 -0
  72. package/dist/playback-group.d.ts.map +1 -0
  73. package/dist/playback-group.js +113 -0
  74. package/dist/playback-group.js.map +1 -0
  75. package/dist/playback.d.ts +25 -0
  76. package/dist/playback.d.ts.map +1 -0
  77. package/dist/playback.js +35 -0
  78. package/dist/playback.js.map +1 -0
  79. package/dist/press.d.ts.map +1 -1
  80. package/dist/press.js +6 -1
  81. package/dist/press.js.map +1 -1
  82. package/dist/properties.d.ts +5 -2
  83. package/dist/properties.d.ts.map +1 -1
  84. package/dist/properties.js +25 -1
  85. package/dist/properties.js.map +1 -1
  86. package/dist/sequence.d.ts.map +1 -1
  87. package/dist/sequence.js +6 -0
  88. package/dist/sequence.js.map +1 -1
  89. package/dist/text.d.ts.map +1 -1
  90. package/dist/text.js +3 -0
  91. package/dist/text.js.map +1 -1
  92. package/dist/track.d.ts +1 -1
  93. package/dist/track.d.ts.map +1 -1
  94. package/dist/track.js +48 -3
  95. package/dist/track.js.map +1 -1
  96. package/dist/transition.d.ts.map +1 -1
  97. package/dist/transition.js +11 -2
  98. package/dist/transition.js.map +1 -1
  99. package/dist/types.d.ts +20 -0
  100. package/dist/types.d.ts.map +1 -1
  101. package/package.json +11 -2
  102. package/platforms/android/include.gradle +7 -0
  103. package/platforms/android/java/org/rafaelaugusto/jolt/ColorTarget.java +102 -0
  104. package/platforms/android/java/org/rafaelaugusto/jolt/DecorationTarget.java +154 -0
  105. package/platforms/android/proguard-rules.pro +7 -0
  106. package/src/animate.ts +48 -9
  107. package/src/color.ts +101 -0
  108. package/src/decoration.ts +180 -0
  109. package/src/driver/android-color.ts +170 -0
  110. package/src/driver/android-decoration.ts +182 -0
  111. package/src/driver/android-playback.ts +157 -0
  112. package/src/driver/android.ts +50 -46
  113. package/src/driver/index.ts +19 -1
  114. package/src/driver/ios-color.ts +441 -0
  115. package/src/driver/ios-decoration.ts +332 -0
  116. package/src/driver/ios-playback.ts +37 -0
  117. package/src/driver/ios-shadow.ts +50 -0
  118. package/src/driver/ios.ts +91 -42
  119. package/src/engine.ts +227 -23
  120. package/src/haptics.ts +25 -2
  121. package/src/index.ts +4 -0
  122. package/src/liquid-grid.ts +28 -0
  123. package/src/liquid.ts +282 -0
  124. package/src/playback-group.ts +110 -0
  125. package/src/playback.ts +62 -0
  126. package/src/press.ts +8 -2
  127. package/src/properties.ts +31 -5
  128. package/src/sequence.ts +5 -0
  129. package/src/text.ts +2 -0
  130. package/src/track.ts +72 -3
  131. package/src/transition.ts +13 -2
  132. package/src/types.ts +20 -0
package/README.md CHANGED
@@ -35,6 +35,8 @@ Jolt computes the motion once, in JavaScript, when the animation starts, and han
35
35
 
36
36
  - [25 presets](#presets) to enter, exit and draw attention: `fadeInUp`, `popIn`, `shake`, `heartbeat`...
37
37
  - [Springs](#springs) described by feel (`bouncy`), by `bounce` and `duration`, or by stiffness, damping and mass.
38
+ - [Corners, borders and shadows](#corners-borders-and-shadows) with native playback and selective stopping.
39
+ - [Colors](#colors) for backgrounds, borders and text, interpolated in OKLab on iOS and Android.
38
40
  - [Decay](#decay) from a release velocity, with optional snap points.
39
41
  - [Keyframes and tweens](#tweens) with an easing per segment and exact keyframe times.
40
42
  - [Stagger](#several-views) across several views, from the first, the last or the center.
@@ -43,10 +45,12 @@ Jolt computes the motion once, in JavaScript, when the animation starts, and han
43
45
  - [Text entrances](#text) by letter or word on iOS, preserving the Label’s layout and accessibility.
44
46
  - [SF Symbol effects](#sf-symbols) and animated icon replacement on iOS 17+.
45
47
  - [Shimmer](#shimmer) for loading placeholders on iOS.
48
+ - [Liquid images](#liquid-images) with native texture deformation on iOS.
46
49
  - [Loaders](#loaders) with dots, bars and ring styles on iOS.
47
50
  - [Circular reveal](#circular-reveal) to show or hide content from a point on iOS.
48
51
  - [Haptics](#haptics) at arrival or at marked points in an animation on iOS.
49
52
  - [Particles and confetti](#particles-and-confetti) on iOS.
53
+ - [Playback controls](#pause-play-and-scrub) to pause, continue and scrub a finite timeline.
50
54
  - [Interruptions](#interrupting-and-stopping) that pick up the value and velocity on screen, with no jump.
51
55
  - [Native playback](#how-it-works): Core Animation on iOS, `ObjectAnimator` on Android, nothing in JavaScript while it plays.
52
56
 
@@ -68,14 +72,15 @@ On iOS 15+, Jolt requests up to 120 Hz on ProMotion displays. Set `CADisableMini
68
72
  animate(card, { opacity: 0.5, y: -20 })
69
73
  ```
70
74
 
71
- | Property | Unit |
72
- | -------------------- | ---------------------------------------- |
73
- | `opacity` | |
74
- | `x`, `y` | DIPs, same as `translateX`, `translateY` |
75
- | `scale` | sets `scaleX` and `scaleY` together |
76
- | `scaleX`, `scaleY` | |
77
- | `rotate` | degrees |
78
- | `rotateX`, `rotateY` | degrees, with perspective |
75
+ | Property | Unit |
76
+ | ----------------------------------------- | ---------------------------------------- |
77
+ | `opacity` | |
78
+ | `x`, `y` | DIPs, same as `translateX`, `translateY` |
79
+ | `scale` | sets `scaleX` and `scaleY` together |
80
+ | `scaleX`, `scaleY` | |
81
+ | `rotate` | degrees |
82
+ | `rotateX`, `rotateY` | degrees, with perspective |
83
+ | `backgroundColor`, `borderColor`, `color` | NativeScript color string or `Color` |
79
84
 
80
85
  3D rotations and flip presets use the view's `perspective` on both platforms (NativeScript defaults to 1000 DIPs). Set `card.perspective = 600` for stronger depth. Android applies the display density when configuring its camera distance; it keeps the perspective when a rotation ends or stops at an angle.
81
86
 
@@ -110,9 +115,37 @@ const open = () => animate(card.value, 'popIn')
110
115
 
111
116
  A view that isn't loaded yet takes its first absolute keyframe right away and plays once it's on screen. Calling `animate(title, 'fadeInUp')` in `onMounted` doesn't flash the title before it fades in. Relative animations leave the view's values alone until it loads.
112
117
 
118
+ ## Corners, borders and shadows
119
+
120
+ ```ts
121
+ animate(card, { borderRadius: 40, borderWidth: 6 }, { duration: 800 })
122
+ ```
123
+
124
+ Uniform circular borders work on iOS and Android. On iOS, configure one outer `boxShadow` and animate `shadowOpacity`, `shadowRadius` (half Core's CSS blur radius), `shadowOffsetX` and `shadowOffsetY`. On Android, animate `elevation` and `translationZ` for native shadows. Dimensions use DIPs; interruption, springs, repeats and selective stop work as usual. Border width animates the stroke while content uses the final layout. Clip paths, nonuniform geometry and Android radius changes with CSS shadows are rejected. Rebuild Android after upgrading. See the [guide and platform limits](https://jolt.rafaelaugusto.dev/guide/decorations).
125
+
126
+ ## Colors
127
+
128
+ ```ts
129
+ animate(
130
+ card,
131
+ {
132
+ backgroundColor: '#263b27',
133
+ borderColor: ['#b6ee64', '#e5a1ff'],
134
+ color: '#f4caff',
135
+ },
136
+ { duration: 800 },
137
+ )
138
+ ```
139
+
140
+ Color strings and NativeScript `Color` objects work as targets or keyframes; `null` starts from the visible color. Colors interpolate in premultiplied OKLab and stay absolute with `relative: true`. Interruptions, repeats and `stop(card, ['backgroundColor'])` use the same API as transforms. Colors default to a 300 ms tween.
141
+
142
+ `borderColor` requires the same starting color on every edge; widths and corner radii may differ. Text color supports Label and Button on iOS, and TextBase on Android. Explicit formatted-span colors stay intact. On iOS, text uses a native alpha-mask layer preserving UILabel's layout; emoji, attachments, text shadows and masks above four million pixels keep the final model color and resolve `false`. Edits, restyling and unloading cancel text playback and restore the current text. Gradients and images themselves are not interpolated. iOS background-color playback on an image background is skipped to preserve Core’s rasterized image; the final model color is applied. See the [color guide](https://jolt.rafaelaugusto.dev/guide/colors).
143
+
144
+ Android includes a Java animation target; rebuild the native app after installing or upgrading Jolt.
145
+
113
146
  ## Transitions
114
147
 
115
- The third argument says how to get there. Without one, transforms move with a spring and `opacity` eases over 300ms. Keyframes tween.
148
+ The third argument says how to get there. Without one, transforms move with a spring and opacity and colors ease over 300ms. Keyframes tween.
116
149
 
117
150
  ### Springs
118
151
 
@@ -290,6 +323,19 @@ stopShimmer() // when the content is ready
290
323
 
291
324
  A native gradient mask sweeps across the placeholder and its children. It follows layout changes, preserves existing masks and releases native resources while the view is unloaded, resuming on load. Reduce Motion keeps the placeholder static. iOS only for now; Android calls return a no-op cleanup function. See the [shimmer guide](https://jolt.rafaelaugusto.dev/guide/shimmer).
292
325
 
326
+ ## Liquid images
327
+
328
+ ```ts
329
+ import { liquid } from '@rafaelaugusto/jolt'
330
+
331
+ const flow = liquid(orb, { intensity: 0.9, duration: 7200 })
332
+ flow.pause()
333
+ flow.resume()
334
+ flow.stop()
335
+ ```
336
+
337
+ Parts of the image move relative to each other through a native repeating texture warp. Transparency and stretch are preserved; pause freezes the current shape and stop restores the original image. Reduce Motion keeps the image static. iOS only; Android returns an inert handle. See the [liquid image guide](https://jolt.rafaelaugusto.dev/guide/liquid).
338
+
293
339
  ## Loaders
294
340
 
295
341
  ```ts
@@ -344,6 +390,17 @@ stopSnow() // remove the emitter and its particles
344
390
 
345
391
  Confetti bursts into the target's window and cleans itself up. `particles()` adds an emitter to the view for snow, sparks, bubbles or other effects. Both use Core Animation without JavaScript per frame, respect Reduce Motion and stop on unload. iOS only for now. See the [particles guide](https://jolt.rafaelaugusto.dev/guide/particles).
346
392
 
393
+ ## Pause, play and scrub
394
+
395
+ ```ts
396
+ const animation = animate(card, 'flipInY')
397
+ animation.pause()
398
+ animation.progress = 0.4
399
+ animation.play()
400
+ ```
401
+
402
+ `animate()` and `decay()` return a `PlaybackAnimation` with `pause()`, `play()`, `progress`, `paused` and `duration`. Progress runs from 0 to 1 across delays, repeats and stagger. It preserves the paused/playing state; a paused endpoint can scrub backward. Other animations on the same view keep moving. Infinite loops support pause/play but reject progress. Completed and stopped handles remain terminal. Sequence and effect handles keep their existing controls. See [playback](https://jolt.rafaelaugusto.dev/guide/playback) for lifecycle, haptics and gesture examples.
403
+
347
404
  ## Interrupting and stopping
348
405
 
349
406
  Starting an animation on a property that's already animating takes it over: the new one starts from the value on screen, with the same velocity, so a card can change its mind halfway without a jump. Other properties of the previous animation keep going.
@@ -364,28 +421,34 @@ If part of an animation is stopped, its `finished` promise resolves with `false`
364
421
 
365
422
  ## How it works
366
423
 
367
- When an animation starts, Jolt resolves where each property starts from (the value on screen, or the keyframes you gave), and computes the whole curve: easing, keyframes, spring physics and exponential decay. It samples the curve 60 times per second of motion, and keeps keyframe times exact. Linear segments aren't sampled at all. Very long free decays cap sampling at 6,001 keyframes.
424
+ When an animation starts, Jolt resolves where each property starts from (the value on screen, or the keyframes you gave), and computes the whole curve: easing, keyframes, spring physics and exponential decay. It samples the curve 60 times per second of motion, and keeps keyframe times exact. Linear numeric segments use only their endpoints. Long tween segments and free decays cap sampling at 6,001 keyframes. Color tracks add intermediate OKLab samples even with linear timing.
368
425
 
369
426
  The samples go to the platform in one go:
370
427
 
371
428
  - **iOS**: a `CAKeyframeAnimation` per property on the view's layer (`opacity`, `transform.translation.x`, `transform.scale.y`, `transform.rotation.z`...). Core Animation composes them, so `x` and `scale` can belong to different animations, and plays them in the render server.
372
429
  - **Android**: an `ObjectAnimator` per property with `Keyframe`s and a linear interpolator, on the view's `alpha`, `translationX`, `scaleY`, `rotation`...
373
430
 
431
+ Solid [colors](#colors) use CGColor keyframes on iOS and int keyframes through a native Java target on Android. iOS text uses a UILabel alpha mask so glyph positions stay fixed while the color layer animates.
432
+
374
433
  Before playing, the final values are set on the NativeScript view, like `view.animate()` does, so `view.translateX` already holds the target while the animation runs. Stopping writes back the values on screen.
375
434
 
435
+ Native playback does not isolate Android View animations from a blocked UI thread. Main-runtime JavaScript shares that thread, and `withLayer()` only caches drawing. Move suitable CPU work to a Worker and keep view updates small. See the [busy JavaScript guide](https://jolt.rafaelaugusto.dev/guide/android-performance) and [Android diagnostic](./benchmarks/android-busy.md).
436
+
376
437
  On Android, opacity animations temporarily cache hardware-accelerated containers with children in a hardware layer. Jolt waits for the fade to start and restores the layer on completion, stop, replacement or unload. Existing app-configured layers are preserved; empty, unmeasured and larger-than-screen containers are skipped. See the [fade-layer benchmark](./benchmarks/android-fade.md) for measurement and memory tradeoffs.
377
438
 
378
439
  Each running property remembers its curve and start time. On Android, interruptions read the displayed value and the animator's current play time, so inherited velocity follows the system's animator duration scale. Early spring arrivals use a native timing marker with completion callbacks only; other sequences advance on native completion. Delays, repeats and disabled animations follow the same platform clock, without JavaScript running per frame.
379
440
 
380
441
  ## Not there yet
381
442
 
382
- - `animate()` covers transforms and opacity. Colors ([#12](https://github.com/rafaelaugustos/jolt/issues/12)), borders and shadows ([#13](https://github.com/rafaelaugustos/jolt/issues/13)), size and layout changes ([#21](https://github.com/rafaelaugustos/jolt/issues/21)) aren't animated yet.
443
+ - `animate()` supports transforms, opacity, colors, uniform corners and borders, and platform shadows. Size and layout changes ([#21](https://github.com/rafaelaugustos/jolt/issues/21)) aren't animated yet.
383
444
  - Gesture tracking and drag constraints are next ([#23](https://github.com/rafaelaugustos/jolt/issues/23)); `decay()` supplies the motion after release.
384
445
  - No layout or shared element transitions ([#21](https://github.com/rafaelaugustos/jolt/issues/21), [#24](https://github.com/rafaelaugustos/jolt/issues/24)).
385
446
 
386
447
  ## API
387
448
 
388
- **Animating**: `animate(target, keyframes | preset, transition?)`, `decay(target, velocity, options?)`, `stop(target, properties?)`, `sequence(steps)`, `press(target, pressed?, transition?)`, `symbolEffect(image, effect, options?)`, `shimmer(target, options?)`, `loader(target, options?)`, `reveal(target, options?)`, `conceal(target, options?)`, `confetti(target, options?)`, `particles(target, options?)`.
449
+ **Animating**: `animate(target, keyframes | preset, transition?)`, `decay(target, velocity, options?)`, `stop(target, properties?)`, `sequence(steps)`, `press(target, pressed?, transition?)`, `symbolEffect(image, effect, options?)`, `shimmer(target, options?)`, `liquid(image, options?)`, `loader(target, options?)`, `reveal(target, options?)`, `conceal(target, options?)`, `confetti(target, options?)`, `particles(target, options?)`.
450
+
451
+ `liquid()` returns a `LiquidEffect` with `pause()`, `resume()` and `stop()`.
389
452
 
390
453
  **Animations** from `animate()`, `decay()`, `sequence()`, `symbolEffect()`, `reveal()` and `conceal()`: `await`, `finished`, `stop()`. `press()`, `shimmer()`, `loader()`, `confetti()` and `particles()` return cleanup functions.
391
454
 
@@ -393,7 +456,9 @@ Each running property remembers its curve and start time. On Android, interrupti
393
456
 
394
457
  ## Demo
395
458
 
396
- [`demo/`](./demo) is a NativeScript-Vue app with every preset, the three springs on a ball you can interrupt, decay and snapping, stagger, press effects, SF Symbols, shimmer, loaders, circular reveals, haptics and particles on iOS, loops and a sequence on launch.
459
+ [`demo/`](./demo) opens an interactive assistant on iOS: a fan of document tools, a voice screen with letter-by-letter text, and a staged conversation with document previews. Open **Help → Watch demo** to replay the flow. The orb is an animated illustration; speech, documents and audio are sample data.
460
+
461
+ Android opens the animation playground. The same playground is available on iOS with `--playground`, including presets, interruptible springs, decay, text, press effects and the native iOS helpers. See the [demo guide](./docs/guide/demo.md) for preview arguments and implementation notes.
397
462
 
398
463
  With the [NativeScript CLI](https://docs.nativescript.org/setup/) installed:
399
464
 
package/dist/animate.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { PlaybackAnimation } from './playback.js';
1
2
  import { View } from '@nativescript/core';
2
3
  import { type Animation } from './engine.js';
3
4
  import { type PresetName } from './presets.js';
@@ -14,9 +15,9 @@ import type { AnimateOptions, DecayOptions, DecayVelocity, Keyframes, Target } f
14
15
  * animate(rows, 'fadeInUp', { stagger: 40 })
15
16
  * ```
16
17
  */
17
- export declare function animate(target: Target | readonly Target[], animation: Keyframes | PresetName, options?: AnimateOptions | SpringName): Animation;
18
+ export declare function animate(target: Target | readonly Target[], animation: Keyframes | PresetName, options?: AnimateOptions | SpringName): PlaybackAnimation;
18
19
  /** Starts at the current translation and slows down from a velocity in DIPs per second. */
19
- export declare function decay(target: Target | readonly Target[], velocity: DecayVelocity, options?: DecayOptions): Animation;
20
+ export declare function decay(target: Target | readonly Target[], velocity: DecayVelocity, options?: DecayOptions): PlaybackAnimation;
20
21
  /** Stops all or selected properties at their current values. `scale` stops both axes. */
21
22
  export declare function stop(target: Target | readonly Target[], properties?: readonly (keyof Keyframes)[]): void;
22
23
  /** Plays several animations as one: finished once they all are, and stopped together. */
@@ -1 +1 @@
1
- {"version":3,"file":"animate.d.ts","sourceRoot":"","sources":["../src/animate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAEzC,OAAO,EAKL,KAAK,SAAS,EAEf,MAAM,aAAa,CAAA;AACpB,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzD,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AACtE,OAAO,EAKL,KAAK,UAAU,EAEhB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,aAAa,EACb,SAAS,EAGT,MAAM,EACP,MAAM,YAAY,CAAA;AAUnB;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CACrB,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EAClC,SAAS,EAAE,SAAS,GAAG,UAAU,EACjC,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,GACpC,SAAS,CAgCX;AAED,2FAA2F;AAC3F,wBAAgB,KAAK,CACnB,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EAClC,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE,YAAiB,GACzB,SAAS,CAgEX;AAED,yFAAyF;AACzF,wBAAgB,IAAI,CAClB,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EAClC,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,SAAS,CAAC,EAAE,QAM1C;AAED,yFAAyF;AACzF,wBAAgB,KAAK,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,CAWjE;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAO3C;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI,EAAE,CAElE;AAkFD,2FAA2F;AAC3F,wBAAgB,cAAc,CAC5B,SAAS,EAAE,SAAS,GAAG,UAAU,EACjC,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,gCAOtC"}
1
+ {"version":3,"file":"animate.d.ts","sourceRoot":"","sources":["../src/animate.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAQzC,OAAO,EAKL,KAAK,SAAS,EAEf,MAAM,aAAa,CAAA;AACpB,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzD,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AACtE,OAAO,EAKL,KAAK,UAAU,EAEhB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,aAAa,EACb,SAAS,EAGT,MAAM,EACP,MAAM,YAAY,CAAA;AAUnB;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CACrB,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EAClC,SAAS,EAAE,SAAS,GAAG,UAAU,EACjC,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,GACpC,iBAAiB,CAyCnB;AAED,2FAA2F;AAC3F,wBAAgB,KAAK,CACnB,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EAClC,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE,YAAiB,GACzB,iBAAiB,CAkEnB;AAED,yFAAyF;AACzF,wBAAgB,IAAI,CAClB,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EAClC,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,SAAS,CAAC,EAAE,QAM1C;AAED,yFAAyF;AACzF,wBAAgB,KAAK,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,CAWjE;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAO3C;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI,EAAE,CAElE;AAkFD,2FAA2F;AAC3F,wBAAgB,cAAc,CAC5B,SAAS,EAAE,SAAS,GAAG,UAAU,EACjC,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,gCAUtC"}
package/dist/animate.js CHANGED
@@ -1,4 +1,7 @@
1
+ import { isDecorationProperty, validateDecorationTarget, validateDecorationFrames, } from './decoration.js';
2
+ import { playbackGroup } from './playback-group.js';
1
3
  import { View } from '@nativescript/core';
4
+ import { isColorProperty, parseColor, validateColorTarget, } from './color.js';
2
5
  import { DEFAULT_FRICTION, solveDecay } from './decay.js';
3
6
  import { arrivalOf, setArrival, stopView, ViewAnimation, } from './engine.js';
4
7
  import { getPreset } from './presets.js';
@@ -19,10 +22,22 @@ export function animate(target, animation, options) {
19
22
  const { keyframes, base, overrides, stagger, relative, haptic } = prepare(animation, options);
20
23
  const feedback = resolveHaptic(haptic);
21
24
  if (!isList(target)) {
22
- return new ViewAnimation(toView(target), plan(keyframes, base, overrides, 0, relative), feedback);
25
+ const view = toView(target);
26
+ for (const property of Object.keys(keyframes))
27
+ if (isColorProperty(property))
28
+ validateColorTarget(view, property);
29
+ else if (isDecorationProperty(property))
30
+ validateDecorationTarget(view, property);
31
+ return new ViewAnimation(view, plan(keyframes, base, overrides, 0, relative), feedback);
23
32
  }
24
33
  const views = target.map(toView);
25
- return group(views.map((view, index) => new ViewAnimation(view, plan(keyframes, base, overrides, staggerDelay(stagger, index, views.length), relative), feedback)));
34
+ for (const view of views)
35
+ for (const property of Object.keys(keyframes))
36
+ if (isColorProperty(property))
37
+ validateColorTarget(view, property);
38
+ else if (isDecorationProperty(property))
39
+ validateDecorationTarget(view, property);
40
+ return playbackGroup(views.map((view, index) => new ViewAnimation(view, plan(keyframes, base, overrides, staggerDelay(stagger, index, views.length), relative), feedback, true)));
26
41
  }
27
42
  /** Starts at the current translation and slows down from a velocity in DIPs per second. */
28
43
  export function decay(target, velocity, options = {}) {
@@ -84,8 +99,8 @@ export function decay(target, velocity, options = {}) {
84
99
  });
85
100
  const views = toViews(target);
86
101
  if (plans.length === 0)
87
- return group([]);
88
- return group(views.map((view) => new ViewAnimation(view, plans)));
102
+ return playbackGroup([]);
103
+ return playbackGroup(views.map((view) => new ViewAnimation(view, plans, undefined, true)));
89
104
  }
90
105
  /** Stops all or selected properties at their current values. `scale` stops both axes. */
91
106
  export function stop(target, properties) {
@@ -188,7 +203,10 @@ export function startingValues(animation, options) {
188
203
  const { keyframes, relative } = prepare(animation, options);
189
204
  if (!keyframes)
190
205
  throw new Error(`Unknown preset "${animation}".`);
191
- return new Map(expand(keyframes).map(([property, [first]]) => [property, relative ? null : first]));
206
+ return new Map(expand(keyframes).map(([property, [first]]) => [
207
+ property,
208
+ relative && !isColorProperty(property) ? null : first,
209
+ ]));
192
210
  }
193
211
  function expand(keyframes) {
194
212
  const expanded = [];
@@ -207,6 +225,16 @@ function expand(keyframes) {
207
225
  return expanded;
208
226
  }
209
227
  function toKeyframes(property, value) {
228
+ if (isColorProperty(property)) {
229
+ const frames = Array.isArray(value) ? [...value] : [null, value];
230
+ if (!frames.length)
231
+ throw new TypeError(`Empty color keyframes for "${property}".`);
232
+ if (frames.length === 1)
233
+ frames.unshift(null);
234
+ return frames.map((frame) => (frame === null ? null : parseColor(frame)));
235
+ }
236
+ if (typeof value !== 'number' && !Array.isArray(value))
237
+ throw new TypeError(`Invalid numeric keyframes for "${property}".`);
210
238
  const frames = typeof value === 'number' ? [null, value] : [...value];
211
239
  if (frames.length === 1)
212
240
  frames.unshift(null);
@@ -214,6 +242,8 @@ function toKeyframes(property, value) {
214
242
  frames.some((frame) => frame !== null && !Number.isFinite(frame))) {
215
243
  throw new Error(`Invalid keyframes for "${property}": ${JSON.stringify(value)}.`);
216
244
  }
245
+ if (isDecorationProperty(property))
246
+ validateDecorationFrames(property, frames);
217
247
  return frames;
218
248
  }
219
249
  function staggerDelay(stagger, index, count) {
@@ -1 +1 @@
1
- {"version":3,"file":"animate.js","sourceRoot":"","sources":["../src/animate.ts"],"names":[],"mappings":"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"}
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,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