elementdrawing 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.
Files changed (78) hide show
  1. package/LICENSE +21 -0
  2. package/dist/elementdrawing.min.js +3 -0
  3. package/dist/elementdrawing.min.js.LICENSE.txt +8 -0
  4. package/dist/elementdrawing.min.js.map +1 -0
  5. package/dist/index.html +1 -0
  6. package/package.json +127 -0
  7. package/src/core/bridge.h +855 -0
  8. package/src/core/diff.c +900 -0
  9. package/src/core/element.c +1078 -0
  10. package/src/core/event.c +813 -0
  11. package/src/core/fiber.c +1027 -0
  12. package/src/core/hooks.c +919 -0
  13. package/src/core/renderer.c +963 -0
  14. package/src/core/scheduler.c +702 -0
  15. package/src/core/state.c +803 -0
  16. package/src/css/animations.css +779 -0
  17. package/src/css/base.css +615 -0
  18. package/src/css/components.css +1311 -0
  19. package/src/css/tailwind.css +370 -0
  20. package/src/css/themes.css +517 -0
  21. package/src/css/utilities.css +475 -0
  22. package/src/index.js +746 -0
  23. package/src/js/animation.js +655 -0
  24. package/src/js/dom.js +665 -0
  25. package/src/js/events.js +585 -0
  26. package/src/js/http.js +446 -0
  27. package/src/js/index.js +26 -0
  28. package/src/js/router.js +483 -0
  29. package/src/js/store.js +539 -0
  30. package/src/js/utils.js +593 -0
  31. package/src/js/validator.js +529 -0
  32. package/src/jsx/components/Accordion.jsx +210 -0
  33. package/src/jsx/components/Alert.jsx +169 -0
  34. package/src/jsx/components/Avatar.jsx +214 -0
  35. package/src/jsx/components/Badge.jsx +136 -0
  36. package/src/jsx/components/Breadcrumb.jsx +200 -0
  37. package/src/jsx/components/Button.jsx +188 -0
  38. package/src/jsx/components/Card.jsx +192 -0
  39. package/src/jsx/components/Carousel.jsx +278 -0
  40. package/src/jsx/components/Checkbox.jsx +215 -0
  41. package/src/jsx/components/Dialog.jsx +242 -0
  42. package/src/jsx/components/Drawer.jsx +190 -0
  43. package/src/jsx/components/Dropdown.jsx +268 -0
  44. package/src/jsx/components/Form.jsx +274 -0
  45. package/src/jsx/components/Input.jsx +285 -0
  46. package/src/jsx/components/Menu.jsx +276 -0
  47. package/src/jsx/components/Modal.jsx +274 -0
  48. package/src/jsx/components/Navbar.jsx +292 -0
  49. package/src/jsx/components/Pagination.jsx +268 -0
  50. package/src/jsx/components/Progress.jsx +252 -0
  51. package/src/jsx/components/Radio.jsx +208 -0
  52. package/src/jsx/components/Select.jsx +397 -0
  53. package/src/jsx/components/Sidebar.jsx +250 -0
  54. package/src/jsx/components/Slider.jsx +310 -0
  55. package/src/jsx/components/Spinner.jsx +198 -0
  56. package/src/jsx/components/Switch.jsx +201 -0
  57. package/src/jsx/components/Table.jsx +332 -0
  58. package/src/jsx/components/Tabs.jsx +227 -0
  59. package/src/jsx/components/Textarea.jsx +212 -0
  60. package/src/jsx/components/Toast.jsx +270 -0
  61. package/src/jsx/components/Tooltip.jsx +178 -0
  62. package/src/jsx/components/Typography.jsx +299 -0
  63. package/src/jsx/components/index.jsx +70 -0
  64. package/src/jsx/core/element.js +3 -0
  65. package/src/jsx/hooks/index.js +356 -0
  66. package/src/jsx/hooks/useCallback.js +472 -0
  67. package/src/jsx/hooks/useContext.js +586 -0
  68. package/src/jsx/hooks/useEffect.js +704 -0
  69. package/src/jsx/hooks/useLayoutEffect.js +508 -0
  70. package/src/jsx/hooks/useMemo.js +689 -0
  71. package/src/jsx/hooks/useReducer.js +729 -0
  72. package/src/jsx/hooks/useRef.js +542 -0
  73. package/src/jsx/hooks/useState.js +854 -0
  74. package/src/jsx/runtime/commit.js +903 -0
  75. package/src/jsx/runtime/createElement.js +860 -0
  76. package/src/jsx/runtime/index.js +356 -0
  77. package/src/jsx/runtime/reconcile.js +687 -0
  78. package/src/jsx/runtime/render.js +914 -0
