@rafaelaugusto/jolt 0.1.0-beta.4 → 0.1.0-beta.6

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 (201) hide show
  1. package/README.md +134 -4
  2. package/dist/animate.d.ts +7 -4
  3. package/dist/animate.d.ts.map +1 -1
  4. package/dist/animate.js +58 -13
  5. package/dist/animate.js.map +1 -1
  6. package/dist/config.d.ts +22 -0
  7. package/dist/config.d.ts.map +1 -0
  8. package/dist/config.js +34 -0
  9. package/dist/config.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 +3 -0
  15. package/dist/driver/android-color.d.ts.map +1 -1
  16. package/dist/driver/android-color.js +20 -18
  17. package/dist/driver/android-color.js.map +1 -1
  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 +30 -36
  28. package/dist/driver/android.js.map +1 -1
  29. package/dist/driver/index.d.ts +9 -0
  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 +2 -0
  33. package/dist/driver/ios-color.d.ts.map +1 -1
  34. package/dist/driver/ios-color.js +19 -8
  35. package/dist/driver/ios-color.js.map +1 -1
  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 +47 -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 +76 -40
  50. package/dist/driver/ios.js.map +1 -1
  51. package/dist/engine.d.ts +64 -3
  52. package/dist/engine.d.ts.map +1 -1
  53. package/dist/engine.js +243 -19
  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 +12 -1
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +5 -0
  62. package/dist/index.js.map +1 -1
  63. package/dist/items.d.ts +20 -0
  64. package/dist/items.d.ts.map +1 -0
  65. package/dist/items.js +109 -0
  66. package/dist/items.js.map +1 -0
  67. package/dist/keyboard.d.ts +17 -0
  68. package/dist/keyboard.d.ts.map +1 -0
  69. package/dist/keyboard.js +116 -0
  70. package/dist/keyboard.js.map +1 -0
  71. package/dist/label.d.ts +7 -0
  72. package/dist/label.d.ts.map +1 -0
  73. package/dist/label.js +60 -0
  74. package/dist/label.js.map +1 -0
  75. package/dist/liquid.d.ts.map +1 -1
  76. package/dist/liquid.js +2 -1
  77. package/dist/liquid.js.map +1 -1
  78. package/dist/loader.d.ts.map +1 -1
  79. package/dist/loader.js +2 -1
  80. package/dist/loader.js.map +1 -1
  81. package/dist/particles.d.ts.map +1 -1
  82. package/dist/particles.js +4 -3
  83. package/dist/particles.js.map +1 -1
  84. package/dist/path.d.ts +12 -0
  85. package/dist/path.d.ts.map +1 -0
  86. package/dist/path.js +90 -0
  87. package/dist/path.js.map +1 -0
  88. package/dist/playback-group.d.ts +6 -0
  89. package/dist/playback-group.d.ts.map +1 -0
  90. package/dist/playback-group.js +141 -0
  91. package/dist/playback-group.js.map +1 -0
  92. package/dist/playback.d.ts +25 -0
  93. package/dist/playback.d.ts.map +1 -0
  94. package/dist/playback.js +35 -0
  95. package/dist/playback.js.map +1 -0
  96. package/dist/press.d.ts.map +1 -1
  97. package/dist/press.js +3 -3
  98. package/dist/press.js.map +1 -1
  99. package/dist/properties.d.ts +2 -1
  100. package/dist/properties.d.ts.map +1 -1
  101. package/dist/properties.js +14 -1
  102. package/dist/properties.js.map +1 -1
  103. package/dist/reveal.d.ts.map +1 -1
  104. package/dist/reveal.js +3 -2
  105. package/dist/reveal.js.map +1 -1
  106. package/dist/roll-diff.d.ts +22 -0
  107. package/dist/roll-diff.d.ts.map +1 -0
  108. package/dist/roll-diff.js +36 -0
  109. package/dist/roll-diff.js.map +1 -0
  110. package/dist/roll.d.ts +29 -0
  111. package/dist/roll.d.ts.map +1 -0
  112. package/dist/roll.js +442 -0
  113. package/dist/roll.js.map +1 -0
  114. package/dist/scroll-linked.d.ts +10 -0
  115. package/dist/scroll-linked.d.ts.map +1 -0
  116. package/dist/scroll-linked.js +58 -0
  117. package/dist/scroll-linked.js.map +1 -0
  118. package/dist/sequence.d.ts +10 -5
  119. package/dist/sequence.d.ts.map +1 -1
  120. package/dist/sequence.js +208 -14
  121. package/dist/sequence.js.map +1 -1
  122. package/dist/shimmer.d.ts.map +1 -1
  123. package/dist/shimmer.js +2 -1
  124. package/dist/shimmer.js.map +1 -1
  125. package/dist/svg-path.d.ts +14 -0
  126. package/dist/svg-path.d.ts.map +1 -0
  127. package/dist/svg-path.js +281 -0
  128. package/dist/svg-path.js.map +1 -0
  129. package/dist/symbol-effect.d.ts.map +1 -1
  130. package/dist/symbol-effect.js +4 -3
  131. package/dist/symbol-effect.js.map +1 -1
  132. package/dist/text-layout.d.ts +8 -0
  133. package/dist/text-layout.d.ts.map +1 -1
  134. package/dist/text-layout.js +8 -2
  135. package/dist/text-layout.js.map +1 -1
  136. package/dist/text.d.ts +1 -1
  137. package/dist/text.d.ts.map +1 -1
  138. package/dist/text.js +60 -64
  139. package/dist/text.js.map +1 -1
  140. package/dist/track.d.ts +2 -0
  141. package/dist/track.d.ts.map +1 -1
  142. package/dist/track.js +72 -16
  143. package/dist/track.js.map +1 -1
  144. package/dist/transition.d.ts.map +1 -1
  145. package/dist/transition.js +4 -1
  146. package/dist/transition.js.map +1 -1
  147. package/dist/types.d.ts +22 -1
  148. package/dist/types.d.ts.map +1 -1
  149. package/dist/vue/index.d.ts +89 -0
  150. package/dist/vue/index.d.ts.map +1 -0
  151. package/dist/vue/index.js +134 -0
  152. package/dist/vue/index.js.map +1 -0
  153. package/package.json +15 -3
  154. package/platforms/android/java/org/rafaelaugusto/jolt/ColorTarget.java +2 -2
  155. package/platforms/android/java/org/rafaelaugusto/jolt/DecorationTarget.java +154 -0
  156. package/platforms/android/java/org/rafaelaugusto/jolt/KeyboardFollower.java +91 -0
  157. package/platforms/android/java/org/rafaelaugusto/jolt/NumberRoll.java +190 -0
  158. package/platforms/android/java/org/rafaelaugusto/jolt/TextReveal.java +180 -0
  159. package/platforms/android/proguard-rules.pro +7 -0
  160. package/src/android-plugin.d.ts +64 -0
  161. package/src/animate.ts +96 -33
  162. package/src/config.ts +46 -0
  163. package/src/decoration.ts +180 -0
  164. package/src/driver/android-color.ts +22 -20
  165. package/src/driver/android-decoration.ts +182 -0
  166. package/src/driver/android-playback.ts +157 -0
  167. package/src/driver/android.ts +57 -43
  168. package/src/driver/index.ts +15 -0
  169. package/src/driver/ios-color.ts +19 -10
  170. package/src/driver/ios-decoration.ts +332 -0
  171. package/src/driver/ios-playback.ts +51 -0
  172. package/src/driver/ios-shadow.ts +50 -0
  173. package/src/driver/ios.ts +87 -46
  174. package/src/engine.ts +267 -22
  175. package/src/haptics.ts +25 -2
  176. package/src/index.ts +12 -1
  177. package/src/items.ts +140 -0
  178. package/src/keyboard.ts +132 -0
  179. package/src/label.ts +76 -0
  180. package/src/liquid.ts +2 -1
  181. package/src/loader.ts +2 -1
  182. package/src/particles.ts +4 -4
  183. package/src/path.ts +124 -0
  184. package/src/playback-group.ts +143 -0
  185. package/src/playback.ts +62 -0
  186. package/src/press.ts +3 -5
  187. package/src/properties.ts +18 -2
  188. package/src/reveal.ts +3 -3
  189. package/src/roll-diff.ts +57 -0
  190. package/src/roll.ts +515 -0
  191. package/src/scroll-linked.ts +73 -0
  192. package/src/sequence.ts +204 -14
  193. package/src/shimmer.ts +2 -1
  194. package/src/svg-path.ts +355 -0
  195. package/src/symbol-effect.ts +4 -3
  196. package/src/text-layout.ts +14 -2
  197. package/src/text.ts +62 -81
  198. package/src/track.ts +98 -25
  199. package/src/transition.ts +4 -1
  200. package/src/types.ts +23 -1
  201. package/src/vue/index.ts +189 -0
