@frontera-sdk/chat-ui 1.52.45 → 1.52.46

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-4DDOGZVM.js';
5
- import { NewSessionPrompt, keepCaretOnTap } from './chunk-5FR2R2Q5.js';
4
+ import { ArtifactSkeleton, resolveStageWidth, zoomPercent, DECK_ZOOM_LEVELS, LazyThumb } from './chunk-BH732SE7.js';
5
+ import { NewSessionPrompt, keepCaretOnTap } from './chunk-OJRKM2RR.js';
6
6
  import { PendingCards } from './chunk-N3I3MZTY.js';
7
7
  import { themeToStyle } from './chunk-6HYPVNVA.js';
8
8
  import { useChatAgents } from './chunk-O6CVTMZJ.js';
9
9
  import { subjectOfChatToken, capabilitiesOfChatToken } from './chunk-CCVPZVFK.js';
10
- import { useChatCredential } from './chunk-QGGYWRGV.js';
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-5SGSD4HS.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-HXTBM76Q.js';
13
13
  import './chunk-X3QVICX7.js';
14
- 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-2G3EHYNS.js';
15
- import { Textarea, artifactFormatIcon, BookIcon, useAgentRoster, ShieldCheckIcon, useArtifactStore, useCanvasStore, useChatOverviewStore, setSdkConversationPath, setSdkDarkMode, AgentsProvider, PluginProvider, WorkspaceProvider, TooltipProvider, getPersonConfirmation, 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, useChatCapabilityEnabled, useChatOptInEnabled, 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-TY6QQSAF.js';
14
+ 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-272ALGNG.js';
15
+ import { Textarea, artifactFormatIcon, BookIcon, useAgentRoster, ShieldCheckIcon, useArtifactStore, useCanvasStore, useChatOverviewStore, setSdkConversationPath, setSdkDarkMode, AgentsProvider, PluginProvider, WorkspaceProvider, TooltipProvider, getPersonConfirmation, 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, useChatCapabilityEnabled, useChatOptInEnabled, 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-A36QN6XG.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-3ED4DPTV.js';
18
+ import { MOBILE_BREAKPOINT, useIsMobile, I18nProvider, useTranslation } from './chunk-IOT4NXZV.js';
19
19
  import './chunk-BRCS2NHC.js';
20
20
  import { AppIcon, frontera_icon_default, PhotoIcon, Folder1Icon, FileTextIcon, describeToolRow, SquareArrowTopRightIcon, ClipboardIcon, getToolMeta, useStreamdownPlugins, AppIconFrame, MessageResponse } from './chunk-X33KXNO3.js';
21
21
  import { Skeleton, Button, ScrollArea, ChevronDownMediumIcon, buttonVariants } from './chunk-UWKO24VT.js';
@@ -30,7 +30,7 @@ import { __commonJS, __export, __toESM } from './chunk-PR4QN5HX.js';
30
30
  import * as React from 'react';
31
31
  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';
32
32
  import { useChat } from '@ai-sdk/react';
33
- import { createChatTransport } from '@frontera-sdk/chat/transport';
33
+ import { createChatTransport, OPENING_MESSAGE_ID } from '@frontera-sdk/chat/transport';
34
34
  import { runAppConnection, completeRedirectedConnection } from '@frontera-sdk/chat/connect-popup';
35
35
  import { ChatClient } from '@frontera-sdk/chat/chat-client';
36
36
  import { QueryClient, useQuery, useQueryClient, useMutation } from '@tanstack/react-query';
@@ -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-V7FGCXYR.js'),
42452
+ () => import('./pdf-document-view-inner-CO4ABKGI.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-ZE7DECMZ.js'), {
43269
+ var Inner = dynamic(() => import('./pdf-deck-view-inner-ED2OE7S7.js'), {
43270
43270
  ssr: false,
43271
43271
  loading: () => /* @__PURE__ */ jsx(ArtifactSkeleton, { format: "htmldeck" })
43272
43272
  });
@@ -65924,6 +65924,13 @@ var EFFORT_ORDER = [
65924
65924
  "max"
65925
65925
  ];
65926
65926
  var AUTOMATIC_MODE = "$automatic";
65927
+ var CHATGPT_MODE_PREFIX = "chatgpt-";
65928
+ function isChatGptModeKey(key2) {
65929
+ return !!key2 && key2.startsWith(CHATGPT_MODE_PREFIX);
65930
+ }
65931
+ function chatGptModelId(key2) {
65932
+ return isChatGptModeKey(key2) ? key2.slice(CHATGPT_MODE_PREFIX.length) : "";
65933
+ }
65927
65934
  var EFFORT_LABELS = {
65928
65935
  minimal: "Minimal",
65929
65936
  low: "Light",
@@ -70735,7 +70742,8 @@ function ChatInputBar({
70735
70742
  if (!orgFlags) return;
70736
70743
  const selectedKey = modelMode ?? defaultMode;
70737
70744
  const selected = Array.isArray(modes) ? modes.find((entry) => entry.key === selectedKey) : selectedKey ? modes?.[selectedKey] : void 0;
70738
- const chatgptDisconnected = selected?.provider === "openai-codex" && !(hasSubscriptionMode && subscriptionStatus?.connected !== false);
70745
+ const liveChatGpt = !selected && hasSubscriptionMode && isChatGptModeKey(selectedKey);
70746
+ const chatgptDisconnected = (selected?.provider === "openai-codex" || liveChatGpt) && !(hasSubscriptionMode && subscriptionStatus?.connected !== false);
70739
70747
  const xaiDisconnected = selected?.provider === "xai" && !(hasXaiMode && xaiSubscriptionStatus?.connected !== false);
70740
70748
  if (!chatgptDisconnected && !xaiDisconnected) return;
70741
70749
  const cloudMode = modeEntries?.find(
@@ -71321,19 +71329,18 @@ function ChatInputBar({
71321
71329
  if (!(base3 || fileAttachments.length > 0 || composerModes.length > 0) || isDisabled || isUploading) {
71322
71330
  return false;
71323
71331
  }
71324
- const selectedMode = modeEntries?.find(
71325
- (mode) => mode.key === (modelMode ?? defaultMode)
71326
- );
71327
- if (selectedMode?.provider === "openai-codex") {
71332
+ const selectedKey = modelMode ?? defaultMode;
71333
+ const selectedMode = modeEntries?.find((mode) => mode.key === selectedKey);
71334
+ const unlistedChatGpt = !selectedMode && hasSubscriptionMode && isChatGptModeKey(selectedKey);
71335
+ if (selectedMode?.provider === "openai-codex" || unlistedChatGpt) {
71328
71336
  if (!subscriptionStatus?.connected) {
71329
71337
  toast.error(
71330
71338
  "Connect your ChatGPT account in Settings \u2192 Connections to use this model."
71331
71339
  );
71332
71340
  return false;
71333
71341
  }
71334
- if (!eligibleSubscriptionModels?.has(
71335
- selectedMode.modelId ?? selectedMode.model ?? ""
71336
- )) {
71342
+ const modelId = selectedMode ? selectedMode.modelId ?? selectedMode.model ?? "" : chatGptModelId(selectedKey);
71343
+ if (!eligibleSubscriptionModels?.has(modelId)) {
71337
71344
  toast.error(
71338
71345
  "This ChatGPT model is unavailable for your account. Choose another model."
71339
71346
  );
@@ -72222,7 +72229,7 @@ function FronteraChat({
72222
72229
  [chosenAgent]
72223
72230
  );
72224
72231
  const [loadError, setLoadError] = useState(null);
72225
- const { getClient, ready, error: credentialError, refresh: refreshCredential } = useChatCredential(credentialProps);
72232
+ const { getClient, ready, error: credentialError, refresh: refreshCredential, openingMessage } = useChatCredential(credentialProps);
72226
72233
  const chatClient = useMemo(() => {
72227
72234
  const client = getClient();
72228
72235
  return client ? new ChatClient(client) : null;
@@ -72363,6 +72370,12 @@ function FronteraChat({
72363
72370
  experimental_throttle: 50
72364
72371
  });
72365
72372
  sendMessageRef.current = sendMessage;
72373
+ useEffect(() => {
72374
+ if (!openingMessage || initialConversationId) return;
72375
+ setMessages(
72376
+ (current) => current.length ? current : [{ id: OPENING_MESSAGE_ID, role: "assistant", parts: [{ type: "text", text: openingMessage }] }]
72377
+ );
72378
+ }, [openingMessage, initialConversationId, setMessages]);
72366
72379
  const replaceComposerText = useComposerStore((state) => state.replaceComposerText);
72367
72380
  const handleEditMessage = useCallback(
72368
72381
  (messageId, newText) => {
@@ -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, 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-TY6QQSAF.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, 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-A36QN6XG.js';
3
3
  import { Sheet, SheetTrigger, SheetContent, SheetHeader, SheetTitle, SheetDescription, Popover, PopoverTrigger, PopoverContent } from './chunk-T5SANYSX.js';
4
- import { useIsMobile, useTranslation } from './chunk-3ED4DPTV.js';
4
+ import { useIsMobile, useTranslation } from './chunk-IOT4NXZV.js';
5
5
  import { MessageToolbar, MessageResponse, SquareArrowTopRightIcon, FileTextIcon, Shimmer, ClipboardIcon, Message, MessageContent, PencilIcon, deferDuringLayoutMotion, HoverCard, HoverCardTrigger, HoverCardContent, Collapse, Icon, CircleXIcon, ClockIcon } from './chunk-X33KXNO3.js';
6
6
  import { ChevronDownMediumIcon, Button, ScrollArea, Skeleton } from './chunk-UWKO24VT.js';
7
7
  import { CrossMediumIcon } from './chunk-2P4IEVOQ.js';
@@ -12,6 +12,7 @@ function useChatCredential(props) {
12
12
  return typeof suppliedClient === "function" ? !!suppliedClient() : true;
13
13
  });
14
14
  const [error, setError] = useState(null);
15
+ const [openingMessage, setOpeningMessage] = useState(null);
15
16
  const clientRef = useRef(null);
16
17
  const sessionRef = useRef(null);
17
18
  const staticToken = props.token;
@@ -65,6 +66,7 @@ function useChatCredential(props) {
65
66
  try {
66
67
  const first = await loadFromHost();
67
68
  if (disposed) return;
69
+ if (typeof first.openingMessage === "string" && first.openingMessage.trim()) setOpeningMessage(first.openingMessage);
68
70
  const base = first.apiBaseUrl ?? apiBaseUrl;
69
71
  if (!base) throw new Error("No apiBaseUrl: pass one, or return it from your token endpoint");
70
72
  session = createTokenSession({
@@ -97,7 +99,7 @@ function useChatCredential(props) {
97
99
  [staticClient]
98
100
  );
99
101
  const refresh = useCallback(async () => sessionRef.current?.refresh(), []);
100
- return { getClient, ready, error, refresh };
102
+ return { getClient, ready, error, refresh, openingMessage };
101
103
  }
102
104
 
103
105
  export { useChatCredential };
@@ -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-3ED4DPTV.js';
4
+ import { useIsMobile, useTranslation } from './chunk-IOT4NXZV.js';
5
5
  import { ToolCallItem, ProcessorIcon } from './chunk-BRCS2NHC.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-X33KXNO3.js';
7
7
  import { ChevronDownMediumIcon, Button, Skeleton, buttonVariants } from './chunk-UWKO24VT.js';
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { useTranslation } from './chunk-3ED4DPTV.js';
2
+ import { useTranslation } from './chunk-IOT4NXZV.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,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-TY6QQSAF.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-A36QN6XG.js';
4
4
  import { Popover, PopoverTrigger, PopoverContent, Sheet, SheetContent, SheetHeader, SheetTitle } from './chunk-T5SANYSX.js';
5
- import { useTranslation, useIsMobile } from './chunk-3ED4DPTV.js';
5
+ import { useTranslation, useIsMobile } from './chunk-IOT4NXZV.js';
6
6
  import { Collapsible, CollapsibleTrigger, CollapsibleContent, Shimmer, HoverCard, HoverCardTrigger, HoverCardContent } from './chunk-X33KXNO3.js';
7
7
  import { ChevronDownMediumIcon, ScrollArea, Skeleton, Button } from './chunk-UWKO24VT.js';
8
8
  import { Dialog, DialogContent, DialogHeader, DialogTitle, CrossMediumIcon } from './chunk-2P4IEVOQ.js';
@@ -2522,6 +2522,7 @@ var en_default = {
2522
2522
  "eval.datasetItems.subjectAuthoredHint": "written by hand, imported from CSV",
2523
2523
  "eval.datasetItems.subjectScenario": "Scenario",
2524
2524
  "eval.datasetItems.subjectScenarioHint": "a whole conversation with a simulated customer",
2525
+ "eval.datasetItems.subjectConversationHint": "a conversation of {{count}} customer turns, sent in order",
2525
2526
  "eval.datasetItems.expectationsTitle": "Expectations",
2526
2527
  "eval.datasetItems.expectationsHint": "What the answer has to do, beyond matching the expected output. Each line is graded on its own, with evidence.",
2527
2528
  "eval.datasetItems.expectationsEmpty": "No expectations yet.",
@@ -4349,6 +4350,89 @@ var en_default = {
4349
4350
  "omnichannel.nav.inbox": "Inbox",
4350
4351
  "omnichannel.nav.channels": "Channels",
4351
4352
  "omnichannel.nav.team": "Team",
4353
+ "omnichannel.nav.settings": "Settings",
4354
+ "omnichannel.nav.reports": "Reports",
4355
+ "omnichannel.reports.title": "Reports",
4356
+ "omnichannel.reports.intro": "How your team served customers in the period. Days are counted in {timezone}, the time zone of your service hours.",
4357
+ "omnichannel.reports.introNoZone": "How your team served customers in the period.",
4358
+ "omnichannel.reports.loadError": "The report could not be loaded.",
4359
+ "omnichannel.reports.empty": "Nothing in this period.",
4360
+ "omnichannel.reports.period.label": "Period",
4361
+ "omnichannel.reports.period.today": "Today",
4362
+ "omnichannel.reports.period.7d": "Last 7 days",
4363
+ "omnichannel.reports.period.30d": "Last 30 days",
4364
+ "omnichannel.reports.period.custom": "Custom",
4365
+ "omnichannel.reports.period.from": "From",
4366
+ "omnichannel.reports.period.to": "To",
4367
+ "omnichannel.reports.period.invalid": "Choose a start and end date, in order, at most 366 days apart.",
4368
+ "omnichannel.reports.p90": "90% within {value}",
4369
+ "omnichannel.reports.trend.title": "Over time",
4370
+ "omnichannel.reports.trend.label": "Handovers per day, with CSAT and SLA attainment",
4371
+ "omnichannel.reports.byAgent": "By Human Agent",
4372
+ "omnichannel.reports.byChannel": "By channel",
4373
+ "omnichannel.reports.humanAgent": "Human Agent",
4374
+ "omnichannel.reports.channel": "Channel",
4375
+ "omnichannel.reports.nobody": "Nobody yet",
4376
+ "omnichannel.reports.noChannel": "Removed channel",
4377
+ "omnichannel.reports.reasons.title": "Top handover reasons",
4378
+ "omnichannel.reports.reasons.intro": "The reasons the Agent gave most often when it handed a chat to your team, as it wrote them.",
4379
+ "omnichannel.reports.reasons.empty": "The Agent handed no chats over in this period.",
4380
+ "omnichannel.reports.metric.csat_score": "CSAT",
4381
+ "omnichannel.reports.metric.sla_attainment": "SLA attainment",
4382
+ "omnichannel.reports.metric.first_reply_p50_minutes": "First reply wait",
4383
+ "omnichannel.reports.metric.handovers": "Handovers",
4384
+ "omnichannel.reports.metric.handover_rate": "Handover rate",
4385
+ "omnichannel.reports.metric.abandonment_rate": "Abandonment",
4386
+ "omnichannel.reports.metric.resolved": "Resolved",
4387
+ "omnichannel.reports.metric.resolution_p50_minutes": "Resolution time",
4388
+ "omnichannel.reports.metric.csat_average": "Average rating",
4389
+ "omnichannel.reports.metric.csat_responses": "Ratings",
4390
+ "omnichannel.reports.metric.repeat_contact_rate": "Repeat contact",
4391
+ "omnichannel.reports.metric.back_to_agent_rate": "Back with the Agent",
4392
+ "omnichannel.reports.how.csat_score": "Ratings of 4 or 5 stars out of all ratings customers gave after a person resolved their chat.",
4393
+ "omnichannel.reports.how.sla_attainment": "Handovers whose first reply came by the channel's target, out of those met or missed. Chats closed before the target without a reply are not counted.",
4394
+ "omnichannel.reports.how.first_reply_p50_minutes": "Half of the handovers got a person's first reply within this time; the second line is the time 90% got one within.",
4395
+ "omnichannel.reports.how.handovers": "Chats handed to your team in the period.",
4396
+ "omnichannel.reports.how.handover_rate": "Chats handed to your team, out of the chats customers wrote to in the period.",
4397
+ "omnichannel.reports.how.abandonment_rate": "Handovers closed after 24 hours of customer silence before anyone replied.",
4398
+ "omnichannel.settings.survey.title": "Satisfaction survey",
4399
+ "omnichannel.settings.survey.enabled": "Ask customers to rate",
4400
+ "omnichannel.settings.survey.enabledHint": "After a person resolves a chat, the customer gets your question with a button that opens five ratings, from five stars to one.",
4401
+ "omnichannel.settings.survey.question": "Question",
4402
+ "omnichannel.settings.survey.questionHint": "Sent once, right after the chat is resolved, while WhatsApp's 24-hour window is open.",
4403
+ "omnichannel.settings.survey.button_label": "Button label",
4404
+ "omnichannel.settings.survey.button_labelHint": "Opens the ratings. At most 20 characters.",
4405
+ "omnichannel.settings.survey.thanks": "Thank-you message",
4406
+ "omnichannel.settings.survey.thanksHint": "Sent once the customer rates.",
4407
+ "omnichannel.settings.survey.error.required": "Fill this in, or turn the survey off.",
4408
+ "omnichannel.settings.survey.error.tooLong": "At most {max} characters.",
4409
+ "omnichannel.settings.survey.save": "Save",
4410
+ "omnichannel.settings.survey.saved": "Satisfaction survey saved",
4411
+ "omnichannel.settings.survey.saveError": "The survey could not be saved. Try again.",
4412
+ "omnichannel.settings.survey.reloaded": "The latest saved survey is shown. Make your changes again.",
4413
+ "omnichannel.settings.survey.loadError": "The satisfaction survey could not be loaded.",
4414
+ "omnichannel.inbox.view.soon": "Needs reply soon",
4415
+ "omnichannel.inbox.viewEmpty.soon": "No chat's first reply is due soon.",
4416
+ "omnichannel.inbox.sla.minutes": "{minutes} min",
4417
+ "omnichannel.inbox.sla.hours": "{hours} h {minutes} min",
4418
+ "omnichannel.inbox.sla.hoursOnly": "{hours} h",
4419
+ "omnichannel.inbox.sla.dueIn": "Due in {time}",
4420
+ "omnichannel.inbox.sla.overdue": "Overdue {time}",
4421
+ "omnichannel.inbox.sla.alertAtRisk": "A chat's first reply is due soon",
4422
+ "omnichannel.inbox.sla.alertOverdue": "A chat's first reply is overdue",
4423
+ "omnichannel.inbox.sla.open": "Open",
4424
+ "omnichannel.channels.firstReply.label": "First reply target",
4425
+ "omnichannel.channels.firstReply.none": "None",
4426
+ "omnichannel.channels.firstReply.minutes": "minutes",
4427
+ "omnichannel.channels.firstReply.save": "Save",
4428
+ "omnichannel.channels.firstReply.hint": "Minutes of service hours a person has to send the first reply after a chat is handed over. Leave empty for no target.",
4429
+ "omnichannel.channels.firstReply.invalid": "Enter a whole number of minutes from 1 to 1440, or leave it empty.",
4430
+ "omnichannel.team.now.label": "The team now",
4431
+ "omnichannel.team.now.waiting": "Waiting",
4432
+ "omnichannel.team.now.oldestWait": "Longest wait",
4433
+ "omnichannel.team.now.atRisk": "Due soon",
4434
+ "omnichannel.team.now.overdue": "Overdue",
4435
+ "omnichannel.team.now.online": "Online",
4352
4436
  "omnichannel.inbox.connect.title": "Add a channel",
4353
4437
  "omnichannel.inbox.connect.body": "Chats arrive here once a channel is connected.",
4354
4438
  "omnichannel.inbox.connect.action": "Open Channels",
@@ -4358,6 +4442,7 @@ var en_default = {
4358
4442
  "omnichannel.inbox.view.waiting": "Waiting",
4359
4443
  "omnichannel.inbox.view.agent": "With the Agent",
4360
4444
  "omnichannel.inbox.view.all": "All chats",
4445
+ "omnichannel.inbox.view.resolved": "Resolved",
4361
4446
  "omnichannel.inbox.viewEmpty.mine": "No chats are with you right now.",
4362
4447
  "omnichannel.inbox.viewEmpty.waiting": "No chats are waiting for a person.",
4363
4448
  "omnichannel.inbox.viewEmpty.agent": "The Agent is not answering any chats right now.",
@@ -4366,19 +4451,26 @@ var en_default = {
4366
4451
  "omnichannel.inbox.panel": "Views and channels",
4367
4452
  "omnichannel.inbox.panelOpen": "Show views and channels",
4368
4453
  "omnichannel.inbox.panelCollapse": "Hide views and channels",
4369
- "omnichannel.inbox.segment.label": "Open or resolved chats",
4370
- "omnichannel.inbox.segment.open": "Open",
4371
- "omnichannel.inbox.segment.resolved": "Resolved",
4454
+ "omnichannel.inbox.state.waiting": "Waiting",
4455
+ "omnichannel.inbox.state.handedOff": "Handed off",
4456
+ "omnichannel.inbox.state.resolved": "Resolved",
4457
+ "omnichannel.inbox.state.expired": "Closed after silence",
4458
+ "omnichannel.inbox.state.returned": "Returned",
4459
+ "omnichannel.inbox.state.agent": "With the Agent",
4372
4460
  "omnichannel.inbox.channelEmpty": "No chats on this number yet.",
4373
4461
  "omnichannel.inbox.attachment": "Attachment",
4462
+ "omnichannel.inbox.search.open": "Search chats",
4463
+ "omnichannel.inbox.search.close": "Close search",
4374
4464
  "omnichannel.inbox.search.placeholder": "Search chats",
4375
4465
  "omnichannel.inbox.search.empty": "Nothing matches your search.",
4376
4466
  "omnichannel.inbox.search.chats": "Chats",
4377
4467
  "omnichannel.inbox.search.messages": "Messages",
4378
4468
  "omnichannel.inbox.preview.note": "Note: {text}",
4469
+ "omnichannel.inbox.preview.named": "{name}: {text}",
4379
4470
  "omnichannel.inbox.preview.agent": "Agent: {text}",
4380
4471
  "omnichannel.inbox.preview.you": "You: {text}",
4381
4472
  "omnichannel.inbox.preview.humanAgent": "Human Agent: {text}",
4473
+ "omnichannel.inbox.preview.automatic": "Automatic reply: {text}",
4382
4474
  "omnichannel.inbox.messageType.image": "Photo",
4383
4475
  "omnichannel.inbox.messageType.video": "Video",
4384
4476
  "omnichannel.inbox.messageType.audio": "Audio",
@@ -4404,6 +4496,7 @@ var en_default = {
4404
4496
  "omnichannel.inbox.sender.agent": "Agent",
4405
4497
  "omnichannel.inbox.sender.you": "You",
4406
4498
  "omnichannel.inbox.sender.humanAgent": "Human Agent",
4499
+ "omnichannel.inbox.sender.automatic": "Automatic reply",
4407
4500
  "omnichannel.inbox.status.pending": "Sending",
4408
4501
  "omnichannel.inbox.status.sent": "Sent",
4409
4502
  "omnichannel.inbox.status.delivered": "Delivered",
@@ -4476,22 +4569,36 @@ var en_default = {
4476
4569
  "omnichannel.inbox.contact.notes": "About this customer",
4477
4570
  "omnichannel.inbox.contact.emailPlaceholder": "Add an email",
4478
4571
  "omnichannel.inbox.contact.locationPlaceholder": "Add a city or region",
4479
- "omnichannel.inbox.contact.notesPlaceholder": "What the team should know, such as a preferred language",
4572
+ "omnichannel.inbox.contact.notesPlaceholder": "Add a note for the team",
4480
4573
  "omnichannel.inbox.contact.saving": "Saving\u2026",
4481
4574
  "omnichannel.inbox.contact.saved": "Saved",
4482
4575
  "omnichannel.inbox.contact.saveFailed": "The customer details were not saved",
4483
4576
  "omnichannel.inbox.cases.title": "History",
4484
4577
  "omnichannel.inbox.cases.none": "Nobody has handled this chat yet.",
4485
4578
  "omnichannel.inbox.cases.reason": "\u201C{reason}\u201D",
4486
- "omnichannel.inbox.cases.handedOver": "The Agent handed over \xB7 {time}",
4487
- "omnichannel.inbox.cases.takenOver": "Taken over from the Agent \xB7 {time}",
4488
- "omnichannel.inbox.cases.assigned": "With {name}",
4489
- "omnichannel.inbox.cases.firstAssigned": "First assigned \xB7 {time}",
4490
- "omnichannel.inbox.cases.firstReply": "First reply by {name} \xB7 {time}",
4579
+ "omnichannel.inbox.cases.context": "What the Agent passed on",
4580
+ "omnichannel.inbox.cases.summary": "Summary from the Agent",
4581
+ "omnichannel.inbox.cases.handedOver": "The Agent handed over",
4582
+ "omnichannel.inbox.cases.takenOver": "Taken over from the Agent",
4583
+ "omnichannel.inbox.cases.firstReply": "first reply in {delay}",
4491
4584
  "omnichannel.inbox.cases.open": "Open",
4492
- "omnichannel.inbox.cases.resolved": "Resolved by {name} \xB7 {time}",
4493
- "omnichannel.inbox.cases.expired": "Closed after 24 h without a reply \xB7 {time}",
4494
- "omnichannel.inbox.cases.returned": "Returned to the Agent \xB7 {time}",
4585
+ "omnichannel.inbox.cases.resolved": "Resolved",
4586
+ "omnichannel.inbox.cases.expired": "Closed after 24 h without a reply",
4587
+ "omnichannel.inbox.cases.returned": "Returned to the Agent",
4588
+ "omnichannel.inbox.cases.countOne": "1 case",
4589
+ "omnichannel.inbox.cases.countOther": "{count} cases",
4590
+ "omnichannel.inbox.cases.notTaken": "Not taken yet",
4591
+ "omnichannel.inbox.cases.firstReplyBy": "first reply by {name} in {delay}",
4592
+ "omnichannel.inbox.cases.underAMinute": "under 1 min",
4593
+ "omnichannel.inbox.cases.minutes": "{count} min",
4594
+ "omnichannel.inbox.cases.hours": "{count} h",
4595
+ "omnichannel.inbox.cases.hoursMinutes": "{hours} h {minutes} min",
4596
+ "omnichannel.inbox.day.today": "Today",
4597
+ "omnichannel.inbox.day.yesterday": "Yesterday",
4598
+ "omnichannel.inbox.divider.handedOver": "The Agent handed over",
4599
+ "omnichannel.inbox.divider.takenOver": "Taken over from the Agent",
4600
+ "omnichannel.inbox.divider.resolved": "Resolved by {name}",
4601
+ "omnichannel.inbox.divider.returned": "Returned to the Agent",
4495
4602
  "omnichannel.inbox.search.customers": "Customers",
4496
4603
  "omnichannel.inbox.search.noChat": "You have no chat with this customer that you can open.",
4497
4604
  "omnichannel.role.supervisor": "Supervisor",
@@ -4571,6 +4678,31 @@ var en_default = {
4571
4678
  "omnichannel.channels.save": "Save",
4572
4679
  "omnichannel.channels.saving": "Saving\u2026",
4573
4680
  "omnichannel.channels.saved": "Saved",
4681
+ "omnichannel.channels.tabs.label": "Channel settings",
4682
+ "omnichannel.channels.tabs.general": "General",
4683
+ "omnichannel.channels.tabs.agent": "Agent",
4684
+ "omnichannel.channels.turnOff.onNote": "This channel receives new messages.",
4685
+ "omnichannel.channels.rules.unsaved": "Unsaved changes",
4686
+ "omnichannel.channels.section.connection": "Connection",
4687
+ "omnichannel.channels.section.status": "Status",
4688
+ "omnichannel.channels.rules.title": "Handover rules",
4689
+ "omnichannel.channels.rules.body": "The Agent also hands a chat to your team when one of these happens.",
4690
+ "omnichannel.channels.rules.failedLabel": "When the Agent cannot answer",
4691
+ "omnichannel.channels.rules.failedOff": "Never",
4692
+ "omnichannel.channels.rules.failedCountOne": "After 1 message",
4693
+ "omnichannel.channels.rules.failedCount": "After {count} messages in a row",
4694
+ "omnichannel.channels.rules.failedHint": "For example when its model is unavailable. An answer starts the count again.",
4695
+ "omnichannel.channels.rules.keywordsLabel": "Complaint topics",
4696
+ "omnichannel.channels.rules.keywordsPlaceholder": "Type a topic, then press Enter",
4697
+ "omnichannel.channels.rules.keywordsHint": "A word or phrase per topic. When a customer\u2019s message contains one, the Agent answers it and then hands the chat over.",
4698
+ "omnichannel.channels.rules.error.tooMany": "You can add up to 50 topics.",
4699
+ "omnichannel.channels.rules.removeTopic": "Remove {topic}",
4700
+ "omnichannel.channels.rules.error.duplicate": "This topic is already added.",
4701
+ "omnichannel.channels.rules.error.noWords": "A topic needs at least one letter or digit.",
4702
+ "omnichannel.channels.rules.error.tooLong": "Keep each topic to 100 characters or fewer.",
4703
+ "omnichannel.channels.rules.save": "Save",
4704
+ "omnichannel.channels.rules.saving": "Saving\u2026",
4705
+ "omnichannel.channels.rules.saved": "Handover rules saved",
4574
4706
  "omnichannel.team.title": "People in this workspace",
4575
4707
  "omnichannel.team.intro": "Workspace owners and admins are Supervisors automatically. Give other people the Human Agent role so they can answer chats, or the Supervisor role so they can also see every chat and manage the channels.",
4576
4708
  "omnichannel.team.search": "Search people",
@@ -4604,6 +4736,55 @@ var en_default = {
4604
4736
  "omnichannel.loadError.title": "Omnichannel could not be loaded",
4605
4737
  "omnichannel.loadError.body": "Check your connection and try again.",
4606
4738
  "omnichannel.loadError.retry": "Try again",
4739
+ "omnichannel.settings.title": "Settings",
4740
+ "omnichannel.settings.hours.intro": "Set when your team answers chats. Outside these hours, while nobody is Online, a customer handed to your team or already waiting for it gets the closed message once each time you close, and the chat waits for your team.",
4741
+ "omnichannel.settings.hours.title": "Service hours",
4742
+ "omnichannel.settings.hours.openNow": "Open now",
4743
+ "omnichannel.settings.hours.closedUntil": "Closed, opens {next_open}",
4744
+ "omnichannel.settings.hours.closedNoOpening": "Closed, no opening hours set",
4745
+ "omnichannel.settings.hours.enabled": "Use service hours",
4746
+ "omnichannel.settings.hours.enabledHint": "When this is off, no closed message is sent. The hours below are kept.",
4747
+ "omnichannel.settings.hours.timezone": "Time zone",
4748
+ "omnichannel.settings.hours.timezoneHint": "The hours and holidays below are in this time zone.",
4749
+ "omnichannel.settings.hours.week": "Opening hours",
4750
+ "omnichannel.settings.hours.closed": "Closed",
4751
+ "omnichannel.settings.hours.from": "{day} opens at",
4752
+ "omnichannel.settings.hours.to": "{day} closes at",
4753
+ "omnichannel.settings.hours.endOfDay": "24:00 (end of day)",
4754
+ "omnichannel.settings.hours.showTimes": "Show times for {field}",
4755
+ "omnichannel.settings.hours.addRange": "Add hours",
4756
+ "omnichannel.settings.hours.addRangeFor": "Add hours on {day}",
4757
+ "omnichannel.settings.hours.removeRange": "Remove these hours on {day}",
4758
+ "omnichannel.settings.hours.error.invalidTime": "Choose an opening and a closing time.",
4759
+ "omnichannel.settings.hours.error.startNotBeforeEnd": "The opening time must be before the closing time.",
4760
+ "omnichannel.settings.hours.error.overlap": "These hours overlap other hours on the same day.",
4761
+ "omnichannel.settings.hours.error.noRanges": "Add opening hours to at least one day, or turn off service hours.",
4762
+ "omnichannel.settings.hours.closedMessage": "Closed message",
4763
+ "omnichannel.settings.hours.closedMessageHint": "Sent outside service hours while nobody is Online: when a chat is handed to your team, and to a customer already waiting who writes, once each time you close. {next_open} is replaced with the next opening time.",
4764
+ "omnichannel.settings.hours.error.message.required": "Enter the message customers get while you are closed.",
4765
+ "omnichannel.settings.hours.error.message.tooLong": "The message can be at most 1,000 characters.",
4766
+ "omnichannel.settings.hours.save": "Save",
4767
+ "omnichannel.settings.hours.saving": "Saving\u2026",
4768
+ "omnichannel.settings.hours.saved": "Service hours saved",
4769
+ "omnichannel.settings.hours.saveError": "Service hours could not be saved. Try again.",
4770
+ "omnichannel.settings.hours.fixErrors": "Fix the marked fields, then save again.",
4771
+ "omnichannel.settings.hours.reloaded": "The latest saved service hours are shown. Make your changes again.",
4772
+ "omnichannel.settings.day.monday": "Monday",
4773
+ "omnichannel.settings.day.tuesday": "Tuesday",
4774
+ "omnichannel.settings.day.wednesday": "Wednesday",
4775
+ "omnichannel.settings.day.thursday": "Thursday",
4776
+ "omnichannel.settings.day.friday": "Friday",
4777
+ "omnichannel.settings.day.saturday": "Saturday",
4778
+ "omnichannel.settings.day.sunday": "Sunday",
4779
+ "omnichannel.settings.holidays.title": "Holidays",
4780
+ "omnichannel.settings.holidays.empty": "No holidays. Add a date to stay closed all that day.",
4781
+ "omnichannel.settings.holidays.date": "Holiday date",
4782
+ "omnichannel.settings.holidays.name": "Holiday name",
4783
+ "omnichannel.settings.holidays.namePlaceholder": "Name (optional)",
4784
+ "omnichannel.settings.holidays.add": "Add holiday",
4785
+ "omnichannel.settings.holidays.remove": "Remove holiday",
4786
+ "omnichannel.settings.holidays.error.invalidDate": "Choose a date.",
4787
+ "omnichannel.settings.holidays.error.duplicateDate": "This date is already in the list.",
4607
4788
  "platformNav.allApplications": "All applications",
4608
4789
  "platformNav.filterApplications": "Filter applications",
4609
4790
  "platformNav.noPins": "Pin an application to keep it in your sidebar.",
@@ -8080,6 +8261,7 @@ var id_default = {
8080
8261
  "eval.datasetItems.subjectAuthoredHint": "ditulis manual, diimpor dari CSV",
8081
8262
  "eval.datasetItems.subjectScenario": "Skenario",
8082
8263
  "eval.datasetItems.subjectScenarioHint": "seluruh percakapan dengan pelanggan simulasi",
8264
+ "eval.datasetItems.subjectConversationHint": "percakapan dengan {{count}} giliran pelanggan, dikirim berurutan",
8083
8265
  "eval.datasetItems.expectationsTitle": "Ekspektasi",
8084
8266
  "eval.datasetItems.expectationsHint": "Hal yang harus dilakukan jawaban, di luar kecocokan dengan jawaban yang diharapkan. Tiap baris dinilai sendiri, disertai bukti.",
8085
8267
  "eval.datasetItems.expectationsEmpty": "Belum ada ekspektasi.",
@@ -9911,6 +10093,89 @@ var id_default = {
9911
10093
  "omnichannel.nav.inbox": "Kotak Masuk",
9912
10094
  "omnichannel.nav.channels": "Kanal",
9913
10095
  "omnichannel.nav.team": "Tim",
10096
+ "omnichannel.nav.settings": "Pengaturan",
10097
+ "omnichannel.nav.reports": "Laporan",
10098
+ "omnichannel.reports.title": "Laporan",
10099
+ "omnichannel.reports.intro": "Bagaimana tim Anda melayani pelanggan dalam periode ini. Hari dihitung dalam {timezone}, zona waktu jam layanan Anda.",
10100
+ "omnichannel.reports.introNoZone": "Bagaimana tim Anda melayani pelanggan dalam periode ini.",
10101
+ "omnichannel.reports.loadError": "Laporan tidak dapat dimuat.",
10102
+ "omnichannel.reports.empty": "Tidak ada data dalam periode ini.",
10103
+ "omnichannel.reports.period.label": "Periode",
10104
+ "omnichannel.reports.period.today": "Hari ini",
10105
+ "omnichannel.reports.period.7d": "7 hari terakhir",
10106
+ "omnichannel.reports.period.30d": "30 hari terakhir",
10107
+ "omnichannel.reports.period.custom": "Pilih tanggal",
10108
+ "omnichannel.reports.period.from": "Dari",
10109
+ "omnichannel.reports.period.to": "Sampai",
10110
+ "omnichannel.reports.period.invalid": "Pilih tanggal awal dan akhir secara berurutan, paling lama 366 hari.",
10111
+ "omnichannel.reports.p90": "90% dalam {value}",
10112
+ "omnichannel.reports.trend.title": "Dari waktu ke waktu",
10113
+ "omnichannel.reports.trend.label": "Penerusan per hari, dengan CSAT dan pencapaian SLA",
10114
+ "omnichannel.reports.byAgent": "Per Human Agent",
10115
+ "omnichannel.reports.byChannel": "Per kanal",
10116
+ "omnichannel.reports.humanAgent": "Human Agent",
10117
+ "omnichannel.reports.channel": "Kanal",
10118
+ "omnichannel.reports.nobody": "Belum ada",
10119
+ "omnichannel.reports.noChannel": "Kanal yang dihapus",
10120
+ "omnichannel.reports.reasons.title": "Alasan penerusan teratas",
10121
+ "omnichannel.reports.reasons.intro": "Alasan yang paling sering diberikan Agent saat meneruskan chat ke tim Anda, sesuai tulisannya.",
10122
+ "omnichannel.reports.reasons.empty": "Agent tidak meneruskan chat dalam periode ini.",
10123
+ "omnichannel.reports.metric.csat_score": "CSAT",
10124
+ "omnichannel.reports.metric.sla_attainment": "Pencapaian SLA",
10125
+ "omnichannel.reports.metric.first_reply_p50_minutes": "Waktu tunggu balasan pertama",
10126
+ "omnichannel.reports.metric.handovers": "Penerusan",
10127
+ "omnichannel.reports.metric.handover_rate": "Tingkat penerusan",
10128
+ "omnichannel.reports.metric.abandonment_rate": "Ditinggalkan",
10129
+ "omnichannel.reports.metric.resolved": "Diselesaikan",
10130
+ "omnichannel.reports.metric.resolution_p50_minutes": "Waktu penyelesaian",
10131
+ "omnichannel.reports.metric.csat_average": "Rata-rata nilai",
10132
+ "omnichannel.reports.metric.csat_responses": "Penilaian",
10133
+ "omnichannel.reports.metric.repeat_contact_rate": "Kontak berulang",
10134
+ "omnichannel.reports.metric.back_to_agent_rate": "Kembali ke Agent",
10135
+ "omnichannel.reports.how.csat_score": "Nilai 4 atau 5 bintang dari semua nilai yang diberikan pelanggan setelah chat diselesaikan oleh tim.",
10136
+ "omnichannel.reports.how.sla_attainment": "Penerusan yang balasan pertamanya tiba sebelum target kanal, dari yang tercapai atau terlewat. Chat yang ditutup sebelum target tanpa balasan tidak dihitung.",
10137
+ "omnichannel.reports.how.first_reply_p50_minutes": "Separuh penerusan mendapat balasan pertama dalam waktu ini; baris kedua adalah waktu 90% mendapatkannya.",
10138
+ "omnichannel.reports.how.handovers": "Chat yang diteruskan ke tim Anda dalam periode ini.",
10139
+ "omnichannel.reports.how.handover_rate": "Chat yang diteruskan ke tim Anda, dari chat yang dikirimi pesan oleh pelanggan dalam periode ini.",
10140
+ "omnichannel.reports.how.abandonment_rate": "Penerusan yang ditutup setelah 24 jam pelanggan diam sebelum ada yang membalas.",
10141
+ "omnichannel.settings.survey.title": "Survei kepuasan",
10142
+ "omnichannel.settings.survey.enabled": "Minta pelanggan memberi nilai",
10143
+ "omnichannel.settings.survey.enabledHint": "Setelah chat diselesaikan oleh tim, pelanggan menerima pertanyaan Anda dengan tombol yang membuka lima pilihan nilai, dari lima bintang sampai satu.",
10144
+ "omnichannel.settings.survey.question": "Pertanyaan",
10145
+ "omnichannel.settings.survey.questionHint": "Dikirim satu kali, tepat setelah chat diselesaikan, selama jendela 24 jam WhatsApp masih terbuka.",
10146
+ "omnichannel.settings.survey.button_label": "Label tombol",
10147
+ "omnichannel.settings.survey.button_labelHint": "Membuka pilihan nilai. Maksimal 20 karakter.",
10148
+ "omnichannel.settings.survey.thanks": "Pesan terima kasih",
10149
+ "omnichannel.settings.survey.thanksHint": "Dikirim setelah pelanggan memberi nilai.",
10150
+ "omnichannel.settings.survey.error.required": "Isi bagian ini, atau nonaktifkan survei.",
10151
+ "omnichannel.settings.survey.error.tooLong": "Maksimal {max} karakter.",
10152
+ "omnichannel.settings.survey.save": "Simpan",
10153
+ "omnichannel.settings.survey.saved": "Survei kepuasan disimpan",
10154
+ "omnichannel.settings.survey.saveError": "Survei tidak dapat disimpan. Coba lagi.",
10155
+ "omnichannel.settings.survey.reloaded": "Survei terakhir yang disimpan ditampilkan. Ulangi perubahan Anda.",
10156
+ "omnichannel.settings.survey.loadError": "Survei kepuasan tidak dapat dimuat.",
10157
+ "omnichannel.inbox.view.soon": "Perlu segera dibalas",
10158
+ "omnichannel.inbox.viewEmpty.soon": "Tidak ada chat yang balasan pertamanya segera jatuh tempo.",
10159
+ "omnichannel.inbox.sla.minutes": "{minutes} mnt",
10160
+ "omnichannel.inbox.sla.hours": "{hours} j {minutes} mnt",
10161
+ "omnichannel.inbox.sla.hoursOnly": "{hours} j",
10162
+ "omnichannel.inbox.sla.dueIn": "Jatuh tempo {time} lagi",
10163
+ "omnichannel.inbox.sla.overdue": "Terlambat {time}",
10164
+ "omnichannel.inbox.sla.alertAtRisk": "Balasan pertama sebuah chat segera jatuh tempo",
10165
+ "omnichannel.inbox.sla.alertOverdue": "Balasan pertama sebuah chat sudah terlambat",
10166
+ "omnichannel.inbox.sla.open": "Buka",
10167
+ "omnichannel.channels.firstReply.label": "Target balasan pertama",
10168
+ "omnichannel.channels.firstReply.none": "Tidak ada",
10169
+ "omnichannel.channels.firstReply.minutes": "menit",
10170
+ "omnichannel.channels.firstReply.save": "Simpan",
10171
+ "omnichannel.channels.firstReply.hint": "Menit dalam jam layanan untuk mengirim balasan pertama setelah chat diteruskan ke tim. Kosongkan jika tanpa target.",
10172
+ "omnichannel.channels.firstReply.invalid": "Masukkan jumlah menit dari 1 sampai 1440, atau kosongkan.",
10173
+ "omnichannel.team.now.label": "Tim saat ini",
10174
+ "omnichannel.team.now.waiting": "Menunggu",
10175
+ "omnichannel.team.now.oldestWait": "Tunggu terlama",
10176
+ "omnichannel.team.now.atRisk": "Segera jatuh tempo",
10177
+ "omnichannel.team.now.overdue": "Terlambat",
10178
+ "omnichannel.team.now.online": "Online",
9914
10179
  "omnichannel.inbox.connect.title": "Tambahkan kanal",
9915
10180
  "omnichannel.inbox.connect.body": "Chat masuk ke sini setelah kanal terhubung.",
9916
10181
  "omnichannel.inbox.connect.action": "Buka Kanal",
@@ -9920,6 +10185,7 @@ var id_default = {
9920
10185
  "omnichannel.inbox.view.waiting": "Menunggu",
9921
10186
  "omnichannel.inbox.view.agent": "Dengan Agent",
9922
10187
  "omnichannel.inbox.view.all": "Semua chat",
10188
+ "omnichannel.inbox.view.resolved": "Selesai",
9923
10189
  "omnichannel.inbox.viewEmpty.mine": "Belum ada chat yang Anda tangani.",
9924
10190
  "omnichannel.inbox.viewEmpty.waiting": "Tidak ada chat yang menunggu orang.",
9925
10191
  "omnichannel.inbox.viewEmpty.agent": "Agent sedang tidak menjawab chat apa pun.",
@@ -9928,19 +10194,26 @@ var id_default = {
9928
10194
  "omnichannel.inbox.panel": "Tampilan dan kanal",
9929
10195
  "omnichannel.inbox.panelOpen": "Tampilkan tampilan dan kanal",
9930
10196
  "omnichannel.inbox.panelCollapse": "Sembunyikan tampilan dan kanal",
9931
- "omnichannel.inbox.segment.label": "Chat terbuka atau selesai",
9932
- "omnichannel.inbox.segment.open": "Terbuka",
9933
- "omnichannel.inbox.segment.resolved": "Selesai",
10197
+ "omnichannel.inbox.state.waiting": "Menunggu",
10198
+ "omnichannel.inbox.state.handedOff": "Diserahkan",
10199
+ "omnichannel.inbox.state.resolved": "Selesai",
10200
+ "omnichannel.inbox.state.expired": "Ditutup karena diam",
10201
+ "omnichannel.inbox.state.returned": "Dikembalikan",
10202
+ "omnichannel.inbox.state.agent": "Bersama Agent",
9934
10203
  "omnichannel.inbox.channelEmpty": "Belum ada chat di nomor ini.",
9935
10204
  "omnichannel.inbox.attachment": "Lampiran",
10205
+ "omnichannel.inbox.search.open": "Cari chat",
10206
+ "omnichannel.inbox.search.close": "Tutup pencarian",
9936
10207
  "omnichannel.inbox.search.placeholder": "Cari chat",
9937
10208
  "omnichannel.inbox.search.empty": "Tidak ada yang cocok dengan pencarian Anda.",
9938
10209
  "omnichannel.inbox.search.chats": "Chat",
9939
10210
  "omnichannel.inbox.search.messages": "Pesan",
9940
10211
  "omnichannel.inbox.preview.note": "Catatan: {text}",
10212
+ "omnichannel.inbox.preview.named": "{name}: {text}",
9941
10213
  "omnichannel.inbox.preview.agent": "Agent: {text}",
9942
10214
  "omnichannel.inbox.preview.you": "Anda: {text}",
9943
10215
  "omnichannel.inbox.preview.humanAgent": "Human Agent: {text}",
10216
+ "omnichannel.inbox.preview.automatic": "Balasan otomatis: {text}",
9944
10217
  "omnichannel.inbox.messageType.image": "Foto",
9945
10218
  "omnichannel.inbox.messageType.video": "Video",
9946
10219
  "omnichannel.inbox.messageType.audio": "Audio",
@@ -9966,6 +10239,7 @@ var id_default = {
9966
10239
  "omnichannel.inbox.sender.agent": "Agent",
9967
10240
  "omnichannel.inbox.sender.you": "Anda",
9968
10241
  "omnichannel.inbox.sender.humanAgent": "Human Agent",
10242
+ "omnichannel.inbox.sender.automatic": "Balasan otomatis",
9969
10243
  "omnichannel.inbox.status.pending": "Mengirim",
9970
10244
  "omnichannel.inbox.status.sent": "Terkirim",
9971
10245
  "omnichannel.inbox.status.delivered": "Diterima",
@@ -10038,22 +10312,36 @@ var id_default = {
10038
10312
  "omnichannel.inbox.contact.notes": "Tentang pelanggan ini",
10039
10313
  "omnichannel.inbox.contact.emailPlaceholder": "Tambahkan email",
10040
10314
  "omnichannel.inbox.contact.locationPlaceholder": "Tambahkan kota atau wilayah",
10041
- "omnichannel.inbox.contact.notesPlaceholder": "Hal yang perlu diketahui tim, misalnya bahasa yang disukai",
10315
+ "omnichannel.inbox.contact.notesPlaceholder": "Tambahkan catatan untuk tim",
10042
10316
  "omnichannel.inbox.contact.saving": "Menyimpan\u2026",
10043
10317
  "omnichannel.inbox.contact.saved": "Tersimpan",
10044
10318
  "omnichannel.inbox.contact.saveFailed": "Detail pelanggan tidak tersimpan",
10045
10319
  "omnichannel.inbox.cases.title": "Riwayat",
10046
10320
  "omnichannel.inbox.cases.none": "Belum ada yang menangani chat ini.",
10047
10321
  "omnichannel.inbox.cases.reason": "\u201C{reason}\u201D",
10048
- "omnichannel.inbox.cases.handedOver": "Agent menyerahkan \xB7 {time}",
10049
- "omnichannel.inbox.cases.takenOver": "Diambil alih dari Agent \xB7 {time}",
10050
- "omnichannel.inbox.cases.assigned": "Ditangani {name}",
10051
- "omnichannel.inbox.cases.firstAssigned": "Pertama ditangani \xB7 {time}",
10052
- "omnichannel.inbox.cases.firstReply": "Balasan pertama oleh {name} \xB7 {time}",
10322
+ "omnichannel.inbox.cases.context": "Info dari Agent",
10323
+ "omnichannel.inbox.cases.summary": "Ringkasan dari Agent",
10324
+ "omnichannel.inbox.cases.handedOver": "Agent menyerahkan",
10325
+ "omnichannel.inbox.cases.takenOver": "Diambil alih dari Agent",
10326
+ "omnichannel.inbox.cases.firstReply": "balasan pertama dalam {delay}",
10053
10327
  "omnichannel.inbox.cases.open": "Terbuka",
10054
- "omnichannel.inbox.cases.resolved": "Diselesaikan oleh {name} \xB7 {time}",
10055
- "omnichannel.inbox.cases.expired": "Ditutup setelah 24 jam tanpa balasan \xB7 {time}",
10056
- "omnichannel.inbox.cases.returned": "Dikembalikan ke Agent \xB7 {time}",
10328
+ "omnichannel.inbox.cases.resolved": "Diselesaikan",
10329
+ "omnichannel.inbox.cases.expired": "Ditutup setelah 24 jam tanpa balasan",
10330
+ "omnichannel.inbox.cases.returned": "Dikembalikan ke Agent",
10331
+ "omnichannel.inbox.cases.countOne": "1 kasus",
10332
+ "omnichannel.inbox.cases.countOther": "{count} kasus",
10333
+ "omnichannel.inbox.cases.notTaken": "Belum diambil",
10334
+ "omnichannel.inbox.cases.firstReplyBy": "balasan pertama oleh {name} dalam {delay}",
10335
+ "omnichannel.inbox.cases.underAMinute": "kurang dari 1 menit",
10336
+ "omnichannel.inbox.cases.minutes": "{count} menit",
10337
+ "omnichannel.inbox.cases.hours": "{count} jam",
10338
+ "omnichannel.inbox.cases.hoursMinutes": "{hours} jam {minutes} menit",
10339
+ "omnichannel.inbox.day.today": "Hari ini",
10340
+ "omnichannel.inbox.day.yesterday": "Kemarin",
10341
+ "omnichannel.inbox.divider.handedOver": "Agent menyerahkan",
10342
+ "omnichannel.inbox.divider.takenOver": "Diambil alih dari Agent",
10343
+ "omnichannel.inbox.divider.resolved": "Diselesaikan oleh {name}",
10344
+ "omnichannel.inbox.divider.returned": "Kembali ke Agent",
10057
10345
  "omnichannel.inbox.search.customers": "Pelanggan",
10058
10346
  "omnichannel.inbox.search.noChat": "Anda tidak memiliki chat dengan pelanggan ini yang dapat dibuka.",
10059
10347
  "omnichannel.role.supervisor": "Supervisor",
@@ -10133,6 +10421,31 @@ var id_default = {
10133
10421
  "omnichannel.channels.save": "Simpan",
10134
10422
  "omnichannel.channels.saving": "Menyimpan\u2026",
10135
10423
  "omnichannel.channels.saved": "Tersimpan",
10424
+ "omnichannel.channels.tabs.label": "Pengaturan channel",
10425
+ "omnichannel.channels.tabs.general": "Umum",
10426
+ "omnichannel.channels.tabs.agent": "Agent",
10427
+ "omnichannel.channels.turnOff.onNote": "Channel ini menerima pesan baru.",
10428
+ "omnichannel.channels.rules.unsaved": "Ada perubahan yang belum disimpan",
10429
+ "omnichannel.channels.section.connection": "Koneksi",
10430
+ "omnichannel.channels.section.status": "Status",
10431
+ "omnichannel.channels.rules.title": "Aturan penyerahan",
10432
+ "omnichannel.channels.rules.body": "Agent juga menyerahkan chat ke tim Anda saat salah satu hal ini terjadi.",
10433
+ "omnichannel.channels.rules.failedLabel": "Saat Agent tidak bisa menjawab",
10434
+ "omnichannel.channels.rules.failedOff": "Tidak pernah",
10435
+ "omnichannel.channels.rules.failedCountOne": "Setelah 1 pesan",
10436
+ "omnichannel.channels.rules.failedCount": "Setelah {count} pesan berturut-turut",
10437
+ "omnichannel.channels.rules.failedHint": "Misalnya saat modelnya tidak tersedia. Jawaban yang berhasil memulai hitungan dari awal.",
10438
+ "omnichannel.channels.rules.keywordsLabel": "Topik komplain",
10439
+ "omnichannel.channels.rules.keywordsPlaceholder": "Ketik topik, lalu tekan Enter",
10440
+ "omnichannel.channels.rules.keywordsHint": "Satu kata atau frasa per topik. Saat pesan pelanggan memuat salah satunya, Agent menjawabnya lalu menyerahkan chat.",
10441
+ "omnichannel.channels.rules.error.tooMany": "Anda bisa menambahkan hingga 50 topik.",
10442
+ "omnichannel.channels.rules.removeTopic": "Hapus {topic}",
10443
+ "omnichannel.channels.rules.error.duplicate": "Topik ini sudah ditambahkan.",
10444
+ "omnichannel.channels.rules.error.noWords": "Topik perlu setidaknya satu huruf atau angka.",
10445
+ "omnichannel.channels.rules.error.tooLong": "Setiap topik paling banyak 100 karakter.",
10446
+ "omnichannel.channels.rules.save": "Simpan",
10447
+ "omnichannel.channels.rules.saving": "Menyimpan\u2026",
10448
+ "omnichannel.channels.rules.saved": "Aturan penyerahan tersimpan",
10136
10449
  "omnichannel.team.title": "Orang di ruang kerja ini",
10137
10450
  "omnichannel.team.intro": "Pemilik dan admin ruang kerja otomatis menjadi Supervisor. Beri orang lain peran Human Agent agar dapat menjawab chat, atau peran Supervisor agar juga dapat melihat semua chat dan mengelola kanal.",
10138
10451
  "omnichannel.team.search": "Cari orang",
@@ -10166,6 +10479,55 @@ var id_default = {
10166
10479
  "omnichannel.loadError.title": "Omnichannel tidak dapat dimuat",
10167
10480
  "omnichannel.loadError.body": "Periksa koneksi Anda lalu coba lagi.",
10168
10481
  "omnichannel.loadError.retry": "Coba lagi",
10482
+ "omnichannel.settings.title": "Pengaturan",
10483
+ "omnichannel.settings.hours.intro": "Atur kapan tim Anda menjawab chat. Di luar jam ini, selama tidak ada yang Online, pelanggan yang diteruskan ke tim Anda atau yang sudah menunggu menerima pesan tutup satu kali setiap kali Anda tutup, dan chat-nya menunggu tim Anda.",
10484
+ "omnichannel.settings.hours.title": "Jam layanan",
10485
+ "omnichannel.settings.hours.openNow": "Buka sekarang",
10486
+ "omnichannel.settings.hours.closedUntil": "Tutup, buka {next_open}",
10487
+ "omnichannel.settings.hours.closedNoOpening": "Tutup, belum ada jam buka",
10488
+ "omnichannel.settings.hours.enabled": "Gunakan jam layanan",
10489
+ "omnichannel.settings.hours.enabledHint": "Jika nonaktif, pesan tutup tidak dikirim. Jam di bawah tetap disimpan.",
10490
+ "omnichannel.settings.hours.timezone": "Zona waktu",
10491
+ "omnichannel.settings.hours.timezoneHint": "Jam dan hari libur di bawah mengikuti zona waktu ini.",
10492
+ "omnichannel.settings.hours.week": "Jam buka",
10493
+ "omnichannel.settings.hours.closed": "Tutup",
10494
+ "omnichannel.settings.hours.from": "{day} buka pukul",
10495
+ "omnichannel.settings.hours.to": "{day} tutup pukul",
10496
+ "omnichannel.settings.hours.endOfDay": "24:00 (akhir hari)",
10497
+ "omnichannel.settings.hours.showTimes": "Tampilkan pilihan jam untuk {field}",
10498
+ "omnichannel.settings.hours.addRange": "Tambah jam",
10499
+ "omnichannel.settings.hours.addRangeFor": "Tambah jam pada {day}",
10500
+ "omnichannel.settings.hours.removeRange": "Hapus jam ini pada {day}",
10501
+ "omnichannel.settings.hours.error.invalidTime": "Pilih jam buka dan jam tutup.",
10502
+ "omnichannel.settings.hours.error.startNotBeforeEnd": "Jam buka harus sebelum jam tutup.",
10503
+ "omnichannel.settings.hours.error.overlap": "Jam ini bertumpang tindih dengan jam lain di hari yang sama.",
10504
+ "omnichannel.settings.hours.error.noRanges": "Tambahkan jam buka pada minimal satu hari, atau nonaktifkan jam layanan.",
10505
+ "omnichannel.settings.hours.closedMessage": "Pesan tutup",
10506
+ "omnichannel.settings.hours.closedMessageHint": "Dikirim di luar jam layanan selama tidak ada yang Online: saat chat diteruskan ke tim Anda, dan kepada pelanggan yang sudah menunggu lalu menulis, satu kali setiap kali Anda tutup. {next_open} diganti dengan waktu buka berikutnya.",
10507
+ "omnichannel.settings.hours.error.message.required": "Masukkan pesan yang diterima pelanggan saat Anda tutup.",
10508
+ "omnichannel.settings.hours.error.message.tooLong": "Pesan paling banyak 1.000 karakter.",
10509
+ "omnichannel.settings.hours.save": "Simpan",
10510
+ "omnichannel.settings.hours.saving": "Menyimpan\u2026",
10511
+ "omnichannel.settings.hours.saved": "Jam layanan disimpan",
10512
+ "omnichannel.settings.hours.saveError": "Jam layanan tidak dapat disimpan. Coba lagi.",
10513
+ "omnichannel.settings.hours.fixErrors": "Perbaiki kolom yang ditandai, lalu simpan lagi.",
10514
+ "omnichannel.settings.hours.reloaded": "Jam layanan terbaru yang tersimpan ditampilkan. Ulangi perubahan Anda.",
10515
+ "omnichannel.settings.day.monday": "Senin",
10516
+ "omnichannel.settings.day.tuesday": "Selasa",
10517
+ "omnichannel.settings.day.wednesday": "Rabu",
10518
+ "omnichannel.settings.day.thursday": "Kamis",
10519
+ "omnichannel.settings.day.friday": "Jumat",
10520
+ "omnichannel.settings.day.saturday": "Sabtu",
10521
+ "omnichannel.settings.day.sunday": "Minggu",
10522
+ "omnichannel.settings.holidays.title": "Hari libur",
10523
+ "omnichannel.settings.holidays.empty": "Belum ada hari libur. Tambahkan tanggal untuk tutup sepanjang hari itu.",
10524
+ "omnichannel.settings.holidays.date": "Tanggal libur",
10525
+ "omnichannel.settings.holidays.name": "Nama hari libur",
10526
+ "omnichannel.settings.holidays.namePlaceholder": "Nama (opsional)",
10527
+ "omnichannel.settings.holidays.add": "Tambah hari libur",
10528
+ "omnichannel.settings.holidays.remove": "Hapus hari libur",
10529
+ "omnichannel.settings.holidays.error.invalidDate": "Pilih tanggal.",
10530
+ "omnichannel.settings.holidays.error.duplicateDate": "Tanggal ini sudah ada di daftar.",
10169
10531
  "platformNav.allApplications": "Semua aplikasi",
10170
10532
  "platformNav.filterApplications": "Filter aplikasi",
10171
10533
  "platformNav.noPins": "Sematkan aplikasi agar tetap ada di bilah samping.",
@@ -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-3ED4DPTV.js';
4
+ import { useIsMobile, useTranslation } from './chunk-IOT4NXZV.js';
5
5
  import { CrossMediumIcon } from './chunk-2P4IEVOQ.js';
6
6
  import { AgentAvatar } from './chunk-RVJEI4ZY.js';
7
7
  import { cn, Checkmark1Icon } from './chunk-LGVMMBL3.js';
package/dist/client.js CHANGED
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  export { capabilitiesOfChatToken, subjectOfChatToken } from './chunk-CCVPZVFK.js';
3
- import { useChatCredential } from './chunk-QGGYWRGV.js';
4
- export { useChatCredential } from './chunk-QGGYWRGV.js';
3
+ import { useChatCredential } from './chunk-6BCUAPW3.js';
4
+ export { useChatCredential } from './chunk-6BCUAPW3.js';
5
5
  import './chunk-WDYCLC4F.js';
6
6
  export { ChatClientContext, useChatClientOptional } from './chunk-6JLWE7M3.js';
7
7
  import './chunk-PR4QN5HX.js';
@@ -86,6 +86,8 @@ interface ResolvedCredential {
86
86
  * failure.
87
87
  */
88
88
  refresh: () => Promise<unknown>;
89
+ /** The Agent's opening message for this visitor, when the website key's token names one (L4); null otherwise. */
90
+ openingMessage: string | null;
89
91
  }
90
92
  declare function useChatCredential(props: ChatCredentialProps): ResolvedCredential;
91
93
 
@@ -1,4 +1,4 @@
1
1
  'use client';
2
- export { useChatCredential } from './chunk-QGGYWRGV.js';
2
+ export { useChatCredential } from './chunk-6BCUAPW3.js';
3
3
  import './chunk-WDYCLC4F.js';
4
4
  import './chunk-PR4QN5HX.js';
package/dist/header.js CHANGED
@@ -1,10 +1,10 @@
1
1
  'use client';
2
- export { ChatHeader, ChatHeaderActions } from './chunk-5SGSD4HS.js';
2
+ export { ChatHeader, ChatHeaderActions } from './chunk-HXTBM76Q.js';
3
3
  import './chunk-X3QVICX7.js';
4
- import './chunk-TY6QQSAF.js';
4
+ import './chunk-A36QN6XG.js';
5
5
  import './chunk-CWAOLMFS.js';
6
6
  import './chunk-T5SANYSX.js';
7
- import './chunk-3ED4DPTV.js';
7
+ import './chunk-IOT4NXZV.js';
8
8
  import './chunk-BRCS2NHC.js';
9
9
  import './chunk-X33KXNO3.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-2G3EHYNS.js';
3
- import './chunk-TY6QQSAF.js';
2
+ export { Message, Thinking } from './chunk-272ALGNG.js';
3
+ import './chunk-A36QN6XG.js';
4
4
  import './chunk-CWAOLMFS.js';
5
5
  import './chunk-T5SANYSX.js';
6
- import './chunk-3ED4DPTV.js';
6
+ import './chunk-IOT4NXZV.js';
7
7
  import './chunk-BRCS2NHC.js';
8
8
  import './chunk-X33KXNO3.js';
9
9
  import './chunk-UWKO24VT.js';
@@ -1,8 +1,8 @@
1
1
  'use client';
2
- export { DEFAULT_SHORTCUTS, NewSessionPrompt, buildDefaultShortcuts } from './chunk-5FR2R2Q5.js';
2
+ export { DEFAULT_SHORTCUTS, NewSessionPrompt, buildDefaultShortcuts } from './chunk-OJRKM2RR.js';
3
3
  import './chunk-X3QVICX7.js';
4
4
  import './chunk-T5SANYSX.js';
5
- import './chunk-3ED4DPTV.js';
5
+ import './chunk-IOT4NXZV.js';
6
6
  import './chunk-2P4IEVOQ.js';
7
7
  import './chunk-RVJEI4ZY.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-4DDOGZVM.js';
3
+ import { resolveStageWidth, zoomPercent, DECK_ZOOM_LEVELS, LazyThumb, ArtifactSkeleton } from './chunk-BH732SE7.js';
4
4
  import { ChevronLeftIcon } from './chunk-CWAOLMFS.js';
5
- import { useTranslation, useIsMobile } from './chunk-3ED4DPTV.js';
5
+ import { useTranslation, useIsMobile } from './chunk-IOT4NXZV.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-4DDOGZVM.js';
2
+ import { zoomPercent, DECK_ZOOM_LEVELS, ArtifactSkeleton, LazyThumb } from './chunk-BH732SE7.js';
3
3
  import { ChevronLeftIcon } from './chunk-CWAOLMFS.js';
4
- import { useTranslation, useIsMobile } from './chunk-3ED4DPTV.js';
4
+ import { useTranslation, useIsMobile } from './chunk-IOT4NXZV.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.52.45",
3
+ "version": "1.52.46",
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.52.45",
93
- "@frontera-sdk/core": "1.52.45",
92
+ "@frontera-sdk/chat": "1.52.46",
93
+ "@frontera-sdk/core": "1.52.46",
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",