@duskmoon-dev/core 1.19.3 → 1.19.4

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 (101) hide show
  1. package/README.md +1 -1
  2. package/dist/base.css +484 -0
  3. package/dist/components/accordion.css +33 -9
  4. package/dist/components/autocomplete.css +67 -13
  5. package/dist/components/avatar.css +39 -15
  6. package/dist/components/badge.css +15 -3
  7. package/dist/components/card.css +12 -0
  8. package/dist/components/carousel.css +28 -0
  9. package/dist/components/chat.css +15 -11
  10. package/dist/components/checkbox.css +83 -13
  11. package/dist/components/collapse.css +67 -16
  12. package/dist/components/countdown.css +22 -0
  13. package/dist/components/datepicker.css +76 -0
  14. package/dist/components/diff.css +33 -0
  15. package/dist/components/file-input.css +107 -0
  16. package/dist/components/filter-group.css +452 -0
  17. package/dist/components/form-group.css +95 -204
  18. package/dist/components/form.css +1551 -421
  19. package/dist/components/index.css +5991 -6060
  20. package/dist/components/input.css +114 -31
  21. package/dist/components/kbd.css +28 -0
  22. package/dist/components/list.css +22 -3
  23. package/dist/components/otp-input.css +124 -6
  24. package/dist/components/radio.css +70 -0
  25. package/dist/components/range.css +41 -0
  26. package/dist/components/rating.css +39 -12
  27. package/dist/components/select.css +74 -0
  28. package/dist/components/stat.css +40 -0
  29. package/dist/components/switch.css +70 -0
  30. package/dist/components/table.css +8 -0
  31. package/dist/components/textarea.css +74 -0
  32. package/dist/components/timeline.css +40 -25
  33. package/dist/components/toggle-switch.css +165 -0
  34. package/dist/components/toggle.css +198 -32
  35. package/dist/components/validator.css +66 -0
  36. package/dist/effects/aura.css +22 -0
  37. package/dist/effects/hover-3d.css +8 -0
  38. package/dist/effects/hover-gallery.css +14 -0
  39. package/dist/effects/index.css +65 -0
  40. package/dist/effects/text-rotate.css +16 -0
  41. package/dist/esm/components/accordion.js +33 -9
  42. package/dist/esm/components/autocomplete.js +67 -13
  43. package/dist/esm/components/avatar.js +39 -15
  44. package/dist/esm/components/badge.js +15 -3
  45. package/dist/esm/components/card.js +12 -0
  46. package/dist/esm/components/carousel.d.ts +5 -0
  47. package/dist/esm/components/carousel.js +37 -0
  48. package/dist/esm/components/chat.js +15 -11
  49. package/dist/esm/components/checkbox.js +84 -14
  50. package/dist/esm/components/collapse.js +67 -16
  51. package/dist/esm/components/countdown.d.ts +5 -0
  52. package/dist/esm/components/countdown.js +31 -0
  53. package/dist/esm/components/datepicker.js +77 -1
  54. package/dist/esm/components/diff.d.ts +5 -0
  55. package/dist/esm/components/diff.js +42 -0
  56. package/dist/esm/components/file-input.d.ts +5 -0
  57. package/dist/esm/components/file-input.js +116 -0
  58. package/dist/esm/components/filter-group.d.ts +5 -0
  59. package/dist/esm/components/filter-group.js +461 -0
  60. package/dist/esm/components/form-group.js +96 -205
  61. package/dist/esm/components/form.js +1539 -409
  62. package/dist/esm/components/input.js +115 -32
  63. package/dist/esm/components/kbd.d.ts +5 -0
  64. package/dist/esm/components/kbd.js +37 -0
  65. package/dist/esm/components/list.js +22 -3
  66. package/dist/esm/components/otp-input.js +125 -7
  67. package/dist/esm/components/radio.js +71 -1
  68. package/dist/esm/components/range.d.ts +5 -0
  69. package/dist/esm/components/range.js +50 -0
  70. package/dist/esm/components/rating.js +39 -12
  71. package/dist/esm/components/select.js +75 -1
  72. package/dist/esm/components/stat.d.ts +5 -0
  73. package/dist/esm/components/stat.js +49 -0
  74. package/dist/esm/components/switch.js +71 -1
  75. package/dist/esm/components/table.js +8 -0
  76. package/dist/esm/components/textarea.js +75 -1
  77. package/dist/esm/components/timeline.js +40 -25
  78. package/dist/esm/components/toggle-switch.d.ts +5 -0
  79. package/dist/esm/components/toggle-switch.js +174 -0
  80. package/dist/esm/components/toggle.js +198 -32
  81. package/dist/esm/components/validator.d.ts +5 -0
  82. package/dist/esm/components/validator.js +75 -0
  83. package/dist/esm/effects/aura.d.ts +5 -0
  84. package/dist/esm/effects/aura.js +31 -0
  85. package/dist/esm/effects/hover-3d.d.ts +5 -0
  86. package/dist/esm/effects/hover-3d.js +17 -0
  87. package/dist/esm/effects/hover-gallery.d.ts +5 -0
  88. package/dist/esm/effects/hover-gallery.js +23 -0
  89. package/dist/esm/effects/index.d.ts +5 -0
  90. package/dist/esm/effects/index.js +74 -0
  91. package/dist/esm/effects/text-rotate.d.ts +5 -0
  92. package/dist/esm/effects/text-rotate.js +25 -0
  93. package/dist/index.css +5977 -6047
  94. package/dist/index.min.css +1 -1
  95. package/dist/standalone/duskmoonui-themes.css +1 -1
  96. package/dist/standalone/duskmoonui.css +6967 -7028
  97. package/dist/standalone/duskmoonui.js +11 -12
  98. package/dist/standalone/duskmoonui.mjs +11 -12
  99. package/dist/types/types/plugin.d.ts +1 -1
  100. package/dist/types/types/plugin.d.ts.map +1 -1
  101. package/package.json +98 -1
