fiboui 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/README.md +101 -0
  2. package/dist/content/Alert/index.d.ts +878 -0
  3. package/dist/content/Avatar/index.d.ts +886 -0
  4. package/dist/content/Badge/index.d.ts +887 -0
  5. package/dist/content/Image/index.d.ts +893 -0
  6. package/dist/content/Label/index.d.ts +879 -0
  7. package/dist/content/Progress/index.d.ts +898 -0
  8. package/dist/content/Skeleton/index.d.ts +879 -0
  9. package/dist/content/Spinner/index.d.ts +880 -0
  10. package/dist/content/Text/index.d.ts +878 -0
  11. package/dist/content/index.d.ts +9 -0
  12. package/dist/core/StateWrapper.d.ts +28 -0
  13. package/dist/core/builder.d.ts +50 -0
  14. package/dist/core/component.d.ts +7 -0
  15. package/dist/core/effects.d.ts +3 -0
  16. package/dist/core/icons.d.ts +11 -0
  17. package/dist/core/index.d.ts +5 -0
  18. package/dist/core/state.d.ts +37 -0
  19. package/dist/core/types.d.ts +51 -0
  20. package/dist/demo.d.ts +7 -0
  21. package/dist/effects-Co9C_Dyx.mjs +9 -0
  22. package/dist/examples/ScaffoldExamples.d.ts +3 -0
  23. package/dist/examples/StateExamples.d.ts +5 -0
  24. package/dist/index.d.ts +6 -0
  25. package/dist/index.esm.js +4622 -0
  26. package/dist/index.umd.js +251 -0
  27. package/dist/interactive/Button/index.d.ts +897 -0
  28. package/dist/interactive/Checkbox/index.d.ts +884 -0
  29. package/dist/interactive/Combobox/index.d.ts +898 -0
  30. package/dist/interactive/RadioGroup/index.d.ts +888 -0
  31. package/dist/interactive/Select/index.d.ts +895 -0
  32. package/dist/interactive/Switch/index.d.ts +881 -0
  33. package/dist/interactive/TextField/index.d.ts +892 -0
  34. package/dist/interactive/Textarea/index.d.ts +890 -0
  35. package/dist/interactive/index.d.ts +8 -0
  36. package/dist/layout/Center/index.d.ts +869 -0
  37. package/dist/layout/Column/index.d.ts +881 -0
  38. package/dist/layout/Container/index.d.ts +870 -0
  39. package/dist/layout/DashboardLayout/index.d.ts +870 -0
  40. package/dist/layout/Header/index.d.ts +870 -0
  41. package/dist/layout/Line/index.d.ts +872 -0
  42. package/dist/layout/Row/index.d.ts +879 -0
  43. package/dist/layout/Scaffold/index.d.ts +878 -0
  44. package/dist/layout/ScrollView/index.d.ts +879 -0
  45. package/dist/layout/Sidebar/index.d.ts +870 -0
  46. package/dist/layout/Spacer/index.d.ts +875 -0
  47. package/dist/layout/StakentComponents.d.ts +4 -0
  48. package/dist/layout/index.d.ts +11 -0
  49. package/dist/structure/Banner/index.d.ts +879 -0
  50. package/dist/structure/Box/index.d.ts +869 -0
  51. package/dist/structure/Card/index.d.ts +881 -0
  52. package/dist/structure/Collapse/index.d.ts +884 -0
  53. package/dist/structure/Grid/index.d.ts +1757 -0
  54. package/dist/structure/List/index.d.ts +888 -0
  55. package/dist/structure/Table/index.d.ts +895 -0
  56. package/dist/structure/Tags/index.d.ts +876 -0
  57. package/dist/structure/cards/AssetCard/index.d.ts +884 -0
  58. package/dist/structure/cards/CollectionCard/index.d.ts +880 -0
  59. package/dist/structure/cards/ContentCard/index.d.ts +884 -0
  60. package/dist/structure/cards/ProfileCard/index.d.ts +892 -0
  61. package/dist/structure/cards/index.d.ts +5 -0
  62. package/dist/structure/cards/variants/index.d.ts +3490 -0
  63. package/dist/structure/index.d.ts +9 -0
  64. package/dist/style.css +1 -0
  65. package/dist/theme/cupertino.d.ts +3 -0
  66. package/dist/theme/index.d.ts +5 -0
  67. package/dist/theme/material.d.ts +3 -0
  68. package/dist/theme/provider.d.ts +16 -0
  69. package/dist/theme/types.d.ts +57 -0
  70. package/dist/theme/web.d.ts +3 -0
  71. package/package.json +54 -0
  72. package/src/content/Alert/index.ts +110 -0
  73. package/src/content/Avatar/index.ts +116 -0
  74. package/src/content/Badge/index.ts +162 -0
  75. package/src/content/Image/index.ts +137 -0
  76. package/src/content/Label/index.ts +66 -0
  77. package/src/content/Progress/index.ts +378 -0
  78. package/src/content/Skeleton/index.ts +71 -0
  79. package/src/content/Spinner/index.ts +139 -0
  80. package/src/content/Text/index.ts +74 -0
  81. package/src/content/index.ts +9 -0
  82. package/src/core/StateWrapper.tsx +105 -0
  83. package/src/core/builder.ts +259 -0
  84. package/src/core/component.ts +49 -0
  85. package/src/core/effects.ts +27 -0
  86. package/src/core/icons.tsx +57 -0
  87. package/src/core/index.ts +5 -0
  88. package/src/core/state.ts +233 -0
  89. package/src/core/types.ts +62 -0
  90. package/src/demo.tsx +1045 -0
  91. package/src/examples/ScaffoldExamples.tsx +299 -0
  92. package/src/examples/StateExamples.tsx +149 -0
  93. package/src/index.ts +8 -0
  94. package/src/interactive/Button/index.ts +218 -0
  95. package/src/interactive/Checkbox/index.ts +145 -0
  96. package/src/interactive/Combobox/index.ts +278 -0
  97. package/src/interactive/RadioGroup/index.ts +124 -0
  98. package/src/interactive/Select/index.ts +227 -0
  99. package/src/interactive/Switch/index.ts +123 -0
  100. package/src/interactive/TextField/index.ts +200 -0
  101. package/src/interactive/Textarea/index.ts +129 -0
  102. package/src/interactive/index.ts +8 -0
  103. package/src/layout/Center/index.ts +34 -0
  104. package/src/layout/Column/index.ts +101 -0
  105. package/src/layout/Container/index.ts +28 -0
  106. package/src/layout/DashboardLayout/index.ts +106 -0
  107. package/src/layout/Header/index.ts +50 -0
  108. package/src/layout/Line/index.ts +41 -0
  109. package/src/layout/Row/index.ts +93 -0
  110. package/src/layout/Scaffold/index.ts +133 -0
  111. package/src/layout/ScrollView/index.ts +67 -0
  112. package/src/layout/Sidebar/index.ts +56 -0
  113. package/src/layout/Spacer/index.ts +46 -0
  114. package/src/layout/StakentComponents.tsx +57 -0
  115. package/src/layout/index.ts +11 -0
  116. package/src/structure/Banner/index.ts +92 -0
  117. package/src/structure/Box/index.ts +45 -0
  118. package/src/structure/Card/index.ts +113 -0
  119. package/src/structure/Collapse/index.ts +122 -0
  120. package/src/structure/Grid/index.ts +197 -0
  121. package/src/structure/List/index.ts +185 -0
  122. package/src/structure/Table/index.ts +165 -0
  123. package/src/structure/Tags/index.ts +69 -0
  124. package/src/structure/cards/AssetCard/index.ts +158 -0
  125. package/src/structure/cards/CollectionCard/index.ts +95 -0
  126. package/src/structure/cards/ContentCard/index.ts +127 -0
  127. package/src/structure/cards/ProfileCard/index.ts +152 -0
  128. package/src/structure/cards/index.ts +5 -0
  129. package/src/structure/cards/variants/index.ts +301 -0
  130. package/src/structure/index.ts +10 -0
  131. package/src/styles/base.css +186 -0
  132. package/src/styles/core.css +52 -0
  133. package/src/styles/themes/cupertino.css +197 -0
  134. package/src/styles/themes/material.css +322 -0
  135. package/src/styles/themes/web.css +196 -0
  136. package/src/theme/cupertino.ts +85 -0
  137. package/src/theme/index.ts +5 -0
  138. package/src/theme/material.ts +86 -0
  139. package/src/theme/provider.tsx +76 -0
  140. package/src/theme/types.ts +62 -0
  141. package/src/theme/web.ts +82 -0
