@iblai/iblai-js 2.45.1 → 2.47.0

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.
Files changed (87) hide show
  1. package/dist/web-containers/source/_virtual/index2.js +2 -2
  2. package/dist/web-containers/source/_virtual/index3.js +2 -2
  3. package/dist/web-containers/source/ai-message-bubble.js +1 -1
  4. package/dist/web-containers/source/ai-message-bubble.js.map +1 -1
  5. package/dist/web-containers/source/ai-message-download.js +3 -39
  6. package/dist/web-containers/source/ai-message-download.js.map +1 -1
  7. package/dist/web-containers/source/canvas/canvas-export-handlers.js +3 -1
  8. package/dist/web-containers/source/canvas/canvas-export-handlers.js.map +1 -1
  9. package/dist/web-containers/source/canvas-export-handlers.js +3 -1
  10. package/dist/web-containers/source/canvas-export-handlers.js.map +1 -1
  11. package/dist/web-containers/source/chat/ai-message-bubble.js +1 -1
  12. package/dist/web-containers/source/chat/ai-message-bubble.js.map +1 -1
  13. package/dist/web-containers/source/chat/ai-message-download.js +3 -39
  14. package/dist/web-containers/source/chat/ai-message-download.js.map +1 -1
  15. package/dist/web-containers/source/chat/chat-download-dialog.js +144 -0
  16. package/dist/web-containers/source/chat/chat-download-dialog.js.map +1 -0
  17. package/dist/web-containers/source/chat/chat-export.js +57 -0
  18. package/dist/web-containers/source/chat/chat-export.js.map +1 -0
  19. package/dist/web-containers/source/chat/chat-host-context.js.map +1 -1
  20. package/dist/web-containers/source/chat/chat-transcript.js +13 -9
  21. package/dist/web-containers/source/chat/chat-transcript.js.map +1 -1
  22. package/dist/web-containers/source/chat/use-whole-chat.js +63 -0
  23. package/dist/web-containers/source/chat/use-whole-chat.js.map +1 -0
  24. package/dist/web-containers/source/chat-download-dialog.js +144 -0
  25. package/dist/web-containers/source/chat-download-dialog.js.map +1 -0
  26. package/dist/web-containers/source/chat-export.js +57 -0
  27. package/dist/web-containers/source/chat-export.js.map +1 -0
  28. package/dist/web-containers/source/chat-host-context.js.map +1 -1
  29. package/dist/web-containers/source/chat-transcript.js +13 -9
  30. package/dist/web-containers/source/chat-transcript.js.map +1 -1
  31. package/dist/web-containers/source/components/canvas/canvas-export-handlers.js +3 -1
  32. package/dist/web-containers/source/components/canvas/canvas-export-handlers.js.map +1 -1
  33. package/dist/web-containers/source/components/chat/ai-message-bubble.js +1 -1
  34. package/dist/web-containers/source/components/chat/ai-message-bubble.js.map +1 -1
  35. package/dist/web-containers/source/components/chat/ai-message-download.js +3 -39
  36. package/dist/web-containers/source/components/chat/ai-message-download.js.map +1 -1
  37. package/dist/web-containers/source/components/chat/chat-download-dialog.js +144 -0
  38. package/dist/web-containers/source/components/chat/chat-download-dialog.js.map +1 -0
  39. package/dist/web-containers/source/components/chat/chat-export.js +57 -0
  40. package/dist/web-containers/source/components/chat/chat-export.js.map +1 -0
  41. package/dist/web-containers/source/components/chat/chat-host-context.js.map +1 -1
  42. package/dist/web-containers/source/components/chat/chat-transcript.js +13 -9
  43. package/dist/web-containers/source/components/chat/chat-transcript.js.map +1 -1
  44. package/dist/web-containers/source/components/chat/use-whole-chat.js +63 -0
  45. package/dist/web-containers/source/components/chat/use-whole-chat.js.map +1 -0
  46. package/dist/web-containers/source/components/welcome-chat-new.js +24 -5
  47. package/dist/web-containers/source/components/welcome-chat-new.js.map +1 -1
  48. package/dist/web-containers/source/en.json.js +19 -1
  49. package/dist/web-containers/source/en.json.js.map +1 -1
  50. package/dist/web-containers/source/es.json.js +19 -1
  51. package/dist/web-containers/source/es.json.js.map +1 -1
  52. package/dist/web-containers/source/fr.json.js +19 -1
  53. package/dist/web-containers/source/fr.json.js.map +1 -1
  54. package/dist/web-containers/source/i18n/messages/en.json.js +19 -1
  55. package/dist/web-containers/source/i18n/messages/en.json.js.map +1 -1
  56. package/dist/web-containers/source/i18n/messages/es.json.js +19 -1
  57. package/dist/web-containers/source/i18n/messages/es.json.js.map +1 -1
  58. package/dist/web-containers/source/i18n/messages/fr.json.js +19 -1
  59. package/dist/web-containers/source/i18n/messages/fr.json.js.map +1 -1
  60. package/dist/web-containers/source/i18n/messages/zh.json.js +19 -1
  61. package/dist/web-containers/source/i18n/messages/zh.json.js.map +1 -1
  62. package/dist/web-containers/source/index2.js +2 -2
  63. package/dist/web-containers/source/index3.js +2 -2
  64. package/dist/web-containers/source/labels.js +289 -23
  65. package/dist/web-containers/source/labels.js.map +1 -1
  66. package/dist/web-containers/source/messages/en.json.js +19 -1
  67. package/dist/web-containers/source/messages/en.json.js.map +1 -1
  68. package/dist/web-containers/source/messages/es.json.js +19 -1
  69. package/dist/web-containers/source/messages/es.json.js.map +1 -1
  70. package/dist/web-containers/source/messages/fr.json.js +19 -1
  71. package/dist/web-containers/source/messages/fr.json.js.map +1 -1
  72. package/dist/web-containers/source/messages/zh.json.js +19 -1
  73. package/dist/web-containers/source/messages/zh.json.js.map +1 -1
  74. package/dist/web-containers/source/next/index.js +2 -0
  75. package/dist/web-containers/source/next/index.js.map +1 -1
  76. package/dist/web-containers/source/node_modules/.pnpm/css-mediaquery@0.1.2/node_modules/css-mediaquery/index.js +1 -1
  77. package/dist/web-containers/source/node_modules/.pnpm/matchmediaquery@0.4.2/node_modules/matchmediaquery/index.js +1 -1
  78. package/dist/web-containers/source/node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/index.js +1 -1
  79. package/dist/web-containers/source/tsconfig.tsbuildinfo +1 -1
  80. package/dist/web-containers/source/use-whole-chat.js +63 -0
  81. package/dist/web-containers/source/use-whole-chat.js.map +1 -0
  82. package/dist/web-containers/source/web-containers/tsconfig.tsbuildinfo +1 -1
  83. package/dist/web-containers/source/welcome-chat-new.js +24 -5
  84. package/dist/web-containers/source/welcome-chat-new.js.map +1 -1
  85. package/dist/web-containers/source/zh.json.js +19 -1
  86. package/dist/web-containers/source/zh.json.js.map +1 -1
  87. package/package.json +5 -5