@@ -0,0 +1,189 @@
1
+ import {
2
+ BaseTransition,
3
+ defineComponent,
4
+ h,
5
+ type App,
6
+ type BaseTransitionProps,
7
+ type NSVElement,
8
+ type ObjectDirective,
9
+ type PropType,
10
+ } from 'nativescript-vue'
11
+ import {
12
+ animate,
13
+ press,
14
+ type AnimateOptions,
15
+ type Keyframes,
16
+ type PlaybackAnimation,
17
+ type PresetName,
18
+ type SpringName,
19
+ } from '../index.js'
20
+
21
+ type Host = NSVElement
22
+ type Options = AnimateOptions | SpringName
23
+
24
+ /** A preset name or keyframes, alone or paired with a transition. */
25
+ export type AnimateValue =
26
+ PresetName | Keyframes | readonly [animation: PresetName | Keyframes, options?: Options]
27
+
28
+ /** The pressed keyframes, alone or paired with a transition. */
29
+ export type PressValue = Keyframes | readonly [pressed: Keyframes, options?: Options]
30
+
31
+ export interface TransitionProps {
32
+ /** Played when the child is inserted. */
33
+ enter?: AnimateValue
34
+ /** Played before the child is removed. */
35
+ leave?: AnimateValue
36
+ /** Also play `enter` on the first render. */
37
+ appear?: boolean
38
+ mode?: 'in-out' | 'out-in' | 'default'
39
+ }
40
+
41
+ const animations = new WeakMap<object, PlaybackAnimation>()
42
+ const removers = new WeakMap<object, () => void>()
43
+
44
+ function split<T>(
45
+ value: T | readonly [T, Options?],
46
+ ): [animation: T, options: Options | undefined] {
47
+ return Array.isArray(value)
48
+ ? [value[0] as T, value[1] as Options | undefined]
49
+ : [value as T, undefined]
50
+ }
51
+
52
+ function same(a: unknown, b: unknown): boolean {
53
+ if (Object.is(a, b)) return true
54
+ if (typeof a !== 'object' || typeof b !== 'object' || a === null || b === null)
55
+ return false
56
+ if (Array.isArray(a) !== Array.isArray(b)) return false
57
+ const keys = Object.keys(a)
58
+ return (
59
+ keys.length === Object.keys(b).length &&
60
+ keys.every((key) =>
61
+ same((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key]),
62
+ )
63
+ )
64
+ }
65
+
66
+ function play(el: Host, value: AnimateValue) {
67
+ const [animation, options] = split<PresetName | Keyframes>(value)
68
+ const handle = animate(el, animation, options)
69
+ animations.set(el, handle)
70
+ return handle
71
+ }
72
+
73
+ function cancel(el: Host) {
74
+ animations.get(el)?.stop()
75
+ animations.delete(el)
76
+ }
77
+
78
+ function attach(el: Host, value: PressValue | undefined) {
79
+ const [pressed, options] = value === undefined ? [] : split<Keyframes>(value)
80
+ removers.set(el, press(el, pressed, options))
81
+ }
82
+
83
+ /**
84
+ * Plays an animation when the element mounts, and again whenever the value changes.
85
+ *
86
+ * ```vue
87
+ * <Label v-animate="'fadeInUp'" />
88
+ * <Label v-animate="['popIn', { delay: 200 }]" />
89
+ * ```
90
+ */
91
+ export const vAnimate: ObjectDirective<Host, AnimateValue> = {
92
+ mounted(el, { value }) {
93
+ play(el, value)
94
+ },
95
+ updated(el, { value, oldValue }) {
96
+ if (!same(value, oldValue)) play(el, value)
97
+ },
98
+ unmounted: cancel,
99
+ }
100
+
101
+ /**
102
+ * Press feedback while a finger is on the element.
103
+ *
104
+ * ```vue
105
+ * <GridLayout v-press />
106
+ * <GridLayout v-press="{ scale: 0.95 }" />
107
+ * ```
108
+ */
109
+ export const vPress: ObjectDirective<Host, PressValue | undefined> = {
110
+ mounted(el, { value }) {
111
+ attach(el, value)
112
+ },
113
+ updated(el, { value, oldValue }) {
114
+ if (same(value, oldValue)) return
115
+ removers.get(el)?.()
116
+ attach(el, value)
117
+ },
118
+ unmounted(el) {
119
+ removers.get(el)?.()
120
+ removers.delete(el)
121
+ },
122
+ }
123
+
124
+ /** The hooks `JoltTransition` hands to Vue's `BaseTransition`. */
125
+ export function transitionHooks(props: TransitionProps): BaseTransitionProps<Host> {
126
+ const run = (value: AnimateValue | undefined) => (el: Host, done: () => void) => {
127
+ if (value === undefined) {
128
+ done()
129
+ return
130
+ }
131
+ const handle = play(el, value)
132
+ void handle.finished.then(() => {
133
+ if (animations.get(el) === handle) animations.delete(el)
134
+ done()
135
+ })
136
+ }
137
+ const hooks: BaseTransitionProps<Host> = {
138
+ onEnter: run(props.enter),
139
+ onEnterCancelled: cancel,
140
+ onLeave: run(props.leave),
141
+ onLeaveCancelled: cancel,
142
+ }
143
+ if (props.appear) {
144
+ hooks.onAppear = hooks.onEnter
145
+ hooks.onAppearCancelled = cancel
146
+ }
147
+ return hooks
148
+ }
149
+
150
+ const value = {
151
+ type: [String, Object, Array] as PropType<AnimateValue>,
152
+ default: undefined,
153
+ }
154
+
155
+ /**
156
+ * Animates a child in and out. Vue keeps the element until the leave animation settles.
157
+ *
158
+ * ```vue
159
+ * <JoltTransition enter="popIn" leave="fadeOut">
160
+ * <Label v-if="visible" text="Saved" />
161
+ * </JoltTransition>
162
+ * ```
163
+ */
164
+ export const JoltTransition = defineComponent({
165
+ name: 'JoltTransition',
166
+ props: {
167
+ enter: value,
168
+ leave: value,
169
+ appear: Boolean,
170
+ mode: { type: String as PropType<TransitionProps['mode']>, default: undefined },
171
+ },
172
+ setup(props, { slots }) {
173
+ return () =>
174
+ h(
175
+ BaseTransition,
176
+ { ...transitionHooks(props), mode: props.mode, appear: props.appear },
177
+ slots,
178
+ )
179
+ },
180
+ })
181
+
182
+ /** Registers `v-animate`, `v-press` and `JoltTransition` on the app. */
183
+ export function install(app: App) {
184
+ app.directive('animate', vAnimate)
185
+ app.directive('press', vPress)
186
+ app.component('JoltTransition', JoltTransition)
187
+ }
188
+
189
+ export default { install }