package/src/demo.tsx ADDED
@@ -0,0 +1,1045 @@
1
+ import React from 'react';
2
+ import { StakentCard, StakentButton, StakentSidebarItem, StakentBadge } from './layout/StakentComponents';
3
+ import { Grid, GridItem } from './structure/Grid';
4
+ import { Card } from './structure/Card';
5
+ import { ContentCard } from './structure/cards/ContentCard';
6
+ import { InfoCard, ActionCard, InputCard, MetricCard } from './structure/cards/variants';
7
+ import { Sidebar } from './layout/Sidebar';
8
+ import { Header } from './layout/Header';
9
+ import { DashboardLayout } from './layout/DashboardLayout';
10
+ import { createRoot, Root } from 'react-dom/client';
11
+
12
+ declare global {
13
+ interface Window {
14
+ _reactRoot?: Root;
15
+ }
16
+ }
17
+ import {
18
+ FiboThemeProvider,
19
+ Column,
20
+ Row,
21
+ Text,
22
+ Box,
23
+ Button,
24
+ useFiboTheme,
25
+ AssetCard,
26
+ ProfileCard,
27
+ CollectionCard,
28
+ List,
29
+ Table,
30
+ Badge,
31
+ Avatar,
32
+ Collapse,
33
+ ScrollView,
34
+ Spacer,
35
+ Switch,
36
+ Checkbox,
37
+ RadioGroup,
38
+ Textarea,
39
+ TextField,
40
+ Label,
41
+ Select,
42
+ Combobox,
43
+ Image,
44
+ Tags,
45
+ Spinner,
46
+ Skeleton,
47
+ Alert,
48
+ Progress
49
+ } from './index';
50
+
51
+ const Gallery = () => {
52
+ const { setTheme } = useFiboTheme();
53
+
54
+ return (
55
+ Box().classNames(['bg-gray-50', 'min-h-screen', 'p-12']).gap(14).children([
56
+
57
+
58
+ Row().alignItems("center").justifyContent("between").classNames(['mb-12']).children([
59
+ Column().gap(8).children([
60
+ Text("Latest Drops").fontSize(32).fontWeight(800).color("#111827").build(),
61
+ Text("Explore the new premium component system").fontSize(16).color("#6B7280").build(),
62
+ ]).build(),
63
+
64
+ Row().gap(8).children([
65
+ Button("Web").onPress(() => setTheme('web')).variant("outline").classNames(['bg-white']).build(),
66
+ Button("iOS").onPress(() => setTheme('cupertino')).variant("outline").classNames(['bg-white']).build(),
67
+ ]).build()
68
+ ]).build(),
69
+
70
+
71
+ Box().classNames(['grid', 'grid-cols-12', 'gap-8']).children([
72
+
73
+
74
+ Box().classNames(['col-span-3']).children([
75
+ ProfileCard()
76
+ .name("Felipe O.")
77
+ .handle("@felipe")
78
+ .avatar("https://ui-avatars.com/api/?name=Felipe+Oliveira&background=random")
79
+ .stats({ items: "12K", owners: "450", floor: "0.2" })
80
+ .build(),
81
+
82
+ Spacer().height(24).build(),
83
+
84
+ Text("Design System Elements").variant("h6").className("mb-4 text-gray-500 uppercase tracking-widest text-xs font-bold").build(),
85
+
86
+ Column().gap(12).children([
87
+ Text("Buttons").variant("body").className("text-gray-400 font-medium").build(),
88
+ Row().gap(8).children([
89
+ Button("Primary").variant("filled").build(),
90
+ Button("Soft").variant("soft").build(),
91
+ Button("Ghost").variant("ghost").build(),
92
+ ]).build(),
93
+
94
+ Text("Badges").variant("body").className("text-gray-400 font-medium mt-4").build(),
95
+ Row().gap(8).children([
96
+ Badge().text("Success").intent("success").variant("glass").build(),
97
+ Badge().text("Error").intent("error").variant("solid").build(),
98
+ Badge().text("Dot").intent("warning").variant("dot").build(),
99
+ ]).build(),
100
+
101
+ Text("Avatars").variant("body").className("text-gray-400 font-medium mt-4").build(),
102
+ Row().gap(8).alignItems("center").children([
103
+ Avatar().image("https://i.pravatar.cc/150?u=1").size(48).status("online").build(),
104
+ Avatar().image("https://i.pravatar.cc/150?u=2").size(40).shape("square").status("busy").build(),
105
+ ]).build(),
106
+
107
+ Text("Tags").variant("body").className("text-gray-400 font-medium mt-4").build(),
108
+ Tags().items([{ title: "React" }, { title: "TypeScript" }, { title: "Tailwind" }]).build(),
109
+
110
+ Text("Media").variant("body").className("text-gray-400 font-medium mt-4").build(),
111
+ Image("https://images.unsplash.com/photo-1550745165-9bc0b252726f?auto=format&fit=crop&w=300&q=80")
112
+ .clipShape('rounded')
113
+ .frame({ width: 200, height: 120 })
114
+ .build()
115
+ ]).build()
116
+
117
+ ]).build(),
118
+
119
+
120
+ Box().classNames(['col-span-9']).children([
121
+ Text("Trending Assets").variant("h2").className("mb-6").build(),
122
+
123
+
124
+ Box().classNames(['grid', 'grid-cols-3', 'gap-6']).children([
125
+ AssetCard()
126
+ .title("Cosmic Cube #01")
127
+ .price("2.5 ETH")
128
+ .image("https://images.unsplash.com/photo-1620641788421-7a1c342ea42e?auto=format&fit=crop&w=800&q=80")
129
+ .build(),
130
+
131
+ AssetCard()
132
+ .title("Neon Genesis")
133
+ .price("1.8 ETH")
134
+ .image("https://images.unsplash.com/photo-1633101585226-8eb59b3924e0?auto=format&fit=crop&w=800&q=80")
135
+ .build(),
136
+
137
+ CollectionCard()
138
+ .title("Future Scapes")
139
+ .items("10k Items")
140
+ .image("https://images.unsplash.com/photo-1618005182384-a83a8bd57fbe?auto=format&fit=crop&w=800&q=80")
141
+ .build()
142
+ ]).build(),
143
+
144
+
145
+ Box().classNames(['grid', 'grid-cols-2', 'gap-8', 'mt-12']).children([
146
+
147
+ Column().children([
148
+ Text("Recent Transactions").variant("h3").className("mb-4 text-gray-400").build(),
149
+ List()
150
+ .items(['Purchase #8292', 'Sale #1292', 'Transfer #9921', 'Mint #0001'])
151
+ .variant('floating')
152
+ .renderItem((item) =>
153
+ Row().justifyContent("between").alignItems("center").className("w-full").children([
154
+ Row().gap(12).alignItems("center").children([
155
+ Box().classNames(['bg-indigo-50', 'p-2', 'rounded-lg']).children(
156
+ Text("#").color("#4F46E5").fontWeight(600).build()
157
+ ).build(),
158
+ Text(item as string).fontWeight(500).build()
159
+ ]).build(),
160
+ Text("-0.5 ETH").fontSize(14).color("#EF4444").build()
161
+ ]).build()
162
+ ).build()
163
+ ]).build(),
164
+
165
+
166
+ Column().children([
167
+ Text("Top Creators").variant("h3").className("mb-4 text-gray-400").build(),
168
+ Table()
169
+ .variant('clean')
170
+ .columns([
171
+ { header: "User", accessor: "user", render: (item: any) =>
172
+ Row().gap(10).alignItems("center").children([
173
+ Avatar().image(item.img).size(28).build(),
174
+ Text(item.user).fontWeight(600).fontSize(14).build()
175
+ ]).build()
176
+ },
177
+ { header: "Role", accessor: "role", render: (item: any) =>
178
+ Badge().text(item.role).intent(item.role === 'Admin' ? 'info' : 'warning').variant('dot').build()
179
+ },
180
+ { header: "Team", accessor: "team" }
181
+ ])
182
+ .data([
183
+ { user: "Alice M.", role: "Admin", team: "Engineering", img: "https://i.pravatar.cc/150?u=5" },
184
+ { user: "Bob D.", role: "Editor", team: "Marketing", img: "https://i.pravatar.cc/150?u=6" },
185
+ { user: "Charlie", role: "Viewer", team: "Design", img: "https://i.pravatar.cc/150?u=7" }
186
+ ])
187
+ .build()
188
+ ]).build()
189
+ ]).build(),
190
+
191
+ /* ========================================================================================= */
192
+ /* ADVANCED LAYOUTS DEMO */
193
+ /* ========================================================================================= */
194
+ Box().classNames(['mt-12']).children([
195
+ Text("Advanced Layouts & Interactions").variant("h2").className("mb-6").build(),
196
+
197
+
198
+ Text("Horizontal ScrollView (Carousel)").variant("body").className("mb-4 text-gray-500").build(),
199
+ ScrollView()
200
+ .horizontal()
201
+ .scrollbar('hidden')
202
+ .style({ gap: '16px', paddingBottom: '16px' })
203
+ .children([
204
+
205
+ ...[1,2,3,4,5].map(i =>
206
+ Box().style({ minWidth: '280px' }).children(
207
+ AssetCard()
208
+ .title(`NFT #${i}42`)
209
+ .image("https://images.unsplash.com/photo-1620912189869-90f855d2891d?auto=format&fit=crop&w=400&q=80")
210
+ .price("1.2 ETH")
211
+ .build()
212
+ ).build()
213
+ )
214
+ ])
215
+ .build(),
216
+
217
+ Spacer().height(32).build(),
218
+
219
+
220
+ Box().classNames(['grid', 'grid-cols-2', 'gap-8']).children([
221
+ Column().gap(12).children([
222
+ Text("Interactive Collapse").variant("h3").className("mb-4 text-gray-400").build(),
223
+ Collapse()
224
+ .title("What is FiboUI?")
225
+ .defaultOpen(true)
226
+ .content("FiboUI is a highly flexible, builder-pattern based component library designed for the next generation of web apps.")
227
+ .build(),
228
+ Collapse()
229
+ .title("How do I use ScrollView?")
230
+ .content("Simply wrap your content in ScrollView().horizontal().build() to get a native-feeling scrollable area without ugly scrollbars.")
231
+ .build(),
232
+ Collapse()
233
+ .title("Is it accessible?")
234
+ .content("Yes! We prioritize accessibility standards in all our core interactive elements.")
235
+ .build()
236
+ ]).build(),
237
+
238
+
239
+ Column().children([
240
+ Text("Lazy Loading List").variant("h3").className("mb-4 text-gray-400").build(),
241
+ Box().style({ width: '100%', height: '300px', overflowY: 'hidden', border: '1px solid #E5E7EB', borderRadius: '16px', backgroundColor: '#fff' }).children(
242
+ React.createElement(() => {
243
+ const [items, setItems] = React.useState(Array.from({ length: 10 }).map((_, i) => `Initial Item ${i}`));
244
+ const [loading, setLoading] = React.useState(false);
245
+
246
+ const loadMore = () => {
247
+ setLoading(true);
248
+ setTimeout(() => {
249
+ const newItems = Array.from({ length: 5 }).map((_, i) => `Loaded Item ${items.length + i}`);
250
+ setItems(prev => [...prev, ...newItems]);
251
+ setLoading(false);
252
+ }, 1000);
253
+ };
254
+
255
+ return ScrollView().vertical().style({ height: '100%' }).children(
256
+ List()
257
+ .width('100%')
258
+ .items(items)
259
+ .variant('default')
260
+ .separator(true)
261
+ .renderItem((item) =>
262
+ Row().alignItems("center").justifyContent("between").className("w-full").children([
263
+ Text(item as string).fontSize(14).build(),
264
+ Badge().text("New").variant("dot").intent("success").build()
265
+ ]).build()
266
+ )
267
+ .onEndReached(loadMore)
268
+ .loading(loading)
269
+ .build()
270
+ ).build();
271
+ })
272
+ ).build()
273
+ ]).build()
274
+ ]).build()
275
+
276
+ ]).build(),
277
+
278
+ /* ========================================================================================= */
279
+ /* FORM ELEMENTS DEMO */
280
+ /* ========================================================================================= */
281
+ Box().classNames(['mt-12']).children([
282
+ Text("Form Elements").variant("h2").className("mb-6").build(),
283
+
284
+ Box().classNames(['grid', 'grid-cols-1', 'md:grid-cols-2', 'gap-12']).children([
285
+
286
+ Column().gap(20).children([
287
+
288
+
289
+ React.createElement(() => {
290
+ const [name, setName] = React.useState("");
291
+
292
+ return TextField().label("Full Name").placeholder("John Doe").value(name).onChange(setName).build();
293
+ }),
294
+
295
+
296
+ Column().gap(4).children([
297
+ Label().text("Biography").required().htmlFor("bio-input").build(),
298
+
299
+
300
+ React.createElement(() => {
301
+ const [bio, setBio] = React.useState("");
302
+ return Textarea().id("bio-input").placeholder("Tell us about yourself...").rows(4).value(bio).onChange(setBio).build();
303
+ })
304
+ ]).build(),
305
+
306
+ /* EXTENDED INPUTS DEMO */
307
+
308
+
309
+
310
+ React.createElement(() => {
311
+ const [pass, setPass] = React.useState("");
312
+ return TextField().label("Password").type("password").value(pass).onChange(setPass).build();
313
+ }),
314
+
315
+
316
+
317
+ React.createElement(() => {
318
+ const [cpf, setCpf] = React.useState("");
319
+ return TextField().label("CPF (Masked)").placeholder("999.999.999-99").mask("999.999.999-99").value(cpf).onChange(setCpf).build();
320
+ }),
321
+
322
+
323
+
324
+ React.createElement(() => {
325
+ const [email, setEmail] = React.useState("");
326
+ return TextField().label("Email Address").type("email").placeholder("user@example.com").value(email).onChange(setEmail).build();
327
+ }),
328
+
329
+ /* SELECTOR COMPONENTS DEMO */
330
+
331
+
332
+
333
+ React.createElement(() => {
334
+ const [role, setRole] = React.useState("dev");
335
+ const roles = [
336
+ { label: "Developer", value: "dev" },
337
+ { label: "Designer", value: "des" },
338
+ { label: "Manager", value: "mgr" },
339
+ { label: "Product Owner", value: "po" }
340
+ ];
341
+ return Select().label("Role").options(roles).value(role).onChange((val: string | string[]) => setRole(val as string)).build();
342
+ }),
343
+
344
+
345
+
346
+ React.createElement(() => {
347
+ const [skills, setSkills] = React.useState(["css", "js"]);
348
+ const skillOptions = [
349
+ { label: "HTML5", value: "html" },
350
+ { label: "CSS3", value: "css" },
351
+ { label: "JavaScript", value: "js" },
352
+ { label: "TypeScript", value: "ts" },
353
+ { label: "React", value: "react" }
354
+ ];
355
+ return Select().label("Skills (Multi)").options(skillOptions).value(skills).onChange((val: string | string[]) => setSkills(val as string[])).multiple(true).build();
356
+ }),
357
+
358
+
359
+
360
+ React.createElement(() => {
361
+ const [tech, setTech] = React.useState("react");
362
+ const [options, setOptions] = React.useState([
363
+ { label: "React", value: "react" },
364
+ { label: "Vue", value: "vue" },
365
+ { label: "Angular", value: "ng" }
366
+ ]);
367
+
368
+ const handleAdd = (newLabel: string) => {
369
+ const newVal = newLabel.toLowerCase().replace(/\s+/g, '-');
370
+ setOptions([...options, { label: newLabel, value: newVal }]);
371
+ setTech(newVal);
372
+ };
373
+
374
+ return Combobox().label("Favorite Tech").options(options).value(tech).onChange((val) => setTech(val as string)).onAdd(handleAdd).placeholder("Search or add...").build();
375
+ }),
376
+
377
+
378
+
379
+ React.createElement(() => {
380
+ const [tags, setTags] = React.useState(["ux", "ui"]);
381
+ const [options, setOptions] = React.useState([
382
+ { label: "User Experience", value: "ux" },
383
+ { label: "User Interface", value: "ui" },
384
+ { label: "Accessibility", value: "a11y" }
385
+ ]);
386
+
387
+ const handleAdd = (newLabel: string) => {
388
+ const newVal = newLabel.toLowerCase().replace(/\s+/g, '-');
389
+ setOptions([...options, { label: newLabel, value: newVal }]);
390
+
391
+ setTags([...tags, newVal]);
392
+ };
393
+
394
+ return Combobox().label("Tags (Multi + Add)").options(options).value(tags).onChange((val) => setTags(val as string[])).onAdd(handleAdd).multiple(true).placeholder("Type to tag...").build();
395
+ })
396
+
397
+ ]).build(),
398
+
399
+
400
+ Column().gap(24).children([
401
+
402
+ Column().gap(12).children([
403
+ Text("Notifications").variant("h6").className("text-gray-500 uppercase text-xs font-bold").build(),
404
+ React.createElement(() => {
405
+ const [email, setEmail] = React.useState(true);
406
+ const [push, setPush] = React.useState(false);
407
+ return Column().gap(8).children([
408
+ Switch().label("Email Notifications").checked(email).onChange(setEmail).build(),
409
+ Switch().label("Push Notifications").checked(push).onChange(setPush).build(),
410
+ ]).build();
411
+ })
412
+ ]).build(),
413
+
414
+
415
+ Column().gap(12).children([
416
+ Text("Interests").variant("h6").className("text-gray-500 uppercase text-xs font-bold").build(),
417
+ React.createElement(() => {
418
+ const [c1, setC1] = React.useState(true);
419
+ const [c2, setC2] = React.useState(false);
420
+ return Row().gap(16).children([
421
+ Checkbox().label("Coding").checked(c1).onChange(setC1).build(),
422
+ Checkbox().label("Design").checked(c2).onChange(setC2).build(),
423
+ ]).build();
424
+ })
425
+ ]).build(),
426
+
427
+
428
+ Column().gap(12).children([
429
+ Text("Experience Level").variant("h6").className("text-gray-500 uppercase text-xs font-bold").build(),
430
+ React.createElement(() => {
431
+ const [level, setLevel] = React.useState("mid");
432
+ return RadioGroup()
433
+ .options([
434
+ { label: "Junior", value: "jr" },
435
+ { label: "Mid-Level", value: "mid" },
436
+ { label: "Senior", value: "sr" }
437
+ ])
438
+ .value(level)
439
+ .onChange(setLevel)
440
+ .direction('horizontal')
441
+ .build();
442
+ })
443
+ ]).build(),
444
+
445
+ ]).build(),
446
+ ]).build()
447
+
448
+ ]).build(),
449
+
450
+
451
+ /* ========================================================================================= */
452
+ /* FEEDBACK ELEMENTS DEMO */
453
+ /* ========================================================================================= */
454
+ Box().classNames(['mt-12']).children([
455
+ Text("Feedback Elements").variant("h2").className("mb-6").build(),
456
+
457
+ Box().classNames(['grid', 'grid-cols-1', 'md:grid-cols-2', 'gap-12']).children([
458
+
459
+ Column().gap(20).children([
460
+ Text("Alerts").variant("h6").className("text-gray-500 uppercase text-xs font-bold").build(),
461
+ Alert().title("Update Available").description("A new version of FiboUI is ready to install.").intent("info").build(),
462
+ Alert().title("Success!").description("Your changes have been saved successfully.").intent("success").build(),
463
+ Alert().title("Warning").description("Your storage is almost full.").intent("warning").build(),
464
+ Alert().title("Error").description("Failed to connect to server.").intent("error").build(),
465
+
466
+ Spacer().height(12).build(),
467
+
468
+ Text("Spinners").variant("h6").className("text-gray-500 uppercase text-xs font-bold").build(),
469
+ Row().gap(16).alignItems("center").children([
470
+ Spinner().variant("circle").size("lg").color("#3B82F6").build(),
471
+ Spinner().variant("dots").size("xl").color("#10B981").build(),
472
+ Spinner().variant("pulse").size("lg").color("#F59E0B").build(),
473
+ Spinner().variant("blocks").size("md").color("#EF4444").build(),
474
+ ]).build()
475
+ ]).build(),
476
+
477
+
478
+ Column().gap(20).children([
479
+ Text("Skeletons").variant("h6").className("text-gray-500 uppercase text-xs font-bold").build(),
480
+ Row().gap(12).children([
481
+ Skeleton().shape("circle").width(48).height(48).build(),
482
+ Column().gap(8).style({flex: 1}).children([
483
+ Skeleton().width("60%").height(16).build(),
484
+ Skeleton().width("90%").height(12).build(),
485
+ ]).build()
486
+ ]).build(),
487
+ Skeleton().width("100%").height(120).shape("rounded-lg").build(),
488
+
489
+ Spacer().height(12).build(),
490
+
491
+ Text("Progress").variant("h6").className("text-gray-500 uppercase text-xs font-bold").build(),
492
+ Column().gap(30).children([
493
+ Progress().variant("floating").value(25).color("#3B82F6").subLabel("5s left").build(),
494
+ Progress().variant("chevron").value(66).color("#2563EB").build(),
495
+ Progress().value(75).max(100).color("#3B82F6").build(),
496
+ Progress().variant("segments").value(50).color("#10B981").height(8).build(),
497
+ Progress().variant("knob").value(25).color("#F59E0B").height(6).build(),
498
+ Progress().variant("steps").value(66).color("#8B5CF6").build(),
499
+ Progress().variant("striped").value(45).color("#EC4899").build(),
500
+ Progress().variant("labeled").value(92).color("#06B6D4").build(),
501
+ Progress().variant("pagination").value(40).color("#8B5CF6").build(),
502
+ Progress().variant("timeline").value(60).color("#10B981")
503
+ .items([
504
+ { title: 'The shipment has arrived at the terminal', description: 'Tuesday, 28 May 2024' },
505
+ { title: 'The shipment is being processed', description: 'Wednesday, 29 May 2024' },
506
+ { title: 'Out for delivery', description: 'Thursday, 30 May 2024' },
507
+ { title: 'Delivered', description: 'Pending' }
508
+ ]).build(),
509
+ Row().gap(20).children([
510
+ Progress().variant("circular").value(25).height(60).color("#6366F1").build(),
511
+ Progress().variant("circular").value(65).height(60).color("#F59E0B").build(),
512
+ Progress().variant("circular").value(50).label("3 of 6").height(80).color("#EF4444").build(),
513
+ ]).build()
514
+ ]).build()
515
+ ]).build()
516
+ ]).build(),
517
+
518
+
519
+
520
+
521
+
522
+ Text("Grid System").variant("h4").className("mb-4 mt-12 px-4").build(),
523
+
524
+
525
+ Text("Standard Grid (Social Media)").variant("h6").className("mb-4 px-4 text-gray-500").build(),
526
+ Grid().columns({ sm: 1, md: 2, lg: 4 }).gap("lg").className("px-4").children([
527
+ ContentCard()
528
+ .image("https://images.unsplash.com/photo-1506744038136-46273834b3fb?q=80&w=1000&auto=format&fit=crop")
529
+ .title("Austria: Panoramic Lake")
530
+ .source("Instagram")
531
+ .date("April 25, 2030")
532
+ .build(),
533
+ ContentCard()
534
+ .image("https://images.unsplash.com/photo-1516455590571-18256e5bb9ff?q=80&w=1000&auto=format&fit=crop")
535
+ .title("Ultimate Studio Tour")
536
+ .source("YouTube")
537
+ .date("April 22, 2030")
538
+ .build(),
539
+ ContentCard()
540
+ .image("https://images.unsplash.com/photo-1497215728101-856f4ea42174?q=80&w=1000&auto=format&fit=crop")
541
+ .title("Morning Motivation")
542
+ .source("Twitter")
543
+ .date("April 26, 2030")
544
+ .build(),
545
+ ContentCard()
546
+ .image("https://images.unsplash.com/photo-1507525428034-b723cf961d3e?q=80&w=1000&auto=format&fit=crop")
547
+ .title("New Vlog: Bali Adventures")
548
+ .source("YouTube")
549
+ .date("April 24, 2030")
550
+ .build(),
551
+ ]).build(),
552
+
553
+
554
+ Text("Bento Grid (Dashboard)").variant("h6").className("mb-4 mt-8 px-4 text-gray-500").build(),
555
+ Grid().variant("bento").columns({ sm: 1, md: 4 }).gap("md").className("px-4").children([
556
+
557
+ GridItem().colSpan(2).rowSpan(2).children([
558
+ Card()
559
+ .className("h-full text-white border-none relative overflow-hidden flex flex-col justify-center items-center p-8 text-center")
560
+ .style({ backgroundColor: '#4C1D95' })
561
+ .children([
562
+ Text("PromptPal").className("uppercase tracking-widest text-sm opacity-70 mb-2").build(),
563
+ Text("Your AI Prompt Companion").variant("h3").className("font-extrabold mb-6 relative z-10").build(),
564
+ Box().className("w-32 h-32 rounded-full bg-gradient-to-tr from-purple-500 to-pink-500 blur-xl opacity-50 absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2").build(),
565
+ ]).build()
566
+ ]).build(),
567
+
568
+
569
+ GridItem().colSpan(1).children([
570
+ Card()
571
+ .className("h-full text-white border-none flex items-center justify-center p-6")
572
+ .style({ backgroundColor: '#111827' })
573
+ .children([
574
+ Text("✨").className("text-3xl").build()
575
+ ]).build()
576
+ ]).build(),
577
+
578
+
579
+ GridItem().colSpan(1).children([
580
+ Card()
581
+ .className("h-full text-white border-none flex flex-col items-center justify-center p-6")
582
+ .style({ backgroundColor: '#111827' })
583
+ .children([
584
+ Text("25M").variant("h3").className("font-bold text-purple-400").build(),
585
+ Text("created prompts").className("text-sm opacity-70").build()
586
+ ]).build()
587
+ ]).build(),
588
+
589
+
590
+ GridItem().colSpan(2).children([
591
+ Card()
592
+ .className("h-full text-white border-none p-6 flex flex-col justify-between")
593
+ .style({ backgroundColor: '#111827' })
594
+ .children([
595
+ Text("12K").variant("h3").className("font-bold text-orange-400").build(),
596
+ Text("Happy Users").className("text-sm opacity-70").build(),
597
+ Row().className("mt-4 -space-x-2").children([
598
+ Avatar().image("https://i.pravatar.cc/100?img=1").build(),
599
+ Avatar().image("https://i.pravatar.cc/100?img=2").build(),
600
+ Avatar().image("https://i.pravatar.cc/100?img=3").build(),
601
+ ]).build()
602
+ ]).build()
603
+ ]).build(),
604
+ ]).build(),
605
+
606
+
607
+ Text("Masonry Layout (Pinterest)").variant("h6").className("mb-4 mt-8 px-4 text-gray-500").build(),
608
+ Grid().variant("masonry").columns({ sm: 2, md: 3, lg: 4 }).gap("md").className("px-4").children([
609
+ Image().src("https://images.unsplash.com/photo-1540189549336-e6e99c3679fe?w=500&q=80").className("w-full rounded-xl").build(),
610
+ Image().src("https://images.unsplash.com/photo-1484723091739-30a097e8f929?w=500&q=80").className("w-full rounded-xl").build(),
611
+ Card()
612
+ .className("text-white p-8 rounded-xl")
613
+ .style({ backgroundColor: '#EF4444' })
614
+ .children([Text("Quote of the day: Design is intelligence made visible.").className("font-bold text-xl").build()]).build(),
615
+ Image().src("https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=500&q=80").className("w-full rounded-xl").build(),
616
+ Image().src("https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=500&q=80").className("w-full rounded-xl").build(),
617
+ Card()
618
+ .className("text-white p-12 rounded-xl flex items-center justify-center")
619
+ .style({ backgroundColor: '#10B981' })
620
+ .children([Text("🥑").className("text-6xl").build()]).build(),
621
+ Image().src("https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=500&q=80").className("w-full rounded-xl").build(),
622
+ Image().src("https://images.unsplash.com/photo-1512621776951-a57141f2eefd?w=500&q=80").className("w-full rounded-xl").build(),
623
+ ]).build(),
624
+
625
+
626
+ Text("Card Variations (Component System)").variant("h4").className("mb-4 mt-12 px-4").build(),
627
+ Grid().columns({ sm: 1, md: 2, lg: 4 }).gap("md").className("px-4").children([
628
+
629
+ InfoCard()
630
+ .title("Getting Started")
631
+ .description("Learn the basics of FiboUI in less than 5 minutes.")
632
+ .icon(Box().className("i-heroicons-book-open text-2xl").build())
633
+ .build(),
634
+ InfoCard()
635
+ .title("Documentation")
636
+ .description("Explore the full API reference and examples.")
637
+ .footer(Button("View Docs").variant("ghost").size("sm").build())
638
+ .build(),
639
+
640
+
641
+ ActionCard()
642
+ .title("Notifications")
643
+ .description("Enable push notifications")
644
+ .withSwitch((val) => console.log(val))
645
+ .build(),
646
+ ActionCard()
647
+ .title("Account Status")
648
+ .description("Your account is currently active")
649
+ .withButton("Deactivate")
650
+ .build(),
651
+
652
+
653
+ MetricCard()
654
+ .title("Total Revenue")
655
+ .value("$45,231.89")
656
+ .trend("12%", "up")
657
+ .build(),
658
+ MetricCard()
659
+ .title("Active Users")
660
+ .value("1,234")
661
+ .trend("2.1%", "down")
662
+ .build(),
663
+
664
+
665
+ InputCard()
666
+ .title("Email Address")
667
+ .description("We'll never share your email.")
668
+ .placeholder("you@example.com")
669
+ .build(),
670
+ InputCard()
671
+ .title("Workspace Name")
672
+ .placeholder("Acme Inc.")
673
+ .build(),
674
+ ]).build(),
675
+
676
+
677
+
678
+ Box().height(100).build(),
679
+
680
+
681
+
682
+
683
+ Text("Layout System (Premium Dark Dashboard)").variant("h4").className("mb-4 px-4").build(),
684
+ Text("A high-fidelity implementation of the requested dark structural layout using custom Stakent components.").className("mb-8 px-4 text-gray-500").build(),
685
+
686
+
687
+ Box().className("border border-gray-800 rounded-3xl overflow-hidden shadow-2xl mx-4 relative font-sans").style({ height: '850px', backgroundColor: '#0B0C15' }).children([
688
+ DashboardLayout()
689
+ .className("h-full text-white selection:bg-indigo-500/30")
690
+ .style({ backgroundColor: '#0B0C15' })
691
+
692
+
693
+ .sidebar(
694
+ Sidebar()
695
+ .width(260)
696
+ .className("border-r border-white/5 bg-[#0B0C15] flex flex-col pt-6")
697
+ .children([
698
+
699
+ Box().className("px-6 mb-8 flex items-center gap-3").children([
700
+ Box().className("w-9 h-9 rounded-xl bg-white flex items-center justify-center text-black font-extrabold text-lg shadow-lg shadow-white/10").children("S").build(),
701
+ Column().gap(2).children([
702
+ Text("Stakent").className("font-bold text-lg text-white leading-none tracking-tight").build(),
703
+ Text("TOP STAKING ASSETS").className("text-[9px] text-gray-500 font-bold uppercase tracking-[0.1em]").build(),
704
+ ]).build()
705
+ ]).build(),
706
+
707
+
708
+ Box().className("px-6 mb-8").children([
709
+ Box().className("flex p-1 bg-[#151621] rounded-xl border border-white/5").children([
710
+ StakentButton({ text: "Staking", variant: "primary", className: "flex-1 text-xs py-2 shadow-none" }),
711
+ StakentButton({ text: "Stablecoin", variant: "ghost", className: "flex-1 text-xs py-2" }),
712
+ ]).build()
713
+ ]).build(),
714
+
715
+
716
+ Column().gap(4).className("px-4 flex-1").children([
717
+ StakentSidebarItem({ label: "Dashboard", active: true, icon: "i-heroicons-squares-2x2" }),
718
+ StakentSidebarItem({ label: "Assets", icon: "i-heroicons-banknotes" }),
719
+ StakentSidebarItem({ label: "Staking Providers", icon: "i-heroicons-server" }),
720
+ StakentSidebarItem({ label: "Calculator", icon: "i-heroicons-calculator" }),
721
+ StakentSidebarItem({ label: "Data API", icon: "i-heroicons-code-bracket" }),
722
+
723
+ Box().height(40).build(),
724
+
725
+
726
+ Row().className("justify-between items-center px-4 mb-3").children([
727
+ Text("ACTIVE STAKING").className("text-[10px] font-bold text-gray-500 uppercase tracking-[0.1em]").build(),
728
+ Box().className("w-5 h-5 rounded-full bg-[#1A1B23] border border-white/10 text-white text-[10px] flex items-center justify-center font-bold").children("1").build()
729
+ ]).build(),
730
+
731
+ Box().className("mx-2 p-3 bg-[#13141C] border border-white/5 rounded-2xl relative group cursor-pointer hover:border-[#6366f1]/30 transition-colors").children([
732
+ Row().className("items-center justify-between").children([
733
+ Row().gap(3).className("items-center").children([
734
+ Box().className("w-9 h-9 rounded-full bg-[#1A1B23] flex items-center justify-center border border-white/5 p-1.5").children([
735
+ Image().src("https://upload.wikimedia.org/wikipedia/commons/6/6f/Ethereum-icon-purple.svg").className("w-full h-full").build()
736
+ ]).build(),
737
+ Column().children([
738
+ Text("Ethereum").className("text-xs font-bold text-white").build(),
739
+ Text("$7,699.00").className("text-[10px] text-gray-500 font-medium").build()
740
+ ]).build()
741
+ ]).build(),
742
+ Box().className("w-1.5 h-1.5 rounded-full bg-emerald-500 shadow-[0_0_8px_rgba(16,185,129,0.5)]").build()
743
+ ]).build()
744
+ ]).build()
745
+ ]).build(),
746
+
747
+
748
+ Box().className("p-6 border-t border-white/5").children([
749
+ Row().gap(3).className("items-center").children([
750
+ Avatar().image("https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?fit=crop&w=100&h=100").size(40).className("border-2 border-[#1A1B23] shadow-lg").build(),
751
+ Column().children([
752
+ Text("Ryan Crawford").className("text-xs font-bold text-white").build(),
753
+ Text("Pro Member").className("text-[10px] text-[#6366f1] font-bold uppercase tracking-wide").build()
754
+ ]).build(),
755
+ Button().icon(Box().className("i-heroicons-cog-6-tooth w-5 h-5 text-gray-500").build()).variant("ghost").size("sm").className("ml-auto hover:text-white hover:bg-white/5").build()
756
+ ]).build()
757
+ ]).build()
758
+ ])
759
+ .build()
760
+ )
761
+
762
+
763
+ .header(
764
+ Header()
765
+ .height(100)
766
+ .className("bg-[#0B0C15]/90 backdrop-blur-xl flex justify-between px-10 items-center z-50")
767
+ .children([
768
+ Box().className("flex flex-col justify-center gap-1.5").children([
769
+ Row().alignItems("center").gap(4).children([
770
+ Text("Recommended coins for 24 hours").className("text-[10px] text-gray-400 font-medium tracking-wide flex items-center gap-2").children([
771
+ Box().className("i-heroicons-clock w-3 h-3").build(),
772
+ "Recommended coins for 24 hours"
773
+ ]).build(),
774
+ Box().className("bg-[#1A1B23] border border-white/5 px-2 py-0.5 rounded-md text-[9px] text-gray-400 font-bold").children("3 Assets").build()
775
+ ]).build(),
776
+ Text("Top Staking Assets").variant("h2").className("font-bold text-white tracking-tight text-3xl").build(),
777
+ ]).build(),
778
+
779
+ Row().gap(4).alignItems("center").children([
780
+ Box().className("flex items-center bg-[#0F1014] border border-white/10 rounded-full px-5 py-3 gap-3 text-sm text-gray-400 w-80 focus-within:border-white/20 transition-all shadow-inner").children([
781
+ Box().className("i-heroicons-magnifying-glass w-4 h-4 text-gray-500").build(),
782
+ Text("Search assets...").className("opacity-40 font-medium text-xs flex-1").build(),
783
+ ]).build(),
784
+
785
+
786
+ Box().className("relative").children([
787
+ Box().className("w-12 h-12 rounded-full border border-white/10 flex items-center justify-center text-gray-400 hover:text-white hover:bg-white/5 cursor-pointer transition-colors").children(
788
+ Box().className("i-heroicons-bell w-5 h-5").build()
789
+ ).build(),
790
+ Box().className("absolute top-0 right-0 w-4 h-4 bg-[#6366f1] rounded-full border-2 border-[#0B0C15] flex items-center justify-center text-[9px] font-bold text-white").children("2").build()
791
+ ]).build(),
792
+
793
+ StakentButton({ text: "Settings", variant: "outline", className: "rounded-full h-12 px-6 text-xs text-gray-400 border-white/10" })
794
+ ]).build()
795
+ ])
796
+ .build()
797
+ )
798
+
799
+
800
+ .children([
801
+ Box().className("p-10 overflow-y-auto h-full scrollbar-hide pb-32").children([
802
+
803
+
804
+ Grid().columns({ sm: 1, md: 3 }).gap("xl").className("mb-10").children([
805
+
806
+ StakentCard({ className: "h-[380px] p-8 hover:border-[#6366f1]/40 transition-all duration-500 group" }).children([
807
+ Box().className("absolute inset-0 bg-[radial-gradient(circle_at_50%_-20%,rgba(99,102,241,0.15),transparent_60%)] opacity-50").build(),
808
+
809
+
810
+ Row().className("justify-between mb-8 relative z-10").children([
811
+ Row().gap(4).className("items-center").children([
812
+ Box().className("w-12 h-12 rounded-2xl bg-[#1A1B23] border border-white/5 flex items-center justify-center shadow-inner").children(
813
+ Image().src("https://upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Ethereum-icon-purple.svg/480px-Ethereum-icon-purple.svg.png").className("w-6 h-6").build()
814
+ ).build(),
815
+ Column().children([
816
+ Text("PROOF OF STAKE").className("text-[9px] font-bold text-gray-500 tracking-[0.15em] mb-1").build(),
817
+ Text("Ethereum (ETH)").className("font-bold text-white text-lg").build()
818
+ ]).build()
819
+ ]).build(),
820
+ Box().className("w-10 h-10 rounded-full border border-white/10 flex items-center justify-center text-gray-500 -rotate-45 group-hover:bg-white group-hover:text-black transition-all duration-300").children("→").build()
821
+ ]).build(),
822
+
823
+
824
+ Text("Reward Rate").className("text-xs font-medium text-gray-500 mb-1 relative z-10").build(),
825
+ Text("13.62%").className("text-5xl font-bold text-white tracking-tight mb-3 relative z-10").build(),
826
+
827
+ Row().gap(2).className("items-center mb-10 relative z-10").children([
828
+ Box().className("w-4 h-4 rounded-full bg-emerald-500/10 flex items-center justify-center text-emerald-500 text-[10px]").children("✓").build(),
829
+ Text("6.25%").className("text-xs font-bold text-emerald-500").build(),
830
+ Text("last 24h").className("text-[10px] text-gray-600").build()
831
+ ]).build(),
832
+
833
+
834
+ Box().className("absolute bottom-0 left-0 right-0 h-32 opacity-80").children([
835
+
836
+ Box().className("absolute top-0 right-8 bg-[#151621] border border-white/10 px-3 py-1.5 rounded-lg text-[10px] font-bold text-white shadow-xl z-20").children("+$2,956").build(),
837
+
838
+ Box().className("w-full h-full").children(
839
+
840
+ Box().className("w-full h-full bg-gradient-to-t from-[#6366f1]/10 to-transparent rounded-t-[100%] scale-150 translate-y-10").build()
841
+ ).build()
842
+ ]).build()
843
+ ]).build(),
844
+
845
+
846
+ StakentCard({ className: "h-[380px] p-8 hover:border-amber-500/40 transition-all duration-500 group" }).children([
847
+ Box().className("absolute inset-0 bg-[radial-gradient(circle_at_50%_-20%,rgba(245,158,11,0.15),transparent_60%)] opacity-50").build(),
848
+
849
+ Row().className("justify-between mb-8 relative z-10").children([
850
+ Row().gap(4).className("items-center").children([
851
+ Box().className("w-12 h-12 rounded-2xl bg-[#1A1B23] border border-white/5 flex items-center justify-center shadow-inner").children(
852
+ Image().src("https://cryptologos.cc/logos/bnb-bnb-logo.png").className("w-6 h-6").build()
853
+ ).build(),
854
+ Column().children([
855
+ Text("PROOF OF STAKE").className("text-[9px] font-bold text-gray-500 tracking-[0.15em] mb-1").build(),
856
+ Text("BNB Chain").className("font-bold text-white text-lg").build()
857
+ ]).build()
858
+ ]).build(),
859
+ Box().className("w-10 h-10 rounded-full border border-white/10 flex items-center justify-center text-gray-500 -rotate-45 group-hover:bg-white group-hover:text-black transition-all duration-300").children("→").build()
860
+ ]).build(),
861
+
862
+ Text("Reward Rate").className("text-xs font-medium text-gray-500 mb-1 relative z-10").build(),
863
+ Text("12.72%").className("text-5xl font-bold text-white tracking-tight mb-3 relative z-10").build(),
864
+
865
+ Row().gap(2).className("items-center mb-10 relative z-10").children([
866
+ Box().className("w-4 h-4 rounded-full bg-emerald-500/10 flex items-center justify-center text-emerald-500 text-[10px]").children("✓").build(),
867
+ Text("5.67%").className("text-xs font-bold text-emerald-500").build(),
868
+ Text("last 24h").className("text-[10px] text-gray-600").build()
869
+ ]).build(),
870
+
871
+ Box().className("absolute bottom-0 left-0 right-0 h-32 opacity-80").children([
872
+ Box().className("absolute top-0 right-8 bg-[#151621] border border-white/10 px-3 py-1.5 rounded-lg text-[10px] font-bold text-white shadow-xl z-20").children("+$2,009").build(),
873
+ Box().className("w-full h-full bg-gradient-to-t from-amber-500/10 to-transparent rounded-t-[100%] scale-150 translate-y-10").build()
874
+ ]).build()
875
+ ]).build(),
876
+
877
+
878
+ StakentCard({ className: "h-[380px] p-0 text-center flex flex-col items-center justify-center relative overflow-hidden group bg-[#151621]" }).children([
879
+ Box().className("absolute inset-0 bg-[#151621]").build(),
880
+ Box().className("absolute top-0 right-0 w-[400px] h-[400px] bg-[#6366f1]/20 blur-[100px] rounded-full -translate-y-1/2 translate-x-1/2").build(),
881
+ Box().className("absolute bottom-0 left-0 w-[300px] h-[300px] bg-purple-500/20 blur-[80px] rounded-full translate-y-1/2 -translate-x-1/2").build(),
882
+
883
+ Box().className("absolute top-6 right-6 z-20").children(
884
+ StakentBadge({ text: "New", type: "new" })
885
+ ).build(),
886
+
887
+ Column().className("p-8 h-full w-full justify-between z-10 relative").children([
888
+ Row().gap(2).className("items-center mb-8 justify-center opacity-70").children([
889
+ Text("Stakent").className("font-bold text-white text-sm tracking-tight").build(),
890
+ Box().className("w-1 h-1 rounded-full bg-white/50").build(),
891
+ Text("Liquid Staking").className("text-xs text-gray-400").build()
892
+ ]).build(),
893
+
894
+ Column().className("items-center mt-2").children([
895
+ Text("Liquid Staking Portfolio").className("font-bold text-white text-3xl mb-4 tracking-tight leading-none").build(),
896
+ Text("An all-in-one portfolio that helps you make smarter investments.").className("text-sm text-gray-400 leading-relaxed font-medium max-w-[260px]").build(),
897
+ ]).build(),
898
+
899
+ Column().gap(3).className("w-full mt-auto").children([
900
+ StakentButton({ text: "Connect with Wallet", variant: "gradient", className: "w-full py-3.5" }),
901
+ StakentButton({ text: "Enter a Wallet Address", variant: "secondary", icon: Box().className("i-heroicons-lock-closed w-3 h-3").build(), className: "w-full py-3 text-xs" })
902
+ ]).build()
903
+ ]).build()
904
+ ]).build()
905
+ ]).build(),
906
+
907
+
908
+ GridItem().colSpan(4).children([
909
+ StakentCard({ className: "p-8 h-full flex flex-col justify-center relative overflow-hidden" }).children([
910
+ Box().className("absolute top-0 right-0 w-32 h-32 bg-purple-500/10 rounded-full blur-3xl -translate-y-1/2 translate-x-1/2").build(),
911
+ Text("Investment Period").className("text-white font-bold text-lg mb-1 relative z-10").build(),
912
+ Text("Contribution Period (Month)").className("text-gray-500 text-xs mb-6 relative z-10").build(),
913
+
914
+
915
+ Box().className("relative h-1 bg-white/10 rounded-full w-full mb-2 z-10").children([
916
+ Box().className("absolute top-0 left-0 h-full w-3/4 bg-indigo-500 rounded-full").build(),
917
+ Box().className("absolute top-1/2 left-3/4 w-4 h-4 bg-white rounded-full border-2 border-indigo-500 transform -translate-x-1/2 -translate-y-1/2 shadow-[0_0_10px_rgba(99,102,241,0.5)]").build(),
918
+ ]).build(),
919
+
920
+ Row().className("justify-between text-[10px] text-gray-400 mt-2 relative z-10").children([
921
+ Text("Start").build(),
922
+ Text("6 Months").className("text-white font-bold").build()
923
+ ]).build()
924
+ ]).build()
925
+ ]).build()
926
+ ]).build(),
927
+
928
+
929
+ Box().height(40).build(),
930
+
931
+
932
+ StakentCard({ className: "p-10 mb-20" }).children([
933
+ Row().className("justify-between items-start mb-8").children([
934
+ Column().children([
935
+ Row().gap(4).className("items-center mb-2").children([
936
+ Text("Stake Avalanche (AVAX)").className("font-bold text-white text-2xl tracking-tight").build(),
937
+ StakentBadge({ text: "HOT", type: "hot" })
938
+ ]).build(),
939
+ Text("Last Update - 45 minutes ago").className("text-[10px] text-gray-500 font-bold uppercase tracking-wide flex items-center gap-2").children([
940
+ Box().className("w-1.5 h-1.5 rounded-full bg-gray-600").build(),
941
+ "Last Update - 45 minutes ago"
942
+ ]).build()
943
+ ]).build(),
944
+
945
+ StakentButton({ text: "View Profile", variant: "outline", icon: Box().className("i-heroicons-arrow-up-right w-3 h-3").build(), className: "text-xs h-9 px-4 rounded-lg" })
946
+ ]).build(),
947
+
948
+ Grid().columns({ sm: 1, md: 2 }).gap("xl").children([
949
+
950
+ Column().className("justify-between").children([
951
+ Box().className("mb-10").children([
952
+ Text("Current Reward Balance, AVAX").className("text-xs text-gray-500 font-bold uppercase tracking-wider mb-2").build(),
953
+ Row().className("items-baseline gap-4").children([
954
+ Text("31.39686").className("text-7xl font-extrabold text-white tracking-tighter").build(),
955
+ Text("AVAX").className("text-2xl text-gray-600 font-bold").build()
956
+ ]).build(),
957
+ ]).build(),
958
+
959
+ Row().gap(4).children([
960
+ StakentButton({ text: "Upgrade", variant: "gradient", className: "px-8 py-3 w-40" }),
961
+ StakentButton({ text: "Unstake", variant: "secondary", className: "px-8 py-3 w-40" }),
962
+ ]).build(),
963
+
964
+ Grid().columns(3).gap("lg").className("mt-12 pt-8 border-t border-white/5").children([
965
+ Column().children([
966
+ Text("Momentum").className("text-xs text-white font-bold mb-1").build(),
967
+ Text("Growth dynamics").className("text-[10px] text-gray-500").build()
968
+ ]).build(),
969
+ Column().children([
970
+ Text("General").className("text-xs text-white font-bold mb-1").build(),
971
+ Text("Overview").className("text-[10px] text-gray-500").build()
972
+ ]).build(),
973
+ Column().children([
974
+ Text("Risk").className("text-xs text-white font-bold mb-1").build(),
975
+ Text("Low Risk").className("text-[10px] text-emerald-500 font-bold uppercase").build()
976
+ ]).build(),
977
+ ]).build()
978
+ ]).build(),
979
+
980
+
981
+
982
+ Box().className("bg-[#1A1B23] border border-white/5 rounded-3xl p-8 relative overflow-hidden").children([
983
+
984
+ Row().justifyContent("between").alignItems("center").className("mb-12").children([
985
+ Column().children([
986
+ Text("Investment Period").className("text-lg font-bold text-white mb-1").build(),
987
+ Text("Contribution Period (Month)").className("text-xs text-gray-500").build(),
988
+ ]).build(),
989
+ Box().className("bg-[#2A2B36] px-3 py-1 rounded-lg text-xs font-bold text-gray-400").children("6 Month").build()
990
+ ]).build(),
991
+
992
+
993
+ Box().className("relative h-2 bg-[#0B0C15] rounded-full mb-8").children([
994
+ Box().className("absolute left-0 top-0 bottom-0 w-[60%] bg-[#6366f1] rounded-full shadow-[0_0_15px_#6366f1]").build(),
995
+ Box().className("absolute left-[60%] top-1/2 -translate-y-1/2 w-6 h-6 bg-white rounded-full border-4 border-[#1A1B23] shadow-lg cursor-pointer").build(),
996
+
997
+ Box().className("absolute left-[60%] -top-10 -translate-x-1/2 bg-[#2A2B36] text-white text-[10px] font-bold px-2 py-1 rounded").children("4 Month").build()
998
+ ]).build(),
999
+
1000
+
1001
+ Row().justifyContent("between").className("border-t border-white/5 pt-6 mt-auto").children([
1002
+ Column().children([
1003
+ Text("Reward").className("text-xs text-gray-400 mb-1").build(),
1004
+ Text("Expected profit").className("text-[10px] text-gray-600").build()
1005
+ ]).build(),
1006
+ Column().crossAxisAlignment("end").children([
1007
+ Text("Reward Rate").className("text-xs text-gray-400 mb-1").build(),
1008
+ Text("2.23%").className("text-white font-bold text-sm").children([
1009
+ Text(" 24h Ago").className("text-[10px] text-gray-500 font-normal").build()
1010
+ ]).build()
1011
+ ]).build()
1012
+ ]).build()
1013
+
1014
+ ]).build()
1015
+ ]).build()
1016
+ ]).build(),
1017
+
1018
+
1019
+ Box().height(100).build()
1020
+
1021
+ ]).build()
1022
+ ]).build()
1023
+
1024
+ ]).build()
1025
+ ]).build(),
1026
+
1027
+
1028
+ ]).build()
1029
+
1030
+ ]).build()
1031
+ );
1032
+ };
1033
+
1034
+ const App = () => (
1035
+ <FiboThemeProvider>
1036
+ <Gallery />
1037
+ </FiboThemeProvider>
1038
+ );
1039
+
1040
+ const container = document.getElementById('root');
1041
+ if (container) {
1042
+
1043
+ const root = window._reactRoot || (window._reactRoot = createRoot(container));
1044
+ root.render(<App />);
1045
+ }