@@ -2,49 +2,13 @@ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
2
  import { useState } from 'react';
3
3
  import { useChatT } from './chat-host-context.js';
4
4
  import { Tooltip, TooltipTrigger, TooltipContent } from '../ui/tooltip.js';
5
- import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from './ui/dialog.js';
6
- import { Button } from './ui/button.js';
7
- import { Label } from '../ui/label.js';
8
- import { RadioGroup, RadioGroupItem } from './ui/radio-group.js';
9
- import { sanitizeFilename } from '../canvas/canvas-utils.js';
10
- import { downloadBlob } from '../canvas/canvas-export-handlers.js';
11
- import { buildTranscript, buildMessageTranscript } from './chat-transcript.js';
5
+ import { ChatDownloadDialog } from './chat-download-dialog.js';
12
6
  import Download from '../../node_modules/.pnpm/lucide-react@0.528.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/download.js';
13
7
 
14
- const download = (text, filename) => {
15
- downloadBlob(new Blob([text], { type: 'text/plain;charset=utf-8' }), filename);
16
- };
17
- function AIMessageDownload({ message, messages, mentorName }) {
8
+ function AIMessageDownload({ message, messages, mentorName, tenantKey, sessionId }) {
18
9
  const t = useChatT();
19
10
  const [isOpen, setIsOpen] = useState(false);
20
- const [scope, setScope] = useState('chat');
21
- const labels = {
22
- header: t('chat.chatAiMessageDownload.transcriptHeader', { mentorName }),
23
- roleUser: t('chat.chatAiMessageDownload.roleUser'),
24
- roleAi: mentorName || t('chat.chatAiMessageDownload.roleAi'),
25
- };
26
- const filename = (prefix) => `${sanitizeFilename(`${prefix}-${mentorName}-${new Date().toISOString().slice(0, 10)}`)}.txt`;
27
- const handleDownload = () => {
28
- const text = scope === 'chat'
29
- ? buildTranscript(messages, labels)
30
- : buildMessageTranscript(message, labels);
31
- download(text, filename(scope));
32
- setIsOpen(false);
33
- };
34
- // Always reopen on the default choice rather than the last one used.
35
- const handleOpenChange = (open) => {
36
- if (open)
37
- setScope('chat');
38
- setIsOpen(open);
39
- };
40
- return (jsxs(Fragment, { children: [jsxs(Tooltip, { children: [jsx(TooltipTrigger, { asChild: true, children: jsxs("button", { onClick: () => handleOpenChange(true), className: "text-gray-500 hover:text-gray-700", children: [jsx("span", { className: "sr-only", children: t('chat.chatAiMessageDownload.downloadThisChat') }), jsx(Download, { className: "h-4 w-4" })] }) }), jsx(TooltipContent, { className: "ibl-tooltip-content", children: t('chat.chatAiMessageDownload.download') })] }), jsx(Dialog, { open: isOpen, onOpenChange: handleOpenChange, children: jsxs(DialogContent, { className: "max-w-md", children: [jsxs(DialogHeader, { children: [jsx(DialogTitle, { className: "ibl-dialog-title", children: t('chat.chatAiMessageDownload.dialogTitle') }), jsx(DialogDescription, { className: "sr-only", children: t('chat.chatAiMessageDownload.dialogDescription') })] }), jsx(RadioGroup, { value: scope, onValueChange: (value) => setScope(value), className: "gap-5 py-2", children: [
41
- ['chat', 'entireChat', 'entireChatDescription'],
42
- ['message', 'thisMessage', 'thisMessageDescription'],
43
- ].map(([value, labelKey, descriptionKey]) => (jsxs("div", { className: "flex items-start space-x-3", children: [jsx(RadioGroupItem, { value: value, id: `download-scope-${value}`,
44
- // Explicit utilities, not `.ibl-outline-primary`: tailwind-merge
45
- // can only drop the item's built-in `border-primary`/`text-primary`
46
- // when the override is a real utility class.
47
- className: "mt-0.5 border-[#2563EB] text-[#2563EB]" }), jsxs("div", { className: "grid gap-1", children: [jsx(Label, { htmlFor: `download-scope-${value}`, className: "cursor-pointer font-medium", children: t(`chat.chatAiMessageDownload.${labelKey}`) }), jsx("p", { className: "text-muted-foreground text-sm", children: t(`chat.chatAiMessageDownload.${descriptionKey}`) })] })] }, value))) }), jsx(DialogFooter, { className: "mt-2", children: jsx(Button, { onClick: handleDownload, className: "ibl-button-primary", children: t('chat.chatAiMessageDownload.downloadButton') }) })] }) })] }));
11
+ return (jsxs(Fragment, { children: [jsxs(Tooltip, { children: [jsx(TooltipTrigger, { asChild: true, children: jsxs("button", { onClick: () => setIsOpen(true), className: "text-gray-500 hover:text-gray-700", children: [jsx("span", { className: "sr-only", children: t('chat.chatAiMessageDownload.downloadThisChat') }), jsx(Download, { className: "h-4 w-4" })] }) }), jsx(TooltipContent, { className: "ibl-tooltip-content", children: t('chat.chatAiMessageDownload.download') })] }), jsx(ChatDownloadDialog, { open: isOpen, onOpenChange: setIsOpen, mentorName: mentorName, message: message, messages: messages, tenantKey: tenantKey, sessionId: sessionId })] }));
48
12
  }
49
13
 
50
14
  export { AIMessageDownload };
@@ -1 +1 @@
1
- {"version":3,"file":"ai-message-download.js","sources":["../../../../../../../src/components/chat/ai-message-download.tsx"],"sourcesContent":[null],"names":["_jsxs","_Fragment","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"ai-message-download.js","sources":["../../../../../../../src/components/chat/ai-message-download.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":";;;;;;;AAmBM,SAAU,iBAAiB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAS,EAAA;AAC9F,IAAA,MAAM,CAAC,GAAG,QAAQ,EAAE;IACpB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAE3C,QACEA,4BACEA,IAAA,CAAC,OAAO,eACNC,GAAA,CAAC,cAAc,IAAC,OAAO,EAAA,IAAA,EAAA,QAAA,EACrBD,iBAAQ,OAAO,EAAE,MAAM,SAAS,CAAC,IAAI,CAAC,EAAE,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,CACnFC,cAAM,SAAS,EAAC,SAAS,EAAA,QAAA,EAAE,CAAC,CAAC,6CAA6C,CAAC,GAAQ,EACnFA,GAAA,CAAC,QAAQ,EAAA,EAAC,SAAS,EAAC,SAAS,EAAA,CAAG,IACzB,EAAA,CACM,EACjBA,IAAC,cAAc,EAAA,EAAC,SAAS,EAAC,qBAAqB,YAC5C,CAAC,CAAC,qCAAqC,CAAC,EAAA,CAC1B,IACT,EAEVA,GAAA,CAAC,kBAAkB,EAAA,EACjB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,SAAS,EACvB,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EAAA,CACpB,CAAA,EAAA,CACD;AAEP;;;;"}
@@ -0,0 +1,144 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import { useState, useEffect, useMemo } from 'react';
3
+ import { useChatT, useChatHost } from './chat-host-context.js';
4
+ import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from './ui/dialog.js';
5
+ import { Button } from './ui/button.js';
6
+ import { cn } from '../../lib/utils.js';
7
+ import { Label } from '../ui/label.js';
8
+ import { RadioGroup, RadioGroupItem } from './ui/radio-group.js';
9
+ import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from './ui/select.js';
10
+ import { downloadBlob } from '../canvas/canvas-export-handlers.js';
11
+ import { buildExcelExport, buildTextExport, chatExportFilename } from './chat-export.js';
12
+ import { useWholeChat } from './use-whole-chat.js';
13
+ import LoaderCircle from '../../node_modules/.pnpm/lucide-react@0.528.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/loader-circle.js';
14
+
15
+ const RADIO_ITEM_CLASS =
16
+ // Explicit utilities, not `.ibl-outline-primary`: tailwind-merge can only
17
+ // drop the item's built-in `border-primary`/`text-primary` when the
18
+ // override is a real utility class.
19
+ 'mt-0.5 border-[#2563EB] text-[#2563EB]';
20
+ const NO_MESSAGES = [];
21
+ const FORMATS = {
22
+ txt: { label: 'formatText', description: 'formatTextDescription' },
23
+ xlsx: { label: 'formatExcel', description: 'formatExcelDescription' },
24
+ };
25
+ /**
26
+ * Download / Export dialog for a conversation. The whole chat is read from
27
+ * the backend as soon as the dialog opens, and an Excel file is built as soon
28
+ * as its contents are known, so pressing Save hands over a finished file in
29
+ * the same click: Safari only lets a download start from the click itself.
30
+ */
31
+ function ChatDownloadDialog(props) {
32
+ const { open, onOpenChange } = props;
33
+ return (jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: jsx(DialogContent, { className: "max-w-md", "data-testid": "chat-download-dialog", children: open && jsx(DownloadBody, { ...props }) }) }));
34
+ }
35
+ function DownloadBody({ onOpenChange, mentorName, message, messages = NO_MESSAGES, tenantKey, username, sessionId, saveFile, }) {
36
+ var _a, _b;
37
+ const t = useChatT();
38
+ const host = useChatHost();
39
+ const save = (_b = saveFile !== null && saveFile !== void 0 ? saveFile : (_a = host.config) === null || _a === void 0 ? void 0 : _a.saveFile) !== null && _b !== void 0 ? _b : downloadBlob;
40
+ const canChooseScope = !!message;
41
+ const [scope, setScope] = useState('chat');
42
+ const [format, setFormat] = useState('txt');
43
+ const [prepared, setPrepared] = useState(null);
44
+ const [saving, setSaving] = useState(false);
45
+ const [saveFailed, setSaveFailed] = useState(false);
46
+ const whole = useWholeChat({
47
+ enabled: true,
48
+ org: tenantKey !== null && tenantKey !== void 0 ? tenantKey : host.tenantKey,
49
+ username: username === undefined ? host.username : username,
50
+ sessionId,
51
+ });
52
+ const chatFailed = whole.status === 'error';
53
+ useEffect(() => {
54
+ if (chatFailed && canChooseScope)
55
+ setScope('message');
56
+ }, [chatFailed, canChooseScope]);
57
+ const labels = useMemo(() => ({
58
+ header: t('chat.chatAiMessageDownload.transcriptHeader', { mentorName }),
59
+ roleUser: t('chat.chatAiMessageDownload.roleUser'),
60
+ roleAi: mentorName || t('chat.chatAiMessageDownload.roleAi'),
61
+ columnTime: t('chat.chatAiMessageDownload.columnTime'),
62
+ columnFrom: t('chat.chatAiMessageDownload.columnFrom'),
63
+ columnMessage: t('chat.chatAiMessageDownload.columnMessage'),
64
+ }), [t, mentorName]);
65
+ const messageSource = useMemo(() => (message ? [message] : NO_MESSAGES), [message]);
66
+ const chatSource = whole.messages.length > 0 ? whole.messages : messages;
67
+ const source = scope === 'message' ? messageSource : chatSource;
68
+ const sourceReady = scope === 'message' || whole.status === 'ready';
69
+ useEffect(() => {
70
+ if (format !== 'xlsx' || !sourceReady)
71
+ return;
72
+ let cancelled = false;
73
+ buildExcelExport(source, labels).then((blob) => {
74
+ if (!cancelled)
75
+ setPrepared({ source, labels, blob });
76
+ }, () => {
77
+ if (!cancelled)
78
+ setPrepared({ source, labels, failed: true });
79
+ });
80
+ return () => {
81
+ cancelled = true;
82
+ };
83
+ }, [format, sourceReady, source, labels]);
84
+ const excel = format === 'xlsx' && (prepared === null || prepared === void 0 ? void 0 : prepared.source) === source && prepared.labels === labels
85
+ ? prepared
86
+ : null;
87
+ const fileReady = format === 'txt' || !!(excel === null || excel === void 0 ? void 0 : excel.blob);
88
+ const canSave = sourceReady && !(scope === 'chat' && chatFailed) && fileReady && !saving;
89
+ // Synchronous from click to `save`: an `await` in between loses Safari's
90
+ // user activation and the download is blocked.
91
+ const handleSave = () => {
92
+ const blob = format === 'txt' ? buildTextExport(source, labels) : excel === null || excel === void 0 ? void 0 : excel.blob;
93
+ setSaveFailed(false);
94
+ let result;
95
+ try {
96
+ result = save(blob, chatExportFilename(scope, mentorName, format));
97
+ }
98
+ catch (_a) {
99
+ setSaveFailed(true);
100
+ return;
101
+ }
102
+ if (!result) {
103
+ onOpenChange(false);
104
+ return;
105
+ }
106
+ setSaving(true);
107
+ result.then(() => onOpenChange(false), () => {
108
+ setSaving(false);
109
+ setSaveFailed(true);
110
+ });
111
+ };
112
+ let status = null;
113
+ if (scope === 'chat' && whole.status === 'loading') {
114
+ status = { busy: true, text: t('chat.chatAiMessageDownload.gettingWholeChat') };
115
+ }
116
+ else if (chatFailed) {
117
+ status = {
118
+ busy: false,
119
+ text: t(canChooseScope
120
+ ? 'chat.chatAiMessageDownload.wholeChatErrorMessageStillWorks'
121
+ : 'chat.chatAiMessageDownload.wholeChatError'),
122
+ };
123
+ }
124
+ else if (excel === null || excel === void 0 ? void 0 : excel.failed) {
125
+ status = { busy: false, text: t('chat.chatAiMessageDownload.fileError') };
126
+ }
127
+ else if (format === 'xlsx' && sourceReady && !excel) {
128
+ status = { busy: true, text: t('chat.chatAiMessageDownload.preparingFile') };
129
+ }
130
+ if (saveFailed) {
131
+ status = { busy: false, text: t('chat.chatAiMessageDownload.saveError') };
132
+ }
133
+ return (jsxs(Fragment, { children: [jsxs(DialogHeader, { children: [jsx(DialogTitle, { className: "ibl-dialog-title", children: t(canChooseScope
134
+ ? 'chat.chatAiMessageDownload.dialogTitle'
135
+ : 'chat.chatAiMessageDownload.exportTitle') }), jsx(DialogDescription, { className: "sr-only", children: t('chat.chatAiMessageDownload.formatDialogDescription') })] }), canChooseScope && (jsx(RadioGroup, { value: scope, onValueChange: (value) => setScope(value), className: "gap-5 py-2", "aria-label": t('chat.chatAiMessageDownload.scopeLabel'), children: [
136
+ ['chat', 'entireChat', 'entireChatDescription'],
137
+ ['message', 'thisMessage', 'thisMessageDescription'],
138
+ ].map(([value, labelKey, descriptionKey]) => (jsxs("div", { className: "flex items-start space-x-3", children: [jsx(RadioGroupItem, { value: value, id: `download-scope-${value}`, disabled: value === 'chat' && chatFailed, className: RADIO_ITEM_CLASS }), jsxs("div", { className: "grid gap-1", children: [jsx(Label, { htmlFor: `download-scope-${value}`, className: "cursor-pointer font-medium", children: t(`chat.chatAiMessageDownload.${labelKey}`) }), jsx("p", { className: "text-muted-foreground text-sm", children: t(`chat.chatAiMessageDownload.${descriptionKey}`) })] })] }, value))) })), jsxs("div", { className: "grid gap-2 py-2", children: [jsx(Label, { htmlFor: "download-format", className: "font-medium", children: t('chat.chatAiMessageDownload.formatLabel') }), jsxs(Select, { value: format, onValueChange: (value) => setFormat(value), children: [jsx(SelectTrigger, { id: "download-format", "aria-describedby": "download-format-description", children: jsx(SelectValue, { children: t(`chat.chatAiMessageDownload.${FORMATS[format].label}`) }) }), jsx(SelectContent, { className: "z-[60] bg-white", children: Object.keys(FORMATS).map((value) => (jsx(SelectItem, { value: value, children: jsxs("span", { className: "grid gap-0.5", children: [jsx("span", { children: t(`chat.chatAiMessageDownload.${FORMATS[value].label}`) }), jsx("span", { className: "text-muted-foreground text-xs", children: t(`chat.chatAiMessageDownload.${FORMATS[value].description}`) })] }) }, value))) })] }), jsx("p", { id: "download-format-description", className: "text-muted-foreground text-sm", children: t(`chat.chatAiMessageDownload.${FORMATS[format].description}`) })] }), jsxs("div", { className: "mt-2 flex items-center justify-between gap-3", children: [status && (jsxs("p", { role: status.busy ? 'status' : 'alert', "data-testid": "chat-download-status", className: cn('flex min-w-0 flex-1 items-center gap-2 text-[13px] leading-snug', status.busy ? 'text-muted-foreground' : 'text-red-600'), children: [status.busy && jsx(LoaderCircle, { className: "h-4 w-4 shrink-0 animate-spin", "aria-hidden": true }), jsx("span", { className: "min-w-0", children: status.text })] })), jsxs(Button, { onClick: handleSave, disabled: !canSave, className: "ibl-button-primary ml-auto shrink-0", children: [saving && jsx(LoaderCircle, { className: "mr-2 h-4 w-4 animate-spin", "aria-hidden": true }), t(canChooseScope
139
+ ? 'chat.chatAiMessageDownload.downloadButton'
140
+ : 'chat.chatAiMessageDownload.exportButton')] })] })] }));
141
+ }
142
+
143
+ export { ChatDownloadDialog };
144
+ //# sourceMappingURL=chat-download-dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-download-dialog.js","sources":["../../../../../../../src/components/chat/chat-download-dialog.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs","_Fragment","Loader2"],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import { sanitizeFilename } from '../canvas/canvas-utils.js';
2
+ import { isTranscribable, flattenMarkdown, speakerLabel, buildTranscript } from './chat-transcript.js';
3
+
4
+ const XLSX_MIME = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
5
+ /** `<chat|message>-<agent name>-<YYYY-MM-DD>.<txt|xlsx>` */
6
+ const chatExportFilename = (scope, mentorName, format, date = new Date()) => `${sanitizeFilename(`${scope}-${mentorName}-${date.toISOString().slice(0, 10)}`)}.${format}`;
7
+ const buildTextExport = (messages, labels) => new Blob([buildTranscript(messages, labels)], { type: 'text/plain;charset=utf-8' });
8
+ const chatExportRows = (messages, labels) => messages.filter(isTranscribable).map((message) => {
9
+ var _a;
10
+ return ({
11
+ time: (_a = message.timestamp) !== null && _a !== void 0 ? _a : '',
12
+ from: speakerLabel(message, labels),
13
+ message: flattenMarkdown(message.content),
14
+ });
15
+ });
16
+ /**
17
+ * One sheet, a header row (Time / From / Message), one row per message. The
18
+ * message cell wraps so its line breaks show inside the cell.
19
+ */
20
+ const buildExcelExport = async (messages, labels) => {
21
+ // Loaded on demand: only an Excel export needs the writer.
22
+ const { default: writeXlsxFile } = await import('write-excel-file/browser');
23
+ const blob = await writeXlsxFile(chatExportRows(messages, labels), {
24
+ sheet: 'Chat',
25
+ columns: [
26
+ { header: labels.columnTime, width: 26, cell: (row) => row.time },
27
+ { header: labels.columnFrom, width: 24, cell: (row) => row.from },
28
+ {
29
+ header: labels.columnMessage,
30
+ width: 100,
31
+ cell: (row) => ({ value: row.message, wrap: true }),
32
+ },
33
+ ],
34
+ }).toBlob();
35
+ return blob.type ? blob : new Blob([blob], { type: XLSX_MIME });
36
+ };
37
+ /**
38
+ * A raw message from the session history endpoint, reduced to what an export
39
+ * reads. The live chat's own normalizer (web-utils `normalizeSessionResults`)
40
+ * isn't exported, and an export needs only role, text and time.
41
+ */
42
+ const historyResultToMessage = (result) => {
43
+ var _a, _b, _c, _d, _e;
44
+ const content = Array.isArray(result.content)
45
+ ? ((_b = (_a = result.content.find((item) => item === null || item === void 0 ? void 0 : item.text)) === null || _a === void 0 ? void 0 : _a.text) !== null && _b !== void 0 ? _b : '')
46
+ : ((_c = result.content) !== null && _c !== void 0 ? _c : '');
47
+ return {
48
+ id: String((_d = result.id) !== null && _d !== void 0 ? _d : ''),
49
+ role: result.type === 'human' ? 'user' : result.type === 'system' ? 'system' : 'assistant',
50
+ content: typeof content === 'string' ? content : '',
51
+ timestamp: (_e = result.timestamp) !== null && _e !== void 0 ? _e : '',
52
+ visible: true,
53
+ };
54
+ };
55
+
56
+ export { buildExcelExport, buildTextExport, chatExportFilename, chatExportRows, historyResultToMessage };
57
+ //# sourceMappingURL=chat-export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-export.js","sources":["../../../../../../../src/components/chat/chat-export.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"chat-host-context.js","sources":["../../../../../../../src/components/chat/chat-host-context.tsx"],"sourcesContent":[null],"names":["_jsx","ChatMarkdown"],"mappings":"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"}
1
+ {"version":3,"file":"chat-host-context.js","sources":["../../../../../../../src/components/chat/chat-host-context.tsx"],"sourcesContent":[null],"names":["_jsx","ChatMarkdown"],"mappings":"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"}
@@ -5,8 +5,10 @@ const SEPARATOR = '----';
5
5
  * Links keep their URL — a plain-text transcript has nowhere else to put it.
6
6
  */
7
7
  const flattenInlineSegment = (segment) => segment
8
- .replace(/!\[([^\]]*)\]\([^)]*\)/g, '$1')
9
- .replace(/\[([^\]]*)\]\(([^)]*)\)/g, '$1 ($2)')
8
+ // No brackets inside the groups: a scan can't run past the next `[` or
9
+ // `(`, which keeps these linear on input like `![\![\…` (CodeQL ReDoS).
10
+ .replace(/!\[([^[\]]*)\]\([^()]*\)/g, '$1')
11
+ .replace(/\[([^[\]]*)\]\(([^()]*)\)/g, '$1 ($2)')
10
12
  .replace(/(\*\*|__)(.*?)\1/g, '$2')
