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
@@ -0,0 +1,301 @@
1
+ import React, { ReactElement } from 'react';
2
+ import { FiboBuilder, createBuilder } from '../../../core/builder';
3
+ import { Card } from '../../Card';
4
+ import { Text } from '../../../content/Text';
5
+ import { Box } from '../../Box';
6
+ import { Button } from '../../../interactive/Button';
7
+ import { Switch } from '../../../interactive/Switch';
8
+ import { TextField } from '../../../interactive/TextField';
9
+ import { Badge } from '../../../content/Badge';
10
+
11
+
12
+
13
+
14
+ const InfoCardInner = React.memo((props: any) => {
15
+ const { title, description, icon, footer, className, style } = props;
16
+
17
+ return Card()
18
+ .className(className)
19
+ .style(style)
20
+ .children([
21
+ Box().className("flex items-start gap-4").children([
22
+ icon ? Box().className("mt-1 text-gray-400").children(icon).build() : null,
23
+ Box().className("flex-1").children([
24
+ title ? Text(title).fontSize(16).fontWeight(600).color("#111827").build() : null,
25
+ description ? Text(description).fontSize(14).color("#6B7280").className("mt-1").build() : null,
26
+ footer ? Box().className("mt-4").children(footer).build() : null
27
+ ]).build()
28
+ ]).build()
29
+ ]).build();
30
+ });
31
+
32
+ class InfoCardBuilder extends FiboBuilder {
33
+ private _title?: string;
34
+ private _description?: string;
35
+ private _icon?: ReactElement;
36
+ private _footer?: ReactElement;
37
+
38
+ title(text: string): this {
39
+ this._title = text;
40
+ return this;
41
+ }
42
+
43
+ description(text: string): this {
44
+ this._description = text;
45
+ return this;
46
+ }
47
+
48
+ icon(element: ReactElement): this {
49
+ this._icon = element;
50
+ return this;
51
+ }
52
+
53
+ footer(element: ReactElement): this {
54
+ this._footer = element;
55
+ return this;
56
+ }
57
+
58
+ build(): ReactElement {
59
+ const props = {
60
+ title: this._title,
61
+ description: this._description,
62
+ icon: this._icon,
63
+ footer: this._footer,
64
+ className: this.getClassName(),
65
+ style: this.getStyle(),
66
+ ...this._props
67
+ };
68
+ return React.createElement(InfoCardInner, props);
69
+ }
70
+ }
71
+
72
+
73
+
74
+
75
+ const ActionCardInner = React.memo((props: any) => {
76
+ const { title, description, action, actionType, onAction, actionLabel, className, style } = props;
77
+
78
+ let ActionElement = action;
79
+
80
+ if (!ActionElement) {
81
+ if (actionType === 'button') {
82
+ ActionElement = Button(actionLabel || 'Action').variant("soft").size("sm").onPress(onAction).build();
83
+ } else if (actionType === 'switch') {
84
+
85
+ ActionElement = Switch().onChange(onAction).build();
86
+ }
87
+ }
88
+
89
+ return Card()
90
+ .className(`flex items-center justify-between gap-4 ${className || ''}`)
91
+ .style(style)
92
+ .children([
93
+ Box().className("flex-1").children([
94
+ title ? Text(title).fontSize(16).fontWeight(600).color("#111827").build() : null,
95
+ description ? Text(description).fontSize(14).color("#6B7280").className("mt-1").build() : null,
96
+ ]).build(),
97
+ ActionElement ? Box().className("flex-shrink-0").children(ActionElement).build() : null
98
+ ]).build();
99
+ });
100
+
101
+ class ActionCardBuilder extends FiboBuilder {
102
+ private _title?: string;
103
+ private _description?: string;
104
+ private _action?: ReactElement;
105
+ private _actionType?: 'button' | 'switch';
106
+ private _actionLabel?: string;
107
+ private _onAction?: (val?: any) => void;
108
+
109
+ title(text: string): this {
110
+ this._title = text;
111
+ return this;
112
+ }
113
+
114
+ description(text: string): this {
115
+ this._description = text;
116
+ return this;
117
+ }
118
+
119
+ action(element: ReactElement): this {
120
+ this._action = element;
121
+ return this;
122
+ }
123
+
124
+ withButton(label: string, onPress?: () => void): this {
125
+ this._actionType = 'button';
126
+ this._actionLabel = label;
127
+ this._onAction = onPress;
128
+ return this;
129
+ }
130
+
131
+ withSwitch(onChange?: (val: boolean) => void): this {
132
+ this._actionType = 'switch';
133
+ this._onAction = onChange;
134
+ return this;
135
+ }
136
+
137
+ build(): ReactElement {
138
+ const props = {
139
+ title: this._title,
140
+ description: this._description,
141
+ action: this._action,
142
+ actionType: this._actionType,
143
+ actionLabel: this._actionLabel,
144
+ onAction: this._onAction,
145
+ className: this.getClassName(),
146
+ style: this.getStyle(),
147
+ ...this._props
148
+ };
149
+ return React.createElement(ActionCardInner, props);
150
+ }
151
+ }
152
+
153
+
154
+ export const InfoCard = createBuilder(InfoCardBuilder);
155
+
156
+ export const ActionCard = createBuilder(ActionCardBuilder);
157
+
158
+
159
+
160
+
161
+ const InputCardInner = React.memo((props: any) => {
162
+ const { title, description, placeholder, value, onChange, type, className, style } = props;
163
+
164
+ return Card()
165
+ .className(className)
166
+ .style(style)
167
+ .children([
168
+ title ? Text(title).fontSize(14).fontWeight(600).color("#374151").className("mb-1").build() : null,
169
+ description ? Text(description).fontSize(12).color("#6B7280").className("mb-3").build() : null,
170
+ TextField()
171
+ .placeholder(placeholder)
172
+ .value(value)
173
+ .type(type)
174
+ .onChange(onChange)
175
+ .className("w-full")
176
+ .build()
177
+ ]).build();
178
+ });
179
+
180
+ class InputCardBuilder extends FiboBuilder {
181
+ private _title?: string;
182
+ private _description?: string;
183
+ private _placeholder?: string;
184
+ private _value?: string;
185
+ private _type: string = 'text';
186
+ private _onChange?: (val: string) => void;
187
+
188
+ title(text: string): this {
189
+ this._title = text;
190
+ return this;
191
+ }
192
+
193
+ description(text: string): this {
194
+ this._description = text;
195
+ return this;
196
+ }
197
+
198
+ placeholder(text: string): this {
199
+ this._placeholder = text;
200
+ return this;
201
+ }
202
+
203
+ value(text: string): this {
204
+ this._value = text;
205
+ return this;
206
+ }
207
+
208
+ type(t: string): this {
209
+ this._type = t;
210
+ return this;
211
+ }
212
+
213
+ onChange(cb: (val: string) => void): this {
214
+ this._onChange = cb;
215
+ return this;
216
+ }
217
+
218
+ build(): ReactElement {
219
+ const props = {
220
+ title: this._title,
221
+ description: this._description,
222
+ placeholder: this._placeholder,
223
+ value: this._value,
224
+ type: this._type,
225
+ onChange: this._onChange,
226
+ className: this.getClassName(),
227
+ style: this.getStyle(),
228
+ ...this._props
229
+ };
230
+ return React.createElement(InputCardInner, props);
231
+ }
232
+ }
233
+
234
+
235
+ export const InputCard = createBuilder(InputCardBuilder);
236
+
237
+
238
+
239
+
240
+
241
+ const MetricCardInner = React.memo((props: any) => {
242
+ const { title, value, trend, trendDirection, className, style } = props;
243
+
244
+ const trendColor = trendDirection === 'up' ? 'success' : trendDirection === 'down' ? 'error' : 'none';
245
+ const trendIcon = trendDirection === 'up' ? '↑' : trendDirection === 'down' ? '↓' : '•';
246
+
247
+ return Card()
248
+ .className(className)
249
+ .style(style)
250
+ .children([
251
+ Text(title).fontSize(14).fontWeight(600).color("#6B7280").build(),
252
+ Box().className("flex items-end justify-between mt-2").children([
253
+ Text(value).fontSize(32).fontWeight(800).color("#111827").build(),
254
+ trend ? Badge()
255
+ .text(`${trendIcon} ${trend}`)
256
+ .intent(trendColor)
257
+ .variant("accent")
258
+ .build() : null
259
+ ]).build()
260
+ ]).build();
261
+ });
262
+
263
+ class MetricCardBuilder extends FiboBuilder {
264
+ private _title: string = '';
265
+ private _value: string = '';
266
+ private _trend?: string;
267
+ private _trendDirection: 'up' | 'down' | 'neutral' = 'neutral';
268
+
269
+ title(text: string): this {
270
+ this._title = text;
271
+ return this;
272
+ }
273
+
274
+ value(text: string): this {
275
+ this._value = text;
276
+ return this;
277
+ }
278
+
279
+ trend(text: string, direction: 'up' | 'down' | 'neutral' = 'neutral'): this {
280
+ this._trend = text;
281
+ this._trendDirection = direction;
282
+ return this;
283
+ }
284
+
285
+ build(): ReactElement {
286
+ const props = {
287
+ title: this._title,
288
+ value: this._value,
289
+ trend: this._trend,
290
+ trendDirection: this._trendDirection,
291
+ className: this.getClassName(),
292
+ style: this.getStyle(),
293
+ ...this._props
294
+ };
295
+ return React.createElement(MetricCardInner, props);
296
+ }
297
+ }
298
+
299
+
300
+ export const MetricCard = createBuilder(MetricCardBuilder);
301
+
@@ -0,0 +1,10 @@
1
+ export * from './Box';
2
+ export * from './Card';
3
+ export * from './List';
4
+ export * from './Table';
5
+ export * from './Tags';
6
+ export * from './Banner';
7
+ export * from './cards';
8
+ export * from './Collapse';
9
+
10
+ export * from './Grid';
@@ -0,0 +1,186 @@
1
+ @import './core.css';
2
+ @import './themes/material.css';
3
+ @import './themes/cupertino.css';
4
+ @import './themes/web.css';
5
+
6
+ @tailwind base;
7
+ @tailwind components;
8
+ @tailwind utilities;
9
+
10
+ :root {
11
+ --fibo-theme: 'material';
12
+ }
13
+
14
+
15
+ .fibo-theme-material {
16
+
17
+ --fibo-primary: #1976d2;
18
+ --fibo-on-primary: #FFFFFF;
19
+ --fibo-primary-container: #bbdefb;
20
+ --fibo-on-primary-container: #1976d2;
21
+
22
+ --fibo-secondary: #9c27b0;
23
+ --fibo-on-secondary: #FFFFFF;
24
+
25
+ --fibo-tertiary: #7D5260;
26
+ --fibo-on-tertiary: #FFFFFF;
27
+
28
+ --fibo-error: #d32f2f;
29
+ --fibo-on-error: #FFFFFF;
30
+
31
+ --fibo-background: #FFFFFF;
32
+ --fibo-on-background: rgba(0, 0, 0, 0.87);
33
+
34
+ --fibo-surface: #FFFFFF;
35
+ --fibo-on-surface: rgba(0, 0, 0, 0.87);
36
+ --fibo-surface-variant: #f5f5f5;
37
+ --fibo-on-surface-variant: rgba(0, 0, 0, 0.6);
38
+
39
+ --fibo-outline: rgba(0, 0, 0, 0.12);
40
+
41
+
42
+ --fibo-font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;
43
+
44
+
45
+ --fibo-spacing-xs: 4px;
46
+ --fibo-spacing-sm: 8px;
47
+ --fibo-spacing-md: 16px;
48
+ --fibo-spacing-lg: 24px;
49
+ --fibo-spacing-xl: 32px;
50
+
51
+
52
+ --fibo-radius-none: 0px;
53
+ --fibo-radius-xs: 2px;
54
+ --fibo-radius-sm: 4px;
55
+ --fibo-radius-md: 8px;
56
+ --fibo-radius-lg: 12px;
57
+ --fibo-radius-xl: 16px;
58
+ --fibo-radius-full: 9999px;
59
+
60
+
61
+ --fibo-elevation-0: none;
62
+ --fibo-elevation-1: 0px 2px 1px -1px rgba(0,0,0,0.2), 0px 1px 1px 0px rgba(0,0,0,0.14), 0px 1px 3px 0px rgba(0,0,0,0.12);
63
+ --fibo-elevation-2: 0px 3px 1px -2px rgba(0,0,0,0.2), 0px 2px 2px 0px rgba(0,0,0,0.14), 0px 1px 5px 0px rgba(0,0,0,0.12);
64
+ --fibo-elevation-3: 0px 3px 3px -2px rgba(0,0,0,0.2), 0px 3px 4px 0px rgba(0,0,0,0.14), 0px 1px 8px 0px rgba(0,0,0,0.12);
65
+ --fibo-elevation-4: 0px 5px 5px -3px rgba(0,0,0,0.2), 0px 8px 10px 1px rgba(0,0,0,0.14), 0px 3px 14px 2px rgba(0,0,0,0.12);
66
+
67
+ --fibo-border-width: 1px;
68
+ --fibo-border-color: rgba(0, 0, 0, 0.12);
69
+
70
+ --fibo-transition-fast: 250ms cubic-bezier(0.4, 0, 0.2, 1);
71
+ --fibo-transition-normal: 300ms cubic-bezier(0.4, 0, 0.2, 1);
72
+ }
73
+
74
+
75
+ .fibo-theme-cupertino {
76
+
77
+ --fibo-primary: #007AFF;
78
+ --fibo-on-primary: #FFFFFF;
79
+ --fibo-primary-container: rgba(0, 122, 255, 0.15);
80
+ --fibo-on-primary-container: #007AFF;
81
+
82
+ --fibo-secondary: #5856D6;
83
+ --fibo-on-secondary: #FFFFFF;
84
+
85
+ --fibo-background: #F2F2F7;
86
+ --fibo-on-background: #000000;
87
+
88
+ --fibo-surface: #FFFFFF;
89
+ --fibo-on-surface: #000000;
90
+ --fibo-surface-variant: #E5E5EA;
91
+ --fibo-on-surface-variant: #8E8E93;
92
+
93
+ --fibo-error: #FF3B30;
94
+ --fibo-on-error: #FFFFFF;
95
+
96
+ --fibo-outline: #C7C7CC;
97
+
98
+
99
+ --fibo-font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'SF Pro Display', sans-serif;
100
+
101
+
102
+ --fibo-spacing-xs: 4px;
103
+ --fibo-spacing-sm: 8px;
104
+ --fibo-spacing-md: 16px;
105
+ --fibo-spacing-lg: 20px;
106
+ --fibo-spacing-xl: 32px;
107
+
108
+
109
+ --fibo-radius-none: 0px;
110
+ --fibo-radius-xs: 4px;
111
+ --fibo-radius-sm: 8px;
112
+ --fibo-radius-md: 10px;
113
+ --fibo-radius-lg: 16px;
114
+ --fibo-radius-xl: 20px;
115
+ --fibo-radius-full: 9999px;
116
+
117
+
118
+ --fibo-elevation-0: none;
119
+ --fibo-elevation-1: 0 1px 2px rgba(0,0,0,0.05);
120
+ --fibo-elevation-2: 0 4px 12px rgba(0,0,0,0.08);
121
+ --fibo-elevation-3: 0 8px 24px rgba(0,0,0,0.12);
122
+ --fibo-elevation-4: 0 12px 32px rgba(0,0,0,0.14);
123
+
124
+ --fibo-border-width: 0.5px;
125
+ --fibo-border-color: rgba(60, 60, 67, 0.29);
126
+
127
+ --fibo-transition-fast: 250ms cubic-bezier(0.25, 0.1, 0.25, 1);
128
+ --fibo-transition-normal: 400ms cubic-bezier(0.25, 0.1, 0.25, 1);
129
+ }
130
+
131
+
132
+ .fibo-theme-web {
133
+
134
+ --fibo-primary: #3B82F6;
135
+ --fibo-on-primary: #FFFFFF;
136
+ --fibo-primary-container: #DBEAFE;
137
+ --fibo-on-primary-container: #1E40AF;
138
+
139
+ --fibo-secondary: #64748B;
140
+ --fibo-on-secondary: #FFFFFF;
141
+
142
+ --fibo-background: #F8FAFC;
143
+ --fibo-on-background: #0F172A;
144
+
145
+ --fibo-surface: #FFFFFF;
146
+ --fibo-on-surface: #0F172A;
147
+ --fibo-surface-variant: #F1F5F9;
148
+ --fibo-on-surface-variant: #64748B;
149
+
150
+ --fibo-error: #EF4444;
151
+ --fibo-on-error: #FFFFFF;
152
+
153
+ --fibo-outline: #E2E8F0;
154
+
155
+
156
+ --fibo-font-family: 'Inter', system-ui, sans-serif;
157
+
158
+
159
+ --fibo-radius-none: 0px;
160
+ --fibo-radius-xs: 2px;
161
+ --fibo-radius-sm: 4px;
162
+ --fibo-radius-md: 6px;
163
+ --fibo-radius-lg: 8px;
164
+ --fibo-radius-xl: 12px;
165
+ --fibo-radius-full: 9999px;
166
+
167
+
168
+ --fibo-elevation-0: none;
169
+ --fibo-elevation-1: 0 1px 2px 0 rgb(0 0 0 / 0.05);
170
+ --fibo-elevation-2: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
171
+ --fibo-elevation-3: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
172
+ --fibo-elevation-4: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
173
+
174
+ --fibo-border-width: 1px;
175
+ --fibo-border-color: #E2E8F0;
176
+
177
+ --fibo-transition-fast: 150ms ease-out;
178
+ --fibo-transition-normal: 300ms ease-out;
179
+ }
180
+
181
+ body {
182
+ font-family: var(--fibo-font-family);
183
+ background-color: var(--fibo-background);
184
+ color: var(--fibo-on-background);
185
+ transition: background-color var(--fibo-transition-normal), color var(--fibo-transition-normal);
186
+ }
@@ -0,0 +1,52 @@
1
+
2
+
3
+
4
+ *, *::before, *::after {
5
+ box-sizing: border-box;
6
+ margin: 0;
7
+ padding: 0;
8
+ }
9
+
10
+ body {
11
+ margin: 0;
12
+ -webkit-font-smoothing: antialiased;
13
+ -moz-osx-font-smoothing: grayscale;
14
+ line-height: 1.5;
15
+ }
16
+
17
+
18
+ .fibo-clickable {
19
+ cursor: pointer;
20
+ user-select: none;
21
+ -webkit-tap-highlight-color: transparent;
22
+ }
23
+
24
+ .fibo-flex-center {
25
+ display: flex;
26
+ align-items: center;
27
+ justify-content: center;
28
+ }
29
+
30
+ .fibo-full-width {
31
+ width: 100%;
32
+ }
33
+
34
+
35
+ @keyframes fibo-ripple-anim {
36
+ to {
37
+ transform: scale(4);
38
+ opacity: 0;
39
+ }
40
+ }
41
+
42
+ .fibo-ripple-container {
43
+ position: absolute;
44
+ top: 0;
45
+ left: 0;
46
+ width: 100%;
47
+ height: 100%;
48
+ overflow: hidden;
49
+ border-radius: inherit;
50
+ pointer-events: none;
51
+ z-index: 0;
52
+ }