From 3935dd4b31dccae68fee567a6157edbf7634fd44 Mon Sep 17 00:00:00 2001 From: OvidijusParsiunas Date: Sun, 27 Oct 2024 11:36:25 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20=20@=20db434?= =?UTF-8?q?6e503ed8ecef96ef211704098ae5afd1bf2=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 404.html | 2 +- assets/js/15033d09.21442a76.js | 1 + assets/js/15033d09.ba9708f5.js | 1 - .../js/{runtime~main.18df10d2.js => runtime~main.13a69353.js} | 2 +- docs/connect/index.html | 4 ++-- docs/demo/index.html | 2 +- docs/directConnection/AssemblyAI/index.html | 2 +- docs/directConnection/Azure/index.html | 2 +- docs/directConnection/Cohere/index.html | 2 +- docs/directConnection/HuggingFace/index.html | 2 +- docs/directConnection/OpenAI/index.html | 2 +- docs/directConnection/StabilityAI/index.html | 2 +- docs/directConnection/index.html | 2 +- docs/events/index.html | 2 +- docs/files/index.html | 2 +- docs/installation/index.html | 2 +- docs/interceptors/index.html | 2 +- docs/introPanel/index.html | 2 +- docs/introduction/index.html | 2 +- docs/messages/HTML/index.html | 2 +- docs/messages/index.html | 2 +- docs/messages/styles/index.html | 2 +- docs/methods/index.html | 2 +- docs/speech/index.html | 2 +- docs/styles/index.html | 2 +- docs/webModel/index.html | 2 +- examples/Layout/fullScreen/index.html | 2 +- examples/Layout/sticky/index.html | 2 +- examples/design/index.html | 2 +- examples/externalModules/index.html | 2 +- examples/frameworks/index.html | 2 +- examples/servers/index.html | 2 +- exploreButton/exploreButton/index.html | 2 +- features/captureFiles/captureFiles/index.html | 2 +- features/connect/connect/index.html | 2 +- features/customize/customize/index.html | 2 +- features/features/index.html | 2 +- features/media/media/index.html | 2 +- features/speech/speech/index.html | 2 +- footer/footer/index.html | 2 +- index.html | 2 +- playground/chat/manipulate/playgroundAddButton/index.html | 2 +- playground/chat/playgroundChatComponent/index.html | 2 +- playground/chat/playgroundChatWrapper/index.html | 2 +- playground/chat/playgroundChatWrapperConfig/index.html | 2 +- playground/chat/playgroundChatWrapperLogo/index.html | 2 +- playground/chat/playgroundChatWrapperText/index.html | 2 +- .../header/export/modal/playgroundExportModal/index.html | 2 +- playground/header/export/playgroundExportButton/index.html | 2 +- .../information/modal/playgroundInformationModal/index.html | 2 +- .../header/information/playgroundInformationButton/index.html | 2 +- playground/header/layout/playgroundLayoutButton/index.html | 2 +- playground/header/playgroundCog/index.html | 2 +- playground/header/playgroundHeaderButtons/index.html | 2 +- playground/header/playgroundShield/index.html | 2 +- .../header/upload/modal/playgroundUploadModal/index.html | 2 +- playground/header/upload/playgroundUploadButton/index.html | 2 +- playground/index.html | 2 +- playground/playgroundSelect/index.html | 2 +- .../serviceModal/close/serviceModalCloseButtons/index.html | 2 +- playground/serviceModal/code/serviceCode/index.html | 2 +- .../serviceModal/fields/serviceConstructableObject/index.html | 2 +- playground/serviceModal/fields/serviceField/index.html | 2 +- .../fields/serviceOptionalParametersFields/index.html | 2 +- .../serviceModal/fields/serviceRequiredField/index.html | 2 +- playground/serviceModal/fields/serviceTypeField/index.html | 2 +- playground/serviceModal/serviceModal/index.html | 2 +- .../serviceModal/wrappers/collapsableSection/index.html | 2 +- playground/tooltip/playgroundTooltipWrapper/index.html | 2 +- preload/preloadImages/index.html | 2 +- preload/preloadPlaygroundImages/index.html | 2 +- preload/preloadStartImages/index.html | 2 +- search/index.html | 2 +- smallScreen/deepChatLogo/index.html | 2 +- smallScreen/smallScreen/index.html | 2 +- start/aiInYourBrowser/index.html | 2 +- start/connectToCustomAPI/index.html | 2 +- start/connectToPopularAPI/index.html | 2 +- start/createComponent/index.html | 2 +- start/index.html | 2 +- start/options/index.html | 2 +- start/startParticles/index.html | 2 +- start/startSmallScreen/index.html | 2 +- startPanel/startPanel/index.html | 2 +- startPanel/startPanelParticles/index.html | 2 +- utils/fadeInContent/index.html | 2 +- utils/fadeInNav/index.html | 2 +- utils/onVisibleAnimation/index.html | 2 +- 88 files changed, 88 insertions(+), 88 deletions(-) create mode 100644 assets/js/15033d09.21442a76.js delete mode 100644 assets/js/15033d09.ba9708f5.js rename assets/js/{runtime~main.18df10d2.js => runtime~main.13a69353.js} (99%) diff --git a/404.html b/404.html index 17474705b..b70258c59 100644 --- a/404.html +++ b/404.html @@ -13,7 +13,7 @@ - + diff --git a/assets/js/15033d09.21442a76.js b/assets/js/15033d09.21442a76.js new file mode 100644 index 000000000..46dcebdf2 --- /dev/null +++ b/assets/js/15033d09.21442a76.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1738],{68695:(e,s,A)=>{A.r(s),A.d(s,{assets:()=>C,contentTitle:()=>B,default:()=>I,frontMatter:()=>h,metadata:()=>u,toc:()=>x});var n=A(74848),t=A(28453),r=A(24033),o=A(50363),a=A(15781);const i=A.p+"assets/images/update-websocket-message-8fd40ee660162130c707deba122a4fba.gif";var l=A(78478),c=A(76761),d=A(19365),g=A(11470);const h={sidebar_position:2},B="Connect",u={id:"docs/connect",title:"Connect",description:"How to connect to an API",source:"@site/docs/docs/connect.mdx",sourceDirName:"docs",slug:"/docs/connect",permalink:"/docs/connect",draft:!1,unlisted:!1,editUrl:"https://github.com/OvidijusParsiunas/deep-chat/tree/main/website/docs/docs/connect.mdx",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"docs",previous:{title:"Installation",permalink:"/docs/installation"},next:{title:"Direct Connection",permalink:"/docs/directConnection/"}},C={},x=[{value:"connect",id:"connect-1",level:3},{value:"Example",id:"example",level:4},{value:"requestBodyLimits",id:"requestBodyLimits",level:3},{value:"Example",id:"example-1",level:4},{value:"Types",id:"types",level:2},{value:"Response",id:"Response",level:3},{value:"Examples:",id:"examples",level:4},{value:"Websocket",id:"Websocket",level:3},{value:"Example",id:"example-2",level:4},{value:"Status Bubble Example",id:"status-bubble-example",level:4},{value:"Stream",id:"Stream",level:3},{value:"Stream Service Example",id:"stream-service-example",level:4},{value:"Regular Service Example",id:"regular-service-example",level:4},{value:"Handler",id:"Handler",level:3},{value:"Example",id:"example-3",level:4},{value:"Signals",id:"Signals",level:4}];function E(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"connect",children:"Connect"})}),"\n",(0,n.jsx)("h2",{children:"How to connect to an API"}),"\n",(0,n.jsxs)(s.p,{children:["You can connect to any API by defining their details inside the ",(0,n.jsx)(s.a,{href:"/docs/connect#connect-1",children:(0,n.jsx)(s.code,{children:"connect"})})," property. The target endpoint will need to be able to accept\nand respond using the formats described below."]}),"\n",(0,n.jsxs)("a",{href:"https://youtu.be/NuRhPeqDCus",children:[(0,n.jsx)("img",{src:c.A,className:"youtube-icon"}),(0,n.jsx)(s.p,{children:"Video demo"})]}),"\n",(0,n.jsx)("h3",{children:"Request message"}),"\n",(0,n.jsx)(s.p,{children:"The outgoing Deep Chat request body is encapsulated in one of the following formats:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["When sending ",(0,n.jsx)(s.strong,{children:"text"})," based messages only, the request body will have the following JSON type: ",(0,n.jsx)("br",{}),"\n{",(0,n.jsx)(s.a,{href:"/docs/messages/#MessageContent",children:(0,n.jsx)(s.code,{children:"messages: MessageContent[]"})}),"} ",(0,n.jsx)("br",{})]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["When sending messages that contain ",(0,n.jsx)(s.strong,{children:"files"}),", the request body is going to be serialized inside a ",(0,n.jsx)(s.a,{href:"https://developer.mozilla.org/en-US/docs/Web/API/FormData",children:"FormData"})," type\nwhere files are set inside an array property called ",(0,n.jsx)(s.em,{children:'"files"'})," and each text message is stored inside a ",(0,n.jsx)(s.em,{children:'"message{index}"'})," property with a corresponding index: ",(0,n.jsx)("br",{}),"\n{",(0,n.jsx)(s.code,{children:"files: File[]"}),", ",(0,n.jsx)(s.a,{href:"/docs/messages/#MessageContent",children:(0,n.jsx)(s.code,{children:"message1: MessageContent"})}),", ",(0,n.jsx)(s.a,{href:"/docs/messages/#MessageContent",children:(0,n.jsx)(s.code,{children:"message2: MessageContent"})}),"... } ",(0,n.jsx)("br",{})]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)("h3",{children:"Response message"}),"\n",(0,n.jsxs)(s.p,{children:["Response from the target server needs to use the ",(0,n.jsx)(s.a,{href:"#Response",children:(0,n.jsx)(s.code,{children:"Response"})})," JSON type."]}),"\n",(0,n.jsx)(s.admonition,{type:"tip",children:(0,n.jsxs)(s.p,{children:["If you don't want / can't change the target server to handle the required object types, use the ",(0,n.jsx)(s.a,{href:"/docs/interceptors",children:(0,n.jsx)(s.code,{children:"interceptor"})})," properties\nto augment the transferred objects or the ",(0,n.jsx)(s.a,{href:"#Handler",children:(0,n.jsx)(s.code,{children:"handler"})})," function to control the request code."]})}),"\n",(0,n.jsx)("h2",{children:"Connection properties"}),"\n","\n",(0,n.jsx)(l.A,{children:()=>A(61886).readdAutoNavShadowToggle()}),"\n",(0,n.jsx)(s.h3,{id:"connect-1",children:(0,n.jsx)(s.code,{children:"connect"})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Type: {",(0,n.jsx)("br",{}),"\n\xa0\xa0\xa0\xa0 ",(0,n.jsx)(s.code,{children:"url?: string"}),", ",(0,n.jsx)("br",{}),"\n\xa0\xa0\xa0\xa0 ",(0,n.jsx)(s.code,{children:"method?: string"}),", ",(0,n.jsx)("br",{}),"\n\xa0\xa0\xa0\xa0 ",(0,n.jsx)(s.code,{children:"headers?: {[string]: string}"}),", ",(0,n.jsx)("br",{}),"\n\xa0\xa0\xa0\xa0 ",(0,n.jsx)(s.code,{children:"additionalBodyProps?: {[string]: any}"}),", ",(0,n.jsx)("br",{}),"\n\xa0\xa0\xa0\xa0 ",(0,n.jsx)(s.a,{href:"https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials",children:(0,n.jsx)(s.code,{children:"credentials?: string"})}),", ",(0,n.jsx)("br",{}),"\n\xa0\xa0\xa0\xa0 ",(0,n.jsx)(s.a,{href:"#Websocket",children:(0,n.jsx)(s.code,{children:"websocket?: Websocket"})}),", ",(0,n.jsx)("br",{}),"\n\xa0\xa0\xa0\xa0 ",(0,n.jsx)(s.a,{href:"#Stream",children:(0,n.jsx)(s.code,{children:"stream?: Stream"})}),", ",(0,n.jsx)("br",{}),"\n\xa0\xa0\xa0\xa0 ",(0,n.jsx)(s.a,{href:"#Handler",children:(0,n.jsx)(s.code,{children:"handler?: Handler"})})," ",(0,n.jsx)("br",{}),"\n}"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Default: ",(0,n.jsx)(s.em,{children:'{ method: "POST", credentials: "same-origin" }'})]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Settings for the outgoing API requests. This object MUST have ",(0,n.jsx)(s.code,{children:"url"})," or ",(0,n.jsx)(s.code,{children:"handler"})," property defined. ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"additionalBodyProps"})," is used to add additional key value properties to the outgoing message body. ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"credentials"})," is used to configure whether the outgoing request should contain cookies. ",(0,n.jsx)(s.a,{href:"https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials",children:"More info"}),". ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"websocket"})," is used to establish a websocket connection instead of sending REST requests."]}),"\n",(0,n.jsxs)("a",{href:"https://youtu.be/NuRhPeqDCus?si=B98OGweTBwiMnMzb&t=40",children:[(0,n.jsx)("img",{src:c.A,className:"youtube-icon"}),(0,n.jsx)(s.p,{children:"Video demo"})]}),"\n",(0,n.jsx)(s.h4,{id:"example",children:"Example"}),"\n",(0,n.jsx)(r.A,{children:(0,n.jsx)(o.A,{style:{borderRadius:"8px"},connect:{url:"https://customapi.com/message",method:"POST",headers:{customName:"customHeaderValue"},additionalBodyProps:{customBodyField:"customBodyValue"}}})}),"\n",(0,n.jsxs)(g.A,{children:[(0,n.jsx)(d.A,{value:"js",label:"Sample code",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-html",children:'\n'})})}),(0,n.jsx)(d.A,{value:"py",label:"Full code",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-html",children:'\x3c!-- This example is for Vanilla JS and should be tailored to your framework (see Examples) --\x3e\n\n\n'})})})]}),"\n",(0,n.jsx)(a.A,{}),"\n",(0,n.jsx)(s.h3,{id:"requestBodyLimits",children:(0,n.jsx)(s.code,{children:"requestBodyLimits"})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Type: {",(0,n.jsx)(s.code,{children:"maxMessages?: number"}),", ",(0,n.jsx)(s.code,{children:"totalMessagesMaxCharLength?: number"}),"}"]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Used to limit the content that is going to be included in the outgoing requests. ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"maxMessages"})," is the maximum number of messages counting from the most recent one. If this is set to a number higher than ",(0,n.jsx)(s.em,{children:"0"})," such as ",(0,n.jsx)(s.em,{children:"1"})," - the outgoing request will only include the new user message,\nif it is ",(0,n.jsx)(s.em,{children:"2"})," - it will also include the message before the latest one (from AI or the user) and so on... If the number is ",(0,n.jsx)(s.em,{children:"0"})," or below - the request will include all messages in the chat. If\nit is ",(0,n.jsx)(s.em,{children:"undefined"}),", the request will only include the input text/files. ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"totalMessagesMaxCharLength"})," is the total maximum number of text characters sent in the request counting from the most recent message. ",(0,n.jsx)("br",{}),"\nThese limits do not include the ",(0,n.jsx)(s.a,{href:"/docs/messages#introMessage",children:(0,n.jsx)(s.code,{children:"introMessage"})}),"."]}),"\n",(0,n.jsx)(s.h4,{id:"example-1",children:"Example"}),"\n",(0,n.jsx)(r.A,{children:(0,n.jsx)(o.A,{style:{borderRadius:"8px"},introMessage:{text:"Observe the data that is going to be sent below."},requestBodyLimits:{totalMessagesMaxCharLength:20,maxMessages:2},demo:!0})}),"\n",(0,n.jsxs)(g.A,{children:[(0,n.jsx)(d.A,{value:"js",label:"Sample code",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-html",children:'\n'})})}),(0,n.jsx)(d.A,{value:"py",label:"Full code",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-html",children:'\x3c!-- This example is for Vanilla JS and should be tailored to your framework (see Examples) --\x3e\n\n\n'})})})]}),"\n",(0,n.jsx)(a.A,{}),"\n",(0,n.jsx)(s.h2,{id:"types",children:"Types"}),"\n",(0,n.jsx)(s.p,{children:"Types shared with other component properties:"}),"\n",(0,n.jsx)(s.h3,{id:"Response",children:(0,n.jsx)(s.code,{children:"Response"})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Type: {",(0,n.jsx)(s.a,{href:"/docs/messages/#MessageContent",children:(0,n.jsx)(s.code,{children:"MessageContent"})}),", ",(0,n.jsx)(s.code,{children:"error?: string"}),", ",(0,n.jsx)(s.code,{children:"overwrite?: boolean"}),"}"]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Object containing response information from the target service. It has the same properties as ",(0,n.jsx)(s.a,{href:"/docs/messages/#MessageContent",children:(0,n.jsx)(s.code,{children:"MessageContent"})})," with additional optional ",(0,n.jsx)(s.code,{children:"error"})," and\n",(0,n.jsx)(s.code,{children:"overwrite"})," properties: ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"text"})," is the content for a text message. ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"files"})," is an array that encapsulates details on the response files. ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"html"})," is a string that defines the markup for ",(0,n.jsx)(s.a,{href:"/docs/messages/HTML",children:"custom elements"}),". It must describe full elements. ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"error"})," describes information about a server error. If the ",(0,n.jsx)(s.em,{children:"displayServiceErrorMessages"})," property in ",(0,n.jsx)(s.a,{href:"/docs/messages#errorMessages",children:(0,n.jsx)(s.code,{children:"errorMessages"})}),"\nis set to ",(0,n.jsx)(s.em,{children:"true"}),", the same message will be displayed in the chat's error bubble. ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"overwrite"})," replaces last message from the same role or creates a new one if not found. ",(0,n.jsx)(s.a,{href:"#status-bubble-example",children:"Status bubble"})," example. ",(0,n.jsx)("br",{})]}),"\n",(0,n.jsx)(s.h4,{id:"examples",children:"Examples:"}),"\n",(0,n.jsxs)(s.p,{children:["Simple - ",(0,n.jsx)(s.code,{children:'{text: "Simple response"}'})," ",(0,n.jsx)("br",{}),"\nMixed - ",(0,n.jsx)(s.code,{children:'{files: [{name: "file.txt"}], html: "
Custom Element
"}'})," ",(0,n.jsx)("br",{}),"\nCustom role - ",(0,n.jsx)(s.code,{children:'{role: "bob", text: "Message from bob"}'})," ",(0,n.jsx)("br",{}),"\nError - ",(0,n.jsx)(s.code,{children:'{error: "Service Error"}'})," ",(0,n.jsx)("br",{}),"\nOverwrite - ",(0,n.jsx)(s.code,{children:'{text: "New text", overwrite: true}'})," ",(0,n.jsx)("br",{})]}),"\n",(0,n.jsx)(a.A,{}),"\n",(0,n.jsx)(s.h3,{id:"Websocket",children:(0,n.jsx)(s.code,{children:"Websocket"})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Type: ",(0,n.jsx)(s.code,{children:"boolean"})," | ",(0,n.jsx)(s.code,{children:"string"})," | ",(0,n.jsx)(s.code,{children:"string[]"})]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["This is used to establish a websocket connection with your server. Enable it by defining the ",(0,n.jsx)(s.code,{children:"websocket"})," property inside the ",(0,n.jsx)(s.a,{href:"#connect-1",children:(0,n.jsx)(s.code,{children:"connect"})})," object\nas a ",(0,n.jsx)(s.code,{children:"boolean"})," ",(0,n.jsx)(s.em,{children:"true"})," or as a string ",(0,n.jsx)(s.a,{href:"https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications#creating_a_websocket_object",children:"connection protocol"}),"\n(or an array of strings for multiple protocols). ",(0,n.jsx)("br",{}),"\nIt is important to note that exchanged messages must be Stringified JSONs where Deep Chat will send its messages using the ",(0,n.jsx)(s.a,{href:"connect",children:"Request message"})," format\nand the server must send its messages using the ",(0,n.jsx)(s.a,{href:"#Response",children:(0,n.jsx)(s.code,{children:"Response"})})," format. Example messages: ",(0,n.jsx)("br",{}),"\nDeep Chat message: ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:'\'{"messages":[{"role":"user","text":"Message from Deep Chat"}]}\''})," ",(0,n.jsx)("br",{}),"\nServer message: ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:'\'{"text":"Message from the server"}\''})]}),"\n",(0,n.jsx)(s.h4,{id:"example-2",children:"Example"}),"\n",(0,n.jsx)(r.A,{children:(0,n.jsx)(o.A,{connect:{url:"wss://customapi.com",websocket:!0},style:{borderRadius:"8px"},introMessage:'{"text": Chat will attempt to establish a websocket connection as soon as the component loads up."}'})}),"\n",(0,n.jsxs)(g.A,{children:[(0,n.jsx)(d.A,{value:"js",label:"Sample code",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-html",children:'\n'})})}),(0,n.jsx)(d.A,{value:"py",label:"Full code",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-html",children:'\x3c!-- This example is for Vanilla JS and should be tailored to your framework (see Examples) --\x3e\n\n\n'})})})]}),"\n",(0,n.jsx)(a.A,{}),"\n",(0,n.jsx)(s.admonition,{type:"tip",children:(0,n.jsxs)(s.p,{children:["Check the ",(0,n.jsx)(s.a,{href:"https://github.com/OvidijusParsiunas/deep-chat/tree/main/example-servers/node/websockets",children:"websocket server template"})," to help you get started."]})}),"\n",(0,n.jsx)(a.A,{}),"\n",(0,n.jsx)(s.h4,{id:"status-bubble-example",children:"Status Bubble Example"}),"\n",(0,n.jsx)("img",{src:i,style:{marginLeft:"auto",marginRight:"auto",display:"flex",height:"380px",marginBottom:"5px"}}),"\n",(0,n.jsxs)(g.A,{children:[(0,n.jsx)(d.A,{value:"js",label:"Sample code",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-text",children:'Messages from the server:\n1: {text: "Downloading...", overwrite: true}\n2: {text: "Loading...", overwrite: true}\n3: {text: "Processing...", overwrite: true}\n4: {text: "Ready...", overwrite: true}\n'})})}),(0,n.jsx)(d.A,{value:"py",label:"Full code",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-text",children:'Component configuration:\n\n\nMessages from the server:\n1: {text: "Downloading...", overwrite: true}\n2: {text: "Loading...", overwrite: true}\n3: {text: "Processing...", overwrite: true}\n4: {text: "Ready...", overwrite: true}\n'})})})]}),"\n",(0,n.jsx)(a.A,{}),"\n",(0,n.jsx)(s.h3,{id:"Stream",children:(0,n.jsx)(s.code,{children:"Stream"})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Type: ",(0,n.jsx)(s.code,{children:"boolean"})," | {",(0,n.jsx)(s.code,{children:"simulation?: boolean | number | string"}),"}"]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Used to stream responses from the target service. ",(0,n.jsx)("br",{}),"\nBy setting ",(0,n.jsx)(s.em,{children:"true"})," - the chat will stream incoming ",(0,n.jsx)(s.a,{href:"https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events",children:(0,n.jsx)(s.code,{children:"server-sent events"})})," from\nthe server. See ",(0,n.jsx)(s.a,{href:"https://deepchat.dev/examples/servers",children:(0,n.jsx)(s.code,{children:"example"})})," server code. ",(0,n.jsx)("br",{}),"\nThe responses are expected to contain partial text, however you can use ",(0,n.jsx)(s.a,{href:"#Response",children:(0,n.jsx)(s.code,{children:"overwrite"})})," to overwrite each one. ",(0,n.jsx)("br",{}),"\nYou can alternatively use the ",(0,n.jsx)(s.code,{children:"simulation"})," object property to facilitate a ",(0,n.jsx)("b",{children:"stream-like"})," experience for any other connection type where the received content wil be\ngradually populated in the message bubble. You can control the millisecond interim of each word's appearance by assigning it a number with the default being ",(0,n.jsx)(s.em,{children:"6"}),".\nA string value is used to act like an ",(0,n.jsx)(s.em,{children:"end-phrase"})," for individual websocket messages that act like a stream. ",(0,n.jsx)("br",{})]}),"\n",(0,n.jsx)(s.h4,{id:"stream-service-example",children:"Stream Service Example"}),"\n",(0,n.jsx)(r.A,{children:(0,n.jsx)(o.A,{style:{borderRadius:"8px"},connect:{stream:!0},demo:!0,introMessage:{text:"The response message bubble will be populated gradually with text events."}})}),"\n",(0,n.jsxs)(g.A,{children:[(0,n.jsx)(d.A,{value:"js",label:"Sample code",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-html",children:"\n"})})}),(0,n.jsx)(d.A,{value:"py",label:"Full code",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-html",children:'\x3c!-- This example is for Vanilla JS and should be tailored to your framework (see Examples) --\x3e\n\n\n'})})})]}),"\n",(0,n.jsx)(a.A,{}),"\n",(0,n.jsx)(s.h4,{id:"regular-service-example",children:"Regular Service Example"}),"\n",(0,n.jsx)(r.A,{children:(0,n.jsx)(o.A,{style:{borderRadius:"8px"},connect:{stream:{simulation:6}},demo:!0,introMessage:{text:"The response message bubble will be populated gradually with text events."}})}),"\n",(0,n.jsxs)(g.A,{children:[(0,n.jsx)(d.A,{value:"js",label:"Sample code",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-html",children:'\n'})})}),(0,n.jsx)(d.A,{value:"py",label:"Full code",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-html",children:'\x3c!-- This example is for Vanilla JS and should be tailored to your framework (see Examples) --\x3e\n\n\n'})})})]}),"\n",(0,n.jsx)(a.A,{}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"stream"})," can be used in ",(0,n.jsx)(s.a,{href:"connect",children:(0,n.jsx)(s.code,{children:"connect"})})," by itself when ",(0,n.jsx)(s.a,{href:"https://deepchat.dev/docs/demo",children:(0,n.jsx)(s.code,{children:"demo"})})," is defined."]})}),"\n",(0,n.jsx)(a.A,{}),"\n",(0,n.jsx)(s.h3,{id:"Handler",children:(0,n.jsx)(s.code,{children:"Handler"})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Type: (",(0,n.jsx)(s.code,{children:"body: any"}),", ",(0,n.jsx)(s.a,{href:"#Signals",children:(0,n.jsx)(s.code,{children:"signals: Signals"})}),") => ",(0,n.jsx)(s.code,{children:"void"})]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["This function gives developers full control for making server requests using their own code. ",(0,n.jsx)("br",{})," It is invoked when the user\nattempts to send a message and consists of two core arguments: ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"body"})," is an object that contains the outgoing message details and uses the ",(0,n.jsx)(s.a,{href:"/docs/connect",children:(0,n.jsx)(s.code,{children:"Request message"})})," type. ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"signals"})," is a map of functions which are used to notify Deep Chat on the status of the request and its result. The available\nsignal functions differ based on the type of connection you are establishing. See examples below."]}),"\n",(0,n.jsxs)("a",{href:"https://youtu.be/orRVFA5AWfU",children:[(0,n.jsx)("img",{src:c.A,className:"youtube-icon"}),(0,n.jsx)(s.p,{children:"Video demo"})]}),"\n",(0,n.jsx)(s.h4,{id:"example-3",children:"Example"}),"\n",(0,n.jsx)(r.A,{children:(0,n.jsx)(o.A,{connect:{handler:(e,s)=>{s.onResponse({text:"Handler response"})}},style:{borderRadius:"8px"}})}),"\n",(0,n.jsxs)(g.A,{children:[(0,n.jsx)(d.A,{value:"js",label:"Basic",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:"chatElementRef.connect = {\n handler: (body, signals) => {\n try {\n fetch('custom-url').then((response) => {\n signals.onResponse({text: 'Handler response'}); // displays the response text message\n });\n } catch (e) {\n signals.onResponse({error: 'Error'}); // displays an error message\n }\n },\n};\n"})})}),(0,n.jsx)(d.A,{value:"py",label:"Stream",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:"chatElementRef.stream = true;\nchatElementRef.connect = {\n handler: (body, signals) => {\n try {\n // this is PSEUDO CODE for creating a stream\n fetchEventSource('custom-url', {\n async onopen(response) {\n if (response.ok) {\n signals.onOpen(); // stops the loading bubble\n } else {\n signals.onResponse({error: 'error'}); // displays an error message\n }\n },\n onmessage(message) {\n signals.onResponse({text: message}); // adds text into the message bubble\n },\n onerror(message) {\n signals.onResponse({error: message}); // displays an error message\n },\n onclose() {\n signals.onClose(); // The stop button will be changed back to submit button\n },\n });\n // triggered when the user clicks the stop button\n signals.stopClicked.listener = () => {\n // logic to stop your stream, such as creating an abortController\n };\n } catch (e) {\n signals.onResponse({error: 'error'}); // displays an error message\n }\n },\n};\n"})})}),(0,n.jsx)(d.A,{value:"ts",label:"Websocket",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:"// this handler is invoked when the component is loaded\nchatElementRef.connect = {\n websocket: true,\n handler: (_, signals) => {\n try {\n const websocket = new WebSocket('custom-url');\n websocket.onopen = () => {\n signals.onOpen(); // enables the user to send messages\n };\n websocket.onmessage = (message) => {\n const response = JSON.parse(message.data);\n signals.onResponse(response); // displays a text message from the server\n };\n websocket.onclose = () => {\n signals.onClose(); // stops the user from sending messages\n };\n websocket.onerror = () => {\n // 'Connection error' is a special string that will also display in Deep Chat\n signals.onResponse({error: 'Connection error'});\n };\n // triggered when the user sends a message\n signals.newUserMessage.listener = (body) => {\n websocket.send(JSON.stringify(body));\n };\n } catch (e) {\n signals.onResponse({error: 'error'}); // displays an error message\n signals.onClose(); // stops the user from sending messages\n }\n },\n};\n"})})})]}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsxs)(s.p,{children:["Error handling must be done within the ",(0,n.jsx)(s.code,{children:"handler"})," function."]})}),"\n",(0,n.jsx)(a.A,{}),"\n",(0,n.jsx)(s.h4,{id:"Signals",children:(0,n.jsx)(s.code,{children:"Signals"})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Type: { ",(0,n.jsx)("br",{}),"\n\xa0\xa0\xa0\xa0",(0,n.jsx)(s.a,{href:"#Response",children:(0,n.jsx)(s.code,{children:"onResponse: (response: Response) => void"})}),", ",(0,n.jsx)("br",{}),"\n\xa0\xa0\xa0\xa0",(0,n.jsx)(s.code,{children:"onOpen: () => void"}),", ",(0,n.jsx)("br",{}),"\n\xa0\xa0\xa0\xa0",(0,n.jsx)(s.code,{children:"onClose: () => void"}),", ",(0,n.jsx)("br",{}),"\n\xa0\xa0\xa0\xa0",(0,n.jsx)(s.code,{children:"stopClicked: {listener: () => void}"}),", ",(0,n.jsx)("br",{}),"\n\xa0\xa0\xa0\xa0",(0,n.jsx)(s.code,{children:"newUserMessage: {listener: (body: any) => void}"})," ",(0,n.jsx)("br",{}),"\n}"]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Object containing functions that are used to notify the Deep Chat component about the status of the current request.\nThe ",(0,n.jsx)(s.code,{children:"stopClicked"})," and ",(0,n.jsx)(s.code,{children:"newUserMessage"})," functions are triggered by Deep Chat itself and contain ",(0,n.jsx)(s.code,{children:"listener"})," properties\nwhich can be assigned with custom functions to listen for when they are called (see the examples above)."]})]})}function I(e={}){const{wrapper:s}={...(0,t.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(E,{...e})}):E(e)}},19365:(e,s,A)=>{A.d(s,{A:()=>o});A(96540);var n=A(34164);const t={tabItem:"tabItem_Ymn6"};var r=A(74848);function o(e){let{children:s,hidden:A,className:o}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,n.A)(t.tabItem,o),hidden:A,children:s})}},11470:(e,s,A)=>{A.d(s,{A:()=>p});var n=A(96540),t=A(34164),r=A(23104),o=A(56347),a=A(205),i=A(57485),l=A(31682),c=A(70679);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function g(e){const{values:s,children:A}=e;return(0,n.useMemo)((()=>{const e=s??function(e){return d(e).map((e=>{let{props:{value:s,label:A,attributes:n,default:t}}=e;return{value:s,label:A,attributes:n,default:t}}))}(A);return function(e){const s=(0,l.XI)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[s,A])}function h(e){let{value:s,tabValues:A}=e;return A.some((e=>e.value===s))}function B(e){let{queryString:s=!1,groupId:A}=e;const t=(0,o.W6)(),r=function(e){let{queryString:s=!1,groupId:A}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!A)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return A??null}({queryString:s,groupId:A});return[(0,i.aZ)(r),(0,n.useCallback)((e=>{if(!r)return;const s=new URLSearchParams(t.location.search);s.set(r,e),t.replace({...t.location,search:s.toString()})}),[r,t])]}function u(e){const{defaultValue:s,queryString:A=!1,groupId:t}=e,r=g(e),[o,i]=(0,n.useState)((()=>function(e){let{defaultValue:s,tabValues:A}=e;if(0===A.length)throw new Error("Docusaurus error: the component requires at least one children component");if(s){if(!h({value:s,tabValues:A}))throw new Error(`Docusaurus error: The has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${A.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const n=A.find((e=>e.default))??A[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:s,tabValues:r}))),[l,d]=B({queryString:A,groupId:t}),[u,C]=function(e){let{groupId:s}=e;const A=function(e){return e?`docusaurus.tab.${e}`:null}(s),[t,r]=(0,c.Dv)(A);return[t,(0,n.useCallback)((e=>{A&&r.set(e)}),[A,r])]}({groupId:t}),x=(()=>{const e=l??u;return h({value:e,tabValues:r})?e:null})();(0,a.A)((()=>{x&&i(x)}),[x]);return{selectedValue:o,selectValue:(0,n.useCallback)((e=>{if(!h({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),C(e)}),[d,C,r]),tabValues:r}}var C=A(92303);const x={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var E=A(74848);function I(e){let{className:s,block:A,selectedValue:n,selectValue:o,tabValues:a}=e;const i=[],{blockElementScrollPositionUntilNextRender:l}=(0,r.a_)(),c=e=>{const s=e.currentTarget,A=i.indexOf(s),t=a[A].value;t!==n&&(l(s),o(t))},d=e=>{let s=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const A=i.indexOf(e.currentTarget)+1;s=i[A]??i[0];break}case"ArrowLeft":{const A=i.indexOf(e.currentTarget)-1;s=i[A]??i[i.length-1];break}}s?.focus()};return(0,E.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.A)("tabs",{"tabs--block":A},s),children:a.map((e=>{let{value:s,label:A,attributes:r}=e;return(0,E.jsx)("li",{role:"tab",tabIndex:n===s?0:-1,"aria-selected":n===s,ref:e=>i.push(e),onKeyDown:d,onClick:c,...r,className:(0,t.A)("tabs__item",x.tabItem,r?.className,{"tabs__item--active":n===s}),children:A??s},s)}))})}function Q(e){let{lazy:s,children:A,selectedValue:r}=e;const o=(Array.isArray(A)?A:[A]).filter(Boolean);if(s){const e=o.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:(0,t.A)("margin-top--md",e.props.className)}):null}return(0,E.jsx)("div",{className:"margin-top--md",children:o.map(((e,s)=>(0,n.cloneElement)(e,{key:s,hidden:e.props.value!==r})))})}function m(e){const s=u(e);return(0,E.jsxs)("div",{className:(0,t.A)("tabs-container",x.tabList),children:[(0,E.jsx)(I,{...s,...e}),(0,E.jsx)(Q,{...s,...e})]})}function p(e){const s=(0,C.A)();return(0,E.jsx)(m,{...e,children:d(e.children)},String(s))}},15781:(e,s,A)=>{A.d(s,{A:()=>t});A(96540);var n=A(74848);function t(){return(0,n.jsx)("div",{style:{height:"1px"}})}},61886:(e,s,A)=>{function n(e){window.scrollY>0?e.style.boxShadow="0 1px 2px 0 rgb(0 0 0 / 10%)":e.style.boxShadow="unset"}function t(){setTimeout((()=>{window.removeEventListener("scroll",window.toggleNavOnScroll);const e=document.getElementsByClassName("navbar--fixed-top");if(e[0]){const s=e[0];n(s),window.toggleNavOnScroll=n.bind(this,s),window.addEventListener("scroll",window.toggleNavOnScroll)}}),2)}function r(){setTimeout((()=>{const e=document.querySelectorAll(".homepage > body > #__docusaurus > nav")?.[0];try{e.classList.add("fade-in")}catch(s){console.error(s),console.log("element was not rendered in time - use MutationObserver")}}),2)}A.r(s),A.d(s,{fadeIn:()=>r,readdAutoNavShadowToggle:()=>t})},24033:(e,s,A)=>{A.d(s,{A:()=>r,q:()=>t});A(96540);var n=A(74848);function t(e){return e?.children[0]?.children[0]}function r(e){let{children:s,minHeight:A,innerDisplay:t}=e;return(0,n.jsx)("div",{className:"documentation-example-container",style:{minHeight:`${A||400}px`},children:(0,n.jsx)("div",{style:{display:t||"block"},children:s})})}},50363:(e,s,A)=>{A.d(s,{A:()=>r});var n=A(78478),t=(A(96540),A(74848));function r(e){return(0,t.jsx)(n.A,{children:()=>{const s=A(78152).DeepChat;return(0,t.jsx)(s,{...e,children:e.children})}})}},76761:(e,s,A)=>{A.d(s,{A:()=>n});const n="data:image/png;base64,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USppHAQIECBAoEBAACjAcigBAgQIEIgiIABEqaRxECBAgACBAgEBoADLoQQIECBAIIqAABClksZBgAABAgQKBASAAiyHEiBAgACBKAICQJRKGgcBAgQIECgQEAAKsBxKgAABAgSiCAgAUSppHAQIECBAoEBAACjAcigBAgQIEIgiIABEqaRxECBAgACBAgEBoADLoQQIECBAIIqAABClksZBgAABAgQKBASAAiyHEiBAgACBKAICQJRKGgcBAgQIECgQEAAKsBxKgAABAgSiCAgAUSppHAQIECBAoEBAACjAcigBAgQIEIgiIABEqaRxECBAgACBAgEBoADLoQQIECBAIIqAABClksZBgAABAgQKBASAAiyHEiBAgACBKAICQJRKGgcBAgQIECgQEAAKsBxKgAABAgSiCAgAUSppHAQIECBAoEBAACjAcigBAgQIEIgiIABEqaRxECBAgACBAgEBoADLoQQIECBAIIqAABClksZBgAABAgQKBASAAiyHEiBAgACBKAICQJRKGgcBAgQIECgQEAAKsBxKgAABAgSiCAgAUSppHAQIECBAoEBAACjAcigBAgQIEIgiIABEqaRxECBAgACBAgEBoADLoQQIECBAIIqAABClksZBgAABAgQKBASAAiyHEiBAgACBKAICQJRKGgcBAgQIECgQEAAKsBxKgAABAgSiCAgAUSppHAQIECBAoEBAACjAcigBAgQIEIgiIABEqaRxECBAgACBAgEBoADLoQQIECBAIIqAABClksZBgAABAgQKBASAAiyHEiBAgACBKAICQJRKGgcBAgQIECgQEAAKsBxKgAABAgSiCAgAUSppHAQIECBAoEBAACjAcigBAgQIEIgiIABEqaRxECBAgACBAgEBoADLoQQIECBAIIqAABClksZBgAABAgQKBASAAiyHEiBAgACBKAICQJRKGgcBAgQIECgQEAAKsBxKgAABAgSiCAgAUSppHAQIECBAoEDg/+CJDty7udX6AAAAAElFTkSuQmCC"},28453:(e,s,A)=>{A.d(s,{R:()=>o,x:()=>a});var n=A(96540);const t={},r=n.createContext(t);function o(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/15033d09.ba9708f5.js b/assets/js/15033d09.ba9708f5.js deleted file mode 100644 index 6bcb1d199..000000000 --- a/assets/js/15033d09.ba9708f5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1738],{68695:(e,s,A)=>{A.r(s),A.d(s,{assets:()=>C,contentTitle:()=>B,default:()=>I,frontMatter:()=>h,metadata:()=>u,toc:()=>x});var n=A(74848),t=A(28453),r=A(24033),o=A(50363),a=A(15781);const i=A.p+"assets/images/update-websocket-message-8fd40ee660162130c707deba122a4fba.gif";var l=A(78478),c=A(76761),d=A(19365),g=A(11470);const h={sidebar_position:2},B="Connect",u={id:"docs/connect",title:"Connect",description:"How to connect to an API",source:"@site/docs/docs/connect.mdx",sourceDirName:"docs",slug:"/docs/connect",permalink:"/docs/connect",draft:!1,unlisted:!1,editUrl:"https://github.com/OvidijusParsiunas/deep-chat/tree/main/website/docs/docs/connect.mdx",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"docs",previous:{title:"Installation",permalink:"/docs/installation"},next:{title:"Direct Connection",permalink:"/docs/directConnection/"}},C={},x=[{value:"connect",id:"connect-1",level:3},{value:"Example",id:"example",level:4},{value:"requestBodyLimits",id:"requestBodyLimits",level:3},{value:"Example",id:"example-1",level:4},{value:"Types",id:"types",level:2},{value:"Response",id:"Response",level:3},{value:"Examples:",id:"examples",level:4},{value:"Websocket",id:"Websocket",level:3},{value:"Example",id:"example-2",level:4},{value:"Status Bubble Example",id:"status-bubble-example",level:4},{value:"Stream",id:"Stream",level:3},{value:"Stream Service Example",id:"stream-service-example",level:4},{value:"Regular Service Example",id:"regular-service-example",level:4},{value:"Handler",id:"Handler",level:3},{value:"Example",id:"example-3",level:4},{value:"Signals",id:"Signals",level:4}];function E(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"connect",children:"Connect"})}),"\n",(0,n.jsx)("h2",{children:"How to connect to an API"}),"\n",(0,n.jsxs)(s.p,{children:["You can connect to any API by defining their details inside the ",(0,n.jsx)(s.a,{href:"/docs/connect#connect-1",children:(0,n.jsx)(s.code,{children:"connect"})})," property. The target endpoint will need to be able to accept\nand respond using the formats described below."]}),"\n",(0,n.jsxs)("a",{href:"https://youtu.be/NuRhPeqDCus",children:[(0,n.jsx)("img",{src:c.A,className:"youtube-icon"}),(0,n.jsx)(s.p,{children:"Video demo"})]}),"\n",(0,n.jsx)("h3",{children:"Request message"}),"\n",(0,n.jsx)(s.p,{children:"The outgoing Deep Chat request body is encapsulated in one of the following formats:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["When sending ",(0,n.jsx)(s.strong,{children:"text"})," based messages only, the request body will have the following JSON type: ",(0,n.jsx)("br",{}),"\n{",(0,n.jsx)(s.a,{href:"/docs/messages/#MessageContent",children:(0,n.jsx)(s.code,{children:"messages: MessageContent[]"})}),"} ",(0,n.jsx)("br",{})]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["When sending messages that contain ",(0,n.jsx)(s.strong,{children:"files"}),", the request body is going to be serialized inside a ",(0,n.jsx)(s.a,{href:"https://developer.mozilla.org/en-US/docs/Web/API/FormData",children:"FormData"})," type\nwhere files are set inside an array property called ",(0,n.jsx)(s.em,{children:'"files"'})," and each text message is stored inside a ",(0,n.jsx)(s.em,{children:'"message{index}"'})," property with a corresponding index: ",(0,n.jsx)("br",{}),"\n{",(0,n.jsx)(s.code,{children:"files: File[]"}),", ",(0,n.jsx)(s.a,{href:"/docs/messages/#MessageContent",children:(0,n.jsx)(s.code,{children:"message1: MessageContent"})}),", ",(0,n.jsx)(s.a,{href:"/docs/messages/#MessageContent",children:(0,n.jsx)(s.code,{children:"message2: MessageContent"})}),"... } ",(0,n.jsx)("br",{})]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)("h3",{children:"Response message"}),"\n",(0,n.jsxs)(s.p,{children:["Response from the target server needs to use the ",(0,n.jsx)(s.a,{href:"#Response",children:(0,n.jsx)(s.code,{children:"Response"})})," JSON type."]}),"\n",(0,n.jsx)(s.admonition,{type:"tip",children:(0,n.jsxs)(s.p,{children:["If you don't want / can't change the target server to handle the required object types, use the ",(0,n.jsx)(s.a,{href:"/docs/interceptors",children:(0,n.jsx)(s.code,{children:"interceptor"})})," properties\nto augment the transferred objects or the ",(0,n.jsx)(s.a,{href:"#Handler",children:(0,n.jsx)(s.code,{children:"handler"})})," function to control the request code."]})}),"\n",(0,n.jsx)("h2",{children:"Connection properties"}),"\n","\n",(0,n.jsx)(l.A,{children:()=>A(61886).readdAutoNavShadowToggle()}),"\n",(0,n.jsx)(s.h3,{id:"connect-1",children:(0,n.jsx)(s.code,{children:"connect"})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Type: {",(0,n.jsx)("br",{}),"\n\xa0\xa0\xa0\xa0 ",(0,n.jsx)(s.code,{children:"url?: string"}),", ",(0,n.jsx)("br",{}),"\n\xa0\xa0\xa0\xa0 ",(0,n.jsx)(s.code,{children:"method?: string"}),", ",(0,n.jsx)("br",{}),"\n\xa0\xa0\xa0\xa0 ",(0,n.jsx)(s.code,{children:"headers?: {[string]: string}"}),", ",(0,n.jsx)("br",{}),"\n\xa0\xa0\xa0\xa0 ",(0,n.jsx)(s.code,{children:"additionalBodyProps?: {[string]: any}"}),", ",(0,n.jsx)("br",{}),"\n\xa0\xa0\xa0\xa0 ",(0,n.jsx)(s.a,{href:"https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials",children:(0,n.jsx)(s.code,{children:"credentials?: string"})}),", ",(0,n.jsx)("br",{}),"\n\xa0\xa0\xa0\xa0 ",(0,n.jsx)(s.a,{href:"#Websocket",children:(0,n.jsx)(s.code,{children:"websocket?: Websocket"})}),", ",(0,n.jsx)("br",{}),"\n\xa0\xa0\xa0\xa0 ",(0,n.jsx)(s.a,{href:"#Stream",children:(0,n.jsx)(s.code,{children:"stream?: Stream"})}),", ",(0,n.jsx)("br",{}),"\n\xa0\xa0\xa0\xa0 ",(0,n.jsx)(s.a,{href:"#Handler",children:(0,n.jsx)(s.code,{children:"handler?: Handler"})})," ",(0,n.jsx)("br",{}),"\n}"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Default: ",(0,n.jsx)(s.em,{children:'{ method: "POST", credentials: "same-origin" }'})]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Settings for the outgoing API requests. This object MUST have ",(0,n.jsx)(s.code,{children:"url"})," or ",(0,n.jsx)(s.code,{children:"handler"})," property defined. ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"additionalBodyProps"})," is used to add additional key value properties to the outgoing message body. ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"credentials"})," is used to configure whether the outgoing request should contain cookies. ",(0,n.jsx)(s.a,{href:"https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials",children:"More info"}),". ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"websocket"})," is used to establish a websocket connection instead of sending REST requests."]}),"\n",(0,n.jsxs)("a",{href:"https://youtu.be/NuRhPeqDCus?si=B98OGweTBwiMnMzb&t=40",children:[(0,n.jsx)("img",{src:c.A,className:"youtube-icon"}),(0,n.jsx)(s.p,{children:"Video demo"})]}),"\n",(0,n.jsx)(s.h4,{id:"example",children:"Example"}),"\n",(0,n.jsx)(r.A,{children:(0,n.jsx)(o.A,{style:{borderRadius:"8px"},connect:{url:"https://customapi.com/message",method:"POST",headers:{customName:"customHeaderValue"},additionalBodyProps:{customBodyField:"customBodyValue"}}})}),"\n",(0,n.jsxs)(g.A,{children:[(0,n.jsx)(d.A,{value:"js",label:"Sample code",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-html",children:'\n'})})}),(0,n.jsx)(d.A,{value:"py",label:"Full code",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-html",children:'\x3c!-- This example is for Vanilla JS and should be tailored to your framework (see Examples) --\x3e\n\n\n'})})})]}),"\n",(0,n.jsx)(a.A,{}),"\n",(0,n.jsx)(s.h3,{id:"requestBodyLimits",children:(0,n.jsx)(s.code,{children:"requestBodyLimits"})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Type: {",(0,n.jsx)(s.code,{children:"maxMessages?: number"}),", ",(0,n.jsx)(s.code,{children:"totalMessagesMaxCharLength?: number"}),"}"]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Used to limit the content that is going to be included in the outgoing requests. ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"maxMessages"})," is the maximum number of messages counting from the most recent one. If this is set to a number higher than ",(0,n.jsx)(s.em,{children:"0"})," such as ",(0,n.jsx)(s.em,{children:"1"})," - the outgoing request will only include the new user message,\nif it is ",(0,n.jsx)(s.em,{children:"2"})," - it will also include the message before the latest one (from AI or the user) and so on... If the number is ",(0,n.jsx)(s.em,{children:"0"})," or below - the request will include all messages in the chat. If\nit is ",(0,n.jsx)(s.em,{children:"undefined"}),", the request will only include the input text/files. ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"totalMessagesMaxCharLength"})," is the total maximum number of text characters sent in the request counting from the most recent message. ",(0,n.jsx)("br",{}),"\nThese limits do not include the ",(0,n.jsx)(s.a,{href:"/docs/messages#introMessage",children:(0,n.jsx)(s.code,{children:"introMessage"})}),"."]}),"\n",(0,n.jsx)(s.h4,{id:"example-1",children:"Example"}),"\n",(0,n.jsx)(r.A,{children:(0,n.jsx)(o.A,{style:{borderRadius:"8px"},introMessage:{text:"Observe the data that is going to be sent below."},requestBodyLimits:{totalMessagesMaxCharLength:20,maxMessages:2},demo:!0})}),"\n",(0,n.jsxs)(g.A,{children:[(0,n.jsx)(d.A,{value:"js",label:"Sample code",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-html",children:'\n'})})}),(0,n.jsx)(d.A,{value:"py",label:"Full code",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-html",children:'\x3c!-- This example is for Vanilla JS and should be tailored to your framework (see Examples) --\x3e\n\n\n'})})})]}),"\n",(0,n.jsx)(a.A,{}),"\n",(0,n.jsx)(s.h2,{id:"types",children:"Types"}),"\n",(0,n.jsx)(s.p,{children:"Types shared with other component properties:"}),"\n",(0,n.jsx)(s.h3,{id:"Response",children:(0,n.jsx)(s.code,{children:"Response"})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Type: {",(0,n.jsx)(s.a,{href:"/docs/messages/#MessageContent",children:(0,n.jsx)(s.code,{children:"MessageContent"})}),", ",(0,n.jsx)(s.code,{children:"error?: string"}),", ",(0,n.jsx)(s.code,{children:"overwrite?: boolean"}),"}"]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Object containing response information from the target service. It has the same properties as ",(0,n.jsx)(s.a,{href:"/docs/messages/#MessageContent",children:(0,n.jsx)(s.code,{children:"MessageContent"})})," with additional optional ",(0,n.jsx)(s.code,{children:"error"})," and\n",(0,n.jsx)(s.code,{children:"overwrite"})," properties: ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"text"})," is the content for a text message. ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"files"})," is an array that encapsulates details on the response files. ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"html"})," is a string that defines the markup for ",(0,n.jsx)(s.a,{href:"/docs/messages/HTML",children:"custom elements"}),". It must describe full elements. ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"error"})," describes information about a server error. If the ",(0,n.jsx)(s.em,{children:"displayServiceErrorMessages"})," property in ",(0,n.jsx)(s.a,{href:"/docs/messages#errorMessages",children:(0,n.jsx)(s.code,{children:"errorMessages"})}),"\nis set to ",(0,n.jsx)(s.em,{children:"true"}),", the same message will be displayed in the chat's error bubble. ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"overwrite"})," replaces last message from the same role or creates a new one if not found. ",(0,n.jsx)(s.a,{href:"#status-bubble-example",children:"Status bubble"})," example. ",(0,n.jsx)("br",{})]}),"\n",(0,n.jsx)(s.h4,{id:"examples",children:"Examples:"}),"\n",(0,n.jsxs)(s.p,{children:["Simple - ",(0,n.jsx)(s.code,{children:'{text: "Simple response"}'})," ",(0,n.jsx)("br",{}),"\nMixed - ",(0,n.jsx)(s.code,{children:'{files: [{name: "file.txt"}], html: "
Custom Element
"}'})," ",(0,n.jsx)("br",{}),"\nCustom role - ",(0,n.jsx)(s.code,{children:'{role: "bob", text: "Message from bob"}'})," ",(0,n.jsx)("br",{}),"\nError - ",(0,n.jsx)(s.code,{children:'{error: "Service Error"}'})," ",(0,n.jsx)("br",{}),"\nOverwrite - ",(0,n.jsx)(s.code,{children:'{text: "New text", overwrite: true}'})," ",(0,n.jsx)("br",{})]}),"\n",(0,n.jsx)(a.A,{}),"\n",(0,n.jsx)(s.h3,{id:"Websocket",children:(0,n.jsx)(s.code,{children:"Websocket"})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Type: ",(0,n.jsx)(s.code,{children:"boolean"})," | ",(0,n.jsx)(s.code,{children:"string"})," | ",(0,n.jsx)(s.code,{children:"string[]"})]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["This is used to establish a websocket connection with your server. Enable it by defining the ",(0,n.jsx)(s.code,{children:"websocket"})," property inside the ",(0,n.jsx)(s.a,{href:"#connect-1",children:(0,n.jsx)(s.code,{children:"connect"})})," object\nas a ",(0,n.jsx)(s.code,{children:"boolean"})," ",(0,n.jsx)(s.em,{children:"true"})," or as a string ",(0,n.jsx)(s.a,{href:"https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications#creating_a_websocket_object",children:"connection protocol"}),"\n(or an array of strings for multiple protocols). ",(0,n.jsx)("br",{}),"\nIt is important to note that exchanged messages must be Stringified JSONs where Deep Chat will send its messages using the ",(0,n.jsx)(s.a,{href:"connect",children:"Request message"})," format\nand the server must send its messages using the ",(0,n.jsx)(s.a,{href:"#Response",children:(0,n.jsx)(s.code,{children:"Response"})})," format. Example messages: ",(0,n.jsx)("br",{}),"\nDeep Chat message: ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:'\'{"messages":[{"role":"user","text":"Message from Deep Chat"}]}\''})," ",(0,n.jsx)("br",{}),"\nServer message: ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:'\'{"text":"Message from the server"}\''})]}),"\n",(0,n.jsx)(s.h4,{id:"example-2",children:"Example"}),"\n",(0,n.jsx)(r.A,{children:(0,n.jsx)(o.A,{connect:{url:"wss://customapi.com",websocket:!0},style:{borderRadius:"8px"},introMessage:'{"text": Chat will attempt to establish a websocket connection as soon as the component loads up."}'})}),"\n",(0,n.jsxs)(g.A,{children:[(0,n.jsx)(d.A,{value:"js",label:"Sample code",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-html",children:'\n'})})}),(0,n.jsx)(d.A,{value:"py",label:"Full code",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-html",children:'\x3c!-- This example is for Vanilla JS and should be tailored to your framework (see Examples) --\x3e\n\n\n'})})})]}),"\n",(0,n.jsx)(a.A,{}),"\n",(0,n.jsx)(s.admonition,{type:"tip",children:(0,n.jsxs)(s.p,{children:["Check the ",(0,n.jsx)(s.a,{href:"https://github.com/OvidijusParsiunas/deep-chat/tree/main/example-servers/node/websockets",children:"websocket server template"})," to help you get started."]})}),"\n",(0,n.jsx)(a.A,{}),"\n",(0,n.jsx)(s.h4,{id:"status-bubble-example",children:"Status Bubble Example"}),"\n",(0,n.jsx)("img",{src:i,style:{marginLeft:"auto",marginRight:"auto",display:"flex",height:"380px",marginBottom:"5px"}}),"\n",(0,n.jsxs)(g.A,{children:[(0,n.jsx)(d.A,{value:"js",label:"Sample code",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-text",children:'Messages from the server:\n1: {text: "Downloading...", overwrite: true}\n2: {text: "Loading...", overwrite: true}\n3: {text: "Processing...", overwrite: true}\n4: {text: "Ready...", overwrite: true}\n'})})}),(0,n.jsx)(d.A,{value:"py",label:"Full code",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-text",children:'Component configuration:\n\n\nMessages from the server:\n1: {text: "Downloading...", overwrite: true}\n2: {text: "Loading...", overwrite: true}\n3: {text: "Processing...", overwrite: true}\n4: {text: "Ready...", overwrite: true}\n'})})})]}),"\n",(0,n.jsx)(a.A,{}),"\n",(0,n.jsx)(s.h3,{id:"Stream",children:(0,n.jsx)(s.code,{children:"Stream"})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Type: ",(0,n.jsx)(s.code,{children:"boolean"})," | {",(0,n.jsx)(s.code,{children:"simulation?: boolean | number | string"}),"}"]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Used to stream responses from the target service. ",(0,n.jsx)("br",{}),"\nBy setting ",(0,n.jsx)(s.em,{children:"true"})," - the chat will stream incoming ",(0,n.jsx)(s.a,{href:"https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events",children:(0,n.jsx)(s.code,{children:"server-sent events"})})," from\nthe server. See ",(0,n.jsx)(s.a,{href:"https://deepchat.dev/examples/servers",children:(0,n.jsx)(s.code,{children:"example"})})," server code. ",(0,n.jsx)("br",{}),"\nThe responses are expected to contain partial text, however you can use ",(0,n.jsx)(s.a,{href:"#Response",children:(0,n.jsx)(s.code,{children:"overwrite"})})," to overwrite each one. ",(0,n.jsx)("br",{}),"\nYou can alternatively use the ",(0,n.jsx)(s.code,{children:"simulation"})," object property to facilitate a ",(0,n.jsx)("b",{children:"stream-like"})," experience for any other connection type where the received content wil be\ngradually populated in the message bubble. You can control the millisecond interim of each word's appearance by assigning it a number with the default being ",(0,n.jsx)(s.em,{children:"6"}),".\nA string value is used to act like an ",(0,n.jsx)(s.em,{children:"end-phrase"})," for individual websocket messages that act like a stream. ",(0,n.jsx)("br",{})]}),"\n",(0,n.jsx)(s.h4,{id:"stream-service-example",children:"Stream Service Example"}),"\n",(0,n.jsx)(r.A,{children:(0,n.jsx)(o.A,{style:{borderRadius:"8px"},connect:{stream:!0},demo:!0,introMessage:{text:"The response message bubble will be populated gradually with text events."}})}),"\n",(0,n.jsxs)(g.A,{children:[(0,n.jsx)(d.A,{value:"js",label:"Sample code",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-html",children:"\n"})})}),(0,n.jsx)(d.A,{value:"py",label:"Full code",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-html",children:'\x3c!-- This example is for Vanilla JS and should be tailored to your framework (see Examples) --\x3e\n\n\n'})})})]}),"\n",(0,n.jsx)(a.A,{}),"\n",(0,n.jsx)(s.h4,{id:"regular-service-example",children:"Regular Service Example"}),"\n",(0,n.jsx)(r.A,{children:(0,n.jsx)(o.A,{style:{borderRadius:"8px"},connect:{stream:{simulation:6}},demo:!0,introMessage:{text:"The response message bubble will be populated gradually with text events."}})}),"\n",(0,n.jsxs)(g.A,{children:[(0,n.jsx)(d.A,{value:"js",label:"Sample code",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-html",children:'\n'})})}),(0,n.jsx)(d.A,{value:"py",label:"Full code",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-html",children:'\x3c!-- This example is for Vanilla JS and should be tailored to your framework (see Examples) --\x3e\n\n\n'})})})]}),"\n",(0,n.jsx)(a.A,{}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"stream"})," can be used in ",(0,n.jsx)(s.a,{href:"connect",children:(0,n.jsx)(s.code,{children:"connect"})})," by itself when ",(0,n.jsx)(s.a,{href:"https://deepchat.dev/docs/demo",children:(0,n.jsx)(s.code,{children:"demo"})})," is defined."]})}),"\n",(0,n.jsx)(a.A,{}),"\n",(0,n.jsx)(s.h3,{id:"Handler",children:(0,n.jsx)(s.code,{children:"Handler"})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Type: (",(0,n.jsx)(s.code,{children:"body: any"}),", ",(0,n.jsx)(s.a,{href:"#Signals",children:(0,n.jsx)(s.code,{children:"signals: Signals"})}),") => ",(0,n.jsx)(s.code,{children:"void"})]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["This function gives developers full control for making server requests using their own code. ",(0,n.jsx)("br",{})," It is invoked when the user\nattempts to send a message and consists of two core arguments: ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"body"})," is an object that contains the outgoing message details and uses the ",(0,n.jsx)(s.a,{href:"/docs/connect",children:(0,n.jsx)(s.code,{children:"Request message"})})," type. ",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"signals"})," is a map of functions which are used to notify Deep Chat on the status of the request and its result. The available\nsignal functions differ based on the type of connection you are establishing. See examples below."]}),"\n",(0,n.jsxs)("a",{href:"https://youtu.be/orRVFA5AWfU",children:[(0,n.jsx)("img",{src:c.A,className:"youtube-icon"}),(0,n.jsx)(s.p,{children:"Video demo"})]}),"\n",(0,n.jsx)(s.h4,{id:"example-3",children:"Example"}),"\n",(0,n.jsx)(r.A,{children:(0,n.jsx)(o.A,{connect:{handler:(e,s)=>{s.onResponse({text:"Handler response"})}},style:{borderRadius:"8px"}})}),"\n",(0,n.jsxs)(g.A,{children:[(0,n.jsx)(d.A,{value:"js",label:"Basic",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:"chatElementRef.connect = {\n handler: (body, signals) => {\n try {\n fetch('custom-url).then((response) => {\n signals.onResponse({text: 'Handler response'}); // displays the response text message\n })\n } catch (e) {\n signals.onResponse({error: 'Error'}); // displays an error message\n }\n }\n};\n"})})}),(0,n.jsx)(d.A,{value:"py",label:"Stream",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:"chatElementRef.stream = true;\nchatElementRef.connect = {\n handler: (body, signals) => {\n try {\n // this is PSEUDO CODE for creating a stream\n fetchEventSource('custom-url', {\n async onopen(response) {\n if (response.ok) {\n signals.onOpen(); // stops the loading bubble\n } else {\n signals.onResponse({error: 'error'}); // displays an error message\n }\n },\n onmessage(message) {\n signals.onResponse({text: message}); // adds text into the message bubble\n },\n onerror(message) {\n signals.onResponse({error: message}); // displays an error message\n },\n onclose() {\n signals.onClose(); // The stop button will be changed back to submit button\n },\n });\n // triggered when the user clicks the stop button\n signals.stopClicked.listener = () => {\n // logic to stop your stream, such as creating an abortController\n };\n } catch (e) {\n signals.onResponse({error: 'error'}); // displays an error message\n }\n },\n};\n"})})}),(0,n.jsx)(d.A,{value:"ts",label:"Websocket",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:"// this handler is invoked when the component is loaded\nchatElementRef.connect = {\n websocket: true,\n handler: (_, signals) => {\n try {\n const websocket = new WebSocket('custom-url');\n websocket.onopen = () => {\n signals.onOpen(); // enables the user to send messages\n };\n websocket.onmessage = (message) => {\n const response = JSON.parse(message.data);\n signals.onResponse(response); // displays a text message from the server\n };\n websocket.onclose = () => {\n signals.onClose(); // stops the user from sending messages\n };\n websocket.onerror = () => {\n // 'Connection error' is a special string that will also display in Deep Chat\n signals.onResponse({error: 'Connection error'});\n };\n // triggered when the user sends a message\n signals.newUserMessage.listener = (body) => {\n websocket.send(JSON.stringify(body));\n };\n } catch (e) {\n signals.onResponse({error: 'error'}); // displays an error message\n signals.onClose(); // stops the user from sending messages\n }\n },\n};\n"})})})]}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsxs)(s.p,{children:["Error handling must be done within the ",(0,n.jsx)(s.code,{children:"handler"})," function."]})}),"\n",(0,n.jsx)(a.A,{}),"\n",(0,n.jsx)(s.h4,{id:"Signals",children:(0,n.jsx)(s.code,{children:"Signals"})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Type: { ",(0,n.jsx)("br",{}),"\n\xa0\xa0\xa0\xa0",(0,n.jsx)(s.a,{href:"#Response",children:(0,n.jsx)(s.code,{children:"onResponse: (response: Response) => void"})}),", ",(0,n.jsx)("br",{}),"\n\xa0\xa0\xa0\xa0",(0,n.jsx)(s.code,{children:"onOpen: () => void"}),", ",(0,n.jsx)("br",{}),"\n\xa0\xa0\xa0\xa0",(0,n.jsx)(s.code,{children:"onClose: () => void"}),", ",(0,n.jsx)("br",{}),"\n\xa0\xa0\xa0\xa0",(0,n.jsx)(s.code,{children:"stopClicked: {listener: () => void}"}),", ",(0,n.jsx)("br",{}),"\n\xa0\xa0\xa0\xa0",(0,n.jsx)(s.code,{children:"newUserMessage: {listener: (body: any) => void}"})," ",(0,n.jsx)("br",{}),"\n}"]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Object containing functions that are used to notify the Deep Chat component about the status of the current request.\nThe ",(0,n.jsx)(s.code,{children:"stopClicked"})," and ",(0,n.jsx)(s.code,{children:"newUserMessage"})," functions are triggered by Deep Chat itself and contain ",(0,n.jsx)(s.code,{children:"listener"})," properties\nwhich can be assigned with custom functions to listen for when they are called (see the examples above)."]})]})}function I(e={}){const{wrapper:s}={...(0,t.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(E,{...e})}):E(e)}},19365:(e,s,A)=>{A.d(s,{A:()=>o});A(96540);var n=A(34164);const t={tabItem:"tabItem_Ymn6"};var r=A(74848);function o(e){let{children:s,hidden:A,className:o}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,n.A)(t.tabItem,o),hidden:A,children:s})}},11470:(e,s,A)=>{A.d(s,{A:()=>p});var n=A(96540),t=A(34164),r=A(23104),o=A(56347),a=A(205),i=A(57485),l=A(31682),c=A(70679);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function g(e){const{values:s,children:A}=e;return(0,n.useMemo)((()=>{const e=s??function(e){return d(e).map((e=>{let{props:{value:s,label:A,attributes:n,default:t}}=e;return{value:s,label:A,attributes:n,default:t}}))}(A);return function(e){const s=(0,l.XI)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[s,A])}function h(e){let{value:s,tabValues:A}=e;return A.some((e=>e.value===s))}function B(e){let{queryString:s=!1,groupId:A}=e;const t=(0,o.W6)(),r=function(e){let{queryString:s=!1,groupId:A}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!A)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return A??null}({queryString:s,groupId:A});return[(0,i.aZ)(r),(0,n.useCallback)((e=>{if(!r)return;const s=new URLSearchParams(t.location.search);s.set(r,e),t.replace({...t.location,search:s.toString()})}),[r,t])]}function u(e){const{defaultValue:s,queryString:A=!1,groupId:t}=e,r=g(e),[o,i]=(0,n.useState)((()=>function(e){let{defaultValue:s,tabValues:A}=e;if(0===A.length)throw new Error("Docusaurus error: the component requires at least one children component");if(s){if(!h({value:s,tabValues:A}))throw new Error(`Docusaurus error: The has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${A.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const n=A.find((e=>e.default))??A[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:s,tabValues:r}))),[l,d]=B({queryString:A,groupId:t}),[u,C]=function(e){let{groupId:s}=e;const A=function(e){return e?`docusaurus.tab.${e}`:null}(s),[t,r]=(0,c.Dv)(A);return[t,(0,n.useCallback)((e=>{A&&r.set(e)}),[A,r])]}({groupId:t}),x=(()=>{const e=l??u;return h({value:e,tabValues:r})?e:null})();(0,a.A)((()=>{x&&i(x)}),[x]);return{selectedValue:o,selectValue:(0,n.useCallback)((e=>{if(!h({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),C(e)}),[d,C,r]),tabValues:r}}var C=A(92303);const x={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var E=A(74848);function I(e){let{className:s,block:A,selectedValue:n,selectValue:o,tabValues:a}=e;const i=[],{blockElementScrollPositionUntilNextRender:l}=(0,r.a_)(),c=e=>{const s=e.currentTarget,A=i.indexOf(s),t=a[A].value;t!==n&&(l(s),o(t))},d=e=>{let s=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const A=i.indexOf(e.currentTarget)+1;s=i[A]??i[0];break}case"ArrowLeft":{const A=i.indexOf(e.currentTarget)-1;s=i[A]??i[i.length-1];break}}s?.focus()};return(0,E.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.A)("tabs",{"tabs--block":A},s),children:a.map((e=>{let{value:s,label:A,attributes:r}=e;return(0,E.jsx)("li",{role:"tab",tabIndex:n===s?0:-1,"aria-selected":n===s,ref:e=>i.push(e),onKeyDown:d,onClick:c,...r,className:(0,t.A)("tabs__item",x.tabItem,r?.className,{"tabs__item--active":n===s}),children:A??s},s)}))})}function Q(e){let{lazy:s,children:A,selectedValue:r}=e;const o=(Array.isArray(A)?A:[A]).filter(Boolean);if(s){const e=o.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:(0,t.A)("margin-top--md",e.props.className)}):null}return(0,E.jsx)("div",{className:"margin-top--md",children:o.map(((e,s)=>(0,n.cloneElement)(e,{key:s,hidden:e.props.value!==r})))})}function m(e){const s=u(e);return(0,E.jsxs)("div",{className:(0,t.A)("tabs-container",x.tabList),children:[(0,E.jsx)(I,{...s,...e}),(0,E.jsx)(Q,{...s,...e})]})}function p(e){const s=(0,C.A)();return(0,E.jsx)(m,{...e,children:d(e.children)},String(s))}},15781:(e,s,A)=>{A.d(s,{A:()=>t});A(96540);var n=A(74848);function t(){return(0,n.jsx)("div",{style:{height:"1px"}})}},61886:(e,s,A)=>{function n(e){window.scrollY>0?e.style.boxShadow="0 1px 2px 0 rgb(0 0 0 / 10%)":e.style.boxShadow="unset"}function t(){setTimeout((()=>{window.removeEventListener("scroll",window.toggleNavOnScroll);const e=document.getElementsByClassName("navbar--fixed-top");if(e[0]){const s=e[0];n(s),window.toggleNavOnScroll=n.bind(this,s),window.addEventListener("scroll",window.toggleNavOnScroll)}}),2)}function r(){setTimeout((()=>{const e=document.querySelectorAll(".homepage > body > #__docusaurus > nav")?.[0];try{e.classList.add("fade-in")}catch(s){console.error(s),console.log("element was not rendered in time - use MutationObserver")}}),2)}A.r(s),A.d(s,{fadeIn:()=>r,readdAutoNavShadowToggle:()=>t})},24033:(e,s,A)=>{A.d(s,{A:()=>r,q:()=>t});A(96540);var n=A(74848);function t(e){return e?.children[0]?.children[0]}function r(e){let{children:s,minHeight:A,innerDisplay:t}=e;return(0,n.jsx)("div",{className:"documentation-example-container",style:{minHeight:`${A||400}px`},children:(0,n.jsx)("div",{style:{display:t||"block"},children:s})})}},50363:(e,s,A)=>{A.d(s,{A:()=>r});var n=A(78478),t=(A(96540),A(74848));function r(e){return(0,t.jsx)(n.A,{children:()=>{const s=A(78152).DeepChat;return(0,t.jsx)(s,{...e,children:e.children})}})}},76761:(e,s,A)=>{A.d(s,{A:()=>n});const n="data:image/png;base64,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USppHAQIECBAoEBAACjAcigBAgQIEIgiIABEqaRxECBAgACBAgEBoADLoQQIECBAIIqAABClksZBgAABAgQKBASAAiyHEiBAgACBKAICQJRKGgcBAgQIECgQEAAKsBxKgAABAgSiCAgAUSppHAQIECBAoEBAACjAcigBAgQIEIgiIABEqaRxECBAgACBAgEBoADLoQQIECBAIIqAABClksZBgAABAgQKBASAAiyHEiBAgACBKAICQJRKGgcBAgQIECgQEAAKsBxKgAABAgSiCAgAUSppHAQIECBAoEBAACjAcigBAgQIEIgiIABEqaRxECBAgACBAgEBoADLoQQIECBAIIqAABClksZBgAABAgQKBASAAiyHEiBAgACBKAICQJRKGgcBAgQIECgQEAAKsBxKgAABAgSiCAgAUSppHAQIECBAoEBAACjAcigBAgQIEIgiIABEqaRxECBAgACBAgEBoADLoQQIECBAIIqAABClksZBgAABAgQKBASAAiyHEiBAgACBKAICQJRKGgcBAgQIECgQEAAKsBxKgAABAgSiCAgAUSppHAQIECBAoEBAACjAcigBAgQIEIgiIABEqaRxECBAgACBAgEBoADLoQQIECBAIIqAABClksZBgAABAgQKBASAAiyHEiBAgACBKAICQJRKGgcBAgQIECgQEAAKsBxKgAABAgSiCAgAUSppHAQIECBAoEBAACjAcigBAgQIEIgiIABEqaRxECBAgACBAgEBoADLoQQIECBAIIqAABClksZBgAABAgQKBASAAiyHEiBAgACBKAICQJRKGgcBAgQIECgQEAAKsBxKgAABAgSiCAgAUSppHAQIECBAoEBAACjAcigBAgQIEIgiIABEqaRxECBAgACBAgEBoADLoQQIECBAIIqAABClksZBgAABAgQKBASAAiyHEiBAgACBKAICQJRKGgcBAgQIECgQEAAKsBxKgAABAgSiCAgAUSppHAQIECBAoEDg/+CJDty7udX6AAAAAElFTkSuQmCC"},28453:(e,s,A)=>{A.d(s,{R:()=>o,x:()=>a});var n=A(96540);const t={},r=n.createContext(t);function o(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.18df10d2.js b/assets/js/runtime~main.13a69353.js similarity index 99% rename from assets/js/runtime~main.18df10d2.js rename to assets/js/runtime~main.13a69353.js index 749f9f617..94285e59c 100644 --- a/assets/js/runtime~main.18df10d2.js +++ b/assets/js/runtime~main.13a69353.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,d,f,c,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var d=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(d.exports,d,d.exports,r),d.loaded=!0,d.exports}r.m=b,r.c=t,e=[],r.O=(a,d,f,c)=>{if(!d){var b=1/0;for(i=0;i=c)&&Object.keys(r.O).every((e=>r.O[e](d[o])))?d.splice(o--,1):(t=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[d,f,c]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},d=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var c=Object.create(null);r.r(c);var b={};a=a||[null,d({}),d([]),d(d)];for(var t=2&f&&e;"object"==typeof t&&!~a.indexOf(t);t=d(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(c,b),c},r.d=(e,a)=>{for(var d in a)r.o(a,d)&&!r.o(e,d)&&Object.defineProperty(e,d,{enumerable:!0,get:a[d]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,d)=>(r.f[d](e,a),a)),[])),r.u=e=>"assets/js/"+({187:"c03611c9",221:"14c42b22",242:"f4a41cc5",281:"53a90a4e",286:"f80390e0",350:"8a751f9f",542:"ad7a1ef6",637:"ff031c7d",813:"7cb2479d",821:"960803bf",956:"71f93b87",957:"c141421f",958:"09bef922",1235:"a7456010",1285:"2609d35c",1351:"cab71165",1445:"2fd6e700",1537:"5efdef18",1552:"7cd620da",1567:"22dd74f7",1584:"796155b4",1738:"15033d09",1848:"50fc3c0c",1946:"2e8e5295",2138:"1a4e3797",2170:"3d7ef9b9",2244:"8e6cc846",2538:"cf9b7507",2634:"c4f5d8e4",2778:"bc7c935a",2827:"2e0dce54",3054:"70adbe13",3153:"4a70a78f",3190:"95881879",3338:"71a4181b",3555:"c214479d",3732:"0cfca6dd",4091:"7ea5518d",4135:"fe82bda8",4172:"b8a67d89",4318:"2b486e95",4444:"c374aadb",4474:"ab90bf36",4568:"df0688a0",4636:"a59ec873",4747:"83d494d4",4871:"f17f53dd",4890:"d929016d",4982:"b0d8ca7b",5197:"ab123836",5351:"50b9661c",5571:"943f163d",5742:"aba21aa0",5762:"a40ae8f2",5790:"fbd5181d",6267:"3c83ca7d",6324:"22f048b3",6387:"a19404f3",6581:"78c33b59",6664:"3f2a55e2",6731:"b9afe2a8",6754:"3c0c6a7f",6974:"981a04d0",6982:"288adf4d",6984:"a188041f",7024:"47058687",7048:"b467856c",7058:"e39666b6",7098:"a7bd4aaa",7289:"cf7ccda1",7647:"60e67547",7744:"707d70df",7757:"ec3987b3",7769:"fa7d1dcf",8045:"87712f4e",8223:"5812764a",8339:"0a24f6e4",8392:"08854dbd",8401:"17896441",8437:"dbc3e690",8537:"e0aabcf0",8750:"91b8d63b",8770:"08c9246a",8910:"1e0b4360",8911:"0c5b3199",9048:"a94703ab",9240:"43744cfd",9353:"91c39c3c",9505:"945fd7ad",9647:"5e95c892",9738:"ef02564c",9837:"38776a5e"}[e]||e)+"."+{187:"21200de1",221:"7ff81296",242:"30db4c44",281:"7d958b83",286:"087d9f57",350:"fe9888d9",416:"05118c27",542:"5616cc64",637:"ce875af8",813:"a3472d91",821:"393f7fbe",956:"305560e7",957:"3b940a8d",958:"a70dd420",1204:"b20248ad",1235:"2ec2f6c0",1285:"83faeda9",1351:"f9c56454",1445:"e31cfd2c",1537:"63a3bc54",1552:"ce6bfe13",1567:"60f73995",1584:"14e54dbf",1738:"ba9708f5",1848:"5c40051e",1946:"8541d555",2138:"4567c2a5",2170:"f5684d33",2237:"4c982590",2244:"04cc3e5f",2538:"4b0f9c39",2634:"68e352b0",2778:"a40c8453",2827:"6c7d9b69",3054:"37d0a1bb",3090:"6ad658d6",3153:"4fb245b6",3190:"6b60375c",3338:"126fcc46",3459:"1c027c65",3555:"4347a545",3732:"301d437e",4091:"3840e0aa",4135:"dbfe0770",4172:"2c131242",4318:"224383c9",4444:"03232c83",4474:"e1de453e",4529:"79d133c0",4568:"900f2b4a",4636:"33be58f6",4747:"ba75b9a6",4871:"892286ed",4890:"59c4cbb3",4982:"49440341",5197:"a5bf30e1",5351:"6fc66ed0",5554:"8f1169f6",5571:"752f4367",5742:"a48c4f75",5762:"4bf00723",5790:"011d304d",6267:"38e98253",6324:"306b8c0f",6387:"d1ee60e2",6581:"d914ebf0",6664:"eccd4ae8",6715:"4be0d0a5",6731:"9970659c",6754:"9e360407",6974:"77e433bd",6982:"391da110",6984:"592e8d60",7024:"a2aa286d",7048:"4cbf3289",7058:"1536cb85",7098:"49ba9652",7289:"0c97e1e1",7647:"f9f77251",7744:"a2b5ac66",7757:"5ebee5f4",7769:"df5e6983",8045:"92bbd667",8158:"4d82f1a9",8223:"239aaf99",8339:"014aff65",8392:"d03a54ca",8401:"5f334960",8437:"c9fa6d00",8537:"5a2a01ad",8750:"035c6a14",8756:"9e93a69a",8770:"16bf04ff",8910:"fa31fbf9",8911:"c0c0ad5d",8913:"3eea0e0d",9048:"c8168260",9145:"93aa48aa",9240:"effaac40",9353:"493e0a09",9505:"0f390cf3",9647:"f7c8666a",9738:"5d65ee56",9837:"a343d520",9878:"fcce00a3"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},c="website:",r.l=(e,a,d,b)=>{if(f[e])f[e].push(a);else{var t,o;if(void 0!==d)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var c=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),c&&c.forEach((e=>e(d))),a)return a(d)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={17896441:"8401",47058687:"7024",95881879:"3190",c03611c9:"187","14c42b22":"221",f4a41cc5:"242","53a90a4e":"281",f80390e0:"286","8a751f9f":"350",ad7a1ef6:"542",ff031c7d:"637","7cb2479d":"813","960803bf":"821","71f93b87":"956",c141421f:"957","09bef922":"958",a7456010:"1235","2609d35c":"1285",cab71165:"1351","2fd6e700":"1445","5efdef18":"1537","7cd620da":"1552","22dd74f7":"1567","796155b4":"1584","15033d09":"1738","50fc3c0c":"1848","2e8e5295":"1946","1a4e3797":"2138","3d7ef9b9":"2170","8e6cc846":"2244",cf9b7507:"2538",c4f5d8e4:"2634",bc7c935a:"2778","2e0dce54":"2827","70adbe13":"3054","4a70a78f":"3153","71a4181b":"3338",c214479d:"3555","0cfca6dd":"3732","7ea5518d":"4091",fe82bda8:"4135",b8a67d89:"4172","2b486e95":"4318",c374aadb:"4444",ab90bf36:"4474",df0688a0:"4568",a59ec873:"4636","83d494d4":"4747",f17f53dd:"4871",d929016d:"4890",b0d8ca7b:"4982",ab123836:"5197","50b9661c":"5351","943f163d":"5571",aba21aa0:"5742",a40ae8f2:"5762",fbd5181d:"5790","3c83ca7d":"6267","22f048b3":"6324",a19404f3:"6387","78c33b59":"6581","3f2a55e2":"6664",b9afe2a8:"6731","3c0c6a7f":"6754","981a04d0":"6974","288adf4d":"6982",a188041f:"6984",b467856c:"7048",e39666b6:"7058",a7bd4aaa:"7098",cf7ccda1:"7289","60e67547":"7647","707d70df":"7744",ec3987b3:"7757",fa7d1dcf:"7769","87712f4e":"8045","5812764a":"8223","0a24f6e4":"8339","08854dbd":"8392",dbc3e690:"8437",e0aabcf0:"8537","91b8d63b":"8750","08c9246a":"8770","1e0b4360":"8910","0c5b3199":"8911",a94703ab:"9048","43744cfd":"9240","91c39c3c":"9353","945fd7ad":"9505","5e95c892":"9647",ef02564c:"9738","38776a5e":"9837"}[e]||e,r.p+r.u(e)},(()=>{r.b=document.baseURI||self.location.href;var e={5354:0,1869:0};r.f.j=(a,d)=>{var f=r.o(e,a)?e[a]:void 0;if(0!==f)if(f)d.push(f[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var c=new Promise(((d,c)=>f=e[a]=[d,c]));d.push(f[2]=c);var b=r.p+r.u(a),t=new Error;r.l(b,(d=>{if(r.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var c=d&&("load"===d.type?"missing":d.type),b=d&&d.target&&d.target.src;t.message="Loading chunk "+a+" failed.\n("+c+": "+b+")",t.name="ChunkLoadError",t.type=c,t.request=b,f[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,d)=>{var f,c,b=d[0],t=d[1],o=d[2],n=0;if(b.some((a=>0!==e[a]))){for(f in t)r.o(t,f)&&(r.m[f]=t[f]);if(o)var i=o(r)}for(a&&a(d);n{"use strict";var e,a,d,f,c,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var d=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(d.exports,d,d.exports,r),d.loaded=!0,d.exports}r.m=b,r.c=t,e=[],r.O=(a,d,f,c)=>{if(!d){var b=1/0;for(i=0;i=c)&&Object.keys(r.O).every((e=>r.O[e](d[o])))?d.splice(o--,1):(t=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[d,f,c]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},d=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var c=Object.create(null);r.r(c);var b={};a=a||[null,d({}),d([]),d(d)];for(var t=2&f&&e;"object"==typeof t&&!~a.indexOf(t);t=d(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(c,b),c},r.d=(e,a)=>{for(var d in a)r.o(a,d)&&!r.o(e,d)&&Object.defineProperty(e,d,{enumerable:!0,get:a[d]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,d)=>(r.f[d](e,a),a)),[])),r.u=e=>"assets/js/"+({187:"c03611c9",221:"14c42b22",242:"f4a41cc5",281:"53a90a4e",286:"f80390e0",350:"8a751f9f",542:"ad7a1ef6",637:"ff031c7d",813:"7cb2479d",821:"960803bf",956:"71f93b87",957:"c141421f",958:"09bef922",1235:"a7456010",1285:"2609d35c",1351:"cab71165",1445:"2fd6e700",1537:"5efdef18",1552:"7cd620da",1567:"22dd74f7",1584:"796155b4",1738:"15033d09",1848:"50fc3c0c",1946:"2e8e5295",2138:"1a4e3797",2170:"3d7ef9b9",2244:"8e6cc846",2538:"cf9b7507",2634:"c4f5d8e4",2778:"bc7c935a",2827:"2e0dce54",3054:"70adbe13",3153:"4a70a78f",3190:"95881879",3338:"71a4181b",3555:"c214479d",3732:"0cfca6dd",4091:"7ea5518d",4135:"fe82bda8",4172:"b8a67d89",4318:"2b486e95",4444:"c374aadb",4474:"ab90bf36",4568:"df0688a0",4636:"a59ec873",4747:"83d494d4",4871:"f17f53dd",4890:"d929016d",4982:"b0d8ca7b",5197:"ab123836",5351:"50b9661c",5571:"943f163d",5742:"aba21aa0",5762:"a40ae8f2",5790:"fbd5181d",6267:"3c83ca7d",6324:"22f048b3",6387:"a19404f3",6581:"78c33b59",6664:"3f2a55e2",6731:"b9afe2a8",6754:"3c0c6a7f",6974:"981a04d0",6982:"288adf4d",6984:"a188041f",7024:"47058687",7048:"b467856c",7058:"e39666b6",7098:"a7bd4aaa",7289:"cf7ccda1",7647:"60e67547",7744:"707d70df",7757:"ec3987b3",7769:"fa7d1dcf",8045:"87712f4e",8223:"5812764a",8339:"0a24f6e4",8392:"08854dbd",8401:"17896441",8437:"dbc3e690",8537:"e0aabcf0",8750:"91b8d63b",8770:"08c9246a",8910:"1e0b4360",8911:"0c5b3199",9048:"a94703ab",9240:"43744cfd",9353:"91c39c3c",9505:"945fd7ad",9647:"5e95c892",9738:"ef02564c",9837:"38776a5e"}[e]||e)+"."+{187:"21200de1",221:"7ff81296",242:"30db4c44",281:"7d958b83",286:"087d9f57",350:"fe9888d9",416:"05118c27",542:"5616cc64",637:"ce875af8",813:"a3472d91",821:"393f7fbe",956:"305560e7",957:"3b940a8d",958:"a70dd420",1204:"b20248ad",1235:"2ec2f6c0",1285:"83faeda9",1351:"f9c56454",1445:"e31cfd2c",1537:"63a3bc54",1552:"ce6bfe13",1567:"60f73995",1584:"14e54dbf",1738:"21442a76",1848:"5c40051e",1946:"8541d555",2138:"4567c2a5",2170:"f5684d33",2237:"4c982590",2244:"04cc3e5f",2538:"4b0f9c39",2634:"68e352b0",2778:"a40c8453",2827:"6c7d9b69",3054:"37d0a1bb",3090:"6ad658d6",3153:"4fb245b6",3190:"6b60375c",3338:"126fcc46",3459:"1c027c65",3555:"4347a545",3732:"301d437e",4091:"3840e0aa",4135:"dbfe0770",4172:"2c131242",4318:"224383c9",4444:"03232c83",4474:"e1de453e",4529:"79d133c0",4568:"900f2b4a",4636:"33be58f6",4747:"ba75b9a6",4871:"892286ed",4890:"59c4cbb3",4982:"49440341",5197:"a5bf30e1",5351:"6fc66ed0",5554:"8f1169f6",5571:"752f4367",5742:"a48c4f75",5762:"4bf00723",5790:"011d304d",6267:"38e98253",6324:"306b8c0f",6387:"d1ee60e2",6581:"d914ebf0",6664:"eccd4ae8",6715:"4be0d0a5",6731:"9970659c",6754:"9e360407",6974:"77e433bd",6982:"391da110",6984:"592e8d60",7024:"a2aa286d",7048:"4cbf3289",7058:"1536cb85",7098:"49ba9652",7289:"0c97e1e1",7647:"f9f77251",7744:"a2b5ac66",7757:"5ebee5f4",7769:"df5e6983",8045:"92bbd667",8158:"4d82f1a9",8223:"239aaf99",8339:"014aff65",8392:"d03a54ca",8401:"5f334960",8437:"c9fa6d00",8537:"5a2a01ad",8750:"035c6a14",8756:"9e93a69a",8770:"16bf04ff",8910:"fa31fbf9",8911:"c0c0ad5d",8913:"3eea0e0d",9048:"c8168260",9145:"93aa48aa",9240:"effaac40",9353:"493e0a09",9505:"0f390cf3",9647:"f7c8666a",9738:"5d65ee56",9837:"a343d520",9878:"fcce00a3"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},c="website:",r.l=(e,a,d,b)=>{if(f[e])f[e].push(a);else{var t,o;if(void 0!==d)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var c=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),c&&c.forEach((e=>e(d))),a)return a(d)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={17896441:"8401",47058687:"7024",95881879:"3190",c03611c9:"187","14c42b22":"221",f4a41cc5:"242","53a90a4e":"281",f80390e0:"286","8a751f9f":"350",ad7a1ef6:"542",ff031c7d:"637","7cb2479d":"813","960803bf":"821","71f93b87":"956",c141421f:"957","09bef922":"958",a7456010:"1235","2609d35c":"1285",cab71165:"1351","2fd6e700":"1445","5efdef18":"1537","7cd620da":"1552","22dd74f7":"1567","796155b4":"1584","15033d09":"1738","50fc3c0c":"1848","2e8e5295":"1946","1a4e3797":"2138","3d7ef9b9":"2170","8e6cc846":"2244",cf9b7507:"2538",c4f5d8e4:"2634",bc7c935a:"2778","2e0dce54":"2827","70adbe13":"3054","4a70a78f":"3153","71a4181b":"3338",c214479d:"3555","0cfca6dd":"3732","7ea5518d":"4091",fe82bda8:"4135",b8a67d89:"4172","2b486e95":"4318",c374aadb:"4444",ab90bf36:"4474",df0688a0:"4568",a59ec873:"4636","83d494d4":"4747",f17f53dd:"4871",d929016d:"4890",b0d8ca7b:"4982",ab123836:"5197","50b9661c":"5351","943f163d":"5571",aba21aa0:"5742",a40ae8f2:"5762",fbd5181d:"5790","3c83ca7d":"6267","22f048b3":"6324",a19404f3:"6387","78c33b59":"6581","3f2a55e2":"6664",b9afe2a8:"6731","3c0c6a7f":"6754","981a04d0":"6974","288adf4d":"6982",a188041f:"6984",b467856c:"7048",e39666b6:"7058",a7bd4aaa:"7098",cf7ccda1:"7289","60e67547":"7647","707d70df":"7744",ec3987b3:"7757",fa7d1dcf:"7769","87712f4e":"8045","5812764a":"8223","0a24f6e4":"8339","08854dbd":"8392",dbc3e690:"8437",e0aabcf0:"8537","91b8d63b":"8750","08c9246a":"8770","1e0b4360":"8910","0c5b3199":"8911",a94703ab:"9048","43744cfd":"9240","91c39c3c":"9353","945fd7ad":"9505","5e95c892":"9647",ef02564c:"9738","38776a5e":"9837"}[e]||e,r.p+r.u(e)},(()=>{r.b=document.baseURI||self.location.href;var e={5354:0,1869:0};r.f.j=(a,d)=>{var f=r.o(e,a)?e[a]:void 0;if(0!==f)if(f)d.push(f[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var c=new Promise(((d,c)=>f=e[a]=[d,c]));d.push(f[2]=c);var b=r.p+r.u(a),t=new Error;r.l(b,(d=>{if(r.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var c=d&&("load"===d.type?"missing":d.type),b=d&&d.target&&d.target.src;t.message="Loading chunk "+a+" failed.\n("+c+": "+b+")",t.name="ChunkLoadError",t.type=c,t.request=b,f[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,d)=>{var f,c,b=d[0],t=d[1],o=d[2],n=0;if(b.some((a=>0!==e[a]))){for(f in t)r.o(t,f)&&(r.m[f]=t[f]);if(o)var i=o(r)}for(a&&a(d);n - + @@ -160,7 +160,7 @@

Handler

Video demo

Example

-
chatElementRef.connect = {
handler: (body, signals) => {
try {
fetch('custom-url).then((response) => {
signals.onResponse({text: 'Handler response'}); // displays the response text message
})
} catch (e) {
signals.onResponse({error: 'Error'}); // displays an error message
}
}
};
+
chatElementRef.connect = {
handler: (body, signals) => {
try {
fetch('custom-url').then((response) => {
signals.onResponse({text: 'Handler response'}); // displays the response text message
});
} catch (e) {
signals.onResponse({error: 'Error'}); // displays an error message
}
},
};
info

Error handling must be done within the handler function.

Signals

diff --git a/docs/demo/index.html b/docs/demo/index.html index cc3142625..2b41e3b0d 100644 --- a/docs/demo/index.html +++ b/docs/demo/index.html @@ -13,7 +13,7 @@ - + diff --git a/docs/directConnection/AssemblyAI/index.html b/docs/directConnection/AssemblyAI/index.html index 1c2422240..30a829a49 100644 --- a/docs/directConnection/AssemblyAI/index.html +++ b/docs/directConnection/AssemblyAI/index.html @@ -13,7 +13,7 @@ - + diff --git a/docs/directConnection/Azure/index.html b/docs/directConnection/Azure/index.html index 2096471f0..84e9d873c 100644 --- a/docs/directConnection/Azure/index.html +++ b/docs/directConnection/Azure/index.html @@ -13,7 +13,7 @@ - + diff --git a/docs/directConnection/Cohere/index.html b/docs/directConnection/Cohere/index.html index 6e7be0f23..d3cc6dc14 100644 --- a/docs/directConnection/Cohere/index.html +++ b/docs/directConnection/Cohere/index.html @@ -13,7 +13,7 @@ - + diff --git a/docs/directConnection/HuggingFace/index.html b/docs/directConnection/HuggingFace/index.html index 3485e5bb8..58139d7ef 100644 --- a/docs/directConnection/HuggingFace/index.html +++ b/docs/directConnection/HuggingFace/index.html @@ -13,7 +13,7 @@ - + diff --git a/docs/directConnection/OpenAI/index.html b/docs/directConnection/OpenAI/index.html index 75be91a19..810c208ed 100644 --- a/docs/directConnection/OpenAI/index.html +++ b/docs/directConnection/OpenAI/index.html @@ -13,7 +13,7 @@ - + diff --git a/docs/directConnection/StabilityAI/index.html b/docs/directConnection/StabilityAI/index.html index b7a34790d..91fa33334 100644 --- a/docs/directConnection/StabilityAI/index.html +++ b/docs/directConnection/StabilityAI/index.html @@ -13,7 +13,7 @@ - + diff --git a/docs/directConnection/index.html b/docs/directConnection/index.html index 89bdb1593..ae186949c 100644 --- a/docs/directConnection/index.html +++ b/docs/directConnection/index.html @@ -13,7 +13,7 @@ - + diff --git a/docs/events/index.html b/docs/events/index.html index c3467d301..614912b7f 100644 --- a/docs/events/index.html +++ b/docs/events/index.html @@ -13,7 +13,7 @@ - + diff --git a/docs/files/index.html b/docs/files/index.html index f5519bfef..5aa2ae670 100644 --- a/docs/files/index.html +++ b/docs/files/index.html @@ -13,7 +13,7 @@ - + diff --git a/docs/installation/index.html b/docs/installation/index.html index 5c19897a4..5ff0be427 100644 --- a/docs/installation/index.html +++ b/docs/installation/index.html @@ -13,7 +13,7 @@ - + diff --git a/docs/interceptors/index.html b/docs/interceptors/index.html index 7175d9d6d..8e7ff14b3 100644 --- a/docs/interceptors/index.html +++ b/docs/interceptors/index.html @@ -13,7 +13,7 @@ - + diff --git a/docs/introPanel/index.html b/docs/introPanel/index.html index 9ab75bc16..8dac53388 100644 --- a/docs/introPanel/index.html +++ b/docs/introPanel/index.html @@ -13,7 +13,7 @@ - + diff --git a/docs/introduction/index.html b/docs/introduction/index.html index c3b3c54e9..54eb3f6c9 100644 --- a/docs/introduction/index.html +++ b/docs/introduction/index.html @@ -13,7 +13,7 @@ - + diff --git a/docs/messages/HTML/index.html b/docs/messages/HTML/index.html index 174672c2b..5c334a644 100644 --- a/docs/messages/HTML/index.html +++ b/docs/messages/HTML/index.html @@ -13,7 +13,7 @@ - + diff --git a/docs/messages/index.html b/docs/messages/index.html index 9c009eafc..1beb3e34f 100644 --- a/docs/messages/index.html +++ b/docs/messages/index.html @@ -13,7 +13,7 @@ - + diff --git a/docs/messages/styles/index.html b/docs/messages/styles/index.html index 461f16750..8d048d1ad 100644 --- a/docs/messages/styles/index.html +++ b/docs/messages/styles/index.html @@ -13,7 +13,7 @@ - + diff --git a/docs/methods/index.html b/docs/methods/index.html index 39558201f..b35a22d42 100644 --- a/docs/methods/index.html +++ b/docs/methods/index.html @@ -13,7 +13,7 @@ - + diff --git a/docs/speech/index.html b/docs/speech/index.html index 38656a8e6..f1fa9d4d9 100644 --- a/docs/speech/index.html +++ b/docs/speech/index.html @@ -13,7 +13,7 @@ - + diff --git a/docs/styles/index.html b/docs/styles/index.html index 85d9f9678..2435d3688 100644 --- a/docs/styles/index.html +++ b/docs/styles/index.html @@ -13,7 +13,7 @@ - + diff --git a/docs/webModel/index.html b/docs/webModel/index.html index 691626316..d211ecce6 100644 --- a/docs/webModel/index.html +++ b/docs/webModel/index.html @@ -13,7 +13,7 @@ - + diff --git a/examples/Layout/fullScreen/index.html b/examples/Layout/fullScreen/index.html index cac382bec..3bf99fe5b 100644 --- a/examples/Layout/fullScreen/index.html +++ b/examples/Layout/fullScreen/index.html @@ -13,7 +13,7 @@ - + diff --git a/examples/Layout/sticky/index.html b/examples/Layout/sticky/index.html index fb8f76761..c17857f4e 100644 --- a/examples/Layout/sticky/index.html +++ b/examples/Layout/sticky/index.html @@ -13,7 +13,7 @@ - + diff --git a/examples/design/index.html b/examples/design/index.html index 8d0ae3dca..c94fd9bc6 100644 --- a/examples/design/index.html +++ b/examples/design/index.html @@ -13,7 +13,7 @@ - + diff --git a/examples/externalModules/index.html b/examples/externalModules/index.html index 4aec5399a..5fa5cce63 100644 --- a/examples/externalModules/index.html +++ b/examples/externalModules/index.html @@ -13,7 +13,7 @@ - + diff --git a/examples/frameworks/index.html b/examples/frameworks/index.html index 450c8294a..913618c39 100644 --- a/examples/frameworks/index.html +++ b/examples/frameworks/index.html @@ -13,7 +13,7 @@ - + diff --git a/examples/servers/index.html b/examples/servers/index.html index 9fcc2c530..374049a53 100644 --- a/examples/servers/index.html +++ b/examples/servers/index.html @@ -13,7 +13,7 @@ - + diff --git a/exploreButton/exploreButton/index.html b/exploreButton/exploreButton/index.html index 9b38bfe77..913171319 100644 --- a/exploreButton/exploreButton/index.html +++ b/exploreButton/exploreButton/index.html @@ -13,7 +13,7 @@ - + diff --git a/features/captureFiles/captureFiles/index.html b/features/captureFiles/captureFiles/index.html index 9a95d9e76..f22126902 100644 --- a/features/captureFiles/captureFiles/index.html +++ b/features/captureFiles/captureFiles/index.html @@ -13,7 +13,7 @@ - + diff --git a/features/connect/connect/index.html b/features/connect/connect/index.html index b0ee8ac03..2321cb38c 100644 --- a/features/connect/connect/index.html +++ b/features/connect/connect/index.html @@ -13,7 +13,7 @@ - + diff --git a/features/customize/customize/index.html b/features/customize/customize/index.html index 7c8eb03c4..812c280c9 100644 --- a/features/customize/customize/index.html +++ b/features/customize/customize/index.html @@ -13,7 +13,7 @@ - + diff --git a/features/features/index.html b/features/features/index.html index 017bbda2e..02dc16f71 100644 --- a/features/features/index.html +++ b/features/features/index.html @@ -13,7 +13,7 @@ - + diff --git a/features/media/media/index.html b/features/media/media/index.html index 97e1c8caa..899ac5060 100644 --- a/features/media/media/index.html +++ b/features/media/media/index.html @@ -13,7 +13,7 @@ - + diff --git a/features/speech/speech/index.html b/features/speech/speech/index.html index 0a2e001bd..f487128d4 100644 --- a/features/speech/speech/index.html +++ b/features/speech/speech/index.html @@ -13,7 +13,7 @@ - + diff --git a/footer/footer/index.html b/footer/footer/index.html index 4c9625c26..7f6346dcc 100644 --- a/footer/footer/index.html +++ b/footer/footer/index.html @@ -13,7 +13,7 @@ - + diff --git a/index.html b/index.html index c59d89b7d..1256b9896 100644 --- a/index.html +++ b/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/chat/manipulate/playgroundAddButton/index.html b/playground/chat/manipulate/playgroundAddButton/index.html index 8cf488bc1..d1e9690e9 100644 --- a/playground/chat/manipulate/playgroundAddButton/index.html +++ b/playground/chat/manipulate/playgroundAddButton/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/chat/playgroundChatComponent/index.html b/playground/chat/playgroundChatComponent/index.html index 92433f358..434de9a95 100644 --- a/playground/chat/playgroundChatComponent/index.html +++ b/playground/chat/playgroundChatComponent/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/chat/playgroundChatWrapper/index.html b/playground/chat/playgroundChatWrapper/index.html index 8d500f90b..7da123a1b 100644 --- a/playground/chat/playgroundChatWrapper/index.html +++ b/playground/chat/playgroundChatWrapper/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/chat/playgroundChatWrapperConfig/index.html b/playground/chat/playgroundChatWrapperConfig/index.html index e28262c21..f1ea2e949 100644 --- a/playground/chat/playgroundChatWrapperConfig/index.html +++ b/playground/chat/playgroundChatWrapperConfig/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/chat/playgroundChatWrapperLogo/index.html b/playground/chat/playgroundChatWrapperLogo/index.html index d8de4f74f..92baa2e52 100644 --- a/playground/chat/playgroundChatWrapperLogo/index.html +++ b/playground/chat/playgroundChatWrapperLogo/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/chat/playgroundChatWrapperText/index.html b/playground/chat/playgroundChatWrapperText/index.html index 8d930af84..2005a1920 100644 --- a/playground/chat/playgroundChatWrapperText/index.html +++ b/playground/chat/playgroundChatWrapperText/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/header/export/modal/playgroundExportModal/index.html b/playground/header/export/modal/playgroundExportModal/index.html index b14716c40..dce5713c3 100644 --- a/playground/header/export/modal/playgroundExportModal/index.html +++ b/playground/header/export/modal/playgroundExportModal/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/header/export/playgroundExportButton/index.html b/playground/header/export/playgroundExportButton/index.html index af2752430..7dec184f4 100644 --- a/playground/header/export/playgroundExportButton/index.html +++ b/playground/header/export/playgroundExportButton/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/header/information/modal/playgroundInformationModal/index.html b/playground/header/information/modal/playgroundInformationModal/index.html index 65a9f38f1..dd59f90e8 100644 --- a/playground/header/information/modal/playgroundInformationModal/index.html +++ b/playground/header/information/modal/playgroundInformationModal/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/header/information/playgroundInformationButton/index.html b/playground/header/information/playgroundInformationButton/index.html index f28815fb5..39c7b6bb0 100644 --- a/playground/header/information/playgroundInformationButton/index.html +++ b/playground/header/information/playgroundInformationButton/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/header/layout/playgroundLayoutButton/index.html b/playground/header/layout/playgroundLayoutButton/index.html index cf33ef55e..296e78122 100644 --- a/playground/header/layout/playgroundLayoutButton/index.html +++ b/playground/header/layout/playgroundLayoutButton/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/header/playgroundCog/index.html b/playground/header/playgroundCog/index.html index 0d9243454..ade319110 100644 --- a/playground/header/playgroundCog/index.html +++ b/playground/header/playgroundCog/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/header/playgroundHeaderButtons/index.html b/playground/header/playgroundHeaderButtons/index.html index 2c709d10f..bddd8c7d7 100644 --- a/playground/header/playgroundHeaderButtons/index.html +++ b/playground/header/playgroundHeaderButtons/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/header/playgroundShield/index.html b/playground/header/playgroundShield/index.html index 4f3fb084d..d59f77225 100644 --- a/playground/header/playgroundShield/index.html +++ b/playground/header/playgroundShield/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/header/upload/modal/playgroundUploadModal/index.html b/playground/header/upload/modal/playgroundUploadModal/index.html index 4c26db5d4..ad7db5783 100644 --- a/playground/header/upload/modal/playgroundUploadModal/index.html +++ b/playground/header/upload/modal/playgroundUploadModal/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/header/upload/playgroundUploadButton/index.html b/playground/header/upload/playgroundUploadButton/index.html index 6f7e6997d..268767354 100644 --- a/playground/header/upload/playgroundUploadButton/index.html +++ b/playground/header/upload/playgroundUploadButton/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/index.html b/playground/index.html index 832c17e5b..f8a306fc7 100644 --- a/playground/index.html +++ b/playground/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/playgroundSelect/index.html b/playground/playgroundSelect/index.html index e09dc3601..544bbbbfd 100644 --- a/playground/playgroundSelect/index.html +++ b/playground/playgroundSelect/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/serviceModal/close/serviceModalCloseButtons/index.html b/playground/serviceModal/close/serviceModalCloseButtons/index.html index 21560bcb9..74e4a4ae4 100644 --- a/playground/serviceModal/close/serviceModalCloseButtons/index.html +++ b/playground/serviceModal/close/serviceModalCloseButtons/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/serviceModal/code/serviceCode/index.html b/playground/serviceModal/code/serviceCode/index.html index f1781d806..5313b78b6 100644 --- a/playground/serviceModal/code/serviceCode/index.html +++ b/playground/serviceModal/code/serviceCode/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/serviceModal/fields/serviceConstructableObject/index.html b/playground/serviceModal/fields/serviceConstructableObject/index.html index 50deab9dc..633e0bb37 100644 --- a/playground/serviceModal/fields/serviceConstructableObject/index.html +++ b/playground/serviceModal/fields/serviceConstructableObject/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/serviceModal/fields/serviceField/index.html b/playground/serviceModal/fields/serviceField/index.html index 80217aea5..30ccb5d2d 100644 --- a/playground/serviceModal/fields/serviceField/index.html +++ b/playground/serviceModal/fields/serviceField/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/serviceModal/fields/serviceOptionalParametersFields/index.html b/playground/serviceModal/fields/serviceOptionalParametersFields/index.html index f9126b045..56becd167 100644 --- a/playground/serviceModal/fields/serviceOptionalParametersFields/index.html +++ b/playground/serviceModal/fields/serviceOptionalParametersFields/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/serviceModal/fields/serviceRequiredField/index.html b/playground/serviceModal/fields/serviceRequiredField/index.html index 94369af37..5974a9a91 100644 --- a/playground/serviceModal/fields/serviceRequiredField/index.html +++ b/playground/serviceModal/fields/serviceRequiredField/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/serviceModal/fields/serviceTypeField/index.html b/playground/serviceModal/fields/serviceTypeField/index.html index 3af89d025..287537668 100644 --- a/playground/serviceModal/fields/serviceTypeField/index.html +++ b/playground/serviceModal/fields/serviceTypeField/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/serviceModal/serviceModal/index.html b/playground/serviceModal/serviceModal/index.html index 74addd744..a9d7170e3 100644 --- a/playground/serviceModal/serviceModal/index.html +++ b/playground/serviceModal/serviceModal/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/serviceModal/wrappers/collapsableSection/index.html b/playground/serviceModal/wrappers/collapsableSection/index.html index 9277034dd..f2fb27745 100644 --- a/playground/serviceModal/wrappers/collapsableSection/index.html +++ b/playground/serviceModal/wrappers/collapsableSection/index.html @@ -13,7 +13,7 @@ - + diff --git a/playground/tooltip/playgroundTooltipWrapper/index.html b/playground/tooltip/playgroundTooltipWrapper/index.html index 35e711a0e..dcc62b0fd 100644 --- a/playground/tooltip/playgroundTooltipWrapper/index.html +++ b/playground/tooltip/playgroundTooltipWrapper/index.html @@ -13,7 +13,7 @@ - + diff --git a/preload/preloadImages/index.html b/preload/preloadImages/index.html index 7ee9c1c22..8ff27a94f 100644 --- a/preload/preloadImages/index.html +++ b/preload/preloadImages/index.html @@ -13,7 +13,7 @@ - + diff --git a/preload/preloadPlaygroundImages/index.html b/preload/preloadPlaygroundImages/index.html index 656e6e1e6..b181cf319 100644 --- a/preload/preloadPlaygroundImages/index.html +++ b/preload/preloadPlaygroundImages/index.html @@ -13,7 +13,7 @@ - + diff --git a/preload/preloadStartImages/index.html b/preload/preloadStartImages/index.html index 9b5a058fe..96624dcfb 100644 --- a/preload/preloadStartImages/index.html +++ b/preload/preloadStartImages/index.html @@ -13,7 +13,7 @@ - + diff --git a/search/index.html b/search/index.html index 2e7743f94..c4b6404c9 100644 --- a/search/index.html +++ b/search/index.html @@ -13,7 +13,7 @@ - + diff --git a/smallScreen/deepChatLogo/index.html b/smallScreen/deepChatLogo/index.html index 6f0958520..614a917bb 100644 --- a/smallScreen/deepChatLogo/index.html +++ b/smallScreen/deepChatLogo/index.html @@ -13,7 +13,7 @@ - + diff --git a/smallScreen/smallScreen/index.html b/smallScreen/smallScreen/index.html index dad60c662..ed4544916 100644 --- a/smallScreen/smallScreen/index.html +++ b/smallScreen/smallScreen/index.html @@ -13,7 +13,7 @@ - + diff --git a/start/aiInYourBrowser/index.html b/start/aiInYourBrowser/index.html index 28182b3a3..2c7d23050 100644 --- a/start/aiInYourBrowser/index.html +++ b/start/aiInYourBrowser/index.html @@ -13,7 +13,7 @@ - + diff --git a/start/connectToCustomAPI/index.html b/start/connectToCustomAPI/index.html index fa325f737..3ceb54674 100644 --- a/start/connectToCustomAPI/index.html +++ b/start/connectToCustomAPI/index.html @@ -13,7 +13,7 @@ - + diff --git a/start/connectToPopularAPI/index.html b/start/connectToPopularAPI/index.html index 4df09606c..d24b663dc 100644 --- a/start/connectToPopularAPI/index.html +++ b/start/connectToPopularAPI/index.html @@ -13,7 +13,7 @@ - + diff --git a/start/createComponent/index.html b/start/createComponent/index.html index 2fd88b13a..bec183480 100644 --- a/start/createComponent/index.html +++ b/start/createComponent/index.html @@ -13,7 +13,7 @@ - + diff --git a/start/index.html b/start/index.html index 0632f919e..42a484e59 100644 --- a/start/index.html +++ b/start/index.html @@ -13,7 +13,7 @@ - + diff --git a/start/options/index.html b/start/options/index.html index 2abbb3386..a769a428c 100644 --- a/start/options/index.html +++ b/start/options/index.html @@ -13,7 +13,7 @@ - + diff --git a/start/startParticles/index.html b/start/startParticles/index.html index 28e5b9e81..493c0ca0f 100644 --- a/start/startParticles/index.html +++ b/start/startParticles/index.html @@ -13,7 +13,7 @@ - + diff --git a/start/startSmallScreen/index.html b/start/startSmallScreen/index.html index 390154034..532b97f1b 100644 --- a/start/startSmallScreen/index.html +++ b/start/startSmallScreen/index.html @@ -13,7 +13,7 @@ - + diff --git a/startPanel/startPanel/index.html b/startPanel/startPanel/index.html index 1aaebd5dc..8af846925 100644 --- a/startPanel/startPanel/index.html +++ b/startPanel/startPanel/index.html @@ -13,7 +13,7 @@ - + diff --git a/startPanel/startPanelParticles/index.html b/startPanel/startPanelParticles/index.html index 1cdd92103..a882dbb8d 100644 --- a/startPanel/startPanelParticles/index.html +++ b/startPanel/startPanelParticles/index.html @@ -13,7 +13,7 @@ - + diff --git a/utils/fadeInContent/index.html b/utils/fadeInContent/index.html index 0a940d363..53fc7dce5 100644 --- a/utils/fadeInContent/index.html +++ b/utils/fadeInContent/index.html @@ -13,7 +13,7 @@ - + diff --git a/utils/fadeInNav/index.html b/utils/fadeInNav/index.html index 1c2da5d53..9dfb3e6dc 100644 --- a/utils/fadeInNav/index.html +++ b/utils/fadeInNav/index.html @@ -13,7 +13,7 @@ - + diff --git a/utils/onVisibleAnimation/index.html b/utils/onVisibleAnimation/index.html index 2820a3741..05ece5dad 100644 --- a/utils/onVisibleAnimation/index.html +++ b/utils/onVisibleAnimation/index.html @@ -13,7 +13,7 @@ - +