@duskmoon-dev/core 0.1.0 → 0.2.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 (110) hide show
  1. package/README.md +366 -78
  2. package/dist/components/accordion.css +244 -0
  3. package/dist/components/alert.css +199 -0
  4. package/dist/components/appbar.css +493 -0
  5. package/dist/components/autocomplete.css +269 -0
  6. package/dist/components/avatar.css +167 -0
  7. package/dist/components/badge.css +178 -0
  8. package/dist/components/bottom-navigation.css +263 -0
  9. package/dist/components/bottomsheet.css +334 -0
  10. package/dist/components/button.css +475 -0
  11. package/dist/components/card.css +220 -0
  12. package/dist/components/cascader.css +418 -0
  13. package/dist/components/checkbox.css +231 -0
  14. package/dist/components/chip.css +211 -0
  15. package/dist/components/collapse.css +454 -0
  16. package/dist/components/datepicker.css +741 -0
  17. package/dist/components/dialog.css +173 -0
  18. package/dist/components/divider.css +284 -0
  19. package/dist/components/drawer.css +371 -0
  20. package/dist/components/file-upload.css +321 -0
  21. package/dist/components/form-group.css +308 -0
  22. package/dist/components/form.css +441 -0
  23. package/dist/components/index.css +14951 -0
  24. package/dist/components/input.css +240 -0
  25. package/dist/components/list.css +188 -0
  26. package/dist/components/markdown-body.css +405 -0
  27. package/dist/components/modal.css +291 -0
  28. package/dist/components/multi-select.css +491 -0
  29. package/dist/components/navigation.css +736 -0
  30. package/dist/components/otp-input.css +195 -0
  31. package/dist/components/pin-input.css +184 -0
  32. package/dist/components/popover.css +392 -0
  33. package/dist/components/progress.css +238 -0
  34. package/dist/components/radio.css +183 -0
  35. package/dist/components/rating.css +230 -0
  36. package/dist/components/segment-control.css +186 -0
  37. package/dist/components/select.css +205 -0
  38. package/dist/components/skeleton.css +216 -0
  39. package/dist/components/slider.css +327 -0
  40. package/dist/components/snackbar.css +311 -0
  41. package/dist/components/stepper.css +313 -0
  42. package/dist/components/switch.css +234 -0
  43. package/dist/components/table.css +199 -0
  44. package/dist/components/textarea.css +398 -0
  45. package/dist/components/time-input.css +252 -0
  46. package/dist/components/timeline.css +353 -0
  47. package/dist/components/toast.css +251 -0
  48. package/dist/components/tooltip.css +284 -0
  49. package/dist/components/tree-select.css +472 -0
  50. package/dist/esm/components/accordion.js +251 -0
  51. package/dist/esm/components/alert.js +206 -0
  52. package/dist/esm/components/appbar.js +500 -0
  53. package/dist/esm/components/autocomplete.js +276 -0
  54. package/dist/esm/components/avatar.js +174 -0
  55. package/dist/esm/components/badge.js +185 -0
  56. package/dist/esm/components/bottom-navigation.js +270 -0
  57. package/dist/esm/components/bottomsheet.js +341 -0
  58. package/dist/esm/components/button.js +482 -0
  59. package/dist/esm/components/card.js +227 -0
  60. package/dist/esm/components/cascader.js +425 -0
  61. package/dist/esm/components/checkbox.js +238 -0
  62. package/dist/esm/components/chip.js +218 -0
  63. package/dist/esm/components/collapse.js +461 -0
  64. package/dist/esm/components/datepicker.js +748 -0
  65. package/dist/esm/components/dialog.js +180 -0
  66. package/dist/esm/components/divider.js +291 -0
  67. package/dist/esm/components/drawer.js +378 -0
  68. package/dist/esm/components/file-upload.js +328 -0
  69. package/dist/esm/components/form-group.js +315 -0
  70. package/dist/esm/components/form.js +448 -0
  71. package/dist/esm/components/input.js +247 -0
  72. package/dist/esm/components/list.js +195 -0
  73. package/dist/esm/components/markdown-body.js +412 -0
  74. package/dist/esm/components/modal.js +298 -0
  75. package/dist/esm/components/multi-select.js +498 -0
  76. package/dist/esm/components/navigation.js +743 -0
  77. package/dist/esm/components/otp-input.js +202 -0
  78. package/dist/esm/components/pin-input.js +191 -0
  79. package/dist/esm/components/popover.js +399 -0
  80. package/dist/esm/components/progress.js +245 -0
  81. package/dist/esm/components/radio.js +190 -0
  82. package/dist/esm/components/rating.js +237 -0
  83. package/dist/esm/components/segment-control.js +193 -0
  84. package/dist/esm/components/select.js +212 -0
  85. package/dist/esm/components/skeleton.js +223 -0
  86. package/dist/esm/components/slider.js +334 -0
  87. package/dist/esm/components/snackbar.js +318 -0
  88. package/dist/esm/components/stepper.js +320 -0
  89. package/dist/esm/components/switch.js +241 -0
  90. package/dist/esm/components/table.js +206 -0
  91. package/dist/esm/components/textarea.js +405 -0
  92. package/dist/esm/components/time-input.js +259 -0
  93. package/dist/esm/components/timeline.js +360 -0
  94. package/dist/esm/components/toast.js +258 -0
  95. package/dist/esm/components/tooltip.js +291 -0
  96. package/dist/esm/components/tree-select.js +479 -0
  97. package/dist/index.css +15866 -0
  98. package/dist/themes/moonlight.css +253 -0
  99. package/dist/themes/sunshine.css +250 -0
  100. package/dist/types/index.d.ts +14 -0
  101. package/dist/types/index.d.ts.map +1 -0
  102. package/dist/types/plugin.d.ts +69 -0
  103. package/dist/types/plugin.d.ts.map +1 -0
  104. package/dist/types/theme.d.ts +202 -0
  105. package/dist/types/theme.d.ts.map +1 -0
  106. package/package.json +262 -18
  107. package/dist/index.cjs +0 -243
  108. package/dist/index.cjs.map +0 -15
  109. package/dist/index.js +0 -211
  110. package/dist/index.js.map +0 -15
