@vifui/styles 0.4.0-alpha.6

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.
@@ -0,0 +1,488 @@
1
+ /**
2
+ * Utility Classes
3
+ * Custom utilities for VifUI components
4
+ */
5
+
6
+ @layer utilities {
7
+ /* ============================================ */
8
+ /* Status Utilities */
9
+ /* ============================================ */
10
+
11
+ .status-focused {
12
+ outline: 2px solid var(--focus);
13
+ outline-offset: var(--ring-offset-width);
14
+ }
15
+
16
+ .status-disabled {
17
+ opacity: var(--disabled-opacity);
18
+ cursor: var(--cursor-disabled);
19
+ pointer-events: none;
20
+ }
21
+
22
+ .status-pending {
23
+ @apply pointer-events-none opacity-60;
24
+ }
25
+
26
+ /* ============================================ */
27
+ /* Shadow Utilities */
28
+ /* ============================================ */
29
+
30
+ .shadow-xs {
31
+ box-shadow: var(--shadow-xs);
32
+ }
33
+
34
+ .shadow-sm {
35
+ box-shadow: var(--shadow-sm);
36
+ }
37
+
38
+ .shadow-md {
39
+ box-shadow: var(--shadow-md);
40
+ }
41
+
42
+ .shadow-lg {
43
+ box-shadow: var(--shadow-lg);
44
+ }
45
+
46
+ .shadow-xl {
47
+ box-shadow: var(--shadow-xl);
48
+ }
49
+
50
+ .shadow-2xl {
51
+ box-shadow: var(--shadow-2xl);
52
+ }
53
+
54
+ .shadow-surface {
55
+ box-shadow: var(--surface-shadow);
56
+ }
57
+
58
+ .shadow-overlay {
59
+ box-shadow: var(--overlay-shadow);
60
+ }
61
+
62
+ .shadow-card {
63
+ box-shadow: var(--card-shadow);
64
+ }
65
+
66
+ /* ============================================ */
67
+ /* Scrollbar Styling */
68
+ /* ============================================ */
69
+
70
+ .vif-scrollbar {
71
+ scrollbar-width: thin;
72
+ scrollbar-color: var(--scrollbar) transparent;
73
+ }
74
+
75
+ .vif-scrollbar::-webkit-scrollbar {
76
+ width: 8px;
77
+ height: 8px;
78
+ }
79
+
80
+ .vif-scrollbar::-webkit-scrollbar-track {
81
+ background: transparent;
82
+ }
83
+
84
+ .vif-scrollbar::-webkit-scrollbar-thumb {
85
+ background-color: var(--scrollbar);
86
+ border-radius: var(--radius);
87
+ }
88
+
89
+ .vif-scrollbar::-webkit-scrollbar-thumb:hover {
90
+ background-color: var(--muted);
91
+ }
92
+
93
+ /* Thin scrollbar variant */
94
+ .vif-scrollbar-thin {
95
+ scrollbar-width: thin;
96
+ scrollbar-color: var(--scrollbar) transparent;
97
+ }
98
+
99
+ .vif-scrollbar-thin::-webkit-scrollbar {
100
+ width: 4px;
101
+ height: 4px;
102
+ }
103
+
104
+ .vif-scrollbar-thin::-webkit-scrollbar-track {
105
+ background: transparent;
106
+ }
107
+
108
+ .vif-scrollbar-thin::-webkit-scrollbar-thumb {
109
+ background-color: var(--scrollbar);
110
+ border-radius: var(--radius-full);
111
+ }
112
+
113
+ /* Hide scrollbar but keep functionality */
114
+ .vif-scrollbar-hide {
115
+ scrollbar-width: none;
116
+ -ms-overflow-style: none;
117
+ }
118
+
119
+ .vif-scrollbar-hide::-webkit-scrollbar {
120
+ display: none;
121
+ }
122
+
123
+ /* ============================================ */
124
+ /* Animation Utilities */
125
+ /* ============================================ */
126
+
127
+ .vif-animate-fade-in {
128
+ animation: vif-fade-in var(--transition-fast) var(--ease-smooth);
129
+ }
130
+
131
+ .vif-animate-fade-out {
132
+ animation: vif-fade-out var(--transition-fast) var(--ease-smooth);
133
+ }
134
+
135
+ .vif-animate-scale-in {
136
+ animation: vif-scale-in var(--transition-base) var(--ease-out);
137
+ }
138
+
139
+ .vif-animate-scale-out {
140
+ animation: vif-scale-out var(--transition-base) var(--ease-in);
141
+ }
142
+
143
+ .vif-animate-slide-up {
144
+ animation: vif-slide-up var(--transition-base) var(--ease-out);
145
+ }
146
+
147
+ .vif-animate-slide-down {
148
+ animation: vif-slide-down var(--transition-base) var(--ease-out);
149
+ }
150
+
151
+ .vif-animate-slide-left {
152
+ animation: vif-slide-left var(--transition-base) var(--ease-out);
153
+ }
154
+
155
+ .vif-animate-slide-right {
156
+ animation: vif-slide-right var(--transition-base) var(--ease-out);
157
+ }
158
+
159
+ .vif-animate-bounce {
160
+ animation: vif-bounce 600ms var(--ease-bounce);
161
+ }
162
+
163
+ .vif-animate-spin {
164
+ animation: vif-spin 1s linear infinite;
165
+ }
166
+
167
+ .vif-animate-pulse {
168
+ animation: vif-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
169
+ }
170
+
171
+ /* ============================================ */
172
+ /* Keyframes */
173
+ /* ============================================ */
174
+
175
+ @keyframes vif-fade-in {
176
+ from {
177
+ opacity: 0;
178
+ }
179
+ to {
180
+ opacity: 1;
181
+ }
182
+ }
183
+
184
+ @keyframes vif-fade-out {
185
+ from {
186
+ opacity: 1;
187
+ }
188
+ to {
189
+ opacity: 0;
190
+ }
191
+ }
192
+
193
+ @keyframes vif-scale-in {
194
+ from {
195
+ opacity: 0;
196
+ transform: scale(0.95);
197
+ }
198
+ to {
199
+ opacity: 1;
200
+ transform: scale(1);
201
+ }
202
+ }
203
+
204
+ @keyframes vif-scale-out {
205
+ from {
206
+ opacity: 1;
207
+ transform: scale(1);
208
+ }
209
+ to {
210
+ opacity: 0;
211
+ transform: scale(0.95);
212
+ }
213
+ }
214
+
215
+ @keyframes vif-slide-up {
216
+ from {
217
+ opacity: 0;
218
+ transform: translateY(10px);
219
+ }
220
+ to {
221
+ opacity: 1;
222
+ transform: translateY(0);
223
+ }
224
+ }
225
+
226
+ @keyframes vif-slide-down {
227
+ from {
228
+ opacity: 0;
229
+ transform: translateY(-10px);
230
+ }
231
+ to {
232
+ opacity: 1;
233
+ transform: translateY(0);
234
+ }
235
+ }
236
+
237
+ @keyframes vif-slide-left {
238
+ from {
239
+ opacity: 0;
240
+ transform: translateX(10px);
241
+ }
242
+ to {
243
+ opacity: 1;
244
+ transform: translateX(0);
245
+ }
246
+ }
247
+
248
+ @keyframes vif-slide-right {
249
+ from {
250
+ opacity: 0;
251
+ transform: translateX(-10px);
252
+ }
253
+ to {
254
+ opacity: 1;
255
+ transform: translateX(0);
256
+ }
257
+ }
258
+
259
+ @keyframes vif-bounce {
260
+ 0%,
261
+ 100% {
262
+ transform: translateY(0);
263
+ }
264
+ 50% {
265
+ transform: translateY(-10px);
266
+ }
267
+ }
268
+
269
+ @keyframes vif-spin {
270
+ from {
271
+ transform: rotate(0deg);
272
+ }
273
+ to {
274
+ transform: rotate(360deg);
275
+ }
276
+ }
277
+
278
+ @keyframes vif-pulse {
279
+ 0%,
280
+ 100% {
281
+ opacity: 1;
282
+ }
283
+ 50% {
284
+ opacity: 0.5;
285
+ }
286
+ }
287
+
288
+ /* ============================================ */
289
+ /* Transition Utilities */
290
+ /* ============================================ */
291
+
292
+ .vif-transition-fast {
293
+ transition-duration: var(--transition-fast);
294
+ }
295
+
296
+ .vif-transition-base {
297
+ transition-duration: var(--transition-base);
298
+ }
299
+
300
+ .vif-transition-slow {
301
+ transition-duration: var(--transition-slow);
302
+ }
303
+
304
+ .vif-transition-colors {
305
+ transition-property: color, background-color, border-color, fill, stroke;
306
+ transition-duration: var(--transition-base);
307
+ transition-timing-function: var(--ease-smooth);
308
+ }
309
+
310
+ .vif-transition-transform {
311
+ transition-property: transform;
312
+ transition-duration: var(--transition-base);
313
+ transition-timing-function: var(--ease-out);
314
+ }
315
+
316
+ .vif-transition-all {
317
+ transition-property: all;
318
+ transition-duration: var(--transition-base);
319
+ transition-timing-function: var(--ease-smooth);
320
+ }
321
+
322
+ /* ============================================ */
323
+ /* Surface Utilities */
324
+ /* ============================================ */
325
+
326
+ .vif-surface {
327
+ background-color: var(--surface);
328
+ color: var(--surface-foreground);
329
+ }
330
+
331
+ .vif-overlay {
332
+ background-color: var(--overlay);
333
+ color: var(--overlay-foreground);
334
+ }
335
+
336
+ /* ============================================ */
337
+ /* Backdrop Utilities */
338
+ /* ============================================ */
339
+
340
+ .vif-backdrop {
341
+ @apply fixed inset-0 z-50 bg-black/50;
342
+ backdrop-filter: blur(4px);
343
+ }
344
+
345
+ .vif-backdrop-light {
346
+ @apply fixed inset-0 z-50 bg-black/20;
347
+ backdrop-filter: blur(2px);
348
+ }
349
+
350
+ .vif-backdrop-dark {
351
+ @apply fixed inset-0 z-50 bg-black/80;
352
+ backdrop-filter: blur(8px);
353
+ }
354
+
355
+ /* ============================================ */
356
+ /* Focus Ring Utilities */
357
+ /* ============================================ */
358
+
359
+ .vif-focus-ring {
360
+ @apply focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2;
361
+ }
362
+
363
+ .vif-focus-ring-inset {
364
+ @apply focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary;
365
+ }
366
+
367
+ /* ============================================ */
368
+ /* Truncate Text Utilities */
369
+ /* ============================================ */
370
+
371
+ .vif-truncate-1 {
372
+ display: -webkit-box;
373
+ line-clamp: 1;
374
+ -webkit-line-clamp: 1;
375
+ -webkit-box-orient: vertical;
376
+ overflow: hidden;
377
+ }
378
+
379
+ .vif-truncate-2 {
380
+ display: -webkit-box;
381
+ line-clamp: 2;
382
+ -webkit-line-clamp: 2;
383
+ -webkit-box-orient: vertical;
384
+ overflow: hidden;
385
+ }
386
+
387
+ .vif-truncate-3 {
388
+ display: -webkit-box;
389
+ line-clamp: 3;
390
+ -webkit-line-clamp: 3;
391
+ -webkit-box-orient: vertical;
392
+ overflow: hidden;
393
+ }
394
+
395
+ /* ============================================ */
396
+ /* Glass Effect (Modern UI) */
397
+ /* ============================================ */
398
+
399
+ .vif-glass {
400
+ background: rgba(255, 255, 255, 0.1);
401
+ backdrop-filter: blur(10px) saturate(180%);
402
+ border: 1px solid rgba(255, 255, 255, 0.2);
403
+ }
404
+
405
+ .dark .vif-glass {
406
+ background: rgba(0, 0, 0, 0.3);
407
+ border: 1px solid rgba(255, 255, 255, 0.1);
408
+ }
409
+
410
+ /* ============================================ */
411
+ /* Hover Utilities (Vuesax style) */
412
+ /* ============================================ */
413
+
414
+ .vif-hover-lift {
415
+ transition: transform var(--transition-base) var(--ease-out);
416
+ }
417
+
418
+ .vif-hover-lift:hover {
419
+ transform: translateY(-2px);
420
+ }
421
+
422
+ .vif-hover-scale {
423
+ transition: transform var(--transition-base) var(--ease-out);
424
+ }
425
+
426
+ .vif-hover-scale:hover {
427
+ transform: scale(1.05);
428
+ }
429
+
430
+ /* ============================================ */
431
+ /* Skeleton Loading */
432
+ /* ============================================ */
433
+
434
+ .vif-skeleton {
435
+ @apply animate-pulse bg-default;
436
+ border-radius: var(--radius);
437
+ }
438
+
439
+ .vif-skeleton-shimmer {
440
+ @apply relative overflow-hidden bg-default;
441
+ border-radius: var(--radius);
442
+ }
443
+
444
+ .vif-skeleton-shimmer::after {
445
+ content: "";
446
+ @apply absolute inset-0;
447
+ background: linear-gradient(
448
+ 90deg,
449
+ transparent,
450
+ rgba(255, 255, 255, 0.3),
451
+ transparent
452
+ );
453
+ animation: vif-shimmer 1.5s infinite;
454
+ }
455
+
456
+ @keyframes vif-shimmer {
457
+ 0% {
458
+ transform: translateX(-100%);
459
+ }
460
+ 100% {
461
+ transform: translateX(100%);
462
+ }
463
+ }
464
+ }
465
+
466
+ /* ============================================ */
467
+ /* Motion Reduce (Accessibility) */
468
+ /* ============================================ */
469
+
470
+ @media (prefers-reduced-motion: reduce) {
471
+ *,
472
+ *::before,
473
+ *::after {
474
+ animation-duration: 0.01ms !important;
475
+ animation-iteration-count: 1 !important;
476
+ transition-duration: 0.01ms !important;
477
+ }
478
+
479
+ .vif-animate-fade-in,
480
+ .vif-animate-scale-in,
481
+ .vif-animate-slide-up,
482
+ .vif-animate-slide-down,
483
+ .vif-animate-slide-left,
484
+ .vif-animate-slide-right,
485
+ .vif-animate-bounce {
486
+ animation: none !important;
487
+ }
488
+ }