@@ -0,0 +1,779 @@
1
+ /*
2
+ * ElementDrawing Framework - Animations CSS
3
+ * All animation keyframes and animation utility classes.
4
+ * Covers fade, slide, scale, spin, pulse, bounce, shake, ripple,
5
+ * toast, modal, drawer, collapse, expand, and skeleton loading.
6
+ *
7
+ * @version 1.0.0
8
+ * @license MIT
9
+ */
10
+
11
+ /* ─── Fade Keyframes ───────────────────────────────────────────────────────── */
12
+
13
+ @keyframes ed-fade-in {
14
+ from {
15
+ opacity: 0;
16
+ }
17
+ to {
18
+ opacity: 1;
19
+ }
20
+ }
21
+
22
+ @keyframes ed-fade-out {
23
+ from {
24
+ opacity: 1;
25
+ }
26
+ to {
27
+ opacity: 0;
28
+ }
29
+ }
30
+
31
+ @keyframes ed-fade-in-up {
32
+ from {
33
+ opacity: 0;
34
+ transform: translateY(1rem);
35
+ }
36
+ to {
37
+ opacity: 1;
38
+ transform: translateY(0);
39
+ }
40
+ }
41
+
42
+ @keyframes ed-fade-in-down {
43
+ from {
44
+ opacity: 0;
45
+ transform: translateY(-1rem);
46
+ }
47
+ to {
48
+ opacity: 1;
49
+ transform: translateY(0);
50
+ }
51
+ }
52
+
53
+ @keyframes ed-fade-in-left {
54
+ from {
55
+ opacity: 0;
56
+ transform: translateX(-1rem);
57
+ }
58
+ to {
59
+ opacity: 1;
60
+ transform: translateX(0);
61
+ }
62
+ }
63
+
64
+ @keyframes ed-fade-in-right {
65
+ from {
66
+ opacity: 0;
67
+ transform: translateX(1rem);
68
+ }
69
+ to {
70
+ opacity: 1;
71
+ transform: translateX(0);
72
+ }
73
+ }
74
+
75
+ /* ─── Slide Keyframes ──────────────────────────────────────────────────────── */
76
+
77
+ @keyframes ed-slide-in-up {
78
+ from {
79
+ transform: translateY(100%);
80
+ }
81
+ to {
82
+ transform: translateY(0);
83
+ }
84
+ }
85
+
86
+ @keyframes ed-slide-in-down {
87
+ from {
88
+ transform: translateY(-100%);
89
+ }
90
+ to {
91
+ transform: translateY(0);
92
+ }
93
+ }
94
+
95
+ @keyframes ed-slide-in-left {
96
+ from {
97
+ transform: translateX(-100%);
98
+ }
99
+ to {
100
+ transform: translateX(0);
101
+ }
102
+ }
103
+
104
+ @keyframes ed-slide-in-right {
105
+ from {
106
+ transform: translateX(100%);
107
+ }
108
+ to {
109
+ transform: translateX(0);
110
+ }
111
+ }
112
+
113
+ @keyframes ed-slide-out-up {
114
+ from {
115
+ transform: translateY(0);
116
+ }
117
+ to {
118
+ transform: translateY(-100%);
119
+ }
120
+ }
121
+
122
+ @keyframes ed-slide-out-down {
123
+ from {
124
+ transform: translateY(0);
125
+ }
126
+ to {
127
+ transform: translateY(100%);
128
+ }
129
+ }
130
+
131
+ @keyframes ed-slide-out-left {
132
+ from {
133
+ transform: translateX(0);
134
+ }
135
+ to {
136
+ transform: translateX(-100%);
137
+ }
138
+ }
139
+
140
+ @keyframes ed-slide-out-right {
141
+ from {
142
+ transform: translateX(0);
143
+ }
144
+ to {
145
+ transform: translateX(100%);
146
+ }
147
+ }
148
+
149
+ /* ─── Scale Keyframes ──────────────────────────────────────────────────────── */
150
+
151
+ @keyframes ed-scale-in {
152
+ from {
153
+ opacity: 0;
154
+ transform: scale(0.9);
155
+ }
156
+ to {
157
+ opacity: 1;
158
+ transform: scale(1);
159
+ }
160
+ }
161
+
162
+ @keyframes ed-scale-out {
163
+ from {
164
+ opacity: 1;
165
+ transform: scale(1);
166
+ }
167
+ to {
168
+ opacity: 0;
169
+ transform: scale(0.9);
170
+ }
171
+ }
172
+
173
+ @keyframes ed-scale-in-up {
174
+ from {
175
+ opacity: 0;
176
+ transform: scale(0.9) translateY(1rem);
177
+ }
178
+ to {
179
+ opacity: 1;
180
+ transform: scale(1) translateY(0);
181
+ }
182
+ }
183
+
184
+ @keyframes ed-scale-in-down {
185
+ from {
186
+ opacity: 0;
187
+ transform: scale(0.9) translateY(-1rem);
188
+ }
189
+ to {
190
+ opacity: 1;
191
+ transform: scale(1) translateY(0);
192
+ }
193
+ }
194
+
195
+ @keyframes ed-pop-in {
196
+ 0% {
197
+ opacity: 0;
198
+ transform: scale(0.5);
199
+ }
200
+ 70% {
201
+ transform: scale(1.05);
202
+ }
203
+ 100% {
204
+ opacity: 1;
205
+ transform: scale(1);
206
+ }
207
+ }
208
+
209
+ /* ─── Spin Keyframes ───────────────────────────────────────────────────────── */
210
+
211
+ @keyframes ed-spin {
212
+ from {
213
+ transform: rotate(0deg);
214
+ }
215
+ to {
216
+ transform: rotate(360deg);
217
+ }
218
+ }
219
+
220
+ @keyframes ed-spin-reverse {
221
+ from {
222
+ transform: rotate(360deg);
223
+ }
224
+ to {
225
+ transform: rotate(0deg);
226
+ }
227
+ }
228
+
229
+ @keyframes ed-spin-pulse {
230
+ 0% {
231
+ transform: rotate(0deg);
232
+ opacity: 1;
233
+ }
234
+ 50% {
235
+ opacity: 0.6;
236
+ }
237
+ 100% {
238
+ transform: rotate(360deg);
239
+ opacity: 1;
240
+ }
241
+ }
242
+
243
+ /* ─── Pulse Keyframes ──────────────────────────────────────────────────────── */
244
+
245
+ @keyframes ed-pulse {
246
+ 0%, 100% {
247
+ opacity: 1;
248
+ }
249
+ 50% {
250
+ opacity: 0.5;
251
+ }
252
+ }
253
+
254
+ @keyframes ed-pulse-ring {
255
+ 0% {
256
+ transform: scale(0.8);
257
+ opacity: 1;
258
+ }
259
+ 100% {
260
+ transform: scale(2);
261
+ opacity: 0;
262
+ }
263
+ }
264
+
265
+ @keyframes ed-pulse-scale {
266
+ 0%, 100% {
267
+ transform: scale(1);
268
+ }
269
+ 50% {
270
+ transform: scale(1.05);
271
+ }
272
+ }
273
+
274
+ /* ─── Bounce Keyframes ─────────────────────────────────────────────────────── */
275
+
276
+ @keyframes ed-bounce {
277
+ 0%, 20%, 53%, 100% {
278
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
279
+ transform: translateY(0);
280
+ }
281
+ 40%, 43% {
282
+ animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
283
+ transform: translateY(-1rem);
284
+ }
285
+ 70% {
286
+ animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
287
+ transform: translateY(-0.5rem);
288
+ }
289
+ 80% {
290
+ transform: translateY(0);
291
+ transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
292
+ }
293
+ 90% {
294
+ transform: translateY(-0.125rem);
295
+ }
296
+ }
297
+
298
+ @keyframes ed-bounce-in {
299
+ 0% {
300
+ opacity: 0;
301
+ transform: scale(0.3);
302
+ }
303
+ 50% {
304
+ opacity: 1;
305
+ transform: scale(1.05);
306
+ }
307
+ 70% {
308
+ transform: scale(0.9);
309
+ }
310
+ 100% {
311
+ transform: scale(1);
312
+ }
313
+ }
314
+
315
+ @keyframes ed-bounce-out {
316
+ 0% {
317
+ transform: scale(1);
318
+ }
319
+ 25% {
320
+ transform: scale(0.95);
321
+ }
322
+ 50% {
323
+ opacity: 1;
324
+ transform: scale(1.1);
325
+ }
326
+ 100% {
327
+ opacity: 0;
328
+ transform: scale(0.3);
329
+ }
330
+ }
331
+
332
+ /* ─── Shake Keyframes ──────────────────────────────────────────────────────── */
333
+
334
+ @keyframes ed-shake {
335
+ 0%, 100% {
336
+ transform: translateX(0);
337
+ }
338
+ 10%, 30%, 50%, 70%, 90% {
339
+ transform: translateX(-0.25rem);
340
+ }
341
+ 20%, 40%, 60%, 80% {
342
+ transform: translateX(0.25rem);
343
+ }
344
+ }
345
+
346
+ @keyframes ed-shake-x {
347
+ 0%, 100% {
348
+ transform: translateX(0);
349
+ }
350
+ 25% {
351
+ transform: translateX(-0.5rem);
352
+ }
353
+ 75% {
354
+ transform: translateX(0.5rem);
355
+ }
356
+ }
357
+
358
+ @keyframes ed-shake-y {
359
+ 0%, 100% {
360
+ transform: translateY(0);
361
+ }
362
+ 25% {
363
+ transform: translateY(-0.5rem);
364
+ }
365
+ 75% {
366
+ transform: translateY(0.5rem);
367
+ }
368
+ }
369
+
370
+ /* ─── Ripple Keyframes ─────────────────────────────────────────────────────── */
371
+
372
+ @keyframes ed-ripple {
373
+ 0% {
374
+ transform: scale(0);
375
+ opacity: 0.5;
376
+ }
377
+ 100% {
378
+ transform: scale(4);
379
+ opacity: 0;
380
+ }
381
+ }
382
+
383
+ @keyframes ed-ripple-center {
384
+ 0% {
385
+ transform: scale(0);
386
+ opacity: 0.3;
387
+ }
388
+ 100% {
389
+ transform: scale(2.5);
390
+ opacity: 0;
391
+ }
392
+ }
393
+
394
+ /* ─── Toast Keyframes ──────────────────────────────────────────────────────── */
395
+
396
+ @keyframes ed-toast-slide-in-right {
397
+ from {
398
+ transform: translateX(100%);
399
+ opacity: 0;
400
+ }
401
+ to {
402
+ transform: translateX(0);
403
+ opacity: 1;
404
+ }
405
+ }
406
+
407
+ @keyframes ed-toast-slide-out-right {
408
+ from {
409
+ transform: translateX(0);
410
+ opacity: 1;
411
+ }
412
+ to {
413
+ transform: translateX(100%);
414
+ opacity: 0;
415
+ }
416
+ }
417
+
418
+ @keyframes ed-toast-slide-in-left {
419
+ from {
420
+ transform: translateX(-100%);
421
+ opacity: 0;
422
+ }
423
+ to {
424
+ transform: translateX(0);
425
+ opacity: 1;
426
+ }
427
+ }
428
+
429
+ @keyframes ed-toast-slide-out-left {
430
+ from {
431
+ transform: translateX(0);
432
+ opacity: 1;
433
+ }
434
+ to {
435
+ transform: translateX(-100%);
436
+ opacity: 0;
437
+ }
438
+ }
439
+
440
+ @keyframes ed-toast-slide-in-up {
441
+ from {
442
+ transform: translateY(100%);
443
+ opacity: 0;
444
+ }
445
+ to {
446
+ transform: translateY(0);
447
+ opacity: 1;
448
+ }
449
+ }
450
+
451
+ /* ─── Modal Keyframes ──────────────────────────────────────────────────────── */
452
+
453
+ @keyframes ed-modal-overlay-in {
454
+ from {
455
+ opacity: 0;
456
+ }
457
+ to {
458
+ opacity: 1;
459
+ }
460
+ }
461
+
462
+ @keyframes ed-modal-overlay-out {
463
+ from {
464
+ opacity: 1;
465
+ }
466
+ to {
467
+ opacity: 0;
468
+ }
469
+ }
470
+
471
+ @keyframes ed-modal-content-in {
472
+ from {
473
+ opacity: 0;
474
+ transform: scale(0.95) translateY(0.5rem);
475
+ }
476
+ to {
477
+ opacity: 1;
478
+ transform: scale(1) translateY(0);
479
+ }
480
+ }
481
+
482
+ @keyframes ed-modal-content-out {
483
+ from {
484
+ opacity: 1;
485
+ transform: scale(1) translateY(0);
486
+ }
487
+ to {
488
+ opacity: 0;
489
+ transform: scale(0.95) translateY(0.5rem);
490
+ }
491
+ }
492
+
493
+ /* ─── Drawer Keyframes ─────────────────────────────────────────────────────── */
494
+
495
+ @keyframes ed-drawer-slide-in-left {
496
+ from {
497
+ transform: translateX(-100%);
498
+ }
499
+ to {
500
+ transform: translateX(0);
501
+ }
502
+ }
503
+
504
+ @keyframes ed-drawer-slide-out-left {
505
+ from {
506
+ transform: translateX(0);
507
+ }
508
+ to {
509
+ transform: translateX(-100%);
510
+ }
511
+ }
512
+
513
+ @keyframes ed-drawer-slide-in-right {
514
+ from {
515
+ transform: translateX(100%);
516
+ }
517
+ to {
518
+ transform: translateX(0);
519
+ }
520
+ }
521
+
522
+ @keyframes ed-drawer-slide-out-right {
523
+ from {
524
+ transform: translateX(0);
525
+ }
526
+ to {
527
+ transform: translateX(100%);
528
+ }
529
+ }
530
+
531
+ /* ─── Collapse / Expand Keyframes ──────────────────────────────────────────── */
532
+
533
+ @keyframes ed-collapse {
534
+ from {
535
+ max-height: var(--ed-collapse-height, 1000px);
536
+ opacity: 1;
537
+ }
538
+ to {
539
+ max-height: 0;
540
+ opacity: 0;
541
+ overflow: hidden;
542
+ }
543
+ }
544
+
545
+ @keyframes ed-expand {
546
+ from {
547
+ max-height: 0;
548
+ opacity: 0;
549
+ overflow: hidden;
550
+ }
551
+ to {
552
+ max-height: var(--ed-collapse-height, 1000px);
553
+ opacity: 1;
554
+ }
555
+ }
556
+
557
+ @keyframes ed-collapse-horizontal {
558
+ from {
559
+ max-width: var(--ed-collapse-width, 1000px);
560
+ opacity: 1;
561
+ }
562
+ to {
563
+ max-width: 0;
564
+ opacity: 0;
565
+ overflow: hidden;
566
+ }
567
+ }
568
+
569
+ @keyframes ed-expand-horizontal {
570
+ from {
571
+ max-width: 0;
572
+ opacity: 0;
573
+ overflow: hidden;
574
+ }
575
+ to {
576
+ max-width: var(--ed-collapse-width, 1000px);
577
+ opacity: 1;
578
+ }
579
+ }
580
+
581
+ /* ─── Skeleton Loading Keyframes ───────────────────────────────────────────── */
582
+
583
+ @keyframes ed-skeleton-loading {
584
+ 0% {
585
+ background-position: -200% 0;
586
+ }
587
+ 100% {
588
+ background-position: 200% 0;
589
+ }
590
+ }
591
+
592
+ @keyframes ed-skeleton-pulse {
593
+ 0%, 100% {
594
+ opacity: 1;
595
+ }
596
+ 50% {
597
+ opacity: 0.4;
598
+ }
599
+ }
600
+
601
+ @keyframes ed-skeleton-wave {
602
+ 0% {
603
+ transform: translateX(-100%);
604
+ }
605
+ 100% {
606
+ transform: translateX(100%);
607
+ }
608
+ }
609
+
610
+ /* ─── Animation Utility Classes ────────────────────────────────────────────── */
611
+
612
+ /* Fade utilities */
613
+ .ed-animate-fade-in { animation: ed-fade-in 300ms ease forwards; }
614
+ .ed-animate-fade-out { animation: ed-fade-out 300ms ease forwards; }
615
+ .ed-animate-fade-in-up { animation: ed-fade-in-up 300ms ease forwards; }
616
+ .ed-animate-fade-in-down { animation: ed-fade-in-down 300ms ease forwards; }
617
+ .ed-animate-fade-in-left { animation: ed-fade-in-left 300ms ease forwards; }
618
+ .ed-animate-fade-in-right { animation: ed-fade-in-right 300ms ease forwards; }
619
+
620
+ /* Slide utilities */
621
+ .ed-animate-slide-in-up { animation: ed-slide-in-up 300ms ease forwards; }
622
+ .ed-animate-slide-in-down { animation: ed-slide-in-down 300ms ease forwards; }
623
+ .ed-animate-slide-in-left { animation: ed-slide-in-left 300ms ease forwards; }
624
+ .ed-animate-slide-in-right { animation: ed-slide-in-right 300ms ease forwards; }
625
+ .ed-animate-slide-out-up { animation: ed-slide-out-up 300ms ease forwards; }
626
+ .ed-animate-slide-out-down { animation: ed-slide-out-down 300ms ease forwards; }
627
+ .ed-animate-slide-out-left { animation: ed-slide-out-left 300ms ease forwards; }
628
+ .ed-animate-slide-out-right { animation: ed-slide-out-right 300ms ease forwards; }
629
+
630
+ /* Scale utilities */
631
+ .ed-animate-scale-in { animation: ed-scale-in 200ms ease forwards; }
632
+ .ed-animate-scale-out { animation: ed-scale-out 200ms ease forwards; }
633
+ .ed-animate-pop-in { animation: ed-pop-in 300ms ease forwards; }
634
+ .ed-animate-scale-in-up { animation: ed-scale-in-up 300ms ease forwards; }
635
+
636
+ /* Spin utilities */
637
+ .ed-animate-spin { animation: ed-spin 1s linear infinite; }
638
+ .ed-animate-spin-reverse { animation: ed-spin-reverse 1s linear infinite; }
639
+ .ed-animate-spin-pulse { animation: ed-spin-pulse 1.5s linear infinite; }
640
+
641
+ /* Pulse utilities */
642
+ .ed-animate-pulse { animation: ed-pulse 2s ease-in-out infinite; }
643
+ .ed-animate-pulse-ring { animation: ed-pulse-ring 1.5s ease-out infinite; }
644
+ .ed-animate-pulse-scale { animation: ed-pulse-scale 2s ease-in-out infinite; }
645
+
646
+ /* Bounce utilities */
647
+ .ed-animate-bounce { animation: ed-bounce 1s ease infinite; }
648
+ .ed-animate-bounce-in { animation: ed-bounce-in 500ms ease forwards; }
649
+ .ed-animate-bounce-out { animation: ed-bounce-out 500ms ease forwards; }
650
+
651
+ /* Shake utilities */
652
+ .ed-animate-shake { animation: ed-shake 500ms ease; }
653
+ .ed-animate-shake-x { animation: ed-shake-x 300ms ease; }
654
+ .ed-animate-shake-y { animation: ed-shake-y 300ms ease; }
655
+
656
+ /* Ripple utility */
657
+ .ed-animate-ripple { animation: ed-ripple 600ms ease-out; }
658
+
659
+ /* Toast animation utilities */
660
+ .ed-animate-toast-in-right { animation: ed-toast-slide-in-right 400ms ease forwards; }
661
+ .ed-animate-toast-out-right { animation: ed-toast-slide-out-right 300ms ease forwards; }
662
+ .ed-animate-toast-in-left { animation: ed-toast-slide-in-left 400ms ease forwards; }
663
+ .ed-animate-toast-out-left { animation: ed-toast-slide-out-left 300ms ease forwards; }
664
+ .ed-animate-toast-in-up { animation: ed-toast-slide-in-up 400ms ease forwards; }
665
+
666
+ /* Modal animation utilities */
667
+ .ed-animate-modal-overlay-in { animation: ed-modal-overlay-in 200ms ease forwards; }
668
+ .ed-animate-modal-overlay-out { animation: ed-modal-overlay-out 200ms ease forwards; }
669
+ .ed-animate-modal-in { animation: ed-modal-content-in 300ms ease forwards; }
670
+ .ed-animate-modal-out { animation: ed-modal-content-out 200ms ease forwards; }
671
+
672
+ /* Drawer animation utilities */
673
+ .ed-animate-drawer-in-left { animation: ed-drawer-slide-in-left 300ms ease forwards; }
674
+ .ed-animate-drawer-out-left { animation: ed-drawer-slide-out-left 200ms ease forwards; }
675
+ .ed-animate-drawer-in-right { animation: ed-drawer-slide-in-right 300ms ease forwards; }
676
+ .ed-animate-drawer-out-right { animation: ed-drawer-slide-out-right 200ms ease forwards; }
677
+
678
+ /* Collapse / Expand utilities */
679
+ .ed-animate-collapse { animation: ed-collapse 300ms ease forwards; }
680
+ .ed-animate-expand { animation: ed-expand 300ms ease forwards; }
681
+ .ed-animate-collapse-h { animation: ed-collapse-horizontal 300ms ease forwards; }
682
+ .ed-animate-expand-h { animation: ed-expand-horizontal 300ms ease forwards; }
683
+
684
+ /* Skeleton loading utilities */
685
+ .ed-skeleton {
686
+ background: linear-gradient(90deg, var(--ed-gray-200) 25%, var(--ed-gray-100) 50%, var(--ed-gray-200) 75%);
687
+ background-size: 400% 100%;
688
+ animation: ed-skeleton-loading 1.5s ease-in-out infinite;
689
+ border-radius: var(--ed-border-radius);
690
+ }
691
+
692
+ .ed-skeleton-circle {
693
+ border-radius: 50%;
694
+ }
695
+
696
+ .ed-skeleton-text {
697
+ height: 0.75rem;
698
+ margin-bottom: 0.5rem;
699
+ border-radius: var(--ed-border-radius-sm);
700
+ }
701
+
702
+ .ed-skeleton-text:last-child {
703
+ width: 75%;
704
+ }
705
+
706
+ .ed-skeleton-heading {
707
+ height: 1.5rem;
708
+ width: 50%;
709
+ margin-bottom: 1rem;
710
+ border-radius: var(--ed-border-radius-sm);
711
+ }
712
+
713
+ .ed-skeleton-image {
714
+ width: 100%;
715
+ height: 12rem;
716
+ border-radius: var(--ed-border-radius);
717
+ }
718
+
719
+ .ed-skeleton-avatar {
720
+ width: 2.5rem;
721
+ height: 2.5rem;
722
+ border-radius: 50%;
723
+ }
724
+
725
+ .ed-skeleton-button {
726
+ height: 2.25rem;
727
+ width: 6rem;
728
+ border-radius: var(--ed-border-radius);
729
+ }
730
+
731
+ /* ─── Animation Duration Utilities ─────────────────────────────────────────── */
732
+
733
+ .ed-duration-75 { animation-duration: 75ms; }
734
+ .ed-duration-100 { animation-duration: 100ms; }
735
+ .ed-duration-150 { animation-duration: 150ms; }
736
+ .ed-duration-200 { animation-duration: 200ms; }
737
+ .ed-duration-300 { animation-duration: 300ms; }
738
+ .ed-duration-500 { animation-duration: 500ms; }
739
+ .ed-duration-700 { animation-duration: 700ms; }
740
+ .ed-duration-1000 { animation-duration: 1000ms; }
741
+
742
+ /* ─── Animation Timing Utilities ───────────────────────────────────────────── */
743
+
744
+ .ed-easing-linear { animation-timing-function: linear; }
745
+ .ed-easing-ease { animation-timing-function: ease; }
746
+ .ed-easing-ease-in { animation-timing-function: ease-in; }
747
+ .ed-easing-ease-out { animation-timing-function: ease-out; }
748
+ .ed-easing-ease-in-out { animation-timing-function: ease-in-out; }
749
+
750
+ /* ─── Animation Delay Utilities ────────────────────────────────────────────── */
751
+
752
+ .ed-delay-0 { animation-delay: 0ms; }
753
+ .ed-delay-75 { animation-delay: 75ms; }
754
+ .ed-delay-100 { animation-delay: 100ms; }
755
+ .ed-delay-150 { animation-delay: 150ms; }
756
+ .ed-delay-200 { animation-delay: 200ms; }
757
+ .ed-delay-300 { animation-delay: 300ms; }
758
+ .ed-delay-500 { animation-delay: 500ms; }
759
+ .ed-delay-700 { animation-delay: 700ms; }
760
+ .ed-delay-1000 { animation-delay: 1000ms; }
761
+
762
+ /* ─── Animation Fill Mode Utilities ────────────────────────────────────────── */
763
+
764
+ .ed-fill-none { animation-fill-mode: none; }
765
+ .ed-fill-forwards { animation-fill-mode: forwards; }
766
+ .ed-fill-backwards { animation-fill-mode: backwards; }
767
+ .ed-fill-both { animation-fill-mode: both; }
768
+
769
+ /* ─── Animation Iteration Count ────────────────────────────────────────────── */
770
+
771
+ .ed-iterate-once { animation-iteration-count: 1; }
772
+ .ed-iterate-infinite { animation-iteration-count: infinite; }
773
+ .ed-iterate-2 { animation-iteration-count: 2; }
774
+ .ed-iterate-3 { animation-iteration-count: 3; }
775
+
776
+ /* ─── Animation Play State ─────────────────────────────────────────────────── */
777
+
778
+ .ed-animate-paused { animation-play-state: paused; }
779
+ .ed-animate-running { animation-play-state: running; }