@happyvertical/smrt-chat 0.34.5 → 0.34.7
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/manifest.json +2 -2
- package/dist/smrt-knowledge.json +4 -4
- package/dist/svelte/components/agent/AgentChat.svelte +34 -49
- package/dist/svelte/components/agent/AgentChat.svelte.d.ts.map +1 -1
- package/dist/svelte/components/agent/AgentSelector.svelte +1 -0
- package/dist/svelte/components/agent/AgentSelector.svelte.d.ts.map +1 -1
- package/dist/svelte/components/agent/AgentSessionPanel.svelte +15 -16
- package/dist/svelte/components/agent/AgentSessionPanel.svelte.d.ts.map +1 -1
- package/dist/svelte/components/agent/ToolCallDisplay.svelte +1 -0
- package/dist/svelte/components/agent/ToolCallDisplay.svelte.d.ts.map +1 -1
- package/dist/svelte/components/dialogs/RoomCreateDialog.svelte +29 -94
- package/dist/svelte/components/dialogs/RoomCreateDialog.svelte.d.ts.map +1 -1
- package/dist/svelte/components/dialogs/SearchMessages.svelte +51 -36
- package/dist/svelte/components/dialogs/SearchMessages.svelte.d.ts.map +1 -1
- package/dist/svelte/components/layout/ChatLayout.svelte +1 -0
- package/dist/svelte/components/layout/ChatLayout.svelte.d.ts.map +1 -1
- package/dist/svelte/components/layout/MemberList.svelte +10 -15
- package/dist/svelte/components/layout/MemberList.svelte.d.ts.map +1 -1
- package/dist/svelte/components/layout/RoomHeader.svelte +13 -16
- package/dist/svelte/components/layout/RoomHeader.svelte.d.ts.map +1 -1
- package/dist/svelte/components/layout/RoomList.svelte +26 -17
- package/dist/svelte/components/layout/RoomList.svelte.d.ts.map +1 -1
- package/dist/svelte/components/messages/MessageInput.svelte +34 -48
- package/dist/svelte/components/messages/MessageInput.svelte.d.ts.map +1 -1
- package/dist/svelte/components/messages/MessageItem.svelte +52 -43
- package/dist/svelte/components/messages/MessageItem.svelte.d.ts.map +1 -1
- package/dist/svelte/components/messages/ThreadPanel.svelte +9 -9
- package/dist/svelte/components/messages/ThreadPanel.svelte.d.ts.map +1 -1
- package/dist/svelte/components/shared/FileUpload.svelte +23 -54
- package/dist/svelte/components/shared/FileUpload.svelte.d.ts.map +1 -1
- package/dist/svelte/components/shared/MentionAutocomplete.svelte +1 -0
- package/dist/svelte/components/shared/MentionAutocomplete.svelte.d.ts.map +1 -1
- package/dist/svelte/components/shared/ReactionPicker.svelte +15 -66
- package/dist/svelte/components/shared/ReactionPicker.svelte.d.ts.map +1 -1
- package/dist/svelte/components/tabs/ChatTab.svelte +20 -18
- package/dist/svelte/components/tabs/ChatTab.svelte.d.ts.map +1 -1
- package/dist/svelte/components/tabs/ChatTabList.svelte +13 -10
- package/dist/svelte/components/tabs/ChatTabList.svelte.d.ts.map +1 -1
- package/dist/svelte/components/tabs/MiniChat.svelte +21 -37
- package/dist/svelte/components/tabs/MiniChat.svelte.d.ts.map +1 -1
- package/dist/svelte/index.d.ts +1 -2
- package/dist/svelte/index.d.ts.map +1 -1
- package/dist/svelte/index.js +5 -4
- package/package.json +9 -8
- package/dist/svelte/components/shared/MessageBubble.svelte +0 -81
- package/dist/svelte/components/shared/MessageBubble.svelte.d.ts +0 -16
- package/dist/svelte/components/shared/MessageBubble.svelte.d.ts.map +0 -1
- package/dist/svelte/components/shared/TypingIndicator.svelte +0 -90
- package/dist/svelte/components/shared/TypingIndicator.svelte.d.ts +0 -12
- package/dist/svelte/components/shared/TypingIndicator.svelte.d.ts.map +0 -1
- package/dist/svelte/components/shared/__tests__/MessageBubble.test.js +0 -21
- package/dist/svelte/components/shared/__tests__/TypingIndicator.test.js +0 -27
|
@@ -84,6 +84,7 @@ function highlightMatch(
|
|
|
84
84
|
>
|
|
85
85
|
{#each suggestions as suggestion, i (suggestion.id)}
|
|
86
86
|
{@const parts = highlightMatch(suggestion.name, query)}
|
|
87
|
+
<!-- raw-primitive-allow: role=option in a hand-rolled autocomplete listbox with roving active-index keyboard navigation (ArrowUp/Down/Enter/Tab) and onpointerenter active sync, wrapping rich content (avatar, highlighted name); no Button primitive owns this structural listbox-option pattern -->
|
|
87
88
|
<button
|
|
88
89
|
class="mention-autocomplete__item"
|
|
89
90
|
class:mention-autocomplete__item--active={i === activeIndex}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MentionAutocomplete.svelte.d.ts","sourceRoot":"","sources":["../../../../src/svelte/components/shared/MentionAutocomplete.svelte.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,KAAK;IACpB,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,WAAW,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,0BAA0B;IAC1B,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,mCAAmC;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;
|
|
1
|
+
{"version":3,"file":"MentionAutocomplete.svelte.d.ts","sourceRoot":"","sources":["../../../../src/svelte/components/shared/MentionAutocomplete.svelte.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,KAAK;IACpB,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,WAAW,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,0BAA0B;IAC1B,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,mCAAmC;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAkFD,QAAA,MAAM,mBAAmB,2CAAwC,CAAC;AAClE,KAAK,mBAAmB,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAClE,eAAe,mBAAmB,CAAC"}
|
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
/**
|
|
3
|
-
* ReactionPicker
|
|
4
|
-
*
|
|
3
|
+
* ReactionPicker — chat's emoji reaction selector.
|
|
4
|
+
*
|
|
5
|
+
* A thin adapter over the canonical `@happyvertical/smrt-ui/chat`
|
|
6
|
+
* `ReactionPicker` (no duplicated markup/styles): it supplies chat's emoji
|
|
7
|
+
* palette and routes the group + per-emoji labels through chat's i18n catalog,
|
|
8
|
+
* and preserves the package's `onreact` / `isOpen` vocabulary + the
|
|
9
|
+
* `ModuleUIRegistry` registration.
|
|
5
10
|
*/
|
|
11
|
+
import { ReactionPicker as UIReactionPicker } from '@happyvertical/smrt-ui/chat';
|
|
6
12
|
import { useI18n } from '@happyvertical/smrt-ui/i18n';
|
|
7
13
|
import { M } from '../../i18n.js';
|
|
8
14
|
|
|
@@ -35,69 +41,12 @@ const emojis = [
|
|
|
35
41
|
'\u{274C}',
|
|
36
42
|
'\u{1F4AF}',
|
|
37
43
|
];
|
|
38
|
-
|
|
39
|
-
function handleSelect(emoji: string) {
|
|
40
|
-
onreact(emoji);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
function handleKeydown(event: KeyboardEvent, emoji: string) {
|
|
44
|
-
if (event.key === 'Enter' || event.key === ' ') {
|
|
45
|
-
event.preventDefault();
|
|
46
|
-
handleSelect(emoji);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
44
|
</script>
|
|
50
45
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
aria-label={t(M['chat.reaction_picker.react_with'], { emoji })}
|
|
59
|
-
>
|
|
60
|
-
{emoji}
|
|
61
|
-
</button>
|
|
62
|
-
{/each}
|
|
63
|
-
</div>
|
|
64
|
-
{/if}
|
|
65
|
-
|
|
66
|
-
<style>
|
|
67
|
-
.reaction-picker {
|
|
68
|
-
display: grid;
|
|
69
|
-
grid-template-columns: repeat(8, 1fr);
|
|
70
|
-
gap: var(--smrt-spacing-1, 0.25rem);
|
|
71
|
-
padding: var(--smrt-spacing-2, 0.375rem);
|
|
72
|
-
background: var(--smrt-color-surface, #ffffff);
|
|
73
|
-
border: 1px solid var(--smrt-color-outline-variant, #c4c6cf);
|
|
74
|
-
border-radius: var(--smrt-radius-medium, 0.5rem);
|
|
75
|
-
box-shadow: var(--smrt-elevation-2, 0 2px 6px rgba(0, 0, 0, 0.15));
|
|
76
|
-
width: max-content;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
.reaction-picker__item {
|
|
80
|
-
display: flex;
|
|
81
|
-
align-items: center;
|
|
82
|
-
justify-content: center;
|
|
83
|
-
width: 32px;
|
|
84
|
-
height: 32px;
|
|
85
|
-
border: none;
|
|
86
|
-
border-radius: var(--smrt-radius-small, 0.25rem);
|
|
87
|
-
background: transparent;
|
|
88
|
-
cursor: pointer;
|
|
89
|
-
font-size: var(--smrt-typography-body-large-size, 1.125rem);
|
|
90
|
-
line-height: 1;
|
|
91
|
-
padding: 0;
|
|
92
|
-
transition: background var(--smrt-duration-short2, 150ms) var(--smrt-easing-standard, ease);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
.reaction-picker__item:hover {
|
|
96
|
-
background: var(--smrt-color-surface-container-high, #e1e3e8);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
.reaction-picker__item:focus-visible {
|
|
100
|
-
outline: 2px solid var(--smrt-color-primary, #005ac1);
|
|
101
|
-
outline-offset: -2px;
|
|
102
|
-
}
|
|
103
|
-
</style>
|
|
46
|
+
<UIReactionPicker
|
|
47
|
+
{emojis}
|
|
48
|
+
{isOpen}
|
|
49
|
+
label={t(M['chat.reaction_picker.reactions'])}
|
|
50
|
+
emojiLabel={(emoji) => t(M['chat.reaction_picker.react_with'], { emoji })}
|
|
51
|
+
onpick={onreact}
|
|
52
|
+
/>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReactionPicker.svelte.d.ts","sourceRoot":"","sources":["../../../../src/svelte/components/shared/ReactionPicker.svelte.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ReactionPicker.svelte.d.ts","sourceRoot":"","sources":["../../../../src/svelte/components/shared/ReactionPicker.svelte.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,KAAK;IACpB,yCAAyC;IACzC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,oCAAoC;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAoCD,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* Expands upward from the bottom tab bar.
|
|
6
6
|
*/
|
|
7
7
|
import { useI18n } from '@happyvertical/smrt-ui/i18n';
|
|
8
|
+
import { Button } from '@happyvertical/smrt-ui/ui';
|
|
8
9
|
import { M } from '../../i18n.messages.js';
|
|
9
10
|
import type { ChatMessageData, ChatTabState } from '../../types.js';
|
|
10
11
|
import Avatar from '../shared/Avatar.svelte';
|
|
@@ -43,6 +44,7 @@ const {
|
|
|
43
44
|
{#if tab.isExpanded}
|
|
44
45
|
<div class="chat-tab chat-tab--expanded" aria-label={t(M['chat.chat_tab.chat_with'], { name: tab.room.name })}>
|
|
45
46
|
<div class="chat-tab__header">
|
|
47
|
+
<!-- raw-primitive-allow: pressable header title wrapping rich content (room avatar component and name) that collapses the chat window on click; no Button primitive owns this structural avatar-header pattern -->
|
|
46
48
|
<button
|
|
47
49
|
class="chat-tab__header-btn"
|
|
48
50
|
type="button"
|
|
@@ -58,7 +60,9 @@ const {
|
|
|
58
60
|
</button>
|
|
59
61
|
|
|
60
62
|
<div class="chat-tab__actions">
|
|
61
|
-
<
|
|
63
|
+
<Button
|
|
64
|
+
variant="ghost"
|
|
65
|
+
size="sm"
|
|
62
66
|
class="chat-tab__icon-btn"
|
|
63
67
|
type="button"
|
|
64
68
|
onclick={oncollapse}
|
|
@@ -68,8 +72,10 @@ const {
|
|
|
68
72
|
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true">
|
|
69
73
|
<rect x="3" y="12" width="10" height="2" rx="1" />
|
|
70
74
|
</svg>
|
|
71
|
-
</
|
|
72
|
-
<
|
|
75
|
+
</Button>
|
|
76
|
+
<Button
|
|
77
|
+
variant="ghost"
|
|
78
|
+
size="sm"
|
|
73
79
|
class="chat-tab__icon-btn"
|
|
74
80
|
type="button"
|
|
75
81
|
onclick={onclose}
|
|
@@ -79,7 +85,7 @@ const {
|
|
|
79
85
|
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true">
|
|
80
86
|
<path d="M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z" />
|
|
81
87
|
</svg>
|
|
82
|
-
</
|
|
88
|
+
</Button>
|
|
83
89
|
</div>
|
|
84
90
|
</div>
|
|
85
91
|
|
|
@@ -93,6 +99,7 @@ const {
|
|
|
93
99
|
</div>
|
|
94
100
|
</div>
|
|
95
101
|
{:else}
|
|
102
|
+
<!-- raw-primitive-allow: large pressable collapsed-tab card wrapping rich content (room avatar component, name, unread badge) that expands the chat window on click; no Button primitive owns this structural selection-card pattern -->
|
|
96
103
|
<button
|
|
97
104
|
class="chat-tab chat-tab--collapsed"
|
|
98
105
|
type="button"
|
|
@@ -164,29 +171,21 @@ const {
|
|
|
164
171
|
flex-shrink: 0;
|
|
165
172
|
}
|
|
166
173
|
|
|
167
|
-
.
|
|
168
|
-
|
|
169
|
-
align-items: center;
|
|
170
|
-
justify-content: center;
|
|
174
|
+
/* :global() pierces into each Button's rendered <button> (see #1589). */
|
|
175
|
+
.chat-tab__actions :global(.chat-tab__icon-btn) {
|
|
171
176
|
width: 28px;
|
|
172
177
|
height: 28px;
|
|
173
|
-
|
|
178
|
+
padding: 0;
|
|
174
179
|
background: none;
|
|
175
180
|
color: inherit;
|
|
176
|
-
cursor: pointer;
|
|
177
181
|
border-radius: var(--smrt-radius-full, 9999px);
|
|
178
182
|
transition: background var(--smrt-duration-short2, 150ms);
|
|
179
183
|
}
|
|
180
184
|
|
|
181
|
-
.chat-tab__icon-btn:hover {
|
|
185
|
+
.chat-tab__actions :global(.chat-tab__icon-btn:hover) {
|
|
182
186
|
background: color-mix(in srgb, var(--smrt-color-on-primary) 15%, transparent);
|
|
183
187
|
}
|
|
184
188
|
|
|
185
|
-
.chat-tab__icon-btn:focus-visible {
|
|
186
|
-
outline: 2px solid var(--smrt-color-on-primary, #ffffff);
|
|
187
|
-
outline-offset: -2px;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
189
|
.chat-tab__body {
|
|
191
190
|
flex: 1;
|
|
192
191
|
min-height: 0;
|
|
@@ -232,8 +231,11 @@ const {
|
|
|
232
231
|
}
|
|
233
232
|
|
|
234
233
|
@media (prefers-reduced-motion: reduce) {
|
|
235
|
-
.chat-tab--collapsed
|
|
236
|
-
|
|
234
|
+
.chat-tab--collapsed {
|
|
235
|
+
transition: none;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
.chat-tab__actions :global(.chat-tab__icon-btn) {
|
|
237
239
|
transition: none;
|
|
238
240
|
}
|
|
239
241
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatTab.svelte.d.ts","sourceRoot":"","sources":["../../../../src/svelte/components/tabs/ChatTab.svelte.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChatTab.svelte.d.ts","sourceRoot":"","sources":["../../../../src/svelte/components/tabs/ChatTab.svelte.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAKpE,MAAM,WAAW,KAAK;IACpB,gBAAgB;IAChB,GAAG,EAAE,YAAY,CAAC;IAClB,4BAA4B;IAC5B,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,gCAAgC;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB;IACrB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,wBAAwB;IACxB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,qBAAqB;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,sBAAsB;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAkED,QAAA,MAAM,OAAO,2CAAwC,CAAC;AACtD,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;AAC1C,eAAe,OAAO,CAAC"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Horizontal bar of small avatars/names at bottom. Shows unread badges.
|
|
5
5
|
*/
|
|
6
6
|
import { useI18n } from '@happyvertical/smrt-ui/i18n';
|
|
7
|
+
import { Button } from '@happyvertical/smrt-ui/ui';
|
|
7
8
|
import { M } from '../../i18n.messages.js';
|
|
8
9
|
import type { ChatTabState } from '../../types.js';
|
|
9
10
|
import Avatar from '../shared/Avatar.svelte';
|
|
@@ -26,6 +27,7 @@ const { tabs, onselect, onclose }: Props = $props();
|
|
|
26
27
|
<nav class="tab-list" aria-label={t(M['chat.chat_tab_list.minimized_chats'])}>
|
|
27
28
|
{#each tabs as tab (tab.roomId)}
|
|
28
29
|
<div class="tab-list__item">
|
|
30
|
+
<!-- raw-primitive-allow: pressable circular avatar tab wrapping rich content (room avatar component and overlaid unread badge) that opens the chat on click; no Button primitive owns this structural avatar-tab pattern -->
|
|
29
31
|
<button
|
|
30
32
|
class="tab-list__btn"
|
|
31
33
|
type="button"
|
|
@@ -44,7 +46,9 @@ const { tabs, onselect, onclose }: Props = $props();
|
|
|
44
46
|
</span>
|
|
45
47
|
{/if}
|
|
46
48
|
</button>
|
|
47
|
-
<
|
|
49
|
+
<Button
|
|
50
|
+
variant="ghost"
|
|
51
|
+
size="sm"
|
|
48
52
|
class="tab-list__close"
|
|
49
53
|
type="button"
|
|
50
54
|
onclick={(e) => { e.stopPropagation(); onclose(tab.roomId); }}
|
|
@@ -54,7 +58,7 @@ const { tabs, onselect, onclose }: Props = $props();
|
|
|
54
58
|
<svg width="12" height="12" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true">
|
|
55
59
|
<path d="M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z" />
|
|
56
60
|
</svg>
|
|
57
|
-
</
|
|
61
|
+
</Button>
|
|
58
62
|
</div>
|
|
59
63
|
{/each}
|
|
60
64
|
</nav>
|
|
@@ -119,33 +123,32 @@ const { tabs, onselect, onclose }: Props = $props();
|
|
|
119
123
|
border: 2px solid var(--smrt-color-surface, #fefbff);
|
|
120
124
|
}
|
|
121
125
|
|
|
122
|
-
.
|
|
126
|
+
/* :global() pierces into the Button child's rendered <button> (see #1589). */
|
|
127
|
+
.tab-list__item :global(.tab-list__close) {
|
|
123
128
|
display: none;
|
|
124
129
|
position: absolute;
|
|
125
130
|
top: -4px;
|
|
126
131
|
right: -4px;
|
|
127
132
|
width: 18px;
|
|
128
133
|
height: 18px;
|
|
129
|
-
align-items: center;
|
|
130
|
-
justify-content: center;
|
|
131
|
-
border: none;
|
|
132
134
|
background: var(--smrt-color-surface-variant, #e1e2ec);
|
|
133
135
|
color: var(--smrt-color-on-surface-variant, #43474e);
|
|
134
136
|
border-radius: var(--smrt-radius-full, 9999px);
|
|
135
|
-
cursor: pointer;
|
|
136
137
|
padding: 0;
|
|
137
138
|
font-size: 0;
|
|
138
139
|
}
|
|
139
140
|
|
|
140
|
-
.tab-list__item:hover .tab-list__close
|
|
141
|
+
.tab-list__item:hover :global(.tab-list__close),
|
|
142
|
+
.tab-list__item:focus-within :global(.tab-list__close) {
|
|
141
143
|
display: inline-flex;
|
|
142
144
|
}
|
|
143
145
|
|
|
144
|
-
.tab-list__item:hover .tab-list__badge
|
|
146
|
+
.tab-list__item:hover .tab-list__badge,
|
|
147
|
+
.tab-list__item:focus-within .tab-list__badge {
|
|
145
148
|
display: none;
|
|
146
149
|
}
|
|
147
150
|
|
|
148
|
-
.tab-list__close:hover {
|
|
151
|
+
.tab-list__item :global(.tab-list__close:hover) {
|
|
149
152
|
background: var(--smrt-color-error-container, #ffdad6);
|
|
150
153
|
color: var(--smrt-color-on-error-container, #410002);
|
|
151
154
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatTabList.svelte.d.ts","sourceRoot":"","sources":["../../../../src/svelte/components/tabs/ChatTabList.svelte.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChatTabList.svelte.d.ts","sourceRoot":"","sources":["../../../../src/svelte/components/tabs/ChatTabList.svelte.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAInD,MAAM,WAAW,KAAK;IACpB,+BAA+B;IAC/B,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,4BAA4B;IAC5B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,kBAAkB;IAClB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AA0CD,QAAA,MAAM,WAAW,2CAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
|
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
* Simplified message list + input in minimal space.
|
|
5
5
|
* No thread panel, no reactions. Just messages and a send box.
|
|
6
6
|
*/
|
|
7
|
+
import { Form, Input } from '@happyvertical/smrt-ui/forms';
|
|
7
8
|
import { useI18n } from '@happyvertical/smrt-ui/i18n';
|
|
9
|
+
import { Button } from '@happyvertical/smrt-ui/ui';
|
|
8
10
|
import { M } from '../../i18n.messages.js';
|
|
9
11
|
import type { ChatMessageData } from '../../types.js';
|
|
10
12
|
import Avatar from '../shared/Avatar.svelte';
|
|
@@ -85,8 +87,8 @@ $effect(() => {
|
|
|
85
87
|
{/if}
|
|
86
88
|
</div>
|
|
87
89
|
|
|
88
|
-
<
|
|
89
|
-
<
|
|
90
|
+
<Form class="mini-chat__input-bar" onsubmit={handleSubmit}>
|
|
91
|
+
<Input
|
|
90
92
|
class="mini-chat__input"
|
|
91
93
|
type="text"
|
|
92
94
|
placeholder={t(M['chat.mini_chat.placeholder'])}
|
|
@@ -94,7 +96,8 @@ $effect(() => {
|
|
|
94
96
|
onkeydown={handleKeydown}
|
|
95
97
|
aria-label={t(M['chat.mini_chat.input_label'])}
|
|
96
98
|
/>
|
|
97
|
-
<
|
|
99
|
+
<Button
|
|
100
|
+
variant="ghost"
|
|
98
101
|
class="mini-chat__send-btn"
|
|
99
102
|
type="submit"
|
|
100
103
|
disabled={!inputValue.trim()}
|
|
@@ -103,8 +106,8 @@ $effect(() => {
|
|
|
103
106
|
<svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
|
|
104
107
|
<path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z" />
|
|
105
108
|
</svg>
|
|
106
|
-
</
|
|
107
|
-
</
|
|
109
|
+
</Button>
|
|
110
|
+
</Form>
|
|
108
111
|
</div>
|
|
109
112
|
|
|
110
113
|
<style>
|
|
@@ -183,7 +186,8 @@ $effect(() => {
|
|
|
183
186
|
color: var(--smrt-color-outline, #74777f);
|
|
184
187
|
}
|
|
185
188
|
|
|
186
|
-
.
|
|
189
|
+
/* :global() targets the Form primitive's rendered <form> (see #1589 scoping trap). */
|
|
190
|
+
:global(.mini-chat__input-bar) {
|
|
187
191
|
display: flex;
|
|
188
192
|
align-items: center;
|
|
189
193
|
gap: var(--smrt-spacing-1, 4px);
|
|
@@ -192,61 +196,41 @@ $effect(() => {
|
|
|
192
196
|
background: var(--smrt-color-surface, #fefbff);
|
|
193
197
|
}
|
|
194
198
|
|
|
195
|
-
|
|
199
|
+
/* Layout for the Input primitive's rendered <input> (tokenised styling comes
|
|
200
|
+
from the primitive; this only sizes/shapes it within the input bar). */
|
|
201
|
+
:global(.mini-chat__input) {
|
|
196
202
|
flex: 1;
|
|
197
|
-
border: 1px solid var(--smrt-color-outline-variant, #c4c6d0);
|
|
198
203
|
border-radius: var(--smrt-radius-full, 9999px);
|
|
199
|
-
padding: var(--smrt-spacing-2, 8px) var(--smrt-spacing-3, 12px);
|
|
200
|
-
font: var(--smrt-typography-body-small-font, 0.8125rem/1.4 sans-serif);
|
|
201
|
-
color: var(--smrt-color-on-surface, #1a1c1e);
|
|
202
|
-
background: var(--smrt-color-surface-container-low, #f7f7fb);
|
|
203
|
-
outline: none;
|
|
204
204
|
}
|
|
205
205
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
.mini-chat__input::placeholder {
|
|
212
|
-
color: var(--smrt-color-outline, #74777f);
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
.mini-chat__send-btn {
|
|
216
|
-
display: inline-flex;
|
|
217
|
-
align-items: center;
|
|
218
|
-
justify-content: center;
|
|
206
|
+
/* :global() pierces into the Button child's rendered <button> (see #1589).
|
|
207
|
+
The ancestor is the Form primitive's <form>, also global. */
|
|
208
|
+
:global(.mini-chat__input-bar .mini-chat__send-btn) {
|
|
219
209
|
width: 32px;
|
|
220
210
|
height: 32px;
|
|
221
|
-
|
|
211
|
+
padding: 0;
|
|
222
212
|
background: var(--smrt-color-primary, #005ac1);
|
|
223
213
|
color: var(--smrt-color-on-primary, #ffffff);
|
|
224
214
|
border-radius: var(--smrt-radius-full, 9999px);
|
|
225
|
-
cursor: pointer;
|
|
226
215
|
flex-shrink: 0;
|
|
227
216
|
transition: opacity var(--smrt-duration-short2, 150ms);
|
|
228
217
|
}
|
|
229
218
|
|
|
230
|
-
.mini-chat__send-btn:disabled {
|
|
219
|
+
:global(.mini-chat__input-bar .mini-chat__send-btn:disabled) {
|
|
231
220
|
opacity: 0.4;
|
|
232
|
-
cursor: not-allowed;
|
|
233
221
|
}
|
|
234
222
|
|
|
235
|
-
.mini-chat__send-btn:not(:disabled):hover {
|
|
223
|
+
:global(.mini-chat__input-bar .mini-chat__send-btn:not(:disabled):hover) {
|
|
224
|
+
background: var(--smrt-color-primary, #005ac1);
|
|
236
225
|
opacity: 0.85;
|
|
237
226
|
}
|
|
238
227
|
|
|
239
|
-
.mini-chat__send-btn:focus-visible {
|
|
240
|
-
outline: 2px solid var(--smrt-color-primary, #005ac1);
|
|
241
|
-
outline-offset: 2px;
|
|
242
|
-
}
|
|
243
|
-
|
|
244
228
|
@media (prefers-reduced-motion: reduce) {
|
|
245
229
|
.mini-chat__messages {
|
|
246
230
|
scroll-behavior: auto;
|
|
247
231
|
}
|
|
248
232
|
|
|
249
|
-
.mini-chat__send-btn {
|
|
233
|
+
:global(.mini-chat__input-bar .mini-chat__send-btn) {
|
|
250
234
|
transition: none;
|
|
251
235
|
}
|
|
252
236
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MiniChat.svelte.d.ts","sourceRoot":"","sources":["../../../../src/svelte/components/tabs/MiniChat.svelte.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MiniChat.svelte.d.ts","sourceRoot":"","sources":["../../../../src/svelte/components/tabs/MiniChat.svelte.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAItD,MAAM,WAAW,KAAK;IACpB,0BAA0B;IAC1B,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,gCAAgC;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB;IACrB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAoFD,QAAA,MAAM,QAAQ,2CAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}
|
package/dist/svelte/index.d.ts
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
* const Component = ModuleUIRegistry.get('@happyvertical/smrt-chat', 'chat-layout');
|
|
18
18
|
* ```
|
|
19
19
|
*/
|
|
20
|
+
export { MessageBubble, TypingIndicator } from '@happyvertical/smrt-ui/chat';
|
|
20
21
|
export { default as AgentChat } from './components/agent/AgentChat.svelte';
|
|
21
22
|
export { default as AgentSelector } from './components/agent/AgentSelector.svelte';
|
|
22
23
|
export { default as AgentSessionPanel } from './components/agent/AgentSessionPanel.svelte';
|
|
@@ -35,10 +36,8 @@ export { default as Avatar } from './components/shared/Avatar.svelte';
|
|
|
35
36
|
export { default as FileUpload } from './components/shared/FileUpload.svelte';
|
|
36
37
|
export { default as LinkPreview } from './components/shared/LinkPreview.svelte';
|
|
37
38
|
export { default as MentionAutocomplete } from './components/shared/MentionAutocomplete.svelte';
|
|
38
|
-
export { default as MessageBubble } from './components/shared/MessageBubble.svelte';
|
|
39
39
|
export { default as ReactionPicker } from './components/shared/ReactionPicker.svelte';
|
|
40
40
|
export { default as ReadReceipts } from './components/shared/ReadReceipts.svelte';
|
|
41
|
-
export { default as TypingIndicator } from './components/shared/TypingIndicator.svelte';
|
|
42
41
|
export { default as UserPresence } from './components/shared/UserPresence.svelte';
|
|
43
42
|
export { default as ChatTab } from './components/tabs/ChatTab.svelte';
|
|
44
43
|
export { default as ChatTabList } from './components/tabs/ChatTabList.svelte';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/svelte/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/svelte/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAwCH,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAC3F,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAC3F,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAEvF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AAChG,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAGxE,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,eAAe,EACf,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
|
package/dist/svelte/index.js
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
* const Component = ModuleUIRegistry.get('@happyvertical/smrt-chat', 'chat-layout');
|
|
18
18
|
* ```
|
|
19
19
|
*/
|
|
20
|
+
import { MessageBubble, TypingIndicator } from '@happyvertical/smrt-ui/chat';
|
|
20
21
|
import { ModuleUIRegistry } from '@happyvertical/smrt-ui/registry';
|
|
21
22
|
import { CHAT_MODULE_META } from '../ui.js';
|
|
22
23
|
// Agent components
|
|
@@ -42,16 +43,18 @@ import Avatar from './components/shared/Avatar.svelte';
|
|
|
42
43
|
import FileUpload from './components/shared/FileUpload.svelte';
|
|
43
44
|
import LinkPreview from './components/shared/LinkPreview.svelte';
|
|
44
45
|
import MentionAutocomplete from './components/shared/MentionAutocomplete.svelte';
|
|
45
|
-
import MessageBubble from './components/shared/MessageBubble.svelte';
|
|
46
46
|
import ReactionPicker from './components/shared/ReactionPicker.svelte';
|
|
47
47
|
import ReadReceipts from './components/shared/ReadReceipts.svelte';
|
|
48
|
-
import TypingIndicator from './components/shared/TypingIndicator.svelte';
|
|
49
48
|
import UserPresence from './components/shared/UserPresence.svelte';
|
|
50
49
|
// Tab components
|
|
51
50
|
import ChatTab from './components/tabs/ChatTab.svelte';
|
|
52
51
|
import ChatTabList from './components/tabs/ChatTabList.svelte';
|
|
53
52
|
import ChatTabs from './components/tabs/ChatTabs.svelte';
|
|
54
53
|
import MiniChat from './components/tabs/MiniChat.svelte';
|
|
54
|
+
// MessageBubble + TypingIndicator are re-exported from the canonical
|
|
55
|
+
// `@happyvertical/smrt-ui/chat` primitives (consolidated in #1589);
|
|
56
|
+
// ReactionPicker keeps a thin chat-local adapter for the package's i18n + palette.
|
|
57
|
+
export { MessageBubble, TypingIndicator } from '@happyvertical/smrt-ui/chat';
|
|
55
58
|
export { default as AgentChat } from './components/agent/AgentChat.svelte';
|
|
56
59
|
export { default as AgentSelector } from './components/agent/AgentSelector.svelte';
|
|
57
60
|
export { default as AgentSessionPanel } from './components/agent/AgentSessionPanel.svelte';
|
|
@@ -71,10 +74,8 @@ export { default as Avatar } from './components/shared/Avatar.svelte';
|
|
|
71
74
|
export { default as FileUpload } from './components/shared/FileUpload.svelte';
|
|
72
75
|
export { default as LinkPreview } from './components/shared/LinkPreview.svelte';
|
|
73
76
|
export { default as MentionAutocomplete } from './components/shared/MentionAutocomplete.svelte';
|
|
74
|
-
export { default as MessageBubble } from './components/shared/MessageBubble.svelte';
|
|
75
77
|
export { default as ReactionPicker } from './components/shared/ReactionPicker.svelte';
|
|
76
78
|
export { default as ReadReceipts } from './components/shared/ReadReceipts.svelte';
|
|
77
|
-
export { default as TypingIndicator } from './components/shared/TypingIndicator.svelte';
|
|
78
79
|
export { default as UserPresence } from './components/shared/UserPresence.svelte';
|
|
79
80
|
export { default as ChatTab } from './components/tabs/ChatTab.svelte';
|
|
80
81
|
export { default as ChatTabList } from './components/tabs/ChatTabList.svelte';
|
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@happyvertical/smrt-chat",
|
|
3
|
-
"version": "0.34.
|
|
3
|
+
"version": "0.34.7",
|
|
4
4
|
"description": "Chat rooms, DMs, threads, and agent conversations for the SMRT framework",
|
|
5
5
|
"type": "module",
|
|
6
|
+
"smrtRawPrimitives": "strict",
|
|
6
7
|
"main": "./dist/index.js",
|
|
7
8
|
"types": "./dist/index.d.ts",
|
|
8
9
|
"exports": {
|
|
@@ -55,10 +56,10 @@
|
|
|
55
56
|
"access": "public"
|
|
56
57
|
},
|
|
57
58
|
"dependencies": {
|
|
58
|
-
"@happyvertical/smrt-
|
|
59
|
-
"@happyvertical/smrt-
|
|
60
|
-
"@happyvertical/smrt-types": "0.34.
|
|
61
|
-
"@happyvertical/smrt-ui": "0.34.
|
|
59
|
+
"@happyvertical/smrt-tenancy": "0.34.7",
|
|
60
|
+
"@happyvertical/smrt-core": "0.34.7",
|
|
61
|
+
"@happyvertical/smrt-types": "0.34.7",
|
|
62
|
+
"@happyvertical/smrt-ui": "0.34.7"
|
|
62
63
|
},
|
|
63
64
|
"peerDependencies": {
|
|
64
65
|
"svelte": "^5.18.0"
|
|
@@ -78,9 +79,9 @@
|
|
|
78
79
|
"typescript": "^5.9.3",
|
|
79
80
|
"vite": "^7.3.1",
|
|
80
81
|
"vitest": "^4.0.17",
|
|
81
|
-
"@happyvertical/smrt-agents": "0.34.
|
|
82
|
-
"@happyvertical/smrt-profiles": "0.34.
|
|
83
|
-
"@happyvertical/smrt-vitest": "0.34.
|
|
82
|
+
"@happyvertical/smrt-agents": "0.34.7",
|
|
83
|
+
"@happyvertical/smrt-profiles": "0.34.7",
|
|
84
|
+
"@happyvertical/smrt-vitest": "0.34.7"
|
|
84
85
|
},
|
|
85
86
|
"scripts": {
|
|
86
87
|
"build": "vite build --mode library && svelte-package -i src/svelte -o dist/svelte --tsconfig tsconfig.svelte.json",
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
/**
|
|
3
|
-
* MessageBubble - Styled message bubble
|
|
4
|
-
* Different styling for own messages, others' messages, agent, and system.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
export interface Props {
|
|
8
|
-
/** Message content text */
|
|
9
|
-
content: string;
|
|
10
|
-
/** Whether this message was sent by the current user */
|
|
11
|
-
isOwn: boolean;
|
|
12
|
-
/** Visual variant of the bubble */
|
|
13
|
-
variant?: 'default' | 'agent' | 'system';
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const { content, isOwn, variant = 'default' }: Props = $props();
|
|
17
|
-
</script>
|
|
18
|
-
|
|
19
|
-
<div
|
|
20
|
-
class="bubble {variant}"
|
|
21
|
-
class:own={isOwn}
|
|
22
|
-
>
|
|
23
|
-
<p class="bubble__content">{content}</p>
|
|
24
|
-
</div>
|
|
25
|
-
|
|
26
|
-
<style>
|
|
27
|
-
.bubble {
|
|
28
|
-
max-width: 75%;
|
|
29
|
-
padding: var(--smrt-spacing-3, 0.75rem) var(--smrt-spacing-4, 1rem);
|
|
30
|
-
border-radius: var(--smrt-radius-large, 1rem);
|
|
31
|
-
word-break: break-word;
|
|
32
|
-
line-height: 1.4;
|
|
33
|
-
font-size: var(--smrt-typography-body-medium-size, 0.875rem);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
.bubble__content {
|
|
37
|
-
margin: 0;
|
|
38
|
-
white-space: pre-wrap;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/* Default variant - received */
|
|
42
|
-
.default {
|
|
43
|
-
background: var(--smrt-color-surface-container, #f3f4f6);
|
|
44
|
-
color: var(--smrt-color-on-surface, #1b1b1f);
|
|
45
|
-
border-bottom-left-radius: var(--smrt-radius-small, 0.25rem);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/* Default variant - own message */
|
|
49
|
-
.default.own {
|
|
50
|
-
background: var(--smrt-color-primary, #005ac1);
|
|
51
|
-
color: var(--smrt-color-on-primary, #ffffff);
|
|
52
|
-
border-bottom-right-radius: var(--smrt-radius-small, 0.25rem);
|
|
53
|
-
border-bottom-left-radius: var(--smrt-radius-large, 1rem);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/* Agent variant */
|
|
57
|
-
.agent {
|
|
58
|
-
background: var(--smrt-color-tertiary-container, #ffd8e4);
|
|
59
|
-
color: var(--smrt-color-on-tertiary-container, #31111d);
|
|
60
|
-
border-bottom-left-radius: var(--smrt-radius-small, 0.25rem);
|
|
61
|
-
border-left: 3px solid var(--smrt-color-tertiary, #7d5260);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
.agent.own {
|
|
65
|
-
border-left: none;
|
|
66
|
-
border-right: 3px solid var(--smrt-color-tertiary, #7d5260);
|
|
67
|
-
border-bottom-right-radius: var(--smrt-radius-small, 0.25rem);
|
|
68
|
-
border-bottom-left-radius: var(--smrt-radius-large, 1rem);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/* System variant */
|
|
72
|
-
.system {
|
|
73
|
-
max-width: 100%;
|
|
74
|
-
background: transparent;
|
|
75
|
-
color: var(--smrt-color-on-surface-variant, #43474e);
|
|
76
|
-
text-align: center;
|
|
77
|
-
font-size: var(--smrt-typography-body-small-size, 0.75rem);
|
|
78
|
-
padding: var(--smrt-spacing-2, 0.375rem) var(--smrt-spacing-4, 1rem);
|
|
79
|
-
border-radius: 0;
|
|
80
|
-
}
|
|
81
|
-
</style>
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MessageBubble - Styled message bubble
|
|
3
|
-
* Different styling for own messages, others' messages, agent, and system.
|
|
4
|
-
*/
|
|
5
|
-
export interface Props {
|
|
6
|
-
/** Message content text */
|
|
7
|
-
content: string;
|
|
8
|
-
/** Whether this message was sent by the current user */
|
|
9
|
-
isOwn: boolean;
|
|
10
|
-
/** Visual variant of the bubble */
|
|
11
|
-
variant?: 'default' | 'agent' | 'system';
|
|
12
|
-
}
|
|
13
|
-
declare const MessageBubble: import("svelte").Component<Props, {}, "">;
|
|
14
|
-
type MessageBubble = ReturnType<typeof MessageBubble>;
|
|
15
|
-
export default MessageBubble;
|
|
16
|
-
//# sourceMappingURL=MessageBubble.svelte.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MessageBubble.svelte.d.ts","sourceRoot":"","sources":["../../../../src/svelte/components/shared/MessageBubble.svelte.ts"],"names":[],"mappings":"AAGA;;;GAGG;AAEH,MAAM,WAAW,KAAK;IACpB,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,KAAK,EAAE,OAAO,CAAC;IACf,mCAAmC;IACnC,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;CAC1C;AAeD,QAAA,MAAM,aAAa,2CAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}
|