@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.
Files changed (122) 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/footer.css +48 -0
  18. package/dist/components/form-group.css +95 -204
  19. package/dist/components/form.css +1551 -421
  20. package/dist/components/hero.css +57 -0
  21. package/dist/components/index.css +7657 -7321
  22. package/dist/components/indicator.css +63 -0
  23. package/dist/components/input.css +114 -31
  24. package/dist/components/join.css +70 -0
  25. package/dist/components/kbd.css +28 -0
  26. package/dist/components/list.css +22 -3
  27. package/dist/components/mask.css +38 -0
  28. package/dist/components/otp-input.css +124 -6
  29. package/dist/components/radio.css +70 -0
  30. package/dist/components/range.css +41 -0
  31. package/dist/components/rating.css +39 -12
  32. package/dist/components/select.css +74 -0
  33. package/dist/components/sidebar-layout.css +66 -0
  34. package/dist/components/stack.css +56 -0
  35. package/dist/components/stat.css +40 -0
  36. package/dist/components/switch.css +70 -0
  37. package/dist/components/table.css +8 -0
  38. package/dist/components/textarea.css +74 -0
  39. package/dist/components/timeline.css +40 -25
  40. package/dist/components/toggle-switch.css +165 -0
  41. package/dist/components/toggle.css +198 -32
  42. package/dist/components/validator.css +66 -0
  43. package/dist/effects/aura.css +22 -0
  44. package/dist/effects/hover-3d.css +8 -0
  45. package/dist/effects/hover-gallery.css +14 -0
  46. package/dist/effects/index.css +65 -0
  47. package/dist/effects/text-rotate.css +16 -0
  48. package/dist/esm/components/accordion.js +33 -9
  49. package/dist/esm/components/autocomplete.js +67 -13
  50. package/dist/esm/components/avatar.js +39 -15
  51. package/dist/esm/components/badge.js +15 -3
  52. package/dist/esm/components/card.js +12 -0
  53. package/dist/esm/components/carousel.d.ts +5 -0
  54. package/dist/esm/components/carousel.js +37 -0
  55. package/dist/esm/components/chat.js +15 -11
  56. package/dist/esm/components/checkbox.js +84 -14
  57. package/dist/esm/components/collapse.js +67 -16
  58. package/dist/esm/components/countdown.d.ts +5 -0
  59. package/dist/esm/components/countdown.js +31 -0
  60. package/dist/esm/components/datepicker.js +77 -1
  61. package/dist/esm/components/diff.d.ts +5 -0
  62. package/dist/esm/components/diff.js +42 -0
  63. package/dist/esm/components/file-input.d.ts +5 -0
  64. package/dist/esm/components/file-input.js +116 -0
  65. package/dist/esm/components/filter-group.d.ts +5 -0
  66. package/dist/esm/components/filter-group.js +461 -0
  67. package/dist/esm/components/footer.d.ts +5 -0
  68. package/dist/esm/components/footer.js +57 -0
  69. package/dist/esm/components/form-group.js +96 -205
  70. package/dist/esm/components/form.js +1539 -409
  71. package/dist/esm/components/hero.d.ts +5 -0
  72. package/dist/esm/components/hero.js +66 -0
  73. package/dist/esm/components/indicator.d.ts +5 -0
  74. package/dist/esm/components/indicator.js +72 -0
  75. package/dist/esm/components/input.js +115 -32
  76. package/dist/esm/components/join.d.ts +5 -0
  77. package/dist/esm/components/join.js +79 -0
  78. package/dist/esm/components/kbd.d.ts +5 -0
  79. package/dist/esm/components/kbd.js +37 -0
  80. package/dist/esm/components/list.js +22 -3
  81. package/dist/esm/components/mask.d.ts +5 -0
  82. package/dist/esm/components/mask.js +47 -0
  83. package/dist/esm/components/otp-input.js +125 -7
  84. package/dist/esm/components/radio.js +71 -1
  85. package/dist/esm/components/range.d.ts +5 -0
  86. package/dist/esm/components/range.js +50 -0
  87. package/dist/esm/components/rating.js +39 -12
  88. package/dist/esm/components/select.js +75 -1
  89. package/dist/esm/components/sidebar-layout.d.ts +5 -0
  90. package/dist/esm/components/sidebar-layout.js +75 -0
  91. package/dist/esm/components/stack.d.ts +5 -0
  92. package/dist/esm/components/stack.js +65 -0
  93. package/dist/esm/components/stat.d.ts +5 -0
  94. package/dist/esm/components/stat.js +49 -0
  95. package/dist/esm/components/switch.js +71 -1
  96. package/dist/esm/components/table.js +8 -0
  97. package/dist/esm/components/textarea.js +75 -1
  98. package/dist/esm/components/timeline.js +40 -25
  99. package/dist/esm/components/toggle-switch.d.ts +5 -0
  100. package/dist/esm/components/toggle-switch.js +174 -0
  101. package/dist/esm/components/toggle.js +198 -32
  102. package/dist/esm/components/validator.d.ts +5 -0
  103. package/dist/esm/components/validator.js +75 -0
  104. package/dist/esm/effects/aura.d.ts +5 -0
  105. package/dist/esm/effects/aura.js +31 -0
  106. package/dist/esm/effects/hover-3d.d.ts +5 -0
  107. package/dist/esm/effects/hover-3d.js +17 -0
  108. package/dist/esm/effects/hover-gallery.d.ts +5 -0
  109. package/dist/esm/effects/hover-gallery.js +23 -0
  110. package/dist/esm/effects/index.d.ts +5 -0
  111. package/dist/esm/effects/index.js +74 -0
  112. package/dist/esm/effects/text-rotate.d.ts +5 -0
  113. package/dist/esm/effects/text-rotate.js +25 -0
  114. package/dist/index.css +8324 -7989
  115. package/dist/index.min.css +1 -1
  116. package/dist/standalone/duskmoonui-themes.css +1 -1
  117. package/dist/standalone/duskmoonui.css +9103 -8759
  118. package/dist/standalone/duskmoonui.js +12 -13
  119. package/dist/standalone/duskmoonui.mjs +12 -13
  120. package/dist/types/types/plugin.d.ts +1 -1
  121. package/dist/types/types/plugin.d.ts.map +1 -1
  122. package/package.json +140 -1