@@ -0,0 +1,741 @@
1
+ /**
2
+ * Datepicker Component Styles
3
+ * DuskMoonUI - Material Design 3 inspired datepicker system
4
+ */
5
+
6
+ @layer components {
7
+ /* Datepicker Container */
8
+ .datepicker {
9
+ position: relative;
10
+ display: inline-block;
11
+ width: 100%;
12
+ }
13
+
14
+ /* Datepicker Input */
15
+ .datepicker-input {
16
+ width: 100%;
17
+ padding: 0.75rem 2.5rem 0.75rem 1rem;
18
+ font-size: 0.875rem;
19
+ line-height: 1.5;
20
+ color: var(--color-on-surface);
21
+ background-color: var(--color-surface);
22
+ border: 1px solid var(--color-outline);
23
+ border-radius: 0.5rem;
24
+ transition: border-color 150ms ease-in-out, box-shadow 150ms ease-in-out;
25
+ }
26
+
27
+ /* Hide native date picker controls when using custom trigger */
28
+ .datepicker-input-container .datepicker-input[type="date"]::-webkit-calendar-picker-indicator {
29
+ display: none;
30
+ -webkit-appearance: none;
31
+ }
32
+
33
+ .datepicker-input-container .datepicker-input[type="date"]::-webkit-inner-spin-button,
34
+ .datepicker-input-container .datepicker-input[type="date"]::-webkit-clear-button {
35
+ display: none;
36
+ -webkit-appearance: none;
37
+ }
38
+
39
+ .datepicker-input:focus {
40
+ outline: none;
41
+ border-color: var(--color-primary);
42
+ box-shadow: 0 0 0 3px var(--color-primary-container);
43
+ }
44
+
45
+ .datepicker-input:disabled {
46
+ background-color: var(--color-surface-container);
47
+ color: var(--color-on-surface-variant);
48
+ cursor: not-allowed;
49
+ opacity: 0.6;
50
+ }
51
+
52
+ /* Calendar Icon */
53
+ .datepicker-icon {
54
+ position: absolute;
55
+ right: 0.75rem;
56
+ top: 50%;
57
+ transform: translateY(-50%);
58
+ display: flex;
59
+ align-items: center;
60
+ justify-content: center;
61
+ width: 1.25rem;
62
+ height: 1.25rem;
63
+ color: var(--color-on-surface-variant);
64
+ pointer-events: none;
65
+ }
66
+
67
+ /* Datepicker Input Container */
68
+ .datepicker-input-container {
69
+ position: relative;
70
+ display: flex;
71
+ align-items: center;
72
+ width: 100%;
73
+ }
74
+
75
+ .datepicker-input-container .datepicker-input {
76
+ padding-right: 2.5rem;
77
+ }
78
+
79
+ /* Datepicker Trigger (icon button for Popover API) */
80
+ .datepicker-trigger {
81
+ position: absolute;
82
+ right: 0.5rem;
83
+ top: 50%;
84
+ transform: translateY(-50%);
85
+ z-index: 1;
86
+ display: flex;
87
+ align-items: center;
88
+ justify-content: center;
89
+ width: 2rem;
90
+ height: 2rem;
91
+ padding: 0;
92
+ background: transparent;
93
+ border: none;
94
+ border-radius: 50%;
95
+ cursor: pointer;
96
+ color: var(--color-on-surface-variant);
97
+ transition: background-color 150ms ease-in-out;
98
+ }
99
+
100
+ .datepicker-trigger:hover {
101
+ background-color: var(--color-surface-container);
102
+ }
103
+
104
+ .datepicker-trigger .datepicker-icon {
105
+ position: static;
106
+ transform: none;
107
+ }
108
+
109
+ /* Datepicker Dropdown - Non-popover (JS-controlled) */
110
+ .datepicker-dropdown:not([popover]) {
111
+ position: absolute;
112
+ top: 100%;
113
+ left: 0;
114
+ z-index: 1000;
115
+ margin-top: 0.25rem;
116
+ background-color: var(--color-surface);
117
+ border: 1px solid var(--color-outline);
118
+ border-radius: 0.75rem;
119
+ box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
120
+ opacity: 0;
121
+ visibility: hidden;
122
+ transform: translateY(-0.5rem);
123
+ transition: opacity 150ms ease-out, visibility 150ms ease-out, transform 150ms ease-out;
124
+ }
125
+
126
+ .datepicker.datepicker-open .datepicker-dropdown:not([popover]),
127
+ .datepicker-dropdown:not([popover]).show,
128
+ .datepicker-dropdown-open:not([popover]) {
129
+ opacity: 1;
130
+ visibility: visible;
131
+ transform: translateY(0);
132
+ }
133
+
134
+ /* Popover API Support - Browser handles visibility, JS handles positioning */
135
+ .datepicker-dropdown[popover] {
136
+ /* Reset browser defaults - positioning handled by JavaScript */
137
+ inset: unset;
138
+ margin: 0;
139
+ padding: 0;
140
+ /* Styling */
141
+ min-width: 18rem;
142
+ background-color: var(--color-surface);
143
+ border: 1px solid var(--color-outline);
144
+ border-radius: 0.75rem;
145
+ box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
146
+ }
147
+
148
+ /* Calendar Header */
149
+ .datepicker-header {
150
+ display: flex;
151
+ align-items: center;
152
+ justify-content: space-between;
153
+ padding: 0.75rem;
154
+ border-bottom: 1px solid var(--color-outline-variant);
155
+ }
156
+
157
+ .datepicker-title {
158
+ font-size: 0.875rem;
159
+ font-weight: 600;
160
+ color: var(--color-on-surface);
161
+ }
162
+
163
+ .datepicker-nav {
164
+ display: flex;
165
+ gap: 0.25rem;
166
+ }
167
+
168
+ .datepicker-nav-btn {
169
+ display: flex;
170
+ align-items: center;
171
+ justify-content: center;
172
+ width: 2rem;
173
+ height: 2rem;
174
+ color: var(--color-on-surface-variant);
175
+ background-color: transparent;
176
+ border: none;
177
+ border-radius: 50%;
178
+ cursor: pointer;
179
+ transition: background-color 150ms ease-in-out, color 150ms ease-in-out;
180
+ }
181
+
182
+ .datepicker-nav-btn:hover {
183
+ background-color: var(--color-surface-container);
184
+ color: var(--color-on-surface);
185
+ }
186
+
187
+ .datepicker-nav-btn:disabled {
188
+ opacity: 0.4;
189
+ cursor: not-allowed;
190
+ }
191
+
192
+ /* Calendar Body */
193
+ .datepicker-calendar {
194
+ display: grid;
195
+ grid-template-columns: repeat(7, 1fr);
196
+ gap: 0.125rem;
197
+ padding: 0.5rem;
198
+ }
199
+
200
+ /* Weekday Headers */
201
+ .datepicker-weekdays {
202
+ display: grid;
203
+ grid-template-columns: repeat(7, 1fr);
204
+ gap: 0.125rem;
205
+ margin-bottom: 0.25rem;
206
+ }
207
+
208
+ .datepicker-weekday {
209
+ display: flex;
210
+ align-items: center;
211
+ justify-content: center;
212
+ aspect-ratio: 1;
213
+ font-size: 0.75rem;
214
+ font-weight: 500;
215
+ color: var(--color-on-surface-variant);
216
+ }
217
+
218
+ /* Days Grid */
219
+ .datepicker-days {
220
+ display: grid;
221
+ grid-template-columns: repeat(7, 1fr);
222
+ gap: 0.125rem;
223
+ }
224
+
225
+ .datepicker-day {
226
+ display: flex;
227
+ align-items: center;
228
+ justify-content: center;
229
+ aspect-ratio: 1;
230
+ font-size: 0.875rem;
231
+ color: var(--color-on-surface);
232
+ background-color: transparent;
233
+ border: none;
234
+ border-radius: 50%;
235
+ cursor: pointer;
236
+ transition: background-color 150ms ease-in-out, color 150ms ease-in-out;
237
+ }
238
+
239
+ .datepicker-day:hover:not(:disabled):not(.datepicker-day-selected) {
240
+ background-color: var(--color-surface-container);
241
+ }
242
+
243
+ .datepicker-day:focus-visible {
244
+ outline: 2px solid var(--color-primary);
245
+ outline-offset: 2px;
246
+ }
247
+
248
+ .datepicker-day-other-month {
249
+ color: var(--color-on-surface-variant);
250
+ opacity: 0.5;
251
+ }
252
+
253
+ .datepicker-day-today {
254
+ border: 1px solid var(--color-primary);
255
+ }
256
+
257
+ .datepicker-day-selected {
258
+ background-color: var(--color-primary);
259
+ color: var(--color-on-primary);
260
+ }
261
+
262
+ .datepicker-day-selected:hover {
263
+ background-color: var(--color-primary);
264
+ opacity: 0.9;
265
+ }
266
+
267
+ .datepicker-day:disabled {
268
+ color: var(--color-on-surface-variant);
269
+ opacity: 0.4;
270
+ cursor: not-allowed;
271
+ }
272
+
273
+ /* Range Selection */
274
+ .datepicker-day-in-range {
275
+ background-color: var(--color-primary-container);
276
+ color: var(--color-on-primary-container);
277
+ border-radius: 0;
278
+ }
279
+
280
+ .datepicker-day-range-start {
281
+ background-color: var(--color-primary);
282
+ color: var(--color-on-primary);
283
+ border-radius: 50% 0 0 50%;
284
+ }
285
+
286
+ .datepicker-day-range-end {
287
+ background-color: var(--color-primary);
288
+ color: var(--color-on-primary);
289
+ border-radius: 0 50% 50% 0;
290
+ }
291
+
292
+ /* Month/Year View */
293
+ .datepicker-months,
294
+ .datepicker-years {
295
+ display: grid;
296
+ grid-template-columns: repeat(3, 1fr);
297
+ gap: 0.5rem;
298
+ padding: 0.5rem;
299
+ min-width: 16rem;
300
+ }
301
+
302
+ .datepicker-month,
303
+ .datepicker-year {
304
+ display: flex;
305
+ align-items: center;
306
+ justify-content: center;
307
+ padding: 0.75rem 1rem;
308
+ font-size: 0.875rem;
309
+ color: var(--color-on-surface);
310
+ background-color: transparent;
311
+ border: none;
312
+ border-radius: 0.5rem;
313
+ cursor: pointer;
314
+ transition: background-color 150ms ease-in-out;
315
+ }
316
+
317
+ .datepicker-month:hover,
318
+ .datepicker-year:hover {
319
+ background-color: var(--color-surface-container);
320
+ }
321
+
322
+ .datepicker-month.selected,
323
+ .datepicker-month-selected,
324
+ .datepicker-year.selected,
325
+ .datepicker-year-selected {
326
+ background-color: var(--color-primary);
327
+ color: var(--color-on-primary);
328
+ }
329
+
330
+ .datepicker-day-disabled {
331
+ color: var(--color-on-surface-variant);
332
+ opacity: 0.4;
333
+ cursor: not-allowed;
334
+ pointer-events: none;
335
+ }
336
+
337
+ /* Footer Actions */
338
+ .datepicker-footer {
339
+ display: flex;
340
+ justify-content: flex-end;
341
+ gap: 0.5rem;
342
+ padding: 0.75rem;
343
+ border-top: 1px solid var(--color-outline-variant);
344
+ }
345
+
346
+ /* Time Picker */
347
+ .datepicker-time {
348
+ display: flex;
349
+ align-items: center;
350
+ justify-content: center;
351
+ gap: 0.25rem;
352
+ padding: 0.75rem;
353
+ border-top: 1px solid var(--color-outline-variant);
354
+ }
355
+
356
+ .datepicker-time-input {
357
+ width: 3rem;
358
+ padding: 0.5rem;
359
+ font-size: 1rem;
360
+ text-align: center;
361
+ color: var(--color-on-surface);
362
+ background-color: var(--color-surface-container);
363
+ border: 1px solid var(--color-outline);
364
+ border-radius: 0.25rem;
365
+ }
366
+
367
+ .datepicker-time-input:focus {
368
+ outline: none;
369
+ border-color: var(--color-primary);
370
+ }
371
+
372
+ .datepicker-time-separator {
373
+ font-size: 1rem;
374
+ font-weight: 600;
375
+ color: var(--color-on-surface);
376
+ }
377
+
378
+ .datepicker-time-period {
379
+ display: flex;
380
+ flex-direction: column;
381
+ gap: 0.125rem;
382
+ margin-left: 0.5rem;
383
+ }
384
+
385
+ .datepicker-time-period-btn {
386
+ padding: 0.25rem 0.5rem;
387
+ font-size: 0.625rem;
388
+ font-weight: 500;
389
+ color: var(--color-on-surface-variant);
390
+ background-color: transparent;
391
+ border: 1px solid var(--color-outline);
392
+ cursor: pointer;
393
+ transition: background-color 150ms ease-in-out;
394
+ }
395
+
396
+ .datepicker-time-period-btn:first-child {
397
+ border-radius: 0.25rem 0.25rem 0 0;
398
+ }
399
+
400
+ .datepicker-time-period-btn:last-child {
401
+ border-radius: 0 0 0.25rem 0.25rem;
402
+ border-top: none;
403
+ }
404
+
405
+ .datepicker-time-period-btn.active {
406
+ background-color: var(--color-primary);
407
+ color: var(--color-on-primary);
408
+ border-color: var(--color-primary);
409
+ }
410
+
411
+ /* Size Variants */
412
+ .datepicker-sm .datepicker-input {
413
+ padding: 0.5rem 2rem 0.5rem 0.75rem;
414
+ font-size: 0.75rem;
415
+ }
416
+
417
+ .datepicker-lg .datepicker-input {
418
+ padding: 1rem 3rem 1rem 1.25rem;
419
+ font-size: 1rem;
420
+ }
421
+
422
+ /* ========================================
423
+ * Date Range Picker Variants
424
+ * ======================================== */
425
+
426
+ /* Range Input Container */
427
+ .datepicker-range {
428
+ display: flex;
429
+ align-items: center;
430
+ gap: 0.5rem;
431
+ }
432
+
433
+ .datepicker-range-separator {
434
+ color: var(--color-on-surface-variant);
435
+ font-size: 0.875rem;
436
+ }
437
+
438
+ .datepicker-range-input {
439
+ flex: 1;
440
+ }
441
+
442
+ /* Dual Calendar View */
443
+ .datepicker-dual-calendar {
444
+ display: flex;
445
+ gap: 1rem;
446
+ padding: 0.5rem;
447
+ }
448
+
449
+ .datepicker-dual-calendar .datepicker-calendar {
450
+ flex: 1;
451
+ }
452
+
453
+ /* Range Presets */
454
+ .datepicker-presets {
455
+ display: flex;
456
+ flex-direction: column;
457
+ gap: 0.25rem;
458
+ padding: 0.5rem;
459
+ border-right: 1px solid var(--color-outline-variant);
460
+ min-width: 8rem;
461
+ }
462
+
463
+ .datepicker-preset {
464
+ padding: 0.5rem 0.75rem;
465
+ font-size: 0.75rem;
466
+ color: var(--color-on-surface);
467
+ background-color: transparent;
468
+ border: none;
469
+ border-radius: 0.375rem;
470
+ cursor: pointer;
471
+ text-align: left;
472
+ transition: background-color 150ms ease-in-out;
473
+ }
474
+
475
+ .datepicker-preset:hover {
476
+ background-color: var(--color-surface-container);
477
+ }
478
+
479
+ .datepicker-preset-active {
480
+ background-color: var(--color-primary-container);
481
+ color: var(--color-on-primary-container);
482
+ }
483
+
484
+ /* Range Display */
485
+ .datepicker-range-display {
486
+ display: flex;
487
+ align-items: center;
488
+ gap: 0.75rem;
489
+ padding: 0.75rem;
490
+ background-color: var(--color-surface-container-lowest);
491
+ border-bottom: 1px solid var(--color-outline-variant);
492
+ }
493
+
494
+ .datepicker-range-date {
495
+ flex: 1;
496
+ text-align: center;
497
+ }
498
+
499
+ .datepicker-range-date-label {
500
+ font-size: 0.625rem;
501
+ font-weight: 500;
502
+ color: var(--color-on-surface-variant);
503
+ text-transform: uppercase;
504
+ margin-bottom: 0.25rem;
505
+ }
506
+
507
+ .datepicker-range-date-value {
508
+ font-size: 0.875rem;
509
+ font-weight: 500;
510
+ color: var(--color-on-surface);
511
+ }
512
+
513
+ .datepicker-range-arrow {
514
+ color: var(--color-on-surface-variant);
515
+ }
516
+
517
+ /* ========================================
518
+ * DateTime Picker Variants
519
+ * ======================================== */
520
+
521
+ /* DateTime Container */
522
+ .datetime-picker {
523
+ position: relative;
524
+ display: inline-block;
525
+ width: 100%;
526
+ }
527
+
528
+ .datetime-picker-input {
529
+ width: 100%;
530
+ padding: 0.75rem 2.5rem 0.75rem 1rem;
531
+ font-size: 0.875rem;
532
+ line-height: 1.5;
533
+ color: var(--color-on-surface);
534
+ background-color: var(--color-surface);
535
+ border: 1px solid var(--color-outline);
536
+ border-radius: 0.5rem;
537
+ transition: border-color 150ms ease-in-out, box-shadow 150ms ease-in-out;
538
+ }
539
+
540
+ .datetime-picker-input:focus {
541
+ outline: none;
542
+ border-color: var(--color-primary);
543
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
544
+ }
545
+
546
+ /* DateTime Dropdown Layout */
547
+ .datetime-picker-dropdown {
548
+ display: flex;
549
+ flex-direction: column;
550
+ }
551
+
552
+ .datetime-picker-body {
553
+ display: flex;
554
+ }
555
+
556
+ .datetime-picker-calendar {
557
+ flex: 1;
558
+ }
559
+
560
+ .datetime-picker-time-panel {
561
+ display: flex;
562
+ flex-direction: column;
563
+ min-width: 5rem;
564
+ border-left: 1px solid var(--color-outline-variant);
565
+ }
566
+
567
+ .datetime-picker-time-header {
568
+ padding: 0.5rem;
569
+ font-size: 0.75rem;
570
+ font-weight: 500;
571
+ color: var(--color-on-surface-variant);
572
+ text-align: center;
573
+ border-bottom: 1px solid var(--color-outline-variant);
574
+ }
575
+
576
+ .datetime-picker-time-columns {
577
+ display: flex;
578
+ flex: 1;
579
+ max-height: 16rem;
580
+ }
581
+
582
+ .datetime-picker-time-column {
583
+ flex: 1;
584
+ display: flex;
585
+ flex-direction: column;
586
+ overflow-y: auto;
587
+ border-right: 1px solid var(--color-outline-variant);
588
+ }
589
+
590
+ .datetime-picker-time-column:last-child {
591
+ border-right: none;
592
+ }
593
+
594
+ .datetime-picker-time-option {
595
+ padding: 0.375rem 0.5rem;
596
+ font-size: 0.75rem;
597
+ text-align: center;
598
+ color: var(--color-on-surface);
599
+ background-color: transparent;
600
+ border: none;
601
+ cursor: pointer;
602
+ transition: background-color 150ms ease-in-out;
603
+ }
604
+
605
+ .datetime-picker-time-option:hover {
606
+ background-color: var(--color-surface-container);
607
+ }
608
+
609
+ .datetime-picker-time-option-selected {
610
+ background-color: var(--color-primary);
611
+ color: var(--color-primary-content);
612
+ }
613
+
614
+ .datetime-picker-time-option:disabled {
615
+ opacity: 0.4;
616
+ cursor: not-allowed;
617
+ }
618
+
619
+ /* ========================================
620
+ * DateTime Range Picker
621
+ * ======================================== */
622
+
623
+ .datetime-range-picker {
624
+ position: relative;
625
+ display: inline-block;
626
+ width: 100%;
627
+ }
628
+
629
+ .datetime-range-picker-inputs {
630
+ display: flex;
631
+ align-items: center;
632
+ gap: 0.5rem;
633
+ }
634
+
635
+ .datetime-range-picker-input {
636
+ flex: 1;
637
+ padding: 0.75rem 1rem;
638
+ font-size: 0.875rem;
639
+ color: var(--color-on-surface);
640
+ background-color: var(--color-surface);
641
+ border: 1px solid var(--color-outline);
642
+ border-radius: 0.5rem;
643
+ transition: border-color 150ms ease-in-out;
644
+ }
645
+
646
+ .datetime-range-picker-input:focus {
647
+ outline: none;
648
+ border-color: var(--color-primary);
649
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
650
+ }
651
+
652
+ .datetime-range-picker-dropdown {
653
+ min-width: 40rem;
654
+ }
655
+
656
+ .datetime-range-picker-body {
657
+ display: flex;
658
+ }
659
+
660
+ .datetime-range-picker-panel {
661
+ flex: 1;
662
+ border-right: 1px solid var(--color-outline-variant);
663
+ }
664
+
665
+ .datetime-range-picker-panel:last-child {
666
+ border-right: none;
667
+ }
668
+
669
+ .datetime-range-picker-panel-header {
670
+ padding: 0.5rem 0.75rem;
671
+ font-size: 0.75rem;
672
+ font-weight: 500;
673
+ color: var(--color-on-surface-variant);
674
+ text-align: center;
675
+ background-color: var(--color-surface-container-lowest);
676
+ border-bottom: 1px solid var(--color-outline-variant);
677
+ }
678
+
679
+ /* Inline Datepicker (always visible) */
680
+ .datepicker-inline {
681
+ position: static;
682
+ }
683
+
684
+ .datepicker-inline .datepicker-dropdown,
685
+ .datepicker-dropdown.datepicker-inline {
686
+ position: static;
687
+ display: block;
688
+ opacity: 1;
689
+ visibility: visible;
690
+ transform: none;
691
+ margin-top: 0;
692
+ box-shadow: none;
693
+ }
694
+
695
+ /* Color Variants */
696
+ .datepicker-primary .datepicker-day-selected,
697
+ .datepicker-primary .datepicker-day-range-start,
698
+ .datepicker-primary .datepicker-day-range-end {
699
+ background-color: var(--color-primary);
700
+ color: var(--color-primary-content);
701
+ }
702
+
703
+ .datepicker-secondary .datepicker-day-selected,
704
+ .datepicker-secondary .datepicker-day-range-start,
705
+ .datepicker-secondary .datepicker-day-range-end {
706
+ background-color: var(--color-secondary);
707
+ color: var(--color-secondary-content);
708
+ }
709
+
710
+ .datepicker-tertiary .datepicker-day-selected,
711
+ .datepicker-tertiary .datepicker-day-range-start,
712
+ .datepicker-tertiary .datepicker-day-range-end {
713
+ background-color: var(--color-tertiary);
714
+ color: var(--color-tertiary-content);
715
+ }
716
+
717
+ /* Error State */
718
+ .datepicker-error .datepicker-input,
719
+ .datetime-picker-error .datetime-picker-input {
720
+ border-color: var(--color-error);
721
+ }
722
+
723
+ .datepicker-error .datepicker-input:focus,
724
+ .datetime-picker-error .datetime-picker-input:focus {
725
+ border-color: var(--color-error);
726
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
727
+ }
728
+
729
+ /* Reduce Motion */
730
+ @media (prefers-reduced-motion: reduce) {
731
+ .datepicker-dropdown,
732
+ .datepicker-nav-btn,
733
+ .datepicker-day,
734
+ .datepicker-month,
735
+ .datepicker-year,
736
+ .datepicker-preset,
737
+ .datetime-picker-time-option {
738
+ transition: none;
739
+ }
740
+ }
741
+ }