@portablecore/chat 0.2.12 → 0.2.13
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.map +1 -1
- package/dist/chat-interface-core.js +18 -2
- package/dist/chat-interface-core.js.map +1 -1
- package/dist/components/thread-filter-header.d.ts +17 -0
- package/dist/components/thread-filter-header.d.ts.map +1 -0
- package/dist/components/thread-filter-header.js +19 -0
- package/dist/components/thread-filter-header.js.map +1 -0
- package/dist/hooks/use-thread-filter.d.ts +24 -0
- package/dist/hooks/use-thread-filter.d.ts.map +1 -0
- package/dist/hooks/use-thread-filter.js +81 -0
- package/dist/hooks/use-thread-filter.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -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;AAehE,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,2CAmMxB"}
|
|
@@ -8,12 +8,14 @@ const use_chat_session_js_1 = require("./hooks/use-chat-session.js");
|
|
|
8
8
|
const use_chat_scroll_js_1 = require("./hooks/use-chat-scroll.js");
|
|
9
9
|
const use_attachments_js_1 = require("./hooks/use-attachments.js");
|
|
10
10
|
const use_whisper_mode_js_1 = require("./hooks/use-whisper-mode.js");
|
|
11
|
+
const use_thread_filter_js_1 = require("./hooks/use-thread-filter.js");
|
|
11
12
|
const message_list_js_1 = require("./components/message-list.js");
|
|
12
13
|
const input_area_js_1 = require("./components/input-area.js");
|
|
13
14
|
const bouncing_dots_js_1 = require("./components/bouncing-dots.js");
|
|
14
15
|
const thinking_indicator_js_1 = require("./components/thinking-indicator.js");
|
|
15
16
|
const skill_indicator_js_1 = require("./components/skill-indicator.js");
|
|
16
17
|
const empty_state_js_1 = require("./components/empty-state.js");
|
|
18
|
+
const thread_filter_header_js_1 = require("./components/thread-filter-header.js");
|
|
17
19
|
/**
|
|
18
20
|
* ChatInterfaceCore — The unified chat experience.
|
|
19
21
|
*
|
|
@@ -29,12 +31,26 @@ const empty_state_js_1 = require("./components/empty-state.js");
|
|
|
29
31
|
*/
|
|
30
32
|
function ChatInterfaceCore({ config, markdownComponents, }) {
|
|
31
33
|
const session = (0, use_chat_session_js_1.useChatSession)(config);
|
|
32
|
-
const
|
|
34
|
+
const threadConfig = config.thread;
|
|
35
|
+
const selectedThreadId = threadConfig?.selectedId ?? null;
|
|
36
|
+
const onThreadMessageCountChange = (0, react_1.useCallback)((threadId, count) => {
|
|
37
|
+
threadConfig?.onMessageCountChange?.(threadId, count);
|
|
38
|
+
},
|
|
39
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
40
|
+
[threadConfig?.onMessageCountChange]);
|
|
41
|
+
const threadFilter = (0, use_thread_filter_js_1.useThreadFilter)({
|
|
42
|
+
messages: session.messages,
|
|
43
|
+
selectedThreadId,
|
|
44
|
+
onMessageCountChange: onThreadMessageCountChange,
|
|
45
|
+
});
|
|
46
|
+
const displayMessages = threadFilter.filteredMessages;
|
|
47
|
+
const scroll = (0, use_chat_scroll_js_1.useChatScroll)({ messages: displayMessages, streaming: session.streaming });
|
|
33
48
|
const attachmentState = (0, use_attachments_js_1.useAttachments)(config.resolvers?.documentResolver);
|
|
34
49
|
const slots = (config.slots || {});
|
|
35
50
|
const variant = config.variant || "full";
|
|
36
51
|
const isCompact = variant === "compact";
|
|
37
52
|
const whisperEnabled = config.features?.whispers === true;
|
|
53
|
+
const threadsEnabled = config.features?.threads === true;
|
|
38
54
|
// Build whisper recipients from config experts + users
|
|
39
55
|
const whisperRecipients = (0, react_1.useMemo)(() => {
|
|
40
56
|
if (!whisperEnabled)
|
|
@@ -111,7 +127,7 @@ function ChatInterfaceCore({ config, markdownComponents, }) {
|
|
|
111
127
|
}
|
|
112
128
|
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 }) }));
|
|
113
129
|
};
|
|
114
|
-
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:
|
|
130
|
+
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: [threadsEnabled && threadFilter.isFiltered && threadConfig?.selectedTitle && threadConfig.onClear && ((0, jsx_runtime_1.jsx)(thread_filter_header_js_1.ThreadFilterHeader, { threadTitle: threadConfig.selectedTitle, messageCount: displayMessages.length, onClear: threadConfig.onClear })), (0, jsx_runtime_1.jsx)(message_list_js_1.MessageList, { messages: displayMessages, streaming: session.streaming, config: config, markdownComponents: markdownComponents, scrollRef: scroll.scrollRef, 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
|
|
115
131
|
? `Message ${config.expert.name}...`
|
|
116
132
|
: "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, mentionResolver: config.resolvers?.mentionResolver, skillResolver: config.resolvers?.skillResolver, whisper: whisperInputProps })] }), slots.sidePanel && ((0, jsx_runtime_1.jsx)("div", { className: "w-80 border-l border-border overflow-y-auto", children: slots.sidePanel }))] }));
|
|
117
133
|
}
|
|
@@ -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,17 @@
|
|
|
1
|
+
interface ThreadFilterHeaderProps {
|
|
2
|
+
threadTitle: string;
|
|
3
|
+
messageCount: number;
|
|
4
|
+
onClear: () => void;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Header shown when viewing a filtered thread.
|
|
8
|
+
* Displays the thread name, message count, and provides an exit button.
|
|
9
|
+
*
|
|
10
|
+
* Faithfully reproduces the legacy Expert ThreadFilterHeader layout:
|
|
11
|
+
* - ThreadsIcon (4-line staggered list) + title + count on the left
|
|
12
|
+
* - "Exit thread" button with X icon on the right
|
|
13
|
+
* - Surface-2 background with bottom border
|
|
14
|
+
*/
|
|
15
|
+
export declare function ThreadFilterHeader({ threadTitle, messageCount, onClear, }: ThreadFilterHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=thread-filter-header.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-filter-header.d.ts","sourceRoot":"","sources":["../../src/components/thread-filter-header.tsx"],"names":[],"mappings":"AAIA,UAAU,uBAAuB;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,WAAW,EACX,YAAY,EACZ,OAAO,GACR,EAAE,uBAAuB,2CAoCzB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.ThreadFilterHeader = ThreadFilterHeader;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const lucide_react_1 = require("lucide-react");
|
|
7
|
+
/**
|
|
8
|
+
* Header shown when viewing a filtered thread.
|
|
9
|
+
* Displays the thread name, message count, and provides an exit button.
|
|
10
|
+
*
|
|
11
|
+
* Faithfully reproduces the legacy Expert ThreadFilterHeader layout:
|
|
12
|
+
* - ThreadsIcon (4-line staggered list) + title + count on the left
|
|
13
|
+
* - "Exit thread" button with X icon on the right
|
|
14
|
+
* - Surface-2 background with bottom border
|
|
15
|
+
*/
|
|
16
|
+
function ThreadFilterHeader({ threadTitle, messageCount, onClear, }) {
|
|
17
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between px-4 py-2 bg-[var(--surface-2,#f1f5f9)] dark:bg-[var(--surface-2,#1e293b)] border-b border-[var(--border-default,#e2e8f0)] dark:border-[var(--border-default,#334155)]", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2 min-w-0", children: [(0, jsx_runtime_1.jsx)("svg", { className: "w-4 h-4 text-slate-500 dark:text-slate-400 flex-shrink-0", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 6h16M4 10h16M4 14h10M4 18h6" }) }), (0, jsx_runtime_1.jsxs)("div", { className: "min-w-0", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-sm font-medium text-slate-900 dark:text-slate-100 truncate block", children: threadTitle }), (0, jsx_runtime_1.jsxs)("span", { className: "text-xs text-slate-500 dark:text-slate-400", children: [messageCount, " ", messageCount === 1 ? "message" : "messages", " in thread"] })] })] }), (0, jsx_runtime_1.jsxs)("button", { onClick: onClear, className: "flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium text-slate-500 dark:text-slate-400 hover:text-slate-700 dark:hover:text-slate-200 hover:bg-slate-200/50 dark:hover:bg-slate-700/50 rounded-lg transition-colors", title: "Show all messages", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.X, { className: "w-3 h-3" }), (0, jsx_runtime_1.jsx)("span", { children: "Exit thread" })] })] }));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=thread-filter-header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-filter-header.js","sourceRoot":"","sources":["../../src/components/thread-filter-header.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;AAmBZ,gDAwCC;;AAzDD,+CAAgC;AAQhC;;;;;;;;GAQG;AACH,SAAgB,kBAAkB,CAAC,EACjC,WAAW,EACX,YAAY,EACZ,OAAO,GACiB;IACxB,OAAO,CACL,iCAAK,SAAS,EAAC,0MAA0M,aACvN,iCAAK,SAAS,EAAC,iCAAiC,aAC9C,gCACE,SAAS,EAAC,0DAA0D,EACpE,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,OAAO,EAAC,WAAW,YAEnB,iCACE,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,WAAW,EAAE,CAAC,EACd,CAAC,EAAC,gCAAgC,GAClC,GACE,EACN,iCAAK,SAAS,EAAC,SAAS,aACtB,iCAAM,SAAS,EAAC,uEAAuE,YACpF,WAAW,GACP,EACP,kCAAM,SAAS,EAAC,4CAA4C,aACzD,YAAY,OAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,kBACtD,IACH,IACF,EACN,oCACE,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,2NAA2N,EACrO,KAAK,EAAC,mBAAmB,aAEzB,uBAAC,gBAAC,IAAC,SAAS,EAAC,SAAS,GAAG,EACzB,2DAAwB,IACjB,IACL,CACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { LiteMessage } from "../types.js";
|
|
2
|
+
interface UseThreadFilterOpts {
|
|
3
|
+
messages: LiteMessage[];
|
|
4
|
+
selectedThreadId: string | null;
|
|
5
|
+
onMessageCountChange?: (threadId: string, count: number) => void;
|
|
6
|
+
}
|
|
7
|
+
interface UseThreadFilterReturn {
|
|
8
|
+
filteredMessages: LiteMessage[];
|
|
9
|
+
isFiltered: boolean;
|
|
10
|
+
/** True during the frame after a thread switch (for scroll transition) */
|
|
11
|
+
transitionPending: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Filters messages by thread ID with smart fallback logic.
|
|
15
|
+
*
|
|
16
|
+
* Inclusion rules (ported from legacy ChatInterface):
|
|
17
|
+
* 1. Direct match: message.threadId === selectedThreadId
|
|
18
|
+
* 2. User message without threadId: include if next assistant message is in thread
|
|
19
|
+
* 3. Assistant message without threadId: include if preceding user message is in thread
|
|
20
|
+
* (handles older messages saved before thread_id was set at INSERT time)
|
|
21
|
+
*/
|
|
22
|
+
export declare function useThreadFilter({ messages, selectedThreadId, onMessageCountChange, }: UseThreadFilterOpts): UseThreadFilterReturn;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=use-thread-filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-thread-filter.d.ts","sourceRoot":"","sources":["../../src/hooks/use-thread-filter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACjE;AAED,UAAU,qBAAqB;IAC7B,gBAAgB,EAAE,WAAW,EAAE,CAAA;IAC/B,UAAU,EAAE,OAAO,CAAA;IACnB,0EAA0E;IAC1E,iBAAiB,EAAE,OAAO,CAAA;CAC3B;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,gBAAgB,EAChB,oBAAoB,GACrB,EAAE,mBAAmB,GAAG,qBAAqB,CAsE7C"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.useThreadFilter = useThreadFilter;
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
/**
|
|
7
|
+
* Filters messages by thread ID with smart fallback logic.
|
|
8
|
+
*
|
|
9
|
+
* Inclusion rules (ported from legacy ChatInterface):
|
|
10
|
+
* 1. Direct match: message.threadId === selectedThreadId
|
|
11
|
+
* 2. User message without threadId: include if next assistant message is in thread
|
|
12
|
+
* 3. Assistant message without threadId: include if preceding user message is in thread
|
|
13
|
+
* (handles older messages saved before thread_id was set at INSERT time)
|
|
14
|
+
*/
|
|
15
|
+
function useThreadFilter({ messages, selectedThreadId, onMessageCountChange, }) {
|
|
16
|
+
const prevThreadIdRef = (0, react_1.useRef)(undefined);
|
|
17
|
+
const transitionPendingRef = (0, react_1.useRef)(false);
|
|
18
|
+
const filteredMessages = (0, react_1.useMemo)(() => {
|
|
19
|
+
if (!selectedThreadId)
|
|
20
|
+
return messages;
|
|
21
|
+
return messages.filter((msg, idx) => {
|
|
22
|
+
if (msg.threadId === selectedThreadId)
|
|
23
|
+
return true;
|
|
24
|
+
if (msg.role === "user" && !msg.threadId) {
|
|
25
|
+
for (let i = idx + 1; i < messages.length; i++) {
|
|
26
|
+
const futureMsg = messages[i];
|
|
27
|
+
if (!futureMsg)
|
|
28
|
+
continue;
|
|
29
|
+
if (futureMsg.role === "assistant") {
|
|
30
|
+
return futureMsg.threadId === selectedThreadId;
|
|
31
|
+
}
|
|
32
|
+
if (futureMsg.threadId && futureMsg.threadId !== selectedThreadId) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (msg.role === "assistant" && !msg.threadId) {
|
|
38
|
+
for (let i = idx - 1; i >= 0; i--) {
|
|
39
|
+
const prevMsg = messages[i];
|
|
40
|
+
if (!prevMsg)
|
|
41
|
+
continue;
|
|
42
|
+
if (prevMsg.role === "user") {
|
|
43
|
+
return prevMsg.threadId === selectedThreadId;
|
|
44
|
+
}
|
|
45
|
+
if (prevMsg.role === "assistant")
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return false;
|
|
50
|
+
});
|
|
51
|
+
}, [messages, selectedThreadId]);
|
|
52
|
+
(0, react_1.useEffect)(() => {
|
|
53
|
+
if (selectedThreadId && onMessageCountChange) {
|
|
54
|
+
onMessageCountChange(selectedThreadId, filteredMessages.length);
|
|
55
|
+
}
|
|
56
|
+
}, [selectedThreadId, filteredMessages.length, onMessageCountChange]);
|
|
57
|
+
const handleTransition = (0, react_1.useCallback)(() => {
|
|
58
|
+
if (prevThreadIdRef.current === undefined) {
|
|
59
|
+
prevThreadIdRef.current = selectedThreadId;
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (prevThreadIdRef.current === selectedThreadId)
|
|
63
|
+
return;
|
|
64
|
+
prevThreadIdRef.current = selectedThreadId;
|
|
65
|
+
transitionPendingRef.current = true;
|
|
66
|
+
requestAnimationFrame(() => {
|
|
67
|
+
setTimeout(() => {
|
|
68
|
+
transitionPendingRef.current = false;
|
|
69
|
+
}, 150);
|
|
70
|
+
});
|
|
71
|
+
}, [selectedThreadId]);
|
|
72
|
+
(0, react_1.useEffect)(() => {
|
|
73
|
+
handleTransition();
|
|
74
|
+
}, [handleTransition]);
|
|
75
|
+
return {
|
|
76
|
+
filteredMessages,
|
|
77
|
+
isFiltered: selectedThreadId !== null,
|
|
78
|
+
transitionPending: transitionPendingRef.current,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=use-thread-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-thread-filter.js","sourceRoot":"","sources":["../../src/hooks/use-thread-filter.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -36,6 +36,8 @@ export type { WhisperModeState, UseWhisperModeReturn } from "./hooks/use-whisper
|
|
|
36
36
|
export { ProviderSelector } from "./components/provider-selector.js";
|
|
37
37
|
export { useProviderSelection } from "./hooks/use-provider-selection.js";
|
|
38
38
|
export type { ProviderSelectionState } from "./hooks/use-provider-selection.js";
|
|
39
|
+
export { ThreadFilterHeader } from "./components/thread-filter-header.js";
|
|
40
|
+
export { useThreadFilter } from "./hooks/use-thread-filter.js";
|
|
39
41
|
export { formatTime, getDateSeparator, isDifferentDay } from "./utils/time.js";
|
|
40
42
|
export { groupMessages } from "./utils/message-grouping.js";
|
|
41
43
|
export { remarkPlugins, rehypePlugins, defaultMarkdownComponents } from "./utils/markdown-config.js";
|
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,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAG3E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAG1D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AAGtE,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,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAChE,YAAY,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAA;AACjF,YAAY,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAA;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,YAAY,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAGzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAA;AACxE,YAAY,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAA;AAG/E,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,cAAc,EACd,WAAW,EACX,WAAW,EACX,QAAQ,EACR,SAAS,EACT,iBAAiB,GAClB,MAAM,YAAY,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,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAG3E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAG1D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AAGtE,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,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAChE,YAAY,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAA;AACjF,YAAY,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAA;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,YAAY,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAGzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAA;AACxE,YAAY,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAA;AAG/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAA;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAG9D,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,cAAc,EACd,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.defaultMarkdownComponents = exports.rehypePlugins = exports.remarkPlugins = exports.groupMessages = exports.isDifferentDay = exports.getDateSeparator = exports.formatTime = exports.useProviderSelection = exports.ProviderSelector = exports.useWhisperMode = exports.WhisperRecipientPicker = exports.EmptyState = exports.MessageActions = exports.CodeBlock = exports.SkillIndicator = exports.ThinkingIndicator = exports.BouncingDots = exports.StreamingText = exports.InputArea = exports.MessageBubble = exports.MessageList = exports.useAttachments = exports.AutocompletePopup = exports.useAutocomplete = exports.useChatScroll = exports.useChatSession = exports.ChatInterfaceCore = void 0;
|
|
14
|
+
exports.defaultMarkdownComponents = exports.rehypePlugins = exports.remarkPlugins = exports.groupMessages = exports.isDifferentDay = exports.getDateSeparator = exports.formatTime = exports.useThreadFilter = exports.ThreadFilterHeader = exports.useProviderSelection = exports.ProviderSelector = exports.useWhisperMode = exports.WhisperRecipientPicker = exports.EmptyState = exports.MessageActions = exports.CodeBlock = exports.SkillIndicator = exports.ThinkingIndicator = exports.BouncingDots = exports.StreamingText = exports.InputArea = exports.MessageBubble = exports.MessageList = exports.useAttachments = exports.AutocompletePopup = exports.useAutocomplete = 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; } });
|
|
@@ -59,6 +59,11 @@ var provider_selector_js_1 = require("./components/provider-selector.js");
|
|
|
59
59
|
Object.defineProperty(exports, "ProviderSelector", { enumerable: true, get: function () { return provider_selector_js_1.ProviderSelector; } });
|
|
60
60
|
var use_provider_selection_js_1 = require("./hooks/use-provider-selection.js");
|
|
61
61
|
Object.defineProperty(exports, "useProviderSelection", { enumerable: true, get: function () { return use_provider_selection_js_1.useProviderSelection; } });
|
|
62
|
+
// Thread filtering
|
|
63
|
+
var thread_filter_header_js_1 = require("./components/thread-filter-header.js");
|
|
64
|
+
Object.defineProperty(exports, "ThreadFilterHeader", { enumerable: true, get: function () { return thread_filter_header_js_1.ThreadFilterHeader; } });
|
|
65
|
+
var use_thread_filter_js_1 = require("./hooks/use-thread-filter.js");
|
|
66
|
+
Object.defineProperty(exports, "useThreadFilter", { enumerable: true, get: function () { return use_thread_filter_js_1.useThreadFilter; } });
|
|
62
67
|
// Utilities
|
|
63
68
|
var time_js_1 = require("./utils/time.js");
|
|
64
69
|
Object.defineProperty(exports, "formatTime", { enumerable: true, get: function () { return time_js_1.formatTime; } });
|
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,eAAe;AACf,mEAA6D;AAApD,sHAAA,eAAe,OAAA;AACxB,4EAAsE;AAA7D,0HAAA,iBAAiB,OAAA;AAE1B,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,sEAAgE;AAAvD,oHAAA,cAAc,OAAA;AAEvB,8DAAwD;AAA/C,4GAAA,UAAU,OAAA;AACnB,wFAAiF;AAAxE,qIAAA,sBAAsB,OAAA;AAE/B,mEAA4D;AAAnD,qHAAA,cAAc,OAAA;AAGvB,qBAAqB;AACrB,0EAAoE;AAA3D,wHAAA,gBAAgB,OAAA;AACzB,+EAAwE;AAA/D,iIAAA,oBAAoB,OAAA;AAG7B,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"}
|
|
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,eAAe;AACf,mEAA6D;AAApD,sHAAA,eAAe,OAAA;AACxB,4EAAsE;AAA7D,0HAAA,iBAAiB,OAAA;AAE1B,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,sEAAgE;AAAvD,oHAAA,cAAc,OAAA;AAEvB,8DAAwD;AAA/C,4GAAA,UAAU,OAAA;AACnB,wFAAiF;AAAxE,qIAAA,sBAAsB,OAAA;AAE/B,mEAA4D;AAAnD,qHAAA,cAAc,OAAA;AAGvB,qBAAqB;AACrB,0EAAoE;AAA3D,wHAAA,gBAAgB,OAAA;AACzB,+EAAwE;AAA/D,iIAAA,oBAAoB,OAAA;AAG7B,mBAAmB;AACnB,gFAAyE;AAAhE,6HAAA,kBAAkB,OAAA;AAC3B,qEAA8D;AAArD,uHAAA,eAAe,OAAA;AAExB,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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@portablecore/chat",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.13",
|
|
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",
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
"remark-breaks": "^4.0.0",
|
|
28
28
|
"rehype-raw": "^7.0.0",
|
|
29
29
|
"rehype-highlight": "^7.0.2",
|
|
30
|
-
"@portablecore/
|
|
31
|
-
"@portablecore/
|
|
30
|
+
"@portablecore/types": "0.11.4",
|
|
31
|
+
"@portablecore/chat-runtime": "0.1.0"
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
34
34
|
"react": ">=18.0.0",
|