more-desk-one 0.0.9 → 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
mhb-overflow-visible
|
|
20
20
|
placeholder:mhb-text-neutral-40
|
|
21
21
|
focus:mhb-outline-none
|
|
22
|
-
`})]}),He=i.forwardRef((e,s)=>t.jsx(Ee,{...e,forwardedRef:s})),W=()=>t.jsx("div",{className:"mhb-flex mhb-items-center mhb-justify-center",children:t.jsx("svg",{className:"mhb-w-8 mhb-h-8 mhb-animate-spin mhb-text-neutral-110",viewBox:"0 0 50 50",children:t.jsx("circle",{cx:"25",cy:"25",r:"20",fill:"none",stroke:"currentColor",strokeWidth:"4",strokeLinecap:"round",strokeDasharray:"100",strokeDashoffset:"60"})})});let S=null,z=0,Y=!1,Me=0;const M={};let O=!1,P="",be="",F="",Q=[],G=!1;function Le(){const s={host:new URL(P).hostname,"x-api-key":F},r={},a=btoa(JSON.stringify(s)),c=btoa(JSON.stringify(r)),h=`${be}?header=${a}&payload=${c}`;return new WebSocket(h,["graphql-ws"])}const pe=()=>{Y=!1,S=Le(),O=!1,S.onopen=()=>{z=0,S?.send(JSON.stringify({type:"connection_init"}))},S.onmessage=e=>{const s=JSON.parse(e.data);if(O)s.type==="error"||(s.type==="data"&&M[s.id]?M[s.id].callback(s.payload.data):s.type==="complete"&&M[s.id]&&delete M[s.id]);else if(s.type==="connection_ack"){O=!0;for(const r in M)S?.send(JSON.stringify(M[r].message))}},S.onclose=()=>{if(Y)return;const e=Math.min(1e3*Math.pow(2,z)+Math.random()*1e3,3e4);setTimeout(()=>{z++,pe()},e)},S.onerror=()=>{S?.close()}},ae=(e,s=null)=>{Q.forEach(({resolve:r,reject:a})=>{e?a(e):s&&r(s)}),Q=[]};function Ae(){return new Promise((e,s)=>{Q.push({resolve:e,reject:s})})}const Ie=e=>{P=e.apiURL,F=e.apiKey,be=e.apiURL.replace("https://","wss://").replace("appsync-api","appsync-realtime-api"),pe();const s=async(r,a={},c)=>{const p=await(await fetch(P,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":F,...c?{Authorization:`Bearer ${c}`}:{}},body:JSON.stringify({query:r,variables:a})})).json(),b=Array.isArray(p.errors)?p.errors:[];console.log(b,"check errors");const m=b.some(o=>{const w=o.message?.toLowerCase()??"";return w.includes("unauthorized")||w.includes("jwt")||w.includes("expired")});if(console.log(m,"check shouldRefresh"),m){if(console.log(m,"inside shouldRefresh"),G){const o=await Ae();return s(r,a,o)}G=!0;try{let o=null;if(process.env.NODE_ENV==="development")o=await V.SSOAuthorization.getDevToken("432896");else{const w=window.location.href,_=encodeURIComponent(w);o=V.SSOAuthorization.getToken(_),console.log(o,"refreshResult check")}if(!o?.token)throw new Error("Refresh did not return an access token");return xe(o.token),ae(null,o.token),s(r,a,o.token)}catch(o){throw console.log(o,"check updating refresh"),ae(o,null),o}finally{G=!1}}if(b.length>0)throw new Error(b.map(o=>o.message).join(", "));return p.data};return{executeGraphql:s,subscribe:(r,a={},c)=>{if(!r.trim().startsWith("subscription"))return()=>{};const h=`${++Me}`,p={id:h,type:"start",payload:{data:JSON.stringify({query:r,variables:a}),extensions:{authorization:{host:new URL(P).hostname,"x-api-key":F}}}};return M[h]={message:p,callback:c},O&&S?.readyState===WebSocket.OPEN&&S.send(JSON.stringify(p)),()=>{S?.readyState===WebSocket.OPEN&&S.send(JSON.stringify({id:h,type:"stop"})),delete M[h]}},close:()=>{Y=!0,S?.close()}}};let L;const Ve=e=>{L||(L=Ie(e))},U=async(e,s={},r)=>{if(!L)throw new Error("client is not created");return L.executeGraphql(e,s,r)},K=async(e,s={},r)=>{if(!L)throw new Error("client is not created");return L.executeGraphql(e,s,r)},De=(e,s={},r)=>{if(!L)throw new Error("client is not created");return L.subscribe(e,s,r)},ie=`query AssistHistory($limit: Int, $offset: Int , $ticket_id: Int) {
|
|
22
|
+
`})]}),He=i.forwardRef((e,s)=>t.jsx(Ee,{...e,forwardedRef:s})),W=()=>t.jsx("div",{className:"mhb-flex mhb-items-center mhb-justify-center",children:t.jsx("svg",{className:"mhb-w-8 mhb-h-8 mhb-animate-spin mhb-text-neutral-110",viewBox:"0 0 50 50",children:t.jsx("circle",{cx:"25",cy:"25",r:"20",fill:"none",stroke:"currentColor",strokeWidth:"4",strokeLinecap:"round",strokeDasharray:"100",strokeDashoffset:"60"})})});let S=null,z=0,Y=!1,Me=0;const M={};let O=!1,P="",be="",F="",Q=[],G=!1;function Le(){const s={host:new URL(P).hostname,"x-api-key":F},r={},a=btoa(JSON.stringify(s)),c=btoa(JSON.stringify(r)),h=`${be}?header=${a}&payload=${c}`;return new WebSocket(h,["graphql-ws"])}const pe=()=>{Y=!1,S=Le(),O=!1,S.onopen=()=>{z=0,S?.send(JSON.stringify({type:"connection_init"}))},S.onmessage=e=>{const s=JSON.parse(e.data);if(O)s.type==="error"||(s.type==="data"&&M[s.id]?M[s.id].callback(s.payload.data):s.type==="complete"&&M[s.id]&&delete M[s.id]);else if(s.type==="connection_ack"){O=!0;for(const r in M)S?.send(JSON.stringify(M[r].message))}},S.onclose=()=>{if(Y)return;const e=Math.min(1e3*Math.pow(2,z)+Math.random()*1e3,3e4);setTimeout(()=>{z++,pe()},e)},S.onerror=()=>{S?.close()}},ae=(e,s=null)=>{Q.forEach(({resolve:r,reject:a})=>{e?a(e):s&&r(s)}),Q=[]};function Ae(){return new Promise((e,s)=>{Q.push({resolve:e,reject:s})})}const Ie=e=>{P=e.apiURL,F=e.apiKey,be=e.apiURL.replace("https://","wss://").replace("appsync-api","appsync-realtime-api"),pe();const s=async(r,a={},c)=>{const p=await(await fetch(P,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":F,...c?{Authorization:`Bearer ${c}`}:{}},body:JSON.stringify({query:r,variables:a})})).json(),b=Array.isArray(p.errors)?p.errors:[];console.log(b,"check errors");const m=b.some(o=>{const w=o.message?.toLowerCase()??"";return w.includes("unauthorized")||w.includes("jwt")||w.includes("expired")});if(console.log(m,"check shouldRefresh"),m){if(console.log(m,"inside shouldRefresh"),G){const o=await Ae();return s(r,a,o)}G=!0;try{let o=null;if(process.env.NODE_ENV==="development")o=await V.SSOAuthorization.getDevToken("432896");else{const w=window.location.href,_=encodeURIComponent(w);o=await V.SSOAuthorization.getToken(_),console.log(o,"refreshResult check")}if(!o?.token)throw new Error("Refresh did not return an access token");return xe(o.token),ae(null,o.token),s(r,a,o.token)}catch(o){throw console.log(o,"check updating refresh"),ae(o,null),o}finally{G=!1}}if(b.length>0)throw new Error(b.map(o=>o.message).join(", "));return p.data};return{executeGraphql:s,subscribe:(r,a={},c)=>{if(!r.trim().startsWith("subscription"))return()=>{};const h=`${++Me}`,p={id:h,type:"start",payload:{data:JSON.stringify({query:r,variables:a}),extensions:{authorization:{host:new URL(P).hostname,"x-api-key":F}}}};return M[h]={message:p,callback:c},O&&S?.readyState===WebSocket.OPEN&&S.send(JSON.stringify(p)),()=>{S?.readyState===WebSocket.OPEN&&S.send(JSON.stringify({id:h,type:"stop"})),delete M[h]}},close:()=>{Y=!0,S?.close()}}};let L;const Ve=e=>{L||(L=Ie(e))},U=async(e,s={},r)=>{if(!L)throw new Error("client is not created");return L.executeGraphql(e,s,r)},K=async(e,s={},r)=>{if(!L)throw new Error("client is not created");return L.executeGraphql(e,s,r)},De=(e,s={},r)=>{if(!L)throw new Error("client is not created");return L.subscribe(e,s,r)},ie=`query AssistHistory($limit: Int, $offset: Int , $ticket_id: Int) {
|
|
23
23
|
assistHistory(limit: $limit, offset: $offset, ticket_id: $ticket_id) {
|
|
24
24
|
message_id
|
|
25
25
|
text
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/core/sdkAuthBridge.ts","../src/context/SDKContext.tsx","../src/hooks/useSdkContext.ts","../src/assets/assist_logo.svg?react","../src/assets/menu_open.svg?react","../src/assets/search.svg?react","../src/assets/headset_mic.svg?react","../src/assets/menu.svg?react","../src/assets/attach_file.svg?react","../src/assets/more_ai_logo.svg?react","../src/assets/more_ai_sparkle.svg?react","../src/web/components/Popover/index.tsx","../src/web/components/SearchBar/index.tsx","../src/web/components/Loader/index.tsx","../src/api/client.ts","../src/api/index.ts","../src/graphql/query.ts","../src/hooks/useAssistTickets.ts","../src/utils/index.ts","../src/web/components/ChatHistory/index.tsx","../src/web/components/Header/index.tsx","../src/graphql/mutation.ts","../src/graphql/subscriptions.ts","../src/hooks/useChatMessages.ts","../src/web/components/Toast/index.tsx","../src/web/components/Attachment/index.tsx","../src/web/components/Chat/index.tsx","../src/web/components/SDKRoot.tsx","../src/core/validate.ts","../src/web/sdk.tsx"],"sourcesContent":["let tokenUpdateListener: ((token: string) => void) | null = null;\n\nexport function registerTokenListener(listener: (token: string) => void) {\n tokenUpdateListener = listener;\n}\n\nexport function notifyTokenUpdate(token: string) {\n tokenUpdateListener?.(token);\n}\n","import { createContext, useState, ReactNode, useEffect } from \"react\";\nimport { registerTokenListener } from \"../core/sdkAuthBridge\";\nimport { SDKContextProps } from \"../types\";\n\nexport const SDKContext = createContext<SDKContextProps | undefined>(undefined);\n\nexport const SDKProvider = ({\n children,\n appName,\n apiKey,\n token,\n}: {\n children: ReactNode;\n appName: string;\n apiKey: string;\n token: string;\n}) => {\n const [authorized, setAuthorized] = useState<boolean>(!!token);\n const [accessToken, setAccessToken] = useState<string>(token);\n const [isChatScreen, setIsChatScreen] = useState<boolean>(true);\n const [profileInfo, setProfileInfo] = useState<any>(null);\n\n useEffect(() => {\n registerTokenListener(setAccessToken);\n }, []);\n\n return (\n <SDKContext.Provider\n value={{\n appName,\n apiKey,\n accessToken,\n authorized,\n setAuthorized,\n isChatScreen,\n setIsChatScreen,\n profileInfo,\n setProfileInfo,\n }}\n >\n {children}\n </SDKContext.Provider>\n );\n};\n","import { useContext } from \"react\";\nimport { SDKContext } from \"../context/SDKContext\";\nimport { SDKContextProps } from \"../types\";\n\nexport const useSdkContext = (): SDKContextProps => {\n const context = useContext(SDKContext);\n if (!context) {\n throw new Error(\"useSdkContext must be used inside SDKProvider\");\n }\n return context;\n};\n","import * as React from \"react\";\nconst SvgAssistLogo = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 36, height: 36, viewBox: \"0 0 36 36\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M15.8261 8.67349C12.4046 8.67349 9.63062 11.447 9.63062 14.8685C9.63062 18.29 12.4046 21.064 15.8261 21.064C16.1656 21.064 16.4991 21.0365 16.8241 20.984C15.0221 20.4765 13.7006 18.8205 13.7006 16.856C13.7006 14.4875 15.6206 12.568 17.9886 12.568C19.8251 12.568 21.3921 13.722 22.0031 15.345C22.0151 15.188 22.0211 15.029 22.0211 14.8685C22.0211 11.447 19.2476 8.67349 15.8261 8.67349Z\", fill: \"#B72402\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M17.9984 7.621C13.0309 7.621 9.00342 11.6485 9.00342 16.616C9.00342 20.526 11.4949 23.8495 14.9744 25.0915V27.785C14.9744 28.228 15.4404 28.515 15.8349 28.3125C17.5759 27.4215 21.5219 25.332 23.5549 23.696C23.6114 23.65 23.6674 23.6065 23.7214 23.5605C23.7624 23.527 23.8009 23.494 23.8394 23.4605C25.7724 21.8115 26.9964 19.356 26.9964 16.616C26.9964 11.6485 22.9689 7.621 17.9989 7.621H17.9984ZM15.8274 21.064C15.5379 21.064 15.2539 21.0435 14.9749 21.005C11.9559 20.59 9.63092 18.0015 9.63092 14.8675C9.63092 11.4465 12.4039 8.6735 15.8274 8.6735C19.2509 8.6735 22.0214 11.4465 22.0214 14.8675C22.0214 15.0265 22.0164 15.185 22.0034 15.341C21.8319 17.6225 20.4259 19.5555 18.4544 20.48C17.9424 20.7205 17.3919 20.892 16.8154 20.9845C16.4929 21.036 16.1624 21.064 15.8269 21.064H15.8274Z\", fill: \"#FA4B16\" }));\nexport default SvgAssistLogo;\n","import * as React from \"react\";\nconst SvgMenuOpen = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 16, height: 16, viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M14.4167 3.58334L14.4167 5.13334L5.58341 5.13333L5.58341 3.58333L14.4167 3.58334ZM2.66675 4.5L6.06675 8.01667L2.68341 11.5167L1.56675 10.4L3.86675 8.01667L1.55008 5.61667L2.66675 4.5ZM14.4167 7.25L14.4167 8.81667L7.48341 8.81667L7.48341 7.25L14.4167 7.25ZM14.4167 10.8667L14.4167 12.4333L5.58341 12.4333L5.58341 10.8667L14.4167 10.8667Z\", fill: \"#172128\" }));\nexport default SvgMenuOpen;\n","import * as React from \"react\";\nconst SvgSearch = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 16, height: 16, viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M13.25 14.45L8.7667 9.98335C8.44448 10.238 8.06414 10.4378 7.6257 10.5827C7.18725 10.7276 6.71203 10.8 6.20003 10.8C4.92048 10.8 3.8367 10.3556 2.9487 9.46668C2.0607 8.57779 1.6167 7.50557 1.6167 6.25001C1.6167 4.99446 2.06114 3.92223 2.95003 3.03335C3.83892 2.14446 4.91392 1.70001 6.17503 1.70001C7.43614 1.70001 8.50837 2.14446 9.3917 3.03335C10.275 3.92223 10.7167 4.99529 10.7167 6.25251C10.7167 6.75085 10.6473 7.2139 10.5084 7.64168C10.3695 8.06946 10.1611 8.47223 9.88337 8.85001L14.3834 13.3167L13.25 14.45ZM6.1892 9.23335C7.02142 9.23335 7.72298 8.94307 8.29387 8.36251C8.86464 7.78196 9.15003 7.07779 9.15003 6.25001C9.15003 5.42223 8.86381 4.71807 8.29137 4.13751C7.71892 3.55696 7.0182 3.26668 6.1892 3.26668C5.35109 3.26668 4.64059 3.55696 4.0577 4.13751C3.47481 4.71807 3.18337 5.42223 3.18337 6.25001C3.18337 7.07779 3.47398 7.78196 4.0552 8.36251C4.63642 8.94307 5.34775 9.23335 6.1892 9.23335Z\", fill: \"#172128\" }));\nexport default SvgSearch;\n","import * as React from \"react\";\nconst SvgHeadsetMic = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 20, height: 20, viewBox: \"0 0 20 20\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M10.0417 19.3958V17.7292H16.0625V16.6042H12.7292V9.70833H16.0625V8.77083C16.0625 7.10417 15.4757 5.67014 14.3021 4.46875C13.1285 3.26736 11.7049 2.66667 10.0312 2.66667C8.38542 2.66667 6.95833 3.26736 5.75 4.46875C4.54167 5.67014 3.9375 7.10417 3.9375 8.77083V9.70833H7.27083V16.6042H1.97917V8.775C1.97917 7.66722 2.19229 6.62306 2.61854 5.6425C3.04479 4.66195 3.62132 3.80319 4.34812 3.06625C5.07493 2.32931 5.92903 1.74861 6.91042 1.32417C7.89167 0.899722 8.93667 0.6875 10.0454 0.6875C11.154 0.6875 12.1944 0.899306 13.1667 1.32292C14.1389 1.74653 14.9868 2.32424 15.7104 3.05604C16.4342 3.78785 17.0036 4.64278 17.4187 5.62083C17.834 6.59889 18.0417 7.64889 18.0417 8.77083V19.3958H10.0417ZM3.9375 14.625H5.3125V11.6875H3.9375V14.625ZM14.7083 14.625H16.0625V11.6875H14.7083V14.625Z\", fill: \"#172128\" }));\nexport default SvgHeadsetMic;\n","import * as React from \"react\";\nconst SvgMenu = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 16, height: 16, viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M1.58334 12.6167V11.0333H14.4333V12.6167H1.58334ZM1.58334 8.78333V7.21666H14.4333V8.78333H1.58334ZM1.58334 4.96666V3.38333H14.4333V4.96666H1.58334Z\", fill: \"#172128\" }));\nexport default SvgMenu;\n","import * as React from \"react\";\nconst SvgAttachFile = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 16, height: 16, viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M12.7833 10.679C12.7833 11.9375 12.3239 12.9861 11.4053 13.825C10.4867 14.6639 9.39228 15.0834 8.12194 15.0834C6.85172 15.0834 5.76105 14.6639 4.84994 13.825C3.93883 12.9861 3.48328 11.9389 3.48328 10.6834V4.08336C3.48328 3.17869 3.81383 2.42197 4.47494 1.81319C5.13605 1.20441 5.92083 0.900024 6.82928 0.900024C7.73783 0.900024 8.52117 1.20441 9.17928 1.81319C9.8375 2.42197 10.1666 3.17869 10.1666 4.08336V10.35C10.1666 10.8935 9.96383 11.3543 9.55828 11.7325C9.15272 12.1109 8.673 12.3 8.11911 12.3C7.56533 12.3 7.09033 12.1127 6.69411 11.738C6.298 11.3634 6.09994 10.9007 6.09994 10.35V4.18336H7.54994V10.35C7.54994 10.4945 7.60711 10.6139 7.72144 10.7084C7.83578 10.8028 7.97267 10.85 8.13211 10.85C8.29155 10.85 8.42883 10.8036 8.54394 10.7109C8.65905 10.6181 8.71661 10.4978 8.71661 10.35V4.10002C8.72772 3.59714 8.54439 3.17975 8.16661 2.84786C7.78883 2.51597 7.34322 2.35002 6.82978 2.35002C6.31633 2.35002 5.87189 2.51352 5.49644 2.84052C5.121 3.16752 4.93328 3.5818 4.93328 4.08336V10.6834C4.94439 11.5417 5.26367 12.2507 5.89111 12.8105C6.51855 13.3702 7.2715 13.65 8.14994 13.65C9.01294 13.65 9.762 13.3695 10.3971 12.8084C11.0323 12.2472 11.3444 11.5389 11.3333 10.6834V3.70002H12.7833V10.679Z\", fill: \"white\" }));\nexport default SvgAttachFile;\n","import * as React from \"react\";\nconst SvgMoreAiLogo = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 41, height: 12, viewBox: \"0 0 41 12\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { clipPath: \"url(#clip0_100_2379)\" }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M21.1825 7.56627H22.1696V5.46029C21.9697 5.38454 21.6628 5.35825 21.4373 5.35825C20.6381 5.35825 19.9407 5.89477 19.9261 6.85195H19.8885L19.4834 5.40815H17.7463V11.7965H20.0681V8.80642C20.0681 8.10324 20.2821 7.56672 21.1825 7.56672V7.56627Z\", fill: \"#172128\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M2.31875 8.00074C2.31875 7.40005 2.55889 7.11976 3.04271 7.11976C3.48584 7.11976 3.69989 7.3996 3.69989 8.00074V11.7956H6.0217V8.00074C6.0217 7.40005 6.26184 7.11976 6.74256 7.11976C7.18835 7.11976 7.4024 7.3996 7.4024 8.00074V11.7956H9.72111V7.32385C9.72111 6.14831 9.12761 5.21786 7.68013 5.21786C6.74212 5.21786 6.14862 5.53603 5.78111 6.25036H5.75502C5.4627 5.62605 4.8661 5.21786 3.98028 5.21786C3.04227 5.21786 2.45761 5.53603 2.10426 6.25036H2.07817L1.80043 5.40725H3.8147e-05V11.7956H2.31875V8.00074Z\", fill: \"#172128\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M10.1851 8.7301C10.1851 10.8129 11.8701 12 13.7227 12C15.5753 12 17.2837 10.8129 17.2837 8.7301V8.47342C17.2837 6.37903 15.5726 5.20349 13.7227 5.20349C11.8728 5.20349 10.1851 6.38215 10.1851 8.47342V8.7301ZM13.7346 7.02071C14.5975 7.02071 14.9765 7.70919 14.9765 8.59017C14.9765 9.47116 14.597 10.1743 13.7346 10.1743C12.8722 10.1743 12.4928 9.47116 12.4928 8.59017C12.4928 7.70919 12.8749 7.02071 13.7346 7.02071Z\", fill: \"#172128\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M25.7969 5.20346C23.9324 5.20346 22.3867 6.43158 22.3867 8.47339V8.73007C22.3867 10.8623 24.0602 12 25.8982 12C27.3545 12 28.7874 11.2589 29.0797 9.70151H26.975C26.8101 10.1333 26.3669 10.2764 25.9618 10.2764C25.2264 10.2764 24.7837 9.76301 24.7315 9.08611H29.0912C29.1173 8.87044 29.1173 8.60173 29.1173 8.38293C29.1173 6.08444 27.3686 5.20346 25.7969 5.20346ZM24.7576 7.75862C24.8067 7.19848 25.137 6.71143 25.846 6.71143H25.8491C26.4948 6.71143 26.8623 7.19581 26.8623 7.75862H24.7576Z\", fill: \"#172128\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M34.376 3.1975C33.6653 3.44883 32.9979 3.86058 32.4292 4.43319C31.8605 5.00581 31.4523 5.67824 31.2028 6.39435C30.9538 5.67824 30.5448 5.00581 29.9765 4.43275C29.4082 3.86013 28.7408 3.44838 28.0301 3.19705C28.7408 2.94572 29.4082 2.53398 29.9769 1.96136C30.5452 1.38874 30.9538 0.716307 31.2033 -0.000244141C31.4527 0.716307 31.8613 1.3883 32.4301 1.96136C32.9984 2.53398 33.6657 2.94572 34.3764 3.19705L34.376 3.1975Z\", fill: \"url(#paint0_linear_100_2379)\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M35.4872 12.0001C34.8667 12.0001 34.2696 11.7715 33.9119 11.3869C33.5895 11.0621 33.4108 10.6655 33.4108 10.1722V10.1C33.4108 8.82507 34.4611 8.12769 35.9051 8.12769C36.4061 8.12769 36.9077 8.17581 37.3729 8.34426V7.94721C37.3729 6.92497 37.0027 6.27571 35.8812 6.27571C35.1413 6.27571 34.4492 6.5404 34.4134 7.38217H33.6854V7.30998C33.8287 6.0471 34.7835 5.61441 35.8578 5.61441C37.1708 5.61441 38.0898 6.17945 38.0898 7.93563V11.808H37.5768C37.4932 11.5915 37.4335 11.3508 37.3499 11.1347H37.326C36.932 11.6516 36.1682 12.0005 35.488 12.0005L35.4872 12.0001ZM37.3729 9.54697V9.01803C36.8718 8.84958 36.3823 8.76536 35.8812 8.76536C35.01 8.76536 34.1507 9.13834 34.1507 10.0643C34.1507 10.9061 34.7831 11.3152 35.6066 11.3152C36.43 11.3152 37.3729 10.5937 37.3729 9.54742V9.54697Z\", fill: \"#172128\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M40.9998 3.77446C40.9998 4.09931 40.7371 4.3395 40.4152 4.3395C40.0932 4.3395 39.8305 4.09887 39.8305 3.77446V3.7504C39.8305 3.40148 40.0932 3.19739 40.4152 3.19739C40.7371 3.19739 40.9998 3.40193 40.9998 3.7504V3.77446ZM40.0569 11.8076V5.79444H40.7729V11.8076H40.0569Z\", fill: \"#172128\" })), /* @__PURE__ */ React.createElement(\"defs\", null, /* @__PURE__ */ React.createElement(\"linearGradient\", { id: \"paint0_linear_100_2379\", x1: 31.3237, y1: 301678e-10, x2: 34.1742, y2: 2.06507, gradientUnits: \"userSpaceOnUse\" }, /* @__PURE__ */ React.createElement(\"stop\", { stopColor: \"#FA4B16\" }), /* @__PURE__ */ React.createElement(\"stop\", { offset: 1, stopColor: \"#8E64EF\" })), /* @__PURE__ */ React.createElement(\"clipPath\", { id: \"clip0_100_2379\" }, /* @__PURE__ */ React.createElement(\"rect\", { width: 41, height: 12, fill: \"white\" }))));\nexport default SvgMoreAiLogo;\n","import * as React from \"react\";\nconst SvgMoreAiSparkle = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 16, height: 16, viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M14.4241 8.00167C12.9851 8.50672 11.6338 9.33413 10.4822 10.4848C9.33067 11.6355 8.50415 12.9868 7.9991 14.4258C7.49495 12.9868 6.66664 11.6355 5.51596 10.4839C4.36528 9.33324 3.01402 8.50582 1.575 8.00078C3.01402 7.49573 4.36528 6.66832 5.51686 5.51764C6.66754 4.36696 7.49495 3.01569 8 1.57578C8.50504 3.01569 9.33246 4.36606 10.484 5.51764C11.6347 6.66832 12.986 7.49573 14.425 8.00078L14.4241 8.00167Z\", fill: \"url(#paint0_linear_100_2352)\" }), /* @__PURE__ */ React.createElement(\"defs\", null, /* @__PURE__ */ React.createElement(\"linearGradient\", { id: \"paint0_linear_100_2352\", x1: 8.24377, y1: 1.57633, x2: 13.9855, y2: 5.76743, gradientUnits: \"userSpaceOnUse\" }, /* @__PURE__ */ React.createElement(\"stop\", { stopColor: \"#FA4B16\" }), /* @__PURE__ */ React.createElement(\"stop\", { offset: 1, stopColor: \"#8E64EF\" }))));\nexport default SvgMoreAiSparkle;\n","import * as React from \"react\";\nimport * as RadixPopover from \"@radix-ui/react-popover\";\nimport { Headset_mic } from \"../../../assets/icons\";\nimport { useSdkContext } from \"../../../hooks/useSdkContext\";\n\ntype PopoverSide = \"top\" | \"bottom\" | \"left\" | \"right\";\n\ninterface PopoverProps {\n title?: string;\n children: React.ReactNode;\n side?: PopoverSide;\n align?: \"start\" | \"center\" | \"end\";\n}\n\nexport default function Popover({\n children,\n side = \"top\",\n align = \"end\",\n}: PopoverProps) {\n const { setIsChatScreen, isChatScreen } = useSdkContext();\n const micClickHandler = () => {\n if (!isChatScreen) {\n setIsChatScreen(true);\n }\n };\n return (\n <RadixPopover.Root>\n <RadixPopover.Trigger\n asChild\n className=\"data-[state=open]:mhb-outline data-[state=open]:mhb-outline-neutral-110\"\n >\n <button\n type=\"button\"\n className=\"mhb-h-12 mhb-w-12 mhb-rounded-[16px] mhb-bg-neutral-10 mhb-flex mhb-items-center mhb-justify-center\"\n onClick={micClickHandler}\n >\n <Headset_mic className=\"mhb-h-5 mhb-w-5\" />\n </button>\n </RadixPopover.Trigger>\n\n <RadixPopover.Portal>\n <RadixPopover.Content\n side={side}\n align={align}\n sideOffset={12}\n className=\"mhb-popover\n mhb-flex mhb-flex-col\n mhb-h-[460px] mhb-max-h-[460px]\n mhb-w-[323px]\n mhb-bg-white\n mhb-rounded-[16px]\n mhb-border mhb-border-neutral-10\n mhb-shadow-[0_4px_20px_rgba(23,33,40,0.05)]\n mhb-overflow-hidden\"\n >\n <div className=\"mhb-popover-children mhb-h-full mhb-flex mhb-flex-col\">\n {children}\n </div>\n </RadixPopover.Content>\n </RadixPopover.Portal>\n </RadixPopover.Root>\n );\n}\n","import { forwardRef } from \"react\";\nimport { Search } from \"../../../assets/icons\";\n\ninterface searchBarProps {\n forwardedRef?: React.Ref<HTMLInputElement>;\n onChangeHandler: (e: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\nconst SearchBar = ({ forwardedRef, onChangeHandler }: searchBarProps) => {\n return (\n <div className=\"mhb-h-[48px] mhb-flex mhb-rounded-[9999px] mhb-bg-neutral-10 mhb-items-center mhb-gap-3 mhb-px-3\">\n <Search className=\"mhb-h-4 mhb-w-4\" />\n\n <input\n ref={forwardedRef}\n onChange={onChangeHandler}\n type=\"text\"\n placeholder=\"Search your chats\"\n className=\"\n mhb-input \n mhb-flex-1\n mhb-w-full\n mhb-typography-para-30\n mhb-text-neutral-110\n mhb-bg-transparent\n mhb-border-0\n mhb-outline-none\n mhb-whitespace-nowrap\n mhb-overflow-visible\n placeholder:mhb-text-neutral-40\n focus:mhb-outline-none\n \"\n />\n </div>\n );\n};\n\nconst ForwardedSearchBar = forwardRef<HTMLInputElement, searchBarProps>(\n (props, forwardedRef) => {\n return <SearchBar {...props} forwardedRef={forwardedRef} />;\n }\n);\n\nexport default ForwardedSearchBar;\n","const Loader = () => {\n return (\n <div className=\"mhb-flex mhb-items-center mhb-justify-center\">\n <svg\n className=\"mhb-w-8 mhb-h-8 mhb-animate-spin mhb-text-neutral-110\"\n viewBox=\"0 0 50 50\"\n >\n <circle\n cx=\"25\"\n cy=\"25\"\n r=\"20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n strokeDasharray=\"100\"\n strokeDashoffset=\"60\"\n />\n </svg>\n </div>\n );\n};\nexport default Loader;\n","interface SubscriptionMessage {\n id: string;\n type: \"start\" | \"stop\";\n payload: {\n data: string;\n extensions: {\n authorization: {\n host: string;\n \"x-api-key\": string;\n };\n };\n };\n}\n\ninterface SubscriptionEntry {\n message: SubscriptionMessage;\n callback: (data: unknown) => void;\n}\n\ninterface GraphQLResponse<T> {\n data?: T;\n errors?: Array<{ message: string }>;\n}\n\nexport interface ChatbotClient {\n executeGraphql: <T>(\n operation: string,\n variables?: Record<string, unknown>,\n token?: string\n ) => Promise<T>;\n subscribe: (\n subscription: string,\n variables: Record<string, unknown>,\n callback: (data: unknown) => void\n ) => () => void;\n close: () => void;\n}\n\ntype FailedRequest = {\n resolve: (token: string) => void;\n reject: (error: any) => void;\n};\n\nimport { SSOAuthorization } from \"more-sso-sdk\";\nimport { notifyTokenUpdate } from \"../core/sdkAuthBridge\";\nimport type { ApiUrls } from \"../types\";\n\nlet ws: WebSocket | null = null;\nlet reconnectAttempts = 0;\nlet isManuallyClosed = false;\nlet subscriptionIdCounter = 0;\nconst subscriptions: Record<string, SubscriptionEntry> = {};\nlet isConnectionAcked = false;\n\nlet graphqlEndpoint = \"\";\nlet subscriptionEndpoint = \"\";\nlet apiKey = \"\";\nlet failedQueue: FailedRequest[] = [];\nlet isRefreshing = false;\n\nfunction openWebsocket() {\n const host = new URL(graphqlEndpoint).hostname;\n const apiHeader = {\n host: host,\n \"x-api-key\": apiKey,\n };\n const payload = {};\n const base64ApiHeader = btoa(JSON.stringify(apiHeader));\n const base64Payload = btoa(JSON.stringify(payload));\n const appsyncUrl = `${subscriptionEndpoint}?header=${base64ApiHeader}&payload=${base64Payload}`;\n\n return new WebSocket(appsyncUrl, [\"graphql-ws\"]);\n}\n\nconst connect = () => {\n isManuallyClosed = false;\n ws = openWebsocket();\n isConnectionAcked = false;\n\n ws.onopen = () => {\n reconnectAttempts = 0;\n ws?.send(JSON.stringify({ type: \"connection_init\" }));\n };\n\n ws.onmessage = (e) => {\n const data = JSON.parse(e.data);\n if (!isConnectionAcked) {\n if (data.type === \"connection_ack\") {\n isConnectionAcked = true;\n for (const id in subscriptions) {\n ws?.send(JSON.stringify(subscriptions[id].message));\n }\n }\n } else {\n if (data.type === \"error\") {\n } else if (data.type === \"data\" && subscriptions[data.id]) {\n subscriptions[data.id].callback(data.payload.data);\n } else if (data.type === \"complete\" && subscriptions[data.id]) {\n delete subscriptions[data.id];\n }\n }\n };\n\n ws.onclose = () => {\n if (isManuallyClosed) return;\n const delay = Math.min(\n 1000 * Math.pow(2, reconnectAttempts) + Math.random() * 1000,\n 30000\n );\n setTimeout(() => {\n reconnectAttempts++;\n connect();\n }, delay);\n };\n\n ws.onerror = () => {\n ws?.close();\n };\n};\n\nconst processQueue = (error: any, token: string | null = null): void => {\n failedQueue.forEach(({ resolve, reject }) => {\n if (error) {\n reject(error);\n } else if (token) {\n resolve(token);\n }\n });\n failedQueue = [];\n};\n\nfunction enqueueFailedRequest(): Promise<string> {\n return new Promise((resolve, reject) => {\n failedQueue.push({ resolve, reject });\n });\n}\n\nconst createChatbotClient = (apiURLS: ApiUrls): ChatbotClient => {\n graphqlEndpoint = apiURLS.apiURL;\n apiKey = apiURLS.apiKey;\n subscriptionEndpoint = apiURLS.apiURL\n .replace(\"https://\", \"wss://\")\n .replace(\"appsync-api\", \"appsync-realtime-api\");\n\n connect();\n const executeGraphql = async <T>(\n operation: string,\n variables: Record<string, unknown> = {},\n token?: string\n ): Promise<T> => {\n const response = await fetch(graphqlEndpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-api-key\": apiKey,\n ...(token ? { Authorization: `Bearer ${token}` } : {}),\n },\n body: JSON.stringify({ query: operation, variables }),\n });\n\n const result: GraphQLResponse<T> = await response.json();\n const errors = Array.isArray(result.errors) ? result.errors : [];\n console.log(errors, \"check errors\");\n // Auth error handling\n const shouldRefresh = errors.some((err) => {\n const msg = err.message?.toLowerCase() ?? \"\";\n return (\n msg.includes(\"unauthorized\") ||\n msg.includes(\"jwt\") ||\n msg.includes(\"expired\")\n );\n });\n console.log(shouldRefresh, \"check shouldRefresh\");\n if (shouldRefresh) {\n console.log(shouldRefresh, \"inside shouldRefresh\");\n // if refresh already running queue request\n if (isRefreshing) {\n const newToken = await enqueueFailedRequest();\n return executeGraphql<T>(operation, variables, newToken);\n }\n\n isRefreshing = true;\n\n try {\n let refreshResult: any = null;\n if (process.env.NODE_ENV === \"development\") {\n refreshResult = await SSOAuthorization.getDevToken(\"432896\");\n } else {\n const currentUrl = window.location.href;\n const encodedRedirect = encodeURIComponent(currentUrl);\n refreshResult = SSOAuthorization.getToken(encodedRedirect);\n console.log(refreshResult, \"refreshResult check\");\n }\n if (!refreshResult?.token) {\n throw new Error(\"Refresh did not return an access token\");\n }\n\n notifyTokenUpdate(refreshResult.token);\n processQueue(null, refreshResult.token);\n\n // retry current request\n return executeGraphql<T>(operation, variables, refreshResult.token);\n } catch (error) {\n console.log(error, \"check updating refresh\");\n processQueue(error, null);\n throw error;\n } finally {\n isRefreshing = false;\n }\n }\n\n if (errors.length > 0) {\n throw new Error(errors.map((e) => e.message).join(\", \"));\n }\n\n return result.data as T;\n };\n return {\n executeGraphql,\n\n subscribe: (\n subscription: string,\n variables: Record<string, unknown> = {},\n callback: (data: unknown) => void\n ): (() => void) => {\n if (!subscription.trim().startsWith(\"subscription\")) {\n return () => {};\n }\n\n const id = `${++subscriptionIdCounter}`;\n const message: SubscriptionMessage = {\n id,\n type: \"start\",\n payload: {\n data: JSON.stringify({ query: subscription, variables }),\n extensions: {\n authorization: {\n host: new URL(graphqlEndpoint).hostname,\n \"x-api-key\": apiKey,\n },\n },\n },\n };\n\n subscriptions[id] = { message, callback };\n\n if (isConnectionAcked && ws?.readyState === WebSocket.OPEN) {\n ws.send(JSON.stringify(message));\n }\n\n return () => {\n if (ws?.readyState === WebSocket.OPEN) {\n ws.send(JSON.stringify({ id, type: \"stop\" }));\n }\n delete subscriptions[id];\n };\n },\n\n close: () => {\n isManuallyClosed = true;\n ws?.close();\n },\n };\n};\n\nexport default createChatbotClient;\n","import createChatbotClient, { ChatbotClient } from \"./client\";\nimport type { ApiUrls } from \"../types\";\n\nlet chatbotClient: ChatbotClient;\n\nexport const initChatbot = (urls: ApiUrls): void => {\n if (chatbotClient) return;\n chatbotClient = createChatbotClient(urls);\n};\n\nexport const query = async <T>(\n gqlQuery: string,\n variables: Record<string, unknown> = {},\n token: string\n): Promise<T> => {\n if (!chatbotClient) throw new Error(\"client is not created\");\n return chatbotClient.executeGraphql<T>(gqlQuery, variables, token);\n};\n\nexport const mutation = async <T>(\n gqlMutation: string,\n variables: Record<string, unknown> = {},\n token: string\n): Promise<T> => {\n if (!chatbotClient) throw new Error(\"client is not created\");\n return chatbotClient.executeGraphql<T>(gqlMutation, variables, token);\n};\n\nexport const subscribe = (\n gqlSubscription: string,\n variables: Record<string, unknown> = {},\n callback: (data: unknown) => void\n): (() => void) => {\n if (!chatbotClient) throw new Error(\"client is not created\");\n return chatbotClient.subscribe(gqlSubscription, variables, callback);\n};\n","export const ASSIST_HISTORY = `query AssistHistory($limit: Int, $offset: Int , $ticket_id: Int) {\n assistHistory(limit: $limit, offset: $offset, ticket_id: $ticket_id) {\n message_id\n text\n attachments{\n filename\n url\n }\n ticket_id\n handover\n created_at\n end\n user{\n user_name\n user_type\n }\n }}`;\n\nexport const EMPLOYEEE_ASSIST_TICKET = `query EmployeeAssistTickets($search_key: String $limit: Int, $offset: Int) {\n EmployeeAssistTickets(search_key: $search_key limit: $limit, offset: $offset) {\n ticket_id\n parent_id\n user_id\n source\n source_reference_id\n title\n description\n status\n status_id\n assigned_to\n priority\n is_escalated\n resolution_comments\n bill_no\n customer_rating\n agent_rating\n due_date\n created_at\n modified_by\n updated_at\n ticket_meta\n broadcast_list\n cat_desc\n subcat_desc\n user_type\n last_message_time\n ticket_type\n chat_handover\n is_new\n }\n }`;\n","import { useEffect, useRef, useState } from \"react\";\nimport { query } from \"../api\";\nimport { EMPLOYEEE_ASSIST_TICKET } from \"../graphql/query\";\nimport { useSdkContext } from \"./useSdkContext\";\nimport type { Ticket } from \"../types\";\n\ntype EmployeeAssistTicketsResponse = {\n EmployeeAssistTickets: Ticket[];\n};\n\nconst LIMIT = 10;\n\nconst useAssistTicket = () => {\n const [ticketData, setTicketData] = useState<Ticket[]>([]);\n const [loading, setLoading] = useState<Boolean>(true);\n const [error, setError] = useState(null);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const [searchText, setSearchText] = useState<string | null>(\"\");\n\n const isFirstRender = useRef(true);\n\n const { accessToken } = useSdkContext();\n\n const getEmployeeTickets = () => {\n query(\n EMPLOYEEE_ASSIST_TICKET,\n { limit: LIMIT, search_key: searchText },\n accessToken\n )\n .then(async (resp) => {\n const data = resp as EmployeeAssistTicketsResponse;\n setTicketData(data?.EmployeeAssistTickets ?? []);\n })\n .catch((err) => {\n setError(err);\n })\n .finally(() => {\n setLoading(false);\n });\n };\n\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n getEmployeeTickets();\n return;\n }\n\n const timer = setTimeout(() => {\n getEmployeeTickets();\n }, 400);\n\n return () => clearTimeout(timer);\n }, [searchText]);\n\n const getNextPageTicketData = (offset: number) => {\n if (!accessToken) return;\n if (isLoadingMore) return;\n setIsLoadingMore(true);\n query(EMPLOYEEE_ASSIST_TICKET, { limit: LIMIT, offset }, accessToken)\n .then(async (resp) => {\n const { EmployeeAssistTickets } = resp as EmployeeAssistTicketsResponse;\n setTicketData((prev: Ticket[]) => [...prev, ...EmployeeAssistTickets]);\n })\n .catch((err) => {\n setError(err);\n })\n .finally(() => {\n setIsLoadingMore(false);\n });\n };\n\n return {\n ticketData,\n loading,\n error,\n getNextPageTicketData,\n isLoadingMore,\n setSearchText,\n };\n};\n\nexport default useAssistTicket;\n","export function formatTime(ts?: string) {\n const date = ts ? new Date(ts) : new Date();\n return date.toLocaleTimeString(\"en-US\", {\n hour: \"numeric\",\n minute: \"2-digit\",\n timeZone: \"Asia/Kolkata\",\n });\n}\n\nexport function formatDateAndTime(\n iso: string,\n timeZone: string = \"Asia/Kolkata\",\n locale: string = \"en-GB\"\n): string {\n const d = new Date(iso);\n if (Number.isNaN(d.getTime())) return \"\";\n\n const parts = new Intl.DateTimeFormat(locale, {\n day: \"2-digit\",\n month: \"short\",\n year: \"2-digit\",\n timeZone,\n }).formatToParts(d);\n\n const day = parts.find((p) => p.type === \"day\")?.value ?? \"\";\n const month = parts.find((p) => p.type === \"month\")?.value ?? \"\";\n const year = parts.find((p) => p.type === \"year\")?.value ?? \"\";\n\n const time = new Intl.DateTimeFormat(locale, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: false,\n timeZone,\n }).format(d);\n\n return `${day} ${month} \\u2018${year}, ${time}`;\n}\n\nexport const setDataSessionStorage = (key: string, data: any) => {\n sessionStorage.setItem(key, JSON.stringify(data));\n};\n\nexport const getSessionStorageData = (key: string) => {\n const val = sessionStorage.getItem(key);\n return val ? JSON.parse(val) : null;\n};\n","import { useLayoutEffect, useRef } from \"react\";\nimport SearchBar from \"../SearchBar\";\nimport Loader from \"../Loader\";\n\nimport useAssistTicket from \"../../../hooks/useAssistTickets\";\nimport { useSdkContext } from \"../../../hooks/useSdkContext\";\n\nimport { formatDateAndTime, setDataSessionStorage } from \"../../../utils\";\n\nconst ChatHistory = () => {\n const scrollContainerRef = useRef<HTMLDivElement | null>(null);\n const lastFetchedOffsetRef = useRef<number | null>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n const {\n ticketData,\n loading,\n getNextPageTicketData,\n isLoadingMore,\n setSearchText,\n } = useAssistTicket();\n const { setIsChatScreen, profileInfo } = useSdkContext();\n\n useLayoutEffect(() => {\n const el = scrollContainerRef.current;\n if (!el) return;\n }, [ticketData.length]);\n\n const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {\n const el = e.currentTarget;\n searchInputRef.current?.blur();\n if (el.scrollHeight <= el.clientHeight) return;\n const scrollBottom = el.scrollHeight - el.scrollTop - el.clientHeight;\n const offset = ticketData.length;\n\n if (lastFetchedOffsetRef.current === offset) return;\n\n if (scrollBottom <= 20 && !loading) {\n lastFetchedOffsetRef.current = offset;\n getNextPageTicketData(offset);\n }\n };\n\n const ticketBtnClickHandler = (ticket_id: number) => {\n setDataSessionStorage(\"userAndTicket\", {\n ticket_id: ticket_id,\n employee_id: profileInfo?.employee_id,\n });\n setIsChatScreen((prev) => !prev);\n };\n\n const handleKeyDown = (e: React.ChangeEvent<HTMLInputElement>) => {\n e.preventDefault();\n const value = searchInputRef.current?.value?.trim();\n setSearchText(value ?? null);\n };\n\n return (\n <div className=\"mhb-flex mhb-flex-col mhb-h-full mhb-min-h-0\">\n <div className=\"mhb-searchbarContainer mhb-flex mhb-flex-col mhb-border-b mhb-border-neutral-20\">\n <SearchBar ref={searchInputRef} onChangeHandler={handleKeyDown} />\n </div>\n <div\n ref={scrollContainerRef}\n onScroll={handleScroll}\n className=\"mhb-history-main-container mhb-no-scrollbar mhb-py-3 mhb-flex mhb-flex-col mhb-gap-1 mhb-overflow-y-auto mhb-flex-1 mhb-min-h-0\"\n >\n {loading ? (\n <Loader />\n ) : (\n <>\n {ticketData.map((item) => (\n <button\n type=\"button\"\n key={item.ticket_id}\n className=\"mhb-btn-reset mhb-history-container mhb-p-3 mhb-flex mhb-flex-col mhb-rounded-[12px] mhb-bg-neutral-10 mhb-gap-2 mhb-items-start\"\n onClick={() => ticketBtnClickHandler(item.ticket_id)}\n >\n <div className=\"mhb-flex mhb-items-start\">\n <p className=\"mhb-typography-para-thick-30 mhb-text-neutral-110 mhb-m-0 mhb-min-w-0 mhb-break-words mhb-whitespace-normal mhb-text-left\">\n {item.title}\n </p>\n </div>\n\n <p className=\"mhb-typography-para-30 mhb-text-neutral-60 mhb-m-0\">\n {formatDateAndTime(item.created_at)}\n </p>\n </button>\n ))}\n {isLoadingMore && <Loader />}\n </>\n )}\n </div>\n </div>\n );\n};\n\nexport default ChatHistory;\n","import { AssistLogo, Menu, MenuOpen } from \"../../../assets/icons\";\n\ninterface HeaderProps {\n isChatScreen: boolean;\n setIsChatScreen: React.Dispatch<React.SetStateAction<boolean>>;\n}\n\nconst Header = ({ isChatScreen, setIsChatScreen }: HeaderProps) => {\n const menuPressHandler = () => {\n setIsChatScreen((prev: boolean) => !prev);\n };\n const newChatPressHandler = () => {\n sessionStorage.removeItem(\"userAndTicket\");\n setIsChatScreen((prev: boolean) => !prev);\n };\n return (\n <div className=\"mhb-header mhb-border-b mhb-border-neutral-20 mhb-flex mhb-items-center mhb-justify-between\">\n <AssistLogo className=\"h-[36px] w-[36px] fill-current\" />\n\n <div className=\"mhb-flex mhb-gap-2 mhb-items-center\">\n {!isChatScreen ? (\n <button\n type=\"button\"\n onClick={newChatPressHandler}\n className=\"mhb-btn-reset mhb-p-3 mhb-bg-neutral-10 mhb-typography-para-thick-30 mhb-rounded-[9999px]\"\n >\n new chat\n </button>\n ) : (\n <div className=\"mhb-btn-reset mhb-p-3 mhb-invisible mhb-typography-para-thick-30\">\n new chat\n </div>\n )}\n <button\n type=\"button\"\n className=\"mhb-btn-reset mhb-h-[36px] mhb-w-[36px] mhb-flex mhb-items-center mhb-justify-center mhb-rounded-full mhb-bg-neutral-10\"\n onClick={menuPressHandler}\n >\n {isChatScreen ? (\n <Menu className=\"mhb-h-[16px] mhb-w-[16px] fill-current\" />\n ) : (\n <MenuOpen className=\"mhb-h-[16px] mhb-w-[16px]\" />\n )}\n </button>\n </div>\n </div>\n );\n};\n\nexport default Header;\n","export const Assist_Chat = `\nmutation AssistChat(\n $message: String!\n $ticket_id: Int\n $handover: Boolean\n $attachments: [String]\n) {\n assistChat(\n data: {\n ticket_id: $ticket_id,\n handover: $handover,\n message: $message,\n attachments: $attachments\n }\n ) {\n message_id\n text\n attachments {\n filename\n url\n }\n created_at\n ticket_id\n handover\n end\n user{\n user_name\n user_type\n }\n }\n}\n`;\n\nexport const PRESIGNED_URL = `\n mutation GetPresignedLink(\n $files: [String!]!\n $signature_type: String!\n ) {\n GetPresignedLink(data: { files: $files, signature_type: $signature_type }){\n filename\n url\n }\n }`;\n","export const ON_ASSIST_CHAT = `subscription onAssistChat($ticket_id: Int!) {\n onAssistChat(ticket_id: $ticket_id) {\n message_id\n text\n attachments {\n filename\n url\n }\n created_at\n ticket_id\n handover\n end\n user{\n user_name\n user_type\n }\n }\n }`;\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useSdkContext } from \"./useSdkContext\";\nimport { mutation, query, subscribe } from \"../api\";\nimport { ASSIST_HISTORY } from \"../graphql/query\";\nimport { Assist_Chat, PRESIGNED_URL } from \"../graphql/mutation\";\nimport { ON_ASSIST_CHAT } from \"../graphql/subscriptions\";\nimport { getSessionStorageData, setDataSessionStorage } from \"../utils\";\nimport type { Message } from \"../types\";\n\nconst PAGE_LIMIT = 10;\n\ntype AssitHistoryResponse = {\n assistHistory?: Message[];\n};\n\ntype AssitChatResponse = {\n assistChat: Message;\n};\n\ntype onAssistChatResponse = {\n onAssistChat: Message;\n};\n\ntype fileObjVariable = {\n files: File[];\n signature_type: string;\n ticketId: number;\n};\n\nconst useChatMessages = () => {\n const [historyData, setHistoryData] = useState<Message[]>([]);\n const [msgLoading, setMsgLoading] = useState(true);\n const [msgError, setMsgError] = useState(null);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const [isSending, setIsSending] = useState(false);\n const [hasMore, setHasMore] = useState(true);\n\n const { accessToken, profileInfo } = useSdkContext();\n\n const sessionTicket = getSessionStorageData(\"userAndTicket\")?.ticket_id;\n\n const employeeId = getSessionStorageData(\"userAndTicket\")?.employee_id;\n\n const historyTicket = useMemo(() => {\n return (\n historyData.find((itm: Message) => itm.ticket_id != null)?.ticket_id ??\n null\n );\n }, [historyData]);\n\n let ticketId = sessionTicket ?? historyTicket ?? null;\n\n // subscription for messages\n useEffect(() => {\n if (!ticketId) return;\n if (!profileInfo) return;\n if (employeeId && profileInfo?.employee_id != employeeId) {\n sessionStorage.removeItem(\"userAndTicket\");\n return;\n }\n\n const unsubscribe = subscribe(\n ON_ASSIST_CHAT,\n { ticket_id: ticketId },\n (data) => {\n const subsData = data as onAssistChatResponse;\n if (subsData?.onAssistChat?.user?.user_type === \"agent\") {\n setHistoryData((prev: Message[]) => [...prev, subsData.onAssistChat]);\n }\n }\n );\n\n return () => unsubscribe();\n }, [ticketId, profileInfo]);\n\n // initial history load\n useEffect(() => {\n if (!accessToken) return;\n if (!profileInfo) return;\n if (employeeId && profileInfo?.employee_id !== employeeId) {\n sessionStorage.removeItem(\"userAndTicket\");\n ticketId = null;\n }\n const obj = {\n ...(ticketId && { ticket_id: ticketId }),\n limit: PAGE_LIMIT,\n };\n query(ASSIST_HISTORY, obj, accessToken)\n .then(async (resp) => {\n const data = resp as AssitHistoryResponse;\n setHistoryData(data?.assistHistory ?? []);\n })\n .catch((err) => {\n setMsgError(err);\n })\n .finally(() => {\n setMsgLoading(false);\n });\n }, [profileInfo]);\n\n // load older messages\n const getNextPageData = (offset: number) => {\n if (!accessToken) return;\n if (isLoadingMore) return;\n const sessionTicket = getSessionStorageData(\"userAndTicket\")?.ticket_id;\n const obj = {\n ...(sessionTicket && { ticket_id: sessionTicket }),\n limit: PAGE_LIMIT,\n offset,\n };\n setIsLoadingMore(true);\n query(ASSIST_HISTORY, obj, accessToken)\n .then(async (resp) => {\n const data = resp as AssitHistoryResponse;\n const newItems = data?.assistHistory ?? [];\n setHistoryData((prev: Message[]) => [...newItems, ...prev]);\n if (newItems.length < PAGE_LIMIT) {\n setHasMore(false);\n }\n })\n .catch((err) => {\n setMsgError(err);\n })\n .finally(() => {\n setIsLoadingMore(false);\n });\n };\n\n // send message\n const sendMessage = (text: string) => {\n const getTicketId =\n historyData.find((itm: Message) => itm.ticket_id != null)?.ticket_id ??\n null;\n const getHandover =\n historyData.find((itm: Message) => itm.handover == true)?.handover ??\n false;\n const sendMessageObj = {\n ...(getTicketId && { ticket_id: getTicketId }),\n message: text,\n handover: getHandover,\n attachments: [],\n text: text,\n message_id: Math.random(),\n created_at: new Date().toISOString(),\n user: {\n user_name: profileInfo?.full_name,\n user_type: \"employee\",\n },\n };\n setIsSending(true);\n setHistoryData((prev: Message[]) => [...prev, sendMessageObj]);\n\n mutation(Assist_Chat, sendMessageObj, accessToken)\n .then(async (resp) => {\n const data = resp as AssitChatResponse;\n if (data.assistChat.user.user_type !== \"employee\") {\n setHistoryData((prev: Message[]) => [...prev, data.assistChat]);\n }\n if (\n !getSessionStorageData(\"userAndTicket\") &&\n data.assistChat?.ticket_id &&\n profileInfo\n ) {\n setDataSessionStorage(\"userAndTicket\", {\n ticket_id: data.assistChat?.ticket_id,\n employee_id: profileInfo.employee_id,\n });\n }\n })\n .catch(() => setHistoryData((prev) => prev.slice(0, -1)))\n .finally(() => setIsSending(false));\n };\n\n // upload attachment\n const upload = async (fileObj: fileObjVariable) => {\n setIsSending(true);\n const uploadObj = {\n files: fileObj.files.map(\n (file: File) => `${fileObj.ticketId}/${file.name}`\n ),\n signature_type: fileObj.signature_type,\n };\n try {\n const presignedResp: any = await mutation(\n PRESIGNED_URL,\n uploadObj,\n accessToken\n );\n for (const [index, file] of fileObj.files.entries()) {\n const url = presignedResp.GetPresignedLink[index]?.url;\n if (url) {\n await fetch(url, {\n method: \"PUT\",\n body: file,\n headers: { \"Content-Type\": file.type },\n });\n }\n }\n\n const getHandover =\n historyData.find((itm: Message) => itm.handover)?.handover ?? false;\n const attachments = fileObj.files.map((file: File) => ({\n url: URL.createObjectURL(file),\n filename: file.name,\n }));\n\n const optimisticMsg: Message = {\n ticket_id: fileObj.ticketId,\n handover: getHandover,\n attachments,\n text: \"\",\n message_id: Math.random(),\n created_at: new Date().toISOString(),\n user: { user_name: profileInfo?.full_name, user_type: \"employee\" },\n };\n setHistoryData((prev) => [...prev, optimisticMsg]);\n const sendMessageObj = {\n ticket_id: fileObj.ticketId,\n handover: getHandover,\n attachments: fileObj.files.map(\n (a: File) => `${fileObj.ticketId}/${a.name}`\n ),\n message: \"\",\n text: \"\",\n message_id: Math.random(),\n created_at: new Date().toISOString(),\n user: { user_name: profileInfo?.full_name, user_type: \"employee\" },\n };\n const resp = await mutation(Assist_Chat, sendMessageObj, accessToken);\n const data = resp as AssitChatResponse;\n\n if (data.assistChat.user.user_type !== \"employee\") {\n setHistoryData((prev) => [...prev, data.assistChat]);\n }\n if (\n !getSessionStorageData(\"userAndTicket\") &&\n data.assistChat?.ticket_id &&\n profileInfo\n ) {\n setDataSessionStorage(\"userAndTicket\", {\n ticket_id: data.assistChat.ticket_id,\n employee_id: profileInfo.employee_id,\n });\n }\n } catch (err) {\n setHistoryData((prev) => prev.slice(0, -1));\n } finally {\n setIsSending(false);\n }\n };\n\n return {\n historyData,\n msgLoading,\n msgError,\n isSending,\n sendMessage,\n getNextPageData,\n isLoadingMore,\n upload,\n hasMore,\n };\n};\n\nexport default useChatMessages;\n","const Toast = ({ toastMsg }: { toastMsg: string }) => {\n return (\n <div\n id=\"toast-simple\"\n className=\"mhb-border-red-60 mhb-fixed mhb-bottom-6 mhb-right-6 mhb-z-50 mhb-flex mhb-max-w-xs mhb-items-center mhb-space-x-4 mhb-divide-x mhb-divide-gray-200 mhb-rounded-lg mhb-border mhb-bg-white mhb-p-4 mhb-text-gray-700 mhb-shadow-lg dark:mhb-divide-gray-700 dark:mhb-border-gray-600 dark:mhb-bg-gray-800 dark:mhb-text-gray-300\"\n role=\"alert\"\n >\n <svg\n className=\"mhb-text-red-60 mhb-h-3 mhb-w-3\"\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 14 14\"\n >\n <path stroke=\"currentColor\" d=\"m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6\" />\n </svg>\n <div className=\"mhb-text-red-60 mhb-typography-label-thick-30 mhb-ps-4\">\n {toastMsg}\n </div>\n </div>\n );\n};\n\nexport default Toast;\n","import React, { useState } from \"react\";\nimport type { Message } from \"../../../types\";\n\ninterface Props {\n url: string | undefined;\n isFirstInGroup: boolean | null;\n msg: Message;\n fileType: string;\n}\n\nconst Attachment: React.FC<Props> = React.memo(\n ({ url, msg, isFirstInGroup, fileType }) => {\n const [isViewerOpen, setIsViewerOpen] = useState(false);\n\n const downloadPDF = async () => {\n const file = msg.attachments[0];\n const response = await fetch(file.url);\n const blob = await response.blob();\n const blobUrl = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.href = blobUrl;\n link.download = file.filename || \"download.pdf\";\n link.click();\n URL.revokeObjectURL(blobUrl);\n };\n\n return (\n <>\n {(fileType === \"jpg\" || fileType === \"jpeg\" || fileType === \"png\") && (\n <div className=\"mhb-flex\">\n <div\n className={`mhb-rounded-[16px] mhb-bg-white ${\n msg?.user?.user_type === \"customer\"\n ? \"mhb-ml-auto\"\n : \"mhb-mr-auto\"\n } ${\n isFirstInGroup\n ? msg?.user?.user_type === \"customer\"\n ? \"mhb-rounded-tr-[4px]\"\n : \"mhb-rounded-tl-[4px]\"\n : \"\"\n }`}\n >\n <div className=\"mhb-overflow-x-auto mhb-rounded-[16px] mhb-bg-neutral-10 mhb-px-1 mhb-py-1\">\n <div className=\"mhb-flex mhb-w-fit mhb-space-x-1\">\n <div className=\"mhb-h-[44px] mhb-w-[44px] mhb-flex-shrink-0 mhb-rounded-[12px] mhb-bg-white\">\n <img\n src={url}\n alt=\"Attachment\"\n className=\"mhb-h-[44px] mhb-w-[44px] mhb-rounded-[12px] mhb-object-cover\"\n onClick={() => setIsViewerOpen(true)}\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {fileType === \"pdf\" && (\n <button\n className=\"mhb-flex mhb-w-full mhb-items-center mhb-justify-between mhb-gap-3 mhb-rounded-[20px] mhb-mhb-border mhb-border-neutral-10 mhb-bg-white p-3 focus:mhb-outline-none\"\n onClick={() => downloadPDF()}\n >\n <div className=\"mhb-relative mhb-flex mhb-h-[36px] mhb-w-[36px] mhb-items-center mhb-justify-center mhb-rounded-[8px] mhb-bg-neutral-20\">\n {/* <div className=\"mhb-relative mhb-z-0 mhb-h-6 mhb-w-6\">\n <Image\n src=\"/icons/file_color.svg\"\n alt=\"pdf_attachment\"\n fill\n className=\"object-contain\"\n />\n </div> */}\n <p className=\"mhb-absolute mhb-text-white mhb-typography-para-40\">\n pdf\n </p>\n </div>\n <p className=\"mhb-max-w-[50px] mhb-overflow-hidden mhb-text-ellipsis mhb-whitespace-nowrap mhb-text-neutral-110 mhb-typography-para-thick-30\">\n {msg.attachments[0].filename.split(/[/_]/).pop()}\n </p>\n\n {/* <Icon name=\"download\" className=\"mb-1 h-4 w-4 fill-orange-60\" /> */}\n </button>\n )}\n\n {/* {isViewerOpen && fileType !== \"pdf\" && (\n <div\n className=\"mhb-fixed mhb-inset-0 mhb-z-50 mhb-flex mhb-items-center mhb-justify-center mhb-bg-black/80\"\n onClick={() => setIsViewerOpen(false)}\n >\n <div\n className=\"mhb-relative mhb-max-h-[200px] mhb-max-w-[200px] mhb-overflow-y-auto mhb-p-4\"\n onClick={(e) => e.stopPropagation()}\n >\n <img\n src={url}\n alt=\"Full size preview\"\n className=\"mhb-h-[150px] mhb-w-[150px] mhb-rounded-[12px] mhb-object-contain\"\n onClick={() => setIsViewerOpen(true)}\n />\n </div>\n </div>\n )} */}\n </>\n );\n },\n (prev, next) =>\n prev.url === next.url &&\n prev.isFirstInGroup === next.isFirstInGroup &&\n prev.msg.user?.user_type === next.msg.user?.user_type &&\n prev.fileType === next.fileType\n);\n\nexport default Attachment;\n","import { useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { Avatar } from \"more-sso-sdk\";\nimport useChatMessages from \"../../../hooks/useChatMessages\";\n\nimport { Attach_file, MoreAILogo, MoreAISparkle } from \"../../../assets/icons\";\nimport { formatTime } from \"../../../utils\";\nimport type { Message } from \"../../../types\";\nimport Toast from \"../Toast\";\nimport Attachment from \"../Attachment\";\nimport Loader from \"../Loader\";\n\nconst ALLOWED_TYPES = [\n \"image/jpeg\",\n \"image/jpg\",\n \"image/png\",\n \"application/pdf\",\n];\n\nconst Chat = () => {\n const [toastErr, setToastErr] = useState<string | null>(\"\");\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const inputChatRef = useRef<HTMLTextAreaElement>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const prevScrollHeightRef = useRef(0);\n const prevScrollTopRef = useRef(0);\n const isPrependingRef = useRef(false);\n\n const {\n historyData,\n sendMessage,\n getNextPageData,\n isLoadingMore,\n isSending,\n upload,\n msgLoading,\n hasMore,\n } = useChatMessages();\n\n useLayoutEffect(() => {\n const el = scrollContainerRef.current;\n if (!el) return;\n if (isPrependingRef.current) {\n const prevHeight = prevScrollHeightRef.current;\n const prevTop = prevScrollTopRef.current;\n const newHeight = el.scrollHeight;\n const diff = newHeight - prevHeight;\n el.scrollTop = prevTop + diff;\n isPrependingRef.current = false;\n } else {\n el.scrollTop = el.scrollHeight;\n }\n }, [historyData?.length]);\n\n const sendMessageHandler = () => {\n const value = inputChatRef.current?.value?.trim();\n if (!hasMore) isPrependingRef.current = false;\n if (!value) return;\n sendMessage(value);\n if (inputChatRef.current) {\n inputChatRef.current.value = \"\";\n }\n };\n\n const onKeyDownHandler = (e: React.KeyboardEvent) => {\n if (isSending) return;\n if (e.key === \"Enter\") {\n e.preventDefault();\n sendMessageHandler();\n }\n };\n\n const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {\n const el = e.currentTarget;\n const isScrollable = el.scrollHeight > el.clientHeight;\n if (!isScrollable) return;\n if (el.scrollTop <= 20 && !isLoadingMore) {\n const offset = historyData.length;\n prevScrollHeightRef.current = el.scrollHeight;\n prevScrollTopRef.current = el.scrollTop;\n isPrependingRef.current = true;\n getNextPageData(offset);\n }\n };\n\n const onFileChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(event.target.files || []);\n const validFiles = files.filter((file) =>\n ALLOWED_TYPES.includes(file.type)\n );\n const invalidFiles = files.filter(\n (file) => !ALLOWED_TYPES.includes(file.type)\n );\n\n if (invalidFiles.length > 0) {\n setToastErr(\n \"Only JPG, PNG, and PDF files are allowed. Other files like videos are not supported.\"\n );\n setTimeout(() => setToastErr(null), 3000);\n event.target.value = \"\";\n return;\n }\n\n const ticketId = historyData[historyData?.length - 1]?.ticket_id;\n if (validFiles.length > 0 && ticketId) {\n upload({\n files: validFiles,\n signature_type: \"upload\",\n ticketId: ticketId,\n });\n }\n };\n\n const handleFileClickHandler = () => {\n fileInputRef.current?.click();\n };\n\n const isAttachment = useMemo(() => {\n return historyData?.some((itm: Message) => itm.handover == true);\n }, [historyData]);\n\n console.log(historyData, \"historyData\");\n\n return (\n <div className=\"mhb-flex mhb-h-full mhb-flex-col mhb-overflow-hidden mhb-bg-white\">\n <>\n {msgLoading ? (\n <div className=\"mhb-py-3\">\n <Loader />\n </div>\n ) : (\n <>\n <div\n ref={scrollContainerRef}\n className=\"mhb-flex-grow mhb-overflow-y-auto mhb-py-3 [&>*]:[mhb-overflow-anchor:none]\"\n onScroll={handleScroll}\n >\n <div className=\"mhb-flex mhb-min-h-full mhb-flex-col mhb-justify-end mhb-gap-1\">\n {historyData?.map((item: Message, index) => {\n const isFirstInGroup =\n (\"user\" in item && index === 0) ||\n historyData[index - 1]?.user?.user_type !==\n item?.user?.user_type;\n const currentDate = new Date(item.created_at ?? \"\");\n const prevDate =\n index > 0\n ? new Date(historyData[index - 1].created_at ?? \"\")\n : null;\n\n const isFirstMessageOfDay =\n !prevDate ||\n currentDate.getDate() !== prevDate.getDate() ||\n currentDate.getMonth() !== prevDate.getMonth() ||\n currentDate.getFullYear() !== prevDate.getFullYear();\n\n const isGapMoreThan2Minutes =\n prevDate &&\n currentDate.getTime() - prevDate.getTime() > 2 * 60 * 1000;\n\n const shouldShowUserLabel =\n item.hasOwnProperty(\"user\") &&\n (isFirstInGroup ||\n isFirstMessageOfDay ||\n isGapMoreThan2Minutes);\n\n const hasImage = item?.attachments?.some((att) => {\n const ext = att.filename\n .match(/\\.([a-zA-Z0-9]+)(?:\\?|$)/)?.[1]\n ?.toLowerCase();\n return [\"jpg\", \"jpeg\", \"png\"].includes(ext || \"\");\n });\n return (\n <div\n key={item.message_id}\n className={`mhb-flex ${\n item.user.user_type === \"bot\" ||\n item.user.user_type === \"agent\"\n ? \"mhb-justify-start\"\n : \"mhb-justify-end\"\n }`}\n >\n <div className=\"mhb-max-w-[75%\">\n {shouldShowUserLabel && (\n <div\n className={`mhb-mb-1 mhb-flex mhb-items-center ${\n item.user.user_type === \"bot\" ||\n item.user.user_type === \"agent\"\n ? \"mhb-justify-start\"\n : \"mhb-justify-end\"\n }`}\n >\n {item.user.user_type === \"bot\" ? (\n <div className=\"mhb-flex mhb-gap-2 mhb-items-center\">\n <div className=\"mhb-flex mhb-items-center mhb-gap-1\">\n <MoreAISparkle />\n <div className=\"mhb-mb-1\">\n <MoreAILogo />\n </div>\n </div>\n\n <div className=\"mhb-flex mhb-gap-1 mhb-mt-[2px] mhb-items-center\">\n <div className=\"mhb-h-[2px] mhb-w-[2px] mhb-rounded-full mhb-bg-neutral-60\" />\n <p className=\"mhb-typography-para-40 mhb-text-neutral-60\">\n {formatTime(item.created_at)}\n </p>\n </div>\n </div>\n ) : item.user.user_type === \"employee\" ? (\n <div className=\"mhb-flex mhb-gap-2 mhb-items-center\">\n <div className=\"mhb-flex mhb-gap-1\">\n <p className=\"mhb-typography-para-40 mhb-text-neutral-60\">\n {formatTime(item.created_at)}\n </p>\n <div className=\"mhb-h-[2px] mhb-w-[2px] mhb-rounded-full mhb-bg-neutral-60 mhb-flex mhb-self-center\" />\n </div>\n <Avatar\n name={item?.user?.user_name || \"\"}\n employeeId={\"\"}\n className=\"mhb-size-4 mhb-shrink-0 mhb-rounded-full mhb-select-none\"\n />\n </div>\n ) : item.user.user_type === \"agent\" ? (\n <div className=\"mhb-flex mhb-gap-2 mhb-items-center\">\n <Avatar\n name={item?.user?.user_name || \"\"}\n employeeId={\"\"}\n className=\"mhb-size-4 mhb-shrink-0 mhb-rounded-full mhb-select-none\"\n />\n <div className=\"mhb-flex mhb-gap-1 mhb-mt-1 mhb-items-center\">\n <div className=\"mhb-h-[2px] mhb-w-[2px] mhb-rounded-full mhb-bg-neutral-60\" />\n <p className=\"mhb-typography-para-40 mhb-text-neutral-60\">\n {formatTime(item.created_at)}\n </p>\n </div>\n </div>\n ) : null}\n </div>\n )}\n <div className=\"mhb-flex mhb-overflow-hidden mhb-min-w-0\">\n {Array.isArray(item?.attachments) &&\n item?.attachments?.length > 0 ? (\n <div\n className={`mhb-p-1 mhb-rounded-[16px] ${\n item.user.user_type === \"bot\" ||\n item.user.user_type === \"agent\"\n ? `mhb-bg-orange-60 ${\n shouldShowUserLabel\n ? \"mhb-rounded-tl-[4px]\"\n : \"mhb-rounded-[20px]\"\n }`\n : `mhb-bg-neutral-10 ${\n shouldShowUserLabel\n ? \"mhb-rounded-tr-[4px]\"\n : \"mhb-rounded-[20px]\"\n }`\n } ${\n hasImage\n ? \"mhb-overflow-x-auto mhb-flex\"\n : \"mhb-flex mhb-flex-col mhb-gap-1\"\n }`}\n >\n {item.attachments.map((itm, index) => (\n <div key={index}>\n <Attachment\n url={itm.url}\n msg={item}\n isFirstInGroup={false}\n fileType={\n itm?.filename\n .match(/\\.([a-zA-Z0-9]+)(?:\\?|$)/)?.[1]\n ?.toLowerCase() || \"\"\n }\n />\n </div>\n ))}\n </div>\n ) : (\n <p\n className={`mhb-whitespace-pre-line mhb-break-words mhb-rounded-[16px] mhb-p-3\n mhb-typography-para-30 ${\n item.user.user_type === \"bot\" ||\n item.user.user_type === \"agent\"\n ? `mhb-bg-orange-60 mhb-text-white ${\n shouldShowUserLabel\n ? \"mhb-rounded-tl-[4px]\"\n : \"mhb-rounded-[20px]\"\n } `\n : `mhb-bg-neutral-10 mhb-text-neutral-110 mhb-ml-auto ${\n shouldShowUserLabel\n ? \"mhb-rounded-tr-[4px]\"\n : \"mhb-rounded-[20px]\"\n } `\n } \n `}\n >\n {item?.text}\n </p>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n\n <div className=\"mhb-chat-input-container mhb-sticky mhb-bottom-0 mhb-bg-white mhb-py-3 mhb-flex mhb-items-center mhb-gap-2\">\n <div className=\"mhb-bg-neutral-10 mhb-flex mhb-h-[80px] mhb-flex-1 mhb-rounded-xl mhb-p-3\">\n <div className=\"mhb-flex mhb-flex-1\">\n <textarea\n ref={inputChatRef}\n placeholder=\"Type your message here...\"\n className=\"mhb-btn-reset mhb-textarea mhb-flex-grow mhb-text-neutral-70 mhb-caret-orange-70 mhb-typography-para-30 mhb-bg-transparent mhb-resize-none placeholder:mhb-text-neutral-40\"\n onKeyDown={onKeyDownHandler}\n />\n </div>\n\n <div className=\"mhb-flex mhb-gap-1 mhb-justify-end mhb-items-end\">\n {isAttachment && (\n <button\n type=\"button\"\n className=\"mhb-btn-reset mhb-h-[36px] mhb-w-[36px] mhb-rounded-full mhb-bg-neutral-100 mhb-flex mhb-items-center mhb-justify-center mhb-outline-none\"\n disabled={isSending}\n onClick={handleFileClickHandler}\n >\n <Attach_file className=\"h-[16px] w-[16px] mhb-fill-current\" />\n <input\n type=\"file\"\n accept=\".jpg,.jpeg,.png,.pdf\"\n ref={fileInputRef}\n onChange={onFileChange}\n className=\"hidden\"\n />\n </button>\n )}\n\n <button\n type=\"button\"\n className=\"mhb-btn-reset mhb-h-[36px] mhb-rounded-[9999px] mhb-bg-orange-60 mhb-flex mhb-p-3 mhb-items-center mhb-justify-center mhb-shadow-[0_4px_12px_0_rgba(250,75,22,0.50)] mhb-outline-none\"\n disabled={isSending}\n onClick={sendMessageHandler}\n >\n <p className=\"mhb-typography-label-thick-30 mhb-text-white\">\n Send\n </p>\n </button>\n </div>\n </div>\n </div>\n </>\n )}\n </>\n {toastErr && <Toast toastMsg={toastErr} />}\n </div>\n );\n};\n\nexport default Chat;\n","import { useEffect } from \"react\";\nimport { useSdkContext } from \"../../hooks/useSdkContext\";\nimport Popover from \"./Popover\";\n\nimport ChatHistory from \"./ChatHistory\";\nimport Header from \"./Header\";\nimport Chat from \"./Chat\";\nimport { SSOAuthorization } from \"more-sso-sdk\";\n\ninterface ChatButtonProps {\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n align?: \"start\" | \"center\" | \"end\";\n}\n\nexport default function SDKRoot({\n side = \"top\",\n align = \"end\",\n}: ChatButtonProps) {\n const {\n authorized,\n isChatScreen,\n setIsChatScreen,\n accessToken,\n setProfileInfo,\n } = useSdkContext();\n\n const getProfileInfo = async () => {\n const profileInfo = await SSOAuthorization.getProfileDetails();\n setProfileInfo(profileInfo);\n };\n useEffect(() => {\n if (accessToken) {\n getProfileInfo();\n }\n }, []);\n\n return (\n <div className=\"mhb-root\">\n <Popover side={side} align={align}>\n <div className=\"mhb-h-full mhb-w-full mhb-flex mhb-flex-col mhb-min-h-0\">\n <Header\n isChatScreen={isChatScreen}\n setIsChatScreen={setIsChatScreen}\n />\n {/* {authorized ? <Chat /> : <div>Please provide valid credentials</div>} */}\n {isChatScreen ? <Chat /> : <ChatHistory />}\n </div>\n </Popover>\n </div>\n );\n}\n","import { InitOptions } from \"../types\";\n\nexport function validateSdk(options: InitOptions) {\n const { apiKey, accessToken } = options;\n\n if (!apiKey || !accessToken) {\n throw new Error(\"Missing parameters: apiKey, and accessToken are required\");\n }\n}\n","import { useEffect, useState } from \"react\";\nimport { SSOAuthorization } from \"more-sso-sdk\";\nimport SDKRoot from \"./components/SDKRoot\";\nimport { validateSdk } from \"../core/validate\";\nimport { SDKProvider } from \"../context/SDKContext\";\nimport { initChatbot } from \"../api\";\n\nimport type { InitOptions, PopOverProps } from \"../types\";\n\nlet sdkOptions: InitOptions | null = null;\nlet initialized = false;\nlet listeners: (() => void)[] = [];\n\nfunction notify() {\n for (const l of listeners) l();\n}\n\nexport function init(options: InitOptions) {\n if (initialized) {\n return;\n }\n validateSdk(options);\n SSOAuthorization.init({\n env: options.env,\n redirectUrl: options.redirectUrl,\n app: options.app,\n idp: options.idp,\n });\n sdkOptions = options;\n initialized = true;\n notify();\n initChatbot({ apiKey: options.apiKey, apiURL: options.apiURL });\n}\n\nexport function ChatButton(props: PopOverProps) {\n const [state, setState] = useState<{\n initialized: boolean;\n sdkOptions: InitOptions | null;\n }>({\n initialized,\n sdkOptions,\n });\n\n useEffect(() => {\n const cb = () => {\n setState({ initialized, sdkOptions });\n };\n listeners.push(cb);\n return () => {\n listeners = listeners.filter((l) => l !== cb);\n };\n }, []);\n\n if (!state.initialized || !state.sdkOptions) {\n return null;\n }\n\n return (\n <SDKProvider\n appName={state.sdkOptions.app}\n apiKey={state.sdkOptions.apiKey}\n token={state.sdkOptions.accessToken}\n >\n <SDKRoot {...props} />\n </SDKProvider>\n );\n}\n"],"names":["tokenUpdateListener","registerTokenListener","listener","notifyTokenUpdate","token","SDKContext","createContext","SDKProvider","children","appName","apiKey","authorized","setAuthorized","useState","accessToken","setAccessToken","isChatScreen","setIsChatScreen","profileInfo","setProfileInfo","useEffect","jsx","useSdkContext","context","useContext","SvgAssistLogo","props","React","SvgMenuOpen","SvgSearch","SvgHeadsetMic","SvgMenu","SvgAttachFile","SvgMoreAiLogo","SvgMoreAiSparkle","Popover","side","align","micClickHandler","jsxs","RadixPopover","Headset_mic","SearchBar","forwardedRef","onChangeHandler","Search","ForwardedSearchBar","forwardRef","Loader","ws","reconnectAttempts","isManuallyClosed","subscriptionIdCounter","subscriptions","isConnectionAcked","graphqlEndpoint","subscriptionEndpoint","failedQueue","isRefreshing","openWebsocket","apiHeader","payload","base64ApiHeader","base64Payload","appsyncUrl","connect","data","id","delay","processQueue","error","resolve","reject","enqueueFailedRequest","createChatbotClient","apiURLS","executeGraphql","operation","variables","result","errors","shouldRefresh","err","msg","newToken","refreshResult","SSOAuthorization","currentUrl","encodedRedirect","e","subscription","callback","message","chatbotClient","initChatbot","urls","query","gqlQuery","mutation","gqlMutation","subscribe","gqlSubscription","ASSIST_HISTORY","EMPLOYEEE_ASSIST_TICKET","LIMIT","useAssistTicket","ticketData","setTicketData","loading","setLoading","setError","isLoadingMore","setIsLoadingMore","searchText","setSearchText","isFirstRender","useRef","getEmployeeTickets","resp","timer","offset","EmployeeAssistTickets","prev","formatTime","ts","formatDateAndTime","iso","timeZone","locale","d","parts","day","p","month","year","time","setDataSessionStorage","key","getSessionStorageData","val","ChatHistory","scrollContainerRef","lastFetchedOffsetRef","searchInputRef","getNextPageTicketData","useLayoutEffect","handleScroll","el","scrollBottom","ticketBtnClickHandler","ticket_id","handleKeyDown","value","Fragment","item","Header","menuPressHandler","newChatPressHandler","AssistLogo","Menu","MenuOpen","Assist_Chat","PRESIGNED_URL","ON_ASSIST_CHAT","PAGE_LIMIT","useChatMessages","historyData","setHistoryData","msgLoading","setMsgLoading","msgError","setMsgError","isSending","setIsSending","hasMore","setHasMore","sessionTicket","employeeId","historyTicket","useMemo","itm","ticketId","unsubscribe","subsData","obj","text","getTicketId","getHandover","sendMessageObj","newItems","fileObj","uploadObj","file","presignedResp","index","url","attachments","optimisticMsg","a","Toast","toastMsg","Attachment","isFirstInGroup","fileType","isViewerOpen","setIsViewerOpen","downloadPDF","blob","blobUrl","link","next","ALLOWED_TYPES","Chat","toastErr","setToastErr","inputChatRef","fileInputRef","prevScrollHeightRef","prevScrollTopRef","isPrependingRef","sendMessage","getNextPageData","upload","prevHeight","prevTop","diff","sendMessageHandler","onKeyDownHandler","onFileChange","event","files","validFiles","handleFileClickHandler","isAttachment","currentDate","prevDate","isFirstMessageOfDay","isGapMoreThan2Minutes","shouldShowUserLabel","hasImage","att","ext","MoreAISparkle","MoreAILogo","Avatar","Attach_file","SDKRoot","getProfileInfo","validateSdk","options","sdkOptions","initialized","listeners","notify","l","init","ChatButton","state","setState","cb"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/core/sdkAuthBridge.ts","../src/context/SDKContext.tsx","../src/hooks/useSdkContext.ts","../src/assets/assist_logo.svg?react","../src/assets/menu_open.svg?react","../src/assets/search.svg?react","../src/assets/headset_mic.svg?react","../src/assets/menu.svg?react","../src/assets/attach_file.svg?react","../src/assets/more_ai_logo.svg?react","../src/assets/more_ai_sparkle.svg?react","../src/web/components/Popover/index.tsx","../src/web/components/SearchBar/index.tsx","../src/web/components/Loader/index.tsx","../src/api/client.ts","../src/api/index.ts","../src/graphql/query.ts","../src/hooks/useAssistTickets.ts","../src/utils/index.ts","../src/web/components/ChatHistory/index.tsx","../src/web/components/Header/index.tsx","../src/graphql/mutation.ts","../src/graphql/subscriptions.ts","../src/hooks/useChatMessages.ts","../src/web/components/Toast/index.tsx","../src/web/components/Attachment/index.tsx","../src/web/components/Chat/index.tsx","../src/web/components/SDKRoot.tsx","../src/core/validate.ts","../src/web/sdk.tsx"],"sourcesContent":["let tokenUpdateListener: ((token: string) => void) | null = null;\n\nexport function registerTokenListener(listener: (token: string) => void) {\n tokenUpdateListener = listener;\n}\n\nexport function notifyTokenUpdate(token: string) {\n tokenUpdateListener?.(token);\n}\n","import { createContext, useState, ReactNode, useEffect } from \"react\";\nimport { registerTokenListener } from \"../core/sdkAuthBridge\";\nimport { SDKContextProps } from \"../types\";\n\nexport const SDKContext = createContext<SDKContextProps | undefined>(undefined);\n\nexport const SDKProvider = ({\n children,\n appName,\n apiKey,\n token,\n}: {\n children: ReactNode;\n appName: string;\n apiKey: string;\n token: string;\n}) => {\n const [authorized, setAuthorized] = useState<boolean>(!!token);\n const [accessToken, setAccessToken] = useState<string>(token);\n const [isChatScreen, setIsChatScreen] = useState<boolean>(true);\n const [profileInfo, setProfileInfo] = useState<any>(null);\n\n useEffect(() => {\n registerTokenListener(setAccessToken);\n }, []);\n\n return (\n <SDKContext.Provider\n value={{\n appName,\n apiKey,\n accessToken,\n authorized,\n setAuthorized,\n isChatScreen,\n setIsChatScreen,\n profileInfo,\n setProfileInfo,\n }}\n >\n {children}\n </SDKContext.Provider>\n );\n};\n","import { useContext } from \"react\";\nimport { SDKContext } from \"../context/SDKContext\";\nimport { SDKContextProps } from \"../types\";\n\nexport const useSdkContext = (): SDKContextProps => {\n const context = useContext(SDKContext);\n if (!context) {\n throw new Error(\"useSdkContext must be used inside SDKProvider\");\n }\n return context;\n};\n","import * as React from \"react\";\nconst SvgAssistLogo = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 36, height: 36, viewBox: \"0 0 36 36\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M15.8261 8.67349C12.4046 8.67349 9.63062 11.447 9.63062 14.8685C9.63062 18.29 12.4046 21.064 15.8261 21.064C16.1656 21.064 16.4991 21.0365 16.8241 20.984C15.0221 20.4765 13.7006 18.8205 13.7006 16.856C13.7006 14.4875 15.6206 12.568 17.9886 12.568C19.8251 12.568 21.3921 13.722 22.0031 15.345C22.0151 15.188 22.0211 15.029 22.0211 14.8685C22.0211 11.447 19.2476 8.67349 15.8261 8.67349Z\", fill: \"#B72402\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M17.9984 7.621C13.0309 7.621 9.00342 11.6485 9.00342 16.616C9.00342 20.526 11.4949 23.8495 14.9744 25.0915V27.785C14.9744 28.228 15.4404 28.515 15.8349 28.3125C17.5759 27.4215 21.5219 25.332 23.5549 23.696C23.6114 23.65 23.6674 23.6065 23.7214 23.5605C23.7624 23.527 23.8009 23.494 23.8394 23.4605C25.7724 21.8115 26.9964 19.356 26.9964 16.616C26.9964 11.6485 22.9689 7.621 17.9989 7.621H17.9984ZM15.8274 21.064C15.5379 21.064 15.2539 21.0435 14.9749 21.005C11.9559 20.59 9.63092 18.0015 9.63092 14.8675C9.63092 11.4465 12.4039 8.6735 15.8274 8.6735C19.2509 8.6735 22.0214 11.4465 22.0214 14.8675C22.0214 15.0265 22.0164 15.185 22.0034 15.341C21.8319 17.6225 20.4259 19.5555 18.4544 20.48C17.9424 20.7205 17.3919 20.892 16.8154 20.9845C16.4929 21.036 16.1624 21.064 15.8269 21.064H15.8274Z\", fill: \"#FA4B16\" }));\nexport default SvgAssistLogo;\n","import * as React from \"react\";\nconst SvgMenuOpen = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 16, height: 16, viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M14.4167 3.58334L14.4167 5.13334L5.58341 5.13333L5.58341 3.58333L14.4167 3.58334ZM2.66675 4.5L6.06675 8.01667L2.68341 11.5167L1.56675 10.4L3.86675 8.01667L1.55008 5.61667L2.66675 4.5ZM14.4167 7.25L14.4167 8.81667L7.48341 8.81667L7.48341 7.25L14.4167 7.25ZM14.4167 10.8667L14.4167 12.4333L5.58341 12.4333L5.58341 10.8667L14.4167 10.8667Z\", fill: \"#172128\" }));\nexport default SvgMenuOpen;\n","import * as React from \"react\";\nconst SvgSearch = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 16, height: 16, viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M13.25 14.45L8.7667 9.98335C8.44448 10.238 8.06414 10.4378 7.6257 10.5827C7.18725 10.7276 6.71203 10.8 6.20003 10.8C4.92048 10.8 3.8367 10.3556 2.9487 9.46668C2.0607 8.57779 1.6167 7.50557 1.6167 6.25001C1.6167 4.99446 2.06114 3.92223 2.95003 3.03335C3.83892 2.14446 4.91392 1.70001 6.17503 1.70001C7.43614 1.70001 8.50837 2.14446 9.3917 3.03335C10.275 3.92223 10.7167 4.99529 10.7167 6.25251C10.7167 6.75085 10.6473 7.2139 10.5084 7.64168C10.3695 8.06946 10.1611 8.47223 9.88337 8.85001L14.3834 13.3167L13.25 14.45ZM6.1892 9.23335C7.02142 9.23335 7.72298 8.94307 8.29387 8.36251C8.86464 7.78196 9.15003 7.07779 9.15003 6.25001C9.15003 5.42223 8.86381 4.71807 8.29137 4.13751C7.71892 3.55696 7.0182 3.26668 6.1892 3.26668C5.35109 3.26668 4.64059 3.55696 4.0577 4.13751C3.47481 4.71807 3.18337 5.42223 3.18337 6.25001C3.18337 7.07779 3.47398 7.78196 4.0552 8.36251C4.63642 8.94307 5.34775 9.23335 6.1892 9.23335Z\", fill: \"#172128\" }));\nexport default SvgSearch;\n","import * as React from \"react\";\nconst SvgHeadsetMic = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 20, height: 20, viewBox: \"0 0 20 20\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M10.0417 19.3958V17.7292H16.0625V16.6042H12.7292V9.70833H16.0625V8.77083C16.0625 7.10417 15.4757 5.67014 14.3021 4.46875C13.1285 3.26736 11.7049 2.66667 10.0312 2.66667C8.38542 2.66667 6.95833 3.26736 5.75 4.46875C4.54167 5.67014 3.9375 7.10417 3.9375 8.77083V9.70833H7.27083V16.6042H1.97917V8.775C1.97917 7.66722 2.19229 6.62306 2.61854 5.6425C3.04479 4.66195 3.62132 3.80319 4.34812 3.06625C5.07493 2.32931 5.92903 1.74861 6.91042 1.32417C7.89167 0.899722 8.93667 0.6875 10.0454 0.6875C11.154 0.6875 12.1944 0.899306 13.1667 1.32292C14.1389 1.74653 14.9868 2.32424 15.7104 3.05604C16.4342 3.78785 17.0036 4.64278 17.4187 5.62083C17.834 6.59889 18.0417 7.64889 18.0417 8.77083V19.3958H10.0417ZM3.9375 14.625H5.3125V11.6875H3.9375V14.625ZM14.7083 14.625H16.0625V11.6875H14.7083V14.625Z\", fill: \"#172128\" }));\nexport default SvgHeadsetMic;\n","import * as React from \"react\";\nconst SvgMenu = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 16, height: 16, viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M1.58334 12.6167V11.0333H14.4333V12.6167H1.58334ZM1.58334 8.78333V7.21666H14.4333V8.78333H1.58334ZM1.58334 4.96666V3.38333H14.4333V4.96666H1.58334Z\", fill: \"#172128\" }));\nexport default SvgMenu;\n","import * as React from \"react\";\nconst SvgAttachFile = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 16, height: 16, viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M12.7833 10.679C12.7833 11.9375 12.3239 12.9861 11.4053 13.825C10.4867 14.6639 9.39228 15.0834 8.12194 15.0834C6.85172 15.0834 5.76105 14.6639 4.84994 13.825C3.93883 12.9861 3.48328 11.9389 3.48328 10.6834V4.08336C3.48328 3.17869 3.81383 2.42197 4.47494 1.81319C5.13605 1.20441 5.92083 0.900024 6.82928 0.900024C7.73783 0.900024 8.52117 1.20441 9.17928 1.81319C9.8375 2.42197 10.1666 3.17869 10.1666 4.08336V10.35C10.1666 10.8935 9.96383 11.3543 9.55828 11.7325C9.15272 12.1109 8.673 12.3 8.11911 12.3C7.56533 12.3 7.09033 12.1127 6.69411 11.738C6.298 11.3634 6.09994 10.9007 6.09994 10.35V4.18336H7.54994V10.35C7.54994 10.4945 7.60711 10.6139 7.72144 10.7084C7.83578 10.8028 7.97267 10.85 8.13211 10.85C8.29155 10.85 8.42883 10.8036 8.54394 10.7109C8.65905 10.6181 8.71661 10.4978 8.71661 10.35V4.10002C8.72772 3.59714 8.54439 3.17975 8.16661 2.84786C7.78883 2.51597 7.34322 2.35002 6.82978 2.35002C6.31633 2.35002 5.87189 2.51352 5.49644 2.84052C5.121 3.16752 4.93328 3.5818 4.93328 4.08336V10.6834C4.94439 11.5417 5.26367 12.2507 5.89111 12.8105C6.51855 13.3702 7.2715 13.65 8.14994 13.65C9.01294 13.65 9.762 13.3695 10.3971 12.8084C11.0323 12.2472 11.3444 11.5389 11.3333 10.6834V3.70002H12.7833V10.679Z\", fill: \"white\" }));\nexport default SvgAttachFile;\n","import * as React from \"react\";\nconst SvgMoreAiLogo = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 41, height: 12, viewBox: \"0 0 41 12\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { clipPath: \"url(#clip0_100_2379)\" }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M21.1825 7.56627H22.1696V5.46029C21.9697 5.38454 21.6628 5.35825 21.4373 5.35825C20.6381 5.35825 19.9407 5.89477 19.9261 6.85195H19.8885L19.4834 5.40815H17.7463V11.7965H20.0681V8.80642C20.0681 8.10324 20.2821 7.56672 21.1825 7.56672V7.56627Z\", fill: \"#172128\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M2.31875 8.00074C2.31875 7.40005 2.55889 7.11976 3.04271 7.11976C3.48584 7.11976 3.69989 7.3996 3.69989 8.00074V11.7956H6.0217V8.00074C6.0217 7.40005 6.26184 7.11976 6.74256 7.11976C7.18835 7.11976 7.4024 7.3996 7.4024 8.00074V11.7956H9.72111V7.32385C9.72111 6.14831 9.12761 5.21786 7.68013 5.21786C6.74212 5.21786 6.14862 5.53603 5.78111 6.25036H5.75502C5.4627 5.62605 4.8661 5.21786 3.98028 5.21786C3.04227 5.21786 2.45761 5.53603 2.10426 6.25036H2.07817L1.80043 5.40725H3.8147e-05V11.7956H2.31875V8.00074Z\", fill: \"#172128\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M10.1851 8.7301C10.1851 10.8129 11.8701 12 13.7227 12C15.5753 12 17.2837 10.8129 17.2837 8.7301V8.47342C17.2837 6.37903 15.5726 5.20349 13.7227 5.20349C11.8728 5.20349 10.1851 6.38215 10.1851 8.47342V8.7301ZM13.7346 7.02071C14.5975 7.02071 14.9765 7.70919 14.9765 8.59017C14.9765 9.47116 14.597 10.1743 13.7346 10.1743C12.8722 10.1743 12.4928 9.47116 12.4928 8.59017C12.4928 7.70919 12.8749 7.02071 13.7346 7.02071Z\", fill: \"#172128\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M25.7969 5.20346C23.9324 5.20346 22.3867 6.43158 22.3867 8.47339V8.73007C22.3867 10.8623 24.0602 12 25.8982 12C27.3545 12 28.7874 11.2589 29.0797 9.70151H26.975C26.8101 10.1333 26.3669 10.2764 25.9618 10.2764C25.2264 10.2764 24.7837 9.76301 24.7315 9.08611H29.0912C29.1173 8.87044 29.1173 8.60173 29.1173 8.38293C29.1173 6.08444 27.3686 5.20346 25.7969 5.20346ZM24.7576 7.75862C24.8067 7.19848 25.137 6.71143 25.846 6.71143H25.8491C26.4948 6.71143 26.8623 7.19581 26.8623 7.75862H24.7576Z\", fill: \"#172128\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M34.376 3.1975C33.6653 3.44883 32.9979 3.86058 32.4292 4.43319C31.8605 5.00581 31.4523 5.67824 31.2028 6.39435C30.9538 5.67824 30.5448 5.00581 29.9765 4.43275C29.4082 3.86013 28.7408 3.44838 28.0301 3.19705C28.7408 2.94572 29.4082 2.53398 29.9769 1.96136C30.5452 1.38874 30.9538 0.716307 31.2033 -0.000244141C31.4527 0.716307 31.8613 1.3883 32.4301 1.96136C32.9984 2.53398 33.6657 2.94572 34.3764 3.19705L34.376 3.1975Z\", fill: \"url(#paint0_linear_100_2379)\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M35.4872 12.0001C34.8667 12.0001 34.2696 11.7715 33.9119 11.3869C33.5895 11.0621 33.4108 10.6655 33.4108 10.1722V10.1C33.4108 8.82507 34.4611 8.12769 35.9051 8.12769C36.4061 8.12769 36.9077 8.17581 37.3729 8.34426V7.94721C37.3729 6.92497 37.0027 6.27571 35.8812 6.27571C35.1413 6.27571 34.4492 6.5404 34.4134 7.38217H33.6854V7.30998C33.8287 6.0471 34.7835 5.61441 35.8578 5.61441C37.1708 5.61441 38.0898 6.17945 38.0898 7.93563V11.808H37.5768C37.4932 11.5915 37.4335 11.3508 37.3499 11.1347H37.326C36.932 11.6516 36.1682 12.0005 35.488 12.0005L35.4872 12.0001ZM37.3729 9.54697V9.01803C36.8718 8.84958 36.3823 8.76536 35.8812 8.76536C35.01 8.76536 34.1507 9.13834 34.1507 10.0643C34.1507 10.9061 34.7831 11.3152 35.6066 11.3152C36.43 11.3152 37.3729 10.5937 37.3729 9.54742V9.54697Z\", fill: \"#172128\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M40.9998 3.77446C40.9998 4.09931 40.7371 4.3395 40.4152 4.3395C40.0932 4.3395 39.8305 4.09887 39.8305 3.77446V3.7504C39.8305 3.40148 40.0932 3.19739 40.4152 3.19739C40.7371 3.19739 40.9998 3.40193 40.9998 3.7504V3.77446ZM40.0569 11.8076V5.79444H40.7729V11.8076H40.0569Z\", fill: \"#172128\" })), /* @__PURE__ */ React.createElement(\"defs\", null, /* @__PURE__ */ React.createElement(\"linearGradient\", { id: \"paint0_linear_100_2379\", x1: 31.3237, y1: 301678e-10, x2: 34.1742, y2: 2.06507, gradientUnits: \"userSpaceOnUse\" }, /* @__PURE__ */ React.createElement(\"stop\", { stopColor: \"#FA4B16\" }), /* @__PURE__ */ React.createElement(\"stop\", { offset: 1, stopColor: \"#8E64EF\" })), /* @__PURE__ */ React.createElement(\"clipPath\", { id: \"clip0_100_2379\" }, /* @__PURE__ */ React.createElement(\"rect\", { width: 41, height: 12, fill: \"white\" }))));\nexport default SvgMoreAiLogo;\n","import * as React from \"react\";\nconst SvgMoreAiSparkle = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 16, height: 16, viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M14.4241 8.00167C12.9851 8.50672 11.6338 9.33413 10.4822 10.4848C9.33067 11.6355 8.50415 12.9868 7.9991 14.4258C7.49495 12.9868 6.66664 11.6355 5.51596 10.4839C4.36528 9.33324 3.01402 8.50582 1.575 8.00078C3.01402 7.49573 4.36528 6.66832 5.51686 5.51764C6.66754 4.36696 7.49495 3.01569 8 1.57578C8.50504 3.01569 9.33246 4.36606 10.484 5.51764C11.6347 6.66832 12.986 7.49573 14.425 8.00078L14.4241 8.00167Z\", fill: \"url(#paint0_linear_100_2352)\" }), /* @__PURE__ */ React.createElement(\"defs\", null, /* @__PURE__ */ React.createElement(\"linearGradient\", { id: \"paint0_linear_100_2352\", x1: 8.24377, y1: 1.57633, x2: 13.9855, y2: 5.76743, gradientUnits: \"userSpaceOnUse\" }, /* @__PURE__ */ React.createElement(\"stop\", { stopColor: \"#FA4B16\" }), /* @__PURE__ */ React.createElement(\"stop\", { offset: 1, stopColor: \"#8E64EF\" }))));\nexport default SvgMoreAiSparkle;\n","import * as React from \"react\";\nimport * as RadixPopover from \"@radix-ui/react-popover\";\nimport { Headset_mic } from \"../../../assets/icons\";\nimport { useSdkContext } from \"../../../hooks/useSdkContext\";\n\ntype PopoverSide = \"top\" | \"bottom\" | \"left\" | \"right\";\n\ninterface PopoverProps {\n title?: string;\n children: React.ReactNode;\n side?: PopoverSide;\n align?: \"start\" | \"center\" | \"end\";\n}\n\nexport default function Popover({\n children,\n side = \"top\",\n align = \"end\",\n}: PopoverProps) {\n const { setIsChatScreen, isChatScreen } = useSdkContext();\n const micClickHandler = () => {\n if (!isChatScreen) {\n setIsChatScreen(true);\n }\n };\n return (\n <RadixPopover.Root>\n <RadixPopover.Trigger\n asChild\n className=\"data-[state=open]:mhb-outline data-[state=open]:mhb-outline-neutral-110\"\n >\n <button\n type=\"button\"\n className=\"mhb-h-12 mhb-w-12 mhb-rounded-[16px] mhb-bg-neutral-10 mhb-flex mhb-items-center mhb-justify-center\"\n onClick={micClickHandler}\n >\n <Headset_mic className=\"mhb-h-5 mhb-w-5\" />\n </button>\n </RadixPopover.Trigger>\n\n <RadixPopover.Portal>\n <RadixPopover.Content\n side={side}\n align={align}\n sideOffset={12}\n className=\"mhb-popover\n mhb-flex mhb-flex-col\n mhb-h-[460px] mhb-max-h-[460px]\n mhb-w-[323px]\n mhb-bg-white\n mhb-rounded-[16px]\n mhb-border mhb-border-neutral-10\n mhb-shadow-[0_4px_20px_rgba(23,33,40,0.05)]\n mhb-overflow-hidden\"\n >\n <div className=\"mhb-popover-children mhb-h-full mhb-flex mhb-flex-col\">\n {children}\n </div>\n </RadixPopover.Content>\n </RadixPopover.Portal>\n </RadixPopover.Root>\n );\n}\n","import { forwardRef } from \"react\";\nimport { Search } from \"../../../assets/icons\";\n\ninterface searchBarProps {\n forwardedRef?: React.Ref<HTMLInputElement>;\n onChangeHandler: (e: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\nconst SearchBar = ({ forwardedRef, onChangeHandler }: searchBarProps) => {\n return (\n <div className=\"mhb-h-[48px] mhb-flex mhb-rounded-[9999px] mhb-bg-neutral-10 mhb-items-center mhb-gap-3 mhb-px-3\">\n <Search className=\"mhb-h-4 mhb-w-4\" />\n\n <input\n ref={forwardedRef}\n onChange={onChangeHandler}\n type=\"text\"\n placeholder=\"Search your chats\"\n className=\"\n mhb-input \n mhb-flex-1\n mhb-w-full\n mhb-typography-para-30\n mhb-text-neutral-110\n mhb-bg-transparent\n mhb-border-0\n mhb-outline-none\n mhb-whitespace-nowrap\n mhb-overflow-visible\n placeholder:mhb-text-neutral-40\n focus:mhb-outline-none\n \"\n />\n </div>\n );\n};\n\nconst ForwardedSearchBar = forwardRef<HTMLInputElement, searchBarProps>(\n (props, forwardedRef) => {\n return <SearchBar {...props} forwardedRef={forwardedRef} />;\n }\n);\n\nexport default ForwardedSearchBar;\n","const Loader = () => {\n return (\n <div className=\"mhb-flex mhb-items-center mhb-justify-center\">\n <svg\n className=\"mhb-w-8 mhb-h-8 mhb-animate-spin mhb-text-neutral-110\"\n viewBox=\"0 0 50 50\"\n >\n <circle\n cx=\"25\"\n cy=\"25\"\n r=\"20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n strokeDasharray=\"100\"\n strokeDashoffset=\"60\"\n />\n </svg>\n </div>\n );\n};\nexport default Loader;\n","interface SubscriptionMessage {\n id: string;\n type: \"start\" | \"stop\";\n payload: {\n data: string;\n extensions: {\n authorization: {\n host: string;\n \"x-api-key\": string;\n };\n };\n };\n}\n\ninterface SubscriptionEntry {\n message: SubscriptionMessage;\n callback: (data: unknown) => void;\n}\n\ninterface GraphQLResponse<T> {\n data?: T;\n errors?: Array<{ message: string }>;\n}\n\nexport interface ChatbotClient {\n executeGraphql: <T>(\n operation: string,\n variables?: Record<string, unknown>,\n token?: string\n ) => Promise<T>;\n subscribe: (\n subscription: string,\n variables: Record<string, unknown>,\n callback: (data: unknown) => void\n ) => () => void;\n close: () => void;\n}\n\ntype FailedRequest = {\n resolve: (token: string) => void;\n reject: (error: any) => void;\n};\n\nimport { SSOAuthorization } from \"more-sso-sdk\";\nimport { notifyTokenUpdate } from \"../core/sdkAuthBridge\";\nimport type { ApiUrls } from \"../types\";\n\nlet ws: WebSocket | null = null;\nlet reconnectAttempts = 0;\nlet isManuallyClosed = false;\nlet subscriptionIdCounter = 0;\nconst subscriptions: Record<string, SubscriptionEntry> = {};\nlet isConnectionAcked = false;\n\nlet graphqlEndpoint = \"\";\nlet subscriptionEndpoint = \"\";\nlet apiKey = \"\";\nlet failedQueue: FailedRequest[] = [];\nlet isRefreshing = false;\n\nfunction openWebsocket() {\n const host = new URL(graphqlEndpoint).hostname;\n const apiHeader = {\n host: host,\n \"x-api-key\": apiKey,\n };\n const payload = {};\n const base64ApiHeader = btoa(JSON.stringify(apiHeader));\n const base64Payload = btoa(JSON.stringify(payload));\n const appsyncUrl = `${subscriptionEndpoint}?header=${base64ApiHeader}&payload=${base64Payload}`;\n\n return new WebSocket(appsyncUrl, [\"graphql-ws\"]);\n}\n\nconst connect = () => {\n isManuallyClosed = false;\n ws = openWebsocket();\n isConnectionAcked = false;\n\n ws.onopen = () => {\n reconnectAttempts = 0;\n ws?.send(JSON.stringify({ type: \"connection_init\" }));\n };\n\n ws.onmessage = (e) => {\n const data = JSON.parse(e.data);\n if (!isConnectionAcked) {\n if (data.type === \"connection_ack\") {\n isConnectionAcked = true;\n for (const id in subscriptions) {\n ws?.send(JSON.stringify(subscriptions[id].message));\n }\n }\n } else {\n if (data.type === \"error\") {\n } else if (data.type === \"data\" && subscriptions[data.id]) {\n subscriptions[data.id].callback(data.payload.data);\n } else if (data.type === \"complete\" && subscriptions[data.id]) {\n delete subscriptions[data.id];\n }\n }\n };\n\n ws.onclose = () => {\n if (isManuallyClosed) return;\n const delay = Math.min(\n 1000 * Math.pow(2, reconnectAttempts) + Math.random() * 1000,\n 30000\n );\n setTimeout(() => {\n reconnectAttempts++;\n connect();\n }, delay);\n };\n\n ws.onerror = () => {\n ws?.close();\n };\n};\n\nconst processQueue = (error: any, token: string | null = null): void => {\n failedQueue.forEach(({ resolve, reject }) => {\n if (error) {\n reject(error);\n } else if (token) {\n resolve(token);\n }\n });\n failedQueue = [];\n};\n\nfunction enqueueFailedRequest(): Promise<string> {\n return new Promise((resolve, reject) => {\n failedQueue.push({ resolve, reject });\n });\n}\n\nconst createChatbotClient = (apiURLS: ApiUrls): ChatbotClient => {\n graphqlEndpoint = apiURLS.apiURL;\n apiKey = apiURLS.apiKey;\n subscriptionEndpoint = apiURLS.apiURL\n .replace(\"https://\", \"wss://\")\n .replace(\"appsync-api\", \"appsync-realtime-api\");\n\n connect();\n const executeGraphql = async <T>(\n operation: string,\n variables: Record<string, unknown> = {},\n token?: string\n ): Promise<T> => {\n const response = await fetch(graphqlEndpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-api-key\": apiKey,\n ...(token ? { Authorization: `Bearer ${token}` } : {}),\n },\n body: JSON.stringify({ query: operation, variables }),\n });\n\n const result: GraphQLResponse<T> = await response.json();\n const errors = Array.isArray(result.errors) ? result.errors : [];\n console.log(errors, \"check errors\");\n // Auth error handling\n const shouldRefresh = errors.some((err) => {\n const msg = err.message?.toLowerCase() ?? \"\";\n return (\n msg.includes(\"unauthorized\") ||\n msg.includes(\"jwt\") ||\n msg.includes(\"expired\")\n );\n });\n console.log(shouldRefresh, \"check shouldRefresh\");\n if (shouldRefresh) {\n console.log(shouldRefresh, \"inside shouldRefresh\");\n // if refresh already running queue request\n if (isRefreshing) {\n const newToken = await enqueueFailedRequest();\n return executeGraphql<T>(operation, variables, newToken);\n }\n\n isRefreshing = true;\n\n try {\n let refreshResult: any = null;\n if (process.env.NODE_ENV === \"development\") {\n refreshResult = await SSOAuthorization.getDevToken(\"432896\");\n } else {\n const currentUrl = window.location.href;\n const encodedRedirect = encodeURIComponent(currentUrl);\n refreshResult = await SSOAuthorization.getToken(encodedRedirect);\n console.log(refreshResult, \"refreshResult check\");\n }\n if (!refreshResult?.token) {\n throw new Error(\"Refresh did not return an access token\");\n }\n\n notifyTokenUpdate(refreshResult.token);\n processQueue(null, refreshResult.token);\n\n // retry current request\n return executeGraphql<T>(operation, variables, refreshResult.token);\n } catch (error) {\n console.log(error, \"check updating refresh\");\n processQueue(error, null);\n throw error;\n } finally {\n isRefreshing = false;\n }\n }\n\n if (errors.length > 0) {\n throw new Error(errors.map((e) => e.message).join(\", \"));\n }\n\n return result.data as T;\n };\n return {\n executeGraphql,\n\n subscribe: (\n subscription: string,\n variables: Record<string, unknown> = {},\n callback: (data: unknown) => void\n ): (() => void) => {\n if (!subscription.trim().startsWith(\"subscription\")) {\n return () => {};\n }\n\n const id = `${++subscriptionIdCounter}`;\n const message: SubscriptionMessage = {\n id,\n type: \"start\",\n payload: {\n data: JSON.stringify({ query: subscription, variables }),\n extensions: {\n authorization: {\n host: new URL(graphqlEndpoint).hostname,\n \"x-api-key\": apiKey,\n },\n },\n },\n };\n\n subscriptions[id] = { message, callback };\n\n if (isConnectionAcked && ws?.readyState === WebSocket.OPEN) {\n ws.send(JSON.stringify(message));\n }\n\n return () => {\n if (ws?.readyState === WebSocket.OPEN) {\n ws.send(JSON.stringify({ id, type: \"stop\" }));\n }\n delete subscriptions[id];\n };\n },\n\n close: () => {\n isManuallyClosed = true;\n ws?.close();\n },\n };\n};\n\nexport default createChatbotClient;\n","import createChatbotClient, { ChatbotClient } from \"./client\";\nimport type { ApiUrls } from \"../types\";\n\nlet chatbotClient: ChatbotClient;\n\nexport const initChatbot = (urls: ApiUrls): void => {\n if (chatbotClient) return;\n chatbotClient = createChatbotClient(urls);\n};\n\nexport const query = async <T>(\n gqlQuery: string,\n variables: Record<string, unknown> = {},\n token: string\n): Promise<T> => {\n if (!chatbotClient) throw new Error(\"client is not created\");\n return chatbotClient.executeGraphql<T>(gqlQuery, variables, token);\n};\n\nexport const mutation = async <T>(\n gqlMutation: string,\n variables: Record<string, unknown> = {},\n token: string\n): Promise<T> => {\n if (!chatbotClient) throw new Error(\"client is not created\");\n return chatbotClient.executeGraphql<T>(gqlMutation, variables, token);\n};\n\nexport const subscribe = (\n gqlSubscription: string,\n variables: Record<string, unknown> = {},\n callback: (data: unknown) => void\n): (() => void) => {\n if (!chatbotClient) throw new Error(\"client is not created\");\n return chatbotClient.subscribe(gqlSubscription, variables, callback);\n};\n","export const ASSIST_HISTORY = `query AssistHistory($limit: Int, $offset: Int , $ticket_id: Int) {\n assistHistory(limit: $limit, offset: $offset, ticket_id: $ticket_id) {\n message_id\n text\n attachments{\n filename\n url\n }\n ticket_id\n handover\n created_at\n end\n user{\n user_name\n user_type\n }\n }}`;\n\nexport const EMPLOYEEE_ASSIST_TICKET = `query EmployeeAssistTickets($search_key: String $limit: Int, $offset: Int) {\n EmployeeAssistTickets(search_key: $search_key limit: $limit, offset: $offset) {\n ticket_id\n parent_id\n user_id\n source\n source_reference_id\n title\n description\n status\n status_id\n assigned_to\n priority\n is_escalated\n resolution_comments\n bill_no\n customer_rating\n agent_rating\n due_date\n created_at\n modified_by\n updated_at\n ticket_meta\n broadcast_list\n cat_desc\n subcat_desc\n user_type\n last_message_time\n ticket_type\n chat_handover\n is_new\n }\n }`;\n","import { useEffect, useRef, useState } from \"react\";\nimport { query } from \"../api\";\nimport { EMPLOYEEE_ASSIST_TICKET } from \"../graphql/query\";\nimport { useSdkContext } from \"./useSdkContext\";\nimport type { Ticket } from \"../types\";\n\ntype EmployeeAssistTicketsResponse = {\n EmployeeAssistTickets: Ticket[];\n};\n\nconst LIMIT = 10;\n\nconst useAssistTicket = () => {\n const [ticketData, setTicketData] = useState<Ticket[]>([]);\n const [loading, setLoading] = useState<Boolean>(true);\n const [error, setError] = useState(null);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const [searchText, setSearchText] = useState<string | null>(\"\");\n\n const isFirstRender = useRef(true);\n\n const { accessToken } = useSdkContext();\n\n const getEmployeeTickets = () => {\n query(\n EMPLOYEEE_ASSIST_TICKET,\n { limit: LIMIT, search_key: searchText },\n accessToken\n )\n .then(async (resp) => {\n const data = resp as EmployeeAssistTicketsResponse;\n setTicketData(data?.EmployeeAssistTickets ?? []);\n })\n .catch((err) => {\n setError(err);\n })\n .finally(() => {\n setLoading(false);\n });\n };\n\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n getEmployeeTickets();\n return;\n }\n\n const timer = setTimeout(() => {\n getEmployeeTickets();\n }, 400);\n\n return () => clearTimeout(timer);\n }, [searchText]);\n\n const getNextPageTicketData = (offset: number) => {\n if (!accessToken) return;\n if (isLoadingMore) return;\n setIsLoadingMore(true);\n query(EMPLOYEEE_ASSIST_TICKET, { limit: LIMIT, offset }, accessToken)\n .then(async (resp) => {\n const { EmployeeAssistTickets } = resp as EmployeeAssistTicketsResponse;\n setTicketData((prev: Ticket[]) => [...prev, ...EmployeeAssistTickets]);\n })\n .catch((err) => {\n setError(err);\n })\n .finally(() => {\n setIsLoadingMore(false);\n });\n };\n\n return {\n ticketData,\n loading,\n error,\n getNextPageTicketData,\n isLoadingMore,\n setSearchText,\n };\n};\n\nexport default useAssistTicket;\n","export function formatTime(ts?: string) {\n const date = ts ? new Date(ts) : new Date();\n return date.toLocaleTimeString(\"en-US\", {\n hour: \"numeric\",\n minute: \"2-digit\",\n timeZone: \"Asia/Kolkata\",\n });\n}\n\nexport function formatDateAndTime(\n iso: string,\n timeZone: string = \"Asia/Kolkata\",\n locale: string = \"en-GB\"\n): string {\n const d = new Date(iso);\n if (Number.isNaN(d.getTime())) return \"\";\n\n const parts = new Intl.DateTimeFormat(locale, {\n day: \"2-digit\",\n month: \"short\",\n year: \"2-digit\",\n timeZone,\n }).formatToParts(d);\n\n const day = parts.find((p) => p.type === \"day\")?.value ?? \"\";\n const month = parts.find((p) => p.type === \"month\")?.value ?? \"\";\n const year = parts.find((p) => p.type === \"year\")?.value ?? \"\";\n\n const time = new Intl.DateTimeFormat(locale, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: false,\n timeZone,\n }).format(d);\n\n return `${day} ${month} \\u2018${year}, ${time}`;\n}\n\nexport const setDataSessionStorage = (key: string, data: any) => {\n sessionStorage.setItem(key, JSON.stringify(data));\n};\n\nexport const getSessionStorageData = (key: string) => {\n const val = sessionStorage.getItem(key);\n return val ? JSON.parse(val) : null;\n};\n","import { useLayoutEffect, useRef } from \"react\";\nimport SearchBar from \"../SearchBar\";\nimport Loader from \"../Loader\";\n\nimport useAssistTicket from \"../../../hooks/useAssistTickets\";\nimport { useSdkContext } from \"../../../hooks/useSdkContext\";\n\nimport { formatDateAndTime, setDataSessionStorage } from \"../../../utils\";\n\nconst ChatHistory = () => {\n const scrollContainerRef = useRef<HTMLDivElement | null>(null);\n const lastFetchedOffsetRef = useRef<number | null>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n const {\n ticketData,\n loading,\n getNextPageTicketData,\n isLoadingMore,\n setSearchText,\n } = useAssistTicket();\n const { setIsChatScreen, profileInfo } = useSdkContext();\n\n useLayoutEffect(() => {\n const el = scrollContainerRef.current;\n if (!el) return;\n }, [ticketData.length]);\n\n const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {\n const el = e.currentTarget;\n searchInputRef.current?.blur();\n if (el.scrollHeight <= el.clientHeight) return;\n const scrollBottom = el.scrollHeight - el.scrollTop - el.clientHeight;\n const offset = ticketData.length;\n\n if (lastFetchedOffsetRef.current === offset) return;\n\n if (scrollBottom <= 20 && !loading) {\n lastFetchedOffsetRef.current = offset;\n getNextPageTicketData(offset);\n }\n };\n\n const ticketBtnClickHandler = (ticket_id: number) => {\n setDataSessionStorage(\"userAndTicket\", {\n ticket_id: ticket_id,\n employee_id: profileInfo?.employee_id,\n });\n setIsChatScreen((prev) => !prev);\n };\n\n const handleKeyDown = (e: React.ChangeEvent<HTMLInputElement>) => {\n e.preventDefault();\n const value = searchInputRef.current?.value?.trim();\n setSearchText(value ?? null);\n };\n\n return (\n <div className=\"mhb-flex mhb-flex-col mhb-h-full mhb-min-h-0\">\n <div className=\"mhb-searchbarContainer mhb-flex mhb-flex-col mhb-border-b mhb-border-neutral-20\">\n <SearchBar ref={searchInputRef} onChangeHandler={handleKeyDown} />\n </div>\n <div\n ref={scrollContainerRef}\n onScroll={handleScroll}\n className=\"mhb-history-main-container mhb-no-scrollbar mhb-py-3 mhb-flex mhb-flex-col mhb-gap-1 mhb-overflow-y-auto mhb-flex-1 mhb-min-h-0\"\n >\n {loading ? (\n <Loader />\n ) : (\n <>\n {ticketData.map((item) => (\n <button\n type=\"button\"\n key={item.ticket_id}\n className=\"mhb-btn-reset mhb-history-container mhb-p-3 mhb-flex mhb-flex-col mhb-rounded-[12px] mhb-bg-neutral-10 mhb-gap-2 mhb-items-start\"\n onClick={() => ticketBtnClickHandler(item.ticket_id)}\n >\n <div className=\"mhb-flex mhb-items-start\">\n <p className=\"mhb-typography-para-thick-30 mhb-text-neutral-110 mhb-m-0 mhb-min-w-0 mhb-break-words mhb-whitespace-normal mhb-text-left\">\n {item.title}\n </p>\n </div>\n\n <p className=\"mhb-typography-para-30 mhb-text-neutral-60 mhb-m-0\">\n {formatDateAndTime(item.created_at)}\n </p>\n </button>\n ))}\n {isLoadingMore && <Loader />}\n </>\n )}\n </div>\n </div>\n );\n};\n\nexport default ChatHistory;\n","import { AssistLogo, Menu, MenuOpen } from \"../../../assets/icons\";\n\ninterface HeaderProps {\n isChatScreen: boolean;\n setIsChatScreen: React.Dispatch<React.SetStateAction<boolean>>;\n}\n\nconst Header = ({ isChatScreen, setIsChatScreen }: HeaderProps) => {\n const menuPressHandler = () => {\n setIsChatScreen((prev: boolean) => !prev);\n };\n const newChatPressHandler = () => {\n sessionStorage.removeItem(\"userAndTicket\");\n setIsChatScreen((prev: boolean) => !prev);\n };\n return (\n <div className=\"mhb-header mhb-border-b mhb-border-neutral-20 mhb-flex mhb-items-center mhb-justify-between\">\n <AssistLogo className=\"h-[36px] w-[36px] fill-current\" />\n\n <div className=\"mhb-flex mhb-gap-2 mhb-items-center\">\n {!isChatScreen ? (\n <button\n type=\"button\"\n onClick={newChatPressHandler}\n className=\"mhb-btn-reset mhb-p-3 mhb-bg-neutral-10 mhb-typography-para-thick-30 mhb-rounded-[9999px]\"\n >\n new chat\n </button>\n ) : (\n <div className=\"mhb-btn-reset mhb-p-3 mhb-invisible mhb-typography-para-thick-30\">\n new chat\n </div>\n )}\n <button\n type=\"button\"\n className=\"mhb-btn-reset mhb-h-[36px] mhb-w-[36px] mhb-flex mhb-items-center mhb-justify-center mhb-rounded-full mhb-bg-neutral-10\"\n onClick={menuPressHandler}\n >\n {isChatScreen ? (\n <Menu className=\"mhb-h-[16px] mhb-w-[16px] fill-current\" />\n ) : (\n <MenuOpen className=\"mhb-h-[16px] mhb-w-[16px]\" />\n )}\n </button>\n </div>\n </div>\n );\n};\n\nexport default Header;\n","export const Assist_Chat = `\nmutation AssistChat(\n $message: String!\n $ticket_id: Int\n $handover: Boolean\n $attachments: [String]\n) {\n assistChat(\n data: {\n ticket_id: $ticket_id,\n handover: $handover,\n message: $message,\n attachments: $attachments\n }\n ) {\n message_id\n text\n attachments {\n filename\n url\n }\n created_at\n ticket_id\n handover\n end\n user{\n user_name\n user_type\n }\n }\n}\n`;\n\nexport const PRESIGNED_URL = `\n mutation GetPresignedLink(\n $files: [String!]!\n $signature_type: String!\n ) {\n GetPresignedLink(data: { files: $files, signature_type: $signature_type }){\n filename\n url\n }\n }`;\n","export const ON_ASSIST_CHAT = `subscription onAssistChat($ticket_id: Int!) {\n onAssistChat(ticket_id: $ticket_id) {\n message_id\n text\n attachments {\n filename\n url\n }\n created_at\n ticket_id\n handover\n end\n user{\n user_name\n user_type\n }\n }\n }`;\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useSdkContext } from \"./useSdkContext\";\nimport { mutation, query, subscribe } from \"../api\";\nimport { ASSIST_HISTORY } from \"../graphql/query\";\nimport { Assist_Chat, PRESIGNED_URL } from \"../graphql/mutation\";\nimport { ON_ASSIST_CHAT } from \"../graphql/subscriptions\";\nimport { getSessionStorageData, setDataSessionStorage } from \"../utils\";\nimport type { Message } from \"../types\";\n\nconst PAGE_LIMIT = 10;\n\ntype AssitHistoryResponse = {\n assistHistory?: Message[];\n};\n\ntype AssitChatResponse = {\n assistChat: Message;\n};\n\ntype onAssistChatResponse = {\n onAssistChat: Message;\n};\n\ntype fileObjVariable = {\n files: File[];\n signature_type: string;\n ticketId: number;\n};\n\nconst useChatMessages = () => {\n const [historyData, setHistoryData] = useState<Message[]>([]);\n const [msgLoading, setMsgLoading] = useState(true);\n const [msgError, setMsgError] = useState(null);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const [isSending, setIsSending] = useState(false);\n const [hasMore, setHasMore] = useState(true);\n\n const { accessToken, profileInfo } = useSdkContext();\n\n const sessionTicket = getSessionStorageData(\"userAndTicket\")?.ticket_id;\n\n const employeeId = getSessionStorageData(\"userAndTicket\")?.employee_id;\n\n const historyTicket = useMemo(() => {\n return (\n historyData.find((itm: Message) => itm.ticket_id != null)?.ticket_id ??\n null\n );\n }, [historyData]);\n\n let ticketId = sessionTicket ?? historyTicket ?? null;\n\n // subscription for messages\n useEffect(() => {\n if (!ticketId) return;\n if (!profileInfo) return;\n if (employeeId && profileInfo?.employee_id != employeeId) {\n sessionStorage.removeItem(\"userAndTicket\");\n return;\n }\n\n const unsubscribe = subscribe(\n ON_ASSIST_CHAT,\n { ticket_id: ticketId },\n (data) => {\n const subsData = data as onAssistChatResponse;\n if (subsData?.onAssistChat?.user?.user_type === \"agent\") {\n setHistoryData((prev: Message[]) => [...prev, subsData.onAssistChat]);\n }\n }\n );\n\n return () => unsubscribe();\n }, [ticketId, profileInfo]);\n\n // initial history load\n useEffect(() => {\n if (!accessToken) return;\n if (!profileInfo) return;\n if (employeeId && profileInfo?.employee_id !== employeeId) {\n sessionStorage.removeItem(\"userAndTicket\");\n ticketId = null;\n }\n const obj = {\n ...(ticketId && { ticket_id: ticketId }),\n limit: PAGE_LIMIT,\n };\n query(ASSIST_HISTORY, obj, accessToken)\n .then(async (resp) => {\n const data = resp as AssitHistoryResponse;\n setHistoryData(data?.assistHistory ?? []);\n })\n .catch((err) => {\n setMsgError(err);\n })\n .finally(() => {\n setMsgLoading(false);\n });\n }, [profileInfo]);\n\n // load older messages\n const getNextPageData = (offset: number) => {\n if (!accessToken) return;\n if (isLoadingMore) return;\n const sessionTicket = getSessionStorageData(\"userAndTicket\")?.ticket_id;\n const obj = {\n ...(sessionTicket && { ticket_id: sessionTicket }),\n limit: PAGE_LIMIT,\n offset,\n };\n setIsLoadingMore(true);\n query(ASSIST_HISTORY, obj, accessToken)\n .then(async (resp) => {\n const data = resp as AssitHistoryResponse;\n const newItems = data?.assistHistory ?? [];\n setHistoryData((prev: Message[]) => [...newItems, ...prev]);\n if (newItems.length < PAGE_LIMIT) {\n setHasMore(false);\n }\n })\n .catch((err) => {\n setMsgError(err);\n })\n .finally(() => {\n setIsLoadingMore(false);\n });\n };\n\n // send message\n const sendMessage = (text: string) => {\n const getTicketId =\n historyData.find((itm: Message) => itm.ticket_id != null)?.ticket_id ??\n null;\n const getHandover =\n historyData.find((itm: Message) => itm.handover == true)?.handover ??\n false;\n const sendMessageObj = {\n ...(getTicketId && { ticket_id: getTicketId }),\n message: text,\n handover: getHandover,\n attachments: [],\n text: text,\n message_id: Math.random(),\n created_at: new Date().toISOString(),\n user: {\n user_name: profileInfo?.full_name,\n user_type: \"employee\",\n },\n };\n setIsSending(true);\n setHistoryData((prev: Message[]) => [...prev, sendMessageObj]);\n\n mutation(Assist_Chat, sendMessageObj, accessToken)\n .then(async (resp) => {\n const data = resp as AssitChatResponse;\n if (data.assistChat.user.user_type !== \"employee\") {\n setHistoryData((prev: Message[]) => [...prev, data.assistChat]);\n }\n if (\n !getSessionStorageData(\"userAndTicket\") &&\n data.assistChat?.ticket_id &&\n profileInfo\n ) {\n setDataSessionStorage(\"userAndTicket\", {\n ticket_id: data.assistChat?.ticket_id,\n employee_id: profileInfo.employee_id,\n });\n }\n })\n .catch(() => setHistoryData((prev) => prev.slice(0, -1)))\n .finally(() => setIsSending(false));\n };\n\n // upload attachment\n const upload = async (fileObj: fileObjVariable) => {\n setIsSending(true);\n const uploadObj = {\n files: fileObj.files.map(\n (file: File) => `${fileObj.ticketId}/${file.name}`\n ),\n signature_type: fileObj.signature_type,\n };\n try {\n const presignedResp: any = await mutation(\n PRESIGNED_URL,\n uploadObj,\n accessToken\n );\n for (const [index, file] of fileObj.files.entries()) {\n const url = presignedResp.GetPresignedLink[index]?.url;\n if (url) {\n await fetch(url, {\n method: \"PUT\",\n body: file,\n headers: { \"Content-Type\": file.type },\n });\n }\n }\n\n const getHandover =\n historyData.find((itm: Message) => itm.handover)?.handover ?? false;\n const attachments = fileObj.files.map((file: File) => ({\n url: URL.createObjectURL(file),\n filename: file.name,\n }));\n\n const optimisticMsg: Message = {\n ticket_id: fileObj.ticketId,\n handover: getHandover,\n attachments,\n text: \"\",\n message_id: Math.random(),\n created_at: new Date().toISOString(),\n user: { user_name: profileInfo?.full_name, user_type: \"employee\" },\n };\n setHistoryData((prev) => [...prev, optimisticMsg]);\n const sendMessageObj = {\n ticket_id: fileObj.ticketId,\n handover: getHandover,\n attachments: fileObj.files.map(\n (a: File) => `${fileObj.ticketId}/${a.name}`\n ),\n message: \"\",\n text: \"\",\n message_id: Math.random(),\n created_at: new Date().toISOString(),\n user: { user_name: profileInfo?.full_name, user_type: \"employee\" },\n };\n const resp = await mutation(Assist_Chat, sendMessageObj, accessToken);\n const data = resp as AssitChatResponse;\n\n if (data.assistChat.user.user_type !== \"employee\") {\n setHistoryData((prev) => [...prev, data.assistChat]);\n }\n if (\n !getSessionStorageData(\"userAndTicket\") &&\n data.assistChat?.ticket_id &&\n profileInfo\n ) {\n setDataSessionStorage(\"userAndTicket\", {\n ticket_id: data.assistChat.ticket_id,\n employee_id: profileInfo.employee_id,\n });\n }\n } catch (err) {\n setHistoryData((prev) => prev.slice(0, -1));\n } finally {\n setIsSending(false);\n }\n };\n\n return {\n historyData,\n msgLoading,\n msgError,\n isSending,\n sendMessage,\n getNextPageData,\n isLoadingMore,\n upload,\n hasMore,\n };\n};\n\nexport default useChatMessages;\n","const Toast = ({ toastMsg }: { toastMsg: string }) => {\n return (\n <div\n id=\"toast-simple\"\n className=\"mhb-border-red-60 mhb-fixed mhb-bottom-6 mhb-right-6 mhb-z-50 mhb-flex mhb-max-w-xs mhb-items-center mhb-space-x-4 mhb-divide-x mhb-divide-gray-200 mhb-rounded-lg mhb-border mhb-bg-white mhb-p-4 mhb-text-gray-700 mhb-shadow-lg dark:mhb-divide-gray-700 dark:mhb-border-gray-600 dark:mhb-bg-gray-800 dark:mhb-text-gray-300\"\n role=\"alert\"\n >\n <svg\n className=\"mhb-text-red-60 mhb-h-3 mhb-w-3\"\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 14 14\"\n >\n <path stroke=\"currentColor\" d=\"m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6\" />\n </svg>\n <div className=\"mhb-text-red-60 mhb-typography-label-thick-30 mhb-ps-4\">\n {toastMsg}\n </div>\n </div>\n );\n};\n\nexport default Toast;\n","import React, { useState } from \"react\";\nimport type { Message } from \"../../../types\";\n\ninterface Props {\n url: string | undefined;\n isFirstInGroup: boolean | null;\n msg: Message;\n fileType: string;\n}\n\nconst Attachment: React.FC<Props> = React.memo(\n ({ url, msg, isFirstInGroup, fileType }) => {\n const [isViewerOpen, setIsViewerOpen] = useState(false);\n\n const downloadPDF = async () => {\n const file = msg.attachments[0];\n const response = await fetch(file.url);\n const blob = await response.blob();\n const blobUrl = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.href = blobUrl;\n link.download = file.filename || \"download.pdf\";\n link.click();\n URL.revokeObjectURL(blobUrl);\n };\n\n return (\n <>\n {(fileType === \"jpg\" || fileType === \"jpeg\" || fileType === \"png\") && (\n <div className=\"mhb-flex\">\n <div\n className={`mhb-rounded-[16px] mhb-bg-white ${\n msg?.user?.user_type === \"customer\"\n ? \"mhb-ml-auto\"\n : \"mhb-mr-auto\"\n } ${\n isFirstInGroup\n ? msg?.user?.user_type === \"customer\"\n ? \"mhb-rounded-tr-[4px]\"\n : \"mhb-rounded-tl-[4px]\"\n : \"\"\n }`}\n >\n <div className=\"mhb-overflow-x-auto mhb-rounded-[16px] mhb-bg-neutral-10 mhb-px-1 mhb-py-1\">\n <div className=\"mhb-flex mhb-w-fit mhb-space-x-1\">\n <div className=\"mhb-h-[44px] mhb-w-[44px] mhb-flex-shrink-0 mhb-rounded-[12px] mhb-bg-white\">\n <img\n src={url}\n alt=\"Attachment\"\n className=\"mhb-h-[44px] mhb-w-[44px] mhb-rounded-[12px] mhb-object-cover\"\n onClick={() => setIsViewerOpen(true)}\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {fileType === \"pdf\" && (\n <button\n className=\"mhb-flex mhb-w-full mhb-items-center mhb-justify-between mhb-gap-3 mhb-rounded-[20px] mhb-mhb-border mhb-border-neutral-10 mhb-bg-white p-3 focus:mhb-outline-none\"\n onClick={() => downloadPDF()}\n >\n <div className=\"mhb-relative mhb-flex mhb-h-[36px] mhb-w-[36px] mhb-items-center mhb-justify-center mhb-rounded-[8px] mhb-bg-neutral-20\">\n {/* <div className=\"mhb-relative mhb-z-0 mhb-h-6 mhb-w-6\">\n <Image\n src=\"/icons/file_color.svg\"\n alt=\"pdf_attachment\"\n fill\n className=\"object-contain\"\n />\n </div> */}\n <p className=\"mhb-absolute mhb-text-white mhb-typography-para-40\">\n pdf\n </p>\n </div>\n <p className=\"mhb-max-w-[50px] mhb-overflow-hidden mhb-text-ellipsis mhb-whitespace-nowrap mhb-text-neutral-110 mhb-typography-para-thick-30\">\n {msg.attachments[0].filename.split(/[/_]/).pop()}\n </p>\n\n {/* <Icon name=\"download\" className=\"mb-1 h-4 w-4 fill-orange-60\" /> */}\n </button>\n )}\n\n {/* {isViewerOpen && fileType !== \"pdf\" && (\n <div\n className=\"mhb-fixed mhb-inset-0 mhb-z-50 mhb-flex mhb-items-center mhb-justify-center mhb-bg-black/80\"\n onClick={() => setIsViewerOpen(false)}\n >\n <div\n className=\"mhb-relative mhb-max-h-[200px] mhb-max-w-[200px] mhb-overflow-y-auto mhb-p-4\"\n onClick={(e) => e.stopPropagation()}\n >\n <img\n src={url}\n alt=\"Full size preview\"\n className=\"mhb-h-[150px] mhb-w-[150px] mhb-rounded-[12px] mhb-object-contain\"\n onClick={() => setIsViewerOpen(true)}\n />\n </div>\n </div>\n )} */}\n </>\n );\n },\n (prev, next) =>\n prev.url === next.url &&\n prev.isFirstInGroup === next.isFirstInGroup &&\n prev.msg.user?.user_type === next.msg.user?.user_type &&\n prev.fileType === next.fileType\n);\n\nexport default Attachment;\n","import { useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { Avatar } from \"more-sso-sdk\";\nimport useChatMessages from \"../../../hooks/useChatMessages\";\n\nimport { Attach_file, MoreAILogo, MoreAISparkle } from \"../../../assets/icons\";\nimport { formatTime } from \"../../../utils\";\nimport type { Message } from \"../../../types\";\nimport Toast from \"../Toast\";\nimport Attachment from \"../Attachment\";\nimport Loader from \"../Loader\";\n\nconst ALLOWED_TYPES = [\n \"image/jpeg\",\n \"image/jpg\",\n \"image/png\",\n \"application/pdf\",\n];\n\nconst Chat = () => {\n const [toastErr, setToastErr] = useState<string | null>(\"\");\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const inputChatRef = useRef<HTMLTextAreaElement>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const prevScrollHeightRef = useRef(0);\n const prevScrollTopRef = useRef(0);\n const isPrependingRef = useRef(false);\n\n const {\n historyData,\n sendMessage,\n getNextPageData,\n isLoadingMore,\n isSending,\n upload,\n msgLoading,\n hasMore,\n } = useChatMessages();\n\n useLayoutEffect(() => {\n const el = scrollContainerRef.current;\n if (!el) return;\n if (isPrependingRef.current) {\n const prevHeight = prevScrollHeightRef.current;\n const prevTop = prevScrollTopRef.current;\n const newHeight = el.scrollHeight;\n const diff = newHeight - prevHeight;\n el.scrollTop = prevTop + diff;\n isPrependingRef.current = false;\n } else {\n el.scrollTop = el.scrollHeight;\n }\n }, [historyData?.length]);\n\n const sendMessageHandler = () => {\n const value = inputChatRef.current?.value?.trim();\n if (!hasMore) isPrependingRef.current = false;\n if (!value) return;\n sendMessage(value);\n if (inputChatRef.current) {\n inputChatRef.current.value = \"\";\n }\n };\n\n const onKeyDownHandler = (e: React.KeyboardEvent) => {\n if (isSending) return;\n if (e.key === \"Enter\") {\n e.preventDefault();\n sendMessageHandler();\n }\n };\n\n const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {\n const el = e.currentTarget;\n const isScrollable = el.scrollHeight > el.clientHeight;\n if (!isScrollable) return;\n if (el.scrollTop <= 20 && !isLoadingMore) {\n const offset = historyData.length;\n prevScrollHeightRef.current = el.scrollHeight;\n prevScrollTopRef.current = el.scrollTop;\n isPrependingRef.current = true;\n getNextPageData(offset);\n }\n };\n\n const onFileChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(event.target.files || []);\n const validFiles = files.filter((file) =>\n ALLOWED_TYPES.includes(file.type)\n );\n const invalidFiles = files.filter(\n (file) => !ALLOWED_TYPES.includes(file.type)\n );\n\n if (invalidFiles.length > 0) {\n setToastErr(\n \"Only JPG, PNG, and PDF files are allowed. Other files like videos are not supported.\"\n );\n setTimeout(() => setToastErr(null), 3000);\n event.target.value = \"\";\n return;\n }\n\n const ticketId = historyData[historyData?.length - 1]?.ticket_id;\n if (validFiles.length > 0 && ticketId) {\n upload({\n files: validFiles,\n signature_type: \"upload\",\n ticketId: ticketId,\n });\n }\n };\n\n const handleFileClickHandler = () => {\n fileInputRef.current?.click();\n };\n\n const isAttachment = useMemo(() => {\n return historyData?.some((itm: Message) => itm.handover == true);\n }, [historyData]);\n\n console.log(historyData, \"historyData\");\n\n return (\n <div className=\"mhb-flex mhb-h-full mhb-flex-col mhb-overflow-hidden mhb-bg-white\">\n <>\n {msgLoading ? (\n <div className=\"mhb-py-3\">\n <Loader />\n </div>\n ) : (\n <>\n <div\n ref={scrollContainerRef}\n className=\"mhb-flex-grow mhb-overflow-y-auto mhb-py-3 [&>*]:[mhb-overflow-anchor:none]\"\n onScroll={handleScroll}\n >\n <div className=\"mhb-flex mhb-min-h-full mhb-flex-col mhb-justify-end mhb-gap-1\">\n {historyData?.map((item: Message, index) => {\n const isFirstInGroup =\n (\"user\" in item && index === 0) ||\n historyData[index - 1]?.user?.user_type !==\n item?.user?.user_type;\n const currentDate = new Date(item.created_at ?? \"\");\n const prevDate =\n index > 0\n ? new Date(historyData[index - 1].created_at ?? \"\")\n : null;\n\n const isFirstMessageOfDay =\n !prevDate ||\n currentDate.getDate() !== prevDate.getDate() ||\n currentDate.getMonth() !== prevDate.getMonth() ||\n currentDate.getFullYear() !== prevDate.getFullYear();\n\n const isGapMoreThan2Minutes =\n prevDate &&\n currentDate.getTime() - prevDate.getTime() > 2 * 60 * 1000;\n\n const shouldShowUserLabel =\n item.hasOwnProperty(\"user\") &&\n (isFirstInGroup ||\n isFirstMessageOfDay ||\n isGapMoreThan2Minutes);\n\n const hasImage = item?.attachments?.some((att) => {\n const ext = att.filename\n .match(/\\.([a-zA-Z0-9]+)(?:\\?|$)/)?.[1]\n ?.toLowerCase();\n return [\"jpg\", \"jpeg\", \"png\"].includes(ext || \"\");\n });\n return (\n <div\n key={item.message_id}\n className={`mhb-flex ${\n item.user.user_type === \"bot\" ||\n item.user.user_type === \"agent\"\n ? \"mhb-justify-start\"\n : \"mhb-justify-end\"\n }`}\n >\n <div className=\"mhb-max-w-[75%\">\n {shouldShowUserLabel && (\n <div\n className={`mhb-mb-1 mhb-flex mhb-items-center ${\n item.user.user_type === \"bot\" ||\n item.user.user_type === \"agent\"\n ? \"mhb-justify-start\"\n : \"mhb-justify-end\"\n }`}\n >\n {item.user.user_type === \"bot\" ? (\n <div className=\"mhb-flex mhb-gap-2 mhb-items-center\">\n <div className=\"mhb-flex mhb-items-center mhb-gap-1\">\n <MoreAISparkle />\n <div className=\"mhb-mb-1\">\n <MoreAILogo />\n </div>\n </div>\n\n <div className=\"mhb-flex mhb-gap-1 mhb-mt-[2px] mhb-items-center\">\n <div className=\"mhb-h-[2px] mhb-w-[2px] mhb-rounded-full mhb-bg-neutral-60\" />\n <p className=\"mhb-typography-para-40 mhb-text-neutral-60\">\n {formatTime(item.created_at)}\n </p>\n </div>\n </div>\n ) : item.user.user_type === \"employee\" ? (\n <div className=\"mhb-flex mhb-gap-2 mhb-items-center\">\n <div className=\"mhb-flex mhb-gap-1\">\n <p className=\"mhb-typography-para-40 mhb-text-neutral-60\">\n {formatTime(item.created_at)}\n </p>\n <div className=\"mhb-h-[2px] mhb-w-[2px] mhb-rounded-full mhb-bg-neutral-60 mhb-flex mhb-self-center\" />\n </div>\n <Avatar\n name={item?.user?.user_name || \"\"}\n employeeId={\"\"}\n className=\"mhb-size-4 mhb-shrink-0 mhb-rounded-full mhb-select-none\"\n />\n </div>\n ) : item.user.user_type === \"agent\" ? (\n <div className=\"mhb-flex mhb-gap-2 mhb-items-center\">\n <Avatar\n name={item?.user?.user_name || \"\"}\n employeeId={\"\"}\n className=\"mhb-size-4 mhb-shrink-0 mhb-rounded-full mhb-select-none\"\n />\n <div className=\"mhb-flex mhb-gap-1 mhb-mt-1 mhb-items-center\">\n <div className=\"mhb-h-[2px] mhb-w-[2px] mhb-rounded-full mhb-bg-neutral-60\" />\n <p className=\"mhb-typography-para-40 mhb-text-neutral-60\">\n {formatTime(item.created_at)}\n </p>\n </div>\n </div>\n ) : null}\n </div>\n )}\n <div className=\"mhb-flex mhb-overflow-hidden mhb-min-w-0\">\n {Array.isArray(item?.attachments) &&\n item?.attachments?.length > 0 ? (\n <div\n className={`mhb-p-1 mhb-rounded-[16px] ${\n item.user.user_type === \"bot\" ||\n item.user.user_type === \"agent\"\n ? `mhb-bg-orange-60 ${\n shouldShowUserLabel\n ? \"mhb-rounded-tl-[4px]\"\n : \"mhb-rounded-[20px]\"\n }`\n : `mhb-bg-neutral-10 ${\n shouldShowUserLabel\n ? \"mhb-rounded-tr-[4px]\"\n : \"mhb-rounded-[20px]\"\n }`\n } ${\n hasImage\n ? \"mhb-overflow-x-auto mhb-flex\"\n : \"mhb-flex mhb-flex-col mhb-gap-1\"\n }`}\n >\n {item.attachments.map((itm, index) => (\n <div key={index}>\n <Attachment\n url={itm.url}\n msg={item}\n isFirstInGroup={false}\n fileType={\n itm?.filename\n .match(/\\.([a-zA-Z0-9]+)(?:\\?|$)/)?.[1]\n ?.toLowerCase() || \"\"\n }\n />\n </div>\n ))}\n </div>\n ) : (\n <p\n className={`mhb-whitespace-pre-line mhb-break-words mhb-rounded-[16px] mhb-p-3\n mhb-typography-para-30 ${\n item.user.user_type === \"bot\" ||\n item.user.user_type === \"agent\"\n ? `mhb-bg-orange-60 mhb-text-white ${\n shouldShowUserLabel\n ? \"mhb-rounded-tl-[4px]\"\n : \"mhb-rounded-[20px]\"\n } `\n : `mhb-bg-neutral-10 mhb-text-neutral-110 mhb-ml-auto ${\n shouldShowUserLabel\n ? \"mhb-rounded-tr-[4px]\"\n : \"mhb-rounded-[20px]\"\n } `\n } \n `}\n >\n {item?.text}\n </p>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n\n <div className=\"mhb-chat-input-container mhb-sticky mhb-bottom-0 mhb-bg-white mhb-py-3 mhb-flex mhb-items-center mhb-gap-2\">\n <div className=\"mhb-bg-neutral-10 mhb-flex mhb-h-[80px] mhb-flex-1 mhb-rounded-xl mhb-p-3\">\n <div className=\"mhb-flex mhb-flex-1\">\n <textarea\n ref={inputChatRef}\n placeholder=\"Type your message here...\"\n className=\"mhb-btn-reset mhb-textarea mhb-flex-grow mhb-text-neutral-70 mhb-caret-orange-70 mhb-typography-para-30 mhb-bg-transparent mhb-resize-none placeholder:mhb-text-neutral-40\"\n onKeyDown={onKeyDownHandler}\n />\n </div>\n\n <div className=\"mhb-flex mhb-gap-1 mhb-justify-end mhb-items-end\">\n {isAttachment && (\n <button\n type=\"button\"\n className=\"mhb-btn-reset mhb-h-[36px] mhb-w-[36px] mhb-rounded-full mhb-bg-neutral-100 mhb-flex mhb-items-center mhb-justify-center mhb-outline-none\"\n disabled={isSending}\n onClick={handleFileClickHandler}\n >\n <Attach_file className=\"h-[16px] w-[16px] mhb-fill-current\" />\n <input\n type=\"file\"\n accept=\".jpg,.jpeg,.png,.pdf\"\n ref={fileInputRef}\n onChange={onFileChange}\n className=\"hidden\"\n />\n </button>\n )}\n\n <button\n type=\"button\"\n className=\"mhb-btn-reset mhb-h-[36px] mhb-rounded-[9999px] mhb-bg-orange-60 mhb-flex mhb-p-3 mhb-items-center mhb-justify-center mhb-shadow-[0_4px_12px_0_rgba(250,75,22,0.50)] mhb-outline-none\"\n disabled={isSending}\n onClick={sendMessageHandler}\n >\n <p className=\"mhb-typography-label-thick-30 mhb-text-white\">\n Send\n </p>\n </button>\n </div>\n </div>\n </div>\n </>\n )}\n </>\n {toastErr && <Toast toastMsg={toastErr} />}\n </div>\n );\n};\n\nexport default Chat;\n","import { useEffect } from \"react\";\nimport { useSdkContext } from \"../../hooks/useSdkContext\";\nimport Popover from \"./Popover\";\n\nimport ChatHistory from \"./ChatHistory\";\nimport Header from \"./Header\";\nimport Chat from \"./Chat\";\nimport { SSOAuthorization } from \"more-sso-sdk\";\n\ninterface ChatButtonProps {\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n align?: \"start\" | \"center\" | \"end\";\n}\n\nexport default function SDKRoot({\n side = \"top\",\n align = \"end\",\n}: ChatButtonProps) {\n const {\n authorized,\n isChatScreen,\n setIsChatScreen,\n accessToken,\n setProfileInfo,\n } = useSdkContext();\n\n const getProfileInfo = async () => {\n const profileInfo = await SSOAuthorization.getProfileDetails();\n setProfileInfo(profileInfo);\n };\n useEffect(() => {\n if (accessToken) {\n getProfileInfo();\n }\n }, []);\n\n return (\n <div className=\"mhb-root\">\n <Popover side={side} align={align}>\n <div className=\"mhb-h-full mhb-w-full mhb-flex mhb-flex-col mhb-min-h-0\">\n <Header\n isChatScreen={isChatScreen}\n setIsChatScreen={setIsChatScreen}\n />\n {/* {authorized ? <Chat /> : <div>Please provide valid credentials</div>} */}\n {isChatScreen ? <Chat /> : <ChatHistory />}\n </div>\n </Popover>\n </div>\n );\n}\n","import { InitOptions } from \"../types\";\n\nexport function validateSdk(options: InitOptions) {\n const { apiKey, accessToken } = options;\n\n if (!apiKey || !accessToken) {\n throw new Error(\"Missing parameters: apiKey, and accessToken are required\");\n }\n}\n","import { useEffect, useState } from \"react\";\nimport { SSOAuthorization } from \"more-sso-sdk\";\nimport SDKRoot from \"./components/SDKRoot\";\nimport { validateSdk } from \"../core/validate\";\nimport { SDKProvider } from \"../context/SDKContext\";\nimport { initChatbot } from \"../api\";\n\nimport type { InitOptions, PopOverProps } from \"../types\";\n\nlet sdkOptions: InitOptions | null = null;\nlet initialized = false;\nlet listeners: (() => void)[] = [];\n\nfunction notify() {\n for (const l of listeners) l();\n}\n\nexport function init(options: InitOptions) {\n if (initialized) {\n return;\n }\n validateSdk(options);\n SSOAuthorization.init({\n env: options.env,\n redirectUrl: options.redirectUrl,\n app: options.app,\n idp: options.idp,\n });\n sdkOptions = options;\n initialized = true;\n notify();\n initChatbot({ apiKey: options.apiKey, apiURL: options.apiURL });\n}\n\nexport function ChatButton(props: PopOverProps) {\n const [state, setState] = useState<{\n initialized: boolean;\n sdkOptions: InitOptions | null;\n }>({\n initialized,\n sdkOptions,\n });\n\n useEffect(() => {\n const cb = () => {\n setState({ initialized, sdkOptions });\n };\n listeners.push(cb);\n return () => {\n listeners = listeners.filter((l) => l !== cb);\n };\n }, []);\n\n if (!state.initialized || !state.sdkOptions) {\n return null;\n }\n\n return (\n <SDKProvider\n appName={state.sdkOptions.app}\n apiKey={state.sdkOptions.apiKey}\n token={state.sdkOptions.accessToken}\n >\n <SDKRoot {...props} />\n </SDKProvider>\n );\n}\n"],"names":["tokenUpdateListener","registerTokenListener","listener","notifyTokenUpdate","token","SDKContext","createContext","SDKProvider","children","appName","apiKey","authorized","setAuthorized","useState","accessToken","setAccessToken","isChatScreen","setIsChatScreen","profileInfo","setProfileInfo","useEffect","jsx","useSdkContext","context","useContext","SvgAssistLogo","props","React","SvgMenuOpen","SvgSearch","SvgHeadsetMic","SvgMenu","SvgAttachFile","SvgMoreAiLogo","SvgMoreAiSparkle","Popover","side","align","micClickHandler","jsxs","RadixPopover","Headset_mic","SearchBar","forwardedRef","onChangeHandler","Search","ForwardedSearchBar","forwardRef","Loader","ws","reconnectAttempts","isManuallyClosed","subscriptionIdCounter","subscriptions","isConnectionAcked","graphqlEndpoint","subscriptionEndpoint","failedQueue","isRefreshing","openWebsocket","apiHeader","payload","base64ApiHeader","base64Payload","appsyncUrl","connect","data","id","delay","processQueue","error","resolve","reject","enqueueFailedRequest","createChatbotClient","apiURLS","executeGraphql","operation","variables","result","errors","shouldRefresh","err","msg","newToken","refreshResult","SSOAuthorization","currentUrl","encodedRedirect","e","subscription","callback","message","chatbotClient","initChatbot","urls","query","gqlQuery","mutation","gqlMutation","subscribe","gqlSubscription","ASSIST_HISTORY","EMPLOYEEE_ASSIST_TICKET","LIMIT","useAssistTicket","ticketData","setTicketData","loading","setLoading","setError","isLoadingMore","setIsLoadingMore","searchText","setSearchText","isFirstRender","useRef","getEmployeeTickets","resp","timer","offset","EmployeeAssistTickets","prev","formatTime","ts","formatDateAndTime","iso","timeZone","locale","d","parts","day","p","month","year","time","setDataSessionStorage","key","getSessionStorageData","val","ChatHistory","scrollContainerRef","lastFetchedOffsetRef","searchInputRef","getNextPageTicketData","useLayoutEffect","handleScroll","el","scrollBottom","ticketBtnClickHandler","ticket_id","handleKeyDown","value","Fragment","item","Header","menuPressHandler","newChatPressHandler","AssistLogo","Menu","MenuOpen","Assist_Chat","PRESIGNED_URL","ON_ASSIST_CHAT","PAGE_LIMIT","useChatMessages","historyData","setHistoryData","msgLoading","setMsgLoading","msgError","setMsgError","isSending","setIsSending","hasMore","setHasMore","sessionTicket","employeeId","historyTicket","useMemo","itm","ticketId","unsubscribe","subsData","obj","text","getTicketId","getHandover","sendMessageObj","newItems","fileObj","uploadObj","file","presignedResp","index","url","attachments","optimisticMsg","a","Toast","toastMsg","Attachment","isFirstInGroup","fileType","isViewerOpen","setIsViewerOpen","downloadPDF","blob","blobUrl","link","next","ALLOWED_TYPES","Chat","toastErr","setToastErr","inputChatRef","fileInputRef","prevScrollHeightRef","prevScrollTopRef","isPrependingRef","sendMessage","getNextPageData","upload","prevHeight","prevTop","diff","sendMessageHandler","onKeyDownHandler","onFileChange","event","files","validFiles","handleFileClickHandler","isAttachment","currentDate","prevDate","isFirstMessageOfDay","isGapMoreThan2Minutes","shouldShowUserLabel","hasImage","att","ext","MoreAISparkle","MoreAILogo","Avatar","Attach_file","SDKRoot","getProfileInfo","validateSdk","options","sdkOptions","initialized","listeners","notify","l","init","ChatButton","state","setState","cb"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -209,7 +209,7 @@ const Ue = (e) => {
|
|
|
209
209
|
i = await G.getDevToken("432896");
|
|
210
210
|
else {
|
|
211
211
|
const w = window.location.href, k = encodeURIComponent(w);
|
|
212
|
-
i = G.getToken(k), console.log(i, "refreshResult check");
|
|
212
|
+
i = await G.getToken(k), console.log(i, "refreshResult check");
|
|
213
213
|
}
|
|
214
214
|
if (!i?.token)
|
|
215
215
|
throw new Error("Refresh did not return an access token");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/core/sdkAuthBridge.ts","../src/context/SDKContext.tsx","../src/hooks/useSdkContext.ts","../src/assets/assist_logo.svg?react","../src/assets/menu_open.svg?react","../src/assets/search.svg?react","../src/assets/headset_mic.svg?react","../src/assets/menu.svg?react","../src/assets/attach_file.svg?react","../src/assets/more_ai_logo.svg?react","../src/assets/more_ai_sparkle.svg?react","../src/web/components/Popover/index.tsx","../src/web/components/SearchBar/index.tsx","../src/web/components/Loader/index.tsx","../src/api/client.ts","../src/api/index.ts","../src/graphql/query.ts","../src/hooks/useAssistTickets.ts","../src/utils/index.ts","../src/web/components/ChatHistory/index.tsx","../src/web/components/Header/index.tsx","../src/graphql/mutation.ts","../src/graphql/subscriptions.ts","../src/hooks/useChatMessages.ts","../src/web/components/Toast/index.tsx","../src/web/components/Attachment/index.tsx","../src/web/components/Chat/index.tsx","../src/web/components/SDKRoot.tsx","../src/core/validate.ts","../src/web/sdk.tsx"],"sourcesContent":["let tokenUpdateListener: ((token: string) => void) | null = null;\n\nexport function registerTokenListener(listener: (token: string) => void) {\n tokenUpdateListener = listener;\n}\n\nexport function notifyTokenUpdate(token: string) {\n tokenUpdateListener?.(token);\n}\n","import { createContext, useState, ReactNode, useEffect } from \"react\";\nimport { registerTokenListener } from \"../core/sdkAuthBridge\";\nimport { SDKContextProps } from \"../types\";\n\nexport const SDKContext = createContext<SDKContextProps | undefined>(undefined);\n\nexport const SDKProvider = ({\n children,\n appName,\n apiKey,\n token,\n}: {\n children: ReactNode;\n appName: string;\n apiKey: string;\n token: string;\n}) => {\n const [authorized, setAuthorized] = useState<boolean>(!!token);\n const [accessToken, setAccessToken] = useState<string>(token);\n const [isChatScreen, setIsChatScreen] = useState<boolean>(true);\n const [profileInfo, setProfileInfo] = useState<any>(null);\n\n useEffect(() => {\n registerTokenListener(setAccessToken);\n }, []);\n\n return (\n <SDKContext.Provider\n value={{\n appName,\n apiKey,\n accessToken,\n authorized,\n setAuthorized,\n isChatScreen,\n setIsChatScreen,\n profileInfo,\n setProfileInfo,\n }}\n >\n {children}\n </SDKContext.Provider>\n );\n};\n","import { useContext } from \"react\";\nimport { SDKContext } from \"../context/SDKContext\";\nimport { SDKContextProps } from \"../types\";\n\nexport const useSdkContext = (): SDKContextProps => {\n const context = useContext(SDKContext);\n if (!context) {\n throw new Error(\"useSdkContext must be used inside SDKProvider\");\n }\n return context;\n};\n","import * as React from \"react\";\nconst SvgAssistLogo = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 36, height: 36, viewBox: \"0 0 36 36\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M15.8261 8.67349C12.4046 8.67349 9.63062 11.447 9.63062 14.8685C9.63062 18.29 12.4046 21.064 15.8261 21.064C16.1656 21.064 16.4991 21.0365 16.8241 20.984C15.0221 20.4765 13.7006 18.8205 13.7006 16.856C13.7006 14.4875 15.6206 12.568 17.9886 12.568C19.8251 12.568 21.3921 13.722 22.0031 15.345C22.0151 15.188 22.0211 15.029 22.0211 14.8685C22.0211 11.447 19.2476 8.67349 15.8261 8.67349Z\", fill: \"#B72402\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M17.9984 7.621C13.0309 7.621 9.00342 11.6485 9.00342 16.616C9.00342 20.526 11.4949 23.8495 14.9744 25.0915V27.785C14.9744 28.228 15.4404 28.515 15.8349 28.3125C17.5759 27.4215 21.5219 25.332 23.5549 23.696C23.6114 23.65 23.6674 23.6065 23.7214 23.5605C23.7624 23.527 23.8009 23.494 23.8394 23.4605C25.7724 21.8115 26.9964 19.356 26.9964 16.616C26.9964 11.6485 22.9689 7.621 17.9989 7.621H17.9984ZM15.8274 21.064C15.5379 21.064 15.2539 21.0435 14.9749 21.005C11.9559 20.59 9.63092 18.0015 9.63092 14.8675C9.63092 11.4465 12.4039 8.6735 15.8274 8.6735C19.2509 8.6735 22.0214 11.4465 22.0214 14.8675C22.0214 15.0265 22.0164 15.185 22.0034 15.341C21.8319 17.6225 20.4259 19.5555 18.4544 20.48C17.9424 20.7205 17.3919 20.892 16.8154 20.9845C16.4929 21.036 16.1624 21.064 15.8269 21.064H15.8274Z\", fill: \"#FA4B16\" }));\nexport default SvgAssistLogo;\n","import * as React from \"react\";\nconst SvgMenuOpen = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 16, height: 16, viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M14.4167 3.58334L14.4167 5.13334L5.58341 5.13333L5.58341 3.58333L14.4167 3.58334ZM2.66675 4.5L6.06675 8.01667L2.68341 11.5167L1.56675 10.4L3.86675 8.01667L1.55008 5.61667L2.66675 4.5ZM14.4167 7.25L14.4167 8.81667L7.48341 8.81667L7.48341 7.25L14.4167 7.25ZM14.4167 10.8667L14.4167 12.4333L5.58341 12.4333L5.58341 10.8667L14.4167 10.8667Z\", fill: \"#172128\" }));\nexport default SvgMenuOpen;\n","import * as React from \"react\";\nconst SvgSearch = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 16, height: 16, viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M13.25 14.45L8.7667 9.98335C8.44448 10.238 8.06414 10.4378 7.6257 10.5827C7.18725 10.7276 6.71203 10.8 6.20003 10.8C4.92048 10.8 3.8367 10.3556 2.9487 9.46668C2.0607 8.57779 1.6167 7.50557 1.6167 6.25001C1.6167 4.99446 2.06114 3.92223 2.95003 3.03335C3.83892 2.14446 4.91392 1.70001 6.17503 1.70001C7.43614 1.70001 8.50837 2.14446 9.3917 3.03335C10.275 3.92223 10.7167 4.99529 10.7167 6.25251C10.7167 6.75085 10.6473 7.2139 10.5084 7.64168C10.3695 8.06946 10.1611 8.47223 9.88337 8.85001L14.3834 13.3167L13.25 14.45ZM6.1892 9.23335C7.02142 9.23335 7.72298 8.94307 8.29387 8.36251C8.86464 7.78196 9.15003 7.07779 9.15003 6.25001C9.15003 5.42223 8.86381 4.71807 8.29137 4.13751C7.71892 3.55696 7.0182 3.26668 6.1892 3.26668C5.35109 3.26668 4.64059 3.55696 4.0577 4.13751C3.47481 4.71807 3.18337 5.42223 3.18337 6.25001C3.18337 7.07779 3.47398 7.78196 4.0552 8.36251C4.63642 8.94307 5.34775 9.23335 6.1892 9.23335Z\", fill: \"#172128\" }));\nexport default SvgSearch;\n","import * as React from \"react\";\nconst SvgHeadsetMic = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 20, height: 20, viewBox: \"0 0 20 20\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M10.0417 19.3958V17.7292H16.0625V16.6042H12.7292V9.70833H16.0625V8.77083C16.0625 7.10417 15.4757 5.67014 14.3021 4.46875C13.1285 3.26736 11.7049 2.66667 10.0312 2.66667C8.38542 2.66667 6.95833 3.26736 5.75 4.46875C4.54167 5.67014 3.9375 7.10417 3.9375 8.77083V9.70833H7.27083V16.6042H1.97917V8.775C1.97917 7.66722 2.19229 6.62306 2.61854 5.6425C3.04479 4.66195 3.62132 3.80319 4.34812 3.06625C5.07493 2.32931 5.92903 1.74861 6.91042 1.32417C7.89167 0.899722 8.93667 0.6875 10.0454 0.6875C11.154 0.6875 12.1944 0.899306 13.1667 1.32292C14.1389 1.74653 14.9868 2.32424 15.7104 3.05604C16.4342 3.78785 17.0036 4.64278 17.4187 5.62083C17.834 6.59889 18.0417 7.64889 18.0417 8.77083V19.3958H10.0417ZM3.9375 14.625H5.3125V11.6875H3.9375V14.625ZM14.7083 14.625H16.0625V11.6875H14.7083V14.625Z\", fill: \"#172128\" }));\nexport default SvgHeadsetMic;\n","import * as React from \"react\";\nconst SvgMenu = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 16, height: 16, viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M1.58334 12.6167V11.0333H14.4333V12.6167H1.58334ZM1.58334 8.78333V7.21666H14.4333V8.78333H1.58334ZM1.58334 4.96666V3.38333H14.4333V4.96666H1.58334Z\", fill: \"#172128\" }));\nexport default SvgMenu;\n","import * as React from \"react\";\nconst SvgAttachFile = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 16, height: 16, viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M12.7833 10.679C12.7833 11.9375 12.3239 12.9861 11.4053 13.825C10.4867 14.6639 9.39228 15.0834 8.12194 15.0834C6.85172 15.0834 5.76105 14.6639 4.84994 13.825C3.93883 12.9861 3.48328 11.9389 3.48328 10.6834V4.08336C3.48328 3.17869 3.81383 2.42197 4.47494 1.81319C5.13605 1.20441 5.92083 0.900024 6.82928 0.900024C7.73783 0.900024 8.52117 1.20441 9.17928 1.81319C9.8375 2.42197 10.1666 3.17869 10.1666 4.08336V10.35C10.1666 10.8935 9.96383 11.3543 9.55828 11.7325C9.15272 12.1109 8.673 12.3 8.11911 12.3C7.56533 12.3 7.09033 12.1127 6.69411 11.738C6.298 11.3634 6.09994 10.9007 6.09994 10.35V4.18336H7.54994V10.35C7.54994 10.4945 7.60711 10.6139 7.72144 10.7084C7.83578 10.8028 7.97267 10.85 8.13211 10.85C8.29155 10.85 8.42883 10.8036 8.54394 10.7109C8.65905 10.6181 8.71661 10.4978 8.71661 10.35V4.10002C8.72772 3.59714 8.54439 3.17975 8.16661 2.84786C7.78883 2.51597 7.34322 2.35002 6.82978 2.35002C6.31633 2.35002 5.87189 2.51352 5.49644 2.84052C5.121 3.16752 4.93328 3.5818 4.93328 4.08336V10.6834C4.94439 11.5417 5.26367 12.2507 5.89111 12.8105C6.51855 13.3702 7.2715 13.65 8.14994 13.65C9.01294 13.65 9.762 13.3695 10.3971 12.8084C11.0323 12.2472 11.3444 11.5389 11.3333 10.6834V3.70002H12.7833V10.679Z\", fill: \"white\" }));\nexport default SvgAttachFile;\n","import * as React from \"react\";\nconst SvgMoreAiLogo = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 41, height: 12, viewBox: \"0 0 41 12\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { clipPath: \"url(#clip0_100_2379)\" }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M21.1825 7.56627H22.1696V5.46029C21.9697 5.38454 21.6628 5.35825 21.4373 5.35825C20.6381 5.35825 19.9407 5.89477 19.9261 6.85195H19.8885L19.4834 5.40815H17.7463V11.7965H20.0681V8.80642C20.0681 8.10324 20.2821 7.56672 21.1825 7.56672V7.56627Z\", fill: \"#172128\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M2.31875 8.00074C2.31875 7.40005 2.55889 7.11976 3.04271 7.11976C3.48584 7.11976 3.69989 7.3996 3.69989 8.00074V11.7956H6.0217V8.00074C6.0217 7.40005 6.26184 7.11976 6.74256 7.11976C7.18835 7.11976 7.4024 7.3996 7.4024 8.00074V11.7956H9.72111V7.32385C9.72111 6.14831 9.12761 5.21786 7.68013 5.21786C6.74212 5.21786 6.14862 5.53603 5.78111 6.25036H5.75502C5.4627 5.62605 4.8661 5.21786 3.98028 5.21786C3.04227 5.21786 2.45761 5.53603 2.10426 6.25036H2.07817L1.80043 5.40725H3.8147e-05V11.7956H2.31875V8.00074Z\", fill: \"#172128\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M10.1851 8.7301C10.1851 10.8129 11.8701 12 13.7227 12C15.5753 12 17.2837 10.8129 17.2837 8.7301V8.47342C17.2837 6.37903 15.5726 5.20349 13.7227 5.20349C11.8728 5.20349 10.1851 6.38215 10.1851 8.47342V8.7301ZM13.7346 7.02071C14.5975 7.02071 14.9765 7.70919 14.9765 8.59017C14.9765 9.47116 14.597 10.1743 13.7346 10.1743C12.8722 10.1743 12.4928 9.47116 12.4928 8.59017C12.4928 7.70919 12.8749 7.02071 13.7346 7.02071Z\", fill: \"#172128\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M25.7969 5.20346C23.9324 5.20346 22.3867 6.43158 22.3867 8.47339V8.73007C22.3867 10.8623 24.0602 12 25.8982 12C27.3545 12 28.7874 11.2589 29.0797 9.70151H26.975C26.8101 10.1333 26.3669 10.2764 25.9618 10.2764C25.2264 10.2764 24.7837 9.76301 24.7315 9.08611H29.0912C29.1173 8.87044 29.1173 8.60173 29.1173 8.38293C29.1173 6.08444 27.3686 5.20346 25.7969 5.20346ZM24.7576 7.75862C24.8067 7.19848 25.137 6.71143 25.846 6.71143H25.8491C26.4948 6.71143 26.8623 7.19581 26.8623 7.75862H24.7576Z\", fill: \"#172128\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M34.376 3.1975C33.6653 3.44883 32.9979 3.86058 32.4292 4.43319C31.8605 5.00581 31.4523 5.67824 31.2028 6.39435C30.9538 5.67824 30.5448 5.00581 29.9765 4.43275C29.4082 3.86013 28.7408 3.44838 28.0301 3.19705C28.7408 2.94572 29.4082 2.53398 29.9769 1.96136C30.5452 1.38874 30.9538 0.716307 31.2033 -0.000244141C31.4527 0.716307 31.8613 1.3883 32.4301 1.96136C32.9984 2.53398 33.6657 2.94572 34.3764 3.19705L34.376 3.1975Z\", fill: \"url(#paint0_linear_100_2379)\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M35.4872 12.0001C34.8667 12.0001 34.2696 11.7715 33.9119 11.3869C33.5895 11.0621 33.4108 10.6655 33.4108 10.1722V10.1C33.4108 8.82507 34.4611 8.12769 35.9051 8.12769C36.4061 8.12769 36.9077 8.17581 37.3729 8.34426V7.94721C37.3729 6.92497 37.0027 6.27571 35.8812 6.27571C35.1413 6.27571 34.4492 6.5404 34.4134 7.38217H33.6854V7.30998C33.8287 6.0471 34.7835 5.61441 35.8578 5.61441C37.1708 5.61441 38.0898 6.17945 38.0898 7.93563V11.808H37.5768C37.4932 11.5915 37.4335 11.3508 37.3499 11.1347H37.326C36.932 11.6516 36.1682 12.0005 35.488 12.0005L35.4872 12.0001ZM37.3729 9.54697V9.01803C36.8718 8.84958 36.3823 8.76536 35.8812 8.76536C35.01 8.76536 34.1507 9.13834 34.1507 10.0643C34.1507 10.9061 34.7831 11.3152 35.6066 11.3152C36.43 11.3152 37.3729 10.5937 37.3729 9.54742V9.54697Z\", fill: \"#172128\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M40.9998 3.77446C40.9998 4.09931 40.7371 4.3395 40.4152 4.3395C40.0932 4.3395 39.8305 4.09887 39.8305 3.77446V3.7504C39.8305 3.40148 40.0932 3.19739 40.4152 3.19739C40.7371 3.19739 40.9998 3.40193 40.9998 3.7504V3.77446ZM40.0569 11.8076V5.79444H40.7729V11.8076H40.0569Z\", fill: \"#172128\" })), /* @__PURE__ */ React.createElement(\"defs\", null, /* @__PURE__ */ React.createElement(\"linearGradient\", { id: \"paint0_linear_100_2379\", x1: 31.3237, y1: 301678e-10, x2: 34.1742, y2: 2.06507, gradientUnits: \"userSpaceOnUse\" }, /* @__PURE__ */ React.createElement(\"stop\", { stopColor: \"#FA4B16\" }), /* @__PURE__ */ React.createElement(\"stop\", { offset: 1, stopColor: \"#8E64EF\" })), /* @__PURE__ */ React.createElement(\"clipPath\", { id: \"clip0_100_2379\" }, /* @__PURE__ */ React.createElement(\"rect\", { width: 41, height: 12, fill: \"white\" }))));\nexport default SvgMoreAiLogo;\n","import * as React from \"react\";\nconst SvgMoreAiSparkle = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 16, height: 16, viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M14.4241 8.00167C12.9851 8.50672 11.6338 9.33413 10.4822 10.4848C9.33067 11.6355 8.50415 12.9868 7.9991 14.4258C7.49495 12.9868 6.66664 11.6355 5.51596 10.4839C4.36528 9.33324 3.01402 8.50582 1.575 8.00078C3.01402 7.49573 4.36528 6.66832 5.51686 5.51764C6.66754 4.36696 7.49495 3.01569 8 1.57578C8.50504 3.01569 9.33246 4.36606 10.484 5.51764C11.6347 6.66832 12.986 7.49573 14.425 8.00078L14.4241 8.00167Z\", fill: \"url(#paint0_linear_100_2352)\" }), /* @__PURE__ */ React.createElement(\"defs\", null, /* @__PURE__ */ React.createElement(\"linearGradient\", { id: \"paint0_linear_100_2352\", x1: 8.24377, y1: 1.57633, x2: 13.9855, y2: 5.76743, gradientUnits: \"userSpaceOnUse\" }, /* @__PURE__ */ React.createElement(\"stop\", { stopColor: \"#FA4B16\" }), /* @__PURE__ */ React.createElement(\"stop\", { offset: 1, stopColor: \"#8E64EF\" }))));\nexport default SvgMoreAiSparkle;\n","import * as React from \"react\";\nimport * as RadixPopover from \"@radix-ui/react-popover\";\nimport { Headset_mic } from \"../../../assets/icons\";\nimport { useSdkContext } from \"../../../hooks/useSdkContext\";\n\ntype PopoverSide = \"top\" | \"bottom\" | \"left\" | \"right\";\n\ninterface PopoverProps {\n title?: string;\n children: React.ReactNode;\n side?: PopoverSide;\n align?: \"start\" | \"center\" | \"end\";\n}\n\nexport default function Popover({\n children,\n side = \"top\",\n align = \"end\",\n}: PopoverProps) {\n const { setIsChatScreen, isChatScreen } = useSdkContext();\n const micClickHandler = () => {\n if (!isChatScreen) {\n setIsChatScreen(true);\n }\n };\n return (\n <RadixPopover.Root>\n <RadixPopover.Trigger\n asChild\n className=\"data-[state=open]:mhb-outline data-[state=open]:mhb-outline-neutral-110\"\n >\n <button\n type=\"button\"\n className=\"mhb-h-12 mhb-w-12 mhb-rounded-[16px] mhb-bg-neutral-10 mhb-flex mhb-items-center mhb-justify-center\"\n onClick={micClickHandler}\n >\n <Headset_mic className=\"mhb-h-5 mhb-w-5\" />\n </button>\n </RadixPopover.Trigger>\n\n <RadixPopover.Portal>\n <RadixPopover.Content\n side={side}\n align={align}\n sideOffset={12}\n className=\"mhb-popover\n mhb-flex mhb-flex-col\n mhb-h-[460px] mhb-max-h-[460px]\n mhb-w-[323px]\n mhb-bg-white\n mhb-rounded-[16px]\n mhb-border mhb-border-neutral-10\n mhb-shadow-[0_4px_20px_rgba(23,33,40,0.05)]\n mhb-overflow-hidden\"\n >\n <div className=\"mhb-popover-children mhb-h-full mhb-flex mhb-flex-col\">\n {children}\n </div>\n </RadixPopover.Content>\n </RadixPopover.Portal>\n </RadixPopover.Root>\n );\n}\n","import { forwardRef } from \"react\";\nimport { Search } from \"../../../assets/icons\";\n\ninterface searchBarProps {\n forwardedRef?: React.Ref<HTMLInputElement>;\n onChangeHandler: (e: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\nconst SearchBar = ({ forwardedRef, onChangeHandler }: searchBarProps) => {\n return (\n <div className=\"mhb-h-[48px] mhb-flex mhb-rounded-[9999px] mhb-bg-neutral-10 mhb-items-center mhb-gap-3 mhb-px-3\">\n <Search className=\"mhb-h-4 mhb-w-4\" />\n\n <input\n ref={forwardedRef}\n onChange={onChangeHandler}\n type=\"text\"\n placeholder=\"Search your chats\"\n className=\"\n mhb-input \n mhb-flex-1\n mhb-w-full\n mhb-typography-para-30\n mhb-text-neutral-110\n mhb-bg-transparent\n mhb-border-0\n mhb-outline-none\n mhb-whitespace-nowrap\n mhb-overflow-visible\n placeholder:mhb-text-neutral-40\n focus:mhb-outline-none\n \"\n />\n </div>\n );\n};\n\nconst ForwardedSearchBar = forwardRef<HTMLInputElement, searchBarProps>(\n (props, forwardedRef) => {\n return <SearchBar {...props} forwardedRef={forwardedRef} />;\n }\n);\n\nexport default ForwardedSearchBar;\n","const Loader = () => {\n return (\n <div className=\"mhb-flex mhb-items-center mhb-justify-center\">\n <svg\n className=\"mhb-w-8 mhb-h-8 mhb-animate-spin mhb-text-neutral-110\"\n viewBox=\"0 0 50 50\"\n >\n <circle\n cx=\"25\"\n cy=\"25\"\n r=\"20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n strokeDasharray=\"100\"\n strokeDashoffset=\"60\"\n />\n </svg>\n </div>\n );\n};\nexport default Loader;\n","interface SubscriptionMessage {\n id: string;\n type: \"start\" | \"stop\";\n payload: {\n data: string;\n extensions: {\n authorization: {\n host: string;\n \"x-api-key\": string;\n };\n };\n };\n}\n\ninterface SubscriptionEntry {\n message: SubscriptionMessage;\n callback: (data: unknown) => void;\n}\n\ninterface GraphQLResponse<T> {\n data?: T;\n errors?: Array<{ message: string }>;\n}\n\nexport interface ChatbotClient {\n executeGraphql: <T>(\n operation: string,\n variables?: Record<string, unknown>,\n token?: string\n ) => Promise<T>;\n subscribe: (\n subscription: string,\n variables: Record<string, unknown>,\n callback: (data: unknown) => void\n ) => () => void;\n close: () => void;\n}\n\ntype FailedRequest = {\n resolve: (token: string) => void;\n reject: (error: any) => void;\n};\n\nimport { SSOAuthorization } from \"more-sso-sdk\";\nimport { notifyTokenUpdate } from \"../core/sdkAuthBridge\";\nimport type { ApiUrls } from \"../types\";\n\nlet ws: WebSocket | null = null;\nlet reconnectAttempts = 0;\nlet isManuallyClosed = false;\nlet subscriptionIdCounter = 0;\nconst subscriptions: Record<string, SubscriptionEntry> = {};\nlet isConnectionAcked = false;\n\nlet graphqlEndpoint = \"\";\nlet subscriptionEndpoint = \"\";\nlet apiKey = \"\";\nlet failedQueue: FailedRequest[] = [];\nlet isRefreshing = false;\n\nfunction openWebsocket() {\n const host = new URL(graphqlEndpoint).hostname;\n const apiHeader = {\n host: host,\n \"x-api-key\": apiKey,\n };\n const payload = {};\n const base64ApiHeader = btoa(JSON.stringify(apiHeader));\n const base64Payload = btoa(JSON.stringify(payload));\n const appsyncUrl = `${subscriptionEndpoint}?header=${base64ApiHeader}&payload=${base64Payload}`;\n\n return new WebSocket(appsyncUrl, [\"graphql-ws\"]);\n}\n\nconst connect = () => {\n isManuallyClosed = false;\n ws = openWebsocket();\n isConnectionAcked = false;\n\n ws.onopen = () => {\n reconnectAttempts = 0;\n ws?.send(JSON.stringify({ type: \"connection_init\" }));\n };\n\n ws.onmessage = (e) => {\n const data = JSON.parse(e.data);\n if (!isConnectionAcked) {\n if (data.type === \"connection_ack\") {\n isConnectionAcked = true;\n for (const id in subscriptions) {\n ws?.send(JSON.stringify(subscriptions[id].message));\n }\n }\n } else {\n if (data.type === \"error\") {\n } else if (data.type === \"data\" && subscriptions[data.id]) {\n subscriptions[data.id].callback(data.payload.data);\n } else if (data.type === \"complete\" && subscriptions[data.id]) {\n delete subscriptions[data.id];\n }\n }\n };\n\n ws.onclose = () => {\n if (isManuallyClosed) return;\n const delay = Math.min(\n 1000 * Math.pow(2, reconnectAttempts) + Math.random() * 1000,\n 30000\n );\n setTimeout(() => {\n reconnectAttempts++;\n connect();\n }, delay);\n };\n\n ws.onerror = () => {\n ws?.close();\n };\n};\n\nconst processQueue = (error: any, token: string | null = null): void => {\n failedQueue.forEach(({ resolve, reject }) => {\n if (error) {\n reject(error);\n } else if (token) {\n resolve(token);\n }\n });\n failedQueue = [];\n};\n\nfunction enqueueFailedRequest(): Promise<string> {\n return new Promise((resolve, reject) => {\n failedQueue.push({ resolve, reject });\n });\n}\n\nconst createChatbotClient = (apiURLS: ApiUrls): ChatbotClient => {\n graphqlEndpoint = apiURLS.apiURL;\n apiKey = apiURLS.apiKey;\n subscriptionEndpoint = apiURLS.apiURL\n .replace(\"https://\", \"wss://\")\n .replace(\"appsync-api\", \"appsync-realtime-api\");\n\n connect();\n const executeGraphql = async <T>(\n operation: string,\n variables: Record<string, unknown> = {},\n token?: string\n ): Promise<T> => {\n const response = await fetch(graphqlEndpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-api-key\": apiKey,\n ...(token ? { Authorization: `Bearer ${token}` } : {}),\n },\n body: JSON.stringify({ query: operation, variables }),\n });\n\n const result: GraphQLResponse<T> = await response.json();\n const errors = Array.isArray(result.errors) ? result.errors : [];\n console.log(errors, \"check errors\");\n // Auth error handling\n const shouldRefresh = errors.some((err) => {\n const msg = err.message?.toLowerCase() ?? \"\";\n return (\n msg.includes(\"unauthorized\") ||\n msg.includes(\"jwt\") ||\n msg.includes(\"expired\")\n );\n });\n console.log(shouldRefresh, \"check shouldRefresh\");\n if (shouldRefresh) {\n console.log(shouldRefresh, \"inside shouldRefresh\");\n // if refresh already running queue request\n if (isRefreshing) {\n const newToken = await enqueueFailedRequest();\n return executeGraphql<T>(operation, variables, newToken);\n }\n\n isRefreshing = true;\n\n try {\n let refreshResult: any = null;\n if (process.env.NODE_ENV === \"development\") {\n refreshResult = await SSOAuthorization.getDevToken(\"432896\");\n } else {\n const currentUrl = window.location.href;\n const encodedRedirect = encodeURIComponent(currentUrl);\n refreshResult = SSOAuthorization.getToken(encodedRedirect);\n console.log(refreshResult, \"refreshResult check\");\n }\n if (!refreshResult?.token) {\n throw new Error(\"Refresh did not return an access token\");\n }\n\n notifyTokenUpdate(refreshResult.token);\n processQueue(null, refreshResult.token);\n\n // retry current request\n return executeGraphql<T>(operation, variables, refreshResult.token);\n } catch (error) {\n console.log(error, \"check updating refresh\");\n processQueue(error, null);\n throw error;\n } finally {\n isRefreshing = false;\n }\n }\n\n if (errors.length > 0) {\n throw new Error(errors.map((e) => e.message).join(\", \"));\n }\n\n return result.data as T;\n };\n return {\n executeGraphql,\n\n subscribe: (\n subscription: string,\n variables: Record<string, unknown> = {},\n callback: (data: unknown) => void\n ): (() => void) => {\n if (!subscription.trim().startsWith(\"subscription\")) {\n return () => {};\n }\n\n const id = `${++subscriptionIdCounter}`;\n const message: SubscriptionMessage = {\n id,\n type: \"start\",\n payload: {\n data: JSON.stringify({ query: subscription, variables }),\n extensions: {\n authorization: {\n host: new URL(graphqlEndpoint).hostname,\n \"x-api-key\": apiKey,\n },\n },\n },\n };\n\n subscriptions[id] = { message, callback };\n\n if (isConnectionAcked && ws?.readyState === WebSocket.OPEN) {\n ws.send(JSON.stringify(message));\n }\n\n return () => {\n if (ws?.readyState === WebSocket.OPEN) {\n ws.send(JSON.stringify({ id, type: \"stop\" }));\n }\n delete subscriptions[id];\n };\n },\n\n close: () => {\n isManuallyClosed = true;\n ws?.close();\n },\n };\n};\n\nexport default createChatbotClient;\n","import createChatbotClient, { ChatbotClient } from \"./client\";\nimport type { ApiUrls } from \"../types\";\n\nlet chatbotClient: ChatbotClient;\n\nexport const initChatbot = (urls: ApiUrls): void => {\n if (chatbotClient) return;\n chatbotClient = createChatbotClient(urls);\n};\n\nexport const query = async <T>(\n gqlQuery: string,\n variables: Record<string, unknown> = {},\n token: string\n): Promise<T> => {\n if (!chatbotClient) throw new Error(\"client is not created\");\n return chatbotClient.executeGraphql<T>(gqlQuery, variables, token);\n};\n\nexport const mutation = async <T>(\n gqlMutation: string,\n variables: Record<string, unknown> = {},\n token: string\n): Promise<T> => {\n if (!chatbotClient) throw new Error(\"client is not created\");\n return chatbotClient.executeGraphql<T>(gqlMutation, variables, token);\n};\n\nexport const subscribe = (\n gqlSubscription: string,\n variables: Record<string, unknown> = {},\n callback: (data: unknown) => void\n): (() => void) => {\n if (!chatbotClient) throw new Error(\"client is not created\");\n return chatbotClient.subscribe(gqlSubscription, variables, callback);\n};\n","export const ASSIST_HISTORY = `query AssistHistory($limit: Int, $offset: Int , $ticket_id: Int) {\n assistHistory(limit: $limit, offset: $offset, ticket_id: $ticket_id) {\n message_id\n text\n attachments{\n filename\n url\n }\n ticket_id\n handover\n created_at\n end\n user{\n user_name\n user_type\n }\n }}`;\n\nexport const EMPLOYEEE_ASSIST_TICKET = `query EmployeeAssistTickets($search_key: String $limit: Int, $offset: Int) {\n EmployeeAssistTickets(search_key: $search_key limit: $limit, offset: $offset) {\n ticket_id\n parent_id\n user_id\n source\n source_reference_id\n title\n description\n status\n status_id\n assigned_to\n priority\n is_escalated\n resolution_comments\n bill_no\n customer_rating\n agent_rating\n due_date\n created_at\n modified_by\n updated_at\n ticket_meta\n broadcast_list\n cat_desc\n subcat_desc\n user_type\n last_message_time\n ticket_type\n chat_handover\n is_new\n }\n }`;\n","import { useEffect, useRef, useState } from \"react\";\nimport { query } from \"../api\";\nimport { EMPLOYEEE_ASSIST_TICKET } from \"../graphql/query\";\nimport { useSdkContext } from \"./useSdkContext\";\nimport type { Ticket } from \"../types\";\n\ntype EmployeeAssistTicketsResponse = {\n EmployeeAssistTickets: Ticket[];\n};\n\nconst LIMIT = 10;\n\nconst useAssistTicket = () => {\n const [ticketData, setTicketData] = useState<Ticket[]>([]);\n const [loading, setLoading] = useState<Boolean>(true);\n const [error, setError] = useState(null);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const [searchText, setSearchText] = useState<string | null>(\"\");\n\n const isFirstRender = useRef(true);\n\n const { accessToken } = useSdkContext();\n\n const getEmployeeTickets = () => {\n query(\n EMPLOYEEE_ASSIST_TICKET,\n { limit: LIMIT, search_key: searchText },\n accessToken\n )\n .then(async (resp) => {\n const data = resp as EmployeeAssistTicketsResponse;\n setTicketData(data?.EmployeeAssistTickets ?? []);\n })\n .catch((err) => {\n setError(err);\n })\n .finally(() => {\n setLoading(false);\n });\n };\n\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n getEmployeeTickets();\n return;\n }\n\n const timer = setTimeout(() => {\n getEmployeeTickets();\n }, 400);\n\n return () => clearTimeout(timer);\n }, [searchText]);\n\n const getNextPageTicketData = (offset: number) => {\n if (!accessToken) return;\n if (isLoadingMore) return;\n setIsLoadingMore(true);\n query(EMPLOYEEE_ASSIST_TICKET, { limit: LIMIT, offset }, accessToken)\n .then(async (resp) => {\n const { EmployeeAssistTickets } = resp as EmployeeAssistTicketsResponse;\n setTicketData((prev: Ticket[]) => [...prev, ...EmployeeAssistTickets]);\n })\n .catch((err) => {\n setError(err);\n })\n .finally(() => {\n setIsLoadingMore(false);\n });\n };\n\n return {\n ticketData,\n loading,\n error,\n getNextPageTicketData,\n isLoadingMore,\n setSearchText,\n };\n};\n\nexport default useAssistTicket;\n","export function formatTime(ts?: string) {\n const date = ts ? new Date(ts) : new Date();\n return date.toLocaleTimeString(\"en-US\", {\n hour: \"numeric\",\n minute: \"2-digit\",\n timeZone: \"Asia/Kolkata\",\n });\n}\n\nexport function formatDateAndTime(\n iso: string,\n timeZone: string = \"Asia/Kolkata\",\n locale: string = \"en-GB\"\n): string {\n const d = new Date(iso);\n if (Number.isNaN(d.getTime())) return \"\";\n\n const parts = new Intl.DateTimeFormat(locale, {\n day: \"2-digit\",\n month: \"short\",\n year: \"2-digit\",\n timeZone,\n }).formatToParts(d);\n\n const day = parts.find((p) => p.type === \"day\")?.value ?? \"\";\n const month = parts.find((p) => p.type === \"month\")?.value ?? \"\";\n const year = parts.find((p) => p.type === \"year\")?.value ?? \"\";\n\n const time = new Intl.DateTimeFormat(locale, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: false,\n timeZone,\n }).format(d);\n\n return `${day} ${month} \\u2018${year}, ${time}`;\n}\n\nexport const setDataSessionStorage = (key: string, data: any) => {\n sessionStorage.setItem(key, JSON.stringify(data));\n};\n\nexport const getSessionStorageData = (key: string) => {\n const val = sessionStorage.getItem(key);\n return val ? JSON.parse(val) : null;\n};\n","import { useLayoutEffect, useRef } from \"react\";\nimport SearchBar from \"../SearchBar\";\nimport Loader from \"../Loader\";\n\nimport useAssistTicket from \"../../../hooks/useAssistTickets\";\nimport { useSdkContext } from \"../../../hooks/useSdkContext\";\n\nimport { formatDateAndTime, setDataSessionStorage } from \"../../../utils\";\n\nconst ChatHistory = () => {\n const scrollContainerRef = useRef<HTMLDivElement | null>(null);\n const lastFetchedOffsetRef = useRef<number | null>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n const {\n ticketData,\n loading,\n getNextPageTicketData,\n isLoadingMore,\n setSearchText,\n } = useAssistTicket();\n const { setIsChatScreen, profileInfo } = useSdkContext();\n\n useLayoutEffect(() => {\n const el = scrollContainerRef.current;\n if (!el) return;\n }, [ticketData.length]);\n\n const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {\n const el = e.currentTarget;\n searchInputRef.current?.blur();\n if (el.scrollHeight <= el.clientHeight) return;\n const scrollBottom = el.scrollHeight - el.scrollTop - el.clientHeight;\n const offset = ticketData.length;\n\n if (lastFetchedOffsetRef.current === offset) return;\n\n if (scrollBottom <= 20 && !loading) {\n lastFetchedOffsetRef.current = offset;\n getNextPageTicketData(offset);\n }\n };\n\n const ticketBtnClickHandler = (ticket_id: number) => {\n setDataSessionStorage(\"userAndTicket\", {\n ticket_id: ticket_id,\n employee_id: profileInfo?.employee_id,\n });\n setIsChatScreen((prev) => !prev);\n };\n\n const handleKeyDown = (e: React.ChangeEvent<HTMLInputElement>) => {\n e.preventDefault();\n const value = searchInputRef.current?.value?.trim();\n setSearchText(value ?? null);\n };\n\n return (\n <div className=\"mhb-flex mhb-flex-col mhb-h-full mhb-min-h-0\">\n <div className=\"mhb-searchbarContainer mhb-flex mhb-flex-col mhb-border-b mhb-border-neutral-20\">\n <SearchBar ref={searchInputRef} onChangeHandler={handleKeyDown} />\n </div>\n <div\n ref={scrollContainerRef}\n onScroll={handleScroll}\n className=\"mhb-history-main-container mhb-no-scrollbar mhb-py-3 mhb-flex mhb-flex-col mhb-gap-1 mhb-overflow-y-auto mhb-flex-1 mhb-min-h-0\"\n >\n {loading ? (\n <Loader />\n ) : (\n <>\n {ticketData.map((item) => (\n <button\n type=\"button\"\n key={item.ticket_id}\n className=\"mhb-btn-reset mhb-history-container mhb-p-3 mhb-flex mhb-flex-col mhb-rounded-[12px] mhb-bg-neutral-10 mhb-gap-2 mhb-items-start\"\n onClick={() => ticketBtnClickHandler(item.ticket_id)}\n >\n <div className=\"mhb-flex mhb-items-start\">\n <p className=\"mhb-typography-para-thick-30 mhb-text-neutral-110 mhb-m-0 mhb-min-w-0 mhb-break-words mhb-whitespace-normal mhb-text-left\">\n {item.title}\n </p>\n </div>\n\n <p className=\"mhb-typography-para-30 mhb-text-neutral-60 mhb-m-0\">\n {formatDateAndTime(item.created_at)}\n </p>\n </button>\n ))}\n {isLoadingMore && <Loader />}\n </>\n )}\n </div>\n </div>\n );\n};\n\nexport default ChatHistory;\n","import { AssistLogo, Menu, MenuOpen } from \"../../../assets/icons\";\n\ninterface HeaderProps {\n isChatScreen: boolean;\n setIsChatScreen: React.Dispatch<React.SetStateAction<boolean>>;\n}\n\nconst Header = ({ isChatScreen, setIsChatScreen }: HeaderProps) => {\n const menuPressHandler = () => {\n setIsChatScreen((prev: boolean) => !prev);\n };\n const newChatPressHandler = () => {\n sessionStorage.removeItem(\"userAndTicket\");\n setIsChatScreen((prev: boolean) => !prev);\n };\n return (\n <div className=\"mhb-header mhb-border-b mhb-border-neutral-20 mhb-flex mhb-items-center mhb-justify-between\">\n <AssistLogo className=\"h-[36px] w-[36px] fill-current\" />\n\n <div className=\"mhb-flex mhb-gap-2 mhb-items-center\">\n {!isChatScreen ? (\n <button\n type=\"button\"\n onClick={newChatPressHandler}\n className=\"mhb-btn-reset mhb-p-3 mhb-bg-neutral-10 mhb-typography-para-thick-30 mhb-rounded-[9999px]\"\n >\n new chat\n </button>\n ) : (\n <div className=\"mhb-btn-reset mhb-p-3 mhb-invisible mhb-typography-para-thick-30\">\n new chat\n </div>\n )}\n <button\n type=\"button\"\n className=\"mhb-btn-reset mhb-h-[36px] mhb-w-[36px] mhb-flex mhb-items-center mhb-justify-center mhb-rounded-full mhb-bg-neutral-10\"\n onClick={menuPressHandler}\n >\n {isChatScreen ? (\n <Menu className=\"mhb-h-[16px] mhb-w-[16px] fill-current\" />\n ) : (\n <MenuOpen className=\"mhb-h-[16px] mhb-w-[16px]\" />\n )}\n </button>\n </div>\n </div>\n );\n};\n\nexport default Header;\n","export const Assist_Chat = `\nmutation AssistChat(\n $message: String!\n $ticket_id: Int\n $handover: Boolean\n $attachments: [String]\n) {\n assistChat(\n data: {\n ticket_id: $ticket_id,\n handover: $handover,\n message: $message,\n attachments: $attachments\n }\n ) {\n message_id\n text\n attachments {\n filename\n url\n }\n created_at\n ticket_id\n handover\n end\n user{\n user_name\n user_type\n }\n }\n}\n`;\n\nexport const PRESIGNED_URL = `\n mutation GetPresignedLink(\n $files: [String!]!\n $signature_type: String!\n ) {\n GetPresignedLink(data: { files: $files, signature_type: $signature_type }){\n filename\n url\n }\n }`;\n","export const ON_ASSIST_CHAT = `subscription onAssistChat($ticket_id: Int!) {\n onAssistChat(ticket_id: $ticket_id) {\n message_id\n text\n attachments {\n filename\n url\n }\n created_at\n ticket_id\n handover\n end\n user{\n user_name\n user_type\n }\n }\n }`;\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useSdkContext } from \"./useSdkContext\";\nimport { mutation, query, subscribe } from \"../api\";\nimport { ASSIST_HISTORY } from \"../graphql/query\";\nimport { Assist_Chat, PRESIGNED_URL } from \"../graphql/mutation\";\nimport { ON_ASSIST_CHAT } from \"../graphql/subscriptions\";\nimport { getSessionStorageData, setDataSessionStorage } from \"../utils\";\nimport type { Message } from \"../types\";\n\nconst PAGE_LIMIT = 10;\n\ntype AssitHistoryResponse = {\n assistHistory?: Message[];\n};\n\ntype AssitChatResponse = {\n assistChat: Message;\n};\n\ntype onAssistChatResponse = {\n onAssistChat: Message;\n};\n\ntype fileObjVariable = {\n files: File[];\n signature_type: string;\n ticketId: number;\n};\n\nconst useChatMessages = () => {\n const [historyData, setHistoryData] = useState<Message[]>([]);\n const [msgLoading, setMsgLoading] = useState(true);\n const [msgError, setMsgError] = useState(null);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const [isSending, setIsSending] = useState(false);\n const [hasMore, setHasMore] = useState(true);\n\n const { accessToken, profileInfo } = useSdkContext();\n\n const sessionTicket = getSessionStorageData(\"userAndTicket\")?.ticket_id;\n\n const employeeId = getSessionStorageData(\"userAndTicket\")?.employee_id;\n\n const historyTicket = useMemo(() => {\n return (\n historyData.find((itm: Message) => itm.ticket_id != null)?.ticket_id ??\n null\n );\n }, [historyData]);\n\n let ticketId = sessionTicket ?? historyTicket ?? null;\n\n // subscription for messages\n useEffect(() => {\n if (!ticketId) return;\n if (!profileInfo) return;\n if (employeeId && profileInfo?.employee_id != employeeId) {\n sessionStorage.removeItem(\"userAndTicket\");\n return;\n }\n\n const unsubscribe = subscribe(\n ON_ASSIST_CHAT,\n { ticket_id: ticketId },\n (data) => {\n const subsData = data as onAssistChatResponse;\n if (subsData?.onAssistChat?.user?.user_type === \"agent\") {\n setHistoryData((prev: Message[]) => [...prev, subsData.onAssistChat]);\n }\n }\n );\n\n return () => unsubscribe();\n }, [ticketId, profileInfo]);\n\n // initial history load\n useEffect(() => {\n if (!accessToken) return;\n if (!profileInfo) return;\n if (employeeId && profileInfo?.employee_id !== employeeId) {\n sessionStorage.removeItem(\"userAndTicket\");\n ticketId = null;\n }\n const obj = {\n ...(ticketId && { ticket_id: ticketId }),\n limit: PAGE_LIMIT,\n };\n query(ASSIST_HISTORY, obj, accessToken)\n .then(async (resp) => {\n const data = resp as AssitHistoryResponse;\n setHistoryData(data?.assistHistory ?? []);\n })\n .catch((err) => {\n setMsgError(err);\n })\n .finally(() => {\n setMsgLoading(false);\n });\n }, [profileInfo]);\n\n // load older messages\n const getNextPageData = (offset: number) => {\n if (!accessToken) return;\n if (isLoadingMore) return;\n const sessionTicket = getSessionStorageData(\"userAndTicket\")?.ticket_id;\n const obj = {\n ...(sessionTicket && { ticket_id: sessionTicket }),\n limit: PAGE_LIMIT,\n offset,\n };\n setIsLoadingMore(true);\n query(ASSIST_HISTORY, obj, accessToken)\n .then(async (resp) => {\n const data = resp as AssitHistoryResponse;\n const newItems = data?.assistHistory ?? [];\n setHistoryData((prev: Message[]) => [...newItems, ...prev]);\n if (newItems.length < PAGE_LIMIT) {\n setHasMore(false);\n }\n })\n .catch((err) => {\n setMsgError(err);\n })\n .finally(() => {\n setIsLoadingMore(false);\n });\n };\n\n // send message\n const sendMessage = (text: string) => {\n const getTicketId =\n historyData.find((itm: Message) => itm.ticket_id != null)?.ticket_id ??\n null;\n const getHandover =\n historyData.find((itm: Message) => itm.handover == true)?.handover ??\n false;\n const sendMessageObj = {\n ...(getTicketId && { ticket_id: getTicketId }),\n message: text,\n handover: getHandover,\n attachments: [],\n text: text,\n message_id: Math.random(),\n created_at: new Date().toISOString(),\n user: {\n user_name: profileInfo?.full_name,\n user_type: \"employee\",\n },\n };\n setIsSending(true);\n setHistoryData((prev: Message[]) => [...prev, sendMessageObj]);\n\n mutation(Assist_Chat, sendMessageObj, accessToken)\n .then(async (resp) => {\n const data = resp as AssitChatResponse;\n if (data.assistChat.user.user_type !== \"employee\") {\n setHistoryData((prev: Message[]) => [...prev, data.assistChat]);\n }\n if (\n !getSessionStorageData(\"userAndTicket\") &&\n data.assistChat?.ticket_id &&\n profileInfo\n ) {\n setDataSessionStorage(\"userAndTicket\", {\n ticket_id: data.assistChat?.ticket_id,\n employee_id: profileInfo.employee_id,\n });\n }\n })\n .catch(() => setHistoryData((prev) => prev.slice(0, -1)))\n .finally(() => setIsSending(false));\n };\n\n // upload attachment\n const upload = async (fileObj: fileObjVariable) => {\n setIsSending(true);\n const uploadObj = {\n files: fileObj.files.map(\n (file: File) => `${fileObj.ticketId}/${file.name}`\n ),\n signature_type: fileObj.signature_type,\n };\n try {\n const presignedResp: any = await mutation(\n PRESIGNED_URL,\n uploadObj,\n accessToken\n );\n for (const [index, file] of fileObj.files.entries()) {\n const url = presignedResp.GetPresignedLink[index]?.url;\n if (url) {\n await fetch(url, {\n method: \"PUT\",\n body: file,\n headers: { \"Content-Type\": file.type },\n });\n }\n }\n\n const getHandover =\n historyData.find((itm: Message) => itm.handover)?.handover ?? false;\n const attachments = fileObj.files.map((file: File) => ({\n url: URL.createObjectURL(file),\n filename: file.name,\n }));\n\n const optimisticMsg: Message = {\n ticket_id: fileObj.ticketId,\n handover: getHandover,\n attachments,\n text: \"\",\n message_id: Math.random(),\n created_at: new Date().toISOString(),\n user: { user_name: profileInfo?.full_name, user_type: \"employee\" },\n };\n setHistoryData((prev) => [...prev, optimisticMsg]);\n const sendMessageObj = {\n ticket_id: fileObj.ticketId,\n handover: getHandover,\n attachments: fileObj.files.map(\n (a: File) => `${fileObj.ticketId}/${a.name}`\n ),\n message: \"\",\n text: \"\",\n message_id: Math.random(),\n created_at: new Date().toISOString(),\n user: { user_name: profileInfo?.full_name, user_type: \"employee\" },\n };\n const resp = await mutation(Assist_Chat, sendMessageObj, accessToken);\n const data = resp as AssitChatResponse;\n\n if (data.assistChat.user.user_type !== \"employee\") {\n setHistoryData((prev) => [...prev, data.assistChat]);\n }\n if (\n !getSessionStorageData(\"userAndTicket\") &&\n data.assistChat?.ticket_id &&\n profileInfo\n ) {\n setDataSessionStorage(\"userAndTicket\", {\n ticket_id: data.assistChat.ticket_id,\n employee_id: profileInfo.employee_id,\n });\n }\n } catch (err) {\n setHistoryData((prev) => prev.slice(0, -1));\n } finally {\n setIsSending(false);\n }\n };\n\n return {\n historyData,\n msgLoading,\n msgError,\n isSending,\n sendMessage,\n getNextPageData,\n isLoadingMore,\n upload,\n hasMore,\n };\n};\n\nexport default useChatMessages;\n","const Toast = ({ toastMsg }: { toastMsg: string }) => {\n return (\n <div\n id=\"toast-simple\"\n className=\"mhb-border-red-60 mhb-fixed mhb-bottom-6 mhb-right-6 mhb-z-50 mhb-flex mhb-max-w-xs mhb-items-center mhb-space-x-4 mhb-divide-x mhb-divide-gray-200 mhb-rounded-lg mhb-border mhb-bg-white mhb-p-4 mhb-text-gray-700 mhb-shadow-lg dark:mhb-divide-gray-700 dark:mhb-border-gray-600 dark:mhb-bg-gray-800 dark:mhb-text-gray-300\"\n role=\"alert\"\n >\n <svg\n className=\"mhb-text-red-60 mhb-h-3 mhb-w-3\"\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 14 14\"\n >\n <path stroke=\"currentColor\" d=\"m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6\" />\n </svg>\n <div className=\"mhb-text-red-60 mhb-typography-label-thick-30 mhb-ps-4\">\n {toastMsg}\n </div>\n </div>\n );\n};\n\nexport default Toast;\n","import React, { useState } from \"react\";\nimport type { Message } from \"../../../types\";\n\ninterface Props {\n url: string | undefined;\n isFirstInGroup: boolean | null;\n msg: Message;\n fileType: string;\n}\n\nconst Attachment: React.FC<Props> = React.memo(\n ({ url, msg, isFirstInGroup, fileType }) => {\n const [isViewerOpen, setIsViewerOpen] = useState(false);\n\n const downloadPDF = async () => {\n const file = msg.attachments[0];\n const response = await fetch(file.url);\n const blob = await response.blob();\n const blobUrl = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.href = blobUrl;\n link.download = file.filename || \"download.pdf\";\n link.click();\n URL.revokeObjectURL(blobUrl);\n };\n\n return (\n <>\n {(fileType === \"jpg\" || fileType === \"jpeg\" || fileType === \"png\") && (\n <div className=\"mhb-flex\">\n <div\n className={`mhb-rounded-[16px] mhb-bg-white ${\n msg?.user?.user_type === \"customer\"\n ? \"mhb-ml-auto\"\n : \"mhb-mr-auto\"\n } ${\n isFirstInGroup\n ? msg?.user?.user_type === \"customer\"\n ? \"mhb-rounded-tr-[4px]\"\n : \"mhb-rounded-tl-[4px]\"\n : \"\"\n }`}\n >\n <div className=\"mhb-overflow-x-auto mhb-rounded-[16px] mhb-bg-neutral-10 mhb-px-1 mhb-py-1\">\n <div className=\"mhb-flex mhb-w-fit mhb-space-x-1\">\n <div className=\"mhb-h-[44px] mhb-w-[44px] mhb-flex-shrink-0 mhb-rounded-[12px] mhb-bg-white\">\n <img\n src={url}\n alt=\"Attachment\"\n className=\"mhb-h-[44px] mhb-w-[44px] mhb-rounded-[12px] mhb-object-cover\"\n onClick={() => setIsViewerOpen(true)}\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {fileType === \"pdf\" && (\n <button\n className=\"mhb-flex mhb-w-full mhb-items-center mhb-justify-between mhb-gap-3 mhb-rounded-[20px] mhb-mhb-border mhb-border-neutral-10 mhb-bg-white p-3 focus:mhb-outline-none\"\n onClick={() => downloadPDF()}\n >\n <div className=\"mhb-relative mhb-flex mhb-h-[36px] mhb-w-[36px] mhb-items-center mhb-justify-center mhb-rounded-[8px] mhb-bg-neutral-20\">\n {/* <div className=\"mhb-relative mhb-z-0 mhb-h-6 mhb-w-6\">\n <Image\n src=\"/icons/file_color.svg\"\n alt=\"pdf_attachment\"\n fill\n className=\"object-contain\"\n />\n </div> */}\n <p className=\"mhb-absolute mhb-text-white mhb-typography-para-40\">\n pdf\n </p>\n </div>\n <p className=\"mhb-max-w-[50px] mhb-overflow-hidden mhb-text-ellipsis mhb-whitespace-nowrap mhb-text-neutral-110 mhb-typography-para-thick-30\">\n {msg.attachments[0].filename.split(/[/_]/).pop()}\n </p>\n\n {/* <Icon name=\"download\" className=\"mb-1 h-4 w-4 fill-orange-60\" /> */}\n </button>\n )}\n\n {/* {isViewerOpen && fileType !== \"pdf\" && (\n <div\n className=\"mhb-fixed mhb-inset-0 mhb-z-50 mhb-flex mhb-items-center mhb-justify-center mhb-bg-black/80\"\n onClick={() => setIsViewerOpen(false)}\n >\n <div\n className=\"mhb-relative mhb-max-h-[200px] mhb-max-w-[200px] mhb-overflow-y-auto mhb-p-4\"\n onClick={(e) => e.stopPropagation()}\n >\n <img\n src={url}\n alt=\"Full size preview\"\n className=\"mhb-h-[150px] mhb-w-[150px] mhb-rounded-[12px] mhb-object-contain\"\n onClick={() => setIsViewerOpen(true)}\n />\n </div>\n </div>\n )} */}\n </>\n );\n },\n (prev, next) =>\n prev.url === next.url &&\n prev.isFirstInGroup === next.isFirstInGroup &&\n prev.msg.user?.user_type === next.msg.user?.user_type &&\n prev.fileType === next.fileType\n);\n\nexport default Attachment;\n","import { useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { Avatar } from \"more-sso-sdk\";\nimport useChatMessages from \"../../../hooks/useChatMessages\";\n\nimport { Attach_file, MoreAILogo, MoreAISparkle } from \"../../../assets/icons\";\nimport { formatTime } from \"../../../utils\";\nimport type { Message } from \"../../../types\";\nimport Toast from \"../Toast\";\nimport Attachment from \"../Attachment\";\nimport Loader from \"../Loader\";\n\nconst ALLOWED_TYPES = [\n \"image/jpeg\",\n \"image/jpg\",\n \"image/png\",\n \"application/pdf\",\n];\n\nconst Chat = () => {\n const [toastErr, setToastErr] = useState<string | null>(\"\");\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const inputChatRef = useRef<HTMLTextAreaElement>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const prevScrollHeightRef = useRef(0);\n const prevScrollTopRef = useRef(0);\n const isPrependingRef = useRef(false);\n\n const {\n historyData,\n sendMessage,\n getNextPageData,\n isLoadingMore,\n isSending,\n upload,\n msgLoading,\n hasMore,\n } = useChatMessages();\n\n useLayoutEffect(() => {\n const el = scrollContainerRef.current;\n if (!el) return;\n if (isPrependingRef.current) {\n const prevHeight = prevScrollHeightRef.current;\n const prevTop = prevScrollTopRef.current;\n const newHeight = el.scrollHeight;\n const diff = newHeight - prevHeight;\n el.scrollTop = prevTop + diff;\n isPrependingRef.current = false;\n } else {\n el.scrollTop = el.scrollHeight;\n }\n }, [historyData?.length]);\n\n const sendMessageHandler = () => {\n const value = inputChatRef.current?.value?.trim();\n if (!hasMore) isPrependingRef.current = false;\n if (!value) return;\n sendMessage(value);\n if (inputChatRef.current) {\n inputChatRef.current.value = \"\";\n }\n };\n\n const onKeyDownHandler = (e: React.KeyboardEvent) => {\n if (isSending) return;\n if (e.key === \"Enter\") {\n e.preventDefault();\n sendMessageHandler();\n }\n };\n\n const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {\n const el = e.currentTarget;\n const isScrollable = el.scrollHeight > el.clientHeight;\n if (!isScrollable) return;\n if (el.scrollTop <= 20 && !isLoadingMore) {\n const offset = historyData.length;\n prevScrollHeightRef.current = el.scrollHeight;\n prevScrollTopRef.current = el.scrollTop;\n isPrependingRef.current = true;\n getNextPageData(offset);\n }\n };\n\n const onFileChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(event.target.files || []);\n const validFiles = files.filter((file) =>\n ALLOWED_TYPES.includes(file.type)\n );\n const invalidFiles = files.filter(\n (file) => !ALLOWED_TYPES.includes(file.type)\n );\n\n if (invalidFiles.length > 0) {\n setToastErr(\n \"Only JPG, PNG, and PDF files are allowed. Other files like videos are not supported.\"\n );\n setTimeout(() => setToastErr(null), 3000);\n event.target.value = \"\";\n return;\n }\n\n const ticketId = historyData[historyData?.length - 1]?.ticket_id;\n if (validFiles.length > 0 && ticketId) {\n upload({\n files: validFiles,\n signature_type: \"upload\",\n ticketId: ticketId,\n });\n }\n };\n\n const handleFileClickHandler = () => {\n fileInputRef.current?.click();\n };\n\n const isAttachment = useMemo(() => {\n return historyData?.some((itm: Message) => itm.handover == true);\n }, [historyData]);\n\n console.log(historyData, \"historyData\");\n\n return (\n <div className=\"mhb-flex mhb-h-full mhb-flex-col mhb-overflow-hidden mhb-bg-white\">\n <>\n {msgLoading ? (\n <div className=\"mhb-py-3\">\n <Loader />\n </div>\n ) : (\n <>\n <div\n ref={scrollContainerRef}\n className=\"mhb-flex-grow mhb-overflow-y-auto mhb-py-3 [&>*]:[mhb-overflow-anchor:none]\"\n onScroll={handleScroll}\n >\n <div className=\"mhb-flex mhb-min-h-full mhb-flex-col mhb-justify-end mhb-gap-1\">\n {historyData?.map((item: Message, index) => {\n const isFirstInGroup =\n (\"user\" in item && index === 0) ||\n historyData[index - 1]?.user?.user_type !==\n item?.user?.user_type;\n const currentDate = new Date(item.created_at ?? \"\");\n const prevDate =\n index > 0\n ? new Date(historyData[index - 1].created_at ?? \"\")\n : null;\n\n const isFirstMessageOfDay =\n !prevDate ||\n currentDate.getDate() !== prevDate.getDate() ||\n currentDate.getMonth() !== prevDate.getMonth() ||\n currentDate.getFullYear() !== prevDate.getFullYear();\n\n const isGapMoreThan2Minutes =\n prevDate &&\n currentDate.getTime() - prevDate.getTime() > 2 * 60 * 1000;\n\n const shouldShowUserLabel =\n item.hasOwnProperty(\"user\") &&\n (isFirstInGroup ||\n isFirstMessageOfDay ||\n isGapMoreThan2Minutes);\n\n const hasImage = item?.attachments?.some((att) => {\n const ext = att.filename\n .match(/\\.([a-zA-Z0-9]+)(?:\\?|$)/)?.[1]\n ?.toLowerCase();\n return [\"jpg\", \"jpeg\", \"png\"].includes(ext || \"\");\n });\n return (\n <div\n key={item.message_id}\n className={`mhb-flex ${\n item.user.user_type === \"bot\" ||\n item.user.user_type === \"agent\"\n ? \"mhb-justify-start\"\n : \"mhb-justify-end\"\n }`}\n >\n <div className=\"mhb-max-w-[75%\">\n {shouldShowUserLabel && (\n <div\n className={`mhb-mb-1 mhb-flex mhb-items-center ${\n item.user.user_type === \"bot\" ||\n item.user.user_type === \"agent\"\n ? \"mhb-justify-start\"\n : \"mhb-justify-end\"\n }`}\n >\n {item.user.user_type === \"bot\" ? (\n <div className=\"mhb-flex mhb-gap-2 mhb-items-center\">\n <div className=\"mhb-flex mhb-items-center mhb-gap-1\">\n <MoreAISparkle />\n <div className=\"mhb-mb-1\">\n <MoreAILogo />\n </div>\n </div>\n\n <div className=\"mhb-flex mhb-gap-1 mhb-mt-[2px] mhb-items-center\">\n <div className=\"mhb-h-[2px] mhb-w-[2px] mhb-rounded-full mhb-bg-neutral-60\" />\n <p className=\"mhb-typography-para-40 mhb-text-neutral-60\">\n {formatTime(item.created_at)}\n </p>\n </div>\n </div>\n ) : item.user.user_type === \"employee\" ? (\n <div className=\"mhb-flex mhb-gap-2 mhb-items-center\">\n <div className=\"mhb-flex mhb-gap-1\">\n <p className=\"mhb-typography-para-40 mhb-text-neutral-60\">\n {formatTime(item.created_at)}\n </p>\n <div className=\"mhb-h-[2px] mhb-w-[2px] mhb-rounded-full mhb-bg-neutral-60 mhb-flex mhb-self-center\" />\n </div>\n <Avatar\n name={item?.user?.user_name || \"\"}\n employeeId={\"\"}\n className=\"mhb-size-4 mhb-shrink-0 mhb-rounded-full mhb-select-none\"\n />\n </div>\n ) : item.user.user_type === \"agent\" ? (\n <div className=\"mhb-flex mhb-gap-2 mhb-items-center\">\n <Avatar\n name={item?.user?.user_name || \"\"}\n employeeId={\"\"}\n className=\"mhb-size-4 mhb-shrink-0 mhb-rounded-full mhb-select-none\"\n />\n <div className=\"mhb-flex mhb-gap-1 mhb-mt-1 mhb-items-center\">\n <div className=\"mhb-h-[2px] mhb-w-[2px] mhb-rounded-full mhb-bg-neutral-60\" />\n <p className=\"mhb-typography-para-40 mhb-text-neutral-60\">\n {formatTime(item.created_at)}\n </p>\n </div>\n </div>\n ) : null}\n </div>\n )}\n <div className=\"mhb-flex mhb-overflow-hidden mhb-min-w-0\">\n {Array.isArray(item?.attachments) &&\n item?.attachments?.length > 0 ? (\n <div\n className={`mhb-p-1 mhb-rounded-[16px] ${\n item.user.user_type === \"bot\" ||\n item.user.user_type === \"agent\"\n ? `mhb-bg-orange-60 ${\n shouldShowUserLabel\n ? \"mhb-rounded-tl-[4px]\"\n : \"mhb-rounded-[20px]\"\n }`\n : `mhb-bg-neutral-10 ${\n shouldShowUserLabel\n ? \"mhb-rounded-tr-[4px]\"\n : \"mhb-rounded-[20px]\"\n }`\n } ${\n hasImage\n ? \"mhb-overflow-x-auto mhb-flex\"\n : \"mhb-flex mhb-flex-col mhb-gap-1\"\n }`}\n >\n {item.attachments.map((itm, index) => (\n <div key={index}>\n <Attachment\n url={itm.url}\n msg={item}\n isFirstInGroup={false}\n fileType={\n itm?.filename\n .match(/\\.([a-zA-Z0-9]+)(?:\\?|$)/)?.[1]\n ?.toLowerCase() || \"\"\n }\n />\n </div>\n ))}\n </div>\n ) : (\n <p\n className={`mhb-whitespace-pre-line mhb-break-words mhb-rounded-[16px] mhb-p-3\n mhb-typography-para-30 ${\n item.user.user_type === \"bot\" ||\n item.user.user_type === \"agent\"\n ? `mhb-bg-orange-60 mhb-text-white ${\n shouldShowUserLabel\n ? \"mhb-rounded-tl-[4px]\"\n : \"mhb-rounded-[20px]\"\n } `\n : `mhb-bg-neutral-10 mhb-text-neutral-110 mhb-ml-auto ${\n shouldShowUserLabel\n ? \"mhb-rounded-tr-[4px]\"\n : \"mhb-rounded-[20px]\"\n } `\n } \n `}\n >\n {item?.text}\n </p>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n\n <div className=\"mhb-chat-input-container mhb-sticky mhb-bottom-0 mhb-bg-white mhb-py-3 mhb-flex mhb-items-center mhb-gap-2\">\n <div className=\"mhb-bg-neutral-10 mhb-flex mhb-h-[80px] mhb-flex-1 mhb-rounded-xl mhb-p-3\">\n <div className=\"mhb-flex mhb-flex-1\">\n <textarea\n ref={inputChatRef}\n placeholder=\"Type your message here...\"\n className=\"mhb-btn-reset mhb-textarea mhb-flex-grow mhb-text-neutral-70 mhb-caret-orange-70 mhb-typography-para-30 mhb-bg-transparent mhb-resize-none placeholder:mhb-text-neutral-40\"\n onKeyDown={onKeyDownHandler}\n />\n </div>\n\n <div className=\"mhb-flex mhb-gap-1 mhb-justify-end mhb-items-end\">\n {isAttachment && (\n <button\n type=\"button\"\n className=\"mhb-btn-reset mhb-h-[36px] mhb-w-[36px] mhb-rounded-full mhb-bg-neutral-100 mhb-flex mhb-items-center mhb-justify-center mhb-outline-none\"\n disabled={isSending}\n onClick={handleFileClickHandler}\n >\n <Attach_file className=\"h-[16px] w-[16px] mhb-fill-current\" />\n <input\n type=\"file\"\n accept=\".jpg,.jpeg,.png,.pdf\"\n ref={fileInputRef}\n onChange={onFileChange}\n className=\"hidden\"\n />\n </button>\n )}\n\n <button\n type=\"button\"\n className=\"mhb-btn-reset mhb-h-[36px] mhb-rounded-[9999px] mhb-bg-orange-60 mhb-flex mhb-p-3 mhb-items-center mhb-justify-center mhb-shadow-[0_4px_12px_0_rgba(250,75,22,0.50)] mhb-outline-none\"\n disabled={isSending}\n onClick={sendMessageHandler}\n >\n <p className=\"mhb-typography-label-thick-30 mhb-text-white\">\n Send\n </p>\n </button>\n </div>\n </div>\n </div>\n </>\n )}\n </>\n {toastErr && <Toast toastMsg={toastErr} />}\n </div>\n );\n};\n\nexport default Chat;\n","import { useEffect } from \"react\";\nimport { useSdkContext } from \"../../hooks/useSdkContext\";\nimport Popover from \"./Popover\";\n\nimport ChatHistory from \"./ChatHistory\";\nimport Header from \"./Header\";\nimport Chat from \"./Chat\";\nimport { SSOAuthorization } from \"more-sso-sdk\";\n\ninterface ChatButtonProps {\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n align?: \"start\" | \"center\" | \"end\";\n}\n\nexport default function SDKRoot({\n side = \"top\",\n align = \"end\",\n}: ChatButtonProps) {\n const {\n authorized,\n isChatScreen,\n setIsChatScreen,\n accessToken,\n setProfileInfo,\n } = useSdkContext();\n\n const getProfileInfo = async () => {\n const profileInfo = await SSOAuthorization.getProfileDetails();\n setProfileInfo(profileInfo);\n };\n useEffect(() => {\n if (accessToken) {\n getProfileInfo();\n }\n }, []);\n\n return (\n <div className=\"mhb-root\">\n <Popover side={side} align={align}>\n <div className=\"mhb-h-full mhb-w-full mhb-flex mhb-flex-col mhb-min-h-0\">\n <Header\n isChatScreen={isChatScreen}\n setIsChatScreen={setIsChatScreen}\n />\n {/* {authorized ? <Chat /> : <div>Please provide valid credentials</div>} */}\n {isChatScreen ? <Chat /> : <ChatHistory />}\n </div>\n </Popover>\n </div>\n );\n}\n","import { InitOptions } from \"../types\";\n\nexport function validateSdk(options: InitOptions) {\n const { apiKey, accessToken } = options;\n\n if (!apiKey || !accessToken) {\n throw new Error(\"Missing parameters: apiKey, and accessToken are required\");\n }\n}\n","import { useEffect, useState } from \"react\";\nimport { SSOAuthorization } from \"more-sso-sdk\";\nimport SDKRoot from \"./components/SDKRoot\";\nimport { validateSdk } from \"../core/validate\";\nimport { SDKProvider } from \"../context/SDKContext\";\nimport { initChatbot } from \"../api\";\n\nimport type { InitOptions, PopOverProps } from \"../types\";\n\nlet sdkOptions: InitOptions | null = null;\nlet initialized = false;\nlet listeners: (() => void)[] = [];\n\nfunction notify() {\n for (const l of listeners) l();\n}\n\nexport function init(options: InitOptions) {\n if (initialized) {\n return;\n }\n validateSdk(options);\n SSOAuthorization.init({\n env: options.env,\n redirectUrl: options.redirectUrl,\n app: options.app,\n idp: options.idp,\n });\n sdkOptions = options;\n initialized = true;\n notify();\n initChatbot({ apiKey: options.apiKey, apiURL: options.apiURL });\n}\n\nexport function ChatButton(props: PopOverProps) {\n const [state, setState] = useState<{\n initialized: boolean;\n sdkOptions: InitOptions | null;\n }>({\n initialized,\n sdkOptions,\n });\n\n useEffect(() => {\n const cb = () => {\n setState({ initialized, sdkOptions });\n };\n listeners.push(cb);\n return () => {\n listeners = listeners.filter((l) => l !== cb);\n };\n }, []);\n\n if (!state.initialized || !state.sdkOptions) {\n return null;\n }\n\n return (\n <SDKProvider\n appName={state.sdkOptions.app}\n apiKey={state.sdkOptions.apiKey}\n token={state.sdkOptions.accessToken}\n >\n <SDKRoot {...props} />\n </SDKProvider>\n );\n}\n"],"names":["tokenUpdateListener","registerTokenListener","listener","notifyTokenUpdate","token","SDKContext","createContext","SDKProvider","children","appName","apiKey","authorized","setAuthorized","useState","accessToken","setAccessToken","isChatScreen","setIsChatScreen","profileInfo","setProfileInfo","useEffect","jsx","useSdkContext","context","useContext","SvgAssistLogo","props","React","SvgMenuOpen","SvgSearch","SvgHeadsetMic","SvgMenu","SvgAttachFile","SvgMoreAiLogo","SvgMoreAiSparkle","Popover","side","align","micClickHandler","jsxs","RadixPopover","Headset_mic","SearchBar","forwardedRef","onChangeHandler","Search","ForwardedSearchBar","forwardRef","Loader","ws","reconnectAttempts","isManuallyClosed","subscriptionIdCounter","subscriptions","isConnectionAcked","graphqlEndpoint","subscriptionEndpoint","failedQueue","isRefreshing","openWebsocket","apiHeader","payload","base64ApiHeader","base64Payload","appsyncUrl","connect","data","id","delay","processQueue","error","resolve","reject","enqueueFailedRequest","createChatbotClient","apiURLS","executeGraphql","operation","variables","result","errors","shouldRefresh","err","msg","newToken","refreshResult","SSOAuthorization","currentUrl","encodedRedirect","e","subscription","callback","message","chatbotClient","initChatbot","urls","query","gqlQuery","mutation","gqlMutation","subscribe","gqlSubscription","ASSIST_HISTORY","EMPLOYEEE_ASSIST_TICKET","LIMIT","useAssistTicket","ticketData","setTicketData","loading","setLoading","setError","isLoadingMore","setIsLoadingMore","searchText","setSearchText","isFirstRender","useRef","getEmployeeTickets","resp","timer","offset","EmployeeAssistTickets","prev","formatTime","ts","formatDateAndTime","iso","timeZone","locale","d","parts","day","p","month","year","time","setDataSessionStorage","key","getSessionStorageData","val","ChatHistory","scrollContainerRef","lastFetchedOffsetRef","searchInputRef","getNextPageTicketData","useLayoutEffect","handleScroll","el","scrollBottom","ticketBtnClickHandler","ticket_id","value","Fragment","item","Header","AssistLogo","Menu","MenuOpen","Assist_Chat","PRESIGNED_URL","ON_ASSIST_CHAT","PAGE_LIMIT","useChatMessages","historyData","setHistoryData","msgLoading","setMsgLoading","msgError","setMsgError","isSending","setIsSending","hasMore","setHasMore","sessionTicket","employeeId","historyTicket","useMemo","itm","ticketId","unsubscribe","subsData","obj","text","getTicketId","getHandover","sendMessageObj","newItems","fileObj","uploadObj","file","presignedResp","index","url","attachments","optimisticMsg","a","Toast","toastMsg","Attachment","isFirstInGroup","fileType","isViewerOpen","setIsViewerOpen","downloadPDF","blob","blobUrl","link","next","ALLOWED_TYPES","Chat","toastErr","setToastErr","inputChatRef","fileInputRef","prevScrollHeightRef","prevScrollTopRef","isPrependingRef","sendMessage","getNextPageData","upload","prevHeight","prevTop","diff","sendMessageHandler","onKeyDownHandler","onFileChange","event","files","validFiles","handleFileClickHandler","isAttachment","currentDate","prevDate","isFirstMessageOfDay","isGapMoreThan2Minutes","shouldShowUserLabel","hasImage","att","ext","MoreAISparkle","MoreAILogo","Avatar","Attach_file","SDKRoot","getProfileInfo","validateSdk","options","sdkOptions","initialized","listeners","notify","l","init","ChatButton","state","setState","cb"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/core/sdkAuthBridge.ts","../src/context/SDKContext.tsx","../src/hooks/useSdkContext.ts","../src/assets/assist_logo.svg?react","../src/assets/menu_open.svg?react","../src/assets/search.svg?react","../src/assets/headset_mic.svg?react","../src/assets/menu.svg?react","../src/assets/attach_file.svg?react","../src/assets/more_ai_logo.svg?react","../src/assets/more_ai_sparkle.svg?react","../src/web/components/Popover/index.tsx","../src/web/components/SearchBar/index.tsx","../src/web/components/Loader/index.tsx","../src/api/client.ts","../src/api/index.ts","../src/graphql/query.ts","../src/hooks/useAssistTickets.ts","../src/utils/index.ts","../src/web/components/ChatHistory/index.tsx","../src/web/components/Header/index.tsx","../src/graphql/mutation.ts","../src/graphql/subscriptions.ts","../src/hooks/useChatMessages.ts","../src/web/components/Toast/index.tsx","../src/web/components/Attachment/index.tsx","../src/web/components/Chat/index.tsx","../src/web/components/SDKRoot.tsx","../src/core/validate.ts","../src/web/sdk.tsx"],"sourcesContent":["let tokenUpdateListener: ((token: string) => void) | null = null;\n\nexport function registerTokenListener(listener: (token: string) => void) {\n tokenUpdateListener = listener;\n}\n\nexport function notifyTokenUpdate(token: string) {\n tokenUpdateListener?.(token);\n}\n","import { createContext, useState, ReactNode, useEffect } from \"react\";\nimport { registerTokenListener } from \"../core/sdkAuthBridge\";\nimport { SDKContextProps } from \"../types\";\n\nexport const SDKContext = createContext<SDKContextProps | undefined>(undefined);\n\nexport const SDKProvider = ({\n children,\n appName,\n apiKey,\n token,\n}: {\n children: ReactNode;\n appName: string;\n apiKey: string;\n token: string;\n}) => {\n const [authorized, setAuthorized] = useState<boolean>(!!token);\n const [accessToken, setAccessToken] = useState<string>(token);\n const [isChatScreen, setIsChatScreen] = useState<boolean>(true);\n const [profileInfo, setProfileInfo] = useState<any>(null);\n\n useEffect(() => {\n registerTokenListener(setAccessToken);\n }, []);\n\n return (\n <SDKContext.Provider\n value={{\n appName,\n apiKey,\n accessToken,\n authorized,\n setAuthorized,\n isChatScreen,\n setIsChatScreen,\n profileInfo,\n setProfileInfo,\n }}\n >\n {children}\n </SDKContext.Provider>\n );\n};\n","import { useContext } from \"react\";\nimport { SDKContext } from \"../context/SDKContext\";\nimport { SDKContextProps } from \"../types\";\n\nexport const useSdkContext = (): SDKContextProps => {\n const context = useContext(SDKContext);\n if (!context) {\n throw new Error(\"useSdkContext must be used inside SDKProvider\");\n }\n return context;\n};\n","import * as React from \"react\";\nconst SvgAssistLogo = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 36, height: 36, viewBox: \"0 0 36 36\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M15.8261 8.67349C12.4046 8.67349 9.63062 11.447 9.63062 14.8685C9.63062 18.29 12.4046 21.064 15.8261 21.064C16.1656 21.064 16.4991 21.0365 16.8241 20.984C15.0221 20.4765 13.7006 18.8205 13.7006 16.856C13.7006 14.4875 15.6206 12.568 17.9886 12.568C19.8251 12.568 21.3921 13.722 22.0031 15.345C22.0151 15.188 22.0211 15.029 22.0211 14.8685C22.0211 11.447 19.2476 8.67349 15.8261 8.67349Z\", fill: \"#B72402\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M17.9984 7.621C13.0309 7.621 9.00342 11.6485 9.00342 16.616C9.00342 20.526 11.4949 23.8495 14.9744 25.0915V27.785C14.9744 28.228 15.4404 28.515 15.8349 28.3125C17.5759 27.4215 21.5219 25.332 23.5549 23.696C23.6114 23.65 23.6674 23.6065 23.7214 23.5605C23.7624 23.527 23.8009 23.494 23.8394 23.4605C25.7724 21.8115 26.9964 19.356 26.9964 16.616C26.9964 11.6485 22.9689 7.621 17.9989 7.621H17.9984ZM15.8274 21.064C15.5379 21.064 15.2539 21.0435 14.9749 21.005C11.9559 20.59 9.63092 18.0015 9.63092 14.8675C9.63092 11.4465 12.4039 8.6735 15.8274 8.6735C19.2509 8.6735 22.0214 11.4465 22.0214 14.8675C22.0214 15.0265 22.0164 15.185 22.0034 15.341C21.8319 17.6225 20.4259 19.5555 18.4544 20.48C17.9424 20.7205 17.3919 20.892 16.8154 20.9845C16.4929 21.036 16.1624 21.064 15.8269 21.064H15.8274Z\", fill: \"#FA4B16\" }));\nexport default SvgAssistLogo;\n","import * as React from \"react\";\nconst SvgMenuOpen = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 16, height: 16, viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M14.4167 3.58334L14.4167 5.13334L5.58341 5.13333L5.58341 3.58333L14.4167 3.58334ZM2.66675 4.5L6.06675 8.01667L2.68341 11.5167L1.56675 10.4L3.86675 8.01667L1.55008 5.61667L2.66675 4.5ZM14.4167 7.25L14.4167 8.81667L7.48341 8.81667L7.48341 7.25L14.4167 7.25ZM14.4167 10.8667L14.4167 12.4333L5.58341 12.4333L5.58341 10.8667L14.4167 10.8667Z\", fill: \"#172128\" }));\nexport default SvgMenuOpen;\n","import * as React from \"react\";\nconst SvgSearch = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 16, height: 16, viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M13.25 14.45L8.7667 9.98335C8.44448 10.238 8.06414 10.4378 7.6257 10.5827C7.18725 10.7276 6.71203 10.8 6.20003 10.8C4.92048 10.8 3.8367 10.3556 2.9487 9.46668C2.0607 8.57779 1.6167 7.50557 1.6167 6.25001C1.6167 4.99446 2.06114 3.92223 2.95003 3.03335C3.83892 2.14446 4.91392 1.70001 6.17503 1.70001C7.43614 1.70001 8.50837 2.14446 9.3917 3.03335C10.275 3.92223 10.7167 4.99529 10.7167 6.25251C10.7167 6.75085 10.6473 7.2139 10.5084 7.64168C10.3695 8.06946 10.1611 8.47223 9.88337 8.85001L14.3834 13.3167L13.25 14.45ZM6.1892 9.23335C7.02142 9.23335 7.72298 8.94307 8.29387 8.36251C8.86464 7.78196 9.15003 7.07779 9.15003 6.25001C9.15003 5.42223 8.86381 4.71807 8.29137 4.13751C7.71892 3.55696 7.0182 3.26668 6.1892 3.26668C5.35109 3.26668 4.64059 3.55696 4.0577 4.13751C3.47481 4.71807 3.18337 5.42223 3.18337 6.25001C3.18337 7.07779 3.47398 7.78196 4.0552 8.36251C4.63642 8.94307 5.34775 9.23335 6.1892 9.23335Z\", fill: \"#172128\" }));\nexport default SvgSearch;\n","import * as React from \"react\";\nconst SvgHeadsetMic = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 20, height: 20, viewBox: \"0 0 20 20\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M10.0417 19.3958V17.7292H16.0625V16.6042H12.7292V9.70833H16.0625V8.77083C16.0625 7.10417 15.4757 5.67014 14.3021 4.46875C13.1285 3.26736 11.7049 2.66667 10.0312 2.66667C8.38542 2.66667 6.95833 3.26736 5.75 4.46875C4.54167 5.67014 3.9375 7.10417 3.9375 8.77083V9.70833H7.27083V16.6042H1.97917V8.775C1.97917 7.66722 2.19229 6.62306 2.61854 5.6425C3.04479 4.66195 3.62132 3.80319 4.34812 3.06625C5.07493 2.32931 5.92903 1.74861 6.91042 1.32417C7.89167 0.899722 8.93667 0.6875 10.0454 0.6875C11.154 0.6875 12.1944 0.899306 13.1667 1.32292C14.1389 1.74653 14.9868 2.32424 15.7104 3.05604C16.4342 3.78785 17.0036 4.64278 17.4187 5.62083C17.834 6.59889 18.0417 7.64889 18.0417 8.77083V19.3958H10.0417ZM3.9375 14.625H5.3125V11.6875H3.9375V14.625ZM14.7083 14.625H16.0625V11.6875H14.7083V14.625Z\", fill: \"#172128\" }));\nexport default SvgHeadsetMic;\n","import * as React from \"react\";\nconst SvgMenu = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 16, height: 16, viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M1.58334 12.6167V11.0333H14.4333V12.6167H1.58334ZM1.58334 8.78333V7.21666H14.4333V8.78333H1.58334ZM1.58334 4.96666V3.38333H14.4333V4.96666H1.58334Z\", fill: \"#172128\" }));\nexport default SvgMenu;\n","import * as React from \"react\";\nconst SvgAttachFile = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 16, height: 16, viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M12.7833 10.679C12.7833 11.9375 12.3239 12.9861 11.4053 13.825C10.4867 14.6639 9.39228 15.0834 8.12194 15.0834C6.85172 15.0834 5.76105 14.6639 4.84994 13.825C3.93883 12.9861 3.48328 11.9389 3.48328 10.6834V4.08336C3.48328 3.17869 3.81383 2.42197 4.47494 1.81319C5.13605 1.20441 5.92083 0.900024 6.82928 0.900024C7.73783 0.900024 8.52117 1.20441 9.17928 1.81319C9.8375 2.42197 10.1666 3.17869 10.1666 4.08336V10.35C10.1666 10.8935 9.96383 11.3543 9.55828 11.7325C9.15272 12.1109 8.673 12.3 8.11911 12.3C7.56533 12.3 7.09033 12.1127 6.69411 11.738C6.298 11.3634 6.09994 10.9007 6.09994 10.35V4.18336H7.54994V10.35C7.54994 10.4945 7.60711 10.6139 7.72144 10.7084C7.83578 10.8028 7.97267 10.85 8.13211 10.85C8.29155 10.85 8.42883 10.8036 8.54394 10.7109C8.65905 10.6181 8.71661 10.4978 8.71661 10.35V4.10002C8.72772 3.59714 8.54439 3.17975 8.16661 2.84786C7.78883 2.51597 7.34322 2.35002 6.82978 2.35002C6.31633 2.35002 5.87189 2.51352 5.49644 2.84052C5.121 3.16752 4.93328 3.5818 4.93328 4.08336V10.6834C4.94439 11.5417 5.26367 12.2507 5.89111 12.8105C6.51855 13.3702 7.2715 13.65 8.14994 13.65C9.01294 13.65 9.762 13.3695 10.3971 12.8084C11.0323 12.2472 11.3444 11.5389 11.3333 10.6834V3.70002H12.7833V10.679Z\", fill: \"white\" }));\nexport default SvgAttachFile;\n","import * as React from \"react\";\nconst SvgMoreAiLogo = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 41, height: 12, viewBox: \"0 0 41 12\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { clipPath: \"url(#clip0_100_2379)\" }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M21.1825 7.56627H22.1696V5.46029C21.9697 5.38454 21.6628 5.35825 21.4373 5.35825C20.6381 5.35825 19.9407 5.89477 19.9261 6.85195H19.8885L19.4834 5.40815H17.7463V11.7965H20.0681V8.80642C20.0681 8.10324 20.2821 7.56672 21.1825 7.56672V7.56627Z\", fill: \"#172128\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M2.31875 8.00074C2.31875 7.40005 2.55889 7.11976 3.04271 7.11976C3.48584 7.11976 3.69989 7.3996 3.69989 8.00074V11.7956H6.0217V8.00074C6.0217 7.40005 6.26184 7.11976 6.74256 7.11976C7.18835 7.11976 7.4024 7.3996 7.4024 8.00074V11.7956H9.72111V7.32385C9.72111 6.14831 9.12761 5.21786 7.68013 5.21786C6.74212 5.21786 6.14862 5.53603 5.78111 6.25036H5.75502C5.4627 5.62605 4.8661 5.21786 3.98028 5.21786C3.04227 5.21786 2.45761 5.53603 2.10426 6.25036H2.07817L1.80043 5.40725H3.8147e-05V11.7956H2.31875V8.00074Z\", fill: \"#172128\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M10.1851 8.7301C10.1851 10.8129 11.8701 12 13.7227 12C15.5753 12 17.2837 10.8129 17.2837 8.7301V8.47342C17.2837 6.37903 15.5726 5.20349 13.7227 5.20349C11.8728 5.20349 10.1851 6.38215 10.1851 8.47342V8.7301ZM13.7346 7.02071C14.5975 7.02071 14.9765 7.70919 14.9765 8.59017C14.9765 9.47116 14.597 10.1743 13.7346 10.1743C12.8722 10.1743 12.4928 9.47116 12.4928 8.59017C12.4928 7.70919 12.8749 7.02071 13.7346 7.02071Z\", fill: \"#172128\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M25.7969 5.20346C23.9324 5.20346 22.3867 6.43158 22.3867 8.47339V8.73007C22.3867 10.8623 24.0602 12 25.8982 12C27.3545 12 28.7874 11.2589 29.0797 9.70151H26.975C26.8101 10.1333 26.3669 10.2764 25.9618 10.2764C25.2264 10.2764 24.7837 9.76301 24.7315 9.08611H29.0912C29.1173 8.87044 29.1173 8.60173 29.1173 8.38293C29.1173 6.08444 27.3686 5.20346 25.7969 5.20346ZM24.7576 7.75862C24.8067 7.19848 25.137 6.71143 25.846 6.71143H25.8491C26.4948 6.71143 26.8623 7.19581 26.8623 7.75862H24.7576Z\", fill: \"#172128\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M34.376 3.1975C33.6653 3.44883 32.9979 3.86058 32.4292 4.43319C31.8605 5.00581 31.4523 5.67824 31.2028 6.39435C30.9538 5.67824 30.5448 5.00581 29.9765 4.43275C29.4082 3.86013 28.7408 3.44838 28.0301 3.19705C28.7408 2.94572 29.4082 2.53398 29.9769 1.96136C30.5452 1.38874 30.9538 0.716307 31.2033 -0.000244141C31.4527 0.716307 31.8613 1.3883 32.4301 1.96136C32.9984 2.53398 33.6657 2.94572 34.3764 3.19705L34.376 3.1975Z\", fill: \"url(#paint0_linear_100_2379)\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M35.4872 12.0001C34.8667 12.0001 34.2696 11.7715 33.9119 11.3869C33.5895 11.0621 33.4108 10.6655 33.4108 10.1722V10.1C33.4108 8.82507 34.4611 8.12769 35.9051 8.12769C36.4061 8.12769 36.9077 8.17581 37.3729 8.34426V7.94721C37.3729 6.92497 37.0027 6.27571 35.8812 6.27571C35.1413 6.27571 34.4492 6.5404 34.4134 7.38217H33.6854V7.30998C33.8287 6.0471 34.7835 5.61441 35.8578 5.61441C37.1708 5.61441 38.0898 6.17945 38.0898 7.93563V11.808H37.5768C37.4932 11.5915 37.4335 11.3508 37.3499 11.1347H37.326C36.932 11.6516 36.1682 12.0005 35.488 12.0005L35.4872 12.0001ZM37.3729 9.54697V9.01803C36.8718 8.84958 36.3823 8.76536 35.8812 8.76536C35.01 8.76536 34.1507 9.13834 34.1507 10.0643C34.1507 10.9061 34.7831 11.3152 35.6066 11.3152C36.43 11.3152 37.3729 10.5937 37.3729 9.54742V9.54697Z\", fill: \"#172128\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M40.9998 3.77446C40.9998 4.09931 40.7371 4.3395 40.4152 4.3395C40.0932 4.3395 39.8305 4.09887 39.8305 3.77446V3.7504C39.8305 3.40148 40.0932 3.19739 40.4152 3.19739C40.7371 3.19739 40.9998 3.40193 40.9998 3.7504V3.77446ZM40.0569 11.8076V5.79444H40.7729V11.8076H40.0569Z\", fill: \"#172128\" })), /* @__PURE__ */ React.createElement(\"defs\", null, /* @__PURE__ */ React.createElement(\"linearGradient\", { id: \"paint0_linear_100_2379\", x1: 31.3237, y1: 301678e-10, x2: 34.1742, y2: 2.06507, gradientUnits: \"userSpaceOnUse\" }, /* @__PURE__ */ React.createElement(\"stop\", { stopColor: \"#FA4B16\" }), /* @__PURE__ */ React.createElement(\"stop\", { offset: 1, stopColor: \"#8E64EF\" })), /* @__PURE__ */ React.createElement(\"clipPath\", { id: \"clip0_100_2379\" }, /* @__PURE__ */ React.createElement(\"rect\", { width: 41, height: 12, fill: \"white\" }))));\nexport default SvgMoreAiLogo;\n","import * as React from \"react\";\nconst SvgMoreAiSparkle = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 16, height: 16, viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M14.4241 8.00167C12.9851 8.50672 11.6338 9.33413 10.4822 10.4848C9.33067 11.6355 8.50415 12.9868 7.9991 14.4258C7.49495 12.9868 6.66664 11.6355 5.51596 10.4839C4.36528 9.33324 3.01402 8.50582 1.575 8.00078C3.01402 7.49573 4.36528 6.66832 5.51686 5.51764C6.66754 4.36696 7.49495 3.01569 8 1.57578C8.50504 3.01569 9.33246 4.36606 10.484 5.51764C11.6347 6.66832 12.986 7.49573 14.425 8.00078L14.4241 8.00167Z\", fill: \"url(#paint0_linear_100_2352)\" }), /* @__PURE__ */ React.createElement(\"defs\", null, /* @__PURE__ */ React.createElement(\"linearGradient\", { id: \"paint0_linear_100_2352\", x1: 8.24377, y1: 1.57633, x2: 13.9855, y2: 5.76743, gradientUnits: \"userSpaceOnUse\" }, /* @__PURE__ */ React.createElement(\"stop\", { stopColor: \"#FA4B16\" }), /* @__PURE__ */ React.createElement(\"stop\", { offset: 1, stopColor: \"#8E64EF\" }))));\nexport default SvgMoreAiSparkle;\n","import * as React from \"react\";\nimport * as RadixPopover from \"@radix-ui/react-popover\";\nimport { Headset_mic } from \"../../../assets/icons\";\nimport { useSdkContext } from \"../../../hooks/useSdkContext\";\n\ntype PopoverSide = \"top\" | \"bottom\" | \"left\" | \"right\";\n\ninterface PopoverProps {\n title?: string;\n children: React.ReactNode;\n side?: PopoverSide;\n align?: \"start\" | \"center\" | \"end\";\n}\n\nexport default function Popover({\n children,\n side = \"top\",\n align = \"end\",\n}: PopoverProps) {\n const { setIsChatScreen, isChatScreen } = useSdkContext();\n const micClickHandler = () => {\n if (!isChatScreen) {\n setIsChatScreen(true);\n }\n };\n return (\n <RadixPopover.Root>\n <RadixPopover.Trigger\n asChild\n className=\"data-[state=open]:mhb-outline data-[state=open]:mhb-outline-neutral-110\"\n >\n <button\n type=\"button\"\n className=\"mhb-h-12 mhb-w-12 mhb-rounded-[16px] mhb-bg-neutral-10 mhb-flex mhb-items-center mhb-justify-center\"\n onClick={micClickHandler}\n >\n <Headset_mic className=\"mhb-h-5 mhb-w-5\" />\n </button>\n </RadixPopover.Trigger>\n\n <RadixPopover.Portal>\n <RadixPopover.Content\n side={side}\n align={align}\n sideOffset={12}\n className=\"mhb-popover\n mhb-flex mhb-flex-col\n mhb-h-[460px] mhb-max-h-[460px]\n mhb-w-[323px]\n mhb-bg-white\n mhb-rounded-[16px]\n mhb-border mhb-border-neutral-10\n mhb-shadow-[0_4px_20px_rgba(23,33,40,0.05)]\n mhb-overflow-hidden\"\n >\n <div className=\"mhb-popover-children mhb-h-full mhb-flex mhb-flex-col\">\n {children}\n </div>\n </RadixPopover.Content>\n </RadixPopover.Portal>\n </RadixPopover.Root>\n );\n}\n","import { forwardRef } from \"react\";\nimport { Search } from \"../../../assets/icons\";\n\ninterface searchBarProps {\n forwardedRef?: React.Ref<HTMLInputElement>;\n onChangeHandler: (e: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\nconst SearchBar = ({ forwardedRef, onChangeHandler }: searchBarProps) => {\n return (\n <div className=\"mhb-h-[48px] mhb-flex mhb-rounded-[9999px] mhb-bg-neutral-10 mhb-items-center mhb-gap-3 mhb-px-3\">\n <Search className=\"mhb-h-4 mhb-w-4\" />\n\n <input\n ref={forwardedRef}\n onChange={onChangeHandler}\n type=\"text\"\n placeholder=\"Search your chats\"\n className=\"\n mhb-input \n mhb-flex-1\n mhb-w-full\n mhb-typography-para-30\n mhb-text-neutral-110\n mhb-bg-transparent\n mhb-border-0\n mhb-outline-none\n mhb-whitespace-nowrap\n mhb-overflow-visible\n placeholder:mhb-text-neutral-40\n focus:mhb-outline-none\n \"\n />\n </div>\n );\n};\n\nconst ForwardedSearchBar = forwardRef<HTMLInputElement, searchBarProps>(\n (props, forwardedRef) => {\n return <SearchBar {...props} forwardedRef={forwardedRef} />;\n }\n);\n\nexport default ForwardedSearchBar;\n","const Loader = () => {\n return (\n <div className=\"mhb-flex mhb-items-center mhb-justify-center\">\n <svg\n className=\"mhb-w-8 mhb-h-8 mhb-animate-spin mhb-text-neutral-110\"\n viewBox=\"0 0 50 50\"\n >\n <circle\n cx=\"25\"\n cy=\"25\"\n r=\"20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n strokeDasharray=\"100\"\n strokeDashoffset=\"60\"\n />\n </svg>\n </div>\n );\n};\nexport default Loader;\n","interface SubscriptionMessage {\n id: string;\n type: \"start\" | \"stop\";\n payload: {\n data: string;\n extensions: {\n authorization: {\n host: string;\n \"x-api-key\": string;\n };\n };\n };\n}\n\ninterface SubscriptionEntry {\n message: SubscriptionMessage;\n callback: (data: unknown) => void;\n}\n\ninterface GraphQLResponse<T> {\n data?: T;\n errors?: Array<{ message: string }>;\n}\n\nexport interface ChatbotClient {\n executeGraphql: <T>(\n operation: string,\n variables?: Record<string, unknown>,\n token?: string\n ) => Promise<T>;\n subscribe: (\n subscription: string,\n variables: Record<string, unknown>,\n callback: (data: unknown) => void\n ) => () => void;\n close: () => void;\n}\n\ntype FailedRequest = {\n resolve: (token: string) => void;\n reject: (error: any) => void;\n};\n\nimport { SSOAuthorization } from \"more-sso-sdk\";\nimport { notifyTokenUpdate } from \"../core/sdkAuthBridge\";\nimport type { ApiUrls } from \"../types\";\n\nlet ws: WebSocket | null = null;\nlet reconnectAttempts = 0;\nlet isManuallyClosed = false;\nlet subscriptionIdCounter = 0;\nconst subscriptions: Record<string, SubscriptionEntry> = {};\nlet isConnectionAcked = false;\n\nlet graphqlEndpoint = \"\";\nlet subscriptionEndpoint = \"\";\nlet apiKey = \"\";\nlet failedQueue: FailedRequest[] = [];\nlet isRefreshing = false;\n\nfunction openWebsocket() {\n const host = new URL(graphqlEndpoint).hostname;\n const apiHeader = {\n host: host,\n \"x-api-key\": apiKey,\n };\n const payload = {};\n const base64ApiHeader = btoa(JSON.stringify(apiHeader));\n const base64Payload = btoa(JSON.stringify(payload));\n const appsyncUrl = `${subscriptionEndpoint}?header=${base64ApiHeader}&payload=${base64Payload}`;\n\n return new WebSocket(appsyncUrl, [\"graphql-ws\"]);\n}\n\nconst connect = () => {\n isManuallyClosed = false;\n ws = openWebsocket();\n isConnectionAcked = false;\n\n ws.onopen = () => {\n reconnectAttempts = 0;\n ws?.send(JSON.stringify({ type: \"connection_init\" }));\n };\n\n ws.onmessage = (e) => {\n const data = JSON.parse(e.data);\n if (!isConnectionAcked) {\n if (data.type === \"connection_ack\") {\n isConnectionAcked = true;\n for (const id in subscriptions) {\n ws?.send(JSON.stringify(subscriptions[id].message));\n }\n }\n } else {\n if (data.type === \"error\") {\n } else if (data.type === \"data\" && subscriptions[data.id]) {\n subscriptions[data.id].callback(data.payload.data);\n } else if (data.type === \"complete\" && subscriptions[data.id]) {\n delete subscriptions[data.id];\n }\n }\n };\n\n ws.onclose = () => {\n if (isManuallyClosed) return;\n const delay = Math.min(\n 1000 * Math.pow(2, reconnectAttempts) + Math.random() * 1000,\n 30000\n );\n setTimeout(() => {\n reconnectAttempts++;\n connect();\n }, delay);\n };\n\n ws.onerror = () => {\n ws?.close();\n };\n};\n\nconst processQueue = (error: any, token: string | null = null): void => {\n failedQueue.forEach(({ resolve, reject }) => {\n if (error) {\n reject(error);\n } else if (token) {\n resolve(token);\n }\n });\n failedQueue = [];\n};\n\nfunction enqueueFailedRequest(): Promise<string> {\n return new Promise((resolve, reject) => {\n failedQueue.push({ resolve, reject });\n });\n}\n\nconst createChatbotClient = (apiURLS: ApiUrls): ChatbotClient => {\n graphqlEndpoint = apiURLS.apiURL;\n apiKey = apiURLS.apiKey;\n subscriptionEndpoint = apiURLS.apiURL\n .replace(\"https://\", \"wss://\")\n .replace(\"appsync-api\", \"appsync-realtime-api\");\n\n connect();\n const executeGraphql = async <T>(\n operation: string,\n variables: Record<string, unknown> = {},\n token?: string\n ): Promise<T> => {\n const response = await fetch(graphqlEndpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-api-key\": apiKey,\n ...(token ? { Authorization: `Bearer ${token}` } : {}),\n },\n body: JSON.stringify({ query: operation, variables }),\n });\n\n const result: GraphQLResponse<T> = await response.json();\n const errors = Array.isArray(result.errors) ? result.errors : [];\n console.log(errors, \"check errors\");\n // Auth error handling\n const shouldRefresh = errors.some((err) => {\n const msg = err.message?.toLowerCase() ?? \"\";\n return (\n msg.includes(\"unauthorized\") ||\n msg.includes(\"jwt\") ||\n msg.includes(\"expired\")\n );\n });\n console.log(shouldRefresh, \"check shouldRefresh\");\n if (shouldRefresh) {\n console.log(shouldRefresh, \"inside shouldRefresh\");\n // if refresh already running queue request\n if (isRefreshing) {\n const newToken = await enqueueFailedRequest();\n return executeGraphql<T>(operation, variables, newToken);\n }\n\n isRefreshing = true;\n\n try {\n let refreshResult: any = null;\n if (process.env.NODE_ENV === \"development\") {\n refreshResult = await SSOAuthorization.getDevToken(\"432896\");\n } else {\n const currentUrl = window.location.href;\n const encodedRedirect = encodeURIComponent(currentUrl);\n refreshResult = await SSOAuthorization.getToken(encodedRedirect);\n console.log(refreshResult, \"refreshResult check\");\n }\n if (!refreshResult?.token) {\n throw new Error(\"Refresh did not return an access token\");\n }\n\n notifyTokenUpdate(refreshResult.token);\n processQueue(null, refreshResult.token);\n\n // retry current request\n return executeGraphql<T>(operation, variables, refreshResult.token);\n } catch (error) {\n console.log(error, \"check updating refresh\");\n processQueue(error, null);\n throw error;\n } finally {\n isRefreshing = false;\n }\n }\n\n if (errors.length > 0) {\n throw new Error(errors.map((e) => e.message).join(\", \"));\n }\n\n return result.data as T;\n };\n return {\n executeGraphql,\n\n subscribe: (\n subscription: string,\n variables: Record<string, unknown> = {},\n callback: (data: unknown) => void\n ): (() => void) => {\n if (!subscription.trim().startsWith(\"subscription\")) {\n return () => {};\n }\n\n const id = `${++subscriptionIdCounter}`;\n const message: SubscriptionMessage = {\n id,\n type: \"start\",\n payload: {\n data: JSON.stringify({ query: subscription, variables }),\n extensions: {\n authorization: {\n host: new URL(graphqlEndpoint).hostname,\n \"x-api-key\": apiKey,\n },\n },\n },\n };\n\n subscriptions[id] = { message, callback };\n\n if (isConnectionAcked && ws?.readyState === WebSocket.OPEN) {\n ws.send(JSON.stringify(message));\n }\n\n return () => {\n if (ws?.readyState === WebSocket.OPEN) {\n ws.send(JSON.stringify({ id, type: \"stop\" }));\n }\n delete subscriptions[id];\n };\n },\n\n close: () => {\n isManuallyClosed = true;\n ws?.close();\n },\n };\n};\n\nexport default createChatbotClient;\n","import createChatbotClient, { ChatbotClient } from \"./client\";\nimport type { ApiUrls } from \"../types\";\n\nlet chatbotClient: ChatbotClient;\n\nexport const initChatbot = (urls: ApiUrls): void => {\n if (chatbotClient) return;\n chatbotClient = createChatbotClient(urls);\n};\n\nexport const query = async <T>(\n gqlQuery: string,\n variables: Record<string, unknown> = {},\n token: string\n): Promise<T> => {\n if (!chatbotClient) throw new Error(\"client is not created\");\n return chatbotClient.executeGraphql<T>(gqlQuery, variables, token);\n};\n\nexport const mutation = async <T>(\n gqlMutation: string,\n variables: Record<string, unknown> = {},\n token: string\n): Promise<T> => {\n if (!chatbotClient) throw new Error(\"client is not created\");\n return chatbotClient.executeGraphql<T>(gqlMutation, variables, token);\n};\n\nexport const subscribe = (\n gqlSubscription: string,\n variables: Record<string, unknown> = {},\n callback: (data: unknown) => void\n): (() => void) => {\n if (!chatbotClient) throw new Error(\"client is not created\");\n return chatbotClient.subscribe(gqlSubscription, variables, callback);\n};\n","export const ASSIST_HISTORY = `query AssistHistory($limit: Int, $offset: Int , $ticket_id: Int) {\n assistHistory(limit: $limit, offset: $offset, ticket_id: $ticket_id) {\n message_id\n text\n attachments{\n filename\n url\n }\n ticket_id\n handover\n created_at\n end\n user{\n user_name\n user_type\n }\n }}`;\n\nexport const EMPLOYEEE_ASSIST_TICKET = `query EmployeeAssistTickets($search_key: String $limit: Int, $offset: Int) {\n EmployeeAssistTickets(search_key: $search_key limit: $limit, offset: $offset) {\n ticket_id\n parent_id\n user_id\n source\n source_reference_id\n title\n description\n status\n status_id\n assigned_to\n priority\n is_escalated\n resolution_comments\n bill_no\n customer_rating\n agent_rating\n due_date\n created_at\n modified_by\n updated_at\n ticket_meta\n broadcast_list\n cat_desc\n subcat_desc\n user_type\n last_message_time\n ticket_type\n chat_handover\n is_new\n }\n }`;\n","import { useEffect, useRef, useState } from \"react\";\nimport { query } from \"../api\";\nimport { EMPLOYEEE_ASSIST_TICKET } from \"../graphql/query\";\nimport { useSdkContext } from \"./useSdkContext\";\nimport type { Ticket } from \"../types\";\n\ntype EmployeeAssistTicketsResponse = {\n EmployeeAssistTickets: Ticket[];\n};\n\nconst LIMIT = 10;\n\nconst useAssistTicket = () => {\n const [ticketData, setTicketData] = useState<Ticket[]>([]);\n const [loading, setLoading] = useState<Boolean>(true);\n const [error, setError] = useState(null);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const [searchText, setSearchText] = useState<string | null>(\"\");\n\n const isFirstRender = useRef(true);\n\n const { accessToken } = useSdkContext();\n\n const getEmployeeTickets = () => {\n query(\n EMPLOYEEE_ASSIST_TICKET,\n { limit: LIMIT, search_key: searchText },\n accessToken\n )\n .then(async (resp) => {\n const data = resp as EmployeeAssistTicketsResponse;\n setTicketData(data?.EmployeeAssistTickets ?? []);\n })\n .catch((err) => {\n setError(err);\n })\n .finally(() => {\n setLoading(false);\n });\n };\n\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n getEmployeeTickets();\n return;\n }\n\n const timer = setTimeout(() => {\n getEmployeeTickets();\n }, 400);\n\n return () => clearTimeout(timer);\n }, [searchText]);\n\n const getNextPageTicketData = (offset: number) => {\n if (!accessToken) return;\n if (isLoadingMore) return;\n setIsLoadingMore(true);\n query(EMPLOYEEE_ASSIST_TICKET, { limit: LIMIT, offset }, accessToken)\n .then(async (resp) => {\n const { EmployeeAssistTickets } = resp as EmployeeAssistTicketsResponse;\n setTicketData((prev: Ticket[]) => [...prev, ...EmployeeAssistTickets]);\n })\n .catch((err) => {\n setError(err);\n })\n .finally(() => {\n setIsLoadingMore(false);\n });\n };\n\n return {\n ticketData,\n loading,\n error,\n getNextPageTicketData,\n isLoadingMore,\n setSearchText,\n };\n};\n\nexport default useAssistTicket;\n","export function formatTime(ts?: string) {\n const date = ts ? new Date(ts) : new Date();\n return date.toLocaleTimeString(\"en-US\", {\n hour: \"numeric\",\n minute: \"2-digit\",\n timeZone: \"Asia/Kolkata\",\n });\n}\n\nexport function formatDateAndTime(\n iso: string,\n timeZone: string = \"Asia/Kolkata\",\n locale: string = \"en-GB\"\n): string {\n const d = new Date(iso);\n if (Number.isNaN(d.getTime())) return \"\";\n\n const parts = new Intl.DateTimeFormat(locale, {\n day: \"2-digit\",\n month: \"short\",\n year: \"2-digit\",\n timeZone,\n }).formatToParts(d);\n\n const day = parts.find((p) => p.type === \"day\")?.value ?? \"\";\n const month = parts.find((p) => p.type === \"month\")?.value ?? \"\";\n const year = parts.find((p) => p.type === \"year\")?.value ?? \"\";\n\n const time = new Intl.DateTimeFormat(locale, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: false,\n timeZone,\n }).format(d);\n\n return `${day} ${month} \\u2018${year}, ${time}`;\n}\n\nexport const setDataSessionStorage = (key: string, data: any) => {\n sessionStorage.setItem(key, JSON.stringify(data));\n};\n\nexport const getSessionStorageData = (key: string) => {\n const val = sessionStorage.getItem(key);\n return val ? JSON.parse(val) : null;\n};\n","import { useLayoutEffect, useRef } from \"react\";\nimport SearchBar from \"../SearchBar\";\nimport Loader from \"../Loader\";\n\nimport useAssistTicket from \"../../../hooks/useAssistTickets\";\nimport { useSdkContext } from \"../../../hooks/useSdkContext\";\n\nimport { formatDateAndTime, setDataSessionStorage } from \"../../../utils\";\n\nconst ChatHistory = () => {\n const scrollContainerRef = useRef<HTMLDivElement | null>(null);\n const lastFetchedOffsetRef = useRef<number | null>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n const {\n ticketData,\n loading,\n getNextPageTicketData,\n isLoadingMore,\n setSearchText,\n } = useAssistTicket();\n const { setIsChatScreen, profileInfo } = useSdkContext();\n\n useLayoutEffect(() => {\n const el = scrollContainerRef.current;\n if (!el) return;\n }, [ticketData.length]);\n\n const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {\n const el = e.currentTarget;\n searchInputRef.current?.blur();\n if (el.scrollHeight <= el.clientHeight) return;\n const scrollBottom = el.scrollHeight - el.scrollTop - el.clientHeight;\n const offset = ticketData.length;\n\n if (lastFetchedOffsetRef.current === offset) return;\n\n if (scrollBottom <= 20 && !loading) {\n lastFetchedOffsetRef.current = offset;\n getNextPageTicketData(offset);\n }\n };\n\n const ticketBtnClickHandler = (ticket_id: number) => {\n setDataSessionStorage(\"userAndTicket\", {\n ticket_id: ticket_id,\n employee_id: profileInfo?.employee_id,\n });\n setIsChatScreen((prev) => !prev);\n };\n\n const handleKeyDown = (e: React.ChangeEvent<HTMLInputElement>) => {\n e.preventDefault();\n const value = searchInputRef.current?.value?.trim();\n setSearchText(value ?? null);\n };\n\n return (\n <div className=\"mhb-flex mhb-flex-col mhb-h-full mhb-min-h-0\">\n <div className=\"mhb-searchbarContainer mhb-flex mhb-flex-col mhb-border-b mhb-border-neutral-20\">\n <SearchBar ref={searchInputRef} onChangeHandler={handleKeyDown} />\n </div>\n <div\n ref={scrollContainerRef}\n onScroll={handleScroll}\n className=\"mhb-history-main-container mhb-no-scrollbar mhb-py-3 mhb-flex mhb-flex-col mhb-gap-1 mhb-overflow-y-auto mhb-flex-1 mhb-min-h-0\"\n >\n {loading ? (\n <Loader />\n ) : (\n <>\n {ticketData.map((item) => (\n <button\n type=\"button\"\n key={item.ticket_id}\n className=\"mhb-btn-reset mhb-history-container mhb-p-3 mhb-flex mhb-flex-col mhb-rounded-[12px] mhb-bg-neutral-10 mhb-gap-2 mhb-items-start\"\n onClick={() => ticketBtnClickHandler(item.ticket_id)}\n >\n <div className=\"mhb-flex mhb-items-start\">\n <p className=\"mhb-typography-para-thick-30 mhb-text-neutral-110 mhb-m-0 mhb-min-w-0 mhb-break-words mhb-whitespace-normal mhb-text-left\">\n {item.title}\n </p>\n </div>\n\n <p className=\"mhb-typography-para-30 mhb-text-neutral-60 mhb-m-0\">\n {formatDateAndTime(item.created_at)}\n </p>\n </button>\n ))}\n {isLoadingMore && <Loader />}\n </>\n )}\n </div>\n </div>\n );\n};\n\nexport default ChatHistory;\n","import { AssistLogo, Menu, MenuOpen } from \"../../../assets/icons\";\n\ninterface HeaderProps {\n isChatScreen: boolean;\n setIsChatScreen: React.Dispatch<React.SetStateAction<boolean>>;\n}\n\nconst Header = ({ isChatScreen, setIsChatScreen }: HeaderProps) => {\n const menuPressHandler = () => {\n setIsChatScreen((prev: boolean) => !prev);\n };\n const newChatPressHandler = () => {\n sessionStorage.removeItem(\"userAndTicket\");\n setIsChatScreen((prev: boolean) => !prev);\n };\n return (\n <div className=\"mhb-header mhb-border-b mhb-border-neutral-20 mhb-flex mhb-items-center mhb-justify-between\">\n <AssistLogo className=\"h-[36px] w-[36px] fill-current\" />\n\n <div className=\"mhb-flex mhb-gap-2 mhb-items-center\">\n {!isChatScreen ? (\n <button\n type=\"button\"\n onClick={newChatPressHandler}\n className=\"mhb-btn-reset mhb-p-3 mhb-bg-neutral-10 mhb-typography-para-thick-30 mhb-rounded-[9999px]\"\n >\n new chat\n </button>\n ) : (\n <div className=\"mhb-btn-reset mhb-p-3 mhb-invisible mhb-typography-para-thick-30\">\n new chat\n </div>\n )}\n <button\n type=\"button\"\n className=\"mhb-btn-reset mhb-h-[36px] mhb-w-[36px] mhb-flex mhb-items-center mhb-justify-center mhb-rounded-full mhb-bg-neutral-10\"\n onClick={menuPressHandler}\n >\n {isChatScreen ? (\n <Menu className=\"mhb-h-[16px] mhb-w-[16px] fill-current\" />\n ) : (\n <MenuOpen className=\"mhb-h-[16px] mhb-w-[16px]\" />\n )}\n </button>\n </div>\n </div>\n );\n};\n\nexport default Header;\n","export const Assist_Chat = `\nmutation AssistChat(\n $message: String!\n $ticket_id: Int\n $handover: Boolean\n $attachments: [String]\n) {\n assistChat(\n data: {\n ticket_id: $ticket_id,\n handover: $handover,\n message: $message,\n attachments: $attachments\n }\n ) {\n message_id\n text\n attachments {\n filename\n url\n }\n created_at\n ticket_id\n handover\n end\n user{\n user_name\n user_type\n }\n }\n}\n`;\n\nexport const PRESIGNED_URL = `\n mutation GetPresignedLink(\n $files: [String!]!\n $signature_type: String!\n ) {\n GetPresignedLink(data: { files: $files, signature_type: $signature_type }){\n filename\n url\n }\n }`;\n","export const ON_ASSIST_CHAT = `subscription onAssistChat($ticket_id: Int!) {\n onAssistChat(ticket_id: $ticket_id) {\n message_id\n text\n attachments {\n filename\n url\n }\n created_at\n ticket_id\n handover\n end\n user{\n user_name\n user_type\n }\n }\n }`;\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useSdkContext } from \"./useSdkContext\";\nimport { mutation, query, subscribe } from \"../api\";\nimport { ASSIST_HISTORY } from \"../graphql/query\";\nimport { Assist_Chat, PRESIGNED_URL } from \"../graphql/mutation\";\nimport { ON_ASSIST_CHAT } from \"../graphql/subscriptions\";\nimport { getSessionStorageData, setDataSessionStorage } from \"../utils\";\nimport type { Message } from \"../types\";\n\nconst PAGE_LIMIT = 10;\n\ntype AssitHistoryResponse = {\n assistHistory?: Message[];\n};\n\ntype AssitChatResponse = {\n assistChat: Message;\n};\n\ntype onAssistChatResponse = {\n onAssistChat: Message;\n};\n\ntype fileObjVariable = {\n files: File[];\n signature_type: string;\n ticketId: number;\n};\n\nconst useChatMessages = () => {\n const [historyData, setHistoryData] = useState<Message[]>([]);\n const [msgLoading, setMsgLoading] = useState(true);\n const [msgError, setMsgError] = useState(null);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const [isSending, setIsSending] = useState(false);\n const [hasMore, setHasMore] = useState(true);\n\n const { accessToken, profileInfo } = useSdkContext();\n\n const sessionTicket = getSessionStorageData(\"userAndTicket\")?.ticket_id;\n\n const employeeId = getSessionStorageData(\"userAndTicket\")?.employee_id;\n\n const historyTicket = useMemo(() => {\n return (\n historyData.find((itm: Message) => itm.ticket_id != null)?.ticket_id ??\n null\n );\n }, [historyData]);\n\n let ticketId = sessionTicket ?? historyTicket ?? null;\n\n // subscription for messages\n useEffect(() => {\n if (!ticketId) return;\n if (!profileInfo) return;\n if (employeeId && profileInfo?.employee_id != employeeId) {\n sessionStorage.removeItem(\"userAndTicket\");\n return;\n }\n\n const unsubscribe = subscribe(\n ON_ASSIST_CHAT,\n { ticket_id: ticketId },\n (data) => {\n const subsData = data as onAssistChatResponse;\n if (subsData?.onAssistChat?.user?.user_type === \"agent\") {\n setHistoryData((prev: Message[]) => [...prev, subsData.onAssistChat]);\n }\n }\n );\n\n return () => unsubscribe();\n }, [ticketId, profileInfo]);\n\n // initial history load\n useEffect(() => {\n if (!accessToken) return;\n if (!profileInfo) return;\n if (employeeId && profileInfo?.employee_id !== employeeId) {\n sessionStorage.removeItem(\"userAndTicket\");\n ticketId = null;\n }\n const obj = {\n ...(ticketId && { ticket_id: ticketId }),\n limit: PAGE_LIMIT,\n };\n query(ASSIST_HISTORY, obj, accessToken)\n .then(async (resp) => {\n const data = resp as AssitHistoryResponse;\n setHistoryData(data?.assistHistory ?? []);\n })\n .catch((err) => {\n setMsgError(err);\n })\n .finally(() => {\n setMsgLoading(false);\n });\n }, [profileInfo]);\n\n // load older messages\n const getNextPageData = (offset: number) => {\n if (!accessToken) return;\n if (isLoadingMore) return;\n const sessionTicket = getSessionStorageData(\"userAndTicket\")?.ticket_id;\n const obj = {\n ...(sessionTicket && { ticket_id: sessionTicket }),\n limit: PAGE_LIMIT,\n offset,\n };\n setIsLoadingMore(true);\n query(ASSIST_HISTORY, obj, accessToken)\n .then(async (resp) => {\n const data = resp as AssitHistoryResponse;\n const newItems = data?.assistHistory ?? [];\n setHistoryData((prev: Message[]) => [...newItems, ...prev]);\n if (newItems.length < PAGE_LIMIT) {\n setHasMore(false);\n }\n })\n .catch((err) => {\n setMsgError(err);\n })\n .finally(() => {\n setIsLoadingMore(false);\n });\n };\n\n // send message\n const sendMessage = (text: string) => {\n const getTicketId =\n historyData.find((itm: Message) => itm.ticket_id != null)?.ticket_id ??\n null;\n const getHandover =\n historyData.find((itm: Message) => itm.handover == true)?.handover ??\n false;\n const sendMessageObj = {\n ...(getTicketId && { ticket_id: getTicketId }),\n message: text,\n handover: getHandover,\n attachments: [],\n text: text,\n message_id: Math.random(),\n created_at: new Date().toISOString(),\n user: {\n user_name: profileInfo?.full_name,\n user_type: \"employee\",\n },\n };\n setIsSending(true);\n setHistoryData((prev: Message[]) => [...prev, sendMessageObj]);\n\n mutation(Assist_Chat, sendMessageObj, accessToken)\n .then(async (resp) => {\n const data = resp as AssitChatResponse;\n if (data.assistChat.user.user_type !== \"employee\") {\n setHistoryData((prev: Message[]) => [...prev, data.assistChat]);\n }\n if (\n !getSessionStorageData(\"userAndTicket\") &&\n data.assistChat?.ticket_id &&\n profileInfo\n ) {\n setDataSessionStorage(\"userAndTicket\", {\n ticket_id: data.assistChat?.ticket_id,\n employee_id: profileInfo.employee_id,\n });\n }\n })\n .catch(() => setHistoryData((prev) => prev.slice(0, -1)))\n .finally(() => setIsSending(false));\n };\n\n // upload attachment\n const upload = async (fileObj: fileObjVariable) => {\n setIsSending(true);\n const uploadObj = {\n files: fileObj.files.map(\n (file: File) => `${fileObj.ticketId}/${file.name}`\n ),\n signature_type: fileObj.signature_type,\n };\n try {\n const presignedResp: any = await mutation(\n PRESIGNED_URL,\n uploadObj,\n accessToken\n );\n for (const [index, file] of fileObj.files.entries()) {\n const url = presignedResp.GetPresignedLink[index]?.url;\n if (url) {\n await fetch(url, {\n method: \"PUT\",\n body: file,\n headers: { \"Content-Type\": file.type },\n });\n }\n }\n\n const getHandover =\n historyData.find((itm: Message) => itm.handover)?.handover ?? false;\n const attachments = fileObj.files.map((file: File) => ({\n url: URL.createObjectURL(file),\n filename: file.name,\n }));\n\n const optimisticMsg: Message = {\n ticket_id: fileObj.ticketId,\n handover: getHandover,\n attachments,\n text: \"\",\n message_id: Math.random(),\n created_at: new Date().toISOString(),\n user: { user_name: profileInfo?.full_name, user_type: \"employee\" },\n };\n setHistoryData((prev) => [...prev, optimisticMsg]);\n const sendMessageObj = {\n ticket_id: fileObj.ticketId,\n handover: getHandover,\n attachments: fileObj.files.map(\n (a: File) => `${fileObj.ticketId}/${a.name}`\n ),\n message: \"\",\n text: \"\",\n message_id: Math.random(),\n created_at: new Date().toISOString(),\n user: { user_name: profileInfo?.full_name, user_type: \"employee\" },\n };\n const resp = await mutation(Assist_Chat, sendMessageObj, accessToken);\n const data = resp as AssitChatResponse;\n\n if (data.assistChat.user.user_type !== \"employee\") {\n setHistoryData((prev) => [...prev, data.assistChat]);\n }\n if (\n !getSessionStorageData(\"userAndTicket\") &&\n data.assistChat?.ticket_id &&\n profileInfo\n ) {\n setDataSessionStorage(\"userAndTicket\", {\n ticket_id: data.assistChat.ticket_id,\n employee_id: profileInfo.employee_id,\n });\n }\n } catch (err) {\n setHistoryData((prev) => prev.slice(0, -1));\n } finally {\n setIsSending(false);\n }\n };\n\n return {\n historyData,\n msgLoading,\n msgError,\n isSending,\n sendMessage,\n getNextPageData,\n isLoadingMore,\n upload,\n hasMore,\n };\n};\n\nexport default useChatMessages;\n","const Toast = ({ toastMsg }: { toastMsg: string }) => {\n return (\n <div\n id=\"toast-simple\"\n className=\"mhb-border-red-60 mhb-fixed mhb-bottom-6 mhb-right-6 mhb-z-50 mhb-flex mhb-max-w-xs mhb-items-center mhb-space-x-4 mhb-divide-x mhb-divide-gray-200 mhb-rounded-lg mhb-border mhb-bg-white mhb-p-4 mhb-text-gray-700 mhb-shadow-lg dark:mhb-divide-gray-700 dark:mhb-border-gray-600 dark:mhb-bg-gray-800 dark:mhb-text-gray-300\"\n role=\"alert\"\n >\n <svg\n className=\"mhb-text-red-60 mhb-h-3 mhb-w-3\"\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 14 14\"\n >\n <path stroke=\"currentColor\" d=\"m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6\" />\n </svg>\n <div className=\"mhb-text-red-60 mhb-typography-label-thick-30 mhb-ps-4\">\n {toastMsg}\n </div>\n </div>\n );\n};\n\nexport default Toast;\n","import React, { useState } from \"react\";\nimport type { Message } from \"../../../types\";\n\ninterface Props {\n url: string | undefined;\n isFirstInGroup: boolean | null;\n msg: Message;\n fileType: string;\n}\n\nconst Attachment: React.FC<Props> = React.memo(\n ({ url, msg, isFirstInGroup, fileType }) => {\n const [isViewerOpen, setIsViewerOpen] = useState(false);\n\n const downloadPDF = async () => {\n const file = msg.attachments[0];\n const response = await fetch(file.url);\n const blob = await response.blob();\n const blobUrl = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.href = blobUrl;\n link.download = file.filename || \"download.pdf\";\n link.click();\n URL.revokeObjectURL(blobUrl);\n };\n\n return (\n <>\n {(fileType === \"jpg\" || fileType === \"jpeg\" || fileType === \"png\") && (\n <div className=\"mhb-flex\">\n <div\n className={`mhb-rounded-[16px] mhb-bg-white ${\n msg?.user?.user_type === \"customer\"\n ? \"mhb-ml-auto\"\n : \"mhb-mr-auto\"\n } ${\n isFirstInGroup\n ? msg?.user?.user_type === \"customer\"\n ? \"mhb-rounded-tr-[4px]\"\n : \"mhb-rounded-tl-[4px]\"\n : \"\"\n }`}\n >\n <div className=\"mhb-overflow-x-auto mhb-rounded-[16px] mhb-bg-neutral-10 mhb-px-1 mhb-py-1\">\n <div className=\"mhb-flex mhb-w-fit mhb-space-x-1\">\n <div className=\"mhb-h-[44px] mhb-w-[44px] mhb-flex-shrink-0 mhb-rounded-[12px] mhb-bg-white\">\n <img\n src={url}\n alt=\"Attachment\"\n className=\"mhb-h-[44px] mhb-w-[44px] mhb-rounded-[12px] mhb-object-cover\"\n onClick={() => setIsViewerOpen(true)}\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {fileType === \"pdf\" && (\n <button\n className=\"mhb-flex mhb-w-full mhb-items-center mhb-justify-between mhb-gap-3 mhb-rounded-[20px] mhb-mhb-border mhb-border-neutral-10 mhb-bg-white p-3 focus:mhb-outline-none\"\n onClick={() => downloadPDF()}\n >\n <div className=\"mhb-relative mhb-flex mhb-h-[36px] mhb-w-[36px] mhb-items-center mhb-justify-center mhb-rounded-[8px] mhb-bg-neutral-20\">\n {/* <div className=\"mhb-relative mhb-z-0 mhb-h-6 mhb-w-6\">\n <Image\n src=\"/icons/file_color.svg\"\n alt=\"pdf_attachment\"\n fill\n className=\"object-contain\"\n />\n </div> */}\n <p className=\"mhb-absolute mhb-text-white mhb-typography-para-40\">\n pdf\n </p>\n </div>\n <p className=\"mhb-max-w-[50px] mhb-overflow-hidden mhb-text-ellipsis mhb-whitespace-nowrap mhb-text-neutral-110 mhb-typography-para-thick-30\">\n {msg.attachments[0].filename.split(/[/_]/).pop()}\n </p>\n\n {/* <Icon name=\"download\" className=\"mb-1 h-4 w-4 fill-orange-60\" /> */}\n </button>\n )}\n\n {/* {isViewerOpen && fileType !== \"pdf\" && (\n <div\n className=\"mhb-fixed mhb-inset-0 mhb-z-50 mhb-flex mhb-items-center mhb-justify-center mhb-bg-black/80\"\n onClick={() => setIsViewerOpen(false)}\n >\n <div\n className=\"mhb-relative mhb-max-h-[200px] mhb-max-w-[200px] mhb-overflow-y-auto mhb-p-4\"\n onClick={(e) => e.stopPropagation()}\n >\n <img\n src={url}\n alt=\"Full size preview\"\n className=\"mhb-h-[150px] mhb-w-[150px] mhb-rounded-[12px] mhb-object-contain\"\n onClick={() => setIsViewerOpen(true)}\n />\n </div>\n </div>\n )} */}\n </>\n );\n },\n (prev, next) =>\n prev.url === next.url &&\n prev.isFirstInGroup === next.isFirstInGroup &&\n prev.msg.user?.user_type === next.msg.user?.user_type &&\n prev.fileType === next.fileType\n);\n\nexport default Attachment;\n","import { useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { Avatar } from \"more-sso-sdk\";\nimport useChatMessages from \"../../../hooks/useChatMessages\";\n\nimport { Attach_file, MoreAILogo, MoreAISparkle } from \"../../../assets/icons\";\nimport { formatTime } from \"../../../utils\";\nimport type { Message } from \"../../../types\";\nimport Toast from \"../Toast\";\nimport Attachment from \"../Attachment\";\nimport Loader from \"../Loader\";\n\nconst ALLOWED_TYPES = [\n \"image/jpeg\",\n \"image/jpg\",\n \"image/png\",\n \"application/pdf\",\n];\n\nconst Chat = () => {\n const [toastErr, setToastErr] = useState<string | null>(\"\");\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const inputChatRef = useRef<HTMLTextAreaElement>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const prevScrollHeightRef = useRef(0);\n const prevScrollTopRef = useRef(0);\n const isPrependingRef = useRef(false);\n\n const {\n historyData,\n sendMessage,\n getNextPageData,\n isLoadingMore,\n isSending,\n upload,\n msgLoading,\n hasMore,\n } = useChatMessages();\n\n useLayoutEffect(() => {\n const el = scrollContainerRef.current;\n if (!el) return;\n if (isPrependingRef.current) {\n const prevHeight = prevScrollHeightRef.current;\n const prevTop = prevScrollTopRef.current;\n const newHeight = el.scrollHeight;\n const diff = newHeight - prevHeight;\n el.scrollTop = prevTop + diff;\n isPrependingRef.current = false;\n } else {\n el.scrollTop = el.scrollHeight;\n }\n }, [historyData?.length]);\n\n const sendMessageHandler = () => {\n const value = inputChatRef.current?.value?.trim();\n if (!hasMore) isPrependingRef.current = false;\n if (!value) return;\n sendMessage(value);\n if (inputChatRef.current) {\n inputChatRef.current.value = \"\";\n }\n };\n\n const onKeyDownHandler = (e: React.KeyboardEvent) => {\n if (isSending) return;\n if (e.key === \"Enter\") {\n e.preventDefault();\n sendMessageHandler();\n }\n };\n\n const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {\n const el = e.currentTarget;\n const isScrollable = el.scrollHeight > el.clientHeight;\n if (!isScrollable) return;\n if (el.scrollTop <= 20 && !isLoadingMore) {\n const offset = historyData.length;\n prevScrollHeightRef.current = el.scrollHeight;\n prevScrollTopRef.current = el.scrollTop;\n isPrependingRef.current = true;\n getNextPageData(offset);\n }\n };\n\n const onFileChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(event.target.files || []);\n const validFiles = files.filter((file) =>\n ALLOWED_TYPES.includes(file.type)\n );\n const invalidFiles = files.filter(\n (file) => !ALLOWED_TYPES.includes(file.type)\n );\n\n if (invalidFiles.length > 0) {\n setToastErr(\n \"Only JPG, PNG, and PDF files are allowed. Other files like videos are not supported.\"\n );\n setTimeout(() => setToastErr(null), 3000);\n event.target.value = \"\";\n return;\n }\n\n const ticketId = historyData[historyData?.length - 1]?.ticket_id;\n if (validFiles.length > 0 && ticketId) {\n upload({\n files: validFiles,\n signature_type: \"upload\",\n ticketId: ticketId,\n });\n }\n };\n\n const handleFileClickHandler = () => {\n fileInputRef.current?.click();\n };\n\n const isAttachment = useMemo(() => {\n return historyData?.some((itm: Message) => itm.handover == true);\n }, [historyData]);\n\n console.log(historyData, \"historyData\");\n\n return (\n <div className=\"mhb-flex mhb-h-full mhb-flex-col mhb-overflow-hidden mhb-bg-white\">\n <>\n {msgLoading ? (\n <div className=\"mhb-py-3\">\n <Loader />\n </div>\n ) : (\n <>\n <div\n ref={scrollContainerRef}\n className=\"mhb-flex-grow mhb-overflow-y-auto mhb-py-3 [&>*]:[mhb-overflow-anchor:none]\"\n onScroll={handleScroll}\n >\n <div className=\"mhb-flex mhb-min-h-full mhb-flex-col mhb-justify-end mhb-gap-1\">\n {historyData?.map((item: Message, index) => {\n const isFirstInGroup =\n (\"user\" in item && index === 0) ||\n historyData[index - 1]?.user?.user_type !==\n item?.user?.user_type;\n const currentDate = new Date(item.created_at ?? \"\");\n const prevDate =\n index > 0\n ? new Date(historyData[index - 1].created_at ?? \"\")\n : null;\n\n const isFirstMessageOfDay =\n !prevDate ||\n currentDate.getDate() !== prevDate.getDate() ||\n currentDate.getMonth() !== prevDate.getMonth() ||\n currentDate.getFullYear() !== prevDate.getFullYear();\n\n const isGapMoreThan2Minutes =\n prevDate &&\n currentDate.getTime() - prevDate.getTime() > 2 * 60 * 1000;\n\n const shouldShowUserLabel =\n item.hasOwnProperty(\"user\") &&\n (isFirstInGroup ||\n isFirstMessageOfDay ||\n isGapMoreThan2Minutes);\n\n const hasImage = item?.attachments?.some((att) => {\n const ext = att.filename\n .match(/\\.([a-zA-Z0-9]+)(?:\\?|$)/)?.[1]\n ?.toLowerCase();\n return [\"jpg\", \"jpeg\", \"png\"].includes(ext || \"\");\n });\n return (\n <div\n key={item.message_id}\n className={`mhb-flex ${\n item.user.user_type === \"bot\" ||\n item.user.user_type === \"agent\"\n ? \"mhb-justify-start\"\n : \"mhb-justify-end\"\n }`}\n >\n <div className=\"mhb-max-w-[75%\">\n {shouldShowUserLabel && (\n <div\n className={`mhb-mb-1 mhb-flex mhb-items-center ${\n item.user.user_type === \"bot\" ||\n item.user.user_type === \"agent\"\n ? \"mhb-justify-start\"\n : \"mhb-justify-end\"\n }`}\n >\n {item.user.user_type === \"bot\" ? (\n <div className=\"mhb-flex mhb-gap-2 mhb-items-center\">\n <div className=\"mhb-flex mhb-items-center mhb-gap-1\">\n <MoreAISparkle />\n <div className=\"mhb-mb-1\">\n <MoreAILogo />\n </div>\n </div>\n\n <div className=\"mhb-flex mhb-gap-1 mhb-mt-[2px] mhb-items-center\">\n <div className=\"mhb-h-[2px] mhb-w-[2px] mhb-rounded-full mhb-bg-neutral-60\" />\n <p className=\"mhb-typography-para-40 mhb-text-neutral-60\">\n {formatTime(item.created_at)}\n </p>\n </div>\n </div>\n ) : item.user.user_type === \"employee\" ? (\n <div className=\"mhb-flex mhb-gap-2 mhb-items-center\">\n <div className=\"mhb-flex mhb-gap-1\">\n <p className=\"mhb-typography-para-40 mhb-text-neutral-60\">\n {formatTime(item.created_at)}\n </p>\n <div className=\"mhb-h-[2px] mhb-w-[2px] mhb-rounded-full mhb-bg-neutral-60 mhb-flex mhb-self-center\" />\n </div>\n <Avatar\n name={item?.user?.user_name || \"\"}\n employeeId={\"\"}\n className=\"mhb-size-4 mhb-shrink-0 mhb-rounded-full mhb-select-none\"\n />\n </div>\n ) : item.user.user_type === \"agent\" ? (\n <div className=\"mhb-flex mhb-gap-2 mhb-items-center\">\n <Avatar\n name={item?.user?.user_name || \"\"}\n employeeId={\"\"}\n className=\"mhb-size-4 mhb-shrink-0 mhb-rounded-full mhb-select-none\"\n />\n <div className=\"mhb-flex mhb-gap-1 mhb-mt-1 mhb-items-center\">\n <div className=\"mhb-h-[2px] mhb-w-[2px] mhb-rounded-full mhb-bg-neutral-60\" />\n <p className=\"mhb-typography-para-40 mhb-text-neutral-60\">\n {formatTime(item.created_at)}\n </p>\n </div>\n </div>\n ) : null}\n </div>\n )}\n <div className=\"mhb-flex mhb-overflow-hidden mhb-min-w-0\">\n {Array.isArray(item?.attachments) &&\n item?.attachments?.length > 0 ? (\n <div\n className={`mhb-p-1 mhb-rounded-[16px] ${\n item.user.user_type === \"bot\" ||\n item.user.user_type === \"agent\"\n ? `mhb-bg-orange-60 ${\n shouldShowUserLabel\n ? \"mhb-rounded-tl-[4px]\"\n : \"mhb-rounded-[20px]\"\n }`\n : `mhb-bg-neutral-10 ${\n shouldShowUserLabel\n ? \"mhb-rounded-tr-[4px]\"\n : \"mhb-rounded-[20px]\"\n }`\n } ${\n hasImage\n ? \"mhb-overflow-x-auto mhb-flex\"\n : \"mhb-flex mhb-flex-col mhb-gap-1\"\n }`}\n >\n {item.attachments.map((itm, index) => (\n <div key={index}>\n <Attachment\n url={itm.url}\n msg={item}\n isFirstInGroup={false}\n fileType={\n itm?.filename\n .match(/\\.([a-zA-Z0-9]+)(?:\\?|$)/)?.[1]\n ?.toLowerCase() || \"\"\n }\n />\n </div>\n ))}\n </div>\n ) : (\n <p\n className={`mhb-whitespace-pre-line mhb-break-words mhb-rounded-[16px] mhb-p-3\n mhb-typography-para-30 ${\n item.user.user_type === \"bot\" ||\n item.user.user_type === \"agent\"\n ? `mhb-bg-orange-60 mhb-text-white ${\n shouldShowUserLabel\n ? \"mhb-rounded-tl-[4px]\"\n : \"mhb-rounded-[20px]\"\n } `\n : `mhb-bg-neutral-10 mhb-text-neutral-110 mhb-ml-auto ${\n shouldShowUserLabel\n ? \"mhb-rounded-tr-[4px]\"\n : \"mhb-rounded-[20px]\"\n } `\n } \n `}\n >\n {item?.text}\n </p>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n\n <div className=\"mhb-chat-input-container mhb-sticky mhb-bottom-0 mhb-bg-white mhb-py-3 mhb-flex mhb-items-center mhb-gap-2\">\n <div className=\"mhb-bg-neutral-10 mhb-flex mhb-h-[80px] mhb-flex-1 mhb-rounded-xl mhb-p-3\">\n <div className=\"mhb-flex mhb-flex-1\">\n <textarea\n ref={inputChatRef}\n placeholder=\"Type your message here...\"\n className=\"mhb-btn-reset mhb-textarea mhb-flex-grow mhb-text-neutral-70 mhb-caret-orange-70 mhb-typography-para-30 mhb-bg-transparent mhb-resize-none placeholder:mhb-text-neutral-40\"\n onKeyDown={onKeyDownHandler}\n />\n </div>\n\n <div className=\"mhb-flex mhb-gap-1 mhb-justify-end mhb-items-end\">\n {isAttachment && (\n <button\n type=\"button\"\n className=\"mhb-btn-reset mhb-h-[36px] mhb-w-[36px] mhb-rounded-full mhb-bg-neutral-100 mhb-flex mhb-items-center mhb-justify-center mhb-outline-none\"\n disabled={isSending}\n onClick={handleFileClickHandler}\n >\n <Attach_file className=\"h-[16px] w-[16px] mhb-fill-current\" />\n <input\n type=\"file\"\n accept=\".jpg,.jpeg,.png,.pdf\"\n ref={fileInputRef}\n onChange={onFileChange}\n className=\"hidden\"\n />\n </button>\n )}\n\n <button\n type=\"button\"\n className=\"mhb-btn-reset mhb-h-[36px] mhb-rounded-[9999px] mhb-bg-orange-60 mhb-flex mhb-p-3 mhb-items-center mhb-justify-center mhb-shadow-[0_4px_12px_0_rgba(250,75,22,0.50)] mhb-outline-none\"\n disabled={isSending}\n onClick={sendMessageHandler}\n >\n <p className=\"mhb-typography-label-thick-30 mhb-text-white\">\n Send\n </p>\n </button>\n </div>\n </div>\n </div>\n </>\n )}\n </>\n {toastErr && <Toast toastMsg={toastErr} />}\n </div>\n );\n};\n\nexport default Chat;\n","import { useEffect } from \"react\";\nimport { useSdkContext } from \"../../hooks/useSdkContext\";\nimport Popover from \"./Popover\";\n\nimport ChatHistory from \"./ChatHistory\";\nimport Header from \"./Header\";\nimport Chat from \"./Chat\";\nimport { SSOAuthorization } from \"more-sso-sdk\";\n\ninterface ChatButtonProps {\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n align?: \"start\" | \"center\" | \"end\";\n}\n\nexport default function SDKRoot({\n side = \"top\",\n align = \"end\",\n}: ChatButtonProps) {\n const {\n authorized,\n isChatScreen,\n setIsChatScreen,\n accessToken,\n setProfileInfo,\n } = useSdkContext();\n\n const getProfileInfo = async () => {\n const profileInfo = await SSOAuthorization.getProfileDetails();\n setProfileInfo(profileInfo);\n };\n useEffect(() => {\n if (accessToken) {\n getProfileInfo();\n }\n }, []);\n\n return (\n <div className=\"mhb-root\">\n <Popover side={side} align={align}>\n <div className=\"mhb-h-full mhb-w-full mhb-flex mhb-flex-col mhb-min-h-0\">\n <Header\n isChatScreen={isChatScreen}\n setIsChatScreen={setIsChatScreen}\n />\n {/* {authorized ? <Chat /> : <div>Please provide valid credentials</div>} */}\n {isChatScreen ? <Chat /> : <ChatHistory />}\n </div>\n </Popover>\n </div>\n );\n}\n","import { InitOptions } from \"../types\";\n\nexport function validateSdk(options: InitOptions) {\n const { apiKey, accessToken } = options;\n\n if (!apiKey || !accessToken) {\n throw new Error(\"Missing parameters: apiKey, and accessToken are required\");\n }\n}\n","import { useEffect, useState } from \"react\";\nimport { SSOAuthorization } from \"more-sso-sdk\";\nimport SDKRoot from \"./components/SDKRoot\";\nimport { validateSdk } from \"../core/validate\";\nimport { SDKProvider } from \"../context/SDKContext\";\nimport { initChatbot } from \"../api\";\n\nimport type { InitOptions, PopOverProps } from \"../types\";\n\nlet sdkOptions: InitOptions | null = null;\nlet initialized = false;\nlet listeners: (() => void)[] = [];\n\nfunction notify() {\n for (const l of listeners) l();\n}\n\nexport function init(options: InitOptions) {\n if (initialized) {\n return;\n }\n validateSdk(options);\n SSOAuthorization.init({\n env: options.env,\n redirectUrl: options.redirectUrl,\n app: options.app,\n idp: options.idp,\n });\n sdkOptions = options;\n initialized = true;\n notify();\n initChatbot({ apiKey: options.apiKey, apiURL: options.apiURL });\n}\n\nexport function ChatButton(props: PopOverProps) {\n const [state, setState] = useState<{\n initialized: boolean;\n sdkOptions: InitOptions | null;\n }>({\n initialized,\n sdkOptions,\n });\n\n useEffect(() => {\n const cb = () => {\n setState({ initialized, sdkOptions });\n };\n listeners.push(cb);\n return () => {\n listeners = listeners.filter((l) => l !== cb);\n };\n }, []);\n\n if (!state.initialized || !state.sdkOptions) {\n return null;\n }\n\n return (\n <SDKProvider\n appName={state.sdkOptions.app}\n apiKey={state.sdkOptions.apiKey}\n token={state.sdkOptions.accessToken}\n >\n <SDKRoot {...props} />\n </SDKProvider>\n );\n}\n"],"names":["tokenUpdateListener","registerTokenListener","listener","notifyTokenUpdate","token","SDKContext","createContext","SDKProvider","children","appName","apiKey","authorized","setAuthorized","useState","accessToken","setAccessToken","isChatScreen","setIsChatScreen","profileInfo","setProfileInfo","useEffect","jsx","useSdkContext","context","useContext","SvgAssistLogo","props","React","SvgMenuOpen","SvgSearch","SvgHeadsetMic","SvgMenu","SvgAttachFile","SvgMoreAiLogo","SvgMoreAiSparkle","Popover","side","align","micClickHandler","jsxs","RadixPopover","Headset_mic","SearchBar","forwardedRef","onChangeHandler","Search","ForwardedSearchBar","forwardRef","Loader","ws","reconnectAttempts","isManuallyClosed","subscriptionIdCounter","subscriptions","isConnectionAcked","graphqlEndpoint","subscriptionEndpoint","failedQueue","isRefreshing","openWebsocket","apiHeader","payload","base64ApiHeader","base64Payload","appsyncUrl","connect","data","id","delay","processQueue","error","resolve","reject","enqueueFailedRequest","createChatbotClient","apiURLS","executeGraphql","operation","variables","result","errors","shouldRefresh","err","msg","newToken","refreshResult","SSOAuthorization","currentUrl","encodedRedirect","e","subscription","callback","message","chatbotClient","initChatbot","urls","query","gqlQuery","mutation","gqlMutation","subscribe","gqlSubscription","ASSIST_HISTORY","EMPLOYEEE_ASSIST_TICKET","LIMIT","useAssistTicket","ticketData","setTicketData","loading","setLoading","setError","isLoadingMore","setIsLoadingMore","searchText","setSearchText","isFirstRender","useRef","getEmployeeTickets","resp","timer","offset","EmployeeAssistTickets","prev","formatTime","ts","formatDateAndTime","iso","timeZone","locale","d","parts","day","p","month","year","time","setDataSessionStorage","key","getSessionStorageData","val","ChatHistory","scrollContainerRef","lastFetchedOffsetRef","searchInputRef","getNextPageTicketData","useLayoutEffect","handleScroll","el","scrollBottom","ticketBtnClickHandler","ticket_id","value","Fragment","item","Header","AssistLogo","Menu","MenuOpen","Assist_Chat","PRESIGNED_URL","ON_ASSIST_CHAT","PAGE_LIMIT","useChatMessages","historyData","setHistoryData","msgLoading","setMsgLoading","msgError","setMsgError","isSending","setIsSending","hasMore","setHasMore","sessionTicket","employeeId","historyTicket","useMemo","itm","ticketId","unsubscribe","subsData","obj","text","getTicketId","getHandover","sendMessageObj","newItems","fileObj","uploadObj","file","presignedResp","index","url","attachments","optimisticMsg","a","Toast","toastMsg","Attachment","isFirstInGroup","fileType","isViewerOpen","setIsViewerOpen","downloadPDF","blob","blobUrl","link","next","ALLOWED_TYPES","Chat","toastErr","setToastErr","inputChatRef","fileInputRef","prevScrollHeightRef","prevScrollTopRef","isPrependingRef","sendMessage","getNextPageData","upload","prevHeight","prevTop","diff","sendMessageHandler","onKeyDownHandler","onFileChange","event","files","validFiles","handleFileClickHandler","isAttachment","currentDate","prevDate","isFirstMessageOfDay","isGapMoreThan2Minutes","shouldShowUserLabel","hasImage","att","ext","MoreAISparkle","MoreAILogo","Avatar","Attach_file","SDKRoot","getProfileInfo","validateSdk","options","sdkOptions","initialized","listeners","notify","l","init","ChatButton","state","setState","cb"],"mappings":";;;;;AAAA,IAAIA,KAAwD;AAErD,SAASC,GAAsBC,GAAmC;AACvE,EAAAF,KAAsBE;AACxB;AAEO,SAASC,GAAkBC,GAAe;AAC/C,EAAAJ,KAAsBI,CAAK;AAC7B;ACJO,MAAMC,KAAaC,GAA2C,MAAS,GAEjEC,KAAc,CAAC;AAAA,EAC1B,UAAAC;AAAA,EACA,SAAAC;AAAA,EACA,QAAAC;AAAA,EACA,OAAAN;AACF,MAKM;AACJ,QAAM,CAACO,GAAYC,CAAa,IAAIC,EAAkB,CAAC,CAACT,CAAK,GACvD,CAACU,GAAaC,CAAc,IAAIF,EAAiBT,CAAK,GACtD,CAACY,GAAcC,CAAe,IAAIJ,EAAkB,EAAI,GACxD,CAACK,GAAaC,CAAc,IAAIN,EAAc,IAAI;AAExD,SAAAO,EAAU,MAAM;AACd,IAAAnB,GAAsBc,CAAc;AAAA,EACtC,GAAG,CAAA,CAAE,GAGH,gBAAAM;AAAA,IAAChB,GAAW;AAAA,IAAX;AAAA,MACC,OAAO;AAAA,QACL,SAAAI;AAAA,QACA,QAAAC;AAAA,QACA,aAAAI;AAAA,QACA,YAAAH;AAAA,QACA,eAAAC;AAAA,QACA,cAAAI;AAAA,QACA,iBAAAC;AAAA,QACA,aAAAC;AAAA,QACA,gBAAAC;AAAA,MAAA;AAAA,MAGD,UAAAX;AAAA,IAAA;AAAA,EAAA;AAGP,GCvCac,IAAgB,MAAuB;AAClD,QAAMC,IAAUC,GAAWnB,EAAU;AACrC,MAAI,CAACkB;AACH,UAAM,IAAI,MAAM,+CAA+C;AAEjE,SAAOA;AACT,GCTME,KAAgB,CAACC,MAA0B,gBAAAC,EAAM,cAAc,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,SAAS,aAAa,MAAM,QAAQ,OAAO,8BAA8B,GAAGD,EAAK,GAAoB,gBAAAC,EAAM,cAAc,QAAQ,EAAE,GAAG,qYAAqY,MAAM,UAAS,CAAE,GAAmB,gBAAAA,EAAM,cAAc,QAAQ,EAAE,GAAG,yxBAAyxB,MAAM,UAAS,CAAE,CAAC,GCA19CC,KAAc,CAACF,MAA0B,gBAAAC,EAAM,cAAc,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,SAAS,aAAa,MAAM,QAAQ,OAAO,8BAA8B,GAAGD,EAAK,GAAoB,gBAAAC,EAAM,cAAc,QAAQ,EAAE,GAAG,oVAAoV,MAAM,UAAS,CAAE,CAAC,GCAzkBE,KAAY,CAACH,MAA0B,gBAAAC,EAAM,cAAc,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,SAAS,aAAa,MAAM,QAAQ,OAAO,8BAA8B,GAAGD,EAAK,GAAoB,gBAAAC,EAAM,cAAc,QAAQ,EAAE,GAAG,m5BAAm5B,MAAM,UAAS,CAAE,CAAC,GCAtoCG,KAAgB,CAACJ,MAA0B,gBAAAC,EAAM,cAAc,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,SAAS,aAAa,MAAM,QAAQ,OAAO,8BAA8B,GAAGD,EAAK,GAAoB,gBAAAC,EAAM,cAAc,QAAQ,EAAE,GAAG,qxBAAqxB,MAAM,UAAS,CAAE,CAAC,GCA5gCI,KAAU,CAACL,MAA0B,gBAAAC,EAAM,cAAc,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,SAAS,aAAa,MAAM,QAAQ,OAAO,8BAA8B,GAAGD,EAAK,GAAoB,gBAAAC,EAAM,cAAc,QAAQ,EAAE,GAAG,uJAAuJ,MAAM,UAAS,CAAE,CAAC,GCAxYK,KAAgB,CAACN,MAA0B,gBAAAC,EAAM,cAAc,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,SAAS,aAAa,MAAM,QAAQ,OAAO,8BAA8B,GAAGD,EAAK,GAAoB,gBAAAC,EAAM,cAAc,QAAQ,EAAE,GAAG,2rCAA2rC,MAAM,QAAO,CAAE,CAAC,GCAh7CM,KAAgB,CAACP,MAA0B,gBAAAC,EAAM,cAAc,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,SAAS,aAAa,MAAM,QAAQ,OAAO,8BAA8B,GAAGD,EAAK,GAAoB,gBAAAC,EAAM,cAAc,KAAK,EAAE,UAAU,0BAA0C,gBAAAA,EAAM,cAAc,QAAQ,EAAE,GAAG,qPAAqP,MAAM,UAAS,CAAE,GAAmB,gBAAAA,EAAM,cAAc,QAAQ,EAAE,GAAG,ggBAAggB,MAAM,UAAS,CAAE,GAAmB,gBAAAA,EAAM,cAAc,QAAQ,EAAE,GAAG,maAAma,MAAM,UAAS,CAAE,GAAmB,gBAAAA,EAAM,cAAc,QAAQ,EAAE,GAAG,4eAA4e,MAAM,UAAS,CAAE,GAAmB,gBAAAA,EAAM,cAAc,QAAQ,EAAE,GAAG,uaAAua,MAAM,+BAA8B,CAAE,GAAmB,gBAAAA,EAAM,cAAc,QAAQ,EAAE,GAAG,ixBAAixB,MAAM,UAAS,CAAE,GAAmB,gBAAAA,EAAM,cAAc,QAAQ,EAAE,GAAG,iRAAiR,MAAM,UAAS,CAAE,CAAC,GAAmB,gBAAAA,EAAM,cAAc,QAAQ,MAAsB,gBAAAA,EAAM,cAAc,kBAAkB,EAAE,IAAI,0BAA0B,IAAI,SAAS,IAAI,YAAY,IAAI,SAAS,IAAI,SAAS,eAAe,iBAAgB,GAAoB,gBAAAA,EAAM,cAAc,QAAQ,EAAE,WAAW,UAAS,CAAE,GAAmB,gBAAAA,EAAM,cAAc,QAAQ,EAAE,QAAQ,GAAG,WAAW,UAAS,CAAE,CAAC,GAAmB,gBAAAA,EAAM,cAAc,YAAY,EAAE,IAAI,iBAAgB,GAAoB,gBAAAA,EAAM,cAAc,QAAQ,EAAE,OAAO,IAAI,QAAQ,IAAI,MAAM,QAAO,CAAE,CAAC,CAAC,CAAC,GCAt2IO,KAAmB,CAACR,MAA0B,gBAAAC,EAAM,cAAc,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,SAAS,aAAa,MAAM,QAAQ,OAAO,8BAA8B,GAAGD,EAAK,GAAoB,gBAAAC,EAAM,cAAc,QAAQ,EAAE,GAAG,yZAAyZ,MAAM,+BAA8B,CAAE,GAAmB,gBAAAA,EAAM,cAAc,QAAQ,MAAsB,gBAAAA,EAAM,cAAc,kBAAkB,EAAE,IAAI,0BAA0B,IAAI,SAAS,IAAI,SAAS,IAAI,SAAS,IAAI,SAAS,eAAe,iBAAgB,GAAoB,gBAAAA,EAAM,cAAc,QAAQ,EAAE,WAAW,UAAS,CAAE,GAAmB,gBAAAA,EAAM,cAAc,QAAQ,EAAE,QAAQ,GAAG,WAAW,UAAS,CAAE,CAAC,CAAC,CAAC;ACaxiC,SAAwBQ,GAAQ;AAAA,EAC9B,UAAA3B;AAAA,EACA,MAAA4B,IAAO;AAAA,EACP,OAAAC,IAAQ;AACV,GAAiB;AACf,QAAM,EAAE,iBAAApB,GAAiB,cAAAD,EAAA,IAAiBM,EAAA,GACpCgB,IAAkB,MAAM;AAC5B,IAAKtB,KACHC,EAAgB,EAAI;AAAA,EAExB;AACA,SACE,gBAAAsB,EAACC,EAAa,MAAb,EACC,UAAA;AAAA,IAAA,gBAAAnB;AAAA,MAACmB,EAAa;AAAA,MAAb;AAAA,QACC,SAAO;AAAA,QACP,WAAU;AAAA,QAEV,UAAA,gBAAAnB;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAU;AAAA,YACV,SAASiB;AAAA,YAET,UAAA,gBAAAjB,EAACoB,IAAA,EAAY,WAAU,kBAAA,CAAkB;AAAA,UAAA;AAAA,QAAA;AAAA,MAC3C;AAAA,IAAA;AAAA,IAGF,gBAAApB,EAACmB,EAAa,QAAb,EACC,UAAA,gBAAAnB;AAAA,MAACmB,EAAa;AAAA,MAAb;AAAA,QACC,MAAAJ;AAAA,QACA,OAAAC;AAAA,QACA,YAAY;AAAA,QACZ,WAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAUV,UAAA,gBAAAhB,EAAC,OAAA,EAAI,WAAU,yDACZ,UAAAb,EAAA,CACH;AAAA,MAAA;AAAA,IAAA,EACF,CACF;AAAA,EAAA,GACF;AAEJ;ACtDA,MAAMkC,KAAY,CAAC,EAAE,cAAAC,GAAc,iBAAAC,QAE/B,gBAAAL,EAAC,OAAA,EAAI,WAAU,oGACb,UAAA;AAAA,EAAA,gBAAAlB,EAACwB,IAAA,EAAO,WAAU,kBAAA,CAAkB;AAAA,EAEpC,gBAAAxB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKsB;AAAA,MACL,UAAUC;AAAA,MACV,MAAK;AAAA,MACL,aAAY;AAAA,MACZ,WAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA;AAAA,EAAA;AAcZ,GACF,GAIEE,KAAqBC;AAAA,EACzB,CAACrB,GAAOiB,MACC,gBAAAtB,EAACqB,IAAA,EAAW,GAAGhB,GAAO,cAAAiB,EAAA,CAA4B;AAE7D,GCzCMK,KAAS,MAEX,gBAAA3B,EAAC,OAAA,EAAI,WAAU,gDACb,UAAA,gBAAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAU;AAAA,IACV,SAAQ;AAAA,IAER,UAAA,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAG;AAAA,QACH,IAAG;AAAA,QACH,GAAE;AAAA,QACF,MAAK;AAAA,QACL,QAAO;AAAA,QACP,aAAY;AAAA,QACZ,eAAc;AAAA,QACd,iBAAgB;AAAA,QAChB,kBAAiB;AAAA,MAAA;AAAA,IAAA;AAAA,EACnB;AAAA,GAEJ;AC4BJ,IAAI4B,IAAuB,MACvBC,IAAoB,GACpBC,KAAmB,IACnBC,KAAwB;AAC5B,MAAMC,IAAmD,CAAA;AACzD,IAAIC,IAAoB,IAEpBC,IAAkB,IAClBC,KAAuB,IACvB9C,IAAS,IACT+C,KAA+B,CAAA,GAC/BC,IAAe;AAEnB,SAASC,KAAgB;AAEvB,QAAMC,IAAY;AAAA,IAChB,MAFW,IAAI,IAAIL,CAAe,EAAE;AAAA,IAGpC,aAAa7C;AAAA,EAAA,GAETmD,IAAU,CAAA,GACVC,IAAkB,KAAK,KAAK,UAAUF,CAAS,CAAC,GAChDG,IAAgB,KAAK,KAAK,UAAUF,CAAO,CAAC,GAC5CG,IAAa,GAAGR,EAAoB,WAAWM,CAAe,YAAYC,CAAa;AAE7F,SAAO,IAAI,UAAUC,GAAY,CAAC,YAAY,CAAC;AACjD;AAEA,MAAMC,KAAU,MAAM;AACpB,EAAAd,KAAmB,IACnBF,IAAKU,GAAA,GACLL,IAAoB,IAEpBL,EAAG,SAAS,MAAM;AAChB,IAAAC,IAAoB,GACpBD,GAAI,KAAK,KAAK,UAAU,EAAE,MAAM,kBAAA,CAAmB,CAAC;AAAA,EACtD,GAEAA,EAAG,YAAY,CAAC,MAAM;AACpB,UAAMiB,IAAO,KAAK,MAAM,EAAE,IAAI;AAC9B,QAAKZ;AAQH,MAAIY,EAAK,SAAS,YACPA,EAAK,SAAS,UAAUb,EAAca,EAAK,EAAE,IACtDb,EAAca,EAAK,EAAE,EAAE,SAASA,EAAK,QAAQ,IAAI,IACxCA,EAAK,SAAS,cAAcb,EAAca,EAAK,EAAE,KAC1D,OAAOb,EAAca,EAAK,EAAE;AAAA,aAX1BA,EAAK,SAAS,kBAAkB;AAClC,MAAAZ,IAAoB;AACpB,iBAAWa,KAAMd;AACf,QAAAJ,GAAI,KAAK,KAAK,UAAUI,EAAcc,CAAE,EAAE,OAAO,CAAC;AAAA,IAEtD;AAAA,EASJ,GAEAlB,EAAG,UAAU,MAAM;AACjB,QAAIE,GAAkB;AACtB,UAAMiB,IAAQ,KAAK;AAAA,MACjB,MAAO,KAAK,IAAI,GAAGlB,CAAiB,IAAI,KAAK,WAAW;AAAA,MACxD;AAAA,IAAA;AAEF,eAAW,MAAM;AACf,MAAAA,KACAe,GAAA;AAAA,IACF,GAAGG,CAAK;AAAA,EACV,GAEAnB,EAAG,UAAU,MAAM;AACjB,IAAAA,GAAI,MAAA;AAAA,EACN;AACF,GAEMoB,KAAe,CAACC,GAAYlE,IAAuB,SAAe;AACtE,EAAAqD,GAAY,QAAQ,CAAC,EAAE,SAAAc,GAAS,QAAAC,QAAa;AAC3C,IAAIF,IACFE,EAAOF,CAAK,IACHlE,KACTmE,EAAQnE,CAAK;AAAA,EAEjB,CAAC,GACDqD,KAAc,CAAA;AAChB;AAEA,SAASgB,KAAwC;AAC/C,SAAO,IAAI,QAAQ,CAACF,GAASC,MAAW;AACtC,IAAAf,GAAY,KAAK,EAAE,SAAAc,GAAS,QAAAC,EAAA,CAAQ;AAAA,EACtC,CAAC;AACH;AAEA,MAAME,KAAsB,CAACC,MAAoC;AAC/D,EAAApB,IAAkBoB,EAAQ,QAC1BjE,IAASiE,EAAQ,QACjBnB,KAAuBmB,EAAQ,OAC5B,QAAQ,YAAY,QAAQ,EAC5B,QAAQ,eAAe,sBAAsB,GAEhDV,GAAA;AACA,QAAMW,IAAiB,OACrBC,GACAC,IAAqC,CAAA,GACrC1E,MACe;AAWf,UAAM2E,IAA6B,OAVlB,MAAM,MAAMxB,GAAiB;AAAA,MAC5C,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,aAAa7C;AAAA,QACb,GAAIN,IAAQ,EAAE,eAAe,UAAUA,CAAK,OAAO,CAAA;AAAA,MAAC;AAAA,MAEtD,MAAM,KAAK,UAAU,EAAE,OAAOyE,GAAW,WAAAC,GAAW;AAAA,IAAA,CACrD,GAEiD,KAAA,GAC5CE,IAAS,MAAM,QAAQD,EAAO,MAAM,IAAIA,EAAO,SAAS,CAAA;AAC9D,YAAQ,IAAIC,GAAQ,cAAc;AAElC,UAAMC,IAAgBD,EAAO,KAAK,CAACE,MAAQ;AACzC,YAAMC,IAAMD,EAAI,SAAS,YAAA,KAAiB;AAC1C,aACEC,EAAI,SAAS,cAAc,KAC3BA,EAAI,SAAS,KAAK,KAClBA,EAAI,SAAS,SAAS;AAAA,IAE1B,CAAC;AAED,QADA,QAAQ,IAAIF,GAAe,qBAAqB,GAC5CA,GAAe;AAGjB,UAFA,QAAQ,IAAIA,GAAe,sBAAsB,GAE7CvB,GAAc;AAChB,cAAM0B,IAAW,MAAMX,GAAA;AACvB,eAAOG,EAAkBC,GAAWC,GAAWM,CAAQ;AAAA,MACzD;AAEA,MAAA1B,IAAe;AAEf,UAAI;AACF,YAAI2B,IAAqB;AACzB,YAAI,QAAQ,IAAI,aAAa;AAC3B,UAAAA,IAAgB,MAAMC,EAAiB,YAAY,QAAQ;AAAA,aACtD;AACL,gBAAMC,IAAa,OAAO,SAAS,MAC7BC,IAAkB,mBAAmBD,CAAU;AACrD,UAAAF,IAAgB,MAAMC,EAAiB,SAASE,CAAe,GAC/D,QAAQ,IAAIH,GAAe,qBAAqB;AAAA,QAClD;AACA,YAAI,CAACA,GAAe;AAClB,gBAAM,IAAI,MAAM,wCAAwC;AAG1D,eAAAlF,GAAkBkF,EAAc,KAAK,GACrChB,GAAa,MAAMgB,EAAc,KAAK,GAG/BT,EAAkBC,GAAWC,GAAWO,EAAc,KAAK;AAAA,MACpE,SAASf,GAAO;AACd,sBAAQ,IAAIA,GAAO,wBAAwB,GAC3CD,GAAaC,GAAO,IAAI,GAClBA;AAAA,MACR,UAAA;AACE,QAAAZ,IAAe;AAAA,MACjB;AAAA,IACF;AAEA,QAAIsB,EAAO,SAAS;AAClB,YAAM,IAAI,MAAMA,EAAO,IAAI,CAACS,MAAMA,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;AAGzD,WAAOV,EAAO;AAAA,EAChB;AACA,SAAO;AAAA,IACL,gBAAAH;AAAA,IAEA,WAAW,CACTc,GACAZ,IAAqC,CAAA,GACrCa,MACiB;AACjB,UAAI,CAACD,EAAa,KAAA,EAAO,WAAW,cAAc;AAChD,eAAO,MAAM;AAAA,QAAC;AAGhB,YAAMvB,IAAK,GAAG,EAAEf,EAAqB,IAC/BwC,IAA+B;AAAA,QACnC,IAAAzB;AAAA,QACA,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM,KAAK,UAAU,EAAE,OAAOuB,GAAc,WAAAZ,GAAW;AAAA,UACvD,YAAY;AAAA,YACV,eAAe;AAAA,cACb,MAAM,IAAI,IAAIvB,CAAe,EAAE;AAAA,cAC/B,aAAa7C;AAAA,YAAA;AAAA,UACf;AAAA,QACF;AAAA,MACF;AAGF,aAAA2C,EAAcc,CAAE,IAAI,EAAE,SAAAyB,GAAS,UAAAD,EAAA,GAE3BrC,KAAqBL,GAAI,eAAe,UAAU,QACpDA,EAAG,KAAK,KAAK,UAAU2C,CAAO,CAAC,GAG1B,MAAM;AACX,QAAI3C,GAAI,eAAe,UAAU,QAC/BA,EAAG,KAAK,KAAK,UAAU,EAAE,IAAAkB,GAAI,MAAM,OAAA,CAAQ,CAAC,GAE9C,OAAOd,EAAcc,CAAE;AAAA,MACzB;AAAA,IACF;AAAA,IAEA,OAAO,MAAM;AACX,MAAAhB,KAAmB,IACnBF,GAAI,MAAA;AAAA,IACN;AAAA,EAAA;AAEJ;ACpQA,IAAI4C;AAEG,MAAMC,KAAc,CAACC,MAAwB;AAClD,EAAIF,MACJA,IAAgBnB,GAAoBqB,CAAI;AAC1C,GAEaC,IAAQ,OACnBC,GACAnB,IAAqC,CAAA,GACrC1E,MACe;AACf,MAAI,CAACyF,EAAe,OAAM,IAAI,MAAM,uBAAuB;AAC3D,SAAOA,EAAc,eAAkBI,GAAUnB,GAAW1E,CAAK;AACnE,GAEa8F,IAAW,OACtBC,GACArB,IAAqC,CAAA,GACrC1E,MACe;AACf,MAAI,CAACyF,EAAe,OAAM,IAAI,MAAM,uBAAuB;AAC3D,SAAOA,EAAc,eAAkBM,GAAarB,GAAW1E,CAAK;AACtE,GAEagG,KAAY,CACvBC,GACAvB,IAAqC,CAAA,GACrCa,MACiB;AACjB,MAAI,CAACE,EAAe,OAAM,IAAI,MAAM,uBAAuB;AAC3D,SAAOA,EAAc,UAAUQ,GAAiBvB,GAAWa,CAAQ;AACrE,GCnCaW,KAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAkBjBC,KAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QCRjCC,KAAQ,IAERC,KAAkB,MAAM;AAC5B,QAAM,CAACC,GAAYC,CAAa,IAAI9F,EAAmB,CAAA,CAAE,GACnD,CAAC+F,GAASC,CAAU,IAAIhG,EAAkB,EAAI,GAC9C,CAACyD,GAAOwC,CAAQ,IAAIjG,EAAS,IAAI,GACjC,CAACkG,GAAeC,CAAgB,IAAInG,EAAS,EAAK,GAClD,CAACoG,GAAYC,CAAa,IAAIrG,EAAwB,EAAE,GAExDsG,IAAgBC,EAAO,EAAI,GAE3B,EAAE,aAAAtG,EAAA,IAAgBQ,EAAA,GAElB+F,IAAqB,MAAM;AAC/B,IAAArB;AAAA,MACEO;AAAA,MACA,EAAE,OAAOC,IAAO,YAAYS,EAAA;AAAA,MAC5BnG;AAAA,IAAA,EAEC,KAAK,OAAOwG,MAAS;AAEpB,MAAAX,EADaW,GACO,yBAAyB,EAAE;AAAA,IACjD,CAAC,EACA,MAAM,CAACpC,MAAQ;AACd,MAAA4B,EAAS5B,CAAG;AAAA,IACd,CAAC,EACA,QAAQ,MAAM;AACb,MAAA2B,EAAW,EAAK;AAAA,IAClB,CAAC;AAAA,EACL;AAEA,SAAAzF,EAAU,MAAM;AACd,QAAI+F,EAAc,SAAS;AACzB,MAAAA,EAAc,UAAU,IACxBE,EAAA;AACA;AAAA,IACF;AAEA,UAAME,IAAQ,WAAW,MAAM;AAC7B,MAAAF,EAAA;AAAA,IACF,GAAG,GAAG;AAEN,WAAO,MAAM,aAAaE,CAAK;AAAA,EACjC,GAAG,CAACN,CAAU,CAAC,GAmBR;AAAA,IACL,YAAAP;AAAA,IACA,SAAAE;AAAA,IACA,OAAAtC;AAAA,IACA,uBArB4B,CAACkD,MAAmB;AAChD,MAAK1G,MACDiG,MACJC,EAAiB,EAAI,GACrBhB,EAAMO,IAAyB,EAAE,OAAOC,IAAO,QAAAgB,EAAA,GAAU1G,CAAW,EACjE,KAAK,OAAOwG,MAAS;AACpB,cAAM,EAAE,uBAAAG,MAA0BH;AAClC,QAAAX,EAAc,CAACe,MAAmB,CAAC,GAAGA,GAAM,GAAGD,CAAqB,CAAC;AAAA,MACvE,CAAC,EACA,MAAM,CAACvC,MAAQ;AACd,QAAA4B,EAAS5B,CAAG;AAAA,MACd,CAAC,EACA,QAAQ,MAAM;AACb,QAAA8B,EAAiB,EAAK;AAAA,MACxB,CAAC;AAAA,IACL;AAAA,IAOE,eAAAD;AAAA,IACA,eAAAG;AAAA,EAAA;AAEJ;AChFO,SAASS,EAAWC,GAAa;AAEtC,UADaA,IAAK,IAAI,KAAKA,CAAE,wBAAQ,KAAA,GACzB,mBAAmB,SAAS;AAAA,IACtC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,EAAA,CACX;AACH;AAEO,SAASC,GACdC,GACAC,IAAmB,gBACnBC,IAAiB,SACT;AACR,QAAMC,IAAI,IAAI,KAAKH,CAAG;AACtB,MAAI,OAAO,MAAMG,EAAE,QAAA,CAAS,EAAG,QAAO;AAEtC,QAAMC,IAAQ,IAAI,KAAK,eAAeF,GAAQ;AAAA,IAC5C,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,UAAAD;AAAA,EAAA,CACD,EAAE,cAAcE,CAAC,GAEZE,IAAMD,EAAM,KAAK,CAACE,MAAMA,EAAE,SAAS,KAAK,GAAG,SAAS,IACpDC,IAAQH,EAAM,KAAK,CAACE,MAAMA,EAAE,SAAS,OAAO,GAAG,SAAS,IACxDE,IAAOJ,EAAM,KAAK,CAACE,MAAMA,EAAE,SAAS,MAAM,GAAG,SAAS,IAEtDG,IAAO,IAAI,KAAK,eAAeP,GAAQ;AAAA,IAC3C,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAAD;AAAA,EAAA,CACD,EAAE,OAAOE,CAAC;AAEX,SAAO,GAAGE,CAAG,IAAIE,CAAK,KAAUC,CAAI,KAAKC,CAAI;AAC/C;AAEO,MAAMC,KAAwB,CAACC,GAAavE,MAAc;AAC/D,iBAAe,QAAQuE,GAAK,KAAK,UAAUvE,CAAI,CAAC;AAClD,GAEawE,IAAwB,CAACD,MAAgB;AACpD,QAAME,IAAM,eAAe,QAAQF,CAAG;AACtC,SAAOE,IAAM,KAAK,MAAMA,CAAG,IAAI;AACjC,GCpCMC,KAAc,MAAM;AACxB,QAAMC,IAAqBzB,EAA8B,IAAI,GACvD0B,IAAuB1B,EAAsB,IAAI,GACjD2B,IAAiB3B,EAAyB,IAAI,GAE9C;AAAA,IACJ,YAAAV;AAAA,IACA,SAAAE;AAAA,IACA,uBAAAoC;AAAA,IACA,eAAAjC;AAAA,IACA,eAAAG;AAAA,EAAA,IACET,GAAA,GACE,EAAE,iBAAAxF,GAAiB,aAAAC,EAAA,IAAgBI,EAAA;AAEzC,EAAA2H,GAAgB,MAAM;AAEpB,IADWJ,EAAmB;AAAA,EAEhC,GAAG,CAACnC,EAAW,MAAM,CAAC;AAEtB,QAAMwC,IAAe,CAACzD,MAAqC;AACzD,UAAM0D,IAAK1D,EAAE;AAEb,QADAsD,EAAe,SAAS,KAAA,GACpBI,EAAG,gBAAgBA,EAAG,aAAc;AACxC,UAAMC,IAAeD,EAAG,eAAeA,EAAG,YAAYA,EAAG,cACnD3B,IAASd,EAAW;AAE1B,IAAIoC,EAAqB,YAAYtB,KAEjC4B,KAAgB,MAAM,CAACxC,MACzBkC,EAAqB,UAAUtB,GAC/BwB,EAAsBxB,CAAM;AAAA,EAEhC,GAEM6B,IAAwB,CAACC,MAAsB;AACnD,IAAAd,GAAsB,iBAAiB;AAAA,MACrC,WAAAc;AAAA,MACA,aAAapI,GAAa;AAAA,IAAA,CAC3B,GACDD,EAAgB,CAACyG,MAAS,CAACA,CAAI;AAAA,EACjC;AAQA,SACE,gBAAAnF,EAAC,OAAA,EAAI,WAAU,gDACb,UAAA;AAAA,IAAA,gBAAAlB,EAAC,OAAA,EAAI,WAAU,mFACb,UAAA,gBAAAA,EAACqB,MAAU,KAAKqG,GAAgB,iBAThB,CAACtD,MAA2C;AAChE,MAAAA,EAAE,eAAA;AACF,YAAM8D,IAAQR,EAAe,SAAS,OAAO,KAAA;AAC7C,MAAA7B,EAAcqC,KAAS,IAAI;AAAA,IAC7B,EAKuD,CAAe,EAAA,CAClE;AAAA,IACA,gBAAAlI;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKwH;AAAA,QACL,UAAUK;AAAA,QACV,WAAU;AAAA,QAET,UAAAtC,IACC,gBAAAvF,EAAC2B,IAAA,CAAA,CAAO,IAER,gBAAAT,EAAAiH,GAAA,EACG,UAAA;AAAA,UAAA9C,EAAW,IAAI,CAAC+C,MACf,gBAAAlH;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cAEL,WAAU;AAAA,cACV,SAAS,MAAM8G,EAAsBI,EAAK,SAAS;AAAA,cAEnD,UAAA;AAAA,gBAAA,gBAAApI,EAAC,OAAA,EAAI,WAAU,4BACb,UAAA,gBAAAA,EAAC,OAAE,WAAU,6HACV,UAAAoI,EAAK,MAAA,CACR,EAAA,CACF;AAAA,kCAEC,KAAA,EAAE,WAAU,sDACV,UAAA5B,GAAkB4B,EAAK,UAAU,EAAA,CACpC;AAAA,cAAA;AAAA,YAAA;AAAA,YAZKA,EAAK;AAAA,UAAA,CAcb;AAAA,UACA1C,uBAAkB/D,IAAA,CAAA,CAAO;AAAA,QAAA,EAAA,CAC5B;AAAA,MAAA;AAAA,IAAA;AAAA,EAEJ,GACF;AAEJ,GCxFM0G,KAAS,CAAC,EAAE,cAAA1I,GAAc,iBAAAC,QAS5B,gBAAAsB,EAAC,OAAA,EAAI,WAAU,+FACb,UAAA;AAAA,EAAA,gBAAAlB,EAACsI,IAAA,EAAW,WAAU,iCAAA,CAAiC;AAAA,EAEvD,gBAAApH,EAAC,OAAA,EAAI,WAAU,uCACZ,UAAA;AAAA,IAACvB,IASA,gBAAAK,EAAC,OAAA,EAAI,WAAU,oEAAmE,UAAA,YAElF,IAVA,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,SAZkB,MAAM;AAChC,yBAAe,WAAW,eAAe,GACzCJ,EAAgB,CAACyG,MAAkB,CAACA,CAAI;AAAA,QAC1C;AAAA,QAUU,WAAU;AAAA,QACX,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAQH,gBAAArG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,WAAU;AAAA,QACV,SA5BiB,MAAM;AAC7B,UAAAJ,EAAgB,CAACyG,MAAkB,CAACA,CAAI;AAAA,QAC1C;AAAA,QA4BS,UAAA1G,sBACE4I,IAAA,EAAK,WAAU,0CAAyC,IAEzD,gBAAAvI,EAACwI,IAAA,EAAS,WAAU,4BAAA,CAA4B;AAAA,MAAA;AAAA,IAAA;AAAA,EAEpD,EAAA,CACF;AAAA,GACF,GC7CSC,KAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiCdC,KAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MCjChBC,KAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MCSxBC,IAAa,IAoBbC,KAAkB,MAAM;AAC5B,QAAM,CAACC,GAAaC,CAAc,IAAIvJ,EAAoB,CAAA,CAAE,GACtD,CAACwJ,GAAYC,CAAa,IAAIzJ,EAAS,EAAI,GAC3C,CAAC0J,GAAUC,CAAW,IAAI3J,EAAS,IAAI,GACvC,CAACkG,GAAeC,CAAgB,IAAInG,EAAS,EAAK,GAClD,CAAC4J,GAAWC,CAAY,IAAI7J,EAAS,EAAK,GAC1C,CAAC8J,GAASC,CAAU,IAAI/J,EAAS,EAAI,GAErC,EAAE,aAAAC,GAAa,aAAAI,EAAA,IAAgBI,EAAA,GAE/BuJ,IAAgBnC,EAAsB,eAAe,GAAG,WAExDoC,IAAapC,EAAsB,eAAe,GAAG,aAErDqC,IAAgBC,GAAQ,MAE1Bb,EAAY,KAAK,CAACc,MAAiBA,EAAI,aAAa,IAAI,GAAG,aAC3D,MAED,CAACd,CAAW,CAAC;AAEhB,MAAIe,IAAWL,KAAiBE,KAAiB;AAGjD,SAAA3J,EAAU,MAAM;AAEd,QADI,CAAC8J,KACD,CAAChK,EAAa;AAClB,QAAI4J,KAAc5J,GAAa,eAAe4J,GAAY;AACxD,qBAAe,WAAW,eAAe;AACzC;AAAA,IACF;AAEA,UAAMK,IAAc/E;AAAA,MAClB4D;AAAA,MACA,EAAE,WAAWkB,EAAA;AAAA,MACb,CAAChH,MAAS;AACR,cAAMkH,IAAWlH;AACjB,QAAIkH,GAAU,cAAc,MAAM,cAAc,WAC9ChB,EAAe,CAAC1C,MAAoB,CAAC,GAAGA,GAAM0D,EAAS,YAAY,CAAC;AAAA,MAExE;AAAA,IAAA;AAGF,WAAO,MAAMD,EAAA;AAAA,EACf,GAAG,CAACD,GAAUhK,CAAW,CAAC,GAG1BE,EAAU,MAAM;AAEd,QADI,CAACN,KACD,CAACI,EAAa;AAClB,IAAI4J,KAAc5J,GAAa,gBAAgB4J,MAC7C,eAAe,WAAW,eAAe,GACzCI,IAAW;AAEb,UAAMG,IAAM;AAAA,MACV,GAAIH,KAAY,EAAE,WAAWA,EAAA;AAAA,MAC7B,OAAOjB;AAAA,IAAA;AAET,IAAAjE,EAAMM,IAAgB+E,GAAKvK,CAAW,EACnC,KAAK,OAAOwG,MAAS;AAEpB,MAAA8C,EADa9C,GACQ,iBAAiB,EAAE;AAAA,IAC1C,CAAC,EACA,MAAM,CAACpC,MAAQ;AACd,MAAAsF,EAAYtF,CAAG;AAAA,IACjB,CAAC,EACA,QAAQ,MAAM;AACb,MAAAoF,EAAc,EAAK;AAAA,IACrB,CAAC;AAAA,EACL,GAAG,CAACpJ,CAAW,CAAC,GAyJT;AAAA,IACL,aAAAiJ;AAAA,IACA,YAAAE;AAAA,IACA,UAAAE;AAAA,IACA,WAAAE;AAAA,IACA,aA/HkB,CAACa,MAAiB;AACpC,YAAMC,IACJpB,EAAY,KAAK,CAACc,MAAiBA,EAAI,aAAa,IAAI,GAAG,aAC3D,MACIO,IACJrB,EAAY,KAAK,CAACc,MAAiBA,EAAI,YAAY,EAAI,GAAG,YAC1D,IACIQ,IAAiB;AAAA,QACrB,GAAIF,KAAe,EAAE,WAAWA,EAAA;AAAA,QAChC,SAASD;AAAA,QACT,UAAUE;AAAA,QACV,aAAa,CAAA;AAAA,QACb,MAAAF;AAAA,QACA,YAAY,KAAK,OAAA;AAAA,QACjB,aAAY,oBAAI,KAAA,GAAO,YAAA;AAAA,QACvB,MAAM;AAAA,UACJ,WAAWpK,GAAa;AAAA,UACxB,WAAW;AAAA,QAAA;AAAA,MACb;AAEF,MAAAwJ,EAAa,EAAI,GACjBN,EAAe,CAAC1C,MAAoB,CAAC,GAAGA,GAAM+D,CAAc,CAAC,GAE7DvF,EAAS4D,IAAa2B,GAAgB3K,CAAW,EAC9C,KAAK,OAAOwG,MAAS;AACpB,cAAMpD,IAAOoD;AACb,QAAIpD,EAAK,WAAW,KAAK,cAAc,cACrCkG,EAAe,CAAC1C,MAAoB,CAAC,GAAGA,GAAMxD,EAAK,UAAU,CAAC,GAG9D,CAACwE,EAAsB,eAAe,KACtCxE,EAAK,YAAY,aACjBhD,KAEAsH,GAAsB,iBAAiB;AAAA,UACrC,WAAWtE,EAAK,YAAY;AAAA,UAC5B,aAAahD,EAAY;AAAA,QAAA,CAC1B;AAAA,MAEL,CAAC,EACA,MAAM,MAAMkJ,EAAe,CAAC1C,MAASA,EAAK,MAAM,GAAG,EAAE,CAAC,CAAC,EACvD,QAAQ,MAAMgD,EAAa,EAAK,CAAC;AAAA,IACtC;AAAA,IAsFE,iBA5JsB,CAAClD,MAAmB;AAE1C,UADI,CAAC1G,KACDiG,EAAe;AACnB,YAAM8D,IAAgBnC,EAAsB,eAAe,GAAG,WACxD2C,IAAM;AAAA,QACV,GAAIR,KAAiB,EAAE,WAAWA,EAAAA;AAAAA,QAClC,OAAOZ;AAAA,QACP,QAAAzC;AAAA,MAAA;AAEF,MAAAR,EAAiB,EAAI,GACrBhB,EAAMM,IAAgB+E,GAAKvK,CAAW,EACnC,KAAK,OAAOwG,MAAS;AAEpB,cAAMoE,IADOpE,GACU,iBAAiB,CAAA;AACxC,QAAA8C,EAAe,CAAC1C,MAAoB,CAAC,GAAGgE,GAAU,GAAGhE,CAAI,CAAC,GACtDgE,EAAS,SAASzB,KACpBW,EAAW,EAAK;AAAA,MAEpB,CAAC,EACA,MAAM,CAAC1F,MAAQ;AACd,QAAAsF,EAAYtF,CAAG;AAAA,MACjB,CAAC,EACA,QAAQ,MAAM;AACb,QAAA8B,EAAiB,EAAK;AAAA,MACxB,CAAC;AAAA,IACL;AAAA,IAoIE,eAAAD;AAAA,IACA,QArFa,OAAO4E,MAA6B;AACjD,MAAAjB,EAAa,EAAI;AACjB,YAAMkB,IAAY;AAAA,QAChB,OAAOD,EAAQ,MAAM;AAAA,UACnB,CAACE,MAAe,GAAGF,EAAQ,QAAQ,IAAIE,EAAK,IAAI;AAAA,QAAA;AAAA,QAElD,gBAAgBF,EAAQ;AAAA,MAAA;AAE1B,UAAI;AACF,cAAMG,IAAqB,MAAM5F;AAAA,UAC/B6D;AAAA,UACA6B;AAAA,UACA9K;AAAA,QAAA;AAEF,mBAAW,CAACiL,GAAOF,CAAI,KAAKF,EAAQ,MAAM,WAAW;AACnD,gBAAMK,IAAMF,EAAc,iBAAiBC,CAAK,GAAG;AACnD,UAAIC,KACF,MAAM,MAAMA,GAAK;AAAA,YACf,QAAQ;AAAA,YACR,MAAMH;AAAA,YACN,SAAS,EAAE,gBAAgBA,EAAK,KAAA;AAAA,UAAK,CACtC;AAAA,QAEL;AAEA,cAAML,IACJrB,EAAY,KAAK,CAACc,MAAiBA,EAAI,QAAQ,GAAG,YAAY,IAC1DgB,IAAcN,EAAQ,MAAM,IAAI,CAACE,OAAgB;AAAA,UACrD,KAAK,IAAI,gBAAgBA,CAAI;AAAA,UAC7B,UAAUA,EAAK;AAAA,QAAA,EACf,GAEIK,IAAyB;AAAA,UAC7B,WAAWP,EAAQ;AAAA,UACnB,UAAUH;AAAA,UACV,aAAAS;AAAA,UACA,MAAM;AAAA,UACN,YAAY,KAAK,OAAA;AAAA,UACjB,aAAY,oBAAI,KAAA,GAAO,YAAA;AAAA,UACvB,MAAM,EAAE,WAAW/K,GAAa,WAAW,WAAW,WAAA;AAAA,QAAW;AAEnE,QAAAkJ,EAAe,CAAC1C,MAAS,CAAC,GAAGA,GAAMwE,CAAa,CAAC;AACjD,cAAMT,IAAiB;AAAA,UACrB,WAAWE,EAAQ;AAAA,UACnB,UAAUH;AAAA,UACV,aAAaG,EAAQ,MAAM;AAAA,YACzB,CAACQ,MAAY,GAAGR,EAAQ,QAAQ,IAAIQ,EAAE,IAAI;AAAA,UAAA;AAAA,UAE5C,SAAS;AAAA,UACT,MAAM;AAAA,UACN,YAAY,KAAK,OAAA;AAAA,UACjB,aAAY,oBAAI,KAAA,GAAO,YAAA;AAAA,UACvB,MAAM,EAAE,WAAWjL,GAAa,WAAW,WAAW,WAAA;AAAA,QAAW,GAG7DgD,IADO,MAAMgC,EAAS4D,IAAa2B,GAAgB3K,CAAW;AAGpE,QAAIoD,EAAK,WAAW,KAAK,cAAc,cACrCkG,EAAe,CAAC1C,MAAS,CAAC,GAAGA,GAAMxD,EAAK,UAAU,CAAC,GAGnD,CAACwE,EAAsB,eAAe,KACtCxE,EAAK,YAAY,aACjBhD,KAEAsH,GAAsB,iBAAiB;AAAA,UACrC,WAAWtE,EAAK,WAAW;AAAA,UAC3B,aAAahD,EAAY;AAAA,QAAA,CAC1B;AAAA,MAEL,QAAc;AACZ,QAAAkJ,EAAe,CAAC1C,MAASA,EAAK,MAAM,GAAG,EAAE,CAAC;AAAA,MAC5C,UAAA;AACE,QAAAgD,EAAa,EAAK;AAAA,MACpB;AAAA,IACF;AAAA,IAWE,SAAAC;AAAA,EAAA;AAEJ,GCtQMyB,KAAQ,CAAC,EAAE,UAAAC,QAEb,gBAAA9J;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,IAAG;AAAA,IACH,WAAU;AAAA,IACV,MAAK;AAAA,IAEL,UAAA;AAAA,MAAA,gBAAAlB;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,eAAY;AAAA,UACZ,OAAM;AAAA,UACN,MAAK;AAAA,UACL,SAAQ;AAAA,UAER,UAAA,gBAAAA,EAAC,QAAA,EAAK,QAAO,gBAAe,GAAE,oCAAA,CAAoC;AAAA,QAAA;AAAA,MAAA;AAAA,MAEpE,gBAAAA,EAAC,OAAA,EAAI,WAAU,0DACZ,UAAAgL,EAAA,CACH;AAAA,IAAA;AAAA,EAAA;AAAA,GCRAC,KAA8B3K,GAAM;AAAA,EACxC,CAAC,EAAE,KAAAqK,GAAK,KAAA7G,GAAK,gBAAAoH,GAAgB,UAAAC,QAAe;AAC1C,UAAM,CAACC,GAAcC,CAAe,IAAI7L,EAAS,EAAK,GAEhD8L,IAAc,YAAY;AAC9B,YAAMd,IAAO1G,EAAI,YAAY,CAAC,GAExByH,IAAO,OADI,MAAM,MAAMf,EAAK,GAAG,GACT,KAAA,GACtBgB,IAAU,IAAI,gBAAgBD,CAAI,GAClCE,IAAO,SAAS,cAAc,GAAG;AACvC,MAAAA,EAAK,OAAOD,GACZC,EAAK,WAAWjB,EAAK,YAAY,gBACjCiB,EAAK,MAAA,GACL,IAAI,gBAAgBD,CAAO;AAAA,IAC7B;AAEA,WACE,gBAAAtK,EAAAiH,GAAA,EACI,UAAA;AAAA,OAAAgD,MAAa,SAASA,MAAa,UAAUA,MAAa,UAC1D,gBAAAnL,EAAC,OAAA,EAAI,WAAU,YACb,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAW,mCACT8D,GAAK,MAAM,cAAc,aACrB,gBACA,aACN,IACEoH,IACIpH,GAAK,MAAM,cAAc,aACvB,yBACA,yBACF,EACN;AAAA,UAEA,UAAA,gBAAA9D,EAAC,OAAA,EAAI,WAAU,8EACb,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,oCACb,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,+EACb,UAAA,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAK2K;AAAA,cACL,KAAI;AAAA,cACJ,WAAU;AAAA,cACV,SAAS,MAAMU,EAAgB,EAAI;AAAA,YAAA;AAAA,UAAA,EACrC,CACF,GACF,EAAA,CACF;AAAA,QAAA;AAAA,MAAA,GAEJ;AAAA,MAGDF,MAAa,SACZ,gBAAAjK;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,SAAS,MAAMoK,EAAA;AAAA,UAEf,UAAA;AAAA,YAAA,gBAAAtL,EAAC,OAAA,EAAI,WAAU,2HASb,UAAA,gBAAAA,EAAC,OAAE,WAAU,sDAAqD,iBAElE,EAAA,CACF;AAAA,YACA,gBAAAA,EAAC,KAAA,EAAE,WAAU,kIACV,UAAA8D,EAAI,YAAY,CAAC,EAAE,SAAS,MAAM,MAAM,EAAE,MAAI,CACjD;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAGF,GAqBJ;AAAA,EAEJ;AAAA,EACA,CAACuC,GAAMqF,MACLrF,EAAK,QAAQqF,EAAK,OAClBrF,EAAK,mBAAmBqF,EAAK,kBAC7BrF,EAAK,IAAI,MAAM,cAAcqF,EAAK,IAAI,MAAM,aAC5CrF,EAAK,aAAaqF,EAAK;AAC3B,GCpGMC,KAAgB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEMC,KAAO,MAAM;AACjB,QAAM,CAACC,GAAUC,CAAW,IAAItM,EAAwB,EAAE,GACpDgI,IAAqBzB,EAAuB,IAAI,GAChDgG,IAAehG,EAA4B,IAAI,GAC/CiG,IAAejG,EAAyB,IAAI,GAE5CkG,IAAsBlG,EAAO,CAAC,GAC9BmG,IAAmBnG,EAAO,CAAC,GAC3BoG,IAAkBpG,EAAO,EAAK,GAE9B;AAAA,IACJ,aAAA+C;AAAA,IACA,aAAAsD;AAAA,IACA,iBAAAC;AAAA,IACA,eAAA3G;AAAA,IACA,WAAA0D;AAAA,IACA,QAAAkD;AAAA,IACA,YAAAtD;AAAA,IACA,SAAAM;AAAA,EAAA,IACET,GAAA;AAEJ,EAAAjB,GAAgB,MAAM;AACpB,UAAME,IAAKN,EAAmB;AAC9B,QAAKM;AACL,UAAIqE,EAAgB,SAAS;AAC3B,cAAMI,IAAaN,EAAoB,SACjCO,IAAUN,EAAiB,SAE3BO,IADY3E,EAAG,eACIyE;AACzB,QAAAzE,EAAG,YAAY0E,IAAUC,GACzBN,EAAgB,UAAU;AAAA,MAC5B;AACE,QAAArE,EAAG,YAAYA,EAAG;AAAA,EAEtB,GAAG,CAACgB,GAAa,MAAM,CAAC;AAExB,QAAM4D,IAAqB,MAAM;AAC/B,UAAMxE,IAAQ6D,EAAa,SAAS,OAAO,KAAA;AAE3C,IADKzC,MAAS6C,EAAgB,UAAU,KACnCjE,MACLkE,EAAYlE,CAAK,GACb6D,EAAa,YACfA,EAAa,QAAQ,QAAQ;AAAA,EAEjC,GAEMY,IAAmB,CAACvI,MAA2B;AACnD,IAAIgF,KACAhF,EAAE,QAAQ,YACZA,EAAE,eAAA,GACFsI,EAAA;AAAA,EAEJ,GAEM7E,KAAe,CAACzD,MAAqC;AACzD,UAAM0D,IAAK1D,EAAE;AAEb,QADqB0D,EAAG,eAAeA,EAAG,gBAEtCA,EAAG,aAAa,MAAM,CAACpC,GAAe;AACxC,YAAMS,IAAS2C,EAAY;AAC3B,MAAAmD,EAAoB,UAAUnE,EAAG,cACjCoE,EAAiB,UAAUpE,EAAG,WAC9BqE,EAAgB,UAAU,IAC1BE,EAAgBlG,CAAM;AAAA,IACxB;AAAA,EACF,GAEMyG,KAAe,CAACC,MAA+C;AACnE,UAAMC,IAAQ,MAAM,KAAKD,EAAM,OAAO,SAAS,EAAE,GAC3CE,IAAaD,EAAM;AAAA,MAAO,CAACtC,MAC/BmB,GAAc,SAASnB,EAAK,IAAI;AAAA,IAAA;AAMlC,QAJqBsC,EAAM;AAAA,MACzB,CAACtC,MAAS,CAACmB,GAAc,SAASnB,EAAK,IAAI;AAAA,IAAA,EAG5B,SAAS,GAAG;AAC3B,MAAAsB;AAAA,QACE;AAAA,MAAA,GAEF,WAAW,MAAMA,EAAY,IAAI,GAAG,GAAI,GACxCe,EAAM,OAAO,QAAQ;AACrB;AAAA,IACF;AAEA,UAAMhD,IAAWf,EAAYA,GAAa,SAAS,CAAC,GAAG;AACvD,IAAIiE,EAAW,SAAS,KAAKlD,KAC3ByC,EAAO;AAAA,MACL,OAAOS;AAAA,MACP,gBAAgB;AAAA,MAChB,UAAAlD;AAAA,IAAA,CACD;AAAA,EAEL,GAEMmD,KAAyB,MAAM;AACnC,IAAAhB,EAAa,SAAS,MAAA;AAAA,EACxB,GAEMiB,IAAetD,GAAQ,MACpBb,GAAa,KAAK,CAACc,MAAiBA,EAAI,YAAY,EAAI,GAC9D,CAACd,CAAW,CAAC;AAEhB,iBAAQ,IAAIA,GAAa,aAAa,GAGpC,gBAAA5H,EAAC,OAAA,EAAI,WAAU,qEACb,UAAA;AAAA,IAAA,gBAAAlB,EAAAmI,GAAA,EACG,UAAAa,sBACE,OAAA,EAAI,WAAU,YACb,UAAA,gBAAAhJ,EAAC2B,IAAA,EAAO,EAAA,CACV,IAEA,gBAAAT,EAAAiH,GAAA,EACE,UAAA;AAAA,MAAA,gBAAAnI;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAKwH;AAAA,UACL,WAAU;AAAA,UACV,UAAUK;AAAA,UAEV,UAAA,gBAAA7H,EAAC,SAAI,WAAU,kEACZ,aAAa,IAAI,CAACoI,GAAesC,MAAU;AAC1C,kBAAMQ,IACH,UAAU9C,KAAQsC,MAAU,KAC7B5B,EAAY4B,IAAQ,CAAC,GAAG,MAAM,cAC5BtC,GAAM,MAAM,WACV8E,IAAc,IAAI,KAAK9E,EAAK,cAAc,EAAE,GAC5C+E,IACJzC,IAAQ,IACJ,IAAI,KAAK5B,EAAY4B,IAAQ,CAAC,EAAE,cAAc,EAAE,IAChD,MAEA0C,IACJ,CAACD,KACDD,EAAY,cAAcC,EAAS,aACnCD,EAAY,SAAA,MAAeC,EAAS,SAAA,KACpCD,EAAY,YAAA,MAAkBC,EAAS,YAAA,GAEnCE,KACJF,KACAD,EAAY,QAAA,IAAYC,EAAS,QAAA,IAAY,MAAS,KAElDG,IACJlF,EAAK,eAAe,MAAM,MACzB8C,KACCkC,KACAC,KAEEE,IAAWnF,GAAM,aAAa,KAAK,CAACoF,MAAQ;AAChD,oBAAMC,IAAMD,EAAI,SACb,MAAM,0BAA0B,IAAI,CAAC,GACpC,YAAA;AACJ,qBAAO,CAAC,OAAO,QAAQ,KAAK,EAAE,SAASC,KAAO,EAAE;AAAA,YAClD,CAAC;AACD,mBACE,gBAAAzN;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,WAAW,YACToI,EAAK,KAAK,cAAc,SACxBA,EAAK,KAAK,cAAc,UACpB,sBACA,iBACN;AAAA,gBAEA,UAAA,gBAAAlH,EAAC,OAAA,EAAI,WAAU,kBACZ,UAAA;AAAA,kBAAAoM,KACC,gBAAAtN;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAW,sCACToI,EAAK,KAAK,cAAc,SACxBA,EAAK,KAAK,cAAc,UACpB,sBACA,iBACN;AAAA,sBAEC,YAAK,KAAK,cAAc,QACvB,gBAAAlH,EAAC,OAAA,EAAI,WAAU,uCACb,UAAA;AAAA,wBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,uCACb,UAAA;AAAA,0BAAA,gBAAAlB,EAAC0N,IAAA,EAAc;AAAA,4CACd,OAAA,EAAI,WAAU,YACb,UAAA,gBAAA1N,EAAC2N,MAAW,EAAA,CACd;AAAA,wBAAA,GACF;AAAA,wBAEA,gBAAAzM,EAAC,OAAA,EAAI,WAAU,oDACb,UAAA;AAAA,0BAAA,gBAAAlB,EAAC,OAAA,EAAI,WAAU,6DAAA,CAA6D;AAAA,4CAC3E,KAAA,EAAE,WAAU,8CACV,UAAAsG,EAAW8B,EAAK,UAAU,EAAA,CAC7B;AAAA,wBAAA,EAAA,CACF;AAAA,sBAAA,EAAA,CACF,IACEA,EAAK,KAAK,cAAc,aAC1B,gBAAAlH,EAAC,OAAA,EAAI,WAAU,uCACb,UAAA;AAAA,wBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,sBACb,UAAA;AAAA,0BAAA,gBAAAlB,EAAC,OAAE,WAAU,8CACV,UAAAsG,EAAW8B,EAAK,UAAU,GAC7B;AAAA,0BACA,gBAAApI,EAAC,OAAA,EAAI,WAAU,sFAAA,CAAsF;AAAA,wBAAA,GACvG;AAAA,wBACA,gBAAAA;AAAA,0BAAC4N;AAAA,0BAAA;AAAA,4BACC,MAAMxF,GAAM,MAAM,aAAa;AAAA,4BAC/B,YAAY;AAAA,4BACZ,WAAU;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBACZ,EAAA,CACF,IACEA,EAAK,KAAK,cAAc,UAC1B,gBAAAlH,EAAC,OAAA,EAAI,WAAU,uCACb,UAAA;AAAA,wBAAA,gBAAAlB;AAAA,0BAAC4N;AAAA,0BAAA;AAAA,4BACC,MAAMxF,GAAM,MAAM,aAAa;AAAA,4BAC/B,YAAY;AAAA,4BACZ,WAAU;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAEZ,gBAAAlH,EAAC,OAAA,EAAI,WAAU,gDACb,UAAA;AAAA,0BAAA,gBAAAlB,EAAC,OAAA,EAAI,WAAU,6DAAA,CAA6D;AAAA,4CAC3E,KAAA,EAAE,WAAU,8CACV,UAAAsG,EAAW8B,EAAK,UAAU,EAAA,CAC7B;AAAA,wBAAA,EAAA,CACF;AAAA,sBAAA,EAAA,CACF,IACE;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAGR,gBAAApI,EAAC,OAAA,EAAI,WAAU,4CACZ,UAAA,MAAM,QAAQoI,GAAM,WAAW,KAChCA,GAAM,aAAa,SAAS,IAC1B,gBAAApI;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAW,8BACToI,EAAK,KAAK,cAAc,SACxBA,EAAK,KAAK,cAAc,UACpB,oBACEkF,IACI,yBACA,oBACN,KACA,qBACEA,IACI,yBACA,oBACN,EACN,IACEC,IACI,iCACA,iCACN;AAAA,sBAEC,YAAK,YAAY,IAAI,CAAC3D,GAAKc,wBACzB,OAAA,EACC,UAAA,gBAAA1K;AAAA,wBAACiL;AAAA,wBAAA;AAAA,0BACC,KAAKrB,EAAI;AAAA,0BACT,KAAKxB;AAAA,0BACL,gBAAgB;AAAA,0BAChB,UACEwB,GAAK,SACF,MAAM,0BAA0B,IAAI,CAAC,GACpC,iBAAiB;AAAA,wBAAA;AAAA,sBAAA,EAEzB,GAVQc,CAWV,CACD;AAAA,oBAAA;AAAA,kBAAA,IAGH,gBAAA1K;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAW;AAAA,uDAEVoI,EAAK,KAAK,cAAc,SACxBA,EAAK,KAAK,cAAc,UACpB,oCACEkF,IACI,yBACA,oBACN,MACA,sDACEA,IACI,yBACA,oBACN,GACN;AAAA;AAAA,sBAGE,UAAAlF,GAAM;AAAA,oBAAA;AAAA,kBAAA,EACT,CAEJ;AAAA,gBAAA,EAAA,CACF;AAAA,cAAA;AAAA,cA9HKA,EAAK;AAAA,YAAA;AAAA,UAiIhB,CAAC,EAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAAA,wBAGD,OAAA,EAAI,WAAU,8GACb,UAAA,gBAAAlH,EAAC,OAAA,EAAI,WAAU,6EACb,UAAA;AAAA,QAAA,gBAAAlB,EAAC,OAAA,EAAI,WAAU,uBACb,UAAA,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAK+L;AAAA,YACL,aAAY;AAAA,YACZ,WAAU;AAAA,YACV,WAAWY;AAAA,UAAA;AAAA,QAAA,GAEf;AAAA,QAEA,gBAAAzL,EAAC,OAAA,EAAI,WAAU,oDACZ,UAAA;AAAA,UAAA+L,KACC,gBAAA/L;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,UAAUkI;AAAA,cACV,SAAS4D;AAAA,cAET,UAAA;AAAA,gBAAA,gBAAAhN,EAAC6N,IAAA,EAAY,WAAU,qCAAA,CAAqC;AAAA,gBAC5D,gBAAA7N;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,QAAO;AAAA,oBACP,KAAKgM;AAAA,oBACL,UAAUY;AAAA,oBACV,WAAU;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACZ;AAAA,YAAA;AAAA,UAAA;AAAA,UAIJ,gBAAA5M;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,UAAUoJ;AAAA,cACV,SAASsD;AAAA,cAET,UAAA,gBAAA1M,EAAC,KAAA,EAAE,WAAU,gDAA+C,UAAA,OAAA,CAE5D;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,EAAA,CACF;AAAA,MAAA,EAAA,CACF,EAAA,CACF;AAAA,IAAA,EAAA,CACF,EAAA,CAEJ;AAAA,IACC6L,KAAY,gBAAA7L,EAAC+K,IAAA,EAAM,UAAUc,EAAA,CAAU;AAAA,EAAA,GAC1C;AAEJ;ACrVA,SAAwBiC,GAAQ;AAAA,EAC9B,MAAA/M,IAAO;AAAA,EACP,OAAAC,IAAQ;AACV,GAAoB;AAClB,QAAM;AAAA,IACJ,YAAA1B;AAAA,IACA,cAAAK;AAAA,IACA,iBAAAC;AAAA,IACA,aAAAH;AAAA,IACA,gBAAAK;AAAA,EAAA,IACEG,EAAA,GAEE8N,IAAiB,YAAY;AACjC,UAAMlO,IAAc,MAAMoE,EAAiB,kBAAA;AAC3C,IAAAnE,EAAeD,CAAW;AAAA,EAC5B;AACA,SAAAE,EAAU,MAAM;AACd,IAAIN,KACFsO,EAAA;AAAA,EAEJ,GAAG,CAAA,CAAE,GAGH,gBAAA/N,EAAC,OAAA,EAAI,WAAU,YACb,UAAA,gBAAAA,EAACc,IAAA,EAAQ,MAAAC,GAAY,OAAAC,GACnB,UAAA,gBAAAE,EAAC,OAAA,EAAI,WAAU,2DACb,UAAA;AAAA,IAAA,gBAAAlB;AAAA,MAACqI;AAAA,MAAA;AAAA,QACC,cAAA1I;AAAA,QACA,iBAAAC;AAAA,MAAA;AAAA,IAAA;AAAA,IAGDD,IAAe,gBAAAK,EAAC4L,IAAA,CAAA,CAAK,sBAAMrE,IAAA,CAAA,CAAY;AAAA,EAAA,EAAA,CAC1C,GACF,GACF;AAEJ;AChDO,SAASyG,GAAYC,GAAsB;AAChD,QAAM,EAAE,QAAA5O,GAAQ,aAAAI,EAAA,IAAgBwO;AAEhC,MAAI,CAAC5O,KAAU,CAACI;AACd,UAAM,IAAI,MAAM,0DAA0D;AAE9E;ACCA,IAAIyO,KAAiC,MACjCC,IAAc,IACdC,IAA4B,CAAA;AAEhC,SAASC,KAAS;AAChB,aAAWC,KAAKF,EAAW,CAAAE,EAAA;AAC7B;AAEO,SAASC,GAAKN,GAAsB;AACzC,EAAIE,MAGJH,GAAYC,CAAO,GACnBhK,EAAiB,KAAK;AAAA,IACpB,KAAKgK,EAAQ;AAAA,IACb,aAAaA,EAAQ;AAAA,IACrB,KAAKA,EAAQ;AAAA,IACb,KAAKA,EAAQ;AAAA,EAAA,CACd,GACDC,KAAaD,GACbE,IAAc,IACdE,GAAA,GACA5J,GAAY,EAAE,QAAQwJ,EAAQ,QAAQ,QAAQA,EAAQ,QAAQ;AAChE;AAEO,SAASO,GAAWnO,GAAqB;AAC9C,QAAM,CAACoO,GAAOC,CAAQ,IAAIlP,EAGvB;AAAA,IACD,aAAA2O;AAAA,IACA,YAAAD;AAAA,EAAA,CACD;AAYD,SAVAnO,EAAU,MAAM;AACd,UAAM4O,IAAK,MAAM;AACf,MAAAD,EAAS,EAAE,aAAAP,GAAa,YAAAD,IAAY;AAAA,IACtC;AACA,WAAAE,EAAU,KAAKO,CAAE,GACV,MAAM;AACX,MAAAP,IAAYA,EAAU,OAAO,CAAC,MAAM,MAAMO,CAAE;AAAA,IAC9C;AAAA,EACF,GAAG,CAAA,CAAE,GAED,CAACF,EAAM,eAAe,CAACA,EAAM,aACxB,OAIP,gBAAAzO;AAAA,IAACd;AAAA,IAAA;AAAA,MACC,SAASuP,EAAM,WAAW;AAAA,MAC1B,QAAQA,EAAM,WAAW;AAAA,MACzB,OAAOA,EAAM,WAAW;AAAA,MAExB,UAAA,gBAAAzO,EAAC8N,IAAA,EAAS,GAAGzN,EAAA,CAAO;AAAA,IAAA;AAAA,EAAA;AAG1B;"}
|