@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.
Files changed (39) hide show
  1. package/dist/chunks/{chat-stream-j6VuNo3t.js → chat-stream-D1xCl9IM.js} +2 -2
  2. package/dist/chunks/{chat-stream-j6VuNo3t.js.map → chat-stream-D1xCl9IM.js.map} +1 -1
  3. package/dist/index.js +1 -1
  4. package/dist/manifest.json +1 -1
  5. package/dist/smrt-knowledge.json +3 -3
  6. package/dist/svelte/components/agent/AgentChat.svelte +70 -67
  7. package/dist/svelte/components/agent/AgentSelector.svelte +26 -23
  8. package/dist/svelte/components/agent/AgentSessionPanel.svelte +47 -44
  9. package/dist/svelte/components/agent/ToolCallDisplay.svelte +52 -49
  10. package/dist/svelte/components/assistant/AssistantChoiceCards.svelte +19 -17
  11. package/dist/svelte/components/assistant/AssistantComposer.svelte +31 -28
  12. package/dist/svelte/components/assistant/AssistantDock.svelte +69 -66
  13. package/dist/svelte/components/assistant/AssistantThreadList.svelte +23 -20
  14. package/dist/svelte/components/assistant/FloatingAssistant.svelte +6 -3
  15. package/dist/svelte/components/assistant/captions/CaptionOverlay.svelte +4 -1
  16. package/dist/svelte/components/assistant/captions/HeardCaptions.svelte +5 -2
  17. package/dist/svelte/components/assistant/captions/SpokenCaptions.svelte +5 -2
  18. package/dist/svelte/components/dialogs/RoomCreateDialog.svelte +13 -10
  19. package/dist/svelte/components/dialogs/SearchMessages.svelte +35 -32
  20. package/dist/svelte/components/helper/HelperControlPanel.svelte +4 -1
  21. package/dist/svelte/components/layout/ChatLayout.svelte +14 -10
  22. package/dist/svelte/components/layout/MemberList.svelte +30 -27
  23. package/dist/svelte/components/layout/RoomHeader.svelte +19 -16
  24. package/dist/svelte/components/layout/RoomList.svelte +26 -23
  25. package/dist/svelte/components/messages/MessageInput.svelte +20 -17
  26. package/dist/svelte/components/messages/MessageItem.svelte +45 -42
  27. package/dist/svelte/components/messages/MessageList.svelte +8 -5
  28. package/dist/svelte/components/messages/ThreadPanel.svelte +15 -12
  29. package/dist/svelte/components/shared/FileUpload.svelte +39 -36
  30. package/dist/svelte/components/shared/LinkPreview.svelte +9 -6
  31. package/dist/svelte/components/shared/MentionAutocomplete.svelte +16 -13
  32. package/dist/svelte/components/shared/ReadReceipts.svelte +13 -10
  33. package/dist/svelte/components/shared/UserPresence.svelte +10 -7
  34. package/dist/svelte/components/tabs/ChatTab.svelte +26 -23
  35. package/dist/svelte/components/tabs/ChatTabList.svelte +20 -17
  36. package/dist/svelte/components/tabs/ChatTabs.svelte +7 -4
  37. package/dist/svelte/components/tabs/MiniChat.svelte +26 -23
  38. package/dist/sveltekit.js +1 -1
  39. package/package.json +17 -17
