@portablecore/chat 0.2.2 → 0.2.4
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/chat-interface-core.d.ts +8 -9
- package/dist/chat-interface-core.d.ts.map +1 -1
- package/dist/chat-interface-core.js +23 -14
- package/dist/chat-interface-core.js.map +1 -1
- package/dist/components/bouncing-dots.d.ts +18 -0
- package/dist/components/bouncing-dots.d.ts.map +1 -0
- package/dist/components/bouncing-dots.js +9 -0
- package/dist/components/bouncing-dots.js.map +1 -0
- package/dist/components/code-block.d.ts +2 -0
- package/dist/components/code-block.d.ts.map +1 -0
- package/dist/components/code-block.js +58 -0
- package/dist/components/code-block.js.map +1 -0
- package/dist/components/message-bubble.d.ts.map +1 -1
- package/dist/components/message-bubble.js +3 -2
- package/dist/components/message-bubble.js.map +1 -1
- package/dist/components/skill-indicator.d.ts +11 -0
- package/dist/components/skill-indicator.d.ts.map +1 -0
- package/dist/components/skill-indicator.js +41 -0
- package/dist/components/skill-indicator.js.map +1 -0
- package/dist/hooks/use-chat-session.d.ts.map +1 -1
- package/dist/hooks/use-chat-session.js +4 -1
- package/dist/hooks/use-chat-session.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/utils/markdown-config.d.ts +12 -0
- package/dist/utils/markdown-config.d.ts.map +1 -1
- package/dist/utils/markdown-config.js +29 -5
- package/dist/utils/markdown-config.js.map +1 -1
- package/package.json +2 -2
|
@@ -6,16 +6,15 @@ interface ChatInterfaceCoreProps {
|
|
|
6
6
|
/**
|
|
7
7
|
* ChatInterfaceCore — The unified chat experience.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* Three-state indicator logic (from legacy ChatInterface):
|
|
10
|
+
* 1. SkillIndicator — active skill pill during skill execution
|
|
11
|
+
* 2. ThinkingIndicator — stage labels when specific thinking events arrive
|
|
12
|
+
* 3. BouncingDots — default "typing" dots when awaiting any response
|
|
11
13
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* Supports two layout variants:
|
|
17
|
-
* - "full" (default): Expert-quality full-page chat
|
|
18
|
-
* - "compact": Drawer/embedded chat (Team, EA Lite)
|
|
14
|
+
* The backend gates which thinking stages are emitted via platform_settings
|
|
15
|
+
* (/admin/features → Thinking Display). By default, most are disabled,
|
|
16
|
+
* so BouncingDots is the typical user experience. ThinkingIndicator with
|
|
17
|
+
* text labels is the exception, not the rule.
|
|
19
18
|
*/
|
|
20
19
|
export declare function ChatInterfaceCore({ config, markdownComponents, }: ChatInterfaceCoreProps): import("react/jsx-runtime").JSX.Element;
|
|
21
20
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-interface-core.d.ts","sourceRoot":"","sources":["../src/chat-interface-core.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAa,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"chat-interface-core.d.ts","sourceRoot":"","sources":["../src/chat-interface-core.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAa,MAAM,YAAY,CAAA;AAUhE,UAAU,sBAAsB;IAC9B,MAAM,EAAE,mBAAmB,CAAA;IAE3B,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CACzC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,kBAAkB,GACnB,EAAE,sBAAsB,2CAqGxB"}
|
|
@@ -7,21 +7,22 @@ const use_chat_session_js_1 = require("./hooks/use-chat-session.js");
|
|
|
7
7
|
const use_attachments_js_1 = require("./hooks/use-attachments.js");
|
|
8
8
|
const message_list_js_1 = require("./components/message-list.js");
|
|
9
9
|
const input_area_js_1 = require("./components/input-area.js");
|
|
10
|
+
const bouncing_dots_js_1 = require("./components/bouncing-dots.js");
|
|
10
11
|
const thinking_indicator_js_1 = require("./components/thinking-indicator.js");
|
|
12
|
+
const skill_indicator_js_1 = require("./components/skill-indicator.js");
|
|
11
13
|
const empty_state_js_1 = require("./components/empty-state.js");
|
|
12
14
|
/**
|
|
13
15
|
* ChatInterfaceCore — The unified chat experience.
|
|
14
16
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
+
* Three-state indicator logic (from legacy ChatInterface):
|
|
18
|
+
* 1. SkillIndicator — active skill pill during skill execution
|
|
19
|
+
* 2. ThinkingIndicator — stage labels when specific thinking events arrive
|
|
20
|
+
* 3. BouncingDots — default "typing" dots when awaiting any response
|
|
17
21
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* Supports two layout variants:
|
|
23
|
-
* - "full" (default): Expert-quality full-page chat
|
|
24
|
-
* - "compact": Drawer/embedded chat (Team, EA Lite)
|
|
22
|
+
* The backend gates which thinking stages are emitted via platform_settings
|
|
23
|
+
* (/admin/features → Thinking Display). By default, most are disabled,
|
|
24
|
+
* so BouncingDots is the typical user experience. ThinkingIndicator with
|
|
25
|
+
* text labels is the exception, not the rule.
|
|
25
26
|
*/
|
|
26
27
|
function ChatInterfaceCore({ config, markdownComponents, }) {
|
|
27
28
|
const session = (0, use_chat_session_js_1.useChatSession)(config);
|
|
@@ -29,16 +30,24 @@ function ChatInterfaceCore({ config, markdownComponents, }) {
|
|
|
29
30
|
const slots = (config.slots || {});
|
|
30
31
|
const variant = config.variant || "full";
|
|
31
32
|
const isCompact = variant === "compact";
|
|
32
|
-
const showThinking = session.awaitingText && !session.activeSkill;
|
|
33
33
|
const handleSend = (content) => {
|
|
34
34
|
session.send(content);
|
|
35
35
|
attachmentState.clear();
|
|
36
36
|
};
|
|
37
|
-
const
|
|
37
|
+
const indicatorMaxWidth = isCompact ? "max-w-3xl" : "max-w-5xl";
|
|
38
38
|
const rootClasses = `flex h-full ${config.classNames?.root || ""}`;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
const renderIndicator = () => {
|
|
40
|
+
if (!session.awaitingText)
|
|
41
|
+
return null;
|
|
42
|
+
if (session.activeSkill) {
|
|
43
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: `${indicatorMaxWidth} mx-auto px-4`, children: (0, jsx_runtime_1.jsx)(skill_indicator_js_1.SkillIndicator, { skill: session.activeSkill }) }));
|
|
44
|
+
}
|
|
45
|
+
if (session.thinkingStages.length > 0) {
|
|
46
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: `${indicatorMaxWidth} mx-auto px-4`, children: (0, jsx_runtime_1.jsx)(thinking_indicator_js_1.ThinkingIndicator, { stages: session.thinkingStages, expertName: config.expert?.name, expertAvatarUrl: config.expert?.avatarUrl }) }));
|
|
47
|
+
}
|
|
48
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: `${indicatorMaxWidth} mx-auto px-4`, children: (0, jsx_runtime_1.jsx)(bouncing_dots_js_1.BouncingDots, { expertName: config.expert?.name, expertAvatarUrl: config.expert?.avatarUrl, expertEmoji: config.expert?.emoji }) }));
|
|
49
|
+
};
|
|
50
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: rootClasses, children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col flex-1 min-w-0", children: [(0, jsx_runtime_1.jsx)(message_list_js_1.MessageList, { messages: session.messages, streaming: session.streaming, config: config, markdownComponents: markdownComponents, emptyState: slots.emptyState || ((0, jsx_runtime_1.jsx)(empty_state_js_1.EmptyState, { expertName: config.expert?.name })), beforeMessageList: slots.beforeMessageList, afterMessageList: (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [renderIndicator(), slots.afterMessageList] }) }), (0, jsx_runtime_1.jsx)(input_area_js_1.InputArea, { onSend: handleSend, onAbort: session.abort, streaming: session.streaming, sending: session.sending, placeholder: config.expert
|
|
42
51
|
? `Message ${config.expert.name}...`
|
|
43
52
|
: "Send a message...", prefillText: config.prefillText, inputPrefix: slots.inputPrefix, inputSuffix: slots.inputSuffix, attachments: attachmentState.attachments, uploading: attachmentState.uploading, onAddFiles: attachmentState.addFiles, onRemoveAttachment: attachmentState.remove, hasDocumentResolver: !!config.resolvers?.documentResolver, variant: variant, classNames: config.classNames })] }), slots.sidePanel && ((0, jsx_runtime_1.jsx)("div", { className: "w-80 border-l border-border overflow-y-auto", children: slots.sidePanel }))] }));
|
|
44
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-interface-core.js","sourceRoot":"","sources":["../src/chat-interface-core.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;
|
|
1
|
+
{"version":3,"file":"chat-interface-core.js","sourceRoot":"","sources":["../src/chat-interface-core.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BouncingDots — The default awaiting-response indicator.
|
|
3
|
+
*
|
|
4
|
+
* Three small dots in a rounded pill with the expert's avatar badge.
|
|
5
|
+
* This is what users see while the expert is thinking, BEFORE any
|
|
6
|
+
* specific thinking stage events arrive from the stream. It's the
|
|
7
|
+
* iMessage-style "typing" indicator.
|
|
8
|
+
*
|
|
9
|
+
* Ported directly from legacy ChatInterface (lines 5976-6026).
|
|
10
|
+
*/
|
|
11
|
+
interface BouncingDotsProps {
|
|
12
|
+
expertName?: string;
|
|
13
|
+
expertAvatarUrl?: string;
|
|
14
|
+
expertEmoji?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function BouncingDots({ expertName, expertAvatarUrl, expertEmoji, }: BouncingDotsProps): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=bouncing-dots.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bouncing-dots.d.ts","sourceRoot":"","sources":["../../src/components/bouncing-dots.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,UAAU,iBAAiB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,wBAAgB,YAAY,CAAC,EAC3B,UAAU,EACV,eAAe,EACf,WAAW,GACZ,EAAE,iBAAiB,2CA2CnB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.BouncingDots = BouncingDots;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
function BouncingDots({ expertName, expertAvatarUrl, expertEmoji, }) {
|
|
7
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "flex justify-start", children: (0, jsx_runtime_1.jsxs)("div", { className: "relative", children: [(0, jsx_runtime_1.jsx)("div", { className: "absolute -top-2 -left-2 z-10", children: expertAvatarUrl ? ((0, jsx_runtime_1.jsx)("img", { src: expertAvatarUrl, alt: expertName || "", className: "w-6 h-6 rounded-full object-cover ring-2 ring-slate-100 dark:ring-slate-800 shadow-sm" })) : expertEmoji ? ((0, jsx_runtime_1.jsx)("div", { className: "w-6 h-6 rounded-full bg-slate-200 dark:bg-slate-700 ring-2 ring-slate-100 dark:ring-slate-800 shadow-sm flex items-center justify-center", children: (0, jsx_runtime_1.jsx)("span", { className: "text-sm leading-none", children: expertEmoji }) })) : ((0, jsx_runtime_1.jsx)("div", { className: "w-6 h-6 rounded-full bg-slate-300 dark:bg-slate-600 ring-2 ring-slate-100 dark:ring-slate-800 shadow-sm flex items-center justify-center text-slate-600 dark:text-slate-300 text-xs font-medium", children: (expertName || "E").charAt(0).toUpperCase() })) }), (0, jsx_runtime_1.jsx)("div", { className: "bg-white dark:bg-slate-800 border border-slate-200 dark:border-slate-700 px-5 py-4 rounded-2xl", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex gap-1 justify-center", children: [(0, jsx_runtime_1.jsx)("span", { className: "w-1.5 h-1.5 bg-slate-400 dark:bg-slate-500 rounded-full animate-bounce", style: { animationDelay: "0ms" } }), (0, jsx_runtime_1.jsx)("span", { className: "w-1.5 h-1.5 bg-slate-400 dark:bg-slate-500 rounded-full animate-bounce", style: { animationDelay: "150ms" } }), (0, jsx_runtime_1.jsx)("span", { className: "w-1.5 h-1.5 bg-slate-400 dark:bg-slate-500 rounded-full animate-bounce", style: { animationDelay: "300ms" } })] }) })] }) }));
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=bouncing-dots.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bouncing-dots.js","sourceRoot":"","sources":["../../src/components/bouncing-dots.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;AAmBZ,oCA+CC;;AA/CD,SAAgB,YAAY,CAAC,EAC3B,UAAU,EACV,eAAe,EACf,WAAW,GACO;IAClB,OAAO,CACL,gCAAK,SAAS,EAAC,oBAAoB,YACjC,iCAAK,SAAS,EAAC,UAAU,aAEvB,gCAAK,SAAS,EAAC,8BAA8B,YAC1C,eAAe,CAAC,CAAC,CAAC,CACjB,gCACE,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,UAAU,IAAI,EAAE,EACrB,SAAS,EAAC,uFAAuF,GACjG,CACH,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAChB,gCAAK,SAAS,EAAC,0IAA0I,YACvJ,iCAAM,SAAS,EAAC,sBAAsB,YAAE,WAAW,GAAQ,GACvD,CACP,CAAC,CAAC,CAAC,CACF,gCAAK,SAAS,EAAC,iMAAiM,YAC7M,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GACxC,CACP,GACG,EAGN,gCAAK,SAAS,EAAC,gGAAgG,YAC7G,iCAAK,SAAS,EAAC,2BAA2B,aACxC,iCACE,SAAS,EAAC,wEAAwE,EAClF,KAAK,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,GAChC,EACF,iCACE,SAAS,EAAC,wEAAwE,EAClF,KAAK,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,GAClC,EACF,iCACE,SAAS,EAAC,wEAAwE,EAClF,KAAK,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,GAClC,IACE,GACF,IACF,GACF,CACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-block.d.ts","sourceRoot":"","sources":["../../src/components/code-block.tsx"],"names":[],"mappings":"AAcA,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,2CA+FnC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.CodeBlock = CodeBlock;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
/**
|
|
7
|
+
* CodeBlock — Code block with language label and copy button.
|
|
8
|
+
*
|
|
9
|
+
* Styled to match FlowToken's streaming appearance. Used as the `pre`
|
|
10
|
+
* override in react-markdown's components prop.
|
|
11
|
+
*
|
|
12
|
+
* Ported from legacy ChatInterface (lines 386-484).
|
|
13
|
+
*/
|
|
14
|
+
const react_1 = require("react");
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
16
|
+
function CodeBlock(props) {
|
|
17
|
+
const [copied, setCopied] = (0, react_1.useState)(false);
|
|
18
|
+
const getTextContent = (node) => {
|
|
19
|
+
if (typeof node === "string")
|
|
20
|
+
return node;
|
|
21
|
+
if (typeof node === "number")
|
|
22
|
+
return String(node);
|
|
23
|
+
if (!node)
|
|
24
|
+
return "";
|
|
25
|
+
if (Array.isArray(node))
|
|
26
|
+
return node.map(getTextContent).join("");
|
|
27
|
+
if (typeof node === "object" && "props" in node) {
|
|
28
|
+
const element = node;
|
|
29
|
+
return getTextContent(element.props.children);
|
|
30
|
+
}
|
|
31
|
+
return "";
|
|
32
|
+
};
|
|
33
|
+
const getLanguage = () => {
|
|
34
|
+
const codeChild = props.children;
|
|
35
|
+
if (codeChild?.props?.className) {
|
|
36
|
+
const match = codeChild.props.className.match(/language-(\w+)/);
|
|
37
|
+
return match ? match[1] : null;
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
};
|
|
41
|
+
const codeText = getTextContent(props.children);
|
|
42
|
+
const language = getLanguage();
|
|
43
|
+
const handleCopy = async (e) => {
|
|
44
|
+
e.stopPropagation();
|
|
45
|
+
try {
|
|
46
|
+
await navigator.clipboard.writeText(codeText);
|
|
47
|
+
setCopied(true);
|
|
48
|
+
setTimeout(() => setCopied(false), 2000);
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
console.error("Copy failed:", err);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "ft-code-container relative my-2", children: [(0, jsx_runtime_1.jsxs)("div", { className: "ft-code-header flex justify-between items-center bg-zinc-100 dark:bg-zinc-800 px-3 py-1.5 rounded-t-xl border border-zinc-200 dark:border-zinc-700 border-b-0", children: [(0, jsx_runtime_1.jsx)("span", { className: "ft-code-language text-xs text-zinc-900 dark:text-zinc-100 font-medium", children: language || "code" }), (0, jsx_runtime_1.jsx)("button", { onClick: handleCopy, className: "ft-copy-button flex items-center gap-1 text-xs px-1.5 py-1 rounded-lg bg-transparent hover:bg-zinc-200 dark:hover:bg-zinc-700 transition-colors", title: copied ? "Copied!" : "Copy code", children: copied ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("svg", { className: "w-3 h-3 text-green-500", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M5 13l4 4L19 7" }) }), (0, jsx_runtime_1.jsx)("span", { className: "text-green-500", children: "Copied" })] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("svg", { className: "w-3 h-3 text-zinc-500 dark:text-zinc-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z" }) }), (0, jsx_runtime_1.jsx)("span", { className: "text-zinc-500 dark:text-zinc-400", children: "Copy" })] })) })] }), (0, jsx_runtime_1.jsx)("div", { className: "ft-code-content border border-zinc-200 dark:border-zinc-700 rounded-b-xl overflow-hidden bg-white dark:bg-stone-950", children: (0, jsx_runtime_1.jsx)("pre", { className: "!whitespace-pre-wrap !break-words overflow-x-auto !m-0 !bg-transparent p-3 text-sm font-mono text-zinc-800 dark:text-zinc-200", style: {
|
|
55
|
+
fontFamily: '"JetBrains Mono", "SF Mono", ui-monospace, Menlo, Monaco, "Cascadia Code", "Roboto Mono", Consolas, monospace',
|
|
56
|
+
}, children: props.children }) })] }));
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=code-block.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-block.js","sourceRoot":"","sources":["../../src/components/code-block.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-bubble.d.ts","sourceRoot":"","sources":["../../src/components/message-bubble.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,0BAA0B,CAAA;AACxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAKtD,UAAU,kBAAkB;IAC1B,OAAO,EAAE,WAAW,CAAA;IACpB,cAAc,EAAE,OAAO,CAAA;IACvB,aAAa,EAAE,OAAO,CAAA;IACtB,MAAM,EAAE,mBAAmB,CAAA;IAE3B,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CACzC;AA8CD;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"message-bubble.d.ts","sourceRoot":"","sources":["../../src/components/message-bubble.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,0BAA0B,CAAA;AACxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAKtD,UAAU,kBAAkB;IAC1B,OAAO,EAAE,WAAW,CAAA;IACpB,cAAc,EAAE,OAAO,CAAA;IACvB,aAAa,EAAE,OAAO,CAAA;IACtB,MAAM,EAAE,mBAAmB,CAAA;IAE3B,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CACzC;AA8CD;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,0DAuPxB,CAAA"}
|
|
@@ -115,6 +115,7 @@ exports.MessageBubble = (0, react_1.memo)(function MessageBubble({ message, isFi
|
|
|
115
115
|
const timestamp = (0, react_1.useMemo)(() => (message.createdAt ? (0, time_js_1.formatTime)(message.createdAt) : null), [message.createdAt]);
|
|
116
116
|
const bubbleTypeClasses = getBubbleTypeClasses(message.messageType, message.role, message.isInboxItem, message.approvalStatus);
|
|
117
117
|
const classNameOverride = config.classNames?.bubble || "";
|
|
118
|
+
const mergedComponents = (0, react_1.useMemo)(() => ({ ...markdown_config_js_1.defaultMarkdownComponents, ...markdownComponents }), [markdownComponents]);
|
|
118
119
|
// Prose classes per role
|
|
119
120
|
const proseClasses = isUser
|
|
120
121
|
? "prose prose-sm max-w-none text-white prose-headings:text-white prose-strong:text-white prose-em:text-white prose-code:text-blue-100 prose-pre:bg-blue-900/50 prose-pre:border-blue-700 prose-a:text-blue-200 prose-a:underline prose-p:my-2 prose-headings:my-2 prose-ul:my-2 prose-ol:my-2 prose-li:my-0.5 prose-li:text-white prose-pre:my-2"
|
|
@@ -124,11 +125,11 @@ exports.MessageBubble = (0, react_1.memo)(function MessageBubble({ message, isFi
|
|
|
124
125
|
// -------------------------------------------------------------------------
|
|
125
126
|
if (isCompact) {
|
|
126
127
|
return ((0, jsx_runtime_1.jsx)("div", { className: `flex ${isUser ? "justify-end" : "justify-start"} ${isFirstInGroup ? "mt-4" : "mt-0.5"}`, children: (0, jsx_runtime_1.jsxs)("div", { className: `flex gap-2.5 max-w-[85%] ${isUser ? "flex-row-reverse" : "flex-row"}`, children: [(0, jsx_runtime_1.jsx)("div", { className: "w-7 h-7 shrink-0", children: isFirstInGroup &&
|
|
127
|
-
(avatarUrl ? ((0, jsx_runtime_1.jsx)("img", { src: avatarUrl, alt: senderName || "", className: "w-7 h-7 rounded-full object-cover" })) : ((0, jsx_runtime_1.jsx)("div", { className: "w-7 h-7 rounded-full bg-muted flex items-center justify-center text-xs font-medium text-muted-foreground", children: (senderName || "?").charAt(0).toUpperCase() }))) }), (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col gap-0.5", children: [isFirstInGroup && senderName && ((0, jsx_runtime_1.jsx)("span", { className: `text-xs font-medium text-muted-foreground ${isUser ? "text-right" : "text-left"}`, children: senderName })), (0, jsx_runtime_1.jsx)("div", { className: `px-4 py-2.5 rounded-2xl ${bubbleTypeClasses} ${classNameOverride}`, children: (0, jsx_runtime_1.jsx)("div", { className: proseClasses, children: isStreaming ? ((0, jsx_runtime_1.jsx)(streaming_text_js_1.StreamingText, { content: message.content, isStreaming: true, markdownComponents:
|
|
128
|
+
(avatarUrl ? ((0, jsx_runtime_1.jsx)("img", { src: avatarUrl, alt: senderName || "", className: "w-7 h-7 rounded-full object-cover" })) : ((0, jsx_runtime_1.jsx)("div", { className: "w-7 h-7 rounded-full bg-muted flex items-center justify-center text-xs font-medium text-muted-foreground", children: (senderName || "?").charAt(0).toUpperCase() }))) }), (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col gap-0.5", children: [isFirstInGroup && senderName && ((0, jsx_runtime_1.jsx)("span", { className: `text-xs font-medium text-muted-foreground ${isUser ? "text-right" : "text-left"}`, children: senderName })), (0, jsx_runtime_1.jsx)("div", { className: `px-4 py-2.5 rounded-2xl ${bubbleTypeClasses} ${classNameOverride}`, children: (0, jsx_runtime_1.jsx)("div", { className: proseClasses, children: isStreaming ? ((0, jsx_runtime_1.jsx)(streaming_text_js_1.StreamingText, { content: message.content, isStreaming: true, markdownComponents: mergedComponents })) : ((0, jsx_runtime_1.jsx)(react_markdown_1.default, { remarkPlugins: markdown_config_js_1.remarkPlugins, rehypePlugins: markdown_config_js_1.rehypePlugins, components: mergedComponents, children: message.content })) }) }), isLastInGroup && timestamp && ((0, jsx_runtime_1.jsx)("span", { className: `text-[10px] text-muted-foreground mt-0.5 ${isUser ? "text-right" : "text-left"}`, children: timestamp }))] })] }) }));
|
|
128
129
|
}
|
|
129
130
|
// -------------------------------------------------------------------------
|
|
130
131
|
// Full variant: corner avatars, hover timestamps, Expert aesthetic
|
|
131
132
|
// -------------------------------------------------------------------------
|
|
132
|
-
return ((0, jsx_runtime_1.jsx)("div", { className: `flex ${isUser ? "justify-end" : "justify-start"} ${isFirstInGroup ? "mt-6" : "mt-0.5"}`, children: (0, jsx_runtime_1.jsxs)("div", { className: "group relative max-w-[85%] sm:max-w-[70%]", children: [isFirstInGroup && !isUser && ((0, jsx_runtime_1.jsx)("div", { className: "absolute -top-2 -left-2 z-10", children: avatarUrl ? ((0, jsx_runtime_1.jsx)("img", { src: avatarUrl, alt: senderName || "", className: "w-6 h-6 rounded-full object-cover ring-2 ring-slate-100 dark:ring-slate-800 shadow-sm" })) : ((0, jsx_runtime_1.jsx)("div", { className: "w-6 h-6 rounded-full bg-slate-300 dark:bg-slate-600 ring-2 ring-slate-100 dark:ring-slate-800 shadow-sm flex items-center justify-center text-slate-600 dark:text-slate-300 text-xs font-medium", children: (senderName || "?").charAt(0).toUpperCase() })) })), isFirstInGroup && isUser && ((0, jsx_runtime_1.jsx)("div", { className: "absolute -top-2 -right-2 z-10 opacity-0 group-hover:opacity-100 transition-opacity", children: avatarUrl ? ((0, jsx_runtime_1.jsx)("img", { src: avatarUrl, alt: senderName || "", className: "w-6 h-6 rounded-full object-cover ring-2 ring-blue-100 dark:ring-blue-900/50 shadow-sm" })) : ((0, jsx_runtime_1.jsx)("div", { className: "w-6 h-6 rounded-full bg-blue-500 ring-2 ring-blue-100 dark:ring-blue-900/50 shadow-sm flex items-center justify-center text-white text-xs font-medium", children: (senderName || "?").charAt(0).toUpperCase() })) })), (0, jsx_runtime_1.jsx)("div", { className: `relative rounded-2xl transform-gpu cursor-pointer sm:cursor-default select-none sm:select-text transition-shadow duration-500 px-3 sm:px-4 py-1 sm:py-1.5 ${bubbleTypeClasses} ${classNameOverride}`, children: (0, jsx_runtime_1.jsx)("div", { className: proseClasses, children: isStreaming ? ((0, jsx_runtime_1.jsx)(streaming_text_js_1.StreamingText, { content: message.content, isStreaming: true, markdownComponents:
|
|
133
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: `flex ${isUser ? "justify-end" : "justify-start"} ${isFirstInGroup ? "mt-6" : "mt-0.5"}`, children: (0, jsx_runtime_1.jsxs)("div", { className: "group relative max-w-[85%] sm:max-w-[70%]", children: [isFirstInGroup && !isUser && ((0, jsx_runtime_1.jsx)("div", { className: "absolute -top-2 -left-2 z-10", children: avatarUrl ? ((0, jsx_runtime_1.jsx)("img", { src: avatarUrl, alt: senderName || "", className: "w-6 h-6 rounded-full object-cover ring-2 ring-slate-100 dark:ring-slate-800 shadow-sm" })) : ((0, jsx_runtime_1.jsx)("div", { className: "w-6 h-6 rounded-full bg-slate-300 dark:bg-slate-600 ring-2 ring-slate-100 dark:ring-slate-800 shadow-sm flex items-center justify-center text-slate-600 dark:text-slate-300 text-xs font-medium", children: (senderName || "?").charAt(0).toUpperCase() })) })), isFirstInGroup && isUser && ((0, jsx_runtime_1.jsx)("div", { className: "absolute -top-2 -right-2 z-10 opacity-0 group-hover:opacity-100 transition-opacity", children: avatarUrl ? ((0, jsx_runtime_1.jsx)("img", { src: avatarUrl, alt: senderName || "", className: "w-6 h-6 rounded-full object-cover ring-2 ring-blue-100 dark:ring-blue-900/50 shadow-sm" })) : ((0, jsx_runtime_1.jsx)("div", { className: "w-6 h-6 rounded-full bg-blue-500 ring-2 ring-blue-100 dark:ring-blue-900/50 shadow-sm flex items-center justify-center text-white text-xs font-medium", children: (senderName || "?").charAt(0).toUpperCase() })) })), (0, jsx_runtime_1.jsx)("div", { className: `relative rounded-2xl transform-gpu cursor-pointer sm:cursor-default select-none sm:select-text transition-shadow duration-500 px-3 sm:px-4 py-1 sm:py-1.5 ${bubbleTypeClasses} ${classNameOverride}`, children: (0, jsx_runtime_1.jsx)("div", { className: proseClasses, children: isStreaming ? ((0, jsx_runtime_1.jsx)(streaming_text_js_1.StreamingText, { content: message.content, isStreaming: true, markdownComponents: mergedComponents })) : ((0, jsx_runtime_1.jsx)(react_markdown_1.default, { remarkPlugins: markdown_config_js_1.remarkPlugins, rehypePlugins: markdown_config_js_1.rehypePlugins, components: mergedComponents, children: message.content })) }) }), isLastInGroup && timestamp && ((0, jsx_runtime_1.jsx)("div", { className: `absolute -bottom-5 ${isUser ? "right-1" : "left-1"} flex items-center gap-1.5 text-[10px] text-slate-400 dark:text-slate-500 opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none whitespace-nowrap`, children: timestamp }))] }) }));
|
|
133
134
|
});
|
|
134
135
|
//# sourceMappingURL=message-bubble.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-bubble.js","sourceRoot":"","sources":["../../src/components/message-bubble.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;;;;;;AAEZ,iCAAqC;AACrC,oEAA0C;AAG1C,
|
|
1
|
+
{"version":3,"file":"message-bubble.js","sourceRoot":"","sources":["../../src/components/message-bubble.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface SkillIndicatorProps {
|
|
2
|
+
skill: {
|
|
3
|
+
slug: string;
|
|
4
|
+
name: string;
|
|
5
|
+
showSkillPill?: boolean;
|
|
6
|
+
skillPillText?: string | null;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export declare function SkillIndicator({ skill }: SkillIndicatorProps): import("react/jsx-runtime").JSX.Element | null;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=skill-indicator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-indicator.d.ts","sourceRoot":"","sources":["../../src/components/skill-indicator.tsx"],"names":[],"mappings":"AAcA,UAAU,mBAAmB;IAC3B,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,aAAa,CAAC,EAAE,OAAO,CAAA;QACvB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAC9B,CAAA;CACF;AAqBD,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,EAAE,mBAAmB,kDAuB5D"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.SkillIndicator = SkillIndicator;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
/**
|
|
7
|
+
* SkillIndicator — Real-time indicator during skill execution.
|
|
8
|
+
*
|
|
9
|
+
* Displays an animated pill showing which skill is currently being used.
|
|
10
|
+
* Skill pill text and visibility are configured per-skill in the database
|
|
11
|
+
* (/admin/skills) and passed through via useSkillIndicators.
|
|
12
|
+
*
|
|
13
|
+
* Ported directly from Expert's components/chat/skill-indicator.tsx.
|
|
14
|
+
*/
|
|
15
|
+
const lucide_react_1 = require("lucide-react");
|
|
16
|
+
const SKILL_CONFIG = {
|
|
17
|
+
"perplexity-search": { icon: lucide_react_1.Search, action: "Researching" },
|
|
18
|
+
"serpapi-search": { icon: lucide_react_1.Search, action: "Looking up" },
|
|
19
|
+
"web-search": { icon: lucide_react_1.Search, action: "Searching" },
|
|
20
|
+
"read-webpage": { icon: lucide_react_1.Search, action: "Reading" },
|
|
21
|
+
"google-calendar": { icon: lucide_react_1.Calendar, action: "Checking calendar" },
|
|
22
|
+
gmail: { icon: lucide_react_1.Mail, action: "Checking email" },
|
|
23
|
+
github: { icon: lucide_react_1.Github, action: "Searching GitHub" },
|
|
24
|
+
"generate-image": { icon: lucide_react_1.Palette, action: "Generating image" },
|
|
25
|
+
"sora-video": { icon: lucide_react_1.Video, action: "Generating video" },
|
|
26
|
+
};
|
|
27
|
+
const SILENT_SKILLS = new Set([
|
|
28
|
+
"banana-bot",
|
|
29
|
+
"add-reaction",
|
|
30
|
+
]);
|
|
31
|
+
const DEFAULT_CONFIG = { icon: lucide_react_1.Zap, action: "" };
|
|
32
|
+
function SkillIndicator({ skill }) {
|
|
33
|
+
if (SILENT_SKILLS.has(skill.slug) || skill.showSkillPill === false) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
const config = SKILL_CONFIG[skill.slug] || DEFAULT_CONFIG;
|
|
37
|
+
const Icon = config.icon;
|
|
38
|
+
const actionText = skill.skillPillText || config.action || skill.name;
|
|
39
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "flex items-center justify-start py-1 animate-fade-in", children: (0, jsx_runtime_1.jsxs)("div", { className: "inline-flex items-center gap-2 px-4 py-2 rounded-full bg-[var(--chat-bubble-user,#0047AB)]/10 dark:bg-blue-900/30 border border-[var(--chat-bubble-user,#0047AB)]/20 dark:border-blue-700/50", children: [(0, jsx_runtime_1.jsx)(Icon, { className: "w-4 h-4 text-[var(--chat-bubble-user,#0047AB)] dark:text-blue-400" }), (0, jsx_runtime_1.jsxs)("span", { className: "text-sm text-[var(--chat-bubble-user,#0047AB)] dark:text-blue-300 font-medium", children: [actionText, "..."] }), (0, jsx_runtime_1.jsxs)("span", { className: "relative flex h-2 w-2", children: [(0, jsx_runtime_1.jsx)("span", { className: "animate-ping absolute inline-flex h-full w-full rounded-full bg-[var(--chat-bubble-user,#0047AB)] dark:bg-blue-400 opacity-75" }), (0, jsx_runtime_1.jsx)("span", { className: "relative inline-flex rounded-full h-2 w-2 bg-[var(--chat-bubble-user,#0047AB)] dark:bg-blue-400" })] })] }) }));
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=skill-indicator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-indicator.js","sourceRoot":"","sources":["../../src/components/skill-indicator.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;AA0CZ,wCAuBC;;AA/DD;;;;;;;;GAQG;AAEH,+CAAmG;AAWnG,MAAM,YAAY,GAAyD;IACzE,mBAAmB,EAAE,EAAE,IAAI,EAAE,qBAAM,EAAE,MAAM,EAAE,aAAa,EAAE;IAC5D,gBAAgB,EAAE,EAAE,IAAI,EAAE,qBAAM,EAAE,MAAM,EAAE,YAAY,EAAE;IACxD,YAAY,EAAE,EAAE,IAAI,EAAE,qBAAM,EAAE,MAAM,EAAE,WAAW,EAAE;IACnD,cAAc,EAAE,EAAE,IAAI,EAAE,qBAAM,EAAE,MAAM,EAAE,SAAS,EAAE;IACnD,iBAAiB,EAAE,EAAE,IAAI,EAAE,uBAAQ,EAAE,MAAM,EAAE,mBAAmB,EAAE;IAClE,KAAK,EAAE,EAAE,IAAI,EAAE,mBAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE;IAC/C,MAAM,EAAE,EAAE,IAAI,EAAE,qBAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE;IACpD,gBAAgB,EAAE,EAAE,IAAI,EAAE,sBAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE;IAC/D,YAAY,EAAE,EAAE,IAAI,EAAE,oBAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE;CAC1D,CAAA;AAED,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,YAAY;IACZ,cAAc;CACf,CAAC,CAAA;AAEF,MAAM,cAAc,GAAG,EAAE,IAAI,EAAE,kBAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;AAEhD,SAAgB,cAAc,CAAC,EAAE,KAAK,EAAuB;IAC3D,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;QACnE,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,cAAc,CAAA;IACzD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;IACxB,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,IAAI,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAA;IAErE,OAAO,CACL,gCAAK,SAAS,EAAC,sDAAsD,YACnE,iCAAK,SAAS,EAAC,8LAA8L,aAC3M,uBAAC,IAAI,IAAC,SAAS,EAAC,mEAAmE,GAAG,EACtF,kCAAM,SAAS,EAAC,+EAA+E,aAC5F,UAAU,WACN,EACP,kCAAM,SAAS,EAAC,uBAAuB,aACrC,iCAAM,SAAS,EAAC,+HAA+H,GAAG,EAClJ,iCAAM,SAAS,EAAC,iGAAiG,GAAG,IAC/G,IACH,GACF,CACP,CAAA;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-chat-session.d.ts","sourceRoot":"","sources":["../../src/hooks/use-chat-session.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EACV,WAAW,EAEX,mBAAmB,EACpB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,4BAA4B,CAAA;AAMnC,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,SAAS,EAAE,OAAO,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,yEAAyE;IACzE,YAAY,EAAE,OAAO,CAAA;IACrB,cAAc,EAAE,kBAAkB,EAAE,CAAA;IACpC,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAA;IACpC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxC,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAMD,wBAAgB,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"use-chat-session.d.ts","sourceRoot":"","sources":["../../src/hooks/use-chat-session.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EACV,WAAW,EAEX,mBAAmB,EACpB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,4BAA4B,CAAA;AAMnC,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,SAAS,EAAE,OAAO,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,yEAAyE;IACzE,YAAY,EAAE,OAAO,CAAA;IACrB,cAAc,EAAE,kBAAkB,EAAE,CAAA;IACpC,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAA;IACpC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxC,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAMD,wBAAgB,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,WAAW,CA6SvE"}
|
|
@@ -37,7 +37,7 @@ function useChatSession(config) {
|
|
|
37
37
|
}, [initialMessages]);
|
|
38
38
|
// ---- Streaming primitives ----
|
|
39
39
|
const { streamingMessageId, updateStreamingMessage, flushPendingContent, } = (0, chat_runtime_1.useStreamingMessage)(setMessages);
|
|
40
|
-
const { thinkingStages, activeSkill, handleEvent: handleIndicatorEvent, reset: resetIndicators, } = (0, chat_runtime_1.useSkillIndicators)([]);
|
|
40
|
+
const { thinkingStages, activeSkill, handleEvent: handleIndicatorEvent, reset: resetIndicators, } = (0, chat_runtime_1.useSkillIndicators)(config.chatSkills || []);
|
|
41
41
|
// ---- Refs for stable callbacks ----
|
|
42
42
|
const abortRef = (0, react_1.useRef)(null);
|
|
43
43
|
const handlersRef = (0, react_1.useRef)(handlers);
|
|
@@ -110,7 +110,10 @@ function useChatSession(config) {
|
|
|
110
110
|
flushPendingContent();
|
|
111
111
|
const target = streamingMessageId.current || tempId;
|
|
112
112
|
setMessages((prev) => prev.filter((m) => m.id !== target));
|
|
113
|
+
// Reset so thinking dots reappear naturally between phases
|
|
114
|
+
// (e.g., FR → primary model transition). Legacy: line 3749.
|
|
113
115
|
bubbleCreated = false;
|
|
116
|
+
setAwaitingText(true);
|
|
114
117
|
break;
|
|
115
118
|
}
|
|
116
119
|
case "first_response": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-chat-session.js","sourceRoot":"","sources":["../../src/hooks/use-chat-session.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;AAqDZ,
|
|
1
|
+
{"version":3,"file":"use-chat-session.js","sourceRoot":"","sources":["../../src/hooks/use-chat-session.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -19,11 +19,14 @@ export { MessageList } from "./components/message-list.js";
|
|
|
19
19
|
export { MessageBubble } from "./components/message-bubble.js";
|
|
20
20
|
export { InputArea } from "./components/input-area.js";
|
|
21
21
|
export { StreamingText } from "./components/streaming-text.js";
|
|
22
|
+
export { BouncingDots } from "./components/bouncing-dots.js";
|
|
22
23
|
export { ThinkingIndicator } from "./components/thinking-indicator.js";
|
|
23
24
|
export type { ThinkingStage } from "./components/thinking-indicator.js";
|
|
25
|
+
export { SkillIndicator } from "./components/skill-indicator.js";
|
|
26
|
+
export { CodeBlock } from "./components/code-block.js";
|
|
24
27
|
export { EmptyState } from "./components/empty-state.js";
|
|
25
28
|
export { formatTime, getDateSeparator, isDifferentDay } from "./utils/time.js";
|
|
26
29
|
export { groupMessages } from "./utils/message-grouping.js";
|
|
27
|
-
export { remarkPlugins, rehypePlugins } from "./utils/markdown-config.js";
|
|
30
|
+
export { remarkPlugins, rehypePlugins, defaultMarkdownComponents } from "./utils/markdown-config.js";
|
|
28
31
|
export type { ChatInterfaceConfig, ChatFeatureFlags, ChatVariant, ChatClassNames, StreamBodyOpts, MentionSuggestion, SkillSuggestion, DocumentRef, LiteMessage, MessageType, SseEvent, ChatSlots, RenderableMessage, } from "./types.js";
|
|
29
32
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAG5D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,YAAY,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAG9D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAG1D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3D,YAAY,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAGjE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,YAAY,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAGxD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAG5D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,YAAY,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAG9D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAG1D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3D,YAAY,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAGjE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,YAAY,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAGxD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAA;AAGpG,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,WAAW,EACX,WAAW,EACX,QAAQ,EACR,SAAS,EACT,iBAAiB,GAClB,MAAM,YAAY,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* slots, resolvers, handlers).
|
|
12
12
|
*/
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.rehypePlugins = exports.remarkPlugins = exports.groupMessages = exports.isDifferentDay = exports.getDateSeparator = exports.formatTime = exports.EmptyState = exports.ThinkingIndicator = exports.StreamingText = exports.InputArea = exports.MessageBubble = exports.MessageList = exports.useAttachments = exports.useChatScroll = exports.useChatSession = exports.ChatInterfaceCore = void 0;
|
|
14
|
+
exports.defaultMarkdownComponents = exports.rehypePlugins = exports.remarkPlugins = exports.groupMessages = exports.isDifferentDay = exports.getDateSeparator = exports.formatTime = exports.EmptyState = exports.CodeBlock = exports.SkillIndicator = exports.ThinkingIndicator = exports.BouncingDots = exports.StreamingText = exports.InputArea = exports.MessageBubble = exports.MessageList = exports.useAttachments = exports.useChatScroll = exports.useChatSession = exports.ChatInterfaceCore = void 0;
|
|
15
15
|
// The main product
|
|
16
16
|
var chat_interface_core_js_1 = require("./chat-interface-core.js");
|
|
17
17
|
Object.defineProperty(exports, "ChatInterfaceCore", { enumerable: true, get: function () { return chat_interface_core_js_1.ChatInterfaceCore; } });
|
|
@@ -33,8 +33,14 @@ var input_area_js_1 = require("./components/input-area.js");
|
|
|
33
33
|
Object.defineProperty(exports, "InputArea", { enumerable: true, get: function () { return input_area_js_1.InputArea; } });
|
|
34
34
|
var streaming_text_js_1 = require("./components/streaming-text.js");
|
|
35
35
|
Object.defineProperty(exports, "StreamingText", { enumerable: true, get: function () { return streaming_text_js_1.StreamingText; } });
|
|
36
|
+
var bouncing_dots_js_1 = require("./components/bouncing-dots.js");
|
|
37
|
+
Object.defineProperty(exports, "BouncingDots", { enumerable: true, get: function () { return bouncing_dots_js_1.BouncingDots; } });
|
|
36
38
|
var thinking_indicator_js_1 = require("./components/thinking-indicator.js");
|
|
37
39
|
Object.defineProperty(exports, "ThinkingIndicator", { enumerable: true, get: function () { return thinking_indicator_js_1.ThinkingIndicator; } });
|
|
40
|
+
var skill_indicator_js_1 = require("./components/skill-indicator.js");
|
|
41
|
+
Object.defineProperty(exports, "SkillIndicator", { enumerable: true, get: function () { return skill_indicator_js_1.SkillIndicator; } });
|
|
42
|
+
var code_block_js_1 = require("./components/code-block.js");
|
|
43
|
+
Object.defineProperty(exports, "CodeBlock", { enumerable: true, get: function () { return code_block_js_1.CodeBlock; } });
|
|
38
44
|
var empty_state_js_1 = require("./components/empty-state.js");
|
|
39
45
|
Object.defineProperty(exports, "EmptyState", { enumerable: true, get: function () { return empty_state_js_1.EmptyState; } });
|
|
40
46
|
// Utilities
|
|
@@ -47,4 +53,5 @@ Object.defineProperty(exports, "groupMessages", { enumerable: true, get: functio
|
|
|
47
53
|
var markdown_config_js_1 = require("./utils/markdown-config.js");
|
|
48
54
|
Object.defineProperty(exports, "remarkPlugins", { enumerable: true, get: function () { return markdown_config_js_1.remarkPlugins; } });
|
|
49
55
|
Object.defineProperty(exports, "rehypePlugins", { enumerable: true, get: function () { return markdown_config_js_1.rehypePlugins; } });
|
|
56
|
+
Object.defineProperty(exports, "defaultMarkdownComponents", { enumerable: true, get: function () { return markdown_config_js_1.defaultMarkdownComponents; } });
|
|
50
57
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AAEH,mBAAmB;AACnB,mEAA4D;AAAnD,2HAAA,iBAAiB,OAAA;AAE1B,qEAAqE;AACrE,mEAA4D;AAAnD,qHAAA,cAAc,OAAA;AAGvB,oBAAoB;AACpB,iEAA0D;AAAjD,mHAAA,aAAa,OAAA;AAEtB,cAAc;AACd,iEAA2D;AAAlD,oHAAA,cAAc,OAAA;AAGvB,sEAAsE;AACtE,gEAA0D;AAAjD,8GAAA,WAAW,OAAA;AACpB,oEAA8D;AAArD,kHAAA,aAAa,OAAA;AACtB,4DAAsD;AAA7C,0GAAA,SAAS,OAAA;AAClB,oEAA8D;AAArD,kHAAA,aAAa,OAAA;AACtB,4EAAsE;AAA7D,0HAAA,iBAAiB,OAAA;AAE1B,8DAAwD;AAA/C,4GAAA,UAAU,OAAA;AAEnB,YAAY;AACZ,2CAA8E;AAArE,qGAAA,UAAU,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAAE,yGAAA,cAAc,OAAA;AACrD,mEAA2D;AAAlD,oHAAA,aAAa,OAAA;AACtB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AAEH,mBAAmB;AACnB,mEAA4D;AAAnD,2HAAA,iBAAiB,OAAA;AAE1B,qEAAqE;AACrE,mEAA4D;AAAnD,qHAAA,cAAc,OAAA;AAGvB,oBAAoB;AACpB,iEAA0D;AAAjD,mHAAA,aAAa,OAAA;AAEtB,cAAc;AACd,iEAA2D;AAAlD,oHAAA,cAAc,OAAA;AAGvB,sEAAsE;AACtE,gEAA0D;AAAjD,8GAAA,WAAW,OAAA;AACpB,oEAA8D;AAArD,kHAAA,aAAa,OAAA;AACtB,4DAAsD;AAA7C,0GAAA,SAAS,OAAA;AAClB,oEAA8D;AAArD,kHAAA,aAAa,OAAA;AACtB,kEAA4D;AAAnD,gHAAA,YAAY,OAAA;AACrB,4EAAsE;AAA7D,0HAAA,iBAAiB,OAAA;AAE1B,sEAAgE;AAAvD,oHAAA,cAAc,OAAA;AACvB,4DAAsD;AAA7C,0GAAA,SAAS,OAAA;AAClB,8DAAwD;AAA/C,4GAAA,UAAU,OAAA;AAEnB,YAAY;AACZ,2CAA8E;AAArE,qGAAA,UAAU,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAAE,yGAAA,cAAc,OAAA;AACrD,mEAA2D;AAAlD,oHAAA,aAAa,OAAA;AACtB,iEAAoG;AAA3F,mHAAA,aAAa,OAAA;AAAE,mHAAA,aAAa,OAAA;AAAE,+HAAA,yBAAyB,OAAA"}
|
|
@@ -6,4 +6,16 @@
|
|
|
6
6
|
*/
|
|
7
7
|
export declare const remarkPlugins: any[];
|
|
8
8
|
export declare const rehypePlugins: any[];
|
|
9
|
+
/**
|
|
10
|
+
* Default markdown component overrides for chat messages.
|
|
11
|
+
*
|
|
12
|
+
* Includes:
|
|
13
|
+
* - CodeBlock with copy button and language labels (pre)
|
|
14
|
+
* - Scrollable table wrapper with styled headers/cells
|
|
15
|
+
* - XML tag suppression for AI tool-calling artifacts
|
|
16
|
+
*
|
|
17
|
+
* Consumers can extend these via the markdownComponents prop
|
|
18
|
+
* on ChatInterfaceCore. Consumer overrides take precedence.
|
|
19
|
+
*/
|
|
20
|
+
export declare const defaultMarkdownComponents: Record<string, any>;
|
|
9
21
|
//# sourceMappingURL=markdown-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-config.d.ts","sourceRoot":"","sources":["../../src/utils/markdown-config.
|
|
1
|
+
{"version":3,"file":"markdown-config.d.ts","sourceRoot":"","sources":["../../src/utils/markdown-config.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,eAAO,MAAM,aAAa,EAAE,GAAG,EAA8B,CAAA;AAG7D,eAAO,MAAM,aAAa,EAAE,GAAG,EAAiC,CAAA;AAEhE;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CA0BzD,CAAA"}
|
|
@@ -1,21 +1,45 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.defaultMarkdownComponents = exports.rehypePlugins = exports.remarkPlugins = void 0;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
2
8
|
/**
|
|
3
9
|
* Shared markdown plugin configuration for chat messages.
|
|
4
10
|
*
|
|
5
11
|
* Both StreamingText (post-stream render) and MessageBubble
|
|
6
12
|
* use the same plugin set for consistent rendering.
|
|
7
13
|
*/
|
|
8
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.rehypePlugins = exports.remarkPlugins = void 0;
|
|
13
14
|
const remark_gfm_1 = __importDefault(require("remark-gfm"));
|
|
14
15
|
const remark_breaks_1 = __importDefault(require("remark-breaks"));
|
|
15
16
|
const rehype_raw_1 = __importDefault(require("rehype-raw"));
|
|
16
17
|
const rehype_highlight_1 = __importDefault(require("rehype-highlight"));
|
|
18
|
+
const code_block_js_1 = require("../components/code-block.js");
|
|
17
19
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
18
20
|
exports.remarkPlugins = [remark_gfm_1.default, remark_breaks_1.default];
|
|
19
21
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
20
22
|
exports.rehypePlugins = [rehype_raw_1.default, rehype_highlight_1.default];
|
|
23
|
+
/**
|
|
24
|
+
* Default markdown component overrides for chat messages.
|
|
25
|
+
*
|
|
26
|
+
* Includes:
|
|
27
|
+
* - CodeBlock with copy button and language labels (pre)
|
|
28
|
+
* - Scrollable table wrapper with styled headers/cells
|
|
29
|
+
* - XML tag suppression for AI tool-calling artifacts
|
|
30
|
+
*
|
|
31
|
+
* Consumers can extend these via the markdownComponents prop
|
|
32
|
+
* on ChatInterfaceCore. Consumer overrides take precedence.
|
|
33
|
+
*/
|
|
34
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
35
|
+
exports.defaultMarkdownComponents = {
|
|
36
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
37
|
+
pre: (props) => (0, jsx_runtime_1.jsx)(code_block_js_1.CodeBlock, { ...props }),
|
|
38
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
39
|
+
table: (props) => ((0, jsx_runtime_1.jsx)("div", { className: "overflow-x-auto -mx-2 px-2 my-3", children: (0, jsx_runtime_1.jsx)("table", { className: "min-w-full border-collapse text-sm", ...props }) })),
|
|
40
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
41
|
+
th: ({ vAlign: _v, align: _a, ...rest }) => ((0, jsx_runtime_1.jsx)("th", { className: "border border-slate-200 dark:border-slate-600 bg-slate-100 dark:bg-slate-700 px-3 py-2 text-left font-semibold text-slate-900 dark:text-slate-100 whitespace-nowrap", ...rest })),
|
|
42
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
43
|
+
td: ({ vAlign: _v, align: _a, ...rest }) => ((0, jsx_runtime_1.jsx)("td", { className: "border border-slate-200 dark:border-slate-600 px-3 py-2 text-slate-700 dark:text-slate-300", ...rest })),
|
|
44
|
+
};
|
|
21
45
|
//# sourceMappingURL=markdown-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-config.js","sourceRoot":"","sources":["../../src/utils/markdown-config.
|
|
1
|
+
{"version":3,"file":"markdown-config.js","sourceRoot":"","sources":["../../src/utils/markdown-config.tsx"],"names":[],"mappings":";;;;;;;AAAA;;;;;GAKG;AAEH,4DAAkC;AAClC,kEAAwC;AACxC,4DAAkC;AAClC,wEAA8C;AAC9C,+DAAuD;AAEvD,8DAA8D;AACjD,QAAA,aAAa,GAAU,CAAC,oBAAS,EAAE,uBAAY,CAAC,CAAA;AAE7D,8DAA8D;AACjD,QAAA,aAAa,GAAU,CAAC,oBAAS,EAAE,0BAAe,CAAC,CAAA;AAEhE;;;;;;;;;;GAUG;AACH,8DAA8D;AACjD,QAAA,yBAAyB,GAAwB;IAC5D,8DAA8D;IAC9D,GAAG,EAAE,CAAC,KAAU,EAAE,EAAE,CAAC,uBAAC,yBAAS,OAAK,KAAK,GAAI;IAE7C,8DAA8D;IAC9D,KAAK,EAAE,CAAC,KAAU,EAAE,EAAE,CAAC,CACrB,gCAAK,SAAS,EAAC,iCAAiC,YAC9C,kCAAO,SAAS,EAAC,oCAAoC,KAAK,KAAK,GAAI,GAC/D,CACP;IAED,8DAA8D;IAC9D,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,IAAI,EAAO,EAAE,EAAE,CAAC,CAC/C,+BACE,SAAS,EAAC,qKAAqK,KAC3K,IAAI,GACR,CACH;IAED,8DAA8D;IAC9D,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,IAAI,EAAO,EAAE,EAAE,CAAC,CAC/C,+BACE,SAAS,EAAC,4FAA4F,KAClG,IAAI,GACR,CACH;CACF,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@portablecore/chat",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"description": "Unified chat UI for Portable platforms — composable ChatInterface with extension points",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"rehype-raw": "^7.0.0",
|
|
29
29
|
"rehype-highlight": "^7.0.2",
|
|
30
30
|
"@portablecore/chat-runtime": "0.1.0",
|
|
31
|
-
"@portablecore/types": "0.11.
|
|
31
|
+
"@portablecore/types": "0.11.2"
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
34
34
|
"react": ">=18.0.0",
|