@mt-gloss/styles 0.0.3

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,594 @@
1
+ // ============================================
2
+ // COMPONENT: DATE & TIME PICKERS
3
+ // ============================================
4
+
5
+ @use '../tokens' as *;
6
+ @use '../mixins' as *;
7
+
8
+ // --- SHARED PICKER STYLES ---
9
+ %picker-wrapper {
10
+ display: flex;
11
+ flex-direction: column;
12
+ gap: $space-2;
13
+
14
+ &--disabled {
15
+ opacity: 0.6;
16
+ }
17
+ }
18
+
19
+ %picker-label {
20
+ font-size: $text-sm;
21
+ font-weight: 500;
22
+ color: $alias-text-primary;
23
+ }
24
+
25
+ %picker-trigger {
26
+ display: flex;
27
+ align-items: center;
28
+ gap: $space-2;
29
+ width: 100%;
30
+ padding: $space-3 $space-4;
31
+ background: $color-white;
32
+ border: 1px solid $alias-border-default;
33
+ border-radius: $radius-lg;
34
+ font-family: $font-body;
35
+ font-size: $text-base;
36
+ color: $alias-text-primary;
37
+ cursor: pointer;
38
+ text-align: left;
39
+ transition: border-color 0.2s ease, box-shadow 0.2s ease;
40
+ @include shadow-input-default;
41
+
42
+ &:hover:not(:disabled) {
43
+ border-color: $alias-border-hover;
44
+ }
45
+
46
+ &:focus-visible {
47
+ outline: none;
48
+ border-color: $alias-border-focus;
49
+ @include shadow-input-focus;
50
+ }
51
+
52
+ &:disabled {
53
+ cursor: not-allowed;
54
+ background: $alias-bg-disabled;
55
+ }
56
+
57
+ svg {
58
+ flex-shrink: 0;
59
+ color: $alias-text-secondary;
60
+ }
61
+
62
+ svg:last-child {
63
+ margin-left: auto;
64
+ }
65
+ }
66
+
67
+ %picker-value {
68
+ flex: 1;
69
+ min-width: 0;
70
+ overflow: hidden;
71
+ text-overflow: ellipsis;
72
+ white-space: nowrap;
73
+ }
74
+
75
+ %picker-placeholder {
76
+ color: $alias-text-tertiary;
77
+ }
78
+
79
+ %picker-clear {
80
+ display: flex;
81
+ align-items: center;
82
+ justify-content: center;
83
+ width: 20px;
84
+ height: 20px;
85
+ padding: 0;
86
+ background: $color-gray-200;
87
+ border: none;
88
+ border-radius: 50%;
89
+ cursor: pointer;
90
+ transition: background-color 0.15s ease;
91
+
92
+ svg {
93
+ width: 12px;
94
+ height: 12px;
95
+ color: $alias-text-secondary;
96
+ }
97
+
98
+ &:hover {
99
+ background: $color-gray-300;
100
+ }
101
+ }
102
+
103
+ %picker-helper {
104
+ display: flex;
105
+ align-items: center;
106
+ gap: $space-1;
107
+ font-size: $text-sm;
108
+ color: $alias-text-secondary;
109
+
110
+ &--error {
111
+ color: $alias-text-error;
112
+
113
+ svg {
114
+ color: $color-red-500;
115
+ }
116
+ }
117
+ }
118
+
119
+ %picker-dropdown {
120
+ position: absolute;
121
+ top: 100%;
122
+ left: 0;
123
+ margin-top: $space-1;
124
+ background: $alias-bg-surface;
125
+ border: 1px solid $alias-border-default;
126
+ border-radius: $radius-lg;
127
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
128
+ z-index: 100;
129
+ animation: picker-enter 0.15s ease-out;
130
+ }
131
+
132
+ @keyframes picker-enter {
133
+ from {
134
+ opacity: 0;
135
+ transform: translateY(-4px);
136
+ }
137
+ to {
138
+ opacity: 1;
139
+ transform: translateY(0);
140
+ }
141
+ }
142
+
143
+ // --- DATE PICKER ---
144
+ .gloss-datepicker-wrapper {
145
+ @extend %picker-wrapper;
146
+ }
147
+
148
+ .gloss-datepicker {
149
+ position: relative;
150
+
151
+ &--error .gloss-datepicker__trigger {
152
+ border-color: $alias-border-error;
153
+ }
154
+
155
+ &--success .gloss-datepicker__trigger {
156
+ border-color: $alias-border-success;
157
+ }
158
+
159
+ &__label {
160
+ @extend %picker-label;
161
+ }
162
+
163
+ &__trigger {
164
+ @extend %picker-trigger;
165
+ }
166
+
167
+ &__value {
168
+ @extend %picker-value;
169
+ }
170
+
171
+ &__placeholder {
172
+ @extend %picker-placeholder;
173
+ }
174
+
175
+ &__clear {
176
+ @extend %picker-clear;
177
+ }
178
+
179
+ &__helper {
180
+ @extend %picker-helper;
181
+ }
182
+
183
+ &__calendar {
184
+ @extend %picker-dropdown;
185
+ padding: $space-3;
186
+ min-width: 280px;
187
+ }
188
+
189
+ &__header {
190
+ display: flex;
191
+ align-items: center;
192
+ justify-content: space-between;
193
+ margin-bottom: $space-3;
194
+ }
195
+
196
+ &__nav-btn {
197
+ display: flex;
198
+ align-items: center;
199
+ justify-content: center;
200
+ width: 28px;
201
+ height: 28px;
202
+ padding: 0;
203
+ background: transparent;
204
+ border: none;
205
+ border-radius: $radius-sm;
206
+ cursor: pointer;
207
+ color: $alias-text-secondary;
208
+ transition: background-color 0.15s ease, color 0.15s ease;
209
+
210
+ &:hover {
211
+ background: $color-gray-100;
212
+ color: $alias-text-primary;
213
+ }
214
+
215
+ &:focus-visible {
216
+ outline: none;
217
+ box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.4);
218
+ }
219
+ }
220
+
221
+ &__title {
222
+ font-size: $text-sm;
223
+ font-weight: 600;
224
+ color: $alias-text-primary;
225
+ }
226
+
227
+ &__day-headers {
228
+ display: grid;
229
+ grid-template-columns: repeat(7, 1fr);
230
+ gap: 2px;
231
+ margin-bottom: $space-1;
232
+ }
233
+
234
+ &__day-header {
235
+ display: flex;
236
+ align-items: center;
237
+ justify-content: center;
238
+ height: 32px;
239
+ font-size: $text-xs;
240
+ font-weight: 500;
241
+ color: $alias-text-secondary;
242
+ }
243
+
244
+ &__grid {
245
+ display: grid;
246
+ grid-template-columns: repeat(7, 1fr);
247
+ gap: 2px;
248
+ }
249
+
250
+ &__day {
251
+ display: flex;
252
+ align-items: center;
253
+ justify-content: center;
254
+ width: 36px;
255
+ height: 36px;
256
+ padding: 0;
257
+ background: transparent;
258
+ border: none;
259
+ border-radius: $radius-sm;
260
+ font-size: $text-sm;
261
+ color: $alias-text-primary;
262
+ cursor: pointer;
263
+ transition: background-color 0.15s ease, color 0.15s ease;
264
+
265
+ &:hover:not(:disabled):not(.gloss-datepicker__day--selected) {
266
+ background: $color-gray-100;
267
+ }
268
+
269
+ &:focus-visible {
270
+ outline: none;
271
+ box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.4);
272
+ }
273
+
274
+ &--outside {
275
+ color: $alias-text-tertiary;
276
+ }
277
+
278
+ &--today {
279
+ font-weight: 600;
280
+ color: $alias-primary;
281
+ }
282
+
283
+ &--selected {
284
+ background: $alias-primary;
285
+ color: $color-white;
286
+ font-weight: 500;
287
+
288
+ &:hover {
289
+ background: $alias-primary-hover;
290
+ }
291
+ }
292
+
293
+ &--disabled {
294
+ color: $alias-text-tertiary;
295
+ cursor: not-allowed;
296
+ opacity: 0.5;
297
+ }
298
+ }
299
+
300
+ &__footer {
301
+ display: flex;
302
+ justify-content: center;
303
+ margin-top: $space-3;
304
+ padding-top: $space-3;
305
+ border-top: 1px solid $alias-border-default;
306
+ }
307
+
308
+ &__today-btn {
309
+ padding: $space-1 $space-3;
310
+ background: transparent;
311
+ border: none;
312
+ border-radius: $radius-sm;
313
+ font-size: $text-sm;
314
+ font-weight: 500;
315
+ color: $alias-primary;
316
+ cursor: pointer;
317
+ transition: background-color 0.15s ease;
318
+
319
+ &:hover {
320
+ background: $color-blue-50;
321
+ }
322
+ }
323
+ }
324
+
325
+ // --- TIME PICKER ---
326
+ .gloss-timepicker-wrapper {
327
+ @extend %picker-wrapper;
328
+ }
329
+
330
+ .gloss-timepicker {
331
+ position: relative;
332
+
333
+ &--error .gloss-timepicker__trigger {
334
+ border-color: $alias-border-error;
335
+ }
336
+
337
+ &--success .gloss-timepicker__trigger {
338
+ border-color: $alias-border-success;
339
+ }
340
+
341
+ &__label {
342
+ @extend %picker-label;
343
+ }
344
+
345
+ &__trigger {
346
+ @extend %picker-trigger;
347
+ }
348
+
349
+ &__value {
350
+ @extend %picker-value;
351
+ }
352
+
353
+ &__placeholder {
354
+ @extend %picker-placeholder;
355
+ }
356
+
357
+ &__clear {
358
+ @extend %picker-clear;
359
+ }
360
+
361
+ &__helper {
362
+ @extend %picker-helper;
363
+ }
364
+
365
+ &__options {
366
+ @extend %picker-dropdown;
367
+ width: 100%;
368
+ max-height: 280px;
369
+ overflow-y: auto;
370
+ padding: $space-1 0;
371
+ list-style: none;
372
+ }
373
+
374
+ &__option {
375
+ padding: $space-2 $space-4;
376
+ font-size: $text-sm;
377
+ color: $alias-text-primary;
378
+ cursor: pointer;
379
+ transition: background-color 0.15s ease;
380
+
381
+ &:hover,
382
+ &--highlighted {
383
+ background: $alias-bg-hover;
384
+ }
385
+
386
+ &--selected {
387
+ background: $color-blue-50;
388
+ color: $alias-primary;
389
+ font-weight: 500;
390
+ }
391
+ }
392
+ }
393
+
394
+ // --- DATE RANGE PICKER ---
395
+ .gloss-daterangepicker-wrapper {
396
+ @extend %picker-wrapper;
397
+ }
398
+
399
+ .gloss-daterangepicker {
400
+ position: relative;
401
+
402
+ &--error .gloss-daterangepicker__trigger {
403
+ border-color: $alias-border-error;
404
+ }
405
+
406
+ &--success .gloss-daterangepicker__trigger {
407
+ border-color: $alias-border-success;
408
+ }
409
+
410
+ &__label {
411
+ @extend %picker-label;
412
+ }
413
+
414
+ &__trigger {
415
+ @extend %picker-trigger;
416
+ }
417
+
418
+ &__value {
419
+ @extend %picker-value;
420
+ }
421
+
422
+ &__placeholder {
423
+ @extend %picker-placeholder;
424
+ }
425
+
426
+ &__clear {
427
+ @extend %picker-clear;
428
+ }
429
+
430
+ &__helper {
431
+ @extend %picker-helper;
432
+ }
433
+
434
+ &__dropdown {
435
+ @extend %picker-dropdown;
436
+ display: flex;
437
+ padding: $space-3;
438
+ }
439
+
440
+ &__presets {
441
+ display: flex;
442
+ flex-direction: column;
443
+ gap: $space-1;
444
+ padding-right: $space-4;
445
+ margin-right: $space-4;
446
+ border-right: 1px solid $alias-border-default;
447
+ min-width: 140px;
448
+ }
449
+
450
+ &__preset {
451
+ padding: $space-2 $space-3;
452
+ background: transparent;
453
+ border: none;
454
+ border-radius: $radius-sm;
455
+ font-size: $text-sm;
456
+ color: $alias-text-primary;
457
+ text-align: left;
458
+ cursor: pointer;
459
+ transition: background-color 0.15s ease;
460
+
461
+ &:hover {
462
+ background: $color-gray-100;
463
+ }
464
+ }
465
+
466
+ &__calendars {
467
+ display: flex;
468
+ gap: $space-6;
469
+ }
470
+
471
+ &__month {
472
+ min-width: 260px;
473
+ }
474
+
475
+ &__month-header {
476
+ display: flex;
477
+ align-items: center;
478
+ justify-content: space-between;
479
+ margin-bottom: $space-3;
480
+ }
481
+
482
+ &__month-title {
483
+ font-size: $text-sm;
484
+ font-weight: 600;
485
+ color: $alias-text-primary;
486
+ }
487
+
488
+ &__nav-btn {
489
+ display: flex;
490
+ align-items: center;
491
+ justify-content: center;
492
+ width: 28px;
493
+ height: 28px;
494
+ padding: 0;
495
+ background: transparent;
496
+ border: none;
497
+ border-radius: $radius-sm;
498
+ cursor: pointer;
499
+ color: $alias-text-secondary;
500
+ transition: background-color 0.15s ease, color 0.15s ease;
501
+
502
+ &:hover {
503
+ background: $color-gray-100;
504
+ color: $alias-text-primary;
505
+ }
506
+ }
507
+
508
+ &__day-headers {
509
+ display: grid;
510
+ grid-template-columns: repeat(7, 1fr);
511
+ gap: 2px;
512
+ margin-bottom: $space-1;
513
+ }
514
+
515
+ &__day-header {
516
+ display: flex;
517
+ align-items: center;
518
+ justify-content: center;
519
+ height: 28px;
520
+ font-size: $text-xs;
521
+ font-weight: 500;
522
+ color: $alias-text-secondary;
523
+ }
524
+
525
+ &__grid {
526
+ display: grid;
527
+ grid-template-columns: repeat(7, 1fr);
528
+ gap: 2px;
529
+ }
530
+
531
+ &__day {
532
+ display: flex;
533
+ align-items: center;
534
+ justify-content: center;
535
+ width: 34px;
536
+ height: 34px;
537
+ padding: 0;
538
+ background: transparent;
539
+ border: none;
540
+ border-radius: $radius-sm;
541
+ font-size: $text-sm;
542
+ color: $alias-text-primary;
543
+ cursor: pointer;
544
+ transition: background-color 0.15s ease, color 0.15s ease;
545
+
546
+ &:hover:not(:disabled):not(.gloss-daterangepicker__day--selected) {
547
+ background: $color-gray-100;
548
+ }
549
+
550
+ &--outside {
551
+ color: $alias-text-tertiary;
552
+ }
553
+
554
+ &--today {
555
+ font-weight: 600;
556
+ color: $alias-primary;
557
+ }
558
+
559
+ &--selected,
560
+ &--range-start,
561
+ &--range-end {
562
+ background: $alias-primary;
563
+ color: $color-white;
564
+ font-weight: 500;
565
+ }
566
+
567
+ &--range-start {
568
+ border-radius: $radius-sm 0 0 $radius-sm;
569
+ }
570
+
571
+ &--range-end {
572
+ border-radius: 0 $radius-sm $radius-sm 0;
573
+ }
574
+
575
+ &--range-start.gloss-daterangepicker__day--range-end {
576
+ border-radius: $radius-sm;
577
+ }
578
+
579
+ &--in-range:not(.gloss-daterangepicker__day--selected) {
580
+ background: $color-blue-100;
581
+ border-radius: 0;
582
+ }
583
+
584
+ &--hover-range:not(.gloss-daterangepicker__day--selected) {
585
+ background: $color-blue-50;
586
+ }
587
+
588
+ &--disabled {
589
+ color: $alias-text-tertiary;
590
+ cursor: not-allowed;
591
+ opacity: 0.5;
592
+ }
593
+ }
594
+ }
@@ -0,0 +1,90 @@
1
+ // ============================================
2
+ // COMPONENT: DROPDOWNS
3
+ // ============================================
4
+
5
+ @use '../tokens' as *;
6
+ @use '../mixins' as *;
7
+
8
+ .gloss-dropdown {
9
+ position: relative;
10
+ width: 100%;
11
+ max-width: 320px;
12
+ }
13
+
14
+ .gloss-dropdown__trigger {
15
+ cursor: pointer;
16
+ display: flex;
17
+ justify-content: space-between;
18
+ align-items: center;
19
+ width: 100%;
20
+ background: $color-white;
21
+ border: 1px solid $alias-border-default;
22
+ border-radius: $radius-md;
23
+ padding: $space-3 $space-4;
24
+ @include shadow-input-default;
25
+ font-size: $text-base;
26
+ font-weight: 500;
27
+ color: $alias-text-primary;
28
+ transition: all 0.2s;
29
+
30
+ &:hover {
31
+ background: $alias-bg-hover;
32
+ border-color: $alias-border-hover;
33
+ }
34
+
35
+ &--active {
36
+ border-color: $alias-border-focus;
37
+ @include shadow-input-focus;
38
+ background: $alias-bg-hover;
39
+ }
40
+ }
41
+
42
+ .gloss-dropdown__menu {
43
+ position: absolute;
44
+ top: 100%;
45
+ left: 0;
46
+ right: 0;
47
+ margin-top: $space-2;
48
+ background: $alias-bg-surface;
49
+ border: 1px solid $alias-border-default;
50
+ border-radius: $radius-md;
51
+ @include shadow-card;
52
+ z-index: 1000;
53
+ overflow: hidden;
54
+ padding: $space-1;
55
+ animation: slideDownFade 0.15s ease-out;
56
+ }
57
+
58
+ .gloss-dropdown__item {
59
+ display: flex;
60
+ align-items: center;
61
+ justify-content: space-between;
62
+ gap: $space-2;
63
+ padding: $space-2 $space-3;
64
+ font-size: $text-sm;
65
+ color: $alias-text-primary;
66
+ cursor: pointer;
67
+ border-radius: $radius-sm;
68
+ transition: background 0.1s;
69
+
70
+ &:hover {
71
+ background: $color-gray-100;
72
+ }
73
+
74
+ &--selected {
75
+ background: $color-blue-50;
76
+ color: $alias-primary;
77
+ font-weight: 600;
78
+
79
+ svg {
80
+ opacity: 1;
81
+ }
82
+ }
83
+
84
+ svg {
85
+ width: 16px;
86
+ height: 16px;
87
+ opacity: 0;
88
+ color: $alias-primary;
89
+ }
90
+ }