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