react-gsap-aos 1.0.0

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/dist/index.mjs ADDED
@@ -0,0 +1,731 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+
21
+ // src/animation/constants.ts
22
+ var DEFAULT_OPTIONS = {
23
+ offset: 120,
24
+ delay: 0,
25
+ duration: 400,
26
+ easing: "none",
27
+ once: false,
28
+ mirror: false,
29
+ anchorPlacement: "top-bottom"
30
+ };
31
+ var easings = [
32
+ "none",
33
+ "power1",
34
+ "power1.in",
35
+ "power1.out",
36
+ "power1.inOut",
37
+ "power2",
38
+ "power2.in",
39
+ "power2.out",
40
+ "power2.inOut",
41
+ "power3",
42
+ "power3.in",
43
+ "power3.out",
44
+ "power3.inOut",
45
+ "power4",
46
+ "power4.in",
47
+ "power4.out",
48
+ "power4.inOut",
49
+ "back",
50
+ "back.in",
51
+ "back.out",
52
+ "back.inOut",
53
+ "bounce",
54
+ "bounce.in",
55
+ "bounce.out",
56
+ "bounce.inOut",
57
+ "circ",
58
+ "circ.in",
59
+ "circ.out",
60
+ "circ.inOut",
61
+ "elastic",
62
+ "elastic.in",
63
+ "elastic.out",
64
+ "elastic.inOut",
65
+ "expo",
66
+ "expo.in",
67
+ "expo.out",
68
+ "expo.inOut",
69
+ "sine",
70
+ "sine.in",
71
+ "sine.out",
72
+ "sine.inOut"
73
+ ];
74
+ var anchorPlacements = [
75
+ "top-bottom",
76
+ "top-center",
77
+ "top-top",
78
+ "center-bottom",
79
+ "center-center",
80
+ "center-top",
81
+ "bottom-bottom",
82
+ "bottom-center",
83
+ "bottom-top"
84
+ ];
85
+
86
+ // src/constants.ts
87
+ var animations = [
88
+ "fade",
89
+ "fade-up",
90
+ "fade-down",
91
+ "fade-left",
92
+ "fade-right",
93
+ "fade-up-right",
94
+ "fade-up-left",
95
+ "fade-down-right",
96
+ "fade-down-left",
97
+ "flip-up",
98
+ "flip-down",
99
+ "flip-left",
100
+ "flip-right",
101
+ "slide-up",
102
+ "slide-down",
103
+ "slide-left",
104
+ "slide-right",
105
+ "zoom-in",
106
+ "zoom-in-up",
107
+ "zoom-in-down",
108
+ "zoom-in-left",
109
+ "zoom-in-right",
110
+ "zoom-out",
111
+ "zoom-out-up",
112
+ "zoom-out-down",
113
+ "zoom-out-left",
114
+ "zoom-out-right"
115
+ ];
116
+
117
+ // src/hooks/useAOSInitial.ts
118
+ import { useLayoutEffect, useRef } from "react";
119
+ import { useGSAP } from "@gsap/react";
120
+ import gsap2 from "gsap";
121
+
122
+ // src/animation/utils/parseAttributes.ts
123
+ var AOS_ATTRIBUTE_MAP = {
124
+ "data-aos-offset": "offset",
125
+ "data-aos-delay": "delay",
126
+ "data-aos-duration": "duration",
127
+ "data-aos-easing": "easing",
128
+ "data-aos-mirror": "mirror",
129
+ "data-aos-once": "once",
130
+ "data-aos-anchor-placement": "anchorPlacement"
131
+ };
132
+ function parseAttributes(element) {
133
+ const options = {};
134
+ for (const key of Object.keys(AOS_ATTRIBUTE_MAP)) {
135
+ const value = element.getAttribute(key);
136
+ if (value) {
137
+ const prop = AOS_ATTRIBUTE_MAP[key];
138
+ switch (prop) {
139
+ case "offset":
140
+ case "delay":
141
+ case "duration": {
142
+ const numberValue = parseNumber(value);
143
+ if (!Number.isNaN(numberValue)) {
144
+ options[prop] = numberValue;
145
+ }
146
+ break;
147
+ }
148
+ case "easing": {
149
+ const easing = parseEnum(easings, value);
150
+ if (easing) {
151
+ options[prop] = easing;
152
+ }
153
+ break;
154
+ }
155
+ case "once":
156
+ case "mirror": {
157
+ const booleanValue = parseBoolean(value);
158
+ if (typeof booleanValue === "boolean") {
159
+ options[prop] = booleanValue;
160
+ }
161
+ break;
162
+ }
163
+ case "anchorPlacement": {
164
+ const anchorPlacement = parseEnum(anchorPlacements, value);
165
+ if (anchorPlacement) {
166
+ options[prop] = anchorPlacement;
167
+ }
168
+ break;
169
+ }
170
+ }
171
+ }
172
+ }
173
+ return options;
174
+ }
175
+ function parseEnum(list, value) {
176
+ return list.includes(value) ? value : void 0;
177
+ }
178
+ function parseBoolean(value) {
179
+ switch (value) {
180
+ case "true":
181
+ return true;
182
+ case "false":
183
+ return false;
184
+ default:
185
+ break;
186
+ }
187
+ }
188
+ function parseNumber(value) {
189
+ return parseInt(value, 10);
190
+ }
191
+
192
+ // src/animation/animations.ts
193
+ import gsap from "gsap";
194
+
195
+ // src/animation/utils/mergeOptions.ts
196
+ function mergeOptions(...array) {
197
+ const result = __spreadValues({}, DEFAULT_OPTIONS);
198
+ for (const options of array) {
199
+ if (!options) continue;
200
+ for (const key of Object.keys(options)) {
201
+ switch (key) {
202
+ case "offset":
203
+ case "delay":
204
+ case "duration": {
205
+ const value = options[key];
206
+ if (typeof value === "number" && !Number.isNaN(value) && !Number.isFinite(value)) {
207
+ result[key] = value;
208
+ }
209
+ break;
210
+ }
211
+ case "easing": {
212
+ const value = options[key];
213
+ if (verifyEnum(easings, value)) {
214
+ result[key] = value;
215
+ }
216
+ break;
217
+ }
218
+ case "once":
219
+ case "mirror": {
220
+ const value = options[key];
221
+ if (typeof value === "boolean") {
222
+ result[key] = value;
223
+ }
224
+ break;
225
+ }
226
+ case "anchorPlacement": {
227
+ const value = options[key];
228
+ if (verifyEnum(anchorPlacements, value)) {
229
+ result[key] = value;
230
+ }
231
+ break;
232
+ }
233
+ default:
234
+ break;
235
+ }
236
+ }
237
+ }
238
+ return result;
239
+ }
240
+ function verifyEnum(list, value) {
241
+ return Boolean(value && list.includes(value));
242
+ }
243
+
244
+ // src/animation/utils/createTweenVars.ts
245
+ function translate3d(x, y, z) {
246
+ return { x, y, z };
247
+ }
248
+ function rotateY(y) {
249
+ return { rotateY: y };
250
+ }
251
+ function rotateX(x) {
252
+ return { rotateX: x };
253
+ }
254
+ function scale(x, y) {
255
+ return typeof y === "number" ? {
256
+ scaleX: x,
257
+ scaleY: y
258
+ } : {
259
+ scale: x
260
+ };
261
+ }
262
+ function perspective(value) {
263
+ return {
264
+ transformPerspective: value
265
+ };
266
+ }
267
+
268
+ // src/animation/definitions.ts
269
+ var DISTANCE = 100;
270
+ var presets = {
271
+ fade: {
272
+ from: {
273
+ opacity: 0,
274
+ transitionProperty: "opacity, transform"
275
+ },
276
+ to: {
277
+ opacity: 1,
278
+ transform: "none"
279
+ }
280
+ },
281
+ zoom: {
282
+ from: {
283
+ opacity: 0,
284
+ transitionProperty: "opacity, transform"
285
+ },
286
+ to: __spreadValues(__spreadValues({
287
+ opacity: 1
288
+ }, translate3d(0, 0, 0)), scale(1))
289
+ },
290
+ slide: {
291
+ from: {
292
+ visibility: "hidden",
293
+ transitionProperty: "transform"
294
+ },
295
+ to: __spreadValues({
296
+ visibility: "visible"
297
+ }, translate3d(0, 0, 0))
298
+ },
299
+ flip: {
300
+ from: {
301
+ backfaceVisibility: "hidden",
302
+ transitionProperty: "transform"
303
+ },
304
+ to: {}
305
+ }
306
+ };
307
+ var definitions = {
308
+ fade: {
309
+ preset: presets.fade,
310
+ vars: {
311
+ from: {},
312
+ to: {}
313
+ }
314
+ },
315
+ fadeUp: {
316
+ preset: presets.fade,
317
+ vars: {
318
+ from: translate3d(0, DISTANCE, 0),
319
+ to: {}
320
+ }
321
+ },
322
+ fadeDown: {
323
+ preset: presets.fade,
324
+ vars: {
325
+ from: translate3d(0, -DISTANCE, 0),
326
+ to: {}
327
+ }
328
+ },
329
+ fadeLeft: {
330
+ preset: presets.fade,
331
+ vars: {
332
+ from: translate3d(DISTANCE, 0, 0),
333
+ to: {}
334
+ }
335
+ },
336
+ fadeRight: {
337
+ preset: presets.fade,
338
+ vars: {
339
+ from: translate3d(-DISTANCE, 0, 0),
340
+ to: {}
341
+ }
342
+ },
343
+ fadeUpRight: {
344
+ preset: presets.fade,
345
+ vars: {
346
+ from: translate3d(-DISTANCE, DISTANCE, 0),
347
+ to: {}
348
+ }
349
+ },
350
+ fadeUpLeft: {
351
+ preset: presets.fade,
352
+ vars: {
353
+ from: translate3d(DISTANCE, DISTANCE, 0),
354
+ to: {}
355
+ }
356
+ },
357
+ fadeDownRight: {
358
+ preset: presets.fade,
359
+ vars: {
360
+ from: translate3d(-DISTANCE, -DISTANCE, 0),
361
+ to: {}
362
+ }
363
+ },
364
+ fadeDownLeft: {
365
+ preset: presets.fade,
366
+ vars: {
367
+ from: translate3d(DISTANCE, -DISTANCE, 0),
368
+ to: {}
369
+ }
370
+ },
371
+ flipUp: {
372
+ preset: presets.flip,
373
+ vars: {
374
+ from: __spreadValues(__spreadValues({}, perspective(2500)), rotateX("-100deg")),
375
+ to: __spreadValues(__spreadValues({}, perspective(2500)), rotateX(0))
376
+ }
377
+ },
378
+ flipDown: {
379
+ preset: presets.flip,
380
+ vars: {
381
+ from: __spreadValues(__spreadValues({}, perspective(2500)), rotateX("100deg")),
382
+ to: __spreadValues(__spreadValues({}, perspective(2500)), rotateX(0))
383
+ }
384
+ },
385
+ flipLeft: {
386
+ preset: presets.flip,
387
+ vars: {
388
+ from: __spreadValues(__spreadValues({}, perspective(2500)), rotateY("-100deg")),
389
+ to: __spreadValues(__spreadValues({}, perspective(2500)), rotateY(0))
390
+ }
391
+ },
392
+ flipRight: {
393
+ preset: presets.flip,
394
+ vars: {
395
+ from: __spreadValues(__spreadValues({}, perspective(2500)), rotateY("100deg")),
396
+ to: __spreadValues(__spreadValues({}, perspective(2500)), rotateY(0))
397
+ }
398
+ },
399
+ slideUp: {
400
+ preset: presets.slide,
401
+ vars: {
402
+ from: translate3d(0, "100%", 0),
403
+ to: {}
404
+ }
405
+ },
406
+ slideDown: {
407
+ preset: presets.slide,
408
+ vars: {
409
+ from: translate3d(0, "-100%", 0),
410
+ to: {}
411
+ }
412
+ },
413
+ slideLeft: {
414
+ preset: presets.slide,
415
+ vars: {
416
+ from: translate3d("100%", 0, 0),
417
+ to: {}
418
+ }
419
+ },
420
+ slideRight: {
421
+ preset: presets.slide,
422
+ vars: {
423
+ from: translate3d("-100%", 0, 0),
424
+ to: {}
425
+ }
426
+ },
427
+ zoomIn: { preset: presets.zoom, vars: { from: scale(0.6), to: {} } },
428
+ zoomInUp: {
429
+ preset: presets.zoom,
430
+ vars: {
431
+ from: __spreadValues(__spreadValues({}, translate3d(0, DISTANCE, 0)), scale(0.6)),
432
+ to: {}
433
+ }
434
+ },
435
+ zoomInDown: {
436
+ preset: presets.zoom,
437
+ vars: {
438
+ from: __spreadValues(__spreadValues({}, translate3d(0, -DISTANCE, 0)), scale(0.6)),
439
+ to: {}
440
+ }
441
+ },
442
+ zoomInLeft: {
443
+ preset: presets.zoom,
444
+ vars: {
445
+ from: __spreadValues(__spreadValues({}, translate3d(DISTANCE, 0, 0)), scale(0.6)),
446
+ to: {}
447
+ }
448
+ },
449
+ zoomInRight: {
450
+ preset: presets.zoom,
451
+ vars: {
452
+ from: __spreadValues(__spreadValues({}, translate3d(-DISTANCE, 0, 0)), scale(0.6)),
453
+ to: {}
454
+ }
455
+ },
456
+ zoomOut: { preset: presets.zoom, vars: { from: scale(1.2), to: {} } },
457
+ zoomOutUp: {
458
+ preset: presets.zoom,
459
+ vars: {
460
+ from: __spreadValues(__spreadValues({}, translate3d(0, DISTANCE, 0)), scale(1.2)),
461
+ to: {}
462
+ }
463
+ },
464
+ zoomOutDown: {
465
+ preset: presets.zoom,
466
+ vars: {
467
+ from: __spreadValues(__spreadValues({}, translate3d(0, -DISTANCE, 0)), scale(1.2)),
468
+ to: {}
469
+ }
470
+ },
471
+ zoomOutLeft: {
472
+ preset: presets.zoom,
473
+ vars: {
474
+ from: __spreadValues(__spreadValues({}, translate3d(DISTANCE, 0, 0)), scale(1.2)),
475
+ to: {}
476
+ }
477
+ },
478
+ zoomOutRight: {
479
+ preset: presets.zoom,
480
+ vars: {
481
+ from: __spreadValues(__spreadValues({}, translate3d(-DISTANCE, 0, 0)), scale(1.2)),
482
+ to: {}
483
+ }
484
+ }
485
+ };
486
+ var definitions_default = definitions;
487
+
488
+ // src/animation/animations.ts
489
+ function scrollTriggerStart(anchorPlacement, offset) {
490
+ const [v1, v2] = anchorPlacement.split("-");
491
+ const anchor = `${v1} ${v2}`;
492
+ if (offset === 0 || Number.isNaN(offset)) return anchor;
493
+ const fix = `${offset > 0 ? "-" : "+"}=${Math.abs(offset)}`;
494
+ return `${anchor}${fix}`;
495
+ }
496
+ function createScrollTriggerTween(element, preset, vars, options) {
497
+ var _a;
498
+ const { from, to } = vars;
499
+ const { offset, delay, duration, easing, once, mirror, anchorPlacement } = mergeOptions(options);
500
+ const container = ((_a = element.parentElement) == null ? void 0 : _a.hasAttribute("data-aos-container")) ? element.parentElement : null;
501
+ return gsap.fromTo(
502
+ element,
503
+ __spreadValues(__spreadValues({}, preset.from), from),
504
+ __spreadProps(__spreadValues(__spreadValues({}, preset.to), to), {
505
+ ease: easing,
506
+ duration: duration / 1e3,
507
+ delay: delay / 1e3,
508
+ overwrite: "auto",
509
+ scrollTrigger: {
510
+ // markers: true,
511
+ trigger: container || element,
512
+ toggleActions: mirror ? "play reverse play reverse" : "play none none reverse",
513
+ once,
514
+ start: scrollTriggerStart(anchorPlacement, offset)
515
+ }
516
+ })
517
+ );
518
+ }
519
+ function createAnimationMap(definitions2) {
520
+ const result = {};
521
+ const keys = Object.keys(definitions2);
522
+ for (const key of keys) {
523
+ const { preset, vars } = definitions2[key];
524
+ result[key] = (element, options) => createScrollTriggerTween(element, preset, vars, options);
525
+ }
526
+ return result;
527
+ }
528
+ var animations2 = createAnimationMap(definitions_default);
529
+ var animations_default = animations2;
530
+
531
+ // src/animation/createAnimation.ts
532
+ var ANIMATION_REGISTRY = {
533
+ fade: animations_default.fade,
534
+ "fade-up": animations_default.fadeUp,
535
+ "fade-down": animations_default.fadeDown,
536
+ "fade-left": animations_default.fadeLeft,
537
+ "fade-right": animations_default.fadeRight,
538
+ "fade-up-right": animations_default.fadeUpRight,
539
+ "fade-up-left": animations_default.fadeUpLeft,
540
+ "fade-down-right": animations_default.fadeDownRight,
541
+ "fade-down-left": animations_default.fadeDownLeft,
542
+ "flip-up": animations_default.flipUp,
543
+ "flip-down": animations_default.flipDown,
544
+ "flip-left": animations_default.flipLeft,
545
+ "flip-right": animations_default.flipRight,
546
+ "slide-up": animations_default.slideUp,
547
+ "slide-down": animations_default.slideDown,
548
+ "slide-left": animations_default.slideLeft,
549
+ "slide-right": animations_default.slideRight,
550
+ "zoom-in": animations_default.zoomIn,
551
+ "zoom-in-up": animations_default.zoomInUp,
552
+ "zoom-in-down": animations_default.zoomInDown,
553
+ "zoom-in-left": animations_default.zoomInLeft,
554
+ "zoom-in-right": animations_default.zoomInRight,
555
+ "zoom-out": animations_default.zoomOut,
556
+ "zoom-out-up": animations_default.zoomOutUp,
557
+ "zoom-out-down": animations_default.zoomOutDown,
558
+ "zoom-out-left": animations_default.zoomOutLeft,
559
+ "zoom-out-right": animations_default.zoomOutRight
560
+ };
561
+ function createAnimation(element, options) {
562
+ const animate = element.getAttribute("data-aos");
563
+ if (!animate) return;
564
+ const handleAnimation = ANIMATION_REGISTRY[animate];
565
+ if (!handleAnimation) return;
566
+ return handleAnimation(element, __spreadValues(__spreadValues({}, options), parseAttributes(element)));
567
+ }
568
+
569
+ // src/hooks/useAOSInitial.ts
570
+ gsap2.registerPlugin(useGSAP);
571
+ var AOS_ATTRIBUTE_KEYS = [
572
+ "data-aos",
573
+ "data-aos-offset",
574
+ "data-aos-delay",
575
+ "data-aos-duration",
576
+ "data-aos-easing",
577
+ "data-aos-mirror",
578
+ "data-aos-once",
579
+ "data-aos-anchor-placement"
580
+ ];
581
+ var AOS_SELECTORS = "[data-aos]";
582
+ function useAOSInitial(options) {
583
+ const containerRef = useRef(null);
584
+ const observerRef = useRef(null);
585
+ const elementAnimations = useRef(
586
+ /* @__PURE__ */ new WeakMap()
587
+ );
588
+ const optionsRef = useRef(options);
589
+ useLayoutEffect(() => {
590
+ optionsRef.current = options;
591
+ }, [options]);
592
+ useGSAP(
593
+ (_, contextSafe) => {
594
+ if (!containerRef.current || !contextSafe) return;
595
+ const removeAnimation = (element) => {
596
+ const animation = elementAnimations.current.get(element);
597
+ if (!animation) return;
598
+ animation.kill();
599
+ elementAnimations.current.delete(element);
600
+ };
601
+ const addAnimation = (element) => {
602
+ const newAnimation = createAnimation(element, optionsRef.current);
603
+ if (!newAnimation) return;
604
+ elementAnimations.current.set(element, newAnimation);
605
+ };
606
+ const updateAnimation = (element) => {
607
+ const prevAnimation = elementAnimations.current.get(element);
608
+ if (prevAnimation) {
609
+ prevAnimation.kill();
610
+ elementAnimations.current.delete(element);
611
+ gsap2.set(element, prevAnimation.vars).kill();
612
+ }
613
+ addAnimation(element);
614
+ };
615
+ const handleMutation = contextSafe((mutations) => {
616
+ const addedElements = [];
617
+ const removedElements = [];
618
+ const updatedElements = [];
619
+ for (const mutation of mutations) {
620
+ switch (mutation.type) {
621
+ case "attributes": {
622
+ if (!(mutation.target instanceof HTMLElement)) continue;
623
+ const element = mutation.target;
624
+ updatedElements.push(element);
625
+ break;
626
+ }
627
+ case "childList": {
628
+ addedElements.push(...collectElements(mutation.addedNodes));
629
+ removedElements.push(...collectElements(mutation.removedNodes));
630
+ break;
631
+ }
632
+ default:
633
+ break;
634
+ }
635
+ }
636
+ for (const element of removedElements) {
637
+ removeAnimation(element);
638
+ }
639
+ for (const element of addedElements) {
640
+ addAnimation(element);
641
+ }
642
+ for (const element of updatedElements) {
643
+ updateAnimation(element);
644
+ }
645
+ });
646
+ for (const element of gsap2.utils.toArray(
647
+ AOS_SELECTORS,
648
+ containerRef.current
649
+ )) {
650
+ addAnimation(element);
651
+ }
652
+ observerRef.current = new MutationObserver(handleMutation);
653
+ observerRef.current.observe(containerRef.current, {
654
+ childList: true,
655
+ subtree: true,
656
+ attributes: true,
657
+ attributeFilter: AOS_ATTRIBUTE_KEYS
658
+ });
659
+ return () => {
660
+ if (observerRef.current) {
661
+ observerRef.current.disconnect();
662
+ observerRef.current = null;
663
+ }
664
+ };
665
+ },
666
+ { scope: containerRef, dependencies: [] }
667
+ );
668
+ return { containerRef };
669
+ }
670
+ function collectElements(nodes) {
671
+ const elements = [];
672
+ for (const node of nodes) {
673
+ if (!(node instanceof HTMLElement)) continue;
674
+ if (node.matches(AOS_SELECTORS)) elements.push(node);
675
+ elements.push(...node.querySelectorAll(AOS_SELECTORS));
676
+ }
677
+ return elements;
678
+ }
679
+
680
+ // src/utils/refreshAOS.ts
681
+ import gsap3 from "gsap";
682
+ import { ScrollTrigger } from "gsap/ScrollTrigger";
683
+ gsap3.registerPlugin(ScrollTrigger);
684
+ function refreshAOS() {
685
+ ScrollTrigger.refresh(true);
686
+ }
687
+
688
+ // src/utils/toAOSProps.ts
689
+ function toAOSProps(options) {
690
+ const attrs = {
691
+ "data-aos": options.animation,
692
+ "data-aos-offset": toNumberAttr(options.offset),
693
+ "data-aos-delay": toNumberAttr(options.delay),
694
+ "data-aos-duration": toNumberAttr(options.duration),
695
+ "data-aos-easing": validateEnumValue(easings, options.easing),
696
+ "data-aos-mirror": toBooleanAttr(options.mirror),
697
+ "data-aos-once": toBooleanAttr(options.once),
698
+ "data-aos-anchor-placement": validateEnumValue(
699
+ anchorPlacements,
700
+ options.anchorPlacement
701
+ )
702
+ };
703
+ return omitNil(attrs);
704
+ }
705
+ function omitNil(obj) {
706
+ const result = {};
707
+ for (const [key, value] of Object.entries(obj)) {
708
+ if (value !== void 0 && value !== null) {
709
+ result[key] = value;
710
+ }
711
+ }
712
+ return result;
713
+ }
714
+ function toBooleanAttr(value) {
715
+ return typeof value === "boolean" ? String(value) : void 0;
716
+ }
717
+ function toNumberAttr(value) {
718
+ return typeof value === "number" ? String(value) : void 0;
719
+ }
720
+ function validateEnumValue(list, value) {
721
+ return list.includes(value) ? value : void 0;
722
+ }
723
+ export {
724
+ anchorPlacements,
725
+ animations,
726
+ easings,
727
+ refreshAOS,
728
+ toAOSProps,
729
+ useAOSInitial
730
+ };
731
+ //# sourceMappingURL=index.mjs.map