@portablecore/chat 0.3.1 → 0.3.3

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.
Files changed (32) hide show
  1. package/dist/chat-interface-core.d.ts.map +1 -1
  2. package/dist/chat-interface-core.js +17 -15
  3. package/dist/chat-interface-core.js.map +1 -1
  4. package/dist/components/density-control.d.ts +2 -11
  5. package/dist/components/density-control.d.ts.map +1 -1
  6. package/dist/components/density-control.js +4 -12
  7. package/dist/components/density-control.js.map +1 -1
  8. package/dist/components/focus-mode-control.d.ts +2 -3
  9. package/dist/components/focus-mode-control.d.ts.map +1 -1
  10. package/dist/components/focus-mode-control.js +3 -4
  11. package/dist/components/focus-mode-control.js.map +1 -1
  12. package/dist/components/verbosity-control.d.ts +15 -0
  13. package/dist/components/verbosity-control.d.ts.map +1 -0
  14. package/dist/components/verbosity-control.js +20 -0
  15. package/dist/components/verbosity-control.js.map +1 -0
  16. package/dist/hooks/use-content-density.d.ts +3 -32
  17. package/dist/hooks/use-content-density.d.ts.map +1 -1
  18. package/dist/hooks/use-content-density.js +5 -90
  19. package/dist/hooks/use-content-density.js.map +1 -1
  20. package/dist/hooks/use-focus-mode.d.ts +3 -4
  21. package/dist/hooks/use-focus-mode.d.ts.map +1 -1
  22. package/dist/hooks/use-focus-mode.js +3 -4
  23. package/dist/hooks/use-focus-mode.js.map +1 -1
  24. package/dist/hooks/use-verbosity.d.ts +41 -0
  25. package/dist/hooks/use-verbosity.d.ts.map +1 -0
  26. package/dist/hooks/use-verbosity.js +102 -0
  27. package/dist/hooks/use-verbosity.js.map +1 -0
  28. package/dist/index.d.ts +9 -6
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +15 -11
  31. package/dist/index.js.map +1 -1
  32. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"chat-interface-core.d.ts","sourceRoot":"","sources":["../src/chat-interface-core.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAa,MAAM,YAAY,CAAA;AAmBhE,UAAU,sBAAsB;IAC9B,MAAM,EAAE,mBAAmB,CAAA;IAE3B,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CACzC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,kBAAkB,GACnB,EAAE,sBAAsB,2CAsVxB"}
1
+ {"version":3,"file":"chat-interface-core.d.ts","sourceRoot":"","sources":["../src/chat-interface-core.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAa,MAAM,YAAY,CAAA;AAmBhE,UAAU,sBAAsB;IAC9B,MAAM,EAAE,mBAAmB,CAAA;IAE3B,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CACzC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,kBAAkB,GACnB,EAAE,sBAAsB,2CAwVxB"}
@@ -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,29 @@ 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
+ viewMode: verbosityConfig?.viewMode,
65
66
  currentUserId: config.currentUser.id,
66
- onViewModeChange: densityConfig?.onViewModeChange,
67
- recentMessageCount: densityConfig?.recentMessageCount,
67
+ onViewModeChange: verbosityConfig?.onViewModeChange,
68
+ recentMessageCount: verbosityConfig?.recentMessageCount,
68
69
  });
69
- const densityEnabled = true;
70
+ const verbosityEnabled = true;
71
+ const showBuiltInVerbosityControl = !verbosityConfig?.hideBuiltInControl;
70
72
  const displayMessages = threadFilter.filteredMessages;
71
73
  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
74
+ // measureVersion triggers virtualizer re-measurement on verbosity mode or thread changes
73
75
  const measureVersion = (0, react_1.useMemo)(() => {
74
- const parts = [density.viewMode, selectedThreadId ?? "all"];
76
+ const parts = [verbosity.viewMode, selectedThreadId ?? "all"];
75
77
  return parts.join("|");
76
- }, [density.viewMode, selectedThreadId]);
78
+ }, [verbosity.viewMode, selectedThreadId]);
77
79
  // Ref bridge: virtualizer is created after scroll hook, but scroll hook reads it via ref
78
80
  const virtualizerRef = (0, react_1.useRef)(null);
79
81
  const scroll = (0, use_chat_scroll_js_1.useChatScroll)({
@@ -87,8 +89,8 @@ function ChatInterfaceCore({ config, markdownComponents, }) {
87
89
  scrollRef: scroll.scrollRef,
88
90
  measureVersion: measureVersion.length,
89
91
  enabled: jsVirtualizationEnabled,
90
- getMessageIsExpanded: densityEnabled
91
- ? (messageId) => !density.shouldShowShort(messageId)
92
+ getMessageIsExpanded: verbosityEnabled
93
+ ? (messageId) => !verbosity.shouldShowShort(messageId)
92
94
  : undefined,
93
95
  });
94
96
  // Keep the ref in sync
@@ -228,7 +230,7 @@ function ChatInterfaceCore({ config, markdownComponents, }) {
228
230
  }
229
231
  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
232
  };
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
233
+ 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 && showBuiltInVerbosityControl && 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
234
  ? `Message ${config.expert.name}...`
