@portablecore/chat 0.3.1 → 0.3.2
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.js +15 -15
- package/dist/chat-interface-core.js.map +1 -1
- package/dist/components/density-control.d.ts +2 -11
- package/dist/components/density-control.d.ts.map +1 -1
- package/dist/components/density-control.js +4 -12
- package/dist/components/density-control.js.map +1 -1
- package/dist/components/focus-mode-control.d.ts +2 -3
- package/dist/components/focus-mode-control.d.ts.map +1 -1
- package/dist/components/focus-mode-control.js +3 -4
- package/dist/components/focus-mode-control.js.map +1 -1
- package/dist/components/verbosity-control.d.ts +14 -0
- package/dist/components/verbosity-control.d.ts.map +1 -0
- package/dist/components/verbosity-control.js +18 -0
- package/dist/components/verbosity-control.js.map +1 -0
- package/dist/hooks/use-content-density.d.ts +3 -32
- package/dist/hooks/use-content-density.d.ts.map +1 -1
- package/dist/hooks/use-content-density.js +5 -90
- package/dist/hooks/use-content-density.js.map +1 -1
- package/dist/hooks/use-focus-mode.d.ts +3 -4
- package/dist/hooks/use-focus-mode.d.ts.map +1 -1
- package/dist/hooks/use-focus-mode.js +3 -4
- package/dist/hooks/use-focus-mode.js.map +1 -1
- package/dist/hooks/use-verbosity.d.ts +35 -0
- package/dist/hooks/use-verbosity.d.ts.map +1 -0
- package/dist/hooks/use-verbosity.js +96 -0
- package/dist/hooks/use-verbosity.js.map +1 -0
- package/dist/index.d.ts +9 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -11
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -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_verbosity_js_1 = require("./hooks/use-verbosity.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 verbosity_control_js_1 = require("./components/verbosity-control.js");
|
|
23
23
|
/**
|
|
24
24
|
* ChatInterfaceCore — The unified chat experience.
|
|
25
25
|
*
|
|
@@ -53,27 +53,27 @@ function ChatInterfaceCore({ config, markdownComponents, }) {
|
|
|
53
53
|
selectedThreadId,
|
|
54
54
|
onMessageCountChange: onThreadMessageCountChange,
|
|
55
55
|
});
|
|
56
|
-
//
|
|
56
|
+
// Verbosity is always-on. Supports legacy focusMode config for backward compat.
|
|
57
57
|
// When neither is provided, auto-determines the default view mode.
|
|
58
|
-
const
|
|
58
|
+
const verbosityConfig = config.verbosity ?? (config.focusMode?.enabled ? {
|
|
59
59
|
initialViewMode: config.focusMode.initialViewMode,
|
|
60
60
|
onViewModeChange: config.focusMode.onViewModeChange,
|
|
61
61
|
} : undefined);
|
|
62
|
-
const
|
|
62
|
+
const verbosity = (0, use_verbosity_js_1.useVerbosity)({
|
|
63
63
|
messages: threadFilter.filteredMessages,
|
|
64
|
-
initialViewMode:
|
|
64
|
+
initialViewMode: verbosityConfig?.initialViewMode ?? (0, use_verbosity_js_1.getDefaultViewMode)(threadFilter.filteredMessages.length, config.experts && config.experts.length > 1 ? "group" : undefined),
|
|
65
65
|
currentUserId: config.currentUser.id,
|
|
66
|
-
onViewModeChange:
|
|
67
|
-
recentMessageCount:
|
|
66
|
+
onViewModeChange: verbosityConfig?.onViewModeChange,
|
|
67
|
+
recentMessageCount: verbosityConfig?.recentMessageCount,
|
|
68
68
|
});
|
|
69
|
-
const
|
|
69
|
+
const verbosityEnabled = true;
|
|
70
70
|
const displayMessages = threadFilter.filteredMessages;
|
|
71
71
|
const renderableMessages = (0, react_1.useMemo)(() => (0, message_grouping_js_1.groupMessages)(displayMessages), [displayMessages]);
|
|
72
|
-
// measureVersion triggers virtualizer re-measurement on
|
|
72
|
+
// measureVersion triggers virtualizer re-measurement on verbosity mode or thread changes
|
|
73
73
|
const measureVersion = (0, react_1.useMemo)(() => {
|
|
74
|
-
const parts = [
|
|
74
|
+
const parts = [verbosity.viewMode, selectedThreadId ?? "all"];
|
|
75
75
|
return parts.join("|");
|
|
76
|
-
}, [
|
|
76
|
+
}, [verbosity.viewMode, selectedThreadId]);
|
|
77
77
|
// Ref bridge: virtualizer is created after scroll hook, but scroll hook reads it via ref
|
|
78
78
|
const virtualizerRef = (0, react_1.useRef)(null);
|
|
79
79
|
const scroll = (0, use_chat_scroll_js_1.useChatScroll)({
|
|
@@ -87,8 +87,8 @@ function ChatInterfaceCore({ config, markdownComponents, }) {
|
|
|
87
87
|
scrollRef: scroll.scrollRef,
|
|
88
88
|
measureVersion: measureVersion.length,
|
|
89
89
|
enabled: jsVirtualizationEnabled,
|
|
90
|
-
getMessageIsExpanded:
|
|
91
|
-
? (messageId) => !
|
|
90
|
+
getMessageIsExpanded: verbosityEnabled
|
|
91
|
+
? (messageId) => !verbosity.shouldShowShort(messageId)
|
|
92
92
|
: undefined,
|
|
93
93
|
});
|
|
94
94
|
// Keep the ref in sync
|
|
@@ -228,7 +228,7 @@ function ChatInterfaceCore({ config, markdownComponents, }) {
|
|
|
228
228
|
}
|
|
229
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 }) }));
|
|
230
230
|
};
|
|
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:
|
|
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: verbosityEnabled ? verbosity.shouldShowShort : undefined, focusModeEnabled: verbosityEnabled, onToggleExpanded: verbosityEnabled ? verbosity.toggleExpanded : undefined, spacerHeight: spacerHeight, spacerExpanded: spacerExpanded }), verbosityEnabled && displayMessages.length > 0 && ((0, jsx_runtime_1.jsx)(verbosity_control_js_1.VerbosityControl, { viewMode: verbosity.viewMode, onSetViewMode: verbosity.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
|
|
232
232
|
? `Message ${config.expert.name}...`
|
|
233
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 }))] }));
|
|
234
234
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-interface-core.js","sourceRoot":"","sources":["../src/chat-interface-core.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;AA+CZ,8CAyVC;;AAtYD,iCAAyF;AAGzF,qEAA4D;AAC5D,mEAA0D;AAC1D,mEAA2D;AAC3D,qEAA4D;AAC5D,uEAA8D;AAC9D
|
|
1
|
+
{"version":3,"file":"chat-interface-core.js","sourceRoot":"","sources":["../src/chat-interface-core.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,5 @@
|
|
|
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
1
|
/**
|
|
9
|
-
*
|
|
10
|
-
* Two placement modes for cross-surface compatibility.
|
|
2
|
+
* @deprecated Use VerbosityControl from ./verbosity-control.tsx instead.
|
|
11
3
|
*/
|
|
12
|
-
export
|
|
13
|
-
export {};
|
|
4
|
+
export { VerbosityControl as DensityControl } from "./verbosity-control.js";
|
|
14
5
|
//# sourceMappingURL=density-control.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"density-control.d.ts","sourceRoot":"","sources":["../../src/components/density-control.tsx"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"density-control.d.ts","sourceRoot":"","sources":["../../src/components/density-control.tsx"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAA"}
|
|
@@ -1,18 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.DensityControl =
|
|
5
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
4
|
+
exports.DensityControl = void 0;
|
|
6
5
|
/**
|
|
7
|
-
*
|
|
8
|
-
* Two placement modes for cross-surface compatibility.
|
|
6
|
+
* @deprecated Use VerbosityControl from ./verbosity-control.tsx instead.
|
|
9
7
|
*/
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
}
|
|
8
|
+
var verbosity_control_js_1 = require("./verbosity-control.js");
|
|
9
|
+
Object.defineProperty(exports, "DensityControl", { enumerable: true, get: function () { return verbosity_control_js_1.VerbosityControl; } });
|
|
18
10
|
//# sourceMappingURL=density-control.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"density-control.js","sourceRoot":"","sources":["../../src/components/density-control.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA
|
|
1
|
+
{"version":3,"file":"density-control.js","sourceRoot":"","sources":["../../src/components/density-control.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;;AAEZ;;GAEG;AAEH,+DAA2E;AAAlE,sHAAA,gBAAgB,OAAkB"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @deprecated Use
|
|
3
|
-
* This file re-exports the new component for backward compatibility.
|
|
2
|
+
* @deprecated Use VerbosityControl from ./verbosity-control.tsx instead.
|
|
4
3
|
*/
|
|
5
|
-
export {
|
|
4
|
+
export { VerbosityControl as FocusModeControl } from "./verbosity-control.js";
|
|
6
5
|
//# 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
|
|
1
|
+
{"version":3,"file":"focus-mode-control.d.ts","sourceRoot":"","sources":["../../src/components/focus-mode-control.tsx"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,IAAI,gBAAgB,EAAE,MAAM,wBAAwB,CAAA"}
|
|
@@ -3,9 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.FocusModeControl = void 0;
|
|
5
5
|
/**
|
|
6
|
-
* @deprecated Use
|
|
7
|
-
* This file re-exports the new component for backward compatibility.
|
|
6
|
+
* @deprecated Use VerbosityControl from ./verbosity-control.tsx instead.
|
|
8
7
|
*/
|
|
9
|
-
var
|
|
10
|
-
Object.defineProperty(exports, "FocusModeControl", { enumerable: true, get: function () { return
|
|
8
|
+
var verbosity_control_js_1 = require("./verbosity-control.js");
|
|
9
|
+
Object.defineProperty(exports, "FocusModeControl", { enumerable: true, get: function () { return verbosity_control_js_1.VerbosityControl; } });
|
|
11
10
|
//# 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;;;;AAEZ
|
|
1
|
+
{"version":3,"file":"focus-mode-control.js","sourceRoot":"","sources":["../../src/components/focus-mode-control.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;;AAEZ;;GAEG;AAEH,+DAA6E;AAApE,wHAAA,gBAAgB,OAAoB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { MessageViewMode } from "@portablecore/types/chat";
|
|
2
|
+
interface VerbosityControlProps {
|
|
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 Verbosity: Long / Short / Smart.
|
|
10
|
+
* Two placement modes for cross-surface compatibility.
|
|
11
|
+
*/
|
|
12
|
+
export declare function VerbosityControl({ viewMode, onSetViewMode, placement, }: VerbosityControlProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=verbosity-control.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verbosity-control.d.ts","sourceRoot":"","sources":["../../src/components/verbosity-control.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE/D,UAAU,qBAAqB;IAC7B,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,gBAAgB,CAAC,EAC/B,QAAQ,EACR,aAAa,EACb,SAAsB,GACvB,EAAE,qBAAqB,2CA0EvB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.VerbosityControl = VerbosityControl;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
/**
|
|
7
|
+
* Segmented control for Verbosity: Long / Short / Smart.
|
|
8
|
+
* Two placement modes for cross-surface compatibility.
|
|
9
|
+
*/
|
|
10
|
+
function VerbosityControl({ 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("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("smart"), className: `p-1.5 rounded-md transition-all ${viewMode === "smart" ? activeClasses : inactiveClasses}`, title: "Smart: Recent messages long, older messages short", 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=verbosity-control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verbosity-control.js","sourceRoot":"","sources":["../../src/components/verbosity-control.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;AAeZ,4CA8EC;;AAlFD;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,aAAa,EACb,SAAS,GAAG,UAAU,GACA;IACtB,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,35 +1,6 @@
|
|
|
1
|
-
import type { LiteMessage, MessageViewMode } from "@portablecore/types/chat";
|
|
2
|
-
interface UseContentDensityOptions {
|
|
3
|
-
messages: LiteMessage[];
|
|
4
|
-
initialViewMode?: MessageViewMode;
|
|
5
|
-
currentUserId: string;
|
|
6
|
-
onViewModeChange?: (mode: MessageViewMode) => void;
|
|
7
|
-
/** How many recent messages stay full in Smart mode (default 10) */
|
|
8
|
-
recentMessageCount?: number;
|
|
9
|
-
}
|
|
10
|
-
export interface ContentDensityState {
|
|
11
|
-
viewMode: MessageViewMode;
|
|
12
|
-
setViewMode: (mode: MessageViewMode) => void;
|
|
13
|
-
/** True when the message should render shortContent instead of content */
|
|
14
|
-
shouldShowShort: (messageId: string) => boolean;
|
|
15
|
-
/** Toggle a single message between expanded/collapsed */
|
|
16
|
-
toggleExpanded: (messageId: string, currentlyShowingFull: boolean) => void;
|
|
17
|
-
}
|
|
18
1
|
/**
|
|
19
|
-
*
|
|
20
|
-
* Group chats and long chats default to Smart; short chats default to Full.
|
|
2
|
+
* @deprecated Use useVerbosity from ./use-verbosity.ts instead.
|
|
21
3
|
*/
|
|
22
|
-
export
|
|
23
|
-
|
|
24
|
-
* Manages Content Density state: view mode, per-message expansion overrides,
|
|
25
|
-
* and the core logic for deciding whether to show short or full content.
|
|
26
|
-
*
|
|
27
|
-
* Mode behaviors:
|
|
28
|
-
* - "full": all messages expanded
|
|
29
|
-
* - "brief": all messages with shortContent are compressed
|
|
30
|
-
* - "smart": recency-weighted auto-selection. Recent N messages stay full,
|
|
31
|
-
* older messages that the current user prompted stay full, all others brief.
|
|
32
|
-
*/
|
|
33
|
-
export declare function useContentDensity({ messages, initialViewMode, currentUserId, onViewModeChange, recentMessageCount, }: UseContentDensityOptions): ContentDensityState;
|
|
34
|
-
export {};
|
|
4
|
+
export { useVerbosity as useContentDensity, getDefaultViewMode } from "./use-verbosity.js";
|
|
5
|
+
export type { VerbosityState as ContentDensityState } from "./use-verbosity.js";
|
|
35
6
|
//# sourceMappingURL=use-content-density.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-content-density.d.ts","sourceRoot":"","sources":["../../src/hooks/use-content-density.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use-content-density.d.ts","sourceRoot":"","sources":["../../src/hooks/use-content-density.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,EAAE,YAAY,IAAI,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAC1F,YAAY,EAAE,cAAc,IAAI,mBAAmB,EAAE,MAAM,oBAAoB,CAAA"}
|
|
@@ -1,96 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.getDefaultViewMode =
|
|
5
|
-
exports.useContentDensity = useContentDensity;
|
|
6
|
-
const react_1 = require("react");
|
|
4
|
+
exports.getDefaultViewMode = exports.useContentDensity = void 0;
|
|
7
5
|
/**
|
|
8
|
-
*
|
|
9
|
-
* Group chats and long chats default to Smart; short chats default to Full.
|
|
6
|
+
* @deprecated Use useVerbosity from ./use-verbosity.ts instead.
|
|
10
7
|
*/
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
if (chatLength > 50)
|
|
15
|
-
return "smart";
|
|
16
|
-
return "full";
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Manages Content Density state: view mode, per-message expansion overrides,
|
|
20
|
-
* and the core logic for deciding whether to show short or full content.
|
|
21
|
-
*
|
|
22
|
-
* Mode behaviors:
|
|
23
|
-
* - "full": all messages expanded
|
|
24
|
-
* - "brief": all messages with shortContent are compressed
|
|
25
|
-
* - "smart": recency-weighted auto-selection. Recent N messages stay full,
|
|
26
|
-
* older messages that the current user prompted stay full, all others brief.
|
|
27
|
-
*/
|
|
28
|
-
function useContentDensity({ messages, initialViewMode = "smart", currentUserId, onViewModeChange, recentMessageCount = 10, }) {
|
|
29
|
-
const [viewMode, setViewModeInternal] = (0, react_1.useState)(initialViewMode);
|
|
30
|
-
const [overrides, setOverrides] = (0, react_1.useState)(() => new Map());
|
|
31
|
-
const initialViewModeRef = (0, react_1.useRef)(initialViewMode);
|
|
32
|
-
const setViewMode = (0, react_1.useCallback)((mode) => {
|
|
33
|
-
setViewModeInternal(mode);
|
|
34
|
-
setOverrides(new Map());
|
|
35
|
-
onViewModeChange?.(mode);
|
|
36
|
-
}, [onViewModeChange]);
|
|
37
|
-
(0, react_1.useEffect)(() => {
|
|
38
|
-
if (viewMode !== initialViewModeRef.current) {
|
|
39
|
-
onViewModeChange?.(viewMode);
|
|
40
|
-
}
|
|
41
|
-
}, []); // eslint-disable-line react-hooks/exhaustive-deps
|
|
42
|
-
const messageIndex = (0, react_1.useMemo)(() => {
|
|
43
|
-
const map = new Map();
|
|
44
|
-
for (let i = 0; i < messages.length; i++) {
|
|
45
|
-
map.set(messages[i].id, i);
|
|
46
|
-
}
|
|
47
|
-
return map;
|
|
48
|
-
}, [messages]);
|
|
49
|
-
const shouldShowShort = (0, react_1.useCallback)((messageId) => {
|
|
50
|
-
const idx = messageIndex.get(messageId);
|
|
51
|
-
if (idx === undefined)
|
|
52
|
-
return false;
|
|
53
|
-
const msg = messages[idx];
|
|
54
|
-
if (!msg || msg.role !== "assistant" || !msg.shortContent)
|
|
55
|
-
return false;
|
|
56
|
-
const override = overrides.get(messageId);
|
|
57
|
-
if (override === "expanded")
|
|
58
|
-
return false;
|
|
59
|
-
if (override === "collapsed")
|
|
60
|
-
return true;
|
|
61
|
-
if (viewMode === "full")
|
|
62
|
-
return false;
|
|
63
|
-
if (viewMode === "brief")
|
|
64
|
-
return true;
|
|
65
|
-
// Smart mode: recency + authorship
|
|
66
|
-
if (viewMode === "smart") {
|
|
67
|
-
const totalMessages = messages.length;
|
|
68
|
-
const isRecent = totalMessages - idx <= recentMessageCount;
|
|
69
|
-
if (isRecent)
|
|
70
|
-
return false;
|
|
71
|
-
// Check if the current user prompted this response
|
|
72
|
-
for (let i = idx - 1; i >= 0; i--) {
|
|
73
|
-
const prevMsg = messages[i];
|
|
74
|
-
if (prevMsg && prevMsg.role === "user") {
|
|
75
|
-
const promptingUserId = prevMsg.senderUserId || currentUserId;
|
|
76
|
-
return promptingUserId !== currentUserId;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return false;
|
|
81
|
-
}, [messages, messageIndex, overrides, viewMode, currentUserId, recentMessageCount]);
|
|
82
|
-
const toggleExpanded = (0, react_1.useCallback)((messageId, currentlyShowingFull) => {
|
|
83
|
-
setOverrides((prev) => {
|
|
84
|
-
const next = new Map(prev);
|
|
85
|
-
next.set(messageId, currentlyShowingFull ? "collapsed" : "expanded");
|
|
86
|
-
return next;
|
|
87
|
-
});
|
|
88
|
-
}, []);
|
|
89
|
-
return {
|
|
90
|
-
viewMode,
|
|
91
|
-
setViewMode,
|
|
92
|
-
shouldShowShort,
|
|
93
|
-
toggleExpanded,
|
|
94
|
-
};
|
|
95
|
-
}
|
|
8
|
+
var use_verbosity_js_1 = require("./use-verbosity.js");
|
|
9
|
+
Object.defineProperty(exports, "useContentDensity", { enumerable: true, get: function () { return use_verbosity_js_1.useVerbosity; } });
|
|
10
|
+
Object.defineProperty(exports, "getDefaultViewMode", { enumerable: true, get: function () { return use_verbosity_js_1.getDefaultViewMode; } });
|
|
96
11
|
//# sourceMappingURL=use-content-density.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-content-density.js","sourceRoot":"","sources":["../../src/hooks/use-content-density.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA
|
|
1
|
+
{"version":3,"file":"use-content-density.js","sourceRoot":"","sources":["../../src/hooks/use-content-density.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;;AAEZ;;GAEG;AAEH,uDAA0F;AAAjF,qHAAA,YAAY,OAAqB;AAAE,sHAAA,kBAAkB,OAAA"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @deprecated Use
|
|
3
|
-
* This file re-exports the new hook for backward compatibility.
|
|
2
|
+
* @deprecated Use useVerbosity from ./use-verbosity.ts instead.
|
|
4
3
|
*/
|
|
5
|
-
export {
|
|
6
|
-
export type {
|
|
4
|
+
export { useVerbosity as useFocusMode } from "./use-verbosity.js";
|
|
5
|
+
export type { VerbosityState as FocusModeState } from "./use-verbosity.js";
|
|
7
6
|
//# sourceMappingURL=use-focus-mode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-focus-mode.d.ts","sourceRoot":"","sources":["../../src/hooks/use-focus-mode.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"use-focus-mode.d.ts","sourceRoot":"","sources":["../../src/hooks/use-focus-mode.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,EAAE,YAAY,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjE,YAAY,EAAE,cAAc,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAA"}
|
|
@@ -3,9 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.useFocusMode = void 0;
|
|
5
5
|
/**
|
|
6
|
-
* @deprecated Use
|
|
7
|
-
* This file re-exports the new hook for backward compatibility.
|
|
6
|
+
* @deprecated Use useVerbosity from ./use-verbosity.ts instead.
|
|
8
7
|
*/
|
|
9
|
-
var
|
|
10
|
-
Object.defineProperty(exports, "useFocusMode", { enumerable: true, get: function () { return
|
|
8
|
+
var use_verbosity_js_1 = require("./use-verbosity.js");
|
|
9
|
+
Object.defineProperty(exports, "useFocusMode", { enumerable: true, get: function () { return use_verbosity_js_1.useVerbosity; } });
|
|
11
10
|
//# sourceMappingURL=use-focus-mode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-focus-mode.js","sourceRoot":"","sources":["../../src/hooks/use-focus-mode.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;;AAEZ
|
|
1
|
+
{"version":3,"file":"use-focus-mode.js","sourceRoot":"","sources":["../../src/hooks/use-focus-mode.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;;AAEZ;;GAEG;AAEH,uDAAiE;AAAxD,gHAAA,YAAY,OAAgB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { LiteMessage, MessageViewMode } from "@portablecore/types/chat";
|
|
2
|
+
interface UseVerbosityOptions {
|
|
3
|
+
messages: LiteMessage[];
|
|
4
|
+
initialViewMode?: MessageViewMode;
|
|
5
|
+
currentUserId: string;
|
|
6
|
+
onViewModeChange?: (mode: MessageViewMode) => void;
|
|
7
|
+
/** How many recent messages stay long in Smart mode (default 10) */
|
|
8
|
+
recentMessageCount?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface VerbosityState {
|
|
11
|
+
viewMode: MessageViewMode;
|
|
12
|
+
setViewMode: (mode: MessageViewMode) => void;
|
|
13
|
+
/** True when the message should render shortContent instead of content */
|
|
14
|
+
shouldShowShort: (messageId: string) => boolean;
|
|
15
|
+
/** Toggle a single message between expanded/collapsed */
|
|
16
|
+
toggleExpanded: (messageId: string, currentlyShowingFull: boolean) => void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Auto-determine the default view mode based on chat characteristics.
|
|
20
|
+
* Group chats and long chats default to Smart; short chats default to Long.
|
|
21
|
+
*/
|
|
22
|
+
export declare function getDefaultViewMode(chatLength: number, chatType?: string): MessageViewMode;
|
|
23
|
+
/**
|
|
24
|
+
* Manages Verbosity state: view mode, per-message expansion overrides,
|
|
25
|
+
* and the core logic for deciding whether to show short or long content.
|
|
26
|
+
*
|
|
27
|
+
* Mode behaviors:
|
|
28
|
+
* - "long": all messages expanded
|
|
29
|
+
* - "short": all messages with shortContent are compressed
|
|
30
|
+
* - "smart": recency-weighted auto-selection. Recent N messages stay long,
|
|
31
|
+
* older messages that the current user prompted stay long, all others short.
|
|
32
|
+
*/
|
|
33
|
+
export declare function useVerbosity({ messages, initialViewMode, currentUserId, onViewModeChange, recentMessageCount, }: UseVerbosityOptions): VerbosityState;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=use-verbosity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-verbosity.d.ts","sourceRoot":"","sources":["../../src/hooks/use-verbosity.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE5E,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAA;IAClD,oEAAoE;IACpE,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,eAAe,CAAA;IACzB,WAAW,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAA;IAC5C,0EAA0E;IAC1E,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAA;IAC/C,yDAAyD;IACzD,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,KAAK,IAAI,CAAA;CAC3E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,GAChB,eAAe,CAIjB;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,eAAyB,EACzB,aAAa,EACb,gBAAgB,EAChB,kBAAuB,GACxB,EAAE,mBAAmB,GAAG,cAAc,CAkFtC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.getDefaultViewMode = getDefaultViewMode;
|
|
5
|
+
exports.useVerbosity = useVerbosity;
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
/**
|
|
8
|
+
* Auto-determine the default view mode based on chat characteristics.
|
|
9
|
+
* Group chats and long chats default to Smart; short chats default to Long.
|
|
10
|
+
*/
|
|
11
|
+
function getDefaultViewMode(chatLength, chatType) {
|
|
12
|
+
if (chatType === "group")
|
|
13
|
+
return "smart";
|
|
14
|
+
if (chatLength > 50)
|
|
15
|
+
return "smart";
|
|
16
|
+
return "long";
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Manages Verbosity state: view mode, per-message expansion overrides,
|
|
20
|
+
* and the core logic for deciding whether to show short or long content.
|
|
21
|
+
*
|
|
22
|
+
* Mode behaviors:
|
|
23
|
+
* - "long": all messages expanded
|
|
24
|
+
* - "short": all messages with shortContent are compressed
|
|
25
|
+
* - "smart": recency-weighted auto-selection. Recent N messages stay long,
|
|
26
|
+
* older messages that the current user prompted stay long, all others short.
|
|
27
|
+
*/
|
|
28
|
+
function useVerbosity({ messages, initialViewMode = "smart", currentUserId, onViewModeChange, recentMessageCount = 10, }) {
|
|
29
|
+
const [viewMode, setViewModeInternal] = (0, react_1.useState)(initialViewMode);
|
|
30
|
+
const [overrides, setOverrides] = (0, react_1.useState)(() => new Map());
|
|
31
|
+
const initialViewModeRef = (0, react_1.useRef)(initialViewMode);
|
|
32
|
+
const setViewMode = (0, react_1.useCallback)((mode) => {
|
|
33
|
+
setViewModeInternal(mode);
|
|
34
|
+
setOverrides(new Map());
|
|
35
|
+
onViewModeChange?.(mode);
|
|
36
|
+
}, [onViewModeChange]);
|
|
37
|
+
(0, react_1.useEffect)(() => {
|
|
38
|
+
if (viewMode !== initialViewModeRef.current) {
|
|
39
|
+
onViewModeChange?.(viewMode);
|
|
40
|
+
}
|
|
41
|
+
}, []); // eslint-disable-line react-hooks/exhaustive-deps
|
|
42
|
+
const messageIndex = (0, react_1.useMemo)(() => {
|
|
43
|
+
const map = new Map();
|
|
44
|
+
for (let i = 0; i < messages.length; i++) {
|
|
45
|
+
map.set(messages[i].id, i);
|
|
46
|
+
}
|
|
47
|
+
return map;
|
|
48
|
+
}, [messages]);
|
|
49
|
+
const shouldShowShort = (0, react_1.useCallback)((messageId) => {
|
|
50
|
+
const idx = messageIndex.get(messageId);
|
|
51
|
+
if (idx === undefined)
|
|
52
|
+
return false;
|
|
53
|
+
const msg = messages[idx];
|
|
54
|
+
if (!msg || msg.role !== "assistant" || !msg.shortContent)
|
|
55
|
+
return false;
|
|
56
|
+
const override = overrides.get(messageId);
|
|
57
|
+
if (override === "expanded")
|
|
58
|
+
return false;
|
|
59
|
+
if (override === "collapsed")
|
|
60
|
+
return true;
|
|
61
|
+
if (viewMode === "long")
|
|
62
|
+
return false;
|
|
63
|
+
if (viewMode === "short")
|
|
64
|
+
return true;
|
|
65
|
+
// Smart mode: recency + authorship
|
|
66
|
+
if (viewMode === "smart") {
|
|
67
|
+
const totalMessages = messages.length;
|
|
68
|
+
const isRecent = totalMessages - idx <= recentMessageCount;
|
|
69
|
+
if (isRecent)
|
|
70
|
+
return false;
|
|
71
|
+
// Check if the current user prompted this response
|
|
72
|
+
for (let i = idx - 1; i >= 0; i--) {
|
|
73
|
+
const prevMsg = messages[i];
|
|
74
|
+
if (prevMsg && prevMsg.role === "user") {
|
|
75
|
+
const promptingUserId = prevMsg.senderUserId || currentUserId;
|
|
76
|
+
return promptingUserId !== currentUserId;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return false;
|
|
81
|
+
}, [messages, messageIndex, overrides, viewMode, currentUserId, recentMessageCount]);
|
|
82
|
+
const toggleExpanded = (0, react_1.useCallback)((messageId, currentlyShowingFull) => {
|
|
83
|
+
setOverrides((prev) => {
|
|
84
|
+
const next = new Map(prev);
|
|
85
|
+
next.set(messageId, currentlyShowingFull ? "collapsed" : "expanded");
|
|
86
|
+
return next;
|
|
87
|
+
});
|
|
88
|
+
}, []);
|
|
89
|
+
return {
|
|
90
|
+
viewMode,
|
|
91
|
+
setViewMode,
|
|
92
|
+
shouldShowShort,
|
|
93
|
+
toggleExpanded,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=use-verbosity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-verbosity.js","sourceRoot":"","sources":["../../src/hooks/use-verbosity.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -38,12 +38,15 @@ export { useProviderSelection } from "./hooks/use-provider-selection.js";
|
|
|
38
38
|
export type { ProviderSelectionState } from "./hooks/use-provider-selection.js";
|
|
39
39
|
export { ThreadFilterHeader } from "./components/thread-filter-header.js";
|
|
40
40
|
export { useThreadFilter } from "./hooks/use-thread-filter.js";
|
|
41
|
-
export {
|
|
42
|
-
export {
|
|
43
|
-
export type {
|
|
44
|
-
export {
|
|
45
|
-
export {
|
|
46
|
-
export
|
|
41
|
+
export { VerbosityControl } from "./components/verbosity-control.js";
|
|
42
|
+
export { useVerbosity, getDefaultViewMode } from "./hooks/use-verbosity.js";
|
|
43
|
+
export type { VerbosityState } from "./hooks/use-verbosity.js";
|
|
44
|
+
export { VerbosityControl as DensityControl } from "./components/verbosity-control.js";
|
|
45
|
+
export { VerbosityControl as FocusModeControl } from "./components/verbosity-control.js";
|
|
46
|
+
export { useVerbosity as useContentDensity } from "./hooks/use-verbosity.js";
|
|
47
|
+
export { useVerbosity as useFocusMode } from "./hooks/use-verbosity.js";
|
|
48
|
+
export type { VerbosityState as ContentDensityState } from "./hooks/use-verbosity.js";
|
|
49
|
+
export type { VerbosityState as FocusModeState } from "./hooks/use-verbosity.js";
|
|
47
50
|
export { useVirtualMessages, VIRTUALIZATION_THRESHOLD, PRE_MEASURE_THRESHOLD } from "./hooks/use-virtual-messages.js";
|
|
48
51
|
export type { VirtualState, MessageHeights } from "./hooks/use-virtual-messages.js";
|
|
49
52
|
export { formatTime, getDateSeparator, isDifferentDay } from "./utils/time.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,kBAAkB,EAAE,MAAM,sCAAsC,CAAA;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAG9D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
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.PRE_MEASURE_THRESHOLD = exports.VIRTUALIZATION_THRESHOLD = exports.useVirtualMessages = exports.useFocusMode = exports.FocusModeControl = exports.getDefaultViewMode = exports.
|
|
14
|
+
exports.defaultMarkdownComponents = exports.rehypePlugins = exports.remarkPlugins = exports.groupMessages = exports.isDifferentDay = exports.getDateSeparator = exports.formatTime = exports.PRE_MEASURE_THRESHOLD = exports.VIRTUALIZATION_THRESHOLD = exports.useVirtualMessages = exports.useFocusMode = exports.useContentDensity = exports.FocusModeControl = exports.DensityControl = exports.getDefaultViewMode = exports.useVerbosity = exports.VerbosityControl = 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; } });
|
|
@@ -64,17 +64,21 @@ var thread_filter_header_js_1 = require("./components/thread-filter-header.js");
|
|
|
64
64
|
Object.defineProperty(exports, "ThreadFilterHeader", { enumerable: true, get: function () { return thread_filter_header_js_1.ThreadFilterHeader; } });
|
|
65
65
|
var use_thread_filter_js_1 = require("./hooks/use-thread-filter.js");
|
|
66
66
|
Object.defineProperty(exports, "useThreadFilter", { enumerable: true, get: function () { return use_thread_filter_js_1.useThreadFilter; } });
|
|
67
|
-
//
|
|
68
|
-
var
|
|
69
|
-
Object.defineProperty(exports, "
|
|
70
|
-
var
|
|
71
|
-
Object.defineProperty(exports, "
|
|
72
|
-
Object.defineProperty(exports, "getDefaultViewMode", { enumerable: true, get: function () { return
|
|
67
|
+
// Verbosity (replaces Focus Mode / Content Density)
|
|
68
|
+
var verbosity_control_js_1 = require("./components/verbosity-control.js");
|
|
69
|
+
Object.defineProperty(exports, "VerbosityControl", { enumerable: true, get: function () { return verbosity_control_js_1.VerbosityControl; } });
|
|
70
|
+
var use_verbosity_js_1 = require("./hooks/use-verbosity.js");
|
|
71
|
+
Object.defineProperty(exports, "useVerbosity", { enumerable: true, get: function () { return use_verbosity_js_1.useVerbosity; } });
|
|
72
|
+
Object.defineProperty(exports, "getDefaultViewMode", { enumerable: true, get: function () { return use_verbosity_js_1.getDefaultViewMode; } });
|
|
73
73
|
// Legacy aliases for backward compat
|
|
74
|
-
var
|
|
75
|
-
Object.defineProperty(exports, "
|
|
76
|
-
var
|
|
77
|
-
Object.defineProperty(exports, "
|
|
74
|
+
var verbosity_control_js_2 = require("./components/verbosity-control.js");
|
|
75
|
+
Object.defineProperty(exports, "DensityControl", { enumerable: true, get: function () { return verbosity_control_js_2.VerbosityControl; } });
|
|
76
|
+
var verbosity_control_js_3 = require("./components/verbosity-control.js");
|
|
77
|
+
Object.defineProperty(exports, "FocusModeControl", { enumerable: true, get: function () { return verbosity_control_js_3.VerbosityControl; } });
|
|
78
|
+
var use_verbosity_js_2 = require("./hooks/use-verbosity.js");
|
|
79
|
+
Object.defineProperty(exports, "useContentDensity", { enumerable: true, get: function () { return use_verbosity_js_2.useVerbosity; } });
|
|
80
|
+
var use_verbosity_js_3 = require("./hooks/use-verbosity.js");
|
|
81
|
+
Object.defineProperty(exports, "useFocusMode", { enumerable: true, get: function () { return use_verbosity_js_3.useVerbosity; } });
|
|
78
82
|
// Virtualization
|
|
79
83
|
var use_virtual_messages_js_1 = require("./hooks/use-virtual-messages.js");
|
|
80
84
|
Object.defineProperty(exports, "useVirtualMessages", { enumerable: true, get: function () { return use_virtual_messages_js_1.useVirtualMessages; } });
|
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,mBAAmB;AACnB,gFAAyE;AAAhE,6HAAA,kBAAkB,OAAA;AAC3B,qEAA8D;AAArD,uHAAA,eAAe,OAAA;AAExB,
|
|
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,oDAAoD;AACpD,0EAAoE;AAA3D,wHAAA,gBAAgB,OAAA;AACzB,6DAA2E;AAAlE,gHAAA,YAAY,OAAA;AAAE,sHAAA,kBAAkB,OAAA;AAGzC,qCAAqC;AACrC,0EAAsF;AAA7E,sHAAA,gBAAgB,OAAkB;AAC3C,0EAAwF;AAA/E,wHAAA,gBAAgB,OAAoB;AAC7C,6DAA4E;AAAnE,qHAAA,YAAY,OAAqB;AAC1C,6DAAuE;AAA9D,gHAAA,YAAY,OAAgB;AAIrC,iBAAiB;AACjB,2EAAqH;AAA5G,6HAAA,kBAAkB,OAAA;AAAE,mIAAA,wBAAwB,OAAA;AAAE,gIAAA,qBAAqB,OAAA;AAG5E,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.3.
|
|
3
|
+
"version": "0.3.2",
|
|
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,8 +28,8 @@
|
|
|
28
28
|
"rehype-raw": "^7.0.0",
|
|
29
29
|
"remark-breaks": "^4.0.0",
|
|
30
30
|
"remark-gfm": "^4.0.1",
|
|
31
|
-
"@portablecore/
|
|
32
|
-
"@portablecore/
|
|
31
|
+
"@portablecore/types": "0.12.2",
|
|
32
|
+
"@portablecore/chat-runtime": "0.1.0"
|
|
33
33
|
},
|
|
34
34
|
"peerDependencies": {
|
|
35
35
|
"@nvq/flowtoken": ">=2.0.0",
|