@chat-lab/ui 0.1.0-beta.22 → 0.1.0-beta.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/SwitchAgentModal/index.cjs +1 -1
- package/dist/components/SwitchAgentModal/index.cjs.map +1 -1
- package/dist/components/SwitchAgentModal/index.js +1 -1
- package/dist/components/SwitchAgentModal/index.js.map +1 -1
- package/dist/components/VoiceInput/index.cjs +2 -2
- package/dist/components/VoiceInput/index.cjs.map +1 -1
- package/dist/components/VoiceInput/index.js +2 -2
- package/dist/components/VoiceInput/index.js.map +1 -1
- package/dist/components/assistant-ui/attachment.cjs +1 -1
- package/dist/components/assistant-ui/attachment.cjs.map +1 -1
- package/dist/components/assistant-ui/attachment.js +1 -1
- package/dist/components/assistant-ui/attachment.js.map +1 -1
- package/dist/index.css +1 -1
- package/package.json +1 -1
|
@@ -152,7 +152,7 @@ const SwitchAgentModal = () => {
|
|
|
152
152
|
setUrl("");
|
|
153
153
|
setToken("");
|
|
154
154
|
};
|
|
155
|
-
return (jsxRuntime.jsxs(dialog.Dialog, { open: isOpen, onOpenChange: setIsOpen, children: [jsxRuntime.jsx(dialog.DialogTrigger, { asChild: true, children: jsxRuntime.jsx(button.Button, { size: "icon-sm", variant: "ghost", className: "hover:bg-accent/50 transition-colors size-[unset]", children: jsxRuntime.jsx(settings.default, { className: "
|
|
155
|
+
return (jsxRuntime.jsxs(dialog.Dialog, { open: isOpen, onOpenChange: setIsOpen, children: [jsxRuntime.jsx(dialog.DialogTrigger, { asChild: true, children: jsxRuntime.jsx(button.Button, { size: "icon-sm", variant: "ghost", className: "hover:bg-accent/50 transition-colors size-[unset]", children: jsxRuntime.jsx(settings.default, { className: "size-[16px]" }) }) }), jsxRuntime.jsxs(dialog.DialogContent, { showCloseButton: false, className: "sm:max-w-lg bg-white/95 backdrop-blur-sm border border-gray-200/80 rounded-xl shadow-2xl overflow-hidden", children: [jsxRuntime.jsx(dialog.DialogHeader, { className: "px-6 py-5 border-b border-gray-100 bg-gradient-to-r from-gray-50/50 to-white", children: jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [jsxRuntime.jsx("div", { className: "flex items-center gap-3", children: jsxRuntime.jsx(dialog.DialogTitle, { className: "text-xl font-semibold text-gray-900 tracking-tight", children: currentView === "table" ? "Agent 配置管理" : (editingId ? "编辑 Agent 配置" : "添加 Agent 配置") }) }), jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [currentView === "table" && (jsxRuntime.jsxs(button.Button, { size: "sm", onClick: () => {
|
|
156
156
|
setEditingId(null);
|
|
157
157
|
setName("");
|
|
158
158
|
setUrl("");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../src/components/SwitchAgentModal/index.tsx"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n DialogTrigger,\n DialogClose,\n} from \"@/components/ui/dialog\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@radix-ui/react-label\";\n// import Switch from \"@radix-ui/react-switch\";\nimport { X, Settings, Link2, Key, Loader2, Plus, Trash2, Check, Edit2 } from \"lucide-react\";\nimport { useChatkitRef } from \"@/contexts/ChatkitContext\";\nimport useThread from \"@/hooks/useThread\";\nimport { AgentStorageManager } from \"@/utils/agentStorage\";\nimport { AgentConfig } from \"@/types/agent\";\ninterface SwitchAgentModalProps {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n onConfirm: (input1: string, input2: string) => void;\n onCancel?: () => void;\n}\n\nexport const SwitchAgentModal = (): JSX.Element => {\n const [configs, setConfigs] = useState<AgentConfig[]>([]);\n const [currentView, setCurrentView] = useState<\"table\" | \"form\">(\"table\");\n const [editingId, setEditingId] = useState<string | null>(null);\n const [name, setName] = useState(\"\");\n const [url, setUrl] = useState(\"\");\n const [token, setToken] = useState(\"\");\n const [isLoading, setIsLoading] = useState(false);\n const ref = useChatkitRef();\n const { threadList } = useThread();\n const [isOpen, setIsOpen] = useState(false);\n\n // 加载配置并初始化当前配置\n useEffect(() => {\n const loadConfigs = () => {\n const loadedConfigs = AgentStorageManager.getConfigs();\n setConfigs(loadedConfigs);\n \n // 加载当前配置到 requestOptions\n const currentConfig = AgentStorageManager.getCurrentConfig();\n if (currentConfig && ref.current) {\n const requestOptions = ref.current.getRequestOptions();\n ref.current.setRequestOptions({\n ...(requestOptions || {}),\n api: currentConfig.url,\n headers: {\n ...(requestOptions?.headers || {}),\n Authorization: `Bearer ${currentConfig.apiKey}`,\n },\n });\n }\n };\n loadConfigs();\n }, [ref]);\n\n const handleAddConfig = async () => {\n if (!name.trim() || !url.trim() || !token.trim()) return;\n\n try {\n setIsLoading(true);\n \n if (editingId) {\n // 编辑模式:更新现有配置\n const updatedConfig: AgentConfig = {\n id: editingId,\n name: name.trim(),\n url: url.trim(),\n apiKey: token.trim(),\n createdAt: configs.find(c => c.id === editingId)?.createdAt || Date.now(),\n };\n \n const updatedConfigs = configs.map(c => c.id === editingId ? updatedConfig : c);\n setConfigs(updatedConfigs);\n \n // 更新 localStorage\n const allConfigs = AgentStorageManager.getConfigs();\n const currentConfigId = AgentStorageManager.getCurrentConfig()?.id;\n const newAllConfigs = allConfigs.map(c => c.id === editingId ? updatedConfig : c);\n localStorage.setItem('chatkit_agent_configs', JSON.stringify({\n configs: newAllConfigs,\n currentConfigId,\n }));\n } else {\n // 添加模式:创建新配置\n const newConfig = AgentStorageManager.saveConfig({\n name: name.trim(),\n url: url.trim(),\n apiKey: token.trim(),\n });\n setConfigs(prev => [...prev, newConfig]);\n }\n\n setCurrentView(\"table\");\n setEditingId(null);\n setName(\"\");\n setUrl(\"\");\n setToken(\"\");\n } catch (error) {\n console.error(\"保存配置失败:\", error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleEditConfig = (config: AgentConfig) => {\n setEditingId(config.id);\n setName(config.name);\n setUrl(config.url);\n setToken(config.apiKey);\n setCurrentView(\"form\");\n };\n\n const handleSelectConfig = async (config: AgentConfig) => {\n try {\n setIsLoading(true);\n AgentStorageManager.setCurrentConfig(config.id);\n\n const requestOptions = ref.current?.getRequestOptions();\n ref.current?.setRequestOptions({\n ...(requestOptions || {}),\n api: config.url,\n headers: {\n ...(requestOptions?.headers || {}),\n Authorization: `Bearer ${config.apiKey}`,\n },\n });\n\n for (const thread of threadList) {\n ref.current?.updateThread(thread.id, {\n metadata: {\n ...(thread.metadata || {}),\n [\"sessionInited\"]: false,\n },\n });\n }\n ref.current?.clearCurrentThread();\n // 成功后关闭弹窗\n setIsOpen(false);\n } catch (error) {\n console.error(\"选择配置失败:\", error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleDeleteConfig = (id: string) => {\n AgentStorageManager.deleteConfig(id);\n setConfigs(prev => prev.filter(config => config.id !== id));\n };\n\n const handleCancel = () => {\n // 关闭弹窗并重置\n setIsOpen(false);\n setCurrentView(\"table\");\n setEditingId(null);\n setName(\"\");\n setUrl(\"\");\n setToken(\"\");\n };\n\n return (\n <Dialog open={isOpen} onOpenChange={setIsOpen}>\n <DialogTrigger asChild>\n <Button\n size=\"icon-sm\"\n variant=\"ghost\"\n className=\"hover:bg-accent/50 transition-colors size-[unset]\"\n >\n <Settings className=\"h-4 w-4\" />\n </Button>\n </DialogTrigger>\n <DialogContent\n showCloseButton={false}\n className=\"sm:max-w-lg bg-white/95 backdrop-blur-sm border border-gray-200/80 rounded-xl shadow-2xl overflow-hidden\"\n >\n {/* 模态框头部 */}\n <DialogHeader className=\"px-6 py-5 border-b border-gray-100 bg-gradient-to-r from-gray-50/50 to-white\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <DialogTitle className=\"text-xl font-semibold text-gray-900 tracking-tight\">\n {currentView === \"table\" ? \"Agent 配置管理\" : (editingId ? \"编辑 Agent 配置\" : \"添加 Agent 配置\")}\n </DialogTitle>\n </div>\n <div className=\"flex items-center gap-2\">\n {currentView === \"table\" && (\n <Button\n size=\"sm\"\n onClick={() => {\n setEditingId(null);\n setName(\"\");\n setUrl(\"\");\n setToken(\"\");\n setCurrentView(\"form\");\n }}\n className=\"bg-gradient-to-r from-blue-600 to-blue-700 hover:from-blue-700 hover:to-blue-800 text-white shadow-md hover:shadow-lg transition-all duration-200\"\n >\n <Plus className=\"h-4 w-4 mr-2\" />\n 添加配置\n </Button>\n )}\n {currentView === \"form\" && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => setCurrentView(\"table\")}\n className=\"border-gray-200 hover:bg-gray-50 hover:border-gray-300 transition-all\"\n >\n 返回列表\n </Button>\n )}\n <DialogClose asChild>\n <button\n className=\"text-gray-400 hover:text-gray-600 transition-all p-1.5 rounded-lg hover:bg-gray-100 active:scale-95\"\n aria-label=\"关闭\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n </DialogClose>\n </div>\n </div>\n </DialogHeader>\n\n {/* 模态框内容 */}\n <div className=\"px-6 py-6 bg-white min-h-[400px] max-h-[600px]\">\n {currentView === \"table\" ? (\n /* 配置表格 */\n <div className=\"space-y-4 h-full\">\n {configs.length === 0 ? (\n <div className=\"text-center py-16 text-gray-500\">\n <div className=\"inline-flex items-center justify-center w-16 h-16 rounded-full bg-gradient-to-br from-blue-50 to-blue-100 mb-4\">\n <Settings className=\"h-8 w-8 text-blue-500\" />\n </div>\n <p className=\"text-base font-medium text-gray-700 mb-1\">暂无配置</p>\n <p className=\"text-sm text-gray-500\">点击右上角\"添加配置\"按钮开始</p>\n </div>\n ) : (\n <div className=\"space-y-3 overflow-y-auto max-h-[500px] pr-2 scrollbar-thin scrollbar-thumb-gray-300 scrollbar-track-gray-100\">\n {configs.map((config, index) => (\n <div\n key={config.id}\n className=\"group relative bg-gradient-to-r from-gray-50/50 to-white border border-gray-200 rounded-xl p-4 hover:shadow-md hover:border-blue-200 transition-all duration-200\"\n >\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <div className=\"flex items-center justify-center w-8 h-8 rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 text-white text-sm font-semibold shadow-sm\">\n {config.name.charAt(0).toUpperCase()}\n </div>\n <h3 className=\"text-base font-semibold text-gray-900\">{config.name}</h3>\n </div>\n \n <div className=\"space-y-1.5 pl-10\">\n <div className=\"flex items-start gap-2 max-w-[240px]\">\n <Link2 className=\"h-4 w-4 text-gray-400 mt-0.5 flex-shrink-0\" />\n <p className=\"text-sm text-gray-600 font-mono truncate flex-1 min-w-0\" title={config.url}>\n {config.url}\n </p>\n </div>\n <div className=\"flex items-center gap-2 max-w-[240px]\">\n <Key className=\"h-4 w-4 text-gray-400 flex-shrink-0\" />\n <p className=\"text-sm text-gray-500 font-mono truncate flex-1 min-w-0\" title={config.apiKey}>\n {config.apiKey.substring(0, 20)}...\n </p>\n </div>\n </div>\n\n <div className=\"flex gap-2 pl-10 pt-1\">\n <Button\n size=\"sm\"\n onClick={() => handleSelectConfig(config)}\n disabled={isLoading}\n className=\"h-9 px-4 bg-gradient-to-r from-blue-600 to-blue-700 hover:from-blue-700 hover:to-blue-800 text-white shadow-sm hover:shadow-md transition-all duration-200\"\n >\n <Check className=\"h-4 w-4 mr-1.5\" />\n 选择\n </Button>\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => handleEditConfig(config)}\n disabled={isLoading}\n className=\"h-9 px-4 border-gray-300 text-gray-700 hover:bg-gray-50 hover:border-gray-400 transition-all duration-200\"\n >\n <Edit2 className=\"h-4 w-4 mr-1.5\" />\n 编辑\n </Button>\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => handleDeleteConfig(config.id)}\n disabled={isLoading}\n className=\"h-9 px-4 border-red-200 text-red-600 hover:bg-red-50 hover:border-red-300 transition-all duration-200\"\n >\n <Trash2 className=\"h-4 w-4 mr-1.5\" />\n 删除\n </Button>\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n ) : (\n /* 添加配置表单 */\n <div className=\"space-y-5\">\n <div className=\"space-y-2.5\">\n <Label className=\"text-sm font-semibold text-gray-700 flex items-center gap-2\">\n <Settings className=\"h-4 w-4 text-blue-500\" />\n 配置名称\n </Label>\n <div className=\"relative\">\n <Input\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"我的配置\"\n className=\"w-full h-10 pl-4 pr-4 text-sm transition-all duration-200\"\n />\n </div>\n <p className=\"text-xs text-gray-500 mt-1.5\">\n 为配置设置一个易于识别的名称\n </p>\n </div>\n\n <div className=\"space-y-2.5\">\n <Label className=\"text-sm font-semibold text-gray-700 flex items-center gap-2\">\n <Link2 className=\"h-4 w-4 text-blue-500\" />\n API 地址\n </Label>\n <div className=\"relative\">\n <Input\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n placeholder=\"https://api.example.com/v1/chat\"\n className=\"w-full h-10 pl-4 pr-4 text-sm transition-all duration-200\"\n />\n </div>\n <p className=\"text-xs text-gray-500 mt-1.5\">\n 请输入完整的 API 端点地址\n </p>\n </div>\n\n <div className=\"space-y-2.5\">\n <Label className=\"text-sm font-semibold text-gray-700 flex items-center gap-2\">\n <Key className=\"h-4 w-4 text-amber-500\" />\n Authorization Token\n </Label>\n <div className=\"relative\">\n <Input\n type=\"password\"\n value={token}\n onChange={(e) => setToken(e.target.value)}\n placeholder=\"token...\"\n className=\"w-full h-10 pl-4 pr-4 text-sm transition-all duration-200 font-mono\"\n />\n </div>\n <p className=\"text-xs text-gray-500 mt-1.5\">请输入您的认证令牌</p>\n </div>\n </div>\n )}\n </div>\n\n {/* 模态框底部 */}\n {currentView === \"form\" && (\n <DialogFooter className=\"px-6 py-4 border-t border-gray-100 bg-gradient-to-r from-gray-50/30 to-white flex justify-end gap-3\">\n <DialogClose asChild>\n <Button\n variant=\"outline\"\n onClick={handleCancel}\n disabled={isLoading}\n className=\"min-w-[80px] h-9 border-gray-200 hover:bg-gray-50 hover:border-gray-300 transition-all\"\n >\n 取消\n </Button>\n </DialogClose>\n <Button\n onClick={handleAddConfig}\n disabled={isLoading || !name.trim() || !url.trim() || !token.trim()}\n className=\"min-w-[80px] h-9 bg-gradient-to-r from-blue-600 to-blue-700 hover:from-blue-700 hover:to-blue-800 text-white shadow-md hover:shadow-lg transition-all duration-200 disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n {isLoading ? (\n <>\n <Loader2 className=\"h-4 w-4 mr-2 animate-spin\" />\n {editingId ? \"保存中...\" : \"添加中...\"}\n </>\n ) : (\n editingId ? \"保存\" : \"添加\"\n )}\n </Button>\n </DialogFooter>\n )}\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default SwitchAgentModal;\n"],"names":["useState","useChatkitRef","useEffect","AgentStorageManager","_jsxs","Dialog","_jsx","DialogTrigger","Button","Settings","DialogContent","DialogHeader","DialogTitle","Plus","DialogClose","X","Link2","Key","Check","Edit2","Trash2","Label","Input","DialogFooter","_Fragment","Loader2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/SwitchAgentModal/index.tsx"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n DialogTrigger,\n DialogClose,\n} from \"@/components/ui/dialog\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@radix-ui/react-label\";\n// import Switch from \"@radix-ui/react-switch\";\nimport { X, Settings, Link2, Key, Loader2, Plus, Trash2, Check, Edit2 } from \"lucide-react\";\nimport { useChatkitRef } from \"@/contexts/ChatkitContext\";\nimport useThread from \"@/hooks/useThread\";\nimport { AgentStorageManager } from \"@/utils/agentStorage\";\nimport { AgentConfig } from \"@/types/agent\";\ninterface SwitchAgentModalProps {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n onConfirm: (input1: string, input2: string) => void;\n onCancel?: () => void;\n}\n\nexport const SwitchAgentModal = (): JSX.Element => {\n const [configs, setConfigs] = useState<AgentConfig[]>([]);\n const [currentView, setCurrentView] = useState<\"table\" | \"form\">(\"table\");\n const [editingId, setEditingId] = useState<string | null>(null);\n const [name, setName] = useState(\"\");\n const [url, setUrl] = useState(\"\");\n const [token, setToken] = useState(\"\");\n const [isLoading, setIsLoading] = useState(false);\n const ref = useChatkitRef();\n const { threadList } = useThread();\n const [isOpen, setIsOpen] = useState(false);\n\n // 加载配置并初始化当前配置\n useEffect(() => {\n const loadConfigs = () => {\n const loadedConfigs = AgentStorageManager.getConfigs();\n setConfigs(loadedConfigs);\n \n // 加载当前配置到 requestOptions\n const currentConfig = AgentStorageManager.getCurrentConfig();\n if (currentConfig && ref.current) {\n const requestOptions = ref.current.getRequestOptions();\n ref.current.setRequestOptions({\n ...(requestOptions || {}),\n api: currentConfig.url,\n headers: {\n ...(requestOptions?.headers || {}),\n Authorization: `Bearer ${currentConfig.apiKey}`,\n },\n });\n }\n };\n loadConfigs();\n }, [ref]);\n\n const handleAddConfig = async () => {\n if (!name.trim() || !url.trim() || !token.trim()) return;\n\n try {\n setIsLoading(true);\n \n if (editingId) {\n // 编辑模式:更新现有配置\n const updatedConfig: AgentConfig = {\n id: editingId,\n name: name.trim(),\n url: url.trim(),\n apiKey: token.trim(),\n createdAt: configs.find(c => c.id === editingId)?.createdAt || Date.now(),\n };\n \n const updatedConfigs = configs.map(c => c.id === editingId ? updatedConfig : c);\n setConfigs(updatedConfigs);\n \n // 更新 localStorage\n const allConfigs = AgentStorageManager.getConfigs();\n const currentConfigId = AgentStorageManager.getCurrentConfig()?.id;\n const newAllConfigs = allConfigs.map(c => c.id === editingId ? updatedConfig : c);\n localStorage.setItem('chatkit_agent_configs', JSON.stringify({\n configs: newAllConfigs,\n currentConfigId,\n }));\n } else {\n // 添加模式:创建新配置\n const newConfig = AgentStorageManager.saveConfig({\n name: name.trim(),\n url: url.trim(),\n apiKey: token.trim(),\n });\n setConfigs(prev => [...prev, newConfig]);\n }\n\n setCurrentView(\"table\");\n setEditingId(null);\n setName(\"\");\n setUrl(\"\");\n setToken(\"\");\n } catch (error) {\n console.error(\"保存配置失败:\", error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleEditConfig = (config: AgentConfig) => {\n setEditingId(config.id);\n setName(config.name);\n setUrl(config.url);\n setToken(config.apiKey);\n setCurrentView(\"form\");\n };\n\n const handleSelectConfig = async (config: AgentConfig) => {\n try {\n setIsLoading(true);\n AgentStorageManager.setCurrentConfig(config.id);\n\n const requestOptions = ref.current?.getRequestOptions();\n ref.current?.setRequestOptions({\n ...(requestOptions || {}),\n api: config.url,\n headers: {\n ...(requestOptions?.headers || {}),\n Authorization: `Bearer ${config.apiKey}`,\n },\n });\n\n for (const thread of threadList) {\n ref.current?.updateThread(thread.id, {\n metadata: {\n ...(thread.metadata || {}),\n [\"sessionInited\"]: false,\n },\n });\n }\n ref.current?.clearCurrentThread();\n // 成功后关闭弹窗\n setIsOpen(false);\n } catch (error) {\n console.error(\"选择配置失败:\", error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleDeleteConfig = (id: string) => {\n AgentStorageManager.deleteConfig(id);\n setConfigs(prev => prev.filter(config => config.id !== id));\n };\n\n const handleCancel = () => {\n // 关闭弹窗并重置\n setIsOpen(false);\n setCurrentView(\"table\");\n setEditingId(null);\n setName(\"\");\n setUrl(\"\");\n setToken(\"\");\n };\n\n return (\n <Dialog open={isOpen} onOpenChange={setIsOpen}>\n <DialogTrigger asChild>\n <Button\n size=\"icon-sm\"\n variant=\"ghost\"\n className=\"hover:bg-accent/50 transition-colors size-[unset]\"\n >\n <Settings className=\"size-[16px]\" />\n </Button>\n </DialogTrigger>\n <DialogContent\n showCloseButton={false}\n className=\"sm:max-w-lg bg-white/95 backdrop-blur-sm border border-gray-200/80 rounded-xl shadow-2xl overflow-hidden\"\n >\n {/* 模态框头部 */}\n <DialogHeader className=\"px-6 py-5 border-b border-gray-100 bg-gradient-to-r from-gray-50/50 to-white\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <DialogTitle className=\"text-xl font-semibold text-gray-900 tracking-tight\">\n {currentView === \"table\" ? \"Agent 配置管理\" : (editingId ? \"编辑 Agent 配置\" : \"添加 Agent 配置\")}\n </DialogTitle>\n </div>\n <div className=\"flex items-center gap-2\">\n {currentView === \"table\" && (\n <Button\n size=\"sm\"\n onClick={() => {\n setEditingId(null);\n setName(\"\");\n setUrl(\"\");\n setToken(\"\");\n setCurrentView(\"form\");\n }}\n className=\"bg-gradient-to-r from-blue-600 to-blue-700 hover:from-blue-700 hover:to-blue-800 text-white shadow-md hover:shadow-lg transition-all duration-200\"\n >\n <Plus className=\"h-4 w-4 mr-2\" />\n 添加配置\n </Button>\n )}\n {currentView === \"form\" && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => setCurrentView(\"table\")}\n className=\"border-gray-200 hover:bg-gray-50 hover:border-gray-300 transition-all\"\n >\n 返回列表\n </Button>\n )}\n <DialogClose asChild>\n <button\n className=\"text-gray-400 hover:text-gray-600 transition-all p-1.5 rounded-lg hover:bg-gray-100 active:scale-95\"\n aria-label=\"关闭\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n </DialogClose>\n </div>\n </div>\n </DialogHeader>\n\n {/* 模态框内容 */}\n <div className=\"px-6 py-6 bg-white min-h-[400px] max-h-[600px]\">\n {currentView === \"table\" ? (\n /* 配置表格 */\n <div className=\"space-y-4 h-full\">\n {configs.length === 0 ? (\n <div className=\"text-center py-16 text-gray-500\">\n <div className=\"inline-flex items-center justify-center w-16 h-16 rounded-full bg-gradient-to-br from-blue-50 to-blue-100 mb-4\">\n <Settings className=\"h-8 w-8 text-blue-500\" />\n </div>\n <p className=\"text-base font-medium text-gray-700 mb-1\">暂无配置</p>\n <p className=\"text-sm text-gray-500\">点击右上角\"添加配置\"按钮开始</p>\n </div>\n ) : (\n <div className=\"space-y-3 overflow-y-auto max-h-[500px] pr-2 scrollbar-thin scrollbar-thumb-gray-300 scrollbar-track-gray-100\">\n {configs.map((config, index) => (\n <div\n key={config.id}\n className=\"group relative bg-gradient-to-r from-gray-50/50 to-white border border-gray-200 rounded-xl p-4 hover:shadow-md hover:border-blue-200 transition-all duration-200\"\n >\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <div className=\"flex items-center justify-center w-8 h-8 rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 text-white text-sm font-semibold shadow-sm\">\n {config.name.charAt(0).toUpperCase()}\n </div>\n <h3 className=\"text-base font-semibold text-gray-900\">{config.name}</h3>\n </div>\n \n <div className=\"space-y-1.5 pl-10\">\n <div className=\"flex items-start gap-2 max-w-[240px]\">\n <Link2 className=\"h-4 w-4 text-gray-400 mt-0.5 flex-shrink-0\" />\n <p className=\"text-sm text-gray-600 font-mono truncate flex-1 min-w-0\" title={config.url}>\n {config.url}\n </p>\n </div>\n <div className=\"flex items-center gap-2 max-w-[240px]\">\n <Key className=\"h-4 w-4 text-gray-400 flex-shrink-0\" />\n <p className=\"text-sm text-gray-500 font-mono truncate flex-1 min-w-0\" title={config.apiKey}>\n {config.apiKey.substring(0, 20)}...\n </p>\n </div>\n </div>\n\n <div className=\"flex gap-2 pl-10 pt-1\">\n <Button\n size=\"sm\"\n onClick={() => handleSelectConfig(config)}\n disabled={isLoading}\n className=\"h-9 px-4 bg-gradient-to-r from-blue-600 to-blue-700 hover:from-blue-700 hover:to-blue-800 text-white shadow-sm hover:shadow-md transition-all duration-200\"\n >\n <Check className=\"h-4 w-4 mr-1.5\" />\n 选择\n </Button>\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => handleEditConfig(config)}\n disabled={isLoading}\n className=\"h-9 px-4 border-gray-300 text-gray-700 hover:bg-gray-50 hover:border-gray-400 transition-all duration-200\"\n >\n <Edit2 className=\"h-4 w-4 mr-1.5\" />\n 编辑\n </Button>\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => handleDeleteConfig(config.id)}\n disabled={isLoading}\n className=\"h-9 px-4 border-red-200 text-red-600 hover:bg-red-50 hover:border-red-300 transition-all duration-200\"\n >\n <Trash2 className=\"h-4 w-4 mr-1.5\" />\n 删除\n </Button>\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n ) : (\n /* 添加配置表单 */\n <div className=\"space-y-5\">\n <div className=\"space-y-2.5\">\n <Label className=\"text-sm font-semibold text-gray-700 flex items-center gap-2\">\n <Settings className=\"h-4 w-4 text-blue-500\" />\n 配置名称\n </Label>\n <div className=\"relative\">\n <Input\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"我的配置\"\n className=\"w-full h-10 pl-4 pr-4 text-sm transition-all duration-200\"\n />\n </div>\n <p className=\"text-xs text-gray-500 mt-1.5\">\n 为配置设置一个易于识别的名称\n </p>\n </div>\n\n <div className=\"space-y-2.5\">\n <Label className=\"text-sm font-semibold text-gray-700 flex items-center gap-2\">\n <Link2 className=\"h-4 w-4 text-blue-500\" />\n API 地址\n </Label>\n <div className=\"relative\">\n <Input\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n placeholder=\"https://api.example.com/v1/chat\"\n className=\"w-full h-10 pl-4 pr-4 text-sm transition-all duration-200\"\n />\n </div>\n <p className=\"text-xs text-gray-500 mt-1.5\">\n 请输入完整的 API 端点地址\n </p>\n </div>\n\n <div className=\"space-y-2.5\">\n <Label className=\"text-sm font-semibold text-gray-700 flex items-center gap-2\">\n <Key className=\"h-4 w-4 text-amber-500\" />\n Authorization Token\n </Label>\n <div className=\"relative\">\n <Input\n type=\"password\"\n value={token}\n onChange={(e) => setToken(e.target.value)}\n placeholder=\"token...\"\n className=\"w-full h-10 pl-4 pr-4 text-sm transition-all duration-200 font-mono\"\n />\n </div>\n <p className=\"text-xs text-gray-500 mt-1.5\">请输入您的认证令牌</p>\n </div>\n </div>\n )}\n </div>\n\n {/* 模态框底部 */}\n {currentView === \"form\" && (\n <DialogFooter className=\"px-6 py-4 border-t border-gray-100 bg-gradient-to-r from-gray-50/30 to-white flex justify-end gap-3\">\n <DialogClose asChild>\n <Button\n variant=\"outline\"\n onClick={handleCancel}\n disabled={isLoading}\n className=\"min-w-[80px] h-9 border-gray-200 hover:bg-gray-50 hover:border-gray-300 transition-all\"\n >\n 取消\n </Button>\n </DialogClose>\n <Button\n onClick={handleAddConfig}\n disabled={isLoading || !name.trim() || !url.trim() || !token.trim()}\n className=\"min-w-[80px] h-9 bg-gradient-to-r from-blue-600 to-blue-700 hover:from-blue-700 hover:to-blue-800 text-white shadow-md hover:shadow-lg transition-all duration-200 disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n {isLoading ? (\n <>\n <Loader2 className=\"h-4 w-4 mr-2 animate-spin\" />\n {editingId ? \"保存中...\" : \"添加中...\"}\n </>\n ) : (\n editingId ? \"保存\" : \"添加\"\n )}\n </Button>\n </DialogFooter>\n )}\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default SwitchAgentModal;\n"],"names":["useState","useChatkitRef","useEffect","AgentStorageManager","_jsxs","Dialog","_jsx","DialogTrigger","Button","Settings","DialogContent","DialogHeader","DialogTitle","Plus","DialogClose","X","Link2","Key","Check","Edit2","Trash2","Label","Input","DialogFooter","_Fragment","Loader2"],"mappings":"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"}
|
|
@@ -148,7 +148,7 @@ const SwitchAgentModal = () => {
|
|
|
148
148
|
setUrl("");
|
|
149
149
|
setToken("");
|
|
150
150
|
};
|
|
151
|
-
return (jsxs(Dialog, { open: isOpen, onOpenChange: setIsOpen, children: [jsx(DialogTrigger, { asChild: true, children: jsx(Button, { size: "icon-sm", variant: "ghost", className: "hover:bg-accent/50 transition-colors size-[unset]", children: jsx(Settings, { className: "
|
|
151
|
+
return (jsxs(Dialog, { open: isOpen, onOpenChange: setIsOpen, children: [jsx(DialogTrigger, { asChild: true, children: jsx(Button, { size: "icon-sm", variant: "ghost", className: "hover:bg-accent/50 transition-colors size-[unset]", children: jsx(Settings, { className: "size-[16px]" }) }) }), jsxs(DialogContent, { showCloseButton: false, className: "sm:max-w-lg bg-white/95 backdrop-blur-sm border border-gray-200/80 rounded-xl shadow-2xl overflow-hidden", children: [jsx(DialogHeader, { className: "px-6 py-5 border-b border-gray-100 bg-gradient-to-r from-gray-50/50 to-white", children: jsxs("div", { className: "flex items-center justify-between", children: [jsx("div", { className: "flex items-center gap-3", children: jsx(DialogTitle, { className: "text-xl font-semibold text-gray-900 tracking-tight", children: currentView === "table" ? "Agent 配置管理" : (editingId ? "编辑 Agent 配置" : "添加 Agent 配置") }) }), jsxs("div", { className: "flex items-center gap-2", children: [currentView === "table" && (jsxs(Button, { size: "sm", onClick: () => {
|
|
152
152
|
setEditingId(null);
|
|
153
153
|
setName("");
|
|
154
154
|
setUrl("");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/SwitchAgentModal/index.tsx"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n DialogTrigger,\n DialogClose,\n} from \"@/components/ui/dialog\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@radix-ui/react-label\";\n// import Switch from \"@radix-ui/react-switch\";\nimport { X, Settings, Link2, Key, Loader2, Plus, Trash2, Check, Edit2 } from \"lucide-react\";\nimport { useChatkitRef } from \"@/contexts/ChatkitContext\";\nimport useThread from \"@/hooks/useThread\";\nimport { AgentStorageManager } from \"@/utils/agentStorage\";\nimport { AgentConfig } from \"@/types/agent\";\ninterface SwitchAgentModalProps {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n onConfirm: (input1: string, input2: string) => void;\n onCancel?: () => void;\n}\n\nexport const SwitchAgentModal = (): JSX.Element => {\n const [configs, setConfigs] = useState<AgentConfig[]>([]);\n const [currentView, setCurrentView] = useState<\"table\" | \"form\">(\"table\");\n const [editingId, setEditingId] = useState<string | null>(null);\n const [name, setName] = useState(\"\");\n const [url, setUrl] = useState(\"\");\n const [token, setToken] = useState(\"\");\n const [isLoading, setIsLoading] = useState(false);\n const ref = useChatkitRef();\n const { threadList } = useThread();\n const [isOpen, setIsOpen] = useState(false);\n\n // 加载配置并初始化当前配置\n useEffect(() => {\n const loadConfigs = () => {\n const loadedConfigs = AgentStorageManager.getConfigs();\n setConfigs(loadedConfigs);\n \n // 加载当前配置到 requestOptions\n const currentConfig = AgentStorageManager.getCurrentConfig();\n if (currentConfig && ref.current) {\n const requestOptions = ref.current.getRequestOptions();\n ref.current.setRequestOptions({\n ...(requestOptions || {}),\n api: currentConfig.url,\n headers: {\n ...(requestOptions?.headers || {}),\n Authorization: `Bearer ${currentConfig.apiKey}`,\n },\n });\n }\n };\n loadConfigs();\n }, [ref]);\n\n const handleAddConfig = async () => {\n if (!name.trim() || !url.trim() || !token.trim()) return;\n\n try {\n setIsLoading(true);\n \n if (editingId) {\n // 编辑模式:更新现有配置\n const updatedConfig: AgentConfig = {\n id: editingId,\n name: name.trim(),\n url: url.trim(),\n apiKey: token.trim(),\n createdAt: configs.find(c => c.id === editingId)?.createdAt || Date.now(),\n };\n \n const updatedConfigs = configs.map(c => c.id === editingId ? updatedConfig : c);\n setConfigs(updatedConfigs);\n \n // 更新 localStorage\n const allConfigs = AgentStorageManager.getConfigs();\n const currentConfigId = AgentStorageManager.getCurrentConfig()?.id;\n const newAllConfigs = allConfigs.map(c => c.id === editingId ? updatedConfig : c);\n localStorage.setItem('chatkit_agent_configs', JSON.stringify({\n configs: newAllConfigs,\n currentConfigId,\n }));\n } else {\n // 添加模式:创建新配置\n const newConfig = AgentStorageManager.saveConfig({\n name: name.trim(),\n url: url.trim(),\n apiKey: token.trim(),\n });\n setConfigs(prev => [...prev, newConfig]);\n }\n\n setCurrentView(\"table\");\n setEditingId(null);\n setName(\"\");\n setUrl(\"\");\n setToken(\"\");\n } catch (error) {\n console.error(\"保存配置失败:\", error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleEditConfig = (config: AgentConfig) => {\n setEditingId(config.id);\n setName(config.name);\n setUrl(config.url);\n setToken(config.apiKey);\n setCurrentView(\"form\");\n };\n\n const handleSelectConfig = async (config: AgentConfig) => {\n try {\n setIsLoading(true);\n AgentStorageManager.setCurrentConfig(config.id);\n\n const requestOptions = ref.current?.getRequestOptions();\n ref.current?.setRequestOptions({\n ...(requestOptions || {}),\n api: config.url,\n headers: {\n ...(requestOptions?.headers || {}),\n Authorization: `Bearer ${config.apiKey}`,\n },\n });\n\n for (const thread of threadList) {\n ref.current?.updateThread(thread.id, {\n metadata: {\n ...(thread.metadata || {}),\n [\"sessionInited\"]: false,\n },\n });\n }\n ref.current?.clearCurrentThread();\n // 成功后关闭弹窗\n setIsOpen(false);\n } catch (error) {\n console.error(\"选择配置失败:\", error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleDeleteConfig = (id: string) => {\n AgentStorageManager.deleteConfig(id);\n setConfigs(prev => prev.filter(config => config.id !== id));\n };\n\n const handleCancel = () => {\n // 关闭弹窗并重置\n setIsOpen(false);\n setCurrentView(\"table\");\n setEditingId(null);\n setName(\"\");\n setUrl(\"\");\n setToken(\"\");\n };\n\n return (\n <Dialog open={isOpen} onOpenChange={setIsOpen}>\n <DialogTrigger asChild>\n <Button\n size=\"icon-sm\"\n variant=\"ghost\"\n className=\"hover:bg-accent/50 transition-colors size-[unset]\"\n >\n <Settings className=\"h-4 w-4\" />\n </Button>\n </DialogTrigger>\n <DialogContent\n showCloseButton={false}\n className=\"sm:max-w-lg bg-white/95 backdrop-blur-sm border border-gray-200/80 rounded-xl shadow-2xl overflow-hidden\"\n >\n {/* 模态框头部 */}\n <DialogHeader className=\"px-6 py-5 border-b border-gray-100 bg-gradient-to-r from-gray-50/50 to-white\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <DialogTitle className=\"text-xl font-semibold text-gray-900 tracking-tight\">\n {currentView === \"table\" ? \"Agent 配置管理\" : (editingId ? \"编辑 Agent 配置\" : \"添加 Agent 配置\")}\n </DialogTitle>\n </div>\n <div className=\"flex items-center gap-2\">\n {currentView === \"table\" && (\n <Button\n size=\"sm\"\n onClick={() => {\n setEditingId(null);\n setName(\"\");\n setUrl(\"\");\n setToken(\"\");\n setCurrentView(\"form\");\n }}\n className=\"bg-gradient-to-r from-blue-600 to-blue-700 hover:from-blue-700 hover:to-blue-800 text-white shadow-md hover:shadow-lg transition-all duration-200\"\n >\n <Plus className=\"h-4 w-4 mr-2\" />\n 添加配置\n </Button>\n )}\n {currentView === \"form\" && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => setCurrentView(\"table\")}\n className=\"border-gray-200 hover:bg-gray-50 hover:border-gray-300 transition-all\"\n >\n 返回列表\n </Button>\n )}\n <DialogClose asChild>\n <button\n className=\"text-gray-400 hover:text-gray-600 transition-all p-1.5 rounded-lg hover:bg-gray-100 active:scale-95\"\n aria-label=\"关闭\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n </DialogClose>\n </div>\n </div>\n </DialogHeader>\n\n {/* 模态框内容 */}\n <div className=\"px-6 py-6 bg-white min-h-[400px] max-h-[600px]\">\n {currentView === \"table\" ? (\n /* 配置表格 */\n <div className=\"space-y-4 h-full\">\n {configs.length === 0 ? (\n <div className=\"text-center py-16 text-gray-500\">\n <div className=\"inline-flex items-center justify-center w-16 h-16 rounded-full bg-gradient-to-br from-blue-50 to-blue-100 mb-4\">\n <Settings className=\"h-8 w-8 text-blue-500\" />\n </div>\n <p className=\"text-base font-medium text-gray-700 mb-1\">暂无配置</p>\n <p className=\"text-sm text-gray-500\">点击右上角\"添加配置\"按钮开始</p>\n </div>\n ) : (\n <div className=\"space-y-3 overflow-y-auto max-h-[500px] pr-2 scrollbar-thin scrollbar-thumb-gray-300 scrollbar-track-gray-100\">\n {configs.map((config, index) => (\n <div\n key={config.id}\n className=\"group relative bg-gradient-to-r from-gray-50/50 to-white border border-gray-200 rounded-xl p-4 hover:shadow-md hover:border-blue-200 transition-all duration-200\"\n >\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <div className=\"flex items-center justify-center w-8 h-8 rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 text-white text-sm font-semibold shadow-sm\">\n {config.name.charAt(0).toUpperCase()}\n </div>\n <h3 className=\"text-base font-semibold text-gray-900\">{config.name}</h3>\n </div>\n \n <div className=\"space-y-1.5 pl-10\">\n <div className=\"flex items-start gap-2 max-w-[240px]\">\n <Link2 className=\"h-4 w-4 text-gray-400 mt-0.5 flex-shrink-0\" />\n <p className=\"text-sm text-gray-600 font-mono truncate flex-1 min-w-0\" title={config.url}>\n {config.url}\n </p>\n </div>\n <div className=\"flex items-center gap-2 max-w-[240px]\">\n <Key className=\"h-4 w-4 text-gray-400 flex-shrink-0\" />\n <p className=\"text-sm text-gray-500 font-mono truncate flex-1 min-w-0\" title={config.apiKey}>\n {config.apiKey.substring(0, 20)}...\n </p>\n </div>\n </div>\n\n <div className=\"flex gap-2 pl-10 pt-1\">\n <Button\n size=\"sm\"\n onClick={() => handleSelectConfig(config)}\n disabled={isLoading}\n className=\"h-9 px-4 bg-gradient-to-r from-blue-600 to-blue-700 hover:from-blue-700 hover:to-blue-800 text-white shadow-sm hover:shadow-md transition-all duration-200\"\n >\n <Check className=\"h-4 w-4 mr-1.5\" />\n 选择\n </Button>\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => handleEditConfig(config)}\n disabled={isLoading}\n className=\"h-9 px-4 border-gray-300 text-gray-700 hover:bg-gray-50 hover:border-gray-400 transition-all duration-200\"\n >\n <Edit2 className=\"h-4 w-4 mr-1.5\" />\n 编辑\n </Button>\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => handleDeleteConfig(config.id)}\n disabled={isLoading}\n className=\"h-9 px-4 border-red-200 text-red-600 hover:bg-red-50 hover:border-red-300 transition-all duration-200\"\n >\n <Trash2 className=\"h-4 w-4 mr-1.5\" />\n 删除\n </Button>\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n ) : (\n /* 添加配置表单 */\n <div className=\"space-y-5\">\n <div className=\"space-y-2.5\">\n <Label className=\"text-sm font-semibold text-gray-700 flex items-center gap-2\">\n <Settings className=\"h-4 w-4 text-blue-500\" />\n 配置名称\n </Label>\n <div className=\"relative\">\n <Input\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"我的配置\"\n className=\"w-full h-10 pl-4 pr-4 text-sm transition-all duration-200\"\n />\n </div>\n <p className=\"text-xs text-gray-500 mt-1.5\">\n 为配置设置一个易于识别的名称\n </p>\n </div>\n\n <div className=\"space-y-2.5\">\n <Label className=\"text-sm font-semibold text-gray-700 flex items-center gap-2\">\n <Link2 className=\"h-4 w-4 text-blue-500\" />\n API 地址\n </Label>\n <div className=\"relative\">\n <Input\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n placeholder=\"https://api.example.com/v1/chat\"\n className=\"w-full h-10 pl-4 pr-4 text-sm transition-all duration-200\"\n />\n </div>\n <p className=\"text-xs text-gray-500 mt-1.5\">\n 请输入完整的 API 端点地址\n </p>\n </div>\n\n <div className=\"space-y-2.5\">\n <Label className=\"text-sm font-semibold text-gray-700 flex items-center gap-2\">\n <Key className=\"h-4 w-4 text-amber-500\" />\n Authorization Token\n </Label>\n <div className=\"relative\">\n <Input\n type=\"password\"\n value={token}\n onChange={(e) => setToken(e.target.value)}\n placeholder=\"token...\"\n className=\"w-full h-10 pl-4 pr-4 text-sm transition-all duration-200 font-mono\"\n />\n </div>\n <p className=\"text-xs text-gray-500 mt-1.5\">请输入您的认证令牌</p>\n </div>\n </div>\n )}\n </div>\n\n {/* 模态框底部 */}\n {currentView === \"form\" && (\n <DialogFooter className=\"px-6 py-4 border-t border-gray-100 bg-gradient-to-r from-gray-50/30 to-white flex justify-end gap-3\">\n <DialogClose asChild>\n <Button\n variant=\"outline\"\n onClick={handleCancel}\n disabled={isLoading}\n className=\"min-w-[80px] h-9 border-gray-200 hover:bg-gray-50 hover:border-gray-300 transition-all\"\n >\n 取消\n </Button>\n </DialogClose>\n <Button\n onClick={handleAddConfig}\n disabled={isLoading || !name.trim() || !url.trim() || !token.trim()}\n className=\"min-w-[80px] h-9 bg-gradient-to-r from-blue-600 to-blue-700 hover:from-blue-700 hover:to-blue-800 text-white shadow-md hover:shadow-lg transition-all duration-200 disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n {isLoading ? (\n <>\n <Loader2 className=\"h-4 w-4 mr-2 animate-spin\" />\n {editingId ? \"保存中...\" : \"添加中...\"}\n </>\n ) : (\n editingId ? \"保存\" : \"添加\"\n )}\n </Button>\n </DialogFooter>\n )}\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default SwitchAgentModal;\n"],"names":["_jsxs","_jsx","Edit2","_Fragment","Loader2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/SwitchAgentModal/index.tsx"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n DialogTrigger,\n DialogClose,\n} from \"@/components/ui/dialog\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@radix-ui/react-label\";\n// import Switch from \"@radix-ui/react-switch\";\nimport { X, Settings, Link2, Key, Loader2, Plus, Trash2, Check, Edit2 } from \"lucide-react\";\nimport { useChatkitRef } from \"@/contexts/ChatkitContext\";\nimport useThread from \"@/hooks/useThread\";\nimport { AgentStorageManager } from \"@/utils/agentStorage\";\nimport { AgentConfig } from \"@/types/agent\";\ninterface SwitchAgentModalProps {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n onConfirm: (input1: string, input2: string) => void;\n onCancel?: () => void;\n}\n\nexport const SwitchAgentModal = (): JSX.Element => {\n const [configs, setConfigs] = useState<AgentConfig[]>([]);\n const [currentView, setCurrentView] = useState<\"table\" | \"form\">(\"table\");\n const [editingId, setEditingId] = useState<string | null>(null);\n const [name, setName] = useState(\"\");\n const [url, setUrl] = useState(\"\");\n const [token, setToken] = useState(\"\");\n const [isLoading, setIsLoading] = useState(false);\n const ref = useChatkitRef();\n const { threadList } = useThread();\n const [isOpen, setIsOpen] = useState(false);\n\n // 加载配置并初始化当前配置\n useEffect(() => {\n const loadConfigs = () => {\n const loadedConfigs = AgentStorageManager.getConfigs();\n setConfigs(loadedConfigs);\n \n // 加载当前配置到 requestOptions\n const currentConfig = AgentStorageManager.getCurrentConfig();\n if (currentConfig && ref.current) {\n const requestOptions = ref.current.getRequestOptions();\n ref.current.setRequestOptions({\n ...(requestOptions || {}),\n api: currentConfig.url,\n headers: {\n ...(requestOptions?.headers || {}),\n Authorization: `Bearer ${currentConfig.apiKey}`,\n },\n });\n }\n };\n loadConfigs();\n }, [ref]);\n\n const handleAddConfig = async () => {\n if (!name.trim() || !url.trim() || !token.trim()) return;\n\n try {\n setIsLoading(true);\n \n if (editingId) {\n // 编辑模式:更新现有配置\n const updatedConfig: AgentConfig = {\n id: editingId,\n name: name.trim(),\n url: url.trim(),\n apiKey: token.trim(),\n createdAt: configs.find(c => c.id === editingId)?.createdAt || Date.now(),\n };\n \n const updatedConfigs = configs.map(c => c.id === editingId ? updatedConfig : c);\n setConfigs(updatedConfigs);\n \n // 更新 localStorage\n const allConfigs = AgentStorageManager.getConfigs();\n const currentConfigId = AgentStorageManager.getCurrentConfig()?.id;\n const newAllConfigs = allConfigs.map(c => c.id === editingId ? updatedConfig : c);\n localStorage.setItem('chatkit_agent_configs', JSON.stringify({\n configs: newAllConfigs,\n currentConfigId,\n }));\n } else {\n // 添加模式:创建新配置\n const newConfig = AgentStorageManager.saveConfig({\n name: name.trim(),\n url: url.trim(),\n apiKey: token.trim(),\n });\n setConfigs(prev => [...prev, newConfig]);\n }\n\n setCurrentView(\"table\");\n setEditingId(null);\n setName(\"\");\n setUrl(\"\");\n setToken(\"\");\n } catch (error) {\n console.error(\"保存配置失败:\", error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleEditConfig = (config: AgentConfig) => {\n setEditingId(config.id);\n setName(config.name);\n setUrl(config.url);\n setToken(config.apiKey);\n setCurrentView(\"form\");\n };\n\n const handleSelectConfig = async (config: AgentConfig) => {\n try {\n setIsLoading(true);\n AgentStorageManager.setCurrentConfig(config.id);\n\n const requestOptions = ref.current?.getRequestOptions();\n ref.current?.setRequestOptions({\n ...(requestOptions || {}),\n api: config.url,\n headers: {\n ...(requestOptions?.headers || {}),\n Authorization: `Bearer ${config.apiKey}`,\n },\n });\n\n for (const thread of threadList) {\n ref.current?.updateThread(thread.id, {\n metadata: {\n ...(thread.metadata || {}),\n [\"sessionInited\"]: false,\n },\n });\n }\n ref.current?.clearCurrentThread();\n // 成功后关闭弹窗\n setIsOpen(false);\n } catch (error) {\n console.error(\"选择配置失败:\", error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleDeleteConfig = (id: string) => {\n AgentStorageManager.deleteConfig(id);\n setConfigs(prev => prev.filter(config => config.id !== id));\n };\n\n const handleCancel = () => {\n // 关闭弹窗并重置\n setIsOpen(false);\n setCurrentView(\"table\");\n setEditingId(null);\n setName(\"\");\n setUrl(\"\");\n setToken(\"\");\n };\n\n return (\n <Dialog open={isOpen} onOpenChange={setIsOpen}>\n <DialogTrigger asChild>\n <Button\n size=\"icon-sm\"\n variant=\"ghost\"\n className=\"hover:bg-accent/50 transition-colors size-[unset]\"\n >\n <Settings className=\"size-[16px]\" />\n </Button>\n </DialogTrigger>\n <DialogContent\n showCloseButton={false}\n className=\"sm:max-w-lg bg-white/95 backdrop-blur-sm border border-gray-200/80 rounded-xl shadow-2xl overflow-hidden\"\n >\n {/* 模态框头部 */}\n <DialogHeader className=\"px-6 py-5 border-b border-gray-100 bg-gradient-to-r from-gray-50/50 to-white\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <DialogTitle className=\"text-xl font-semibold text-gray-900 tracking-tight\">\n {currentView === \"table\" ? \"Agent 配置管理\" : (editingId ? \"编辑 Agent 配置\" : \"添加 Agent 配置\")}\n </DialogTitle>\n </div>\n <div className=\"flex items-center gap-2\">\n {currentView === \"table\" && (\n <Button\n size=\"sm\"\n onClick={() => {\n setEditingId(null);\n setName(\"\");\n setUrl(\"\");\n setToken(\"\");\n setCurrentView(\"form\");\n }}\n className=\"bg-gradient-to-r from-blue-600 to-blue-700 hover:from-blue-700 hover:to-blue-800 text-white shadow-md hover:shadow-lg transition-all duration-200\"\n >\n <Plus className=\"h-4 w-4 mr-2\" />\n 添加配置\n </Button>\n )}\n {currentView === \"form\" && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => setCurrentView(\"table\")}\n className=\"border-gray-200 hover:bg-gray-50 hover:border-gray-300 transition-all\"\n >\n 返回列表\n </Button>\n )}\n <DialogClose asChild>\n <button\n className=\"text-gray-400 hover:text-gray-600 transition-all p-1.5 rounded-lg hover:bg-gray-100 active:scale-95\"\n aria-label=\"关闭\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n </DialogClose>\n </div>\n </div>\n </DialogHeader>\n\n {/* 模态框内容 */}\n <div className=\"px-6 py-6 bg-white min-h-[400px] max-h-[600px]\">\n {currentView === \"table\" ? (\n /* 配置表格 */\n <div className=\"space-y-4 h-full\">\n {configs.length === 0 ? (\n <div className=\"text-center py-16 text-gray-500\">\n <div className=\"inline-flex items-center justify-center w-16 h-16 rounded-full bg-gradient-to-br from-blue-50 to-blue-100 mb-4\">\n <Settings className=\"h-8 w-8 text-blue-500\" />\n </div>\n <p className=\"text-base font-medium text-gray-700 mb-1\">暂无配置</p>\n <p className=\"text-sm text-gray-500\">点击右上角\"添加配置\"按钮开始</p>\n </div>\n ) : (\n <div className=\"space-y-3 overflow-y-auto max-h-[500px] pr-2 scrollbar-thin scrollbar-thumb-gray-300 scrollbar-track-gray-100\">\n {configs.map((config, index) => (\n <div\n key={config.id}\n className=\"group relative bg-gradient-to-r from-gray-50/50 to-white border border-gray-200 rounded-xl p-4 hover:shadow-md hover:border-blue-200 transition-all duration-200\"\n >\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <div className=\"flex items-center justify-center w-8 h-8 rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 text-white text-sm font-semibold shadow-sm\">\n {config.name.charAt(0).toUpperCase()}\n </div>\n <h3 className=\"text-base font-semibold text-gray-900\">{config.name}</h3>\n </div>\n \n <div className=\"space-y-1.5 pl-10\">\n <div className=\"flex items-start gap-2 max-w-[240px]\">\n <Link2 className=\"h-4 w-4 text-gray-400 mt-0.5 flex-shrink-0\" />\n <p className=\"text-sm text-gray-600 font-mono truncate flex-1 min-w-0\" title={config.url}>\n {config.url}\n </p>\n </div>\n <div className=\"flex items-center gap-2 max-w-[240px]\">\n <Key className=\"h-4 w-4 text-gray-400 flex-shrink-0\" />\n <p className=\"text-sm text-gray-500 font-mono truncate flex-1 min-w-0\" title={config.apiKey}>\n {config.apiKey.substring(0, 20)}...\n </p>\n </div>\n </div>\n\n <div className=\"flex gap-2 pl-10 pt-1\">\n <Button\n size=\"sm\"\n onClick={() => handleSelectConfig(config)}\n disabled={isLoading}\n className=\"h-9 px-4 bg-gradient-to-r from-blue-600 to-blue-700 hover:from-blue-700 hover:to-blue-800 text-white shadow-sm hover:shadow-md transition-all duration-200\"\n >\n <Check className=\"h-4 w-4 mr-1.5\" />\n 选择\n </Button>\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => handleEditConfig(config)}\n disabled={isLoading}\n className=\"h-9 px-4 border-gray-300 text-gray-700 hover:bg-gray-50 hover:border-gray-400 transition-all duration-200\"\n >\n <Edit2 className=\"h-4 w-4 mr-1.5\" />\n 编辑\n </Button>\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => handleDeleteConfig(config.id)}\n disabled={isLoading}\n className=\"h-9 px-4 border-red-200 text-red-600 hover:bg-red-50 hover:border-red-300 transition-all duration-200\"\n >\n <Trash2 className=\"h-4 w-4 mr-1.5\" />\n 删除\n </Button>\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n ) : (\n /* 添加配置表单 */\n <div className=\"space-y-5\">\n <div className=\"space-y-2.5\">\n <Label className=\"text-sm font-semibold text-gray-700 flex items-center gap-2\">\n <Settings className=\"h-4 w-4 text-blue-500\" />\n 配置名称\n </Label>\n <div className=\"relative\">\n <Input\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"我的配置\"\n className=\"w-full h-10 pl-4 pr-4 text-sm transition-all duration-200\"\n />\n </div>\n <p className=\"text-xs text-gray-500 mt-1.5\">\n 为配置设置一个易于识别的名称\n </p>\n </div>\n\n <div className=\"space-y-2.5\">\n <Label className=\"text-sm font-semibold text-gray-700 flex items-center gap-2\">\n <Link2 className=\"h-4 w-4 text-blue-500\" />\n API 地址\n </Label>\n <div className=\"relative\">\n <Input\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n placeholder=\"https://api.example.com/v1/chat\"\n className=\"w-full h-10 pl-4 pr-4 text-sm transition-all duration-200\"\n />\n </div>\n <p className=\"text-xs text-gray-500 mt-1.5\">\n 请输入完整的 API 端点地址\n </p>\n </div>\n\n <div className=\"space-y-2.5\">\n <Label className=\"text-sm font-semibold text-gray-700 flex items-center gap-2\">\n <Key className=\"h-4 w-4 text-amber-500\" />\n Authorization Token\n </Label>\n <div className=\"relative\">\n <Input\n type=\"password\"\n value={token}\n onChange={(e) => setToken(e.target.value)}\n placeholder=\"token...\"\n className=\"w-full h-10 pl-4 pr-4 text-sm transition-all duration-200 font-mono\"\n />\n </div>\n <p className=\"text-xs text-gray-500 mt-1.5\">请输入您的认证令牌</p>\n </div>\n </div>\n )}\n </div>\n\n {/* 模态框底部 */}\n {currentView === \"form\" && (\n <DialogFooter className=\"px-6 py-4 border-t border-gray-100 bg-gradient-to-r from-gray-50/30 to-white flex justify-end gap-3\">\n <DialogClose asChild>\n <Button\n variant=\"outline\"\n onClick={handleCancel}\n disabled={isLoading}\n className=\"min-w-[80px] h-9 border-gray-200 hover:bg-gray-50 hover:border-gray-300 transition-all\"\n >\n 取消\n </Button>\n </DialogClose>\n <Button\n onClick={handleAddConfig}\n disabled={isLoading || !name.trim() || !url.trim() || !token.trim()}\n className=\"min-w-[80px] h-9 bg-gradient-to-r from-blue-600 to-blue-700 hover:from-blue-700 hover:to-blue-800 text-white shadow-md hover:shadow-lg transition-all duration-200 disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n {isLoading ? (\n <>\n <Loader2 className=\"h-4 w-4 mr-2 animate-spin\" />\n {editingId ? \"保存中...\" : \"添加中...\"}\n </>\n ) : (\n editingId ? \"保存\" : \"添加\"\n )}\n </Button>\n </DialogFooter>\n )}\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default SwitchAgentModal;\n"],"names":["_jsxs","_jsx","Edit2","_Fragment","Loader2"],"mappings":"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"}
|
|
@@ -67,9 +67,9 @@ const VoiceInput = () => {
|
|
|
67
67
|
setIsListening(false);
|
|
68
68
|
ref.current?.setInput(transcript);
|
|
69
69
|
};
|
|
70
|
-
return (jsxRuntime.jsx(tooltip.TooltipProvider, { children: jsxRuntime.jsxs(tooltip.Tooltip, { children: [jsxRuntime.jsx(tooltip.TooltipTrigger, { asChild: true, children: jsxRuntime.jsx(button.Button, { variant: isListening ? "destructive" : "ghost", size: "icon", onClick: isListening ? stopListening : startListening, disabled: !!error, className: `
|
|
70
|
+
return (jsxRuntime.jsx(tooltip.TooltipProvider, { children: jsxRuntime.jsxs(tooltip.Tooltip, { children: [jsxRuntime.jsx(tooltip.TooltipTrigger, { asChild: true, children: jsxRuntime.jsx(button.Button, { variant: isListening ? "destructive" : "ghost", size: "icon", onClick: isListening ? stopListening : startListening, disabled: !!error, className: `transition-all duration-200 size-[16px] ${isListening
|
|
71
71
|
? "bg-red-500 hover:bg-red-600 text-white animate-pulse w-8 h-8"
|
|
72
|
-
: ""}
|
|
72
|
+
: ""}`, children: isListening ? (jsxRuntime.jsx(micOff.default, { className: "size-[16px]" })) : (jsxRuntime.jsx(mic.default, { className: "size-[16px]" })) }) }), jsxRuntime.jsx(tooltip.TooltipContent, { children: jsxRuntime.jsx("p", { children: isListening ? "停止录音" : "语音输入" }) })] }) }));
|
|
73
73
|
};
|
|
74
74
|
|
|
75
75
|
module.exports = VoiceInput;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../src/components/VoiceInput/index.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { Mic, MicOff } from \"lucide-react\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport { useChatkitRef } from \"@/contexts/ChatkitContext\";\n\n// 定义语音识别相关类型\ninterface SpeechRecognitionEvent extends Event {\n results: SpeechRecognitionResultList;\n}\n\ninterface SpeechRecognitionResultList {\n [index: number]: SpeechRecognitionResult;\n length: number;\n}\n\ninterface SpeechRecognitionResult {\n [index: number]: SpeechRecognitionAlternative;\n isFinal: boolean;\n length: number;\n}\n\ninterface SpeechRecognitionAlternative {\n transcript: string;\n confidence: number;\n}\n\ninterface SpeechRecognition extends EventTarget {\n lang: string;\n interimResults: boolean;\n continuous: boolean;\n onresult: ((event: SpeechRecognitionEvent) => void) | null;\n onend: (() => void) | null;\n start: () => void;\n stop: () => void;\n}\n\nconst VoiceInput: React.FC = () => {\n const [transcript, setTranscript] = useState<string>(\"\");\n const [isListening, setIsListening] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n const recognitionRef = useRef<SpeechRecognition | null>(null);\n const ref = useChatkitRef();\n useEffect(() => {\n // 检查浏览器支持\n const SpeechRecognition =\n (window as any).SpeechRecognition ||\n (window as any).webkitSpeechRecognition;\n\n if (!SpeechRecognition) {\n setError(\"您的浏览器不支持语音识别功能,请使用最新版 Chrome 浏览器\");\n return;\n }\n\n // 初始化识别实例\n const recognition = new SpeechRecognition() as SpeechRecognition;\n recognition.lang = \"zh-CN\"; // 设置为中文识别\n recognition.interimResults = true; // 实时返回结果\n recognition.continuous = false; // 单次识别模式\n\n // 处理识别结果\n recognition.onresult = (event: SpeechRecognitionEvent) => {\n if (event.results.length > 0) {\n const currentResult = event.results[0][0].transcript;\n setTranscript(currentResult);\n ref.current?.setInput(currentResult);\n }\n };\n\n // 识别结束时重置状态\n recognition.onend = () => {\n setIsListening(false);\n };\n\n recognitionRef.current = recognition;\n\n // 清理函数\n return () => {\n recognition.stop();\n };\n }, []);\n\n const startListening = () => {\n if (!recognitionRef.current || isListening) return;\n\n try {\n setIsListening(true);\n setTranscript(\"\");\n recognitionRef.current.start();\n } catch (err) {\n setError(\"启动语音识别失败,请稍后重试\");\n setIsListening(false);\n console.error(\"语音识别启动错误:\", err);\n }\n };\n const stopListening = async () => {\n if (!recognitionRef.current || !isListening) return;\n await new Promise((resolve) => setTimeout(resolve, 1000));\n\n recognitionRef.current.stop();\n setIsListening(false);\n ref.current?.setInput(transcript);\n };\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant={isListening ? \"destructive\" : \"ghost\"}\n size=\"icon\"\n onClick={isListening ? stopListening : startListening}\n disabled={!!error}\n className={`
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/VoiceInput/index.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { Mic, MicOff } from \"lucide-react\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport { useChatkitRef } from \"@/contexts/ChatkitContext\";\n\n// 定义语音识别相关类型\ninterface SpeechRecognitionEvent extends Event {\n results: SpeechRecognitionResultList;\n}\n\ninterface SpeechRecognitionResultList {\n [index: number]: SpeechRecognitionResult;\n length: number;\n}\n\ninterface SpeechRecognitionResult {\n [index: number]: SpeechRecognitionAlternative;\n isFinal: boolean;\n length: number;\n}\n\ninterface SpeechRecognitionAlternative {\n transcript: string;\n confidence: number;\n}\n\ninterface SpeechRecognition extends EventTarget {\n lang: string;\n interimResults: boolean;\n continuous: boolean;\n onresult: ((event: SpeechRecognitionEvent) => void) | null;\n onend: (() => void) | null;\n start: () => void;\n stop: () => void;\n}\n\nconst VoiceInput: React.FC = () => {\n const [transcript, setTranscript] = useState<string>(\"\");\n const [isListening, setIsListening] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n const recognitionRef = useRef<SpeechRecognition | null>(null);\n const ref = useChatkitRef();\n useEffect(() => {\n // 检查浏览器支持\n const SpeechRecognition =\n (window as any).SpeechRecognition ||\n (window as any).webkitSpeechRecognition;\n\n if (!SpeechRecognition) {\n setError(\"您的浏览器不支持语音识别功能,请使用最新版 Chrome 浏览器\");\n return;\n }\n\n // 初始化识别实例\n const recognition = new SpeechRecognition() as SpeechRecognition;\n recognition.lang = \"zh-CN\"; // 设置为中文识别\n recognition.interimResults = true; // 实时返回结果\n recognition.continuous = false; // 单次识别模式\n\n // 处理识别结果\n recognition.onresult = (event: SpeechRecognitionEvent) => {\n if (event.results.length > 0) {\n const currentResult = event.results[0][0].transcript;\n setTranscript(currentResult);\n ref.current?.setInput(currentResult);\n }\n };\n\n // 识别结束时重置状态\n recognition.onend = () => {\n setIsListening(false);\n };\n\n recognitionRef.current = recognition;\n\n // 清理函数\n return () => {\n recognition.stop();\n };\n }, []);\n\n const startListening = () => {\n if (!recognitionRef.current || isListening) return;\n\n try {\n setIsListening(true);\n setTranscript(\"\");\n recognitionRef.current.start();\n } catch (err) {\n setError(\"启动语音识别失败,请稍后重试\");\n setIsListening(false);\n console.error(\"语音识别启动错误:\", err);\n }\n };\n const stopListening = async () => {\n if (!recognitionRef.current || !isListening) return;\n await new Promise((resolve) => setTimeout(resolve, 1000));\n\n recognitionRef.current.stop();\n setIsListening(false);\n ref.current?.setInput(transcript);\n };\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant={isListening ? \"destructive\" : \"ghost\"}\n size=\"icon\"\n onClick={isListening ? stopListening : startListening}\n disabled={!!error}\n className={`transition-all duration-200 size-[16px] ${\n isListening\n ? \"bg-red-500 hover:bg-red-600 text-white animate-pulse w-8 h-8\"\n : \"\"\n }`}\n >\n {isListening ? (\n <MicOff className=\"size-[16px]\" />\n ) : (\n <Mic className=\"size-[16px]\" />\n )}\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{isListening ? \"停止录音\" : \"语音输入\"}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n};\n\nexport default VoiceInput;\n"],"names":["useState","useRef","useChatkitRef","useEffect","_jsx","TooltipProvider","_jsxs","Tooltip","TooltipTrigger","Button","MicOff","Mic","TooltipContent"],"mappings":"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"}
|
|
@@ -65,9 +65,9 @@ const VoiceInput = () => {
|
|
|
65
65
|
setIsListening(false);
|
|
66
66
|
ref.current?.setInput(transcript);
|
|
67
67
|
};
|
|
68
|
-
return (jsx(TooltipProvider, { children: jsxs(Tooltip, { children: [jsx(TooltipTrigger, { asChild: true, children: jsx(Button, { variant: isListening ? "destructive" : "ghost", size: "icon", onClick: isListening ? stopListening : startListening, disabled: !!error, className: `
|
|
68
|
+
return (jsx(TooltipProvider, { children: jsxs(Tooltip, { children: [jsx(TooltipTrigger, { asChild: true, children: jsx(Button, { variant: isListening ? "destructive" : "ghost", size: "icon", onClick: isListening ? stopListening : startListening, disabled: !!error, className: `transition-all duration-200 size-[16px] ${isListening
|
|
69
69
|
? "bg-red-500 hover:bg-red-600 text-white animate-pulse w-8 h-8"
|
|
70
|
-
: ""}
|
|
70
|
+
: ""}`, children: isListening ? (jsx(MicOff, { className: "size-[16px]" })) : (jsx(Mic, { className: "size-[16px]" })) }) }), jsx(TooltipContent, { children: jsx("p", { children: isListening ? "停止录音" : "语音输入" }) })] }) }));
|
|
71
71
|
};
|
|
72
72
|
|
|
73
73
|
export { VoiceInput as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/VoiceInput/index.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { Mic, MicOff } from \"lucide-react\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport { useChatkitRef } from \"@/contexts/ChatkitContext\";\n\n// 定义语音识别相关类型\ninterface SpeechRecognitionEvent extends Event {\n results: SpeechRecognitionResultList;\n}\n\ninterface SpeechRecognitionResultList {\n [index: number]: SpeechRecognitionResult;\n length: number;\n}\n\ninterface SpeechRecognitionResult {\n [index: number]: SpeechRecognitionAlternative;\n isFinal: boolean;\n length: number;\n}\n\ninterface SpeechRecognitionAlternative {\n transcript: string;\n confidence: number;\n}\n\ninterface SpeechRecognition extends EventTarget {\n lang: string;\n interimResults: boolean;\n continuous: boolean;\n onresult: ((event: SpeechRecognitionEvent) => void) | null;\n onend: (() => void) | null;\n start: () => void;\n stop: () => void;\n}\n\nconst VoiceInput: React.FC = () => {\n const [transcript, setTranscript] = useState<string>(\"\");\n const [isListening, setIsListening] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n const recognitionRef = useRef<SpeechRecognition | null>(null);\n const ref = useChatkitRef();\n useEffect(() => {\n // 检查浏览器支持\n const SpeechRecognition =\n (window as any).SpeechRecognition ||\n (window as any).webkitSpeechRecognition;\n\n if (!SpeechRecognition) {\n setError(\"您的浏览器不支持语音识别功能,请使用最新版 Chrome 浏览器\");\n return;\n }\n\n // 初始化识别实例\n const recognition = new SpeechRecognition() as SpeechRecognition;\n recognition.lang = \"zh-CN\"; // 设置为中文识别\n recognition.interimResults = true; // 实时返回结果\n recognition.continuous = false; // 单次识别模式\n\n // 处理识别结果\n recognition.onresult = (event: SpeechRecognitionEvent) => {\n if (event.results.length > 0) {\n const currentResult = event.results[0][0].transcript;\n setTranscript(currentResult);\n ref.current?.setInput(currentResult);\n }\n };\n\n // 识别结束时重置状态\n recognition.onend = () => {\n setIsListening(false);\n };\n\n recognitionRef.current = recognition;\n\n // 清理函数\n return () => {\n recognition.stop();\n };\n }, []);\n\n const startListening = () => {\n if (!recognitionRef.current || isListening) return;\n\n try {\n setIsListening(true);\n setTranscript(\"\");\n recognitionRef.current.start();\n } catch (err) {\n setError(\"启动语音识别失败,请稍后重试\");\n setIsListening(false);\n console.error(\"语音识别启动错误:\", err);\n }\n };\n const stopListening = async () => {\n if (!recognitionRef.current || !isListening) return;\n await new Promise((resolve) => setTimeout(resolve, 1000));\n\n recognitionRef.current.stop();\n setIsListening(false);\n ref.current?.setInput(transcript);\n };\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant={isListening ? \"destructive\" : \"ghost\"}\n size=\"icon\"\n onClick={isListening ? stopListening : startListening}\n disabled={!!error}\n className={`
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/VoiceInput/index.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { Mic, MicOff } from \"lucide-react\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport { useChatkitRef } from \"@/contexts/ChatkitContext\";\n\n// 定义语音识别相关类型\ninterface SpeechRecognitionEvent extends Event {\n results: SpeechRecognitionResultList;\n}\n\ninterface SpeechRecognitionResultList {\n [index: number]: SpeechRecognitionResult;\n length: number;\n}\n\ninterface SpeechRecognitionResult {\n [index: number]: SpeechRecognitionAlternative;\n isFinal: boolean;\n length: number;\n}\n\ninterface SpeechRecognitionAlternative {\n transcript: string;\n confidence: number;\n}\n\ninterface SpeechRecognition extends EventTarget {\n lang: string;\n interimResults: boolean;\n continuous: boolean;\n onresult: ((event: SpeechRecognitionEvent) => void) | null;\n onend: (() => void) | null;\n start: () => void;\n stop: () => void;\n}\n\nconst VoiceInput: React.FC = () => {\n const [transcript, setTranscript] = useState<string>(\"\");\n const [isListening, setIsListening] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n const recognitionRef = useRef<SpeechRecognition | null>(null);\n const ref = useChatkitRef();\n useEffect(() => {\n // 检查浏览器支持\n const SpeechRecognition =\n (window as any).SpeechRecognition ||\n (window as any).webkitSpeechRecognition;\n\n if (!SpeechRecognition) {\n setError(\"您的浏览器不支持语音识别功能,请使用最新版 Chrome 浏览器\");\n return;\n }\n\n // 初始化识别实例\n const recognition = new SpeechRecognition() as SpeechRecognition;\n recognition.lang = \"zh-CN\"; // 设置为中文识别\n recognition.interimResults = true; // 实时返回结果\n recognition.continuous = false; // 单次识别模式\n\n // 处理识别结果\n recognition.onresult = (event: SpeechRecognitionEvent) => {\n if (event.results.length > 0) {\n const currentResult = event.results[0][0].transcript;\n setTranscript(currentResult);\n ref.current?.setInput(currentResult);\n }\n };\n\n // 识别结束时重置状态\n recognition.onend = () => {\n setIsListening(false);\n };\n\n recognitionRef.current = recognition;\n\n // 清理函数\n return () => {\n recognition.stop();\n };\n }, []);\n\n const startListening = () => {\n if (!recognitionRef.current || isListening) return;\n\n try {\n setIsListening(true);\n setTranscript(\"\");\n recognitionRef.current.start();\n } catch (err) {\n setError(\"启动语音识别失败,请稍后重试\");\n setIsListening(false);\n console.error(\"语音识别启动错误:\", err);\n }\n };\n const stopListening = async () => {\n if (!recognitionRef.current || !isListening) return;\n await new Promise((resolve) => setTimeout(resolve, 1000));\n\n recognitionRef.current.stop();\n setIsListening(false);\n ref.current?.setInput(transcript);\n };\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant={isListening ? \"destructive\" : \"ghost\"}\n size=\"icon\"\n onClick={isListening ? stopListening : startListening}\n disabled={!!error}\n className={`transition-all duration-200 size-[16px] ${\n isListening\n ? \"bg-red-500 hover:bg-red-600 text-white animate-pulse w-8 h-8\"\n : \"\"\n }`}\n >\n {isListening ? (\n <MicOff className=\"size-[16px]\" />\n ) : (\n <Mic className=\"size-[16px]\" />\n )}\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{isListening ? \"停止录音\" : \"语音输入\"}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n};\n\nexport default VoiceInput;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
@@ -98,7 +98,7 @@ const ComposerAttachments = () => {
|
|
|
98
98
|
return (jsxRuntime.jsx("div", { className: "aui-composer-attachments mb-2 flex w-full flex-row items-center gap-2 overflow-x-auto px-1.5 pt-0.5 pb-1 empty:hidden", children: jsxRuntime.jsx(ComposerAttachments$1.ComposerPrimitiveAttachments, { components: { Attachment: AttachmentUI } }) }));
|
|
99
99
|
};
|
|
100
100
|
const ComposerAddAttachment = () => {
|
|
101
|
-
return (jsxRuntime.jsx(ComposerAddAttachment$1.ComposerPrimitiveAddAttachment, { asChild: true, children: jsxRuntime.jsx("div", { className: "aui-composer-add-attachment size-[16px] p-0 rounded-full text-xs font-semibold hover:bg-muted-foreground/15 flex items-center", "aria-label": "Add Attachment", children: jsxRuntime.jsx(Attachment, { className: "aui-attachment-add-icon size-
|
|
101
|
+
return (jsxRuntime.jsx(ComposerAddAttachment$1.ComposerPrimitiveAddAttachment, { asChild: true, children: jsxRuntime.jsx("div", { className: "aui-composer-add-attachment size-[16px] p-0 rounded-full text-xs font-semibold hover:bg-muted-foreground/15 flex items-center", "aria-label": "Add Attachment", children: jsxRuntime.jsx(Attachment, { className: "aui-attachment-add-icon size-[16px] stroke-[2px]" }) }) }));
|
|
102
102
|
};
|
|
103
103
|
|
|
104
104
|
exports.ComposerAddAttachment = ComposerAddAttachment;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment.cjs","sources":["../../../src/components/assistant-ui/attachment.tsx"],"sourcesContent":["\"use client\";\n\nimport { PropsWithChildren, useEffect, useState, type FC } from \"react\";\nimport { XIcon, PlusIcon, FileText } from \"lucide-react\";\nimport {\n AttachmentPrimitive,\n ComposerPrimitive,\n MessagePrimitive,\n useAssistantState,\n useAssistantApi,\n} from \"@assistant-ui/react\";\nimport { useShallow } from \"zustand/shallow\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogTrigger,\n DialogDescription,\n} from \"@/components/ui/dialog\";\nimport { Avatar, AvatarImage, AvatarFallback } from \"@/components/ui/avatar\";\nimport { TooltipIconButton } from \"@/components/assistant-ui/tooltip-icon-button\";\nimport { cn } from \"@/lib/utils\";\nimport AttachmentIcon from \"@/assets/Attachment\";\n\nconst useFileSrc = (file: File | undefined) => {\n const [src, setSrc] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n if (!file) {\n setSrc(undefined);\n return;\n }\n\n const objectUrl = URL.createObjectURL(file);\n setSrc(objectUrl);\n\n return () => {\n URL.revokeObjectURL(objectUrl);\n };\n }, [file]);\n\n return src;\n};\n\nconst useAttachmentSrc = () => {\n const { file, src } = useAssistantState(\n useShallow(({ attachment }): { file?: File; src?: string } => {\n if (attachment.type !== \"image\") return {};\n if (attachment.file) return { file: attachment.file };\n const src = attachment.content?.filter((c) => c.type === \"image\")[0]\n ?.image;\n if (!src) return {};\n return { src };\n })\n );\n\n return useFileSrc(file) ?? src;\n};\n\ntype AttachmentPreviewProps = {\n src: string;\n};\n\nconst AttachmentPreview: FC<AttachmentPreviewProps> = ({ src }) => {\n const [isLoaded, setIsLoaded] = useState(false);\n return (\n <img\n src={src}\n alt=\"Image Preview\"\n width={1}\n height={1}\n className={\n isLoaded\n ? \"aui-attachment-preview-image-loaded block h-auto max-h-[80vh] w-auto max-w-full object-contain\"\n : \"aui-attachment-preview-image-loading hidden\"\n }\n onLoadCapture={() => setIsLoaded(true)}\n // priority={false}\n />\n );\n};\n\nconst AttachmentPreviewDialog: FC<{ children: React.ReactElement }> = ({\n children,\n}) => {\n const src = useAttachmentSrc();\n\n if (!src) return children;\n\n return (\n <Dialog>\n <DialogTrigger\n className=\"aui-attachment-preview-trigger cursor-pointer transition-colors hover:bg-accent/50\"\n asChild\n >\n {children}\n </DialogTrigger>\n <DialogContent className=\"aui-attachment-preview-dialog-content p-2 sm:max-w-3xl [&_svg]:text-background [&>button]:rounded-full [&>button]:bg-foreground/60 [&>button]:p-1 [&>button]:opacity-100 [&>button]:!ring-0 [&>button]:hover:[&_svg]:text-destructive\">\n <DialogTitle className=\"aui-sr-only sr-only\">\n Image Attachment Preview\n </DialogTitle>\n <DialogDescription className=\"sr-only\">\n Preview of attached image file\n </DialogDescription>\n <div className=\"aui-attachment-preview relative mx-auto flex max-h-[80dvh] w-full items-center justify-center overflow-hidden bg-background\">\n <AttachmentPreview src={src} />\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n\nconst AttachmentThumb: FC = () => {\n const isImage = useAssistantState(\n ({ attachment }) => attachment.type === \"image\"\n );\n const src = useAttachmentSrc();\n\n return (\n <Avatar className=\"aui-attachment-tile-avatar h-full w-full rounded-none\">\n <AvatarImage\n src={src}\n alt=\"Attachment preview\"\n className=\"aui-attachment-tile-image object-cover\"\n />\n <AvatarFallback delayMs={isImage ? 200 : 0}>\n <FileText className=\"aui-attachment-tile-fallback-icon size-8 text-muted-foreground\" />\n </AvatarFallback>\n </Avatar>\n );\n};\n\nconst AttachmentUI: FC = () => {\n const api = useAssistantApi();\n const isComposer = api.attachment.source === \"composer\";\n\n const isImage = useAssistantState(\n ({ attachment }) => attachment.type === \"image\"\n );\n const typeLabel = useAssistantState(({ attachment }) => {\n const type = attachment.type;\n switch (type) {\n case \"image\":\n return \"Image\";\n case \"document\":\n return \"Document\";\n case \"file\":\n return \"File\";\n default:\n const _exhaustiveCheck: never = type;\n throw new Error(`Unknown attachment type: ${_exhaustiveCheck}`);\n }\n });\n\n return (\n <Tooltip>\n <AttachmentPrimitive.Root\n className={cn(\n \"aui-attachment-root relative\",\n isImage &&\n \"aui-attachment-root-composer only:[&>#attachment-tile]:size-24\"\n )}\n >\n <AttachmentPreviewDialog>\n <TooltipTrigger asChild>\n <div\n className={cn(\n \"aui-attachment-tile size-14 cursor-pointer overflow-hidden rounded-[14px] border bg-muted transition-opacity hover:opacity-75\",\n isComposer &&\n \"aui-attachment-tile-composer border-foreground/20\"\n )}\n role=\"button\"\n id=\"attachment-tile\"\n aria-label={`${typeLabel} attachment`}\n >\n <AttachmentThumb />\n </div>\n </TooltipTrigger>\n </AttachmentPreviewDialog>\n {isComposer && <AttachmentRemove />}\n </AttachmentPrimitive.Root>\n <TooltipContent side=\"top\">\n <AttachmentPrimitive.Name />\n </TooltipContent>\n </Tooltip>\n );\n};\n\nconst AttachmentRemove: FC = () => {\n return (\n <AttachmentPrimitive.Remove asChild>\n <TooltipIconButton\n tooltip=\"Remove file\"\n className=\"aui-attachment-tile-remove absolute top-1.5 right-1.5 size-3.5 rounded-full bg-white text-muted-foreground opacity-100 shadow-sm hover:!bg-white [&_svg]:text-black hover:[&_svg]:text-destructive\"\n side=\"top\"\n >\n <XIcon className=\"aui-attachment-remove-icon size-3 dark:stroke-[2.5px]\" />\n </TooltipIconButton>\n </AttachmentPrimitive.Remove>\n );\n};\n\nexport const UserMessageAttachments: FC = () => {\n return (\n <div className=\"aui-user-message-attachments-end col-span-full col-start-1 row-start-1 flex w-full flex-row justify-end gap-2\">\n <MessagePrimitive.Attachments components={{ Attachment: AttachmentUI }} />\n </div>\n );\n};\n\nexport const ComposerAttachments: FC = () => {\n return (\n <div className=\"aui-composer-attachments mb-2 flex w-full flex-row items-center gap-2 overflow-x-auto px-1.5 pt-0.5 pb-1 empty:hidden\">\n <ComposerPrimitive.Attachments\n components={{ Attachment: AttachmentUI }}\n />\n </div>\n );\n};\n\nexport const ComposerAddAttachment: FC = () => {\n return (\n <ComposerPrimitive.AddAttachment asChild>\n <div\n className=\"aui-composer-add-attachment size-[16px] p-0 rounded-full text-xs font-semibold hover:bg-muted-foreground/15 flex items-center\"\n aria-label=\"Add Attachment\"\n >\n <AttachmentIcon className=\"aui-attachment-add-icon size-5 stroke-[2px]\" />\n </div>\n </ComposerPrimitive.AddAttachment>\n );\n};\n"],"names":["useState","useEffect","useAssistantState","useShallow","_jsx","_jsxs","Dialog","DialogTrigger","DialogContent","DialogTitle","DialogDescription","Avatar","AvatarImage","AvatarFallback","FileText","useAssistantApi","Tooltip","AttachmentPrimitive.Root","cn","TooltipTrigger","TooltipContent","AttachmentPrimitive.Name","AttachmentPrimitive.Remove","TooltipIconButton","XIcon","MessagePrimitive.Attachments","ComposerPrimitive.Attachments","ComposerPrimitive.AddAttachment","AttachmentIcon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"attachment.cjs","sources":["../../../src/components/assistant-ui/attachment.tsx"],"sourcesContent":["\"use client\";\n\nimport { PropsWithChildren, useEffect, useState, type FC } from \"react\";\nimport { XIcon, PlusIcon, FileText } from \"lucide-react\";\nimport {\n AttachmentPrimitive,\n ComposerPrimitive,\n MessagePrimitive,\n useAssistantState,\n useAssistantApi,\n} from \"@assistant-ui/react\";\nimport { useShallow } from \"zustand/shallow\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogTrigger,\n DialogDescription,\n} from \"@/components/ui/dialog\";\nimport { Avatar, AvatarImage, AvatarFallback } from \"@/components/ui/avatar\";\nimport { TooltipIconButton } from \"@/components/assistant-ui/tooltip-icon-button\";\nimport { cn } from \"@/lib/utils\";\nimport AttachmentIcon from \"@/assets/Attachment\";\n\nconst useFileSrc = (file: File | undefined) => {\n const [src, setSrc] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n if (!file) {\n setSrc(undefined);\n return;\n }\n\n const objectUrl = URL.createObjectURL(file);\n setSrc(objectUrl);\n\n return () => {\n URL.revokeObjectURL(objectUrl);\n };\n }, [file]);\n\n return src;\n};\n\nconst useAttachmentSrc = () => {\n const { file, src } = useAssistantState(\n useShallow(({ attachment }): { file?: File; src?: string } => {\n if (attachment.type !== \"image\") return {};\n if (attachment.file) return { file: attachment.file };\n const src = attachment.content?.filter((c) => c.type === \"image\")[0]\n ?.image;\n if (!src) return {};\n return { src };\n })\n );\n\n return useFileSrc(file) ?? src;\n};\n\ntype AttachmentPreviewProps = {\n src: string;\n};\n\nconst AttachmentPreview: FC<AttachmentPreviewProps> = ({ src }) => {\n const [isLoaded, setIsLoaded] = useState(false);\n return (\n <img\n src={src}\n alt=\"Image Preview\"\n width={1}\n height={1}\n className={\n isLoaded\n ? \"aui-attachment-preview-image-loaded block h-auto max-h-[80vh] w-auto max-w-full object-contain\"\n : \"aui-attachment-preview-image-loading hidden\"\n }\n onLoadCapture={() => setIsLoaded(true)}\n // priority={false}\n />\n );\n};\n\nconst AttachmentPreviewDialog: FC<{ children: React.ReactElement }> = ({\n children,\n}) => {\n const src = useAttachmentSrc();\n\n if (!src) return children;\n\n return (\n <Dialog>\n <DialogTrigger\n className=\"aui-attachment-preview-trigger cursor-pointer transition-colors hover:bg-accent/50\"\n asChild\n >\n {children}\n </DialogTrigger>\n <DialogContent className=\"aui-attachment-preview-dialog-content p-2 sm:max-w-3xl [&_svg]:text-background [&>button]:rounded-full [&>button]:bg-foreground/60 [&>button]:p-1 [&>button]:opacity-100 [&>button]:!ring-0 [&>button]:hover:[&_svg]:text-destructive\">\n <DialogTitle className=\"aui-sr-only sr-only\">\n Image Attachment Preview\n </DialogTitle>\n <DialogDescription className=\"sr-only\">\n Preview of attached image file\n </DialogDescription>\n <div className=\"aui-attachment-preview relative mx-auto flex max-h-[80dvh] w-full items-center justify-center overflow-hidden bg-background\">\n <AttachmentPreview src={src} />\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n\nconst AttachmentThumb: FC = () => {\n const isImage = useAssistantState(\n ({ attachment }) => attachment.type === \"image\"\n );\n const src = useAttachmentSrc();\n\n return (\n <Avatar className=\"aui-attachment-tile-avatar h-full w-full rounded-none\">\n <AvatarImage\n src={src}\n alt=\"Attachment preview\"\n className=\"aui-attachment-tile-image object-cover\"\n />\n <AvatarFallback delayMs={isImage ? 200 : 0}>\n <FileText className=\"aui-attachment-tile-fallback-icon size-8 text-muted-foreground\" />\n </AvatarFallback>\n </Avatar>\n );\n};\n\nconst AttachmentUI: FC = () => {\n const api = useAssistantApi();\n const isComposer = api.attachment.source === \"composer\";\n\n const isImage = useAssistantState(\n ({ attachment }) => attachment.type === \"image\"\n );\n const typeLabel = useAssistantState(({ attachment }) => {\n const type = attachment.type;\n switch (type) {\n case \"image\":\n return \"Image\";\n case \"document\":\n return \"Document\";\n case \"file\":\n return \"File\";\n default:\n const _exhaustiveCheck: never = type;\n throw new Error(`Unknown attachment type: ${_exhaustiveCheck}`);\n }\n });\n\n return (\n <Tooltip>\n <AttachmentPrimitive.Root\n className={cn(\n \"aui-attachment-root relative\",\n isImage &&\n \"aui-attachment-root-composer only:[&>#attachment-tile]:size-24\"\n )}\n >\n <AttachmentPreviewDialog>\n <TooltipTrigger asChild>\n <div\n className={cn(\n \"aui-attachment-tile size-14 cursor-pointer overflow-hidden rounded-[14px] border bg-muted transition-opacity hover:opacity-75\",\n isComposer &&\n \"aui-attachment-tile-composer border-foreground/20\"\n )}\n role=\"button\"\n id=\"attachment-tile\"\n aria-label={`${typeLabel} attachment`}\n >\n <AttachmentThumb />\n </div>\n </TooltipTrigger>\n </AttachmentPreviewDialog>\n {isComposer && <AttachmentRemove />}\n </AttachmentPrimitive.Root>\n <TooltipContent side=\"top\">\n <AttachmentPrimitive.Name />\n </TooltipContent>\n </Tooltip>\n );\n};\n\nconst AttachmentRemove: FC = () => {\n return (\n <AttachmentPrimitive.Remove asChild>\n <TooltipIconButton\n tooltip=\"Remove file\"\n className=\"aui-attachment-tile-remove absolute top-1.5 right-1.5 size-3.5 rounded-full bg-white text-muted-foreground opacity-100 shadow-sm hover:!bg-white [&_svg]:text-black hover:[&_svg]:text-destructive\"\n side=\"top\"\n >\n <XIcon className=\"aui-attachment-remove-icon size-3 dark:stroke-[2.5px]\" />\n </TooltipIconButton>\n </AttachmentPrimitive.Remove>\n );\n};\n\nexport const UserMessageAttachments: FC = () => {\n return (\n <div className=\"aui-user-message-attachments-end col-span-full col-start-1 row-start-1 flex w-full flex-row justify-end gap-2\">\n <MessagePrimitive.Attachments components={{ Attachment: AttachmentUI }} />\n </div>\n );\n};\n\nexport const ComposerAttachments: FC = () => {\n return (\n <div className=\"aui-composer-attachments mb-2 flex w-full flex-row items-center gap-2 overflow-x-auto px-1.5 pt-0.5 pb-1 empty:hidden\">\n <ComposerPrimitive.Attachments\n components={{ Attachment: AttachmentUI }}\n />\n </div>\n );\n};\n\nexport const ComposerAddAttachment: FC = () => {\n return (\n <ComposerPrimitive.AddAttachment asChild>\n <div\n className=\"aui-composer-add-attachment size-[16px] p-0 rounded-full text-xs font-semibold hover:bg-muted-foreground/15 flex items-center\"\n aria-label=\"Add Attachment\"\n >\n <AttachmentIcon className=\"aui-attachment-add-icon size-[16px] stroke-[2px]\" />\n </div>\n </ComposerPrimitive.AddAttachment>\n );\n};\n"],"names":["useState","useEffect","useAssistantState","useShallow","_jsx","_jsxs","Dialog","DialogTrigger","DialogContent","DialogTitle","DialogDescription","Avatar","AvatarImage","AvatarFallback","FileText","useAssistantApi","Tooltip","AttachmentPrimitive.Root","cn","TooltipTrigger","TooltipContent","AttachmentPrimitive.Name","AttachmentPrimitive.Remove","TooltipIconButton","XIcon","MessagePrimitive.Attachments","ComposerPrimitive.Attachments","ComposerPrimitive.AddAttachment","AttachmentIcon"],"mappings":"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"}
|
|
@@ -96,7 +96,7 @@ const ComposerAttachments = () => {
|
|
|
96
96
|
return (jsx("div", { className: "aui-composer-attachments mb-2 flex w-full flex-row items-center gap-2 overflow-x-auto px-1.5 pt-0.5 pb-1 empty:hidden", children: jsx(ComposerPrimitiveAttachments, { components: { Attachment: AttachmentUI } }) }));
|
|
97
97
|
};
|
|
98
98
|
const ComposerAddAttachment = () => {
|
|
99
|
-
return (jsx(ComposerPrimitiveAddAttachment, { asChild: true, children: jsx("div", { className: "aui-composer-add-attachment size-[16px] p-0 rounded-full text-xs font-semibold hover:bg-muted-foreground/15 flex items-center", "aria-label": "Add Attachment", children: jsx(AttachmentIcon, { className: "aui-attachment-add-icon size-
|
|
99
|
+
return (jsx(ComposerPrimitiveAddAttachment, { asChild: true, children: jsx("div", { className: "aui-composer-add-attachment size-[16px] p-0 rounded-full text-xs font-semibold hover:bg-muted-foreground/15 flex items-center", "aria-label": "Add Attachment", children: jsx(AttachmentIcon, { className: "aui-attachment-add-icon size-[16px] stroke-[2px]" }) }) }));
|
|
100
100
|
};
|
|
101
101
|
|
|
102
102
|
export { ComposerAddAttachment, ComposerAttachments, UserMessageAttachments };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment.js","sources":["../../../src/components/assistant-ui/attachment.tsx"],"sourcesContent":["\"use client\";\n\nimport { PropsWithChildren, useEffect, useState, type FC } from \"react\";\nimport { XIcon, PlusIcon, FileText } from \"lucide-react\";\nimport {\n AttachmentPrimitive,\n ComposerPrimitive,\n MessagePrimitive,\n useAssistantState,\n useAssistantApi,\n} from \"@assistant-ui/react\";\nimport { useShallow } from \"zustand/shallow\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogTrigger,\n DialogDescription,\n} from \"@/components/ui/dialog\";\nimport { Avatar, AvatarImage, AvatarFallback } from \"@/components/ui/avatar\";\nimport { TooltipIconButton } from \"@/components/assistant-ui/tooltip-icon-button\";\nimport { cn } from \"@/lib/utils\";\nimport AttachmentIcon from \"@/assets/Attachment\";\n\nconst useFileSrc = (file: File | undefined) => {\n const [src, setSrc] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n if (!file) {\n setSrc(undefined);\n return;\n }\n\n const objectUrl = URL.createObjectURL(file);\n setSrc(objectUrl);\n\n return () => {\n URL.revokeObjectURL(objectUrl);\n };\n }, [file]);\n\n return src;\n};\n\nconst useAttachmentSrc = () => {\n const { file, src } = useAssistantState(\n useShallow(({ attachment }): { file?: File; src?: string } => {\n if (attachment.type !== \"image\") return {};\n if (attachment.file) return { file: attachment.file };\n const src = attachment.content?.filter((c) => c.type === \"image\")[0]\n ?.image;\n if (!src) return {};\n return { src };\n })\n );\n\n return useFileSrc(file) ?? src;\n};\n\ntype AttachmentPreviewProps = {\n src: string;\n};\n\nconst AttachmentPreview: FC<AttachmentPreviewProps> = ({ src }) => {\n const [isLoaded, setIsLoaded] = useState(false);\n return (\n <img\n src={src}\n alt=\"Image Preview\"\n width={1}\n height={1}\n className={\n isLoaded\n ? \"aui-attachment-preview-image-loaded block h-auto max-h-[80vh] w-auto max-w-full object-contain\"\n : \"aui-attachment-preview-image-loading hidden\"\n }\n onLoadCapture={() => setIsLoaded(true)}\n // priority={false}\n />\n );\n};\n\nconst AttachmentPreviewDialog: FC<{ children: React.ReactElement }> = ({\n children,\n}) => {\n const src = useAttachmentSrc();\n\n if (!src) return children;\n\n return (\n <Dialog>\n <DialogTrigger\n className=\"aui-attachment-preview-trigger cursor-pointer transition-colors hover:bg-accent/50\"\n asChild\n >\n {children}\n </DialogTrigger>\n <DialogContent className=\"aui-attachment-preview-dialog-content p-2 sm:max-w-3xl [&_svg]:text-background [&>button]:rounded-full [&>button]:bg-foreground/60 [&>button]:p-1 [&>button]:opacity-100 [&>button]:!ring-0 [&>button]:hover:[&_svg]:text-destructive\">\n <DialogTitle className=\"aui-sr-only sr-only\">\n Image Attachment Preview\n </DialogTitle>\n <DialogDescription className=\"sr-only\">\n Preview of attached image file\n </DialogDescription>\n <div className=\"aui-attachment-preview relative mx-auto flex max-h-[80dvh] w-full items-center justify-center overflow-hidden bg-background\">\n <AttachmentPreview src={src} />\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n\nconst AttachmentThumb: FC = () => {\n const isImage = useAssistantState(\n ({ attachment }) => attachment.type === \"image\"\n );\n const src = useAttachmentSrc();\n\n return (\n <Avatar className=\"aui-attachment-tile-avatar h-full w-full rounded-none\">\n <AvatarImage\n src={src}\n alt=\"Attachment preview\"\n className=\"aui-attachment-tile-image object-cover\"\n />\n <AvatarFallback delayMs={isImage ? 200 : 0}>\n <FileText className=\"aui-attachment-tile-fallback-icon size-8 text-muted-foreground\" />\n </AvatarFallback>\n </Avatar>\n );\n};\n\nconst AttachmentUI: FC = () => {\n const api = useAssistantApi();\n const isComposer = api.attachment.source === \"composer\";\n\n const isImage = useAssistantState(\n ({ attachment }) => attachment.type === \"image\"\n );\n const typeLabel = useAssistantState(({ attachment }) => {\n const type = attachment.type;\n switch (type) {\n case \"image\":\n return \"Image\";\n case \"document\":\n return \"Document\";\n case \"file\":\n return \"File\";\n default:\n const _exhaustiveCheck: never = type;\n throw new Error(`Unknown attachment type: ${_exhaustiveCheck}`);\n }\n });\n\n return (\n <Tooltip>\n <AttachmentPrimitive.Root\n className={cn(\n \"aui-attachment-root relative\",\n isImage &&\n \"aui-attachment-root-composer only:[&>#attachment-tile]:size-24\"\n )}\n >\n <AttachmentPreviewDialog>\n <TooltipTrigger asChild>\n <div\n className={cn(\n \"aui-attachment-tile size-14 cursor-pointer overflow-hidden rounded-[14px] border bg-muted transition-opacity hover:opacity-75\",\n isComposer &&\n \"aui-attachment-tile-composer border-foreground/20\"\n )}\n role=\"button\"\n id=\"attachment-tile\"\n aria-label={`${typeLabel} attachment`}\n >\n <AttachmentThumb />\n </div>\n </TooltipTrigger>\n </AttachmentPreviewDialog>\n {isComposer && <AttachmentRemove />}\n </AttachmentPrimitive.Root>\n <TooltipContent side=\"top\">\n <AttachmentPrimitive.Name />\n </TooltipContent>\n </Tooltip>\n );\n};\n\nconst AttachmentRemove: FC = () => {\n return (\n <AttachmentPrimitive.Remove asChild>\n <TooltipIconButton\n tooltip=\"Remove file\"\n className=\"aui-attachment-tile-remove absolute top-1.5 right-1.5 size-3.5 rounded-full bg-white text-muted-foreground opacity-100 shadow-sm hover:!bg-white [&_svg]:text-black hover:[&_svg]:text-destructive\"\n side=\"top\"\n >\n <XIcon className=\"aui-attachment-remove-icon size-3 dark:stroke-[2.5px]\" />\n </TooltipIconButton>\n </AttachmentPrimitive.Remove>\n );\n};\n\nexport const UserMessageAttachments: FC = () => {\n return (\n <div className=\"aui-user-message-attachments-end col-span-full col-start-1 row-start-1 flex w-full flex-row justify-end gap-2\">\n <MessagePrimitive.Attachments components={{ Attachment: AttachmentUI }} />\n </div>\n );\n};\n\nexport const ComposerAttachments: FC = () => {\n return (\n <div className=\"aui-composer-attachments mb-2 flex w-full flex-row items-center gap-2 overflow-x-auto px-1.5 pt-0.5 pb-1 empty:hidden\">\n <ComposerPrimitive.Attachments\n components={{ Attachment: AttachmentUI }}\n />\n </div>\n );\n};\n\nexport const ComposerAddAttachment: FC = () => {\n return (\n <ComposerPrimitive.AddAttachment asChild>\n <div\n className=\"aui-composer-add-attachment size-[16px] p-0 rounded-full text-xs font-semibold hover:bg-muted-foreground/15 flex items-center\"\n aria-label=\"Add Attachment\"\n >\n <AttachmentIcon className=\"aui-attachment-add-icon size-5 stroke-[2px]\" />\n </div>\n </ComposerPrimitive.AddAttachment>\n );\n};\n"],"names":["_jsx","_jsxs","AttachmentPrimitive.Root","AttachmentPrimitive.Name","AttachmentPrimitive.Remove","XIcon","MessagePrimitive.Attachments","ComposerPrimitive.Attachments","ComposerPrimitive.AddAttachment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"attachment.js","sources":["../../../src/components/assistant-ui/attachment.tsx"],"sourcesContent":["\"use client\";\n\nimport { PropsWithChildren, useEffect, useState, type FC } from \"react\";\nimport { XIcon, PlusIcon, FileText } from \"lucide-react\";\nimport {\n AttachmentPrimitive,\n ComposerPrimitive,\n MessagePrimitive,\n useAssistantState,\n useAssistantApi,\n} from \"@assistant-ui/react\";\nimport { useShallow } from \"zustand/shallow\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogTrigger,\n DialogDescription,\n} from \"@/components/ui/dialog\";\nimport { Avatar, AvatarImage, AvatarFallback } from \"@/components/ui/avatar\";\nimport { TooltipIconButton } from \"@/components/assistant-ui/tooltip-icon-button\";\nimport { cn } from \"@/lib/utils\";\nimport AttachmentIcon from \"@/assets/Attachment\";\n\nconst useFileSrc = (file: File | undefined) => {\n const [src, setSrc] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n if (!file) {\n setSrc(undefined);\n return;\n }\n\n const objectUrl = URL.createObjectURL(file);\n setSrc(objectUrl);\n\n return () => {\n URL.revokeObjectURL(objectUrl);\n };\n }, [file]);\n\n return src;\n};\n\nconst useAttachmentSrc = () => {\n const { file, src } = useAssistantState(\n useShallow(({ attachment }): { file?: File; src?: string } => {\n if (attachment.type !== \"image\") return {};\n if (attachment.file) return { file: attachment.file };\n const src = attachment.content?.filter((c) => c.type === \"image\")[0]\n ?.image;\n if (!src) return {};\n return { src };\n })\n );\n\n return useFileSrc(file) ?? src;\n};\n\ntype AttachmentPreviewProps = {\n src: string;\n};\n\nconst AttachmentPreview: FC<AttachmentPreviewProps> = ({ src }) => {\n const [isLoaded, setIsLoaded] = useState(false);\n return (\n <img\n src={src}\n alt=\"Image Preview\"\n width={1}\n height={1}\n className={\n isLoaded\n ? \"aui-attachment-preview-image-loaded block h-auto max-h-[80vh] w-auto max-w-full object-contain\"\n : \"aui-attachment-preview-image-loading hidden\"\n }\n onLoadCapture={() => setIsLoaded(true)}\n // priority={false}\n />\n );\n};\n\nconst AttachmentPreviewDialog: FC<{ children: React.ReactElement }> = ({\n children,\n}) => {\n const src = useAttachmentSrc();\n\n if (!src) return children;\n\n return (\n <Dialog>\n <DialogTrigger\n className=\"aui-attachment-preview-trigger cursor-pointer transition-colors hover:bg-accent/50\"\n asChild\n >\n {children}\n </DialogTrigger>\n <DialogContent className=\"aui-attachment-preview-dialog-content p-2 sm:max-w-3xl [&_svg]:text-background [&>button]:rounded-full [&>button]:bg-foreground/60 [&>button]:p-1 [&>button]:opacity-100 [&>button]:!ring-0 [&>button]:hover:[&_svg]:text-destructive\">\n <DialogTitle className=\"aui-sr-only sr-only\">\n Image Attachment Preview\n </DialogTitle>\n <DialogDescription className=\"sr-only\">\n Preview of attached image file\n </DialogDescription>\n <div className=\"aui-attachment-preview relative mx-auto flex max-h-[80dvh] w-full items-center justify-center overflow-hidden bg-background\">\n <AttachmentPreview src={src} />\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n\nconst AttachmentThumb: FC = () => {\n const isImage = useAssistantState(\n ({ attachment }) => attachment.type === \"image\"\n );\n const src = useAttachmentSrc();\n\n return (\n <Avatar className=\"aui-attachment-tile-avatar h-full w-full rounded-none\">\n <AvatarImage\n src={src}\n alt=\"Attachment preview\"\n className=\"aui-attachment-tile-image object-cover\"\n />\n <AvatarFallback delayMs={isImage ? 200 : 0}>\n <FileText className=\"aui-attachment-tile-fallback-icon size-8 text-muted-foreground\" />\n </AvatarFallback>\n </Avatar>\n );\n};\n\nconst AttachmentUI: FC = () => {\n const api = useAssistantApi();\n const isComposer = api.attachment.source === \"composer\";\n\n const isImage = useAssistantState(\n ({ attachment }) => attachment.type === \"image\"\n );\n const typeLabel = useAssistantState(({ attachment }) => {\n const type = attachment.type;\n switch (type) {\n case \"image\":\n return \"Image\";\n case \"document\":\n return \"Document\";\n case \"file\":\n return \"File\";\n default:\n const _exhaustiveCheck: never = type;\n throw new Error(`Unknown attachment type: ${_exhaustiveCheck}`);\n }\n });\n\n return (\n <Tooltip>\n <AttachmentPrimitive.Root\n className={cn(\n \"aui-attachment-root relative\",\n isImage &&\n \"aui-attachment-root-composer only:[&>#attachment-tile]:size-24\"\n )}\n >\n <AttachmentPreviewDialog>\n <TooltipTrigger asChild>\n <div\n className={cn(\n \"aui-attachment-tile size-14 cursor-pointer overflow-hidden rounded-[14px] border bg-muted transition-opacity hover:opacity-75\",\n isComposer &&\n \"aui-attachment-tile-composer border-foreground/20\"\n )}\n role=\"button\"\n id=\"attachment-tile\"\n aria-label={`${typeLabel} attachment`}\n >\n <AttachmentThumb />\n </div>\n </TooltipTrigger>\n </AttachmentPreviewDialog>\n {isComposer && <AttachmentRemove />}\n </AttachmentPrimitive.Root>\n <TooltipContent side=\"top\">\n <AttachmentPrimitive.Name />\n </TooltipContent>\n </Tooltip>\n );\n};\n\nconst AttachmentRemove: FC = () => {\n return (\n <AttachmentPrimitive.Remove asChild>\n <TooltipIconButton\n tooltip=\"Remove file\"\n className=\"aui-attachment-tile-remove absolute top-1.5 right-1.5 size-3.5 rounded-full bg-white text-muted-foreground opacity-100 shadow-sm hover:!bg-white [&_svg]:text-black hover:[&_svg]:text-destructive\"\n side=\"top\"\n >\n <XIcon className=\"aui-attachment-remove-icon size-3 dark:stroke-[2.5px]\" />\n </TooltipIconButton>\n </AttachmentPrimitive.Remove>\n );\n};\n\nexport const UserMessageAttachments: FC = () => {\n return (\n <div className=\"aui-user-message-attachments-end col-span-full col-start-1 row-start-1 flex w-full flex-row justify-end gap-2\">\n <MessagePrimitive.Attachments components={{ Attachment: AttachmentUI }} />\n </div>\n );\n};\n\nexport const ComposerAttachments: FC = () => {\n return (\n <div className=\"aui-composer-attachments mb-2 flex w-full flex-row items-center gap-2 overflow-x-auto px-1.5 pt-0.5 pb-1 empty:hidden\">\n <ComposerPrimitive.Attachments\n components={{ Attachment: AttachmentUI }}\n />\n </div>\n );\n};\n\nexport const ComposerAddAttachment: FC = () => {\n return (\n <ComposerPrimitive.AddAttachment asChild>\n <div\n className=\"aui-composer-add-attachment size-[16px] p-0 rounded-full text-xs font-semibold hover:bg-muted-foreground/15 flex items-center\"\n aria-label=\"Add Attachment\"\n >\n <AttachmentIcon className=\"aui-attachment-add-icon size-[16px] stroke-[2px]\" />\n </div>\n </ComposerPrimitive.AddAttachment>\n );\n};\n"],"names":["_jsx","_jsxs","AttachmentPrimitive.Root","AttachmentPrimitive.Name","AttachmentPrimitive.Remove","XIcon","MessagePrimitive.Attachments","ComposerPrimitive.Attachments","ComposerPrimitive.AddAttachment"],"mappings":"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"}
|
package/dist/index.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
.chatkit-wrapper *,.chatkit-wrapper :after,.chatkit-wrapper :before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.chatkit-wrapper ::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }
|
|
2
|
-
/* ! tailwindcss v3.4.18 | MIT License | https://tailwindcss.com */.chatkit-wrapper *,.chatkit-wrapper :after,.chatkit-wrapper :before{border:0 solid #e5e7eb;box-sizing:border-box}.chatkit-wrapper :after,.chatkit-wrapper :before{--tw-content:""}.chatkit-wrapper,.chatkit-wrapper :host{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}.chatkit-wrapper{line-height:inherit;margin:0}.chatkit-wrapper hr{border-top-width:1px;color:inherit;height:0}.chatkit-wrapper abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.chatkit-wrapper h1,.chatkit-wrapper h2,.chatkit-wrapper h3,.chatkit-wrapper h4,.chatkit-wrapper h5,.chatkit-wrapper h6{font-size:inherit;font-weight:inherit}.chatkit-wrapper a{color:inherit;text-decoration:inherit}.chatkit-wrapper b,.chatkit-wrapper strong{font-weight:bolder}.chatkit-wrapper code,.chatkit-wrapper kbd,.chatkit-wrapper pre,.chatkit-wrapper samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}.chatkit-wrapper small{font-size:80%}.chatkit-wrapper sub,.chatkit-wrapper sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.chatkit-wrapper sub{bottom:-.25em}.chatkit-wrapper sup{top:-.5em}.chatkit-wrapper table{border-collapse:collapse;border-color:inherit;text-indent:0}.chatkit-wrapper button,.chatkit-wrapper input,.chatkit-wrapper optgroup,.chatkit-wrapper select,.chatkit-wrapper textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}.chatkit-wrapper button,.chatkit-wrapper select{text-transform:none}.chatkit-wrapper button,.chatkit-wrapper input:where([type=button]),.chatkit-wrapper input:where([type=reset]),.chatkit-wrapper input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}.chatkit-wrapper :-moz-focusring{outline:auto}.chatkit-wrapper :-moz-ui-invalid{box-shadow:none}.chatkit-wrapper progress{vertical-align:baseline}.chatkit-wrapper ::-webkit-inner-spin-button,.chatkit-wrapper ::-webkit-outer-spin-button{height:auto}.chatkit-wrapper [type=search]{-webkit-appearance:textfield;outline-offset:-2px}.chatkit-wrapper ::-webkit-search-decoration{-webkit-appearance:none}.chatkit-wrapper ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.chatkit-wrapper summary{display:list-item}.chatkit-wrapper blockquote,.chatkit-wrapper dd,.chatkit-wrapper dl,.chatkit-wrapper figure,.chatkit-wrapper h1,.chatkit-wrapper h2,.chatkit-wrapper h3,.chatkit-wrapper h4,.chatkit-wrapper h5,.chatkit-wrapper h6,.chatkit-wrapper hr,.chatkit-wrapper p,.chatkit-wrapper pre{margin:0}.chatkit-wrapper fieldset{margin:0;padding:0}.chatkit-wrapper legend{padding:0}.chatkit-wrapper menu,.chatkit-wrapper ol,.chatkit-wrapper ul{list-style:none;margin:0;padding:0}.chatkit-wrapper dialog{padding:0}.chatkit-wrapper textarea{resize:vertical}.chatkit-wrapper input::-moz-placeholder,.chatkit-wrapper textarea::-moz-placeholder{color:#9ca3af;opacity:1}.chatkit-wrapper input::placeholder,.chatkit-wrapper textarea::placeholder{color:#9ca3af;opacity:1}.chatkit-wrapper [role=button],.chatkit-wrapper button{cursor:pointer}.chatkit-wrapper :disabled{cursor:default}.chatkit-wrapper audio,.chatkit-wrapper canvas,.chatkit-wrapper embed,.chatkit-wrapper iframe,.chatkit-wrapper img,.chatkit-wrapper object,.chatkit-wrapper svg,.chatkit-wrapper video{display:block;vertical-align:middle}.chatkit-wrapper img,.chatkit-wrapper video{height:auto;max-width:100%}.chatkit-wrapper [hidden]:where(:not([hidden=until-found])){display:none}.chatkit-wrapper .container{width:100%}@media (min-width:640px){.chatkit-wrapper .container{max-width:640px}}@media (min-width:768px){.chatkit-wrapper .container{max-width:768px}}@media (min-width:1024px){.chatkit-wrapper .container{max-width:1024px}}@media (min-width:1280px){.chatkit-wrapper .container{max-width:1280px}}@media (min-width:1536px){.chatkit-wrapper .container{max-width:1536px}}.chatkit-wrapper .sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.chatkit-wrapper .pointer-events-none{pointer-events:none}.chatkit-wrapper .pointer-events-auto{pointer-events:auto}.chatkit-wrapper .invisible{visibility:hidden}.chatkit-wrapper .collapse{visibility:collapse}.chatkit-wrapper .static{position:static}.chatkit-wrapper .fixed{position:fixed}.chatkit-wrapper .absolute{position:absolute}.chatkit-wrapper .relative{position:relative}.chatkit-wrapper .sticky{position:sticky}.chatkit-wrapper .inset-0{inset:0}.chatkit-wrapper .inset-x-0{left:0;right:0}.chatkit-wrapper .inset-y-0{bottom:0;top:0}.chatkit-wrapper .-top-12{top:-3rem}.chatkit-wrapper .bottom-0{bottom:0}.chatkit-wrapper .left-0{left:0}.chatkit-wrapper .left-\[50\%\]{left:50%}.chatkit-wrapper .right-0{right:0}.chatkit-wrapper .right-1{right:.25rem}.chatkit-wrapper .right-1\.5{right:.375rem}.chatkit-wrapper .right-2{right:.5rem}.chatkit-wrapper .right-3{right:.75rem}.chatkit-wrapper .right-4{right:1rem}.chatkit-wrapper .top-0{top:0}.chatkit-wrapper .top-1\.5{top:.375rem}.chatkit-wrapper .top-2{top:.5rem}.chatkit-wrapper .top-3\.5{top:.875rem}.chatkit-wrapper .top-4{top:1rem}.chatkit-wrapper .top-\[50\%\]{top:50%}.chatkit-wrapper .z-0{z-index:0}.chatkit-wrapper .z-10{z-index:10}.chatkit-wrapper .z-20{z-index:20}.chatkit-wrapper .z-50{z-index:50}.chatkit-wrapper .z-\[100\]{z-index:100}.chatkit-wrapper .col-span-full{grid-column:1/-1}.chatkit-wrapper .col-start-1{grid-column-start:1}.chatkit-wrapper .col-start-2{grid-column-start:2}.chatkit-wrapper .col-start-3{grid-column-start:3}.chatkit-wrapper .row-start-1{grid-row-start:1}.chatkit-wrapper .row-start-2{grid-row-start:2}.chatkit-wrapper .row-start-3{grid-row-start:3}.chatkit-wrapper .m-0{margin:0}.chatkit-wrapper .m-\[4px\]{margin:4px}.chatkit-wrapper .-mx-2{margin-left:-.5rem;margin-right:-.5rem}.chatkit-wrapper .mx-2{margin-left:.5rem;margin-right:.5rem}.chatkit-wrapper .mx-3{margin-left:.75rem;margin-right:.75rem}.chatkit-wrapper .mx-3\.5{margin-left:.875rem;margin-right:.875rem}.chatkit-wrapper .mx-auto{margin-left:auto;margin-right:auto}.chatkit-wrapper .my-2{margin-bottom:.5rem;margin-top:.5rem}.chatkit-wrapper .my-4{margin-bottom:1rem;margin-top:1rem}.chatkit-wrapper .my-5{margin-bottom:1.25rem;margin-top:1.25rem}.chatkit-wrapper .-ml-1{margin-left:-.25rem}.chatkit-wrapper .-ml-2{margin-left:-.5rem}.chatkit-wrapper .-mr-1{margin-right:-.25rem}.chatkit-wrapper .mb-1{margin-bottom:.25rem}.chatkit-wrapper .mb-2{margin-bottom:.5rem}.chatkit-wrapper .mb-3{margin-bottom:.75rem}.chatkit-wrapper .mb-4{margin-bottom:1rem}.chatkit-wrapper .mb-5{margin-bottom:1.25rem}.chatkit-wrapper .mb-6{margin-bottom:1.5rem}.chatkit-wrapper .mb-8{margin-bottom:2rem}.chatkit-wrapper .mb-\[4px\]{margin-bottom:4px}.chatkit-wrapper .ml-2{margin-left:.5rem}.chatkit-wrapper .ml-3{margin-left:.75rem}.chatkit-wrapper .ml-6{margin-left:1.5rem}.chatkit-wrapper .ml-\[24px\]{margin-left:24px}.chatkit-wrapper .ml-auto{margin-left:auto}.chatkit-wrapper .mr-1{margin-right:.25rem}.chatkit-wrapper .mr-1\.5{margin-right:.375rem}.chatkit-wrapper .mr-2{margin-right:.5rem}.chatkit-wrapper .mr-3{margin-right:.75rem}.chatkit-wrapper .mr-4{margin-right:1rem}.chatkit-wrapper .mr-6{margin-right:1.5rem}.chatkit-wrapper .mt-0\.5{margin-top:.125rem}.chatkit-wrapper .mt-1{margin-top:.25rem}.chatkit-wrapper .mt-1\.5{margin-top:.375rem}.chatkit-wrapper .mt-2{margin-top:.5rem}.chatkit-wrapper .mt-4{margin-top:1rem}.chatkit-wrapper .mt-5{margin-top:1.25rem}.chatkit-wrapper .mt-6{margin-top:1.5rem}.chatkit-wrapper .mt-8{margin-top:2rem}.chatkit-wrapper .mt-\[8px\]{margin-top:8px}.chatkit-wrapper .mt-auto{margin-top:auto}.chatkit-wrapper .line-clamp-1{-webkit-line-clamp:1}.chatkit-wrapper .line-clamp-1,.chatkit-wrapper .line-clamp-2{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.chatkit-wrapper .line-clamp-2{-webkit-line-clamp:2}.chatkit-wrapper .block{display:block}.chatkit-wrapper .inline-block{display:inline-block}.chatkit-wrapper .flex{display:flex}.chatkit-wrapper .inline-flex{display:inline-flex}.chatkit-wrapper .table{display:table}.chatkit-wrapper .grid{display:grid}.chatkit-wrapper .\!contents{display:contents!important}.chatkit-wrapper .contents{display:contents}.chatkit-wrapper .hidden{display:none}.chatkit-wrapper .aspect-square{aspect-ratio:1/1}.chatkit-wrapper .size-10{height:2.5rem;width:2.5rem}.chatkit-wrapper .size-14{height:3.5rem;width:3.5rem}.chatkit-wrapper .size-2\.5{height:.625rem;width:.625rem}.chatkit-wrapper .size-3{height:.75rem;width:.75rem}.chatkit-wrapper .size-3\.5{height:.875rem;width:.875rem}.chatkit-wrapper .size-4{height:1rem;width:1rem}.chatkit-wrapper .size-5{height:1.25rem;width:1.25rem}.chatkit-wrapper .size-6{height:1.5rem;width:1.5rem}.chatkit-wrapper .size-7{height:1.75rem;width:1.75rem}.chatkit-wrapper .size-8{height:2rem;width:2rem}.chatkit-wrapper .size-9{height:2.25rem;width:2.25rem}.chatkit-wrapper .size-\[16px\]{height:16px;width:16px}.chatkit-wrapper .size-\[18px\]{height:18px;width:18px}.chatkit-wrapper .size-\[30px\]{height:30px;width:30px}.chatkit-wrapper .size-\[unset\]{height:unset;width:unset}.chatkit-wrapper .size-full{height:100%;width:100%}.chatkit-wrapper .h-10{height:2.5rem}.chatkit-wrapper .h-11{height:2.75rem}.chatkit-wrapper .h-12{height:3rem}.chatkit-wrapper .h-16{height:4rem}.chatkit-wrapper .h-2\.5{height:.625rem}.chatkit-wrapper .h-3{height:.75rem}.chatkit-wrapper .h-3\.5{height:.875rem}.chatkit-wrapper .h-4{height:1rem}.chatkit-wrapper .h-5{height:1.25rem}.chatkit-wrapper .h-7{height:1.75rem}.chatkit-wrapper .h-8{height:2rem}.chatkit-wrapper .h-9{height:2.25rem}.chatkit-wrapper .h-\[12px\]{height:12px}.chatkit-wrapper .h-\[180px\]{height:180px}.chatkit-wrapper .h-\[18px\]{height:18px}.chatkit-wrapper .h-\[22px\]{height:22px}.chatkit-wrapper .h-\[24px\]{height:24px}.chatkit-wrapper .h-\[28px\]{height:28px}.chatkit-wrapper .h-\[30px\]{height:30px}.chatkit-wrapper .h-\[38px\]{height:38px}.chatkit-wrapper .h-\[61px\]{height:61px}.chatkit-wrapper .h-\[calc\(100\%-65px\)\]{height:calc(100% - 65px)}.chatkit-wrapper .h-auto{height:auto}.chatkit-wrapper .h-fit{height:-moz-fit-content;height:fit-content}.chatkit-wrapper .h-full{height:100%}.chatkit-wrapper .h-svh{height:100svh}.chatkit-wrapper .max-h-32{max-height:8rem}.chatkit-wrapper .max-h-\[200px\]{max-height:200px}.chatkit-wrapper .max-h-\[500px\]{max-height:500px}.chatkit-wrapper .max-h-\[600px\]{max-height:600px}.chatkit-wrapper .max-h-\[80dvh\]{max-height:80dvh}.chatkit-wrapper .max-h-\[80vh\]{max-height:80vh}.chatkit-wrapper .max-h-\[calc\(90vh-140px\)\]{max-height:calc(90vh - 140px)}.chatkit-wrapper .max-h-screen{max-height:100vh}.chatkit-wrapper .min-h-0{min-height:0}.chatkit-wrapper .min-h-12{min-height:3rem}.chatkit-wrapper .min-h-\[24px\]{min-height:24px}.chatkit-wrapper .min-h-\[400px\]{min-height:400px}.chatkit-wrapper .min-h-\[60px\]{min-height:60px}.chatkit-wrapper .min-h-svh{min-height:100svh}.chatkit-wrapper .w-1{width:.25rem}.chatkit-wrapper .w-10{width:2.5rem}.chatkit-wrapper .w-16{width:4rem}.chatkit-wrapper .w-2\.5{width:.625rem}.chatkit-wrapper .w-3{width:.75rem}.chatkit-wrapper .w-3\.5{width:.875rem}.chatkit-wrapper .w-3\/4{width:75%}.chatkit-wrapper .w-4{width:1rem}.chatkit-wrapper .w-5{width:1.25rem}.chatkit-wrapper .w-5\/6{width:83.333333%}.chatkit-wrapper .w-7{width:1.75rem}.chatkit-wrapper .w-8{width:2rem}.chatkit-wrapper .w-\[160px\]{width:160px}.chatkit-wrapper .w-\[180px\]{width:180px}.chatkit-wrapper .w-\[18px\]{width:18px}.chatkit-wrapper .w-\[1px\]{width:1px}.chatkit-wrapper .w-\[240px\]{width:240px}.chatkit-wrapper .w-\[28px\]{width:28px}.chatkit-wrapper .w-\[30px\]{width:30px}.chatkit-wrapper .w-\[38px\]{width:38px}.chatkit-wrapper .w-auto{width:auto}.chatkit-wrapper .w-fit{width:-moz-fit-content;width:fit-content}.chatkit-wrapper .w-full{width:100%}.chatkit-wrapper .w-max{width:-moz-max-content;width:max-content}.chatkit-wrapper .min-w-0{min-width:0}.chatkit-wrapper .min-w-5{min-width:1.25rem}.chatkit-wrapper .min-w-\[80px\]{min-width:80px}.chatkit-wrapper .min-w-full{min-width:100%}.chatkit-wrapper .max-w-2xl{max-width:42rem}.chatkit-wrapper .max-w-3xl{max-width:48rem}.chatkit-wrapper .max-w-4xl{max-width:56rem}.chatkit-wrapper .max-w-\[240px\]{max-width:240px}.chatkit-wrapper .max-w-\[800px\]{max-width:800px}.chatkit-wrapper .max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.chatkit-wrapper .max-w-\[var\(--thread-max-width\)\]{max-width:var(--thread-max-width)}.chatkit-wrapper .max-w-full{max-width:100%}.chatkit-wrapper .flex-1{flex:1 1 0%}.chatkit-wrapper .flex-shrink-0,.chatkit-wrapper .shrink-0{flex-shrink:0}.chatkit-wrapper .flex-grow{flex-grow:1}.chatkit-wrapper .flex-grow-0{flex-grow:0}.chatkit-wrapper .grow{flex-grow:1}.chatkit-wrapper .border-separate{border-collapse:separate}.chatkit-wrapper .border-spacing-0{--tw-border-spacing-x:0px;--tw-border-spacing-y:0px;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y)}.chatkit-wrapper .-translate-x-1\/2{--tw-translate-x:-50%}.chatkit-wrapper .-translate-x-1\/2,.chatkit-wrapper .-translate-x-px{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chatkit-wrapper .-translate-x-px{--tw-translate-x:-1px}.chatkit-wrapper .translate-x-\[-50\%\]{--tw-translate-x:-50%}.chatkit-wrapper .translate-x-\[-50\%\],.chatkit-wrapper .translate-x-px{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chatkit-wrapper .translate-x-px{--tw-translate-x:1px}.chatkit-wrapper .translate-y-\[-50\%\]{--tw-translate-y:-50%}.chatkit-wrapper .translate-y-\[-50\%\],.chatkit-wrapper .translate-y-\[calc\(-50\%_-_2px\)\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chatkit-wrapper .translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y:calc(-50% - 2px)}.chatkit-wrapper .rotate-0{--tw-rotate:0deg}.chatkit-wrapper .rotate-0,.chatkit-wrapper .rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chatkit-wrapper .rotate-180{--tw-rotate:180deg}.chatkit-wrapper .rotate-45{--tw-rotate:45deg}.chatkit-wrapper .rotate-45,.chatkit-wrapper .rotate-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chatkit-wrapper .rotate-90{--tw-rotate:90deg}.chatkit-wrapper .transform-gpu{transform:translate3d(var(--tw-translate-x),var(--tw-translate-y),0) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.chatkit-wrapper .animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.chatkit-wrapper .animate-spin{animation:spin 1s linear infinite}.chatkit-wrapper .cursor-pointer{cursor:pointer}.chatkit-wrapper .select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.chatkit-wrapper .resize-none{resize:none}.chatkit-wrapper .scroll-m-20{scroll-margin:5rem}.chatkit-wrapper .list-decimal{list-style-type:decimal}.chatkit-wrapper .list-disc{list-style-type:disc}.chatkit-wrapper .auto-rows-auto{grid-auto-rows:auto}.chatkit-wrapper .grid-cols-\[minmax\(72px\2c 1fr\)_auto\]{grid-template-columns:minmax(72px,1fr) auto}.chatkit-wrapper .flex-row{flex-direction:row}.chatkit-wrapper .flex-col{flex-direction:column}.chatkit-wrapper .flex-col-reverse{flex-direction:column-reverse}.chatkit-wrapper .items-start{align-items:flex-start}.chatkit-wrapper .items-end{align-items:flex-end}.chatkit-wrapper .items-center{align-items:center}.chatkit-wrapper .items-stretch{align-items:stretch}.chatkit-wrapper .justify-start{justify-content:flex-start}.chatkit-wrapper .justify-end{justify-content:flex-end}.chatkit-wrapper .justify-center{justify-content:center}.chatkit-wrapper .justify-between{justify-content:space-between}.chatkit-wrapper .gap-0{gap:0}.chatkit-wrapper .gap-0\.5{gap:.125rem}.chatkit-wrapper .gap-1{gap:.25rem}.chatkit-wrapper .gap-1\.5{gap:.375rem}.chatkit-wrapper .gap-2{gap:.5rem}.chatkit-wrapper .gap-3{gap:.75rem}.chatkit-wrapper .gap-4{gap:1rem}.chatkit-wrapper .gap-\[10px\]{gap:10px}.chatkit-wrapper .gap-\[12px\]{gap:12px}.chatkit-wrapper .gap-\[80px\]{gap:80px}.chatkit-wrapper .gap-\[8px\]{gap:8px}.chatkit-wrapper .gap-y-2{row-gap:.5rem}.chatkit-wrapper .space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1rem*var(--tw-space-x-reverse))}.chatkit-wrapper .space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(0px*var(--tw-space-y-reverse));margin-top:calc(0px*(1 - var(--tw-space-y-reverse)))}.chatkit-wrapper .space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.chatkit-wrapper .space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.375rem*var(--tw-space-y-reverse));margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)))}.chatkit-wrapper .space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.chatkit-wrapper .space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.625rem*var(--tw-space-y-reverse));margin-top:calc(.625rem*(1 - var(--tw-space-y-reverse)))}.chatkit-wrapper .space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.chatkit-wrapper .space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.chatkit-wrapper .space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.25rem*var(--tw-space-y-reverse));margin-top:calc(1.25rem*(1 - var(--tw-space-y-reverse)))}.chatkit-wrapper .space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.chatkit-wrapper .divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.chatkit-wrapper .divide-gray-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(243 244 246/var(--tw-divide-opacity,1))}.chatkit-wrapper .self-end{align-self:flex-end}.chatkit-wrapper .self-center{align-self:center}.chatkit-wrapper .overflow-auto{overflow:auto}.chatkit-wrapper .overflow-hidden{overflow:hidden}.chatkit-wrapper .overflow-visible{overflow:visible}.chatkit-wrapper .overflow-x-auto{overflow-x:auto}.chatkit-wrapper .overflow-y-auto{overflow-y:auto}.chatkit-wrapper .overflow-y-scroll{overflow-y:scroll}.chatkit-wrapper .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chatkit-wrapper .whitespace-nowrap{white-space:nowrap}.chatkit-wrapper .whitespace-pre-wrap{white-space:pre-wrap}.chatkit-wrapper .text-balance{text-wrap:balance}.chatkit-wrapper .break-words{overflow-wrap:break-word}.chatkit-wrapper .break-all{word-break:break-all}.chatkit-wrapper .rounded{border-radius:.25rem}.chatkit-wrapper .rounded-2xl{border-radius:1rem}.chatkit-wrapper .rounded-\[10px\]{border-radius:10px}.chatkit-wrapper .rounded-\[14px\]{border-radius:14px}.chatkit-wrapper .rounded-\[1px\]{border-radius:1px}.chatkit-wrapper .rounded-\[2px\]{border-radius:2px}.chatkit-wrapper .rounded-\[4px\]{border-radius:4px}.chatkit-wrapper .rounded-\[68px\]{border-radius:68px}.chatkit-wrapper .rounded-\[8px\]{border-radius:8px}.chatkit-wrapper .rounded-full{border-radius:9999px}.chatkit-wrapper .rounded-lg{border-radius:.5rem}.chatkit-wrapper .rounded-md{border-radius:.375rem}.chatkit-wrapper .rounded-none{border-radius:0}.chatkit-wrapper .rounded-xl{border-radius:.75rem}.chatkit-wrapper .\!rounded-t-none{border-top-left-radius:0!important;border-top-right-radius:0!important}.chatkit-wrapper .rounded-b-lg{border-bottom-left-radius:.5rem;border-bottom-right-radius:.5rem}.chatkit-wrapper .rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.chatkit-wrapper .border{border-width:1px}.chatkit-wrapper .border-0{border-width:0}.chatkit-wrapper .border-2{border-width:2px}.chatkit-wrapper .border-\[1px\]{border-width:1px}.chatkit-wrapper .border-b{border-bottom-width:1px}.chatkit-wrapper .border-l{border-left-width:1px}.chatkit-wrapper .border-l-2{border-left-width:2px}.chatkit-wrapper .border-r{border-right-width:1px}.chatkit-wrapper .border-t{border-top-width:1px}.chatkit-wrapper .border-t-0{border-top-width:0}.chatkit-wrapper .border-solid{border-style:solid}.chatkit-wrapper .border-dashed{border-style:dashed}.chatkit-wrapper .border-none{border-style:none}.chatkit-wrapper .border-\[\#\#0000001a\]{border-color:##0000001a}.chatkit-wrapper .border-\[\#0000000A\]{border-color:#0000000a}.chatkit-wrapper .border-\[\#0000001A\]{border-color:#0000001a}.chatkit-wrapper .border-\[\#1664FF1A\]{border-color:#1664ff1a}.chatkit-wrapper .border-\[\#E5E7EB\]{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.chatkit-wrapper .border-\[\#EAEDF1\]{--tw-border-opacity:1;border-color:rgb(234 237 241/var(--tw-border-opacity,1))}.chatkit-wrapper .border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}.chatkit-wrapper .border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.chatkit-wrapper .border-gray-200\/80{border-color:rgba(229,231,235,.8)}.chatkit-wrapper .border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.chatkit-wrapper .border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.chatkit-wrapper .border-transparent{border-color:transparent}.chatkit-wrapper .bg-\[\#0000000A\]{background-color:#0000000a}.chatkit-wrapper .bg-\[\#1664FF\]{--tw-bg-opacity:1;background-color:rgb(22 100 255/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-\[\#DDE2E9\]{--tw-bg-opacity:1;background-color:rgb(221 226 233/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-\[\#E5E7EB\]{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-\[\#EBF1FF\]{--tw-bg-opacity:1;background-color:rgb(235 241 255/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-\[\#F3F7FF\]{--tw-bg-opacity:1;background-color:rgb(243 247 255/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-\[\#F6F8FA\]{--tw-bg-opacity:1;background-color:rgb(246 248 250/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-\[\#FAFBFC\]{--tw-bg-opacity:1;background-color:rgb(250 251 252/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-background{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-black\/50{background-color:rgba(0,0,0,.5)}.chatkit-wrapper .bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-gray-50\/50{background-color:rgba(249,250,251,.5)}.chatkit-wrapper .bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-transparent{background-color:transparent}.chatkit-wrapper .bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-white\/95{background-color:hsla(0,0%,100%,.95)}.chatkit-wrapper .bg-\[linear-gradient\(to_top\2c var\(--color-background\)\2c transparent\)\]{background-image:linear-gradient(to top,var(--color-background),transparent)}.chatkit-wrapper .bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.chatkit-wrapper .bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.chatkit-wrapper .bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.chatkit-wrapper .from-blue-50{--tw-gradient-from:#eff6ff var(--tw-gradient-from-position);--tw-gradient-to:rgba(239,246,255,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.chatkit-wrapper .from-blue-500{--tw-gradient-from:#3b82f6 var(--tw-gradient-from-position);--tw-gradient-to:rgba(59,130,246,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.chatkit-wrapper .from-blue-600{--tw-gradient-from:#2563eb var(--tw-gradient-from-position);--tw-gradient-to:rgba(37,99,235,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.chatkit-wrapper .from-gray-50\/30{--tw-gradient-from:rgba(249,250,251,.3) var(--tw-gradient-from-position);--tw-gradient-to:rgba(249,250,251,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.chatkit-wrapper .from-gray-50\/50{--tw-gradient-from:rgba(249,250,251,.5) var(--tw-gradient-from-position);--tw-gradient-to:rgba(249,250,251,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.chatkit-wrapper .from-red-500{--tw-gradient-from:#ef4444 var(--tw-gradient-from-position);--tw-gradient-to:rgba(239,68,68,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.chatkit-wrapper .to-blue-100{--tw-gradient-to:#dbeafe var(--tw-gradient-to-position)}.chatkit-wrapper .to-blue-600{--tw-gradient-to:#2563eb var(--tw-gradient-to-position)}.chatkit-wrapper .to-blue-700{--tw-gradient-to:#1d4ed8 var(--tw-gradient-to-position)}.chatkit-wrapper .to-purple-500{--tw-gradient-to:#a855f7 var(--tw-gradient-to-position)}.chatkit-wrapper .to-red-600{--tw-gradient-to:#dc2626 var(--tw-gradient-to-position)}.chatkit-wrapper .to-white{--tw-gradient-to:#fff var(--tw-gradient-to-position)}.chatkit-wrapper .fill-white{fill:#fff}.chatkit-wrapper .stroke-\[2px\]{stroke-width:2px}.chatkit-wrapper .object-contain{-o-object-fit:contain;object-fit:contain}.chatkit-wrapper .object-cover{-o-object-fit:cover;object-fit:cover}.chatkit-wrapper .p-0{padding:0}.chatkit-wrapper .p-1{padding:.25rem}.chatkit-wrapper .p-1\.5{padding:.375rem}.chatkit-wrapper .p-2{padding:.5rem}.chatkit-wrapper .p-3{padding:.75rem}.chatkit-wrapper .p-4{padding:1rem}.chatkit-wrapper .p-6{padding:1.5rem}.chatkit-wrapper .p-8{padding:2rem}.chatkit-wrapper .px-1{padding-left:.25rem;padding-right:.25rem}.chatkit-wrapper .px-1\.5{padding-left:.375rem;padding-right:.375rem}.chatkit-wrapper .px-2{padding-left:.5rem;padding-right:.5rem}.chatkit-wrapper .px-2\.5{padding-left:.625rem;padding-right:.625rem}.chatkit-wrapper .px-3{padding-left:.75rem;padding-right:.75rem}.chatkit-wrapper .px-4{padding-left:1rem;padding-right:1rem}.chatkit-wrapper .px-5{padding-left:1.25rem;padding-right:1.25rem}.chatkit-wrapper .px-6{padding-left:1.5rem;padding-right:1.5rem}.chatkit-wrapper .px-8{padding-left:2rem;padding-right:2rem}.chatkit-wrapper .px-\[15px\]{padding-left:15px;padding-right:15px}.chatkit-wrapper .px-\[6px\]{padding-left:6px;padding-right:6px}.chatkit-wrapper .py-0{padding-bottom:0;padding-top:0}.chatkit-wrapper .py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.chatkit-wrapper .py-1{padding-bottom:.25rem;padding-top:.25rem}.chatkit-wrapper .py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.chatkit-wrapper .py-10{padding-bottom:2.5rem;padding-top:2.5rem}.chatkit-wrapper .py-16{padding-bottom:4rem;padding-top:4rem}.chatkit-wrapper .py-2{padding-bottom:.5rem;padding-top:.5rem}.chatkit-wrapper .py-2\.5{padding-bottom:.625rem;padding-top:.625rem}.chatkit-wrapper .py-3{padding-bottom:.75rem;padding-top:.75rem}.chatkit-wrapper .py-4{padding-bottom:1rem;padding-top:1rem}.chatkit-wrapper .py-5{padding-bottom:1.25rem;padding-top:1.25rem}.chatkit-wrapper .py-6{padding-bottom:1.5rem;padding-top:1.5rem}.chatkit-wrapper .py-8{padding-bottom:2rem;padding-top:2rem}.chatkit-wrapper .py-\[10px\]{padding-bottom:10px;padding-top:10px}.chatkit-wrapper .py-\[12px\]{padding-bottom:12px;padding-top:12px}.chatkit-wrapper .py-\[6px\]{padding-bottom:6px;padding-top:6px}.chatkit-wrapper .py-\[8px\]{padding-bottom:8px;padding-top:8px}.chatkit-wrapper .pb-1{padding-bottom:.25rem}.chatkit-wrapper .pb-3{padding-bottom:.75rem}.chatkit-wrapper .pb-4{padding-bottom:1rem}.chatkit-wrapper .pb-6{padding-bottom:1.5rem}.chatkit-wrapper .pl-10{padding-left:2.5rem}.chatkit-wrapper .pl-4{padding-left:1rem}.chatkit-wrapper .pl-6{padding-left:1.5rem}.chatkit-wrapper .pl-\[14px\]{padding-left:14px}.chatkit-wrapper .pl-\[16px\]{padding-left:16px}.chatkit-wrapper .pl-\[8px\]{padding-left:8px}.chatkit-wrapper .pr-2{padding-right:.5rem}.chatkit-wrapper .pr-4{padding-right:1rem}.chatkit-wrapper .pr-8{padding-right:2rem}.chatkit-wrapper .pr-\[12px\]{padding-right:12px}.chatkit-wrapper .pt-0{padding-top:0}.chatkit-wrapper .pt-0\.5{padding-top:.125rem}.chatkit-wrapper .pt-1{padding-top:.25rem}.chatkit-wrapper .pt-2{padding-top:.5rem}.chatkit-wrapper .pt-3{padding-top:.75rem}.chatkit-wrapper .pt-4{padding-top:1rem}.chatkit-wrapper .pt-6{padding-top:1.5rem}.chatkit-wrapper .pt-\[8px\]{padding-top:8px}.chatkit-wrapper .text-left{text-align:left}.chatkit-wrapper .text-center{text-align:center}.chatkit-wrapper .text-start{text-align:start}.chatkit-wrapper .font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.chatkit-wrapper .text-2xl{font-size:1.5rem;line-height:2rem}.chatkit-wrapper .text-3xl{font-size:1.875rem;line-height:2.25rem}.chatkit-wrapper .text-4xl{font-size:2.25rem;line-height:2.5rem}.chatkit-wrapper .text-\[13px\]{font-size:13px}.chatkit-wrapper .text-\[16px\]{font-size:16px}.chatkit-wrapper .text-\[24px\]{font-size:24px}.chatkit-wrapper .text-base{font-size:1rem;line-height:1.5rem}.chatkit-wrapper .text-lg{font-size:1.125rem;line-height:1.75rem}.chatkit-wrapper .text-sm{font-size:.875rem;line-height:1.25rem}.chatkit-wrapper .text-xl{font-size:1.25rem;line-height:1.75rem}.chatkit-wrapper .text-xs{font-size:.75rem;line-height:1rem}.chatkit-wrapper .font-bold{font-weight:700}.chatkit-wrapper .font-extrabold{font-weight:800}.chatkit-wrapper .font-medium{font-weight:500}.chatkit-wrapper .font-normal{font-weight:400}.chatkit-wrapper .font-semibold{font-weight:600}.chatkit-wrapper .lowercase{text-transform:lowercase}.chatkit-wrapper .italic{font-style:italic}.chatkit-wrapper .tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.chatkit-wrapper .leading-7{line-height:1.75rem}.chatkit-wrapper .leading-\[100\%\]{line-height:100%}.chatkit-wrapper .leading-\[22px\]{line-height:22px}.chatkit-wrapper .leading-none{line-height:1}.chatkit-wrapper .leading-relaxed{line-height:1.625}.chatkit-wrapper .tracking-\[0\.3\%\]{letter-spacing:.3%}.chatkit-wrapper .tracking-tight{letter-spacing:-.025em}.chatkit-wrapper .text-\[\#0C0D0E\]{--tw-text-opacity:1;color:rgb(12 13 14/var(--tw-text-opacity,1))}.chatkit-wrapper .text-\[\#1664FF\]{--tw-text-opacity:1;color:rgb(22 100 255/var(--tw-text-opacity,1))}.chatkit-wrapper .text-\[\#1D2129\]{--tw-text-opacity:1;color:rgb(29 33 41/var(--tw-text-opacity,1))}.chatkit-wrapper .text-\[\#808388\]{--tw-text-opacity:1;color:rgb(128 131 136/var(--tw-text-opacity,1))}.chatkit-wrapper .text-\[\#86909C\]{--tw-text-opacity:1;color:rgb(134 144 156/var(--tw-text-opacity,1))}.chatkit-wrapper .text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.chatkit-wrapper .text-background{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.chatkit-wrapper .text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.chatkit-wrapper .text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.chatkit-wrapper .text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.chatkit-wrapper .text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.chatkit-wrapper .text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.chatkit-wrapper .text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.chatkit-wrapper .text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.chatkit-wrapper .text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.chatkit-wrapper .text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity,1))}.chatkit-wrapper .text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.chatkit-wrapper .text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.chatkit-wrapper .text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.chatkit-wrapper .underline{text-decoration-line:underline}.chatkit-wrapper .underline-offset-4{text-underline-offset:4px}.chatkit-wrapper .opacity-0{opacity:0}.chatkit-wrapper .opacity-100{opacity:1}.chatkit-wrapper .opacity-50{opacity:.5}.chatkit-wrapper .opacity-70{opacity:.7}.chatkit-wrapper .opacity-90{opacity:.9}.chatkit-wrapper .shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.chatkit-wrapper .shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored:0 0 0 1px var(--tw-shadow-color)}.chatkit-wrapper .shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\],.chatkit-wrapper .shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.chatkit-wrapper .shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.chatkit-wrapper .shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.chatkit-wrapper .shadow-md,.chatkit-wrapper .shadow-none{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.chatkit-wrapper .shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.chatkit-wrapper .shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.chatkit-wrapper .outline-none{outline:2px solid transparent;outline-offset:2px}.chatkit-wrapper .outline{outline-style:solid}.chatkit-wrapper .ring-offset-background{--tw-ring-offset-color:#fff}.chatkit-wrapper .filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.chatkit-wrapper .backdrop-blur-sm{--tw-backdrop-blur:blur(4px);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.chatkit-wrapper .transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.chatkit-wrapper .transition-\[color\2c box-shadow\]{transition-duration:.15s;transition-property:color,box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1)}.chatkit-wrapper .transition-\[left\2c right\2c width\]{transition-duration:.15s;transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1)}.chatkit-wrapper .transition-\[margin\2c opacity\]{transition-duration:.15s;transition-property:margin,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.chatkit-wrapper .transition-\[transform\2c opacity\]{transition-duration:.15s;transition-property:transform,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.chatkit-wrapper .transition-\[width\2c height\2c padding\]{transition-duration:.15s;transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1)}.chatkit-wrapper .transition-\[width\]{transition-duration:.15s;transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1)}.chatkit-wrapper .transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.chatkit-wrapper .transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.chatkit-wrapper .transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.chatkit-wrapper .transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.chatkit-wrapper .duration-150{transition-duration:.15s}.chatkit-wrapper .duration-200{transition-duration:.2s}.chatkit-wrapper .ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.chatkit-wrapper .ease-linear{transition-timing-function:linear}.chatkit-wrapper .ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.chatkit-wrapper .chatkit-wrapper{.chatkit-wrapper *,.chatkit-wrapper :after,.chatkit-wrapper :before{border:0 solid #e5e7eb;box-sizing:border-box}.chatkit-wrapper :after,.chatkit-wrapper :before{--tw-content:""}.chatkit-wrapper,.chatkit-wrapper :host{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}.chatkit-wrapper{line-height:inherit;margin:0}.chatkit-wrapper hr{border-top-width:1px;color:inherit;height:0}.chatkit-wrapper abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.chatkit-wrapper h1,.chatkit-wrapper h2,.chatkit-wrapper h3,.chatkit-wrapper h4,.chatkit-wrapper h5,.chatkit-wrapper h6{font-size:inherit;font-weight:inherit}.chatkit-wrapper a{color:inherit;text-decoration:inherit}.chatkit-wrapper b,.chatkit-wrapper strong{font-weight:bolder}.chatkit-wrapper code,.chatkit-wrapper kbd,.chatkit-wrapper pre,.chatkit-wrapper samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}.chatkit-wrapper small{font-size:80%}.chatkit-wrapper sub,.chatkit-wrapper sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.chatkit-wrapper sub{bottom:-.25em}.chatkit-wrapper sup{top:-.5em}.chatkit-wrapper table{border-collapse:collapse;border-color:inherit;text-indent:0}.chatkit-wrapper button,.chatkit-wrapper input,.chatkit-wrapper optgroup,.chatkit-wrapper select,.chatkit-wrapper textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}.chatkit-wrapper button,.chatkit-wrapper select{text-transform:none}.chatkit-wrapper button,.chatkit-wrapper input:where([type=button]),.chatkit-wrapper input:where([type=reset]),.chatkit-wrapper input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}.chatkit-wrapper :-moz-focusring{outline:auto}.chatkit-wrapper :-moz-ui-invalid{box-shadow:none}.chatkit-wrapper progress{vertical-align:baseline}.chatkit-wrapper ::-webkit-inner-spin-button,.chatkit-wrapper ::-webkit-outer-spin-button{height:auto}.chatkit-wrapper [type=search]{-webkit-appearance:textfield;outline-offset:-2px}.chatkit-wrapper ::-webkit-search-decoration{-webkit-appearance:none}.chatkit-wrapper ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.chatkit-wrapper summary{display:list-item}.chatkit-wrapper blockquote,.chatkit-wrapper dd,.chatkit-wrapper dl,.chatkit-wrapper figure,.chatkit-wrapper h1,.chatkit-wrapper h2,.chatkit-wrapper h3,.chatkit-wrapper h4,.chatkit-wrapper h5,.chatkit-wrapper h6,.chatkit-wrapper hr,.chatkit-wrapper p,.chatkit-wrapper pre{margin:0}.chatkit-wrapper fieldset{margin:0;padding:0}.chatkit-wrapper legend{padding:0}.chatkit-wrapper menu,.chatkit-wrapper ol,.chatkit-wrapper ul{list-style:none;margin:0;padding:0}.chatkit-wrapper dialog{padding:0}.chatkit-wrapper textarea{resize:vertical}.chatkit-wrapper input::-moz-placeholder,.chatkit-wrapper textarea::-moz-placeholder{color:#9ca3af;opacity:1}.chatkit-wrapper input::placeholder,.chatkit-wrapper textarea::placeholder{color:#9ca3af;opacity:1}.chatkit-wrapper [role=button],.chatkit-wrapper button{cursor:pointer}.chatkit-wrapper :disabled{cursor:default}.chatkit-wrapper audio,.chatkit-wrapper canvas,.chatkit-wrapper embed,.chatkit-wrapper iframe,.chatkit-wrapper img,.chatkit-wrapper object,.chatkit-wrapper svg,.chatkit-wrapper video{display:block;vertical-align:middle}.chatkit-wrapper img,.chatkit-wrapper video{height:auto;max-width:100%}.chatkit-wrapper [hidden]:where(:not([hidden=until-found])){display:none}}@keyframes bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-12px)}}.chatkit-wrapper .file\:inline-flex::file-selector-button{display:inline-flex}.chatkit-wrapper .file\:h-7::file-selector-button{height:1.75rem}.chatkit-wrapper .file\:border-0::file-selector-button{border-width:0}.chatkit-wrapper .file\:bg-transparent::file-selector-button{background-color:transparent}.chatkit-wrapper .file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.chatkit-wrapper .file\:font-medium::file-selector-button{font-weight:500}.chatkit-wrapper .after\:absolute:after{content:var(--tw-content);position:absolute}.chatkit-wrapper .after\:-inset-2:after{content:var(--tw-content);inset:-.5rem}.chatkit-wrapper .after\:inset-y-0:after{bottom:0;content:var(--tw-content);top:0}.chatkit-wrapper .after\:left-1\/2:after{content:var(--tw-content);left:50%}.chatkit-wrapper .after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.chatkit-wrapper .first\:mt-0:first-child{margin-top:0}.chatkit-wrapper .first\:mt-3:first-child{margin-top:.75rem}.chatkit-wrapper .first\:mt-4:first-child{margin-top:1rem}.chatkit-wrapper .first\:rounded-tl-lg:first-child{border-top-left-radius:.5rem}.chatkit-wrapper .first\:border-t:first-child{border-top-width:1px}.chatkit-wrapper .last\:mb-0:last-child{margin-bottom:0}.chatkit-wrapper .last\:mb-24:last-child{margin-bottom:6rem}.chatkit-wrapper .last\:mb-5:last-child{margin-bottom:1.25rem}.chatkit-wrapper .last\:rounded-tr-lg:last-child{border-top-right-radius:.5rem}.chatkit-wrapper .last\:border-r:last-child{border-right-width:1px}.chatkit-wrapper .empty\:hidden:empty{display:none}.chatkit-wrapper .focus-within\:ring-1:focus-within{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.chatkit-wrapper .hover\:visible:hover{visibility:visible}.chatkit-wrapper .hover\:scale-\[1\.02\]:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chatkit-wrapper .hover\:border-blue-200:hover{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.chatkit-wrapper .hover\:border-gray-300:hover{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.chatkit-wrapper .hover\:border-gray-400:hover{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity,1))}.chatkit-wrapper .hover\:border-red-300:hover{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity,1))}.chatkit-wrapper .hover\:\!bg-white:hover{--tw-bg-opacity:1!important;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))!important}.chatkit-wrapper .hover\:bg-\[rgba\(46\2c 50\2c 56\2c 0\.05\)\]:hover{background-color:rgba(46,50,56,.05)}.chatkit-wrapper .hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.chatkit-wrapper .hover\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.chatkit-wrapper .hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.chatkit-wrapper .hover\:bg-gray-50\/50:hover{background-color:rgba(249,250,251,.5)}.chatkit-wrapper .hover\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.chatkit-wrapper .hover\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.chatkit-wrapper .hover\:from-blue-600:hover{--tw-gradient-from:#2563eb var(--tw-gradient-from-position);--tw-gradient-to:rgba(37,99,235,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.chatkit-wrapper .hover\:from-blue-700:hover{--tw-gradient-from:#1d4ed8 var(--tw-gradient-from-position);--tw-gradient-to:rgba(29,78,216,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.chatkit-wrapper .hover\:from-red-600:hover{--tw-gradient-from:#dc2626 var(--tw-gradient-from-position);--tw-gradient-to:rgba(220,38,38,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.chatkit-wrapper .hover\:to-blue-700:hover{--tw-gradient-to:#1d4ed8 var(--tw-gradient-to-position)}.chatkit-wrapper .hover\:to-blue-800:hover{--tw-gradient-to:#1e40af var(--tw-gradient-to-position)}.chatkit-wrapper .hover\:to-red-700:hover{--tw-gradient-to:#b91c1c var(--tw-gradient-to-position)}.chatkit-wrapper .hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.chatkit-wrapper .hover\:text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.chatkit-wrapper .hover\:underline:hover{text-decoration-line:underline}.chatkit-wrapper .hover\:opacity-100:hover{opacity:1}.chatkit-wrapper .hover\:opacity-75:hover{opacity:.75}.chatkit-wrapper .hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored:0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.chatkit-wrapper .hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.chatkit-wrapper .hover\:shadow-lg:hover,.chatkit-wrapper .hover\:shadow-md:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.chatkit-wrapper .hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.chatkit-wrapper .focus\:border-blue-400:focus{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.chatkit-wrapper .focus\:opacity-100:focus{opacity:1}.chatkit-wrapper .focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.chatkit-wrapper .focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.chatkit-wrapper .focus\:ring-2:focus,.chatkit-wrapper .focus\:ring-4:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.chatkit-wrapper .focus\:ring-4:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.chatkit-wrapper .focus\:ring-blue-50:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(239 246 255/var(--tw-ring-opacity,1))}.chatkit-wrapper .focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.chatkit-wrapper .focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.chatkit-wrapper .focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.chatkit-wrapper .focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.chatkit-wrapper .focus-visible\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px}.chatkit-wrapper .active\:scale-95:active{--tw-scale-x:.95;--tw-scale-y:.95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chatkit-wrapper .disabled\:pointer-events-none:disabled{pointer-events:none}.chatkit-wrapper .disabled\:invisible:disabled{visibility:hidden}.chatkit-wrapper .disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.chatkit-wrapper .disabled\:from-gray-300:disabled{--tw-gradient-from:#d1d5db var(--tw-gradient-from-position);--tw-gradient-to:rgba(209,213,219,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.chatkit-wrapper .disabled\:to-gray-300:disabled{--tw-gradient-to:#d1d5db var(--tw-gradient-to-position)}.chatkit-wrapper .disabled\:opacity-50:disabled{opacity:.5}.chatkit-wrapper .group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100{opacity:1}.chatkit-wrapper .group:hover .group-hover\:visible{visibility:visible}.chatkit-wrapper .group:hover .group-hover\:translate-x-1{--tw-translate-x:0.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chatkit-wrapper .group:hover .group-hover\:text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.chatkit-wrapper .group:hover .group-hover\:underline{text-decoration-line:underline}.chatkit-wrapper .group:hover .group-hover\:opacity-100,.chatkit-wrapper .group\/menu-item:hover .group-hover\/menu-item\:opacity-100{opacity:1}.chatkit-wrapper .group.destructive .group-\[\.destructive\]\:text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.chatkit-wrapper .group.destructive .group-\[\.destructive\]\:hover\:text-red-50:hover{--tw-text-opacity:1;color:rgb(254 242 242/var(--tw-text-opacity,1))}.chatkit-wrapper .group.destructive .group-\[\.destructive\]\:focus\:ring-red-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(248 113 113/var(--tw-ring-opacity,1))}.chatkit-wrapper .group.destructive .group-\[\.destructive\]\:focus\:ring-offset-red-600:focus{--tw-ring-offset-color:#dc2626}.chatkit-wrapper .has-\[\>svg\]\:px-2\.5:has(>svg){padding-left:.625rem;padding-right:.625rem}.chatkit-wrapper .has-\[\>svg\]\:px-3:has(>svg){padding-left:.75rem;padding-right:.75rem}.chatkit-wrapper .has-\[\>svg\]\:px-4:has(>svg){padding-left:1rem;padding-right:1rem}.chatkit-wrapper .aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.chatkit-wrapper .aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.chatkit-wrapper .data-\[state\=closed\]\:pointer-events-none[data-state=closed]{pointer-events:none}.chatkit-wrapper .data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.chatkit-wrapper .data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.chatkit-wrapper .data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.chatkit-wrapper .data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.chatkit-wrapper .data-\[state\=closed\]\:w-\[160px\][data-state=closed]{width:160px}.chatkit-wrapper .data-\[state\=open\]\:w-full[data-state=open]{width:100%}.chatkit-wrapper .data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:0px}.chatkit-wrapper .data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel],.chatkit-wrapper .data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chatkit-wrapper .data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x:var(--radix-toast-swipe-end-x)}.chatkit-wrapper .data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chatkit-wrapper .data-\[state\=open\]\:border-b[data-state=open]{border-bottom-width:1px}.chatkit-wrapper .data-\[active\=true\]\:font-medium[data-active=true]{font-weight:500}.chatkit-wrapper .data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.chatkit-wrapper .data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}.chatkit-wrapper .data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.chatkit-wrapper .data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.chatkit-wrapper .group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width)*-1)}.chatkit-wrapper .group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width)*-1)}.chatkit-wrapper .group[data-side=left] .group-data-\[side\=left\]\:-right-4{right:-1rem}.chatkit-wrapper .group[data-side=right] .group-data-\[side\=right\]\:left-0{left:0}.chatkit-wrapper .group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.chatkit-wrapper .group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.chatkit-wrapper .group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\)\]{width:calc(var(--sidebar-width-icon) + (--spacing(4)))}.chatkit-wrapper .group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]{width:calc(var(--sidebar-width-icon) + (--spacing(4)) + 2px)}.chatkit-wrapper .group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0}.chatkit-wrapper .group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:translate-x-0{--tw-translate-x:0px}.chatkit-wrapper .group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:translate-x-0,.chatkit-wrapper .group[data-side=right] .group-data-\[side\=right\]\:rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chatkit-wrapper .group[data-side=right] .group-data-\[side\=right\]\:rotate-180{--tw-rotate:180deg}.chatkit-wrapper .group\/trigger[data-state=closed] .group-data-\[state\=closed\]\/trigger\:-rotate-90{--tw-rotate:-90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chatkit-wrapper .group\/trigger[data-state=open] .group-data-\[state\=open\]\/trigger\:rotate-0{--tw-rotate:0deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chatkit-wrapper .group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden{overflow:hidden}.chatkit-wrapper .group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:.5rem}.chatkit-wrapper .group[data-variant=floating] .group-data-\[variant\=floating\]\:border{border-width:1px}.chatkit-wrapper .group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.chatkit-wrapper .group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.chatkit-wrapper .group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.chatkit-wrapper .group[data-variant=floating] .group-data-\[variant\=floating\]\:shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.chatkit-wrapper .group\/collapsible-content[data-state=open] .group-data-\[state\=open\]\/collapsible-content\:delay-\[calc\(var\(--animation-duration\)\*0\.75\)\]{transition-delay:calc(var(--animation-duration)*.75)}.chatkit-wrapper .group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:left-full:after{content:var(--tw-content);left:100%}.chatkit-wrapper .peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:top-1\.5{top:.375rem}.chatkit-wrapper .peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:top-2\.5{top:.625rem}.chatkit-wrapper .peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:top-1{top:.25rem}@media (min-width:640px){.chatkit-wrapper .sm\:bottom-0{bottom:0}.chatkit-wrapper .sm\:right-0{right:0}.chatkit-wrapper .sm\:top-auto{top:auto}.chatkit-wrapper .sm\:flex{display:flex}.chatkit-wrapper .sm\:max-h-\[90vh\]{max-height:90vh}.chatkit-wrapper .sm\:max-w-3xl{max-width:48rem}.chatkit-wrapper .sm\:max-w-\[440px\]{max-width:440px}.chatkit-wrapper .sm\:max-w-\[480px\]{max-width:480px}.chatkit-wrapper .sm\:max-w-\[90vw\]{max-width:90vw}.chatkit-wrapper .sm\:max-w-lg{max-width:32rem}.chatkit-wrapper .sm\:max-w-sm{max-width:24rem}.chatkit-wrapper .sm\:flex-row{flex-direction:row}.chatkit-wrapper .sm\:flex-col{flex-direction:column}.chatkit-wrapper .sm\:justify-end{justify-content:flex-end}.chatkit-wrapper .sm\:text-left{text-align:left}}@media (min-width:768px){.chatkit-wrapper .md\:block{display:block}.chatkit-wrapper .md\:flex{display:flex}.chatkit-wrapper .md\:max-w-\[420px\]{max-width:420px}.chatkit-wrapper .md\:pb-6{padding-bottom:1.5rem}.chatkit-wrapper .md\:text-sm{font-size:.875rem;line-height:1.25rem}.chatkit-wrapper .md\:opacity-0{opacity:0}.chatkit-wrapper .md\:after\:hidden:after{content:var(--tw-content);display:none}.chatkit-wrapper .peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.chatkit-wrapper .peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.chatkit-wrapper .peer[data-variant=inset][data-state=collapsed]~.md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-2{margin-left:.5rem}.chatkit-wrapper .peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:.75rem}.chatkit-wrapper .peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}}@media (prefers-color-scheme:dark){.chatkit-wrapper .dark\:bg-background{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.chatkit-wrapper .dark\:stroke-\[2\.5px\]{stroke-width:2.5px}.chatkit-wrapper .dark\:text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.chatkit-wrapper .dark\:text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity,1))}}.chatkit-wrapper .\[\&\:last-child\>td\:first-child\]\:rounded-bl-lg:last-child>td:first-child{border-bottom-left-radius:.5rem}.chatkit-wrapper .\[\&\:last-child\>td\:last-child\]\:rounded-br-lg:last-child>td:last-child{border-bottom-right-radius:.5rem}.chatkit-wrapper .\[\&\:where\(\>\*\)\]\:col-start-2:where(>*){grid-column-start:2}.chatkit-wrapper .only\:\[\&\>\#attachment-tile\]\:size-24>#attachment-tile:only-child{height:6rem;width:6rem}.chatkit-wrapper .\[\&\>a\]\:text-xs>a{font-size:.75rem;line-height:1rem}.chatkit-wrapper .\[\&\>a\]\:no-underline>a{text-decoration-line:none}.chatkit-wrapper .\[\&\>button\]\:hidden>button{display:none}.chatkit-wrapper .\[\&\>button\]\:rounded-full>button{border-radius:9999px}.chatkit-wrapper .\[\&\>button\]\:p-1>button{padding:.25rem}.chatkit-wrapper .\[\&\>button\]\:opacity-100>button{opacity:1}.chatkit-wrapper .\[\&\>button\]\:\!ring-0>button{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important}.chatkit-wrapper .\[\&\>li\]\:mt-2>li{margin-top:.5rem}.chatkit-wrapper .\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chatkit-wrapper .\[\&\>span\]\:text-xs>span{font-size:.75rem;line-height:1rem}.chatkit-wrapper .\[\&\>svg\]\:size-4>svg{height:1rem;width:1rem}.chatkit-wrapper .\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.chatkit-wrapper .\[\&\[align\=center\]\]\:text-center[align=center]{text-align:center}.chatkit-wrapper .\[\&\[align\=right\]\]\:text-right[align=right]{text-align:right}.chatkit-wrapper .\[\&_p\]\:-mb-2 p{margin-bottom:-.5rem}.chatkit-wrapper .\[\&_pre\]\:overflow-x-auto pre{overflow-x:auto}.chatkit-wrapper .\[\&_pre\]\:rounded-b-lg pre{border-bottom-left-radius:.5rem;border-bottom-right-radius:.5rem}.chatkit-wrapper .\[\&_pre\]\:border pre{border-width:1px}.chatkit-wrapper .\[\&_pre\]\:p-4 pre{padding:1rem}.chatkit-wrapper .\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){height:1rem;width:1rem}.chatkit-wrapper .\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.chatkit-wrapper .\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.chatkit-wrapper .\[\&_svg\]\:text-background svg{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.chatkit-wrapper .\[\&_svg\]\:text-black svg{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.chatkit-wrapper [data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:-.5rem}.chatkit-wrapper [data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}.chatkit-wrapper [data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:-.5rem}.chatkit-wrapper [data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}@keyframes aui-pulse{50%{opacity:.5}}.chatkit-wrapper :where(.aui-md[data-status=running]):empty:after,.chatkit-wrapper :where(.aui-md[data-status=running])>:where(:is(ol,ul):last-child)>:where(li:last-child)>:where(:is(ol,ul):last-child)>:where(li:last-child)>:where(:is(ol,ul):last-child)>:where(li:last-child):after,.chatkit-wrapper :where(.aui-md[data-status=running])>:where(:is(ol,ul):last-child)>:where(li:last-child)>:where(:is(ol,ul):last-child)>:where(li:last-child:not(:has(*>li))):after,.chatkit-wrapper :where(.aui-md[data-status=running])>:where(:is(ol,ul):last-child)>:where(li:last-child:not(:has(*>li))):after,.chatkit-wrapper :where(.aui-md[data-status=running])>:where(:not(ol):not(ul):not(pre)):last-child:after,.chatkit-wrapper :where(.aui-md[data-status=running])>pre:last-child code:after{--aui-content:"\25cf";animation:aui-pulse 2s cubic-bezier(.4,0,.6,1) infinite;content:var(--aui-content);font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;margin-left:.25rem;margin-right:.25rem}.chatkit-wrapper .chatkit-md-text-p img,.chatkit-wrapper .chatkit-md-text-p video{max-width:600px}@keyframes aui-pulse-chatkit{50%{opacity:.5;transform:scale(.7)}}.chatkit-wrapper .aui-root :where(.aui-md[data-status=running]):empty:after,.chatkit-wrapper .aui-root :where(.aui-md[data-status=running])>:where(:is(ol,ul):last-child)>:where(li:last-child)>:where(:is(ol,ul):last-child)>:where(li:last-child)>:where(:is(ol,ul):last-child)>:where(li:last-child):after,.chatkit-wrapper .aui-root :where(.aui-md[data-status=running])>:where(:is(ol,ul):last-child)>:where(li:last-child)>:where(:is(ol,ul):last-child)>:where(li:last-child:not(:has(*>li))):after,.chatkit-wrapper .aui-root :where(.aui-md[data-status=running])>:where(:is(ol,ul):last-child)>:where(li:last-child:not(:has(*>li))):after,.chatkit-wrapper .aui-root :where(.aui-md[data-status=running])>:where(:not(ol):not(ul):not(pre)):last-child:after,.chatkit-wrapper .aui-root :where(.aui-md[data-status=running])>pre:last-child code:after{--aui-content:"\25cf";animation:aui-pulse-chatkit 1.5s cubic-bezier(.4,0,.6,1) infinite;content:var(--aui-content);display:inline-block;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;margin-left:.2rem;margin-right:.2rem}
|
|
2
|
+
/* ! tailwindcss v3.4.18 | MIT License | https://tailwindcss.com */.chatkit-wrapper *,.chatkit-wrapper :after,.chatkit-wrapper :before{border:0 solid #e5e7eb;box-sizing:border-box}.chatkit-wrapper :after,.chatkit-wrapper :before{--tw-content:""}.chatkit-wrapper,.chatkit-wrapper :host{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}.chatkit-wrapper{line-height:inherit;margin:0}.chatkit-wrapper hr{border-top-width:1px;color:inherit;height:0}.chatkit-wrapper abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.chatkit-wrapper h1,.chatkit-wrapper h2,.chatkit-wrapper h3,.chatkit-wrapper h4,.chatkit-wrapper h5,.chatkit-wrapper h6{font-size:inherit;font-weight:inherit}.chatkit-wrapper a{color:inherit;text-decoration:inherit}.chatkit-wrapper b,.chatkit-wrapper strong{font-weight:bolder}.chatkit-wrapper code,.chatkit-wrapper kbd,.chatkit-wrapper pre,.chatkit-wrapper samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}.chatkit-wrapper small{font-size:80%}.chatkit-wrapper sub,.chatkit-wrapper sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.chatkit-wrapper sub{bottom:-.25em}.chatkit-wrapper sup{top:-.5em}.chatkit-wrapper table{border-collapse:collapse;border-color:inherit;text-indent:0}.chatkit-wrapper button,.chatkit-wrapper input,.chatkit-wrapper optgroup,.chatkit-wrapper select,.chatkit-wrapper textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}.chatkit-wrapper button,.chatkit-wrapper select{text-transform:none}.chatkit-wrapper button,.chatkit-wrapper input:where([type=button]),.chatkit-wrapper input:where([type=reset]),.chatkit-wrapper input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}.chatkit-wrapper :-moz-focusring{outline:auto}.chatkit-wrapper :-moz-ui-invalid{box-shadow:none}.chatkit-wrapper progress{vertical-align:baseline}.chatkit-wrapper ::-webkit-inner-spin-button,.chatkit-wrapper ::-webkit-outer-spin-button{height:auto}.chatkit-wrapper [type=search]{-webkit-appearance:textfield;outline-offset:-2px}.chatkit-wrapper ::-webkit-search-decoration{-webkit-appearance:none}.chatkit-wrapper ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.chatkit-wrapper summary{display:list-item}.chatkit-wrapper blockquote,.chatkit-wrapper dd,.chatkit-wrapper dl,.chatkit-wrapper figure,.chatkit-wrapper h1,.chatkit-wrapper h2,.chatkit-wrapper h3,.chatkit-wrapper h4,.chatkit-wrapper h5,.chatkit-wrapper h6,.chatkit-wrapper hr,.chatkit-wrapper p,.chatkit-wrapper pre{margin:0}.chatkit-wrapper fieldset{margin:0;padding:0}.chatkit-wrapper legend{padding:0}.chatkit-wrapper menu,.chatkit-wrapper ol,.chatkit-wrapper ul{list-style:none;margin:0;padding:0}.chatkit-wrapper dialog{padding:0}.chatkit-wrapper textarea{resize:vertical}.chatkit-wrapper input::-moz-placeholder,.chatkit-wrapper textarea::-moz-placeholder{color:#9ca3af;opacity:1}.chatkit-wrapper input::placeholder,.chatkit-wrapper textarea::placeholder{color:#9ca3af;opacity:1}.chatkit-wrapper [role=button],.chatkit-wrapper button{cursor:pointer}.chatkit-wrapper :disabled{cursor:default}.chatkit-wrapper audio,.chatkit-wrapper canvas,.chatkit-wrapper embed,.chatkit-wrapper iframe,.chatkit-wrapper img,.chatkit-wrapper object,.chatkit-wrapper svg,.chatkit-wrapper video{display:block;vertical-align:middle}.chatkit-wrapper img,.chatkit-wrapper video{height:auto;max-width:100%}.chatkit-wrapper [hidden]:where(:not([hidden=until-found])){display:none}.chatkit-wrapper .container{width:100%}@media (min-width:640px){.chatkit-wrapper .container{max-width:640px}}@media (min-width:768px){.chatkit-wrapper .container{max-width:768px}}@media (min-width:1024px){.chatkit-wrapper .container{max-width:1024px}}@media (min-width:1280px){.chatkit-wrapper .container{max-width:1280px}}@media (min-width:1536px){.chatkit-wrapper .container{max-width:1536px}}.chatkit-wrapper .sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.chatkit-wrapper .pointer-events-none{pointer-events:none}.chatkit-wrapper .pointer-events-auto{pointer-events:auto}.chatkit-wrapper .invisible{visibility:hidden}.chatkit-wrapper .collapse{visibility:collapse}.chatkit-wrapper .static{position:static}.chatkit-wrapper .fixed{position:fixed}.chatkit-wrapper .absolute{position:absolute}.chatkit-wrapper .relative{position:relative}.chatkit-wrapper .sticky{position:sticky}.chatkit-wrapper .inset-0{inset:0}.chatkit-wrapper .inset-x-0{left:0;right:0}.chatkit-wrapper .inset-y-0{bottom:0;top:0}.chatkit-wrapper .-top-12{top:-3rem}.chatkit-wrapper .bottom-0{bottom:0}.chatkit-wrapper .left-0{left:0}.chatkit-wrapper .left-\[50\%\]{left:50%}.chatkit-wrapper .right-0{right:0}.chatkit-wrapper .right-1{right:.25rem}.chatkit-wrapper .right-1\.5{right:.375rem}.chatkit-wrapper .right-2{right:.5rem}.chatkit-wrapper .right-3{right:.75rem}.chatkit-wrapper .right-4{right:1rem}.chatkit-wrapper .top-0{top:0}.chatkit-wrapper .top-1\.5{top:.375rem}.chatkit-wrapper .top-2{top:.5rem}.chatkit-wrapper .top-3\.5{top:.875rem}.chatkit-wrapper .top-4{top:1rem}.chatkit-wrapper .top-\[50\%\]{top:50%}.chatkit-wrapper .z-0{z-index:0}.chatkit-wrapper .z-10{z-index:10}.chatkit-wrapper .z-20{z-index:20}.chatkit-wrapper .z-50{z-index:50}.chatkit-wrapper .z-\[100\]{z-index:100}.chatkit-wrapper .col-span-full{grid-column:1/-1}.chatkit-wrapper .col-start-1{grid-column-start:1}.chatkit-wrapper .col-start-2{grid-column-start:2}.chatkit-wrapper .col-start-3{grid-column-start:3}.chatkit-wrapper .row-start-1{grid-row-start:1}.chatkit-wrapper .row-start-2{grid-row-start:2}.chatkit-wrapper .row-start-3{grid-row-start:3}.chatkit-wrapper .m-0{margin:0}.chatkit-wrapper .m-\[4px\]{margin:4px}.chatkit-wrapper .-mx-2{margin-left:-.5rem;margin-right:-.5rem}.chatkit-wrapper .mx-2{margin-left:.5rem;margin-right:.5rem}.chatkit-wrapper .mx-3{margin-left:.75rem;margin-right:.75rem}.chatkit-wrapper .mx-3\.5{margin-left:.875rem;margin-right:.875rem}.chatkit-wrapper .mx-auto{margin-left:auto;margin-right:auto}.chatkit-wrapper .my-2{margin-bottom:.5rem;margin-top:.5rem}.chatkit-wrapper .my-4{margin-bottom:1rem;margin-top:1rem}.chatkit-wrapper .my-5{margin-bottom:1.25rem;margin-top:1.25rem}.chatkit-wrapper .-ml-1{margin-left:-.25rem}.chatkit-wrapper .-ml-2{margin-left:-.5rem}.chatkit-wrapper .-mr-1{margin-right:-.25rem}.chatkit-wrapper .mb-1{margin-bottom:.25rem}.chatkit-wrapper .mb-2{margin-bottom:.5rem}.chatkit-wrapper .mb-3{margin-bottom:.75rem}.chatkit-wrapper .mb-4{margin-bottom:1rem}.chatkit-wrapper .mb-5{margin-bottom:1.25rem}.chatkit-wrapper .mb-6{margin-bottom:1.5rem}.chatkit-wrapper .mb-8{margin-bottom:2rem}.chatkit-wrapper .mb-\[4px\]{margin-bottom:4px}.chatkit-wrapper .ml-2{margin-left:.5rem}.chatkit-wrapper .ml-3{margin-left:.75rem}.chatkit-wrapper .ml-6{margin-left:1.5rem}.chatkit-wrapper .ml-\[24px\]{margin-left:24px}.chatkit-wrapper .ml-auto{margin-left:auto}.chatkit-wrapper .mr-1{margin-right:.25rem}.chatkit-wrapper .mr-1\.5{margin-right:.375rem}.chatkit-wrapper .mr-2{margin-right:.5rem}.chatkit-wrapper .mr-3{margin-right:.75rem}.chatkit-wrapper .mr-4{margin-right:1rem}.chatkit-wrapper .mr-6{margin-right:1.5rem}.chatkit-wrapper .mt-0\.5{margin-top:.125rem}.chatkit-wrapper .mt-1{margin-top:.25rem}.chatkit-wrapper .mt-1\.5{margin-top:.375rem}.chatkit-wrapper .mt-2{margin-top:.5rem}.chatkit-wrapper .mt-4{margin-top:1rem}.chatkit-wrapper .mt-5{margin-top:1.25rem}.chatkit-wrapper .mt-6{margin-top:1.5rem}.chatkit-wrapper .mt-8{margin-top:2rem}.chatkit-wrapper .mt-\[8px\]{margin-top:8px}.chatkit-wrapper .mt-auto{margin-top:auto}.chatkit-wrapper .line-clamp-1{-webkit-line-clamp:1}.chatkit-wrapper .line-clamp-1,.chatkit-wrapper .line-clamp-2{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.chatkit-wrapper .line-clamp-2{-webkit-line-clamp:2}.chatkit-wrapper .block{display:block}.chatkit-wrapper .inline-block{display:inline-block}.chatkit-wrapper .flex{display:flex}.chatkit-wrapper .inline-flex{display:inline-flex}.chatkit-wrapper .table{display:table}.chatkit-wrapper .grid{display:grid}.chatkit-wrapper .\!contents{display:contents!important}.chatkit-wrapper .contents{display:contents}.chatkit-wrapper .hidden{display:none}.chatkit-wrapper .aspect-square{aspect-ratio:1/1}.chatkit-wrapper .size-10{height:2.5rem;width:2.5rem}.chatkit-wrapper .size-14{height:3.5rem;width:3.5rem}.chatkit-wrapper .size-2\.5{height:.625rem;width:.625rem}.chatkit-wrapper .size-3{height:.75rem;width:.75rem}.chatkit-wrapper .size-3\.5{height:.875rem;width:.875rem}.chatkit-wrapper .size-4{height:1rem;width:1rem}.chatkit-wrapper .size-6{height:1.5rem;width:1.5rem}.chatkit-wrapper .size-7{height:1.75rem;width:1.75rem}.chatkit-wrapper .size-8{height:2rem;width:2rem}.chatkit-wrapper .size-9{height:2.25rem;width:2.25rem}.chatkit-wrapper .size-\[16px\]{height:16px;width:16px}.chatkit-wrapper .size-\[18px\]{height:18px;width:18px}.chatkit-wrapper .size-\[30px\]{height:30px;width:30px}.chatkit-wrapper .size-\[unset\]{height:unset;width:unset}.chatkit-wrapper .size-full{height:100%;width:100%}.chatkit-wrapper .h-10{height:2.5rem}.chatkit-wrapper .h-11{height:2.75rem}.chatkit-wrapper .h-12{height:3rem}.chatkit-wrapper .h-16{height:4rem}.chatkit-wrapper .h-2\.5{height:.625rem}.chatkit-wrapper .h-3{height:.75rem}.chatkit-wrapper .h-3\.5{height:.875rem}.chatkit-wrapper .h-4{height:1rem}.chatkit-wrapper .h-5{height:1.25rem}.chatkit-wrapper .h-7{height:1.75rem}.chatkit-wrapper .h-8{height:2rem}.chatkit-wrapper .h-9{height:2.25rem}.chatkit-wrapper .h-\[12px\]{height:12px}.chatkit-wrapper .h-\[180px\]{height:180px}.chatkit-wrapper .h-\[18px\]{height:18px}.chatkit-wrapper .h-\[22px\]{height:22px}.chatkit-wrapper .h-\[24px\]{height:24px}.chatkit-wrapper .h-\[28px\]{height:28px}.chatkit-wrapper .h-\[30px\]{height:30px}.chatkit-wrapper .h-\[38px\]{height:38px}.chatkit-wrapper .h-\[61px\]{height:61px}.chatkit-wrapper .h-\[calc\(100\%-65px\)\]{height:calc(100% - 65px)}.chatkit-wrapper .h-auto{height:auto}.chatkit-wrapper .h-fit{height:-moz-fit-content;height:fit-content}.chatkit-wrapper .h-full{height:100%}.chatkit-wrapper .h-svh{height:100svh}.chatkit-wrapper .max-h-32{max-height:8rem}.chatkit-wrapper .max-h-\[200px\]{max-height:200px}.chatkit-wrapper .max-h-\[500px\]{max-height:500px}.chatkit-wrapper .max-h-\[600px\]{max-height:600px}.chatkit-wrapper .max-h-\[80dvh\]{max-height:80dvh}.chatkit-wrapper .max-h-\[80vh\]{max-height:80vh}.chatkit-wrapper .max-h-\[calc\(90vh-140px\)\]{max-height:calc(90vh - 140px)}.chatkit-wrapper .max-h-screen{max-height:100vh}.chatkit-wrapper .min-h-0{min-height:0}.chatkit-wrapper .min-h-12{min-height:3rem}.chatkit-wrapper .min-h-\[24px\]{min-height:24px}.chatkit-wrapper .min-h-\[400px\]{min-height:400px}.chatkit-wrapper .min-h-\[60px\]{min-height:60px}.chatkit-wrapper .min-h-svh{min-height:100svh}.chatkit-wrapper .w-1{width:.25rem}.chatkit-wrapper .w-16{width:4rem}.chatkit-wrapper .w-2\.5{width:.625rem}.chatkit-wrapper .w-3{width:.75rem}.chatkit-wrapper .w-3\.5{width:.875rem}.chatkit-wrapper .w-3\/4{width:75%}.chatkit-wrapper .w-4{width:1rem}.chatkit-wrapper .w-5{width:1.25rem}.chatkit-wrapper .w-5\/6{width:83.333333%}.chatkit-wrapper .w-7{width:1.75rem}.chatkit-wrapper .w-8{width:2rem}.chatkit-wrapper .w-\[160px\]{width:160px}.chatkit-wrapper .w-\[180px\]{width:180px}.chatkit-wrapper .w-\[18px\]{width:18px}.chatkit-wrapper .w-\[1px\]{width:1px}.chatkit-wrapper .w-\[240px\]{width:240px}.chatkit-wrapper .w-\[28px\]{width:28px}.chatkit-wrapper .w-\[30px\]{width:30px}.chatkit-wrapper .w-\[38px\]{width:38px}.chatkit-wrapper .w-auto{width:auto}.chatkit-wrapper .w-fit{width:-moz-fit-content;width:fit-content}.chatkit-wrapper .w-full{width:100%}.chatkit-wrapper .w-max{width:-moz-max-content;width:max-content}.chatkit-wrapper .min-w-0{min-width:0}.chatkit-wrapper .min-w-5{min-width:1.25rem}.chatkit-wrapper .min-w-\[80px\]{min-width:80px}.chatkit-wrapper .min-w-full{min-width:100%}.chatkit-wrapper .max-w-2xl{max-width:42rem}.chatkit-wrapper .max-w-3xl{max-width:48rem}.chatkit-wrapper .max-w-4xl{max-width:56rem}.chatkit-wrapper .max-w-\[240px\]{max-width:240px}.chatkit-wrapper .max-w-\[800px\]{max-width:800px}.chatkit-wrapper .max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.chatkit-wrapper .max-w-\[var\(--thread-max-width\)\]{max-width:var(--thread-max-width)}.chatkit-wrapper .max-w-full{max-width:100%}.chatkit-wrapper .flex-1{flex:1 1 0%}.chatkit-wrapper .flex-shrink-0,.chatkit-wrapper .shrink-0{flex-shrink:0}.chatkit-wrapper .flex-grow{flex-grow:1}.chatkit-wrapper .flex-grow-0{flex-grow:0}.chatkit-wrapper .grow{flex-grow:1}.chatkit-wrapper .border-separate{border-collapse:separate}.chatkit-wrapper .border-spacing-0{--tw-border-spacing-x:0px;--tw-border-spacing-y:0px;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y)}.chatkit-wrapper .-translate-x-1\/2{--tw-translate-x:-50%}.chatkit-wrapper .-translate-x-1\/2,.chatkit-wrapper .-translate-x-px{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chatkit-wrapper .-translate-x-px{--tw-translate-x:-1px}.chatkit-wrapper .translate-x-\[-50\%\]{--tw-translate-x:-50%}.chatkit-wrapper .translate-x-\[-50\%\],.chatkit-wrapper .translate-x-px{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chatkit-wrapper .translate-x-px{--tw-translate-x:1px}.chatkit-wrapper .translate-y-\[-50\%\]{--tw-translate-y:-50%}.chatkit-wrapper .translate-y-\[-50\%\],.chatkit-wrapper .translate-y-\[calc\(-50\%_-_2px\)\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chatkit-wrapper .translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y:calc(-50% - 2px)}.chatkit-wrapper .rotate-0{--tw-rotate:0deg}.chatkit-wrapper .rotate-0,.chatkit-wrapper .rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chatkit-wrapper .rotate-180{--tw-rotate:180deg}.chatkit-wrapper .rotate-45{--tw-rotate:45deg}.chatkit-wrapper .rotate-45,.chatkit-wrapper .rotate-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chatkit-wrapper .rotate-90{--tw-rotate:90deg}.chatkit-wrapper .transform-gpu{transform:translate3d(var(--tw-translate-x),var(--tw-translate-y),0) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.chatkit-wrapper .animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.chatkit-wrapper .animate-spin{animation:spin 1s linear infinite}.chatkit-wrapper .cursor-pointer{cursor:pointer}.chatkit-wrapper .select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.chatkit-wrapper .resize-none{resize:none}.chatkit-wrapper .scroll-m-20{scroll-margin:5rem}.chatkit-wrapper .list-decimal{list-style-type:decimal}.chatkit-wrapper .list-disc{list-style-type:disc}.chatkit-wrapper .auto-rows-auto{grid-auto-rows:auto}.chatkit-wrapper .grid-cols-\[minmax\(72px\2c 1fr\)_auto\]{grid-template-columns:minmax(72px,1fr) auto}.chatkit-wrapper .flex-row{flex-direction:row}.chatkit-wrapper .flex-col{flex-direction:column}.chatkit-wrapper .flex-col-reverse{flex-direction:column-reverse}.chatkit-wrapper .items-start{align-items:flex-start}.chatkit-wrapper .items-end{align-items:flex-end}.chatkit-wrapper .items-center{align-items:center}.chatkit-wrapper .items-stretch{align-items:stretch}.chatkit-wrapper .justify-start{justify-content:flex-start}.chatkit-wrapper .justify-end{justify-content:flex-end}.chatkit-wrapper .justify-center{justify-content:center}.chatkit-wrapper .justify-between{justify-content:space-between}.chatkit-wrapper .gap-0{gap:0}.chatkit-wrapper .gap-0\.5{gap:.125rem}.chatkit-wrapper .gap-1{gap:.25rem}.chatkit-wrapper .gap-1\.5{gap:.375rem}.chatkit-wrapper .gap-2{gap:.5rem}.chatkit-wrapper .gap-3{gap:.75rem}.chatkit-wrapper .gap-4{gap:1rem}.chatkit-wrapper .gap-\[10px\]{gap:10px}.chatkit-wrapper .gap-\[12px\]{gap:12px}.chatkit-wrapper .gap-\[80px\]{gap:80px}.chatkit-wrapper .gap-\[8px\]{gap:8px}.chatkit-wrapper .gap-y-2{row-gap:.5rem}.chatkit-wrapper .space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1rem*var(--tw-space-x-reverse))}.chatkit-wrapper .space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(0px*var(--tw-space-y-reverse));margin-top:calc(0px*(1 - var(--tw-space-y-reverse)))}.chatkit-wrapper .space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.chatkit-wrapper .space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.375rem*var(--tw-space-y-reverse));margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)))}.chatkit-wrapper .space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.chatkit-wrapper .space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.625rem*var(--tw-space-y-reverse));margin-top:calc(.625rem*(1 - var(--tw-space-y-reverse)))}.chatkit-wrapper .space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.chatkit-wrapper .space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.chatkit-wrapper .space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.25rem*var(--tw-space-y-reverse));margin-top:calc(1.25rem*(1 - var(--tw-space-y-reverse)))}.chatkit-wrapper .space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.chatkit-wrapper .divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.chatkit-wrapper .divide-gray-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(243 244 246/var(--tw-divide-opacity,1))}.chatkit-wrapper .self-end{align-self:flex-end}.chatkit-wrapper .self-center{align-self:center}.chatkit-wrapper .overflow-auto{overflow:auto}.chatkit-wrapper .overflow-hidden{overflow:hidden}.chatkit-wrapper .overflow-visible{overflow:visible}.chatkit-wrapper .overflow-x-auto{overflow-x:auto}.chatkit-wrapper .overflow-y-auto{overflow-y:auto}.chatkit-wrapper .overflow-y-scroll{overflow-y:scroll}.chatkit-wrapper .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chatkit-wrapper .whitespace-nowrap{white-space:nowrap}.chatkit-wrapper .whitespace-pre-wrap{white-space:pre-wrap}.chatkit-wrapper .text-balance{text-wrap:balance}.chatkit-wrapper .break-words{overflow-wrap:break-word}.chatkit-wrapper .break-all{word-break:break-all}.chatkit-wrapper .rounded{border-radius:.25rem}.chatkit-wrapper .rounded-2xl{border-radius:1rem}.chatkit-wrapper .rounded-\[10px\]{border-radius:10px}.chatkit-wrapper .rounded-\[14px\]{border-radius:14px}.chatkit-wrapper .rounded-\[1px\]{border-radius:1px}.chatkit-wrapper .rounded-\[2px\]{border-radius:2px}.chatkit-wrapper .rounded-\[4px\]{border-radius:4px}.chatkit-wrapper .rounded-\[68px\]{border-radius:68px}.chatkit-wrapper .rounded-\[8px\]{border-radius:8px}.chatkit-wrapper .rounded-full{border-radius:9999px}.chatkit-wrapper .rounded-lg{border-radius:.5rem}.chatkit-wrapper .rounded-md{border-radius:.375rem}.chatkit-wrapper .rounded-none{border-radius:0}.chatkit-wrapper .rounded-xl{border-radius:.75rem}.chatkit-wrapper .\!rounded-t-none{border-top-left-radius:0!important;border-top-right-radius:0!important}.chatkit-wrapper .rounded-b-lg{border-bottom-left-radius:.5rem;border-bottom-right-radius:.5rem}.chatkit-wrapper .rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.chatkit-wrapper .border{border-width:1px}.chatkit-wrapper .border-0{border-width:0}.chatkit-wrapper .border-2{border-width:2px}.chatkit-wrapper .border-\[1px\]{border-width:1px}.chatkit-wrapper .border-b{border-bottom-width:1px}.chatkit-wrapper .border-l{border-left-width:1px}.chatkit-wrapper .border-l-2{border-left-width:2px}.chatkit-wrapper .border-r{border-right-width:1px}.chatkit-wrapper .border-t{border-top-width:1px}.chatkit-wrapper .border-t-0{border-top-width:0}.chatkit-wrapper .border-solid{border-style:solid}.chatkit-wrapper .border-dashed{border-style:dashed}.chatkit-wrapper .border-none{border-style:none}.chatkit-wrapper .border-\[\#\#0000001a\]{border-color:##0000001a}.chatkit-wrapper .border-\[\#0000000A\]{border-color:#0000000a}.chatkit-wrapper .border-\[\#0000001A\]{border-color:#0000001a}.chatkit-wrapper .border-\[\#1664FF1A\]{border-color:#1664ff1a}.chatkit-wrapper .border-\[\#E5E7EB\]{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.chatkit-wrapper .border-\[\#EAEDF1\]{--tw-border-opacity:1;border-color:rgb(234 237 241/var(--tw-border-opacity,1))}.chatkit-wrapper .border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}.chatkit-wrapper .border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.chatkit-wrapper .border-gray-200\/80{border-color:rgba(229,231,235,.8)}.chatkit-wrapper .border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.chatkit-wrapper .border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.chatkit-wrapper .border-transparent{border-color:transparent}.chatkit-wrapper .bg-\[\#0000000A\]{background-color:#0000000a}.chatkit-wrapper .bg-\[\#1664FF\]{--tw-bg-opacity:1;background-color:rgb(22 100 255/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-\[\#DDE2E9\]{--tw-bg-opacity:1;background-color:rgb(221 226 233/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-\[\#E5E7EB\]{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-\[\#EBF1FF\]{--tw-bg-opacity:1;background-color:rgb(235 241 255/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-\[\#F3F7FF\]{--tw-bg-opacity:1;background-color:rgb(243 247 255/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-\[\#F6F8FA\]{--tw-bg-opacity:1;background-color:rgb(246 248 250/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-\[\#FAFBFC\]{--tw-bg-opacity:1;background-color:rgb(250 251 252/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-background{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-black\/50{background-color:rgba(0,0,0,.5)}.chatkit-wrapper .bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-gray-50\/50{background-color:rgba(249,250,251,.5)}.chatkit-wrapper .bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-transparent{background-color:transparent}.chatkit-wrapper .bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-white\/95{background-color:hsla(0,0%,100%,.95)}.chatkit-wrapper .bg-\[linear-gradient\(to_top\2c var\(--color-background\)\2c transparent\)\]{background-image:linear-gradient(to top,var(--color-background),transparent)}.chatkit-wrapper .bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.chatkit-wrapper .bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.chatkit-wrapper .bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.chatkit-wrapper .from-blue-50{--tw-gradient-from:#eff6ff var(--tw-gradient-from-position);--tw-gradient-to:rgba(239,246,255,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.chatkit-wrapper .from-blue-500{--tw-gradient-from:#3b82f6 var(--tw-gradient-from-position);--tw-gradient-to:rgba(59,130,246,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.chatkit-wrapper .from-blue-600{--tw-gradient-from:#2563eb var(--tw-gradient-from-position);--tw-gradient-to:rgba(37,99,235,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.chatkit-wrapper .from-gray-50\/30{--tw-gradient-from:rgba(249,250,251,.3) var(--tw-gradient-from-position);--tw-gradient-to:rgba(249,250,251,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.chatkit-wrapper .from-gray-50\/50{--tw-gradient-from:rgba(249,250,251,.5) var(--tw-gradient-from-position);--tw-gradient-to:rgba(249,250,251,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.chatkit-wrapper .from-red-500{--tw-gradient-from:#ef4444 var(--tw-gradient-from-position);--tw-gradient-to:rgba(239,68,68,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.chatkit-wrapper .to-blue-100{--tw-gradient-to:#dbeafe var(--tw-gradient-to-position)}.chatkit-wrapper .to-blue-600{--tw-gradient-to:#2563eb var(--tw-gradient-to-position)}.chatkit-wrapper .to-blue-700{--tw-gradient-to:#1d4ed8 var(--tw-gradient-to-position)}.chatkit-wrapper .to-purple-500{--tw-gradient-to:#a855f7 var(--tw-gradient-to-position)}.chatkit-wrapper .to-red-600{--tw-gradient-to:#dc2626 var(--tw-gradient-to-position)}.chatkit-wrapper .to-white{--tw-gradient-to:#fff var(--tw-gradient-to-position)}.chatkit-wrapper .fill-white{fill:#fff}.chatkit-wrapper .stroke-\[2px\]{stroke-width:2px}.chatkit-wrapper .object-contain{-o-object-fit:contain;object-fit:contain}.chatkit-wrapper .object-cover{-o-object-fit:cover;object-fit:cover}.chatkit-wrapper .p-0{padding:0}.chatkit-wrapper .p-1{padding:.25rem}.chatkit-wrapper .p-1\.5{padding:.375rem}.chatkit-wrapper .p-2{padding:.5rem}.chatkit-wrapper .p-3{padding:.75rem}.chatkit-wrapper .p-4{padding:1rem}.chatkit-wrapper .p-6{padding:1.5rem}.chatkit-wrapper .p-8{padding:2rem}.chatkit-wrapper .px-1{padding-left:.25rem;padding-right:.25rem}.chatkit-wrapper .px-1\.5{padding-left:.375rem;padding-right:.375rem}.chatkit-wrapper .px-2{padding-left:.5rem;padding-right:.5rem}.chatkit-wrapper .px-2\.5{padding-left:.625rem;padding-right:.625rem}.chatkit-wrapper .px-3{padding-left:.75rem;padding-right:.75rem}.chatkit-wrapper .px-4{padding-left:1rem;padding-right:1rem}.chatkit-wrapper .px-5{padding-left:1.25rem;padding-right:1.25rem}.chatkit-wrapper .px-6{padding-left:1.5rem;padding-right:1.5rem}.chatkit-wrapper .px-8{padding-left:2rem;padding-right:2rem}.chatkit-wrapper .px-\[15px\]{padding-left:15px;padding-right:15px}.chatkit-wrapper .px-\[6px\]{padding-left:6px;padding-right:6px}.chatkit-wrapper .py-0{padding-bottom:0;padding-top:0}.chatkit-wrapper .py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.chatkit-wrapper .py-1{padding-bottom:.25rem;padding-top:.25rem}.chatkit-wrapper .py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.chatkit-wrapper .py-10{padding-bottom:2.5rem;padding-top:2.5rem}.chatkit-wrapper .py-16{padding-bottom:4rem;padding-top:4rem}.chatkit-wrapper .py-2{padding-bottom:.5rem;padding-top:.5rem}.chatkit-wrapper .py-2\.5{padding-bottom:.625rem;padding-top:.625rem}.chatkit-wrapper .py-3{padding-bottom:.75rem;padding-top:.75rem}.chatkit-wrapper .py-4{padding-bottom:1rem;padding-top:1rem}.chatkit-wrapper .py-5{padding-bottom:1.25rem;padding-top:1.25rem}.chatkit-wrapper .py-6{padding-bottom:1.5rem;padding-top:1.5rem}.chatkit-wrapper .py-8{padding-bottom:2rem;padding-top:2rem}.chatkit-wrapper .py-\[10px\]{padding-bottom:10px;padding-top:10px}.chatkit-wrapper .py-\[12px\]{padding-bottom:12px;padding-top:12px}.chatkit-wrapper .py-\[6px\]{padding-bottom:6px;padding-top:6px}.chatkit-wrapper .py-\[8px\]{padding-bottom:8px;padding-top:8px}.chatkit-wrapper .pb-1{padding-bottom:.25rem}.chatkit-wrapper .pb-3{padding-bottom:.75rem}.chatkit-wrapper .pb-4{padding-bottom:1rem}.chatkit-wrapper .pb-6{padding-bottom:1.5rem}.chatkit-wrapper .pl-10{padding-left:2.5rem}.chatkit-wrapper .pl-4{padding-left:1rem}.chatkit-wrapper .pl-6{padding-left:1.5rem}.chatkit-wrapper .pl-\[14px\]{padding-left:14px}.chatkit-wrapper .pl-\[16px\]{padding-left:16px}.chatkit-wrapper .pl-\[8px\]{padding-left:8px}.chatkit-wrapper .pr-2{padding-right:.5rem}.chatkit-wrapper .pr-4{padding-right:1rem}.chatkit-wrapper .pr-8{padding-right:2rem}.chatkit-wrapper .pr-\[12px\]{padding-right:12px}.chatkit-wrapper .pt-0{padding-top:0}.chatkit-wrapper .pt-0\.5{padding-top:.125rem}.chatkit-wrapper .pt-1{padding-top:.25rem}.chatkit-wrapper .pt-2{padding-top:.5rem}.chatkit-wrapper .pt-3{padding-top:.75rem}.chatkit-wrapper .pt-4{padding-top:1rem}.chatkit-wrapper .pt-6{padding-top:1.5rem}.chatkit-wrapper .pt-\[8px\]{padding-top:8px}.chatkit-wrapper .text-left{text-align:left}.chatkit-wrapper .text-center{text-align:center}.chatkit-wrapper .text-start{text-align:start}.chatkit-wrapper .font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.chatkit-wrapper .text-2xl{font-size:1.5rem;line-height:2rem}.chatkit-wrapper .text-3xl{font-size:1.875rem;line-height:2.25rem}.chatkit-wrapper .text-4xl{font-size:2.25rem;line-height:2.5rem}.chatkit-wrapper .text-\[13px\]{font-size:13px}.chatkit-wrapper .text-\[16px\]{font-size:16px}.chatkit-wrapper .text-\[24px\]{font-size:24px}.chatkit-wrapper .text-base{font-size:1rem;line-height:1.5rem}.chatkit-wrapper .text-lg{font-size:1.125rem;line-height:1.75rem}.chatkit-wrapper .text-sm{font-size:.875rem;line-height:1.25rem}.chatkit-wrapper .text-xl{font-size:1.25rem;line-height:1.75rem}.chatkit-wrapper .text-xs{font-size:.75rem;line-height:1rem}.chatkit-wrapper .font-bold{font-weight:700}.chatkit-wrapper .font-extrabold{font-weight:800}.chatkit-wrapper .font-medium{font-weight:500}.chatkit-wrapper .font-normal{font-weight:400}.chatkit-wrapper .font-semibold{font-weight:600}.chatkit-wrapper .lowercase{text-transform:lowercase}.chatkit-wrapper .italic{font-style:italic}.chatkit-wrapper .tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.chatkit-wrapper .leading-7{line-height:1.75rem}.chatkit-wrapper .leading-\[100\%\]{line-height:100%}.chatkit-wrapper .leading-\[22px\]{line-height:22px}.chatkit-wrapper .leading-none{line-height:1}.chatkit-wrapper .leading-relaxed{line-height:1.625}.chatkit-wrapper .tracking-\[0\.3\%\]{letter-spacing:.3%}.chatkit-wrapper .tracking-tight{letter-spacing:-.025em}.chatkit-wrapper .text-\[\#0C0D0E\]{--tw-text-opacity:1;color:rgb(12 13 14/var(--tw-text-opacity,1))}.chatkit-wrapper .text-\[\#1664FF\]{--tw-text-opacity:1;color:rgb(22 100 255/var(--tw-text-opacity,1))}.chatkit-wrapper .text-\[\#1D2129\]{--tw-text-opacity:1;color:rgb(29 33 41/var(--tw-text-opacity,1))}.chatkit-wrapper .text-\[\#808388\]{--tw-text-opacity:1;color:rgb(128 131 136/var(--tw-text-opacity,1))}.chatkit-wrapper .text-\[\#86909C\]{--tw-text-opacity:1;color:rgb(134 144 156/var(--tw-text-opacity,1))}.chatkit-wrapper .text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.chatkit-wrapper .text-background{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.chatkit-wrapper .text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.chatkit-wrapper .text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.chatkit-wrapper .text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.chatkit-wrapper .text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.chatkit-wrapper .text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.chatkit-wrapper .text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.chatkit-wrapper .text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.chatkit-wrapper .text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.chatkit-wrapper .text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity,1))}.chatkit-wrapper .text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.chatkit-wrapper .text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.chatkit-wrapper .text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.chatkit-wrapper .underline{text-decoration-line:underline}.chatkit-wrapper .underline-offset-4{text-underline-offset:4px}.chatkit-wrapper .opacity-0{opacity:0}.chatkit-wrapper .opacity-100{opacity:1}.chatkit-wrapper .opacity-50{opacity:.5}.chatkit-wrapper .opacity-70{opacity:.7}.chatkit-wrapper .opacity-90{opacity:.9}.chatkit-wrapper .shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.chatkit-wrapper .shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored:0 0 0 1px var(--tw-shadow-color)}.chatkit-wrapper .shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\],.chatkit-wrapper .shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.chatkit-wrapper .shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.chatkit-wrapper .shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.chatkit-wrapper .shadow-md,.chatkit-wrapper .shadow-none{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.chatkit-wrapper .shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.chatkit-wrapper .shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.chatkit-wrapper .outline-none{outline:2px solid transparent;outline-offset:2px}.chatkit-wrapper .outline{outline-style:solid}.chatkit-wrapper .ring-offset-background{--tw-ring-offset-color:#fff}.chatkit-wrapper .filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.chatkit-wrapper .backdrop-blur-sm{--tw-backdrop-blur:blur(4px);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.chatkit-wrapper .transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.chatkit-wrapper .transition-\[color\2c box-shadow\]{transition-duration:.15s;transition-property:color,box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1)}.chatkit-wrapper .transition-\[left\2c right\2c width\]{transition-duration:.15s;transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1)}.chatkit-wrapper .transition-\[margin\2c opacity\]{transition-duration:.15s;transition-property:margin,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.chatkit-wrapper .transition-\[transform\2c opacity\]{transition-duration:.15s;transition-property:transform,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.chatkit-wrapper .transition-\[width\2c height\2c padding\]{transition-duration:.15s;transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1)}.chatkit-wrapper .transition-\[width\]{transition-duration:.15s;transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1)}.chatkit-wrapper .transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.chatkit-wrapper .transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.chatkit-wrapper .transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.chatkit-wrapper .transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.chatkit-wrapper .duration-150{transition-duration:.15s}.chatkit-wrapper .duration-200{transition-duration:.2s}.chatkit-wrapper .ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.chatkit-wrapper .ease-linear{transition-timing-function:linear}.chatkit-wrapper .ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.chatkit-wrapper .chatkit-wrapper{.chatkit-wrapper *,.chatkit-wrapper :after,.chatkit-wrapper :before{border:0 solid #e5e7eb;box-sizing:border-box}.chatkit-wrapper :after,.chatkit-wrapper :before{--tw-content:""}.chatkit-wrapper,.chatkit-wrapper :host{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}.chatkit-wrapper{line-height:inherit;margin:0}.chatkit-wrapper hr{border-top-width:1px;color:inherit;height:0}.chatkit-wrapper abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.chatkit-wrapper h1,.chatkit-wrapper h2,.chatkit-wrapper h3,.chatkit-wrapper h4,.chatkit-wrapper h5,.chatkit-wrapper h6{font-size:inherit;font-weight:inherit}.chatkit-wrapper a{color:inherit;text-decoration:inherit}.chatkit-wrapper b,.chatkit-wrapper strong{font-weight:bolder}.chatkit-wrapper code,.chatkit-wrapper kbd,.chatkit-wrapper pre,.chatkit-wrapper samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}.chatkit-wrapper small{font-size:80%}.chatkit-wrapper sub,.chatkit-wrapper sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.chatkit-wrapper sub{bottom:-.25em}.chatkit-wrapper sup{top:-.5em}.chatkit-wrapper table{border-collapse:collapse;border-color:inherit;text-indent:0}.chatkit-wrapper button,.chatkit-wrapper input,.chatkit-wrapper optgroup,.chatkit-wrapper select,.chatkit-wrapper textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}.chatkit-wrapper button,.chatkit-wrapper select{text-transform:none}.chatkit-wrapper button,.chatkit-wrapper input:where([type=button]),.chatkit-wrapper input:where([type=reset]),.chatkit-wrapper input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}.chatkit-wrapper :-moz-focusring{outline:auto}.chatkit-wrapper :-moz-ui-invalid{box-shadow:none}.chatkit-wrapper progress{vertical-align:baseline}.chatkit-wrapper ::-webkit-inner-spin-button,.chatkit-wrapper ::-webkit-outer-spin-button{height:auto}.chatkit-wrapper [type=search]{-webkit-appearance:textfield;outline-offset:-2px}.chatkit-wrapper ::-webkit-search-decoration{-webkit-appearance:none}.chatkit-wrapper ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.chatkit-wrapper summary{display:list-item}.chatkit-wrapper blockquote,.chatkit-wrapper dd,.chatkit-wrapper dl,.chatkit-wrapper figure,.chatkit-wrapper h1,.chatkit-wrapper h2,.chatkit-wrapper h3,.chatkit-wrapper h4,.chatkit-wrapper h5,.chatkit-wrapper h6,.chatkit-wrapper hr,.chatkit-wrapper p,.chatkit-wrapper pre{margin:0}.chatkit-wrapper fieldset{margin:0;padding:0}.chatkit-wrapper legend{padding:0}.chatkit-wrapper menu,.chatkit-wrapper ol,.chatkit-wrapper ul{list-style:none;margin:0;padding:0}.chatkit-wrapper dialog{padding:0}.chatkit-wrapper textarea{resize:vertical}.chatkit-wrapper input::-moz-placeholder,.chatkit-wrapper textarea::-moz-placeholder{color:#9ca3af;opacity:1}.chatkit-wrapper input::placeholder,.chatkit-wrapper textarea::placeholder{color:#9ca3af;opacity:1}.chatkit-wrapper [role=button],.chatkit-wrapper button{cursor:pointer}.chatkit-wrapper :disabled{cursor:default}.chatkit-wrapper audio,.chatkit-wrapper canvas,.chatkit-wrapper embed,.chatkit-wrapper iframe,.chatkit-wrapper img,.chatkit-wrapper object,.chatkit-wrapper svg,.chatkit-wrapper video{display:block;vertical-align:middle}.chatkit-wrapper img,.chatkit-wrapper video{height:auto;max-width:100%}.chatkit-wrapper [hidden]:where(:not([hidden=until-found])){display:none}}@keyframes bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-12px)}}.chatkit-wrapper .file\:inline-flex::file-selector-button{display:inline-flex}.chatkit-wrapper .file\:h-7::file-selector-button{height:1.75rem}.chatkit-wrapper .file\:border-0::file-selector-button{border-width:0}.chatkit-wrapper .file\:bg-transparent::file-selector-button{background-color:transparent}.chatkit-wrapper .file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.chatkit-wrapper .file\:font-medium::file-selector-button{font-weight:500}.chatkit-wrapper .after\:absolute:after{content:var(--tw-content);position:absolute}.chatkit-wrapper .after\:-inset-2:after{content:var(--tw-content);inset:-.5rem}.chatkit-wrapper .after\:inset-y-0:after{bottom:0;content:var(--tw-content);top:0}.chatkit-wrapper .after\:left-1\/2:after{content:var(--tw-content);left:50%}.chatkit-wrapper .after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.chatkit-wrapper .first\:mt-0:first-child{margin-top:0}.chatkit-wrapper .first\:mt-3:first-child{margin-top:.75rem}.chatkit-wrapper .first\:mt-4:first-child{margin-top:1rem}.chatkit-wrapper .first\:rounded-tl-lg:first-child{border-top-left-radius:.5rem}.chatkit-wrapper .first\:border-t:first-child{border-top-width:1px}.chatkit-wrapper .last\:mb-0:last-child{margin-bottom:0}.chatkit-wrapper .last\:mb-24:last-child{margin-bottom:6rem}.chatkit-wrapper .last\:mb-5:last-child{margin-bottom:1.25rem}.chatkit-wrapper .last\:rounded-tr-lg:last-child{border-top-right-radius:.5rem}.chatkit-wrapper .last\:border-r:last-child{border-right-width:1px}.chatkit-wrapper .empty\:hidden:empty{display:none}.chatkit-wrapper .focus-within\:ring-1:focus-within{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.chatkit-wrapper .hover\:visible:hover{visibility:visible}.chatkit-wrapper .hover\:scale-\[1\.02\]:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chatkit-wrapper .hover\:border-blue-200:hover{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.chatkit-wrapper .hover\:border-gray-300:hover{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.chatkit-wrapper .hover\:border-gray-400:hover{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity,1))}.chatkit-wrapper .hover\:border-red-300:hover{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity,1))}.chatkit-wrapper .hover\:\!bg-white:hover{--tw-bg-opacity:1!important;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))!important}.chatkit-wrapper .hover\:bg-\[rgba\(46\2c 50\2c 56\2c 0\.05\)\]:hover{background-color:rgba(46,50,56,.05)}.chatkit-wrapper .hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.chatkit-wrapper .hover\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.chatkit-wrapper .hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.chatkit-wrapper .hover\:bg-gray-50\/50:hover{background-color:rgba(249,250,251,.5)}.chatkit-wrapper .hover\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.chatkit-wrapper .hover\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.chatkit-wrapper .hover\:from-blue-600:hover{--tw-gradient-from:#2563eb var(--tw-gradient-from-position);--tw-gradient-to:rgba(37,99,235,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.chatkit-wrapper .hover\:from-blue-700:hover{--tw-gradient-from:#1d4ed8 var(--tw-gradient-from-position);--tw-gradient-to:rgba(29,78,216,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.chatkit-wrapper .hover\:from-red-600:hover{--tw-gradient-from:#dc2626 var(--tw-gradient-from-position);--tw-gradient-to:rgba(220,38,38,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.chatkit-wrapper .hover\:to-blue-700:hover{--tw-gradient-to:#1d4ed8 var(--tw-gradient-to-position)}.chatkit-wrapper .hover\:to-blue-800:hover{--tw-gradient-to:#1e40af var(--tw-gradient-to-position)}.chatkit-wrapper .hover\:to-red-700:hover{--tw-gradient-to:#b91c1c var(--tw-gradient-to-position)}.chatkit-wrapper .hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.chatkit-wrapper .hover\:text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.chatkit-wrapper .hover\:underline:hover{text-decoration-line:underline}.chatkit-wrapper .hover\:opacity-100:hover{opacity:1}.chatkit-wrapper .hover\:opacity-75:hover{opacity:.75}.chatkit-wrapper .hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored:0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.chatkit-wrapper .hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.chatkit-wrapper .hover\:shadow-lg:hover,.chatkit-wrapper .hover\:shadow-md:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.chatkit-wrapper .hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.chatkit-wrapper .focus\:border-blue-400:focus{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.chatkit-wrapper .focus\:opacity-100:focus{opacity:1}.chatkit-wrapper .focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.chatkit-wrapper .focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.chatkit-wrapper .focus\:ring-2:focus,.chatkit-wrapper .focus\:ring-4:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.chatkit-wrapper .focus\:ring-4:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.chatkit-wrapper .focus\:ring-blue-50:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(239 246 255/var(--tw-ring-opacity,1))}.chatkit-wrapper .focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.chatkit-wrapper .focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.chatkit-wrapper .focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.chatkit-wrapper .focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.chatkit-wrapper .focus-visible\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px}.chatkit-wrapper .active\:scale-95:active{--tw-scale-x:.95;--tw-scale-y:.95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chatkit-wrapper .disabled\:pointer-events-none:disabled{pointer-events:none}.chatkit-wrapper .disabled\:invisible:disabled{visibility:hidden}.chatkit-wrapper .disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.chatkit-wrapper .disabled\:from-gray-300:disabled{--tw-gradient-from:#d1d5db var(--tw-gradient-from-position);--tw-gradient-to:rgba(209,213,219,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.chatkit-wrapper .disabled\:to-gray-300:disabled{--tw-gradient-to:#d1d5db var(--tw-gradient-to-position)}.chatkit-wrapper .disabled\:opacity-50:disabled{opacity:.5}.chatkit-wrapper .group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100{opacity:1}.chatkit-wrapper .group:hover .group-hover\:visible{visibility:visible}.chatkit-wrapper .group:hover .group-hover\:translate-x-1{--tw-translate-x:0.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chatkit-wrapper .group:hover .group-hover\:text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.chatkit-wrapper .group:hover .group-hover\:underline{text-decoration-line:underline}.chatkit-wrapper .group:hover .group-hover\:opacity-100,.chatkit-wrapper .group\/menu-item:hover .group-hover\/menu-item\:opacity-100{opacity:1}.chatkit-wrapper .group.destructive .group-\[\.destructive\]\:text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.chatkit-wrapper .group.destructive .group-\[\.destructive\]\:hover\:text-red-50:hover{--tw-text-opacity:1;color:rgb(254 242 242/var(--tw-text-opacity,1))}.chatkit-wrapper .group.destructive .group-\[\.destructive\]\:focus\:ring-red-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(248 113 113/var(--tw-ring-opacity,1))}.chatkit-wrapper .group.destructive .group-\[\.destructive\]\:focus\:ring-offset-red-600:focus{--tw-ring-offset-color:#dc2626}.chatkit-wrapper .has-\[\>svg\]\:px-2\.5:has(>svg){padding-left:.625rem;padding-right:.625rem}.chatkit-wrapper .has-\[\>svg\]\:px-3:has(>svg){padding-left:.75rem;padding-right:.75rem}.chatkit-wrapper .has-\[\>svg\]\:px-4:has(>svg){padding-left:1rem;padding-right:1rem}.chatkit-wrapper .aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.chatkit-wrapper .aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.chatkit-wrapper .data-\[state\=closed\]\:pointer-events-none[data-state=closed]{pointer-events:none}.chatkit-wrapper .data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.chatkit-wrapper .data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.chatkit-wrapper .data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.chatkit-wrapper .data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.chatkit-wrapper .data-\[state\=closed\]\:w-\[160px\][data-state=closed]{width:160px}.chatkit-wrapper .data-\[state\=open\]\:w-full[data-state=open]{width:100%}.chatkit-wrapper .data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:0px}.chatkit-wrapper .data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel],.chatkit-wrapper .data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chatkit-wrapper .data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x:var(--radix-toast-swipe-end-x)}.chatkit-wrapper .data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chatkit-wrapper .data-\[state\=open\]\:border-b[data-state=open]{border-bottom-width:1px}.chatkit-wrapper .data-\[active\=true\]\:font-medium[data-active=true]{font-weight:500}.chatkit-wrapper .data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.chatkit-wrapper .data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}.chatkit-wrapper .data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.chatkit-wrapper .data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.chatkit-wrapper .group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width)*-1)}.chatkit-wrapper .group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width)*-1)}.chatkit-wrapper .group[data-side=left] .group-data-\[side\=left\]\:-right-4{right:-1rem}.chatkit-wrapper .group[data-side=right] .group-data-\[side\=right\]\:left-0{left:0}.chatkit-wrapper .group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.chatkit-wrapper .group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.chatkit-wrapper .group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\)\]{width:calc(var(--sidebar-width-icon) + (--spacing(4)))}.chatkit-wrapper .group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]{width:calc(var(--sidebar-width-icon) + (--spacing(4)) + 2px)}.chatkit-wrapper .group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0}.chatkit-wrapper .group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:translate-x-0{--tw-translate-x:0px}.chatkit-wrapper .group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:translate-x-0,.chatkit-wrapper .group[data-side=right] .group-data-\[side\=right\]\:rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chatkit-wrapper .group[data-side=right] .group-data-\[side\=right\]\:rotate-180{--tw-rotate:180deg}.chatkit-wrapper .group\/trigger[data-state=closed] .group-data-\[state\=closed\]\/trigger\:-rotate-90{--tw-rotate:-90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chatkit-wrapper .group\/trigger[data-state=open] .group-data-\[state\=open\]\/trigger\:rotate-0{--tw-rotate:0deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chatkit-wrapper .group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden{overflow:hidden}.chatkit-wrapper .group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:.5rem}.chatkit-wrapper .group[data-variant=floating] .group-data-\[variant\=floating\]\:border{border-width:1px}.chatkit-wrapper .group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.chatkit-wrapper .group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.chatkit-wrapper .group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.chatkit-wrapper .group[data-variant=floating] .group-data-\[variant\=floating\]\:shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.chatkit-wrapper .group\/collapsible-content[data-state=open] .group-data-\[state\=open\]\/collapsible-content\:delay-\[calc\(var\(--animation-duration\)\*0\.75\)\]{transition-delay:calc(var(--animation-duration)*.75)}.chatkit-wrapper .group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:left-full:after{content:var(--tw-content);left:100%}.chatkit-wrapper .peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:top-1\.5{top:.375rem}.chatkit-wrapper .peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:top-2\.5{top:.625rem}.chatkit-wrapper .peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:top-1{top:.25rem}@media (min-width:640px){.chatkit-wrapper .sm\:bottom-0{bottom:0}.chatkit-wrapper .sm\:right-0{right:0}.chatkit-wrapper .sm\:top-auto{top:auto}.chatkit-wrapper .sm\:flex{display:flex}.chatkit-wrapper .sm\:max-h-\[90vh\]{max-height:90vh}.chatkit-wrapper .sm\:max-w-3xl{max-width:48rem}.chatkit-wrapper .sm\:max-w-\[440px\]{max-width:440px}.chatkit-wrapper .sm\:max-w-\[480px\]{max-width:480px}.chatkit-wrapper .sm\:max-w-\[90vw\]{max-width:90vw}.chatkit-wrapper .sm\:max-w-lg{max-width:32rem}.chatkit-wrapper .sm\:max-w-sm{max-width:24rem}.chatkit-wrapper .sm\:flex-row{flex-direction:row}.chatkit-wrapper .sm\:flex-col{flex-direction:column}.chatkit-wrapper .sm\:justify-end{justify-content:flex-end}.chatkit-wrapper .sm\:text-left{text-align:left}}@media (min-width:768px){.chatkit-wrapper .md\:block{display:block}.chatkit-wrapper .md\:flex{display:flex}.chatkit-wrapper .md\:max-w-\[420px\]{max-width:420px}.chatkit-wrapper .md\:pb-6{padding-bottom:1.5rem}.chatkit-wrapper .md\:text-sm{font-size:.875rem;line-height:1.25rem}.chatkit-wrapper .md\:opacity-0{opacity:0}.chatkit-wrapper .md\:after\:hidden:after{content:var(--tw-content);display:none}.chatkit-wrapper .peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.chatkit-wrapper .peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.chatkit-wrapper .peer[data-variant=inset][data-state=collapsed]~.md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-2{margin-left:.5rem}.chatkit-wrapper .peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:.75rem}.chatkit-wrapper .peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}}@media (prefers-color-scheme:dark){.chatkit-wrapper .dark\:bg-background{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.chatkit-wrapper .dark\:stroke-\[2\.5px\]{stroke-width:2.5px}.chatkit-wrapper .dark\:text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.chatkit-wrapper .dark\:text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity,1))}}.chatkit-wrapper .\[\&\:last-child\>td\:first-child\]\:rounded-bl-lg:last-child>td:first-child{border-bottom-left-radius:.5rem}.chatkit-wrapper .\[\&\:last-child\>td\:last-child\]\:rounded-br-lg:last-child>td:last-child{border-bottom-right-radius:.5rem}.chatkit-wrapper .\[\&\:where\(\>\*\)\]\:col-start-2:where(>*){grid-column-start:2}.chatkit-wrapper .only\:\[\&\>\#attachment-tile\]\:size-24>#attachment-tile:only-child{height:6rem;width:6rem}.chatkit-wrapper .\[\&\>a\]\:text-xs>a{font-size:.75rem;line-height:1rem}.chatkit-wrapper .\[\&\>a\]\:no-underline>a{text-decoration-line:none}.chatkit-wrapper .\[\&\>button\]\:hidden>button{display:none}.chatkit-wrapper .\[\&\>button\]\:rounded-full>button{border-radius:9999px}.chatkit-wrapper .\[\&\>button\]\:p-1>button{padding:.25rem}.chatkit-wrapper .\[\&\>button\]\:opacity-100>button{opacity:1}.chatkit-wrapper .\[\&\>button\]\:\!ring-0>button{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important}.chatkit-wrapper .\[\&\>li\]\:mt-2>li{margin-top:.5rem}.chatkit-wrapper .\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chatkit-wrapper .\[\&\>span\]\:text-xs>span{font-size:.75rem;line-height:1rem}.chatkit-wrapper .\[\&\>svg\]\:size-4>svg{height:1rem;width:1rem}.chatkit-wrapper .\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.chatkit-wrapper .\[\&\[align\=center\]\]\:text-center[align=center]{text-align:center}.chatkit-wrapper .\[\&\[align\=right\]\]\:text-right[align=right]{text-align:right}.chatkit-wrapper .\[\&_p\]\:-mb-2 p{margin-bottom:-.5rem}.chatkit-wrapper .\[\&_pre\]\:overflow-x-auto pre{overflow-x:auto}.chatkit-wrapper .\[\&_pre\]\:rounded-b-lg pre{border-bottom-left-radius:.5rem;border-bottom-right-radius:.5rem}.chatkit-wrapper .\[\&_pre\]\:border pre{border-width:1px}.chatkit-wrapper .\[\&_pre\]\:p-4 pre{padding:1rem}.chatkit-wrapper .\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){height:1rem;width:1rem}.chatkit-wrapper .\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.chatkit-wrapper .\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.chatkit-wrapper .\[\&_svg\]\:text-background svg{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.chatkit-wrapper .\[\&_svg\]\:text-black svg{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.chatkit-wrapper [data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:-.5rem}.chatkit-wrapper [data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}.chatkit-wrapper [data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:-.5rem}.chatkit-wrapper [data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}@keyframes aui-pulse{50%{opacity:.5}}.chatkit-wrapper :where(.aui-md[data-status=running]):empty:after,.chatkit-wrapper :where(.aui-md[data-status=running])>:where(:is(ol,ul):last-child)>:where(li:last-child)>:where(:is(ol,ul):last-child)>:where(li:last-child)>:where(:is(ol,ul):last-child)>:where(li:last-child):after,.chatkit-wrapper :where(.aui-md[data-status=running])>:where(:is(ol,ul):last-child)>:where(li:last-child)>:where(:is(ol,ul):last-child)>:where(li:last-child:not(:has(*>li))):after,.chatkit-wrapper :where(.aui-md[data-status=running])>:where(:is(ol,ul):last-child)>:where(li:last-child:not(:has(*>li))):after,.chatkit-wrapper :where(.aui-md[data-status=running])>:where(:not(ol):not(ul):not(pre)):last-child:after,.chatkit-wrapper :where(.aui-md[data-status=running])>pre:last-child code:after{--aui-content:"\25cf";animation:aui-pulse 2s cubic-bezier(.4,0,.6,1) infinite;content:var(--aui-content);font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;margin-left:.25rem;margin-right:.25rem}.chatkit-wrapper .chatkit-md-text-p img,.chatkit-wrapper .chatkit-md-text-p video{max-width:600px}@keyframes aui-pulse-chatkit{50%{opacity:.5;transform:scale(.7)}}.chatkit-wrapper .aui-root :where(.aui-md[data-status=running]):empty:after,.chatkit-wrapper .aui-root :where(.aui-md[data-status=running])>:where(:is(ol,ul):last-child)>:where(li:last-child)>:where(:is(ol,ul):last-child)>:where(li:last-child)>:where(:is(ol,ul):last-child)>:where(li:last-child):after,.chatkit-wrapper .aui-root :where(.aui-md[data-status=running])>:where(:is(ol,ul):last-child)>:where(li:last-child)>:where(:is(ol,ul):last-child)>:where(li:last-child:not(:has(*>li))):after,.chatkit-wrapper .aui-root :where(.aui-md[data-status=running])>:where(:is(ol,ul):last-child)>:where(li:last-child:not(:has(*>li))):after,.chatkit-wrapper .aui-root :where(.aui-md[data-status=running])>:where(:not(ol):not(ul):not(pre)):last-child:after,.chatkit-wrapper .aui-root :where(.aui-md[data-status=running])>pre:last-child code:after{--aui-content:"\25cf";animation:aui-pulse-chatkit 1.5s cubic-bezier(.4,0,.6,1) infinite;content:var(--aui-content);display:inline-block;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;margin-left:.2rem;margin-right:.2rem}
|