@frontera-sdk/chat-ui 1.50.84 → 1.51.1

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 CHANGED
@@ -1,21 +1,21 @@
1
1
  'use client';
2
2
  import { offset, flip, autoUpdate, computePosition } from './chunk-I7SXWUAN.js';
3
3
  import { isFullscreenHotkey, DeckNotesCard, deckOwnsArrowKeys } from './chunk-4FRTPVJT.js';
4
- import { ArtifactSkeleton, resolveStageWidth, zoomPercent, DECK_ZOOM_LEVELS, LazyThumb } from './chunk-BVUZC3CV.js';
5
- import { NewSessionPrompt, keepCaretOnTap } from './chunk-W25JFW23.js';
4
+ import { ArtifactSkeleton, resolveStageWidth, zoomPercent, DECK_ZOOM_LEVELS, LazyThumb } from './chunk-UP3MAXGR.js';
5
+ import { NewSessionPrompt, keepCaretOnTap } from './chunk-P5IRWWV3.js';
6
6
  import { PendingCards } from './chunk-UZ6RDWCT.js';
7
7
  import { themeToStyle } from './chunk-6HYPVNVA.js';
8
8
  import { useChatAgents } from './chunk-FLOAEPRU.js';
9
9
  import { subjectOfChatToken, capabilitiesOfChatToken } from './chunk-CCVPZVFK.js';
10
10
  import { useChatCredential } from './chunk-37G6MHWS.js';
11
11
  import './chunk-WDYCLC4F.js';
12
- import { chatSidePanelSessionKey, Chart1Icon, useTemplatePreviewStore, useHasTemplatePreviewHost, useChatSidePanelStore, ChatHeader, ChatHeaderActions, useRightPane, getChatOverviewAgentStatus, useChatOverviewVisible, useConversationArtifacts, PENDING_CHART_TAB_PREFIX, CHART_TAB_PREFIX, AGENT_WORK_TAB_ID, AGENT_ROUTINES_TAB_ID, SOURCES_TAB_ID, TEMPLATE_TAB_ID, OutputsSection, ChainLink1Icon, ChatOverviewContent, COMPUTER_TAB_PREFIX, SourceRow, motion, MAX_CHAT_SIDE_PANEL_SESSIONS, DEFAULT_CHAT_SIDE_PANEL_SIZE, TableIcon } from './chunk-N6O25UEO.js';
12
+ import { chatSidePanelSessionKey, Chart1Icon, useTemplatePreviewStore, useHasTemplatePreviewHost, useChatSidePanelStore, ChatHeader, ChatHeaderActions, useRightPane, getChatOverviewAgentStatus, useChatOverviewVisible, useConversationArtifacts, PENDING_CHART_TAB_PREFIX, CHART_TAB_PREFIX, AGENT_WORK_TAB_ID, AGENT_ROUTINES_TAB_ID, SOURCES_TAB_ID, TEMPLATE_TAB_ID, OutputsSection, ChainLink1Icon, ChatOverviewContent, COMPUTER_TAB_PREFIX, SourceRow, motion, MAX_CHAT_SIDE_PANEL_SESSIONS, DEFAULT_CHAT_SIDE_PANEL_SIZE, TableIcon } from './chunk-NELM2C7A.js';
13
13
  import './chunk-X3QVICX7.js';
14
- import { dynamic, useChatStreamStore, useComposerStore, Message, Thinking, setPendingFiles, useLivePreviewUrl, ArrowRotateClockwiseIcon, useComputerFiles, useUploadComputerFile, CanvasWidget, isPlainTextLanguage, useUploadFile, COMPOSER_ID_MAIN, useContextWindowInfo, useIsCompacting, useQueuedMessages, VolumeFullIcon, WarningSignIcon, useComputer, csvTextToWorkbookJson, CSV_PREVIEW_MAX_ROWS, CopyButton, COMPOSER_ID_COPILOT, ModelIcon, modeToBrandRow, useBackDismiss, PdfViewer, brandLabel, Spinner } from './chunk-GYFPAGMQ.js';
15
- import { Textarea, artifactFormatIcon, BookIcon, useAgentRoster, ShieldCheckIcon, useArtifactStore, useCanvasStore, useChatOverviewStore, setSdkConversationPath, setSdkDarkMode, AgentsProvider, PluginProvider, WorkspaceProvider, TooltipProvider, isToolPart, getToolState, getToolName, getToolInput, sourceKind, extractDomain, CitationViewerContext, MarkdownRenderer, ConnectRunnerContext, usePathname, usePaneFocusStore, useAgentPanelStore, Tooltip, TooltipTrigger, TooltipContent, StudioDisplayIcon, WorldIcon, SlidesWideIcon, ArtifactActionsMenu, DotGrid1x3HorizontalTightIcon, ArrowsShowIcon, useKeyboardInset, ExclamationCircleIcon, getToolOutput, useArtifact, useUpdateArtifact, useArtifactFileObjectUrl, resolveArtifactIconFormat, useSourcesEnrichment, LoaderIcon, FileDownloadIcon, Label, Input, renderPluginBlock, useArtifactVersion, useChatCapabilities, useChatOptInEnabled, useSessionPendingApprovals, tableToCsv, tableToXlsx, tableToMarkdown, DropdownMenu, DropdownMenuTrigger, StyledDropdownMenuContent, StyledDropdownMenuItem, useArtifactVersions, useClient, unwrapData, authFetch, getBearerHeadersForApi, EyeOpenIcon, EyeSlashIcon, useRestoreArtifactVersion, ZoomableImage, ChatImageLightbox, useDownloadArtifact, useArtifactFileBytes, useArtifactPreviewFileObjectUrl, useArtifactVersionPreviewFileObjectUrl, SpreadsheetIcon, FilePdfIcon, useOptionalWorkspaceContext, useAgentConnectionStatus, useArtifacts, useConversationDesktopStatus, isRequestHumanTool, appsKeys, useSession, useWorkspaceContext, errorText, unwrapDataDeep, useRouter, Images1Icon, ArrowUpIcon, VideoIcon, AudioIcon, useBrand, resolveBearerHeaders, subscribeSdkDarkMode, getSdkDarkMode, unwrap, useConnectRunner, useStartUserConnect, useUpsertGrant, useRevokeGrant, AlertDialog, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel, AlertDialogAction, LayoutGrid1Icon, useCatalog, useInstalls, useWorkspaceSlug, buildTenantUrlAbsolute } from './chunk-UE4KFYFK.js';
14
+ import { dynamic, useChatStreamStore, useComposerStore, Message, Thinking, setPendingFiles, useLivePreviewUrl, ArrowRotateClockwiseIcon, useComputerFiles, useUploadComputerFile, CanvasWidget, isPlainTextLanguage, useUploadFile, COMPOSER_ID_MAIN, useContextWindowInfo, useIsCompacting, useQueuedMessages, VolumeFullIcon, WarningSignIcon, useComputer, csvTextToWorkbookJson, CSV_PREVIEW_MAX_ROWS, CopyButton, COMPOSER_ID_COPILOT, ModelIcon, modeToBrandRow, useBackDismiss, PdfViewer, brandLabel, Spinner } from './chunk-UM2N6GYB.js';
15
+ import { Textarea, artifactFormatIcon, BookIcon, useAgentRoster, ShieldCheckIcon, useArtifactStore, useCanvasStore, useChatOverviewStore, setSdkConversationPath, setSdkDarkMode, AgentsProvider, PluginProvider, WorkspaceProvider, TooltipProvider, isToolPart, getToolState, getToolName, getToolInput, sourceKind, extractDomain, CitationViewerContext, MarkdownRenderer, ConnectRunnerContext, usePathname, usePaneFocusStore, useAgentPanelStore, Tooltip, TooltipTrigger, TooltipContent, StudioDisplayIcon, WorldIcon, SlidesWideIcon, ArtifactActionsMenu, DotGrid1x3HorizontalTightIcon, ArrowsShowIcon, useKeyboardInset, ExclamationCircleIcon, getToolOutput, useArtifact, useUpdateArtifact, useArtifactFileObjectUrl, resolveArtifactIconFormat, useSourcesEnrichment, LoaderIcon, FileDownloadIcon, Label, Input, renderPluginBlock, useArtifactVersion, useChatCapabilities, useChatOptInEnabled, useSessionPendingApprovals, tableToCsv, tableToXlsx, tableToMarkdown, DropdownMenu, DropdownMenuTrigger, StyledDropdownMenuContent, StyledDropdownMenuItem, useArtifactVersions, useClient, unwrapData, authFetch, getBearerHeadersForApi, EyeOpenIcon, EyeSlashIcon, useRestoreArtifactVersion, ZoomableImage, ChatImageLightbox, useDownloadArtifact, useArtifactFileBytes, useArtifactPreviewFileObjectUrl, useArtifactVersionPreviewFileObjectUrl, SpreadsheetIcon, FilePdfIcon, useOptionalWorkspaceContext, useAgentConnectionStatus, useArtifacts, useConversationDesktopStatus, isRequestHumanTool, appsKeys, useSession, useWorkspaceContext, errorText, unwrapDataDeep, useRouter, Images1Icon, ArrowUpIcon, VideoIcon, AudioIcon, useBrand, resolveBearerHeaders, subscribeSdkDarkMode, getSdkDarkMode, unwrap, useConnectRunner, useStartUserConnect, useUpsertGrant, useRevokeGrant, AlertDialog, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel, AlertDialogAction, LayoutGrid1Icon, useCatalog, useInstalls, useWorkspaceSlug, buildTenantUrlAbsolute } from './chunk-FVOZO2U3.js';
16
16
  import { ChevronLeftIcon } from './chunk-CWAOLMFS.js';
