@rafaelaugusto/jolt 0.0.0-stage → 0.1.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +323 -2
- package/dist/animate.d.ts +26 -0
- package/dist/animate.d.ts.map +1 -0
- package/dist/animate.js +161 -0
- package/dist/animate.js.map +1 -0
- package/dist/driver/android.d.ts +3 -0
- package/dist/driver/android.d.ts.map +1 -0
- package/dist/driver/android.js +73 -0
- package/dist/driver/android.js.map +1 -0
- package/dist/driver/index.d.ts +18 -0
- package/dist/driver/index.d.ts.map +1 -0
- package/dist/driver/index.js +15 -0
- package/dist/driver/index.js.map +1 -0
- package/dist/driver/ios.d.ts +3 -0
- package/dist/driver/ios.d.ts.map +1 -0
- package/dist/driver/ios.js +77 -0
- package/dist/driver/ios.js.map +1 -0
- package/dist/easing.d.ts +8 -0
- package/dist/easing.d.ts.map +1 -0
- package/dist/easing.js +71 -0
- package/dist/easing.js.map +1 -0
- package/dist/engine.d.ts +48 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +178 -0
- package/dist/engine.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/presets.d.ts +310 -0
- package/dist/presets.d.ts.map +1 -0
- package/dist/presets.js +141 -0
- package/dist/presets.js.map +1 -0
- package/dist/press.d.ts +13 -0
- package/dist/press.d.ts.map +1 -0
- package/dist/press.js +34 -0
- package/dist/press.js.map +1 -0
- package/dist/properties.d.ts +8 -0
- package/dist/properties.d.ts.map +1 -0
- package/dist/properties.js +42 -0
- package/dist/properties.js.map +1 -0
- package/dist/sequence.d.ts +26 -0
- package/dist/sequence.d.ts.map +1 -0
- package/dist/sequence.js +69 -0
- package/dist/sequence.js.map +1 -0
- package/dist/spring.d.ts +22 -0
- package/dist/spring.d.ts.map +1 -0
- package/dist/spring.js +54 -0
- package/dist/spring.js.map +1 -0
- package/dist/track.d.ts +28 -0
- package/dist/track.d.ts.map +1 -0
- package/dist/track.js +103 -0
- package/dist/track.js.map +1 -0
- package/dist/transition.d.ts +58 -0
- package/dist/transition.d.ts.map +1 -0
- package/dist/transition.js +82 -0
- package/dist/transition.js.map +1 -0
- package/dist/types.d.ts +40 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +67 -4
- package/src/animate.ts +246 -0
- package/src/driver/android.ts +101 -0
- package/src/driver/index.ts +32 -0
- package/src/driver/ios.ts +97 -0
- package/src/easing.ts +100 -0
- package/src/engine.ts +216 -0
- package/src/index.ts +12 -0
- package/src/presets.ts +158 -0
- package/src/press.ts +49 -0
- package/src/properties.ts +51 -0
- package/src/sequence.ts +88 -0
- package/src/spring.ts +95 -0
- package/src/track.ts +163 -0
- package/src/transition.ts +160 -0
- package/src/types.ts +41 -0
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import type { AnimateOptions, Keyframes } from './types.js';
|
|
2
|
+
export interface Preset {
|
|
3
|
+
keyframes: Keyframes;
|
|
4
|
+
transition: AnimateOptions;
|
|
5
|
+
}
|
|
6
|
+
/** Add custom preset names through module augmentation, with `true` as each value. */
|
|
7
|
+
export interface Presets {
|
|
8
|
+
}
|
|
9
|
+
export declare const presets: {
|
|
10
|
+
fadeIn: {
|
|
11
|
+
keyframes: {
|
|
12
|
+
opacity: number[];
|
|
13
|
+
};
|
|
14
|
+
transition: {
|
|
15
|
+
readonly duration: 300;
|
|
16
|
+
readonly ease: 'easeOut';
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
fadeInUp: {
|
|
20
|
+
keyframes: {
|
|
21
|
+
opacity: number[];
|
|
22
|
+
y: number[];
|
|
23
|
+
};
|
|
24
|
+
transition: {
|
|
25
|
+
type: 'spring';
|
|
26
|
+
duration: 500;
|
|
27
|
+
bounce: 0;
|
|
28
|
+
opacity: {
|
|
29
|
+
readonly duration: 300;
|
|
30
|
+
readonly ease: 'easeOut';
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
fadeInDown: {
|
|
35
|
+
keyframes: {
|
|
36
|
+
opacity: number[];
|
|
37
|
+
y: number[];
|
|
38
|
+
};
|
|
39
|
+
transition: {
|
|
40
|
+
type: 'spring';
|
|
41
|
+
duration: 500;
|
|
42
|
+
bounce: 0;
|
|
43
|
+
opacity: {
|
|
44
|
+
readonly duration: 300;
|
|
45
|
+
readonly ease: 'easeOut';
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
fadeInLeft: {
|
|
50
|
+
keyframes: {
|
|
51
|
+
opacity: number[];
|
|
52
|
+
x: number[];
|
|
53
|
+
};
|
|
54
|
+
transition: {
|
|
55
|
+
type: 'spring';
|
|
56
|
+
duration: 500;
|
|
57
|
+
bounce: 0;
|
|
58
|
+
opacity: {
|
|
59
|
+
readonly duration: 300;
|
|
60
|
+
readonly ease: 'easeOut';
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
fadeInRight: {
|
|
65
|
+
keyframes: {
|
|
66
|
+
opacity: number[];
|
|
67
|
+
x: number[];
|
|
68
|
+
};
|
|
69
|
+
transition: {
|
|
70
|
+
type: 'spring';
|
|
71
|
+
duration: 500;
|
|
72
|
+
bounce: 0;
|
|
73
|
+
opacity: {
|
|
74
|
+
readonly duration: 300;
|
|
75
|
+
readonly ease: 'easeOut';
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
zoomIn: {
|
|
80
|
+
keyframes: {
|
|
81
|
+
opacity: number[];
|
|
82
|
+
scale: number[];
|
|
83
|
+
};
|
|
84
|
+
transition: {
|
|
85
|
+
type: 'spring';
|
|
86
|
+
duration: 500;
|
|
87
|
+
bounce: 0;
|
|
88
|
+
opacity: {
|
|
89
|
+
readonly duration: 300;
|
|
90
|
+
readonly ease: 'easeOut';
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
popIn: {
|
|
95
|
+
keyframes: {
|
|
96
|
+
opacity: number[];
|
|
97
|
+
scale: number[];
|
|
98
|
+
};
|
|
99
|
+
transition: {
|
|
100
|
+
type: "spring";
|
|
101
|
+
duration: number;
|
|
102
|
+
bounce: number;
|
|
103
|
+
opacity: {
|
|
104
|
+
duration: number;
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
};
|
|
108
|
+
flipInX: {
|
|
109
|
+
keyframes: {
|
|
110
|
+
opacity: number[];
|
|
111
|
+
rotateX: number[];
|
|
112
|
+
};
|
|
113
|
+
transition: {
|
|
114
|
+
type: "spring";
|
|
115
|
+
duration: number;
|
|
116
|
+
bounce: number;
|
|
117
|
+
opacity: {
|
|
118
|
+
duration: number;
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
flipInY: {
|
|
123
|
+
keyframes: {
|
|
124
|
+
opacity: number[];
|
|
125
|
+
rotateY: number[];
|
|
126
|
+
};
|
|
127
|
+
transition: {
|
|
128
|
+
type: "spring";
|
|
129
|
+
duration: number;
|
|
130
|
+
bounce: number;
|
|
131
|
+
opacity: {
|
|
132
|
+
duration: number;
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
fadeOut: {
|
|
137
|
+
keyframes: {
|
|
138
|
+
opacity: number;
|
|
139
|
+
};
|
|
140
|
+
transition: {
|
|
141
|
+
readonly duration: 200;
|
|
142
|
+
readonly ease: 'easeIn';
|
|
143
|
+
};
|
|
144
|
+
};
|
|
145
|
+
fadeOutUp: {
|
|
146
|
+
keyframes: {
|
|
147
|
+
opacity: number;
|
|
148
|
+
y: number;
|
|
149
|
+
};
|
|
150
|
+
transition: {
|
|
151
|
+
readonly duration: 200;
|
|
152
|
+
readonly ease: 'easeIn';
|
|
153
|
+
};
|
|
154
|
+
};
|
|
155
|
+
fadeOutDown: {
|
|
156
|
+
keyframes: {
|
|
157
|
+
opacity: number;
|
|
158
|
+
y: number;
|
|
159
|
+
};
|
|
160
|
+
transition: {
|
|
161
|
+
readonly duration: 200;
|
|
162
|
+
readonly ease: 'easeIn';
|
|
163
|
+
};
|
|
164
|
+
};
|
|
165
|
+
fadeOutLeft: {
|
|
166
|
+
keyframes: {
|
|
167
|
+
opacity: number;
|
|
168
|
+
x: number;
|
|
169
|
+
};
|
|
170
|
+
transition: {
|
|
171
|
+
readonly duration: 200;
|
|
172
|
+
readonly ease: 'easeIn';
|
|
173
|
+
};
|
|
174
|
+
};
|
|
175
|
+
fadeOutRight: {
|
|
176
|
+
keyframes: {
|
|
177
|
+
opacity: number;
|
|
178
|
+
x: number;
|
|
179
|
+
};
|
|
180
|
+
transition: {
|
|
181
|
+
readonly duration: 200;
|
|
182
|
+
readonly ease: 'easeIn';
|
|
183
|
+
};
|
|
184
|
+
};
|
|
185
|
+
zoomOut: {
|
|
186
|
+
keyframes: {
|
|
187
|
+
opacity: number;
|
|
188
|
+
scale: number;
|
|
189
|
+
};
|
|
190
|
+
transition: {
|
|
191
|
+
readonly duration: 200;
|
|
192
|
+
readonly ease: 'easeIn';
|
|
193
|
+
};
|
|
194
|
+
};
|
|
195
|
+
popOut: {
|
|
196
|
+
keyframes: {
|
|
197
|
+
opacity: number;
|
|
198
|
+
scale: (number | null)[];
|
|
199
|
+
};
|
|
200
|
+
transition: {
|
|
201
|
+
duration: number;
|
|
202
|
+
ease: ["easeOut", "easeIn"];
|
|
203
|
+
times: number[];
|
|
204
|
+
opacity: {
|
|
205
|
+
duration: number;
|
|
206
|
+
ease: "easeIn";
|
|
207
|
+
};
|
|
208
|
+
};
|
|
209
|
+
};
|
|
210
|
+
pulse: {
|
|
211
|
+
keyframes: {
|
|
212
|
+
scale: number[];
|
|
213
|
+
};
|
|
214
|
+
transition: {
|
|
215
|
+
duration: number;
|
|
216
|
+
ease: "easeInOut";
|
|
217
|
+
relative: true;
|
|
218
|
+
};
|
|
219
|
+
};
|
|
220
|
+
bounce: {
|
|
221
|
+
keyframes: {
|
|
222
|
+
y: number[];
|
|
223
|
+
};
|
|
224
|
+
transition: {
|
|
225
|
+
duration: number;
|
|
226
|
+
relative: true;
|
|
227
|
+
times: number[];
|
|
228
|
+
ease: ["easeOut", "easeIn", "easeOut", "easeIn"];
|
|
229
|
+
};
|
|
230
|
+
};
|
|
231
|
+
shake: {
|
|
232
|
+
keyframes: {
|
|
233
|
+
x: number[];
|
|
234
|
+
};
|
|
235
|
+
transition: {
|
|
236
|
+
duration: number;
|
|
237
|
+
ease: "easeInOut";
|
|
238
|
+
relative: true;
|
|
239
|
+
};
|
|
240
|
+
};
|
|
241
|
+
wiggle: {
|
|
242
|
+
keyframes: {
|
|
243
|
+
rotate: number[];
|
|
244
|
+
};
|
|
245
|
+
transition: {
|
|
246
|
+
duration: number;
|
|
247
|
+
ease: "easeInOut";
|
|
248
|
+
relative: true;
|
|
249
|
+
};
|
|
250
|
+
};
|
|
251
|
+
heartbeat: {
|
|
252
|
+
keyframes: {
|
|
253
|
+
scale: number[];
|
|
254
|
+
};
|
|
255
|
+
transition: {
|
|
256
|
+
duration: number;
|
|
257
|
+
relative: true;
|
|
258
|
+
times: number[];
|
|
259
|
+
ease: "easeInOut";
|
|
260
|
+
};
|
|
261
|
+
};
|
|
262
|
+
jelly: {
|
|
263
|
+
keyframes: {
|
|
264
|
+
scaleX: number[];
|
|
265
|
+
scaleY: number[];
|
|
266
|
+
};
|
|
267
|
+
transition: {
|
|
268
|
+
duration: number;
|
|
269
|
+
relative: true;
|
|
270
|
+
times: number[];
|
|
271
|
+
ease: "easeInOut";
|
|
272
|
+
};
|
|
273
|
+
};
|
|
274
|
+
flash: {
|
|
275
|
+
keyframes: {
|
|
276
|
+
opacity: number[];
|
|
277
|
+
};
|
|
278
|
+
transition: {
|
|
279
|
+
duration: number;
|
|
280
|
+
ease: "easeInOut";
|
|
281
|
+
relative: true;
|
|
282
|
+
};
|
|
283
|
+
};
|
|
284
|
+
tada: {
|
|
285
|
+
keyframes: {
|
|
286
|
+
scale: number[];
|
|
287
|
+
rotate: number[];
|
|
288
|
+
};
|
|
289
|
+
transition: {
|
|
290
|
+
duration: number;
|
|
291
|
+
ease: "easeInOut";
|
|
292
|
+
relative: true;
|
|
293
|
+
};
|
|
294
|
+
};
|
|
295
|
+
spin: {
|
|
296
|
+
keyframes: {
|
|
297
|
+
rotate: number[];
|
|
298
|
+
};
|
|
299
|
+
transition: {
|
|
300
|
+
duration: number;
|
|
301
|
+
ease: "linear";
|
|
302
|
+
relative: true;
|
|
303
|
+
};
|
|
304
|
+
};
|
|
305
|
+
};
|
|
306
|
+
export type PresetName = keyof typeof presets | Extract<keyof Presets, string>;
|
|
307
|
+
/** Registers a custom preset. Registering it again replaces it for future animations. */
|
|
308
|
+
export declare function definePreset(name: PresetName, preset: Preset): void;
|
|
309
|
+
export declare function getPreset(name: PresetName): Preset;
|
|
310
|
+
//# sourceMappingURL=presets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3D,MAAM,WAAW,MAAM;IACrB,SAAS,EAAE,SAAS,CAAA;IACpB,UAAU,EAAE,cAAc,CAAA;CAC3B;AAED,sFAAsF;AACtF,MAAM,WAAW,OAAO;CAAG;AAM3B,eAAO,MAAM,OAAO;;QACR,SAAS;YAAI,OAAO;;QAAY,UAAU;+BAL3B,GAAG;2BAAQ,SAAS;;;;;YAO9B,OAAO;YAAU,CAAC;;;kBALb,QAAQ;sBAAY,GAAG;oBAAU,CAAC;;;;;;;;;YASvC,OAAO;YAAU,CAAC;;;kBATb,QAAQ;sBAAY,GAAG;oBAAU,CAAC;;;;;;;;;YAavC,OAAO;YAAU,CAAC;;;kBAbb,QAAQ;sBAAY,GAAG;oBAAU,CAAC;;;;;;;;;YAiBvC,OAAO;YAAU,CAAC;;;kBAjBb,QAAQ;sBAAY,GAAG;oBAAU,CAAC;;;;;;;;;YAqBvC,OAAO;YAAU,KAAK;;;kBArBjB,QAAQ;sBAAY,GAAG;oBAAU,CAAC;;;;;;;;;YAyBvC,OAAO;YAAU,KAAK;;;;;;;gBAKtB,QAAQ;;;;;;YAIR,OAAO;YAAU,OAAO;;;;;;;gBAKxB,QAAQ;;;;;;YAIR,OAAO;YAAU,OAAO;;;;;;;gBAKxB,QAAQ;;;;;QAIZ,SAAS;YAAI,OAAO;;QAAO,UAAU;+BArDtB,GAAG;2BAAQ,QAAQ;;;;QAsDhC,SAAS;YAAI,OAAO;YAAK,CAAC;;QAAS,UAAU;;;;;;QAC3C,SAAS;YAAI,OAAO;YAAK,CAAC;;QAAQ,UAAU;;;;;;QAC5C,SAAS;YAAI,OAAO;YAAK,CAAC;;QAAS,UAAU;;;;;;QAC5C,SAAS;YAAI,OAAO;YAAK,CAAC;;QAAQ,UAAU;;;;;;QACjD,SAAS;YAAI,OAAO;YAAK,KAAK;;QAAU,UAAU;;;;;;;YAE9C,OAAO;YAAK,KAAK;;;;;;;;;;;;;;YAUjB,KAAK;;;;;;;;;;YAIL,CAAC;;;;;;;;;;;YASD,CAAC;;;;;;;;;;YAID,MAAM;;;;;;;;;;YAIN,KAAK;;;;;;;;;;;YAUhB,MAAM;YACN,MAAM;;;;;;;;;;;YAUK,OAAO;;;;;;;;;;YAKlB,KAAK;YACL,MAAM;;;;;;;;;;YAKK,MAAM;;;;;;;;CAGW,CAAA;AAElC,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,OAAO,GAAG,OAAO,CAAC,MAAM,OAAO,EAAE,MAAM,CAAC,CAAA;AAI9E,yFAAyF;AACzF,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAKnE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAMlD"}
|
package/dist/presets.js
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
const fadeIn = { duration: 300, ease: 'easeOut' };
|
|
2
|
+
const fadeOut = { duration: 200, ease: 'easeIn' };
|
|
3
|
+
const enter = { type: 'spring', duration: 500, bounce: 0 };
|
|
4
|
+
export const presets = {
|
|
5
|
+
fadeIn: { keyframes: { opacity: [0, 1] }, transition: fadeIn },
|
|
6
|
+
fadeInUp: {
|
|
7
|
+
keyframes: { opacity: [0, 1], y: [24, 0] },
|
|
8
|
+
transition: { ...enter, opacity: fadeIn },
|
|
9
|
+
},
|
|
10
|
+
fadeInDown: {
|
|
11
|
+
keyframes: { opacity: [0, 1], y: [-24, 0] },
|
|
12
|
+
transition: { ...enter, opacity: fadeIn },
|
|
13
|
+
},
|
|
14
|
+
fadeInLeft: {
|
|
15
|
+
keyframes: { opacity: [0, 1], x: [-24, 0] },
|
|
16
|
+
transition: { ...enter, opacity: fadeIn },
|
|
17
|
+
},
|
|
18
|
+
fadeInRight: {
|
|
19
|
+
keyframes: { opacity: [0, 1], x: [24, 0] },
|
|
20
|
+
transition: { ...enter, opacity: fadeIn },
|
|
21
|
+
},
|
|
22
|
+
zoomIn: {
|
|
23
|
+
keyframes: { opacity: [0, 1], scale: [0.85, 1] },
|
|
24
|
+
transition: { ...enter, opacity: fadeIn },
|
|
25
|
+
},
|
|
26
|
+
popIn: {
|
|
27
|
+
keyframes: { opacity: [0, 1], scale: [0.5, 1] },
|
|
28
|
+
transition: {
|
|
29
|
+
type: 'spring',
|
|
30
|
+
duration: 550,
|
|
31
|
+
bounce: 0.4,
|
|
32
|
+
opacity: { duration: 150 },
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
flipInX: {
|
|
36
|
+
keyframes: { opacity: [0, 1], rotateX: [-90, 0] },
|
|
37
|
+
transition: {
|
|
38
|
+
type: 'spring',
|
|
39
|
+
duration: 600,
|
|
40
|
+
bounce: 0.25,
|
|
41
|
+
opacity: { duration: 200 },
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
flipInY: {
|
|
45
|
+
keyframes: { opacity: [0, 1], rotateY: [90, 0] },
|
|
46
|
+
transition: {
|
|
47
|
+
type: 'spring',
|
|
48
|
+
duration: 600,
|
|
49
|
+
bounce: 0.25,
|
|
50
|
+
opacity: { duration: 200 },
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
fadeOut: { keyframes: { opacity: 0 }, transition: fadeOut },
|
|
54
|
+
fadeOutUp: { keyframes: { opacity: 0, y: -24 }, transition: fadeOut },
|
|
55
|
+
fadeOutDown: { keyframes: { opacity: 0, y: 24 }, transition: fadeOut },
|
|
56
|
+
fadeOutLeft: { keyframes: { opacity: 0, x: -24 }, transition: fadeOut },
|
|
57
|
+
fadeOutRight: { keyframes: { opacity: 0, x: 24 }, transition: fadeOut },
|
|
58
|
+
zoomOut: { keyframes: { opacity: 0, scale: 0.85 }, transition: fadeOut },
|
|
59
|
+
popOut: {
|
|
60
|
+
keyframes: { opacity: 0, scale: [null, 1.08, 0.4] },
|
|
61
|
+
transition: {
|
|
62
|
+
duration: 250,
|
|
63
|
+
ease: ['easeOut', 'easeIn'],
|
|
64
|
+
times: [0, 0.3, 1],
|
|
65
|
+
opacity: { duration: 250, ease: 'easeIn' },
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
pulse: {
|
|
69
|
+
keyframes: { scale: [1, 1.06, 1] },
|
|
70
|
+
transition: { duration: 500, ease: 'easeInOut', relative: true },
|
|
71
|
+
},
|
|
72
|
+
bounce: {
|
|
73
|
+
keyframes: { y: [0, -18, 0, -8, 0] },
|
|
74
|
+
transition: {
|
|
75
|
+
duration: 650,
|
|
76
|
+
relative: true,
|
|
77
|
+
times: [0, 0.3, 0.6, 0.8, 1],
|
|
78
|
+
ease: ['easeOut', 'easeIn', 'easeOut', 'easeIn'],
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
shake: {
|
|
82
|
+
keyframes: { x: [0, -10, 10, -8, 8, -4, 4, 0] },
|
|
83
|
+
transition: { duration: 500, ease: 'easeInOut', relative: true },
|
|
84
|
+
},
|
|
85
|
+
wiggle: {
|
|
86
|
+
keyframes: { rotate: [0, -8, 8, -5, 5, 0] },
|
|
87
|
+
transition: { duration: 500, ease: 'easeInOut', relative: true },
|
|
88
|
+
},
|
|
89
|
+
heartbeat: {
|
|
90
|
+
keyframes: { scale: [1, 1.15, 1, 1.15, 1, 1] },
|
|
91
|
+
transition: {
|
|
92
|
+
duration: 1000,
|
|
93
|
+
relative: true,
|
|
94
|
+
times: [0, 0.14, 0.28, 0.42, 0.7, 1],
|
|
95
|
+
ease: 'easeInOut',
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
jelly: {
|
|
99
|
+
keyframes: {
|
|
100
|
+
scaleX: [1, 1.25, 0.75, 1.15, 0.95, 1.05, 1],
|
|
101
|
+
scaleY: [1, 0.75, 1.25, 0.85, 1.05, 0.95, 1],
|
|
102
|
+
},
|
|
103
|
+
transition: {
|
|
104
|
+
duration: 800,
|
|
105
|
+
relative: true,
|
|
106
|
+
times: [0, 0.3, 0.4, 0.5, 0.65, 0.75, 1],
|
|
107
|
+
ease: 'easeInOut',
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
flash: {
|
|
111
|
+
keyframes: { opacity: [1, 0, 1, 0, 1] },
|
|
112
|
+
transition: { duration: 800, ease: 'easeInOut', relative: true },
|
|
113
|
+
},
|
|
114
|
+
tada: {
|
|
115
|
+
keyframes: {
|
|
116
|
+
scale: [1, 0.9, 0.9, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1],
|
|
117
|
+
rotate: [0, -3, -3, 3, -3, 3, -3, 3, -3, 3, 0],
|
|
118
|
+
},
|
|
119
|
+
transition: { duration: 1000, ease: 'easeInOut', relative: true },
|
|
120
|
+
},
|
|
121
|
+
spin: {
|
|
122
|
+
keyframes: { rotate: [0, 360] },
|
|
123
|
+
transition: { duration: 1000, ease: 'linear', relative: true },
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
const customPresets = new Map();
|
|
127
|
+
/** Registers a custom preset. Registering it again replaces it for future animations. */
|
|
128
|
+
export function definePreset(name, preset) {
|
|
129
|
+
if (Object.hasOwn(presets, name)) {
|
|
130
|
+
throw new Error(`Preset "${name}" is built in and cannot be replaced.`);
|
|
131
|
+
}
|
|
132
|
+
customPresets.set(name, preset);
|
|
133
|
+
}
|
|
134
|
+
export function getPreset(name) {
|
|
135
|
+
const preset = customPresets.get(name) ??
|
|
136
|
+
(Object.hasOwn(presets, name) ? presets[name] : undefined);
|
|
137
|
+
if (!preset)
|
|
138
|
+
throw new Error(`Unknown preset "${name}".`);
|
|
139
|
+
return preset;
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=presets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.js","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"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"}
|
package/dist/press.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { SpringName } from './transition.js';
|
|
2
|
+
import type { AnimateOptions, Keyframes, Target } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Animates the view to `pressed` while a finger is on it, and back once it's lifted.
|
|
5
|
+
* Returns a function that removes the effect.
|
|
6
|
+
*
|
|
7
|
+
* ```ts
|
|
8
|
+
* press(button)
|
|
9
|
+
* press(card, { scale: 0.97, opacity: 0.85 })
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
export declare function press(target: Target, pressed?: Keyframes, options?: AnimateOptions | SpringName): () => void;
|
|
13
|
+
//# sourceMappingURL=press.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"press.d.ts","sourceRoot":"","sources":["../src/press.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,iBAAiB,CAAA;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAKnE;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CACnB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,SAA2B,EACpC,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,GACpC,MAAM,IAAI,CA0BZ"}
|
package/dist/press.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { animate, toView } from './animate.js';
|
|
2
|
+
import { isProperty, readValue } from './properties.js';
|
|
3
|
+
const pressIn = { type: 'spring', duration: 200, bounce: 0 };
|
|
4
|
+
const release = { type: 'spring', duration: 450, bounce: 0.35 };
|
|
5
|
+
/**
|
|
6
|
+
* Animates the view to `pressed` while a finger is on it, and back once it's lifted.
|
|
7
|
+
* Returns a function that removes the effect.
|
|
8
|
+
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* press(button)
|
|
11
|
+
* press(card, { scale: 0.97, opacity: 0.85 })
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export function press(target, pressed = { scale: 0.96 }, options) {
|
|
15
|
+
const view = toView(target);
|
|
16
|
+
const properties = Object.keys(pressed).flatMap((key) => key === 'scale' ? ['scaleX', 'scaleY'] : isProperty(key) ? [key] : []);
|
|
17
|
+
let rest;
|
|
18
|
+
const onTouch = (event) => {
|
|
19
|
+
const { action } = event;
|
|
20
|
+
if (action === 'down' && !rest && view.isEnabled !== false) {
|
|
21
|
+
rest = Object.fromEntries(properties.map((p) => [p, readValue(view, p)]));
|
|
22
|
+
animate(view, pressed, options ?? pressIn);
|
|
23
|
+
}
|
|
24
|
+
else if ((action === 'up' || action === 'cancel') && rest) {
|
|
25
|
+
animate(view, rest, typeof options === 'object'
|
|
26
|
+
? { ...options, relative: false }
|
|
27
|
+
: (options ?? release));
|
|
28
|
+
rest = undefined;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
view.on('touch', onTouch);
|
|
32
|
+
return () => view.off('touch', onTouch);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=press.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"press.js","sourceRoot":"","sources":["../src/press.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAiB,MAAM,iBAAiB,CAAA;AAItE,MAAM,OAAO,GAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAA;AACxE,MAAM,OAAO,GAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;AAE3E;;;;;;;;GAQG;AACH,MAAM,UAAU,KAAK,CACnB,MAAc,EACd,OAAO,GAAc,EAAE,KAAK,EAAE,IAAI,EAAE,EACpC,OAAqC;IAErC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IAC3B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAc,EAAE,CAClE,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CACtE,CAAA;IACD,IAAI,IAA2B,CAAA;IAE/B,MAAM,OAAO,GAAG,CAAC,KAAgB,EAAE,EAAE;QACnC,MAAM,EAAE,MAAM,EAAE,GAAG,KAA8B,CAAA;QACjD,IAAI,MAAM,KAAK,MAAM,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;YAC3D,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACzE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,IAAI,OAAO,CAAC,CAAA;QAC5C,CAAC;aAAM,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;YAC5D,OAAO,CACL,IAAI,EACJ,IAAI,EACJ,OAAO,OAAO,KAAK,QAAQ;gBACzB,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE;gBACjC,CAAC,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,CACzB,CAAA;YACD,IAAI,GAAG,SAAS,CAAA;QAClB,CAAC;IACH,CAAC,CAAA;IAED,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACzB,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AACzC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { View } from '@nativescript/core';
|
|
2
|
+
export type Property = 'opacity' | 'x' | 'y' | 'scaleX' | 'scaleY' | 'rotate' | 'rotateX' | 'rotateY';
|
|
3
|
+
/** How close to its target a spring has to be to count as settled. */
|
|
4
|
+
export declare const precision: Record<Property, number>;
|
|
5
|
+
export declare function isProperty(key: string): key is Property;
|
|
6
|
+
export declare function readValue(view: View, property: Property): number;
|
|
7
|
+
export declare function writeValue(view: View, property: Property, value: number): void;
|
|
8
|
+
//# sourceMappingURL=properties.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../src/properties.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAE9C,MAAM,MAAM,QAAQ,GAClB,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA;AAwBhF,sEAAsE;AACtE,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAS9C,CAAA;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,IAAI,QAAQ,CAEvD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAGhE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,QAEvE"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
const viewKeys = {
|
|
2
|
+
opacity: 'opacity',
|
|
3
|
+
x: 'translateX',
|
|
4
|
+
y: 'translateY',
|
|
5
|
+
scaleX: 'scaleX',
|
|
6
|
+
scaleY: 'scaleY',
|
|
7
|
+
rotate: 'rotate',
|
|
8
|
+
rotateX: 'rotateX',
|
|
9
|
+
rotateY: 'rotateY',
|
|
10
|
+
};
|
|
11
|
+
const defaults = {
|
|
12
|
+
opacity: 1,
|
|
13
|
+
x: 0,
|
|
14
|
+
y: 0,
|
|
15
|
+
scaleX: 1,
|
|
16
|
+
scaleY: 1,
|
|
17
|
+
rotate: 0,
|
|
18
|
+
rotateX: 0,
|
|
19
|
+
rotateY: 0,
|
|
20
|
+
};
|
|
21
|
+
/** How close to its target a spring has to be to count as settled. */
|
|
22
|
+
export const precision = {
|
|
23
|
+
opacity: 0.002,
|
|
24
|
+
x: 0.25,
|
|
25
|
+
y: 0.25,
|
|
26
|
+
scaleX: 0.001,
|
|
27
|
+
scaleY: 0.001,
|
|
28
|
+
rotate: 0.1,
|
|
29
|
+
rotateX: 0.1,
|
|
30
|
+
rotateY: 0.1,
|
|
31
|
+
};
|
|
32
|
+
export function isProperty(key) {
|
|
33
|
+
return key in viewKeys;
|
|
34
|
+
}
|
|
35
|
+
export function readValue(view, property) {
|
|
36
|
+
const value = view[viewKeys[property]];
|
|
37
|
+
return typeof value === 'number' && !Number.isNaN(value) ? value : defaults[property];
|
|
38
|
+
}
|
|
39
|
+
export function writeValue(view, property, value) {
|
|
40
|
+
view[viewKeys[property]] = value;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=properties.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"properties.js","sourceRoot":"","sources":["../src/properties.ts"],"names":[],"mappings":"AAKA,MAAM,QAAQ,GAAG;IACf,OAAO,EAAE,SAAS;IAClB,CAAC,EAAE,YAAY;IACf,CAAC,EAAE,YAAY;IACf,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;CAC6B,CAAA;AAEjD,MAAM,QAAQ,GAA6B;IACzC,OAAO,EAAE,CAAC;IACV,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;CACX,CAAA;AAED,sEAAsE;AACtE,MAAM,CAAC,MAAM,SAAS,GAA6B;IACjD,OAAO,EAAE,KAAK;IACd,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;IACP,MAAM,EAAE,KAAK;IACb,MAAM,EAAE,KAAK;IACb,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;CACb,CAAA;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,OAAO,GAAG,IAAI,QAAQ,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAU,EAAE,QAAkB;IACtD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AACvF,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAU,EAAE,QAAkB,EAAE,KAAa;IACtE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAK,CAAA;AAClC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type Animation } from './engine.js';
|
|
2
|
+
import type { PresetName } from './presets.js';
|
|
3
|
+
import type { SpringName } from './transition.js';
|
|
4
|
+
import type { AnimateOptions, Keyframes, Target } from './types.js';
|
|
5
|
+
export type Step = readonly [
|
|
6
|
+
target: Target | readonly Target[],
|
|
7
|
+
animation: Keyframes | PresetName,
|
|
8
|
+
options?: AnimateOptions | SpringName
|
|
9
|
+
] | (() => Animation);
|
|
10
|
+
/**
|
|
11
|
+
* Plays steps one after the other. A step starts once the previous one looks
|
|
12
|
+
* done: a spring is close to its target, even if it hasn't fully settled.
|
|
13
|
+
* Views in later steps take their first absolute keyframe right away, so a title
|
|
14
|
+
* that fades in third doesn't show up before its turn. Relative and null keyframes
|
|
15
|
+
* read the current value when their step starts.
|
|
16
|
+
*
|
|
17
|
+
* ```ts
|
|
18
|
+
* await sequence([
|
|
19
|
+
* [logo, 'popIn'],
|
|
20
|
+
* [title, 'fadeInUp'],
|
|
21
|
+
* [buttons, 'fadeInUp', { stagger: 50 }],
|
|
22
|
+
* ])
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare function sequence(steps: readonly Step[]): Animation;
|
|
26
|
+
//# sourceMappingURL=sequence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sequence.d.ts","sourceRoot":"","sources":["../src/sequence.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmC,KAAK,SAAS,EAAE,MAAM,aAAa,CAAA;AAC7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAEnE,MAAM,MAAM,IAAI,GACZ,SAAS;IACP,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE;IAClC,SAAS,EAAE,SAAS,GAAG,UAAU;IACjC,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU;CACtC,GACD,CAAC,MAAM,SAAS,CAAC,CAAA;AAErB;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,SAAS,CA8B1D"}
|
package/dist/sequence.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { animate, startingValues, toViews } from './animate.js';
|
|
2
|
+
import { arrivalOf, setArrival, stopView } from './engine.js';
|
|
3
|
+
import { writeValue } from './properties.js';
|
|
4
|
+
/**
|
|
5
|
+
* Plays steps one after the other. A step starts once the previous one looks
|
|
6
|
+
* done: a spring is close to its target, even if it hasn't fully settled.
|
|
7
|
+
* Views in later steps take their first absolute keyframe right away, so a title
|
|
8
|
+
* that fades in third doesn't show up before its turn. Relative and null keyframes
|
|
9
|
+
* read the current value when their step starts.
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* await sequence([
|
|
13
|
+
* [logo, 'popIn'],
|
|
14
|
+
* [title, 'fadeInUp'],
|
|
15
|
+
* [buttons, 'fadeInUp', { stagger: 50 }],
|
|
16
|
+
* ])
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export function sequence(steps) {
|
|
20
|
+
applyStartingValues(steps);
|
|
21
|
+
const started = [];
|
|
22
|
+
let stopped = false;
|
|
23
|
+
const arrived = (async () => {
|
|
24
|
+
for (const step of steps) {
|
|
25
|
+
if (stopped)
|
|
26
|
+
return;
|
|
27
|
+
const animation = typeof step === 'function' ? step() : animate(...step);
|
|
28
|
+
started.push(animation);
|
|
29
|
+
await arrivalOf(animation);
|
|
30
|
+
}
|
|
31
|
+
})();
|
|
32
|
+
const finished = arrived.then(async () => {
|
|
33
|
+
const results = await Promise.all(started.map((animation) => animation.finished));
|
|
34
|
+
return !stopped && results.length === steps.length && results.every(Boolean);
|
|
35
|
+
});
|
|
36
|
+
const animation = {
|
|
37
|
+
finished,
|
|
38
|
+
stop() {
|
|
39
|
+
stopped = true;
|
|
40
|
+
started.forEach((animation) => animation.stop());
|
|
41
|
+
},
|
|
42
|
+
then: (onfulfilled, onrejected) => finished.then(onfulfilled, onrejected),
|
|
43
|
+
};
|
|
44
|
+
setArrival(animation, arrived);
|
|
45
|
+
return animation;
|
|
46
|
+
}
|
|
47
|
+
function applyStartingValues(steps) {
|
|
48
|
+
const claimed = new Map();
|
|
49
|
+
for (const step of steps) {
|
|
50
|
+
if (typeof step === 'function')
|
|
51
|
+
continue;
|
|
52
|
+
const [target, animation, options] = step;
|
|
53
|
+
const starts = startingValues(animation, options);
|
|
54
|
+
for (const view of toViews(target)) {
|
|
55
|
+
let properties = claimed.get(view);
|
|
56
|
+
if (!properties)
|
|
57
|
+
claimed.set(view, (properties = new Set()));
|
|
58
|
+
const fresh = [...starts].filter(([property, value]) => !properties.has(property) && value !== null);
|
|
59
|
+
stopView(view, fresh.map(([property]) => property));
|
|
60
|
+
for (const [property, value] of fresh) {
|
|
61
|
+
if (value !== null)
|
|
62
|
+
writeValue(view, property, value);
|
|
63
|
+
}
|
|
64
|
+
for (const property of starts.keys())
|
|
65
|
+
properties.add(property);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=sequence.js.map
|