@frontera-sdk/chat-ui 1.53.22 → 1.53.24

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,20 +1,20 @@
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-JJ3GBIGA.js';
5
- import { NewSessionPrompt, keepCaretOnTap } from './chunk-UQDTJM5H.js';
4
+ import { ArtifactSkeleton, resolveStageWidth, zoomPercent, DECK_ZOOM_LEVELS, LazyThumb } from './chunk-C77BEH5Y.js';
5
+ import { NewSessionPrompt, keepCaretOnTap } from './chunk-W4WCRV4O.js';
6
6
  import { PendingCards } from './chunk-A4GIIAMQ.js';
7
7
  import { themeToStyle } from './chunk-6HYPVNVA.js';
8
8
  import { useChatAgents } from './chunk-NDU6ERVT.js';
9
9
  import { subjectOfChatToken, capabilitiesOfChatToken } from './chunk-CCVPZVFK.js';
10
10
  import { useChatCredential } from './chunk-6BCUAPW3.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-ZBWIRN76.js';
13
- import { dynamic, useChatStreamStore, useComposerStore, Message, Thinking, setPendingFiles, usePersonConfirmations, unshownPendingConfirmations, ConversationConfirmationCard, 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-SPSLMHUU.js';
14
- import { Textarea, resolveChatHost, artifactFormatIcon, BookIcon, useAgentRoster, ShieldCheckIcon, useArtifactStore, useCanvasStore, useChatOverviewStore, setSdkConversationPath, setSdkDarkMode, AgentsProvider, PluginProvider, WorkspaceProvider, TooltipProvider, ChatHostProvider, getPersonConfirmation, isToolPart, getToolState, getToolName, getToolInput, sourceKind, extractDomain, CitationViewerContext, MarkdownRenderer, ConnectRunnerContext, usePathname, useChatSurfaceProvider, 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, useChatCapabilityEnabled, useChatOptInEnabled, useChatHost, useSessionPendingApprovals, tableToCsv, tableToXlsx, tableToMarkdown, DropdownMenu, DropdownMenuTrigger, StyledDropdownMenuContent, StyledDropdownMenuItem, useArtifactVersions, useClient, unwrapData, authFetch, getBearerHeadersForApi, EyeOpenIcon, EyeSlashIcon, useRestoreArtifactVersion, ZoomableImage, ChatImageLightbox, useDownloadArtifact, useArtifactFileBytes, useArtifactPreviewFileObjectUrl, useArtifactVersionPreviewFileObjectUrl, errorText, SpreadsheetIcon, FilePdfIcon, useOptionalWorkspaceContext, useAgentConnectionStatus, useArtifacts, useSession, useWorkspaceContext, useConversationDesktopStatus, isRequestHumanTool, appsKeys, 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-4OL5C4O4.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-NJRVXDFH.js';
13
+ import { dynamic, useChatStreamStore, useComposerStore, Message, Thinking, setPendingFiles, usePersonConfirmations, unshownPendingConfirmations, ConversationConfirmationCard, 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-K65ARILG.js';
14
+ import { Textarea, resolveChatHost, artifactFormatIcon, BookIcon, useAgentRoster, ShieldCheckIcon, useArtifactStore, useCanvasStore, useChatOverviewStore, setSdkConversationPath, setSdkDarkMode, AgentsProvider, PluginProvider, WorkspaceProvider, TooltipProvider, ChatHostProvider, getPersonConfirmation, isToolPart, getToolState, getToolName, getToolInput, sourceKind, extractDomain, CitationViewerContext, MarkdownRenderer, ConnectRunnerContext, usePathname, useChatSurfaceProvider, 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, useChatCapabilityEnabled, useChatOptInEnabled, useChatHost, useSessionPendingApprovals, tableToCsv, tableToXlsx, tableToMarkdown, DropdownMenu, DropdownMenuTrigger, StyledDropdownMenuContent, StyledDropdownMenuItem, useArtifactVersions, useClient, unwrapData, authFetch, getBearerHeadersForApi, EyeOpenIcon, EyeSlashIcon, useRestoreArtifactVersion, ZoomableImage, ChatImageLightbox, useDownloadArtifact, useArtifactFileBytes, useArtifactPreviewFileObjectUrl, useArtifactVersionPreviewFileObjectUrl, errorText, SpreadsheetIcon, FilePdfIcon, useOptionalWorkspaceContext, useAgentConnectionStatus, useArtifacts, useSession, useWorkspaceContext, useConversationDesktopStatus, isRequestHumanTool, appsKeys, 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-ID6ZQJOQ.js';
15
15
  import { ChevronLeftIcon } from './chunk-CWAOLMFS.js';
16
16
  import { Popover, PopoverTrigger, PopoverContent, Sheet, SheetContent, SheetHeader, SheetTitle, SheetDescription } from './chunk-RQSMCGBR.js';
17
- import { MOBILE_BREAKPOINT, useIsMobile, I18nProvider, useTranslation } from './chunk-VMZCASGI.js';
17
+ import { MOBILE_BREAKPOINT, useIsMobile, I18nProvider, useTranslation } from './chunk-L5Y4JFJU.js';
18
18
  import './chunk-R3ONYPUB.js';
19
19
  import { AppIcon, frontera_icon_default, PhotoIcon, Folder1Icon, FileTextIcon, describeToolRow, SquareArrowTopRightIcon, ClipboardIcon, getToolMeta, useStreamdownPlugins, AppIconFrame, MessageResponse } from './chunk-K7AIK7TA.js';
20
20
  import { Skeleton, Button, ScrollArea, ChevronDownMediumIcon, buttonVariants } from './chunk-UWKO24VT.js';
@@ -27,7 +27,7 @@ import { cn, PortalContainerContext, Checkmark1Icon } from './chunk-LGVMMBL3.js'
27
27
  import { ChatClientContext } from './chunk-6JLWE7M3.js';
28
28
  import { __commonJS, __export, __toESM } from './chunk-PR4QN5HX.js';
29
29
  import * as React from 'react';
30
- import React__default, { createContext, forwardRef, useState, useRef, useCallback, useMemo, useEffect, useImperativeHandle, useContext, useDebugValue, createRef, memo, createElement, useLayoutEffect, version, Activity, Component, useSyncExternalStore as useSyncExternalStore$1, Fragment as Fragment$1 } from 'react';
30
+ import React__default, { createContext, forwardRef, useState, useRef, useImperativeHandle, useCallback, useEffect, useMemo, useContext, useDebugValue, createRef, memo, createElement, useLayoutEffect, version, Activity, Component, useSyncExternalStore as useSyncExternalStore$1, Fragment as Fragment$1 } from 'react';
31
31
  import { useChat } from '@ai-sdk/react';
32
32
  import { createChatTransport, OPENING_MESSAGE_ID } from '@frontera-sdk/chat/transport';
33
33
  import { runAppConnection, completeRedirectedConnection } from '@frontera-sdk/chat/connect-popup';
@@ -42397,7 +42397,7 @@ function SheetEditor({ content, onSave, readOnly = false }) {
42397
42397
  );
42398
42398
  }
42399
42399
  var PdfDocumentViewInner = dynamic(
42400
- () => import('./pdf-document-view-inner-6FLLMWPJ.js'),
42400
+ () => import('./pdf-document-view-inner-LFBF42H3.js'),
42401
42401
  {
42402
42402
  ssr: false,
42403
42403
  loading: () => /* @__PURE__ */ jsx(ArtifactSkeleton, { format: "pdf" })
@@ -42408,7 +42408,8 @@ function PdfDocumentView({
42408
42408
  title,
42409
42409
  label,
42410
42410
  versionSlot,
42411
- page
42411
+ page,
42412
+ pageKey
42412
42413
  }) {
42413
42414
  const [failedFileUrl, setFailedFileUrl] = useState(null);
42414
42415
  const failed = failedFileUrl === fileUrl;
@@ -42439,7 +42440,8 @@ function PdfDocumentView({
42439
42440
  label,
42440
42441
  onError: () => setFailedFileUrl(fileUrl),
42441
42442
  versionSlot,
42442
- page
42443
+ page,
42444
+ pageKey
42443
42445
  }
42444
42446
  );
42445
42447
  }
@@ -43216,11 +43218,11 @@ function HtmlDeckView({ content, inChat = false, versionSlot }) {
43216
43218
  !present && inChat && /* @__PURE__ */ jsx(DeckEditPanel, { currentIndex: sel, currentHtml: slides[sel]?.html ?? "" })
43217
43219
  ] });
43218
43220
  }
43219
- var Inner = dynamic(() => import('./pdf-deck-view-inner-7LFNDF6P.js'), {
43221
+ var Inner = dynamic(() => import('./pdf-deck-view-inner-3GCOBWZJ.js'), {
43220
43222
  ssr: false,
43221
43223
  loading: () => /* @__PURE__ */ jsx(ArtifactSkeleton, { format: "htmldeck" })
43222
43224
  });
43223
- function PdfDeckView({ fileUrl, title, label, notes, page }) {
43225
+ function PdfDeckView({ fileUrl, title, label, notes, page, pageKey, textLayer }) {
43224
43226
  const [failedFileUrl, setFailedFileUrl] = useState(null);
43225
43227
  if (failedFileUrl === fileUrl) {
43226
43228
  return /* @__PURE__ */ jsx("div", { className: "h-full min-h-0 overflow-y-auto scrollbar bg-muted/30", children: /* @__PURE__ */ jsx(
@@ -43238,6 +43240,8 @@ function PdfDeckView({ fileUrl, title, label, notes, page }) {
43238
43240
  label,
43239
43241
  notes,
43240
43242
  page,
43243
+ pageKey,
43244
+ textLayer,
43241
43245
  onError: () => setFailedFileUrl(fileUrl)
43242
43246
  },
43243
43247
  fileUrl
@@ -43666,6 +43670,7 @@ function TextFileArtifactView({
43666
43670
  {
43667
43671
  value: "preview",
43668
43672
  className: "mt-0 min-h-0 flex-1 overflow-x-hidden overflow-y-auto scrollbar",
43673
+ "data-text-root": "",
43669
43674
  children: /* @__PURE__ */ jsx(MarkdownFilePreview, { content: preview.content })
43670
43675
  }
43671
43676
  ),
@@ -43674,6 +43679,7 @@ function TextFileArtifactView({
43674
43679
  {
43675
43680
  value: "code",
43676
43681
  className: "mt-0 min-h-0 flex-1 overflow-x-hidden overflow-y-auto scrollbar",
43682
+ "data-text-root": "",
43677
43683
  children: /* @__PURE__ */ jsx(
43678
43684
  SyntaxHighlightedFile,
43679
43685
  {
@@ -43683,7 +43689,7 @@ function TextFileArtifactView({
43683
43689
  )
43684
43690
  }
43685
43691
  )
43686
- ] }) : /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-x-hidden overflow-y-auto scrollbar", children: isPlainTextLanguage(meta.language) ? /* @__PURE__ */ jsx("pre", { className: "min-h-full w-full max-w-full whitespace-pre-wrap px-4 py-2 font-mono text-[0.8125rem] leading-6 text-foreground [overflow-wrap:anywhere]", children: /* @__PURE__ */ jsx("code", { className: "block w-full min-w-0 whitespace-pre-wrap [overflow-wrap:anywhere]", children: preview.content }) }) : /* @__PURE__ */ jsx(
43692
+ ] }) : /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-x-hidden overflow-y-auto scrollbar", "data-text-root": "", children: isPlainTextLanguage(meta.language) ? /* @__PURE__ */ jsx("pre", { className: "min-h-full w-full max-w-full whitespace-pre-wrap px-4 py-2 font-mono text-[0.8125rem] leading-6 text-foreground [overflow-wrap:anywhere]", children: /* @__PURE__ */ jsx("code", { className: "block w-full min-w-0 whitespace-pre-wrap [overflow-wrap:anywhere]", children: preview.content }) }) : /* @__PURE__ */ jsx(
43687
43693
  SyntaxHighlightedFile,
43688
43694
  {
43689
43695
  content: preview.content,
@@ -63625,6 +63631,92 @@ function MentionNodeView({ node, extension: extension2 }) {
63625
63631
  }
63626
63632
  ) });
63627
63633
  }
63634
+ var MentionListFrame = forwardRef(function MentionListFrame2({ children }, ref) {
63635
+ const scrollRef = useRef(null);
63636
+ useImperativeHandle(ref, () => scrollRef.current, []);
63637
+ const [edges, setEdges] = useState({ top: false, bottom: false });
63638
+ const measureEdges = useCallback(() => {
63639
+ const el = scrollRef.current;
63640
+ if (!el) return;
63641
+ const max = el.scrollHeight - el.clientHeight;
63642
+ const next = max <= 1 ? { top: false, bottom: false } : { top: el.scrollTop > 1, bottom: el.scrollTop < max - 1 };
63643
+ setEdges(
63644
+ (prev) => prev.top === next.top && prev.bottom === next.bottom ? prev : next
63645
+ );
63646
+ }, []);
63647
+ useEffect(measureEdges);
63648
+ useEffect(() => {
63649
+ const el = scrollRef.current;
63650
+ if (!el) return;
63651
+ const ro = new ResizeObserver(measureEdges);
63652
+ ro.observe(el);
63653
+ return () => ro.disconnect();
63654
+ }, [measureEdges]);
63655
+ return /* @__PURE__ */ jsxs("div", { className: "relative w-full overflow-hidden rounded-2xl border border-border bg-surface-overlay shadow-md", children: [
63656
+ /* @__PURE__ */ jsx(
63657
+ "div",
63658
+ {
63659
+ ref: scrollRef,
63660
+ onScroll: measureEdges,
63661
+ className: "overflow-y-auto scrollbar p-1.5",
63662
+ style: { maxHeight: "var(--mention-list-max, 20rem)" },
63663
+ children
63664
+ }
63665
+ ),
63666
+ edges.top && /* @__PURE__ */ jsx(
63667
+ "div",
63668
+ {
63669
+ "aria-hidden": true,
63670
+ className: "pointer-events-none absolute inset-x-0 top-0 z-10 h-12 bg-linear-to-b from-surface-overlay to-transparent"
63671
+ }
63672
+ ),
63673
+ edges.bottom && /* @__PURE__ */ jsx(
63674
+ "div",
63675
+ {
63676
+ "aria-hidden": true,
63677
+ className: "pointer-events-none absolute inset-x-0 bottom-0 z-10 h-12 bg-linear-to-t from-surface-overlay to-transparent"
63678
+ }
63679
+ )
63680
+ ] });
63681
+ });
63682
+ function useMentionListKeys(ref, rows, pick) {
63683
+ const [active, setActive] = useState(0);
63684
+ const activeRef = useRef(null);
63685
+ useEffect(() => {
63686
+ setActive(0);
63687
+ }, [rows]);
63688
+ useEffect(() => {
63689
+ activeRef.current?.scrollIntoView({ block: "nearest" });
63690
+ }, [active]);
63691
+ useImperativeHandle(ref, () => ({
63692
+ onKeyDown({ event }) {
63693
+ const last = rows.length - 1;
63694
+ if (event.key === "ArrowDown") {
63695
+ setActive((i) => Math.min(last, i + 1));
63696
+ return true;
63697
+ }
63698
+ if (event.key === "ArrowUp") {
63699
+ setActive((i) => Math.max(0, i - 1));
63700
+ return true;
63701
+ }
63702
+ if (event.key === "Home") {
63703
+ setActive(0);
63704
+ return true;
63705
+ }
63706
+ if (event.key === "End") {
63707
+ setActive(Math.max(0, last));
63708
+ return true;
63709
+ }
63710
+ if (event.key === "Enter" || event.key === "Tab") {
63711
+ const row = rows[active];
63712
+ if (row) pick(row);
63713
+ return true;
63714
+ }
63715
+ return false;
63716
+ }
63717
+ }));
63718
+ return { active, setActive, activeRef };
63719
+ }
63628
63720
  var DOMAIN2 = "meta";
63629
63721
  var MANIFEST_FETCH_TIMEOUT_MS = 2e4;
63630
63722
  var metaKeys = {
@@ -64892,19 +64984,6 @@ function MentionEmpty({ query }) {
64892
64984
  }
64893
64985
  var MentionMenu = forwardRef(
64894
64986
  function MentionMenu2({ rawGroups, query, kinds, commands, asCommands, command: command5, showGroupTitles }, ref) {
64895
- const [selectedIdx, setSelectedIdx] = useState(0);
64896
- const activeRef = useRef(null);
64897
- const scrollRef = useRef(null);
64898
- const [edges, setEdges] = useState({ top: false, bottom: false });
64899
- const measureEdges = useCallback(() => {
64900
- const el = scrollRef.current;
64901
- if (!el) return;
64902
- const max = el.scrollHeight - el.clientHeight;
64903
- const next = max <= 1 ? { top: false, bottom: false } : { top: el.scrollTop > 1, bottom: el.scrollTop < max - 1 };
64904
- setEdges(
64905
- (prev) => prev.top === next.top && prev.bottom === next.bottom ? prev : next
64906
- );
64907
- }, []);
64908
64987
  const groups = useMemo(() => {
64909
64988
  const ranked = filterMentionGroups(rawGroups, query, { kinds, commands });
64910
64989
  return query.trim() ? flattenMentionGroups(ranked) : ranked;
@@ -64913,114 +64992,49 @@ var MentionMenu = forwardRef(
64913
64992
  () => groups.flatMap((g) => g.items.filter((i) => !i.unavailable)),
64914
64993
  [groups]
64915
64994
  );
64916
- useEffect(() => {
64917
- setSelectedIdx(0);
64918
- }, [groups]);
64919
- useEffect(() => {
64920
- activeRef.current?.scrollIntoView({ block: "nearest" });
64921
- }, [selectedIdx]);
64922
- useEffect(measureEdges, [measureEdges, groups, selectedIdx]);
64923
- useEffect(() => {
64924
- const el = scrollRef.current;
64925
- if (!el) return;
64926
- const ro = new ResizeObserver(measureEdges);
64927
- ro.observe(el);
64928
- return () => ro.disconnect();
64929
- }, [measureEdges]);
64930
- useImperativeHandle(ref, () => ({
64931
- onKeyDown({ event }) {
64932
- const last = flat.length - 1;
64933
- if (event.key === "ArrowDown") {
64934
- setSelectedIdx((i) => Math.min(last, i + 1));
64935
- return true;
64936
- }
64937
- if (event.key === "ArrowUp") {
64938
- setSelectedIdx((i) => Math.max(0, i - 1));
64939
- return true;
64940
- }
64941
- if (event.key === "Home") {
64942
- setSelectedIdx(0);
64943
- return true;
64944
- }
64945
- if (event.key === "End") {
64946
- setSelectedIdx(Math.max(0, last));
64947
- return true;
64948
- }
64949
- if (event.key === "Enter" || event.key === "Tab") {
64950
- const item = flat[selectedIdx];
64951
- if (item) command5(item);
64952
- return true;
64953
- }
64954
- return false;
64955
- }
64956
- }));
64995
+ const { active: selectedIdx, setActive: setSelectedIdx, activeRef } = useMentionListKeys(ref, flat, command5);
64957
64996
  const anyLoading = groups.some((g) => g.loading);
64958
64997
  const hasRows = groups.some((g) => g.items.length > 0);
64959
- return /* @__PURE__ */ jsxs("div", { className: "relative w-full overflow-hidden rounded-2xl border border-border bg-surface-overlay shadow-md", children: [
64960
- /* @__PURE__ */ jsx(
64961
- "div",
64962
- {
64963
- ref: scrollRef,
64964
- onScroll: measureEdges,
64965
- className: "overflow-y-auto scrollbar p-1.5",
64966
- style: { maxHeight: "var(--mention-list-max, 20rem)" },
64967
- children: !hasRows && !anyLoading ? /* @__PURE__ */ jsx(MentionEmpty, { query }) : groups.map((g, groupIndex) => /* @__PURE__ */ jsxs("div", { children: [
64968
- showGroupTitles && g.title && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 px-2.5 pb-0.5 pt-1.5", children: [
64969
- /* @__PURE__ */ jsx("p", { className: "text-xs font-medium text-muted-foreground", children: g.title }),
64970
- g.loading && /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground/70", children: "searching\u2026" })
64971
- ] }),
64972
- g.items.map((item) => {
64973
- const idx = item.unavailable ? -1 : flat.indexOf(item);
64974
- return /* @__PURE__ */ jsx(
64975
- MentionRow,
64976
- {
64977
- item,
64978
- asCommand: asCommands && item.ref?.kind === "skill",
64979
- isActive: idx >= 0 && idx === selectedIdx,
64980
- activeRef: idx === selectedIdx ? activeRef : void 0,
64981
- onHover: () => idx >= 0 && setSelectedIdx(idx),
64982
- onSelect: () => command5(item)
64983
- },
64984
- item.id
64985
- );
64986
- }),
64987
- g.items.length === 0 && g.loading && [0, 1, 2].map((i) => /* @__PURE__ */ jsxs(
64988
- "div",
64989
- {
64990
- className: "flex items-center gap-2 px-2.5 py-1.5",
64991
- "aria-hidden": true,
64992
- children: [
64993
- /* @__PURE__ */ jsx(Skeleton, { className: "size-4 shrink-0 rounded-sm" }),
64994
- /* @__PURE__ */ jsx(
64995
- Skeleton,
64996
- {
64997
- className: "h-3 rounded-sm",
64998
- style: { width: `${[38, 52, 30][i]}%` }
64999
- }
65000
- )
65001
- ]
65002
- },
65003
- `skeleton-${i}`
65004
- )),
65005
- groupIndex < groups.length - 1 && /* @__PURE__ */ jsx("div", { className: "h-1" })
65006
- ] }, g.key))
65007
- }
65008
- ),
65009
- edges.top && /* @__PURE__ */ jsx(
65010
- "div",
65011
- {
65012
- "aria-hidden": true,
65013
- className: "pointer-events-none absolute inset-x-0 top-0 z-10 h-12 bg-linear-to-b from-surface-overlay to-transparent"
65014
- }
65015
- ),
65016
- edges.bottom && /* @__PURE__ */ jsx(
64998
+ return /* @__PURE__ */ jsx(MentionListFrame, { children: !hasRows && !anyLoading ? /* @__PURE__ */ jsx(MentionEmpty, { query }) : groups.map((g, groupIndex) => /* @__PURE__ */ jsxs("div", { children: [
64999
+ showGroupTitles && g.title && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 px-2.5 pb-0.5 pt-1.5", children: [
65000
+ /* @__PURE__ */ jsx("p", { className: "text-xs font-medium text-muted-foreground", children: g.title }),
65001
+ g.loading && /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground/70", children: "searching\u2026" })
65002
+ ] }),
65003
+ g.items.map((item) => {
65004
+ const idx = item.unavailable ? -1 : flat.indexOf(item);
65005
+ return /* @__PURE__ */ jsx(
65006
+ MentionRow,
65007
+ {
65008
+ item,
65009
+ asCommand: asCommands && item.ref?.kind === "skill",
65010
+ isActive: idx >= 0 && idx === selectedIdx,
65011
+ activeRef: idx === selectedIdx ? activeRef : void 0,
65012
+ onHover: () => idx >= 0 && setSelectedIdx(idx),
65013
+ onSelect: () => command5(item)
65014
+ },
65015
+ item.id
65016
+ );
65017
+ }),
65018
+ g.items.length === 0 && g.loading && [0, 1, 2].map((i) => /* @__PURE__ */ jsxs(
65017
65019
  "div",
65018
65020
  {
65021
+ className: "flex items-center gap-2 px-2.5 py-1.5",
65019
65022
  "aria-hidden": true,
65020
- className: "pointer-events-none absolute inset-x-0 bottom-0 z-10 h-12 bg-linear-to-t from-surface-overlay to-transparent"
65021
- }
65022
- )
65023
- ] });
65023
+ children: [
65024
+ /* @__PURE__ */ jsx(Skeleton, { className: "size-4 shrink-0 rounded-sm" }),
65025
+ /* @__PURE__ */ jsx(
65026
+ Skeleton,
65027
+ {
65028
+ className: "h-3 rounded-sm",
65029
+ style: { width: `${[38, 52, 30][i]}%` }
65030
+ }
65031
+ )
65032
+ ]
65033
+ },
65034
+ `skeleton-${i}`
65035
+ )),
65036
+ groupIndex < groups.length - 1 && /* @__PURE__ */ jsx("div", { className: "h-1" })
65037
+ ] }, g.key)) });
65024
65038
  }
65025
65039
  );
65026
65040
 
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { useTranslation } from './chunk-VMZCASGI.js';
2
+ import { useTranslation } from './chunk-L5Y4JFJU.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';
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { ChevronLeftIcon } from './chunk-CWAOLMFS.js';
3
3
  import { MagnifyingGlassIcon, Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from './chunk-RQSMCGBR.js';
4
- import { useIsMobile, useTranslation } from './chunk-VMZCASGI.js';
4
+ import { useIsMobile, useTranslation } from './chunk-L5Y4JFJU.js';
5
5
  import { ToolCallItem, ProcessorIcon } from './chunk-R3ONYPUB.js';
6
6
  import { describeToolRow, toolKindLabel, getToolMeta, Shimmer, Collapse, ToolGroupReasoningItem, SkillToolItem, DeviceDesktopIcon, WorldSearchIcon, FileTextIcon, useStreamdownPlugins, CircleXIcon, STREAMDOWN_LINK_SAFETY, Folder1Icon, AppIconFrame, AppIcon, Collapsible, CollapsibleTrigger, CollapsibleContent, SquareArrowTopRightIcon, Icon } from './chunk-K7AIK7TA.js';
7
7
  import { ChevronDownMediumIcon, Button, Skeleton, buttonVariants } from './chunk-UWKO24VT.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, useCitedDocument, useChatOverviewStore, dedup, extractDomain, sourceKind, SourceFavicon, Input, exportDocumentPdf, FilePdfIcon, StudioDisplayIcon, WorldIcon, MessageStepsGroup, getToolState, getToolInput, getToolErrorText, useChatOptInEnabled, ArrowRightIcon, formatFileSize, FileThumbnail, attachmentFileOf, MobileScreenSheet, useAgentHistorySource, treatyErrorMessage, useRouter, useBasePath, useAgentPanelStore, AgentRoutineForm, getFileCategory, unwrap, unwrapData, unwrapDataDeep, formatDecisionTime, DecisionCard, LoaderIcon, formatRelativeTime, CircleCheckIcon, agentRoutineKeys, useOptionalAgentsContext, avatarMotionForStream, AGENT_AVATAR_SIZE } from './chunk-4OL5C4O4.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, useCitedDocument, useChatOverviewStore, dedup, extractDomain, sourceKind, SourceFavicon, Input, exportDocumentPdf, FilePdfIcon, StudioDisplayIcon, WorldIcon, MessageStepsGroup, getToolState, getToolInput, getToolErrorText, useChatOptInEnabled, ArrowRightIcon, formatFileSize, FileThumbnail, attachmentFileOf, MobileScreenSheet, useAgentHistorySource, treatyErrorMessage, useRouter, useBasePath, useAgentPanelStore, AgentRoutineForm, getFileCategory, unwrap, unwrapData, unwrapDataDeep, formatDecisionTime, DecisionCard, LoaderIcon, formatRelativeTime, CircleCheckIcon, agentRoutineKeys, useOptionalAgentsContext, avatarMotionForStream, AGENT_AVATAR_SIZE } from './chunk-ID6ZQJOQ.js';
3
3
  import { Sheet, SheetTrigger, SheetContent, SheetHeader, SheetTitle, SheetDescription, Popover, PopoverTrigger, PopoverContent } from './chunk-RQSMCGBR.js';
4
- import { useIsMobile, useTranslation } from './chunk-VMZCASGI.js';
4
+ import { useIsMobile, useTranslation } from './chunk-L5Y4JFJU.js';
5
5
  import { MessageToolbar, MessageResponse, SquareArrowTopRightIcon, FileTextIcon, Shimmer, ClipboardIcon, Message, MessageContent, PencilIcon, deferDuringLayoutMotion, HoverCard, HoverCardTrigger, HoverCardContent, Collapse, Icon, CircleXIcon, ClockIcon } from './chunk-K7AIK7TA.js';
6
6
  import { ChevronDownMediumIcon, Button, ScrollArea, Skeleton } from './chunk-UWKO24VT.js';
7
7
  import { CrossMediumIcon } from './chunk-37WYG6VG.js';
@@ -1350,7 +1350,6 @@ var en_default = {
1350
1350
  "admin.knowledge.assistant.charactersMany": "{count} characters",
1351
1351
  "admin.knowledge.assistant.expand": "Expand",
1352
1352
  "admin.knowledge.assistant.settings": "Settings",
1353
- "admin.knowledge.assistant.keepTextShort": "Keep questions and answers",
1354
1353
  "admin.knowledge.assistant.noModelsShort": "No models yet",
1355
1354
  "admin.knowledge.preview.title": "Try the assistant",
1356
1355
  "admin.knowledge.preview.button": "Preview",
@@ -1389,10 +1388,6 @@ var en_default = {
1389
1388
  "admin.knowledge.runs.figures.callsOne": "{count} model call",
1390
1389
  "admin.knowledge.runs.figures.callsMany": "{count} model calls",
1391
1390
  "admin.knowledge.runs.figures.tokens": "{count} tokens",
1392
- "admin.knowledge.assistant.keepText": "Keep questions and answers in traces",
1393
- "admin.knowledge.assistant.keepTextHint": "Off: a trace keeps how each answer was made (its steps, time and cost), not the question or the answer. On: both are kept for 30 days. Your tries always keep their text for 14 days.",
1394
- "admin.knowledge.assistant.keepTextOn": "Questions and answers are kept in traces.",
1395
- "admin.knowledge.assistant.keepTextOff": "Questions and answers are no longer kept in traces.",
1396
1391
  "admin.knowledge.traces.loadFailed": "The traces could not be loaded.",
1397
1392
  "admin.knowledge.traces.times.title": "Search answers",
1398
1393
  "admin.knowledge.traces.times.noTimes": "No times in this period",
@@ -1654,8 +1649,6 @@ var en_default = {
1654
1649
  "admin.knowledge.glance.baseTotal.readingUsd": "Total reading cost",
1655
1650
  "admin.knowledge.glance.usageLink": "See Usage",
1656
1651
  "admin.knowledge.glance.loadFailed": "Knowledge figures could not be loaded.",
1657
- "admin.knowledge.activity.intro": "The work Knowledge does in the background: checking, reading, previewing, indexing and removing files, and keeping search up to date. A file's name shows only where you can read the file.",
1658
- "admin.knowledge.activity.introManaged": "The background work on the knowledge bases you manage: syncing their sources, and checking, reading, indexing and removing their files. A file's name shows only where you can read the file.",
1659
1652
  "admin.knowledge.activity.notAllowed": "Activity here shows the work on the knowledge bases you manage, and you don't manage one from this place. Ask whoever manages the knowledge base, or an organization owner or admin.",
1660
1653
  "admin.knowledge.activity.syncHistoryOf": "Sync history of {source}",
1661
1654
  "admin.knowledge.activity.totalOne": "1 job",
@@ -1710,7 +1703,6 @@ var en_default = {
1710
1703
  "admin.knowledge.activity.progress.passages": "Embedding passages: {done} of {total}",
1711
1704
  "admin.knowledge.activity.progress.files": "{done} of {total} files moved",
1712
1705
  "admin.knowledge.activity.detail.base": "Knowledge base",
1713
- "admin.knowledge.activity.detail.back": "Back to Activity",
1714
1706
  "admin.knowledge.activity.detail.loading": "Loading the job",
1715
1707
  "admin.knowledge.activity.detail.titleSync": "Sync {source}",
1716
1708
  "admin.knowledge.activity.detail.itemsCount": "Items",
@@ -2534,6 +2526,7 @@ var en_default = {
2534
2526
  "knowledgeApp.files.failure.other": "The file may be damaged.",
2535
2527
  "knowledgeApp.files.failure.abandoned": "It stopped before it finished.",
2536
2528
  "knowledgeApp.nav.label": "Knowledge",
2529
+ "knowledgeApp.nav.myFilesNew": "My Files, {count} new",
2537
2530
  "knowledgeApp.nav.settings": "Settings",
2538
2531
  "knowledgeApp.unavailable.title": "Knowledge is not set up here",
2539
2532
  "knowledgeApp.unavailable.body": "Ask your administrator to turn on Knowledge search for this organization.",
@@ -2687,7 +2680,6 @@ var en_default = {
2687
2680
  "knowledgeApp.preview.openInSource": "Open in source",
2688
2681
  "knowledgeApp.preview.download": "Download",
2689
2682
  "knowledgeApp.preview.close": "Close preview",
2690
- "knowledgeApp.preview.back": "Back to results",
2691
2683
  "knowledgeApp.preview.sheets": "Sheets",
2692
2684
  "knowledgeApp.preview.sheetCut": "Showing the first 1,000 rows. Download the file to see all of them.",
2693
2685
  "knowledgeApp.preview.unavailableTitle": "Preview not available",
@@ -2701,13 +2693,11 @@ var en_default = {
2701
2693
  "knowledgeApp.preview.downloadFailed": "The file could not be downloaded. Try again in a moment.",
2702
2694
  "knowledgeApp.preview.rendition.word": "Word document \xB7 preview",
2703
2695
  "knowledgeApp.preview.rendition.slides": "PowerPoint \xB7 preview",
2704
- "knowledgeApp.document.back": "Back to Knowledge",
2705
2696
  "knowledgeApp.document.notFoundTitle": "This file is not available",
2706
2697
  "knowledgeApp.document.notFoundBody": "It was removed, or you no longer have access to it.",
2707
2698
  "knowledgeApp.file.notFound": "This file is no longer available to you.",
2708
2699
  "knowledgeApp.file.failed": "The file could not be opened. Try again in a moment.",
2709
2700
  "knowledgeApp.bases.title": "Knowledge bases",
2710
- "knowledgeApp.bases.subtitle": "The knowledge bases you can search here.",
2711
2701
  "knowledgeApp.bases.create": "New knowledge base",
2712
2702
  "knowledgeApp.bases.columns.name": "Name",
2713
2703
  "knowledgeApp.bases.columns.from": "From",
@@ -2735,8 +2725,8 @@ var en_default = {
2735
2725
  "knowledgeApp.create.forbiddenOrganization": "Only a Knowledge steward can create an organization knowledge base.",
2736
2726
  "knowledgeApp.create.forbiddenWorkspace": "You need permission to add knowledge in this workspace. Ask a workspace admin.",
2737
2727
  "knowledgeApp.create.failed": "The knowledge base could not be created. Try again.",
2738
- "knowledgeApp.base.back": "Knowledge bases",
2739
2728
  "knowledgeApp.base.notFoundTitle": "Knowledge base not found",
2729
+ "knowledgeApp.base.views": "Knowledge base sections",
2740
2730
  "knowledgeApp.base.notFoundBody": "It does not exist, or it is not shared with this place.",
2741
2731
  "knowledgeApp.base.managedByOrganization": "Managed by the organization",
2742
2732
  "knowledgeApp.sources.title": "Sources",
@@ -2778,8 +2768,6 @@ var en_default = {
2778
2768
  "knowledgeApp.sources.remove": "Remove",
2779
2769
  "knowledgeApp.sources.syncNow": "Sync now",
2780
2770
  "knowledgeApp.sources.syncHistory": "Sync history",
2781
- "knowledgeApp.sources.views": "Sources and sync history",
2782
- "knowledgeApp.sources.backToSyncHistory": "Back to Sync history",
2783
2771
  "knowledgeApp.sources.syncStarted": "{name} will sync in a moment.",
2784
2772
  "knowledgeApp.sources.actionFailed": "That did not work. Try again.",
2785
2773
  "knowledgeApp.sources.paused": "{name} is paused.",
@@ -5615,6 +5603,77 @@ var en_default = {
5615
5603
  "omnichannel.nav.members": "Members",
5616
5604
  "omnichannel.nav.teams": "Teams",
5617
5605
  "omnichannel.nav.routing": "Routing",
5606
+ "omnichannel.nav.routingRules": "Routing rules",
5607
+ "omnichannel.routingRules.intro": "Choose which team a handed-over chat goes to. Rules are checked from the top when a chat is handed to people; the first rule that matches picks the team.",
5608
+ "omnichannel.routingRules.add": "Add rule",
5609
+ "omnichannel.routingRules.emptyTitle": "No routing rules yet",
5610
+ "omnichannel.routingRules.emptyBody": "Add a rule to send chats to a team by the customer's lifecycle stage or the chat's tags. Without rules, the steps below choose the team.",
5611
+ "omnichannel.routingRules.ruleTitle": "Rule {number}",
5612
+ "omnichannel.routingRules.moveUp": "Move up",
5613
+ "omnichannel.routingRules.moveDown": "Move down",
5614
+ "omnichannel.routingRules.deleteRule": "Delete rule",
5615
+ "omnichannel.routingRules.if": "If",
5616
+ "omnichannel.routingRules.then": "Then",
5617
+ "omnichannel.routingRules.sendTo": "send to",
5618
+ "omnichannel.routingRules.joinLabel": "How this condition joins the one before",
5619
+ "omnichannel.routingRules.join.and": "And",
5620
+ "omnichannel.routingRules.join.or": "Or",
5621
+ "omnichannel.routingRules.fieldLabel": "What to check",
5622
+ "omnichannel.routingRules.field.stage": "Lifecycle stage",
5623
+ "omnichannel.routingRules.field.tag": "Tag",
5624
+ "omnichannel.routingRules.operatorLabel": "Condition",
5625
+ "omnichannel.routingRules.operator.stage.is": "is",
5626
+ "omnichannel.routingRules.operator.stage.is_not": "is not",
5627
+ "omnichannel.routingRules.operator.tag.is": "has",
5628
+ "omnichannel.routingRules.operator.tag.is_not": "doesn't have",
5629
+ "omnichannel.routingRules.valueLabel.stage": "Stage",
5630
+ "omnichannel.routingRules.valueLabel.tag": "Tag",
5631
+ "omnichannel.routingRules.valuePlaceholder.stage": "Choose a stage",
5632
+ "omnichannel.routingRules.valuePlaceholder.tag": "Choose a tag",
5633
+ "omnichannel.routingRules.removeCondition": "Remove condition",
5634
+ "omnichannel.routingRules.addCondition": "Add condition",
5635
+ "omnichannel.routingRules.oneStage": "One stage per group: use Or",
5636
+ "omnichannel.routingRules.teamLabel": "Team",
5637
+ "omnichannel.routingRules.teamPlaceholder": "Choose a team",
5638
+ "omnichannel.routingRules.teamEmpty": "No one in it",
5639
+ "omnichannel.routingRules.summary.sentence": "When {conditions}, the chat goes to {team}.",
5640
+ "omnichannel.routingRules.summary.and": "and",
5641
+ "omnichannel.routingRules.summary.or": "or",
5642
+ "omnichannel.routingRules.summary.nothing": "\u2026",
5643
+ "omnichannel.routingRules.summary.noTeam": "a team you choose",
5644
+ "omnichannel.routingRules.summary.stage.is": "the customer is in {name}",
5645
+ "omnichannel.routingRules.summary.stage.is_not": "the customer is not in {name}",
5646
+ "omnichannel.routingRules.summary.tag.is": "the chat is tagged {name}",
5647
+ "omnichannel.routingRules.summary.tag.is_not": "the chat is not tagged {name}",
5648
+ "omnichannel.routingRules.fallback.title": "When no rule matches",
5649
+ "omnichannel.routingRules.fallback.agent": "The channel's Agent picks the team whose description matches what the customer needs.",
5650
+ "omnichannel.routingRules.fallback.default": "If the Agent names no team, or that team has no one in it, the channel's default team takes the chat.",
5651
+ "omnichannel.routingRules.fallback.everyone": "With no default team, the chat is offered to everyone.",
5652
+ "omnichannel.routingRules.save": "Save rules",
5653
+ "omnichannel.routingRules.valueMissing.stage": "Deleted stage: choose another",
5654
+ "omnichannel.routingRules.valueMissing.tag": "Deleted tag: choose another",
5655
+ "omnichannel.routingRules.teamMissing": "Deleted team: choose another",
5656
+ "omnichannel.routingRules.targetLabel": "Send to a team or a person",
5657
+ "omnichannel.routingRules.target.team": "Team",
5658
+ "omnichannel.routingRules.target.person": "Person",
5659
+ "omnichannel.routingRules.personLabel": "Person",
5660
+ "omnichannel.routingRules.personPlaceholder": "Choose a person",
5661
+ "omnichannel.routingRules.personMissing": "No longer in Omnichannel: choose another",
5662
+ "omnichannel.routingRules.personHint": "Offered to them first while they're Online and have room. If they don't accept in time, the chat goes to the team the rules below or the fallback choose.",
5663
+ "omnichannel.routingRules.summary.sentencePerson": "When {conditions}, the chat is offered to {person} first.",
5664
+ "omnichannel.routingRules.summary.noPerson": "a person you choose",
5665
+ "omnichannel.routingRules.error.person": "Rule {number}: its person has not used Omnichannel in this workspace. Choose another person.",
5666
+ "omnichannel.routingRules.unsaved": "You have unsaved changes.",
5667
+ "omnichannel.routingRules.discard": "Discard",
5668
+ "omnichannel.routingRules.saving": "Saving\u2026",
5669
+ "omnichannel.routingRules.saved": "Routing rules saved",
5670
+ "omnichannel.routingRules.saveError": "The routing rules could not be saved",
5671
+ "omnichannel.routingRules.conflict": "Another Supervisor saved the routing rules while you were editing. Your changes are still here: Replace theirs saves yours over their version, and Discard shows theirs.",
5672
+ "omnichannel.routingRules.error.incomplete": "Rule {number} needs a team or a person, and a stage or tag in every condition.",
5673
+ "omnichannel.routingRules.error.team": "Rule {number}: its team no longer exists. Choose another team.",
5674
+ "omnichannel.routingRules.error.stage": "Rule {number}: a stage it checks no longer exists. Choose another stage.",
5675
+ "omnichannel.routingRules.error.tag": "Rule {number}: a tag it checks no longer exists. Choose another tag.",
5676
+ "omnichannel.routingRules.error.oneStage": "Rule {number}: a customer is in one stage at a time, so join stages with Or.",
5618
5677
  "omnichannel.routing.intro": "What happens to a chat handed to your team while it waits for someone to take it.",
5619
5678
  "omnichannel.nav.settings": "Settings",
5620
5679
  "omnichannel.settings.section.templates": "Templates",
@@ -6471,6 +6530,17 @@ var en_default = {
6471
6530
  "omnichannel.channels.login.rejected": "Kata did not accept this login",
6472
6531
  "omnichannel.channels.login.none": "Not set",
6473
6532
  "omnichannel.channels.credit.label": "Message credit",
6533
+ "omnichannel.channels.intro": "The WhatsApp numbers your customers write to. Open one to choose who answers first, its team and reply target, and to see its message credit.",
6534
+ "omnichannel.channels.section.answers": "Who answers",
6535
+ "omnichannel.channels.credit.short": "{credit} credits",
6536
+ "omnichannel.channels.credit.shortOne": "{credit} credit",
6537
+ "omnichannel.channels.credit.cantRead": "Can't read credit",
6538
+ "omnichannel.channels.credit.out": "Out of message credit",
6539
+ "omnichannel.channels.credit.outChip": "Out of credit",
6540
+ "omnichannel.channels.credit.outBody": "Replies and templates on this number aren't going out. Top it up with Kata.",
6541
+ "omnichannel.channels.credit.lowState": "Low at or below {threshold}",
6542
+ "omnichannel.channels.credit.checkAgain": "Check again",
6543
+ "omnichannel.channels.credit.source": "Credit is bought and topped up with Kata, for this number.",
6474
6544
  "omnichannel.channels.credit.amount": "{credit} credits left",
6475
6545
  "omnichannel.channels.credit.checked": "Checked at {time}",
6476
6546
  "omnichannel.channels.credit.low": "Credit is low (at or below {threshold}). Top it up before template sends and replies stop going out.",
@@ -8012,7 +8082,138 @@ Use Add a rule to build them from lists.`,
8012
8082
  "studio.overview.attention.reauthNamed": "{name} needs you to sign in again",
8013
8083
  "studio.overview.attention.failingNamed": "{name} is failing",
8014
8084
  "studio.overview.attention.failingMeta": "Plugin \xB7 its connection keeps failing; open it to see why",
8015
- "studio.overview.action.openPlugin": "Open Plugin"
8085
+ "studio.overview.action.openPlugin": "Open Plugin",
8086
+ "admin.knowledge.assistant.keptShort": "Questions and answers",
8087
+ "admin.knowledge.assistant.keptHint": "Kept for 30 days. File owners see the question when someone rates an answer.",
8088
+ "admin.knowledge.assistant.keptDays": "Kept 30 days",
8089
+ "admin.knowledge.traces.section.feedback": "Rating",
8090
+ "admin.knowledge.traces.feedbackBare": "No reason or comment",
8091
+ "knowledgeApp.answer.whyTitle": "What went wrong?",
8092
+ "knowledgeApp.answer.reason.wrong_or_outdated": "Incorrect or outdated",
8093
+ "knowledgeApp.answer.reason.missing_information": "Missing information",
8094
+ "knowledgeApp.answer.reason.wrong_document": "Wrong source",
8095
+ "knowledgeApp.answer.reason.did_not_answer": "Didn't answer my question",
8096
+ "knowledgeApp.answer.comment": "Comment",
8097
+ "knowledgeApp.answer.commentPlaceholder": "Add a comment (optional)",
8098
+ "knowledgeApp.answer.ownersSee": "The file owner will see your name and feedback.",
8099
+ "knowledgeApp.answer.send": "Send",
8100
+ "knowledgeApp.comments.title": "Comments",
8101
+ "knowledgeApp.comments.description": "Visible to everyone with access to this file",
8102
+ "knowledgeApp.comments.button": "Comments",
8103
+ "knowledgeApp.comments.buttonCount": "Comments ({count})",
8104
+ "knowledgeApp.comments.new": "New comment",
8105
+ "knowledgeApp.comments.placeholder": "Comment or add others with @",
8106
+ "knowledgeApp.comments.post": "Comment",
8107
+ "knowledgeApp.comments.reply": "Reply",
8108
+ "knowledgeApp.comments.replyPlaceholder": "Reply or add others with @",
8109
+ "knowledgeApp.comments.resolve": "Resolve",
8110
+ "knowledgeApp.comments.reopen": "Reopen",
8111
+ "knowledgeApp.comments.resolvedBy": "Resolved by {name}",
8112
+ "knowledgeApp.comments.edit": "Edit",
8113
+ "knowledgeApp.comments.edited": "edited",
8114
+ "knowledgeApp.comments.save": "Save",
8115
+ "knowledgeApp.comments.delete": "Delete",
8116
+ "knowledgeApp.comments.deleted": "Comment deleted",
8117
+ "knowledgeApp.comments.empty": "No comments yet",
8118
+ "knowledgeApp.comments.failed": "Couldn't save comment.",
8119
+ "knowledgeApp.documents.columns.owner": "Owner",
8120
+ "knowledgeApp.owner.label": "Owner",
8121
+ "knowledgeApp.owner.none": "No owner",
8122
+ "knowledgeApp.owner.leftShort": "No longer has access",
8123
+ "knowledgeApp.owner.change": "Change owner",
8124
+ "knowledgeApp.owner.changeMany": "Change owner of {count} files",
8125
+ "knowledgeApp.owner.dialogBody": "The owner gets feedback and comments in My Files.",
8126
+ "knowledgeApp.owner.search": "Type a name or email",
8127
+ "knowledgeApp.owner.noPeople": "No matches",
8128
+ "knowledgeApp.owner.noOwnerOption": "No owner",
8129
+ "knowledgeApp.owner.current": "current owner",
8130
+ "knowledgeApp.owner.save": "Save",
8131
+ "knowledgeApp.owner.saving": "Saving\u2026",
8132
+ "knowledgeApp.owner.changed": "Owner changed",
8133
+ "knowledgeApp.owner.cannotRead": "{name} doesn't have access to this knowledge base.",
8134
+ "knowledgeApp.owner.notYours": "You can only change the owner of files you own.",
8135
+ "knowledgeApp.owner.failed": "Couldn't change owner.",
8136
+ "knowledgeApp.replace.action": "Replace file",
8137
+ "knowledgeApp.replace.busy": "This file is still processing. Try again when it's done.",
8138
+ "knowledgeApp.replace.duplicate": "This file is already in this knowledge base.",
8139
+ "knowledgeApp.replace.fileType": "This file type isn't supported.",
8140
+ "knowledgeApp.replace.tooLarge": "This file is larger than 50 MB.",
8141
+ "knowledgeApp.replace.failed": "Couldn't replace file.",
8142
+ "knowledgeApp.myFiles.title": "My Files",
8143
+ "knowledgeApp.myFiles.new": "New",
8144
+ "knowledgeApp.myFiles.tab.open": "Open",
8145
+ "knowledgeApp.myFiles.tab.done": "Resolved",
8146
+ "knowledgeApp.myFiles.emptyOpen": "You're all caught up",
8147
+ "knowledgeApp.myFiles.emptyDone": "Nothing resolved yet",
8148
+ "knowledgeApp.myFiles.ratedUp": "Helpful",
8149
+ "knowledgeApp.myFiles.ratedDown": "Not helpful",
8150
+ "knowledgeApp.myFiles.ratingRemoved": "Feedback removed",
8151
+ "knowledgeApp.myFiles.state.fixed": "Resolved",
8152
+ "knowledgeApp.myFiles.state.not_document": "Dismissed",
8153
+ "knowledgeApp.myFiles.resolved": "Resolved",
8154
+ "knowledgeApp.myFiles.replies": "{count} replies",
8155
+ "knowledgeApp.myFiles.feedback": "Feedback",
8156
+ "knowledgeApp.feedback.by": "Feedback from {name}",
8157
+ "knowledgeApp.feedback.empty": "No feedback yet",
8158
+ "knowledgeApp.feedback.noResolved": "No resolved feedback",
8159
+ "knowledgeApp.feedback.buttonCount": "Feedback ({count})",
8160
+ "knowledgeApp.feedback.panel": "Comments and feedback",
8161
+ "knowledgeApp.myFiles.theirComment": "{name} commented",
8162
+ "knowledgeApp.myFiles.question": "Question",
8163
+ "knowledgeApp.myFiles.questionNotKept": "Question not available",
8164
+ "knowledgeApp.myFiles.fromTheAnswer": "From this file",
8165
+ "knowledgeApp.myFiles.noSentences": "The answer didn't cite this file.",
8166
+ "knowledgeApp.myFiles.cited": "Cited at",
8167
+ "knowledgeApp.myFiles.openFile": "Open file",
8168
+ "knowledgeApp.myFiles.openTrace": "View trace",
8169
+ "knowledgeApp.myFiles.fixed": "Resolve",
8170
+ "knowledgeApp.myFiles.notDocument": "Dismiss",
8171
+ "knowledgeApp.myFiles.reopen": "Reopen",
8172
+ "knowledgeApp.myFiles.moved.fixed": "Resolved",
8173
+ "knowledgeApp.myFiles.moved.not_document": "Dismissed",
8174
+ "knowledgeApp.myFiles.moved.open": "Reopened",
8175
+ "knowledgeApp.myFiles.moveFailed": "Couldn't update feedback.",
8176
+ "knowledgeApp.myFiles.handled.fixed": "Resolved by {name} \xB7 {date}",
8177
+ "knowledgeApp.myFiles.handled.not_document": "Dismissed by {name} \xB7 {date}",
8178
+ "knowledgeApp.myFiles.itemGone": "This feedback is no longer available.",
8179
+ "knowledgeApp.myFiles.repliesOne": "1 reply",
8180
+ "knowledgeApp.comments.deleteFailed": "Couldn't delete comment.",
8181
+ "knowledgeApp.comments.add": "Add comment",
8182
+ "knowledgeApp.comments.onFile": "Comment on file",
8183
+ "knowledgeApp.comments.hide": "Hide comments",
8184
+ "knowledgeApp.comments.onThisFile": "On this file",
8185
+ "knowledgeApp.comments.resolvedView": "Resolved",
8186
+ "knowledgeApp.comments.noResolved": "No resolved comments",
8187
+ "knowledgeApp.comments.textChanged": "The commented text has changed",
8188
+ "knowledgeApp.comments.more": "More actions",
8189
+ "knowledgeApp.comments.by": "Comment by {name}",
8190
+ "knowledgeApp.comments.mentionPeople": "Mention someone",
8191
+ "knowledgeApp.comments.mentionCannotRead": "Someone you mentioned can't open this file.",
8192
+ "knowledgeApp.comments.mentionCannotReadNamed": "{names} can't open this file.",
8193
+ "knowledgeApp.myFiles.mentionedYou": "{name} mentioned you",
8194
+ "knowledgeApp.owner.hintStewards": "Knowledge stewards manage this file",
8195
+ "knowledgeApp.owner.hintKnowledgePermission": "People with Knowledge permission manage this file",
8196
+ "knowledgeApp.replace.processing": "Processing {name}\u2026 The current version stays in search until it's ready.",
8197
+ "knowledgeApp.replace.notPermittedStewards": "Only the file owner or a Knowledge steward can replace this file.",
8198
+ "knowledgeApp.replace.notPermittedKnowledgePermission": "Only the file owner or someone with Knowledge permission can replace this file.",
8199
+ "knowledgeApp.myFiles.scope.label": "Files",
8200
+ "knowledgeApp.myFiles.scope.mine": "For you",
8201
+ "knowledgeApp.myFiles.scope.managed": "All files",
8202
+ "knowledgeApp.myFiles.rated": "{name} gave feedback \xB7 {rating}",
8203
+ "knowledgeApp.myFiles.noMatches": "No matches",
8204
+ "knowledgeApp.myFiles.columns.activity": "Activity",
8205
+ "knowledgeApp.myFiles.columns.base": "Knowledge base",
8206
+ "knowledgeApp.myFiles.columns.date": "Date",
8207
+ "knowledgeApp.myFiles.kind.feedback": "Feedback",
8208
+ "knowledgeApp.myFiles.kind.comment": "Comments",
8209
+ "knowledgeApp.myFiles.kind.mention": "Mentions",
8210
+ "knowledgeApp.myFiles.filter.type": "Type",
8211
+ "knowledgeApp.myFiles.filter.allTypes": "All types",
8212
+ "knowledgeApp.myFiles.filter.people": "People",
8213
+ "knowledgeApp.myFiles.filter.anyone": "Anyone",
8214
+ "knowledgeApp.myFiles.filter.base": "Knowledge base",
8215
+ "knowledgeApp.myFiles.filter.allBases": "All knowledge bases",
8216
+ "knowledgeApp.myFiles.filter.status": "Status"
8016
8217
  };
8017
8218
 
8018
8219
  // ../platform-kit/src/ui/i18n/locales/id.json
@@ -9344,7 +9545,6 @@ var id_default = {
9344
9545
  "admin.knowledge.assistant.charactersMany": "{count} karakter",
9345
9546
  "admin.knowledge.assistant.expand": "Perbesar",
9346
9547
  "admin.knowledge.assistant.settings": "Pengaturan",
9347
- "admin.knowledge.assistant.keepTextShort": "Simpan pertanyaan dan jawaban",
9348
9548
  "admin.knowledge.assistant.noModelsShort": "Belum ada model",
9349
9549
  "admin.knowledge.preview.title": "Coba asisten",
9350
9550
  "admin.knowledge.preview.button": "Pratinjau",
@@ -9383,10 +9583,6 @@ var id_default = {
9383
9583
  "admin.knowledge.runs.figures.callsOne": "{count} panggilan model",
9384
9584
  "admin.knowledge.runs.figures.callsMany": "{count} panggilan model",
9385
9585
  "admin.knowledge.runs.figures.tokens": "{count} token",
9386
- "admin.knowledge.assistant.keepText": "Simpan pertanyaan dan jawaban di jejak",
9387
- "admin.knowledge.assistant.keepTextHint": "Nonaktif: jejak menyimpan cara setiap jawaban dibuat (langkah, waktu, dan biaya), bukan pertanyaan atau jawabannya. Aktif: keduanya disimpan selama 30 hari. Percobaan Anda selalu menyimpan teksnya selama 14 hari.",
9388
- "admin.knowledge.assistant.keepTextOn": "Pertanyaan dan jawaban disimpan di jejak.",
9389
- "admin.knowledge.assistant.keepTextOff": "Pertanyaan dan jawaban tidak lagi disimpan di jejak.",
9390
9586
  "admin.knowledge.traces.loadFailed": "Jejak tidak dapat dimuat.",
9391
9587
  "admin.knowledge.traces.times.title": "Jawaban pencarian",
9392
9588
  "admin.knowledge.traces.times.noTimes": "Tidak ada waktu pada periode ini",
@@ -9648,8 +9844,6 @@ var id_default = {
9648
9844
  "admin.knowledge.glance.baseTotal.readingUsd": "Total biaya membaca",
9649
9845
  "admin.knowledge.glance.usageLink": "Lihat Penggunaan",
9650
9846
  "admin.knowledge.glance.loadFailed": "Angka Knowledge tidak dapat dimuat.",
9651
- "admin.knowledge.activity.intro": "Pekerjaan yang dilakukan Knowledge di latar belakang: memeriksa, membaca, menyiapkan pratinjau, mengindeks, dan menghapus file, serta menjaga pencarian tetap terbaru. Nama file hanya tampil jika Anda dapat membaca file tersebut.",
9652
- "admin.knowledge.activity.introManaged": "Pekerjaan latar belakang pada basis pengetahuan yang Anda kelola: menyinkronkan sumbernya, serta memeriksa, membaca, mengindeks, dan menghapus filenya. Nama file hanya tampil jika Anda dapat membaca file tersebut.",
9653
9847
  "admin.knowledge.activity.notAllowed": "Aktivitas di sini menampilkan pekerjaan pada basis pengetahuan yang Anda kelola, dan Anda tidak mengelola basis pengetahuan dari tempat ini. Tanyakan kepada pengelola basis pengetahuan tersebut, atau pemilik atau admin organisasi.",
9654
9848
  "admin.knowledge.activity.syncHistoryOf": "Riwayat sinkron {source}",
9655
9849
  "admin.knowledge.activity.totalOne": "1 pekerjaan",
@@ -9704,7 +9898,6 @@ var id_default = {
9704
9898
  "admin.knowledge.activity.progress.passages": "Membuat embedding bagian: {done} dari {total}",
9705
9899
  "admin.knowledge.activity.progress.files": "{done} dari {total} file dipindahkan",
9706
9900
  "admin.knowledge.activity.detail.base": "Basis pengetahuan",
9707
- "admin.knowledge.activity.detail.back": "Kembali ke Aktivitas",
9708
9901
  "admin.knowledge.activity.detail.loading": "Memuat pekerjaan",
9709
9902
  "admin.knowledge.activity.detail.titleSync": "Sinkron {source}",
9710
9903
  "admin.knowledge.activity.detail.itemsCount": "Item",
@@ -10528,6 +10721,7 @@ var id_default = {
10528
10721
  "knowledgeApp.files.failure.other": "File mungkin rusak.",
10529
10722
  "knowledgeApp.files.failure.abandoned": "Berhenti sebelum selesai.",
10530
10723
  "knowledgeApp.nav.label": "Knowledge",
10724
+ "knowledgeApp.nav.myFilesNew": "File Saya, {count} baru",
10531
10725
  "knowledgeApp.nav.settings": "Pengaturan",
10532
10726
  "knowledgeApp.unavailable.title": "Knowledge belum disiapkan di sini",
10533
10727
  "knowledgeApp.unavailable.body": "Minta administrator Anda mengaktifkan pencarian Knowledge untuk organisasi ini.",
@@ -10681,7 +10875,6 @@ var id_default = {
10681
10875
  "knowledgeApp.preview.openInSource": "Buka di sumber",
10682
10876
  "knowledgeApp.preview.download": "Unduh",
10683
10877
  "knowledgeApp.preview.close": "Tutup pratinjau",
10684
- "knowledgeApp.preview.back": "Kembali ke hasil",
10685
10878
  "knowledgeApp.preview.sheets": "Sheet",
10686
10879
  "knowledgeApp.preview.sheetCut": "Menampilkan 1.000 baris pertama. Unduh file untuk melihat semuanya.",
10687
10880
  "knowledgeApp.preview.unavailableTitle": "Pratinjau tidak tersedia",
@@ -10695,13 +10888,11 @@ var id_default = {
10695
10888
  "knowledgeApp.preview.downloadFailed": "File tidak dapat diunduh. Coba lagi sebentar lagi.",
10696
10889
  "knowledgeApp.preview.rendition.word": "Dokumen Word \xB7 pratinjau",
10697
10890
  "knowledgeApp.preview.rendition.slides": "PowerPoint \xB7 pratinjau",
10698
- "knowledgeApp.document.back": "Kembali ke Knowledge",
10699
10891
  "knowledgeApp.document.notFoundTitle": "File ini tidak tersedia",
10700
10892
  "knowledgeApp.document.notFoundBody": "File ini sudah dihapus, atau Anda tidak lagi punya akses ke file ini.",
10701
10893
  "knowledgeApp.file.notFound": "File ini tidak lagi tersedia untuk Anda.",
10702
10894
  "knowledgeApp.file.failed": "File tidak dapat dibuka. Coba lagi sebentar lagi.",
10703
10895
  "knowledgeApp.bases.title": "Basis pengetahuan",
10704
- "knowledgeApp.bases.subtitle": "Basis pengetahuan yang dapat Anda cari di sini.",
10705
10896
  "knowledgeApp.bases.create": "Basis pengetahuan baru",
10706
10897
  "knowledgeApp.bases.columns.name": "Nama",
10707
10898
  "knowledgeApp.bases.columns.from": "Dari",
@@ -10729,8 +10920,8 @@ var id_default = {
10729
10920
  "knowledgeApp.create.forbiddenOrganization": "Hanya pengelola Knowledge yang dapat membuat basis pengetahuan organisasi.",
10730
10921
  "knowledgeApp.create.forbiddenWorkspace": "Anda perlu izin untuk menambahkan pengetahuan di ruang kerja ini. Minta admin ruang kerja.",
10731
10922
  "knowledgeApp.create.failed": "Basis pengetahuan tidak dapat dibuat. Coba lagi.",
10732
- "knowledgeApp.base.back": "Basis pengetahuan",
10733
10923
  "knowledgeApp.base.notFoundTitle": "Basis pengetahuan tidak ditemukan",
10924
+ "knowledgeApp.base.views": "Bagian basis pengetahuan",
10734
10925
  "knowledgeApp.base.notFoundBody": "Basis pengetahuan ini tidak ada, atau tidak dibagikan dengan tempat ini.",
10735
10926
  "knowledgeApp.base.managedByOrganization": "Dikelola oleh organisasi",
10736
10927
  "knowledgeApp.sources.title": "Sumber",
@@ -10772,8 +10963,6 @@ var id_default = {
10772
10963
  "knowledgeApp.sources.remove": "Hapus",
10773
10964
  "knowledgeApp.sources.syncNow": "Sinkronkan sekarang",
10774
10965
  "knowledgeApp.sources.syncHistory": "Riwayat sinkron",
10775
- "knowledgeApp.sources.views": "Sumber dan riwayat sinkron",
10776
- "knowledgeApp.sources.backToSyncHistory": "Kembali ke Riwayat sinkron",
10777
10966
  "knowledgeApp.sources.syncStarted": "{name} akan disinkronkan sebentar lagi.",
10778
10967
  "knowledgeApp.sources.actionFailed": "Tindakan gagal. Coba lagi.",
10779
10968
  "knowledgeApp.sources.paused": "{name} dijeda.",
@@ -13590,6 +13779,77 @@ var id_default = {
13590
13779
  "omnichannel.nav.members": "Anggota",
13591
13780
  "omnichannel.nav.teams": "Tim",
13592
13781
  "omnichannel.nav.routing": "Routing",
13782
+ "omnichannel.nav.routingRules": "Aturan routing",
13783
+ "omnichannel.routingRules.intro": "Pilih tim tujuan chat yang diteruskan. Aturan diperiksa dari atas saat chat diteruskan ke tim; aturan pertama yang cocok menentukan timnya.",
13784
+ "omnichannel.routingRules.add": "Tambah aturan",
13785
+ "omnichannel.routingRules.emptyTitle": "Belum ada aturan routing",
13786
+ "omnichannel.routingRules.emptyBody": "Tambahkan aturan untuk mengirim chat ke tim berdasarkan tahap lifecycle pelanggan atau tag chat. Tanpa aturan, langkah di bawah yang menentukan timnya.",
13787
+ "omnichannel.routingRules.ruleTitle": "Aturan {number}",
13788
+ "omnichannel.routingRules.moveUp": "Pindahkan ke atas",
13789
+ "omnichannel.routingRules.moveDown": "Pindahkan ke bawah",
13790
+ "omnichannel.routingRules.deleteRule": "Hapus aturan",
13791
+ "omnichannel.routingRules.if": "Jika",
13792
+ "omnichannel.routingRules.then": "Maka",
13793
+ "omnichannel.routingRules.sendTo": "kirim ke",
13794
+ "omnichannel.routingRules.joinLabel": "Cara kondisi ini digabung dengan kondisi sebelumnya",
13795
+ "omnichannel.routingRules.join.and": "Dan",
13796
+ "omnichannel.routingRules.join.or": "Atau",
13797
+ "omnichannel.routingRules.fieldLabel": "Yang diperiksa",
13798
+ "omnichannel.routingRules.field.stage": "Tahap lifecycle",
13799
+ "omnichannel.routingRules.field.tag": "Tag",
13800
+ "omnichannel.routingRules.operatorLabel": "Kondisi",
13801
+ "omnichannel.routingRules.operator.stage.is": "adalah",
13802
+ "omnichannel.routingRules.operator.stage.is_not": "bukan",
13803
+ "omnichannel.routingRules.operator.tag.is": "memiliki",
13804
+ "omnichannel.routingRules.operator.tag.is_not": "tidak memiliki",
13805
+ "omnichannel.routingRules.valueLabel.stage": "Tahap",
13806
+ "omnichannel.routingRules.valueLabel.tag": "Tag",
13807
+ "omnichannel.routingRules.valuePlaceholder.stage": "Pilih tahap",
13808
+ "omnichannel.routingRules.valuePlaceholder.tag": "Pilih tag",
13809
+ "omnichannel.routingRules.removeCondition": "Hapus kondisi",
13810
+ "omnichannel.routingRules.addCondition": "Tambah kondisi",
13811
+ "omnichannel.routingRules.oneStage": "Satu tahap per grup: pakai Atau",
13812
+ "omnichannel.routingRules.teamLabel": "Tim",
13813
+ "omnichannel.routingRules.teamPlaceholder": "Pilih tim",
13814
+ "omnichannel.routingRules.teamEmpty": "Belum ada anggota",
13815
+ "omnichannel.routingRules.summary.sentence": "Jika {conditions}, chat dikirim ke {team}.",
13816
+ "omnichannel.routingRules.summary.and": "dan",
13817
+ "omnichannel.routingRules.summary.or": "atau",
13818
+ "omnichannel.routingRules.summary.nothing": "\u2026",
13819
+ "omnichannel.routingRules.summary.noTeam": "tim yang Anda pilih",
13820
+ "omnichannel.routingRules.summary.stage.is": "pelanggan berada di tahap {name}",
13821
+ "omnichannel.routingRules.summary.stage.is_not": "pelanggan tidak berada di tahap {name}",
13822
+ "omnichannel.routingRules.summary.tag.is": "chat memiliki tag {name}",
13823
+ "omnichannel.routingRules.summary.tag.is_not": "chat tidak memiliki tag {name}",
13824
+ "omnichannel.routingRules.fallback.title": "Jika tidak ada aturan yang cocok",
13825
+ "omnichannel.routingRules.fallback.agent": "Agent channel memilih tim yang deskripsinya sesuai dengan kebutuhan pelanggan.",
13826
+ "omnichannel.routingRules.fallback.default": "Jika Agent tidak menyebut tim, atau tim itu belum ada anggotanya, tim default channel yang menerima chat.",
13827
+ "omnichannel.routingRules.fallback.everyone": "Tanpa tim default, chat ditawarkan ke semua orang.",
13828
+ "omnichannel.routingRules.save": "Simpan aturan",
13829
+ "omnichannel.routingRules.valueMissing.stage": "Tahap dihapus: pilih yang lain",
13830
+ "omnichannel.routingRules.valueMissing.tag": "Tag dihapus: pilih yang lain",
13831
+ "omnichannel.routingRules.teamMissing": "Tim dihapus: pilih yang lain",
13832
+ "omnichannel.routingRules.targetLabel": "Kirim ke tim atau orang",
13833
+ "omnichannel.routingRules.target.team": "Tim",
13834
+ "omnichannel.routingRules.target.person": "Orang",
13835
+ "omnichannel.routingRules.personLabel": "Orang",
13836
+ "omnichannel.routingRules.personPlaceholder": "Pilih orang",
13837
+ "omnichannel.routingRules.personMissing": "Sudah tidak di Omnichannel: pilih yang lain",
13838
+ "omnichannel.routingRules.personHint": "Ditawarkan dulu kepadanya selama ia Online dan masih ada ruang. Jika tidak diterima tepat waktu, chat dikirim ke tim yang dipilih aturan di bawahnya atau langkah cadangan.",
13839
+ "omnichannel.routingRules.summary.sentencePerson": "Jika {conditions}, chat ditawarkan dulu ke {person}.",
13840
+ "omnichannel.routingRules.summary.noPerson": "orang yang Anda pilih",
13841
+ "omnichannel.routingRules.error.person": "Aturan {number}: orangnya belum pernah memakai Omnichannel di workspace ini. Pilih orang lain.",
13842
+ "omnichannel.routingRules.unsaved": "Ada perubahan yang belum disimpan.",
13843
+ "omnichannel.routingRules.discard": "Buang",
13844
+ "omnichannel.routingRules.saving": "Menyimpan\u2026",
13845
+ "omnichannel.routingRules.saved": "Aturan routing disimpan",
13846
+ "omnichannel.routingRules.saveError": "Aturan routing tidak dapat disimpan",
13847
+ "omnichannel.routingRules.conflict": "Supervisor lain menyimpan aturan routing saat Anda sedang mengedit. Perubahan Anda masih ada: Ganti milik mereka menyimpan versi Anda di atas versi mereka, dan Buang menampilkan versi mereka.",
13848
+ "omnichannel.routingRules.error.incomplete": "Aturan {number} memerlukan tim atau orang, dan tahap atau tag di setiap kondisi.",
13849
+ "omnichannel.routingRules.error.team": "Aturan {number}: timnya sudah tidak ada. Pilih tim lain.",
13850
+ "omnichannel.routingRules.error.stage": "Aturan {number}: tahap yang diperiksa sudah tidak ada. Pilih tahap lain.",
13851
+ "omnichannel.routingRules.error.tag": "Aturan {number}: tag yang diperiksa sudah tidak ada. Pilih tag lain.",
13852
+ "omnichannel.routingRules.error.oneStage": "Aturan {number}: pelanggan hanya berada di satu tahap, jadi gabungkan tahap dengan Atau.",
13593
13853
  "omnichannel.routing.intro": "Apa yang terjadi pada chat yang diteruskan ke tim Anda selama menunggu sampai ada yang mengambilnya.",
13594
13854
  "omnichannel.nav.settings": "Pengaturan",
13595
13855
  "omnichannel.settings.section.templates": "Template",
@@ -14446,6 +14706,17 @@ var id_default = {
14446
14706
  "omnichannel.channels.login.rejected": "Kata tidak menerima login ini",
14447
14707
  "omnichannel.channels.login.none": "Belum diatur",
14448
14708
  "omnichannel.channels.credit.label": "Kredit pesan",
14709
+ "omnichannel.channels.intro": "Nomor WhatsApp yang dihubungi pelanggan Anda. Buka salah satunya untuk memilih siapa yang menjawab pertama, tim dan target balasannya, serta melihat kredit pesannya.",
14710
+ "omnichannel.channels.section.answers": "Siapa yang menjawab",
14711
+ "omnichannel.channels.credit.short": "{credit} kredit",
14712
+ "omnichannel.channels.credit.shortOne": "{credit} kredit",
14713
+ "omnichannel.channels.credit.cantRead": "Kredit tidak terbaca",
14714
+ "omnichannel.channels.credit.out": "Kredit pesan habis",
14715
+ "omnichannel.channels.credit.outChip": "Kredit habis",
14716
+ "omnichannel.channels.credit.outBody": "Balasan dan template di nomor ini tidak terkirim. Isi ulang kreditnya di Kata.",
14717
+ "omnichannel.channels.credit.lowState": "Rendah di {threshold} atau kurang",
14718
+ "omnichannel.channels.credit.checkAgain": "Cek lagi",
14719
+ "omnichannel.channels.credit.source": "Kredit dibeli dan diisi ulang di Kata, untuk nomor ini.",
14449
14720
  "omnichannel.channels.credit.amount": "Sisa {credit} kredit",
14450
14721
  "omnichannel.channels.credit.checked": "Dicek pukul {time}",
14451
14722
  "omnichannel.channels.credit.low": "Kredit hampir habis (di bawah atau sama dengan {threshold}). Isi ulang sebelum kirim template dan balasan berhenti terkirim.",
@@ -15982,7 +16253,138 @@ var id_default = {
15982
16253
  "studio.overview.attention.reauthNamed": "{name} perlu Anda masuk lagi",
15983
16254
  "studio.overview.attention.failingNamed": "{name} gagal",
15984
16255
  "studio.overview.attention.failingMeta": "Plugin \xB7 koneksinya terus gagal; buka untuk melihat penyebabnya",
15985
- "studio.overview.action.openPlugin": "Buka Plugin"
16256
+ "studio.overview.action.openPlugin": "Buka Plugin",
16257
+ "admin.knowledge.assistant.keptShort": "Pertanyaan dan jawaban",
16258
+ "admin.knowledge.assistant.keptHint": "Disimpan selama 30 hari. Pemilik file melihat pertanyaannya saat seseorang menilai jawaban.",
16259
+ "admin.knowledge.assistant.keptDays": "Disimpan 30 hari",
16260
+ "admin.knowledge.traces.section.feedback": "Penilaian",
16261
+ "admin.knowledge.traces.feedbackBare": "Tanpa alasan atau komentar",
16262
+ "knowledgeApp.answer.whyTitle": "Apa yang salah?",
16263
+ "knowledgeApp.answer.reason.wrong_or_outdated": "Salah atau sudah usang",
16264
+ "knowledgeApp.answer.reason.missing_information": "Informasi kurang lengkap",
16265
+ "knowledgeApp.answer.reason.wrong_document": "Sumber salah",
16266
+ "knowledgeApp.answer.reason.did_not_answer": "Tidak menjawab pertanyaan saya",
16267
+ "knowledgeApp.answer.comment": "Komentar",
16268
+ "knowledgeApp.answer.commentPlaceholder": "Tambahkan komentar (opsional)",
16269
+ "knowledgeApp.answer.ownersSee": "Pemilik file akan melihat nama dan masukan Anda.",
16270
+ "knowledgeApp.answer.send": "Kirim",
16271
+ "knowledgeApp.comments.title": "Komentar",
16272
+ "knowledgeApp.comments.description": "Terlihat oleh semua orang yang punya akses ke file ini",
16273
+ "knowledgeApp.comments.button": "Komentar",
16274
+ "knowledgeApp.comments.buttonCount": "Komentar ({count})",
16275
+ "knowledgeApp.comments.new": "Komentar baru",
16276
+ "knowledgeApp.comments.placeholder": "Komentari atau tambahkan orang lain dengan @",
16277
+ "knowledgeApp.comments.post": "Kirim",
16278
+ "knowledgeApp.comments.reply": "Balas",
16279
+ "knowledgeApp.comments.replyPlaceholder": "Balas atau tambahkan orang lain dengan @",
16280
+ "knowledgeApp.comments.resolve": "Selesaikan",
16281
+ "knowledgeApp.comments.reopen": "Buka lagi",
16282
+ "knowledgeApp.comments.resolvedBy": "Diselesaikan oleh {name}",
16283
+ "knowledgeApp.comments.edit": "Ubah",
16284
+ "knowledgeApp.comments.edited": "diubah",
16285
+ "knowledgeApp.comments.save": "Simpan",
16286
+ "knowledgeApp.comments.delete": "Hapus",
16287
+ "knowledgeApp.comments.deleted": "Komentar dihapus",
16288
+ "knowledgeApp.comments.empty": "Belum ada komentar",
16289
+ "knowledgeApp.comments.failed": "Gagal menyimpan komentar.",
16290
+ "knowledgeApp.documents.columns.owner": "Pemilik",
16291
+ "knowledgeApp.owner.label": "Pemilik",
16292
+ "knowledgeApp.owner.none": "Tanpa pemilik",
16293
+ "knowledgeApp.owner.leftShort": "Tidak lagi punya akses",
16294
+ "knowledgeApp.owner.change": "Ganti pemilik",
16295
+ "knowledgeApp.owner.changeMany": "Ganti pemilik {count} file",
16296
+ "knowledgeApp.owner.dialogBody": "Pemilik menerima masukan dan komentar di File Saya.",
16297
+ "knowledgeApp.owner.search": "Ketik nama atau email",
16298
+ "knowledgeApp.owner.noPeople": "Tidak ada hasil",
16299
+ "knowledgeApp.owner.noOwnerOption": "Tanpa pemilik",
16300
+ "knowledgeApp.owner.current": "pemilik sekarang",
16301
+ "knowledgeApp.owner.save": "Simpan",
16302
+ "knowledgeApp.owner.saving": "Menyimpan\u2026",
16303
+ "knowledgeApp.owner.changed": "Pemilik diganti",
16304
+ "knowledgeApp.owner.cannotRead": "{name} tidak punya akses ke basis pengetahuan ini.",
16305
+ "knowledgeApp.owner.notYours": "Anda hanya bisa mengganti pemilik file milik Anda.",
16306
+ "knowledgeApp.owner.failed": "Gagal mengganti pemilik.",
16307
+ "knowledgeApp.replace.action": "Ganti file",
16308
+ "knowledgeApp.replace.busy": "File ini masih diproses. Coba lagi setelah selesai.",
16309
+ "knowledgeApp.replace.duplicate": "File ini sudah ada di basis pengetahuan ini.",
16310
+ "knowledgeApp.replace.fileType": "Jenis file ini tidak didukung.",
16311
+ "knowledgeApp.replace.tooLarge": "File ini lebih dari 50 MB.",
16312
+ "knowledgeApp.replace.failed": "Gagal mengganti file.",
16313
+ "knowledgeApp.myFiles.title": "File Saya",
16314
+ "knowledgeApp.myFiles.new": "Baru",
16315
+ "knowledgeApp.myFiles.tab.open": "Terbuka",
16316
+ "knowledgeApp.myFiles.tab.done": "Selesai",
16317
+ "knowledgeApp.myFiles.emptyOpen": "Semua sudah beres",
16318
+ "knowledgeApp.myFiles.emptyDone": "Belum ada yang diselesaikan",
16319
+ "knowledgeApp.myFiles.ratedUp": "Membantu",
16320
+ "knowledgeApp.myFiles.ratedDown": "Tidak membantu",
16321
+ "knowledgeApp.myFiles.ratingRemoved": "Masukan dihapus",
16322
+ "knowledgeApp.myFiles.state.fixed": "Selesai",
16323
+ "knowledgeApp.myFiles.state.not_document": "Diabaikan",
16324
+ "knowledgeApp.myFiles.resolved": "Selesai",
16325
+ "knowledgeApp.myFiles.replies": "{count} balasan",
16326
+ "knowledgeApp.myFiles.feedback": "Masukan",
16327
+ "knowledgeApp.feedback.by": "Masukan dari {name}",
16328
+ "knowledgeApp.feedback.empty": "Belum ada masukan",
16329
+ "knowledgeApp.feedback.noResolved": "Tidak ada masukan yang selesai",
16330
+ "knowledgeApp.feedback.buttonCount": "Masukan ({count})",
16331
+ "knowledgeApp.feedback.panel": "Komentar dan masukan",
16332
+ "knowledgeApp.myFiles.theirComment": "{name} berkomentar",
16333
+ "knowledgeApp.myFiles.question": "Pertanyaan",
16334
+ "knowledgeApp.myFiles.questionNotKept": "Pertanyaan tidak tersedia",
16335
+ "knowledgeApp.myFiles.fromTheAnswer": "Dari file ini",
16336
+ "knowledgeApp.myFiles.noSentences": "Jawaban tidak mengutip file ini.",
16337
+ "knowledgeApp.myFiles.cited": "Dikutip di",
16338
+ "knowledgeApp.myFiles.openFile": "Buka file",
16339
+ "knowledgeApp.myFiles.openTrace": "Lihat jejak",
16340
+ "knowledgeApp.myFiles.fixed": "Selesaikan",
16341
+ "knowledgeApp.myFiles.notDocument": "Abaikan",
16342
+ "knowledgeApp.myFiles.reopen": "Buka lagi",
16343
+ "knowledgeApp.myFiles.moved.fixed": "Diselesaikan",
16344
+ "knowledgeApp.myFiles.moved.not_document": "Diabaikan",
16345
+ "knowledgeApp.myFiles.moved.open": "Dibuka lagi",
16346
+ "knowledgeApp.myFiles.moveFailed": "Gagal memperbarui masukan.",
16347
+ "knowledgeApp.myFiles.handled.fixed": "Diselesaikan oleh {name} \xB7 {date}",
16348
+ "knowledgeApp.myFiles.handled.not_document": "Diabaikan oleh {name} \xB7 {date}",
16349
+ "knowledgeApp.myFiles.itemGone": "Masukan ini tidak tersedia lagi.",
16350
+ "knowledgeApp.myFiles.repliesOne": "1 balasan",
16351
+ "knowledgeApp.comments.deleteFailed": "Gagal menghapus komentar.",
16352
+ "knowledgeApp.comments.add": "Tambahkan komentar",
16353
+ "knowledgeApp.comments.onFile": "Komentari file",
16354
+ "knowledgeApp.comments.hide": "Sembunyikan komentar",
16355
+ "knowledgeApp.comments.onThisFile": "Di file ini",
16356
+ "knowledgeApp.comments.resolvedView": "Selesai",
16357
+ "knowledgeApp.comments.noResolved": "Tidak ada komentar yang selesai",
16358
+ "knowledgeApp.comments.textChanged": "Teks yang dikomentari telah berubah",
16359
+ "knowledgeApp.comments.more": "Tindakan lainnya",
16360
+ "knowledgeApp.comments.by": "Komentar dari {name}",
16361
+ "knowledgeApp.comments.mentionPeople": "Sebut seseorang",
16362
+ "knowledgeApp.comments.mentionCannotRead": "Seseorang yang Anda sebut tidak bisa membuka file ini.",
16363
+ "knowledgeApp.comments.mentionCannotReadNamed": "{names} tidak bisa membuka file ini.",
16364
+ "knowledgeApp.myFiles.mentionedYou": "{name} menyebut Anda",
16365
+ "knowledgeApp.owner.hintStewards": "Dikelola oleh pengelola Knowledge",
16366
+ "knowledgeApp.owner.hintKnowledgePermission": "Dikelola oleh orang dengan izin Knowledge",
16367
+ "knowledgeApp.replace.processing": "Memproses {name}\u2026 Versi saat ini tetap muncul di pencarian sampai selesai.",
16368
+ "knowledgeApp.replace.notPermittedStewards": "Hanya pemilik file atau pengelola Knowledge yang bisa mengganti file ini.",
16369
+ "knowledgeApp.replace.notPermittedKnowledgePermission": "Hanya pemilik file atau orang dengan izin Knowledge yang bisa mengganti file ini.",
16370
+ "knowledgeApp.myFiles.scope.label": "File",
16371
+ "knowledgeApp.myFiles.scope.mine": "Untuk Anda",
16372
+ "knowledgeApp.myFiles.scope.managed": "Semua file",
16373
+ "knowledgeApp.myFiles.rated": "{name} memberi masukan \xB7 {rating}",
16374
+ "knowledgeApp.myFiles.noMatches": "Tidak ada yang cocok",
16375
+ "knowledgeApp.myFiles.columns.activity": "Aktivitas",
16376
+ "knowledgeApp.myFiles.columns.base": "Basis pengetahuan",
16377
+ "knowledgeApp.myFiles.columns.date": "Tanggal",
16378
+ "knowledgeApp.myFiles.kind.feedback": "Masukan",
16379
+ "knowledgeApp.myFiles.kind.comment": "Komentar",
16380
+ "knowledgeApp.myFiles.kind.mention": "Sebutan",
16381
+ "knowledgeApp.myFiles.filter.type": "Jenis",
16382
+ "knowledgeApp.myFiles.filter.allTypes": "Semua jenis",
16383
+ "knowledgeApp.myFiles.filter.people": "Orang",
16384
+ "knowledgeApp.myFiles.filter.anyone": "Siapa saja",
16385
+ "knowledgeApp.myFiles.filter.base": "Basis pengetahuan",
16386
+ "knowledgeApp.myFiles.filter.allBases": "Semua basis pengetahuan",
16387
+ "knowledgeApp.myFiles.filter.status": "Status"
15986
16388
  };
15987
16389
  var STORAGE_KEY = "sebati-agents-locale";
15988
16390
  var locales = { en: en_default, id: id_default };
@@ -1,7 +1,7 @@
1
1
  'use client';
2
- import { requestPaneFocus, useArtifacts, usePlugins, useCanvasStore, useArtifactStore, useChatOverviewStore, useSourcesEnrichment, sourceKind, useCitationViewer, resolveSourceDisplay, extractDomain, useCitedDocument, 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-4OL5C4O4.js';
2
+ import { requestPaneFocus, useArtifacts, usePlugins, useCanvasStore, useArtifactStore, useChatOverviewStore, useSourcesEnrichment, sourceKind, useCitationViewer, resolveSourceDisplay, extractDomain, useCitedDocument, 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-ID6ZQJOQ.js';
3
3
  import { MagnifyingGlassIcon, Popover, PopoverTrigger, PopoverContent, Sheet, SheetContent, SheetHeader, SheetTitle } from './chunk-RQSMCGBR.js';
4
- import { useTranslation, useIsMobile } from './chunk-VMZCASGI.js';
4
+ import { useTranslation, useIsMobile } from './chunk-L5Y4JFJU.js';
5
5
  import { Collapsible, CollapsibleTrigger, CollapsibleContent, Shimmer, HoverCard, HoverCardTrigger, HoverCardContent } from './chunk-K7AIK7TA.js';
6
6
  import { ChevronDownMediumIcon, ScrollArea, Skeleton, Button } from './chunk-UWKO24VT.js';
7
7
  import { Dialog, DialogContent, DialogHeader, DialogTitle, CrossMediumIcon } from './chunk-37WYG6VG.js';
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
  import { Sheet, SheetContent, SheetHeader, SheetTitle, Popover, PopoverTrigger, PopoverContent, MagnifyingGlassIcon } from './chunk-RQSMCGBR.js';
3
- import { useIsMobile, useTranslation } from './chunk-VMZCASGI.js';
3
+ import { useIsMobile, useTranslation } from './chunk-L5Y4JFJU.js';
4
4
  import { CrossMediumIcon } from './chunk-37WYG6VG.js';
5
5
  import { AgentAvatar } from './chunk-RCWVJD7G.js';
6
6
  import { cn, Checkmark1Icon } from './chunk-LGVMMBL3.js';
package/dist/header.js CHANGED
@@ -1,9 +1,9 @@
1
1
  'use client';
2
- export { ChatHeader, ChatHeaderActions } from './chunk-ZBWIRN76.js';
3
- import './chunk-4OL5C4O4.js';
2
+ export { ChatHeader, ChatHeaderActions } from './chunk-NJRVXDFH.js';
3
+ import './chunk-ID6ZQJOQ.js';
4
4
  import './chunk-CWAOLMFS.js';
5
5
  import './chunk-RQSMCGBR.js';
6
- import './chunk-VMZCASGI.js';
6
+ import './chunk-L5Y4JFJU.js';
7
7
  import './chunk-R3ONYPUB.js';
8
8
  import './chunk-K7AIK7TA.js';
9
9
  import './chunk-UWKO24VT.js';
package/dist/message.js CHANGED
@@ -1,9 +1,9 @@
1
1
  'use client';
2
- export { Message, Thinking } from './chunk-SPSLMHUU.js';
3
- import './chunk-4OL5C4O4.js';
2
+ export { Message, Thinking } from './chunk-K65ARILG.js';
3
+ import './chunk-ID6ZQJOQ.js';
4
4
  import './chunk-CWAOLMFS.js';
5
5
  import './chunk-RQSMCGBR.js';
6
- import './chunk-VMZCASGI.js';
6
+ import './chunk-L5Y4JFJU.js';
7
7
  import './chunk-R3ONYPUB.js';
8
8
  import './chunk-K7AIK7TA.js';
9
9
  import './chunk-UWKO24VT.js';
@@ -1,7 +1,7 @@
1
1
  'use client';
2
- export { DEFAULT_SHORTCUTS, NewSessionPrompt, buildDefaultShortcuts } from './chunk-UQDTJM5H.js';
2
+ export { DEFAULT_SHORTCUTS, NewSessionPrompt, buildDefaultShortcuts } from './chunk-W4WCRV4O.js';
3
3
  import './chunk-RQSMCGBR.js';
4
- import './chunk-VMZCASGI.js';
4
+ import './chunk-L5Y4JFJU.js';
5
5
  import './chunk-37WYG6VG.js';
6
6
  import './chunk-RCWVJD7G.js';
7
7
  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-JJ3GBIGA.js';
3
+ import { resolveStageWidth, zoomPercent, DECK_ZOOM_LEVELS, LazyThumb, ArtifactSkeleton } from './chunk-C77BEH5Y.js';
4
4
  import { ChevronLeftIcon } from './chunk-CWAOLMFS.js';
5
- import { useTranslation, useIsMobile } from './chunk-VMZCASGI.js';
5
+ import { useTranslation, useIsMobile } from './chunk-L5Y4JFJU.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';
@@ -26,6 +26,8 @@ function PdfDeckViewInner({
26
26
  label,
27
27
  notes,
28
28
  page,
29
+ pageKey,
30
+ textLayer = false,
29
31
  onError
30
32
  }) {
31
33
  const { t } = useTranslation();
@@ -62,7 +64,7 @@ function PdfDeckViewInner({
62
64
  useEffect(() => () => setLoadedFileUrl(null), []);
63
65
  useEffect(() => {
64
66
  if (page && visiblePages > 0) setSel(Math.min(page, visiblePages) - 1);
65
- }, [page, visiblePages]);
67
+ }, [page, pageKey, visiblePages]);
66
68
  const next = useCallback(
67
69
  () => setSel(
68
70
  (value) => Math.min(Math.max(0, visiblePages - 1), value + 1)
@@ -452,12 +454,14 @@ function PdfDeckViewInner({
452
454
  "div",
453
455
  {
454
456
  className: pageIndex === sel ? "h-full w-full" : "pointer-events-none absolute inset-0 z-10",
457
+ "data-text-root": textLayer && pageIndex === sel ? pageIndex + 1 : void 0,
458
+ "data-text-pages": textLayer && pageIndex === sel ? visiblePages : void 0,
455
459
  children: /* @__PURE__ */ jsx(
456
460
  Page,
457
461
  {
458
462
  pageNumber: pageIndex + 1,
459
463
  width: pageDims.w,
460
- renderTextLayer: false,
464
+ renderTextLayer: textLayer && pageIndex === sel,
461
465
  renderAnnotationLayer: false,
462
466
  loading: null,
463
467
  onRenderSuccess: pageIndex === sel ? handlePageRendered : void 0
@@ -1,7 +1,7 @@
1
1
  'use client';
2
- import { zoomPercent, DECK_ZOOM_LEVELS, ArtifactSkeleton, LazyThumb } from './chunk-JJ3GBIGA.js';
2
+ import { zoomPercent, DECK_ZOOM_LEVELS, ArtifactSkeleton, LazyThumb } from './chunk-C77BEH5Y.js';
3
3
  import { ChevronLeftIcon } from './chunk-CWAOLMFS.js';
4
- import { useTranslation, useIsMobile } from './chunk-VMZCASGI.js';
4
+ import { useTranslation, useIsMobile } from './chunk-L5Y4JFJU.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';
@@ -35,6 +35,7 @@ var PdfDocumentPage = memo(function PdfDocumentPage2({
35
35
  {
36
36
  "data-pdf-page-index": pageIndex,
37
37
  "data-pdf-page-live": shouldRender,
38
+ "data-text-root": pageIndex + 1,
38
39
  className: "scroll-mt-4 overflow-hidden bg-surface-raised shadow-sm",
39
40
  style: { width: displayWidth, height: displayHeight },
40
41
  children: shouldRender ? /* @__PURE__ */ jsx(
@@ -94,7 +95,8 @@ function PdfDocumentViewInner({
94
95
  label,
95
96
  onError,
96
97
  versionSlot,
97
- page
98
+ page,
99
+ pageKey
98
100
  }) {
99
101
  const { t } = useTranslation();
100
102
  const isMobile = useIsMobile();
@@ -257,11 +259,11 @@ function PdfDocumentViewInner({
257
259
  useEffect(() => {
258
260
  if (!page || !laidOut) return;
259
261
  const shown = shownPageRef.current;
260
- if (shown?.fileUrl === fileUrl && shown.page === page) return;
261
- shownPageRef.current = { fileUrl, page };
262
+ if (shown?.fileUrl === fileUrl && shown.page === page && shown.pageKey === pageKey) return;
263
+ shownPageRef.current = { fileUrl, page, pageKey };
262
264
  heldPageRef.current = page - 1;
263
265
  goToPage(page - 1, shown?.fileUrl === fileUrl ? "smooth" : "auto");
264
- }, [fileUrl, goToPage, laidOut, page]);
266
+ }, [fileUrl, goToPage, laidOut, page, pageKey]);
265
267
  useLayoutEffect(() => {
266
268
  if (heldPageRef.current !== null && laidOut) goToPage(heldPageRef.current, "auto");
267
269
  }, [pageWidth]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@frontera-sdk/chat-ui",
3
- "version": "1.53.22",
3
+ "version": "1.53.24",
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.53.22",
93
- "@frontera-sdk/core": "1.53.22",
92
+ "@frontera-sdk/chat": "1.53.24",
93
+ "@frontera-sdk/core": "1.53.24",
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",