11
13
  .replace(/(\*|_)(.*?)\1/g, '$2');
12
14
  /**
@@ -49,19 +51,21 @@ const flattenMarkdown = (content) => {
49
51
  .filter((line) => line !== null)
50
52
  .join('\n');
51
53
  };
52
- /** Messages that belong in a transcript: visible, non-system. */
53
- const isTranscribable = (message) => message.visible !== false && message.role !== 'system';
54
+ /**
55
+ * Messages that belong in a transcript: visible, non-system, with text. Saved
56
+ * history carries tool-call-only assistant turns whose content is empty.
57
+ */
58
+ const isTranscribable = (message) => { var _a; return message.visible !== false && message.role !== 'system' && !!((_a = message.content) === null || _a === void 0 ? void 0 : _a.trim()); };
59
+ const speakerLabel = (message, labels) => message.role === 'user' ? labels.roleUser : labels.roleAi;
54
60
  const renderMessage = (message, labels) => {
55
- const label = message.role === 'user' ? labels.roleUser : labels.roleAi;
56
- return `[${label}] ${message.timestamp}\n${flattenMarkdown(message.content)}\n\n${SEPARATOR}\n`;
61
+ const time = message.timestamp ? ` ${message.timestamp}` : '';
62
+ return `[${speakerLabel(message, labels)}]${time}\n${flattenMarkdown(message.content)}\n\n${SEPARATOR}\n`;
57
63
  };
