apex-ui-kit 2.0.5

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 (40) hide show
  1. package/Licence.md +21 -0
  2. package/ReadMe.md +75 -0
  3. package/dist/ApexUI-Kit/templates/Avatar/Avatar.jsx +81 -0
  4. package/dist/ApexUI-Kit/templates/BeamBar/BeamBar.jsx +101 -0
  5. package/dist/ApexUI-Kit/templates/Cards/BasicCard.jsx +60 -0
  6. package/dist/ApexUI-Kit/templates/Carousel/Carousel.jsx +95 -0
  7. package/dist/ApexUI-Kit/templates/Carousel/DragCarousel.jsx +105 -0
  8. package/dist/ApexUI-Kit/templates/Carousel/ParallaxCarousel.jsx +161 -0
  9. package/dist/ApexUI-Kit/templates/DragCarousel/DragCarousel.jsx +105 -0
  10. package/dist/ApexUI-Kit/templates/EdgeGlowForm/EdgeGlowFrom.jsx +297 -0
  11. package/dist/ApexUI-Kit/templates/FlipProfile/FlipProfile.jsx +125 -0
  12. package/dist/ApexUI-Kit/templates/GlareCard/GlareCard.jsx +146 -0
  13. package/dist/ApexUI-Kit/templates/GlassCardStack/GlassCardStack.jsx +111 -0
  14. package/dist/ApexUI-Kit/templates/HoverText/HoverText.jsx +371 -0
  15. package/dist/ApexUI-Kit/templates/HyperCard/HyperCard.jsx +183 -0
  16. package/dist/ApexUI-Kit/templates/KineticThreadsBackground/KineticThreadBackground.jsx +249 -0
  17. package/dist/ApexUI-Kit/templates/LensFlareBackground/LensFlareBackground.jsx +268 -0
  18. package/dist/ApexUI-Kit/templates/LuminousParticleOcean/LuminousParticleOcean.jsx +155 -0
  19. package/dist/ApexUI-Kit/templates/NavDropDown/NavDropDown.jsx +114 -0
  20. package/dist/ApexUI-Kit/templates/NavMenu/NavMenu.jsx +153 -0
  21. package/dist/ApexUI-Kit/templates/OrbsBackground/FloatingOrbs.jsx +96 -0
  22. package/dist/ApexUI-Kit/templates/ParallaxCard/ParallaxCard.jsx +127 -0
  23. package/dist/ApexUI-Kit/templates/ParallaxCarousel/ParallaxCarousel.jsx +161 -0
  24. package/dist/ApexUI-Kit/templates/ParallaxProfile/ParallaxProfile.jsx +107 -0
  25. package/dist/ApexUI-Kit/templates/PointerFollower/PointerFollower.jsx +126 -0
  26. package/dist/ApexUI-Kit/templates/RainBackground/RainBackground.jsx +109 -0
  27. package/dist/ApexUI-Kit/templates/RippleBackground/RippleBackground.jsx +160 -0
  28. package/dist/ApexUI-Kit/templates/ScrollMarquee/ScrollMarquee.jsx +174 -0
  29. package/dist/ApexUI-Kit/templates/SmartGridCard/SmartGridCard.jsx +241 -0
  30. package/dist/ApexUI-Kit/templates/SmokeBackground/SmokeBackground.jsx +216 -0
  31. package/dist/ApexUI-Kit/templates/Testimonials/Testimonials.jsx +117 -0
  32. package/dist/ApexUI-Kit/templates/ThemeToggle/ThemeAnimation.js +252 -0
  33. package/dist/ApexUI-Kit/templates/ThemeToggle/ThemeConfig.js +8 -0
  34. package/dist/ApexUI-Kit/templates/ThemeToggle/ThemeToggle.css +560 -0
  35. package/dist/ApexUI-Kit/templates/ThemeToggle/ThemeToggle.jsx +118 -0
  36. package/dist/ApexUI-Kit/templates/ToolTip/ToolTip.jsx +85 -0
  37. package/dist/ApexUI-Kit/templates/WaterDropReveal/WaterDropReveal.jsx +151 -0
  38. package/dist/cli/index.d.ts +2 -0
  39. package/dist/cli/index.js +145 -0
  40. package/package.json +56 -0