@@ -1,5 +1,73 @@
1
1
  // Auto-generated from checkbox.css
2
- export const css = `/**
2
+ export const css = `/** Opt-in native presentation. Applications own errors, messages and announcements. */
3
+ @layer components {
4
+ /* Compatibility wrapper states are intentionally immediate. */
5
+ :is(.form-group-info, .form-control.info) { --dm-validation-color: var(--color-info); }
6
+ :is(.form-group-warning, .form-control.warning) { --dm-validation-color: var(--color-warning); }
7
+ :is(.form-group-success, .form-control.success) { --dm-validation-color: var(--color-success); }
8
+
9
+ :is(.input, .select, .textarea, .checkbox, .radio, .switch, .toggle, .file-input, .otp-input-field, .otp-code, .datepicker-input):is(.validate :valid, .validate:valid, .validator.validator-success:user-valid):not([aria-invalid="true"]):not(:where(.form-group-error *, .form-control.error *)):not(:disabled) {
10
+ --dm-validation-color: var(--color-success);
11
+ --dm-validation-content: var(--color-success-content);
12
+ }
13
+
14
+ :is(.input, .select, .textarea, .checkbox, .radio, .switch, .toggle, .file-input, .otp-input-field, .otp-code, .datepicker-input):is(.validate :invalid, .validate:invalid, .validator:user-invalid):not(:disabled) {
15
+ --dm-validation-color: var(--color-error);
16
+ --dm-validation-content: var(--color-error-content);
17
+ }
18
+
19
+ :is(.form-group-error, .form-control.error) {
20
+ --dm-validation-color: var(--color-error);
21
+ --dm-validation-content: var(--color-error-content);
22
+ }
23
+
24
+ /* Higher specificity than native states, including server-invalid + user-valid. */
25
+ :is(.input, .select, .textarea, .checkbox, .radio, .switch, .toggle, .file-input, .otp-input-field, .otp-code, .datepicker-input):is([aria-invalid="true"], .form-group-error *, .form-control.error *):not(:disabled):is(:focus, :not(:focus)) {
26
+ --dm-validation-color: var(--color-error);
27
+ --dm-validation-content: var(--color-error-content);
28
+ }
29
+
30
+ /* This shared selector wins over filled/ghost focus and semantic modifiers. */
31
+ :is(.input, .select, .textarea, .checkbox, .radio, .switch, .toggle, .file-input, .otp-input-field, .otp-code, .datepicker-input):is([aria-invalid="true"], .validator:user-invalid, .validator.validator-success:user-valid, .validate :invalid, .validate :valid, .validate:invalid, .validate:valid, .form-group-error *, .form-group-success *, .form-group-warning *, .form-group-info *, .form-control.error *, .form-control.success *, .form-control.warning *, .form-control.info *):not(:disabled) {
32
+ color: var(--dm-validation-color);
33
+ border-color: var(--dm-validation-color);
34
+ --checkbox-color: var(--dm-validation-color);
35
+ --radio-color: var(--dm-validation-color);
36
+ --switch-color: var(--dm-validation-color);
37
+ --switch-content-color: var(--dm-validation-content, var(--color-primary-content));
38
+ --toggle-color: var(--dm-validation-color);
39
+ }
40
+
41
+ :is(.input, .select, .textarea, .checkbox, .radio, .switch, .toggle, .file-input, .otp-input-field, .otp-code, .datepicker-input):is([aria-invalid="true"], .validator:user-invalid, .validator.validator-success:user-valid, .validate :invalid, .validate :valid, .validate:invalid, .validate:valid, .form-group-error *, .form-group-success *, .form-group-warning *, .form-group-info *, .form-control.error *, .form-control.success *, .form-control.warning *, .form-control.info *):not(:disabled):focus {
42
+ border-color: var(--dm-validation-color);
43
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--dm-validation-color) 20%, transparent);
44
+ }
45
+
46
+ :is(.form-group-error, .form-control.error) :is(.form-label, .label-text) { color: var(--color-error); }
47
+ :is(.form-group-success, .form-control.success) :is(.form-label, .label-text) { color: var(--color-success); }
48
+ :is(.form-group-warning, .form-control.warning) :is(.form-label, .label-text) { color: var(--color-warning); }
49
+ :is(.form-group-info, .form-control.info) :is(.form-label, .label-text) { color: var(--color-info); }
50
+
51
+ .validator-hint { font-size: 0.75rem; color: var(--color-on-surface-variant); }
52
+ .validator-error { display: none; font-size: 0.75rem; color: var(--color-error); }
53
+ /* Keep OTP actions stationary when blur reveals an error during a click. */
54
+ .otp-code ~ .validator-error { display: block; visibility: hidden; }
55
+ :is(.form-group, .form-control):has(:is([aria-invalid="true"], .validator:user-invalid, .validate :invalid, .validate:invalid):not(:disabled)) > .validator-error,
56
+ :is(.form-group-error, .form-control.error) > .validator-error { display: block; visibility: visible; }
57
+
58
+ @media (forced-colors: active) {
59
+ :is(input, select, textarea):is(.input, .select, .textarea, .checkbox, .radio, .switch, .toggle, .file-input, .otp-input-field, .otp-code, .datepicker-input):focus-visible {
60
+ outline: 2px solid Highlight;
61
+ outline-offset: 2px;
62
+ }
63
+ input:is(.checkbox, .radio, .switch, .toggle) { appearance: auto; }
64
+ input:is(.checkbox, .radio, .switch, .toggle)::before,
65
+ input:is(.checkbox, .radio, .switch, .toggle)::after { content: none; }
66
+ }
67
+ }
68
+
69
+
70
+ /**
3
71
  * Checkbox Component Styles
4
72
  * DuskMoonUI - Material Design 3 inspired checkbox
5
73
  *
@@ -8,6 +76,8 @@ export const css = `/**
8
76
  */
