reachat 1.0.1 → 1.0.3
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/README.md +1 -0
- package/dist/Chat.d.ts +12 -0
- package/dist/ChatContext.d.ts +3 -0
- package/dist/ChatInput.d.ts +0 -12
- package/dist/SessionMessages/{MessageFile.d.ts → SessionMessage/MessageFile.d.ts} +1 -1
- package/dist/SessionMessages/{MessageFiles.d.ts → SessionMessage/MessageFiles.d.ts} +1 -1
- package/dist/SessionMessages/{MessageSource.d.ts → SessionMessage/MessageSource.d.ts} +1 -1
- package/dist/SessionMessages/{MessageSources.d.ts → SessionMessage/MessageSources.d.ts} +1 -1
- package/dist/SessionMessages/{SessionMessage.d.ts → SessionMessage/SessionMessage.d.ts} +1 -1
- package/dist/SessionMessages/SessionMessage/index.d.ts +8 -0
- package/dist/SessionMessages/index.d.ts +0 -7
- package/dist/SessionsList/SessionGroups.d.ts +1 -1
- package/dist/docs.json +444 -444
- package/dist/index.js +39 -13
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +41 -14
- package/dist/index.umd.cjs.map +1 -1
- package/dist/{utils.d.ts → utils/grouping.d.ts} +1 -1
- package/dist/utils/useDimensions.d.ts +4 -0
- package/package.json +3 -2
- /package/dist/SessionMessages/{MessageActions.d.ts → SessionMessage/MessageActions.d.ts} +0 -0
- /package/dist/SessionMessages/{MessageQuestion.d.ts → SessionMessage/MessageQuestion.d.ts} +0 -0
- /package/dist/SessionMessages/{MessageResponse.d.ts → SessionMessage/MessageResponse.d.ts} +0 -0
- /package/dist/{utils.spec.d.ts → utils/grouping.spec.d.ts} +0 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/assets/send.svg?react","../src/assets/stop.svg?react","../src/assets/paperclip.svg?react","../src/ChatContext.ts","../src/ChatInput.tsx","../src/SessionMessages/SessionEmpty.tsx","../src/SessionMessages/SessionMessagesHeader.tsx","../src/assets/back.svg?react","../src/SessionMessages/SessionMessagePanel.tsx","../src/assets/copy.svg?react","../src/assets/thumbs-down.svg?react","../src/assets/thumbs-up.svg?react","../src/assets/refresh.svg?react","../src/Markdown/themes/dark.ts","../src/Markdown/themes/light.ts","../src/Markdown/CodeHighlighter.tsx","../src/Markdown/Table.tsx","../src/Markdown/Markdown.tsx","../src/Markdown/plugins/remarkCve.ts","../src/SessionMessages/MessageQuestion.tsx","../src/SessionMessages/MessageResponse.tsx","../src/assets/file.svg?react","../src/SessionMessages/MessageFile.tsx","../src/SessionMessages/MessageFiles.tsx","../src/SessionMessages/MessageSource.tsx","../src/SessionMessages/MessageSources.tsx","../src/SessionMessages/MessageActions.tsx","../src/SessionMessages/SessionMessage.tsx","../src/SessionMessages/SessionMessages.tsx","../src/theme.ts","../src/Chat.tsx","../src/SessionsList/SessionsList.tsx","../src/assets/trash.svg?react","../src/SessionsList/SessionListItem.tsx","../src/SessionsList/NewSessionButton.tsx","../src/utils.ts","../src/SessionsList/SessionGroups.tsx","../src/SessionsList/SessionsGroup.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgSend = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\", className: \"lucide lucide-send-horizontal\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"m3 3 3 9-3 9 19-9Z\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M6 12h16\" }));\nexport default SvgSend;\n","import * as React from \"react\";\nconst SvgStop = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\", className: \"lucide lucide-octagon-x\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"m15 9-6 6\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M2.586 16.726A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2h6.624a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586z\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"m9 9 6 6\" }));\nexport default SvgStop;\n","import * as React from \"react\";\nconst SvgPaperclip = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\", className: \"lucide lucide-paperclip\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48\" }));\nexport default SvgPaperclip;\n","import { createContext } from 'react';\nimport { Session } from './types';\nimport { ChatTheme } from './theme';\nimport { PluggableList } from 'react-markdown/lib';\n\nexport interface ChatContextProps {\n sessions: Session[];\n disabled?: boolean;\n activeSessionId: string | null;\n theme?: ChatTheme;\n isLoading?: boolean;\n isCompact?: boolean;\n activeSession?: Session | null;\n remarkPlugins?: PluggableList[];\n selectSession?: (sessionId: string) => void;\n deleteSession?: (sessionId: string) => void;\n createSession?: () => void;\n}\n\nexport const ChatContext = createContext<ChatContextProps>({\n sessions: [],\n activeSessionId: null\n});\n","import {\n FC,\n useState,\n KeyboardEvent,\n ReactElement,\n useRef,\n ChangeEvent,\n useContext\n} from 'react';\nimport { Button, Textarea, cn } from 'reablocks';\nimport SendIcon from '@/assets/send.svg?react';\nimport StopIcon from '@/assets/stop.svg?react';\nimport AttachIcon from '@/assets/paperclip.svg?react';\nimport { ChatContext } from './ChatContext';\n\ninterface ChatInputProps {\n /**\n * Default value for the input field.\n */\n defaultValue?: string;\n\n /**\n * Allowed file types for upload.\n */\n allowedFiles?: string[];\n\n /**\n * Placeholder text for the input field.\n */\n placeholder?: string;\n\n /**\n * Icon to show for send.\n */\n sendIcon?: ReactElement;\n\n /**\n * Icon to show for send.\n */\n stopIcon?: ReactElement;\n\n /**\n * Icon to show for attach.\n */\n attachIcon?: ReactElement;\n\n /**\n * Callback function to handle sending a new message.\n */\n onSendMessage?: (message: string) => void;\n\n /**\n * Callback function to handle stopping the current action.\n */\n onStopMessage?: () => void;\n\n /**\n * Callback function to handle file upload.\n */\n onFileUpload?: (file: File) => void;\n}\n\nexport const ChatInput: FC<ChatInputProps> = ({\n allowedFiles,\n onSendMessage,\n placeholder,\n onStopMessage,\n onFileUpload,\n defaultValue,\n sendIcon = <SendIcon />,\n stopIcon = <StopIcon />,\n attachIcon = <AttachIcon />\n}) => {\n const { theme, isLoading, disabled } = useContext(ChatContext);\n const [message, setMessage] = useState<string>('');\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const handleSendMessage = () => {\n if (message.trim()) {\n onSendMessage?.(message);\n setMessage('');\n }\n };\n\n const handleKeyPress = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSendMessage();\n }\n };\n\n const handleFileUpload = (event: ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0];\n if (file && onFileUpload) {\n onFileUpload(file);\n }\n };\n\n return (\n <div className={cn(theme.input.base)}>\n <Textarea\n containerClassName={cn(theme.input.input)}\n minRows={1}\n autoFocus\n value={message}\n onChange={e => setMessage(e.target.value)}\n defaultValue={defaultValue}\n onKeyPress={handleKeyPress}\n placeholder={placeholder}\n disabled={isLoading || disabled}\n />\n {allowedFiles?.length > 0 && (\n <>\n <input\n type=\"file\"\n ref={fileInputRef}\n className=\"hidden\"\n accept={allowedFiles.join(',')}\n onChange={handleFileUpload}\n />\n <Button\n title=\"Upload\"\n disabled={isLoading || disabled}\n className={cn(theme.input.upload)}\n onClick={() => fileInputRef.current?.click()}\n >\n {attachIcon}\n </Button>\n </>\n )}\n {isLoading && (\n <Button\n title=\"Stop\"\n className={cn(theme.input.stop)}\n onClick={onStopMessage}\n disabled={disabled}\n >\n {stopIcon}\n </Button>\n )}\n <Button\n title=\"Send\"\n className={cn(theme.input.send)}\n onClick={handleSendMessage}\n disabled={isLoading || disabled}\n >\n {sendIcon}\n </Button>\n </div>\n );\n};\n","import { FC, PropsWithChildren, useContext } from 'react';\nimport { ChatContext } from '@/ChatContext';\nimport { cn } from 'reablocks';\n\ninterface SessionEmptyProps extends PropsWithChildren {\n}\n\nexport const SessionEmpty: FC<SessionEmptyProps> = ({\n children\n}) => {\n const { theme } = useContext(ChatContext);\n return <div className={cn(theme.empty)}>{children}</div>;\n};\n","import { ChatContext } from '@/ChatContext';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cn, Ellipsis, DateFormat } from 'reablocks';\nimport { FC, PropsWithChildren, useContext } from 'react';\n\nexport const SessionMessagesHeader: FC<PropsWithChildren> = ({ children }) => {\n const { activeSession, theme } = useContext(ChatContext);\n const Comp = children ? Slot : 'header';\n\n if (!activeSession) {\n return null;\n }\n\n return (\n <Comp className={cn(theme.messages.header)}>\n {children || (\n <>\n <h2 className={cn(theme.messages.title)}>\n <Ellipsis limit={125} value={activeSession.title} />\n </h2>\n <DateFormat\n className={cn(theme.messages.date)}\n date={activeSession.createdAt}\n />\n </>\n )}\n </Comp>\n );\n};\n","import * as React from \"react\";\nconst SvgBack = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\", className: \"lucide lucide-chevron-left\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"m15 18-6-6 6-6\" }));\nexport default SvgBack;\n","import { FC, PropsWithChildren, useContext } from 'react';\nimport { Button, cn } from 'reablocks';\nimport { ChatContext } from '@/ChatContext';\nimport { motion } from 'framer-motion';\nimport BackIcon from '@/assets/back.svg?react';\n\nexport const SessionMessagePanel: FC<PropsWithChildren> = ({ children }) => {\n const { activeSessionId, theme, isCompact, selectSession } =\n useContext(ChatContext);\n const isVisible = isCompact && activeSessionId;\n\n return (\n (!isCompact || isVisible) && (\n <motion.div\n initial={{ translateX: '200%' }}\n animate={{\n translateX: '0%',\n transition: {\n type: 'tween',\n ease: 'linear',\n duration: 0.2,\n when: 'beforeChildren'\n }\n }}\n exit={{ translateX: '200%' }}\n className={cn(theme.messages.base, {\n [theme.messages.companion]: isCompact,\n [theme.messages.console]: !isCompact\n })}\n >\n <div className={cn(theme.messages.inner)}>\n {isCompact && (\n <Button\n variant=\"text\"\n size=\"small\"\n onClick={() => selectSession(null)}\n className={cn(theme.messages.back)}\n >\n <BackIcon />\n Back\n </Button>\n )}\n {children}\n </div>\n </motion.div>\n )\n );\n};\n","import * as React from \"react\";\nconst SvgCopy = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\", className: \"lucide lucide-copy\", ...props }, /* @__PURE__ */ React.createElement(\"rect\", { width: 14, height: 14, x: 8, y: 8, rx: 2, ry: 2 }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" }));\nexport default SvgCopy;\n","import * as React from \"react\";\nconst SvgThumbsDown = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\", className: \"lucide lucide-thumbs-down\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M17 14V2\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z\" }));\nexport default SvgThumbsDown;\n","import * as React from \"react\";\nconst SvgThumbsUp = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\", className: \"lucide lucide-thumbs-up\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M7 10v12\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\" }));\nexport default SvgThumbsUp;\n","import * as React from \"react\";\nconst SvgRefresh = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\", className: \"lucide lucide-refresh-ccw\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M3 3v5h5\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M16 16h5v5\" }));\nexport default SvgRefresh;\n","export const dark = {\n 'code[class*=\"language-\"]': {\n 'background': '#11111f',\n 'color': '#e2e8f0',\n 'textShadow': '0 1px rgba(0, 0, 0, 0.3)',\n 'fontFamily': '\"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace',\n 'direction': 'ltr',\n 'textAlign': 'left',\n 'whiteSpace': 'pre',\n 'wordSpacing': 'normal',\n 'wordBreak': 'normal',\n 'lineHeight': '1.5',\n 'MozTabSize': '2',\n 'OTabSize': '2',\n 'tabSize': '2',\n 'WebkitHyphens': 'none',\n 'MozHyphens': 'none',\n 'msHyphens': 'none',\n 'hyphens': 'none'\n },\n 'pre[class*=\"language-\"]': {\n 'background': '#11111f',\n 'color': '#e2e8f0',\n 'textShadow': '0 1px rgba(0, 0, 0, 0.3)',\n 'fontFamily': '\"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace',\n 'direction': 'ltr',\n 'textAlign': 'left',\n 'whiteSpace': 'pre',\n 'wordSpacing': 'normal',\n 'wordBreak': 'normal',\n 'lineHeight': '1.5',\n 'MozTabSize': '2',\n 'OTabSize': '2',\n 'tabSize': '2',\n 'WebkitHyphens': 'none',\n 'MozHyphens': 'none',\n 'msHyphens': 'none',\n 'hyphens': 'none',\n 'padding': '1em',\n 'margin': '0.5em 0',\n 'overflow': 'auto',\n 'borderRadius': '0.3em'\n },\n 'code[class*=\"language-\"]::-moz-selection': {\n 'background': '#1e293b',\n 'color': 'inherit',\n 'textShadow': 'none'\n },\n 'code[class*=\"language-\"] *::-moz-selection': {\n 'background': '#1e293b',\n 'color': 'inherit',\n 'textShadow': 'none'\n },\n 'pre[class*=\"language-\"] *::-moz-selection': {\n 'background': '#1e293b',\n 'color': 'inherit',\n 'textShadow': 'none'\n },\n 'code[class*=\"language-\"]::selection': {\n 'background': '#1e293b',\n 'color': 'inherit',\n 'textShadow': 'none'\n },\n 'code[class*=\"language-\"] *::selection': {\n 'background': '#1e293b',\n 'color': 'inherit',\n 'textShadow': 'none'\n },\n 'pre[class*=\"language-\"] *::selection': {\n 'background': '#1e293b',\n 'color': 'inherit',\n 'textShadow': 'none'\n },\n ':not(pre) > code[class*=\"language-\"]': {\n 'padding': '0.2em 0.3em',\n 'borderRadius': '0.3em',\n 'whiteSpace': 'normal'\n },\n 'comment': {\n 'color': '#64748b',\n 'fontStyle': 'italic'\n },\n 'prolog': {\n 'color': '#64748b'\n },\n 'cdata': {\n 'color': '#64748b'\n },\n 'doctype': {\n 'color': '#e2e8f0'\n },\n 'punctuation': {\n 'color': '#e2e8f0'\n },\n 'entity': {\n 'color': '#3b82f6',\n 'cursor': 'help'\n },\n 'attr-name': {\n 'color': '#f59e0b'\n },\n 'class-name': {\n 'color': '#f59e0b'\n },\n 'boolean': {\n 'color': '#3b82f6'\n },\n 'constant': {\n 'color': '#3b82f6'\n },\n 'number': {\n 'color': '#3b82f6'\n },\n 'atrule': {\n 'color': '#f59e0b'\n },\n 'keyword': {\n 'color': '#f472b6'\n },\n 'property': {\n 'color': '#3b82f6'\n },\n 'tag': {\n 'color': '#3b82f6'\n },\n 'symbol': {\n 'color': '#3b82f6'\n },\n 'deleted': {\n 'color': '#ef4444'\n },\n 'important': {\n 'color': '#f472b6'\n },\n 'selector': {\n 'color': '#10b981'\n },\n 'string': {\n 'color': '#10b981'\n },\n 'char': {\n 'color': '#10b981'\n },\n 'builtin': {\n 'color': '#10b981'\n },\n 'inserted': {\n 'color': '#10b981'\n },\n 'regex': {\n 'color': '#10b981'\n },\n 'attr-value': {\n 'color': '#10b981'\n },\n 'attr-value > .token.punctuation': {\n 'color': '#10b981'\n },\n 'variable': {\n 'color': '#60a5fa'\n },\n 'operator': {\n 'color': '#60a5fa'\n },\n 'function': {\n 'color': '#60a5fa'\n },\n 'url': {\n 'color': '#60a5fa'\n },\n 'attr-value > .token.punctuation.attr-equals': {\n 'color': '#e2e8f0'\n },\n 'special-attr > .token.attr-value > .token.value.css': {\n 'color': '#e2e8f0'\n },\n '.language-css .token.selector': {\n 'color': '#3b82f6'\n },\n '.language-css .token.property': {\n 'color': '#e2e8f0'\n },\n '.language-css .token.function': {\n 'color': '#60a5fa'\n },\n '.language-css .token.url > .token.function': {\n 'color': '#60a5fa'\n },\n '.language-css .token.url > .token.string.url': {\n 'color': '#10b981'\n },\n '.language-css .token.important': {\n 'color': '#f472b6'\n },\n '.language-css .token.atrule .token.rule': {\n 'color': '#f472b6'\n },\n '.language-javascript .token.operator': {\n 'color': '#f472b6'\n },\n '.language-javascript .token.template-string > .token.interpolation > .token.interpolation-punctuation.punctuation': {\n 'color': '#ef4444'\n },\n '.language-json .token.operator': {\n 'color': '#e2e8f0'\n },\n '.language-json .token.null.keyword': {\n 'color': '#3b82f6'\n },\n '.language-markdown .token.url': {\n 'color': '#e2e8f0'\n },\n '.language-markdown .token.url > .token.operator': {\n 'color': '#e2e8f0'\n },\n '.language-markdown .token.url-reference.url > .token.string': {\n 'color': '#e2e8f0'\n },\n '.language-markdown .token.url > .token.content': {\n 'color': '#60a5fa'\n },\n '.language-markdown .token.url > .token.url': {\n 'color': '#60a5fa'\n },\n '.language-markdown .token.url-reference.url': {\n 'color': '#60a5fa'\n },\n '.language-markdown .token.blockquote.punctuation': {\n 'color': '#64748b',\n 'fontStyle': 'italic'\n },\n '.language-markdown .token.hr.punctuation': {\n 'color': '#64748b',\n 'fontStyle': 'italic'\n },\n '.language-markdown .token.code-snippet': {\n 'color': '#10b981'\n },\n '.language-markdown .token.bold .token.content': {\n 'color': '#f59e0b'\n },\n '.language-markdown .token.italic .token.content': {\n 'color': '#f472b6'\n },\n '.language-markdown .token.strike .token.content': {\n 'color': '#3b82f6'\n },\n '.language-markdown .token.strike .token.punctuation': {\n 'color': '#3b82f6'\n },\n '.language-markdown .token.list.punctuation': {\n 'color': '#3b82f6'\n },\n '.language-markdown .token.title.important > .token.punctuation': {\n 'color': '#3b82f6'\n },\n 'bold': {\n 'fontWeight': 'bold'\n },\n 'italic': {\n 'fontStyle': 'italic'\n },\n 'namespace': {\n 'Opacity': '0.8'\n },\n 'token.tab:not(:empty):before': {\n 'color': '#64748b',\n 'textShadow': 'none'\n },\n 'token.cr:before': {\n 'color': '#64748b',\n 'textShadow': 'none'\n },\n 'token.lf:before': {\n 'color': '#64748b',\n 'textShadow': 'none'\n },\n 'token.space:before': {\n 'color': '#64748b',\n 'textShadow': 'none'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item': {\n 'marginRight': '0.4em'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > button': {\n 'background': '#1e293b',\n 'color': '#94a3b8',\n 'padding': '0.1em 0.4em',\n 'borderRadius': '0.3em'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > a': {\n 'background': '#1e293b',\n 'color': '#94a3b8',\n 'padding': '0.1em 0.4em',\n 'borderRadius': '0.3em'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > span': {\n 'background': '#1e293b',\n 'color': '#94a3b8',\n 'padding': '0.1em 0.4em',\n 'borderRadius': '0.3em'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:hover': {\n 'background': '#3b82f6',\n 'color': '#ffffff'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:focus': {\n 'background': '#3b82f6',\n 'color': '#ffffff'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:hover': {\n 'background': '#3b82f6',\n 'color': '#ffffff'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:focus': {\n 'background': '#3b82f6',\n 'color': '#ffffff'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:hover': {\n 'background': '#3b82f6',\n 'color': '#ffffff'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:focus': {\n 'background': '#3b82f6',\n 'color': '#ffffff'\n },\n '.line-highlight.line-highlight': {\n 'background': 'rgba(59, 130, 246, 0.08)'\n },\n '.line-highlight.line-highlight:before': {\n 'background': '#1e293b',\n 'color': '#e2e8f0',\n 'padding': '0.1em 0.6em',\n 'borderRadius': '0.3em',\n 'boxShadow': '0 2px 0 0 rgba(0, 0, 0, 0.2)'\n },\n '.line-highlight.line-highlight[data-end]:after': {\n 'background': '#1e293b',\n 'color': '#e2e8f0',\n 'padding': '0.1em 0.6em',\n 'borderRadius': '0.3em',\n 'boxShadow': '0 2px 0 0 rgba(0, 0, 0, 0.2)'\n },\n 'pre[id].linkable-line-numbers.linkable-line-numbers span.line-numbers-rows > span:hover:before': {\n 'backgroundColor': 'rgba(59, 130, 246, 0.08)'\n },\n '.line-numbers.line-numbers .line-numbers-rows': {\n 'borderRightColor': '#1e293b'\n },\n '.command-line .command-line-prompt': {\n 'borderRightColor': '#1e293b'\n },\n '.line-numbers .line-numbers-rows > span:before': {\n 'color': '#64748b'\n },\n '.command-line .command-line-prompt > span:before': {\n 'color': '#64748b'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-1': {\n 'color': '#3b82f6'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-5': {\n 'color': '#3b82f6'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-9': {\n 'color': '#3b82f6'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-2': {\n 'color': '#10b981'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-6': {\n 'color': '#10b981'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-10': {\n 'color': '#10b981'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-3': {\n 'color': '#60a5fa'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-7': {\n 'color': '#60a5fa'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-11': {\n 'color': '#60a5fa'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-4': {\n 'color': '#f472b6'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-8': {\n 'color': '#f472b6'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-12': {\n 'color': '#f472b6'\n },\n 'pre.diff-highlight > code .token.token.deleted:not(.prefix)': {\n 'backgroundColor': 'rgba(239, 68, 68, 0.15)'\n },\n 'pre > code.diff-highlight .token.token.deleted:not(.prefix)': {\n 'backgroundColor': 'rgba(239, 68, 68, 0.15)'\n },\n 'pre.diff-highlight > code .token.token.deleted:not(.prefix)::-moz-selection': {\n 'backgroundColor': 'rgba(239, 68, 68, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.deleted:not(.prefix) *::-moz-selection': {\n 'backgroundColor': 'rgba(239, 68, 68, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.deleted:not(.prefix)::-moz-selection': {\n 'backgroundColor': 'rgba(239, 68, 68, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.deleted:not(.prefix) *::-moz-selection': {\n 'backgroundColor': 'rgba(239, 68, 68, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.deleted:not(.prefix)::selection': {\n 'backgroundColor': 'rgba(239, 68, 68, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.deleted:not(.prefix) *::selection': {\n 'backgroundColor': 'rgba(239, 68, 68, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.deleted:not(.prefix)::selection': {\n 'backgroundColor': 'rgba(239, 68, 68, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.deleted:not(.prefix) *::selection': {\n 'backgroundColor': 'rgba(239, 68, 68, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.inserted:not(.prefix)': {\n 'backgroundColor': 'rgba(16, 185, 129, 0.15)'\n },\n 'pre > code.diff-highlight .token.token.inserted:not(.prefix)': {\n 'backgroundColor': 'rgba(16, 185, 129, 0.15)'\n },\n 'pre.diff-highlight > code .token.token.inserted:not(.prefix)::-moz-selection': {\n 'backgroundColor': 'rgba(16, 185, 129, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.inserted:not(.prefix) *::-moz-selection': {\n 'backgroundColor': 'rgba(16, 185, 129, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.inserted:not(.prefix)::-moz-selection': {\n 'backgroundColor': 'rgba(16, 185, 129, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.inserted:not(.prefix) *::-moz-selection': {\n 'backgroundColor': 'rgba(16, 185, 129, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.inserted:not(.prefix)::selection': {\n 'backgroundColor': 'rgba(16, 185, 129, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.inserted:not(.prefix) *::selection': {\n 'backgroundColor': 'rgba(16, 185, 129, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.inserted:not(.prefix)::selection': {\n 'backgroundColor': 'rgba(16, 185, 129, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.inserted:not(.prefix) *::selection': {\n 'backgroundColor': 'rgba(16, 185, 129, 0.25)'\n },\n '.prism-previewer.prism-previewer:before': {\n 'borderColor': '#11111f'\n },\n '.prism-previewer-gradient.prism-previewer-gradient div': {\n 'borderColor': '#11111f',\n 'borderRadius': '0.3em'\n },\n '.prism-previewer-color.prism-previewer-color:before': {\n 'borderRadius': '0.3em'\n },\n '.prism-previewer-easing.prism-previewer-easing:before': {\n 'borderRadius': '0.3em'\n },\n '.prism-previewer.prism-previewer:after': {\n 'borderTopColor': '#11111f'\n },\n '.prism-previewer-flipped.prism-previewer-flipped.after': {\n 'borderBottomColor': '#11111f'\n },\n '.prism-previewer-angle.prism-previewer-angle:before': {\n 'background': '#1e293b'\n },\n '.prism-previewer-time.prism-previewer-time:before': {\n 'background': '#1e293b'\n },\n '.prism-previewer-easing.prism-previewer-easing': {\n 'background': '#1e293b'\n },\n '.prism-previewer-angle.prism-previewer-angle circle': {\n 'stroke': '#e2e8f0',\n 'strokeOpacity': '1'\n },\n '.prism-previewer-time.prism-previewer-time circle': {\n 'stroke': '#e2e8f0',\n 'strokeOpacity': '1'\n },\n '.prism-previewer-easing.prism-previewer-easing circle': {\n 'stroke': '#e2e8f0',\n 'fill': 'transparent'\n },\n '.prism-previewer-easing.prism-previewer-easing path': {\n 'stroke': '#e2e8f0'\n },\n '.prism-previewer-easing.prism-previewer-easing line': {\n 'stroke': '#e2e8f0'\n }\n}\n","export const light = {\n 'code[class*=\"language-\"]': {\n 'background': '#fff',\n 'color': '#1e293b',\n 'textShadow': 'none',\n 'fontFamily': '\"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace',\n 'direction': 'ltr',\n 'textAlign': 'left',\n 'whiteSpace': 'pre',\n 'wordSpacing': 'normal',\n 'wordBreak': 'normal',\n 'lineHeight': '1.5',\n 'MozTabSize': '2',\n 'OTabSize': '2',\n 'tabSize': '2',\n 'WebkitHyphens': 'none',\n 'MozHyphens': 'none',\n 'msHyphens': 'none',\n 'hyphens': 'none'\n },\n 'pre[class*=\"language-\"]': {\n 'background': '#fff',\n 'color': '#1e293b',\n 'textShadow': 'none',\n 'fontFamily': '\"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace',\n 'direction': 'ltr',\n 'textAlign': 'left',\n 'whiteSpace': 'pre',\n 'wordSpacing': 'normal',\n 'wordBreak': 'normal',\n 'lineHeight': '1.5',\n 'MozTabSize': '2',\n 'OTabSize': '2',\n 'tabSize': '2',\n 'WebkitHyphens': 'none',\n 'MozHyphens': 'none',\n 'msHyphens': 'none',\n 'hyphens': 'none',\n 'padding': '1em',\n 'margin': '0.5em 0',\n 'overflow': 'auto',\n 'borderRadius': '0.3em',\n 'border': '1px solid #e2e8f0'\n },\n 'code[class*=\"language-\"]::-moz-selection': {\n 'background': '#e2e8f0',\n 'color': 'inherit',\n 'textShadow': 'none'\n },\n 'code[class*=\"language-\"] *::-moz-selection': {\n 'background': '#e2e8f0',\n 'color': 'inherit',\n 'textShadow': 'none'\n },\n 'pre[class*=\"language-\"] *::-moz-selection': {\n 'background': '#e2e8f0',\n 'color': 'inherit',\n 'textShadow': 'none'\n },\n 'code[class*=\"language-\"]::selection': {\n 'background': '#e2e8f0',\n 'color': 'inherit',\n 'textShadow': 'none'\n },\n 'code[class*=\"language-\"] *::selection': {\n 'background': '#e2e8f0',\n 'color': 'inherit',\n 'textShadow': 'none'\n },\n 'pre[class*=\"language-\"] *::selection': {\n 'background': '#e2e8f0',\n 'color': 'inherit',\n 'textShadow': 'none'\n },\n ':not(pre) > code[class*=\"language-\"]': {\n 'padding': '0.2em 0.3em',\n 'borderRadius': '0.3em',\n 'whiteSpace': 'normal',\n 'background': '#f1f5f9'\n },\n 'comment': {\n 'color': '#64748b',\n 'fontStyle': 'italic'\n },\n 'prolog': {\n 'color': '#64748b'\n },\n 'cdata': {\n 'color': '#64748b'\n },\n 'doctype': {\n 'color': '#1e293b'\n },\n 'punctuation': {\n 'color': '#64748b'\n },\n 'entity': {\n 'color': '#3b82f6',\n 'cursor': 'help'\n },\n 'attr-name': {\n 'color': '#ea580c'\n },\n 'class-name': {\n 'color': '#ea580c'\n },\n 'boolean': {\n 'color': '#3b82f6'\n },\n 'constant': {\n 'color': '#3b82f6'\n },\n 'number': {\n 'color': '#3b82f6'\n },\n 'atrule': {\n 'color': '#ea580c'\n },\n 'keyword': {\n 'color': '#9333ea'\n },\n 'property': {\n 'color': '#3b82f6'\n },\n 'tag': {\n 'color': '#3b82f6'\n },\n 'symbol': {\n 'color': '#3b82f6'\n },\n 'deleted': {\n 'color': '#dc2626'\n },\n 'important': {\n 'color': '#9333ea'\n },\n 'selector': {\n 'color': '#16a34a'\n },\n 'string': {\n 'color': '#16a34a'\n },\n 'char': {\n 'color': '#16a34a'\n },\n 'builtin': {\n 'color': '#16a34a'\n },\n 'inserted': {\n 'color': '#16a34a'\n },\n 'regex': {\n 'color': '#16a34a'\n },\n 'attr-value': {\n 'color': '#16a34a'\n },\n 'attr-value > .token.punctuation': {\n 'color': '#16a34a'\n },\n 'variable': {\n 'color': '#3b82f6'\n },\n 'operator': {\n 'color': '#3b82f6'\n },\n 'function': {\n 'color': '#3b82f6'\n },\n 'url': {\n 'color': '#3b82f6'\n },\n 'attr-value > .token.punctuation.attr-equals': {\n 'color': '#64748b'\n },\n 'special-attr > .token.attr-value > .token.value.css': {\n 'color': '#1e293b'\n },\n '.language-css .token.selector': {\n 'color': '#3b82f6'\n },\n '.language-css .token.property': {\n 'color': '#1e293b'\n },\n '.language-css .token.function': {\n 'color': '#3b82f6'\n },\n '.language-css .token.url > .token.function': {\n 'color': '#3b82f6'\n },\n '.language-css .token.url > .token.string.url': {\n 'color': '#16a34a'\n },\n '.language-css .token.important': {\n 'color': '#9333ea'\n },\n '.language-css .token.atrule .token.rule': {\n 'color': '#9333ea'\n },\n '.language-javascript .token.operator': {\n 'color': '#9333ea'\n },\n '.language-javascript .token.template-string > .token.interpolation > .token.interpolation-punctuation.punctuation': {\n 'color': '#dc2626'\n },\n '.language-json .token.operator': {\n 'color': '#1e293b'\n },\n '.language-json .token.null.keyword': {\n 'color': '#3b82f6'\n },\n '.language-markdown .token.url': {\n 'color': '#1e293b'\n },\n '.language-markdown .token.url > .token.operator': {\n 'color': '#1e293b'\n },\n '.language-markdown .token.url-reference.url > .token.string': {\n 'color': '#1e293b'\n },\n '.language-markdown .token.url > .token.content': {\n 'color': '#3b82f6'\n },\n '.language-markdown .token.url > .token.url': {\n 'color': '#3b82f6'\n },\n '.language-markdown .token.url-reference.url': {\n 'color': '#3b82f6'\n },\n '.language-markdown .token.blockquote.punctuation': {\n 'color': '#64748b',\n 'fontStyle': 'italic'\n },\n '.language-markdown .token.hr.punctuation': {\n 'color': '#64748b',\n 'fontStyle': 'italic'\n },\n '.language-markdown .token.code-snippet': {\n 'color': '#16a34a'\n },\n '.language-markdown .token.bold .token.content': {\n 'color': '#ea580c'\n },\n '.language-markdown .token.italic .token.content': {\n 'color': '#9333ea'\n },\n '.language-markdown .token.strike .token.content': {\n 'color': '#3b82f6'\n },\n '.language-markdown .token.strike .token.punctuation': {\n 'color': '#3b82f6'\n },\n '.language-markdown .token.list.punctuation': {\n 'color': '#3b82f6'\n },\n '.language-markdown .token.title.important > .token.punctuation': {\n 'color': '#3b82f6'\n },\n 'bold': {\n 'fontWeight': 'bold'\n },\n 'italic': {\n 'fontStyle': 'italic'\n },\n 'namespace': {\n 'Opacity': '0.8'\n },\n 'token.tab:not(:empty):before': {\n 'color': '#94a3b8'\n },\n 'token.cr:before': {\n 'color': '#94a3b8'\n },\n 'token.lf:before': {\n 'color': '#94a3b8'\n },\n 'token.space:before': {\n 'color': '#94a3b8'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item': {\n 'marginRight': '0.4em'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > button': {\n 'background': '#f1f5f9',\n 'color': '#475569',\n 'padding': '0.1em 0.4em',\n 'borderRadius': '0.3em'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > a': {\n 'background': '#f1f5f9',\n 'color': '#475569',\n 'padding': '0.1em 0.4em',\n 'borderRadius': '0.3em'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > span': {\n 'background': '#f1f5f9',\n 'color': '#475569',\n 'padding': '0.1em 0.4em',\n 'borderRadius': '0.3em'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:hover': {\n 'background': '#3b82f6',\n 'color': '#ffffff'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:focus': {\n 'background': '#3b82f6',\n 'color': '#ffffff'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:hover': {\n 'background': '#3b82f6',\n 'color': '#ffffff'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:focus': {\n 'background': '#3b82f6',\n 'color': '#ffffff'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:hover': {\n 'background': '#3b82f6',\n 'color': '#ffffff'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:focus': {\n 'background': '#3b82f6',\n 'color': '#ffffff'\n },\n '.line-highlight.line-highlight': {\n 'background': 'rgba(59, 130, 246, 0.08)'\n },\n '.line-highlight.line-highlight:before': {\n 'background': '#f1f5f9',\n 'color': '#1e293b',\n 'padding': '0.1em 0.6em',\n 'borderRadius': '0.3em',\n 'boxShadow': '0 2px 0 0 rgba(0, 0, 0, 0.1)'\n },\n '.line-highlight.line-highlight[data-end]:after': {\n 'background': '#f1f5f9',\n 'color': '#1e293b',\n 'padding': '0.1em 0.6em',\n 'borderRadius': '0.3em',\n 'boxShadow': '0 2px 0 0 rgba(0, 0, 0, 0.1)'\n },\n 'pre[id].linkable-line-numbers.linkable-line-numbers span.line-numbers-rows > span:hover:before': {\n 'backgroundColor': 'rgba(59, 130, 246, 0.08)'\n },\n '.line-numbers.line-numbers .line-numbers-rows': {\n 'borderRightColor': '#e2e8f0'\n },\n '.command-line .command-line-prompt': {\n 'borderRightColor': '#e2e8f0'\n },\n '.line-numbers .line-numbers-rows > span:before': {\n 'color': '#94a3b8'\n },\n '.command-line .command-line-prompt > span:before': {\n 'color': '#94a3b8'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-1': {\n 'color': '#3b82f6'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-5': {\n 'color': '#3b82f6'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-9': {\n 'color': '#3b82f6'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-2': {\n 'color': '#16a34a'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-6': {\n 'color': '#16a34a'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-10': {\n 'color': '#16a34a'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-3': {\n 'color': '#ea580c'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-7': {\n 'color': '#ea580c'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-11': {\n 'color': '#ea580c'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-4': {\n 'color': '#9333ea'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-8': {\n 'color': '#9333ea'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-12': {\n 'color': '#9333ea'\n },\n 'pre.diff-highlight > code .token.token.deleted:not(.prefix)': {\n 'backgroundColor': 'rgba(220, 38, 38, 0.15)'\n },\n 'pre > code.diff-highlight .token.token.deleted:not(.prefix)': {\n 'backgroundColor': 'rgba(220, 38, 38, 0.15)'\n },\n 'pre.diff-highlight > code .token.token.deleted:not(.prefix)::-moz-selection': {\n 'backgroundColor': 'rgba(220, 38, 38, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.deleted:not(.prefix) *::-moz-selection': {\n 'backgroundColor': 'rgba(220, 38, 38, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.deleted:not(.prefix)::-moz-selection': {\n 'backgroundColor': 'rgba(220, 38, 38, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.deleted:not(.prefix) *::-moz-selection': {\n 'backgroundColor': 'rgba(220, 38, 38, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.deleted:not(.prefix)::selection': {\n 'backgroundColor': 'rgba(220, 38, 38, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.deleted:not(.prefix) *::selection': {\n 'backgroundColor': 'rgba(220, 38, 38, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.deleted:not(.prefix)::selection': {\n 'backgroundColor': 'rgba(220, 38, 38, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.deleted:not(.prefix) *::selection': {\n 'backgroundColor': 'rgba(220, 38, 38, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.inserted:not(.prefix)': {\n 'backgroundColor': 'rgba(22, 163, 74, 0.15)'\n },\n 'pre > code.diff-highlight .token.token.inserted:not(.prefix)': {\n 'backgroundColor': 'rgba(22, 163, 74, 0.15)'\n },\n 'pre.diff-highlight > code .token.token.inserted:not(.prefix)::-moz-selection': {\n 'backgroundColor': 'rgba(22, 163, 74, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.inserted:not(.prefix) *::-moz-selection': {\n 'backgroundColor': 'rgba(22, 163, 74, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.inserted:not(.prefix)::-moz-selection': {\n 'backgroundColor': 'rgba(22, 163, 74, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.inserted:not(.prefix) *::-moz-selection': {\n 'backgroundColor': 'rgba(22, 163, 74, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.inserted:not(.prefix)::selection': {\n 'backgroundColor': 'rgba(22, 163, 74, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.inserted:not(.prefix) *::selection': {\n 'backgroundColor': 'rgba(22, 163, 74, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.inserted:not(.prefix)::selection': {\n 'backgroundColor': 'rgba(22, 163, 74, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.inserted:not(.prefix) *::selection': {\n 'backgroundColor': 'rgba(22, 163, 74, 0.25)'\n },\n '.prism-previewer.prism-previewer:before': {\n 'borderColor': '#fff'\n },\n '.prism-previewer-gradient.prism-previewer-gradient div': {\n 'borderColor': '#fff',\n 'borderRadius': '0.3em'\n },\n '.prism-previewer-color.prism-previewer-color:before': {\n 'borderRadius': '0.3em'\n },\n '.prism-previewer-easing.prism-previewer-easing:before': {\n 'borderRadius': '0.3em'\n },\n '.prism-previewer.prism-previewer:after': {\n 'borderTopColor': '#fff'\n },\n '.prism-previewer-flipped.prism-previewer-flipped.after': {\n 'borderBottomColor': '#fff'\n },\n '.prism-previewer-angle.prism-previewer-angle:before': {\n 'background': '#f1f5f9'\n },\n '.prism-previewer-time.prism-previewer-time:before': {\n 'background': '#f1f5f9'\n },\n '.prism-previewer-easing.prism-previewer-easing': {\n 'background': '#f1f5f9'\n },\n '.prism-previewer-angle.prism-previewer-angle circle': {\n 'stroke': '#1e293b',\n 'strokeOpacity': '1'\n },\n '.prism-previewer-time.prism-previewer-time circle': {\n 'stroke': '#1e293b',\n 'strokeOpacity': '1'\n },\n '.prism-previewer-easing.prism-previewer-easing circle': {\n 'stroke': '#1e293b',\n 'fill': 'transparent'\n },\n '.prism-previewer-easing.prism-previewer-easing path': {\n 'stroke': '#1e293b'\n },\n '.prism-previewer-easing.prism-previewer-easing line': {\n 'stroke': '#1e293b'\n }\n}\n","import React, { FC, PropsWithChildren, ReactElement } from 'react';\nimport { Button, cn } from 'reablocks';\nimport { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';\nimport CopyIcon from '@/assets/copy.svg?react';\nimport { dark } from './themes';\n\nexport interface CodeHighlighterProps extends PropsWithChildren {\n /**\n * The class name to apply to the code block.\n */\n className?: string;\n\n /**\n * The language of the code block.\n */\n language?: string;\n\n /**\n * The class name to apply to the copy button.\n */\n copyClassName?: string;\n\n /**\n * Icon to show for copy.\n */\n copyIcon?: ReactElement;\n\n /**\n * The theme to use for the code block.\n */\n theme?: Record<string, string>;\n}\n\nexport const CodeHighlighter: FC<CodeHighlighterProps> = ({\n className,\n children,\n copyClassName,\n copyIcon = <CopyIcon />,\n language,\n theme = dark\n}) => {\n const match = language?.match(/language-(\\w+)/);\n const lang = match ? match[1] : 'text';\n\n const handleCopy = (text: string) => {\n navigator.clipboard\n .writeText(text)\n .then(() => {\n console.log('Text copied to clipboard');\n })\n .catch(err => {\n console.error('Could not copy text: ', err);\n });\n };\n\n return (\n <div className={cn('relative', className)}>\n {copyIcon && (\n <Button\n className={cn(copyClassName)}\n size=\"small\"\n variant=\"text\"\n title=\"Copy code\"\n onClick={() => handleCopy(children as string)}\n >\n {copyIcon}\n </Button>\n )}\n <SyntaxHighlighter\n language={lang}\n style={theme}\n >\n {children}\n </SyntaxHighlighter>\n </div>\n );\n};\n","import React, { FC, PropsWithChildren } from 'react';\n\nexport const TableComponent: FC<PropsWithChildren<React.HTMLAttributes<HTMLTableElement>>> = ({ children, ...props }) => (\n <table {...props}>\n {children}\n </table>\n);\n\nexport const TableHeaderCell: FC<PropsWithChildren<React.HTMLAttributes<HTMLTableHeaderCellElement>>> = ({ children, ...props }) => (\n <th {...props}>\n {children}\n </th>\n);\n\nexport const TableDataCell: FC<PropsWithChildren<React.HTMLAttributes<HTMLTableDataCellElement>>> = ({ children, ...props }) => (\n <td {...props}>\n {children}\n </td>\n);\n","import { FC, PropsWithChildren, useContext } from 'react';\nimport ReactMarkdown from 'react-markdown';\nimport { PluggableList } from 'react-markdown/lib';\nimport remarkGfm from 'remark-gfm';\nimport { CodeHighlighter } from './CodeHighlighter';\nimport { cn } from 'reablocks';\nimport { TableComponent, TableHeaderCell, TableDataCell } from './Table';\nimport { ChatContext } from '@/ChatContext';\n\ninterface MarkdownWrapperProps extends PropsWithChildren {\n /**\n * Remark plugins to apply to the markdown content.\n */\n remarkPlugins?: PluggableList[];\n}\n\nexport const Markdown: FC<MarkdownWrapperProps> = ({\n children,\n remarkPlugins = [remarkGfm]\n}) => {\n const { theme } = useContext(ChatContext);\n\n return (\n <ReactMarkdown\n remarkPlugins={remarkPlugins as PluggableList}\n components={{\n code: ({ className, ...props }) => (\n <CodeHighlighter\n {...props}\n // Ref: https://github.com/remarkjs/react-markdown?tab=readme-ov-file#use-custom-components-syntax-highlight\n language={className}\n className={cn(theme.messages.message.markdown.code, className)}\n copyClassName={cn(theme.messages.message.markdown.copy)}\n />\n ),\n table: props => <TableComponent {...props} className={cn(theme.messages.message.markdown.table)} />,\n th: props => <TableHeaderCell {...props} className={cn(theme.messages.message.markdown.th)} />,\n td: props => <TableDataCell {...props} className={cn(theme.messages.message.markdown.td)} />,\n a: props => <a {...props} className={cn(theme.messages.message.markdown.a)} />,\n p: props => <p {...props} className={cn(theme.messages.message.markdown.p)} />,\n li: props => <li {...props} className={cn(theme.messages.message.markdown.li)} />,\n ul: props => <ul {...props} className={cn(theme.messages.message.markdown.ul)} />,\n ol: props => <ol {...props} className={cn(theme.messages.message.markdown.ol)} />\n }}\n >\n {children as string}\n </ReactMarkdown>\n );\n};\n","import { findAndReplace } from 'mdast-util-find-and-replace';\n\nconst CVE_REGEX = /(CVE-(19|20)\\d{2}-\\d{4,7})/gi;\n\nexport function remarkCve() {\n return (tree, _file) => {\n findAndReplace(tree, [[\n CVE_REGEX,\n replaceCve as unknown as any\n ]]);\n };\n\n function replaceCve(value, id) {\n return [\n {\n type: 'link',\n url: `https://cve.mitre.org/cgi-bin/cvename.cgi?name=${id}`,\n children: [\n { children: [{ type: 'text', value: value.trim() }] }\n ]\n }\n ];\n }\n}\n","import { ChatContext } from '@/ChatContext';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cn } from 'reablocks';\nimport { FC, PropsWithChildren, useContext } from 'react';\nimport { Markdown } from '@/Markdown';\nimport { PluggableList } from 'react-markdown/lib';\nimport remarkGfm from 'remark-gfm';\nimport remarkYoutube from 'remark-youtube';\n\nexport interface MessageQuestionProps extends PropsWithChildren {\n /**\n * Question to render.\n */\n question: string;\n}\n\nexport const MessageQuestion: FC<MessageQuestionProps> = ({\n question,\n children\n}) => {\n const { theme, remarkPlugins = [remarkGfm, remarkYoutube] } =\n useContext(ChatContext);\n const Comp = children ? Slot : 'div';\n return (\n <Comp className={cn(theme.messages.message.question)}>\n {children || (\n <Markdown remarkPlugins={remarkPlugins as PluggableList[]}>\n {question}\n </Markdown>\n )}\n </Comp>\n );\n};\n","import { ChatContext } from '@/ChatContext';\nimport { Slot } from '@radix-ui/react-slot';\nimport { motion } from 'framer-motion';\nimport { cn } from 'reablocks';\nimport { FC, PropsWithChildren, ReactNode, useContext } from 'react';\nimport { Markdown } from '@/Markdown';\nimport { PluggableList } from 'react-markdown/lib';\nimport remarkGfm from 'remark-gfm';\nimport remarkYoutube from 'remark-youtube';\n\nexport interface MessageResponseProps extends PropsWithChildren {\n /**\n * Response to render.\n */\n response: string;\n\n /**\n * Whether the response is loading.\n */\n isLoading?: boolean;\n}\n\nexport const MessageResponse: FC<MessageResponseProps> = ({\n response,\n isLoading,\n children\n}) => {\n const { theme, remarkPlugins = [remarkGfm, remarkYoutube] } =\n useContext(ChatContext);\n const Comp = children ? Slot : 'div';\n return (\n <Comp className={cn(theme.messages.message.response)}>\n {children || (\n <>\n <Markdown remarkPlugins={remarkPlugins as PluggableList[]}>\n {response}\n </Markdown>\n {isLoading && (\n <motion.div\n className={cn(theme.messages.message.cursor)}\n animate={{ opacity: [1, 0] }}\n transition={{\n duration: 0.7,\n repeat: Infinity,\n repeatType: 'reverse'\n }}\n />\n )}\n </>\n )}\n </Comp>\n );\n};\n","import * as React from \"react\";\nconst SvgFile = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, viewBox: \"0 0 16 16\", fill: \"currentColor\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M2.7036 1.37034C3.04741 1.02653 3.51373 0.833374 3.99996 0.833374H9.33329H9.33331C9.47275 0.833374 9.59885 0.890449 9.68954 0.98251L13.6843 4.97722C13.7763 5.0679 13.8333 5.19398 13.8333 5.33337L13.8333 5.3379V13.3334C13.8333 13.8196 13.6401 14.2859 13.2963 14.6297C12.9525 14.9736 12.4862 15.1667 12 15.1667H3.99996C3.51373 15.1667 3.04741 14.9736 2.7036 14.6297C2.35978 14.2859 2.16663 13.8196 2.16663 13.3334V2.66671C2.16663 2.18048 2.35978 1.71416 2.7036 1.37034ZM3.99996 1.83337H8.83331V5.33337C8.83331 5.60952 9.05717 5.83337 9.33331 5.83337H12.8333V13.3334C12.8333 13.5544 12.7455 13.7663 12.5892 13.9226C12.4329 14.0789 12.221 14.1667 12 14.1667H3.99996C3.77895 14.1667 3.56698 14.0789 3.4107 13.9226C3.25442 13.7663 3.16663 13.5544 3.16663 13.3334V2.66671C3.16663 2.44569 3.25442 2.23373 3.4107 2.07745C3.56698 1.92117 3.77895 1.83337 3.99996 1.83337ZM9.83331 2.5405L12.1262 4.83337H9.83331V2.5405ZM5.33331 8.16663C5.05717 8.16663 4.83331 8.39048 4.83331 8.66663C4.83331 8.94277 5.05717 9.16663 5.33331 9.16663H10.6666C10.9428 9.16663 11.1666 8.94277 11.1666 8.66663C11.1666 8.39048 10.9428 8.16663 10.6666 8.16663H5.33331ZM4.83331 11.3334C4.83331 11.0572 5.05717 10.8334 5.33331 10.8334H10.6666C10.9428 10.8334 11.1666 11.0572 11.1666 11.3334C11.1666 11.6095 10.9428 11.8334 10.6666 11.8334H5.33331C5.05717 11.8334 4.83331 11.6095 4.83331 11.3334ZM5.33331 5.5C5.05717 5.5 4.83331 5.72386 4.83331 6C4.83331 6.27614 5.05717 6.5 5.33331 6.5H6.66665C6.94279 6.5 7.16665 6.27614 7.16665 6C7.16665 5.72386 6.94279 5.5 6.66665 5.5H5.33331Z\" }));\nexport default SvgFile;\n","import { FC, useContext, ReactElement } from 'react';\nimport { ConversationFile } from '@/types';\nimport { ChatContext } from '@/ChatContext';\nimport { Ellipsis, cn } from 'reablocks';\nimport FileIcon from '@/assets/file.svg?react';\n\nexport interface MessageFileProps extends ConversationFile {\n /**\n * Icon to show for delete.\n */\n fileIcon?: ReactElement;\n\n /**\n * Limit for the name.\n */\n limit?: number;\n}\n\nexport const MessageFile: FC<MessageFileProps> = ({\n name,\n type,\n url,\n limit = 100,\n fileIcon = <FileIcon />\n}) => {\n const { theme } = useContext(ChatContext);\n\n return (\n <figure\n className={cn(theme.messages.message.files.file.base)}\n onClick={() => {\n window.open(url, '_blank');\n }}\n >\n {fileIcon}\n {(name || type) && (\n <figcaption>\n {name && (\n <span className={cn(theme.messages.message.files.file.name)}>\n <Ellipsis value={name} limit={limit} />\n </span>\n )}\n </figcaption>\n )}\n </figure>\n );\n};\n","import { ChatContext } from '@/ChatContext';\nimport { ConversationFile } from '@/types';\nimport { cn } from 'reablocks';\nimport { FC, PropsWithChildren, useContext } from 'react';\nimport { MessageFile } from './MessageFile';\nimport { Slot } from '@radix-ui/react-slot';\n\ninterface MessageFilesProps extends PropsWithChildren {\n /**\n * Files to render.\n */\n files: ConversationFile[];\n}\n\nexport const MessageFiles: FC<MessageFilesProps> = ({ files, children }) => {\n const { theme } = useContext(ChatContext);\n const Comp = children ? Slot : MessageFile;\n\n if (!files || files.length === 0) {\n return null;\n }\n\n return (\n files.length > 0 && (\n <div className={cn(theme.messages.message.files.base)}>\n {files.map((file, index) => (\n <Comp key={index} {...file}>\n {children}\n </Comp>\n ))}\n </div>\n )\n );\n};\n","import { FC, useContext } from 'react';\nimport { ConversationSource } from '@/types';\nimport { ChatContext } from '@/ChatContext';\nimport { Ellipsis, cn } from 'reablocks';\n\nexport interface MessageSourceProps extends ConversationSource {\n /**\n * Limit for the title.\n */\n limit?: number;\n}\n\nexport const MessageSource: FC<MessageSourceProps> = ({ title, url, image, limit = 50 }) => {\n const { theme } = useContext(ChatContext);\n\n return (\n <figure\n className={cn(theme.messages.message.sources.source.base)}\n onClick={() => {\n if (url) {\n window.open(url, '_blank');\n }\n }}\n >\n {image && <img src={image} alt={title} className={cn(theme.messages.message.sources.source.image)} />}\n {(title || url) && (\n <figcaption>\n {title && (\n <span className={cn(theme.messages.message.sources.source.title)}>\n <Ellipsis value={title} limit={limit} />\n </span>\n )}\n {url && (\n <a href={url} target=\"_blank\" rel=\"noopener noreferrer\" className={cn(theme.messages.message.sources.source.url)}>\n {url}\n </a>\n )}\n </figcaption>\n )}\n </figure>\n );\n};\n","import { ChatContext } from '@/ChatContext';\nimport { ConversationSource } from '@/types';\nimport { cn } from 'reablocks';\nimport { FC, PropsWithChildren, ReactNode, useContext } from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { MessageSource } from './MessageSource';\n\ninterface MessageSourcesProps extends PropsWithChildren {\n /**\n * Sources to render.\n */\n sources: ConversationSource[];\n}\n\nexport const MessageSources: FC<MessageSourcesProps> = ({\n sources,\n children\n}) => {\n const { theme } = useContext(ChatContext);\n const Comp = children ? Slot : MessageSource;\n\n if (!sources || sources.length === 0) {\n return null;\n }\n\n return (\n sources &&\n sources.length > 0 && (\n <div className={cn(theme.messages.message.sources.base)}>\n {sources.map((source, index) => (\n <Comp key={index} {...source}>\n {children}\n </Comp>\n ))}\n </div>\n )\n );\n};\n","import { ChatContext } from '@/ChatContext';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cn, IconButton } from 'reablocks';\nimport {\n FC,\n PropsWithChildren,\n ReactElement,\n ReactNode,\n useContext\n} from 'react';\nimport CopyIcon from '@/assets/copy.svg?react';\nimport ThumbsDownIcon from '@/assets/thumbs-down.svg?react';\nimport ThumbUpIcon from '@/assets/thumbs-up.svg?react';\nimport RefreshIcon from '@/assets/refresh.svg?react';\n\nexport interface MessageActionsProps extends PropsWithChildren {\n /**\n * Question to be copied\n */\n question: string;\n\n /**\n * Response to be copied\n */\n response?: string;\n\n /**\n * Icon to show for copy.\n */\n copyIcon?: ReactElement;\n\n /**\n * Icon to show for thumbs up.\n */\n thumbsUpIcon?: ReactElement;\n\n /**\n * Icon to show for thumbs down.\n */\n thumbsDownIcon?: ReactElement;\n\n /**\n * Icon to show for refresh.\n */\n refreshIcon?: ReactElement;\n\n /**\n * Callback function to handle copying.\n */\n onCopy?: () => void;\n\n /**\n * Callback function to handle upvoting.\n */\n onUpvote?: () => void;\n\n /**\n * Callback function to handle downvoting.\n */\n onDownvote?: () => void;\n\n /**\n * Callback function to handle refreshing.\n */\n onRefresh?: () => void;\n}\n\nexport const MessageActions: FC<MessageActionsProps> = ({\n children,\n ...props\n}) => {\n const { theme } = useContext(ChatContext);\n const {\n question,\n response,\n copyIcon = <CopyIcon />,\n thumbsUpIcon = <ThumbUpIcon />,\n thumbsDownIcon = <ThumbsDownIcon />,\n refreshIcon = <RefreshIcon />,\n onCopy,\n onUpvote,\n onDownvote,\n onRefresh\n } = props;\n const Comp = children ? Slot : 'div';\n\n const handleCopy = (text: string) => {\n navigator.clipboard\n .writeText(text)\n .then(() => {\n console.log('Text copied to clipboard');\n })\n .catch(err => {\n console.error('Could not copy text: ', err);\n });\n };\n\n return (\n (copyIcon || thumbsDownIcon || thumbsUpIcon || refreshIcon) && (\n <Comp className={cn(theme.messages.message.footer.base)}>\n {children || (\n <>\n {copyIcon && (\n <IconButton\n variant=\"text\"\n disablePadding\n title=\"Copy question and response\"\n className={cn(theme.messages.message.footer.copy)}\n onClick={\n onCopy ? onCopy : () => handleCopy(`${question}\\n${response}`)\n }\n >\n {copyIcon}\n </IconButton>\n )}\n {thumbsUpIcon && (\n <IconButton\n variant=\"text\"\n disablePadding\n title=\"Upvote\"\n className={cn(theme.messages.message.footer.upvote)}\n onClick={onUpvote}\n >\n {thumbsUpIcon}\n </IconButton>\n )}\n {thumbsDownIcon && (\n <IconButton\n variant=\"text\"\n disablePadding\n title=\"Downvote\"\n className={cn(theme.messages.message.footer.downvote)}\n onClick={onDownvote}\n >\n {thumbsDownIcon}\n </IconButton>\n )}\n {refreshIcon && (\n <IconButton\n variant=\"text\"\n disablePadding\n title=\"Refresh\"\n className={cn(theme.messages.message.footer.refresh)}\n onClick={onRefresh}\n >\n {refreshIcon}\n </IconButton>\n )}\n </>\n )}\n </Comp>\n )\n );\n};\n","import { FC, PropsWithChildren, useContext } from 'react';\nimport { ChatContext } from '@/ChatContext';\nimport { Card, cn } from 'reablocks';\nimport CopyIcon from '@/assets/copy.svg?react';\nimport ThumbsDownIcon from '@/assets/thumbs-down.svg?react';\nimport ThumbUpIcon from '@/assets/thumbs-up.svg?react';\nimport RefreshIcon from '@/assets/refresh.svg?react';\nimport { Conversation } from '@/types';\nimport { motion } from 'framer-motion';\nimport { MessageQuestion } from './MessageQuestion';\nimport { MessageResponse } from './MessageResponse';\nimport { MessageFiles } from './MessageFiles';\nimport { MessageSources } from './MessageSources';\nimport { MessageActions } from './MessageActions';\n\nconst messageVariants = {\n hidden: {\n opacity: 0,\n y: 20\n },\n visible: {\n opacity: 1,\n y: 0,\n transition: {\n duration: 0.3\n }\n }\n};\n\ninterface SessionMessageProps extends PropsWithChildren {\n /**\n * Conversation to render.\n */\n conversation: Conversation;\n\n /**\n * Whether the message is the last one in the list.\n */\n isLast?: boolean;\n}\n\nexport const SessionMessage: FC<SessionMessageProps> = ({\n conversation,\n isLast,\n children\n}) => {\n const { theme, isLoading } = useContext(ChatContext);\n\n return (\n <motion.div key={conversation.id} variants={messageVariants}>\n <Card className={cn(theme.messages.message.base)}>\n {children || (\n <>\n <MessageFiles files={conversation.files} />\n <MessageQuestion question={conversation.question} />\n <MessageResponse\n response={conversation.response}\n isLoading={isLast && isLoading}\n />\n <MessageSources sources={conversation.sources} />\n <MessageActions\n question={conversation.question}\n response={conversation.response}\n copyIcon={<CopyIcon />}\n thumbsUpIcon={<ThumbUpIcon />}\n thumbsDownIcon={<ThumbsDownIcon />}\n refreshIcon={<RefreshIcon />}\n />\n </>\n )}\n </Card>\n </motion.div>\n );\n};\n","import React, {\n ReactNode,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport { SessionEmpty } from './SessionEmpty';\nimport { ChatContext } from '@/ChatContext';\nimport { Button, cn, useInfinityList } from 'reablocks';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { Conversation } from '@/types';\n\nconst containerVariants = {\n hidden: {},\n visible: {\n transition: {\n staggerChildren: 0.07,\n when: 'beforeChildren'\n }\n }\n};\n\ninterface SessionMessagesProps {\n /**\n * Content to display when there are no sessions selected or a new session is started.\n */\n newSessionContent?: string | ReactNode;\n\n /**\n * Limit the number of results returned. Clientside pagination.\n */\n limit?: number | null;\n\n /**\n * Text to display for the show more button.\n */\n showMoreText?: string;\n\n /**\n * Render function for the session messages.\n */\n children?: (conversations: Conversation[]) => ReactNode;\n}\n\nexport const SessionMessages: React.FC<SessionMessagesProps> = ({\n children,\n newSessionContent,\n limit = 10,\n showMoreText = 'Show more'\n}) => {\n const { activeSession, theme } = useContext(ChatContext);\n const contentRef = useRef<HTMLDivElement | null>(null);\n const [isAnimating, setIsAnimating] = useState(true);\n\n useEffect(() => {\n if (contentRef.current) {\n // Scroll to the bottom of the content in animation queue\n requestAnimationFrame(\n () => (contentRef.current.scrollTop = contentRef.current.scrollHeight)\n );\n }\n // If we update the active session or load the page initially ( onAnimationComplete )\n // let's scroll to the bottom of the page.\n }, [activeSession, isAnimating]);\n\n function handleShowMore() {\n showNext(10);\n requestAnimationFrame(() => (contentRef.current.scrollTop = 0));\n }\n\n // Reverse the conversations so the last one is the first one\n const reversedConvos = useMemo(\n () => [...(activeSession?.conversations ?? [])].reverse(),\n [activeSession]\n );\n\n const { data, hasMore, showNext } = useInfinityList({\n items: reversedConvos,\n limit\n });\n\n // Reverse the data to the last one last now\n const reReversedConvo = useMemo(() => [...data].reverse(), [data]);\n\n // If we are not paging, just return the conversations\n const convosToRender = limit ? reReversedConvo : activeSession?.conversations;\n\n if (!activeSession) {\n return <SessionEmpty>{newSessionContent}</SessionEmpty>;\n }\n\n return (\n <div className={cn(theme.messages.content)} ref={contentRef}>\n {hasMore && (\n <Button\n variant=\"outline\"\n className={cn(theme.messages.showMore)}\n fullWidth\n onClick={handleShowMore}\n >\n {showMoreText}\n </Button>\n )}\n <AnimatePresence>\n <motion.div\n variants={containerVariants}\n key={activeSession?.id}\n initial=\"hidden\"\n animate=\"visible\"\n onAnimationComplete={() => {\n setIsAnimating(false);\n }}\n >\n {children(convosToRender)}\n </motion.div>\n </AnimatePresence>\n </div>\n );\n};\n","export interface ChatTheme {\n base: string;\n console: string;\n companion: string;\n empty: string;\n sessions: {\n base: string;\n console: string;\n companion: string;\n create: string;\n group: string;\n session: {\n base: string;\n active: string;\n delete: string;\n };\n };\n messages: {\n base: string;\n console: string;\n companion: string;\n back: string;\n inner: string;\n title: string;\n date: string;\n content: string;\n header: string;\n showMore: string;\n message: {\n base: string;\n question: string;\n response: string;\n cursor: string;\n files: {\n base: string;\n file: {\n base: string;\n name: string;\n };\n };\n sources: {\n base: string;\n source: {\n base: string;\n image: string;\n title: string;\n url: string;\n };\n };\n markdown: {\n p: string;\n a: string;\n table: string;\n th: string;\n td: string;\n code: string;\n li: string;\n ul: string;\n ol: string;\n copy: string;\n };\n footer: {\n base: string;\n copy: string;\n upvote: string;\n downvote: string;\n refresh: string;\n };\n };\n };\n input: {\n base: string;\n upload: string;\n input: string;\n send: string;\n stop: string;\n };\n}\n\nexport const chatTheme: ChatTheme = {\n base: 'text-white',\n console: 'flex w-full gap-5 h-full',\n companion: 'w-full h-full overflow-hidden',\n empty: 'text-center flex-1',\n sessions: {\n base: 'overflow-auto',\n console: 'min-w-[150px] w-[30%] max-w-[300px] bg-[#11111F] p-5 rounded',\n companion: 'w-full h-full',\n group: 'text-xs text-gray-400 mt-4',\n create: 'mb-4',\n session: {\n base: '',\n active: ' text-primary',\n delete: '[&>svg]:w-4 [&>svg]:h-4 opacity-50'\n }\n },\n messages: {\n base: '',\n console: 'flex flex-col flex-1 overflow-hidden',\n companion: 'flex w-full h-full',\n back: 'self-start p-0 my-2',\n inner: 'flex-1 h-full flex flex-col',\n title: 'text-2xl font-bold',\n date: 'text-sm whitespace-nowrap pt-2',\n content: 'mt-2 flex-1 overflow-auto',\n header: 'flex justify-between items-start gap-2',\n showMore: 'mb-4',\n message: {\n base: 'mb-6 flex flex-col p-5 rounded',\n question: 'font-semibold text-gray-400 mb-1',\n response: '',\n cursor: 'inline-block w-1 h-4 bg-current',\n files: {\n base: 'mb-2 flex flex-wrap gap-3 ',\n file: {\n base: 'flex items-center gap-2 border border-gray-700 p-2 rounded cursor-pointer',\n name: 'text-sm'\n }\n },\n sources: {\n base: 'my-4 flex flex-wrap gap-3',\n source: {\n base: 'flex gap-2 border border-gray-700 p-2 rounded cursor-pointer',\n image: 'w-6 h-6 rounded-md',\n title: 'text-md block',\n url: 'text-sm text-blue-700 underline'\n }\n },\n markdown: {\n copy: 'absolute right-0 top-0 [&>svg]:w-4 [&>svg]:h-4 opacity-50',\n p: 'mb-2',\n a: 'text-blue-700 underline',\n table: 'table-auto w-full m-2',\n th: 'px-4 py-2 text-left font-bold border-b border-gray-500',\n td: 'px-4 py-2',\n code: 'm-2 rounded',\n li: 'mb-2 ml-6',\n ul: 'mb-4 list-disc',\n ol: 'mb-4 list-decimal'\n },\n footer: {\n base: 'mt-3 flex gap-3',\n copy: '[&>svg]:w-4 [&>svg]:h-4 opacity-50',\n upvote: '[&>svg]:w-4 [&>svg]:h-4 opacity-50',\n downvote: '[&>svg]:w-4 [&>svg]:h-4 opacity-50',\n refresh: '[&>svg]:w-4 [&>svg]:h-4 opacity-50'\n }\n }\n },\n input: {\n base: 'flex mt-4',\n upload: 'px-4 py-2 text-white',\n input: 'w-full',\n send: 'px-4 py-2 text-white',\n stop: 'px-4 py-2 bg-red-500 text-white rounded hover:bg-red-700'\n }\n};\n","import {\n CSSProperties,\n FC,\n PropsWithChildren,\n useCallback,\n useEffect,\n useMemo,\n useState\n} from 'react';\nimport { useHotkeys } from 'reakeys';\nimport { cn, useComponentTheme } from 'reablocks';\nimport { Session } from './types';\nimport { ChatTheme, chatTheme } from './theme';\nimport { ChatContext } from './ChatContext';\nimport { PluggableList } from 'react-markdown/lib';\nimport useDimensions from 'react-cool-dimensions';\nimport { AnimatePresence } from 'framer-motion';\n\nexport interface ChatProps extends PropsWithChildren {\n /**\n * The style to apply to the root element.\n */\n style?: CSSProperties;\n\n /**\n * The class name to apply to the root element.\n */\n className?: string;\n\n /**\n * The type of prompt to display. Companion prompts are smaller and are\n * meant to be displayed alongside other content. Full prompts are larger\n * and are meant to be displayed on their own.\n */\n viewType?: 'companion' | 'console';\n\n /**\n * The list of sessions to display.\n */\n sessions: Session[];\n\n /**\n * The ID of the currently active session.\n */\n activeSessionId?: string;\n\n /**\n * Custom theme for the chat.\n */\n theme?: ChatTheme;\n\n /**\n * Remark plugins to apply to the request/response.\n */\n remarkPlugins?: PluggableList[];\n\n /**\n * Whether to display a loading state.\n */\n isLoading?: boolean;\n\n /**\n * Whether to disable the chat.\n */\n disabled?: boolean;\n\n /**\n * Callback function to handle when a session is selected.\n */\n onSelectSession?: (sessionId: string) => void;\n\n /**\n * Callback function to handle when a session is deleted.\n */\n onDeleteSession?: (sessionId: string) => void;\n\n /**\n * Callback function to handle creating a new session.\n */\n onNewSession?: () => void;\n}\n\nexport const Chat: FC<ChatProps> = ({\n children,\n viewType = 'console',\n sessions,\n onSelectSession,\n onDeleteSession,\n isLoading,\n activeSessionId,\n theme: customTheme = chatTheme,\n onNewSession,\n remarkPlugins,\n disabled,\n style,\n className\n}) => {\n const theme = useComponentTheme<ChatTheme>('chat', customTheme);\n const [internalActiveSessionID, setInternalActiveSessionID] = useState<\n string | undefined\n >(activeSessionId);\n\n const { width, observe } = useDimensions();\n const isCompact = viewType === 'companion' || (width && width < 767);\n\n useEffect(() => {\n setInternalActiveSessionID(activeSessionId);\n }, [activeSessionId]);\n\n const handleSelectSession = useCallback(\n (sessionId: string) => {\n setInternalActiveSessionID(sessionId);\n onSelectSession?.(sessionId);\n },\n [onSelectSession]\n );\n\n const handleDeleteSession = useCallback(\n (sessionId: string) => {\n setInternalActiveSessionID(undefined);\n onDeleteSession?.(sessionId);\n },\n [onDeleteSession]\n );\n\n const handleCreateNewSession = useCallback(() => {\n setInternalActiveSessionID(undefined);\n onNewSession?.();\n }, [onNewSession]);\n\n useHotkeys([\n {\n name: 'Create new session',\n category: 'Chat',\n keys: 'meta+shift+s',\n callback: event => {\n event.preventDefault();\n handleCreateNewSession();\n }\n }\n ]);\n\n const activeSession = useMemo(\n () => sessions.find(session => session.id === internalActiveSessionID),\n [sessions, internalActiveSessionID]\n );\n\n const contextValue = useMemo(\n () => ({\n sessions,\n activeSession,\n remarkPlugins,\n theme,\n disabled,\n isLoading,\n isCompact,\n activeSessionId: internalActiveSessionID,\n selectSession: handleSelectSession,\n deleteSession: handleDeleteSession,\n createSession: handleCreateNewSession\n }),\n [\n isLoading,\n isCompact,\n disabled,\n theme,\n remarkPlugins,\n sessions,\n activeSession,\n internalActiveSessionID,\n handleSelectSession,\n handleDeleteSession,\n handleCreateNewSession\n ]\n );\n\n return (\n <ChatContext.Provider value={contextValue}>\n <AnimatePresence initial={false}>\n <div\n ref={observe}\n className={cn(className, theme.base, {\n [theme.companion]: isCompact,\n [theme.console]: !isCompact\n })}\n style={style}\n >\n {children}\n </div>\n </AnimatePresence>\n </ChatContext.Provider>\n );\n};\n","import { FC, PropsWithChildren, useContext } from 'react';\nimport { List, cn } from 'reablocks';\nimport { ChatContext } from '@/ChatContext';\nimport { motion } from 'framer-motion';\n\nexport const SessionsList: FC<PropsWithChildren> = ({ children }) => {\n const { theme, isCompact, activeSessionId } = useContext(ChatContext);\n const isVisible = isCompact && !activeSessionId;\n\n return (\n (!isCompact || isVisible) && (\n <motion.div\n initial={{ translateX: '-100%' }}\n animate={{\n translateX: '0%',\n transition: {\n type: 'tween',\n ease: 'linear',\n duration: 0.2,\n when: 'beforeChildren'\n }\n }}\n exit={{ translateX: '-100%' }}\n className={cn(theme.sessions.base, {\n [theme.sessions.companion]: isCompact,\n [theme.sessions.console]: !isCompact\n })}\n >\n <List>{children}</List>\n </motion.div>\n )\n );\n};\n","import * as React from \"react\";\nconst SvgTrash = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\", className: \"lucide lucide-trash-2\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M3 6h18\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\" }), /* @__PURE__ */ React.createElement(\"line\", { x1: 10, x2: 10, y1: 11, y2: 17 }), /* @__PURE__ */ React.createElement(\"line\", { x1: 14, x2: 14, y1: 11, y2: 17 }));\nexport default SvgTrash;\n","import { FC, PropsWithChildren, ReactElement, useContext } from 'react';\nimport { ListItem, IconButton, cn, Ellipsis } from 'reablocks';\nimport { Session } from '@/types';\nimport TrashIcon from '@/assets/trash.svg?react';\nimport { ChatContext } from '@/ChatContext';\nimport { Slot } from '@radix-ui/react-slot';\n\nexport interface SessionListItemProps extends PropsWithChildren {\n /**\n * Session to display.\n */\n session: Session;\n\n /**\n * Indicates whether the session is deletable.\n */\n deletable?: boolean;\n\n /**\n * Icon to show for delete.\n */\n deleteIcon?: ReactElement;\n\n /**\n * Limit for the ellipsis.\n */\n limit?: number;\n}\n\nexport const SessionListItem: FC<SessionListItemProps> = ({\n children,\n session,\n deletable = true,\n limit = 100,\n deleteIcon = <TrashIcon />\n}) => {\n const { activeSessionId, selectSession, deleteSession, theme } =\n useContext(ChatContext);\n const Comp = children ? Slot : ListItem;\n\n return (\n <Comp\n dense\n disableGutters\n active={session.id === activeSessionId}\n className={cn(theme.sessions.session.base, {\n [theme.sessions.session.active]: session.id === activeSessionId\n })}\n onClick={() => selectSession?.(session.id)}\n end={\n <>\n {deletable && (\n <IconButton\n size=\"small\"\n variant=\"text\"\n onClick={e => {\n e.stopPropagation();\n deleteSession(session.id);\n }}\n className={cn(theme.sessions.session.delete)}\n >\n {deleteIcon}\n </IconButton>\n )}\n </>\n }\n >\n {children || <Ellipsis value={session.title} limit={limit} />}\n </Comp>\n );\n};\n","import { Button, cn } from 'reablocks';\nimport { FC, PropsWithChildren, ReactNode, useContext } from 'react';\nimport { ChatContext } from '@/ChatContext';\nimport { Slot } from '@radix-ui/react-slot';\n\ninterface NewSessionButtonProps extends PropsWithChildren {\n /**\n * Text for the new session button.\n */\n newSessionText?: string | ReactNode;\n}\n\nexport const NewSessionButton: FC<NewSessionButtonProps> = ({\n children,\n newSessionText = 'New Session'\n}) => {\n const { theme, createSession, disabled } = useContext(ChatContext);\n const Comp = children ? Slot : Button;\n\n return (\n <Comp\n fullWidth\n disableMargins\n color=\"primary\"\n className={cn(theme.sessions.create)}\n disabled={disabled}\n onClick={createSession}\n >\n {children || newSessionText}\n </Comp>\n );\n};\n","import { format, isToday, isYesterday, isThisWeek, isThisMonth, isThisYear, parseISO } from 'date-fns';\nimport { Session } from './types';\n\nexport interface GroupedSessions {\n heading: string;\n sessions: Session[];\n}\n\nconst sortOrder = [\n 'Today',\n 'Yesterday',\n 'Last Week',\n 'Last Month',\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n 'Last Year'\n];\n\nexport function groupSessionsByDate(sessions: Session[]): GroupedSessions[] {\n const grouped: any = {};\n\n sessions.forEach(session => {\n const createdAt = new Date(session.createdAt);\n\n if (isToday(createdAt)) {\n if (!grouped['Today']) grouped['Today'] = [];\n grouped['Today'].push(session);\n } else if (isYesterday(createdAt)) {\n if (!grouped['Yesterday']) grouped['Yesterday'] = [];\n grouped['Yesterday'].push(session);\n } else if (isThisWeek(createdAt)) {\n if (!grouped['Last Week']) grouped['Last Week'] = [];\n grouped['Last Week'].push(session);\n } else if (isThisMonth(createdAt)) {\n if (!grouped['Last Month']) grouped['Last Month'] = [];\n grouped['Last Month'].push(session);\n } else if (isThisYear(createdAt)) {\n const monthName = format(createdAt, 'MMMM');\n if (!grouped[monthName]) grouped[monthName] = [];\n grouped[monthName].push(session);\n } else {\n if (!grouped['Last Year']) grouped['Last Year'] = [];\n grouped['Last Year'].push(session);\n }\n });\n\n // Remove empty groups\n Object.keys(grouped).forEach(key => {\n if (grouped[key].length === 0) {\n delete grouped[key];\n }\n });\n\n // Sort groups\n const sortedGroups = Object.keys(grouped).sort((a, b) =>\n sortOrder.indexOf(a) - sortOrder.indexOf(b)\n );\n\n return sortedGroups.map(heading => ({\n heading,\n sessions: grouped[heading].sort((a, b) =>\n new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()\n )\n }));\n}\n","import { FC, ReactNode, useContext, useMemo } from 'react';\nimport { GroupedSessions, groupSessionsByDate } from '@/utils';\nimport { ChatContext } from '@/ChatContext';\n\nexport interface SessionGroupsProps {\n /**\n * Render function for the session groups.\n */\n children: (groups: GroupedSessions[]) => ReactNode;\n}\n\nexport const SessionGroups: FC<SessionGroupsProps> = ({ children }) => {\n const { sessions } = useContext(ChatContext);\n const groups = useMemo(() => groupSessionsByDate(sessions), [sessions]);\n\n return <>{children(groups)}</>;\n};\n","import { FC, PropsWithChildren, ReactNode, useContext } from 'react';\nimport { ChatContext } from '@/ChatContext';\nimport { ListItem, cn } from 'reablocks';\n\ninterface SessionsGroupProps extends PropsWithChildren {\n /**\n * Heading for the session group.\n */\n heading?: string | ReactNode;\n}\n\nexport const SessionsGroup: FC<SessionsGroupProps> = ({\n heading,\n children\n}) => {\n const { theme } = useContext(ChatContext);\n return (\n <>\n {heading && (\n <ListItem\n disableGutters\n disablePadding\n className={cn(theme.sessions.group)}\n >\n {heading}\n </ListItem>\n )}\n {children}\n </>\n );\n};\n"],"names":["SendIcon","StopIcon","AttachIcon","BackIcon","CopyIcon","SyntaxHighlighter","FileIcon","ThumbUpIcon","ThumbsDownIcon","RefreshIcon","TrashIcon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/assets/send.svg?react","../src/assets/stop.svg?react","../src/assets/paperclip.svg?react","../src/ChatContext.ts","../src/ChatInput.tsx","../src/SessionMessages/SessionEmpty.tsx","../src/SessionMessages/SessionMessagesHeader.tsx","../src/assets/back.svg?react","../src/SessionMessages/SessionMessagePanel.tsx","../src/assets/copy.svg?react","../src/assets/thumbs-down.svg?react","../src/assets/thumbs-up.svg?react","../src/assets/refresh.svg?react","../src/Markdown/themes/dark.ts","../src/Markdown/themes/light.ts","../src/Markdown/CodeHighlighter.tsx","../src/Markdown/Table.tsx","../src/Markdown/Markdown.tsx","../src/Markdown/plugins/remarkCve.ts","../src/SessionMessages/SessionMessage/MessageQuestion.tsx","../src/SessionMessages/SessionMessage/MessageResponse.tsx","../src/assets/file.svg?react","../src/SessionMessages/SessionMessage/MessageFile.tsx","../src/SessionMessages/SessionMessage/MessageFiles.tsx","../src/SessionMessages/SessionMessage/MessageSource.tsx","../src/SessionMessages/SessionMessage/MessageSources.tsx","../src/SessionMessages/SessionMessage/MessageActions.tsx","../src/SessionMessages/SessionMessage/SessionMessage.tsx","../src/SessionMessages/SessionMessages.tsx","../src/theme.ts","../src/utils/useDimensions.ts","../src/Chat.tsx","../src/SessionsList/SessionsList.tsx","../src/assets/trash.svg?react","../src/SessionsList/SessionListItem.tsx","../src/SessionsList/NewSessionButton.tsx","../src/utils/grouping.ts","../src/SessionsList/SessionGroups.tsx","../src/SessionsList/SessionsGroup.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgSend = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\", className: \"lucide lucide-send-horizontal\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"m3 3 3 9-3 9 19-9Z\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M6 12h16\" }));\nexport default SvgSend;\n","import * as React from \"react\";\nconst SvgStop = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\", className: \"lucide lucide-octagon-x\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"m15 9-6 6\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M2.586 16.726A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2h6.624a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586z\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"m9 9 6 6\" }));\nexport default SvgStop;\n","import * as React from \"react\";\nconst SvgPaperclip = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\", className: \"lucide lucide-paperclip\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48\" }));\nexport default SvgPaperclip;\n","import { createContext } from 'react';\nimport { Session } from './types';\nimport { ChatTheme } from './theme';\nimport { PluggableList } from 'react-markdown/lib';\n\nexport interface ChatContextProps {\n sessions: Session[];\n disabled?: boolean;\n activeSessionId: string | null;\n theme?: ChatTheme;\n isLoading?: boolean;\n isCompact?: boolean;\n activeSession?: Session | null;\n remarkPlugins?: PluggableList[];\n selectSession?: (sessionId: string) => void;\n deleteSession?: (sessionId: string) => void;\n createSession?: () => void;\n sendMessage?: (message: string) => void;\n stopMessage?: () => void;\n fileUpload?: (file: File) => void;\n}\n\nexport const ChatContext = createContext<ChatContextProps>({\n sessions: [],\n activeSessionId: null\n});\n","import {\n FC,\n useState,\n KeyboardEvent,\n ReactElement,\n useRef,\n ChangeEvent,\n useContext\n} from 'react';\nimport { Button, Textarea, cn } from 'reablocks';\nimport SendIcon from '@/assets/send.svg?react';\nimport StopIcon from '@/assets/stop.svg?react';\nimport AttachIcon from '@/assets/paperclip.svg?react';\nimport { ChatContext } from './ChatContext';\n\ninterface ChatInputProps {\n /**\n * Default value for the input field.\n */\n defaultValue?: string;\n\n /**\n * Allowed file types for upload.\n */\n allowedFiles?: string[];\n\n /**\n * Placeholder text for the input field.\n */\n placeholder?: string;\n\n /**\n * Icon to show for send.\n */\n sendIcon?: ReactElement;\n\n /**\n * Icon to show for send.\n */\n stopIcon?: ReactElement;\n\n /**\n * Icon to show for attach.\n */\n attachIcon?: ReactElement;\n}\n\nexport const ChatInput: FC<ChatInputProps> = ({\n allowedFiles,\n placeholder,\n defaultValue,\n sendIcon = <SendIcon />,\n stopIcon = <StopIcon />,\n attachIcon = <AttachIcon />\n}) => {\n const { theme, isLoading, disabled, sendMessage, stopMessage, fileUpload } =\n useContext(ChatContext);\n const [message, setMessage] = useState<string>('');\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const handleSendMessage = () => {\n if (message.trim()) {\n sendMessage?.(message);\n setMessage('');\n }\n };\n\n const handleKeyPress = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSendMessage();\n }\n };\n\n const handleFileUpload = (event: ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0];\n if (file && fileUpload) {\n fileUpload(file);\n }\n };\n\n return (\n <div className={cn(theme.input.base)}>\n <Textarea\n containerClassName={cn(theme.input.input)}\n minRows={1}\n autoFocus\n value={message}\n onChange={e => setMessage(e.target.value)}\n defaultValue={defaultValue}\n onKeyPress={handleKeyPress}\n placeholder={placeholder}\n disabled={isLoading || disabled}\n />\n {allowedFiles?.length > 0 && (\n <>\n <input\n type=\"file\"\n ref={fileInputRef}\n className=\"hidden\"\n accept={allowedFiles.join(',')}\n onChange={handleFileUpload}\n />\n <Button\n title=\"Upload\"\n disabled={isLoading || disabled}\n className={cn(theme.input.upload)}\n onClick={() => fileInputRef.current?.click()}\n >\n {attachIcon}\n </Button>\n </>\n )}\n {isLoading && (\n <Button\n title=\"Stop\"\n className={cn(theme.input.stop)}\n onClick={stopMessage}\n disabled={disabled}\n >\n {stopIcon}\n </Button>\n )}\n <Button\n title=\"Send\"\n className={cn(theme.input.send)}\n onClick={handleSendMessage}\n disabled={isLoading || disabled}\n >\n {sendIcon}\n </Button>\n </div>\n );\n};\n","import { FC, PropsWithChildren, useContext } from 'react';\nimport { ChatContext } from '@/ChatContext';\nimport { cn } from 'reablocks';\n\ninterface SessionEmptyProps extends PropsWithChildren {\n}\n\nexport const SessionEmpty: FC<SessionEmptyProps> = ({\n children\n}) => {\n const { theme } = useContext(ChatContext);\n return <div className={cn(theme.empty)}>{children}</div>;\n};\n","import { ChatContext } from '@/ChatContext';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cn, Ellipsis, DateFormat } from 'reablocks';\nimport { FC, PropsWithChildren, useContext } from 'react';\n\nexport const SessionMessagesHeader: FC<PropsWithChildren> = ({ children }) => {\n const { activeSession, theme } = useContext(ChatContext);\n const Comp = children ? Slot : 'header';\n\n if (!activeSession) {\n return null;\n }\n\n return (\n <Comp className={cn(theme.messages.header)}>\n {children || (\n <>\n <h2 className={cn(theme.messages.title)}>\n <Ellipsis limit={125} value={activeSession.title} />\n </h2>\n <DateFormat\n className={cn(theme.messages.date)}\n date={activeSession.createdAt}\n />\n </>\n )}\n </Comp>\n );\n};\n","import * as React from \"react\";\nconst SvgBack = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\", className: \"lucide lucide-chevron-left\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"m15 18-6-6 6-6\" }));\nexport default SvgBack;\n","import { FC, PropsWithChildren, useContext } from 'react';\nimport { Button, cn } from 'reablocks';\nimport { ChatContext } from '@/ChatContext';\nimport { motion } from 'framer-motion';\nimport BackIcon from '@/assets/back.svg?react';\n\nexport const SessionMessagePanel: FC<PropsWithChildren> = ({ children }) => {\n const { activeSessionId, theme, isCompact, selectSession } =\n useContext(ChatContext);\n const isVisible = isCompact && activeSessionId;\n\n return (\n (!isCompact || isVisible) && (\n <motion.div\n initial={{ translateX: '200%' }}\n animate={{\n translateX: '0%',\n transition: {\n type: 'tween',\n ease: 'linear',\n duration: 0.2,\n when: 'beforeChildren'\n }\n }}\n exit={{ translateX: '200%' }}\n className={cn(theme.messages.base, {\n [theme.messages.companion]: isCompact,\n [theme.messages.console]: !isCompact\n })}\n >\n <div className={cn(theme.messages.inner)}>\n {isCompact && (\n <Button\n variant=\"text\"\n size=\"small\"\n onClick={() => selectSession(null)}\n className={cn(theme.messages.back)}\n >\n <BackIcon />\n Back\n </Button>\n )}\n {children}\n </div>\n </motion.div>\n )\n );\n};\n","import * as React from \"react\";\nconst SvgCopy = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\", className: \"lucide lucide-copy\", ...props }, /* @__PURE__ */ React.createElement(\"rect\", { width: 14, height: 14, x: 8, y: 8, rx: 2, ry: 2 }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" }));\nexport default SvgCopy;\n","import * as React from \"react\";\nconst SvgThumbsDown = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\", className: \"lucide lucide-thumbs-down\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M17 14V2\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z\" }));\nexport default SvgThumbsDown;\n","import * as React from \"react\";\nconst SvgThumbsUp = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\", className: \"lucide lucide-thumbs-up\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M7 10v12\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\" }));\nexport default SvgThumbsUp;\n","import * as React from \"react\";\nconst SvgRefresh = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\", className: \"lucide lucide-refresh-ccw\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M3 3v5h5\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M16 16h5v5\" }));\nexport default SvgRefresh;\n","export const dark = {\n 'code[class*=\"language-\"]': {\n 'background': '#11111f',\n 'color': '#e2e8f0',\n 'textShadow': '0 1px rgba(0, 0, 0, 0.3)',\n 'fontFamily': '\"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace',\n 'direction': 'ltr',\n 'textAlign': 'left',\n 'whiteSpace': 'pre',\n 'wordSpacing': 'normal',\n 'wordBreak': 'normal',\n 'lineHeight': '1.5',\n 'MozTabSize': '2',\n 'OTabSize': '2',\n 'tabSize': '2',\n 'WebkitHyphens': 'none',\n 'MozHyphens': 'none',\n 'msHyphens': 'none',\n 'hyphens': 'none'\n },\n 'pre[class*=\"language-\"]': {\n 'background': '#11111f',\n 'color': '#e2e8f0',\n 'textShadow': '0 1px rgba(0, 0, 0, 0.3)',\n 'fontFamily': '\"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace',\n 'direction': 'ltr',\n 'textAlign': 'left',\n 'whiteSpace': 'pre',\n 'wordSpacing': 'normal',\n 'wordBreak': 'normal',\n 'lineHeight': '1.5',\n 'MozTabSize': '2',\n 'OTabSize': '2',\n 'tabSize': '2',\n 'WebkitHyphens': 'none',\n 'MozHyphens': 'none',\n 'msHyphens': 'none',\n 'hyphens': 'none',\n 'padding': '1em',\n 'margin': '0.5em 0',\n 'overflow': 'auto',\n 'borderRadius': '0.3em'\n },\n 'code[class*=\"language-\"]::-moz-selection': {\n 'background': '#1e293b',\n 'color': 'inherit',\n 'textShadow': 'none'\n },\n 'code[class*=\"language-\"] *::-moz-selection': {\n 'background': '#1e293b',\n 'color': 'inherit',\n 'textShadow': 'none'\n },\n 'pre[class*=\"language-\"] *::-moz-selection': {\n 'background': '#1e293b',\n 'color': 'inherit',\n 'textShadow': 'none'\n },\n 'code[class*=\"language-\"]::selection': {\n 'background': '#1e293b',\n 'color': 'inherit',\n 'textShadow': 'none'\n },\n 'code[class*=\"language-\"] *::selection': {\n 'background': '#1e293b',\n 'color': 'inherit',\n 'textShadow': 'none'\n },\n 'pre[class*=\"language-\"] *::selection': {\n 'background': '#1e293b',\n 'color': 'inherit',\n 'textShadow': 'none'\n },\n ':not(pre) > code[class*=\"language-\"]': {\n 'padding': '0.2em 0.3em',\n 'borderRadius': '0.3em',\n 'whiteSpace': 'normal'\n },\n 'comment': {\n 'color': '#64748b',\n 'fontStyle': 'italic'\n },\n 'prolog': {\n 'color': '#64748b'\n },\n 'cdata': {\n 'color': '#64748b'\n },\n 'doctype': {\n 'color': '#e2e8f0'\n },\n 'punctuation': {\n 'color': '#e2e8f0'\n },\n 'entity': {\n 'color': '#3b82f6',\n 'cursor': 'help'\n },\n 'attr-name': {\n 'color': '#f59e0b'\n },\n 'class-name': {\n 'color': '#f59e0b'\n },\n 'boolean': {\n 'color': '#3b82f6'\n },\n 'constant': {\n 'color': '#3b82f6'\n },\n 'number': {\n 'color': '#3b82f6'\n },\n 'atrule': {\n 'color': '#f59e0b'\n },\n 'keyword': {\n 'color': '#f472b6'\n },\n 'property': {\n 'color': '#3b82f6'\n },\n 'tag': {\n 'color': '#3b82f6'\n },\n 'symbol': {\n 'color': '#3b82f6'\n },\n 'deleted': {\n 'color': '#ef4444'\n },\n 'important': {\n 'color': '#f472b6'\n },\n 'selector': {\n 'color': '#10b981'\n },\n 'string': {\n 'color': '#10b981'\n },\n 'char': {\n 'color': '#10b981'\n },\n 'builtin': {\n 'color': '#10b981'\n },\n 'inserted': {\n 'color': '#10b981'\n },\n 'regex': {\n 'color': '#10b981'\n },\n 'attr-value': {\n 'color': '#10b981'\n },\n 'attr-value > .token.punctuation': {\n 'color': '#10b981'\n },\n 'variable': {\n 'color': '#60a5fa'\n },\n 'operator': {\n 'color': '#60a5fa'\n },\n 'function': {\n 'color': '#60a5fa'\n },\n 'url': {\n 'color': '#60a5fa'\n },\n 'attr-value > .token.punctuation.attr-equals': {\n 'color': '#e2e8f0'\n },\n 'special-attr > .token.attr-value > .token.value.css': {\n 'color': '#e2e8f0'\n },\n '.language-css .token.selector': {\n 'color': '#3b82f6'\n },\n '.language-css .token.property': {\n 'color': '#e2e8f0'\n },\n '.language-css .token.function': {\n 'color': '#60a5fa'\n },\n '.language-css .token.url > .token.function': {\n 'color': '#60a5fa'\n },\n '.language-css .token.url > .token.string.url': {\n 'color': '#10b981'\n },\n '.language-css .token.important': {\n 'color': '#f472b6'\n },\n '.language-css .token.atrule .token.rule': {\n 'color': '#f472b6'\n },\n '.language-javascript .token.operator': {\n 'color': '#f472b6'\n },\n '.language-javascript .token.template-string > .token.interpolation > .token.interpolation-punctuation.punctuation': {\n 'color': '#ef4444'\n },\n '.language-json .token.operator': {\n 'color': '#e2e8f0'\n },\n '.language-json .token.null.keyword': {\n 'color': '#3b82f6'\n },\n '.language-markdown .token.url': {\n 'color': '#e2e8f0'\n },\n '.language-markdown .token.url > .token.operator': {\n 'color': '#e2e8f0'\n },\n '.language-markdown .token.url-reference.url > .token.string': {\n 'color': '#e2e8f0'\n },\n '.language-markdown .token.url > .token.content': {\n 'color': '#60a5fa'\n },\n '.language-markdown .token.url > .token.url': {\n 'color': '#60a5fa'\n },\n '.language-markdown .token.url-reference.url': {\n 'color': '#60a5fa'\n },\n '.language-markdown .token.blockquote.punctuation': {\n 'color': '#64748b',\n 'fontStyle': 'italic'\n },\n '.language-markdown .token.hr.punctuation': {\n 'color': '#64748b',\n 'fontStyle': 'italic'\n },\n '.language-markdown .token.code-snippet': {\n 'color': '#10b981'\n },\n '.language-markdown .token.bold .token.content': {\n 'color': '#f59e0b'\n },\n '.language-markdown .token.italic .token.content': {\n 'color': '#f472b6'\n },\n '.language-markdown .token.strike .token.content': {\n 'color': '#3b82f6'\n },\n '.language-markdown .token.strike .token.punctuation': {\n 'color': '#3b82f6'\n },\n '.language-markdown .token.list.punctuation': {\n 'color': '#3b82f6'\n },\n '.language-markdown .token.title.important > .token.punctuation': {\n 'color': '#3b82f6'\n },\n 'bold': {\n 'fontWeight': 'bold'\n },\n 'italic': {\n 'fontStyle': 'italic'\n },\n 'namespace': {\n 'Opacity': '0.8'\n },\n 'token.tab:not(:empty):before': {\n 'color': '#64748b',\n 'textShadow': 'none'\n },\n 'token.cr:before': {\n 'color': '#64748b',\n 'textShadow': 'none'\n },\n 'token.lf:before': {\n 'color': '#64748b',\n 'textShadow': 'none'\n },\n 'token.space:before': {\n 'color': '#64748b',\n 'textShadow': 'none'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item': {\n 'marginRight': '0.4em'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > button': {\n 'background': '#1e293b',\n 'color': '#94a3b8',\n 'padding': '0.1em 0.4em',\n 'borderRadius': '0.3em'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > a': {\n 'background': '#1e293b',\n 'color': '#94a3b8',\n 'padding': '0.1em 0.4em',\n 'borderRadius': '0.3em'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > span': {\n 'background': '#1e293b',\n 'color': '#94a3b8',\n 'padding': '0.1em 0.4em',\n 'borderRadius': '0.3em'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:hover': {\n 'background': '#3b82f6',\n 'color': '#ffffff'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:focus': {\n 'background': '#3b82f6',\n 'color': '#ffffff'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:hover': {\n 'background': '#3b82f6',\n 'color': '#ffffff'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:focus': {\n 'background': '#3b82f6',\n 'color': '#ffffff'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:hover': {\n 'background': '#3b82f6',\n 'color': '#ffffff'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:focus': {\n 'background': '#3b82f6',\n 'color': '#ffffff'\n },\n '.line-highlight.line-highlight': {\n 'background': 'rgba(59, 130, 246, 0.08)'\n },\n '.line-highlight.line-highlight:before': {\n 'background': '#1e293b',\n 'color': '#e2e8f0',\n 'padding': '0.1em 0.6em',\n 'borderRadius': '0.3em',\n 'boxShadow': '0 2px 0 0 rgba(0, 0, 0, 0.2)'\n },\n '.line-highlight.line-highlight[data-end]:after': {\n 'background': '#1e293b',\n 'color': '#e2e8f0',\n 'padding': '0.1em 0.6em',\n 'borderRadius': '0.3em',\n 'boxShadow': '0 2px 0 0 rgba(0, 0, 0, 0.2)'\n },\n 'pre[id].linkable-line-numbers.linkable-line-numbers span.line-numbers-rows > span:hover:before': {\n 'backgroundColor': 'rgba(59, 130, 246, 0.08)'\n },\n '.line-numbers.line-numbers .line-numbers-rows': {\n 'borderRightColor': '#1e293b'\n },\n '.command-line .command-line-prompt': {\n 'borderRightColor': '#1e293b'\n },\n '.line-numbers .line-numbers-rows > span:before': {\n 'color': '#64748b'\n },\n '.command-line .command-line-prompt > span:before': {\n 'color': '#64748b'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-1': {\n 'color': '#3b82f6'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-5': {\n 'color': '#3b82f6'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-9': {\n 'color': '#3b82f6'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-2': {\n 'color': '#10b981'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-6': {\n 'color': '#10b981'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-10': {\n 'color': '#10b981'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-3': {\n 'color': '#60a5fa'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-7': {\n 'color': '#60a5fa'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-11': {\n 'color': '#60a5fa'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-4': {\n 'color': '#f472b6'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-8': {\n 'color': '#f472b6'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-12': {\n 'color': '#f472b6'\n },\n 'pre.diff-highlight > code .token.token.deleted:not(.prefix)': {\n 'backgroundColor': 'rgba(239, 68, 68, 0.15)'\n },\n 'pre > code.diff-highlight .token.token.deleted:not(.prefix)': {\n 'backgroundColor': 'rgba(239, 68, 68, 0.15)'\n },\n 'pre.diff-highlight > code .token.token.deleted:not(.prefix)::-moz-selection': {\n 'backgroundColor': 'rgba(239, 68, 68, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.deleted:not(.prefix) *::-moz-selection': {\n 'backgroundColor': 'rgba(239, 68, 68, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.deleted:not(.prefix)::-moz-selection': {\n 'backgroundColor': 'rgba(239, 68, 68, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.deleted:not(.prefix) *::-moz-selection': {\n 'backgroundColor': 'rgba(239, 68, 68, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.deleted:not(.prefix)::selection': {\n 'backgroundColor': 'rgba(239, 68, 68, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.deleted:not(.prefix) *::selection': {\n 'backgroundColor': 'rgba(239, 68, 68, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.deleted:not(.prefix)::selection': {\n 'backgroundColor': 'rgba(239, 68, 68, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.deleted:not(.prefix) *::selection': {\n 'backgroundColor': 'rgba(239, 68, 68, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.inserted:not(.prefix)': {\n 'backgroundColor': 'rgba(16, 185, 129, 0.15)'\n },\n 'pre > code.diff-highlight .token.token.inserted:not(.prefix)': {\n 'backgroundColor': 'rgba(16, 185, 129, 0.15)'\n },\n 'pre.diff-highlight > code .token.token.inserted:not(.prefix)::-moz-selection': {\n 'backgroundColor': 'rgba(16, 185, 129, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.inserted:not(.prefix) *::-moz-selection': {\n 'backgroundColor': 'rgba(16, 185, 129, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.inserted:not(.prefix)::-moz-selection': {\n 'backgroundColor': 'rgba(16, 185, 129, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.inserted:not(.prefix) *::-moz-selection': {\n 'backgroundColor': 'rgba(16, 185, 129, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.inserted:not(.prefix)::selection': {\n 'backgroundColor': 'rgba(16, 185, 129, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.inserted:not(.prefix) *::selection': {\n 'backgroundColor': 'rgba(16, 185, 129, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.inserted:not(.prefix)::selection': {\n 'backgroundColor': 'rgba(16, 185, 129, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.inserted:not(.prefix) *::selection': {\n 'backgroundColor': 'rgba(16, 185, 129, 0.25)'\n },\n '.prism-previewer.prism-previewer:before': {\n 'borderColor': '#11111f'\n },\n '.prism-previewer-gradient.prism-previewer-gradient div': {\n 'borderColor': '#11111f',\n 'borderRadius': '0.3em'\n },\n '.prism-previewer-color.prism-previewer-color:before': {\n 'borderRadius': '0.3em'\n },\n '.prism-previewer-easing.prism-previewer-easing:before': {\n 'borderRadius': '0.3em'\n },\n '.prism-previewer.prism-previewer:after': {\n 'borderTopColor': '#11111f'\n },\n '.prism-previewer-flipped.prism-previewer-flipped.after': {\n 'borderBottomColor': '#11111f'\n },\n '.prism-previewer-angle.prism-previewer-angle:before': {\n 'background': '#1e293b'\n },\n '.prism-previewer-time.prism-previewer-time:before': {\n 'background': '#1e293b'\n },\n '.prism-previewer-easing.prism-previewer-easing': {\n 'background': '#1e293b'\n },\n '.prism-previewer-angle.prism-previewer-angle circle': {\n 'stroke': '#e2e8f0',\n 'strokeOpacity': '1'\n },\n '.prism-previewer-time.prism-previewer-time circle': {\n 'stroke': '#e2e8f0',\n 'strokeOpacity': '1'\n },\n '.prism-previewer-easing.prism-previewer-easing circle': {\n 'stroke': '#e2e8f0',\n 'fill': 'transparent'\n },\n '.prism-previewer-easing.prism-previewer-easing path': {\n 'stroke': '#e2e8f0'\n },\n '.prism-previewer-easing.prism-previewer-easing line': {\n 'stroke': '#e2e8f0'\n }\n}\n","export const light = {\n 'code[class*=\"language-\"]': {\n 'background': '#fff',\n 'color': '#1e293b',\n 'textShadow': 'none',\n 'fontFamily': '\"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace',\n 'direction': 'ltr',\n 'textAlign': 'left',\n 'whiteSpace': 'pre',\n 'wordSpacing': 'normal',\n 'wordBreak': 'normal',\n 'lineHeight': '1.5',\n 'MozTabSize': '2',\n 'OTabSize': '2',\n 'tabSize': '2',\n 'WebkitHyphens': 'none',\n 'MozHyphens': 'none',\n 'msHyphens': 'none',\n 'hyphens': 'none'\n },\n 'pre[class*=\"language-\"]': {\n 'background': '#fff',\n 'color': '#1e293b',\n 'textShadow': 'none',\n 'fontFamily': '\"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace',\n 'direction': 'ltr',\n 'textAlign': 'left',\n 'whiteSpace': 'pre',\n 'wordSpacing': 'normal',\n 'wordBreak': 'normal',\n 'lineHeight': '1.5',\n 'MozTabSize': '2',\n 'OTabSize': '2',\n 'tabSize': '2',\n 'WebkitHyphens': 'none',\n 'MozHyphens': 'none',\n 'msHyphens': 'none',\n 'hyphens': 'none',\n 'padding': '1em',\n 'margin': '0.5em 0',\n 'overflow': 'auto',\n 'borderRadius': '0.3em',\n 'border': '1px solid #e2e8f0'\n },\n 'code[class*=\"language-\"]::-moz-selection': {\n 'background': '#e2e8f0',\n 'color': 'inherit',\n 'textShadow': 'none'\n },\n 'code[class*=\"language-\"] *::-moz-selection': {\n 'background': '#e2e8f0',\n 'color': 'inherit',\n 'textShadow': 'none'\n },\n 'pre[class*=\"language-\"] *::-moz-selection': {\n 'background': '#e2e8f0',\n 'color': 'inherit',\n 'textShadow': 'none'\n },\n 'code[class*=\"language-\"]::selection': {\n 'background': '#e2e8f0',\n 'color': 'inherit',\n 'textShadow': 'none'\n },\n 'code[class*=\"language-\"] *::selection': {\n 'background': '#e2e8f0',\n 'color': 'inherit',\n 'textShadow': 'none'\n },\n 'pre[class*=\"language-\"] *::selection': {\n 'background': '#e2e8f0',\n 'color': 'inherit',\n 'textShadow': 'none'\n },\n ':not(pre) > code[class*=\"language-\"]': {\n 'padding': '0.2em 0.3em',\n 'borderRadius': '0.3em',\n 'whiteSpace': 'normal',\n 'background': '#f1f5f9'\n },\n 'comment': {\n 'color': '#64748b',\n 'fontStyle': 'italic'\n },\n 'prolog': {\n 'color': '#64748b'\n },\n 'cdata': {\n 'color': '#64748b'\n },\n 'doctype': {\n 'color': '#1e293b'\n },\n 'punctuation': {\n 'color': '#64748b'\n },\n 'entity': {\n 'color': '#3b82f6',\n 'cursor': 'help'\n },\n 'attr-name': {\n 'color': '#ea580c'\n },\n 'class-name': {\n 'color': '#ea580c'\n },\n 'boolean': {\n 'color': '#3b82f6'\n },\n 'constant': {\n 'color': '#3b82f6'\n },\n 'number': {\n 'color': '#3b82f6'\n },\n 'atrule': {\n 'color': '#ea580c'\n },\n 'keyword': {\n 'color': '#9333ea'\n },\n 'property': {\n 'color': '#3b82f6'\n },\n 'tag': {\n 'color': '#3b82f6'\n },\n 'symbol': {\n 'color': '#3b82f6'\n },\n 'deleted': {\n 'color': '#dc2626'\n },\n 'important': {\n 'color': '#9333ea'\n },\n 'selector': {\n 'color': '#16a34a'\n },\n 'string': {\n 'color': '#16a34a'\n },\n 'char': {\n 'color': '#16a34a'\n },\n 'builtin': {\n 'color': '#16a34a'\n },\n 'inserted': {\n 'color': '#16a34a'\n },\n 'regex': {\n 'color': '#16a34a'\n },\n 'attr-value': {\n 'color': '#16a34a'\n },\n 'attr-value > .token.punctuation': {\n 'color': '#16a34a'\n },\n 'variable': {\n 'color': '#3b82f6'\n },\n 'operator': {\n 'color': '#3b82f6'\n },\n 'function': {\n 'color': '#3b82f6'\n },\n 'url': {\n 'color': '#3b82f6'\n },\n 'attr-value > .token.punctuation.attr-equals': {\n 'color': '#64748b'\n },\n 'special-attr > .token.attr-value > .token.value.css': {\n 'color': '#1e293b'\n },\n '.language-css .token.selector': {\n 'color': '#3b82f6'\n },\n '.language-css .token.property': {\n 'color': '#1e293b'\n },\n '.language-css .token.function': {\n 'color': '#3b82f6'\n },\n '.language-css .token.url > .token.function': {\n 'color': '#3b82f6'\n },\n '.language-css .token.url > .token.string.url': {\n 'color': '#16a34a'\n },\n '.language-css .token.important': {\n 'color': '#9333ea'\n },\n '.language-css .token.atrule .token.rule': {\n 'color': '#9333ea'\n },\n '.language-javascript .token.operator': {\n 'color': '#9333ea'\n },\n '.language-javascript .token.template-string > .token.interpolation > .token.interpolation-punctuation.punctuation': {\n 'color': '#dc2626'\n },\n '.language-json .token.operator': {\n 'color': '#1e293b'\n },\n '.language-json .token.null.keyword': {\n 'color': '#3b82f6'\n },\n '.language-markdown .token.url': {\n 'color': '#1e293b'\n },\n '.language-markdown .token.url > .token.operator': {\n 'color': '#1e293b'\n },\n '.language-markdown .token.url-reference.url > .token.string': {\n 'color': '#1e293b'\n },\n '.language-markdown .token.url > .token.content': {\n 'color': '#3b82f6'\n },\n '.language-markdown .token.url > .token.url': {\n 'color': '#3b82f6'\n },\n '.language-markdown .token.url-reference.url': {\n 'color': '#3b82f6'\n },\n '.language-markdown .token.blockquote.punctuation': {\n 'color': '#64748b',\n 'fontStyle': 'italic'\n },\n '.language-markdown .token.hr.punctuation': {\n 'color': '#64748b',\n 'fontStyle': 'italic'\n },\n '.language-markdown .token.code-snippet': {\n 'color': '#16a34a'\n },\n '.language-markdown .token.bold .token.content': {\n 'color': '#ea580c'\n },\n '.language-markdown .token.italic .token.content': {\n 'color': '#9333ea'\n },\n '.language-markdown .token.strike .token.content': {\n 'color': '#3b82f6'\n },\n '.language-markdown .token.strike .token.punctuation': {\n 'color': '#3b82f6'\n },\n '.language-markdown .token.list.punctuation': {\n 'color': '#3b82f6'\n },\n '.language-markdown .token.title.important > .token.punctuation': {\n 'color': '#3b82f6'\n },\n 'bold': {\n 'fontWeight': 'bold'\n },\n 'italic': {\n 'fontStyle': 'italic'\n },\n 'namespace': {\n 'Opacity': '0.8'\n },\n 'token.tab:not(:empty):before': {\n 'color': '#94a3b8'\n },\n 'token.cr:before': {\n 'color': '#94a3b8'\n },\n 'token.lf:before': {\n 'color': '#94a3b8'\n },\n 'token.space:before': {\n 'color': '#94a3b8'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item': {\n 'marginRight': '0.4em'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > button': {\n 'background': '#f1f5f9',\n 'color': '#475569',\n 'padding': '0.1em 0.4em',\n 'borderRadius': '0.3em'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > a': {\n 'background': '#f1f5f9',\n 'color': '#475569',\n 'padding': '0.1em 0.4em',\n 'borderRadius': '0.3em'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > span': {\n 'background': '#f1f5f9',\n 'color': '#475569',\n 'padding': '0.1em 0.4em',\n 'borderRadius': '0.3em'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:hover': {\n 'background': '#3b82f6',\n 'color': '#ffffff'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:focus': {\n 'background': '#3b82f6',\n 'color': '#ffffff'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:hover': {\n 'background': '#3b82f6',\n 'color': '#ffffff'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:focus': {\n 'background': '#3b82f6',\n 'color': '#ffffff'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:hover': {\n 'background': '#3b82f6',\n 'color': '#ffffff'\n },\n 'div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:focus': {\n 'background': '#3b82f6',\n 'color': '#ffffff'\n },\n '.line-highlight.line-highlight': {\n 'background': 'rgba(59, 130, 246, 0.08)'\n },\n '.line-highlight.line-highlight:before': {\n 'background': '#f1f5f9',\n 'color': '#1e293b',\n 'padding': '0.1em 0.6em',\n 'borderRadius': '0.3em',\n 'boxShadow': '0 2px 0 0 rgba(0, 0, 0, 0.1)'\n },\n '.line-highlight.line-highlight[data-end]:after': {\n 'background': '#f1f5f9',\n 'color': '#1e293b',\n 'padding': '0.1em 0.6em',\n 'borderRadius': '0.3em',\n 'boxShadow': '0 2px 0 0 rgba(0, 0, 0, 0.1)'\n },\n 'pre[id].linkable-line-numbers.linkable-line-numbers span.line-numbers-rows > span:hover:before': {\n 'backgroundColor': 'rgba(59, 130, 246, 0.08)'\n },\n '.line-numbers.line-numbers .line-numbers-rows': {\n 'borderRightColor': '#e2e8f0'\n },\n '.command-line .command-line-prompt': {\n 'borderRightColor': '#e2e8f0'\n },\n '.line-numbers .line-numbers-rows > span:before': {\n 'color': '#94a3b8'\n },\n '.command-line .command-line-prompt > span:before': {\n 'color': '#94a3b8'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-1': {\n 'color': '#3b82f6'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-5': {\n 'color': '#3b82f6'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-9': {\n 'color': '#3b82f6'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-2': {\n 'color': '#16a34a'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-6': {\n 'color': '#16a34a'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-10': {\n 'color': '#16a34a'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-3': {\n 'color': '#ea580c'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-7': {\n 'color': '#ea580c'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-11': {\n 'color': '#ea580c'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-4': {\n 'color': '#9333ea'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-8': {\n 'color': '#9333ea'\n },\n '.rainbow-braces .token.token.punctuation.brace-level-12': {\n 'color': '#9333ea'\n },\n 'pre.diff-highlight > code .token.token.deleted:not(.prefix)': {\n 'backgroundColor': 'rgba(220, 38, 38, 0.15)'\n },\n 'pre > code.diff-highlight .token.token.deleted:not(.prefix)': {\n 'backgroundColor': 'rgba(220, 38, 38, 0.15)'\n },\n 'pre.diff-highlight > code .token.token.deleted:not(.prefix)::-moz-selection': {\n 'backgroundColor': 'rgba(220, 38, 38, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.deleted:not(.prefix) *::-moz-selection': {\n 'backgroundColor': 'rgba(220, 38, 38, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.deleted:not(.prefix)::-moz-selection': {\n 'backgroundColor': 'rgba(220, 38, 38, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.deleted:not(.prefix) *::-moz-selection': {\n 'backgroundColor': 'rgba(220, 38, 38, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.deleted:not(.prefix)::selection': {\n 'backgroundColor': 'rgba(220, 38, 38, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.deleted:not(.prefix) *::selection': {\n 'backgroundColor': 'rgba(220, 38, 38, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.deleted:not(.prefix)::selection': {\n 'backgroundColor': 'rgba(220, 38, 38, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.deleted:not(.prefix) *::selection': {\n 'backgroundColor': 'rgba(220, 38, 38, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.inserted:not(.prefix)': {\n 'backgroundColor': 'rgba(22, 163, 74, 0.15)'\n },\n 'pre > code.diff-highlight .token.token.inserted:not(.prefix)': {\n 'backgroundColor': 'rgba(22, 163, 74, 0.15)'\n },\n 'pre.diff-highlight > code .token.token.inserted:not(.prefix)::-moz-selection': {\n 'backgroundColor': 'rgba(22, 163, 74, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.inserted:not(.prefix) *::-moz-selection': {\n 'backgroundColor': 'rgba(22, 163, 74, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.inserted:not(.prefix)::-moz-selection': {\n 'backgroundColor': 'rgba(22, 163, 74, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.inserted:not(.prefix) *::-moz-selection': {\n 'backgroundColor': 'rgba(22, 163, 74, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.inserted:not(.prefix)::selection': {\n 'backgroundColor': 'rgba(22, 163, 74, 0.25)'\n },\n 'pre.diff-highlight > code .token.token.inserted:not(.prefix) *::selection': {\n 'backgroundColor': 'rgba(22, 163, 74, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.inserted:not(.prefix)::selection': {\n 'backgroundColor': 'rgba(22, 163, 74, 0.25)'\n },\n 'pre > code.diff-highlight .token.token.inserted:not(.prefix) *::selection': {\n 'backgroundColor': 'rgba(22, 163, 74, 0.25)'\n },\n '.prism-previewer.prism-previewer:before': {\n 'borderColor': '#fff'\n },\n '.prism-previewer-gradient.prism-previewer-gradient div': {\n 'borderColor': '#fff',\n 'borderRadius': '0.3em'\n },\n '.prism-previewer-color.prism-previewer-color:before': {\n 'borderRadius': '0.3em'\n },\n '.prism-previewer-easing.prism-previewer-easing:before': {\n 'borderRadius': '0.3em'\n },\n '.prism-previewer.prism-previewer:after': {\n 'borderTopColor': '#fff'\n },\n '.prism-previewer-flipped.prism-previewer-flipped.after': {\n 'borderBottomColor': '#fff'\n },\n '.prism-previewer-angle.prism-previewer-angle:before': {\n 'background': '#f1f5f9'\n },\n '.prism-previewer-time.prism-previewer-time:before': {\n 'background': '#f1f5f9'\n },\n '.prism-previewer-easing.prism-previewer-easing': {\n 'background': '#f1f5f9'\n },\n '.prism-previewer-angle.prism-previewer-angle circle': {\n 'stroke': '#1e293b',\n 'strokeOpacity': '1'\n },\n '.prism-previewer-time.prism-previewer-time circle': {\n 'stroke': '#1e293b',\n 'strokeOpacity': '1'\n },\n '.prism-previewer-easing.prism-previewer-easing circle': {\n 'stroke': '#1e293b',\n 'fill': 'transparent'\n },\n '.prism-previewer-easing.prism-previewer-easing path': {\n 'stroke': '#1e293b'\n },\n '.prism-previewer-easing.prism-previewer-easing line': {\n 'stroke': '#1e293b'\n }\n}\n","import React, { FC, PropsWithChildren, ReactElement } from 'react';\nimport { Button, cn } from 'reablocks';\nimport { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';\nimport CopyIcon from '@/assets/copy.svg?react';\nimport { dark } from './themes';\n\nexport interface CodeHighlighterProps extends PropsWithChildren {\n /**\n * The class name to apply to the code block.\n */\n className?: string;\n\n /**\n * The language of the code block.\n */\n language?: string;\n\n /**\n * The class name to apply to the copy button.\n */\n copyClassName?: string;\n\n /**\n * Icon to show for copy.\n */\n copyIcon?: ReactElement;\n\n /**\n * The theme to use for the code block.\n */\n theme?: Record<string, string>;\n}\n\nexport const CodeHighlighter: FC<CodeHighlighterProps> = ({\n className,\n children,\n copyClassName,\n copyIcon = <CopyIcon />,\n language,\n theme = dark\n}) => {\n const match = language?.match(/language-(\\w+)/);\n const lang = match ? match[1] : 'text';\n\n const handleCopy = (text: string) => {\n navigator.clipboard\n .writeText(text)\n .then(() => {\n console.log('Text copied to clipboard');\n })\n .catch(err => {\n console.error('Could not copy text: ', err);\n });\n };\n\n return (\n <div className={cn('relative', className)}>\n {copyIcon && (\n <Button\n className={cn(copyClassName)}\n size=\"small\"\n variant=\"text\"\n title=\"Copy code\"\n onClick={() => handleCopy(children as string)}\n >\n {copyIcon}\n </Button>\n )}\n <SyntaxHighlighter\n language={lang}\n style={theme}\n >\n {children}\n </SyntaxHighlighter>\n </div>\n );\n};\n","import React, { FC, PropsWithChildren } from 'react';\n\nexport const TableComponent: FC<PropsWithChildren<React.HTMLAttributes<HTMLTableElement>>> = ({ children, ...props }) => (\n <table {...props}>\n {children}\n </table>\n);\n\nexport const TableHeaderCell: FC<PropsWithChildren<React.HTMLAttributes<HTMLTableHeaderCellElement>>> = ({ children, ...props }) => (\n <th {...props}>\n {children}\n </th>\n);\n\nexport const TableDataCell: FC<PropsWithChildren<React.HTMLAttributes<HTMLTableDataCellElement>>> = ({ children, ...props }) => (\n <td {...props}>\n {children}\n </td>\n);\n","import { FC, PropsWithChildren, useContext } from 'react';\nimport ReactMarkdown from 'react-markdown';\nimport { PluggableList } from 'react-markdown/lib';\nimport remarkGfm from 'remark-gfm';\nimport { CodeHighlighter } from './CodeHighlighter';\nimport { cn } from 'reablocks';\nimport { TableComponent, TableHeaderCell, TableDataCell } from './Table';\nimport { ChatContext } from '@/ChatContext';\n\ninterface MarkdownWrapperProps extends PropsWithChildren {\n /**\n * Remark plugins to apply to the markdown content.\n */\n remarkPlugins?: PluggableList[];\n}\n\nexport const Markdown: FC<MarkdownWrapperProps> = ({\n children,\n remarkPlugins = [remarkGfm]\n}) => {\n const { theme } = useContext(ChatContext);\n\n return (\n <ReactMarkdown\n remarkPlugins={remarkPlugins as PluggableList}\n components={{\n code: ({ className, ...props }) => (\n <CodeHighlighter\n {...props}\n // Ref: https://github.com/remarkjs/react-markdown?tab=readme-ov-file#use-custom-components-syntax-highlight\n language={className}\n className={cn(theme.messages.message.markdown.code, className)}\n copyClassName={cn(theme.messages.message.markdown.copy)}\n />\n ),\n table: props => <TableComponent {...props} className={cn(theme.messages.message.markdown.table)} />,\n th: props => <TableHeaderCell {...props} className={cn(theme.messages.message.markdown.th)} />,\n td: props => <TableDataCell {...props} className={cn(theme.messages.message.markdown.td)} />,\n a: props => <a {...props} className={cn(theme.messages.message.markdown.a)} />,\n p: props => <p {...props} className={cn(theme.messages.message.markdown.p)} />,\n li: props => <li {...props} className={cn(theme.messages.message.markdown.li)} />,\n ul: props => <ul {...props} className={cn(theme.messages.message.markdown.ul)} />,\n ol: props => <ol {...props} className={cn(theme.messages.message.markdown.ol)} />\n }}\n >\n {children as string}\n </ReactMarkdown>\n );\n};\n","import { findAndReplace } from 'mdast-util-find-and-replace';\n\nconst CVE_REGEX = /(CVE-(19|20)\\d{2}-\\d{4,7})/gi;\n\nexport function remarkCve() {\n return (tree, _file) => {\n findAndReplace(tree, [[\n CVE_REGEX,\n replaceCve as unknown as any\n ]]);\n };\n\n function replaceCve(value, id) {\n return [\n {\n type: 'link',\n url: `https://cve.mitre.org/cgi-bin/cvename.cgi?name=${id}`,\n children: [\n { children: [{ type: 'text', value: value.trim() }] }\n ]\n }\n ];\n }\n}\n","import { ChatContext } from '@/ChatContext';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cn } from 'reablocks';\nimport { FC, PropsWithChildren, useContext } from 'react';\nimport { Markdown } from '@/Markdown';\nimport { PluggableList } from 'react-markdown/lib';\nimport remarkGfm from 'remark-gfm';\nimport remarkYoutube from 'remark-youtube';\n\nexport interface MessageQuestionProps extends PropsWithChildren {\n /**\n * Question to render.\n */\n question: string;\n}\n\nexport const MessageQuestion: FC<MessageQuestionProps> = ({\n question,\n children\n}) => {\n const { theme, remarkPlugins = [remarkGfm, remarkYoutube] } =\n useContext(ChatContext);\n const Comp = children ? Slot : 'div';\n return (\n <Comp className={cn(theme.messages.message.question)}>\n {children || (\n <Markdown remarkPlugins={remarkPlugins as PluggableList[]}>\n {question}\n </Markdown>\n )}\n </Comp>\n );\n};\n","import { ChatContext } from '@/ChatContext';\nimport { Slot } from '@radix-ui/react-slot';\nimport { motion } from 'framer-motion';\nimport { cn } from 'reablocks';\nimport { FC, PropsWithChildren, useContext } from 'react';\nimport { Markdown } from '@/Markdown';\nimport { PluggableList } from 'react-markdown/lib';\nimport remarkGfm from 'remark-gfm';\nimport remarkYoutube from 'remark-youtube';\n\nexport interface MessageResponseProps extends PropsWithChildren {\n /**\n * Response to render.\n */\n response: string;\n\n /**\n * Whether the response is loading.\n */\n isLoading?: boolean;\n}\n\nexport const MessageResponse: FC<MessageResponseProps> = ({\n response,\n isLoading,\n children\n}) => {\n const { theme, remarkPlugins = [remarkGfm, remarkYoutube] } =\n useContext(ChatContext);\n const Comp = children ? Slot : 'div';\n return (\n <Comp className={cn(theme.messages.message.response)}>\n {children || (\n <>\n <Markdown remarkPlugins={remarkPlugins as PluggableList[]}>\n {response}\n </Markdown>\n {isLoading && (\n <motion.div\n className={cn(theme.messages.message.cursor)}\n animate={{ opacity: [1, 0] }}\n transition={{\n duration: 0.7,\n repeat: Infinity,\n repeatType: 'reverse'\n }}\n />\n )}\n </>\n )}\n </Comp>\n );\n};\n","import * as React from \"react\";\nconst SvgFile = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, viewBox: \"0 0 16 16\", fill: \"currentColor\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M2.7036 1.37034C3.04741 1.02653 3.51373 0.833374 3.99996 0.833374H9.33329H9.33331C9.47275 0.833374 9.59885 0.890449 9.68954 0.98251L13.6843 4.97722C13.7763 5.0679 13.8333 5.19398 13.8333 5.33337L13.8333 5.3379V13.3334C13.8333 13.8196 13.6401 14.2859 13.2963 14.6297C12.9525 14.9736 12.4862 15.1667 12 15.1667H3.99996C3.51373 15.1667 3.04741 14.9736 2.7036 14.6297C2.35978 14.2859 2.16663 13.8196 2.16663 13.3334V2.66671C2.16663 2.18048 2.35978 1.71416 2.7036 1.37034ZM3.99996 1.83337H8.83331V5.33337C8.83331 5.60952 9.05717 5.83337 9.33331 5.83337H12.8333V13.3334C12.8333 13.5544 12.7455 13.7663 12.5892 13.9226C12.4329 14.0789 12.221 14.1667 12 14.1667H3.99996C3.77895 14.1667 3.56698 14.0789 3.4107 13.9226C3.25442 13.7663 3.16663 13.5544 3.16663 13.3334V2.66671C3.16663 2.44569 3.25442 2.23373 3.4107 2.07745C3.56698 1.92117 3.77895 1.83337 3.99996 1.83337ZM9.83331 2.5405L12.1262 4.83337H9.83331V2.5405ZM5.33331 8.16663C5.05717 8.16663 4.83331 8.39048 4.83331 8.66663C4.83331 8.94277 5.05717 9.16663 5.33331 9.16663H10.6666C10.9428 9.16663 11.1666 8.94277 11.1666 8.66663C11.1666 8.39048 10.9428 8.16663 10.6666 8.16663H5.33331ZM4.83331 11.3334C4.83331 11.0572 5.05717 10.8334 5.33331 10.8334H10.6666C10.9428 10.8334 11.1666 11.0572 11.1666 11.3334C11.1666 11.6095 10.9428 11.8334 10.6666 11.8334H5.33331C5.05717 11.8334 4.83331 11.6095 4.83331 11.3334ZM5.33331 5.5C5.05717 5.5 4.83331 5.72386 4.83331 6C4.83331 6.27614 5.05717 6.5 5.33331 6.5H6.66665C6.94279 6.5 7.16665 6.27614 7.16665 6C7.16665 5.72386 6.94279 5.5 6.66665 5.5H5.33331Z\" }));\nexport default SvgFile;\n","import { FC, useContext, ReactElement } from 'react';\nimport { ConversationFile } from '@/types';\nimport { ChatContext } from '@/ChatContext';\nimport { Ellipsis, cn } from 'reablocks';\nimport FileIcon from '@/assets/file.svg?react';\n\nexport interface MessageFileProps extends ConversationFile {\n /**\n * Icon to show for delete.\n */\n fileIcon?: ReactElement;\n\n /**\n * Limit for the name.\n */\n limit?: number;\n}\n\nexport const MessageFile: FC<MessageFileProps> = ({\n name,\n type,\n url,\n limit = 100,\n fileIcon = <FileIcon />\n}) => {\n const { theme } = useContext(ChatContext);\n const isImage = type?.startsWith('image/');\n\n return (\n <figure\n className={cn(theme.messages.message.files.file.base)}\n onClick={() => {\n window.open(url, '_blank');\n }}\n >\n {isImage ? (\n <>\n <img src={url} className=\"h-10 w-10\" />\n </>\n ) : (\n <>\n {fileIcon}\n </>\n )}\n {name && (\n <figcaption>\n {name && (\n <span className={cn(theme.messages.message.files.file.name)}>\n <Ellipsis value={name} limit={limit} />\n </span>\n )}\n </figcaption>\n )}\n </figure>\n );\n};\n","import { ChatContext } from '@/ChatContext';\nimport { ConversationFile } from '@/types';\nimport { cn } from 'reablocks';\nimport { FC, PropsWithChildren, useContext } from 'react';\nimport { MessageFile } from './MessageFile';\nimport { Slot } from '@radix-ui/react-slot';\n\ninterface MessageFilesProps extends PropsWithChildren {\n /**\n * Files to render.\n */\n files: ConversationFile[];\n}\n\nexport const MessageFiles: FC<MessageFilesProps> = ({ files, children }) => {\n const { theme } = useContext(ChatContext);\n const Comp = children ? Slot : MessageFile;\n\n if (!files || files.length === 0) {\n return null;\n }\n\n return (\n files.length > 0 && (\n <div className={cn(theme.messages.message.files.base)}>\n {files.map((file, index) => (\n <Comp key={index} {...file}>\n {children}\n </Comp>\n ))}\n </div>\n )\n );\n};\n","import { FC, useContext } from 'react';\nimport { ConversationSource } from '@/types';\nimport { ChatContext } from '@/ChatContext';\nimport { Ellipsis, cn } from 'reablocks';\n\nexport interface MessageSourceProps extends ConversationSource {\n /**\n * Limit for the title.\n */\n limit?: number;\n}\n\nexport const MessageSource: FC<MessageSourceProps> = ({ title, url, image, limit = 50 }) => {\n const { theme } = useContext(ChatContext);\n\n return (\n <figure\n className={cn(theme.messages.message.sources.source.base)}\n onClick={() => {\n if (url) {\n window.open(url, '_blank');\n }\n }}\n >\n {image && <img src={image} alt={title} className={cn(theme.messages.message.sources.source.image)} />}\n {(title || url) && (\n <figcaption>\n {title && (\n <span className={cn(theme.messages.message.sources.source.title)}>\n <Ellipsis value={title} limit={limit} />\n </span>\n )}\n {url && (\n <a href={url} target=\"_blank\" rel=\"noopener noreferrer\" className={cn(theme.messages.message.sources.source.url)}>\n {url}\n </a>\n )}\n </figcaption>\n )}\n </figure>\n );\n};\n","import { ChatContext } from '@/ChatContext';\nimport { ConversationSource } from '@/types';\nimport { cn } from 'reablocks';\nimport { FC, PropsWithChildren, useContext } from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { MessageSource } from './MessageSource';\n\ninterface MessageSourcesProps extends PropsWithChildren {\n /**\n * Sources to render.\n */\n sources: ConversationSource[];\n}\n\nexport const MessageSources: FC<MessageSourcesProps> = ({\n sources,\n children\n}) => {\n const { theme } = useContext(ChatContext);\n const Comp = children ? Slot : MessageSource;\n\n if (!sources || sources.length === 0) {\n return null;\n }\n\n return (\n sources &&\n sources.length > 0 && (\n <div className={cn(theme.messages.message.sources.base)}>\n {sources.map((source, index) => (\n <Comp key={index} {...source}>\n {children}\n </Comp>\n ))}\n </div>\n )\n );\n};\n","import { ChatContext } from '@/ChatContext';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cn, IconButton } from 'reablocks';\nimport {\n FC,\n PropsWithChildren,\n ReactElement,\n ReactNode,\n useContext\n} from 'react';\nimport CopyIcon from '@/assets/copy.svg?react';\nimport ThumbsDownIcon from '@/assets/thumbs-down.svg?react';\nimport ThumbUpIcon from '@/assets/thumbs-up.svg?react';\nimport RefreshIcon from '@/assets/refresh.svg?react';\n\nexport interface MessageActionsProps extends PropsWithChildren {\n /**\n * Question to be copied\n */\n question: string;\n\n /**\n * Response to be copied\n */\n response?: string;\n\n /**\n * Icon to show for copy.\n */\n copyIcon?: ReactElement;\n\n /**\n * Icon to show for thumbs up.\n */\n thumbsUpIcon?: ReactElement;\n\n /**\n * Icon to show for thumbs down.\n */\n thumbsDownIcon?: ReactElement;\n\n /**\n * Icon to show for refresh.\n */\n refreshIcon?: ReactElement;\n\n /**\n * Callback function to handle copying.\n */\n onCopy?: () => void;\n\n /**\n * Callback function to handle upvoting.\n */\n onUpvote?: () => void;\n\n /**\n * Callback function to handle downvoting.\n */\n onDownvote?: () => void;\n\n /**\n * Callback function to handle refreshing.\n */\n onRefresh?: () => void;\n}\n\nexport const MessageActions: FC<MessageActionsProps> = ({\n children,\n ...props\n}) => {\n const { theme } = useContext(ChatContext);\n const {\n question,\n response,\n copyIcon = <CopyIcon />,\n thumbsUpIcon = <ThumbUpIcon />,\n thumbsDownIcon = <ThumbsDownIcon />,\n refreshIcon = <RefreshIcon />,\n onCopy,\n onUpvote,\n onDownvote,\n onRefresh\n } = props;\n const Comp = children ? Slot : 'div';\n\n const handleCopy = (text: string) => {\n navigator.clipboard\n .writeText(text)\n .then(() => {\n console.log('Text copied to clipboard');\n })\n .catch(err => {\n console.error('Could not copy text: ', err);\n });\n };\n\n return (\n (copyIcon || thumbsDownIcon || thumbsUpIcon || refreshIcon) && (\n <Comp className={cn(theme.messages.message.footer.base)}>\n {children || (\n <>\n {copyIcon && (\n <IconButton\n variant=\"text\"\n disablePadding\n title=\"Copy question and response\"\n className={cn(theme.messages.message.footer.copy)}\n onClick={\n onCopy ? onCopy : () => handleCopy(`${question}\\n${response}`)\n }\n >\n {copyIcon}\n </IconButton>\n )}\n {thumbsUpIcon && (\n <IconButton\n variant=\"text\"\n disablePadding\n title=\"Upvote\"\n className={cn(theme.messages.message.footer.upvote)}\n onClick={onUpvote}\n >\n {thumbsUpIcon}\n </IconButton>\n )}\n {thumbsDownIcon && (\n <IconButton\n variant=\"text\"\n disablePadding\n title=\"Downvote\"\n className={cn(theme.messages.message.footer.downvote)}\n onClick={onDownvote}\n >\n {thumbsDownIcon}\n </IconButton>\n )}\n {refreshIcon && (\n <IconButton\n variant=\"text\"\n disablePadding\n title=\"Refresh\"\n className={cn(theme.messages.message.footer.refresh)}\n onClick={onRefresh}\n >\n {refreshIcon}\n </IconButton>\n )}\n </>\n )}\n </Comp>\n )\n );\n};\n","import { FC, PropsWithChildren, useContext } from 'react';\nimport { ChatContext } from '@/ChatContext';\nimport { Card, cn } from 'reablocks';\nimport CopyIcon from '@/assets/copy.svg?react';\nimport ThumbsDownIcon from '@/assets/thumbs-down.svg?react';\nimport ThumbUpIcon from '@/assets/thumbs-up.svg?react';\nimport RefreshIcon from '@/assets/refresh.svg?react';\nimport { Conversation } from '@/types';\nimport { motion } from 'framer-motion';\nimport { MessageQuestion } from './MessageQuestion';\nimport { MessageResponse } from './MessageResponse';\nimport { MessageFiles } from './MessageFiles';\nimport { MessageSources } from './MessageSources';\nimport { MessageActions } from './MessageActions';\n\nconst messageVariants = {\n hidden: {\n opacity: 0,\n y: 20\n },\n visible: {\n opacity: 1,\n y: 0,\n transition: {\n duration: 0.3\n }\n }\n};\n\ninterface SessionMessageProps extends PropsWithChildren {\n /**\n * Conversation to render.\n */\n conversation: Conversation;\n\n /**\n * Whether the message is the last one in the list.\n */\n isLast?: boolean;\n}\n\nexport const SessionMessage: FC<SessionMessageProps> = ({\n conversation,\n isLast,\n children\n}) => {\n const { theme, isLoading } = useContext(ChatContext);\n\n return (\n <motion.div key={conversation.id} variants={messageVariants}>\n <Card className={cn(theme.messages.message.base)}>\n {children || (\n <>\n <MessageFiles files={conversation.files} />\n <MessageQuestion question={conversation.question} />\n <MessageResponse\n response={conversation.response}\n isLoading={isLast && isLoading}\n />\n <MessageSources sources={conversation.sources} />\n <MessageActions\n question={conversation.question}\n response={conversation.response}\n copyIcon={<CopyIcon />}\n thumbsUpIcon={<ThumbUpIcon />}\n thumbsDownIcon={<ThumbsDownIcon />}\n refreshIcon={<RefreshIcon />}\n />\n </>\n )}\n </Card>\n </motion.div>\n );\n};\n","import React, {\n ReactNode,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport { SessionEmpty } from './SessionEmpty';\nimport { ChatContext } from '@/ChatContext';\nimport { Button, cn, useInfinityList } from 'reablocks';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { Conversation } from '@/types';\n\nconst containerVariants = {\n hidden: {},\n visible: {\n transition: {\n staggerChildren: 0.07,\n when: 'beforeChildren'\n }\n }\n};\n\ninterface SessionMessagesProps {\n /**\n * Content to display when there are no sessions selected or a new session is started.\n */\n newSessionContent?: string | ReactNode;\n\n /**\n * Limit the number of results returned. Clientside pagination.\n */\n limit?: number | null;\n\n /**\n * Text to display for the show more button.\n */\n showMoreText?: string;\n\n /**\n * Render function for the session messages.\n */\n children?: (conversations: Conversation[]) => ReactNode;\n}\n\nexport const SessionMessages: React.FC<SessionMessagesProps> = ({\n children,\n newSessionContent,\n limit = 10,\n showMoreText = 'Show more'\n}) => {\n const { activeSession, theme } = useContext(ChatContext);\n const contentRef = useRef<HTMLDivElement | null>(null);\n const [isAnimating, setIsAnimating] = useState(true);\n\n useEffect(() => {\n if (contentRef.current) {\n // Scroll to the bottom of the content in animation queue\n requestAnimationFrame(\n () => (contentRef.current.scrollTop = contentRef.current.scrollHeight)\n );\n }\n // If we update the active session or load the page initially ( onAnimationComplete )\n // let's scroll to the bottom of the page.\n }, [activeSession, isAnimating]);\n\n function handleShowMore() {\n showNext(10);\n requestAnimationFrame(() => (contentRef.current.scrollTop = 0));\n }\n\n // Reverse the conversations so the last one is the first one\n const reversedConvos = useMemo(\n () => [...(activeSession?.conversations ?? [])].reverse(),\n [activeSession]\n );\n\n const { data, hasMore, showNext } = useInfinityList({\n items: reversedConvos,\n limit\n });\n\n // Reverse the data to the last one last now\n const reReversedConvo = useMemo(() => [...data].reverse(), [data]);\n\n // If we are not paging, just return the conversations\n const convosToRender = limit ? reReversedConvo : activeSession?.conversations;\n\n if (!activeSession) {\n return <SessionEmpty>{newSessionContent}</SessionEmpty>;\n }\n\n return (\n <div className={cn(theme.messages.content)} ref={contentRef}>\n {hasMore && (\n <Button\n variant=\"outline\"\n className={cn(theme.messages.showMore)}\n fullWidth\n onClick={handleShowMore}\n >\n {showMoreText}\n </Button>\n )}\n <AnimatePresence>\n <motion.div\n variants={containerVariants}\n key={activeSession?.id}\n initial=\"hidden\"\n animate=\"visible\"\n onAnimationComplete={() => {\n setIsAnimating(false);\n }}\n >\n {children(convosToRender)}\n </motion.div>\n </AnimatePresence>\n </div>\n );\n};\n","export interface ChatTheme {\n base: string;\n console: string;\n companion: string;\n empty: string;\n sessions: {\n base: string;\n console: string;\n companion: string;\n create: string;\n group: string;\n session: {\n base: string;\n active: string;\n delete: string;\n };\n };\n messages: {\n base: string;\n console: string;\n companion: string;\n back: string;\n inner: string;\n title: string;\n date: string;\n content: string;\n header: string;\n showMore: string;\n message: {\n base: string;\n question: string;\n response: string;\n cursor: string;\n files: {\n base: string;\n file: {\n base: string;\n name: string;\n };\n };\n sources: {\n base: string;\n source: {\n base: string;\n image: string;\n title: string;\n url: string;\n };\n };\n markdown: {\n p: string;\n a: string;\n table: string;\n th: string;\n td: string;\n code: string;\n li: string;\n ul: string;\n ol: string;\n copy: string;\n };\n footer: {\n base: string;\n copy: string;\n upvote: string;\n downvote: string;\n refresh: string;\n };\n };\n };\n input: {\n base: string;\n upload: string;\n input: string;\n send: string;\n stop: string;\n };\n}\n\nexport const chatTheme: ChatTheme = {\n base: 'text-white',\n console: 'flex w-full gap-5 h-full',\n companion: 'w-full h-full overflow-hidden',\n empty: 'text-center flex-1',\n sessions: {\n base: 'overflow-auto',\n console: 'min-w-[150px] w-[30%] max-w-[300px] bg-[#11111F] p-5 rounded',\n companion: 'w-full h-full',\n group: 'text-xs text-gray-400 mt-4',\n create: 'mb-4',\n session: {\n base: '',\n active: ' text-primary',\n delete: '[&>svg]:w-4 [&>svg]:h-4 opacity-50'\n }\n },\n messages: {\n base: '',\n console: 'flex flex-col flex-1 overflow-hidden',\n companion: 'flex w-full h-full',\n back: 'self-start p-0 my-2',\n inner: 'flex-1 h-full flex flex-col',\n title: 'text-2xl font-bold',\n date: 'text-sm whitespace-nowrap pt-2',\n content: 'mt-2 flex-1 overflow-auto',\n header: 'flex justify-between items-start gap-2',\n showMore: 'mb-4',\n message: {\n base: 'mb-6 flex flex-col p-5 rounded',\n question: 'font-semibold text-gray-400 mb-1',\n response: '',\n cursor: 'inline-block w-1 h-4 bg-current',\n files: {\n base: 'mb-2 flex flex-wrap gap-3 ',\n file: {\n base: 'flex items-center gap-2 border border-gray-700 p-2 rounded cursor-pointer',\n name: 'text-sm'\n }\n },\n sources: {\n base: 'my-4 flex flex-wrap gap-3',\n source: {\n base: 'flex gap-2 border border-gray-700 p-2 rounded cursor-pointer',\n image: 'w-6 h-6 rounded-md',\n title: 'text-md block',\n url: 'text-sm text-blue-700 underline'\n }\n },\n markdown: {\n copy: 'absolute right-0 top-0 [&>svg]:w-4 [&>svg]:h-4 opacity-50',\n p: 'mb-2',\n a: 'text-blue-700 underline',\n table: 'table-auto w-full m-2',\n th: 'px-4 py-2 text-left font-bold border-b border-gray-500',\n td: 'px-4 py-2',\n code: 'm-2 rounded',\n li: 'mb-2 ml-6',\n ul: 'mb-4 list-disc',\n ol: 'mb-4 list-decimal'\n },\n footer: {\n base: 'mt-3 flex gap-3',\n copy: '[&>svg]:w-4 [&>svg]:h-4 opacity-50',\n upvote: '[&>svg]:w-4 [&>svg]:h-4 opacity-50',\n downvote: '[&>svg]:w-4 [&>svg]:h-4 opacity-50',\n refresh: '[&>svg]:w-4 [&>svg]:h-4 opacity-50'\n }\n }\n },\n input: {\n base: 'flex mt-4',\n upload: 'px-4 py-2 text-white',\n input: 'w-full',\n send: 'px-4 py-2 text-white',\n stop: 'px-4 py-2 bg-red-500 text-white rounded hover:bg-red-700'\n }\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nexport const useDimensions = () => {\n const [ref, setRef] = useState<HTMLElement | null>(null);\n const [width, setWidth] = useState<number | undefined>(undefined);\n\n const observe = useCallback((element: HTMLElement | null) => {\n if (element) setRef(element);\n }, []);\n\n useEffect(() => {\n if (!ref) return;\n\n const resizeObserver = new ResizeObserver(entries => {\n for (let entry of entries) {\n setWidth(entry.contentRect.width);\n }\n });\n\n resizeObserver.observe(ref);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [ref]);\n\n return { width, observe };\n};\n","import {\n CSSProperties,\n FC,\n PropsWithChildren,\n useCallback,\n useEffect,\n useMemo,\n useState\n} from 'react';\nimport { useHotkeys } from 'reakeys';\nimport { cn, useComponentTheme } from 'reablocks';\nimport { Session } from './types';\nimport { ChatTheme, chatTheme } from './theme';\nimport { ChatContext } from './ChatContext';\nimport { PluggableList } from 'react-markdown/lib';\nimport { AnimatePresence } from 'framer-motion';\nimport { useDimensions } from './utils/useDimensions';\n\nexport interface ChatProps extends PropsWithChildren {\n /**\n * The style to apply to the root element.\n */\n style?: CSSProperties;\n\n /**\n * The class name to apply to the root element.\n */\n className?: string;\n\n /**\n * The type of prompt to display. Companion prompts are smaller and are\n * meant to be displayed alongside other content. Full prompts are larger\n * and are meant to be displayed on their own.\n */\n viewType?: 'companion' | 'console';\n\n /**\n * The list of sessions to display.\n */\n sessions: Session[];\n\n /**\n * The ID of the currently active session.\n */\n activeSessionId?: string;\n\n /**\n * Custom theme for the chat.\n */\n theme?: ChatTheme;\n\n /**\n * Remark plugins to apply to the request/response.\n */\n remarkPlugins?: PluggableList[];\n\n /**\n * Whether to display a loading state.\n */\n isLoading?: boolean;\n\n /**\n * Whether to disable the chat.\n */\n disabled?: boolean;\n\n /**\n * Callback function to handle when a session is selected.\n */\n onSelectSession?: (sessionId: string) => void;\n\n /**\n * Callback function to handle when a session is deleted.\n */\n onDeleteSession?: (sessionId: string) => void;\n\n /**\n * Callback function to handle creating a new session.\n */\n onNewSession?: () => void;\n\n /**\n * Callback function to handle sending a new message.\n */\n onSendMessage?: (message: string) => void;\n\n /**\n * Callback function to handle stopping the current action.\n */\n onStopMessage?: () => void;\n\n /**\n * Callback function to handle file upload.\n */\n onFileUpload?: (file: File) => void;\n}\n\nexport const Chat: FC<ChatProps> = ({\n children,\n viewType = 'console',\n sessions,\n onSelectSession,\n onDeleteSession,\n onSendMessage,\n onStopMessage,\n onFileUpload,\n isLoading,\n activeSessionId,\n theme: customTheme = chatTheme,\n onNewSession,\n remarkPlugins,\n disabled,\n style,\n className\n}) => {\n const theme = useComponentTheme<ChatTheme>('chat', customTheme);\n const [internalActiveSessionID, setInternalActiveSessionID] = useState<\n string | null\n >(activeSessionId);\n\n const { width, observe } = useDimensions();\n const isCompact = viewType === 'companion' || (width && width < 767);\n\n useEffect(() => {\n setInternalActiveSessionID(activeSessionId);\n }, [activeSessionId]);\n\n const handleSelectSession = useCallback(\n (sessionId: string) => {\n setInternalActiveSessionID(sessionId);\n onSelectSession?.(sessionId);\n },\n [onSelectSession]\n );\n\n const handleDeleteSession = useCallback(\n (sessionId: string) => {\n setInternalActiveSessionID(undefined);\n onDeleteSession?.(sessionId);\n },\n [onDeleteSession]\n );\n\n const handleCreateNewSession = useCallback(() => {\n setInternalActiveSessionID(undefined);\n onNewSession?.();\n }, [onNewSession]);\n\n useHotkeys([\n {\n name: 'Create new session',\n category: 'Chat',\n keys: 'meta+shift+s',\n callback: event => {\n event.preventDefault();\n handleCreateNewSession();\n }\n }\n ]);\n\n const activeSession = useMemo(\n () => sessions.find(session => session.id === internalActiveSessionID),\n [sessions, internalActiveSessionID]\n );\n\n const contextValue = useMemo(\n () => ({\n sessions,\n activeSession,\n remarkPlugins,\n theme,\n disabled,\n isLoading,\n isCompact,\n activeSessionId: internalActiveSessionID,\n selectSession: handleSelectSession,\n deleteSession: handleDeleteSession,\n createSession: handleCreateNewSession,\n sendMessage: onSendMessage,\n stopMessage: onStopMessage,\n fileUpload: onFileUpload\n }),\n [\n isLoading,\n isCompact,\n disabled,\n theme,\n remarkPlugins,\n sessions,\n activeSession,\n internalActiveSessionID,\n handleSelectSession,\n handleDeleteSession,\n handleCreateNewSession,\n onSendMessage,\n onStopMessage,\n onFileUpload\n ]\n );\n\n return (\n <ChatContext.Provider value={contextValue}>\n <AnimatePresence initial={false}>\n <div\n ref={observe}\n className={cn(className, theme.base, {\n [theme.companion]: isCompact,\n [theme.console]: !isCompact\n })}\n style={style}\n >\n {children}\n </div>\n </AnimatePresence>\n </ChatContext.Provider>\n );\n};\n","import { FC, PropsWithChildren, useContext } from 'react';\nimport { List, cn } from 'reablocks';\nimport { ChatContext } from '@/ChatContext';\nimport { motion } from 'framer-motion';\n\nexport const SessionsList: FC<PropsWithChildren> = ({ children }) => {\n const { theme, isCompact, activeSessionId } = useContext(ChatContext);\n const isVisible = isCompact && !activeSessionId;\n\n return (\n (!isCompact || isVisible) && (\n <motion.div\n initial={{ translateX: '-100%' }}\n animate={{\n translateX: '0%',\n transition: {\n type: 'tween',\n ease: 'linear',\n duration: 0.2,\n when: 'beforeChildren'\n }\n }}\n exit={{ translateX: '-100%' }}\n className={cn(theme.sessions.base, {\n [theme.sessions.companion]: isCompact,\n [theme.sessions.console]: !isCompact\n })}\n >\n <List>{children}</List>\n </motion.div>\n )\n );\n};\n","import * as React from \"react\";\nconst SvgTrash = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\", className: \"lucide lucide-trash-2\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M3 6h18\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\" }), /* @__PURE__ */ React.createElement(\"line\", { x1: 10, x2: 10, y1: 11, y2: 17 }), /* @__PURE__ */ React.createElement(\"line\", { x1: 14, x2: 14, y1: 11, y2: 17 }));\nexport default SvgTrash;\n","import { FC, PropsWithChildren, ReactElement, useContext } from 'react';\nimport { ListItem, IconButton, cn, Ellipsis } from 'reablocks';\nimport { Session } from '@/types';\nimport TrashIcon from '@/assets/trash.svg?react';\nimport { ChatContext } from '@/ChatContext';\nimport { Slot } from '@radix-ui/react-slot';\n\nexport interface SessionListItemProps extends PropsWithChildren {\n /**\n * Session to display.\n */\n session: Session;\n\n /**\n * Indicates whether the session is deletable.\n */\n deletable?: boolean;\n\n /**\n * Icon to show for delete.\n */\n deleteIcon?: ReactElement;\n\n /**\n * Limit for the ellipsis.\n */\n limit?: number;\n}\n\nexport const SessionListItem: FC<SessionListItemProps> = ({\n children,\n session,\n deletable = true,\n limit = 100,\n deleteIcon = <TrashIcon />\n}) => {\n const { activeSessionId, selectSession, deleteSession, theme } =\n useContext(ChatContext);\n const Comp = children ? Slot : ListItem;\n\n return (\n <Comp\n dense\n disableGutters\n active={session.id === activeSessionId}\n className={cn(theme.sessions.session.base, {\n [theme.sessions.session.active]: session.id === activeSessionId\n })}\n onClick={() => selectSession?.(session.id)}\n end={\n <>\n {deletable && (\n <IconButton\n size=\"small\"\n variant=\"text\"\n onClick={e => {\n e.stopPropagation();\n deleteSession(session.id);\n }}\n className={cn(theme.sessions.session.delete)}\n >\n {deleteIcon}\n </IconButton>\n )}\n </>\n }\n >\n {children || <Ellipsis value={session.title} limit={limit} />}\n </Comp>\n );\n};\n","import { Button, cn } from 'reablocks';\nimport { FC, PropsWithChildren, ReactNode, useContext } from 'react';\nimport { ChatContext } from '@/ChatContext';\nimport { Slot } from '@radix-ui/react-slot';\n\ninterface NewSessionButtonProps extends PropsWithChildren {\n /**\n * Text for the new session button.\n */\n newSessionText?: string | ReactNode;\n}\n\nexport const NewSessionButton: FC<NewSessionButtonProps> = ({\n children,\n newSessionText = 'New Session'\n}) => {\n const { theme, createSession, disabled } = useContext(ChatContext);\n const Comp = children ? Slot : Button;\n\n return (\n <Comp\n fullWidth\n disableMargins\n color=\"primary\"\n className={cn(theme.sessions.create)}\n disabled={disabled}\n onClick={createSession}\n >\n {children || newSessionText}\n </Comp>\n );\n};\n","import { format, isToday, isYesterday, isThisWeek, isThisMonth, isThisYear, parseISO } from 'date-fns';\nimport { Session } from '@/types';\n\nexport interface GroupedSessions {\n heading: string;\n sessions: Session[];\n}\n\nconst sortOrder = [\n 'Today',\n 'Yesterday',\n 'Last Week',\n 'Last Month',\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n 'Last Year'\n];\n\nexport function groupSessionsByDate(sessions: Session[]): GroupedSessions[] {\n const grouped: any = {};\n\n sessions.forEach(session => {\n const createdAt = new Date(session.createdAt);\n\n if (isToday(createdAt)) {\n if (!grouped['Today']) grouped['Today'] = [];\n grouped['Today'].push(session);\n } else if (isYesterday(createdAt)) {\n if (!grouped['Yesterday']) grouped['Yesterday'] = [];\n grouped['Yesterday'].push(session);\n } else if (isThisWeek(createdAt)) {\n if (!grouped['Last Week']) grouped['Last Week'] = [];\n grouped['Last Week'].push(session);\n } else if (isThisMonth(createdAt)) {\n if (!grouped['Last Month']) grouped['Last Month'] = [];\n grouped['Last Month'].push(session);\n } else if (isThisYear(createdAt)) {\n const monthName = format(createdAt, 'MMMM');\n if (!grouped[monthName]) grouped[monthName] = [];\n grouped[monthName].push(session);\n } else {\n if (!grouped['Last Year']) grouped['Last Year'] = [];\n grouped['Last Year'].push(session);\n }\n });\n\n // Remove empty groups\n Object.keys(grouped).forEach(key => {\n if (grouped[key].length === 0) {\n delete grouped[key];\n }\n });\n\n // Sort groups\n const sortedGroups = Object.keys(grouped).sort((a, b) =>\n sortOrder.indexOf(a) - sortOrder.indexOf(b)\n );\n\n return sortedGroups.map(heading => ({\n heading,\n sessions: grouped[heading].sort((a, b) =>\n new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()\n )\n }));\n}\n","import { FC, ReactNode, useContext, useMemo } from 'react';\nimport { GroupedSessions, groupSessionsByDate } from '@/utils/grouping';\nimport { ChatContext } from '@/ChatContext';\n\nexport interface SessionGroupsProps {\n /**\n * Render function for the session groups.\n */\n children: (groups: GroupedSessions[]) => ReactNode;\n}\n\nexport const SessionGroups: FC<SessionGroupsProps> = ({ children }) => {\n const { sessions } = useContext(ChatContext);\n const groups = useMemo(() => groupSessionsByDate(sessions), [sessions]);\n\n return <>{children(groups)}</>;\n};\n","import { FC, PropsWithChildren, ReactNode, useContext } from 'react';\nimport { ChatContext } from '@/ChatContext';\nimport { ListItem, cn } from 'reablocks';\n\ninterface SessionsGroupProps extends PropsWithChildren {\n /**\n * Heading for the session group.\n */\n heading?: string | ReactNode;\n}\n\nexport const SessionsGroup: FC<SessionsGroupProps> = ({\n heading,\n children\n}) => {\n const { theme } = useContext(ChatContext);\n return (\n <>\n {heading && (\n <ListItem\n disableGutters\n disablePadding\n className={cn(theme.sessions.group)}\n >\n {heading}\n </ListItem>\n )}\n {children}\n </>\n );\n};\n"],"names":["SendIcon","StopIcon","AttachIcon","BackIcon","CopyIcon","SyntaxHighlighter","FileIcon","ThumbUpIcon","ThumbsDownIcon","RefreshIcon","TrashIcon"],"mappings":";;;;;;;;;;;;;AACA,MAAM,UAAU,CAAC,UAA0B,sBAAM,cAAc,OAAO,EAAE,OAAO,8BAA8B,OAAO,IAAI,QAAQ,IAAI,SAAS,aAAa,MAAM,QAAQ,QAAQ,gBAAgB,aAAa,GAAG,eAAe,SAAS,gBAAgB,SAAS,WAAW,iCAAiC,GAAG,MAAK,GAAoB,sBAAM,cAAc,QAAQ,EAAE,GAAG,sBAAsB,GAAmB,sBAAM,cAAc,QAAQ,EAAE,GAAG,WAAU,CAAE,CAAC;ACAjc,MAAM,UAAU,CAAC,UAA0B,sBAAM,cAAc,OAAO,EAAE,OAAO,8BAA8B,OAAO,IAAI,QAAQ,IAAI,SAAS,aAAa,MAAM,QAAQ,QAAQ,gBAAgB,aAAa,GAAG,eAAe,SAAS,gBAAgB,SAAS,WAAW,2BAA2B,GAAG,MAAO,GAAkB,sBAAM,cAAc,QAAQ,EAAE,GAAG,YAAa,CAAA,GAAmB,sBAAM,cAAc,QAAQ,EAAE,GAAG,6OAA4O,CAAE,GAAmB,sBAAM,cAAc,QAAQ,EAAE,GAAG,WAAY,CAAA,CAAC;ACAptB,MAAM,eAAe,CAAC,UAA0B,sBAAM,cAAc,OAAO,EAAE,OAAO,8BAA8B,OAAO,IAAI,QAAQ,IAAI,SAAS,aAAa,MAAM,QAAQ,QAAQ,gBAAgB,aAAa,GAAG,eAAe,SAAS,gBAAgB,SAAS,WAAW,2BAA2B,GAAG,MAAO,GAAkB,sBAAM,cAAc,QAAQ,EAAE,GAAG,kHAAiH,CAAE,CAAC;ACqBtd,MAAM,cAAc,cAAgC;AAAA,EACzD,UAAU,CAAC;AAAA,EACX,iBAAiB;AACnB,CAAC;ACsBM,MAAM,YAAgC,CAAC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA,+BAAYA,SAAS,EAAA;AAAA,EACrB,+BAAYC,SAAS,EAAA;AAAA,EACrB,iCAAcC,cAAW,EAAA;AAC3B,MAAM;AACE,QAAA,EAAE,OAAO,WAAW,UAAU,aAAa,aAAa,WAC5D,IAAA,WAAW,WAAW;AACxB,QAAM,CAAC,SAAS,UAAU,IAAI,SAAiB,EAAE;AAC3C,QAAA,eAAe,OAAyB,IAAI;AAElD,QAAM,oBAAoB,MAAM;AAC1B,QAAA,QAAQ,QAAQ;AAClB,iDAAc;AACd,iBAAW,EAAE;AAAA,IACf;AAAA,EAAA;AAGI,QAAA,iBAAiB,CAAC,MAA0C;AAChE,QAAI,EAAE,QAAQ,WAAW,CAAC,EAAE,UAAU;AACpC,QAAE,eAAe;AACC;IACpB;AAAA,EAAA;AAGI,QAAA,mBAAmB,CAAC,UAAyC;;AACjE,UAAM,QAAO,WAAM,OAAO,UAAb,mBAAqB;AAClC,QAAI,QAAQ,YAAY;AACtB,iBAAW,IAAI;AAAA,IACjB;AAAA,EAAA;AAGF,8BACG,OAAI,EAAA,WAAW,GAAG,MAAM,MAAM,IAAI,GACjC,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,oBAAoB,GAAG,MAAM,MAAM,KAAK;AAAA,QACxC,SAAS;AAAA,QACT,WAAS;AAAA,QACT,OAAO;AAAA,QACP,UAAU,CAAA,MAAK,WAAW,EAAE,OAAO,KAAK;AAAA,QACxC;AAAA,QACA,YAAY;AAAA,QACZ;AAAA,QACA,UAAU,aAAa;AAAA,MAAA;AAAA,IACzB;AAAA,KACC,6CAAc,UAAS,KAEpB,qBAAA,UAAA,EAAA,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,KAAK;AAAA,UACL,WAAU;AAAA,UACV,QAAQ,aAAa,KAAK,GAAG;AAAA,UAC7B,UAAU;AAAA,QAAA;AAAA,MACZ;AAAA,MACA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAM;AAAA,UACN,UAAU,aAAa;AAAA,UACvB,WAAW,GAAG,MAAM,MAAM,MAAM;AAAA,UAChC,SAAS,MAAM;;AAAA,sCAAa,YAAb,mBAAsB;AAAA;AAAA,UAEpC,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA,GACF;AAAA,IAED,aACC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,WAAW,GAAG,MAAM,MAAM,IAAI;AAAA,QAC9B,SAAS;AAAA,QACT;AAAA,QAEC,UAAA;AAAA,MAAA;AAAA,IACH;AAAA,IAEF;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,WAAW,GAAG,MAAM,MAAM,IAAI;AAAA,QAC9B,SAAS;AAAA,QACT,UAAU,aAAa;AAAA,QAEtB,UAAA;AAAA,MAAA;AAAA,IACH;AAAA,EACF,EAAA,CAAA;AAEJ;AC9HO,MAAM,eAAsC,CAAC;AAAA,EAClD;AACF,MAAM;AACJ,QAAM,EAAE,MAAA,IAAU,WAAW,WAAW;AACxC,6BAAQ,OAAI,EAAA,WAAW,GAAG,MAAM,KAAK,GAAI,SAAS,CAAA;AACpD;ACPO,MAAM,wBAA+C,CAAC,EAAE,eAAe;AAC5E,QAAM,EAAE,eAAe,MAAM,IAAI,WAAW,WAAW;AACjD,QAAA,OAAO,WAAW,OAAO;AAE/B,MAAI,CAAC,eAAe;AACX,WAAA;AAAA,EACT;AAGE,SAAA,oBAAC,QAAK,WAAW,GAAG,MAAM,SAAS,MAAM,GACtC,UAAA,YAEG,qBAAA,UAAA,EAAA,UAAA;AAAA,IAAA,oBAAC,MAAG,EAAA,WAAW,GAAG,MAAM,SAAS,KAAK,GACpC,UAAC,oBAAA,UAAA,EAAS,OAAO,KAAK,OAAO,cAAc,MAAO,CAAA,GACpD;AAAA,IACA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,GAAG,MAAM,SAAS,IAAI;AAAA,QACjC,MAAM,cAAc;AAAA,MAAA;AAAA,IACtB;AAAA,EAAA,EACF,CAAA,EAEJ,CAAA;AAEJ;AC3BA,MAAM,UAAU,CAAC,UAA0B,sBAAM,cAAc,OAAO,EAAE,OAAO,8BAA8B,OAAO,IAAI,QAAQ,IAAI,SAAS,aAAa,MAAM,QAAQ,QAAQ,gBAAgB,aAAa,GAAG,eAAe,SAAS,gBAAgB,SAAS,WAAW,8BAA8B,GAAG,MAAO,GAAkB,sBAAM,cAAc,QAAQ,EAAE,GAAG,iBAAgB,CAAE,CAAC;ACKnX,MAAM,sBAA6C,CAAC,EAAE,eAAe;AAC1E,QAAM,EAAE,iBAAiB,OAAO,WAAW,kBACzC,WAAW,WAAW;AACxB,QAAM,YAAY,aAAa;AAG5B,UAAA,CAAC,aAAa,cACb;AAAA,IAAC,OAAO;AAAA,IAAP;AAAA,MACC,SAAS,EAAE,YAAY,OAAO;AAAA,MAC9B,SAAS;AAAA,QACP,YAAY;AAAA,QACZ,YAAY;AAAA,UACV,MAAM;AAAA,UACN,MAAM;AAAA,UACN,UAAU;AAAA,UACV,MAAM;AAAA,QACR;AAAA,MACF;AAAA,MACA,MAAM,EAAE,YAAY,OAAO;AAAA,MAC3B,WAAW,GAAG,MAAM,SAAS,MAAM;AAAA,QACjC,CAAC,MAAM,SAAS,SAAS,GAAG;AAAA,QAC5B,CAAC,MAAM,SAAS,OAAO,GAAG,CAAC;AAAA,MAAA,CAC5B;AAAA,MAED,+BAAC,OAAI,EAAA,WAAW,GAAG,MAAM,SAAS,KAAK,GACpC,UAAA;AAAA,QACC,aAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,SAAS,MAAM,cAAc,IAAI;AAAA,YACjC,WAAW,GAAG,MAAM,SAAS,IAAI;AAAA,YAEjC,UAAA;AAAA,cAAA,oBAACC,SAAS,EAAA;AAAA,cAAE;AAAA,YAAA;AAAA,UAAA;AAAA,QAEd;AAAA,QAED;AAAA,MAAA,GACH;AAAA,IAAA;AAAA,EAAA;AAIR;AC9CA,MAAM,UAAU,CAAC,UAA0B,sBAAM,cAAc,OAAO,EAAE,OAAO,8BAA8B,OAAO,IAAI,QAAQ,IAAI,SAAS,aAAa,MAAM,QAAQ,QAAQ,gBAAgB,aAAa,GAAG,eAAe,SAAS,gBAAgB,SAAS,WAAW,sBAAsB,GAAG,MAAO,GAAkB,sBAAM,cAAc,QAAQ,EAAE,OAAO,IAAI,QAAQ,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,EAAC,CAAE,GAAmB,sBAAM,cAAc,QAAQ,EAAE,GAAG,0DAA2D,CAAA,CAAC;ACA7f,MAAM,gBAAgB,CAAC,UAA0B,sBAAM,cAAc,OAAO,EAAE,OAAO,8BAA8B,OAAO,IAAI,QAAQ,IAAI,SAAS,aAAa,MAAM,QAAQ,QAAQ,gBAAgB,aAAa,GAAG,eAAe,SAAS,gBAAgB,SAAS,WAAW,6BAA6B,GAAG,MAAK,GAAoB,sBAAM,cAAc,QAAQ,EAAE,GAAG,YAAY,GAAmB,sBAAM,cAAc,QAAQ,EAAE,GAAG,0JAAyJ,CAAE,CAAC;ACAxkB,MAAM,cAAc,CAAC,UAA0B,sBAAM,cAAc,OAAO,EAAE,OAAO,8BAA8B,OAAO,IAAI,QAAQ,IAAI,SAAS,aAAa,MAAM,QAAQ,QAAQ,gBAAgB,aAAa,GAAG,eAAe,SAAS,gBAAgB,SAAS,WAAW,2BAA2B,GAAG,MAAK,GAAoB,sBAAM,cAAc,QAAQ,EAAE,GAAG,YAAY,GAAmB,sBAAM,cAAc,QAAQ,EAAE,GAAG,2JAA0J,CAAE,CAAC;ACArkB,MAAM,aAAa,CAAC,UAA0B,sBAAM,cAAc,OAAO,EAAE,OAAO,8BAA8B,OAAO,IAAI,QAAQ,IAAI,SAAS,aAAa,MAAM,QAAQ,QAAQ,gBAAgB,aAAa,GAAG,eAAe,SAAS,gBAAgB,SAAS,WAAW,6BAA6B,GAAG,MAAO,GAAkB,sBAAM,cAAc,QAAQ,EAAE,GAAG,qDAAoD,CAAE,GAAmB,sBAAM,cAAc,QAAQ,EAAE,GAAG,WAAY,CAAA,GAAmB,sBAAM,cAAc,QAAQ,EAAE,GAAG,sDAAqD,CAAE,GAAmB,sBAAM,cAAc,QAAQ,EAAE,GAAG,aAAc,CAAA,CAAC;ACDtoB,MAAM,OAAO;AAAA,EAClB,4BAA4B;AAAA,IAC1B,cAAc;AAAA,IACd,SAAS;AAAA,IACT,cAAc;AAAA,IACd,cAAc;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,cAAc;AAAA,IACd,eAAe;AAAA,IACf,aAAa;AAAA,IACb,cAAc;AAAA,IACd,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,aAAa;AAAA,IACb,WAAW;AAAA,EACb;AAAA,EACA,2BAA2B;AAAA,IACzB,cAAc;AAAA,IACd,SAAS;AAAA,IACT,cAAc;AAAA,IACd,cAAc;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,cAAc;AAAA,IACd,eAAe;AAAA,IACf,aAAa;AAAA,IACb,cAAc;AAAA,IACd,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,aAAa;AAAA,IACb,WAAW;AAAA,IACX,WAAW;AAAA,IACX,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AAAA,EACA,4CAA4C;AAAA,IAC1C,cAAc;AAAA,IACd,SAAS;AAAA,IACT,cAAc;AAAA,EAChB;AAAA,EACA,8CAA8C;AAAA,IAC5C,cAAc;AAAA,IACd,SAAS;AAAA,IACT,cAAc;AAAA,EAChB;AAAA,EACA,6CAA6C;AAAA,IAC3C,cAAc;AAAA,IACd,SAAS;AAAA,IACT,cAAc;AAAA,EAChB;AAAA,EACA,uCAAuC;AAAA,IACrC,cAAc;AAAA,IACd,SAAS;AAAA,IACT,cAAc;AAAA,EAChB;AAAA,EACA,yCAAyC;AAAA,IACvC,cAAc;AAAA,IACd,SAAS;AAAA,IACT,cAAc;AAAA,EAChB;AAAA,EACA,wCAAwC;AAAA,IACtC,cAAc;AAAA,IACd,SAAS;AAAA,IACT,cAAc;AAAA,EAChB;AAAA,EACA,wCAAwC;AAAA,IACtC,WAAW;AAAA,IACX,gBAAgB;AAAA,IAChB,cAAc;AAAA,EAChB;AAAA,EACA,WAAW;AAAA,IACT,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA,UAAU;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,EACX;AAAA,EACA,WAAW;AAAA,IACT,SAAS;AAAA,EACX;AAAA,EACA,eAAe;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,UAAU;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,EACZ;AAAA,EACA,aAAa;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA,cAAc;AAAA,IACZ,SAAS;AAAA,EACX;AAAA,EACA,WAAW;AAAA,IACT,SAAS;AAAA,EACX;AAAA,EACA,YAAY;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA,UAAU;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,UAAU;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,WAAW;AAAA,IACT,SAAS;AAAA,EACX;AAAA,EACA,YAAY;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,SAAS;AAAA,EACX;AAAA,EACA,UAAU;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,WAAW;AAAA,IACT,SAAS;AAAA,EACX;AAAA,EACA,aAAa;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA,YAAY;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA,UAAU;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,WAAW;AAAA,IACT,SAAS;AAAA,EACX;AAAA,EACA,YAAY;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,EACX;AAAA,EACA,cAAc;AAAA,IACZ,SAAS;AAAA,EACX;AAAA,EACA,mCAAmC;AAAA,IACjC,SAAS;AAAA,EACX;AAAA,EACA,YAAY;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA,YAAY;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA,YAAY;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,SAAS;AAAA,EACX;AAAA,EACA,+CAA+C;AAAA,IAC7C,SAAS;AAAA,EACX;AAAA,EACA,uDAAuD;AAAA,IACrD,SAAS;AAAA,EACX;AAAA,EACA,iCAAiC;AAAA,IAC/B,SAAS;AAAA,EACX;AAAA,EACA,iCAAiC;AAAA,IAC/B,SAAS;AAAA,EACX;AAAA,EACA,iCAAiC;AAAA,IAC/B,SAAS;AAAA,EACX;AAAA,EACA,8CAA8C;AAAA,IAC5C,SAAS;AAAA,EACX;AAAA,EACA,gDAAgD;AAAA,IAC9C,SAAS;AAAA,EACX;AAAA,EACA,kCAAkC;AAAA,IAChC,SAAS;AAAA,EACX;AAAA,EACA,2CAA2C;AAAA,IACzC,SAAS;AAAA,EACX;AAAA,EACA,wCAAwC;AAAA,IACtC,SAAS;AAAA,EACX;AAAA,EACA,qHAAqH;AAAA,IACnH,SAAS;AAAA,EACX;AAAA,EACA,kCAAkC;AAAA,IAChC,SAAS;AAAA,EACX;AAAA,EACA,sCAAsC;AAAA,IACpC,SAAS;AAAA,EACX;AAAA,EACA,iCAAiC;AAAA,IAC/B,SAAS;AAAA,EACX;AAAA,EACA,mDAAmD;AAAA,IACjD,SAAS;AAAA,EACX;AAAA,EACA,+DAA+D;AAAA,IAC7D,SAAS;AAAA,EACX;AAAA,EACA,kDAAkD;AAAA,IAChD,SAAS;AAAA,EACX;AAAA,EACA,8CAA8C;AAAA,IAC5C,SAAS;AAAA,EACX;AAAA,EACA,+CAA+C;AAAA,IAC7C,SAAS;AAAA,EACX;AAAA,EACA,oDAAoD;AAAA,IAClD,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA,4CAA4C;AAAA,IAC1C,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA,0CAA0C;AAAA,IACxC,SAAS;AAAA,EACX;AAAA,EACA,iDAAiD;AAAA,IAC/C,SAAS;AAAA,EACX;AAAA,EACA,mDAAmD;AAAA,IACjD,SAAS;AAAA,EACX;AAAA,EACA,mDAAmD;AAAA,IACjD,SAAS;AAAA,EACX;AAAA,EACA,uDAAuD;AAAA,IACrD,SAAS;AAAA,EACX;AAAA,EACA,8CAA8C;AAAA,IAC5C,SAAS;AAAA,EACX;AAAA,EACA,kEAAkE;AAAA,IAChE,SAAS;AAAA,EACX;AAAA,EACA,QAAQ;AAAA,IACN,cAAc;AAAA,EAChB;AAAA,EACA,UAAU;AAAA,IACR,aAAa;AAAA,EACf;AAAA,EACA,aAAa;AAAA,IACX,WAAW;AAAA,EACb;AAAA,EACA,gCAAgC;AAAA,IAC9B,SAAS;AAAA,IACT,cAAc;AAAA,EAChB;AAAA,EACA,mBAAmB;AAAA,IACjB,SAAS;AAAA,IACT,cAAc;AAAA,EAChB;AAAA,EACA,mBAAmB;AAAA,IACjB,SAAS;AAAA,IACT,cAAc;AAAA,EAChB;AAAA,EACA,sBAAsB;AAAA,IACpB,SAAS;AAAA,IACT,cAAc;AAAA,EAChB;AAAA,EACA,uDAAuD;AAAA,IACrD,eAAe;AAAA,EACjB;AAAA,EACA,gEAAgE;AAAA,IAC9D,cAAc;AAAA,IACd,SAAS;AAAA,IACT,WAAW;AAAA,IACX,gBAAgB;AAAA,EAClB;AAAA,EACA,2DAA2D;AAAA,IACzD,cAAc;AAAA,IACd,SAAS;AAAA,IACT,WAAW;AAAA,IACX,gBAAgB;AAAA,EAClB;AAAA,EACA,8DAA8D;AAAA,IAC5D,cAAc;AAAA,IACd,SAAS;AAAA,IACT,WAAW;AAAA,IACX,gBAAgB;AAAA,EAClB;AAAA,EACA,sEAAsE;AAAA,IACpE,cAAc;AAAA,IACd,SAAS;AAAA,EACX;AAAA,EACA,sEAAsE;AAAA,IACpE,cAAc;AAAA,IACd,SAAS;AAAA,EACX;AAAA,EACA,iEAAiE;AAAA,IAC/D,cAAc;AAAA,IACd,SAAS;AAAA,EACX;AAAA,EACA,iEAAiE;AAAA,IAC/D,cAAc;AAAA,IACd,SAAS;AAAA,EACX;AAAA,EACA,oEAAoE;AAAA,IAClE,cAAc;AAAA,IACd,SAAS;AAAA,EACX;AAAA,EACA,oEAAoE;AAAA,IAClE,cAAc;AAAA,IACd,SAAS;AAAA,EACX;AAAA,EACA,kCAAkC;AAAA,IAChC,cAAc;AAAA,EAChB;AAAA,EACA,yCAAyC;AAAA,IACvC,cAAc;AAAA,IACd,SAAS;AAAA,IACT,WAAW;AAAA,IACX,gBAAgB;AAAA,IAChB,aAAa;AAAA,EACf;AAAA,EACA,kDAAkD;AAAA,IAChD,cAAc;AAAA,IACd,SAAS;AAAA,IACT,WAAW;AAAA,IACX,gBAAgB;AAAA,IAChB,aAAa;AAAA,EACf;AAAA,EACA,kGAAkG;AAAA,IAChG,mBAAmB;AAAA,EACrB;AAAA,EACA,iDAAiD;AAAA,IAC/C,oBAAoB;AAAA,EACtB;AAAA,EACA,sCAAsC;AAAA,IACpC,oBAAoB;AAAA,EACtB;AAAA,EACA,kDAAkD;AAAA,IAChD,SAAS;AAAA,EACX;AAAA,EACA,oDAAoD;AAAA,IAClD,SAAS;AAAA,EACX;AAAA,EACA,0DAA0D;AAAA,IACxD,SAAS;AAAA,EACX;AAAA,EACA,0DAA0D;AAAA,IACxD,SAAS;AAAA,EACX;AAAA,EACA,0DAA0D;AAAA,IACxD,SAAS;AAAA,EACX;AAAA,EACA,0DAA0D;AAAA,IACxD,SAAS;AAAA,EACX;AAAA,EACA,0DAA0D;AAAA,IACxD,SAAS;AAAA,EACX;AAAA,EACA,2DAA2D;AAAA,IACzD,SAAS;AAAA,EACX;AAAA,EACA,0DAA0D;AAAA,IACxD,SAAS;AAAA,EACX;AAAA,EACA,0DAA0D;AAAA,IACxD,SAAS;AAAA,EACX;AAAA,EACA,2DAA2D;AAAA,IACzD,SAAS;AAAA,EACX;AAAA,EACA,0DAA0D;AAAA,IACxD,SAAS;AAAA,EACX;AAAA,EACA,0DAA0D;AAAA,IACxD,SAAS;AAAA,EACX;AAAA,EACA,2DAA2D;AAAA,IACzD,SAAS;AAAA,EACX;AAAA,EACA,+DAA+D;AAAA,IAC7D,mBAAmB;AAAA,EACrB;AAAA,EACA,+DAA+D;AAAA,IAC7D,mBAAmB;AAAA,EACrB;AAAA,EACA,+EAA+E;AAAA,IAC7E,mBAAmB;AAAA,EACrB;AAAA,EACA,iFAAiF;AAAA,IAC/E,mBAAmB;AAAA,EACrB;AAAA,EACA,+EAA+E;AAAA,IAC7E,mBAAmB;AAAA,EACrB;AAAA,EACA,iFAAiF;AAAA,IAC/E,mBAAmB;AAAA,EACrB;AAAA,EACA,0EAA0E;AAAA,IACxE,mBAAmB;AAAA,EACrB;AAAA,EACA,4EAA4E;AAAA,IAC1E,mBAAmB;AAAA,EACrB;AAAA,EACA,0EAA0E;AAAA,IACxE,mBAAmB;AAAA,EACrB;AAAA,EACA,4EAA4E;AAAA,IAC1E,mBAAmB;AAAA,EACrB;AAAA,EACA,gEAAgE;AAAA,IAC9D,mBAAmB;AAAA,EACrB;AAAA,EACA,gEAAgE;AAAA,IAC9D,mBAAmB;AAAA,EACrB;AAAA,EACA,gFAAgF;AAAA,IAC9E,mBAAmB;AAAA,EACrB;AAAA,EACA,kFAAkF;AAAA,IAChF,mBAAmB;AAAA,EACrB;AAAA,EACA,gFAAgF;AAAA,IAC9E,mBAAmB;AAAA,EACrB;AAAA,EACA,kFAAkF;AAAA,IAChF,mBAAmB;AAAA,EACrB;AAAA,EACA,2EAA2E;AAAA,IACzE,mBAAmB;AAAA,EACrB;AAAA,EACA,6EAA6E;AAAA,IAC3E,mBAAmB;AAAA,EACrB;AAAA,EACA,2EAA2E;AAAA,IACzE,mBAAmB;AAAA,EACrB;AAAA,EACA,6EAA6E;AAAA,IAC3E,mBAAmB;AAAA,EACrB;AAAA,EACA,2CAA2C;AAAA,IACzC,eAAe;AAAA,EACjB;AAAA,EACA,0DAA0D;AAAA,IACxD,eAAe;AAAA,IACf,gBAAgB;AAAA,EAClB;AAAA,EACA,uDAAuD;AAAA,IACrD,gBAAgB;AAAA,EAClB;AAAA,EACA,yDAAyD;AAAA,IACvD,gBAAgB;AAAA,EAClB;AAAA,EACA,0CAA0C;AAAA,IACxC,kBAAkB;AAAA,EACpB;AAAA,EACA,0DAA0D;AAAA,IACxD,qBAAqB;AAAA,EACvB;AAAA,EACA,uDAAuD;AAAA,IACrD,cAAc;AAAA,EAChB;AAAA,EACA,qDAAqD;AAAA,IACnD,cAAc;AAAA,EAChB;AAAA,EACA,kDAAkD;AAAA,IAChD,cAAc;AAAA,EAChB;AAAA,EACA,uDAAuD;AAAA,IACrD,UAAU;AAAA,IACV,iBAAiB;AAAA,EACnB;AAAA,EACA,qDAAqD;AAAA,IACnD,UAAU;AAAA,IACV,iBAAiB;AAAA,EACnB;AAAA,EACA,yDAAyD;AAAA,IACvD,UAAU;AAAA,IACV,QAAQ;AAAA,EACV;AAAA,EACA,uDAAuD;AAAA,IACrD,UAAU;AAAA,EACZ;AAAA,EACA,uDAAuD;AAAA,IACrD,UAAU;AAAA,EACZ;AACF;ACpfO,MAAM,QAAQ;AAAA,EACnB,4BAA4B;AAAA,IAC1B,cAAc;AAAA,IACd,SAAS;AAAA,IACT,cAAc;AAAA,IACd,cAAc;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,cAAc;AAAA,IACd,eAAe;AAAA,IACf,aAAa;AAAA,IACb,cAAc;AAAA,IACd,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,aAAa;AAAA,IACb,WAAW;AAAA,EACb;AAAA,EACA,2BAA2B;AAAA,IACzB,cAAc;AAAA,IACd,SAAS;AAAA,IACT,cAAc;AAAA,IACd,cAAc;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,cAAc;AAAA,IACd,eAAe;AAAA,IACf,aAAa;AAAA,IACb,cAAc;AAAA,IACd,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,aAAa;AAAA,IACb,WAAW;AAAA,IACX,WAAW;AAAA,IACX,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,UAAU;AAAA,EACZ;AAAA,EACA,4CAA4C;AAAA,IAC1C,cAAc;AAAA,IACd,SAAS;AAAA,IACT,cAAc;AAAA,EAChB;AAAA,EACA,8CAA8C;AAAA,IAC5C,cAAc;AAAA,IACd,SAAS;AAAA,IACT,cAAc;AAAA,EAChB;AAAA,EACA,6CAA6C;AAAA,IAC3C,cAAc;AAAA,IACd,SAAS;AAAA,IACT,cAAc;AAAA,EAChB;AAAA,EACA,uCAAuC;AAAA,IACrC,cAAc;AAAA,IACd,SAAS;AAAA,IACT,cAAc;AAAA,EAChB;AAAA,EACA,yCAAyC;AAAA,IACvC,cAAc;AAAA,IACd,SAAS;AAAA,IACT,cAAc;AAAA,EAChB;AAAA,EACA,wCAAwC;AAAA,IACtC,cAAc;AAAA,IACd,SAAS;AAAA,IACT,cAAc;AAAA,EAChB;AAAA,EACA,wCAAwC;AAAA,IACtC,WAAW;AAAA,IACX,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,cAAc;AAAA,EAChB;AAAA,EACA,WAAW;AAAA,IACT,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA,UAAU;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,EACX;AAAA,EACA,WAAW;AAAA,IACT,SAAS;AAAA,EACX;AAAA,EACA,eAAe;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,UAAU;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,EACZ;AAAA,EACA,aAAa;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA,cAAc;AAAA,IACZ,SAAS;AAAA,EACX;AAAA,EACA,WAAW;AAAA,IACT,SAAS;AAAA,EACX;AAAA,EACA,YAAY;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA,UAAU;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,UAAU;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,WAAW;AAAA,IACT,SAAS;AAAA,EACX;AAAA,EACA,YAAY;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,SAAS;AAAA,EACX;AAAA,EACA,UAAU;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,WAAW;AAAA,IACT,SAAS;AAAA,EACX;AAAA,EACA,aAAa;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA,YAAY;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA,UAAU;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,WAAW;AAAA,IACT,SAAS;AAAA,EACX;AAAA,EACA,YAAY;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,EACX;AAAA,EACA,cAAc;AAAA,IACZ,SAAS;AAAA,EACX;AAAA,EACA,mCAAmC;AAAA,IACjC,SAAS;AAAA,EACX;AAAA,EACA,YAAY;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA,YAAY;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA,YAAY;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,SAAS;AAAA,EACX;AAAA,EACA,+CAA+C;AAAA,IAC7C,SAAS;AAAA,EACX;AAAA,EACA,uDAAuD;AAAA,IACrD,SAAS;AAAA,EACX;AAAA,EACA,iCAAiC;AAAA,IAC/B,SAAS;AAAA,EACX;AAAA,EACA,iCAAiC;AAAA,IAC/B,SAAS;AAAA,EACX;AAAA,EACA,iCAAiC;AAAA,IAC/B,SAAS;AAAA,EACX;AAAA,EACA,8CAA8C;AAAA,IAC5C,SAAS;AAAA,EACX;AAAA,EACA,gDAAgD;AAAA,IAC9C,SAAS;AAAA,EACX;AAAA,EACA,kCAAkC;AAAA,IAChC,SAAS;AAAA,EACX;AAAA,EACA,2CAA2C;AAAA,IACzC,SAAS;AAAA,EACX;AAAA,EACA,wCAAwC;AAAA,IACtC,SAAS;AAAA,EACX;AAAA,EACA,qHAAqH;AAAA,IACnH,SAAS;AAAA,EACX;AAAA,EACA,kCAAkC;AAAA,IAChC,SAAS;AAAA,EACX;AAAA,EACA,sCAAsC;AAAA,IACpC,SAAS;AAAA,EACX;AAAA,EACA,iCAAiC;AAAA,IAC/B,SAAS;AAAA,EACX;AAAA,EACA,mDAAmD;AAAA,IACjD,SAAS;AAAA,EACX;AAAA,EACA,+DAA+D;AAAA,IAC7D,SAAS;AAAA,EACX;AAAA,EACA,kDAAkD;AAAA,IAChD,SAAS;AAAA,EACX;AAAA,EACA,8CAA8C;AAAA,IAC5C,SAAS;AAAA,EACX;AAAA,EACA,+CAA+C;AAAA,IAC7C,SAAS;AAAA,EACX;AAAA,EACA,oDAAoD;AAAA,IAClD,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA,4CAA4C;AAAA,IAC1C,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA,0CAA0C;AAAA,IACxC,SAAS;AAAA,EACX;AAAA,EACA,iDAAiD;AAAA,IAC/C,SAAS;AAAA,EACX;AAAA,EACA,mDAAmD;AAAA,IACjD,SAAS;AAAA,EACX;AAAA,EACA,mDAAmD;AAAA,IACjD,SAAS;AAAA,EACX;AAAA,EACA,uDAAuD;AAAA,IACrD,SAAS;AAAA,EACX;AAAA,EACA,8CAA8C;AAAA,IAC5C,SAAS;AAAA,EACX;AAAA,EACA,kEAAkE;AAAA,IAChE,SAAS;AAAA,EACX;AAAA,EACA,QAAQ;AAAA,IACN,cAAc;AAAA,EAChB;AAAA,EACA,UAAU;AAAA,IACR,aAAa;AAAA,EACf;AAAA,EACA,aAAa;AAAA,IACX,WAAW;AAAA,EACb;AAAA,EACA,gCAAgC;AAAA,IAC9B,SAAS;AAAA,EACX;AAAA,EACA,mBAAmB;AAAA,IACjB,SAAS;AAAA,EACX;AAAA,EACA,mBAAmB;AAAA,IACjB,SAAS;AAAA,EACX;AAAA,EACA,sBAAsB;AAAA,IACpB,SAAS;AAAA,EACX;AAAA,EACA,uDAAuD;AAAA,IACrD,eAAe;AAAA,EACjB;AAAA,EACA,gEAAgE;AAAA,IAC9D,cAAc;AAAA,IACd,SAAS;AAAA,IACT,WAAW;AAAA,IACX,gBAAgB;AAAA,EAClB;AAAA,EACA,2DAA2D;AAAA,IACzD,cAAc;AAAA,IACd,SAAS;AAAA,IACT,WAAW;AAAA,IACX,gBAAgB;AAAA,EAClB;AAAA,EACA,8DAA8D;AAAA,IAC5D,cAAc;AAAA,IACd,SAAS;AAAA,IACT,WAAW;AAAA,IACX,gBAAgB;AAAA,EAClB;AAAA,EACA,sEAAsE;AAAA,IACpE,cAAc;AAAA,IACd,SAAS;AAAA,EACX;AAAA,EACA,sEAAsE;AAAA,IACpE,cAAc;AAAA,IACd,SAAS;AAAA,EACX;AAAA,EACA,iEAAiE;AAAA,IAC/D,cAAc;AAAA,IACd,SAAS;AAAA,EACX;AAAA,EACA,iEAAiE;AAAA,IAC/D,cAAc;AAAA,IACd,SAAS;AAAA,EACX;AAAA,EACA,oEAAoE;AAAA,IAClE,cAAc;AAAA,IACd,SAAS;AAAA,EACX;AAAA,EACA,oEAAoE;AAAA,IAClE,cAAc;AAAA,IACd,SAAS;AAAA,EACX;AAAA,EACA,kCAAkC;AAAA,IAChC,cAAc;AAAA,EAChB;AAAA,EACA,yCAAyC;AAAA,IACvC,cAAc;AAAA,IACd,SAAS;AAAA,IACT,WAAW;AAAA,IACX,gBAAgB;AAAA,IAChB,aAAa;AAAA,EACf;AAAA,EACA,kDAAkD;AAAA,IAChD,cAAc;AAAA,IACd,SAAS;AAAA,IACT,WAAW;AAAA,IACX,gBAAgB;AAAA,IAChB,aAAa;AAAA,EACf;AAAA,EACA,kGAAkG;AAAA,IAChG,mBAAmB;AAAA,EACrB;AAAA,EACA,iDAAiD;AAAA,IAC/C,oBAAoB;AAAA,EACtB;AAAA,EACA,sCAAsC;AAAA,IACpC,oBAAoB;AAAA,EACtB;AAAA,EACA,kDAAkD;AAAA,IAChD,SAAS;AAAA,EACX;AAAA,EACA,oDAAoD;AAAA,IAClD,SAAS;AAAA,EACX;AAAA,EACA,0DAA0D;AAAA,IACxD,SAAS;AAAA,EACX;AAAA,EACA,0DAA0D;AAAA,IACxD,SAAS;AAAA,EACX;AAAA,EACA,0DAA0D;AAAA,IACxD,SAAS;AAAA,EACX;AAAA,EACA,0DAA0D;AAAA,IACxD,SAAS;AAAA,EACX;AAAA,EACA,0DAA0D;AAAA,IACxD,SAAS;AAAA,EACX;AAAA,EACA,2DAA2D;AAAA,IACzD,SAAS;AAAA,EACX;AAAA,EACA,0DAA0D;AAAA,IACxD,SAAS;AAAA,EACX;AAAA,EACA,0DAA0D;AAAA,IACxD,SAAS;AAAA,EACX;AAAA,EACA,2DAA2D;AAAA,IACzD,SAAS;AAAA,EACX;AAAA,EACA,0DAA0D;AAAA,IACxD,SAAS;AAAA,EACX;AAAA,EACA,0DAA0D;AAAA,IACxD,SAAS;AAAA,EACX;AAAA,EACA,2DAA2D;AAAA,IACzD,SAAS;AAAA,EACX;AAAA,EACA,+DAA+D;AAAA,IAC7D,mBAAmB;AAAA,EACrB;AAAA,EACA,+DAA+D;AAAA,IAC7D,mBAAmB;AAAA,EACrB;AAAA,EACA,+EAA+E;AAAA,IAC7E,mBAAmB;AAAA,EACrB;AAAA,EACA,iFAAiF;AAAA,IAC/E,mBAAmB;AAAA,EACrB;AAAA,EACA,+EAA+E;AAAA,IAC7E,mBAAmB;AAAA,EACrB;AAAA,EACA,iFAAiF;AAAA,IAC/E,mBAAmB;AAAA,EACrB;AAAA,EACA,0EAA0E;AAAA,IACxE,mBAAmB;AAAA,EACrB;AAAA,EACA,4EAA4E;AAAA,IAC1E,mBAAmB;AAAA,EACrB;AAAA,EACA,0EAA0E;AAAA,IACxE,mBAAmB;AAAA,EACrB;AAAA,EACA,4EAA4E;AAAA,IAC1E,mBAAmB;AAAA,EACrB;AAAA,EACA,gEAAgE;AAAA,IAC9D,mBAAmB;AAAA,EACrB;AAAA,EACA,gEAAgE;AAAA,IAC9D,mBAAmB;AAAA,EACrB;AAAA,EACA,gFAAgF;AAAA,IAC9E,mBAAmB;AAAA,EACrB;AAAA,EACA,kFAAkF;AAAA,IAChF,mBAAmB;AAAA,EACrB;AAAA,EACA,gFAAgF;AAAA,IAC9E,mBAAmB;AAAA,EACrB;AAAA,EACA,kFAAkF;AAAA,IAChF,mBAAmB;AAAA,EACrB;AAAA,EACA,2EAA2E;AAAA,IACzE,mBAAmB;AAAA,EACrB;AAAA,EACA,6EAA6E;AAAA,IAC3E,mBAAmB;AAAA,EACrB;AAAA,EACA,2EAA2E;AAAA,IACzE,mBAAmB;AAAA,EACrB;AAAA,EACA,6EAA6E;AAAA,IAC3E,mBAAmB;AAAA,EACrB;AAAA,EACA,2CAA2C;AAAA,IACzC,eAAe;AAAA,EACjB;AAAA,EACA,0DAA0D;AAAA,IACxD,eAAe;AAAA,IACf,gBAAgB;AAAA,EAClB;AAAA,EACA,uDAAuD;AAAA,IACrD,gBAAgB;AAAA,EAClB;AAAA,EACA,yDAAyD;AAAA,IACvD,gBAAgB;AAAA,EAClB;AAAA,EACA,0CAA0C;AAAA,IACxC,kBAAkB;AAAA,EACpB;AAAA,EACA,0DAA0D;AAAA,IACxD,qBAAqB;AAAA,EACvB;AAAA,EACA,uDAAuD;AAAA,IACrD,cAAc;AAAA,EAChB;AAAA,EACA,qDAAqD;AAAA,IACnD,cAAc;AAAA,EAChB;AAAA,EACA,kDAAkD;AAAA,IAChD,cAAc;AAAA,EAChB;AAAA,EACA,uDAAuD;AAAA,IACrD,UAAU;AAAA,IACV,iBAAiB;AAAA,EACnB;AAAA,EACA,qDAAqD;AAAA,IACnD,UAAU;AAAA,IACV,iBAAiB;AAAA,EACnB;AAAA,EACA,yDAAyD;AAAA,IACvD,UAAU;AAAA,IACV,QAAQ;AAAA,EACV;AAAA,EACA,uDAAuD;AAAA,IACrD,UAAU;AAAA,EACZ;AAAA,EACA,uDAAuD;AAAA,IACrD,UAAU;AAAA,EACZ;AACF;ACjdO,MAAM,kBAA4C,CAAC;AAAA,EACxD;AAAA,EACA;AAAA,EACA;AAAA,EACA,+BAAYC,SAAS,EAAA;AAAA,EACrB;AAAA,EACA,QAAQ;AACV,MAAM;AACE,QAAA,QAAQ,qCAAU,MAAM;AAC9B,QAAM,OAAO,QAAQ,MAAM,CAAC,IAAI;AAE1B,QAAA,aAAa,CAAC,SAAiB;AACnC,cAAU,UACP,UAAU,IAAI,EACd,KAAK,MAAM;AACV,cAAQ,IAAI,0BAA0B;AAAA,IAAA,CACvC,EACA,MAAM,CAAO,QAAA;AACJ,cAAA,MAAM,yBAAyB,GAAG;AAAA,IAAA,CAC3C;AAAA,EAAA;AAGL,8BACG,OAAI,EAAA,WAAW,GAAG,YAAY,SAAS,GACrC,UAAA;AAAA,IACC,YAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,GAAG,aAAa;AAAA,QAC3B,MAAK;AAAA,QACL,SAAQ;AAAA,QACR,OAAM;AAAA,QACN,SAAS,MAAM,WAAW,QAAkB;AAAA,QAE3C,UAAA;AAAA,MAAA;AAAA,IACH;AAAA,IAEF;AAAA,MAACC;AAAAA,MAAA;AAAA,QACC,UAAU;AAAA,QACV,OAAO;AAAA,QAEN;AAAA,MAAA;AAAA,IACH;AAAA,EACF,EAAA,CAAA;AAEJ;AC1Ea,MAAA,iBAAgF,CAAC,EAAE,UAAU,GAAG,MAAM,MAChH,oBAAA,SAAA,EAAO,GAAG,OACR,UACH;AAGW,MAAA,kBAA2F,CAAC,EAAE,UAAU,GAAG,MAAM,MAC3H,oBAAA,MAAA,EAAI,GAAG,OACL,UACH;AAGW,MAAA,gBAAuF,CAAC,EAAE,UAAU,GAAG,MAAM,MACvH,oBAAA,MAAA,EAAI,GAAG,OACL,SACH,CAAA;ACDK,MAAM,WAAqC,CAAC;AAAA,EACjD;AAAA,EACA,gBAAgB,CAAC,SAAS;AAC5B,MAAM;AACJ,QAAM,EAAE,MAAA,IAAU,WAAW,WAAW;AAGtC,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,YAAY;AAAA,QACV,MAAM,CAAC,EAAE,WAAW,GAAG,MACrB,MAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACE,GAAG;AAAA,YAEJ,UAAU;AAAA,YACV,WAAW,GAAG,MAAM,SAAS,QAAQ,SAAS,MAAM,SAAS;AAAA,YAC7D,eAAe,GAAG,MAAM,SAAS,QAAQ,SAAS,IAAI;AAAA,UAAA;AAAA,QACxD;AAAA,QAEF,OAAO,CAAA,UAAU,oBAAA,gBAAA,EAAgB,GAAG,OAAO,WAAW,GAAG,MAAM,SAAS,QAAQ,SAAS,KAAK,EAAG,CAAA;AAAA,QACjG,IAAI,CAAA,UAAU,oBAAA,iBAAA,EAAiB,GAAG,OAAO,WAAW,GAAG,MAAM,SAAS,QAAQ,SAAS,EAAE,EAAG,CAAA;AAAA,QAC5F,IAAI,CAAA,UAAU,oBAAA,eAAA,EAAe,GAAG,OAAO,WAAW,GAAG,MAAM,SAAS,QAAQ,SAAS,EAAE,EAAG,CAAA;AAAA,QAC1F,GAAG,CAAA,UAAU,oBAAA,KAAA,EAAG,GAAG,OAAO,WAAW,GAAG,MAAM,SAAS,QAAQ,SAAS,CAAC,EAAG,CAAA;AAAA,QAC5E,GAAG,CAAA,UAAU,oBAAA,KAAA,EAAG,GAAG,OAAO,WAAW,GAAG,MAAM,SAAS,QAAQ,SAAS,CAAC,EAAG,CAAA;AAAA,QAC5E,IAAI,CAAA,UAAU,oBAAA,MAAA,EAAI,GAAG,OAAO,WAAW,GAAG,MAAM,SAAS,QAAQ,SAAS,EAAE,EAAG,CAAA;AAAA,QAC/E,IAAI,CAAA,UAAU,oBAAA,MAAA,EAAI,GAAG,OAAO,WAAW,GAAG,MAAM,SAAS,QAAQ,SAAS,EAAE,EAAG,CAAA;AAAA,QAC/E,IAAI,CAAA,UAAU,oBAAA,MAAA,EAAI,GAAG,OAAO,WAAW,GAAG,MAAM,SAAS,QAAQ,SAAS,EAAE,EAAG,CAAA;AAAA,MACjF;AAAA,MAEC;AAAA,IAAA;AAAA,EAAA;AAGP;AC9CA,MAAM,YAAY;AAEX,SAAS,YAAY;AACnB,SAAA,CAAC,MAAM,UAAU;AACtB,mBAAe,MAAM,CAAC;AAAA,MACpB;AAAA,MACA;AAAA,IACD,CAAA,CAAC;AAAA,EAAA;AAGK,WAAA,WAAW,OAAO,IAAI;AACtB,WAAA;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,KAAK,kDAAkD,EAAE;AAAA,QACzD,UAAU;AAAA,UACR,EAAE,UAAU,CAAC,EAAE,MAAM,QAAQ,OAAO,MAAM,KAAO,EAAA,CAAC,EAAE;AAAA,QACtD;AAAA,MACF;AAAA,IAAA;AAAA,EAEJ;AACF;ACPO,MAAM,kBAA4C,CAAC;AAAA,EACxD;AAAA,EACA;AACF,MAAM;AACE,QAAA,EAAE,OAAO,gBAAgB,CAAC,WAAW,aAAa,EACtD,IAAA,WAAW,WAAW;AAClB,QAAA,OAAO,WAAW,OAAO;AAC/B,SACG,oBAAA,MAAA,EAAK,WAAW,GAAG,MAAM,SAAS,QAAQ,QAAQ,GAChD,UACC,YAAA,oBAAC,UAAS,EAAA,eACP,oBACH,EAEJ,CAAA;AAEJ;ACVO,MAAM,kBAA4C,CAAC;AAAA,EACxD;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACE,QAAA,EAAE,OAAO,gBAAgB,CAAC,WAAW,aAAa,EACtD,IAAA,WAAW,WAAW;AAClB,QAAA,OAAO,WAAW,OAAO;AAE7B,SAAA,oBAAC,MAAK,EAAA,WAAW,GAAG,MAAM,SAAS,QAAQ,QAAQ,GAChD,UAAA,YAEG,qBAAA,UAAA,EAAA,UAAA;AAAA,IAAC,oBAAA,UAAA,EAAS,eACP,UACH,SAAA,CAAA;AAAA,IACC,aACC;AAAA,MAAC,OAAO;AAAA,MAAP;AAAA,QACC,WAAW,GAAG,MAAM,SAAS,QAAQ,MAAM;AAAA,QAC3C,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,QAC3B,YAAY;AAAA,UACV,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,YAAY;AAAA,QACd;AAAA,MAAA;AAAA,IACF;AAAA,EAAA,EAEJ,CAAA,EAEJ,CAAA;AAEJ;ACnDA,MAAM,UAAU,CAAC,UAA0B,sBAAM,cAAc,OAAO,EAAE,OAAO,8BAA8B,OAAO,IAAI,QAAQ,IAAI,SAAS,aAAa,MAAM,gBAAgB,GAAG,MAAK,GAAoB,sBAAM,cAAc,QAAQ,EAAE,UAAU,WAAW,UAAU,WAAW,GAAG,ygDAA0gD,CAAA,CAAC;ACiB3xD,MAAM,cAAoC,CAAC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,+BAAYC,SAAS,EAAA;AACvB,MAAM;AACJ,QAAM,EAAE,MAAA,IAAU,WAAW,WAAW;AAClC,QAAA,UAAU,6BAAM,WAAW;AAG/B,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,GAAG,MAAM,SAAS,QAAQ,MAAM,KAAK,IAAI;AAAA,MACpD,SAAS,MAAM;AACN,eAAA,KAAK,KAAK,QAAQ;AAAA,MAC3B;AAAA,MAEC,UAAA;AAAA,QACC,UAAA,oBAAA,UAAA,EACE,UAAC,oBAAA,OAAA,EAAI,KAAK,KAAK,WAAU,YAAY,CAAA,EAAA,CACvC,IAEA,oBAAA,UAAA,EACG,UACH,UAAA;AAAA,QAED,4BACE,cACE,EAAA,UAAA,4BACE,QAAK,EAAA,WAAW,GAAG,MAAM,SAAS,QAAQ,MAAM,KAAK,IAAI,GACxD,UAAA,oBAAC,YAAS,OAAO,MAAM,OAAc,EAAA,CACvC,EAEJ,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;ACzCO,MAAM,eAAsC,CAAC,EAAE,OAAO,eAAe;AAC1E,QAAM,EAAE,MAAA,IAAU,WAAW,WAAW;AAClC,QAAA,OAAO,WAAW,OAAO;AAE/B,MAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AACzB,WAAA;AAAA,EACT;AAGE,SAAA,MAAM,SAAS,KACZ,oBAAA,OAAA,EAAI,WAAW,GAAG,MAAM,SAAS,QAAQ,MAAM,IAAI,GACjD,UAAM,MAAA,IAAI,CAAC,MAAM,UAChB,oBAAC,MAAkB,EAAA,GAAG,MACnB,SAAA,GADQ,KAEX,CACD,EACH,CAAA;AAGN;ACrBa,MAAA,gBAAwC,CAAC,EAAE,OAAO,KAAK,OAAO,QAAQ,SAAS;AAC1F,QAAM,EAAE,MAAA,IAAU,WAAW,WAAW;AAGtC,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,GAAG,MAAM,SAAS,QAAQ,QAAQ,OAAO,IAAI;AAAA,MACxD,SAAS,MAAM;AACb,YAAI,KAAK;AACA,iBAAA,KAAK,KAAK,QAAQ;AAAA,QAC3B;AAAA,MACF;AAAA,MAEC,UAAA;AAAA,QAAA,SAAU,oBAAA,OAAA,EAAI,KAAK,OAAO,KAAK,OAAO,WAAW,GAAG,MAAM,SAAS,QAAQ,QAAQ,OAAO,KAAK,GAAG;AAAA,SACjG,SAAS,QACT,qBAAC,cACE,EAAA,UAAA;AAAA,UAAA,6BACE,QAAK,EAAA,WAAW,GAAG,MAAM,SAAS,QAAQ,QAAQ,OAAO,KAAK,GAC7D,UAAC,oBAAA,UAAA,EAAS,OAAO,OAAO,MAAc,CAAA,GACxC;AAAA,UAED,OACE,oBAAA,KAAA,EAAE,MAAM,KAAK,QAAO,UAAS,KAAI,uBAAsB,WAAW,GAAG,MAAM,SAAS,QAAQ,QAAQ,OAAO,GAAG,GAC5G,UACH,KAAA;AAAA,QAAA,GAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;AC3BO,MAAM,iBAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AACF,MAAM;AACJ,QAAM,EAAE,MAAA,IAAU,WAAW,WAAW;AAClC,QAAA,OAAO,WAAW,OAAO;AAE/B,MAAI,CAAC,WAAW,QAAQ,WAAW,GAAG;AAC7B,WAAA;AAAA,EACT;AAGE,SAAA,WACA,QAAQ,SAAS,KACf,oBAAC,OAAI,EAAA,WAAW,GAAG,MAAM,SAAS,QAAQ,QAAQ,IAAI,GACnD,UAAQ,QAAA,IAAI,CAAC,QAAQ,UACpB,oBAAC,MAAkB,EAAA,GAAG,QACnB,SAAA,GADQ,KAEX,CACD,EACH,CAAA;AAGN;AC8BO,MAAM,iBAA0C,CAAC;AAAA,EACtD;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,EAAE,MAAA,IAAU,WAAW,WAAW;AAClC,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA,+BAAYF,SAAS,EAAA;AAAA,IACrB,mCAAgBG,aAAY,EAAA;AAAA,IAC5B,qCAAkBC,eAAe,EAAA;AAAA,IACjC,kCAAeC,YAAY,EAAA;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACE,IAAA;AACE,QAAA,OAAO,WAAW,OAAO;AAEzB,QAAA,aAAa,CAAC,SAAiB;AACnC,cAAU,UACP,UAAU,IAAI,EACd,KAAK,MAAM;AACV,cAAQ,IAAI,0BAA0B;AAAA,IAAA,CACvC,EACA,MAAM,CAAO,QAAA;AACJ,cAAA,MAAM,yBAAyB,GAAG;AAAA,IAAA,CAC3C;AAAA,EAAA;AAGL,UACG,YAAY,kBAAkB,gBAAgB,oCAC5C,MAAK,EAAA,WAAW,GAAG,MAAM,SAAS,QAAQ,OAAO,IAAI,GACnD,sBAEI,qBAAA,UAAA,EAAA,UAAA;AAAA,IACC,YAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,gBAAc;AAAA,QACd,OAAM;AAAA,QACN,WAAW,GAAG,MAAM,SAAS,QAAQ,OAAO,IAAI;AAAA,QAChD,SACE,SAAS,SAAS,MAAM,WAAW,GAAG,QAAQ;AAAA,EAAK,QAAQ,EAAE;AAAA,QAG9D,UAAA;AAAA,MAAA;AAAA,IACH;AAAA,IAED,gBACC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,gBAAc;AAAA,QACd,OAAM;AAAA,QACN,WAAW,GAAG,MAAM,SAAS,QAAQ,OAAO,MAAM;AAAA,QAClD,SAAS;AAAA,QAER,UAAA;AAAA,MAAA;AAAA,IACH;AAAA,IAED,kBACC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,gBAAc;AAAA,QACd,OAAM;AAAA,QACN,WAAW,GAAG,MAAM,SAAS,QAAQ,OAAO,QAAQ;AAAA,QACpD,SAAS;AAAA,QAER,UAAA;AAAA,MAAA;AAAA,IACH;AAAA,IAED,eACC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,gBAAc;AAAA,QACd,OAAM;AAAA,QACN,WAAW,GAAG,MAAM,SAAS,QAAQ,OAAO,OAAO;AAAA,QACnD,SAAS;AAAA,QAER,UAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAAA,EAEJ,CAAA,EAEJ,CAAA;AAGN;AC1IA,MAAM,kBAAkB;AAAA,EACtB,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,GAAG;AAAA,EACL;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,IACT,GAAG;AAAA,IACH,YAAY;AAAA,MACV,UAAU;AAAA,IACZ;AAAA,EACF;AACF;AAcO,MAAM,iBAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,EAAE,OAAO,UAAU,IAAI,WAAW,WAAW;AAEnD,6BACG,OAAO,KAAP,EAAiC,UAAU,iBAC1C,UAAC,oBAAA,MAAA,EAAK,WAAW,GAAG,MAAM,SAAS,QAAQ,IAAI,GAC5C,sBAEG,qBAAA,UAAA,EAAA,UAAA;AAAA,IAAC,oBAAA,cAAA,EAAa,OAAO,aAAa,MAAO,CAAA;AAAA,IACxC,oBAAA,iBAAA,EAAgB,UAAU,aAAa,SAAU,CAAA;AAAA,IAClD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,UAAU,aAAa;AAAA,QACvB,WAAW,UAAU;AAAA,MAAA;AAAA,IACvB;AAAA,IACC,oBAAA,gBAAA,EAAe,SAAS,aAAa,QAAS,CAAA;AAAA,IAC/C;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,UAAU,aAAa;AAAA,QACvB,UAAU,aAAa;AAAA,QACvB,8BAAWL,SAAS,EAAA;AAAA,QACpB,kCAAeG,aAAY,EAAA;AAAA,QAC3B,oCAAiBC,eAAe,EAAA;AAAA,QAChC,iCAAcC,YAAY,EAAA;AAAA,MAAA;AAAA,IAC5B;AAAA,EACF,EAAA,CAAA,EAAA,CAEJ,EArBe,GAAA,aAAa,EAsB9B;AAEJ;AC3DA,MAAM,oBAAoB;AAAA,EACxB,QAAQ,CAAC;AAAA,EACT,SAAS;AAAA,IACP,YAAY;AAAA,MACV,iBAAiB;AAAA,MACjB,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAwBO,MAAM,kBAAkD,CAAC;AAAA,EAC9D;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,eAAe;AACjB,MAAM;AACJ,QAAM,EAAE,eAAe,MAAM,IAAI,WAAW,WAAW;AACjD,QAAA,aAAa,OAA8B,IAAI;AACrD,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,IAAI;AAEnD,YAAU,MAAM;AACd,QAAI,WAAW,SAAS;AAEtB;AAAA,QACE,MAAO,WAAW,QAAQ,YAAY,WAAW,QAAQ;AAAA,MAAA;AAAA,IAE7D;AAAA,EAAA,GAGC,CAAC,eAAe,WAAW,CAAC;AAE/B,WAAS,iBAAiB;AACxB,aAAS,EAAE;AACX,0BAAsB,MAAO,WAAW,QAAQ,YAAY,CAAE;AAAA,EAChE;AAGA,QAAM,iBAAiB;AAAA,IACrB,MAAM,CAAC,IAAI,+CAAe,kBAAiB,CAAG,CAAA,EAAE,QAAQ;AAAA,IACxD,CAAC,aAAa;AAAA,EAAA;AAGhB,QAAM,EAAE,MAAM,SAAS,SAAA,IAAa,gBAAgB;AAAA,IAClD,OAAO;AAAA,IACP;AAAA,EAAA,CACD;AAGK,QAAA,kBAAkB,QAAQ,MAAM,CAAC,GAAG,IAAI,EAAE,QAAQ,GAAG,CAAC,IAAI,CAAC;AAG3D,QAAA,iBAAiB,QAAQ,kBAAkB,+CAAe;AAEhE,MAAI,CAAC,eAAe;AACX,WAAA,oBAAC,gBAAc,UAAkB,kBAAA,CAAA;AAAA,EAC1C;AAGE,SAAA,qBAAC,SAAI,WAAW,GAAG,MAAM,SAAS,OAAO,GAAG,KAAK,YAC9C,UAAA;AAAA,IACC,WAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,WAAW,GAAG,MAAM,SAAS,QAAQ;AAAA,QACrC,WAAS;AAAA,QACT,SAAS;AAAA,QAER,UAAA;AAAA,MAAA;AAAA,IACH;AAAA,wBAED,iBACC,EAAA,UAAA;AAAA,MAAC,OAAO;AAAA,MAAP;AAAA,QACC,UAAU;AAAA,QAEV,SAAQ;AAAA,QACR,SAAQ;AAAA,QACR,qBAAqB,MAAM;AACzB,yBAAe,KAAK;AAAA,QACtB;AAAA,QAEC,mBAAS,cAAc;AAAA,MAAA;AAAA,MAPnB,+CAAe;AAAA,IAAA,GASxB;AAAA,EACF,EAAA,CAAA;AAEJ;ACzCO,MAAM,YAAuB;AAAA,EAClC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,WAAW;AAAA,EACX,OAAO;AAAA,EACP,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,WAAW;AAAA,IACX,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,WAAW;AAAA,IACX,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM;AAAA,UACJ,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP,MAAM;AAAA,QACN,QAAQ;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,OAAO;AAAA,UACP,KAAK;AAAA,QACP;AAAA,MACF;AAAA,MACA,UAAU;AAAA,QACR,MAAM;AAAA,QACN,GAAG;AAAA,QACH,GAAG;AAAA,QACH,OAAO;AAAA,QACP,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MACN;AAAA,MACA,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACF;AC1JO,MAAM,gBAAgB,MAAM;AACjC,QAAM,CAAC,KAAK,MAAM,IAAI,SAA6B,IAAI;AACvD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAA6B,MAAS;AAE1D,QAAA,UAAU,YAAY,CAAC,YAAgC;AACvD,QAAA,gBAAgB,OAAO;AAAA,EAC7B,GAAG,CAAE,CAAA;AAEL,YAAU,MAAM;AACd,QAAI,CAAC,IAAK;AAEJ,UAAA,iBAAiB,IAAI,eAAe,CAAW,YAAA;AACnD,eAAS,SAAS,SAAS;AAChB,iBAAA,MAAM,YAAY,KAAK;AAAA,MAClC;AAAA,IAAA,CACD;AAED,mBAAe,QAAQ,GAAG;AAE1B,WAAO,MAAM;AACX,qBAAe,WAAW;AAAA,IAAA;AAAA,EAC5B,GACC,CAAC,GAAG,CAAC;AAED,SAAA,EAAE,OAAO;AAClB;ACsEO,MAAM,OAAsB,CAAC;AAAA,EAClC;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO,cAAc;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACE,QAAA,QAAQ,kBAA6B,QAAQ,WAAW;AAC9D,QAAM,CAAC,yBAAyB,0BAA0B,IAAI,SAE5D,eAAe;AAEjB,QAAM,EAAE,OAAO,QAAQ,IAAI,cAAc;AACzC,QAAM,YAAY,aAAa,eAAgB,SAAS,QAAQ;AAEhE,YAAU,MAAM;AACd,+BAA2B,eAAe;AAAA,EAAA,GACzC,CAAC,eAAe,CAAC;AAEpB,QAAM,sBAAsB;AAAA,IAC1B,CAAC,cAAsB;AACrB,iCAA2B,SAAS;AACpC,yDAAkB;AAAA,IACpB;AAAA,IACA,CAAC,eAAe;AAAA,EAAA;AAGlB,QAAM,sBAAsB;AAAA,IAC1B,CAAC,cAAsB;AACrB,iCAA2B,MAAS;AACpC,yDAAkB;AAAA,IACpB;AAAA,IACA,CAAC,eAAe;AAAA,EAAA;AAGZ,QAAA,yBAAyB,YAAY,MAAM;AAC/C,+BAA2B,MAAS;AACrB;AAAA,EAAA,GACd,CAAC,YAAY,CAAC;AAEN,aAAA;AAAA,IACT;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA,MACV,MAAM;AAAA,MACN,UAAU,CAAS,UAAA;AACjB,cAAM,eAAe;AACE;MACzB;AAAA,IACF;AAAA,EAAA,CACD;AAED,QAAM,gBAAgB;AAAA,IACpB,MAAM,SAAS,KAAK,CAAW,YAAA,QAAQ,OAAO,uBAAuB;AAAA,IACrE,CAAC,UAAU,uBAAuB;AAAA,EAAA;AAGpC,QAAM,eAAe;AAAA,IACnB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,iBAAiB;AAAA,MACjB,eAAe;AAAA,MACf,eAAe;AAAA,MACf,eAAe;AAAA,MACf,aAAa;AAAA,MACb,aAAa;AAAA,MACb,YAAY;AAAA,IAAA;AAAA,IAEd;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EAAA;AAIA,SAAA,oBAAC,YAAY,UAAZ,EAAqB,OAAO,cAC3B,UAAA,oBAAC,iBAAgB,EAAA,SAAS,OACxB,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK;AAAA,MACL,WAAW,GAAG,WAAW,MAAM,MAAM;AAAA,QACnC,CAAC,MAAM,SAAS,GAAG;AAAA,QACnB,CAAC,MAAM,OAAO,GAAG,CAAC;AAAA,MAAA,CACnB;AAAA,MACD;AAAA,MAEC;AAAA,IAAA;AAAA,EAAA,EAEL,CAAA,EACF,CAAA;AAEJ;ACnNO,MAAM,eAAsC,CAAC,EAAE,eAAe;AACnE,QAAM,EAAE,OAAO,WAAW,gBAAgB,IAAI,WAAW,WAAW;AAC9D,QAAA,YAAY,aAAa,CAAC;AAG7B,UAAA,CAAC,aAAa,cACb;AAAA,IAAC,OAAO;AAAA,IAAP;AAAA,MACC,SAAS,EAAE,YAAY,QAAQ;AAAA,MAC/B,SAAS;AAAA,QACP,YAAY;AAAA,QACZ,YAAY;AAAA,UACV,MAAM;AAAA,UACN,MAAM;AAAA,UACN,UAAU;AAAA,UACV,MAAM;AAAA,QACR;AAAA,MACF;AAAA,MACA,MAAM,EAAE,YAAY,QAAQ;AAAA,MAC5B,WAAW,GAAG,MAAM,SAAS,MAAM;AAAA,QACjC,CAAC,MAAM,SAAS,SAAS,GAAG;AAAA,QAC5B,CAAC,MAAM,SAAS,OAAO,GAAG,CAAC;AAAA,MAAA,CAC5B;AAAA,MAED,UAAA,oBAAC,QAAM,SAAS,CAAA;AAAA,IAAA;AAAA,EAAA;AAIxB;AC/BA,MAAM,WAAW,CAAC,UAA0B,sBAAM,cAAc,OAAO,EAAE,OAAO,8BAA8B,OAAO,IAAI,QAAQ,IAAI,SAAS,aAAa,MAAM,QAAQ,QAAQ,gBAAgB,aAAa,GAAG,eAAe,SAAS,gBAAgB,SAAS,WAAW,yBAAyB,GAAG,MAAK,GAAoB,sBAAM,cAAc,QAAQ,EAAE,GAAG,UAAS,CAAE,GAAmB,sBAAM,cAAc,QAAQ,EAAE,GAAG,wCAAyC,CAAA,GAAmB,sBAAM,cAAc,QAAQ,EAAE,GAAG,qCAAsC,CAAA,GAAmB,sBAAM,cAAc,QAAQ,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAE,CAAE,GAAmB,sBAAM,cAAc,QAAQ,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAE,CAAE,CAAC;AC4BjsB,MAAM,kBAA4C,CAAC;AAAA,EACxD;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,iCAAcC,UAAU,EAAA;AAC1B,MAAM;AACJ,QAAM,EAAE,iBAAiB,eAAe,eAAe,UACrD,WAAW,WAAW;AAClB,QAAA,OAAO,WAAW,OAAO;AAG7B,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAK;AAAA,MACL,gBAAc;AAAA,MACd,QAAQ,QAAQ,OAAO;AAAA,MACvB,WAAW,GAAG,MAAM,SAAS,QAAQ,MAAM;AAAA,QACzC,CAAC,MAAM,SAAS,QAAQ,MAAM,GAAG,QAAQ,OAAO;AAAA,MAAA,CACjD;AAAA,MACD,SAAS,MAAM,+CAAgB,QAAQ;AAAA,MACvC,qCAEK,UACC,aAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,SAAS,CAAK,MAAA;AACZ,cAAE,gBAAgB;AAClB,0BAAc,QAAQ,EAAE;AAAA,UAC1B;AAAA,UACA,WAAW,GAAG,MAAM,SAAS,QAAQ,MAAM;AAAA,UAE1C,UAAA;AAAA,QAAA;AAAA,MAAA,GAGP;AAAA,MAGD,sBAAa,oBAAA,UAAA,EAAS,OAAO,QAAQ,OAAO,OAAc;AAAA,IAAA;AAAA,EAAA;AAGjE;AC1DO,MAAM,mBAA8C,CAAC;AAAA,EAC1D;AAAA,EACA,iBAAiB;AACnB,MAAM;AACJ,QAAM,EAAE,OAAO,eAAe,SAAS,IAAI,WAAW,WAAW;AAC3D,QAAA,OAAO,WAAW,OAAO;AAG7B,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAS;AAAA,MACT,gBAAc;AAAA,MACd,OAAM;AAAA,MACN,WAAW,GAAG,MAAM,SAAS,MAAM;AAAA,MACnC;AAAA,MACA,SAAS;AAAA,MAER,UAAY,YAAA;AAAA,IAAA;AAAA,EAAA;AAGnB;ACvBA,MAAM,YAAY;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,oBAAoB,UAAwC;AAC1E,QAAM,UAAe,CAAA;AAErB,WAAS,QAAQ,CAAW,YAAA;AAC1B,UAAM,YAAY,IAAI,KAAK,QAAQ,SAAS;AAExC,QAAA,QAAQ,SAAS,GAAG;AACtB,UAAI,CAAC,QAAQ,OAAO,EAAW,SAAA,OAAO,IAAI;AAClC,cAAA,OAAO,EAAE,KAAK,OAAO;AAAA,IAAA,WACpB,YAAY,SAAS,GAAG;AACjC,UAAI,CAAC,QAAQ,WAAW,EAAW,SAAA,WAAW,IAAI;AAC1C,cAAA,WAAW,EAAE,KAAK,OAAO;AAAA,IAAA,WACxB,WAAW,SAAS,GAAG;AAChC,UAAI,CAAC,QAAQ,WAAW,EAAW,SAAA,WAAW,IAAI;AAC1C,cAAA,WAAW,EAAE,KAAK,OAAO;AAAA,IAAA,WACxB,YAAY,SAAS,GAAG;AACjC,UAAI,CAAC,QAAQ,YAAY,EAAW,SAAA,YAAY,IAAI;AAC5C,cAAA,YAAY,EAAE,KAAK,OAAO;AAAA,IAAA,WACzB,WAAW,SAAS,GAAG;AAC1B,YAAA,YAAY,OAAO,WAAW,MAAM;AAC1C,UAAI,CAAC,QAAQ,SAAS,EAAW,SAAA,SAAS,IAAI;AACtC,cAAA,SAAS,EAAE,KAAK,OAAO;AAAA,IAAA,OAC1B;AACL,UAAI,CAAC,QAAQ,WAAW,EAAW,SAAA,WAAW,IAAI;AAC1C,cAAA,WAAW,EAAE,KAAK,OAAO;AAAA,IACnC;AAAA,EAAA,CACD;AAGD,SAAO,KAAK,OAAO,EAAE,QAAQ,CAAO,QAAA;AAClC,QAAI,QAAQ,GAAG,EAAE,WAAW,GAAG;AAC7B,aAAO,QAAQ,GAAG;AAAA,IACpB;AAAA,EAAA,CACD;AAGD,QAAM,eAAe,OAAO,KAAK,OAAO,EAAE;AAAA,IAAK,CAAC,GAAG,MACjD,UAAU,QAAQ,CAAC,IAAI,UAAU,QAAQ,CAAC;AAAA,EAAA;AAGrC,SAAA,aAAa,IAAI,CAAY,aAAA;AAAA,IAClC;AAAA,IACA,UAAU,QAAQ,OAAO,EAAE;AAAA,MAAK,CAAC,GAAG,MAClC,IAAI,KAAK,EAAE,SAAS,EAAE,QAAA,IAAY,IAAI,KAAK,EAAE,SAAS,EAAE,QAAQ;AAAA,IAClE;AAAA,EACA,EAAA;AACJ;AC/DO,MAAM,gBAAwC,CAAC,EAAE,eAAe;AACrE,QAAM,EAAE,SAAA,IAAa,WAAW,WAAW;AACrC,QAAA,SAAS,QAAQ,MAAM,oBAAoB,QAAQ,GAAG,CAAC,QAAQ,CAAC;AAE/D,SAAA,oBAAA,UAAA,EAAG,UAAS,SAAA,MAAM,EAAE,CAAA;AAC7B;ACLO,MAAM,gBAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AACF,MAAM;AACJ,QAAM,EAAE,MAAA,IAAU,WAAW,WAAW;AACxC,SAEK,qBAAA,UAAA,EAAA,UAAA;AAAA,IACC,WAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,gBAAc;AAAA,QACd,gBAAc;AAAA,QACd,WAAW,GAAG,MAAM,SAAS,KAAK;AAAA,QAEjC,UAAA;AAAA,MAAA;AAAA,IACH;AAAA,IAED;AAAA,EACH,EAAA,CAAA;AAEJ;"}
|