pre-react-ui-lib 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,1855 @@
1
+ // src/components/Navbar/Navbar.jsx
2
+ import React, { useState, useEffect } from "react";
3
+ var Navbar = ({
4
+ logo = "VirtualAI",
5
+ links = ["Home", "Features", "Pricing", "Blog"],
6
+ ctaText = "Get Started",
7
+ accent = "#6366f1",
8
+ bg = "#0f172a",
9
+ onCtaClick = () => {
10
+ },
11
+ onLinkClick = () => {
12
+ }
13
+ }) => {
14
+ const [scrolled, setScrolled] = useState(false);
15
+ const [menuOpen, setMenuOpen] = useState(false);
16
+ const [active, setActive] = useState("Home");
17
+ const [isMobile, setIsMobile] = useState(false);
18
+ const alpha = (hex, op) => {
19
+ const r = parseInt(hex.slice(1, 3), 16);
20
+ const g = parseInt(hex.slice(3, 5), 16);
21
+ const b = parseInt(hex.slice(5, 7), 16);
22
+ return `rgba(${r},${g},${b},${op})`;
23
+ };
24
+ useEffect(() => {
25
+ const checkMobile = () => setIsMobile(window.innerWidth < 768);
26
+ checkMobile();
27
+ window.addEventListener("resize", checkMobile);
28
+ return () => window.removeEventListener("resize", checkMobile);
29
+ }, []);
30
+ useEffect(() => {
31
+ const handler = () => setScrolled(window.scrollY > 10);
32
+ window.addEventListener("scroll", handler);
33
+ return () => window.removeEventListener("scroll", handler);
34
+ }, []);
35
+ useEffect(() => {
36
+ if (!isMobile) setMenuOpen(false);
37
+ }, [isMobile]);
38
+ const handleLink = (link) => {
39
+ setActive(link);
40
+ setMenuOpen(false);
41
+ onLinkClick(link);
42
+ };
43
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("style", null, `
44
+ @keyframes nbSlideDown {
45
+ from { opacity: 0; transform: translateY(-8px); }
46
+ to { opacity: 1; transform: translateY(0); }
47
+ }
48
+ .nb-link:hover { color: rgba(255,255,255,0.9) !important; background: rgba(255,255,255,0.05) !important; }
49
+ .nb-cta:hover { opacity: 0.85 !important; }
50
+ .nb-ham:hover { background: rgba(255,255,255,0.1) !important; }
51
+ .nb-mlink:hover { background: rgba(255,255,255,0.06) !important; }
52
+ `), /* @__PURE__ */ React.createElement("nav", { style: {
53
+ position: "sticky",
54
+ top: 0,
55
+ left: 0,
56
+ right: 0,
57
+ zIndex: 1e3,
58
+ background: scrolled ? alpha(bg, 0.96) : bg,
59
+ borderBottom: `1px solid ${scrolled ? "rgba(255,255,255,0.09)" : "rgba(255,255,255,0.04)"}`,
60
+ backdropFilter: scrolled ? "blur(12px)" : "none",
61
+ WebkitBackdropFilter: scrolled ? "blur(12px)" : "none",
62
+ transition: "all 0.3s ease",
63
+ fontFamily: "system-ui, -apple-system, sans-serif",
64
+ width: "100%",
65
+ boxSizing: "border-box"
66
+ } }, /* @__PURE__ */ React.createElement("div", { style: {
67
+ maxWidth: "1200px",
68
+ margin: "0 auto",
69
+ padding: "0 20px",
70
+ height: isMobile ? "56px" : "64px",
71
+ display: "flex",
72
+ alignItems: "center",
73
+ justifyContent: "space-between",
74
+ gap: "16px",
75
+ boxSizing: "border-box"
76
+ } }, /* @__PURE__ */ React.createElement("div", { style: { display: "flex", alignItems: "center", gap: "8px", cursor: "pointer", flexShrink: 0 } }, /* @__PURE__ */ React.createElement("div", { style: {
77
+ width: isMobile ? "26px" : "30px",
78
+ height: isMobile ? "26px" : "30px",
79
+ borderRadius: "8px",
80
+ background: `linear-gradient(135deg, ${accent}, ${alpha(accent, 0.6)})`,
81
+ display: "flex",
82
+ alignItems: "center",
83
+ justifyContent: "center",
84
+ fontSize: isMobile ? "12px" : "14px",
85
+ fontWeight: "800",
86
+ color: "#fff",
87
+ flexShrink: 0
88
+ } }, logo[0]), /* @__PURE__ */ React.createElement("span", { style: {
89
+ fontSize: isMobile ? "14px" : "16px",
90
+ fontWeight: "800",
91
+ color: "#fff",
92
+ letterSpacing: "-0.3px"
93
+ } }, logo)), !isMobile && /* @__PURE__ */ React.createElement("div", { style: { display: "flex", alignItems: "center", gap: "2px", flex: 1, justifyContent: "center" } }, links.map((link) => /* @__PURE__ */ React.createElement(
94
+ "button",
95
+ {
96
+ key: link,
97
+ className: "nb-link",
98
+ onClick: () => handleLink(link),
99
+ style: {
100
+ background: active === link ? alpha(accent, 0.12) : "transparent",
101
+ border: "none",
102
+ padding: "7px 16px",
103
+ borderRadius: "9px",
104
+ fontSize: "14px",
105
+ fontWeight: active === link ? "700" : "500",
106
+ color: active === link ? accent : "rgba(255,255,255,0.5)",
107
+ cursor: "pointer",
108
+ transition: "all 0.2s",
109
+ fontFamily: "inherit",
110
+ whiteSpace: "nowrap"
111
+ }
112
+ },
113
+ link
114
+ ))), /* @__PURE__ */ React.createElement("div", { style: { display: "flex", alignItems: "center", gap: "8px", flexShrink: 0 } }, /* @__PURE__ */ React.createElement(
115
+ "button",
116
+ {
117
+ className: "nb-cta",
118
+ onClick: onCtaClick,
119
+ style: {
120
+ padding: isMobile ? "7px 14px" : "9px 20px",
121
+ borderRadius: "10px",
122
+ border: "none",
123
+ background: `linear-gradient(135deg, ${accent}, ${alpha(accent, 0.75)})`,
124
+ color: "#fff",
125
+ fontSize: isMobile ? "12px" : "13px",
126
+ fontWeight: "700",
127
+ cursor: "pointer",
128
+ fontFamily: "inherit",
129
+ transition: "opacity 0.2s",
130
+ whiteSpace: "nowrap"
131
+ }
132
+ },
133
+ ctaText
134
+ ), isMobile && /* @__PURE__ */ React.createElement(
135
+ "button",
136
+ {
137
+ className: "nb-ham",
138
+ onClick: () => setMenuOpen((o) => !o),
139
+ style: {
140
+ background: "rgba(255,255,255,0.06)",
141
+ border: "1px solid rgba(255,255,255,0.1)",
142
+ borderRadius: "8px",
143
+ width: "34px",
144
+ height: "34px",
145
+ cursor: "pointer",
146
+ display: "flex",
147
+ flexDirection: "column",
148
+ alignItems: "center",
149
+ justifyContent: "center",
150
+ gap: "5px",
151
+ transition: "background 0.2s",
152
+ flexShrink: 0,
153
+ padding: 0
154
+ }
155
+ },
156
+ /* @__PURE__ */ React.createElement("div", { style: {
157
+ width: "16px",
158
+ height: "1.5px",
159
+ background: "rgba(255,255,255,0.7)",
160
+ borderRadius: "2px",
161
+ transform: menuOpen ? "rotate(45deg) translate(4px, 4px)" : "none",
162
+ transition: "transform 0.25s"
163
+ } }),
164
+ /* @__PURE__ */ React.createElement("div", { style: {
165
+ width: "16px",
166
+ height: "1.5px",
167
+ background: "rgba(255,255,255,0.7)",
168
+ borderRadius: "2px",
169
+ opacity: menuOpen ? 0 : 1,
170
+ transition: "opacity 0.2s"
171
+ } }),
172
+ /* @__PURE__ */ React.createElement("div", { style: {
173
+ width: "16px",
174
+ height: "1.5px",
175
+ background: "rgba(255,255,255,0.7)",
176
+ borderRadius: "2px",
177
+ transform: menuOpen ? "rotate(-45deg) translate(4px, -4px)" : "none",
178
+ transition: "transform 0.25s"
179
+ } })
180
+ ))), isMobile && menuOpen && /* @__PURE__ */ React.createElement("div", { style: {
181
+ animation: "nbSlideDown 0.2s ease",
182
+ borderTop: "1px solid rgba(255,255,255,0.06)",
183
+ padding: "10px 16px 16px",
184
+ display: "flex",
185
+ flexDirection: "column",
186
+ gap: "3px",
187
+ background: alpha(bg, 0.98)
188
+ } }, links.map((link) => /* @__PURE__ */ React.createElement(
189
+ "button",
190
+ {
191
+ key: link,
192
+ className: "nb-mlink",
193
+ onClick: () => handleLink(link),
194
+ style: {
195
+ background: active === link ? alpha(accent, 0.1) : "transparent",
196
+ border: "none",
197
+ padding: "11px 14px",
198
+ borderRadius: "10px",
199
+ fontSize: "14px",
200
+ fontWeight: active === link ? "700" : "500",
201
+ color: active === link ? accent : "rgba(255,255,255,0.55)",
202
+ cursor: "pointer",
203
+ textAlign: "left",
204
+ fontFamily: "inherit",
205
+ width: "100%",
206
+ transition: "all 0.15s",
207
+ display: "flex",
208
+ alignItems: "center",
209
+ justifyContent: "space-between"
210
+ }
211
+ },
212
+ link,
213
+ active === link && /* @__PURE__ */ React.createElement(
214
+ "svg",
215
+ {
216
+ width: "14",
217
+ height: "14",
218
+ viewBox: "0 0 24 24",
219
+ fill: "none",
220
+ stroke: accent,
221
+ strokeWidth: "2.5",
222
+ strokeLinecap: "round"
223
+ },
224
+ /* @__PURE__ */ React.createElement("polyline", { points: "9 18 15 12 9 6" })
225
+ )
226
+ )), /* @__PURE__ */ React.createElement("div", { style: { height: "1px", background: "rgba(255,255,255,0.07)", margin: "8px 0" } }), /* @__PURE__ */ React.createElement(
227
+ "button",
228
+ {
229
+ onClick: () => {
230
+ setMenuOpen(false);
231
+ onCtaClick();
232
+ },
233
+ style: {
234
+ background: `linear-gradient(135deg, ${accent}, ${alpha(accent, 0.75)})`,
235
+ border: "none",
236
+ padding: "12px",
237
+ borderRadius: "12px",
238
+ fontSize: "14px",
239
+ fontWeight: "700",
240
+ color: "#fff",
241
+ cursor: "pointer",
242
+ fontFamily: "inherit",
243
+ width: "100%"
244
+ }
245
+ },
246
+ ctaText
247
+ ))));
248
+ };
249
+
250
+ // src/components/Footer/Footer.jsx
251
+ import React2 from "react";
252
+ var Footer = ({
253
+ logo = "VirtualAI",
254
+ links = ["Home", "Features", "Pricing", "Blog", "Contact"],
255
+ copyright = "VirtualAI",
256
+ accent = "#6366f1",
257
+ bg = "#0f172a"
258
+ }) => {
259
+ return /* @__PURE__ */ React2.createElement("footer", { style: {
260
+ background: bg,
261
+ borderTop: "1px solid rgba(255,255,255,0.06)",
262
+ fontFamily: "system-ui, sans-serif",
263
+ width: "100%",
264
+ boxSizing: "border-box",
265
+ padding: "28px 24px"
266
+ } }, /* @__PURE__ */ React2.createElement("div", { style: {
267
+ maxWidth: "900px",
268
+ margin: "0 auto",
269
+ display: "flex",
270
+ flexDirection: "column",
271
+ alignItems: "center",
272
+ gap: "20px"
273
+ } }, /* @__PURE__ */ React2.createElement("div", { style: { display: "flex", alignItems: "center", gap: "8px" } }, /* @__PURE__ */ React2.createElement("div", { style: {
274
+ width: "26px",
275
+ height: "26px",
276
+ borderRadius: "7px",
277
+ background: `linear-gradient(135deg, ${accent}, rgba(99,102,241,0.5))`,
278
+ display: "flex",
279
+ alignItems: "center",
280
+ justifyContent: "center",
281
+ fontSize: "12px",
282
+ fontWeight: "800",
283
+ color: "#fff"
284
+ } }, logo[0]), /* @__PURE__ */ React2.createElement("span", { style: { fontSize: "15px", fontWeight: "800", color: "#fff" } }, logo)), /* @__PURE__ */ React2.createElement("div", { style: { display: "flex", flexWrap: "wrap", justifyContent: "center", gap: "4px" } }, links.map((link) => /* @__PURE__ */ React2.createElement(
285
+ "a",
286
+ {
287
+ key: link,
288
+ href: "#",
289
+ style: {
290
+ fontSize: "13px",
291
+ color: "rgba(255,255,255,0.4)",
292
+ textDecoration: "none",
293
+ padding: "4px 12px",
294
+ borderRadius: "8px",
295
+ transition: "color 0.2s"
296
+ },
297
+ onMouseEnter: (e) => e.currentTarget.style.color = "rgba(255,255,255,0.85)",
298
+ onMouseLeave: (e) => e.currentTarget.style.color = "rgba(255,255,255,0.4)"
299
+ },
300
+ link
301
+ ))), /* @__PURE__ */ React2.createElement("div", { style: { width: "100%", height: "1px", background: "rgba(255,255,255,0.06)" } }), /* @__PURE__ */ React2.createElement("p", { style: { fontSize: "12px", color: "rgba(255,255,255,0.22)", margin: 0 } }, "\xA9 ", (/* @__PURE__ */ new Date()).getFullYear(), " ", copyright, ". All rights reserved.")));
302
+ };
303
+
304
+ // src/components/Charts/Charts.jsx
305
+ import React3, { useState as useState2 } from "react";
306
+ var Charts = ({
307
+ type = "bar",
308
+ data = [
309
+ { label: "Jan", value: 40 },
310
+ { label: "Feb", value: 70 },
311
+ { label: "Mar", value: 55 },
312
+ { label: "Apr", value: 90 },
313
+ { label: "May", value: 65 },
314
+ { label: "Jun", value: 80 },
315
+ { label: "Jul", value: 100 },
316
+ { label: "Aug", value: 30 }
317
+ ],
318
+ title = "Monthly Stats",
319
+ accent = "#6366f1",
320
+ bg = "#0f172a",
321
+ radius = "16px",
322
+ showGrid = true,
323
+ showValues = true
324
+ }) => {
325
+ const [hovered, setHovered] = useState2(null);
326
+ const alpha = (hex, op) => {
327
+ const r = parseInt(hex.slice(1, 3), 16);
328
+ const g = parseInt(hex.slice(3, 5), 16);
329
+ const b = parseInt(hex.slice(5, 7), 16);
330
+ return `rgba(${r},${g},${b},${op})`;
331
+ };
332
+ const max = Math.max(...data.map((d) => d.value));
333
+ const min = Math.min(...data.map((d) => d.value));
334
+ const W = 320;
335
+ const H = 160;
336
+ const padL = 28;
337
+ const padR = 12;
338
+ const padT = 16;
339
+ const padB = 28;
340
+ const chartW = W - padL - padR;
341
+ const chartH = H - padT - padB;
342
+ const getX = (i) => padL + i / (data.length - 1) * chartW;
343
+ const getY = (v) => padT + chartH - (v - min) / (max - min || 1) * chartH;
344
+ const points = data.map((d, i) => `${getX(i)},${getY(d.value)}`).join(" ");
345
+ const areaPoints = `${padL},${padT + chartH} ` + points + ` ${getX(data.length - 1)},${padT + chartH}`;
346
+ const gridLines = [0, 0.25, 0.5, 0.75, 1].map((t) => ({
347
+ y: padT + chartH * (1 - t),
348
+ val: Math.round(min + t * (max - min))
349
+ }));
350
+ const BarChart = () => {
351
+ const barW = Math.min(28, chartW / data.length * 0.55);
352
+ return /* @__PURE__ */ React3.createElement("svg", { width: "100%", viewBox: `0 0 ${W} ${H}` }, showGrid && gridLines.map((g, i) => /* @__PURE__ */ React3.createElement("g", { key: i }, /* @__PURE__ */ React3.createElement(
353
+ "line",
354
+ {
355
+ x1: padL,
356
+ y1: g.y,
357
+ x2: W - padR,
358
+ y2: g.y,
359
+ stroke: "rgba(255,255,255,0.05)",
360
+ strokeWidth: "1"
361
+ }
362
+ ), /* @__PURE__ */ React3.createElement(
363
+ "text",
364
+ {
365
+ x: padL - 4,
366
+ y: g.y + 4,
367
+ textAnchor: "end",
368
+ fill: "rgba(255,255,255,0.25)",
369
+ fontSize: "9"
370
+ },
371
+ g.val
372
+ ))), data.map((d, i) => {
373
+ const x = padL + i / data.length * chartW + (chartW / data.length - barW) / 2;
374
+ const barH = (d.value - min) / (max - min || 1) * chartH;
375
+ const y = padT + chartH - barH;
376
+ const isH = hovered === i;
377
+ return /* @__PURE__ */ React3.createElement("g", { key: i, onMouseEnter: () => setHovered(i), onMouseLeave: () => setHovered(null) }, /* @__PURE__ */ React3.createElement(
378
+ "rect",
379
+ {
380
+ x,
381
+ y: padT,
382
+ width: barW,
383
+ height: chartH,
384
+ fill: "transparent",
385
+ rx: "4"
386
+ }
387
+ ), /* @__PURE__ */ React3.createElement(
388
+ "rect",
389
+ {
390
+ x,
391
+ y,
392
+ width: barW,
393
+ height: barH,
394
+ fill: isH ? accent : alpha(accent, 0.55),
395
+ rx: "4",
396
+ style: { transition: "fill 0.15s" }
397
+ }
398
+ ), showValues && isH && /* @__PURE__ */ React3.createElement(
399
+ "text",
400
+ {
401
+ x: x + barW / 2,
402
+ y: y - 5,
403
+ textAnchor: "middle",
404
+ fill: "#fff",
405
+ fontSize: "9",
406
+ fontWeight: "700"
407
+ },
408
+ d.value
409
+ ), /* @__PURE__ */ React3.createElement(
410
+ "text",
411
+ {
412
+ x: x + barW / 2,
413
+ y: H - 6,
414
+ textAnchor: "middle",
415
+ fill: "rgba(255,255,255,0.3)",
416
+ fontSize: "9"
417
+ },
418
+ d.label
419
+ ));
420
+ }));
421
+ };
422
+ const LineChart = () => /* @__PURE__ */ React3.createElement("svg", { width: "100%", viewBox: `0 0 ${W} ${H}` }, /* @__PURE__ */ React3.createElement("defs", null, /* @__PURE__ */ React3.createElement("linearGradient", { id: "lg", x1: "0", y1: "0", x2: "0", y2: "1" }, /* @__PURE__ */ React3.createElement("stop", { offset: "0%", stopColor: accent, stopOpacity: "0.3" }), /* @__PURE__ */ React3.createElement("stop", { offset: "100%", stopColor: accent, stopOpacity: "0" }))), showGrid && gridLines.map((g, i) => /* @__PURE__ */ React3.createElement("g", { key: i }, /* @__PURE__ */ React3.createElement(
423
+ "line",
424
+ {
425
+ x1: padL,
426
+ y1: g.y,
427
+ x2: W - padR,
428
+ y2: g.y,
429
+ stroke: "rgba(255,255,255,0.05)",
430
+ strokeWidth: "1"
431
+ }
432
+ ), /* @__PURE__ */ React3.createElement(
433
+ "text",
434
+ {
435
+ x: padL - 4,
436
+ y: g.y + 4,
437
+ textAnchor: "end",
438
+ fill: "rgba(255,255,255,0.25)",
439
+ fontSize: "9"
440
+ },
441
+ g.val
442
+ ))), /* @__PURE__ */ React3.createElement("polygon", { points: areaPoints, fill: "url(#lg)" }), /* @__PURE__ */ React3.createElement(
443
+ "polyline",
444
+ {
445
+ points,
446
+ fill: "none",
447
+ stroke: accent,
448
+ strokeWidth: "2",
449
+ strokeLinejoin: "round",
450
+ strokeLinecap: "round"
451
+ }
452
+ ), data.map((d, i) => {
453
+ const isH = hovered === i;
454
+ return /* @__PURE__ */ React3.createElement("g", { key: i, onMouseEnter: () => setHovered(i), onMouseLeave: () => setHovered(null) }, /* @__PURE__ */ React3.createElement("circle", { cx: getX(i), cy: getY(d.value), r: "10", fill: "transparent" }), /* @__PURE__ */ React3.createElement(
455
+ "circle",
456
+ {
457
+ cx: getX(i),
458
+ cy: getY(d.value),
459
+ r: isH ? 5 : 3,
460
+ fill: isH ? "#fff" : accent,
461
+ stroke: accent,
462
+ strokeWidth: "2",
463
+ style: { transition: "all 0.15s" }
464
+ }
465
+ ), showValues && isH && /* @__PURE__ */ React3.createElement(
466
+ "text",
467
+ {
468
+ x: getX(i),
469
+ y: getY(d.value) - 10,
470
+ textAnchor: "middle",
471
+ fill: "#fff",
472
+ fontSize: "9",
473
+ fontWeight: "700"
474
+ },
475
+ d.value
476
+ ), /* @__PURE__ */ React3.createElement(
477
+ "text",
478
+ {
479
+ x: getX(i),
480
+ y: H - 6,
481
+ textAnchor: "middle",
482
+ fill: "rgba(255,255,255,0.3)",
483
+ fontSize: "9"
484
+ },
485
+ d.label
486
+ ));
487
+ }));
488
+ const PieChart = () => {
489
+ var _a, _b;
490
+ const cx = W / 2, cy = H / 2 - 4, r = Math.min(H, W) / 2 - 24;
491
+ const total = data.reduce((s, d) => s + d.value, 0);
492
+ const colors = [
493
+ accent,
494
+ alpha(accent, 0.75),
495
+ alpha(accent, 0.55),
496
+ alpha(accent, 0.4),
497
+ alpha(accent, 0.3),
498
+ alpha(accent, 0.2),
499
+ alpha(accent, 0.12)
500
+ ];
501
+ let startAngle = -Math.PI / 2;
502
+ const slices = data.map((d, i) => {
503
+ const angle = d.value / total * 2 * Math.PI;
504
+ const x1 = cx + r * Math.cos(startAngle);
505
+ const y1 = cy + r * Math.sin(startAngle);
506
+ const x2 = cx + r * Math.cos(startAngle + angle);
507
+ const y2 = cy + r * Math.sin(startAngle + angle);
508
+ const lx = cx + (r + 14) * Math.cos(startAngle + angle / 2);
509
+ const ly = cy + (r + 14) * Math.sin(startAngle + angle / 2);
510
+ const large = angle > Math.PI ? 1 : 0;
511
+ const path = `M ${cx} ${cy} L ${x1} ${y1} A ${r} ${r} 0 ${large} 1 ${x2} ${y2} Z`;
512
+ const slice = { path, color: colors[i % colors.length], d, angle, lx, ly, i };
513
+ startAngle += angle;
514
+ return slice;
515
+ });
516
+ return /* @__PURE__ */ React3.createElement("svg", { width: "100%", viewBox: `0 0 ${W} ${H}` }, slices.map((s) => /* @__PURE__ */ React3.createElement("g", { key: s.i, onMouseEnter: () => setHovered(s.i), onMouseLeave: () => setHovered(null) }, /* @__PURE__ */ React3.createElement(
517
+ "path",
518
+ {
519
+ d: s.path,
520
+ fill: s.color,
521
+ stroke: bg,
522
+ strokeWidth: "2",
523
+ transform: hovered === s.i ? `translate(${Math.cos(s.angle / 2 - Math.PI / 2) * 4}, ${Math.sin(s.angle / 2 - Math.PI / 2) * 4})` : "",
524
+ style: { transition: "transform 0.15s", cursor: "pointer" }
525
+ }
526
+ ))), hovered !== null && /* @__PURE__ */ React3.createElement(React3.Fragment, null, /* @__PURE__ */ React3.createElement(
527
+ "text",
528
+ {
529
+ x: cx,
530
+ y: cy - 8,
531
+ textAnchor: "middle",
532
+ fill: "#fff",
533
+ fontSize: "16",
534
+ fontWeight: "800"
535
+ },
536
+ (_a = data[hovered]) == null ? void 0 : _a.value
537
+ ), /* @__PURE__ */ React3.createElement(
538
+ "text",
539
+ {
540
+ x: cx,
541
+ y: cy + 10,
542
+ textAnchor: "middle",
543
+ fill: "rgba(255,255,255,0.4)",
544
+ fontSize: "9"
545
+ },
546
+ (_b = data[hovered]) == null ? void 0 : _b.label
547
+ )), hovered === null && /* @__PURE__ */ React3.createElement(
548
+ "text",
549
+ {
550
+ x: cx,
551
+ y: cy + 5,
552
+ textAnchor: "middle",
553
+ fill: "rgba(255,255,255,0.2)",
554
+ fontSize: "9"
555
+ },
556
+ "Hover slice"
557
+ ));
558
+ };
559
+ const AreaChart = () => /* @__PURE__ */ React3.createElement("svg", { width: "100%", viewBox: `0 0 ${W} ${H}` }, /* @__PURE__ */ React3.createElement("defs", null, /* @__PURE__ */ React3.createElement("linearGradient", { id: "ag", x1: "0", y1: "0", x2: "0", y2: "1" }, /* @__PURE__ */ React3.createElement("stop", { offset: "0%", stopColor: accent, stopOpacity: "0.5" }), /* @__PURE__ */ React3.createElement("stop", { offset: "100%", stopColor: accent, stopOpacity: "0.02" }))), showGrid && gridLines.map((g, i) => /* @__PURE__ */ React3.createElement("g", { key: i }, /* @__PURE__ */ React3.createElement(
560
+ "line",
561
+ {
562
+ x1: padL,
563
+ y1: g.y,
564
+ x2: W - padR,
565
+ y2: g.y,
566
+ stroke: "rgba(255,255,255,0.05)",
567
+ strokeWidth: "1"
568
+ }
569
+ ), /* @__PURE__ */ React3.createElement(
570
+ "text",
571
+ {
572
+ x: padL - 4,
573
+ y: g.y + 4,
574
+ textAnchor: "end",
575
+ fill: "rgba(255,255,255,0.25)",
576
+ fontSize: "9"
577
+ },
578
+ g.val
579
+ ))), /* @__PURE__ */ React3.createElement("polygon", { points: areaPoints, fill: "url(#ag)" }), /* @__PURE__ */ React3.createElement(
580
+ "polyline",
581
+ {
582
+ points,
583
+ fill: "none",
584
+ stroke: accent,
585
+ strokeWidth: "1.5",
586
+ strokeLinejoin: "round",
587
+ strokeLinecap: "round"
588
+ }
589
+ ), data.map((d, i) => /* @__PURE__ */ React3.createElement("g", { key: i, onMouseEnter: () => setHovered(i), onMouseLeave: () => setHovered(null) }, /* @__PURE__ */ React3.createElement("rect", { x: getX(i) - 12, y: padT, width: 24, height: chartH, fill: "transparent" }), hovered === i && /* @__PURE__ */ React3.createElement(React3.Fragment, null, /* @__PURE__ */ React3.createElement(
590
+ "line",
591
+ {
592
+ x1: getX(i),
593
+ y1: padT,
594
+ x2: getX(i),
595
+ y2: padT + chartH,
596
+ stroke: "rgba(255,255,255,0.1)",
597
+ strokeWidth: "1",
598
+ strokeDasharray: "3 3"
599
+ }
600
+ ), showValues && /* @__PURE__ */ React3.createElement(
601
+ "text",
602
+ {
603
+ x: getX(i),
604
+ y: getY(d.value) - 10,
605
+ textAnchor: "middle",
606
+ fill: "#fff",
607
+ fontSize: "9",
608
+ fontWeight: "700"
609
+ },
610
+ d.value
611
+ )), /* @__PURE__ */ React3.createElement(
612
+ "text",
613
+ {
614
+ x: getX(i),
615
+ y: H - 6,
616
+ textAnchor: "middle",
617
+ fill: "rgba(255,255,255,0.3)",
618
+ fontSize: "9"
619
+ },
620
+ d.label
621
+ ))));
622
+ const renderChart = () => {
623
+ if (type === "line") return /* @__PURE__ */ React3.createElement(LineChart, null);
624
+ if (type === "pie") return /* @__PURE__ */ React3.createElement(PieChart, null);
625
+ if (type === "area") return /* @__PURE__ */ React3.createElement(AreaChart, null);
626
+ return /* @__PURE__ */ React3.createElement(BarChart, null);
627
+ };
628
+ return /* @__PURE__ */ React3.createElement("div", { style: {
629
+ background: bg,
630
+ borderRadius: radius,
631
+ padding: "20px",
632
+ fontFamily: "system-ui, sans-serif",
633
+ border: "1px solid rgba(255,255,255,0.07)",
634
+ width: "100%",
635
+ maxWidth: "360px",
636
+ boxSizing: "border-box"
637
+ } }, /* @__PURE__ */ React3.createElement("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", marginBottom: "16px" } }, /* @__PURE__ */ React3.createElement("p", { style: { fontSize: "14px", fontWeight: "700", color: "#fff", margin: 0 } }, title), /* @__PURE__ */ React3.createElement("span", { style: {
638
+ fontSize: "10px",
639
+ fontWeight: "700",
640
+ padding: "3px 9px",
641
+ borderRadius: "6px",
642
+ background: alpha(accent, 0.12),
643
+ color: accent,
644
+ border: `1px solid ${alpha(accent, 0.25)}`,
645
+ textTransform: "capitalize"
646
+ } }, type)), renderChart());
647
+ };
648
+
649
+ // src/components/ImageCard/ImageCard.jsx
650
+ import React4, { useState as useState3 } from "react";
651
+ var ImageCard = ({
652
+ image = "https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=600&q=80",
653
+ tag = "Travel",
654
+ title = "Discover the Hidden Peaks of the Himalayas",
655
+ description = "A breathtaking journey through untouched landscapes, ancient monasteries, and snow-capped summits that few have ever seen.",
656
+ buttonText = "Read More",
657
+ accent = "#6366f1",
658
+ bg = "#0f172a",
659
+ radius = "20px",
660
+ onButtonClick = () => {
661
+ }
662
+ }) => {
663
+ const [hovered, setHovered] = useState3(false);
664
+ const alpha = (hex, op) => {
665
+ const r = parseInt(hex.slice(1, 3), 16);
666
+ const g = parseInt(hex.slice(3, 5), 16);
667
+ const b = parseInt(hex.slice(5, 7), 16);
668
+ return `rgba(${r},${g},${b},${op})`;
669
+ };
670
+ return /* @__PURE__ */ React4.createElement(
671
+ "div",
672
+ {
673
+ onMouseEnter: () => setHovered(true),
674
+ onMouseLeave: () => setHovered(false),
675
+ style: {
676
+ background: bg,
677
+ borderRadius: radius,
678
+ overflow: "hidden",
679
+ width: "300px",
680
+ border: `1px solid ${hovered ? alpha(accent, 0.3) : "rgba(255,255,255,0.07)"}`,
681
+ fontFamily: "system-ui, sans-serif",
682
+ transition: "border-color 0.25s, transform 0.25s",
683
+ transform: hovered ? "translateY(-4px)" : "none",
684
+ boxShadow: hovered ? `0 16px 40px rgba(0,0,0,0.5)` : "0 4px 20px rgba(0,0,0,0.3)"
685
+ }
686
+ },
687
+ /* @__PURE__ */ React4.createElement("div", { style: { position: "relative", width: "100%", height: "180px", overflow: "hidden" } }, /* @__PURE__ */ React4.createElement(
688
+ "img",
689
+ {
690
+ src: image,
691
+ alt: title,
692
+ style: {
693
+ width: "100%",
694
+ height: "100%",
695
+ objectFit: "cover",
696
+ transform: hovered ? "scale(1.05)" : "scale(1)",
697
+ transition: "transform 0.4s ease"
698
+ }
699
+ }
700
+ ), /* @__PURE__ */ React4.createElement("div", { style: {
701
+ position: "absolute",
702
+ inset: 0,
703
+ background: "linear-gradient(to top, rgba(0,0,0,0.5) 0%, transparent 60%)"
704
+ } }), tag && /* @__PURE__ */ React4.createElement("div", { style: {
705
+ position: "absolute",
706
+ top: "12px",
707
+ left: "12px",
708
+ padding: "4px 10px",
709
+ borderRadius: "20px",
710
+ background: alpha(accent, 0.85),
711
+ fontSize: "10px",
712
+ fontWeight: "700",
713
+ color: "#fff",
714
+ letterSpacing: "0.5px",
715
+ textTransform: "uppercase"
716
+ } }, tag)),
717
+ /* @__PURE__ */ React4.createElement("div", { style: { padding: "18px" } }, /* @__PURE__ */ React4.createElement("h3", { style: {
718
+ fontSize: "15px",
719
+ fontWeight: "700",
720
+ color: "#fff",
721
+ margin: "0 0 8px",
722
+ lineHeight: 1.4
723
+ } }, title), /* @__PURE__ */ React4.createElement("p", { style: {
724
+ fontSize: "13px",
725
+ color: "rgba(255,255,255,0.45)",
726
+ lineHeight: 1.65,
727
+ margin: "0 0 18px"
728
+ } }, description), /* @__PURE__ */ React4.createElement(
729
+ "button",
730
+ {
731
+ onClick: onButtonClick,
732
+ style: {
733
+ width: "100%",
734
+ padding: "11px",
735
+ borderRadius: "12px",
736
+ border: "none",
737
+ background: `linear-gradient(135deg, ${accent}, ${alpha(accent, 0.7)})`,
738
+ color: "#fff",
739
+ fontSize: "13px",
740
+ fontWeight: "700",
741
+ cursor: "pointer",
742
+ fontFamily: "inherit",
743
+ transition: "opacity 0.2s"
744
+ },
745
+ onMouseEnter: (e) => e.currentTarget.style.opacity = "0.85",
746
+ onMouseLeave: (e) => e.currentTarget.style.opacity = "1"
747
+ },
748
+ buttonText
749
+ ))
750
+ );
751
+ };
752
+
753
+ // src/components/BackgoundImageSlider/BackgoundImageSlider.jsx
754
+ import React5, { useState as useState4, useEffect as useEffect2, useCallback } from "react";
755
+ var BackgoundImageSlider = ({
756
+ images = [
757
+ {
758
+ src: "https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=1400&q=80",
759
+ tag: "Travel",
760
+ title: "Hidden Peaks of the Himalayas",
761
+ description: "A breathtaking journey through untouched landscapes and ancient monasteries."
762
+ },
763
+ {
764
+ src: "https://images.unsplash.com/photo-1477959858617-67f85cf4f1df?w=1400&q=80",
765
+ tag: "Urban",
766
+ title: "City Lights at Night",
767
+ description: "Explore the vibrant energy of the world's most iconic skylines after dark."
768
+ },
769
+ {
770
+ src: "https://images.unsplash.com/photo-1500534314209-a25ddb2bd429?w=1400&q=80",
771
+ tag: "Nature",
772
+ title: "Tropical Beach Paradise",
773
+ description: "Crystal clear waters and white sand beaches that feel like the edge of the world."
774
+ },
775
+ {
776
+ src: "https://images.unsplash.com/photo-1519681393784-d120267933ba?w=1400&q=80",
777
+ tag: "Adventure",
778
+ title: "Starry Mountain Night",
779
+ description: "Where silence meets the cosmos \u2014 a night sky like you've never seen before."
780
+ }
781
+ ],
782
+ width = "100%",
783
+ height = "520px",
784
+ accent = "#6366f1",
785
+ radius = "0px",
786
+ showDots = true,
787
+ autoPlay = false,
788
+ autoPlayInterval = 4e3
789
+ }) => {
790
+ const [current, setCurrent] = useState4(0);
791
+ const [animating, setAnimating] = useState4(false);
792
+ const alpha = (hex, op) => {
793
+ const r = parseInt(hex.slice(1, 3), 16);
794
+ const g = parseInt(hex.slice(3, 5), 16);
795
+ const b = parseInt(hex.slice(5, 7), 16);
796
+ return `rgba(${r},${g},${b},${op})`;
797
+ };
798
+ const go = useCallback((index) => {
799
+ if (animating) return;
800
+ setAnimating(true);
801
+ setCurrent((index + images.length) % images.length);
802
+ setTimeout(() => setAnimating(false), 400);
803
+ }, [animating, images.length]);
804
+ const prev = () => go(current - 1);
805
+ const next = () => go(current + 1);
806
+ useEffect2(() => {
807
+ if (!autoPlay) return;
808
+ const t = setInterval(() => go(current + 1), autoPlayInterval);
809
+ return () => clearInterval(t);
810
+ }, [autoPlay, autoPlayInterval, current, go]);
811
+ const img = images[current];
812
+ return /* @__PURE__ */ React5.createElement(React5.Fragment, null, /* @__PURE__ */ React5.createElement("style", null, `
813
+ @keyframes hs-fade { from { opacity: 0; transform: scale(1.04); } to { opacity: 1; transform: scale(1); } }
814
+ @keyframes hs-up { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: translateY(0); } }
815
+ .hs-prev:hover, .hs-next:hover { background: rgba(0,0,0,0.65) !important; border-color: rgba(255,255,255,0.35) !important; }
816
+ `), /* @__PURE__ */ React5.createElement("div", { style: {
817
+ position: "relative",
818
+ width,
819
+ height,
820
+ borderRadius: radius,
821
+ overflow: "hidden",
822
+ fontFamily: "system-ui, -apple-system, sans-serif",
823
+ userSelect: "none"
824
+ } }, /* @__PURE__ */ React5.createElement(
825
+ "img",
826
+ {
827
+ key: current,
828
+ src: img.src,
829
+ alt: img.title,
830
+ style: {
831
+ position: "absolute",
832
+ inset: 0,
833
+ width: "100%",
834
+ height: "100%",
835
+ objectFit: "cover",
836
+ animation: "hs-fade 0.4s ease"
837
+ }
838
+ }
839
+ ), /* @__PURE__ */ React5.createElement("div", { style: {
840
+ position: "absolute",
841
+ inset: 0,
842
+ background: "linear-gradient(to top, rgba(0,0,0,0.75) 0%, rgba(0,0,0,0.2) 50%, rgba(0,0,0,0.1) 100%)"
843
+ } }), img.tag && /* @__PURE__ */ React5.createElement(
844
+ "div",
845
+ {
846
+ key: current + "-tag",
847
+ style: {
848
+ position: "absolute",
849
+ top: "24px",
850
+ left: "28px",
851
+ padding: "5px 14px",
852
+ borderRadius: "20px",
853
+ background: alpha(accent, 0.85),
854
+ fontSize: "11px",
855
+ fontWeight: "700",
856
+ color: "#fff",
857
+ letterSpacing: "0.6px",
858
+ textTransform: "uppercase",
859
+ animation: "hs-up 0.4s ease"
860
+ }
861
+ },
862
+ img.tag
863
+ ), /* @__PURE__ */ React5.createElement("div", { style: {
864
+ position: "absolute",
865
+ top: "24px",
866
+ right: "28px",
867
+ padding: "5px 12px",
868
+ borderRadius: "20px",
869
+ background: "rgba(0,0,0,0.45)",
870
+ fontSize: "11px",
871
+ fontWeight: "600",
872
+ color: "rgba(255,255,255,0.7)"
873
+ } }, current + 1, " / ", images.length), /* @__PURE__ */ React5.createElement(
874
+ "button",
875
+ {
876
+ className: "hs-prev",
877
+ onClick: prev,
878
+ style: {
879
+ position: "absolute",
880
+ left: "20px",
881
+ top: "50%",
882
+ transform: "translateY(-50%)",
883
+ width: "44px",
884
+ height: "44px",
885
+ borderRadius: "50%",
886
+ background: "rgba(0,0,0,0.4)",
887
+ border: "1px solid rgba(255,255,255,0.2)",
888
+ color: "#fff",
889
+ cursor: "pointer",
890
+ display: "flex",
891
+ alignItems: "center",
892
+ justifyContent: "center",
893
+ transition: "all 0.2s",
894
+ padding: 0,
895
+ zIndex: 10
896
+ }
897
+ },
898
+ /* @__PURE__ */ React5.createElement(
899
+ "svg",
900
+ {
901
+ width: "18",
902
+ height: "18",
903
+ viewBox: "0 0 24 24",
904
+ fill: "none",
905
+ stroke: "currentColor",
906
+ strokeWidth: "2.5",
907
+ strokeLinecap: "round",
908
+ strokeLinejoin: "round"
909
+ },
910
+ /* @__PURE__ */ React5.createElement("polyline", { points: "15 18 9 12 15 6" })
911
+ )
912
+ ), /* @__PURE__ */ React5.createElement(
913
+ "button",
914
+ {
915
+ className: "hs-next",
916
+ onClick: next,
917
+ style: {
918
+ position: "absolute",
919
+ right: "20px",
920
+ top: "50%",
921
+ transform: "translateY(-50%)",
922
+ width: "44px",
923
+ height: "44px",
924
+ borderRadius: "50%",
925
+ background: "rgba(0,0,0,0.4)",
926
+ border: "1px solid rgba(255,255,255,0.2)",
927
+ color: "#fff",
928
+ cursor: "pointer",
929
+ display: "flex",
930
+ alignItems: "center",
931
+ justifyContent: "center",
932
+ transition: "all 0.2s",
933
+ padding: 0,
934
+ zIndex: 10
935
+ }
936
+ },
937
+ /* @__PURE__ */ React5.createElement(
938
+ "svg",
939
+ {
940
+ width: "18",
941
+ height: "18",
942
+ viewBox: "0 0 24 24",
943
+ fill: "none",
944
+ stroke: "currentColor",
945
+ strokeWidth: "2.5",
946
+ strokeLinecap: "round",
947
+ strokeLinejoin: "round"
948
+ },
949
+ /* @__PURE__ */ React5.createElement("polyline", { points: "9 18 15 12 9 6" })
950
+ )
951
+ ), /* @__PURE__ */ React5.createElement("div", { style: {
952
+ position: "absolute",
953
+ bottom: showDots ? "56px" : "28px",
954
+ left: "28px",
955
+ right: "28px",
956
+ zIndex: 5
957
+ } }, /* @__PURE__ */ React5.createElement(
958
+ "h2",
959
+ {
960
+ key: current + "-title",
961
+ style: {
962
+ fontSize: "clamp(20px, 4vw, 36px)",
963
+ fontWeight: "800",
964
+ color: "#fff",
965
+ margin: "0 0 8px",
966
+ lineHeight: 1.25,
967
+ textShadow: "0 2px 12px rgba(0,0,0,0.4)",
968
+ animation: "hs-up 0.45s ease",
969
+ maxWidth: "600px"
970
+ }
971
+ },
972
+ img.title
973
+ ), /* @__PURE__ */ React5.createElement(
974
+ "p",
975
+ {
976
+ key: current + "-desc",
977
+ style: {
978
+ fontSize: "clamp(13px, 2vw, 15px)",
979
+ color: "rgba(255,255,255,0.7)",
980
+ margin: 0,
981
+ lineHeight: 1.6,
982
+ textShadow: "0 1px 6px rgba(0,0,0,0.5)",
983
+ animation: "hs-up 0.5s ease",
984
+ maxWidth: "500px"
985
+ }
986
+ },
987
+ img.description
988
+ )), showDots && /* @__PURE__ */ React5.createElement("div", { style: {
989
+ position: "absolute",
990
+ bottom: "20px",
991
+ left: 0,
992
+ right: 0,
993
+ display: "flex",
994
+ justifyContent: "center",
995
+ gap: "6px",
996
+ zIndex: 5
997
+ } }, images.map((_, i) => /* @__PURE__ */ React5.createElement(
998
+ "button",
999
+ {
1000
+ key: i,
1001
+ onClick: () => go(i),
1002
+ style: {
1003
+ width: i === current ? "24px" : "7px",
1004
+ height: "7px",
1005
+ borderRadius: "4px",
1006
+ border: "none",
1007
+ padding: 0,
1008
+ cursor: "pointer",
1009
+ background: i === current ? accent : "rgba(255,255,255,0.4)",
1010
+ transition: "all 0.3s ease"
1011
+ }
1012
+ }
1013
+ )))));
1014
+ };
1015
+
1016
+ // src/components/FileUpload/FileUpload.jsx
1017
+ import React6, { useState as useState5, useRef } from "react";
1018
+ var FileUpload = ({
1019
+ accept = "*",
1020
+ multiple = true,
1021
+ maxSizeMB = 5,
1022
+ accent = "#6366f1",
1023
+ bg = "#0f172a",
1024
+ radius = "16px",
1025
+ label = "Drop files here or click to upload",
1026
+ subLabel = "Supports any file up to",
1027
+ onUpload = () => {
1028
+ }
1029
+ }) => {
1030
+ const [files, setFiles] = useState5([]);
1031
+ const [dragging, setDragging] = useState5(false);
1032
+ const [error, setError] = useState5("");
1033
+ const inputRef = useRef(null);
1034
+ const alpha = (hex, op) => {
1035
+ const r = parseInt(hex.slice(1, 3), 16);
1036
+ const g = parseInt(hex.slice(3, 5), 16);
1037
+ const b = parseInt(hex.slice(5, 7), 16);
1038
+ return `rgba(${r},${g},${b},${op})`;
1039
+ };
1040
+ const formatSize = (bytes) => {
1041
+ if (bytes < 1024) return bytes + " B";
1042
+ if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + " KB";
1043
+ return (bytes / (1024 * 1024)).toFixed(1) + " MB";
1044
+ };
1045
+ const getIcon = (type) => {
1046
+ if (type.startsWith("image/")) return { path: "M21 19V5a2 2 0 00-2-2H5a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2zM8.5 13.5l2.5 3 3.5-4.5 4.5 6H5l3.5-4.5z", color: "#a78bfa" };
1047
+ if (type.includes("pdf")) return { path: "M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8zM14 2v6h6M16 13H8M16 17H8M10 9H8", color: "#f87171" };
1048
+ if (type.includes("video")) return { path: "M23 7l-7 5 7 5V7zM1 5h15a2 2 0 012 2v10a2 2 0 01-2 2H1a2 2 0 01-2-2V7a2 2 0 012-2z", color: "#34d399" };
1049
+ if (type.includes("audio")) return { path: "M9 18V5l12-2v13M9 18c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm12-2c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2z", color: "#fbbf24" };
1050
+ return { path: "M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8zM14 2v6h6", color: "#94a3b8" };
1051
+ };
1052
+ const processFiles = (incoming) => {
1053
+ setError("");
1054
+ const valid = [];
1055
+ for (const f of incoming) {
1056
+ if (f.size > maxSizeMB * 1024 * 1024) {
1057
+ setError(`"${f.name}" exceeds ${maxSizeMB}MB limit.`);
1058
+ continue;
1059
+ }
1060
+ valid.push({ file: f, id: Math.random().toString(36).slice(2), progress: 0, done: false });
1061
+ }
1062
+ if (!valid.length) return;
1063
+ const newFiles = multiple ? [...files, ...valid] : valid;
1064
+ setFiles(newFiles);
1065
+ valid.forEach(({ id }) => {
1066
+ let p = 0;
1067
+ const t = setInterval(() => {
1068
+ p += Math.floor(Math.random() * 15) + 5;
1069
+ if (p >= 100) {
1070
+ p = 100;
1071
+ clearInterval(t);
1072
+ setFiles((prev) => prev.map((f) => f.id === id ? { ...f, progress: 100, done: true } : f));
1073
+ onUpload(id);
1074
+ } else {
1075
+ setFiles((prev) => prev.map((f) => f.id === id ? { ...f, progress: p } : f));
1076
+ }
1077
+ }, 200);
1078
+ });
1079
+ };
1080
+ const handleDrop = (e) => {
1081
+ e.preventDefault();
1082
+ setDragging(false);
1083
+ processFiles(Array.from(e.dataTransfer.files));
1084
+ };
1085
+ const removeFile = (id) => setFiles((prev) => prev.filter((f) => f.id !== id));
1086
+ return /* @__PURE__ */ React6.createElement("div", { style: { width: "320px", fontFamily: "system-ui, sans-serif" } }, /* @__PURE__ */ React6.createElement(
1087
+ "div",
1088
+ {
1089
+ onClick: () => {
1090
+ var _a;
1091
+ return (_a = inputRef.current) == null ? void 0 : _a.click();
1092
+ },
1093
+ onDragOver: (e) => {
1094
+ e.preventDefault();
1095
+ setDragging(true);
1096
+ },
1097
+ onDragLeave: () => setDragging(false),
1098
+ onDrop: handleDrop,
1099
+ style: {
1100
+ background: dragging ? alpha(accent, 0.1) : "rgba(255,255,255,0.03)",
1101
+ border: `2px dashed ${dragging ? accent : "rgba(255,255,255,0.1)"}`,
1102
+ borderRadius: radius,
1103
+ padding: "32px 20px",
1104
+ textAlign: "center",
1105
+ cursor: "pointer",
1106
+ transition: "all 0.2s"
1107
+ }
1108
+ },
1109
+ /* @__PURE__ */ React6.createElement(
1110
+ "input",
1111
+ {
1112
+ ref: inputRef,
1113
+ type: "file",
1114
+ accept,
1115
+ multiple,
1116
+ style: { display: "none" },
1117
+ onChange: (e) => processFiles(Array.from(e.target.files))
1118
+ }
1119
+ ),
1120
+ /* @__PURE__ */ React6.createElement("div", { style: {
1121
+ width: "48px",
1122
+ height: "48px",
1123
+ borderRadius: "14px",
1124
+ background: alpha(accent, 0.12),
1125
+ border: `1px solid ${alpha(accent, 0.25)}`,
1126
+ display: "flex",
1127
+ alignItems: "center",
1128
+ justifyContent: "center",
1129
+ margin: "0 auto 14px",
1130
+ transition: "all 0.2s",
1131
+ transform: dragging ? "scale(1.1)" : "scale(1)"
1132
+ } }, /* @__PURE__ */ React6.createElement(
1133
+ "svg",
1134
+ {
1135
+ width: "22",
1136
+ height: "22",
1137
+ viewBox: "0 0 24 24",
1138
+ fill: "none",
1139
+ stroke: accent,
1140
+ strokeWidth: "2",
1141
+ strokeLinecap: "round",
1142
+ strokeLinejoin: "round"
1143
+ },
1144
+ /* @__PURE__ */ React6.createElement("path", { d: "M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M17 8l-5-5-5 5M12 3v12" })
1145
+ )),
1146
+ /* @__PURE__ */ React6.createElement("p", { style: { fontSize: "13px", fontWeight: "600", color: "#fff", margin: "0 0 4px" } }, label),
1147
+ /* @__PURE__ */ React6.createElement("p", { style: { fontSize: "11px", color: "rgba(255,255,255,0.3)", margin: 0 } }, subLabel, " ", maxSizeMB, "MB")
1148
+ ), error && /* @__PURE__ */ React6.createElement("div", { style: {
1149
+ marginTop: "10px",
1150
+ padding: "9px 12px",
1151
+ borderRadius: "10px",
1152
+ background: "rgba(239,68,68,0.08)",
1153
+ border: "1px solid rgba(239,68,68,0.2)",
1154
+ display: "flex",
1155
+ alignItems: "center",
1156
+ gap: "8px"
1157
+ } }, /* @__PURE__ */ React6.createElement(
1158
+ "svg",
1159
+ {
1160
+ width: "13",
1161
+ height: "13",
1162
+ viewBox: "0 0 24 24",
1163
+ fill: "none",
1164
+ stroke: "#f87171",
1165
+ strokeWidth: "2.5",
1166
+ strokeLinecap: "round"
1167
+ },
1168
+ /* @__PURE__ */ React6.createElement("circle", { cx: "12", cy: "12", r: "10" }),
1169
+ /* @__PURE__ */ React6.createElement("line", { x1: "12", y1: "8", x2: "12", y2: "12" }),
1170
+ /* @__PURE__ */ React6.createElement("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })
1171
+ ), /* @__PURE__ */ React6.createElement("span", { style: { fontSize: "11px", color: "#f87171" } }, error)), files.length > 0 && /* @__PURE__ */ React6.createElement("div", { style: { marginTop: "12px", display: "flex", flexDirection: "column", gap: "8px" } }, files.map(({ file, id, progress, done }) => {
1172
+ const icon = getIcon(file.type);
1173
+ const preview = file.type.startsWith("image/") ? URL.createObjectURL(file) : null;
1174
+ return /* @__PURE__ */ React6.createElement("div", { key: id, style: {
1175
+ background: "rgba(255,255,255,0.03)",
1176
+ border: `1px solid ${done ? alpha(accent, 0.2) : "rgba(255,255,255,0.07)"}`,
1177
+ borderRadius: "12px",
1178
+ padding: "10px 12px",
1179
+ transition: "border-color 0.3s"
1180
+ } }, /* @__PURE__ */ React6.createElement("div", { style: { display: "flex", alignItems: "center", gap: "10px" } }, /* @__PURE__ */ React6.createElement("div", { style: {
1181
+ width: "36px",
1182
+ height: "36px",
1183
+ borderRadius: "8px",
1184
+ flexShrink: 0,
1185
+ background: preview ? `url(${preview}) center/cover` : alpha(icon.color, 0.12),
1186
+ border: `1px solid ${alpha(icon.color, 0.2)}`,
1187
+ display: "flex",
1188
+ alignItems: "center",
1189
+ justifyContent: "center",
1190
+ overflow: "hidden"
1191
+ } }, !preview && /* @__PURE__ */ React6.createElement(
1192
+ "svg",
1193
+ {
1194
+ width: "16",
1195
+ height: "16",
1196
+ viewBox: "0 0 24 24",
1197
+ fill: "none",
1198
+ stroke: icon.color,
1199
+ strokeWidth: "2",
1200
+ strokeLinecap: "round",
1201
+ strokeLinejoin: "round"
1202
+ },
1203
+ /* @__PURE__ */ React6.createElement("path", { d: icon.path })
1204
+ )), /* @__PURE__ */ React6.createElement("div", { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ React6.createElement("p", { style: {
1205
+ fontSize: "12px",
1206
+ fontWeight: "600",
1207
+ color: "#fff",
1208
+ margin: "0 0 2px",
1209
+ overflow: "hidden",
1210
+ textOverflow: "ellipsis",
1211
+ whiteSpace: "nowrap"
1212
+ } }, file.name), /* @__PURE__ */ React6.createElement("p", { style: { fontSize: "10px", color: "rgba(255,255,255,0.3)", margin: 0 } }, formatSize(file.size))), done ? /* @__PURE__ */ React6.createElement("div", { style: {
1213
+ width: "22px",
1214
+ height: "22px",
1215
+ borderRadius: "50%",
1216
+ background: "rgba(16,185,129,0.15)",
1217
+ border: "1px solid rgba(16,185,129,0.3)",
1218
+ display: "flex",
1219
+ alignItems: "center",
1220
+ justifyContent: "center",
1221
+ flexShrink: 0
1222
+ } }, /* @__PURE__ */ React6.createElement(
1223
+ "svg",
1224
+ {
1225
+ width: "10",
1226
+ height: "10",
1227
+ viewBox: "0 0 24 24",
1228
+ fill: "none",
1229
+ stroke: "#34d399",
1230
+ strokeWidth: "3",
1231
+ strokeLinecap: "round"
1232
+ },
1233
+ /* @__PURE__ */ React6.createElement("polyline", { points: "20 6 9 17 4 12" })
1234
+ )) : /* @__PURE__ */ React6.createElement(
1235
+ "button",
1236
+ {
1237
+ onClick: () => removeFile(id),
1238
+ style: {
1239
+ background: "transparent",
1240
+ border: "none",
1241
+ padding: "2px",
1242
+ cursor: "pointer",
1243
+ color: "rgba(255,255,255,0.25)",
1244
+ flexShrink: 0,
1245
+ transition: "color 0.2s"
1246
+ },
1247
+ onMouseEnter: (e) => e.currentTarget.style.color = "#f87171",
1248
+ onMouseLeave: (e) => e.currentTarget.style.color = "rgba(255,255,255,0.25)"
1249
+ },
1250
+ /* @__PURE__ */ React6.createElement(
1251
+ "svg",
1252
+ {
1253
+ width: "14",
1254
+ height: "14",
1255
+ viewBox: "0 0 24 24",
1256
+ fill: "none",
1257
+ stroke: "currentColor",
1258
+ strokeWidth: "2.5",
1259
+ strokeLinecap: "round"
1260
+ },
1261
+ /* @__PURE__ */ React6.createElement("path", { d: "M18 6L6 18M6 6l12 12" })
1262
+ )
1263
+ )), !done && /* @__PURE__ */ React6.createElement("div", { style: {
1264
+ marginTop: "8px",
1265
+ height: "3px",
1266
+ background: "rgba(255,255,255,0.06)",
1267
+ borderRadius: "2px",
1268
+ overflow: "hidden"
1269
+ } }, /* @__PURE__ */ React6.createElement("div", { style: {
1270
+ height: "100%",
1271
+ borderRadius: "2px",
1272
+ width: `${progress}%`,
1273
+ background: `linear-gradient(90deg, ${accent}, ${alpha(accent, 0.6)})`,
1274
+ transition: "width 0.2s ease"
1275
+ } })));
1276
+ })));
1277
+ };
1278
+
1279
+ // src/components/ColorPicker/ColorPicker.jsx
1280
+ import React7, { useState as useState6 } from "react";
1281
+ var ColorPicker = ({
1282
+ defaultColor = "#6366f1",
1283
+ showOpacity = true,
1284
+ showEyedropper = true,
1285
+ showInput = true,
1286
+ accent = "#6366f1",
1287
+ bg = "#0f172a",
1288
+ radius = "16px",
1289
+ onChange = () => {
1290
+ },
1291
+ swatches = [
1292
+ "#6366f1",
1293
+ "#8b5cf6",
1294
+ "#a855f7",
1295
+ "#ec4899",
1296
+ "#f43f5e",
1297
+ "#ef4444",
1298
+ "#f97316",
1299
+ "#f59e0b",
1300
+ "#eab308",
1301
+ "#84cc16",
1302
+ "#22c55e",
1303
+ "#10b981",
1304
+ "#14b8a6",
1305
+ "#06b6d4",
1306
+ "#3b82f6",
1307
+ "#0ea5e9",
1308
+ "#64748b",
1309
+ "#94a3b8",
1310
+ "#ffffff",
1311
+ "#000000"
1312
+ ]
1313
+ }) => {
1314
+ const [color, setColor] = useState6(defaultColor);
1315
+ const [hex, setHex] = useState6(defaultColor);
1316
+ const [opacity, setOpacity] = useState6(100);
1317
+ const [inputErr, setInputErr] = useState6(false);
1318
+ const [copied, setCopied] = useState6(false);
1319
+ const alpha = (hexVal, op) => {
1320
+ const r = parseInt(hexVal.slice(1, 3), 16);
1321
+ const g = parseInt(hexVal.slice(3, 5), 16);
1322
+ const b = parseInt(hexVal.slice(5, 7), 16);
1323
+ return `rgba(${r},${g},${b},${op})`;
1324
+ };
1325
+ const isValidHex = (v) => /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/.test(v);
1326
+ const applyColor = (val) => {
1327
+ if (!isValidHex(val)) {
1328
+ setInputErr(true);
1329
+ return;
1330
+ }
1331
+ setInputErr(false);
1332
+ setColor(val);
1333
+ setHex(val);
1334
+ onChange({ hex: val, opacity, rgba: alpha(val, opacity / 100) });
1335
+ };
1336
+ const pickSwatch = (val) => {
1337
+ setColor(val);
1338
+ setHex(val);
1339
+ setInputErr(false);
1340
+ onChange({ hex: val, opacity, rgba: alpha(val, opacity / 100) });
1341
+ };
1342
+ const handleOpacity = (v) => {
1343
+ setOpacity(v);
1344
+ onChange({ hex: color, opacity: v, rgba: alpha(color, v / 100) });
1345
+ };
1346
+ const copyHex = () => {
1347
+ var _a;
1348
+ (_a = navigator.clipboard) == null ? void 0 : _a.writeText(hex).catch(() => {
1349
+ });
1350
+ setCopied(true);
1351
+ setTimeout(() => setCopied(false), 1500);
1352
+ };
1353
+ const hueGradient = "linear-gradient(90deg,#f00,#ff0,#0f0,#0ff,#00f,#f0f,#f00)";
1354
+ return /* @__PURE__ */ React7.createElement("div", { style: {
1355
+ background: bg,
1356
+ borderRadius: radius,
1357
+ padding: "20px",
1358
+ width: "260px",
1359
+ fontFamily: "system-ui, sans-serif",
1360
+ border: "1px solid rgba(255,255,255,0.07)",
1361
+ boxShadow: "0 10px 40px rgba(0,0,0,0.4)"
1362
+ } }, /* @__PURE__ */ React7.createElement("div", { style: {
1363
+ height: "52px",
1364
+ borderRadius: "12px",
1365
+ marginBottom: "16px",
1366
+ background: alpha(color, opacity / 100),
1367
+ border: "1px solid rgba(255,255,255,0.08)",
1368
+ position: "relative",
1369
+ overflow: "hidden"
1370
+ } }, /* @__PURE__ */ React7.createElement("div", { style: {
1371
+ position: "absolute",
1372
+ inset: 0,
1373
+ zIndex: 0,
1374
+ backgroundImage: "linear-gradient(45deg,#555 25%,transparent 25%),linear-gradient(-45deg,#555 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#555 75%),linear-gradient(-45deg,transparent 75%,#555 75%)",
1375
+ backgroundSize: "10px 10px",
1376
+ backgroundPosition: "0 0,0 5px,5px -5px,-5px 0",
1377
+ opacity: 0.3
1378
+ } }), /* @__PURE__ */ React7.createElement("div", { style: { position: "absolute", inset: 0, background: alpha(color, opacity / 100) } })), /* @__PURE__ */ React7.createElement("div", { style: { position: "relative", marginBottom: "12px" } }, /* @__PURE__ */ React7.createElement(
1379
+ "input",
1380
+ {
1381
+ type: "range",
1382
+ min: "0",
1383
+ max: "360",
1384
+ defaultValue: "240",
1385
+ onChange: (e) => {
1386
+ const h = e.target.value;
1387
+ const c = `hsl(${h},80%,60%)`;
1388
+ const el = document.createElement("div");
1389
+ el.style.color = c;
1390
+ document.body.appendChild(el);
1391
+ const rgb = getComputedStyle(el).color;
1392
+ document.body.removeChild(el);
1393
+ const [r, g, b] = rgb.match(/\d+/g).map(Number);
1394
+ const hex6 = "#" + [r, g, b].map((n) => n.toString(16).padStart(2, "0")).join("");
1395
+ pickSwatch(hex6);
1396
+ },
1397
+ style: {
1398
+ width: "100%",
1399
+ height: "10px",
1400
+ borderRadius: "5px",
1401
+ appearance: "none",
1402
+ WebkitAppearance: "none",
1403
+ background: hueGradient,
1404
+ cursor: "pointer",
1405
+ outline: "none",
1406
+ border: "none"
1407
+ }
1408
+ }
1409
+ )), showOpacity && /* @__PURE__ */ React7.createElement("div", { style: { marginBottom: "16px" } }, /* @__PURE__ */ React7.createElement(
1410
+ "input",
1411
+ {
1412
+ type: "range",
1413
+ min: "0",
1414
+ max: "100",
1415
+ value: opacity,
1416
+ onChange: (e) => handleOpacity(Number(e.target.value)),
1417
+ style: {
1418
+ width: "100%",
1419
+ height: "10px",
1420
+ borderRadius: "5px",
1421
+ appearance: "none",
1422
+ WebkitAppearance: "none",
1423
+ background: `linear-gradient(90deg, transparent, ${color})`,
1424
+ cursor: "pointer",
1425
+ outline: "none",
1426
+ border: "none"
1427
+ }
1428
+ }
1429
+ ), /* @__PURE__ */ React7.createElement("div", { style: { display: "flex", justifyContent: "space-between", marginTop: "4px" } }, /* @__PURE__ */ React7.createElement("span", { style: { fontSize: "10px", color: "rgba(255,255,255,0.25)" } }, "Opacity"), /* @__PURE__ */ React7.createElement("span", { style: { fontSize: "10px", color: "rgba(255,255,255,0.45)", fontWeight: "600" } }, opacity, "%"))), showInput && /* @__PURE__ */ React7.createElement("div", { style: { display: "flex", gap: "8px", marginBottom: "16px", alignItems: "center" } }, /* @__PURE__ */ React7.createElement("div", { style: {
1430
+ width: "32px",
1431
+ height: "32px",
1432
+ borderRadius: "8px",
1433
+ flexShrink: 0,
1434
+ background: color,
1435
+ border: "1px solid rgba(255,255,255,0.1)"
1436
+ } }), /* @__PURE__ */ React7.createElement(
1437
+ "input",
1438
+ {
1439
+ value: hex,
1440
+ onChange: (e) => {
1441
+ setHex(e.target.value);
1442
+ setInputErr(false);
1443
+ },
1444
+ onBlur: (e) => applyColor(e.target.value),
1445
+ onKeyDown: (e) => e.key === "Enter" && applyColor(hex),
1446
+ placeholder: "#000000",
1447
+ style: {
1448
+ flex: 1,
1449
+ background: "rgba(255,255,255,0.05)",
1450
+ border: `1px solid ${inputErr ? "rgba(239,68,68,0.6)" : "rgba(255,255,255,0.1)"}`,
1451
+ borderRadius: "8px",
1452
+ padding: "7px 10px",
1453
+ fontSize: "12px",
1454
+ fontFamily: "monospace",
1455
+ color: inputErr ? "#f87171" : "#fff",
1456
+ outline: "none"
1457
+ }
1458
+ }
1459
+ ), /* @__PURE__ */ React7.createElement(
1460
+ "button",
1461
+ {
1462
+ onClick: copyHex,
1463
+ title: "Copy hex",
1464
+ style: {
1465
+ width: "32px",
1466
+ height: "32px",
1467
+ borderRadius: "8px",
1468
+ flexShrink: 0,
1469
+ background: copied ? "rgba(16,185,129,0.15)" : "rgba(255,255,255,0.05)",
1470
+ border: `1px solid ${copied ? "rgba(16,185,129,0.3)" : "rgba(255,255,255,0.1)"}`,
1471
+ cursor: "pointer",
1472
+ display: "flex",
1473
+ alignItems: "center",
1474
+ justifyContent: "center",
1475
+ color: copied ? "#34d399" : "rgba(255,255,255,0.4)",
1476
+ transition: "all 0.2s"
1477
+ }
1478
+ },
1479
+ copied ? /* @__PURE__ */ React7.createElement("svg", { width: "13", height: "13", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round" }, /* @__PURE__ */ React7.createElement("polyline", { points: "20 6 9 17 4 12" })) : /* @__PURE__ */ React7.createElement("svg", { width: "13", height: "13", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }, /* @__PURE__ */ React7.createElement("rect", { x: "9", y: "9", width: "13", height: "13", rx: "2" }), /* @__PURE__ */ React7.createElement("path", { d: "M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1" }))
1480
+ )), /* @__PURE__ */ React7.createElement("div", { style: { height: "1px", background: "rgba(255,255,255,0.06)", marginBottom: "14px" } }), /* @__PURE__ */ React7.createElement("div", { style: { display: "flex", flexWrap: "wrap", gap: "7px" } }, swatches.map((s) => /* @__PURE__ */ React7.createElement(
1481
+ "button",
1482
+ {
1483
+ key: s,
1484
+ onClick: () => pickSwatch(s),
1485
+ title: s,
1486
+ style: {
1487
+ width: "22px",
1488
+ height: "22px",
1489
+ borderRadius: "6px",
1490
+ background: s,
1491
+ border: `2px solid ${color === s ? "#fff" : "transparent"}`,
1492
+ cursor: "pointer",
1493
+ padding: 0,
1494
+ transition: "transform 0.15s, border-color 0.15s",
1495
+ outline: "none",
1496
+ boxShadow: s === "#ffffff" ? "inset 0 0 0 1px rgba(0,0,0,0.15)" : "none"
1497
+ },
1498
+ onMouseEnter: (e) => e.currentTarget.style.transform = "scale(1.2)",
1499
+ onMouseLeave: (e) => e.currentTarget.style.transform = "scale(1)"
1500
+ }
1501
+ ))), /* @__PURE__ */ React7.createElement("div", { style: {
1502
+ marginTop: "14px",
1503
+ padding: "8px 10px",
1504
+ borderRadius: "8px",
1505
+ background: "rgba(255,255,255,0.03)",
1506
+ border: "1px solid rgba(255,255,255,0.06)",
1507
+ display: "flex",
1508
+ justifyContent: "space-between",
1509
+ alignItems: "center"
1510
+ } }, /* @__PURE__ */ React7.createElement("span", { style: { fontSize: "10px", color: "rgba(255,255,255,0.25)", fontWeight: "600", textTransform: "uppercase", letterSpacing: "0.5px" } }, "RGBA"), /* @__PURE__ */ React7.createElement("span", { style: { fontSize: "10px", fontFamily: "monospace", color: "rgba(255,255,255,0.5)" } }, alpha(color, opacity / 100))));
1511
+ };
1512
+
1513
+ // src/components/AnimatedForm/AnimatedForm.jsx
1514
+ import React8, { useState as useState7 } from "react";
1515
+ var AnimatedForm = ({
1516
+ title = "Contact Us",
1517
+ description = "We'll get back to you shortly",
1518
+ submitText = "Send Message",
1519
+ accent = "#6366f1",
1520
+ bg = "#0f172a",
1521
+ onSubmit = () => {
1522
+ }
1523
+ }) => {
1524
+ const [name, setName] = useState7("");
1525
+ const [email, setEmail] = useState7("");
1526
+ const [message, setMessage] = useState7("");
1527
+ const [hovered, setHovered] = useState7(false);
1528
+ const alpha = (hex, op) => {
1529
+ const r = parseInt(hex.slice(1, 3), 16), g = parseInt(hex.slice(3, 5), 16), b = parseInt(hex.slice(5, 7), 16);
1530
+ return "rgba(" + r + "," + g + "," + b + "," + op + ")";
1531
+ };
1532
+ return /* @__PURE__ */ React8.createElement(
1533
+ "div",
1534
+ {
1535
+ onMouseEnter: () => setHovered(true),
1536
+ onMouseLeave: () => setHovered(false),
1537
+ style: {
1538
+ background: bg,
1539
+ borderRadius: "20px",
1540
+ padding: "28px",
1541
+ width: "400px",
1542
+ border: "1px solid " + (hovered ? alpha(accent, 0.3) : "rgba(255,255,255,0.07)"),
1543
+ fontFamily: "system-ui,sans-serif",
1544
+ transition: "transform 0.25s, box-shadow 0.25s",
1545
+ transform: hovered ? "translateY(-4px)" : "translateY(0px)",
1546
+ boxShadow: hovered ? "0 16px 40px rgba(0,0,0,0.5)" : "0 4px 20px rgba(0,0,0,0.3)"
1547
+ }
1548
+ },
1549
+ /* @__PURE__ */ React8.createElement("h2", { style: { fontSize: "20px", fontWeight: "700", color: "#fff", margin: "0 0 8px" } }, title),
1550
+ /* @__PURE__ */ React8.createElement("p", { style: { fontSize: "14px", color: "rgba(255,255,255,0.45)", margin: "0 0 24px" } }, description),
1551
+ /* @__PURE__ */ React8.createElement(
1552
+ "input",
1553
+ {
1554
+ type: "text",
1555
+ placeholder: "Your Name",
1556
+ value: name,
1557
+ onChange: (e) => setName(e.target.value),
1558
+ style: {
1559
+ width: "100%",
1560
+ padding: "12px",
1561
+ borderRadius: "10px",
1562
+ border: "1px solid rgba(255,255,255,0.1)",
1563
+ background: "#1e293b",
1564
+ color: "#fff",
1565
+ fontSize: "14px",
1566
+ marginBottom: "16px",
1567
+ outline: "none",
1568
+ transition: "border-color 0.2s",
1569
+ fontFamily: "inherit"
1570
+ }
1571
+ }
1572
+ ),
1573
+ /* @__PURE__ */ React8.createElement(
1574
+ "input",
1575
+ {
1576
+ type: "email",
1577
+ placeholder: "Your Email",
1578
+ value: email,
1579
+ onChange: (e) => setEmail(e.target.value),
1580
+ style: {
1581
+ width: "100%",
1582
+ padding: "12px",
1583
+ borderRadius: "10px",
1584
+ border: "1px solid rgba(255,255,255,0.1)",
1585
+ background: "#1e293b",
1586
+ color: "#fff",
1587
+ fontSize: "14px",
1588
+ marginBottom: "16px",
1589
+ outline: "none",
1590
+ transition: "border-color 0.2s",
1591
+ fontFamily: "inherit"
1592
+ }
1593
+ }
1594
+ ),
1595
+ /* @__PURE__ */ React8.createElement(
1596
+ "textarea",
1597
+ {
1598
+ placeholder: "Your Message",
1599
+ value: message,
1600
+ onChange: (e) => setMessage(e.target.value),
1601
+ style: {
1602
+ width: "100%",
1603
+ padding: "12px",
1604
+ borderRadius: "10px",
1605
+ border: "1px solid rgba(255,255,255,0.1)",
1606
+ background: "#1e293b",
1607
+ color: "#fff",
1608
+ fontSize: "14px",
1609
+ marginBottom: "24px",
1610
+ outline: "none",
1611
+ transition: "border-color 0.2s",
1612
+ fontFamily: "inherit",
1613
+ minHeight: "120px",
1614
+ resize: "vertical"
1615
+ }
1616
+ }
1617
+ ),
1618
+ /* @__PURE__ */ React8.createElement(
1619
+ "button",
1620
+ {
1621
+ onClick: () => onSubmit({ name, email, message }),
1622
+ style: {
1623
+ width: "100%",
1624
+ padding: "13px",
1625
+ borderRadius: "12px",
1626
+ border: "none",
1627
+ background: "linear-gradient(135deg, " + accent + ", " + alpha(accent, 0.7) + ")",
1628
+ color: "#fff",
1629
+ fontSize: "14px",
1630
+ fontWeight: "700",
1631
+ cursor: "pointer",
1632
+ fontFamily: "inherit"
1633
+ }
1634
+ },
1635
+ submitText
1636
+ )
1637
+ );
1638
+ };
1639
+
1640
+ // src/components/Card/Card.jsx
1641
+ import React9, { useState as useState8 } from "react";
1642
+ var Card = ({
1643
+ title = "Performance",
1644
+ description = "Real-time metrics with live dashboard updates every second.",
1645
+ icon = "\u26A1",
1646
+ tag = "Active",
1647
+ onClick
1648
+ }) => {
1649
+ const [hovered, setHovered] = useState8(false);
1650
+ return /* @__PURE__ */ React9.createElement(
1651
+ "div",
1652
+ {
1653
+ onMouseEnter: () => setHovered(true),
1654
+ onMouseLeave: () => setHovered(false),
1655
+ onClick,
1656
+ style: {
1657
+ background: "#ffffff",
1658
+ border: `0.5px solid ${hovered ? "#00000033" : "#0000001a"}`,
1659
+ borderRadius: "12px",
1660
+ padding: "1.25rem",
1661
+ transition: "border-color 0.2s, transform 0.2s",
1662
+ transform: hovered ? "translateY(-2px)" : "translateY(0)",
1663
+ cursor: onClick ? "pointer" : "default",
1664
+ position: "relative",
1665
+ overflow: "hidden",
1666
+ fontFamily: "sans-serif",
1667
+ width: "260px"
1668
+ }
1669
+ },
1670
+ /* @__PURE__ */ React9.createElement("div", { style: {
1671
+ position: "absolute",
1672
+ top: 0,
1673
+ left: 0,
1674
+ right: 0,
1675
+ height: "3px",
1676
+ background: "#1D9E75",
1677
+ borderRadius: "12px 12px 0 0"
1678
+ } }),
1679
+ /* @__PURE__ */ React9.createElement("div", { style: {
1680
+ width: 40,
1681
+ height: 40,
1682
+ borderRadius: 8,
1683
+ background: "#E1F5EE",
1684
+ display: "flex",
1685
+ alignItems: "center",
1686
+ justifyContent: "center",
1687
+ fontSize: 18,
1688
+ marginBottom: 14
1689
+ } }, icon),
1690
+ /* @__PURE__ */ React9.createElement("p", { style: { fontSize: 15, fontWeight: 700, color: "#111", margin: "0 0 6px" } }, title),
1691
+ /* @__PURE__ */ React9.createElement("p", { style: { fontSize: 13, color: "#666", lineHeight: 1.6, margin: "0 0 16px" } }, description),
1692
+ /* @__PURE__ */ React9.createElement("div", { style: {
1693
+ display: "flex",
1694
+ alignItems: "center",
1695
+ justifyContent: "space-between",
1696
+ borderTop: "0.5px solid #0000001a",
1697
+ paddingTop: 12
1698
+ } }, /* @__PURE__ */ React9.createElement("span", { style: {
1699
+ fontSize: 11,
1700
+ fontWeight: 500,
1701
+ padding: "3px 9px",
1702
+ borderRadius: 20,
1703
+ background: "#E1F5EE",
1704
+ color: "#0F6E56"
1705
+ } }, tag), /* @__PURE__ */ React9.createElement("span", { style: {
1706
+ fontSize: 14,
1707
+ color: "#999",
1708
+ display: "inline-block",
1709
+ transition: "transform 0.2s",
1710
+ transform: hovered ? "translateX(3px)" : "translateX(0)"
1711
+ } }, "\u2192"))
1712
+ );
1713
+ };
1714
+
1715
+ // src/components/Button/Button.jsx
1716
+ import React10, { useState as useState9 } from "react";
1717
+ var Button = ({
1718
+ text = "Click Me",
1719
+ variant = "gradient",
1720
+ // primary | outline | ghost | gradient
1721
+ size = "md",
1722
+ // sm | md | lg
1723
+ icon,
1724
+ loading = false,
1725
+ disabled = false,
1726
+ onClick
1727
+ }) => {
1728
+ const [hovered, setHovered] = useState9(false);
1729
+ const variants = {
1730
+ primary: {
1731
+ background: "#2563eb",
1732
+ color: "#fff",
1733
+ border: "none"
1734
+ },
1735
+ outline: {
1736
+ background: "transparent",
1737
+ color: "#2563eb",
1738
+ border: "1px solid #2563eb"
1739
+ },
1740
+ ghost: {
1741
+ background: "transparent",
1742
+ color: "#111",
1743
+ border: "none"
1744
+ },
1745
+ gradient: {
1746
+ background: "linear-gradient(135deg, #6366f1, #06b6d4)",
1747
+ color: "#fff",
1748
+ border: "none"
1749
+ }
1750
+ };
1751
+ const sizes = {
1752
+ sm: { padding: "6px 12px", fontSize: "12px" },
1753
+ md: { padding: "10px 18px", fontSize: "14px" },
1754
+ lg: { padding: "14px 24px", fontSize: "16px" }
1755
+ };
1756
+ return /* @__PURE__ */ React10.createElement(
1757
+ "button",
1758
+ {
1759
+ onClick,
1760
+ disabled: disabled || loading,
1761
+ onMouseEnter: () => setHovered(true),
1762
+ onMouseLeave: () => setHovered(false),
1763
+ style: {
1764
+ ...variants[variant],
1765
+ ...sizes[size],
1766
+ borderRadius: "10px",
1767
+ cursor: disabled ? "not-allowed" : "pointer",
1768
+ display: "flex",
1769
+ alignItems: "center",
1770
+ gap: "8px",
1771
+ fontWeight: 600,
1772
+ fontFamily: "sans-serif",
1773
+ // 🔥 Animation
1774
+ transform: hovered ? "translateY(-2px) scale(1.02)" : "scale(1)",
1775
+ boxShadow: hovered ? "0 10px 20px rgba(0,0,0,0.15)" : "0 2px 6px rgba(0,0,0,0.1)",
1776
+ transition: "all 0.2s ease",
1777
+ opacity: disabled ? 0.6 : 1,
1778
+ position: "relative",
1779
+ overflow: "hidden"
1780
+ }
1781
+ },
1782
+ /* @__PURE__ */ React10.createElement(
1783
+ "span",
1784
+ {
1785
+ style: {
1786
+ position: "absolute",
1787
+ inset: 0,
1788
+ background: "rgba(255,255,255,0.2)",
1789
+ opacity: hovered ? 1 : 0,
1790
+ transition: "opacity 0.3s"
1791
+ }
1792
+ }
1793
+ ),
1794
+ loading ? /* @__PURE__ */ React10.createElement("span", null, "Loading...") : /* @__PURE__ */ React10.createElement(React10.Fragment, null, icon && /* @__PURE__ */ React10.createElement("span", null, icon), /* @__PURE__ */ React10.createElement("span", null, text))
1795
+ );
1796
+ };
1797
+
1798
+ // src/components/AnimatedButton/AnimatedButton.jsx
1799
+ import React11, { useState as useState10 } from "react";
1800
+ var AnimatedButton = ({
1801
+ text = "Click Me!",
1802
+ bg = "#7c3aed",
1803
+ color = "white",
1804
+ size = "md",
1805
+ width = "auto",
1806
+ radius = "12px",
1807
+ border = "none",
1808
+ weight = "600",
1809
+ shadow = "0 4px 14px rgba(124,58,237,0.4)",
1810
+ onClick
1811
+ }) => {
1812
+ const sizes = { sm: "8px 16px", md: "12px 24px", lg: "16px 32px" };
1813
+ const [hovered, setHovered] = useState10(false);
1814
+ return /* @__PURE__ */ React11.createElement(
1815
+ "button",
1816
+ {
1817
+ onClick,
1818
+ onMouseEnter: () => setHovered(true),
1819
+ onMouseLeave: () => setHovered(false),
1820
+ style: {
1821
+ background: hovered ? "#6b21a8" : bg,
1822
+ color,
1823
+ padding: sizes[size],
1824
+ width,
1825
+ border,
1826
+ borderRadius: radius,
1827
+ cursor: "pointer",
1828
+ fontWeight: weight,
1829
+ fontSize: "15px",
1830
+ boxShadow: shadow,
1831
+ transform: hovered ? "scale(1.05)" : "scale(1)",
1832
+ transition: "transform 0.2s ease, background 0.2s ease",
1833
+ display: "flex",
1834
+ alignItems: "center",
1835
+ justifyContent: "center",
1836
+ fontFamily: "system-ui, sans-serif",
1837
+ letterSpacing: "0.02em"
1838
+ }
1839
+ },
1840
+ text
1841
+ );
1842
+ };
1843
+ export {
1844
+ AnimatedButton,
1845
+ AnimatedForm,
1846
+ BackgoundImageSlider,
1847
+ Button,
1848
+ Card,
1849
+ Charts,
1850
+ ColorPicker,
1851
+ FileUpload,
1852
+ Footer,
1853
+ ImageCard,
1854
+ Navbar
1855
+ };