@ytsaurus/ui 3.3.1 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/public/build/assets-manifest.json +20 -20
- package/dist/public/build/js/2563.bbb74274.chunk.js +2 -0
- package/dist/public/build/js/2563.bbb74274.chunk.js.map +1 -0
- package/dist/public/build/js/4237.57c56e6b.chunk.js +3 -0
- package/dist/public/build/js/4237.57c56e6b.chunk.js.map +1 -0
- package/dist/public/build/js/{app-navigation-page-layout.27364587.chunk.js → app-navigation-page-layout.afb1c1ba.chunk.js} +2 -2
- package/dist/public/build/js/app-navigation-page-layout.afb1c1ba.chunk.js.map +1 -0
- package/dist/public/build/js/{app-navigation.b86557c0.chunk.js → app-navigation.38835895.chunk.js} +2 -2
- package/dist/public/build/js/{app-navigation.b86557c0.chunk.js.map → app-navigation.38835895.chunk.js.map} +1 -1
- package/dist/public/build/js/{code-assistant-chat.4275144c.chunk.js → code-assistant-chat.a7927638.chunk.js} +2 -2
- package/dist/public/build/js/{code-assistant-chat.4275144c.chunk.js.map → code-assistant-chat.a7927638.chunk.js.map} +1 -1
- package/dist/public/build/js/main.7226048e.js +3 -0
- package/dist/public/build/js/main.7226048e.js.map +1 -0
- package/dist/public/build/js/{query-tracker.17cb6d4e.chunk.js → query-tracker.1b6d537a.chunk.js} +2 -2
- package/dist/public/build/js/{query-tracker.17cb6d4e.chunk.js.map → query-tracker.1b6d537a.chunk.js.map} +1 -1
- package/dist/public/build/js/{runtime.6000b37f.js → runtime.9aefe6d7.js} +2 -2
- package/dist/public/build/js/{runtime.6000b37f.js.map → runtime.9aefe6d7.js.map} +1 -1
- package/dist/public/build/manifest.json +16 -16
- package/dist/server/controllers/ai-chat.js +2 -1
- package/dist/server/types/ai-chat.d.ts +3 -0
- package/package.json +2 -2
- package/dist/public/build/js/3205.87c8575d.chunk.js +0 -2
- package/dist/public/build/js/3205.87c8575d.chunk.js.map +0 -1
- package/dist/public/build/js/4237.a6d263f6.chunk.js +0 -3
- package/dist/public/build/js/4237.a6d263f6.chunk.js.map +0 -1
- package/dist/public/build/js/app-navigation-page-layout.27364587.chunk.js.map +0 -1
- package/dist/public/build/js/main.39129d1a.js +0 -3
- package/dist/public/build/js/main.39129d1a.js.map +0 -1
- /package/dist/public/build/js/{4237.a6d263f6.chunk.js.LICENSE.txt → 4237.57c56e6b.chunk.js.LICENSE.txt} +0 -0
- /package/dist/public/build/js/{main.39129d1a.js.LICENSE.txt → main.7226048e.js.LICENSE.txt} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"js/code-assistant-chat.4275144c.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./src/ui/components/Markdown/Markdown.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/plus.svg","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevron-up.svg","webpack://@ytsaurus/ui/./src/ui/components/InfiniteScrollLoader/InfiniteScrollLoader.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/ChatFile/ChatFilePopup/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/ChatFile/ChatFilePopup/textFileValidator.ts","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/ChatFile/ChatFilePopup/ChatFilePopup.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/ChatFile/ChatFileButton.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/ChatInput.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/list-ul.svg","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/ChatHeader/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/ChatHeader/ChatHeader.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/EmptyChat/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/EmptyChat/EmptyChat.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/Message/AnswerBody.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/Message/McpSearchAnswer/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/Message/McpMessage.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/Message/McpSearchAnswer/McpSearchAnswer.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/Message/McpSchemaAnswer/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/Message/McpSchemaAnswer/McpSchemaAnswer.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/Message/McpUnknownAnswer/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/Message/McpUnknownAnswer/McpUnknownAnswer.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/Message/getMessageComponentByType.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/Message/Message.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/Messages/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/Messages/Messages.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/CurrentAnswer.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/ChatHistory/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/ChatHistory/ChatHistoryItem.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/ChatHistory/ChatHistory.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/ChatBody.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/Chat.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/arrow-up-right-from-square.svg","webpack://@ytsaurus/ui/./node_modules/@diplodoc/transform/node_modules/@diplodoc/tabs-extension/src/common.ts","webpack://@ytsaurus/ui/./node_modules/@diplodoc/transform/node_modules/@diplodoc/tabs-extension/src/runtime/utils.ts","webpack://@ytsaurus/ui/./node_modules/@diplodoc/transform/node_modules/@diplodoc/tabs-extension/src/runtime/TabsController.ts","webpack://@ytsaurus/ui/./node_modules/@diplodoc/transform/node_modules/get-root-node-polyfill/index.js","webpack://@ytsaurus/ui/./node_modules/@diplodoc/transform/node_modules/@diplodoc/tabs-extension/src/runtime/index.ts","webpack://@ytsaurus/ui/./node_modules/@diplodoc/transform/src/js/polyfill.js","webpack://@ytsaurus/ui/./node_modules/@diplodoc/transform/src/js/utils.ts","webpack://@ytsaurus/ui/./node_modules/@diplodoc/transform/src/js/code.ts","webpack://@ytsaurus/ui/./node_modules/@diplodoc/transform/src/js/cut.ts","webpack://@ytsaurus/ui/./node_modules/@diplodoc/transform/src/js/term/utils.ts","webpack://@ytsaurus/ui/./node_modules/@diplodoc/transform/src/js/term/index.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/ChevronDown.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevron-down.svg","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/QuerySettingsButton/PopupWithCloseButton.tsx","webpack://@ytsaurus/ui/./src/ui/components/FilePicker/FilePicker.tsx","webpack://@ytsaurus/ui/./src/ui/components/FileDropZone/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/components/FileDropZone/FileDropZone.tsx","webpack://@ytsaurus/ui/./src/ui/components/FileDropZone/useFileDragDrop.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/arrow-up.svg","webpack://@ytsaurus/ui/./node_modules/react-use/esm/useToggle.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/ArrowToggle/ArrowToggle.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/circle-question.svg","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/paperclip.svg","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/controls/TextArea/TextAreaControl.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/controls/TextArea/TextArea.tsx"],"sourcesContent":["import React, {memo} from 'react';\nimport cn from 'bem-cn-lite';\nimport axios from 'axios';\n\nimport {OutputType} from '@diplodoc/transform/lib/typings';\n\nimport {wrapApiPromiseByToaster} from '../../utils/utils';\nimport UIFactory from '../../UIFactory';\n\nimport './Markdown.scss';\nimport '@diplodoc/transform/dist/css/yfm.css';\nimport '@diplodoc/transform/dist/js/yfm';\nimport './yfm-overrides.scss';\n\nconst block = cn('yt-markdown');\n\ninterface Props {\n text: string;\n allowHTML?: boolean;\n}\n\ninterface Response {\n result?: {html?: string; plainText?: string};\n}\n\nconst emptyTransformResponse: OutputType = {\n result: {html: '', headings: []},\n logs: {info: [], warn: [], error: [], disabled: []},\n};\n\nexport async function transformMarkdown({text, allowHTML}: Props): Promise<OutputType> {\n try {\n const {data} = await wrapApiPromiseByToaster(\n axios.post<Response>('/api/markdown-to-html', {\n text,\n allowHTML,\n }),\n {\n toasterName: 'useMarkdown',\n skipSuccessToast: true,\n errorContent: 'Failed to transform markdown text',\n },\n );\n return data as OutputType;\n } catch (e) {\n return {\n result: {...emptyTransformResponse['result']},\n logs: {...emptyTransformResponse['logs'], error: [(e as Error).message]},\n };\n }\n}\n\nexport function useMarkdown({text, allowHTML = true}: Props) {\n const [res, setResult] = React.useState<OutputType>(emptyTransformResponse);\n\n React.useEffect(() => {\n async function transform() {\n try {\n const data = await transformMarkdown({text, allowHTML});\n\n setResult(data);\n } catch (e) {}\n }\n transform();\n }, [text, allowHTML]);\n\n return res;\n}\n\nfunction MD({text}: Props) {\n const {html} = useMarkdown({text, allowHTML: true}).result ?? {};\n\n return (\n <React.Fragment>\n <div className={block(null, 'yfm')} dangerouslySetInnerHTML={{__html: html ?? ''}} />\n </React.Fragment>\n );\n}\n\nexport const Markdown = memo(function Markdown({text}: Props) {\n const customMarkdown = UIFactory.renderMarkdown({text});\n return customMarkdown ?? <MD text={text} />;\n});\n","const SvgPlus = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M8 1.75a.75.75 0 0 1 .75.75v4.75h4.75a.75.75 0 0 1 0 1.5H8.75v4.75a.75.75 0 0 1-1.5 0V8.75H2.5a.75.75 0 0 1 0-1.5h4.75V2.5A.75.75 0 0 1 8 1.75\" clipRule=\"evenodd\" /></svg>;\nexport default SvgPlus;","const SvgChevronUp = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M13.03 10.53a.75.75 0 0 1-1.06 0L8 6.56l-3.97 3.97a.75.75 0 1 1-1.06-1.06l4.5-4.5a.75.75 0 0 1 1.06 0l4.5 4.5a.75.75 0 0 1 0 1.06\" clipRule=\"evenodd\" /></svg>;\nexport default SvgChevronUp;","import React, {FC, useEffect, useRef} from 'react';\nimport {Flex, Loader} from '@gravity-ui/uikit';\n\ntype Props = {\n className?: string;\n loading?: boolean;\n onLoadMore: () => void;\n};\n\nexport const InfiniteScrollLoader: FC<Props> = ({className, loading, onLoadMore}) => {\n const paginationRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n onLoadMore();\n }\n });\n },\n {\n root: null,\n threshold: 0.1,\n },\n );\n\n if (paginationRef.current) {\n observer.observe(paginationRef.current);\n }\n\n return () => {\n if (paginationRef.current) {\n observer.unobserve(paginationRef.current);\n }\n };\n }, []);\n\n return (\n <Flex className={className} ref={paginationRef} alignItems=\"center\" justifyContent=\"center\">\n {loading ? <Loader /> : ''}\n </Flex>\n );\n};\n","import {addI18Keysets} from '../../../../../i18n';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:ai.chat.file-popup', {en, ru});\n","import i18n from './i18n';\n\ntype ValidationResult = {\n isValid: boolean;\n error?: string;\n};\n\nconst MAX_FILE_SIZE = 0.5 * 1024 * 1024; // 0.5MB\n\nexport const textFileValidator = async (file: File): Promise<ValidationResult> => {\n if (file.size > MAX_FILE_SIZE) {\n return {isValid: false, error: i18n('alert_file-too-large')};\n }\n\n try {\n const arrayBuffer = await file.arrayBuffer();\n const content = new Uint8Array(arrayBuffer);\n\n // Check for binary files\n const bytesToCheck = Math.min(content.length, 8192);\n for (let i = 0; i < bytesToCheck; i++) {\n if (content[i] === 0) {\n return {isValid: false, error: i18n('alert_binary-data')};\n }\n }\n\n // Try to decode as UTF-8\n const decoder = new TextDecoder('utf-8', {fatal: true});\n decoder.decode(arrayBuffer);\n\n return {isValid: true};\n } catch (error) {\n return {isValid: false, error: i18n('alert_invalid-text-file')};\n }\n};\n","import React, {FC} from 'react';\nimport {Button, Flex, Icon, Text, Toaster, Tooltip} from '@gravity-ui/uikit';\nimport cn from 'bem-cn-lite';\nimport {useDispatch, useSelector} from '../../../../store/redux-hooks';\nimport {FileDropZone} from '../../../../components/FileDropZone/FileDropZone';\nimport {attachFiles} from '../../../../store/actions/ai/chat';\nimport {selectAttachedFiles} from '../../../../store/selectors/ai/chat';\nimport TrashBinIcon from '@gravity-ui/icons/svgs/trash-bin.svg';\nimport i18n from './i18n';\nimport {textFileValidator} from './textFileValidator';\nimport {removeAttachedFile} from '../../../../store/reducers/ai/chatSlice';\nimport CircleQuestionIcon from '@gravity-ui/icons/svgs/circle-question.svg';\nimport './ChatFilePopup.scss';\n\nconst block = cn('yt-chat-file-popup');\n\nconst toaster = new Toaster();\n\nexport const ChatFilePopup: FC = () => {\n const dispatch = useDispatch();\n const files = useSelector(selectAttachedFiles);\n\n const handleFileAdd = async (fileList: FileList | null) => {\n if (!fileList) return;\n\n const validFiles: File[] = [];\n\n for (const file of Array.from(fileList)) {\n const {isValid, error} = await textFileValidator(file);\n\n if (!isValid) {\n toaster.add({\n name: 'file-validation-error',\n title: error,\n theme: 'danger',\n });\n continue;\n }\n\n validFiles.push(file);\n }\n\n if (validFiles.length > 0) {\n dispatch(attachFiles(validFiles));\n }\n };\n\n const handleFileRemove = (index: number) => {\n dispatch(removeAttachedFile(index));\n };\n\n return (\n <Flex direction=\"column\" className={block()} gap={3}>\n <Text variant=\"subheader-3\">\n <Flex alignItems=\"center\" gap={1}>\n {i18n('title_attach-files')}\n <Tooltip content={i18n('context_text-files-only')}>\n <Text color=\"secondary\">\n <Icon data={CircleQuestionIcon} size={16} />\n </Text>\n </Tooltip>\n </Flex>\n </Text>\n <FileDropZone isEmpty={files.length === 0} isDropable={true} onFile={handleFileAdd} />\n {files.length > 0 && (\n <Flex direction=\"column\" gap={1} className={block('files-list')}>\n {files.map((file, index) => (\n <Flex\n key={index}\n alignItems=\"center\"\n justifyContent=\"space-between\"\n className={block('file-item')}\n >\n <Text variant=\"body-1\" ellipsis>\n {file.name}\n </Text>\n <Button view=\"flat\" onClick={() => handleFileRemove(index)}>\n <Icon data={TrashBinIcon} size={16} />\n </Button>\n </Flex>\n ))}\n </Flex>\n )}\n </Flex>\n );\n};\n","import React, {FC, useRef} from 'react';\nimport {Button, Icon} from '@gravity-ui/uikit';\nimport PaperclipIcon from '@gravity-ui/icons/svgs/paperclip.svg';\nimport {useToggle} from 'react-use';\nimport {useSelector} from '../../../store/redux-hooks';\nimport {PopupWithCloseButton} from '../../../pages/query-tracker/QuerySettingsButton/PopupWithCloseButton';\nimport {ChatFilePopup} from './ChatFilePopup';\nimport {selectAttachedFiles} from '../../../store/selectors/ai/chat';\nimport cn from 'bem-cn-lite';\nimport './ChatFileButton.scss';\n\nconst block = cn('yt-chat-file-button');\n\nexport const ChatFileButton: FC = () => {\n const btnRef = useRef<HTMLButtonElement>(null);\n const [open, toggleOpen] = useToggle(false);\n const {length} = useSelector(selectAttachedFiles);\n\n return (\n <>\n <Button ref={btnRef} onClick={toggleOpen}>\n <Icon data={PaperclipIcon} size={16} />\n {length ? ` ${length}` : undefined}\n </Button>\n <PopupWithCloseButton\n className={block('popup')}\n anchorRef={btnRef}\n open={open}\n onClose={toggleOpen}\n placement=\"top\"\n >\n <ChatFilePopup />\n </PopupWithCloseButton>\n </>\n );\n};\n","import React, {FC} from 'react';\nimport {Button, Flex, Icon, TextArea} from '@gravity-ui/uikit';\nimport ArrowUpIcon from '@gravity-ui/icons/svgs/arrow-up.svg';\nimport './ChatInput.scss';\nimport cn from 'bem-cn-lite';\nimport {useDispatch, useSelector} from '../../store/redux-hooks';\nimport {setQuestion} from '../../store/reducers/ai/chatSlice';\nimport {selectChatQuestion, selectChatSending} from '../../store/selectors/ai/chat';\nimport {sendQuestion} from '../../store/actions/ai/chat';\nimport ChevronDownIcon from '@gravity-ui/icons/svgs/chevron-down.svg';\nimport {ChatFileButton} from './ChatFile';\n\nconst block = cn('yt-ai-chat-input');\n\ntype Props = {\n showScrollButton: boolean;\n onScrollClick: () => void;\n};\n\nexport const ChatInput: FC<Props> = ({showScrollButton, onScrollClick}) => {\n const dispatch = useDispatch();\n const isSending = useSelector(selectChatSending);\n const question = useSelector(selectChatQuestion);\n\n const handleQuestionChange = (value: string) => {\n dispatch(setQuestion(value));\n };\n\n const handleQuestionSubmit = () => {\n dispatch(sendQuestion());\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleQuestionSubmit();\n }\n };\n\n return (\n <div className={block()}>\n {showScrollButton && (\n <Button view=\"outlined\" className={block('scroll-button')} onClick={onScrollClick}>\n <Icon data={ChevronDownIcon} size={16} />\n </Button>\n )}\n\n <Flex className={block('form')} justifyContent=\"space-between\" alignItems=\"flex-end\">\n <TextArea\n view=\"clear\"\n value={question || ''}\n onUpdate={handleQuestionChange}\n onKeyDown={handleKeyDown}\n />\n <Flex gap={1}>\n <ChatFileButton />\n <Button\n view=\"action\"\n onClick={handleQuestionSubmit}\n disabled={!question}\n loading={isSending}\n >\n <Icon data={ArrowUpIcon} size={16} />\n </Button>\n </Flex>\n </Flex>\n </div>\n );\n};\n","const SvgListUl = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M2.5 5a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5m3.25-2a.75.75 0 0 0 0 1.5h8.5a.75.75 0 0 0 0-1.5zm0 8.5a.75.75 0 0 0 0 1.5h8.5a.75.75 0 0 0 0-1.5zM5 8a.75.75 0 0 1 .75-.75h8.5a.75.75 0 0 1 0 1.5h-8.5A.75.75 0 0 1 5 8M3.75 8a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0M2.5 13.5a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5\" clipRule=\"evenodd\" /></svg>;\nexport default SvgListUl;","import {addI18Keysets} from '../../../../i18n';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:ai.chat.header', {en, ru});\n","import React, {FC} from 'react';\nimport {Button, Flex, Icon, Tooltip} from '@gravity-ui/uikit';\nimport PlusIcon from '@gravity-ui/icons/svgs/plus.svg';\nimport ListUlIcon from '@gravity-ui/icons/svgs/list-ul.svg';\nimport XmarkIcon from '@gravity-ui/icons/svgs/xmark.svg';\nimport {toggleChatHistory, toggleChatSidePanel} from '../../../store/actions/ai/chat';\nimport {useDispatch} from '../../../store/redux-hooks';\nimport {resetChat} from '../../../store/reducers/ai/chatSlice';\nimport i18n from './i18n';\n\ntype Props = {\n className?: string;\n};\n\nexport const ChatHeader: FC<Props> = ({className}) => {\n const dispatch = useDispatch();\n\n const handleNewChat = () => {\n dispatch(resetChat());\n };\n\n const handleToggleHistory = () => {\n dispatch(toggleChatHistory());\n };\n\n const closeChat = () => {\n dispatch(toggleChatSidePanel());\n };\n\n return (\n <Flex justifyContent=\"flex-end\" alignItems=\"center\" gap={1} className={className}>\n <Tooltip content={i18n('action_new-chat')}>\n <Button view=\"flat\" onClick={handleNewChat}>\n <Icon data={PlusIcon} size={16} />\n </Button>\n </Tooltip>\n <Tooltip content={i18n('action_history')}>\n <Button view=\"flat\" onClick={handleToggleHistory}>\n <Icon data={ListUlIcon} size={16} />\n </Button>\n </Tooltip>\n <Tooltip content={i18n('action_close-chat')}>\n <Button view=\"flat\" onClick={closeChat}>\n <Icon data={XmarkIcon} size={16} />\n </Button>\n </Tooltip>\n </Flex>\n );\n};\n","import {addI18Keysets} from '../../../../i18n';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:ai.chat.empty-chat', {en, ru});\n","import React, {FC} from 'react';\nimport {Flex, Text} from '@gravity-ui/uikit';\nimport i18n from './i18n';\n\nexport const EmptyChat: FC = () => {\n return (\n <Flex alignItems=\"center\" justifyContent=\"center\" direction=\"column\" grow={1}>\n <Text variant=\"header-1\">{i18n('title_greeting')}</Text>\n <Text>{i18n('context_help-offer')}</Text>\n </Flex>\n );\n};\n","import React, {FC} from 'react';\nimport {Markdown} from '../../../components/Markdown/Markdown';\nimport {ClipboardButton, Flex} from '@gravity-ui/uikit';\nimport {ChatAnswer} from '../../../types/ai-chat';\nimport './AnswerBody.scss';\nimport cn from 'bem-cn-lite';\n\nconst block = cn('yt-ai-chat-answer-body');\n\ntype Props = {\n message: ChatAnswer;\n className?: string;\n};\n\nexport const AnswerBody: FC<Props> = ({message, className}) => {\n const inProgress = message.state === 'progress';\n\n const handleSendCopy = () => {\n const content = window.getSelection()?.toString();\n if (!content) return;\n };\n\n return (\n <Flex direction=\"column\" gap={2} className={block(null, className)} onCopy={handleSendCopy}>\n <Markdown text={message.value || '...'} />\n\n <Flex gap={1} className={block('footer')}>\n {!inProgress && (\n <>\n <ClipboardButton size=\"s\" text={message.value} />\n </>\n )}\n </Flex>\n </Flex>\n );\n};\n","import {addI18Keysets} from '../../../../../i18n';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:ai.chat.mcp-search-answer', {en, ru});\n","import React, {FC, PropsWithChildren} from 'react';\nimport {ArrowToggle, ClipboardButton, Flex, Text} from '@gravity-ui/uikit';\nimport {useToggle} from 'react-use';\nimport cn from 'bem-cn-lite';\nimport './McpMessage.scss';\n\nconst block = cn('mcp-message');\n\ntype Props = {\n title: string;\n clipboardValue: string;\n className?: string;\n};\n\nexport const McpMessage: FC<PropsWithChildren<Props>> = ({\n title,\n children,\n clipboardValue,\n className,\n}) => {\n const [isOpen, toggleOpen] = useToggle(false);\n\n const handleClipboardClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n };\n\n return (\n <Flex className={block(null, className)} direction=\"column\" gap={2}>\n <Flex alignItems=\"center\" gap={2} onClick={toggleOpen} className={block('header')}>\n <Text color=\"secondary\">{title}</Text>\n <ArrowToggle direction={isOpen ? 'top' : 'bottom'} />\n <div onClick={handleClipboardClick}>\n <ClipboardButton size=\"s\" text={clipboardValue} />\n </div>\n </Flex>\n {isOpen && children}\n </Flex>\n );\n};\n","import React, {FC} from 'react';\nimport {Flex, Icon, Link, Text} from '@gravity-ui/uikit';\nimport ArrowUpRightFromSquareIcon from '@gravity-ui/icons/svgs/arrow-up-right-from-square.svg';\nimport {SearchMcpAnswer} from '../../../../types/ai-chat';\nimport i18n from './i18n';\nimport {McpMessage} from '../McpMessage';\n\ntype Props = {\n value: SearchMcpAnswer['value'];\n className?: string;\n};\n\nexport const McpSearchAnswer: FC<Props> = ({value, className}) => {\n return (\n <McpMessage\n className={className}\n title={i18n('title_search-results')}\n clipboardValue={JSON.stringify(value)}\n >\n <Flex direction=\"column\" gap={1}>\n {value.map(({url, title}) => (\n <Link key={url} href={url} target=\"_blank\">\n <Icon data={ArrowUpRightFromSquareIcon} /> {title}\n </Link>\n ))}\n {value.length === 0 && <Text variant=\"code-1\">[]</Text>}\n </Flex>\n </McpMessage>\n );\n};\n","import {addI18Keysets} from '../../../../../i18n';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:ai.chat.mcp-schema-answer', {en, ru});\n","import React, {FC} from 'react';\nimport {Text} from '@gravity-ui/uikit';\nimport {TableSchemaMcpAnswer} from '../../../../types/ai-chat';\nimport i18n from './i18n';\nimport {McpMessage} from '../McpMessage';\n\ntype Props = {\n value: TableSchemaMcpAnswer['value'];\n className?: string;\n};\n\nexport const McpSchemaAnswer: FC<Props> = ({value, className}) => {\n return (\n <McpMessage\n className={className}\n title={i18n('title_table-schema')}\n clipboardValue={JSON.stringify(value)}\n >\n <Text variant=\"code-1\">{value}</Text>\n </McpMessage>\n );\n};\n","import {addI18Keysets} from '../../../../../i18n';\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:ai.chat.mcp-unknown-answer', {en, ru});\n","import React, {FC} from 'react';\nimport {Text} from '@gravity-ui/uikit';\nimport {UnknownMcpAnswer} from '../../../../types/ai-chat';\nimport {McpMessage} from '../McpMessage';\nimport i18n from './i18n';\n\ntype Props = {\n name: UnknownMcpAnswer['name'];\n value: UnknownMcpAnswer['value'];\n className?: string;\n};\n\nexport const McpUnknownAnswer: FC<Props> = ({name, value, className}) => {\n const jsonString = JSON.stringify(value, null, 2);\n\n return (\n <McpMessage\n className={className}\n title={`${i18n('title_unknown-mcp-call')}: ${name}`}\n clipboardValue={jsonString}\n >\n <Text variant=\"code-1\">{jsonString}</Text>\n </McpMessage>\n );\n};\n","import React from 'react';\nimport {YTErrorBlock} from '../../../components/Error/Error';\nimport {AnswerBody} from './AnswerBody';\nimport {McpSearchAnswer} from './McpSearchAnswer';\nimport {McpSchemaAnswer} from './McpSchemaAnswer';\nimport {McpUnknownAnswer} from './McpUnknownAnswer';\nimport {ChatMessage} from '../../../types/ai-chat';\n\nexport const getMessageComponentByType = (message: ChatMessage, className?: string) => {\n switch (message.type) {\n case 'error': {\n return <YTErrorBlock className={className} error={message.error} />;\n }\n case 'answer': {\n return <AnswerBody className={className} message={message} />;\n }\n case 'mcp_search_answer': {\n return <McpSearchAnswer className={className} value={message.value} />;\n }\n case 'mcp_table_schema_answer': {\n return <McpSchemaAnswer className={className} value={message.value} />;\n }\n case 'mcp_unknown_answer': {\n return (\n <McpUnknownAnswer className={className} name={message.name} value={message.value} />\n );\n }\n default: {\n return <div className={className}>{message.value}</div>;\n }\n }\n};\n","import React, {FC} from 'react';\nimport {Flex} from '@gravity-ui/uikit';\nimport cn from 'bem-cn-lite';\nimport {ChatMessage} from '../../../types/ai-chat';\nimport uiFactory from '../../../UIFactory';\nimport {getMessageComponentByType} from './getMessageComponentByType';\nimport './Message.scss';\n\nconst block = cn('yt-ai-chat-message');\n\ntype Props = {\n message: ChatMessage;\n className?: string;\n};\n\nexport const Message: FC<Props> = ({message, className}) => {\n const isQuestion = message.type === 'question';\n const component = uiFactory.getAiChatMessageComponent(message, block('body'));\n\n return (\n <Flex\n justifyContent={isQuestion ? 'flex-end' : 'flex-start'}\n className={block({question: isQuestion}, className)}\n gap={1}\n >\n {component || getMessageComponentByType(message, block('body'))}\n </Flex>\n );\n};\n","import {addI18Keysets} from '../../../../i18n';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:ai.chat.messages', {en, ru});\n","import React, {FC} from 'react';\nimport {Message} from '../Message';\nimport {useDispatch, useSelector} from '../../../store/redux-hooks';\nimport {selectConversation} from '../../../store/selectors/ai/chat';\nimport {loadMoreConversationItems} from '../../../store/actions/ai/chat';\nimport {Button, Flex, Icon, Loader} from '@gravity-ui/uikit';\nimport ChevronUpIcon from '@gravity-ui/icons/svgs/chevron-up.svg';\nimport i18n from './i18n';\n\nexport const Messages: FC = () => {\n const dispatch = useDispatch();\n const {items, hasMore, loading} = useSelector(selectConversation);\n\n const handleLoadMore = () => {\n dispatch(loadMoreConversationItems());\n };\n\n return (\n <>\n {hasMore && (\n <Flex justifyContent=\"center\" alignItems=\"center\" direction=\"column\">\n {loading ? (\n <Loader size=\"s\" />\n ) : (\n <Button view=\"outlined\" onClick={handleLoadMore} disabled={loading}>\n <Icon data={ChevronUpIcon} size={16} />\n {i18n('action_load-older')}\n </Button>\n )}\n </Flex>\n )}\n {items.map((message) => {\n const key = 'id' in message ? message.id : message.error.message;\n return <Message key={key} message={message} />;\n })}\n </>\n );\n};\n\nMessages.displayName = 'Messages';\n","import React, {FC} from 'react';\nimport {useSelector} from '../../store/redux-hooks';\nimport {selectChatSending, selectCurrentAnswer} from '../../store/selectors/ai/chat';\nimport {Message} from './Message';\nimport block from 'bem-cn-lite';\nimport './CurrentAnswer.scss';\n\nconst b = block('current-answer');\n\ntype Props = {\n className?: string;\n};\n\nconst LoadingDots: FC<{className?: string}> = ({className}) => {\n return (\n <div className={b('loading-dots', className)}>\n <span className={b('dot')} />\n <span className={b('dot')} />\n <span className={b('dot')} />\n </div>\n );\n};\n\nexport const CurrentAnswer: FC<Props> = ({className}) => {\n const answer = useSelector(selectCurrentAnswer);\n const isSending = useSelector(selectChatSending);\n\n if (isSending && !answer) return <LoadingDots className={className} />;\n\n if (!answer) return null;\n\n return (\n <Message\n className={className}\n message={{\n id: 'current-answer',\n type: 'answer',\n state: 'progress',\n value: answer,\n }}\n />\n );\n};\n","import {addI18Keysets} from '../../../../i18n';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:ai.chat.history', {en, ru});\n","import React, {FC} from 'react';\nimport {Button, Flex, Icon, Text} from '@gravity-ui/uikit';\nimport TrashBinIcon from '@gravity-ui/icons/svgs/trash-bin.svg';\nimport block from 'bem-cn-lite';\nimport './ChatHistoryItem.scss';\n\nconst b = block('yt-chart-history-item');\n\ntype Props = {\n id: string;\n topic?: string;\n onClick: (id: string) => void;\n onDelete: (id: string) => void;\n};\n\nexport const ChatHistoryItem: FC<Props> = ({id, topic, onClick, onDelete}) => {\n return (\n <Flex\n className={b()}\n grow={1}\n alignItems=\"center\"\n justifyContent=\"space-between\"\n onClick={() => onClick(id)}\n >\n <Text ellipsis>{topic || id}</Text>\n <Button\n className={b('remove-button')}\n onClick={(e) => {\n e.stopPropagation();\n onDelete(id);\n }}\n view=\"flat\"\n >\n <Icon data={TrashBinIcon} size={16} />\n </Button>\n </Flex>\n );\n};\n","import React, {FC, useCallback} from 'react';\nimport {useDispatch, useSelector} from '../../../store/redux-hooks';\nimport block from 'bem-cn-lite';\nimport {\n deleteConversation,\n loadConversation,\n loadMoreConversations,\n} from '../../../store/actions/ai/chat';\nimport {Flex, List, Text} from '@gravity-ui/uikit';\nimport {\n selectConversationsGroupedByDate,\n selectConversationsHasMore,\n selectConversationsLoading,\n} from '../../../store/selectors/ai/chat';\nimport {NoContent} from '../../../components/NoContent/NoContent';\nimport {InfiniteScrollLoader} from '../../../components/InfiniteScrollLoader';\nimport i18n from './i18n';\nimport './ChatHistory.scss';\nimport {Conversation} from '../../../../shared/ai-chat';\nimport hammer from '../../../common/hammer';\nimport {ChatHistoryItem} from './ChatHistoryItem';\n\nconst b = block('yt-chart-history');\n\nexport const ChatHistory: FC = () => {\n const dispatch = useDispatch();\n const groupedConversations = useSelector(selectConversationsGroupedByDate);\n const hasMore = useSelector(selectConversationsHasMore);\n const loading = useSelector(selectConversationsLoading);\n\n const handleConversationClick = (conversationId: string) => {\n dispatch(loadConversation(conversationId));\n };\n\n const handleConversationDelete = (conversationId: string) => {\n dispatch(deleteConversation(conversationId));\n };\n\n const handleLoadMore = useCallback(() => {\n dispatch(loadMoreConversations());\n }, [dispatch]);\n\n if (!groupedConversations.length) {\n return (\n <Flex justifyContent=\"center\" alignItems=\"center\" grow={1}>\n <NoContent warning={i18n('context_no-conversations')} vertical />\n </Flex>\n );\n }\n\n return (\n <div className={b()}>\n {groupedConversations.map((group) => (\n <div key={group.date} className={b('group')}>\n <div className={b('group-header')}>\n <Text color=\"secondary\">\n {hammer.format['DateTime'](group.date, {format: 'day'})}\n </Text>\n </div>\n <List<Conversation>\n className={b('list')}\n filterable={false}\n items={group.items}\n renderItem={(item, _) => {\n return (\n <ChatHistoryItem\n id={item.id}\n topic={item.metadata?.topic}\n onClick={handleConversationClick}\n onDelete={handleConversationDelete}\n />\n );\n }}\n itemHeight={40}\n virtualized={false}\n />\n </div>\n ))}\n {hasMore && (\n <InfiniteScrollLoader\n className={b('pagination')}\n loading={loading}\n onLoadMore={handleLoadMore}\n />\n )}\n </div>\n );\n};\n","import React, {FC, useCallback, useRef} from 'react';\nimport {\n selectChatError,\n selectChatHistoryIsVisible,\n selectChatIsVisible,\n selectChatLoading,\n selectChatSending,\n} from '../../store/selectors/ai/chat';\nimport {useSelector} from '../../store/redux-hooks';\nimport {EmptyChat} from './EmptyChat';\nimport {Messages} from './Messages';\nimport {CurrentAnswer} from './CurrentAnswer';\nimport {ChatHistory} from './ChatHistory';\nimport useResizeObserver from '../../hooks/useResizeObserver';\nimport './ChatBody.scss';\nimport cn from 'bem-cn-lite';\nimport {Flex, Loader} from '@gravity-ui/uikit';\nimport {YTErrorBlock} from '../../components/Block/Block';\n\nconst block = cn('yt-ai-chat-body');\n\ntype Props = {\n isUserScrolledUp: boolean;\n scrollToBottom: () => void;\n checkScrollPosition: () => void;\n};\n\nexport const ChatBody: FC<Props> = ({isUserScrolledUp, scrollToBottom, checkScrollPosition}) => {\n const messagesRef = useRef<HTMLDivElement>(null);\n const isLoading = useSelector(selectChatLoading);\n const isSending = useSelector(selectChatSending);\n const chatIsVisible = useSelector(selectChatIsVisible);\n const historyIsVisible = useSelector(selectChatHistoryIsVisible);\n const error = useSelector(selectChatError);\n\n const handleContainerResize = useCallback(() => {\n checkScrollPosition();\n if (isSending && !isUserScrolledUp) {\n scrollToBottom();\n }\n }, [checkScrollPosition, isUserScrolledUp, isSending, scrollToBottom]);\n\n useResizeObserver({\n element: chatIsVisible ? (messagesRef.current ?? undefined) : undefined,\n onResize: handleContainerResize,\n });\n\n if (error) {\n return (\n <Flex alignItems=\"center\" justifyContent=\"center\" grow={1}>\n <YTErrorBlock error={error} />\n </Flex>\n );\n }\n\n if (isLoading) {\n return (\n <Flex alignItems=\"center\" justifyContent=\"center\" grow={1}>\n <Loader />\n </Flex>\n );\n }\n\n if (chatIsVisible) {\n return (\n <div ref={messagesRef} className={block('messages')}>\n <Messages />\n <CurrentAnswer className={block('current-answer')} />\n </div>\n );\n }\n\n if (historyIsVisible) {\n return <ChatHistory />;\n }\n\n return <EmptyChat />;\n};\n","import React, {FC, useCallback, useEffect, useRef, useState} from 'react';\nimport './Chat.scss';\nimport cn from 'bem-cn-lite';\nimport {ChatInput} from './ChatInput';\nimport {ChatHeader} from './ChatHeader';\nimport {ChatBody} from './ChatBody';\n\nconst INPUT_DEFAULT_HEIGHT = 50;\nconst SCROLL_THRESHOLD = INPUT_DEFAULT_HEIGHT;\n\nconst block = cn('yt-ai-chat');\n\nconst Chat: FC = () => {\n const [isScrolledToBottom, setIsScrolledToBottom] = useState(true);\n const [isUserScrolledUp, setIsUserScrolledUp] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const checkScrollPosition = useCallback(() => {\n if (!containerRef.current) return;\n\n const {scrollTop, scrollHeight, clientHeight} = containerRef.current;\n const isAtBottom = scrollHeight - (scrollTop + clientHeight) < SCROLL_THRESHOLD;\n\n setIsScrolledToBottom(isAtBottom);\n setIsUserScrolledUp(!isAtBottom);\n }, []);\n\n const scrollToBottom = useCallback((behavior: ScrollBehavior = 'auto') => {\n if (!containerRef.current) return;\n\n containerRef.current.scrollTo({\n top: containerRef.current.scrollHeight,\n behavior,\n });\n }, []);\n\n const handleUserScroll = useCallback(() => {\n checkScrollPosition();\n }, [checkScrollPosition]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n container.addEventListener('scroll', handleUserScroll);\n return () => {\n container.removeEventListener('scroll', handleUserScroll);\n };\n }, [handleUserScroll]);\n\n return (\n <div ref={containerRef} className={block()}>\n <ChatHeader className={block('header')} />\n <ChatBody\n scrollToBottom={scrollToBottom}\n checkScrollPosition={checkScrollPosition}\n isUserScrolledUp={isUserScrolledUp}\n />\n <ChatInput\n showScrollButton={!isScrolledToBottom}\n onScrollClick={() => scrollToBottom('smooth')}\n />\n </div>\n );\n};\n\nexport default Chat;\n","const SvgArrowUpRightFromSquare = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M10 1.5A.75.75 0 0 0 10 3h1.94L6.97 7.97a.75.75 0 0 0 1.06 1.06L13 4.06V6a.75.75 0 0 0 1.5 0V2.25a.75.75 0 0 0-.75-.75zM7.5 3.25a.75.75 0 0 0-.75-.75H4.5a3 3 0 0 0-3 3v6a3 3 0 0 0 3 3h6a3 3 0 0 0 3-3V9.25a.75.75 0 0 0-1.5 0v2.25a1.5 1.5 0 0 1-1.5 1.5h-6A1.5 1.5 0 0 1 3 11.5v-6A1.5 1.5 0 0 1 4.5 4h2.25a.75.75 0 0 0 .75-.75\" clipRule=\"evenodd\" /></svg>;\nexport default SvgArrowUpRightFromSquare;","import type {TabsOrientation} from './plugin/transform';\nimport type {TabsController} from './runtime/TabsController';\n\nexport const TABS_CLASSNAME = 'yfm-tabs';\nexport const TABS_VERTICAL_CLASSNAME = 'yfm-tabs-vertical';\nexport const TABS_LIST_CLASSNAME = 'yfm-tab-list';\nexport const TAB_CLASSNAME = 'yfm-tab';\nexport const TAB_PANEL_CLASSNAME = 'yfm-tab-panel';\nexport const ACTIVE_CLASSNAME = 'active';\nexport const VERTICAL_TAB_CLASSNAME = 'yfm-vertical-tab';\n\nexport const GROUP_DATA_KEY = 'data-diplodoc-group';\nexport const TAB_DATA_KEY = 'data-diplodoc-key';\nexport const TAB_DATA_ID = 'data-diplodoc-id';\nexport const TAB_DATA_VERTICAL_TAB = 'data-diplodoc-vertical-tab';\nexport const TAB_ACTIVE_KEY = 'data-diplodoc-is-active';\nexport const TAB_RADIO_KEY = 'data-diplodoc-input';\n\nexport const DEFAULT_TABS_GROUP_PREFIX = 'defaultTabsGroup-';\n\nexport interface Tab {\n group?: string;\n key: string;\n align: TabsOrientation;\n}\n\nexport interface SelectedTabEvent {\n tab: Tab;\n currentTabId?: string;\n}\n\nexport const GLOBAL_SYMBOL: unique symbol = Symbol.for('diplodocTabs');\n\ndeclare global {\n interface Window {\n [GLOBAL_SYMBOL]: TabsController;\n }\n}\n","export const getEventTarget = (event: Event) => {\n const path = event.composedPath();\n return Array.isArray(path) && path.length > 0 ? path[0] : event.target;\n};\n\nexport const isCustom = (event: Event) => {\n const target = getEventTarget(event);\n return !target || !(target as HTMLElement).matches;\n};\n\nexport const getClosestScrollableParent = (element: HTMLElement): HTMLElement | undefined => {\n if (Math.abs(element.scrollHeight - element.clientHeight) > 1) {\n return element;\n }\n\n return element.parentElement ? getClosestScrollableParent(element.parentElement) : undefined;\n};\n\nexport interface ElementOffset {\n top: number;\n left: number;\n scrollTop: number;\n scrollLeft: number;\n}\n\nexport const getOffsetByScrollableParent = (\n element: HTMLElement,\n scrollableParent: HTMLElement,\n): ElementOffset => {\n const elementBounds = element.getBoundingClientRect();\n const scrollableParentBounds = scrollableParent.getBoundingClientRect();\n return {\n top: elementBounds.top - scrollableParentBounds.top,\n left: elementBounds.left - scrollableParentBounds.left,\n scrollTop: scrollableParent.scrollTop,\n scrollLeft: scrollableParent.scrollLeft,\n };\n};\n","import {\n ACTIVE_CLASSNAME,\n DEFAULT_TABS_GROUP_PREFIX,\n GROUP_DATA_KEY,\n SelectedTabEvent,\n TABS_CLASSNAME,\n TABS_LIST_CLASSNAME,\n TABS_VERTICAL_CLASSNAME,\n TAB_CLASSNAME,\n TAB_DATA_ID,\n TAB_DATA_KEY,\n TAB_PANEL_CLASSNAME,\n Tab,\n} from '../common';\nimport type {TabsOrientation} from '../plugin/transform';\nimport {\n ElementOffset,\n getClosestScrollableParent,\n getEventTarget,\n getOffsetByScrollableParent,\n isCustom,\n} from './utils';\n\nconst Selector = {\n TABS: `.${TABS_CLASSNAME}`,\n TAB_LIST: `.${TABS_LIST_CLASSNAME}`,\n TAB: `.${TAB_CLASSNAME}`,\n TAB_PANEL: `.${TAB_PANEL_CLASSNAME}`,\n VERTICAL_TABS: `.${TABS_VERTICAL_CLASSNAME}`,\n};\n\nexport interface ISelectTabByIdOptions {\n scrollToElement: boolean;\n}\n\ntype Handler = (data: SelectedTabEvent) => void;\n\ntype TabSwitchDirection = 'left' | 'right';\n\nexport class TabsController {\n private _document: Document;\n\n private _onSelectTabHandlers: Set<Handler> = new Set();\n\n constructor(document: Document) {\n this._document = document;\n this._document.addEventListener('click', (event) => {\n const target = getEventTarget(event) as HTMLElement;\n const areVertical = this.areTabsVertical(target);\n\n if (isCustom(event)) {\n return;\n }\n\n if (!(this.isValidTabElement(target) || areVertical)) {\n return;\n }\n\n const tab = this.getTabDataFromHTMLElement(target);\n\n if (tab) {\n this._selectTab(tab, target);\n }\n });\n this._document.addEventListener('keydown', (event) => {\n let direction: TabSwitchDirection | null = null;\n switch (event.key) {\n case 'ArrowLeft': {\n direction = 'left';\n break;\n }\n case 'ArrowRight': {\n direction = 'right';\n break;\n }\n }\n if (!direction) {\n return;\n }\n\n const target = getEventTarget(event) as HTMLElement;\n\n if (isCustom(event) || !this.isValidTabElement(target)) {\n return;\n }\n\n const {tabs, nodes} = this.getTabs(target);\n const currentTab = this.getTabDataFromHTMLElement(target);\n const currentTabIndex = tabs.findIndex(\n ({key}) => currentTab?.key && key === currentTab.key,\n );\n if (!currentTab || tabs.length <= 1 || currentTabIndex === -1) {\n return;\n }\n\n const newIndex =\n (currentTabIndex + (direction === 'left' ? -1 : 1) + tabs.length) % tabs.length;\n\n this.selectTab(tabs[newIndex]);\n nodes[newIndex].focus();\n });\n }\n\n onSelectTab(handler: Handler) {\n this._onSelectTabHandlers.add(handler);\n\n return () => {\n this._onSelectTabHandlers.delete(handler);\n };\n }\n\n selectTabById(id: string, options?: ISelectTabByIdOptions) {\n const target = this._document.querySelector(\n `${Selector.TAB}[${TAB_DATA_ID}=\"${id}\"]`,\n ) as HTMLElement;\n\n if (!target || !this.isValidTabElement(target)) {\n return;\n }\n\n const tab = this.getTabDataFromHTMLElement(target);\n\n if (tab) {\n this._selectTab(tab, target);\n }\n\n if (options?.scrollToElement) {\n target.scrollIntoView();\n }\n }\n\n selectTab(tab: Tab) {\n this._selectTab(tab);\n }\n\n private _selectTab(tab: Tab, targetTab?: HTMLElement) {\n const {group, key, align} = tab;\n\n if (!group) {\n return;\n }\n\n const scrollableParent = targetTab && getClosestScrollableParent(targetTab);\n const previousTargetOffset =\n scrollableParent && getOffsetByScrollableParent(targetTab, scrollableParent);\n\n const updatedTabs = this.updateHTML({group, key, align}, align);\n\n if (updatedTabs > 0) {\n this.fireSelectTabEvent({group, key, align}, targetTab?.dataset.diplodocId);\n\n if (previousTargetOffset) {\n this.resetScroll(targetTab, scrollableParent, previousTargetOffset);\n }\n }\n }\n\n private updateHTML(tab: Required<Tab>, align: TabsOrientation) {\n switch (align) {\n case 'vertical': {\n return this.updateHTMLVertical(tab);\n }\n case 'horizontal': {\n return this.updateHTMLHorizontal(tab);\n }\n }\n\n return 0;\n }\n\n private updateHTMLVertical(tab: Required<Tab>) {\n const {group, key} = tab;\n\n const [tabs] = this._document.querySelectorAll(\n `${Selector.TABS}[${GROUP_DATA_KEY}=\"${group}\"] ${Selector.TAB}[${TAB_DATA_KEY}=\"${key}\"]`,\n );\n\n let updated = 0;\n const root = tabs.parentNode!;\n const elements = root.children;\n\n for (let i = 0; i < elements.length; i += 2) {\n const [title, content] = [elements.item(i), elements.item(i + 1)] as HTMLElement[];\n\n const input = title.children.item(0) as HTMLInputElement;\n\n if (input.hasAttribute('checked')) {\n title.classList.remove('active');\n content?.classList.remove('active');\n input.removeAttribute('checked');\n }\n\n if (title === tabs) {\n title.classList.add('active');\n content?.classList.add('active');\n input.setAttribute('checked', 'true');\n }\n\n updated++;\n }\n\n return updated;\n }\n\n private updateHTMLHorizontal(tab: Required<Tab>) {\n const {group, key} = tab;\n\n const tabs = this._document.querySelectorAll(\n `${Selector.TABS}[${GROUP_DATA_KEY}=\"${group}\"] ${Selector.TAB}[${TAB_DATA_KEY}=\"${key}\"]`,\n );\n\n let updated = 0;\n\n tabs.forEach((element) => {\n const htmlElem = element as HTMLElement;\n if (!this.isValidTabElement(htmlElem) || htmlElem.dataset.diplodocIsActive === 'true') {\n return;\n }\n\n updated++;\n\n const tab = element;\n const tabList = tab.parentNode;\n const tabsContainer = tabList?.parentNode;\n const allTabs = Array.from(tabList?.querySelectorAll(Selector.TAB) || []);\n const allPanels = Array.from(tabsContainer?.children || []).filter((node) =>\n node.classList.contains(TAB_PANEL_CLASSNAME),\n );\n const targetIndex = allTabs.indexOf(tab);\n\n allTabs.forEach((tab, i) => {\n const panel = allPanels[i];\n const isTargetTab = i === targetIndex;\n const htmlElem = tab as HTMLElement;\n\n htmlElem.dataset.diplodocIsActive = isTargetTab ? 'true' : 'false';\n\n tab.classList.toggle(ACTIVE_CLASSNAME, isTargetTab);\n tab.setAttribute('aria-selected', isTargetTab.toString());\n tab.setAttribute('tabindex', isTargetTab ? '0' : '-1');\n panel.classList.toggle(ACTIVE_CLASSNAME, isTargetTab);\n });\n });\n\n return updated;\n }\n\n private resetScroll(\n target: HTMLElement,\n scrollableParent: HTMLElement,\n previousTargetOffset: ElementOffset,\n ) {\n const targetOffset = getOffsetByScrollableParent(target, scrollableParent);\n const topDelta = targetOffset.top - previousTargetOffset.top;\n const leftDelta = targetOffset.left - previousTargetOffset.left;\n const scrollTopDelta = targetOffset.scrollTop - previousTargetOffset.scrollTop;\n const scrollLeftDelta = targetOffset.scrollLeft - previousTargetOffset.scrollLeft;\n scrollableParent.scrollTo(\n scrollableParent.scrollLeft + leftDelta - scrollLeftDelta,\n scrollableParent.scrollTop + topDelta - scrollTopDelta,\n );\n }\n\n private fireSelectTabEvent(tab: Required<Tab>, diplodocId?: string) {\n const {group, key, align} = tab;\n\n const eventTab: Tab = group.startsWith(DEFAULT_TABS_GROUP_PREFIX) ? {key, align} : tab;\n\n this._onSelectTabHandlers.forEach((handler) => {\n handler({tab: eventTab, currentTabId: diplodocId});\n });\n }\n\n private isValidTabElement(element: HTMLElement) {\n const tabList =\n element.matches(Selector.TAB) && element.dataset.diplodocId\n ? element.closest(Selector.TAB_LIST)\n : null;\n\n return tabList?.closest(Selector.TABS);\n }\n\n private areTabsVertical(target: HTMLElement) {\n const parent = target.parentElement;\n\n return target.dataset.diplodocVerticalTab || Boolean(parent?.dataset.diplodocVerticalTab);\n }\n\n private getTabDataFromHTMLElement(target: HTMLElement): Tab | null {\n if (this.areTabsVertical(target)) {\n const tab = target.dataset.diplodocVerticalTab ? target : target.parentElement!;\n\n const key = tab.dataset.diplodocKey;\n const group = (tab.closest(Selector.TABS) as HTMLElement)?.dataset.diplodocGroup;\n return key && group ? {group, key, align: 'vertical'} : null;\n }\n\n const key = target.dataset.diplodocKey;\n const group = (target.closest(Selector.TABS) as HTMLElement)?.dataset.diplodocGroup;\n return key && group ? {group, key, align: 'horizontal'} : null;\n }\n\n private getTabs(target: HTMLElement): {tabs: Tab[]; nodes: NodeListOf<HTMLElement>} {\n const group = (target.closest(Selector.TABS) as HTMLElement)?.dataset.diplodocGroup;\n const nodes = (\n target.closest(Selector.TAB_LIST) as HTMLElement\n )?.querySelectorAll<HTMLElement>(Selector.TAB);\n\n const tabs: Tab[] = [];\n nodes.forEach((tabEl) => {\n const key = tabEl?.dataset.diplodocKey;\n if (!key) {\n return;\n }\n\n /** horizontal-only supported feature (used in left/right button click) */\n tabs.push({\n group,\n key,\n align: 'horizontal',\n });\n });\n\n return {tabs, nodes};\n }\n}\n","'use strict';\n\n// Node getRootNode(optional GetRootNodeOptions options);\n\n/**\n * Returns the context object’s shadow-including root if options’s composed is true.\n * Returns the context object’s root otherwise.\n *\n * The root of an object is itself, if its parent is null, or else it is the root of its parent.\n *\n * The shadow-including root of an object is its root’s host’s shadow-including root,\n * if the object’s root is a shadow root, and its root otherwise.\n *\n * https://dom.spec.whatwg.org/#dom-node-getrootnode\n *\n * @memberof Node.prototype\n * @param {!Object} [opt = {}] - Options.\n * @param {!boolean} [opt.composed] - See above description.\n * @returns {!Node} The root node.\n */\nfunction getRootNode(opt) {\n var composed = typeof opt === 'object' && Boolean(opt.composed);\n\n return composed ? getShadowIncludingRoot(this) : getRoot(this);\n}\n\nfunction getShadowIncludingRoot(node) {\n var root = getRoot(node);\n\n if (isShadowRoot(root)) {\n return getShadowIncludingRoot(root.host);\n }\n\n return root;\n}\n\nfunction getRoot(node) {\n if (node.parentNode != null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\nfunction isShadowRoot(node) {\n return node.nodeName === '#document-fragment' && node.constructor.name === 'ShadowRoot';\n}\n\nif (typeof module === 'object' && module.exports) {\n module.exports = getRootNode;\n}\n","import {GLOBAL_SYMBOL} from '../common';\nimport {TabsController} from './TabsController';\nimport './scss/tabs.scss';\n\nif (typeof window !== 'undefined' && typeof document !== 'undefined' && !window[GLOBAL_SYMBOL]) {\n window[GLOBAL_SYMBOL] = new TabsController(document);\n}\n","import getRootNode from 'get-root-node-polyfill';\n\nif (typeof document !== 'undefined') {\n // matches polyfill for old edge\n (function (e) {\n const matches =\n e.matches ||\n e.matchesSelector ||\n e.webkitMatchesSelector ||\n e.mozMatchesSelector ||\n e.msMatchesSelector ||\n e.oMatchesSelector;\n\n if (matches) {\n e.matches = e.matchesSelector = matches;\n } else {\n e.matches = e.matchesSelector = function matches(selector) {\n const rootNode = e.getRootNode ? e.getRootNode() : getRootNode.call(e);\n const matches = rootNode.querySelectorAll(selector);\n const th = this;\n return Array.prototype.some.call(matches, (e) => {\n return e === th;\n });\n };\n }\n })(Element.prototype);\n}\n","export const getEventTarget = (event: Event) => {\n const path = event.composedPath();\n return Array.isArray(path) && path.length > 0 ? path[0] : event.target;\n};\n\nexport const isCustom = (event: Event) => {\n const target = getEventTarget(event);\n return !target || !(target as HTMLElement).matches;\n};\n","import {getEventTarget, isCustom} from './utils';\n\nconst BUTTON_SELECTOR = '.yfm-clipboard-button';\n\nfunction copyToClipboard(text: string) {\n if (!text) {\n return Promise.resolve();\n }\n\n if (navigator.clipboard && typeof navigator.clipboard.writeText) {\n return navigator.clipboard.writeText(text);\n }\n const textarea = document.createElement('textarea');\n textarea.setAttribute('style', 'position: absolute; left: 1000%');\n textarea.textContent = text;\n document.body.append(textarea);\n\n textarea.select();\n document.execCommand('copy');\n\n document.body.removeChild(textarea);\n\n return Promise.resolve();\n}\n\nfunction notifySuccess(svgButton: HTMLElement | null) {\n if (!svgButton) {\n return;\n }\n\n const id = svgButton.getAttribute('data-animation');\n // @ts-expect-error\n const icon = svgButton.getRootNode().getElementById(`visibileAnimation-${id}`);\n\n if (!icon) {\n return;\n }\n\n icon.beginElement();\n}\n\nif (typeof document !== 'undefined') {\n document.addEventListener('click', (event) => {\n const target = getEventTarget(event) as HTMLElement;\n\n if (isCustom(event) || !target.matches(BUTTON_SELECTOR)) {\n return;\n }\n\n const parent = target.parentNode;\n\n if (!parent) {\n return;\n }\n\n const code = parent.querySelector<HTMLElement>('pre code');\n if (!code) {\n return;\n }\n\n copyToClipboard(code.innerText).then(() => {\n notifySuccess(parent.querySelector('.yfm-clipboard-button'));\n });\n });\n}\n","import {getEventTarget, isCustom} from './utils';\n\nconst Selector = {\n CUT: '.yfm .yfm-cut',\n TITLE: '.yfm .yfm-cut-title',\n CONTENT: '.yfm .yfm-cut-content',\n};\n\nconst ClassName = {\n OPEN: 'open',\n};\n\nfunction toggleCut(element: HTMLElement) {\n const cutNode = element.parentNode;\n\n if (!(cutNode instanceof HTMLElement)) {\n return;\n }\n\n cutNode.classList.toggle(ClassName.OPEN);\n}\n\nfunction matchTitle(target: EventTarget | null) {\n if (!(target instanceof HTMLElement)) {\n return false;\n }\n\n return target?.matches?.(Selector.TITLE);\n}\n\nfunction findTitleInPath(event: MouseEvent): HTMLElement | undefined {\n const target = getEventTarget(event);\n\n if (matchTitle(target)) {\n return target as HTMLElement;\n }\n\n const path = event.composedPath?.();\n\n return path?.find(matchTitle) as HTMLElement | undefined;\n}\n\nif (typeof document !== 'undefined') {\n document.addEventListener('click', (event) => {\n if (isCustom(event)) {\n return;\n }\n\n const title = findTitleInPath(event);\n\n if (!title) {\n return;\n }\n\n toggleCut(title);\n });\n}\n","export const Selector = {\n TITLE: '.yfm .yfm-term_title',\n CONTENT: '.yfm .yfm-term_dfn',\n};\nexport const openClass = 'open';\nexport const openDefinitionClass = Selector.CONTENT.replace(/\\./g, '') + ' ' + openClass;\nlet isListenerNeeded = true;\n\nexport function createDefinitionElement(termElement: HTMLElement) {\n const termKey = termElement.getAttribute('term-key');\n const definitionTemplate = document.getElementById(\n `${termKey}_template`,\n ) as HTMLTemplateElement;\n const definitionElement = definitionTemplate?.content.cloneNode(true).firstChild as HTMLElement;\n\n definitionTemplate?.parentElement?.appendChild(definitionElement);\n definitionTemplate.remove();\n\n return definitionElement;\n}\n\nexport function setDefinitionId(definitionElement: HTMLElement, termElement: HTMLElement): void {\n const termId = termElement.getAttribute('id') || Math.random().toString(36).substr(2, 8);\n definitionElement?.setAttribute('term-id', termId);\n}\n\nexport function setDefinitionPosition(\n definitionElement: HTMLElement,\n termElement: HTMLElement,\n): void {\n const {\n x: termX,\n y: termY,\n right: termRight,\n left: termLeft,\n width: termWidth,\n height: termHeight,\n } = termElement.getBoundingClientRect();\n\n const termParent = termParentElement(termElement);\n\n if (!termParent) {\n return;\n }\n\n const {right: termParentRight, left: termParentLeft} = termParent.getBoundingClientRect();\n\n if ((termParentRight < termLeft || termParentLeft > termRight) && !isListenerNeeded) {\n closeDefinition(definitionElement);\n return;\n }\n\n if (isListenerNeeded && termParent) {\n termParent.addEventListener('scroll', termOnResize);\n isListenerNeeded = false;\n }\n\n const relativeX = Number(definitionElement.getAttribute('relativeX'));\n const relativeY = Number(definitionElement.getAttribute('relativeY'));\n\n if (relativeX === termX && relativeY === termY) {\n return;\n }\n\n definitionElement.setAttribute('relativeX', String(termX));\n definitionElement.setAttribute('relativeY', String(termY));\n\n const offsetTop = termHeight + 5;\n const definitionParent = definitionElement.parentElement;\n\n if (!definitionParent) {\n return;\n }\n\n const {width: definitionWidth} = definitionElement.getBoundingClientRect();\n const {left: definitionParentLeft} = definitionParent.getBoundingClientRect();\n\n // If definition not fit document change base alignment\n const definitionLeftCoordinate = Number(getCoords(termElement).left);\n const definitionRightCoordinate = definitionWidth + definitionLeftCoordinate;\n\n const definitionOutOfScreenOnLeft = definitionLeftCoordinate - definitionWidth < 0;\n const definitionOutOfScreenOnRight = definitionRightCoordinate > document.body.clientWidth;\n\n const isAlignSwapped = definitionOutOfScreenOnRight || document.dir === 'rtl';\n const fitDefinitionDocument =\n isAlignSwapped && !definitionOutOfScreenOnLeft ? definitionWidth - termWidth : 0;\n const customHeaderTop = getCoords(definitionParent).top - definitionParent.offsetTop;\n\n definitionElement.style.top =\n Number(getCoords(termElement).top + offsetTop - customHeaderTop) + 'px';\n definitionElement.style.left =\n Number(\n getCoords(termElement).left -\n definitionParentLeft +\n definitionParent.offsetLeft -\n fitDefinitionDocument,\n ) + 'px';\n}\n\nfunction termOnResize() {\n const openDefinition = document.getElementsByClassName(openDefinitionClass)[0] as HTMLElement;\n\n if (!openDefinition) {\n return;\n }\n const termId = openDefinition.getAttribute('term-id') || '';\n const termElement = document.getElementById(termId);\n\n if (!termElement) {\n return;\n }\n\n setDefinitionPosition(openDefinition, termElement);\n}\n\nfunction termParentElement(term: HTMLElement | null) {\n if (!term) {\n return null;\n }\n\n const closestScrollableParent = term.closest('table') || term.closest('code');\n\n return closestScrollableParent || term.parentElement;\n}\n\nexport function closeDefinition(definition: HTMLElement) {\n definition.classList.remove(openClass);\n const termId = definition.getAttribute('term-id') || '';\n const termParent = termParentElement(document.getElementById(termId));\n\n if (!termParent) {\n return;\n }\n\n termParent.removeEventListener('scroll', termOnResize);\n isListenerNeeded = true;\n}\n\nfunction getCoords(elem: HTMLElement) {\n const box = elem.getBoundingClientRect();\n\n const body = document.body;\n const docEl = document.documentElement;\n\n const scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;\n const scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft;\n\n const clientTop = docEl.clientTop || body.clientTop || 0;\n const clientLeft = docEl.clientLeft || body.clientLeft || 0;\n\n const top = box.top + scrollTop - clientTop;\n const left = box.left + scrollLeft - clientLeft;\n\n return {top: Math.round(top), left: Math.round(left)};\n}\n","import {\n Selector,\n closeDefinition,\n createDefinitionElement,\n openClass,\n openDefinitionClass,\n setDefinitionId,\n setDefinitionPosition,\n} from './utils';\nimport {getEventTarget, isCustom} from '../utils';\n\nif (typeof document !== 'undefined') {\n document.addEventListener('click', (event) => {\n const openDefinition = document.getElementsByClassName(\n openDefinitionClass,\n )[0] as HTMLElement;\n const target = getEventTarget(event) as HTMLElement;\n\n const termId = target.getAttribute('id');\n const termKey = target.getAttribute('term-key');\n let definitionElement = document.getElementById(termKey + '_element');\n\n if (termKey && !definitionElement) {\n definitionElement = createDefinitionElement(target);\n }\n\n const isSameTerm = openDefinition && termId === openDefinition.getAttribute('term-id');\n if (isSameTerm) {\n closeDefinition(openDefinition);\n return;\n }\n\n const isTargetDefinitionContent = target.closest(\n [Selector.CONTENT.replace(' ', ''), openClass].join('.'),\n );\n\n if (openDefinition && !isTargetDefinitionContent) {\n closeDefinition(openDefinition);\n }\n\n if (isCustom(event) || !target.matches(Selector.TITLE) || !definitionElement) {\n return;\n }\n\n setDefinitionId(definitionElement, target);\n setDefinitionPosition(definitionElement, target);\n\n definitionElement.classList.toggle(openClass);\n });\n\n document.addEventListener('keydown', (event) => {\n const openDefinition = document.getElementsByClassName(\n openDefinitionClass,\n )[0] as HTMLElement;\n if (event.key === 'Escape' && openDefinition) {\n closeDefinition(openDefinition);\n }\n });\n\n window.addEventListener('resize', () => {\n const openDefinition = document.getElementsByClassName(\n openDefinitionClass,\n )[0] as HTMLElement;\n\n if (!openDefinition) {\n return;\n }\n\n const termId = openDefinition.getAttribute('term-id') || '';\n const termElement = document.getElementById(termId);\n\n if (!termElement) {\n openDefinition.classList.toggle(openClass);\n return;\n }\n\n setDefinitionPosition(openDefinition, termElement);\n });\n}\n","import * as React from 'react';\nconst ChevronDown = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M2.97 5.47a.75.75 0 0 1 1.06 0L8 9.44l3.97-3.97a.75.75 0 1 1 1.06 1.06l-4.5 4.5a.75.75 0 0 1-1.06 0l-4.5-4.5a.75.75 0 0 1 0-1.06\", clipRule: \"evenodd\" })));\nexport default ChevronDown;\n","const SvgChevronDown = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M2.97 5.47a.75.75 0 0 1 1.06 0L8 9.44l3.97-3.97a.75.75 0 1 1 1.06 1.06l-4.5 4.5a.75.75 0 0 1-1.06 0l-4.5-4.5a.75.75 0 0 1 0-1.06\" clipRule=\"evenodd\" /></svg>;\nexport default SvgChevronDown;","import React, {FC, PropsWithChildren} from 'react';\nimport cn from 'bem-cn-lite';\nimport {Button, Icon, Popup, PopupProps} from '@gravity-ui/uikit';\nimport XmarkIcon from '@gravity-ui/icons/svgs/xmark.svg';\nimport './PopupWithCloseButton.scss';\n\nconst block = cn('popup-with-close-button');\n\ntype Props = {\n anchorRef: React.RefObject<HTMLElement>;\n open: boolean;\n className?: string;\n placement?: PopupProps['placement'];\n onClose: () => void;\n};\n\nexport const PopupWithCloseButton: FC<PropsWithChildren<Props>> = ({\n anchorRef,\n open,\n onClose,\n children,\n className,\n placement = 'bottom',\n}) => {\n return (\n <Popup\n anchorElement={anchorRef.current}\n open={open}\n className={block(null, className)}\n onOpenChange={(isOpen, _event, reason) => {\n if (!isOpen && reason === 'outside-press') {\n onClose();\n }\n }}\n placement={placement}\n >\n <Button view=\"flat\" className={block('close-button')} onClick={onClose}>\n <Icon data={XmarkIcon} />\n </Button>\n {children}\n </Popup>\n );\n};\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {ClickableText} from '../../components/ClickableText/ClickableText';\n\nimport './FilePicker.scss';\n\nconst block = cn('yt-file-picker');\n\ninterface Props {\n onChange: (v: FileList | null) => void;\n multiple?: boolean;\n children: React.ReactNode;\n}\n\nexport default class FilePicker extends React.Component<Props> {\n inputRef = React.createRef<HTMLInputElement>();\n\n onLinkClick = () => {\n if (!this.inputRef.current) {\n return;\n }\n\n this.inputRef.current.click();\n };\n\n onChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.onChange(event.target.files);\n };\n\n render() {\n const {children, multiple} = this.props;\n return (\n <ClickableText onClick={this.onLinkClick}>\n {children}\n <input\n ref={this.inputRef}\n className={block('input')}\n onChange={this.onChange}\n type={'file'}\n multiple={multiple}\n />\n </ClickableText>\n );\n }\n}\n","import {addI18Keysets} from '../../../i18n';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:component.file-drop-zone', {en, ru});\n","import * as React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport FilePicker from '../FilePicker/FilePicker';\nimport useFileDragDrop from './useFileDragDrop';\nimport i18n from './i18n';\n\nimport './FileDropZone.scss';\n\nconst block = cn('file-drop-zone');\n\ninterface FileDropZoneProps {\n isEmpty: boolean;\n isDropable: boolean;\n onFile: (files: FileList | null) => void;\n}\n\nexport const FileDropZone: React.FC<React.PropsWithChildren<FileDropZoneProps>> = ({\n isDropable,\n onFile,\n isEmpty,\n children,\n}) => {\n const {onDrop, onDragOver, onDragEnter, onDragLeave, isDragging} = useFileDragDrop(onFile);\n\n const renderContent = () => {\n if (children) {\n return children;\n }\n\n return (\n <div className={block('info')}>\n <div>{isDragging ? i18n('context_drop-file') : i18n('context_drag-file')}</div>\n {i18n('or')}\n <div>\n <FilePicker onChange={onFile}>{i18n('action_pick-file')}</FilePicker>\n </div>\n </div>\n );\n };\n\n return (\n <div\n className={block('drag-area', {\n dropable: isDropable,\n empty: isEmpty,\n dragging: isDragging,\n })}\n onDrop={onDrop}\n onDragEnter={onDragEnter}\n onDragLeave={onDragLeave}\n onDragOver={onDragOver}\n >\n {renderContent()}\n </div>\n );\n};\n\nexport default FileDropZone;\n","import * as React from 'react';\nimport {useCallback, useState} from 'react';\n\nexport const useFileDragDrop = (onFile: (files: FileList | null) => void) => {\n // Track drag state to provide visual feedback\n const [isDragging, setIsDragging] = useState(false);\n\n const onDragOver = useCallback((event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n }, []);\n\n const onDragEnter = useCallback((event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n setIsDragging(true);\n }, []);\n\n const onDragLeave = useCallback((event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n setIsDragging(false);\n }, []);\n\n const onDrop = useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n setIsDragging(false);\n\n const {files} = event.dataTransfer;\n\n if (!files) {\n return;\n }\n\n onFile(files);\n },\n [onFile],\n );\n\n return {\n onDragOver,\n onDragEnter,\n onDragLeave,\n onDrop,\n isDragging,\n };\n};\n\nexport default useFileDragDrop;\n","const SvgArrowUp = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M8 14.75a.75.75 0 0 1-.75-.75V3.81L4.53 6.53a.75.75 0 0 1-1.06-1.06l4-4a.75.75 0 0 1 1.06 0l4 4a.75.75 0 0 1-1.06 1.06L8.75 3.81V14a.75.75 0 0 1-.75.75\" clipRule=\"evenodd\" /></svg>;\nexport default SvgArrowUp;","import { useReducer } from 'react';\nvar toggleReducer = function (state, nextValue) {\n return typeof nextValue === 'boolean' ? nextValue : !state;\n};\nvar useToggle = function (initialValue) {\n return useReducer(toggleReducer, initialValue);\n};\nexport default useToggle;\n","import {ChevronDown} from '@gravity-ui/icons';\n\nimport {Icon} from '../Icon';\nimport type {QAProps} from '../types';\nimport {block} from '../utils/cn';\n\nimport './ArrowToggle.scss';\n\nexport interface ArrowToggleProps extends QAProps {\n size?: number;\n direction?: 'top' | 'left' | 'bottom' | 'right';\n className?: string;\n}\n\nconst b = block('arrow-toggle');\n\nexport function ArrowToggle({size = 16, direction = 'bottom', className, qa}: ArrowToggleProps) {\n return (\n <span\n style={{width: size, height: size}}\n className={b({direction}, className)}\n data-qa={qa}\n >\n <Icon data={ChevronDown} size={size} />\n </span>\n );\n}\n","const SvgCircleQuestion = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M8 13.5a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14M6.44 4.54c.43-.354.994-.565 1.56-.565 1.217 0 2.34.82 2.34 2.14 0 .377-.078.745-.298 1.1-.208.339-.513.614-.875.867-.217.153-.325.257-.379.328-.038.052-.038.07-.038.089a.75.75 0 0 1-1.5 0c0-.794.544-1.286 1.057-1.645.28-.196.4-.332.458-.426a.54.54 0 0 0 .075-.312c0-.3-.244-.641-.84-.641a1 1 0 0 0-.608.223c-.167.138-.231.287-.231.418a.75.75 0 0 1-1.5 0c0-.674.345-1.22.78-1.577M8 12a1 1 0 1 0 0-2 1 1 0 0 0 0 2\" clipRule=\"evenodd\" /></svg>;\nexport default SvgCircleQuestion;","const SvgPaperclip = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"m9.77 10.73.01-.01 3.08-3.08a3.889 3.889 0 1 0-5.5-5.5L4.73 4.77l-.01.01-1.667 1.666a5.303 5.303 0 0 0 7.5 7.5l3.167-3.166a.75.75 0 1 0-1.061-1.06l-3.166 3.166a3.803 3.803 0 1 1-5.379-5.379L5.33 6.291l.011-.01L8.421 3.2a2.39 2.39 0 0 1 3.38 3.378l-1.13 1.13-.012.012-2.995 2.994a.975.975 0 1 1-1.378-1.378L9.28 6.34a.75.75 0 0 0-1.06-1.06L5.225 8.274a2.475 2.475 0 0 0 3.5 3.5z\" clipRule=\"evenodd\" /></svg>;\nexport default SvgPaperclip;","'use client';\n\nimport * as React from 'react';\n\nimport {useForkRef, useResizeObserver} from '../../../hooks';\nimport {block} from '../../utils/cn';\n\nimport type {TextAreaProps} from './TextArea';\n\ntype Props = Omit<TextAreaProps, 'autoComplete' | 'onChange' | 'controlProps'> & {\n onChange: NonNullable<TextAreaProps['onChange']>;\n autoComplete?: React.TextareaHTMLAttributes<HTMLTextAreaElement>['autoComplete'];\n controlProps: NonNullable<TextAreaProps['controlProps']>;\n};\n\nconst b = block('text-area');\n\nconst calculateLinesByScrollHeight = (args: {\n height: number;\n paddingTop: number;\n paddingBottom: number;\n lineHeight: number;\n}) => {\n const {height, lineHeight} = args;\n const paddingTop = Number.isNaN(args.paddingTop) ? 0 : args.paddingTop;\n const paddingBottom = Number.isNaN(args.paddingBottom) ? 0 : args.paddingBottom;\n\n return (height - paddingTop - paddingBottom) / lineHeight;\n};\n\nexport function TextAreaControl(props: Props) {\n const {\n name,\n id,\n tabIndex,\n autoComplete,\n placeholder,\n value,\n defaultValue,\n controlRef,\n controlProps,\n size,\n rows,\n minRows = 1,\n maxRows,\n autoFocus,\n disabled,\n readOnly,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n onKeyUp,\n onKeyPress,\n } = props;\n const innerControlRef = React.useRef<HTMLTextAreaElement>(null);\n const handleRef = useForkRef(controlRef, innerControlRef);\n const textareaRows = Math.max(rows || minRows, 1);\n const innerValue = value || innerControlRef?.current?.value;\n\n const resizeHeight = React.useCallback(() => {\n const control = innerControlRef?.current;\n const parent = control?.parentElement;\n\n if (control && parent && !rows) {\n const controlStyles = getComputedStyle(control);\n const lineHeight = parseInt(controlStyles.getPropertyValue('line-height'), 10);\n const paddingTop = parseInt(controlStyles.getPropertyValue('padding-top'), 10);\n const paddingBottom = parseInt(controlStyles.getPropertyValue('padding-bottom'), 10);\n const linesWithCarriageReturn = (innerValue?.match(/\\n/g) || []).length + 1;\n\n const parentHeight = parent.style.height;\n parent.style.height = `${parent.offsetHeight}px`;\n\n control.style.height = `${lineHeight + paddingTop + paddingBottom}px`;\n const overflow = control.style.overflow;\n control.style.overflow = 'hidden';\n\n const linesByScrollHeight = calculateLinesByScrollHeight({\n height: control.scrollHeight,\n paddingTop,\n paddingBottom,\n lineHeight,\n });\n\n const linesCount = Math.max(linesByScrollHeight, linesWithCarriageReturn);\n\n if (maxRows && maxRows < linesCount) {\n control.style.height = `${maxRows * lineHeight + paddingTop + paddingBottom}px`;\n } else if (minRows && minRows > linesCount) {\n control.style.height = `${Math.min(minRows, maxRows || Infinity) * lineHeight + paddingTop + paddingBottom}px`;\n } else {\n control.style.height = `${control.scrollHeight}px`;\n }\n\n control.style.overflow = overflow;\n parent.style.height = parentHeight;\n }\n }, [rows, maxRows, minRows, innerValue]);\n\n useResizeObserver({\n ref: rows ? undefined : innerControlRef,\n onResize: resizeHeight,\n });\n\n React.useEffect(() => {\n resizeHeight();\n }, [resizeHeight, size, value]);\n\n return (\n <textarea\n {...controlProps}\n ref={handleRef}\n style={{\n ...controlProps.style,\n height: rows ? 'auto' : undefined,\n }}\n className={b('control', controlProps.className)}\n name={name}\n id={id}\n tabIndex={tabIndex}\n placeholder={placeholder}\n value={value}\n defaultValue={defaultValue}\n rows={textareaRows}\n autoFocus={autoFocus}\n autoComplete={autoComplete}\n onChange={onChange}\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n onKeyPress={onKeyPress}\n disabled={disabled ?? controlProps.disabled}\n readOnly={readOnly ?? controlProps.readOnly}\n />\n );\n}\n","'use client';\n\nimport * as React from 'react';\n\nimport {useControlledState, useForkRef, useUniqId} from '../../../hooks';\nimport {useFormResetHandler} from '../../../hooks/private';\nimport {block} from '../../utils/cn';\nimport {ClearButton, mapTextInputSizeToButtonSize} from '../common';\nimport {OuterAdditionalContent} from '../common/OuterAdditionalContent/OuterAdditionalContent';\nimport type {\n BaseInputControlProps,\n InputControlPin,\n InputControlSize,\n InputControlView,\n} from '../types';\nimport {errorPropsMapper, getInputControlState, prepareAutoComplete} from '../utils';\n\nimport {TextAreaControl} from './TextAreaControl';\n\nimport './TextArea.scss';\n\nconst b = block('text-area');\n\nexport type TextAreaProps = BaseInputControlProps<HTMLTextAreaElement> & {\n /** The control's html attributes */\n controlProps?: React.TextareaHTMLAttributes<HTMLTextAreaElement>;\n /** The number of visible text lines for the control. If not specified, the hight will be automatically calculated based on the content */\n rows?: number;\n /** The number of minimum visible text lines for the control. Ignored if `rows` is specified */\n minRows?: number;\n /** The number of maximum visible text lines for the control. Ignored if `rows` is specified */\n maxRows?: number;\n /** An optional element displayed under the lower right corner of the control and sharing the place with the error container */\n note?: React.ReactNode;\n};\nexport type TextAreaPin = InputControlPin;\nexport type TextAreaSize = InputControlSize;\nexport type TextAreaView = InputControlView;\n\nexport const TextArea = React.forwardRef<HTMLSpanElement, TextAreaProps>(\n function TextArea(props, ref) {\n const {\n view = 'normal',\n size = 'm',\n pin = 'round-round',\n name,\n value,\n defaultValue,\n disabled,\n readOnly,\n hasClear = false,\n error,\n errorMessage: errorMessageProp,\n validationState: validationStateProp,\n autoComplete,\n id: idProp,\n tabIndex,\n style,\n className,\n qa,\n controlProps,\n note,\n onUpdate,\n onChange,\n } = props;\n\n const {errorMessage, validationState} = errorPropsMapper({\n error,\n errorMessage: errorMessageProp,\n validationState: validationStateProp,\n });\n\n const [inputValue, setInputValue] = useControlledState(value, defaultValue ?? '', onUpdate);\n const innerControlRef = React.useRef<HTMLTextAreaElement | HTMLInputElement>(null);\n const fieldRef = useFormResetHandler({initialValue: inputValue, onReset: setInputValue});\n const handleRef = useForkRef(props.controlRef, innerControlRef, fieldRef);\n const [hasVerticalScrollbar, setHasVerticalScrollbar] = React.useState(false);\n const state = getInputControlState(validationState);\n const innerId = useUniqId();\n\n const isErrorMsgVisible = validationState === 'invalid' && Boolean(errorMessage);\n const isClearControlVisible = Boolean(hasClear && !disabled && !readOnly && inputValue);\n const id = idProp || innerId;\n\n const errorMessageId = useUniqId();\n const noteId = useUniqId();\n const ariaDescribedBy = [\n controlProps?.['aria-describedby'],\n note ? noteId : undefined,\n isErrorMsgVisible ? errorMessageId : undefined,\n ]\n .filter(Boolean)\n .join(' ');\n\n const commonProps = {\n id,\n tabIndex,\n name,\n onChange(event: React.ChangeEvent<HTMLTextAreaElement>) {\n setInputValue(event.target.value);\n if (onChange) {\n onChange(event);\n }\n },\n autoComplete: prepareAutoComplete(autoComplete),\n controlProps: {\n ...controlProps,\n 'aria-describedby': ariaDescribedBy || undefined,\n 'aria-invalid': validationState === 'invalid' || undefined,\n },\n };\n\n const handleClear = (event: React.MouseEvent<HTMLSpanElement>) => {\n const control = innerControlRef.current;\n\n if (control) {\n control.focus();\n\n const syntheticEvent = Object.create(event);\n syntheticEvent.target = control;\n syntheticEvent.currentTarget = control;\n\n control.value = '';\n\n if (onChange) {\n onChange(syntheticEvent);\n }\n }\n\n setInputValue('');\n };\n\n React.useEffect(() => {\n const control = innerControlRef.current;\n\n if (control) {\n const currHasVerticalScrollbar = control.scrollHeight > control.clientHeight;\n\n if (hasVerticalScrollbar !== currHasVerticalScrollbar) {\n setHasVerticalScrollbar(currHasVerticalScrollbar);\n }\n }\n }, [inputValue, hasVerticalScrollbar]);\n\n return (\n <span\n ref={ref}\n style={style}\n className={b(\n {\n view,\n size,\n disabled,\n state,\n pin: view === 'clear' ? undefined : pin,\n 'has-clear': isClearControlVisible,\n 'has-scrollbar': hasVerticalScrollbar,\n },\n className,\n )}\n data-qa={qa}\n >\n <span className={b('content')}>\n <TextAreaControl {...props} {...commonProps} controlRef={handleRef} />\n {isClearControlVisible && (\n <ClearButton\n className={b('clear', {size})}\n size={mapTextInputSizeToButtonSize(size)}\n onClick={handleClear}\n />\n )}\n </span>\n <OuterAdditionalContent\n errorMessage={isErrorMsgVisible ? errorMessage : null}\n errorMessageId={errorMessageId}\n note={note}\n noteId={noteId}\n />\n </span>\n );\n },\n);\n"],"names":["block","cn","emptyTransformResponse","result","html","headings","logs","info","warn","error","disabled","transformMarkdown","_x","_transformMarkdown","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","_ref","text","allowHTML","_yield$wrapApiPromise","data","wrap","_context2","prev","next","wrapApiPromiseByToaster","axios","post","toasterName","skipSuccessToast","errorContent","sent","abrupt","t0","_objectSpread","message","stop","useMarkdown","_ref2","_ref2$allowHTML","_React$useState","React","_React$useState2","_slicedToArray","res","setResult","_transform","_callee","_context","transform","MD","_ref3","_useMarkdown$result","_jsx","children","className","dangerouslySetInnerHTML","__html","Markdown","memo","_ref5","customMarkdown","UIFactory","renderMarkdown","props","xmlns","fill","viewBox","fillRule","d","clipRule","InfiniteScrollLoader","loading","onLoadMore","paginationRef","useRef","useEffect","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","root","threshold","current","observe","unobserve","Flex","ref","alignItems","justifyContent","Loader","addI18Keysets","en","ru","textFileValidator","file","arrayBuffer","content","bytesToCheck","i","size","isValid","i18n","Uint8Array","Math","min","length","TextDecoder","fatal","decode","toaster","Toaster","ChatFilePopup","dispatch","useDispatch","files","useSelector","selectAttachedFiles","handleFileAdd","fileList","validFiles","_i","_Array$from","_yield$textFileValida","Array","from","add","name","title","theme","push","attachFiles","_jsxs","direction","gap","Text","variant","Tooltip","color","Icon","CircleQuestionIcon","FileDropZone","isEmpty","isDropable","onFile","map","index","ellipsis","Button","view","onClick","removeAttachedFile","handleFileRemove","TrashBinIcon","ChatFileButton","btnRef","_useToggle","useToggle","_useToggle2","open","toggleOpen","_Fragment","PaperclipIcon","concat","undefined","PopupWithCloseButton","anchorRef","onClose","placement","ChatInput","showScrollButton","onScrollClick","isSending","selectChatSending","question","selectChatQuestion","handleQuestionSubmit","sendQuestion","ChevronDownIcon","TextArea","value","onUpdate","setQuestion","onKeyDown","e","key","shiftKey","preventDefault","ArrowUpIcon","ChatHeader","resetChat","PlusIcon","toggleChatHistory","ListUlIcon","toggleChatSidePanel","XmarkIcon","EmptyChat","grow","AnswerBody","inProgress","state","onCopy","_window$getSelection","window","getSelection","toString","ClipboardButton","McpMessage","clipboardValue","isOpen","ArrowToggle","stopPropagation","McpSearchAnswer","JSON","stringify","url","Link","href","target","ArrowUpRightFromSquareIcon","McpSchemaAnswer","McpUnknownAnswer","jsonString","getMessageComponentByType","type","YTErrorBlock","Message","isQuestion","component","uiFactory","getAiChatMessageComponent","Messages","_useSelector","selectConversation","items","hasMore","loadMoreConversationItems","ChevronUpIcon","id","displayName","b","LoadingDots","CurrentAnswer","answer","selectCurrentAnswer","ChatHistoryItem","topic","onDelete","ChatHistory","groupedConversations","selectConversationsGroupedByDate","selectConversationsHasMore","selectConversationsLoading","handleConversationClick","conversationId","loadConversation","handleConversationDelete","deleteConversation","handleLoadMore","useCallback","loadMoreConversations","group","hammer","format","date","List","filterable","renderItem","item","_","_item$metadata","metadata","itemHeight","virtualized","NoContent","warning","vertical","ChatBody","_messagesRef$current","isUserScrolledUp","scrollToBottom","checkScrollPosition","messagesRef","isLoading","selectChatLoading","chatIsVisible","selectChatIsVisible","historyIsVisible","selectChatHistoryIsVisible","selectChatError","handleContainerResize","useResizeObserver","element","onResize","_useState","useState","_useState2","isScrolledToBottom","setIsScrolledToBottom","_useState3","_useState4","setIsUserScrolledUp","containerRef","_containerRef$current","scrollTop","isAtBottom","scrollHeight","clientHeight","behavior","scrollTo","top","handleUserScroll","container","addEventListener","removeEventListener","TAB_PANEL_CLASSNAME","ACTIVE_CLASSNAME","GROUP_DATA_KEY","TAB_DATA_KEY","GLOBAL_SYMBOL","getEventTarget","isCustom","getClosestScrollableParent","getOffsetByScrollableParent","Selector","getShadowIncludingRoot","node","getRoot","nodeName","constructor","isShadowRoot","host","parentNode","module","exports","opt","Boolean","composed","this","Symbol","for","event","path","composedPath","isArray","matches","abs","parentElement","scrollableParent","elementBounds","getBoundingClientRect","scrollableParentBounds","left","scrollLeft","TABS","TAB_LIST","TAB","TAB_PANEL","VERTICAL_TABS","document","_onSelectTabHandlers","Set","_document","areVertical","areTabsVertical","isValidTabElement","tab","getTabDataFromHTMLElement","_selectTab","tabs","nodes","getTabs","currentTab","currentTabIndex","findIndex","newIndex","selectTab","focus","onSelectTab","handler","delete","selectTabById","options","querySelector","scrollToElement","scrollIntoView","targetTab","align","previousTargetOffset","updateHTML","fireSelectTabEvent","dataset","diplodocId","resetScroll","updateHTMLVertical","updateHTMLHorizontal","querySelectorAll","updated","elements","input","hasAttribute","classList","remove","removeAttribute","setAttribute","htmlElem","diplodocIsActive","tabList","tabsContainer","allTabs","allPanels","filter","contains","targetIndex","indexOf","panel","isTargetTab","toggle","targetOffset","topDelta","leftDelta","scrollTopDelta","scrollLeftDelta","eventTab","startsWith","currentTabId","closest","parent","diplodocVerticalTab","_a","_b","diplodocKey","diplodocGroup","tabEl","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","selector","getRootNode","call","th","prototype","some","Element","code","Promise","resolve","navigator","clipboard","writeText","textarea","createElement","textContent","body","append","select","execCommand","removeChild","copyToClipboard","innerText","then","svgButton","getAttribute","icon","getElementById","beginElement","notifySuccess","matchTitle","HTMLElement","find","findTitleInPath","cutNode","toggleCut","TITLE","CONTENT","openClass","openDefinitionClass","replace","isListenerNeeded","setDefinitionPosition","definitionElement","termElement","x","termX","y","termY","right","termRight","termLeft","width","termWidth","height","termHeight","termParent","termParentElement","termParentRight","termParentLeft","closeDefinition","termOnResize","relativeX","Number","relativeY","String","offsetTop","definitionParent","definitionWidth","definitionParentLeft","definitionLeftCoordinate","getCoords","definitionOutOfScreenOnLeft","fitDefinitionDocument","clientWidth","dir","customHeaderTop","style","offsetLeft","openDefinition","getElementsByClassName","termId","term","definition","elem","box","docEl","documentElement","pageYOffset","pageXOffset","clientTop","clientLeft","round","termKey","definitionTemplate","cloneNode","firstChild","appendChild","createDefinitionElement","isTargetDefinitionContent","join","random","substr","setDefinitionId","Object","assign","_ref$placement","Popup","anchorElement","onOpenChange","_event","reason","FilePicker","_React$Component","_this","_classCallCheck","_len","args","_key","_callSuper","inputRef","onLinkClick","click","onChange","_inherits","_createClass","_this$props","multiple","ClickableText","_useFileDragDrop","isDragging","setIsDragging","onDragOver","onDragEnter","onDragLeave","onDrop","dataTransfer","useFileDragDrop","dropable","empty","dragging","toggleReducer","nextValue","initialValue","useReducer","qa","I","ChevronDown","TextAreaControl","tabIndex","autoComplete","placeholder","defaultValue","controlRef","controlProps","rows","minRows","maxRows","autoFocus","readOnly","onFocus","onBlur","onKeyUp","onKeyPress","innerControlRef","handleRef","useForkRef","textareaRows","max","innerValue","resizeHeight","control","controlStyles","getComputedStyle","lineHeight","parseInt","getPropertyValue","paddingTop","paddingBottom","linesWithCarriageReturn","match","parentHeight","offsetHeight","overflow","linesByScrollHeight","isNaN","calculateLinesByScrollHeight","linesCount","Infinity","pin","hasClear","errorMessage","errorMessageProp","validationState","validationStateProp","idProp","note","inputValue","setInputValue","useControlledState","fieldRef","useFormResetHandler","onReset","hasVerticalScrollbar","setHasVerticalScrollbar","innerId","useUniqId","u","isErrorMsgVisible","isClearControlVisible","errorMessageId","noteId","ariaDescribedBy","commonProps","currHasVerticalScrollbar","ClearButton","syntheticEvent","create","currentTarget","OuterAdditionalContent"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"js/code-assistant-chat.a7927638.chunk.js","mappings":"kQAcMA,GAAQC,EAAAA,EAAAA,GAAG,eAWXC,EAAqC,CACvCC,OAAQ,CAACC,KAAM,GAAIC,SAAU,IAC7BC,KAAM,CAACC,KAAM,GAAIC,KAAM,GAAIC,MAAO,GAAIC,SAAU,KAG7C,SAAeC,EAAiBC,GAAA,OAAAC,EAAAC,MAAC,KAADC,UAAA,CAoBtC,SAAAF,IAAA,OAAAA,GAAAG,EAAAA,EAAAA,IAAAC,EAAAA,EAAAA,KAAAC,MApBM,SAAAC,EAAAC,GAAA,IAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAP,EAAAA,EAAAA,KAAAQ,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OAAiD,OAAfP,EAAID,EAAJC,KAAMC,EAASF,EAATE,UAASI,EAAAC,KAAA,EAAAD,EAAAE,KAAA,GAE3BC,EAAAA,EAAAA,IACjBC,EAAAA,EAAMC,KAAe,wBAAyB,CAC1CV,KAAAA,EACAC,UAAAA,IAEJ,CACIU,YAAa,cACbC,kBAAkB,EAClBC,aAAc,sCAEpB,KAAD,EAVU,OAUVX,EAAAG,EAAAS,KAVMX,EAAID,EAAJC,KAAIE,EAAAU,OAAA,SAWJZ,GAAI,cAAAE,EAAAC,KAAA,EAAAD,EAAAW,GAAAX,EAAA,SAAAA,EAAAU,OAAA,SAEJ,CACHjC,QAAMmC,EAAAA,EAAAA,GAAA,GAAMpC,EAA+B,QAC3CI,MAAIgC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAMpC,EAA6B,MAAC,IAAEO,MAAO,CAACiB,EAAAW,GAAaE,aAClE,yBAAAb,EAAAc,OAAA,GAAArB,EAAA,mBAERL,MAAA,KAAAC,UAAA,CAEM,SAAS0B,EAAWC,GAAmC,IAAjCrB,EAAIqB,EAAJrB,KAAIsB,EAAAD,EAAEpB,UAAAA,OAAS,IAAAqB,GAAOA,EAC/CC,EAAyBC,EAAAA,SAA2B3C,GAAuB4C,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAApEI,EAAGF,EAAA,GAAEG,EAASH,EAAA,GAarB,OAXAD,EAAAA,WAAgB,WACY,SAAAK,IAMvB,OANuBA,GAAAlC,EAAAA,EAAAA,IAAAC,EAAAA,EAAAA,KAAAC,MAAxB,SAAAiC,IAAA,IAAA3B,EAAA,OAAAP,EAAAA,EAAAA,KAAAQ,MAAA,SAAA2B,GAAA,cAAAA,EAAAzB,KAAAyB,EAAAxB,MAAA,cAAAwB,EAAAzB,KAAA,EAAAyB,EAAAxB,KAAA,EAE2BjB,EAAkB,CAACU,KAAAA,EAAMC,UAAAA,IAAY,KAAD,EAAjDE,EAAI4B,EAAAjB,KAEVc,EAAUzB,GAAM4B,EAAAxB,KAAA,eAAAwB,EAAAzB,KAAA,EAAAyB,EAAAf,GAAAe,EAAA,iCAAAA,EAAAZ,OAAA,GAAAW,EAAA,mBAEvBrC,MAAA,KAAAC,UAAA,EAPkB,WACKmC,EAAApC,MAAC,KAADC,UAAA,CAOxBsC,EACJ,GAAG,CAAChC,EAAMC,IAEH0B,CACX,CAEA,SAASM,EAAEC,GAAiB,IAADC,EAChBpD,GAAmD,QAA1DoD,EAAef,EAAY,CAACpB,KADfkC,EAAJlC,KACyBC,WAAW,IAAOnB,cAAM,IAAAqD,EAAAA,EAAI,CAAC,GAAxDpD,KAEP,OACIqD,EAAAA,EAAAA,KAACZ,EAAAA,SAAc,CAAAa,UACXD,EAAAA,EAAAA,KAAA,OAAKE,UAAW3D,EAAM,KAAM,OAAQ4D,wBAAyB,CAACC,OAAQzD,QAAAA,EAAQ,OAG1F,CAEO,IAAM0D,GAAWC,EAAAA,EAAAA,OAAK,SAAiBC,GAAiB,IAAf3C,EAAI2C,EAAJ3C,KACtC4C,EAAiBC,EAAAA,GAAUC,eAAe,CAAC9C,KAAAA,IACjD,OAAO4C,QAAAA,GAAkBR,EAAAA,EAAAA,KAACH,EAAE,CAACjC,KAAMA,GACvC,G,6DCjFA,QADgB,SAAA+C,GAAK,OAAIX,EAAAA,EAAAA,KAAA,OAAAnB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAAK+B,MAAM,6BAA6BC,KAAK,OAAOC,QAAQ,aAAgBH,GAAK,IAAAV,UAAED,EAAAA,EAAAA,KAAA,QAAMa,KAAK,eAAeE,SAAS,UAAUC,EAAE,iJAAiJC,SAAS,cAAmB,C,6DCCxU,QADqB,SAAAN,GAAK,OAAIX,EAAAA,EAAAA,KAAA,OAAAnB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAAK+B,MAAM,6BAA6BC,KAAK,OAAOC,QAAQ,aAAgBH,GAAK,IAAAV,UAAED,EAAAA,EAAAA,KAAA,QAAMa,KAAK,eAAeE,SAAS,UAAUC,EAAE,oIAAoIC,SAAS,cAAmB,C,mFCSnTC,EAAkC,SAAHvD,GAA0C,IAArCuC,EAASvC,EAATuC,UAAWiB,EAAOxD,EAAPwD,QAASC,EAAUzD,EAAVyD,WAC3DC,GAAgBC,EAAAA,EAAAA,QAA8B,MA4BpD,OA1BAC,EAAAA,EAAAA,YAAU,WACN,IAAMC,EAAW,IAAIC,sBACjB,SAACC,GACGA,EAAQC,SAAQ,SAACC,GACTA,EAAMC,gBACNT,GAER,GACJ,GACA,CACIU,KAAM,KACNC,UAAW,KAQnB,OAJIV,EAAcW,SACdR,EAASS,QAAQZ,EAAcW,SAG5B,WACCX,EAAcW,SACdR,EAASU,UAAUb,EAAcW,QAEzC,CACJ,GAAG,KAGChC,EAAAA,EAAAA,KAACmC,EAAAA,EAAI,CAACjC,UAAWA,EAAWkC,IAAKf,EAAegB,WAAW,SAASC,eAAe,SAAQrC,SACtFkB,GAAUnB,EAAAA,EAAAA,KAACuC,EAAAA,EAAM,IAAM,IAGpC,C,0iCCtCA,GAAeC,EAAAA,EAAAA,IAAc,wBAAyB,CAACC,GAAAA,EAAIC,GAAAA,ICE3D,IAEaC,EAAiB,eAAAhF,GAAAJ,EAAAA,EAAAA,IAAAC,EAAAA,EAAAA,KAAAC,MAAG,SAAAiC,EAAOkD,GAAU,IAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAxF,EAAAA,EAAAA,KAAAQ,MAAA,SAAA2B,GAAA,cAAAA,EAAAzB,KAAAyB,EAAAxB,MAAA,YAC1CyE,EAAKK,KAHS,QAGW,CAAAtD,EAAAxB,KAAA,eAAAwB,EAAAhB,OAAA,SAClB,CAACuE,SAAS,EAAOlG,MAAOmG,EAAK,0BAAwB,cAAAxD,EAAAzB,KAAA,EAAAyB,EAAAxB,KAAA,EAIlCyE,EAAKC,cAAc,KAAD,EAAtCA,EAAWlD,EAAAjB,KACXoE,EAAU,IAAIM,WAAWP,GAGzBE,EAAeM,KAAKC,IAAIR,EAAQS,OAAQ,MACrCP,EAAI,EAAE,KAAD,OAAEA,EAAID,GAAY,CAAApD,EAAAxB,KAAA,YACT,IAAf2E,EAAQE,GAAQ,CAAArD,EAAAxB,KAAA,gBAAAwB,EAAAhB,OAAA,SACT,CAACuE,SAAS,EAAOlG,MAAOmG,EAAK,uBAAqB,QAF/BH,IAAGrD,EAAAxB,KAAA,gBAQT,OADZ,IAAIqF,YAAY,QAAS,CAACC,OAAO,IACzCC,OAAOb,GAAalD,EAAAhB,OAAA,SAErB,CAACuE,SAAS,IAAK,eAAAvD,EAAAzB,KAAA,GAAAyB,EAAAf,GAAAe,EAAA,SAAAA,EAAAhB,OAAA,SAEf,CAACuE,SAAS,EAAOlG,MAAOmG,EAAK,6BAA2B,yBAAAxD,EAAAZ,OAAA,GAAAW,EAAA,mBAEtE,gBAzB6BvC,GAAA,OAAAQ,EAAAN,MAAA,KAAAC,UAAA,K,sBCKxBf,GAAQC,EAAAA,EAAAA,GAAG,sBAEXmH,EAAU,IAAIC,EAAAA,EAEPC,EAAoB,WAC7B,IAAMC,GAAWC,EAAAA,EAAAA,KACXC,GAAQC,EAAAA,EAAAA,GAAYC,EAAAA,IAEpBC,EAAa,eAAAxG,GAAAJ,EAAAA,EAAAA,IAAAC,EAAAA,EAAAA,KAAAC,MAAG,SAAAiC,EAAO0E,GAAyB,IAAAC,EAAAC,EAAAC,EAAA3B,EAAA4B,EAAAtB,EAAAlG,EAAA,OAAAQ,EAAAA,EAAAA,KAAAQ,MAAA,SAAA2B,GAAA,cAAAA,EAAAzB,KAAAyB,EAAAxB,MAAA,UAC7CiG,EAAS,CAADzE,EAAAxB,KAAA,eAAAwB,EAAAhB,OAAA,iBAEP0F,EAAqB,GAAEC,EAAA,EAAAC,EAEVE,MAAMC,KAAKN,GAAS,YAAAE,EAAAC,EAAAhB,QAAA,CAAA5D,EAAAxB,KAAA,SAAxB,OAAJyE,EAAI2B,EAAAD,GAAA3E,EAAAxB,KAAA,EACoBwE,EAAkBC,GAAM,KAAD,EAAjC,GAAiC4B,EAAA7E,EAAAjB,KAA/CwE,EAAOsB,EAAPtB,QAASlG,EAAKwH,EAALxH,MAEXkG,EAAQ,CAADvD,EAAAxB,KAAA,SAKL,OAJHwF,EAAQgB,IAAI,CACRC,KAAM,wBACNC,MAAO7H,EACP8H,MAAO,WACRnF,EAAAhB,OAAA,uBAIP0F,EAAWU,KAAKnC,GAAM,QAAA0B,IAAA3E,EAAAxB,KAAA,gBAGtBkG,EAAWd,OAAS,GACpBO,GAASkB,EAAAA,EAAAA,IAAYX,IACxB,yBAAA1E,EAAAZ,OAAA,GAAAW,EAAA,KACJ,gBAvBkBvC,GAAA,OAAAQ,EAAAN,MAAA,KAAAC,UAAA,KA6BnB,OACI2H,EAAAA,EAAAA,MAAC9C,EAAAA,EAAI,CAAC+C,UAAU,SAAShF,UAAW3D,IAAS4I,IAAK,EAAElF,SAAA,EAChDD,EAAAA,EAAAA,KAACoF,EAAAA,EAAI,CAACC,QAAQ,cAAapF,UACvBgF,EAAAA,EAAAA,MAAC9C,EAAAA,EAAI,CAACE,WAAW,SAAS8C,IAAK,EAAElF,SAAA,CAC5BkD,EAAK,uBACNnD,EAAAA,EAAAA,KAACsF,EAAAA,EAAO,CAACxC,QAASK,EAAK,2BAA2BlD,UAC9CD,EAAAA,EAAAA,KAACoF,EAAAA,EAAI,CAACG,MAAM,YAAWtF,UACnBD,EAAAA,EAAAA,KAACwF,EAAAA,EAAI,CAACzH,KAAM0H,EAAAA,EAAoBxC,KAAM,eAKtDjD,EAAAA,EAAAA,KAAC0F,EAAAA,EAAY,CAACC,QAA0B,IAAjB3B,EAAMT,OAAcqC,YAAY,EAAMC,OAAQ1B,IACpEH,EAAMT,OAAS,IACZvD,EAAAA,EAAAA,KAACmC,EAAAA,EAAI,CAAC+C,UAAU,SAASC,IAAK,EAAGjF,UAAW3D,EAAM,cAAc0D,SAC3D+D,EAAM8B,KAAI,SAAClD,EAAMmD,GAAK,OACnBd,EAAAA,EAAAA,MAAC9C,EAAAA,EAAI,CAEDE,WAAW,SACXC,eAAe,gBACfpC,UAAW3D,EAAM,aAAa0D,SAAA,EAE9BD,EAAAA,EAAAA,KAACoF,EAAAA,EAAI,CAACC,QAAQ,SAASW,UAAQ,EAAA/F,SAC1B2C,EAAKgC,QAEV5E,EAAAA,EAAAA,KAACiG,EAAAA,EAAM,CAACC,KAAK,OAAOC,QAAS,WAAF,OA7B1B,SAACJ,GACtBjC,GAASsC,EAAAA,EAAAA,IAAmBL,GAChC,CA2B2DM,CAAiBN,EAAM,EAAC9F,UACvDD,EAAAA,EAAAA,KAACwF,EAAAA,EAAI,CAACzH,KAAMuI,EAAAA,EAAcrD,KAAM,SAT/B8C,EAWF,QAM/B,EC1EMxJ,GAAQC,EAAAA,EAAAA,GAAG,uBAEJ+J,EAAqB,WAC9B,IAAMC,GAASlF,EAAAA,EAAAA,QAA0B,MACzCmF,GAA2BC,EAAAA,EAAAA,IAAU,GAAMC,GAAArH,EAAAA,EAAAA,GAAAmH,EAAA,GAApCG,EAAID,EAAA,GAAEE,EAAUF,EAAA,GAChBpD,GAAUU,EAAAA,EAAAA,GAAYC,EAAAA,IAAtBX,OAEP,OACI0B,EAAAA,EAAAA,MAAA6B,EAAAA,SAAA,CAAA7G,SAAA,EACIgF,EAAAA,EAAAA,MAACgB,EAAAA,EAAM,CAAC7D,IAAKoE,EAAQL,QAASU,EAAW5G,SAAA,EACrCD,EAAAA,EAAAA,KAACwF,EAAAA,EAAI,CAACzH,KAAMgJ,EAAAA,EAAe9D,KAAM,KAChCM,EAAM,IAAAyD,OAAOzD,QAAW0D,MAE7BjH,EAAAA,EAAAA,KAACkH,EAAAA,EAAoB,CACjBhH,UAAW3D,EAAM,SACjB4K,UAAWX,EACXI,KAAMA,EACNQ,QAASP,EACTQ,UAAU,MAAKpH,UAEfD,EAAAA,EAAAA,KAAC6D,EAAa,QAI9B,ECvBMtH,GAAQC,EAAAA,EAAAA,GAAG,oBAOJ8K,EAAuB,SAAH3J,GAA2C,IAAtC4J,EAAgB5J,EAAhB4J,iBAAkBC,EAAa7J,EAAb6J,cAC9C1D,GAAWC,EAAAA,EAAAA,KACX0D,GAAYxD,EAAAA,EAAAA,GAAYyD,EAAAA,IACxBC,GAAW1D,EAAAA,EAAAA,GAAY2D,EAAAA,GAMvBC,EAAuB,WACzB/D,GAASgE,EAAAA,EAAAA,MACb,EASA,OACI7C,EAAAA,EAAAA,MAAA,OAAK/E,UAAW3D,IAAQ0D,SAAA,CACnBsH,IACGvH,EAAAA,EAAAA,KAACiG,EAAAA,EAAM,CAACC,KAAK,WAAWhG,UAAW3D,EAAM,iBAAkB4J,QAASqB,EAAcvH,UAC9ED,EAAAA,EAAAA,KAACwF,EAAAA,EAAI,CAACzH,KAAMgK,EAAAA,EAAiB9E,KAAM,QAI3CgC,EAAAA,EAAAA,MAAC9C,EAAAA,EAAI,CAACjC,UAAW3D,EAAM,QAAS+F,eAAe,gBAAgBD,WAAW,WAAUpC,SAAA,EAChFD,EAAAA,EAAAA,KAACgI,EAAAA,EAAQ,CACL9B,KAAK,QACL+B,MAAON,GAAY,GACnBO,SA3Ba,SAACD,GAC1BnE,GAASqE,EAAAA,EAAAA,IAAYF,GACzB,EA0BgBG,UApBM,SAACC,GACL,UAAVA,EAAEC,KAAoBD,EAAEE,WACxBF,EAAEG,iBACFX,IAER,KAiBY5C,EAAAA,EAAAA,MAAC9C,EAAAA,EAAI,CAACgD,IAAK,EAAElF,SAAA,EACTD,EAAAA,EAAAA,KAACuG,EAAc,KACfvG,EAAAA,EAAAA,KAACiG,EAAAA,EAAM,CACHC,KAAK,SACLC,QAAS0B,EACT5K,UAAW0K,EACXxG,QAASsG,EAAUxH,UAEnBD,EAAAA,EAAAA,KAACwF,EAAAA,EAAI,CAACzH,KAAM0K,EAAAA,EAAaxF,KAAM,eAMvD,E,sBCnEA,QADkB,SAAAtC,GAAK,OAAIX,EAAAA,EAAAA,KAAA,OAAAnB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAAK+B,MAAM,6BAA6BC,KAAK,OAAOC,QAAQ,aAAgBH,GAAK,IAAAV,UAAED,EAAAA,EAAAA,KAAA,QAAMa,KAAK,eAAeE,SAAS,UAAUC,EAAE,sUAAsUC,SAAS,cAAmB,E,mnBCK/f,GAAeuB,EAAAA,EAAAA,IAAc,oBAAqB,CAACC,GAAAA,EAAIC,GAAAA,ICShD,IAAMgG,EAAwB,SAAH/K,GAAqB,IAAhBuC,EAASvC,EAATuC,UAC7B4D,GAAWC,EAAAA,EAAAA,KAcjB,OACIkB,EAAAA,EAAAA,MAAC9C,EAAAA,EAAI,CAACG,eAAe,WAAWD,WAAW,SAAS8C,IAAK,EAAGjF,UAAWA,EAAUD,SAAA,EAC7ED,EAAAA,EAAAA,KAACsF,EAAAA,EAAO,CAACxC,QAASK,EAAK,mBAAmBlD,UACtCD,EAAAA,EAAAA,KAACiG,EAAAA,EAAM,CAACC,KAAK,OAAOC,QAfV,WAClBrC,GAAS6E,EAAAA,EAAAA,MACb,EAauD1I,UACvCD,EAAAA,EAAAA,KAACwF,EAAAA,EAAI,CAACzH,KAAM6K,EAAAA,EAAU3F,KAAM,UAGpCjD,EAAAA,EAAAA,KAACsF,EAAAA,EAAO,CAACxC,QAASK,EAAK,kBAAkBlD,UACrCD,EAAAA,EAAAA,KAACiG,EAAAA,EAAM,CAACC,KAAK,OAAOC,QAhBJ,WACxBrC,GAAS+E,EAAAA,EAAAA,MACb,EAc6D5I,UAC7CD,EAAAA,EAAAA,KAACwF,EAAAA,EAAI,CAACzH,KAAM+K,EAAY7F,KAAM,UAGtCjD,EAAAA,EAAAA,KAACsF,EAAAA,EAAO,CAACxC,QAASK,EAAK,qBAAqBlD,UACxCD,EAAAA,EAAAA,KAACiG,EAAAA,EAAM,CAACC,KAAK,OAAOC,QAjBd,WACdrC,GAASiF,EAAAA,EAAAA,MACb,EAemD9I,UACnCD,EAAAA,EAAAA,KAACwF,EAAAA,EAAI,CAACzH,KAAMiL,EAAAA,EAAW/F,KAAM,WAKjD,E,iRC3CA,GAAeT,EAAAA,EAAAA,IAAc,wBAAyB,CAACC,GAAAA,EAAIC,GAAAA,ICDpD,IAAMuG,EAAgB,WACzB,OACIhE,EAAAA,EAAAA,MAAC9C,EAAAA,EAAI,CAACE,WAAW,SAASC,eAAe,SAAS4C,UAAU,SAASgE,KAAM,EAAEjJ,SAAA,EACzED,EAAAA,EAAAA,KAACoF,EAAAA,EAAI,CAACC,QAAQ,WAAUpF,SAAEkD,EAAK,qBAC/BnD,EAAAA,EAAAA,KAACoF,EAAAA,EAAI,CAAAnF,SAAEkD,EAAK,0BAGxB,E,2CCJM5G,IAAQC,EAAAA,EAAAA,GAAG,0BAOJ2M,GAAwB,SAAHxL,GAA8B,IAAzBmB,EAAOnB,EAAPmB,QAASoB,EAASvC,EAATuC,UACtCkJ,EAA+B,aAAlBtK,EAAQuK,MAO3B,OACIpE,EAAAA,EAAAA,MAAC9C,EAAAA,EAAI,CAAC+C,UAAU,SAASC,IAAK,EAAGjF,UAAW3D,GAAM,KAAM2D,GAAYoJ,OANjD,WAAO,IAADC,EACY,QAAxBA,EAAGC,OAAOC,sBAAc,IAAAF,GAArBA,EAAuBG,UAE3C,EAG+FzJ,SAAA,EACvFD,EAAAA,EAAAA,KAACK,GAAAA,GAAQ,CAACzC,KAAMkB,EAAQmJ,OAAS,SAEjCjI,EAAAA,EAAAA,KAACmC,EAAAA,EAAI,CAACgD,IAAK,EAAGjF,UAAW3D,GAAM,UAAU0D,UACnCmJ,IACEpJ,EAAAA,EAAAA,KAAA8G,EAAAA,SAAA,CAAA7G,UACID,EAAAA,EAAAA,KAAC2J,GAAAA,EAAe,CAAC1G,KAAK,IAAIrF,KAAMkB,EAAQmJ,cAMhE,E,iQC9BA,IAAezF,EAAAA,EAAAA,IAAc,+BAAgC,CAACC,GAAAA,GAAIC,GAAAA,K,gBCC5DnG,IAAQC,EAAAA,EAAAA,GAAG,eAQJoN,GAA2C,SAAHjM,GAK9C,IAJHkH,EAAKlH,EAALkH,MACA5E,EAAQtC,EAARsC,SACA4J,EAAclM,EAAdkM,eACA3J,EAASvC,EAATuC,UAEAuG,GAA6BC,EAAAA,EAAAA,IAAU,GAAMC,GAAArH,EAAAA,EAAAA,GAAAmH,EAAA,GAAtCqD,EAAMnD,EAAA,GAAEE,EAAUF,EAAA,GAMzB,OACI1B,EAAAA,EAAAA,MAAC9C,EAAAA,EAAI,CAACjC,UAAW3D,GAAM,KAAM2D,GAAYgF,UAAU,SAASC,IAAK,EAAElF,SAAA,EAC/DgF,EAAAA,EAAAA,MAAC9C,EAAAA,EAAI,CAACE,WAAW,SAAS8C,IAAK,EAAGgB,QAASU,EAAY3G,UAAW3D,GAAM,UAAU0D,SAAA,EAC9ED,EAAAA,EAAAA,KAACoF,EAAAA,EAAI,CAACG,MAAM,YAAWtF,SAAE4E,KACzB7E,EAAAA,EAAAA,KAAC+J,GAAAA,EAAW,CAAC7E,UAAW4E,EAAS,MAAQ,YACzC9J,EAAAA,EAAAA,KAAA,OAAKmG,QATY,SAACkC,GAC1BA,EAAE2B,iBACN,EAO+C/J,UAC/BD,EAAAA,EAAAA,KAAC2J,GAAAA,EAAe,CAAC1G,KAAK,IAAIrF,KAAMiM,SAGvCC,GAAU7J,IAGvB,EC1BagK,GAA6B,SAAHtM,GAA4B,IAAvBsK,EAAKtK,EAALsK,MAAO/H,EAASvC,EAATuC,UAC/C,OACIF,EAAAA,EAAAA,KAAC4J,GAAU,CACP1J,UAAWA,EACX2E,MAAO1B,GAAK,wBACZ0G,eAAgBK,KAAKC,UAAUlC,GAAOhI,UAEtCgF,EAAAA,EAAAA,MAAC9C,EAAAA,EAAI,CAAC+C,UAAU,SAASC,IAAK,EAAElF,SAAA,CAC3BgI,EAAMnC,KAAI,SAAA7G,GAAA,IAAEmL,EAAGnL,EAAHmL,IAAKvF,EAAK5F,EAAL4F,MAAK,OACnBI,EAAAA,EAAAA,MAACoF,GAAAA,EAAI,CAAWC,KAAMF,EAAKG,OAAO,SAAQtK,SAAA,EACtCD,EAAAA,EAAAA,KAACwF,EAAAA,EAAI,CAACzH,KAAMyM,GAAAA,IAA8B,IAAE3F,IADrCuF,EAEJ,IAEO,IAAjBnC,EAAM1E,SAAgBvD,EAAAA,EAAAA,KAACoF,EAAAA,EAAI,CAACC,QAAQ,SAAQpF,SAAC,WAI9D,E,+PCxBA,IAAeuC,EAAAA,EAAAA,IAAc,+BAAgC,CAACC,GAAAA,GAAIC,GAAAA,KCM3D,IAAM+H,GAA6B,SAAH9M,GAA4B,IAAvBsK,EAAKtK,EAALsK,MAAO/H,EAASvC,EAATuC,UAC/C,OACIF,EAAAA,EAAAA,KAAC4J,GAAU,CACP1J,UAAWA,EACX2E,MAAO1B,GAAK,sBACZ0G,eAAgBK,KAAKC,UAAUlC,GAAOhI,UAEtCD,EAAAA,EAAAA,KAACoF,EAAAA,EAAI,CAACC,QAAQ,SAAQpF,SAAEgI,KAGpC,E,qHCjBA,IAAezF,EAAAA,EAAAA,IAAc,gCAAiC,CAACC,GAAAA,GAAIC,GAAAA,KCQ5D,IAAMgI,GAA8B,SAAH/M,GAAkC,IAA7BiH,EAAIjH,EAAJiH,KAAMqD,EAAKtK,EAALsK,MAAO/H,EAASvC,EAATuC,UAChDyK,EAAaT,KAAKC,UAAUlC,EAAO,KAAM,GAE/C,OACIjI,EAAAA,EAAAA,KAAC4J,GAAU,CACP1J,UAAWA,EACX2E,MAAK,GAAAmC,OAAK7D,GAAK,0BAAyB,MAAA6D,OAAKpC,GAC7CiF,eAAgBc,EAAW1K,UAE3BD,EAAAA,EAAAA,KAACoF,EAAAA,EAAI,CAACC,QAAQ,SAAQpF,SAAE0K,KAGpC,EChBaC,GAA4B,SAAC9L,EAAsBoB,GAC5D,OAAQpB,EAAQ+L,MACZ,IAAK,QACD,OAAO7K,EAAAA,EAAAA,KAAC8K,EAAAA,EAAY,CAAC5K,UAAWA,EAAWlD,MAAO8B,EAAQ9B,QAE9D,IAAK,SACD,OAAOgD,EAAAA,EAAAA,KAACmJ,GAAU,CAACjJ,UAAWA,EAAWpB,QAASA,IAEtD,IAAK,oBACD,OAAOkB,EAAAA,EAAAA,KAACiK,GAAe,CAAC/J,UAAWA,EAAW+H,MAAOnJ,EAAQmJ,QAEjE,IAAK,0BACD,OAAOjI,EAAAA,EAAAA,KAACyK,GAAe,CAACvK,UAAWA,EAAW+H,MAAOnJ,EAAQmJ,QAEjE,IAAK,qBACD,OACIjI,EAAAA,EAAAA,KAAC0K,GAAgB,CAACxK,UAAWA,EAAW0E,KAAM9F,EAAQ8F,KAAMqD,MAAOnJ,EAAQmJ,QAGnF,QACI,OAAOjI,EAAAA,EAAAA,KAAA,OAAKE,UAAWA,EAAUD,SAAEnB,EAAQmJ,QAGvD,ECvBM1L,IAAQC,EAAAA,EAAAA,GAAG,sBAOJuO,GAAqB,SAAHpN,GAA8B,IAAzBmB,EAAOnB,EAAPmB,QAASoB,EAASvC,EAATuC,UACnC8K,EAA8B,aAAjBlM,EAAQ+L,KACrBI,EAAYC,EAAAA,GAAUC,0BAA0BrM,EAASvC,GAAM,SAErE,OACIyD,EAAAA,EAAAA,KAACmC,EAAAA,EAAI,CACDG,eAAgB0I,EAAa,WAAa,aAC1C9K,UAAW3D,GAAM,CAACoL,SAAUqD,GAAa9K,GACzCiF,IAAK,EAAElF,SAENgL,GAAaL,GAA0B9L,EAASvC,GAAM,UAGnE,E,mKCvBA,IAAeiG,EAAAA,EAAAA,IAAc,sBAAuB,CAACC,GAAAA,GAAIC,GAAAA,KCIlD,IAAM0I,GAAe,WACxB,IAAMtH,GAAWC,EAAAA,EAAAA,KACjBsH,GAAkCpH,EAAAA,EAAAA,GAAYqH,EAAAA,IAAvCC,EAAKF,EAALE,MAAOC,EAAOH,EAAPG,QAASrK,EAAOkK,EAAPlK,QAMvB,OACI8D,EAAAA,EAAAA,MAAA6B,EAAAA,SAAA,CAAA7G,SAAA,CACKuL,IACGxL,EAAAA,EAAAA,KAACmC,EAAAA,EAAI,CAACG,eAAe,SAASD,WAAW,SAAS6C,UAAU,SAAQjF,SAC/DkB,GACGnB,EAAAA,EAAAA,KAACuC,GAAAA,EAAM,CAACU,KAAK,OAEbgC,EAAAA,EAAAA,MAACgB,EAAAA,EAAM,CAACC,KAAK,WAAWC,QAXrB,WACnBrC,GAAS2H,EAAAA,EAAAA,MACb,EASqExO,SAAUkE,EAAQlB,SAAA,EAC/DD,EAAAA,EAAAA,KAACwF,EAAAA,EAAI,CAACzH,KAAM2N,GAAAA,EAAezI,KAAM,KAChCE,GAAK,0BAKrBoI,EAAMzF,KAAI,SAAChH,GACR,IAAMwJ,EAAM,OAAQxJ,EAAUA,EAAQ6M,GAAK7M,EAAQ9B,MAAM8B,QACzD,OAAOkB,EAAAA,EAAAA,KAAC+K,GAAO,CAAWjM,QAASA,GAAdwJ,EACzB,MAGZ,EAEA8C,GAASQ,YAAc,WChCvB,IAAMC,IAAItP,EAAAA,EAAAA,GAAM,kBAMVuP,GAAwC,SAAHnO,GAAqB,IAAhBuC,EAASvC,EAATuC,UAC5C,OACI+E,EAAAA,EAAAA,MAAA,OAAK/E,UAAW2L,GAAE,eAAgB3L,GAAWD,SAAA,EACzCD,EAAAA,EAAAA,KAAA,QAAME,UAAW2L,GAAE,UACnB7L,EAAAA,EAAAA,KAAA,QAAME,UAAW2L,GAAE,UACnB7L,EAAAA,EAAAA,KAAA,QAAME,UAAW2L,GAAE,WAG/B,EAEaE,GAA2B,SAAH9M,GAAqB,IAAhBiB,EAASjB,EAATiB,UAChC8L,GAAS/H,EAAAA,EAAAA,GAAYgI,EAAAA,IAG3B,OAFkBhI,EAAAA,EAAAA,GAAYyD,EAAAA,MAEZsE,GAAehM,EAAAA,EAAAA,KAAC8L,GAAW,CAAC5L,UAAWA,IAEpD8L,GAGDhM,EAAAA,EAAAA,KAAC+K,GAAO,CACJ7K,UAAWA,EACXpB,QAAS,CACL6M,GAAI,iBACJd,KAAM,SACNxB,MAAO,WACPpB,MAAO+D,KATC,IAaxB,E,mQCrCA,IAAexJ,EAAAA,EAAAA,IAAc,qBAAsB,CAACC,GAAAA,GAAIC,GAAAA,K,gBCClDmJ,IAAItP,EAAAA,EAAAA,GAAM,yBASH2P,GAA6B,SAAHvO,GAAwC,IAAnCgO,EAAEhO,EAAFgO,GAAIQ,EAAKxO,EAALwO,MAAOhG,EAAOxI,EAAPwI,QAASiG,EAAQzO,EAARyO,SAC5D,OACInH,EAAAA,EAAAA,MAAC9C,EAAAA,EAAI,CACDjC,UAAW2L,KACX3C,KAAM,EACN7G,WAAW,SACXC,eAAe,gBACf6D,QAAS,WAAF,OAAQA,EAAQwF,EAAG,EAAC1L,SAAA,EAE3BD,EAAAA,EAAAA,KAACoF,EAAAA,EAAI,CAACY,UAAQ,EAAA/F,SAAEkM,GAASR,KACzB3L,EAAAA,EAAAA,KAACiG,EAAAA,EAAM,CACH/F,UAAW2L,GAAE,iBACb1F,QAAS,SAACkC,GACNA,EAAE2B,kBACFoC,EAAST,EACb,EACAzF,KAAK,OAAMjG,UAEXD,EAAAA,EAAAA,KAACwF,EAAAA,EAAI,CAACzH,KAAMuI,EAAAA,EAAcrD,KAAM,SAIhD,ECfM4I,IAAItP,EAAAA,EAAAA,GAAM,oBAEH8P,GAAkB,WAC3B,IAAMvI,GAAWC,EAAAA,EAAAA,KACXuI,GAAuBrI,EAAAA,EAAAA,GAAYsI,EAAAA,IACnCf,GAAUvH,EAAAA,EAAAA,GAAYuI,EAAAA,IACtBrL,GAAU8C,EAAAA,EAAAA,GAAYwI,EAAAA,IAEtBC,EAA0B,SAACC,GAC7B7I,GAAS8I,EAAAA,EAAAA,IAAiBD,GAC9B,EAEME,EAA2B,SAACF,GAC9B7I,GAASgJ,EAAAA,EAAAA,IAAmBH,GAChC,EAEMI,GAAiBC,EAAAA,EAAAA,cAAY,WAC/BlJ,GAASmJ,EAAAA,EAAAA,MACb,GAAG,CAACnJ,IAEJ,OAAKwI,EAAqB/I,QAStB0B,EAAAA,EAAAA,MAAA,OAAK/E,UAAW2L,KAAI5L,SAAA,CACfqM,EAAqBxG,KAAI,SAACoH,GAAK,OAC5BjI,EAAAA,EAAAA,MAAA,OAAsB/E,UAAW2L,GAAE,SAAS5L,SAAA,EACxCD,EAAAA,EAAAA,KAAA,OAAKE,UAAW2L,GAAE,gBAAgB5L,UAC9BD,EAAAA,EAAAA,KAACoF,EAAAA,EAAI,CAACG,MAAM,YAAWtF,SAClBkN,GAAAA,EAAOC,OAAiB,SAAEF,EAAMG,KAAM,CAACD,OAAQ,aAGxDpN,EAAAA,EAAAA,KAACsN,GAAAA,EAAI,CACDpN,UAAW2L,GAAE,QACb0B,YAAY,EACZhC,MAAO2B,EAAM3B,MACbiC,WAAY,SAACC,EAAMC,GAAO,IAADC,EACrB,OACI3N,EAAAA,EAAAA,KAACkM,GAAe,CACZP,GAAI8B,EAAK9B,GACTQ,MAAoB,QAAfwB,EAAEF,EAAKG,gBAAQ,IAAAD,OAAA,EAAbA,EAAexB,MACtBhG,QAASuG,EACTN,SAAUS,GAGtB,EACAgB,WAAY,GACZC,aAAa,MArBXZ,EAAMG,KAuBV,IAET7B,IACGxL,EAAAA,EAAAA,KAACkB,GAAAA,EAAoB,CACjBhB,UAAW2L,GAAE,cACb1K,QAASA,EACTC,WAAY2L,QAtCpB/M,EAAAA,EAAAA,KAACmC,EAAAA,EAAI,CAACG,eAAe,SAASD,WAAW,SAAS6G,KAAM,EAAEjJ,UACtDD,EAAAA,EAAAA,KAAC+N,GAAAA,EAAS,CAACC,QAAS7K,GAAK,4BAA6B8K,UAAQ,KA0C9E,E,wBCpEM1R,IAAQC,EAAAA,EAAAA,GAAG,mBAQJ0R,GAAsB,SAAHvQ,GAAiE,IAADwQ,EAA3DC,EAAgBzQ,EAAhByQ,iBAAkBC,EAAc1Q,EAAd0Q,eAAgBC,EAAmB3Q,EAAnB2Q,oBAC7DC,GAAcjN,EAAAA,EAAAA,QAAuB,MACrCkN,GAAYvK,EAAAA,EAAAA,GAAYwK,EAAAA,IACxBhH,GAAYxD,EAAAA,EAAAA,GAAYyD,EAAAA,IACxBgH,GAAgBzK,EAAAA,EAAAA,GAAY0K,EAAAA,IAC5BC,GAAmB3K,EAAAA,EAAAA,GAAY4K,EAAAA,IAC/B7R,GAAQiH,EAAAA,EAAAA,GAAY6K,EAAAA,IAEpBC,GAAwB/B,EAAAA,EAAAA,cAAY,WACtCsB,IACI7G,IAAc2G,GACdC,GAER,GAAG,CAACC,EAAqBF,EAAkB3G,EAAW4G,IAOtD,OALAW,EAAAA,GAAAA,GAAkB,CACdC,QAASP,GAAoC,QAAvBP,EAAII,EAAYvM,eAAO,IAAAmM,EAAAA,OAAiBlH,EAC9DiI,SAAUH,IAGV/R,GAEIgD,EAAAA,EAAAA,KAACmC,EAAAA,EAAI,CAACE,WAAW,SAASC,eAAe,SAAS4G,KAAM,EAAEjJ,UACtDD,EAAAA,EAAAA,KAAC8K,GAAAA,EAAY,CAAC9N,MAAOA,MAK7BwR,GAEIxO,EAAAA,EAAAA,KAACmC,EAAAA,EAAI,CAACE,WAAW,SAASC,eAAe,SAAS4G,KAAM,EAAEjJ,UACtDD,EAAAA,EAAAA,KAACuC,GAAAA,EAAM,MAKfmM,GAEIzJ,EAAAA,EAAAA,MAAA,OAAK7C,IAAKmM,EAAarO,UAAW3D,GAAM,YAAY0D,SAAA,EAChDD,EAAAA,EAAAA,KAACoL,GAAQ,KACTpL,EAAAA,EAAAA,KAAC+L,GAAa,CAAC7L,UAAW3D,GAAM,uBAKxCqS,GACO5O,EAAAA,EAAAA,KAACqM,GAAW,KAGhBrM,EAAAA,EAAAA,KAACiJ,EAAS,GACrB,ECnEM1M,IAAQC,EAAAA,EAAAA,GAAG,cAwDjB,SAtDiB,WACb,IAAA2S,GAAoDC,EAAAA,EAAAA,WAAS,GAAKC,GAAA/P,EAAAA,EAAAA,GAAA6P,EAAA,GAA3DG,EAAkBD,EAAA,GAAEE,EAAqBF,EAAA,GAChDG,GAAgDJ,EAAAA,EAAAA,WAAS,GAAMK,GAAAnQ,EAAAA,EAAAA,GAAAkQ,EAAA,GAAxDpB,EAAgBqB,EAAA,GAAEC,EAAmBD,EAAA,GACtCE,GAAerO,EAAAA,EAAAA,QAAuB,MAEtCgN,GAAsBtB,EAAAA,EAAAA,cAAY,WACpC,GAAK2C,EAAa3N,QAAlB,CAEA,IAAA4N,EAAgDD,EAAa3N,QAAtD6N,EAASD,EAATC,UACDC,EADwBF,EAAZG,cACiBF,EADSD,EAAZI,cAbX,GAgBrBT,EAAsBO,GACtBJ,GAAqBI,EANY,CAOrC,GAAG,IAEGzB,GAAiBrB,EAAAA,EAAAA,cAAY,WAAwC,IAAvCiD,EAAwB3S,UAAAiG,OAAA,QAAA0D,IAAA3J,UAAA,GAAAA,UAAA,GAAG,OACtDqS,EAAa3N,SAElB2N,EAAa3N,QAAQkO,SAAS,CAC1BC,IAAKR,EAAa3N,QAAQ+N,aAC1BE,SAAAA,GAER,GAAG,IAEGG,GAAmBpD,EAAAA,EAAAA,cAAY,WACjCsB,GACJ,GAAG,CAACA,IAYJ,OAVA/M,EAAAA,EAAAA,YAAU,WACN,IAAM8O,EAAYV,EAAa3N,QAC/B,GAAKqO,EAGL,OADAA,EAAUC,iBAAiB,SAAUF,GAC9B,WACHC,EAAUE,oBAAoB,SAAUH,EAC5C,CACJ,GAAG,CAACA,KAGAnL,EAAAA,EAAAA,MAAA,OAAK7C,IAAKuN,EAAczP,UAAW3D,KAAQ0D,SAAA,EACvCD,EAAAA,EAAAA,KAAC0I,EAAU,CAACxI,UAAW3D,GAAM,aAC7ByD,EAAAA,EAAAA,KAACkO,GAAQ,CACLG,eAAgBA,EAChBC,oBAAqBA,EACrBF,iBAAkBA,KAEtBpO,EAAAA,EAAAA,KAACsH,EAAS,CACNC,kBAAmB+H,EACnB9H,cAAe,WAAF,OAAQ6G,EAAe,SAAS,MAI7D,C,6DC/DA,QADkC,SAAA1N,GAAK,OAAIX,EAAAA,EAAAA,KAAA,OAAAnB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAAK+B,MAAM,6BAA6BC,KAAK,OAAOC,QAAQ,aAAgBH,GAAK,IAAAV,UAAED,EAAAA,EAAAA,KAAA,QAAMa,KAAK,eAAeE,SAAS,UAAUC,EAAE,sUAAsUC,SAAS,cAAmB,C,2BCOlgBuP,EACAC,EAGAC,EACAC,EAmBAC,EC/BAC,EAKAC,EAKAC,EAeAC,ECFPC,E,iKCvBN,G,EAAA,qDA0BA,SAASC,EAAuBC,GAC9B,IAAIrP,EAAOsP,EAAQD,GAEnB,OAeF,SAAsBA,GACpB,MAAyB,uBAAlBA,EAAKE,UAA+D,eAA1BF,EAAKG,YAAY1M,IACpE,CAjBM2M,CAAazP,GACRoP,EAAuBpP,EAAK0P,MAG9B1P,CACT,CAEA,SAASsP,EAAQD,GACf,OAAuB,MAAnBA,EAAKM,WACAL,EAAQD,EAAKM,YAGfN,CACT,CAMsB,iBAAXO,GAAuBA,EAAOC,UACvCD,EAAOC,QA7BT,SAAqBC,GAGnB,MAF8B,iBAARA,GAAoBC,QAAQD,EAAIE,UAEpCZ,EAAuBa,MAAQX,EAAQW,KAC3D,EA0BA,G,4EH3CavB,EAAsB,gBACtBC,EAAmB,SAGnBC,EAAiB,sBACjBC,EAAe,oBAmBfC,EAA+BoB,OAAOC,IAAI,gBC/B1CpB,EAAkBqB,IAC3B,IAAMC,EAAOD,EAAME,eACnB,OAAO3N,MAAM4N,QAAQF,IAASA,EAAK5O,OAAS,EAAI4O,EAAK,GAAKD,EAAM3H,MAAM,EAG7DuG,EAAYoB,IACrB,IAAM3H,EAASsG,EAAeqB,GAC9B,OAAQ3H,IAAYA,EAAuB+H,OAAO,EAGzCvB,EAA8B9B,GACnC5L,KAAKkP,IAAItD,EAAQc,aAAed,EAAQe,cAAgB,EACjDf,EAGJA,EAAQuD,cAAgBzB,EAA2B9B,EAAQuD,oBAAiB,EAU1ExB,EAA8B,CACvC/B,EACAwD,KAEA,IAAMC,EAAgBzD,EAAQ0D,wBACxBC,EAAyBH,EAAiBE,wBAChD,MAAO,CACHxC,IAAKuC,EAAcvC,IAAMyC,EAAuBzC,IAChD0C,KAAMH,EAAcG,KAAOD,EAAuBC,KAClDhD,UAAW4C,EAAiB5C,UAC5BiD,WAAYL,EAAiBK,WAChC,ECbC7B,EAAW,CACb8B,KAAM,YACNC,SAAU,gBACVC,IAAK,WACLC,UAAW,IAAI1C,IACf2C,cAAe,sBExBG,oBAAX3J,QAA8C,oBAAb4J,WAA6B5J,OAAOoH,KAC5EpH,OAAOoH,GAAiB,IFkCrB,MAKH,WAAAU,CAAY8B,GAFZ,KAAQC,qBAAqC,IAAIC,IAG7CvB,KAAKwB,UAAYH,EACjBrB,KAAKwB,UAAUjD,iBAAiB,SAAU4B,IACtC,IAAM3H,EAASsG,EAAeqB,GACxBsB,EAAczB,KAAK0B,gBAAgBlJ,GAMzC,GAJIuG,EAASoB,KAIPH,KAAK2B,kBAAkBnJ,KAAWiJ,EACpC,OAGJ,IAAMG,EAAM5B,KAAK6B,0BAA0BrJ,GAEvCoJ,GACA5B,KAAK8B,WAAWF,EAAKpJ,EAAO,IAGpCwH,KAAKwB,UAAUjD,iBAAiB,WAAY4B,IACxC,IAAIhN,EAAuC,KAC3C,OAAQgN,EAAM5J,KACV,IAAK,YACDpD,EAAY,OACZ,MAEJ,IAAK,aACDA,EAAY,QAIpB,IAAKA,EACD,OAGJ,IAAMqF,EAASsG,EAAeqB,GAE9B,GAAIpB,EAASoB,KAAWH,KAAK2B,kBAAkBnJ,GAC3C,OAGJ,IAAOuJ,KAAAA,EAAMC,MAAAA,GAAShC,KAAKiC,QAAQzJ,GAC7B0J,EAAalC,KAAK6B,0BAA0BrJ,GAC5C2J,EAAkBJ,EAAKK,WACzB,EAAE7L,IAAAA,MAAS,MAAA2L,OAAA,EAAAA,EAAY3L,MAAOA,IAAQ2L,EAAW3L,MAErD,IAAK2L,GAAcH,EAAKvQ,QAAU,IAA0B,IAArB2Q,EACnC,OAGJ,IAAME,GACDF,GAAiC,SAAdhP,GAAwB,EAAI,GAAK4O,EAAKvQ,QAAUuQ,EAAKvQ,OAE7EwO,KAAKsC,UAAUP,EAAKM,IACpBL,EAAMK,GAAUE,OAAO,GAE/B,CAEA,WAAAC,CAAYC,GACR,OAAAzC,KAAKsB,qBAAqB1O,IAAI6P,GAEvB,KACHzC,KAAKsB,qBAAqBoB,OAAOD,EAAQ,CAEjD,CAEA,aAAAE,CAAc/I,EAAYgJ,GACtB,IAAMpK,EAASwH,KAAKwB,UAAUqB,cAC1B,GAAG3D,EAASgC,yBAAuBtH,OAGvC,IAAKpB,IAAWwH,KAAK2B,kBAAkBnJ,GACnC,OAGJ,IAAMoJ,EAAM5B,KAAK6B,0BAA0BrJ,GAEvCoJ,GACA5B,KAAK8B,WAAWF,EAAKpJ,GAGrB,MAAAoK,GAAAA,EAASE,iBACTtK,EAAOuK,gBAEf,CAEA,SAAAT,CAAUV,GACN5B,KAAK8B,WAAWF,EACpB,CAEQ,UAAAE,CAAWF,EAAUoB,GACzB,IAAO7H,MAAAA,EAAO5E,IAAAA,EAAK0M,MAAAA,GAASrB,EAE5B,IAAKzG,EACD,OAGJ,IAAMuF,EAAmBsC,GAAahE,EAA2BgE,GAC3DE,EACFxC,GAAoBzB,EAA4B+D,EAAWtC,GAE3CV,KAAKmD,WAAW,CAAChI,MAAAA,EAAO5E,IAAAA,EAAK0M,MAAAA,GAAQA,GAEvC,IACdjD,KAAKoD,mBAAmB,CAACjI,MAAAA,EAAO5E,IAAAA,EAAK0M,MAAAA,GAAQ,MAAAD,OAAA,EAAAA,EAAWK,QAAQC,YAE5DJ,GACAlD,KAAKuD,YAAYP,EAAWtC,EAAkBwC,GAG1D,CAEQ,UAAAC,CAAWvB,EAAoBqB,GACnC,OAAQA,GACJ,IAAK,WACD,OAAOjD,KAAKwD,mBAAmB5B,GAEnC,IAAK,aACD,OAAO5B,KAAKyD,qBAAqB7B,GAIzC,OAAO,CACX,CAEQ,kBAAA4B,CAAmB5B,GACvB,IAAOzG,MAAAA,EAAO5E,IAAAA,GAAOqL,GAEdG,GAAQ/B,KAAKwB,UAAUkC,iBAC1B,GAAGxE,EAAS8B,QAAQrC,MAAmBxD,OAAW+D,EAASgC,OAAOtC,MAAiBrI,OAGnFoN,EAAU,EAERC,EADO7B,EAAKrC,WACIxR,SAEtB,QAAS+C,EAAI,EAAGA,EAAI2S,EAASpS,OAAQP,GAAK,EAAG,CACzC,IAAO6B,EAAO/B,GAAW,CAAC6S,EAASlI,KAAKzK,GAAI2S,EAASlI,KAAKzK,EAAI,IAExD4S,EAAQ/Q,EAAM5E,SAASwN,KAAK,GAE9BmI,EAAMC,aAAa,aACnBhR,EAAMiR,UAAUC,OAAO,UACvB,MAAAjT,GAAAA,EAASgT,UAAUC,OAAO,UAC1BH,EAAMI,gBAAgB,YAGtBnR,IAAUiP,IACVjP,EAAMiR,UAAUnR,IAAI,UACpB,MAAA7B,GAAAA,EAASgT,UAAUnR,IAAI,UACvBiR,EAAMK,aAAa,UAAW,SAGlCP,GACJ,CAEA,OAAOA,CACX,CAEQ,oBAAAF,CAAqB7B,GACzB,IAAOzG,MAAAA,EAAO5E,IAAAA,GAAOqL,EAEfG,EAAO/B,KAAKwB,UAAUkC,iBACxB,GAAGxE,EAAS8B,QAAQrC,MAAmBxD,OAAW+D,EAASgC,OAAOtC,MAAiBrI,OAGnFoN,EAAU,EAEd,OAAA5B,EAAKnS,SAASsN,IACV,IAAMiH,EAAWjH,EACjB,IAAK8C,KAAK2B,kBAAkBwC,IAAmD,SAAtCA,EAASd,QAAQe,iBACtD,OAGJT,IAEA,IAAM/B,EAAM1E,EACNmH,EAAUzC,EAAIlC,WACd4E,EAAgB,MAAAD,OAAA,EAAAA,EAAS3E,WACzB6E,EAAU7R,MAAMC,MAAK,MAAA0R,OAAA,EAAAA,EAASX,iBAAiBxE,EAASgC,OAAQ,IAChEsD,EAAY9R,MAAMC,MAAK,MAAA2R,OAAA,EAAAA,EAAepW,WAAY,IAAIuW,QAAQrF,GAChEA,EAAK2E,UAAUW,SAASjG,KAEtBkG,EAAcJ,EAAQK,QAAQhD,GAEpC2C,EAAQ3U,SAAQ,CAACgS,EAAK3Q,KAClB,IAAM4T,EAAQL,EAAUvT,GAClB6T,EAAc7T,IAAM0T,EACT/C,EAERyB,QAAQe,iBAAmBU,EAAc,OAAS,QAE3DlD,EAAImC,UAAUgB,OAAOrG,EAAkBoG,GACvClD,EAAIsC,aAAa,gBAAiBY,EAAYnN,YAC9CiK,EAAIsC,aAAa,WAAYY,EAAc,IAAM,MACjDD,EAAMd,UAAUgB,OAAOrG,EAAkBoG,EAAY,GACvD,IAGCnB,CACX,CAEQ,WAAAJ,CACJ/K,EACAkI,EACAwC,GAEA,IAAM8B,EAAe/F,EAA4BzG,EAAQkI,GACnDuE,EAAWD,EAAa5G,IAAM8E,EAAqB9E,IACnD8G,EAAYF,EAAalE,KAAOoC,EAAqBpC,KACrDqE,EAAiBH,EAAalH,UAAYoF,EAAqBpF,UAC/DsH,EAAkBJ,EAAajE,WAAamC,EAAqBnC,WACvEL,EAAiBvC,SACbuC,EAAiBK,WAAamE,EAAYE,EAC1C1E,EAAiB5C,UAAYmH,EAAWE,EAEhD,CAEQ,kBAAA/B,CAAmBxB,EAAoB0B,GAC3C,IAAOnI,MAAAA,EAAO5E,IAAAA,EAAK0M,MAAAA,GAASrB,EAEtByD,EAAgBlK,EAAMmK,WFxPK,qBEwPmC,CAAC/O,IAAAA,EAAK0M,MAAAA,GAASrB,EAEnF5B,KAAKsB,qBAAqB1R,SAAS6S,IAC/BA,EAAQ,CAACb,IAAKyD,EAAUE,aAAcjC,GAAY,GAE1D,CAEQ,iBAAA3B,CAAkBzE,GACtB,IAAMmH,EACFnH,EAAQqD,QAAQrB,EAASgC,MAAQhE,EAAQmG,QAAQC,WAC3CpG,EAAQsI,QAAQtG,EAAS+B,UACzB,KAEV,OAAO,MAAAoD,OAAA,EAAAA,EAASmB,QAAQtG,EAAS8B,KACrC,CAEQ,eAAAU,CAAgBlJ,GACpB,IAAMiN,EAASjN,EAAOiI,cAEtB,OAAOjI,EAAO6K,QAAQqC,uBAA+B,MAAAD,IAAAA,EAAQpC,QAAQqC,oBACzE,CAEQ,yBAAA7D,CAA0BrJ,GAhStC,IAAAmN,EAAAC,EAiSQ,GAAI5F,KAAK0B,gBAAgBlJ,GAAS,CAC9B,IAAMoJ,EAAMpJ,EAAO6K,QAAQqC,oBAAsBlN,EAASA,EAAOiI,cAE3DlK,EAAMqL,EAAIyB,QAAQwC,YAClB1K,EAAS,OAAAwK,EAAA/D,EAAI4D,QAAQtG,EAAS8B,YAArB,EAAA2E,EAA4CtC,QAAQyC,cACnE,OAAOvP,GAAO4E,EAAQ,CAACA,MAAAA,EAAO5E,IAAAA,EAAK0M,MAAO,YAAc,IAC5D,CAEA,IAAM1M,EAAMiC,EAAO6K,QAAQwC,YACrB1K,EAAS,OAAAyK,EAAApN,EAAOgN,QAAQtG,EAAS8B,YAAxB,EAAA4E,EAA+CvC,QAAQyC,cACtE,OAAOvP,GAAO4E,EAAQ,CAACA,MAAAA,EAAO5E,IAAAA,EAAK0M,MAAO,cAAgB,IAC9D,CAEQ,OAAAhB,CAAQzJ,GA9SpB,IAAAmN,EAAAC,EA+SQ,IAAMzK,EAAS,OAAAwK,EAAAnN,EAAOgN,QAAQtG,EAAS8B,YAAxB,EAAA2E,EAA+CtC,QAAQyC,cAChE9D,EACF,OAAA4D,EAAApN,EAAOgN,QAAQtG,EAAS+B,gBAAxB,EAAA2E,EACDlC,iBAA8BxE,EAASgC,KAEpCa,EAAc,GACpB,OAAAC,EAAMpS,SAASmW,IACX,IAAMxP,EAAM,MAAAwP,OAAA,EAAAA,EAAO1C,QAAQwC,YACtBtP,GAKLwL,EAAK/O,KAAK,CACNmI,MAAAA,EACA5E,IAAAA,EACA0M,MAAO,cACT,IAGC,CAAClB,KAAAA,EAAMC,MAAAA,EAClB,GE/T2CX,WCL/C,M,6QAAwB,MAEA,oBAAbA,UAEP,SAAW/K,GACP,MAAMiK,EACFjK,EAAEiK,SACFjK,EAAE0P,iBACF1P,EAAE2P,uBACF3P,EAAE4P,oBACF5P,EAAE6P,mBACF7P,EAAE8P,iBAGF9P,EAAEiK,QAAUjK,EAAE0P,gBADdzF,GAGgC,SAAiB8F,GAC7C,MACM9F,GADWjK,EAAEgQ,YAAchQ,EAAEgQ,cAAgB,EAAAA,QAAYC,KAAKjQ,IAC3CoN,iBAAiB2C,GACpCG,EAAKxG,KACX,OAAOtN,MAAM+T,UAAUC,KAAKH,KAAKhG,GAAUjK,GAChCA,IAAMkQ,GAErB,CAEP,CArBD,CAqBGG,QAAQF,WCzBR,IAAM3H,EAAkBqB,IAC3B,MAAMC,EAAOD,EAAME,eACnB,OAAO3N,MAAM4N,QAAQF,IAASA,EAAK5O,OAAS,EAAI4O,EAAK,GAAKD,EAAM3H,MAAM,EAG7DuG,EAAYoB,IACrB,MAAM3H,EAASsG,EAAeqB,GAC9B,OAAQ3H,IAAYA,EAAuB+H,OAAO,ECkC9B,oBAAbc,UACPA,SAAS9C,iBAAiB,SAAU4B,IAChC,MAAM3H,EAASsG,EAAeqB,GAE9B,GAAIpB,EAASoB,KAAW3H,EAAO+H,QA3Cf,yBA4CZ,OAGJ,MAAMkF,EAASjN,EAAOkH,WAEtB,IAAK+F,EACD,OAGJ,MAAMmB,EAAOnB,EAAO5C,cAA2B,YAC1C+D,GApDb,SAAyB/a,GACrB,IAAKA,EACD,OAAOgb,QAAQC,UAGnB,GAAIC,UAAUC,YAAoBD,UAAUC,UAAUC,UAA3B,GACvB,OAAOF,UAAUC,UAAUC,UAAUpb,GAEzC,MAAMqb,EAAW7F,SAAS8F,cAAc,YAUxC,OATAD,EAAShD,aAAa,QAAS,mCAC/BgD,EAASE,YAAcvb,EACvBwV,SAASgG,KAAKC,OAAOJ,GAErBA,EAASK,SACTlG,SAASmG,YAAY,QAErBnG,SAASgG,KAAKI,YAAYP,GAEnBL,QAAQC,SACnB,CAqCQY,CAAgBd,EAAKe,WAAWC,MAAK,MAnC7C,SAAuBC,GACnB,IAAKA,EACD,OAGJ,MAAMjO,EAAKiO,EAAUC,aAAa,kBAE5BC,EAAOF,EAAUvB,cAAc0B,eAAe,qBAAqBpO,KAEpEmO,GAILA,EAAKE,cACT,CAsBYC,CAAczC,EAAO5C,cAAc,yBAAyB,GAC9D,IC5DV,IAAM3D,EAEK,sBAkBX,SAASiJ,EAAW3P,GAtBpB,MAuBI,OAAMA,aAAkB4P,cAIjB,eAAA5P,OAAA,EAAAA,EAAQ+H,cAAR,SAAA/H,EAAkB0G,GAC7B,CAcwB,oBAAbmC,UACPA,SAAS9C,iBAAiB,SAAU4B,IAChC,GAAIpB,EAASoB,GACT,OAGJ,MAAMrN,EAlBd,SAAyBqN,GA9BzB,MA+BI,MAAM3H,EAASsG,EAAeqB,GAE9B,GAAIgI,EAAW3P,GACX,OAAOA,EAGX,MAAM4H,EAAO,SAAAD,EAAME,mBAAN,SAAAF,GAEb,OAAO,MAAAC,OAAA,EAAAA,EAAMiI,KAAKF,EACtB,CAQsBG,CAAgBnI,GAEzBrN,GAtCb,SAAmBoK,GACf,MAAMqL,EAAUrL,EAAQwC,WAElB6I,aAAmBH,aAIzBG,EAAQxE,UAAUgB,OAVZ,OAWV,CAkCQyD,CAAU1V,EAAM,ICtDjB,IAAMoM,EAAW,CACpBuJ,MAAO,uBACPC,QAAS,sBAEAC,EAAY,OACZC,EAAsB1J,EAASwJ,QAAQG,QAAQ,MAAO,IAAM,IAAMF,EAC3EG,GAAmB,EAoBhB,SAASC,EACZC,EACAC,GAEA,MACIC,EAAGC,EACHC,EAAGC,EACHC,MAAOC,EACPzI,KAAM0I,EACNC,MAAOC,EACPC,OAAQC,GACRX,EAAYrI,wBAEViJ,EAAaC,EAAkBb,GAErC,IAAKY,EACD,OAGJ,MAAOP,MAAOS,EAAiBjJ,KAAMkJ,GAAkBH,EAAWjJ,wBAElE,IAAKmJ,EAAkBP,GAAYQ,EAAiBT,KAAeT,EAE/D,YADAmB,EAAgBjB,GAIhBF,GAAoBe,IACpBA,EAAWtL,iBAAiB,SAAU2L,GACtCpB,GAAmB,GAGvB,MAAMqB,EAAYC,OAAOpB,EAAkBlB,aAAa,cAClDuC,EAAYD,OAAOpB,EAAkBlB,aAAa,cAExD,GAAIqC,IAAchB,GAASkB,IAAchB,EACrC,OAGJL,EAAkB9E,aAAa,YAAaoG,OAAOnB,IACnDH,EAAkB9E,aAAa,YAAaoG,OAAOjB,IAEnD,MAAMkB,EAAYX,EAAa,EACzBY,EAAmBxB,EAAkBvI,cAE3C,IAAK+J,EACD,OAGJ,MAAOf,MAAOgB,GAAmBzB,EAAkBpI,yBAC5CE,KAAM4J,GAAwBF,EAAiB5J,wBAGhD+J,EAA2BP,OAAOQ,EAAU3B,GAAanI,MAGzD+J,EAA8BF,EAA2BF,EAAkB,EAI3EK,GAN4BL,EAAkBE,EAGatJ,SAASgG,KAAK0D,aAEP,QAAjB1J,SAAS2J,OAEzCH,EAA8BJ,EAAkBf,EAAY,EAC7EuB,EAAkBL,EAAUJ,GAAkBpM,IAAMoM,EAAiBD,UAE3EvB,EAAkBkC,MAAM9M,IACpBgM,OAAOQ,EAAU3B,GAAa7K,IAAMmM,EAAYU,GAAmB,KACvEjC,EAAkBkC,MAAMpK,KACpBsJ,OACIQ,EAAU3B,GAAanI,KACnB4J,EACAF,EAAiBW,WACjBL,GACJ,IACZ,CAEA,SAASZ,IACL,MAAMkB,EAAiB/J,SAASgK,uBAAuBzC,GAAqB,GAE5E,IAAKwC,EACD,OAEJ,MAAME,EAASF,EAAetD,aAAa,YAAc,GACnDmB,EAAc5H,SAAS2G,eAAesD,GAEvCrC,GAILF,EAAsBqC,EAAgBnC,EAC1C,CAEA,SAASa,EAAkByB,GACvB,OAAKA,EAI2BA,EAAK/F,QAAQ,UAAY+F,EAAK/F,QAAQ,SAEpC+F,EAAK9K,cAL5B,IAMf,CAEO,SAASwJ,EAAgBuB,GAC5BA,EAAWzH,UAAUC,OAAO2E,GAC5B,MAAM2C,EAASE,EAAW1D,aAAa,YAAc,GAC/C+B,EAAaC,EAAkBzI,SAAS2G,eAAesD,IAExDzB,IAILA,EAAWrL,oBAAoB,SAAU0L,GACzCpB,GAAmB,EACvB,CAEA,SAAS8B,EAAUa,GACf,MAAMC,EAAMD,EAAK7K,wBAEXyG,EAAOhG,SAASgG,KAChBsE,EAAQtK,SAASuK,gBAEjB9N,EAAYrG,OAAOoU,aAAeF,EAAM7N,WAAauJ,EAAKvJ,UAC1DiD,EAAatJ,OAAOqU,aAAeH,EAAM5K,YAAcsG,EAAKtG,WAE5DgL,EAAYJ,EAAMI,WAAa1E,EAAK0E,WAAa,EACjDC,EAAaL,EAAMK,YAAc3E,EAAK2E,YAAc,EAEpD5N,EAAMsN,EAAItN,IAAMN,EAAYiO,EAC5BjL,EAAO4K,EAAI5K,KAAOC,EAAaiL,EAErC,MAAO,CAAC5N,IAAK9M,KAAK2a,MAAM7N,GAAM0C,KAAMxP,KAAK2a,MAAMnL,GACnD,CChJwB,oBAAbO,WACPA,SAAS9C,iBAAiB,SAAU4B,IAChC,MAAMiL,EAAiB/J,SAASgK,uBAC5BzC,GACF,GACIpQ,EAASsG,EAAeqB,GAExBmL,EAAS9S,EAAOsP,aAAa,MAC7BoE,EAAU1T,EAAOsP,aAAa,YACpC,IAAIkB,EAAoB3H,SAAS2G,eAAekE,EAAU,YAO1D,GALIA,IAAYlD,IACZA,EDfL,SAAiCC,GARxC,MASI,MAAMiD,EAAUjD,EAAYnB,aAAa,YACnCqE,EAAqB9K,SAAS2G,eAChC,GAAGkE,cAEDlD,EAAoB,MAAAmD,OAAA,EAAAA,EAAoBpb,QAAQqb,WAAU,GAAMC,WAKtE,OAHA,eAAAF,OAAA,EAAAA,EAAoB1L,gBAApB,EAAmC6L,YAAYtD,GAC/CmD,EAAmBnI,SAEZgF,CACX,CCIgCuD,CAAwB/T,IAG7B4S,GAAkBE,IAAWF,EAAetD,aAAa,WAGxE,YADAmC,EAAgBmB,GAIpB,MAAMoB,EAA4BhU,EAAOgN,QACrC,CAACtG,EAASwJ,QAAQG,QAAQ,IAAK,IAAKF,GAAW8D,KAAK,MAGpDrB,IAAmBoB,GACnBvC,EAAgBmB,IAGhBrM,EAASoB,IAAW3H,EAAO+H,QAAQrB,EAASuJ,QAAWO,IDnB5D,SAAyBA,EAAgCC,GAC5D,MAAMqC,EAASrC,EAAYnB,aAAa,OAASxW,KAAKob,SAAS/U,SAAS,IAAIgV,OAAO,EAAG,GACtF,MAAA3D,GAAAA,EAAmB9E,aAAa,UAAWoH,EAC/C,CCoBQsB,CAAgB5D,EAAmBxQ,GACnCuQ,EAAsBC,EAAmBxQ,GAEzCwQ,EAAkBjF,UAAUgB,OAAO4D,GAAU,IAGjDtH,SAAS9C,iBAAiB,WAAY4B,IAClC,MAAMiL,EAAiB/J,SAASgK,uBAC5BzC,GACF,GACgB,WAAdzI,EAAM5J,KAAoB6U,GAC1BnB,EAAgBmB,EACpB,IAGJ3T,OAAO8G,iBAAiB,UAAU,KAC9B,MAAM6M,EAAiB/J,SAASgK,uBAC5BzC,GACF,GAEF,IAAKwC,EACD,OAGJ,MAAME,EAASF,EAAetD,aAAa,YAAc,GACnDmB,EAAc5H,SAAS2G,eAAesD,GAEvCrC,EAKLF,EAAsBqC,EAAgBnC,GAJlCmC,EAAerH,UAAUgB,OAAO4D,EAIc,I,sDC3E1D,MAEA,EAFqB/Z,GAAW,gBAAoB,MAAOie,OAAOC,OAAO,CAAEje,MAAO,6BAA8B4a,MAAO,GAAIE,OAAQ,GAAI7a,KAAM,OAAQC,QAAS,aAAeH,GACzK,gBAAoB,OAAQ,CAAEE,KAAM,eAAgBE,SAAU,UAAWC,EAAG,mIAAoIC,SAAU,Y,6DCD9N,QADuB,SAAAN,GAAK,OAAIX,EAAAA,EAAAA,KAAA,OAAAnB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAAK+B,MAAM,6BAA6BC,KAAK,OAAOC,QAAQ,aAAgBH,GAAK,IAAAV,UAAED,EAAAA,EAAAA,KAAA,QAAMa,KAAK,eAAeE,SAAS,UAAUC,EAAE,mIAAmIC,SAAS,cAAmB,C,iHCM3T1E,GAAQC,EAAAA,EAAAA,GAAG,2BAUJ0K,EAAqD,SAAHvJ,GAOxD,IANHwJ,EAASxJ,EAATwJ,UACAP,EAAIjJ,EAAJiJ,KACAQ,EAAOzJ,EAAPyJ,QACAnH,EAAQtC,EAARsC,SACAC,EAASvC,EAATuC,UAAS4e,EAAAnhB,EACT0J,UAAAA,OAAS,IAAAyX,EAAG,SAAQA,EAEpB,OACI7Z,EAAAA,EAAAA,MAAC8Z,EAAAA,EAAK,CACFC,cAAe7X,EAAUnF,QACzB4E,KAAMA,EACN1G,UAAW3D,EAAM,KAAM2D,GACvB+e,aAAc,SAACnV,EAAQoV,EAAQC,GACtBrV,GAAqB,kBAAXqV,GACX/X,GAER,EACAC,UAAWA,EAAUpH,SAAA,EAErBD,EAAAA,EAAAA,KAACiG,EAAAA,EAAM,CAACC,KAAK,OAAOhG,UAAW3D,EAAM,gBAAiB4J,QAASiB,EAAQnH,UACnED,EAAAA,EAAAA,KAACwF,EAAAA,EAAI,CAACzH,KAAMiL,EAAAA,MAEf/I,IAGb,C,uICnCM1D,GAAQC,EAAAA,EAAAA,GAAG,kBAQI4iB,EAAU,SAAAC,GAAA,SAAAD,IAAA,IAAAE,GAAAC,EAAAA,EAAAA,GAAA,KAAAH,GAAA,QAAAI,EAAAliB,UAAAiG,OAAAkc,EAAA,IAAAhb,MAAA+a,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAAD,EAAAC,GAAApiB,UAAAoiB,GAazB,OAbyBJ,GAAAK,EAAAA,EAAAA,GAAA,KAAAP,EAAA,GAAApY,OAAAyY,KAC3BG,SAAWxgB,EAAAA,YAAmCkgB,EAE9CO,YAAc,WACLP,EAAKM,SAAS5d,SAInBsd,EAAKM,SAAS5d,QAAQ8d,OAC1B,EAACR,EAEDS,SAAW,SAAC7N,GACRoN,EAAK3e,MAAMof,SAAS7N,EAAM3H,OAAOvG,MACrC,EAACsb,CAAC,CAAD,OAAAU,EAAAA,EAAAA,GAAAZ,EAAAC,IAAAY,EAAAA,EAAAA,GAAAb,EAAA,EAAA9W,IAAA,SAAAL,MAED,WACI,IAAAiY,EAA6BnO,KAAKpR,MAA3BV,EAAQigB,EAARjgB,SAAUkgB,EAAQD,EAARC,SACjB,OACIlb,EAAAA,EAAAA,MAACmb,EAAAA,EAAa,CAACja,QAAS4L,KAAK8N,YAAY5f,SAAA,CACpCA,GACDD,EAAAA,EAAAA,KAAA,SACIoC,IAAK2P,KAAK6N,SACV1f,UAAW3D,EAAM,SACjBwjB,SAAUhO,KAAKgO,SACflV,KAAM,OACNsV,SAAUA,MAI1B,IAAC,CA7B0B,CAAS/gB,EAAAA,W,8TCVxC,GAAeoD,EAAAA,EAAAA,IAAc,8BAA+B,CAACC,GAAAA,EAAIC,GAAAA,ICIjE,IAAMnG,GAAQC,EAAAA,EAAAA,GAAG,kBAQJkJ,EAAqE,SAAH/H,GAKxE,IAJHiI,EAAUjI,EAAViI,WACAC,EAAMlI,EAANkI,OACAF,EAAOhI,EAAPgI,QACA1F,EAAQtC,EAARsC,SAEAogB,ECpB2B,SAACxa,GAE5B,IAAAsJ,GAAoCC,EAAAA,EAAAA,WAAS,GAAMC,GAAA/P,EAAAA,EAAAA,GAAA6P,EAAA,GAA5CmR,EAAUjR,EAAA,GAAEkR,EAAalR,EAAA,GAoChC,MAAO,CACHmR,YAnCexT,EAAAA,EAAAA,cAAY,SAACkF,GAC5BA,EAAM1J,iBACN0J,EAAMlI,iBACV,GAAG,IAiCCyW,aA/BgBzT,EAAAA,EAAAA,cAAY,SAACkF,GAC7BA,EAAM1J,iBACN0J,EAAMlI,kBACNuW,GAAc,EAClB,GAAG,IA4BCG,aA1BgB1T,EAAAA,EAAAA,cAAY,SAACkF,GAC7BA,EAAM1J,iBACN0J,EAAMlI,kBACNuW,GAAc,EAClB,GAAG,IAuBCI,QArBW3T,EAAAA,EAAAA,cACX,SAACkF,GACGA,EAAM1J,iBACN0J,EAAMlI,kBACNuW,GAAc,GAEd,IAAOvc,EAASkO,EAAM0O,aAAf5c,MAEFA,GAIL6B,EAAO7B,EACX,GACA,CAAC6B,IAQDya,WAAAA,EAER,CDzBuEO,CAAgBhb,GAA5E8a,EAAMN,EAANM,OAAQH,EAAUH,EAAVG,WAAYC,EAAWJ,EAAXI,YAAaC,EAAWL,EAAXK,YAAaJ,EAAUD,EAAVC,WAkBrD,OACItgB,EAAAA,EAAAA,KAAA,OACIE,UAAW3D,EAAM,YAAa,CAC1BukB,SAAUlb,EACVmb,MAAOpb,EACPqb,SAAUV,IAEdK,OAAQA,EACRF,YAAaA,EACbC,YAAaA,EACbF,WAAYA,EAAWvgB,SAzBvBA,IAKAgF,EAAAA,EAAAA,MAAA,OAAK/E,UAAW3D,EAAM,QAAQ0D,SAAA,EAC1BD,EAAAA,EAAAA,KAAA,OAAAC,SAAmBkD,EAAbmd,EAAkB,oBAA4B,uBACnDnd,EAAK,OACNnD,EAAAA,EAAAA,KAAA,OAAAC,UACID,EAAAA,EAAAA,KAACof,EAAU,CAACW,SAAUla,EAAO5F,SAAEkD,EAAK,4BAqBxD,EAEA,S,6DEzDA,QADmB,SAAAxC,GAAK,OAAIX,EAAAA,EAAAA,KAAA,OAAAnB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAAK+B,MAAM,6BAA6BC,KAAK,OAAOC,QAAQ,aAAgBH,GAAK,IAAAV,UAAED,EAAAA,EAAAA,KAAA,QAAMa,KAAK,eAAeE,SAAS,UAAUC,EAAE,0JAA0JC,SAAS,cAAmB,C,kDCChVggB,EAAgB,SAAU5X,EAAO6X,GACjC,MAA4B,kBAAdA,EAA0BA,GAAa7X,CACzD,EAIA,QAHgB,SAAU8X,GACtB,OAAO,IAAAC,YAAWH,EAAeE,EACrC,C,wECQA,MAAMtV,GAAI,E,SAAA,IAAM,gBAET,SAAS9B,GAAY,KAAC9G,EAAO,GAAE,UAAEiC,EAAY,SAAQ,UAAEhF,EAAS,GAAEmhB,IACrE,OACI,iBACIpE,MAAO,CAACzB,MAAOvY,EAAMyY,OAAQzY,GAC7B/C,UAAW2L,EAAE,CAAC3G,aAAYhF,GAAU,UAC3BmhB,EAAE,UAEX,SAAC7b,EAAA8b,EAAI,CAACvjB,KAAMwjB,EAAA,EAAate,KAAMA,KAG3C,C,6DCzBA,QAD0B,SAAAtC,GAAK,OAAIX,EAAAA,EAAAA,KAAA,OAAAnB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAAK+B,MAAM,6BAA6BC,KAAK,OAAOC,QAAQ,aAAgBH,GAAK,IAAAV,UAAED,EAAAA,EAAAA,KAAA,QAAMa,KAAK,eAAeE,SAAS,UAAUC,EAAE,8eAA8eC,SAAS,cAAmB,C,6DCC/qB,QADqB,SAAAN,GAAK,OAAIX,EAAAA,EAAAA,KAAA,OAAAnB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAAK+B,MAAM,6BAA6BC,KAAK,OAAOC,QAAQ,aAAgBH,GAAK,IAAAV,UAAED,EAAAA,EAAAA,KAAA,QAAMa,KAAK,eAAeE,SAAS,UAAUC,EAAE,4XAA4XC,SAAS,cAAmB,C,+JCexjB,MAAM4K,GAAI,QAAM,aAeT,SAAS2V,EAAgB7gB,GAC5B,MAAM,KACFiE,EAAI,GACJ+G,EAAE,SACF8V,EAAQ,aACRC,EAAY,YACZC,EAAW,MACX1Z,EAAK,aACL2Z,EAAY,WACZC,EAAU,aACVC,EAAY,KACZ7e,EAAI,KACJ8e,EAAI,QACJC,EAAU,EAAC,QACXC,EAAO,UACPC,EAAS,SACTjlB,EAAQ,SACRklB,EAAQ,SACRpC,EAAQ,QACRqC,EAAO,OACPC,EAAM,UACNja,EAAS,QACTka,EAAO,WACPC,GACA5hB,EACE6hB,EAAkB,SAAkC,MACpDC,GAAY,EAAAC,EAAA,GAAWb,EAAYW,GACnCG,EAAetf,KAAKuf,IAAIb,GAAQC,EAAS,GACzCa,EAAa5a,GAASua,GAAiBxgB,SAASiG,MAEhD6a,EAAe,eAAkB,KACnC,MAAMC,EAAUP,GAAiBxgB,QAC3BwV,EAASuL,GAASvQ,cAExB,GAAIuQ,GAAWvL,IAAWuK,EAAM,CAC5B,MAAMiB,EAAgBC,iBAAiBF,GACjCG,EAAaC,SAASH,EAAcI,iBAAiB,eAAgB,IACrEC,EAAaF,SAASH,EAAcI,iBAAiB,eAAgB,IACrEE,EAAgBH,SAASH,EAAcI,iBAAiB,kBAAmB,IAC3EG,GAA2BV,GAAYW,MAAM,QAAU,IAAIjgB,OAAS,EAEpEkgB,EAAejM,EAAOyF,MAAMvB,OAClClE,EAAOyF,MAAMvB,OAAS,GAAGlE,EAAOkM,iBAEhCX,EAAQ9F,MAAMvB,OAAS,GAAGwH,EAAaG,EAAaC,MACpD,MAAMK,EAAWZ,EAAQ9F,MAAM0G,SAC/BZ,EAAQ9F,MAAM0G,SAAW,SAEzB,MAAMC,EA7DmB,CAACnE,IAMlC,MAAM,OAAC/D,EAAM,WAAEwH,GAAczD,EAI7B,OAAQ/D,GAHWS,OAAO0H,MAAMpE,EAAK4D,YAAc,EAAI5D,EAAK4D,aACtClH,OAAO0H,MAAMpE,EAAK6D,eAAiB,EAAI7D,EAAK6D,gBAEnBJ,CAAU,EAmDrBY,CAA6B,CACrDpI,OAAQqH,EAAQhT,aAChBsT,aACAC,gBACAJ,eAGEa,EAAa1gB,KAAKuf,IAAIgB,EAAqBL,GAG7CR,EAAQ9F,MAAMvB,OADduG,GAAWA,EAAU8B,EACE,GAAG9B,EAAUiB,EAAaG,EAAaC,MACvDtB,GAAWA,EAAU+B,EACL,GAAG1gB,KAAKC,IAAI0e,EAASC,GAAW+B,KAAYd,EAAaG,EAAaC,MAEtE,GAAGP,EAAQhT,iBAGtCgT,EAAQ9F,MAAM0G,SAAWA,EACzBnM,EAAOyF,MAAMvB,OAAS+H,CAC1B,IACD,CAAC1B,EAAME,EAASD,EAASa,IAW5B,OATA,EAAA7T,EAAA,GAAkB,CACd5M,IAAK2f,OAAO9a,EAAYub,EACxBtT,SAAU4T,IAGd,aAAgB,KACZA,GAAc,GACf,CAACA,EAAc7f,EAAMgF,KAGpB,wBACQ6Z,EACJ1f,IAAKqgB,EACLxF,MAAO,IACA6E,EAAa7E,MAChBvB,OAAQqG,EAAO,YAAS9a,GAE5B/G,UAAW2L,EAAE,UAAWiW,EAAa5hB,WACrC0E,KAAMA,EACN+G,GAAIA,EACJ8V,SAAUA,EACVE,YAAaA,EACb1Z,MAAOA,EACP2Z,aAAcA,EACdG,KAAMY,EACNT,UAAWA,EACXR,aAAcA,EACd3B,SAAUA,EACVqC,QAASA,EACTC,OAAQA,EACRja,UAAWA,EACXka,QAASA,EACTC,WAAYA,EACZtlB,SAAUA,GAAY6kB,EAAa7kB,SACnCklB,SAAUA,GAAYL,EAAaK,UAG/C,CCpHA,MAAM,GAAI,QAAM,aAkBHna,EAAW,cACpB,SAAkBrH,EAAOyB,GACrB,MAAM,KACF8D,EAAO,SAAQ,KACfjD,EAAO,IAAG,IACVghB,EAAM,cAAa,KACnBrf,EAAI,MACJqD,EAAK,aACL2Z,EAAY,SACZ3kB,EAAQ,SACRklB,EAAQ,SACR+B,GAAW,EAAK,MAChBlnB,EACAmnB,aAAcC,EACdC,gBAAiBC,EAAmB,aACpC5C,EACA/V,GAAI4Y,EAAM,SACV9C,EAAQ,MACRxE,EAAK,UACL/c,EAAS,GACTmhB,EAAE,aACFS,EAAY,KACZ0C,EAAI,SACJtc,EAAQ,SACR6X,GACApf,GAEE,aAACwjB,EAAY,gBAAEE,IAAmB,QAAiB,CACrDrnB,QACAmnB,aAAcC,EACdC,gBAAiBC,KAGdG,EAAYC,IAAiB,EAAAC,EAAA,GAAmB1c,EAAO2Z,GAAgB,GAAI1Z,GAC5Esa,EAAkB,SAAqD,MACvEoC,GAAW,EAAAC,EAAA,GAAoB,CAAC1D,aAAcsD,EAAYK,QAASJ,IACnEjC,GAAY,EAAAC,EAAA,GAAW/hB,EAAMkhB,WAAYW,EAAiBoC,IACzDG,EAAsBC,GAA2B,YAAe,GACjE3b,GAAQ,QAAqBgb,GAC7BY,GAAU,EAAAC,EAAAC,KAEVC,EAAwC,YAApBf,GAAiCxS,QAAQsS,GAC7DkB,EAAwBxT,QAAQqS,IAAajnB,IAAaklB,GAAYsC,GACtE9Y,EAAK4Y,GAAUU,EAEfK,GAAiB,EAAAJ,EAAAC,KACjBI,GAAS,EAAAL,EAAAC,KACTK,EAAkB,CACpB1D,IAAe,oBACf0C,EAAOe,OAASte,EAChBme,EAAoBE,OAAiBre,GAEpCuP,OAAO3E,SACP2M,KAAK,KAEJiH,EAAc,CAChB9Z,KACA8V,WACA7c,OACA,QAAAmb,CAAS7N,GACLwS,EAAcxS,EAAM3H,OAAOtC,OACvB8X,GACAA,EAAS7N,EAEjB,EACAwP,cAAc,QAAoBA,GAClCI,aAAc,IACPA,EACH,mBAAoB0D,QAAmBve,EACvC,eAAoC,YAApBod,QAAiCpd,IAoCzD,OAZA,aAAgB,KACZ,MAAM8b,EAAUP,EAAgBxgB,QAEhC,GAAI+gB,EAAS,CACT,MAAM2C,EAA2B3C,EAAQhT,aAAegT,EAAQ/S,aAE5D+U,IAAyBW,GACzBV,EAAwBU,EAEhC,IACD,CAACjB,EAAYM,KAGZ,kBACI3iB,IAAKA,EACL6a,MAAOA,EACP/c,UAAW,EACP,CACIgG,OACAjD,OACAhG,WACAoM,QACA4a,IAAc,UAAT/d,OAAmBe,EAAYgd,EACpC,YAAaoB,EACb,gBAAiBN,GAErB7kB,GACH,UACQmhB,EAAE,WAEX,kBAAMnhB,UAAW,EAAE,WAAU,WACzB,SAACshB,EAAe,IAAK7gB,KAAW8kB,EAAa5D,WAAYY,IACxD4C,IACG,SAACM,EAAA,EAAW,CACRzlB,UAAW,EAAE,QAAS,CAAC+C,SACvBA,MAAM,OAA6BA,GACnCkD,QAxDC+L,IACjB,MAAM6Q,EAAUP,EAAgBxgB,QAEhC,GAAI+gB,EAAS,CACTA,EAAQzO,QAER,MAAMsR,EAAiBhH,OAAOiH,OAAO3T,GACrC0T,EAAerb,OAASwY,EACxB6C,EAAeE,cAAgB/C,EAE/BA,EAAQ9a,MAAQ,GAEZ8X,GACAA,EAAS6F,EAEjB,CAEAlB,EAAc,GAAG,QA2Cb,SAACqB,EAAA,EAAsB,CACnB5B,aAAciB,EAAoBjB,EAAe,KACjDmB,eAAgBA,EAChBd,KAAMA,EACNe,OAAQA,MAIxB,G","sources":["webpack://@ytsaurus/ui/./src/ui/components/Markdown/Markdown.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/plus.svg","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevron-up.svg","webpack://@ytsaurus/ui/./src/ui/components/InfiniteScrollLoader/InfiniteScrollLoader.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/ChatFile/ChatFilePopup/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/ChatFile/ChatFilePopup/textFileValidator.ts","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/ChatFile/ChatFilePopup/ChatFilePopup.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/ChatFile/ChatFileButton.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/ChatInput.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/list-ul.svg","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/ChatHeader/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/ChatHeader/ChatHeader.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/EmptyChat/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/EmptyChat/EmptyChat.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/Message/AnswerBody.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/Message/McpSearchAnswer/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/Message/McpMessage.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/Message/McpSearchAnswer/McpSearchAnswer.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/Message/McpSchemaAnswer/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/Message/McpSchemaAnswer/McpSchemaAnswer.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/Message/McpUnknownAnswer/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/Message/McpUnknownAnswer/McpUnknownAnswer.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/Message/getMessageComponentByType.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/Message/Message.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/Messages/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/Messages/Messages.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/CurrentAnswer.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/ChatHistory/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/ChatHistory/ChatHistoryItem.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/ChatHistory/ChatHistory.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/ChatBody.tsx","webpack://@ytsaurus/ui/./src/ui/containers/AiChat/Chat.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/arrow-up-right-from-square.svg","webpack://@ytsaurus/ui/./node_modules/@diplodoc/transform/node_modules/@diplodoc/tabs-extension/src/common.ts","webpack://@ytsaurus/ui/./node_modules/@diplodoc/transform/node_modules/@diplodoc/tabs-extension/src/runtime/utils.ts","webpack://@ytsaurus/ui/./node_modules/@diplodoc/transform/node_modules/@diplodoc/tabs-extension/src/runtime/TabsController.ts","webpack://@ytsaurus/ui/./node_modules/@diplodoc/transform/node_modules/get-root-node-polyfill/index.js","webpack://@ytsaurus/ui/./node_modules/@diplodoc/transform/node_modules/@diplodoc/tabs-extension/src/runtime/index.ts","webpack://@ytsaurus/ui/./node_modules/@diplodoc/transform/src/js/polyfill.js","webpack://@ytsaurus/ui/./node_modules/@diplodoc/transform/src/js/utils.ts","webpack://@ytsaurus/ui/./node_modules/@diplodoc/transform/src/js/code.ts","webpack://@ytsaurus/ui/./node_modules/@diplodoc/transform/src/js/cut.ts","webpack://@ytsaurus/ui/./node_modules/@diplodoc/transform/src/js/term/utils.ts","webpack://@ytsaurus/ui/./node_modules/@diplodoc/transform/src/js/term/index.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/ChevronDown.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevron-down.svg","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/QuerySettingsButton/PopupWithCloseButton.tsx","webpack://@ytsaurus/ui/./src/ui/components/FilePicker/FilePicker.tsx","webpack://@ytsaurus/ui/./src/ui/components/FileDropZone/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/components/FileDropZone/FileDropZone.tsx","webpack://@ytsaurus/ui/./src/ui/components/FileDropZone/useFileDragDrop.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/arrow-up.svg","webpack://@ytsaurus/ui/./node_modules/react-use/esm/useToggle.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/ArrowToggle/ArrowToggle.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/circle-question.svg","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/paperclip.svg","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/controls/TextArea/TextAreaControl.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/controls/TextArea/TextArea.tsx"],"sourcesContent":["import React, {memo} from 'react';\nimport cn from 'bem-cn-lite';\nimport axios from 'axios';\n\nimport {OutputType} from '@diplodoc/transform/lib/typings';\n\nimport {wrapApiPromiseByToaster} from '../../utils/utils';\nimport UIFactory from '../../UIFactory';\n\nimport './Markdown.scss';\nimport '@diplodoc/transform/dist/css/yfm.css';\nimport '@diplodoc/transform/dist/js/yfm';\nimport './yfm-overrides.scss';\n\nconst block = cn('yt-markdown');\n\ninterface Props {\n text: string;\n allowHTML?: boolean;\n}\n\ninterface Response {\n result?: {html?: string; plainText?: string};\n}\n\nconst emptyTransformResponse: OutputType = {\n result: {html: '', headings: []},\n logs: {info: [], warn: [], error: [], disabled: []},\n};\n\nexport async function transformMarkdown({text, allowHTML}: Props): Promise<OutputType> {\n try {\n const {data} = await wrapApiPromiseByToaster(\n axios.post<Response>('/api/markdown-to-html', {\n text,\n allowHTML,\n }),\n {\n toasterName: 'useMarkdown',\n skipSuccessToast: true,\n errorContent: 'Failed to transform markdown text',\n },\n );\n return data as OutputType;\n } catch (e) {\n return {\n result: {...emptyTransformResponse['result']},\n logs: {...emptyTransformResponse['logs'], error: [(e as Error).message]},\n };\n }\n}\n\nexport function useMarkdown({text, allowHTML = true}: Props) {\n const [res, setResult] = React.useState<OutputType>(emptyTransformResponse);\n\n React.useEffect(() => {\n async function transform() {\n try {\n const data = await transformMarkdown({text, allowHTML});\n\n setResult(data);\n } catch (e) {}\n }\n transform();\n }, [text, allowHTML]);\n\n return res;\n}\n\nfunction MD({text}: Props) {\n const {html} = useMarkdown({text, allowHTML: true}).result ?? {};\n\n return (\n <React.Fragment>\n <div className={block(null, 'yfm')} dangerouslySetInnerHTML={{__html: html ?? ''}} />\n </React.Fragment>\n );\n}\n\nexport const Markdown = memo(function Markdown({text}: Props) {\n const customMarkdown = UIFactory.renderMarkdown({text});\n return customMarkdown ?? <MD text={text} />;\n});\n","const SvgPlus = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M8 1.75a.75.75 0 0 1 .75.75v4.75h4.75a.75.75 0 0 1 0 1.5H8.75v4.75a.75.75 0 0 1-1.5 0V8.75H2.5a.75.75 0 0 1 0-1.5h4.75V2.5A.75.75 0 0 1 8 1.75\" clipRule=\"evenodd\" /></svg>;\nexport default SvgPlus;","const SvgChevronUp = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M13.03 10.53a.75.75 0 0 1-1.06 0L8 6.56l-3.97 3.97a.75.75 0 1 1-1.06-1.06l4.5-4.5a.75.75 0 0 1 1.06 0l4.5 4.5a.75.75 0 0 1 0 1.06\" clipRule=\"evenodd\" /></svg>;\nexport default SvgChevronUp;","import React, {FC, useEffect, useRef} from 'react';\nimport {Flex, Loader} from '@gravity-ui/uikit';\n\ntype Props = {\n className?: string;\n loading?: boolean;\n onLoadMore: () => void;\n};\n\nexport const InfiniteScrollLoader: FC<Props> = ({className, loading, onLoadMore}) => {\n const paginationRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n onLoadMore();\n }\n });\n },\n {\n root: null,\n threshold: 0.1,\n },\n );\n\n if (paginationRef.current) {\n observer.observe(paginationRef.current);\n }\n\n return () => {\n if (paginationRef.current) {\n observer.unobserve(paginationRef.current);\n }\n };\n }, []);\n\n return (\n <Flex className={className} ref={paginationRef} alignItems=\"center\" justifyContent=\"center\">\n {loading ? <Loader /> : ''}\n </Flex>\n );\n};\n","import {addI18Keysets} from '../../../../../i18n';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:ai.chat.file-popup', {en, ru});\n","import i18n from './i18n';\n\ntype ValidationResult = {\n isValid: boolean;\n error?: string;\n};\n\nconst MAX_FILE_SIZE = 0.5 * 1024 * 1024; // 0.5MB\n\nexport const textFileValidator = async (file: File): Promise<ValidationResult> => {\n if (file.size > MAX_FILE_SIZE) {\n return {isValid: false, error: i18n('alert_file-too-large')};\n }\n\n try {\n const arrayBuffer = await file.arrayBuffer();\n const content = new Uint8Array(arrayBuffer);\n\n // Check for binary files\n const bytesToCheck = Math.min(content.length, 8192);\n for (let i = 0; i < bytesToCheck; i++) {\n if (content[i] === 0) {\n return {isValid: false, error: i18n('alert_binary-data')};\n }\n }\n\n // Try to decode as UTF-8\n const decoder = new TextDecoder('utf-8', {fatal: true});\n decoder.decode(arrayBuffer);\n\n return {isValid: true};\n } catch (error) {\n return {isValid: false, error: i18n('alert_invalid-text-file')};\n }\n};\n","import React, {FC} from 'react';\nimport {Button, Flex, Icon, Text, Toaster, Tooltip} from '@gravity-ui/uikit';\nimport cn from 'bem-cn-lite';\nimport {useDispatch, useSelector} from '../../../../store/redux-hooks';\nimport {FileDropZone} from '../../../../components/FileDropZone/FileDropZone';\nimport {attachFiles} from '../../../../store/actions/ai/chat';\nimport {selectAttachedFiles} from '../../../../store/selectors/ai/chat';\nimport TrashBinIcon from '@gravity-ui/icons/svgs/trash-bin.svg';\nimport i18n from './i18n';\nimport {textFileValidator} from './textFileValidator';\nimport {removeAttachedFile} from '../../../../store/reducers/ai/chatSlice';\nimport CircleQuestionIcon from '@gravity-ui/icons/svgs/circle-question.svg';\nimport './ChatFilePopup.scss';\n\nconst block = cn('yt-chat-file-popup');\n\nconst toaster = new Toaster();\n\nexport const ChatFilePopup: FC = () => {\n const dispatch = useDispatch();\n const files = useSelector(selectAttachedFiles);\n\n const handleFileAdd = async (fileList: FileList | null) => {\n if (!fileList) return;\n\n const validFiles: File[] = [];\n\n for (const file of Array.from(fileList)) {\n const {isValid, error} = await textFileValidator(file);\n\n if (!isValid) {\n toaster.add({\n name: 'file-validation-error',\n title: error,\n theme: 'danger',\n });\n continue;\n }\n\n validFiles.push(file);\n }\n\n if (validFiles.length > 0) {\n dispatch(attachFiles(validFiles));\n }\n };\n\n const handleFileRemove = (index: number) => {\n dispatch(removeAttachedFile(index));\n };\n\n return (\n <Flex direction=\"column\" className={block()} gap={3}>\n <Text variant=\"subheader-3\">\n <Flex alignItems=\"center\" gap={1}>\n {i18n('title_attach-files')}\n <Tooltip content={i18n('context_text-files-only')}>\n <Text color=\"secondary\">\n <Icon data={CircleQuestionIcon} size={16} />\n </Text>\n </Tooltip>\n </Flex>\n </Text>\n <FileDropZone isEmpty={files.length === 0} isDropable={true} onFile={handleFileAdd} />\n {files.length > 0 && (\n <Flex direction=\"column\" gap={1} className={block('files-list')}>\n {files.map((file, index) => (\n <Flex\n key={index}\n alignItems=\"center\"\n justifyContent=\"space-between\"\n className={block('file-item')}\n >\n <Text variant=\"body-1\" ellipsis>\n {file.name}\n </Text>\n <Button view=\"flat\" onClick={() => handleFileRemove(index)}>\n <Icon data={TrashBinIcon} size={16} />\n </Button>\n </Flex>\n ))}\n </Flex>\n )}\n </Flex>\n );\n};\n","import React, {FC, useRef} from 'react';\nimport {Button, Icon} from '@gravity-ui/uikit';\nimport PaperclipIcon from '@gravity-ui/icons/svgs/paperclip.svg';\nimport {useToggle} from 'react-use';\nimport {useSelector} from '../../../store/redux-hooks';\nimport {PopupWithCloseButton} from '../../../pages/query-tracker/QuerySettingsButton/PopupWithCloseButton';\nimport {ChatFilePopup} from './ChatFilePopup';\nimport {selectAttachedFiles} from '../../../store/selectors/ai/chat';\nimport cn from 'bem-cn-lite';\nimport './ChatFileButton.scss';\n\nconst block = cn('yt-chat-file-button');\n\nexport const ChatFileButton: FC = () => {\n const btnRef = useRef<HTMLButtonElement>(null);\n const [open, toggleOpen] = useToggle(false);\n const {length} = useSelector(selectAttachedFiles);\n\n return (\n <>\n <Button ref={btnRef} onClick={toggleOpen}>\n <Icon data={PaperclipIcon} size={16} />\n {length ? ` ${length}` : undefined}\n </Button>\n <PopupWithCloseButton\n className={block('popup')}\n anchorRef={btnRef}\n open={open}\n onClose={toggleOpen}\n placement=\"top\"\n >\n <ChatFilePopup />\n </PopupWithCloseButton>\n </>\n );\n};\n","import React, {FC} from 'react';\nimport {Button, Flex, Icon, TextArea} from '@gravity-ui/uikit';\nimport ArrowUpIcon from '@gravity-ui/icons/svgs/arrow-up.svg';\nimport './ChatInput.scss';\nimport cn from 'bem-cn-lite';\nimport {useDispatch, useSelector} from '../../store/redux-hooks';\nimport {setQuestion} from '../../store/reducers/ai/chatSlice';\nimport {selectChatQuestion, selectChatSending} from '../../store/selectors/ai/chat';\nimport {sendQuestion} from '../../store/actions/ai/chat';\nimport ChevronDownIcon from '@gravity-ui/icons/svgs/chevron-down.svg';\nimport {ChatFileButton} from './ChatFile';\n\nconst block = cn('yt-ai-chat-input');\n\ntype Props = {\n showScrollButton: boolean;\n onScrollClick: () => void;\n};\n\nexport const ChatInput: FC<Props> = ({showScrollButton, onScrollClick}) => {\n const dispatch = useDispatch();\n const isSending = useSelector(selectChatSending);\n const question = useSelector(selectChatQuestion);\n\n const handleQuestionChange = (value: string) => {\n dispatch(setQuestion(value));\n };\n\n const handleQuestionSubmit = () => {\n dispatch(sendQuestion());\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleQuestionSubmit();\n }\n };\n\n return (\n <div className={block()}>\n {showScrollButton && (\n <Button view=\"outlined\" className={block('scroll-button')} onClick={onScrollClick}>\n <Icon data={ChevronDownIcon} size={16} />\n </Button>\n )}\n\n <Flex className={block('form')} justifyContent=\"space-between\" alignItems=\"flex-end\">\n <TextArea\n view=\"clear\"\n value={question || ''}\n onUpdate={handleQuestionChange}\n onKeyDown={handleKeyDown}\n />\n <Flex gap={1}>\n <ChatFileButton />\n <Button\n view=\"action\"\n onClick={handleQuestionSubmit}\n disabled={!question}\n loading={isSending}\n >\n <Icon data={ArrowUpIcon} size={16} />\n </Button>\n </Flex>\n </Flex>\n </div>\n );\n};\n","const SvgListUl = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M2.5 5a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5m3.25-2a.75.75 0 0 0 0 1.5h8.5a.75.75 0 0 0 0-1.5zm0 8.5a.75.75 0 0 0 0 1.5h8.5a.75.75 0 0 0 0-1.5zM5 8a.75.75 0 0 1 .75-.75h8.5a.75.75 0 0 1 0 1.5h-8.5A.75.75 0 0 1 5 8M3.75 8a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0M2.5 13.5a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5\" clipRule=\"evenodd\" /></svg>;\nexport default SvgListUl;","import {addI18Keysets} from '../../../../i18n';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:ai.chat.header', {en, ru});\n","import React, {FC} from 'react';\nimport {Button, Flex, Icon, Tooltip} from '@gravity-ui/uikit';\nimport PlusIcon from '@gravity-ui/icons/svgs/plus.svg';\nimport ListUlIcon from '@gravity-ui/icons/svgs/list-ul.svg';\nimport XmarkIcon from '@gravity-ui/icons/svgs/xmark.svg';\nimport {toggleChatHistory, toggleChatSidePanel} from '../../../store/actions/ai/chat';\nimport {useDispatch} from '../../../store/redux-hooks';\nimport {resetChat} from '../../../store/reducers/ai/chatSlice';\nimport i18n from './i18n';\n\ntype Props = {\n className?: string;\n};\n\nexport const ChatHeader: FC<Props> = ({className}) => {\n const dispatch = useDispatch();\n\n const handleNewChat = () => {\n dispatch(resetChat());\n };\n\n const handleToggleHistory = () => {\n dispatch(toggleChatHistory());\n };\n\n const closeChat = () => {\n dispatch(toggleChatSidePanel());\n };\n\n return (\n <Flex justifyContent=\"flex-end\" alignItems=\"center\" gap={1} className={className}>\n <Tooltip content={i18n('action_new-chat')}>\n <Button view=\"flat\" onClick={handleNewChat}>\n <Icon data={PlusIcon} size={16} />\n </Button>\n </Tooltip>\n <Tooltip content={i18n('action_history')}>\n <Button view=\"flat\" onClick={handleToggleHistory}>\n <Icon data={ListUlIcon} size={16} />\n </Button>\n </Tooltip>\n <Tooltip content={i18n('action_close-chat')}>\n <Button view=\"flat\" onClick={closeChat}>\n <Icon data={XmarkIcon} size={16} />\n </Button>\n </Tooltip>\n </Flex>\n );\n};\n","import {addI18Keysets} from '../../../../i18n';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:ai.chat.empty-chat', {en, ru});\n","import React, {FC} from 'react';\nimport {Flex, Text} from '@gravity-ui/uikit';\nimport i18n from './i18n';\n\nexport const EmptyChat: FC = () => {\n return (\n <Flex alignItems=\"center\" justifyContent=\"center\" direction=\"column\" grow={1}>\n <Text variant=\"header-1\">{i18n('title_greeting')}</Text>\n <Text>{i18n('context_help-offer')}</Text>\n </Flex>\n );\n};\n","import React, {FC} from 'react';\nimport {Markdown} from '../../../components/Markdown/Markdown';\nimport {ClipboardButton, Flex} from '@gravity-ui/uikit';\nimport {ChatAnswer} from '../../../types/ai-chat';\nimport './AnswerBody.scss';\nimport cn from 'bem-cn-lite';\n\nconst block = cn('yt-ai-chat-answer-body');\n\ntype Props = {\n message: ChatAnswer;\n className?: string;\n};\n\nexport const AnswerBody: FC<Props> = ({message, className}) => {\n const inProgress = message.state === 'progress';\n\n const handleSendCopy = () => {\n const content = window.getSelection()?.toString();\n if (!content) return;\n };\n\n return (\n <Flex direction=\"column\" gap={2} className={block(null, className)} onCopy={handleSendCopy}>\n <Markdown text={message.value || '...'} />\n\n <Flex gap={1} className={block('footer')}>\n {!inProgress && (\n <>\n <ClipboardButton size=\"s\" text={message.value} />\n </>\n )}\n </Flex>\n </Flex>\n );\n};\n","import {addI18Keysets} from '../../../../../i18n';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:ai.chat.mcp-search-answer', {en, ru});\n","import React, {FC, PropsWithChildren} from 'react';\nimport {ArrowToggle, ClipboardButton, Flex, Text} from '@gravity-ui/uikit';\nimport {useToggle} from 'react-use';\nimport cn from 'bem-cn-lite';\nimport './McpMessage.scss';\n\nconst block = cn('mcp-message');\n\ntype Props = {\n title: string;\n clipboardValue: string;\n className?: string;\n};\n\nexport const McpMessage: FC<PropsWithChildren<Props>> = ({\n title,\n children,\n clipboardValue,\n className,\n}) => {\n const [isOpen, toggleOpen] = useToggle(false);\n\n const handleClipboardClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n };\n\n return (\n <Flex className={block(null, className)} direction=\"column\" gap={2}>\n <Flex alignItems=\"center\" gap={2} onClick={toggleOpen} className={block('header')}>\n <Text color=\"secondary\">{title}</Text>\n <ArrowToggle direction={isOpen ? 'top' : 'bottom'} />\n <div onClick={handleClipboardClick}>\n <ClipboardButton size=\"s\" text={clipboardValue} />\n </div>\n </Flex>\n {isOpen && children}\n </Flex>\n );\n};\n","import React, {FC} from 'react';\nimport {Flex, Icon, Link, Text} from '@gravity-ui/uikit';\nimport ArrowUpRightFromSquareIcon from '@gravity-ui/icons/svgs/arrow-up-right-from-square.svg';\nimport {SearchMcpAnswer} from '../../../../types/ai-chat';\nimport i18n from './i18n';\nimport {McpMessage} from '../McpMessage';\n\ntype Props = {\n value: SearchMcpAnswer['value'];\n className?: string;\n};\n\nexport const McpSearchAnswer: FC<Props> = ({value, className}) => {\n return (\n <McpMessage\n className={className}\n title={i18n('title_search-results')}\n clipboardValue={JSON.stringify(value)}\n >\n <Flex direction=\"column\" gap={1}>\n {value.map(({url, title}) => (\n <Link key={url} href={url} target=\"_blank\">\n <Icon data={ArrowUpRightFromSquareIcon} /> {title}\n </Link>\n ))}\n {value.length === 0 && <Text variant=\"code-1\">[]</Text>}\n </Flex>\n </McpMessage>\n );\n};\n","import {addI18Keysets} from '../../../../../i18n';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:ai.chat.mcp-schema-answer', {en, ru});\n","import React, {FC} from 'react';\nimport {Text} from '@gravity-ui/uikit';\nimport {TableSchemaMcpAnswer} from '../../../../types/ai-chat';\nimport i18n from './i18n';\nimport {McpMessage} from '../McpMessage';\n\ntype Props = {\n value: TableSchemaMcpAnswer['value'];\n className?: string;\n};\n\nexport const McpSchemaAnswer: FC<Props> = ({value, className}) => {\n return (\n <McpMessage\n className={className}\n title={i18n('title_table-schema')}\n clipboardValue={JSON.stringify(value)}\n >\n <Text variant=\"code-1\">{value}</Text>\n </McpMessage>\n );\n};\n","import {addI18Keysets} from '../../../../../i18n';\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:ai.chat.mcp-unknown-answer', {en, ru});\n","import React, {FC} from 'react';\nimport {Text} from '@gravity-ui/uikit';\nimport {UnknownMcpAnswer} from '../../../../types/ai-chat';\nimport {McpMessage} from '../McpMessage';\nimport i18n from './i18n';\n\ntype Props = {\n name: UnknownMcpAnswer['name'];\n value: UnknownMcpAnswer['value'];\n className?: string;\n};\n\nexport const McpUnknownAnswer: FC<Props> = ({name, value, className}) => {\n const jsonString = JSON.stringify(value, null, 2);\n\n return (\n <McpMessage\n className={className}\n title={`${i18n('title_unknown-mcp-call')}: ${name}`}\n clipboardValue={jsonString}\n >\n <Text variant=\"code-1\">{jsonString}</Text>\n </McpMessage>\n );\n};\n","import React from 'react';\nimport {YTErrorBlock} from '../../../components/Error/Error';\nimport {AnswerBody} from './AnswerBody';\nimport {McpSearchAnswer} from './McpSearchAnswer';\nimport {McpSchemaAnswer} from './McpSchemaAnswer';\nimport {McpUnknownAnswer} from './McpUnknownAnswer';\nimport {ChatMessage} from '../../../types/ai-chat';\n\nexport const getMessageComponentByType = (message: ChatMessage, className?: string) => {\n switch (message.type) {\n case 'error': {\n return <YTErrorBlock className={className} error={message.error} />;\n }\n case 'answer': {\n return <AnswerBody className={className} message={message} />;\n }\n case 'mcp_search_answer': {\n return <McpSearchAnswer className={className} value={message.value} />;\n }\n case 'mcp_table_schema_answer': {\n return <McpSchemaAnswer className={className} value={message.value} />;\n }\n case 'mcp_unknown_answer': {\n return (\n <McpUnknownAnswer className={className} name={message.name} value={message.value} />\n );\n }\n default: {\n return <div className={className}>{message.value}</div>;\n }\n }\n};\n","import React, {FC} from 'react';\nimport {Flex} from '@gravity-ui/uikit';\nimport cn from 'bem-cn-lite';\nimport {ChatMessage} from '../../../types/ai-chat';\nimport uiFactory from '../../../UIFactory';\nimport {getMessageComponentByType} from './getMessageComponentByType';\nimport './Message.scss';\n\nconst block = cn('yt-ai-chat-message');\n\ntype Props = {\n message: ChatMessage;\n className?: string;\n};\n\nexport const Message: FC<Props> = ({message, className}) => {\n const isQuestion = message.type === 'question';\n const component = uiFactory.getAiChatMessageComponent(message, block('body'));\n\n return (\n <Flex\n justifyContent={isQuestion ? 'flex-end' : 'flex-start'}\n className={block({question: isQuestion}, className)}\n gap={1}\n >\n {component || getMessageComponentByType(message, block('body'))}\n </Flex>\n );\n};\n","import {addI18Keysets} from '../../../../i18n';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:ai.chat.messages', {en, ru});\n","import React, {FC} from 'react';\nimport {Message} from '../Message';\nimport {useDispatch, useSelector} from '../../../store/redux-hooks';\nimport {selectConversation} from '../../../store/selectors/ai/chat';\nimport {loadMoreConversationItems} from '../../../store/actions/ai/chat';\nimport {Button, Flex, Icon, Loader} from '@gravity-ui/uikit';\nimport ChevronUpIcon from '@gravity-ui/icons/svgs/chevron-up.svg';\nimport i18n from './i18n';\n\nexport const Messages: FC = () => {\n const dispatch = useDispatch();\n const {items, hasMore, loading} = useSelector(selectConversation);\n\n const handleLoadMore = () => {\n dispatch(loadMoreConversationItems());\n };\n\n return (\n <>\n {hasMore && (\n <Flex justifyContent=\"center\" alignItems=\"center\" direction=\"column\">\n {loading ? (\n <Loader size=\"s\" />\n ) : (\n <Button view=\"outlined\" onClick={handleLoadMore} disabled={loading}>\n <Icon data={ChevronUpIcon} size={16} />\n {i18n('action_load-older')}\n </Button>\n )}\n </Flex>\n )}\n {items.map((message) => {\n const key = 'id' in message ? message.id : message.error.message;\n return <Message key={key} message={message} />;\n })}\n </>\n );\n};\n\nMessages.displayName = 'Messages';\n","import React, {FC} from 'react';\nimport {useSelector} from '../../store/redux-hooks';\nimport {selectChatSending, selectCurrentAnswer} from '../../store/selectors/ai/chat';\nimport {Message} from './Message';\nimport block from 'bem-cn-lite';\nimport './CurrentAnswer.scss';\n\nconst b = block('current-answer');\n\ntype Props = {\n className?: string;\n};\n\nconst LoadingDots: FC<{className?: string}> = ({className}) => {\n return (\n <div className={b('loading-dots', className)}>\n <span className={b('dot')} />\n <span className={b('dot')} />\n <span className={b('dot')} />\n </div>\n );\n};\n\nexport const CurrentAnswer: FC<Props> = ({className}) => {\n const answer = useSelector(selectCurrentAnswer);\n const isSending = useSelector(selectChatSending);\n\n if (isSending && !answer) return <LoadingDots className={className} />;\n\n if (!answer) return null;\n\n return (\n <Message\n className={className}\n message={{\n id: 'current-answer',\n type: 'answer',\n state: 'progress',\n value: answer,\n }}\n />\n );\n};\n","import {addI18Keysets} from '../../../../i18n';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:ai.chat.history', {en, ru});\n","import React, {FC} from 'react';\nimport {Button, Flex, Icon, Text} from '@gravity-ui/uikit';\nimport TrashBinIcon from '@gravity-ui/icons/svgs/trash-bin.svg';\nimport block from 'bem-cn-lite';\nimport './ChatHistoryItem.scss';\n\nconst b = block('yt-chart-history-item');\n\ntype Props = {\n id: string;\n topic?: string;\n onClick: (id: string) => void;\n onDelete: (id: string) => void;\n};\n\nexport const ChatHistoryItem: FC<Props> = ({id, topic, onClick, onDelete}) => {\n return (\n <Flex\n className={b()}\n grow={1}\n alignItems=\"center\"\n justifyContent=\"space-between\"\n onClick={() => onClick(id)}\n >\n <Text ellipsis>{topic || id}</Text>\n <Button\n className={b('remove-button')}\n onClick={(e) => {\n e.stopPropagation();\n onDelete(id);\n }}\n view=\"flat\"\n >\n <Icon data={TrashBinIcon} size={16} />\n </Button>\n </Flex>\n );\n};\n","import React, {FC, useCallback} from 'react';\nimport {useDispatch, useSelector} from '../../../store/redux-hooks';\nimport block from 'bem-cn-lite';\nimport {\n deleteConversation,\n loadConversation,\n loadMoreConversations,\n} from '../../../store/actions/ai/chat';\nimport {Flex, List, Text} from '@gravity-ui/uikit';\nimport {\n selectConversationsGroupedByDate,\n selectConversationsHasMore,\n selectConversationsLoading,\n} from '../../../store/selectors/ai/chat';\nimport {NoContent} from '../../../components/NoContent/NoContent';\nimport {InfiniteScrollLoader} from '../../../components/InfiniteScrollLoader';\nimport i18n from './i18n';\nimport './ChatHistory.scss';\nimport {Conversation} from '../../../../shared/ai-chat';\nimport hammer from '../../../common/hammer';\nimport {ChatHistoryItem} from './ChatHistoryItem';\n\nconst b = block('yt-chart-history');\n\nexport const ChatHistory: FC = () => {\n const dispatch = useDispatch();\n const groupedConversations = useSelector(selectConversationsGroupedByDate);\n const hasMore = useSelector(selectConversationsHasMore);\n const loading = useSelector(selectConversationsLoading);\n\n const handleConversationClick = (conversationId: string) => {\n dispatch(loadConversation(conversationId));\n };\n\n const handleConversationDelete = (conversationId: string) => {\n dispatch(deleteConversation(conversationId));\n };\n\n const handleLoadMore = useCallback(() => {\n dispatch(loadMoreConversations());\n }, [dispatch]);\n\n if (!groupedConversations.length) {\n return (\n <Flex justifyContent=\"center\" alignItems=\"center\" grow={1}>\n <NoContent warning={i18n('context_no-conversations')} vertical />\n </Flex>\n );\n }\n\n return (\n <div className={b()}>\n {groupedConversations.map((group) => (\n <div key={group.date} className={b('group')}>\n <div className={b('group-header')}>\n <Text color=\"secondary\">\n {hammer.format['DateTime'](group.date, {format: 'day'})}\n </Text>\n </div>\n <List<Conversation>\n className={b('list')}\n filterable={false}\n items={group.items}\n renderItem={(item, _) => {\n return (\n <ChatHistoryItem\n id={item.id}\n topic={item.metadata?.topic}\n onClick={handleConversationClick}\n onDelete={handleConversationDelete}\n />\n );\n }}\n itemHeight={40}\n virtualized={false}\n />\n </div>\n ))}\n {hasMore && (\n <InfiniteScrollLoader\n className={b('pagination')}\n loading={loading}\n onLoadMore={handleLoadMore}\n />\n )}\n </div>\n );\n};\n","import React, {FC, useCallback, useRef} from 'react';\nimport {\n selectChatError,\n selectChatHistoryIsVisible,\n selectChatIsVisible,\n selectChatLoading,\n selectChatSending,\n} from '../../store/selectors/ai/chat';\nimport {useSelector} from '../../store/redux-hooks';\nimport {EmptyChat} from './EmptyChat';\nimport {Messages} from './Messages';\nimport {CurrentAnswer} from './CurrentAnswer';\nimport {ChatHistory} from './ChatHistory';\nimport useResizeObserver from '../../hooks/useResizeObserver';\nimport './ChatBody.scss';\nimport cn from 'bem-cn-lite';\nimport {Flex, Loader} from '@gravity-ui/uikit';\nimport {YTErrorBlock} from '../../components/Block/Block';\n\nconst block = cn('yt-ai-chat-body');\n\ntype Props = {\n isUserScrolledUp: boolean;\n scrollToBottom: () => void;\n checkScrollPosition: () => void;\n};\n\nexport const ChatBody: FC<Props> = ({isUserScrolledUp, scrollToBottom, checkScrollPosition}) => {\n const messagesRef = useRef<HTMLDivElement>(null);\n const isLoading = useSelector(selectChatLoading);\n const isSending = useSelector(selectChatSending);\n const chatIsVisible = useSelector(selectChatIsVisible);\n const historyIsVisible = useSelector(selectChatHistoryIsVisible);\n const error = useSelector(selectChatError);\n\n const handleContainerResize = useCallback(() => {\n checkScrollPosition();\n if (isSending && !isUserScrolledUp) {\n scrollToBottom();\n }\n }, [checkScrollPosition, isUserScrolledUp, isSending, scrollToBottom]);\n\n useResizeObserver({\n element: chatIsVisible ? (messagesRef.current ?? undefined) : undefined,\n onResize: handleContainerResize,\n });\n\n if (error) {\n return (\n <Flex alignItems=\"center\" justifyContent=\"center\" grow={1}>\n <YTErrorBlock error={error} />\n </Flex>\n );\n }\n\n if (isLoading) {\n return (\n <Flex alignItems=\"center\" justifyContent=\"center\" grow={1}>\n <Loader />\n </Flex>\n );\n }\n\n if (chatIsVisible) {\n return (\n <div ref={messagesRef} className={block('messages')}>\n <Messages />\n <CurrentAnswer className={block('current-answer')} />\n </div>\n );\n }\n\n if (historyIsVisible) {\n return <ChatHistory />;\n }\n\n return <EmptyChat />;\n};\n","import React, {FC, useCallback, useEffect, useRef, useState} from 'react';\nimport './Chat.scss';\nimport cn from 'bem-cn-lite';\nimport {ChatInput} from './ChatInput';\nimport {ChatHeader} from './ChatHeader';\nimport {ChatBody} from './ChatBody';\n\nconst INPUT_DEFAULT_HEIGHT = 50;\nconst SCROLL_THRESHOLD = INPUT_DEFAULT_HEIGHT;\n\nconst block = cn('yt-ai-chat');\n\nconst Chat: FC = () => {\n const [isScrolledToBottom, setIsScrolledToBottom] = useState(true);\n const [isUserScrolledUp, setIsUserScrolledUp] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const checkScrollPosition = useCallback(() => {\n if (!containerRef.current) return;\n\n const {scrollTop, scrollHeight, clientHeight} = containerRef.current;\n const isAtBottom = scrollHeight - (scrollTop + clientHeight) < SCROLL_THRESHOLD;\n\n setIsScrolledToBottom(isAtBottom);\n setIsUserScrolledUp(!isAtBottom);\n }, []);\n\n const scrollToBottom = useCallback((behavior: ScrollBehavior = 'auto') => {\n if (!containerRef.current) return;\n\n containerRef.current.scrollTo({\n top: containerRef.current.scrollHeight,\n behavior,\n });\n }, []);\n\n const handleUserScroll = useCallback(() => {\n checkScrollPosition();\n }, [checkScrollPosition]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n container.addEventListener('scroll', handleUserScroll);\n return () => {\n container.removeEventListener('scroll', handleUserScroll);\n };\n }, [handleUserScroll]);\n\n return (\n <div ref={containerRef} className={block()}>\n <ChatHeader className={block('header')} />\n <ChatBody\n scrollToBottom={scrollToBottom}\n checkScrollPosition={checkScrollPosition}\n isUserScrolledUp={isUserScrolledUp}\n />\n <ChatInput\n showScrollButton={!isScrolledToBottom}\n onScrollClick={() => scrollToBottom('smooth')}\n />\n </div>\n );\n};\n\nexport default Chat;\n","const SvgArrowUpRightFromSquare = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M10 1.5A.75.75 0 0 0 10 3h1.94L6.97 7.97a.75.75 0 0 0 1.06 1.06L13 4.06V6a.75.75 0 0 0 1.5 0V2.25a.75.75 0 0 0-.75-.75zM7.5 3.25a.75.75 0 0 0-.75-.75H4.5a3 3 0 0 0-3 3v6a3 3 0 0 0 3 3h6a3 3 0 0 0 3-3V9.25a.75.75 0 0 0-1.5 0v2.25a1.5 1.5 0 0 1-1.5 1.5h-6A1.5 1.5 0 0 1 3 11.5v-6A1.5 1.5 0 0 1 4.5 4h2.25a.75.75 0 0 0 .75-.75\" clipRule=\"evenodd\" /></svg>;\nexport default SvgArrowUpRightFromSquare;","import type {TabsOrientation} from './plugin/transform';\nimport type {TabsController} from './runtime/TabsController';\n\nexport const TABS_CLASSNAME = 'yfm-tabs';\nexport const TABS_VERTICAL_CLASSNAME = 'yfm-tabs-vertical';\nexport const TABS_LIST_CLASSNAME = 'yfm-tab-list';\nexport const TAB_CLASSNAME = 'yfm-tab';\nexport const TAB_PANEL_CLASSNAME = 'yfm-tab-panel';\nexport const ACTIVE_CLASSNAME = 'active';\nexport const VERTICAL_TAB_CLASSNAME = 'yfm-vertical-tab';\n\nexport const GROUP_DATA_KEY = 'data-diplodoc-group';\nexport const TAB_DATA_KEY = 'data-diplodoc-key';\nexport const TAB_DATA_ID = 'data-diplodoc-id';\nexport const TAB_DATA_VERTICAL_TAB = 'data-diplodoc-vertical-tab';\nexport const TAB_ACTIVE_KEY = 'data-diplodoc-is-active';\nexport const TAB_RADIO_KEY = 'data-diplodoc-input';\n\nexport const DEFAULT_TABS_GROUP_PREFIX = 'defaultTabsGroup-';\n\nexport interface Tab {\n group?: string;\n key: string;\n align: TabsOrientation;\n}\n\nexport interface SelectedTabEvent {\n tab: Tab;\n currentTabId?: string;\n}\n\nexport const GLOBAL_SYMBOL: unique symbol = Symbol.for('diplodocTabs');\n\ndeclare global {\n interface Window {\n [GLOBAL_SYMBOL]: TabsController;\n }\n}\n","export const getEventTarget = (event: Event) => {\n const path = event.composedPath();\n return Array.isArray(path) && path.length > 0 ? path[0] : event.target;\n};\n\nexport const isCustom = (event: Event) => {\n const target = getEventTarget(event);\n return !target || !(target as HTMLElement).matches;\n};\n\nexport const getClosestScrollableParent = (element: HTMLElement): HTMLElement | undefined => {\n if (Math.abs(element.scrollHeight - element.clientHeight) > 1) {\n return element;\n }\n\n return element.parentElement ? getClosestScrollableParent(element.parentElement) : undefined;\n};\n\nexport interface ElementOffset {\n top: number;\n left: number;\n scrollTop: number;\n scrollLeft: number;\n}\n\nexport const getOffsetByScrollableParent = (\n element: HTMLElement,\n scrollableParent: HTMLElement,\n): ElementOffset => {\n const elementBounds = element.getBoundingClientRect();\n const scrollableParentBounds = scrollableParent.getBoundingClientRect();\n return {\n top: elementBounds.top - scrollableParentBounds.top,\n left: elementBounds.left - scrollableParentBounds.left,\n scrollTop: scrollableParent.scrollTop,\n scrollLeft: scrollableParent.scrollLeft,\n };\n};\n","import {\n ACTIVE_CLASSNAME,\n DEFAULT_TABS_GROUP_PREFIX,\n GROUP_DATA_KEY,\n SelectedTabEvent,\n TABS_CLASSNAME,\n TABS_LIST_CLASSNAME,\n TABS_VERTICAL_CLASSNAME,\n TAB_CLASSNAME,\n TAB_DATA_ID,\n TAB_DATA_KEY,\n TAB_PANEL_CLASSNAME,\n Tab,\n} from '../common';\nimport type {TabsOrientation} from '../plugin/transform';\nimport {\n ElementOffset,\n getClosestScrollableParent,\n getEventTarget,\n getOffsetByScrollableParent,\n isCustom,\n} from './utils';\n\nconst Selector = {\n TABS: `.${TABS_CLASSNAME}`,\n TAB_LIST: `.${TABS_LIST_CLASSNAME}`,\n TAB: `.${TAB_CLASSNAME}`,\n TAB_PANEL: `.${TAB_PANEL_CLASSNAME}`,\n VERTICAL_TABS: `.${TABS_VERTICAL_CLASSNAME}`,\n};\n\nexport interface ISelectTabByIdOptions {\n scrollToElement: boolean;\n}\n\ntype Handler = (data: SelectedTabEvent) => void;\n\ntype TabSwitchDirection = 'left' | 'right';\n\nexport class TabsController {\n private _document: Document;\n\n private _onSelectTabHandlers: Set<Handler> = new Set();\n\n constructor(document: Document) {\n this._document = document;\n this._document.addEventListener('click', (event) => {\n const target = getEventTarget(event) as HTMLElement;\n const areVertical = this.areTabsVertical(target);\n\n if (isCustom(event)) {\n return;\n }\n\n if (!(this.isValidTabElement(target) || areVertical)) {\n return;\n }\n\n const tab = this.getTabDataFromHTMLElement(target);\n\n if (tab) {\n this._selectTab(tab, target);\n }\n });\n this._document.addEventListener('keydown', (event) => {\n let direction: TabSwitchDirection | null = null;\n switch (event.key) {\n case 'ArrowLeft': {\n direction = 'left';\n break;\n }\n case 'ArrowRight': {\n direction = 'right';\n break;\n }\n }\n if (!direction) {\n return;\n }\n\n const target = getEventTarget(event) as HTMLElement;\n\n if (isCustom(event) || !this.isValidTabElement(target)) {\n return;\n }\n\n const {tabs, nodes} = this.getTabs(target);\n const currentTab = this.getTabDataFromHTMLElement(target);\n const currentTabIndex = tabs.findIndex(\n ({key}) => currentTab?.key && key === currentTab.key,\n );\n if (!currentTab || tabs.length <= 1 || currentTabIndex === -1) {\n return;\n }\n\n const newIndex =\n (currentTabIndex + (direction === 'left' ? -1 : 1) + tabs.length) % tabs.length;\n\n this.selectTab(tabs[newIndex]);\n nodes[newIndex].focus();\n });\n }\n\n onSelectTab(handler: Handler) {\n this._onSelectTabHandlers.add(handler);\n\n return () => {\n this._onSelectTabHandlers.delete(handler);\n };\n }\n\n selectTabById(id: string, options?: ISelectTabByIdOptions) {\n const target = this._document.querySelector(\n `${Selector.TAB}[${TAB_DATA_ID}=\"${id}\"]`,\n ) as HTMLElement;\n\n if (!target || !this.isValidTabElement(target)) {\n return;\n }\n\n const tab = this.getTabDataFromHTMLElement(target);\n\n if (tab) {\n this._selectTab(tab, target);\n }\n\n if (options?.scrollToElement) {\n target.scrollIntoView();\n }\n }\n\n selectTab(tab: Tab) {\n this._selectTab(tab);\n }\n\n private _selectTab(tab: Tab, targetTab?: HTMLElement) {\n const {group, key, align} = tab;\n\n if (!group) {\n return;\n }\n\n const scrollableParent = targetTab && getClosestScrollableParent(targetTab);\n const previousTargetOffset =\n scrollableParent && getOffsetByScrollableParent(targetTab, scrollableParent);\n\n const updatedTabs = this.updateHTML({group, key, align}, align);\n\n if (updatedTabs > 0) {\n this.fireSelectTabEvent({group, key, align}, targetTab?.dataset.diplodocId);\n\n if (previousTargetOffset) {\n this.resetScroll(targetTab, scrollableParent, previousTargetOffset);\n }\n }\n }\n\n private updateHTML(tab: Required<Tab>, align: TabsOrientation) {\n switch (align) {\n case 'vertical': {\n return this.updateHTMLVertical(tab);\n }\n case 'horizontal': {\n return this.updateHTMLHorizontal(tab);\n }\n }\n\n return 0;\n }\n\n private updateHTMLVertical(tab: Required<Tab>) {\n const {group, key} = tab;\n\n const [tabs] = this._document.querySelectorAll(\n `${Selector.TABS}[${GROUP_DATA_KEY}=\"${group}\"] ${Selector.TAB}[${TAB_DATA_KEY}=\"${key}\"]`,\n );\n\n let updated = 0;\n const root = tabs.parentNode!;\n const elements = root.children;\n\n for (let i = 0; i < elements.length; i += 2) {\n const [title, content] = [elements.item(i), elements.item(i + 1)] as HTMLElement[];\n\n const input = title.children.item(0) as HTMLInputElement;\n\n if (input.hasAttribute('checked')) {\n title.classList.remove('active');\n content?.classList.remove('active');\n input.removeAttribute('checked');\n }\n\n if (title === tabs) {\n title.classList.add('active');\n content?.classList.add('active');\n input.setAttribute('checked', 'true');\n }\n\n updated++;\n }\n\n return updated;\n }\n\n private updateHTMLHorizontal(tab: Required<Tab>) {\n const {group, key} = tab;\n\n const tabs = this._document.querySelectorAll(\n `${Selector.TABS}[${GROUP_DATA_KEY}=\"${group}\"] ${Selector.TAB}[${TAB_DATA_KEY}=\"${key}\"]`,\n );\n\n let updated = 0;\n\n tabs.forEach((element) => {\n const htmlElem = element as HTMLElement;\n if (!this.isValidTabElement(htmlElem) || htmlElem.dataset.diplodocIsActive === 'true') {\n return;\n }\n\n updated++;\n\n const tab = element;\n const tabList = tab.parentNode;\n const tabsContainer = tabList?.parentNode;\n const allTabs = Array.from(tabList?.querySelectorAll(Selector.TAB) || []);\n const allPanels = Array.from(tabsContainer?.children || []).filter((node) =>\n node.classList.contains(TAB_PANEL_CLASSNAME),\n );\n const targetIndex = allTabs.indexOf(tab);\n\n allTabs.forEach((tab, i) => {\n const panel = allPanels[i];\n const isTargetTab = i === targetIndex;\n const htmlElem = tab as HTMLElement;\n\n htmlElem.dataset.diplodocIsActive = isTargetTab ? 'true' : 'false';\n\n tab.classList.toggle(ACTIVE_CLASSNAME, isTargetTab);\n tab.setAttribute('aria-selected', isTargetTab.toString());\n tab.setAttribute('tabindex', isTargetTab ? '0' : '-1');\n panel.classList.toggle(ACTIVE_CLASSNAME, isTargetTab);\n });\n });\n\n return updated;\n }\n\n private resetScroll(\n target: HTMLElement,\n scrollableParent: HTMLElement,\n previousTargetOffset: ElementOffset,\n ) {\n const targetOffset = getOffsetByScrollableParent(target, scrollableParent);\n const topDelta = targetOffset.top - previousTargetOffset.top;\n const leftDelta = targetOffset.left - previousTargetOffset.left;\n const scrollTopDelta = targetOffset.scrollTop - previousTargetOffset.scrollTop;\n const scrollLeftDelta = targetOffset.scrollLeft - previousTargetOffset.scrollLeft;\n scrollableParent.scrollTo(\n scrollableParent.scrollLeft + leftDelta - scrollLeftDelta,\n scrollableParent.scrollTop + topDelta - scrollTopDelta,\n );\n }\n\n private fireSelectTabEvent(tab: Required<Tab>, diplodocId?: string) {\n const {group, key, align} = tab;\n\n const eventTab: Tab = group.startsWith(DEFAULT_TABS_GROUP_PREFIX) ? {key, align} : tab;\n\n this._onSelectTabHandlers.forEach((handler) => {\n handler({tab: eventTab, currentTabId: diplodocId});\n });\n }\n\n private isValidTabElement(element: HTMLElement) {\n const tabList =\n element.matches(Selector.TAB) && element.dataset.diplodocId\n ? element.closest(Selector.TAB_LIST)\n : null;\n\n return tabList?.closest(Selector.TABS);\n }\n\n private areTabsVertical(target: HTMLElement) {\n const parent = target.parentElement;\n\n return target.dataset.diplodocVerticalTab || Boolean(parent?.dataset.diplodocVerticalTab);\n }\n\n private getTabDataFromHTMLElement(target: HTMLElement): Tab | null {\n if (this.areTabsVertical(target)) {\n const tab = target.dataset.diplodocVerticalTab ? target : target.parentElement!;\n\n const key = tab.dataset.diplodocKey;\n const group = (tab.closest(Selector.TABS) as HTMLElement)?.dataset.diplodocGroup;\n return key && group ? {group, key, align: 'vertical'} : null;\n }\n\n const key = target.dataset.diplodocKey;\n const group = (target.closest(Selector.TABS) as HTMLElement)?.dataset.diplodocGroup;\n return key && group ? {group, key, align: 'horizontal'} : null;\n }\n\n private getTabs(target: HTMLElement): {tabs: Tab[]; nodes: NodeListOf<HTMLElement>} {\n const group = (target.closest(Selector.TABS) as HTMLElement)?.dataset.diplodocGroup;\n const nodes = (\n target.closest(Selector.TAB_LIST) as HTMLElement\n )?.querySelectorAll<HTMLElement>(Selector.TAB);\n\n const tabs: Tab[] = [];\n nodes.forEach((tabEl) => {\n const key = tabEl?.dataset.diplodocKey;\n if (!key) {\n return;\n }\n\n /** horizontal-only supported feature (used in left/right button click) */\n tabs.push({\n group,\n key,\n align: 'horizontal',\n });\n });\n\n return {tabs, nodes};\n }\n}\n","'use strict';\n\n// Node getRootNode(optional GetRootNodeOptions options);\n\n/**\n * Returns the context object’s shadow-including root if options’s composed is true.\n * Returns the context object’s root otherwise.\n *\n * The root of an object is itself, if its parent is null, or else it is the root of its parent.\n *\n * The shadow-including root of an object is its root’s host’s shadow-including root,\n * if the object’s root is a shadow root, and its root otherwise.\n *\n * https://dom.spec.whatwg.org/#dom-node-getrootnode\n *\n * @memberof Node.prototype\n * @param {!Object} [opt = {}] - Options.\n * @param {!boolean} [opt.composed] - See above description.\n * @returns {!Node} The root node.\n */\nfunction getRootNode(opt) {\n var composed = typeof opt === 'object' && Boolean(opt.composed);\n\n return composed ? getShadowIncludingRoot(this) : getRoot(this);\n}\n\nfunction getShadowIncludingRoot(node) {\n var root = getRoot(node);\n\n if (isShadowRoot(root)) {\n return getShadowIncludingRoot(root.host);\n }\n\n return root;\n}\n\nfunction getRoot(node) {\n if (node.parentNode != null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\nfunction isShadowRoot(node) {\n return node.nodeName === '#document-fragment' && node.constructor.name === 'ShadowRoot';\n}\n\nif (typeof module === 'object' && module.exports) {\n module.exports = getRootNode;\n}\n","import {GLOBAL_SYMBOL} from '../common';\nimport {TabsController} from './TabsController';\nimport './scss/tabs.scss';\n\nif (typeof window !== 'undefined' && typeof document !== 'undefined' && !window[GLOBAL_SYMBOL]) {\n window[GLOBAL_SYMBOL] = new TabsController(document);\n}\n","import getRootNode from 'get-root-node-polyfill';\n\nif (typeof document !== 'undefined') {\n // matches polyfill for old edge\n (function (e) {\n const matches =\n e.matches ||\n e.matchesSelector ||\n e.webkitMatchesSelector ||\n e.mozMatchesSelector ||\n e.msMatchesSelector ||\n e.oMatchesSelector;\n\n if (matches) {\n e.matches = e.matchesSelector = matches;\n } else {\n e.matches = e.matchesSelector = function matches(selector) {\n const rootNode = e.getRootNode ? e.getRootNode() : getRootNode.call(e);\n const matches = rootNode.querySelectorAll(selector);\n const th = this;\n return Array.prototype.some.call(matches, (e) => {\n return e === th;\n });\n };\n }\n })(Element.prototype);\n}\n","export const getEventTarget = (event: Event) => {\n const path = event.composedPath();\n return Array.isArray(path) && path.length > 0 ? path[0] : event.target;\n};\n\nexport const isCustom = (event: Event) => {\n const target = getEventTarget(event);\n return !target || !(target as HTMLElement).matches;\n};\n","import {getEventTarget, isCustom} from './utils';\n\nconst BUTTON_SELECTOR = '.yfm-clipboard-button';\n\nfunction copyToClipboard(text: string) {\n if (!text) {\n return Promise.resolve();\n }\n\n if (navigator.clipboard && typeof navigator.clipboard.writeText) {\n return navigator.clipboard.writeText(text);\n }\n const textarea = document.createElement('textarea');\n textarea.setAttribute('style', 'position: absolute; left: 1000%');\n textarea.textContent = text;\n document.body.append(textarea);\n\n textarea.select();\n document.execCommand('copy');\n\n document.body.removeChild(textarea);\n\n return Promise.resolve();\n}\n\nfunction notifySuccess(svgButton: HTMLElement | null) {\n if (!svgButton) {\n return;\n }\n\n const id = svgButton.getAttribute('data-animation');\n // @ts-expect-error\n const icon = svgButton.getRootNode().getElementById(`visibileAnimation-${id}`);\n\n if (!icon) {\n return;\n }\n\n icon.beginElement();\n}\n\nif (typeof document !== 'undefined') {\n document.addEventListener('click', (event) => {\n const target = getEventTarget(event) as HTMLElement;\n\n if (isCustom(event) || !target.matches(BUTTON_SELECTOR)) {\n return;\n }\n\n const parent = target.parentNode;\n\n if (!parent) {\n return;\n }\n\n const code = parent.querySelector<HTMLElement>('pre code');\n if (!code) {\n return;\n }\n\n copyToClipboard(code.innerText).then(() => {\n notifySuccess(parent.querySelector('.yfm-clipboard-button'));\n });\n });\n}\n","import {getEventTarget, isCustom} from './utils';\n\nconst Selector = {\n CUT: '.yfm .yfm-cut',\n TITLE: '.yfm .yfm-cut-title',\n CONTENT: '.yfm .yfm-cut-content',\n};\n\nconst ClassName = {\n OPEN: 'open',\n};\n\nfunction toggleCut(element: HTMLElement) {\n const cutNode = element.parentNode;\n\n if (!(cutNode instanceof HTMLElement)) {\n return;\n }\n\n cutNode.classList.toggle(ClassName.OPEN);\n}\n\nfunction matchTitle(target: EventTarget | null) {\n if (!(target instanceof HTMLElement)) {\n return false;\n }\n\n return target?.matches?.(Selector.TITLE);\n}\n\nfunction findTitleInPath(event: MouseEvent): HTMLElement | undefined {\n const target = getEventTarget(event);\n\n if (matchTitle(target)) {\n return target as HTMLElement;\n }\n\n const path = event.composedPath?.();\n\n return path?.find(matchTitle) as HTMLElement | undefined;\n}\n\nif (typeof document !== 'undefined') {\n document.addEventListener('click', (event) => {\n if (isCustom(event)) {\n return;\n }\n\n const title = findTitleInPath(event);\n\n if (!title) {\n return;\n }\n\n toggleCut(title);\n });\n}\n","export const Selector = {\n TITLE: '.yfm .yfm-term_title',\n CONTENT: '.yfm .yfm-term_dfn',\n};\nexport const openClass = 'open';\nexport const openDefinitionClass = Selector.CONTENT.replace(/\\./g, '') + ' ' + openClass;\nlet isListenerNeeded = true;\n\nexport function createDefinitionElement(termElement: HTMLElement) {\n const termKey = termElement.getAttribute('term-key');\n const definitionTemplate = document.getElementById(\n `${termKey}_template`,\n ) as HTMLTemplateElement;\n const definitionElement = definitionTemplate?.content.cloneNode(true).firstChild as HTMLElement;\n\n definitionTemplate?.parentElement?.appendChild(definitionElement);\n definitionTemplate.remove();\n\n return definitionElement;\n}\n\nexport function setDefinitionId(definitionElement: HTMLElement, termElement: HTMLElement): void {\n const termId = termElement.getAttribute('id') || Math.random().toString(36).substr(2, 8);\n definitionElement?.setAttribute('term-id', termId);\n}\n\nexport function setDefinitionPosition(\n definitionElement: HTMLElement,\n termElement: HTMLElement,\n): void {\n const {\n x: termX,\n y: termY,\n right: termRight,\n left: termLeft,\n width: termWidth,\n height: termHeight,\n } = termElement.getBoundingClientRect();\n\n const termParent = termParentElement(termElement);\n\n if (!termParent) {\n return;\n }\n\n const {right: termParentRight, left: termParentLeft} = termParent.getBoundingClientRect();\n\n if ((termParentRight < termLeft || termParentLeft > termRight) && !isListenerNeeded) {\n closeDefinition(definitionElement);\n return;\n }\n\n if (isListenerNeeded && termParent) {\n termParent.addEventListener('scroll', termOnResize);\n isListenerNeeded = false;\n }\n\n const relativeX = Number(definitionElement.getAttribute('relativeX'));\n const relativeY = Number(definitionElement.getAttribute('relativeY'));\n\n if (relativeX === termX && relativeY === termY) {\n return;\n }\n\n definitionElement.setAttribute('relativeX', String(termX));\n definitionElement.setAttribute('relativeY', String(termY));\n\n const offsetTop = termHeight + 5;\n const definitionParent = definitionElement.parentElement;\n\n if (!definitionParent) {\n return;\n }\n\n const {width: definitionWidth} = definitionElement.getBoundingClientRect();\n const {left: definitionParentLeft} = definitionParent.getBoundingClientRect();\n\n // If definition not fit document change base alignment\n const definitionLeftCoordinate = Number(getCoords(termElement).left);\n const definitionRightCoordinate = definitionWidth + definitionLeftCoordinate;\n\n const definitionOutOfScreenOnLeft = definitionLeftCoordinate - definitionWidth < 0;\n const definitionOutOfScreenOnRight = definitionRightCoordinate > document.body.clientWidth;\n\n const isAlignSwapped = definitionOutOfScreenOnRight || document.dir === 'rtl';\n const fitDefinitionDocument =\n isAlignSwapped && !definitionOutOfScreenOnLeft ? definitionWidth - termWidth : 0;\n const customHeaderTop = getCoords(definitionParent).top - definitionParent.offsetTop;\n\n definitionElement.style.top =\n Number(getCoords(termElement).top + offsetTop - customHeaderTop) + 'px';\n definitionElement.style.left =\n Number(\n getCoords(termElement).left -\n definitionParentLeft +\n definitionParent.offsetLeft -\n fitDefinitionDocument,\n ) + 'px';\n}\n\nfunction termOnResize() {\n const openDefinition = document.getElementsByClassName(openDefinitionClass)[0] as HTMLElement;\n\n if (!openDefinition) {\n return;\n }\n const termId = openDefinition.getAttribute('term-id') || '';\n const termElement = document.getElementById(termId);\n\n if (!termElement) {\n return;\n }\n\n setDefinitionPosition(openDefinition, termElement);\n}\n\nfunction termParentElement(term: HTMLElement | null) {\n if (!term) {\n return null;\n }\n\n const closestScrollableParent = term.closest('table') || term.closest('code');\n\n return closestScrollableParent || term.parentElement;\n}\n\nexport function closeDefinition(definition: HTMLElement) {\n definition.classList.remove(openClass);\n const termId = definition.getAttribute('term-id') || '';\n const termParent = termParentElement(document.getElementById(termId));\n\n if (!termParent) {\n return;\n }\n\n termParent.removeEventListener('scroll', termOnResize);\n isListenerNeeded = true;\n}\n\nfunction getCoords(elem: HTMLElement) {\n const box = elem.getBoundingClientRect();\n\n const body = document.body;\n const docEl = document.documentElement;\n\n const scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;\n const scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft;\n\n const clientTop = docEl.clientTop || body.clientTop || 0;\n const clientLeft = docEl.clientLeft || body.clientLeft || 0;\n\n const top = box.top + scrollTop - clientTop;\n const left = box.left + scrollLeft - clientLeft;\n\n return {top: Math.round(top), left: Math.round(left)};\n}\n","import {\n Selector,\n closeDefinition,\n createDefinitionElement,\n openClass,\n openDefinitionClass,\n setDefinitionId,\n setDefinitionPosition,\n} from './utils';\nimport {getEventTarget, isCustom} from '../utils';\n\nif (typeof document !== 'undefined') {\n document.addEventListener('click', (event) => {\n const openDefinition = document.getElementsByClassName(\n openDefinitionClass,\n )[0] as HTMLElement;\n const target = getEventTarget(event) as HTMLElement;\n\n const termId = target.getAttribute('id');\n const termKey = target.getAttribute('term-key');\n let definitionElement = document.getElementById(termKey + '_element');\n\n if (termKey && !definitionElement) {\n definitionElement = createDefinitionElement(target);\n }\n\n const isSameTerm = openDefinition && termId === openDefinition.getAttribute('term-id');\n if (isSameTerm) {\n closeDefinition(openDefinition);\n return;\n }\n\n const isTargetDefinitionContent = target.closest(\n [Selector.CONTENT.replace(' ', ''), openClass].join('.'),\n );\n\n if (openDefinition && !isTargetDefinitionContent) {\n closeDefinition(openDefinition);\n }\n\n if (isCustom(event) || !target.matches(Selector.TITLE) || !definitionElement) {\n return;\n }\n\n setDefinitionId(definitionElement, target);\n setDefinitionPosition(definitionElement, target);\n\n definitionElement.classList.toggle(openClass);\n });\n\n document.addEventListener('keydown', (event) => {\n const openDefinition = document.getElementsByClassName(\n openDefinitionClass,\n )[0] as HTMLElement;\n if (event.key === 'Escape' && openDefinition) {\n closeDefinition(openDefinition);\n }\n });\n\n window.addEventListener('resize', () => {\n const openDefinition = document.getElementsByClassName(\n openDefinitionClass,\n )[0] as HTMLElement;\n\n if (!openDefinition) {\n return;\n }\n\n const termId = openDefinition.getAttribute('term-id') || '';\n const termElement = document.getElementById(termId);\n\n if (!termElement) {\n openDefinition.classList.toggle(openClass);\n return;\n }\n\n setDefinitionPosition(openDefinition, termElement);\n });\n}\n","import * as React from 'react';\nconst ChevronDown = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M2.97 5.47a.75.75 0 0 1 1.06 0L8 9.44l3.97-3.97a.75.75 0 1 1 1.06 1.06l-4.5 4.5a.75.75 0 0 1-1.06 0l-4.5-4.5a.75.75 0 0 1 0-1.06\", clipRule: \"evenodd\" })));\nexport default ChevronDown;\n","const SvgChevronDown = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M2.97 5.47a.75.75 0 0 1 1.06 0L8 9.44l3.97-3.97a.75.75 0 1 1 1.06 1.06l-4.5 4.5a.75.75 0 0 1-1.06 0l-4.5-4.5a.75.75 0 0 1 0-1.06\" clipRule=\"evenodd\" /></svg>;\nexport default SvgChevronDown;","import React, {FC, PropsWithChildren} from 'react';\nimport cn from 'bem-cn-lite';\nimport {Button, Icon, Popup, PopupProps} from '@gravity-ui/uikit';\nimport XmarkIcon from '@gravity-ui/icons/svgs/xmark.svg';\nimport './PopupWithCloseButton.scss';\n\nconst block = cn('popup-with-close-button');\n\ntype Props = {\n anchorRef: React.RefObject<HTMLElement>;\n open: boolean;\n className?: string;\n placement?: PopupProps['placement'];\n onClose: () => void;\n};\n\nexport const PopupWithCloseButton: FC<PropsWithChildren<Props>> = ({\n anchorRef,\n open,\n onClose,\n children,\n className,\n placement = 'bottom',\n}) => {\n return (\n <Popup\n anchorElement={anchorRef.current}\n open={open}\n className={block(null, className)}\n onOpenChange={(isOpen, _event, reason) => {\n if (!isOpen && reason === 'outside-press') {\n onClose();\n }\n }}\n placement={placement}\n >\n <Button view=\"flat\" className={block('close-button')} onClick={onClose}>\n <Icon data={XmarkIcon} />\n </Button>\n {children}\n </Popup>\n );\n};\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {ClickableText} from '../../components/ClickableText/ClickableText';\n\nimport './FilePicker.scss';\n\nconst block = cn('yt-file-picker');\n\ninterface Props {\n onChange: (v: FileList | null) => void;\n multiple?: boolean;\n children: React.ReactNode;\n}\n\nexport default class FilePicker extends React.Component<Props> {\n inputRef = React.createRef<HTMLInputElement>();\n\n onLinkClick = () => {\n if (!this.inputRef.current) {\n return;\n }\n\n this.inputRef.current.click();\n };\n\n onChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.onChange(event.target.files);\n };\n\n render() {\n const {children, multiple} = this.props;\n return (\n <ClickableText onClick={this.onLinkClick}>\n {children}\n <input\n ref={this.inputRef}\n className={block('input')}\n onChange={this.onChange}\n type={'file'}\n multiple={multiple}\n />\n </ClickableText>\n );\n }\n}\n","import {addI18Keysets} from '../../../i18n';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:component.file-drop-zone', {en, ru});\n","import * as React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport FilePicker from '../FilePicker/FilePicker';\nimport useFileDragDrop from './useFileDragDrop';\nimport i18n from './i18n';\n\nimport './FileDropZone.scss';\n\nconst block = cn('file-drop-zone');\n\ninterface FileDropZoneProps {\n isEmpty: boolean;\n isDropable: boolean;\n onFile: (files: FileList | null) => void;\n}\n\nexport const FileDropZone: React.FC<React.PropsWithChildren<FileDropZoneProps>> = ({\n isDropable,\n onFile,\n isEmpty,\n children,\n}) => {\n const {onDrop, onDragOver, onDragEnter, onDragLeave, isDragging} = useFileDragDrop(onFile);\n\n const renderContent = () => {\n if (children) {\n return children;\n }\n\n return (\n <div className={block('info')}>\n <div>{isDragging ? i18n('context_drop-file') : i18n('context_drag-file')}</div>\n {i18n('or')}\n <div>\n <FilePicker onChange={onFile}>{i18n('action_pick-file')}</FilePicker>\n </div>\n </div>\n );\n };\n\n return (\n <div\n className={block('drag-area', {\n dropable: isDropable,\n empty: isEmpty,\n dragging: isDragging,\n })}\n onDrop={onDrop}\n onDragEnter={onDragEnter}\n onDragLeave={onDragLeave}\n onDragOver={onDragOver}\n >\n {renderContent()}\n </div>\n );\n};\n\nexport default FileDropZone;\n","import * as React from 'react';\nimport {useCallback, useState} from 'react';\n\nexport const useFileDragDrop = (onFile: (files: FileList | null) => void) => {\n // Track drag state to provide visual feedback\n const [isDragging, setIsDragging] = useState(false);\n\n const onDragOver = useCallback((event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n }, []);\n\n const onDragEnter = useCallback((event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n setIsDragging(true);\n }, []);\n\n const onDragLeave = useCallback((event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n setIsDragging(false);\n }, []);\n\n const onDrop = useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n setIsDragging(false);\n\n const {files} = event.dataTransfer;\n\n if (!files) {\n return;\n }\n\n onFile(files);\n },\n [onFile],\n );\n\n return {\n onDragOver,\n onDragEnter,\n onDragLeave,\n onDrop,\n isDragging,\n };\n};\n\nexport default useFileDragDrop;\n","const SvgArrowUp = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M8 14.75a.75.75 0 0 1-.75-.75V3.81L4.53 6.53a.75.75 0 0 1-1.06-1.06l4-4a.75.75 0 0 1 1.06 0l4 4a.75.75 0 0 1-1.06 1.06L8.75 3.81V14a.75.75 0 0 1-.75.75\" clipRule=\"evenodd\" /></svg>;\nexport default SvgArrowUp;","import { useReducer } from 'react';\nvar toggleReducer = function (state, nextValue) {\n return typeof nextValue === 'boolean' ? nextValue : !state;\n};\nvar useToggle = function (initialValue) {\n return useReducer(toggleReducer, initialValue);\n};\nexport default useToggle;\n","import {ChevronDown} from '@gravity-ui/icons';\n\nimport {Icon} from '../Icon';\nimport type {QAProps} from '../types';\nimport {block} from '../utils/cn';\n\nimport './ArrowToggle.scss';\n\nexport interface ArrowToggleProps extends QAProps {\n size?: number;\n direction?: 'top' | 'left' | 'bottom' | 'right';\n className?: string;\n}\n\nconst b = block('arrow-toggle');\n\nexport function ArrowToggle({size = 16, direction = 'bottom', className, qa}: ArrowToggleProps) {\n return (\n <span\n style={{width: size, height: size}}\n className={b({direction}, className)}\n data-qa={qa}\n >\n <Icon data={ChevronDown} size={size} />\n </span>\n );\n}\n","const SvgCircleQuestion = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M8 13.5a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14M6.44 4.54c.43-.354.994-.565 1.56-.565 1.217 0 2.34.82 2.34 2.14 0 .377-.078.745-.298 1.1-.208.339-.513.614-.875.867-.217.153-.325.257-.379.328-.038.052-.038.07-.038.089a.75.75 0 0 1-1.5 0c0-.794.544-1.286 1.057-1.645.28-.196.4-.332.458-.426a.54.54 0 0 0 .075-.312c0-.3-.244-.641-.84-.641a1 1 0 0 0-.608.223c-.167.138-.231.287-.231.418a.75.75 0 0 1-1.5 0c0-.674.345-1.22.78-1.577M8 12a1 1 0 1 0 0-2 1 1 0 0 0 0 2\" clipRule=\"evenodd\" /></svg>;\nexport default SvgCircleQuestion;","const SvgPaperclip = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"m9.77 10.73.01-.01 3.08-3.08a3.889 3.889 0 1 0-5.5-5.5L4.73 4.77l-.01.01-1.667 1.666a5.303 5.303 0 0 0 7.5 7.5l3.167-3.166a.75.75 0 1 0-1.061-1.06l-3.166 3.166a3.803 3.803 0 1 1-5.379-5.379L5.33 6.291l.011-.01L8.421 3.2a2.39 2.39 0 0 1 3.38 3.378l-1.13 1.13-.012.012-2.995 2.994a.975.975 0 1 1-1.378-1.378L9.28 6.34a.75.75 0 0 0-1.06-1.06L5.225 8.274a2.475 2.475 0 0 0 3.5 3.5z\" clipRule=\"evenodd\" /></svg>;\nexport default SvgPaperclip;","'use client';\n\nimport * as React from 'react';\n\nimport {useForkRef, useResizeObserver} from '../../../hooks';\nimport {block} from '../../utils/cn';\n\nimport type {TextAreaProps} from './TextArea';\n\ntype Props = Omit<TextAreaProps, 'autoComplete' | 'onChange' | 'controlProps'> & {\n onChange: NonNullable<TextAreaProps['onChange']>;\n autoComplete?: React.TextareaHTMLAttributes<HTMLTextAreaElement>['autoComplete'];\n controlProps: NonNullable<TextAreaProps['controlProps']>;\n};\n\nconst b = block('text-area');\n\nconst calculateLinesByScrollHeight = (args: {\n height: number;\n paddingTop: number;\n paddingBottom: number;\n lineHeight: number;\n}) => {\n const {height, lineHeight} = args;\n const paddingTop = Number.isNaN(args.paddingTop) ? 0 : args.paddingTop;\n const paddingBottom = Number.isNaN(args.paddingBottom) ? 0 : args.paddingBottom;\n\n return (height - paddingTop - paddingBottom) / lineHeight;\n};\n\nexport function TextAreaControl(props: Props) {\n const {\n name,\n id,\n tabIndex,\n autoComplete,\n placeholder,\n value,\n defaultValue,\n controlRef,\n controlProps,\n size,\n rows,\n minRows = 1,\n maxRows,\n autoFocus,\n disabled,\n readOnly,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n onKeyUp,\n onKeyPress,\n } = props;\n const innerControlRef = React.useRef<HTMLTextAreaElement>(null);\n const handleRef = useForkRef(controlRef, innerControlRef);\n const textareaRows = Math.max(rows || minRows, 1);\n const innerValue = value || innerControlRef?.current?.value;\n\n const resizeHeight = React.useCallback(() => {\n const control = innerControlRef?.current;\n const parent = control?.parentElement;\n\n if (control && parent && !rows) {\n const controlStyles = getComputedStyle(control);\n const lineHeight = parseInt(controlStyles.getPropertyValue('line-height'), 10);\n const paddingTop = parseInt(controlStyles.getPropertyValue('padding-top'), 10);\n const paddingBottom = parseInt(controlStyles.getPropertyValue('padding-bottom'), 10);\n const linesWithCarriageReturn = (innerValue?.match(/\\n/g) || []).length + 1;\n\n const parentHeight = parent.style.height;\n parent.style.height = `${parent.offsetHeight}px`;\n\n control.style.height = `${lineHeight + paddingTop + paddingBottom}px`;\n const overflow = control.style.overflow;\n control.style.overflow = 'hidden';\n\n const linesByScrollHeight = calculateLinesByScrollHeight({\n height: control.scrollHeight,\n paddingTop,\n paddingBottom,\n lineHeight,\n });\n\n const linesCount = Math.max(linesByScrollHeight, linesWithCarriageReturn);\n\n if (maxRows && maxRows < linesCount) {\n control.style.height = `${maxRows * lineHeight + paddingTop + paddingBottom}px`;\n } else if (minRows && minRows > linesCount) {\n control.style.height = `${Math.min(minRows, maxRows || Infinity) * lineHeight + paddingTop + paddingBottom}px`;\n } else {\n control.style.height = `${control.scrollHeight}px`;\n }\n\n control.style.overflow = overflow;\n parent.style.height = parentHeight;\n }\n }, [rows, maxRows, minRows, innerValue]);\n\n useResizeObserver({\n ref: rows ? undefined : innerControlRef,\n onResize: resizeHeight,\n });\n\n React.useEffect(() => {\n resizeHeight();\n }, [resizeHeight, size, value]);\n\n return (\n <textarea\n {...controlProps}\n ref={handleRef}\n style={{\n ...controlProps.style,\n height: rows ? 'auto' : undefined,\n }}\n className={b('control', controlProps.className)}\n name={name}\n id={id}\n tabIndex={tabIndex}\n placeholder={placeholder}\n value={value}\n defaultValue={defaultValue}\n rows={textareaRows}\n autoFocus={autoFocus}\n autoComplete={autoComplete}\n onChange={onChange}\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n onKeyPress={onKeyPress}\n disabled={disabled ?? controlProps.disabled}\n readOnly={readOnly ?? controlProps.readOnly}\n />\n );\n}\n","'use client';\n\nimport * as React from 'react';\n\nimport {useControlledState, useForkRef, useUniqId} from '../../../hooks';\nimport {useFormResetHandler} from '../../../hooks/private';\nimport {block} from '../../utils/cn';\nimport {ClearButton, mapTextInputSizeToButtonSize} from '../common';\nimport {OuterAdditionalContent} from '../common/OuterAdditionalContent/OuterAdditionalContent';\nimport type {\n BaseInputControlProps,\n InputControlPin,\n InputControlSize,\n InputControlView,\n} from '../types';\nimport {errorPropsMapper, getInputControlState, prepareAutoComplete} from '../utils';\n\nimport {TextAreaControl} from './TextAreaControl';\n\nimport './TextArea.scss';\n\nconst b = block('text-area');\n\nexport type TextAreaProps = BaseInputControlProps<HTMLTextAreaElement> & {\n /** The control's html attributes */\n controlProps?: React.TextareaHTMLAttributes<HTMLTextAreaElement>;\n /** The number of visible text lines for the control. If not specified, the hight will be automatically calculated based on the content */\n rows?: number;\n /** The number of minimum visible text lines for the control. Ignored if `rows` is specified */\n minRows?: number;\n /** The number of maximum visible text lines for the control. Ignored if `rows` is specified */\n maxRows?: number;\n /** An optional element displayed under the lower right corner of the control and sharing the place with the error container */\n note?: React.ReactNode;\n};\nexport type TextAreaPin = InputControlPin;\nexport type TextAreaSize = InputControlSize;\nexport type TextAreaView = InputControlView;\n\nexport const TextArea = React.forwardRef<HTMLSpanElement, TextAreaProps>(\n function TextArea(props, ref) {\n const {\n view = 'normal',\n size = 'm',\n pin = 'round-round',\n name,\n value,\n defaultValue,\n disabled,\n readOnly,\n hasClear = false,\n error,\n errorMessage: errorMessageProp,\n validationState: validationStateProp,\n autoComplete,\n id: idProp,\n tabIndex,\n style,\n className,\n qa,\n controlProps,\n note,\n onUpdate,\n onChange,\n } = props;\n\n const {errorMessage, validationState} = errorPropsMapper({\n error,\n errorMessage: errorMessageProp,\n validationState: validationStateProp,\n });\n\n const [inputValue, setInputValue] = useControlledState(value, defaultValue ?? '', onUpdate);\n const innerControlRef = React.useRef<HTMLTextAreaElement | HTMLInputElement>(null);\n const fieldRef = useFormResetHandler({initialValue: inputValue, onReset: setInputValue});\n const handleRef = useForkRef(props.controlRef, innerControlRef, fieldRef);\n const [hasVerticalScrollbar, setHasVerticalScrollbar] = React.useState(false);\n const state = getInputControlState(validationState);\n const innerId = useUniqId();\n\n const isErrorMsgVisible = validationState === 'invalid' && Boolean(errorMessage);\n const isClearControlVisible = Boolean(hasClear && !disabled && !readOnly && inputValue);\n const id = idProp || innerId;\n\n const errorMessageId = useUniqId();\n const noteId = useUniqId();\n const ariaDescribedBy = [\n controlProps?.['aria-describedby'],\n note ? noteId : undefined,\n isErrorMsgVisible ? errorMessageId : undefined,\n ]\n .filter(Boolean)\n .join(' ');\n\n const commonProps = {\n id,\n tabIndex,\n name,\n onChange(event: React.ChangeEvent<HTMLTextAreaElement>) {\n setInputValue(event.target.value);\n if (onChange) {\n onChange(event);\n }\n },\n autoComplete: prepareAutoComplete(autoComplete),\n controlProps: {\n ...controlProps,\n 'aria-describedby': ariaDescribedBy || undefined,\n 'aria-invalid': validationState === 'invalid' || undefined,\n },\n };\n\n const handleClear = (event: React.MouseEvent<HTMLSpanElement>) => {\n const control = innerControlRef.current;\n\n if (control) {\n control.focus();\n\n const syntheticEvent = Object.create(event);\n syntheticEvent.target = control;\n syntheticEvent.currentTarget = control;\n\n control.value = '';\n\n if (onChange) {\n onChange(syntheticEvent);\n }\n }\n\n setInputValue('');\n };\n\n React.useEffect(() => {\n const control = innerControlRef.current;\n\n if (control) {\n const currHasVerticalScrollbar = control.scrollHeight > control.clientHeight;\n\n if (hasVerticalScrollbar !== currHasVerticalScrollbar) {\n setHasVerticalScrollbar(currHasVerticalScrollbar);\n }\n }\n }, [inputValue, hasVerticalScrollbar]);\n\n return (\n <span\n ref={ref}\n style={style}\n className={b(\n {\n view,\n size,\n disabled,\n state,\n pin: view === 'clear' ? undefined : pin,\n 'has-clear': isClearControlVisible,\n 'has-scrollbar': hasVerticalScrollbar,\n },\n className,\n )}\n data-qa={qa}\n >\n <span className={b('content')}>\n <TextAreaControl {...props} {...commonProps} controlRef={handleRef} />\n {isClearControlVisible && (\n <ClearButton\n className={b('clear', {size})}\n size={mapTextInputSizeToButtonSize(size)}\n onClick={handleClear}\n />\n )}\n </span>\n <OuterAdditionalContent\n errorMessage={isErrorMsgVisible ? errorMessage : null}\n errorMessageId={errorMessageId}\n note={note}\n noteId={noteId}\n />\n </span>\n );\n },\n);\n"],"names":["block","cn","emptyTransformResponse","result","html","headings","logs","info","warn","error","disabled","transformMarkdown","_x","_transformMarkdown","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","_ref","text","allowHTML","_yield$wrapApiPromise","data","wrap","_context2","prev","next","wrapApiPromiseByToaster","axios","post","toasterName","skipSuccessToast","errorContent","sent","abrupt","t0","_objectSpread","message","stop","useMarkdown","_ref2","_ref2$allowHTML","_React$useState","React","_React$useState2","_slicedToArray","res","setResult","_transform","_callee","_context","transform","MD","_ref3","_useMarkdown$result","_jsx","children","className","dangerouslySetInnerHTML","__html","Markdown","memo","_ref5","customMarkdown","UIFactory","renderMarkdown","props","xmlns","fill","viewBox","fillRule","d","clipRule","InfiniteScrollLoader","loading","onLoadMore","paginationRef","useRef","useEffect","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","root","threshold","current","observe","unobserve","Flex","ref","alignItems","justifyContent","Loader","addI18Keysets","en","ru","textFileValidator","file","arrayBuffer","content","bytesToCheck","i","size","isValid","i18n","Uint8Array","Math","min","length","TextDecoder","fatal","decode","toaster","Toaster","ChatFilePopup","dispatch","useDispatch","files","useSelector","selectAttachedFiles","handleFileAdd","fileList","validFiles","_i","_Array$from","_yield$textFileValida","Array","from","add","name","title","theme","push","attachFiles","_jsxs","direction","gap","Text","variant","Tooltip","color","Icon","CircleQuestionIcon","FileDropZone","isEmpty","isDropable","onFile","map","index","ellipsis","Button","view","onClick","removeAttachedFile","handleFileRemove","TrashBinIcon","ChatFileButton","btnRef","_useToggle","useToggle","_useToggle2","open","toggleOpen","_Fragment","PaperclipIcon","concat","undefined","PopupWithCloseButton","anchorRef","onClose","placement","ChatInput","showScrollButton","onScrollClick","isSending","selectChatSending","question","selectChatQuestion","handleQuestionSubmit","sendQuestion","ChevronDownIcon","TextArea","value","onUpdate","setQuestion","onKeyDown","e","key","shiftKey","preventDefault","ArrowUpIcon","ChatHeader","resetChat","PlusIcon","toggleChatHistory","ListUlIcon","toggleChatSidePanel","XmarkIcon","EmptyChat","grow","AnswerBody","inProgress","state","onCopy","_window$getSelection","window","getSelection","toString","ClipboardButton","McpMessage","clipboardValue","isOpen","ArrowToggle","stopPropagation","McpSearchAnswer","JSON","stringify","url","Link","href","target","ArrowUpRightFromSquareIcon","McpSchemaAnswer","McpUnknownAnswer","jsonString","getMessageComponentByType","type","YTErrorBlock","Message","isQuestion","component","uiFactory","getAiChatMessageComponent","Messages","_useSelector","selectConversation","items","hasMore","loadMoreConversationItems","ChevronUpIcon","id","displayName","b","LoadingDots","CurrentAnswer","answer","selectCurrentAnswer","ChatHistoryItem","topic","onDelete","ChatHistory","groupedConversations","selectConversationsGroupedByDate","selectConversationsHasMore","selectConversationsLoading","handleConversationClick","conversationId","loadConversation","handleConversationDelete","deleteConversation","handleLoadMore","useCallback","loadMoreConversations","group","hammer","format","date","List","filterable","renderItem","item","_","_item$metadata","metadata","itemHeight","virtualized","NoContent","warning","vertical","ChatBody","_messagesRef$current","isUserScrolledUp","scrollToBottom","checkScrollPosition","messagesRef","isLoading","selectChatLoading","chatIsVisible","selectChatIsVisible","historyIsVisible","selectChatHistoryIsVisible","selectChatError","handleContainerResize","useResizeObserver","element","onResize","_useState","useState","_useState2","isScrolledToBottom","setIsScrolledToBottom","_useState3","_useState4","setIsUserScrolledUp","containerRef","_containerRef$current","scrollTop","isAtBottom","scrollHeight","clientHeight","behavior","scrollTo","top","handleUserScroll","container","addEventListener","removeEventListener","TAB_PANEL_CLASSNAME","ACTIVE_CLASSNAME","GROUP_DATA_KEY","TAB_DATA_KEY","GLOBAL_SYMBOL","getEventTarget","isCustom","getClosestScrollableParent","getOffsetByScrollableParent","Selector","getShadowIncludingRoot","node","getRoot","nodeName","constructor","isShadowRoot","host","parentNode","module","exports","opt","Boolean","composed","this","Symbol","for","event","path","composedPath","isArray","matches","abs","parentElement","scrollableParent","elementBounds","getBoundingClientRect","scrollableParentBounds","left","scrollLeft","TABS","TAB_LIST","TAB","TAB_PANEL","VERTICAL_TABS","document","_onSelectTabHandlers","Set","_document","areVertical","areTabsVertical","isValidTabElement","tab","getTabDataFromHTMLElement","_selectTab","tabs","nodes","getTabs","currentTab","currentTabIndex","findIndex","newIndex","selectTab","focus","onSelectTab","handler","delete","selectTabById","options","querySelector","scrollToElement","scrollIntoView","targetTab","align","previousTargetOffset","updateHTML","fireSelectTabEvent","dataset","diplodocId","resetScroll","updateHTMLVertical","updateHTMLHorizontal","querySelectorAll","updated","elements","input","hasAttribute","classList","remove","removeAttribute","setAttribute","htmlElem","diplodocIsActive","tabList","tabsContainer","allTabs","allPanels","filter","contains","targetIndex","indexOf","panel","isTargetTab","toggle","targetOffset","topDelta","leftDelta","scrollTopDelta","scrollLeftDelta","eventTab","startsWith","currentTabId","closest","parent","diplodocVerticalTab","_a","_b","diplodocKey","diplodocGroup","tabEl","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","selector","getRootNode","call","th","prototype","some","Element","code","Promise","resolve","navigator","clipboard","writeText","textarea","createElement","textContent","body","append","select","execCommand","removeChild","copyToClipboard","innerText","then","svgButton","getAttribute","icon","getElementById","beginElement","notifySuccess","matchTitle","HTMLElement","find","findTitleInPath","cutNode","toggleCut","TITLE","CONTENT","openClass","openDefinitionClass","replace","isListenerNeeded","setDefinitionPosition","definitionElement","termElement","x","termX","y","termY","right","termRight","termLeft","width","termWidth","height","termHeight","termParent","termParentElement","termParentRight","termParentLeft","closeDefinition","termOnResize","relativeX","Number","relativeY","String","offsetTop","definitionParent","definitionWidth","definitionParentLeft","definitionLeftCoordinate","getCoords","definitionOutOfScreenOnLeft","fitDefinitionDocument","clientWidth","dir","customHeaderTop","style","offsetLeft","openDefinition","getElementsByClassName","termId","term","definition","elem","box","docEl","documentElement","pageYOffset","pageXOffset","clientTop","clientLeft","round","termKey","definitionTemplate","cloneNode","firstChild","appendChild","createDefinitionElement","isTargetDefinitionContent","join","random","substr","setDefinitionId","Object","assign","_ref$placement","Popup","anchorElement","onOpenChange","_event","reason","FilePicker","_React$Component","_this","_classCallCheck","_len","args","_key","_callSuper","inputRef","onLinkClick","click","onChange","_inherits","_createClass","_this$props","multiple","ClickableText","_useFileDragDrop","isDragging","setIsDragging","onDragOver","onDragEnter","onDragLeave","onDrop","dataTransfer","useFileDragDrop","dropable","empty","dragging","toggleReducer","nextValue","initialValue","useReducer","qa","I","ChevronDown","TextAreaControl","tabIndex","autoComplete","placeholder","defaultValue","controlRef","controlProps","rows","minRows","maxRows","autoFocus","readOnly","onFocus","onBlur","onKeyUp","onKeyPress","innerControlRef","handleRef","useForkRef","textareaRows","max","innerValue","resizeHeight","control","controlStyles","getComputedStyle","lineHeight","parseInt","getPropertyValue","paddingTop","paddingBottom","linesWithCarriageReturn","match","parentHeight","offsetHeight","overflow","linesByScrollHeight","isNaN","calculateLinesByScrollHeight","linesCount","Infinity","pin","hasClear","errorMessage","errorMessageProp","validationState","validationStateProp","idProp","note","inputValue","setInputValue","useControlledState","fieldRef","useFormResetHandler","onReset","hasVerticalScrollbar","setHasVerticalScrollbar","innerId","useUniqId","u","isErrorMsgVisible","isClearControlVisible","errorMessageId","noteId","ariaDescribedBy","commonProps","currHasVerticalScrollbar","ClearButton","syntheticEvent","create","currentTarget","OuterAdditionalContent"],"sourceRoot":""}
|