@feedmepos/mf-remy-panel 0.2.10 → 0.3.0
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/HomeView-ab6d0ec3.js +144 -0
- package/dist/RemyButton-d451909b.js +30 -0
- package/dist/api/conversations.d.ts +21 -0
- package/dist/api/http.d.ts +2 -0
- package/dist/api/messages.d.ts +16 -0
- package/dist/app-919731f0.js +14287 -0
- package/dist/app.d.ts +6 -105
- package/dist/app.js +9 -9
- package/dist/assets/icons/index.d.ts +2 -3
- package/dist/bootstrap/remy.d.ts +5 -0
- package/dist/components/chatPanel/{ToolCallDisplay.vue.d.ts → ActionCard.vue.d.ts} +2 -2
- package/dist/components/chatPanel/ChatInput.vue.d.ts +1 -5
- package/dist/components/chatPanel/ChatMessageAssistant.vue.d.ts +1 -1
- package/dist/components/chatPanel/ChatMessageUser.vue.d.ts +1 -1
- package/dist/components/chatPanel/ChatMessages.vue.d.ts +1 -1
- package/dist/components/chatPanel/MessageContent.vue.d.ts +0 -2
- package/dist/composables/useClientEvent.d.ts +17 -0
- package/dist/locales/index.d.ts +96 -0
- package/dist/stores/appStore.d.ts +28 -0
- package/dist/stores/chatStore.d.ts +190 -0
- package/dist/style.css +2 -2
- package/dist/tsconfig.app.tsbuildinfo +1 -1
- package/dist/types/chat.d.ts +26 -0
- package/package.json +5 -3
- package/dist/HomeView-bd2d7032.js +0 -172
- package/dist/RemyButton-88ce06e0.js +0 -65
- package/dist/app-73c05327.js +0 -9423
- package/dist/components/chatPanel/ChatFollowUps.vue.d.ts +0 -20
- package/dist/components/chatPanel/HistoryView.vue.d.ts +0 -8
- package/dist/components/chatPanel/MessageActions.vue.d.ts +0 -16
- package/dist/router/shared.d.ts +0 -2
- package/dist/stores/counter.d.ts +0 -13
- package/dist/stores/remyChat.d.ts +0 -831
- package/dist/stores/remyStore.d.ts +0 -62
- /package/dist/components/chatPanel/{RemyChatPanel.vue.d.ts → ChatPanel.vue.d.ts} +0 -0
- /package/dist/components/chatPanel/{Navigator.vue.d.ts → ConversationList.vue.d.ts} +0 -0
package/dist/app.d.ts
CHANGED
|
@@ -1,104 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
export { useRemyStore } from './stores/remyStore';
|
|
1
|
+
export type { ChatMessage, ToolCall } from './types/chat';
|
|
2
|
+
export { useAppStore } from './stores/appStore';
|
|
4
3
|
export { default as FmApp } from './App.vue';
|
|
5
|
-
export { router } from '
|
|
6
|
-
export type AppMessagesSchema
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
"mf-remy-panel": {
|
|
10
|
-
title: string;
|
|
11
|
-
description: string;
|
|
12
|
-
count: string;
|
|
13
|
-
};
|
|
14
|
-
remy: {
|
|
15
|
-
chat: {
|
|
16
|
-
title: string;
|
|
17
|
-
empty: string;
|
|
18
|
-
placeholder: string;
|
|
19
|
-
send: string;
|
|
20
|
-
clear: string;
|
|
21
|
-
confirmClear: string;
|
|
22
|
-
streaming: string;
|
|
23
|
-
commands: string;
|
|
24
|
-
followUps: string;
|
|
25
|
-
sessionMenu: string;
|
|
26
|
-
newSession: string;
|
|
27
|
-
viewAllHistory: string;
|
|
28
|
-
clearAllHistory: string;
|
|
29
|
-
confirmClearAll: string;
|
|
30
|
-
confirmNewSession: string;
|
|
31
|
-
close: string;
|
|
32
|
-
historyTitle: string;
|
|
33
|
-
noHistory: string;
|
|
34
|
-
emptySession: string;
|
|
35
|
-
untitledSession: string;
|
|
36
|
-
messages: string;
|
|
37
|
-
yesterday: string;
|
|
38
|
-
back: string;
|
|
39
|
-
deleteSession: string;
|
|
40
|
-
confirmDeleteSession: string;
|
|
41
|
-
};
|
|
42
|
-
feedback: {
|
|
43
|
-
helpful: string;
|
|
44
|
-
unhelpful: string;
|
|
45
|
-
copy: string;
|
|
46
|
-
};
|
|
47
|
-
commands: {
|
|
48
|
-
explain: string;
|
|
49
|
-
fix: string;
|
|
50
|
-
test: string;
|
|
51
|
-
};
|
|
52
|
-
};
|
|
53
|
-
};
|
|
54
|
-
"zh-CN": {
|
|
55
|
-
"mf-remy-panel": {
|
|
56
|
-
title: string;
|
|
57
|
-
description: string;
|
|
58
|
-
count: string;
|
|
59
|
-
};
|
|
60
|
-
remy: {
|
|
61
|
-
chat: {
|
|
62
|
-
title: string;
|
|
63
|
-
empty: string;
|
|
64
|
-
placeholder: string;
|
|
65
|
-
send: string;
|
|
66
|
-
clear: string;
|
|
67
|
-
confirmClear: string;
|
|
68
|
-
streaming: string;
|
|
69
|
-
commands: string;
|
|
70
|
-
followUps: string;
|
|
71
|
-
sessionMenu: string;
|
|
72
|
-
newSession: string;
|
|
73
|
-
viewAllHistory: string;
|
|
74
|
-
clearAllHistory: string;
|
|
75
|
-
confirmClearAll: string;
|
|
76
|
-
confirmNewSession: string;
|
|
77
|
-
close: string;
|
|
78
|
-
historyTitle: string;
|
|
79
|
-
noHistory: string;
|
|
80
|
-
emptySession: string;
|
|
81
|
-
untitledSession: string;
|
|
82
|
-
messages: string;
|
|
83
|
-
yesterday: string;
|
|
84
|
-
back: string;
|
|
85
|
-
deleteSession: string;
|
|
86
|
-
confirmDeleteSession: string;
|
|
87
|
-
};
|
|
88
|
-
feedback: {
|
|
89
|
-
helpful: string;
|
|
90
|
-
unhelpful: string;
|
|
91
|
-
copy: string;
|
|
92
|
-
};
|
|
93
|
-
commands: {
|
|
94
|
-
explain: string;
|
|
95
|
-
fix: string;
|
|
96
|
-
test: string;
|
|
97
|
-
};
|
|
98
|
-
};
|
|
99
|
-
};
|
|
100
|
-
};
|
|
101
|
-
export declare const RemyChatPanel: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
4
|
+
export { router } from './router';
|
|
5
|
+
export { i18nMessages, type AppMessagesSchema } from './locales';
|
|
6
|
+
export { initializeRemyChat } from './bootstrap/remy';
|
|
7
|
+
export declare const ChatPanel: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
102
8
|
close: () => void;
|
|
103
9
|
}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{
|
|
104
10
|
onClose?: (() => any) | undefined;
|
|
@@ -108,8 +14,3 @@ export declare const RemyButton: import("vue").DefineComponent<{}, {}, {}, {}, {
|
|
|
108
14
|
}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{
|
|
109
15
|
onClick?: (() => any) | undefined;
|
|
110
16
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
111
|
-
/**
|
|
112
|
-
* Initialize Remy Chat with participants and commands
|
|
113
|
-
* @param backendUrl - The Remy backend API URL
|
|
114
|
-
*/
|
|
115
|
-
export declare function initializeRemyChat(backendUrl: string): void;
|
package/dist/app.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import "vue";
|
|
2
|
-
import {
|
|
3
|
-
import "@feedmepos/mf-common";
|
|
2
|
+
import { C as o, A as p, a as m, i as n, b as u, r as A, u as C } from "./app-919731f0.js";
|
|
4
3
|
import "pinia";
|
|
4
|
+
import "@feedmepos/mf-common";
|
|
5
5
|
import "vue-router";
|
|
6
6
|
export {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
7
|
+
o as ChatPanel,
|
|
8
|
+
p as FmApp,
|
|
9
|
+
m as RemyButton,
|
|
10
|
+
n as i18nMessages,
|
|
11
|
+
u as initializeRemyChat,
|
|
12
|
+
A as router,
|
|
13
|
+
C as useAppStore
|
|
14
14
|
};
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
export { RemyIcon, ActivatedRemyIcon };
|
|
1
|
+
import RemyAvatar from './remy.png';
|
|
2
|
+
export { RemyAvatar };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { ToolCall } from '
|
|
1
|
+
import type { ToolCall } from '@/types/chat';
|
|
2
2
|
interface Props {
|
|
3
|
-
|
|
3
|
+
toolCall: ToolCall;
|
|
4
4
|
}
|
|
5
5
|
declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<__VLS_TypePropsToRuntimeProps<Props>>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_TypePropsToRuntimeProps<Props>>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
6
6
|
export default _default;
|
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
2
|
-
send: (prompt: string, command?: string | undefined, variables?: Record<string, any> | undefined) => void;
|
|
3
|
-
}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{
|
|
4
|
-
onSend?: ((prompt: string, command?: string | undefined, variables?: Record<string, any> | undefined) => any) | undefined;
|
|
5
|
-
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
6
2
|
export default _default;
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import type { StreamContent } from '@feedmepos/remy-core';
|
|
2
1
|
import 'highlight.js/styles/github-dark.css';
|
|
3
2
|
interface Props {
|
|
4
3
|
content: string;
|
|
5
|
-
contentParts?: StreamContent[];
|
|
6
4
|
isStreaming?: boolean;
|
|
7
5
|
}
|
|
8
6
|
declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<__VLS_TypePropsToRuntimeProps<Props>>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_TypePropsToRuntimeProps<Props>>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Listen for a named agent-driven client event dispatched by the chat store.
|
|
3
|
+
*
|
|
4
|
+
* When the AI agent calls the `emitClientEvent` tool, the store fires a native
|
|
5
|
+
* `CustomEvent` on `window` with the given `eventName` and a `detail` matching
|
|
6
|
+
* the tool's `payload`. Use this composable in any component or another
|
|
7
|
+
* composable to cleanly subscribe and automatically unsubscribe.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* useClientEvent<{ suggestedPrice: number; itemName: string }>(
|
|
11
|
+
* 'priceSuggested',
|
|
12
|
+
* ({ suggestedPrice, itemName }) => {
|
|
13
|
+
* priceField.value = suggestedPrice
|
|
14
|
+
* }
|
|
15
|
+
* )
|
|
16
|
+
*/
|
|
17
|
+
export declare function useClientEvent<T = unknown>(eventName: string, handler: (payload: T) => void): void;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import enUS from './en-US.json';
|
|
2
|
+
export type AppMessagesSchema = typeof enUS;
|
|
3
|
+
export declare const i18nMessages: {
|
|
4
|
+
'en-US': {
|
|
5
|
+
"mf-remy-panel": {
|
|
6
|
+
title: string;
|
|
7
|
+
description: string;
|
|
8
|
+
count: string;
|
|
9
|
+
};
|
|
10
|
+
remy: {
|
|
11
|
+
chat: {
|
|
12
|
+
title: string;
|
|
13
|
+
empty: string;
|
|
14
|
+
placeholder: string;
|
|
15
|
+
send: string;
|
|
16
|
+
clear: string;
|
|
17
|
+
confirmClear: string;
|
|
18
|
+
streaming: string;
|
|
19
|
+
commands: string;
|
|
20
|
+
followUps: string;
|
|
21
|
+
sessionMenu: string;
|
|
22
|
+
newSession: string;
|
|
23
|
+
viewAllHistory: string;
|
|
24
|
+
clearAllHistory: string;
|
|
25
|
+
confirmClearAll: string;
|
|
26
|
+
confirmNewSession: string;
|
|
27
|
+
close: string;
|
|
28
|
+
historyTitle: string;
|
|
29
|
+
noHistory: string;
|
|
30
|
+
emptySession: string;
|
|
31
|
+
untitledSession: string;
|
|
32
|
+
messages: string;
|
|
33
|
+
yesterday: string;
|
|
34
|
+
back: string;
|
|
35
|
+
deleteSession: string;
|
|
36
|
+
confirmDeleteSession: string;
|
|
37
|
+
};
|
|
38
|
+
feedback: {
|
|
39
|
+
helpful: string;
|
|
40
|
+
unhelpful: string;
|
|
41
|
+
copy: string;
|
|
42
|
+
};
|
|
43
|
+
commands: {
|
|
44
|
+
explain: string;
|
|
45
|
+
fix: string;
|
|
46
|
+
test: string;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
'zh-CN': {
|
|
51
|
+
"mf-remy-panel": {
|
|
52
|
+
title: string;
|
|
53
|
+
description: string;
|
|
54
|
+
count: string;
|
|
55
|
+
};
|
|
56
|
+
remy: {
|
|
57
|
+
chat: {
|
|
58
|
+
title: string;
|
|
59
|
+
empty: string;
|
|
60
|
+
placeholder: string;
|
|
61
|
+
send: string;
|
|
62
|
+
clear: string;
|
|
63
|
+
confirmClear: string;
|
|
64
|
+
streaming: string;
|
|
65
|
+
commands: string;
|
|
66
|
+
followUps: string;
|
|
67
|
+
sessionMenu: string;
|
|
68
|
+
newSession: string;
|
|
69
|
+
viewAllHistory: string;
|
|
70
|
+
clearAllHistory: string;
|
|
71
|
+
confirmClearAll: string;
|
|
72
|
+
confirmNewSession: string;
|
|
73
|
+
close: string;
|
|
74
|
+
historyTitle: string;
|
|
75
|
+
noHistory: string;
|
|
76
|
+
emptySession: string;
|
|
77
|
+
untitledSession: string;
|
|
78
|
+
messages: string;
|
|
79
|
+
yesterday: string;
|
|
80
|
+
back: string;
|
|
81
|
+
deleteSession: string;
|
|
82
|
+
confirmDeleteSession: string;
|
|
83
|
+
};
|
|
84
|
+
feedback: {
|
|
85
|
+
helpful: string;
|
|
86
|
+
unhelpful: string;
|
|
87
|
+
copy: string;
|
|
88
|
+
};
|
|
89
|
+
commands: {
|
|
90
|
+
explain: string;
|
|
91
|
+
fix: string;
|
|
92
|
+
test: string;
|
|
93
|
+
};
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ChatCommand } from '@/types/chat';
|
|
2
|
+
interface ActivateOptions {
|
|
3
|
+
prompt?: string;
|
|
4
|
+
command?: ChatCommand;
|
|
5
|
+
}
|
|
6
|
+
export declare const useAppStore: import("pinia").StoreDefinition<"app", Pick<{
|
|
7
|
+
showRemy: import("vue").Ref<boolean, boolean>;
|
|
8
|
+
dialogShowing: import("vue").Ref<boolean, boolean>;
|
|
9
|
+
prefilledPrompt: import("vue").Ref<string, string>;
|
|
10
|
+
initialize: () => void;
|
|
11
|
+
activate: (options?: ActivateOptions) => void;
|
|
12
|
+
close: () => void;
|
|
13
|
+
}, "showRemy" | "dialogShowing" | "prefilledPrompt">, Pick<{
|
|
14
|
+
showRemy: import("vue").Ref<boolean, boolean>;
|
|
15
|
+
dialogShowing: import("vue").Ref<boolean, boolean>;
|
|
16
|
+
prefilledPrompt: import("vue").Ref<string, string>;
|
|
17
|
+
initialize: () => void;
|
|
18
|
+
activate: (options?: ActivateOptions) => void;
|
|
19
|
+
close: () => void;
|
|
20
|
+
}, never>, Pick<{
|
|
21
|
+
showRemy: import("vue").Ref<boolean, boolean>;
|
|
22
|
+
dialogShowing: import("vue").Ref<boolean, boolean>;
|
|
23
|
+
prefilledPrompt: import("vue").Ref<string, string>;
|
|
24
|
+
initialize: () => void;
|
|
25
|
+
activate: (options?: ActivateOptions) => void;
|
|
26
|
+
close: () => void;
|
|
27
|
+
}, "initialize" | "activate" | "close">>;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import type { ChatMessage, ChatCommand, Conversation } from '@/types/chat';
|
|
2
|
+
type MessageFeedback = 'helpful' | 'unhelpful';
|
|
3
|
+
export declare const useChatStore: import("pinia").StoreDefinition<"chat", Pick<{
|
|
4
|
+
inputText: import("vue").Ref<string, string>;
|
|
5
|
+
messages: import("vue").Ref<{
|
|
6
|
+
id: string;
|
|
7
|
+
role: "user" | "assistant";
|
|
8
|
+
content: string;
|
|
9
|
+
command?: ChatCommand | undefined;
|
|
10
|
+
timestamp: number;
|
|
11
|
+
imageData?: string | undefined;
|
|
12
|
+
feedback?: "helpful" | "unhelpful" | undefined;
|
|
13
|
+
isStreaming?: boolean | undefined;
|
|
14
|
+
toolCalls?: {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
arguments: any;
|
|
18
|
+
state?: string | undefined;
|
|
19
|
+
result?: any;
|
|
20
|
+
}[] | undefined;
|
|
21
|
+
}[], ChatMessage[] | {
|
|
22
|
+
id: string;
|
|
23
|
+
role: "user" | "assistant";
|
|
24
|
+
content: string;
|
|
25
|
+
command?: ChatCommand | undefined;
|
|
26
|
+
timestamp: number;
|
|
27
|
+
imageData?: string | undefined;
|
|
28
|
+
feedback?: "helpful" | "unhelpful" | undefined;
|
|
29
|
+
isStreaming?: boolean | undefined;
|
|
30
|
+
toolCalls?: {
|
|
31
|
+
id: string;
|
|
32
|
+
name: string;
|
|
33
|
+
arguments: any;
|
|
34
|
+
state?: string | undefined;
|
|
35
|
+
result?: any;
|
|
36
|
+
}[] | undefined;
|
|
37
|
+
}[]>;
|
|
38
|
+
isStreaming: import("vue").ComputedRef<boolean>;
|
|
39
|
+
currentConversationId: import("vue").Ref<string | null, string | null>;
|
|
40
|
+
conversations: import("vue").Ref<{
|
|
41
|
+
id: string;
|
|
42
|
+
title: string;
|
|
43
|
+
createdAt: number;
|
|
44
|
+
lastMessageAt: number;
|
|
45
|
+
messageCount?: number | undefined;
|
|
46
|
+
}[], Conversation[] | {
|
|
47
|
+
id: string;
|
|
48
|
+
title: string;
|
|
49
|
+
createdAt: number;
|
|
50
|
+
lastMessageAt: number;
|
|
51
|
+
messageCount?: number | undefined;
|
|
52
|
+
}[]>;
|
|
53
|
+
isLoadingConversation: import("vue").Ref<boolean, boolean>;
|
|
54
|
+
isLoadingConversations: import("vue").Ref<boolean, boolean>;
|
|
55
|
+
initializeChatTransport: () => Promise<void>;
|
|
56
|
+
sendMessage: (prompt: string, imageData?: string, command?: ChatCommand) => Promise<void>;
|
|
57
|
+
clearConversation: () => void;
|
|
58
|
+
updateMessageFeedback: (messageId: string, feedback: MessageFeedback) => void;
|
|
59
|
+
loadConversations: () => Promise<void>;
|
|
60
|
+
createNewConversation: () => Promise<void>;
|
|
61
|
+
createConversationAndSendMessage: (prompt: string, imageData?: string, command?: ChatCommand) => Promise<void>;
|
|
62
|
+
loadConversation: (conversationId: string) => Promise<void>;
|
|
63
|
+
switchConversation: (conversationId: string | null) => Promise<void>;
|
|
64
|
+
deleteCurrentConversation: () => Promise<void>;
|
|
65
|
+
}, "inputText" | "messages" | "currentConversationId" | "conversations" | "isLoadingConversation" | "isLoadingConversations">, Pick<{
|
|
66
|
+
inputText: import("vue").Ref<string, string>;
|
|
67
|
+
messages: import("vue").Ref<{
|
|
68
|
+
id: string;
|
|
69
|
+
role: "user" | "assistant";
|
|
70
|
+
content: string;
|
|
71
|
+
command?: ChatCommand | undefined;
|
|
72
|
+
timestamp: number;
|
|
73
|
+
imageData?: string | undefined;
|
|
74
|
+
feedback?: "helpful" | "unhelpful" | undefined;
|
|
75
|
+
isStreaming?: boolean | undefined;
|
|
76
|
+
toolCalls?: {
|
|
77
|
+
id: string;
|
|
78
|
+
name: string;
|
|
79
|
+
arguments: any;
|
|
80
|
+
state?: string | undefined;
|
|
81
|
+
result?: any;
|
|
82
|
+
}[] | undefined;
|
|
83
|
+
}[], ChatMessage[] | {
|
|
84
|
+
id: string;
|
|
85
|
+
role: "user" | "assistant";
|
|
86
|
+
content: string;
|
|
87
|
+
command?: ChatCommand | undefined;
|
|
88
|
+
timestamp: number;
|
|
89
|
+
imageData?: string | undefined;
|
|
90
|
+
feedback?: "helpful" | "unhelpful" | undefined;
|
|
91
|
+
isStreaming?: boolean | undefined;
|
|
92
|
+
toolCalls?: {
|
|
93
|
+
id: string;
|
|
94
|
+
name: string;
|
|
95
|
+
arguments: any;
|
|
96
|
+
state?: string | undefined;
|
|
97
|
+
result?: any;
|
|
98
|
+
}[] | undefined;
|
|
99
|
+
}[]>;
|
|
100
|
+
isStreaming: import("vue").ComputedRef<boolean>;
|
|
101
|
+
currentConversationId: import("vue").Ref<string | null, string | null>;
|
|
102
|
+
conversations: import("vue").Ref<{
|
|
103
|
+
id: string;
|
|
104
|
+
title: string;
|
|
105
|
+
createdAt: number;
|
|
106
|
+
lastMessageAt: number;
|
|
107
|
+
messageCount?: number | undefined;
|
|
108
|
+
}[], Conversation[] | {
|
|
109
|
+
id: string;
|
|
110
|
+
title: string;
|
|
111
|
+
createdAt: number;
|
|
112
|
+
lastMessageAt: number;
|
|
113
|
+
messageCount?: number | undefined;
|
|
114
|
+
}[]>;
|
|
115
|
+
isLoadingConversation: import("vue").Ref<boolean, boolean>;
|
|
116
|
+
isLoadingConversations: import("vue").Ref<boolean, boolean>;
|
|
117
|
+
initializeChatTransport: () => Promise<void>;
|
|
118
|
+
sendMessage: (prompt: string, imageData?: string, command?: ChatCommand) => Promise<void>;
|
|
119
|
+
clearConversation: () => void;
|
|
120
|
+
updateMessageFeedback: (messageId: string, feedback: MessageFeedback) => void;
|
|
121
|
+
loadConversations: () => Promise<void>;
|
|
122
|
+
createNewConversation: () => Promise<void>;
|
|
123
|
+
createConversationAndSendMessage: (prompt: string, imageData?: string, command?: ChatCommand) => Promise<void>;
|
|
124
|
+
loadConversation: (conversationId: string) => Promise<void>;
|
|
125
|
+
switchConversation: (conversationId: string | null) => Promise<void>;
|
|
126
|
+
deleteCurrentConversation: () => Promise<void>;
|
|
127
|
+
}, "isStreaming">, Pick<{
|
|
128
|
+
inputText: import("vue").Ref<string, string>;
|
|
129
|
+
messages: import("vue").Ref<{
|
|
130
|
+
id: string;
|
|
131
|
+
role: "user" | "assistant";
|
|
132
|
+
content: string;
|
|
133
|
+
command?: ChatCommand | undefined;
|
|
134
|
+
timestamp: number;
|
|
135
|
+
imageData?: string | undefined;
|
|
136
|
+
feedback?: "helpful" | "unhelpful" | undefined;
|
|
137
|
+
isStreaming?: boolean | undefined;
|
|
138
|
+
toolCalls?: {
|
|
139
|
+
id: string;
|
|
140
|
+
name: string;
|
|
141
|
+
arguments: any;
|
|
142
|
+
state?: string | undefined;
|
|
143
|
+
result?: any;
|
|
144
|
+
}[] | undefined;
|
|
145
|
+
}[], ChatMessage[] | {
|
|
146
|
+
id: string;
|
|
147
|
+
role: "user" | "assistant";
|
|
148
|
+
content: string;
|
|
149
|
+
command?: ChatCommand | undefined;
|
|
150
|
+
timestamp: number;
|
|
151
|
+
imageData?: string | undefined;
|
|
152
|
+
feedback?: "helpful" | "unhelpful" | undefined;
|
|
153
|
+
isStreaming?: boolean | undefined;
|
|
154
|
+
toolCalls?: {
|
|
155
|
+
id: string;
|
|
156
|
+
name: string;
|
|
157
|
+
arguments: any;
|
|
158
|
+
state?: string | undefined;
|
|
159
|
+
result?: any;
|
|
160
|
+
}[] | undefined;
|
|
161
|
+
}[]>;
|
|
162
|
+
isStreaming: import("vue").ComputedRef<boolean>;
|
|
163
|
+
currentConversationId: import("vue").Ref<string | null, string | null>;
|
|
164
|
+
conversations: import("vue").Ref<{
|
|
165
|
+
id: string;
|
|
166
|
+
title: string;
|
|
167
|
+
createdAt: number;
|
|
168
|
+
lastMessageAt: number;
|
|
169
|
+
messageCount?: number | undefined;
|
|
170
|
+
}[], Conversation[] | {
|
|
171
|
+
id: string;
|
|
172
|
+
title: string;
|
|
173
|
+
createdAt: number;
|
|
174
|
+
lastMessageAt: number;
|
|
175
|
+
messageCount?: number | undefined;
|
|
176
|
+
}[]>;
|
|
177
|
+
isLoadingConversation: import("vue").Ref<boolean, boolean>;
|
|
178
|
+
isLoadingConversations: import("vue").Ref<boolean, boolean>;
|
|
179
|
+
initializeChatTransport: () => Promise<void>;
|
|
180
|
+
sendMessage: (prompt: string, imageData?: string, command?: ChatCommand) => Promise<void>;
|
|
181
|
+
clearConversation: () => void;
|
|
182
|
+
updateMessageFeedback: (messageId: string, feedback: MessageFeedback) => void;
|
|
183
|
+
loadConversations: () => Promise<void>;
|
|
184
|
+
createNewConversation: () => Promise<void>;
|
|
185
|
+
createConversationAndSendMessage: (prompt: string, imageData?: string, command?: ChatCommand) => Promise<void>;
|
|
186
|
+
loadConversation: (conversationId: string) => Promise<void>;
|
|
187
|
+
switchConversation: (conversationId: string | null) => Promise<void>;
|
|
188
|
+
deleteCurrentConversation: () => Promise<void>;
|
|
189
|
+
}, "initializeChatTransport" | "sendMessage" | "clearConversation" | "updateMessageFeedback" | "loadConversations" | "createNewConversation" | "createConversationAndSendMessage" | "loadConversation" | "switchConversation" | "deleteCurrentConversation">>;
|
|
190
|
+
export {};
|
package/dist/style.css
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*!
|
|
1
|
+
.umsg[data-v-b272d4bf]{display:flex;flex-direction:column;align-items:flex-end;gap:.3rem}.umsg__bubble[data-v-b272d4bf]{max-width:82%;background:#0f172a;color:#fff;padding:.7rem 1rem;border-radius:18px 18px 4px}.umsg__text[data-v-b272d4bf]{font-size:.875rem;line-height:1.6;white-space:pre-wrap;word-break:break-word}.umsg__command[data-v-b272d4bf]{display:inline-flex;align-items:center;margin:0 0 .35rem;padding:.15rem .45rem;border-radius:999px;font-size:.66rem;font-weight:600;letter-spacing:.02em;background:rgba(255,255,255,.2);color:#e2e8f0}.umsg__image[data-v-b272d4bf]{display:block;max-width:100%;border-radius:10px;margin-top:.5rem;cursor:pointer;transition:opacity .15s ease}.umsg__image[data-v-b272d4bf]:hover{opacity:.9}.umsg__time[data-v-b272d4bf]{font-size:.7rem;color:#94a3b8;padding-right:.25rem}pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*!
|
|
2
2
|
Theme: GitHub Dark
|
|
3
3
|
Description: Dark theme as seen on github.com
|
|
4
4
|
Author: github.com
|
|
@@ -7,4 +7,4 @@ pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5p
|
|
|
7
7
|
|
|
8
8
|
Outdated base version: https://github.com/primer/github-syntax-dark
|
|
9
9
|
Current colors taken from GitHub's CSS
|
|
10
|
-
*/.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#79c0ff}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-comment,.hljs-code,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c}.markdown-content[data-v-81669a87] p{margin:.25rem 0}.markdown-content[data-v-81669a87] p:first-child{margin-top:0}.markdown-content[data-v-81669a87] p:last-child{margin-bottom:0}.markdown-content[data-v-81669a87] code{background:var(--color-background);padding:.125rem .25rem;border-radius:3px;font-family:SF Mono,Monaco,Inconsolata,Fira Code,monospace;font-size:.8em}.markdown-content[data-v-81669a87] pre{background:var(--color-background);padding:.5rem;border-radius:4px;overflow-x:auto;margin:.5rem 0}.markdown-content[data-v-81669a87] pre code{background:none;padding:0;border-radius:0;font-size:.8rem}.markdown-content[data-v-81669a87] a{color:var(--color-primary);text-decoration:none;border-bottom:1px solid transparent;transition:border-color .2s ease}.markdown-content[data-v-81669a87] a:hover{border-bottom-color:var(--color-primary)}.markdown-content[data-v-81669a87] ul,.markdown-content[data-v-81669a87] ol{padding-left:1.25rem;margin:.25rem 0}.markdown-content[data-v-81669a87] li{margin:.125rem 0}.markdown-content[data-v-81669a87] blockquote{border-left:3px solid rgb(209 213 219);padding-left:1rem;margin:1rem 0;color:var(--color-text-secondary)}.markdown-content[data-v-81669a87] h1,.markdown-content[data-v-81669a87] h2,.markdown-content[data-v-81669a87] h3,.markdown-content[data-v-81669a87] h4{margin:1rem 0 .5rem;font-weight:600}.markdown-content[data-v-81669a87] h1{font-size:1.5rem}.markdown-content[data-v-81669a87] h2{font-size:1.25rem}.markdown-content[data-v-81669a87] h3{font-size:1.1rem}.markdown-content[data-v-81669a87] h4{font-size:1rem}.spinner[data-v-81669a87]:before{content:"◐";display:inline-block;animation:spin-81669a87 1s linear infinite}@keyframes spin-81669a87{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.tool-calls-container[data-v-b9b1ccae]{margin:.5rem 0;display:flex;flex-direction:column;gap:.5rem}.tool-call-item[data-v-b9b1ccae]{border:1px solid var(--color-border);border-radius:.5rem;background:var(--color-background-soft);overflow:hidden}.tool-call-header[data-v-b9b1ccae]{width:100%;padding:.75rem 1rem;display:flex;align-items:center;gap:.5rem;background:transparent;border:none;cursor:pointer;text-align:left;transition:background-color .2s}.tool-call-header[data-v-b9b1ccae]:hover{background:var(--color-background-mute)}.tool-icon[data-v-b9b1ccae]{font-size:1.25rem;flex-shrink:0}.tool-name[data-v-b9b1ccae]{flex:1;font-weight:500;color:var(--color-text);font-family:Courier New,monospace}.expand-icon[data-v-b9b1ccae]{font-size:.75rem;color:var(--color-text-secondary);transition:transform .2s;flex-shrink:0}.expand-icon.expanded[data-v-b9b1ccae]{transform:rotate(90deg)}.tool-call-content[data-v-b9b1ccae]{padding:0 1rem 1rem;animation:slideDown-b9b1ccae .2s ease-out}@keyframes slideDown-b9b1ccae{0%{opacity:0;transform:translateY(-.5rem)}to{opacity:1;transform:translateY(0)}}.tool-arguments[data-v-b9b1ccae]{display:flex;flex-direction:column;gap:.5rem}.label[data-v-b9b1ccae]{font-size:.875rem;font-weight:500;color:var(--color-text-secondary)}.arguments-json[data-v-b9b1ccae]{background:var(--color-background);padding:.75rem;border-radius:.375rem;font-size:.875rem;font-family:Courier New,monospace;color:var(--color-text);overflow-x:auto;margin:0;border:1px solid var(--color-border)}@keyframes pulse-245bc136{0%,to{opacity:.3}50%{opacity:1}}@keyframes blink-245bc136{0%,to{opacity:1}50%{opacity:0}}@keyframes fadeIn-d0d7004d{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}[data-v-f141ec36] textarea::-moz-placeholder{font-size:12px}[data-v-f141ec36] textarea::placeholder{font-size:12px}[data-v-f141ec36] .fm-textarea--input{font-size:.75rem!important;font-weight:400!important;line-height:1rem!important;letter-spacing:.02em!important;text-decoration-line:none!important}
|
|
10
|
+
*/.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#79c0ff}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-comment,.hljs-code,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c}.mc[data-v-241003f2]{color:#1e293b;line-height:1.6;font-size:.875rem}.mc__body[data-v-241003f2]{word-break:break-word}.mc__body[data-v-241003f2] p{margin:.25rem 0}.mc__body[data-v-241003f2] p:first-child{margin-top:0}.mc__body[data-v-241003f2] p:last-child{margin-bottom:0}.mc__body[data-v-241003f2] code{background:#f1f5f9;padding:.125rem .3rem;border-radius:4px;font-family:SF Mono,Monaco,Inconsolata,Fira Code,monospace;font-size:.8em;color:#334155}.mc__body[data-v-241003f2] pre{background:#f1f5f9;padding:.75rem;border-radius:8px;overflow-x:auto;margin:.5rem 0;border:1px solid #e2e8f0}.mc__body[data-v-241003f2] pre code{background:none;padding:0;border-radius:0;font-size:.8rem}.mc__body[data-v-241003f2] a{color:#6366f1;text-decoration:none;border-bottom:1px solid transparent;transition:border-color .2s ease}.mc__body[data-v-241003f2] a:hover{border-bottom-color:#6366f1}.mc__body[data-v-241003f2] ul,.mc__body[data-v-241003f2] ol{padding-left:1.25rem;margin:.25rem 0}.mc__body[data-v-241003f2] li{margin:.125rem 0}.mc__body[data-v-241003f2] blockquote{border-left:3px solid #e2e8f0;padding-left:1rem;margin:.75rem 0;color:#64748b}.mc__body[data-v-241003f2] h1,.mc__body[data-v-241003f2] h2,.mc__body[data-v-241003f2] h3,.mc__body[data-v-241003f2] h4{margin:1rem 0 .5rem;font-weight:600;color:#0f172a}.mc__body[data-v-241003f2] h1{font-size:1.5rem}.mc__body[data-v-241003f2] h2{font-size:1.25rem}.mc__body[data-v-241003f2] h3{font-size:1.1rem}.mc__body[data-v-241003f2] h4{font-size:1rem}.spinner[data-v-241003f2]:before{content:"◐";display:inline-block;animation:spin-241003f2 1s linear infinite}@keyframes spin-241003f2{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.action-card[data-v-a5019cbf]{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin-top:.5rem;border:1px solid #bfdbfe;background:#eff6ff;border-radius:12px;padding:.65rem .75rem}.action-card__body[data-v-a5019cbf]{min-width:0}.action-card__title[data-v-a5019cbf]{margin:0;color:#1e40af;font-size:.78rem;font-weight:700;line-height:1.3}.action-card__description[data-v-a5019cbf]{margin:.15rem 0 0;color:#3b82f6;font-size:.78rem;line-height:1.4}.action-card__btn[data-v-a5019cbf]{flex-shrink:0;border:none;background:#3b82f6;color:#fff;border-radius:8px;padding:.35rem .75rem;font-size:.78rem;font-weight:600;cursor:pointer;transition:background .15s ease,opacity .15s ease;white-space:nowrap}.action-card__btn[data-v-a5019cbf]:hover{background:#2563eb}.amsg[data-v-cb0c4988]{display:flex;gap:.75rem;align-items:flex-start}.amsg__avatar[data-v-cb0c4988]{width:28px;height:28px;border-radius:8px;-o-object-fit:cover;object-fit:cover;flex-shrink:0;margin-top:2px}.amsg__body[data-v-cb0c4988]{flex:1;min-width:0}.amsg__header[data-v-cb0c4988]{display:flex;align-items:center;gap:.5rem;margin-bottom:.4rem}.amsg__name[data-v-cb0c4988]{font-size:.78rem;font-weight:600;color:#0f172a}.amsg__time[data-v-cb0c4988]{font-size:.7rem;color:#94a3b8}.amsg__dots[data-v-cb0c4988]{display:flex;gap:3px;align-items:center}.amsg__dots span[data-v-cb0c4988]{width:5px;height:5px;border-radius:999px;background:#94a3b8;animation:dot-cb0c4988 1.4s ease-in-out infinite}.amsg__dots span[data-v-cb0c4988]:nth-child(2){animation-delay:.2s}.amsg__dots span[data-v-cb0c4988]:nth-child(3){animation-delay:.4s}@keyframes dot-cb0c4988{0%,80%,to{transform:scale(.7);opacity:.4}40%{transform:scale(1);opacity:1}}.msgs[data-v-7e484237]{flex:1;overflow-y:auto;padding:1.25rem;display:flex;flex-direction:column;gap:1.25rem;background:#fafafa;scroll-behavior:smooth}.msgs[data-v-7e484237]::-webkit-scrollbar{width:4px}.msgs[data-v-7e484237]::-webkit-scrollbar-track{background:transparent}.msgs[data-v-7e484237]::-webkit-scrollbar-thumb{background:#e2e8f0;border-radius:999px}.msgs__empty[data-v-7e484237]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.6rem;text-align:center;padding:3rem 2rem}.msgs__empty-icon[data-v-7e484237]{color:#cbd5e1;margin-bottom:.25rem}.msgs__empty-title[data-v-7e484237]{font-size:.9rem;font-weight:500;color:#94a3b8}.msgs__empty-sub[data-v-7e484237]{font-size:.8rem;color:#cbd5e1}.msgs__item[data-v-7e484237]{animation:msgIn-7e484237 .2s ease-out}@keyframes msgIn-7e484237{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.composer[data-v-8358ece7]{width:100%;padding:.75rem 1rem .5rem;font-family:system-ui,-apple-system,sans-serif}.composer__input-wrap[data-v-8358ece7]{position:relative}.composer__box[data-v-8358ece7]{display:flex;flex-direction:column;gap:.5rem;padding:.85rem 1rem;border-radius:16px;border:1px solid #e2e8f0;background:#fff;transition:border-color .2s ease}.composer__box--dragging[data-v-8358ece7]{border-color:#6366f1}.composer__preview[data-v-8358ece7]{position:relative;width:80px;height:80px;border-radius:10px;overflow:hidden;border:1px solid #e2e8f0;align-self:flex-start}.composer__preview img[data-v-8358ece7]{display:block;width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.composer__preview-remove[data-v-8358ece7]{position:absolute;top:4px;right:4px;width:22px;height:22px;border-radius:999px;border:none;background:rgba(15,23,42,.7);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background .15s ease}.composer__preview-remove[data-v-8358ece7]:hover{background:#0f172a}.composer__command-chip[data-v-8358ece7]{display:inline-flex;align-items:center;gap:.3rem;align-self:flex-start;padding:.25rem .5rem;border-radius:999px;background:#e2e8f0;border:1px solid #cbd5e1}.composer__command-chip-label[data-v-8358ece7]{font-size:.74rem;font-weight:600;color:#0f172a;line-height:1}.composer__command-chip-clear[data-v-8358ece7]{width:18px;height:18px;border:none;border-radius:999px;background:transparent;color:#475569;display:inline-flex;align-items:center;justify-content:center;cursor:pointer}.composer__command-chip-clear[data-v-8358ece7]:disabled{opacity:.45;cursor:not-allowed}.composer__command-chip-clear[data-v-8358ece7]:not(:disabled):hover{background:rgba(15,23,42,.08)}.composer__textarea[data-v-8358ece7]{width:100%;min-height:36px;max-height:200px;resize:none;border:none;background:transparent;outline:none;font-size:.875rem;font-family:system-ui,-apple-system,sans-serif;color:#0f172a;line-height:1.6;padding:0}.composer__textarea[data-v-8358ece7]::-moz-placeholder{color:#94a3b8}.composer__textarea[data-v-8358ece7]::placeholder{color:#94a3b8}.composer__slash-menu[data-v-8358ece7]{position:absolute;left:0;right:0;bottom:calc(100% + .5rem);border:1px solid #e2e8f0;border-radius:10px;background:#f8fafc;padding:.35rem;display:flex;flex-direction:column;gap:.2rem;box-shadow:0 8px 20px #0f172a14;z-index:2}.composer__slash-item[data-v-8358ece7]{width:100%;border:none;background:transparent;border-radius:8px;padding:.4rem .45rem;text-align:left;display:flex;align-items:center;justify-content:space-between;gap:.75rem;cursor:pointer}.composer__slash-item[data-v-8358ece7]:hover,.composer__slash-item--active[data-v-8358ece7]{background:#e2e8f0}.composer__slash-command[data-v-8358ece7]{font-size:.78rem;font-weight:600;color:#0f172a}.composer__slash-description[data-v-8358ece7]{font-size:.73rem;color:#64748b}.composer__bar[data-v-8358ece7]{display:flex;align-items:center;justify-content:space-between}.composer__attach[data-v-8358ece7]{width:32px;height:32px;border-radius:999px;border:1px solid #e2e8f0;background:transparent;display:flex;align-items:center;justify-content:center;color:#64748b;cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease}.composer__attach[data-v-8358ece7]:disabled{opacity:.35;cursor:not-allowed}.composer__attach[data-v-8358ece7]:not(:disabled):hover{background:#f1f5f9;color:#0f172a;border-color:#cbd5e1}.composer__send[data-v-8358ece7]{width:32px;height:32px;border-radius:999px;border:none;background:#e2e8f0;color:#94a3b8;display:flex;align-items:center;justify-content:center;transition:background .2s ease,color .2s ease;cursor:not-allowed}.composer__send--active[data-v-8358ece7]{background:#0f172a;color:#fff;cursor:pointer}.composer__send--active[data-v-8358ece7]:hover{background:#1e293b}.composer__disclaimer[data-v-8358ece7]{margin-top:.5rem;text-align:center;font-size:.7rem;color:#94a3b8}.cl[data-v-10d5be6f]{flex:1;display:flex;flex-direction:column;overflow:hidden;background:#fafafa}.cl__header[data-v-10d5be6f]{padding:1.25rem 1.25rem 1rem;background:#fff;border-bottom:1px solid #e2e8f0;flex-shrink:0}.cl__title[data-v-10d5be6f]{font-size:1.1rem;font-weight:600;color:#0f172a;margin:0 0 .75rem}.cl__new-btn[data-v-10d5be6f]{width:100%;padding:.7rem 1rem;border-radius:10px;border:1px solid #e2e8f0;background:#fff;font-size:.875rem;font-weight:500;color:#0f172a;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:.5rem;transition:background .15s ease,border-color .15s ease}.cl__new-btn[data-v-10d5be6f]:hover{background:#f8fafc;border-color:#cbd5e1}.cl__loading[data-v-10d5be6f]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.75rem}.cl__spinner[data-v-10d5be6f]{width:32px;height:32px;border:3px solid #e2e8f0;border-top-color:#0f172a;border-radius:50%;animation:spin-10d5be6f .8s linear infinite}@keyframes spin-10d5be6f{to{transform:rotate(360deg)}}.cl__loading-text[data-v-10d5be6f]{font-size:.875rem;color:#64748b}.cl__empty[data-v-10d5be6f]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.75rem;padding:2rem 1.5rem;text-align:center}.cl__empty-icon[data-v-10d5be6f]{color:#cbd5e1;margin-bottom:.5rem}.cl__empty-title[data-v-10d5be6f]{font-size:.95rem;font-weight:600;color:#0f172a;margin:0}.cl__empty-text[data-v-10d5be6f]{font-size:.8rem;color:#64748b;line-height:1.5;margin:0 0 .5rem}.cl__empty-btn[data-v-10d5be6f]{margin-top:.5rem;padding:.7rem 1.25rem;border-radius:10px;border:none;background:#0f172a;font-size:.875rem;font-weight:500;color:#fff;cursor:pointer;transition:background .15s ease}.cl__empty-btn[data-v-10d5be6f]:hover{background:#1e293b}.cl__list[data-v-10d5be6f]{flex:1;overflow-y:auto;padding:.5rem .75rem}.cl__item[data-v-10d5be6f]{width:100%;display:flex;align-items:center;gap:.75rem;padding:.85rem;margin-bottom:.5rem;border-radius:10px;border:1px solid transparent;background:#fff;cursor:pointer;transition:background .15s ease,border-color .15s ease,box-shadow .15s ease;text-align:left}.cl__item[data-v-10d5be6f]:hover{background:#f8fafc;border-color:#e2e8f0;box-shadow:0 1px 3px #0f172a0a}.cl__item-icon[data-v-10d5be6f]{width:36px;height:36px;border-radius:8px;background:#f1f5f9;color:#64748b;display:flex;align-items:center;justify-content:center;flex-shrink:0}.cl__item-content[data-v-10d5be6f]{flex:1;min-width:0}.cl__item-title[data-v-10d5be6f]{font-size:.875rem;font-weight:500;color:#0f172a;margin:0 0 .15rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cl__item-time[data-v-10d5be6f]{font-size:.75rem;color:#94a3b8;margin:0}.cl__item-arrow[data-v-10d5be6f]{color:#cbd5e1;flex-shrink:0}.rp[data-v-623066d9]{position:fixed;top:0;right:0;width:400px;height:100%;display:flex;flex-direction:column;background:#fafafa;border-left:1px solid #e2e8f0;z-index:1000;font-family:system-ui,-apple-system,sans-serif;overflow:hidden;box-shadow:-8px 0 40px #0f172a14}.rp__header[data-v-623066d9]{display:flex;align-items:center;justify-content:space-between;padding:0 1.25rem;height:56px;background:#fff;border-bottom:1px solid #e2e8f0;flex-shrink:0}.rp__brand[data-v-623066d9]{display:flex;align-items:center;gap:.65rem}.rp__avatar[data-v-623066d9]{width:34px;height:34px;border-radius:10px;-o-object-fit:cover;object-fit:cover;flex-shrink:0}.rp__name[data-v-623066d9]{font-size:.875rem;font-weight:600;color:#0f172a;line-height:1.2}.rp__badge[data-v-623066d9]{font-size:.68rem;color:#94a3b8;line-height:1;margin-top:1px}.rp__controls[data-v-623066d9]{display:flex;align-items:center;gap:.35rem}.rp__btn[data-v-623066d9]{width:34px;height:34px;border-radius:10px;border:none;background:transparent;color:#94a3b8;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background .15s ease,color .15s ease}.rp__btn[data-v-623066d9]:hover{background:#f1f5f9;color:#0f172a}.rp__overlay[data-v-623066d9]{position:absolute;top:0;right:0;bottom:0;left:0;background:rgba(15,23,42,.35);display:flex;align-items:center;justify-content:center;padding:1.5rem;z-index:10}.rp__dialog[data-v-623066d9]{background:#fff;border-radius:16px;padding:1.5rem;width:100%;max-width:300px;box-shadow:0 16px 48px #0f172a24;display:flex;flex-direction:column;align-items:center;gap:.6rem;text-align:center}.rp__dialog-icon[data-v-623066d9]{width:44px;height:44px;border-radius:12px;background:#f1f5f9;color:#64748b;display:flex;align-items:center;justify-content:center;margin-bottom:.25rem}.rp__dialog-icon--danger[data-v-623066d9]{background:#fee2e2;color:#dc2626}.rp__dialog-title[data-v-623066d9]{font-size:.95rem;font-weight:600;color:#0f172a}.rp__dialog-body[data-v-623066d9]{font-size:.8rem;color:#64748b;line-height:1.6;margin-bottom:.5rem}.rp__dialog-actions[data-v-623066d9]{display:flex;gap:.6rem;width:100%}.rp__dialog-cancel[data-v-623066d9]{flex:1;padding:.6rem;border-radius:10px;border:1px solid #e2e8f0;background:#fff;font-size:.85rem;font-weight:500;color:#374151;cursor:pointer;transition:background .15s ease}.rp__dialog-cancel[data-v-623066d9]:hover{background:#f8fafc}.rp__dialog-confirm[data-v-623066d9]{flex:1;padding:.6rem;border-radius:10px;border:none;background:#0f172a;font-size:.85rem;font-weight:500;color:#fff;cursor:pointer;transition:background .15s ease}.rp__dialog-confirm[data-v-623066d9]:hover{background:#1e293b}.rp__dialog-confirm--danger[data-v-623066d9]{background:#dc2626}.rp__dialog-confirm--danger[data-v-623066d9]:hover{background:#b91c1c}.confirm-enter-active[data-v-623066d9],.confirm-leave-active[data-v-623066d9]{transition:opacity .18s ease}.confirm-enter-from[data-v-623066d9],.confirm-leave-to[data-v-623066d9]{opacity:0}.confirm-enter-active .rp__dialog[data-v-623066d9],.confirm-leave-active .rp__dialog[data-v-623066d9]{transition:transform .18s ease}.confirm-enter-from .rp__dialog[data-v-623066d9],.confirm-leave-to .rp__dialog[data-v-623066d9]{transform:scale(.95)}.home[data-v-94caad04]{max-width:980px;margin:0 auto;padding:1.5rem;display:flex;flex-direction:column;gap:1rem;background:#fafafa;font-family:system-ui,-apple-system,sans-serif}.home__hero[data-v-94caad04]{background:#fff;border:1px solid #e2e8f0;border-radius:18px;box-shadow:0 8px 24px #0f172a0d;padding:1.25rem 1.35rem}.home__brand[data-v-94caad04]{display:flex;align-items:center;gap:.65rem}.home__avatar[data-v-94caad04]{width:34px;height:34px;border-radius:10px;-o-object-fit:cover;object-fit:cover}.home__name[data-v-94caad04]{margin:0;font-size:.875rem;line-height:1.2;font-weight:600;color:#0f172a}.home__badge[data-v-94caad04]{margin:1px 0 0;font-size:.68rem;line-height:1;color:#94a3b8}.home__title[data-v-94caad04]{margin:.8rem 0 .35rem;font-size:1.35rem;line-height:1.25;color:#0f172a}.home__subtitle[data-v-94caad04]{margin:0;color:#64748b;font-size:.92rem;line-height:1.6}.home__hero-hint[data-v-94caad04]{margin-top:.75rem;border:1px solid #e2e8f0;background:#f8fafc;border-radius:10px;padding:.5rem .65rem;color:#64748b;font-size:.8rem}.home__hero-hint code[data-v-94caad04]{display:inline-block;margin:0 .1rem;border:1px solid #cbd5e1;border-radius:7px;padding:.05rem .35rem;background:#fff;color:#0f172a;font-size:.78rem}.home__card[data-v-94caad04]{background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:1rem 1.1rem}.home__section-title[data-v-94caad04]{margin:0;color:#0f172a;font-size:1rem;font-weight:600}.home__section-head p[data-v-94caad04]{margin:.25rem 0 0;color:#64748b;font-size:.85rem}.home__list[data-v-94caad04]{margin:.7rem 0 0;padding-left:1.2rem;display:grid;gap:.5rem}.home__list li[data-v-94caad04]{color:#334155;font-size:.88rem;line-height:1.55}.home__list strong[data-v-94caad04]{color:#0f172a;font-weight:600}.home__grid[data-v-94caad04]{margin-top:.75rem;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem}.home__example[data-v-94caad04]{text-align:left;border:1px solid #e2e8f0;background:#f8fafc;border-radius:12px;padding:.8rem;cursor:pointer;transition:border-color .15s ease,transform .15s ease,box-shadow .15s ease}.home__example[data-v-94caad04]:hover{border-color:#cbd5e1;transform:translateY(-1px);box-shadow:0 8px 20px #0f172a14}.home__example-icon[data-v-94caad04]{display:inline-block;background:#fff;border:1px solid #cbd5e1;color:#334155;border-radius:999px;padding:.2rem .5rem;font-size:.72rem;font-weight:600;margin-bottom:.45rem}.home__example h3[data-v-94caad04]{margin:0;color:#0f172a;font-size:.92rem;font-weight:600}.home__example p[data-v-94caad04]{margin:.35rem 0 0;color:#64748b;font-size:.8rem;line-height:1.45}.home__autofill[data-v-94caad04]{margin-top:.75rem;display:flex;align-items:center;justify-content:space-between;gap:.75rem;border:1px solid #bfdbfe;background:#eff6ff;border-radius:12px;padding:.65rem .85rem}.home__autofill-label[data-v-94caad04]{margin:0;color:#3b82f6;font-size:.8rem;font-weight:600}.home__autofill-item[data-v-94caad04]{font-weight:400;color:#60a5fa}.home__autofill-price[data-v-94caad04]{margin:0;color:#1d4ed8;font-size:1.1rem;font-weight:700;white-space:nowrap}.home__autofill-value[data-v-94caad04]{margin:0;color:#1d4ed8;font-size:.85rem;font-weight:600;max-width:60%;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.home__debug[data-v-94caad04]{margin-top:.75rem;border:1px solid #e2e8f0;background:#f8fafc;border-radius:12px;padding:.65rem .85rem}.home__debug-title[data-v-94caad04]{margin:0 0 .45rem;color:#334155;font-size:.8rem;font-weight:700}.home__debug-json[data-v-94caad04]{margin:0;max-height:180px;overflow:auto;color:#0f172a;font-size:.74rem;line-height:1.4}@media (max-width: 900px){.home__grid[data-v-94caad04]{grid-template-columns:1fr}}@media (max-width: 640px){.home[data-v-94caad04]{padding:.8rem}.home__hero[data-v-94caad04],.home__card[data-v-94caad04]{border-radius:14px;padding:.85rem .9rem}.home__title[data-v-94caad04]{font-size:1.15rem}}
|