From 680714c8b7453a46d7eb68dd5763fa72963a96d6 Mon Sep 17 00:00:00 2001 From: chloebyun-wd Date: Wed, 25 Mar 2026 14:03:41 -0700 Subject: [PATCH 1/7] feat: add plain regenerate response action --- dist/components/bubbles/BotBubble.d.ts.map | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dist/components/bubbles/BotBubble.d.ts.map b/dist/components/bubbles/BotBubble.d.ts.map index 04aca0594..5c73c8bda 100644 --- a/dist/components/bubbles/BotBubble.d.ts.map +++ b/dist/components/bubbles/BotBubble.d.ts.map @@ -1 +1,5 @@ -{"version":3,"file":"BotBubble.d.ts","sourceRoot":"","sources":["../../../src/components/bubbles/BotBubble.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAc,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAS1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAI9D,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3E,0BAA0B,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/C,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAElC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,WAAW,CAAC;CAC/B,CAAC;AAOF,eAAO,MAAM,SAAS,UAAW,KAAK,mCAkkBrC,CAAC"} \ No newline at end of file +<<<<<<< HEAD +{"version":3,"file":"BotBubble.d.ts","sourceRoot":"","sources":["../../../src/components/bubbles/BotBubble.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAc,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAS1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAI9D,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3E,0BAA0B,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/C,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAElC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,WAAW,CAAC;CAC/B,CAAC;AAOF,eAAO,MAAM,SAAS,UAAW,KAAK,mCAkkBrC,CAAC"} +======= +{"version":3,"file":"BotBubble.d.ts","sourceRoot":"","sources":["../../../src/components/bubbles/BotBubble.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAc,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAQ1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAI9D,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3E,0BAA0B,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/C,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAElC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,WAAW,CAAC;CAC/B,CAAC;AAOF,eAAO,MAAM,SAAS,UAAW,KAAK,mCAyjBrC,CAAC"} +>>>>>>> a63d543 (feat: add plain regenerate response action) From ce269f0b3f0231c1b5b44b2f049b0b09fdf24261 Mon Sep 17 00:00:00 2001 From: chloebyun-wd Date: Wed, 25 Mar 2026 14:04:59 -0700 Subject: [PATCH 2/7] feat: add response version pagination for regenerate. Persist regenerated outputs on each assistant message and add previous/next navigation so users can compare alternate regenerated responses in place. --- src/components/Bot.tsx | 122 +++++++++++++++- src/components/bubbles/BotBubble.tsx | 204 +++++++++++++++++++++------ 2 files changed, 277 insertions(+), 49 deletions(-) diff --git a/src/components/Bot.tsx b/src/components/Bot.tsx index 8562a31fc..ec02dd025 100644 --- a/src/components/Bot.tsx +++ b/src/components/Bot.tsx @@ -116,6 +116,24 @@ export type AgentFlowExecutedData = { status?: ExecutionState; }; +export type MessageResponseVersion = { + message?: string; + messageId?: string; + id?: string; + sourceDocuments?: any; + fileAnnotations?: any; + agentReasoning?: IAgentReasoning[]; + agentFlowExecutedData?: any; + usedTools?: any[]; + action?: IAction | null; + artifacts?: Partial[]; + thinking?: string; + thinkingDuration?: number; + isThinking?: boolean; + rating?: FeedbackRatingType; + dateTime?: string; +}; + export type MessageType = { messageId?: string; message: string; @@ -137,6 +155,8 @@ export type MessageType = { thinking?: string; thinkingDuration?: number; isThinking?: boolean; + responseVersions?: MessageResponseVersion[]; + responseVersionIndex?: number; }; type IUploads = { @@ -496,6 +516,7 @@ export const Bot = (botProps: BotProps & { class?: string }) => { const [isMessageStopping, setIsMessageStopping] = createSignal(false); const [starterPrompts, setStarterPrompts] = createSignal([], { equals: false }); const [chatFeedbackStatus, setChatFeedbackStatus] = createSignal(false); + const [chatFeedbackRegenerateResponseStatus, setChatFeedbackRegenerateResponseStatus] = createSignal(false); const [fullFileUpload, setFullFileUpload] = createSignal(false); const [uploadsConfig, setUploadsConfig] = createSignal(); const [leadsConfig, setLeadsConfig] = createSignal(); @@ -881,6 +902,51 @@ export const Bot = (botProps: BotProps & { class?: string }) => { handleSubmit(prompt); }; + const createResponseVersion = (message: Partial): MessageResponseVersion => ({ + message: message.message ?? '', + messageId: message.messageId, + id: message.id, + sourceDocuments: message.sourceDocuments, + fileAnnotations: message.fileAnnotations, + agentReasoning: message.agentReasoning, + agentFlowExecutedData: message.agentFlowExecutedData, + usedTools: message.usedTools, + action: message.action, + artifacts: message.artifacts, + thinking: message.thinking, + thinkingDuration: message.thinkingDuration, + isThinking: message.isThinking, + rating: message.rating, + dateTime: message.dateTime, + }); + + const parseConfigBoolean = (value: unknown, defaultValue: boolean) => { + if (typeof value === 'boolean') return value; + if (typeof value === 'string') { + const normalized = value.trim().toLowerCase(); + if (normalized === 'true') return true; + if (normalized === 'false') return false; + } + return defaultValue; + }; + + const getLastApiMessageIndex = () => { + const currentMessages = messages(); + for (let i = currentMessages.length - 1; i >= 0; i--) { + if (currentMessages[i].type === 'apiMessage') return i; + } + return -1; + }; + + const canRegenerateResponse = (messageIndex: number) => { + if (!chatFeedbackStatus() || !chatFeedbackRegenerateResponseStatus() || loading()) return false; + if (messageIndex !== getLastApiMessageIndex()) return false; + const previousMessage = messages()[messageIndex - 1]; + if (!previousMessage || previousMessage.type !== 'userMessage') return false; + if (previousMessage.fileUploads?.length) return false; + return true; + }; + const handleRegenerateResponse = async (messageIndex: number) => { if (loading()) return; if (previews().length) return; @@ -893,6 +959,11 @@ export const Bot = (botProps: BotProps & { class?: string }) => { const previousMessage = currentMessages[messageIndex - 1]; if (!previousMessage || previousMessage.type !== 'userMessage' || previousMessage.fileUploads?.length) return; + const existingResponseVersions = + targetMessage.responseVersions && targetMessage.responseVersions.length > 0 + ? [...targetMessage.responseVersions] + : [createResponseVersion(targetMessage)]; + setFollowUpPrompts([]); const updatedMessages = currentMessages.slice(0, messageIndex); addChatMessage(updatedMessages); @@ -900,7 +971,10 @@ export const Bot = (botProps: BotProps & { class?: string }) => { // Note: chatId is kept so the server retains conversation context up to this point. // The server's history will still include messages that were removed client-side - await handleSubmit(previousMessage.message, undefined, undefined, { skipAddUserMessage: true }); + await handleSubmit(previousMessage.message, undefined, undefined, { + skipAddUserMessage: true, + responseVersions: existingResponseVersions, + }); }; const updateMetadata = (data: any, input: string) => { @@ -945,7 +1019,11 @@ export const Bot = (botProps: BotProps & { class?: string }) => { } }; - const fetchResponseFromEventStream = async (chatflowid: string, params: any) => { + const fetchResponseFromEventStream = async ( + chatflowid: string, + params: any, + options?: { skipAddUserMessage?: boolean; responseVersions?: MessageResponseVersion[] }, + ) => { const chatId = params.chatId; const input = params.question; params.streaming = true; @@ -988,7 +1066,15 @@ export const Bot = (botProps: BotProps & { class?: string }) => { const payload = JSON.parse(ev.data); switch (payload.event) { case 'start': - setMessages((prevMessages) => [...prevMessages, { message: '', type: 'apiMessage' }]); + setMessages((prevMessages) => { + const newMessage: MessageType = { message: '', type: 'apiMessage' }; + if (options?.responseVersions && options.responseVersions.length > 0) { + const responseVersions = [...options.responseVersions, createResponseVersion(newMessage)]; + newMessage.responseVersions = responseVersions; + newMessage.responseVersionIndex = responseVersions.length - 1; + } + return [...prevMessages, newMessage]; + }); break; case 'token': updateLastMessage(payload.data); @@ -1192,7 +1278,7 @@ export const Bot = (botProps: BotProps & { class?: string }) => { value: string | object, action?: IAction | undefined | null, humanInput?: any, - options?: { skipAddUserMessage?: boolean }, + options?: { skipAddUserMessage?: boolean; responseVersions?: MessageResponseVersion[] }, ) => { if (typeof value === 'string' && value.trim() === '') { const containsFile = previews().filter((item) => !item.mime.startsWith('image') && item.type !== 'audio').length > 0; @@ -1259,7 +1345,7 @@ export const Bot = (botProps: BotProps & { class?: string }) => { if (humanInput) body.humanInput = humanInput; if (isChatFlowAvailableToStream()) { - fetchResponseFromEventStream(props.chatflowid, body); + fetchResponseFromEventStream(props.chatflowid, body, options); } else { const result = await sendMessageQuery({ chatflowid: props.chatflowid, @@ -1281,7 +1367,7 @@ export const Bot = (botProps: BotProps & { class?: string }) => { playReceiveSound(); setMessages((prevMessages) => { - const newMessage = { + const baseResponseMessage = { message: text, id: data?.chatMessageId, sourceDocuments: data?.sourceDocuments, @@ -1297,6 +1383,21 @@ export const Bot = (botProps: BotProps & { class?: string }) => { feedback: null, dateTime: new Date().toISOString(), }; + + const responseVersions = + options?.responseVersions && options.responseVersions.length > 0 + ? [...options.responseVersions, createResponseVersion(baseResponseMessage)] + : undefined; + + const newMessage = { + ...baseResponseMessage, + ...(responseVersions + ? { + responseVersions, + responseVersionIndex: responseVersions.length - 1, + } + : {}), + }; const allMessages = [...prevMessages, newMessage]; addChatMessage(allMessages); return allMessages; @@ -1491,6 +1592,14 @@ export const Bot = (botProps: BotProps & { class?: string }) => { rating: message.rating, dateTime: message.dateTime, }; + if (message.responseVersionIndex !== undefined) chatHistory.responseVersionIndex = message.responseVersionIndex; + if ((message as any).responseVersions) { + const responseVersions = + typeof (message as any).responseVersions === 'string' + ? JSON.parse((message as any).responseVersions) + : (message as any).responseVersions; + if (Array.isArray(responseVersions)) chatHistory.responseVersions = responseVersions; + } if (message.sourceDocuments) chatHistory.sourceDocuments = message.sourceDocuments; if (message.fileAnnotations) chatHistory.fileAnnotations = message.fileAnnotations; if (message.fileUploads) chatHistory.fileUploads = message.fileUploads; @@ -2633,6 +2742,7 @@ export const Bot = (botProps: BotProps & { class?: string }) => { avatarSrc={props.botMessage?.avatarSrc} chatFeedbackStatus={chatFeedbackStatus()} onRegenerateResponse={() => handleRegenerateResponse(index())} + showRegenerateResponseButton={canRegenerateResponse(index())} fontSize={props.fontSize} isLoading={loading() && index() === messages().length - 1} showAgentMessages={props.showAgentMessages} diff --git a/src/components/bubbles/BotBubble.tsx b/src/components/bubbles/BotBubble.tsx index f1a888cd5..4f3b36391 100644 --- a/src/components/bubbles/BotBubble.tsx +++ b/src/components/bubbles/BotBubble.tsx @@ -1,4 +1,4 @@ -import { createEffect, Show, createSignal, onMount, For } from 'solid-js'; +import { createEffect, createMemo, Show, createSignal, onMount, For } from 'solid-js'; import { Avatar } from '../avatars/Avatar'; import { Marked } from '@ts-stack/markdown'; import DOMPurify from 'dompurify'; @@ -38,6 +38,7 @@ type Props = { handleActionClick: (elem: any, action: IAction | undefined | null) => void; handleSourceDocumentsClick: (src: any) => void; onRegenerateResponse?: () => void; + showRegenerateResponseButton?: boolean; // TTS props isTTSEnabled?: boolean; isTTSLoading?: Record; @@ -65,13 +66,62 @@ export const BotBubble = (props: Props) => { const [thumbsUpColor, setThumbsUpColor] = createSignal(props.feedbackColor ?? defaultFeedbackColor); // default color const [thumbsDownColor, setThumbsDownColor] = createSignal(props.feedbackColor ?? defaultFeedbackColor); // default color const [isTracesDialogOpen, setIsTracesDialogOpen] = createSignal(false); + const [responseVersionIndex, setResponseVersionIndex] = createSignal(0); + const [ratingByMessageId, setRatingByMessageId] = createSignal>({}); // Store a reference to the bot message element for the copyMessageToClipboard function const [botMessageElement, setBotMessageElement] = createSignal(null); + const responseVersions = createMemo(() => { + if (props.message.responseVersions && props.message.responseVersions.length > 0) return props.message.responseVersions; + return [props.message]; + }); + + const totalResponseVersions = createMemo(() => responseVersions().length); + const hasMultipleResponseVersions = createMemo(() => totalResponseVersions() > 1); + console.log('hasMultipleResponseVersions', hasMultipleResponseVersions()); + + const activeMessage = createMemo(() => { + const versions = responseVersions(); + const safeIndex = Math.min(Math.max(responseVersionIndex(), 0), versions.length - 1); + const selectedVersion = versions[safeIndex] ?? props.message; + const isLatestVersion = safeIndex === versions.length - 1; + if (isLatestVersion) { + // Keep the newest version in sync with streaming updates stored in top-level message fields. + return { ...selectedVersion, ...props.message }; + } + return selectedVersion; + }); + + const currentRating = () => { + const active = activeMessage(); + const activeMessageId = active.messageId; + if (activeMessageId && ratingByMessageId()[activeMessageId]) return ratingByMessageId()[activeMessageId]; + return active.rating ?? ''; + }; + const setBotMessageRef = (el: HTMLSpanElement) => { if (el) { - el.innerHTML = Marked.parse(props.message.message); + setBotMessageElement(el); + } + }; + + createEffect(() => { + const versions = responseVersions(); + if (versions.length === 0) { + setResponseVersionIndex(0); + return; + } + const defaultIndex = props.message.responseVersionIndex ?? versions.length - 1; + const safeIndex = Math.min(Math.max(defaultIndex, 0), versions.length - 1); + setResponseVersionIndex(safeIndex); + }); + + createEffect(() => { + const el = botMessageElement(); + const messageData = activeMessage(); + if (el) { + el.innerHTML = Marked.parse(messageData.message ?? ''); // Apply textColor to all links, headings, and other markdown elements except code const textColor = props.textColor ?? defaultTextColor; @@ -98,19 +148,21 @@ export const BotBubble = (props: Props) => { link.target = '_blank'; }); - // Store the element ref for the copy function - setBotMessageElement(el); - - if (props.message.rating) { - setRating(props.message.rating); - if (props.message.rating === 'THUMBS_UP') { - setThumbsUpColor('#006400'); - } else if (props.message.rating === 'THUMBS_DOWN') { - setThumbsDownColor('#8B0000'); - } + const activeRating = currentRating(); + setRating(activeRating); + if (activeRating === 'THUMBS_UP') { + setThumbsUpColor('#006400'); + setThumbsDownColor(props.feedbackColor ?? defaultFeedbackColor); + } else if (activeRating === 'THUMBS_DOWN') { + setThumbsDownColor('#8B0000'); + setThumbsUpColor(props.feedbackColor ?? defaultFeedbackColor); + } else { + setThumbsUpColor(props.feedbackColor ?? defaultFeedbackColor); + setThumbsDownColor(props.feedbackColor ?? defaultFeedbackColor); } - if (props.fileAnnotations && props.fileAnnotations.length) { - for (const annotations of props.fileAnnotations) { + const fileAnnotations = messageData.fileAnnotations ?? props.fileAnnotations; + if (fileAnnotations && fileAnnotations.length) { + for (const annotations of fileAnnotations) { const button = document.createElement('button'); button.textContent = annotations.fileName; button.className = @@ -127,7 +179,7 @@ export const BotBubble = (props: Props) => { } } } - }; + }); const downloadFile = async (fileAnnotation: any) => { try { @@ -163,14 +215,30 @@ export const BotBubble = (props: Props) => { }; const saveToLocalStorage = (rating: FeedbackRatingType) => { + const activeMessageId = activeMessage().messageId; + if (!activeMessageId) return; const chatDetails = localStorage.getItem(`${props.chatflowid}_EXTERNAL`); if (!chatDetails) return; try { const parsedDetails = JSON.parse(chatDetails); const messages: MessageType[] = parsedDetails.chatHistory || []; - const message = messages.find((msg) => msg.messageId === props.message.messageId); - if (!message) return; - message.rating = rating; + let hasUpdate = false; + for (const message of messages) { + if (message.messageId === activeMessageId) { + message.rating = rating; + hasUpdate = true; + continue; + } + if (message.responseVersions && message.responseVersions.length > 0) { + for (const version of message.responseVersions) { + if (version.messageId === activeMessageId) { + version.rating = rating; + hasUpdate = true; + } + } + } + } + if (!hasUpdate) return; localStorage.setItem(`${props.chatflowid}_EXTERNAL`, JSON.stringify({ ...parsedDetails, chatHistory: messages })); } catch (e) { return; @@ -202,10 +270,12 @@ export const BotBubble = (props: Props) => { const onThumbsUpClick = async () => { if (rating() === '') { + const activeMessageId = activeMessage().messageId; + if (!activeMessageId) return; const body = { chatflowid: props.chatflowid, chatId: props.chatId, - messageId: props.message?.messageId as string, + messageId: activeMessageId, rating: 'THUMBS_UP' as FeedbackRatingType, content: '', }; @@ -221,6 +291,7 @@ export const BotBubble = (props: Props) => { let id = ''; if (data && data.id) id = data.id; setRating('THUMBS_UP'); + setRatingByMessageId((prev) => ({ ...prev, [activeMessageId]: 'THUMBS_UP' })); setFeedbackId(id); setShowFeedbackContentModal(true); // update the thumbs up color state @@ -232,10 +303,12 @@ export const BotBubble = (props: Props) => { const onThumbsDownClick = async () => { if (rating() === '') { + const activeMessageId = activeMessage().messageId; + if (!activeMessageId) return; const body = { chatflowid: props.chatflowid, chatId: props.chatId, - messageId: props.message?.messageId as string, + messageId: activeMessageId, rating: 'THUMBS_DOWN' as FeedbackRatingType, content: '', }; @@ -251,6 +324,7 @@ export const BotBubble = (props: Props) => { let id = ''; if (data && data.id) id = data.id; setRating('THUMBS_DOWN'); + setRatingByMessageId((prev) => ({ ...prev, [activeMessageId]: 'THUMBS_DOWN' })); setFeedbackId(id); setShowFeedbackContentModal(true); // update the thumbs down color state @@ -403,6 +477,9 @@ export const BotBubble = (props: Props) => { } }; + const activeArtifacts = createMemo(() => activeMessage().artifacts ?? []); + const activeSourceDocuments = createMemo(() => activeMessage().sourceDocuments ?? []); + return (
@@ -410,13 +487,29 @@ export const BotBubble = (props: Props) => {
- {props.showAgentMessages && props.message.agentReasoning && ( + {props.showAgentMessages && + activeMessage().agentFlowExecutedData && + Array.isArray(activeMessage().agentFlowExecutedData) && + activeMessage().agentFlowExecutedData.length > 0 && ( +
+ +
+ )} + {props.showAgentMessages && activeMessage().agentReasoning && (
Agent Messages
- + {(agent) => { const agentMessages = agent.messages ?? []; let msgContent = agent.instructions || (agentMessages.length > 1 ? agentMessages.join('\\n') : agentMessages[0]); @@ -439,27 +532,27 @@ export const BotBubble = (props: Props) => {
)} - {props.message.artifacts && props.message.artifacts.length > 0 && ( + {activeArtifacts().length > 0 && (
- + {(item) => { return item !== null ? <>{renderArtifacts(item)} : null; }}
)} - {props.message.thinking && ( + {activeMessage().thinking && (
)} - {props.message.message && ( + {activeMessage().message && ( { }} /> )} - {props.message.action && ( + {activeMessage().action && (
- + {(action) => { return ( <> @@ -482,7 +575,7 @@ export const BotBubble = (props: Props) => {
- {props.message.sourceDocuments && props.message.sourceDocuments.length && ( + {activeSourceDocuments().length > 0 && ( <> {props.sourceDocsTitle}
- + {(src) => { const URL = isValidURL(src.metadata.source); return ( @@ -540,22 +633,22 @@ export const BotBubble = (props: Props) => {
- + { - const messageId = props.message.id || props.message.messageId; + const messageId = activeMessage().id || activeMessage().messageId; return !!(messageId && props.isTTSLoading?.[messageId]); })()} isPlaying={(() => { - const messageId = props.message.id || props.message.messageId; + const messageId = activeMessage().id || activeMessage().messageId; return !!(messageId && props.isTTSPlaying?.[messageId]); })()} onClick={() => { - const messageId = props.message.id || props.message.messageId; + const messageId = activeMessage().id || activeMessage().messageId; if (!messageId) return; // Don't allow TTS for messages without valid IDs - const messageText = props.message.message || ''; + const messageText = activeMessage().message || ''; if (props.isTTSLoading?.[messageId]) { return; // Prevent multiple clicks while loading } @@ -567,13 +660,38 @@ export const BotBubble = (props: Props) => { }} /> - {props.chatFeedbackStatus && props.message.messageId && ( + {props.chatFeedbackStatus && activeMessage().messageId && ( <> props.onRegenerateResponse?.()} /> + +
+ + {`${responseVersionIndex() + 1}/${totalResponseVersions()}`} + +
+
copyMessageToClipboard()} />
@@ -591,9 +709,9 @@ export const BotBubble = (props: Props) => { onClick={onThumbsDownClick} /> ) : null} - +
- {formatDateTime(props.message.dateTime, props?.dateTimeToggle?.date, props?.dateTimeToggle?.time)} + {formatDateTime(activeMessage().dateTime, props?.dateTimeToggle?.date, props?.dateTimeToggle?.time)}
From 218a51d5e31f28e079f0c597de0214226c67e7fc Mon Sep 17 00:00:00 2001 From: chloebyun-wd Date: Thu, 2 Apr 2026 15:36:02 -0700 Subject: [PATCH 3/7] fix thumbs feedback --- src/components/Bot.tsx | 56 +++++++++++++++++---------- src/components/bubbles/BotBubble.tsx | 58 +++++++++++++--------------- 2 files changed, 62 insertions(+), 52 deletions(-) diff --git a/src/components/Bot.tsx b/src/components/Bot.tsx index ec02dd025..4d7539b5d 100644 --- a/src/components/Bot.tsx +++ b/src/components/Bot.tsx @@ -129,7 +129,6 @@ export type MessageResponseVersion = { artifacts?: Partial[]; thinking?: string; thinkingDuration?: number; - isThinking?: boolean; rating?: FeedbackRatingType; dateTime?: string; }; @@ -516,7 +515,7 @@ export const Bot = (botProps: BotProps & { class?: string }) => { const [isMessageStopping, setIsMessageStopping] = createSignal(false); const [starterPrompts, setStarterPrompts] = createSignal([], { equals: false }); const [chatFeedbackStatus, setChatFeedbackStatus] = createSignal(false); - const [chatFeedbackRegenerateResponseStatus, setChatFeedbackRegenerateResponseStatus] = createSignal(false); + const [messageRatings, setMessageRatings] = createSignal>({}); const [fullFileUpload, setFullFileUpload] = createSignal(false); const [uploadsConfig, setUploadsConfig] = createSignal(); const [leadsConfig, setLeadsConfig] = createSignal(); @@ -915,21 +914,10 @@ export const Bot = (botProps: BotProps & { class?: string }) => { artifacts: message.artifacts, thinking: message.thinking, thinkingDuration: message.thinkingDuration, - isThinking: message.isThinking, rating: message.rating, dateTime: message.dateTime, }); - const parseConfigBoolean = (value: unknown, defaultValue: boolean) => { - if (typeof value === 'boolean') return value; - if (typeof value === 'string') { - const normalized = value.trim().toLowerCase(); - if (normalized === 'true') return true; - if (normalized === 'false') return false; - } - return defaultValue; - }; - const getLastApiMessageIndex = () => { const currentMessages = messages(); for (let i = currentMessages.length - 1; i >= 0; i--) { @@ -939,7 +927,7 @@ export const Bot = (botProps: BotProps & { class?: string }) => { }; const canRegenerateResponse = (messageIndex: number) => { - if (!chatFeedbackStatus() || !chatFeedbackRegenerateResponseStatus() || loading()) return false; + if (!chatFeedbackStatus() || loading()) return false; if (messageIndex !== getLastApiMessageIndex()) return false; const previousMessage = messages()[messageIndex - 1]; if (!previousMessage || previousMessage.type !== 'userMessage') return false; @@ -947,6 +935,10 @@ export const Bot = (botProps: BotProps & { class?: string }) => { return true; }; + const handleRatingUpdate = (messageId: string, rating: FeedbackRatingType) => { + setMessageRatings((prev) => ({ ...prev, [messageId]: rating })); + }; + const handleRegenerateResponse = async (messageIndex: number) => { if (loading()) return; if (previews().length) return; @@ -954,15 +946,25 @@ export const Bot = (botProps: BotProps & { class?: string }) => { const currentMessages = messages(); const targetMessage = currentMessages[messageIndex]; - if (!targetMessage || targetMessage.type !== 'apiMessage') return; - const previousMessage = currentMessages[messageIndex - 1]; - if (!previousMessage || previousMessage.type !== 'userMessage' || previousMessage.fileUploads?.length) return; - const existingResponseVersions = - targetMessage.responseVersions && targetMessage.responseVersions.length > 0 - ? [...targetMessage.responseVersions] - : [createResponseVersion(targetMessage)]; + const ratings = messageRatings(); + const withRating = (v: MessageResponseVersion): MessageResponseVersion => + v.messageId && ratings[v.messageId] ? { ...v, rating: ratings[v.messageId] } : v; + + const existingResponseVersions = (() => { + if (targetMessage.responseVersions && targetMessage.responseVersions.length > 0) { + const versions = [...targetMessage.responseVersions].map(withRating); + // The latest slot may have message:'' if it was loaded from localStorage before + // the end-event persist ran. Overwrite it with the actual content on the top-level message. + const last = versions.length - 1; + if (!versions[last].message) { + versions[last] = withRating(createResponseVersion(targetMessage)); + } + return versions; + } + return [withRating(createResponseVersion(targetMessage))]; + })(); setFollowUpPrompts([]); const updatedMessages = currentMessages.slice(0, messageIndex); @@ -1118,6 +1120,17 @@ export const Bot = (botProps: BotProps & { class?: string }) => { break; case 'end': finalizeThinking(); + if (options?.responseVersions && options.responseVersions.length > 0) { + setMessages((prevMessages) => { + const lastMsg = prevMessages[prevMessages.length - 1]; + if (lastMsg.type === 'userMessage' || !lastMsg.responseVersions?.length) return prevMessages; + const versions = [...lastMsg.responseVersions]; + versions[versions.length - 1] = createResponseVersion(lastMsg); + const updatedMessages = [...prevMessages.slice(0, -1), { ...lastMsg, responseVersions: versions }]; + addChatMessage(updatedMessages); + return updatedMessages; + }); + } setLocalStorageChatflow(chatflowid, chatId); closeResponse(); break; @@ -2743,6 +2756,7 @@ export const Bot = (botProps: BotProps & { class?: string }) => { chatFeedbackStatus={chatFeedbackStatus()} onRegenerateResponse={() => handleRegenerateResponse(index())} showRegenerateResponseButton={canRegenerateResponse(index())} + onRatingUpdate={handleRatingUpdate} fontSize={props.fontSize} isLoading={loading() && index() === messages().length - 1} showAgentMessages={props.showAgentMessages} diff --git a/src/components/bubbles/BotBubble.tsx b/src/components/bubbles/BotBubble.tsx index 4f3b36391..8ccb43cd9 100644 --- a/src/components/bubbles/BotBubble.tsx +++ b/src/components/bubbles/BotBubble.tsx @@ -1,4 +1,4 @@ -import { createEffect, createMemo, Show, createSignal, onMount, For } from 'solid-js'; +import { createEffect, createMemo, Show, createSignal, onMount, For, untrack } from 'solid-js'; import { Avatar } from '../avatars/Avatar'; import { Marked } from '@ts-stack/markdown'; import DOMPurify from 'dompurify'; @@ -39,6 +39,7 @@ type Props = { handleSourceDocumentsClick: (src: any) => void; onRegenerateResponse?: () => void; showRegenerateResponseButton?: boolean; + onRatingUpdate?: (messageId: string, rating: FeedbackRatingType) => void; // TTS props isTTSEnabled?: boolean; isTTSLoading?: Record; @@ -59,12 +60,9 @@ export const BotBubble = (props: Props) => { Marked.setOptions({ isNoP: true, sanitize: props.renderHTML !== undefined ? !props.renderHTML : true }); - const [rating, setRating] = createSignal(''); const [feedbackId, setFeedbackId] = createSignal(''); const [showFeedbackContentDialog, setShowFeedbackContentModal] = createSignal(false); const [copiedMessage, setCopiedMessage] = createSignal(false); - const [thumbsUpColor, setThumbsUpColor] = createSignal(props.feedbackColor ?? defaultFeedbackColor); // default color - const [thumbsDownColor, setThumbsDownColor] = createSignal(props.feedbackColor ?? defaultFeedbackColor); // default color const [isTracesDialogOpen, setIsTracesDialogOpen] = createSignal(false); const [responseVersionIndex, setResponseVersionIndex] = createSignal(0); const [ratingByMessageId, setRatingByMessageId] = createSignal>({}); @@ -79,7 +77,6 @@ export const BotBubble = (props: Props) => { const totalResponseVersions = createMemo(() => responseVersions().length); const hasMultipleResponseVersions = createMemo(() => totalResponseVersions() > 1); - console.log('hasMultipleResponseVersions', hasMultipleResponseVersions()); const activeMessage = createMemo(() => { const versions = responseVersions(); @@ -100,6 +97,9 @@ export const BotBubble = (props: Props) => { return active.rating ?? ''; }; + const thumbsUpColor = () => currentRating() === 'THUMBS_UP' ? '#006400' : (props.feedbackColor ?? defaultFeedbackColor); + const thumbsDownColor = () => currentRating() === 'THUMBS_DOWN' ? '#8B0000' : (props.feedbackColor ?? defaultFeedbackColor); + const setBotMessageRef = (el: HTMLSpanElement) => { if (el) { setBotMessageElement(el); @@ -117,6 +117,18 @@ export const BotBubble = (props: Props) => { setResponseVersionIndex(safeIndex); }); + createEffect(() => { + responseVersionIndex(); // subscribe to version switches + untrack(() => { + responseVersions().forEach((version) => { + const id = version.id || version.messageId; + if (id && (props.isTTSPlaying?.[id] || props.isTTSLoading?.[id])) { + props.handleTTSStop?.(id); + } + }); + }); + }); + createEffect(() => { const el = botMessageElement(); const messageData = activeMessage(); @@ -148,18 +160,6 @@ export const BotBubble = (props: Props) => { link.target = '_blank'; }); - const activeRating = currentRating(); - setRating(activeRating); - if (activeRating === 'THUMBS_UP') { - setThumbsUpColor('#006400'); - setThumbsDownColor(props.feedbackColor ?? defaultFeedbackColor); - } else if (activeRating === 'THUMBS_DOWN') { - setThumbsDownColor('#8B0000'); - setThumbsUpColor(props.feedbackColor ?? defaultFeedbackColor); - } else { - setThumbsUpColor(props.feedbackColor ?? defaultFeedbackColor); - setThumbsDownColor(props.feedbackColor ?? defaultFeedbackColor); - } const fileAnnotations = messageData.fileAnnotations ?? props.fileAnnotations; if (fileAnnotations && fileAnnotations.length) { for (const annotations of fileAnnotations) { @@ -269,7 +269,7 @@ export const BotBubble = (props: Props) => { }; const onThumbsUpClick = async () => { - if (rating() === '') { + if (currentRating() === '') { const activeMessageId = activeMessage().messageId; if (!activeMessageId) return; const body = { @@ -290,19 +290,17 @@ export const BotBubble = (props: Props) => { const data = result.data as any; let id = ''; if (data && data.id) id = data.id; - setRating('THUMBS_UP'); setRatingByMessageId((prev) => ({ ...prev, [activeMessageId]: 'THUMBS_UP' })); + props.onRatingUpdate?.(activeMessageId, 'THUMBS_UP'); setFeedbackId(id); setShowFeedbackContentModal(true); - // update the thumbs up color state - setThumbsUpColor('#006400'); saveToLocalStorage('THUMBS_UP'); } } }; const onThumbsDownClick = async () => { - if (rating() === '') { + if (currentRating() === '') { const activeMessageId = activeMessage().messageId; if (!activeMessageId) return; const body = { @@ -323,12 +321,10 @@ export const BotBubble = (props: Props) => { const data = result.data as any; let id = ''; if (data && data.id) id = data.id; - setRating('THUMBS_DOWN'); setRatingByMessageId((prev) => ({ ...prev, [activeMessageId]: 'THUMBS_DOWN' })); + props.onRatingUpdate?.(activeMessageId, 'THUMBS_DOWN'); setFeedbackId(id); setShowFeedbackContentModal(true); - // update the thumbs down color state - setThumbsDownColor('#8B0000'); saveToLocalStorage('THUMBS_DOWN'); } } @@ -546,7 +542,7 @@ export const BotBubble = (props: Props) => { @@ -698,14 +694,14 @@ export const BotBubble = (props: Props) => { Copied!
- {rating() === '' || rating() === 'THUMBS_UP' ? ( - + {currentRating() === '' || currentRating() === 'THUMBS_UP' ? ( + ) : null} - {rating() === '' || rating() === 'THUMBS_DOWN' ? ( + {currentRating() === '' || currentRating() === 'THUMBS_DOWN' ? ( ) : null} From fcace2865ad0d8ff98a772cf781b67c2ad463df9 Mon Sep 17 00:00:00 2001 From: chloebyun-wd Date: Thu, 2 Apr 2026 15:54:49 -0700 Subject: [PATCH 4/7] gemini pr --- dist/components/bubbles/BotBubble.d.ts | 3 + dist/components/bubbles/BotBubble.d.ts.map | 4 + dist/web.js | 342 ++++++++++++++++++--- dist/web.umd.js | 342 ++++++++++++++++++--- src/components/Bot.tsx | 18 +- src/components/bubbles/BotBubble.tsx | 33 +- 6 files changed, 619 insertions(+), 123 deletions(-) diff --git a/dist/components/bubbles/BotBubble.d.ts b/dist/components/bubbles/BotBubble.d.ts index 2a28e1bc6..f2afffbcf 100644 --- a/dist/components/bubbles/BotBubble.d.ts +++ b/dist/components/bubbles/BotBubble.d.ts @@ -1,3 +1,4 @@ +import { FeedbackRatingType } from '@/queries/sendMessageQuery'; import { IAction, MessageType } from '../Bot'; import { DateTimeToggleTheme } from '@/features/bubble/types'; type Props = { @@ -22,6 +23,8 @@ type Props = { handleActionClick: (elem: any, action: IAction | undefined | null) => void; handleSourceDocumentsClick: (src: any) => void; onRegenerateResponse?: () => void; + showRegenerateResponseButton?: boolean; + onRatingUpdate?: (messageId: string, rating: FeedbackRatingType) => void; isTTSEnabled?: boolean; isTTSLoading?: Record; isTTSPlaying?: Record; diff --git a/dist/components/bubbles/BotBubble.d.ts.map b/dist/components/bubbles/BotBubble.d.ts.map index 5c73c8bda..b69443f8e 100644 --- a/dist/components/bubbles/BotBubble.d.ts.map +++ b/dist/components/bubbles/BotBubble.d.ts.map @@ -1,5 +1,9 @@ <<<<<<< HEAD +<<<<<<< HEAD {"version":3,"file":"BotBubble.d.ts","sourceRoot":"","sources":["../../../src/components/bubbles/BotBubble.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAc,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAS1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAI9D,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3E,0BAA0B,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/C,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAElC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,WAAW,CAAC;CAC/B,CAAC;AAOF,eAAO,MAAM,SAAS,UAAW,KAAK,mCAkkBrC,CAAC"} ======= {"version":3,"file":"BotBubble.d.ts","sourceRoot":"","sources":["../../../src/components/bubbles/BotBubble.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAc,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAQ1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAI9D,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3E,0BAA0B,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/C,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAElC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,WAAW,CAAC;CAC/B,CAAC;AAOF,eAAO,MAAM,SAAS,UAAW,KAAK,mCAyjBrC,CAAC"} >>>>>>> a63d543 (feat: add plain regenerate response action) +======= +{"version":3,"file":"BotBubble.d.ts","sourceRoot":"","sources":["../../../src/components/bubbles/BotBubble.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAiE,MAAM,4BAA4B,CAAC;AAC/H,OAAO,EAAc,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAQ1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAI9D,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3E,0BAA0B,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/C,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAClC,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAEzE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,WAAW,CAAC;CAC/B,CAAC;AAOF,eAAO,MAAM,SAAS,UAAW,KAAK,mCAoqBrC,CAAC"} +>>>>>>> 1c43c85 (gemini pr) diff --git a/dist/web.js b/dist/web.js index 1cc9fc952..4c0c8f7be 100644 --- a/dist/web.js +++ b/dist/web.js @@ -24468,7 +24468,7 @@ const _tmpl$$g = /*#__PURE__*/template(`*No data*`), _tmpl$15$2 = /*#__PURE__*/template(`
`), _tmpl$16$2 = /*#__PURE__*/template(` - {`${responseVersionIndex() + 1}/${totalResponseVersions()}`} + {`${ + responseVersionIndex() + 1 + }/${totalResponseVersions()}`}
{currentRating() === '' || currentRating() === 'THUMBS_UP' ? ( - + ) : null} {currentRating() === '' || currentRating() === 'THUMBS_DOWN' ? ( Date: Tue, 7 Apr 2026 11:41:54 -0700 Subject: [PATCH 5/7] update --- src/components/Bot.tsx | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/components/Bot.tsx b/src/components/Bot.tsx index 362b6f9be..ef5ea9b66 100644 --- a/src/components/Bot.tsx +++ b/src/components/Bot.tsx @@ -154,6 +154,7 @@ export type MessageType = { thinking?: string; thinkingDuration?: number; isThinking?: boolean; + isError?: boolean; responseVersions?: MessageResponseVersion[]; responseVersionIndex?: number; }; @@ -732,7 +733,19 @@ export const Bot = (botProps: BotProps & { class?: string }) => { const updateErrorMessage = (errorMessage: string) => { const cleanedMessage = errorMessage.replace(/^Error:\s*\S+\s*-\s*/, ''); setMessages((prevMessages) => { - const allMessages = [...prevMessages, { message: props.errorMessage || cleanedMessage, type: 'apiMessage' as messageType }]; + const lastMsg = prevMessages[prevMessages.length - 1]; + // A valid response was already streamed — ignore the trailing error event. + if (lastMsg?.type === 'apiMessage' && lastMsg.message && !lastMsg.isError) { + return prevMessages; + } + // Empty bot placeholder exists (stream started but no tokens) — update it in place. + if (lastMsg?.type === 'apiMessage') { + const allMessages = [...prevMessages.slice(0, -1), { ...lastMsg, message: props.errorMessage || cleanedMessage, isError: true }]; + addChatMessage(allMessages); + return allMessages; + } + // No bot message yet — add a new one. + const allMessages = [...prevMessages, { message: props.errorMessage || cleanedMessage, type: 'apiMessage' as messageType, isError: true }]; addChatMessage(allMessages); return allMessages; }); @@ -877,7 +890,7 @@ export const Bot = (botProps: BotProps & { class?: string }) => { errMessage = props.errorMessage; } setMessages((prevMessages) => { - const messages: MessageType[] = [...prevMessages, { message: errMessage, type: 'apiMessage' }]; + const messages: MessageType[] = [...prevMessages, { message: errMessage, type: 'apiMessage', isError: true }]; addChatMessage(messages); return messages; }); @@ -1111,6 +1124,7 @@ export const Bot = (botProps: BotProps & { class?: string }) => { break; case 'error': updateErrorMessage(payload.data); + closeResponse(); break; case 'abort': abortMessage(); From dd8bb833b433d74bea15dfd934b94f2ccd46bf63 Mon Sep 17 00:00:00 2001 From: chloebyun-wd Date: Mon, 13 Apr 2026 11:01:30 -0700 Subject: [PATCH 6/7] pr --- dist/components/Bot.d.ts | 19 ++++++ dist/components/Bot.d.ts.map | 2 +- dist/components/bubbles/BotBubble.d.ts | 1 + dist/components/bubbles/BotBubble.d.ts.map | 4 ++ dist/web.js | 4 ++ dist/web.umd.js | 4 ++ src/components/Bot.tsx | 72 +++++++++++++++++----- src/components/bubbles/BotBubble.tsx | 8 +-- 8 files changed, 92 insertions(+), 22 deletions(-) diff --git a/dist/components/Bot.d.ts b/dist/components/Bot.d.ts index 95a35bde9..8d7a673e6 100644 --- a/dist/components/Bot.d.ts +++ b/dist/components/Bot.d.ts @@ -59,6 +59,22 @@ export type AgentFlowExecutedData = { previousNodeIds: string[]; status?: ExecutionState; }; +export type MessageResponseVersion = { + message?: string; + messageId?: string; + id?: string; + sourceDocuments?: any; + fileAnnotations?: any; + agentReasoning?: IAgentReasoning[]; + agentFlowExecutedData?: any; + usedTools?: any[]; + action?: IAction | null; + artifacts?: Partial[]; + thinking?: string; + thinkingDuration?: number; + rating?: FeedbackRatingType; + dateTime?: string; +}; export type MessageType = { messageId?: string; message: string; @@ -80,6 +96,9 @@ export type MessageType = { thinking?: string; thinkingDuration?: number; isThinking?: boolean; + isError?: boolean; + responseVersions?: MessageResponseVersion[]; + responseVersionIndex?: number; }; type observerConfigType = (accessor: string | boolean | object | MessageType[]) => void; export type observersConfigType = Record<'observeUserInput' | 'observeLoading' | 'observeMessages', observerConfigType>; diff --git a/dist/components/Bot.d.ts.map b/dist/components/Bot.d.ts.map index 140e536ec..5a4d1c9df 100644 --- a/dist/components/Bot.d.ts.map +++ b/dist/components/Bot.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Bot.d.ts","sourceRoot":"","sources":["../../src/components/Bot.tsx"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Bot.d.ts","sourceRoot":"","sources":["../../src/components/Bot.tsx"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/components/bubbles/BotBubble.d.ts b/dist/components/bubbles/BotBubble.d.ts index f2afffbcf..c43766f24 100644 --- a/dist/components/bubbles/BotBubble.d.ts +++ b/dist/components/bubbles/BotBubble.d.ts @@ -25,6 +25,7 @@ type Props = { onRegenerateResponse?: () => void; showRegenerateResponseButton?: boolean; onRatingUpdate?: (messageId: string, rating: FeedbackRatingType) => void; + messageRatings?: Record; isTTSEnabled?: boolean; isTTSLoading?: Record; isTTSPlaying?: Record; diff --git a/dist/components/bubbles/BotBubble.d.ts.map b/dist/components/bubbles/BotBubble.d.ts.map index b69443f8e..0db50931e 100644 --- a/dist/components/bubbles/BotBubble.d.ts.map +++ b/dist/components/bubbles/BotBubble.d.ts.map @@ -1,5 +1,6 @@ <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD {"version":3,"file":"BotBubble.d.ts","sourceRoot":"","sources":["../../../src/components/bubbles/BotBubble.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAc,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAS1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAI9D,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3E,0BAA0B,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/C,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAElC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,WAAW,CAAC;CAC/B,CAAC;AAOF,eAAO,MAAM,SAAS,UAAW,KAAK,mCAkkBrC,CAAC"} ======= {"version":3,"file":"BotBubble.d.ts","sourceRoot":"","sources":["../../../src/components/bubbles/BotBubble.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAc,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAQ1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAI9D,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3E,0BAA0B,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/C,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAElC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,WAAW,CAAC;CAC/B,CAAC;AAOF,eAAO,MAAM,SAAS,UAAW,KAAK,mCAyjBrC,CAAC"} @@ -7,3 +8,6 @@ ======= {"version":3,"file":"BotBubble.d.ts","sourceRoot":"","sources":["../../../src/components/bubbles/BotBubble.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAiE,MAAM,4BAA4B,CAAC;AAC/H,OAAO,EAAc,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAQ1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAI9D,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3E,0BAA0B,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/C,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAClC,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAEzE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,WAAW,CAAC;CAC/B,CAAC;AAOF,eAAO,MAAM,SAAS,UAAW,KAAK,mCAoqBrC,CAAC"} >>>>>>> 1c43c85 (gemini pr) +======= +{"version":3,"file":"BotBubble.d.ts","sourceRoot":"","sources":["../../../src/components/bubbles/BotBubble.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAiE,MAAM,4BAA4B,CAAC;AAC/H,OAAO,EAAc,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAQ1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAI9D,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3E,0BAA0B,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/C,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAClC,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAEpD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,WAAW,CAAC;CAC/B,CAAC;AAOF,eAAO,MAAM,SAAS,UAAW,KAAK,mCAmqBrC,CAAC"} +>>>>>>> cc6f2eb (pr) diff --git a/dist/web.js b/dist/web.js index 4c0c8f7be..341c036ca 100644 --- a/dist/web.js +++ b/dist/web.js @@ -1,3 +1,4 @@ +<<<<<<< HEAD (function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document); function cloneProps(props) { @@ -84938,3 +84939,6 @@ const chatbot = parseChatbot(); injectChatbotInWindow(chatbot); export { chatbot as default }; +======= +function e(e){return Object.keys(e).reduce(((r,o)=>{var a=e[o];return r[o]=Object.assign({},a),!t(a.value)||function(e){return"[object Function]"===Object.prototype.toString.call(e)}(a.value)||Array.isArray(a.value)||(r[o].value=Object.assign({},a.value)),Array.isArray(a.value)&&(r[o].value=a.value.slice(0)),r}),{})}function r(e){if(e)try{return JSON.parse(e)}catch(r){return e}}function o(e,r,o){if(null==o||!1===o)return e.removeAttribute(r);let t=JSON.stringify(o);e.__updating[r]=!0,"true"===t&&(t=""),e.setAttribute(r,t),Promise.resolve().then((()=>delete e.__updating[r]))}function t(e){return null!=e&&("object"==typeof e||"function"==typeof e)}let a;function l(t,l){const n=Object.keys(l);return class extends t{static get observedAttributes(){return n.map((e=>l[e].attribute))}constructor(){super(),this.__initialized=!1,this.__released=!1,this.__releaseCallbacks=[],this.__propertyChangedCallbacks=[],this.__updating={},this.props={}}connectedCallback(){if(!this.__initialized){this.__releaseCallbacks=[],this.__propertyChangedCallbacks=[],this.__updating={},this.props=function(t,a){const l=e(a);return Object.keys(a).forEach((e=>{const a=l[e],n=t.getAttribute(a.attribute),i=t[e];n&&(a.value=a.parse?r(n):n),null!=i&&(a.value=Array.isArray(i)?i.slice(0):i),a.reflect&&o(t,a.attribute,a.value),Object.defineProperty(t,e,{get:()=>a.value,set(r){var t=a.value;a.value=r,a.reflect&&o(this,a.attribute,a.value);for(let o=0,a=this.__propertyChangedCallbacks.length;o(r[o]=e[o].value,r)),{})}(this.props),n=this.Component,i=a;try{(a=this).__initialized=!0,function(e){return"function"==typeof e&&0===e.toString().indexOf("class")}(n)?new n(t,{element:this}):n(t,{element:this})}finally{a=i}}}async disconnectedCallback(){if(await Promise.resolve(),!this.isConnected){this.__propertyChangedCallbacks.length=0;for(var e=null;e=this.__releaseCallbacks.pop();)e(this);delete this.__initialized,this.__released=!0}}attributeChangedCallback(e,o,t){!this.__initialized||this.__updating[e]||(e=this.lookupProp(e))in l&&(null==t&&!this[e]||(this[e]=l[e].parse?r(t):t))}lookupProp(e){if(l)return n.find((r=>e===r||e===l[r].attribute))}get renderRoot(){return this.shadowRoot||this.attachShadow({mode:"open"})}addReleaseCallback(e){this.__releaseCallbacks.push(e)}addPropertyChangedCallback(e){this.__propertyChangedCallbacks.push(e)}}}function n(e,r={},o={}){const{BaseElement:a=HTMLElement,extension:n}=o;return o=>{if(!e)throw new Error("tag is required to register a Component");let i=customElements.get(e);return i?i.prototype.Component=o:((i=l(a,function(e){return e?Object.keys(e).reduce(((r,o)=>{var a=e[o];return r[o]=t(a)&&"value"in a?a:{value:a},r[o].attribute||(r[o].attribute=function(e){return e.replace(/\.?([A-Z]+)/g,((e,r)=>"-"+r.toLowerCase())).replace("_","-").replace(/^-/,"")}(o)),r[o].parse="parse"in r[o]?r[o].parse:"string"!=typeof r[o].value,r}),{}):{}}(r))).prototype.Component=o,i.prototype.registeredTag=e,customElements.define(e,i,n)),i}}const i=Symbol("solid-proxy"),d=Symbol("solid-track"),s=Symbol("solid-dev-component"),m={equals:(e,r)=>e===r};let g=D;const c=1,u=2,x={owned:null,cleanups:null,context:null,owner:null};var p=null;let h=null,v=null,S=null,b=null,f=0;function $(e,r){const o=v,t=p,a=0===e.length,l=a?x:{owned:null,cleanups:null,context:null,owner:void 0===r?t:r},n=a?e:()=>e((()=>T((()=>H(l)))));p=l,v=null;try{return k(n,!0)}finally{v=o,p=t}}function y(e,r){const o={value:e,observers:null,observerSlots:null,comparator:(r=r?Object.assign({},m,r):m).equals||void 0};return[E.bind(o),e=>("function"==typeof e&&(e=e(o.value)),B(o,e))]}function A(e,r,o){N(O(e,r,!1,c))}function P(e,r,o){g=R,(e=O(e,r,!1,c)).user=!0,b?b.push(e):N(e)}function M(e,r,o){return o=o?Object.assign({},m,o):m,(e=O(e,r,!0,0)).observers=null,e.observerSlots=null,e.comparator=o.equals||void 0,N(e),E.bind(e)}function T(e){if(null===v)return e();var r=v;v=null;try{return e()}finally{v=r}}function _(e){P((()=>T(e)))}function w(e){return null!==p&&(null===p.cleanups?p.cleanups=[e]:p.cleanups.push(e)),e}function L(){return v}function G(e){var r;return void 0!==(r=U(p,e.id))?r:e.defaultValue}function C(e){const r=M(e),o=M((()=>W(r())));return o.toArray=()=>{var e=o();return Array.isArray(e)?e:null!=e?[e]:[]},o}function E(){var e;return this.sources&&this.state&&(this.state===c?N(this):(e=S,S=null,k((()=>F(this)),!1),S=e)),v&&(e=this.observers?this.observers.length:0,v.sources?(v.sources.push(this),v.sourceSlots.push(e)):(v.sources=[this],v.sourceSlots=[e]),this.observers?(this.observers.push(v),this.observerSlots.push(v.sources.length-1)):(this.observers=[v],this.observerSlots=[v.sources.length-1])),this.value}function B(e,r,o){var t=e.value;return e.comparator&&e.comparator(t,r)||(e.value=r,e.observers&&e.observers.length&&k((()=>{for(let t=0;tF(e,o[0])),!1),S=r)}}}function k(e,r){if(S)return e();let o=!1;r||(S=[]),b?o=!0:b=[],f++;try{var t=e();return function(e){if(S&&(D(S),S=null),!e){const e=b;b=null,e.length&&k((()=>g(e)),!1)}}(o),t}catch(e){o||(b=null),S=null,V(e)}}function D(e){for(let r=0;ro=T((()=>(p.context={[e]:r.value},C((()=>r.children)))))),void 0),o}}const Z=Symbol("fallback");function z(e){for(let r=0;re(r||{})))}function Y(){return!0}const J={get:(e,r,o)=>r===i?o:e.get(r),has:(e,r)=>r===i||e.has(r),set:Y,deleteProperty:Y,getOwnPropertyDescriptor:(e,r)=>({configurable:!0,enumerable:!0,get:()=>e.get(r),set:Y,deleteProperty:Y}),ownKeys:e=>e.keys()};function j(e){return(e="function"==typeof e?e():e)||{}}function q(...e){let r=!1;for(let t=0;tnew Proxy({get:o=>r.includes(o)?e[o]:void 0,has:o=>r.includes(o)&&o in e,keys:()=>r.filter((r=>r in e))},J)))).push(new Proxy({get:r=>o.has(r)?void 0:e[r],has:r=>!o.has(r)&&r in e,keys:()=>Object.keys(e).filter((e=>!o.has(e)))},J)),t;const a=Object.getOwnPropertyDescriptors(e);return r.push(Object.keys(a).filter((e=>!o.has(e)))),r.map((r=>{var o={};for(let t=0;te[l],set:()=>!0,enumerable:!0})}return o}))}function re(e){var r="fallback"in e&&{fallback:()=>e.fallback};return M(function(e,r,o={}){let t=[],a=[],l=[],n=0,i=1z(l))),()=>{let s,m,g=e()||[];return g[d],T((()=>{let e,r,d,u,x,p,h,v,S,b=g.length;if(0===b)0!==n&&(z(l),l=[],t=[],a=[],n=0,i=i&&[]),o.fallback&&(t=[Z],a[0]=$((e=>(l[0]=e,o.fallback()))),n=1);else if(0===n){for(a=new Array(b),m=0;m=p&&v>=p&&t[h]===g[v];h--,v--)d[v]=a[h],u[v]=l[h],i&&(x[v]=i[h]);for(e=new Map,r=new Array(v+1),m=v;m>=p;m--)S=g[m],s=e.get(S),r[m]=void 0===s?-1:s,e.set(S,m);for(s=p;s<=h;s++)S=t[s],void 0!==(m=e.get(S))&&-1!==m?(d[m]=a[s],u[m]=l[s],i&&(x[m]=i[s]),m=r[m],e.set(S,m)):l[s]();for(m=p;me.each),e.children,r||void 0))}function oe(e){const r=e.keyed,o=M((()=>e.when),void 0,{equals:(e,o)=>r?e===o:!e==!o});return M((()=>{const t=o();if(t){const a=e.children;return"function"==typeof a&&0a(r?t:()=>{if(T(o))return e.when;throw(e=>`Stale read from <${e}>.`)("Show")}))):a}return e.fallback}),void 0,void 0)}const te=new Set(["className","value","readOnly","formNoValidate","isMap","noModule","playsInline","allowfullscreen","async","autofocus","autoplay","checked","controls","default","disabled","formnovalidate","hidden","indeterminate","ismap","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","seamless","selected"]),ae=new Set(["innerHTML","textContent","innerText","children"]),le=Object.assign(Object.create(null),{className:"class",htmlFor:"for"}),ne=Object.assign(Object.create(null),{class:"className",formnovalidate:{$:"formNoValidate",BUTTON:1,INPUT:1},ismap:{$:"isMap",IMG:1},nomodule:{$:"noModule",SCRIPT:1},playsinline:{$:"playsInline",VIDEO:1},readonly:{$:"readOnly",INPUT:1,TEXTAREA:1}});const ie=new Set(["beforeinput","click","dblclick","contextmenu","focusin","focusout","input","keydown","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","pointerdown","pointermove","pointerout","pointerover","pointerup","touchend","touchmove","touchstart"]),de=new Set(["altGlyph","altGlyphDef","altGlyphItem","animate","animateColor","animateMotion","animateTransform","circle","clipPath","color-profile","cursor","defs","desc","ellipse","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","font","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignObject","g","glyph","glyphRef","hkern","image","line","linearGradient","marker","mask","metadata","missing-glyph","mpath","path","pattern","polygon","polyline","radialGradient","rect","set","stop","svg","switch","symbol","text","textPath","tref","tspan","use","view","vkern"]),se={xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace"};const me="_$DX_DELEGATE";function ge(e,r,o){let t;const a=()=>{var r=document.createElement("template");return r.innerHTML=e,(o?r.content.firstChild:r.content).firstChild};return(r=r?()=>(t=t||a()).cloneNode(!0):()=>T((()=>document.importNode(t=t||a(),!0)))).cloneNode=r}function ce(e,r=window.document){var o=r[me]||(r[me]=new Set);for(let a=0,l=e.length;at.call(e,o[1],r))}else e.addEventListener(r,o)}function he(e,r,o){if(!r)return o?ue(e,"style"):r;var t=e.style;if("string"==typeof r)return t.cssText=r;let a,l;for(l in"string"==typeof o&&(t.cssText=o=void 0),r=r||{},o=o||{})null==r[l]&&t.removeProperty(l),delete o[l];for(l in r)(a=r[l])!==o[l]&&(t.setProperty(l,a),o[l]=a);return o}function ve(e,r={},o,t){const a={};return t||A((()=>a.children=Ae(e,r.children,a.children))),A((()=>r.ref&&r.ref(e))),A((()=>function(e,r,o,t,a={},l=!1){r=r||{};for(const t in a)t in r||"children"!==t&&(a[t]=$e(e,t,null,a[t],o,l));for(const i in r){var n;"children"===i?t||Ae(e,r.children):(n=r[i],a[i]=$e(e,i,n,a[i],o,l))}}(e,r,o,!0,a,!0))),a}function Se(e,r,o){return T((()=>e(r,o)))}function be(e,r,o,t){if(void 0!==o&&(t=t||[]),"function"!=typeof r)return Ae(e,r,t,o);A((t=>Ae(e,r(),t,o)),t)}function fe(e,r,o){var t=r.trim().split(/\s+/);for(let r=0,a=t.length;rr.toUpperCase()))}(r)]=o):(t=a&&-1o||document});o;){var t=o[r];if(t&&!o.disabled){var a=o[r+"Data"];if(void 0!==a?t.call(o,a,e):t.call(o,e),e.cancelBubble)return}o=o._$host||o.parentNode||o.host}}function Ae(e,r,o,t,a){for(;"function"==typeof o;)o=o();if(r!==o){var l=typeof r,n=void 0!==t;if(e=n&&o[0]&&o[0].parentNode||e,"string"==l||"number"==l)if("number"==l&&(r=r.toString()),n){let a=o[0];a&&3===a.nodeType?a.data=r:a=document.createTextNode(r),o=Te(e,o,t,a)}else o=""!==o&&"string"==typeof o?e.firstChild.data=r:e.textContent=r;else if(null==r||"boolean"==l)o=Te(e,o,t);else{if("function"==l)return A((()=>{let a=r();for(;"function"==typeof a;)a=a();o=Ae(e,a,o,t)})),()=>o;if(Array.isArray(r)){const i=[];if(l=o&&Array.isArray(o),Pe(i,r,o,a))return A((()=>o=Ae(e,i,o,t,!0))),()=>o;if(0===i.length){if(o=Te(e,o,t),n)return o}else l?0===o.length?Me(e,i,t):function(e,r,o){let t=o.length,a=r.length,l=t,n=0,i=0,d=r[a-1].nextSibling,s=null;for(;nc-i)for(var u=r[n];i{a=a||function(e,r){var o=p,t=v;p=e,v=null;try{return k(r,!0)}catch(e){V(e)}finally{p=o,v=t}}(t,(()=>e.children));const l=e.mount||document.body;if(l instanceof HTMLHeadElement){const[e,r]=y(!1);$((r=>be(l,(()=>e()?r():a),null))),w((()=>r(!0)))}else{const t=we(e.isSVG?"g":"div",e.isSVG),n=r&&t.attachShadow?t.attachShadow({mode:"open"}):t;Object.defineProperty(t,"_$host",{get:()=>o.parentNode,configurable:!0}),be(n,a),l.appendChild(t),e.ref&&e.ref(t),w((()=>l.removeChild(t)))}})),o}function Ge(e){const[r,o]=ee(e,["component"]),t=M((()=>r.component));return M((()=>{const e=t();switch(typeof e){case"function":return Object.assign(e,{[s]:!0}),T((()=>e(o)));case"string":var r=de.has(e),a=we(e,r);return ve(a,o,r),a}}))}function Ce(e){return(r,o)=>{const t=o.element;return $((a=>{const l=function(e){var r=Object.keys(e),o={};for(let t=0;te))}})}return o}(r);t.addPropertyChangedCallback(((e,r)=>l[e]=r)),t.addReleaseCallback((()=>{t.renderRoot.textContent="",a()}));var n=e(l,o);return be(t.renderRoot,n)}),function(e){if(e.assignedSlot&&e.assignedSlot._$owner)return e.assignedSlot._$owner;let r=e.parentNode;for(;r&&!r._$owner&&(!r.assignedSlot||!r.assignedSlot._$owner);)r=r.parentNode;return(r&&r.assignedSlot?r.assignedSlot:e)._$owner}(t))}}function Ee(e,r,o){return 2===arguments.length&&(o=r,r={}),n(e,r)(Ce(o))}const Be={chatflowid:"",apiHost:void 0,onRequest:void 0,chatflowConfig:void 0,theme:void 0,observersConfig:void 0,dialogContainer:void 0};var Ne='/*! tailwindcss v3.3.1 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;font-feature-settings:normal;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-bottom:1.25em;margin-top:1.25em;padding-left:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-bottom:1.25em;margin-top:1.25em;padding-left:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-bottom:3em;margin-top:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){border-left-color:var(--tw-prose-quote-borders);border-left-width:.25rem;color:var(--tw-prose-quotes);font-style:italic;font-weight:500;margin-bottom:1.6em;margin-top:1.6em;padding-left:1em;quotes:"\\201C""\\201D""\\2018""\\2019"}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:2.25em;font-weight:800;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1.5em;font-weight:700;line-height:1.3333333;margin-bottom:1em;margin-top:2em}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1.25em;font-weight:600;line-height:1.6;margin-bottom:.6em;margin-top:1.6em}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;line-height:1.5;margin-bottom:.5em;margin-top:1.5em}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-bottom:2em;margin-top:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows)/10%),0 3px 0 rgb(var(--tw-prose-kbd-shadows)/10%);color:var(--tw-prose-kbd);font-family:inherit;font-size:.875em;font-weight:500;padding:.1875em .375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--tw-prose-pre-bg);border-radius:.375rem;color:var(--tw-prose-pre-code);font-size:.875em;font-weight:400;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;overflow-x:auto;padding:.8571429em 1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.7142857;margin-bottom:2em;margin-top:2em;table-layout:auto;text-align:left;width:100%}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-color:var(--tw-prose-th-borders);border-bottom-width:1px}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;padding-bottom:.5714286em;padding-left:.5714286em;padding-right:.5714286em;vertical-align:bottom}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-color:var(--tw-prose-td-borders);border-bottom-width:1px}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-color:var(--tw-prose-th-borders);border-top-width:1px}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:17 24 39;--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:255 255 255;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:rgba(0,0,0,.5);--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5em;margin-top:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose :where(.prose>ul>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-left:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.bottom-0{bottom:0}.bottom-\\[140px\\]{bottom:140px}.left-0{left:0}.left-1\\/2{left:50%}.right-0{right:0}.right-\\[-8px\\]{right:-8px}.top-0{top:0}.z-0{z-index:0}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.z-\\[1001\\]{z-index:1001}.z-\\[1002\\]{z-index:1002}.float-right{float:right}.m-0{margin:0}.m-\\[6px\\]{margin:6px}.m-auto{margin:auto}.mx-4{margin-left:16px;margin-right:16px}.my-2{margin-bottom:8px;margin-top:8px}.my-6{margin-bottom:24px;margin-top:24px}.-ml-1{margin-left:-4px}.mb-1{margin-bottom:4px}.mb-2{margin-bottom:8px}.mb-4{margin-bottom:16px}.mb-6{margin-bottom:24px}.ml-1{margin-left:4px}.ml-1\\.5{margin-left:6px}.ml-10{margin-left:40px}.ml-2{margin-left:8px}.ml-auto{margin-left:auto}.mr-1{margin-right:4px}.mr-2{margin-right:8px}.mr-3{margin-right:12px}.mr-\\[10px\\]{margin-right:10px}.mt-2{margin-top:8px}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.hidden{display:none}.h-10{height:40px}.h-12{height:48px}.h-14{height:56px}.h-2{height:8px}.h-4{height:16px}.h-5{height:20px}.h-6{height:24px}.h-7{height:28px}.h-8{height:32px}.h-\\[58px\\]{height:58px}.h-auto{height:auto}.h-full{height:100%}.max-h-\\[128px\\]{max-height:128px}.max-h-\\[192px\\]{max-height:192px}.min-h-0{min-height:0}.min-h-\\[56px\\]{min-height:56px}.min-h-full{min-height:100%}.w-10{width:40px}.w-12{width:48px}.w-2{width:8px}.w-4{width:16px}.w-5{width:20px}.w-6{width:24px}.w-64{width:256px}.w-7{width:28px}.w-8{width:32px}.w-\\[200px\\]{width:200px}.w-full{width:100%}.min-w-full{min-width:100%}.max-w-3xl{max-width:768px}.max-w-\\[128px\\]{max-width:128px}.max-w-full{max-width:100%}.max-w-max{max-width:-moz-max-content;max-width:max-content}.max-w-md{max-width:448px}.flex-1{flex:1 1 0%}.flex-auto{flex:1 1 auto}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.flex-grow-0{flex-grow:0}.basis-auto{flex-basis:auto}.border-collapse{border-collapse:collapse}.-translate-x-1\\/2{--tw-translate-x:-50%}.-rotate-180,.-translate-x-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-180{--tw-rotate:-180deg}.rotate-0{--tw-rotate:0deg}.rotate-0,.scale-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-0{--tw-scale-x:0;--tw-scale-y:0}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-100,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.animate-fade-in{animation:fade-in .3s ease-out}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.resize{resize:both}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:4px}.gap-2{gap:8px}.gap-3{gap:12px}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(8px*(1 - var(--tw-space-x-reverse)));margin-right:calc(8px*var(--tw-space-x-reverse))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(16px*(1 - var(--tw-space-x-reverse)));margin-right:calc(16px*var(--tw-space-x-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(8px*var(--tw-space-y-reverse));margin-top:calc(8px*(1 - var(--tw-space-y-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(16px*var(--tw-space-y-reverse));margin-top:calc(16px*(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-scroll{overflow-y:scroll}.whitespace-pre-wrap{white-space:pre-wrap}.rounded{border-radius:4px}.rounded-\\[10px\\]{border-radius:10px}.rounded-\\[6px\\]{border-radius:6px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:8px}.rounded-md{border-radius:6px}.rounded-none{border-radius:0}.rounded-xl{border-radius:12px}.rounded-b{border-bottom-left-radius:4px;border-bottom-right-radius:4px}.rounded-t{border-top-left-radius:4px;border-top-right-radius:4px}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-4{border-width:4px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-t-4{border-top-width:4px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-\\[\\#eeeeee\\]{--tw-border-opacity:1;border-color:rgb(238 238 238/var(--tw-border-opacity))}.border-current{border-color:currentColor}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}.border-red-300{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity))}.border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.border-yellow-300{--tw-border-opacity:1;border-color:rgb(253 224 71/var(--tw-border-opacity))}.border-t-transparent{border-top-color:transparent}.border-t-white{--tw-border-opacity:1;border-top-color:rgb(255 255 255/var(--tw-border-opacity))}.bg-\\[rgba\\(0\\2c 0\\2c 0\\2c 0\\.3\\)\\]{background-color:rgba(0,0,0,.3)}.bg-\\[rgba\\(0\\2c 0\\2c 0\\2c 0\\.4\\)\\]{background-color:rgba(0,0,0,.4)}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity))}.bg-black\\/10{background-color:rgba(0,0,0,.1)}.bg-black\\/60{background-color:rgba(0,0,0,.6)}.bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.bg-opacity-50{--tw-bg-opacity:0.5}.bg-cover{background-size:cover}.bg-center{background-position:50%}.fill-transparent{fill:transparent}.stroke-2{stroke-width:2}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-1{padding:4px}.p-10{padding:40px}.p-2{padding:8px}.p-2\\.5{padding:10px}.p-3{padding:12px}.p-4{padding:16px}.p-5{padding:20px}.p-6{padding:24px}.px-1{padding-left:4px;padding-right:4px}.px-12{padding-left:48px;padding-right:48px}.px-2{padding-left:8px;padding-right:8px}.px-3{padding-left:12px;padding-right:12px}.px-4{padding-left:16px;padding-right:16px}.px-5{padding-left:20px;padding-right:20px}.px-6{padding-left:24px;padding-right:24px}.px-\\[10px\\]{padding-left:10px;padding-right:10px}.py-1{padding-bottom:4px;padding-top:4px}.py-2{padding-bottom:8px;padding-top:8px}.py-4{padding-bottom:16px;padding-top:16px}.py-8{padding-bottom:32px;padding-top:32px}.py-\\[10px\\]{padding-bottom:10px;padding-top:10px}.pb-1{padding-bottom:4px}.pb-2{padding-bottom:8px}.pb-\\[10px\\]{padding-bottom:10px}.pl-4{padding-left:16px}.pr-0{padding-right:0}.pr-3{padding-right:12px}.pt-2{padding-top:8px}.pt-4{padding-top:16px}.pt-\\[6px\\]{padding-top:6px}.pt-\\[70px\\]{padding-top:70px}.text-left{text-align:left}.text-center{text-align:center}.font-sans{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.text-2xl{font-size:24px;line-height:32px}.text-\\[13px\\]{font-size:13px}.text-base{font-size:16px;line-height:24px}.text-sm{font-size:14px;line-height:20px}.text-xl{font-size:20px;line-height:28px}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.italic{font-style:italic}.leading-none{line-height:1}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.text-inherit{color:inherit}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}.text-transparent{color:transparent}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-75{opacity:.75}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-md,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.blur-\\[2px\\]{--tw-blur:blur(2px)}.blur-\\[2px\\],.blur-none{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-none{--tw-blur:blur(0)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-150,.transition-transform{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}:host{--chatbot-container-bg-image:none;--chatbot-container-bg-color:transparent;--chatbot-container-font-family:"Open Sans";--chatbot-button-bg-color:#0042da;--chatbot-button-color:#fff;--chatbot-host-bubble-bg-color:#f7f8ff;--chatbot-host-bubble-color:#303235;--chatbot-guest-bubble-bg-color:#3b81f6;--chatbot-guest-bubble-color:#fff;--chatbot-input-bg-color:#fff;--chatbot-input-color:#303235;--chatbot-input-placeholder-color:#9095a0;--chatbot-header-bg-color:#fff;--chatbot-header-color:#303235;--chatbot-border-radius:6px;--PhoneInputCountryFlag-borderColor:transparent;--PhoneInput-color--focus:transparent}a{color:#16bed7;font-weight:500}a:hover{text-decoration:underline}pre{word-wrap:break-word;font-size:13px;margin:5px;overflow:auto;padding:5px;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;width:auto}.string{color:green}.number{color:#ff8c00}.boolean{color:blue}.null{color:#f0f}.key{color:#002b36}.scrollable-container{scrollbar-color:rgba(0,0,0,.2) transparent;scrollbar-width:thin}.scrollable-container::-webkit-scrollbar{width:4px}.scrollable-container::-webkit-scrollbar-track{background:transparent}.scrollable-container::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.2);border-radius:4px}.scrollable-container::-webkit-scrollbar-thumb:hover{background-color:rgba(0,0,0,.35)}@media (hover:none) and (pointer:coarse){.scrollable-container{scrollbar-width:none}.scrollable-container::-webkit-scrollbar{display:none}}.text-fade-in{transition:opacity .4s ease-in .2s}.bubble-typing{transition:width .4s ease-out,height .4s ease-out}.bubble1,.bubble2,.bubble3{background-color:var(--chatbot-host-bubble-color);opacity:.5}.bubble1,.bubble2{animation:chatBubbles 1s ease-in-out infinite}.bubble2{animation-delay:.3s}.bubble3{animation:chatBubbles 1s ease-in-out infinite;animation-delay:.5s}@keyframes chatBubbles{0%{transform:translateY(0)}50%{transform:translateY(-5px)}to{transform:translateY(0)}}button,input,textarea{font-weight:300}.slate-a{text-decoration:underline}.slate-html-container>div{min-height:24px}.slate-bold{font-weight:700}.slate-italic{font-style:oblique}.slate-underline{text-decoration:underline}.text-input::-moz-placeholder{color:#9095a0!important;opacity:1!important}.text-input::placeholder{color:#9095a0!important;opacity:1!important}.chatbot-container{background-color:var(--chatbot-container-bg-color);background-image:var(--chatbot-container-bg-image);font-family:Open Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.file-annotation-button{background-color:#02a0a0c2;border:1px solid #02a0a0c2;border-radius:var(--chatbot-border-radius);color:var(--chatbot-button-color)}.chatbot-button{background-color:#0042da;border:1px solid #0042da;border-radius:var(--chatbot-border-radius);color:var(--chatbot-button-color)}.chatbot-button.selectable{border:1px solid #0042da}.chatbot-button.selectable,.chatbot-host-bubble{background-color:#f7f8ff;color:var(--chatbot-host-bubble-color)}.chatbot-host-bubble{word-wrap:break-word;overflow-wrap:break-word;white-space:normal;word-break:break-word}.chatbot-host-bubble>.bubble-typing{background-color:#f7f8ff;border:var(--chatbot-host-bubble-border);border-radius:6px}.chatbot-host-bubble iframe,.chatbot-host-bubble img,.chatbot-host-bubble video{border-radius:var(--chatbot-border-radius)}.chatbot-guest-bubble{word-wrap:break-word;background-color:#3b81f6;border-radius:6px;color:var(--chatbot-guest-bubble-color);overflow-wrap:break-word;white-space:normal;word-break:break-word}.chatbot-input,.feedback-input{background-color:#fff;border-radius:var(--chatbot-border-radius);box-shadow:0 2px 6px -1px rgba(0,0,0,.1);color:#303235}.chatbot-input-error-message{color:#303235}.chatbot-button>.send-icon{fill:var(--chatbot-button-color);stroke:var(--chatbot-button-color)}.regenerate-response-button>.icon-tabler-refresh{height:16px;width:16px}.chatbot-chat-view{max-width:800px}.ping span{background-color:#0042da}.rating-icon-container svg{stroke:#0042da;fill:#f7f8ff;height:42px;transition:fill .1s ease-out;width:42px}.rating-icon-container.selected svg{fill:#0042da}.rating-icon-container:hover svg{filter:brightness(.9)}.rating-icon-container:active svg{filter:brightness(.75)}.upload-progress-bar{background-color:#0042da;border-radius:var(--chatbot-border-radius)}.total-files-indicator{background-color:#0042da;color:var(--chatbot-button-color);font-size:10px}.chatbot-upload-input{transition:border-color .1s ease-out}.chatbot-upload-input.dragging-over{border-color:#0042da}.secondary-button{background-color:#f7f8ff;border-radius:var(--chatbot-border-radius);color:var(--chatbot-host-bubble-color)}.chatbot-country-select{color:#303235}.chatbot-country-select,.chatbot-date-input{background-color:#fff;border-radius:var(--chatbot-border-radius)}.chatbot-date-input{color:#303235;color-scheme:light}.chatbot-popup-blocked-toast{border-radius:var(--chatbot-border-radius)}.messagelist{border-radius:.5rem;height:100%;overflow-y:scroll;width:100%}.messagelistloading{display:flex;justify-content:center;margin-top:1rem;width:100%}.usermessage{padding:1rem 1.5rem}.usermessagewaiting-light{background:linear-gradient(270deg,#ede7f6,#e3f2fd,#ede7f6);background-position:-100% 0;background-size:200% 200%}.usermessagewaiting-dark,.usermessagewaiting-light{animation:loading-gradient 2s ease-in-out infinite;animation-direction:alternate;animation-name:loading-gradient;padding:1rem 1.5rem}.usermessagewaiting-dark{background:linear-gradient(270deg,#2e2352,#1d3d60,#2e2352);background-position:-100% 0;background-size:200% 200%;color:#ececf1}@keyframes loading-gradient{0%{background-position:-100% 0}to{background-position:100% 0}}.apimessage{animation:fadein .5s;padding:1rem 1.5rem}@keyframes fadein{0%{opacity:0}to{opacity:1}}.apimessage,.usermessage,.usermessagewaiting{display:flex}.markdownanswer{line-height:1.75}.markdownanswer a:hover{opacity:.8}.markdownanswer a{color:#16bed7;font-weight:500}.markdownanswer code{color:#15cb19;font-weight:500;white-space:pre-wrap!important}.markdownanswer ol,.markdownanswer ul{margin:1rem}.boticon,.usericon{border-radius:1rem;margin-right:1rem}.markdownanswer h1,.markdownanswer h2,.markdownanswer h3{font-size:inherit}.center{flex-direction:column;padding:10px;position:relative}.center,.cloud{align-items:center;display:flex;justify-content:center}.cloud{border-radius:.5rem;height:calc(100% - 50px);width:400px}input,textarea{background-color:transparent;border:none;font-family:Poppins,sans-serif;padding:10px}@media (max-width:640px){div[part=bot]{height:100%!important;left:0!important;max-height:unset!important;max-width:unset!important;overflow:auto;overflow-x:hidden;position:fixed!important;top:0!important;width:100%!important}.chatbot-container,.rounded-lg,div[class="flex flex-row items-center w-full h-[50px] absolute top-0 left-0 z-10"],div[part=button]{border-radius:0!important}button{cursor:default!important}}.tooltip{background:var(--tooltip-background-color,#000);border-radius:5px;color:var(--tooltip-text-color,#fff);font-size:var(--tooltip-font-size,12px);max-width:calc(100vw - 20px);padding:5px 10px;position:fixed;transition:opacity .3s ease-in-out;white-space:pre-wrap;word-break:break-word;z-index:42424242}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.spinner{animation:spin 1s linear infinite;border:4px solid hsla(0,0%,100%,.3);border-radius:50%;border-top-color:#fff;height:24px;width:24px}.hover\\:scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.hover\\:bg-green-600:hover{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}.hover\\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.hover\\:bg-transparent:hover{background-color:transparent}.hover\\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.hover\\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.hover\\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\\:brightness-90:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus\\:border-blue-500:focus{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}.focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\:ring-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity))}.active\\:scale-95:active{--tw-scale-x:.95;--tw-scale-y:.95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.active\\:bg-emerald-600:active{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.active\\:brightness-75:active{--tw-brightness:brightness(.75);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-50:disabled{opacity:.5}.disabled\\:brightness-100:disabled{--tw-brightness:brightness(1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.group:hover .group-hover\\:flex{display:flex}@media (min-width:640px){.sm\\:right-5{right:20px}.sm\\:my-8{margin-bottom:32px;margin-top:32px}.sm\\:w-\\[400px\\]{width:400px}.sm\\:w-full{width:100%}.sm\\:max-w-lg{max-width:512px}.sm\\:p-0{padding:0}}';const Oe=e=>null==e,Ie=e=>null!=e,ke=async e=>{try{var r="string"==typeof e?e:e.url,o="string"!=typeof e&&Ie(e.body)?{"Content-Type":"application/json",...e.headers}:void 0;let n="string"!=typeof e&&Ie(e.body)?JSON.stringify(e.body):void 0;"string"!=typeof e&&e.formData&&(n=e.formData);var t={method:"string"==typeof e?"GET":e.method,mode:"cors",headers:o,body:n,signal:"string"!=typeof e?e.signal:void 0},a=("string"!=typeof e&&e.onRequest&&await e.onRequest(t),await fetch(r,t));let i;var l=a.headers.get("Content-Type");if(i=l&&l.includes("application/json")?await a.json():"string"!=typeof e&&"blob"===e.type?await a.blob():await a.text(),a.ok)return{data:i};{let e;throw e="object"==typeof i&&"error"in i?i.error:i||a.statusText}}catch(e){return console.error(e),{error:e}}},De=(e,r,o={})=>{var t=localStorage.getItem(e+"_EXTERNAL");o={...o};if(r&&(o.chatId=r),t)try{var a=JSON.parse(t);localStorage.setItem(e+"_EXTERNAL",JSON.stringify({...a,...o}))}catch(a){const r=t;o.chatId=r,localStorage.setItem(e+"_EXTERNAL",JSON.stringify(o))}else localStorage.setItem(e+"_EXTERNAL",JSON.stringify(o))},Re=e=>{if(!(e=localStorage.getItem(e+"_EXTERNAL")))return{};try{return JSON.parse(e)}catch(e){return{}}},Fe=e=>e?"number"==typeof e?e:"small"===e?32:"medium"!==e&&"large"===e?64:48:48,Xe=e=>{if("string"==typeof e)try{var r=document.querySelector(e);return null===r&&console.warn(`[Flowise] dialogContainer selector "${e}" did not match any element. Dialog will render inline.`),r??void 0}catch{return void console.warn(`[Flowise] Invalid dialogContainer selector: "${e}". Dialog will render inline.`)}if(e instanceof HTMLElement)return e},He=ge(''),Ve=ge('Bubble button icon'),Ue=ge('