@howssatoshi/quantumcss 1.0.1

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,590 @@
1
+ /*!
2
+ * QuantumCSS Component Utilities & Variants
3
+ * Advanced component patterns, states, and interactive utilities
4
+ */
5
+
6
+ /* Hover State Utilities */
7
+ .hover\:text-primary:hover { color: var(--color-primary); }
8
+ .hover\:text-secondary:hover { color: var(--color-secondary); }
9
+ .hover\:text-white:hover { color: #ffffff; }
10
+ .hover\:text-black:hover { color: #000000; }
11
+
12
+ .hover\:bg-primary:hover { background-color: var(--color-primary); }
13
+ .hover\:bg-secondary:hover { background-color: var(--color-secondary); }
14
+ .hover\:bg-gray-100:hover { background-color: #f3f4f6; }
15
+ .hover\:bg-gray-200:hover { background-color: #e5e7eb; }
16
+
17
+ .hover\:border-primary:hover { border-color: var(--color-primary); }
18
+ .hover\:border-secondary:hover { border-color: var(--color-secondary); }
19
+
20
+ .hover\:shadow-lg:hover { box-shadow: var(--shadow-lg); }
21
+ .hover\:shadow-xl:hover { box-shadow: var(--shadow-xl); }
22
+
23
+ .hover\:scale-105:hover { transform: scale(1.05); }
24
+ .hover\:scale-110:hover { transform: scale(1.1); }
25
+ .hover\:scale-95:hover { transform: scale(0.95); }
26
+
27
+ .hover\:rotate-90:hover { transform: rotate(90deg); }
28
+ .hover\:rotate-180:hover { transform: rotate(180deg); }
29
+
30
+ .hover\:opacity-75:hover { opacity: 0.75; }
31
+ .hover\:opacity-50:hover { opacity: 0.5; }
32
+ .hover\:opacity-100:hover { opacity: 1; }
33
+
34
+ /* Focus State Utilities */
35
+ .focus\:outline-none:focus { outline: none; }
36
+ .focus\:outline:focus { outline: 2px solid; outline-offset: 2px; }
37
+ .focus\:outline-primary:focus { outline-color: var(--color-primary); }
38
+ .focus\:outline-secondary:focus { outline-color: var(--color-secondary); }
39
+
40
+ .focus\:ring:focus { box-shadow: 0 0 0 3px; }
41
+ .focus\:ring-primary:focus { box-shadow: 0 0 0 3px var(--color-primary); }
42
+ .focus\:ring-secondary:focus { box-shadow: 0 0 0 3px var(--color-secondary); }
43
+
44
+ .focus\:border-primary:focus { border-color: var(--color-primary); }
45
+ .focus\:border-secondary:focus { border-color: var(--color-secondary); }
46
+
47
+ /* Active State Utilities */
48
+ .active\:scale-95:active { transform: scale(0.95); }
49
+ .active\:scale-90:active { transform: scale(0.9); }
50
+
51
+ .active\:bg-primary:active { background-color: var(--color-primary); }
52
+ .active\:bg-secondary:active { background-color: var(--color-secondary); }
53
+
54
+ /* Disabled State Utilities */
55
+ .disabled\:opacity-50:disabled { opacity: 0.5; }
56
+ .disabled\:opacity-75:disabled { opacity: 0.75; }
57
+ .disabled\:cursor-not-allowed:disabled { cursor: not-allowed; }
58
+ .disabled\:pointer-events-none:disabled { pointer-events: none; }
59
+
60
+ /* Group Hover Utilities */
61
+ .group:hover .group-hover\:text-primary { color: var(--color-primary); }
62
+ .group:hover .group-hover\:text-white { color: #ffffff; }
63
+
64
+ .group:hover .group-hover\:bg-primary { background-color: var(--color-primary); }
65
+ .group:hover .group-hover\:bg-secondary { background-color: var(--color-secondary); }
66
+
67
+ .group:hover .group-hover\:opacity-100 { opacity: 1; }
68
+ .group:hover .group-hover\:scale-110 { transform: scale(1.1); }
69
+
70
+ /* Component-Specific Utilities */
71
+
72
+ /* Button Variants */
73
+ .btn {
74
+ display: inline-flex;
75
+ align-items: center;
76
+ justify-content: center;
77
+ padding: var(--space-2) var(--space-4);
78
+ border-radius: var(--radius-md);
79
+ font-weight: 500;
80
+ transition: all var(--duration-150) var(--ease-in-out);
81
+ cursor: pointer;
82
+ border: 1px solid transparent;
83
+ text-decoration: none;
84
+ font-family: inherit;
85
+ }
86
+
87
+ .btn:disabled {
88
+ opacity: 0.5;
89
+ cursor: not-allowed;
90
+ pointer-events: none;
91
+ }
92
+
93
+ .btn-primary {
94
+ background-color: var(--color-primary);
95
+ color: white;
96
+ border-color: var(--color-primary);
97
+ }
98
+
99
+ .btn-primary:hover {
100
+ background-color: var(--color-primary-600);
101
+ border-color: var(--color-primary-600);
102
+ }
103
+
104
+ .btn-secondary {
105
+ background-color: var(--color-secondary);
106
+ color: white;
107
+ border-color: var(--color-secondary);
108
+ }
109
+
110
+ .btn-secondary:hover {
111
+ background-color: var(--color-secondary-600);
112
+ border-color: var(--color-secondary-600);
113
+ }
114
+
115
+ .btn-outline {
116
+ background-color: transparent;
117
+ color: var(--color-primary);
118
+ border-color: var(--color-primary);
119
+ }
120
+
121
+ .btn-outline:hover {
122
+ background-color: var(--color-primary);
123
+ color: white;
124
+ }
125
+
126
+ .btn-ghost {
127
+ background-color: transparent;
128
+ color: var(--color-primary);
129
+ border-color: transparent;
130
+ }
131
+
132
+ .btn-ghost:hover {
133
+ background-color: var(--color-primary-100);
134
+ }
135
+
136
+ .btn-sm {
137
+ padding: var(--space-1) var(--space-3);
138
+ font-size: 0.875rem;
139
+ }
140
+
141
+ .btn-lg {
142
+ padding: var(--space-3) var(--space-6);
143
+ font-size: 1.125rem;
144
+ }
145
+
146
+ .btn-xl {
147
+ padding: var(--space-4) var(--space-8);
148
+ font-size: 1.25rem;
149
+ }
150
+
151
+ /* Card Component */
152
+ .card {
153
+ background-color: white;
154
+ border-radius: var(--radius-lg);
155
+ box-shadow: var(--shadow-md);
156
+ overflow: hidden;
157
+ transition: all var(--duration-200) var(--ease-in-out);
158
+ }
159
+
160
+ .card:hover {
161
+ box-shadow: var(--shadow-lg);
162
+ transform: translateY(-2px);
163
+ }
164
+
165
+ .card-header {
166
+ padding: var(--space-6);
167
+ border-bottom: 1px solid #e5e7eb;
168
+ }
169
+
170
+ .card-body {
171
+ padding: var(--space-6);
172
+ }
173
+
174
+ .card-footer {
175
+ padding: var(--space-6);
176
+ border-top: 1px solid #e5e7eb;
177
+ background-color: #f9fafb;
178
+ }
179
+
180
+ /* Input Component */
181
+ .input {
182
+ display: block;
183
+ width: 100%;
184
+ padding: var(--space-2) var(--space-3);
185
+ border: 1px solid #d1d5db;
186
+ border-radius: var(--radius-md);
187
+ background-color: white;
188
+ font-size: 1rem;
189
+ transition: all var(--duration-150) var(--ease-in-out);
190
+ }
191
+
192
+ .input:focus {
193
+ outline: none;
194
+ border-color: var(--color-primary);
195
+ box-shadow: 0 0 0 3px var(--color-primary);
196
+ }
197
+
198
+ .input:disabled {
199
+ background-color: #f3f4f6;
200
+ color: #6b7280;
201
+ cursor: not-allowed;
202
+ }
203
+
204
+ .input-error {
205
+ border-color: var(--color-error);
206
+ }
207
+
208
+ .input-error:focus {
209
+ border-color: var(--color-error);
210
+ box-shadow: 0 0 0 3px var(--color-error);
211
+ }
212
+
213
+ /* Badge Component */
214
+ .badge {
215
+ display: inline-flex;
216
+ align-items: center;
217
+ padding: var(--space-1) var(--space-2);
218
+ border-radius: var(--radius-full);
219
+ font-size: 0.75rem;
220
+ font-weight: 500;
221
+ text-transform: uppercase;
222
+ letter-spacing: 0.05em;
223
+ }
224
+
225
+ .badge-primary {
226
+ background-color: var(--color-primary-100);
227
+ color: var(--color-primary-800);
228
+ }
229
+
230
+ .badge-secondary {
231
+ background-color: #e5e7eb;
232
+ color: #374151;
233
+ }
234
+
235
+ .badge-success {
236
+ background-color: #d1fae5;
237
+ color: #065f46;
238
+ }
239
+
240
+ .badge-warning {
241
+ background-color: #fed7aa;
242
+ color: #92400e;
243
+ }
244
+
245
+ .badge-error {
246
+ background-color: #fee2e2;
247
+ color: #991b1b;
248
+ }
249
+
250
+ /* Alert Component */
251
+ .alert {
252
+ padding: var(--space-4);
253
+ border-radius: var(--radius-md);
254
+ border: 1px solid;
255
+ }
256
+
257
+ .alert-success {
258
+ background-color: #d1fae5;
259
+ border-color: #6ee7b7;
260
+ color: #065f46;
261
+ }
262
+
263
+ .alert-warning {
264
+ background-color: #fed7aa;
265
+ border-color: #fbbf24;
266
+ color: #92400e;
267
+ }
268
+
269
+ .alert-error {
270
+ background-color: #fee2e2;
271
+ border-color: #f87171;
272
+ color: #991b1b;
273
+ }
274
+
275
+ .alert-info {
276
+ background-color: #dbeafe;
277
+ border-color: #60a5fa;
278
+ color: #1e40af;
279
+ }
280
+
281
+ /* Modal Component */
282
+ .modal-overlay {
283
+ position: fixed;
284
+ inset: 0;
285
+ background-color: rgba(0, 0, 0, 0.5);
286
+ display: flex;
287
+ align-items: center;
288
+ justify-content: center;
289
+ z-index: 50;
290
+ }
291
+
292
+ .modal-content {
293
+ background-color: white;
294
+ border-radius: var(--radius-lg);
295
+ box-shadow: var(--shadow-2xl);
296
+ max-width: 90vw;
297
+ max-height: 90vh;
298
+ overflow-y: auto;
299
+ }
300
+
301
+ /* Loading Spinner */
302
+ .spinner {
303
+ display: inline-block;
304
+ width: 1.5rem;
305
+ height: 1.5rem;
306
+ border: 2px solid transparent;
307
+ border-top-color: currentColor;
308
+ border-radius: 50%;
309
+ animation: spin 1s linear infinite;
310
+ }
311
+
312
+ @keyframes spin {
313
+ to { transform: rotate(360deg); }
314
+ }
315
+
316
+ .spinner-sm {
317
+ width: 1rem;
318
+ height: 1rem;
319
+ }
320
+
321
+ .spinner-lg {
322
+ width: 2rem;
323
+ height: 2rem;
324
+ }
325
+
326
+ /* Skeleton Loading */
327
+ .skeleton {
328
+ background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
329
+ background-size: 200% 100%;
330
+ animation: loading 1.5s infinite;
331
+ border-radius: var(--radius-md);
332
+ }
333
+
334
+ @keyframes loading {
335
+ 0% { background-position: 200% 0; }
336
+ 100% { background-position: -200% 0; }
337
+ }
338
+
339
+ /* Tooltip Component */
340
+ .tooltip {
341
+ position: relative;
342
+ }
343
+
344
+ .tooltip-content {
345
+ position: absolute;
346
+ bottom: 100%;
347
+ left: 50%;
348
+ transform: translateX(-50%);
349
+ background-color: #1f2937;
350
+ color: white;
351
+ padding: var(--space-1) var(--space-2);
352
+ border-radius: var(--radius-md);
353
+ font-size: 0.875rem;
354
+ white-space: nowrap;
355
+ opacity: 0;
356
+ visibility: hidden;
357
+ transition: all var(--duration-150) var(--ease-in-out);
358
+ z-index: 10;
359
+ margin-bottom: var(--space-1);
360
+ }
361
+
362
+ .tooltip:hover .tooltip-content {
363
+ opacity: 1;
364
+ visibility: visible;
365
+ }
366
+
367
+ /* Dropdown Component */
368
+ .dropdown {
369
+ position: relative;
370
+ display: inline-block;
371
+ }
372
+
373
+ .dropdown-content {
374
+ position: absolute;
375
+ top: 100%;
376
+ left: 0;
377
+ background-color: white;
378
+ border: 1px solid #e5e7eb;
379
+ border-radius: var(--radius-md);
380
+ box-shadow: var(--shadow-lg);
381
+ min-width: 200px;
382
+ z-index: 20;
383
+ opacity: 0;
384
+ visibility: hidden;
385
+ transform: translateY(-10px);
386
+ transition: all var(--duration-150) var(--ease-in-out);
387
+ }
388
+
389
+ .dropdown.active .dropdown-content {
390
+ opacity: 1;
391
+ visibility: visible;
392
+ transform: translateY(0);
393
+ }
394
+
395
+ .dropdown-item {
396
+ display: block;
397
+ width: 100%;
398
+ padding: var(--space-2) var(--space-3);
399
+ text-align: left;
400
+ background: none;
401
+ border: none;
402
+ cursor: pointer;
403
+ transition: background-color var(--duration-150) var(--ease-in-out);
404
+ }
405
+
406
+ .dropdown-item:hover {
407
+ background-color: #f3f4f6;
408
+ }
409
+
410
+ /* Accordion Component */
411
+ .accordion-item {
412
+ border: 1px solid #e5e7eb;
413
+ border-radius: var(--radius-md);
414
+ margin-bottom: var(--space-2);
415
+ overflow: hidden;
416
+ }
417
+
418
+ .accordion-header {
419
+ padding: var(--space-4);
420
+ background-color: #f9fafb;
421
+ cursor: pointer;
422
+ display: flex;
423
+ justify-content: space-between;
424
+ align-items: center;
425
+ transition: background-color var(--duration-150) var(--ease-in-out);
426
+ }
427
+
428
+ .accordion-header:hover {
429
+ background-color: #f3f4f6;
430
+ }
431
+
432
+ .accordion-content {
433
+ padding: var(--space-4);
434
+ background-color: white;
435
+ max-height: 0;
436
+ overflow: hidden;
437
+ transition: max-height var(--duration-300) var(--ease-in-out);
438
+ }
439
+
440
+ .accordion-item.active .accordion-content {
441
+ max-height: 500px;
442
+ }
443
+
444
+ .accordion-item.active .accordion-icon {
445
+ transform: rotate(180deg);
446
+ }
447
+
448
+ .accordion-icon {
449
+ transition: transform var(--duration-300) var(--ease-in-out);
450
+ }
451
+
452
+ /* Tab Component */
453
+ .tab-list {
454
+ display: flex;
455
+ border-bottom: 1px solid #e5e7eb;
456
+ }
457
+
458
+ .tab-button {
459
+ padding: var(--space-2) var(--space-4);
460
+ background: none;
461
+ border: none;
462
+ cursor: pointer;
463
+ border-bottom: 2px solid transparent;
464
+ transition: all var(--duration-150) var(--ease-in-out);
465
+ }
466
+
467
+ .tab-button:hover {
468
+ background-color: #f3f4f6;
469
+ }
470
+
471
+ .tab-button.active {
472
+ border-bottom-color: var(--color-primary);
473
+ color: var(--color-primary);
474
+ }
475
+
476
+ .tab-content {
477
+ padding: var(--space-4);
478
+ }
479
+
480
+ .tab-panel {
481
+ display: none;
482
+ }
483
+
484
+ .tab-panel.active {
485
+ display: block;
486
+ }
487
+
488
+ /* Progress Component */
489
+ .progress {
490
+ width: 100%;
491
+ height: 0.5rem;
492
+ background-color: #e5e7eb;
493
+ border-radius: var(--radius-full);
494
+ overflow: hidden;
495
+ }
496
+
497
+ .progress-bar {
498
+ height: 100%;
499
+ background-color: var(--color-primary);
500
+ transition: width var(--duration-300) var(--ease-in-out);
501
+ }
502
+
503
+ /* Toggle Switch */
504
+ .toggle {
505
+ position: relative;
506
+ display: inline-block;
507
+ width: 3rem;
508
+ height: 1.5rem;
509
+ }
510
+
511
+ .toggle-input {
512
+ opacity: 0;
513
+ width: 0;
514
+ height: 0;
515
+ }
516
+
517
+ .toggle-slider {
518
+ position: absolute;
519
+ cursor: pointer;
520
+ inset: 0;
521
+ background-color: #cbd5e1;
522
+ transition: background-color var(--duration-150) var(--ease-in-out);
523
+ border-radius: var(--radius-full);
524
+ }
525
+
526
+ .toggle-slider:before {
527
+ position: absolute;
528
+ content: "";
529
+ height: 1.25rem;
530
+ width: 1.25rem;
531
+ left: 0.125rem;
532
+ bottom: 0.125rem;
533
+ background-color: white;
534
+ transition: transform var(--duration-150) var(--ease-in-out);
535
+ border-radius: 50%;
536
+ }
537
+
538
+ .toggle-input:checked + .toggle-slider {
539
+ background-color: var(--color-primary);
540
+ }
541
+
542
+ .toggle-input:checked + .toggle-slider:before {
543
+ transform: translateX(1.5rem);
544
+ }
545
+
546
+ /* Animation Utilities */
547
+ .animate-pulse {
548
+ animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
549
+ }
550
+
551
+ @keyframes pulse {
552
+ 0%, 100% { opacity: 1; }
553
+ 50% { opacity: 0.5; }
554
+ }
555
+
556
+ .animate-bounce {
557
+ animation: bounce 1s infinite;
558
+ }
559
+
560
+ @keyframes bounce {
561
+ 0%, 100% { transform: translateY(-25%); animation-timing-function: cubic-bezier(0.8, 0, 1, 1); }
562
+ 50% { transform: none; animation-timing-function: cubic-bezier(0, 0, 0.2, 1); }
563
+ }
564
+
565
+ .animate-fade-in {
566
+ animation: fadeIn var(--duration-500) var(--ease-in-out);
567
+ }
568
+
569
+ @keyframes fadeIn {
570
+ from { opacity: 0; }
571
+ to { opacity: 1; }
572
+ }
573
+
574
+ .animate-slide-up {
575
+ animation: slideUp var(--duration-300) var(--ease-out);
576
+ }
577
+
578
+ @keyframes slideUp {
579
+ from { transform: translateY(20px); opacity: 0; }
580
+ to { transform: translateY(0); opacity: 1; }
581
+ }
582
+
583
+ .animate-slide-down {
584
+ animation: slideDown var(--duration-300) var(--ease-out);
585
+ }
586
+
587
+ @keyframes slideDown {
588
+ from { transform: translateY(-20px); opacity: 0; }
589
+ to { transform: translateY(0); opacity: 1; }
590
+ }