@nexlylab/widget 1.32.16 → 1.32.17
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/INSTALL.txt +1 -1
- package/dist/runtime/{1.32.16/chunks/ClickToLoadEmbed-CVZbpoTT-CKUzZ7gL.js → 1.32.17/chunks/ClickToLoadEmbed-D9eMaBG8-r9dN9klo.js} +2 -2
- package/dist/runtime/{1.32.16/chunks/PanelInfoVideo-BKq2v0QM-BrU-Qlul.js → 1.32.17/chunks/PanelInfoVideo-DMU0-9Az-BrU-Qlul.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/assistant-link-components-DkuhHIF9-CPkAMFv6.js → 1.32.17/chunks/assistant-link-components-D0uKk8Hv-xEDu0ls0.js} +2 -2
- package/dist/runtime/{1.32.16/chunks/assistant-link-policy-CS93s-vA-Cc-yj-a-.js → 1.32.17/chunks/assistant-link-policy-CogLpq-3-Cc-yj-a-.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/block-rating-DGpoz2o3-CoiP5C2K.js → 1.32.17/chunks/block-rating-BgOeTm52-CoiP5C2K.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/external-url-BzUbjdMo-CJQjg_od.js → 1.32.17/chunks/external-url-ninK7gY9-CJQjg_od.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-BJClDxSC-D6wzHiS0.js → 1.32.17/chunks/index-1JK_DoDz-D6wzHiS0.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-Cdmdsj1E-DP0QKkgf.js → 1.32.17/chunks/index-B0-9mIbB-DP0QKkgf.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-BIMK2_g0-ZRnEJoQe.js → 1.32.17/chunks/index-B97ASd4H-ZRnEJoQe.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-CISMnUXx-Aqz1AnQ5.js → 1.32.17/chunks/index-BDhTixUR-Aqz1AnQ5.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-Cxwd1OKy-C_0Ll4qr.js → 1.32.17/chunks/index-BJxJr5j5-C_0Ll4qr.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-MAmLiP1_-Dsa9X9U7.js → 1.32.17/chunks/index-BWMbr4oS-Dsa9X9U7.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-BLT1bBjC-6c5Ar61I.js → 1.32.17/chunks/index-Ba5nbqA8-B620AdXN.js} +2 -2
- package/dist/runtime/{1.32.16/chunks/index-BW-8QNI--BqZmEVev.js → 1.32.17/chunks/index-BlGeDG8W-CoI3p0S7.js} +2 -2
- package/dist/runtime/{1.32.16/chunks/index-BCtNBIxP-CcsFQ7Dx.js → 1.32.17/chunks/index-Bl_8GpS0-CahNhEcx.js} +2 -2
- package/dist/runtime/{1.32.16/chunks/index-DhYv8bbj-DGasnsaZ.js → 1.32.17/chunks/index-BsUIWTU6-BQ7DWJhg.js} +2 -2
- package/dist/runtime/{1.32.16/chunks/index-fotohjEP-BLBDoJCM.js → 1.32.17/chunks/index-ByEsnceF-CSQQTbsg.js} +2 -2
- package/dist/runtime/{1.32.16/chunks/index-CogJkGmU-C3bBvEcm.js → 1.32.17/chunks/index-C5olj-Fr-C3bBvEcm.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-CUGV3nk2-DAdxCQyi.js → 1.32.17/chunks/index-CHUW1nlj-DAdxCQyi.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-CbGT4d5Q-DUgMllqN.js → 1.32.17/chunks/index-CIFQrVkq-DUgMllqN.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-CIe60p_E-pkywvGDF.js → 1.32.17/chunks/index-CM0iRJSw-pkywvGDF.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-D-uANagm-DBhSkJ7i.js → 1.32.17/chunks/index-CPjLHywY-DBhSkJ7i.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-DchTua3m-BpgnWlB8.js → 1.32.17/chunks/index-CSDD7Z6C-BpgnWlB8.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-BoVToqY3-H31PHMqm.js → 1.32.17/chunks/index-C_zmepmr-H31PHMqm.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-SgPuWMUv-QeFj7CR9.js → 1.32.17/chunks/index-CaHbIY6I-QeFj7CR9.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-DHdp5nGO-bdo5pwX-.js → 1.32.17/chunks/index-Ce0ahORn-bdo5pwX-.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-Dfcx_9km-C9wFr7fa.js → 1.32.17/chunks/index-CpCgmp7C-C9wFr7fa.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-tAu73-sK-DQBGsPwB.js → 1.32.17/chunks/index-CtNAXlUH-DQBGsPwB.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-CIgDHLEK-I68tb-d3.js → 1.32.17/chunks/index-D0qsMexH-I68tb-d3.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-C5MpFJwF-BLxOZxZv.js → 1.32.17/chunks/index-D30-Ox5Z-BLxOZxZv.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-Chn4ATvZ-CSI6_0RJ.js → 1.32.17/chunks/index-D3OBLy0s-k8E4HOBM.js} +2 -2
- package/dist/runtime/{1.32.16/chunks/index-ChL-bSAN-BcW8HKb8.js → 1.32.17/chunks/index-D3fwWbIM-BcW8HKb8.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-PSL_6OT1-_M0CWPEY.js → 1.32.17/chunks/index-D5EHdeyl-_M0CWPEY.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-Dtiss_wT-CLkn_6EY.js → 1.32.17/chunks/index-D6YQ4lFv-pbKZ0WGs.js} +2 -2
- package/dist/runtime/{1.32.16/chunks/index-BncytMlP-VhJcCfAC.js → 1.32.17/chunks/index-DAJM_cb9-VhJcCfAC.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-DdI8qMqt-Dr1V6OGz.js → 1.32.17/chunks/index-DAai_PkG-Dr1V6OGz.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-pQ7fPgLl-JdphAk2-.js → 1.32.17/chunks/index-DDHI4Kxr-DrVjDDba.js} +2 -2
- package/dist/runtime/{1.32.16/chunks/index-DG-KS4AB-3B-eE3K7.js → 1.32.17/chunks/index-DIMi29lU-3B-eE3K7.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-Cmt7uZiE-R_xuAEQV.js → 1.32.17/chunks/index-DMM00SC5-R_xuAEQV.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-DO5eKOOB-Dp5AxBD4.js → 1.32.17/chunks/index-DnDMirl9-Dp5AxBD4.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-svAzoy0Y-DbuSZfeK.js → 1.32.17/chunks/index-DsQ3ssZW-DbuSZfeK.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-Or6sA2eF-CiRb-0NX.js → 1.32.17/chunks/index-Dwtd4id8-CiRb-0NX.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-CsoMgZU8-C1BzRUwZ.js → 1.32.17/chunks/index-DzCfV77F-C1BzRUwZ.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-6HKNPucI-Dm9kbc85.js → 1.32.17/chunks/index-DzHo_iNR-Dm9kbc85.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-DNwWHPWp-W1lJrIDD.js → 1.32.17/chunks/index-Wza_7CGb-W1lJrIDD.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-DL04XhIK-TEMHje2B.js → 1.32.17/chunks/index-_R8QyLD7-TEMHje2B.js} +1 -1
- package/dist/runtime/{1.32.16/chunks/index-Cf4eQF9g-mnUzfS1e.js → 1.32.17/chunks/index-tapacGlG--YMQ21rc.js} +2 -2
- package/dist/runtime/{1.32.16/chunks/index-Dc8zecP4-oy07dUaV.js → 1.32.17/chunks/index-zmuItIIf-oy07dUaV.js} +1 -1
- package/dist/runtime/1.32.17/nexly.js +61 -0
- package/dist/v1.js +1 -1
- package/package.json +1 -1
- package/dist/runtime/1.32.16/nexly.js +0 -61
- /package/dist/runtime/{1.32.16 → 1.32.17}/chunks/PanelVideoOverlay-BY__oBYV-B8OPC1xh.js +0 -0
- /package/dist/runtime/{1.32.16 → 1.32.17}/chunks/_commonjsHelpers-C6fGbg64-BC8KDfbh.js +0 -0
- /package/dist/runtime/{1.32.16 → 1.32.17}/chunks/accent-legibility-BJF2VO5n-CDPQ7suO.js +0 -0
- /package/dist/runtime/{1.32.16 → 1.32.17}/chunks/allowed-elements-BXnLJV1S-C-_lr2zm.js +0 -0
- /package/dist/runtime/{1.32.16 → 1.32.17}/chunks/block-helpers-Cg_zAqG6-DnN2COvk.js +0 -0
- /package/dist/runtime/{1.32.16 → 1.32.17}/chunks/index-BPDIV1BN-DINkyYvc.js +0 -0
- /package/dist/runtime/{1.32.16 → 1.32.17}/chunks/index-BcsmWDTX-Dw9WA5Ac.js +0 -0
- /package/dist/runtime/{1.32.16 → 1.32.17}/chunks/index-C262wwK4-DpyhuXqd.js +0 -0
- /package/dist/runtime/{1.32.16 → 1.32.17}/chunks/index-DMQkz1bV-BuMYksln.js +0 -0
- /package/dist/runtime/{1.32.16 → 1.32.17}/chunks/index-DZADUAKv-DPfvWVuj.js +0 -0
- /package/dist/runtime/{1.32.16 → 1.32.17}/chunks/index.modern-CioVZ357-BA5NTOmY.js +0 -0
- /package/dist/runtime/{1.32.16 → 1.32.17}/chunks/inert-assistant-components-B6Cx9pG5-DWb6n3Yq.js +0 -0
- /package/dist/runtime/{1.32.16 → 1.32.17}/chunks/use-deferred-rating-XlgCUwcY-DDVOwURi.js +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import{r as n,j as s,Q as H}from"../nexly.js";const L={slug:"support-session-nav",name:"Support Session Navigator",version:"1.0.0",category:"interactive",configSchema:{},defaultConfig:{},sizing:{minWidth:200,preferredHeight:"fill",scrollable:!0},supportedPlacements:["sidebar","main"],events:{emits:[{name:"support-chat:select-session",description:"User selected a past support session"}]}};function M(a,o){const u=Date.now()-new Date(a).getTime(),r=Math.floor(u/6e4);if(r<1)return o("time.just_now");if(r<60)return o("time.minutes_ago",{count:r});const i=Math.floor(r/60);return i<24?o("time.hours_ago",{count:i}):o("time.days_ago",{count:Math.floor(i/24)})}function T({actions:a,baseUrl:o,productId:u,i18n:r,supportSessionId:i,auth:k,externalContext:g}){const t=r?.t??(e=>e),m=k?.jwt,w=g?.showTicketsTab??!1,[v,l]=n.useState(!1),[x,y]=n.useState([]),[p,b]=n.useState(!1),[f,j]=n.useState(null),[d,h]=n.useState(i??null);n.useEffect(()=>{h(i??null)},[i]);const _=n.useCallback(async()=>{b(!0),j(null);try{const e=await fetch(`${o}/api/support-chat/sessions?productId=${encodeURIComponent(u||"")}`,{headers:{...m?{Authorization:`Bearer ${m}`}:{}},credentials:"include"});if(!e.ok)throw new Error(`HTTP ${e.status}`);const c=await e.json();if(!c.success||!c.data)throw new Error("Invalid response");y(c.data.sessions)}catch{j(t("support_session_nav.load_error"))}finally{b(!1)}},[o,m,u,t]);n.useEffect(()=>a.on("support-chat:session",e=>{const{sessionId:c}=e;c&&h(c),v&&_()}),[a,_,v]),n.useEffect(()=>a.on("support-chat:showHistory",()=>{l(!0),_()}),[a,_]),n.useEffect(()=>a.on("support-chat:clearHistory",()=>{l(!1)}),[a]);const C=n.useCallback(e=>{e!==d&&(h(e),a.emit("support-chat:select-session",{sessionId:e})),l(!1)},[a,d]),N=n.useCallback(()=>{a.emit("support-chat:clearHistory",void 0),h(null),l(!1)},[a]),S=n.useCallback(()=>{l(!1)},[]),E=n.useCallback(()=>{a.emit("support-chat:showTickets",void 0),l(!1)},[a]);return v?s.jsxs(H,{blockType:"support-session-nav",children:[s.jsxs("div",{className:"es-ssn__header",children:[s.jsx("span",{className:"es-ssn__header-title",children:t("support_session_nav.title")}),s.jsxs("div",{className:"es-ssn__header-actions",children:[s.jsx("button",{type:"button",className:"es-ssn__action-btn","aria-label":t("support_chat.new_conversation_button"),title:t("support_chat.new_conversation_button"),onClick:N,children:s.jsxs("svg",{width:18,height:18,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[s.jsx("path",{d:"M12 5H5a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7"}),s.jsx("path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z"})]})}),s.jsx("button",{type:"button",className:"es-ssn__action-btn es-ssn__action-btn--active","aria-label":t("support_chat.history_button"),title:t("support_chat.history_button"),"aria-pressed":"true",onClick:S,children:s.jsxs("svg",{width:16,height:16,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[s.jsx("circle",{cx:"12",cy:"12",r:"10"}),s.jsx("polyline",{points:"12 6 12 12 16 14"})]})}),w&&s.jsx("button",{type:"button",className:"es-ssn__action-btn","aria-label":t("support_chat.tickets_tab_button"),title:t("support_chat.tickets_tab_button"),onClick:E,children:s.jsxs("svg",{width:16,height:16,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[s.jsx("path",{d:"M2 9a3 3 0 1 1 0 6v2a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-2a3 3 0 1 1 0-6V7a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z"}),s.jsx("path",{d:"m9 12 2 2 4-4"})]})})]})]}),s.jsx("div",{className:"es-block__body",children:s.jsxs("div",{className:"es-ssn__list",role:"list","aria-label":t("support_session_nav.list_aria"),children:[p&&s.jsx("div",{className:"es-ssn__loading",role:"status",children:t("support_session_nav.loading")}),f&&!p&&s.jsx("div",{className:"es-ssn__error",role:"alert",children:f}),!p&&!f&&x.length===0&&s.jsx("div",{className:"es-ssn__empty",children:t("support_session_nav.empty")}),!p&&x.map(e=>s.jsxs("button",{role:"listitem",type:"button",className:`es-ssn__item${e.id===d?" es-ssn__item--active":""}`,onClick:()=>C(e.id),"aria-current":e.id===d?"true":void 0,children:[s.jsx("div",{className:"es-ssn__item-preview",children:e.firstUserMessage??t("support_session_nav.no_preview")}),s.jsxs("div",{className:"es-ssn__item-meta",children:[s.jsx("span",{className:`es-ssn__item-status es-ssn__item-status--${e.status}`,"aria-label":e.status,children:e.status}),s.jsx("span",{children:M(e.updatedAt,t)}),e.messageCount>0&&s.jsx("span",{children:t("support_session_nav.message_count",{count:e.messageCount})})]})]},e.id))]})})]}):null}export{T as Component,L as manifest};
|
|
2
|
-
//# sourceMappingURL=index-
|
|
2
|
+
//# sourceMappingURL=index-DsQ3ssZW-DbuSZfeK.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import{r as p,j as e,Q as r}from"../nexly.js";const N={slug:"event-list",name:"Event List",version:"1.0.0",category:"content",requiredService:"event-scraper",configSchema:{properties:{maxEvents:{type:"number",default:20},freeOnly:{type:"boolean",default:!1}}},defaultConfig:{maxEvents:20,freeOnly:!1},dataContract:{serviceSlug:"event-scraper",inputSchema:{type:"object",properties:{events:{type:"array",items:{type:"object",properties:{id:{type:"string"},title:{type:"string"},date:{type:"string"},location:{type:"string"},price:{type:"number"},isFree:{type:"boolean"},url:{type:"string"},imageUrl:{type:"string"}}}},total:{type:"number"}},required:["events"]},previewDataOverride:{events:[{id:"evt-1",title:"Tech Startup Networking Night",date:"2026-04-10T18:00:00Z",location:"Seoul, Gangnam-gu",price:0,isFree:!0,url:"https://onoffmix.com/event/1",imageUrl:""},{id:"evt-2",title:"AI & Machine Learning Summit",date:"2026-04-15T09:00:00Z",location:"Seoul, Mapo-gu",price:25e3,isFree:!1,url:"https://onoffmix.com/event/2",imageUrl:""},{id:"evt-3",title:"Web3 Developer Workshop",date:"2026-04-20T14:00:00Z",location:"Seoul, Songpa-gu",price:0,isFree:!0,url:"https://onoffmix.com/event/3",imageUrl:""}],total:3}},fields:[{id:"maxEvents",type:"range",label:"Max events to show",default:20,min:1,max:100,step:1,group:"Content"},{id:"freeOnly",type:"toggle",label:"Show free events only",default:!1,group:"Filters"}],events:{emits:[{name:"events:eventSelected",description:"User clicked on an event"},{name:"events:filterChanged",description:"User changed the event filter"}],listens:[{name:"events:refresh",description:"Reload events from scraper"}]},sizing:{minWidth:240,preferredHeight:"auto",scrollable:!1},supportedPlacements:["main"]};function j(l,s){const n=new Date(l);return isNaN(n.getTime())?l:new Intl.DateTimeFormat(s,{month:"short",day:"numeric",year:"numeric",hour:"2-digit",minute:"2-digit"}).format(n)}function c(){return e.jsxs("li",{className:"es-evlist__skeleton","aria-hidden":"true",children:[e.jsx("div",{className:"es-evlist__skeleton-line es-evlist__skeleton-line--title"}),e.jsx("div",{className:"es-evlist__skeleton-line es-evlist__skeleton-line--meta"}),e.jsx("div",{className:"es-evlist__skeleton-line es-evlist__skeleton-line--short"})]})}function k({data:l,actions:s,i18n:n}){const i=n?.t??(t=>t),_=n?.currentLanguage??"en",d=l.events??[],u=l.loading===!0,h=l.error,[g,x]=p.useState(null);p.useEffect(()=>{const t=s.on("events:markerHighlight",o=>{x(o?.id??null)});return()=>t()},[s]);const y=t=>{t&&s.emit("events:hover",{id:t})},f=()=>{s.emit("events:hover",{id:null})},v=t=>{t.id&&s.emit("events:eventSelected",{id:t.id,event:t})};return u?e.jsx(r,{blockType:"event-list",children:e.jsx("div",{className:"es-block__body",children:e.jsxs("ul",{className:"es-evlist__items","aria-label":i("event_list.loading"),"aria-busy":"true",children:[e.jsx(c,{}),e.jsx(c,{}),e.jsx(c,{})]})})}):h?e.jsx(r,{blockType:"event-list",children:e.jsx("div",{className:"es-block__body",children:e.jsxs("div",{className:"es-evlist__error",role:"alert",children:[e.jsx("span",{className:"es-evlist__error-icon","aria-hidden":"true",children:"⚠"}),e.jsx("span",{children:i("event_list.error")}),e.jsx("button",{type:"button",className:"es-evlist__retry",onClick:()=>s.refresh(),children:i("event_list.retry")})]})})}):d.length===0?e.jsx(r,{blockType:"event-list",children:e.jsx("div",{className:"es-block__body",children:e.jsxs("div",{className:"es-evlist__empty",children:[e.jsx("span",{className:"es-evlist__empty-icon","aria-hidden":"true",children:"📅"}),e.jsx("span",{className:"es-evlist__empty-text",children:i("event_list.empty")})]})})}):e.jsx(r,{blockType:"event-list",children:e.jsx("div",{className:"es-block__body",children:e.jsx("ul",{className:"es-evlist__items",role:"list","aria-label":i("event_list.aria_list_label"),children:d.map((t,o)=>{const m=t.id!=null&&t.id===g;return e.jsx("li",{className:`es-evlist__item${m?" es-evlist__item--highlighted":""}`,onMouseEnter:()=>y(t.id),onMouseLeave:f,onClick:()=>v(t),onKeyDown:a=>{(a.key==="Enter"||a.key===" ")&&(a.preventDefault(),v(t))},tabIndex:0,role:"button","aria-pressed":m,children:e.jsxs("div",{className:"es-evlist__item-content",children:[e.jsxs("div",{className:"es-evlist__header",children:[e.jsx("span",{className:"es-evlist__title",children:t.title}),t.isFree&&e.jsx("span",{className:"es-evlist__badge es-evlist__badge--free",children:i("event_list.free")})]}),e.jsxs("div",{className:"es-evlist__meta",children:[t.date&&e.jsxs("span",{className:"es-evlist__date","aria-label":t.date,children:[e.jsx("span",{className:"es-evlist__meta-icon","aria-hidden":"true",children:"🗓"}),j(t.date,_)]}),t.location&&e.jsxs("span",{className:"es-evlist__location",children:[e.jsx("span",{className:"es-evlist__meta-icon","aria-hidden":"true",children:"📍"}),t.location]})]}),t.url&&e.jsxs("a",{href:t.url,className:"es-evlist__cta",target:"_blank",rel:"noopener noreferrer","aria-label":`${i("event_list.view_details")}: ${t.title}`,onClick:a=>a.stopPropagation(),children:[i("event_list.view_details")," →"]})]})},t.id??o)})})})})}export{k as Component,N as manifest};
|
|
2
|
-
//# sourceMappingURL=index-
|
|
2
|
+
//# sourceMappingURL=index-Dwtd4id8-CiRb-0NX.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import{r as d,b as a,t as s}from"../nexly.js";const S={slug:"guest-auth",name:"Guest Authentication",version:"1.0.0",category:"content",requiredService:"",configSchema:{properties:{}},defaultConfig:{},sizing:{minWidth:0,preferredHeight:0,scrollable:!1},dataContract:{serviceSlug:"",inputSchema:{type:"object",properties:{fingerprint:{type:"string"}},required:["fingerprint"]},previewDataOverride:{fingerprint:"00000000-0000-4000-a000-000000000000"}},fields:[],events:{emits:[{name:"auth:guest",description:"Guest session created — carries { user: { id }, accessToken }"}],listens:[]},supportedPlacements:["main"]};function m(e){return`es-widget-guest-fp:${e}`}function y(){if(typeof crypto>"u")return null;if(typeof crypto.randomUUID=="function"){const[t]=s(()=>crypto.randomUUID());if(t)return t}if(typeof crypto.getRandomValues!="function")return null;const[e]=s(()=>crypto.getRandomValues(new Uint8Array(16)));if(!e)return null;e[6]=e[6]&15|64,e[8]=e[8]&63|128;const r=Array.from(e,t=>t.toString(16).padStart(2,"0")).join("");return`${r.slice(0,8)}-${r.slice(8,12)}-${r.slice(12,16)}-${r.slice(16,20)}-${r.slice(20)}`}function h(e,r){if(e)return e;if(typeof window>"u")return;const t=m(r),[i]=s(()=>window.localStorage.getItem(t));if(i)return i;const n=y();if(n)return s(()=>window.localStorage.setItem(t,n)),n}function $({baseUrl:e,actions:r,externalContext:t,productId:i}){const n=d.useRef(!1);return d.useEffect(()=>{if(n.current)return;const c=t?.apiKey;if(!c)return;const u=h(t?.fp,i);u&&(n.current=!0,(async()=>{const[o,f]=await a(fetch(`${e}/api/widget/auth/guest`,{method:"POST",headers:{"Content-Type":"application/json","X-API-Key":c},body:JSON.stringify({fingerprint:u})}));if(f||!o){console.error("[guest-auth] Error:",f);return}if(!o.ok){const[g]=await a(o.text());console.error("[guest-auth] Auth failed:",o.status,g??"");return}const[p]=await a(o.json()),l=p?.data?.user?.id;l&&r.emit("auth:guest",{user:{id:l},accessToken:p?.data?.accessToken})})())},[e,r,t,i]),null}export{$ as Component,S as manifest};
|
|
2
|
-
//# sourceMappingURL=index-
|
|
2
|
+
//# sourceMappingURL=index-DzCfV77F-C1BzRUwZ.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import{r as u,j as e,Q as c,o as j}from"../nexly.js";const f={slug:"recognition-milestone-hub",name:"Recognition & Milestone Hub",version:"1.0.0",category:"interactive",requiredService:"recognition-milestone-hub",configSchema:{properties:{mode:{type:"string",default:"basic"}}},defaultConfig:{mode:"basic"},sizing:{minWidth:280,preferredHeight:"auto",scrollable:!0},supportedPlacements:["main","sidebar"],dataContract:{serviceSlug:"recognition-milestone-hub",inputSchema:{type:"object",properties:{latestAchievement:{type:"object",properties:{badge:{type:"string"},label:{type:"string"},date:{type:"string"}}},nextMilestone:{type:"object",properties:{label:{type:"string"},progressPercent:{type:"number"}}},achievementHistory:{type:"array",items:{type:"object",properties:{badge:{type:"string"},label:{type:"string"},date:{type:"string"}}}},milestoneTimeline:{type:"array",items:{type:"object",properties:{label:{type:"string"},achieved:{type:"boolean"},date:{type:"string"}}}},celebrationMessage:{type:"string"},mode:{type:"string",enum:["basic","pro"]}}},previewDataOverride:{mode:"pro",latestAchievement:{badge:"🥇",label:"First Sale Achieved",date:"2026-04-04"},nextMilestone:{label:"Silver Rank",progressPercent:68},celebrationMessage:"Amazing work hitting your first sale! You're already 68% of the way to Silver Rank. Focus on 2 more referrals this week to cross the threshold.",achievementHistory:[{badge:"🥇",label:"First Sale Achieved",date:"2026-04-04"},{badge:"🚀",label:"Team of 3 Built",date:"2026-03-28"},{badge:"⭐",label:"Profile Completed",date:"2026-03-20"}],milestoneTimeline:[{label:"Bronze Rank",achieved:!0,date:"2026-03-20"},{label:"Silver Rank",achieved:!1},{label:"Gold Rank",achieved:!1},{label:"Platinum Rank",achieved:!1}]}},fields:[{id:"mode",type:"select",label:"Display mode",default:"basic",options:[{label:"Basic — badge + next milestone card",value:"basic"},{label:"Pro — full history, timeline & AI celebration",value:"pro"}],group:"Display"}],events:{emits:[{name:"rmh:achievementCopied",description:"User copied an achievement to clipboard"}],listens:[{name:"rmh:refresh",description:"Force refresh recognition data"}]}};function k({data:i,config:g,actions:y,metadata:x,i18n:v}){const a=v?.t??(s=>s),o=g.mode??i.mode??"basic",r=i.latestAchievement,l=i.nextMilestone,m=i.achievementHistory??[],h=i.milestoneTimeline??[],d=i.celebrationMessage,[p,_]=u.useState("idle");if(!r&&!i.error)return e.jsx(c,{blockType:"recognition-milestone-hub",children:e.jsx("div",{className:"es-block__body es-rmh__body",children:e.jsxs("div",{className:"es-rmh__hero",style:{opacity:.5},children:[e.jsx("div",{className:"es-rmh__badge-circle","aria-hidden":"true",children:"🏆"}),e.jsxs("div",{className:"es-rmh__hero-info",children:[e.jsx("span",{className:"es-rmh__hero-eyebrow",children:a("recognition.title")}),e.jsx("span",{className:"es-rmh__hero-label",style:{color:"var(--es-color-on-surface-muted, #4B5563)"},children:x?.dataQuality==="none"?a("recognition.signin_prompt"):a("recognition.empty")})]})]})})});if(i.error)return e.jsx(c,{blockType:"recognition-milestone-hub",error:j(i.error)});const n=Math.min(100,Math.max(0,l?.progressPercent??0));async function b(s){const t=`${s.badge} ${s.label} — ${s.date}`;try{await navigator.clipboard.writeText(t),_("copied"),y.emit("rmh:achievementCopied",{label:s.label}),setTimeout(()=>_("idle"),2e3)}catch{}}return e.jsx(c,{blockType:"recognition-milestone-hub",children:e.jsxs("div",{className:"es-block__body es-rmh__body",children:[r&&e.jsxs("div",{className:"es-rmh__hero",children:[e.jsx("div",{className:"es-rmh__badge-circle","aria-hidden":"true",children:r.badge}),e.jsxs("div",{className:"es-rmh__hero-info",children:[e.jsx("span",{className:"es-rmh__hero-eyebrow",children:a("recognition.latest_achievement")}),e.jsx("span",{className:"es-rmh__hero-label",children:r.label}),e.jsx("span",{className:"es-rmh__hero-date",children:r.date})]}),e.jsx("button",{className:`es-rmh__copy-btn${p==="copied"?" es-rmh__copy-btn--copied":""}`,onClick:()=>b(r),"aria-label":a("recognition.copy_achievement_aria"),title:a("common.copy_to_clipboard"),children:p==="copied"?"✓":"⎘"})]}),l&&e.jsxs("div",{className:"es-rmh__next-milestone",children:[e.jsxs("div",{className:"es-rmh__next-header",children:[e.jsx("span",{className:"es-rmh__next-eyebrow",children:a("recognition.next_milestone")}),e.jsxs("span",{className:"es-rmh__next-percent",children:[n,"%"]})]}),e.jsx("span",{className:"es-rmh__next-label",children:l.label}),e.jsx("div",{className:"es-rmh__progress-bar",role:"progressbar","aria-valuenow":n,"aria-valuemin":0,"aria-valuemax":100,"aria-label":a("recognition.milestone_progress_aria",{percent:n,label:l.label}),children:e.jsx("div",{className:"es-rmh__progress-fill",style:{width:`${n}%`}})})]}),o==="pro"&&d&&e.jsxs("div",{className:"es-rmh__celebration",children:[e.jsx("span",{className:"es-rmh__celebration-label",children:a("recognition.ai_coach_label")}),e.jsx("p",{className:"es-rmh__celebration-text",children:d})]}),o==="pro"&&m.length>0&&e.jsxs("div",{className:"es-rmh__section",children:[e.jsx("h3",{className:"es-rmh__section-title",children:a("recognition.achievement_history")}),e.jsx("ul",{className:"es-rmh__history-list",role:"list",children:m.map((s,t)=>e.jsxs("li",{className:"es-rmh__history-item",children:[e.jsx("span",{className:"es-rmh__history-badge","aria-hidden":"true",children:s.badge}),e.jsx("span",{className:"es-rmh__history-label",children:s.label}),e.jsx("span",{className:"es-rmh__history-date",children:s.date}),e.jsx("button",{className:"es-rmh__history-copy",onClick:()=>b(s),"aria-label":a("recognition.copy_item_aria",{label:s.label}),title:a("common.copy_to_clipboard"),children:"⎘"})]},t))})]}),o==="pro"&&h.length>0&&e.jsxs("div",{className:"es-rmh__section",children:[e.jsx("h3",{className:"es-rmh__section-title",children:a("recognition.milestone_timeline")}),e.jsx("ol",{className:"es-rmh__timeline","aria-label":a("recognition.milestone_progression_aria"),children:h.map((s,t)=>e.jsxs("li",{className:`es-rmh__timeline-item${s.achieved?" es-rmh__timeline-item--achieved":""}`,children:[e.jsx("span",{className:"es-rmh__timeline-dot","aria-hidden":"true",children:s.achieved?"✓":"○"}),e.jsx("span",{className:"es-rmh__timeline-label",children:s.label}),s.date&&e.jsx("span",{className:"es-rmh__timeline-date",children:s.date})]},t))})]})]})})}export{k as Component,f as manifest};
|
|
2
|
-
//# sourceMappingURL=index-
|
|
2
|
+
//# sourceMappingURL=index-DzHo_iNR-Dm9kbc85.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import{r as q,j as e,Q as m,o as w}from"../nexly.js";import{m as l}from"./block-helpers-Cg_zAqG6-DnN2COvk.js";const M={slug:"rank-advancement-roadmap",name:"Rank Advancement Roadmap",version:"1.0.0",category:"data",requiredService:"rank-advancement-roadmap",configSchema:{properties:{mode:{type:"string",default:"basic"},showAiTip:{type:"boolean",default:!0}}},defaultConfig:{mode:"basic",showAiTip:!0},sizing:{minWidth:280,preferredHeight:"auto",scrollable:!0},supportedPlacements:["main","sidebar"],dataContract:{serviceSlug:"rank-advancement-roadmap",inputSchema:{type:"object",properties:{currentRank:{type:"string"},nextRank:{type:"string"},progressPercent:{type:"number"},rankTree:{type:"array",items:{type:"object",properties:{rank:{type:"string"},requirements:{type:"array",items:{type:"string"}},achieved:{type:"boolean"}}}},aiTip:{type:"string"},mode:{type:"string",enum:["basic","pro"]}}},previewDataOverride:{currentRank:"Silver",nextRank:"Gold",progressPercent:62,mode:"pro",aiTip:"You're 38% away from Gold. Focus on recruiting 2 active distributors to your right leg — that's your fastest path to the next milestone.",rankTree:[{rank:"G-Miner",requirements:["Personal purchase: 50 pts"],achieved:!0},{rank:"Miner",requirements:["Personal purchase: 100 pts","Team volume: 500 pts"],achieved:!0},{rank:"Developer",requirements:["Personal purchase: 200 pts","Team volume: 1,500 pts"],achieved:!0},{rank:"Team Leader",requirements:["Personal purchase: 300 pts","Team volume: 5,000 pts","2 Developers in team"],achieved:!0},{rank:"Manager",requirements:["Personal purchase: 400 pts","Team volume: 15,000 pts","2 Team Leaders"],achieved:!1},{rank:"Senior Manager",requirements:["Personal purchase: 500 pts","Team volume: 40,000 pts","3 Managers"],achieved:!1},{rank:"Vice President",requirements:["Personal purchase: 600 pts","Team volume: 100,000 pts","4 Senior Managers"],achieved:!1},{rank:"President",requirements:["Personal purchase: 700 pts","Team volume: 250,000 pts","5 Vice Presidents"],achieved:!1}]}},fields:[{id:"mode",type:"select",label:"Display mode",default:"basic",options:[{label:"Basic — current rank + progress",value:"basic"},{label:"Pro — full rank tree",value:"pro"}],group:"Display"},{id:"showAiTip",type:"toggle",label:"Show AI coaching tip (pro mode)",default:!0,group:"Display"}],events:{emits:[{name:"rar:rankExpanded",description:"User expanded a rank in the accordion"}],listens:[{name:"rar:refresh",description:"Force refresh rank data"}]}};function k(s,o,d){return Math.min(Math.max(s,o),d)}function D({data:s,config:o,actions:d,metadata:v,i18n:x}){const r=x?.t??(a=>a),_=o.mode??s.mode??"basic",g=o.showAiTip??!0,p=s.currentRank,t=s.nextRank,b=k(s.progressPercent??0,0,100),u=s.rankTree??[],h=s.aiTip,[j,y]=q.useState(new Set);if(!p&&!s.error)return e.jsx(m,{blockType:"rank-advancement-roadmap",children:e.jsx("div",{className:"es-block__body es-rar__body",children:e.jsxs("div",{className:"es-rar__current-card",children:[e.jsx("div",{className:"es-rar__section-label",children:r("rank_roadmap.current_rank")}),e.jsx("div",{className:"es-rar__rank-row",children:e.jsx("span",{className:"es-rar__rank-name",style:{color:"var(--es-color-on-surface-muted, #4B5563)"},children:"—"})}),e.jsxs("div",{className:"es-rar__progress-label",children:[e.jsx("span",{children:v?.dataQuality==="none"?r("rank_roadmap.signin_prompt"):r("rank_roadmap.loading")}),e.jsx("span",{children:"0%"})]}),e.jsx("div",{className:"es-rar__progress-bar",children:e.jsx("div",{className:"es-rar__progress-fill",style:{width:"0%"}})})]})})});if(s.error)return e.jsx(m,{blockType:"rank-advancement-roadmap",error:w(s.error)});function f(a){y(c=>{const n=new Set(c);return n.has(a)?n.delete(a):(n.add(a),d.emit("rar:rankExpanded",{rank:a})),n})}const i=k(b,0,100);return e.jsx(m,{blockType:"rank-advancement-roadmap",children:e.jsxs("div",{className:"es-block__body es-rar__body",children:[e.jsxs("div",{className:"es-rar__current-card",children:[e.jsx("div",{className:"es-rar__section-label",children:r("rank_roadmap.current_rank")}),e.jsxs("div",{className:"es-rar__rank-row",children:[e.jsx("span",{className:"es-rar__rank-name",children:l(p??"",r)}),e.jsxs("span",{className:"es-rar__rank-badge",children:[i,"%"]})]}),e.jsxs("div",{className:"es-rar__progress-label",children:[e.jsx("span",{children:r("rank_roadmap.progress_to",{rank:t?l(t,r):r("rank_roadmap.next_rank_fallback")})}),e.jsxs("span",{children:[i,"%"]})]}),e.jsx("div",{className:"es-rar__progress-bar",children:e.jsx("div",{className:"es-rar__progress-fill",style:{width:`${i}%`},role:"progressbar","aria-valuenow":i,"aria-valuemin":0,"aria-valuemax":100,"aria-label":r("rank_roadmap.progress_aria",{percent:i,rank:t?l(t,r):r("rank_roadmap.next_rank_fallback")})})}),t&&e.jsx("div",{className:"es-rar__next-rank-hint",children:r("rank_roadmap.next_label",{rank:l(t,r)})})]}),g&&_==="pro"&&e.jsxs("div",{className:`es-rar__ai-tip${h?"":" es-rar__ai-tip--loading"}`,children:[e.jsx("div",{className:"es-rar__ai-tip-label",children:r("rank_roadmap.ai_tip_label")}),e.jsx("div",{className:"es-rar__ai-tip-text",children:h??r("rank_roadmap.analyzing")})]}),_==="pro"&&u.length>0&&e.jsxs("div",{children:[e.jsx("div",{className:"es-rar__tree-label",children:r("rank_roadmap.tree_label")}),e.jsx("ul",{className:"es-rar__tree",role:"list",children:u.map(a=>{const c=a.rank===p,n=j.has(a.rank),N=["es-rar__tree-item",a.achieved?"es-rar__tree-item--achieved":"",c?"es-rar__tree-item--current":""].filter(Boolean).join(" ");return e.jsxs("li",{className:N,children:[e.jsxs("button",{className:"es-rar__tree-header",onClick:()=>f(a.rank),"aria-expanded":n,"aria-controls":`rar-reqs-${a.rank}`,children:[e.jsx("span",{className:"es-rar__tree-status-icon","aria-hidden":"true",children:a.achieved?"✓":c?"▶":"○"}),e.jsx("span",{className:"es-rar__tree-rank-name",children:l(a.rank,r)}),e.jsx("span",{className:`es-rar__tree-chevron${n?" es-rar__tree-chevron--open":""}`,"aria-hidden":"true",children:"▾"})]}),n&&e.jsx("ul",{id:`rar-reqs-${a.rank}`,className:"es-rar__tree-requirements",role:"list",children:a.requirements.map((T,P)=>e.jsx("li",{className:"es-rar__tree-req",children:T},P))})]},a.rank)})})]})]})})}export{D as Component,M as manifest};
|
|
2
|
-
//# sourceMappingURL=index-
|
|
2
|
+
//# sourceMappingURL=index-Wza_7CGb-W1lJrIDD.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import{r as o,j as e,Q as u}from"../nexly.js";const x=[{value:"post",labelKey:"social_content.type.post"},{value:"story",labelKey:"social_content.type.story"},{value:"dm",labelKey:"social_content.type.dm"},{value:"event_promo",labelKey:"social_content.type.event_promo"}],g=[{value:"instagram",label:"Instagram"},{value:"facebook",label:"Facebook"},{value:"kakao",label:"KakaoTalk"},{value:"line",label:"LINE"},{value:"generic",labelKey:"social_content.platform.generic"}],G=[{value:"professional",labelKey:"social_content.tone.professional"},{value:"casual",labelKey:"social_content.tone.casual"},{value:"energetic",labelKey:"social_content.tone.energetic"},{value:"empathetic",labelKey:"social_content.tone.empathetic"}];function j(t,d){const n=g.find(m=>m.value===d);return n?.labelKey?t(n.labelKey):n?.label??d}function Q({data:t,config:d,actions:n,metadata:m,i18n:_}){const s=_?.t??(c=>c),N=d.mode??t.mode??"basic",f=t.content,k=t.contentType??"post",C=t.platform??"generic",K=t.tone??"professional",S=t.characterCount,[a,T]=o.useState(f??""),[i,w]=o.useState(k),[r,$]=o.useState(C),[p,q]=o.useState(K),[h,v]=o.useState("idle"),[l,b]=o.useState(!1),B=()=>{a&&(navigator.clipboard.writeText(a).catch(()=>{}),v("copied"),n?.emit?.("sc:contentCopied",{content:a,contentType:i,platform:r}),setTimeout(()=>v("idle"),2e3))},y=o.useCallback(async()=>{if(!(l||!n?.request)){b(!0);try{const c=await n.request("sc:regenerate",{contentType:i,platform:r,tone:p});c?.content&&(T(c.content),n?.emit?.("sc:contentGenerated",{contentType:i,platform:r,tone:p}))}finally{b(!1)}}},[l,n,i,r,p]),E=c=>{w(c),n?.emit?.("sc:typeChanged",{contentType:c})};return!a&&!t.error&&!l?e.jsx(u,{blockType:"social-content",children:e.jsxs("div",{className:"sc-block",children:[e.jsxs("div",{className:"sc-content-card",children:[e.jsxs("div",{className:"sc-content-header",children:[e.jsxs("div",{className:"sc-content-meta",children:[e.jsx("span",{className:"sc-meta-badge",children:s("social_content.type.post")}),e.jsx("span",{className:"sc-meta-badge",style:{background:"var(--es-color-success-soft, rgba(0, 103, 43, 0.15))",color:"var(--es-color-success, #00672B)"},children:s("social_content.platform.generic")})]}),e.jsxs("button",{className:"sc-btn sc-btn--primary",onClick:y,disabled:l,children:["↺ ",s("social_content.generate_content")]})]}),e.jsx("div",{className:"sc-content-body",style:{color:"var(--es-color-on-surface-muted, #4B5563)",fontStyle:"italic"},children:e.jsx("p",{className:"sc-content-text",children:m?.dataQuality==="none"?s("social_content.signin_prompt"):s("social_content.empty_cta_hint")})})]}),e.jsxs("div",{className:"sc-compliance-notice",children:[e.jsx("span",{className:"sc-compliance-icon",children:"🛡️"}),e.jsx("span",{children:s("social_content.compliance_notice_short")})]})]})}):t.error?e.jsx(u,{blockType:"social-content",children:e.jsx("p",{style:{color:"var(--es-color-error, #AD2C26)",fontSize:13},children:s("social_content.load_error")})}):e.jsx(u,{blockType:"social-content",children:e.jsxs("div",{className:"sc-block",children:[N==="pro"&&e.jsxs("div",{className:"sc-selectors",children:[e.jsxs("div",{children:[e.jsx("div",{className:"sc-selector-label",children:s("social_content.content_type_label")}),e.jsx("div",{className:"sc-selector-row",children:x.map(c=>e.jsx("button",{className:`sc-chip${i===c.value?" sc-chip--active":""}`,onClick:()=>E(c.value),children:s(c.labelKey)},c.value))})]}),e.jsxs("div",{children:[e.jsx("div",{className:"sc-selector-label",children:s("social_content.platform_label")}),e.jsx("div",{className:"sc-selector-row",children:g.map(c=>e.jsx("button",{className:`sc-chip${r===c.value?" sc-chip--active":""}`,onClick:()=>$(c.value),children:j(s,c.value)},c.value))})]}),e.jsxs("div",{children:[e.jsx("div",{className:"sc-selector-label",children:s("social_content.tone_label")}),e.jsx("div",{className:"sc-selector-row",children:G.map(c=>e.jsx("button",{className:`sc-chip${p===c.value?" sc-chip--active":""}`,onClick:()=>q(c.value),children:s(c.labelKey)},c.value))})]})]}),e.jsxs("div",{className:"sc-content-card",children:[e.jsxs("div",{className:"sc-content-header",children:[e.jsxs("div",{className:"sc-content-meta",children:[e.jsx("span",{className:"sc-meta-badge",children:s(x.find(c=>c.value===i)?.labelKey??"social_content.type.post")}),e.jsx("span",{className:"sc-meta-badge",style:{background:"var(--es-color-success-soft, rgba(0, 103, 43, 0.15))",color:"var(--es-color-success, #00672B)"},children:j(s,r)}),S!==void 0&&e.jsx("span",{className:"sc-char-count",children:s("social_content.char_count",{count:a.length})})]}),e.jsxs("div",{className:"sc-actions",children:[e.jsx("button",{className:`sc-btn${h==="copied"?" sc-btn--copied":""}`,onClick:B,disabled:!a,children:h==="copied"?`✓ ${s("common.copied")}`:s("common.copy")}),e.jsx("button",{className:"sc-btn sc-btn--primary",onClick:y,disabled:l,children:l?"...":`↺ ${s("social_content.regenerate")}`})]})]}),l?e.jsxs("div",{className:"sc-generating",children:[e.jsx("div",{className:"sc-spinner"}),s("social_content.generating")]}):e.jsx("div",{className:"sc-content-body",children:e.jsx("p",{className:"sc-content-text",children:a})})]}),e.jsxs("div",{className:"sc-compliance-notice",children:[e.jsx("span",{className:"sc-compliance-icon",children:"🛡️"}),e.jsx("span",{children:s("social_content.compliance_notice_full")})]})]})})}const z={slug:"social-content",name:"Social Content Generator",version:"1.0.0",category:"interactive",requiredService:"social-content",configSchema:{properties:{mode:{type:"string",default:"basic"}}},defaultConfig:{mode:"basic"},sizing:{minWidth:280,preferredHeight:"auto",scrollable:!0},supportedPlacements:["main","sidebar"],dataContract:{serviceSlug:"social-content",inputSchema:{type:"object",properties:{content:{type:"string"},contentType:{type:"string"},platform:{type:"string"},tone:{type:"string"},mode:{type:"string"},characterCount:{type:"number"}},required:["content","mode"]}},events:{emits:[{name:"sc:contentCopied",description:"User copied generated content"},{name:"sc:contentGenerated",description:"New content was generated (after regenerate)"},{name:"sc:typeChanged",description:"User changed content type in pro mode"}]}};export{Q as Component,Q as SocialContentBlock,z as manifest};
|
|
2
|
-
//# sourceMappingURL=index-
|
|
2
|
+
//# sourceMappingURL=index-_R8QyLD7-TEMHje2B.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{r as s,j as t,a as kt,b as Te,Q as ts,_ as Ws,t as Xs}from"../nexly.js";import{H as Js,P as Vs}from"./use-deferred-rating-XlgCUwcY-DDVOwURi.js";import{j as Ys}from"./PanelInfoVideo-BKq2v0QM-BrU-Qlul.js";import{x as Zs,s as Gs,c as en,a as tn}from"./allowed-elements-BXnLJV1S-C-_lr2zm.js";import{f as sn}from"./assistant-link-components-DkuhHIF9-CPkAMFv6.js";import{j as nn,X as an}from"./ClickToLoadEmbed-CVZbpoTT-CKUzZ7gL.js";import"./_commonjsHelpers-C6fGbg64-BC8KDfbh.js";import"./assistant-link-policy-CS93s-vA-Cc-yj-a-.js";const ca={slug:"support-chat",name:"Support Chat",version:"1.0.0",category:"interactive",requiredService:"support-chat",configSchema:{properties:{voiceEnabled:{type:"boolean",default:!0},voiceConversationEnabled:{type:"boolean",default:!1},voiceReadAloudEnabled:{type:"boolean",default:!1},welcomeMessage:{type:"string",default:""},headerTitle:{type:"string",default:""},placeholder:{type:"string",default:""},showSuggestedQuestions:{type:"boolean",default:!0},suggestedQuestions:{type:"array",items:{type:"string"},default:[]},escalationLabel:{type:"string",default:""},humanHandoffButton:{type:"boolean",default:!1}}},defaultConfig:{voiceEnabled:!0,voiceConversationEnabled:!1,voiceReadAloudEnabled:!1,welcomeMessage:"",headerTitle:"",placeholder:"",showSuggestedQuestions:!0,suggestedQuestions:[],escalationLabel:"",humanHandoffButton:!1},dataContract:{serviceSlug:"support-chat",inputSchema:{type:"object",properties:{answer:{type:"string",description:"AI response text"},confidence:{type:"number",description:"Confidence score 0-1"},sources:{type:"array",items:{type:"object",properties:{title:{type:"string"},url:{type:"string"},excerpt:{type:"string"}}},description:"Source citations for the answer"}},required:["answer"]},previewDataOverride:{answer:"Our return policy allows returns within 30 days of purchase. Items must be in original condition with tags attached.",confidence:.85,sources:[{title:"Return Policy",url:"/policies/returns",excerpt:"Returns accepted within 30 days."}]}},fields:[{id:"voiceConversationEnabled",type:"toggle",label:"Voice conversation (live)",default:!1,group:"Voice"},{id:"voiceReadAloudEnabled",type:"toggle",label:"Read messages aloud",default:!1,group:"Voice"},{id:"headerTitle",type:"localized-text",label:"Header title",default:"",placeholder:'Leave empty to use translated default (e.g. "Support")',group:"Content"},{id:"welcomeMessage",type:"localized-text",label:"Welcome message",default:"",placeholder:'Leave empty to use translated default (e.g. "Hi! How can I help you today?")',group:"Content"},{id:"placeholder",type:"localized-text",label:"Input placeholder",default:"",placeholder:'Leave empty to use translated default (e.g. "Ask a question...")',group:"Content"},{id:"escalationLabel",type:"text",label:"Escalation button label",default:"",placeholder:'Leave empty to use translated default (e.g. "Contact Support")',group:"Content"},{id:"humanHandoffButton",type:"toggle",label:'Show "Human" button',default:!1,group:"Behavior"},{id:"showSuggestedQuestions",type:"toggle",label:"Show suggested questions",default:!0,group:"Behavior"},{id:"suggestedQuestions",type:"json",label:"Suggested questions",default:[],placeholder:'["What is your return policy?", "Do you ship internationally?"]',group:"Behavior"}],events:{emits:[{name:"support-chat:messageSent",description:"User sent a message"},{name:"support-chat:escalated",description:"User requested escalation to human support"},{name:"support-chat:feedbackSubmitted",description:"User rated helpfulness of answer"}],listens:[{name:"support-chat:clearHistory",description:"Clear chat history"}]},sizing:{minWidth:280,preferredHeight:"fill",scrollable:!0},supportedPlacements:["main","sidebar","fullscreen"]};function ss({text:n,allowedLinkHosts:a}){return t.jsx("div",{className:"es-sc__bubble-text es-sc__bubble-text--md",children:t.jsx(Zs,{remarkPlugins:[...en],allowedElements:[...Gs],transformLinkUri:o=>tn(o)??"",transformImageUri:()=>"",components:{input:({node:o,type:i,checked:l,...f})=>i==="checkbox"?t.jsx("input",{...f,type:"checkbox",checked:!!l,disabled:!0,readOnly:!0,className:"es-sc__md-task"}):null,...sn({allowedHosts:a})},children:n})})}function rn({media:n,t:a}){const{embeds:o,images:i}=n;return o.length===0&&i.length===0?null:t.jsxs("div",{className:"es-sc__media","data-testid":"support-chat-media",children:[o.map(l=>t.jsx(an,{embed:l,t:a,classPrefix:"es-sc"},`${l.provider}:${l.id}`)),i.map(l=>t.jsx("img",{className:"es-sc__media-img",src:l.src,alt:l.alt||a("support_chat.media_image_alt"),loading:"lazy",decoding:"async",referrerPolicy:"no-referrer"},l.src))]})}function wt(n){return n?n.join(","):""}const on=s.memo(function({text:n,allowEmbeds:a,allowedImageHosts:o,t:i}){const l=wt(o),f=s.useMemo(()=>nn(n,{allowEmbeds:a,allowedImageHosts:o}),[n,a,l]);return t.jsx(rn,{media:f,t:i})},(n,a)=>n.text===a.text&&n.allowEmbeds===a.allowEmbeds&&n.t===a.t&&wt(n.allowedImageHosts)===wt(a.allowedImageHosts));function cn(n,a){const o=Math.round((Date.now()-n.getTime())/1e3);if(o<60)return a("time.just_now");const i=Math.round(o/60);if(i<60)return a("time.minutes_ago",{count:i});const l=Math.round(i/60);if(l<24)return a("time.hours_ago",{count:l});const f=Math.round(l/24);return a("time.days_ago",{count:f})}function us({card:n,t:a,onSelect:o}){const i=t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"es-sc__ticket-card-head",children:[t.jsxs("span",{className:"es-sc__ticket-card-number",children:["#",n.externalNumber]}),t.jsx("span",{className:`es-sc__ticket-card-status es-sc__ticket-card-status--${n.status}`,children:a(`escalation.status_${n.status}`)})]}),n.summary&&t.jsx("p",{className:"es-sc__ticket-card-summary",title:n.summary,children:n.summary}),t.jsxs("p",{className:"es-sc__ticket-card-meta",children:[cn(new Date(n.createdAt),a),n.priority?` · ${a(`support_chat.priority_${n.priority}`)}`:""]})]});if(o&&n.sessionId){const l=n.sessionId;return t.jsx("button",{type:"button",className:"es-sc__ticket-card es-sc__ticket-card--clickable",onClick:()=>o(l),"aria-label":a("support_chat.open_ticket_conversation"),title:a("support_chat.open_ticket_conversation"),children:i})}return t.jsx("div",{className:"es-sc__ticket-card",children:i})}const ln=[{value:"open",key:"support_chat.filter_open"},{value:"closed",key:"support_chat.filter_closed"},{value:"all",key:"support_chat.filter_all"}];function un(n){const{status:a,loading:o,tickets:i,onSelectStatus:l,onSelectSession:f,t:v}=n;return t.jsxs("div",{className:"es-sc__tickets-view",children:[t.jsx("div",{className:"es-sc__tickets-filters",children:ln.map(m=>t.jsx("button",{type:"button",className:`es-sc__tickets-chip${a===m.value?" es-sc__tickets-chip--active":""}`,onClick:()=>l(m.value),children:v(m.key)},m.value))}),t.jsx("div",{className:"es-sc__tickets-view-list",children:o?t.jsx("p",{className:"es-sc__tickets-empty",role:"status","aria-live":"polite",children:"…"}):i.length===0?t.jsx("p",{className:"es-sc__tickets-empty",children:v("support_chat.tickets_empty")}):i.map(m=>t.jsx(us,{card:m,t:v,onSelect:f},m.externalNumber))})]})}const dn=["audio/webm;codecs=opus","audio/webm","audio/mp4"];function pn(){return typeof navigator>"u"||typeof window>"u"?!1:typeof navigator.mediaDevices?.getUserMedia=="function"&&typeof window.MediaRecorder<"u"}function fn(){if(typeof window>"u"||typeof window.MediaRecorder>"u")return;const n=typeof window.MediaRecorder.isTypeSupported=="function";for(const a of dn)if(!n||window.MediaRecorder.isTypeSupported(a))return a}function hn({baseUrl:n,apiKey:a,jwt:o,language:i,onTranscript:l,t:f,disabled:v=!1,streaming:m,voiceStream:g,baseText:b,onText:r}){const[p]=s.useState(pn),[_,k]=s.useState("idle"),[w,E]=s.useState(null),[U,H]=s.useState("idle"),x=!!(m&&g&&b&&r),T=s.useRef(null),ee=s.useRef(null),X=s.useRef([]),J=s.useRef(!0);s.useEffect(()=>()=>{J.current=!1},[]);const ce=s.useRef({baseUrl:n,apiKey:a,jwt:o,language:i,onTranscript:l});s.useEffect(()=>{ce.current={baseUrl:n,apiKey:a,jwt:o,language:i,onTranscript:l}},[n,a,o,i,l]);const le=s.useCallback(()=>{ee.current?.getTracks().forEach(I=>I.stop()),ee.current=null,T.current=null,X.current=[]},[]);s.useEffect(()=>le,[le]);const R=s.useRef(()=>{});R.current=()=>{x&&(U==="connecting"||U==="listening")&&g?.stop()},s.useEffect(()=>()=>R.current(),[]);const O=s.useCallback(async I=>{const{baseUrl:F,apiKey:V,jwt:Y,language:$,onTranscript:P}=ce.current,te=new FormData;te.append("audio",I,"recording.webm"),te.append("language",$);const ae={};V&&(ae["X-API-Key"]=V),Y&&(ae.Authorization=`Bearer ${Y}`);const ke=await fetch(`${F}/api/widget/transcribe`,{method:"POST",headers:ae,credentials:"include",body:te});if(!ke.ok){const Q=new Error(`HTTP ${ke.status}`);throw Q.status=ke.status,Q}const Ie=await ke.json();P(Ie.text??"")},[]),pe=s.useCallback(async()=>{E(null);let I;try{I=await navigator.mediaDevices.getUserMedia({audio:!0})}catch{k("error"),E("voice.permission_denied");return}const F=fn();let V;try{V=F?new MediaRecorder(I,{mimeType:F}):new MediaRecorder(I)}catch{I.getTracks().forEach(Y=>Y.stop()),k("error"),E("voice.error_generic");return}ee.current=I,T.current=V,X.current=[],V.ondataavailable=Y=>{Y.data&&Y.data.size>0&&X.current.push(Y.data)},V.onstop=async()=>{const Y=V.mimeType||F||"audio/webm",$=new Blob(X.current,{type:Y});if(le(),$.size===0){k("idle");return}k("transcribing");try{if(await O($),!J.current)return;k("idle"),E(null)}catch(P){if(!J.current)return;const te=P.status;k("error"),E(te===413?"voice.error_too_large":"voice.error_generic")}},V.start(),k("recording")},[le,O]),ue=s.useCallback(()=>{const I=T.current;I&&I.state!=="inactive"?I.stop():(le(),k("idle"))},[le]),ne=s.useCallback(()=>{p&&(x?U==="connecting"||U==="listening"?(g.stop(),H("idle")):(E(null),g.start({language:i,baseText:b,onText:r,onState:I=>H(I),onError:I=>{E(I),H("error")}})):_==="recording"?ue():(_==="idle"||_==="error")&&pe())},[p,x,U,_,i,b,r,g,pe,ue]);if(!p)return null;const fe=x?U==="connecting"||U==="listening":_==="recording",he=!x&&_==="transcribing",Oe=x?U==="error":_==="error",xe=f(fe?"voice.stop":"voice.start"),me=w?f(w):he?f("voice.transcribing"):xe,ye=["es-sc__mic",fe&&"es-sc__mic--recording",he&&"es-sc__mic--transcribing",Oe&&"es-sc__mic--error"].filter(Boolean).join(" ");return t.jsx("button",{type:"button",className:ye,onClick:ne,disabled:he||v,"aria-label":xe,"aria-pressed":fe,title:me,children:he?t.jsx("svg",{width:18,height:18,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",className:"es-sc__mic-spinner","aria-hidden":"true",children:t.jsx("path",{d:"M21 12a9 9 0 1 1-6.219-8.56"})}):fe?t.jsx("svg",{width:18,height:18,viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",children:t.jsx("rect",{x:"6",y:"6",width:"12",height:"12",rx:"2"})}):t.jsxs("svg",{width:18,height:18,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[t.jsx("path",{d:"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z"}),t.jsx("path",{d:"M19 10v2a7 7 0 0 1-14 0v-2"}),t.jsx("line",{x1:"12",y1:"19",x2:"12",y2:"22"})]})})}function mn(){return t.jsx("svg",{width:14,height:14,viewBox:"0 0 24 24",fill:"currentColor",stroke:"none","aria-hidden":"true",children:t.jsx("path",{d:"M8 5.14v13.72a1 1 0 0 0 1.5.86l11-6.86a1 1 0 0 0 0-1.72l-11-6.86A1 1 0 0 0 8 5.14Z"})})}function gn(){return t.jsxs("svg",{width:14,height:14,viewBox:"0 0 24 24",fill:"currentColor",stroke:"none","aria-hidden":"true",children:[t.jsx("rect",{x:"6",y:"5",width:"4",height:"14",rx:"1"}),t.jsx("rect",{x:"14",y:"5",width:"4",height:"14",rx:"1"})]})}function _n(){return t.jsx("svg",{width:14,height:14,viewBox:"0 0 24 24",fill:"currentColor",stroke:"none","aria-hidden":"true",children:t.jsx("rect",{x:"6",y:"6",width:"12",height:"12",rx:"2"})})}function bn(){return t.jsx("svg",{width:14,height:14,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",className:"es-sc__readaloud-spinner","aria-hidden":"true",children:t.jsx("path",{d:"M21 12a9 9 0 1 1-6.219-8.56"})})}const vn=s.memo(function({id:n,session:a,onActivate:o,t:i}){const l=a.activeId===n?a.status:"idle",f=s.useCallback(()=>{if(l==="idle"||l==="error"){o();return}l!=="loading"&&a.togglePause()},[l,o,a]),v=s.useCallback(()=>a.stop(),[a]),m=i(l==="playing"?"voice_output.pause":"voice_output.play"),g=l==="error"?i("voice_output.error"):m;return t.jsxs("span",{className:"es-sc__readaloud-group",children:[t.jsx("button",{type:"button",className:["es-sc__readaloud-btn",l==="playing"&&"es-sc__readaloud-btn--playing",l==="paused"&&"es-sc__readaloud-btn--paused",l==="error"&&"es-sc__readaloud-btn--error"].filter(Boolean).join(" "),onClick:f,disabled:l==="loading","aria-label":m,"aria-pressed":l==="playing",title:g,children:l==="loading"?t.jsx(bn,{}):l==="playing"?t.jsx(gn,{}):t.jsx(mn,{})}),(l==="playing"||l==="paused")&&t.jsx("button",{type:"button",className:"es-sc__readaloud-btn es-sc__readaloud-btn--stop",onClick:v,"aria-label":i("voice_output.stop"),title:i("voice_output.stop"),children:t.jsx(_n,{})})]})});function xn(n){let a=null,o=0,i=null;const l=new Set,f={ended:new Set},v=g=>{for(const b of[...f[g]])b()},m=g=>{g.onended=null,Xs(()=>g.stop())};return{push(g){const b=new Uint8Array(g);let r;i&&i.length>0?(r=new Uint8Array(i.length+b.length),r.set(i,0),r.set(b,i.length),i=null):r=b;const p=r.length-r.length%2;if(p<r.length&&(i=r.slice(p)),p===0)return;const _=new Int16Array(r.buffer,r.byteOffset,p/2);if(_.length===0)return;a??(a=new AudioContext({sampleRate:n}));const k=a.createBuffer(1,_.length,n);k.getChannelData(0).set(Float32Array.from(_,U=>U/32768));const w=a.createBufferSource();w.buffer=k,w.connect(a.destination),w.onended=()=>{l.delete(w),l.size===0&&v("ended")},l.add(w);const E=Math.max(a.currentTime,o);w.start(E),o=E+k.duration},reset(){for(const g of[...l])m(g);l.clear(),o=0,i=null},pause(){a?.suspend()},resume(){a?.resume()},on(g,b){return f[g].add(b),()=>{f[g].delete(b)}},close(){for(const g of[...l])m(g);l.clear(),a?.close(),a=null,o=0,f.ended.clear()}}}function yn({baseUrl:n,apiKey:a,getJwt:o}){const[i,l]=s.useState(null),[f,v]=s.useState("idle"),m=s.useRef(null),g=s.useRef(null),b=s.useRef([]),r=s.useRef(!1),p=s.useRef(!1),_=s.useRef(!1),k=s.useRef(0),w=s.useRef(null),E=s.useRef(null),U=s.useCallback(()=>{E.current&&(clearTimeout(E.current),E.current=null)},[]),H=s.useCallback(()=>{w.current?.abort(),w.current=null,E.current&&(clearTimeout(E.current),E.current=null),g.current?.close(),g.current=null,b.current=[],r.current=!1,p.current=!1,_.current=!1},[]),x=s.useCallback(()=>{k.current+=1,H(),m.current=null,l(null),v("idle")},[H]),T=s.useCallback(()=>{const R=g.current;R&&v(O=>O==="playing"?(R.pause(),"paused"):O==="paused"?(R.resume(),"playing"):O)},[]),ee=s.useCallback(R=>{if(m.current===R)return;H(),k.current+=1,w.current=new AbortController,m.current=R,l(R),v("loading");const O=k.current;E.current=setTimeout(()=>{O===k.current&&(w.current?.abort(),v("error"))},12e3)},[H]),X=s.useCallback(async R=>{if(!R)return;const O=o?.();await Te(fetch(`${n}/api/widget/read-aloud-play`,{method:"POST",headers:{"Content-Type":"application/json",...a?{"X-API-Key":a}:{},...O?{Authorization:`Bearer ${O}`}:{}},body:JSON.stringify({messageId:R})}))},[n,a,o]),J=s.useCallback((R,O)=>{r.current||(r.current=!0,(async()=>{for(;b.current.length>0;){if(R!==k.current){r.current=!1;return}const pe=b.current.shift();if(!pe)continue;const ue=o?.(),[ne,fe]=await Te(fetch(`${n}/api/widget/read-aloud`,{method:"POST",headers:{"Content-Type":"application/json",...a?{"X-API-Key":a}:{},...ue?{Authorization:`Bearer ${ue}`}:{}},body:JSON.stringify({text:pe,language:O,messageId:m.current??void 0}),signal:w.current?.signal}));if(R!==k.current){r.current=!1;return}if(fe||!ne||!ne.ok||!ne.body){v("error"),r.current=!1;return}const he=ne.headers.get("X-Audio-Encoding");if(he&&he!=="pcm16"){v("error"),r.current=!1;return}if(!g.current){const me=Number(ne.headers.get("X-Audio-Sample-Rate"))||24e3,ye=xn(me);g.current=ye,ye.on("ended",()=>{R===k.current&&(!p.current||b.current.length>0||r.current||x())})}const Oe=g.current,xe=ne.body.getReader();for(;;){const[me,ye]=await Te(xe.read());if(R!==k.current){r.current=!1;return}if(ye){v("error"),r.current=!1;return}const{done:I,value:F}=me;if(I)break;F&&F.byteLength>0&&(Oe.push(F.buffer.slice(F.byteOffset,F.byteOffset+F.byteLength)),_.current||(_.current=!0,U(),v("playing"),X(m.current)))}}r.current=!1,p.current&&!_.current&&R===k.current&&x()})())},[n,a,o,x,X]),ce=s.useCallback((R,O,pe)=>{if(m.current!==R)return;const ue=O.trim();ue&&(b.current.push(ue),J(k.current,pe))},[J]),le=s.useCallback(R=>{m.current===R&&(p.current=!0,b.current.length===0&&!r.current&&!_.current&&x())},[x]);return s.useEffect(()=>()=>x(),[x]),{activeId:i,status:f,activate:ee,feed:ce,finish:le,togglePause:T,stop:x}}const kn=1200;function wn(n={language:"en"}){const{voiceStream:a,language:o,silenceMs:i=kn}=n;let l=null,f=null,v="",m=!1;const g=()=>{f&&clearTimeout(f),f=null},b=()=>{!a||!m||(v="",a.start({language:o,baseText:()=>"",onText:r=>{const p=r.trim();!p||p===v||(v=p,l?.({type:"user_partial",text:p}),g(),f=setTimeout(()=>{const _=v;_&&(v="",l?.({type:"user_final",text:_}),a.stop(),b())},i))},onError:r=>l?.({type:"error",message:r})}))};return{get available(){return!!a},async start({onEvent:r}){if(!a)throw new Error("conversation transport unavailable");l=r,m=!0,b()},stop(){m=!1,g(),v="",a&&a.stop(),l=null}}}function jn(n){let a=null,o=null;return{get available(){return n.enabled&&typeof RTCPeerConnection<"u"},async start({onEvent:i}){o=i;const l={"Content-Type":"application/json","X-API-Key":n.apiKey};n.jwt&&(l.Authorization=`Bearer ${n.jwt}`);const f=n.getSessionId?.()??null,v=await fetch(`${n.baseUrl}/api/widget/realtime-voice`,{method:"POST",headers:l,body:JSON.stringify({language:n.language,...f?{sessionId:f}:{}})});if(!v.ok)throw new Error("eleven token refused");const m=await v.json(),g=m.data?.token;if(m.data?.provider!=="elevenlabs"||!g)throw new Error("not an elevenlabs session");m.data?.sessionId&&n.onSessionId?.(m.data.sessionId);const b=m.data?.endUserToken??"",{Conversation:r}=await Ws(async()=>{const{Conversation:x}=await import("./index-DMQkz1bV-BuMYksln.js");return{Conversation:x}},[]);let p=!1,_=null;const k=.6,w=.35,E=x=>{x!==p&&(p=x,o?.({type:"user_speaking",active:x}))};let U="";const H=x=>{const T=x?.trim();T&&(E(!1),o?.({type:"thinking"}),T!==U&&(U=T,n.onUserTurnEnd?.()))};a=await r.startSession({conversationToken:g,connectionType:"webrtc",customLlmExtraBody:{end_user_token:b},onModeChange:({mode:x})=>{o?.(x==="speaking"?{type:"agent_delta",text:""}:{type:"agent_done"})},onVadScore:({vadScore:x})=>{x>=k?(_&&(clearTimeout(_),_=null),E(!0)):x<=w&&p&&!_&&(_=setTimeout(()=>{_=null,E(!1)},600))},onMessage:({message:x,role:T})=>{const ee=x?.trim();ee&&(T==="user"?H(ee):(n.onTranscript({role:"assistant",text:ee,streaming:!1}),U=""))},onIncomingEvent:x=>{x?.type==="user_transcript"&&H(x.user_transcription_event?.user_transcript)},onAgentTyping:()=>o?.({type:"thinking"}),onAgentChatResponsePart:x=>{const T=x?.text??"";T&&n.onTranscript({role:"assistant",text:T,streaming:!0})},onInterruption:()=>o?.({type:"interrupted"}),onError:x=>{console.warn("[voice] eleven blad:",x),o?.({type:"error",message:"voice_conv.error"})}})},setMuted(i){a?.setMicMuted?.(i)},sendUserMessage(i){const l=i.trim();return!l||!a||(a.sendUserActivity?.(),!a.sendUserMessage)?!1:(a.sendUserMessage(l),!0)},stop(){o=null;const i=a;a=null,i?.endSession()}}}function ns({followUps:n,isNewest:a,isPending:o,hasQuickReplies:i,isSending:l,onSelect:f,t:v}){return!a||o||i||!n||n.length===0?null:t.jsx("div",{className:"es-sc__followups",role:"list","aria-label":v("support_chat.followups_aria"),"data-es-no-read":!0,children:n.map(m=>t.jsx("button",{type:"button",role:"listitem",disabled:l,className:"es-sc__suggestion es-sc__suggestion--followup",onClick:()=>f(m.message),children:m.label},m.message))})}function Cn(n){switch(n){case"OUT_OF_HOURS":return"support_chat.handoff.out_of_hours";case"QUEUE_FULL":return"support_chat.handoff.queue_full";default:return"support_chat.handoff.no_operator_title"}}const jt={email:254,phone:32,note:2e3},Sn={email:"",phone:"",note:""};function Nn(n){const[a,o]=s.useState(()=>Date.now());return s.useEffect(()=>{if(n===null)return;const i=setInterval(()=>o(Date.now()),1e3);return()=>clearInterval(i)},[n]),n===null?null:Math.max(0,Math.ceil((n-a)/1e3))}function Rn({status:n,onSubmitContact:a,onDismissContact:o,t:i}){const[l,f]=s.useState(Sn),[v,m]=s.useState(!1),[g,b]=s.useState(null),r=s.useRef(null),p=Nn(n.kind==="waiting"?n.until:null);return s.useEffect(()=>{n.kind==="unavailable"&&r.current?.focus()},[n.kind]),n.kind==="idle"?null:n.kind==="waiting"?t.jsxs("div",{className:"es-sc__handoff es-sc__handoff--waiting",role:"status","aria-live":"polite",children:[t.jsx("span",{className:"es-sc__handoff-dot","aria-hidden":"true"}),t.jsx("span",{className:"es-sc__handoff-text",children:p===null?i("support_chat.handoff.queued"):i("support_chat.handoff.waiting",{seconds:p})})]}):n.kind==="human"?t.jsx("div",{className:"es-sc__handoff es-sc__handoff--human",role:"status","aria-live":"polite",children:t.jsx("span",{className:"es-sc__handoff-text",children:n.displayName?i("support_chat.handoff.human_joined",{name:n.displayName}):i("support_chat.handoff.human_joined_unnamed")})}):n.kind==="contact_left"?t.jsx("div",{className:"es-sc__handoff es-sc__handoff--done",role:"status","aria-live":"polite",children:t.jsx("span",{className:"es-sc__handoff-text",children:i("support_chat.handoff.contact_success")})}):t.jsxs("form",{className:"es-sc__handoff es-sc__handoff--form",onSubmit:async _=>{if(_.preventDefault(),v)return;if(l.email.trim().length===0&&l.phone.trim().length===0){b(i("support_chat.handoff.contact_validation")),r.current?.focus();return}m(!0),b(null);const k=await a({email:l.email.trim(),phone:l.phone.trim(),note:l.note.trim()});m(!1),k||b(i("support_chat.handoff.contact_error"))},noValidate:!0,children:[t.jsx("p",{className:"es-sc__handoff-title",children:i(Cn(n.reason))}),t.jsx("p",{className:"es-sc__handoff-text",children:i("support_chat.handoff.contact_prompt")}),t.jsx("label",{className:"es-sc__handoff-label",htmlFor:"es-sc-handoff-email",children:i("support_chat.handoff.contact_email_label")}),t.jsx("input",{id:"es-sc-handoff-email",ref:r,className:"es-sc__handoff-input",type:"email",autoComplete:"email",maxLength:jt.email,value:l.email,"aria-invalid":g!==null,"aria-describedby":g?"es-sc-handoff-error":void 0,onChange:_=>f(k=>({...k,email:_.target.value}))}),t.jsx("label",{className:"es-sc__handoff-label",htmlFor:"es-sc-handoff-phone",children:i("support_chat.handoff.contact_phone_label")}),t.jsx("input",{id:"es-sc-handoff-phone",className:"es-sc__handoff-input",type:"tel",autoComplete:"tel",maxLength:jt.phone,value:l.phone,onChange:_=>f(k=>({...k,phone:_.target.value}))}),t.jsx("label",{className:"es-sc__handoff-label",htmlFor:"es-sc-handoff-note",children:i("support_chat.handoff.contact_note_label")}),t.jsx("textarea",{id:"es-sc-handoff-note",className:"es-sc__handoff-input es-sc__handoff-textarea",rows:3,maxLength:jt.note,value:l.note,onChange:_=>f(k=>({...k,note:_.target.value}))}),g&&t.jsx("p",{className:"es-sc__handoff-error",id:"es-sc-handoff-error",role:"alert",children:g}),t.jsxs("div",{className:"es-sc__handoff-actions",children:[t.jsx("button",{className:"es-sc__handoff-submit",type:"submit",disabled:v,children:i("support_chat.handoff.contact_submit")}),t.jsx("button",{className:"es-sc__handoff-dismiss",type:"button",onClick:o,children:i("support_chat.handoff.contact_dismiss")})]})]})}const ds="live:";function De(n){return n.id.startsWith(ds)}function En(n,a){return n.text!==a.text?!0:JSON.stringify(n.metadata??null)!==JSON.stringify(a.metadata??null)}function Tn(n,a){if(a.length===0)return n;const o=new Map;n.forEach((b,r)=>o.set(b.id,r));let i=null;const l=[];let f=!1;for(const b of a){const r=o.get(b.id);if(r===void 0){l.push(b),b.role==="assistant"&&(f=!0);continue}const p=n[r];En(p,b)&&(i??(i=[...n]),i[r]={...p,...b})}if(l.length===0)return i??n;const v=i??[...n],m=f?v.filter(b=>!De(b)):v,g=m.filter(De);return[...m.filter(b=>!De(b)),...l,...g]}function In({transport:n,agentId:a,onUserMessage:o,onStopPlayback:i}){const[l,f]=s.useState("idle"),[v,m]=s.useState(null),[g,b]=s.useState(!1),[r,p]=s.useState(null),_=s.useRef(o);_.current=o;const k=s.useRef(i);k.current=i;const w=s.useCallback(x=>{switch(x.type){case"user_partial":k.current(),m(x.text),f("listening");return;case"user_final":m(null),b(!1),f("listening"),x.text.trim()&&_.current(x.text);return;case"user_speaking":b(x.active),x.active&&(k.current(),f("listening"));return;case"thinking":m(null),b(!1),f("thinking");return;case"agent_delta":f("speaking");return;case"agent_done":f("listening");return;case"interrupted":k.current(),f("listening");return;case"error":p(x.message),f("error");return}},[]),E=s.useCallback(async()=>{if(!n.available){p("voice_conv.error"),f("error");return}p(null),f("connecting"),k.current();const[,x]=await Te(n.start({agentId:a,onEvent:w}));if(x){p("voice_conv.error"),f("error");return}f("listening")},[n,a,w]),U=s.useCallback(()=>{n.stop(),m(null),b(!1),f("idle")},[n]),H=s.useRef(n);return H.current=n,s.useEffect(()=>()=>H.current.stop(),[]),{state:l,draft:v,userSpeaking:g,error:r,start:E,stop:U}}const Mn=()=>t.jsxs("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round","aria-hidden":"true",children:[t.jsx("rect",{x:"9",y:"3",width:"6",height:"11",rx:"3"}),t.jsx("path",{d:"M5 11a7 7 0 0 0 14 0M12 18v3"})]}),as=()=>t.jsxs("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round","aria-hidden":"true",children:[t.jsx("path",{d:"M4 4l16 16"}),t.jsx("path",{d:"M9 5a3 3 0 0 1 6 0v5m-6 1.5V11"}),t.jsx("path",{d:"M5 11a7 7 0 0 0 10.9 5.8M19 11a7 7 0 0 1-.4 2.3M12 18v3"})]}),An=()=>t.jsx("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round","aria-hidden":"true",children:t.jsx("path",{d:"M6 6l12 12M18 6L6 18"})});function Pn({running:n}){const[a,o]=s.useState(0);return s.useEffect(()=>{if(!n)return;const i=setInterval(()=>o(l=>l+1),1e3);return()=>clearInterval(i)},[n]),t.jsx("span",{className:"es-vm__elapsed","data-testid":"voice-mode-elapsed",children:$n(a)})}function $n(n){const a=Math.floor(n/60),o=n%60;return`${a}:${String(o).padStart(2,"0")}`}function Ln({state:n,draft:a,error:o,muted:i,listening:l,hasTranscript:f,transcript:v,onToggleMute:m,onEnd:g,onRetry:b,t:r}){const p=s.useRef(null);if(s.useEffect(()=>{const w=p.current;w&&(w.scrollTop=w.scrollHeight)},[v]),n==="error")return t.jsxs("div",{className:"es-vm","data-testid":"voice-mode",children:[t.jsxs("div",{className:"es-vm__top",children:[t.jsx("span",{className:"es-vm__dot es-vm__dot--error"}),t.jsx("span",{className:"es-vm__label",children:r("voice_conv.title")})]}),t.jsxs("div",{className:"es-vm__denied",children:[t.jsx("div",{className:"es-vm__denied-icon",children:t.jsx(as,{})}),t.jsxs("div",{children:[t.jsx("div",{className:"es-vm__denied-title",children:r("voice_conv.denied_title")}),t.jsx("div",{className:"es-vm__denied-body",children:r(o||"voice_conv.denied_body")})]}),t.jsxs("div",{className:"es-vm__denied-actions",children:[t.jsx("button",{type:"button",className:"es-vm__action es-vm__action--primary",onClick:b,"data-testid":"voice-mode-retry",children:r("voice_conv.retry")}),t.jsx("button",{type:"button",className:"es-vm__action",onClick:g,"data-testid":"voice-mode-back",children:r("voice_conv.back_to_typing")})]})]})]});const _=!i&&(!!l||!!(a&&a.trim())),k=i?"muted":n==="speaking"?"speaking":n==="thinking"?"thinking":"listening";return t.jsxs("div",{className:"es-vm","data-testid":"voice-mode","data-state":n,children:[t.jsxs("div",{className:"es-vm__top",children:[t.jsx("span",{className:"es-vm__label",children:r("voice_conv.title")}),t.jsx(Pn,{running:n!=="idle"})]}),t.jsxs("div",{className:"es-vm__orbwrap",children:[t.jsxs("div",{className:"es-vm__orb","data-s":k,"data-active":_?"1":void 0,"data-testid":"voice-mode-orb","aria-hidden":"true",children:[t.jsx("span",{className:"es-vm__orb-halo"}),t.jsx("span",{className:"es-vm__orb-halo es-vm__orb-halo--delayed"}),t.jsx("span",{className:"es-vm__orb-core"})]}),t.jsx("div",{className:"es-vm__orb-state",role:"status","data-testid":"voice-mode-state",children:r(`voice_conv.state_${k}`)}),t.jsx("div",{className:"es-vm__orb-hint",children:r(`voice_conv.state_${k}_hint`)})]}),t.jsx("div",{className:"es-vm__transcript","data-testid":"voice-mode-transcript",ref:p,children:f?v:t.jsx("div",{className:"es-vm__invite","data-testid":"voice-mode-invite",children:r("voice_conv.invite")})}),t.jsxs("div",{className:"es-vm__controls",children:[t.jsx("button",{type:"button",className:`es-vm__btn${i?" es-vm__btn--on":""}`,"aria-label":r(i?"voice_conv.unmute":"voice_conv.mute"),onClick:m,"data-testid":"voice-mode-mute",children:i?t.jsx(as,{}):t.jsx(Mn,{})}),t.jsx("button",{type:"button",className:"es-vm__btn es-vm__btn--end","aria-label":r("voice_conv.end"),onClick:g,"data-testid":"voice-mode-end",children:t.jsx(An,{})})]})]})}const rs=/[.!?]+(?:['")\]]+)?(\s+)/g;function Un(n){const a=[];let o=0;rs.lastIndex=0;let i;for(;i=rs.exec(n);){const l=i.index+i[0].length,f=n.slice(o,l).trim();f&&a.push(f),o=l}return{complete:a,remainder:n.slice(o)}}function Dn(n,a,o){return n===void 0?o:n.map(i=>{const l=i.translations?.[a]?.trim();return l||i.translations?.[i.baseLanguage]?.trim()||(Object.values(i.translations??{}).find(v=>v?.trim())?.trim()??"")}).filter(i=>i.length>0)}function On({size:n=16}){return t.jsxs("svg",{width:n,height:n,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[t.jsx("circle",{cx:"12",cy:"12",r:"10"}),t.jsx("polyline",{points:"12 6 12 12 16 14"})]})}function qn({size:n=18}){return t.jsxs("svg",{width:n,height:n,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[t.jsx("path",{d:"M12 5H5a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7"}),t.jsx("path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z"})]})}function Bn({size:n=16}){return t.jsxs("svg",{width:n,height:n,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[t.jsx("path",{d:"M2 9a3 3 0 1 1 0 6v2a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-2a3 3 0 1 1 0-6V7a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z"}),t.jsx("path",{d:"m9 12 2 2 4-4"})]})}const Hn=["confirm_escalation","cancel_escalation","confirm_handoff","decline_handoff"],Fn="<followups>",Kn=/<followups>/i;function zn(n){const a=n.search(Kn);if(a!==-1)return n.slice(0,a).trimEnd();const o=n.lastIndexOf("<");return o!==-1&&Fn.startsWith(n.slice(o).toLowerCase())?n.slice(0,o).trimEnd():n}function is(n){return n>=.6?"high":n>=.35?"medium":"low"}function Qn(n){return/^https?:\/\//i.test(n)}function Wn(n){return n==="OUT_OF_HOURS"||n==="QUEUE_FULL"||n==="NO_OPERATOR"?n:null}function os(n){const{metadata:a,...o}=n;return{...o,...a&&typeof a=="object"?a:{}}}function Xn(n){let a=null;const o=[];for(const i of n.split(`
|
|
1
|
+
import{r as s,j as t,a as kt,b as Te,Q as ts,_ as Ws,t as Xs}from"../nexly.js";import{H as Js,P as Vs}from"./use-deferred-rating-XlgCUwcY-DDVOwURi.js";import{j as Ys}from"./PanelInfoVideo-DMU0-9Az-BrU-Qlul.js";import{x as Zs,s as Gs,c as en,a as tn}from"./allowed-elements-BXnLJV1S-C-_lr2zm.js";import{f as sn}from"./assistant-link-components-D0uKk8Hv-xEDu0ls0.js";import{j as nn,X as an}from"./ClickToLoadEmbed-D9eMaBG8-r9dN9klo.js";import"./_commonjsHelpers-C6fGbg64-BC8KDfbh.js";import"./assistant-link-policy-CogLpq-3-Cc-yj-a-.js";const ca={slug:"support-chat",name:"Support Chat",version:"1.0.0",category:"interactive",requiredService:"support-chat",configSchema:{properties:{voiceEnabled:{type:"boolean",default:!0},voiceConversationEnabled:{type:"boolean",default:!1},voiceReadAloudEnabled:{type:"boolean",default:!1},welcomeMessage:{type:"string",default:""},headerTitle:{type:"string",default:""},placeholder:{type:"string",default:""},showSuggestedQuestions:{type:"boolean",default:!0},suggestedQuestions:{type:"array",items:{type:"string"},default:[]},escalationLabel:{type:"string",default:""},humanHandoffButton:{type:"boolean",default:!1}}},defaultConfig:{voiceEnabled:!0,voiceConversationEnabled:!1,voiceReadAloudEnabled:!1,welcomeMessage:"",headerTitle:"",placeholder:"",showSuggestedQuestions:!0,suggestedQuestions:[],escalationLabel:"",humanHandoffButton:!1},dataContract:{serviceSlug:"support-chat",inputSchema:{type:"object",properties:{answer:{type:"string",description:"AI response text"},confidence:{type:"number",description:"Confidence score 0-1"},sources:{type:"array",items:{type:"object",properties:{title:{type:"string"},url:{type:"string"},excerpt:{type:"string"}}},description:"Source citations for the answer"}},required:["answer"]},previewDataOverride:{answer:"Our return policy allows returns within 30 days of purchase. Items must be in original condition with tags attached.",confidence:.85,sources:[{title:"Return Policy",url:"/policies/returns",excerpt:"Returns accepted within 30 days."}]}},fields:[{id:"voiceConversationEnabled",type:"toggle",label:"Voice conversation (live)",default:!1,group:"Voice"},{id:"voiceReadAloudEnabled",type:"toggle",label:"Read messages aloud",default:!1,group:"Voice"},{id:"headerTitle",type:"localized-text",label:"Header title",default:"",placeholder:'Leave empty to use translated default (e.g. "Support")',group:"Content"},{id:"welcomeMessage",type:"localized-text",label:"Welcome message",default:"",placeholder:'Leave empty to use translated default (e.g. "Hi! How can I help you today?")',group:"Content"},{id:"placeholder",type:"localized-text",label:"Input placeholder",default:"",placeholder:'Leave empty to use translated default (e.g. "Ask a question...")',group:"Content"},{id:"escalationLabel",type:"text",label:"Escalation button label",default:"",placeholder:'Leave empty to use translated default (e.g. "Contact Support")',group:"Content"},{id:"humanHandoffButton",type:"toggle",label:'Show "Human" button',default:!1,group:"Behavior"},{id:"showSuggestedQuestions",type:"toggle",label:"Show suggested questions",default:!0,group:"Behavior"},{id:"suggestedQuestions",type:"json",label:"Suggested questions",default:[],placeholder:'["What is your return policy?", "Do you ship internationally?"]',group:"Behavior"}],events:{emits:[{name:"support-chat:messageSent",description:"User sent a message"},{name:"support-chat:escalated",description:"User requested escalation to human support"},{name:"support-chat:feedbackSubmitted",description:"User rated helpfulness of answer"}],listens:[{name:"support-chat:clearHistory",description:"Clear chat history"}]},sizing:{minWidth:280,preferredHeight:"fill",scrollable:!0},supportedPlacements:["main","sidebar","fullscreen"]};function ss({text:n,allowedLinkHosts:a}){return t.jsx("div",{className:"es-sc__bubble-text es-sc__bubble-text--md",children:t.jsx(Zs,{remarkPlugins:[...en],allowedElements:[...Gs],transformLinkUri:o=>tn(o)??"",transformImageUri:()=>"",components:{input:({node:o,type:i,checked:l,...f})=>i==="checkbox"?t.jsx("input",{...f,type:"checkbox",checked:!!l,disabled:!0,readOnly:!0,className:"es-sc__md-task"}):null,...sn({allowedHosts:a})},children:n})})}function rn({media:n,t:a}){const{embeds:o,images:i}=n;return o.length===0&&i.length===0?null:t.jsxs("div",{className:"es-sc__media","data-testid":"support-chat-media",children:[o.map(l=>t.jsx(an,{embed:l,t:a,classPrefix:"es-sc"},`${l.provider}:${l.id}`)),i.map(l=>t.jsx("img",{className:"es-sc__media-img",src:l.src,alt:l.alt||a("support_chat.media_image_alt"),loading:"lazy",decoding:"async",referrerPolicy:"no-referrer"},l.src))]})}function wt(n){return n?n.join(","):""}const on=s.memo(function({text:n,allowEmbeds:a,allowedImageHosts:o,t:i}){const l=wt(o),f=s.useMemo(()=>nn(n,{allowEmbeds:a,allowedImageHosts:o}),[n,a,l]);return t.jsx(rn,{media:f,t:i})},(n,a)=>n.text===a.text&&n.allowEmbeds===a.allowEmbeds&&n.t===a.t&&wt(n.allowedImageHosts)===wt(a.allowedImageHosts));function cn(n,a){const o=Math.round((Date.now()-n.getTime())/1e3);if(o<60)return a("time.just_now");const i=Math.round(o/60);if(i<60)return a("time.minutes_ago",{count:i});const l=Math.round(i/60);if(l<24)return a("time.hours_ago",{count:l});const f=Math.round(l/24);return a("time.days_ago",{count:f})}function us({card:n,t:a,onSelect:o}){const i=t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"es-sc__ticket-card-head",children:[t.jsxs("span",{className:"es-sc__ticket-card-number",children:["#",n.externalNumber]}),t.jsx("span",{className:`es-sc__ticket-card-status es-sc__ticket-card-status--${n.status}`,children:a(`escalation.status_${n.status}`)})]}),n.summary&&t.jsx("p",{className:"es-sc__ticket-card-summary",title:n.summary,children:n.summary}),t.jsxs("p",{className:"es-sc__ticket-card-meta",children:[cn(new Date(n.createdAt),a),n.priority?` · ${a(`support_chat.priority_${n.priority}`)}`:""]})]});if(o&&n.sessionId){const l=n.sessionId;return t.jsx("button",{type:"button",className:"es-sc__ticket-card es-sc__ticket-card--clickable",onClick:()=>o(l),"aria-label":a("support_chat.open_ticket_conversation"),title:a("support_chat.open_ticket_conversation"),children:i})}return t.jsx("div",{className:"es-sc__ticket-card",children:i})}const ln=[{value:"open",key:"support_chat.filter_open"},{value:"closed",key:"support_chat.filter_closed"},{value:"all",key:"support_chat.filter_all"}];function un(n){const{status:a,loading:o,tickets:i,onSelectStatus:l,onSelectSession:f,t:v}=n;return t.jsxs("div",{className:"es-sc__tickets-view",children:[t.jsx("div",{className:"es-sc__tickets-filters",children:ln.map(m=>t.jsx("button",{type:"button",className:`es-sc__tickets-chip${a===m.value?" es-sc__tickets-chip--active":""}`,onClick:()=>l(m.value),children:v(m.key)},m.value))}),t.jsx("div",{className:"es-sc__tickets-view-list",children:o?t.jsx("p",{className:"es-sc__tickets-empty",role:"status","aria-live":"polite",children:"…"}):i.length===0?t.jsx("p",{className:"es-sc__tickets-empty",children:v("support_chat.tickets_empty")}):i.map(m=>t.jsx(us,{card:m,t:v,onSelect:f},m.externalNumber))})]})}const dn=["audio/webm;codecs=opus","audio/webm","audio/mp4"];function pn(){return typeof navigator>"u"||typeof window>"u"?!1:typeof navigator.mediaDevices?.getUserMedia=="function"&&typeof window.MediaRecorder<"u"}function fn(){if(typeof window>"u"||typeof window.MediaRecorder>"u")return;const n=typeof window.MediaRecorder.isTypeSupported=="function";for(const a of dn)if(!n||window.MediaRecorder.isTypeSupported(a))return a}function hn({baseUrl:n,apiKey:a,jwt:o,language:i,onTranscript:l,t:f,disabled:v=!1,streaming:m,voiceStream:g,baseText:b,onText:r}){const[p]=s.useState(pn),[_,k]=s.useState("idle"),[w,E]=s.useState(null),[U,H]=s.useState("idle"),x=!!(m&&g&&b&&r),T=s.useRef(null),ee=s.useRef(null),X=s.useRef([]),J=s.useRef(!0);s.useEffect(()=>()=>{J.current=!1},[]);const ce=s.useRef({baseUrl:n,apiKey:a,jwt:o,language:i,onTranscript:l});s.useEffect(()=>{ce.current={baseUrl:n,apiKey:a,jwt:o,language:i,onTranscript:l}},[n,a,o,i,l]);const le=s.useCallback(()=>{ee.current?.getTracks().forEach(I=>I.stop()),ee.current=null,T.current=null,X.current=[]},[]);s.useEffect(()=>le,[le]);const R=s.useRef(()=>{});R.current=()=>{x&&(U==="connecting"||U==="listening")&&g?.stop()},s.useEffect(()=>()=>R.current(),[]);const O=s.useCallback(async I=>{const{baseUrl:F,apiKey:V,jwt:Y,language:$,onTranscript:P}=ce.current,te=new FormData;te.append("audio",I,"recording.webm"),te.append("language",$);const ae={};V&&(ae["X-API-Key"]=V),Y&&(ae.Authorization=`Bearer ${Y}`);const ke=await fetch(`${F}/api/widget/transcribe`,{method:"POST",headers:ae,credentials:"include",body:te});if(!ke.ok){const Q=new Error(`HTTP ${ke.status}`);throw Q.status=ke.status,Q}const Ie=await ke.json();P(Ie.text??"")},[]),pe=s.useCallback(async()=>{E(null);let I;try{I=await navigator.mediaDevices.getUserMedia({audio:!0})}catch{k("error"),E("voice.permission_denied");return}const F=fn();let V;try{V=F?new MediaRecorder(I,{mimeType:F}):new MediaRecorder(I)}catch{I.getTracks().forEach(Y=>Y.stop()),k("error"),E("voice.error_generic");return}ee.current=I,T.current=V,X.current=[],V.ondataavailable=Y=>{Y.data&&Y.data.size>0&&X.current.push(Y.data)},V.onstop=async()=>{const Y=V.mimeType||F||"audio/webm",$=new Blob(X.current,{type:Y});if(le(),$.size===0){k("idle");return}k("transcribing");try{if(await O($),!J.current)return;k("idle"),E(null)}catch(P){if(!J.current)return;const te=P.status;k("error"),E(te===413?"voice.error_too_large":"voice.error_generic")}},V.start(),k("recording")},[le,O]),ue=s.useCallback(()=>{const I=T.current;I&&I.state!=="inactive"?I.stop():(le(),k("idle"))},[le]),ne=s.useCallback(()=>{p&&(x?U==="connecting"||U==="listening"?(g.stop(),H("idle")):(E(null),g.start({language:i,baseText:b,onText:r,onState:I=>H(I),onError:I=>{E(I),H("error")}})):_==="recording"?ue():(_==="idle"||_==="error")&&pe())},[p,x,U,_,i,b,r,g,pe,ue]);if(!p)return null;const fe=x?U==="connecting"||U==="listening":_==="recording",he=!x&&_==="transcribing",Oe=x?U==="error":_==="error",xe=f(fe?"voice.stop":"voice.start"),me=w?f(w):he?f("voice.transcribing"):xe,ye=["es-sc__mic",fe&&"es-sc__mic--recording",he&&"es-sc__mic--transcribing",Oe&&"es-sc__mic--error"].filter(Boolean).join(" ");return t.jsx("button",{type:"button",className:ye,onClick:ne,disabled:he||v,"aria-label":xe,"aria-pressed":fe,title:me,children:he?t.jsx("svg",{width:18,height:18,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",className:"es-sc__mic-spinner","aria-hidden":"true",children:t.jsx("path",{d:"M21 12a9 9 0 1 1-6.219-8.56"})}):fe?t.jsx("svg",{width:18,height:18,viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",children:t.jsx("rect",{x:"6",y:"6",width:"12",height:"12",rx:"2"})}):t.jsxs("svg",{width:18,height:18,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[t.jsx("path",{d:"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z"}),t.jsx("path",{d:"M19 10v2a7 7 0 0 1-14 0v-2"}),t.jsx("line",{x1:"12",y1:"19",x2:"12",y2:"22"})]})})}function mn(){return t.jsx("svg",{width:14,height:14,viewBox:"0 0 24 24",fill:"currentColor",stroke:"none","aria-hidden":"true",children:t.jsx("path",{d:"M8 5.14v13.72a1 1 0 0 0 1.5.86l11-6.86a1 1 0 0 0 0-1.72l-11-6.86A1 1 0 0 0 8 5.14Z"})})}function gn(){return t.jsxs("svg",{width:14,height:14,viewBox:"0 0 24 24",fill:"currentColor",stroke:"none","aria-hidden":"true",children:[t.jsx("rect",{x:"6",y:"5",width:"4",height:"14",rx:"1"}),t.jsx("rect",{x:"14",y:"5",width:"4",height:"14",rx:"1"})]})}function _n(){return t.jsx("svg",{width:14,height:14,viewBox:"0 0 24 24",fill:"currentColor",stroke:"none","aria-hidden":"true",children:t.jsx("rect",{x:"6",y:"6",width:"12",height:"12",rx:"2"})})}function bn(){return t.jsx("svg",{width:14,height:14,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",className:"es-sc__readaloud-spinner","aria-hidden":"true",children:t.jsx("path",{d:"M21 12a9 9 0 1 1-6.219-8.56"})})}const vn=s.memo(function({id:n,session:a,onActivate:o,t:i}){const l=a.activeId===n?a.status:"idle",f=s.useCallback(()=>{if(l==="idle"||l==="error"){o();return}l!=="loading"&&a.togglePause()},[l,o,a]),v=s.useCallback(()=>a.stop(),[a]),m=i(l==="playing"?"voice_output.pause":"voice_output.play"),g=l==="error"?i("voice_output.error"):m;return t.jsxs("span",{className:"es-sc__readaloud-group",children:[t.jsx("button",{type:"button",className:["es-sc__readaloud-btn",l==="playing"&&"es-sc__readaloud-btn--playing",l==="paused"&&"es-sc__readaloud-btn--paused",l==="error"&&"es-sc__readaloud-btn--error"].filter(Boolean).join(" "),onClick:f,disabled:l==="loading","aria-label":m,"aria-pressed":l==="playing",title:g,children:l==="loading"?t.jsx(bn,{}):l==="playing"?t.jsx(gn,{}):t.jsx(mn,{})}),(l==="playing"||l==="paused")&&t.jsx("button",{type:"button",className:"es-sc__readaloud-btn es-sc__readaloud-btn--stop",onClick:v,"aria-label":i("voice_output.stop"),title:i("voice_output.stop"),children:t.jsx(_n,{})})]})});function xn(n){let a=null,o=0,i=null;const l=new Set,f={ended:new Set},v=g=>{for(const b of[...f[g]])b()},m=g=>{g.onended=null,Xs(()=>g.stop())};return{push(g){const b=new Uint8Array(g);let r;i&&i.length>0?(r=new Uint8Array(i.length+b.length),r.set(i,0),r.set(b,i.length),i=null):r=b;const p=r.length-r.length%2;if(p<r.length&&(i=r.slice(p)),p===0)return;const _=new Int16Array(r.buffer,r.byteOffset,p/2);if(_.length===0)return;a??(a=new AudioContext({sampleRate:n}));const k=a.createBuffer(1,_.length,n);k.getChannelData(0).set(Float32Array.from(_,U=>U/32768));const w=a.createBufferSource();w.buffer=k,w.connect(a.destination),w.onended=()=>{l.delete(w),l.size===0&&v("ended")},l.add(w);const E=Math.max(a.currentTime,o);w.start(E),o=E+k.duration},reset(){for(const g of[...l])m(g);l.clear(),o=0,i=null},pause(){a?.suspend()},resume(){a?.resume()},on(g,b){return f[g].add(b),()=>{f[g].delete(b)}},close(){for(const g of[...l])m(g);l.clear(),a?.close(),a=null,o=0,f.ended.clear()}}}function yn({baseUrl:n,apiKey:a,getJwt:o}){const[i,l]=s.useState(null),[f,v]=s.useState("idle"),m=s.useRef(null),g=s.useRef(null),b=s.useRef([]),r=s.useRef(!1),p=s.useRef(!1),_=s.useRef(!1),k=s.useRef(0),w=s.useRef(null),E=s.useRef(null),U=s.useCallback(()=>{E.current&&(clearTimeout(E.current),E.current=null)},[]),H=s.useCallback(()=>{w.current?.abort(),w.current=null,E.current&&(clearTimeout(E.current),E.current=null),g.current?.close(),g.current=null,b.current=[],r.current=!1,p.current=!1,_.current=!1},[]),x=s.useCallback(()=>{k.current+=1,H(),m.current=null,l(null),v("idle")},[H]),T=s.useCallback(()=>{const R=g.current;R&&v(O=>O==="playing"?(R.pause(),"paused"):O==="paused"?(R.resume(),"playing"):O)},[]),ee=s.useCallback(R=>{if(m.current===R)return;H(),k.current+=1,w.current=new AbortController,m.current=R,l(R),v("loading");const O=k.current;E.current=setTimeout(()=>{O===k.current&&(w.current?.abort(),v("error"))},12e3)},[H]),X=s.useCallback(async R=>{if(!R)return;const O=o?.();await Te(fetch(`${n}/api/widget/read-aloud-play`,{method:"POST",headers:{"Content-Type":"application/json",...a?{"X-API-Key":a}:{},...O?{Authorization:`Bearer ${O}`}:{}},body:JSON.stringify({messageId:R})}))},[n,a,o]),J=s.useCallback((R,O)=>{r.current||(r.current=!0,(async()=>{for(;b.current.length>0;){if(R!==k.current){r.current=!1;return}const pe=b.current.shift();if(!pe)continue;const ue=o?.(),[ne,fe]=await Te(fetch(`${n}/api/widget/read-aloud`,{method:"POST",headers:{"Content-Type":"application/json",...a?{"X-API-Key":a}:{},...ue?{Authorization:`Bearer ${ue}`}:{}},body:JSON.stringify({text:pe,language:O,messageId:m.current??void 0}),signal:w.current?.signal}));if(R!==k.current){r.current=!1;return}if(fe||!ne||!ne.ok||!ne.body){v("error"),r.current=!1;return}const he=ne.headers.get("X-Audio-Encoding");if(he&&he!=="pcm16"){v("error"),r.current=!1;return}if(!g.current){const me=Number(ne.headers.get("X-Audio-Sample-Rate"))||24e3,ye=xn(me);g.current=ye,ye.on("ended",()=>{R===k.current&&(!p.current||b.current.length>0||r.current||x())})}const Oe=g.current,xe=ne.body.getReader();for(;;){const[me,ye]=await Te(xe.read());if(R!==k.current){r.current=!1;return}if(ye){v("error"),r.current=!1;return}const{done:I,value:F}=me;if(I)break;F&&F.byteLength>0&&(Oe.push(F.buffer.slice(F.byteOffset,F.byteOffset+F.byteLength)),_.current||(_.current=!0,U(),v("playing"),X(m.current)))}}r.current=!1,p.current&&!_.current&&R===k.current&&x()})())},[n,a,o,x,X]),ce=s.useCallback((R,O,pe)=>{if(m.current!==R)return;const ue=O.trim();ue&&(b.current.push(ue),J(k.current,pe))},[J]),le=s.useCallback(R=>{m.current===R&&(p.current=!0,b.current.length===0&&!r.current&&!_.current&&x())},[x]);return s.useEffect(()=>()=>x(),[x]),{activeId:i,status:f,activate:ee,feed:ce,finish:le,togglePause:T,stop:x}}const kn=1200;function wn(n={language:"en"}){const{voiceStream:a,language:o,silenceMs:i=kn}=n;let l=null,f=null,v="",m=!1;const g=()=>{f&&clearTimeout(f),f=null},b=()=>{!a||!m||(v="",a.start({language:o,baseText:()=>"",onText:r=>{const p=r.trim();!p||p===v||(v=p,l?.({type:"user_partial",text:p}),g(),f=setTimeout(()=>{const _=v;_&&(v="",l?.({type:"user_final",text:_}),a.stop(),b())},i))},onError:r=>l?.({type:"error",message:r})}))};return{get available(){return!!a},async start({onEvent:r}){if(!a)throw new Error("conversation transport unavailable");l=r,m=!0,b()},stop(){m=!1,g(),v="",a&&a.stop(),l=null}}}function jn(n){let a=null,o=null;return{get available(){return n.enabled&&typeof RTCPeerConnection<"u"},async start({onEvent:i}){o=i;const l={"Content-Type":"application/json","X-API-Key":n.apiKey};n.jwt&&(l.Authorization=`Bearer ${n.jwt}`);const f=n.getSessionId?.()??null,v=await fetch(`${n.baseUrl}/api/widget/realtime-voice`,{method:"POST",headers:l,body:JSON.stringify({language:n.language,...f?{sessionId:f}:{}})});if(!v.ok)throw new Error("eleven token refused");const m=await v.json(),g=m.data?.token;if(m.data?.provider!=="elevenlabs"||!g)throw new Error("not an elevenlabs session");m.data?.sessionId&&n.onSessionId?.(m.data.sessionId);const b=m.data?.endUserToken??"",{Conversation:r}=await Ws(async()=>{const{Conversation:x}=await import("./index-DMQkz1bV-BuMYksln.js");return{Conversation:x}},[]);let p=!1,_=null;const k=.6,w=.35,E=x=>{x!==p&&(p=x,o?.({type:"user_speaking",active:x}))};let U="";const H=x=>{const T=x?.trim();T&&(E(!1),o?.({type:"thinking"}),T!==U&&(U=T,n.onUserTurnEnd?.()))};a=await r.startSession({conversationToken:g,connectionType:"webrtc",customLlmExtraBody:{end_user_token:b},onModeChange:({mode:x})=>{o?.(x==="speaking"?{type:"agent_delta",text:""}:{type:"agent_done"})},onVadScore:({vadScore:x})=>{x>=k?(_&&(clearTimeout(_),_=null),E(!0)):x<=w&&p&&!_&&(_=setTimeout(()=>{_=null,E(!1)},600))},onMessage:({message:x,role:T})=>{const ee=x?.trim();ee&&(T==="user"?H(ee):(n.onTranscript({role:"assistant",text:ee,streaming:!1}),U=""))},onIncomingEvent:x=>{x?.type==="user_transcript"&&H(x.user_transcription_event?.user_transcript)},onAgentTyping:()=>o?.({type:"thinking"}),onAgentChatResponsePart:x=>{const T=x?.text??"";T&&n.onTranscript({role:"assistant",text:T,streaming:!0})},onInterruption:()=>o?.({type:"interrupted"}),onError:x=>{console.warn("[voice] eleven blad:",x),o?.({type:"error",message:"voice_conv.error"})}})},setMuted(i){a?.setMicMuted?.(i)},sendUserMessage(i){const l=i.trim();return!l||!a||(a.sendUserActivity?.(),!a.sendUserMessage)?!1:(a.sendUserMessage(l),!0)},stop(){o=null;const i=a;a=null,i?.endSession()}}}function ns({followUps:n,isNewest:a,isPending:o,hasQuickReplies:i,isSending:l,onSelect:f,t:v}){return!a||o||i||!n||n.length===0?null:t.jsx("div",{className:"es-sc__followups",role:"list","aria-label":v("support_chat.followups_aria"),"data-es-no-read":!0,children:n.map(m=>t.jsx("button",{type:"button",role:"listitem",disabled:l,className:"es-sc__suggestion es-sc__suggestion--followup",onClick:()=>f(m.message),children:m.label},m.message))})}function Cn(n){switch(n){case"OUT_OF_HOURS":return"support_chat.handoff.out_of_hours";case"QUEUE_FULL":return"support_chat.handoff.queue_full";default:return"support_chat.handoff.no_operator_title"}}const jt={email:254,phone:32,note:2e3},Sn={email:"",phone:"",note:""};function Nn(n){const[a,o]=s.useState(()=>Date.now());return s.useEffect(()=>{if(n===null)return;const i=setInterval(()=>o(Date.now()),1e3);return()=>clearInterval(i)},[n]),n===null?null:Math.max(0,Math.ceil((n-a)/1e3))}function Rn({status:n,onSubmitContact:a,onDismissContact:o,t:i}){const[l,f]=s.useState(Sn),[v,m]=s.useState(!1),[g,b]=s.useState(null),r=s.useRef(null),p=Nn(n.kind==="waiting"?n.until:null);return s.useEffect(()=>{n.kind==="unavailable"&&r.current?.focus()},[n.kind]),n.kind==="idle"?null:n.kind==="waiting"?t.jsxs("div",{className:"es-sc__handoff es-sc__handoff--waiting",role:"status","aria-live":"polite",children:[t.jsx("span",{className:"es-sc__handoff-dot","aria-hidden":"true"}),t.jsx("span",{className:"es-sc__handoff-text",children:p===null?i("support_chat.handoff.queued"):i("support_chat.handoff.waiting",{seconds:p})})]}):n.kind==="human"?t.jsx("div",{className:"es-sc__handoff es-sc__handoff--human",role:"status","aria-live":"polite",children:t.jsx("span",{className:"es-sc__handoff-text",children:n.displayName?i("support_chat.handoff.human_joined",{name:n.displayName}):i("support_chat.handoff.human_joined_unnamed")})}):n.kind==="contact_left"?t.jsx("div",{className:"es-sc__handoff es-sc__handoff--done",role:"status","aria-live":"polite",children:t.jsx("span",{className:"es-sc__handoff-text",children:i("support_chat.handoff.contact_success")})}):t.jsxs("form",{className:"es-sc__handoff es-sc__handoff--form",onSubmit:async _=>{if(_.preventDefault(),v)return;if(l.email.trim().length===0&&l.phone.trim().length===0){b(i("support_chat.handoff.contact_validation")),r.current?.focus();return}m(!0),b(null);const k=await a({email:l.email.trim(),phone:l.phone.trim(),note:l.note.trim()});m(!1),k||b(i("support_chat.handoff.contact_error"))},noValidate:!0,children:[t.jsx("p",{className:"es-sc__handoff-title",children:i(Cn(n.reason))}),t.jsx("p",{className:"es-sc__handoff-text",children:i("support_chat.handoff.contact_prompt")}),t.jsx("label",{className:"es-sc__handoff-label",htmlFor:"es-sc-handoff-email",children:i("support_chat.handoff.contact_email_label")}),t.jsx("input",{id:"es-sc-handoff-email",ref:r,className:"es-sc__handoff-input",type:"email",autoComplete:"email",maxLength:jt.email,value:l.email,"aria-invalid":g!==null,"aria-describedby":g?"es-sc-handoff-error":void 0,onChange:_=>f(k=>({...k,email:_.target.value}))}),t.jsx("label",{className:"es-sc__handoff-label",htmlFor:"es-sc-handoff-phone",children:i("support_chat.handoff.contact_phone_label")}),t.jsx("input",{id:"es-sc-handoff-phone",className:"es-sc__handoff-input",type:"tel",autoComplete:"tel",maxLength:jt.phone,value:l.phone,onChange:_=>f(k=>({...k,phone:_.target.value}))}),t.jsx("label",{className:"es-sc__handoff-label",htmlFor:"es-sc-handoff-note",children:i("support_chat.handoff.contact_note_label")}),t.jsx("textarea",{id:"es-sc-handoff-note",className:"es-sc__handoff-input es-sc__handoff-textarea",rows:3,maxLength:jt.note,value:l.note,onChange:_=>f(k=>({...k,note:_.target.value}))}),g&&t.jsx("p",{className:"es-sc__handoff-error",id:"es-sc-handoff-error",role:"alert",children:g}),t.jsxs("div",{className:"es-sc__handoff-actions",children:[t.jsx("button",{className:"es-sc__handoff-submit",type:"submit",disabled:v,children:i("support_chat.handoff.contact_submit")}),t.jsx("button",{className:"es-sc__handoff-dismiss",type:"button",onClick:o,children:i("support_chat.handoff.contact_dismiss")})]})]})}const ds="live:";function De(n){return n.id.startsWith(ds)}function En(n,a){return n.text!==a.text?!0:JSON.stringify(n.metadata??null)!==JSON.stringify(a.metadata??null)}function Tn(n,a){if(a.length===0)return n;const o=new Map;n.forEach((b,r)=>o.set(b.id,r));let i=null;const l=[];let f=!1;for(const b of a){const r=o.get(b.id);if(r===void 0){l.push(b),b.role==="assistant"&&(f=!0);continue}const p=n[r];En(p,b)&&(i??(i=[...n]),i[r]={...p,...b})}if(l.length===0)return i??n;const v=i??[...n],m=f?v.filter(b=>!De(b)):v,g=m.filter(De);return[...m.filter(b=>!De(b)),...l,...g]}function In({transport:n,agentId:a,onUserMessage:o,onStopPlayback:i}){const[l,f]=s.useState("idle"),[v,m]=s.useState(null),[g,b]=s.useState(!1),[r,p]=s.useState(null),_=s.useRef(o);_.current=o;const k=s.useRef(i);k.current=i;const w=s.useCallback(x=>{switch(x.type){case"user_partial":k.current(),m(x.text),f("listening");return;case"user_final":m(null),b(!1),f("listening"),x.text.trim()&&_.current(x.text);return;case"user_speaking":b(x.active),x.active&&(k.current(),f("listening"));return;case"thinking":m(null),b(!1),f("thinking");return;case"agent_delta":f("speaking");return;case"agent_done":f("listening");return;case"interrupted":k.current(),f("listening");return;case"error":p(x.message),f("error");return}},[]),E=s.useCallback(async()=>{if(!n.available){p("voice_conv.error"),f("error");return}p(null),f("connecting"),k.current();const[,x]=await Te(n.start({agentId:a,onEvent:w}));if(x){p("voice_conv.error"),f("error");return}f("listening")},[n,a,w]),U=s.useCallback(()=>{n.stop(),m(null),b(!1),f("idle")},[n]),H=s.useRef(n);return H.current=n,s.useEffect(()=>()=>H.current.stop(),[]),{state:l,draft:v,userSpeaking:g,error:r,start:E,stop:U}}const Mn=()=>t.jsxs("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round","aria-hidden":"true",children:[t.jsx("rect",{x:"9",y:"3",width:"6",height:"11",rx:"3"}),t.jsx("path",{d:"M5 11a7 7 0 0 0 14 0M12 18v3"})]}),as=()=>t.jsxs("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round","aria-hidden":"true",children:[t.jsx("path",{d:"M4 4l16 16"}),t.jsx("path",{d:"M9 5a3 3 0 0 1 6 0v5m-6 1.5V11"}),t.jsx("path",{d:"M5 11a7 7 0 0 0 10.9 5.8M19 11a7 7 0 0 1-.4 2.3M12 18v3"})]}),An=()=>t.jsx("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round","aria-hidden":"true",children:t.jsx("path",{d:"M6 6l12 12M18 6L6 18"})});function Pn({running:n}){const[a,o]=s.useState(0);return s.useEffect(()=>{if(!n)return;const i=setInterval(()=>o(l=>l+1),1e3);return()=>clearInterval(i)},[n]),t.jsx("span",{className:"es-vm__elapsed","data-testid":"voice-mode-elapsed",children:$n(a)})}function $n(n){const a=Math.floor(n/60),o=n%60;return`${a}:${String(o).padStart(2,"0")}`}function Ln({state:n,draft:a,error:o,muted:i,listening:l,hasTranscript:f,transcript:v,onToggleMute:m,onEnd:g,onRetry:b,t:r}){const p=s.useRef(null);if(s.useEffect(()=>{const w=p.current;w&&(w.scrollTop=w.scrollHeight)},[v]),n==="error")return t.jsxs("div",{className:"es-vm","data-testid":"voice-mode",children:[t.jsxs("div",{className:"es-vm__top",children:[t.jsx("span",{className:"es-vm__dot es-vm__dot--error"}),t.jsx("span",{className:"es-vm__label",children:r("voice_conv.title")})]}),t.jsxs("div",{className:"es-vm__denied",children:[t.jsx("div",{className:"es-vm__denied-icon",children:t.jsx(as,{})}),t.jsxs("div",{children:[t.jsx("div",{className:"es-vm__denied-title",children:r("voice_conv.denied_title")}),t.jsx("div",{className:"es-vm__denied-body",children:r(o||"voice_conv.denied_body")})]}),t.jsxs("div",{className:"es-vm__denied-actions",children:[t.jsx("button",{type:"button",className:"es-vm__action es-vm__action--primary",onClick:b,"data-testid":"voice-mode-retry",children:r("voice_conv.retry")}),t.jsx("button",{type:"button",className:"es-vm__action",onClick:g,"data-testid":"voice-mode-back",children:r("voice_conv.back_to_typing")})]})]})]});const _=!i&&(!!l||!!(a&&a.trim())),k=i?"muted":n==="speaking"?"speaking":n==="thinking"?"thinking":"listening";return t.jsxs("div",{className:"es-vm","data-testid":"voice-mode","data-state":n,children:[t.jsxs("div",{className:"es-vm__top",children:[t.jsx("span",{className:"es-vm__label",children:r("voice_conv.title")}),t.jsx(Pn,{running:n!=="idle"})]}),t.jsxs("div",{className:"es-vm__orbwrap",children:[t.jsxs("div",{className:"es-vm__orb","data-s":k,"data-active":_?"1":void 0,"data-testid":"voice-mode-orb","aria-hidden":"true",children:[t.jsx("span",{className:"es-vm__orb-halo"}),t.jsx("span",{className:"es-vm__orb-halo es-vm__orb-halo--delayed"}),t.jsx("span",{className:"es-vm__orb-core"})]}),t.jsx("div",{className:"es-vm__orb-state",role:"status","data-testid":"voice-mode-state",children:r(`voice_conv.state_${k}`)}),t.jsx("div",{className:"es-vm__orb-hint",children:r(`voice_conv.state_${k}_hint`)})]}),t.jsx("div",{className:"es-vm__transcript","data-testid":"voice-mode-transcript",ref:p,children:f?v:t.jsx("div",{className:"es-vm__invite","data-testid":"voice-mode-invite",children:r("voice_conv.invite")})}),t.jsxs("div",{className:"es-vm__controls",children:[t.jsx("button",{type:"button",className:`es-vm__btn${i?" es-vm__btn--on":""}`,"aria-label":r(i?"voice_conv.unmute":"voice_conv.mute"),onClick:m,"data-testid":"voice-mode-mute",children:i?t.jsx(as,{}):t.jsx(Mn,{})}),t.jsx("button",{type:"button",className:"es-vm__btn es-vm__btn--end","aria-label":r("voice_conv.end"),onClick:g,"data-testid":"voice-mode-end",children:t.jsx(An,{})})]})]})}const rs=/[.!?]+(?:['")\]]+)?(\s+)/g;function Un(n){const a=[];let o=0;rs.lastIndex=0;let i;for(;i=rs.exec(n);){const l=i.index+i[0].length,f=n.slice(o,l).trim();f&&a.push(f),o=l}return{complete:a,remainder:n.slice(o)}}function Dn(n,a,o){return n===void 0?o:n.map(i=>{const l=i.translations?.[a]?.trim();return l||i.translations?.[i.baseLanguage]?.trim()||(Object.values(i.translations??{}).find(v=>v?.trim())?.trim()??"")}).filter(i=>i.length>0)}function On({size:n=16}){return t.jsxs("svg",{width:n,height:n,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[t.jsx("circle",{cx:"12",cy:"12",r:"10"}),t.jsx("polyline",{points:"12 6 12 12 16 14"})]})}function qn({size:n=18}){return t.jsxs("svg",{width:n,height:n,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[t.jsx("path",{d:"M12 5H5a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7"}),t.jsx("path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z"})]})}function Bn({size:n=16}){return t.jsxs("svg",{width:n,height:n,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[t.jsx("path",{d:"M2 9a3 3 0 1 1 0 6v2a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-2a3 3 0 1 1 0-6V7a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z"}),t.jsx("path",{d:"m9 12 2 2 4-4"})]})}const Hn=["confirm_escalation","cancel_escalation","confirm_handoff","decline_handoff"],Fn="<followups>",Kn=/<followups>/i;function zn(n){const a=n.search(Kn);if(a!==-1)return n.slice(0,a).trimEnd();const o=n.lastIndexOf("<");return o!==-1&&Fn.startsWith(n.slice(o).toLowerCase())?n.slice(0,o).trimEnd():n}function is(n){return n>=.6?"high":n>=.35?"medium":"low"}function Qn(n){return/^https?:\/\//i.test(n)}function Wn(n){return n==="OUT_OF_HOURS"||n==="QUEUE_FULL"||n==="NO_OPERATOR"?n:null}function os(n){const{metadata:a,...o}=n;return{...o,...a&&typeof a=="object"?a:{}}}function Xn(n){let a=null;const o=[];for(const i of n.split(`
|
|
2
2
|
`))i.startsWith("event:")?a=i.slice(6).trim():i.startsWith("data:")&&o.push(i.slice(5).trimStart());return{event:a,data:o.join(`
|
|
3
3
|
`)}}const Jn=12e4,cs=1500,Vn=6e4,ls=120,Yn=25e3,Zn=600;function Gn({value:n,onChange:a,disabled:o,t:i}){const[l,f]=s.useState(null),v=n??0,m=!o&&l!==null?l:v;return t.jsxs("div",{className:"es-sc__rating-group",children:[t.jsx("div",{className:"es-sc__rating",role:"radiogroup","aria-label":i("support_chat.rate_aria"),onMouseLeave:()=>!o&&f(null),children:[1,2,3,4,5].map(g=>{const b=g<=m;return t.jsx("button",{type:"button",role:"radio","aria-checked":g===v,"aria-label":i("support_chat.rate_star",{count:g}),disabled:o,onMouseEnter:()=>!o&&f(g),onFocus:()=>!o&&f(g),onBlur:()=>!o&&f(null),onClick:()=>!o&&a?.(g),className:`es-sc__rating-star${b?" es-sc__rating-star--filled":""}${o?" es-sc__rating-star--disabled":""}`,children:t.jsx("svg",{width:16,height:16,viewBox:"0 0 24 24",fill:b?"currentColor":"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:t.jsx("polygon",{points:"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"})})},g)})}),t.jsx("span",{className:"es-sc__rating-label","aria-live":"polite",children:m>0?i(`support_chat.rate_label_${m}`):""})]})}function la({config:n,actions:a,baseUrl:o,externalContext:i,productId:l,i18n:f,supportSessionId:v,auth:m,readOnly:g}){const b=g===!0,r=f?.t??(e=>e),p=i?.apiKey??"",_=s.useRef(m?.jwt);s.useEffect(()=>{_.current=m?.jwt},[m?.jwt]);const k=i?.voice,w=f?.currentLanguage??"en",E=!!k?.enabled&&(k?.languages??[]).includes(w),U=n.voiceConversationEnabled===!0,H=n.voiceReadAloudEnabled===!0,x=i?.voiceOutput,T=yn({baseUrl:o,apiKey:p,getJwt:()=>_.current}),ee=s.useRef(T);ee.current=T;const X=H&&!!x?.enabled&&(x?.languages??[]).includes(w),J=s.useRef(0),ce=i?.userContext??void 0,le=i?.resetSession??!1,R=i?.showTicketsTab??!1,O=kt(n.welcomeMessage,w,{t:r,fallbackKey:"support_chat.welcome_message",enDefault:"Hi! How can I help you today?"}),pe=kt(n.placeholder,w,{t:r,fallbackKey:"support_chat.input_placeholder",enDefault:"Ask a question..."}),ue=n.showSuggestedQuestions??!0,ne=Dn(n.localizedSuggestedQuestions,w,n.suggestedQuestions??[]),fe=n.escalationLabel||r("support_chat.escalation_label"),he=n.humanHandoffButton===!0,Oe=kt(n.headerTitle,w,{t:r,fallbackKey:"support.title",enDefault:"Support"}),xe=n.allowedLinkHosts,me=s.useMemo(()=>Array.isArray(xe)?xe.filter(e=>typeof e=="string"):void 0,[xe]),ye=n.allowMediaEmbeds===!0,I=typeof n._draft=="string"?n._draft:void 0,F=n._autoSend===!0,V=Array.isArray(n._quickChips)?n._quickChips:[],Y=JSON.stringify(V),[$,P]=s.useState([]);s.useEffect(()=>{if(!X)return;const e=T.activeId;if(!e){J.current=0;return}const c=$.find(h=>h.id===e);if(!c)return;const u=c.role==="assistant"&&c.refusalReason?r(`support_chat.refusal_${c.refusalReason}`,{productName:c.refusalProductName??""}):c.text??"";if(u.length>J.current){const h=u.slice(J.current),{complete:d,remainder:j}=Un(h);if(d.length>0){J.current=u.length-j.length;for(const C of d)T.feed(e,C,w)}}if(!c.isPending){const h=u.slice(J.current).trim();h&&(T.feed(e,h,w),J.current=u.length),T.finish(e)}},[$,T,X,w]);const[te,ae]=s.useState(""),[ke,Ie]=s.useState([]),[Q,qe]=s.useState(!1),[Ct,Ye]=s.useState(null),[Be,Ze]=s.useState(null),[W,Ne]=s.useState(v??null),[Me,it]=s.useState(null),[ot,ps]=s.useState(!1),[Re,St]=s.useState(null),[fs,Nt]=s.useState(0),[Ae,hs]=s.useState("open"),[ms,He]=s.useState([]),[gs,Ge]=s.useState(!1),[re,Fe]=s.useState("chat"),[Rt,ie]=s.useState({kind:"idle"}),Ee=s.useRef(null),et=s.useRef(le),Et=s.useRef(null),ct=s.useRef(!1),{containerRef:_s,isPinned:bs,scrollToBottom:Pe,stickToBottom:Tt}=Js(),Z=s.useRef(null),ge=s.useRef(null),tt=s.useRef(null),st=s.useRef(null);s.useEffect(()=>{Tt()},[$,Tt]),s.useEffect(()=>()=>{ge.current?.abort()},[]),s.useEffect(()=>{if(Me==null)return;const e=Me-Date.now();if(e<=0){it(null);return}const c=setTimeout(()=>it(null),e);return()=>clearTimeout(c)},[Me]),s.useEffect(()=>{if(Re==null)return;const e=()=>{const u=Re-Date.now();if(u<=0){St(null),Nt(0);return}Nt(Math.ceil(u/1e3))};e();const c=setInterval(e,1e3);return()=>clearInterval(c)},[Re]);const $e=s.useRef(null),we=s.useCallback(()=>{$e.current&&($e.current.cancelled=!0),$e.current=null},[]);s.useEffect(()=>a.on("support-chat:clearHistory",()=>{ge.current?.abort(),we(),P([]),Ye(null),Ze(null),qe(!1),Ne(null),st.current=null,et.current=!0}),[a,we]),s.useEffect(()=>{a.emit("support-chat:session",{sessionId:W})},[a,W]);const It=s.useCallback((e,c,u)=>{we();const h={cancelled:!1};$e.current=h;const d=u?.trim()?u:null,j=`resume-${crypto.randomUUID()}`;P(D=>[...D,{id:j,role:"assistant",text:d??"",isPending:!d}]),Pe();const C=Date.now()+(d?6e3:Vn),S=async()=>{if(h.cancelled)return;let D=null;try{const y=_.current,M=await fetch(`${o}/api/support-chat/sessions/${e}/messages?limit=50`,{headers:{...p?{"X-API-Key":p}:{},...y?{Authorization:`Bearer ${y}`}:{}}});if(M.ok){const z=await M.json(),ve=z.success&&z.data?z.data.messages:[];for(let A=ve.length-1;A>=0;A--){const K=ve[A];if(K.role!=="assistant")continue;const N=K.createdAt?Date.parse(K.createdAt):NaN;if(Number.isFinite(N)&&N>c){D=K;break}}}}catch{}if(!h.cancelled){if(D){const y=D.metadata??{},M=y.confidence,z=typeof M=="number"?is(M):void 0;P(ve=>ve.map(A=>A.id===j?{...A,id:D.id,serverId:D.id,promptLogId:D.promptLogId??null,text:D.content,isPending:!1,confidence:M,confidenceLevel:z,sources:y.sources&&y.sources.length>0?y.sources:void 0,actions:y.actions&&y.actions.length>0?y.actions:void 0,quickReplies:y.quickReplies&&y.quickReplies.length>0?y.quickReplies:void 0,ticketCards:y.ticketCards&&y.ticketCards.length>0?y.ticketCards:void 0,suggestedFollowUps:y.suggestedFollowUps&&y.suggestedFollowUps.length>0?y.suggestedFollowUps:void 0,awaitingConfirmation:y.awaitingConfirmation,refusalReason:y.refusalReason,refusalProductName:y.refusalProductName}:A)),Pe(),$e.current=null;return}if(Date.now()>=C){d||P(y=>y.map(M=>M.id===j?{...M,text:r("support_chat.error_message"),isPending:!1}:M)),$e.current=null;return}setTimeout(S,cs)}};setTimeout(S,cs)},[p,o,we,Pe,r]),Ke=s.useCallback(async(e,c)=>{try{const u=_.current,h=await fetch(`${o}/api/support-chat/sessions/${e}/messages?limit=50`,{headers:{...p?{"X-API-Key":p}:{},...u?{Authorization:`Bearer ${u}`}:{}}});if(!h.ok)return;const d=await h.json();if(!d.success||!d.data)return;const j=d.data.messages.filter(y=>y.role==="user"||y.role==="assistant").map(y=>{const M=y.metadata??void 0,z=M?.ticketCards&&M.ticketCards.length>0?M.ticketCards:void 0;return{id:y.id,role:y.role,text:y.content,promptLogId:y.promptLogId??null,rating:y.userScore??null,...z?{ticketCards:z}:{},...M?.suggestedFollowUps&&M.suggestedFollowUps.length>0?{suggestedFollowUps:M.suggestedFollowUps}:{},...M?.refusalReason?{refusalReason:M.refusalReason,refusalProductName:M.refusalProductName}:{}}}),C=j.length-1,S=C>=0?j[C]:void 0;if(S&&S.role==="assistant"){const y=d.data.messages[d.data.messages.length-1]?.metadata;y?.quickReplies&&y.quickReplies.length>0&&(j[C]={...S,quickReplies:y.quickReplies,...y.awaitingConfirmation?{awaitingConfirmation:y.awaitingConfirmation}:{}})}P(j),st.current=e;const D=d.data.messages[d.data.messages.length-1];if(D&&D.role==="user"){const y=D.createdAt?Date.parse(D.createdAt):NaN;Number.isFinite(y)&&Date.now()-y<Jn&&It(e,y,c)}}catch{}},[p,o,It]),_e=s.useCallback(async e=>{if(!R)return[];try{const c=_.current,u=await fetch(`${o}/api/widget/support-chat/tickets?status=${e}`,{headers:{...p?{"X-API-Key":p}:{},...c?{Authorization:`Bearer ${c}`}:{}}});if(!u.ok)return[];const h=await u.json();return h.data?.counts&&h.data?.tickets?h.data.tickets:[]}catch{return[]}},[o,p,R]);s.useEffect(()=>{let e=!1;return(async()=>{const c=await _e("open").catch(()=>[]);e||He(c)})(),()=>{e=!0}},[_e,m?.jwt]);const vs=s.useCallback(async e=>{hs(e),Ge(!0);const c=await _e(e).catch(()=>[]);He(c),Ge(!1)},[_e]),Mt=s.useRef(!1);s.useEffect(()=>{Mt.current||v&&m?.jwt&&(Mt.current=!0,Ke(v))},[m?.jwt,v,Ke]),s.useEffect(()=>we,[we]),s.useEffect(()=>a.on("support-chat:select-session",e=>{const{sessionId:c}=e;Fe("chat"),!(!c||c===st.current)&&(ge.current?.abort(),P([]),Ye(null),Ze(null),qe(!1),Ne(c),Ke(c))}),[a,Ke]);const je=s.useCallback(()=>{const e=Z.current;if(!e)return;e.style.height="auto";const c=e.scrollHeight>ls;e.style.height=`${Math.min(e.scrollHeight,ls)}px`,e.style.overflowY=c?"auto":"hidden"},[]);s.useEffect(()=>{je()},[je]);const lt=s.useCallback((e,c)=>{const u=c.metadata??{},h=u.confidence,d=typeof h=="number"?is(h):void 0;P(j=>j.map(C=>C.id===e?{...C,id:c.id,serverId:c.id,promptLogId:c.promptLogId,rating:null,text:c.content,isPending:!1,confidence:h,confidenceLevel:d,sources:u.sources&&u.sources.length>0?u.sources:void 0,actions:u.actions&&u.actions.length>0?u.actions:void 0,quickReplies:u.quickReplies&&u.quickReplies.length>0?u.quickReplies:void 0,ticketCards:u.ticketCards&&u.ticketCards.length>0?u.ticketCards:void 0,suggestedFollowUps:u.suggestedFollowUps&&u.suggestedFollowUps.length>0?u.suggestedFollowUps:void 0,awaitingConfirmation:u.awaitingConfirmation,refusalReason:u.refusalReason,refusalProductName:u.refusalProductName}:C))},[]),At=s.useCallback(e=>{ps(!0),P(c=>c.map(u=>u.id===e?{...u,role:"assistant",text:r("support_chat.demo_quota_reached"),isPending:!1}:u))},[r]),ut=s.useCallback((e,c)=>{it(c??Date.now()+6e4),P(u=>u.map(h=>h.id===e?{...h,role:"assistant",text:r("support_chat.daily_limit_reached"),isPending:!1}:h))},[r]),dt=s.useCallback((e,c)=>{const u=typeof c=="number"&&c>0?c:6e4;St(Date.now()+u);const h=Math.ceil(u/1e3);P(d=>d.map(j=>j.id===e?{...j,role:"assistant",text:r("support_chat.rate_limited",{seconds:String(h)}),isPending:!1}:j))},[r]),Pt=s.useCallback((e,c)=>{P(u=>u.filter(h=>h.id!==e)),ie(c==="human"?{kind:"human",displayName:null}:{kind:"waiting",until:Ee.current})},[]),Ce=s.useCallback(()=>{ct.current&&(ct.current=!1,a.emit("chat:draftConsumed",void 0))},[a]),G=s.useCallback(async(e,c)=>{const u=e.trim();if(!u)return;Ce(),we(),ge.current?.abort(),ge.current=new AbortController,Ye(null),Ze(null),ae(""),Ie([]),Z.current&&(Z.current.style.height="auto");const h={id:`user-${crypto.randomUUID()}`,role:"user",text:u},d=`assistant-${crypto.randomUUID()}`,j={id:d,role:"assistant",text:"",isPending:!0};P(A=>[...A,h,j]),Pe(),qe(!0),tt.current=d;const C=Date.now(),S=async()=>{const A=Zn-(Date.now()-C);A>0&&await new Promise(K=>setTimeout(K,A))};a.emit("support-chat:messageSent",{text:u});const[D]=await Te(async()=>await m?.ensureValidToken?.()??null),y=D??_.current,M={"Content-Type":"application/json",...p?{"X-API-Key":p}:{},...y?{Authorization:`Bearer ${y}`}:{}},z=et.current||W===null;let ve=!1;try{if(c?.quickReplyClick){const q=await fetch(`${o}/api/widget/support-chat/message`,{method:"POST",headers:M,body:JSON.stringify({message:u,productId:l,...z?{newSession:!0}:{},...ce?{userContext:os(ce)}:{},quickReplyClick:c.quickReplyClick}),signal:ge.current.signal}),B=await q.json();if(q.status===429&&B?.error?.code==="DAILY_TOKEN_LIMIT_EXCEEDED"){await S(),ut(d,B.error.resetAtMs);return}if(q.status===429&&B?.error?.code==="DEMO_QUOTA_EXCEEDED"){await S(),At(d);return}if(q.status===429&&B?.error?.code==="RATE_LIMITED"){await S(),dt(d,B.error.retryAfterMs);return}if(q.status===409&&B?.error?.code==="HANDOFF_ACTIVE"){await S(),Pt(d,B.data?.handoffState),B.data?.sessionId&&Ne(B.data.sessionId);return}if(!q.ok||!B.success||!B.data)throw new Error(B.error?.message??`HTTP ${q.status}`);Ne(B.data.sessionId),et.current=!1,lt(d,B.data.assistantMessage),c.quickReplyClick.payload==="confirm_handoff"&&((B.data.assistantMessage.metadata?.toolCalls?.includes("request_human_handoff")??!1)||(ie({kind:"idle"}),Ee.current=null)),_e(Ae).then(bt=>He(bt));return}let A;const K=()=>{A&&clearTimeout(A),A=setTimeout(()=>{ve=!0,ge.current?.abort()},Yn)};K();const N=ge.current;if(!N){clearTimeout(A);return}const[Se,Zt]=await Te(async()=>{const q=await fetch(`${o}/api/widget/support-chat/stream`,{method:"POST",headers:M,body:JSON.stringify({message:u,productId:l,...z?{newSession:!0}:{},...ce?{userContext:os(ce)}:{}}),signal:N.signal});if(!q.ok||!q.body){const se=await q.json().catch(()=>null);if(q.status===429&&se?.error?.code==="DAILY_TOKEN_LIMIT_EXCEEDED")return{dailyLimitResetAtMs:se.error.resetAtMs};if(q.status===429&&se?.error?.code==="DEMO_QUOTA_EXCEEDED")return{demoQuotaExhausted:!0};if(q.status===429&&se?.error?.code==="RATE_LIMITED")return{rateLimitRetryAfterMs:se.error.retryAfterMs??6e4};if(q.status===409&&se?.error?.code==="HANDOFF_ACTIVE")return se.data?.sessionId&&Ne(se.data.sessionId),{handoffState:se.data?.handoffState??null};throw new Error(se?.error?.message??`HTTP ${q.status}`)}const B=q.body.getReader(),bt=new TextDecoder;let Xe="",Gt="",es=!1;for(;;){const{done:se,value:Ks}=await B.read();if(se)break;K(),Xe+=bt.decode(Ks,{stream:!0});let vt;for(;(vt=Xe.indexOf(`
|
|
4
4
|
|
|
5
5
|
`))!==-1;){const zs=Xe.slice(0,vt);Xe=Xe.slice(vt+2);const{event:Je,data:Ve}=Xn(zs);if(!(!Je||!Ve)){if(Je==="start"){const de=JSON.parse(Ve);de.sessionId&&(Ne(de.sessionId),st.current=de.sessionId),et.current=!1}else if(Je==="token"){const de=JSON.parse(Ve);Gt+=de.value??"";const xt=zn(Gt);P(Qs=>Qs.map(yt=>yt.id===d?{...yt,text:xt}:yt))}else if(Je==="meta"){const de=JSON.parse(Ve);lt(d,de.assistantMessage),_e(Ae).then(xt=>He(xt)),es=!0}else if(Je==="error"){const de=JSON.parse(Ve);if(de.code==="HANDOFF_ACTIVE")return{handoffState:null};throw new Error(de.message??"Stream error")}}}}if(!es)throw new Error("Stream ended before completion");return null});if(A&&clearTimeout(A),Zt)throw Zt;if(Se&&"handoffState"in Se){await S(),Pt(d,Se.handoffState);return}if(Se?.dailyLimitResetAtMs!==void 0){await S(),ut(d,Se.dailyLimitResetAtMs);return}if(Se?.demoQuotaExhausted){await S(),At(d);return}if(Se?.rateLimitRetryAfterMs!==void 0){await S(),dt(d,Se.rateLimitRetryAfterMs);return}}catch(A){if(A instanceof Error&&A.name==="AbortError"&&!ve){P(K=>K.filter(N=>N.id!==d));return}await S(),P(K=>K.filter(N=>N.id!==d)),tt.current===d&&(Ze({text:u,options:c}),Ye(r("support_chat.error_message")))}finally{tt.current===d&&qe(!1)}},[a,o,ce,p,l,r,lt,ut,dt,_e,Ae,Pe,m,we,Ce]),be=k?.realtimeProvider==="elevenlabs",[pt,ft]=s.useState([]),$t=s.useRef(0),ze=s.useRef([]);ze.current=pt;const nt=s.useRef(null),ht=s.useRef(null),Lt=s.useRef(new Set),mt=s.useRef(new Set),Qe=s.useRef(!1),Le=s.useRef(null),gt=s.useRef(null),at=s.useRef(!1),Ut=s.useRef(W);Ut.current=W;const Dt=k?.realtime===!0,Ot=s.useRef(i?.voiceStream);Ot.current=i?.voiceStream;const qt=s.useMemo(()=>{if(be){const e=jn({baseUrl:o,apiKey:p,jwt:_.current,language:w,enabled:!0,getSessionId:()=>Ut.current,onSessionId:c=>{ht.current=c,Ne(c)},onUserTurnEnd:()=>Le.current?.(),onTranscript:c=>ft(u=>{const h=u[u.length-1];if(!(h&&De(h)&&h.streaming&&h.role===c.role)){$t.current+=1;const j=`${ds}${$t.current}`;return[...u,{id:j,role:c.role,text:c.text,streaming:c.streaming}]}const d=c.role==="assistant"&&c.streaming?h.text+c.text:c.text;return[...u.slice(0,-1),{...h,text:d,streaming:c.streaming}]})});return nt.current=e,e}return nt.current=null,wn({voiceStream:Ot.current,language:w})},[be,o,p,w]),L=In({transport:qt,agentId:i?.voiceAgentId??"",onUserMessage:e=>{G(e)},onStopPlayback:()=>ee.current?.stop()}),Bt=L.state!=="idle"&&L.state!=="error",oe=L.state!=="idle",Ht=s.useRef(!1);s.useEffect(()=>{const e=Ht.current;if(Ht.current=oe,!oe){const c=(()=>{const u=ze.current;for(let h=u.length-1;h>=0;h-=1){const d=u[h];if(d&&d.role==="assistant"&&d.text?.trim())return d.text}return null})();if(ft([]),e){const u=ht.current??W;u&&Ke(u,c??void 0)}}},[oe]),s.useEffect(()=>{try{window.dispatchEvent(new CustomEvent("es-support-voice-mode",{detail:{active:oe}}))}catch{}},[oe]),s.useEffect(()=>{if(!be||!oe){Lt.current=new Set,mt.current=new Set,Qe.current=!1,Le.current=null;return}let e=!1,c=!1;at.current=!1;const u=async(C=!1)=>{const S=ht.current??W;if(!S||e)return!1;const D=_.current;let y=null;try{const N=await fetch(`${o}/api/support-chat/sessions/${S}/messages?limit=30`,{headers:{...p?{"X-API-Key":p}:{},...D?{Authorization:`Bearer ${D}`}:{}}});if(!N.ok)return!1;y=await N.json()}catch{return!1}if(e)return!1;const M=y?.data?.messages??[],z=Lt.current;if(!Qe.current){if(!C)return!1;for(const N of M)N.id&&mt.current.add(N.id),N.role==="user"&&N.id&&z.add(N.id);return Qe.current=!0,!1}const ve=mt.current,A=M.filter(N=>N.id&&N.content?.trim()&&(N.role==="user"||N.role==="assistant")&&!ve.has(N.id)).map(N=>({id:N.id,role:N.role,text:N.content,...N.metadata?{metadata:N.metadata}:{}}));if(A.length===0)return!1;ft(N=>Tn(N,A));const K=A.filter(N=>N.role==="user"&&!z.has(N.id));if(K.length===0)return!1;for(const N of K)z.add(N.id);return at.current=!0,!0},h=async()=>{if(!(c||e)){c=!0;for(let C=0;C<10&&!e&&!await u(!1);C++)await new Promise(S=>setTimeout(S,500));c=!1}};let d=0;const j=5e3;return Le.current=()=>{if(at.current)return;const C=Date.now();C-d<j||(d=C,h())},gt.current=async()=>{for(let C=0;C<6&&!e;C+=1){if(await u(!1),!ze.current.some(De))return;await new Promise(S=>setTimeout(S,700))}},(async()=>{for(let C=0;C<4&&!e&&!Qe.current;C+=1){if(await u(!0),Qe.current)return;await new Promise(S=>setTimeout(S,300))}})(),()=>{e=!0,Le.current=null,gt.current=null}},[be,oe,W,o,p]);const Ft=s.useRef(!1);s.useEffect(()=>{const e=Ft.current;Ft.current=L.userSpeaking,!e&&L.userSpeaking&&(at.current=!1),e&&!L.userSpeaking&&Le.current?.()},[L.userSpeaking]);const Kt=s.useRef(L.state);s.useEffect(()=>{const e=Kt.current;Kt.current=L.state,(L.state==="thinking"||L.state==="speaking")&&!(e==="thinking"||e==="speaking")&&Le.current?.()},[L.state]);const We=s.useRef(null);s.useEffect(()=>{if(!be||!oe)return;const e=ze.current[ze.current.length-1];if(!(!e||!De(e)||e.role!=="assistant"||!e.text.trim()))return We.current&&clearTimeout(We.current),We.current=setTimeout(()=>{gt.current?.()},900),()=>{We.current&&clearTimeout(We.current)}},[pt,be,oe]);const[zt,xs]=s.useState(!1),[ys,Qt]=s.useState(!1),ks=s.useCallback(e=>{nt.current?.sendUserMessage(e)&&Qt(!0)},[]);s.useEffect(()=>{(L.state==="thinking"||L.state==="speaking")&&Qt(!1)},[L.state]);const Ue=be?pt.map(e=>({key:e.id,role:e.role,text:e.text,...e.metadata?{metadata:e.metadata}:{},...e.streaming?{streaming:!0}:{}})):$.map(e=>{const c=e.role==="assistant"&&e.refusalReason?r(`support_chat.refusal_${e.refusalReason}`,{productName:e.refusalProductName??""}):e.text;return c?{key:e.id,role:e.role==="assistant"?"assistant":"user",text:c,confidence:e.confidenceLevel}:null}).filter(e=>e!==null),ws=be&&oe&&Ue.length>0&&Ue[Ue.length-1].role==="user",js=t.jsxs("div",{className:"es-sc__messages",children:[Ue.map((e,c)=>{const u=c===Ue.length-1;return t.jsxs("div",{className:`es-sc__bubble es-sc__bubble--${e.role}`,"data-confidence":e.confidence,children:[e.role==="assistant"?t.jsx(ss,{text:e.text,allowedLinkHosts:me}):t.jsx("div",{className:"es-sc__bubble-text",children:e.text}),e.role==="assistant"&&t.jsx(ns,{followUps:e.metadata?.suggestedFollowUps,isNewest:u,isPending:!!e.streaming,hasQuickReplies:!!e.metadata?.quickReplies?.length,isSending:ys,onSelect:ks,t:r})]},e.key)}),ws?t.jsx("div",{className:"es-vm__answer-pending",role:"status","aria-label":r("voice_conv.thinking"),children:t.jsxs("div",{className:"es-vm__answer-wave",children:[t.jsx("span",{}),t.jsx("span",{}),t.jsx("span",{}),t.jsx("span",{}),t.jsx("span",{})]})}):null]}),Wt=s.useRef(null);s.useEffect(()=>{if(Dt||!Bt||!T||!X)return;const e=$[$.length-1];!e||e.role!=="assistant"||Wt.current!==e.id&&(Wt.current=e.id,T.activate(e.id))},[$,Bt,T,X]);const _t=s.useCallback(()=>{const e=i?.voiceStream;e?.getState&&e.getState()!=="idle"&&e.stop(),G(te)},[te,G,i]),Cs=s.useCallback(()=>{ge.current?.abort(),qe(!1);const e=tt.current;e&&P(c=>c.filter(u=>u.id!==e))},[]),Ss=s.useCallback(()=>{Be&&G(Be.text,Be.options)},[Be,G]),Ns=s.useCallback(e=>{if(e.autoSend){G(e.message);return}Ie([]),ae(""),Ce(),Z.current&&(Z.current.style.height="auto",Z.current.focus())},[G,Ce]);s.useEffect(()=>{if(!(I!==void 0||V.length>0))return;const e=`${I}${String(F)}${Y}`;if(Et.current!==e){if(Et.current=e,ct.current=!0,F&&I!==void 0){Ie([]),G(I);return}Ie(V),I!==void 0&&(ae(I),requestAnimationFrame(()=>{je(),Z.current?.focus()}))}},[I,F,Y,G]),s.useEffect(()=>{const e=i?.voiceStream;e?.getState&&e.getState()!=="idle"&&e.stop()},[v]);const Rs=s.useCallback(e=>{e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),_t())},[_t]),Es=s.useCallback(e=>{Ce(),ae(e.target.value),je()},[je,Ce]),Ts=s.useCallback(()=>{Ce(),ae(""),Z.current&&(Z.current.style.height="auto",Z.current.focus())},[Ce]),Is=s.useCallback(e=>{const c=e.trim();c&&(ae(u=>u?`${u} ${c}`:c),requestAnimationFrame(()=>{je(),Z.current?.focus()}))},[je]),Ms=s.useCallback(e=>{a.emit("support-chat:escalated",{messageId:e})},[a]),Xt=s.useRef($);s.useEffect(()=>{Xt.current=$},[$]);const As=s.useCallback(({messageId:e,rating:c},{keepalive:u})=>{const h=Xt.current.find(d=>d.id===e);!h||!h.promptLogId||_.current&&(P(d=>d.map(j=>j.id===e?{...j,rating:c,ratingPending:!0}:j)),(async()=>{const[d,j]=await Te(fetch(`${o}/api/widget/ai-feedback`,{method:"POST",keepalive:u,headers:{"Content-Type":"application/json",...p?{"X-API-Key":p}:{},Authorization:`Bearer ${_.current}`},body:JSON.stringify({promptLogId:h.promptLogId,rating:c})}));if(!j&&d.status===409){P(C=>C.map(S=>S.id===e?{...S,rating:c,ratingPending:!1}:S));return}if(j||!d.ok){P(C=>C.map(S=>S.id===e?{...S,rating:null,ratingPending:!1}:S));return}P(C=>C.map(S=>S.id===e?{...S,rating:c,ratingPending:!1}:S)),a.emit("support-chat:feedbackSubmitted",{messageId:e,rating:c})})())},[a,p,o]),{pending:Jt,rate:Vt,undo:Ps}=Vs({submit:As}),$s=s.useCallback((e,c)=>{const u=$.find(h=>h.id===e);!u||!u.promptLogId||u.ratingPending||_.current&&Vt(e,c)},[$,Vt]),Ls=s.useCallback(()=>{Fe("chat"),ie({kind:"idle"}),Ee.current=null,a.emit("support-chat:clearHistory",void 0)},[a]),Us=s.useCallback(async()=>{if(!W)return;const e=_.current;try{const c=await fetch(`${o}/api/widget/support-chat/handoff/request`,{method:"POST",headers:{"Content-Type":"application/json",...p?{"X-API-Key":p}:{},...e?{Authorization:`Bearer ${e}`}:{}},body:JSON.stringify({sessionId:W,productId:l,conversationLanguage:w})}),u=await c.json();if(!c.ok||!u.success){ie({kind:"idle"});return}if(u.data?.outcome==="unavailable"){ie({kind:"unavailable",reason:Wn(u.data.reason)});return}if(u.data?.outcome==="already_active"){ie(u.data.state==="human"?{kind:"human",displayName:null}:{kind:"waiting",until:Ee.current});return}if(u.data?.outcome==="offered"){const h=u.data.acceptTimeoutSec;Ee.current=typeof h=="number"?Date.now()+h*1e3:null,ie({kind:"waiting",until:Ee.current})}}catch{ie({kind:"idle"})}},[p,o,w,l,W]),Ds=s.useCallback(async e=>{if(!W)return!1;const c=_.current;try{const u=await fetch(`${o}/api/widget/support-chat/handoff/contact`,{method:"POST",headers:{"Content-Type":"application/json",...p?{"X-API-Key":p}:{},...c?{Authorization:`Bearer ${c}`}:{}},body:JSON.stringify({sessionId:W,productId:l,...e.email?{email:e.email}:{},...e.phone?{phone:e.phone}:{},...e.note?{note:e.note}:{}})}),h=await u.json();return!u.ok||!h.success?!1:(ie({kind:"contact_left"}),!0)}catch{return!1}},[p,o,l,W]),Os=s.useCallback(()=>{ie({kind:"idle"})},[]),rt=s.useCallback(()=>{Fe("tickets"),Ge(!0),_e(Ae).then(e=>He(e)).catch(()=>{}).finally(()=>Ge(!1))},[_e,Ae]),qs=s.useCallback(()=>{re==="tickets"?Fe("chat"):rt()},[re,rt]),Bs=s.useCallback(e=>{Fe("chat"),a.emit("support-chat:select-session",{sessionId:e})},[a]);s.useEffect(()=>R?a.on("support-chat:showTickets",()=>{rt()}):void 0,[a,rt,R]);const Hs=s.useCallback((e,c,u)=>{P(j=>j.map(C=>C.id===e?{...C,quickReplyAnswered:c}:C));const h=$.find(j=>j.id===e)?.awaitingConfirmation,d=Hn.includes(u);u==="confirm_handoff"&&ie({kind:"waiting",until:Ee.current}),G(c,{...d?{quickReplyClick:{payload:u,summary:h?.summary,details:h?.details??void 0,priority:h?.priority,sourceMessageId:e}}:{}})},[$,G]),Fs=s.useCallback(()=>{a.emit("support-chat:showHistory",void 0)},[a]),Yt=$.length===0;return oe?t.jsx(ts,{blockType:"support-chat",children:t.jsx(Ln,{state:L.state,draft:L.draft,error:L.error,muted:zt,listening:L.userSpeaking,hasTranscript:Ue.length>0,transcript:js,onToggleMute:()=>{const e=!zt;xs(e),nt.current?.setMuted(e)},onEnd:()=>L.stop(),onRetry:()=>{L.start()},t:r})}):t.jsxs(ts,{blockType:"support-chat",children:[t.jsxs("div",{className:"es-sc__chat-header",children:[t.jsx("span",{className:"es-sc__chat-header-title",children:R&&re==="tickets"?r("support_chat.tickets_view_title"):Oe}),t.jsxs("div",{className:"es-sc__chat-header-actions",children:[t.jsx("button",{type:"button",className:"es-sc__chat-action-btn","aria-label":r("support_chat.new_conversation_button"),title:r("support_chat.new_conversation_button"),onClick:Ls,children:t.jsx(qn,{size:18})}),t.jsx("button",{type:"button",className:"es-sc__chat-action-btn","aria-label":r("support_chat.history_button"),title:r("support_chat.history_button"),onClick:Fs,children:t.jsx(On,{size:16})}),he&&re==="chat"&&Rt.kind==="idle"&&t.jsx("button",{type:"button",className:"es-sc__chat-action-btn es-sc__chat-action-btn--label","aria-label":r("support_chat.handoff.button_label"),title:r("support_chat.handoff.button_label"),onClick:()=>{Us()},children:r("support_chat.handoff.button_label")}),R&&t.jsx("button",{type:"button",className:`es-sc__chat-action-btn${re==="tickets"?" es-sc__chat-action-btn--active":""}`,"aria-label":r("support_chat.tickets_tab_button"),title:r("support_chat.tickets_tab_button"),"aria-pressed":re==="tickets",onClick:qs,children:t.jsx(Bn,{size:16})}),t.jsx(Ys,{panelKey:"support-chat",baseUrl:o,apiKey:p||void 0,t:r})]})]}),t.jsx("div",{className:"es-block__body es-sc__body",children:R&&re==="tickets"?t.jsx(un,{status:Ae,loading:gs,tickets:ms,onSelectStatus:vs,onSelectSession:Bs,t:r}):t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"es-sc__messages",ref:_s,children:[Yt&&t.jsx("div",{className:"es-sc__welcome",children:t.jsx("div",{className:"es-sc__welcome-text",children:O})}),$.map((e,c)=>{const u=c===$.length-1,h=e.role==="assistant"&&e.refusalReason?r(`support_chat.refusal_${e.refusalReason}`,{productName:e.refusalProductName??""}):e.text;return t.jsxs("div",{className:`es-sc__bubble es-sc__bubble--${e.role}`,"data-confidence":e.confidenceLevel,children:[h&&(e.role==="assistant"?t.jsxs(t.Fragment,{children:[t.jsx(ss,{text:h,allowedLinkHosts:me}),t.jsx(on,{text:h,allowEmbeds:ye,allowedImageHosts:me,t:r}),X&&t.jsx(vn,{id:e.id,session:T,onActivate:()=>T.activate(e.id),t:r})]}):t.jsx("div",{className:"es-sc__bubble-text",children:h})),e.isPending&&!e.text&&t.jsxs("div",{className:"es-sc__typing","aria-label":r("support_chat.typing_aria"),children:[t.jsx("span",{className:"es-sc__typing-dot"}),t.jsx("span",{className:"es-sc__typing-dot"}),t.jsx("span",{className:"es-sc__typing-dot"})]}),e.actions&&e.actions.length>0&&t.jsx("div",{className:"es-sc__actions","data-es-no-read":!0,children:e.actions.map(d=>t.jsx("a",{href:Qn(d.url)?d.url:"#",target:"_blank",rel:"noopener noreferrer",className:"es-sc__action-btn",children:d.title},d.slug))}),e.ticketCards&&e.ticketCards.length>0&&t.jsx("div",{className:"es-sc__ticket-cards",children:e.ticketCards.map(d=>t.jsx(us,{card:d,t:r},d.externalNumber))}),e.quickReplies&&e.quickReplies.length>0&&t.jsx("div",{className:"es-sc__quick-replies",children:e.quickReplies.map(d=>{const j=e.quickReplyAnswered===d.value;if(e.quickReplyAnswered!==void 0&&!j)return null;const C=d.payload==="confirm_escalation"?r("escalation.confirm_yes"):d.payload==="cancel_escalation"?r("escalation.confirm_no"):d.payload==="confirm_handoff"?r("support_chat.handoff.confirm_yes"):d.payload==="decline_handoff"?r("support_chat.handoff.confirm_no"):d.label;return t.jsx("button",{type:"button",disabled:j||Q,onClick:()=>Hs(e.id,d.value,d.payload??""),className:`es-sc__quick-reply-btn${j?" es-sc__quick-reply-btn--clicked":""}`,children:C},d.value)})}),e.role==="assistant"&&t.jsx(ns,{followUps:e.suggestedFollowUps,isNewest:u,isPending:!!e.isPending,hasQuickReplies:!!e.quickReplies?.length,isSending:Q,onSelect:d=>G(d),t:r}),e.role==="assistant"&&!e.isPending&&e.text&&t.jsxs(t.Fragment,{children:[e.promptLogId&&_.current&&(()=>{const d=Jt?.messageId===e.id?Jt.rating:null;return t.jsxs("div",{className:"es-sc__feedback","aria-label":r("support_chat.rate_aria"),"data-es-no-read":!0,children:[t.jsx("span",{className:"es-sc__feedback-label",children:e.rating&&d===null?r("support_chat.feedback_thanks"):r("support_chat.rate_aria")}),t.jsx(Gn,{value:d??e.rating??null,onChange:j=>$s(e.id,j),disabled:d===null&&(!!e.rating||e.ratingPending),t:r}),d!==null&&t.jsxs("div",{className:"es-sc__rating-undo",role:"status",children:[t.jsx("span",{className:"es-sc__rating-undo-text",children:r("support_chat.rating_undo_toast",{rating:d})}),t.jsx("button",{type:"button",className:"es-sc__rating-undo-btn",onClick:Ps,children:r("support_chat.rating_undo_button")})]})]})})(),e.confidenceLevel==="low"&&t.jsxs("div",{className:"es-sc__escalation",children:[t.jsx("span",{className:"es-sc__escalation-text",children:r("support_chat.low_confidence")}),t.jsx("button",{className:"es-sc__escalation-btn",onClick:()=>Ms(e.id),type:"button","aria-label":fe,children:fe})]})]})]},e.id)}),Ct&&t.jsxs("div",{className:"es-sc__error",role:"alert",children:[t.jsx("span",{className:"es-sc__error-text",children:Ct}),Be&&t.jsx("button",{type:"button",className:"es-sc__error-retry",onClick:Ss,children:r("support_chat.retry")})]})]}),!bs&&$.length>0&&t.jsxs("button",{type:"button",className:"es-sc__jump",onClick:()=>Pe(),"aria-label":r("support_chat.jump_to_latest"),title:r("support_chat.jump_to_latest"),children:[t.jsxs("svg",{width:16,height:16,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[t.jsx("path",{d:"M12 5v14"}),t.jsx("path",{d:"m19 12-7 7-7-7"})]}),t.jsx("span",{className:"es-sc__jump-label",children:r("support_chat.jump_to_latest")})]})]})}),re!=="tickets"&&ke.length>0&&t.jsx("div",{className:"es-sc__suggestions",role:"group","aria-label":r("support_chat.quick_actions_aria"),children:ke.map((e,c)=>t.jsx("button",{className:"es-sc__suggestion",onClick:()=>Ns(e),type:"button",disabled:Q||b,children:e.labelKey?r(e.labelKey):e.label},`${e.labelKey??e.label}-${c}`))}),re!=="tickets"&&ke.length===0&&Yt&&ue&&ne.length>0&&t.jsx("div",{className:"es-sc__suggestions",role:"list","aria-label":r("support_chat.suggestions_aria"),children:ne.map((e,c)=>t.jsx("button",{className:"es-sc__suggestion",onClick:()=>G(e),type:"button",role:"listitem",children:e},c))}),re!=="tickets"&&t.jsx(Rn,{status:Rt,onSubmitContact:Ds,onDismissContact:Os,t:r}),re!=="tickets"&&t.jsxs("div",{className:"es-block__footer es-sc__footer",children:[t.jsx("div",{className:"es-sc__disclaimer","data-es-no-read":!0,children:r("support_chat.disclaimer")}),t.jsxs("div",{className:"es-sc__input-row",children:[U&&qt.available&&(be||Dt||E)&&t.jsx("button",{type:"button",className:"es-sc__conv-start","data-testid":"conversation-start","aria-label":r("voice_conv.start"),title:r("voice_conv.start"),onClick:()=>{L.start()},children:t.jsx("svg",{width:"19",height:"19",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round","aria-hidden":"true",children:t.jsx("path",{d:"M4 10v4M8 6v12M12 3v18M16 6v12M20 10v4"})})}),t.jsxs("div",{className:"es-sc__textarea-wrap",children:[t.jsx("textarea",{ref:Z,className:"es-sc__textarea",value:te,onChange:Es,onKeyDown:Rs,placeholder:Re!=null?r("support_chat.rate_limited_wait",{seconds:String(fs)}):pe,rows:1,maxLength:2e3,disabled:Q||b||Me!=null||Re!=null||ot,"aria-label":r("support_chat.input_aria")}),te.length>0&&t.jsx("button",{className:"es-sc__clear",onClick:Ts,disabled:Q,type:"button","aria-label":r("support_chat.clear_input_aria"),children:t.jsx("span",{"aria-hidden":"true",children:"✕"})})]}),E&&!b&&t.jsx(hn,{baseUrl:o,apiKey:p,jwt:_.current,language:w,onTranscript:Is,t:r,disabled:Q||Me!=null||Re!=null||ot,streaming:k?.streaming,voiceStream:i?.voiceStream,baseText:()=>te,onText:e=>{if(ae(e.length>2e3?e.slice(0,2e3):e),e.length>=2e3){const c=i?.voiceStream;c?.getState&&c.getState()!=="idle"&&c.stop()}requestAnimationFrame(()=>{je(),Z.current?.focus()})}}),t.jsx("button",{className:`es-sc__send${Q?" es-sc__send--stop":""}`,onClick:Q?Cs:_t,disabled:!Q&&(b||!te.trim()||Me!=null||Re!=null||ot),type:"button","aria-label":r(Q?"support_chat.stop_aria":"chat.send_aria"),children:Q?t.jsx("span",{className:"es-sc__stop-icon","aria-hidden":"true"}):t.jsx("span",{"aria-hidden":"true",children:"➤"})})]})]})]})}export{on as AssistantMessageMedia,la as Component,ss as MarkdownBubble,rn as MessageMedia,Ln as VoiceModeView,ca as manifest};
|
|
6
|
-
//# sourceMappingURL=index-
|
|
6
|
+
//# sourceMappingURL=index-tapacGlG--YMQ21rc.js.map
|
|
@@ -3,4 +3,4 @@ import{r as s,j as e,a as De,b as te,Q as it}from"../nexly.js";import{x as Ke,s
|
|
|
3
3
|
`)}}function It({config:o,actions:i,baseUrl:n,i18n:p,auth:w,externalContext:b,productId:y,sessionId:j,sessionMessages:g,readOnly:U}){const S=U===!0,r=p?.t??(t=>t),u=b?.apiKey??"",m=p?.currentLanguage??"en",G=De(o.placeholder,m,{t:r,fallbackKey:"chat.input_placeholder",enDefault:"Type a message..."}),H=De(o.welcomeMessage,m,{t:r,fallbackKey:"chat.empty_state",enDefault:["Hi! How can I help you?","Hello! How can I help you?"]}),f=typeof o._draft=="string"?o._draft:void 0,z=typeof o._draftContext=="string"?o._draftContext:void 0,I=o._autoSend===!0,$=Array.isArray(o._quickChips)?o._quickChips:[],E=JSON.stringify($),k=s.useRef(w?.jwt);s.useEffect(()=>{k.current=w?.jwt},[w?.jwt]);const F=b?.voice,d=!!F?.enabled&&(F?.languages??[]).includes(m),[c,h]=s.useState(()=>g?.map(t=>({id:t.id,role:t.role,text:t.content}))??[]),[T,K]=s.useState(""),[ce,se]=s.useState([]),[L,D]=s.useState(!1),[ge,q]=s.useState(null),[me,Z]=s.useState(!1),{containerRef:_,isPinned:V,scrollToBottom:C,stickToBottom:M}=ot(),v=s.useRef(null),J=s.useRef(null),R=s.useRef(j??ze()),Q=s.useRef(g&&g.length>0?j??null:null),ee=s.useRef(null),le=s.useRef(void 0),ae=s.useRef(!1);s.useEffect(()=>{i.emit("chat:session",{sessionId:R.current})},[i]),s.useEffect(()=>{M()},[c,L,M]);const be=s.useCallback(()=>{const t=v.current;if(!t)return;const a=t.closest(".es-block")?.clientHeight??0,l=a>0?Math.round(a*.4):120;t.style.height="auto",t.style.height=`${Math.min(t.scrollHeight,l)}px`,t.style.overflowY=t.scrollHeight>l?"auto":"hidden"},[]);s.useLayoutEffect(()=>{be()},[T,be]);const re=s.useCallback(()=>{ae.current&&(ae.current=!1,i.emit("chat:draftConsumed",void 0))},[i]),ne=s.useCallback(async t=>{const a=t.trim();if(!a||L)return;re();const l=le.current;le.current=void 0,se([]),Z(!1),J.current?.abort(),J.current=new AbortController;const A=yt.test(a),B=`user-${Date.now()}`,X={id:B,role:"user",text:a,...A?{linkStatus:"reading",linkFailedCount:0}:{}};h(x=>[...x,X]);const O=()=>{A&&h(x=>x.map(W=>W.id===B&&W.linkStatus==="reading"?{...W,linkStatus:"done"}:W))};C(),K(""),D(!0),q(null),v.current&&(v.current.style.height="auto");const N=c.map(x=>({role:x.role,content:x.text})),Te=await w?.ensureValidToken?.()??k.current,st={"Content-Type":"application/json",...u?{"X-API-Key":u}:{},...Te?{Authorization:`Bearer ${Te}`}:{}},ue=`assistant-${Date.now()}`;let ie="",Le=!1,xe=!1;const Ae=()=>{xe||(xe=!0,q(ue),h(x=>[...x,{id:ue,role:"assistant",text:ie}]))},Be=R.current,Pe=_t.test(Be)?Be:void 0,He=xt(),[je,ke]=await te(fetch(`${n}/api/widget/chat-bot/stream`,{method:"POST",headers:st,body:JSON.stringify({text:a,history:N,...Pe?{sessionId:Pe}:{},...y?{productId:y}:{},...He?{timeZone:He}:{},...l?{blockContext:l}:{}}),signal:J.current.signal}));if(ke){if(ke instanceof Error&&ke.name==="AbortError"){O();return}D(!1),q(null),O(),h(x=>[...x,{id:`error-${Date.now()}`,role:"assistant",text:r("chat.error_message")}]);return}if(!je.ok||!je.body){D(!1),q(null),O(),h(x=>[...x,{id:`error-${Date.now()}`,role:"assistant",text:r("chat.error_message")}]);return}const at=je.body.getReader(),rt=new TextDecoder;let de="",_e;const Me=()=>{_e&&clearTimeout(_e),_e=void 0},Re=()=>{Me(),_e=setTimeout(()=>{J.current?.abort(),D(!1),q(null),O()},bt)},[,ve]=await te((async()=>{for(Re();;){const{done:x,value:W}=await at.read();if(Re(),x)break;de+=rt.decode(W,{stream:!0});let we;for(;(we=de.indexOf(`
|
|
4
4
|
|
|
5
5
|
`))!==-1;){const nt=de.slice(0,we);de=de.slice(we+2);const{event:he,data:pe}=jt(nt);if(!(!he||!pe)){if(he==="start"){const P=JSON.parse(pe);P.sessionId&&P.sessionId!==R.current&&(R.current=P.sessionId,Q.current=P.sessionId,i.emit("chat:session",{sessionId:P.sessionId}))}else if(he==="token"){const P=JSON.parse(pe);ie+=P.value??"",Ae();const Se=ie;h(Ce=>Ce.map(Y=>Y.id===ue?{...Y,text:Se}:Y))}else if(he==="meta"){const P=JSON.parse(pe);Le=!0;const Se=P.assistantMessage?.content??ie,Ce=Array.isArray(P.pastedLinks)?P.pastedLinks.filter(Y=>Y.status&&Y.status!=="ok").length:0;Ae(),h(Y=>Y.map(oe=>oe.id===ue?{...oe,text:Se,promptLogId:P.logId}:oe.id===B&&oe.linkStatus==="reading"?{...oe,linkStatus:"done",linkFailedCount:Ce}:oe))}else if(he==="error"){const P=JSON.parse(pe);throw new Error(P.message??"Stream error")}}}}if(!Le&&!ie)throw new Error("Stream ended before completion")})());if(Me(),D(!1),q(null),O(),ve){if(ve instanceof Error&&ve.name==="AbortError"||ie)return;h(xe?x=>x.map(W=>W.id===ue?{...W,text:r("chat.error_message"),promptLogId:void 0}:W):x=>[...x,{id:`error-${Date.now()}`,role:"assistant",text:r("chat.error_message")}])}},[L,i,c,r,u,n,y,C,w,re]),ye=s.useCallback(()=>{const t=b?.voiceStream;t?.getState&&t.getState()!=="idle"&&t.stop(),ne(T)},[ne,T,b]);s.useEffect(()=>{const t=b?.voiceStream;t?.getState&&t.getState()!=="idle"&&t.stop()},[j]);const qe=s.useCallback(t=>{if(t.autoSend){ne(t.message);return}se([]),K(""),re(),v.current&&(v.current.style.height="auto",v.current.focus())},[ne,re]);s.useEffect(()=>{if(!(f!==void 0||$.length>0))return;const t=`${f}${z??""}${String(I)}${E}`;if(ee.current!==t){if(ee.current=t,ae.current=!0,le.current=z,I&&f!==void 0){se([]),ne(f);return}se($),f!==void 0&&(K(f),v.current&&v.current.focus())}},[f,z,I,E,ne]);const Je=s.useCallback(t=>{t.key==="Enter"&&!t.shiftKey&&(t.preventDefault(),ye())},[ye]),Xe=s.useCallback(t=>{re(),K(t.target.value)},[re]),Qe=s.useCallback(t=>{const a=t.trim();a&&(K(l=>l?`${l} ${a}`:a),requestAnimationFrame(()=>{v.current?.focus()}))},[]);s.useEffect(()=>()=>J.current?.abort(),[]),s.useEffect(()=>i.on("chat:clearHistory",t=>{const a=t;h([]),Z(!1);const l=a?.sessionId??ze();R.current=l,Q.current=l,i.emit("chat:session",{sessionId:l})}),[i]);const Ye=s.useCallback(async()=>{const t=k.current,[a,l]=await te(fetch(`${n}/api/chat/sessions/new`,{method:"POST",headers:{...u?{"X-API-Key":u}:{},...t?{Authorization:`Bearer ${t}`}:{}}}));if(!l&&a.ok){const[A,B]=await te(a.json());if(!B&&A.success&&A.data?.sessionId){i.emit("chat:clearHistory",{sessionId:A.data.sessionId});return}}i.emit("chat:clearHistory",void 0)},[i,u,n]),Ge=s.useCallback(()=>{i.emit("chat:showHistory",void 0)},[i]),fe=s.useCallback(async t=>{R.current=t,i.emit("chat:session",{sessionId:t}),h([]),Z(!1),D(!0);const a=k.current,[l,A]=await te(fetch(`${n}/api/chat/sessions/${encodeURIComponent(t)}/messages?limit=50`,{headers:{...u?{"X-API-Key":u}:{},...a?{Authorization:`Bearer ${a}`}:{}}}));if(D(!1),A||!l.ok){Z(!0);return}const[B,X]=await te(l.json());if(X){Z(!0);return}const O=B.data?.messages??[];h(O.map(N=>({id:N.id,role:N.role,text:N.content,promptLogId:N.promptLogId??void 0,rating:N.userScore??null}))),Q.current=t,C("auto")},[i,u,n,C]);s.useEffect(()=>i.on("chat:select-session",t=>{const{sessionId:a}=t;!a||a===Q.current||fe(a)}),[i,fe]);const Ze=s.useCallback(()=>{fe(R.current)},[fe]),Ie=s.useRef(c);s.useEffect(()=>{Ie.current=c},[c]);const Ve=s.useCallback(({messageId:t,rating:a},{keepalive:l})=>{const A=Ie.current.find(B=>B.id===t);!A||!A.promptLogId||!k.current||(h(B=>B.map(X=>X.id===t?{...X,rating:a,ratingPending:!0}:X)),(async()=>{const[B,X]=await te(fetch(`${n}/api/widget/ai-feedback`,{method:"POST",keepalive:l,headers:{"Content-Type":"application/json",...u?{"X-API-Key":u}:{},Authorization:`Bearer ${k.current}`},body:JSON.stringify({promptLogId:A.promptLogId,rating:a})}));if(X||!(B.ok||B.status===409)){h(O=>O.map(N=>N.id===t?{...N,rating:null,ratingPending:!1}:N));return}h(O=>O.map(N=>N.id===t?{...N,rating:a,ratingPending:!1}:N))})())},[u,n]),{pending:$e,rate:Ee,undo:et}=ct({submit:Ve}),tt=s.useCallback((t,a)=>{const l=c.find(A=>A.id===t);!l||!l.promptLogId||l.ratingPending||!k.current||Ee(t,a)},[c,Ee]);return e.jsxs(it,{blockType:"chat",children:[e.jsxs("div",{className:"es-chat__header",children:[e.jsx("span",{className:"es-chat__header-title",children:r("chat.chat")}),e.jsxs("div",{className:"es-chat__header-actions",children:[e.jsx("button",{type:"button",className:"es-chat__action-btn","aria-label":r("chat.new_session_button"),title:r("chat.new_session_button"),onClick:Ye,children:e.jsx(gt,{size:18})}),e.jsx("button",{type:"button",className:"es-chat__action-btn","aria-label":r("chat.history_button"),title:r("chat.history_button"),onClick:Ge,children:e.jsx(pt,{size:16})})]})]}),e.jsxs("div",{className:"es-block__body es-chat__body",children:[e.jsxs("div",{className:"es-chat__messages",ref:_,children:[c.length===0&&!me&&!L&&e.jsx("div",{className:"es-chat__welcome",children:H}),me&&e.jsxs("div",{className:"es-chat__load-error",role:"alert",children:[e.jsx("span",{className:"es-chat__load-error-text",children:r("chat.load_session_error")}),e.jsx("button",{type:"button",className:"es-chat__load-error-retry",onClick:Ze,children:r("chat.retry")})]}),c.map(t=>e.jsxs("div",{className:`es-chat__bubble es-chat__bubble--${t.role}${t.id===ge?" es-chat__bubble--streaming":""}`,children:[t.role==="assistant"?e.jsx("div",{className:"es-chat__bubble-text es-chat__bubble-text--md",children:e.jsx(Ke,{remarkPlugins:[...Ue],allowedElements:[...Oe],transformLinkUri:a=>We(a)??"",transformImageUri:()=>"",components:Fe,children:t.text})}):e.jsx("div",{className:"es-chat__bubble-text",children:t.text}),t.role==="user"&&t.linkStatus==="reading"&&e.jsxs("div",{className:"es-chat__link-status",role:"status",children:[e.jsx("span",{className:"es-chat__link-status-spinner","aria-hidden":"true"}),e.jsx("span",{className:"es-chat__link-status-text",children:r("chat.reading_link")})]}),t.role==="user"&&t.linkStatus==="done"&&(t.linkFailedCount??0)>0&&e.jsxs("div",{className:"es-chat__link-status es-chat__link-status--failed",children:[e.jsx(mt,{size:13}),e.jsx("span",{className:"es-chat__link-status-text",children:r("chat.link_unreadable")})]}),t.role==="assistant"&&t.promptLogId&&k.current&&(()=>{const a=$e?.messageId===t.id?$e.rating:null;return e.jsxs("div",{className:"es-chat__feedback",children:[e.jsx("span",{className:"es-chat__feedback-label",children:t.rating&&a===null?r("chat.feedback_thanks"):r("support_chat.rate_aria")}),e.jsx(ft,{value:a??t.rating??null,onChange:l=>tt(t.id,l),disabled:a===null&&(!!t.rating||t.ratingPending),t:r}),a!==null&&e.jsxs("div",{className:"es-chat__rating-undo",role:"status",children:[e.jsx("span",{className:"es-chat__rating-undo-text",children:r("support_chat.rating_undo_toast",{rating:a})}),e.jsx("button",{type:"button",className:"es-chat__rating-undo-btn",onClick:et,children:r("support_chat.rating_undo_button")})]})]})})()]},t.id)),L&&ge===null&&e.jsxs("div",{className:"es-chat__typing","aria-label":r("chat.typing_aria"),children:[e.jsx("span",{className:"es-chat__typing-dot"}),e.jsx("span",{className:"es-chat__typing-dot"}),e.jsx("span",{className:"es-chat__typing-dot"})]})]}),!V&&c.length>0&&e.jsxs("button",{type:"button",className:"es-chat__jump",onClick:()=>C(),"aria-label":r("chat.jump_to_latest"),title:r("chat.jump_to_latest"),children:[e.jsxs("svg",{width:16,height:16,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[e.jsx("path",{d:"M12 5v14"}),e.jsx("path",{d:"m19 12-7 7-7-7"})]}),e.jsx("span",{className:"es-chat__jump-label",children:r("chat.jump_to_latest")})]})]}),e.jsxs("div",{className:"es-block__footer es-chat__footer",children:[ce.length>0&&e.jsx("div",{className:"es-chat__chips",role:"group","aria-label":r("chat.quick_actions_aria"),children:ce.map((t,a)=>e.jsx("button",{type:"button",className:"es-chat__chip",onClick:()=>qe(t),disabled:L||S,children:t.labelKey?r(t.labelKey):t.label},`${t.labelKey??t.label}-${a}`))}),e.jsx("div",{className:"es-chat__disclaimer",children:r("chat.disclaimer")}),e.jsxs("div",{className:"es-chat__input-row",children:[e.jsx("textarea",{ref:v,className:"es-chat__textarea",value:T,onChange:Xe,onKeyDown:Je,placeholder:G,rows:1,maxLength:2e3,disabled:L||S,"aria-label":r("chat.input_aria")}),d&&!S&&e.jsx(ht,{baseUrl:n,apiKey:u,jwt:k.current,language:m,onTranscript:Qe,t:r,streaming:F?.streaming,voiceStream:b?.voiceStream,baseText:()=>T,onText:t=>{if(K(t.length>2e3?t.slice(0,2e3):t),t.length>=2e3){const a=b?.voiceStream;a?.getState&&a.getState()!=="idle"&&a.stop()}requestAnimationFrame(()=>{be(),v.current?.focus()})}}),e.jsx("button",{className:"es-chat__send",onClick:ye,disabled:!T.trim()||L||S,type:"button","aria-label":r("chat.send_aria"),children:L?e.jsx("span",{className:"es-chat__send-loading","aria-hidden":"true",children:"⋯"}):e.jsx("span",{"aria-hidden":"true",children:"➤"})})]})]})]})}const Ne=50;function $t({sessionId:o,baseUrl:i,jwt:n,isOpen:p,onToggle:w,i18n:b}){const y=b?.t??(d=>d),j=p!==void 0,[g,U]=s.useState(!1),S=j?p:g,[r,u]=s.useState([]),[m,G]=s.useState(null),[H,f]=s.useState(!1),[z,I]=s.useState(null),$=s.useRef(!1),E=s.useCallback(async d=>{if(n){f(!0),I(null);try{const c=`${i}/api/chat/sessions/${o}/messages?limit=${Ne}&offset=${d}`,h=await fetch(c,{headers:{Authorization:`Bearer ${n}`},credentials:"include"});if(!h.ok)throw new Error(`HTTP ${h.status}`);const T=await h.json();if(!T.success)throw new Error(y("chat_history.error"));u(K=>d===0?T.data.messages:[...T.data.messages,...K]),G(T.data.pagination)}catch(c){I(c instanceof Error?c.message:y("chat_history.error"))}finally{f(!1)}}},[i,n,o,y]),k=s.useCallback(()=>{j?w?.():U(d=>{const c=!d;return c&&!$.current&&($.current=!0,E(0)),c})},[j,w,E]),F=s.useCallback(()=>{if(!m)return;const d=Math.max(0,m.total-m.offset-Ne-Ne);E(d)},[E,m]);return s.useEffect(()=>{j&&S&&!$.current&&n&&($.current=!0,E(0))},[j,S,n,E]),s.useEffect(()=>{$.current=!1,u([]),G(null),I(null),S&&n&&($.current=!0,E(0))},[o,n]),e.jsxs("div",{className:"es-chat-history",children:[!j&&e.jsxs("button",{className:"es-chat-history__toggle",type:"button","aria-expanded":S,onClick:k,disabled:!n,children:[e.jsx("span",{className:"es-chat-history__toggle-icon",children:S?"▲":"▼"}),y("chat_history.toggle")]}),S&&e.jsxs("div",{className:"es-chat-history__panel",children:[H&&e.jsxs("div",{className:"es-chat-history__loading",role:"status","aria-label":y("chat_history.loading_aria"),children:[e.jsx("span",{className:"es-chat-history__dot"}),e.jsx("span",{className:"es-chat-history__dot"}),e.jsx("span",{className:"es-chat-history__dot"})]}),z&&!H&&e.jsx("div",{className:"es-chat-history__error",role:"alert",children:z}),!H&&!z&&e.jsxs(e.Fragment,{children:[m?.hasMore&&e.jsx("button",{className:"es-chat-history__load-more",type:"button",onClick:F,"aria-label":y("chat_history.load_older_aria"),children:y("chat_history.load_older")}),e.jsxs("div",{className:"es-chat-history__messages",role:"log","aria-live":"polite","aria-label":y("chat_history.panel_aria"),children:[r.length===0&&e.jsx("div",{className:"es-chat-history__empty",children:y("chat_history.empty")}),r.filter(d=>d.role!=="system").map(d=>e.jsx("div",{className:`es-chat-history__bubble es-chat-history__bubble--${d.role}`,children:d.role==="assistant"?e.jsx("div",{className:"es-chat-history__bubble-md",children:e.jsx(Ke,{remarkPlugins:[...Ue],allowedElements:[...Oe],transformLinkUri:c=>We(c)??"",transformImageUri:()=>"",components:Fe,children:d.content})}):d.content},d.id))]})]})]})]})}export{$t as ChatHistoryBlock,It as Component,Nt as manifest};
|
|
6
|
-
//# sourceMappingURL=index-
|
|
6
|
+
//# sourceMappingURL=index-zmuItIIf-oy07dUaV.js.map
|