@arbidocs/blocks 0.5.66 → 0.5.68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -3
- package/dist/ConnectedCallDock-FFIDDYGH.cjs +1 -1
- package/dist/ConnectedCallDock-VMEBH4LG.js +1 -1
- package/dist/ConnectedCallRoom-2FNSX2VG.js +1 -1
- package/dist/ConnectedCallRoom-HYRLJUIV.cjs +1 -1
- package/dist/{ConnectedDocumentViewer-XFQDHVWM.js → ConnectedDocumentViewer-MEKSE7KG.js} +14 -14
- package/dist/{ConnectedDocumentViewer-XFQDHVWM.js.map → ConnectedDocumentViewer-MEKSE7KG.js.map} +1 -1
- package/dist/{ConnectedDocumentViewer-S6YKCCRN.cjs → ConnectedDocumentViewer-VVYEBNAK.cjs} +15 -15
- package/dist/{ConnectedDocumentViewer-S6YKCCRN.cjs.map → ConnectedDocumentViewer-VVYEBNAK.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-L3R3ROPZ.cjs → ConnectedNativeDocxComparison-MIXCSPQP.cjs} +8 -8
- package/dist/{ConnectedNativeDocxComparison-L3R3ROPZ.cjs.map → ConnectedNativeDocxComparison-MIXCSPQP.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-PSAP3Q7D.js → ConnectedNativeDocxComparison-ZXWLLKCZ.js} +7 -7
- package/dist/{ConnectedNativeDocxComparison-PSAP3Q7D.js.map → ConnectedNativeDocxComparison-ZXWLLKCZ.js.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-VDBC4XRT.cjs → ConnectedNativeDocxEditor-HDI7OBDA.cjs} +8 -8
- package/dist/{ConnectedNativeDocxEditor-VDBC4XRT.cjs.map → ConnectedNativeDocxEditor-HDI7OBDA.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-PI6QTPXZ.js → ConnectedNativeDocxEditor-IBQ7M3MU.js} +6 -6
- package/dist/{ConnectedNativeDocxEditor-PI6QTPXZ.js.map → ConnectedNativeDocxEditor-IBQ7M3MU.js.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-V4MTKVNE.js → ConnectedStreamedWordArtifact-S64KJPEJ.js} +7 -7
- package/dist/ConnectedStreamedWordArtifact-S64KJPEJ.js.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-YSW6D7AG.cjs → ConnectedStreamedWordArtifact-V7WFW5EP.cjs} +8 -8
- package/dist/ConnectedStreamedWordArtifact-V7WFW5EP.cjs.map +1 -0
- package/dist/{DocumentReviewCard-TQQADJ36.js → DocumentReviewCard-5U3TGJZA.js} +6 -6
- package/dist/{DocumentReviewCard-TQQADJ36.js.map → DocumentReviewCard-5U3TGJZA.js.map} +1 -1
- package/dist/{DocumentReviewCard-BQ6ZD5MD.cjs → DocumentReviewCard-VFNMJSK7.cjs} +6 -6
- package/dist/{DocumentReviewCard-BQ6ZD5MD.cjs.map → DocumentReviewCard-VFNMJSK7.cjs.map} +1 -1
- package/dist/{WorkspaceTableView-GKMVTECZ.cjs → WorkspaceTableView-DHMCJRC6.cjs} +6 -6
- package/dist/{WorkspaceTableView-GKMVTECZ.cjs.map → WorkspaceTableView-DHMCJRC6.cjs.map} +1 -1
- package/dist/{WorkspaceTableView-YFLVFRJL.js → WorkspaceTableView-EH5CEB44.js} +4 -4
- package/dist/{WorkspaceTableView-YFLVFRJL.js.map → WorkspaceTableView-EH5CEB44.js.map} +1 -1
- package/dist/agents/index.cjs +283 -283
- package/dist/agents/index.js +5 -5
- package/dist/chat/index.cjs +1 -1
- package/dist/chat/index.js +1 -1
- package/dist/{chunk-TJ7QEGVP.cjs → chunk-35FBVTT6.cjs} +18 -18
- package/dist/{chunk-TJ7QEGVP.cjs.map → chunk-35FBVTT6.cjs.map} +1 -1
- package/dist/{chunk-3SHZPTR2.cjs → chunk-3DQZ7JWL.cjs} +18 -18
- package/dist/{chunk-3SHZPTR2.cjs.map → chunk-3DQZ7JWL.cjs.map} +1 -1
- package/dist/{chunk-EM4KOKE6.js → chunk-5TFZFB5U.js} +3 -3
- package/dist/{chunk-EM4KOKE6.js.map → chunk-5TFZFB5U.js.map} +1 -1
- package/dist/{chunk-PBIFISDD.js → chunk-7P24MJQN.js} +3 -3
- package/dist/{chunk-PBIFISDD.js.map → chunk-7P24MJQN.js.map} +1 -1
- package/dist/{chunk-TCCJ5I6G.js → chunk-B6QTKCDK.js} +5 -5
- package/dist/{chunk-TCCJ5I6G.js.map → chunk-B6QTKCDK.js.map} +1 -1
- package/dist/{chunk-EG3BB32W.cjs → chunk-CCSF7RI4.cjs} +3 -3
- package/dist/{chunk-EG3BB32W.cjs.map → chunk-CCSF7RI4.cjs.map} +1 -1
- package/dist/{chunk-QK546T4C.cjs → chunk-CKNUL4LM.cjs} +3 -3
- package/dist/{chunk-QK546T4C.cjs.map → chunk-CKNUL4LM.cjs.map} +1 -1
- package/dist/{chunk-WBLCPCWR.cjs → chunk-CUSOXCBV.cjs} +7 -7
- package/dist/{chunk-WBLCPCWR.cjs.map → chunk-CUSOXCBV.cjs.map} +1 -1
- package/dist/{chunk-DJE2E7YH.cjs → chunk-EPBFVO4F.cjs} +278 -68
- package/dist/chunk-EPBFVO4F.cjs.map +1 -0
- package/dist/{chunk-K26RLK2Y.cjs → chunk-IH2WZUTL.cjs} +4 -4
- package/dist/{chunk-K26RLK2Y.cjs.map → chunk-IH2WZUTL.cjs.map} +1 -1
- package/dist/{chunk-NDKZ6OR3.cjs → chunk-LEW4GUFW.cjs} +3 -3
- package/dist/{chunk-NDKZ6OR3.cjs.map → chunk-LEW4GUFW.cjs.map} +1 -1
- package/dist/{chunk-VWM3J6ES.js → chunk-LKVOHL6C.js} +3 -3
- package/dist/{chunk-VWM3J6ES.js.map → chunk-LKVOHL6C.js.map} +1 -1
- package/dist/{chunk-CEKOZAGO.js → chunk-LTPOV3W4.js} +4 -4
- package/dist/{chunk-CEKOZAGO.js.map → chunk-LTPOV3W4.js.map} +1 -1
- package/dist/{chunk-DRUNPUDT.cjs → chunk-MM22MFON.cjs} +12 -12
- package/dist/{chunk-DRUNPUDT.cjs.map → chunk-MM22MFON.cjs.map} +1 -1
- package/dist/{chunk-BELZ2WD2.js → chunk-N54OMO6J.js} +281 -71
- package/dist/chunk-N54OMO6J.js.map +1 -0
- package/dist/{chunk-RB54N5I7.cjs → chunk-NBX7WWB6.cjs} +5 -5
- package/dist/{chunk-RB54N5I7.cjs.map → chunk-NBX7WWB6.cjs.map} +1 -1
- package/dist/{chunk-B3CRSCLK.cjs → chunk-NMQVII6H.cjs} +4 -4
- package/dist/{chunk-B3CRSCLK.cjs.map → chunk-NMQVII6H.cjs.map} +1 -1
- package/dist/{chunk-U52KPOXT.js → chunk-NOBSRGFX.js} +3 -3
- package/dist/{chunk-U52KPOXT.js.map → chunk-NOBSRGFX.js.map} +1 -1
- package/dist/{chunk-2LUA7UDE.js → chunk-P2ZQKJXS.js} +7 -7
- package/dist/{chunk-2LUA7UDE.js.map → chunk-P2ZQKJXS.js.map} +1 -1
- package/dist/{chunk-KNOSLLTC.js → chunk-PKDPQS6Z.js} +3 -3
- package/dist/{chunk-KNOSLLTC.js.map → chunk-PKDPQS6Z.js.map} +1 -1
- package/dist/{chunk-J6FRFIVL.js → chunk-RAGITH2N.js} +3 -3
- package/dist/{chunk-J6FRFIVL.js.map → chunk-RAGITH2N.js.map} +1 -1
- package/dist/{chunk-PMWZTVIY.js → chunk-RSVHFZJR.js} +12 -6
- package/dist/chunk-RSVHFZJR.js.map +1 -0
- package/dist/{chunk-IRXPUQFP.js → chunk-SC3GOSJG.js} +3 -3
- package/dist/{chunk-IRXPUQFP.js.map → chunk-SC3GOSJG.js.map} +1 -1
- package/dist/{chunk-SBAM3UZX.js → chunk-SNU3AOCW.js} +3 -3
- package/dist/{chunk-SBAM3UZX.js.map → chunk-SNU3AOCW.js.map} +1 -1
- package/dist/{chunk-BP5KBZLX.cjs → chunk-XXI3EIEO.cjs} +53 -47
- package/dist/chunk-XXI3EIEO.cjs.map +1 -0
- package/dist/{chunk-D27BBGUF.cjs → chunk-ZSP6QSMG.cjs} +4 -4
- package/dist/{chunk-D27BBGUF.cjs.map → chunk-ZSP6QSMG.cjs.map} +1 -1
- package/dist/connect/docx.cjs +12 -12
- package/dist/connect/docx.js +8 -8
- package/dist/connect/index.cjs +1365 -1072
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.js +915 -630
- package/dist/connect/index.js.map +1 -1
- package/dist/connect/viewer.cjs +13 -13
- package/dist/connect/viewer.js +12 -12
- package/dist/connection/billing/index.d.ts +1 -0
- package/dist/connection/billing/payment-required.d.ts +45 -0
- package/dist/connection/conversation/ConnectedMessageArea.d.ts +2 -0
- package/dist/connection/conversation/ConnectedMessageList.d.ts +4 -1
- package/dist/connection/embedded/EmbeddedChatPanel.d.ts +3 -1
- package/dist/connection/settings-page/ConnectedModelConnectionsSettings.d.ts +1 -0
- package/dist/connection/settings-page/ConnectedSettingsPage.d.ts +3 -0
- package/dist/connection/settings-page/index.d.ts +2 -1
- package/dist/connection/workflows/useWorkflowsPageState.d.ts +1 -1
- package/dist/document-tools/index.cjs +17 -17
- package/dist/document-tools/index.js +2 -2
- package/dist/embed/index.cjs +18 -10
- package/dist/embed/index.d.ts +2 -0
- package/dist/embed/index.js +7 -7
- package/dist/files/index.cjs +1 -1
- package/dist/files/index.js +1 -1
- package/dist/index.cjs +393 -393
- package/dist/index.js +13 -13
- package/dist/site/index.cjs +17 -17
- package/dist/site/index.js +1 -1
- package/dist/studio/index.cjs +4 -4
- package/dist/studio/index.js +2 -2
- package/dist/workflow-canvas/index.cjs +27 -27
- package/dist/workflow-canvas/index.cjs.map +1 -1
- package/dist/workflow-canvas/index.js +12 -12
- package/dist/workflow-canvas/index.js.map +1 -1
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ConnectedStreamedWordArtifact-V4MTKVNE.js.map +0 -1
- package/dist/ConnectedStreamedWordArtifact-YSW6D7AG.cjs.map +0 -1
- package/dist/chunk-BELZ2WD2.js.map +0 -1
- package/dist/chunk-BP5KBZLX.cjs.map +0 -1
- package/dist/chunk-DJE2E7YH.cjs.map +0 -1
- package/dist/chunk-PMWZTVIY.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useConnectedThreadActivity, useSelectWorkspace } from './chunk-CRHY7DBO.js';
|
|
3
3
|
import { DocumentUser } from './chunk-UO7KDCM2.js';
|
|
4
|
-
import { MessageJsonTree } from './chunk-ZZTH27G7.js';
|
|
5
4
|
import { buildFactCitations, citedVersionRef, chronologyFactBodies } from './chunk-KGUSKGZE.js';
|
|
5
|
+
import { MessageJsonTree } from './chunk-ZZTH27G7.js';
|
|
6
6
|
import { ConnectedMarkdown, InternalDocLink, ExternalLink } from './chunk-HGFU47TY.js';
|
|
7
7
|
import { ModalBreadcrumbHeader, ModalCrumbs } from './chunk-RC6VTY2H.js';
|
|
8
8
|
import { EntityTooltip, EntityTooltipHeader, EntityTooltipSection, EntityTooltipHint } from './chunk-3UIJLUXN.js';
|
|
@@ -22,9 +22,9 @@ import { useListKeyNav, MentionMenu } from './chunk-GAGYAHYO.js';
|
|
|
22
22
|
import { buildDeepLinkPath } from './chunk-7Q5INDUS.js';
|
|
23
23
|
import { useBlocksEnvironment } from './chunk-TJQSL4XV.js';
|
|
24
24
|
import React7, { memo, useMemo, createContext, forwardRef, useCallback, useRef, useLayoutEffect, useEffect, useState, useContext } from 'react';
|
|
25
|
-
import { Users, MessageCircleMore, ArrowUpRight, Send, Settings, Edit3, Copy, Link, Share2, Trash2, Check, Milestone, Clock, RotateCcw, FileText, Loader2, Network, ChevronRight, Download, Square, LogIn } from 'lucide-react';
|
|
26
|
-
import { useWorkspaces, ArbiBotHeadIcon, useArbiWsStatus, useArbiWsStore, useUserSettings, useMessageTimer, useDocuments, useAvailableModels, formatGbp, useArbiSessionStore, CitationRenderer, useArbiSessionState, selectDraft, useWorkspaceUsers, useArbiSession, buildMentionCandidates, useConversations, ASSISTANT_MENTION_LABEL, useConversationItems, useDeleteMessage, transcriptSegmentOf, useConfig, useThinkingContent, useCreateFact, useCreateFacts, workflowStepOf, stripSpeakerPrefix, MessageArtifactCard, useConversationData, useBranchNavigation, useArbiHost, useSkills, useBuiltinCommands, useConversationActivity, useMessageDetails, getWorkspaceKind, resolveConfigModel, useConversationTurn, downloadRecoveryFile, useArbi, ArbiWebSocketProvider } from '@arbidocs/react';
|
|
27
|
-
import { isAgent, UserEntity, getUserInitials, getUserDisplayName, getUserAvatarColor, agentAvatarColors, Avatar, AvatarImage, AvatarFallback, cn, ShieldIcon, getWorkspaceColor, getDocumentTitle, Button, isImageDocument, formatFriendlyDate, Tooltip, TooltipTrigger, TooltipContent, Dialog, DialogContent, ProviderIcon, getEntityLabel, EntityIcon,
|
|
25
|
+
import { Users, MessageCircleMore, ArrowUpRight, Send, Settings, Edit3, Copy, Link, Share2, Trash2, Check, Milestone, Clock, RotateCcw, FileText, Loader2, Network, ChevronRight, Download, Plus, MessageSquare, ArrowDown, Square, ChevronDown, Upload, LogIn } from 'lucide-react';
|
|
26
|
+
import { useWorkspaces, ArbiBotHeadIcon, useArbiWsStatus, useArbiWsStore, useUserSettings, useMessageTimer, useDocuments, useAvailableModels, formatGbp, useArbiSessionStore, CitationRenderer, useArbiSessionState, selectDraft, useWorkspaceUsers, useArbiSession, buildMentionCandidates, useConversations, ASSISTANT_MENTION_LABEL, useConversationItems, useDeleteMessage, transcriptSegmentOf, useConfig, useThinkingContent, useCreateFact, useCreateFacts, workflowStepOf, stripSpeakerPrefix, MessageArtifactCard, useConversationData, useBranchNavigation, useArbiHost, useSkills, useBuiltinCommands, useConversationActivity, useMessageDetails, getWorkspaceKind, resolveConfigModel, useConversationTurn, useUploadDocuments, useWorkspaceRole, downloadRecoveryFile, useArbi, ArbiWebSocketProvider } from '@arbidocs/react';
|
|
27
|
+
import { isAgent, UserEntity, getUserInitials, getUserDisplayName, getUserAvatarColor, agentAvatarColors, Avatar, AvatarImage, AvatarFallback, cn, ShieldIcon, getWorkspaceColor, getDocumentTitle, Button, isImageDocument, formatFriendlyDate, Tooltip, TooltipTrigger, TooltipContent, Dialog, DialogContent, ProviderIcon, getEntityLabel, EntityIcon, Checkbox, Input } from '@arbidocs/react/ui';
|
|
28
28
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
29
29
|
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
30
30
|
import { mergeAgentSteps, extractSubagentLanes, getCurrentStep, computeRunStats, formatTokens, isNearAiUsageBudget, getSubagentBranchRecord, buildCitationChunkData, topLevelAgentSteps, findMainSiblingLeaf, sliceToSubagentThread, getAgentStepLabel, subagentJobLabel, getStepDisplay, getStepTool, findLeafForTaskMessage, Arbi } from '@arbidocs/sdk/browser';
|
|
@@ -2198,7 +2198,7 @@ function resolveScrollContainer(current) {
|
|
|
2198
2198
|
function stripThinking(content) {
|
|
2199
2199
|
return content.replace(/<think>[\s\S]*?(<\/think>|$)/g, "");
|
|
2200
2200
|
}
|
|
2201
|
-
function ConnectedMessageList({ messages }) {
|
|
2201
|
+
function ConnectedMessageList({ messages, scrollElementRef }) {
|
|
2202
2202
|
const session = useArbiSessionStore();
|
|
2203
2203
|
const [previewOpen, setPreviewOpen] = useState(false);
|
|
2204
2204
|
const participantTints = useMemo(
|
|
@@ -2229,14 +2229,14 @@ function ConnectedMessageList({ messages }) {
|
|
|
2229
2229
|
text: lastMessage?.role === "assistant" ? stripThinking(lastMessage.content ?? "") : "",
|
|
2230
2230
|
resetKey: currentConversationId
|
|
2231
2231
|
});
|
|
2232
|
-
const
|
|
2232
|
+
const scrollContainerRef = useRef(null);
|
|
2233
2233
|
const getScrollContainer = useCallback(() => {
|
|
2234
|
-
|
|
2235
|
-
return
|
|
2236
|
-
}, []);
|
|
2234
|
+
scrollContainerRef.current = scrollElementRef?.current ?? resolveScrollContainer(scrollContainerRef.current);
|
|
2235
|
+
return scrollContainerRef.current;
|
|
2236
|
+
}, [scrollElementRef]);
|
|
2237
2237
|
useEffect(() => {
|
|
2238
|
-
|
|
2239
|
-
}, []);
|
|
2238
|
+
scrollContainerRef.current = scrollElementRef?.current ?? resolveScrollContainer(null);
|
|
2239
|
+
}, [scrollElementRef]);
|
|
2240
2240
|
const { items: activityItems } = useConnectedThreadActivity(currentConversationId);
|
|
2241
2241
|
const transcript = [
|
|
2242
2242
|
...displayMessages.map((message, index) => ({
|
|
@@ -2388,15 +2388,21 @@ function ConnectedMessageList({ messages }) {
|
|
|
2388
2388
|
/* @__PURE__ */ jsx(ConnectedThreadsPreview, { open: previewOpen, onOpenChange: setPreviewOpen })
|
|
2389
2389
|
] });
|
|
2390
2390
|
}
|
|
2391
|
-
var MessageAreaComponent = forwardRef(
|
|
2392
|
-
|
|
2393
|
-
});
|
|
2391
|
+
var MessageAreaComponent = forwardRef(
|
|
2392
|
+
({ messages, scrollElementRef }, ref) => {
|
|
2393
|
+
return /* @__PURE__ */ jsx("div", { ref, className: "flex w-full flex-1 flex-col pt-4", "data-testid": "message-area", children: /* @__PURE__ */ jsx("div", { className: "mt-auto w-full", "data-testid": "message-list-bottom-anchor", children: /* @__PURE__ */ jsx(ConnectedMessageList, { messages, scrollElementRef }) }) });
|
|
2394
|
+
}
|
|
2395
|
+
);
|
|
2394
2396
|
MessageAreaComponent.displayName = "ConnectedMessageArea";
|
|
2395
2397
|
var ConnectedMessageArea = memo(MessageAreaComponent, (prevProps, nextProps) => {
|
|
2396
|
-
return prevProps.messages === nextProps.messages;
|
|
2398
|
+
return prevProps.messages === nextProps.messages && prevProps.scrollElementRef === nextProps.scrollElementRef;
|
|
2397
2399
|
});
|
|
2398
2400
|
function ConnectedCompactConversation() {
|
|
2401
|
+
const session = useArbiSessionStore();
|
|
2399
2402
|
const containerRef = useRef(null);
|
|
2403
|
+
const scrollRef = useRef(null);
|
|
2404
|
+
const following = useRef(true);
|
|
2405
|
+
const [showLatest, setShowLatest] = useState(false);
|
|
2400
2406
|
const inputRef = useRef(null);
|
|
2401
2407
|
const { selectedWorkspaceId, parentMessageId, messageHistory } = useConversationData();
|
|
2402
2408
|
const { isGenerating, handleSendMessage, handleAbortGeneration } = useConversationTurn({
|
|
@@ -2404,9 +2410,100 @@ function ConnectedCompactConversation() {
|
|
|
2404
2410
|
parentMessageId
|
|
2405
2411
|
});
|
|
2406
2412
|
const currentConversationId = useArbiSessionState((state) => state.conversationId);
|
|
2413
|
+
useEffect(() => {
|
|
2414
|
+
const viewport = scrollRef.current;
|
|
2415
|
+
const content = containerRef.current;
|
|
2416
|
+
if (!viewport || !content) return;
|
|
2417
|
+
const follow = () => {
|
|
2418
|
+
if (following.current) viewport.scrollTop = viewport.scrollHeight;
|
|
2419
|
+
};
|
|
2420
|
+
follow();
|
|
2421
|
+
const observer = new ResizeObserver(follow);
|
|
2422
|
+
observer.observe(content);
|
|
2423
|
+
return () => observer.disconnect();
|
|
2424
|
+
}, [messageHistory.length > 0, currentConversationId]);
|
|
2425
|
+
useEffect(() => {
|
|
2426
|
+
following.current = true;
|
|
2427
|
+
setShowLatest(false);
|
|
2428
|
+
}, [currentConversationId]);
|
|
2407
2429
|
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col flex-1 min-h-0", "data-testid": "embedded-chat", children: [
|
|
2408
|
-
/* @__PURE__ */
|
|
2409
|
-
|
|
2430
|
+
/* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center justify-between border-b px-3 py-2 text-xs text-muted-foreground", children: [
|
|
2431
|
+
/* @__PURE__ */ jsx("span", { children: isGenerating ? "ARBI is responding\u2026" : "Conversation" }),
|
|
2432
|
+
/* @__PURE__ */ jsxs(
|
|
2433
|
+
Button,
|
|
2434
|
+
{
|
|
2435
|
+
type: "button",
|
|
2436
|
+
size: "sm",
|
|
2437
|
+
variant: "ghost",
|
|
2438
|
+
disabled: isGenerating,
|
|
2439
|
+
onClick: () => {
|
|
2440
|
+
session.clearConversationError(currentConversationId || "new");
|
|
2441
|
+
session.startNewConversation();
|
|
2442
|
+
},
|
|
2443
|
+
children: [
|
|
2444
|
+
/* @__PURE__ */ jsx(Plus, { className: "h-3.5 w-3.5 mr-1" }),
|
|
2445
|
+
" New chat"
|
|
2446
|
+
]
|
|
2447
|
+
}
|
|
2448
|
+
)
|
|
2449
|
+
] }),
|
|
2450
|
+
/* @__PURE__ */ jsxs("div", { className: "relative flex flex-col flex-1 min-h-0 overflow-hidden", children: [
|
|
2451
|
+
/* @__PURE__ */ jsx(
|
|
2452
|
+
"div",
|
|
2453
|
+
{
|
|
2454
|
+
ref: scrollRef,
|
|
2455
|
+
className: "flex-1 min-h-0 overflow-y-auto overscroll-contain px-3",
|
|
2456
|
+
tabIndex: 0,
|
|
2457
|
+
"aria-label": "Conversation messages",
|
|
2458
|
+
"data-testid": "embedded-transcript",
|
|
2459
|
+
onWheel: (event) => {
|
|
2460
|
+
if (event.deltaY < 0) following.current = false;
|
|
2461
|
+
},
|
|
2462
|
+
onTouchMove: () => {
|
|
2463
|
+
following.current = false;
|
|
2464
|
+
},
|
|
2465
|
+
onKeyDown: (event) => {
|
|
2466
|
+
if (["ArrowUp", "PageUp", "Home"].includes(event.key)) following.current = false;
|
|
2467
|
+
},
|
|
2468
|
+
onScroll: (event) => {
|
|
2469
|
+
const node = event.currentTarget;
|
|
2470
|
+
const atBottom = node.scrollHeight - node.clientHeight - node.scrollTop < 32;
|
|
2471
|
+
following.current = atBottom;
|
|
2472
|
+
setShowLatest(!atBottom);
|
|
2473
|
+
},
|
|
2474
|
+
children: messageHistory.length > 0 ? /* @__PURE__ */ jsx(
|
|
2475
|
+
ConnectedMessageArea,
|
|
2476
|
+
{
|
|
2477
|
+
ref: containerRef,
|
|
2478
|
+
messages: messageHistory,
|
|
2479
|
+
scrollElementRef: scrollRef
|
|
2480
|
+
}
|
|
2481
|
+
) : /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3 items-center justify-center h-full text-muted-foreground text-sm p-6 text-center", children: [
|
|
2482
|
+
/* @__PURE__ */ jsx(MessageSquare, { className: "h-8 w-8 text-primary", "aria-hidden": "true" }),
|
|
2483
|
+
currentConversationId ? "Loading messages..." : "Start a conversation by typing below."
|
|
2484
|
+
] })
|
|
2485
|
+
}
|
|
2486
|
+
),
|
|
2487
|
+
showLatest && /* @__PURE__ */ jsxs(
|
|
2488
|
+
Button,
|
|
2489
|
+
{
|
|
2490
|
+
className: "absolute bottom-3 left-1/2 -translate-x-1/2 rounded-full shadow-md",
|
|
2491
|
+
size: "sm",
|
|
2492
|
+
variant: "secondary",
|
|
2493
|
+
onClick: () => {
|
|
2494
|
+
following.current = true;
|
|
2495
|
+
const viewport = scrollRef.current;
|
|
2496
|
+
if (viewport) viewport.scrollTop = viewport.scrollHeight;
|
|
2497
|
+
setShowLatest(false);
|
|
2498
|
+
},
|
|
2499
|
+
children: [
|
|
2500
|
+
/* @__PURE__ */ jsx(ArrowDown, { className: "h-4 w-4 mr-1" }),
|
|
2501
|
+
" Latest message"
|
|
2502
|
+
]
|
|
2503
|
+
}
|
|
2504
|
+
)
|
|
2505
|
+
] }),
|
|
2506
|
+
/* @__PURE__ */ jsx("div", { className: "shrink-0 w-full bg-background border-t p-2 z-10", children: /* @__PURE__ */ jsx(ComposerContainer, { children: /* @__PURE__ */ jsx(
|
|
2410
2507
|
ConversationComposer2,
|
|
2411
2508
|
{
|
|
2412
2509
|
handleSendMessage,
|
|
@@ -2451,12 +2548,19 @@ function ConnectedConversationDocumentPicker({
|
|
|
2451
2548
|
onSelectionChange
|
|
2452
2549
|
}) {
|
|
2453
2550
|
const session = useArbiSessionStore();
|
|
2551
|
+
const upload = useUploadDocuments();
|
|
2552
|
+
const role = useWorkspaceRole();
|
|
2553
|
+
const canUpload = role !== null && role !== "guest";
|
|
2554
|
+
const inputRef = useRef(null);
|
|
2555
|
+
const [expanded, setExpanded] = useState(false);
|
|
2556
|
+
const [uploadError, setUploadError] = useState(null);
|
|
2557
|
+
const [uploadNotice, setUploadNotice] = useState(null);
|
|
2454
2558
|
const currentConversationId = useArbiSessionState((state) => state.conversationId);
|
|
2455
2559
|
const convKey = currentConversationId || "new";
|
|
2456
2560
|
const inConversationDocuments = useArbiSessionState(
|
|
2457
2561
|
(state) => state.conversationDocuments[convKey] || EMPTY_DOCS
|
|
2458
2562
|
);
|
|
2459
|
-
const { data: documentsData } = useDocuments();
|
|
2563
|
+
const { data: documentsData, isLoading, error: documentsError } = useDocuments();
|
|
2460
2564
|
const documents = documentsData || [];
|
|
2461
2565
|
const selectedDocIds = inConversationDocuments.map((d) => d.docId);
|
|
2462
2566
|
const handleToggle = (docId) => {
|
|
@@ -2469,45 +2573,135 @@ function ConnectedConversationDocumentPicker({
|
|
|
2469
2573
|
selected ? selectedDocIds.filter((id) => id !== docId) : [...selectedDocIds, docId]
|
|
2470
2574
|
);
|
|
2471
2575
|
};
|
|
2472
|
-
|
|
2473
|
-
|
|
2474
|
-
|
|
2475
|
-
|
|
2476
|
-
|
|
2477
|
-
|
|
2478
|
-
|
|
2479
|
-
|
|
2480
|
-
const
|
|
2481
|
-
const
|
|
2482
|
-
|
|
2483
|
-
|
|
2484
|
-
|
|
2485
|
-
|
|
2486
|
-
|
|
2487
|
-
|
|
2488
|
-
|
|
2489
|
-
|
|
2490
|
-
|
|
2491
|
-
|
|
2492
|
-
|
|
2493
|
-
|
|
2494
|
-
}
|
|
2495
|
-
),
|
|
2496
|
-
/* @__PURE__ */ jsx(
|
|
2497
|
-
"label",
|
|
2498
|
-
{
|
|
2499
|
-
htmlFor: `embedded-doc-${docId}`,
|
|
2500
|
-
className: "text-sm cursor-pointer flex-1 truncate",
|
|
2501
|
-
title: docTitle,
|
|
2502
|
-
children: docTitle
|
|
2503
|
-
}
|
|
2504
|
-
)
|
|
2505
|
-
]
|
|
2506
|
-
},
|
|
2507
|
-
docId
|
|
2576
|
+
async function addFiles(files) {
|
|
2577
|
+
if (!canUpload) return;
|
|
2578
|
+
setUploadError(null);
|
|
2579
|
+
setUploadNotice(null);
|
|
2580
|
+
const original = session.getState();
|
|
2581
|
+
const workspaceId = original.workspaceId;
|
|
2582
|
+
const key = original.conversationId || "new";
|
|
2583
|
+
try {
|
|
2584
|
+
const result = await upload.mutateAsync({ files });
|
|
2585
|
+
const ids = result.doc_ext_ids ?? [];
|
|
2586
|
+
const current = session.getState();
|
|
2587
|
+
if (current.workspaceId !== workspaceId) return;
|
|
2588
|
+
const selected = current.conversationDocuments[key] || EMPTY_DOCS;
|
|
2589
|
+
const merged = [
|
|
2590
|
+
...selected,
|
|
2591
|
+
...ids.filter((id) => !selected.some((d) => d.docId === id)).map((docId) => ({ docId, isPinned: false }))
|
|
2592
|
+
];
|
|
2593
|
+
session.setConversationDocuments(key, merged);
|
|
2594
|
+
onSelectionChange?.(merged.map((d) => d.docId));
|
|
2595
|
+
setExpanded(true);
|
|
2596
|
+
setUploadNotice(
|
|
2597
|
+
ids.length ? `${ids.length} file${ids.length === 1 ? "" : "s"} added to this chat.` : "No new files added. Files may already exist in this workspace."
|
|
2508
2598
|
);
|
|
2509
|
-
}
|
|
2510
|
-
|
|
2599
|
+
} catch (error) {
|
|
2600
|
+
setUploadError(error instanceof Error ? error.message : "Could not upload files. Try again.");
|
|
2601
|
+
}
|
|
2602
|
+
}
|
|
2603
|
+
return /* @__PURE__ */ jsxs(
|
|
2604
|
+
"div",
|
|
2605
|
+
{
|
|
2606
|
+
className: "shrink-0 border-b bg-muted/30 px-3 py-2",
|
|
2607
|
+
"data-testid": "embedded-document-selector",
|
|
2608
|
+
children: [
|
|
2609
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
|
|
2610
|
+
/* @__PURE__ */ jsxs(
|
|
2611
|
+
Button,
|
|
2612
|
+
{
|
|
2613
|
+
type: "button",
|
|
2614
|
+
variant: "ghost",
|
|
2615
|
+
size: "sm",
|
|
2616
|
+
className: "min-w-0",
|
|
2617
|
+
"aria-expanded": expanded,
|
|
2618
|
+
"aria-controls": "embedded-documents",
|
|
2619
|
+
onClick: () => setExpanded(!expanded),
|
|
2620
|
+
children: [
|
|
2621
|
+
/* @__PURE__ */ jsx(FileText, { className: "h-4 w-4 mr-2" }),
|
|
2622
|
+
"Files",
|
|
2623
|
+
selectedDocIds.length > 0 ? ` (${selectedDocIds.length} selected)` : "",
|
|
2624
|
+
/* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4 ml-2" })
|
|
2625
|
+
]
|
|
2626
|
+
}
|
|
2627
|
+
),
|
|
2628
|
+
/* @__PURE__ */ jsx(
|
|
2629
|
+
"input",
|
|
2630
|
+
{
|
|
2631
|
+
ref: inputRef,
|
|
2632
|
+
type: "file",
|
|
2633
|
+
multiple: true,
|
|
2634
|
+
className: "hidden",
|
|
2635
|
+
"aria-label": "Upload files",
|
|
2636
|
+
onChange: (event) => {
|
|
2637
|
+
const files = Array.from(event.target.files ?? []);
|
|
2638
|
+
event.target.value = "";
|
|
2639
|
+
if (files.length) void addFiles(files);
|
|
2640
|
+
}
|
|
2641
|
+
}
|
|
2642
|
+
),
|
|
2643
|
+
/* @__PURE__ */ jsxs(
|
|
2644
|
+
Button,
|
|
2645
|
+
{
|
|
2646
|
+
type: "button",
|
|
2647
|
+
variant: "outline",
|
|
2648
|
+
size: "sm",
|
|
2649
|
+
disabled: upload.isPending || !canUpload,
|
|
2650
|
+
title: !canUpload ? "You do not have permission to upload to this workspace." : void 0,
|
|
2651
|
+
onClick: () => inputRef.current?.click(),
|
|
2652
|
+
children: [
|
|
2653
|
+
/* @__PURE__ */ jsx(Upload, { className: "h-4 w-4 mr-2" }),
|
|
2654
|
+
upload.isPending ? "Uploading\u2026" : "Upload files"
|
|
2655
|
+
]
|
|
2656
|
+
}
|
|
2657
|
+
)
|
|
2658
|
+
] }),
|
|
2659
|
+
uploadError && /* @__PURE__ */ jsx("p", { role: "alert", className: "mt-2 text-sm text-destructive", children: uploadError }),
|
|
2660
|
+
uploadNotice && /* @__PURE__ */ jsx("p", { role: "status", className: "mt-2 text-xs text-muted-foreground", children: uploadNotice }),
|
|
2661
|
+
expanded && /* @__PURE__ */ jsxs("div", { id: "embedded-documents", className: "mt-2", children: [
|
|
2662
|
+
/* @__PURE__ */ jsx("p", { className: "mb-2 text-xs text-muted-foreground", children: "Select files to use in this conversation. Uploads are saved in the current workspace." }),
|
|
2663
|
+
/* @__PURE__ */ jsx(
|
|
2664
|
+
"div",
|
|
2665
|
+
{
|
|
2666
|
+
className: "max-h-28 overflow-y-auto rounded-md border p-2",
|
|
2667
|
+
"data-testid": "embedded-documents-list",
|
|
2668
|
+
children: isLoading ? /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: "Loading files\u2026" }) : documentsError ? /* @__PURE__ */ jsx("p", { role: "alert", className: "text-sm text-destructive", children: "Could not load workspace files." }) : documents.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: "No files yet. Upload a file to discuss it with ARBI." }) : /* @__PURE__ */ jsx("div", { className: "space-y-2", children: documents.map((doc) => {
|
|
2669
|
+
const docId = doc.external_id;
|
|
2670
|
+
const docTitle = getDocumentTitle(doc, "Untitled");
|
|
2671
|
+
return /* @__PURE__ */ jsxs(
|
|
2672
|
+
"div",
|
|
2673
|
+
{
|
|
2674
|
+
className: "flex items-center space-x-2",
|
|
2675
|
+
"data-testid": `embedded-document-${docId}`,
|
|
2676
|
+
children: [
|
|
2677
|
+
/* @__PURE__ */ jsx(
|
|
2678
|
+
Checkbox,
|
|
2679
|
+
{
|
|
2680
|
+
id: `embedded-doc-${docId}`,
|
|
2681
|
+
checked: selectedDocIds.includes(docId),
|
|
2682
|
+
onCheckedChange: () => handleToggle(docId)
|
|
2683
|
+
}
|
|
2684
|
+
),
|
|
2685
|
+
/* @__PURE__ */ jsx(
|
|
2686
|
+
"label",
|
|
2687
|
+
{
|
|
2688
|
+
htmlFor: `embedded-doc-${docId}`,
|
|
2689
|
+
className: "min-w-0 text-sm cursor-pointer flex-1 truncate",
|
|
2690
|
+
title: docTitle,
|
|
2691
|
+
children: docTitle
|
|
2692
|
+
}
|
|
2693
|
+
)
|
|
2694
|
+
]
|
|
2695
|
+
},
|
|
2696
|
+
docId
|
|
2697
|
+
);
|
|
2698
|
+
}) })
|
|
2699
|
+
}
|
|
2700
|
+
)
|
|
2701
|
+
] })
|
|
2702
|
+
]
|
|
2703
|
+
}
|
|
2704
|
+
);
|
|
2511
2705
|
}
|
|
2512
2706
|
async function backUpOnSignup({
|
|
2513
2707
|
email,
|
|
@@ -3184,27 +3378,33 @@ function EmbeddedChatPanel({
|
|
|
3184
3378
|
}) {
|
|
3185
3379
|
const workspaceId = useArbiSessionState((s) => s.workspaceId);
|
|
3186
3380
|
if (!signedIn)
|
|
3187
|
-
return /* @__PURE__ */ jsxs("div", { className: "p-4", "data-testid": "embedded-panel-login", children: [
|
|
3381
|
+
return /* @__PURE__ */ jsxs("div", { className: "h-full min-h-0 overflow-y-auto p-4", "data-testid": "embedded-panel-login", children: [
|
|
3188
3382
|
login,
|
|
3189
3383
|
footer
|
|
3190
3384
|
] });
|
|
3191
3385
|
return /* @__PURE__ */ jsxs(
|
|
3192
3386
|
"div",
|
|
3193
3387
|
{
|
|
3194
|
-
className: "flex flex-col h-full min-h-0 bg-background text-foreground",
|
|
3388
|
+
className: "flex flex-col h-full min-h-0 min-w-0 overflow-hidden bg-background text-foreground",
|
|
3195
3389
|
"data-testid": "embedded-panel",
|
|
3196
3390
|
children: [
|
|
3197
|
-
header,
|
|
3198
|
-
workspaceId && /* @__PURE__ */ jsx(
|
|
3199
|
-
|
|
3200
|
-
|
|
3201
|
-
|
|
3202
|
-
|
|
3391
|
+
/* @__PURE__ */ jsx("div", { className: "shrink-0", children: header }),
|
|
3392
|
+
workspaceId && /* @__PURE__ */ jsx(
|
|
3393
|
+
ConnectedConversationDocumentPicker,
|
|
3394
|
+
{
|
|
3395
|
+
onSelectionChange: onDocumentSelectionChange
|
|
3396
|
+
},
|
|
3397
|
+
workspaceId
|
|
3398
|
+
),
|
|
3399
|
+
platformHeader && /* @__PURE__ */ jsx("div", { className: "shrink-0", children: platformHeader }),
|
|
3400
|
+
workspaceId ? /* @__PURE__ */ jsx(ConnectedCompactConversation, {}, workspaceId) : /* @__PURE__ */ jsx("p", { className: "p-4 text-sm text-muted-foreground", children: "Select a workspace to start chatting." }),
|
|
3401
|
+
platformFooter && /* @__PURE__ */ jsx("div", { className: "shrink-0", children: platformFooter }),
|
|
3402
|
+
footer && /* @__PURE__ */ jsx("div", { className: "shrink-0", children: footer })
|
|
3203
3403
|
]
|
|
3204
3404
|
}
|
|
3205
3405
|
);
|
|
3206
3406
|
}
|
|
3207
|
-
function EmbeddedWorkspaceHeader() {
|
|
3407
|
+
function EmbeddedWorkspaceHeader({ title }) {
|
|
3208
3408
|
const arbi = useArbi();
|
|
3209
3409
|
const signedIn = useArbiSession();
|
|
3210
3410
|
const workspaceId = useArbiSessionState((s) => s.workspaceId);
|
|
@@ -3225,7 +3425,11 @@ function EmbeddedWorkspaceHeader() {
|
|
|
3225
3425
|
setPending(false);
|
|
3226
3426
|
}
|
|
3227
3427
|
}
|
|
3228
|
-
return /* @__PURE__ */ jsxs("header", { className: "p-3 border-b space-y-
|
|
3428
|
+
return /* @__PURE__ */ jsxs("header", { className: "shrink-0 p-3 border-b space-y-3", children: [
|
|
3429
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 font-semibold text-primary", children: [
|
|
3430
|
+
/* @__PURE__ */ jsx(MessageSquare, { className: "h-5 w-5", "aria-hidden": "true" }),
|
|
3431
|
+
title
|
|
3432
|
+
] }),
|
|
3229
3433
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
|
|
3230
3434
|
/* @__PURE__ */ jsx("span", { className: "truncate text-sm", children: signedIn.user?.email }),
|
|
3231
3435
|
/* @__PURE__ */ jsx(
|
|
@@ -3276,7 +3480,7 @@ function ConnectedEmbeddedChat({
|
|
|
3276
3480
|
{
|
|
3277
3481
|
...props,
|
|
3278
3482
|
signedIn: session.status === "signed-in",
|
|
3279
|
-
header: /* @__PURE__ */ jsx(EmbeddedWorkspaceHeader, {}),
|
|
3483
|
+
header: /* @__PURE__ */ jsx(EmbeddedWorkspaceHeader, { title }),
|
|
3280
3484
|
login: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
3281
3485
|
/* @__PURE__ */ jsx("h1", { className: "font-semibold mb-4", children: title }),
|
|
3282
3486
|
/* @__PURE__ */ jsx(CompactLogin, { ...login })
|
|
@@ -3284,7 +3488,7 @@ function ConnectedEmbeddedChat({
|
|
|
3284
3488
|
}
|
|
3285
3489
|
);
|
|
3286
3490
|
}
|
|
3287
|
-
function ArbiChat({ apiUrl, deploymentDomain, ...props }) {
|
|
3491
|
+
function ArbiChat({ apiUrl, deploymentDomain, className, ...props }) {
|
|
3288
3492
|
const host = useMemo(
|
|
3289
3493
|
() => defaultHost(
|
|
3290
3494
|
{
|
|
@@ -3297,9 +3501,15 @@ function ArbiChat({ apiUrl, deploymentDomain, ...props }) {
|
|
|
3297
3501
|
),
|
|
3298
3502
|
[apiUrl, deploymentDomain]
|
|
3299
3503
|
);
|
|
3300
|
-
return /* @__PURE__ */ jsx(ArbiHost, { config: host, children: /* @__PURE__ */ jsx(
|
|
3504
|
+
return /* @__PURE__ */ jsx(ArbiHost, { config: host, children: /* @__PURE__ */ jsx(
|
|
3505
|
+
"div",
|
|
3506
|
+
{
|
|
3507
|
+
className: className ?? "h-[min(44rem,100dvh)] w-full min-h-0 overflow-hidden rounded-xl border bg-background shadow-sm",
|
|
3508
|
+
children: /* @__PURE__ */ jsx(ConnectedEmbeddedChat, { ...props })
|
|
3509
|
+
}
|
|
3510
|
+
) }, `${apiUrl}|${deploymentDomain ?? ""}`);
|
|
3301
3511
|
}
|
|
3302
3512
|
|
|
3303
3513
|
export { AgentSteps, AnswerTable, ArbiChat, AskAgainContext, CompactLogin, ConnectedBranchControls, ConnectedCitationRenderer, ConnectedCompactConversation, ConnectedConversationDocumentPicker, ConnectedEmbeddedChat, ConnectedMessage, ConnectedMessageArea, ConnectedMessageList, ConnectedThreadsPreview, ConnectedUserEntity, ConversationComposer2 as ConversationComposer, EmbeddedChatPanel, MessageDetailsModal, MessageLiveSeconds, RunningSubagents, SourceChips, WorkflowStepMessage, backUpOnSignup, completeSsoSignIn, defaultHost, renderConnectedUser, resolveSsoName, ssoAccountStatus, useAuthPages, useLoginActions, useLoginForm, useOpenChunk, useOpenWorkspaceIcon, useRegisterSubmitState, useSlashItems, useSsoSignIn, useWorkspaceDocTitles };
|
|
3304
|
-
//# sourceMappingURL=chunk-
|
|
3305
|
-
//# sourceMappingURL=chunk-
|
|
3514
|
+
//# sourceMappingURL=chunk-N54OMO6J.js.map
|
|
3515
|
+
//# sourceMappingURL=chunk-N54OMO6J.js.map
|