@@ -0,0 +1,560 @@
1
+ /* :root {
2
+ --color-bg: #fff;
3
+ --color-text: #000;
4
+ }
5
+ .theme-light {
6
+ --color-bg: #fff;
7
+ --color-text: #000;
8
+ --color-logo: #9ae600;
9
+ --color-hover: #000;
10
+ --color-npm: #99a1af;
11
+ --color-divider: #000;
12
+ --color-border: #cdd5e1a3;
13
+ --color-aside-beam: #000;
14
+ }
15
+ .theme-dark {
16
+ --color-bg: #030712;
17
+ --color-text: #fff;
18
+ --color-logo: #9ae600;
19
+ --color-hover: #fff;
20
+ --color-npm: #99a1af;
21
+ --color-divider: #4b5563;
22
+ --color-border: #1e2939;
23
+ --color-aside-beam: #fff;
24
+ }
25
+
26
+ @media (prefers-color-scheme: dark) {
27
+ .theme-light {
28
+
29
+ }
30
+ }
31
+
32
+ ::view-transition-group(root) {
33
+ animation-timing-function: var(--expo-in);
34
+ }
35
+
36
+ ::view-transition-new(root) {
37
+ mask: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 40 40"><circle cx="20" cy="20" r="20" fill="white"/></svg>')
38
+ center / 0 no-repeat;
39
+ animation: scale 1.5s;
40
+ }
41
+
42
+ ::view-transition-old(root),
43
+ .dark::view-transition-old(root) {
44
+ animation: scale 1.5s;
45
+ }
46
+
47
+ @keyframes scale {
48
+ 0% {
49
+ mask-size: 0;
50
+ }
51
+ 10% {
52
+ mask-size: 50vmax;
53
+ }
54
+ 90% {
55
+ mask-size: 50vmax;
56
+ }
57
+ 100% {
58
+ mask-size: 2000vmax;
59
+ }
60
+ } */
61
+
62
+ /* ---------- CSS Vars (default) ---------- */
63
+ :root {
64
+ --color-bg: #030712;
65
+ --color-text: #fff;
66
+ --color-logo: #9ae600;
67
+ --color-hover: #fff;
68
+ --color-npm: #99a1af;
69
+ --color-divider: #4b5563;
70
+ --color-border: #1e2939;
71
+ --color-aside-beam: #fff;
72
+
73
+ /* animation defaults (can be overridden) */
74
+ --vt-duration: 1s;
75
+ --vt-ease: ease-in-out;
76
+ }
77
+
78
+ /* ---------- Themes ---------- */
79
+ .theme-light {
80
+ --color-bg: #f8eedf;
81
+ --color-text: #615b5b;
82
+ --color-logo: #9ae600;
83
+ --color-hover: #000;
84
+ --color-npm: #99a1af;
85
+ --color-divider: #000;
86
+ --color-border: #cdd5e1a3;
87
+ --color-aside-beam: #000;
88
+ --color-btn-border: #460809;
89
+ --color-hero-btn-text: #460809;
90
+ --color-btn-hover-color: #a65f00;
91
+ --color-btn-hover-text: #fff;
92
+ --color-stroke-color: #e5c287;
93
+ --color-btn-background: rgb(253, 199, 0, 0.7);
94
+ --color-template: rgb(67, 32, 4, 0.8);
95
+ --color-template-border: #fdc700;
96
+ --color-template-text: #fdc700;
97
+ --color-scan: #460809;
98
+
99
+ /* Hero Component */
100
+ --right-color-bg: #e5c287;
101
+ --right-border: #46080939;
102
+ --right-active-bg: #460809;
103
+ --right-active-text: #54390a;
104
+ --right-active-border: #460809;
105
+ --right-hover: #46080939;
106
+ --right-grid-bg: #46080939;
107
+ --right-grid-color1: #46080913;
108
+ --right-grid-color2: #46080910;
109
+ /* Nav */
110
+ --hero-nav-bg: #e5c287;
111
+ --hero-nav-text: #54390a;
112
+ --hero-nav-text2: #99a1af;
113
+ --hero-nav-hover: #460809;
114
+ --hero-nav-badge: #460809;
115
+ --hero-nav-badge-text: #e5c287;
116
+ --hero-nav-sidebar: #e5c287;
117
+ --hero-nav-humbugger: #460809;
118
+ /* Aside bar */
119
+ --nav-sidebar-bg: #e5c287;
120
+ --nav-sidebar-beam: #460809;
121
+ --nav-sidebar-text: #460809;
122
+ --nav-sidebar-active: #460809;
123
+ --nav-sidebar-hover: #460809;
124
+ --nav-sidebar-icon: #460809;
125
+ --nav-sidebar-hover-text: #5d0e41;
126
+ --nav-sidebar-border: #9f9fa939;
127
+
128
+ /* Features Card */
129
+ --color-feature-stroke-color: #fdc700;
130
+ --color-feature-icon: #fdc700;
131
+ --color-feature-bg: #f8eedf;
132
+ --color-feature-text-heading: #615b5b;
133
+ --color-feature-text-subheading: #52525c;
134
+ --color-feature-stopColor-1: #460809;
135
+ --color-feature-stopColor-2: rgba(163, 230, 53, 0);
136
+ --color-icon-bg-color: #460809;
137
+ --color-icon-border-color: #fdc700;
138
+ --color-feature-animated-pulse: #fdc700;
139
+
140
+ /* component show case */
141
+ --color-component-movingGrid-bg: #c2996b;
142
+ --color-component-movingGrid-Side-bg: #e5c287;
143
+ --color-component-movingGrid-line1: #46080913;
144
+ --color-component-movingGrid-line2: #46080910;
145
+ --color-component-bg: #f8eedf;
146
+ --color-component-text-heading: #615b5b;
147
+ --color-component-text-subheading: #52525c;
148
+ --color-component-side-active-bg: #460809;
149
+ --color-component-side-active-bg2: #460809;
150
+ --color-component-side-active-border: #460809;
151
+ --color-component-side-text: #615b5b;
152
+ --color-component-side-hover: #460809;
153
+ --color-component-side-active-text: #460809;
154
+ --color-component-side-active-text2: #fdc700;
155
+
156
+ /* Focus Reveal */
157
+ --color-focus-reveal-bg: #f8eedf;
158
+ --color-focus-reveal-text: #460809;
159
+ --color-focus-reveal-text-2: #615b5b;
160
+
161
+ /* Special Component */
162
+ --color-SpecialComponent-shadow: #000000;
163
+ --color-SpecialComponent-movingGrid-bg: #c2996b;
164
+ --color-SpecialComponent-movingGrid-Side-bg: #e5c287;
165
+ --color-SpecialComponent-movingGrid-line1: #46080913;
166
+ --color-SpecialComponent-movingGrid-line2: #46080910;
167
+ --color-SpecialComponent-btn-bg: #e5c287;
168
+ --color-SpecialComponent-btn-Demo-bg: #460809;
169
+ --color-SpecialComponent-btn-Demo-text: #fdc700;
170
+ --color-SpecialComponent-btn-border: #52525c56;
171
+ --color-SpecialComponent-text: #615b5b;
172
+ --color-SpecialComponent-text2: #460809;
173
+ --color-SpecialComponent-text-subheading: #52525c;
174
+ --color-SpecialComponent-text-hover: #460809;
175
+ --color-SpecialComponent-text-hover-border: #460809;
176
+ --color-SpecialComponent-btnDemo-toggle: #460809;
177
+ --color-SpecialComponent-btnDemo-toggle-bg: #fdc700;
178
+ --color-SpecialComponent-bg: #f8eedf;
179
+ --color-SpecialComponent-side-active-bg: #460809;
180
+ --color-SpecialComponent-side-active-border: #460809;
181
+ --color-SpecialComponent-side-text: #615b5b;
182
+ --color-SpecialComponent-side-hover: #460809;
183
+ --color-SpecialComponent-side-active-text: #460809;
184
+ --color-SpecialComponent-border: #71717b63;
185
+ --color-SpecialComponent-side-Btn-hover: #460809;
186
+
187
+ /* Footer */
188
+ --color-footer-btn-bg: rgb(253, 199, 0, 0.7);
189
+ --color-footer-btn-border: #460809;
190
+ --color-footer-btn-text: #460809;
191
+ --color-spotlight: rgb(67, 32, 4, 0.8);
192
+ --color-footer-hover-text: #460809;
193
+ --color-footer-hover-border: #a65f00;
194
+ --color-footer-bg: #f8eedf;
195
+ --color-footer-text-color: #615b5b;
196
+ --color-footer-sub-text: #9f9fa9;
197
+ --color-footer-copy-bg: rgb(67, 32, 4, 0.8);
198
+ --color-footer-copy-text: #fff;
199
+ --color-footer-hover-text: #fff;
200
+ --color-footer-hover-text2: #460809;
201
+ --color-footer-copy-border: #e5c287;
202
+ --color-footer-copy-icon: #e5c287;
203
+ --color-footer-copy-icon-hover: #ffdf20;
204
+ --color-footer-copied-text: #fdc700;
205
+ /* component pages */
206
+ --color-pages-bg: #460809;
207
+ --color-pages-border: #ffdf20;
208
+ --color-pages-divider: #fdc700;
209
+ --color-pages-text-heading: #615b5b;
210
+ --color-pages-text-subheading: #99a1af;
211
+ --color-pages-side-active-bg: #ffdf20;
212
+ --color-pages-side-active-border: #ffdf20;
213
+ --color-pages-side-text: #99a1af;
214
+ --color-pages-side-text2: #460809;
215
+ --color-pages-side-hover: #ffdf20;
216
+ --color-pages-side-active-text: #fdc700;
217
+ --color-pages-side-active-text6: #fdc700;
218
+ --color-pages-side-active-text5: #460809;
219
+ --color-pages-side-active-hover: #e5c287;
220
+ --color-pages-side-active-hover2: #460809;
221
+ --color-pages-side-active-text2: #00bcff;
222
+ --color-pages-side-active-text3: #00d492;
223
+ --color-pages-side-active-text3: #00d492;
224
+ --color-pages-side-active-text4: #460809;
225
+ --color-pages-props-text: #99a1af;
226
+ --color-pages-props-text2: #e2e8f0;
227
+ --color-pages-props-text3: #6a7282;
228
+ --color-pages-props-heading-text: #6a7282;
229
+ --color-pages-props-heading-text2: #e2e8f0;
230
+ --color-pages-props-sub-text: #6a7282;
231
+ }
232
+
233
+ .theme-dark {
234
+ /* Component Show Case */
235
+ --color-bg: #030712;
236
+ --color-text: #fff;
237
+ --color-logo: #9ae600;
238
+ --color-hover: #fff;
239
+ --color-npm: #99a1af;
240
+ --color-divider: #4b5563;
241
+ --color-border: #1e2939;
242
+ --color-aside-beam: #fff;
243
+ --color-hero-btn-text: #fff;
244
+ --color-btn-border: #9ae600;
245
+ --color-btn-hover-color: #d9f99d;
246
+ --color-btn-hover-text: #d9f99d;
247
+ --color-stroke-color: #9ae600;
248
+ --color-scan: #9ae600;
249
+ /* Hero Component */
250
+ --color-stroke-color: #9ae600;
251
+ --color-template: #101828;
252
+ --color-template-text: #71717b;
253
+ --color-template-border: #1e2939;
254
+ --right-color-bg: #101828;
255
+ --right-border: #1e2939;
256
+ --right-active-bg: #9ae600;
257
+ --right-active-text: #bbf451;
258
+ --right-active-border: #9ae600;
259
+ --right-hover: #1e2939;
260
+ --right-grid-bg: #020617;
261
+ --right-grid-color1: rgba(163, 230, 53, 0.1);
262
+ --right-grid-color2: rgba(163, 230, 53, 0.1);
263
+ /* Nav */
264
+ --hero-nav-bg: #030712;
265
+ --hero-nav-text: #fff;
266
+ --hero-nav-text2: #99a1af;
267
+ --hero-nav-hover: #fff;
268
+ --hero-nav-hover2: #fff;
269
+ --hero-nav-badge: #35530e;
270
+ --hero-nav-badge-text: #9ae600;
271
+ --hero-nav-sidebar: #030712;
272
+ --hero-nav-humbugger: #fff;
273
+ /* Aside bar */
274
+ --nav-sidebar-bg: #030712;
275
+ --nav-sidebar-beam: #fff;
276
+ --nav-sidebar-text: #99a1af;
277
+ --nav-sidebar-active: #a0de24;
278
+ --nav-sidebar-active-text: #9ae600;
279
+ --nav-sidebar-hover: #35530e;
280
+ --nav-sidebar-hover-text: #fff;
281
+ --nav-sidebar-icon: #9ae600;
282
+ --nav-sidebar-border: var(--color-border);
283
+
284
+ /* Features Card */
285
+ --color-feature-icon: #9ae600;
286
+ --color-feature-bg: #030712;
287
+ --color-feature-text-heading: #fff;
288
+ --color-feature-text-subheading: #9f9fa9;
289
+ --color-feature-stopColor-1: rgba(163, 230, 53, 0.8);
290
+ --color-feature-stopColor-2: rgba(163, 230, 53, 0);
291
+ --color-feature-stroke-color: #4b5563;
292
+ --color-icon-bg-color: #1e2939;
293
+ --color-icon-border-color: #364153;
294
+ --color-feature-animated-pulse: #9ae600;
295
+
296
+ /* Component Showcase */
297
+ --color-component-movingGrid-bg: #1e2939;
298
+ --color-component-movingGrid-Side-bg: #1e2939;
299
+ --color-component-movingGrid-line1: rgba(163, 230, 53, 0.1);
300
+ --color-component-movingGrid-line2: rgba(163, 230, 53, 0.1);
301
+ --color-component-bg: #030712;
302
+ --color-component-text-heading: #fff;
303
+ --color-component-text-subheading: #99a1af;
304
+ --color-component-side-active-bg: #9ae600;
305
+ --color-component-side-active-bg2: #35530e;
306
+ --color-component-side-active-border: #9ae600;
307
+ --color-component-side-text: #99a1af;
308
+ --color-component-side-hover: #fff;
309
+ --color-component-side-active-text: #9ae600;
310
+ --color-component-side-active-text2: #fff;
311
+
312
+ /* Modern Char Reveal */
313
+ --color-focus-reveal-bg: #030712;
314
+ --color-focus-reveal-text: #99a1af;
315
+ --color-focus-reveal-text-2: #fff;
316
+
317
+ /* Special Component */
318
+ --color-SpecialComponent-movingGrid-bg: #1e2939;
319
+ --color-SpecialComponent-movingGrid-Side-bg: #1e2939;
320
+ --color-SpecialComponent-movingGrid-line1: rgba(163, 230, 53, 0.1);
321
+ --color-SpecialComponent-movingGrid-line2: rgba(163, 230, 53, 0.1);
322
+ --color-SpecialComponent-btn-bg: #111827;
323
+ --color-SpecialComponent-btn-Demo-bg: #a3e635;
324
+ --color-SpecialComponent-btn-Demo-text: #fff;
325
+ --color-SpecialComponent-btn-border: #a3e635;
326
+ --color-SpecialComponent-text: #fff;
327
+ --color-SpecialComponent-text2: #fff;
328
+ --color-SpecialComponent-text-hover: #d9f99d;
329
+ --color-SpecialComponent-text-subheading: #99a1af;
330
+ --color-SpecialComponent-text-hover-border: #d9f99d;
331
+ --color-SpecialComponent-btnDemo-toggle: #a3e635;
332
+ --color-SpecialComponent-btnDemo-toggle-bg: #fff;
333
+ --color-SpecialComponent-bg: #030712;
334
+ --color-component-text-subheading: #99a1af;
335
+ --color-SpecialComponent-side-active-bg: #9ae600;
336
+ --color-SpecialComponent-side-active-border: #9ae600;
337
+ --color-SpecialComponent-side-text: #99a1af;
338
+ --color-SpecialComponent-side-hover: #fff;
339
+ --color-SpecialComponent-side-active-text: #9ae600;
340
+ --color-SpecialComponent-border: #1e2939;
341
+ --color-SpecialComponent-side-Btn-hover: #9ae600;
342
+
343
+ /* Footer */
344
+ --color-footer-btn-bg: #111827;
345
+ --color-footer-btn-border: #a3e635;
346
+ --color-footer-btn-text: #a3e635;
347
+ --color-spotlight: rgba(163, 230, 53, 0.4);
348
+ --color-footer-hover-text: #d9f99d;
349
+ --color-footer-hover-border: #d9f99d;
350
+ --color-footer-bg: #030712;
351
+ --color-footer-text-color: #fff;
352
+ --color-footer-sub-text: rgb(159, 159, 169);
353
+ --color-footer-copy-bg: #101828;
354
+ --color-footer-copy-text: #fff;
355
+ --color-footer-hover-text2: #d9f99d;
356
+ --color-footer-copy-border: #1e2939;
357
+ --color-footer-copy-icon: #6a7282;
358
+ --color-footer-copy-icon-hover: #1e2939;
359
+ --color-footer-copied-text: #a3e635;
360
+
361
+ /* component Pages */
362
+ --color-pages-bg: #0f172b;
363
+ --color-pages-border: #1d293d;
364
+ --color-pages-divider: #1d293d;
365
+ --color-pages-text-heading: #fff;
366
+ --color-pages-text-subheading: #99a1af;
367
+ --color-pages-side-active-bg: #9ae600;
368
+ --color-pages-side-active-border: #9ae600;
369
+ --color-pages-side-text: #99a1af;
370
+ --color-pages-side-hover: #fff;
371
+ --color-pages-side-active-text: #9ae600;
372
+ --color-pages-side-active-hover: #bbf451;
373
+ --color-pages-side-active-text2: #00bcff;
374
+ --color-pages-side-active-text3: #00d492;
375
+ --color-pages-side-active-text3: #00d492;
376
+ --color-pages-side-active-text4: #bbf451;
377
+ --color-pages-props-text: #99a1af;
378
+ --color-pages-props-text2: #e2e8f0;
379
+ --color-pages-props-text3: #6a7282;
380
+ --color-pages-props-heading-text: #6a7282;
381
+ --color-pages-props-heading-text2: #e2e8f0;
382
+ --color-pages-props-sub-text: #6a7282;
383
+ --color-pages-side-text2: #fff;
384
+ --color-pages-side-active-hover2: #9ae600;
385
+ --color-pages-side-active-text5: #9ae600;
386
+ --color-pages-side-active-text6: #fff;
387
+ }
388
+ .theme-ocean {
389
+ --color-bg: #e0f7fa;
390
+ --color-text: #023e58;
391
+ --color-logo: #00bcd4;
392
+ --color-hover: #01579b;
393
+ --color-npm: #4dd0e1;
394
+ --color-divider: #0288d1;
395
+ --color-border: #4fc3f7;
396
+ --color-aside-beam: #0277bd;
397
+ --color-btn-border: #01579b;
398
+ --color-hero-btn-text: #01579b;
399
+ --color-btn-hover-color: #0288d1;
400
+ --color-btn-hover-text: #ffffff;
401
+ --color-stroke-color: #4dd0e1;
402
+ --color-btn-background: rgba(0, 188, 212, 0.7);
403
+ --color-template: rgba(1, 87, 155, 0.8);
404
+ --color-template-border: #00bcd4;
405
+ --color-template-text: #00bcd4;
406
+ --color-scan: #01579b;
407
+
408
+ /* Hero Component */
409
+ --right-color-bg: #4dd0e1;
410
+ --right-border: #0288d133;
411
+ --right-active-bg: #0277bd;
412
+ --right-active-text: #e0f7fa;
413
+ --right-active-border: #01579b;
414
+ --right-hover: #0288d133;
415
+ --right-grid-bg: #0288d133;
416
+ --right-grid-color1: #0288d111;
417
+ --right-grid-color2: #0288d10d;
418
+
419
+ /* Nav */
420
+ --hero-nav-bg: #4dd0e1;
421
+ --hero-nav-text: #01579b;
422
+ --hero-nav-text2: #4fc3f7;
423
+ --hero-nav-hover: #0277bd;
424
+ --hero-nav-badge: #01579b;
425
+ --hero-nav-badge-text: #e0f7fa;
426
+ --hero-nav-sidebar: #4dd0e1;
427
+ --hero-nav-humbugger: #01579b;
428
+
429
+ /* Aside bar */
430
+ --nav-sidebar-bg: #b2ebf2;
431
+ --nav-sidebar-beam: #0277bd;
432
+ --nav-sidebar-text: #023e58;
433
+ --nav-sidebar-active: #01579b;
434
+ --nav-sidebar-hover: #0288d1;
435
+ --nav-sidebar-icon: #01579b;
436
+ --nav-sidebar-hover-text: #00acc1;
437
+ --nav-sidebar-border: #4dd0e166;
438
+
439
+ /* Features Card */
440
+ --color-feature-stroke-color: #00bcd4;
441
+ --color-feature-icon: #00bcd4;
442
+ --color-feature-bg: #e0f7fa;
443
+ --color-feature-text-heading: #01579b;
444
+ --color-feature-text-subheading: #0288d1;
445
+ --color-feature-stopColor-1: #01579b;
446
+ --color-feature-stopColor-2: rgba(0, 188, 212, 0);
447
+ --color-icon-bg-color: #0277bd;
448
+ --color-icon-border-color: #00bcd4;
449
+ --color-feature-animated-pulse: #00bcd4;
450
+
451
+ /* Component Show Case */
452
+ --color-component-movingGrid-bg: #4dd0e1;
453
+ --color-component-movingGrid-Side-bg: #b2ebf2;
454
+ --color-component-movingGrid-line1: #0288d111;
455
+ --color-component-movingGrid-line2: #0288d10d;
456
+ --color-component-bg: #e0f7fa;
457
+ --color-component-text-heading: #01579b;
458
+ --color-component-text-subheading: #0288d1;
459
+ --color-component-side-active-bg: #0277bd;
460
+ --color-component-side-active-border: #01579b;
461
+ --color-component-side-text: #023e58;
462
+ --color-component-side-hover: #0288d1;
463
+ --color-component-side-active-text: #e0f7fa;
464
+
465
+ /* Focus Reveal */
466
+ --color-focus-reveal-bg: #e0f7fa;
467
+ --color-focus-reveal-text: #01579b;
468
+ --color-focus-reveal-text-2: #0277bd;
469
+
470
+ /* Special Component */
471
+ --color-SpecialComponent-shadow: #000000;
472
+ --color-SpecialComponent-movingGrid-bg: #4dd0e1;
473
+ --color-SpecialComponent-movingGrid-Side-bg: #b2ebf2;
474
+ --color-SpecialComponent-movingGrid-line1: #0288d111;
475
+ --color-SpecialComponent-movingGrid-line2: #0288d10d;
476
+ --color-SpecialComponent-btn-bg: #4dd0e1;
477
+ --color-SpecialComponent-btn-Demo-bg: #0277bd;
478
+ --color-SpecialComponent-btn-Demo-text: #e0f7fa;
479
+ --color-SpecialComponent-btn-border: #0288d166;
480
+ --color-SpecialComponent-text: #023e58;
481
+ --color-SpecialComponent-text2: #01579b;
482
+ --color-SpecialComponent-text-subheading: #0288d1;
483
+ --color-SpecialComponent-text-hover: #0277bd;
484
+ --color-SpecialComponent-text-hover-border: #0288d1;
485
+ --color-SpecialComponent-btnDemo-toggle: #0277bd;
486
+ --color-SpecialComponent-btnDemo-toggle-bg: #00bcd4;
487
+ --color-SpecialComponent-bg: #e0f7fa;
488
+ --color-SpecialComponent-side-active-bg: #0277bd;
489
+ --color-SpecialComponent-side-active-border: #01579b;
490
+ --color-SpecialComponent-side-text: #023e58;
491
+ --color-SpecialComponent-side-hover: #0288d1;
492
+ --color-SpecialComponent-side-active-text: #e0f7fa;
493
+ --color-SpecialComponent-border: #0288d166;
494
+ --color-SpecialComponent-side-Btn-hover: #0288d1;
495
+
496
+ /* Footer */
497
+ --color-footer-btn-bg: rgba(0, 188, 212, 0.7);
498
+ --color-footer-btn-border: #01579b;
499
+ --color-footer-btn-text: #01579b;
500
+ --color-spotlight: rgba(1, 87, 155, 0.8);
501
+ --color-footer-hover-text: #01579b;
502
+ --color-footer-hover-border: #0288d1;
503
+ --color-footer-bg: #b2ebf2;
504
+ --color-footer-text-color: #01579b;
505
+ --color-footer-sub-text: #4fc3f7;
506
+ --color-footer-copy-bg: rgba(1, 87, 155, 0.8);
507
+ --color-footer-copy-text: #ffffff;
508
+ --color-footer-hover-text2: #0277bd;
509
+ --color-footer-copy-border: #00bcd4;
510
+ --color-footer-copy-icon: #00bcd4;
511
+ --color-footer-copy-icon-hover: #4dd0e1;
512
+ --color-footer-copied-text: #00acc1;
513
+
514
+ /* Component pages */
515
+ --color-pages-bg: #0277bd;
516
+ --color-pages-border: #00bcd4;
517
+ --color-pages-divider: #4dd0e1;
518
+ --color-pages-text-heading: #01579b;
519
+ --color-pages-text-subheading: #4fc3f7;
520
+ --color-pages-side-active-bg: #00bcd4;
521
+ --color-pages-side-active-border: #00bcd4;
522
+ --color-pages-side-text: #0288d1;
523
+ --color-pages-side-text2: #01579b;
524
+ --color-pages-side-hover: #0288d1;
525
+ --color-pages-side-active-text: #e0f7fa;
526
+ --color-pages-side-active-text6: #00bcd4;
527
+ --color-pages-side-active-text5: #01579b;
528
+ --color-pages-side-active-hover: #4dd0e1;
529
+ --color-pages-side-active-hover2: #0277bd;
530
+ --color-pages-side-active-text2: #00bcff;
531
+ --color-pages-side-active-text3: #00d492;
532
+ --color-pages-side-active-text4: #01579b;
533
+ --color-pages-props-text: #0288d1;
534
+ --color-pages-props-text2: #4fc3f7;
535
+ --color-pages-props-text3: #01579b;
536
+ --color-pages-props-heading-text: #0288d1;
537
+ --color-pages-props-heading-text2: #00acc1;
538
+ --color-pages-props-sub-text: #4fc3f7;
539
+ }
540
+
541
+ .theme-forest {
542
+ --color-bg: #1e3c72;
543
+ --color-text: #f3fff6;
544
+ --color-logo: #2a5298;
545
+ --color-hover: #4e8d45;
546
+ --color-npm: #a0ffb5;
547
+ --color-divider: #2a5298;
548
+ --color-border: #174d2a;
549
+ --color-aside-beam: #66ff99;
550
+ }
551
+ body {
552
+ background: var(--color-bg);
553
+ color: var(--color-text);
554
+ transition: background-color 0.3s, color 0.3s;
555
+ }
556
+
557
+ /* ---------- View-Transition hooks (animation CSS injected dynamically) ---------- */
558
+ ::view-transition-group(root) {
559
+ animation-timing-function: var(--vt-ease);
560
+ }
@@ -0,0 +1,118 @@
1
+ import { useState, useEffect, useRef, useId } from "react";
2
+ import { FiSun, FiMoon } from "react-icons/fi";
3
+ import { buildAnimationCSS } from "./ThemeAnimation.js";
4
+
5
+ export default function ThemeToggle({
6
+ animation = "circle",
7
+ duration = "1.5s",
8
+ ease = "var(--vt-ease)",
9
+ className = "",
10
+ onApplied,
11
+ LightTheme = "light"
12
+ }) {
13
+ // unique ID per instance
14
+ const uid = useId();
15
+
16
+ const getInitialTheme = () => {
17
+ if (typeof window !== "undefined") {
18
+ const saved = localStorage.getItem("apexui-theme");
19
+ if (saved === "dark" || saved === LightTheme) return saved;
20
+ }
21
+ return "dark";
22
+ };
23
+
24
+ const [theme, setTheme] = useState(getInitialTheme);
25
+ const btnRef = useRef(null);
26
+
27
+ // ------------------------------
28
+ // Inject animation CSS (scoped per instance)
29
+ // ------------------------------
30
+ useEffect(() => {
31
+ const rawCSS = buildAnimationCSS(animation, { duration, ease });
32
+
33
+ // ✅ Scope selectors with html[vt-owner]
34
+ const scopedCSS = rawCSS
35
+ .replaceAll("::view-transition-new", `html[vt-owner="${uid}"]::view-transition-new`)
36
+ .replaceAll("::view-transition-old", `html[vt-owner="${uid}"]::view-transition-old`)
37
+ .replaceAll("::view-transition-group", `html[vt-owner="${uid}"]::view-transition-group`);
38
+
39
+ let styleEl = document.getElementById(`vt-style-${uid}`);
40
+ if (!styleEl) {
41
+ styleEl = document.createElement("style");
42
+ styleEl.id = `vt-style-${uid}`;
43
+ document.head.appendChild(styleEl);
44
+ }
45
+ styleEl.textContent = scopedCSS;
46
+ }, [animation, duration, ease, uid]);
47
+
48
+ // ------------------------------
49
+ // Apply theme globally + notify
50
+ // ------------------------------
51
+ useEffect(() => {
52
+ const html = document.documentElement;
53
+ html.classList.forEach((c) => c.startsWith("theme-") && html.classList.remove(c));
54
+ html.classList.add(`theme-${theme}`);
55
+
56
+ try {
57
+ localStorage.setItem("apexui-theme", theme);
58
+ window.dispatchEvent(new CustomEvent("theme-change", { detail: theme }));
59
+ } catch (err) {
60
+ console.error("Error saving theme:", err);
61
+ }
62
+
63
+ onApplied?.(theme);
64
+ }, [theme, onApplied]);
65
+
66
+ // ------------------------------
67
+ // Listen for global theme sync
68
+ // ------------------------------
69
+ useEffect(() => {
70
+ const handler = (e) => setTheme(e.detail);
71
+ window.addEventListener("theme-change", handler);
72
+ return () => window.removeEventListener("theme-change", handler);
73
+ }, []);
74
+
75
+ // ------------------------------
76
+ // Toggle handler
77
+ // ------------------------------
78
+ const handleClick = () => {
79
+ const nextTheme = theme === LightTheme ? "dark" : LightTheme;
80
+
81
+ // Origin from button center
82
+ if (btnRef.current) {
83
+ const r = btnRef.current.getBoundingClientRect();
84
+ document.documentElement.style.setProperty("--cx", `${r.left + r.width / 2}px`);
85
+ document.documentElement.style.setProperty("--cy", `${r.top + r.height / 2}px`);
86
+ }
87
+
88
+ // ✅ Use html instead of body
89
+ document.documentElement.setAttribute("vt-owner", uid);
90
+
91
+ const run = () => setTheme(nextTheme);
92
+
93
+ if (document.startViewTransition) {
94
+ const vt = document.startViewTransition(run);
95
+ vt.finished.finally(() => {
96
+ document.documentElement.removeAttribute("vt-owner"); // cleanup
97
+ });
98
+ } else {
99
+ run();
100
+ document.documentElement.removeAttribute("vt-owner");
101
+ }
102
+ };
103
+
104
+ const isLight = theme === LightTheme;
105
+
106
+ return (
107
+ <button
108
+ ref={btnRef}
109
+ onClick={handleClick}
110
+ className={`rounded-full text-2xl transition-transform hover:scale-110
111
+ text-[var(--color-text)] ${className}`}
112
+ aria-label="Toggle theme"
113
+ title="Toggle theme"
114
+ >
115
+ {isLight ? <FiMoon /> : <FiSun />}
116
+ </button>
117
+ );
118
+ }