@chat-lab/ui 0.1.0-beta.38 → 0.1.0-beta.39

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.
@@ -5,8 +5,20 @@ var React = require('react');
5
5
  var index = require('../../../../node_modules/ahooks/es/useVirtualList/index.cjs');
6
6
  var card = require('../../../../components/ui/card.cjs');
7
7
  var EventDetail = require('./EventDetail.cjs');
8
+ var keys = require('../../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keys.cjs');
8
9
 
9
10
  const renderSummary = (message) => {
11
+ if (message.error) {
12
+ return `error:${message.error}`;
13
+ }
14
+ if (message.actions?.stateDelta &&
15
+ keys(message.actions.stateDelta).length > 0) {
16
+ return `eventAction:state`;
17
+ }
18
+ if (message.actions?.artifactDelta &&
19
+ keys(message.actions.artifactDelta).length > 0) {
20
+ return `eventAction:artifact`;
21
+ }
10
22
  const parts = (message?.content?.parts || []).map((c) => {
11
23
  if (c.functionCall)
12
24
  return `functionCall:${c.functionCall.name}`;
@@ -18,6 +30,8 @@ const renderSummary = (message) => {
18
30
  return `inlineData:${c.inlineData.mimeType}`;
19
31
  if (c.fileData)
20
32
  return `fileData:${c.fileData.displayName}`;
33
+ if (c.errorMessage)
34
+ return `errorMessage:${c.errorMessage}`;
21
35
  return 'unknown';
22
36
  });
23
37
  const s = parts.join(' ');
@@ -43,7 +57,7 @@ const Events = (props) => {
43
57
  }
44
58
  return (jsxRuntime.jsx(card.Card, { className: "bg-background h-full flex flex-col w-full border-none", children: jsxRuntime.jsx(card.CardContent, { ref: containerRef, className: "flex-1 overflow-y-auto min-h-0 p-4", children: events.length === 0 ? (jsxRuntime.jsx("div", { className: "text-muted-foreground", children: "\u6682\u65E0\u4E8B\u4EF6" })) : (jsxRuntime.jsx("div", { ref: wrapperRef, children: list.map(ele => {
45
59
  const e = ele.data;
46
- return (jsxRuntime.jsx("div", { className: "rounded-md border cursor-pointer hover:bg-accent/50 transition-colors mb-2", onClick: () => setSelectedMessage(e), children: jsxRuntime.jsx("div", { className: "w-full", children: jsxRuntime.jsx("div", { className: "flex items-center justify-between px-4 py-3", children: jsxRuntime.jsxs("div", { className: "flex items-center gap-3 flex-1 min-w-0 mr-2 font-medium text-[#0C0D0E]", children: [jsxRuntime.jsx("div", { className: " text-muted-foreground shrink-0", children: ele.index }), jsxRuntime.jsx("div", { className: "truncate", children: renderSummary(e) })] }) }) }) }, e.id));
60
+ return (jsxRuntime.jsx("div", { className: "rounded-md border cursor-pointer hover:bg-accent/50 transition-colors mb-2 hover:bg-[#f5f5f5]", onClick: () => setSelectedMessage(e), children: jsxRuntime.jsx("div", { className: "w-full", children: jsxRuntime.jsx("div", { className: "flex items-center justify-between px-4 py-3", children: jsxRuntime.jsxs("div", { className: "flex items-center gap-3 flex-1 min-w-0 mr-2 font-medium text-[#0C0D0E]", children: [jsxRuntime.jsx("div", { className: " text-muted-foreground shrink-0", children: ele.index }), jsxRuntime.jsx("div", { className: "truncate", children: renderSummary(e) })] }) }) }) }, e.id));
47
61
  }) })) }) }));
48
62
  };
49
63
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../../src/adk/components/Debug/Events/index.tsx"],"sourcesContent":["import React, { useMemo, useState, useRef } from 'react';\nimport { useVirtualList } from 'ahooks';\nimport dayjs from 'dayjs';\nimport { EventsProps } from './types';\nimport { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '@/components/ui/collapsible';\nimport { Separator } from '@/components/ui/separator';\nimport { ADKMessage, MessageStatus } from '@chat-lab/core';\nimport Trace from '../Trace';\nimport { TraceSpan } from '../Trace/types';\nimport EventDetail from './EventDetail';\nimport {\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n} from '@/components/ui/sheet';\n\nconst renderSummary = (message: ADKMessage['adkResponses'][number]) => {\n const parts = (message?.content?.parts || []).map((c: any) => {\n if (c.functionCall) return `functionCall:${c.functionCall.name}`;\n if (c.functionResponse)\n return `functionResponse:${c.functionResponse.name}`;\n if (c.text) return `text:${c.text}`;\n if (c.inlineData) return `inlineData:${c.inlineData.mimeType}`;\n if (c.fileData) return `fileData:${c.fileData.displayName}`;\n return 'unknown';\n });\n const s = parts.join(' ');\n return s;\n};\nconst Events = (props: EventsProps) => {\n const { messages } = props;\n const [selectedMessage, setSelectedMessage] = useState<\n ADKMessage['adkResponses'][number] | undefined\n >();\n\n const containerRef = useRef(null);\n const wrapperRef = useRef(null);\n\n const events = useMemo(\n () =>\n messages\n .map(msg => msg.adkResponses)\n .filter(Boolean)\n .flat(),\n [messages],\n );\n\n const [list] = useVirtualList(events, {\n containerTarget: containerRef,\n wrapperTarget: wrapperRef,\n itemHeight: 60,\n overscan: 10,\n });\n\n if (selectedMessage) {\n return (\n <Card className=\"bg-background h-full overflow-hidden w-full border-none mt-2\">\n <EventDetail\n message={selectedMessage}\n onBack={() => setSelectedMessage(undefined)}\n />\n </Card>\n );\n }\n\n return (\n <Card className=\"bg-background h-full flex flex-col w-full border-none\">\n <CardContent\n ref={containerRef}\n className=\"flex-1 overflow-y-auto min-h-0 p-4\"\n >\n {events.length === 0 ? (\n <div className=\"text-muted-foreground\">暂无事件</div>\n ) : (\n <div ref={wrapperRef}>\n {list.map(ele => {\n const e = ele.data;\n return (\n <div\n key={e.id}\n className=\"rounded-md border cursor-pointer hover:bg-accent/50 transition-colors mb-2\"\n onClick={() => setSelectedMessage(e)}\n >\n <div className=\"w-full\">\n <div className=\"flex items-center justify-between px-4 py-3\">\n <div className=\"flex items-center gap-3 flex-1 min-w-0 mr-2 font-medium text-[#0C0D0E]\">\n <div className=\" text-muted-foreground shrink-0\">\n {ele.index}\n </div>\n <div className=\"truncate\">{renderSummary(e)}</div>\n </div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </CardContent>\n </Card>\n );\n};\n\nexport default Events;\n"],"names":["useState","useRef","useMemo","useVirtualList","_jsx","Card","CardContent","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../../src/adk/components/Debug/Events/index.tsx"],"sourcesContent":["import React, { useMemo, useState, useRef } from 'react';\nimport { useVirtualList } from 'ahooks';\nimport dayjs from 'dayjs';\nimport { EventsProps } from './types';\nimport { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '@/components/ui/collapsible';\nimport { Separator } from '@/components/ui/separator';\nimport { ADKMessage, MessageStatus } from '@chat-lab/core';\nimport Trace from '../Trace';\nimport { TraceSpan } from '../Trace/types';\nimport EventDetail from './EventDetail';\nimport {\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n} from '@/components/ui/sheet';\nimport { keys } from 'lodash-es';\n\nconst renderSummary = (message: ADKMessage['adkResponses'][number]) => {\n if (message.error) {\n return `error:${message.error}`;\n }\n if (\n message.actions?.stateDelta &&\n keys(message.actions.stateDelta).length > 0\n ) {\n return `eventAction:state`;\n }\n if (\n message.actions?.artifactDelta &&\n keys(message.actions.artifactDelta).length > 0\n ) {\n return `eventAction:artifact`;\n }\n const parts = (message?.content?.parts || []).map((c: any) => {\n if (c.functionCall) return `functionCall:${c.functionCall.name}`;\n if (c.functionResponse)\n return `functionResponse:${c.functionResponse.name}`;\n if (c.text) return `text:${c.text}`;\n if (c.inlineData) return `inlineData:${c.inlineData.mimeType}`;\n if (c.fileData) return `fileData:${c.fileData.displayName}`;\n if (c.errorMessage) return `errorMessage:${c.errorMessage}`;\n return 'unknown';\n });\n const s = parts.join(' ');\n return s;\n};\nconst Events = (props: EventsProps) => {\n const { messages } = props;\n const [selectedMessage, setSelectedMessage] = useState<\n ADKMessage['adkResponses'][number] | undefined\n >();\n\n const containerRef = useRef(null);\n const wrapperRef = useRef(null);\n\n const events = useMemo(\n () =>\n messages\n .map(msg => msg.adkResponses)\n .filter(Boolean)\n .flat(),\n [messages],\n );\n\n const [list] = useVirtualList(events, {\n containerTarget: containerRef,\n wrapperTarget: wrapperRef,\n itemHeight: 60,\n overscan: 10,\n });\n\n if (selectedMessage) {\n return (\n <Card className=\"bg-background h-full overflow-hidden w-full border-none mt-2\">\n <EventDetail\n message={selectedMessage}\n onBack={() => setSelectedMessage(undefined)}\n />\n </Card>\n );\n }\n\n return (\n <Card className=\"bg-background h-full flex flex-col w-full border-none\">\n <CardContent\n ref={containerRef}\n className=\"flex-1 overflow-y-auto min-h-0 p-4\"\n >\n {events.length === 0 ? (\n <div className=\"text-muted-foreground\">暂无事件</div>\n ) : (\n <div ref={wrapperRef}>\n {list.map(ele => {\n const e = ele.data;\n return (\n <div\n key={e.id}\n className=\"rounded-md border cursor-pointer hover:bg-accent/50 transition-colors mb-2 hover:bg-[#f5f5f5]\"\n onClick={() => setSelectedMessage(e)}\n >\n <div className=\"w-full\">\n <div className=\"flex items-center justify-between px-4 py-3\">\n <div className=\"flex items-center gap-3 flex-1 min-w-0 mr-2 font-medium text-[#0C0D0E]\">\n <div className=\" text-muted-foreground shrink-0\">\n {ele.index}\n </div>\n <div className=\"truncate\">{renderSummary(e)}</div>\n </div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </CardContent>\n </Card>\n );\n};\n\nexport default Events;\n"],"names":["useState","useRef","useMemo","useVirtualList","_jsx","Card","CardContent","_jsxs"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/adk/components/Debug/Events/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAgCtC,QAAA,MAAM,MAAM,GAAI,OAAO,WAAW,gBAwEjC,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/adk/components/Debug/Events/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAiDtC,QAAA,MAAM,MAAM,GAAI,OAAO,WAAW,gBAwEjC,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -3,8 +3,20 @@ import { useState, useRef, useMemo } from 'react';
3
3
  import useVirtualList from '../../../../node_modules/ahooks/es/useVirtualList/index.js';
4
4
  import { Card, CardContent } from '../../../../components/ui/card.js';
5
5
  import EventDetail from './EventDetail.js';
6
+ import keys from '../../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keys.js';
6
7
 
7
8
  const renderSummary = (message) => {
9
+ if (message.error) {
10
+ return `error:${message.error}`;
11
+ }
12
+ if (message.actions?.stateDelta &&
13
+ keys(message.actions.stateDelta).length > 0) {
14
+ return `eventAction:state`;
15
+ }
16
+ if (message.actions?.artifactDelta &&
17
+ keys(message.actions.artifactDelta).length > 0) {
18
+ return `eventAction:artifact`;
19
+ }
8
20
  const parts = (message?.content?.parts || []).map((c) => {
9
21
  if (c.functionCall)
10
22
  return `functionCall:${c.functionCall.name}`;
@@ -16,6 +28,8 @@ const renderSummary = (message) => {
16
28
  return `inlineData:${c.inlineData.mimeType}`;
17
29
  if (c.fileData)
18
30
  return `fileData:${c.fileData.displayName}`;
31
+ if (c.errorMessage)
32
+ return `errorMessage:${c.errorMessage}`;
19
33
  return 'unknown';
20
34
  });
21
35
  const s = parts.join(' ');
@@ -41,7 +55,7 @@ const Events = (props) => {
41
55
  }
42
56
  return (jsx(Card, { className: "bg-background h-full flex flex-col w-full border-none", children: jsx(CardContent, { ref: containerRef, className: "flex-1 overflow-y-auto min-h-0 p-4", children: events.length === 0 ? (jsx("div", { className: "text-muted-foreground", children: "\u6682\u65E0\u4E8B\u4EF6" })) : (jsx("div", { ref: wrapperRef, children: list.map(ele => {
43
57
  const e = ele.data;
44
- return (jsx("div", { className: "rounded-md border cursor-pointer hover:bg-accent/50 transition-colors mb-2", onClick: () => setSelectedMessage(e), children: jsx("div", { className: "w-full", children: jsx("div", { className: "flex items-center justify-between px-4 py-3", children: jsxs("div", { className: "flex items-center gap-3 flex-1 min-w-0 mr-2 font-medium text-[#0C0D0E]", children: [jsx("div", { className: " text-muted-foreground shrink-0", children: ele.index }), jsx("div", { className: "truncate", children: renderSummary(e) })] }) }) }) }, e.id));
58
+ return (jsx("div", { className: "rounded-md border cursor-pointer hover:bg-accent/50 transition-colors mb-2 hover:bg-[#f5f5f5]", onClick: () => setSelectedMessage(e), children: jsx("div", { className: "w-full", children: jsx("div", { className: "flex items-center justify-between px-4 py-3", children: jsxs("div", { className: "flex items-center gap-3 flex-1 min-w-0 mr-2 font-medium text-[#0C0D0E]", children: [jsx("div", { className: " text-muted-foreground shrink-0", children: ele.index }), jsx("div", { className: "truncate", children: renderSummary(e) })] }) }) }) }, e.id));
45
59
  }) })) }) }));
46
60
  };
47
61
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/adk/components/Debug/Events/index.tsx"],"sourcesContent":["import React, { useMemo, useState, useRef } from 'react';\nimport { useVirtualList } from 'ahooks';\nimport dayjs from 'dayjs';\nimport { EventsProps } from './types';\nimport { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '@/components/ui/collapsible';\nimport { Separator } from '@/components/ui/separator';\nimport { ADKMessage, MessageStatus } from '@chat-lab/core';\nimport Trace from '../Trace';\nimport { TraceSpan } from '../Trace/types';\nimport EventDetail from './EventDetail';\nimport {\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n} from '@/components/ui/sheet';\n\nconst renderSummary = (message: ADKMessage['adkResponses'][number]) => {\n const parts = (message?.content?.parts || []).map((c: any) => {\n if (c.functionCall) return `functionCall:${c.functionCall.name}`;\n if (c.functionResponse)\n return `functionResponse:${c.functionResponse.name}`;\n if (c.text) return `text:${c.text}`;\n if (c.inlineData) return `inlineData:${c.inlineData.mimeType}`;\n if (c.fileData) return `fileData:${c.fileData.displayName}`;\n return 'unknown';\n });\n const s = parts.join(' ');\n return s;\n};\nconst Events = (props: EventsProps) => {\n const { messages } = props;\n const [selectedMessage, setSelectedMessage] = useState<\n ADKMessage['adkResponses'][number] | undefined\n >();\n\n const containerRef = useRef(null);\n const wrapperRef = useRef(null);\n\n const events = useMemo(\n () =>\n messages\n .map(msg => msg.adkResponses)\n .filter(Boolean)\n .flat(),\n [messages],\n );\n\n const [list] = useVirtualList(events, {\n containerTarget: containerRef,\n wrapperTarget: wrapperRef,\n itemHeight: 60,\n overscan: 10,\n });\n\n if (selectedMessage) {\n return (\n <Card className=\"bg-background h-full overflow-hidden w-full border-none mt-2\">\n <EventDetail\n message={selectedMessage}\n onBack={() => setSelectedMessage(undefined)}\n />\n </Card>\n );\n }\n\n return (\n <Card className=\"bg-background h-full flex flex-col w-full border-none\">\n <CardContent\n ref={containerRef}\n className=\"flex-1 overflow-y-auto min-h-0 p-4\"\n >\n {events.length === 0 ? (\n <div className=\"text-muted-foreground\">暂无事件</div>\n ) : (\n <div ref={wrapperRef}>\n {list.map(ele => {\n const e = ele.data;\n return (\n <div\n key={e.id}\n className=\"rounded-md border cursor-pointer hover:bg-accent/50 transition-colors mb-2\"\n onClick={() => setSelectedMessage(e)}\n >\n <div className=\"w-full\">\n <div className=\"flex items-center justify-between px-4 py-3\">\n <div className=\"flex items-center gap-3 flex-1 min-w-0 mr-2 font-medium text-[#0C0D0E]\">\n <div className=\" text-muted-foreground shrink-0\">\n {ele.index}\n </div>\n <div className=\"truncate\">{renderSummary(e)}</div>\n </div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </CardContent>\n </Card>\n );\n};\n\nexport default Events;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/adk/components/Debug/Events/index.tsx"],"sourcesContent":["import React, { useMemo, useState, useRef } from 'react';\nimport { useVirtualList } from 'ahooks';\nimport dayjs from 'dayjs';\nimport { EventsProps } from './types';\nimport { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '@/components/ui/collapsible';\nimport { Separator } from '@/components/ui/separator';\nimport { ADKMessage, MessageStatus } from '@chat-lab/core';\nimport Trace from '../Trace';\nimport { TraceSpan } from '../Trace/types';\nimport EventDetail from './EventDetail';\nimport {\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n} from '@/components/ui/sheet';\nimport { keys } from 'lodash-es';\n\nconst renderSummary = (message: ADKMessage['adkResponses'][number]) => {\n if (message.error) {\n return `error:${message.error}`;\n }\n if (\n message.actions?.stateDelta &&\n keys(message.actions.stateDelta).length > 0\n ) {\n return `eventAction:state`;\n }\n if (\n message.actions?.artifactDelta &&\n keys(message.actions.artifactDelta).length > 0\n ) {\n return `eventAction:artifact`;\n }\n const parts = (message?.content?.parts || []).map((c: any) => {\n if (c.functionCall) return `functionCall:${c.functionCall.name}`;\n if (c.functionResponse)\n return `functionResponse:${c.functionResponse.name}`;\n if (c.text) return `text:${c.text}`;\n if (c.inlineData) return `inlineData:${c.inlineData.mimeType}`;\n if (c.fileData) return `fileData:${c.fileData.displayName}`;\n if (c.errorMessage) return `errorMessage:${c.errorMessage}`;\n return 'unknown';\n });\n const s = parts.join(' ');\n return s;\n};\nconst Events = (props: EventsProps) => {\n const { messages } = props;\n const [selectedMessage, setSelectedMessage] = useState<\n ADKMessage['adkResponses'][number] | undefined\n >();\n\n const containerRef = useRef(null);\n const wrapperRef = useRef(null);\n\n const events = useMemo(\n () =>\n messages\n .map(msg => msg.adkResponses)\n .filter(Boolean)\n .flat(),\n [messages],\n );\n\n const [list] = useVirtualList(events, {\n containerTarget: containerRef,\n wrapperTarget: wrapperRef,\n itemHeight: 60,\n overscan: 10,\n });\n\n if (selectedMessage) {\n return (\n <Card className=\"bg-background h-full overflow-hidden w-full border-none mt-2\">\n <EventDetail\n message={selectedMessage}\n onBack={() => setSelectedMessage(undefined)}\n />\n </Card>\n );\n }\n\n return (\n <Card className=\"bg-background h-full flex flex-col w-full border-none\">\n <CardContent\n ref={containerRef}\n className=\"flex-1 overflow-y-auto min-h-0 p-4\"\n >\n {events.length === 0 ? (\n <div className=\"text-muted-foreground\">暂无事件</div>\n ) : (\n <div ref={wrapperRef}>\n {list.map(ele => {\n const e = ele.data;\n return (\n <div\n key={e.id}\n className=\"rounded-md border cursor-pointer hover:bg-accent/50 transition-colors mb-2 hover:bg-[#f5f5f5]\"\n onClick={() => setSelectedMessage(e)}\n >\n <div className=\"w-full\">\n <div className=\"flex items-center justify-between px-4 py-3\">\n <div className=\"flex items-center gap-3 flex-1 min-w-0 mr-2 font-medium text-[#0C0D0E]\">\n <div className=\" text-muted-foreground shrink-0\">\n {ele.index}\n </div>\n <div className=\"truncate\">{renderSummary(e)}</div>\n </div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </CardContent>\n </Card>\n );\n};\n\nexport default Events;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
@@ -102,7 +102,11 @@ const useEvent = (sessionId, region) => {
102
102
  flatTree,
103
103
  trace,
104
104
  };
105
- }, { ready: !!sessionId, refreshDeps: [sessionId] });
105
+ }, {
106
+ ready: !!sessionId,
107
+ refreshDeps: [sessionId],
108
+ pollingInterval: 3 * 1000,
109
+ });
106
110
  return data;
107
111
  };
108
112
 
@@ -1 +1 @@
1
- {"version":3,"file":"useEvents.cjs","sources":["../../../src/adk/hooks/useEvents.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useRequest } from 'ahooks';\nimport IaasFetch from '@byted-iaas/fetch';\nimport { TraceSpan, TraceNode } from '../components/Debug/Trace/types';\n\nconst FetchInstance = new IaasFetch({\n service: 'apmplus_server',\n version: '2024-07-30',\n platform: 'VOLCENGINE',\n disablePreTcc: true,\n});\n\ninterface RawSpan {\n OperationName: string;\n SpanId: string;\n TraceId: string;\n Input: string;\n Output: string;\n SpanKind: string;\n Model: string;\n InputTokens: number;\n OutputTokens: number;\n TotalTokens: number;\n Duration: number;\n StartTime: number;\n Tags?: Record<string, string>;\n EndTime: number;\n ParentSpanId?: string;\n}\n\n// Helper function to convert RawSpan to TraceSpan\nconst convertToTraceSpan = (raw: RawSpan): TraceSpan => {\n const statusCode = raw?.Tags?.['http.status_code'];\n let status: 'success' | 'error' = 'success';\n if (statusCode && statusCode !== '200') {\n status = 'error';\n }\n return {\n id: raw.SpanId,\n name: raw.OperationName,\n status: status, // Default to success as per provided data\n startTime: raw.StartTime,\n endTime: raw.EndTime,\n duration: raw.Duration,\n tags: raw.Tags || {},\n children: [],\n metadata: {\n parentSpanId: raw.ParentSpanId,\n input: raw.Input,\n output: raw.Output,\n spanKind: raw.SpanKind,\n model: raw.Model,\n tokens: {\n input: raw.InputTokens,\n output: raw.OutputTokens,\n total: raw.TotalTokens,\n },\n },\n };\n};\n\n// Function to build the tree\nconst buildTraceTree = (spans: RawSpan[]): TraceSpan[] => {\n // Convert all raw spans to TraceSpan objects first\n const traceSpans = spans.map(convertToTraceSpan);\n const spanMap = new Map<string, TraceSpan>();\n const roots: TraceSpan[] = [];\n\n // Index by ID\n traceSpans.forEach(span => spanMap.set(span.id, span));\n\n // Build relationships\n traceSpans.forEach(span => {\n const parentSpanId = span.metadata?.parentSpanId as string;\n if (parentSpanId && spanMap.has(parentSpanId)) {\n const parent = spanMap.get(parentSpanId)!;\n parent.children = parent.children || [];\n parent.children.push(span);\n } else {\n roots.push(span);\n }\n });\n\n return roots;\n};\n\n// Helper to flatten the tree\nconst flattenTree = (spans: TraceSpan[], level: number = 0): TraceNode[] => {\n const tree = spans.flatMap(span => [\n { span, level },\n ...(span.children ? flattenTree(span.children, level + 1) : []),\n ]);\n return tree;\n};\n\nexport const useEvent = (sessionId: string | null, region: string) => {\n const { data } = useRequest(\n async () => {\n const now = dayjs();\n const res = await FetchInstance.request<{ data: { Spans: RawSpan[] } }>({\n action: 'GetSessionSpans',\n errorDisplay: 'none',\n headers: {\n 'x-apmplus-region': region,\n },\n region: region,\n params: {\n SessionId: sessionId || '',\n StartTime: dayjs().subtract(1, 'd').valueOf(),\n EndTime: now.valueOf(),\n },\n type: 'open-top',\n method: 'POST',\n });\n const [err, data] = res;\n if (err) {\n throw err as any;\n }\n\n const spans: RawSpan[] = data?.data?.Spans || [];\n\n // Build Trace Tree\n const traceTree = buildTraceTree(spans);\n const trace = traceTree.length > 0 ? traceTree : null;\n const flatTree = traceTree.length > 0 ? flattenTree(traceTree) : [];\n\n return {\n traceTree,\n flatTree,\n trace,\n };\n },\n { ready: !!sessionId, refreshDeps: [sessionId] },\n );\n\n return data;\n};\n"],"names":["IaasFetch","dayjs"],"mappings":"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"}
1
+ {"version":3,"file":"useEvents.cjs","sources":["../../../src/adk/hooks/useEvents.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useRequest } from 'ahooks';\nimport IaasFetch from '@byted-iaas/fetch';\nimport { TraceSpan, TraceNode } from '../components/Debug/Trace/types';\n\nconst FetchInstance = new IaasFetch({\n service: 'apmplus_server',\n version: '2024-07-30',\n platform: 'VOLCENGINE',\n disablePreTcc: true,\n});\n\ninterface RawSpan {\n OperationName: string;\n SpanId: string;\n TraceId: string;\n Input: string;\n Output: string;\n SpanKind: string;\n Model: string;\n InputTokens: number;\n OutputTokens: number;\n TotalTokens: number;\n Duration: number;\n StartTime: number;\n Tags?: Record<string, string>;\n EndTime: number;\n ParentSpanId?: string;\n}\n\n// Helper function to convert RawSpan to TraceSpan\nconst convertToTraceSpan = (raw: RawSpan): TraceSpan => {\n const statusCode = raw?.Tags?.['http.status_code'];\n let status: 'success' | 'error' = 'success';\n if (statusCode && statusCode !== '200') {\n status = 'error';\n }\n return {\n id: raw.SpanId,\n name: raw.OperationName,\n status: status, // Default to success as per provided data\n startTime: raw.StartTime,\n endTime: raw.EndTime,\n duration: raw.Duration,\n tags: raw.Tags || {},\n children: [],\n metadata: {\n parentSpanId: raw.ParentSpanId,\n input: raw.Input,\n output: raw.Output,\n spanKind: raw.SpanKind,\n model: raw.Model,\n tokens: {\n input: raw.InputTokens,\n output: raw.OutputTokens,\n total: raw.TotalTokens,\n },\n },\n };\n};\n\n// Function to build the tree\nconst buildTraceTree = (spans: RawSpan[]): TraceSpan[] => {\n // Convert all raw spans to TraceSpan objects first\n const traceSpans = spans.map(convertToTraceSpan);\n const spanMap = new Map<string, TraceSpan>();\n const roots: TraceSpan[] = [];\n\n // Index by ID\n traceSpans.forEach(span => spanMap.set(span.id, span));\n\n // Build relationships\n traceSpans.forEach(span => {\n const parentSpanId = span.metadata?.parentSpanId as string;\n if (parentSpanId && spanMap.has(parentSpanId)) {\n const parent = spanMap.get(parentSpanId)!;\n parent.children = parent.children || [];\n parent.children.push(span);\n } else {\n roots.push(span);\n }\n });\n\n return roots;\n};\n\n// Helper to flatten the tree\nconst flattenTree = (spans: TraceSpan[], level: number = 0): TraceNode[] => {\n const tree = spans.flatMap(span => [\n { span, level },\n ...(span.children ? flattenTree(span.children, level + 1) : []),\n ]);\n return tree;\n};\n\nexport const useEvent = (sessionId: string | null, region: string) => {\n const { data } = useRequest(\n async () => {\n const now = dayjs();\n const res = await FetchInstance.request<{ data: { Spans: RawSpan[] } }>({\n action: 'GetSessionSpans',\n errorDisplay: 'none',\n headers: {\n 'x-apmplus-region': region,\n },\n region: region,\n params: {\n SessionId: sessionId || '',\n StartTime: dayjs().subtract(1, 'd').valueOf(),\n EndTime: now.valueOf(),\n },\n type: 'open-top',\n method: 'POST',\n });\n const [err, data] = res;\n if (err) {\n throw err as any;\n }\n\n const spans: RawSpan[] = data?.data?.Spans || [];\n\n // Build Trace Tree\n const traceTree = buildTraceTree(spans);\n const trace = traceTree.length > 0 ? traceTree : null;\n const flatTree = traceTree.length > 0 ? flattenTree(traceTree) : [];\n\n return {\n traceTree,\n flatTree,\n trace,\n };\n },\n {\n ready: !!sessionId,\n refreshDeps: [sessionId],\n pollingInterval: 3 * 1000,\n },\n );\n\n return data;\n};\n"],"names":["IaasFetch","dayjs"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useEvents.d.ts","sourceRoot":"","sources":["../../../src/adk/hooks/useEvents.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AA4FvE,eAAO,MAAM,QAAQ,GAAI,WAAW,MAAM,GAAG,IAAI,EAAE,QAAQ,MAAM;;;;aAyChE,CAAC"}
1
+ {"version":3,"file":"useEvents.d.ts","sourceRoot":"","sources":["../../../src/adk/hooks/useEvents.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AA4FvE,eAAO,MAAM,QAAQ,GAAI,WAAW,MAAM,GAAG,IAAI,EAAE,QAAQ,MAAM;;;;aA6ChE,CAAC"}
@@ -100,7 +100,11 @@ const useEvent = (sessionId, region) => {
100
100
  flatTree,
101
101
  trace,
102
102
  };
103
- }, { ready: !!sessionId, refreshDeps: [sessionId] });
103
+ }, {
104
+ ready: !!sessionId,
105
+ refreshDeps: [sessionId],
106
+ pollingInterval: 3 * 1000,
107
+ });
104
108
  return data;
105
109
  };
106
110
 
@@ -1 +1 @@
1
- {"version":3,"file":"useEvents.js","sources":["../../../src/adk/hooks/useEvents.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useRequest } from 'ahooks';\nimport IaasFetch from '@byted-iaas/fetch';\nimport { TraceSpan, TraceNode } from '../components/Debug/Trace/types';\n\nconst FetchInstance = new IaasFetch({\n service: 'apmplus_server',\n version: '2024-07-30',\n platform: 'VOLCENGINE',\n disablePreTcc: true,\n});\n\ninterface RawSpan {\n OperationName: string;\n SpanId: string;\n TraceId: string;\n Input: string;\n Output: string;\n SpanKind: string;\n Model: string;\n InputTokens: number;\n OutputTokens: number;\n TotalTokens: number;\n Duration: number;\n StartTime: number;\n Tags?: Record<string, string>;\n EndTime: number;\n ParentSpanId?: string;\n}\n\n// Helper function to convert RawSpan to TraceSpan\nconst convertToTraceSpan = (raw: RawSpan): TraceSpan => {\n const statusCode = raw?.Tags?.['http.status_code'];\n let status: 'success' | 'error' = 'success';\n if (statusCode && statusCode !== '200') {\n status = 'error';\n }\n return {\n id: raw.SpanId,\n name: raw.OperationName,\n status: status, // Default to success as per provided data\n startTime: raw.StartTime,\n endTime: raw.EndTime,\n duration: raw.Duration,\n tags: raw.Tags || {},\n children: [],\n metadata: {\n parentSpanId: raw.ParentSpanId,\n input: raw.Input,\n output: raw.Output,\n spanKind: raw.SpanKind,\n model: raw.Model,\n tokens: {\n input: raw.InputTokens,\n output: raw.OutputTokens,\n total: raw.TotalTokens,\n },\n },\n };\n};\n\n// Function to build the tree\nconst buildTraceTree = (spans: RawSpan[]): TraceSpan[] => {\n // Convert all raw spans to TraceSpan objects first\n const traceSpans = spans.map(convertToTraceSpan);\n const spanMap = new Map<string, TraceSpan>();\n const roots: TraceSpan[] = [];\n\n // Index by ID\n traceSpans.forEach(span => spanMap.set(span.id, span));\n\n // Build relationships\n traceSpans.forEach(span => {\n const parentSpanId = span.metadata?.parentSpanId as string;\n if (parentSpanId && spanMap.has(parentSpanId)) {\n const parent = spanMap.get(parentSpanId)!;\n parent.children = parent.children || [];\n parent.children.push(span);\n } else {\n roots.push(span);\n }\n });\n\n return roots;\n};\n\n// Helper to flatten the tree\nconst flattenTree = (spans: TraceSpan[], level: number = 0): TraceNode[] => {\n const tree = spans.flatMap(span => [\n { span, level },\n ...(span.children ? flattenTree(span.children, level + 1) : []),\n ]);\n return tree;\n};\n\nexport const useEvent = (sessionId: string | null, region: string) => {\n const { data } = useRequest(\n async () => {\n const now = dayjs();\n const res = await FetchInstance.request<{ data: { Spans: RawSpan[] } }>({\n action: 'GetSessionSpans',\n errorDisplay: 'none',\n headers: {\n 'x-apmplus-region': region,\n },\n region: region,\n params: {\n SessionId: sessionId || '',\n StartTime: dayjs().subtract(1, 'd').valueOf(),\n EndTime: now.valueOf(),\n },\n type: 'open-top',\n method: 'POST',\n });\n const [err, data] = res;\n if (err) {\n throw err as any;\n }\n\n const spans: RawSpan[] = data?.data?.Spans || [];\n\n // Build Trace Tree\n const traceTree = buildTraceTree(spans);\n const trace = traceTree.length > 0 ? traceTree : null;\n const flatTree = traceTree.length > 0 ? flattenTree(traceTree) : [];\n\n return {\n traceTree,\n flatTree,\n trace,\n };\n },\n { ready: !!sessionId, refreshDeps: [sessionId] },\n );\n\n return data;\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useEvents.js","sources":["../../../src/adk/hooks/useEvents.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useRequest } from 'ahooks';\nimport IaasFetch from '@byted-iaas/fetch';\nimport { TraceSpan, TraceNode } from '../components/Debug/Trace/types';\n\nconst FetchInstance = new IaasFetch({\n service: 'apmplus_server',\n version: '2024-07-30',\n platform: 'VOLCENGINE',\n disablePreTcc: true,\n});\n\ninterface RawSpan {\n OperationName: string;\n SpanId: string;\n TraceId: string;\n Input: string;\n Output: string;\n SpanKind: string;\n Model: string;\n InputTokens: number;\n OutputTokens: number;\n TotalTokens: number;\n Duration: number;\n StartTime: number;\n Tags?: Record<string, string>;\n EndTime: number;\n ParentSpanId?: string;\n}\n\n// Helper function to convert RawSpan to TraceSpan\nconst convertToTraceSpan = (raw: RawSpan): TraceSpan => {\n const statusCode = raw?.Tags?.['http.status_code'];\n let status: 'success' | 'error' = 'success';\n if (statusCode && statusCode !== '200') {\n status = 'error';\n }\n return {\n id: raw.SpanId,\n name: raw.OperationName,\n status: status, // Default to success as per provided data\n startTime: raw.StartTime,\n endTime: raw.EndTime,\n duration: raw.Duration,\n tags: raw.Tags || {},\n children: [],\n metadata: {\n parentSpanId: raw.ParentSpanId,\n input: raw.Input,\n output: raw.Output,\n spanKind: raw.SpanKind,\n model: raw.Model,\n tokens: {\n input: raw.InputTokens,\n output: raw.OutputTokens,\n total: raw.TotalTokens,\n },\n },\n };\n};\n\n// Function to build the tree\nconst buildTraceTree = (spans: RawSpan[]): TraceSpan[] => {\n // Convert all raw spans to TraceSpan objects first\n const traceSpans = spans.map(convertToTraceSpan);\n const spanMap = new Map<string, TraceSpan>();\n const roots: TraceSpan[] = [];\n\n // Index by ID\n traceSpans.forEach(span => spanMap.set(span.id, span));\n\n // Build relationships\n traceSpans.forEach(span => {\n const parentSpanId = span.metadata?.parentSpanId as string;\n if (parentSpanId && spanMap.has(parentSpanId)) {\n const parent = spanMap.get(parentSpanId)!;\n parent.children = parent.children || [];\n parent.children.push(span);\n } else {\n roots.push(span);\n }\n });\n\n return roots;\n};\n\n// Helper to flatten the tree\nconst flattenTree = (spans: TraceSpan[], level: number = 0): TraceNode[] => {\n const tree = spans.flatMap(span => [\n { span, level },\n ...(span.children ? flattenTree(span.children, level + 1) : []),\n ]);\n return tree;\n};\n\nexport const useEvent = (sessionId: string | null, region: string) => {\n const { data } = useRequest(\n async () => {\n const now = dayjs();\n const res = await FetchInstance.request<{ data: { Spans: RawSpan[] } }>({\n action: 'GetSessionSpans',\n errorDisplay: 'none',\n headers: {\n 'x-apmplus-region': region,\n },\n region: region,\n params: {\n SessionId: sessionId || '',\n StartTime: dayjs().subtract(1, 'd').valueOf(),\n EndTime: now.valueOf(),\n },\n type: 'open-top',\n method: 'POST',\n });\n const [err, data] = res;\n if (err) {\n throw err as any;\n }\n\n const spans: RawSpan[] = data?.data?.Spans || [];\n\n // Build Trace Tree\n const traceTree = buildTraceTree(spans);\n const trace = traceTree.length > 0 ? traceTree : null;\n const flatTree = traceTree.length > 0 ? flattenTree(traceTree) : [];\n\n return {\n traceTree,\n flatTree,\n trace,\n };\n },\n {\n ready: !!sessionId,\n refreshDeps: [sessionId],\n pollingInterval: 3 * 1000,\n },\n );\n\n return data;\n};\n"],"names":[],"mappings":"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"}
@@ -16,7 +16,7 @@ var trash2 = require('../node_modules/.pnpm/lucide-react@0.552.0_react@17.0.2/no
16
16
  const ThreadOptionsMenu = ({ threadId, onEditName, onDelete, className = '', }) => {
17
17
  React.useState(false);
18
18
  const [newThreadName, setNewThreadName] = React.useState('');
19
- const { currentThread } = useThread();
19
+ const { currentThread, threadList } = useThread();
20
20
  const ref = ChatkitContext.useChatkitRef();
21
21
  const handleSaveName = () => {
22
22
  if (newThreadName.trim()) {
@@ -25,6 +25,13 @@ const ThreadOptionsMenu = ({ threadId, onEditName, onDelete, className = '', })
25
25
  }
26
26
  };
27
27
  const handleDelete = () => {
28
+ const selectableThreadList = threadList.filter(thread => thread.id !== threadId);
29
+ if (selectableThreadList.length === 0) {
30
+ console.warn('[warning]: cannot delete the last thread');
31
+ return;
32
+ }
33
+ ref?.setCurrentThread(selectableThreadList[0]?.id);
34
+ ref?.abortMessage(threadId);
28
35
  ref?.deleteThread(threadId);
29
36
  };
30
37
  const [showEditDialog, setShowEditDialog] = React.useState(false);
@@ -32,11 +39,11 @@ const ThreadOptionsMenu = ({ threadId, onEditName, onDelete, className = '', })
32
39
  if (e.key === 'Enter' && newThreadName.trim()) {
33
40
  handleSaveName();
34
41
  }
35
- } }) }) }), jsxRuntime.jsxs(dialog.DialogFooter, { className: "flex gap-3 pt-6 border-t border-gray-100", children: [jsxRuntime.jsx(button.Button, { variant: "ghost", onClick: () => setShowEditDialog(false), className: "flex-1 h-11 rounded-xl hover:bg-gray-100 transition-all duration-200 font-medium", children: "\u53D6\u6D88" }), jsxRuntime.jsx(button.Button, { onClick: handleSaveName, disabled: !newThreadName.trim(), className: "flex-1 h-11 rounded-xl disabled:from-gray-300 disabled:to-gray-300 disabled:cursor-not-allowed shadow-md hover:shadow-lg transition-all duration-200 font-medium", children: "\u4FDD\u5B58\u66F4\u6539" })] })] }) }), jsxRuntime.jsxs(index.DropdownMenu, { children: [jsxRuntime.jsx(index.DropdownMenuTrigger, { asChild: true, children: jsxRuntime.jsx("button", { className: utils.cn('flex items-center justify-center h-8 w-8 rounded-full hover:bg-gray-100 transition-colors', className), "aria-label": `线程 ${threadId} 选项`, type: "button", children: jsxRuntime.jsx(ellipsis.default, { className: "h-4 w-4 text-[#808388]" }) }) }), jsxRuntime.jsx(index.DropdownMenuContent, { align: "end", className: "bg-white py-[8px] px-[6px] rounded-[8px]", children: jsxRuntime.jsxs(index.DropdownMenuItem, { disabled: currentThread?.id === threadId, className: utils.cn('cursor-pointer flex items-center hover:bg-[rgba(46,50,56,0.05)] px-2 py-1 rounded-[4px]', {
36
- 'cursor-not-allowed text-[#808388] opacity-50': currentThread?.id === threadId,
42
+ } }) }) }), jsxRuntime.jsxs(dialog.DialogFooter, { className: "flex gap-3 pt-6 border-t border-gray-100", children: [jsxRuntime.jsx(button.Button, { variant: "ghost", onClick: () => setShowEditDialog(false), className: "flex-1 h-11 rounded-xl hover:bg-gray-100 transition-all duration-200 font-medium", children: "\u53D6\u6D88" }), jsxRuntime.jsx(button.Button, { onClick: handleSaveName, disabled: !newThreadName.trim(), className: "flex-1 h-11 rounded-xl disabled:from-gray-300 disabled:to-gray-300 disabled:cursor-not-allowed shadow-md hover:shadow-lg transition-all duration-200 font-medium", children: "\u4FDD\u5B58\u66F4\u6539" })] })] }) }), jsxRuntime.jsxs(index.DropdownMenu, { children: [jsxRuntime.jsx(index.DropdownMenuTrigger, { asChild: true, children: jsxRuntime.jsx("button", { className: utils.cn('flex items-center justify-center h-8 w-8 rounded-full hover:bg-gray-100 transition-colors', className), "aria-label": `线程 ${threadId} 选项`, type: "button", children: jsxRuntime.jsx(ellipsis.default, { className: "h-4 w-4 text-[#808388]" }) }) }), jsxRuntime.jsx(index.DropdownMenuContent, { align: "end", className: "bg-white py-[8px] px-[6px] rounded-[8px]", children: jsxRuntime.jsxs(index.DropdownMenuItem, { disabled: threadList.length === 1, className: utils.cn('cursor-pointer flex items-center hover:bg-[rgba(46,50,56,0.05)] px-2 py-1 rounded-[4px]', {
43
+ 'cursor-not-allowed text-[#808388] opacity-50': threadList.length === 1,
37
44
  }), onClick: (e) => {
38
45
  e.stopPropagation();
39
- if (currentThread?.id === threadId) {
46
+ if (threadList.length === 1) {
40
47
  return;
41
48
  }
42
49
  handleDelete();
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadOptionsMenu.cjs","sources":["../../src/components/ThreadOptionsMenu.tsx"],"sourcesContent":["import React from 'react';\nimport { Ellipsis } from 'lucide-react';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@radix-ui/react-dropdown-menu';\nimport { Trash2 } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport Edit from '@/assets/Edit';\n\ninterface ThreadOptionsMenuProps {\n threadId: string;\n onEditName?: () => void;\n onDelete?: () => void;\n className?: string;\n}\n\n// 首先添加必要的导入\nimport { useState } from 'react';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from '@/components/ui/dialog';\nimport { Input } from '@/components/ui/input';\nimport { Button } from '@/components/ui/button';\nimport { createDialogScope } from '@radix-ui/react-dialog';\nimport useThread from '@/hooks/useThread';\nimport { useChatkitRef } from '@/contexts/ChatkitContext';\nimport { toast } from '@/hooks/use-toast';\n\n// 在组件中添加状态管理\nconst ThreadOptionsMenu: React.FC<ThreadOptionsMenuProps> = ({\n threadId,\n onEditName,\n onDelete,\n className = '',\n}) => {\n const [isDialogOpen, setIsDialogOpen] = useState(false);\n const [newThreadName, setNewThreadName] = useState('');\n\n const handleEditName = () => {\n // 设置默认名称(这里可以从props中获取)\n setNewThreadName(currentThread?.name || ``);\n setShowEditDialog(true);\n };\n\n const { currentThread } = useThread();\n\n const ref = useChatkitRef();\n const handleSaveName = () => {\n if (newThreadName.trim()) {\n ref?.setThreadName(threadId, newThreadName.trim());\n setShowEditDialog(false);\n }\n };\n\n const handleDelete = () => {\n ref?.deleteThread(threadId);\n };\n\n const [showEditDialog, setShowEditDialog] = useState(false);\n return (\n <>\n <Dialog open={showEditDialog} onOpenChange={setShowEditDialog}>\n <DialogContent className=\"sm:max-w-[480px] border-none shadow-2xl rounded-2xl overflow-hidden\">\n <DialogHeader className=\"space-y-3 pb-6\">\n <DialogTitle className=\"text-2xl font-semibold text-gray-900 tracking-tight\">\n 编辑对话名称\n </DialogTitle>\n </DialogHeader>\n\n <div className=\"space-y-6 py-2\">\n <div className=\"space-y-3\">\n <Input\n id=\"thread-name\"\n value={newThreadName}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n setNewThreadName(e.target.value)\n }\n placeholder=\"请输入对话名称...\"\n maxLength={100}\n className=\"w-full h-11 px-4 border-2 border-gray-200 rounded-xl transition-all duration-200 focus:border-blue-400 focus:ring-4 focus:ring-blue-50 focus-visible:ring-offset-0\"\n autoFocus\n onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' && newThreadName.trim()) {\n handleSaveName();\n }\n }}\n />\n </div>\n </div>\n\n <DialogFooter className=\"flex gap-3 pt-6 border-t border-gray-100\">\n <Button\n variant=\"ghost\"\n onClick={() => setShowEditDialog(false)}\n className=\"flex-1 h-11 rounded-xl hover:bg-gray-100 transition-all duration-200 font-medium\"\n >\n 取消\n </Button>\n <Button\n onClick={handleSaveName}\n disabled={!newThreadName.trim()}\n className=\"flex-1 h-11 rounded-xl disabled:from-gray-300 disabled:to-gray-300 disabled:cursor-not-allowed shadow-md hover:shadow-lg transition-all duration-200 font-medium\"\n >\n 保存更改\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n className={cn(\n 'flex items-center justify-center h-8 w-8 rounded-full hover:bg-gray-100 transition-colors',\n className,\n )}\n aria-label={`线程 ${threadId} 选项`}\n type=\"button\"\n >\n <Ellipsis className=\"h-4 w-4 text-[#808388]\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n className=\"bg-white py-[8px] px-[6px] rounded-[8px]\"\n >\n <DropdownMenuItem\n disabled={currentThread?.id === threadId}\n className={cn(\n 'cursor-pointer flex items-center hover:bg-[rgba(46,50,56,0.05)] px-2 py-1 rounded-[4px]',\n {\n 'cursor-not-allowed text-[#808388] opacity-50':\n currentThread?.id === threadId,\n },\n )}\n onClick={(e: React.MouseEvent<HTMLDivElement>) => {\n e.stopPropagation();\n if (currentThread?.id === threadId) {\n return;\n }\n handleDelete();\n }}\n >\n <Trash2 className=\"mr-2 h-4 w-4\" />\n <span className=\"mr-4\">删除会话</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </>\n );\n};\n\nexport default ThreadOptionsMenu;\n"],"names":["useState","useChatkitRef","_jsxs","_jsx","Dialog","DialogContent","DialogHeader","DialogTitle","Input","DialogFooter","Button","DropdownMenu","DropdownMenuTrigger","cn","Ellipsis","DropdownMenuContent","DropdownMenuItem","Trash2"],"mappings":"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"}
1
+ {"version":3,"file":"ThreadOptionsMenu.cjs","sources":["../../src/components/ThreadOptionsMenu.tsx"],"sourcesContent":["import React from 'react';\nimport { Ellipsis } from 'lucide-react';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@radix-ui/react-dropdown-menu';\nimport { Trash2 } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport Edit from '@/assets/Edit';\n\ninterface ThreadOptionsMenuProps {\n threadId: string;\n onEditName?: () => void;\n onDelete?: () => void;\n className?: string;\n}\n\n// 首先添加必要的导入\nimport { useState } from 'react';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from '@/components/ui/dialog';\nimport { Input } from '@/components/ui/input';\nimport { Button } from '@/components/ui/button';\nimport { createDialogScope } from '@radix-ui/react-dialog';\nimport useThread from '@/hooks/useThread';\nimport { useChatkitRef } from '@/contexts/ChatkitContext';\nimport { toast } from '@/hooks/use-toast';\n\n// 在组件中添加状态管理\nconst ThreadOptionsMenu: React.FC<ThreadOptionsMenuProps> = ({\n threadId,\n onEditName,\n onDelete,\n className = '',\n}) => {\n const [isDialogOpen, setIsDialogOpen] = useState(false);\n const [newThreadName, setNewThreadName] = useState('');\n\n const handleEditName = () => {\n // 设置默认名称(这里可以从props中获取)\n setNewThreadName(currentThread?.name || ``);\n setShowEditDialog(true);\n };\n\n const { currentThread, threadList } = useThread();\n\n const ref = useChatkitRef();\n const handleSaveName = () => {\n if (newThreadName.trim()) {\n ref?.setThreadName(threadId, newThreadName.trim());\n setShowEditDialog(false);\n }\n };\n\n const handleDelete = () => {\n const selectableThreadList = threadList.filter(\n thread => thread.id !== threadId,\n );\n if (selectableThreadList.length === 0) {\n console.warn('[warning]: cannot delete the last thread');\n return;\n }\n ref?.setCurrentThread(selectableThreadList[0]?.id);\n ref?.abortMessage(threadId);\n ref?.deleteThread(threadId);\n };\n\n const [showEditDialog, setShowEditDialog] = useState(false);\n return (\n <>\n <Dialog open={showEditDialog} onOpenChange={setShowEditDialog}>\n <DialogContent className=\"sm:max-w-[480px] border-none shadow-2xl rounded-2xl overflow-hidden\">\n <DialogHeader className=\"space-y-3 pb-6\">\n <DialogTitle className=\"text-2xl font-semibold text-gray-900 tracking-tight\">\n 编辑对话名称\n </DialogTitle>\n </DialogHeader>\n\n <div className=\"space-y-6 py-2\">\n <div className=\"space-y-3\">\n <Input\n id=\"thread-name\"\n value={newThreadName}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n setNewThreadName(e.target.value)\n }\n placeholder=\"请输入对话名称...\"\n maxLength={100}\n className=\"w-full h-11 px-4 border-2 border-gray-200 rounded-xl transition-all duration-200 focus:border-blue-400 focus:ring-4 focus:ring-blue-50 focus-visible:ring-offset-0\"\n autoFocus\n onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' && newThreadName.trim()) {\n handleSaveName();\n }\n }}\n />\n </div>\n </div>\n\n <DialogFooter className=\"flex gap-3 pt-6 border-t border-gray-100\">\n <Button\n variant=\"ghost\"\n onClick={() => setShowEditDialog(false)}\n className=\"flex-1 h-11 rounded-xl hover:bg-gray-100 transition-all duration-200 font-medium\"\n >\n 取消\n </Button>\n <Button\n onClick={handleSaveName}\n disabled={!newThreadName.trim()}\n className=\"flex-1 h-11 rounded-xl disabled:from-gray-300 disabled:to-gray-300 disabled:cursor-not-allowed shadow-md hover:shadow-lg transition-all duration-200 font-medium\"\n >\n 保存更改\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n className={cn(\n 'flex items-center justify-center h-8 w-8 rounded-full hover:bg-gray-100 transition-colors',\n className,\n )}\n aria-label={`线程 ${threadId} 选项`}\n type=\"button\"\n >\n <Ellipsis className=\"h-4 w-4 text-[#808388]\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n className=\"bg-white py-[8px] px-[6px] rounded-[8px]\"\n >\n <DropdownMenuItem\n disabled={threadList.length === 1}\n className={cn(\n 'cursor-pointer flex items-center hover:bg-[rgba(46,50,56,0.05)] px-2 py-1 rounded-[4px]',\n {\n 'cursor-not-allowed text-[#808388] opacity-50':\n threadList.length === 1,\n },\n )}\n onClick={(e: React.MouseEvent<HTMLDivElement>) => {\n e.stopPropagation();\n if (threadList.length === 1) {\n return;\n }\n handleDelete();\n }}\n >\n <Trash2 className=\"mr-2 h-4 w-4\" />\n <span className=\"mr-4\">删除会话</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </>\n );\n};\n\nexport default ThreadOptionsMenu;\n"],"names":["useState","useChatkitRef","_jsxs","_jsx","Dialog","DialogContent","DialogHeader","DialogTitle","Input","DialogFooter","Button","DropdownMenu","DropdownMenuTrigger","cn","Ellipsis","DropdownMenuContent","DropdownMenuItem","Trash2"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadOptionsMenu.d.ts","sourceRoot":"","sources":["../../src/components/ThreadOptionsMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,UAAU,sBAAsB;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAqBD,QAAA,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAwHvD,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"ThreadOptionsMenu.d.ts","sourceRoot":"","sources":["../../src/components/ThreadOptionsMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,UAAU,sBAAsB;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAqBD,QAAA,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAiIvD,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -14,7 +14,7 @@ import Trash2 from '../node_modules/.pnpm/lucide-react@0.552.0_react@17.0.2/node
14
14
  const ThreadOptionsMenu = ({ threadId, onEditName, onDelete, className = '', }) => {
15
15
  useState(false);
16
16
  const [newThreadName, setNewThreadName] = useState('');
17
- const { currentThread } = useThread();
17
+ const { currentThread, threadList } = useThread();
18
18
  const ref = useChatkitRef();
19
19
  const handleSaveName = () => {
20
20
  if (newThreadName.trim()) {
@@ -23,6 +23,13 @@ const ThreadOptionsMenu = ({ threadId, onEditName, onDelete, className = '', })
23
23
  }
24
24
  };
25
25
  const handleDelete = () => {
26
+ const selectableThreadList = threadList.filter(thread => thread.id !== threadId);
27
+ if (selectableThreadList.length === 0) {
28
+ console.warn('[warning]: cannot delete the last thread');
29
+ return;
30
+ }
31
+ ref?.setCurrentThread(selectableThreadList[0]?.id);
32
+ ref?.abortMessage(threadId);
26
33
  ref?.deleteThread(threadId);
27
34
  };
28
35
  const [showEditDialog, setShowEditDialog] = useState(false);
@@ -30,11 +37,11 @@ const ThreadOptionsMenu = ({ threadId, onEditName, onDelete, className = '', })
30
37
  if (e.key === 'Enter' && newThreadName.trim()) {
31
38
  handleSaveName();
32
39
  }
33
- } }) }) }), jsxs(DialogFooter, { className: "flex gap-3 pt-6 border-t border-gray-100", children: [jsx(Button, { variant: "ghost", onClick: () => setShowEditDialog(false), className: "flex-1 h-11 rounded-xl hover:bg-gray-100 transition-all duration-200 font-medium", children: "\u53D6\u6D88" }), jsx(Button, { onClick: handleSaveName, disabled: !newThreadName.trim(), className: "flex-1 h-11 rounded-xl disabled:from-gray-300 disabled:to-gray-300 disabled:cursor-not-allowed shadow-md hover:shadow-lg transition-all duration-200 font-medium", children: "\u4FDD\u5B58\u66F4\u6539" })] })] }) }), jsxs(DropdownMenu, { children: [jsx(DropdownMenuTrigger, { asChild: true, children: jsx("button", { className: cn('flex items-center justify-center h-8 w-8 rounded-full hover:bg-gray-100 transition-colors', className), "aria-label": `线程 ${threadId} 选项`, type: "button", children: jsx(Ellipsis, { className: "h-4 w-4 text-[#808388]" }) }) }), jsx(DropdownMenuContent, { align: "end", className: "bg-white py-[8px] px-[6px] rounded-[8px]", children: jsxs(DropdownMenuItem, { disabled: currentThread?.id === threadId, className: cn('cursor-pointer flex items-center hover:bg-[rgba(46,50,56,0.05)] px-2 py-1 rounded-[4px]', {
34
- 'cursor-not-allowed text-[#808388] opacity-50': currentThread?.id === threadId,
40
+ } }) }) }), jsxs(DialogFooter, { className: "flex gap-3 pt-6 border-t border-gray-100", children: [jsx(Button, { variant: "ghost", onClick: () => setShowEditDialog(false), className: "flex-1 h-11 rounded-xl hover:bg-gray-100 transition-all duration-200 font-medium", children: "\u53D6\u6D88" }), jsx(Button, { onClick: handleSaveName, disabled: !newThreadName.trim(), className: "flex-1 h-11 rounded-xl disabled:from-gray-300 disabled:to-gray-300 disabled:cursor-not-allowed shadow-md hover:shadow-lg transition-all duration-200 font-medium", children: "\u4FDD\u5B58\u66F4\u6539" })] })] }) }), jsxs(DropdownMenu, { children: [jsx(DropdownMenuTrigger, { asChild: true, children: jsx("button", { className: cn('flex items-center justify-center h-8 w-8 rounded-full hover:bg-gray-100 transition-colors', className), "aria-label": `线程 ${threadId} 选项`, type: "button", children: jsx(Ellipsis, { className: "h-4 w-4 text-[#808388]" }) }) }), jsx(DropdownMenuContent, { align: "end", className: "bg-white py-[8px] px-[6px] rounded-[8px]", children: jsxs(DropdownMenuItem, { disabled: threadList.length === 1, className: cn('cursor-pointer flex items-center hover:bg-[rgba(46,50,56,0.05)] px-2 py-1 rounded-[4px]', {
41
+ 'cursor-not-allowed text-[#808388] opacity-50': threadList.length === 1,
35
42
  }), onClick: (e) => {
36
43
  e.stopPropagation();
37
- if (currentThread?.id === threadId) {
44
+ if (threadList.length === 1) {
38
45
  return;
39
46
  }
40
47
  handleDelete();
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadOptionsMenu.js","sources":["../../src/components/ThreadOptionsMenu.tsx"],"sourcesContent":["import React from 'react';\nimport { Ellipsis } from 'lucide-react';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@radix-ui/react-dropdown-menu';\nimport { Trash2 } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport Edit from '@/assets/Edit';\n\ninterface ThreadOptionsMenuProps {\n threadId: string;\n onEditName?: () => void;\n onDelete?: () => void;\n className?: string;\n}\n\n// 首先添加必要的导入\nimport { useState } from 'react';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from '@/components/ui/dialog';\nimport { Input } from '@/components/ui/input';\nimport { Button } from '@/components/ui/button';\nimport { createDialogScope } from '@radix-ui/react-dialog';\nimport useThread from '@/hooks/useThread';\nimport { useChatkitRef } from '@/contexts/ChatkitContext';\nimport { toast } from '@/hooks/use-toast';\n\n// 在组件中添加状态管理\nconst ThreadOptionsMenu: React.FC<ThreadOptionsMenuProps> = ({\n threadId,\n onEditName,\n onDelete,\n className = '',\n}) => {\n const [isDialogOpen, setIsDialogOpen] = useState(false);\n const [newThreadName, setNewThreadName] = useState('');\n\n const handleEditName = () => {\n // 设置默认名称(这里可以从props中获取)\n setNewThreadName(currentThread?.name || ``);\n setShowEditDialog(true);\n };\n\n const { currentThread } = useThread();\n\n const ref = useChatkitRef();\n const handleSaveName = () => {\n if (newThreadName.trim()) {\n ref?.setThreadName(threadId, newThreadName.trim());\n setShowEditDialog(false);\n }\n };\n\n const handleDelete = () => {\n ref?.deleteThread(threadId);\n };\n\n const [showEditDialog, setShowEditDialog] = useState(false);\n return (\n <>\n <Dialog open={showEditDialog} onOpenChange={setShowEditDialog}>\n <DialogContent className=\"sm:max-w-[480px] border-none shadow-2xl rounded-2xl overflow-hidden\">\n <DialogHeader className=\"space-y-3 pb-6\">\n <DialogTitle className=\"text-2xl font-semibold text-gray-900 tracking-tight\">\n 编辑对话名称\n </DialogTitle>\n </DialogHeader>\n\n <div className=\"space-y-6 py-2\">\n <div className=\"space-y-3\">\n <Input\n id=\"thread-name\"\n value={newThreadName}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n setNewThreadName(e.target.value)\n }\n placeholder=\"请输入对话名称...\"\n maxLength={100}\n className=\"w-full h-11 px-4 border-2 border-gray-200 rounded-xl transition-all duration-200 focus:border-blue-400 focus:ring-4 focus:ring-blue-50 focus-visible:ring-offset-0\"\n autoFocus\n onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' && newThreadName.trim()) {\n handleSaveName();\n }\n }}\n />\n </div>\n </div>\n\n <DialogFooter className=\"flex gap-3 pt-6 border-t border-gray-100\">\n <Button\n variant=\"ghost\"\n onClick={() => setShowEditDialog(false)}\n className=\"flex-1 h-11 rounded-xl hover:bg-gray-100 transition-all duration-200 font-medium\"\n >\n 取消\n </Button>\n <Button\n onClick={handleSaveName}\n disabled={!newThreadName.trim()}\n className=\"flex-1 h-11 rounded-xl disabled:from-gray-300 disabled:to-gray-300 disabled:cursor-not-allowed shadow-md hover:shadow-lg transition-all duration-200 font-medium\"\n >\n 保存更改\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n className={cn(\n 'flex items-center justify-center h-8 w-8 rounded-full hover:bg-gray-100 transition-colors',\n className,\n )}\n aria-label={`线程 ${threadId} 选项`}\n type=\"button\"\n >\n <Ellipsis className=\"h-4 w-4 text-[#808388]\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n className=\"bg-white py-[8px] px-[6px] rounded-[8px]\"\n >\n <DropdownMenuItem\n disabled={currentThread?.id === threadId}\n className={cn(\n 'cursor-pointer flex items-center hover:bg-[rgba(46,50,56,0.05)] px-2 py-1 rounded-[4px]',\n {\n 'cursor-not-allowed text-[#808388] opacity-50':\n currentThread?.id === threadId,\n },\n )}\n onClick={(e: React.MouseEvent<HTMLDivElement>) => {\n e.stopPropagation();\n if (currentThread?.id === threadId) {\n return;\n }\n handleDelete();\n }}\n >\n <Trash2 className=\"mr-2 h-4 w-4\" />\n <span className=\"mr-4\">删除会话</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </>\n );\n};\n\nexport default ThreadOptionsMenu;\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"ThreadOptionsMenu.js","sources":["../../src/components/ThreadOptionsMenu.tsx"],"sourcesContent":["import React from 'react';\nimport { Ellipsis } from 'lucide-react';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@radix-ui/react-dropdown-menu';\nimport { Trash2 } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport Edit from '@/assets/Edit';\n\ninterface ThreadOptionsMenuProps {\n threadId: string;\n onEditName?: () => void;\n onDelete?: () => void;\n className?: string;\n}\n\n// 首先添加必要的导入\nimport { useState } from 'react';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from '@/components/ui/dialog';\nimport { Input } from '@/components/ui/input';\nimport { Button } from '@/components/ui/button';\nimport { createDialogScope } from '@radix-ui/react-dialog';\nimport useThread from '@/hooks/useThread';\nimport { useChatkitRef } from '@/contexts/ChatkitContext';\nimport { toast } from '@/hooks/use-toast';\n\n// 在组件中添加状态管理\nconst ThreadOptionsMenu: React.FC<ThreadOptionsMenuProps> = ({\n threadId,\n onEditName,\n onDelete,\n className = '',\n}) => {\n const [isDialogOpen, setIsDialogOpen] = useState(false);\n const [newThreadName, setNewThreadName] = useState('');\n\n const handleEditName = () => {\n // 设置默认名称(这里可以从props中获取)\n setNewThreadName(currentThread?.name || ``);\n setShowEditDialog(true);\n };\n\n const { currentThread, threadList } = useThread();\n\n const ref = useChatkitRef();\n const handleSaveName = () => {\n if (newThreadName.trim()) {\n ref?.setThreadName(threadId, newThreadName.trim());\n setShowEditDialog(false);\n }\n };\n\n const handleDelete = () => {\n const selectableThreadList = threadList.filter(\n thread => thread.id !== threadId,\n );\n if (selectableThreadList.length === 0) {\n console.warn('[warning]: cannot delete the last thread');\n return;\n }\n ref?.setCurrentThread(selectableThreadList[0]?.id);\n ref?.abortMessage(threadId);\n ref?.deleteThread(threadId);\n };\n\n const [showEditDialog, setShowEditDialog] = useState(false);\n return (\n <>\n <Dialog open={showEditDialog} onOpenChange={setShowEditDialog}>\n <DialogContent className=\"sm:max-w-[480px] border-none shadow-2xl rounded-2xl overflow-hidden\">\n <DialogHeader className=\"space-y-3 pb-6\">\n <DialogTitle className=\"text-2xl font-semibold text-gray-900 tracking-tight\">\n 编辑对话名称\n </DialogTitle>\n </DialogHeader>\n\n <div className=\"space-y-6 py-2\">\n <div className=\"space-y-3\">\n <Input\n id=\"thread-name\"\n value={newThreadName}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n setNewThreadName(e.target.value)\n }\n placeholder=\"请输入对话名称...\"\n maxLength={100}\n className=\"w-full h-11 px-4 border-2 border-gray-200 rounded-xl transition-all duration-200 focus:border-blue-400 focus:ring-4 focus:ring-blue-50 focus-visible:ring-offset-0\"\n autoFocus\n onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' && newThreadName.trim()) {\n handleSaveName();\n }\n }}\n />\n </div>\n </div>\n\n <DialogFooter className=\"flex gap-3 pt-6 border-t border-gray-100\">\n <Button\n variant=\"ghost\"\n onClick={() => setShowEditDialog(false)}\n className=\"flex-1 h-11 rounded-xl hover:bg-gray-100 transition-all duration-200 font-medium\"\n >\n 取消\n </Button>\n <Button\n onClick={handleSaveName}\n disabled={!newThreadName.trim()}\n className=\"flex-1 h-11 rounded-xl disabled:from-gray-300 disabled:to-gray-300 disabled:cursor-not-allowed shadow-md hover:shadow-lg transition-all duration-200 font-medium\"\n >\n 保存更改\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n className={cn(\n 'flex items-center justify-center h-8 w-8 rounded-full hover:bg-gray-100 transition-colors',\n className,\n )}\n aria-label={`线程 ${threadId} 选项`}\n type=\"button\"\n >\n <Ellipsis className=\"h-4 w-4 text-[#808388]\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n className=\"bg-white py-[8px] px-[6px] rounded-[8px]\"\n >\n <DropdownMenuItem\n disabled={threadList.length === 1}\n className={cn(\n 'cursor-pointer flex items-center hover:bg-[rgba(46,50,56,0.05)] px-2 py-1 rounded-[4px]',\n {\n 'cursor-not-allowed text-[#808388] opacity-50':\n threadList.length === 1,\n },\n )}\n onClick={(e: React.MouseEvent<HTMLDivElement>) => {\n e.stopPropagation();\n if (threadList.length === 1) {\n return;\n }\n handleDelete();\n }}\n >\n <Trash2 className=\"mr-2 h-4 w-4\" />\n <span className=\"mr-4\">删除会话</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </>\n );\n};\n\nexport default ThreadOptionsMenu;\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -10,7 +10,6 @@ var utils = require('../../lib/utils.cjs');
10
10
  var shikiHighlighter = require('./shiki-highlighter.cjs');
11
11
  var useDebounce = require('../../hooks/useDebounce.cjs');
12
12
  var schema$1 = require('../../node_modules/.pnpm/hast-util-sanitize@5.0.2/node_modules/hast-util-sanitize/lib/schema.cjs');
13
- var loaderCircle = require('../../node_modules/.pnpm/lucide-react@0.552.0_react@17.0.2/node_modules/lucide-react/dist/esm/icons/loader-circle.cjs');
14
13
  var index = require('../../node_modules/.pnpm/remark-gfm@4.0.1/node_modules/remark-gfm/lib/index.cjs');
15
14
  var index$1 = require('../../node_modules/.pnpm/rehype-raw@7.0.0/node_modules/rehype-raw/lib/index.cjs');
16
15
  var index$2 = require('../../node_modules/.pnpm/rehype-sanitize@6.0.0/node_modules/rehype-sanitize/lib/index.cjs');
@@ -127,7 +126,7 @@ const defaultComponents = memoization.memoizeMarkdownComponents({
127
126
  tr: ({ className, ...props }) => (jsxRuntime.jsx("tr", { className: utils.cn('aui-md-tr m-0 border-b p-0 first:border-t [&:last-child>td:first-child]:rounded-bl-lg [&:last-child>td:last-child]:rounded-br-lg', className), ...props })),
128
127
  sup: ({ className, ...props }) => (jsxRuntime.jsx("sup", { className: utils.cn('aui-md-sup [&>a]:text-xs [&>a]:no-underline', className), ...props })),
129
128
  SyntaxHighlighter: shikiHighlighter.SyntaxHighlighter,
130
- pre: ({ className, ...props }) => (jsxRuntime.jsx("pre", { className: utils.cn('aui-md-pre overflow-x-auto !rounded-t-none rounded-b-lg bg-black p-4 text-white', className), ...props })),
129
+ pre: ({ className, ...props }) => (jsxRuntime.jsx("pre", { className: utils.cn('aui-md-pre overflow-x-auto !rounded-t-none rounded-b-lg p-4', className), ...props })),
131
130
  code: function Code({ className, ...props }) {
132
131
  const isCodeBlock = PreOverride.useIsMarkdownCodeBlock();
133
132
  return (jsxRuntime.jsx("code", { className: utils.cn(!isCodeBlock &&
@@ -135,9 +134,6 @@ const defaultComponents = memoization.memoizeMarkdownComponents({
135
134
  },
136
135
  CodeHeader,
137
136
  div: ({ className, ...props }) => {
138
- if (className?.includes('img-loading-placeholder')) {
139
- return (jsxRuntime.jsxs("div", { className: utils.cn('flex items-center gap-2 py-2 text-muted-foreground', className), children: [jsxRuntime.jsx(loaderCircle.default, { className: "h-4 w-4 animate-spin" }), jsxRuntime.jsx("span", { className: "text-sm", children: props['data-content'] || '正在生成图片...' })] }));
140
- }
141
137
  return jsxRuntime.jsx("div", { className: className, ...props });
142
138
  },
143
139
  });
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-text.cjs","sources":["../../../src/components/assistant-ui/markdown-text.tsx"],"sourcesContent":["'use client';\n\nimport '@assistant-ui/react-markdown/styles/dot.css';\n\nimport {\n type CodeHeaderProps,\n MarkdownTextPrimitive,\n unstable_memoizeMarkdownComponents as memoizeMarkdownComponents,\n useIsMarkdownCodeBlock,\n} from '@assistant-ui/react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport rehypeRaw from 'rehype-raw';\nimport rehypeSanitize, { defaultSchema } from 'rehype-sanitize';\nimport { type FC, memo, useState } from 'react';\nimport { CheckIcon, CopyIcon, Loader2 } from 'lucide-react';\nimport './index.less';\nimport { TooltipIconButton } from '@/components/assistant-ui/tooltip-icon-button';\nimport { cn } from '@/lib/utils';\nimport { SyntaxHighlighter } from './shiki-highlighter';\nimport { useDebounce } from '@/hooks/useDebounce';\nimport { PluggableList } from 'unified';\n\nconst schema = {\n ...defaultSchema,\n // 1. 添加标签到白名单\n tagNames: [...(defaultSchema.tagNames || []), 'video', 'source'],\n // 2. 添加允许的属性\n attributes: {\n ...defaultSchema.attributes,\n // 允许 video 标签使用的属性\n video: [\n 'controls',\n 'width',\n 'height',\n 'poster',\n 'preload',\n 'src',\n 'muted',\n 'loop',\n 'autoPlay',\n 'playsInline',\n ],\n div: [\n ...(defaultSchema.attributes?.div || []),\n 'className', //\n 'data-content', // 如果你在插件里用了 data-content\n ],\n // 允许 source 标签使用的属性\n source: ['src', 'type'],\n },\n};\n\nconst remarkPlugins: PluggableList = [remarkGfm];\n\nconst rehypePlugins: PluggableList = [\n rehypeRaw,\n [rehypeSanitize, schema],\n // rehypeAppendCursor,\n];\nconst MarkdownTextImpl = () => {\n return (\n <MarkdownTextPrimitive\n remarkPlugins={remarkPlugins}\n rehypePlugins={rehypePlugins}\n className=\"aui-md\"\n components={defaultComponents}\n />\n );\n};\n\nexport const MarkdownText = memo(MarkdownTextImpl);\n\nconst CodeHeader: FC<CodeHeaderProps> = ({ language, code }) => {\n const { isCopied, copyToClipboard } = useCopyToClipboard();\n const processedLanguage = language == 'unknown' ? 'text' : language;\n const onCopy = () => {\n if (!code || isCopied) return;\n copyToClipboard(code);\n };\n\n return (\n <div className=\"aui-code-header-root mt-4 flex items-center justify-between gap-4 rounded-t-lg border bg-muted-foreground/15 px-4 py-2 text-sm font-semibold text-foreground max-w-[800px] overflow-auto\">\n <span className=\"aui-code-header-language lowercase [&>span]:text-xs\">\n {processedLanguage}\n </span>\n <TooltipIconButton tooltip=\"Copy\" onClick={onCopy}>\n {!isCopied && <CopyIcon />}\n {isCopied && <CheckIcon />}\n </TooltipIconButton>\n </div>\n );\n};\n\nconst Video = ({\n src,\n className,\n ...props\n}: {\n src?: string;\n className?: string;\n}) => {\n const debouncedSrc = useDebounce(src, 500);\n return (\n <video\n src={debouncedSrc}\n style={{ maxWidth: 600 }}\n className={cn('aui-md-video max-w-full rounded-lg', className)}\n controls\n {...props}\n />\n );\n};\n\nconst videoExtensions = [\n '.mp4',\n '.avi',\n '.mov',\n '.wmv',\n '.flv',\n '.webm',\n '.mkv',\n '.m4v',\n];\n\nconst useCopyToClipboard = ({\n copiedDuration = 3000,\n}: {\n copiedDuration?: number;\n} = {}) => {\n const [isCopied, setIsCopied] = useState<boolean>(false);\n\n const copyToClipboard = (value: string) => {\n if (!value) return;\n\n navigator.clipboard.writeText(value).then(() => {\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), copiedDuration);\n });\n };\n\n return { isCopied, copyToClipboard };\n};\n\nconst defaultComponents = memoizeMarkdownComponents({\n h1: ({ className, ...props }) => (\n <h1\n className={cn(\n 'aui-md-h1 mb-8 scroll-m-20 text-4xl font-extrabold tracking-tight last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h2: ({ className, ...props }) => (\n <h2\n className={cn(\n 'aui-md-h2 mt-8 mb-4 scroll-m-20 text-3xl font-semibold tracking-tight first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h3: ({ className, ...props }) => (\n <h3\n className={cn(\n 'aui-md-h3 mt-6 mb-4 scroll-m-20 text-2xl font-semibold tracking-tight first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h4: ({ className, ...props }) => (\n <h4\n className={cn(\n 'aui-md-h4 mt-6 mb-4 scroll-m-20 text-xl font-semibold tracking-tight first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h5: ({ className, ...props }) => (\n <h5\n className={cn(\n 'aui-md-h5 my-4 text-lg font-semibold first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h6: ({ className, ...props }) => (\n <h6\n className={cn(\n 'aui-md-h6 my-4 font-semibold first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n p: ({ className, ...props }) => (\n <p\n className={cn(\n 'aui-md-p mt-5 mb-5 leading-7 first:mt-0 last:mb-0 chatkit-md-text-p',\n className,\n )}\n {...props}\n />\n ),\n image: ({ className, ...props }) => {\n return (\n <img\n src={props.href}\n style={{ maxWidth: 400 }}\n className={cn('aui-md-img max-w-full rounded-lg', className)}\n />\n );\n },\n a: ({ className, ...props }) => {\n const isVideo = (href: string | undefined) => {\n if (!href) return false;\n return videoExtensions.some(ext => href.toLowerCase().includes(ext));\n };\n\n if (isVideo(props.href)) {\n return (\n <>\n <Video src={props.href} className={className} {...props} />\n </>\n );\n }\n\n return (\n <a\n className={cn(\n 'aui-md-a font-medium text-primary underline underline-offset-4',\n className,\n )}\n {...props}\n />\n );\n },\n video: ({ className, ...props }) => {\n return <Video className={className} {...props} />;\n },\n blockquote: ({ className, ...props }) => (\n <blockquote\n className={cn('aui-md-blockquote border-l-2 pl-6 italic', className)}\n {...props}\n />\n ),\n ul: ({ className, ...props }) => (\n <ul\n className={cn('aui-md-ul my-5 ml-6 list-disc [&>li]:mt-2', className)}\n {...props}\n />\n ),\n ol: ({ className, ...props }) => (\n <ol\n className={cn('aui-md-ol my-5 ml-6 list-decimal [&>li]:mt-2', className)}\n {...props}\n />\n ),\n hr: ({ className, ...props }) => (\n <hr className={cn('aui-md-hr my-5 border-b', className)} {...props} />\n ),\n table: ({ className, ...props }) => (\n <table\n className={cn(\n 'aui-md-table my-5 w-full border-separate border-spacing-0 overflow-y-auto',\n className,\n )}\n {...props}\n />\n ),\n th: ({ className, ...props }) => (\n <th\n className={cn(\n 'aui-md-th bg-muted px-4 py-2 text-left font-bold first:rounded-tl-lg last:rounded-tr-lg [&[align=center]]:text-center [&[align=right]]:text-right',\n className,\n )}\n {...props}\n />\n ),\n td: ({ className, ...props }) => (\n <td\n className={cn(\n 'aui-md-td border-b border-l px-4 py-2 text-left last:border-r [&[align=center]]:text-center [&[align=right]]:text-right',\n className,\n )}\n {...props}\n />\n ),\n tr: ({ className, ...props }) => (\n <tr\n className={cn(\n 'aui-md-tr m-0 border-b p-0 first:border-t [&:last-child>td:first-child]:rounded-bl-lg [&:last-child>td:last-child]:rounded-br-lg',\n className,\n )}\n {...props}\n />\n ),\n sup: ({ className, ...props }) => (\n <sup\n className={cn('aui-md-sup [&>a]:text-xs [&>a]:no-underline', className)}\n {...props}\n />\n ),\n SyntaxHighlighter: SyntaxHighlighter,\n pre: ({ className, ...props }) => (\n <pre\n className={cn(\n 'aui-md-pre overflow-x-auto !rounded-t-none rounded-b-lg bg-black p-4 text-white',\n className,\n )}\n {...props}\n />\n ),\n code: function Code({ className, ...props }) {\n const isCodeBlock = useIsMarkdownCodeBlock();\n return (\n <code\n className={cn(\n !isCodeBlock &&\n 'aui-md-inline-code rounded border bg-muted font-semibold',\n className,\n )}\n {...props}\n />\n );\n },\n CodeHeader,\n div: ({ className, ...props }) => {\n if (className?.includes('img-loading-placeholder')) {\n return (\n <div\n className={cn(\n 'flex items-center gap-2 py-2 text-muted-foreground',\n className,\n )}\n >\n {/* 这里可以使用你的 Loading 图片,建议放在 packages/chatui/src/assets/ 下并 import */}\n {/* <img src={require(\"@/assets/loading.gif\")} alt=\"loading\" className=\"h-4 w-4\" /> */}\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n <span className=\"text-sm\">\n {(props as any)['data-content'] || '正在生成图片...'}\n </span>\n </div>\n );\n }\n return <div className={className} {...props} />;\n },\n});\n"],"names":["defaultSchema","remarkGfm","rehypeRaw","rehypeSanitize","_jsx","MarkdownTextPrimitive","memo","_jsxs","TooltipIconButton","CopyIcon","CheckIcon","useDebounce","cn","useState","memoizeMarkdownComponents","_Fragment","SyntaxHighlighter","useIsMarkdownCodeBlock","Loader2"],"mappings":"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"}
1
+ {"version":3,"file":"markdown-text.cjs","sources":["../../../src/components/assistant-ui/markdown-text.tsx"],"sourcesContent":["'use client';\n\nimport '@assistant-ui/react-markdown/styles/dot.css';\n\nimport {\n type CodeHeaderProps,\n MarkdownTextPrimitive,\n unstable_memoizeMarkdownComponents as memoizeMarkdownComponents,\n useIsMarkdownCodeBlock,\n} from '@assistant-ui/react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport rehypeRaw from 'rehype-raw';\nimport rehypeSanitize, { defaultSchema } from 'rehype-sanitize';\nimport { type FC, memo, useState } from 'react';\nimport { CheckIcon, CopyIcon, Loader2 } from 'lucide-react';\nimport './index.less';\nimport { TooltipIconButton } from '@/components/assistant-ui/tooltip-icon-button';\nimport { cn } from '@/lib/utils';\nimport { SyntaxHighlighter } from './shiki-highlighter';\nimport { useDebounce } from '@/hooks/useDebounce';\nimport { PluggableList } from 'unified';\n\nconst schema = {\n ...defaultSchema,\n // 1. 添加标签到白名单\n tagNames: [...(defaultSchema.tagNames || []), 'video', 'source'],\n // 2. 添加允许的属性\n attributes: {\n ...defaultSchema.attributes,\n // 允许 video 标签使用的属性\n video: [\n 'controls',\n 'width',\n 'height',\n 'poster',\n 'preload',\n 'src',\n 'muted',\n 'loop',\n 'autoPlay',\n 'playsInline',\n ],\n div: [\n ...(defaultSchema.attributes?.div || []),\n 'className', //\n 'data-content', // 如果你在插件里用了 data-content\n ],\n // 允许 source 标签使用的属性\n source: ['src', 'type'],\n },\n};\n\nconst remarkPlugins: PluggableList = [remarkGfm];\n\nconst rehypePlugins: PluggableList = [\n rehypeRaw,\n [rehypeSanitize, schema],\n // rehypeAppendCursor,\n];\nconst MarkdownTextImpl = () => {\n return (\n <MarkdownTextPrimitive\n remarkPlugins={remarkPlugins}\n rehypePlugins={rehypePlugins}\n className=\"aui-md\"\n components={defaultComponents}\n />\n );\n};\n\nexport const MarkdownText = memo(MarkdownTextImpl);\n\nconst CodeHeader: FC<CodeHeaderProps> = ({ language, code }) => {\n const { isCopied, copyToClipboard } = useCopyToClipboard();\n const processedLanguage = language == 'unknown' ? 'text' : language;\n const onCopy = () => {\n if (!code || isCopied) return;\n copyToClipboard(code);\n };\n\n return (\n <div className=\"aui-code-header-root mt-4 flex items-center justify-between gap-4 rounded-t-lg border bg-muted-foreground/15 px-4 py-2 text-sm font-semibold text-foreground max-w-[800px] overflow-auto\">\n <span className=\"aui-code-header-language lowercase [&>span]:text-xs\">\n {processedLanguage}\n </span>\n <TooltipIconButton tooltip=\"Copy\" onClick={onCopy}>\n {!isCopied && <CopyIcon />}\n {isCopied && <CheckIcon />}\n </TooltipIconButton>\n </div>\n );\n};\n\nconst Video = ({\n src,\n className,\n ...props\n}: {\n src?: string;\n className?: string;\n}) => {\n const debouncedSrc = useDebounce(src, 500);\n return (\n <video\n src={debouncedSrc}\n style={{ maxWidth: 600 }}\n className={cn('aui-md-video max-w-full rounded-lg', className)}\n controls\n {...props}\n />\n );\n};\n\nconst videoExtensions = [\n '.mp4',\n '.avi',\n '.mov',\n '.wmv',\n '.flv',\n '.webm',\n '.mkv',\n '.m4v',\n];\n\nconst useCopyToClipboard = ({\n copiedDuration = 3000,\n}: {\n copiedDuration?: number;\n} = {}) => {\n const [isCopied, setIsCopied] = useState<boolean>(false);\n\n const copyToClipboard = (value: string) => {\n if (!value) return;\n\n navigator.clipboard.writeText(value).then(() => {\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), copiedDuration);\n });\n };\n\n return { isCopied, copyToClipboard };\n};\n\nconst defaultComponents = memoizeMarkdownComponents({\n h1: ({ className, ...props }) => (\n <h1\n className={cn(\n 'aui-md-h1 mb-8 scroll-m-20 text-4xl font-extrabold tracking-tight last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h2: ({ className, ...props }) => (\n <h2\n className={cn(\n 'aui-md-h2 mt-8 mb-4 scroll-m-20 text-3xl font-semibold tracking-tight first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h3: ({ className, ...props }) => (\n <h3\n className={cn(\n 'aui-md-h3 mt-6 mb-4 scroll-m-20 text-2xl font-semibold tracking-tight first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h4: ({ className, ...props }) => (\n <h4\n className={cn(\n 'aui-md-h4 mt-6 mb-4 scroll-m-20 text-xl font-semibold tracking-tight first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h5: ({ className, ...props }) => (\n <h5\n className={cn(\n 'aui-md-h5 my-4 text-lg font-semibold first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h6: ({ className, ...props }) => (\n <h6\n className={cn(\n 'aui-md-h6 my-4 font-semibold first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n p: ({ className, ...props }) => (\n <p\n className={cn(\n 'aui-md-p mt-5 mb-5 leading-7 first:mt-0 last:mb-0 chatkit-md-text-p',\n className,\n )}\n {...props}\n />\n ),\n image: ({ className, ...props }) => {\n return (\n <img\n src={props.href}\n style={{ maxWidth: 400 }}\n className={cn('aui-md-img max-w-full rounded-lg', className)}\n />\n );\n },\n a: ({ className, ...props }) => {\n const isVideo = (href: string | undefined) => {\n if (!href) return false;\n return videoExtensions.some(ext => href.toLowerCase().includes(ext));\n };\n\n if (isVideo(props.href)) {\n return (\n <>\n <Video src={props.href} className={className} {...props} />\n </>\n );\n }\n\n return (\n <a\n className={cn(\n 'aui-md-a font-medium text-primary underline underline-offset-4',\n className,\n )}\n {...props}\n />\n );\n },\n video: ({ className, ...props }) => {\n return <Video className={className} {...props} />;\n },\n blockquote: ({ className, ...props }) => (\n <blockquote\n className={cn('aui-md-blockquote border-l-2 pl-6 italic', className)}\n {...props}\n />\n ),\n ul: ({ className, ...props }) => (\n <ul\n className={cn('aui-md-ul my-5 ml-6 list-disc [&>li]:mt-2', className)}\n {...props}\n />\n ),\n ol: ({ className, ...props }) => (\n <ol\n className={cn('aui-md-ol my-5 ml-6 list-decimal [&>li]:mt-2', className)}\n {...props}\n />\n ),\n hr: ({ className, ...props }) => (\n <hr className={cn('aui-md-hr my-5 border-b', className)} {...props} />\n ),\n table: ({ className, ...props }) => (\n <table\n className={cn(\n 'aui-md-table my-5 w-full border-separate border-spacing-0 overflow-y-auto',\n className,\n )}\n {...props}\n />\n ),\n th: ({ className, ...props }) => (\n <th\n className={cn(\n 'aui-md-th bg-muted px-4 py-2 text-left font-bold first:rounded-tl-lg last:rounded-tr-lg [&[align=center]]:text-center [&[align=right]]:text-right',\n className,\n )}\n {...props}\n />\n ),\n td: ({ className, ...props }) => (\n <td\n className={cn(\n 'aui-md-td border-b border-l px-4 py-2 text-left last:border-r [&[align=center]]:text-center [&[align=right]]:text-right',\n className,\n )}\n {...props}\n />\n ),\n tr: ({ className, ...props }) => (\n <tr\n className={cn(\n 'aui-md-tr m-0 border-b p-0 first:border-t [&:last-child>td:first-child]:rounded-bl-lg [&:last-child>td:last-child]:rounded-br-lg',\n className,\n )}\n {...props}\n />\n ),\n sup: ({ className, ...props }) => (\n <sup\n className={cn('aui-md-sup [&>a]:text-xs [&>a]:no-underline', className)}\n {...props}\n />\n ),\n SyntaxHighlighter: SyntaxHighlighter,\n pre: ({ className, ...props }) => (\n <pre\n className={cn(\n 'aui-md-pre overflow-x-auto !rounded-t-none rounded-b-lg p-4',\n className,\n )}\n {...props}\n />\n ),\n code: function Code({ className, ...props }) {\n const isCodeBlock = useIsMarkdownCodeBlock();\n return (\n <code\n className={cn(\n !isCodeBlock &&\n 'aui-md-inline-code rounded border bg-muted font-semibold',\n className,\n )}\n {...props}\n />\n );\n },\n CodeHeader,\n div: ({ className, ...props }) => {\n return <div className={className} {...props} />;\n },\n});\n"],"names":["defaultSchema","remarkGfm","rehypeRaw","rehypeSanitize","_jsx","MarkdownTextPrimitive","memo","_jsxs","TooltipIconButton","CopyIcon","CheckIcon","useDebounce","cn","useState","memoizeMarkdownComponents","_Fragment","SyntaxHighlighter","useIsMarkdownCodeBlock"],"mappings":"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"}
@@ -8,7 +8,6 @@ import { cn } from '../../lib/utils.js';
8
8
  import { SyntaxHighlighter } from './shiki-highlighter.js';
9
9
  import { useDebounce } from '../../hooks/useDebounce.js';
10
10
  import { defaultSchema } from '../../node_modules/.pnpm/hast-util-sanitize@5.0.2/node_modules/hast-util-sanitize/lib/schema.js';
11
- import LoaderCircle from '../../node_modules/.pnpm/lucide-react@0.552.0_react@17.0.2/node_modules/lucide-react/dist/esm/icons/loader-circle.js';
12
11
  import remarkGfm from '../../node_modules/.pnpm/remark-gfm@4.0.1/node_modules/remark-gfm/lib/index.js';
13
12
  import rehypeRaw from '../../node_modules/.pnpm/rehype-raw@7.0.0/node_modules/rehype-raw/lib/index.js';
14
13
  import rehypeSanitize from '../../node_modules/.pnpm/rehype-sanitize@6.0.0/node_modules/rehype-sanitize/lib/index.js';
@@ -125,7 +124,7 @@ const defaultComponents = memoizeMarkdownComponents({
125
124
  tr: ({ className, ...props }) => (jsx("tr", { className: cn('aui-md-tr m-0 border-b p-0 first:border-t [&:last-child>td:first-child]:rounded-bl-lg [&:last-child>td:last-child]:rounded-br-lg', className), ...props })),
126
125
  sup: ({ className, ...props }) => (jsx("sup", { className: cn('aui-md-sup [&>a]:text-xs [&>a]:no-underline', className), ...props })),
127
126
  SyntaxHighlighter: SyntaxHighlighter,
128
- pre: ({ className, ...props }) => (jsx("pre", { className: cn('aui-md-pre overflow-x-auto !rounded-t-none rounded-b-lg bg-black p-4 text-white', className), ...props })),
127
+ pre: ({ className, ...props }) => (jsx("pre", { className: cn('aui-md-pre overflow-x-auto !rounded-t-none rounded-b-lg p-4', className), ...props })),
129
128
  code: function Code({ className, ...props }) {
130
129
  const isCodeBlock = useIsMarkdownCodeBlock();
131
130
  return (jsx("code", { className: cn(!isCodeBlock &&
@@ -133,9 +132,6 @@ const defaultComponents = memoizeMarkdownComponents({
133
132
  },
134
133
  CodeHeader,
135
134
  div: ({ className, ...props }) => {
136
- if (className?.includes('img-loading-placeholder')) {
137
- return (jsxs("div", { className: cn('flex items-center gap-2 py-2 text-muted-foreground', className), children: [jsx(LoaderCircle, { className: "h-4 w-4 animate-spin" }), jsx("span", { className: "text-sm", children: props['data-content'] || '正在生成图片...' })] }));
138
- }
139
135
  return jsx("div", { className: className, ...props });
140
136
  },
141
137
  });
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-text.js","sources":["../../../src/components/assistant-ui/markdown-text.tsx"],"sourcesContent":["'use client';\n\nimport '@assistant-ui/react-markdown/styles/dot.css';\n\nimport {\n type CodeHeaderProps,\n MarkdownTextPrimitive,\n unstable_memoizeMarkdownComponents as memoizeMarkdownComponents,\n useIsMarkdownCodeBlock,\n} from '@assistant-ui/react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport rehypeRaw from 'rehype-raw';\nimport rehypeSanitize, { defaultSchema } from 'rehype-sanitize';\nimport { type FC, memo, useState } from 'react';\nimport { CheckIcon, CopyIcon, Loader2 } from 'lucide-react';\nimport './index.less';\nimport { TooltipIconButton } from '@/components/assistant-ui/tooltip-icon-button';\nimport { cn } from '@/lib/utils';\nimport { SyntaxHighlighter } from './shiki-highlighter';\nimport { useDebounce } from '@/hooks/useDebounce';\nimport { PluggableList } from 'unified';\n\nconst schema = {\n ...defaultSchema,\n // 1. 添加标签到白名单\n tagNames: [...(defaultSchema.tagNames || []), 'video', 'source'],\n // 2. 添加允许的属性\n attributes: {\n ...defaultSchema.attributes,\n // 允许 video 标签使用的属性\n video: [\n 'controls',\n 'width',\n 'height',\n 'poster',\n 'preload',\n 'src',\n 'muted',\n 'loop',\n 'autoPlay',\n 'playsInline',\n ],\n div: [\n ...(defaultSchema.attributes?.div || []),\n 'className', //\n 'data-content', // 如果你在插件里用了 data-content\n ],\n // 允许 source 标签使用的属性\n source: ['src', 'type'],\n },\n};\n\nconst remarkPlugins: PluggableList = [remarkGfm];\n\nconst rehypePlugins: PluggableList = [\n rehypeRaw,\n [rehypeSanitize, schema],\n // rehypeAppendCursor,\n];\nconst MarkdownTextImpl = () => {\n return (\n <MarkdownTextPrimitive\n remarkPlugins={remarkPlugins}\n rehypePlugins={rehypePlugins}\n className=\"aui-md\"\n components={defaultComponents}\n />\n );\n};\n\nexport const MarkdownText = memo(MarkdownTextImpl);\n\nconst CodeHeader: FC<CodeHeaderProps> = ({ language, code }) => {\n const { isCopied, copyToClipboard } = useCopyToClipboard();\n const processedLanguage = language == 'unknown' ? 'text' : language;\n const onCopy = () => {\n if (!code || isCopied) return;\n copyToClipboard(code);\n };\n\n return (\n <div className=\"aui-code-header-root mt-4 flex items-center justify-between gap-4 rounded-t-lg border bg-muted-foreground/15 px-4 py-2 text-sm font-semibold text-foreground max-w-[800px] overflow-auto\">\n <span className=\"aui-code-header-language lowercase [&>span]:text-xs\">\n {processedLanguage}\n </span>\n <TooltipIconButton tooltip=\"Copy\" onClick={onCopy}>\n {!isCopied && <CopyIcon />}\n {isCopied && <CheckIcon />}\n </TooltipIconButton>\n </div>\n );\n};\n\nconst Video = ({\n src,\n className,\n ...props\n}: {\n src?: string;\n className?: string;\n}) => {\n const debouncedSrc = useDebounce(src, 500);\n return (\n <video\n src={debouncedSrc}\n style={{ maxWidth: 600 }}\n className={cn('aui-md-video max-w-full rounded-lg', className)}\n controls\n {...props}\n />\n );\n};\n\nconst videoExtensions = [\n '.mp4',\n '.avi',\n '.mov',\n '.wmv',\n '.flv',\n '.webm',\n '.mkv',\n '.m4v',\n];\n\nconst useCopyToClipboard = ({\n copiedDuration = 3000,\n}: {\n copiedDuration?: number;\n} = {}) => {\n const [isCopied, setIsCopied] = useState<boolean>(false);\n\n const copyToClipboard = (value: string) => {\n if (!value) return;\n\n navigator.clipboard.writeText(value).then(() => {\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), copiedDuration);\n });\n };\n\n return { isCopied, copyToClipboard };\n};\n\nconst defaultComponents = memoizeMarkdownComponents({\n h1: ({ className, ...props }) => (\n <h1\n className={cn(\n 'aui-md-h1 mb-8 scroll-m-20 text-4xl font-extrabold tracking-tight last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h2: ({ className, ...props }) => (\n <h2\n className={cn(\n 'aui-md-h2 mt-8 mb-4 scroll-m-20 text-3xl font-semibold tracking-tight first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h3: ({ className, ...props }) => (\n <h3\n className={cn(\n 'aui-md-h3 mt-6 mb-4 scroll-m-20 text-2xl font-semibold tracking-tight first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h4: ({ className, ...props }) => (\n <h4\n className={cn(\n 'aui-md-h4 mt-6 mb-4 scroll-m-20 text-xl font-semibold tracking-tight first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h5: ({ className, ...props }) => (\n <h5\n className={cn(\n 'aui-md-h5 my-4 text-lg font-semibold first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h6: ({ className, ...props }) => (\n <h6\n className={cn(\n 'aui-md-h6 my-4 font-semibold first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n p: ({ className, ...props }) => (\n <p\n className={cn(\n 'aui-md-p mt-5 mb-5 leading-7 first:mt-0 last:mb-0 chatkit-md-text-p',\n className,\n )}\n {...props}\n />\n ),\n image: ({ className, ...props }) => {\n return (\n <img\n src={props.href}\n style={{ maxWidth: 400 }}\n className={cn('aui-md-img max-w-full rounded-lg', className)}\n />\n );\n },\n a: ({ className, ...props }) => {\n const isVideo = (href: string | undefined) => {\n if (!href) return false;\n return videoExtensions.some(ext => href.toLowerCase().includes(ext));\n };\n\n if (isVideo(props.href)) {\n return (\n <>\n <Video src={props.href} className={className} {...props} />\n </>\n );\n }\n\n return (\n <a\n className={cn(\n 'aui-md-a font-medium text-primary underline underline-offset-4',\n className,\n )}\n {...props}\n />\n );\n },\n video: ({ className, ...props }) => {\n return <Video className={className} {...props} />;\n },\n blockquote: ({ className, ...props }) => (\n <blockquote\n className={cn('aui-md-blockquote border-l-2 pl-6 italic', className)}\n {...props}\n />\n ),\n ul: ({ className, ...props }) => (\n <ul\n className={cn('aui-md-ul my-5 ml-6 list-disc [&>li]:mt-2', className)}\n {...props}\n />\n ),\n ol: ({ className, ...props }) => (\n <ol\n className={cn('aui-md-ol my-5 ml-6 list-decimal [&>li]:mt-2', className)}\n {...props}\n />\n ),\n hr: ({ className, ...props }) => (\n <hr className={cn('aui-md-hr my-5 border-b', className)} {...props} />\n ),\n table: ({ className, ...props }) => (\n <table\n className={cn(\n 'aui-md-table my-5 w-full border-separate border-spacing-0 overflow-y-auto',\n className,\n )}\n {...props}\n />\n ),\n th: ({ className, ...props }) => (\n <th\n className={cn(\n 'aui-md-th bg-muted px-4 py-2 text-left font-bold first:rounded-tl-lg last:rounded-tr-lg [&[align=center]]:text-center [&[align=right]]:text-right',\n className,\n )}\n {...props}\n />\n ),\n td: ({ className, ...props }) => (\n <td\n className={cn(\n 'aui-md-td border-b border-l px-4 py-2 text-left last:border-r [&[align=center]]:text-center [&[align=right]]:text-right',\n className,\n )}\n {...props}\n />\n ),\n tr: ({ className, ...props }) => (\n <tr\n className={cn(\n 'aui-md-tr m-0 border-b p-0 first:border-t [&:last-child>td:first-child]:rounded-bl-lg [&:last-child>td:last-child]:rounded-br-lg',\n className,\n )}\n {...props}\n />\n ),\n sup: ({ className, ...props }) => (\n <sup\n className={cn('aui-md-sup [&>a]:text-xs [&>a]:no-underline', className)}\n {...props}\n />\n ),\n SyntaxHighlighter: SyntaxHighlighter,\n pre: ({ className, ...props }) => (\n <pre\n className={cn(\n 'aui-md-pre overflow-x-auto !rounded-t-none rounded-b-lg bg-black p-4 text-white',\n className,\n )}\n {...props}\n />\n ),\n code: function Code({ className, ...props }) {\n const isCodeBlock = useIsMarkdownCodeBlock();\n return (\n <code\n className={cn(\n !isCodeBlock &&\n 'aui-md-inline-code rounded border bg-muted font-semibold',\n className,\n )}\n {...props}\n />\n );\n },\n CodeHeader,\n div: ({ className, ...props }) => {\n if (className?.includes('img-loading-placeholder')) {\n return (\n <div\n className={cn(\n 'flex items-center gap-2 py-2 text-muted-foreground',\n className,\n )}\n >\n {/* 这里可以使用你的 Loading 图片,建议放在 packages/chatui/src/assets/ 下并 import */}\n {/* <img src={require(\"@/assets/loading.gif\")} alt=\"loading\" className=\"h-4 w-4\" /> */}\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n <span className=\"text-sm\">\n {(props as any)['data-content'] || '正在生成图片...'}\n </span>\n </div>\n );\n }\n return <div className={className} {...props} />;\n },\n});\n"],"names":["_jsx","_jsxs","CopyIcon","CheckIcon","_Fragment","Loader2"],"mappings":"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"}
1
+ {"version":3,"file":"markdown-text.js","sources":["../../../src/components/assistant-ui/markdown-text.tsx"],"sourcesContent":["'use client';\n\nimport '@assistant-ui/react-markdown/styles/dot.css';\n\nimport {\n type CodeHeaderProps,\n MarkdownTextPrimitive,\n unstable_memoizeMarkdownComponents as memoizeMarkdownComponents,\n useIsMarkdownCodeBlock,\n} from '@assistant-ui/react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport rehypeRaw from 'rehype-raw';\nimport rehypeSanitize, { defaultSchema } from 'rehype-sanitize';\nimport { type FC, memo, useState } from 'react';\nimport { CheckIcon, CopyIcon, Loader2 } from 'lucide-react';\nimport './index.less';\nimport { TooltipIconButton } from '@/components/assistant-ui/tooltip-icon-button';\nimport { cn } from '@/lib/utils';\nimport { SyntaxHighlighter } from './shiki-highlighter';\nimport { useDebounce } from '@/hooks/useDebounce';\nimport { PluggableList } from 'unified';\n\nconst schema = {\n ...defaultSchema,\n // 1. 添加标签到白名单\n tagNames: [...(defaultSchema.tagNames || []), 'video', 'source'],\n // 2. 添加允许的属性\n attributes: {\n ...defaultSchema.attributes,\n // 允许 video 标签使用的属性\n video: [\n 'controls',\n 'width',\n 'height',\n 'poster',\n 'preload',\n 'src',\n 'muted',\n 'loop',\n 'autoPlay',\n 'playsInline',\n ],\n div: [\n ...(defaultSchema.attributes?.div || []),\n 'className', //\n 'data-content', // 如果你在插件里用了 data-content\n ],\n // 允许 source 标签使用的属性\n source: ['src', 'type'],\n },\n};\n\nconst remarkPlugins: PluggableList = [remarkGfm];\n\nconst rehypePlugins: PluggableList = [\n rehypeRaw,\n [rehypeSanitize, schema],\n // rehypeAppendCursor,\n];\nconst MarkdownTextImpl = () => {\n return (\n <MarkdownTextPrimitive\n remarkPlugins={remarkPlugins}\n rehypePlugins={rehypePlugins}\n className=\"aui-md\"\n components={defaultComponents}\n />\n );\n};\n\nexport const MarkdownText = memo(MarkdownTextImpl);\n\nconst CodeHeader: FC<CodeHeaderProps> = ({ language, code }) => {\n const { isCopied, copyToClipboard } = useCopyToClipboard();\n const processedLanguage = language == 'unknown' ? 'text' : language;\n const onCopy = () => {\n if (!code || isCopied) return;\n copyToClipboard(code);\n };\n\n return (\n <div className=\"aui-code-header-root mt-4 flex items-center justify-between gap-4 rounded-t-lg border bg-muted-foreground/15 px-4 py-2 text-sm font-semibold text-foreground max-w-[800px] overflow-auto\">\n <span className=\"aui-code-header-language lowercase [&>span]:text-xs\">\n {processedLanguage}\n </span>\n <TooltipIconButton tooltip=\"Copy\" onClick={onCopy}>\n {!isCopied && <CopyIcon />}\n {isCopied && <CheckIcon />}\n </TooltipIconButton>\n </div>\n );\n};\n\nconst Video = ({\n src,\n className,\n ...props\n}: {\n src?: string;\n className?: string;\n}) => {\n const debouncedSrc = useDebounce(src, 500);\n return (\n <video\n src={debouncedSrc}\n style={{ maxWidth: 600 }}\n className={cn('aui-md-video max-w-full rounded-lg', className)}\n controls\n {...props}\n />\n );\n};\n\nconst videoExtensions = [\n '.mp4',\n '.avi',\n '.mov',\n '.wmv',\n '.flv',\n '.webm',\n '.mkv',\n '.m4v',\n];\n\nconst useCopyToClipboard = ({\n copiedDuration = 3000,\n}: {\n copiedDuration?: number;\n} = {}) => {\n const [isCopied, setIsCopied] = useState<boolean>(false);\n\n const copyToClipboard = (value: string) => {\n if (!value) return;\n\n navigator.clipboard.writeText(value).then(() => {\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), copiedDuration);\n });\n };\n\n return { isCopied, copyToClipboard };\n};\n\nconst defaultComponents = memoizeMarkdownComponents({\n h1: ({ className, ...props }) => (\n <h1\n className={cn(\n 'aui-md-h1 mb-8 scroll-m-20 text-4xl font-extrabold tracking-tight last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h2: ({ className, ...props }) => (\n <h2\n className={cn(\n 'aui-md-h2 mt-8 mb-4 scroll-m-20 text-3xl font-semibold tracking-tight first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h3: ({ className, ...props }) => (\n <h3\n className={cn(\n 'aui-md-h3 mt-6 mb-4 scroll-m-20 text-2xl font-semibold tracking-tight first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h4: ({ className, ...props }) => (\n <h4\n className={cn(\n 'aui-md-h4 mt-6 mb-4 scroll-m-20 text-xl font-semibold tracking-tight first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h5: ({ className, ...props }) => (\n <h5\n className={cn(\n 'aui-md-h5 my-4 text-lg font-semibold first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n h6: ({ className, ...props }) => (\n <h6\n className={cn(\n 'aui-md-h6 my-4 font-semibold first:mt-0 last:mb-0',\n className,\n )}\n {...props}\n />\n ),\n p: ({ className, ...props }) => (\n <p\n className={cn(\n 'aui-md-p mt-5 mb-5 leading-7 first:mt-0 last:mb-0 chatkit-md-text-p',\n className,\n )}\n {...props}\n />\n ),\n image: ({ className, ...props }) => {\n return (\n <img\n src={props.href}\n style={{ maxWidth: 400 }}\n className={cn('aui-md-img max-w-full rounded-lg', className)}\n />\n );\n },\n a: ({ className, ...props }) => {\n const isVideo = (href: string | undefined) => {\n if (!href) return false;\n return videoExtensions.some(ext => href.toLowerCase().includes(ext));\n };\n\n if (isVideo(props.href)) {\n return (\n <>\n <Video src={props.href} className={className} {...props} />\n </>\n );\n }\n\n return (\n <a\n className={cn(\n 'aui-md-a font-medium text-primary underline underline-offset-4',\n className,\n )}\n {...props}\n />\n );\n },\n video: ({ className, ...props }) => {\n return <Video className={className} {...props} />;\n },\n blockquote: ({ className, ...props }) => (\n <blockquote\n className={cn('aui-md-blockquote border-l-2 pl-6 italic', className)}\n {...props}\n />\n ),\n ul: ({ className, ...props }) => (\n <ul\n className={cn('aui-md-ul my-5 ml-6 list-disc [&>li]:mt-2', className)}\n {...props}\n />\n ),\n ol: ({ className, ...props }) => (\n <ol\n className={cn('aui-md-ol my-5 ml-6 list-decimal [&>li]:mt-2', className)}\n {...props}\n />\n ),\n hr: ({ className, ...props }) => (\n <hr className={cn('aui-md-hr my-5 border-b', className)} {...props} />\n ),\n table: ({ className, ...props }) => (\n <table\n className={cn(\n 'aui-md-table my-5 w-full border-separate border-spacing-0 overflow-y-auto',\n className,\n )}\n {...props}\n />\n ),\n th: ({ className, ...props }) => (\n <th\n className={cn(\n 'aui-md-th bg-muted px-4 py-2 text-left font-bold first:rounded-tl-lg last:rounded-tr-lg [&[align=center]]:text-center [&[align=right]]:text-right',\n className,\n )}\n {...props}\n />\n ),\n td: ({ className, ...props }) => (\n <td\n className={cn(\n 'aui-md-td border-b border-l px-4 py-2 text-left last:border-r [&[align=center]]:text-center [&[align=right]]:text-right',\n className,\n )}\n {...props}\n />\n ),\n tr: ({ className, ...props }) => (\n <tr\n className={cn(\n 'aui-md-tr m-0 border-b p-0 first:border-t [&:last-child>td:first-child]:rounded-bl-lg [&:last-child>td:last-child]:rounded-br-lg',\n className,\n )}\n {...props}\n />\n ),\n sup: ({ className, ...props }) => (\n <sup\n className={cn('aui-md-sup [&>a]:text-xs [&>a]:no-underline', className)}\n {...props}\n />\n ),\n SyntaxHighlighter: SyntaxHighlighter,\n pre: ({ className, ...props }) => (\n <pre\n className={cn(\n 'aui-md-pre overflow-x-auto !rounded-t-none rounded-b-lg p-4',\n className,\n )}\n {...props}\n />\n ),\n code: function Code({ className, ...props }) {\n const isCodeBlock = useIsMarkdownCodeBlock();\n return (\n <code\n className={cn(\n !isCodeBlock &&\n 'aui-md-inline-code rounded border bg-muted font-semibold',\n className,\n )}\n {...props}\n />\n );\n },\n CodeHeader,\n div: ({ className, ...props }) => {\n return <div className={className} {...props} />;\n },\n});\n"],"names":["_jsx","_jsxs","CopyIcon","CheckIcon","_Fragment"],"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-1\/2,.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-1\/2{top:50%}.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-30{z-index:30}.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-\[32px\]{height:32px;width:32px}.chatkit-wrapper .size-\[38px\]{height:38px;width:38px}.chatkit-wrapper .size-\[unset\]{height:unset;width:unset}.chatkit-wrapper .size-full{height:100%;width:100%}.chatkit-wrapper .h-1\/2{height:50%}.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{height:.5rem}.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-6{height:1.5rem}.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-\[22px\]{height:22px}.chatkit-wrapper .h-\[24px\]{height:24px}.chatkit-wrapper .h-\[28px\]{height:28px}.chatkit-wrapper .h-\[32px\]{height:32px}.chatkit-wrapper .h-\[38px\]{height:38px}.chatkit-wrapper .h-\[50\%\]{height:50%}.chatkit-wrapper .h-\[600px\]{height:600px}.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-\[32px\]{min-height:32px}.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-16{width:4rem}.chatkit-wrapper .w-2{width:.5rem}.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-6{width:1.5rem}.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-\[1px\]{width:1px}.chatkit-wrapper .w-\[240px\]{width:240px}.chatkit-wrapper .w-\[28px\]{width:28px}.chatkit-wrapper .w-\[32px\]{width:32px}.chatkit-wrapper .w-\[50\%\]{width:50%}.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 .w-px{width:1px}.chatkit-wrapper .min-w-0{min-width:0}.chatkit-wrapper .min-w-5{min-width:1.25rem}.chatkit-wrapper .min-w-\[180px\]{min-width:180px}.chatkit-wrapper .min-w-\[200px\]{min-width:200px}.chatkit-wrapper .min-w-\[80px\]{min-width:80px}.chatkit-wrapper .min-w-fit{min-width:-moz-fit-content;min-width:fit-content}.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-\[60vw\]{max-width:60vw}.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-y-1\/2{--tw-translate-y:-50%}.chatkit-wrapper .-translate-y-1\/2,.chatkit-wrapper .translate-x-\[-50\%\]{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-\[-50\%\]{--tw-translate-x:-50%}.chatkit-wrapper .translate-x-px{--tw-translate-x:1px}.chatkit-wrapper .translate-x-px,.chatkit-wrapper .translate-y-\[-50\%\]{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-\[-50\%\]{--tw-translate-y:-50%}.chatkit-wrapper .translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y:calc(-50% - 2px)}.chatkit-wrapper .rotate-0,.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 .rotate-0{--tw-rotate:0deg}.chatkit-wrapper .rotate-180{--tw-rotate:180deg}.chatkit-wrapper .rotate-180,.chatkit-wrapper .rotate-45{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-45{--tw-rotate:45deg}.chatkit-wrapper .rotate-90{--tw-rotate:90deg}.chatkit-wrapper .rotate-90,.chatkit-wrapper .transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.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-not-allowed{cursor:not-allowed}.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-2{grid-template-columns:repeat(2,minmax(0,1fr))}.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-6{gap:1.5rem}.chatkit-wrapper .gap-\[12px\]{gap:12px}.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 .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-\[24px\]{border-radius:24px}.chatkit-wrapper .rounded-\[2px\]{border-radius:2px}.chatkit-wrapper .rounded-\[4px\]{border-radius:4px}.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-sm{border-radius:.125rem}.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 .rounded-bl-lg{border-bottom-left-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-b-2{border-bottom-width:2px}.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-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.chatkit-wrapper .border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/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-blue-400{--tw-bg-opacity:1!important;background-color:rgb(96 165 250/var(--tw-bg-opacity,1))!important}.chatkit-wrapper .\!bg-gray-300{--tw-bg-opacity:1!important;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))!important}.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-\[\#D1F5DD\]{--tw-bg-opacity:1;background-color:rgb(209 245 221/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-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-blue-50\/30{background-color:rgba(239,246,255,.3)}.chatkit-wrapper .bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.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-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 .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-white{--tw-gradient-to:#fff var(--tw-gradient-to-position)}.chatkit-wrapper .fill-green-500{fill:#22c55e}.chatkit-wrapper .fill-red-500{fill:#ef4444}.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-0\.5{padding:.125rem}.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-\[16px\]{padding-left:16px;padding-right:16px}.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-\[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-2{padding-bottom:.5rem}.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 .font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.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-\[14px\]{font-size:14px}.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 .capitalize{text-transform:capitalize}.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-\[\#737A87\]{--tw-text-opacity:1;color:rgb(115 122 135/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-green-900{--tw-text-opacity:1;color:rgb(20 83 45/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{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 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 .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-black\/10:hover{background-color:rgba(0,0,0,.1)}.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-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\:to-blue-800:hover{--tw-gradient-to:#1e40af 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 .focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.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-\[state\=active\]\:border-\[\#2962FF\][data-state=active]{--tw-border-opacity:1;border-color:rgb(41 98 255/var(--tw-border-opacity,1))}.chatkit-wrapper .data-\[state\=active\]\:bg-background[data-state=active]{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.chatkit-wrapper .data-\[state\=active\]\:bg-transparent[data-state=active]{background-color:transparent}.chatkit-wrapper .data-\[active\=true\]\:font-medium[data-active=true],.chatkit-wrapper .data-\[state\=active\]\:font-medium[data-state=active]{font-weight:500}.chatkit-wrapper .data-\[state\=active\]\:text-\[\#2962FF\][data-state=active]{--tw-text-opacity:1;color:rgb(41 98 255/var(--tw-text-opacity,1))}.chatkit-wrapper .data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.chatkit-wrapper .data-\[state\=active\]\:shadow-none[data-state=active]{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.chatkit-wrapper .data-\[state\=active\]\:shadow-sm[data-state=active]{--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 .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-\[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\: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-1\/2,.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-1\/2{top:50%}.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-30{z-index:30}.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-\[32px\]{height:32px;width:32px}.chatkit-wrapper .size-\[38px\]{height:38px;width:38px}.chatkit-wrapper .size-\[unset\]{height:unset;width:unset}.chatkit-wrapper .size-full{height:100%;width:100%}.chatkit-wrapper .h-1\/2{height:50%}.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{height:.5rem}.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-6{height:1.5rem}.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-\[22px\]{height:22px}.chatkit-wrapper .h-\[24px\]{height:24px}.chatkit-wrapper .h-\[28px\]{height:28px}.chatkit-wrapper .h-\[32px\]{height:32px}.chatkit-wrapper .h-\[38px\]{height:38px}.chatkit-wrapper .h-\[50\%\]{height:50%}.chatkit-wrapper .h-\[600px\]{height:600px}.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-\[32px\]{min-height:32px}.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-16{width:4rem}.chatkit-wrapper .w-2{width:.5rem}.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-6{width:1.5rem}.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-\[1px\]{width:1px}.chatkit-wrapper .w-\[240px\]{width:240px}.chatkit-wrapper .w-\[28px\]{width:28px}.chatkit-wrapper .w-\[32px\]{width:32px}.chatkit-wrapper .w-\[50\%\]{width:50%}.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 .w-px{width:1px}.chatkit-wrapper .min-w-0{min-width:0}.chatkit-wrapper .min-w-5{min-width:1.25rem}.chatkit-wrapper .min-w-\[180px\]{min-width:180px}.chatkit-wrapper .min-w-\[200px\]{min-width:200px}.chatkit-wrapper .min-w-\[80px\]{min-width:80px}.chatkit-wrapper .min-w-fit{min-width:-moz-fit-content;min-width:fit-content}.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-\[60vw\]{max-width:60vw}.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-y-1\/2{--tw-translate-y:-50%}.chatkit-wrapper .-translate-y-1\/2,.chatkit-wrapper .translate-x-\[-50\%\]{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-\[-50\%\]{--tw-translate-x:-50%}.chatkit-wrapper .translate-x-px{--tw-translate-x:1px}.chatkit-wrapper .translate-x-px,.chatkit-wrapper .translate-y-\[-50\%\]{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-\[-50\%\]{--tw-translate-y:-50%}.chatkit-wrapper .translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y:calc(-50% - 2px)}.chatkit-wrapper .rotate-0,.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 .rotate-0{--tw-rotate:0deg}.chatkit-wrapper .rotate-180{--tw-rotate:180deg}.chatkit-wrapper .rotate-180,.chatkit-wrapper .rotate-45{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-45{--tw-rotate:45deg}.chatkit-wrapper .rotate-90{--tw-rotate:90deg}.chatkit-wrapper .rotate-90,.chatkit-wrapper .transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.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-not-allowed{cursor:not-allowed}.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-2{grid-template-columns:repeat(2,minmax(0,1fr))}.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-6{gap:1.5rem}.chatkit-wrapper .gap-\[12px\]{gap:12px}.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 .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-\[24px\]{border-radius:24px}.chatkit-wrapper .rounded-\[2px\]{border-radius:2px}.chatkit-wrapper .rounded-\[4px\]{border-radius:4px}.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-sm{border-radius:.125rem}.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 .rounded-bl-lg{border-bottom-left-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-b-2{border-bottom-width:2px}.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-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.chatkit-wrapper .border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/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-blue-400{--tw-bg-opacity:1!important;background-color:rgb(96 165 250/var(--tw-bg-opacity,1))!important}.chatkit-wrapper .\!bg-gray-300{--tw-bg-opacity:1!important;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))!important}.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-\[\#D1F5DD\]{--tw-bg-opacity:1;background-color:rgb(209 245 221/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-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.chatkit-wrapper .bg-blue-50\/30{background-color:rgba(239,246,255,.3)}.chatkit-wrapper .bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.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-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 .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-white{--tw-gradient-to:#fff var(--tw-gradient-to-position)}.chatkit-wrapper .fill-green-500{fill:#22c55e}.chatkit-wrapper .fill-red-500{fill:#ef4444}.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-0\.5{padding:.125rem}.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-\[16px\]{padding-left:16px;padding-right:16px}.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-\[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-2{padding-bottom:.5rem}.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 .font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.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-\[14px\]{font-size:14px}.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 .capitalize{text-transform:capitalize}.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-\[\#737A87\]{--tw-text-opacity:1;color:rgb(115 122 135/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-green-900{--tw-text-opacity:1;color:rgb(20 83 45/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{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 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 .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-\[\#f5f5f5\]:hover{--tw-bg-opacity:1;background-color:rgb(245 245 245/var(--tw-bg-opacity,1))}.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-black\/10:hover{background-color:rgba(0,0,0,.1)}.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-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\:to-blue-800:hover{--tw-gradient-to:#1e40af 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 .focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.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-\[state\=active\]\:border-\[\#2962FF\][data-state=active]{--tw-border-opacity:1;border-color:rgb(41 98 255/var(--tw-border-opacity,1))}.chatkit-wrapper .data-\[state\=active\]\:bg-background[data-state=active]{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.chatkit-wrapper .data-\[state\=active\]\:bg-transparent[data-state=active]{background-color:transparent}.chatkit-wrapper .data-\[active\=true\]\:font-medium[data-active=true],.chatkit-wrapper .data-\[state\=active\]\:font-medium[data-state=active]{font-weight:500}.chatkit-wrapper .data-\[state\=active\]\:text-\[\#2962FF\][data-state=active]{--tw-text-opacity:1;color:rgb(41 98 255/var(--tw-text-opacity,1))}.chatkit-wrapper .data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.chatkit-wrapper .data-\[state\=active\]\:shadow-none[data-state=active]{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.chatkit-wrapper .data-\[state\=active\]\:shadow-sm[data-state=active]{--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 .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-\[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\: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}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chat-lab/ui",
3
- "version": "0.1.0-beta.38",
3
+ "version": "0.1.0-beta.39",
4
4
  "type": "module",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.js",