nui-chatbot-pkg 1.0.17 → 1.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";"use client";var V=Object.defineProperty;var ce=Object.getOwnPropertyDescriptor;var me=Object.getOwnPropertyNames;var pe=Object.prototype.hasOwnProperty;var he=(e,t)=>{for(var o in t)V(e,o,{get:t[o],enumerable:!0})},fe=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of me(t))!pe.call(e,n)&&n!==o&&V(e,n,{get:()=>t[n],enumerable:!(r=ce(t,n))||r.enumerable});return e};var ge=e=>fe(V({},"__esModule",{value:!0}),e);var Ne={};he(Ne,{ChatBot:()=>K,ChatHeader:()=>H,ChatInput:()=>W,Chatbot:()=>K,ICONS:()=>P,MessageBubble:()=>Y,Suggestions:()=>U});module.exports=ge(Ne);var x=require("react");var I=require("react/jsx-runtime"),ue=({isExpanded:e,onOpen:t,theming:o})=>(0,I.jsx)("div",{onClick:t,className:`chat-floating-btn ${e?"chat-btn-hidden":"chat-btn-visible"}`,children:(0,I.jsx)("div",{className:"chat-btn-border seamless-border",children:(0,I.jsxs)("div",{className:"chat-btn-inner",children:[(0,I.jsx)("div",{className:"chat-btn-gradient",style:{background:o?.showGradient===!1?"var(--cb-primary)":"linear-gradient(135deg, var(--cb-primary)0%, var(--cb-secondary)100%)"}}),(0,I.jsx)("img",{src:"assert/Sparkles.svg",alt:"style icon",width:30,height:30,className:"chat-btn-icon"})]})})}),X=ue;var j=require("react");var v=require("react/jsx-runtime"),P={MessageCircle:({size:e=24,className:t=""})=>(0,v.jsx)("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:t,children:(0,v.jsx)("path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z"})}),Bot:({size:e=24,className:t=""})=>(0,v.jsx)("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:t,children:(0,v.jsx)("path",{d:"M12 8V4m8 4V4M4 8V4M2 11h20m-1 0v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V11m5 5v2m8-2v2"})}),X:({size:e=24,className:t=""})=>(0,v.jsx)("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:t,children:(0,v.jsx)("path",{d:"M18 6 6 18M6 6l12 12"})}),Send:({size:e=24,className:t=""})=>(0,v.jsxs)("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:t,children:[(0,v.jsx)("path",{d:"m22 2-7 20-4-9-9-4Z"}),(0,v.jsx)("path",{d:"M22 2 11 13"})]})};var E=(e,t)=>t?`${e} ${t}`:e;var h=require("react/jsx-runtime"),be=({onClose:e,title:t,theming:o,strapiUrl:r})=>{let[n,m]=(0,j.useState)(null);(0,j.useEffect)(()=>{if(!r)return;(async()=>{try{let a=await(await fetch(`${r}/api/faq-ai-bot/suggestion-and-logo`)).json();a?.logoUrl&&m(`${r}${a.logoUrl}`)}catch(i){console.error("Failed to fetch logo",i)}})()},[r]);let f=E("chat-header",o?.header);return(0,h.jsxs)("header",{className:f,style:o?.headerStyle,children:[(0,h.jsxs)("div",{className:"chat-header-left",children:[(0,h.jsx)("div",{className:"chat-header-logo-placeholder",children:"A"}),(0,h.jsxs)("div",{className:"chat-header-title-wrap",children:[(0,h.jsxs)("div",{className:"chat-header-title-row",children:[(0,h.jsx)("span",{className:"chat-header-title",children:"Aria"}),(0,h.jsx)("span",{className:"chat-header-badge",children:t||"Assistant"})]}),(0,h.jsxs)("span",{className:"chat-header-status",children:[(0,h.jsx)("span",{className:"chat-header-status-dot"}),"Online \xB7 usually replies instantly"]})]})]}),(0,h.jsx)("div",{className:"chat-header-actions",children:(0,h.jsx)("button",{onClick:e,className:"chat-header-close-btn","aria-label":"Close chat",children:(0,h.jsx)(P.X,{size:20})})})]})},H=be;var O=require("react");var k=require("react/jsx-runtime"),we=({input:e,onInputChange:t,onSendMessage:o,isLoading:r,theming:n})=>{let m=n?.showGradient===!1?"var(--cb-primary)":"linear-gradient(135deg, var(--cb-primary) 0%, var(--cb-secondary) 100%)",s=(0,O.useRef)(null),g=E("chat-input-container",n?.input);(0,O.useEffect)(()=>{r||s.current?.focus()},[r]);let i=l=>{l.key==="Enter"&&!l.nativeEvent.isComposing&&a()},a=()=>{e.trim()&&!r&&o()};return(0,k.jsx)("div",{className:"chat-input-outer",children:(0,k.jsx)("div",{className:"chat-input-wrap",children:(0,k.jsxs)("div",{className:"chat-input-row",children:[(0,k.jsx)("div",{className:g,style:{...n?.inputStyle,borderRadius:"9999px"},children:(0,k.jsx)("div",{className:"chat-input-inner",children:(0,k.jsx)("input",{ref:s,type:"text",className:"chat-input-field",placeholder:r?"AI is thinking...":"Type a message...",value:e,onChange:l=>t(l.target.value),onKeyDown:i,disabled:r,"aria-label":"User message"})})}),(0,k.jsx)("button",{onClick:a,disabled:r||!e.trim(),style:{background:m},className:"chat-input-send-btn","aria-label":"Send message",children:r?(0,k.jsx)("div",{className:"chat-input-spinner"}):(0,k.jsx)(P.Send,{className:"chat-input-send-icon"})})]})})})},W=we;var Z=require("react");var d=require("react/jsx-runtime"),xe=({message:e,cardRegistry:t,themeStyles:o,theming:r})=>{let n=new Date().toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",hour12:!0}).toLowerCase(),m=g=>{let i=g?.__collectionUid?.split(".").pop()?.toLowerCase();return t.find(a=>a.id===i)||t.find(a=>a.id==="default")},s=e.record?m(e.record)?.component:null,f={background:r?.showGradient===!1?"#3B82F6":"linear-gradient(135deg, #1D4ED8 0%, #3B82F6 100%)"};if(e.items?.items?.length){let g=e.items.cardStyle?.toLowerCase()||e.items.collection?.toLowerCase()||e.items.title?.toLowerCase(),a=t.find(l=>l.id===g)?.component;return(0,d.jsxs)("div",{className:"mb-card-container",children:[e.content&&(0,d.jsx)("div",{className:"mb-card-content",children:e.content}),a&&e.items.items.map((l,N)=>(0,d.jsx)(a,{items:l,style:o},N))]})}return(0,d.jsxs)("div",{className:`mb-row ${e.role==="user"?"mb-row-user":"mb-row-assistant"}`,children:[s&&e.record?(0,d.jsx)("div",{className:"mb-card-wrapper",children:(0,d.jsx)(s,{record:e.record,style:o})}):(0,d.jsx)("div",{style:e.role==="user"?{...f,...r?.userBubbleStyle}:{},className:`mb-bubble ${e.role==="user"?"mb-bubble-user":"mb-bubble-assistant"}`,children:e.loading&&!e.content?(0,d.jsxs)("div",{className:"mb-typing",children:[(0,d.jsx)("span",{className:"mb-dot mb-dot-1"}),(0,d.jsx)("span",{className:"mb-dot mb-dot-2"}),(0,d.jsx)("span",{className:"mb-dot mb-dot-3"})]}):e.content}),e.role==="assistant"&&!s&&(0,d.jsxs)("div",{className:"mb-assistant-meta",children:[(0,d.jsx)("span",{className:"mb-assistant-avatar",style:{background:r?.showGradient===!1?"#3B82F6":"linear-gradient(135deg, var(--cb-primary), var(--cb-secondary))"},children:"A"}),(0,d.jsxs)("span",{className:"mb-assistant-time",children:[n," "]})]}),e.role==="user"&&!s&&(0,d.jsxs)("div",{className:"mb-user-meta",children:[(0,d.jsxs)("span",{className:"mb-user-time",children:[n," "]}),(0,d.jsx)("span",{className:"mb-user-tick","aria-label":"Delivered",children:"\u2713\u2713"})]})]})},Y=xe;var C=require("react/jsx-runtime"),ye=({messages:e,scrollRef:t,resolvedRegistry:o,theming:r})=>{let n=r?.welcomeDescription||"Hi! I'm Aria, your Harbour Air travel assistant. I'm here to help you book flights, check fees, understand baggage rules, and anything else you need.",m=new Date().toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",hour12:!0}).toLowerCase();return(0,Z.useEffect)(()=>{let s=t.current;s&&s.scrollTo({top:s.scrollHeight,behavior:"auto"})},[e,t]),(0,C.jsxs)("div",{ref:t,className:"chat-messages-container",style:{scrollbarWidth:"none",msOverflowStyle:"none"},children:[e.length===0&&(0,C.jsx)("div",{className:"chat-welcome",children:(0,C.jsxs)("div",{className:"chat-welcome-message",children:[(0,C.jsx)("p",{className:"chat-welcome-subtitle",children:n}),(0,C.jsxs)("div",{className:"chat-welcome-meta",children:[(0,C.jsx)("span",{className:"chat-welcome-avatar",style:{background:r?.showGradient===!1?"#3B82F6":"linear-gradient(135deg, var(--cb-primary), var(--cb-secondary))"},children:"A"}),(0,C.jsx)("span",{className:"chat-welcome-time",children:m})]})]})}),e.map(s=>(0,C.jsx)(Y,{message:s,cardRegistry:o,theming:r},s.id))]})},_=ye;var D=require("react");var u=require("react/jsx-runtime"),ve=({strapiUrl:e,onSelectQuestion:t,variant:o,theming:r})=>{let[n,m]=(0,D.useState)([]),[s,f]=(0,D.useState)(!0);(0,D.useEffect)(()=>{let i=new AbortController;return f(!0),fetch(`${e}/api/faq-ai-bot/suggestion-and-logo`,{signal:i.signal}).then(a=>a.json()).then(a=>{m(a.suggestedQuestions||[]),f(!1)}).catch(a=>{a.name!=="AbortError"&&(console.error("Suggestions fetch failed",a),f(!1))}),()=>i.abort()},[e]);let g=()=>o==="floating"?(0,u.jsxs)("div",{className:"sug-skeleton-float",children:[[1,2].map(i=>(0,u.jsx)("div",{className:"sug-skeleton-item",style:{backgroundColor:r?.primaryColor?`${r.primaryColor}`:"hsla(178, 100%, 51%, 0.05)",transform:i%2===0?"rotate(1deg)":"rotate(-1deg)"}},i)),(0,u.jsx)("div",{className:"sug-skeleton-more"})]}):(0,u.jsx)("div",{className:"sug-skeleton-list",children:[1,2,3].map(i=>(0,u.jsx)("div",{className:"sug-skeleton-chip"},i))});return s&&n.length===0?(0,u.jsx)(g,{}):o==="floating"?(0,u.jsx)("div",{className:"sug-float-wrap",children:n.map((i,a)=>(0,u.jsx)("button",{onClick:()=>t(i),className:"sug-float-btn",style:{borderColor:"#bfdbfe",animationDelay:`${a*.1}s`},children:(0,u.jsx)("span",{className:"sug-float-text",children:i})},`float-${a}-${i}`))}):(0,u.jsx)("div",{className:"sug-list-wrap",children:n.map((i,a)=>(0,u.jsx)("button",{onClick:()=>t(i),className:"sug-list-btn",style:{animationDelay:`${a*.05}s`},children:i},`list-${a}-${i}`))})},U=ve;var w=require("react/jsx-runtime"),ke=({isExpanded:e,setIsExpanded:t,messages:o,scrollRef:r,sendMessage:n,strapiUrl:m,resolvedRegistry:s,input:f,setInput:g,isLoading:i,title:a,theming:l})=>{let N=E(`chat-window ${e?"chat-window-open":"chat-window-closed"}`,l?.container);return(0,w.jsxs)("div",{className:N,style:l?.containerStyle,children:[(0,w.jsx)("div",{className:"chat-window-header",children:(0,w.jsx)(H,{title:a,onClose:()=>t(!1),theming:l,strapiUrl:m})}),(0,w.jsx)(_,{messages:o,scrollRef:r,resolvedRegistry:s,theming:l}),(0,w.jsxs)("div",{className:"chat-window-footer",children:[(0,w.jsx)("div",{className:"chat-window-suggestions",children:(0,w.jsx)(U,{onSelectQuestion:n,strapiUrl:m,variant:"floating",theming:l})}),(0,w.jsx)(W,{input:f,onInputChange:g,onSendMessage:n,isLoading:i,theming:l}),(0,w.jsx)("div",{className:"chat-window-powered",children:(0,w.jsx)("span",{className:"chat-powered-text",children:"Talk to a human \xB7 Privacy policy"})})]})]})},ee=ke;var F=require("react/jsx-runtime"),Ce=({strapiUrl:e,cardRegistry:t,theme:o,title:r,streamSpeed:n})=>{let[m,s]=(0,x.useState)([]),[f,g]=(0,x.useState)(""),[i,a]=(0,x.useState)(!1),[l,N]=(0,x.useState)(!1),$=(0,x.useRef)(null),[te,ae]=(0,x.useState)([]),re=(0,x.useRef)(null),oe={"--cb-primary":o?.primaryColor||"#2999d6","--cb-secondary":o?.secondaryColor||"#179fa3","--cb-accent":o?.accentColor||o?.secondaryColor||"#179fa3"};return(0,x.useEffect)(()=>{t.length>0&&ae(t)},[t]),(0,x.useEffect)(()=>()=>$.current?.abort(),[]),(0,F.jsxs)("div",{className:"chatbot-container",style:oe,children:[(0,F.jsx)(X,{isExpanded:l,onOpen:()=>N(!0),theming:o}),(0,F.jsx)(ee,{isExpanded:l,setIsExpanded:N,messages:m,scrollRef:re,sendMessage:async ie=>{let G=ie||f;if(!G.trim())return;$.current?.abort(),$.current=new AbortController,N(!0),g(""),a(!0);let ne={role:"user",content:G,id:Date.now()},S=Date.now()+1;s(R=>[...R,ne,{role:"assistant",content:"",items:null,loading:!0,id:S}]);try{let R=await fetch(`${e}/api/faq-ai-bot/ask`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({question:G,history:m.slice(-4).map(p=>({role:p.role,content:p.content}))}),signal:$.current.signal});if(!R.ok)throw new Error("Network response was not ok");let A=R.body?.getReader(),T=new TextDecoder;if(!A)throw new Error("No reader available");let L=[],q=!1,se=(async()=>{for(;!q||L.length>0;)if(L.length>0){let p=L.shift();if(p?.type==="text")if(n&&n>0)for(let c of p.content)s(b=>b.map(y=>y.id===S?{...y,content:y.content+c}:y)),await new Promise(b=>setTimeout(b,n));else s(c=>c.map(b=>b.id===S?{...b,content:b.content+p.content}:b));else if(p?.type==="card")try{let c=p.data;s(b=>b.map(y=>y.id===S?{...y,items:{items:c.items,schema:c.schema,collection:c.title,title:c.title,cardStyle:c.cardStyle}}:y))}catch(c){console.error("Error processing card data:",c)}}else await new Promise(p=>setTimeout(p,20));a(!1),s(p=>p.map(c=>c.id===S?{...c,loading:!1}:c))})(),Q="";for(;;){let{value:p,done:c}=await A.read();if(c)break;let b=T.decode(p,{stream:!0});Q+=b;let y=Q.split(`
|
|
1
|
+
"use strict";"use client";var V=Object.defineProperty;var ce=Object.getOwnPropertyDescriptor;var me=Object.getOwnPropertyNames;var pe=Object.prototype.hasOwnProperty;var he=(e,t)=>{for(var o in t)V(e,o,{get:t[o],enumerable:!0})},fe=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of me(t))!pe.call(e,n)&&n!==o&&V(e,n,{get:()=>t[n],enumerable:!(r=ce(t,n))||r.enumerable});return e};var ge=e=>fe(V({},"__esModule",{value:!0}),e);var Ne={};he(Ne,{ChatBot:()=>K,ChatHeader:()=>H,ChatInput:()=>W,Chatbot:()=>K,ICONS:()=>P,MessageBubble:()=>Y,Suggestions:()=>U});module.exports=ge(Ne);var x=require("react");var I=require("react/jsx-runtime"),ue=({isExpanded:e,onOpen:t,theming:o})=>(0,I.jsx)("div",{onClick:t,className:`chat-floating-btn ${e?"chat-btn-hidden":"chat-btn-visible"}`,children:(0,I.jsx)("div",{className:"chat-btn-border seamless-border",children:(0,I.jsxs)("div",{className:"chat-btn-inner",children:[(0,I.jsx)("div",{className:"chat-btn-gradient",style:{background:o?.showGradient===!1?"var(--cb-primary)":"linear-gradient(135deg, var(--cb-primary)0%, var(--cb-secondary)100%)"}}),(0,I.jsx)("img",{src:"/Sparkles.svg",alt:"style icon",width:30,height:30,className:"chat-btn-icon"})]})})}),X=ue;var j=require("react");var v=require("react/jsx-runtime"),P={MessageCircle:({size:e=24,className:t=""})=>(0,v.jsx)("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:t,children:(0,v.jsx)("path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z"})}),Bot:({size:e=24,className:t=""})=>(0,v.jsx)("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:t,children:(0,v.jsx)("path",{d:"M12 8V4m8 4V4M4 8V4M2 11h20m-1 0v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V11m5 5v2m8-2v2"})}),X:({size:e=24,className:t=""})=>(0,v.jsx)("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:t,children:(0,v.jsx)("path",{d:"M18 6 6 18M6 6l12 12"})}),Send:({size:e=24,className:t=""})=>(0,v.jsxs)("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:t,children:[(0,v.jsx)("path",{d:"m22 2-7 20-4-9-9-4Z"}),(0,v.jsx)("path",{d:"M22 2 11 13"})]})};var E=(e,t)=>t?`${e} ${t}`:e;var h=require("react/jsx-runtime"),be=({onClose:e,title:t,theming:o,strapiUrl:r})=>{let[n,m]=(0,j.useState)(null);(0,j.useEffect)(()=>{if(!r)return;(async()=>{try{let a=await(await fetch(`${r}/api/faq-ai-bot/suggestion-and-logo`)).json();a?.logoUrl&&m(`${r}${a.logoUrl}`)}catch(i){console.error("Failed to fetch logo",i)}})()},[r]);let f=E("chat-header",o?.header);return(0,h.jsxs)("header",{className:f,style:o?.headerStyle,children:[(0,h.jsxs)("div",{className:"chat-header-left",children:[(0,h.jsx)("div",{className:"chat-header-logo-placeholder",children:"A"}),(0,h.jsxs)("div",{className:"chat-header-title-wrap",children:[(0,h.jsxs)("div",{className:"chat-header-title-row",children:[(0,h.jsx)("span",{className:"chat-header-title",children:"Aria"}),(0,h.jsx)("span",{className:"chat-header-badge",children:t||"Assistant"})]}),(0,h.jsxs)("span",{className:"chat-header-status",children:[(0,h.jsx)("span",{className:"chat-header-status-dot"}),"Online \xB7 usually replies instantly"]})]})]}),(0,h.jsx)("div",{className:"chat-header-actions",children:(0,h.jsx)("button",{onClick:e,className:"chat-header-close-btn","aria-label":"Close chat",children:(0,h.jsx)(P.X,{size:20})})})]})},H=be;var O=require("react");var k=require("react/jsx-runtime"),we=({input:e,onInputChange:t,onSendMessage:o,isLoading:r,theming:n})=>{let m=n?.showGradient===!1?"var(--cb-primary)":"linear-gradient(135deg, var(--cb-primary) 0%, var(--cb-secondary) 100%)",s=(0,O.useRef)(null),g=E("chat-input-container",n?.input);(0,O.useEffect)(()=>{r||s.current?.focus()},[r]);let i=l=>{l.key==="Enter"&&!l.nativeEvent.isComposing&&a()},a=()=>{e.trim()&&!r&&o()};return(0,k.jsx)("div",{className:"chat-input-outer",children:(0,k.jsx)("div",{className:"chat-input-wrap",children:(0,k.jsxs)("div",{className:"chat-input-row",children:[(0,k.jsx)("div",{className:g,style:{...n?.inputStyle,borderRadius:"9999px"},children:(0,k.jsx)("div",{className:"chat-input-inner",children:(0,k.jsx)("input",{ref:s,type:"text",className:"chat-input-field",placeholder:r?"AI is thinking...":"Type a message...",value:e,onChange:l=>t(l.target.value),onKeyDown:i,disabled:r,"aria-label":"User message"})})}),(0,k.jsx)("button",{onClick:a,disabled:r||!e.trim(),style:{background:m},className:"chat-input-send-btn","aria-label":"Send message",children:r?(0,k.jsx)("div",{className:"chat-input-spinner"}):(0,k.jsx)(P.Send,{className:"chat-input-send-icon"})})]})})})},W=we;var Z=require("react");var d=require("react/jsx-runtime"),xe=({message:e,cardRegistry:t,themeStyles:o,theming:r})=>{let n=new Date().toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",hour12:!0}).toLowerCase(),m=g=>{let i=g?.__collectionUid?.split(".").pop()?.toLowerCase();return t.find(a=>a.id===i)||t.find(a=>a.id==="default")},s=e.record?m(e.record)?.component:null,f={background:r?.showGradient===!1?"#3B82F6":"linear-gradient(135deg, #1D4ED8 0%, #3B82F6 100%)"};if(e.items?.items?.length){let g=e.items.cardStyle?.toLowerCase()||e.items.collection?.toLowerCase()||e.items.title?.toLowerCase(),a=t.find(l=>l.id===g)?.component;return(0,d.jsxs)("div",{className:"mb-card-container",children:[e.content&&(0,d.jsx)("div",{className:"mb-card-content",children:e.content}),a&&e.items.items.map((l,N)=>(0,d.jsx)(a,{items:l,style:o},N))]})}return(0,d.jsxs)("div",{className:`mb-row ${e.role==="user"?"mb-row-user":"mb-row-assistant"}`,children:[s&&e.record?(0,d.jsx)("div",{className:"mb-card-wrapper",children:(0,d.jsx)(s,{record:e.record,style:o})}):(0,d.jsx)("div",{style:e.role==="user"?{...f,...r?.userBubbleStyle}:{},className:`mb-bubble ${e.role==="user"?"mb-bubble-user":"mb-bubble-assistant"}`,children:e.loading&&!e.content?(0,d.jsxs)("div",{className:"mb-typing",children:[(0,d.jsx)("span",{className:"mb-dot mb-dot-1"}),(0,d.jsx)("span",{className:"mb-dot mb-dot-2"}),(0,d.jsx)("span",{className:"mb-dot mb-dot-3"})]}):e.content}),e.role==="assistant"&&!s&&(0,d.jsxs)("div",{className:"mb-assistant-meta",children:[(0,d.jsx)("span",{className:"mb-assistant-avatar",style:{background:r?.showGradient===!1?"#3B82F6":"linear-gradient(135deg, var(--cb-primary), var(--cb-secondary))"},children:"A"}),(0,d.jsxs)("span",{className:"mb-assistant-time",children:[n," "]})]}),e.role==="user"&&!s&&(0,d.jsxs)("div",{className:"mb-user-meta",children:[(0,d.jsxs)("span",{className:"mb-user-time",children:[n," "]}),(0,d.jsx)("span",{className:"mb-user-tick","aria-label":"Delivered",children:"\u2713\u2713"})]})]})},Y=xe;var C=require("react/jsx-runtime"),ye=({messages:e,scrollRef:t,resolvedRegistry:o,theming:r})=>{let n=r?.welcomeDescription||"Hi! I'm Aria, your Harbour Air travel assistant. I'm here to help you book flights, check fees, understand baggage rules, and anything else you need.",m=new Date().toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",hour12:!0}).toLowerCase();return(0,Z.useEffect)(()=>{let s=t.current;s&&s.scrollTo({top:s.scrollHeight,behavior:"auto"})},[e,t]),(0,C.jsxs)("div",{ref:t,className:"chat-messages-container",style:{scrollbarWidth:"none",msOverflowStyle:"none"},children:[e.length===0&&(0,C.jsx)("div",{className:"chat-welcome",children:(0,C.jsxs)("div",{className:"chat-welcome-message",children:[(0,C.jsx)("p",{className:"chat-welcome-subtitle",children:n}),(0,C.jsxs)("div",{className:"chat-welcome-meta",children:[(0,C.jsx)("span",{className:"chat-welcome-avatar",style:{background:r?.showGradient===!1?"#3B82F6":"linear-gradient(135deg, var(--cb-primary), var(--cb-secondary))"},children:"A"}),(0,C.jsx)("span",{className:"chat-welcome-time",children:m})]})]})}),e.map(s=>(0,C.jsx)(Y,{message:s,cardRegistry:o,theming:r},s.id))]})},_=ye;var D=require("react");var u=require("react/jsx-runtime"),ve=({strapiUrl:e,onSelectQuestion:t,variant:o,theming:r})=>{let[n,m]=(0,D.useState)([]),[s,f]=(0,D.useState)(!0);(0,D.useEffect)(()=>{let i=new AbortController;return f(!0),fetch(`${e}/api/faq-ai-bot/suggestion-and-logo`,{signal:i.signal}).then(a=>a.json()).then(a=>{m(a.suggestedQuestions||[]),f(!1)}).catch(a=>{a.name!=="AbortError"&&(console.error("Suggestions fetch failed",a),f(!1))}),()=>i.abort()},[e]);let g=()=>o==="floating"?(0,u.jsxs)("div",{className:"sug-skeleton-float",children:[[1,2].map(i=>(0,u.jsx)("div",{className:"sug-skeleton-item",style:{backgroundColor:r?.primaryColor?`${r.primaryColor}`:"hsla(178, 100%, 51%, 0.05)",transform:i%2===0?"rotate(1deg)":"rotate(-1deg)"}},i)),(0,u.jsx)("div",{className:"sug-skeleton-more"})]}):(0,u.jsx)("div",{className:"sug-skeleton-list",children:[1,2,3].map(i=>(0,u.jsx)("div",{className:"sug-skeleton-chip"},i))});return s&&n.length===0?(0,u.jsx)(g,{}):o==="floating"?(0,u.jsx)("div",{className:"sug-float-wrap",children:n.map((i,a)=>(0,u.jsx)("button",{onClick:()=>t(i),className:"sug-float-btn",style:{borderColor:"#bfdbfe",animationDelay:`${a*.1}s`},children:(0,u.jsx)("span",{className:"sug-float-text",children:i})},`float-${a}-${i}`))}):(0,u.jsx)("div",{className:"sug-list-wrap",children:n.map((i,a)=>(0,u.jsx)("button",{onClick:()=>t(i),className:"sug-list-btn",style:{animationDelay:`${a*.05}s`},children:i},`list-${a}-${i}`))})},U=ve;var w=require("react/jsx-runtime"),ke=({isExpanded:e,setIsExpanded:t,messages:o,scrollRef:r,sendMessage:n,strapiUrl:m,resolvedRegistry:s,input:f,setInput:g,isLoading:i,title:a,theming:l})=>{let N=E(`chat-window ${e?"chat-window-open":"chat-window-closed"}`,l?.container);return(0,w.jsxs)("div",{className:N,style:l?.containerStyle,children:[(0,w.jsx)("div",{className:"chat-window-header",children:(0,w.jsx)(H,{title:a,onClose:()=>t(!1),theming:l,strapiUrl:m})}),(0,w.jsx)(_,{messages:o,scrollRef:r,resolvedRegistry:s,theming:l}),(0,w.jsxs)("div",{className:"chat-window-footer",children:[(0,w.jsx)("div",{className:"chat-window-suggestions",children:(0,w.jsx)(U,{onSelectQuestion:n,strapiUrl:m,variant:"floating",theming:l})}),(0,w.jsx)(W,{input:f,onInputChange:g,onSendMessage:n,isLoading:i,theming:l}),(0,w.jsx)("div",{className:"chat-window-powered",children:(0,w.jsx)("span",{className:"chat-powered-text",children:"Talk to a human \xB7 Privacy policy"})})]})]})},ee=ke;var F=require("react/jsx-runtime"),Ce=({strapiUrl:e,cardRegistry:t,theme:o,title:r,streamSpeed:n})=>{let[m,s]=(0,x.useState)([]),[f,g]=(0,x.useState)(""),[i,a]=(0,x.useState)(!1),[l,N]=(0,x.useState)(!1),$=(0,x.useRef)(null),[te,ae]=(0,x.useState)([]),re=(0,x.useRef)(null),oe={"--cb-primary":o?.primaryColor||"#2999d6","--cb-secondary":o?.secondaryColor||"#179fa3","--cb-accent":o?.accentColor||o?.secondaryColor||"#179fa3"};return(0,x.useEffect)(()=>{t.length>0&&ae(t)},[t]),(0,x.useEffect)(()=>()=>$.current?.abort(),[]),(0,F.jsxs)("div",{className:"chatbot-container",style:oe,children:[(0,F.jsx)(X,{isExpanded:l,onOpen:()=>N(!0),theming:o}),(0,F.jsx)(ee,{isExpanded:l,setIsExpanded:N,messages:m,scrollRef:re,sendMessage:async ie=>{let G=ie||f;if(!G.trim())return;$.current?.abort(),$.current=new AbortController,N(!0),g(""),a(!0);let ne={role:"user",content:G,id:Date.now()},S=Date.now()+1;s(R=>[...R,ne,{role:"assistant",content:"",items:null,loading:!0,id:S}]);try{let R=await fetch(`${e}/api/faq-ai-bot/ask`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({question:G,history:m.slice(-4).map(p=>({role:p.role,content:p.content}))}),signal:$.current.signal});if(!R.ok)throw new Error("Network response was not ok");let A=R.body?.getReader(),T=new TextDecoder;if(!A)throw new Error("No reader available");let L=[],q=!1,se=(async()=>{for(;!q||L.length>0;)if(L.length>0){let p=L.shift();if(p?.type==="text")if(n&&n>0)for(let c of p.content)s(b=>b.map(y=>y.id===S?{...y,content:y.content+c}:y)),await new Promise(b=>setTimeout(b,n));else s(c=>c.map(b=>b.id===S?{...b,content:b.content+p.content}:b));else if(p?.type==="card")try{let c=p.data;s(b=>b.map(y=>y.id===S?{...y,items:{items:c.items,schema:c.schema,collection:c.title,title:c.title,cardStyle:c.cardStyle}}:y))}catch(c){console.error("Error processing card data:",c)}}else await new Promise(p=>setTimeout(p,20));a(!1),s(p=>p.map(c=>c.id===S?{...c,loading:!1}:c))})(),Q="";for(;;){let{value:p,done:c}=await A.read();if(c)break;let b=T.decode(p,{stream:!0});Q+=b;let y=Q.split(`
|
|
2
2
|
|
|
3
3
|
`);Q=y.pop()||"";for(let de of y){let le=de.split(`
|
|
4
4
|
`),J="message",z="";for(let M of le)if(M.startsWith("event:"))J=M.slice(6).trim();else if(M.startsWith("data:")){let B=M.slice(5);if(B.startsWith(" ")&&(B=B.slice(1)),B.trim()==="[DONE]"||B.trim()==="[Done]")continue;z+=(z?`
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use client";import{useState as P,useEffect as _,useRef as ee}from"react";import{jsx as $,jsxs as he}from"react/jsx-runtime";var pe=({isExpanded:e,onOpen:t,theming:n})=>$("div",{onClick:t,className:`chat-floating-btn ${e?"chat-btn-hidden":"chat-btn-visible"}`,children:$("div",{className:"chat-btn-border seamless-border",children:he("div",{className:"chat-btn-inner",children:[$("div",{className:"chat-btn-gradient",style:{background:n?.showGradient===!1?"var(--cb-primary)":"linear-gradient(135deg, var(--cb-primary)0%, var(--cb-secondary)100%)"}}),$("img",{src:"assert/Sparkles.svg",alt:"style icon",width:30,height:30,className:"chat-btn-icon"})]})})}),K=pe;import{useEffect as ge,useState as ue}from"react";import{jsx as w,jsxs as fe}from"react/jsx-runtime";var A={MessageCircle:({size:e=24,className:t=""})=>w("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:t,children:w("path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z"})}),Bot:({size:e=24,className:t=""})=>w("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:t,children:w("path",{d:"M12 8V4m8 4V4M4 8V4M2 11h20m-1 0v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V11m5 5v2m8-2v2"})}),X:({size:e=24,className:t=""})=>w("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:t,children:w("path",{d:"M18 6 6 18M6 6l12 12"})}),Send:({size:e=24,className:t=""})=>fe("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:t,children:[w("path",{d:"m22 2-7 20-4-9-9-4Z"}),w("path",{d:"M22 2 11 13"})]})};var M=(e,t)=>t?`${e} ${t}`:e;import{jsx as k,jsxs as L}from"react/jsx-runtime";var be=({onClose:e,title:t,theming:n,strapiUrl:r})=>{let[s,c]=ue(null);ge(()=>{if(!r)return;(async()=>{try{let a=await(await fetch(`${r}/api/faq-ai-bot/suggestion-and-logo`)).json();a?.logoUrl&&c(`${r}${a.logoUrl}`)}catch(o){console.error("Failed to fetch logo",o)}})()},[r]);let p=M("chat-header",n?.header);return L("header",{className:p,style:n?.headerStyle,children:[L("div",{className:"chat-header-left",children:[k("div",{className:"chat-header-logo-placeholder",children:"A"}),L("div",{className:"chat-header-title-wrap",children:[L("div",{className:"chat-header-title-row",children:[k("span",{className:"chat-header-title",children:"Aria"}),k("span",{className:"chat-header-badge",children:t||"Assistant"})]}),L("span",{className:"chat-header-status",children:[k("span",{className:"chat-header-status-dot"}),"Online \xB7 usually replies instantly"]})]})]}),k("div",{className:"chat-header-actions",children:k("button",{onClick:e,className:"chat-header-close-btn","aria-label":"Close chat",children:k(A.X,{size:20})})})]})},O=be;import{useRef as we,useEffect as xe}from"react";import{jsx as x,jsxs as ve}from"react/jsx-runtime";var ye=({input:e,onInputChange:t,onSendMessage:n,isLoading:r,theming:s})=>{let c=s?.showGradient===!1?"var(--cb-primary)":"linear-gradient(135deg, var(--cb-primary) 0%, var(--cb-secondary) 100%)",i=we(null),h=M("chat-input-container",s?.input);xe(()=>{r||i.current?.focus()},[r]);let o=d=>{d.key==="Enter"&&!d.nativeEvent.isComposing&&a()},a=()=>{e.trim()&&!r&&n()};return x("div",{className:"chat-input-outer",children:x("div",{className:"chat-input-wrap",children:ve("div",{className:"chat-input-row",children:[x("div",{className:h,style:{...s?.inputStyle,borderRadius:"9999px"},children:x("div",{className:"chat-input-inner",children:x("input",{ref:i,type:"text",className:"chat-input-field",placeholder:r?"AI is thinking...":"Type a message...",value:e,onChange:d=>t(d.target.value),onKeyDown:o,disabled:r,"aria-label":"User message"})})}),x("button",{onClick:a,disabled:r||!e.trim(),style:{background:c},className:"chat-input-send-btn","aria-label":"Send message",children:r?x("div",{className:"chat-input-spinner"}):x(A.Send,{className:"chat-input-send-icon"})})]})})})},W=ye;import{useEffect as Ce}from"react";import{jsx as u,jsxs as C}from"react/jsx-runtime";var ke=({message:e,cardRegistry:t,themeStyles:n,theming:r})=>{let s=new Date().toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",hour12:!0}).toLowerCase(),c=h=>{let o=h?.__collectionUid?.split(".").pop()?.toLowerCase();return t.find(a=>a.id===o)||t.find(a=>a.id==="default")},i=e.record?c(e.record)?.component:null,p={background:r?.showGradient===!1?"#3B82F6":"linear-gradient(135deg, #1D4ED8 0%, #3B82F6 100%)"};if(e.items?.items?.length){let h=e.items.cardStyle?.toLowerCase()||e.items.collection?.toLowerCase()||e.items.title?.toLowerCase(),a=t.find(d=>d.id===h)?.component;return C("div",{className:"mb-card-container",children:[e.content&&u("div",{className:"mb-card-content",children:e.content}),a&&e.items.items.map((d,v)=>u(a,{items:d,style:n},v))]})}return C("div",{className:`mb-row ${e.role==="user"?"mb-row-user":"mb-row-assistant"}`,children:[i&&e.record?u("div",{className:"mb-card-wrapper",children:u(i,{record:e.record,style:n})}):u("div",{style:e.role==="user"?{...p,...r?.userBubbleStyle}:{},className:`mb-bubble ${e.role==="user"?"mb-bubble-user":"mb-bubble-assistant"}`,children:e.loading&&!e.content?C("div",{className:"mb-typing",children:[u("span",{className:"mb-dot mb-dot-1"}),u("span",{className:"mb-dot mb-dot-2"}),u("span",{className:"mb-dot mb-dot-3"})]}):e.content}),e.role==="assistant"&&!i&&C("div",{className:"mb-assistant-meta",children:[u("span",{className:"mb-assistant-avatar",style:{background:r?.showGradient===!1?"#3B82F6":"linear-gradient(135deg, var(--cb-primary), var(--cb-secondary))"},children:"A"}),C("span",{className:"mb-assistant-time",children:[s," "]})]}),e.role==="user"&&!i&&C("div",{className:"mb-user-meta",children:[C("span",{className:"mb-user-time",children:[s," "]}),u("span",{className:"mb-user-tick","aria-label":"Delivered",children:"\u2713\u2713"})]})]})},Y=ke;import{jsx as z,jsxs as U}from"react/jsx-runtime";var Ne=({messages:e,scrollRef:t,resolvedRegistry:n,theming:r})=>{let s=r?.welcomeDescription||"Hi! I'm Aria, your Harbour Air travel assistant. I'm here to help you book flights, check fees, understand baggage rules, and anything else you need.",c=new Date().toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",hour12:!0}).toLowerCase();return Ce(()=>{let i=t.current;i&&i.scrollTo({top:i.scrollHeight,behavior:"auto"})},[e,t]),U("div",{ref:t,className:"chat-messages-container",style:{scrollbarWidth:"none",msOverflowStyle:"none"},children:[e.length===0&&z("div",{className:"chat-welcome",children:U("div",{className:"chat-welcome-message",children:[z("p",{className:"chat-welcome-subtitle",children:s}),U("div",{className:"chat-welcome-meta",children:[z("span",{className:"chat-welcome-avatar",style:{background:r?.showGradient===!1?"#3B82F6":"linear-gradient(135deg, var(--cb-primary), var(--cb-secondary))"},children:"A"}),z("span",{className:"chat-welcome-time",children:c})]})]})}),e.map(i=>z(Y,{message:i,cardRegistry:n,theming:r},i.id))]})},q=Ne;import{useState as J,useEffect as Ie}from"react";import{jsx as b,jsxs as Re}from"react/jsx-runtime";var Se=({strapiUrl:e,onSelectQuestion:t,variant:n,theming:r})=>{let[s,c]=J([]),[i,p]=J(!0);Ie(()=>{let o=new AbortController;return p(!0),fetch(`${e}/api/faq-ai-bot/suggestion-and-logo`,{signal:o.signal}).then(a=>a.json()).then(a=>{c(a.suggestedQuestions||[]),p(!1)}).catch(a=>{a.name!=="AbortError"&&(console.error("Suggestions fetch failed",a),p(!1))}),()=>o.abort()},[e]);let h=()=>n==="floating"?Re("div",{className:"sug-skeleton-float",children:[[1,2].map(o=>b("div",{className:"sug-skeleton-item",style:{backgroundColor:r?.primaryColor?`${r.primaryColor}`:"hsla(178, 100%, 51%, 0.05)",transform:o%2===0?"rotate(1deg)":"rotate(-1deg)"}},o)),b("div",{className:"sug-skeleton-more"})]}):b("div",{className:"sug-skeleton-list",children:[1,2,3].map(o=>b("div",{className:"sug-skeleton-chip"},o))});return i&&s.length===0?b(h,{}):n==="floating"?b("div",{className:"sug-float-wrap",children:s.map((o,a)=>b("button",{onClick:()=>t(o),className:"sug-float-btn",style:{borderColor:"#bfdbfe",animationDelay:`${a*.1}s`},children:b("span",{className:"sug-float-text",children:o})},`float-${a}-${o}`))}):b("div",{className:"sug-list-wrap",children:s.map((o,a)=>b("button",{onClick:()=>t(o),className:"sug-list-btn",style:{animationDelay:`${a*.05}s`},children:o},`list-${a}-${o}`))})},G=Se;import{jsx as y,jsxs as X}from"react/jsx-runtime";var Me=({isExpanded:e,setIsExpanded:t,messages:n,scrollRef:r,sendMessage:s,strapiUrl:c,resolvedRegistry:i,input:p,setInput:h,isLoading:o,title:a,theming:d})=>{let v=M(`chat-window ${e?"chat-window-open":"chat-window-closed"}`,d?.container);return X("div",{className:v,style:d?.containerStyle,children:[y("div",{className:"chat-window-header",children:y(O,{title:a,onClose:()=>t(!1),theming:d,strapiUrl:c})}),y(q,{messages:n,scrollRef:r,resolvedRegistry:i,theming:d}),X("div",{className:"chat-window-footer",children:[y("div",{className:"chat-window-suggestions",children:y(G,{onSelectQuestion:s,strapiUrl:c,variant:"floating",theming:d})}),y(W,{input:p,onInputChange:h,onSendMessage:s,isLoading:o,theming:d}),y("div",{className:"chat-window-powered",children:y("span",{className:"chat-powered-text",children:"Talk to a human \xB7 Privacy policy"})})]})]})},Z=Me;import{jsx as te,jsxs as Ee}from"react/jsx-runtime";var Be=({strapiUrl:e,cardRegistry:t,theme:n,title:r,streamSpeed:s})=>{let[c,i]=P([]),[p,h]=P(""),[o,a]=P(!1),[d,v]=P(!1),D=ee(null),[re,oe]=P([]),ie=ee(null),ne={"--cb-primary":n?.primaryColor||"#2999d6","--cb-secondary":n?.secondaryColor||"#179fa3","--cb-accent":n?.accentColor||n?.secondaryColor||"#179fa3"};return _(()=>{t.length>0&&oe(t)},[t]),_(()=>()=>D.current?.abort(),[]),Ee("div",{className:"chatbot-container",style:ne,children:[te(K,{isExpanded:d,onOpen:()=>v(!0),theming:n}),te(Z,{isExpanded:d,setIsExpanded:v,messages:c,scrollRef:ie,sendMessage:async se=>{let j=se||p;if(!j.trim())return;D.current?.abort(),D.current=new AbortController,v(!0),h(""),a(!0);let de={role:"user",content:j,id:Date.now()},N=Date.now()+1;i(I=>[...I,de,{role:"assistant",content:"",items:null,loading:!0,id:N}]);try{let I=await fetch(`${e}/api/faq-ai-bot/ask`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({question:j,history:c.slice(-4).map(m=>({role:m.role,content:m.content}))}),signal:D.current.signal});if(!I.ok)throw new Error("Network response was not ok");let F=I.body?.getReader(),B=new TextDecoder;if(!F)throw new Error("No reader available");let E=[],Q=!1,le=(async()=>{for(;!Q||E.length>0;)if(E.length>0){let m=E.shift();if(m?.type==="text")if(s&&s>0)for(let l of m.content)i(f=>f.map(g=>g.id===N?{...g,content:g.content+l}:g)),await new Promise(f=>setTimeout(f,s));else i(l=>l.map(f=>f.id===N?{...f,content:f.content+m.content}:f));else if(m?.type==="card")try{let l=m.data;i(f=>f.map(g=>g.id===N?{...g,items:{items:l.items,schema:l.schema,collection:l.title,title:l.title,cardStyle:l.cardStyle}}:g))}catch(l){console.error("Error processing card data:",l)}}else await new Promise(m=>setTimeout(m,20));a(!1),i(m=>m.map(l=>l.id===N?{...l,loading:!1}:l))})(),H="";for(;;){let{value:m,done:l}=await F.read();if(l)break;let f=B.decode(m,{stream:!0});H+=f;let g=H.split(`
|
|
1
|
+
"use client";import{useState as P,useEffect as _,useRef as ee}from"react";import{jsx as $,jsxs as he}from"react/jsx-runtime";var pe=({isExpanded:e,onOpen:t,theming:n})=>$("div",{onClick:t,className:`chat-floating-btn ${e?"chat-btn-hidden":"chat-btn-visible"}`,children:$("div",{className:"chat-btn-border seamless-border",children:he("div",{className:"chat-btn-inner",children:[$("div",{className:"chat-btn-gradient",style:{background:n?.showGradient===!1?"var(--cb-primary)":"linear-gradient(135deg, var(--cb-primary)0%, var(--cb-secondary)100%)"}}),$("img",{src:"/Sparkles.svg",alt:"style icon",width:30,height:30,className:"chat-btn-icon"})]})})}),K=pe;import{useEffect as ge,useState as ue}from"react";import{jsx as w,jsxs as fe}from"react/jsx-runtime";var A={MessageCircle:({size:e=24,className:t=""})=>w("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:t,children:w("path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z"})}),Bot:({size:e=24,className:t=""})=>w("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:t,children:w("path",{d:"M12 8V4m8 4V4M4 8V4M2 11h20m-1 0v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V11m5 5v2m8-2v2"})}),X:({size:e=24,className:t=""})=>w("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:t,children:w("path",{d:"M18 6 6 18M6 6l12 12"})}),Send:({size:e=24,className:t=""})=>fe("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:t,children:[w("path",{d:"m22 2-7 20-4-9-9-4Z"}),w("path",{d:"M22 2 11 13"})]})};var M=(e,t)=>t?`${e} ${t}`:e;import{jsx as k,jsxs as L}from"react/jsx-runtime";var be=({onClose:e,title:t,theming:n,strapiUrl:r})=>{let[s,c]=ue(null);ge(()=>{if(!r)return;(async()=>{try{let a=await(await fetch(`${r}/api/faq-ai-bot/suggestion-and-logo`)).json();a?.logoUrl&&c(`${r}${a.logoUrl}`)}catch(o){console.error("Failed to fetch logo",o)}})()},[r]);let p=M("chat-header",n?.header);return L("header",{className:p,style:n?.headerStyle,children:[L("div",{className:"chat-header-left",children:[k("div",{className:"chat-header-logo-placeholder",children:"A"}),L("div",{className:"chat-header-title-wrap",children:[L("div",{className:"chat-header-title-row",children:[k("span",{className:"chat-header-title",children:"Aria"}),k("span",{className:"chat-header-badge",children:t||"Assistant"})]}),L("span",{className:"chat-header-status",children:[k("span",{className:"chat-header-status-dot"}),"Online \xB7 usually replies instantly"]})]})]}),k("div",{className:"chat-header-actions",children:k("button",{onClick:e,className:"chat-header-close-btn","aria-label":"Close chat",children:k(A.X,{size:20})})})]})},O=be;import{useRef as we,useEffect as xe}from"react";import{jsx as x,jsxs as ve}from"react/jsx-runtime";var ye=({input:e,onInputChange:t,onSendMessage:n,isLoading:r,theming:s})=>{let c=s?.showGradient===!1?"var(--cb-primary)":"linear-gradient(135deg, var(--cb-primary) 0%, var(--cb-secondary) 100%)",i=we(null),h=M("chat-input-container",s?.input);xe(()=>{r||i.current?.focus()},[r]);let o=d=>{d.key==="Enter"&&!d.nativeEvent.isComposing&&a()},a=()=>{e.trim()&&!r&&n()};return x("div",{className:"chat-input-outer",children:x("div",{className:"chat-input-wrap",children:ve("div",{className:"chat-input-row",children:[x("div",{className:h,style:{...s?.inputStyle,borderRadius:"9999px"},children:x("div",{className:"chat-input-inner",children:x("input",{ref:i,type:"text",className:"chat-input-field",placeholder:r?"AI is thinking...":"Type a message...",value:e,onChange:d=>t(d.target.value),onKeyDown:o,disabled:r,"aria-label":"User message"})})}),x("button",{onClick:a,disabled:r||!e.trim(),style:{background:c},className:"chat-input-send-btn","aria-label":"Send message",children:r?x("div",{className:"chat-input-spinner"}):x(A.Send,{className:"chat-input-send-icon"})})]})})})},W=ye;import{useEffect as Ce}from"react";import{jsx as u,jsxs as C}from"react/jsx-runtime";var ke=({message:e,cardRegistry:t,themeStyles:n,theming:r})=>{let s=new Date().toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",hour12:!0}).toLowerCase(),c=h=>{let o=h?.__collectionUid?.split(".").pop()?.toLowerCase();return t.find(a=>a.id===o)||t.find(a=>a.id==="default")},i=e.record?c(e.record)?.component:null,p={background:r?.showGradient===!1?"#3B82F6":"linear-gradient(135deg, #1D4ED8 0%, #3B82F6 100%)"};if(e.items?.items?.length){let h=e.items.cardStyle?.toLowerCase()||e.items.collection?.toLowerCase()||e.items.title?.toLowerCase(),a=t.find(d=>d.id===h)?.component;return C("div",{className:"mb-card-container",children:[e.content&&u("div",{className:"mb-card-content",children:e.content}),a&&e.items.items.map((d,v)=>u(a,{items:d,style:n},v))]})}return C("div",{className:`mb-row ${e.role==="user"?"mb-row-user":"mb-row-assistant"}`,children:[i&&e.record?u("div",{className:"mb-card-wrapper",children:u(i,{record:e.record,style:n})}):u("div",{style:e.role==="user"?{...p,...r?.userBubbleStyle}:{},className:`mb-bubble ${e.role==="user"?"mb-bubble-user":"mb-bubble-assistant"}`,children:e.loading&&!e.content?C("div",{className:"mb-typing",children:[u("span",{className:"mb-dot mb-dot-1"}),u("span",{className:"mb-dot mb-dot-2"}),u("span",{className:"mb-dot mb-dot-3"})]}):e.content}),e.role==="assistant"&&!i&&C("div",{className:"mb-assistant-meta",children:[u("span",{className:"mb-assistant-avatar",style:{background:r?.showGradient===!1?"#3B82F6":"linear-gradient(135deg, var(--cb-primary), var(--cb-secondary))"},children:"A"}),C("span",{className:"mb-assistant-time",children:[s," "]})]}),e.role==="user"&&!i&&C("div",{className:"mb-user-meta",children:[C("span",{className:"mb-user-time",children:[s," "]}),u("span",{className:"mb-user-tick","aria-label":"Delivered",children:"\u2713\u2713"})]})]})},Y=ke;import{jsx as z,jsxs as U}from"react/jsx-runtime";var Ne=({messages:e,scrollRef:t,resolvedRegistry:n,theming:r})=>{let s=r?.welcomeDescription||"Hi! I'm Aria, your Harbour Air travel assistant. I'm here to help you book flights, check fees, understand baggage rules, and anything else you need.",c=new Date().toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",hour12:!0}).toLowerCase();return Ce(()=>{let i=t.current;i&&i.scrollTo({top:i.scrollHeight,behavior:"auto"})},[e,t]),U("div",{ref:t,className:"chat-messages-container",style:{scrollbarWidth:"none",msOverflowStyle:"none"},children:[e.length===0&&z("div",{className:"chat-welcome",children:U("div",{className:"chat-welcome-message",children:[z("p",{className:"chat-welcome-subtitle",children:s}),U("div",{className:"chat-welcome-meta",children:[z("span",{className:"chat-welcome-avatar",style:{background:r?.showGradient===!1?"#3B82F6":"linear-gradient(135deg, var(--cb-primary), var(--cb-secondary))"},children:"A"}),z("span",{className:"chat-welcome-time",children:c})]})]})}),e.map(i=>z(Y,{message:i,cardRegistry:n,theming:r},i.id))]})},q=Ne;import{useState as J,useEffect as Ie}from"react";import{jsx as b,jsxs as Re}from"react/jsx-runtime";var Se=({strapiUrl:e,onSelectQuestion:t,variant:n,theming:r})=>{let[s,c]=J([]),[i,p]=J(!0);Ie(()=>{let o=new AbortController;return p(!0),fetch(`${e}/api/faq-ai-bot/suggestion-and-logo`,{signal:o.signal}).then(a=>a.json()).then(a=>{c(a.suggestedQuestions||[]),p(!1)}).catch(a=>{a.name!=="AbortError"&&(console.error("Suggestions fetch failed",a),p(!1))}),()=>o.abort()},[e]);let h=()=>n==="floating"?Re("div",{className:"sug-skeleton-float",children:[[1,2].map(o=>b("div",{className:"sug-skeleton-item",style:{backgroundColor:r?.primaryColor?`${r.primaryColor}`:"hsla(178, 100%, 51%, 0.05)",transform:o%2===0?"rotate(1deg)":"rotate(-1deg)"}},o)),b("div",{className:"sug-skeleton-more"})]}):b("div",{className:"sug-skeleton-list",children:[1,2,3].map(o=>b("div",{className:"sug-skeleton-chip"},o))});return i&&s.length===0?b(h,{}):n==="floating"?b("div",{className:"sug-float-wrap",children:s.map((o,a)=>b("button",{onClick:()=>t(o),className:"sug-float-btn",style:{borderColor:"#bfdbfe",animationDelay:`${a*.1}s`},children:b("span",{className:"sug-float-text",children:o})},`float-${a}-${o}`))}):b("div",{className:"sug-list-wrap",children:s.map((o,a)=>b("button",{onClick:()=>t(o),className:"sug-list-btn",style:{animationDelay:`${a*.05}s`},children:o},`list-${a}-${o}`))})},G=Se;import{jsx as y,jsxs as X}from"react/jsx-runtime";var Me=({isExpanded:e,setIsExpanded:t,messages:n,scrollRef:r,sendMessage:s,strapiUrl:c,resolvedRegistry:i,input:p,setInput:h,isLoading:o,title:a,theming:d})=>{let v=M(`chat-window ${e?"chat-window-open":"chat-window-closed"}`,d?.container);return X("div",{className:v,style:d?.containerStyle,children:[y("div",{className:"chat-window-header",children:y(O,{title:a,onClose:()=>t(!1),theming:d,strapiUrl:c})}),y(q,{messages:n,scrollRef:r,resolvedRegistry:i,theming:d}),X("div",{className:"chat-window-footer",children:[y("div",{className:"chat-window-suggestions",children:y(G,{onSelectQuestion:s,strapiUrl:c,variant:"floating",theming:d})}),y(W,{input:p,onInputChange:h,onSendMessage:s,isLoading:o,theming:d}),y("div",{className:"chat-window-powered",children:y("span",{className:"chat-powered-text",children:"Talk to a human \xB7 Privacy policy"})})]})]})},Z=Me;import{jsx as te,jsxs as Ee}from"react/jsx-runtime";var Be=({strapiUrl:e,cardRegistry:t,theme:n,title:r,streamSpeed:s})=>{let[c,i]=P([]),[p,h]=P(""),[o,a]=P(!1),[d,v]=P(!1),D=ee(null),[re,oe]=P([]),ie=ee(null),ne={"--cb-primary":n?.primaryColor||"#2999d6","--cb-secondary":n?.secondaryColor||"#179fa3","--cb-accent":n?.accentColor||n?.secondaryColor||"#179fa3"};return _(()=>{t.length>0&&oe(t)},[t]),_(()=>()=>D.current?.abort(),[]),Ee("div",{className:"chatbot-container",style:ne,children:[te(K,{isExpanded:d,onOpen:()=>v(!0),theming:n}),te(Z,{isExpanded:d,setIsExpanded:v,messages:c,scrollRef:ie,sendMessage:async se=>{let j=se||p;if(!j.trim())return;D.current?.abort(),D.current=new AbortController,v(!0),h(""),a(!0);let de={role:"user",content:j,id:Date.now()},N=Date.now()+1;i(I=>[...I,de,{role:"assistant",content:"",items:null,loading:!0,id:N}]);try{let I=await fetch(`${e}/api/faq-ai-bot/ask`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({question:j,history:c.slice(-4).map(m=>({role:m.role,content:m.content}))}),signal:D.current.signal});if(!I.ok)throw new Error("Network response was not ok");let F=I.body?.getReader(),B=new TextDecoder;if(!F)throw new Error("No reader available");let E=[],Q=!1,le=(async()=>{for(;!Q||E.length>0;)if(E.length>0){let m=E.shift();if(m?.type==="text")if(s&&s>0)for(let l of m.content)i(f=>f.map(g=>g.id===N?{...g,content:g.content+l}:g)),await new Promise(f=>setTimeout(f,s));else i(l=>l.map(f=>f.id===N?{...f,content:f.content+m.content}:f));else if(m?.type==="card")try{let l=m.data;i(f=>f.map(g=>g.id===N?{...g,items:{items:l.items,schema:l.schema,collection:l.title,title:l.title,cardStyle:l.cardStyle}}:g))}catch(l){console.error("Error processing card data:",l)}}else await new Promise(m=>setTimeout(m,20));a(!1),i(m=>m.map(l=>l.id===N?{...l,loading:!1}:l))})(),H="";for(;;){let{value:m,done:l}=await F.read();if(l)break;let f=B.decode(m,{stream:!0});H+=f;let g=H.split(`
|
|
2
2
|
|
|
3
3
|
`);H=g.pop()||"";for(let ce of g){let me=ce.split(`
|
|
4
4
|
`),V="message",T="";for(let S of me)if(S.startsWith("event:"))V=S.slice(6).trim();else if(S.startsWith("data:")){let R=S.slice(5);if(R.startsWith(" ")&&(R=R.slice(1)),R.trim()==="[DONE]"||R.trim()==="[Done]")continue;T+=(T?`
|