@@ -0,0 +1,5 @@
1
+ // Auto-generated type declaration for hero
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,66 @@
1
+ // Auto-generated from hero.css
2
+ export const css = `/**
3
+ * Hero Composition Primitive
4
+ * Layers a content region and an optional presentation-neutral overlay.
5
+ */
6
+
7
+ @layer components {
8
+ .hero {
9
+ display: grid;
10
+ width: 100%;
11
+ min-width: 0;
12
+ place-items: center;
13
+ isolation: isolate;
14
+ }
15
+
16
+ .hero > * {
17
+ grid-area: 1 / 1;
18
+ }
19
+
20
+ .hero-content {
21
+ z-index: 1;
22
+ display: flex;
23
+ width: min(100%, var(--hero-content-max-width, 80rem));
24
+ min-width: 0;
25
+ align-items: center;
26
+ justify-content: center;
27
+ }
28
+
29
+ .hero-overlay {
30
+ z-index: 0;
31
+ align-self: stretch;
32
+ justify-self: stretch;
33
+ pointer-events: none;
34
+ }
35
+
36
+ .hero-center {
37
+ justify-items: center;
38
+ text-align: center;
39
+ }
40
+
41
+ .hero-start {
42
+ justify-items: start;
43
+ text-align: start;
44
+ }
45
+
46
+ .hero-end {
47
+ justify-items: end;
48
+ text-align: end;
49
+ }
50
+
51
+ .hero-start > .hero-content {
52
+ justify-content: flex-start;
53
+ }
54
+
55
+ .hero-end > .hero-content {
56
+ justify-content: flex-end;
57
+ }
58
+ }
59
+ `;
60
+
61
+ const sheet = typeof CSSStyleSheet !== 'undefined' ? new CSSStyleSheet() : null;
62
+ if (sheet) {
63
+ sheet.replaceSync(css);
64
+ }
65
+ export const styles = sheet;
66
+ export default sheet;
@@ -0,0 +1,5 @@
1
+ // Auto-generated type declaration for indicator
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,72 @@
1
+ // Auto-generated from indicator.css
2
+ export const css = `/**
3
+ * Indicator Composition Primitive
4
+ * Positions arbitrary content around an inline-sized anchor.
5
+ */
6
+
7
+ @layer components {
8
+ .indicator {
9
+ position: relative;
10
+ display: inline-grid;
11
+ width: max-content;
12
+ max-width: 100%;
13
+ }
14
+
15
+ .indicator-item {
16
+ --indicator-block: 0%;
17
+ --indicator-inline: 0%;
18
+ --indicator-x: 50%;
19
+ --indicator-y: -50%;
20
+ position: absolute;
21
+ z-index: 1;
22
+ inset-block-start: var(--indicator-block);
23
+ inset-inline-end: var(--indicator-inline);
24
+ translate: var(--indicator-x) var(--indicator-y);
25
+ }
26
+
27
+ .indicator-top {
28
+ --indicator-block: 0%;
29
+ --indicator-y: -50%;
30
+ }
31
+
32
+ .indicator-middle {
33
+ --indicator-block: 50%;
34
+ --indicator-y: -50%;
35
+ }
36
+
37
+ .indicator-bottom {
38
+ --indicator-block: 100%;
39
+ --indicator-y: -50%;
40
+ }
41
+
42
+ .indicator-start {
43
+ --indicator-inline: 100%;
44
+ --indicator-x: 50%;
45
+ }
46
+
47
+ .indicator-center {
48
+ --indicator-inline: 50%;
49
+ --indicator-x: 50%;
50
+ }
51
+
52
+ .indicator-end {
53
+ --indicator-inline: 0%;
54
+ --indicator-x: 50%;
55
+ }
56
+
57
+ :dir(rtl) .indicator-item {
58
+ --indicator-x: -50%;
59
+ }
60
+
61
+ :dir(rtl) .indicator-start {
62
+ --indicator-x: -50%;
63
+ }
64
+ }
65
+ `;
66
+
67
+ const sheet = typeof CSSStyleSheet !== 'undefined' ? new CSSStyleSheet() : null;
68
+ if (sheet) {
69
+ sheet.replaceSync(css);
70
+ }
71
+ export const styles = sheet;
72
+ export default sheet;
@@ -1,5 +1,115 @@
1
1
  // Auto-generated from input.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
