@pyreon/kinetic-presets 0.11.1 → 0.11.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,387 @@
1
+ import { describe, expect, it } from "vitest"
2
+ import { fade, fadeUp, scaleIn, slideUp } from "../presets"
3
+ import type { Preset } from "../types"
4
+ import { compose, reverse, withDelay, withDuration, withEasing } from "../utils"
5
+
6
+ describe("compose", () => {
7
+ it("merges enterStyle objects", () => {
8
+ const a: Preset = { enterStyle: { opacity: 0 } }
9
+ const b: Preset = { enterStyle: { transform: "translateY(16px)" } }
10
+ const result = compose(a, b)
11
+ expect(result.enterStyle).toEqual({
12
+ opacity: 0,
13
+ transform: "translateY(16px)",
14
+ })
15
+ })
16
+
17
+ it("later preset overrides same style keys", () => {
18
+ const a: Preset = { enterStyle: { opacity: 0, transform: "scale(0.9)" } }
19
+ const b: Preset = { enterStyle: { transform: "translateY(16px)" } }
20
+ const result = compose(a, b)
21
+ expect(result.enterStyle).toEqual({
22
+ opacity: 0,
23
+ transform: "translateY(16px)",
24
+ })
25
+ })
26
+
27
+ it("last preset transition wins", () => {
28
+ const result = compose(fade, slideUp)
29
+ expect(result.enterTransition).toBe(slideUp.enterTransition)
30
+ expect(result.leaveTransition).toBe(slideUp.leaveTransition)
31
+ })
32
+
33
+ it("merges all style fields", () => {
34
+ const result = compose(fade, scaleIn)
35
+ expect(result.enterStyle).toBeDefined()
36
+ expect(result.enterToStyle).toBeDefined()
37
+ expect(result.leaveStyle).toBeDefined()
38
+ expect(result.leaveToStyle).toBeDefined()
39
+ })
40
+
41
+ it("concatenates class names with space", () => {
42
+ const a: Preset = { enter: "class-a", enterFrom: "from-a" }
43
+ const b: Preset = { enter: "class-b", enterFrom: "from-b" }
44
+ const result = compose(a, b)
45
+ expect(result.enter).toBe("class-a class-b")
46
+ expect(result.enterFrom).toBe("from-a from-b")
47
+ })
48
+
49
+ it("handles single preset", () => {
50
+ const result = compose(fade)
51
+ expect(result.enterStyle).toEqual(fade.enterStyle)
52
+ expect(result.enterTransition).toBe(fade.enterTransition)
53
+ })
54
+
55
+ it("handles empty presets", () => {
56
+ const result = compose({}, fade)
57
+ expect(result.enterStyle).toEqual(fade.enterStyle)
58
+ })
59
+
60
+ it("composes three presets", () => {
61
+ const a: Preset = { enterStyle: { opacity: 0 } }
62
+ const b: Preset = { enterStyle: { color: "red" } }
63
+ const c: Preset = { enterStyle: { background: "blue" } }
64
+ const result = compose(a, b, c)
65
+ expect(result.enterStyle).toEqual({
66
+ opacity: 0,
67
+ color: "red",
68
+ background: "blue",
69
+ })
70
+ })
71
+ })
72
+
73
+ describe("withDuration", () => {
74
+ it("overrides both enter and leave duration", () => {
75
+ const result = withDuration(fade, 500)
76
+ expect(result.enterTransition).toContain("500ms")
77
+ expect(result.leaveTransition).toContain("500ms")
78
+ })
79
+
80
+ it("overrides enter and leave separately", () => {
81
+ const result = withDuration(fade, 500, 200)
82
+ expect(result.enterTransition).toContain("500ms")
83
+ expect(result.leaveTransition).toContain("200ms")
84
+ })
85
+
86
+ it("preserves easing", () => {
87
+ const result = withDuration(fade, 500)
88
+ expect(result.enterTransition).toContain("ease-out")
89
+ })
90
+
91
+ it("preserves style properties", () => {
92
+ const result = withDuration(fadeUp, 500)
93
+ expect(result.enterStyle).toEqual(fadeUp.enterStyle)
94
+ expect(result.enterToStyle).toEqual(fadeUp.enterToStyle)
95
+ })
96
+ })
97
+
98
+ describe("withEasing", () => {
99
+ it("overrides easing for both enter and leave", () => {
100
+ const result = withEasing(fade, "linear")
101
+ expect(result.enterTransition).toContain("linear")
102
+ expect(result.leaveTransition).toContain("linear")
103
+ })
104
+
105
+ it("overrides enter and leave separately", () => {
106
+ const result = withEasing(fade, "ease-out", "ease-in-out")
107
+ expect(result.leaveTransition).toContain("ease-in-out")
108
+ })
109
+
110
+ it("handles cubic-bezier easing", () => {
111
+ const spring = "cubic-bezier(0.34, 1.56, 0.64, 1)"
112
+ const result = withEasing(fadeUp, spring)
113
+ expect(result.enterTransition).toContain(spring)
114
+ })
115
+
116
+ it("preserves duration", () => {
117
+ const result = withEasing(fade, "linear")
118
+ expect(result.enterTransition).toContain("300ms")
119
+ })
120
+ })
121
+
122
+ describe("withDelay", () => {
123
+ it("adds delay to both transitions", () => {
124
+ const result = withDelay(fade, 100)
125
+ expect(result.enterTransition).toContain("100ms")
126
+ expect(result.leaveTransition).toContain("100ms")
127
+ })
128
+
129
+ it("adds different delays for enter and leave", () => {
130
+ const result = withDelay(fade, 200, 0)
131
+ expect(result.enterTransition).toContain("200ms")
132
+ expect(result.leaveTransition).toContain("0ms")
133
+ })
134
+
135
+ it("preserves original duration", () => {
136
+ const result = withDelay(fade, 100)
137
+ expect(result.enterTransition).toContain("300ms")
138
+ })
139
+ })
140
+
141
+ describe("compose — edge cases", () => {
142
+ it("handles presets with only class-based fields (no styles)", () => {
143
+ const a: Preset = { enter: "e-a", leave: "l-a" }
144
+ const b: Preset = { enterFrom: "ef-b", leaveFrom: "lf-b" }
145
+ const result = compose(a, b)
146
+ expect(result.enter).toBe("e-a")
147
+ expect(result.enterFrom).toBe("ef-b")
148
+ expect(result.leave).toBe("l-a")
149
+ expect(result.leaveFrom).toBe("lf-b")
150
+ })
151
+
152
+ it("does not concatenate when first preset has no class", () => {
153
+ const a: Preset = {}
154
+ const b: Preset = { enter: "enter-b" }
155
+ const result = compose(a, b)
156
+ expect(result.enter).toBe("enter-b")
157
+ })
158
+
159
+ it("preserves first preset class when second has none", () => {
160
+ const a: Preset = { enter: "enter-a" }
161
+ const b: Preset = {}
162
+ const result = compose(a, b)
163
+ expect(result.enter).toBe("enter-a")
164
+ })
165
+
166
+ it("mergeStyle returns a when b is undefined", () => {
167
+ const a: Preset = { enterStyle: { opacity: 0 } }
168
+ const b: Preset = {}
169
+ const result = compose(a, b)
170
+ expect(result.enterStyle).toEqual({ opacity: 0 })
171
+ })
172
+
173
+ it("transitions from last preset override earlier", () => {
174
+ const a: Preset = { enterTransition: "all 100ms ease" }
175
+ const b: Preset = { enterTransition: "all 500ms linear" }
176
+ const result = compose(a, b)
177
+ expect(result.enterTransition).toBe("all 500ms linear")
178
+ })
179
+
180
+ it("does not override transitions when later preset omits them", () => {
181
+ const a: Preset = { enterTransition: "all 100ms ease" }
182
+ const b: Preset = {}
183
+ const result = compose(a, b)
184
+ expect(result.enterTransition).toBe("all 100ms ease")
185
+ })
186
+ })
187
+
188
+ describe("withDuration — edge cases", () => {
189
+ it("handles preset with empty transition string", () => {
190
+ const preset: Preset = { enterTransition: "", leaveTransition: "" }
191
+ const result = withDuration(preset, 500)
192
+ // replaceDuration on empty string — no match, returns unchanged
193
+ expect(result.enterTransition).toBeDefined()
194
+ expect(result.leaveTransition).toBeDefined()
195
+ })
196
+
197
+ it("handles preset with no transition (undefined ?? fallback)", () => {
198
+ const preset: Preset = {}
199
+ const result = withDuration(preset, 500)
200
+ expect(result.enterTransition).toBeDefined()
201
+ expect(result.leaveTransition).toBeDefined()
202
+ })
203
+ })
204
+
205
+ describe("withEasing — undefined transitions", () => {
206
+ it("handles preset with no transition (undefined ?? fallback)", () => {
207
+ const preset: Preset = {}
208
+ const result = withEasing(preset, "ease-out")
209
+ expect(result.enterTransition).toBeDefined()
210
+ expect(result.leaveTransition).toBeDefined()
211
+ })
212
+ })
213
+
214
+ describe("withEasing — edge cases", () => {
215
+ it("handles original cubic-bezier easing", () => {
216
+ const preset: Preset = {
217
+ enterTransition: "all 300ms cubic-bezier(0.4, 0, 0.2, 1)",
218
+ leaveTransition: "all 200ms cubic-bezier(0.4, 0, 0.2, 1)",
219
+ }
220
+ const result = withEasing(preset, "ease-out")
221
+ expect(result.enterTransition).toContain("ease-out")
222
+ expect(result.enterTransition).not.toContain("cubic-bezier")
223
+ })
224
+
225
+ it("uses leaveEasing when provided", () => {
226
+ const result = withEasing(fade, "ease-out", "ease-in")
227
+ expect(result.enterTransition).toContain("ease-out")
228
+ expect(result.leaveTransition).toContain("ease-in")
229
+ })
230
+ })
231
+
232
+ describe("withDelay — edge cases", () => {
233
+ it("uses leaveDelayMs when provided", () => {
234
+ const result = withDelay(fade, 100, 50)
235
+ expect(result.enterTransition).toContain("100ms")
236
+ expect(result.leaveTransition).toContain("50ms")
237
+ })
238
+
239
+ it("handles preset with no transition string", () => {
240
+ const preset: Preset = {}
241
+ const result = withDelay(preset, 100)
242
+ expect(result.enterTransition).toBeDefined()
243
+ expect(result.leaveTransition).toBeDefined()
244
+ })
245
+
246
+ it("inserts delay between duration and easing", () => {
247
+ const preset: Preset = {
248
+ enterTransition: "opacity 300ms ease-out",
249
+ leaveTransition: "opacity 200ms ease-in",
250
+ }
251
+ const result = withDelay(preset, 150)
252
+ expect(result.enterTransition).toBe("opacity 300ms 150ms ease-out")
253
+ })
254
+ })
255
+
256
+ describe("withEasing — replaceEasing edge cases", () => {
257
+ it("replaces ease-in-out easing", () => {
258
+ const preset: Preset = {
259
+ enterTransition: "all 300ms ease-in-out",
260
+ leaveTransition: "all 200ms ease-in-out",
261
+ }
262
+ const result = withEasing(preset, "linear")
263
+ expect(result.enterTransition).toBe("all 300ms linear")
264
+ })
265
+
266
+ it("replaces linear easing", () => {
267
+ const preset: Preset = {
268
+ enterTransition: "all 300ms linear",
269
+ leaveTransition: "all 200ms linear",
270
+ }
271
+ const result = withEasing(preset, "ease-out")
272
+ expect(result.enterTransition).toBe("all 300ms ease-out")
273
+ })
274
+
275
+ it("replaces ease easing", () => {
276
+ const preset: Preset = {
277
+ enterTransition: "all 300ms ease",
278
+ leaveTransition: "all 200ms ease",
279
+ }
280
+ const result = withEasing(preset, "ease-in")
281
+ expect(result.enterTransition).toBe("all 300ms ease-in")
282
+ })
283
+ })
284
+
285
+ describe("reverse", () => {
286
+ it("swaps enter and leave styles", () => {
287
+ const reversed = reverse(fadeUp)
288
+ expect(reversed.enterStyle).toEqual(fadeUp.leaveStyle)
289
+ expect(reversed.enterToStyle).toEqual(fadeUp.leaveToStyle)
290
+ expect(reversed.leaveStyle).toEqual(fadeUp.enterStyle)
291
+ expect(reversed.leaveToStyle).toEqual(fadeUp.enterToStyle)
292
+ })
293
+
294
+ it("swaps enter and leave transitions", () => {
295
+ const reversed = reverse(fadeUp)
296
+ expect(reversed.enterTransition).toBe(fadeUp.leaveTransition)
297
+ expect(reversed.leaveTransition).toBe(fadeUp.enterTransition)
298
+ })
299
+
300
+ it("swaps class-based properties", () => {
301
+ const preset: Preset = {
302
+ enter: "enter-class",
303
+ enterFrom: "enter-from",
304
+ enterTo: "enter-to",
305
+ leave: "leave-class",
306
+ leaveFrom: "leave-from",
307
+ leaveTo: "leave-to",
308
+ }
309
+ const reversed = reverse(preset)
310
+ expect(reversed.enter).toBe("leave-class")
311
+ expect(reversed.enterFrom).toBe("leave-from")
312
+ expect(reversed.enterTo).toBe("leave-to")
313
+ expect(reversed.leave).toBe("enter-class")
314
+ expect(reversed.leaveFrom).toBe("enter-from")
315
+ expect(reversed.leaveTo).toBe("enter-to")
316
+ })
317
+
318
+ it("double reverse returns original", () => {
319
+ const original = fadeUp
320
+ const doubleReversed = reverse(reverse(original))
321
+ expect(doubleReversed.enterStyle).toEqual(original.enterStyle)
322
+ expect(doubleReversed.enterToStyle).toEqual(original.enterToStyle)
323
+ expect(doubleReversed.leaveStyle).toEqual(original.leaveStyle)
324
+ expect(doubleReversed.leaveToStyle).toEqual(original.leaveToStyle)
325
+ })
326
+
327
+ it("handles preset with undefined fields", () => {
328
+ const sparse: Preset = { enterStyle: { opacity: 0 } }
329
+ const reversed = reverse(sparse)
330
+ expect(reversed.leaveStyle).toEqual({ opacity: 0 })
331
+ expect(reversed.enterStyle).toBeUndefined()
332
+ expect(reversed.enterToStyle).toBeUndefined()
333
+ expect(reversed.leaveToStyle).toBeUndefined()
334
+ expect(reversed.enterTransition).toBeUndefined()
335
+ expect(reversed.leaveTransition).toBeUndefined()
336
+ expect(reversed.enter).toBeUndefined()
337
+ expect(reversed.leave).toBeUndefined()
338
+ })
339
+ })
340
+
341
+ describe("compose — mergeStyles transitions", () => {
342
+ it("does not override leaveTransition when later preset omits it", () => {
343
+ const a: Preset = {
344
+ leaveTransition: "all 200ms ease",
345
+ }
346
+ const b: Preset = {}
347
+ const result = compose(a, b)
348
+ expect(result.leaveTransition).toBe("all 200ms ease")
349
+ })
350
+
351
+ it("later preset leaveTransition overrides earlier", () => {
352
+ const a: Preset = { leaveTransition: "all 200ms ease" }
353
+ const b: Preset = { leaveTransition: "all 500ms linear" }
354
+ const result = compose(a, b)
355
+ expect(result.leaveTransition).toBe("all 500ms linear")
356
+ })
357
+
358
+ it("merges leaveStyle and leaveToStyle", () => {
359
+ const a: Preset = {
360
+ leaveStyle: { opacity: 1 },
361
+ leaveToStyle: { opacity: 0 },
362
+ }
363
+ const b: Preset = {
364
+ leaveStyle: { transform: "scale(1)" },
365
+ leaveToStyle: { transform: "scale(0)" },
366
+ }
367
+ const result = compose(a, b)
368
+ expect(result.leaveStyle).toEqual({ opacity: 1, transform: "scale(1)" })
369
+ expect(result.leaveToStyle).toEqual({ opacity: 0, transform: "scale(0)" })
370
+ })
371
+
372
+ it("concatenates all leave class fields", () => {
373
+ const a: Preset = { leave: "l-a", leaveFrom: "lf-a", leaveTo: "lt-a" }
374
+ const b: Preset = { leave: "l-b", leaveFrom: "lf-b", leaveTo: "lt-b" }
375
+ const result = compose(a, b)
376
+ expect(result.leave).toBe("l-a l-b")
377
+ expect(result.leaveFrom).toBe("lf-a lf-b")
378
+ expect(result.leaveTo).toBe("lt-a lt-b")
379
+ })
380
+
381
+ it("concatenates enterTo classes", () => {
382
+ const a: Preset = { enterTo: "et-a" }
383
+ const b: Preset = { enterTo: "et-b" }
384
+ const result = compose(a, b)
385
+ expect(result.enterTo).toBe("et-a et-b")
386
+ })
387
+ })
@@ -0,0 +1,138 @@
1
+ import type {
2
+ BlurOptions,
3
+ CSSProperties,
4
+ Direction,
5
+ FadeOptions,
6
+ Preset,
7
+ RotateOptions,
8
+ ScaleOptions,
9
+ SlideOptions,
10
+ } from "./types"
11
+
12
+ const directionToTranslate = (direction: Direction, distance: number): string => {
13
+ switch (direction) {
14
+ case "up":
15
+ return `translateY(${distance}px)`
16
+ case "down":
17
+ return `translateY(${-distance}px)`
18
+ case "left":
19
+ return `translateX(${distance}px)`
20
+ case "right":
21
+ return `translateX(${-distance}px)`
22
+ }
23
+ }
24
+
25
+ const directionToZero = (direction: Direction): string => {
26
+ switch (direction) {
27
+ case "up":
28
+ case "down":
29
+ return "translateY(0)"
30
+ case "left":
31
+ case "right":
32
+ return "translateX(0)"
33
+ }
34
+ }
35
+
36
+ export const createFade = ({
37
+ direction,
38
+ distance = 16,
39
+ duration = 300,
40
+ leaveDuration = 200,
41
+ easing = "ease-out",
42
+ leaveEasing = "ease-in",
43
+ }: FadeOptions = {}): Preset => {
44
+ if (!direction) {
45
+ return {
46
+ enterStyle: { opacity: 0 },
47
+ enterToStyle: { opacity: 1 },
48
+ enterTransition: `all ${duration}ms ${easing}`,
49
+ leaveStyle: { opacity: 1 },
50
+ leaveToStyle: { opacity: 0 },
51
+ leaveTransition: `all ${leaveDuration}ms ${leaveEasing}`,
52
+ }
53
+ }
54
+ const translate = directionToTranslate(direction, distance)
55
+ const zero = directionToZero(direction)
56
+ return {
57
+ enterStyle: { opacity: 0, transform: translate },
58
+ enterToStyle: { opacity: 1, transform: zero },
59
+ enterTransition: `all ${duration}ms ${easing}`,
60
+ leaveStyle: { opacity: 1, transform: zero },
61
+ leaveToStyle: { opacity: 0, transform: translate },
62
+ leaveTransition: `all ${leaveDuration}ms ${leaveEasing}`,
63
+ }
64
+ }
65
+
66
+ export const createSlide = ({
67
+ direction = "up",
68
+ distance = 16,
69
+ duration = 300,
70
+ leaveDuration = 200,
71
+ easing = "ease-out",
72
+ leaveEasing = "ease-in",
73
+ }: SlideOptions = {}): Preset => {
74
+ const translate = directionToTranslate(direction, distance)
75
+ const zero = directionToZero(direction)
76
+ return {
77
+ enterStyle: { opacity: 0, transform: translate },
78
+ enterToStyle: { opacity: 1, transform: zero },
79
+ enterTransition: `all ${duration}ms ${easing}`,
80
+ leaveStyle: { opacity: 1, transform: zero },
81
+ leaveToStyle: { opacity: 0, transform: translate },
82
+ leaveTransition: `all ${leaveDuration}ms ${leaveEasing}`,
83
+ }
84
+ }
85
+
86
+ export const createScale = ({
87
+ from = 0.9,
88
+ duration = 300,
89
+ leaveDuration = 200,
90
+ easing = "ease-out",
91
+ leaveEasing = "ease-in",
92
+ }: ScaleOptions = {}): Preset => ({
93
+ enterStyle: { opacity: 0, transform: `scale(${from})` },
94
+ enterToStyle: { opacity: 1, transform: "scale(1)" },
95
+ enterTransition: `all ${duration}ms ${easing}`,
96
+ leaveStyle: { opacity: 1, transform: "scale(1)" },
97
+ leaveToStyle: { opacity: 0, transform: `scale(${from})` },
98
+ leaveTransition: `all ${leaveDuration}ms ${leaveEasing}`,
99
+ })
100
+
101
+ export const createRotate = ({
102
+ degrees = 15,
103
+ duration = 300,
104
+ leaveDuration = 200,
105
+ easing = "ease-out",
106
+ leaveEasing = "ease-in",
107
+ }: RotateOptions = {}): Preset => ({
108
+ enterStyle: { opacity: 0, transform: `rotate(${-degrees}deg)` },
109
+ enterToStyle: { opacity: 1, transform: "rotate(0)" },
110
+ enterTransition: `all ${duration}ms ${easing}`,
111
+ leaveStyle: { opacity: 1, transform: "rotate(0)" },
112
+ leaveToStyle: { opacity: 0, transform: `rotate(${degrees}deg)` },
113
+ leaveTransition: `all ${leaveDuration}ms ${leaveEasing}`,
114
+ })
115
+
116
+ export const createBlur = ({
117
+ amount = 8,
118
+ scale,
119
+ duration = 300,
120
+ leaveDuration = 200,
121
+ easing = "ease-out",
122
+ leaveEasing = "ease-in",
123
+ }: BlurOptions = {}): Preset => {
124
+ const hidden: CSSProperties = { opacity: 0, filter: `blur(${amount}px)` }
125
+ const visible: CSSProperties = { opacity: 1, filter: "blur(0px)" }
126
+ if (scale !== undefined) {
127
+ hidden.transform = `scale(${scale})`
128
+ visible.transform = "scale(1)"
129
+ }
130
+ return {
131
+ enterStyle: hidden,
132
+ enterToStyle: visible,
133
+ enterTransition: `all ${duration}ms ${easing}`,
134
+ leaveStyle: visible,
135
+ leaveToStyle: hidden,
136
+ leaveTransition: `all ${leaveDuration}ms ${leaveEasing}`,
137
+ }
138
+ }
package/src/index.ts ADDED
@@ -0,0 +1,137 @@
1
+ export { createBlur, createFade, createRotate, createScale, createSlide } from "./factories"
2
+ export {
3
+ backInDown,
4
+ backInLeft,
5
+ backInRight,
6
+ backInUp,
7
+ blurIn,
8
+ blurInDown,
9
+ blurInLeft,
10
+ blurInRight,
11
+ blurInUp,
12
+ blurScale,
13
+ bounceIn,
14
+ bounceInDown,
15
+ bounceInLeft,
16
+ bounceInRight,
17
+ bounceInUp,
18
+ clipBottom,
19
+ clipCenter,
20
+ clipCircle,
21
+ clipCorner,
22
+ clipDiamond,
23
+ clipLeft,
24
+ clipRight,
25
+ clipTop,
26
+ drop,
27
+ expandX,
28
+ expandY,
29
+ fade,
30
+ fadeDown,
31
+ fadeDownBig,
32
+ fadeDownLeft,
33
+ fadeDownRight,
34
+ fadeLeft,
35
+ fadeLeftBig,
36
+ fadeRight,
37
+ fadeRightBig,
38
+ fadeScale,
39
+ fadeUp,
40
+ fadeUpBig,
41
+ fadeUpLeft,
42
+ fadeUpRight,
43
+ flipDiagonal,
44
+ flipDiagonalReverse,
45
+ flipX,
46
+ flipXReverse,
47
+ flipY,
48
+ flipYReverse,
49
+ floatDown,
50
+ floatLeft,
51
+ floatRight,
52
+ floatUp,
53
+ flyInDown,
54
+ flyInLeft,
55
+ flyInRight,
56
+ flyInUp,
57
+ lightSpeedInLeft,
58
+ lightSpeedInRight,
59
+ newspaperIn,
60
+ perspectiveDown,
61
+ perspectiveLeft,
62
+ perspectiveRight,
63
+ perspectiveUp,
64
+ popIn,
65
+ presets,
66
+ puffIn,
67
+ puffOut,
68
+ pushInLeft,
69
+ pushInRight,
70
+ rise,
71
+ rollInLeft,
72
+ rollInRight,
73
+ rotateIn,
74
+ rotateInDown,
75
+ rotateInReverse,
76
+ rotateInUp,
77
+ rubberIn,
78
+ scaleDown,
79
+ scaleIn,
80
+ scaleInDown,
81
+ scaleInLeft,
82
+ scaleInRight,
83
+ scaleInUp,
84
+ scaleOut,
85
+ scaleRotateIn,
86
+ scaleUp,
87
+ skewIn,
88
+ skewInReverse,
89
+ skewInY,
90
+ skewInYReverse,
91
+ slideDown,
92
+ slideDownBig,
93
+ slideLeft,
94
+ slideLeftBig,
95
+ slideRight,
96
+ slideRightBig,
97
+ slideUp,
98
+ slideUpBig,
99
+ slitHorizontal,
100
+ slitVertical,
101
+ spinIn,
102
+ spinInReverse,
103
+ springIn,
104
+ squishX,
105
+ squishY,
106
+ swingInBottom,
107
+ swingInLeft,
108
+ swingInRight,
109
+ swingInTop,
110
+ swirlIn,
111
+ swirlInReverse,
112
+ tiltInDown,
113
+ tiltInLeft,
114
+ tiltInRight,
115
+ tiltInUp,
116
+ zoomIn,
117
+ zoomInDown,
118
+ zoomInLeft,
119
+ zoomInRight,
120
+ zoomInUp,
121
+ zoomOut,
122
+ zoomOutDown,
123
+ zoomOutLeft,
124
+ zoomOutRight,
125
+ zoomOutUp,
126
+ } from "./presets"
127
+ export type {
128
+ BlurOptions,
129
+ CSSProperties,
130
+ Direction,
131
+ FadeOptions,
132
+ Preset,
133
+ RotateOptions,
134
+ ScaleOptions,
135
+ SlideOptions,
136
+ } from "./types"
137
+ export { compose, reverse, withDelay, withDuration, withEasing } from "./utils"