17
17
  import { Popover, PopoverTrigger, PopoverContent, Sheet, SheetContent, SheetHeader, SheetTitle, SheetDescription } from './chunk-T5SANYSX.js';
18
- import { MOBILE_BREAKPOINT, useIsMobile, I18nProvider, useTranslation } from './chunk-LMO5ZVB4.js';
18
+ import { MOBILE_BREAKPOINT, useIsMobile, I18nProvider, useTranslation } from './chunk-77VKT67G.js';
19
19
  import './chunk-QBV7MAFV.js';
20
20
  import { AppIcon, frontera_icon_default, PhotoIcon, Folder1Icon, FileTextIcon, describeToolRow, SquareArrowTopRightIcon, ClipboardIcon, getToolMeta, useStreamdownPlugins, AppIconFrame, MessageResponse } from './chunk-PKNEC4LJ.js';
21
21
  import { Skeleton, Button, ScrollArea, ChevronDownMediumIcon, buttonVariants } from './chunk-UWKO24VT.js';
@@ -42449,7 +42449,7 @@ function SheetEditor({ content, onSave, readOnly = false }) {
42449
42449
  );
42450
42450
  }
42451
42451
  var PdfDocumentViewInner = dynamic(
42452
- () => import('./pdf-document-view-inner-LG6VFSM4.js'),
42452
+ () => import('./pdf-document-view-inner-BSLGULIS.js'),
42453
42453
  {
42454
42454
  ssr: false,
42455
42455
  loading: () => /* @__PURE__ */ jsx(ArtifactSkeleton, { format: "pdf" })
@@ -43266,7 +43266,7 @@ function HtmlDeckView({ content, inChat = false, versionSlot }) {
43266
43266
  !present && inChat && /* @__PURE__ */ jsx(DeckEditPanel, { currentIndex: sel, currentHtml: slides[sel]?.html ?? "" })
43267
43267
  ] });
43268
43268
  }
43269
- var Inner = dynamic(() => import('./pdf-deck-view-inner-QUB74PES.js'), {
43269
+ var Inner = dynamic(() => import('./pdf-deck-view-inner-JVQV24L6.js'), {
43270
43270
  ssr: false,
43271
43271
  loading: () => /* @__PURE__ */ jsx(ArtifactSkeleton, { format: "htmldeck" })
43272
43272
  });
@@ -45393,15 +45393,27 @@ function SourcesTabView({
45393
45393
  `${citation.url}-${index}`
45394
45394
  )) }) });
45395
45395
  }