233
235
  : "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
236
  }
@@ -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,15 @@
1
+ import type { MessageViewMode } from "@portablecore/types/chat";
2
+ interface VerbosityControlProps {
3
+ viewMode: MessageViewMode;
4
+ onSetViewMode: (mode: MessageViewMode) => void;
5
+ /** "floating" (bottom-left overlay) or "inline" (bare pill for embedding in headers) */
6
+ placement?: "floating" | "inline";
7
+ }
8
+ /**
9
+ * Segmented control for Verbosity: Long / Short / Smart.
10
+ * "floating" renders as an absolutely-positioned overlay.
11
+ * "inline" renders as a bare pill that fits into any flex container.
12
+ */
13
+ export declare function VerbosityControl({ viewMode, onSetViewMode, placement, }: VerbosityControlProps): import("react/jsx-runtime").JSX.Element;
14
+ export {};
15
+ //# 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,wFAAwF;IACxF,SAAS,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAA;CAClC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,aAAa,EACb,SAAsB,GACvB,EAAE,qBAAqB,2CA8EvB"}
@@ -0,0 +1,20 @@
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
+ * "floating" renders as an absolutely-positioned overlay.
9
+ * "inline" renders as a bare pill that fits into any flex container.
10
+ */
11
+ function VerbosityControl({ viewMode, onSetViewMode, placement = "floating", }) {
12
+ const activeClasses = "bg-blue-100 dark:bg-blue-900/50 text-blue-600 dark:text-blue-400";
13
+ const inactiveClasses = "text-slate-400 dark:text-slate-500 hover:text-slate-600 dark:hover:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-700";
14
+ const pill = ((0, jsx_runtime_1.jsxs)("div", { className: `flex items-center rounded-lg border border-slate-200 dark:border-slate-700 p-0.5 bg-white dark:bg-slate-800${placement === "floating" ? " shadow-md" : ""}`, 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" }) }) })] }));
15
+ if (placement === "floating") {
16
+ return ((0, jsx_runtime_1.jsx)("div", { className: "absolute bottom-4 left-4 sm:left-6 z-10", children: pill }));
17
+ }
18
+ return pill;
19
+ }
20
+ //# 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;;;AAgBZ,4CAkFC;;AAvFD;;;;GAIG;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,IAAI,GAAG,CACX,iCACE,SAAS,EAAE,8GACT,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAC5C,EAAE,aAEF,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,EAET,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,EAET,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,CACP,CAAA;IAED,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QAC7B,OAAO,CACL,gCAAK,SAAS,EAAC,yCAAyC,YACrD,IAAI,GACD,CACP,CAAA;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,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,41 @@
1
+ import type { LiteMessage, MessageViewMode } from "@portablecore/types/chat";
2
+ interface UseVerbosityOptions {
3
+ messages: LiteMessage[];
4
+ initialViewMode?: MessageViewMode;
5
+ /** Controlled view mode. When provided, overrides internal state. */
6
+ viewMode?: MessageViewMode;
7
+ currentUserId: string;
8
+ onViewModeChange?: (mode: MessageViewMode) => void;
9
+ /** How many recent messages stay long in Smart mode (default 10) */
10
+ recentMessageCount?: number;
11
+ }
12
+ export interface VerbosityState {
13
+ viewMode: MessageViewMode;
14
+ setViewMode: (mode: MessageViewMode) => void;
15
+ /** True when the message should render shortContent instead of content */
16
+ shouldShowShort: (messageId: string) => boolean;
17
+ /** Toggle a single message between expanded/collapsed */
18
+ toggleExpanded: (messageId: string, currentlyShowingFull: boolean) => void;
19
+ }
20
+ /**
21
+ * Auto-determine the default view mode based on chat characteristics.
22
+ * Group chats and long chats default to Smart; short chats default to Long.
23
+ */
24
+ export declare function getDefaultViewMode(chatLength: number, chatType?: string): MessageViewMode;
25
+ /**
26
+ * Manages Verbosity state: view mode, per-message expansion overrides,
27
+ * and the core logic for deciding whether to show short or long content.
28
+ *
29
+ * Supports both controlled and uncontrolled modes:
30
+ * - Uncontrolled (default): pass initialViewMode, hook manages state internally
31
+ * - Controlled: pass viewMode, hook defers to external state
32
+ *
33
+ * Mode behaviors:
34
+ * - "long": all messages expanded
35
+ * - "short": all messages with shortContent are compressed
36
+ * - "smart": recency-weighted auto-selection. Recent N messages stay long,
37
+ * older messages that the current user prompted stay long, all others short.
38
+ */
39
+ export declare function useVerbosity({ messages, initialViewMode, viewMode: controlledViewMode, currentUserId, onViewModeChange, recentMessageCount, }: UseVerbosityOptions): VerbosityState;
40
+ export {};
41
+ //# 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,qEAAqE;IACrE,QAAQ,CAAC,EAAE,eAAe,CAAA;IAC1B,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;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,eAAyB,EACzB,QAAQ,EAAE,kBAAkB,EAC5B,aAAa,EACb,gBAAgB,EAChB,kBAAuB,GACxB,EAAE,mBAAmB,GAAG,cAAc,CAqFtC"}
@@ -0,0 +1,102 @@
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
+ * Supports both controlled and uncontrolled modes:
23
+ * - Uncontrolled (default): pass initialViewMode, hook manages state internally
24
+ * - Controlled: pass viewMode, hook defers to external state
25
+ *
26
+ * Mode behaviors:
27
+ * - "long": all messages expanded
28
+ * - "short": all messages with shortContent are compressed
29
+ * - "smart": recency-weighted auto-selection. Recent N messages stay long,
30
+ * older messages that the current user prompted stay long, all others short.
31
+ */
32
+ function useVerbosity({ messages, initialViewMode = "smart", viewMode: controlledViewMode, currentUserId, onViewModeChange, recentMessageCount = 10, }) {
33
+ const [internalViewMode, setViewModeInternal] = (0, react_1.useState)(initialViewMode);
34
+ const [overrides, setOverrides] = (0, react_1.useState)(() => new Map());
35
+ const viewMode = controlledViewMode ?? internalViewMode;
36
+ // Clear per-message overrides when view mode changes (controlled or uncontrolled)
37
+ const prevViewModeRef = (0, react_1.useRef)(viewMode);
38
+ (0, react_1.useEffect)(() => {
39
+ if (viewMode !== prevViewModeRef.current) {
40
+ prevViewModeRef.current = viewMode;
41
+ setOverrides(new Map());
42
+ }
43
+ }, [viewMode]);
44
+ const setViewMode = (0, react_1.useCallback)((mode) => {
45
+ setViewModeInternal(mode);
46
+ onViewModeChange?.(mode);
47
+ }, [onViewModeChange]);
48
+ const messageIndex = (0, react_1.useMemo)(() => {
49
+ const map = new Map();
50
+ for (let i = 0; i < messages.length; i++) {
51
+ map.set(messages[i].id, i);
52
+ }
53
+ return map;
54
+ }, [messages]);
55
+ const shouldShowShort = (0, react_1.useCallback)((messageId) => {
56
+ const idx = messageIndex.get(messageId);
57
+ if (idx === undefined)
58
+ return false;
59
+ const msg = messages[idx];
60
+ if (!msg || msg.role !== "assistant" || !msg.shortContent)
61
+ return false;
62
+ const override = overrides.get(messageId);
63
+ if (override === "expanded")
64
+ return false;
65
+ if (override === "collapsed")
66
+ return true;
67
+ if (viewMode === "long")
68
+ return false;
69
+ if (viewMode === "short")
70
+ return true;
71
+ // Smart mode: recency + authorship
72
+ if (viewMode === "smart") {
73
+ const totalMessages = messages.length;
74
+ const isRecent = totalMessages - idx <= recentMessageCount;
75
+ if (isRecent)
76
+ return false;
77
+ // Check if the current user prompted this response
78
+ for (let i = idx - 1; i >= 0; i--) {
79
+ const prevMsg = messages[i];
80
+ if (prevMsg && prevMsg.role === "user") {
81
+ const promptingUserId = prevMsg.senderUserId || currentUserId;
82
+ return promptingUserId !== currentUserId;
83
+ }
84
+ }
85
+ }
86
+ return false;
87
+ }, [messages, messageIndex, overrides, viewMode, currentUserId, recentMessageCount]);
88
+ const toggleExpanded = (0, react_1.useCallback)((messageId, currentlyShowingFull) => {
89
+ setOverrides((prev) => {
90
+ const next = new Map(prev);
91
+ next.set(messageId, currentlyShowingFull ? "collapsed" : "expanded");
92
+ return next;
93
+ });
94
+ }, []);
95
+ return {
96
+ viewMode,
97
+ setViewMode,
98
+ shouldShowShort,
99
+ toggleExpanded,
100
+ };
101
+ }
102
+ //# 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.3",
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",
@@ -29,7 +29,7 @@
29
29
  "remark-breaks": "^4.0.0",
30
30
  "remark-gfm": "^4.0.1",
31
31
  "@portablecore/chat-runtime": "0.1.0",
32
- "@portablecore/types": "0.12.1"
32
+ "@portablecore/types": "0.12.3"
33
33
  },
34
34
  "peerDependencies": {
35
35
  "@nvq/flowtoken": ">=2.0.0",