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