@rayvelez/findash-ui 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,1042 @@
1
+ import { clsx } from 'clsx';
2
+ import { twMerge } from 'tailwind-merge';
3
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
4
+ import { useState } from 'react';
5
+
6
+ function cn(...inputs) {
7
+ return twMerge(clsx(inputs));
8
+ }
9
+ function SalesStatisticsCard({
10
+ visitors = 2025,
11
+ updatedDaysAgo = 1,
12
+ onPeriodChange,
13
+ isLoading = false
14
+ }) {
15
+ if (isLoading) {
16
+ return /* @__PURE__ */ jsxs("div", { className: "bg-accent-dark dark:bg-black text-accent-dark-foreground p-6 rounded-3xl shadow-lg relative overflow-hidden flex-1 min-h-[300px] animate-pulse", children: [
17
+ /* @__PURE__ */ jsx("div", { className: "h-6 bg-white/10 rounded w-32 mb-2" }),
18
+ /* @__PURE__ */ jsx("div", { className: "h-4 bg-white/10 rounded w-24" })
19
+ ] });
20
+ }
21
+ return /* @__PURE__ */ jsxs("div", { className: "bg-accent-dark dark:bg-black text-accent-dark-foreground p-6 rounded-3xl shadow-lg relative overflow-hidden flex-1 min-h-[300px]", children: [
22
+ /* @__PURE__ */ jsxs("div", { className: "flex justify-between items-start z-10 relative", children: [
23
+ /* @__PURE__ */ jsxs("div", { children: [
24
+ /* @__PURE__ */ jsx("h2", { className: "text-xl font-medium", children: "Sales statistics" }),
25
+ /* @__PURE__ */ jsxs("p", { className: "text-muted-foreground text-xs mt-1", children: [
26
+ "Updated ",
27
+ updatedDaysAgo,
28
+ " ",
29
+ updatedDaysAgo === 1 ? "day" : "days",
30
+ " ago"
31
+ ] })
32
+ ] }),
33
+ /* @__PURE__ */ jsxs(
34
+ "button",
35
+ {
36
+ onClick: () => onPeriodChange?.("monthly"),
37
+ className: "flex items-center gap-2 bg-white/5 hover:bg-white/10 px-3 py-1.5 rounded-full text-xs transition-colors border border-white/10",
38
+ children: [
39
+ "Monthly",
40
+ /* @__PURE__ */ jsx("span", { className: "material-icons-round text-sm", children: "expand_more" })
41
+ ]
42
+ }
43
+ )
44
+ ] }),
45
+ /* @__PURE__ */ jsxs("div", { className: "mt-8 z-10 relative", children: [
46
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 mb-1", children: [
47
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-sm", children: "Visitors" }),
48
+ /* @__PURE__ */ jsx("div", { className: "w-5 h-5 rounded-full bg-primary flex items-center justify-center", children: /* @__PURE__ */ jsx("span", { className: "material-icons-round text-primary-foreground text-xs transform rotate-45", children: "arrow_upward" }) })
49
+ ] }),
50
+ /* @__PURE__ */ jsx("p", { className: "text-5xl font-medium tracking-tight", children: visitors.toLocaleString() })
51
+ ] }),
52
+ /* @__PURE__ */ jsxs("div", { className: "absolute bottom-6 right-6 flex items-end gap-3 h-32 w-1/2 justify-end", children: [
53
+ /* @__PURE__ */ jsxs("div", { className: "w-20 relative group", children: [
54
+ /* @__PURE__ */ jsx("div", { className: "absolute -top-6 text-center w-full text-xs text-muted-foreground mb-2", children: "September" }),
55
+ /* @__PURE__ */ jsx("div", { className: "h-16 w-full border border-muted-foreground/30 rounded-t-xl pattern-lines-light opacity-30 absolute -top-16 left-0" }),
56
+ /* @__PURE__ */ jsx("div", { className: "h-24 w-full bg-primary rounded-xl overflow-hidden relative shadow-lg transform transition-transform group-hover:scale-105", children: /* @__PURE__ */ jsx("div", { className: "absolute bottom-0 left-0 right-0 h-10 bg-secondary rounded-b-xl" }) })
57
+ ] }),
58
+ /* @__PURE__ */ jsxs("div", { className: "w-24 relative group", children: [
59
+ /* @__PURE__ */ jsx("div", { className: "absolute -top-6 text-center w-full text-xs text-muted-foreground mb-2", children: "November" }),
60
+ /* @__PURE__ */ jsx("div", { className: "h-12 w-full border border-muted-foreground/30 rounded-t-xl pattern-lines-light opacity-30 absolute -top-12 left-0" }),
61
+ /* @__PURE__ */ jsx("div", { className: "h-32 w-full bg-primary rounded-xl overflow-hidden relative shadow-lg transform transition-transform group-hover:scale-105", children: /* @__PURE__ */ jsx("div", { className: "absolute bottom-0 left-0 right-0 h-8 bg-secondary rounded-b-xl" }) })
62
+ ] })
63
+ ] })
64
+ ] });
65
+ }
66
+ function CurrentBalanceCard({
67
+ balance = 15368,
68
+ percentageChange = 14,
69
+ averageScore = 18324,
70
+ currency = "$",
71
+ onPrevious,
72
+ onNext,
73
+ isLoading = false
74
+ }) {
75
+ if (isLoading) {
76
+ return /* @__PURE__ */ jsxs("div", { className: "bg-card p-6 rounded-3xl shadow-soft flex-1 animate-pulse", children: [
77
+ /* @__PURE__ */ jsx("div", { className: "h-6 bg-muted rounded w-32 mb-4" }),
78
+ /* @__PURE__ */ jsx("div", { className: "bg-muted rounded-3xl h-36" })
79
+ ] });
80
+ }
81
+ return /* @__PURE__ */ jsxs("div", { className: "bg-card p-6 rounded-3xl shadow-soft flex-1", children: [
82
+ /* @__PURE__ */ jsxs("div", { className: "flex justify-between items-center mb-4", children: [
83
+ /* @__PURE__ */ jsx("h2", { className: "text-lg font-medium", children: "Current balance" }),
84
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
85
+ /* @__PURE__ */ jsx(
86
+ "button",
87
+ {
88
+ onClick: onPrevious,
89
+ className: "w-8 h-8 rounded-full border border-border flex items-center justify-center hover:bg-muted transition-colors",
90
+ children: /* @__PURE__ */ jsx("span", { className: "material-icons-round text-sm", children: "arrow_back" })
91
+ }
92
+ ),
93
+ /* @__PURE__ */ jsx(
94
+ "button",
95
+ {
96
+ onClick: onNext,
97
+ className: "w-8 h-8 rounded-full border border-border flex items-center justify-center hover:bg-muted transition-colors",
98
+ children: /* @__PURE__ */ jsx("span", { className: "material-icons-round text-sm", children: "arrow_forward" })
99
+ }
100
+ )
101
+ ] })
102
+ ] }),
103
+ /* @__PURE__ */ jsxs("div", { className: "bg-primary rounded-3xl p-5 relative overflow-hidden h-36 flex flex-col justify-between", children: [
104
+ /* @__PURE__ */ jsx("div", { className: "w-10 h-10 bg-card rounded-xl flex items-center justify-center shadow-sm", children: /* @__PURE__ */ jsx("span", { className: "material-icons-round text-foreground", children: "show_chart" }) }),
105
+ /* @__PURE__ */ jsxs("div", { className: "absolute right-4 bottom-4 w-40 h-40", children: [
106
+ /* @__PURE__ */ jsxs("svg", { className: "w-full h-full overflow-visible", viewBox: "0 0 100 50", children: [
107
+ /* @__PURE__ */ jsx(
108
+ "path",
109
+ {
110
+ d: "M 10 50 A 40 40 0 0 1 90 50",
111
+ fill: "none",
112
+ stroke: "rgba(0,0,0,0.1)",
113
+ strokeLinecap: "round",
114
+ strokeWidth: "12"
115
+ }
116
+ ),
117
+ /* @__PURE__ */ jsx(
118
+ "path",
119
+ {
120
+ className: "opacity-20",
121
+ d: "M 60 16 A 40 40 0 0 1 90 50",
122
+ fill: "none",
123
+ stroke: "#000",
124
+ strokeWidth: "1"
125
+ }
126
+ ),
127
+ /* @__PURE__ */ jsx(
128
+ "path",
129
+ {
130
+ d: "M 10 50 A 40 40 0 0 1 60 16",
131
+ fill: "none",
132
+ stroke: "hsl(var(--foreground))",
133
+ strokeLinecap: "round",
134
+ strokeWidth: "12"
135
+ }
136
+ ),
137
+ /* @__PURE__ */ jsx(
138
+ "circle",
139
+ {
140
+ cx: "45",
141
+ cy: "35",
142
+ fill: "hsl(var(--secondary))",
143
+ r: "3",
144
+ stroke: "hsl(var(--foreground))",
145
+ strokeWidth: "1"
146
+ }
147
+ )
148
+ ] }),
149
+ /* @__PURE__ */ jsx("div", { className: "absolute top-[8px] right-[2px] w-12 h-20 rounded-tr-full pattern-lines opacity-40 rotate-12 origin-bottom-left pointer-events-none" })
150
+ ] }),
151
+ /* @__PURE__ */ jsxs("div", { className: "flex justify-between items-end relative z-10", children: [
152
+ /* @__PURE__ */ jsxs("div", { children: [
153
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
154
+ /* @__PURE__ */ jsxs("span", { className: "text-2xl font-bold text-primary-foreground", children: [
155
+ percentageChange,
156
+ "%"
157
+ ] }),
158
+ /* @__PURE__ */ jsx("div", { className: "w-4 h-4 rounded-full bg-card flex items-center justify-center", children: /* @__PURE__ */ jsx("span", { className: "material-icons-round text-[10px] text-foreground", children: "north_east" }) })
159
+ ] }),
160
+ /* @__PURE__ */ jsxs("p", { className: "text-xs text-primary-foreground/70 font-medium", children: [
161
+ "Avg score: ",
162
+ averageScore.toLocaleString(),
163
+ currency
164
+ ] })
165
+ ] }),
166
+ /* @__PURE__ */ jsx("div", { className: "text-right mr-4 mb-2", children: /* @__PURE__ */ jsxs("span", { className: "text-2xl font-bold text-primary-foreground", children: [
167
+ balance.toLocaleString(),
168
+ currency
169
+ ] }) })
170
+ ] })
171
+ ] })
172
+ ] });
173
+ }
174
+ function InvestmentGrowthCard({
175
+ percentage = 8.2,
176
+ monthlyAverage = 12450,
177
+ totalValue = 24890,
178
+ currency = "$",
179
+ onPrevious,
180
+ onNext,
181
+ isLoading = false
182
+ }) {
183
+ if (isLoading) {
184
+ return /* @__PURE__ */ jsxs("div", { className: "bg-card p-6 rounded-3xl shadow-soft flex-1 animate-pulse", children: [
185
+ /* @__PURE__ */ jsx("div", { className: "h-6 bg-muted rounded w-40 mb-4" }),
186
+ /* @__PURE__ */ jsx("div", { className: "bg-muted rounded-3xl h-36" })
187
+ ] });
188
+ }
189
+ return /* @__PURE__ */ jsxs("div", { className: "bg-card p-6 rounded-3xl shadow-soft flex-1", children: [
190
+ /* @__PURE__ */ jsxs("div", { className: "flex justify-between items-center mb-4", children: [
191
+ /* @__PURE__ */ jsx("h2", { className: "text-lg font-medium", children: "Investment growth" }),
192
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
193
+ /* @__PURE__ */ jsx(
194
+ "button",
195
+ {
196
+ onClick: onPrevious,
197
+ className: "w-8 h-8 rounded-full border border-border flex items-center justify-center hover:bg-muted transition-colors",
198
+ children: /* @__PURE__ */ jsx("span", { className: "material-icons-round text-sm", children: "arrow_back" })
199
+ }
200
+ ),
201
+ /* @__PURE__ */ jsx(
202
+ "button",
203
+ {
204
+ onClick: onNext,
205
+ className: "w-8 h-8 rounded-full border border-border flex items-center justify-center hover:bg-muted transition-colors",
206
+ children: /* @__PURE__ */ jsx("span", { className: "material-icons-round text-sm", children: "arrow_forward" })
207
+ }
208
+ )
209
+ ] })
210
+ ] }),
211
+ /* @__PURE__ */ jsxs("div", { className: "bg-[hsl(25,100%,65%)] rounded-3xl p-5 relative overflow-hidden h-36 flex flex-col justify-between", children: [
212
+ /* @__PURE__ */ jsx("div", { className: "w-10 h-10 bg-card rounded-xl flex items-center justify-center shadow-sm", children: /* @__PURE__ */ jsx("span", { className: "material-icons-round text-foreground", children: "trending_up" }) }),
213
+ /* @__PURE__ */ jsxs("div", { className: "absolute right-4 bottom-4 w-40 h-40", children: [
214
+ /* @__PURE__ */ jsxs("svg", { className: "w-full h-full overflow-visible", viewBox: "0 0 100 50", children: [
215
+ /* @__PURE__ */ jsx(
216
+ "path",
217
+ {
218
+ d: "M 10 50 A 40 40 0 0 1 90 50",
219
+ fill: "none",
220
+ stroke: "rgba(0,0,0,0.1)",
221
+ strokeLinecap: "round",
222
+ strokeWidth: "12"
223
+ }
224
+ ),
225
+ /* @__PURE__ */ jsx(
226
+ "path",
227
+ {
228
+ className: "opacity-20",
229
+ d: "M 60 16 A 40 40 0 0 1 90 50",
230
+ fill: "none",
231
+ stroke: "#000",
232
+ strokeWidth: "1"
233
+ }
234
+ ),
235
+ /* @__PURE__ */ jsx(
236
+ "path",
237
+ {
238
+ d: "M 10 50 A 40 40 0 0 1 60 16",
239
+ fill: "none",
240
+ stroke: "hsl(var(--foreground))",
241
+ strokeLinecap: "round",
242
+ strokeWidth: "12"
243
+ }
244
+ ),
245
+ /* @__PURE__ */ jsx(
246
+ "circle",
247
+ {
248
+ cx: "45",
249
+ cy: "35",
250
+ fill: "hsl(25,100%,75%)",
251
+ r: "3",
252
+ stroke: "hsl(var(--foreground))",
253
+ strokeWidth: "1"
254
+ }
255
+ )
256
+ ] }),
257
+ /* @__PURE__ */ jsx("div", { className: "absolute top-[8px] right-[2px] w-12 h-20 rounded-tr-full pattern-lines opacity-40 rotate-12 origin-bottom-left pointer-events-none" })
258
+ ] }),
259
+ /* @__PURE__ */ jsxs("div", { className: "flex justify-between items-end relative z-10", children: [
260
+ /* @__PURE__ */ jsxs("div", { children: [
261
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
262
+ /* @__PURE__ */ jsxs("span", { className: "text-2xl font-bold text-primary-foreground", children: [
263
+ percentage,
264
+ "%"
265
+ ] }),
266
+ /* @__PURE__ */ jsx("div", { className: "w-4 h-4 rounded-full bg-card flex items-center justify-center", children: /* @__PURE__ */ jsx("span", { className: "material-icons-round text-[10px] text-foreground", children: "north_east" }) })
267
+ ] }),
268
+ /* @__PURE__ */ jsxs("p", { className: "text-xs text-primary-foreground/70 font-medium", children: [
269
+ "Monthly avg: ",
270
+ monthlyAverage.toLocaleString(),
271
+ currency
272
+ ] })
273
+ ] }),
274
+ /* @__PURE__ */ jsx("div", { className: "text-right mr-4 mb-2", children: /* @__PURE__ */ jsxs("span", { className: "text-2xl font-bold text-primary-foreground", children: [
275
+ totalValue.toLocaleString(),
276
+ currency
277
+ ] }) })
278
+ ] })
279
+ ] })
280
+ ] });
281
+ }
282
+ function BtcPriceCard({
283
+ price = 21105,
284
+ changePercentage = 28.21,
285
+ currency = "$",
286
+ isLoading = false
287
+ }) {
288
+ if (isLoading) {
289
+ return /* @__PURE__ */ jsxs("div", { className: "bg-primary p-6 rounded-3xl relative h-48 flex flex-col justify-between shadow-lg animate-pulse", children: [
290
+ /* @__PURE__ */ jsx("div", { className: "h-4 bg-primary-foreground/20 rounded w-16" }),
291
+ /* @__PURE__ */ jsx("div", { className: "h-8 bg-primary-foreground/20 rounded w-24 mt-2" })
292
+ ] });
293
+ }
294
+ return /* @__PURE__ */ jsxs("div", { className: "bg-primary p-6 rounded-3xl relative h-48 flex flex-col justify-between shadow-lg transition-transform hover:-translate-y-1 duration-300", children: [
295
+ /* @__PURE__ */ jsxs("div", { className: "flex justify-between items-start", children: [
296
+ /* @__PURE__ */ jsxs("div", { children: [
297
+ /* @__PURE__ */ jsx("p", { className: "text-primary-foreground/70 text-xs font-medium", children: "BTC price" }),
298
+ /* @__PURE__ */ jsxs("h3", { className: "text-3xl font-bold text-primary-foreground mt-1", children: [
299
+ price.toLocaleString(),
300
+ currency
301
+ ] })
302
+ ] }),
303
+ /* @__PURE__ */ jsx("span", { className: "material-icons-round text-primary-foreground/70 text-sm", children: "north_east" })
304
+ ] }),
305
+ /* @__PURE__ */ jsxs("div", { className: "relative", children: [
306
+ /* @__PURE__ */ jsxs("span", { className: "text-xs font-bold text-primary-foreground mb-1 block", children: [
307
+ "+",
308
+ changePercentage.toFixed(2),
309
+ "%"
310
+ ] }),
311
+ /* @__PURE__ */ jsxs("div", { className: "h-8 w-full border border-primary-foreground/50 rounded-full flex overflow-hidden relative", children: [
312
+ /* @__PURE__ */ jsx("div", { className: "w-2/3 h-full pattern-lines border-r border-primary-foreground/50 opacity-60" }),
313
+ /* @__PURE__ */ jsx("div", { className: "absolute top-1/2 -translate-y-1/2 left-[66%] w-3 h-3 bg-secondary border border-primary-foreground rounded-full z-10 shadow-sm" })
314
+ ] })
315
+ ] })
316
+ ] });
317
+ }
318
+ function MarketCapCard({
319
+ value = "1,3trln$",
320
+ isLoading = false
321
+ }) {
322
+ if (isLoading) {
323
+ return /* @__PURE__ */ jsxs("div", { className: "bg-secondary p-6 rounded-3xl relative h-48 flex flex-col justify-between shadow-lg animate-pulse", children: [
324
+ /* @__PURE__ */ jsx("div", { className: "h-4 bg-secondary-foreground/20 rounded w-32" }),
325
+ /* @__PURE__ */ jsx("div", { className: "h-8 bg-secondary-foreground/20 rounded w-24 mt-2" })
326
+ ] });
327
+ }
328
+ return /* @__PURE__ */ jsxs("div", { className: "bg-secondary p-6 rounded-3xl relative h-48 flex flex-col justify-between shadow-lg transition-transform hover:-translate-y-1 duration-300", children: [
329
+ /* @__PURE__ */ jsxs("div", { className: "flex justify-between items-start", children: [
330
+ /* @__PURE__ */ jsxs("div", { children: [
331
+ /* @__PURE__ */ jsx("p", { className: "text-secondary-foreground/70 text-xs font-medium", children: "Market cap forecast" }),
332
+ /* @__PURE__ */ jsx("h3", { className: "text-3xl font-bold text-secondary-foreground mt-1", children: value })
333
+ ] }),
334
+ /* @__PURE__ */ jsx("span", { className: "material-icons-round text-secondary-foreground/70 text-sm", children: "north_east" })
335
+ ] }),
336
+ /* @__PURE__ */ jsxs("div", { className: "relative h-16 w-full flex items-end", children: [
337
+ /* @__PURE__ */ jsxs(
338
+ "svg",
339
+ {
340
+ className: "w-full h-full overflow-visible",
341
+ preserveAspectRatio: "none",
342
+ viewBox: "0 0 100 40",
343
+ children: [
344
+ /* @__PURE__ */ jsx(
345
+ "path",
346
+ {
347
+ d: "M0 40 L0 35 Q 20 35 40 25 T 60 15 T 100 5 L 100 40 Z",
348
+ fill: "rgba(255,255,255,0.2)"
349
+ }
350
+ ),
351
+ /* @__PURE__ */ jsx(
352
+ "path",
353
+ {
354
+ d: "M0 35 Q 20 35 40 25 T 60 15 T 100 5",
355
+ fill: "none",
356
+ stroke: "hsl(243 40% 55%)",
357
+ strokeWidth: "1.5"
358
+ }
359
+ ),
360
+ /* @__PURE__ */ jsx(
361
+ "circle",
362
+ {
363
+ cx: "60",
364
+ cy: "15",
365
+ fill: "hsl(var(--primary))",
366
+ r: "3",
367
+ stroke: "hsl(243 40% 55%)",
368
+ strokeWidth: "1.5"
369
+ }
370
+ )
371
+ ]
372
+ }
373
+ ),
374
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 top-[20px] left-[10px] w-full h-full flex justify-between px-2 opacity-10 pointer-events-none", children: [...Array(8)].map((_, i) => /* @__PURE__ */ jsx("div", { className: "w-px h-full bg-secondary-foreground" }, i)) })
375
+ ] })
376
+ ] });
377
+ }
378
+ var defaultForecasts = [
379
+ { year: "2023", description: "Explosive growth of DeFi", completed: false },
380
+ { year: "2024", description: "Mainstream adoption of CBDCs", completed: false },
381
+ { year: "2025", description: "1 BTC reaches $500K", completed: false },
382
+ { year: "2027", description: "Widespread retail use", completed: true }
383
+ ];
384
+ function MarketForecastCard({
385
+ forecasts = defaultForecasts,
386
+ isLoading = false
387
+ }) {
388
+ if (isLoading) {
389
+ return /* @__PURE__ */ jsxs("div", { className: "bg-card p-6 rounded-3xl shadow-soft flex flex-col animate-pulse", children: [
390
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4 mb-8", children: [
391
+ /* @__PURE__ */ jsx("div", { className: "w-10 h-10 rounded-full bg-muted" }),
392
+ /* @__PURE__ */ jsx("div", { className: "h-6 bg-muted rounded w-32" })
393
+ ] }),
394
+ /* @__PURE__ */ jsx("div", { className: "space-y-6", children: [1, 2, 3].map((i) => /* @__PURE__ */ jsxs("div", { className: "flex gap-6", children: [
395
+ /* @__PURE__ */ jsx("div", { className: "w-4 h-4 rounded-full bg-muted" }),
396
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 space-y-2", children: [
397
+ /* @__PURE__ */ jsx("div", { className: "h-4 bg-muted rounded w-12" }),
398
+ /* @__PURE__ */ jsx("div", { className: "h-3 bg-muted rounded w-full" })
399
+ ] })
400
+ ] }, i)) })
401
+ ] });
402
+ }
403
+ return /* @__PURE__ */ jsxs("div", { className: "bg-card p-6 rounded-3xl shadow-soft flex flex-col", children: [
404
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4 mb-8", children: [
405
+ /* @__PURE__ */ jsx("div", { className: "w-10 h-10 rounded-full bg-primary flex items-center justify-center shadow-sm", children: /* @__PURE__ */ jsx("span", { className: "material-icons-outlined text-primary-foreground text-lg", children: "timeline" }) }),
406
+ /* @__PURE__ */ jsx("h2", { className: "text-xl font-bold w-24 leading-tight", children: "Market forecast" })
407
+ ] }),
408
+ /* @__PURE__ */ jsxs("div", { className: "relative pl-2", children: [
409
+ /* @__PURE__ */ jsx("div", { className: "absolute left-[7px] top-2 bottom-4 w-0.5 bg-border" }),
410
+ /* @__PURE__ */ jsx("div", { className: "space-y-6 relative", children: forecasts.map((item) => /* @__PURE__ */ jsxs("div", { className: "flex gap-6 relative group cursor-pointer", children: [
411
+ /* @__PURE__ */ jsx(
412
+ "div",
413
+ {
414
+ className: cn(
415
+ "w-4 h-4 rounded-full z-10 mt-1 transition-colors",
416
+ item.completed ? "bg-foreground shadow-md" : "border-2 border-muted-foreground bg-card group-hover:border-primary group-hover:bg-primary"
417
+ )
418
+ }
419
+ ),
420
+ /* @__PURE__ */ jsxs("div", { children: [
421
+ /* @__PURE__ */ jsx("h4", { className: "font-bold text-sm", children: item.year }),
422
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground mt-1 leading-relaxed", children: item.description })
423
+ ] })
424
+ ] }, item.year)) })
425
+ ] })
426
+ ] });
427
+ }
428
+ var defaultAllocations = [
429
+ { asset: "Bitcoin", symbol: "BTC", percentage: 45, color: "bg-primary" },
430
+ { asset: "Ethereum", symbol: "ETH", percentage: 30, color: "bg-secondary" },
431
+ { asset: "Solana", symbol: "SOL", percentage: 15, color: "bg-foreground" },
432
+ { asset: "Others", symbol: "---", percentage: 10, color: "bg-muted" }
433
+ ];
434
+ function PortfolioAllocationCard({
435
+ allocations = defaultAllocations,
436
+ onOptionsClick,
437
+ isLoading = false
438
+ }) {
439
+ if (isLoading) {
440
+ return /* @__PURE__ */ jsxs("div", { className: "bg-card p-6 rounded-3xl shadow-soft animate-pulse", children: [
441
+ /* @__PURE__ */ jsx("div", { className: "flex justify-between items-center mb-6", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
442
+ /* @__PURE__ */ jsx("div", { className: "w-10 h-10 rounded-full bg-muted" }),
443
+ /* @__PURE__ */ jsx("div", { className: "h-6 bg-muted rounded w-20" })
444
+ ] }) }),
445
+ /* @__PURE__ */ jsx("div", { className: "h-3 bg-muted rounded-full mb-6" }),
446
+ /* @__PURE__ */ jsx("div", { className: "space-y-3", children: [1, 2, 3, 4].map((i) => /* @__PURE__ */ jsx("div", { className: "h-4 bg-muted rounded" }, i)) })
447
+ ] });
448
+ }
449
+ return /* @__PURE__ */ jsxs("div", { className: "bg-card p-6 rounded-3xl shadow-soft", children: [
450
+ /* @__PURE__ */ jsxs("div", { className: "flex justify-between items-center mb-6", children: [
451
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
452
+ /* @__PURE__ */ jsx("div", { className: "w-10 h-10 rounded-full bg-secondary flex items-center justify-center", children: /* @__PURE__ */ jsx("span", { className: "material-icons-outlined text-secondary-foreground text-lg", children: "pie_chart" }) }),
453
+ /* @__PURE__ */ jsx("h2", { className: "text-lg font-bold", children: "Portfolio" })
454
+ ] }),
455
+ /* @__PURE__ */ jsx(
456
+ "button",
457
+ {
458
+ onClick: onOptionsClick,
459
+ className: "text-muted-foreground hover:text-foreground transition-colors",
460
+ children: /* @__PURE__ */ jsx("span", { className: "material-icons-round text-xl", children: "more_horiz" })
461
+ }
462
+ )
463
+ ] }),
464
+ /* @__PURE__ */ jsx("div", { className: "h-3 w-full rounded-full flex overflow-hidden mb-6", children: allocations.map((item) => /* @__PURE__ */ jsx(
465
+ "div",
466
+ {
467
+ className: `${item.color} h-full`,
468
+ style: { width: `${item.percentage}%` }
469
+ },
470
+ item.symbol
471
+ )) }),
472
+ /* @__PURE__ */ jsx("div", { className: "space-y-3", children: allocations.map((item) => /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
473
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
474
+ /* @__PURE__ */ jsx("div", { className: `w-3 h-3 rounded-full ${item.color}` }),
475
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-medium", children: item.asset }),
476
+ /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: item.symbol })
477
+ ] }),
478
+ /* @__PURE__ */ jsxs("span", { className: "text-sm font-semibold", children: [
479
+ item.percentage,
480
+ "%"
481
+ ] })
482
+ ] }, item.symbol)) })
483
+ ] });
484
+ }
485
+ var defaultItems = [
486
+ { name: "Cardano", symbol: "ADA", price: "0.58", change: "+5.2%", positive: true },
487
+ { name: "Polkadot", symbol: "DOT", price: "7.23", change: "-2.1%", positive: false },
488
+ { name: "Avalanche", symbol: "AVAX", price: "35.80", change: "+12.4%", positive: true }
489
+ ];
490
+ function WatchlistCard({
491
+ items = defaultItems,
492
+ onViewAll,
493
+ isLoading = false
494
+ }) {
495
+ if (isLoading) {
496
+ return /* @__PURE__ */ jsxs("div", { className: "bg-card p-6 rounded-3xl shadow-soft animate-pulse", children: [
497
+ /* @__PURE__ */ jsx("div", { className: "flex justify-between items-center mb-6", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
498
+ /* @__PURE__ */ jsx("div", { className: "w-10 h-10 rounded-full bg-muted" }),
499
+ /* @__PURE__ */ jsx("div", { className: "h-6 bg-muted rounded w-24" })
500
+ ] }) }),
501
+ /* @__PURE__ */ jsx("div", { className: "space-y-4", children: [1, 2, 3].map((i) => /* @__PURE__ */ jsx("div", { className: "h-14 bg-muted rounded-2xl" }, i)) })
502
+ ] });
503
+ }
504
+ return /* @__PURE__ */ jsxs("div", { className: "bg-card p-6 rounded-3xl shadow-soft", children: [
505
+ /* @__PURE__ */ jsxs("div", { className: "flex justify-between items-center mb-6", children: [
506
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
507
+ /* @__PURE__ */ jsx("div", { className: "w-10 h-10 rounded-full bg-primary flex items-center justify-center", children: /* @__PURE__ */ jsx("span", { className: "material-icons-outlined text-primary-foreground text-lg", children: "visibility" }) }),
508
+ /* @__PURE__ */ jsx("h2", { className: "text-lg font-bold", children: "Watchlist" })
509
+ ] }),
510
+ /* @__PURE__ */ jsxs(
511
+ "button",
512
+ {
513
+ onClick: onViewAll,
514
+ className: "text-xs text-muted-foreground hover:text-foreground transition-colors flex items-center gap-1",
515
+ children: [
516
+ "View all",
517
+ /* @__PURE__ */ jsx("span", { className: "material-icons-round text-sm", children: "chevron_right" })
518
+ ]
519
+ }
520
+ )
521
+ ] }),
522
+ /* @__PURE__ */ jsx("div", { className: "space-y-4", children: items.map((item) => /* @__PURE__ */ jsxs(
523
+ "div",
524
+ {
525
+ className: "flex items-center justify-between p-3 bg-muted/50 rounded-2xl hover:bg-muted transition-colors cursor-pointer",
526
+ children: [
527
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
528
+ /* @__PURE__ */ jsx("div", { className: "w-9 h-9 rounded-full bg-foreground/10 flex items-center justify-center", children: /* @__PURE__ */ jsx("span", { className: "text-xs font-bold", children: item.symbol.slice(0, 2) }) }),
529
+ /* @__PURE__ */ jsxs("div", { children: [
530
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-semibold", children: item.name }),
531
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: item.symbol })
532
+ ] })
533
+ ] }),
534
+ /* @__PURE__ */ jsxs("div", { className: "text-right", children: [
535
+ /* @__PURE__ */ jsxs("p", { className: "text-sm font-semibold", children: [
536
+ "$",
537
+ item.price
538
+ ] }),
539
+ /* @__PURE__ */ jsx(
540
+ "p",
541
+ {
542
+ className: `text-xs font-medium ${item.positive ? "text-primary-foreground bg-primary" : "text-destructive-foreground bg-destructive"} px-1.5 py-0.5 rounded-full inline-block`,
543
+ children: item.change
544
+ }
545
+ )
546
+ ] })
547
+ ]
548
+ },
549
+ item.symbol
550
+ )) })
551
+ ] });
552
+ }
553
+ var defaultUsers = [
554
+ {
555
+ alt: "User 1",
556
+ avatarUrl: "https://lh3.googleusercontent.com/aida-public/AB6AXuApu0rGff7tq3lGfdm47JIyS5ULIPTuAydDnsjl11A1SRLyiOGRyn1P7khEGNH0erCwP2UwyxZoeoHqrQClYEBEwItYsZk8gnHQSnu9JpXnsa__Z5Yz5Ok5PEX-qXxG_ONKWzeKdX6ALutpdIZE_VF6TiW9xKToY7KYz40rYE0xteAHzx6wSqg1iwFBNEUUlBJahjf-RzeUlEQNKDPttu4ngQK1T5XuN7Vw-VnF05ByVwaaFFbdH-M_cNmJBd4_sGrbR3ep6exhg-o"
557
+ },
558
+ {
559
+ alt: "User 2",
560
+ avatarUrl: "https://lh3.googleusercontent.com/aida-public/AB6AXuDLX09bvZI-Ho3yvNXrbVUxbOjupQc8G5HZrhkDqUUVjPq3wJ7-I6u9kwER506K-_EY5tIXPrpFo2Ep896M8cdLTb8PmEGExVwVNArKqj6nUxefS-iAT1MSTaFgWpGTUfHXGjMhZxFrapq9Jnr9Vy8hi0d2ay9Or4yLXtuBX5SNkNtSIRj24Dzdc11Y8YlJv00uNOhvrtt07arU3FIcfX48U72tlGaA37F8AWH7mNmLSlwSi1R6iGnQnjv3NDf-r7PqBdHz3LaS3Jc"
561
+ }
562
+ ];
563
+ function RecentTransactionsCard({
564
+ summary = "12,53 ETH/1 BTC",
565
+ users = defaultUsers,
566
+ onOptionsClick,
567
+ isLoading = false
568
+ }) {
569
+ if (isLoading) {
570
+ return /* @__PURE__ */ jsxs("div", { className: "xl:col-span-2 bg-card p-6 rounded-3xl shadow-soft h-fit animate-pulse", children: [
571
+ /* @__PURE__ */ jsx("div", { className: "flex justify-between items-start mb-6", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
572
+ /* @__PURE__ */ jsx("div", { className: "w-12 h-12 rounded-full bg-muted" }),
573
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
574
+ /* @__PURE__ */ jsx("div", { className: "h-5 bg-muted rounded w-40" }),
575
+ /* @__PURE__ */ jsx("div", { className: "h-4 bg-muted rounded w-24" })
576
+ ] })
577
+ ] }) }),
578
+ /* @__PURE__ */ jsx("div", { className: "h-14 bg-muted rounded-2xl" })
579
+ ] });
580
+ }
581
+ return /* @__PURE__ */ jsxs("div", { className: "xl:col-span-2 bg-card p-6 rounded-3xl shadow-soft h-fit", children: [
582
+ /* @__PURE__ */ jsxs("div", { className: "flex justify-between items-start mb-6", children: [
583
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
584
+ /* @__PURE__ */ jsx("div", { className: "w-12 h-12 rounded-full bg-foreground text-background flex items-center justify-center", children: /* @__PURE__ */ jsx("span", { className: "material-icons-outlined", children: "bubble_chart" }) }),
585
+ /* @__PURE__ */ jsxs("div", { children: [
586
+ /* @__PURE__ */ jsx("h2", { className: "text-lg font-bold", children: "Recent Transactions" }),
587
+ /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-sm", children: "Sell currency" })
588
+ ] })
589
+ ] }),
590
+ /* @__PURE__ */ jsx("div", { className: "flex -space-x-2", children: users.map((user, index) => /* @__PURE__ */ jsx(
591
+ "img",
592
+ {
593
+ alt: user.alt,
594
+ className: "w-10 h-10 rounded-full border-2 border-card",
595
+ src: user.avatarUrl
596
+ },
597
+ index
598
+ )) })
599
+ ] }),
600
+ /* @__PURE__ */ jsxs("div", { className: "bg-muted p-4 rounded-2xl flex justify-between items-center", children: [
601
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
602
+ /* @__PURE__ */ jsx("span", { className: "material-icons-outlined text-muted-foreground", children: "account_balance_wallet" }),
603
+ /* @__PURE__ */ jsx("span", { className: "font-medium text-sm", children: summary })
604
+ ] }),
605
+ /* @__PURE__ */ jsx(
606
+ "button",
607
+ {
608
+ onClick: onOptionsClick,
609
+ className: "text-muted-foreground hover:text-foreground",
610
+ children: /* @__PURE__ */ jsx("span", { className: "material-icons-round", children: "more_vert" })
611
+ }
612
+ )
613
+ ] })
614
+ ] });
615
+ }
616
+ var defaultActions = [
617
+ { icon: "add_circle", label: "Buy", color: "bg-primary text-primary-foreground" },
618
+ { icon: "remove_circle", label: "Sell", color: "bg-secondary text-secondary-foreground" },
619
+ { icon: "swap_horiz", label: "Swap", color: "bg-foreground text-background" },
620
+ { icon: "send", label: "Send", color: "bg-muted text-foreground" }
621
+ ];
622
+ var defaultScheduledTransfer = {
623
+ description: "0.5 ETH \u2192 Wallet #2",
624
+ timeUntil: "In 2 days"
625
+ };
626
+ function QuickActionsCard({
627
+ actions = defaultActions,
628
+ scheduledTransfer = defaultScheduledTransfer,
629
+ onActionClick,
630
+ isLoading = false
631
+ }) {
632
+ if (isLoading) {
633
+ return /* @__PURE__ */ jsxs("div", { className: "bg-accent-dark dark:bg-black text-accent-dark-foreground p-6 rounded-3xl shadow-soft animate-pulse", children: [
634
+ /* @__PURE__ */ jsxs("div", { className: "flex justify-between items-center mb-6", children: [
635
+ /* @__PURE__ */ jsx("div", { className: "h-6 bg-white/10 rounded w-32" }),
636
+ /* @__PURE__ */ jsx("div", { className: "w-8 h-8 rounded-full bg-white/10" })
637
+ ] }),
638
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-4 gap-3 mb-6", children: [1, 2, 3, 4].map((i) => /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-2", children: [
639
+ /* @__PURE__ */ jsx("div", { className: "w-12 h-12 rounded-2xl bg-white/10" }),
640
+ /* @__PURE__ */ jsx("div", { className: "h-3 bg-white/10 rounded w-8" })
641
+ ] }, i)) }),
642
+ /* @__PURE__ */ jsx("div", { className: "h-16 bg-white/5 rounded-2xl" })
643
+ ] });
644
+ }
645
+ return /* @__PURE__ */ jsxs("div", { className: "bg-accent-dark dark:bg-black text-accent-dark-foreground p-6 rounded-3xl shadow-soft", children: [
646
+ /* @__PURE__ */ jsxs("div", { className: "flex justify-between items-center mb-6", children: [
647
+ /* @__PURE__ */ jsx("h2", { className: "text-lg font-bold", children: "Quick Actions" }),
648
+ /* @__PURE__ */ jsx("div", { className: "w-8 h-8 rounded-full bg-white/10 flex items-center justify-center", children: /* @__PURE__ */ jsx("span", { className: "material-icons-round text-sm", children: "bolt" }) })
649
+ ] }),
650
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-4 gap-3", children: actions.map((action) => /* @__PURE__ */ jsxs(
651
+ "button",
652
+ {
653
+ onClick: () => onActionClick?.(action),
654
+ className: "flex flex-col items-center gap-2 group",
655
+ children: [
656
+ /* @__PURE__ */ jsx(
657
+ "div",
658
+ {
659
+ className: `w-12 h-12 rounded-2xl ${action.color} flex items-center justify-center transition-transform group-hover:scale-110 shadow-lg`,
660
+ children: /* @__PURE__ */ jsx("span", { className: "material-icons-round", children: action.icon })
661
+ }
662
+ ),
663
+ /* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-muted-foreground group-hover:text-accent-dark-foreground transition-colors", children: action.label })
664
+ ]
665
+ },
666
+ action.label
667
+ )) }),
668
+ scheduledTransfer && /* @__PURE__ */ jsx("div", { className: "mt-6 p-4 bg-white/5 rounded-2xl border border-white/10", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
669
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
670
+ /* @__PURE__ */ jsx("span", { className: "material-icons-outlined text-primary", children: "schedule" }),
671
+ /* @__PURE__ */ jsxs("div", { children: [
672
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: "Scheduled transfer" }),
673
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: scheduledTransfer.description })
674
+ ] })
675
+ ] }),
676
+ /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: scheduledTransfer.timeUntil })
677
+ ] }) })
678
+ ] });
679
+ }
680
+ var defaultActions2 = [
681
+ { icon: "add_circle", label: "Buy" },
682
+ { icon: "remove_circle", label: "Sell" },
683
+ { icon: "swap_horiz", label: "Swap" },
684
+ { icon: "send", label: "Send" },
685
+ { icon: "account_balance_wallet", label: "Wallet" },
686
+ { icon: "bar_chart", label: "Analytics" }
687
+ ];
688
+ function FloatingNavBar({
689
+ actions = defaultActions2,
690
+ onActionClick
691
+ }) {
692
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
693
+ /* @__PURE__ */ jsx("svg", { className: "hidden", children: /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs("filter", { id: "glass-distortion", children: [
694
+ /* @__PURE__ */ jsx(
695
+ "feTurbulence",
696
+ {
697
+ type: "fractalNoise",
698
+ baseFrequency: "0.01",
699
+ numOctaves: "3",
700
+ result: "noise"
701
+ }
702
+ ),
703
+ /* @__PURE__ */ jsx(
704
+ "feDisplacementMap",
705
+ {
706
+ in: "SourceGraphic",
707
+ in2: "noise",
708
+ scale: "6",
709
+ xChannelSelector: "R",
710
+ yChannelSelector: "G"
711
+ }
712
+ )
713
+ ] }) }) }),
714
+ /* @__PURE__ */ jsx("div", { className: "fixed bottom-6 left-1/2 -translate-x-1/2 z-50", children: /* @__PURE__ */ jsxs("div", { className: "liquidGlass-wrapper rounded-3xl p-1", children: [
715
+ /* @__PURE__ */ jsx("div", { className: "liquidGlass-effect rounded-3xl" }),
716
+ /* @__PURE__ */ jsx("div", { className: "liquidGlass-tint rounded-3xl" }),
717
+ /* @__PURE__ */ jsx("div", { className: "liquidGlass-shine rounded-3xl" }),
718
+ /* @__PURE__ */ jsx("div", { className: "liquidGlass-content flex items-center gap-2 sm:gap-3 px-3 sm:px-5 py-3 sm:py-4", children: actions.map((action, index) => /* @__PURE__ */ jsx(
719
+ "button",
720
+ {
721
+ onClick: () => onActionClick?.(action),
722
+ className: cn(
723
+ "w-12 h-12 sm:w-14 sm:h-14 rounded-2xl bg-background/40 hover:bg-primary hover:text-primary-foreground items-center justify-center transition-all duration-300 hover:scale-110 group backdrop-blur-sm",
724
+ index < 4 ? "flex" : "hidden sm:flex"
725
+ ),
726
+ title: action.label,
727
+ children: /* @__PURE__ */ jsx("span", { className: "material-icons-round text-2xl sm:text-3xl group-hover:text-primary-foreground transition-colors", children: action.icon })
728
+ },
729
+ action.label
730
+ )) })
731
+ ] }) })
732
+ ] });
733
+ }
734
+ var defaultNavItems = [
735
+ { icon: "dashboard", label: "Dashboard", active: true },
736
+ { icon: "account_balance_wallet", label: "Wallet", active: false },
737
+ { icon: "analytics", label: "Analytics", active: false },
738
+ { icon: "swap_horiz", label: "Transactions", active: false }
739
+ ];
740
+ var defaultUser = {
741
+ name: "Alex Morgan",
742
+ role: "Premium User",
743
+ avatarUrl: "https://lh3.googleusercontent.com/aida-public/AB6AXuAOo_5Kr126T6MHRuT6vvn0AOhE9osWQx3QcuqMljDeMkNf_ZbpM3o6GJnJRnZ78mRrjXpZkmn2bZXZrEp37pv7z35DJzPgruHStOKVsKzyird-Athm2EOkwXhcivP6D_kuA9Z-o2OGONNpa5Us1pXcuKJNWbzqImuWkfYkTdFzv1BUayGF_VyekDIcygoEPjacRcsarKHujq1Yfc57ux_DdoufrlRxVnNfiDWra2_OVlievLaWr_kC-4NriyAzRUctHgucD15RZy0"
744
+ };
745
+ function Sidebar({
746
+ navItems = defaultNavItems,
747
+ user = defaultUser,
748
+ onToggleTheme,
749
+ isCollapsed,
750
+ onToggleCollapse,
751
+ onNavItemClick
752
+ }) {
753
+ return /* @__PURE__ */ jsxs(
754
+ "aside",
755
+ {
756
+ className: cn(
757
+ "h-screen fixed left-0 top-0 border-r border-border flex-col justify-between py-8 px-4 z-50 transition-all duration-300 bg-card hidden lg:flex",
758
+ isCollapsed ? "w-20" : "w-20 lg:w-64"
759
+ ),
760
+ children: [
761
+ /* @__PURE__ */ jsxs("div", { children: [
762
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center lg:justify-start lg:px-4 mb-12", children: [
763
+ /* @__PURE__ */ jsx("div", { className: "w-10 h-10 bg-primary rounded-xl flex items-center justify-center text-primary-foreground font-bold text-xl", children: /* @__PURE__ */ jsx("span", { className: "material-icons-round", children: "grid_view" }) }),
764
+ /* @__PURE__ */ jsx(
765
+ "span",
766
+ {
767
+ className: cn(
768
+ "ml-3 font-bold text-xl tracking-tight transition-opacity duration-200",
769
+ isCollapsed ? "hidden" : "hidden lg:block"
770
+ ),
771
+ children: "FinDash"
772
+ }
773
+ )
774
+ ] }),
775
+ /* @__PURE__ */ jsx("nav", { className: "space-y-2", children: navItems.map((item) => /* @__PURE__ */ jsxs(
776
+ "a",
777
+ {
778
+ href: item.href || "#",
779
+ onClick: (e) => {
780
+ e.preventDefault();
781
+ onNavItemClick?.(item);
782
+ },
783
+ className: cn(
784
+ "flex items-center justify-center lg:justify-start lg:px-4 py-3 rounded-xl transition-colors",
785
+ item.active ? "bg-muted text-foreground" : "text-muted-foreground hover:text-foreground hover:bg-muted/50",
786
+ isCollapsed && "lg:justify-center lg:px-0"
787
+ ),
788
+ children: [
789
+ /* @__PURE__ */ jsx("span", { className: "material-icons-round text-2xl", children: item.icon }),
790
+ /* @__PURE__ */ jsx(
791
+ "span",
792
+ {
793
+ className: cn(
794
+ "ml-4 font-medium transition-opacity duration-200",
795
+ isCollapsed ? "hidden" : "hidden lg:block"
796
+ ),
797
+ children: item.label
798
+ }
799
+ )
800
+ ]
801
+ },
802
+ item.label
803
+ )) })
804
+ ] }),
805
+ /* @__PURE__ */ jsxs("div", { children: [
806
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center lg:justify-start lg:px-4 py-3 mb-4", children: [
807
+ /* @__PURE__ */ jsx(
808
+ "img",
809
+ {
810
+ alt: "User Profile",
811
+ className: "w-10 h-10 rounded-full border-2 border-card",
812
+ src: user.avatarUrl
813
+ }
814
+ ),
815
+ /* @__PURE__ */ jsxs("div", { className: cn("ml-3", isCollapsed ? "hidden" : "hidden lg:block"), children: [
816
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-semibold", children: user.name }),
817
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: user.role })
818
+ ] })
819
+ ] }),
820
+ /* @__PURE__ */ jsxs(
821
+ "button",
822
+ {
823
+ onClick: onToggleTheme,
824
+ className: cn(
825
+ "w-full flex items-center justify-center lg:justify-start lg:px-4 py-3 text-muted-foreground hover:text-foreground hover:bg-muted/50 rounded-xl transition-colors",
826
+ isCollapsed && "lg:justify-center lg:px-0"
827
+ ),
828
+ children: [
829
+ /* @__PURE__ */ jsx("span", { className: "material-icons-round text-2xl", children: "dark_mode" }),
830
+ /* @__PURE__ */ jsx(
831
+ "span",
832
+ {
833
+ className: cn(
834
+ "ml-4 font-medium transition-opacity duration-200",
835
+ isCollapsed ? "hidden" : "hidden lg:block"
836
+ ),
837
+ children: "Toggle Theme"
838
+ }
839
+ )
840
+ ]
841
+ }
842
+ ),
843
+ /* @__PURE__ */ jsxs(
844
+ "button",
845
+ {
846
+ onClick: onToggleCollapse,
847
+ className: cn(
848
+ "hidden lg:flex w-full items-center justify-center lg:justify-start lg:px-4 py-3 text-muted-foreground hover:text-foreground hover:bg-muted/50 rounded-xl transition-colors mt-2",
849
+ isCollapsed && "lg:justify-center lg:px-0"
850
+ ),
851
+ children: [
852
+ /* @__PURE__ */ jsx(
853
+ "span",
854
+ {
855
+ className: cn(
856
+ "material-icons-round text-2xl transition-transform duration-300",
857
+ isCollapsed ? "rotate-180" : ""
858
+ ),
859
+ children: "chevron_left"
860
+ }
861
+ ),
862
+ /* @__PURE__ */ jsx(
863
+ "span",
864
+ {
865
+ className: cn(
866
+ "ml-4 font-medium transition-opacity duration-200",
867
+ isCollapsed ? "hidden" : "block"
868
+ ),
869
+ children: "Collapse"
870
+ }
871
+ )
872
+ ]
873
+ }
874
+ )
875
+ ] })
876
+ ]
877
+ }
878
+ );
879
+ }
880
+ var defaultNavItems2 = [
881
+ { icon: "dashboard", label: "Dashboard", active: true },
882
+ { icon: "account_balance_wallet", label: "Wallet", active: false },
883
+ { icon: "analytics", label: "Analytics", active: false },
884
+ { icon: "swap_horiz", label: "Transactions", active: false }
885
+ ];
886
+ var defaultUser2 = {
887
+ name: "Alex Morgan",
888
+ role: "Premium User",
889
+ avatarUrl: "https://lh3.googleusercontent.com/aida-public/AB6AXuAOo_5Kr126T6MHRuT6vvn0AOhE9osWQx3QcuqMljDeMkNf_ZbpM3o6GJnJRnZ78mRrjXpZkmn2bZXZrEp37pv7z35DJzPgruHStOKVsKzyird-Athm2EOkwXhcivP6D_kuA9Z-o2OGONNpa5Us1pXcuKJNWbzqImuWkfYkTdFzv1BUayGF_VyekDIcygoEPjacRcsarKHujq1Yfc57ux_DdoufrlRxVnNfiDWra2_OVlievLaWr_kC-4NriyAzRUctHgucD15RZy0"
890
+ };
891
+ function MobileNav({
892
+ navItems = defaultNavItems2,
893
+ user = defaultUser2,
894
+ onToggleTheme,
895
+ onNavItemClick
896
+ }) {
897
+ const [isMenuOpen, setIsMenuOpen] = useState(false);
898
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
899
+ /* @__PURE__ */ jsxs("header", { className: "lg:hidden fixed top-0 left-0 right-0 h-16 bg-card border-b border-border flex items-center justify-between px-4 z-50", children: [
900
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
901
+ /* @__PURE__ */ jsx("div", { className: "w-10 h-10 bg-primary rounded-xl flex items-center justify-center text-primary-foreground font-bold text-xl", children: /* @__PURE__ */ jsx("span", { className: "material-icons-round", children: "grid_view" }) }),
902
+ /* @__PURE__ */ jsx("span", { className: "ml-3 font-bold text-xl tracking-tight", children: "FinDash" })
903
+ ] }),
904
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
905
+ /* @__PURE__ */ jsx(
906
+ "button",
907
+ {
908
+ onClick: onToggleTheme,
909
+ className: "w-10 h-10 flex items-center justify-center rounded-xl hover:bg-muted transition-colors",
910
+ children: /* @__PURE__ */ jsx("span", { className: "material-icons-round text-2xl", children: "dark_mode" })
911
+ }
912
+ ),
913
+ /* @__PURE__ */ jsx(
914
+ "button",
915
+ {
916
+ onClick: () => setIsMenuOpen(true),
917
+ className: "w-10 h-10 flex items-center justify-center rounded-xl hover:bg-muted transition-colors",
918
+ children: /* @__PURE__ */ jsx("span", { className: "material-icons-round text-2xl", children: "menu" })
919
+ }
920
+ )
921
+ ] })
922
+ ] }),
923
+ /* @__PURE__ */ jsx(
924
+ "div",
925
+ {
926
+ className: cn(
927
+ "lg:hidden fixed inset-0 bg-black/50 z-[99] transition-opacity duration-300",
928
+ isMenuOpen ? "opacity-100 pointer-events-auto" : "opacity-0 pointer-events-none"
929
+ ),
930
+ onClick: () => setIsMenuOpen(false)
931
+ }
932
+ ),
933
+ /* @__PURE__ */ jsxs(
934
+ "div",
935
+ {
936
+ className: cn(
937
+ "lg:hidden fixed top-0 right-0 h-full w-1/2 min-w-[280px] max-w-[400px] bg-background z-[100] transition-transform duration-300 flex flex-col shadow-2xl",
938
+ isMenuOpen ? "translate-x-0" : "translate-x-full"
939
+ ),
940
+ children: [
941
+ /* @__PURE__ */ jsxs("div", { className: "h-16 flex items-center justify-between px-4 border-b border-border", children: [
942
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
943
+ /* @__PURE__ */ jsx("div", { className: "w-10 h-10 bg-primary rounded-xl flex items-center justify-center text-primary-foreground font-bold text-xl", children: /* @__PURE__ */ jsx("span", { className: "material-icons-round", children: "grid_view" }) }),
944
+ /* @__PURE__ */ jsx("span", { className: "ml-3 font-bold text-xl tracking-tight", children: "FinDash" })
945
+ ] }),
946
+ /* @__PURE__ */ jsx(
947
+ "button",
948
+ {
949
+ onClick: () => setIsMenuOpen(false),
950
+ className: "w-10 h-10 flex items-center justify-center rounded-xl hover:bg-muted transition-colors",
951
+ children: /* @__PURE__ */ jsx("span", { className: "material-icons-round text-2xl", children: "close" })
952
+ }
953
+ )
954
+ ] }),
955
+ /* @__PURE__ */ jsx("nav", { className: "flex-1 flex flex-col items-center justify-center gap-4 p-6", children: navItems.map((item) => /* @__PURE__ */ jsxs(
956
+ "a",
957
+ {
958
+ href: item.href || "#",
959
+ onClick: (e) => {
960
+ e.preventDefault();
961
+ onNavItemClick?.(item);
962
+ setIsMenuOpen(false);
963
+ },
964
+ className: cn(
965
+ "w-full max-w-sm flex items-center gap-4 px-6 py-4 rounded-2xl transition-colors text-lg",
966
+ item.active ? "bg-muted text-foreground" : "text-muted-foreground hover:text-foreground hover:bg-muted/50"
967
+ ),
968
+ children: [
969
+ /* @__PURE__ */ jsx("span", { className: "material-icons-round text-3xl", children: item.icon }),
970
+ /* @__PURE__ */ jsx("span", { className: "font-medium", children: item.label })
971
+ ]
972
+ },
973
+ item.label
974
+ )) }),
975
+ /* @__PURE__ */ jsx("div", { className: "p-4 border-t border-border", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
976
+ /* @__PURE__ */ jsx(
977
+ "img",
978
+ {
979
+ alt: "User Profile",
980
+ className: "w-10 h-10 rounded-full border-2 border-card",
981
+ src: user.avatarUrl
982
+ }
983
+ ),
984
+ /* @__PURE__ */ jsxs("div", { children: [
985
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-semibold", children: user.name }),
986
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: user.role })
987
+ ] })
988
+ ] }) })
989
+ ]
990
+ }
991
+ )
992
+ ] });
993
+ }
994
+ function DashboardTemplate({
995
+ data = {},
996
+ isLoading = false,
997
+ onThemeToggle,
998
+ onNavItemClick,
999
+ onActionClick,
1000
+ className
1001
+ }) {
1002
+ const [isSidebarCollapsed, setIsSidebarCollapsed] = useState(false);
1003
+ return /* @__PURE__ */ jsxs("div", { className: cn("min-h-screen flex pb-24", className), children: [
1004
+ /* @__PURE__ */ jsx(MobileNav, { onToggleTheme: onThemeToggle || (() => {
1005
+ }), onNavItemClick, user: data.user }),
1006
+ /* @__PURE__ */ jsx(
1007
+ Sidebar,
1008
+ {
1009
+ onToggleTheme: onThemeToggle || (() => {
1010
+ }),
1011
+ isCollapsed: isSidebarCollapsed,
1012
+ onToggleCollapse: () => setIsSidebarCollapsed(!isSidebarCollapsed),
1013
+ onNavItemClick,
1014
+ user: data.user
1015
+ }
1016
+ ),
1017
+ /* @__PURE__ */ jsx("main", { className: cn("flex-1 p-6 lg:p-10 max-w-[1600px] mx-auto transition-all duration-300 pt-20 lg:pt-6", isSidebarCollapsed ? "lg:ml-20" : "ml-0 lg:ml-64"), children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-6", children: [
1018
+ /* @__PURE__ */ jsxs("div", { className: "space-y-6 flex flex-col", children: [
1019
+ /* @__PURE__ */ jsx(SalesStatisticsCard, { visitors: data.salesStatistics?.visitors, updatedDaysAgo: data.salesStatistics?.updatedDaysAgo, isLoading }),
1020
+ /* @__PURE__ */ jsx(CurrentBalanceCard, { balance: data.balance?.currentBalance, percentageChange: data.balance?.percentageChange, averageScore: data.balance?.averageScore, isLoading }),
1021
+ /* @__PURE__ */ jsx(InvestmentGrowthCard, { percentage: data.investmentGrowth?.percentage, monthlyAverage: data.investmentGrowth?.monthlyAverage, totalValue: data.investmentGrowth?.totalValue, isLoading })
1022
+ ] }),
1023
+ /* @__PURE__ */ jsxs("div", { className: "md:col-span-1 xl:col-span-2 grid grid-cols-1 xl:grid-cols-2 gap-6", children: [
1024
+ /* @__PURE__ */ jsx(RecentTransactionsCard, { summary: data.transactions?.summary, users: data.transactions?.users, isLoading }),
1025
+ /* @__PURE__ */ jsxs("div", { className: "space-y-6 flex flex-col", children: [
1026
+ /* @__PURE__ */ jsx(MarketForecastCard, { forecasts: data.forecasts, isLoading }),
1027
+ /* @__PURE__ */ jsx(PortfolioAllocationCard, { allocations: data.portfolio, isLoading })
1028
+ ] }),
1029
+ /* @__PURE__ */ jsxs("div", { className: "space-y-6 flex flex-col", children: [
1030
+ /* @__PURE__ */ jsx(BtcPriceCard, { price: data.btcPrice?.price, changePercentage: data.btcPrice?.changePercentage, isLoading }),
1031
+ /* @__PURE__ */ jsx(MarketCapCard, { value: data.marketCap?.value, isLoading }),
1032
+ /* @__PURE__ */ jsx(WatchlistCard, { items: data.watchlist, isLoading })
1033
+ ] })
1034
+ ] })
1035
+ ] }) }),
1036
+ /* @__PURE__ */ jsx(FloatingNavBar, { onActionClick })
1037
+ ] });
1038
+ }
1039
+
1040
+ export { BtcPriceCard, CurrentBalanceCard, DashboardTemplate, FloatingNavBar, InvestmentGrowthCard, MarketCapCard, MarketForecastCard, MobileNav, PortfolioAllocationCard, QuickActionsCard, RecentTransactionsCard, SalesStatisticsCard, Sidebar, WatchlistCard, cn };
1041
+ //# sourceMappingURL=index.mjs.map
1042
+ //# sourceMappingURL=index.mjs.map