@flamingo-stack/openframe-frontend-core 0.0.521 → 0.0.522-snapshot.20260807100640
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-6Q55DOM2.cjs → chunk-43QX3P4G.cjs} +3 -3
- package/dist/{chunk-6Q55DOM2.cjs.map → chunk-43QX3P4G.cjs.map} +1 -1
- package/dist/{chunk-R63KHYFN.js → chunk-7EYNWY2N.js} +2 -2
- package/dist/{chunk-Y3ES77KJ.js → chunk-7LSK5YFW.js} +2 -2
- package/dist/{chunk-XYVJKPUW.cjs → chunk-7RIYOJLG.cjs} +26 -26
- package/dist/{chunk-XYVJKPUW.cjs.map → chunk-7RIYOJLG.cjs.map} +1 -1
- package/dist/{chunk-ATN5CTEP.js → chunk-7ZIGB34Y.js} +6 -6
- package/dist/{chunk-NP62VGRO.js → chunk-ANKQQTAI.js} +4 -4
- package/dist/{chunk-VFYIFHJ3.js → chunk-BPBMHS4U.js} +2 -2
- package/dist/{chunk-WK5Z2Z5T.cjs → chunk-D3PPR2WR.cjs} +14 -14
- package/dist/{chunk-WK5Z2Z5T.cjs.map → chunk-D3PPR2WR.cjs.map} +1 -1
- package/dist/{chunk-5NQTT7D5.js → chunk-FP6HEAQC.js} +5 -5
- package/dist/{chunk-BSJAHSOO.cjs → chunk-H5TAFA4H.cjs} +4 -4
- package/dist/{chunk-BSJAHSOO.cjs.map → chunk-H5TAFA4H.cjs.map} +1 -1
- package/dist/{chunk-AAM6IP3G.cjs → chunk-HPGBHELQ.cjs} +7 -7
- package/dist/{chunk-AAM6IP3G.cjs.map → chunk-HPGBHELQ.cjs.map} +1 -1
- package/dist/{chunk-YJ4VCBRT.js → chunk-ICWQQQTR.js} +2 -2
- package/dist/{chunk-KSV7S3XR.cjs → chunk-J2OPY22M.cjs} +87 -87
- package/dist/{chunk-KSV7S3XR.cjs.map → chunk-J2OPY22M.cjs.map} +1 -1
- package/dist/{chunk-YPT3CBFR.cjs → chunk-JGYVXVN6.cjs} +61 -61
- package/dist/{chunk-YPT3CBFR.cjs.map → chunk-JGYVXVN6.cjs.map} +1 -1
- package/dist/{chunk-BFGMIDQN.cjs → chunk-JKUYXCG2.cjs} +9 -9
- package/dist/{chunk-BFGMIDQN.cjs.map → chunk-JKUYXCG2.cjs.map} +1 -1
- package/dist/{chunk-67R53SBT.cjs → chunk-KBE7SNFZ.cjs} +5 -5
- package/dist/{chunk-67R53SBT.cjs.map → chunk-KBE7SNFZ.cjs.map} +1 -1
- package/dist/{chunk-TXO7WK2L.js → chunk-L4DKYRHG.js} +2 -2
- package/dist/{chunk-KKQX7YWX.cjs → chunk-LJCBSJFU.cjs} +26 -26
- package/dist/{chunk-KKQX7YWX.cjs.map → chunk-LJCBSJFU.cjs.map} +1 -1
- package/dist/{chunk-GGHXEEYL.js → chunk-M45XIHZY.js} +2 -2
- package/dist/{chunk-TFUSHMTY.js → chunk-NBANPQ3N.js} +2 -2
- package/dist/{chunk-FHSZYVS5.js → chunk-NMZ33YWL.js} +4 -4
- package/dist/{chunk-FBK7CPXN.cjs → chunk-OGXZCZSA.cjs} +31 -31
- package/dist/{chunk-FBK7CPXN.cjs.map → chunk-OGXZCZSA.cjs.map} +1 -1
- package/dist/{chunk-7QEBK5ZY.js → chunk-OPU5BLBT.js} +2 -2
- package/dist/{chunk-RDGUBROF.cjs → chunk-PZVYYDFL.cjs} +37 -37
- package/dist/{chunk-RDGUBROF.cjs.map → chunk-PZVYYDFL.cjs.map} +1 -1
- package/dist/{chunk-AIVZKRDL.js → chunk-QBLLF7VS.js} +2 -2
- package/dist/{chunk-SX7V35WT.cjs → chunk-VYRP7JOD.cjs} +34 -8
- package/dist/chunk-VYRP7JOD.cjs.map +1 -0
- package/dist/{chunk-6AQKSCZ5.js → chunk-YJLQQGLH.js} +138 -112
- package/dist/{chunk-6AQKSCZ5.js.map → chunk-YJLQQGLH.js.map} +1 -1
- package/dist/{chunk-GAU637M2.cjs → chunk-ZIIIYUZ5.cjs} +11 -11
- package/dist/{chunk-GAU637M2.cjs.map → chunk-ZIIIYUZ5.cjs.map} +1 -1
- package/dist/components/case-studies/index.cjs +8 -8
- package/dist/components/case-studies/index.js +2 -2
- package/dist/components/chat/hooks/use-jetstream-dialog-subscription.d.ts +7 -1
- package/dist/components/chat/hooks/use-jetstream-dialog-subscription.d.ts.map +1 -1
- package/dist/components/chat/index.cjs +4 -2
- package/dist/components/chat/index.cjs.map +1 -1
- package/dist/components/chat/index.js +3 -1
- package/dist/components/chat/types/api.types.d.ts +22 -4
- package/dist/components/chat/types/api.types.d.ts.map +1 -1
- package/dist/components/contact/index.cjs +3 -3
- package/dist/components/contact/index.js +2 -2
- package/dist/components/docs/index.cjs +5 -5
- package/dist/components/docs/index.js +4 -4
- package/dist/components/embeds/index.cjs +3 -3
- package/dist/components/embeds/index.js +2 -2
- package/dist/components/faq/index.cjs +3 -3
- package/dist/components/faq/index.js +2 -2
- package/dist/components/features/index.cjs +2 -2
- package/dist/components/features/index.js +1 -1
- package/dist/components/help-center-pages/index.cjs +22 -22
- package/dist/components/help-center-pages/index.js +13 -13
- package/dist/components/index.cjs +134 -132
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +13 -11
- package/dist/components/index.js.map +1 -1
- package/dist/components/meeting-scheduler/index.cjs +34 -34
- package/dist/components/meeting-scheduler/index.js +3 -3
- package/dist/components/navigation/index.cjs +2 -2
- package/dist/components/navigation/index.js +1 -1
- package/dist/components/onboarding-guides/index.cjs +5 -5
- package/dist/components/onboarding-guides/index.js +4 -4
- package/dist/components/related-content/index.cjs +3 -3
- package/dist/components/related-content/index.js +2 -2
- package/dist/components/tickets/index.cjs +6 -6
- package/dist/components/tickets/index.js +5 -5
- package/dist/components/ui/index.cjs +4 -2
- package/dist/components/ui/index.cjs.map +1 -1
- package/dist/components/ui/index.js +3 -1
- package/dist/components/ui/tab-navigation.d.ts.map +1 -1
- package/dist/index.cjs +4 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +3 -1
- package/package.json +1 -1
- package/src/components/chat/hooks/.use-jetstream-dialog-subscription.md +11 -4
- package/src/components/chat/hooks/use-jetstream-dialog-subscription.ts +71 -6
- package/src/components/chat/types/api.types.ts +22 -4
- package/src/components/chat/utils/__tests__/history-merge.test.ts +99 -0
- package/src/components/ui/__tests__/tab-navigation.test.tsx +33 -1
- package/src/components/ui/tab-navigation.tsx +25 -8
- package/dist/chunk-SX7V35WT.cjs.map +0 -1
- /package/dist/{chunk-R63KHYFN.js.map → chunk-7EYNWY2N.js.map} +0 -0
- /package/dist/{chunk-Y3ES77KJ.js.map → chunk-7LSK5YFW.js.map} +0 -0
- /package/dist/{chunk-ATN5CTEP.js.map → chunk-7ZIGB34Y.js.map} +0 -0
- /package/dist/{chunk-NP62VGRO.js.map → chunk-ANKQQTAI.js.map} +0 -0
- /package/dist/{chunk-VFYIFHJ3.js.map → chunk-BPBMHS4U.js.map} +0 -0
- /package/dist/{chunk-5NQTT7D5.js.map → chunk-FP6HEAQC.js.map} +0 -0
- /package/dist/{chunk-YJ4VCBRT.js.map → chunk-ICWQQQTR.js.map} +0 -0
- /package/dist/{chunk-TXO7WK2L.js.map → chunk-L4DKYRHG.js.map} +0 -0
- /package/dist/{chunk-GGHXEEYL.js.map → chunk-M45XIHZY.js.map} +0 -0
- /package/dist/{chunk-TFUSHMTY.js.map → chunk-NBANPQ3N.js.map} +0 -0
- /package/dist/{chunk-FHSZYVS5.js.map → chunk-NMZ33YWL.js.map} +0 -0
- /package/dist/{chunk-7QEBK5ZY.js.map → chunk-OPU5BLBT.js.map} +0 -0
- /package/dist/{chunk-AIVZKRDL.js.map → chunk-QBLLF7VS.js.map} +0 -0
|
@@ -22387,7 +22387,8 @@ var TabBar = memo4(function TabBar2({
|
|
|
22387
22387
|
}, [leftFade, rightFade]);
|
|
22388
22388
|
const isPlaced = indicator.width > 0;
|
|
22389
22389
|
const indicatorStyle = {
|
|
22390
|
-
|
|
22390
|
+
width: `${indicator.width}px`,
|
|
22391
|
+
transform: `translateX(${indicator.left}px)`,
|
|
22391
22392
|
opacity: isPlaced ? 1 : 0
|
|
22392
22393
|
};
|
|
22393
22394
|
const shouldAnimateIndicator = hasPlacedIndicatorRef.current;
|
|
@@ -22449,8 +22450,8 @@ var TabBar = memo4(function TabBar2({
|
|
|
22449
22450
|
{
|
|
22450
22451
|
"aria-hidden": true,
|
|
22451
22452
|
className: cn(
|
|
22452
|
-
"pointer-events-none absolute bottom-0 left-0 h-1
|
|
22453
|
-
shouldAnimateIndicator && "transition-[transform,opacity] duration-200 ease-out motion-reduce:transition-none"
|
|
22453
|
+
"pointer-events-none absolute bottom-0 left-0 h-1 bg-ods-accent",
|
|
22454
|
+
shouldAnimateIndicator && "transition-[transform,width,opacity] duration-200 ease-out motion-reduce:transition-none"
|
|
22454
22455
|
),
|
|
22455
22456
|
style: indicatorStyle
|
|
22456
22457
|
}
|
|
@@ -52765,9 +52766,10 @@ function useScriptedStream(frames, resetKey, enabled = true) {
|
|
|
52765
52766
|
}
|
|
52766
52767
|
|
|
52767
52768
|
// src/components/chat/hooks/use-jetstream-dialog-subscription.ts
|
|
52768
|
-
import { useEffect as useEffect85, useRef as useRef69, useState as useState115 } from "react";
|
|
52769
|
+
import { useCallback as useCallback49, useEffect as useEffect85, useRef as useRef69, useState as useState115 } from "react";
|
|
52769
52770
|
var DEFAULT_STREAM_NAME = "CHAT_CHUNKS";
|
|
52770
52771
|
var RESYNC_AFTER_HIDDEN_MS = 1e4;
|
|
52772
|
+
var RESYNC_COALESCE_MS = 1e3;
|
|
52771
52773
|
var RECOVERY_REPORT_FLOOR_MS = 5e3;
|
|
52772
52774
|
function useJetStreamDialogSubscription({
|
|
52773
52775
|
enabled,
|
|
@@ -52783,7 +52785,8 @@ function useJetStreamDialogSubscription({
|
|
|
52783
52785
|
getNatsWsUrl,
|
|
52784
52786
|
clientConfig = {},
|
|
52785
52787
|
reconnectionBackoff,
|
|
52786
|
-
inactiveThresholdMs
|
|
52788
|
+
inactiveThresholdMs,
|
|
52789
|
+
resyncSignal = 0
|
|
52787
52790
|
}) {
|
|
52788
52791
|
const [isConnected, setIsConnected] = useState115(false);
|
|
52789
52792
|
const [isSubscribed, setIsSubscribed] = useState115(false);
|
|
@@ -52791,6 +52794,8 @@ function useJetStreamDialogSubscription({
|
|
|
52791
52794
|
const [recoveryCount, setRecoveryCount] = useState115(0);
|
|
52792
52795
|
const [currentStreamSeq, setCurrentStreamSeq] = useState115(null);
|
|
52793
52796
|
const lastRecoveryReportRef = useRef69(0);
|
|
52797
|
+
const resyncTimerRef = useRef69(null);
|
|
52798
|
+
const lastResyncSignalRef = useRef69(resyncSignal);
|
|
52794
52799
|
const clientRef = useRef69(null);
|
|
52795
52800
|
const subscriptionRef = useRef69(null);
|
|
52796
52801
|
const highestStreamSeqRef = useRef69(null);
|
|
@@ -52920,8 +52925,22 @@ function useJetStreamDialogSubscription({
|
|
|
52920
52925
|
}, [enabled, wsUrl]);
|
|
52921
52926
|
useEffect85(() => {
|
|
52922
52927
|
highestStreamSeqRef.current = null;
|
|
52928
|
+
lastResyncSignalRef.current = resyncSignal;
|
|
52923
52929
|
setCurrentStreamSeq(null);
|
|
52930
|
+
return () => {
|
|
52931
|
+
if (resyncTimerRef.current !== null) {
|
|
52932
|
+
clearTimeout(resyncTimerRef.current);
|
|
52933
|
+
resyncTimerRef.current = null;
|
|
52934
|
+
}
|
|
52935
|
+
};
|
|
52924
52936
|
}, [dialogId]);
|
|
52937
|
+
const requestResync = useCallback49(() => {
|
|
52938
|
+
if (resyncTimerRef.current !== null) clearTimeout(resyncTimerRef.current);
|
|
52939
|
+
resyncTimerRef.current = setTimeout(() => {
|
|
52940
|
+
resyncTimerRef.current = null;
|
|
52941
|
+
setReconnectionCount((c) => c + 1);
|
|
52942
|
+
}, RESYNC_COALESCE_MS);
|
|
52943
|
+
}, []);
|
|
52925
52944
|
useEffect85(() => {
|
|
52926
52945
|
if (!enabled) return;
|
|
52927
52946
|
let hiddenSince = document.visibilityState === "hidden" ? Date.now() : 0;
|
|
@@ -52933,12 +52952,18 @@ function useJetStreamDialogSubscription({
|
|
|
52933
52952
|
const awayMs = hiddenSince === 0 ? 0 : Date.now() - hiddenSince;
|
|
52934
52953
|
hiddenSince = 0;
|
|
52935
52954
|
if (awayMs >= RESYNC_AFTER_HIDDEN_MS) {
|
|
52936
|
-
|
|
52955
|
+
requestResync();
|
|
52937
52956
|
}
|
|
52938
52957
|
};
|
|
52939
52958
|
document.addEventListener("visibilitychange", onVisibilityChange);
|
|
52940
52959
|
return () => document.removeEventListener("visibilitychange", onVisibilityChange);
|
|
52941
|
-
}, [enabled]);
|
|
52960
|
+
}, [enabled, requestResync]);
|
|
52961
|
+
useEffect85(() => {
|
|
52962
|
+
if (!enabled) return;
|
|
52963
|
+
if (resyncSignal <= lastResyncSignalRef.current) return;
|
|
52964
|
+
lastResyncSignalRef.current = resyncSignal;
|
|
52965
|
+
requestResync();
|
|
52966
|
+
}, [enabled, resyncSignal, requestResync]);
|
|
52942
52967
|
useEffect85(() => {
|
|
52943
52968
|
if (!enabled || !dialogId || !isConnected) {
|
|
52944
52969
|
if (subscriptionRef.current) {
|
|
@@ -53441,7 +53466,7 @@ function useEmptyStateConfig(emptyStateUrl, options) {
|
|
|
53441
53466
|
}
|
|
53442
53467
|
|
|
53443
53468
|
// src/components/chat/hooks/use-chat-attachments.ts
|
|
53444
|
-
import { useCallback as
|
|
53469
|
+
import { useCallback as useCallback50, useMemo as useMemo50, useRef as useRef71, useState as useState118 } from "react";
|
|
53445
53470
|
import { fileTypeFromBlob } from "file-type";
|
|
53446
53471
|
var CHAT_ATTACHMENTS_BUCKET = "chat-attachments";
|
|
53447
53472
|
var CHAT_ATTACHMENTS_FOLDER = "chat";
|
|
@@ -53519,10 +53544,10 @@ function useChatAttachments() {
|
|
|
53519
53544
|
const uploadUrlEndpoint = runtime.endpoints.attachmentUploadUrl;
|
|
53520
53545
|
const [attachments, setAttachments] = useState118([]);
|
|
53521
53546
|
const controllersRef = useRef71(/* @__PURE__ */ new Map());
|
|
53522
|
-
const updateOne =
|
|
53547
|
+
const updateOne = useCallback50((id, patch) => {
|
|
53523
53548
|
setAttachments((prev) => prev.map((a) => a.id === id ? { ...a, ...patch } : a));
|
|
53524
53549
|
}, []);
|
|
53525
|
-
const removeAttachment =
|
|
53550
|
+
const removeAttachment = useCallback50((id) => {
|
|
53526
53551
|
const ctrl = controllersRef.current.get(id);
|
|
53527
53552
|
if (ctrl) {
|
|
53528
53553
|
ctrl.abort();
|
|
@@ -53530,12 +53555,12 @@ function useChatAttachments() {
|
|
|
53530
53555
|
}
|
|
53531
53556
|
setAttachments((prev) => prev.filter((a) => a.id !== id));
|
|
53532
53557
|
}, []);
|
|
53533
|
-
const clear =
|
|
53558
|
+
const clear = useCallback50(() => {
|
|
53534
53559
|
for (const ctrl of controllersRef.current.values()) ctrl.abort();
|
|
53535
53560
|
controllersRef.current.clear();
|
|
53536
53561
|
setAttachments([]);
|
|
53537
53562
|
}, []);
|
|
53538
|
-
const uploadOne =
|
|
53563
|
+
const uploadOne = useCallback50(
|
|
53539
53564
|
async (att) => {
|
|
53540
53565
|
const ctrl = controllersRef.current.get(att.id);
|
|
53541
53566
|
try {
|
|
@@ -53609,7 +53634,7 @@ function useChatAttachments() {
|
|
|
53609
53634
|
);
|
|
53610
53635
|
const attachmentsRef = useRef71([]);
|
|
53611
53636
|
attachmentsRef.current = attachments;
|
|
53612
|
-
const addFiles =
|
|
53637
|
+
const addFiles = useCallback50(
|
|
53613
53638
|
(files) => {
|
|
53614
53639
|
const arr = Array.from(files);
|
|
53615
53640
|
if (arr.length === 0) return;
|
|
@@ -53684,7 +53709,7 @@ function useChatAttachments() {
|
|
|
53684
53709
|
}
|
|
53685
53710
|
|
|
53686
53711
|
// src/components/chat/hooks/use-chat-attachment-image-gallery.tsx
|
|
53687
|
-
import { useCallback as
|
|
53712
|
+
import { useCallback as useCallback51, useEffect as useEffect88, useRef as useRef72, useState as useState119 } from "react";
|
|
53688
53713
|
import { jsx as jsx380 } from "react/jsx-runtime";
|
|
53689
53714
|
var CLOSED = { isOpen: false, images: [], initialIndex: 0 };
|
|
53690
53715
|
function useChatAttachmentImageGallery() {
|
|
@@ -53692,7 +53717,7 @@ function useChatAttachmentImageGallery() {
|
|
|
53692
53717
|
const viewUrlPrefix = runtime.endpoints.attachmentViewUrlPrefix;
|
|
53693
53718
|
const panelRef = useRef72(null);
|
|
53694
53719
|
const [state, setState] = useState119(CLOSED);
|
|
53695
|
-
const handleClose =
|
|
53720
|
+
const handleClose = useCallback51(() => setState(CLOSED), []);
|
|
53696
53721
|
useEffect88(() => {
|
|
53697
53722
|
const root = panelRef.current;
|
|
53698
53723
|
if (!root) return;
|
|
@@ -53757,20 +53782,20 @@ function useCloseOnNavigation(close, pathname) {
|
|
|
53757
53782
|
}
|
|
53758
53783
|
|
|
53759
53784
|
// src/components/chat/hooks/use-chat.ts
|
|
53760
|
-
import { useState as useState121, useCallback as
|
|
53785
|
+
import { useState as useState121, useCallback as useCallback53, useEffect as useEffect90, useRef as useRef75 } from "react";
|
|
53761
53786
|
|
|
53762
53787
|
// src/components/chat/hooks/use-sse.ts
|
|
53763
|
-
import { useState as useState120, useCallback as
|
|
53788
|
+
import { useState as useState120, useCallback as useCallback52, useRef as useRef74 } from "react";
|
|
53764
53789
|
function useSSE({ useMock = true, debugMode = false, streamFn } = {}) {
|
|
53765
53790
|
const [isStreaming, setIsStreaming] = useState120(false);
|
|
53766
53791
|
const [error, setError] = useState120(null);
|
|
53767
53792
|
const abortControllerRef = useRef74(null);
|
|
53768
|
-
const fallbackStream =
|
|
53793
|
+
const fallbackStream = useCallback52(async function* () {
|
|
53769
53794
|
throw new Error(
|
|
53770
53795
|
"[useSSE] No streamFn provided and `useMock: true` is no longer wired into the lib. Supply a `streamFn` (see `createDocStreamFn` in use-embedded-chat) or migrate the mock to your host code."
|
|
53771
53796
|
);
|
|
53772
53797
|
}, []);
|
|
53773
|
-
const streamMessage =
|
|
53798
|
+
const streamMessage = useCallback52(
|
|
53774
53799
|
async function* (message2, extra) {
|
|
53775
53800
|
setIsStreaming(true);
|
|
53776
53801
|
setError(null);
|
|
@@ -53800,13 +53825,13 @@ function useSSE({ useMock = true, debugMode = false, streamFn } = {}) {
|
|
|
53800
53825
|
},
|
|
53801
53826
|
[streamFn, fallbackStream]
|
|
53802
53827
|
);
|
|
53803
|
-
const abort =
|
|
53828
|
+
const abort = useCallback52(() => {
|
|
53804
53829
|
if (abortControllerRef.current) {
|
|
53805
53830
|
abortControllerRef.current.abort();
|
|
53806
53831
|
}
|
|
53807
53832
|
setIsStreaming(false);
|
|
53808
53833
|
}, []);
|
|
53809
|
-
const reset =
|
|
53834
|
+
const reset = useCallback52(() => {
|
|
53810
53835
|
}, []);
|
|
53811
53836
|
return {
|
|
53812
53837
|
streamMessage,
|
|
@@ -53849,10 +53874,10 @@ function useChat({
|
|
|
53849
53874
|
debugMode,
|
|
53850
53875
|
streamFn
|
|
53851
53876
|
});
|
|
53852
|
-
const addMessage =
|
|
53877
|
+
const addMessage = useCallback53((message2) => {
|
|
53853
53878
|
setMessages((prev) => [...prev, message2]);
|
|
53854
53879
|
}, []);
|
|
53855
|
-
const updateLastAssistantMessage =
|
|
53880
|
+
const updateLastAssistantMessage = useCallback53((segments) => {
|
|
53856
53881
|
setMessages((prev) => {
|
|
53857
53882
|
const newMessages = [...prev];
|
|
53858
53883
|
const lastMessage = newMessages[newMessages.length - 1];
|
|
@@ -53865,7 +53890,7 @@ function useChat({
|
|
|
53865
53890
|
return newMessages;
|
|
53866
53891
|
});
|
|
53867
53892
|
}, []);
|
|
53868
|
-
const sendMessage =
|
|
53893
|
+
const sendMessage = useCallback53(
|
|
53869
53894
|
async (text, extra, options) => {
|
|
53870
53895
|
const userMessage = {
|
|
53871
53896
|
id: `user-${Date.now()}`,
|
|
@@ -54095,21 +54120,21 @@ function useChat({
|
|
|
54095
54120
|
},
|
|
54096
54121
|
[streamMessage, addMessage, updateLastAssistantMessage, assistantName, assistantAvatar]
|
|
54097
54122
|
);
|
|
54098
|
-
const handleQuickAction =
|
|
54123
|
+
const handleQuickAction = useCallback53(
|
|
54099
54124
|
(actionText) => {
|
|
54100
54125
|
sendMessage(actionText);
|
|
54101
54126
|
},
|
|
54102
54127
|
[sendMessage]
|
|
54103
54128
|
);
|
|
54104
|
-
const clearMessages =
|
|
54129
|
+
const clearMessages = useCallback53(() => {
|
|
54105
54130
|
setMessages([]);
|
|
54106
54131
|
setIsTyping(false);
|
|
54107
54132
|
reset();
|
|
54108
54133
|
}, [reset]);
|
|
54109
|
-
const hydrateMessages =
|
|
54134
|
+
const hydrateMessages = useCallback53((history) => {
|
|
54110
54135
|
setMessages((prev) => prev.length === 0 ? history : [...history, ...prev]);
|
|
54111
54136
|
}, []);
|
|
54112
|
-
const stopMessage =
|
|
54137
|
+
const stopMessage = useCallback53(() => {
|
|
54113
54138
|
abort();
|
|
54114
54139
|
setIsTyping(false);
|
|
54115
54140
|
}, [abort]);
|
|
@@ -54128,7 +54153,7 @@ function useChat({
|
|
|
54128
54153
|
}
|
|
54129
54154
|
|
|
54130
54155
|
// src/components/chat/hooks/use-sse-chat-adapter.ts
|
|
54131
|
-
import { useCallback as
|
|
54156
|
+
import { useCallback as useCallback55, useMemo as useMemo52, useRef as useRef78 } from "react";
|
|
54132
54157
|
|
|
54133
54158
|
// src/chat-protocol/frames.ts
|
|
54134
54159
|
var FRAME_TERMINATOR = "\0";
|
|
@@ -56382,7 +56407,7 @@ function createChatDialogStore(options = {}) {
|
|
|
56382
56407
|
}
|
|
56383
56408
|
|
|
56384
56409
|
// src/components/chat/stream/use-chat-stream-reducer.ts
|
|
56385
|
-
import { useCallback as
|
|
56410
|
+
import { useCallback as useCallback54, useEffect as useEffect92, useMemo as useMemo51, useRef as useRef77, useSyncExternalStore } from "react";
|
|
56386
56411
|
|
|
56387
56412
|
// src/components/chat/stream/delta-batcher.ts
|
|
56388
56413
|
var DELTA_FLUSH_FALLBACK_MS = 50;
|
|
@@ -56474,9 +56499,9 @@ function useChatStreamReducer({
|
|
|
56474
56499
|
const optionsRef = useRef77(createReducerOptions);
|
|
56475
56500
|
optionsRef.current = createReducerOptions;
|
|
56476
56501
|
const reducer2 = store.getReducer(dialogId, side, () => optionsRef.current?.() ?? {});
|
|
56477
|
-
const getSnapshot =
|
|
56478
|
-
const getServerSnapshot =
|
|
56479
|
-
const subscribe =
|
|
56502
|
+
const getSnapshot = useCallback54(() => store.getSnapshot(dialogId, side), [store, dialogId, side]);
|
|
56503
|
+
const getServerSnapshot = useCallback54(() => store.getServerSnapshot(), [store]);
|
|
56504
|
+
const subscribe = useCallback54((listener) => store.subscribe(listener), [store]);
|
|
56480
56505
|
const state = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
|
|
56481
56506
|
useEffect92(() => store.retain(dialogId, side), [store, dialogId, side]);
|
|
56482
56507
|
const keyRef = useRef77({ dialogId, side });
|
|
@@ -56494,8 +56519,8 @@ function useChatStreamReducer({
|
|
|
56494
56519
|
});
|
|
56495
56520
|
}
|
|
56496
56521
|
const batcher = batcherRef.current;
|
|
56497
|
-
const flushDeltas =
|
|
56498
|
-
const applyEvent =
|
|
56522
|
+
const flushDeltas = useCallback54(() => batcher.flush(), [batcher]);
|
|
56523
|
+
const applyEvent = useCallback54(
|
|
56499
56524
|
(event) => {
|
|
56500
56525
|
if (batcher.push(event, keyRef.current)) return;
|
|
56501
56526
|
batcher.flush();
|
|
@@ -56504,7 +56529,7 @@ function useChatStreamReducer({
|
|
|
56504
56529
|
[batcher, store, dialogId, side]
|
|
56505
56530
|
);
|
|
56506
56531
|
useEffect92(() => () => batcher.dispose(), [batcher]);
|
|
56507
|
-
const mutate =
|
|
56532
|
+
const mutate = useCallback54(
|
|
56508
56533
|
(fn) => store.mutate(dialogId, side, fn),
|
|
56509
56534
|
[store, dialogId, side]
|
|
56510
56535
|
);
|
|
@@ -56536,7 +56561,7 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
|
|
|
56536
56561
|
const source = runtime.source || DEFAULT_CHAT_SOURCE;
|
|
56537
56562
|
const tableIdForDocumentType = options?.tableIdForDocumentType ?? defaultTableIdForDocumentType;
|
|
56538
56563
|
const sendMessageRef = useRef78(async () => true);
|
|
56539
|
-
const cardResolve =
|
|
56564
|
+
const cardResolve = useCallback55(
|
|
56540
56565
|
(action) => (reqId) => {
|
|
56541
56566
|
if (!reqId) return;
|
|
56542
56567
|
return sendMessageRef.current("", {
|
|
@@ -56548,7 +56573,7 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
|
|
|
56548
56573
|
);
|
|
56549
56574
|
const cardApprove = useMemo52(() => cardResolve("approve"), [cardResolve]);
|
|
56550
56575
|
const cardReject = useMemo52(() => cardResolve("reject"), [cardResolve]);
|
|
56551
|
-
const createReducerOptions =
|
|
56576
|
+
const createReducerOptions = useCallback55(
|
|
56552
56577
|
() => ({
|
|
56553
56578
|
transport: "sse",
|
|
56554
56579
|
callbacks: { onApprove: cardApprove, onReject: cardReject }
|
|
@@ -56598,7 +56623,7 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
|
|
|
56598
56623
|
const historyUrl = runtime.endpoints.chatHistoryUrl ?? `${runtime.endpoints.chatStreamUrl.replace(/\/+$/, "")}/history`;
|
|
56599
56624
|
const hydrationRefsMapRef = useRef78(/* @__PURE__ */ new Map());
|
|
56600
56625
|
const hydrationSendCountRef = useRef78(0);
|
|
56601
|
-
const hydrateMessages =
|
|
56626
|
+
const hydrateMessages = useCallback55(
|
|
56602
56627
|
(history) => {
|
|
56603
56628
|
mutate((r) => {
|
|
56604
56629
|
const mapped = history.map(historyMessageToReducerMessage);
|
|
@@ -56630,7 +56655,7 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
|
|
|
56630
56655
|
});
|
|
56631
56656
|
const endpointsRef = useRef78(runtime.endpoints);
|
|
56632
56657
|
endpointsRef.current = runtime.endpoints;
|
|
56633
|
-
const captureConversationId =
|
|
56658
|
+
const captureConversationId = useCallback55(
|
|
56634
56659
|
(event) => {
|
|
56635
56660
|
if (event.type !== "metadata") return;
|
|
56636
56661
|
const id = event.conversationId;
|
|
@@ -56641,7 +56666,7 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
|
|
|
56641
56666
|
},
|
|
56642
56667
|
[conversationStorage]
|
|
56643
56668
|
);
|
|
56644
|
-
const sendMessage =
|
|
56669
|
+
const sendMessage = useCallback55(
|
|
56645
56670
|
// Resolves `true` on a clean turn, `false` when the request failed
|
|
56646
56671
|
// (surfaced to batch approve-all loops via the card callbacks).
|
|
56647
56672
|
async (text, sendOptions) => {
|
|
@@ -56726,12 +56751,12 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
|
|
|
56726
56751
|
[mutate, applyEvent, flushDeltas, captureConversationId]
|
|
56727
56752
|
);
|
|
56728
56753
|
sendMessageRef.current = sendMessage;
|
|
56729
|
-
const stopMessage =
|
|
56754
|
+
const stopMessage = useCallback55(() => {
|
|
56730
56755
|
abortControllerRef.current?.abort();
|
|
56731
56756
|
flushDeltas();
|
|
56732
56757
|
mutate((r) => r.setPhase("idle"));
|
|
56733
56758
|
}, [mutate, flushDeltas]);
|
|
56734
|
-
const clearMessages =
|
|
56759
|
+
const clearMessages = useCallback55(() => {
|
|
56735
56760
|
mutate((r) => r.reset());
|
|
56736
56761
|
conversationIdRef.current = null;
|
|
56737
56762
|
conversationStorage.clear();
|
|
@@ -56769,7 +56794,7 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
|
|
|
56769
56794
|
};
|
|
56770
56795
|
});
|
|
56771
56796
|
}, [state.messages, state.turnMeta]);
|
|
56772
|
-
const displayRef =
|
|
56797
|
+
const displayRef = useCallback55(
|
|
56773
56798
|
(reference) => {
|
|
56774
56799
|
const tableId = tableIdForDocumentType(reference.type);
|
|
56775
56800
|
if (!tableId) {
|
|
@@ -56793,7 +56818,7 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
|
|
|
56793
56818
|
},
|
|
56794
56819
|
[sendMessage, source, cmdIdByTableId, tableIdForDocumentType]
|
|
56795
56820
|
);
|
|
56796
|
-
const discussRef =
|
|
56821
|
+
const discussRef = useCallback55(
|
|
56797
56822
|
(reference) => {
|
|
56798
56823
|
const tableId = tableIdForDocumentType(reference.type);
|
|
56799
56824
|
if (!tableId) {
|
|
@@ -56895,7 +56920,7 @@ var noopBumpMetaTick = () => {
|
|
|
56895
56920
|
};
|
|
56896
56921
|
|
|
56897
56922
|
// src/components/chat/hooks/use-nats-chat-adapter.ts
|
|
56898
|
-
import { useCallback as
|
|
56923
|
+
import { useCallback as useCallback56, useEffect as useEffect93, useMemo as useMemo53, useRef as useRef79, useState as useState123 } from "react";
|
|
56899
56924
|
|
|
56900
56925
|
// src/chat-protocol/nats-decoder.ts
|
|
56901
56926
|
function normalizeToolCalls(raw) {
|
|
@@ -57695,11 +57720,11 @@ function useNatsChatAdapter(config, options = {}) {
|
|
|
57695
57720
|
async () => {
|
|
57696
57721
|
}
|
|
57697
57722
|
);
|
|
57698
|
-
const accumApprove =
|
|
57723
|
+
const accumApprove = useCallback56((requestId) => {
|
|
57699
57724
|
if (!requestId) return;
|
|
57700
57725
|
return handleApproveRef.current(requestId);
|
|
57701
57726
|
}, []);
|
|
57702
|
-
const accumReject =
|
|
57727
|
+
const accumReject = useCallback56((requestId) => {
|
|
57703
57728
|
if (!requestId) return;
|
|
57704
57729
|
return handleRejectRef.current(requestId);
|
|
57705
57730
|
}, []);
|
|
@@ -57753,7 +57778,7 @@ function useNatsChatAdapter(config, options = {}) {
|
|
|
57753
57778
|
console.error("[useNatsChatAdapter] rejectRequest failed:", err);
|
|
57754
57779
|
}
|
|
57755
57780
|
};
|
|
57756
|
-
const processChunk =
|
|
57781
|
+
const processChunk = useCallback56(
|
|
57757
57782
|
(chunk) => {
|
|
57758
57783
|
const event = decodeNatsChunk(chunk);
|
|
57759
57784
|
if (event) applyEvent(event);
|
|
@@ -57782,7 +57807,7 @@ function useNatsChatAdapter(config, options = {}) {
|
|
|
57782
57807
|
fetchChunks
|
|
57783
57808
|
});
|
|
57784
57809
|
const historyLoadSeqRef = useRef79(0);
|
|
57785
|
-
const loadDialogHistory =
|
|
57810
|
+
const loadDialogHistory = useCallback56(
|
|
57786
57811
|
async (id, cursor) => {
|
|
57787
57812
|
if (!fetchDialogMessages) return;
|
|
57788
57813
|
historyLoadSeqRef.current += 1;
|
|
@@ -57929,7 +57954,7 @@ function useNatsChatAdapter(config, options = {}) {
|
|
|
57929
57954
|
setConnectionState("connecting");
|
|
57930
57955
|
}, [active, dialogId]);
|
|
57931
57956
|
const initialDialogsLoadedRef = useRef79(false);
|
|
57932
|
-
const loadDialogsPage =
|
|
57957
|
+
const loadDialogsPage = useCallback56(
|
|
57933
57958
|
async (cursor) => {
|
|
57934
57959
|
if (!fetchDialogs) return;
|
|
57935
57960
|
setIsDialogsLoading(true);
|
|
@@ -57957,7 +57982,7 @@ function useNatsChatAdapter(config, options = {}) {
|
|
|
57957
57982
|
},
|
|
57958
57983
|
[fetchDialogs, dialogsPageSize]
|
|
57959
57984
|
);
|
|
57960
|
-
const reloadDialogs =
|
|
57985
|
+
const reloadDialogs = useCallback56(() => {
|
|
57961
57986
|
void loadDialogsPage();
|
|
57962
57987
|
}, [loadDialogsPage]);
|
|
57963
57988
|
useEffect93(() => {
|
|
@@ -57967,7 +57992,7 @@ function useNatsChatAdapter(config, options = {}) {
|
|
|
57967
57992
|
initialDialogsLoadedRef.current = true;
|
|
57968
57993
|
void loadDialogsPage();
|
|
57969
57994
|
}, [active, fetchDialogs, loadDialogsPage]);
|
|
57970
|
-
const sendMessage =
|
|
57995
|
+
const sendMessage = useCallback56(
|
|
57971
57996
|
async (text, sendOptions) => {
|
|
57972
57997
|
const hidden = sendOptions?.hidden ?? false;
|
|
57973
57998
|
mutate((r) => r.pushOptimisticSend(text, hidden));
|
|
@@ -57975,7 +58000,7 @@ function useNatsChatAdapter(config, options = {}) {
|
|
|
57975
58000
|
},
|
|
57976
58001
|
[mutate, publishUserMessage, dialogId]
|
|
57977
58002
|
);
|
|
57978
|
-
const stopMessage =
|
|
58003
|
+
const stopMessage = useCallback56(() => {
|
|
57979
58004
|
mutate((r) => r.setPhase("idle"));
|
|
57980
58005
|
if (stopGenerationCallback && dialogId) {
|
|
57981
58006
|
void stopGenerationCallback(dialogId).catch((err) => {
|
|
@@ -57983,10 +58008,10 @@ function useNatsChatAdapter(config, options = {}) {
|
|
|
57983
58008
|
});
|
|
57984
58009
|
}
|
|
57985
58010
|
}, [mutate, stopGenerationCallback, dialogId]);
|
|
57986
|
-
const clearMessages =
|
|
58011
|
+
const clearMessages = useCallback56(() => {
|
|
57987
58012
|
mutate((r) => r.clearThread());
|
|
57988
58013
|
}, [mutate]);
|
|
57989
|
-
const selectDialog =
|
|
58014
|
+
const selectDialog = useCallback56(
|
|
57990
58015
|
(id) => {
|
|
57991
58016
|
if (!isManagedMode) {
|
|
57992
58017
|
return;
|
|
@@ -57995,7 +58020,7 @@ function useNatsChatAdapter(config, options = {}) {
|
|
|
57995
58020
|
},
|
|
57996
58021
|
[isManagedMode]
|
|
57997
58022
|
);
|
|
57998
|
-
const startNewDialog =
|
|
58023
|
+
const startNewDialog = useCallback56(async () => {
|
|
57999
58024
|
if (!createDialogCallback) return null;
|
|
58000
58025
|
if (isCreatingDialog) return null;
|
|
58001
58026
|
try {
|
|
@@ -58020,7 +58045,7 @@ function useNatsChatAdapter(config, options = {}) {
|
|
|
58020
58045
|
setIsCreatingDialog(false);
|
|
58021
58046
|
}
|
|
58022
58047
|
}, [createDialogCallback, isCreatingDialog, isManagedMode]);
|
|
58023
|
-
const deleteDialog =
|
|
58048
|
+
const deleteDialog = useCallback56(
|
|
58024
58049
|
async (id) => {
|
|
58025
58050
|
if (!deleteDialogCallback) return;
|
|
58026
58051
|
try {
|
|
@@ -58036,7 +58061,7 @@ function useNatsChatAdapter(config, options = {}) {
|
|
|
58036
58061
|
},
|
|
58037
58062
|
[deleteDialogCallback, internalDialogId, isManagedMode]
|
|
58038
58063
|
);
|
|
58039
|
-
const renameDialog =
|
|
58064
|
+
const renameDialog = useCallback56(
|
|
58040
58065
|
async (id, title) => {
|
|
58041
58066
|
if (!renameDialogCallback) return;
|
|
58042
58067
|
let previous;
|
|
@@ -58060,7 +58085,7 @@ function useNatsChatAdapter(config, options = {}) {
|
|
|
58060
58085
|
},
|
|
58061
58086
|
[renameDialogCallback]
|
|
58062
58087
|
);
|
|
58063
|
-
const archiveDialog =
|
|
58088
|
+
const archiveDialog = useCallback56(
|
|
58064
58089
|
async (id) => {
|
|
58065
58090
|
if (!archiveDialogCallback) return;
|
|
58066
58091
|
try {
|
|
@@ -58075,27 +58100,27 @@ function useNatsChatAdapter(config, options = {}) {
|
|
|
58075
58100
|
},
|
|
58076
58101
|
[archiveDialogCallback, internalDialogId, isManagedMode]
|
|
58077
58102
|
);
|
|
58078
|
-
const loadMoreDialogs =
|
|
58103
|
+
const loadMoreDialogs = useCallback56(async () => {
|
|
58079
58104
|
if (!dialogsNextCursor) return;
|
|
58080
58105
|
await loadDialogsPage(dialogsNextCursor);
|
|
58081
58106
|
}, [dialogsNextCursor, loadDialogsPage]);
|
|
58082
|
-
const loadMoreMessages =
|
|
58107
|
+
const loadMoreMessages = useCallback56(async () => {
|
|
58083
58108
|
if (!dialogId || !messagesNextCursor) return;
|
|
58084
58109
|
await loadDialogHistory(dialogId, messagesNextCursor);
|
|
58085
58110
|
}, [dialogId, messagesNextCursor, loadDialogHistory]);
|
|
58086
|
-
const approveRequest =
|
|
58111
|
+
const approveRequest = useCallback56(
|
|
58087
58112
|
async (requestId) => {
|
|
58088
58113
|
await handleApproveRef.current(requestId);
|
|
58089
58114
|
},
|
|
58090
58115
|
[]
|
|
58091
58116
|
);
|
|
58092
|
-
const rejectRequest =
|
|
58117
|
+
const rejectRequest = useCallback56(
|
|
58093
58118
|
async (requestId, reason) => {
|
|
58094
58119
|
await handleRejectRef.current(requestId, reason);
|
|
58095
58120
|
},
|
|
58096
58121
|
[]
|
|
58097
58122
|
);
|
|
58098
|
-
const discussRef =
|
|
58123
|
+
const discussRef = useCallback56(
|
|
58099
58124
|
(reference) => {
|
|
58100
58125
|
const prompt = buildDiscussPrompt(reference, { includeReference: true });
|
|
58101
58126
|
void sendMessage(prompt).catch((err) => {
|
|
@@ -58104,7 +58129,7 @@ function useNatsChatAdapter(config, options = {}) {
|
|
|
58104
58129
|
},
|
|
58105
58130
|
[sendMessage]
|
|
58106
58131
|
);
|
|
58107
|
-
const displayRef =
|
|
58132
|
+
const displayRef = useCallback56((_ref) => {
|
|
58108
58133
|
}, []);
|
|
58109
58134
|
const { messages, streamingPhase, dialogTokenUsage = null, liveModel = null } = state;
|
|
58110
58135
|
const isLoading = streamingPhase !== "idle";
|
|
@@ -58193,7 +58218,7 @@ function useNatsChatAdapter(config, options = {}) {
|
|
|
58193
58218
|
}
|
|
58194
58219
|
|
|
58195
58220
|
// src/components/chat/hooks/use-unified-chat.ts
|
|
58196
|
-
import { useCallback as
|
|
58221
|
+
import { useCallback as useCallback57, useMemo as useMemo54, useRef as useRef80 } from "react";
|
|
58197
58222
|
var EMPTY_SSE_OPTIONS = {};
|
|
58198
58223
|
function createDisabledNatsConfig() {
|
|
58199
58224
|
return {
|
|
@@ -58224,64 +58249,64 @@ function useUnifiedChat(options) {
|
|
|
58224
58249
|
const activeState = activeMode === "guide" ? sseState : mingoStateOverride ?? natsState;
|
|
58225
58250
|
const activeStateRef = useRef80(activeState);
|
|
58226
58251
|
activeStateRef.current = activeState;
|
|
58227
|
-
const stopMessage =
|
|
58228
|
-
const clearMessages =
|
|
58252
|
+
const stopMessage = useCallback57(() => activeStateRef.current.stopMessage(), []);
|
|
58253
|
+
const clearMessages = useCallback57(
|
|
58229
58254
|
() => activeStateRef.current.clearMessages(),
|
|
58230
58255
|
[]
|
|
58231
58256
|
);
|
|
58232
|
-
const sendMessage =
|
|
58257
|
+
const sendMessage = useCallback57(
|
|
58233
58258
|
(text, opts) => activeStateRef.current.sendMessage(text, opts),
|
|
58234
58259
|
[]
|
|
58235
58260
|
);
|
|
58236
|
-
const discussRef =
|
|
58261
|
+
const discussRef = useCallback57(
|
|
58237
58262
|
(ref) => activeStateRef.current.discussRef(ref),
|
|
58238
58263
|
[]
|
|
58239
58264
|
);
|
|
58240
|
-
const displayRef =
|
|
58265
|
+
const displayRef = useCallback57(
|
|
58241
58266
|
(ref) => activeStateRef.current.displayRef(ref),
|
|
58242
58267
|
[]
|
|
58243
58268
|
);
|
|
58244
|
-
const selectDialog =
|
|
58269
|
+
const selectDialog = useCallback57(
|
|
58245
58270
|
(id) => activeStateRef.current.selectDialog(id),
|
|
58246
58271
|
[]
|
|
58247
58272
|
);
|
|
58248
|
-
const startNewDialog =
|
|
58273
|
+
const startNewDialog = useCallback57(
|
|
58249
58274
|
() => activeStateRef.current.startNewDialog(),
|
|
58250
58275
|
[]
|
|
58251
58276
|
);
|
|
58252
|
-
const deleteDialog =
|
|
58277
|
+
const deleteDialog = useCallback57(
|
|
58253
58278
|
(id) => activeStateRef.current.deleteDialog(id),
|
|
58254
58279
|
[]
|
|
58255
58280
|
);
|
|
58256
|
-
const renameDialog =
|
|
58281
|
+
const renameDialog = useCallback57(
|
|
58257
58282
|
(id, title) => activeStateRef.current.renameDialog(id, title),
|
|
58258
58283
|
[]
|
|
58259
58284
|
);
|
|
58260
|
-
const archiveDialog =
|
|
58285
|
+
const archiveDialog = useCallback57(
|
|
58261
58286
|
(id) => activeStateRef.current.archiveDialog(id),
|
|
58262
58287
|
[]
|
|
58263
58288
|
);
|
|
58264
|
-
const loadMoreDialogs =
|
|
58289
|
+
const loadMoreDialogs = useCallback57(
|
|
58265
58290
|
() => activeStateRef.current.loadMoreDialogs(),
|
|
58266
58291
|
[]
|
|
58267
58292
|
);
|
|
58268
|
-
const setDialogScope =
|
|
58293
|
+
const setDialogScope = useCallback57(
|
|
58269
58294
|
(scope) => activeStateRef.current.setDialogScope?.(scope),
|
|
58270
58295
|
[]
|
|
58271
58296
|
);
|
|
58272
|
-
const reloadDialogs =
|
|
58297
|
+
const reloadDialogs = useCallback57(
|
|
58273
58298
|
() => activeStateRef.current.reloadDialogs(),
|
|
58274
58299
|
[]
|
|
58275
58300
|
);
|
|
58276
|
-
const loadMoreMessages =
|
|
58301
|
+
const loadMoreMessages = useCallback57(
|
|
58277
58302
|
() => activeStateRef.current.loadMoreMessages(),
|
|
58278
58303
|
[]
|
|
58279
58304
|
);
|
|
58280
|
-
const approveRequest =
|
|
58305
|
+
const approveRequest = useCallback57(
|
|
58281
58306
|
(requestId) => activeStateRef.current.approveRequest(requestId),
|
|
58282
58307
|
[]
|
|
58283
58308
|
);
|
|
58284
|
-
const rejectRequest =
|
|
58309
|
+
const rejectRequest = useCallback57(
|
|
58285
58310
|
(requestId, reason) => activeStateRef.current.rejectRequest(requestId, reason),
|
|
58286
58311
|
[]
|
|
58287
58312
|
);
|
|
@@ -58621,7 +58646,7 @@ function buildStreamFrames(messages) {
|
|
|
58621
58646
|
|
|
58622
58647
|
// src/components/chat/embeddable-chat.tsx
|
|
58623
58648
|
init_cn();
|
|
58624
|
-
import { useCallback as
|
|
58649
|
+
import { useCallback as useCallback59, useEffect as useEffect94, useMemo as useMemo56, useRef as useRef82, useState as useState125 } from "react";
|
|
58625
58650
|
import * as DialogPrimitive5 from "@radix-ui/react-dialog";
|
|
58626
58651
|
import { usePreventScroll as usePreventScroll6 } from "@react-aria/overlays";
|
|
58627
58652
|
import { isIOS } from "@react-aria/utils";
|
|
@@ -58708,7 +58733,7 @@ init_button2();
|
|
|
58708
58733
|
import { FileText as FileText8, MessageSquare as MessageSquare3 } from "lucide-react";
|
|
58709
58734
|
|
|
58710
58735
|
// src/components/chat/hooks/use-chat-dialog-manager.ts
|
|
58711
|
-
import { useCallback as
|
|
58736
|
+
import { useCallback as useCallback58, useMemo as useMemo55, useRef as useRef81, useState as useState124 } from "react";
|
|
58712
58737
|
function useChatDialogManager({
|
|
58713
58738
|
dialogs,
|
|
58714
58739
|
activeDialogId,
|
|
@@ -58721,14 +58746,14 @@ function useChatDialogManager({
|
|
|
58721
58746
|
}) {
|
|
58722
58747
|
const [renameTarget, setRenameTarget] = useState124(null);
|
|
58723
58748
|
const [archiveTarget, setArchiveTarget] = useState124(null);
|
|
58724
|
-
const handleConfirmRename =
|
|
58749
|
+
const handleConfirmRename = useCallback58(
|
|
58725
58750
|
(name) => {
|
|
58726
58751
|
if (renameTarget) void renameDialog(renameTarget.id, name);
|
|
58727
58752
|
setRenameTarget(null);
|
|
58728
58753
|
},
|
|
58729
58754
|
[renameTarget, renameDialog]
|
|
58730
58755
|
);
|
|
58731
|
-
const handleConfirmArchive =
|
|
58756
|
+
const handleConfirmArchive = useCallback58(async () => {
|
|
58732
58757
|
if (archiveTarget) {
|
|
58733
58758
|
try {
|
|
58734
58759
|
await archiveDialog(archiveTarget.id);
|
|
@@ -58749,7 +58774,7 @@ function useChatDialogManager({
|
|
|
58749
58774
|
const [archivedLoading, setArchivedLoading] = useState124(false);
|
|
58750
58775
|
const [archivedPending, setArchivedPending] = useState124(false);
|
|
58751
58776
|
const archivedRequestIdRef = useRef81(0);
|
|
58752
|
-
const loadArchivedPage =
|
|
58777
|
+
const loadArchivedPage = useCallback58(
|
|
58753
58778
|
async (cursor) => {
|
|
58754
58779
|
if (!fetchArchivedDialogs) return;
|
|
58755
58780
|
const requestId = ++archivedRequestIdRef.current;
|
|
@@ -58784,16 +58809,16 @@ function useChatDialogManager({
|
|
|
58784
58809
|
},
|
|
58785
58810
|
[fetchArchivedDialogs]
|
|
58786
58811
|
);
|
|
58787
|
-
const openArchive =
|
|
58812
|
+
const openArchive = useCallback58(() => {
|
|
58788
58813
|
setArchiveOpen(true);
|
|
58789
58814
|
void loadArchivedPage();
|
|
58790
58815
|
}, [loadArchivedPage]);
|
|
58791
|
-
const closeArchive =
|
|
58816
|
+
const closeArchive = useCallback58(() => setArchiveOpen(false), []);
|
|
58792
58817
|
const [viewingArchivedId, setViewingArchivedId] = useState124(
|
|
58793
58818
|
null
|
|
58794
58819
|
);
|
|
58795
58820
|
const [openingDialogId, setOpeningDialogId] = useState124(null);
|
|
58796
|
-
const handleSelectDialog =
|
|
58821
|
+
const handleSelectDialog = useCallback58(
|
|
58797
58822
|
(id) => {
|
|
58798
58823
|
setViewingArchivedId(null);
|
|
58799
58824
|
setOpeningDialogId(id);
|
|
@@ -58802,7 +58827,7 @@ function useChatDialogManager({
|
|
|
58802
58827
|
[selectDialog]
|
|
58803
58828
|
);
|
|
58804
58829
|
const isOpeningDialog = openingDialogId != null && openingDialogId === activeDialogId;
|
|
58805
|
-
const handleArchivedSelect =
|
|
58830
|
+
const handleArchivedSelect = useCallback58(
|
|
58806
58831
|
(id) => {
|
|
58807
58832
|
setArchiveOpen(false);
|
|
58808
58833
|
setOpeningDialogId(null);
|
|
@@ -58812,7 +58837,7 @@ function useChatDialogManager({
|
|
|
58812
58837
|
[selectDialog]
|
|
58813
58838
|
);
|
|
58814
58839
|
const [restoreTarget, setRestoreTarget] = useState124(null);
|
|
58815
|
-
const handleConfirmRestore =
|
|
58840
|
+
const handleConfirmRestore = useCallback58(async () => {
|
|
58816
58841
|
if (restoreTarget) {
|
|
58817
58842
|
try {
|
|
58818
58843
|
await unarchiveDialog?.(restoreTarget.id);
|
|
@@ -58826,7 +58851,7 @@ function useChatDialogManager({
|
|
|
58826
58851
|
setRestoreTarget(null);
|
|
58827
58852
|
}, [restoreTarget, unarchiveDialog]);
|
|
58828
58853
|
const isViewingArchived = viewingArchivedId != null && viewingArchivedId === activeDialogId;
|
|
58829
|
-
const handleBack =
|
|
58854
|
+
const handleBack = useCallback58(() => {
|
|
58830
58855
|
const wasArchived = isViewingArchived;
|
|
58831
58856
|
setViewingArchivedId(null);
|
|
58832
58857
|
setOpeningDialogId(null);
|
|
@@ -58834,7 +58859,7 @@ function useChatDialogManager({
|
|
|
58834
58859
|
clearMessages();
|
|
58835
58860
|
if (wasArchived) setArchiveOpen(true);
|
|
58836
58861
|
}, [isViewingArchived, selectDialog, clearMessages]);
|
|
58837
|
-
const resetToNewChat =
|
|
58862
|
+
const resetToNewChat = useCallback58(() => {
|
|
58838
58863
|
setViewingArchivedId(null);
|
|
58839
58864
|
setOpeningDialogId(null);
|
|
58840
58865
|
selectDialog(null);
|
|
@@ -59326,7 +59351,7 @@ function EmbeddableChatInner({
|
|
|
59326
59351
|
const initialActiveMode = controlledActiveMode ?? defaultActiveMode ?? (effectiveModes.guide ? "guide" : "mingo");
|
|
59327
59352
|
const [uncontrolledActiveMode, setUncontrolledActiveMode] = useState125(initialActiveMode);
|
|
59328
59353
|
const activeMode = controlledActiveMode ?? uncontrolledActiveMode;
|
|
59329
|
-
const handleActiveModeChange =
|
|
59354
|
+
const handleActiveModeChange = useCallback59(
|
|
59330
59355
|
(next) => {
|
|
59331
59356
|
if (controlledActiveMode === void 0) {
|
|
59332
59357
|
setUncontrolledActiveMode(next);
|
|
@@ -59432,7 +59457,7 @@ function EmbeddableChatInner({
|
|
|
59432
59457
|
for (const t of contextEntityTypes ?? []) byType.set(t.type, t.icon);
|
|
59433
59458
|
return (item) => byType.get(item.type);
|
|
59434
59459
|
}, [contextEntityTypes]);
|
|
59435
|
-
const toggleContextItem =
|
|
59460
|
+
const toggleContextItem = useCallback59(
|
|
59436
59461
|
(item) => {
|
|
59437
59462
|
const key = `${item.type}:${item.id}`;
|
|
59438
59463
|
if (mentionActiveRef.current) {
|
|
@@ -59455,7 +59480,7 @@ function EmbeddableChatInner({
|
|
|
59455
59480
|
},
|
|
59456
59481
|
[contextMaxItems, contextItems, mentionMarkerByType, resolveContextIcon]
|
|
59457
59482
|
);
|
|
59458
|
-
const removeContextItem =
|
|
59483
|
+
const removeContextItem = useCallback59((item) => {
|
|
59459
59484
|
const key = `${item.type}:${item.id}`;
|
|
59460
59485
|
setContextItems((prev) => prev.filter((p) => `${p.type}:${p.id}` !== key));
|
|
59461
59486
|
if (mentionKeysRef.current.has(key)) {
|
|
@@ -59465,7 +59490,7 @@ function EmbeddableChatInner({
|
|
|
59465
59490
|
chatInputRef.current?.setValue(next);
|
|
59466
59491
|
}
|
|
59467
59492
|
}, [mentionMarkerByType]);
|
|
59468
|
-
const handleContextValueChange =
|
|
59493
|
+
const handleContextValueChange = useCallback59((value) => {
|
|
59469
59494
|
for (const key of Array.from(mentionKeysRef.current)) {
|
|
59470
59495
|
if (!value.includes(`@${mentionTokenOf(key, mentionMarkerByType)}`)) {
|
|
59471
59496
|
mentionKeysRef.current.delete(key);
|
|
@@ -59473,24 +59498,24 @@ function EmbeddableChatInner({
|
|
|
59473
59498
|
}
|
|
59474
59499
|
}
|
|
59475
59500
|
}, [mentionMarkerByType]);
|
|
59476
|
-
const openContextPicker =
|
|
59501
|
+
const openContextPicker = useCallback59(() => {
|
|
59477
59502
|
setMentionQuery(null);
|
|
59478
59503
|
setContextPickerOpen(true);
|
|
59479
59504
|
}, []);
|
|
59480
|
-
const closeContextPicker =
|
|
59505
|
+
const closeContextPicker = useCallback59(() => {
|
|
59481
59506
|
if (mentionActiveRef.current) {
|
|
59482
59507
|
chatInputRef.current?.removeMentionTrigger();
|
|
59483
59508
|
}
|
|
59484
59509
|
setContextPickerOpen(false);
|
|
59485
59510
|
setMentionQuery(null);
|
|
59486
59511
|
}, []);
|
|
59487
|
-
const handleMentionQueryChange =
|
|
59512
|
+
const handleMentionQueryChange = useCallback59((query) => {
|
|
59488
59513
|
setMentionQuery(query);
|
|
59489
59514
|
setContextPickerOpen(query !== null);
|
|
59490
59515
|
}, []);
|
|
59491
59516
|
const resolvedBaseRoute = baseRoute || (source === "flamingo" ? "/knowledge-base" : "/data-room");
|
|
59492
|
-
const handleClose =
|
|
59493
|
-
const handleNavigationClose =
|
|
59517
|
+
const handleClose = useCallback59(() => setIsOpen(false), [setIsOpen]);
|
|
59518
|
+
const handleNavigationClose = useCallback59(() => {
|
|
59494
59519
|
navigatingAwayRef.current = true;
|
|
59495
59520
|
setIsOpen(false);
|
|
59496
59521
|
}, [setIsOpen]);
|
|
@@ -59498,7 +59523,7 @@ function EmbeddableChatInner({
|
|
|
59498
59523
|
() => ({ closeChat: handleNavigationClose }),
|
|
59499
59524
|
[handleNavigationClose]
|
|
59500
59525
|
);
|
|
59501
|
-
const renderEntityCard =
|
|
59526
|
+
const renderEntityCard = useCallback59(
|
|
59502
59527
|
(reference) => renderChatInlineEntityCard(reference, {
|
|
59503
59528
|
onDiscuss: discussRef,
|
|
59504
59529
|
onDisplay: displayRef,
|
|
@@ -59561,7 +59586,7 @@ function EmbeddableChatInner({
|
|
|
59561
59586
|
}
|
|
59562
59587
|
return mapped;
|
|
59563
59588
|
}, [rawMessages, guideUserName, guideUserAvatar]);
|
|
59564
|
-
const handleSend =
|
|
59589
|
+
const handleSend = useCallback59(
|
|
59565
59590
|
(text) => {
|
|
59566
59591
|
let augmentedText = text;
|
|
59567
59592
|
if (readyAttachments.length > 0) {
|
|
@@ -59581,7 +59606,7 @@ function EmbeddableChatInner({
|
|
|
59581
59606
|
},
|
|
59582
59607
|
[sendMessage, readyAttachments, viewUrlPrefix, clearAttachments, contextItems]
|
|
59583
59608
|
);
|
|
59584
|
-
const handleAskSelect =
|
|
59609
|
+
const handleAskSelect = useCallback59(
|
|
59585
59610
|
(label) => {
|
|
59586
59611
|
sendMessage(label);
|
|
59587
59612
|
},
|
|
@@ -59649,7 +59674,7 @@ function EmbeddableChatInner({
|
|
|
59649
59674
|
fetchArchivedDialogs: mingoCaps.fetchArchivedDialogs,
|
|
59650
59675
|
unarchiveDialog: mingoCaps.unarchiveDialog
|
|
59651
59676
|
});
|
|
59652
|
-
const handleOpen =
|
|
59677
|
+
const handleOpen = useCallback59(() => setIsOpen(true), [setIsOpen]);
|
|
59653
59678
|
useCloseOnNavigation(handleNavigationClose, null);
|
|
59654
59679
|
useEffect94(() => {
|
|
59655
59680
|
const handler = (e) => {
|
|
@@ -59735,7 +59760,7 @@ function EmbeddableChatInner({
|
|
|
59735
59760
|
setPanelWidth(el.clientWidth);
|
|
59736
59761
|
return () => ro.disconnect();
|
|
59737
59762
|
}, []);
|
|
59738
|
-
const setPanelNode =
|
|
59763
|
+
const setPanelNode = useCallback59((node) => {
|
|
59739
59764
|
panelMeasureRef.current = node;
|
|
59740
59765
|
setPanelBoundary(node);
|
|
59741
59766
|
}, []);
|
|
@@ -59747,7 +59772,7 @@ function EmbeddableChatInner({
|
|
|
59747
59772
|
} catch {
|
|
59748
59773
|
}
|
|
59749
59774
|
}, []);
|
|
59750
|
-
const toggleRailCollapsed =
|
|
59775
|
+
const toggleRailCollapsed = useCallback59(() => {
|
|
59751
59776
|
setRailCollapsed((prev) => {
|
|
59752
59777
|
const next = !prev;
|
|
59753
59778
|
try {
|
|
@@ -59782,7 +59807,7 @@ function EmbeddableChatInner({
|
|
|
59782
59807
|
const headerPersonName = headerOwner?.name?.trim() || headerUserName;
|
|
59783
59808
|
const headerPersonAvatarUrl = headerOwner ? headerOwner.avatarUrl?.trim() || void 0 : identityUser?.avatarUrl?.trim() || userAvatarUrl?.trim() || void 0;
|
|
59784
59809
|
const headerAvatar = headerPersonName || headerPersonAvatarUrl ? { name: headerPersonName, avatarUrl: headerPersonAvatarUrl } : void 0;
|
|
59785
|
-
const handleNewChat =
|
|
59810
|
+
const handleNewChat = useCallback59(() => {
|
|
59786
59811
|
resetToNewChat();
|
|
59787
59812
|
}, [resetToNewChat]);
|
|
59788
59813
|
const splitHeaderMenuItems = [
|
|
@@ -60891,6 +60916,7 @@ export {
|
|
|
60891
60916
|
NETWORK_CONFIG,
|
|
60892
60917
|
useChunkCatchup,
|
|
60893
60918
|
useScriptedStream,
|
|
60919
|
+
RESYNC_AFTER_HIDDEN_MS,
|
|
60894
60920
|
useJetStreamDialogSubscription,
|
|
60895
60921
|
useNatsDialogSubscription,
|
|
60896
60922
|
buildNatsWsUrl,
|
|
@@ -61400,4 +61426,4 @@ export {
|
|
|
61400
61426
|
LogsList,
|
|
61401
61427
|
assets
|
|
61402
61428
|
};
|
|
61403
|
-
//# sourceMappingURL=chunk-
|
|
61429
|
+
//# sourceMappingURL=chunk-YJLQQGLH.js.map
|