58
64
  /** Build the plain-text transcript for a whole conversation. */
59
65
  const buildTranscript = (messages, labels) => `${labels.header}\n\n${messages
60
66
  .filter(isTranscribable)
61
67
  .map((message) => renderMessage(message, labels))
62
68
  .join('\n')}`;
63
- /** Build the plain-text transcript for a single message. */
64
- const buildMessageTranscript = (message, labels) => buildTranscript([message], labels);
65
69
 
66
- export { buildMessageTranscript, buildTranscript, flattenMarkdown };
70
+ export { buildTranscript, flattenMarkdown, isTranscribable, speakerLabel };
67
71
  //# sourceMappingURL=chat-transcript.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-transcript.js","sources":["../../../../../../../src/components/chat/chat-transcript.ts"],"sourcesContent":[null],"names":[],"mappings":"AAeA,MAAM,SAAS,GAAG,MAAM;AAExB;;;;AAIG;AACH,MAAM,oBAAoB,GAAG,CAAC,OAAe,KAC3C;AACG,KAAA,OAAO,CAAC,yBAAyB,EAAE,IAAI;AACvC,KAAA,OAAO,CAAC,0BAA0B,EAAE,SAAS;AAC7C,KAAA,OAAO,CAAC,mBAAmB,EAAE,IAAI;AACjC,KAAA,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC;AAEpC;;;;AAIG;AACH,MAAM,aAAa,GAAG,CAAC,IAAY,KACjC;KACG,KAAK,CAAC,YAAY;KAClB,GAAG,CAAC,CAAC,OAAO,KACX,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG;MAClE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE;AACrB,MAAE,oBAAoB,CAAC,OAAO,CAAC;KAElC,IAAI,CAAC,EAAE,CAAC;AAEb,MAAM,gBAAgB,GAAG,CAAC,IAAY,KAAY;IAChD,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;IAC/C,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;IAC1C,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC;AAC3C,IAAA,OAAO,aAAa,CAAC,GAAG,CAAC;AAC3B,CAAC;AAED;;;;;AAKG;AACI,MAAM,eAAe,GAAG,CAAC,OAAe,KAAY;IACzD,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,OAAO,EAAE;IACX;IACA,IAAI,OAAO,GAAG,KAAK;AACnB,IAAA,OAAO;SACJ,KAAK,CAAC,IAAI;AACV,SAAA,GAAG,CAAC,CAAC,IAAI,KAAI;AACZ,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAChC,OAAO,GAAG,CAAC,OAAO;AAClB,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,OAAO,GAAG,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC;AAChD,IAAA,CAAC;SACA,MAAM,CAAC,CAAC,IAAI,KAAqB,IAAI,KAAK,IAAI;SAC9C,IAAI,CAAC,IAAI,CAAC;AACf;AAEA;AACA,MAAM,eAAe,GAAG,CAAC,OAAgB,KACvC,OAAO,CAAC,OAAO,KAAK,KAAK,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ;AAExD,MAAM,aAAa,GAAG,CAAC,OAAgB,EAAE,MAAwB,KAAY;AAC3E,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,KAAK,MAAM,GAAG,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM;AACvE,IAAA,OAAO,IAAI,KAAK,CAAA,EAAA,EAAK,OAAO,CAAC,SAAS,CAAA,EAAA,EAAK,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA,IAAA,EAAO,SAAS,IAAI;AACjG,CAAC;AAED;AACO,MAAM,eAAe,GAAG,CAAC,QAAmB,EAAE,MAAwB,KAC3E,CAAA,EAAG,MAAM,CAAC,MAAM,OAAO;KACpB,MAAM,CAAC,eAAe;AACtB,KAAA,GAAG,CAAC,CAAC,OAAO,KAAK,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC;AAC/C,KAAA,IAAI,CAAC,IAAI,CAAC,CAAA;AAEf;AACO,MAAM,sBAAsB,GAAG,CAAC,OAAgB,EAAE,MAAwB,KAC/E,eAAe,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM;;;;"}
