@deep-eye/core 1.2.10 → 1.2.12

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/CHANGELOG.md CHANGED
@@ -2,15 +2,35 @@
2
2
 
3
3
  `@deep-eye/core` 的用户可见变更(语义化版本)。
4
4
 
5
+ ## [1.2.12] - 2026-08-03
6
+
7
+ ### Changed
8
+
9
+ - 移除 `ConversationList` 内置错误卡片(`ai-conversation__error`)。流式/请求失败仍通过 `ChatBot` 的 `response-error`(`Error` + `ClassifiedChatError`)通知业务层;需要在列表内展示时使用 `#error` 插槽(`{ error, info, hasPartialContent, retry }`)。
10
+
11
+ ## [1.2.11] - 2026-08-03
12
+
13
+ ### Added
14
+
15
+ - `ChatSender` / `ChatBot` 支持 `@` 提及(`triggers`、`#trigger-menu`、`mention-*` / `trigger-*` 事件):输入区改为 contenteditable,选中后插入原子 chip;前后自动补空格;插入/删除走浏览器撤销栈,一次撤回会连同触发的 `@` 一起去掉。
16
+
17
+ ### Changed
18
+
19
+ - 提及 chip 默认文字色改为 `#6366f1`(可用 `--chat-sender-mention-color` 覆盖)。
20
+ - 移除 `.chat-sender__editor` 内边距,由外层布局控制间距。
21
+
5
22
  ## [1.2.10] - 2026-08-03
6
23
 
7
24
  ### Changed
8
25
 
9
26
  - 思考过程默认展开显示。
27
+ - `ChatActionbar` 内置复制按钮改为 slot-with-fallback:提供 `#actionbar`/`ChatActionbar` 默认插槽时完全替换内置按钮(不再是"追加"),并通过插槽 props 暴露 `copyFailed`、`copy()`,方便消费端复用内置剪贴板逻辑。`ChatMessage`/`MessageBubble`/`ConversationList`/`ChatBot` 对应插槽类型同步更新。
10
28
 
11
29
  ### Fixed
12
30
 
13
31
  - 移除表格流式输出时的骨架占位动画,流式渲染直接展示已有表格内容。
32
+ - 修复表格列对齐(`:---:`/`---:`)被丢弃的问题:根因是 `sanitizeHtml`(DOMPurify)的 `ALLOWED_ATTR` 白名单未包含 `align`,md4x 输出的对齐属性在 sanitize 阶段被整体剥离;同时补充 `prose.css` 里 `[align="center"]`/`[align="right"]` 规则,避免未来被更高优先级的 class 选择器覆盖。
33
+ - `ChatBot` 补齐对内置 `ChatSender` 独有事件的转发(`menu-item-click`、`quick-action-select`、`quick-action-clear`、`update:activeQuickAction`、`screenshot`、`attachment-menu-open`/`attachment-menu-close`、`attachment-error`、`voice-*`、`audio-*`):此前直接使用 `ChatBot` + `senderConfig` 的消费端完全收不到这些事件,只能监听在从未渲染过的裸标签上。
14
34
 
15
35
  ## [1.2.9] - 2026-08-03
16
36
 
@@ -1,5 +1,15 @@
1
1
  import { type ClassifiedChatError } from './chatErrors';
