@stainless-api/docs-ui 0.1.0-beta.29 → 0.1.0-beta.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{breadcrumbs-D5viAm7a.d.ts → breadcrumbs-wJ7A9MGt.d.ts} +2 -2
- package/dist/{component-generics-BnrVqdQj.d.ts → component-generics--y1IC_M-.d.ts} +2 -1
- package/dist/{component-generics-Df4EDvxk.js → component-generics-D3ybuN5r.js} +5 -1
- package/dist/components/breadcrumbs.d.ts +1 -1
- package/dist/components/breadcrumbs.js +13 -14
- package/dist/components/chat.d.ts +3 -3
- package/dist/components/chat.js +64 -50
- package/dist/components/icons.d.ts +10 -10
- package/dist/components/icons.js +1 -1
- package/dist/components/index.d.ts +11 -12
- package/dist/components/index.js +14 -15
- package/dist/components/method.d.ts +1 -1
- package/dist/components/method.js +13 -14
- package/dist/components/overview.d.ts +1 -1
- package/dist/components/overview.js +13 -14
- package/dist/components/primitives.d.ts +1 -1
- package/dist/components/primitives.js +13 -14
- package/dist/components/properties.d.ts +1 -1
- package/dist/components/properties.js +13 -14
- package/dist/components/sdk.d.ts +2 -2
- package/dist/components/sdk.js +13 -14
- package/dist/components/sidebar.d.ts +1 -1
- package/dist/components/sidebar.js +13 -14
- package/dist/components/snippets.d.ts +3 -3
- package/dist/components/snippets.js +13 -14
- package/dist/contexts/component-generics.d.ts +1 -1
- package/dist/contexts/component-generics.js +1 -1
- package/dist/contexts/component-types.d.ts +11 -12
- package/dist/contexts/component-types.js +0 -1
- package/dist/contexts/component.d.ts +14 -14
- package/dist/contexts/component.js +13 -14
- package/dist/contexts/docs.d.ts +1 -1
- package/dist/contexts/docs.js +1 -1
- package/dist/contexts/index.d.ts +18 -19
- package/dist/contexts/index.js +13 -14
- package/dist/contexts/markdown.d.ts +1 -1
- package/dist/contexts/markdown.js +2 -2
- package/dist/contexts/navigation.d.ts +2 -2
- package/dist/contexts/navigation.js +1 -1
- package/dist/contexts/search.d.ts +3 -3
- package/dist/contexts/search.js +13 -14
- package/dist/contexts/use-components.d.ts +10 -11
- package/dist/contexts/use-components.js +2 -2
- package/dist/contexts-CMNI3ctP.js +3799 -0
- package/dist/{docs-DhNaW0DE.d.ts → docs-BvahWQ28.d.ts} +2 -1
- package/dist/{docs-Cj25B-Sh.js → docs-CopwX9a7.js} +5 -1
- package/dist/icons-yb-Jhkmg.js +753 -0
- package/dist/{index-d8_VR8Z5.d.ts → index-BmPNhnpe.d.ts} +6 -6
- package/dist/{index-BXO3gZup.d.ts → index-D5NMSAld.d.ts} +26 -25
- package/dist/index-rVFBdVz8.d.ts +15 -0
- package/dist/index.d.ts +20 -21
- package/dist/index.js +15 -7700
- package/dist/languages/go.d.ts +11 -12
- package/dist/languages/go.js +13 -14
- package/dist/languages/http.d.ts +11 -12
- package/dist/languages/http.js +13 -14
- package/dist/languages/index.d.ts +11 -12
- package/dist/languages/index.js +13 -14
- package/dist/languages/java.d.ts +11 -12
- package/dist/languages/java.js +13 -14
- package/dist/languages/python.d.ts +11 -12
- package/dist/languages/python.js +13 -14
- package/dist/languages/ruby.d.ts +11 -12
- package/dist/languages/ruby.js +13 -14
- package/dist/languages/typescript.d.ts +11 -12
- package/dist/languages/typescript.js +13 -14
- package/dist/markdown/index.d.ts +3 -3
- package/dist/markdown/index.js +13 -14
- package/dist/markdown/md.js +1 -1
- package/dist/markdown/utils.d.ts +3 -3
- package/dist/markdown/utils.js +1 -1
- package/dist/{markdown-DunIdqFE.js → markdown-BmpyokB7.js} +9 -5
- package/dist/{markdown-DN8KaRR2.d.ts → markdown-w5UpIiGc.d.ts} +2 -1
- package/dist/{method-c3XDArUn.d.ts → method-CLpRObBV.d.ts} +7 -6
- package/dist/{navigation-BSn6PX-7.d.ts → navigation-Blr3LaES.d.ts} +3 -2
- package/dist/{navigation-CuCg3le8.js → navigation-CGr5_w6z.js} +5 -1
- package/dist/{overview-D21weqVJ.d.ts → overview-DBnqhjAg.d.ts} +6 -6
- package/dist/{primitives-iB9fIrMF.d.ts → primitives-BFubD3w8.d.ts} +9 -8
- package/dist/{properties-Ba6F_GGj.d.ts → properties-DeQRa6VK.d.ts} +4 -4
- package/dist/{routing-C8oZYLsf.js → routing-8itEXLx6.js} +1 -1
- package/dist/{routing-BE6Vrs-z.d.ts → routing-DNN8R6bZ.d.ts} +1 -1
- package/dist/routing.d.ts +1 -1
- package/dist/routing.js +3 -180
- package/dist/{sdk-D2x2l6JH.d.ts → sdk-BVQyp5Dw.d.ts} +14 -13
- package/dist/search/index.d.ts +6 -6
- package/dist/search/index.js +233 -110
- package/dist/search/providers/algolia.d.ts +2 -2
- package/dist/search/providers/algolia.js +13 -14
- package/dist/search/providers/fuse.d.ts +2 -2
- package/dist/search/providers/fuse.js +13 -14
- package/dist/search/providers/pagefind.d.ts +2 -2
- package/dist/search/providers/pagefind.js +1 -1
- package/dist/search/providers/walker.d.ts +2 -2
- package/dist/search/providers/walker.js +13 -14
- package/dist/search/types.d.ts +2 -2
- package/dist/search/types.js +1 -1
- package/dist/{search-KMqOU2tz.d.ts → search-CPp6HpUy.d.ts} +3 -2
- package/dist/{sidebar-B1X4gmY2.d.ts → sidebar-BoPLeaxp.d.ts} +5 -4
- package/dist/{snippets-BApdMOXp.d.ts → snippets-DLHH_Voi.d.ts} +7 -6
- package/dist/{style-BWu-Pqcm.d.ts → style-BEMLtSIK.d.ts} +0 -10
- package/dist/{style-CkbsakoF.js → style-CPgcT0Fw.js} +1 -11
- package/dist/style.d.ts +1 -1
- package/dist/style.js +1 -1
- package/dist/styles/main.css +51 -20
- package/dist/styles/main.js +0 -0
- package/dist/styles/primitives.css +1 -0
- package/dist/styles/primitives.js +0 -0
- package/dist/styles/resets.css +1 -0
- package/dist/styles/resets.js +0 -0
- package/dist/styles/search.css +1 -0
- package/dist/styles/search.js +0 -0
- package/dist/styles/sidebar.css +1 -0
- package/dist/styles/sidebar.js +0 -0
- package/dist/styles/snippets.css +1 -0
- package/dist/styles/snippets.js +0 -0
- package/dist/styles/variables.css +2 -0
- package/dist/styles/variables.js +0 -0
- package/dist/{types-BLgvxY4i.d.ts → types-DNSz4kuM.d.ts} +1 -1
- package/dist/{use-components-DI-AbT-D.js → use-components-BHEwm0mE.js} +1 -1
- package/dist/{utils-BhYTrLot.js → utils-2FmcHPHp.js} +2 -2
- package/dist/{utils-B9JL_XWH.d.ts → utils-DVi3gJLL.d.ts} +2 -2
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +2 -2
- package/package.json +63 -10
- package/dist/components/dropdown.d.ts +0 -2
- package/dist/components/dropdown.js +0 -4
- package/dist/components/scripts/dropdown.d.ts +0 -12
- package/dist/components/scripts/dropdown.js +0 -50
- package/dist/contexts-DO0sMzym.js +0 -2581
- package/dist/dropdown-Dv9VAYCW.d.ts +0 -42
- package/dist/dropdown-kUhwBigR.js +0 -38
- package/dist/icons--8QR-PrL.js +0 -222
- package/dist/index-BW6OPqAo.d.ts +0 -16
- package/dist/mcp.cjs +0 -983418
- package/src/components/breadcrumbs.tsx +0 -94
- package/src/components/chat.tsx +0 -157
- package/src/components/icons.tsx +0 -584
- package/src/components/index.ts +0 -8
- package/src/components/method.tsx +0 -145
- package/src/components/overview.tsx +0 -172
- package/src/components/primitives.tsx +0 -301
- package/src/components/properties.tsx +0 -132
- package/src/components/sdk.tsx +0 -408
- package/src/components/sidebar.tsx +0 -99
- package/src/components/snippets.tsx +0 -197
- package/src/contexts/component-generics.tsx +0 -43
- package/src/contexts/component-types.tsx +0 -5
- package/src/contexts/component.tsx +0 -32
- package/src/contexts/docs.tsx +0 -86
- package/src/contexts/index.tsx +0 -20
- package/src/contexts/markdown.tsx +0 -44
- package/src/contexts/navigation.tsx +0 -44
- package/src/contexts/search.tsx +0 -27
- package/src/contexts/use-components.tsx +0 -4
- package/src/hooks/use-strict-context.tsx +0 -16
- package/src/index.ts +0 -6
- package/src/languages/go.tsx +0 -281
- package/src/languages/http.tsx +0 -329
- package/src/languages/index.ts +0 -26
- package/src/languages/java.tsx +0 -358
- package/src/languages/python.tsx +0 -258
- package/src/languages/ruby.tsx +0 -327
- package/src/languages/typescript.tsx +0 -399
- package/src/markdown/index.ts +0 -112
- package/src/markdown/md.ts +0 -45
- package/src/markdown/utils.ts +0 -52
- package/src/routing.ts +0 -238
- package/src/search/form.tsx +0 -130
- package/src/search/index.tsx +0 -1
- package/src/search/indexer.ts +0 -248
- package/src/search/mcp.ts +0 -156
- package/src/search/printer.tsx +0 -86
- package/src/search/providers/algolia.ts +0 -88
- package/src/search/providers/fuse.ts +0 -19
- package/src/search/providers/pagefind.ts +0 -17
- package/src/search/providers/walker.ts +0 -32
- package/src/search/results.tsx +0 -183
- package/src/search/state.ts +0 -64
- package/src/search/types.ts +0 -116
- package/src/style.ts +0 -185
- package/src/styles/main.css +0 -989
- package/src/styles/primitives.css +0 -392
- package/src/styles/resets.css +0 -39
- package/src/styles/search.css +0 -359
- package/src/styles/sidebar.css +0 -85
- package/src/styles/snippets.css +0 -130
- package/src/styles/variables.css +0 -86
- package/src/utils.ts +0 -40
- /package/dist/{chunk-Bp6m_JJh.js → chunk-DsStOjWQ.js} +0 -0
- /package/dist/{md-Dg8aOyMA.js → md-DxiV1_vy.js} +0 -0
- /package/dist/{pagefind-ChrPfuVv.js → pagefind-BaK1krMe.js} +0 -0
- /package/dist/{types-DFN4M1Sp.js → types-__XoFvJ_.js} +0 -0
- /package/dist/{utils-ByZH9QWT.js → utils-BCfb0F9R.js} +0 -0
- /package/dist/{utils-DlayebL1.d.ts → utils-D43p_yTd.d.ts} +0 -0
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import type * as SDKJSON from '@stainless/sdk-json';
|
|
2
|
-
import { Languages } from '../routing';
|
|
3
|
-
import { ChevronRight } from 'lucide-react';
|
|
4
|
-
import style from '../style';
|
|
5
|
-
import { Join } from './primitives';
|
|
6
|
-
|
|
7
|
-
type Breadcrumb = { title: string; href: string };
|
|
8
|
-
|
|
9
|
-
type BreadcrumbConfig = {
|
|
10
|
-
includeCurrentPage?: boolean;
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
function generateApiBreadcrumbs(fullPath: string, spec: any, basePath: string): Breadcrumb[] | null {
|
|
14
|
-
// Normalize paths. Mostly for basePath since it's configurable and may have trailing slashes
|
|
15
|
-
const cleanBasePath = basePath.replace(/\/+$/, '');
|
|
16
|
-
const cleanPath = fullPath.replace(/\/+$/, '');
|
|
17
|
-
|
|
18
|
-
if (!cleanPath.startsWith(cleanBasePath)) return null;
|
|
19
|
-
|
|
20
|
-
// Slice off the basePath
|
|
21
|
-
const rest = cleanPath.slice(cleanBasePath.length).split('/').filter(Boolean);
|
|
22
|
-
|
|
23
|
-
const breadcrumbs: Breadcrumb[] = [];
|
|
24
|
-
let href = cleanBasePath;
|
|
25
|
-
let i = 0;
|
|
26
|
-
|
|
27
|
-
// Handle sdk language prefix
|
|
28
|
-
if (Languages.includes(rest[0] as (typeof Languages)[number])) {
|
|
29
|
-
href += `/${rest[0]}`;
|
|
30
|
-
i++;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// Always start with API Reference
|
|
34
|
-
breadcrumbs.push({ title: 'API Reference', href });
|
|
35
|
-
|
|
36
|
-
let currentSpec = spec;
|
|
37
|
-
|
|
38
|
-
while (i < rest.length) {
|
|
39
|
-
const idType = rest[i];
|
|
40
|
-
const idValue = rest[i + 1];
|
|
41
|
-
if (!idType || !idValue || !currentSpec?.[idType]?.[idValue]) break;
|
|
42
|
-
|
|
43
|
-
currentSpec = currentSpec[idType][idValue];
|
|
44
|
-
href += `/${idType}/${idValue}`;
|
|
45
|
-
|
|
46
|
-
// This should always exist, but just in case fallback to the raw url value
|
|
47
|
-
const title = (idType === 'methods' ? currentSpec.summary : currentSpec.title) ?? idValue;
|
|
48
|
-
|
|
49
|
-
breadcrumbs.push({
|
|
50
|
-
title,
|
|
51
|
-
href,
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
i += 2;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
return breadcrumbs;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export function SDKBreadcrumbs({
|
|
61
|
-
spec,
|
|
62
|
-
currentPath,
|
|
63
|
-
basePath = '/api',
|
|
64
|
-
config = { includeCurrentPage: false },
|
|
65
|
-
}: {
|
|
66
|
-
spec: SDKJSON.Spec;
|
|
67
|
-
currentPath: string;
|
|
68
|
-
basePath?: string;
|
|
69
|
-
config?: BreadcrumbConfig | null;
|
|
70
|
-
}) {
|
|
71
|
-
const breadcrumbs = generateApiBreadcrumbs(currentPath, spec, basePath);
|
|
72
|
-
|
|
73
|
-
if (!breadcrumbs || breadcrumbs.length === 0) return null;
|
|
74
|
-
|
|
75
|
-
if (!config?.includeCurrentPage && breadcrumbs.length > 1) {
|
|
76
|
-
breadcrumbs.pop();
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
const items = breadcrumbs.map((crumb, index) => (
|
|
80
|
-
<div key={index} className={style.BreadcrumbsItem}>
|
|
81
|
-
<a href={crumb.href} className={style.BreadcrumbsLink}>
|
|
82
|
-
{crumb.title}
|
|
83
|
-
</a>
|
|
84
|
-
</div>
|
|
85
|
-
));
|
|
86
|
-
|
|
87
|
-
return (
|
|
88
|
-
<div className={style.Breadcrumbs}>
|
|
89
|
-
<Join limit={breadcrumbs.length} items={items}>
|
|
90
|
-
<ChevronRight />
|
|
91
|
-
</Join>
|
|
92
|
-
</div>
|
|
93
|
-
);
|
|
94
|
-
}
|
package/src/components/chat.tsx
DELETED
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import { useChat } from 'ai/react';
|
|
3
|
-
import { ArrowUpIcon, BotMessageSquareIcon, LoaderCircleIcon, SquareIcon, TrashIcon } from 'lucide-react';
|
|
4
|
-
import { useLanguage, useSearchContext } from '../contexts';
|
|
5
|
-
import { Markdown } from './primitives';
|
|
6
|
-
import type { SearchSettings } from '../search/types';
|
|
7
|
-
import type { Message, UIMessage } from 'ai';
|
|
8
|
-
import style from '../style';
|
|
9
|
-
|
|
10
|
-
const BASEURL = 'https://askai.algolia.com';
|
|
11
|
-
|
|
12
|
-
function buildFetch({ appId, searchKey, indexName, assistant }: SearchSettings) {
|
|
13
|
-
const headers: Record<string, string> = {
|
|
14
|
-
'X-Algolia-Application-Id': appId,
|
|
15
|
-
'X-Algolia-API-Key': searchKey,
|
|
16
|
-
'X-Algolia-Index-Name': `${indexName}-chat`,
|
|
17
|
-
};
|
|
18
|
-
if (assistant) {
|
|
19
|
-
headers['X-Algolia-Assistant-Id'] = assistant;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
return async (input: RequestInfo | URL, init: RequestInit | undefined) => {
|
|
23
|
-
const response = await fetch(`${BASEURL}/chat/token`, { method: 'POST', headers });
|
|
24
|
-
const data = (await response.json()) as Record<string, unknown>;
|
|
25
|
-
const reqHeaders = new Headers(init?.headers);
|
|
26
|
-
reqHeaders.set('Authorization', `TOKEN ${data['token']}`);
|
|
27
|
-
for (const name in headers) {
|
|
28
|
-
reqHeaders.set(name, headers[name]!);
|
|
29
|
-
}
|
|
30
|
-
return fetch(input, {
|
|
31
|
-
...init,
|
|
32
|
-
headers: reqHeaders,
|
|
33
|
-
});
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function RenderMessage({ message }: { message: UIMessage }) {
|
|
38
|
-
return message.parts
|
|
39
|
-
.filter((part) => part.type === 'text')
|
|
40
|
-
.map((part, key) => <Markdown key={key} content={part['text']} />);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export function Chat() {
|
|
44
|
-
const language = useLanguage();
|
|
45
|
-
const { settings } = useSearchContext();
|
|
46
|
-
const messageListRef = React.useRef<HTMLDivElement>(null);
|
|
47
|
-
|
|
48
|
-
const { messages, setMessages, status, input, setInput, append, stop } = useChat({
|
|
49
|
-
body: { searchParameters: { filters: `language:${language ?? 'http'}` } },
|
|
50
|
-
sendExtraMessageFields: true,
|
|
51
|
-
fetch: buildFetch(settings),
|
|
52
|
-
api: `${BASEURL}/chat`,
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
React.useEffect(() => {
|
|
56
|
-
const content = sessionStorage.getItem('stldocs-chat-messages');
|
|
57
|
-
if (!content) return;
|
|
58
|
-
|
|
59
|
-
setMessages(JSON.parse(content) as Message[]);
|
|
60
|
-
setTimeout(() => {
|
|
61
|
-
if (!messageListRef.current) return;
|
|
62
|
-
messageListRef.current.scrollTop = messageListRef.current.scrollHeight;
|
|
63
|
-
}, 10);
|
|
64
|
-
}, [setMessages]);
|
|
65
|
-
|
|
66
|
-
React.useEffect(() => {
|
|
67
|
-
if (status !== 'submitted' || !messageListRef.current) return;
|
|
68
|
-
const messageElements = messageListRef.current.querySelectorAll('[data-stldocs-chat-message]');
|
|
69
|
-
[...messageElements].at(-1)?.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
|
70
|
-
}, [status]);
|
|
71
|
-
|
|
72
|
-
React.useEffect(() => {
|
|
73
|
-
sessionStorage.setItem('stldocs-chat-messages', JSON.stringify(messages));
|
|
74
|
-
}, [messages]);
|
|
75
|
-
|
|
76
|
-
function handleSend() {
|
|
77
|
-
append({ role: 'user', content: input });
|
|
78
|
-
setInput('');
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
function handleKeyUp(ev: React.KeyboardEvent) {
|
|
82
|
-
if (ev.key === 'Enter' && !ev.shiftKey) {
|
|
83
|
-
ev.preventDefault();
|
|
84
|
-
handleSend();
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
return (
|
|
89
|
-
<>
|
|
90
|
-
<div className={style.ChatMessages} ref={messageListRef}>
|
|
91
|
-
{messages.map((message) => (
|
|
92
|
-
<div key={message.id} className={style.ChatMessage} data-stldocs-chat-message={message.role}>
|
|
93
|
-
<RenderMessage message={message} />
|
|
94
|
-
</div>
|
|
95
|
-
))}
|
|
96
|
-
|
|
97
|
-
{status === 'submitted' && (
|
|
98
|
-
<div className={style.LoadingSpinner}>
|
|
99
|
-
<LoaderCircleIcon />
|
|
100
|
-
</div>
|
|
101
|
-
)}
|
|
102
|
-
|
|
103
|
-
{['submitted', 'streaming'].includes(status) && <div style={{ height: '800px' }}></div>}
|
|
104
|
-
</div>
|
|
105
|
-
<div className={style.ChatInput}>
|
|
106
|
-
<textarea
|
|
107
|
-
value={input}
|
|
108
|
-
placeholder="Ask a question"
|
|
109
|
-
onKeyUp={handleKeyUp}
|
|
110
|
-
onChange={(ev) => setInput(ev.target.value)}
|
|
111
|
-
autoFocus
|
|
112
|
-
/>
|
|
113
|
-
|
|
114
|
-
<div className={style.ChatInputButtons}>
|
|
115
|
-
{status === 'submitted' ? (
|
|
116
|
-
<button onClick={stop}>
|
|
117
|
-
<SquareIcon />
|
|
118
|
-
</button>
|
|
119
|
-
) : (
|
|
120
|
-
<button onClick={handleSend} disabled={input.length < 1}>
|
|
121
|
-
<ArrowUpIcon />
|
|
122
|
-
</button>
|
|
123
|
-
)}
|
|
124
|
-
|
|
125
|
-
<button onClick={() => setMessages([])}>
|
|
126
|
-
<TrashIcon />
|
|
127
|
-
</button>
|
|
128
|
-
</div>
|
|
129
|
-
</div>
|
|
130
|
-
</>
|
|
131
|
-
);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
export type ChatModalProps = {
|
|
135
|
-
id?: string;
|
|
136
|
-
open?: boolean;
|
|
137
|
-
};
|
|
138
|
-
|
|
139
|
-
export function ChatModal({ id, open: isOpen }: ChatModalProps) {
|
|
140
|
-
const [open, setOpen] = React.useState<boolean>(isOpen ?? false);
|
|
141
|
-
|
|
142
|
-
return (
|
|
143
|
-
<div
|
|
144
|
-
id={id}
|
|
145
|
-
onToggle={(ev) => setOpen(ev.newState === 'open')}
|
|
146
|
-
className={style.SearchModal}
|
|
147
|
-
popover="auto"
|
|
148
|
-
data-stldocs-modal-open={open}
|
|
149
|
-
>
|
|
150
|
-
<div className={style.ChatHeader}>
|
|
151
|
-
<BotMessageSquareIcon />
|
|
152
|
-
<h5>Docs Assistant</h5>
|
|
153
|
-
</div>
|
|
154
|
-
{open && <Chat />}
|
|
155
|
-
</div>
|
|
156
|
-
);
|
|
157
|
-
}
|