9
77
 
10
78
  @layer components {
79
+ :where(.checkbox) { box-sizing: border-box; }
80
+
11
81
  /* Base Checkbox - applied directly to input[type="checkbox"] */
12
82
  .checkbox {
13
83
  --checkbox-size: 1.25rem;
@@ -36,8 +106,8 @@ export const css = `/**
36
106
  height: 0.35em;
37
107
  transform: scale(0) rotate(-45deg);
38
108
  transform-origin: center;
39
- border-bottom: 2px solid var(--color-primary-content);
40
- border-left: 2px solid var(--color-primary-content);
109
+ border-bottom: 2px solid var(--dm-validation-content, var(--color-primary-content));
110
+ border-left: 2px solid var(--dm-validation-content, var(--color-primary-content));
41
111
  transition: transform 150ms ease-in-out;
42
112
  }
43
113
 
@@ -60,7 +130,7 @@ export const css = `/**
60
130
  .checkbox:indeterminate::before {
61
131
  width: 0.5em;
62
132
  height: 0;
63
- border-bottom: 2px solid var(--color-primary-content);
133
+ border-bottom: 2px solid var(--dm-validation-content, var(--color-primary-content));
64
134
  border-left: 0;
65
135
  transform: scale(1) rotate(0deg);
66
136
  }
@@ -122,7 +192,7 @@ export const css = `/**
122
192
 
123
193
  .checkbox-primary:checked::before,
124
194
  .checkbox-primary:indeterminate::before {
125
- border-color: var(--color-primary-content);
195
+ border-color: var(--dm-validation-content, var(--color-primary-content));
126
196
  }
127
197
 
128
198
  .checkbox-secondary {
@@ -131,7 +201,7 @@ export const css = `/**
131
201
 
132
202
  .checkbox-secondary:checked::before,
133
203
  .checkbox-secondary:indeterminate::before {
134
- border-color: var(--color-secondary-content);
204
+ border-color: var(--dm-validation-content, var(--color-secondary-content));
135
205
  }
136
206
 
137
207
  .checkbox-tertiary {
@@ -140,7 +210,7 @@ export const css = `/**
140
210
 
141
211
  .checkbox-tertiary:checked::before,
142
212
  .checkbox-tertiary:indeterminate::before {
143
- border-color: var(--color-tertiary-content);
213
+ border-color: var(--dm-validation-content, var(--color-tertiary-content));
144
214
  }
145
215
 
146
216
  .checkbox-success {
@@ -149,7 +219,7 @@ export const css = `/**
149
219
 
150
220
  .checkbox-success:checked::before,
151
221
  .checkbox-success:indeterminate::before {
152
- border-color: var(--color-success-content);
222
+ border-color: var(--dm-validation-content, var(--color-success-content));
153
223
  }
154
224
 
155
225
  .checkbox-warning {
@@ -158,7 +228,7 @@ export const css = `/**
158
228
 
159
229
  .checkbox-warning:checked::before,
160
230
  .checkbox-warning:indeterminate::before {
161
- border-color: var(--color-warning-content);
231
+ border-color: var(--dm-validation-content, var(--color-warning-content));
162
232
  }
163
233
 
164
234
  .checkbox-error {
@@ -167,7 +237,7 @@ export const css = `/**
167
237
 
168
238
  .checkbox-error:checked::before,
169
239
  .checkbox-error:indeterminate::before {
170
- border-color: var(--color-error-content);
240
+ border-color: var(--dm-validation-content, var(--color-error-content));
171
241
  }
172
242
 
173
243
  .checkbox-info {
@@ -176,7 +246,7 @@ export const css = `/**
176
246
 
177
247
  .checkbox-info:checked::before,
178
248
  .checkbox-info:indeterminate::before {
179
- border-color: var(--color-info-content);
249
+ border-color: var(--dm-validation-content, var(--color-info-content));
180
250
  }
181
251
 
182
252
  .checkbox-accent {
@@ -185,7 +255,7 @@ export const css = `/**
185
255
 
186
256
  .checkbox-accent:checked::before,
187
257
  .checkbox-accent:indeterminate::before {
188
- border-color: var(--color-accent-content);
258
+ border-color: var(--dm-validation-content, var(--color-accent-content));
189
259
  }
190
260
 
191
261
  .checkbox-neutral {
@@ -194,7 +264,7 @@ export const css = `/**
194
264
 
195
265
  .checkbox-neutral:checked::before,
196
266
  .checkbox-neutral:indeterminate::before {
197
- border-color: var(--color-neutral-content);
267
+ border-color: var(--dm-validation-content, var(--color-neutral-content));
198
268
  }
199
269
 
200
270
  .checkbox-base {
@@ -203,7 +273,7 @@ export const css = `/**
203
273
 
204
274
  .checkbox-base:checked::before,
205
275
  .checkbox-base:indeterminate::before {
206
- border-color: var(--color-base-content);
276
+ border-color: var(--dm-validation-content, var(--color-base-content));
207
277
  }
208
278
 
209
279
  /* Ghost Variant — borderless unchecked state */
@@ -29,7 +29,7 @@ export const css = `/**
29
29
  border: none;
30
30
  cursor: pointer;
31
31
  transition: background-color 150ms ease-in-out;
32
- text-align: left;
32
+ text-align: start;
33
33
  }
34
34
 
35
35
  .collapse-trigger:hover {
@@ -66,33 +66,36 @@ export const css = `/**
66
66
  }
67
67
 
68
68
  /* Open State */
69
- .collapse-open .collapse-content {
69
+ .collapse:not(details):not(.collapse-closed).collapse-open > .collapse-content,
70
+ details.collapse[open] > .collapse-content {
70
71
  grid-template-rows: 1fr;
71
72
  }
72
73
 
73
- .collapse-open .collapse-content > * {
74
+ .collapse:not(details):not(.collapse-closed).collapse-open > .collapse-content > *,
75
+ details.collapse[open] > .collapse-content > * {
74
76
  padding: 0 1rem 1rem;
75
77
  }
76
78
 
77
- .collapse-open .collapse-icon {
79
+ .collapse:not(details):not(.collapse-closed).collapse-open > .collapse-trigger > .collapse-icon,
80
+ details.collapse[open] > .collapse-trigger > .collapse-icon {
78
81
  transform: rotate(180deg);
79
82
  }
80
83
 
81
84
  /* Closed State (explicit) */
82
- .collapse-closed .collapse-content {
85
+ .collapse:not(details).collapse-closed > .collapse-content {
83
86
  grid-template-rows: 0fr;
84
87
  }
85
88
 
86
89
  /* Legacy show class for backwards compatibility */
87
- .collapse.show .collapse-content {
90
+ .collapse:not(details):not(.collapse-closed).show > .collapse-content {
88
91
  grid-template-rows: 1fr;
89
92
  }
90
93
 
91
- .collapse.show .collapse-content > * {
94
+ .collapse:not(details):not(.collapse-closed).show > .collapse-content > * {
92
95
  padding: 0 1rem 1rem;
93
96
  }
94
97
 
95
- .collapse.show .collapse-icon {
98
+ .collapse:not(details):not(.collapse-closed).show > .collapse-trigger > .collapse-icon {
96
99
  transform: rotate(180deg);
97
100
  }
98
101
 
@@ -179,10 +182,8 @@ export const css = `/**
179
182
  color: var(--color-on-surface-variant);
180
183
  }
181
184
 
182
- .collapse-card.collapse-open .collapse-inner,
183
- .collapse-card.collapse-open .collapse-content > *,
184
- .collapse-card.show .collapse-inner,
185
- .collapse-card.show .collapse-content > * {
185
+ .collapse-card:not(details):not(.collapse-closed):is(.collapse-open, .show) > .collapse-content > *,
186
+ details.collapse-card[open] > .collapse-content > * {
186
187
  padding: 0 1rem 1rem;
187
188
  }
188
189
 
@@ -292,7 +293,8 @@ export const css = `/**
292
293
  padding: 0 0.75rem;
293
294
  }
294
295
 
295
- .collapse-sm.collapse-open .collapse-content > * {
296
+ .collapse-sm:not(details):not(.collapse-closed):is(.collapse-open, .show) > .collapse-content > *,
297
+ details.collapse-sm[open] > .collapse-content > * {
296
298
  padding: 0 0.75rem 0.75rem;
297
299
  }
298
300
 
@@ -305,7 +307,8 @@ export const css = `/**
305
307
  padding: 0 1.25rem;
306
308
  }
307
309
 
308
- .collapse-lg.collapse-open .collapse-content > * {
310
+ .collapse-lg:not(details):not(.collapse-closed):is(.collapse-open, .show) > .collapse-content > *,
311
+ details.collapse-lg[open] > .collapse-content > * {
309
312
  padding: 0 1.25rem 1.25rem;
310
313
  }
311
314
 
@@ -346,13 +349,13 @@ export const css = `/**
346
349
  }
347
350
 
348
351
  /* Slide Animation */
349
- .collapse-slide .collapse-content > * {
352
+ .collapse-slide > .collapse-content > * {
350
353
  transform: translateY(-0.5rem);
351
354
  opacity: 0;
352
355
  transition: transform 300ms ease-in-out, opacity 200ms ease-in-out;
353
356
  }
354
357
 
355
- .collapse-slide.collapse-open .collapse-content > * {
358
+ .collapse-slide:not(details):not(.collapse-closed):is(.collapse-open, .show) > .collapse-content > * {
356
359
  transform: translateY(0);
357
360
  opacity: 1;
358
361
  }
@@ -496,6 +499,54 @@ export const css = `/**
496
499
  transition: height 300ms ease-in-out;
497
500
  }
498
501
 
502
+ /* Native state is authoritative; controlled aliases never select native items. */
503
+ details.collapse { display: block; }
504
+ details.collapse > summary { list-style: none; }
505
+ details.collapse > summary::-webkit-details-marker { display: none; }
506
+ .collapse:not(details):not(.collapse-open):not(.show) > .collapse-content,
507
+ .collapse:not(details).collapse-closed > .collapse-content,
508
+ .collapse-content[hidden] { display: none; }
509
+ .collapse-content > * { min-block-size: 0; min-inline-size: 0; overflow-wrap: anywhere; }
510
+ .collapse.collapse-fade { opacity: 1; }
511
+ .collapse.collapse-fade > .collapse-content { opacity: 0; }
512
+ .collapse.collapse-fade:not(details):not(.collapse-closed):is(.show, .collapse-open) > .collapse-content,
513
+ details.collapse.collapse-fade[open] > .collapse-content { opacity: 1; }
514
+ .collapse.collapse-slide:not(details):not(.collapse-closed):is(.show, .collapse-open) > .collapse-content > *,
515
+ details.collapse.collapse-slide[open] > .collapse-content > * { transform: none; opacity: 1; }
516
+ .collapse.collapse-horizontal { display: block; }
517
+ .collapse.collapse-horizontal > .collapse-content { grid-template-rows: 1fr; grid-template-columns: 0fr; white-space: normal; }
518
+ .collapse.collapse-horizontal:not(details):not(.collapse-closed):is(.show, .collapse-open) > .collapse-content,
519
+ details.collapse.collapse-horizontal[open] > .collapse-content { grid-template-columns: 1fr; }
520
+ .collapse.collapse-horizontal-fixed { width: auto; }
521
+ .collapse.collapse-horizontal-fixed > .collapse-content { inline-size: 0; }
522
+ .collapse.collapse-horizontal-fixed:not(details):not(.collapse-closed):is(.show, .collapse-open) > .collapse-content,
523
+ details.collapse.collapse-horizontal-fixed[open] > .collapse-content { inline-size: min(100%, var(--collapse-width, 20rem)); }
524
+ details.collapse.collapse-maxheight { max-height: none; }
525
+ .collapse.collapse-maxheight:not(details):not(.collapse-closed):is(.show, .collapse-open) { max-height: var(--collapse-max-height, 100rem); }
526
+ .collapse.collapse-maxheight:not(details).collapse-closed { max-height: 0; }
527
+
528
+ /* Native disclosure animation; older browsers retain immediate native behavior. */
529
+ @supports (interpolate-size: allow-keywords) {
530
+ @media (prefers-reduced-motion: no-preference) {
531
+ details.collapse::details-content {
532
+ interpolate-size: allow-keywords;
533
+ block-size: 0;
534
+ overflow: clip;
535
+ transition: block-size 300ms ease-in-out, content-visibility 300ms allow-discrete;
536
+ }
537
+ details.collapse[open]::details-content { block-size: auto; }
538
+ .collapse:not(details) > .collapse-content {
539
+ interpolate-size: allow-keywords;
540
+ block-size: 0;
541
+ transition: block-size 300ms ease-in-out, display 300ms allow-discrete;
542
+ }
543
+ .collapse:not(details):not(.collapse-closed):is(.show, .collapse-open) > .collapse-content:not([hidden]) { block-size: auto; }
544
+ @starting-style {
545
+ .collapse:not(details):not(.collapse-closed):is(.show, .collapse-open) > .collapse-content:not([hidden]) { block-size: 0; }
546
+ }
547
+ }
548
+ }
549
+
499
550
  /* Reduce Motion */
500
551
  @media (prefers-reduced-motion: reduce) {
501
552
  .collapse,
@@ -0,0 +1,5 @@
1
+ // Auto-generated type declaration for countdown
2
+ export declare const css: string;
3
+ export declare const styles: CSSStyleSheet | null;
4
+ declare const sheet: CSSStyleSheet | null;
5
+ export default sheet;
@@ -0,0 +1,31 @@
1
+ // Auto-generated from countdown.css
2
+ export const css = `@layer components {
3
+ .countdown { display: inline-flex; flex-wrap: wrap; gap: 0.5rem; align-items: baseline; color: var(--color-on-surface); font-variant-numeric: tabular-nums; }
4
+ .countdown-value { display: inline-block; min-inline-size: 2ch; text-align: center; font-size: 2rem; line-height: 1.2; overflow-wrap: anywhere; }
5
+ .countdown-sm .countdown-value { font-size: 1rem; }
6
+ .countdown-lg .countdown-value { font-size: 3rem; }
7
+ @media (prefers-reduced-motion: no-preference) { .countdown-transition .countdown-value { transition: color 150ms ease; } }
8
+ @media (prefers-reduced-motion: no-preference) {
9
+ .countdown-animated .countdown-value.countdown-tick { animation: countdown-tick 240ms ease-out; }
10
+ }
11
+ @keyframes countdown-tick {
12
+ from { transform: translateY(-0.2em); opacity: 0.35; }
13
+ to { transform: translateY(0); opacity: 1; }
14
+ }
15
+ @media print { .countdown-value.countdown-tick { animation: none; } }
16
+ .countdown-primary { color: var(--color-primary); }
17
+ .countdown-secondary { color: var(--color-secondary); }
18
+ .countdown-tertiary { color: var(--color-tertiary); }
19
+ .countdown-info { color: var(--color-info); }
20
+ .countdown-success { color: var(--color-success); }
21
+ .countdown-warning { color: var(--color-warning); }
22
+ .countdown-error { color: var(--color-error); }
23
+ }
24
+ `;
25
+
26
+ const sheet = typeof CSSStyleSheet !== 'undefined' ? new CSSStyleSheet() : null;
27
+ if (sheet) {
28
+ sheet.replaceSync(css);
29
+ }
30
+ export const styles = sheet;
31
+ export default sheet;
@@ -1,10 +1,80 @@
1
1
  // Auto-generated from datepicker.css
2
- export const css = `/**
2
+ export const css = `/** Opt-in native presentation. Applications own errors, messages and announcements. */
3
+ @layer components {
4
+ /* Compatibility wrapper states are intentionally immediate. */
5
+ :is(.form-group-info, .form-control.info) { --dm-validation-color: var(--color-info); }
6
+ :is(.form-group-warning, .form-control.warning) { --dm-validation-color: var(--color-warning); }
7
+ :is(.form-group-success, .form-control.success) { --dm-validation-color: var(--color-success); }
8
+
9
+ :is(.input, .select, .textarea, .checkbox, .radio, .switch, .toggle, .file-input, .otp-input-field, .otp-code, .datepicker-input):is(.validate :valid, .validate:valid, .validator.validator-success:user-valid):not([aria-invalid="true"]):not(:where(.form-group-error *, .form-control.error *)):not(:disabled) {
10
+ --dm-validation-color: var(--color-success);
11
+ --dm-validation-content: var(--color-success-content);
12
+ }
13
+
14
+ :is(.input, .select, .textarea, .checkbox, .radio, .switch, .toggle, .file-input, .otp-input-field, .otp-code, .datepicker-input):is(.validate :invalid, .validate:invalid, .validator:user-invalid):not(:disabled) {
15
+ --dm-validation-color: var(--color-error);
16
+ --dm-validation-content: var(--color-error-content);
17
+ }
18
+
19
+ :is(.form-group-error, .form-control.error) {
20
+ --dm-validation-color: var(--color-error);
21
+ --dm-validation-content: var(--color-error-content);
22
+ }
23
+
24
+ /* Higher specificity than native states, including server-invalid + user-valid. */
25
+ :is(.input, .select, .textarea, .checkbox, .radio, .switch, .toggle, .file-input, .otp-input-field, .otp-code, .datepicker-input):is([aria-invalid="true"], .form-group-error *, .form-control.error *):not(:disabled):is(:focus, :not(:focus)) {
26
+ --dm-validation-color: var(--color-error);
27
+ --dm-validation-content: var(--color-error-content);
28
+ }
29
+
30
+ /* This shared selector wins over filled/ghost focus and semantic modifiers. */
31
+ :is(.input, .select, .textarea, .checkbox, .radio, .switch, .toggle, .file-input, .otp-input-field, .otp-code, .datepicker-input):is([aria-invalid="true"], .validator:user-invalid, .validator.validator-success:user-valid, .validate :invalid, .validate :valid, .validate:invalid, .validate:valid, .form-group-error *, .form-group-success *, .form-group-warning *, .form-group-info *, .form-control.error *, .form-control.success *, .form-control.warning *, .form-control.info *):not(:disabled) {
32
+ color: var(--dm-validation-color);
33
+ border-color: var(--dm-validation-color);
34
+ --checkbox-color: var(--dm-validation-color);
35
+ --radio-color: var(--dm-validation-color);
36
+ --switch-color: var(--dm-validation-color);
37
+ --switch-content-color: var(--dm-validation-content, var(--color-primary-content));
38
+ --toggle-color: var(--dm-validation-color);
39
+ }
40
+
41
+ :is(.input, .select, .textarea, .checkbox, .radio, .switch, .toggle, .file-input, .otp-input-field, .otp-code, .datepicker-input):is([aria-invalid="true"], .validator:user-invalid, .validator.validator-success:user-valid, .validate :invalid, .validate :valid, .validate:invalid, .validate:valid, .form-group-error *, .form-group-success *, .form-group-warning *, .form-group-info *, .form-control.error *, .form-control.success *, .form-control.warning *, .form-control.info *):not(:disabled):focus {
42
+ border-color: var(--dm-validation-color);
43
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--dm-validation-color) 20%, transparent);
44
+ }
45
+
46
+ :is(.form-group-error, .form-control.error) :is(.form-label, .label-text) { color: var(--color-error); }
47
+ :is(.form-group-success, .form-control.success) :is(.form-label, .label-text) { color: var(--color-success); }
48
+ :is(.form-group-warning, .form-control.warning) :is(.form-label, .label-text) { color: var(--color-warning); }
49
+ :is(.form-group-info, .form-control.info) :is(.form-label, .label-text) { color: var(--color-info); }
50
+
51
+ .validator-hint { font-size: 0.75rem; color: var(--color-on-surface-variant); }
52
+ .validator-error { display: none; font-size: 0.75rem; color: var(--color-error); }
53
+ /* Keep OTP actions stationary when blur reveals an error during a click. */
54
+ .otp-code ~ .validator-error { display: block; visibility: hidden; }
55
+ :is(.form-group, .form-control):has(:is([aria-invalid="true"], .validator:user-invalid, .validate :invalid, .validate:invalid):not(:disabled)) > .validator-error,
56
+ :is(.form-group-error, .form-control.error) > .validator-error { display: block; visibility: visible; }
57
+
58
+ @media (forced-colors: active) {
59
+ :is(input, select, textarea):is(.input, .select, .textarea, .checkbox, .radio, .switch, .toggle, .file-input, .otp-input-field, .otp-code, .datepicker-input):focus-visible {
60
+ outline: 2px solid Highlight;
61
+ outline-offset: 2px;
62
+ }
63
+ input:is(.checkbox, .radio, .switch, .toggle) { appearance: auto; }
64
+ input:is(.checkbox, .radio, .switch, .toggle)::before,
65
+ input:is(.checkbox, .radio, .switch, .toggle)::after { content: none; }
66
+ }
67
+ }
68
+
69
+
70
+ /**
3
71
  * Datepicker Component Styles
4
72
  * DuskMoonUI - Material Design 3 inspired datepicker system
5
73
  */
6
74
 
7
75
  @layer components {
76
+ :where(.datepicker, .datepicker-input) { box-sizing: border-box; }
77
+
8
78
  /* Datepicker Container */
9
79
  .datepicker {
10
80
  position: relative;
@@ -197,6 +267,9 @@ export const css = `/**
197
267
  padding: 0.5rem;
198
268
  }
199
269
 
270
+ .datepicker-calendar > :is(.datepicker-weekdays, .datepicker-days) { grid-column: 1 / -1; }
271
+ .datepicker-trigger:focus-visible { outline: 2px solid currentColor; outline-offset: 2px; }
272
+
200
273
  /* Weekday Headers */
201
274
  .datepicker-weekdays {
202
275
  display: grid;
@@ -679,6 +752,7 @@ export const css = `/**
679
752
  /* Inline Datepicker (always visible) */
680
753
  .datepicker-inline {
681
754
  position: static;
755
+ max-inline-size: 22rem;
682
756
  }
683
757
 
684
758
  .datepicker-inline .datepicker-dropdown,
@@ -690,6 +764,8 @@ export const css = `/**
690
764
  transform: none;
691
765
  margin-top: 0;
692
766
  box-shadow: none;
767
+ min-inline-size: 0;
768
+ max-inline-size: 100%;
693
769
  }
694
770
 
695
771
  /* Input Color Variants */
@@ -0,0 +1,5 @@
1
+ // Auto-generated type declaration for diff
2
+ export declare const css: string;
3
+ export declare const styles: CSSStyleSheet | null;
4
+ declare const sheet: CSSStyleSheet | null;
5
+ export default sheet;
@@ -0,0 +1,42 @@
1
+ // Auto-generated from diff.css
2
+ export const css = `@layer components {
3
+ .diff {
4
+ --diff-position: 50%;
5
+ display: grid;
6
+ position: relative;
7
+ isolation: isolate;
8
+ aspect-ratio: var(--diff-ratio, 16 / 9);
9
+ max-inline-size: 100%;
10
+ overflow: hidden;
11
+ color: var(--color-on-surface);
12
+ background: var(--color-surface-container);
13
+ border-radius: var(--radius-md);
14
+ }
15
+ .diff-before, .diff-after { grid-area: 1 / 1; min-inline-size: 0; min-block-size: 0; overflow: hidden; }
16
+ .diff-before { z-index: 1; clip-path: inset(0 calc(100% - clamp(0%, var(--diff-position), 100%)) 0 0); }
17
+ .diff:dir(rtl) > .diff-before { clip-path: inset(0 0 0 calc(100% - clamp(0%, var(--diff-position), 100%))); }
18
+ .diff img { display: block; inline-size: 100%; block-size: 100%; object-fit: cover; }
19
+ .diff-label { position: absolute; inset-block-start: 0.5rem; inset-inline-start: 0.5rem; padding: 0.25rem 0.5rem; background: var(--color-surface); color: var(--color-on-surface); border-radius: var(--radius-sm); }
20
+ .diff-after .diff-label { inset-inline-start: auto; inset-inline-end: 0.5rem; }
21
+ .diff-static { aspect-ratio: auto; grid-template-columns: repeat(2, minmax(0, 1fr)); }
22
+ .diff.diff-static > .diff-before, .diff-static > .diff-after { grid-area: auto; clip-path: none; position: relative; }
23
+ @media print {
24
+ .diff { aspect-ratio: auto; grid-template-columns: repeat(2, minmax(0, 1fr)); overflow: visible; }
25
+ .diff > .diff-before, .diff:dir(rtl) > .diff-before, .diff > .diff-after { grid-area: auto; clip-path: none; position: relative; }
26
+ }
27
+ .diff-primary { color: var(--color-primary); }
28
+ .diff-secondary { color: var(--color-secondary); }
29
+ .diff-tertiary { color: var(--color-tertiary); }
30
+ .diff-info { color: var(--color-info); }
31
+ .diff-success { color: var(--color-success); }
32
+ .diff-warning { color: var(--color-warning); }
33
+ .diff-error { color: var(--color-error); }
34
+ }
35
+ `;
36
+
37
+ const sheet = typeof CSSStyleSheet !== 'undefined' ? new CSSStyleSheet() : null;
38
+ if (sheet) {
39
+ sheet.replaceSync(css);
40
+ }
41
+ export const styles = sheet;
42
+ export default sheet;
@@ -0,0 +1,5 @@
1
+ // Auto-generated type declaration for file-input
2
+ export declare const css: string;
3
+ export declare const styles: CSSStyleSheet | null;
4
+ declare const sheet: CSSStyleSheet | null;
5
+ export default sheet;
@@ -0,0 +1,116 @@
1
+ // Auto-generated from file-input.css
2
+ export const css = `/** Opt-in native presentation. Applications own errors, messages and announcements. */
3
+ @layer components {
4
+ /* Compatibility wrapper states are intentionally immediate. */
5
+ :is(.form-group-info, .form-control.info) { --dm-validation-color: var(--color-info); }
6
+ :is(.form-group-warning, .form-control.warning) { --dm-validation-color: var(--color-warning); }
7
+ :is(.form-group-success, .form-control.success) { --dm-validation-color: var(--color-success); }
8
+
9
+ :is(.input, .select, .textarea, .checkbox, .radio, .switch, .toggle, .file-input, .otp-input-field, .otp-code, .datepicker-input):is(.validate :valid, .validate:valid, .validator.validator-success:user-valid):not([aria-invalid="true"]):not(:where(.form-group-error *, .form-control.error *)):not(:disabled) {
10
+ --dm-validation-color: var(--color-success);
11
+ --dm-validation-content: var(--color-success-content);
12
+ }
13
+
14
+ :is(.input, .select, .textarea, .checkbox, .radio, .switch, .toggle, .file-input, .otp-input-field, .otp-code, .datepicker-input):is(.validate :invalid, .validate:invalid, .validator:user-invalid):not(:disabled) {
15
+ --dm-validation-color: var(--color-error);
16
+ --dm-validation-content: var(--color-error-content);
17
+ }
18
+
19
+ :is(.form-group-error, .form-control.error) {
20
+ --dm-validation-color: var(--color-error);
21
+ --dm-validation-content: var(--color-error-content);
22
+ }
23
+
24
+ /* Higher specificity than native states, including server-invalid + user-valid. */
25
+ :is(.input, .select, .textarea, .checkbox, .radio, .switch, .toggle, .file-input, .otp-input-field, .otp-code, .datepicker-input):is([aria-invalid="true"], .form-group-error *, .form-control.error *):not(:disabled):is(:focus, :not(:focus)) {
26
+ --dm-validation-color: var(--color-error);
27
+ --dm-validation-content: var(--color-error-content);
28
+ }
29
+
30
+ /* This shared selector wins over filled/ghost focus and semantic modifiers. */
31
+ :is(.input, .select, .textarea, .checkbox, .radio, .switch, .toggle, .file-input, .otp-input-field, .otp-code, .datepicker-input):is([aria-invalid="true"], .validator:user-invalid, .validator.validator-success:user-valid, .validate :invalid, .validate :valid, .validate:invalid, .validate:valid, .form-group-error *, .form-group-success *, .form-group-warning *, .form-group-info *, .form-control.error *, .form-control.success *, .form-control.warning *, .form-control.info *):not(:disabled) {
32
+ color: var(--dm-validation-color);
33
+ border-color: var(--dm-validation-color);
34
+ --checkbox-color: var(--dm-validation-color);
35
+ --radio-color: var(--dm-validation-color);
36
+ --switch-color: var(--dm-validation-color);
37
+ --switch-content-color: var(--dm-validation-content, var(--color-primary-content));
38
+ --toggle-color: var(--dm-validation-color);
39
+ }
40
+
41
+ :is(.input, .select, .textarea, .checkbox, .radio, .switch, .toggle, .file-input, .otp-input-field, .otp-code, .datepicker-input):is([aria-invalid="true"], .validator:user-invalid, .validator.validator-success:user-valid, .validate :invalid, .validate :valid, .validate:invalid, .validate:valid, .form-group-error *, .form-group-success *, .form-group-warning *, .form-group-info *, .form-control.error *, .form-control.success *, .form-control.warning *, .form-control.info *):not(:disabled):focus {
42
+ border-color: var(--dm-validation-color);
43
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--dm-validation-color) 20%, transparent);
44
+ }
45
+
46
+ :is(.form-group-error, .form-control.error) :is(.form-label, .label-text) { color: var(--color-error); }
47
+ :is(.form-group-success, .form-control.success) :is(.form-label, .label-text) { color: var(--color-success); }
48
+ :is(.form-group-warning, .form-control.warning) :is(.form-label, .label-text) { color: var(--color-warning); }
49
+ :is(.form-group-info, .form-control.info) :is(.form-label, .label-text) { color: var(--color-info); }
50
+
51
+ .validator-hint { font-size: 0.75rem; color: var(--color-on-surface-variant); }
52
+ .validator-error { display: none; font-size: 0.75rem; color: var(--color-error); }
53
+ /* Keep OTP actions stationary when blur reveals an error during a click. */
54
+ .otp-code ~ .validator-error { display: block; visibility: hidden; }
55
+ :is(.form-group, .form-control):has(:is([aria-invalid="true"], .validator:user-invalid, .validate :invalid, .validate:invalid):not(:disabled)) > .validator-error,
56
+ :is(.form-group-error, .form-control.error) > .validator-error { display: block; visibility: visible; }
57
+
58
+ @media (forced-colors: active) {
59
+ :is(input, select, textarea):is(.input, .select, .textarea, .checkbox, .radio, .switch, .toggle, .file-input, .otp-input-field, .otp-code, .datepicker-input):focus-visible {
60
+ outline: 2px solid Highlight;
61
+ outline-offset: 2px;
62
+ }
63
+ input:is(.checkbox, .radio, .switch, .toggle) { appearance: auto; }
64
+ input:is(.checkbox, .radio, .switch, .toggle)::before,
65
+ input:is(.checkbox, .radio, .switch, .toggle)::after { content: none; }
66
+ }
67
+ }
68
+
69
+
70
+ @layer components {
71
+ .file-input {
72
+ display: block;
73
+ box-sizing: border-box;
74
+ width: 100%;
75
+ min-width: 0;
76
+ padding: 0;
77
+ font: inherit;
78
+ color: var(--color-on-surface);
79
+ background-color: var(--color-surface);
80
+ border: 1px solid currentColor;
81
+ border-radius: var(--radius-sm);
82
+ cursor: pointer;
83
+ }
84
+ .file-input::file-selector-button {
85
+ padding: 0.75rem 1rem;
86
+ margin-inline-end: 0.75rem;
87
+ font: inherit;
88
+ color: inherit;
89
+ background-color: var(--color-surface-container);
90
+ border: none;
91
+ border-inline-end: 1px solid currentColor;
92
+ cursor: inherit;
93
+ }
94
+ .file-input:hover:not(:disabled)::file-selector-button { background-color: var(--color-surface-container-high); }
95
+ .file-input:focus-visible { outline: none; box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent); }
96
+ .file-input:disabled { opacity: 0.5; cursor: not-allowed; }
97
+ .file-input-xs::file-selector-button { padding: 0.375rem 0.625rem; }
98
+ .file-input-sm::file-selector-button { padding: 0.5rem 0.75rem; }
99
+ .file-input-lg::file-selector-button { padding: 1rem 1.25rem; }
100
+ .file-input-primary { color: var(--color-primary); }
101
+ .file-input-secondary { color: var(--color-secondary); }
102
+ .file-input-tertiary { color: var(--color-tertiary); }
103
+ .file-input-info { color: var(--color-info); }
104
+ .file-input-success { color: var(--color-success); }
105
+ .file-input-warning { color: var(--color-warning); }
106
+ .file-input-error { color: var(--color-error); }
107
+ .file-input-ghost { border-color: transparent; }
108
+ }
109
+ `;
110
+
111
+ const sheet = typeof CSSStyleSheet !== 'undefined' ? new CSSStyleSheet() : null;
112
+ if (sheet) {
113
+ sheet.replaceSync(css);
114
+ }
115
+ export const styles = sheet;
116
+ export default sheet;