+
71
+ @layer components {
72
+ .file-input {
73
+ display: block;
74
+ box-sizing: border-box;
75
+ width: 100%;
76
+ min-width: 0;
77
+ padding: 0;
78
+ font: inherit;
79
+ color: var(--color-on-surface);
80
+ background-color: var(--color-surface);
81
+ border: 1px solid currentColor;
82
+ border-radius: var(--radius-sm);
83
+ cursor: pointer;
84
+ }
85
+ .file-input::file-selector-button {
86
+ padding: 0.75rem 1rem;
87
+ margin-inline-end: 0.75rem;
88
+ font: inherit;
89
+ color: inherit;
90
+ background-color: var(--color-surface-container);
91
+ border: none;
92
+ border-inline-end: 1px solid currentColor;
93
+ cursor: inherit;
94
+ }
95
+ .file-input:hover:not(:disabled)::file-selector-button { background-color: var(--color-surface-container-high); }
96
+ .file-input:focus-visible { outline: none; box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent); }
97
+ .file-input:disabled { opacity: 0.5; cursor: not-allowed; }
98
+ .file-input-xs::file-selector-button { padding: 0.375rem 0.625rem; }
99
+ .file-input-sm::file-selector-button { padding: 0.5rem 0.75rem; }
100
+ .file-input-lg::file-selector-button { padding: 1rem 1.25rem; }
101
+ .file-input-primary { color: var(--color-primary); }
102
+ .file-input-secondary { color: var(--color-secondary); }
103
+ .file-input-tertiary { color: var(--color-tertiary); }
104
+ .file-input-info { color: var(--color-info); }
105
+ .file-input-success { color: var(--color-success); }
106
+ .file-input-warning { color: var(--color-warning); }
107
+ .file-input-error { color: var(--color-error); }
108
+ .file-input-ghost { border-color: transparent; }
109
+ }
110
+
111
+
112
+ /**
3
113
  * Input Component Styles
4
114
  * DuskMoonUI - Material Design 3 inspired input system
5
115
  */
@@ -7,6 +117,8 @@ export const css = `/**
7
117
  @layer components {
8
118
  /* Base Input */
9
119
  .input {
120
+ box-sizing: border-box;
121
+ min-width: 0;
10
122
  display: flex;
11
123
  width: 100%;
12
124
  padding: 0.75rem 1rem;
@@ -40,6 +152,7 @@ export const css = `/**
40
152
  }
41
153
 
42
154
  /* Bordered Input */
