@arbidocs/blocks 0.5.67 → 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 +9 -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-NIZBKBJN.js → ConnectedDocumentViewer-MEKSE7KG.js} +7 -7
- package/dist/{ConnectedDocumentViewer-NIZBKBJN.js.map → ConnectedDocumentViewer-MEKSE7KG.js.map} +1 -1
- package/dist/{ConnectedDocumentViewer-IQHDCAZ5.cjs → ConnectedDocumentViewer-VVYEBNAK.cjs} +8 -8
- package/dist/{ConnectedDocumentViewer-IQHDCAZ5.cjs.map → ConnectedDocumentViewer-VVYEBNAK.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-HJ4FTVH6.cjs → ConnectedNativeDocxComparison-MIXCSPQP.cjs} +7 -7
- package/dist/{ConnectedNativeDocxComparison-HJ4FTVH6.cjs.map → ConnectedNativeDocxComparison-MIXCSPQP.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-FPW3BNBN.js → ConnectedNativeDocxComparison-ZXWLLKCZ.js} +6 -6
- package/dist/{ConnectedNativeDocxComparison-FPW3BNBN.js.map → ConnectedNativeDocxComparison-ZXWLLKCZ.js.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-PF46MU5H.cjs → ConnectedNativeDocxEditor-HDI7OBDA.cjs} +7 -7
- package/dist/{ConnectedNativeDocxEditor-PF46MU5H.cjs.map → ConnectedNativeDocxEditor-HDI7OBDA.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-S7NJMDSU.js → ConnectedNativeDocxEditor-IBQ7M3MU.js} +5 -5
- package/dist/{ConnectedNativeDocxEditor-S7NJMDSU.js.map → ConnectedNativeDocxEditor-IBQ7M3MU.js.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-5MHLV24V.js → ConnectedStreamedWordArtifact-S64KJPEJ.js} +6 -6
- package/dist/ConnectedStreamedWordArtifact-S64KJPEJ.js.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-LNGW7YGV.cjs → ConnectedStreamedWordArtifact-V7WFW5EP.cjs} +7 -7
- package/dist/ConnectedStreamedWordArtifact-V7WFW5EP.cjs.map +1 -0
- package/dist/agents/index.cjs +282 -282
- package/dist/agents/index.js +4 -4
- package/dist/chat/index.cjs +1 -1
- package/dist/chat/index.js +1 -1
- package/dist/{chunk-COZDIUG7.cjs → chunk-35FBVTT6.cjs} +5 -5
- package/dist/{chunk-COZDIUG7.cjs.map → chunk-35FBVTT6.cjs.map} +1 -1
- package/dist/{chunk-YBVBDVQX.cjs → chunk-3DQZ7JWL.cjs} +18 -18
- package/dist/{chunk-YBVBDVQX.cjs.map → chunk-3DQZ7JWL.cjs.map} +1 -1
- package/dist/{chunk-BWWND4Y7.js → chunk-5TFZFB5U.js} +3 -3
- package/dist/{chunk-BWWND4Y7.js.map → chunk-5TFZFB5U.js.map} +1 -1
- package/dist/{chunk-RFKAE6WS.js → chunk-B6QTKCDK.js} +4 -4
- package/dist/{chunk-RFKAE6WS.js.map → chunk-B6QTKCDK.js.map} +1 -1
- package/dist/{chunk-UDMII47W.cjs → chunk-CUSOXCBV.cjs} +7 -7
- package/dist/{chunk-UDMII47W.cjs.map → chunk-CUSOXCBV.cjs.map} +1 -1
- package/dist/{chunk-3VFQYKB5.cjs → chunk-EPBFVO4F.cjs} +277 -67
- package/dist/chunk-EPBFVO4F.cjs.map +1 -0
- package/dist/{chunk-Y6ZNWC7E.cjs → chunk-IH2WZUTL.cjs} +3 -3
- package/dist/{chunk-Y6ZNWC7E.cjs.map → chunk-IH2WZUTL.cjs.map} +1 -1
- package/dist/{chunk-PVPGD6QR.js → chunk-LKVOHL6C.js} +3 -3
- package/dist/{chunk-PVPGD6QR.js.map → chunk-LKVOHL6C.js.map} +1 -1
- package/dist/{chunk-TAI23FCY.js → chunk-LTPOV3W4.js} +3 -3
- package/dist/{chunk-TAI23FCY.js.map → chunk-LTPOV3W4.js.map} +1 -1
- package/dist/{chunk-FHXXDPNU.cjs → chunk-MM22MFON.cjs} +11 -11
- package/dist/{chunk-FHXXDPNU.cjs.map → chunk-MM22MFON.cjs.map} +1 -1
- package/dist/{chunk-W5D5GFP2.js → chunk-N54OMO6J.js} +280 -70
- package/dist/chunk-N54OMO6J.js.map +1 -0
- package/dist/{chunk-ZIQGSFHG.cjs → chunk-NBX7WWB6.cjs} +5 -5
- package/dist/{chunk-ZIQGSFHG.cjs.map → chunk-NBX7WWB6.cjs.map} +1 -1
- package/dist/{chunk-EOIJ5JYP.cjs → chunk-NMQVII6H.cjs} +4 -4
- package/dist/{chunk-EOIJ5JYP.cjs.map → chunk-NMQVII6H.cjs.map} +1 -1
- package/dist/{chunk-323R76RZ.js → chunk-NOBSRGFX.js} +3 -3
- package/dist/{chunk-323R76RZ.js.map → chunk-NOBSRGFX.js.map} +1 -1
- package/dist/{chunk-NDVLCOWS.js → chunk-P2ZQKJXS.js} +5 -5
- package/dist/{chunk-NDVLCOWS.js.map → chunk-P2ZQKJXS.js.map} +1 -1
- package/dist/{chunk-PGKZBAJB.js → chunk-RSVHFZJR.js} +5 -5
- package/dist/{chunk-PGKZBAJB.js.map → chunk-RSVHFZJR.js.map} +1 -1
- package/dist/{chunk-OZL5ABLF.js → chunk-SC3GOSJG.js} +3 -3
- package/dist/{chunk-OZL5ABLF.js.map → chunk-SC3GOSJG.js.map} +1 -1
- package/dist/{chunk-JWRTUYLC.js → chunk-SNU3AOCW.js} +3 -3
- package/dist/{chunk-JWRTUYLC.js.map → chunk-SNU3AOCW.js.map} +1 -1
- package/dist/{chunk-45Y7ASBC.cjs → chunk-XXI3EIEO.cjs} +46 -46
- package/dist/{chunk-45Y7ASBC.cjs.map → chunk-XXI3EIEO.cjs.map} +1 -1
- package/dist/{chunk-23ACBETH.cjs → chunk-ZSP6QSMG.cjs} +4 -4
- package/dist/{chunk-23ACBETH.cjs.map → chunk-ZSP6QSMG.cjs.map} +1 -1
- package/dist/connect/docx.cjs +11 -11
- package/dist/connect/docx.js +7 -7
- package/dist/connect/index.cjs +286 -286
- package/dist/connect/index.js +18 -18
- package/dist/connect/viewer.cjs +6 -6
- package/dist/connect/viewer.js +5 -5
- 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/dashboards/index.cjs +1 -1
- package/dist/dashboards/index.js +1 -1
- package/dist/embed/index.cjs +14 -6
- package/dist/embed/index.d.ts +2 -0
- package/dist/embed/index.js +3 -3
- package/dist/facts/index.cjs +1 -1
- package/dist/facts/index.js +1 -1
- package/dist/index.cjs +488 -488
- package/dist/index.js +14 -14
- package/dist/studio/index.cjs +1 -1
- package/dist/studio/index.js +1 -1
- package/dist/workflow-canvas/index.cjs +21 -21
- package/dist/workflow-canvas/index.js +6 -6
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ConnectedStreamedWordArtifact-5MHLV24V.js.map +0 -1
- package/dist/ConnectedStreamedWordArtifact-LNGW7YGV.cjs.map +0 -1
- package/dist/chunk-3VFQYKB5.cjs.map +0 -1
- package/dist/chunk-W5D5GFP2.js.map +0 -1
|
@@ -2204,7 +2204,7 @@ function resolveScrollContainer(current) {
|
|
|
2204
2204
|
function stripThinking(content) {
|
|
2205
2205
|
return content.replace(/<think>[\s\S]*?(<\/think>|$)/g, "");
|
|
2206
2206
|
}
|
|
2207
|
-
function ConnectedMessageList({ messages }) {
|
|
2207
|
+
function ConnectedMessageList({ messages, scrollElementRef }) {
|
|
2208
2208
|
const session = react.useArbiSessionStore();
|
|
2209
2209
|
const [previewOpen, setPreviewOpen] = React7.useState(false);
|
|
2210
2210
|
const participantTints = React7.useMemo(
|
|
@@ -2235,14 +2235,14 @@ function ConnectedMessageList({ messages }) {
|
|
|
2235
2235
|
text: lastMessage?.role === "assistant" ? stripThinking(lastMessage.content ?? "") : "",
|
|
2236
2236
|
resetKey: currentConversationId
|
|
2237
2237
|
});
|
|
2238
|
-
const
|
|
2238
|
+
const scrollContainerRef = React7.useRef(null);
|
|
2239
2239
|
const getScrollContainer = React7.useCallback(() => {
|
|
2240
|
-
|
|
2241
|
-
return
|
|
2242
|
-
}, []);
|
|
2240
|
+
scrollContainerRef.current = scrollElementRef?.current ?? resolveScrollContainer(scrollContainerRef.current);
|
|
2241
|
+
return scrollContainerRef.current;
|
|
2242
|
+
}, [scrollElementRef]);
|
|
2243
2243
|
React7.useEffect(() => {
|
|
2244
|
-
|
|
2245
|
-
}, []);
|
|
2244
|
+
scrollContainerRef.current = scrollElementRef?.current ?? resolveScrollContainer(null);
|
|
2245
|
+
}, [scrollElementRef]);
|
|
2246
2246
|
const { items: activityItems } = chunkCMYJEIZB_cjs.useConnectedThreadActivity(currentConversationId);
|
|
2247
2247
|
const transcript = [
|
|
2248
2248
|
...displayMessages.map((message, index) => ({
|
|
@@ -2394,15 +2394,21 @@ function ConnectedMessageList({ messages }) {
|
|
|
2394
2394
|
/* @__PURE__ */ jsxRuntime.jsx(ConnectedThreadsPreview, { open: previewOpen, onOpenChange: setPreviewOpen })
|
|
2395
2395
|
] });
|
|
2396
2396
|
}
|
|
2397
|
-
var MessageAreaComponent = React7.forwardRef(
|
|
2398
|
-
|
|
2399
|
-
});
|
|
2397
|
+
var MessageAreaComponent = React7.forwardRef(
|
|
2398
|
+
({ messages, scrollElementRef }, ref) => {
|
|
2399
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: "flex w-full flex-1 flex-col pt-4", "data-testid": "message-area", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-auto w-full", "data-testid": "message-list-bottom-anchor", children: /* @__PURE__ */ jsxRuntime.jsx(ConnectedMessageList, { messages, scrollElementRef }) }) });
|
|
2400
|
+
}
|
|
2401
|
+
);
|
|
2400
2402
|
MessageAreaComponent.displayName = "ConnectedMessageArea";
|
|
2401
2403
|
var ConnectedMessageArea = React7.memo(MessageAreaComponent, (prevProps, nextProps) => {
|
|
2402
|
-
return prevProps.messages === nextProps.messages;
|
|
2404
|
+
return prevProps.messages === nextProps.messages && prevProps.scrollElementRef === nextProps.scrollElementRef;
|
|
2403
2405
|
});
|
|
2404
2406
|
function ConnectedCompactConversation() {
|
|
2407
|
+
const session = react.useArbiSessionStore();
|
|
2405
2408
|
const containerRef = React7.useRef(null);
|
|
2409
|
+
const scrollRef = React7.useRef(null);
|
|
2410
|
+
const following = React7.useRef(true);
|
|
2411
|
+
const [showLatest, setShowLatest] = React7.useState(false);
|
|
2406
2412
|
const inputRef = React7.useRef(null);
|
|
2407
2413
|
const { selectedWorkspaceId, parentMessageId, messageHistory } = react.useConversationData();
|
|
2408
2414
|
const { isGenerating, handleSendMessage, handleAbortGeneration } = react.useConversationTurn({
|
|
@@ -2410,9 +2416,100 @@ function ConnectedCompactConversation() {
|
|
|
2410
2416
|
parentMessageId
|
|
2411
2417
|
});
|
|
2412
2418
|
const currentConversationId = react.useArbiSessionState((state) => state.conversationId);
|
|
2419
|
+
React7.useEffect(() => {
|
|
2420
|
+
const viewport = scrollRef.current;
|
|
2421
|
+
const content = containerRef.current;
|
|
2422
|
+
if (!viewport || !content) return;
|
|
2423
|
+
const follow = () => {
|
|
2424
|
+
if (following.current) viewport.scrollTop = viewport.scrollHeight;
|
|
2425
|
+
};
|
|
2426
|
+
follow();
|
|
2427
|
+
const observer = new ResizeObserver(follow);
|
|
2428
|
+
observer.observe(content);
|
|
2429
|
+
return () => observer.disconnect();
|
|
2430
|
+
}, [messageHistory.length > 0, currentConversationId]);
|
|
2431
|
+
React7.useEffect(() => {
|
|
2432
|
+
following.current = true;
|
|
2433
|
+
setShowLatest(false);
|
|
2434
|
+
}, [currentConversationId]);
|
|
2413
2435
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col flex-1 min-h-0", "data-testid": "embedded-chat", children: [
|
|
2414
|
-
/* @__PURE__ */ jsxRuntime.
|
|
2415
|
-
|
|
2436
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center justify-between border-b px-3 py-2 text-xs text-muted-foreground", children: [
|
|
2437
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: isGenerating ? "ARBI is responding\u2026" : "Conversation" }),
|
|
2438
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2439
|
+
ui.Button,
|
|
2440
|
+
{
|
|
2441
|
+
type: "button",
|
|
2442
|
+
size: "sm",
|
|
2443
|
+
variant: "ghost",
|
|
2444
|
+
disabled: isGenerating,
|
|
2445
|
+
onClick: () => {
|
|
2446
|
+
session.clearConversationError(currentConversationId || "new");
|
|
2447
|
+
session.startNewConversation();
|
|
2448
|
+
},
|
|
2449
|
+
children: [
|
|
2450
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "h-3.5 w-3.5 mr-1" }),
|
|
2451
|
+
" New chat"
|
|
2452
|
+
]
|
|
2453
|
+
}
|
|
2454
|
+
)
|
|
2455
|
+
] }),
|
|
2456
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex flex-col flex-1 min-h-0 overflow-hidden", children: [
|
|
2457
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2458
|
+
"div",
|
|
2459
|
+
{
|
|
2460
|
+
ref: scrollRef,
|
|
2461
|
+
className: "flex-1 min-h-0 overflow-y-auto overscroll-contain px-3",
|
|
2462
|
+
tabIndex: 0,
|
|
2463
|
+
"aria-label": "Conversation messages",
|
|
2464
|
+
"data-testid": "embedded-transcript",
|
|
2465
|
+
onWheel: (event) => {
|
|
2466
|
+
if (event.deltaY < 0) following.current = false;
|
|
2467
|
+
},
|
|
2468
|
+
onTouchMove: () => {
|
|
2469
|
+
following.current = false;
|
|
2470
|
+
},
|
|
2471
|
+
onKeyDown: (event) => {
|
|
2472
|
+
if (["ArrowUp", "PageUp", "Home"].includes(event.key)) following.current = false;
|
|
2473
|
+
},
|
|
2474
|
+
onScroll: (event) => {
|
|
2475
|
+
const node = event.currentTarget;
|
|
2476
|
+
const atBottom = node.scrollHeight - node.clientHeight - node.scrollTop < 32;
|
|
2477
|
+
following.current = atBottom;
|
|
2478
|
+
setShowLatest(!atBottom);
|
|
2479
|
+
},
|
|
2480
|
+
children: messageHistory.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
2481
|
+
ConnectedMessageArea,
|
|
2482
|
+
{
|
|
2483
|
+
ref: containerRef,
|
|
2484
|
+
messages: messageHistory,
|
|
2485
|
+
scrollElementRef: scrollRef
|
|
2486
|
+
}
|
|
2487
|
+
) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-3 items-center justify-center h-full text-muted-foreground text-sm p-6 text-center", children: [
|
|
2488
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.MessageSquare, { className: "h-8 w-8 text-primary", "aria-hidden": "true" }),
|
|
2489
|
+
currentConversationId ? "Loading messages..." : "Start a conversation by typing below."
|
|
2490
|
+
] })
|
|
2491
|
+
}
|
|
2492
|
+
),
|
|
2493
|
+
showLatest && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2494
|
+
ui.Button,
|
|
2495
|
+
{
|
|
2496
|
+
className: "absolute bottom-3 left-1/2 -translate-x-1/2 rounded-full shadow-md",
|
|
2497
|
+
size: "sm",
|
|
2498
|
+
variant: "secondary",
|
|
2499
|
+
onClick: () => {
|
|
2500
|
+
following.current = true;
|
|
2501
|
+
const viewport = scrollRef.current;
|
|
2502
|
+
if (viewport) viewport.scrollTop = viewport.scrollHeight;
|
|
2503
|
+
setShowLatest(false);
|
|
2504
|
+
},
|
|
2505
|
+
children: [
|
|
2506
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowDown, { className: "h-4 w-4 mr-1" }),
|
|
2507
|
+
" Latest message"
|
|
2508
|
+
]
|
|
2509
|
+
}
|
|
2510
|
+
)
|
|
2511
|
+
] }),
|
|
2512
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 w-full bg-background border-t p-2 z-10", children: /* @__PURE__ */ jsxRuntime.jsx(chunkUVZSX6GP_cjs.ComposerContainer, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2416
2513
|
ConversationComposer2,
|
|
2417
2514
|
{
|
|
2418
2515
|
handleSendMessage,
|
|
@@ -2457,12 +2554,19 @@ function ConnectedConversationDocumentPicker({
|
|
|
2457
2554
|
onSelectionChange
|
|
2458
2555
|
}) {
|
|
2459
2556
|
const session = react.useArbiSessionStore();
|
|
2557
|
+
const upload = react.useUploadDocuments();
|
|
2558
|
+
const role = react.useWorkspaceRole();
|
|
2559
|
+
const canUpload = role !== null && role !== "guest";
|
|
2560
|
+
const inputRef = React7.useRef(null);
|
|
2561
|
+
const [expanded, setExpanded] = React7.useState(false);
|
|
2562
|
+
const [uploadError, setUploadError] = React7.useState(null);
|
|
2563
|
+
const [uploadNotice, setUploadNotice] = React7.useState(null);
|
|
2460
2564
|
const currentConversationId = react.useArbiSessionState((state) => state.conversationId);
|
|
2461
2565
|
const convKey = currentConversationId || "new";
|
|
2462
2566
|
const inConversationDocuments = react.useArbiSessionState(
|
|
2463
2567
|
(state) => state.conversationDocuments[convKey] || EMPTY_DOCS
|
|
2464
2568
|
);
|
|
2465
|
-
const { data: documentsData } = react.useDocuments();
|
|
2569
|
+
const { data: documentsData, isLoading, error: documentsError } = react.useDocuments();
|
|
2466
2570
|
const documents = documentsData || [];
|
|
2467
2571
|
const selectedDocIds = inConversationDocuments.map((d) => d.docId);
|
|
2468
2572
|
const handleToggle = (docId) => {
|
|
@@ -2475,45 +2579,135 @@ function ConnectedConversationDocumentPicker({
|
|
|
2475
2579
|
selected ? selectedDocIds.filter((id) => id !== docId) : [...selectedDocIds, docId]
|
|
2476
2580
|
);
|
|
2477
2581
|
};
|
|
2478
|
-
|
|
2479
|
-
|
|
2480
|
-
|
|
2481
|
-
|
|
2482
|
-
|
|
2483
|
-
|
|
2484
|
-
|
|
2485
|
-
|
|
2486
|
-
const
|
|
2487
|
-
const
|
|
2488
|
-
|
|
2489
|
-
|
|
2490
|
-
|
|
2491
|
-
|
|
2492
|
-
|
|
2493
|
-
|
|
2494
|
-
|
|
2495
|
-
|
|
2496
|
-
|
|
2497
|
-
|
|
2498
|
-
|
|
2499
|
-
|
|
2500
|
-
}
|
|
2501
|
-
),
|
|
2502
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2503
|
-
"label",
|
|
2504
|
-
{
|
|
2505
|
-
htmlFor: `embedded-doc-${docId}`,
|
|
2506
|
-
className: "text-sm cursor-pointer flex-1 truncate",
|
|
2507
|
-
title: docTitle,
|
|
2508
|
-
children: docTitle
|
|
2509
|
-
}
|
|
2510
|
-
)
|
|
2511
|
-
]
|
|
2512
|
-
},
|
|
2513
|
-
docId
|
|
2582
|
+
async function addFiles(files) {
|
|
2583
|
+
if (!canUpload) return;
|
|
2584
|
+
setUploadError(null);
|
|
2585
|
+
setUploadNotice(null);
|
|
2586
|
+
const original = session.getState();
|
|
2587
|
+
const workspaceId = original.workspaceId;
|
|
2588
|
+
const key = original.conversationId || "new";
|
|
2589
|
+
try {
|
|
2590
|
+
const result = await upload.mutateAsync({ files });
|
|
2591
|
+
const ids = result.doc_ext_ids ?? [];
|
|
2592
|
+
const current = session.getState();
|
|
2593
|
+
if (current.workspaceId !== workspaceId) return;
|
|
2594
|
+
const selected = current.conversationDocuments[key] || EMPTY_DOCS;
|
|
2595
|
+
const merged = [
|
|
2596
|
+
...selected,
|
|
2597
|
+
...ids.filter((id) => !selected.some((d) => d.docId === id)).map((docId) => ({ docId, isPinned: false }))
|
|
2598
|
+
];
|
|
2599
|
+
session.setConversationDocuments(key, merged);
|
|
2600
|
+
onSelectionChange?.(merged.map((d) => d.docId));
|
|
2601
|
+
setExpanded(true);
|
|
2602
|
+
setUploadNotice(
|
|
2603
|
+
ids.length ? `${ids.length} file${ids.length === 1 ? "" : "s"} added to this chat.` : "No new files added. Files may already exist in this workspace."
|
|
2514
2604
|
);
|
|
2515
|
-
}
|
|
2516
|
-
|
|
2605
|
+
} catch (error) {
|
|
2606
|
+
setUploadError(error instanceof Error ? error.message : "Could not upload files. Try again.");
|
|
2607
|
+
}
|
|
2608
|
+
}
|
|
2609
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2610
|
+
"div",
|
|
2611
|
+
{
|
|
2612
|
+
className: "shrink-0 border-b bg-muted/30 px-3 py-2",
|
|
2613
|
+
"data-testid": "embedded-document-selector",
|
|
2614
|
+
children: [
|
|
2615
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-2", children: [
|
|
2616
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2617
|
+
ui.Button,
|
|
2618
|
+
{
|
|
2619
|
+
type: "button",
|
|
2620
|
+
variant: "ghost",
|
|
2621
|
+
size: "sm",
|
|
2622
|
+
className: "min-w-0",
|
|
2623
|
+
"aria-expanded": expanded,
|
|
2624
|
+
"aria-controls": "embedded-documents",
|
|
2625
|
+
onClick: () => setExpanded(!expanded),
|
|
2626
|
+
children: [
|
|
2627
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { className: "h-4 w-4 mr-2" }),
|
|
2628
|
+
"Files",
|
|
2629
|
+
selectedDocIds.length > 0 ? ` (${selectedDocIds.length} selected)` : "",
|
|
2630
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "h-4 w-4 ml-2" })
|
|
2631
|
+
]
|
|
2632
|
+
}
|
|
2633
|
+
),
|
|
2634
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2635
|
+
"input",
|
|
2636
|
+
{
|
|
2637
|
+
ref: inputRef,
|
|
2638
|
+
type: "file",
|
|
2639
|
+
multiple: true,
|
|
2640
|
+
className: "hidden",
|
|
2641
|
+
"aria-label": "Upload files",
|
|
2642
|
+
onChange: (event) => {
|
|
2643
|
+
const files = Array.from(event.target.files ?? []);
|
|
2644
|
+
event.target.value = "";
|
|
2645
|
+
if (files.length) void addFiles(files);
|
|
2646
|
+
}
|
|
2647
|
+
}
|
|
2648
|
+
),
|
|
2649
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2650
|
+
ui.Button,
|
|
2651
|
+
{
|
|
2652
|
+
type: "button",
|
|
2653
|
+
variant: "outline",
|
|
2654
|
+
size: "sm",
|
|
2655
|
+
disabled: upload.isPending || !canUpload,
|
|
2656
|
+
title: !canUpload ? "You do not have permission to upload to this workspace." : void 0,
|
|
2657
|
+
onClick: () => inputRef.current?.click(),
|
|
2658
|
+
children: [
|
|
2659
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Upload, { className: "h-4 w-4 mr-2" }),
|
|
2660
|
+
upload.isPending ? "Uploading\u2026" : "Upload files"
|
|
2661
|
+
]
|
|
2662
|
+
}
|
|
2663
|
+
)
|
|
2664
|
+
] }),
|
|
2665
|
+
uploadError && /* @__PURE__ */ jsxRuntime.jsx("p", { role: "alert", className: "mt-2 text-sm text-destructive", children: uploadError }),
|
|
2666
|
+
uploadNotice && /* @__PURE__ */ jsxRuntime.jsx("p", { role: "status", className: "mt-2 text-xs text-muted-foreground", children: uploadNotice }),
|
|
2667
|
+
expanded && /* @__PURE__ */ jsxRuntime.jsxs("div", { id: "embedded-documents", className: "mt-2", children: [
|
|
2668
|
+
/* @__PURE__ */ jsxRuntime.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." }),
|
|
2669
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2670
|
+
"div",
|
|
2671
|
+
{
|
|
2672
|
+
className: "max-h-28 overflow-y-auto rounded-md border p-2",
|
|
2673
|
+
"data-testid": "embedded-documents-list",
|
|
2674
|
+
children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: "Loading files\u2026" }) : documentsError ? /* @__PURE__ */ jsxRuntime.jsx("p", { role: "alert", className: "text-sm text-destructive", children: "Could not load workspace files." }) : documents.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: "No files yet. Upload a file to discuss it with ARBI." }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-2", children: documents.map((doc) => {
|
|
2675
|
+
const docId = doc.external_id;
|
|
2676
|
+
const docTitle = ui.getDocumentTitle(doc, "Untitled");
|
|
2677
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2678
|
+
"div",
|
|
2679
|
+
{
|
|
2680
|
+
className: "flex items-center space-x-2",
|
|
2681
|
+
"data-testid": `embedded-document-${docId}`,
|
|
2682
|
+
children: [
|
|
2683
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2684
|
+
ui.Checkbox,
|
|
2685
|
+
{
|
|
2686
|
+
id: `embedded-doc-${docId}`,
|
|
2687
|
+
checked: selectedDocIds.includes(docId),
|
|
2688
|
+
onCheckedChange: () => handleToggle(docId)
|
|
2689
|
+
}
|
|
2690
|
+
),
|
|
2691
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2692
|
+
"label",
|
|
2693
|
+
{
|
|
2694
|
+
htmlFor: `embedded-doc-${docId}`,
|
|
2695
|
+
className: "min-w-0 text-sm cursor-pointer flex-1 truncate",
|
|
2696
|
+
title: docTitle,
|
|
2697
|
+
children: docTitle
|
|
2698
|
+
}
|
|
2699
|
+
)
|
|
2700
|
+
]
|
|
2701
|
+
},
|
|
2702
|
+
docId
|
|
2703
|
+
);
|
|
2704
|
+
}) })
|
|
2705
|
+
}
|
|
2706
|
+
)
|
|
2707
|
+
] })
|
|
2708
|
+
]
|
|
2709
|
+
}
|
|
2710
|
+
);
|
|
2517
2711
|
}
|
|
2518
2712
|
async function backUpOnSignup({
|
|
2519
2713
|
email,
|
|
@@ -3190,27 +3384,33 @@ function EmbeddedChatPanel({
|
|
|
3190
3384
|
}) {
|
|
3191
3385
|
const workspaceId = react.useArbiSessionState((s) => s.workspaceId);
|
|
3192
3386
|
if (!signedIn)
|
|
3193
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-4", "data-testid": "embedded-panel-login", children: [
|
|
3387
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "h-full min-h-0 overflow-y-auto p-4", "data-testid": "embedded-panel-login", children: [
|
|
3194
3388
|
login,
|
|
3195
3389
|
footer
|
|
3196
3390
|
] });
|
|
3197
3391
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3198
3392
|
"div",
|
|
3199
3393
|
{
|
|
3200
|
-
className: "flex flex-col h-full min-h-0 bg-background text-foreground",
|
|
3394
|
+
className: "flex flex-col h-full min-h-0 min-w-0 overflow-hidden bg-background text-foreground",
|
|
3201
3395
|
"data-testid": "embedded-panel",
|
|
3202
3396
|
children: [
|
|
3203
|
-
header,
|
|
3204
|
-
workspaceId && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3205
|
-
|
|
3206
|
-
|
|
3207
|
-
|
|
3208
|
-
|
|
3397
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: header }),
|
|
3398
|
+
workspaceId && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3399
|
+
ConnectedConversationDocumentPicker,
|
|
3400
|
+
{
|
|
3401
|
+
onSelectionChange: onDocumentSelectionChange
|
|
3402
|
+
},
|
|
3403
|
+
workspaceId
|
|
3404
|
+
),
|
|
3405
|
+
platformHeader && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: platformHeader }),
|
|
3406
|
+
workspaceId ? /* @__PURE__ */ jsxRuntime.jsx(ConnectedCompactConversation, {}, workspaceId) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "p-4 text-sm text-muted-foreground", children: "Select a workspace to start chatting." }),
|
|
3407
|
+
platformFooter && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: platformFooter }),
|
|
3408
|
+
footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: footer })
|
|
3209
3409
|
]
|
|
3210
3410
|
}
|
|
3211
3411
|
);
|
|
3212
3412
|
}
|
|
3213
|
-
function EmbeddedWorkspaceHeader() {
|
|
3413
|
+
function EmbeddedWorkspaceHeader({ title }) {
|
|
3214
3414
|
const arbi = react.useArbi();
|
|
3215
3415
|
const signedIn = react.useArbiSession();
|
|
3216
3416
|
const workspaceId = react.useArbiSessionState((s) => s.workspaceId);
|
|
@@ -3231,7 +3431,11 @@ function EmbeddedWorkspaceHeader() {
|
|
|
3231
3431
|
setPending(false);
|
|
3232
3432
|
}
|
|
3233
3433
|
}
|
|
3234
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("header", { className: "p-3 border-b space-y-
|
|
3434
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("header", { className: "shrink-0 p-3 border-b space-y-3", children: [
|
|
3435
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 font-semibold text-primary", children: [
|
|
3436
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.MessageSquare, { className: "h-5 w-5", "aria-hidden": "true" }),
|
|
3437
|
+
title
|
|
3438
|
+
] }),
|
|
3235
3439
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-2", children: [
|
|
3236
3440
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-sm", children: signedIn.user?.email }),
|
|
3237
3441
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -3282,7 +3486,7 @@ function ConnectedEmbeddedChat({
|
|
|
3282
3486
|
{
|
|
3283
3487
|
...props,
|
|
3284
3488
|
signedIn: session.status === "signed-in",
|
|
3285
|
-
header: /* @__PURE__ */ jsxRuntime.jsx(EmbeddedWorkspaceHeader, {}),
|
|
3489
|
+
header: /* @__PURE__ */ jsxRuntime.jsx(EmbeddedWorkspaceHeader, { title }),
|
|
3286
3490
|
login: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
3287
3491
|
/* @__PURE__ */ jsxRuntime.jsx("h1", { className: "font-semibold mb-4", children: title }),
|
|
3288
3492
|
/* @__PURE__ */ jsxRuntime.jsx(CompactLogin, { ...login })
|
|
@@ -3290,7 +3494,7 @@ function ConnectedEmbeddedChat({
|
|
|
3290
3494
|
}
|
|
3291
3495
|
);
|
|
3292
3496
|
}
|
|
3293
|
-
function ArbiChat({ apiUrl, deploymentDomain, ...props }) {
|
|
3497
|
+
function ArbiChat({ apiUrl, deploymentDomain, className, ...props }) {
|
|
3294
3498
|
const host = React7.useMemo(
|
|
3295
3499
|
() => defaultHost(
|
|
3296
3500
|
{
|
|
@@ -3303,7 +3507,13 @@ function ArbiChat({ apiUrl, deploymentDomain, ...props }) {
|
|
|
3303
3507
|
),
|
|
3304
3508
|
[apiUrl, deploymentDomain]
|
|
3305
3509
|
);
|
|
3306
|
-
return /* @__PURE__ */ jsxRuntime.jsx(chunkEFS3XXZS_cjs.ArbiHost, { config: host, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3510
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkEFS3XXZS_cjs.ArbiHost, { config: host, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3511
|
+
"div",
|
|
3512
|
+
{
|
|
3513
|
+
className: className ?? "h-[min(44rem,100dvh)] w-full min-h-0 overflow-hidden rounded-xl border bg-background shadow-sm",
|
|
3514
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(ConnectedEmbeddedChat, { ...props })
|
|
3515
|
+
}
|
|
3516
|
+
) }, `${apiUrl}|${deploymentDomain ?? ""}`);
|
|
3307
3517
|
}
|
|
3308
3518
|
|
|
3309
3519
|
exports.AgentSteps = AgentSteps;
|
|
@@ -3343,5 +3553,5 @@ exports.useRegisterSubmitState = useRegisterSubmitState;
|
|
|
3343
3553
|
exports.useSlashItems = useSlashItems;
|
|
3344
3554
|
exports.useSsoSignIn = useSsoSignIn;
|
|
3345
3555
|
exports.useWorkspaceDocTitles = useWorkspaceDocTitles;
|
|
3346
|
-
//# sourceMappingURL=chunk-
|
|
3347
|
-
//# sourceMappingURL=chunk-
|
|
3556
|
+
//# sourceMappingURL=chunk-EPBFVO4F.cjs.map
|
|
3557
|
+
//# sourceMappingURL=chunk-EPBFVO4F.cjs.map
|