2
- import type { ChatActionbarCopyPayload, ChatBotExpose, ChatBotProps, ChatMessageProps, ChatComposerAttachment, ChatQueueItem, ChatResourceFile, ChatSendPayload, ChatToolActionPayload, ConversationMessage, ConversationStreamStatus, ConversationToolCall, ConversationUiAction, ResponseStreamEvent, ResponseSseFrame } from './types';
2
+ import type { ChatActionbarCopyPayload, ChatAttachmentError, ChatBotExpose, ChatBotProps, ChatMessageProps, ChatComposerAttachment, ChatQueueItem, ChatResourceFile, ChatSendPayload, ChatSenderQuickAction, ChatToolActionPayload, ConversationMessage, ConversationStreamStatus, ConversationToolCall, ConversationUiAction, ResponseStreamEvent, ResponseSseFrame } from './types';
3
+ interface ChatBotTriggerMenuSlotProps {
4
+ triggerId: string;
5
+ query: string;
6
+ select: (payload: {
7
+ id: string;
8
+ label: string;
9
+ }) => void;
10
+ close: () => void;
11
+ anchorRect: DOMRect | null;
12
+ }
3
13
  type __VLS_Slots = {
4
14
  sidebar?: (props: {
5
15
  artifact: ConversationUiAction | null;
@@ -22,25 +32,69 @@ type __VLS_Slots = {
22
32
  'assistant-actionbar'?: (props: {
23
33
  message: unknown;
24
34
  copied: boolean;
35
+ copyFailed: boolean;
36
+ copy: () => Promise<void>;
25
37
  }) => unknown;
26
38
  tool?: (props: {
27
39
  toolCall: ConversationToolCall;
28
40
  toolMessage?: import('./types').ToolMessage;
29
41
  streaming: boolean;
30
42
  }) => unknown;
43
+ error?: (props: {
44
+ error: Error;
45
+ info: ClassifiedChatError;
46
+ hasPartialContent: boolean;
47
+ retry: () => void;
48
+ }) => unknown;
31
49
  'file-preview'?: (props: {
32
50
  resource: ChatResourceFile;
33
51
  }) => unknown;
52
+ 'trigger-menu'?: (props: ChatBotTriggerMenuSlotProps) => unknown;
34
53
  };
35
54
  declare const __VLS_base: import("vue").DefineComponent<ChatBotProps, ChatBotExpose, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
36
55
  stop: () => any;
56
+ retry: (payload: ChatSendPayload | null, error: Error) => any;
37
57
  copy: (payload: ChatActionbarCopyPayload) => any;
38
58
  action: (payload: ConversationUiAction) => any;
39
59
  "tool-action": (payload: ChatToolActionPayload) => any;
40
60
  send: (payload: ChatSendPayload) => any;
41
61
  "update:draft": (draft: string) => any;
42
62
  "update:attachments": (attachments: readonly ChatComposerAttachment[]) => any;
43
- retry: (payload: ChatSendPayload | null, error: Error) => any;
63
+ "attachment-error": (error: ChatAttachmentError, file?: File | undefined) => any;
64
+ "voice-click": () => any;
65
+ "voice-record": () => any;
66
+ "voice-start": () => any;
67
+ "voice-stop": () => any;
68
+ "voice-cancel": () => any;
69
+ "audio-device-change": (deviceIndex: number) => any;
70
+ "audio-transcript": (text: string) => any;
71
+ screenshot: () => any;
72
+ "menu-item-click": (itemId: string) => any;
73
+ "attachment-menu-open": () => any;
74
+ "attachment-menu-close": () => any;
75
+ "update:activeQuickAction": (id: string | null) => any;
76
+ "quick-action-select": (action: ChatSenderQuickAction) => any;
77
+ "quick-action-clear": () => any;
78
+ "trigger-open": (payload: {
79
+ triggerId: string;
80
+ }) => any;
81
+ "trigger-query": (payload: {
82
+ triggerId: string;
83
+ query: string;
84
+ }) => any;
85
+ "trigger-close": (payload: {
86
+ triggerId: string;
87
+ }) => any;
88
+ "mention-insert": (payload: {
89
+ triggerId: string;
90
+ id: string;
91
+ label: string;
92
+ }) => any;
93
+ "mention-remove": (payload: {
94
+ triggerId: string;
95
+ id: string;
96
+ label: string;
97
+ }) => any;
44
98
  "update:messages": (messages: ConversationMessage[]) => any;
45
99
  "update:queue": (queue: readonly ChatQueueItem[]) => any;
46
100
  "artifact-open": (payload: ConversationUiAction) => any;
@@ -49,13 +103,48 @@ declare const __VLS_base: import("vue").DefineComponent<ChatBotProps, ChatBotExp
49
103
  "response-error": (error: Error, info: ClassifiedChatError) => any;
50
104
  }, string, import("vue").PublicProps, Readonly<ChatBotProps> & Readonly<{
51
105
  onStop?: (() => any) | undefined;
106
+ onRetry?: ((payload: ChatSendPayload | null, error: Error) => any) | undefined;
52
107
  onCopy?: ((payload: ChatActionbarCopyPayload) => any) | undefined;
53
108
  onAction?: ((payload: ConversationUiAction) => any) | undefined;
54
109
  "onTool-action"?: ((payload: ChatToolActionPayload) => any) | undefined;
55
110
  onSend?: ((payload: ChatSendPayload) => any) | undefined;
56
111
  "onUpdate:draft"?: ((draft: string) => any) | undefined;
57
112
  "onUpdate:attachments"?: ((attachments: readonly ChatComposerAttachment[]) => any) | undefined;
58
- onRetry?: ((payload: ChatSendPayload | null, error: Error) => any) | undefined;
113
+ "onAttachment-error"?: ((error: ChatAttachmentError, file?: File | undefined) => any) | undefined;
114
+ "onVoice-click"?: (() => any) | undefined;
115
+ "onVoice-record"?: (() => any) | undefined;
116
+ "onVoice-start"?: (() => any) | undefined;
117
+ "onVoice-stop"?: (() => any) | undefined;
118
+ "onVoice-cancel"?: (() => any) | undefined;
119
+ "onAudio-device-change"?: ((deviceIndex: number) => any) | undefined;
120
+ "onAudio-transcript"?: ((text: string) => any) | undefined;
121
+ onScreenshot?: (() => any) | undefined;
122
+ "onMenu-item-click"?: ((itemId: string) => any) | undefined;
123
+ "onAttachment-menu-open"?: (() => any) | undefined;
124
+ "onAttachment-menu-close"?: (() => any) | undefined;
125
+ "onUpdate:activeQuickAction"?: ((id: string | null) => any) | undefined;
126
+ "onQuick-action-select"?: ((action: ChatSenderQuickAction) => any) | undefined;
127
+ "onQuick-action-clear"?: (() => any) | undefined;
128
+ "onTrigger-open"?: ((payload: {
129
+ triggerId: string;
130
+ }) => any) | undefined;
131
+ "onTrigger-query"?: ((payload: {
132
+ triggerId: string;
133
+ query: string;
134
+ }) => any) | undefined;
135
+ "onTrigger-close"?: ((payload: {
136
+ triggerId: string;
137
+ }) => any) | undefined;
138
+ "onMention-insert"?: ((payload: {
139
+ triggerId: string;
140
+ id: string;
141
+ label: string;
142
+ }) => any) | undefined;
143
+ "onMention-remove"?: ((payload: {
144
+ triggerId: string;
145
+ id: string;
146
+ label: string;
147
+ }) => any) | undefined;
59
148
  "onUpdate:messages"?: ((messages: ConversationMessage[]) => any) | undefined;
60
149
  "onUpdate:queue"?: ((queue: readonly ChatQueueItem[]) => any) | undefined;
61
150
  "onArtifact-open"?: ((payload: ConversationUiAction) => any) | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"ChatBot.vue.d.ts","sourceRoot":"","sources":["../../../src/components/chat/ChatBot.vue"],"names":[],"mappings":"AA60BA,OAAO,EAAqB,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAC1E,OAAO,KAAK,EACV,wBAAwB,EAExB,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EAErB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EAEpB,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,SAAS,CAAA;AAahB,KAAK,WAAW,GAAG;IACjB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAChB,QAAQ,EAAE,oBAAoB,GAAG,IAAI,CAAA;QACrC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAAA;KAC9B,KAAK,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,OAAO,CAAA;IACtB,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAA;IAChC,eAAe,CAAC,EAAE,MAAM,OAAO,CAAA;IAC/B,KAAK,CAAC,EAAE,MAAM,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,OAAO,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,OAAO,CAAA;IACtB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAChB,OAAO,EAAE,mBAAmB,CAAA;QAC5B,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,EAAE,OAAO,CAAA;QACf,YAAY,EAAE,gBAAgB,CAAA;KAC/B,KAAK,OAAO,CAAA;IACb,aAAa,CAAC,EAAE,MAAM,OAAO,CAAA;IAC7B,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAA;IAClC,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAA;IACjF,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;QACb,QAAQ,EAAE,oBAAoB,CAAA;QAC9B,WAAW,CAAC,EAAE,OAAO,SAAS,EAAE,WAAW,CAAA;QAC3C,SAAS,EAAE,OAAO,CAAA;KACnB,KAAK,OAAO,CAAA;IACb,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,gBAAgB,CAAA;KAAE,KAAK,OAAO,CAAA;CACpE,CAAC;AAswBF,QAAA,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6EAKd,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AAWzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"ChatBot.vue.d.ts","sourceRoot":"","sources":["../../../src/components/chat/ChatBot.vue"],"names":[],"mappings":"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"}
@@ -8,6 +8,8 @@ type __VLS_Slots = {
8
8
  default?: (props: {
9
9
  message: AssistantMessage;
10
10
  copied: boolean;
11
+ copyFailed: boolean;
12
+ copy: () => Promise<void>;
11
13
  }) => unknown;
12
14
  };
13
15
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
@@ -1 +1 @@
1
- {"version":3,"file":"ChatActionbar.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/components/ChatActionbar.vue"],"names":[],"mappings":"AA4NA,OAAO,KAAK,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAA;AAI1E,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,gBAAgB,CAAA;IACzB,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAC;AAGF,KAAK,WAAW,GAAG;IACjB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,gBAAgB,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAA;CAC7E,CAAC;AA4MF,QAAA,MAAM,UAAU;;;;kFAGd,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"ChatActionbar.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/components/ChatActionbar.vue"],"names":[],"mappings":"AAkOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAA;AAI1E,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,gBAAgB,CAAA;IACzB,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAC;AAGF,KAAK,WAAW,GAAG;IACjB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAChB,OAAO,EAAE,gBAAgB,CAAA;QACzB,MAAM,EAAE,OAAO,CAAA;QACf,UAAU,EAAE,OAAO,CAAA;QACnB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAC1B,KAAK,OAAO,CAAA;CACd,CAAC;AA8MF,QAAA,MAAM,UAAU;;;;kFAGd,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ChatFollowUps.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/components/ChatFollowUps.vue"],"names":[],"mappings":"AAsIA,KAAK,WAAW,GAAG;IACjB,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;CAC7B,CAAC;AAuGF,QAAA,MAAM,YAAY;;;;kFAGhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"ChatFollowUps.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/components/ChatFollowUps.vue"],"names":[],"mappings":"AAuIA,KAAK,WAAW,GAAG;IACjB,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;CAC7B,CAAC;AAuGF,QAAA,MAAM,YAAY;;;;kFAGhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -11,6 +11,8 @@ type __VLS_Slots = {
11
11
  actionbar?: (props: {
12
12
  message: ConversationMessage;
13
13
  copied: boolean;
14
+ copyFailed: boolean;
15
+ copy: () => Promise<void>;
14
16
  }) => unknown;
15
17
  tool?: (props: {
16
18
  toolCall: ConversationToolCall;
@@ -47,6 +49,10 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
47
49
  type: PropType<ChatToolStates>;
48
50
  default: () => {};
49
51
  };
52
+ followUps: {
53
+ type: PropType<string[]>;
54
+ default: undefined;
55
+ };
50
56
  showFollowUps: {
51
57
  type: BooleanConstructor;
52
58
  default: boolean;
@@ -85,6 +91,10 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
85
91
  type: PropType<ChatToolStates>;
86
92
  default: () => {};
87
93
  };
94
+ followUps: {
95
+ type: PropType<string[]>;
96
+ default: undefined;
97
+ };
88
98
  showFollowUps: {
89
99
  type: BooleanConstructor;
90
100
  default: boolean;
@@ -101,6 +111,7 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
101
111
  toolStates: Readonly<Record<string, import("../types").ChatToolState>>;
102
112
  userAvatar: string;
103
113
  assistantAvatar: string;
114
+ followUps: string[];
104
115
  showFollowUps: boolean;
105
116
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
106
117
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -1 +1 @@
1
- {"version":3,"file":"ChatMessage.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/components/ChatMessage.vue"],"names":[],"mappings":"AA0GA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAA;AAEnC,OAAO,KAAK,EACV,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,WAAW,EACZ,MAAM,UAAU,CAAA;AAyCjB,KAAK,WAAW,GAAG;IACjB,aAAa,CAAC,EAAE,MAAM,OAAO,CAAA;IAC7B,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAA;IAClC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAChB,OAAO,EAAE,mBAAmB,CAAA;QAC5B,OAAO,EAAE,MAAM,CAAA;QACf,WAAW,EAAE,OAAO,CAAA;KACrB,KAAK,OAAO,CAAA;IACb,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,mBAAmB,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAA;IACjF,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;QACb,QAAQ,EAAE,oBAAoB,CAAA;QAC9B,WAAW,CAAC,EAAE,WAAW,CAAA;QACzB,SAAS,EAAE,OAAO,CAAA;KACnB,KAAK,OAAO,CAAA;CACd,CAAC;AA2IF,QAAA,MAAM,UAAU;;cAII,QAAQ,CAAC,mBAAmB,CAAC;;;;;;;;cAQ9B,QAAQ,CAAC,SAAS,WAAW,EAAE,CAAC;;;;cAI/B,QAAQ,CAAC,iBAAiB,CAAC;;;;;;;;;;;;cAY3B,QAAQ,CAAC,cAAc,CAAC;;;;;;;;;;;;;;cAxBxB,QAAQ,CAAC,mBAAmB,CAAC;;;;;;;;cAQ9B,QAAQ,CAAC,SAAS,WAAW,EAAE,CAAC;;;;cAI/B,QAAQ,CAAC,iBAAiB,CAAC;;;;;;;;;;;;cAY3B,QAAQ,CAAC,cAAc,CAAC;;;;;;;;;;;;;;;;;;;;4EAQ1C,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"ChatMessage.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/components/ChatMessage.vue"],"names":[],"mappings":"AAmHA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAA;AAEnC,OAAO,KAAK,EACV,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,WAAW,EACZ,MAAM,UAAU,CAAA;AA6CjB,KAAK,WAAW,GAAG;IACjB,aAAa,CAAC,EAAE,MAAM,OAAO,CAAA;IAC7B,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAA;IAClC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAChB,OAAO,EAAE,mBAAmB,CAAA;QAC5B,OAAO,EAAE,MAAM,CAAA;QACf,WAAW,EAAE,OAAO,CAAA;KACrB,KAAK,OAAO,CAAA;IACb,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE;QAClB,OAAO,EAAE,mBAAmB,CAAA;QAC5B,MAAM,EAAE,OAAO,CAAA;QACf,UAAU,EAAE,OAAO,CAAA;QACnB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAC1B,KAAK,OAAO,CAAA;IACb,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;QACb,QAAQ,EAAE,oBAAoB,CAAA;QAC9B,WAAW,CAAC,EAAE,WAAW,CAAA;QACzB,SAAS,EAAE,OAAO,CAAA;KACnB,KAAK,OAAO,CAAA;CACd,CAAC;AA2IF,QAAA,MAAM,UAAU;;cAII,QAAQ,CAAC,mBAAmB,CAAC;;;;;;;;cAQ9B,QAAQ,CAAC,SAAS,WAAW,EAAE,CAAC;;;;cAI/B,QAAQ,CAAC,iBAAiB,CAAC;;;;;;;;;;;;cAY3B,QAAQ,CAAC,cAAc,CAAC;;;;cAIzB,QAAQ,CAAC,MAAM,EAAE,CAAC;;;;;;;;;;;;;;cA5BjB,QAAQ,CAAC,mBAAmB,CAAC;;;;;;;;cAQ9B,QAAQ,CAAC,SAAS,WAAW,EAAE,CAAC;;;;cAI/B,QAAQ,CAAC,iBAAiB,CAAC;;;;;;;;;;;;cAY3B,QAAQ,CAAC,cAAc,CAAC;;;;cAIzB,QAAQ,CAAC,MAAM,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;4EAQnC,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
@@ -1,21 +1,20 @@
1
- import type { ChatAttachmentError, ChatAttachmentLimits, ChatAttachmentMenuItem, ChatComposerAttachment, ChatSendPayload, ChatSenderQuickAction, ChatTheme, ChatUploadConfig } from '../types';
2
- interface Props {
3
- placeholder?: string;
4
- disabled?: boolean;
5
- showAttachment?: boolean;
6
- maxRows?: number;
7
- draft?: string;
8
- attachments?: readonly ChatComposerAttachment[];
9
- uploadConfig?: ChatUploadConfig;
10
- attachmentLimits?: Partial<ChatAttachmentLimits>;
11
- streaming?: boolean;
12
- theme?: ChatTheme;
13
- showScreenshot?: boolean;
14
- customMenuItems?: readonly ChatAttachmentMenuItem[];
15
- quickActions?: readonly ChatSenderQuickAction[];
16
- activeQuickAction?: string | null;
17
- }
18
- declare const __VLS_export: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
1
+ import type { ChatAttachmentError, ChatAttachmentLimits, ChatComposerAttachment, ChatSendPayload, ChatSenderProps, ChatSenderQuickAction, ChatSenderTrigger, ChatUploadConfig } from '../types';
2
+ declare function handleMentionMenuClose(): void;
3
+ declare function handleMentionSelect(payload: {
4
+ id: string;
5
+ label: string;
6
+ }): void;
7
+ declare var __VLS_28: {
8
+ triggerId: string;
9
+ query: string;
10
+ select: typeof handleMentionSelect;
11
+ close: typeof handleMentionMenuClose;
12
+ anchorRect: DOMRect | null;
13
+ };
14
+ type __VLS_Slots = {} & {
15
+ 'trigger-menu'?: (props: typeof __VLS_28) => any;
16
+ };
17
+ declare const __VLS_base: import("vue").DefineComponent<ChatSenderProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
19
18
  stop: () => any;
20
19
  send: (payload: ChatSendPayload) => any;
21
20
  "update:draft": (value: string) => any;
@@ -35,7 +34,27 @@ declare const __VLS_export: import("vue").DefineComponent<Props, {}, {}, {}, {},
35
34
  "update:activeQuickAction": (id: string | null) => any;
36
35
  "quick-action-select": (action: ChatSenderQuickAction) => any;
37
36
  "quick-action-clear": () => any;
38
- }, string, import("vue").PublicProps, Readonly<Props> & Readonly<{
37
+ "trigger-open": (payload: {
38
+ triggerId: string;
39
+ }) => any;
40
+ "trigger-query": (payload: {
41
+ triggerId: string;
42
+ query: string;
43
+ }) => any;
44
+ "trigger-close": (payload: {
45
+ triggerId: string;
46
+ }) => any;
47
+ "mention-insert": (payload: {
48
+ triggerId: string;
49
+ id: string;
50
+ label: string;
51
+ }) => any;
52
+ "mention-remove": (payload: {
53
+ triggerId: string;
54
+ id: string;
55
+ label: string;
56
+ }) => any;
57
+ }, string, import("vue").PublicProps, Readonly<ChatSenderProps> & Readonly<{
39
58
  onStop?: (() => any) | undefined;
40
59
  onSend?: ((payload: ChatSendPayload) => any) | undefined;
41
60
  "onUpdate:draft"?: ((value: string) => any) | undefined;
@@ -55,8 +74,28 @@ declare const __VLS_export: import("vue").DefineComponent<Props, {}, {}, {}, {},
55
74
  "onUpdate:activeQuickAction"?: ((id: string | null) => any) | undefined;
56
75
  "onQuick-action-select"?: ((action: ChatSenderQuickAction) => any) | undefined;
57
76
  "onQuick-action-clear"?: (() => any) | undefined;
77
+ "onTrigger-open"?: ((payload: {
78
+ triggerId: string;
79
+ }) => any) | undefined;
80
+ "onTrigger-query"?: ((payload: {
81
+ triggerId: string;
82
+ query: string;
83
+ }) => any) | undefined;
84
+ "onTrigger-close"?: ((payload: {
85
+ triggerId: string;
86
+ }) => any) | undefined;
87
+ "onMention-insert"?: ((payload: {
88
+ triggerId: string;
89
+ id: string;
90
+ label: string;
91
+ }) => any) | undefined;
92
+ "onMention-remove"?: ((payload: {
93
+ triggerId: string;
94
+ id: string;
95
+ label: string;
96
+ }) => any) | undefined;
58
97
  }>, {
59
- theme: ChatTheme;
98
+ theme: import("..").ChatTheme;
60
99
  disabled: boolean;
61
100
  placeholder: string;
62
101
  showAttachment: boolean;
@@ -66,10 +105,18 @@ declare const __VLS_export: import("vue").DefineComponent<Props, {}, {}, {}, {},
66
105
  uploadConfig: ChatUploadConfig;
67
106
  attachmentLimits: Partial<ChatAttachmentLimits>;
68
107
  showScreenshot: boolean;
69
- customMenuItems: readonly ChatAttachmentMenuItem[];
108
+ customMenuItems: readonly import("..").ChatAttachmentMenuItem[];
70
109
  quickActions: readonly ChatSenderQuickAction[];
71
110
  activeQuickAction: string | null;
111
+ triggers: readonly ChatSenderTrigger[];
112
+ triggerMenuPlacement: "caret" | "custom";
72
113
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
114
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
73
115
  declare const _default: typeof __VLS_export;
74
116
  export default _default;
117
+ type __VLS_WithSlots<T, S> = T & {
118
+ new (): {
119
+ $slots: S;
120
+ };
121
+ };
75
122
  //# sourceMappingURL=ChatSender.vue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChatSender.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/components/ChatSender.vue"],"names":[],"mappings":"AAw6DA,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EACf,qBAAqB,EACrB,SAAS,EACT,gBAAgB,EACjB,MAAM,UAAU,CAAA;AAEjB,UAAU,KAAK;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAA;IAC/C,YAAY,CAAC,EAAE,gBAAgB,CAAA;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAChD,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,eAAe,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAA;IACnD,YAAY,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAA;IAC/C,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAClC;AAw2CD,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA72CR,SAAS;cARN,OAAO;iBADJ,MAAM;oBAEH,OAAO;aACd,MAAM;WACR,MAAM;iBACA,SAAS,sBAAsB,EAAE;kBAChC,gBAAgB;sBACZ,OAAO,CAAC,oBAAoB,CAAC;oBAG/B,OAAO;qBACN,SAAS,sBAAsB,EAAE;kBACpC,SAAS,qBAAqB,EAAE;uBAC3B,MAAM,GAAG,IAAI;6EA62CjC,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"ChatSender.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/components/ChatSender.vue"],"names":[],"mappings":"AAokFA,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,UAAU,CAAA;AA4cjB,iBAAS,sBAAsB,IAAI,IAAI,CAEtC;AAED,iBAAS,mBAAmB,CAAC,OAAO,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAWzE;AAm8CD,QAAA,IAAI,QAAQ;;;;;;CAAY,CAAE;AAC1B,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,CAAC;AASvD,QAAA,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;mBAh4DyB,MAAM;;;mBACL,MAAM;eAAS,MAAM;;;mBACrB,MAAM;;;mBACL,MAAM;YAAM,MAAM;eAAS,MAAM;;;mBACjC,MAAM;YAAM,MAAM;eAAS,MAAM;;;;;;;;;;;;;;;;;;;;;;;mBAJnC,MAAM;;;mBACL,MAAM;eAAS,MAAM;;;mBACrB,MAAM;;;mBACL,MAAM;YAAM,MAAM;eAAS,MAAM;;;mBACjC,MAAM;YAAM,MAAM;eAAS,MAAM;;;;;;;;;;;;;;;;;;6EAg4D1E,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AAWzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { PropType } from 'vue';
2
+ import { type ClassifiedChatError } from '../chatErrors';
2
3
  import type { ChatActionbarCopyPayload, ChatMessageProps, ChatResourceFile, ChatToolActionPayload, ChatToolStates, AutoScrollMode, ConversationListExpose, ConversationMessage, ConversationStreamStatus, ConversationToolCall, ConversationTheme, ConversationUiAction, ToolMessage } from '../types';
3
4
  type __VLS_Slots = {
4
5
  empty?: () => unknown;
@@ -15,12 +16,20 @@ type __VLS_Slots = {
15
16
  'assistant-actionbar'?: (props: {
16
17
  message: ConversationMessage;
17
18
  copied: boolean;
19
+ copyFailed: boolean;
20
+ copy: () => Promise<void>;
18
21
  }) => unknown;
19
22
  tool?: (props: {
20
23
  toolCall: ConversationToolCall;
21
24
  toolMessage?: ToolMessage;
22
25
  streaming: boolean;
23
26
  }) => unknown;
27
+ error?: (props: {
28
+ error: Error;
29
+ info: ClassifiedChatError;
30
+ hasPartialContent: boolean;
31
+ retry: () => void;
32
+ }) => unknown;
24
33
  };
25
34
  declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
26
35
  messages: {
@@ -59,12 +68,16 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
59
68
  type: PropType<ChatToolStates>;
60
69
  default: () => {};
61
70
  };
71
+ followUps: {
72
+ type: PropType<string[]>;
73
+ default: undefined;
74
+ };
62
75
  }>, ConversationListExpose, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
76
+ retry: () => any;
63
77
  copy: (payload: ChatActionbarCopyPayload) => any;
64
78
  action: (payload: ConversationUiAction) => any;
65
79
  "tool-action": (payload: ChatToolActionPayload) => any;
66
80
  "attachment-preview": (resource: ChatResourceFile) => any;
67
- retry: () => any;
68
81
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
69
82
  messages: {
70
83
  type: PropType<readonly ConversationMessage[]>;
@@ -102,21 +115,26 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
102
115
  type: PropType<ChatToolStates>;
103
116
  default: () => {};
104
117
  };
118
+ followUps: {
119
+ type: PropType<string[]>;
120
+ default: undefined;
121
+ };
105
122
  }>> & Readonly<{
123
+ onRetry?: (() => any) | undefined;
106
124
  onCopy?: ((payload: ChatActionbarCopyPayload) => any) | undefined;
107
125
  onAction?: ((payload: ConversationUiAction) => any) | undefined;
108
126
  "onTool-action"?: ((payload: ChatToolActionPayload) => any) | undefined;
109
127
  "onAttachment-preview"?: ((resource: ChatResourceFile) => any) | undefined;
110
- onRetry?: (() => any) | undefined;
111
128
  }>, {
112
129
  theme: import("../types").ChatTheme;
113
- streamingMessageIndex: number;
114
130
  status: ConversationStreamStatus;
131
+ streamingMessageIndex: number;
132
+ responseError: Error;
115
133
  toolStates: Readonly<Record<string, import("../types").ChatToolState>>;
116
134
  userAvatar: string;
117
135
  assistantAvatar: string;
136
+ followUps: string[];
118
137
  autoScroll: AutoScrollMode;
119
- responseError: Error;
120
138
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
121
139
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
122
140
  declare const _default: typeof __VLS_export;
@@ -1 +1 @@
1
- {"version":3,"file":"ConversationList.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/components/ConversationList.vue"],"names":[],"mappings":"AA24BA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAA;AAMnC,OAAO,KAAK,EACV,wBAAwB,EACxB,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,cAAc,EAEd,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,WAAW,EACZ,MAAM,UAAU,CAAA;AA8CjB,KAAK,WAAW,GAAG;IACjB,KAAK,CAAC,EAAE,MAAM,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,OAAO,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,OAAO,CAAA;IACtB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAChB,OAAO,EAAE,mBAAmB,CAAA;QAC5B,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,EAAE,OAAO,CAAA;QACf,YAAY,EAAE,gBAAgB,CAAA;KAC/B,KAAK,OAAO,CAAA;IACb,aAAa,CAAC,EAAE,MAAM,OAAO,CAAA;IAC7B,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAA;IAClC,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,mBAAmB,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAA;IAC7F,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;QACb,QAAQ,EAAE,oBAAoB,CAAA;QAC9B,WAAW,CAAC,EAAE,WAAW,CAAA;QACzB,SAAS,EAAE,OAAO,CAAA;KACnB,KAAK,OAAO,CAAA;CACd,CAAC;AA20BF,QAAA,MAAM,UAAU;;cAKG,QAAQ,CAAC,SAAS,mBAAmB,EAAE,CAAC;;;;;;;;cAQvC,QAAQ,CAAC,wBAAwB,CAAC;;;;cAIlC,QAAQ,CAAC,iBAAiB,CAAC;;;;cAI3B,QAAQ,CAAC,cAAc,CAAC;;;;;;;;;;;;;;;;cAgBxB,QAAQ,CAAC,cAAc,CAAC;;;;;;;;;;;cAhCzB,QAAQ,CAAC,SAAS,mBAAmB,EAAE,CAAC;;;;;;;;cAQvC,QAAQ,CAAC,wBAAwB,CAAC;;;;cAIlC,QAAQ,CAAC,iBAAiB,CAAC;;;;cAI3B,QAAQ,CAAC,cAAc,CAAC;;;;;;;;;;;;;;;;cAgBxB,QAAQ,CAAC,cAAc,CAAC;;;;;;;;;;;;;;;;;;4EAI1C,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"ConversationList.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/components/ConversationList.vue"],"names":[],"mappings":"AA82BA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAA;AAKnC,OAAO,EAAqB,KAAK,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAC3E,OAAO,KAAK,EACV,wBAAwB,EACxB,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,cAAc,EAEd,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,WAAW,EACZ,MAAM,UAAU,CAAA;AAkDjB,KAAK,WAAW,GAAG;IACjB,KAAK,CAAC,EAAE,MAAM,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,OAAO,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,OAAO,CAAA;IACtB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAChB,OAAO,EAAE,mBAAmB,CAAA;QAC5B,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,EAAE,OAAO,CAAA;QACf,YAAY,EAAE,gBAAgB,CAAA;KAC/B,KAAK,OAAO,CAAA;IACb,aAAa,CAAC,EAAE,MAAM,OAAO,CAAA;IAC7B,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAA;IAClC,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE;QAC9B,OAAO,EAAE,mBAAmB,CAAA;QAC5B,MAAM,EAAE,OAAO,CAAA;QACf,UAAU,EAAE,OAAO,CAAA;QACnB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAC1B,KAAK,OAAO,CAAA;IACb,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;QACb,QAAQ,EAAE,oBAAoB,CAAA;QAC9B,WAAW,CAAC,EAAE,WAAW,CAAA;QACzB,SAAS,EAAE,OAAO,CAAA;KACnB,KAAK,OAAO,CAAA;IACb,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE;QACd,KAAK,EAAE,KAAK,CAAA;QACZ,IAAI,EAAE,mBAAmB,CAAA;QACzB,iBAAiB,EAAE,OAAO,CAAA;QAC1B,KAAK,EAAE,MAAM,IAAI,CAAA;KAClB,KAAK,OAAO,CAAA;CACd,CAAC;AA8yBF,QAAA,MAAM,UAAU;;cAKG,QAAQ,CAAC,SAAS,mBAAmB,EAAE,CAAC;;;;;;;;cAQvC,QAAQ,CAAC,wBAAwB,CAAC;;;;cAIlC,QAAQ,CAAC,iBAAiB,CAAC;;;;cAI3B,QAAQ,CAAC,cAAc,CAAC;;;;;;;;;;;;;;;;cAgBxB,QAAQ,CAAC,cAAc,CAAC;;;;cAIzB,QAAQ,CAAC,MAAM,EAAE,CAAC;;;;;;;;;;;cApClB,QAAQ,CAAC,SAAS,mBAAmB,EAAE,CAAC;;;;;;;;cAQvC,QAAQ,CAAC,wBAAwB,CAAC;;;;cAIlC,QAAQ,CAAC,iBAAiB,CAAC;;;;cAI3B,QAAQ,CAAC,cAAc,CAAC;;;;;;;;;;;;;;;;cAgBxB,QAAQ,CAAC,cAAc,CAAC;;;;cAIzB,QAAQ,CAAC,MAAM,EAAE,CAAC;;;;;;;;;;;;;;;;;;;4EAInC,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
@@ -11,6 +11,8 @@ type __VLS_Slots = {
11
11
  actionbar?: (props: {
12
12
  message: ConversationMessage;
13
13
  copied: boolean;
14
+ copyFailed: boolean;
15
+ copy: () => Promise<void>;
14
16
  }) => unknown;
15
17
  tool?: (props: {
16
18
  toolCall: ConversationToolCall;
@@ -47,6 +49,10 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
47
49
  type: PropType<ChatToolStates>;
48
50
  default: () => {};
49
51
  };
52
+ followUps: {
53
+ type: PropType<string[]>;
54
+ default: undefined;
55
+ };
50
56
  showFollowUps: {
51
57
  type: BooleanConstructor;
52
58
  default: boolean;
@@ -85,6 +91,10 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
85
91
  type: PropType<ChatToolStates>;
86
92
  default: () => {};
87
93
  };
94
+ followUps: {
95
+ type: PropType<string[]>;
96
+ default: undefined;
97
+ };
88
98
  showFollowUps: {
89
99
  type: BooleanConstructor;
90
100
  default: boolean;
@@ -101,6 +111,7 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
101
111
  toolStates: Readonly<Record<string, import("../types").ChatToolState>>;
102
112
  userAvatar: string;
103
113
  assistantAvatar: string;
114
+ followUps: string[];
104
115
  showFollowUps: boolean;
105
116
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
106
117
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -1 +1 @@
1
- {"version":3,"file":"MessageBubble.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/components/MessageBubble.vue"],"names":[],"mappings":"AAkeA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAA;AASnC,OAAO,KAAK,EACV,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EAGd,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,WAAW,EACZ,MAAM,UAAU,CAAA;AAwCjB,KAAK,WAAW,GAAG;IACjB,aAAa,CAAC,EAAE,MAAM,OAAO,CAAA;IAC7B,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAA;IAClC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAChB,OAAO,EAAE,mBAAmB,CAAA;QAC5B,OAAO,EAAE,MAAM,CAAA;QACf,WAAW,EAAE,OAAO,CAAA;KACrB,KAAK,OAAO,CAAA;IACb,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,mBAAmB,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAA;IACjF,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;QACb,QAAQ,EAAE,oBAAoB,CAAA;QAC9B,WAAW,CAAC,EAAE,WAAW,CAAA;QACzB,SAAS,EAAE,OAAO,CAAA;KACnB,KAAK,OAAO,CAAA;CACd,CAAC;AA4dF,QAAA,MAAM,UAAU;;cAII,QAAQ,CAAC,mBAAmB,CAAC;;;;;;;;cAQ9B,QAAQ,CAAC,SAAS,WAAW,EAAE,CAAC;;;;cAI/B,QAAQ,CAAC,iBAAiB,CAAC;;;;;;;;;;;;cAY3B,QAAQ,CAAC,cAAc,CAAC;;;;;;;;;;;;;;cAxBxB,QAAQ,CAAC,mBAAmB,CAAC;;;;;;;;cAQ9B,QAAQ,CAAC,SAAS,WAAW,EAAE,CAAC;;;;cAI/B,QAAQ,CAAC,iBAAiB,CAAC;;;;;;;;;;;;cAY3B,QAAQ,CAAC,cAAc,CAAC;;;;;;;;;;;;;;;;;;;;4EAQ1C,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"MessageBubble.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/components/MessageBubble.vue"],"names":[],"mappings":"AA0eA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAA;AASnC,OAAO,KAAK,EACV,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EAGd,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,WAAW,EACZ,MAAM,UAAU,CAAA;AA4CjB,KAAK,WAAW,GAAG;IACjB,aAAa,CAAC,EAAE,MAAM,OAAO,CAAA;IAC7B,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAA;IAClC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAChB,OAAO,EAAE,mBAAmB,CAAA;QAC5B,OAAO,EAAE,MAAM,CAAA;QACf,WAAW,EAAE,OAAO,CAAA;KACrB,KAAK,OAAO,CAAA;IACb,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE;QAClB,OAAO,EAAE,mBAAmB,CAAA;QAC5B,MAAM,EAAE,OAAO,CAAA;QACf,UAAU,EAAE,OAAO,CAAA;QACnB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAC1B,KAAK,OAAO,CAAA;IACb,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;QACb,QAAQ,EAAE,oBAAoB,CAAA;QAC9B,WAAW,CAAC,EAAE,WAAW,CAAA;QACzB,SAAS,EAAE,OAAO,CAAA;KACnB,KAAK,OAAO,CAAA;CACd,CAAC;AA4dF,QAAA,MAAM,UAAU;;cAII,QAAQ,CAAC,mBAAmB,CAAC;;;;;;;;cAQ9B,QAAQ,CAAC,SAAS,WAAW,EAAE,CAAC;;;;cAI/B,QAAQ,CAAC,iBAAiB,CAAC;;;;;;;;;;;;cAY3B,QAAQ,CAAC,cAAc,CAAC;;;;cAIzB,QAAQ,CAAC,MAAM,EAAE,CAAC;;;;;;;;;;;;;;cA5BjB,QAAQ,CAAC,mBAAmB,CAAC;;;;;;;;cAQ9B,QAAQ,CAAC,SAAS,WAAW,EAAE,CAAC;;;;cAI/B,QAAQ,CAAC,iBAAiB,CAAC;;;;;;;;;;;;cAY3B,QAAQ,CAAC,cAAc,CAAC;;;;cAIzB,QAAQ,CAAC,MAAM,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;4EAQnC,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/mdoc/sanitize.ts"],"names":[],"mappings":"AAgEA,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD"}
1
+ {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/mdoc/sanitize.ts"],"names":[],"mappings":"AAiEA,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD"}
@@ -0,0 +1,79 @@
1
+ import type { ChatSenderTrigger } from './types';
2
+ /**
3
+ * Pure DOM helpers backing `ChatSender`'s contenteditable rich-text editor.
4
+ * Kept free of Vue reactivity so the trigger-detection and serialization algorithms
5
+ * (design doc §3, §5, §7) can be unit tested against plain DOM fixtures.
6
+ */
7
+ export declare const MENTION_TRIGGER_ATTR = "data-mention-trigger-id";
8
+ export declare const MENTION_ID_ATTR = "data-mention-id";
9
+ export declare const MENTION_LABEL_ATTR = "data-mention-label";
10
+ export declare const MENTION_CLASS = "chat-sender__mention";
11
+ export declare function isMentionElement(node: Node | null | undefined): node is HTMLElement;
12
+ /**
13
+ * Whether inserting a mention at `range.start` should prepend a separating space
14
+ * (not at editor start, and not when the previous character is already whitespace).
15
+ */
16
+ export declare function rangeNeedsLeadingSpace(editor: HTMLElement, range: Range): boolean;
17
+ /**
18
+ * Finds a mention chip immediately before the collapsed caret (for Backspace).
19
+ * Returns null when a normal character would be deleted first.
20
+ *
21
+ * Also treats "caret at the end of a whitespace-only text node that follows a chip"
22
+ * as adjacent — so one Backspace after the inserted trailing space removes the chip.
23
+ */
24
+ export declare function findMentionBeforeCaret(editor: HTMLElement, range: Range): HTMLElement | null;
25
+ /**
26
+ * Finds a mention chip immediately after the collapsed caret (for Delete).
27
+ * Returns null when a normal character would be deleted first.
28
+ */
29
+ export declare function findMentionAfterCaret(editor: HTMLElement, range: Range): HTMLElement | null;
30
+ export interface MentionTriggerMatch {
31
+ trigger: ChatSenderTrigger;
32
+ /** Spans from immediately before the trigger char (inclusive) to the caret. */
33
+ range: Range;
34
+ }
35
+ /**
36
+ * Design doc §5: finds the nearest unclosed trigger char behind the caret. Whitespace or an
37
+ * atomic-island/editor-start boundary encountered before any trigger char means "no match".
38
+ * Because characters are scanned nearest-first, the first trigger char found is automatically
39
+ * the closest one among all configured `triggers` (§5.4).
40
+ */
41
+ export declare function findTriggerMatch(triggers: readonly ChatSenderTrigger[], root: HTMLElement, caretNode: Node, caretOffset: number): MentionTriggerMatch | null;
42
+ /** Design doc §3: text nodes concatenate as-is, `<br>` becomes `\n`, mentions become their visible label text. */
43
+ export declare function serializeMentionEditorContent(root: HTMLElement): string;
44
+ /** Builds the atomic, non-editable mention "island" (design doc §2.1). */
45
+ export declare function createMentionElement(trigger: ChatSenderTrigger, id: string, label: string): HTMLSpanElement;
46
+ /** Renders plain text (no chip reconstruction — design doc §3.1 known limitation). */
47
+ export declare function renderPlainTextIntoEditor(root: HTMLElement, text: string): void;
48
+ /** Inserts `text` at `range`, converting embedded `\n` into real `<br>` elements. Returns the last inserted node (for caret placement), or null if `text` was empty. */
49
+ export declare function insertTextWithLineBreaksAtRange(range: Range, text: string): Node | null;
50
+ export declare function hasMeaningfulContent(root: HTMLElement): boolean;
51
+ /**
52
+ * Design doc §7: native Range API caret positioning, with a zero-width-space probe fallback.
53
+ * jsdom (used in unit tests) does not implement `Range.getBoundingClientRect` at all, so this
54
+ * degrades to `null` there instead of throwing — real positioning needs browser verification
55
+ * per design doc §13 risk 3.
56
+ */
57
+ export declare function getCaretRect(): DOMRect | null;
58
+ /** Anchor for the trigger menu: caret when measurable, otherwise top-left of the editor. */
59
+ export declare function getMenuAnchorRect(editor: HTMLElement): DOMRect | null;
60
+ export interface TriggerMenuPositionInput {
61
+ anchor: DOMRect;
62
+ menuWidth: number;
63
+ menuHeight: number;
64
+ viewportWidth: number;
65
+ viewportHeight: number;
66
+ gap?: number;
67
+ margin?: number;
68
+ }
69
+ export interface TriggerMenuPosition {
70
+ left: number;
71
+ top: number;
72
+ placement: 'below' | 'above';
73
+ }
74
+ /**
75
+ * Places the trigger menu below the caret when there is room; flips above when the
76
+ * bottom edge would leave the viewport. Also clamps horizontally.
77
+ */
78
+ export declare function resolveTriggerMenuPosition(input: TriggerMenuPositionInput): TriggerMenuPosition;
79
+ //# sourceMappingURL=mentionEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mentionEditor.d.ts","sourceRoot":"","sources":["../../../src/components/chat/mentionEditor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAEhD;;;;GAIG;AAEH,eAAO,MAAM,oBAAoB,4BAA4B,CAAA;AAC7D,eAAO,MAAM,eAAe,oBAAoB,CAAA;AAChD,eAAO,MAAM,kBAAkB,uBAAuB,CAAA;AACtD,eAAO,MAAM,aAAa,yBAAyB,CAAA;AAEnD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,IAAI,WAAW,CAMnF;AAcD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAsCjF;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,GAAG,WAAW,GAAG,IAAI,CA+B5F;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,GAAG,WAAW,GAAG,IAAI,CAkC3F;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,iBAAiB,CAAA;IAC1B,+EAA+E;IAC/E,KAAK,EAAE,KAAK,CAAA;CACb;AA4CD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,SAAS,iBAAiB,EAAE,EACtC,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE,IAAI,EACf,WAAW,EAAE,MAAM,GAClB,mBAAmB,GAAG,IAAI,CAe5B;AAED,kHAAkH;AAClH,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAWvE;AAED,0EAA0E;AAC1E,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,iBAAiB,EAC1B,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,GACZ,eAAe,CA4BjB;AAED,sFAAsF;AACtF,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAO/E;AAED,wKAAwK;AACxK,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAWvF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAM/D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,OAAO,GAAG,IAAI,CAS7C;AAED,4FAA4F;AAC5F,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,GAAG,IAAI,CAQrE;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,OAAO,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,OAAO,GAAG,OAAO,CAAA;CAC7B;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,wBAAwB,GAAG,mBAAmB,CA6B/F"}