155
+ .input-outlined { background-color: transparent; border-color: var(--color-outline); }
43
156
  .input-bordered {
44
157
  border-color: var(--color-outline);
45
158
  background-color: var(--color-surface);
@@ -90,6 +203,7 @@ export const css = `/**
90
203
  }
91
204
 
92
205
  /* Ghost Input */
206
+ .input-md { height: 3rem; }
93
207
  .input-ghost {
94
208
  background-color: transparent;
95
209
  border-color: transparent;
@@ -168,37 +282,6 @@ export const css = `/**
168
282
  border-left: none;
169
283
  }
170
284
 
171
- /* File Input */
172
- .file-input {
173
- display: flex;
174
- width: 100%;
175
- padding: 0;
176
- background-color: var(--color-surface);
177
- border: 1px solid var(--color-outline);
178
- border-radius: var(--radius-sm);
179
- overflow: hidden;
180
- cursor: pointer;
181
- }
182
-
183
- .file-input::file-selector-button {
184
- padding: 0.75rem 1rem;
185
- background-color: var(--color-surface-container);
186
- color: var(--color-on-surface);
187
- border: none;
188
- border-right: 1px solid var(--color-outline);
189
- cursor: pointer;
190
- transition: background-color 150ms ease-in-out;
191
- }
192
-
193
- .file-input::file-selector-button:hover {
194
- background-color: var(--color-surface-container-high);
195
- }
196
-
197
- .file-input:focus-visible {
198
- box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
199
- outline: none;
200
- }
201
-
202
285
  /* Reduce Motion */
203
286
  @media (prefers-reduced-motion: reduce) {
204
287
  .input,
@@ -0,0 +1,5 @@
1
+ // Auto-generated type declaration for join
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,79 @@
1
+ // Auto-generated from join.css
2
+ export const css = `/**
3
+ * Join Composition Primitive
4
+ * Visually connects arbitrary adjacent controls.
5
+ */
6
+
7
+ @layer components {
8
+ .join {
9
+ display: inline-flex;
10
+ align-items: stretch;
11
+ flex-direction: row;
12
+ width: max-content;
13
+ max-width: 100%;
14
+ vertical-align: middle;
15
+ }
16
+
17
+ .join > .join-item {
18
+ position: relative;
19
+ flex: 0 1 auto;
20
+ }
21
+
22
+ .join > .join-item:hover,
23
+ .join > .join-item:focus,
24
+ .join > .join-item:focus-within {
25
+ z-index: 1;
26
+ }
27
+
28
+ :is(.join, .join-horizontal) > .join-item:not(:first-child) {
29
+ margin-inline-start: -1px;
30
+ }
31
+
32
+ :is(.join, .join-horizontal) > .join-item:not(:first-child):not(:last-child) {
33
+ border-radius: 0;
34
+ }
35
+
36
+ :is(.join, .join-horizontal) > .join-item:first-child:not(:last-child) {
37
+ border-start-end-radius: 0;
38
+ border-end-end-radius: 0;
39
+ }
40
+
41
+ :is(.join, .join-horizontal) > .join-item:last-child:not(:first-child) {
42
+ border-start-start-radius: 0;
43
+ border-end-start-radius: 0;
44
+ }
45
+
46
+ .join-vertical {
47
+ flex-direction: column;
48
+ }
49
+
50
+ .join-vertical > .join-item {
51
+ margin-inline-start: 0;
52
+ }
53
+
54
+ .join-vertical > .join-item:not(:first-child) {
55
+ margin-block-start: -1px;
56
+ }
57
+
58
+ .join-vertical > .join-item:not(:first-child):not(:last-child) {
59
+ border-radius: 0;
60
+ }
61
+
62
+ .join-vertical > .join-item:first-child:not(:last-child) {
63
+ border-end-start-radius: 0;
64
+ border-end-end-radius: 0;
65
+ }
66
+
67
+ .join-vertical > .join-item:last-child:not(:first-child) {
68
+ border-start-start-radius: 0;
69
+ border-start-end-radius: 0;
70
+ }
71
+ }
72
+ `;
73
+
74
+ const sheet = typeof CSSStyleSheet !== 'undefined' ? new CSSStyleSheet() : null;
75
+ if (sheet) {
76
+ sheet.replaceSync(css);
77
+ }
78
+ export const styles = sheet;
79
+ export default sheet;
@@ -0,0 +1,5 @@
1
+ // Auto-generated type declaration for kbd
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,37 @@
1
+ // Auto-generated from kbd.css
2
+ export const css = `@layer components {
3
+ .kbd {
4
+ display: inline-flex;
5
+ align-items: center;
6
+ justify-content: center;
7
+ min-inline-size: 1.5rem;
8
+ padding: 0.125rem 0.375rem;
9
+ font: 0.875rem ui-monospace, monospace;
10
+ line-height: 1.5;
11
+ color: var(--color-on-surface);
12
+ background: var(--color-surface-container);
13
+ border: 1px solid currentColor;
14
+ border-block-end-width: 2px;
15
+ border-radius: var(--radius-sm);
16
+ vertical-align: middle;
17
+ }
18
+ .kbd-xs { font-size: 0.625rem; }
19
+ .kbd-sm { font-size: 0.75rem; }
20
+ .kbd-lg { font-size: 1rem; padding: 0.25rem 0.5rem; }
21
+ .kbd-primary { color: var(--color-primary); }
22
+ .kbd-secondary { color: var(--color-secondary); }
23
+ .kbd-tertiary { color: var(--color-tertiary); }
24
+ .kbd-info { color: var(--color-info); }
25
+ .kbd-success { color: var(--color-success); }
26
+ .kbd-warning { color: var(--color-warning); }
27
+ .kbd-error { color: var(--color-error); }
28
+ .kbd-ghost { border-color: transparent; }
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;
@@ -64,14 +64,18 @@ export const css = `/**
64
64
  min-width: 0;
65
65
  }
66
66
 
67
- .list-item-title {
67
+ .list-item-title,
68
+ .list-item-text {
69
+ overflow-wrap: anywhere;
68
70
  font-size: 1rem;
69
71
  font-weight: 500;
70
72
  line-height: 1.5rem;
71
73
  color: var(--color-on-surface);
72
74
  }
73
75
 
74
- .list-item-subtitle {
76
+ .list-item-subtitle,
77
+ .list-item-secondary {
78
+ overflow-wrap: anywhere;
75
79
  font-size: 0.875rem;
76
80
  line-height: 1.25rem;
77
81
  color: var(--color-on-surface-variant);
@@ -85,6 +89,21 @@ export const css = `/**
85
89
  color: var(--color-on-surface-variant);
86
90
  }
87
91
 
92
+ .list-item-leading, .list-item-trailing { display: inline-flex; align-items: center; gap: 0.5rem; flex: none; }
93
+ .list-item-trailing { margin-inline-start: auto; }
94
+ .list-item-two-line, .list-item-three-line { align-items: flex-start; }
95
+ .list-item-interactive { cursor: pointer; }
96
+ .list-item-interactive:hover { background: var(--color-surface-container); }
97
+ .list-item-interactive:focus-visible { outline: 2px solid var(--color-primary); outline-offset: -2px; }
98
+ .list-item-active-primary { background: var(--color-primary-container); color: var(--color-on-primary-container); }
99
+ .list-item-active-secondary { background: var(--color-secondary-container); color: var(--color-on-secondary-container); }
100
+ .list-item-active-tertiary { background: var(--color-tertiary-container); color: var(--color-on-tertiary-container); }
101
+ .list-comfortable > .list-item { padding-block: 1rem; }
102
+ .list-surface-container { background: var(--color-surface-container); }
103
+ .list-surface-container-low { background: var(--color-surface-container-low); }
104
+ .list-surface-container-high { background: var(--color-surface-container-high); }
105
+ .list-nested { margin-inline-start: 1rem; }
106
+
88
107
  /* List Variants */
89
108
  .list-bordered {
90
109
  border: 1px solid var(--color-outline);
@@ -121,7 +140,7 @@ export const css = `/**
121
140
  }
122
141
 
123
142
  .list-divider-inset {
124
- margin-left: 3.5rem;
143
+ margin-inline-start: 3.5rem;
125
144
  }
126
145
 
127
146
  /* List Subheader */
@@ -0,0 +1,5 @@
1
+ // Auto-generated type declaration for mask
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,47 @@
1
+ // Auto-generated from mask.css
2
+ export const css = `/**
3
+ * Mask Composition Primitive
4
+ * Small, dependency-free catalog of reusable clipping shapes.
5
+ */
6
+
7
+ @layer components {
8
+ .mask {
9
+ display: inline-block;
10
+ max-width: 100%;
11
+ overflow: hidden;
12
+ vertical-align: middle;
13
+ object-fit: cover;
14
+ }
15
+
16
+ .mask-circle {
17
+ clip-path: circle(50% at 50% 50%);
18
+ }
19
+
20
+ .mask-squircle {
21
+ clip-path: inset(0 round 28%);
22
+ }
23
+
24
+ .mask-square {
25
+ clip-path: inset(0);
26
+ }
27
+
28
+ .mask-diamond {
29
+ clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%);
30
+ }
31
+
32
+ .mask-hexagon {
33
+ clip-path: polygon(25% 6.7%, 75% 6.7%, 100% 50%, 75% 93.3%, 25% 93.3%, 0 50%);
34
+ }
35
+
36
+ .mask-triangle {
37
+ clip-path: polygon(50% 0, 100% 100%, 0 100%);
38
+ }
39
+ }
40
+ `;
41
+
42
+ const sheet = typeof CSSStyleSheet !== 'undefined' ? new CSSStyleSheet() : null;
43
+ if (sheet) {
44
+ sheet.replaceSync(css);
45
+ }
46
+ export const styles = sheet;
47
+ export default sheet;