@@ -392,7 +392,7 @@ function removeAttachment(id: string) {
392
392
  <div
393
393
  class="assistant-composer"
394
394
  ondrop={onupload ? handleDrop : undefined}
395
- ondragover={onupload ? (event) => event.preventDefault() : undefined}
395
+ ondragover={onupload ? (event) => event.preventDefault() : undefined} data-smrt-component="AssistantComposer"
396
396
  >
397
397
  {#if sendError}
398
398
  <p class="assistant-composer-error" role="alert">
@@ -500,10 +500,12 @@ function removeAttachment(id: string) {
500
500
  </div>
501
501
 
502
502
  <style>
503
+ @layer smrt.reset, smrt.structure, smrt.theme;
504
+ @layer smrt.theme {
503
505
  .assistant-composer {
504
- border-top: 1px solid var(--smrt-color-outline-variant, #c4c6cf);
505
- background: var(--smrt-color-surface, #ffffff);
506
- padding: var(--smrt-spacing-2, 8px);
506
+ border-top: 1px solid var(--smrt-color-outline-variant);
507
+ background: var(--smrt-color-surface);
508
+ padding: var(--smrt-spacing-2);
507
509
  flex-shrink: 0;
508
510
  container-type: inline-size;
509
511
  }
@@ -512,7 +514,7 @@ function removeAttachment(id: string) {
512
514
  .assistant-composer-row {
513
515
  display: flex;
514
516
  align-items: flex-end;
515
- gap: var(--smrt-spacing-2, 8px);
517
+ gap: var(--smrt-spacing-2);
516
518
  }
517
519
 
518
520
  :global(.assistant-composer-attach) {
@@ -523,15 +525,15 @@ function removeAttachment(id: string) {
523
525
  width: 44px;
524
526
  height: 44px;
525
527
  padding: 0;
526
- border: 1px solid var(--smrt-color-outline-variant, #c4c6cf);
527
- border-radius: var(--smrt-radius-full, 9999px);
528
- background: var(--smrt-color-surface-container-low, #f7f7fb);
529
- color: var(--smrt-color-on-surface-variant, #43474e);
528
+ border: 1px solid var(--smrt-color-outline-variant);
529
+ border-radius: var(--smrt-radius-full);
530
+ background: var(--smrt-color-surface-container-low);
531
+ color: var(--smrt-color-on-surface-variant);
530
532
  cursor: pointer;
531
533
  }
532
534
 
533
535
  :global(.assistant-composer-attach:hover:not(:disabled)) {
534
- background: var(--smrt-color-surface-container, #f0f0f4);
536
+ background: var(--smrt-color-surface-container);
535
537
  }
536
538
 
537
539
  :global(.assistant-composer-attach:disabled) {
@@ -570,11 +572,11 @@ function removeAttachment(id: string) {
570
572
 
571
573
  :global(.assistant-composer-send) {
572
574
  flex-shrink: 0;
573
- padding: var(--smrt-spacing-2, 8px) var(--smrt-spacing-3, 12px);
575
+ padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
574
576
  border: none;
575
- border-radius: var(--smrt-radius-medium, 8px);
576
- background: var(--smrt-color-primary, #005ac1);
577
- color: var(--smrt-color-on-primary, #ffffff);
577
+ border-radius: var(--smrt-radius-medium);
578
+ background: var(--smrt-color-primary);
579
+ color: var(--smrt-color-on-primary);
578
580
  font: var(--smrt-typography-label-large-font, 500 0.875rem/1.25 sans-serif);
579
581
  cursor: pointer;
580
582
  }
@@ -588,21 +590,21 @@ function removeAttachment(id: string) {
588
590
  list-style: none;
589
591
  display: flex;
590
592
  flex-wrap: wrap;
591
- gap: var(--smrt-spacing-2, 8px);
592
- margin: 0 0 var(--smrt-spacing-2, 8px);
593
+ gap: var(--smrt-spacing-2);
594
+ margin: 0 0 var(--smrt-spacing-2);
593
595
  padding: 0;
594
596
  }
595
597
 
596
598
  .assistant-composer-chip {
597
599
  display: inline-flex;
598
600
  align-items: center;
599
- gap: var(--smrt-spacing-1, 4px);
600
- padding: var(--smrt-spacing-1, 4px) var(--smrt-spacing-2, 8px);
601
- border-radius: var(--smrt-radius-full, 9999px);
602
- background: var(--smrt-color-surface-container-low, #f7f7fb);
603
- border: 1px solid var(--smrt-color-outline-variant, #c4c6cf);
601
+ gap: var(--smrt-spacing-1);
602
+ padding: var(--smrt-spacing-1) var(--smrt-spacing-2);
603
+ border-radius: var(--smrt-radius-full);
604
+ background: var(--smrt-color-surface-container-low);
605
+ border: 1px solid var(--smrt-color-outline-variant);
604
606
  font: var(--smrt-typography-label-small-font, 500 0.6875rem/1 sans-serif);
605
- color: var(--smrt-color-on-surface, #1a1c1e);
607
+ color: var(--smrt-color-on-surface);
606
608
  max-width: 160px;
607
609
  }
608
610
 
@@ -615,18 +617,18 @@ function removeAttachment(id: string) {
615
617
  :global(.assistant-composer-chip-remove) {
616
618
  border: none;
617
619
  background: none;
618
- color: var(--smrt-color-on-surface-variant, #43474e);
620
+ color: var(--smrt-color-on-surface-variant);
619
621
  cursor: pointer;
620
622
  line-height: 1;
621
623
  padding: 0;
622
624
  }
623
625
 
624
626
  .assistant-composer-error {
625
- margin: 0 0 var(--smrt-spacing-2, 8px);
626
- padding: var(--smrt-spacing-2, 8px) var(--smrt-spacing-3, 12px);
627
- border-radius: var(--smrt-radius-medium, 8px);
628
- background: var(--smrt-color-error-container, #ffdad6);
629
- color: var(--smrt-color-on-error-container, #410002);
627
+ margin: 0 0 var(--smrt-spacing-2);
628
+ padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
629
+ border-radius: var(--smrt-radius-medium);
630
+ background: var(--smrt-color-error-container);
631
+ color: var(--smrt-color-on-error-container);
630
632
  font: var(--smrt-typography-body-small-font, 0.8125rem/1.4 sans-serif);
631
633
  }
632
634
 
@@ -647,4 +649,5 @@ function removeAttachment(id: string) {
647
649
  margin-inline-start: auto;
648
650
  }
649
651
  }
652
+ }
650
653
  </style>
@@ -604,7 +604,7 @@ async function handleConfirmAction(requestId: string) {
604
604
  }
605
605
  </script>
606
606
 
607
- <div class="assistant-dock">
607
+ <div class="assistant-dock" data-smrt-component="AssistantDock">
608
608
  <div
609
609
  class="assistant-dock-layout"
610
610
  data-threads-open={threadsOpen || undefined}
@@ -995,6 +995,8 @@ async function handleConfirmAction(requestId: string) {
995
995
  </div>
996
996
 
997
997
  <style>
998
+ @layer smrt.reset, smrt.structure, smrt.theme;
999
+ @layer smrt.theme {
998
1000
  /* #3000: the dock sizes itself against its own container (a shell dock
999
1001
  * edge can be ~250px wide) rather than the viewport. A container cannot
1000
1002
  * query itself, so the flex layout lives on an inner wrapper. */
@@ -1003,8 +1005,8 @@ async function handleConfirmAction(requestId: string) {
1003
1005
  height: 100%;
1004
1006
  min-height: 0;
1005
1007
  font-family: var(--smrt-font-family, system-ui, sans-serif);
1006
- background: var(--smrt-color-surface, #ffffff);
1007
- color: var(--smrt-color-on-surface, #1a1c1e);
1008
+ background: var(--smrt-color-surface);
1009
+ color: var(--smrt-color-on-surface);
1008
1010
  }
1009
1011
 
1010
1012
  .assistant-dock-layout {
@@ -1019,9 +1021,9 @@ async function handleConfirmAction(requestId: string) {
1019
1021
  justify-content: space-between;
1020
1022
  gap: 0.5rem;
1021
1023
  padding: 0.35rem 0.75rem;
1022
- border-top: 1px solid var(--smrt-color-outline-variant, #c4c7c5);
1024
+ border-top: 1px solid var(--smrt-color-outline-variant);
1023
1025
  font-size: var(--smrt-typography-body-medium-size, 0.85rem);
1024
- color: var(--smrt-color-on-surface-variant, #44474e);
1026
+ color: var(--smrt-color-on-surface-variant);
1025
1027
  }
1026
1028
 
1027
1029
  .assistant-dock-run {
@@ -1030,16 +1032,16 @@ async function handleConfirmAction(requestId: string) {
1030
1032
  justify-content: space-between;
1031
1033
  gap: 0.5rem;
1032
1034
  padding: 0.35rem 0.75rem;
1033
- border-bottom: 1px solid var(--smrt-color-outline-variant, #c4c7c5);
1035
+ border-bottom: 1px solid var(--smrt-color-outline-variant);
1034
1036
  font-size: var(--smrt-typography-body-medium-size, 0.85rem);
1035
1037
  }
1036
1038
 
1037
1039
  .assistant-dock-tool-request {
1038
1040
  margin: 0.5rem 0;
1039
1041
  padding: 0.75rem;
1040
- border: 1px solid var(--smrt-color-outline-variant, #c4c7c5);
1041
- border-radius: var(--smrt-radius-md, 8px);
1042
- background: var(--smrt-color-surface-container, #f3f3f3);
1042
+ border: 1px solid var(--smrt-color-outline-variant);
1043
+ border-radius: var(--smrt-radius-md);
1044
+ background: var(--smrt-color-surface-container);
1043
1045
  }
1044
1046
 
1045
1047
  .assistant-dock-tool-request p {
@@ -1051,7 +1053,7 @@ async function handleConfirmAction(requestId: string) {
1051
1053
  }
1052
1054
 
1053
1055
  .assistant-dock-tool-request-warning {
1054
- color: var(--smrt-color-error, #b3261e);
1056
+ color: var(--smrt-color-error);
1055
1057
  }
1056
1058
 
1057
1059
  .assistant-dock-tool-request-details pre {
@@ -1091,15 +1093,15 @@ async function handleConfirmAction(requestId: string) {
1091
1093
  display: flex;
1092
1094
  justify-content: flex-start;
1093
1095
  align-items: center;
1094
- gap: var(--smrt-spacing-2, 8px);
1096
+ gap: var(--smrt-spacing-2);
1095
1097
  flex-shrink: 0;
1096
1098
  width: 100%;
1097
1099
  min-height: 44px;
1098
- padding: var(--smrt-spacing-2, 8px) var(--smrt-spacing-3, 12px);
1100
+ padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
1099
1101
  border: none;
1100
- border-bottom: 1px solid var(--smrt-color-outline-variant, #c4c6cf);
1101
- background: var(--smrt-color-surface-container-low, #f7f7fb);
1102
- color: var(--smrt-color-on-surface, #1a1c1e);
1102
+ border-bottom: 1px solid var(--smrt-color-outline-variant);
1103
+ background: var(--smrt-color-surface-container-low);
1104
+ color: var(--smrt-color-on-surface);
1103
1105
  font: var(--smrt-typography-label-large-font, 500 0.875rem/1.25 sans-serif);
1104
1106
  font-family: inherit;
1105
1107
  border-radius: 0;
@@ -1109,7 +1111,7 @@ async function handleConfirmAction(requestId: string) {
1109
1111
 
1110
1112
  .assistant-dock .assistant-dock-layout > :global(.assistant-dock-threads-toggle::before) {
1111
1113
  content: '▸' / '';
1112
- color: var(--smrt-color-on-surface-variant, #43474e);
1114
+ color: var(--smrt-color-on-surface-variant);
1113
1115
  }
1114
1116
 
1115
1117
  .assistant-dock .assistant-dock-layout[data-threads-open]
@@ -1118,7 +1120,7 @@ async function handleConfirmAction(requestId: string) {
1118
1120
  }
1119
1121
 
1120
1122
  .assistant-dock .assistant-dock-layout > :global(.assistant-dock-threads-toggle:focus-visible) {
1121
- outline: 2px solid var(--smrt-color-primary, #005ac1);
1123
+ outline: 2px solid var(--smrt-color-primary);
1122
1124
  outline-offset: -2px;
1123
1125
  }
1124
1126
 
@@ -1130,7 +1132,7 @@ async function handleConfirmAction(requestId: string) {
1130
1132
  display: flex;
1131
1133
  max-width: none;
1132
1134
  max-height: 40%;
1133
- border-bottom: 1px solid var(--smrt-color-outline-variant, #c4c6cf);
1135
+ border-bottom: 1px solid var(--smrt-color-outline-variant);
1134
1136
  }
1135
1137
 
1136
1138
  .assistant-dock-threads > :global(.assistant-thread-list) {
@@ -1150,11 +1152,11 @@ async function handleConfirmAction(requestId: string) {
1150
1152
 
1151
1153
  .assistant-dock-empty {
1152
1154
  margin: 0;
1153
- padding: var(--smrt-spacing-2, 8px) var(--smrt-spacing-3, 12px);
1155
+ padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
1154
1156
  font: var(--smrt-typography-body-small-font, 0.8125rem/1.4 sans-serif);
1155
- color: var(--smrt-color-on-surface-variant, #43474e);
1156
- background: var(--smrt-color-surface-container-low, #f7f7fb);
1157
- border-bottom: 1px solid var(--smrt-color-outline-variant, #c4c6cf);
1157
+ color: var(--smrt-color-on-surface-variant);
1158
+ background: var(--smrt-color-surface-container-low);
1159
+ border-bottom: 1px solid var(--smrt-color-outline-variant);
1158
1160
  }
1159
1161
 
1160
1162
  .assistant-dock-scroll {
@@ -1162,8 +1164,8 @@ async function handleConfirmAction(requestId: string) {
1162
1164
  overflow-y: auto;
1163
1165
  display: flex;
1164
1166
  flex-direction: column;
1165
- gap: var(--smrt-spacing-3, 12px);
1166
- padding: var(--smrt-spacing-3, 12px);
1167
+ gap: var(--smrt-spacing-3);
1168
+ padding: var(--smrt-spacing-3);
1167
1169
  min-height: 0;
1168
1170
  }
1169
1171
 
@@ -1173,7 +1175,7 @@ async function handleConfirmAction(requestId: string) {
1173
1175
  padding: 0;
1174
1176
  display: flex;
1175
1177
  flex-direction: column;
1176
- gap: var(--smrt-spacing-2, 8px);
1178
+ gap: var(--smrt-spacing-2);
1177
1179
  }
1178
1180
 
1179
1181
  /* Narrow-dock friendly bubbles: the user's message sits right, the
@@ -1187,26 +1189,26 @@ async function handleConfirmAction(requestId: string) {
1187
1189
  .assistant-dock-messages > li :global(.bubble),
1188
1190
  .assistant-dock-streaming :global(.bubble) {
1189
1191
  max-width: 85%;
1190
- padding: var(--smrt-spacing-2, 8px) var(--smrt-spacing-3, 12px);
1191
- border-radius: var(--smrt-radius-large, 12px);
1192
+ padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
1193
+ border-radius: var(--smrt-radius-large);
1192
1194
  overflow-wrap: anywhere;
1193
1195
  }
1194
1196
 
1195
1197
  .assistant-dock-messages > li[data-role='user'] :global(.bubble),
1196
1198
  .assistant-dock-messages > li[data-role='user'] :global(.bubble--own) {
1197
1199
  align-self: flex-end;
1198
- background: var(--smrt-color-primary-container, #d8e2ff);
1199
- color: var(--smrt-color-on-primary-container, #001a41);
1200
- border-radius: var(--smrt-radius-large, 12px);
1200
+ background: var(--smrt-color-primary-container);
1201
+ color: var(--smrt-color-on-primary-container);
1202
+ border-radius: var(--smrt-radius-large);
1201
1203
  }
1202
1204
 
1203
1205
  .assistant-dock-messages > li:not([data-role='user']) :global(.bubble--agent),
1204
1206
  .assistant-dock-streaming :global(.bubble--agent) {
1205
1207
  align-self: flex-start;
1206
- background: var(--smrt-color-surface-container, #f0f0f4);
1207
- color: var(--smrt-color-on-surface, #1a1c1e);
1208
+ background: var(--smrt-color-surface-container);
1209
+ color: var(--smrt-color-on-surface);
1208
1210
  border-left: none;
1209
- border-radius: var(--smrt-radius-large, 12px);
1211
+ border-radius: var(--smrt-radius-large);
1210
1212
  }
1211
1213
 
1212
1214
  .assistant-dock-streaming {
@@ -1221,9 +1223,9 @@ async function handleConfirmAction(requestId: string) {
1221
1223
  flex-direction: column;
1222
1224
  align-items: center;
1223
1225
  justify-content: center;
1224
- gap: var(--smrt-spacing-2, 8px);
1225
- padding: var(--smrt-spacing-5, 20px);
1226
- color: var(--smrt-color-on-surface-variant, #43474e);
1226
+ gap: var(--smrt-spacing-2);
1227
+ padding: var(--smrt-spacing-5);
1228
+ color: var(--smrt-color-on-surface-variant);
1227
1229
  text-align: center;
1228
1230
  }
1229
1231
 
@@ -1233,7 +1235,7 @@ async function handleConfirmAction(requestId: string) {
1233
1235
  }
1234
1236
 
1235
1237
  .assistant-dock-thread-state h2 {
1236
- color: var(--smrt-color-on-surface, #1a1c1e);
1238
+ color: var(--smrt-color-on-surface);
1237
1239
  font: var(--smrt-typography-title-medium-font, 600 1rem/1.4 sans-serif);
1238
1240
  }
1239
1241
 
@@ -1246,7 +1248,7 @@ async function handleConfirmAction(requestId: string) {
1246
1248
  display: flex;
1247
1249
  flex-wrap: wrap;
1248
1250
  justify-content: center;
1249
- gap: var(--smrt-spacing-2, 8px);
1251
+ gap: var(--smrt-spacing-2);
1250
1252
  }
1251
1253
 
1252
1254
  .assistant-dock-thread-loading {
@@ -1254,7 +1256,7 @@ async function handleConfirmAction(requestId: string) {
1254
1256
  }
1255
1257
 
1256
1258
  .assistant-dock-tool-call {
1257
- margin-top: var(--smrt-spacing-2, 8px);
1259
+ margin-top: var(--smrt-spacing-2);
1258
1260
  min-width: 0;
1259
1261
  }
1260
1262
 
@@ -1265,17 +1267,17 @@ async function handleConfirmAction(requestId: string) {
1265
1267
 
1266
1268
  .assistant-dock-attachments {
1267
1269
  list-style: none;
1268
- margin: var(--smrt-spacing-2, 8px) 0 0;
1270
+ margin: var(--smrt-spacing-2) 0 0;
1269
1271
  padding: 0;
1270
1272
  display: flex;
1271
1273
  flex-direction: column;
1272
- gap: var(--smrt-spacing-1, 4px);
1274
+ gap: var(--smrt-spacing-1);
1273
1275
  }
1274
1276
 
1275
1277
  .assistant-dock-attachment {
1276
1278
  display: flex;
1277
1279
  align-items: baseline;
1278
- gap: var(--smrt-spacing-1, 4px);
1280
+ gap: var(--smrt-spacing-1);
1279
1281
  font: var(--smrt-typography-body-small-font, 0.8125rem/1.4 sans-serif);
1280
1282
  }
1281
1283
 
@@ -1301,63 +1303,64 @@ async function handleConfirmAction(requestId: string) {
1301
1303
  padding: 0;
1302
1304
  display: flex;
1303
1305
  flex-direction: column;
1304
- gap: var(--smrt-spacing-2, 8px);
1306
+ gap: var(--smrt-spacing-2);
1305
1307
  }
1306
1308
 
1307
1309
  .assistant-dock-action-unknown {
1308
- margin-top: var(--smrt-spacing-2, 8px);
1309
- padding: var(--smrt-spacing-2, 8px) var(--smrt-spacing-3, 12px);
1310
- border-radius: var(--smrt-radius-medium, 8px);
1311
- background: var(--smrt-color-tertiary-container, #ffd8e4);
1312
- color: var(--smrt-color-on-tertiary-container, #31111d);
1310
+ margin-top: var(--smrt-spacing-2);
1311
+ padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
1312
+ border-radius: var(--smrt-radius-medium);
1313
+ background: var(--smrt-color-tertiary-container);
1314
+ color: var(--smrt-color-on-tertiary-container);
1313
1315
  font: var(--smrt-typography-body-small-font, 0.8125rem/1.4 sans-serif);
1314
1316
  }
1315
1317
 
1316
1318
  .assistant-dock-action-unknown p {
1317
- margin: 0 0 var(--smrt-spacing-2, 8px);
1319
+ margin: 0 0 var(--smrt-spacing-2);
1318
1320
  }
1319
1321
 
1320
1322
  .assistant-dock-stale {
1321
- padding: var(--smrt-spacing-2, 8px) var(--smrt-spacing-3, 12px);
1322
- border-radius: var(--smrt-radius-medium, 8px);
1323
- background: var(--smrt-color-tertiary-container, #ffd8e4);
1324
- color: var(--smrt-color-on-tertiary-container, #31111d);
1323
+ padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
1324
+ border-radius: var(--smrt-radius-medium);
1325
+ background: var(--smrt-color-tertiary-container);
1326
+ color: var(--smrt-color-on-tertiary-container);
1325
1327
  font: var(--smrt-typography-body-small-font, 0.8125rem/1.4 sans-serif);
1326
1328
  }
1327
1329
 
1328
1330
  .assistant-dock-stale p {
1329
- margin: 0 0 var(--smrt-spacing-2, 8px);
1331
+ margin: 0 0 var(--smrt-spacing-2);
1330
1332
  }
1331
1333
 
1332
1334
  .assistant-dock-failed {
1333
- padding: var(--smrt-spacing-2, 8px) var(--smrt-spacing-3, 12px);
1334
- border-radius: var(--smrt-radius-medium, 8px);
1335
- background: var(--smrt-color-error-container, #ffdad6);
1336
- color: var(--smrt-color-on-error-container, #410002);
1335
+ padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
1336
+ border-radius: var(--smrt-radius-medium);
1337
+ background: var(--smrt-color-error-container);
1338
+ color: var(--smrt-color-on-error-container);
1337
1339
  font: var(--smrt-typography-body-small-font, 0.8125rem/1.4 sans-serif);
1338
1340
  }
1339
1341
 
1340
1342
  .assistant-dock-failed p {
1341
- margin: 0 0 var(--smrt-spacing-2, 8px);
1343
+ margin: 0 0 var(--smrt-spacing-2);
1342
1344
  }
1343
1345
 
1344
1346
  .assistant-dock-error {
1345
1347
  margin: 0;
1346
- padding: var(--smrt-spacing-2, 8px) var(--smrt-spacing-3, 12px);
1348
+ padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
1347
1349
  font: var(--smrt-typography-body-small-font, 0.8125rem/1.4 sans-serif);
1348
- color: var(--smrt-color-on-error-container, #410002);
1349
- background: var(--smrt-color-error-container, #ffdad6);
1350
- border-bottom: 1px solid var(--smrt-color-outline-variant, #c4c6cf);
1350
+ color: var(--smrt-color-on-error-container);
1351
+ background: var(--smrt-color-error-container);
1352
+ border-bottom: 1px solid var(--smrt-color-outline-variant);
1351
1353
  }
1352
1354
 
1353
1355
  .assistant-dock-single-actions {
1354
1356
  display: flex;
1355
1357
  justify-content: flex-end;
1356
- padding: var(--smrt-spacing-1, 4px) var(--smrt-spacing-2, 8px) 0;
1358
+ padding: var(--smrt-spacing-1) var(--smrt-spacing-2) 0;
1357
1359
  }
1358
1360
 
1359
1361
  .assistant-dock-composer-header {
1360
- padding: 0 var(--smrt-spacing-2, 8px);
1361
- padding-top: var(--smrt-spacing-2, 8px);
1362
+ padding: 0 var(--smrt-spacing-2);
1363
+ padding-top: var(--smrt-spacing-2);
1362
1364
  }
1365
+ }
1363
1366
  </style>
@@ -25,7 +25,7 @@ const { threads, activeThreadId = null, onselect, oncreate }: Props = $props();
25
25
 
26
26
  <nav
27
27
  class="assistant-thread-list"
28
- aria-label={t(M['chat.assistant_thread_list.conversations_label'])}
28
+ aria-label={t(M['chat.assistant_thread_list.conversations_label'])} data-smrt-component="AssistantThreadList"
29
29
  >
30
30
  {#if oncreate}
31
31
  <Button
@@ -62,52 +62,54 @@ const { threads, activeThreadId = null, onselect, oncreate }: Props = $props();
62
62
  </nav>
63
63
 
64
64
  <style>
65
+ @layer smrt.reset, smrt.structure, smrt.theme;
66
+ @layer smrt.theme {
65
67
  .assistant-thread-list {
66
68
  display: flex;
67
69
  flex-direction: column;
68
- border-right: 1px solid var(--smrt-color-outline-variant, #c4c6cf);
69
- background: var(--smrt-color-surface-container-low, #f7f7fb);
70
+ border-right: 1px solid var(--smrt-color-outline-variant);
71
+ background: var(--smrt-color-surface-container-low);
70
72
  min-width: 160px;
71
73
  overflow-y: auto;
72
74
  }
73
75
 
74
76
  :global(.assistant-thread-list-new) {
75
- margin: var(--smrt-spacing-2, 8px);
76
- padding: var(--smrt-spacing-2, 8px) var(--smrt-spacing-3, 12px);
77
- border: 1px dashed var(--smrt-color-outline-variant, #c4c6cf);
78
- border-radius: var(--smrt-radius-medium, 8px);
77
+ margin: var(--smrt-spacing-2);
78
+ padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
79
+ border: 1px dashed var(--smrt-color-outline-variant);
80
+ border-radius: var(--smrt-radius-medium);
79
81
  background: transparent;
80
- color: var(--smrt-color-primary, #005ac1);
82
+ color: var(--smrt-color-primary);
81
83
  font: var(--smrt-typography-label-medium-font, 500 0.8125rem/1.3 sans-serif);
82
84
  cursor: pointer;
83
85
  text-align: left;
84
86
  }
85
87
 
86
88
  :global(.assistant-thread-list-new:hover) {
87
- background: var(--smrt-color-surface-container, #f0f0f4);
89
+ background: var(--smrt-color-surface-container);
88
90
  }
89
91
 
90
92
  .assistant-thread-list ul {
91
93
  list-style: none;
92
94
  margin: 0;
93
- padding: 0 var(--smrt-spacing-2, 8px) var(--smrt-spacing-2, 8px);
95
+ padding: 0 var(--smrt-spacing-2) var(--smrt-spacing-2);
94
96
  display: flex;
95
97
  flex-direction: column;
96
- gap: var(--smrt-spacing-1, 4px);
98
+ gap: var(--smrt-spacing-1);
97
99
  }
98
100
 
99
101
  :global(.assistant-thread-list-item) {
100
102
  display: flex;
101
103
  align-items: center;
102
104
  justify-content: flex-start;
103
- gap: var(--smrt-spacing-2, 8px);
105
+ gap: var(--smrt-spacing-2);
104
106
  width: 100%;
105
107
  min-width: 0;
106
- padding: var(--smrt-spacing-2, 8px) var(--smrt-spacing-3, 12px);
108
+ padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
107
109
  border: none;
108
- border-radius: var(--smrt-radius-medium, 8px);
110
+ border-radius: var(--smrt-radius-medium);
109
111
  background: transparent;
110
- color: var(--smrt-color-on-surface, #1a1c1e);
112
+ color: var(--smrt-color-on-surface);
111
113
  font: var(--smrt-typography-body-medium-font, 0.875rem/1.4 sans-serif);
112
114
  text-align: left;
113
115
  cursor: pointer;
@@ -120,16 +122,16 @@ const { threads, activeThreadId = null, onselect, oncreate }: Props = $props();
120
122
  display: flex;
121
123
  align-items: center;
122
124
  justify-content: space-between;
123
- gap: var(--smrt-spacing-2, 8px);
125
+ gap: var(--smrt-spacing-2);
124
126
  }
125
127
 
126
128
  :global(.assistant-thread-list-item:hover) {
127
- background: var(--smrt-color-surface-container, #f0f0f4);
129
+ background: var(--smrt-color-surface-container);
128
130
  }
129
131
 
130
132
  :global(.assistant-thread-list-item.active) {
131
- background: var(--smrt-color-secondary-container, #d7e3f8);
132
- color: var(--smrt-color-on-secondary-container, #0e1d31);
133
+ background: var(--smrt-color-secondary-container);
134
+ color: var(--smrt-color-on-secondary-container);
133
135
  font-weight: var(--smrt-typography-weight-semibold, 600);
134
136
  }
135
137
 
@@ -143,6 +145,7 @@ const { threads, activeThreadId = null, onselect, oncreate }: Props = $props();
143
145
  .count {
144
146
  flex-shrink: 0;
145
147
  font: var(--smrt-typography-label-small-font, 500 0.6875rem/1 sans-serif);
146
- color: var(--smrt-color-on-surface-variant, #43474e);
148
+ color: var(--smrt-color-on-surface-variant);
147
149
  }
150
+ }
148
151
  </style>
@@ -161,7 +161,7 @@ function handleKeydown(event: KeyboardEvent) {
161
161
  data-expanded={panelExpanded || undefined}
162
162
  hidden={!visible}
163
163
  inert={!visible}
164
- aria-hidden={!visible}
164
+ aria-hidden={!visible} data-smrt-component="FloatingAssistant"
165
165
  >
166
166
  {#if launcherVisible}
167
167
  <Button
@@ -212,6 +212,8 @@ function handleKeydown(event: KeyboardEvent) {
212
212
  </div>
213
213
 
214
214
  <style>
215
+ @layer smrt.reset, smrt.structure, smrt.theme;
216
+ @layer smrt.theme {
215
217
  .floating-assistant {
216
218
  position: fixed;
217
219
  z-index: var(--smrt-z-index-overlay, 1200);
@@ -230,7 +232,7 @@ function handleKeydown(event: KeyboardEvent) {
230
232
  .floating-assistant :global(.floating-assistant-launcher),
231
233
  .floating-assistant :global(.floating-assistant-collapse) {
232
234
  border: 1px solid var(--smrt-color-outline, currentColor);
233
- border-radius: var(--smrt-radius-full, 9999px);
235
+ border-radius: var(--smrt-radius-full);
234
236
  background: var(--smrt-color-surface, Canvas);
235
237
  color: var(--smrt-color-on-surface, CanvasText);
236
238
  font: inherit;
@@ -254,7 +256,7 @@ function handleKeydown(event: KeyboardEvent) {
254
256
  inline-size: 1.75rem;
255
257
  block-size: 1.75rem;
256
258
  overflow: hidden;
257
- border-radius: var(--smrt-radius-full, 9999px);
259
+ border-radius: var(--smrt-radius-full);
258
260
  }
259
261
 
260
262
  .floating-assistant-panel {
@@ -306,4 +308,5 @@ function handleKeydown(event: KeyboardEvent) {
306
308
  transition: none;
307
309
  }
308
310
  }
311
+ }
309
312
  </style>
@@ -51,7 +51,7 @@ $effect(() => {
51
51
  });
52
52
  </script>
53
53
 
54
- <section bind:this={group} class="caption-overlay" aria-label={label}>
54
+ <section bind:this={group} class="caption-overlay" aria-label={label} data-smrt-component="CaptionOverlay">
55
55
  <div bind:this={viewport} class="caption-overlay-viewport" onscroll={updatePosition}>
56
56
  <div bind:this={content} class="caption-overlay-content">
57
57
  {@render children()}
@@ -66,6 +66,8 @@ $effect(() => {
66
66
  </section>
67
67
 
68
68
  <style>
69
+ @layer smrt.reset, smrt.structure, smrt.theme;
70
+ @layer smrt.theme {
69
71
  .caption-overlay {
70
72
  position: fixed;
71
73
  z-index: var(--smrt-z-index-sticky, 1100);
@@ -102,4 +104,5 @@ $effect(() => {
102
104
  padding-block-start: var(--smrt-spacing-2, .5rem);
103
105
  background: var(--smrt-color-surface, Canvas);
104
106
  }
107
+ }
105
108
  </style>
@@ -33,7 +33,7 @@ const visibleLines = $derived(lines.slice(-Math.max(1, maxLines)));
33
33
  </script>
34
34
 
35
35
  {#snippet surface()}
36
- <section class="heard-captions" aria-label={speakerLabel}>
36
+ <section class="heard-captions" aria-label={speakerLabel} data-smrt-component="HeardCaptions">
37
37
  <p class="speaker">{speakerLabel}</p>
38
38
  <div class="caption-lines" aria-live="polite" aria-atomic="false">
39
39
  {#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
- .heard-captions { box-sizing: border-box; min-inline-size: 0; max-inline-size: min(42rem, calc(100vw - 2rem)); overflow-wrap: anywhere; padding: .6rem .85rem; border-inline-start: .25rem solid var(--smrt-color-primary, #3154a5); background: color-mix(in srgb, var(--smrt-color-surface, white) 92%, var(--smrt-color-primary-container, #dce6ff)); color: var(--smrt-color-on-surface, #172033); border-radius: .35rem; box-shadow: var(--smrt-elevation-4, 0 .25rem .9rem color-mix(in srgb, var(--smrt-color-shadow, black) 16%, transparent)); }
60
+ @layer smrt.reset, smrt.structure, smrt.theme;
61
+ @layer smrt.theme {
62
+ .heard-captions { box-sizing: border-box; min-inline-size: 0; max-inline-size: min(42rem, calc(100vw - 2rem)); overflow-wrap: anywhere; padding: .6rem .85rem; border-inline-start: .25rem solid var(--smrt-color-primary); background: color-mix(in srgb, var(--smrt-color-surface, white) 92%, var(--smrt-color-primary-container)); color: var(--smrt-color-on-surface); border-radius: .35rem; box-shadow: var(--smrt-elevation-4, 0 .25rem .9rem color-mix(in srgb, var(--smrt-color-shadow, black) 16%, transparent)); }
61
63
  .speaker { margin: 0 0 .25rem; font-weight: var(--smrt-typography-weight-bold, 700); letter-spacing: .03em; text-transform: uppercase; font-size: var(--smrt-typography-label-medium-size, .75rem); }
62
64
  .caption-lines p, .interim { margin: .15rem 0 0; }
63
65
  .interim { font-style: italic; opacity: .8; }
64
66
  @media (prefers-reduced-motion: reduce) { .heard-captions { scroll-behavior: auto; } }
67
+ }
65
68
  </style>