@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.
@@ -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 use_content_density_js_1 = require("./hooks/use-content-density.js");
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 density_control_js_1 = require("./components/density-control.js");
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
- // Content Density is always-on. Supports both old focusMode and new contentDensity config.
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 densityConfig = config.contentDensity ?? (config.focusMode?.enabled ? {
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 density = (0, use_content_density_js_1.useContentDensity)({
62
+ const verbosity = (0, use_verbosity_js_1.useVerbosity)({
63
63
  messages: threadFilter.filteredMessages,
64
- initialViewMode: densityConfig?.initialViewMode ?? (0, use_content_density_js_1.getDefaultViewMode)(threadFilter.filteredMessages.length, config.experts && config.experts.length > 1 ? "group" : undefined),
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: densityConfig?.onViewModeChange,
67
- recentMessageCount: densityConfig?.recentMessageCount,
66
+ onViewModeChange: verbosityConfig?.onViewModeChange,
67
+ recentMessageCount: verbosityConfig?.recentMessageCount,
68
68
  });
69
- const densityEnabled = true;
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 density mode or thread changes
72
+ // measureVersion triggers virtualizer re-measurement on verbosity mode or thread changes
73
73
  const measureVersion = (0, react_1.useMemo)(() => {
74
- const parts = [density.viewMode, selectedThreadId ?? "all"];
74
+ const parts = [verbosity.viewMode, selectedThreadId ?? "all"];
75
75
  return parts.join("|");
76
- }, [density.viewMode, selectedThreadId]);
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: densityEnabled
91
- ? (messageId) => !density.shouldShowShort(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: 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
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":"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"}
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
- * Segmented control for Content Density: Full / Brief / Smart.
10
- * Two placement modes for cross-surface compatibility.
2
+ * @deprecated Use VerbosityControl from ./verbosity-control.tsx instead.
11
3
  */
12
- export declare function DensityControl({ viewMode, onSetViewMode, placement, }: DensityControlProps): import("react/jsx-runtime").JSX.Element;
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,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"}
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 = DensityControl;
5
- const jsx_runtime_1 = require("react/jsx-runtime");
4
+ exports.DensityControl = void 0;
6
5
  /**
7
- * Segmented control for Content Density: Full / Brief / Smart.
8
- * Two placement modes for cross-surface compatibility.
6
+ * @deprecated Use VerbosityControl from ./verbosity-control.tsx instead.
9
7
  */
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
- }
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;;;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
+ {"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 DensityControl from ./density-control.tsx instead.
3
- * This file re-exports the new component for backward compatibility.
2
+ * @deprecated Use VerbosityControl from ./verbosity-control.tsx instead.
4
3
  */
5
- export { DensityControl as FocusModeControl } from "./density-control.js";
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;;;GAGG;AAEH,OAAO,EAAE,cAAc,IAAI,gBAAgB,EAAE,MAAM,sBAAsB,CAAA"}
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 DensityControl from ./density-control.tsx instead.
7
- * This file re-exports the new component for backward compatibility.
6
+ * @deprecated Use VerbosityControl from ./verbosity-control.tsx instead.
8
7
  */
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; } });
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;;;GAGG;AAEH,2DAAyE;AAAhE,sHAAA,cAAc,OAAoB"}
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
- * Auto-determine the default view mode based on chat characteristics.
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 declare function getDefaultViewMode(chatLength: number, chatType?: string): MessageViewMode;
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":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE5E,UAAU,wBAAwB;IAChC,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,mBAAmB;IAClC,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,iBAAiB,CAAC,EAChC,QAAQ,EACR,eAAyB,EACzB,aAAa,EACb,gBAAgB,EAChB,kBAAuB,GACxB,EAAE,wBAAwB,GAAG,mBAAmB,CAkFhD"}
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 = getDefaultViewMode;
5
- exports.useContentDensity = useContentDensity;
6
- const react_1 = require("react");
4
+ exports.getDefaultViewMode = exports.useContentDensity = void 0;
7
5
  /**
8
- * Auto-determine the default view mode based on chat characteristics.
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
- function getDefaultViewMode(chatLength, chatType) {
12
- if (chatType === "group")
13
- return "smart";
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":"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"}
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 useContentDensity from ./use-content-density.ts instead.
3
- * This file re-exports the new hook for backward compatibility.
2
+ * @deprecated Use useVerbosity from ./use-verbosity.ts instead.
4
3
  */
5
- export { useContentDensity as useFocusMode } from "./use-content-density.js";
6
- export type { ContentDensityState as FocusModeState } from "./use-content-density.js";
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;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,IAAI,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC5E,YAAY,EAAE,mBAAmB,IAAI,cAAc,EAAE,MAAM,0BAA0B,CAAA"}
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 useContentDensity from ./use-content-density.ts instead.
7
- * This file re-exports the new hook for backward compatibility.
6
+ * @deprecated Use useVerbosity from ./use-verbosity.ts instead.
8
7
  */
9
- var use_content_density_js_1 = require("./use-content-density.js");
10
- Object.defineProperty(exports, "useFocusMode", { enumerable: true, get: function () { return use_content_density_js_1.useContentDensity; } });
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;;;GAGG;AAEH,mEAA4E;AAAnE,sHAAA,iBAAiB,OAAgB"}
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 { DensityControl } from "./components/density-control.js";
42
- export { useContentDensity, getDefaultViewMode } from "./hooks/use-content-density.js";
43
- export type { ContentDensityState } from "./hooks/use-content-density.js";
44
- export { DensityControl as FocusModeControl } from "./components/density-control.js";
45
- export { useContentDensity as useFocusMode } from "./hooks/use-content-density.js";
46
- export type { ContentDensityState as FocusModeState } from "./hooks/use-content-density.js";
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";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
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.useContentDensity = exports.DensityControl = 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;
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
- // Content Density (replaces Focus Mode)
68
- var density_control_js_1 = require("./components/density-control.js");
69
- Object.defineProperty(exports, "DensityControl", { enumerable: true, get: function () { return density_control_js_1.DensityControl; } });
70
- var use_content_density_js_1 = require("./hooks/use-content-density.js");
71
- Object.defineProperty(exports, "useContentDensity", { enumerable: true, get: function () { return use_content_density_js_1.useContentDensity; } });
72
- Object.defineProperty(exports, "getDefaultViewMode", { enumerable: true, get: function () { return use_content_density_js_1.getDefaultViewMode; } });
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 density_control_js_2 = require("./components/density-control.js");
75
- Object.defineProperty(exports, "FocusModeControl", { enumerable: true, get: function () { return density_control_js_2.DensityControl; } });
76
- var use_content_density_js_2 = require("./hooks/use-content-density.js");
77
- Object.defineProperty(exports, "useFocusMode", { enumerable: true, get: function () { return use_content_density_js_2.useContentDensity; } });
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,wCAAwC;AACxC,sEAAgE;AAAvD,oHAAA,cAAc,OAAA;AACvB,yEAAsF;AAA7E,2HAAA,iBAAiB,OAAA;AAAE,4HAAA,kBAAkB,OAAA;AAG9C,qCAAqC;AACrC,sEAAoF;AAA3E,sHAAA,cAAc,OAAoB;AAC3C,yEAAkF;AAAzE,sHAAA,iBAAiB,OAAgB;AAG1C,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"}
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.1",
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/chat-runtime": "0.1.0",
32
- "@portablecore/types": "0.12.1"
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",