@portablecore/chat 0.2.16 → 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/chat-interface-core.d.ts +5 -0
- package/dist/chat-interface-core.d.ts.map +1 -1
- package/dist/chat-interface-core.js +83 -15
- package/dist/chat-interface-core.js.map +1 -1
- package/dist/components/density-control.d.ts +14 -0
- package/dist/components/density-control.d.ts.map +1 -0
- package/dist/components/density-control.js +18 -0
- package/dist/components/density-control.js.map +1 -0
- package/dist/components/focus-mode-control.d.ts +3 -10
- package/dist/components/focus-mode-control.d.ts.map +1 -1
- package/dist/components/focus-mode-control.js +5 -10
- package/dist/components/focus-mode-control.js.map +1 -1
- package/dist/components/message-bubble.d.ts.map +1 -1
- package/dist/components/message-bubble.js +2 -2
- package/dist/components/message-bubble.js.map +1 -1
- package/dist/components/message-list.d.ts +7 -1
- package/dist/components/message-list.d.ts.map +1 -1
- package/dist/components/message-list.js +25 -16
- package/dist/components/message-list.js.map +1 -1
- package/dist/hooks/use-chat-scroll.d.ts +6 -0
- package/dist/hooks/use-chat-scroll.d.ts.map +1 -1
- package/dist/hooks/use-chat-scroll.js +48 -14
- package/dist/hooks/use-chat-scroll.js.map +1 -1
- package/dist/hooks/use-content-density.d.ts +35 -0
- package/dist/hooks/use-content-density.d.ts.map +1 -0
- package/dist/hooks/use-content-density.js +96 -0
- package/dist/hooks/use-content-density.js.map +1 -0
- package/dist/hooks/use-focus-mode.d.ts +4 -26
- package/dist/hooks/use-focus-mode.d.ts.map +1 -1
- package/dist/hooks/use-focus-mode.js +5 -75
- package/dist/hooks/use-focus-mode.js.map +1 -1
- package/dist/hooks/use-virtual-messages.d.ts +14 -1
- package/dist/hooks/use-virtual-messages.d.ts.map +1 -1
- package/dist/hooks/use-virtual-messages.js +111 -27
- package/dist/hooks/use-virtual-messages.js.map +1 -1
- package/dist/index.d.ts +8 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -6
- package/dist/index.js.map +1 -1
- package/package.json +11 -11
|
@@ -15,6 +15,11 @@ interface ChatInterfaceCoreProps {
|
|
|
15
15
|
* (/admin/features → Thinking Display). By default, most are disabled,
|
|
16
16
|
* so BouncingDots is the typical user experience. ThinkingIndicator with
|
|
17
17
|
* text labels is the exception, not the rule.
|
|
18
|
+
*
|
|
19
|
+
* Virtualizer is gated behind config.features.jsVirtualization.
|
|
20
|
+
* When disabled (default), PlainList renders with content-visibility: auto.
|
|
21
|
+
* When enabled, the battle-tested tanstack/react-virtual integration
|
|
22
|
+
* activates with settlement polling, scroll guards, and spacer system.
|
|
18
23
|
*/
|
|
19
24
|
export declare function ChatInterfaceCore({ config, markdownComponents, }: ChatInterfaceCoreProps): import("react/jsx-runtime").JSX.Element;
|
|
20
25
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-interface-core.d.ts","sourceRoot":"","sources":["../src/chat-interface-core.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAa,MAAM,YAAY,CAAA;AAmBhE,UAAU,sBAAsB;IAC9B,MAAM,EAAE,mBAAmB,CAAA;IAE3B,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CACzC;AAED
|
|
1
|
+
{"version":3,"file":"chat-interface-core.d.ts","sourceRoot":"","sources":["../src/chat-interface-core.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAa,MAAM,YAAY,CAAA;AAmBhE,UAAU,sBAAsB;IAC9B,MAAM,EAAE,mBAAmB,CAAA;IAE3B,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CACzC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,kBAAkB,GACnB,EAAE,sBAAsB,2CAsVxB"}
|
|
@@ -9,7 +9,7 @@ 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
11
|
const use_thread_filter_js_1 = require("./hooks/use-thread-filter.js");
|
|
12
|
-
const
|
|
12
|
+
const use_content_density_js_1 = require("./hooks/use-content-density.js");
|
|
13
13
|
const use_virtual_messages_js_1 = require("./hooks/use-virtual-messages.js");
|
|
14
14
|
const message_grouping_js_1 = require("./utils/message-grouping.js");
|
|
15
15
|
const message_list_js_1 = require("./components/message-list.js");
|
|
@@ -19,7 +19,7 @@ const thinking_indicator_js_1 = require("./components/thinking-indicator.js");
|
|
|
19
19
|
const skill_indicator_js_1 = require("./components/skill-indicator.js");
|
|
20
20
|
const empty_state_js_1 = require("./components/empty-state.js");
|
|
21
21
|
const thread_filter_header_js_1 = require("./components/thread-filter-header.js");
|
|
22
|
-
const
|
|
22
|
+
const density_control_js_1 = require("./components/density-control.js");
|
|
23
23
|
/**
|
|
24
24
|
* ChatInterfaceCore — The unified chat experience.
|
|
25
25
|
*
|
|
@@ -32,11 +32,17 @@ const focus_mode_control_js_1 = require("./components/focus-mode-control.js");
|
|
|
32
32
|
* (/admin/features → Thinking Display). By default, most are disabled,
|
|
33
33
|
* so BouncingDots is the typical user experience. ThinkingIndicator with
|
|
34
34
|
* text labels is the exception, not the rule.
|
|
35
|
+
*
|
|
36
|
+
* Virtualizer is gated behind config.features.jsVirtualization.
|
|
37
|
+
* When disabled (default), PlainList renders with content-visibility: auto.
|
|
38
|
+
* When enabled, the battle-tested tanstack/react-virtual integration
|
|
39
|
+
* activates with settlement polling, scroll guards, and spacer system.
|
|
35
40
|
*/
|
|
36
41
|
function ChatInterfaceCore({ config, markdownComponents, }) {
|
|
37
42
|
const session = (0, use_chat_session_js_1.useChatSession)(config);
|
|
38
43
|
const threadConfig = config.thread;
|
|
39
44
|
const selectedThreadId = threadConfig?.selectedId ?? null;
|
|
45
|
+
const jsVirtualizationEnabled = config.features?.jsVirtualization === true;
|
|
40
46
|
const onThreadMessageCountChange = (0, react_1.useCallback)((threadId, count) => {
|
|
41
47
|
threadConfig?.onMessageCountChange?.(threadId, count);
|
|
42
48
|
},
|
|
@@ -47,44 +53,103 @@ function ChatInterfaceCore({ config, markdownComponents, }) {
|
|
|
47
53
|
selectedThreadId,
|
|
48
54
|
onMessageCountChange: onThreadMessageCountChange,
|
|
49
55
|
});
|
|
50
|
-
|
|
51
|
-
|
|
56
|
+
// Content Density is always-on. Supports both old focusMode and new contentDensity config.
|
|
57
|
+
// When neither is provided, auto-determines the default view mode.
|
|
58
|
+
const densityConfig = config.contentDensity ?? (config.focusMode?.enabled ? {
|
|
59
|
+
initialViewMode: config.focusMode.initialViewMode,
|
|
60
|
+
onViewModeChange: config.focusMode.onViewModeChange,
|
|
61
|
+
} : undefined);
|
|
62
|
+
const density = (0, use_content_density_js_1.useContentDensity)({
|
|
52
63
|
messages: threadFilter.filteredMessages,
|
|
53
|
-
|
|
54
|
-
initialViewMode: focusModeConfig?.initialViewMode,
|
|
64
|
+
initialViewMode: densityConfig?.initialViewMode ?? (0, use_content_density_js_1.getDefaultViewMode)(threadFilter.filteredMessages.length, config.experts && config.experts.length > 1 ? "group" : undefined),
|
|
55
65
|
currentUserId: config.currentUser.id,
|
|
56
|
-
onViewModeChange:
|
|
66
|
+
onViewModeChange: densityConfig?.onViewModeChange,
|
|
67
|
+
recentMessageCount: densityConfig?.recentMessageCount,
|
|
57
68
|
});
|
|
69
|
+
const densityEnabled = true;
|
|
58
70
|
const displayMessages = threadFilter.filteredMessages;
|
|
59
|
-
// Compute renderableMessages here so it's shared between virtualization and rendering
|
|
60
71
|
const renderableMessages = (0, react_1.useMemo)(() => (0, message_grouping_js_1.groupMessages)(displayMessages), [displayMessages]);
|
|
61
|
-
// measureVersion triggers virtualizer re-measurement on
|
|
72
|
+
// measureVersion triggers virtualizer re-measurement on density mode or thread changes
|
|
62
73
|
const measureVersion = (0, react_1.useMemo)(() => {
|
|
63
|
-
const parts = [
|
|
74
|
+
const parts = [density.viewMode, selectedThreadId ?? "all"];
|
|
64
75
|
return parts.join("|");
|
|
65
|
-
}, [
|
|
76
|
+
}, [density.viewMode, selectedThreadId]);
|
|
66
77
|
// Ref bridge: virtualizer is created after scroll hook, but scroll hook reads it via ref
|
|
67
78
|
const virtualizerRef = (0, react_1.useRef)(null);
|
|
68
79
|
const scroll = (0, use_chat_scroll_js_1.useChatScroll)({
|
|
69
80
|
messages: displayMessages,
|
|
70
81
|
streaming: session.streaming,
|
|
71
82
|
selectedThreadId,
|
|
72
|
-
virtualizerRef,
|
|
83
|
+
virtualizerRef: jsVirtualizationEnabled ? virtualizerRef : undefined,
|
|
73
84
|
});
|
|
74
85
|
const virt = (0, use_virtual_messages_js_1.useVirtualMessages)({
|
|
75
86
|
renderableMessages,
|
|
76
87
|
scrollRef: scroll.scrollRef,
|
|
77
88
|
measureVersion: measureVersion.length,
|
|
89
|
+
enabled: jsVirtualizationEnabled,
|
|
90
|
+
getMessageIsExpanded: densityEnabled
|
|
91
|
+
? (messageId) => !density.shouldShowShort(messageId)
|
|
92
|
+
: undefined,
|
|
78
93
|
});
|
|
79
|
-
// Keep the ref in sync
|
|
94
|
+
// Keep the ref in sync
|
|
80
95
|
virtualizerRef.current = virt.active ? virt.virtualizer : null;
|
|
96
|
+
// --- Spacer system (virtualizer only) ---
|
|
97
|
+
// Expands when user sends a message to make room for the response,
|
|
98
|
+
// then locks to exact height when streaming ends to prevent scroll jump.
|
|
99
|
+
const [spacerExpanded, setSpacerExpanded] = (0, react_1.useState)(false);
|
|
100
|
+
const [spacerHeight, setSpacerHeight] = (0, react_1.useState)(0);
|
|
101
|
+
const wasStreamingRef = (0, react_1.useRef)(false);
|
|
102
|
+
const lockedScrollPosition = (0, react_1.useRef)(null);
|
|
103
|
+
// Expand spacer on send
|
|
104
|
+
const handleSendWithSpacer = (0, react_1.useCallback)((content) => {
|
|
105
|
+
if (virt.active) {
|
|
106
|
+
setSpacerExpanded(true);
|
|
107
|
+
}
|
|
108
|
+
return content;
|
|
109
|
+
}, [virt.active]);
|
|
110
|
+
// Lock spacer when streaming ends
|
|
111
|
+
(0, react_1.useEffect)(() => {
|
|
112
|
+
if (session.streaming) {
|
|
113
|
+
wasStreamingRef.current = true;
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
if (wasStreamingRef.current && spacerExpanded) {
|
|
117
|
+
wasStreamingRef.current = false;
|
|
118
|
+
const container = scroll.scrollRef.current;
|
|
119
|
+
if (container) {
|
|
120
|
+
const spaceBelow = container.getBoundingClientRect().bottom -
|
|
121
|
+
container.scrollHeight +
|
|
122
|
+
container.scrollTop +
|
|
123
|
+
container.clientHeight;
|
|
124
|
+
const newHeight = Math.max(0, spaceBelow);
|
|
125
|
+
setSpacerHeight(newHeight);
|
|
126
|
+
setSpacerExpanded(false);
|
|
127
|
+
lockedScrollPosition.current = container.scrollTop;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}, [session.streaming, spacerExpanded, scroll.scrollRef]);
|
|
131
|
+
// Collapse spacer when user scrolls up past lock point
|
|
132
|
+
(0, react_1.useEffect)(() => {
|
|
133
|
+
const container = scroll.scrollRef.current;
|
|
134
|
+
if (!container)
|
|
135
|
+
return;
|
|
136
|
+
const handleScroll = () => {
|
|
137
|
+
if (lockedScrollPosition.current === null || spacerHeight <= 16)
|
|
138
|
+
return;
|
|
139
|
+
if (container.scrollTop < lockedScrollPosition.current - 50) {
|
|
140
|
+
setSpacerHeight(16);
|
|
141
|
+
lockedScrollPosition.current = null;
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
container.addEventListener("scroll", handleScroll, { passive: true });
|
|
145
|
+
return () => container.removeEventListener("scroll", handleScroll);
|
|
146
|
+
}, [spacerHeight, scroll.scrollRef]);
|
|
81
147
|
const attachmentState = (0, use_attachments_js_1.useAttachments)(config.resolvers?.documentResolver);
|
|
82
148
|
const slots = (config.slots || {});
|
|
83
149
|
const variant = config.variant || "full";
|
|
84
150
|
const isCompact = variant === "compact";
|
|
85
151
|
const whisperEnabled = config.features?.whispers === true;
|
|
86
152
|
const threadsEnabled = config.features?.threads === true;
|
|
87
|
-
// Build whisper recipients from config experts + users
|
|
88
153
|
const whisperRecipients = (0, react_1.useMemo)(() => {
|
|
89
154
|
if (!whisperEnabled)
|
|
90
155
|
return [];
|
|
@@ -123,6 +188,7 @@ function ChatInterfaceCore({ config, markdownComponents, }) {
|
|
|
123
188
|
}, [whisperEnabled, config.experts, config.expert, config.users]);
|
|
124
189
|
const whisper = (0, use_whisper_mode_js_1.useWhisperMode)(whisperRecipients);
|
|
125
190
|
const handleSend = (content) => {
|
|
191
|
+
handleSendWithSpacer(content);
|
|
126
192
|
if (whisper.isActive) {
|
|
127
193
|
session.send(content, {
|
|
128
194
|
messageType: "whisper",
|
|
@@ -149,6 +215,8 @@ function ChatInterfaceCore({ config, markdownComponents, }) {
|
|
|
149
215
|
: undefined;
|
|
150
216
|
const indicatorMaxWidth = isCompact ? "max-w-3xl" : "max-w-5xl";
|
|
151
217
|
const rootClasses = `flex h-full ${config.classNames?.root || ""}`;
|
|
218
|
+
// Settlement overlay: hides chat during virtualizer layout stabilization
|
|
219
|
+
const showSettlementOverlay = virt.active && !virt.isSettled && !virt.isResetting;
|
|
152
220
|
const renderIndicator = () => {
|
|
153
221
|
if (!session.awaitingText)
|
|
154
222
|
return null;
|
|
@@ -160,7 +228,7 @@ function ChatInterfaceCore({ config, markdownComponents, }) {
|
|
|
160
228
|
}
|
|
161
229
|
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 }) }));
|
|
162
230
|
};
|
|
163
|
-
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.jsxs)("div", { className: "relative flex-1 flex flex-col min-h-0", children: [(0, jsx_runtime_1.jsx)(message_list_js_1.MessageList, { messages: displayMessages, renderableMessages: renderableMessages, streaming: session.streaming, config: config, markdownComponents: markdownComponents, scrollRef: scroll.scrollRef, virt: virt, 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] }), shouldShowShort:
|
|
231
|
+
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.jsxs)("div", { className: "relative flex-1 flex flex-col min-h-0", children: [showSettlementOverlay && displayMessages.length > 0 && ((0, jsx_runtime_1.jsx)("div", { className: "absolute inset-0 z-10 bg-[var(--chat-bg,#ffffff)] dark:bg-[var(--chat-bg,#0f172a)] transition-opacity duration-200 ease-out", children: (0, jsx_runtime_1.jsx)("div", { className: "flex items-center justify-center h-full", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex gap-1.5", children: [(0, jsx_runtime_1.jsx)("div", { className: "w-2 h-2 rounded-full bg-slate-300 dark:bg-slate-600 animate-bounce", style: { animationDelay: "0ms" } }), (0, jsx_runtime_1.jsx)("div", { className: "w-2 h-2 rounded-full bg-slate-300 dark:bg-slate-600 animate-bounce", style: { animationDelay: "150ms" } }), (0, jsx_runtime_1.jsx)("div", { className: "w-2 h-2 rounded-full bg-slate-300 dark:bg-slate-600 animate-bounce", style: { animationDelay: "300ms" } })] }) }) })), (0, jsx_runtime_1.jsx)(message_list_js_1.MessageList, { messages: displayMessages, renderableMessages: renderableMessages, streaming: session.streaming, config: config, markdownComponents: markdownComponents, scrollRef: scroll.scrollRef, virt: virt, 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] }), shouldShowShort: densityEnabled ? density.shouldShowShort : undefined, focusModeEnabled: densityEnabled, onToggleExpanded: densityEnabled ? density.toggleExpanded : undefined, spacerHeight: spacerHeight, spacerExpanded: spacerExpanded }), densityEnabled && displayMessages.length > 0 && ((0, jsx_runtime_1.jsx)(density_control_js_1.DensityControl, { viewMode: density.viewMode, onSetViewMode: density.setViewMode, placement: isCompact ? "inline" : "floating" }))] }), (0, jsx_runtime_1.jsx)(input_area_js_1.InputArea, { onSend: handleSend, onAbort: session.abort, streaming: session.streaming, sending: session.sending, placeholder: config.expert
|
|
164
232
|
? `Message ${config.expert.name}...`
|
|
165
233
|
: "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 }))] }));
|
|
166
234
|
}
|
|
@@ -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,14 @@
|
|
|
1
|
+
import type { MessageViewMode } from "@portablecore/types/chat";
|
|
2
|
+
interface DensityControlProps {
|
|
3
|
+
viewMode: MessageViewMode;
|
|
4
|
+
onSetViewMode: (mode: MessageViewMode) => void;
|
|
5
|
+
/** "floating" (bottom-left, legacy compat) or "inline" (header bar, new default) */
|
|
6
|
+
placement?: "floating" | "inline";
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Segmented control for Content Density: Full / Brief / Smart.
|
|
10
|
+
* Two placement modes for cross-surface compatibility.
|
|
11
|
+
*/
|
|
12
|
+
export declare function DensityControl({ viewMode, onSetViewMode, placement, }: DensityControlProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=density-control.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"density-control.d.ts","sourceRoot":"","sources":["../../src/components/density-control.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE/D,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,eAAe,CAAA;IACzB,aAAa,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAA;IAC9C,oFAAoF;IACpF,SAAS,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAA;CAClC;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,aAAa,EACb,SAAsB,GACvB,EAAE,mBAAmB,2CA0ErB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.DensityControl = DensityControl;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
/**
|
|
7
|
+
* Segmented control for Content Density: Full / Brief / Smart.
|
|
8
|
+
* Two placement modes for cross-surface compatibility.
|
|
9
|
+
*/
|
|
10
|
+
function DensityControl({ viewMode, onSetViewMode, placement = "floating", }) {
|
|
11
|
+
const activeClasses = "bg-blue-100 dark:bg-blue-900/50 text-blue-600 dark:text-blue-400";
|
|
12
|
+
const inactiveClasses = "text-slate-400 dark:text-slate-500 hover:text-slate-600 dark:hover:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-700";
|
|
13
|
+
const wrapper = placement === "floating"
|
|
14
|
+
? "absolute bottom-4 left-4 sm:left-6 z-10"
|
|
15
|
+
: "flex justify-end px-2 py-1";
|
|
16
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: wrapper, children: (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center bg-white dark:bg-slate-800 rounded-lg shadow-md border border-slate-200 dark:border-slate-700 p-0.5", children: [(0, jsx_runtime_1.jsx)("button", { onClick: () => onSetViewMode("full"), className: `p-1.5 rounded-md transition-all ${viewMode === "full" ? activeClasses : inactiveClasses}`, title: "Full: All expanded", children: (0, jsx_runtime_1.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", className: "w-4 h-4", children: (0, jsx_runtime_1.jsx)("path", { d: "M2 4.75A.75.75 0 012.75 4h14.5a.75.75 0 010 1.5H2.75A.75.75 0 012 4.75zm0 10.5a.75.75 0 01.75-.75h14.5a.75.75 0 010 1.5H2.75a.75.75 0 01-.75-.75zM2 10a.75.75 0 01.75-.75h14.5a.75.75 0 010 1.5H2.75A.75.75 0 012 10z" }) }) }), (0, jsx_runtime_1.jsx)("button", { onClick: () => onSetViewMode("brief"), className: `p-1.5 rounded-md transition-all ${viewMode === "brief" ? activeClasses : inactiveClasses}`, title: "Brief: All compressed", children: (0, jsx_runtime_1.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", className: "w-4 h-4", children: (0, jsx_runtime_1.jsx)("path", { d: "M5.75 4a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5zm0 10.5a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5zM5 10a.75.75 0 01.75-.75h8.5a.75.75 0 010 1.5h-8.5A.75.75 0 015 10z" }) }) }), (0, jsx_runtime_1.jsx)("button", { onClick: () => onSetViewMode("smart"), className: `p-1.5 rounded-md transition-all ${viewMode === "smart" ? activeClasses : inactiveClasses}`, title: "Smart: Recent messages full, older messages brief", children: (0, jsx_runtime_1.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", className: "w-4 h-4", children: (0, jsx_runtime_1.jsx)("path", { fillRule: "evenodd", d: "M10 18a8 8 0 100-16 8 8 0 000 16zm0-2a6 6 0 100-12 6 6 0 000 12zm0-2a4 4 0 100-8 4 4 0 000 8zm0-2a2 2 0 100-4 2 2 0 000 4z", clipRule: "evenodd" }) }) })] }) }));
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=density-control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"density-control.js","sourceRoot":"","sources":["../../src/components/density-control.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;AAeZ,wCA8EC;;AAlFD;;;GAGG;AACH,SAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,aAAa,EACb,SAAS,GAAG,UAAU,GACF;IACpB,MAAM,aAAa,GACjB,kEAAkE,CAAA;IACpE,MAAM,eAAe,GACnB,8HAA8H,CAAA;IAEhI,MAAM,OAAO,GACX,SAAS,KAAK,UAAU;QACtB,CAAC,CAAC,yCAAyC;QAC3C,CAAC,CAAC,4BAA4B,CAAA;IAElC,OAAO,CACL,gCAAK,SAAS,EAAE,OAAO,YACrB,iCAAK,SAAS,EAAC,uHAAuH,aAEpI,mCACE,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,EACpC,SAAS,EAAE,mCACT,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eACxC,EAAE,EACF,KAAK,EAAC,oBAAoB,YAE1B,gCACE,KAAK,EAAC,4BAA4B,EAClC,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,cAAc,EACnB,SAAS,EAAC,SAAS,YAEnB,iCAAM,CAAC,EAAC,uNAAuN,GAAG,GAC9N,GACC,EAGT,mCACE,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,EACrC,SAAS,EAAE,mCACT,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eACzC,EAAE,EACF,KAAK,EAAC,uBAAuB,YAE7B,gCACE,KAAK,EAAC,4BAA4B,EAClC,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,cAAc,EACnB,SAAS,EAAC,SAAS,YAEnB,iCAAM,CAAC,EAAC,2KAA2K,GAAG,GAClL,GACC,EAGT,mCACE,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,EACrC,SAAS,EAAE,mCACT,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eACzC,EAAE,EACF,KAAK,EAAC,mDAAmD,YAEzD,gCACE,KAAK,EAAC,4BAA4B,EAClC,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,cAAc,EACnB,SAAS,EAAC,SAAS,YAEnB,iCACE,QAAQ,EAAC,SAAS,EAClB,CAAC,EAAC,4HAA4H,EAC9H,QAAQ,EAAC,SAAS,GAClB,GACE,GACC,IACL,GACF,CACP,CAAA;AACH,CAAC"}
|
|
@@ -1,13 +1,6 @@
|
|
|
1
|
-
import type { MessageViewMode } from "@portablecore/types/chat";
|
|
2
|
-
interface FocusModeControlProps {
|
|
3
|
-
viewMode: MessageViewMode;
|
|
4
|
-
onSetViewMode: (mode: MessageViewMode) => void;
|
|
5
|
-
}
|
|
6
1
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* Faithfully reproduces the legacy ChatInterface segmented control.
|
|
2
|
+
* @deprecated Use DensityControl from ./density-control.tsx instead.
|
|
3
|
+
* This file re-exports the new component for backward compatibility.
|
|
10
4
|
*/
|
|
11
|
-
export
|
|
12
|
-
export {};
|
|
5
|
+
export { DensityControl as FocusModeControl } from "./density-control.js";
|
|
13
6
|
//# sourceMappingURL=focus-mode-control.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focus-mode-control.d.ts","sourceRoot":"","sources":["../../src/components/focus-mode-control.tsx"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"focus-mode-control.d.ts","sourceRoot":"","sources":["../../src/components/focus-mode-control.tsx"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,OAAO,EAAE,cAAc,IAAI,gBAAgB,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -1,16 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.FocusModeControl =
|
|
5
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
4
|
+
exports.FocusModeControl = void 0;
|
|
6
5
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* Faithfully reproduces the legacy ChatInterface segmented control.
|
|
6
|
+
* @deprecated Use DensityControl from ./density-control.tsx instead.
|
|
7
|
+
* This file re-exports the new component for backward compatibility.
|
|
10
8
|
*/
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const inactiveClasses = "text-slate-400 dark:text-slate-500 hover:text-slate-600 dark:hover:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-700";
|
|
14
|
-
return ((0, jsx_runtime_1.jsx)("div", { className: "absolute bottom-4 left-4 sm:left-6 z-10", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center bg-white dark:bg-slate-800 rounded-lg shadow-md border border-slate-200 dark:border-slate-700 p-0.5", children: [(0, jsx_runtime_1.jsx)("button", { onClick: () => onSetViewMode("long"), className: `p-1.5 rounded-md transition-all ${viewMode === "long" ? activeClasses : inactiveClasses}`, title: "Long: All expanded", children: (0, jsx_runtime_1.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", className: "w-4 h-4", children: (0, jsx_runtime_1.jsx)("path", { d: "M2 4.75A.75.75 0 012.75 4h14.5a.75.75 0 010 1.5H2.75A.75.75 0 012 4.75zm0 10.5a.75.75 0 01.75-.75h14.5a.75.75 0 010 1.5H2.75a.75.75 0 01-.75-.75zM2 10a.75.75 0 01.75-.75h14.5a.75.75 0 010 1.5H2.75A.75.75 0 012 10z" }) }) }), (0, jsx_runtime_1.jsx)("button", { onClick: () => onSetViewMode("short"), className: `p-1.5 rounded-md transition-all ${viewMode === "short" ? activeClasses : inactiveClasses}`, title: "Short: All compressed", children: (0, jsx_runtime_1.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", className: "w-4 h-4", children: (0, jsx_runtime_1.jsx)("path", { d: "M5.75 4a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5zm0 10.5a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5zM5 10a.75.75 0 01.75-.75h8.5a.75.75 0 010 1.5h-8.5A.75.75 0 015 10z" }) }) }), (0, jsx_runtime_1.jsx)("button", { onClick: () => onSetViewMode("focus"), className: `p-1.5 rounded-md transition-all ${viewMode === "focus" ? activeClasses : inactiveClasses}`, title: "Focus: Your threads expanded", children: (0, jsx_runtime_1.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", className: "w-4 h-4", children: (0, jsx_runtime_1.jsx)("path", { fillRule: "evenodd", d: "M10 18a8 8 0 100-16 8 8 0 000 16zm0-2a6 6 0 100-12 6 6 0 000 12zm0-2a4 4 0 100-8 4 4 0 000 8zm0-2a2 2 0 100-4 2 2 0 000 4z", clipRule: "evenodd" }) }) })] }) }));
|
|
15
|
-
}
|
|
9
|
+
var density_control_js_1 = require("./density-control.js");
|
|
10
|
+
Object.defineProperty(exports, "FocusModeControl", { enumerable: true, get: function () { return density_control_js_1.DensityControl; } });
|
|
16
11
|
//# sourceMappingURL=focus-mode-control.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focus-mode-control.js","sourceRoot":"","sources":["../../src/components/focus-mode-control.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;
|
|
1
|
+
{"version":3,"file":"focus-mode-control.js","sourceRoot":"","sources":["../../src/components/focus-mode-control.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;;AAEZ;;;GAGG;AAEH,2DAAyE;AAAhE,sHAAA,cAAc,OAAoB"}
|
|
@@ -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;AAMtD,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;IACxC,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,sDAAsD;IACtD,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,oDAAoD;IACpD,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,KAAK,IAAI,CAAA;CAC9E;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;AAMtD,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;IACxC,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,sDAAsD;IACtD,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,oDAAoD;IACpD,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,KAAK,IAAI,CAAA;CAC9E;AA8CD;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,0DAsVxB,CAAA"}
|
|
@@ -125,10 +125,10 @@ exports.MessageBubble = (0, react_1.memo)(function MessageBubble({ message, isFi
|
|
|
125
125
|
: message.content;
|
|
126
126
|
// Whisper header element (eye-off icon + label)
|
|
127
127
|
const whisperHeader = isWhisper ? ((0, jsx_runtime_1.jsxs)("div", { className: "mb-2 flex items-center gap-2", children: [(0, jsx_runtime_1.jsxs)("svg", { xmlns: "http://www.w3.org/2000/svg", width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "text-slate-400 dark:text-slate-500 flex-shrink-0", children: [(0, jsx_runtime_1.jsx)("path", { d: "M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94" }), (0, jsx_runtime_1.jsx)("path", { d: "M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19" }), (0, jsx_runtime_1.jsx)("line", { x1: "1", y1: "1", x2: "23", y2: "23" }), (0, jsx_runtime_1.jsx)("path", { d: "M14.12 14.12a3 3 0 1 1-4.24-4.24" })] }), (0, jsx_runtime_1.jsx)("span", { className: "text-[11px] font-semibold uppercase tracking-wide text-slate-400 dark:text-slate-500", children: "Whisper" }), (0, jsx_runtime_1.jsx)("span", { className: "text-[10px] text-slate-400/60 dark:text-slate-500/60 ml-auto", children: isUser ? "Only visible to recipients" : "Only visible to you" })] })) : null;
|
|
128
|
-
const expandCollapseButton = focusExpandable && hasShortContent && onToggleExpanded ? ((0, jsx_runtime_1.
|
|
128
|
+
const expandCollapseButton = focusExpandable && hasShortContent && onToggleExpanded ? ((0, jsx_runtime_1.jsxs)("button", { onClick: (e) => {
|
|
129
129
|
e.stopPropagation();
|
|
130
130
|
onToggleExpanded(message.id, isShowingFull);
|
|
131
|
-
}, className: "mt-2
|
|
131
|
+
}, className: "mt-2 w-full flex items-center gap-2 group cursor-pointer", children: [(0, jsx_runtime_1.jsx)("div", { className: "flex-1 h-px bg-slate-200 dark:bg-slate-700 group-hover:bg-slate-300 dark:group-hover:bg-slate-600 transition-colors" }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-1 px-1.5 py-0.5 rounded text-[11px] text-slate-400 dark:text-slate-500 group-hover:text-slate-600 dark:group-hover:text-slate-300 transition-colors", children: [(0, jsx_runtime_1.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 16 16", fill: "currentColor", className: `w-3 h-3 transition-transform ${isShowingFull ? "group-hover:-translate-y-0.5" : "group-hover:translate-y-0.5"}`, children: isShowingFull ? ((0, jsx_runtime_1.jsx)("path", { fillRule: "evenodd", d: "M11.78 9.78a.75.75 0 0 1-1.06 0L8 7.06 5.28 9.78a.75.75 0 0 1-1.06-1.06l3.25-3.25a.75.75 0 0 1 1.06 0l3.25 3.25a.75.75 0 0 1 0 1.06Z", clipRule: "evenodd" })) : ((0, jsx_runtime_1.jsx)("path", { fillRule: "evenodd", d: "M4.22 6.22a.75.75 0 0 1 1.06 0L8 8.94l2.72-2.72a.75.75 0 1 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0L4.22 7.28a.75.75 0 0 1 0-1.06Z", clipRule: "evenodd" })) }), isShowingFull ? "Less" : "More"] }), (0, jsx_runtime_1.jsx)("div", { className: "flex-1 h-px bg-slate-200 dark:bg-slate-700 group-hover:bg-slate-300 dark:group-hover:bg-slate-600 transition-colors" })] })) : null;
|
|
132
132
|
// Prose classes per role
|
|
133
133
|
const proseClasses = isUser
|
|
134
134
|
? "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"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-bubble.js","sourceRoot":"","sources":["../../src/components/message-bubble.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"message-bubble.js","sourceRoot":"","sources":["../../src/components/message-bubble.tsx"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,10 @@ interface MessageListProps {
|
|
|
20
20
|
focusModeEnabled?: boolean;
|
|
21
21
|
/** Focus mode: toggle a message between short/full */
|
|
22
22
|
onToggleExpanded?: (messageId: string, currentlyShowingFull: boolean) => void;
|
|
23
|
+
/** Spacer height for post-streaming message lock (virtualizer only) */
|
|
24
|
+
spacerHeight?: number;
|
|
25
|
+
/** Whether spacer is expanded to 100vh (user just sent a message) */
|
|
26
|
+
spacerExpanded?: boolean;
|
|
23
27
|
}
|
|
24
28
|
/**
|
|
25
29
|
* Scrollable message list with auto-scroll, date separators,
|
|
@@ -29,10 +33,12 @@ interface MessageListProps {
|
|
|
29
33
|
* (triggered by message count exceeding the threshold in useVirtualMessages).
|
|
30
34
|
* Below threshold, renders with .map() for zero-overhead simplicity.
|
|
31
35
|
*
|
|
36
|
+
* PlainList uses content-visibility: auto for CSS-level rendering optimization.
|
|
37
|
+
*
|
|
32
38
|
* Supports two layout variants:
|
|
33
39
|
* - "full": max-w-5xl, wider padding, extra bottom space for scroll
|
|
34
40
|
* - "compact": max-w-3xl, tighter padding
|
|
35
41
|
*/
|
|
36
|
-
export declare function MessageList({ messages, renderableMessages, streaming, config, markdownComponents, emptyState, beforeMessageList, afterMessageList, scrollRef, virt, shouldShowShort, focusModeEnabled, onToggleExpanded, }: MessageListProps): import("react/jsx-runtime").JSX.Element;
|
|
42
|
+
export declare function MessageList({ messages, renderableMessages, streaming, config, markdownComponents, emptyState, beforeMessageList, afterMessageList, scrollRef, virt, shouldShowShort, focusModeEnabled, onToggleExpanded, spacerHeight, spacerExpanded, }: MessageListProps): import("react/jsx-runtime").JSX.Element;
|
|
37
43
|
export {};
|
|
38
44
|
//# sourceMappingURL=message-list.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-list.d.ts","sourceRoot":"","sources":["../../src/components/message-list.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAGpE,UAAU,gBAAgB;IACxB,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,kBAAkB,EAAE,iBAAiB,EAAE,CAAA;IACvC,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,mBAAmB,CAAA;IAE3B,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACxC,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB,iBAAiB,CAAC,EAAE,SAAS,CAAA;IAC7B,gBAAgB,CAAC,EAAE,SAAS,CAAA;IAC5B,SAAS,EAAE,SAAS,CAAC,cAAc,CAAC,CAAA;IACpC,mDAAmD;IACnD,IAAI,EAAE,YAAY,CAAA;IAClB,mEAAmE;IACnE,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAA;IAChD,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,sDAAsD;IACtD,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,KAAK,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"message-list.d.ts","sourceRoot":"","sources":["../../src/components/message-list.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAGpE,UAAU,gBAAgB;IACxB,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,kBAAkB,EAAE,iBAAiB,EAAE,CAAA;IACvC,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,mBAAmB,CAAA;IAE3B,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACxC,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB,iBAAiB,CAAC,EAAE,SAAS,CAAA;IAC7B,gBAAgB,CAAC,EAAE,SAAS,CAAA;IAC5B,SAAS,EAAE,SAAS,CAAC,cAAc,CAAC,CAAA;IACpC,mDAAmD;IACnD,IAAI,EAAE,YAAY,CAAA;IAClB,mEAAmE;IACnE,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAA;IAChD,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,sDAAsD;IACtD,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,KAAK,IAAI,CAAA;IAC7E,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,qEAAqE;IACrE,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,kBAAkB,EAClB,SAAS,EACT,MAAM,EACN,kBAAkB,EAClB,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,EACT,IAAI,EACJ,eAAe,EACf,gBAAwB,EACxB,gBAAgB,EAChB,YAAgB,EAChB,cAAsB,GACvB,EAAE,gBAAgB,2CA6DlB"}
|
|
@@ -12,11 +12,13 @@ const message_bubble_js_1 = require("./message-bubble.js");
|
|
|
12
12
|
* (triggered by message count exceeding the threshold in useVirtualMessages).
|
|
13
13
|
* Below threshold, renders with .map() for zero-overhead simplicity.
|
|
14
14
|
*
|
|
15
|
+
* PlainList uses content-visibility: auto for CSS-level rendering optimization.
|
|
16
|
+
*
|
|
15
17
|
* Supports two layout variants:
|
|
16
18
|
* - "full": max-w-5xl, wider padding, extra bottom space for scroll
|
|
17
19
|
* - "compact": max-w-3xl, tighter padding
|
|
18
20
|
*/
|
|
19
|
-
function MessageList({ messages, renderableMessages, streaming, config, markdownComponents, emptyState, beforeMessageList, afterMessageList, scrollRef, virt, shouldShowShort, focusModeEnabled = false, onToggleExpanded, }) {
|
|
21
|
+
function MessageList({ messages, renderableMessages, streaming, config, markdownComponents, emptyState, beforeMessageList, afterMessageList, scrollRef, virt, shouldShowShort, focusModeEnabled = false, onToggleExpanded, spacerHeight = 0, spacerExpanded = false, }) {
|
|
20
22
|
const variant = config.variant || "full";
|
|
21
23
|
const isCompact = variant === "compact";
|
|
22
24
|
const isEmpty = messages.length === 0;
|
|
@@ -28,33 +30,40 @@ function MessageList({ messages, renderableMessages, streaming, config, markdown
|
|
|
28
30
|
? `max-w-3xl mx-auto ${config.classNames?.messageListInner || ""}`
|
|
29
31
|
: `max-w-5xl mx-auto px-4 sm:px-6 ${config.classNames?.messageListInner || ""}`;
|
|
30
32
|
const scrollStyle = virt.active ? { overflowAnchor: "none" } : undefined;
|
|
31
|
-
return ((0, jsx_runtime_1.jsxs)("div", { ref: scrollRef, className: `${scrollClasses} ${listClasses}`, style: scrollStyle, children: [beforeMessageList, isEmpty && emptyState ? ((0, jsx_runtime_1.jsx)("div", { className: "flex items-center justify-center h-full", children: emptyState })) : virt.active ? ((0, jsx_runtime_1.jsx)(VirtualizedList, { virt: virt, renderableMessages: renderableMessages, config: config, markdownComponents: markdownComponents, shouldShowShort: shouldShowShort, focusModeEnabled: focusModeEnabled, onToggleExpanded: onToggleExpanded, rowClasses: rowClasses, isCompact: isCompact })) : ((0, jsx_runtime_1.jsx)(PlainList, { renderableMessages: renderableMessages, config: config, markdownComponents: markdownComponents, shouldShowShort: shouldShowShort, focusModeEnabled: focusModeEnabled, onToggleExpanded: onToggleExpanded, isCompact: isCompact })), afterMessageList && ((0, jsx_runtime_1.jsx)("div", { className: "pb-4", children: afterMessageList }))] }));
|
|
33
|
+
return ((0, jsx_runtime_1.jsxs)("div", { ref: scrollRef, className: `${scrollClasses} ${listClasses}`, style: scrollStyle, children: [beforeMessageList, isEmpty && emptyState ? ((0, jsx_runtime_1.jsx)("div", { className: "flex items-center justify-center h-full", children: emptyState })) : virt.active ? ((0, jsx_runtime_1.jsx)(VirtualizedList, { virt: virt, renderableMessages: renderableMessages, config: config, markdownComponents: markdownComponents, shouldShowShort: shouldShowShort, focusModeEnabled: focusModeEnabled, onToggleExpanded: onToggleExpanded, rowClasses: rowClasses, isCompact: isCompact, spacerHeight: spacerHeight, spacerExpanded: spacerExpanded })) : ((0, jsx_runtime_1.jsx)(PlainList, { renderableMessages: renderableMessages, config: config, markdownComponents: markdownComponents, shouldShowShort: shouldShowShort, focusModeEnabled: focusModeEnabled, onToggleExpanded: onToggleExpanded, isCompact: isCompact })), afterMessageList && ((0, jsx_runtime_1.jsx)("div", { className: "pb-4", children: afterMessageList }))] }));
|
|
32
34
|
}
|
|
33
35
|
function PlainList({ renderableMessages, config, markdownComponents, shouldShowShort, focusModeEnabled, onToggleExpanded, isCompact, }) {
|
|
34
36
|
const innerClasses = isCompact
|
|
35
37
|
? `max-w-3xl mx-auto space-y-0 ${config.classNames?.messageListInner || ""}`
|
|
36
38
|
: `max-w-5xl mx-auto px-4 sm:px-6 pt-2 pb-12 sm:pb-4 space-y-0 ${config.classNames?.messageListInner || ""}`;
|
|
37
|
-
return ((0, jsx_runtime_1.jsx)("div", { className: innerClasses, children: renderableMessages.map((rm) => ((0, jsx_runtime_1.jsxs)("div", {
|
|
39
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: innerClasses, children: renderableMessages.map((rm) => ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
40
|
+
contentVisibility: "auto",
|
|
41
|
+
containIntrinsicSize: "auto 120px",
|
|
42
|
+
}, children: [rm.showDateSeparator && rm.dateSeparatorLabel && ((0, jsx_runtime_1.jsx)("div", { className: `flex items-center justify-center ${isCompact ? "py-4" : "my-6"}`, children: (0, jsx_runtime_1.jsx)("div", { className: `px-3 py-1 rounded-full text-xs font-medium bg-slate-100 dark:bg-slate-800 text-slate-500 dark:text-slate-400 ${config.classNames?.dateSeparator || ""}`, children: rm.dateSeparatorLabel }) })), (0, jsx_runtime_1.jsx)(message_bubble_js_1.MessageBubble, { message: rm.message, isFirstInGroup: rm.isFirstInGroup, isLastInGroup: rm.isLastInGroup, config: config, markdownComponents: markdownComponents, showShortContent: shouldShowShort?.(rm.message.id) ?? false, focusExpandable: focusModeEnabled && !!rm.message.shortContent, onToggleExpanded: onToggleExpanded })] }, rm.message.id))) }));
|
|
38
43
|
}
|
|
39
|
-
function VirtualizedList({ virt, renderableMessages, config, markdownComponents, shouldShowShort, focusModeEnabled, onToggleExpanded, rowClasses, isCompact, }) {
|
|
44
|
+
function VirtualizedList({ virt, renderableMessages, config, markdownComponents, shouldShowShort, focusModeEnabled, onToggleExpanded, rowClasses, isCompact, spacerHeight, spacerExpanded, }) {
|
|
40
45
|
const { virtualizer, virtualItems, totalSize } = virt;
|
|
41
|
-
return ((0, jsx_runtime_1.
|
|
46
|
+
return ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
42
47
|
height: totalSize,
|
|
43
48
|
width: "100%",
|
|
44
49
|
position: "relative",
|
|
45
|
-
}, children: virtualItems.map((virtualRow) => {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
+
}, children: [virtualItems.map((virtualRow) => {
|
|
51
|
+
const rm = renderableMessages[virtualRow.index];
|
|
52
|
+
if (!rm)
|
|
53
|
+
return null;
|
|
54
|
+
return ((0, jsx_runtime_1.jsx)("div", { ref: virtualizer.measureElement, "data-index": virtualRow.index, "data-message-id": rm.message.id, className: "pb-6", style: {
|
|
55
|
+
position: "absolute",
|
|
56
|
+
top: 0,
|
|
57
|
+
left: 0,
|
|
58
|
+
width: "100%",
|
|
59
|
+
transform: `translateY(${virtualRow.start}px)`,
|
|
60
|
+
}, children: (0, jsx_runtime_1.jsxs)("div", { className: rowClasses, children: [rm.showDateSeparator && rm.dateSeparatorLabel && ((0, jsx_runtime_1.jsx)("div", { className: `flex items-center justify-center ${isCompact ? "py-4" : "my-6"}`, children: (0, jsx_runtime_1.jsx)("div", { className: `px-3 py-1 rounded-full text-xs font-medium bg-slate-100 dark:bg-slate-800 text-slate-500 dark:text-slate-400 ${config.classNames?.dateSeparator || ""}`, children: rm.dateSeparatorLabel }) })), (0, jsx_runtime_1.jsx)(message_bubble_js_1.MessageBubble, { message: rm.message, isFirstInGroup: rm.isFirstInGroup, isLastInGroup: rm.isLastInGroup, config: config, markdownComponents: markdownComponents, showShortContent: shouldShowShort?.(rm.message.id) ?? false, focusExpandable: focusModeEnabled && !!rm.message.shortContent, onToggleExpanded: onToggleExpanded })] }) }, rm.message.id));
|
|
61
|
+
}), (0, jsx_runtime_1.jsx)("div", { style: {
|
|
62
|
+
height: spacerExpanded ? "100vh" : `${spacerHeight}px`,
|
|
50
63
|
position: "absolute",
|
|
51
|
-
top:
|
|
64
|
+
top: totalSize,
|
|
52
65
|
left: 0,
|
|
53
66
|
width: "100%",
|
|
54
|
-
|
|
55
|
-
contentVisibility: "auto",
|
|
56
|
-
containIntrinsicSize: `auto ${virtualRow.size}px`,
|
|
57
|
-
}, children: (0, jsx_runtime_1.jsxs)("div", { className: rowClasses, children: [rm.showDateSeparator && rm.dateSeparatorLabel && ((0, jsx_runtime_1.jsx)("div", { className: `flex items-center justify-center ${isCompact ? "py-4" : "my-6"}`, children: (0, jsx_runtime_1.jsx)("div", { className: `px-3 py-1 rounded-full text-xs font-medium bg-slate-100 dark:bg-slate-800 text-slate-500 dark:text-slate-400 ${config.classNames?.dateSeparator || ""}`, children: rm.dateSeparatorLabel }) })), (0, jsx_runtime_1.jsx)(message_bubble_js_1.MessageBubble, { message: rm.message, isFirstInGroup: rm.isFirstInGroup, isLastInGroup: rm.isLastInGroup, config: config, markdownComponents: markdownComponents, showShortContent: shouldShowShort?.(rm.message.id) ?? false, focusExpandable: focusModeEnabled && !!rm.message.shortContent, onToggleExpanded: onToggleExpanded })] }) }, rm.message.id));
|
|
58
|
-
}) }));
|
|
67
|
+
} })] }));
|
|
59
68
|
}
|
|
60
69
|
//# sourceMappingURL=message-list.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-list.js","sourceRoot":"","sources":["../../src/components/message-list.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;
|
|
1
|
+
{"version":3,"file":"message-list.js","sourceRoot":"","sources":["../../src/components/message-list.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;AA+CZ,kCA6EC;;AAtHD,2DAAmD;AA2BnD;;;;;;;;;;;;;GAaG;AACH,SAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,kBAAkB,EAClB,SAAS,EACT,MAAM,EACN,kBAAkB,EAClB,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,EACT,IAAI,EACJ,eAAe,EACf,gBAAgB,GAAG,KAAK,EACxB,gBAAgB,EAChB,YAAY,GAAG,CAAC,EAChB,cAAc,GAAG,KAAK,GACL;IACjB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAA;IACxC,MAAM,SAAS,GAAG,OAAO,KAAK,SAAS,CAAA;IAEvC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAA;IAErC,MAAM,aAAa,GAAG,SAAS;QAC7B,CAAC,CAAC,kCAAkC;QACpC,CAAC,CAAC,wBAAwB,CAAA;IAE5B,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE,WAAW,IAAI,EAAE,CAAA;IAExD,MAAM,UAAU,GAAG,SAAS;QAC1B,CAAC,CAAC,qBAAqB,MAAM,CAAC,UAAU,EAAE,gBAAgB,IAAI,EAAE,EAAE;QAClE,CAAC,CAAC,kCAAkC,MAAM,CAAC,UAAU,EAAE,gBAAgB,IAAI,EAAE,EAAE,CAAA;IAEjF,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAe,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IAEjF,OAAO,CACL,iCACE,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,GAAG,aAAa,IAAI,WAAW,EAAE,EAC5C,KAAK,EAAE,WAAW,aAEjB,iBAAiB,EAEjB,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CACvB,gCAAK,SAAS,EAAC,yCAAyC,YACrD,UAAU,GACP,CACP,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAChB,uBAAC,eAAe,IACd,IAAI,EAAE,IAAI,EACV,kBAAkB,EAAE,kBAAkB,EACtC,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,gBAAgB,EAClC,gBAAgB,EAAE,gBAAgB,EAClC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,YAAY,EAC1B,cAAc,EAAE,cAAc,GAC9B,CACH,CAAC,CAAC,CAAC,CACF,uBAAC,SAAS,IACR,kBAAkB,EAAE,kBAAkB,EACtC,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,gBAAgB,EAClC,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,SAAS,GACpB,CACH,EAEA,gBAAgB,IAAI,CACnB,gCAAK,SAAS,EAAC,MAAM,YAAE,gBAAgB,GAAO,CAC/C,IACG,CACP,CAAA;AACH,CAAC;AAiBD,SAAS,SAAS,CAAC,EACjB,kBAAkB,EAClB,MAAM,EACN,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,GACM;IACf,MAAM,YAAY,GAAG,SAAS;QAC5B,CAAC,CAAC,+BAA+B,MAAM,CAAC,UAAU,EAAE,gBAAgB,IAAI,EAAE,EAAE;QAC5E,CAAC,CAAC,+DAA+D,MAAM,CAAC,UAAU,EAAE,gBAAgB,IAAI,EAAE,EAAE,CAAA;IAE9G,OAAO,CACL,gCAAK,SAAS,EAAE,YAAY,YACzB,kBAAkB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAC9B,iCAEE,KAAK,EAAE;gBACL,iBAAiB,EAAE,MAAM;gBACzB,oBAAoB,EAAE,YAAY;aACnC,aAEA,EAAE,CAAC,iBAAiB,IAAI,EAAE,CAAC,kBAAkB,IAAI,CAChD,gCAAK,SAAS,EAAE,oCAAoC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,YAC/E,gCACE,SAAS,EAAE,gHAAgH,MAAM,CAAC,UAAU,EAAE,aAAa,IAAI,EAAE,EAAE,YAElK,EAAE,CAAC,kBAAkB,GAClB,GACF,CACP,EACD,uBAAC,iCAAa,IACZ,OAAO,EAAE,EAAE,CAAC,OAAO,EACnB,cAAc,EAAE,EAAE,CAAC,cAAc,EACjC,aAAa,EAAE,EAAE,CAAC,aAAa,EAC/B,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,kBAAkB,EACtC,gBAAgB,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,KAAK,EAC3D,eAAe,EAAE,gBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,EAC9D,gBAAgB,EAAE,gBAAgB,GAClC,KAxBG,EAAE,CAAC,OAAO,CAAC,EAAE,CAyBd,CACP,CAAC,GACE,CACP,CAAA;AACH,CAAC;AAqBD,SAAS,eAAe,CAAC,EACvB,IAAI,EACJ,kBAAkB,EAClB,MAAM,EACN,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,SAAS,EACT,YAAY,EACZ,cAAc,GACO;IACrB,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,IAAI,CAAA;IAErD,OAAO,CACL,iCACE,KAAK,EAAE;YACL,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,UAAU;SACrB,aAEA,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;gBAC/B,MAAM,EAAE,GAAG,kBAAkB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;gBAC/C,IAAI,CAAC,EAAE;oBAAE,OAAO,IAAI,CAAA;gBAEpB,OAAO,CACL,gCAEE,GAAG,EAAE,WAAW,CAAC,cAAc,gBACnB,UAAU,CAAC,KAAK,qBACX,EAAE,CAAC,OAAO,CAAC,EAAE,EAC9B,SAAS,EAAC,MAAM,EAChB,KAAK,EAAE;wBACL,QAAQ,EAAE,UAAU;wBACpB,GAAG,EAAE,CAAC;wBACN,IAAI,EAAE,CAAC;wBACP,KAAK,EAAE,MAAM;wBACb,SAAS,EAAE,cAAc,UAAU,CAAC,KAAK,KAAK;qBAC/C,YAED,iCAAK,SAAS,EAAE,UAAU,aACvB,EAAE,CAAC,iBAAiB,IAAI,EAAE,CAAC,kBAAkB,IAAI,CAChD,gCAAK,SAAS,EAAE,oCAAoC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,YAC/E,gCACE,SAAS,EAAE,gHAAgH,MAAM,CAAC,UAAU,EAAE,aAAa,IAAI,EAAE,EAAE,YAElK,EAAE,CAAC,kBAAkB,GAClB,GACF,CACP,EACD,uBAAC,iCAAa,IACZ,OAAO,EAAE,EAAE,CAAC,OAAO,EACnB,cAAc,EAAE,EAAE,CAAC,cAAc,EACjC,aAAa,EAAE,EAAE,CAAC,aAAa,EAC/B,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,kBAAkB,EACtC,gBAAgB,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,KAAK,EAC3D,eAAe,EAAE,gBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,EAC9D,gBAAgB,EAAE,gBAAgB,GAClC,IACE,IAjCD,EAAE,CAAC,OAAO,CAAC,EAAE,CAkCd,CACP,CAAA;YACH,CAAC,CAAC,EAGF,gCACE,KAAK,EAAE;oBACL,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,YAAY,IAAI;oBACtD,QAAQ,EAAE,UAAU;oBACpB,GAAG,EAAE,SAAS;oBACd,IAAI,EAAE,CAAC;oBACP,KAAK,EAAE,MAAM;iBACd,GACD,IACE,CACP,CAAA;AACH,CAAC"}
|
|
@@ -12,6 +12,12 @@ interface UseChatScrollReturn {
|
|
|
12
12
|
scrollRef: React.RefObject<HTMLDivElement>;
|
|
13
13
|
scrollToBottom: (behavior?: ScrollBehavior) => void;
|
|
14
14
|
isNearBottom: () => boolean;
|
|
15
|
+
/** True when user is actively scrolling (600ms debounce for mobile momentum) */
|
|
16
|
+
isUserScrolling: React.MutableRefObject<boolean>;
|
|
17
|
+
/** True when user scrolled away during streaming; resets when streaming ends */
|
|
18
|
+
userTookOverDuringStreaming: React.MutableRefObject<boolean>;
|
|
19
|
+
/** Timestamp of the last programmatic scroll (for guard checks) */
|
|
20
|
+
lastProgrammaticScroll: React.MutableRefObject<number>;
|
|
15
21
|
}
|
|
16
22
|
export declare function useChatScroll({ messages, streaming, selectedThreadId, virtualizerRef, }: UseChatScrollOptions): UseChatScrollReturn;
|
|
17
23
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-chat-scroll.d.ts","sourceRoot":"","sources":["../../src/hooks/use-chat-scroll.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use-chat-scroll.d.ts","sourceRoot":"","sources":["../../src/hooks/use-chat-scroll.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAE1D,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,SAAS,EAAE,OAAO,CAAA;IAClB,sFAAsF;IACtF,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,wFAAwF;IACxF,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAA;CAC9E;AAED,UAAU,mBAAmB;IAC3B,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAA;IAC1C,cAAc,EAAE,CAAC,QAAQ,CAAC,EAAE,cAAc,KAAK,IAAI,CAAA;IACnD,YAAY,EAAE,MAAM,OAAO,CAAA;IAC3B,gFAAgF;IAChF,eAAe,EAAE,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAChD,gFAAgF;IAChF,2BAA2B,EAAE,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAC5D,mEAAmE;IACnE,sBAAsB,EAAE,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAA;CACvD;AAMD,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,cAAc,GACf,EAAE,oBAAoB,GAAG,mBAAmB,CAwJ5C"}
|