@happyvertical/smrt-chat 0.55.16 → 0.55.17
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/dist/chunks/{chat-stream-j6VuNo3t.js → chat-stream-D1xCl9IM.js} +2 -2
- package/dist/chunks/{chat-stream-j6VuNo3t.js.map → chat-stream-D1xCl9IM.js.map} +1 -1
- package/dist/index.js +1 -1
- package/dist/manifest.json +1 -1
- package/dist/smrt-knowledge.json +3 -3
- package/dist/svelte/components/agent/AgentChat.svelte +70 -67
- package/dist/svelte/components/agent/AgentSelector.svelte +26 -23
- package/dist/svelte/components/agent/AgentSessionPanel.svelte +47 -44
- package/dist/svelte/components/agent/ToolCallDisplay.svelte +52 -49
- package/dist/svelte/components/assistant/AssistantChoiceCards.svelte +19 -17
- package/dist/svelte/components/assistant/AssistantComposer.svelte +31 -28
- package/dist/svelte/components/assistant/AssistantDock.svelte +69 -66
- package/dist/svelte/components/assistant/AssistantThreadList.svelte +23 -20
- package/dist/svelte/components/assistant/FloatingAssistant.svelte +6 -3
- package/dist/svelte/components/assistant/captions/CaptionOverlay.svelte +4 -1
- package/dist/svelte/components/assistant/captions/HeardCaptions.svelte +5 -2
- package/dist/svelte/components/assistant/captions/SpokenCaptions.svelte +5 -2
- package/dist/svelte/components/dialogs/RoomCreateDialog.svelte +13 -10
- package/dist/svelte/components/dialogs/SearchMessages.svelte +35 -32
- package/dist/svelte/components/helper/HelperControlPanel.svelte +4 -1
- package/dist/svelte/components/layout/ChatLayout.svelte +14 -10
- package/dist/svelte/components/layout/MemberList.svelte +30 -27
- package/dist/svelte/components/layout/RoomHeader.svelte +19 -16
- package/dist/svelte/components/layout/RoomList.svelte +26 -23
- package/dist/svelte/components/messages/MessageInput.svelte +20 -17
- package/dist/svelte/components/messages/MessageItem.svelte +45 -42
- package/dist/svelte/components/messages/MessageList.svelte +8 -5
- package/dist/svelte/components/messages/ThreadPanel.svelte +15 -12
- package/dist/svelte/components/shared/FileUpload.svelte +39 -36
- package/dist/svelte/components/shared/LinkPreview.svelte +9 -6
- package/dist/svelte/components/shared/MentionAutocomplete.svelte +16 -13
- package/dist/svelte/components/shared/ReadReceipts.svelte +13 -10
- package/dist/svelte/components/shared/UserPresence.svelte +10 -7
- package/dist/svelte/components/tabs/ChatTab.svelte +26 -23
- package/dist/svelte/components/tabs/ChatTabList.svelte +20 -17
- package/dist/svelte/components/tabs/ChatTabs.svelte +7 -4
- package/dist/svelte/components/tabs/MiniChat.svelte +26 -23
- package/dist/sveltekit.js +1 -1
- package/package.json +17 -17
|
@@ -35,7 +35,7 @@ const visibleLines = $derived(lines.slice(-Math.max(1, maxLines)));
|
|
|
35
35
|
</script>
|
|
36
36
|
|
|
37
37
|
{#snippet surface()}
|
|
38
|
-
<section class="spoken-captions" aria-label={speakerLabel}>
|
|
38
|
+
<section class="spoken-captions" aria-label={speakerLabel} data-smrt-component="SpokenCaptions">
|
|
39
39
|
<p class="speaker"><span aria-hidden="true">◈</span> {speakerLabel}</p>
|
|
40
40
|
<div class="caption-lines" aria-live={announce ? 'polite' : 'off'} aria-atomic="false">
|
|
41
41
|
{#each visibleLines as line (line.id)}
|
|
@@ -57,9 +57,12 @@ const visibleLines = $derived(lines.slice(-Math.max(1, maxLines)));
|
|
|
57
57
|
{/if}
|
|
58
58
|
|
|
59
59
|
<style>
|
|
60
|
-
|
|
60
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
61
|
+
@layer smrt.theme {
|
|
62
|
+
.spoken-captions { box-sizing: border-box; min-inline-size: 0; max-inline-size: min(42rem, calc(100vw - 2rem)); overflow-wrap: anywhere; padding: .7rem .9rem; border: 2px solid var(--smrt-color-outline); background: var(--smrt-color-inverse-surface); color: var(--smrt-color-inverse-on-surface); border-radius: 1rem; box-shadow: var(--smrt-elevation-4, 0 .35rem 1.2rem color-mix(in srgb, var(--smrt-color-shadow, black) 28%, transparent)); }
|
|
61
63
|
.speaker { margin: 0 0 .3rem; font-weight: var(--smrt-typography-weight-bold, 700); font-size: var(--smrt-typography-label-medium-size, .8rem); }
|
|
62
64
|
.caption-lines p, .interim { margin: .18rem 0 0; }
|
|
63
65
|
.interim { opacity: .8; }
|
|
64
66
|
@media (prefers-reduced-motion: reduce) { .spoken-captions { scroll-behavior: auto; } }
|
|
67
|
+
}
|
|
65
68
|
</style>
|
|
@@ -181,6 +181,8 @@ $effect(() => {
|
|
|
181
181
|
</Modal>
|
|
182
182
|
|
|
183
183
|
<style>
|
|
184
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
185
|
+
@layer smrt.theme {
|
|
184
186
|
/* :global() targets the Form primitive's rendered <form> (see #1589 scoping trap). */
|
|
185
187
|
:global(.dialog__form) {
|
|
186
188
|
display: flex;
|
|
@@ -211,16 +213,16 @@ $effect(() => {
|
|
|
211
213
|
|
|
212
214
|
.field__label {
|
|
213
215
|
font: var(--smrt-typography-label-large-font, 500 0.875rem / 1.25 sans-serif);
|
|
214
|
-
color: var(--smrt-color-on-surface
|
|
216
|
+
color: var(--smrt-color-on-surface);
|
|
215
217
|
}
|
|
216
218
|
|
|
217
219
|
.field__required {
|
|
218
|
-
color: var(--smrt-color-error
|
|
220
|
+
color: var(--smrt-color-error);
|
|
219
221
|
}
|
|
220
222
|
|
|
221
223
|
.field__hint {
|
|
222
224
|
font: var(--smrt-typography-body-small-font, 0.75rem / 1.25 sans-serif);
|
|
223
|
-
color: var(--smrt-color-on-surface-variant
|
|
225
|
+
color: var(--smrt-color-on-surface-variant);
|
|
224
226
|
text-align: right;
|
|
225
227
|
}
|
|
226
228
|
|
|
@@ -235,7 +237,7 @@ $effect(() => {
|
|
|
235
237
|
align-items: flex-start;
|
|
236
238
|
gap: 0.75rem;
|
|
237
239
|
padding: 0.75rem;
|
|
238
|
-
border: 1px solid var(--smrt-color-outline-variant
|
|
240
|
+
border: 1px solid var(--smrt-color-outline-variant);
|
|
239
241
|
border-radius: var(--smrt-radius-medium, 0.5rem);
|
|
240
242
|
cursor: pointer;
|
|
241
243
|
transition: border-color var(--smrt-duration-short2, 150ms),
|
|
@@ -243,17 +245,17 @@ $effect(() => {
|
|
|
243
245
|
}
|
|
244
246
|
|
|
245
247
|
.type-option:hover {
|
|
246
|
-
background: var(--smrt-color-surface-container
|
|
248
|
+
background: var(--smrt-color-surface-container);
|
|
247
249
|
}
|
|
248
250
|
|
|
249
251
|
.type-option--selected {
|
|
250
|
-
border-color: var(--smrt-color-primary
|
|
251
|
-
background: var(--smrt-color-primary-container
|
|
252
|
+
border-color: var(--smrt-color-primary);
|
|
253
|
+
background: var(--smrt-color-primary-container);
|
|
252
254
|
}
|
|
253
255
|
|
|
254
256
|
.type-option__radio {
|
|
255
257
|
margin-top: 0.125rem;
|
|
256
|
-
accent-color: var(--smrt-color-primary
|
|
258
|
+
accent-color: var(--smrt-color-primary);
|
|
257
259
|
}
|
|
258
260
|
|
|
259
261
|
.type-option__content {
|
|
@@ -264,13 +266,13 @@ $effect(() => {
|
|
|
264
266
|
|
|
265
267
|
.type-option__label {
|
|
266
268
|
font: var(--smrt-typography-body-medium-font, 0.875rem / 1.25 sans-serif);
|
|
267
|
-
color: var(--smrt-color-on-surface
|
|
269
|
+
color: var(--smrt-color-on-surface);
|
|
268
270
|
font-weight: var(--smrt-typography-weight-medium, 500);
|
|
269
271
|
}
|
|
270
272
|
|
|
271
273
|
.type-option__description {
|
|
272
274
|
font: var(--smrt-typography-body-small-font, 0.75rem / 1.25 sans-serif);
|
|
273
|
-
color: var(--smrt-color-on-surface-variant
|
|
275
|
+
color: var(--smrt-color-on-surface-variant);
|
|
274
276
|
}
|
|
275
277
|
|
|
276
278
|
@media (prefers-reduced-motion: reduce) {
|
|
@@ -278,4 +280,5 @@ $effect(() => {
|
|
|
278
280
|
transition: none;
|
|
279
281
|
}
|
|
280
282
|
}
|
|
283
|
+
}
|
|
281
284
|
</style>
|
|
@@ -113,7 +113,7 @@ $effect(() => {
|
|
|
113
113
|
<div
|
|
114
114
|
class="search-panel"
|
|
115
115
|
role="search"
|
|
116
|
-
aria-label={t(M['chat.search_messages.search'])}
|
|
116
|
+
aria-label={t(M['chat.search_messages.search'])} data-smrt-component="SearchMessages"
|
|
117
117
|
>
|
|
118
118
|
<div class="search-panel__header">
|
|
119
119
|
<h2 class="search-panel__title">{t(M['chat.search_messages.title'])}</h2>
|
|
@@ -221,13 +221,15 @@ $effect(() => {
|
|
|
221
221
|
{/if}
|
|
222
222
|
|
|
223
223
|
<style>
|
|
224
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
225
|
+
@layer smrt.theme {
|
|
224
226
|
.search-panel {
|
|
225
227
|
display: flex;
|
|
226
228
|
flex-direction: column;
|
|
227
229
|
width: 320px;
|
|
228
230
|
height: 100%;
|
|
229
|
-
background: var(--smrt-color-surface
|
|
230
|
-
border-left: 1px solid var(--smrt-color-outline-variant
|
|
231
|
+
background: var(--smrt-color-surface);
|
|
232
|
+
border-left: 1px solid var(--smrt-color-outline-variant);
|
|
231
233
|
overflow: hidden;
|
|
232
234
|
}
|
|
233
235
|
|
|
@@ -236,13 +238,13 @@ $effect(() => {
|
|
|
236
238
|
align-items: center;
|
|
237
239
|
justify-content: space-between;
|
|
238
240
|
padding: 0.75rem 1rem;
|
|
239
|
-
border-bottom: 1px solid var(--smrt-color-outline-variant
|
|
241
|
+
border-bottom: 1px solid var(--smrt-color-outline-variant);
|
|
240
242
|
}
|
|
241
243
|
|
|
242
244
|
.search-panel__title {
|
|
243
245
|
margin: 0;
|
|
244
246
|
font: var(--smrt-typography-title-small-font, 600 0.875rem / 1.25 sans-serif);
|
|
245
|
-
color: var(--smrt-color-on-surface
|
|
247
|
+
color: var(--smrt-color-on-surface);
|
|
246
248
|
}
|
|
247
249
|
|
|
248
250
|
/* :global() pierces into the Button child's rendered <button> (see #1589). */
|
|
@@ -252,12 +254,12 @@ $effect(() => {
|
|
|
252
254
|
padding: 0;
|
|
253
255
|
background: none;
|
|
254
256
|
border-radius: var(--smrt-radius-medium, 0.5rem);
|
|
255
|
-
color: var(--smrt-color-on-surface-variant
|
|
257
|
+
color: var(--smrt-color-on-surface-variant);
|
|
256
258
|
transition: background var(--smrt-duration-short2, 150ms);
|
|
257
259
|
}
|
|
258
260
|
|
|
259
261
|
.search-panel__header :global(.close-btn:hover) {
|
|
260
|
-
background: var(--smrt-color-surface-variant
|
|
262
|
+
background: var(--smrt-color-surface-variant);
|
|
261
263
|
}
|
|
262
264
|
|
|
263
265
|
.close-btn__icon {
|
|
@@ -268,7 +270,7 @@ $effect(() => {
|
|
|
268
270
|
/* :global() targets the Form primitive's rendered <form> (see #1589 scoping trap). */
|
|
269
271
|
:global(.search-form) {
|
|
270
272
|
padding: 0.75rem 1rem;
|
|
271
|
-
border-bottom: 1px solid var(--smrt-color-outline-variant
|
|
273
|
+
border-bottom: 1px solid var(--smrt-color-outline-variant);
|
|
272
274
|
}
|
|
273
275
|
|
|
274
276
|
.search-input-wrap {
|
|
@@ -276,22 +278,22 @@ $effect(() => {
|
|
|
276
278
|
align-items: center;
|
|
277
279
|
gap: 0.5rem;
|
|
278
280
|
padding: 0.5rem 0.75rem;
|
|
279
|
-
border: 1px solid var(--smrt-color-outline
|
|
281
|
+
border: 1px solid var(--smrt-color-outline);
|
|
280
282
|
border-radius: var(--smrt-radius-large, 1rem);
|
|
281
|
-
background: var(--smrt-color-surface-container
|
|
283
|
+
background: var(--smrt-color-surface-container);
|
|
282
284
|
transition: border-color var(--smrt-duration-short2, 150ms);
|
|
283
285
|
}
|
|
284
286
|
|
|
285
287
|
.search-input-wrap:focus-within {
|
|
286
|
-
border-color: var(--smrt-color-primary
|
|
287
|
-
box-shadow: 0 0 0 1px var(--smrt-color-primary
|
|
288
|
+
border-color: var(--smrt-color-primary);
|
|
289
|
+
box-shadow: 0 0 0 1px var(--smrt-color-primary);
|
|
288
290
|
}
|
|
289
291
|
|
|
290
292
|
.search-icon {
|
|
291
293
|
flex-shrink: 0;
|
|
292
294
|
width: 1.125rem;
|
|
293
295
|
height: 1.125rem;
|
|
294
|
-
color: var(--smrt-color-on-surface-variant
|
|
296
|
+
color: var(--smrt-color-on-surface-variant);
|
|
295
297
|
}
|
|
296
298
|
|
|
297
299
|
/* The Input primitive sits inside the bordered .search-input-wrap, which owns
|
|
@@ -305,7 +307,7 @@ $effect(() => {
|
|
|
305
307
|
background: transparent;
|
|
306
308
|
box-shadow: none;
|
|
307
309
|
font: var(--smrt-typography-body-medium-font, 0.875rem / 1.25 sans-serif);
|
|
308
|
-
color: var(--smrt-color-on-surface
|
|
310
|
+
color: var(--smrt-color-on-surface);
|
|
309
311
|
}
|
|
310
312
|
|
|
311
313
|
:global(.search-input:focus) {
|
|
@@ -321,13 +323,13 @@ $effect(() => {
|
|
|
321
323
|
height: 1.25rem;
|
|
322
324
|
padding: 0;
|
|
323
325
|
background: none;
|
|
324
|
-
border-radius: var(--smrt-radius-full
|
|
325
|
-
color: var(--smrt-color-on-surface-variant
|
|
326
|
+
border-radius: var(--smrt-radius-full);
|
|
327
|
+
color: var(--smrt-color-on-surface-variant);
|
|
326
328
|
}
|
|
327
329
|
|
|
328
330
|
.search-input-wrap :global(.clear-btn:hover) {
|
|
329
331
|
background: none;
|
|
330
|
-
color: var(--smrt-color-on-surface
|
|
332
|
+
color: var(--smrt-color-on-surface);
|
|
331
333
|
}
|
|
332
334
|
|
|
333
335
|
.clear-btn__icon {
|
|
@@ -356,7 +358,7 @@ $effect(() => {
|
|
|
356
358
|
margin: 0;
|
|
357
359
|
padding: 0.375rem 1rem;
|
|
358
360
|
font: var(--smrt-typography-label-small-font, 500 0.6875rem / 1 sans-serif);
|
|
359
|
-
color: var(--smrt-color-on-surface-variant
|
|
361
|
+
color: var(--smrt-color-on-surface-variant);
|
|
360
362
|
text-transform: uppercase;
|
|
361
363
|
letter-spacing: 0.05em;
|
|
362
364
|
}
|
|
@@ -375,11 +377,11 @@ $effect(() => {
|
|
|
375
377
|
}
|
|
376
378
|
|
|
377
379
|
.result-item:hover {
|
|
378
|
-
background: var(--smrt-color-surface-variant
|
|
380
|
+
background: var(--smrt-color-surface-variant);
|
|
379
381
|
}
|
|
380
382
|
|
|
381
383
|
.result-item:focus-visible {
|
|
382
|
-
outline: 2px solid var(--smrt-color-primary
|
|
384
|
+
outline: 2px solid var(--smrt-color-primary);
|
|
383
385
|
outline-offset: -2px;
|
|
384
386
|
}
|
|
385
387
|
|
|
@@ -392,16 +394,16 @@ $effect(() => {
|
|
|
392
394
|
.result-item__avatar {
|
|
393
395
|
width: 1.25rem;
|
|
394
396
|
height: 1.25rem;
|
|
395
|
-
border-radius: var(--smrt-radius-full
|
|
397
|
+
border-radius: var(--smrt-radius-full);
|
|
396
398
|
object-fit: cover;
|
|
397
399
|
}
|
|
398
400
|
|
|
399
401
|
.result-item__avatar-placeholder {
|
|
400
402
|
width: 1.25rem;
|
|
401
403
|
height: 1.25rem;
|
|
402
|
-
border-radius: var(--smrt-radius-full
|
|
403
|
-
background: var(--smrt-color-primary-container
|
|
404
|
-
color: var(--smrt-color-on-primary-container
|
|
404
|
+
border-radius: var(--smrt-radius-full);
|
|
405
|
+
background: var(--smrt-color-primary-container);
|
|
406
|
+
color: var(--smrt-color-on-primary-container);
|
|
405
407
|
display: inline-flex;
|
|
406
408
|
align-items: center;
|
|
407
409
|
justify-content: center;
|
|
@@ -410,19 +412,19 @@ $effect(() => {
|
|
|
410
412
|
|
|
411
413
|
.result-item__sender {
|
|
412
414
|
font: var(--smrt-typography-label-medium-font, 500 0.75rem / 1 sans-serif);
|
|
413
|
-
color: var(--smrt-color-on-surface
|
|
415
|
+
color: var(--smrt-color-on-surface);
|
|
414
416
|
}
|
|
415
417
|
|
|
416
418
|
.result-item__date {
|
|
417
419
|
margin-left: auto;
|
|
418
420
|
font: var(--smrt-typography-label-small-font, 500 0.6875rem / 1 sans-serif);
|
|
419
|
-
color: var(--smrt-color-on-surface-variant
|
|
421
|
+
color: var(--smrt-color-on-surface-variant);
|
|
420
422
|
}
|
|
421
423
|
|
|
422
424
|
.result-item__content {
|
|
423
425
|
margin: 0;
|
|
424
426
|
font: var(--smrt-typography-body-small-font, 0.75rem / 1.25 sans-serif);
|
|
425
|
-
color: var(--smrt-color-on-surface-variant
|
|
427
|
+
color: var(--smrt-color-on-surface-variant);
|
|
426
428
|
overflow: hidden;
|
|
427
429
|
display: -webkit-box;
|
|
428
430
|
-webkit-line-clamp: 3;
|
|
@@ -431,9 +433,9 @@ $effect(() => {
|
|
|
431
433
|
}
|
|
432
434
|
|
|
433
435
|
.result-item__content :global(.highlight) {
|
|
434
|
-
background: var(--smrt-color-tertiary-container
|
|
435
|
-
color: var(--smrt-color-on-tertiary-container
|
|
436
|
-
border-radius: var(--smrt-radius-sm
|
|
436
|
+
background: var(--smrt-color-tertiary-container);
|
|
437
|
+
color: var(--smrt-color-on-tertiary-container);
|
|
438
|
+
border-radius: var(--smrt-radius-sm);
|
|
437
439
|
padding: 0 0.125rem;
|
|
438
440
|
}
|
|
439
441
|
|
|
@@ -450,13 +452,13 @@ $effect(() => {
|
|
|
450
452
|
.search-empty__text {
|
|
451
453
|
margin: 0;
|
|
452
454
|
font: var(--smrt-typography-body-medium-font, 0.875rem / 1.25 sans-serif);
|
|
453
|
-
color: var(--smrt-color-on-surface-variant
|
|
455
|
+
color: var(--smrt-color-on-surface-variant);
|
|
454
456
|
}
|
|
455
457
|
|
|
456
458
|
.search-empty__hint {
|
|
457
459
|
margin: 0;
|
|
458
460
|
font: var(--smrt-typography-body-small-font, 0.75rem / 1.25 sans-serif);
|
|
459
|
-
color: var(--smrt-color-outline
|
|
461
|
+
color: var(--smrt-color-outline);
|
|
460
462
|
}
|
|
461
463
|
|
|
462
464
|
@media (prefers-reduced-motion: reduce) {
|
|
@@ -469,4 +471,5 @@ $effect(() => {
|
|
|
469
471
|
transition: none;
|
|
470
472
|
}
|
|
471
473
|
}
|
|
474
|
+
}
|
|
472
475
|
</style>
|
|
@@ -338,7 +338,7 @@ async function customSaved(offering: HelperOffering) {
|
|
|
338
338
|
}
|
|
339
339
|
</script>
|
|
340
340
|
|
|
341
|
-
<section class="helper-panel" aria-busy={loading || saving} aria-labelledby="helper-panel-title">
|
|
341
|
+
<section class="helper-panel" aria-busy={loading || saving} aria-labelledby="helper-panel-title" data-smrt-component="HelperControlPanel">
|
|
342
342
|
<h2 id="helper-panel-title">{t(M['chat.helper.title'])}</h2>
|
|
343
343
|
{#if message}<p class="message" role={messageIsError ? 'alert' : 'status'} aria-live={messageIsError ? 'assertive' : 'polite'}>{message}</p>{/if}
|
|
344
344
|
{#if snapshot?.recovery}<p class="message" role="status">{snapshot.recovery.message}</p>{/if}
|
|
@@ -387,6 +387,8 @@ async function customSaved(offering: HelperOffering) {
|
|
|
387
387
|
</section>
|
|
388
388
|
|
|
389
389
|
<style>
|
|
390
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
391
|
+
@layer smrt.theme {
|
|
390
392
|
.helper-panel { display: grid; gap: var(--smrt-spacing-4); max-width: 42rem; padding: var(--smrt-spacing-4); color: var(--smrt-color-on-surface); }
|
|
391
393
|
fieldset { display: grid; gap: var(--smrt-spacing-3); border: 0; margin: 0; padding: 0; }
|
|
392
394
|
label { display: grid; gap: var(--smrt-spacing-1); font: var(--smrt-typography-label-large-font); }
|
|
@@ -398,4 +400,5 @@ async function customSaved(offering: HelperOffering) {
|
|
|
398
400
|
.setup-actions, .actions { display: flex; flex-wrap: wrap; gap: var(--smrt-spacing-2); }
|
|
399
401
|
.custom-setup { display: grid; gap: var(--smrt-spacing-3); padding: var(--smrt-spacing-3); border: 1px solid var(--smrt-color-outline-variant); border-radius: var(--smrt-radius-small); }
|
|
400
402
|
.message { margin: 0; color: var(--smrt-color-on-surface-variant); }
|
|
403
|
+
}
|
|
401
404
|
</style>
|
|
@@ -58,10 +58,10 @@ function handlePointerUp() {
|
|
|
58
58
|
}
|
|
59
59
|
</script>
|
|
60
60
|
|
|
61
|
-
<div class="chat-layout" class:chat-layout--resizing={isResizing}>
|
|
61
|
+
<div class="chat-layout" class:chat-layout--resizing={isResizing} data-smrt-component="ChatLayout">
|
|
62
62
|
<aside
|
|
63
63
|
class="chat-layout__sidebar"
|
|
64
|
-
style
|
|
64
|
+
style:--smrt-chat-layout-sidebar-width="{sidebarWidth}px"
|
|
65
65
|
aria-label={t(M['chat.chat_layout.rooms_label'])}
|
|
66
66
|
>
|
|
67
67
|
<RoomList
|
|
@@ -92,13 +92,15 @@ function handlePointerUp() {
|
|
|
92
92
|
</div>
|
|
93
93
|
|
|
94
94
|
<style>
|
|
95
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
96
|
+
@layer smrt.theme {
|
|
95
97
|
.chat-layout {
|
|
96
98
|
display: flex;
|
|
97
99
|
height: 100%;
|
|
98
100
|
width: 100%;
|
|
99
101
|
overflow: hidden;
|
|
100
|
-
background: var(--smrt-color-surface
|
|
101
|
-
color: var(--smrt-color-on-surface
|
|
102
|
+
background: var(--smrt-color-surface);
|
|
103
|
+
color: var(--smrt-color-on-surface);
|
|
102
104
|
}
|
|
103
105
|
|
|
104
106
|
.chat-layout--resizing {
|
|
@@ -108,10 +110,11 @@ function handlePointerUp() {
|
|
|
108
110
|
|
|
109
111
|
.chat-layout__sidebar {
|
|
110
112
|
flex-shrink: 0;
|
|
113
|
+
width: var(--smrt-chat-layout-sidebar-width);
|
|
111
114
|
display: flex;
|
|
112
115
|
flex-direction: column;
|
|
113
|
-
background: var(--smrt-color-surface-container
|
|
114
|
-
border-right: 1px solid var(--smrt-color-outline-variant
|
|
116
|
+
background: var(--smrt-color-surface-container);
|
|
117
|
+
border-right: 1px solid var(--smrt-color-outline-variant);
|
|
115
118
|
overflow-y: auto;
|
|
116
119
|
overflow-x: hidden;
|
|
117
120
|
}
|
|
@@ -128,12 +131,12 @@ function handlePointerUp() {
|
|
|
128
131
|
|
|
129
132
|
.chat-layout__resize-handle:hover,
|
|
130
133
|
.chat-layout__resize-handle:active {
|
|
131
|
-
background: var(--smrt-color-primary
|
|
134
|
+
background: var(--smrt-color-primary);
|
|
132
135
|
opacity: 0.4;
|
|
133
136
|
}
|
|
134
137
|
|
|
135
138
|
.chat-layout__resize-handle:focus-visible {
|
|
136
|
-
outline: 2px solid var(--smrt-color-primary
|
|
139
|
+
outline: 2px solid var(--smrt-color-primary);
|
|
137
140
|
outline-offset: -2px;
|
|
138
141
|
}
|
|
139
142
|
|
|
@@ -151,14 +154,15 @@ function handlePointerUp() {
|
|
|
151
154
|
}
|
|
152
155
|
|
|
153
156
|
.chat-layout__sidebar {
|
|
154
|
-
width: 100
|
|
157
|
+
width: 100%;
|
|
155
158
|
max-height: 14rem;
|
|
156
159
|
border-right: 0;
|
|
157
|
-
border-bottom: 1px solid var(--smrt-color-outline-variant
|
|
160
|
+
border-bottom: 1px solid var(--smrt-color-outline-variant);
|
|
158
161
|
}
|
|
159
162
|
|
|
160
163
|
.chat-layout__resize-handle {
|
|
161
164
|
display: none;
|
|
162
165
|
}
|
|
163
166
|
}
|
|
167
|
+
}
|
|
164
168
|
</style>
|
|
@@ -36,13 +36,13 @@ function getStatusColor(status: string): string {
|
|
|
36
36
|
// "online" reconciled to the success token (was --smrt-color-tertiary)
|
|
37
37
|
// so it matches UserPresence and stays semantically green (T2 #1391).
|
|
38
38
|
case 'online':
|
|
39
|
-
return 'var(--smrt-color-success
|
|
39
|
+
return 'var(--smrt-color-success)';
|
|
40
40
|
case 'away':
|
|
41
|
-
return 'var(--smrt-color-warning
|
|
41
|
+
return 'var(--smrt-color-warning)';
|
|
42
42
|
case 'dnd':
|
|
43
|
-
return 'var(--smrt-color-error
|
|
43
|
+
return 'var(--smrt-color-error)';
|
|
44
44
|
default:
|
|
45
|
-
return 'var(--smrt-color-outline
|
|
45
|
+
return 'var(--smrt-color-outline)';
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
|
|
@@ -71,7 +71,7 @@ function getRoleBadgeLabel(role: string): string {
|
|
|
71
71
|
}
|
|
72
72
|
</script>
|
|
73
73
|
|
|
74
|
-
<aside class="member-list" aria-label={t(M['chat.member_list.room_members'])}>
|
|
74
|
+
<aside class="member-list" aria-label={t(M['chat.member_list.room_members'])} data-smrt-component="MemberList">
|
|
75
75
|
<div class="member-list__header">
|
|
76
76
|
<h2 class="member-list__title">Members</h2>
|
|
77
77
|
<span class="member-list__count">{participants.length}</span>
|
|
@@ -209,13 +209,15 @@ function getRoleBadgeLabel(role: string): string {
|
|
|
209
209
|
</aside>
|
|
210
210
|
|
|
211
211
|
<style>
|
|
212
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
213
|
+
@layer smrt.theme {
|
|
212
214
|
.member-list {
|
|
213
215
|
display: flex;
|
|
214
216
|
flex-direction: column;
|
|
215
217
|
width: 240px;
|
|
216
218
|
height: 100%;
|
|
217
|
-
background: var(--smrt-color-surface-container
|
|
218
|
-
border-left: 1px solid var(--smrt-color-outline-variant
|
|
219
|
+
background: var(--smrt-color-surface-container);
|
|
220
|
+
border-left: 1px solid var(--smrt-color-outline-variant);
|
|
219
221
|
overflow: hidden;
|
|
220
222
|
}
|
|
221
223
|
|
|
@@ -224,18 +226,18 @@ function getRoleBadgeLabel(role: string): string {
|
|
|
224
226
|
align-items: center;
|
|
225
227
|
gap: 0.375rem;
|
|
226
228
|
padding: 0.75rem 1rem;
|
|
227
|
-
border-bottom: 1px solid var(--smrt-color-outline-variant
|
|
229
|
+
border-bottom: 1px solid var(--smrt-color-outline-variant);
|
|
228
230
|
}
|
|
229
231
|
|
|
230
232
|
.member-list__title {
|
|
231
233
|
margin: 0;
|
|
232
234
|
font: var(--smrt-typography-title-small-font, 600 0.875rem / 1.25 sans-serif);
|
|
233
|
-
color: var(--smrt-color-on-surface
|
|
235
|
+
color: var(--smrt-color-on-surface);
|
|
234
236
|
}
|
|
235
237
|
|
|
236
238
|
.member-list__count {
|
|
237
239
|
font: var(--smrt-typography-label-small-font, 500 0.6875rem / 1 sans-serif);
|
|
238
|
-
color: var(--smrt-color-on-surface-variant
|
|
240
|
+
color: var(--smrt-color-on-surface-variant);
|
|
239
241
|
}
|
|
240
242
|
|
|
241
243
|
/* :global() pierces into the Button child's rendered <button> (see #1589). */
|
|
@@ -246,12 +248,12 @@ function getRoleBadgeLabel(role: string): string {
|
|
|
246
248
|
padding: 0;
|
|
247
249
|
background: none;
|
|
248
250
|
border-radius: var(--smrt-radius-medium, 0.5rem);
|
|
249
|
-
color: var(--smrt-color-on-surface-variant
|
|
251
|
+
color: var(--smrt-color-on-surface-variant);
|
|
250
252
|
transition: background var(--smrt-duration-short2, 150ms);
|
|
251
253
|
}
|
|
252
254
|
|
|
253
255
|
.member-list__header :global(.close-btn:hover) {
|
|
254
|
-
background: var(--smrt-color-surface-variant
|
|
256
|
+
background: var(--smrt-color-surface-variant);
|
|
255
257
|
}
|
|
256
258
|
|
|
257
259
|
.close-btn__icon {
|
|
@@ -276,13 +278,13 @@ function getRoleBadgeLabel(role: string): string {
|
|
|
276
278
|
margin: 0;
|
|
277
279
|
padding: 0.375rem 1rem;
|
|
278
280
|
font: var(--smrt-typography-label-small-font, 500 0.6875rem / 1 sans-serif);
|
|
279
|
-
color: var(--smrt-color-on-surface-variant
|
|
281
|
+
color: var(--smrt-color-on-surface-variant);
|
|
280
282
|
text-transform: uppercase;
|
|
281
283
|
letter-spacing: 0.05em;
|
|
282
284
|
}
|
|
283
285
|
|
|
284
286
|
.member-group__count {
|
|
285
|
-
color: var(--smrt-color-outline
|
|
287
|
+
color: var(--smrt-color-outline);
|
|
286
288
|
}
|
|
287
289
|
|
|
288
290
|
.member-group__list {
|
|
@@ -311,16 +313,16 @@ function getRoleBadgeLabel(role: string): string {
|
|
|
311
313
|
.member-item__avatar {
|
|
312
314
|
width: 2rem;
|
|
313
315
|
height: 2rem;
|
|
314
|
-
border-radius: var(--smrt-radius-full
|
|
316
|
+
border-radius: var(--smrt-radius-full);
|
|
315
317
|
object-fit: cover;
|
|
316
318
|
}
|
|
317
319
|
|
|
318
320
|
.member-item__avatar-placeholder {
|
|
319
321
|
width: 2rem;
|
|
320
322
|
height: 2rem;
|
|
321
|
-
border-radius: var(--smrt-radius-full
|
|
322
|
-
background: var(--smrt-color-primary-container
|
|
323
|
-
color: var(--smrt-color-on-primary-container
|
|
323
|
+
border-radius: var(--smrt-radius-full);
|
|
324
|
+
background: var(--smrt-color-primary-container);
|
|
325
|
+
color: var(--smrt-color-on-primary-container);
|
|
324
326
|
display: inline-flex;
|
|
325
327
|
align-items: center;
|
|
326
328
|
justify-content: center;
|
|
@@ -333,8 +335,8 @@ function getRoleBadgeLabel(role: string): string {
|
|
|
333
335
|
right: 0;
|
|
334
336
|
width: 0.625rem;
|
|
335
337
|
height: 0.625rem;
|
|
336
|
-
border-radius: var(--smrt-radius-full
|
|
337
|
-
border: 2px solid var(--smrt-color-surface-container
|
|
338
|
+
border-radius: var(--smrt-radius-full);
|
|
339
|
+
border: 2px solid var(--smrt-color-surface-container);
|
|
338
340
|
}
|
|
339
341
|
|
|
340
342
|
.member-item__info {
|
|
@@ -347,7 +349,7 @@ function getRoleBadgeLabel(role: string): string {
|
|
|
347
349
|
|
|
348
350
|
.member-item__name {
|
|
349
351
|
font: var(--smrt-typography-body-medium-font, 0.875rem / 1.25 sans-serif);
|
|
350
|
-
color: var(--smrt-color-on-surface
|
|
352
|
+
color: var(--smrt-color-on-surface);
|
|
351
353
|
overflow: hidden;
|
|
352
354
|
text-overflow: ellipsis;
|
|
353
355
|
white-space: nowrap;
|
|
@@ -356,25 +358,25 @@ function getRoleBadgeLabel(role: string): string {
|
|
|
356
358
|
.role-badge {
|
|
357
359
|
flex-shrink: 0;
|
|
358
360
|
padding: 0.0625rem 0.375rem;
|
|
359
|
-
border-radius: var(--smrt-radius-full
|
|
361
|
+
border-radius: var(--smrt-radius-full);
|
|
360
362
|
font: var(--smrt-typography-label-small-font, 500 0.6875rem / 1 sans-serif);
|
|
361
363
|
}
|
|
362
364
|
|
|
363
365
|
.role-badge--owner {
|
|
364
|
-
background: var(--smrt-color-tertiary-container
|
|
365
|
-
color: var(--smrt-color-on-tertiary-container
|
|
366
|
+
background: var(--smrt-color-tertiary-container);
|
|
367
|
+
color: var(--smrt-color-on-tertiary-container);
|
|
366
368
|
}
|
|
367
369
|
|
|
368
370
|
.role-badge--admin {
|
|
369
|
-
background: var(--smrt-color-secondary-container
|
|
370
|
-
color: var(--smrt-color-on-secondary-container
|
|
371
|
+
background: var(--smrt-color-secondary-container);
|
|
372
|
+
color: var(--smrt-color-on-secondary-container);
|
|
371
373
|
}
|
|
372
374
|
|
|
373
375
|
.member-list__empty {
|
|
374
376
|
text-align: center;
|
|
375
377
|
padding: 2rem 1rem;
|
|
376
378
|
margin: 0;
|
|
377
|
-
color: var(--smrt-color-on-surface-variant
|
|
379
|
+
color: var(--smrt-color-on-surface-variant);
|
|
378
380
|
font: var(--smrt-typography-body-medium-font, 0.875rem / 1.25 sans-serif);
|
|
379
381
|
}
|
|
380
382
|
|
|
@@ -383,4 +385,5 @@ function getRoleBadgeLabel(role: string): string {
|
|
|
383
385
|
transition: none;
|
|
384
386
|
}
|
|
385
387
|
}
|
|
388
|
+
}
|
|
386
389
|
</style>
|