45396
- function RightPanelTab({
45396
+ function DocumentTab({
45397
45397
  active,
45398
45398
  title,
45399
45399
  icon,
45400
45400
  onSelect,
45401
45401
  onClose,
45402
- closeLabel
45402
+ closeLabel,
45403
+ tooltip,
45404
+ ref,
45405
+ className,
45406
+ ...rest
45403
45407
  }) {
45404
45408
  const tabRef = useRef(null);
45409
+ const setTabRef = useCallback(
45410
+ (node) => {
45411
+ tabRef.current = node;
45412
+ if (typeof ref === "function") ref(node);
45413
+ else if (ref) ref.current = node;
45414
+ },
45415
+ [ref]
45416
+ );
45405
45417
  useEffect(() => {
45406
45418
  if (active) {
45407
45419
  tabRef.current?.scrollIntoView({
@@ -45415,7 +45427,10 @@ function RightPanelTab({
45415
45427
  /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
45416
45428
  "div",
45417
45429
  {
45418
- ref: tabRef,
45430
+ ...rest,
45431
+ ref: setTabRef,
45432
+ "data-slot": "document-tab",
45433
+ "data-active": active || void 0,
45419
45434
  role: "button",
45420
45435
  tabIndex: 0,
45421
45436
  onClick: onSelect,
@@ -45426,14 +45441,15 @@ function RightPanelTab({
45426
45441
  }
45427
45442
  },
45428
45443
  className: cn(
45429
- // Sized to its label, capped so one long artifact title cannot
45430
- // push the rest of the strip off-screen. The trailing padding
45431
- // lives on the LABEL rather than here: `text-fade` masks the last
45432
- // 0.75rem of the element it is on, so on a shrink-to-fit tab it
45433
- // would eat the final glyphs of a short name — over the padding it
45434
- // fades nothing until the name actually overflows.
45444
+ // Sized to its label, capped so one long title cannot push the
45445
+ // rest of the strip off-screen. The trailing padding lives on the
45446
+ // LABEL rather than here: `text-fade` masks the last 0.75rem of
45447
+ // the element it is on, so on a shrink-to-fit tab it would eat the
45448
+ // final glyphs of a short name — over the padding it fades nothing
45449
+ // until the name actually overflows.
45435
45450
  "group/tab relative flex h-8 w-fit max-w-32 flex-none cursor-pointer select-none items-center gap-1.5 whitespace-nowrap rounded-lg pl-3 text-xs transition-colors",
45436
- active ? "bg-muted font-medium text-foreground hover:bg-surface-hover dark:bg-surface-raised dark:hover:bg-surface-hover" : "text-muted-foreground hover:bg-surface-hover hover:text-foreground focus-within:bg-surface-hover"
45451
+ active ? "bg-muted font-medium text-foreground hover:bg-surface-hover dark:bg-surface-raised dark:hover:bg-surface-hover" : "text-muted-foreground hover:bg-surface-hover hover:text-foreground focus-within:bg-surface-hover",
45452
+ className
45437
45453
  ),
45438
45454
  children: [
45439
45455
  icon,
@@ -45442,6 +45458,7 @@ function RightPanelTab({
45442
45458
  "button",
45443
45459
  {
45444
45460
  type: "button",
45461
+ "data-slot": "document-tab-close",
45445
45462
  onClick: (event) => {
45446
45463
  event.stopPropagation();
45447
45464
  onClose();
@@ -45458,9 +45475,46 @@ function RightPanelTab({
45458
45475
  ]
45459
45476
  }
45460
45477
  ) }),
45461
- /* @__PURE__ */ jsx(TooltipContent, { side: "bottom", sideOffset: 6, children: title })
45478
+ /* @__PURE__ */ jsx(TooltipContent, { side: "bottom", sideOffset: 6, children: tooltip ?? title })
45462
45479
  ] });
45463
45480
  }
45481
+ function scrollStripWithWheel(event) {
45482
+ const el = event.currentTarget;
45483
+ if (el.scrollWidth <= el.clientWidth) return;
45484
+ const delta = Math.abs(event.deltaX) > Math.abs(event.deltaY) ? event.deltaX : event.deltaY;
45485
+ if (delta === 0) return;
45486
+ event.preventDefault();
45487
+ el.scrollLeft += delta;
45488
+ }
45489
+ function DocumentTabStrip({ ref, className, ...rest }) {
45490
+ const stripRef = useRef(null);
45491
+ const setStripRef = useCallback(
45492
+ (node) => {
45493
+ stripRef.current = node;
45494
+ if (typeof ref === "function") ref(node);
45495
+ else if (ref) ref.current = node;
45496
+ },
45497
+ [ref]
45498
+ );
45499
+ useEffect(() => {
45500
+ const el = stripRef.current;
45501
+ if (!el) return;
45502
+ el.addEventListener("wheel", scrollStripWithWheel, { passive: false });
45503
+ return () => el.removeEventListener("wheel", scrollStripWithWheel);
45504
+ }, []);
45505
+ return /* @__PURE__ */ jsx(
45506
+ "div",
45507
+ {
45508
+ ...rest,
45509
+ ref: setStripRef,
45510
+ "data-slot": "document-tab-strip",
45511
+ className: cn(
45512
+ "scroll-fade-x flex h-10 min-w-0 flex-1 items-center gap-1 overflow-x-auto overflow-y-hidden overscroll-x-contain px-3 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
45513
+ className
45514
+ )
45515
+ }
45516
+ );
45517
+ }
45464
45518
  function useHorizontalOverflow(contentKey) {
45465
45519
  const containerRef = useRef(null);
45466
45520
  const [hasOverflow, setHasOverflow] = useState(false);
@@ -45886,154 +45940,139 @@ function RightPanel({
45886
45940
  ),
45887
45941
  children: [
45888
45942
  /* @__PURE__ */ jsxs("div", { className: "flex items-stretch h-10 shrink-0 border-b", children: [
45889
- /* @__PURE__ */ jsxs(
45890
- "div",
45891
- {
45892
- ref: tabStripRef,
45893
- className: "scroll-fade-x flex h-10 min-w-0 flex-1 items-center gap-1 overflow-x-auto overflow-y-hidden overscroll-x-contain px-3 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
45894
- onWheel: (e) => {
45895
- const el = e.currentTarget;
45896
- if (el.scrollWidth <= el.clientWidth) return;
45897
- const delta = Math.abs(e.deltaX) > Math.abs(e.deltaY) ? e.deltaX : e.deltaY;
45898
- if (delta === 0) return;
45899
- e.preventDefault();
45900
- el.scrollLeft += delta;
45901
- },
45902
- children: [
45903
- hasAgentTabs && /* @__PURE__ */ jsxs(Fragment, { children: [
45904
- /* @__PURE__ */ jsx(
45905
- RightPanelTab,
45906
- {
45907
- active: effectiveActiveId === AGENT_WORK_TAB_ID,
45908
- title: t2("agentMode.work.title"),
45909
- icon: /* @__PURE__ */ jsx(ChecklistIcon, { className: "size-3.5 shrink-0" }),
45910
- onSelect: () => {
45911
- setActiveId(AGENT_WORK_TAB_ID);
45912
- setShowPicker(false);
45913
- }
45914
- }
45915
- ),
45916
- /* @__PURE__ */ jsx(
45917
- RightPanelTab,
45918
- {
45919
- active: effectiveActiveId === AGENT_ROUTINES_TAB_ID,
45920
- title: t2("agentMode.routines.title"),
45921
- icon: /* @__PURE__ */ jsx(CalendarRepeatIcon, { className: "size-3.5 shrink-0" }),
45922
- onSelect: () => {
45923
- setActiveId(AGENT_ROUTINES_TAB_ID);
45924
- setShowPicker(false);
45925
- }
45926
- }
45927
- )
45928
- ] }),
45929
- tabArtifacts.map((a) => /* @__PURE__ */ jsx(
45930
- RightPanelTab,
45931
- {
45932
- active: effectiveActiveId === a.id,
45933
- title: a.title,
45934
- icon: /* @__PURE__ */ jsx(
45935
- ArtifactTabIcon,
45936
- {
45937
- format: a.format,
45938
- artifactId: a.id,
45939
- mimeType: "mimeType" in a ? a.mimeType : void 0,
45940
- title: a.title
45941
- }
45942
- ),
45943
- onSelect: () => selectArtifact(a.id),
45944
- onClose: () => closeTab(a.id),
45945
- closeLabel: t2("library.close")
45946
- },
45947
- a.id
45948
- )),
45949
- canvasItems.map((it) => {
45950
- const tid = chartTabId(it.id);
45951
- return /* @__PURE__ */ jsx(
45952
- RightPanelTab,
45953
- {
45954
- active: effectiveActiveId === tid,
45955
- title: it.title || "Chart",
45956
- icon: /* @__PURE__ */ jsx(Chart1Icon, { className: "size-3.5 shrink-0" }),
45957
- onSelect: () => {
45958
- setActiveId(tid);
45959
- setShowPicker(false);
45960
- },
45961
- onClose: () => closeTab(tid),
45962
- closeLabel: t2("library.close")
45963
- },
45964
- tid
45965
- );
45966
- }),
45967
- pendingCanvasRefs.map((ref) => {
45968
- const tid = pendingCanvasTabId(ref);
45969
- return /* @__PURE__ */ jsx(
45970
- RightPanelTab,
45971
- {
45972
- active: effectiveActiveId === tid,
45973
- title: ref.t || "Chart",
45974
- icon: /* @__PURE__ */ jsx(Chart1Icon, { className: "size-3.5 shrink-0" }),
45975
- onSelect: () => {
45976
- setActiveId(tid);
45977
- setShowPicker(false);
45978
- },
45979
- onClose: () => closeTab(tid),
45980
- closeLabel: t2("library.close")
45981
- },
45982
- tid
45983
- );
45984
- }),
45985
- computerTabs.map((ct) => {
45986
- const tid = computerTabId(ct.id);
45987
- const icon = ct.kind === "app" ? /* @__PURE__ */ jsx(StudioDisplayIcon, { className: "size-3.5 shrink-0" }) : ct.kind === "files" ? /* @__PURE__ */ jsx(Folder1Icon, { className: "size-3.5 shrink-0" }) : /* @__PURE__ */ jsx(WorldIcon, { className: "size-3.5 shrink-0" });
45988
- return /* @__PURE__ */ jsx(
45989
- RightPanelTab,
45990
- {
45991
- active: effectiveActiveId === tid,
45992
- title: ct.title,
45993
- icon,
45994
- onSelect: () => {
45995
- setActiveId(tid);
45996
- setActiveComputer(ct.id);
45997
- setShowPicker(false);
45998
- },
45999
- onClose: () => closeTab(tid),
46000
- closeLabel: t2("library.close")
46001
- },
46002
- tid
46003
- );
46004
- }),
46005
- templateTabId && /* @__PURE__ */ jsx(
46006
- RightPanelTab,
46007
- {
46008
- active: effectiveActiveId === templateTabId,
46009
- title: templateTabTitle,
46010
- icon: /* @__PURE__ */ jsx(SlidesWideIcon, { className: "size-3.5 shrink-0" }),
46011
- onSelect: () => {
46012
- setActiveId(templateTabId);
46013
- setShowPicker(false);
46014
- },
46015
- onClose: () => closeTab(templateTabId),
46016
- closeLabel: t2("library.close")
45943
+ /* @__PURE__ */ jsxs(DocumentTabStrip, { ref: tabStripRef, children: [
45944
+ hasAgentTabs && /* @__PURE__ */ jsxs(Fragment, { children: [
45945
+ /* @__PURE__ */ jsx(
45946
+ DocumentTab,
45947
+ {
45948
+ active: effectiveActiveId === AGENT_WORK_TAB_ID,
45949
+ title: t2("agentMode.work.title"),
45950
+ icon: /* @__PURE__ */ jsx(ChecklistIcon, { className: "size-3.5 shrink-0" }),
45951
+ onSelect: () => {
45952
+ setActiveId(AGENT_WORK_TAB_ID);
45953
+ setShowPicker(false);
46017
45954
  }
46018
- ),
46019
- hasSourcesTab && /* @__PURE__ */ jsx(
46020
- RightPanelTab,
45955
+ }
45956
+ ),
45957
+ /* @__PURE__ */ jsx(
45958
+ DocumentTab,
45959
+ {
45960
+ active: effectiveActiveId === AGENT_ROUTINES_TAB_ID,
45961
+ title: t2("agentMode.routines.title"),
45962
+ icon: /* @__PURE__ */ jsx(CalendarRepeatIcon, { className: "size-3.5 shrink-0" }),
45963
+ onSelect: () => {
45964
+ setActiveId(AGENT_ROUTINES_TAB_ID);
45965
+ setShowPicker(false);
45966
+ }
45967
+ }
45968
+ )
45969
+ ] }),
45970
+ tabArtifacts.map((a) => /* @__PURE__ */ jsx(
45971
+ DocumentTab,
45972
+ {
45973
+ active: effectiveActiveId === a.id,
45974
+ title: a.title,
45975
+ icon: /* @__PURE__ */ jsx(
45976
+ ArtifactTabIcon,
46021
45977
  {
46022
- active: effectiveActiveId === SOURCES_TAB_ID,
46023
- title: t2("chat.overview.sources"),
46024
- icon: /* @__PURE__ */ jsx(ChainLink1Icon, { className: "size-3.5 shrink-0" }),
46025
- onSelect: () => {
46026
- setActiveId(SOURCES_TAB_ID);
46027
- setShowPicker(false);
46028
- },
46029
- onClose: () => closeTab(SOURCES_TAB_ID),
46030
- closeLabel: t2("library.close")
45978
+ format: a.format,
45979
+ artifactId: a.id,
45980
+ mimeType: "mimeType" in a ? a.mimeType : void 0,
45981
+ title: a.title
46031
45982
  }
46032
45983
  ),
46033
- !tabStripOverflows && addTabButton
46034
- ]
46035
- }
46036
- ),
45984
+ onSelect: () => selectArtifact(a.id),
45985
+ onClose: () => closeTab(a.id),
45986
+ closeLabel: t2("library.close")
45987
+ },
45988
+ a.id
45989
+ )),
45990
+ canvasItems.map((it) => {
45991
+ const tid = chartTabId(it.id);
45992
+ return /* @__PURE__ */ jsx(
45993
+ DocumentTab,
45994
+ {
45995
+ active: effectiveActiveId === tid,
45996
+ title: it.title || "Chart",
45997
+ icon: /* @__PURE__ */ jsx(Chart1Icon, { className: "size-3.5 shrink-0" }),
45998
+ onSelect: () => {
45999
+ setActiveId(tid);
46000
+ setShowPicker(false);
46001
+ },
46002
+ onClose: () => closeTab(tid),
46003
+ closeLabel: t2("library.close")
46004
+ },
46005
+ tid
46006
+ );
46007
+ }),
46008
+ pendingCanvasRefs.map((ref) => {
46009
+ const tid = pendingCanvasTabId(ref);
46010
+ return /* @__PURE__ */ jsx(
46011
+ DocumentTab,
46012
+ {
46013
+ active: effectiveActiveId === tid,
46014
+ title: ref.t || "Chart",
46015
+ icon: /* @__PURE__ */ jsx(Chart1Icon, { className: "size-3.5 shrink-0" }),
46016
+ onSelect: () => {
46017
+ setActiveId(tid);
46018
+ setShowPicker(false);
46019
+ },
46020
+ onClose: () => closeTab(tid),
46021
+ closeLabel: t2("library.close")
46022
+ },
46023
+ tid
46024
+ );
46025
+ }),
46026
+ computerTabs.map((ct) => {
46027
+ const tid = computerTabId(ct.id);
46028
+ const icon = ct.kind === "app" ? /* @__PURE__ */ jsx(StudioDisplayIcon, { className: "size-3.5 shrink-0" }) : ct.kind === "files" ? /* @__PURE__ */ jsx(Folder1Icon, { className: "size-3.5 shrink-0" }) : /* @__PURE__ */ jsx(WorldIcon, { className: "size-3.5 shrink-0" });
46029
+ return /* @__PURE__ */ jsx(
46030
+ DocumentTab,
46031
+ {
46032
+ active: effectiveActiveId === tid,
46033
+ title: ct.title,
46034
+ icon,
46035
+ onSelect: () => {
46036
+ setActiveId(tid);
46037
+ setActiveComputer(ct.id);
46038
+ setShowPicker(false);
46039
+ },
46040
+ onClose: () => closeTab(tid),
46041
+ closeLabel: t2("library.close")
46042
+ },
46043
+ tid
46044
+ );
46045
+ }),
46046
+ templateTabId && /* @__PURE__ */ jsx(
46047
+ DocumentTab,
46048
+ {
46049
+ active: effectiveActiveId === templateTabId,
46050
+ title: templateTabTitle,
46051
+ icon: /* @__PURE__ */ jsx(SlidesWideIcon, { className: "size-3.5 shrink-0" }),
46052
+ onSelect: () => {
46053
+ setActiveId(templateTabId);
46054
+ setShowPicker(false);
46055
+ },
46056
+ onClose: () => closeTab(templateTabId),
46057
+ closeLabel: t2("library.close")
46058
+ }
46059
+ ),
46060
+ hasSourcesTab && /* @__PURE__ */ jsx(
46061
+ DocumentTab,
46062
+ {
46063
+ active: effectiveActiveId === SOURCES_TAB_ID,
46064
+ title: t2("chat.overview.sources"),
46065
+ icon: /* @__PURE__ */ jsx(ChainLink1Icon, { className: "size-3.5 shrink-0" }),
46066
+ onSelect: () => {
46067
+ setActiveId(SOURCES_TAB_ID);
46068
+ setShowPicker(false);
46069
+ },
46070
+ onClose: () => closeTab(SOURCES_TAB_ID),
46071
+ closeLabel: t2("library.close")
46072
+ }
46073
+ ),
46074
+ !tabStripOverflows && addTabButton
46075
+ ] }),
46037
46076
  tabStripOverflows && /* @__PURE__ */ jsx("div", { className: "flex h-10 shrink-0 items-center pl-1", children: addTabButton }),
46038
46077
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 pl-2 pr-3 shrink-0", children: [
46039
46078
  sourcesActive ? null : computerActive ? /* @__PURE__ */ jsxs(Fragment, { children: [
@@ -5005,11 +5005,11 @@ Use Add a rule to build them from lists.`,
5005
5005
  "appExternal.keys.loading": "Loading App keys",
5006
5006
  "appExternal.keys.loadFailed": "App keys could not be loaded.",
5007
5007
  "appExternal.roles.title": "Roles",
5008
- "appExternal.roles.hint": "Business roles for this app: who gets each one, and the data it may read.",
5008
+ "appExternal.roles.hint": "Business roles for this app: who gets each one, what it can do, and the data it may read.",
5009
5009
  "appExternal.roles.add": "Add role",
5010
5010
  "appExternal.roles.addTitle": "Add role",
5011
5011
  "appExternal.roles.editTitle": "Edit role",
5012
- "appExternal.roles.dialogDescription": "Say who gets this role at sign-in, and which records of each object type they may read.",
5012
+ "appExternal.roles.dialogDescription": "Say who gets this role at sign-in, what it can do, and which records of each object type they may read.",
5013
5013
  "appExternal.roles.whoTitle": "Who gets this role",
5014
5014
  "appExternal.roles.whoHint": "At sign-in, a person gets this role when any condition matches their login token. Someone who gets no role can't sign in.",
5015
5015
  "appExternal.roles.whoNone": "No conditions: nobody gets this role at sign-in. Give it to people one by one under App users \u2014 someone who tried to sign in without a role is listed there.",
@@ -5033,8 +5033,32 @@ Use Add a rule to build them from lists.`,
5033
5033
  "appExternal.roles.whoSummary": "Given to: {conditions}",
5034
5034
  "appExternal.roles.whoSummaryNone": "Given per person only",
5035
5035
  "appExternal.roles.scopeNone": "Reads no data",
5036
+ "appExternal.roles.actionsTitle": "What this role can do",
5037
+ "appExternal.roles.actionsHint": "Choose the Actions people with this role may submit.",
5038
+ "appExternal.roles.actionsNone": "This role can only read data.",
5039
+ "appExternal.roles.chooseActions": "Choose Actions",
5040
+ "appExternal.roles.actionsSearch": "Search Actions\u2026",
5041
+ "appExternal.roles.actionsNoMatch": "No Action matches.",
5042
+ "appExternal.roles.actionsLoading": "Loading Actions\u2026",
5043
+ "appExternal.roles.actionsLoadFailed": "Actions could not be loaded. Close this dialog and open it again.",
5044
+ "appExternal.roles.actionsNoneAvailable": "There are no Actions to choose yet. Actions come from Blueprint, on record types this workspace can read.",
5045
+ "appExternal.roles.actionRemoved": "removed",
5046
+ "appExternal.roles.actionUnknown": "Unknown Action",
5047
+ "appExternal.roles.removeAction": "Remove {name}",
5048
+ "appExternal.roles.actionsRemovedHint": "An Action marked removed is not available to this App right now. If the Action becomes available to this App again, the role has it again. Remove it to stop that.",
5049
+ "appExternal.roles.actionOwnSystem": "calls your own system",
5050
+ "appExternal.roles.actionsOwnSystemHint": "An Action marked \u201Ccalls your own system\u201D can be used on any record your system accepts. This role's data rules do not narrow it. Your own system must check that the person may act on the record.",
5051
+ "appExternal.roles.actionSilentAboutActor": "does not tell your system who is acting",
5052
+ "appExternal.roles.actionsSilentAboutActorHint": "An Action marked \u201Cdoes not tell your system who is acting\u201D is deployed without the person's identity, so your system cannot check who is asking. Everyone with this role can use it on any record your system accepts. Have it deployed again so that it sends who is acting with both the lookup and the change, or require approval on the Action, or remove it from this role.",
5053
+ "appExternal.roles.actionsSummary": "Can do: {count} Actions",
5054
+ "appExternal.roles.actionsSummaryOne": "Can do: 1 Action",
5055
+ "appExternal.roles.actionsSummaryNone": "Can do: read only",
5056
+ "appExternal.help.roleActions": "The Actions people with this role may submit. Actions are defined in Blueprint; the list shows the ones on record types this workspace can read. An Action that changes Blueprint records can be used only on records this same role lets people read, so give this role a Data scope rule for the record type each Action changes. A role that only lists Actions lets nobody use them. An Action that calls your own system needs the same rule on the role, but Frontera does not check the record it names against the role's data: your own system must check that the person may act on it. That rule still decides what the role reads in Blueprint and what its other Actions on that record type may change, so do not add Every row only to enable an Action that calls your own system. Choose none and the role only reads data.",
5036
5057
  "appExternal.roles.save": "Save role",
5037
5058
  "appExternal.roles.saved": "Role saved",
5059
+ "appExternal.roles.actionNeedsDataRule": "{action} changes {objectType}, but this role has no Data scope rule for {objectType}, so nobody can use it through this role yet.",
5060
+ "appExternal.roles.actionNeedsDataRuleMore": "{message} {count} more of this role's Actions have no Data scope rule for the record type they change either.",
5061
+ "appExternal.roles.actionNeedsDataRuleMoreOne": "{message} 1 more of this role's Actions has no Data scope rule for the record type it changes either.",
5038
5062
  "appExternal.roles.saveFailed": "Failed to save role",
5039
5063
  "appExternal.roles.empty": "No roles yet. Nobody can read data until they hold a role.",
5040
5064
  "appExternal.roles.deleteTitle": "Delete role {name}?",
@@ -5135,6 +5159,20 @@ Use Add a rule to build them from lists.`,
5135
5159
  "appExternal.users.rolesSaved": "Roles updated",
5136
5160
  "appExternal.users.loading": "Loading App users",
5137
5161
  "appExternal.users.loadFailed": "App users could not be loaded.",
5162
+ "appExternal.setup.title": "Setup",
5163
+ "appExternal.setup.progress": "{done} of {total} done",
5164
+ "appExternal.setup.todo": "To do",
5165
+ "appExternal.setup.complete": "Setup complete. People can sign in and read the data their roles allow.",
5166
+ "appExternal.setup.hosting.title": "{external}",
5167
+ "appExternal.setup.hosting.hint": "Turn on {external} and add at least one entry under {origins}.",
5168
+ "appExternal.setup.signIn.title": "Sign-in connected",
5169
+ "appExternal.setup.signIn.hint": "Under {audiences}, set up {operator} or {customer} with your identity provider's issuer, and keep it {enabled}.",
5170
+ "appExternal.setup.roleScope.title": "A role that can read data",
5171
+ "appExternal.setup.roleScope.hint": "Under {roles}, add a role and give it at least one data rule.",
5172
+ "appExternal.setup.roleAssignment.title": "Someone gets a role",
5173
+ "appExternal.setup.roleAssignment.hint": "Add a condition under {who} on a role that can read data, or give a person that role under {users}.",
5174
+ "appExternal.setup.signedIn.title": "Someone has signed in",
5175
+ "appExternal.setup.signedIn.hint": "Sign in to your App once. Each person appears under {users} after their first sign-in.",
5138
5176
  "appsGallery.builtin": "Built in",
5139
5177
  "appsGallery.builtinChatDescription": "Work with the Agents assigned to you.",
5140
5178
  "appsGallery.openChat": "Open Chat",
@@ -10105,11 +10143,11 @@ var id_default = {
10105
10143
  "appExternal.keys.loading": "Memuat App key",
10106
10144
  "appExternal.keys.loadFailed": "App key tidak dapat dimuat.",
10107
10145
  "appExternal.roles.title": "Peran",
10108
- "appExternal.roles.hint": "Peran bisnis untuk aplikasi ini: siapa yang mendapatkannya, dan data yang boleh dibaca.",
10146
+ "appExternal.roles.hint": "Peran bisnis untuk aplikasi ini: siapa yang mendapatkannya, apa yang bisa dilakukannya, dan data yang boleh dibaca.",
10109
10147
  "appExternal.roles.add": "Tambah peran",
10110
10148
  "appExternal.roles.addTitle": "Tambah peran",
10111
10149
  "appExternal.roles.editTitle": "Ubah peran",
10112
- "appExternal.roles.dialogDescription": "Tentukan siapa yang mendapat peran ini saat masuk, dan record dari setiap tipe objek yang boleh mereka baca.",
10150
+ "appExternal.roles.dialogDescription": "Tentukan siapa yang mendapat peran ini saat masuk, apa yang bisa dilakukannya, dan record dari setiap tipe objek yang boleh mereka baca.",
10113
10151
  "appExternal.roles.whoTitle": "Siapa yang mendapat peran ini",
10114
10152
  "appExternal.roles.whoHint": "Saat masuk, seseorang mendapat peran ini jika salah satu kondisi cocok dengan token loginnya. Orang yang tidak mendapat peran apa pun tidak bisa masuk.",
10115
10153
  "appExternal.roles.whoNone": "Tidak ada kondisi: tidak ada yang mendapat peran ini saat masuk. Berikan per orang di App users \u2014 orang yang mencoba masuk tanpa peran tercantum di sana.",
@@ -10133,8 +10171,32 @@ var id_default = {
10133
10171
  "appExternal.roles.whoSummary": "Diberikan kepada: {conditions}",
10134
10172
  "appExternal.roles.whoSummaryNone": "Hanya diberikan per orang",
10135
10173
  "appExternal.roles.scopeNone": "Tidak membaca data",
10174
+ "appExternal.roles.actionsTitle": "Apa yang bisa dilakukan peran ini",
10175
+ "appExternal.roles.actionsHint": "Pilih Action yang boleh diajukan orang dengan peran ini.",
10176
+ "appExternal.roles.actionsNone": "Peran ini hanya bisa membaca data.",
10177
+ "appExternal.roles.chooseActions": "Pilih Action",
10178
+ "appExternal.roles.actionsSearch": "Cari Action\u2026",
10179
+ "appExternal.roles.actionsNoMatch": "Tidak ada Action yang cocok.",
10180
+ "appExternal.roles.actionsLoading": "Memuat Action\u2026",
10181
+ "appExternal.roles.actionsLoadFailed": "Action tidak dapat dimuat. Tutup dialog ini lalu buka lagi.",
10182
+ "appExternal.roles.actionsNoneAvailable": "Belum ada Action untuk dipilih. Action berasal dari Blueprint, pada tipe catatan yang bisa dibaca workspace ini.",
10183
+ "appExternal.roles.actionRemoved": "dihapus",
10184
+ "appExternal.roles.actionUnknown": "Action tidak dikenal",
10185
+ "appExternal.roles.removeAction": "Hapus {name}",
10186
+ "appExternal.roles.actionsRemovedHint": "Action yang bertanda dihapus saat ini tidak tersedia untuk App ini. Jika Action itu tersedia lagi untuk App ini, peran ini memilikinya lagi. Hapus dari peran ini untuk mencegahnya.",
10187
+ "appExternal.roles.actionOwnSystem": "memanggil sistem Anda sendiri",
10188
+ "appExternal.roles.actionsOwnSystemHint": "Action yang bertanda \u201Cmemanggil sistem Anda sendiri\u201D bisa dipakai pada catatan apa pun yang diterima sistem Anda. Aturan data peran ini tidak mempersempitnya. Sistem Anda sendiri yang harus memeriksa bahwa orang itu boleh bertindak atas catatan tersebut.",
10189
+ "appExternal.roles.actionSilentAboutActor": "tidak memberi tahu sistem Anda siapa yang bertindak",
10190
+ "appExternal.roles.actionsSilentAboutActorHint": "Action yang bertanda \u201Ctidak memberi tahu sistem Anda siapa yang bertindak\u201D di-deploy tanpa identitas orangnya, sehingga sistem Anda tidak bisa memeriksa siapa yang meminta. Semua orang dengan peran ini bisa memakainya pada catatan apa pun yang diterima sistem Anda. Minta agar Action itu di-deploy ulang sehingga mengirim siapa yang bertindak pada pencarian catatan maupun pada perubahannya, atau wajibkan persetujuan pada Action itu, atau hapus dari peran ini.",
10191
+ "appExternal.roles.actionsSummary": "Bisa melakukan: {count} Action",
10192
+ "appExternal.roles.actionsSummaryOne": "Bisa melakukan: 1 Action",
10193
+ "appExternal.roles.actionsSummaryNone": "Bisa melakukan: hanya membaca",
10194
+ "appExternal.help.roleActions": "Action yang boleh diajukan orang dengan peran ini. Action didefinisikan di Blueprint; daftar ini menampilkan Action pada tipe catatan yang bisa dibaca workspace ini. Action yang mengubah catatan Blueprint hanya bisa dipakai pada catatan yang boleh dibaca lewat peran yang sama ini, jadi beri peran ini aturan Cakupan data untuk tipe catatan yang diubah tiap Action. Peran yang hanya mencantumkan Action tidak membuat siapa pun bisa memakainya. Action yang memanggil sistem Anda sendiri memerlukan aturan yang sama pada peran ini, tetapi Frontera tidak memeriksa catatan yang disebutnya terhadap data peran ini: sistem Anda sendiri yang harus memeriksa bahwa orang itu boleh bertindak atas catatan tersebut. Aturan itu tetap menentukan apa yang dibaca peran ini di Blueprint dan apa yang boleh diubah Action lain pada tipe catatan tersebut, jadi jangan menambahkan Semua baris hanya untuk mengaktifkan Action yang memanggil sistem Anda sendiri. Jika tidak ada yang dipilih, peran ini hanya membaca data.",
10136
10195
  "appExternal.roles.save": "Simpan peran",
10137
10196
  "appExternal.roles.saved": "Peran disimpan",
10197
+ "appExternal.roles.actionNeedsDataRule": "{action} mengubah {objectType}, tetapi peran ini belum punya aturan Cakupan data untuk {objectType}, jadi belum ada yang bisa memakainya lewat peran ini.",
10198
+ "appExternal.roles.actionNeedsDataRuleMore": "{message} {count} Action lain di peran ini juga belum punya aturan Cakupan data untuk tipe catatan yang diubahnya.",
10199
+ "appExternal.roles.actionNeedsDataRuleMoreOne": "{message} 1 Action lain di peran ini juga belum punya aturan Cakupan data untuk tipe catatan yang diubahnya.",
10138
10200
  "appExternal.roles.saveFailed": "Gagal menyimpan peran",
10139
10201
  "appExternal.roles.empty": "Belum ada peran. Tidak ada yang bisa membaca data sebelum memegang peran.",
10140
10202
  "appExternal.roles.deleteTitle": "Hapus peran {name}?",
@@ -10235,6 +10297,20 @@ var id_default = {
10235
10297
  "appExternal.users.rolesSaved": "Peran diperbarui",
10236
10298
  "appExternal.users.loading": "Memuat App user",
10237
10299
  "appExternal.users.loadFailed": "App user tidak dapat dimuat.",
10300
+ "appExternal.setup.title": "Penyiapan",
10301
+ "appExternal.setup.progress": "{done} dari {total} selesai",
10302
+ "appExternal.setup.todo": "Belum selesai",
10303
+ "appExternal.setup.complete": "Penyiapan selesai. Orang dapat masuk dan membaca data yang diizinkan perannya.",
10304
+ "appExternal.setup.hosting.title": "{external}",
10305
+ "appExternal.setup.hosting.hint": "Aktifkan {external} dan tambahkan setidaknya satu entri di {origins}.",
10306
+ "appExternal.setup.signIn.title": "Proses masuk terhubung",
10307
+ "appExternal.setup.signIn.hint": "Di {audiences}, atur {operator} atau {customer} dengan issuer penyedia identitas Anda, dan biarkan {enabled}.",
10308
+ "appExternal.setup.roleScope.title": "Peran yang dapat membaca data",
10309
+ "appExternal.setup.roleScope.hint": "Di {roles}, tambahkan peran dan beri setidaknya satu aturan data.",
10310
+ "appExternal.setup.roleAssignment.title": "Seseorang mendapat peran",
10311
+ "appExternal.setup.roleAssignment.hint": "Tambahkan kondisi di {who} pada peran yang dapat membaca data, atau beri seseorang peran itu di {users}.",
10312
+ "appExternal.setup.signedIn.title": "Seseorang sudah masuk",
10313
+ "appExternal.setup.signedIn.hint": "Masuk ke App Anda sekali. Setiap orang muncul di {users} setelah pertama kali masuk.",
10238
10314
  "appsGallery.builtin": "Bawaan",
10239
10315
  "appsGallery.builtinChatDescription": "Bekerja dengan Agent yang ditugaskan kepada Anda.",
10240
10316
  "appsGallery.openChat": "Buka Chat",
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { ChevronLeftIcon } from './chunk-CWAOLMFS.js';
3
3
  import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from './chunk-T5SANYSX.js';
4
- import { useIsMobile, useTranslation } from './chunk-LMO5ZVB4.js';
4
+ import { useIsMobile, useTranslation } from './chunk-77VKT67G.js';
5
5
  import { ToolCallItem, ProcessorIcon } from './chunk-QBV7MAFV.js';
6
6
  import { toolKindVerb, getToolMeta, Shimmer, Collapse, ToolGroupReasoningItem, SkillToolItem, DeviceDesktopIcon, WorldSearchIcon, FileTextIcon, useStreamdownPlugins, CircleXIcon, STREAMDOWN_LINK_SAFETY, Folder1Icon, AppIconFrame, AppIcon, Collapsible, CollapsibleTrigger, CollapsibleContent, SquareArrowTopRightIcon, Icon } from './chunk-PKNEC4LJ.js';
7
7
  import { ChevronDownMediumIcon, Button, Skeleton, buttonVariants } from './chunk-UWKO24VT.js';
@@ -1,8 +1,8 @@
1
1
  'use client';
2
2
  import { MagnifyingGlassIcon } from './chunk-X3QVICX7.js';
3
- import { requestPaneFocus, useArtifacts, usePlugins, useCanvasStore, useArtifactStore, useChatOverviewStore, useSourcesEnrichment, sourceKind, useCitationViewer, resolveSourceDisplay, extractDomain, canvasId, StudioDisplayIcon, LayoutDashboardIcon, useAgentPanelStore, SourceFavicon, dedup, useArtifactFileObjectUrl, resolveArtifactIconFormat, artifactFormatIcon, avatarMotionForStream, AGENT_AVATAR_SIZE, getFileCategory, FileThumbnail, formatFileSize, usePathname, artifactFormatSubtitle, artifactCategory, Input, MobileScreenSheet, TooltipTrigger, Tooltip, useChatCapabilities, TooltipContent, processMessageParts, GridSpinner, PanelEdgeRing, ArtifactActionsMenu, DotGrid1x3HorizontalTightIcon, extractCitationsFromSteps, resolvePluginLanguage, getMessageDisplayTimestampValue } from './chunk-UE4KFYFK.js';
3
+ import { requestPaneFocus, useArtifacts, usePlugins, useCanvasStore, useArtifactStore, useChatOverviewStore, useSourcesEnrichment, sourceKind, useCitationViewer, resolveSourceDisplay, extractDomain, canvasId, StudioDisplayIcon, LayoutDashboardIcon, useAgentPanelStore, SourceFavicon, dedup, useArtifactFileObjectUrl, resolveArtifactIconFormat, artifactFormatIcon, avatarMotionForStream, AGENT_AVATAR_SIZE, getFileCategory, FileThumbnail, formatFileSize, usePathname, artifactFormatSubtitle, artifactCategory, Input, MobileScreenSheet, TooltipTrigger, Tooltip, useChatCapabilities, TooltipContent, processMessageParts, GridSpinner, PanelEdgeRing, ArtifactActionsMenu, DotGrid1x3HorizontalTightIcon, extractCitationsFromSteps, resolvePluginLanguage, getMessageDisplayTimestampValue } from './chunk-FVOZO2U3.js';
4
4
  import { Popover, PopoverTrigger, PopoverContent, Sheet, SheetContent, SheetHeader, SheetTitle } from './chunk-T5SANYSX.js';
5
- import { useTranslation, useIsMobile } from './chunk-LMO5ZVB4.js';
5
+ import { useTranslation, useIsMobile } from './chunk-77VKT67G.js';
6
6
  import { Collapsible, CollapsibleTrigger, CollapsibleContent, Shimmer, HoverCard, HoverCardTrigger, HoverCardContent } from './chunk-PKNEC4LJ.js';
7
7
  import { ChevronDownMediumIcon, ScrollArea, Skeleton, Button } from './chunk-UWKO24VT.js';
8
8
  import { Dialog, DialogContent, DialogHeader, DialogTitle, CrossMediumIcon } from './chunk-2P4IEVOQ.js';
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { MagnifyingGlassIcon } from './chunk-X3QVICX7.js';
3
3
  import { Sheet, SheetContent, SheetHeader, SheetTitle, Popover, PopoverTrigger, PopoverContent } from './chunk-T5SANYSX.js';
4
- import { useIsMobile, useTranslation } from './chunk-LMO5ZVB4.js';
4
+ import { useIsMobile, useTranslation } from './chunk-77VKT67G.js';
5
5
  import { CrossMediumIcon } from './chunk-2P4IEVOQ.js';
6
6
  import { AgentAvatar } from './chunk-PUMRNN3R.js';
7
7
  import { cn, Checkmark1Icon } from './chunk-LGVMMBL3.js';
@@ -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, CircleCheckIcon, agentRoutineKeys, LoaderIcon, useOptionalAgentsContext, avatarMotionForStream, AGENT_AVATAR_SIZE } from './chunk-UE4KFYFK.js';
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, CircleCheckIcon, agentRoutineKeys, LoaderIcon, useOptionalAgentsContext, avatarMotionForStream, AGENT_AVATAR_SIZE } from './chunk-FVOZO2U3.js';
3
3
  import { Sheet, SheetTrigger, SheetContent, SheetHeader, SheetTitle, SheetDescription, Popover, PopoverTrigger, PopoverContent } from './chunk-T5SANYSX.js';
4
- import { useIsMobile, useTranslation } from './chunk-LMO5ZVB4.js';
4
+ import { useIsMobile, useTranslation } from './chunk-77VKT67G.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';
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { useTranslation } from './chunk-LMO5ZVB4.js';
2
+ import { useTranslation } from './chunk-77VKT67G.js';
3
3
  import { Skeleton } from './chunk-UWKO24VT.js';
4
4
  import { useRef, useState, useEffect } from 'react';
5
5
  import { jsx, jsxs } from 'react/jsx-runtime';
package/dist/header.js CHANGED
@@ -1,10 +1,10 @@
1
1
  'use client';
2
- export { ChatHeader, ChatHeaderActions } from './chunk-N6O25UEO.js';
2
+ export { ChatHeader, ChatHeaderActions } from './chunk-NELM2C7A.js';
3
3
  import './chunk-X3QVICX7.js';
4
- import './chunk-UE4KFYFK.js';
4
+ import './chunk-FVOZO2U3.js';
5
5
  import './chunk-CWAOLMFS.js';
6
6
  import './chunk-T5SANYSX.js';
7
- import './chunk-LMO5ZVB4.js';
7
+ import './chunk-77VKT67G.js';
8
8
  import './chunk-QBV7MAFV.js';
9
9
  import './chunk-PKNEC4LJ.js';
10
10
  import './chunk-UWKO24VT.js';
package/dist/message.js CHANGED
@@ -1,9 +1,9 @@
1
1
  'use client';
2
- export { Message, Thinking } from './chunk-GYFPAGMQ.js';
3
- import './chunk-UE4KFYFK.js';
2
+ export { Message, Thinking } from './chunk-UM2N6GYB.js';
3
+ import './chunk-FVOZO2U3.js';
4
4
  import './chunk-CWAOLMFS.js';
5
5
  import './chunk-T5SANYSX.js';
6
- import './chunk-LMO5ZVB4.js';
6
+ import './chunk-77VKT67G.js';
7
7
  import './chunk-QBV7MAFV.js';
8
8
  import './chunk-PKNEC4LJ.js';
9
9
  import './chunk-UWKO24VT.js';
@@ -1,8 +1,8 @@
1
1
  'use client';
2
- export { DEFAULT_SHORTCUTS, NewSessionPrompt, buildDefaultShortcuts } from './chunk-W25JFW23.js';
2
+ export { DEFAULT_SHORTCUTS, NewSessionPrompt, buildDefaultShortcuts } from './chunk-P5IRWWV3.js';
3
3
  import './chunk-X3QVICX7.js';
4
4
  import './chunk-T5SANYSX.js';
5
- import './chunk-LMO5ZVB4.js';
5
+ import './chunk-77VKT67G.js';
6
6
  import './chunk-2P4IEVOQ.js';
7
7
  import './chunk-PUMRNN3R.js';
8
8
  import './chunk-LGVMMBL3.js';
@@ -1,8 +1,8 @@
1
1
  'use client';
2
2
  import { DeckNotesCard, deckOwnsArrowKeys } from './chunk-4FRTPVJT.js';
3
- import { resolveStageWidth, zoomPercent, DECK_ZOOM_LEVELS, LazyThumb, ArtifactSkeleton } from './chunk-BVUZC3CV.js';
3
+ import { resolveStageWidth, zoomPercent, DECK_ZOOM_LEVELS, LazyThumb, ArtifactSkeleton } from './chunk-UP3MAXGR.js';
4
4
  import { ChevronLeftIcon } from './chunk-CWAOLMFS.js';
5
- import { useTranslation, useIsMobile } from './chunk-LMO5ZVB4.js';
5
+ import { useTranslation, useIsMobile } from './chunk-77VKT67G.js';
6
6
  import { Button, ChevronDownMediumIcon, ScrollArea } from './chunk-UWKO24VT.js';
7
7
  import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, ChevronRightIcon } from './chunk-C3HW5S2Z.js';
8
8
  import { cn } from './chunk-LGVMMBL3.js';
@@ -1,7 +1,7 @@
1
1
  'use client';
2
- import { zoomPercent, DECK_ZOOM_LEVELS, ArtifactSkeleton, LazyThumb } from './chunk-BVUZC3CV.js';
2
+ import { zoomPercent, DECK_ZOOM_LEVELS, ArtifactSkeleton, LazyThumb } from './chunk-UP3MAXGR.js';
3
3
  import { ChevronLeftIcon } from './chunk-CWAOLMFS.js';
4
- import { useTranslation, useIsMobile } from './chunk-LMO5ZVB4.js';
4
+ import { useTranslation, useIsMobile } from './chunk-77VKT67G.js';
5
5
  import { Button, ChevronDownMediumIcon, ScrollArea } from './chunk-UWKO24VT.js';
6
6
  import { ChevronRightIcon, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuRadioGroup, DropdownMenuRadioItem } from './chunk-C3HW5S2Z.js';
7
7
  import { cn } from './chunk-LGVMMBL3.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@frontera-sdk/chat-ui",
3
- "version": "1.50.84",
3
+ "version": "1.51.1",
4
4
  "description": "Ready-made React components for embedding a Frontera agent conversation — message rendering, tool calls, artifacts and composer.",
5
5
  "keywords": [
6
6
  "frontera",
@@ -89,8 +89,8 @@
89
89
  },
90
90
  "dependencies": {
91
91
  "@elysiajs/eden": "^1.4.9",
92
- "@frontera-sdk/chat": "1.50.84",
93
- "@frontera-sdk/core": "1.50.84",
92
+ "@frontera-sdk/chat": "1.51.1",
93
+ "@frontera-sdk/core": "1.51.1",
94
94
  "@radix-ui/react-alert-dialog": "^1.1.23",
95
95
  "@radix-ui/react-collapsible": "^1.1.12",
96
96
  "@radix-ui/react-compose-refs": "^1.1.5",