@frontera-sdk/chat-ui 1.52.19 → 1.52.21
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/chat.js +123 -30
- package/dist/{chunk-ZFTMGEV5.js → chunk-3OPTTDTZ.js} +2 -2
- package/dist/{chunk-I3YAF6PS.js → chunk-67FRU3RR.js} +1 -1
- package/dist/{chunk-I5NAI7HP.js → chunk-6VYLZSJV.js} +95 -20
- package/dist/{chunk-QABN6WBZ.js → chunk-AJSYWTRU.js} +177 -19
- package/dist/{chunk-QFVBVBUR.js → chunk-DCYKWIKY.js} +142 -113
- package/dist/{chunk-LP5MVCRH.js → chunk-R46XIQLR.js} +1 -1
- package/dist/header.js +3 -3
- package/dist/message.js +3 -3
- package/dist/new-session.js +2 -2
- package/dist/{pdf-deck-view-inner-ZINOYZOK.js → pdf-deck-view-inner-BOA2GXRG.js} +2 -2
- package/dist/{pdf-document-view-inner-SBYZZQ6H.js → pdf-document-view-inner-IUW7UU7T.js} +2 -2
- package/package.json +3 -3
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { usePlugins, useChatCapabilityEnabled, resolvePluginLanguage, renderPluginBlock, AlertDialog, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel, AlertDialogAction, TooltipProvider, Tooltip, TooltipTrigger, TooltipContent, ActionMenu, useArtifactStore, ArtifactActionsMenu, DotGrid1x3HorizontalTightIcon, useArtifact, resolveArtifactIconFormat, artifactFormatIcon, useArtifactFileObjectUrl, artifactFormatSubtitle, ChatImageLightbox, ArrowsShowIcon, FileDownloadIcon, useClient, processMessageParts, getMessageDisplayTimestampValue, getMessageCreatedAtMs, isApprovalRequested, extractCitationsFromSteps, useSourcesEnrichment, extractImagesFromSteps, dedupeImageResults, getDocumentStreamArtifacts, getToolOutput, useCanvasStore, ImageResultsGallery, MessageDecisionCards, useChatCapabilities, useOptionalWorkspaceContext, useCitationViewer, useChatOverviewStore, dedup, extractDomain, sourceKind, SourceFavicon, Input, exportDocumentPdf, FilePdfIcon, StudioDisplayIcon, WorldIcon, MessageStepsGroup, getToolState, getToolInput, getToolErrorText, useChatOptInEnabled, ArrowRightIcon, formatFileSize, FileThumbnail, MobileScreenSheet, useAgentHistorySource, treatyErrorMessage, useRouter, useBasePath, useAgentPanelStore, AgentRoutineForm, getFileCategory, unwrap, unwrapData,
|
|
2
|
+
import { usePlugins, useChatCapabilityEnabled, resolvePluginLanguage, renderPluginBlock, AlertDialog, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel, AlertDialogAction, TooltipProvider, Tooltip, TooltipTrigger, TooltipContent, ActionMenu, useArtifactStore, ArtifactActionsMenu, DotGrid1x3HorizontalTightIcon, useArtifact, resolveArtifactIconFormat, artifactFormatIcon, useArtifactFileObjectUrl, artifactFormatSubtitle, ChatImageLightbox, ArrowsShowIcon, FileDownloadIcon, useClient, processMessageParts, getMessageDisplayTimestampValue, getMessageCreatedAtMs, isApprovalRequested, extractCitationsFromSteps, useSourcesEnrichment, extractImagesFromSteps, dedupeImageResults, getDocumentStreamArtifacts, getToolOutput, useCanvasStore, ImageResultsGallery, MessageDecisionCards, useChatCapabilities, useOptionalWorkspaceContext, useCitationViewer, useChatOverviewStore, dedup, extractDomain, sourceKind, SourceFavicon, Input, exportDocumentPdf, FilePdfIcon, StudioDisplayIcon, WorldIcon, MessageStepsGroup, getToolState, getToolInput, getToolErrorText, useChatOptInEnabled, ArrowRightIcon, formatFileSize, FileThumbnail, MobileScreenSheet, useAgentHistorySource, treatyErrorMessage, useRouter, useBasePath, useAgentPanelStore, AgentRoutineForm, getFileCategory, unwrap, unwrapData, unwrapDataDeep, formatDecisionTime, DecisionCard, LoaderIcon, formatRelativeTime, CircleCheckIcon, agentRoutineKeys, useOptionalAgentsContext, avatarMotionForStream, AGENT_AVATAR_SIZE } from './chunk-DCYKWIKY.js';
|
|
3
3
|
import { Sheet, SheetTrigger, SheetContent, SheetHeader, SheetTitle, SheetDescription, Popover, PopoverTrigger, PopoverContent } from './chunk-T5SANYSX.js';
|
|
4
|
-
import { useIsMobile, useTranslation } from './chunk-
|
|
4
|
+
import { useIsMobile, useTranslation } from './chunk-6VYLZSJV.js';
|
|
5
5
|
import { MessageToolbar, MessageResponse, SquareArrowTopRightIcon, FileTextIcon, Shimmer, ClipboardIcon, Message, MessageContent, PencilIcon, deferDuringLayoutMotion, HoverCard, HoverCardTrigger, HoverCardContent, Collapse, Icon, CircleXIcon, ClockIcon } from './chunk-PKNEC4LJ.js';
|
|
6
6
|
import { ChevronDownMediumIcon, Button, ScrollArea, Skeleton } from './chunk-UWKO24VT.js';
|
|
7
7
|
import { CrossMediumIcon } from './chunk-2P4IEVOQ.js';
|
|
@@ -19,6 +19,23 @@ import { CodeBlock, defaultUrlTransform } from 'streamdown';
|
|
|
19
19
|
import { create } from 'zustand';
|
|
20
20
|
import { toast } from 'sonner';
|
|
21
21
|
|
|
22
|
+
// ../chat/src/ui/chat/fold-part-indices.ts
|
|
23
|
+
function foldPartIndices(kinds, workSplitIndex, canvasesWithAnswer) {
|
|
24
|
+
const indices = /* @__PURE__ */ new Set();
|
|
25
|
+
if (workSplitIndex === -1) return indices;
|
|
26
|
+
kinds.forEach((kind, index) => {
|
|
27
|
+
if (kind === "person-confirmation" || kind === "scripted-text") return;
|
|
28
|
+
if (canvasesWithAnswer && kind === "canvas") return;
|
|
29
|
+
if (index < workSplitIndex) indices.add(index);
|
|
30
|
+
else if (index > workSplitIndex && kind !== "text") indices.add(index);
|
|
31
|
+
});
|
|
32
|
+
return indices;
|
|
33
|
+
}
|
|
34
|
+
function foldKind(processed) {
|
|
35
|
+
if (processed.kind !== "text") return processed.kind;
|
|
36
|
+
const meta = processed.part?.providerMetadata;
|
|
37
|
+
return meta?.frontera?.scripted === true ? "scripted-text" : "text";
|
|
38
|
+
}
|
|
22
39
|
function formatElapsed(ms) {
|
|
23
40
|
const total = Math.max(0, Math.round(ms / 1e3));
|
|
24
41
|
if (total < 60) return `${total}s`;
|
|
@@ -3959,6 +3976,143 @@ function SessionHandoffCard({ output }) {
|
|
|
3959
3976
|
if (!details.offered || !details.handoffId) return null;
|
|
3960
3977
|
return /* @__PURE__ */ jsx(SessionHandoffOffer, { handoffId: details.handoffId });
|
|
3961
3978
|
}
|
|
3979
|
+
var personConfirmationKeys = {
|
|
3980
|
+
all: ["person-confirmation"],
|
|
3981
|
+
list: (conversationId) => ["person-confirmation", "list", conversationId]
|
|
3982
|
+
};
|
|
3983
|
+
function usePersonConfirmations(conversationId, { poll }) {
|
|
3984
|
+
const client = useClient();
|
|
3985
|
+
return useQuery({
|
|
3986
|
+
queryKey: personConfirmationKeys.list(conversationId),
|
|
3987
|
+
enabled: !!conversationId,
|
|
3988
|
+
refetchInterval: (query) => poll(query.state.data ?? {}) ? 2e3 : false,
|
|
3989
|
+
queryFn: async () => {
|
|
3990
|
+
const { data, error } = await client.v1.chat.confirmations.get({ query: { conversationId } });
|
|
3991
|
+
if (error) throw error;
|
|
3992
|
+
const confirmations = unwrapDataDeep(data);
|
|
3993
|
+
if (!Array.isArray(confirmations)) return {};
|
|
3994
|
+
return Object.fromEntries(confirmations.map((confirmation) => [confirmation.id, confirmation]));
|
|
3995
|
+
}
|
|
3996
|
+
});
|
|
3997
|
+
}
|
|
3998
|
+
function useDecidePersonConfirmation(conversationId) {
|
|
3999
|
+
const client = useClient();
|
|
4000
|
+
const queryClient = useQueryClient();
|
|
4001
|
+
return useMutation({
|
|
4002
|
+
mutationFn: async ({ id, decision }) => {
|
|
4003
|
+
const { data, error } = await client.v1.chat.confirmations[id].post({ decision });
|
|
4004
|
+
if (error) throw error;
|
|
4005
|
+
return unwrapDataDeep(data);
|
|
4006
|
+
},
|
|
4007
|
+
onSettled: () => {
|
|
4008
|
+
queryClient.invalidateQueries({ queryKey: personConfirmationKeys.list(conversationId) });
|
|
4009
|
+
}
|
|
4010
|
+
});
|
|
4011
|
+
}
|
|
4012
|
+
|
|
4013
|
+
// ../chat/src/ui/chat/person-confirmation-card/utils/confirmation-state.ts
|
|
4014
|
+
function confirmationState(confirmation, local, now = /* @__PURE__ */ new Date()) {
|
|
4015
|
+
if (confirmation.status !== "pending") return confirmation.status;
|
|
4016
|
+
if (local?.phase === "sent") return local.decision === "confirm" ? "confirmed" : "cancelled";
|
|
4017
|
+
if (local?.phase === "sending") return "sending";
|
|
4018
|
+
const expires = confirmation.expiresAt ? new Date(confirmation.expiresAt).getTime() : Number.NaN;
|
|
4019
|
+
if (Number.isFinite(expires) && expires <= now.getTime()) return "expired";
|
|
4020
|
+
return "pending";
|
|
4021
|
+
}
|
|
4022
|
+
function PersonConfirmationCard({
|
|
4023
|
+
confirmation,
|
|
4024
|
+
onDecide
|
|
4025
|
+
}) {
|
|
4026
|
+
const { t, locale } = useTranslation();
|
|
4027
|
+
const [local, setLocal] = useState(null);
|
|
4028
|
+
const [answeredAt, setAnsweredAt] = useState(null);
|
|
4029
|
+
const [, setTick] = useState(0);
|
|
4030
|
+
useEffect(() => {
|
|
4031
|
+
if (confirmation.status !== "pending" || !confirmation.expiresAt) return;
|
|
4032
|
+
const wait2 = new Date(confirmation.expiresAt).getTime() - Date.now();
|
|
4033
|
+
if (!Number.isFinite(wait2) || wait2 <= 0) return;
|
|
4034
|
+
const timer = setTimeout(() => setTick((n) => n + 1), Math.min(wait2 + 50, 2 ** 31 - 1));
|
|
4035
|
+
return () => clearTimeout(timer);
|
|
4036
|
+
}, [confirmation.status, confirmation.expiresAt]);
|
|
4037
|
+
const state = confirmationState(confirmation, local);
|
|
4038
|
+
async function decide(decision) {
|
|
4039
|
+
setLocal({ phase: "sending", decision });
|
|
4040
|
+
try {
|
|
4041
|
+
await onDecide(decision);
|
|
4042
|
+
setAnsweredAt((/* @__PURE__ */ new Date()).toISOString());
|
|
4043
|
+
setLocal({ phase: "sent", decision });
|
|
4044
|
+
} catch {
|
|
4045
|
+
setLocal({ phase: "failed", decision });
|
|
4046
|
+
}
|
|
4047
|
+
}
|
|
4048
|
+
const when = confirmation.answeredAt ?? answeredAt;
|
|
4049
|
+
const time = when ? formatDecisionTime(when, locale) : "";
|
|
4050
|
+
const pressed = state === "confirmed" ? confirmation.confirmLabel || t("chat.personConfirmation.confirm") : state === "cancelled" ? confirmation.cancelLabel || t("chat.personConfirmation.cancel") : null;
|
|
4051
|
+
const settled = pressed ? time ? t("chat.personConfirmation.choseAt", { label: pressed, time }) : t("chat.personConfirmation.chose", { label: pressed }) : state === "expired" ? t("chat.personConfirmation.expired") : void 0;
|
|
4052
|
+
const tone = state === "confirmed" ? "ok" : state === "cancelled" || state === "expired" ? "warn" : "idle";
|
|
4053
|
+
const sending = state === "sending";
|
|
4054
|
+
return /* @__PURE__ */ jsxs(
|
|
4055
|
+
DecisionCard,
|
|
4056
|
+
{
|
|
4057
|
+
testId: "person-confirmation-card",
|
|
4058
|
+
tone,
|
|
4059
|
+
icon: /* @__PURE__ */ jsx(CheckCircle2Icon, { "aria-hidden": true }),
|
|
4060
|
+
kind: t("chat.personConfirmation.kind"),
|
|
4061
|
+
settled,
|
|
4062
|
+
question: confirmation.summary,
|
|
4063
|
+
note: sending ? t("chat.personConfirmation.sending") : confirmation.expiresAt ? t("chat.personConfirmation.expires", { when: formatRelativeTime(confirmation.expiresAt) }) : void 0,
|
|
4064
|
+
actions: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
4065
|
+
/* @__PURE__ */ jsx(Button, { size: "sm", variant: "outline", disabled: sending, onClick: () => void decide("cancel"), children: confirmation.cancelLabel || t("chat.personConfirmation.cancel") }),
|
|
4066
|
+
/* @__PURE__ */ jsxs(Button, { size: "sm", disabled: sending, onClick: () => void decide("confirm"), children: [
|
|
4067
|
+
sending && local?.decision === "confirm" && /* @__PURE__ */ jsx(LoaderIcon, { className: "size-3.5 animate-spin", "aria-hidden": true }),
|
|
4068
|
+
confirmation.confirmLabel || t("chat.personConfirmation.confirm")
|
|
4069
|
+
] })
|
|
4070
|
+
] }),
|
|
4071
|
+
children: [
|
|
4072
|
+
settled == null && confirmation.details && /* @__PURE__ */ jsx("p", { className: "mt-1 whitespace-pre-line break-words text-sm text-muted-foreground", children: confirmation.details }),
|
|
4073
|
+
settled == null && local?.phase === "failed" && /* @__PURE__ */ jsx("p", { role: "alert", className: "mt-2 text-xs text-destructive", children: t("chat.personConfirmation.failed") })
|
|
4074
|
+
]
|
|
4075
|
+
}
|
|
4076
|
+
);
|
|
4077
|
+
}
|
|
4078
|
+
|
|
4079
|
+
// ../chat/src/ui/chat/person-confirmation-card/utils/read-confirmation.ts
|
|
4080
|
+
function withServerStatus(confirmation, server) {
|
|
4081
|
+
if (!server || server.status === confirmation.status || server.status === "pending") return confirmation;
|
|
4082
|
+
return { ...confirmation, status: server.status };
|
|
4083
|
+
}
|
|
4084
|
+
function unshownPendingConfirmations(confirmations, messages, keep = /* @__PURE__ */ new Set()) {
|
|
4085
|
+
const shown = /* @__PURE__ */ new Set();
|
|
4086
|
+
for (const message of messages) {
|
|
4087
|
+
for (const part of message.parts ?? []) {
|
|
4088
|
+
if (part?.type !== "data-person-confirmation") continue;
|
|
4089
|
+
const id = part.data?.id;
|
|
4090
|
+
if (typeof id === "string") shown.add(id);
|
|
4091
|
+
}
|
|
4092
|
+
}
|
|
4093
|
+
return Object.values(confirmations ?? {}).filter(
|
|
4094
|
+
(confirmation) => !shown.has(confirmation.id) && (confirmation.status === "pending" || keep.has(confirmation.id))
|
|
4095
|
+
);
|
|
4096
|
+
}
|
|
4097
|
+
function ConversationConfirmationCard({
|
|
4098
|
+
confirmation,
|
|
4099
|
+
conversationId
|
|
4100
|
+
}) {
|
|
4101
|
+
const server = usePersonConfirmations(conversationId, {
|
|
4102
|
+
poll: (all) => withServerStatus(confirmation, all[confirmation.id]).status === "pending"
|
|
4103
|
+
});
|
|
4104
|
+
const view = withServerStatus(confirmation, server.data?.[confirmation.id]);
|
|
4105
|
+
const decide = useDecidePersonConfirmation(conversationId);
|
|
4106
|
+
return /* @__PURE__ */ jsx(
|
|
4107
|
+
PersonConfirmationCard,
|
|
4108
|
+
{
|
|
4109
|
+
confirmation: view,
|
|
4110
|
+
onDecide: async (decision) => {
|
|
4111
|
+
await decide.mutateAsync({ id: confirmation.id, decision });
|
|
4112
|
+
}
|
|
4113
|
+
}
|
|
4114
|
+
);
|
|
4115
|
+
}
|
|
3962
4116
|
function PublishedCard({ details }) {
|
|
3963
4117
|
const [copied, setCopied] = useState(false);
|
|
3964
4118
|
const copy = () => {
|
|
@@ -5368,19 +5522,13 @@ var AssistantMessage = memo(function AssistantMessage2({
|
|
|
5368
5522
|
);
|
|
5369
5523
|
const workSplitIndex = !workFoldEnabled || !hasWorkParts ? -1 : isStreamingMessage ? processedParts.length : lastTextIndex > 0 ? lastTextIndex : -1;
|
|
5370
5524
|
const canvasesWithAnswer = !isStreamingMessage && workSplitIndex !== -1;
|
|
5371
|
-
const
|
|
5372
|
-
|
|
5373
|
-
|
|
5374
|
-
|
|
5375
|
-
if (canvasesWithAnswer && processed.kind === "canvas") return;
|
|
5376
|
-
if (index < workSplitIndex) indices.add(index);
|
|
5377
|
-
else if (index > workSplitIndex && processed.kind !== "text") indices.add(index);
|
|
5378
|
-
});
|
|
5379
|
-
return indices;
|
|
5380
|
-
}, [processedParts, workSplitIndex, canvasesWithAnswer]);
|
|
5525
|
+
const foldPartIndices2 = useMemo(
|
|
5526
|
+
() => foldPartIndices(processedParts.map(foldKind), workSplitIndex, canvasesWithAnswer),
|
|
5527
|
+
[processedParts, workSplitIndex, canvasesWithAnswer]
|
|
5528
|
+
);
|
|
5381
5529
|
const hasPendingDecision = useMemo(
|
|
5382
5530
|
() => processedParts.some(
|
|
5383
|
-
(p) => p.kind === "steps-group" && p.items.some((item) => isApprovalRequested(item.part))
|
|
5531
|
+
(p) => p.kind === "person-confirmation" && p.confirmation.status === "pending" || p.kind === "steps-group" && p.items.some((item) => isApprovalRequested(item.part))
|
|
5384
5532
|
),
|
|
5385
5533
|
[processedParts]
|
|
5386
5534
|
);
|
|
@@ -5481,7 +5629,7 @@ var AssistantMessage = memo(function AssistantMessage2({
|
|
|
5481
5629
|
useCanvasStore.getState().openComputer({ computerId: latest.computerId, appId: latest.appId, appDir: latest.appDir ?? null, title: latest.title });
|
|
5482
5630
|
}, [latestAppId]);
|
|
5483
5631
|
processedParts.length > 0 && processedParts.some(
|
|
5484
|
-
(p) => p.kind === "text" && !!p.part.text?.trim() || p.kind === "steps-group" || p.kind === "artifact" || p.kind === "document-stream" || p.kind === "supervisor-approval" || p.kind === "session-handoff" || p.kind === "canvas"
|
|
5632
|
+
(p) => p.kind === "text" && !!p.part.text?.trim() || p.kind === "steps-group" || p.kind === "artifact" || p.kind === "document-stream" || p.kind === "supervisor-approval" || p.kind === "session-handoff" || p.kind === "canvas" || p.kind === "person-confirmation"
|
|
5485
5633
|
);
|
|
5486
5634
|
const trailingCards = appParts.length > 0 || siteParts.length > 0 ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
5487
5635
|
appParts.map((p) => /* @__PURE__ */ jsx(
|
|
@@ -5527,7 +5675,7 @@ var AssistantMessage = memo(function AssistantMessage2({
|
|
|
5527
5675
|
richTextEnabled && (!isStreamingMessage || workSplitIndex === -1) && /* @__PURE__ */ jsx(ImageResultsGallery, { images: imageResults, size: "compact" }),
|
|
5528
5676
|
(() => {
|
|
5529
5677
|
const renderPart = (processed, groupIndex) => {
|
|
5530
|
-
const insideFold =
|
|
5678
|
+
const insideFold = foldPartIndices2.has(groupIndex);
|
|
5531
5679
|
if (processed.kind === "steps-group") {
|
|
5532
5680
|
if (!workDetailsEnabled) {
|
|
5533
5681
|
if (insideFold) return null;
|
|
@@ -5560,6 +5708,16 @@ var AssistantMessage = memo(function AssistantMessage2({
|
|
|
5560
5708
|
if (processed.kind === "plan") {
|
|
5561
5709
|
return null;
|
|
5562
5710
|
}
|
|
5711
|
+
if (processed.kind === "person-confirmation") {
|
|
5712
|
+
return /* @__PURE__ */ jsx(
|
|
5713
|
+
ConversationConfirmationCard,
|
|
5714
|
+
{
|
|
5715
|
+
confirmation: processed.confirmation,
|
|
5716
|
+
conversationId
|
|
5717
|
+
},
|
|
5718
|
+
`${message.id}-confirmation-${processed.confirmation.id}`
|
|
5719
|
+
);
|
|
5720
|
+
}
|
|
5563
5721
|
if (processed.kind === "document-stream") {
|
|
5564
5722
|
if (!richTextEnabled) return null;
|
|
5565
5723
|
return /* @__PURE__ */ jsx(
|
|
@@ -5692,13 +5850,13 @@ var AssistantMessage = memo(function AssistantMessage2({
|
|
|
5692
5850
|
children: [
|
|
5693
5851
|
richTextEnabled && isStreamingMessage ? /* @__PURE__ */ jsx(ImageResultsGallery, { images: imageResults, size: "compact", collapsible: true }) : null,
|
|
5694
5852
|
processedParts.map(
|
|
5695
|
-
(processed, i) =>
|
|
5853
|
+
(processed, i) => foldPartIndices2.has(i) ? renderPart(processed, i) : null
|
|
5696
5854
|
)
|
|
5697
5855
|
]
|
|
5698
5856
|
}
|
|
5699
5857
|
),
|
|
5700
5858
|
processedParts.map(
|
|
5701
|
-
(processed, i) =>
|
|
5859
|
+
(processed, i) => foldPartIndices2.has(i) && processed.kind === "steps-group" ? /* @__PURE__ */ jsx(
|
|
5702
5860
|
MessageDecisionCards,
|
|
5703
5861
|
{
|
|
5704
5862
|
messageId: message.id,
|
|
@@ -5711,7 +5869,7 @@ var AssistantMessage = memo(function AssistantMessage2({
|
|
|
5711
5869
|
) : null
|
|
5712
5870
|
),
|
|
5713
5871
|
processedParts.map(
|
|
5714
|
-
(processed, i) =>
|
|
5872
|
+
(processed, i) => foldPartIndices2.has(i) ? null : renderPart(processed, i)
|
|
5715
5873
|
)
|
|
5716
5874
|
] });
|
|
5717
5875
|
})(),
|
|
@@ -7094,4 +7252,4 @@ function Thinking({
|
|
|
7094
7252
|
) });
|
|
7095
7253
|
}
|
|
7096
7254
|
|
|
7097
|
-
export { ArrowRotateClockwiseIcon, COMPOSER_ID_COPILOT, COMPOSER_ID_MAIN, CSV_PREVIEW_MAX_ROWS, CanvasWidget, CopyButton, Message2 as Message, ModelIcon, PdfViewer, Spinner, Thinking, VolumeFullIcon, WarningSignIcon, brandLabel, csvTextToWorkbookJson, dynamic, isPlainTextLanguage, modeToBrandRow, setPendingFiles, useBackDismiss, useChatStreamStore, useComposerStore, useComputer, useComputerFiles, useContextWindowInfo, useIsCompacting, useLivePreviewUrl, useQueuedMessages, useUploadComputerFile, useUploadFile };
|
|
7255
|
+
export { ArrowRotateClockwiseIcon, COMPOSER_ID_COPILOT, COMPOSER_ID_MAIN, CSV_PREVIEW_MAX_ROWS, CanvasWidget, ConversationConfirmationCard, CopyButton, Message2 as Message, ModelIcon, PdfViewer, Spinner, Thinking, VolumeFullIcon, WarningSignIcon, brandLabel, csvTextToWorkbookJson, dynamic, isPlainTextLanguage, modeToBrandRow, setPendingFiles, unshownPendingConfirmations, useBackDismiss, useChatStreamStore, useComposerStore, useComputer, useComputerFiles, useContextWindowInfo, useIsCompacting, useLivePreviewUrl, usePersonConfirmations, useQueuedMessages, useUploadComputerFile, useUploadFile };
|