@proyecto-viviana/ui 0.1.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/alert/index.d.ts +12 -0
- package/dist/alert/index.d.ts.map +1 -0
- package/dist/avatar/index.d.ts +17 -0
- package/dist/avatar/index.d.ts.map +1 -0
- package/dist/badge/index.d.ts +12 -0
- package/dist/badge/index.d.ts.map +1 -0
- package/dist/button/Button.d.ts +19 -0
- package/dist/button/Button.d.ts.map +1 -0
- package/dist/button/index.d.ts +3 -0
- package/dist/button/index.d.ts.map +1 -0
- package/dist/button/types.d.ts +23 -0
- package/dist/button/types.d.ts.map +1 -0
- package/dist/checkbox/index.d.ts +43 -0
- package/dist/checkbox/index.d.ts.map +1 -0
- package/dist/components.css +975 -0
- package/dist/custom/calendar-card/index.d.ts +12 -0
- package/dist/custom/calendar-card/index.d.ts.map +1 -0
- package/dist/custom/chip/index.d.ts +11 -0
- package/dist/custom/chip/index.d.ts.map +1 -0
- package/dist/custom/conversation/index.d.ts +32 -0
- package/dist/custom/conversation/index.d.ts.map +1 -0
- package/dist/custom/event-card/index.d.ts +26 -0
- package/dist/custom/event-card/index.d.ts.map +1 -0
- package/dist/custom/lateral-nav/index.d.ts +32 -0
- package/dist/custom/lateral-nav/index.d.ts.map +1 -0
- package/dist/custom/logo/index.d.ts +26 -0
- package/dist/custom/logo/index.d.ts.map +1 -0
- package/dist/custom/nav-header/index.d.ts +12 -0
- package/dist/custom/nav-header/index.d.ts.map +1 -0
- package/dist/custom/page-layout/index.d.ts +11 -0
- package/dist/custom/page-layout/index.d.ts.map +1 -0
- package/dist/custom/profile-card/index.d.ts +12 -0
- package/dist/custom/profile-card/index.d.ts.map +1 -0
- package/dist/custom/project-card/index.d.ts +24 -0
- package/dist/custom/project-card/index.d.ts.map +1 -0
- package/dist/custom/timeline-item/index.d.ts +18 -0
- package/dist/custom/timeline-item/index.d.ts.map +1 -0
- package/dist/dialog/index.d.ts +18 -0
- package/dist/dialog/index.d.ts.map +1 -0
- package/dist/icon/icons/GitHubIcon.d.ts +7 -0
- package/dist/icon/icons/GitHubIcon.d.ts.map +1 -0
- package/dist/icon/index.d.ts +28 -0
- package/dist/icon/index.d.ts.map +1 -0
- package/dist/index.d.ts +51 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1988 -0
- package/dist/index.js.map +1 -0
- package/dist/link/index.d.ts +39 -0
- package/dist/link/index.d.ts.map +1 -0
- package/dist/progress-bar/index.d.ts +49 -0
- package/dist/progress-bar/index.d.ts.map +1 -0
- package/dist/radio/index.d.ts +43 -0
- package/dist/radio/index.d.ts.map +1 -0
- package/dist/separator/index.d.ts +42 -0
- package/dist/separator/index.d.ts.map +1 -0
- package/dist/styles.css +450 -0
- package/dist/switch/ToggleSwitch.d.ts +28 -0
- package/dist/switch/ToggleSwitch.d.ts.map +1 -0
- package/dist/switch/index.d.ts +26 -0
- package/dist/switch/index.d.ts.map +1 -0
- package/dist/test-utils/index.d.ts +44 -0
- package/dist/test-utils/index.d.ts.map +1 -0
- package/dist/textfield/index.d.ts +31 -0
- package/dist/textfield/index.d.ts.map +1 -0
- package/dist/theme.css +101 -0
- package/dist/tooltip/index.d.ts +17 -0
- package/dist/tooltip/index.d.ts.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/separator/index.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,GAAG,EAAgC,MAAM,UAAU,CAAC;AAClE,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAMhF,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC/D,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE/C,MAAM,WAAW,cAAc;IAC7B,8DAA8D;IAC9D,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,mDAAmD;IACnD,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,yDAAyD;IACzD,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA4BD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,GAAG,CAAC,OAAO,CAkE5D"}
|
package/dist/styles.css
ADDED
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Viviana UI Complete Styles (Theme + Components)
|
|
3
|
+
*
|
|
4
|
+
* WARNING: This file contains @theme which cannot be @imported in Tailwind v4.
|
|
5
|
+
* Use components.css instead and copy the @theme block from theme.css.
|
|
6
|
+
*
|
|
7
|
+
* For proper usage, see theme.css documentation.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/* ===== THEME ===== */
|
|
11
|
+
@theme {
|
|
12
|
+
/* Breakpoints */
|
|
13
|
+
--breakpoint-xxs: 320px;
|
|
14
|
+
--breakpoint-xs: 475px;
|
|
15
|
+
|
|
16
|
+
/* Background - Dark blue-gray */
|
|
17
|
+
--color-bg-100: #3B5260;
|
|
18
|
+
--color-bg-200: #293E4B;
|
|
19
|
+
--color-bg-300: #24313a;
|
|
20
|
+
--color-bg-400: #1D272E;
|
|
21
|
+
--color-bg-light: #515151;
|
|
22
|
+
|
|
23
|
+
/* Accent - Pink */
|
|
24
|
+
--color-accent: #DF5C9A;
|
|
25
|
+
--color-accent-200: #FFB2D7;
|
|
26
|
+
--color-accent-300: #FF88C0;
|
|
27
|
+
--color-accent-500: #DF5C9A;
|
|
28
|
+
--color-accent-highlight: #e2a2be;
|
|
29
|
+
|
|
30
|
+
/* Primary - Cyan/Blue */
|
|
31
|
+
--color-primary-100: #D9F2FF;
|
|
32
|
+
--color-primary-200: #D0E9F5;
|
|
33
|
+
--color-primary-300: #ADCCDC;
|
|
34
|
+
--color-primary-400: #B8DFFF;
|
|
35
|
+
--color-primary-500: #75ABC7;
|
|
36
|
+
--color-primary-600: #58748B;
|
|
37
|
+
--color-primary-700: #4F6D85;
|
|
38
|
+
--color-primary-800: #4C6477;
|
|
39
|
+
|
|
40
|
+
/* Success - Green */
|
|
41
|
+
--color-success-100: #E5FFF3;
|
|
42
|
+
--color-success-400: #C2FFC8;
|
|
43
|
+
--color-success-600: #559D87;
|
|
44
|
+
|
|
45
|
+
/* Warning - Yellow */
|
|
46
|
+
--color-warning-100: #FFFBE5;
|
|
47
|
+
--color-warning-400: #FFDD87;
|
|
48
|
+
--color-warning-600: #9D8D55;
|
|
49
|
+
|
|
50
|
+
/* Danger - Red */
|
|
51
|
+
--color-danger-100: #FFE5E5;
|
|
52
|
+
--color-danger-400: #FF8787;
|
|
53
|
+
--color-danger-600: #9D5555;
|
|
54
|
+
|
|
55
|
+
/* Cards */
|
|
56
|
+
--color-cards-bg: #373737;
|
|
57
|
+
--color-cards-bg-load: #484848;
|
|
58
|
+
--color-correct: #83f1a7;
|
|
59
|
+
--color-incorrect: #e74c3c;
|
|
60
|
+
|
|
61
|
+
/* Typography */
|
|
62
|
+
--font-sen: 'Sen', sans-serif;
|
|
63
|
+
--font-jost: 'Jost', sans-serif;
|
|
64
|
+
--font-sans: 'Sen', sans-serif;
|
|
65
|
+
--font-mono: 'JetBrains Mono', monospace;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/* ===== FONT UTILITIES ===== */
|
|
69
|
+
.font-sen {
|
|
70
|
+
font-family: 'Sen', sans-serif;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.font-jost {
|
|
74
|
+
font-family: 'Jost', sans-serif;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* ===== CUSTOM SHADOWS ===== */
|
|
78
|
+
.drop-shadow-title-card {
|
|
79
|
+
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.5);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.drop-shadow-logo {
|
|
83
|
+
filter: drop-shadow(0 0 10px rgba(223, 92, 154, 0.8));
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.shadow-primary-chip {
|
|
87
|
+
box-shadow: 0 2px 8px rgba(79, 109, 133, 0.4);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/* ===== BUTTON COMPONENT ===== */
|
|
91
|
+
.vui-button {
|
|
92
|
+
display: inline-flex;
|
|
93
|
+
align-items: center;
|
|
94
|
+
justify-content: center;
|
|
95
|
+
gap: 0.5rem;
|
|
96
|
+
padding: 0.5rem 1rem;
|
|
97
|
+
font-size: 1rem;
|
|
98
|
+
font-weight: 500;
|
|
99
|
+
border-radius: 0.5rem;
|
|
100
|
+
transition: all 0.2s ease;
|
|
101
|
+
cursor: pointer;
|
|
102
|
+
border: none;
|
|
103
|
+
outline: none;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.vui-button:focus-visible {
|
|
107
|
+
outline: none;
|
|
108
|
+
box-shadow: 0 0 0 2px var(--color-bg-400), 0 0 0 4px var(--color-accent-300);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.vui-button:disabled {
|
|
112
|
+
opacity: 0.5;
|
|
113
|
+
cursor: not-allowed;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.vui-button.is-pressed {
|
|
117
|
+
transform: scale(0.98);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/* Fill variants - pokeforos style */
|
|
121
|
+
/* Primary = Pink accent (main CTA) */
|
|
122
|
+
.vui-button--fill.vui-button--primary {
|
|
123
|
+
background: var(--color-accent);
|
|
124
|
+
color: white;
|
|
125
|
+
}
|
|
126
|
+
.vui-button--fill.vui-button--primary:hover:not(:disabled) {
|
|
127
|
+
background: var(--color-accent-300);
|
|
128
|
+
}
|
|
129
|
+
.vui-button--fill.vui-button--primary:active:not(:disabled) {
|
|
130
|
+
background: var(--color-accent-500);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/* Secondary = Cyan primary */
|
|
134
|
+
.vui-button--fill.vui-button--secondary {
|
|
135
|
+
background: var(--color-primary-500);
|
|
136
|
+
color: white;
|
|
137
|
+
}
|
|
138
|
+
.vui-button--fill.vui-button--secondary:hover:not(:disabled) {
|
|
139
|
+
background: var(--color-primary-400);
|
|
140
|
+
}
|
|
141
|
+
.vui-button--fill.vui-button--secondary:active:not(:disabled) {
|
|
142
|
+
background: var(--color-primary-600);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* Accent = Also pink (alias for primary look) */
|
|
146
|
+
.vui-button--fill.vui-button--accent {
|
|
147
|
+
background: var(--color-accent);
|
|
148
|
+
color: white;
|
|
149
|
+
}
|
|
150
|
+
.vui-button--fill.vui-button--accent:hover:not(:disabled) {
|
|
151
|
+
background: var(--color-accent-300);
|
|
152
|
+
}
|
|
153
|
+
.vui-button--fill.vui-button--accent:active:not(:disabled) {
|
|
154
|
+
background: var(--color-accent-500);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/* Negative = Danger red */
|
|
158
|
+
.vui-button--fill.vui-button--negative {
|
|
159
|
+
background: var(--color-danger-400);
|
|
160
|
+
color: white;
|
|
161
|
+
}
|
|
162
|
+
.vui-button--fill.vui-button--negative:hover:not(:disabled) {
|
|
163
|
+
background: var(--color-danger-600);
|
|
164
|
+
}
|
|
165
|
+
.vui-button--fill.vui-button--negative:active:not(:disabled) {
|
|
166
|
+
background: var(--color-danger-400);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/* Outline variants */
|
|
170
|
+
.vui-button--outline.vui-button--primary {
|
|
171
|
+
border: 2px solid var(--color-accent);
|
|
172
|
+
color: var(--color-accent-200);
|
|
173
|
+
background: transparent;
|
|
174
|
+
}
|
|
175
|
+
.vui-button--outline.vui-button--primary:hover:not(:disabled) {
|
|
176
|
+
background: color-mix(in srgb, var(--color-accent) 15%, transparent);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.vui-button--outline.vui-button--secondary {
|
|
180
|
+
border: 2px solid var(--color-primary-500);
|
|
181
|
+
color: var(--color-primary-300);
|
|
182
|
+
background: transparent;
|
|
183
|
+
}
|
|
184
|
+
.vui-button--outline.vui-button--secondary:hover:not(:disabled) {
|
|
185
|
+
background: color-mix(in srgb, var(--color-primary-500) 15%, transparent);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.vui-button--outline.vui-button--accent {
|
|
189
|
+
border: 2px solid var(--color-accent);
|
|
190
|
+
color: var(--color-accent-200);
|
|
191
|
+
background: transparent;
|
|
192
|
+
}
|
|
193
|
+
.vui-button--outline.vui-button--accent:hover:not(:disabled) {
|
|
194
|
+
background: color-mix(in srgb, var(--color-accent) 15%, transparent);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.vui-button--outline.vui-button--negative {
|
|
198
|
+
border: 2px solid var(--color-danger-400);
|
|
199
|
+
color: var(--color-danger-100);
|
|
200
|
+
background: transparent;
|
|
201
|
+
}
|
|
202
|
+
.vui-button--outline.vui-button--negative:hover:not(:disabled) {
|
|
203
|
+
background: color-mix(in srgb, var(--color-danger-400) 15%, transparent);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/* ===== CHIP COMPONENT ===== */
|
|
207
|
+
.vui-chip {
|
|
208
|
+
display: inline-flex;
|
|
209
|
+
align-items: center;
|
|
210
|
+
justify-content: center;
|
|
211
|
+
padding: 0.125rem 0.5rem;
|
|
212
|
+
font-size: 0.75rem;
|
|
213
|
+
font-weight: 600;
|
|
214
|
+
border-radius: 9999px;
|
|
215
|
+
text-transform: uppercase;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.vui-chip--primary {
|
|
219
|
+
background: var(--color-primary-700);
|
|
220
|
+
color: var(--color-primary-100);
|
|
221
|
+
box-shadow: 0 2px 8px rgba(79, 109, 133, 0.4);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.vui-chip--accent {
|
|
225
|
+
background: var(--color-accent);
|
|
226
|
+
color: white;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.vui-chip--success {
|
|
230
|
+
background: var(--color-success-600);
|
|
231
|
+
color: var(--color-success-100);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
.vui-chip--warning {
|
|
235
|
+
background: var(--color-warning-600);
|
|
236
|
+
color: var(--color-warning-100);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
.vui-chip--danger {
|
|
240
|
+
background: var(--color-danger-600);
|
|
241
|
+
color: var(--color-danger-100);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/* ===== BADGE COMPONENT ===== */
|
|
245
|
+
.vui-badge {
|
|
246
|
+
display: inline-flex;
|
|
247
|
+
align-items: center;
|
|
248
|
+
justify-content: center;
|
|
249
|
+
padding: 0.25rem 0.75rem;
|
|
250
|
+
font-size: 0.875rem;
|
|
251
|
+
font-weight: 500;
|
|
252
|
+
border-radius: 0.375rem;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.vui-badge--primary {
|
|
256
|
+
background: var(--color-primary-700);
|
|
257
|
+
color: var(--color-primary-100);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
.vui-badge--accent {
|
|
261
|
+
background: var(--color-accent);
|
|
262
|
+
color: white;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
.vui-badge--success {
|
|
266
|
+
background: var(--color-success-600);
|
|
267
|
+
color: var(--color-success-100);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
.vui-badge--warning {
|
|
271
|
+
background: var(--color-warning-600);
|
|
272
|
+
color: var(--color-warning-100);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
.vui-badge--danger {
|
|
276
|
+
background: var(--color-danger-600);
|
|
277
|
+
color: var(--color-danger-100);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/* ===== ALERT COMPONENT ===== */
|
|
281
|
+
.vui-alert {
|
|
282
|
+
display: flex;
|
|
283
|
+
align-items: flex-start;
|
|
284
|
+
gap: 0.75rem;
|
|
285
|
+
padding: 1rem;
|
|
286
|
+
border-radius: 0.5rem;
|
|
287
|
+
border-width: 1px;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
.vui-alert--info {
|
|
291
|
+
background: color-mix(in srgb, var(--color-primary-700) 20%, transparent);
|
|
292
|
+
border-color: var(--color-primary-600);
|
|
293
|
+
color: var(--color-primary-200);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
.vui-alert--success {
|
|
297
|
+
background: color-mix(in srgb, var(--color-success-600) 20%, transparent);
|
|
298
|
+
border-color: var(--color-success-600);
|
|
299
|
+
color: var(--color-success-100);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
.vui-alert--warning {
|
|
303
|
+
background: color-mix(in srgb, var(--color-warning-600) 20%, transparent);
|
|
304
|
+
border-color: var(--color-warning-600);
|
|
305
|
+
color: var(--color-warning-100);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
.vui-alert--error {
|
|
309
|
+
background: color-mix(in srgb, var(--color-danger-600) 20%, transparent);
|
|
310
|
+
border-color: var(--color-danger-400);
|
|
311
|
+
color: var(--color-danger-100);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
/* ===== AVATAR COMPONENT ===== */
|
|
315
|
+
.vui-avatar {
|
|
316
|
+
display: inline-flex;
|
|
317
|
+
align-items: center;
|
|
318
|
+
justify-content: center;
|
|
319
|
+
border-radius: 9999px;
|
|
320
|
+
overflow: hidden;
|
|
321
|
+
background: var(--color-bg-300);
|
|
322
|
+
color: var(--color-primary-300);
|
|
323
|
+
font-weight: 600;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
.vui-avatar--sm {
|
|
327
|
+
width: 2rem;
|
|
328
|
+
height: 2rem;
|
|
329
|
+
font-size: 0.75rem;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
.vui-avatar--md {
|
|
333
|
+
width: 2.5rem;
|
|
334
|
+
height: 2.5rem;
|
|
335
|
+
font-size: 0.875rem;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
.vui-avatar--lg {
|
|
339
|
+
width: 3rem;
|
|
340
|
+
height: 3rem;
|
|
341
|
+
font-size: 1rem;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
.vui-avatar--xl {
|
|
345
|
+
width: 4rem;
|
|
346
|
+
height: 4rem;
|
|
347
|
+
font-size: 1.25rem;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/* ===== CARD COMPONENT ===== */
|
|
351
|
+
.vui-card {
|
|
352
|
+
background: var(--color-bg-300);
|
|
353
|
+
border: 1px solid var(--color-primary-600);
|
|
354
|
+
border-radius: 0.75rem;
|
|
355
|
+
overflow: hidden;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
.vui-card--accent-border {
|
|
359
|
+
border-bottom-color: var(--color-accent-500);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/* ===== GRADIENTS ===== */
|
|
363
|
+
.hero-gradient {
|
|
364
|
+
background: linear-gradient(135deg, var(--color-bg-300) 0%, var(--color-bg-400) 100%);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
.gradient-text {
|
|
368
|
+
background: linear-gradient(135deg, var(--color-primary-300), var(--color-accent-300));
|
|
369
|
+
-webkit-background-clip: text;
|
|
370
|
+
-webkit-text-fill-color: transparent;
|
|
371
|
+
background-clip: text;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
/* ===== PROSE/DOCS ===== */
|
|
375
|
+
.prose {
|
|
376
|
+
max-width: 65ch;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
.prose h1 {
|
|
380
|
+
font-size: 2.25rem;
|
|
381
|
+
font-weight: 700;
|
|
382
|
+
margin-bottom: 1rem;
|
|
383
|
+
color: var(--color-primary-100);
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
.prose h2 {
|
|
387
|
+
font-size: 1.5rem;
|
|
388
|
+
font-weight: 600;
|
|
389
|
+
margin-top: 2rem;
|
|
390
|
+
margin-bottom: 0.75rem;
|
|
391
|
+
color: var(--color-primary-200);
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
.prose h3 {
|
|
395
|
+
font-size: 1.25rem;
|
|
396
|
+
font-weight: 600;
|
|
397
|
+
margin-top: 1.5rem;
|
|
398
|
+
margin-bottom: 0.5rem;
|
|
399
|
+
color: var(--color-primary-200);
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
.prose p {
|
|
403
|
+
margin-bottom: 1rem;
|
|
404
|
+
line-height: 1.75;
|
|
405
|
+
color: var(--color-primary-300);
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
.prose code {
|
|
409
|
+
background: var(--color-bg-300);
|
|
410
|
+
padding: 0.125rem 0.375rem;
|
|
411
|
+
border-radius: 0.25rem;
|
|
412
|
+
font-family: var(--font-mono);
|
|
413
|
+
font-size: 0.875em;
|
|
414
|
+
color: var(--color-accent-200);
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
.prose pre {
|
|
418
|
+
background: var(--color-bg-400);
|
|
419
|
+
color: var(--color-primary-100);
|
|
420
|
+
padding: 1rem;
|
|
421
|
+
border-radius: 0.5rem;
|
|
422
|
+
overflow-x: auto;
|
|
423
|
+
margin: 1rem 0;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
.prose pre code {
|
|
427
|
+
background: transparent;
|
|
428
|
+
padding: 0;
|
|
429
|
+
color: inherit;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
/* ===== SIDEBAR ===== */
|
|
433
|
+
.sidebar-link {
|
|
434
|
+
display: block;
|
|
435
|
+
padding: 0.5rem 1rem;
|
|
436
|
+
border-radius: 0.375rem;
|
|
437
|
+
color: var(--color-primary-300);
|
|
438
|
+
transition: all 0.15s;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
.sidebar-link:hover {
|
|
442
|
+
background: var(--color-bg-300);
|
|
443
|
+
color: var(--color-primary-100);
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
.sidebar-link.active {
|
|
447
|
+
background: var(--color-primary-700);
|
|
448
|
+
color: var(--color-primary-100);
|
|
449
|
+
font-weight: 500;
|
|
450
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ToggleSwitch component for proyecto-viviana-ui
|
|
3
|
+
*
|
|
4
|
+
* A styled switch component built on top of solidaria-components.
|
|
5
|
+
* This component only handles styling - all behavior and accessibility
|
|
6
|
+
* is provided by the headless Switch from solidaria-components.
|
|
7
|
+
*
|
|
8
|
+
* Named "ToggleSwitch" to avoid conflict with SolidJS's built-in Switch component.
|
|
9
|
+
*/
|
|
10
|
+
import { type JSX } from 'solid-js';
|
|
11
|
+
import { type ToggleSwitchProps as HeadlessToggleSwitchProps } from '@proyecto-viviana/solidaria-components';
|
|
12
|
+
export type SwitchSize = 'sm' | 'md' | 'lg';
|
|
13
|
+
export interface ToggleSwitchProps extends Omit<HeadlessToggleSwitchProps, 'class' | 'children'> {
|
|
14
|
+
/** The size of the switch. */
|
|
15
|
+
size?: SwitchSize;
|
|
16
|
+
/** Additional CSS class name. */
|
|
17
|
+
class?: string;
|
|
18
|
+
/** Label text for the switch. */
|
|
19
|
+
children?: JSX.Element;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* A switch allows users to toggle between two mutually exclusive states.
|
|
23
|
+
*
|
|
24
|
+
* Built on solidaria-components Switch for full accessibility support.
|
|
25
|
+
* Named "ToggleSwitch" to avoid conflict with SolidJS's built-in Switch component.
|
|
26
|
+
*/
|
|
27
|
+
export declare function ToggleSwitch(props: ToggleSwitchProps): JSX.Element;
|
|
28
|
+
//# sourceMappingURL=ToggleSwitch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToggleSwitch.d.ts","sourceRoot":"","sources":["../../src/switch/ToggleSwitch.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,GAAG,EAA6C,MAAM,UAAU,CAAC;AAC/E,OAAO,EAAwC,KAAK,iBAAiB,IAAI,yBAAyB,EAAgC,MAAM,wCAAwC,CAAC;AAMjL,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5C,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,yBAAyB,EAAE,OAAO,GAAG,UAAU,CAAC;IAC9F,8BAA8B;IAC9B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CACxB;AA4BD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,CAoDlE"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Switch components for proyecto-viviana-ui
|
|
3
|
+
*
|
|
4
|
+
* This file exports:
|
|
5
|
+
* - ToggleSwitch: The primary switch component built on solidaria-components
|
|
6
|
+
* (named to avoid conflict with SolidJS's built-in Switch)
|
|
7
|
+
* - TabSwitch: A custom two-option tab selector
|
|
8
|
+
*/
|
|
9
|
+
import { type JSX } from 'solid-js';
|
|
10
|
+
export { ToggleSwitch, type ToggleSwitchProps, type SwitchSize } from './ToggleSwitch';
|
|
11
|
+
interface SwitchOption {
|
|
12
|
+
label: string;
|
|
13
|
+
value: string;
|
|
14
|
+
}
|
|
15
|
+
export interface TabSwitchProps {
|
|
16
|
+
options: SwitchOption[];
|
|
17
|
+
value?: string;
|
|
18
|
+
onChange?: (value: string) => void;
|
|
19
|
+
class?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* A tab-style switch that allows users to select between two options.
|
|
23
|
+
* This is a custom component, not based on solidaria/react-aria.
|
|
24
|
+
*/
|
|
25
|
+
export declare function TabSwitch(props: TabSwitchProps): JSX.Element;
|
|
26
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/switch/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,GAAG,EAA8B,MAAM,UAAU,CAAA;AAG/D,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAMtF,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,GAAG,CAAC,OAAO,CAuD5D"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import userEvent from '@testing-library/user-event';
|
|
2
|
+
/**
|
|
3
|
+
* Pointer map matching react-spectrum's test setup.
|
|
4
|
+
* Ensures pointer events have realistic dimensions so they aren't mistaken for virtual clicks.
|
|
5
|
+
*/
|
|
6
|
+
export declare const pointerMap: ({
|
|
7
|
+
name: string;
|
|
8
|
+
pointerType: string;
|
|
9
|
+
button: string;
|
|
10
|
+
height: number;
|
|
11
|
+
width: number;
|
|
12
|
+
pressure: number;
|
|
13
|
+
} | {
|
|
14
|
+
name: string;
|
|
15
|
+
pointerType: string;
|
|
16
|
+
button: string;
|
|
17
|
+
height?: undefined;
|
|
18
|
+
width?: undefined;
|
|
19
|
+
pressure?: undefined;
|
|
20
|
+
} | {
|
|
21
|
+
name: string;
|
|
22
|
+
pointerType: string;
|
|
23
|
+
height: number;
|
|
24
|
+
width: number;
|
|
25
|
+
button?: undefined;
|
|
26
|
+
pressure?: undefined;
|
|
27
|
+
} | {
|
|
28
|
+
name: string;
|
|
29
|
+
pointerType: string;
|
|
30
|
+
button?: undefined;
|
|
31
|
+
height?: undefined;
|
|
32
|
+
width?: undefined;
|
|
33
|
+
pressure?: undefined;
|
|
34
|
+
})[];
|
|
35
|
+
/**
|
|
36
|
+
* Set up userEvent with react-spectrum's configuration.
|
|
37
|
+
* - delay: null - No artificial delays between actions
|
|
38
|
+
* - pointerMap - Realistic pointer event dimensions
|
|
39
|
+
* - pointerEventsCheck: Never - Skip pointer-events CSS check (jsdom doesn't handle this well)
|
|
40
|
+
*/
|
|
41
|
+
export declare function setupUser(): import("@testing-library/user-event").UserEvent;
|
|
42
|
+
export { render, screen, fireEvent, cleanup } from '@solidjs/testing-library';
|
|
43
|
+
export { userEvent };
|
|
44
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test-utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,6BAA6B,CAAC;AAGpD;;;GAGG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAOtB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,SAAS,oDAMxB;AAED,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TextField component for proyecto-viviana-ui
|
|
3
|
+
*
|
|
4
|
+
* A styled text field component built on solidaria hooks directly.
|
|
5
|
+
* This bypasses solidaria-components for now due to context timing issues.
|
|
6
|
+
*/
|
|
7
|
+
import { type JSX } from 'solid-js';
|
|
8
|
+
import { type AriaTextFieldProps } from '@proyecto-viviana/solidaria';
|
|
9
|
+
export type TextFieldSize = 'sm' | 'md' | 'lg';
|
|
10
|
+
export type TextFieldVariant = 'outline' | 'filled';
|
|
11
|
+
export interface TextFieldProps extends Omit<AriaTextFieldProps, 'children'> {
|
|
12
|
+
/** The size of the text field. */
|
|
13
|
+
size?: TextFieldSize;
|
|
14
|
+
/** The visual variant of the text field. */
|
|
15
|
+
variant?: TextFieldVariant;
|
|
16
|
+
/** Additional CSS class name. */
|
|
17
|
+
class?: string;
|
|
18
|
+
/** Label text for the input. */
|
|
19
|
+
label?: string;
|
|
20
|
+
/** Description text shown below the input. */
|
|
21
|
+
description?: string;
|
|
22
|
+
/** Error message shown when invalid. */
|
|
23
|
+
errorMessage?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* A text field allows users to enter a plain text value with a keyboard.
|
|
27
|
+
*
|
|
28
|
+
* Built directly on solidaria hooks for full accessibility support.
|
|
29
|
+
*/
|
|
30
|
+
export declare function TextField(props: TextFieldProps): JSX.Element;
|
|
31
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/textfield/index.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,GAAG,EAAmD,MAAM,UAAU,CAAA;AACpF,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAA;AASpC,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAC9C,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,QAAQ,CAAA;AAEnD,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC;IAC1E,kCAAkC;IAClC,IAAI,CAAC,EAAE,aAAa,CAAA;IACpB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,gBAAgB,CAAA;IAC1B,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,wCAAwC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AA4BD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,GAAG,CAAC,OAAO,CA4I5D"}
|
package/dist/theme.css
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Viviana UI Theme - Tailwind v4
|
|
3
|
+
*
|
|
4
|
+
* IMPORTANT: Due to Tailwind v4's @theme processing, the @theme block
|
|
5
|
+
* should be COPIED into your app's CSS, not imported via @import.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
*
|
|
9
|
+
* 1. Add fonts in HTML <head>:
|
|
10
|
+
* <link rel="preconnect" href="https://fonts.googleapis.com">
|
|
11
|
+
* <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
12
|
+
* <link href="https://fonts.googleapis.com/css2?family=Jost:ital,wght@0,100..900;1,100..900&family=Sen:wght@400..800&display=swap" rel="stylesheet">
|
|
13
|
+
*
|
|
14
|
+
* 2. In your app's CSS:
|
|
15
|
+
* @import "tailwindcss";
|
|
16
|
+
*
|
|
17
|
+
* @theme {
|
|
18
|
+
* // Copy the @theme block below into your CSS
|
|
19
|
+
* }
|
|
20
|
+
*
|
|
21
|
+
* @import "proyecto-viviana-ui/components.css";
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
@theme {
|
|
25
|
+
/* Breakpoints */
|
|
26
|
+
--breakpoint-xxs: 320px;
|
|
27
|
+
--breakpoint-xs: 475px;
|
|
28
|
+
|
|
29
|
+
/* Background - Dark blue-gray */
|
|
30
|
+
--color-bg-100: #3B5260;
|
|
31
|
+
--color-bg-200: #293E4B;
|
|
32
|
+
--color-bg-300: #24313a;
|
|
33
|
+
--color-bg-400: #1D272E;
|
|
34
|
+
--color-bg-light: #515151;
|
|
35
|
+
|
|
36
|
+
/* Accent - Pink */
|
|
37
|
+
--color-accent: #DF5C9A;
|
|
38
|
+
--color-accent-200: #FFB2D7;
|
|
39
|
+
--color-accent-300: #FF88C0;
|
|
40
|
+
--color-accent-500: #DF5C9A;
|
|
41
|
+
--color-accent-highlight: #e2a2be;
|
|
42
|
+
|
|
43
|
+
/* Primary - Cyan/Blue */
|
|
44
|
+
--color-primary-100: #D9F2FF;
|
|
45
|
+
--color-primary-200: #D0E9F5;
|
|
46
|
+
--color-primary-300: #ADCCDC;
|
|
47
|
+
--color-primary-400: #B8DFFF;
|
|
48
|
+
--color-primary-500: #75ABC7;
|
|
49
|
+
--color-primary-600: #58748B;
|
|
50
|
+
--color-primary-700: #4F6D85;
|
|
51
|
+
--color-primary-800: #4C6477;
|
|
52
|
+
|
|
53
|
+
/* Success - Green */
|
|
54
|
+
--color-success-100: #E5FFF3;
|
|
55
|
+
--color-success-400: #C2FFC8;
|
|
56
|
+
--color-success-600: #559D87;
|
|
57
|
+
|
|
58
|
+
/* Warning - Yellow */
|
|
59
|
+
--color-warning-100: #FFFBE5;
|
|
60
|
+
--color-warning-400: #FFDD87;
|
|
61
|
+
--color-warning-600: #9D8D55;
|
|
62
|
+
|
|
63
|
+
/* Danger - Red */
|
|
64
|
+
--color-danger-100: #FFE5E5;
|
|
65
|
+
--color-danger-400: #FF8787;
|
|
66
|
+
--color-danger-600: #9D5555;
|
|
67
|
+
|
|
68
|
+
/* Cards */
|
|
69
|
+
--color-cards-bg: #373737;
|
|
70
|
+
--color-cards-bg-load: #484848;
|
|
71
|
+
--color-correct: #83f1a7;
|
|
72
|
+
--color-incorrect: #e74c3c;
|
|
73
|
+
|
|
74
|
+
/* Typography */
|
|
75
|
+
--font-sen: 'Sen', sans-serif;
|
|
76
|
+
--font-jost: 'Jost', sans-serif;
|
|
77
|
+
--font-sans: 'Sen', sans-serif;
|
|
78
|
+
--font-mono: 'JetBrains Mono', monospace;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* Font utility classes */
|
|
82
|
+
.font-sen {
|
|
83
|
+
font-family: 'Sen', sans-serif;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.font-jost {
|
|
87
|
+
font-family: 'Jost', sans-serif;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/* Custom drop shadows */
|
|
91
|
+
.drop-shadow-title-card {
|
|
92
|
+
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.5);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.drop-shadow-logo {
|
|
96
|
+
filter: drop-shadow(0 0 10px rgba(223, 92, 154, 0.8));
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.shadow-primary-chip {
|
|
100
|
+
box-shadow: 0 2px 8px rgba(79, 109, 133, 0.4);
|
|
101
|
+
}
|