@duskmoon-dev/core 1.19.2 → 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.
- package/README.md +1 -1
- package/dist/base.css +484 -0
- package/dist/components/accordion.css +33 -9
- package/dist/components/autocomplete.css +67 -13
- package/dist/components/avatar.css +39 -15
- package/dist/components/badge.css +15 -3
- package/dist/components/card.css +12 -0
- package/dist/components/carousel.css +28 -0
- package/dist/components/chat.css +15 -11
- package/dist/components/checkbox.css +83 -13
- package/dist/components/collapse.css +67 -16
- package/dist/components/countdown.css +22 -0
- package/dist/components/datepicker.css +76 -0
- package/dist/components/diff.css +33 -0
- package/dist/components/file-input.css +107 -0
- package/dist/components/filter-group.css +452 -0
- package/dist/components/footer.css +48 -0
- package/dist/components/form-group.css +95 -204
- package/dist/components/form.css +1551 -421
- package/dist/components/hero.css +57 -0
- package/dist/components/index.css +7657 -7321
- package/dist/components/indicator.css +63 -0
- package/dist/components/input.css +114 -31
- package/dist/components/join.css +70 -0
- package/dist/components/kbd.css +28 -0
- package/dist/components/list.css +22 -3
- package/dist/components/mask.css +38 -0
- package/dist/components/otp-input.css +124 -6
- package/dist/components/radio.css +70 -0
- package/dist/components/range.css +41 -0
- package/dist/components/rating.css +39 -12
- package/dist/components/select.css +74 -0
- package/dist/components/sidebar-layout.css +66 -0
- package/dist/components/stack.css +56 -0
- package/dist/components/stat.css +40 -0
- package/dist/components/switch.css +70 -0
- package/dist/components/table.css +8 -0
- package/dist/components/textarea.css +74 -0
- package/dist/components/timeline.css +40 -25
- package/dist/components/toggle-switch.css +165 -0
- package/dist/components/toggle.css +198 -32
- package/dist/components/validator.css +66 -0
- package/dist/effects/aura.css +22 -0
- package/dist/effects/hover-3d.css +8 -0
- package/dist/effects/hover-gallery.css +14 -0
- package/dist/effects/index.css +65 -0
- package/dist/effects/text-rotate.css +16 -0
- package/dist/esm/components/accordion.js +33 -9
- package/dist/esm/components/autocomplete.js +67 -13
- package/dist/esm/components/avatar.js +39 -15
- package/dist/esm/components/badge.js +15 -3
- package/dist/esm/components/card.js +12 -0
- package/dist/esm/components/carousel.d.ts +5 -0
- package/dist/esm/components/carousel.js +37 -0
- package/dist/esm/components/chat.js +15 -11
- package/dist/esm/components/checkbox.js +84 -14
- package/dist/esm/components/collapse.js +67 -16
- package/dist/esm/components/countdown.d.ts +5 -0
- package/dist/esm/components/countdown.js +31 -0
- package/dist/esm/components/datepicker.js +77 -1
- package/dist/esm/components/diff.d.ts +5 -0
- package/dist/esm/components/diff.js +42 -0
- package/dist/esm/components/file-input.d.ts +5 -0
- package/dist/esm/components/file-input.js +116 -0
- package/dist/esm/components/filter-group.d.ts +5 -0
- package/dist/esm/components/filter-group.js +461 -0
- package/dist/esm/components/footer.d.ts +5 -0
- package/dist/esm/components/footer.js +57 -0
- package/dist/esm/components/form-group.js +96 -205
- package/dist/esm/components/form.js +1539 -409
- package/dist/esm/components/hero.d.ts +5 -0
- package/dist/esm/components/hero.js +66 -0
- package/dist/esm/components/indicator.d.ts +5 -0
- package/dist/esm/components/indicator.js +72 -0
- package/dist/esm/components/input.js +115 -32
- package/dist/esm/components/join.d.ts +5 -0
- package/dist/esm/components/join.js +79 -0
- package/dist/esm/components/kbd.d.ts +5 -0
- package/dist/esm/components/kbd.js +37 -0
- package/dist/esm/components/list.js +22 -3
- package/dist/esm/components/mask.d.ts +5 -0
- package/dist/esm/components/mask.js +47 -0
- package/dist/esm/components/otp-input.js +125 -7
- package/dist/esm/components/radio.js +71 -1
- package/dist/esm/components/range.d.ts +5 -0
- package/dist/esm/components/range.js +50 -0
- package/dist/esm/components/rating.js +39 -12
- package/dist/esm/components/select.js +75 -1
- package/dist/esm/components/sidebar-layout.d.ts +5 -0
- package/dist/esm/components/sidebar-layout.js +75 -0
- package/dist/esm/components/stack.d.ts +5 -0
- package/dist/esm/components/stack.js +65 -0
- package/dist/esm/components/stat.d.ts +5 -0
- package/dist/esm/components/stat.js +49 -0
- package/dist/esm/components/switch.js +71 -1
- package/dist/esm/components/table.js +8 -0
- package/dist/esm/components/textarea.js +75 -1
- package/dist/esm/components/timeline.js +40 -25
- package/dist/esm/components/toggle-switch.d.ts +5 -0
- package/dist/esm/components/toggle-switch.js +174 -0
- package/dist/esm/components/toggle.js +198 -32
- package/dist/esm/components/validator.d.ts +5 -0
- package/dist/esm/components/validator.js +75 -0
- package/dist/esm/effects/aura.d.ts +5 -0
- package/dist/esm/effects/aura.js +31 -0
- package/dist/esm/effects/hover-3d.d.ts +5 -0
- package/dist/esm/effects/hover-3d.js +17 -0
- package/dist/esm/effects/hover-gallery.d.ts +5 -0
- package/dist/esm/effects/hover-gallery.js +23 -0
- package/dist/esm/effects/index.d.ts +5 -0
- package/dist/esm/effects/index.js +74 -0
- package/dist/esm/effects/text-rotate.d.ts +5 -0
- package/dist/esm/effects/text-rotate.js +25 -0
- package/dist/index.css +8324 -7989
- package/dist/index.min.css +1 -1
- package/dist/standalone/duskmoonui-themes.css +1 -1
- package/dist/standalone/duskmoonui.css +9103 -8759
- package/dist/standalone/duskmoonui.js +12 -13
- package/dist/standalone/duskmoonui.mjs +12 -13
- package/dist/types/types/plugin.d.ts +1 -1
- package/dist/types/types/plugin.d.ts.map +1 -1
- package/package.json +140 -1
|
@@ -37,6 +37,8 @@ export const css = `/**
|
|
|
37
37
|
|
|
38
38
|
/* Card Body */
|
|
39
39
|
.card-body {
|
|
40
|
+
min-inline-size: 0;
|
|
41
|
+
overflow-wrap: anywhere;
|
|
40
42
|
--card-p: 1.5rem;
|
|
41
43
|
display: flex;
|
|
42
44
|
flex-direction: column;
|
|
@@ -101,6 +103,16 @@ export const css = `/**
|
|
|
101
103
|
border: 1px solid var(--color-outline);
|
|
102
104
|
box-shadow: none;
|
|
103
105
|
}
|
|
106
|
+
.card-outlined { border: 1px solid var(--color-outline); box-shadow: none; }
|
|
107
|
+
.card-outlined:hover { box-shadow: none; }
|
|
108
|
+
.card-filled { background: var(--color-surface-container-highest); box-shadow: none; }
|
|
109
|
+
.card-lowest { background: var(--color-surface-container-lowest); box-shadow: none; }
|
|
110
|
+
.card-low { background: var(--color-surface-container-low); box-shadow: var(--shadow-sm); }
|
|
111
|
+
.card-default { background: var(--color-surface-container); box-shadow: var(--shadow-md); }
|
|
112
|
+
.card-high { background: var(--color-surface-container-high); box-shadow: var(--shadow-lg); }
|
|
113
|
+
.card-highest { background: var(--color-surface-container-highest); box-shadow: var(--shadow-xl); }
|
|
114
|
+
.card-subtitle { color: var(--color-on-surface-variant); font-size: 0.875rem; }
|
|
115
|
+
.card-comfortable .card-body { --card-p: 2rem; }
|
|
104
116
|
|
|
105
117
|
.card-bordered:hover {
|
|
106
118
|
box-shadow: none;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// Auto-generated from carousel.css
|
|
2
|
+
export const css = `@layer components {
|
|
3
|
+
.carousel {
|
|
4
|
+
display: flex;
|
|
5
|
+
gap: 1rem;
|
|
6
|
+
max-inline-size: 100%;
|
|
7
|
+
min-inline-size: 0;
|
|
8
|
+
overflow: auto;
|
|
9
|
+
scroll-snap-type: inline mandatory;
|
|
10
|
+
scroll-behavior: smooth;
|
|
11
|
+
color: var(--color-on-surface);
|
|
12
|
+
}
|
|
13
|
+
.carousel-item { flex: none; min-inline-size: 0; max-inline-size: 100%; scroll-snap-align: start; overflow-wrap: anywhere; }
|
|
14
|
+
.carousel-horizontal { flex-direction: row; scroll-snap-type: inline mandatory; }
|
|
15
|
+
.carousel-center > .carousel-item { scroll-snap-align: center; }
|
|
16
|
+
.carousel-end > .carousel-item { scroll-snap-align: end; }
|
|
17
|
+
.carousel-start > .carousel-item { scroll-snap-align: start; }
|
|
18
|
+
.carousel-vertical { flex-direction: column; max-block-size: var(--carousel-height, 24rem); scroll-snap-type: block mandatory; }
|
|
19
|
+
.carousel:focus-visible, .carousel-item:focus-visible { outline: 2px solid var(--color-primary); outline-offset: -2px; }
|
|
20
|
+
@media (prefers-reduced-motion: reduce) { .carousel { scroll-behavior: auto; } }
|
|
21
|
+
@media print { .carousel { flex-wrap: wrap; overflow: visible; max-block-size: none; } }
|
|
22
|
+
.carousel-primary { color: var(--color-primary); }
|
|
23
|
+
.carousel-secondary { color: var(--color-secondary); }
|
|
24
|
+
.carousel-tertiary { color: var(--color-tertiary); }
|
|
25
|
+
.carousel-info { color: var(--color-info); }
|
|
26
|
+
.carousel-success { color: var(--color-success); }
|
|
27
|
+
.carousel-warning { color: var(--color-warning); }
|
|
28
|
+
.carousel-error { color: var(--color-error); }
|
|
29
|
+
}
|
|
30
|
+
`;
|
|
31
|
+
|
|
32
|
+
const sheet = typeof CSSStyleSheet !== 'undefined' ? new CSSStyleSheet() : null;
|
|
33
|
+
if (sheet) {
|
|
34
|
+
sheet.replaceSync(css);
|
|
35
|
+
}
|
|
36
|
+
export const styles = sheet;
|
|
37
|
+
export default sheet;
|
|
@@ -432,6 +432,8 @@ export const css = `@layer components {
|
|
|
432
432
|
align-items: stretch;
|
|
433
433
|
gap: 0.5rem;
|
|
434
434
|
max-width: min(80ch, 100%);
|
|
435
|
+
min-inline-size: 0;
|
|
436
|
+
box-sizing: border-box;
|
|
435
437
|
padding: 0.625rem 0.875rem;
|
|
436
438
|
border-radius: 1rem;
|
|
437
439
|
background-color: var(--chat-bubble-bg);
|
|
@@ -446,39 +448,41 @@ export const css = `@layer components {
|
|
|
446
448
|
.chat-bubble-content {
|
|
447
449
|
min-width: 0;
|
|
448
450
|
}
|
|
451
|
+
.chat-bubble pre { max-inline-size: 100%; min-inline-size: 0; overflow: auto; white-space: pre; }
|
|
452
|
+
.chat-bubble a { overflow-wrap: anywhere; text-decoration: underline; }
|
|
449
453
|
|
|
450
454
|
.chat-start .chat-bubble::before,
|
|
451
455
|
.chat-end .chat-bubble::before {
|
|
452
456
|
content: "";
|
|
453
457
|
position: absolute;
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
458
|
+
inset-block-start: 0;
|
|
459
|
+
inline-size: 0.75rem;
|
|
460
|
+
block-size: 1rem;
|
|
457
461
|
background-color: var(--chat-bubble-bg);
|
|
458
|
-
|
|
459
|
-
filter:
|
|
460
|
-
drop-shadow(-1px 0 0 var(--color-outline-variant))
|
|
461
|
-
drop-shadow(0 -1px 0 var(--color-outline-variant));
|
|
462
|
+
mask-image: radial-gradient(ellipse at 0 100%, transparent 68%, black 72%);
|
|
462
463
|
pointer-events: none;
|
|
463
464
|
}
|
|
464
465
|
|
|
465
466
|
.chat-start .chat-bubble::before {
|
|
466
|
-
|
|
467
|
+
inset-inline-start: -0.5rem;
|
|
467
468
|
}
|
|
468
469
|
|
|
469
470
|
.chat-start .chat-bubble {
|
|
470
|
-
border-
|
|
471
|
+
border-start-start-radius: 0;
|
|
471
472
|
}
|
|
472
473
|
|
|
473
474
|
.chat-end .chat-bubble::before {
|
|
474
|
-
|
|
475
|
+
inset-inline-end: -0.5rem;
|
|
475
476
|
transform: scaleX(-1);
|
|
476
477
|
}
|
|
477
478
|
|
|
478
479
|
.chat-end .chat-bubble {
|
|
479
|
-
border-
|
|
480
|
+
border-start-end-radius: 0;
|
|
480
481
|
}
|
|
481
482
|
|
|
483
|
+
.chat-start:dir(rtl) .chat-bubble::before { transform: scaleX(-1); }
|
|
484
|
+
.chat-end:dir(rtl) .chat-bubble::before { transform: none; }
|
|
485
|
+
|
|
482
486
|
.chat-bubble-primary {
|
|
483
487
|
--chat-bubble-bg: var(--color-primary-container);
|
|
484
488
|
--chat-bubble-fg: var(--color-on-primary-container);
|
|
@@ -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:
|
|
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-
|
|
183
|
-
.collapse-card
|
|
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,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 */
|