@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
@@ -5,6 +5,8 @@ export const css = `/**
5
5
  */
6
6
 
7
7
  @layer components {
8
+ :where(.autocomplete, .autocomplete *) { box-sizing: border-box; }
9
+
8
10
  /* Autocomplete Container */
9
11
  .autocomplete {
10
12
  position: relative;
@@ -15,6 +17,7 @@ export const css = `/**
15
17
  /* Autocomplete Input */
16
18
  .autocomplete-input {
17
19
  width: 100%;
20
+ min-inline-size: 0;
18
21
  padding: 0.75rem 1rem;
19
22
  font-size: 0.875rem;
20
23
  line-height: 1.5;
@@ -25,6 +28,37 @@ export const css = `/**
25
28
  transition: border-color 150ms ease-in-out, box-shadow 150ms ease-in-out;
26
29
  }
27
30
 
31
+ .autocomplete-input-wrapper {
32
+ position: relative;
33
+ display: flex;
34
+ align-items: center;
35
+ }
36
+
37
+ .autocomplete-toggle {
38
+ position: absolute;
39
+ inset-inline-end: 0.125rem;
40
+ inset-block-start: 50%;
41
+ transform: translateY(-50%);
42
+ display: grid;
43
+ place-items: center;
44
+ inline-size: 2.75rem;
45
+ block-size: 2.75rem;
46
+ padding: 0;
47
+ font: inherit;
48
+ color: var(--color-on-surface);
49
+ background: transparent;
50
+ border: none;
51
+ border-radius: var(--radius-sm);
52
+ cursor: pointer;
53
+ }
54
+
55
+ .autocomplete-toggle:hover:not(:disabled) { background-color: var(--color-surface-container); }
56
+ .autocomplete-toggle:focus-visible { outline: 2px solid currentColor; outline-offset: -3px; }
57
+ .autocomplete-toggle:disabled { opacity: 0.38; cursor: not-allowed; }
58
+ .autocomplete-sm .autocomplete-toggle { inline-size: 1.75rem; block-size: 1.75rem; }
59
+ .autocomplete-outlined .autocomplete-input { background-color: transparent; }
60
+ .autocomplete-options { list-style: none; margin: 0; padding: 0.25rem; }
61
+
28
62
  .autocomplete-input:focus {
29
63
  outline: none;
30
64
  box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
@@ -41,8 +75,7 @@ export const css = `/**
41
75
  .autocomplete-dropdown {
42
76
  position: absolute;
43
77
  top: 100%;
44
- left: 0;
45
- right: 0;
78
+ inset-inline: 0;
46
79
  z-index: 1000;
47
80
  max-height: 15rem;
48
81
  margin-top: 0.25rem;
@@ -58,12 +91,18 @@ export const css = `/**
58
91
  }
59
92
 
60
93
  .autocomplete.autocomplete-open .autocomplete-dropdown,
94
+ .autocomplete-dropdown.autocomplete-dropdown-open,
61
95
  .autocomplete-dropdown.show {
62
96
  opacity: 1;
63
97
  visibility: visible;
64
98
  transform: translateY(0);
65
99
  }
66
100
 
101
+ .autocomplete-dropdown[hidden],
102
+ .autocomplete-option[hidden],
103
+ .autocomplete-no-results[hidden],
104
+ .autocomplete-no-options[hidden] { display: none; }
105
+
67
106
  /* Autocomplete Options */
68
107
  .autocomplete-option {
69
108
  display: flex;
@@ -78,16 +117,20 @@ export const css = `/**
78
117
 
79
118
  .autocomplete-option:hover,
80
119
  .autocomplete-option:focus,
120
+ .autocomplete-option.autocomplete-option-focused,
81
121
  .autocomplete-option.highlighted {
82
122
  background-color: var(--color-surface-container);
83
123
  }
84
124
 
85
- .autocomplete-option.selected {
125
+ .autocomplete-option.selected,
126
+ .autocomplete-option.autocomplete-option-selected,
127
+ .autocomplete-option[aria-selected="true"] {
86
128
  background-color: var(--color-primary-container);
87
129
  color: var(--color-on-primary-container);
88
130
  }
89
131
 
90
132
  .autocomplete-option:disabled,
133
+ .autocomplete-option[aria-disabled="true"],
91
134
  .autocomplete-option.disabled {
92
135
  color: var(--color-on-surface-variant);
93
136
  cursor: not-allowed;
@@ -134,7 +177,8 @@ export const css = `/**
134
177
  }
135
178
 
136
179
  /* Group Header */
137
- .autocomplete-group-header {
180
+ .autocomplete-group-header,
181
+ .autocomplete-group-label {
138
182
  padding: 0.5rem 1rem;
139
183
  font-size: 0.75rem;
140
184
  font-weight: 600;
@@ -145,7 +189,8 @@ export const css = `/**
145
189
  }
146
190
 
147
191
  /* No Results */
148
- .autocomplete-no-results {
192
+ .autocomplete-no-results,
193
+ .autocomplete-no-options {
149
194
  padding: 1rem;
150
195
  text-align: center;
151
196
  font-size: 0.875rem;
@@ -165,7 +210,7 @@ export const css = `/**
165
210
  /* Clear Button */
166
211
  .autocomplete-clear {
167
212
  position: absolute;
168
- right: 0.75rem;
213
+ inset-inline-end: 0.75rem;
169
214
  top: 50%;
170
215
  transform: translateY(-50%);
171
216
  display: flex;
@@ -188,28 +233,31 @@ export const css = `/**
188
233
 
189
234
  /* With Clear Button */
190
235
  .autocomplete-clearable .autocomplete-input {
191
- padding-right: 2.5rem;
236
+ padding-inline-end: 2.5rem;
192
237
  }
193
238
 
194
239
  /* Multi-select Tags */
195
- .autocomplete-tags {
240
+ .autocomplete-tags,
241
+ .autocomplete-chips {
196
242
  display: flex;
197
243
  flex-wrap: wrap;
198
244
  gap: 0.25rem;
199
245
  padding: 0.375rem;
200
- padding-right: 2.5rem;
246
+ padding-inline-end: 2.5rem;
201
247
  min-height: 2.75rem;
202
248
  background-color: var(--color-surface);
203
249
  border: 1px solid var(--color-outline);
204
250
  border-radius: var(--radius-sm);
205
251
  }
206
252
 
207
- .autocomplete-tags:focus-within {
253
+ .autocomplete-tags:focus-within,
254
+ .autocomplete-chips:focus-within {
208
255
  border-color: var(--color-primary);
209
256
  box-shadow: 0 0 0 3px var(--color-primary-container);
210
257
  }
211
258
 
212
- .autocomplete-tag {
259
+ .autocomplete-tag,
260
+ .autocomplete-chip {
213
261
  display: inline-flex;
214
262
  align-items: center;
215
263
  gap: 0.25rem;
@@ -220,7 +268,8 @@ export const css = `/**
220
268
  border-radius: var(--radius-xs);
221
269
  }
222
270
 
223
- .autocomplete-tag-remove {
271
+ .autocomplete-tag-remove,
272
+ .autocomplete-chip-remove {
224
273
  display: flex;
225
274
  align-items: center;
226
275
  justify-content: center;
@@ -234,7 +283,8 @@ export const css = `/**
234
283
  transition: background-color 150ms ease-in-out;
235
284
  }
236
285
 
237
- .autocomplete-tag-remove:hover {
286
+ .autocomplete-tag-remove:hover,
287
+ .autocomplete-chip-remove:hover {
238
288
  background-color: var(--color-on-primary-container);
239
289
  color: var(--color-primary-container);
240
290
  }
@@ -342,6 +392,10 @@ export const css = `/**
342
392
  font-size: 1rem;
343
393
  }
344
394
 
395
+ /* Reserve the toggle's space after size shorthands set input padding. */
396
+ .autocomplete-input-wrapper .autocomplete-input { padding-inline-end: 3.25rem; }
397
+ .autocomplete-sm .autocomplete-input-wrapper .autocomplete-input { padding-inline-end: 2.25rem; }
398
+
345
399
  /* Reduce Motion */
346
400
  @media (prefers-reduced-motion: reduce) {
347
401
  .autocomplete-dropdown {
@@ -14,7 +14,7 @@ export const css = `/**
14
14
  width: 3rem;
15
15
  height: 3rem;
16
16
  border-radius: var(--radius-full);
17
- overflow: hidden;
17
+ overflow: visible;
18
18
  background-color: var(--color-surface-container);
19
19
  color: var(--color-on-surface);
20
20
  font-weight: 500;
@@ -25,6 +25,7 @@ export const css = `/**
25
25
  width: 100%;
26
26
  height: 100%;
27
27
  object-fit: cover;
28
+ border-radius: inherit;
28
29
  }
29
30
 
30
31
  /* Avatar Placeholder */
@@ -34,7 +35,9 @@ export const css = `/**
34
35
  justify-content: center;
35
36
  width: 100%;
36
37
  height: 100%;
37
- font-size: 1.25rem;
38
+ font-size: inherit;
39
+ border-radius: inherit;
40
+ overflow: hidden;
38
41
  text-transform: uppercase;
39
42
  }
40
43
 
@@ -136,24 +139,28 @@ export const css = `/**
136
139
  }
137
140
 
138
141
  .avatar-ring-primary {
139
- outline-color: var(--color-primary);
142
+ box-shadow: 0 0 0 3px var(--color-primary);
140
143
  }
141
144
 
142
145
  .avatar-ring-secondary {
143
- outline-color: var(--color-secondary);
146
+ box-shadow: 0 0 0 3px var(--color-secondary);
144
147
  }
145
148
 
146
149
  .avatar-ring-tertiary {
147
- outline-color: var(--color-tertiary);
150
+ box-shadow: 0 0 0 3px var(--color-tertiary);
148
151
  }
149
152
 
150
153
  /* Online/Offline Indicator */
151
154
  .avatar-online::after,
152
- .avatar-offline::after {
155
+ .avatar-offline::after,
156
+ .avatar-status-online::after,
157
+ .avatar-status-offline::after,
158
+ .avatar-status-busy::after,
159
+ .avatar-status-away::after {
153
160
  content: '';
154
161
  position: absolute;
155
- bottom: 0;
156
- right: 0;
162
+ inset-block-end: 0;
163
+ inset-inline-end: 0;
157
164
  width: 25%;
158
165
  height: 25%;
159
166
  min-width: 0.5rem;
@@ -162,14 +169,19 @@ export const css = `/**
162
169
  border: 2px solid var(--color-surface);
163
170
  }
164
171
 
165
- .avatar-online::after {
172
+ .avatar-online::after,
173
+ .avatar-status-online::after {
166
174
  background-color: var(--color-success);
167
175
  }
168
176
 
169
- .avatar-offline::after {
177
+ .avatar-offline::after,
178
+ .avatar-status-offline::after {
170
179
  background-color: var(--color-outline);
171
180
  }
172
181
 
182
+ .avatar-status-busy::after { background-color: var(--color-error); }
183
+ .avatar-status-away::after { background-color: var(--color-warning); }
184
+
173
185
  /* Avatar Group */
174
186
  .avatar-group {
175
187
  display: flex;
@@ -179,21 +191,33 @@ export const css = `/**
179
191
 
180
192
  .avatar-group .avatar {
181
193
  border: 2px solid var(--color-surface);
182
- margin-left: -0.75rem;
194
+ margin-inline-start: -0.75rem;
183
195
  }
184
196
 
185
197
  .avatar-group .avatar:last-child {
186
- margin-left: 0;
198
+ margin-inline-start: 0;
187
199
  }
188
200
 
189
201
  /* Avatar Group Sizes */
190
202
  .avatar-group-sm .avatar {
191
- margin-left: -0.5rem;
203
+ margin-inline-start: -0.5rem;
192
204
  }
193
205
 
194
206
  .avatar-group-lg .avatar {
195
- margin-left: -1rem;
196
- }
207
+ margin-inline-start: -1rem;
208
+ }
209
+
210
+ /* Historical documented composition classes. */
211
+ .avatar-image { inline-size: 100%; block-size: 100%; border-radius: inherit; overflow: hidden; }
212
+ .avatar-icon { display: inline-flex; align-items: center; justify-content: center; inline-size: 100%; block-size: 100%; }
213
+ .avatar-circle { border-radius: var(--radius-full); }
214
+ .avatar-bordered { border: 2px solid currentColor; }
215
+ .avatar-clickable { cursor: pointer; }
216
+ .avatar-overflow { font-size: 0.875rem; }
217
+ .avatar-group-dense > .avatar { margin-inline-start: -1rem; }
218
+ .avatar-group-xs > .avatar { inline-size: 1.5rem; block-size: 1.5rem; font-size: 0.625rem; }
219
+ .avatar-group-xl > .avatar { inline-size: 6rem; block-size: 6rem; font-size: 2rem; }
220
+ .avatar-group-dense > .avatar:last-child { margin-inline-start: 0; }
197
221
 
198
222
  /* Focus State for Interactive Avatars */
199
223
  .avatar:focus-visible {
@@ -7,6 +7,7 @@ export const css = `/**
7
7
  @layer components {
8
8
  /* Base Badge */
9
9
  .badge {
10
+ box-sizing: border-box;
10
11
  display: inline-flex;
11
12
  align-items: center;
12
13
  justify-content: center;
@@ -14,7 +15,10 @@ export const css = `/**
14
15
  font-size: 0.75rem;
15
16
  font-weight: 500;
16
17
  line-height: 1rem;
17
- white-space: nowrap;
18
+ white-space: normal;
19
+ max-inline-size: 100%;
20
+ overflow-wrap: anywhere;
21
+ min-inline-size: 0;
18
22
  border-radius: var(--radius-full);
19
23
  background-color: var(--color-surface-container);
20
24
  color: var(--color-on-surface);
@@ -228,13 +232,13 @@ export const css = `/**
228
232
  /* Badge with Indicator Dot */
229
233
  .badge-indicator {
230
234
  position: relative;
231
- padding-left: 1rem;
235
+ padding-inline-start: 1rem;
232
236
  }
233
237
 
234
238
  .badge-indicator::before {
235
239
  content: '';
236
240
  position: absolute;
237
- left: 0.375rem;
241
+ inset-inline-start: 0.375rem;
238
242
  top: 50%;
239
243
  transform: translateY(-50%);
240
244
  width: 0.375rem;
@@ -243,6 +247,14 @@ export const css = `/**
243
247
  background-color: currentColor;
244
248
  }
245
249
 
250
+ .badge-filled { font-weight: 500; }
251
+ .badge-md { padding: 0.125rem 0.5rem; font-size: 0.75rem; line-height: 1rem; }
252
+ .badge-notification { position: absolute; inset-block-start: 0; inset-inline-end: 0; transform: translate(50%, -50%); }
253
+ .badge-notification:dir(rtl) { transform: translate(-50%, -50%); }
254
+ .badge-removable { gap: 0.25rem; }
255
+ .badge-removable > button { display: inline-flex; padding: 0; border: 0; color: inherit; background: transparent; cursor: pointer; }
256
+ .badge-removable > button:focus-visible { outline: 2px solid currentColor; outline-offset: 2px; }
257
+
246
258
  /* Empty Badge (just a dot) */
247
259
  .badge-dot {
248
260
  width: 0.5rem;
@@ -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,5 @@
1
+ // Auto-generated type declaration for carousel
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 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
- top: 0;
455
- width: calc(1rem - 2px);
456
- height: calc(1rem - 2px);
458
+ inset-block-start: 0;
459
+ inline-size: 0.75rem;
460
+ block-size: 1rem;
457
461
  background-color: var(--chat-bubble-bg);
458
- clip-path: polygon(0 0, 100% 0, 100% 100%);
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
- left: -0.5rem;
467
+ inset-inline-start: -0.5rem;
467
468
  }
468
469
 
469
470
  .chat-start .chat-bubble {
470
- border-top-left-radius: 0;
471
+ border-start-start-radius: 0;
471
472
  }
472
473
 
473
474
  .chat-end .chat-bubble::before {
474
- right: -0.5rem;
475
+ inset-inline-end: -0.5rem;
475
476
  transform: scaleX(-1);
476
477
  }
477
478
 
478
479
  .chat-end .chat-bubble {
479
- border-top-right-radius: 0;
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);