1
+ {"version":3,"file":"chat-transcript.js","sources":["../../../../../../../src/components/chat/chat-transcript.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import { useState, useEffect } from 'react';
2
+ import { useLazyGetSessionIdQuery } from '@iblai/data-layer';
3
+ import { historyResultToMessage } from './chat-export.js';
4
+
5
+ const WHOLE_CHAT_PAGE_SIZE = 100;
6
+ // A runaway `next` link must not loop forever; 50 pages is 5000 messages.
7
+ const WHOLE_CHAT_MAX_PAGES = 50;
8
+ const IDLE = { status: 'idle', messages: [] };
9
+ /**
10
+ * Every saved message of a session. The chat only holds the pages the user
11
+ * scrolled to, so an export reads the whole history itself. A session the
12
+ * backend has never saved (404) or an anonymous chat yields `ready` with no
13
+ * messages — the caller then falls back to what it already has on screen.
14
+ */
15
+ function useWholeChat({ enabled, org, username, sessionId }) {
16
+ const [readSession] = useLazyGetSessionIdQuery();
17
+ const [state, setState] = useState(IDLE);
18
+ useEffect(() => {
19
+ if (!org || !username || !sessionId) {
20
+ setState({ status: 'ready', messages: [] });
21
+ return;
22
+ }
23
+ let cancelled = false;
24
+ setState({ status: 'loading', messages: [] });
25
+ const load = async () => {
26
+ var _a, _b, _c;
27
+ // The endpoint pages newest-first, and each page lists newest-first.
28
+ const newestFirst = [];
29
+ for (let page = 1; page <= WHOLE_CHAT_MAX_PAGES; page++) {
30
+ const result = (await readSession({
31
+ org,
32
+ userId: username,
33
+ sessionId,
34
+ page,
35
+ pageSize: WHOLE_CHAT_PAGE_SIZE,
36
+ }));
37
+ if (result.error) {
38
+ if (result.error.status === 404)
39
+ break;
40
+ throw result.error;
41
+ }
42
+ newestFirst.push(...((_b = (_a = result.data) === null || _a === void 0 ? void 0 : _a.results) !== null && _b !== void 0 ? _b : []));
43
+ if (!((_c = result.data) === null || _c === void 0 ? void 0 : _c.next))
44
+ break;
45
+ }
46
+ return newestFirst.reverse().map(historyResultToMessage);
47
+ };
48
+ load().then((messages) => {
49
+ if (!cancelled)
50
+ setState({ status: 'ready', messages });
51
+ }, () => {
52
+ if (!cancelled)
53
+ setState({ status: 'error', messages: [] });
54
+ });
55
+ return () => {
56
+ cancelled = true;
57
+ };
58
+ }, [enabled, org, username, sessionId, readSession]);
59
+ return state;
60
+ }
61
+
62
+ export { WHOLE_CHAT_MAX_PAGES, WHOLE_CHAT_PAGE_SIZE, useWholeChat };
63
+ //# sourceMappingURL=use-whole-chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-whole-chat.js","sources":["../../../../../../../src/components/chat/use-whole-chat.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAQO,MAAM,oBAAoB,GAAG;AACpC;AACO,MAAM,oBAAoB,GAAG;AAkBpC,MAAM,IAAI,GAAc,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;AAOxD;;;;;AAKG;AACG,SAAU,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAoB,EAAA;AAClF,IAAA,MAAM,CAAC,WAAW,CAAC,GAAG,wBAAwB,EAAE;IAChD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAY,IAAI,CAAC;IAEnD,SAAS,CAAC,MAAK;QAKb,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,EAAE;YACnC,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;YAC3C;QACF;QACA,IAAI,SAAS,GAAG,KAAK;QACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AAC7C,QAAA,MAAM,IAAI,GAAG,YAAW;;;YAEtB,MAAM,WAAW,GAA0B,EAAE;AAC7C,YAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,oBAAoB,EAAE,IAAI,EAAE,EAAE;AACvD,gBAAA,MAAM,MAAM,IAAI,MAAM,WAAW,CAAC;oBAChC,GAAG;AACH,oBAAA,MAAM,EAAE,QAAQ;oBAChB,SAAS;oBACT,IAAI;AACJ,oBAAA,QAAQ,EAAE,oBAAoB;AAC/B,iBAAA,CAAC,CAAgB;AAClB,gBAAA,IAAI,MAAM,CAAC,KAAK,EAAE;AAChB,oBAAA,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,GAAG;wBAAE;oBACjC,MAAM,MAAM,CAAC,KAAK;gBACpB;AACA,gBAAA,WAAW,CAAC,IAAI,CAAC,IAAI,MAAA,CAAA,EAAA,GAAA,MAAM,CAAC,IAAI,0CAAE,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE,CAAC,CAAC;gBACjD,IAAI,EAAC,CAAA,EAAA,GAAA,MAAM,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,CAAA;oBAAE;YAC1B;YACA,OAAO,WAAW,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,sBAAsB,CAAC;AAC1D,QAAA,CAAC;AACD,QAAA,IAAI,EAAE,CAAC,IAAI,CACT,CAAC,QAAQ,KAAI;AACX,YAAA,IAAI,CAAC,SAAS;gBAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QACzD,CAAC,EACD,MAAK;AACH,YAAA,IAAI,CAAC,SAAS;gBAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AAC7D,QAAA,CAAC,CACF;AACD,QAAA,OAAO,MAAK;YACV,SAAS,GAAG,IAAI;AAClB,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;AAEpD,IAAA,OAAO,KAAK;AACd;;;;"}
@@ -1,4 +1,5 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { useRef, useState, useEffect } from 'react';
2
3
  import { useMediaQuery } from '../node_modules/.pnpm/react-responsive@10.0.1_react@19.1.0/node_modules/react-responsive/dist/esm/index.js';
3
4
  import { AppSyncBanner } from './welcome-chat/app-sync-banner.js';
4
5
  import { useExploreMentorsList, EXPLORE_MENTORS_SECTION_ID, ExploreMentors } from './welcome-chat/explore-mentors.js';
@@ -12,6 +13,7 @@ import { WelcomeMessage } from './welcome-chat/welcome-message.js';
12
13
  import { ProjectLandingPage } from './projects/project-landing-page.js';
13
14
  import { useChatHost, useChatT } from './chat/chat-host-context.js';
14
15
  import { useChatMentorSettings } from './chat/hooks/use-chat-mentor-settings.js';
16
+ import ChevronUp from '../node_modules/.pnpm/lucide-react@0.528.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/chevron-up.js';
15
17
  import ChevronDown from '../node_modules/.pnpm/lucide-react@0.528.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/chevron-down.js';
16
18
 
17
19
  /** Width of the centred empty-state composer (#2586 design). */
@@ -34,6 +36,21 @@ function WelcomeChatNew({ mentorName, sessionId, enabledGuidedPrompts, onSubmit,
34
36
  skip: !showExploreMentors || embedMode || !!projectId,
35
37
  });
36
38
  const hasExploreMentors = showExploreMentors && !!((_d = exploreMentors === null || exploreMentors === void 0 ? void 0 : exploreMentors.results) === null || _d === void 0 ? void 0 : _d.length);
39
+ const showExploreButton = hasExploreMentors && !isPhone;
40
+ const rootRef = useRef(null);
41
+ const exploreButtonRef = useRef(null);
42
+ const [exploreInView, setExploreInView] = useState(false);
43
+ useEffect(() => {
44
+ const section = showExploreButton ? document.getElementById(EXPLORE_MENTORS_SECTION_ID) : null;
45
+ if (!section)
46
+ return;
47
+ // Any visible part counts: on the first screen the section starts below the fold, and
48
+ // when Explore is too short for the button to reach the top, the section's top stays
49
+ // low in the view, so a stricter margin would never report it in view.
50
+ const observer = new IntersectionObserver(([entry]) => setExploreInView(entry.isIntersecting));
51
+ observer.observe(section);
52
+ return () => observer.disconnect();
53
+ }, [showExploreButton]);
37
54
  const showConversationStarters = ((_e = host.showConversationStarters) !== null && _e !== void 0 ? _e : false) && host.features.suggestedPrompts;
38
55
  const { data: project } = useGetUserProjectDetailsQuery({
39
56
  tenantKey,
@@ -54,13 +71,15 @@ function WelcomeChatNew({ mentorName, sessionId, enabledGuidedPrompts, onSubmit,
54
71
  // The centred composer is 640px wide (#2586), or narrower when the tenant's
55
72
  // chat area is.
56
73
  const composerMaxWidth = Math.min(chatAreaMaxWidth, EMPTY_STATE_COMPOSER_WIDTH);
57
- return (jsxs("div", { className: "flex h-full flex-col", "data-testid": "chat-empty-state", children: [tenantKey === (config === null || config === void 0 ? void 0 : config.mainTenantKey) && (config === null || config === void 0 ? void 0 : config.appSyncBanner) && jsx(AppSyncBanner, {}), jsxs("div", { className: "relative flex min-h-full w-full flex-1 shrink-0 flex-col md:justify-center md:pb-[83px]", children: [jsxs("div", { className: "flex flex-1 flex-col items-center justify-center px-4 md:flex-none", children: [jsx(WelcomeHeading, { mentorName: mentorName }), jsx("div", { className: "w-full max-w-[640px] text-center md:mb-6", children: jsx(WelcomeMessage, { aiWelcomeMessage: aiWelcomeMessage, sessionId: sessionId, username: username, tenantKey: tenantKey, mentorUniqueId: mentorUniqueId, token: axdToken, isNewSession: isNewSession, className: "text-[15px] leading-[22px] text-gray-600 md:text-base md:leading-6" }) })] }), jsxs("div", { className: "mx-auto w-full", style: { maxWidth: `${composerMaxWidth}px` }, children: [jsx(ChatInputForm, { variant: "redesign", sessionId: sessionId, onSubmit: onSubmit, stopGenerating: stopGenerating, onScreenSharingClick: onScreenSharingClick, isScreenSharingModalOpen: isScreenSharingModalOpen, onPhoneCallClick: onPhoneCallClick, tenantKey: tenantKey, username: username !== null && username !== void 0 ? username : '', setMessage: setMessage, enableSafetyDisclaimer: enableSafetyDisclaimer, isPreviewMode: isPreviewMode, enableWebBrowsing: enableWebBrowsing, isStreaming: isStreaming, updateSessionTools: updateSessionTools, setSessionTools: setSessionTools, activeTools: activeTools, screenSharing: screenSharing, deepResearch: deepResearch, studyMode: studyMode, imageGeneration: imageGeneration, codeInterpreter: codeInterpreter, promptsIsEnabled: promptsIsEnabled, googleSlidesIsEnabled: googleSlidesIsEnabled, googleDocumentIsEnabled: googleDocumentIsEnabled, artifactsEnabled: artifactsEnabled, isConnecting: isConnecting, compactMode: compactMode,
74
+ return (jsxs("div", { ref: rootRef, className: "flex h-full flex-col", "data-testid": "chat-empty-state", children: [tenantKey === (config === null || config === void 0 ? void 0 : config.mainTenantKey) && (config === null || config === void 0 ? void 0 : config.appSyncBanner) && jsx(AppSyncBanner, {}), jsxs("div", { className: "relative flex min-h-full w-full flex-1 shrink-0 flex-col md:justify-center md:pb-[83px]", children: [jsxs("div", { className: "flex flex-1 flex-col items-center justify-center px-4 md:flex-none", children: [jsx(WelcomeHeading, { mentorName: mentorName }), jsx("div", { className: "w-full max-w-[640px] text-center md:mb-6", children: jsx(WelcomeMessage, { aiWelcomeMessage: aiWelcomeMessage, sessionId: sessionId, username: username, tenantKey: tenantKey, mentorUniqueId: mentorUniqueId, token: axdToken, isNewSession: isNewSession, className: "text-[15px] leading-[22px] text-gray-600 md:text-base md:leading-6" }) })] }), jsxs("div", { className: "mx-auto w-full", style: { maxWidth: `${composerMaxWidth}px` }, children: [jsx(ChatInputForm, { variant: "redesign", sessionId: sessionId, onSubmit: onSubmit, stopGenerating: stopGenerating, onScreenSharingClick: onScreenSharingClick, isScreenSharingModalOpen: isScreenSharingModalOpen, onPhoneCallClick: onPhoneCallClick, tenantKey: tenantKey, username: username !== null && username !== void 0 ? username : '', setMessage: setMessage, enableSafetyDisclaimer: enableSafetyDisclaimer, isPreviewMode: isPreviewMode, enableWebBrowsing: enableWebBrowsing, isStreaming: isStreaming, updateSessionTools: updateSessionTools, setSessionTools: setSessionTools, activeTools: activeTools, screenSharing: screenSharing, deepResearch: deepResearch, studyMode: studyMode, imageGeneration: imageGeneration, codeInterpreter: codeInterpreter, promptsIsEnabled: promptsIsEnabled, googleSlidesIsEnabled: googleSlidesIsEnabled, googleDocumentIsEnabled: googleDocumentIsEnabled, artifactsEnabled: artifactsEnabled, isConnecting: isConnecting, compactMode: compactMode,
58
75
  // Phones: up to four guided-prompt rows above the pinned composer.
59
- promptsAbove: showConversationStarters && isPhone ? (jsx(ConversationStarters, { layout: "rows", onTemplateSelect: onSubmit, enabledGuidedPrompts: enabledGuidedPrompts, sessionId: sessionId })) : undefined }), showConversationStarters && !isPhone && (jsx(ConversationStarters, { layout: "wrap", className: "mt-4 px-4", onTemplateSelect: onSubmit, enabledGuidedPrompts: enabledGuidedPrompts, sessionId: sessionId }))] }), hasExploreMentors && !isPhone && (jsxs("button", { type: "button", onClick: () => {
76
+ promptsAbove: showConversationStarters && isPhone ? (jsx(ConversationStarters, { layout: "rows", onTemplateSelect: onSubmit, enabledGuidedPrompts: enabledGuidedPrompts, sessionId: sessionId })) : undefined }), showConversationStarters && !isPhone && (jsx(ConversationStarters, { layout: "wrap", className: "mt-4 px-4", onTemplateSelect: onSubmit, enabledGuidedPrompts: enabledGuidedPrompts, sessionId: sessionId }))] }), showExploreButton && (jsxs("button", { ref: exploreButtonRef, type: "button", onClick: () => {
60
77
  var _a;
61
- return (_a = document
62
- .getElementById(EXPLORE_MENTORS_SECTION_ID)) === null || _a === void 0 ? void 0 : _a.scrollIntoView({ behavior: 'smooth', block: 'start' });
63
- }, className: "absolute bottom-4 left-1/2 flex h-9 -translate-x-1/2 items-center gap-1.5 rounded-full px-3.5 text-[13px] font-medium text-gray-600 hover:bg-gray-100", children: [t('chat.welcomeChatExploreMentors.exploreAgents'), jsx(ChevronDown, { className: "h-4 w-4", "aria-hidden": "true" })] }))] }), showExploreMentors && (jsx("div", { className: "pt-8 pb-12", children: jsx(ExploreMentors, {}) }))] }));
78
+ return (_a = (exploreInView ? rootRef : exploreButtonRef).current) === null || _a === void 0 ? void 0 : _a.scrollIntoView({
79
+ behavior: 'smooth',
80
+ block: 'start',
81
+ });
82
+ }, className: "absolute bottom-4 left-1/2 flex h-9 -translate-x-1/2 items-center gap-1.5 rounded-full px-3.5 text-[13px] font-medium text-gray-600 hover:bg-gray-100", children: [t('chat.welcomeChatExploreMentors.exploreAgents'), exploreInView ? (jsx(ChevronUp, { className: "h-4 w-4", "aria-hidden": "true" })) : (jsx(ChevronDown, { className: "h-4 w-4", "aria-hidden": "true" }))] }))] }), showExploreMentors && (jsx("div", { className: "pt-8 pb-12", children: jsx(ExploreMentors, {}) }))] }));
64
83
  }
65
84
 
66
85
  export { WelcomeChatNew };
@@ -1 +1 @@
1
- {"version":3,"file":"welcome-chat-new.js","sources":["../../../../../../src/components/welcome-chat-new.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"welcome-chat-new.js","sources":["../../../../../../src/components/welcome-chat-new.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs"],"mappings":"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"}
@@ -7230,6 +7230,7 @@ var chat = {
7230
7230
  download: "Download",
7231
7231
  dialogTitle: "Download Chat",
7232
7232
  dialogDescription: "Choose what you would like to download as a text file.",
7233
+ formatDialogDescription: "Choose what to download and the type of file.",
7233
7234
  entireChat: "Entire chat",
7234
7235
  entireChatDescription: "Every message in this conversation.",
7235
7236
  thisMessage: "This message only",
@@ -7237,7 +7238,24 @@ var chat = {
7237
7238
  downloadButton: "Download",
7238
7239
  transcriptHeader: "Chat with {mentorName}",
7239
7240
  roleUser: "You",
7240
- roleAi: "AI"
7241
+ roleAi: "AI",
7242
+ scopeLabel: "What to download",
7243
+ formatLabel: "File type",
7244
+ formatText: "Text (.txt)",
7245
+ formatTextDescription: "Plain text that opens anywhere.",
7246
+ formatExcel: "Excel (.xlsx)",
7247
+ formatExcelDescription: "A spreadsheet with one row per message.",
7248
+ exportTitle: "Export Chat",
7249
+ exportButton: "Export",
7250
+ gettingWholeChat: "Getting the whole chat…",
7251
+ preparingFile: "Getting your file ready…",
7252
+ wholeChatError: "We couldn't get this chat. Please try again.",
7253
+ wholeChatErrorMessageStillWorks: "We couldn't get the whole chat. You can still download this message.",
7254
+ fileError: "We couldn't make the Excel file. Please try again.",
7255
+ saveError: "We couldn't save the file. Please try again.",
7256
+ columnTime: "Time",
7257
+ columnFrom: "From",
7258
+ columnMessage: "Message"
7241
7259
  },
7242
7260
  chatAiMessageRating: {
7243
7261
  positiveFeedbackSrOnly: "Positive Feedback Thumbs Up",