{"version":3,"file":"index-Ne7pf9XK.mjs","sources":["../node_modules/@antscorp/antsomi-ui/es/components/icons/ExpandMoreIcon.js","../node_modules/es-toolkit/dist/array/last.mjs","../node_modules/es-toolkit/dist/compat/_internal/toArray.mjs","../node_modules/es-toolkit/dist/compat/array/last.mjs","../node_modules/@react-hook/passive-layout-effect/dist/module/index.js","../node_modules/@react-hook/latest/dist/module/index.js","../node_modules/@react-hook/resize-observer/dist/module/index.js","../node_modules/use-debounce/dist/index.module.js","../src/hooks/useAutoScroll.ts","../src/components/ChatConversation/utils.ts","../src/hooks/useChatCompletion.ts","../src/hooks/useDSIdsByConversation.ts","../src/hooks/useLatestAssistantMsg.ts","../src/hooks/useUnmount.ts","../src/components/SenderIcon/styles.ts","../src/components/SenderIcon/SenderIcon.tsx","../src/components/ConversationMessage/components/LoadingBars/LoadingBars.tsx","../src/components/ConversationMessage/store.ts","../src/components/ConversationMessage/provider.tsx","../src/components/ConversationMessage/ConversationMessage.tsx","../src/components/ChatConversation/components/ListMessage/ListMessage.tsx","../src/components/ChatConversation/components/ListMessageWrapper/ListMessageWrapper.tsx","../src/components/ChatConversation/hooks/useChatConversation.ts","../src/components/ChatConversation/ChatConversation.tsx"],"sourcesContent":["import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { forwardRef } from 'react';\nimport { useIcon } from './hooks/useIcon';\nexport const ExpandMoreIcon = forwardRef((props, ref) => {\n    const { width, height } = useIcon(props);\n    return (_jsx(\"svg\", { viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props, ref: ref, width: width, height: height, children: _jsx(\"path\", { d: \"M16.5938 8.57812L18 9.98438L12 15.9844L6 9.98438L7.40625 8.57812L12 13.1719L16.5938 8.57812Z\", fill: \"currentColor\" }) }));\n});\n","function last(arr) {\n    return arr[arr.length - 1];\n}\n\nexport { last };\n","function toArray(value) {\n    return Array.isArray(value) ? value : Array.from(value);\n}\n\nexport { toArray };\n","import { last as last$1 } from '../../array/last.mjs';\nimport { toArray } from '../_internal/toArray.mjs';\nimport { isArrayLike } from '../predicate/isArrayLike.mjs';\n\nfunction last(array) {\n    if (!isArrayLike(array)) {\n        return undefined;\n    }\n    return last$1(toArray(array));\n}\n\nexport { last };\n","import React from 'react';\nconst usePassiveLayoutEffect = React[typeof document !== 'undefined' && document.createElement !== void 0 ? 'useLayoutEffect' : 'useEffect'];\nexport default usePassiveLayoutEffect;","import * as React from 'react';\n\nconst useLatest = current => {\n  const storedValue = React.useRef(current);\n  React.useEffect(() => {\n    storedValue.current = current;\n  });\n  return storedValue;\n};\n\nexport default useLatest;","/* eslint-disable no-return-assign */\n/* eslint-disable no-underscore-dangle */\n\nimport useLayoutEffect from '@react-hook/passive-layout-effect';\nimport useLatest from '@react-hook/latest';\n\n/**\n * A React hook that fires a callback whenever ResizeObserver detects a change to its size\n *\n * @param target A React ref created by `useRef()` or an HTML element\n * @param callback Invoked with a single `ResizeObserverEntry` any time\n *   the `target` resizes\n */\n\nfunction _ref() {}\nfunction useResizeObserver(target, callback, options = {}) {\n  const resizeObserver = getResizeObserver(options.polyfill);\n  const storedCallback = useLatest(callback);\n  useLayoutEffect(() => {\n    let didUnsubscribe = false;\n    const targetEl = target && 'current' in target ? target.current : target;\n    if (!targetEl) return _ref;\n    function cb(entry, observer) {\n      if (didUnsubscribe) return;\n      storedCallback.current(entry, observer);\n    }\n    resizeObserver.subscribe(targetEl, cb);\n    return () => {\n      didUnsubscribe = true;\n      resizeObserver.unsubscribe(targetEl, cb);\n    };\n  }, [target, resizeObserver, storedCallback]);\n  return resizeObserver.observer;\n}\nfunction createResizeObserver(polyfill) {\n  let ticking = false;\n  let allEntries = [];\n  const callbacks = new Map();\n  const observer = new (polyfill || window.ResizeObserver)((entries, obs) => {\n    allEntries = allEntries.concat(entries);\n    function _ref2() {\n      const triggered = new Set();\n      for (let i = 0; i < allEntries.length; i++) {\n        if (triggered.has(allEntries[i].target)) continue;\n        triggered.add(allEntries[i].target);\n        const cbs = callbacks.get(allEntries[i].target);\n        cbs === null || cbs === void 0 ? void 0 : cbs.forEach(cb => cb(allEntries[i], obs));\n      }\n      allEntries = [];\n      ticking = false;\n    }\n    if (!ticking) {\n      window.requestAnimationFrame(_ref2);\n    }\n    ticking = true;\n  });\n  return {\n    observer,\n    subscribe(target, callback) {\n      var _callbacks$get;\n      observer.observe(target);\n      const cbs = (_callbacks$get = callbacks.get(target)) !== null && _callbacks$get !== void 0 ? _callbacks$get : [];\n      cbs.push(callback);\n      callbacks.set(target, cbs);\n    },\n    unsubscribe(target, callback) {\n      var _callbacks$get2;\n      const cbs = (_callbacks$get2 = callbacks.get(target)) !== null && _callbacks$get2 !== void 0 ? _callbacks$get2 : [];\n      if (cbs.length === 1) {\n        observer.unobserve(target);\n        callbacks.delete(target);\n        return;\n      }\n      const cbIndex = cbs.indexOf(callback);\n      if (cbIndex !== -1) cbs.splice(cbIndex, 1);\n      callbacks.set(target, cbs);\n    }\n  };\n}\nlet _resizeObserver;\nconst getResizeObserver = polyfill => !_resizeObserver ? _resizeObserver = createResizeObserver(polyfill) : _resizeObserver;\nexport default useResizeObserver;","import{useRef as r,useEffect as n,useMemo as t,useState as e,useCallback as u}from\"react\";function c(e,u,c){var i=this,a=r(null),o=r(0),f=r(null),l=r([]),v=r(),m=r(),d=r(e),g=r(!0);d.current=e;var p=\"undefined\"!=typeof window,w=!u&&0!==u&&p;if(\"function\"!=typeof e)throw new TypeError(\"Expected a function\");u=+u||0;var s=!!(c=c||{}).leading,x=!(\"trailing\"in c)||!!c.trailing,h=\"maxWait\"in c,y=\"debounceOnServer\"in c&&!!c.debounceOnServer,F=h?Math.max(+c.maxWait||0,u):null;n(function(){return g.current=!0,function(){g.current=!1}},[]);var A=t(function(){var r=function(r){var n=l.current,t=v.current;return l.current=v.current=null,o.current=r,m.current=d.current.apply(t,n)},n=function(r,n){w&&cancelAnimationFrame(f.current),f.current=w?requestAnimationFrame(r):setTimeout(r,n)},t=function(r){if(!g.current)return!1;var n=r-a.current;return!a.current||n>=u||n<0||h&&r-o.current>=F},e=function(n){return f.current=null,x&&l.current?r(n):(l.current=v.current=null,m.current)},c=function r(){var c=Date.now();if(t(c))return e(c);if(g.current){var i=u-(c-a.current),f=h?Math.min(i,F-(c-o.current)):i;n(r,f)}},A=function(){if(p||y){var e=Date.now(),d=t(e);if(l.current=[].slice.call(arguments),v.current=i,a.current=e,d){if(!f.current&&g.current)return o.current=a.current,n(c,u),s?r(a.current):m.current;if(h)return n(c,u),r(a.current)}return f.current||n(c,u),m.current}};return A.cancel=function(){f.current&&(w?cancelAnimationFrame(f.current):clearTimeout(f.current)),o.current=0,l.current=a.current=v.current=f.current=null},A.isPending=function(){return!!f.current},A.flush=function(){return f.current?e(Date.now()):m.current},A},[s,h,u,F,x,w,p,y]);return A}function i(r,n){return r===n}function a(n,t,a){var o=a&&a.equalityFn||i,f=r(n),l=e({})[1],v=c(u(function(r){f.current=r,l({})},[l]),t,a),m=r(n);return o(m.current,n)||(v(n),m.current=n),[f.current,v]}function o(r,n,t){var e=void 0===t?{}:t,u=e.leading,i=e.trailing;return c(r,n,{maxWait:n,leading:void 0===u||u,trailing:void 0===i||i})}export{a as useDebounce,c as useDebouncedCallback,o as useThrottledCallback};\n//# sourceMappingURL=index.module.js.map\n","import useResizeObserver from '@react-hook/resize-observer';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useThrottledCallback } from 'use-debounce';\nimport { useUnmount } from '@/hooks';\n\ntype Params = {\n\tenabled?: boolean;\n\toffset?: number;\n};\n\n/**\n * Check if scroll position is near bottom\n *\n * Formula: scrollTop + clientHeight + offset >= scrollHeight\n *\n * Examples:\n * - No overflow: scrollTop=0, clientHeight=500, scrollHeight=500, offset=200\n *   → 0 + 500 + 200 >= 500 → true (at bottom)\n * - Scrolled to top: scrollTop=0, clientHeight=500, scrollHeight=1000, offset=200\n *   → 0 + 500 + 200 >= 1000 → false (not near bottom)\n * - Near bottom: scrollTop=450, clientHeight=500, scrollHeight=1000, offset=200\n *   → 450 + 500 + 200 >= 1000 → true (within offset range)\n */\nconst checkIsNearBottom = (params: {\n\tscrollTop: number;\n\tclientHeight: number;\n\toffset: number;\n\tscrollHeight: number;\n}) => {\n\tconst { scrollTop, scrollHeight, clientHeight, offset } = params;\n\n\treturn scrollTop + clientHeight + offset >= scrollHeight;\n};\n\n/**\n * Hook for auto-scrolling to bottom when content changes\n *\n * Features:\n * - Auto-scroll when new content appears (if already near bottom)\n * - Show/hide scroll-to-bottom button based on scroll position\n * - Throttled scroll event handling for performance\n * - ResizeObserver for tracking content height changes (supports streaming messages)\n *\n * @param params.enabled - Enable/disable auto-scroll behavior (default: true)\n * @param params.offset - Distance from bottom in pixels to consider \"near bottom\" (default: 200)\n *\n * @example\n * ```tsx\n * const { wrapperRef, contentRef, isNearBottom, scrollToBottom } = useAutoScroll({\n *   enabled: messagesLength > 0,\n *   offset: 200,\n * });\n *\n * return (\n *   <div ref={wrapperRef}>\n *     <div ref={contentRef}>{messages}</div>\n *     {!isNearBottom && <button onClick={() => scrollToBottom()}>⬇</button>}\n *   </div>\n * );\n * ```\n */\nexport const useAutoScroll = <T extends HTMLElement, U extends HTMLElement>(params?: Params) => {\n\tconst { enabled = true, offset = 200 } = params || {};\n\n\t// Both ref and state should start with same value (true = at bottom initially)\n\t// - ref: Used for auto-scroll decision (no re-render)\n\t// - state: Used for button visibility (triggers re-render)\n\tconst isNearBottomRef = useRef(true);\n\n\tconst [wrapperEl, setWrapperEl] = useState<T | null>(null);\n\tconst [listMsgEl, setListMsgEl] = useState<U | null>(null);\n\tconst [isNearBottom, setIsNearBottom] = useState(true);\n\n\t// Throttle scroll event to avoid excessive re-renders\n\t// 150ms balances between responsiveness and performance\n\tconst throttledSetisNearBottom = useThrottledCallback(\n\t\t(value: boolean) => setIsNearBottom(value),\n\t\t150,\n\t);\n\n\tconst scrollToBottom = useCallback(\n\t\t(opts?: { behavior: ScrollBehavior }) => {\n\t\t\tif (!wrapperEl) return;\n\n\t\t\twrapperEl.scrollTo({\n\t\t\t\ttop: wrapperEl.scrollHeight,\n\t\t\t\tbehavior: opts?.behavior || 'instant',\n\t\t\t});\n\n\t\t\t// Update state immediately after programmatic scroll\n\t\t\tisNearBottomRef.current = true;\n\t\t\tsetIsNearBottom(true);\n\t\t},\n\t\t[wrapperEl],\n\t);\n\n\t/**\n\t * Initial position check when wrapper mounts or offset changes\n\t * This ensures button visibility is correct from the start\n\t */\n\tuseEffect(() => {\n\t\tif (!wrapperEl) return;\n\n\t\tconst { scrollTop, scrollHeight, clientHeight } = wrapperEl;\n\t\tconst nearBottom = checkIsNearBottom({\n\t\t\tscrollHeight,\n\t\t\tscrollTop,\n\t\t\tclientHeight,\n\t\t\toffset,\n\t\t});\n\n\t\tisNearBottomRef.current = nearBottom;\n\t\tsetIsNearBottom(nearBottom);\n\t}, [wrapperEl, offset]);\n\n\t/**\n\t * Scroll event listener\n\t * Updates both ref (for auto-scroll decision) and state (for button visibility)\n\t */\n\tuseEffect(() => {\n\t\tconst controller = new AbortController();\n\n\t\twrapperEl?.addEventListener(\n\t\t\t'scroll',\n\t\t\t() => {\n\t\t\t\tconst { scrollTop, scrollHeight, clientHeight } = wrapperEl;\n\n\t\t\t\tisNearBottomRef.current = checkIsNearBottom({\n\t\t\t\t\tscrollHeight,\n\t\t\t\t\tscrollTop,\n\t\t\t\t\tclientHeight,\n\t\t\t\t\toffset,\n\t\t\t\t});\n\n\t\t\t\tthrottledSetisNearBottom(isNearBottomRef.current);\n\t\t\t},\n\t\t\t{\n\t\t\t\tsignal: controller.signal,\n\t\t\t},\n\t\t);\n\n\t\treturn () => controller.abort();\n\t}, [wrapperEl, offset, throttledSetisNearBottom]);\n\n\t/**\n\t * ResizeObserver for content changes\n\t * Handles streaming messages where content height gradually increases\n\t * Auto-scrolls to bottom if user was already near bottom\n\t */\n\tuseResizeObserver(listMsgEl, (entry) => {\n\t\tif (!(enabled && listMsgEl)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!entry.target.isSameNode(listMsgEl)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (isNearBottomRef.current) {\n\t\t\tscrollToBottom(); // State is updated inside scrollToBottom()\n\t\t}\n\t});\n\n\t/**\n\t * Reset scroll position to top when component unmounts\n\t * This ensures a fresh start when switching between conversations\n\t */\n\tuseUnmount(() => {\n\t\tif (!wrapperEl) {\n\t\t\treturn;\n\t\t}\n\n\t\twrapperEl.scrollTop = 0;\n\t});\n\n\treturn {\n\t\tcontentRef: setListMsgEl,\n\t\twrapperRef: setWrapperEl,\n\t\tscrollToBottom,\n\t\tisNearBottom,\n\t};\n};\n","import clsx from 'clsx';\nimport { MESSAGE_TYPE } from '@/constants/lib';\nimport type { Message } from '@/types';\nimport type { ChartNodeViewAttrs, ChartNodeViewClasses } from '@/types/tiptap';\nimport { Utils } from '@/utils';\nimport styles from './styles.module.css';\n\nexport const checkAllowSendMessage = (params: { messages: Message[] }): boolean => {\n\tconst { messages } = params;\n\tconst orderedMessages = Utils.message.order(messages);\n\n\tconst hasRequestDSNoneSelected = orderedMessages.some(\n\t\t(msg) => msg.content.type === MESSAGE_TYPE.reqDatasource && !msg.content.userSelected,\n\t);\n\n\treturn !hasRequestDSNoneSelected;\n};\n\nexport const getChartWrapperCls =\n\t(wrapperCls?: ChartNodeViewClasses['wrapper']) => (attrs: ChartNodeViewAttrs) => {\n\t\tconst baseCls = clsx(styles['chart-wrapper'], styles[attrs.identifier]);\n\n\t\tif (typeof wrapperCls === 'string') {\n\t\t\treturn clsx(wrapperCls, baseCls);\n\t\t}\n\n\t\tif (wrapperCls && attrs) {\n\t\t\treturn clsx(wrapperCls(attrs), baseCls);\n\t\t}\n\n\t\treturn baseCls;\n\t};\n","import { uniqBy } from 'es-toolkit';\nimport { useCallback, useState } from 'react';\nimport { checkAllowSendMessage } from '@/components/ChatConversation/utils';\nimport { MESSAGE_STATUS, SENDER } from '@/constants/lib';\nimport { useAuthContext, useLatestAssistantMsg } from '@/hooks';\nimport { UseCreateMessage } from '@/queries/useCreateMessage';\nimport { UseGetConversation } from '@/queries/useGetConversation/useGetConversation';\nimport type { Conversation, Message } from '@/types';\nimport { Utils } from '@/utils';\n\ntype Params = {\n\tconversationId?: Conversation['id'];\n};\n\nexport const useChatCompletion = (params: Params) => {\n\tconst { conversationId } = params;\n\n\tconst auth = useAuthContext();\n\n\tconst [tempMessages, setTempMessages] = useState<Message[]>([]);\n\n\tconst { data: conversation, isLoading } = UseGetConversation.query({\n\t\tauth,\n\t\tid: conversationId,\n\t\tonSuccess: () => setTempMessages(() => []),\n\t});\n\n\tconst orderedMessages = Utils.message.order(conversation?.messages || []);\n\n\tconst { msg: latestAssistantMsg } = useLatestAssistantMsg({ conversationId });\n\n\tconst { send: sendNewMessage, isSending } = UseCreateMessage.mutate({ auth });\n\n\tconst allowSendMsg = checkAllowSendMessage({\n\t\tmessages: orderedMessages,\n\t});\n\n\tconst handleSendMessage = useCallback(\n\t\t(\n\t\t\tnewMessage: Message,\n\t\t\topts?: {\n\t\t\t\tonSuccess?: (p: { questionMsg: Message; answerMsg: Message }) => void;\n\t\t\t},\n\t\t) => {\n\t\t\tif (!(conversationId && latestAssistantMsg?.agentId)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Temporarily add the message question to UI\n\t\t\tsetTempMessages(() => [\n\t\t\t\tnewMessage,\n\n\t\t\t\tUtils.message.make({\n\t\t\t\t\tconversationId,\n\t\t\t\t\tstatus: MESSAGE_STATUS.WAITING_INITIAL,\n\t\t\t\t\tsender: SENDER.assistant,\n\t\t\t\t}),\n\t\t\t]);\n\n\t\t\tsendNewMessage(\n\t\t\t\t{ messages: [...orderedMessages, newMessage] },\n\t\t\t\t{\n\t\t\t\t\tonSuccess: (data) => {\n\t\t\t\t\t\t/** After successfully creating a message, we need to temporarily add the message question and its answer to the UI.\n\t\t\t\t\t\t * This will allow the UI to display these messages immediately,\n\t\t\t\t\t\t * before the React Query refetches and re-renders the message list with the updated data from the server. */\n\n\t\t\t\t\t\tconst tempQuestionMsg: Message = {\n\t\t\t\t\t\t\t...newMessage,\n\t\t\t\t\t\t\tid: data.parentId,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst tempAnswerMsg: Message = {\n\t\t\t\t\t\t\t...data.message,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tsetTempMessages(() => [tempQuestionMsg, tempAnswerMsg]);\n\n\t\t\t\t\t\topts?.onSuccess?.({\n\t\t\t\t\t\t\tquestionMsg: tempQuestionMsg,\n\t\t\t\t\t\t\tanswerMsg: tempAnswerMsg,\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\n\t\t\t\t\tonError: () => {\n\t\t\t\t\t\tconst tempErrMsg: Message = Utils.message.make({\n\t\t\t\t\t\t\tagentId: latestAssistantMsg.agentId,\n\t\t\t\t\t\t\tconversationId,\n\t\t\t\t\t\t\tsender: SENDER.assistant,\n\t\t\t\t\t\t\tcontent: {\n\t\t\t\t\t\t\t\ttype: 'helper',\n\t\t\t\t\t\t\t\tstatus: 'danger',\n\t\t\t\t\t\t\t\thelp: 'Something went wrong. Please try again!',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tsetTempMessages((prev) => [prev[0], tempErrMsg]);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\t[latestAssistantMsg?.agentId, conversationId, orderedMessages, sendNewMessage],\n\t);\n\n\treturn {\n\t\tisLoading,\n\t\tisSending,\n\t\tallowSendMsg,\n\t\tmessages: uniqBy([...orderedMessages, ...tempMessages], (msg) => msg.id),\n\t\tsendMessage: handleSendMessage,\n\t};\n};\n","import { UseGetConversation } from '@/queries/useGetConversation/useGetConversation';\nimport type { Conversation, Datasource } from '@/types';\nimport { Utils } from '@/utils';\nimport { useAuthContext } from './useGetAuthInfo';\n\ntype Params = Partial<{\n\tconversationId: Conversation['id'];\n}>;\n\nexport const useDSIdsByConversation = (params: Params) => {\n\tconst { conversationId } = params;\n\n\tconst auth = useAuthContext();\n\n\tconst { data: conversation } = UseGetConversation.query({\n\t\tauth,\n\t\tid: conversationId,\n\t});\n\n\tconst usedDataSouceIds: Datasource['id'][] = conversation\n\t\t? Utils.conversation.getUsedDataSourceIds(conversation)\n\t\t: [];\n\n\treturn { dataSourceIds: usedDataSouceIds };\n};\n","import { last } from 'es-toolkit/compat';\nimport { SENDER } from '@/constants';\nimport { UseGetConversation } from '@/queries/useGetConversation/useGetConversation';\nimport type { Conversation } from '@/types';\nimport { Utils } from '@/utils';\nimport { useAuthContext } from './useGetAuthInfo';\n\ntype Params = Partial<{\n\tconversationId: Conversation['id'];\n}>;\n\nexport const useLatestAssistantMsg = (params: Params) => {\n\tconst { conversationId } = params;\n\n\tconst auth = useAuthContext();\n\n\tconst { data: conversation } = UseGetConversation.query({\n\t\tauth,\n\t\tid: conversationId,\n\t});\n\n\tconst orderedMessages = Utils.message.order(conversation?.messages || []);\n\n\tconst latestAssistantMsg = last(orderedMessages.filter((msg) => msg.sender === SENDER.assistant));\n\n\treturn { msg: latestAssistantMsg };\n};\n","import { useEffect, useRef } from 'react';\n\nexport function useUnmount(func: () => void) {\n\tconst funcRef = useRef(func);\n\n\tfuncRef.current = func;\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tfuncRef.current();\n\t\t},\n\t\t[],\n\t);\n}\n","import { THEME } from '@antscorp/antsomi-ui/es/constants';\nimport styled from 'styled-components';\n\nexport const SenderIconRoot = styled.div`\n  border: 1px solid ${THEME.token?.bw3};\n  border-radius: 10px;\n  position: relative;\n  height: 30px;\n  width: 30px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n`;\n","import { AntsomiAIIcon } from '@antscorp/antsomi-ui/es/components/icons';\nimport React from 'react';\nimport { SENDER } from '@/constants/lib';\nimport type { Message } from '@/types';\nimport { SenderIconRoot } from './styles';\n\ntype SenderIconProps = {\n\tsender: Message['sender'];\n};\n\nexport const SenderIcon = (props: SenderIconProps) => {\n\tconst { sender } = props;\n\n\tlet icon: React.ReactNode = null;\n\n\tswitch (sender) {\n\t\tcase SENDER.assistant: {\n\t\t\ticon = <AntsomiAIIcon size={24} data-testid=\"sender-icon\" />;\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\n\treturn icon ? <SenderIconRoot>{icon}</SenderIconRoot> : null;\n};\n","import { Typography } from '@antscorp/antsomi-ui';\nimport { THEME } from '@antscorp/antsomi-ui/es/constants';\nimport React from 'react';\nimport styles from './styles.module.css';\n\ntype LoadingBarsProps = {\n\theight?: number;\n\tsize?: number;\n\ttitle?: string;\n};\n\ndeclare module 'react' {\n\tinterface CSSProperties {\n\t\t'--list-height'?: number;\n\t\t'--bar-delay'?: number;\n\t\t'--bar-color'?: string;\n\t}\n}\n\nexport const LoadingBars = (props: LoadingBarsProps) => {\n\tconst { height = 20, size = 8, title } = props;\n\n\tconst bars: React.ReactNode[] = [];\n\n\tfor (let i = 0; i < size; i++) {\n\t\tbars.push(\n\t\t\t<div\n\t\t\t\tkey={i}\n\t\t\t\tclassName={styles.bar}\n\t\t\t\tstyle={{\n\t\t\t\t\t'--bar-color': THEME.token?.colorPrimary,\n\t\t\t\t\t'--bar-delay': +((1 / size) * i).toFixed(2),\n\t\t\t\t}}\n\t\t\t/>,\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className={styles.wrapper}>\n\t\t\t<div style={{ '--list-height': height }} className={styles['list-bars']}>\n\t\t\t\t{bars}\n\t\t\t</div>\n\n\t\t\t{title && <Typography.Text>{title}</Typography.Text>}\n\t\t</div>\n\t);\n};\n","import { createStore } from 'zustand';\nimport { devtools } from 'zustand/middleware';\nimport { immer } from 'zustand/middleware/immer';\nimport type { Message } from '@/types';\nimport type { ChartInfo } from '@/types/tiptap';\nimport type { ConversationMessageState, ConversationMessageStore } from './types';\n\nconst initialState: Omit<ConversationMessageState, 'message'> = {\n\tdynamicContent: {\n\t\tcharts: {\n\t\t\tids: new Set(),\n\t\t\tmap: new Map(),\n\t\t},\n\t},\n};\n\nexport const createConversationMessageStore = (params: { message: Message }) => {\n\tconst { message } = params;\n\n\tconst initializer = devtools(\n\t\timmer<ConversationMessageStore>((set, get) => ({\n\t\t\t...initialState,\n\t\t\tmessage,\n\n\t\t\tupdateDynamicContent: (updated) => {\n\t\t\t\tset((state) => {\n\t\t\t\t\tstate.dynamicContent = updated;\n\t\t\t\t});\n\t\t\t},\n\n\t\t\tupdateDynamicCharts: (updated) => {\n\t\t\t\tset((state) => {\n\t\t\t\t\tstate.dynamicContent.charts = updated;\n\t\t\t\t});\n\t\t\t},\n\n\t\t\tsetDynamicChart: (id: string, info: ChartInfo) => {\n\t\t\t\tconst updatedIds = new Set(get().dynamicContent.charts.ids).add(id);\n\t\t\t\tconst updatedMap = new Map(get().dynamicContent.charts.map).set(id, info);\n\n\t\t\t\tset((state) => {\n\t\t\t\t\tstate.dynamicContent.charts = {\n\t\t\t\t\t\tids: updatedIds,\n\t\t\t\t\t\tmap: updatedMap,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t},\n\t\t})),\n\t\t{\n\t\t\tname: `ConversationMessageStore_${message.id}`,\n\t\t},\n\t);\n\n\treturn createStore<ConversationMessageStore>()(initializer);\n};\n","import { createContext, type ReactNode, useEffect, useRef } from 'react';\nimport type { Message } from '@/types';\nimport { createConversationMessageStore } from './store';\nimport type { ChartProps } from './types';\n\nexport type ConversationAnalyticStoreApi = ReturnType<typeof createConversationMessageStore>;\n\nexport type ConversationMessageProviderProps = {\n\tchildren: ReactNode;\n\tmessage: Message;\n\tchart?: ChartProps;\n};\n\nexport const ConversationMessageContext = createContext<ConversationAnalyticStoreApi | undefined>(\n\tundefined,\n);\n\nexport const ConversationMessageProvider = (props: ConversationMessageProviderProps) => {\n\tconst { children, message, chart } = props;\n\n\tconst storeRef = useRef<ConversationAnalyticStoreApi>(\n\t\tcreateConversationMessageStore({ message }),\n\t);\n\n\tuseEffect(() => {\n\t\tstoreRef.current?.setState((state) => {\n\t\t\tstate.dynamicContent.charts.extra = chart;\n\t\t\tstate.message = message;\n\t\t});\n\t}, [chart, message]);\n\n\tif (!storeRef.current) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<ConversationMessageContext.Provider value={storeRef.current}>\n\t\t\t{children}\n\t\t</ConversationMessageContext.Provider>\n\t);\n};\n","import '@/assets/css/main.css';\n\nimport { Suspense, Typography } from '@antscorp/antsomi-ui';\nimport clsx from 'clsx';\nimport { forwardRef, lazy } from 'react';\nimport { ANTSOMI_AI_AGENT } from '@/constants';\nimport { MESSAGE_STATUS, SENDER } from '@/constants/lib';\nimport { SenderIcon } from '../SenderIcon';\nimport { LoadingBars } from './components/LoadingBars';\nimport { ConversationMessageProvider } from './provider';\n\nimport styles from './styles.module.css';\n\nimport type { ConversationMessageProps } from './types';\n\nconst Content = lazy(() => import('./components/Content'));\n\nexport const ConversationMessage = forwardRef<HTMLDivElement, ConversationMessageProps>(\n\t(props, ref) => {\n\t\tconst { message, className, chartProps, classes, ...restDivProps } = props;\n\n\t\tconst isOwnMessage = message.sender === SENDER.user;\n\t\tconst isAssistantMessage = message.sender === SENDER.assistant;\n\n\t\treturn (\n\t\t\t<ConversationMessageProvider message={message} chart={chartProps}>\n\t\t\t\t<div\n\t\t\t\t\t{...restDivProps}\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={clsx(\n\t\t\t\t\t\tstyles['conver-message'],\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t[styles['own-message']]: isOwnMessage,\n\t\t\t\t\t\t\t[styles['assistant-message']]: isAssistantMessage,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tdata-testid=\"conversation-message\"\n\t\t\t\t>\n\t\t\t\t\t<SenderIcon sender={message.sender} />\n\n\t\t\t\t\t{isAssistantMessage && message.status === MESSAGE_STATUS.WAITING_INITIAL ? (\n\t\t\t\t\t\t<div className={styles['waiting-init-msg']}>\n\t\t\t\t\t\t\t<span className={styles['helper-text']}>Please waiting...</span>\n\n\t\t\t\t\t\t\t<LoadingBars height={16} size={6} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className={clsx(styles['slot-right'], classes?.slotRight)}>\n\t\t\t\t\t\t\t{message.sender === SENDER.assistant && (\n\t\t\t\t\t\t\t\t<Typography.Text>{ANTSOMI_AI_AGENT[message.agentId].name}</Typography.Text>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t<Suspense>\n\t\t\t\t\t\t\t\t<Content className={clsx(styles.content, classes?.content)} />\n\t\t\t\t\t\t\t</Suspense>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</ConversationMessageProvider>\n\t\t);\n\t},\n);\n","import { ConversationMessage } from '@/components/ConversationMessage';\nimport type { Message } from '@/types';\nimport styles from '../../styles.module.css';\nimport type { MessageProps } from '../../types';\nimport { getChartWrapperCls } from '../../utils';\n\nexport type ListMessageProps = {\n\tmessages?: Message[];\n\tmessageProps?: MessageProps;\n};\n\nexport const ListMessage = (props: ListMessageProps) => {\n\tconst { messages = [], messageProps } = props;\n\n\tconst { chartProps } = messageProps || {};\n\n\treturn messages.map((message) => {\n\t\tconst { id } = message;\n\n\t\treturn (\n\t\t\t<ConversationMessage\n\t\t\t\tkey={id}\n\t\t\t\tmessage={message}\n\t\t\t\tclassName={styles.message}\n\t\t\t\tclasses={{\n\t\t\t\t\tcontent: styles['message-content'],\n\t\t\t\t\tslotRight: styles['slot-right'],\n\t\t\t\t}}\n\t\t\t\tchartProps={{\n\t\t\t\t\t...chartProps,\n\t\t\t\t\tclasses: {\n\t\t\t\t\t\t...chartProps?.classes,\n\t\t\t\t\t\twrapper: getChartWrapperCls(chartProps?.classes?.wrapper),\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t/>\n\t\t);\n\t});\n};\n","import { Button, Spin } from '@antscorp/antsomi-ui';\nimport { ExpandMoreIcon } from '@antscorp/antsomi-ui/es/components/icons';\nimport clsx from 'clsx';\nimport React from 'react';\nimport { useAutoScroll } from '@/hooks';\nimport styles from '../../styles.module.css';\n\ntype ListMessageWrapperProps = {\n\tchildren: React.ReactNode;\n\tmessagesLength?: number;\n\tloading?: boolean;\n\tclassName?: string;\n};\n\nexport const ListMessageWrapper = (props: ListMessageWrapperProps) => {\n\tconst { children, messagesLength = 0, loading = false, className = '' } = props;\n\n\tconst autoScrollEnable = messagesLength > 0 && !loading;\n\n\tconst {\n\t\twrapperRef,\n\t\tcontentRef: listRef,\n\t\tisNearBottom,\n\t\tscrollToBottom,\n\t} = useAutoScroll({\n\t\tenabled: autoScrollEnable,\n\t});\n\n\tif (loading) {\n\t\treturn <Spin className={styles.spin} indicatorSize={20} />;\n\t}\n\n\treturn (\n\t\t<div className={clsx(styles['list-message'], className)}>\n\t\t\t<div className={clsx(styles['list-message-overflow'])} ref={wrapperRef}>\n\t\t\t\t<div className={styles['list-message-content']} ref={listRef}>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{!isNearBottom && autoScrollEnable && (\n\t\t\t\t<Button\n\t\t\t\t\tshape=\"circle\"\n\t\t\t\t\tclassName={styles['to-bottom-btn']}\n\t\t\t\t\ticon={<ExpandMoreIcon />}\n\t\t\t\t\tonClick={() => scrollToBottom({ behavior: 'smooth' })}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n","import { last } from 'es-toolkit';\nimport { useCallback } from 'react';\nimport { ANTSOMI_AI_AGENT_ID, SENDER } from '@/constants/lib';\nimport { useDSIdsByConversation } from '@/hooks';\nimport { useChatCompletion } from '@/hooks/useChatCompletion';\nimport type { Conversation } from '@/types';\nimport { Utils } from '@/utils';\nimport { checkAllowSendMessage } from '../utils';\n\ntype Params = {\n\tconversationId: Conversation['id'];\n};\n\nexport const useChatConversation = (params: Params) => {\n\tconst { conversationId } = params;\n\n\tconst { messages, isLoading, isSending, sendMessage } = useChatCompletion({ conversationId });\n\n\tconst { dataSourceIds: usedDSIds } = useDSIdsByConversation({ conversationId });\n\n\tconst latestAgentMsg = last(messages.filter((msg) => msg.sender === SENDER.assistant));\n\tconst latestDSId = last(usedDSIds);\n\n\tconst allowSendMsg = checkAllowSendMessage({ messages });\n\n\tconst handleSendMessage = useCallback(\n\t\t(prompt: string, opts?: { onSuccess: () => void }) => {\n\t\t\tif (!latestAgentMsg?.agentId) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst newMessage = Utils.message.make({\n\t\t\t\tagentId: latestAgentMsg.agentId,\n\t\t\t\tconversationId,\n\t\t\t\tcontent: {\n\t\t\t\t\ttype: 'text',\n\t\t\t\t\ttext: prompt,\n\t\t\t\t},\n\n\t\t\t\t...(latestAgentMsg.agentId === ANTSOMI_AI_AGENT_ID.chart && {\n\t\t\t\t\tdataSourceId: latestDSId || null,\n\t\t\t\t}),\n\t\t\t});\n\n\t\t\tsendMessage(newMessage, {\n\t\t\t\tonSuccess: opts?.onSuccess,\n\t\t\t});\n\t\t},\n\t\t[conversationId, latestAgentMsg, latestDSId, sendMessage],\n\t);\n\n\treturn {\n\t\tisLoading,\n\t\tisSending,\n\t\tallowSendMsg,\n\t\tmessages,\n\t\tsendMessage: handleSendMessage,\n\t};\n};\n","import clsx from 'clsx';\nimport { useCallback } from 'react';\nimport { ChatInput } from '../ChatInput';\nimport { ListMessage, ListMessageWrapper } from './components';\nimport { useChatConversation } from './hooks';\nimport styles from './styles.module.css';\nimport type { ChatConversationProps } from './types';\n\nexport const ChatConversation = (props: ChatConversationProps) => {\n\tconst { conversationId, messageProps, className } = props;\n\n\tconst { allowSendMsg, messages, isLoading, sendMessage } = useChatConversation({\n\t\tconversationId,\n\t});\n\n\tconst handleOnSubmit = useCallback(\n\t\t({ text }: { text: string }) => sendMessage(text),\n\t\t[sendMessage],\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={clsx(\n\t\t\t\tstyles['chat-conversation'],\n\t\t\t\t{\n\t\t\t\t\t[styles.loading]: isLoading,\n\t\t\t\t},\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<ListMessageWrapper\n\t\t\t\tloading={isLoading}\n\t\t\t\tclassName={styles['list-mesage']}\n\t\t\t\tmessagesLength={messages.length}\n\t\t\t>\n\t\t\t\t<ListMessage messageProps={messageProps} messages={messages} />\n\t\t\t</ListMessageWrapper>\n\n\t\t\t<div className={styles['chat-input-wrapper']}>\n\t\t\t\t<ChatInput\n\t\t\t\t\tclassName={styles['chat-input']}\n\t\t\t\t\tdisabled={!allowSendMsg}\n\t\t\t\t\tonSubmit={handleOnSubmit}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n"],"names":["ExpandMoreIcon","forwardRef","props","ref","width","height","useIcon","_jsx","last","arr","toArray","value","array","isArrayLike","last$1","usePassiveLayoutEffect","React","useLatest","current","storedValue","_ref","useResizeObserver","target","callback","options","resizeObserver","getResizeObserver","storedCallback","useLayoutEffect","didUnsubscribe","targetEl","cb","entry","observer","createResizeObserver","polyfill","ticking","allEntries","callbacks","entries","obs","_ref2","triggered","i","cbs","_callbacks$get","_callbacks$get2","cbIndex","_resizeObserver","c","u","a","r","o","f","l","v","m","d","g","p","w","s","x","h","y","F","n","A","t","e","checkIsNearBottom","params","scrollTop","scrollHeight","clientHeight","offset","useAutoScroll","enabled","isNearBottomRef","useRef","wrapperEl","setWrapperEl","useState","listMsgEl","setListMsgEl","isNearBottom","setIsNearBottom","throttledSetisNearBottom","useThrottledCallback","scrollToBottom","useCallback","opts","useEffect","nearBottom","controller","useUnmount","checkAllowSendMessage","messages","Utils","msg","MESSAGE_TYPE","getChartWrapperCls","wrapperCls","attrs","baseCls","clsx","styles","useChatCompletion","conversationId","auth","useAuthContext","tempMessages","setTempMessages","conversation","isLoading","UseGetConversation","orderedMessages","latestAssistantMsg","useLatestAssistantMsg","sendNewMessage","isSending","UseCreateMessage","allowSendMsg","handleSendMessage","newMessage","MESSAGE_STATUS","SENDER","data","tempQuestionMsg","tempAnswerMsg","tempErrMsg","prev","uniqBy","useDSIdsByConversation","func","funcRef","SenderIconRoot","styled","THEME","SenderIcon","sender","icon","AntsomiAIIcon","LoadingBars","size","title","bars","Typography","initialState","createConversationMessageStore","message","initializer","devtools","immer","set","get","updated","state","id","info","updatedIds","updatedMap","createStore","ConversationMessageContext","createContext","ConversationMessageProvider","children","chart","storeRef","Content","lazy","ConversationMessage","className","chartProps","classes","restDivProps","isOwnMessage","isAssistantMessage","ANTSOMI_AI_AGENT","Suspense","ListMessage","messageProps","ListMessageWrapper","messagesLength","loading","autoScrollEnable","wrapperRef","listRef","Spin","Button","useChatConversation","sendMessage","usedDSIds","latestAgentMsg","latestDSId","prompt","ANTSOMI_AI_AGENT_ID","ChatConversation","handleOnSubmit","text","ChatInput"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7]}