@eka-care/medassist-widget-embed 0.2.105-dev.1 → 0.2.106-0

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.
@@ -18,7 +18,7 @@
18
18
  CORS mode — the browser would download it twice. -->
19
19
  <link
20
20
  rel="modulepreload"
21
- href="https://cdn.jsdelivr.net/npm/@eka-care/medassist-widget@0.1.127-dev.1/dist/medassist-widget.js"
21
+ href="https://cdn.jsdelivr.net/npm/@eka-care/medassist-widget@0.1.127-2/dist/medassist-widget.js"
22
22
  fetchpriority="high"
23
23
  crossorigin
24
24
  />
@@ -27,14 +27,14 @@
27
27
  <link
28
28
  rel="preload"
29
29
  as="style"
30
- href="https://cdn.jsdelivr.net/npm/@eka-care/medassist-widget@0.1.127-dev.1/dist/medassist-widget.css"
30
+ href="https://cdn.jsdelivr.net/npm/@eka-care/medassist-widget@0.1.127-2/dist/medassist-widget.css"
31
31
  onload="this.rel='stylesheet'"
32
32
  crossorigin
33
33
  />
34
34
  <noscript>
35
35
  <link
36
36
  rel="stylesheet"
37
- href="https://cdn.jsdelivr.net/npm/@eka-care/medassist-widget@0.1.127-dev.1/dist/medassist-widget.css"
37
+ href="https://cdn.jsdelivr.net/npm/@eka-care/medassist-widget@0.1.127-2/dist/medassist-widget.css"
38
38
  />
39
39
  </noscript>
40
40
 
@@ -149,7 +149,7 @@
149
149
  window.renderMedAssist would never be set. -->
150
150
  <script
151
151
  type="module"
152
- src="https://cdn.jsdelivr.net/npm/@eka-care/medassist-widget@0.1.127-dev.1/dist/medassist-widget.js"
152
+ src="https://cdn.jsdelivr.net/npm/@eka-care/medassist-widget@0.1.127-2/dist/medassist-widget.js"
153
153
  onload="init()"
154
154
  fetchpriority="high"
155
155
  crossorigin
package/dist/iframe.js CHANGED
@@ -1 +1 @@
1
- "use strict";(function(){const $=()=>{if(typeof document=="undefined")return null;const{currentScript:e}=document;if(e instanceof HTMLScriptElement)return e;const t=document.getElementsByTagName("script");return t.length?t[t.length-1]:null},C=e=>{if(e==="production"||e==="development"||e==="staging")return e};function z(e){if(!e)return;const t=e.mode==="dark"?"white":e.mode==="light"?"black":void 0;return{...e.background&&{background:e.background},...e.background_img&&{backgroundImage:e.background_img},...e.accent&&{primary:e.accent},...t&&{textColor:t},...e.mode&&{mode:e.mode},...e.header_tinted!==void 0&&{headerTinted:e.header_tinted},...e.title_img&&{titleImg:e.title_img},...e.tagline&&{tagline:e.tagline},...e.feature!==void 0&&{feature:e.feature}}}function S(e){if(!(!e||typeof document=="undefined"))try{const t=document.createElement("link");t.rel="preload",t.as="image",t.href=e,document.head.appendChild(t)}catch{const t=new Image;t.src=e}}async function F(e,t,r){var n;try{return await h(),await((n=window.fetchAgentConfig)===null||n===void 0?void 0:n.call(window,{agentId:t,serverUrl:e,environment:r,channel:"web"}))}catch{return}}const U="https://cdn.jsdelivr.net/npm/@eka-care/medassist-widget@0.1.127-dev.1/dist/",s=$(),b=(()=>{if(!s)return"";try{return new URL(".",s.src||window.location.href).href}catch{return""}})(),u=(()=>{if(!s)return U;const e=s.dataset.widgetAssets;if(e==="local")return`${b}src/`;if(e&&e.length>0)try{return new URL(e,b).href}catch{return e.endsWith("/")?e:`${e}/`}return U})(),a=`${u}medassist-widget.js`,g=`${u}medassist-widget.css`;let m=null,f=null;const i=new URLSearchParams(typeof window!="undefined"?window.location.search:""),A=i.get("agentId"),w=i.get("baseUrl")||"https://matrix.eka.care/reloaded";if(typeof document!="undefined"&&document.head){try{const e=new URL(u).origin,t=new URL(w).origin,r=document.createElement("link");if(r.rel="preconnect",r.href=e,r.crossOrigin="anonymous",document.head.appendChild(r),e!==t){const c=document.createElement("link");c.rel="preconnect",c.href=t,c.crossOrigin="anonymous",document.head.appendChild(c)}const n=document.createElement("link");n.rel="modulepreload",n.href=a,document.head.appendChild(n);const d=document.createElement("link");d.rel="preload",d.as="style",d.href=g,document.head.appendChild(d)}catch{}M(),h()}const L=A&&w?F(w,A,C(i.get("environment"))):Promise.resolve(void 0);if(typeof document!="undefined"&&document.head){const e=i.get("theme");if(e)try{const t=JSON.parse(e);t.backgroundImage&&S(t.backgroundImage)}catch{}L.then(t=>{var r;const n=(r=t==null?void 0:t.theme)===null||r===void 0?void 0:r.background_img;n&&S(n)})}const I=async()=>{var e,t,r,n,d,c,p;const P=i.get("agentId");if(!P){console.error("Agent ID is required in URL parameters");return}let v=i.get("title")||"Medi Clinic",y=i.get("iconUrl")||void 0;const x=i.get("context"),G=i.get("baseUrl")||"https://matrix.eka.care/reloaded",O=i.get("auth-token")||void 0;let k=i.get("resize")==="true"?!0:void 0;const J=(e=C(i.get("environment")))!==null&&e!==void 0?e:"production",E=i.get("connectivity"),N=E==="http_stream"||E==="socket"?E:void 0,_=i.get("theme")?(()=>{try{return JSON.parse(i.get("theme")||"{}")}catch{return}})():void 0,q=document.getElementById("root")||document.body;try{const[,,o]=await Promise.all([M(),h(),L]);if(!(window!=null&&window.renderMedAssist)||typeof(window==null?void 0:window.renderMedAssist)!="function")throw new Error("renderMedAssist is not available on window");let l,W,R,B,D=!1;o&&(v=(t=o==null?void 0:o.name)!==null&&t!==void 0?t:v,y=(n=(r=o==null?void 0:o.theme)===null||r===void 0?void 0:r.icon_img)!==null&&n!==void 0?n:y,l=z((d=o==null?void 0:o.theme)!==null&&d!==void 0?d:void 0),W=o==null?void 0:o.allowed,R=o==null?void 0:o.connectivity,B=o==null?void 0:o.initial_message,D=(p=(c=o==null?void 0:o.theme)===null||c===void 0?void 0:c.hide_watermark)!==null&&p!==void 0?p:!1,k=k||(o==null?void 0:o.resize)||void 0);const T={title:v,iconUrl:y,environment:J,connectionType:R||N||"socket",onClose:()=>{window.parent!==window&&window.parent.postMessage({type:"WIDGET_CLOSE"},"*")},context:x?JSON.parse(x):void 0,baseUrl:G,displayMode:"full",allowed:W,showCloseButton:!1,resize:k,initialMessage:B,hideWatermark:D,...O&&{authToken:O},theme:{...l!=null?l:{},..._!=null?_:{}}};window.renderMedAssist(q,P,T)}catch(o){throw console.error("Failed to initialize MedAssist widget",o),o}};async function M(){document.querySelector("link[data-medassist-style='true']")||(f||(f=new Promise((t,r)=>{const n=document.createElement("link");n.rel="stylesheet",n.href=g,n.setAttribute("data-medassist-style","true"),n.onload=()=>{t("")},n.onerror=()=>{r(new Error(`Failed to load ${g}`))},document.head.appendChild(n)})),await f)}function h(){return m||(m=new Promise((e,t)=>{const r=document.querySelector(`script[src="${a}"]`);if(r){if(r.dataset.loaded==="true"){e();return}r.addEventListener("load",()=>e()),r.addEventListener("error",d=>t(d.error||new Error("Unknown script loading error")));return}const n=document.createElement("script");n.src=a,n.type="module",n.async=!0,n.dataset.widget="medassist",n.onload=()=>{n.dataset.loaded="true",e()},n.onerror=d=>{if(d instanceof ErrorEvent&&d.error){t(d.error);return}t(new Error(`Failed to load ${a}`))},document.head.appendChild(n)})),m}if(typeof document!="undefined")if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",I);else try{I()}catch(e){console.error("Failed to initialize MedAssist widget",e)}})();
1
+ "use strict";(function(){const $=()=>{if(typeof document=="undefined")return null;const{currentScript:e}=document;if(e instanceof HTMLScriptElement)return e;const t=document.getElementsByTagName("script");return t.length?t[t.length-1]:null},C=e=>{if(e==="production"||e==="development"||e==="staging")return e};function z(e){if(!e)return;const t=e.mode==="dark"?"white":e.mode==="light"?"black":void 0;return{...e.background&&{background:e.background},...e.background_img&&{backgroundImage:e.background_img},...e.accent&&{primary:e.accent},...t&&{textColor:t},...e.mode&&{mode:e.mode},...e.header_tinted!==void 0&&{headerTinted:e.header_tinted},...e.title_img&&{titleImg:e.title_img},...e.tagline&&{tagline:e.tagline},...e.feature!==void 0&&{feature:e.feature}}}function S(e){if(!(!e||typeof document=="undefined"))try{const t=document.createElement("link");t.rel="preload",t.as="image",t.href=e,document.head.appendChild(t)}catch{const t=new Image;t.src=e}}async function F(e,t,r){var n;try{return await h(),await((n=window.fetchAgentConfig)===null||n===void 0?void 0:n.call(window,{agentId:t,serverUrl:e,environment:r,channel:"web"}))}catch{return}}const U="https://cdn.jsdelivr.net/npm/@eka-care/medassist-widget@0.1.127-2/dist/",s=$(),b=(()=>{if(!s)return"";try{return new URL(".",s.src||window.location.href).href}catch{return""}})(),u=(()=>{if(!s)return U;const e=s.dataset.widgetAssets;if(e==="local")return`${b}src/`;if(e&&e.length>0)try{return new URL(e,b).href}catch{return e.endsWith("/")?e:`${e}/`}return U})(),a=`${u}medassist-widget.js`,g=`${u}medassist-widget.css`;let m=null,f=null;const i=new URLSearchParams(typeof window!="undefined"?window.location.search:""),A=i.get("agentId"),w=i.get("baseUrl")||"https://matrix.eka.care/reloaded";if(typeof document!="undefined"&&document.head){try{const e=new URL(u).origin,t=new URL(w).origin,r=document.createElement("link");if(r.rel="preconnect",r.href=e,r.crossOrigin="anonymous",document.head.appendChild(r),e!==t){const c=document.createElement("link");c.rel="preconnect",c.href=t,c.crossOrigin="anonymous",document.head.appendChild(c)}const n=document.createElement("link");n.rel="modulepreload",n.href=a,document.head.appendChild(n);const d=document.createElement("link");d.rel="preload",d.as="style",d.href=g,document.head.appendChild(d)}catch{}M(),h()}const L=A&&w?F(w,A,C(i.get("environment"))):Promise.resolve(void 0);if(typeof document!="undefined"&&document.head){const e=i.get("theme");if(e)try{const t=JSON.parse(e);t.backgroundImage&&S(t.backgroundImage)}catch{}L.then(t=>{var r;const n=(r=t==null?void 0:t.theme)===null||r===void 0?void 0:r.background_img;n&&S(n)})}const I=async()=>{var e,t,r,n,d,c,p;const P=i.get("agentId");if(!P){console.error("Agent ID is required in URL parameters");return}let v=i.get("title")||"Medi Clinic",y=i.get("iconUrl")||void 0;const x=i.get("context"),G=i.get("baseUrl")||"https://matrix.eka.care/reloaded",O=i.get("auth-token")||void 0;let k=i.get("resize")==="true"?!0:void 0;const J=(e=C(i.get("environment")))!==null&&e!==void 0?e:"production",E=i.get("connectivity"),N=E==="http_stream"||E==="socket"?E:void 0,_=i.get("theme")?(()=>{try{return JSON.parse(i.get("theme")||"{}")}catch{return}})():void 0,q=document.getElementById("root")||document.body;try{const[,,o]=await Promise.all([M(),h(),L]);if(!(window!=null&&window.renderMedAssist)||typeof(window==null?void 0:window.renderMedAssist)!="function")throw new Error("renderMedAssist is not available on window");let l,W,R,B,D=!1;o&&(v=(t=o==null?void 0:o.name)!==null&&t!==void 0?t:v,y=(n=(r=o==null?void 0:o.theme)===null||r===void 0?void 0:r.icon_img)!==null&&n!==void 0?n:y,l=z((d=o==null?void 0:o.theme)!==null&&d!==void 0?d:void 0),W=o==null?void 0:o.allowed,R=o==null?void 0:o.connectivity,B=o==null?void 0:o.initial_message,D=(p=(c=o==null?void 0:o.theme)===null||c===void 0?void 0:c.hide_watermark)!==null&&p!==void 0?p:!1,k=k||(o==null?void 0:o.resize)||void 0);const T={title:v,iconUrl:y,environment:J,connectionType:R||N||"socket",onClose:()=>{window.parent!==window&&window.parent.postMessage({type:"WIDGET_CLOSE"},"*")},context:x?JSON.parse(x):void 0,baseUrl:G,displayMode:"full",allowed:W,showCloseButton:!1,resize:k,initialMessage:B,hideWatermark:D,...O&&{authToken:O},theme:{...l!=null?l:{},..._!=null?_:{}}};window.renderMedAssist(q,P,T)}catch(o){throw console.error("Failed to initialize MedAssist widget",o),o}};async function M(){document.querySelector("link[data-medassist-style='true']")||(f||(f=new Promise((t,r)=>{const n=document.createElement("link");n.rel="stylesheet",n.href=g,n.setAttribute("data-medassist-style","true"),n.onload=()=>{t("")},n.onerror=()=>{r(new Error(`Failed to load ${g}`))},document.head.appendChild(n)})),await f)}function h(){return m||(m=new Promise((e,t)=>{const r=document.querySelector(`script[src="${a}"]`);if(r){if(r.dataset.loaded==="true"){e();return}r.addEventListener("load",()=>e()),r.addEventListener("error",d=>t(d.error||new Error("Unknown script loading error")));return}const n=document.createElement("script");n.src=a,n.type="module",n.async=!0,n.dataset.widget="medassist",n.onload=()=>{n.dataset.loaded="true",e()},n.onerror=d=>{if(d instanceof ErrorEvent&&d.error){t(d.error);return}t(new Error(`Failed to load ${a}`))},document.head.appendChild(n)})),m}if(typeof document!="undefined")if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",I);else try{I()}catch(e){console.error("Failed to initialize MedAssist widget",e)}})();
package/dist/index.d.ts CHANGED
@@ -30,8 +30,6 @@ type AgentConfig = {
30
30
  tagline?: string;
31
31
  hide_watermark?: boolean;
32
32
  explicit_disclaimer?: boolean;
33
- /** When true, the widget asks for upfront consent once before the chat is usable. */
34
- upfront_consent?: boolean;
35
33
  /** Feature flag — currently gates the chat-history UI (session drawer + fullscreen sidebar). */
36
34
  feature?: boolean;
37
35
  };
@@ -66,7 +64,13 @@ type MedAssistInitConfig = {
66
64
  iconUrl?: string;
67
65
  baseUrl?: string;
68
66
  resize?: boolean;
69
- displayMode?: "full" | "widget";
67
+ displayMode?: "full" | "widget" | "side_panel";
68
+ /** Only relevant when displayMode is "side_panel". Whether the host page's own content is shifted aside ("push", default) or the panel floats on top of it ("overlay"). */
69
+ sidePanelMode?: "push" | "overlay";
70
+ /** Only relevant when displayMode is "side_panel". Fixed panel width in px (default 400, clamped 320-560). */
71
+ sidePanelWidth?: number;
72
+ /** Only relevant when displayMode is "side_panel". Which viewport edge the panel docks to. Defaults to "right", or "left" when the document is RTL. */
73
+ side?: "left" | "right";
70
74
  customLauncherStyles?: string;
71
75
  redirectUrl?: string;
72
76
  showCloseButton?: boolean;
@@ -79,7 +83,6 @@ type MedAssistInitConfig = {
79
83
  titleImg?: string;
80
84
  tagline?: string;
81
85
  explicitDisclaimer?: boolean;
82
- upfrontConsent?: boolean;
83
86
  feature?: boolean;
84
87
  };
85
88
  [key: string]: unknown;
@@ -96,6 +99,8 @@ declare function preloadImage(url: string): void;
96
99
  */
97
100
  type SynapseChannel = "widget" | "web" | "side_panel";
98
101
  declare function channelFromDisplayMode(displayMode: string | null | undefined): SynapseChannel;
102
+ /** Normalizes the `display-mode` attribute value to one of the three supported modes. */
103
+ declare function normalizeDisplayMode(value: string | null | undefined): "full" | "widget" | "side_panel";
99
104
  type NudgeApiResponse = {
100
105
  url_pattern?: {
101
106
  domain?: string;
@@ -214,6 +219,7 @@ declare class MedAssistWidgetLoader extends HTMLElement {
214
219
  private defaultIconUrl;
215
220
  private widgetLoaded;
216
221
  private displayMode;
222
+ private hostPushStyleEl;
217
223
  private reactRoot;
218
224
  private agentConfigPromise;
219
225
  private loading;
@@ -242,6 +248,16 @@ declare class MedAssistWidgetLoader extends HTMLElement {
242
248
  constructor();
243
249
  static get observedAttributes(): string[];
244
250
  connectedCallback(): void;
251
+ disconnectedCallback(): void;
252
+ /**
253
+ * Side-panel "push" mode: shifts the host page's own <body> aside via a
254
+ * margin injected into the host's real document.head (NOT the shadow root —
255
+ * this must be visible to the host page's own layout). Owns a single style
256
+ * element, toggled via a class on <body> so open/close is just a class flip
257
+ * once the CSS is in place. Fully removes both on revert so closing the
258
+ * widget leaves the host page pixel-identical to before it opened.
259
+ */
260
+ private applyHostPush;
245
261
  /** Run work when the browser is idle, falling back to a short timeout. */
246
262
  private scheduleIdle;
247
263
  attributeChangedCallback(name: string): void;
package/dist/index.js CHANGED
@@ -1,4 +1,12 @@
1
- "use strict";const getCurrentScript=()=>{if(typeof document=="undefined")return console.error("document is not defined"),null;const{currentScript:e}=document;if(e instanceof HTMLScriptElement)return e;const t=document.getElementsByTagName("script");return t.length?t[t.length-1]:null},getEnvironment=e=>{if(e==="production"||e==="development"||e==="staging")return e},scriptEl=getCurrentScript(),DEFAULT_WIDGET_ASSET_BASE=(()=>{var e;return!((e=scriptEl==null?void 0:scriptEl.src)===null||e===void 0)&&e.includes("@dev"),"https://cdn.jsdelivr.net/npm/@eka-care/medassist-widget@0.1.127-dev.1/dist/"})();var FeedbackTypeEnum;(function(e){e.DEFAULT="default",e.NPS="nps"})(FeedbackTypeEnum||(FeedbackTypeEnum={}));function mapAgentConfigThemeToWidgetTheme(e){if(!e)return;const t=e.mode==="dark"?"white":e.mode==="light"?"black":void 0;return{...e.background_img&&{backgroundImage:e.background_img},...e.accent&&{primary:e.accent},...t&&{textColor:t},...e.mode&&{mode:e.mode},...e.header_tinted!==void 0&&{headerTinted:e.header_tinted},...e.title_img&&{titleImg:e.title_img},...e.tagline&&{tagline:e.tagline},...e.hide_watermark&&{hideWatermark:e.hide_watermark},...e.explicit_disclaimer&&{explicitDisclaimer:e.explicit_disclaimer},...e.upfront_consent&&{upfrontConsent:e.upfront_consent},...e.feature!==void 0&&{feature:e.feature}}}function preloadImage(e){if(!(!e||typeof document=="undefined"))try{const t=document.createElement("link");t.rel="preload",t.as="image",t.href=e,document.head.appendChild(t)}catch{const t=new Image;t.src=e}}function channelFromDisplayMode(e){return e==="full"?"web":e==="side-panel"?"side_panel":"widget"}const NUDGE_STORAGE_KEY="eka-medassist-nudges",AGENT_CONFIG_CACHE_KEY="eka-medassist-agent-config";function readAgentConfigCache(e){try{const t=localStorage.getItem(AGENT_CONFIG_CACHE_KEY);return(t?JSON.parse(t):{})[e]}catch{return}}function writeAgentConfigCache(e,t){try{const i=localStorage.getItem(AGENT_CONFIG_CACHE_KEY),n=i?JSON.parse(i):{};n[e]={...n[e]||{},...t},localStorage.setItem(AGENT_CONFIG_CACHE_KEY,JSON.stringify(n))}catch{}}function getNudgeStore(){try{const e=localStorage.getItem(NUDGE_STORAGE_KEY);return e?JSON.parse(e):{}}catch{return{}}}function setNudgeStore(e){try{localStorage.setItem(NUDGE_STORAGE_KEY,JSON.stringify(e))}catch{}}function normalizePath(e){let t=e.replace(/\/+$/,"");return t.startsWith("/")||(t="/"+t),t||"/"}function getNudgePathCandidates(e){const t=e.split("/").filter(Boolean),i=[];for(let n=t.length;n>=0;n--)i.push(n===0?"/":"/"+t.slice(0,n).join("/"));return i}function findCachedNudgeForCandidates(e,t,i){const o=getNudgeStore()[e];if(!o)return null;const s=t.host,d=o[s];if(!d)return null;for(const r of i){if(d[r]!==void 0)return{domain:s,path:r,data:d[r]};const a=r==="/"?"/*":r+"/*";if(d[a]!==void 0)return{domain:s,path:a,data:d[a]}}return null}function findFreshCachedNudge(e,t,i){const n=findCachedNudgeForCandidates(e,t,i);if(!n)return null;const o=Math.floor(Date.now()/1e3);return n.data.expiry<=o?(clearNudgeForPath(e,n.domain,n.path),null):n}function clearNudgeForPath(e,t,i){const n=getNudgeStore(),o=n[e];!o||!o[t]||(delete o[t][i],setNudgeStore(n))}function storeNudgeResponse(e,t){var i,n,o,s;const d=(i=t==null?void 0:t.url_pattern)===null||i===void 0?void 0:i.domain,r=(n=t==null?void 0:t.url_pattern)===null||n===void 0?void 0:n.path;if(!(!((o=t.nudges)===null||o===void 0)&&o.length)||!t.expiry||!d||!r)return;const a=getNudgeStore();a[e]||(a[e]={}),a[e][d]||(a[e][d]={}),a[e][d][r]={nudges:t.nudges,expiry:t.expiry,delay:(s=t.delay)!==null&&s!==void 0?s:5},setNudgeStore(a)}const NUDGE_COOKIE_PREFIX="eka-nudge";function setNudgeCookie(e,t){const i=new Date(Date.now()+864e5).toUTCString();document.cookie=`${NUDGE_COOKIE_PREFIX}-${e}=${t}; expires=${i}; path=/; SameSite=Lax`}function getNudgeCookie(e){const t=document.cookie.split(";").map(n=>n.trim()).find(n=>n.startsWith(`${NUDGE_COOKIE_PREFIX}-${e}=`));if(!t)return null;const i=t.split("=")[1];return i==="open"||i==="closed"?i:null}const WIDGET_STORE_KEY_PREFIX="med-assist-store-";function readPersistedSessToken(e){var t,i;try{const n=sessionStorage.getItem(`${WIDGET_STORE_KEY_PREFIX}${e}`),o=n?(i=(t=JSON.parse(n))===null||t===void 0?void 0:t.state)===null||i===void 0?void 0:i.sessToken:void 0;return typeof o=="string"&&o?o:void 0}catch{return}}async function fetchNudgeData(e,t,i,n="widget"){const o=`${t}/med-assist/user-nudge`,s=[];typeof document!="undefined"&&document.querySelectorAll("meta").forEach(d=>{var r,a,p;const h=(r=d.getAttribute("name"))!==null&&r!==void 0?r:void 0,u=(a=d.getAttribute("property"))!==null&&a!==void 0?a:void 0,m=(p=d.getAttribute("content"))!==null&&p!==void 0?p:void 0;(h||u)&&s.push({name:h,property:u,content:m})});try{const d=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json","x-agent-id":e,"x-channel":n,referer:typeof window!="undefined"?window.location.href:"",...i&&{Authorization:`Bearer ${i}`}},body:JSON.stringify({meta_tags:s,url:typeof window!="undefined"?window.location.href:""})});return d.ok?await d.json():void 0}catch{return}}const globalMedAssistConfig={},getWidgetElement=()=>typeof document=="undefined"?null:document.querySelector("eka-medassist-widget");if(typeof window!="undefined"){const e=window;e.__ekaMedAssistConfig__=globalMedAssistConfig,e.EkaMedAssist={init(t){var i,n,o;Object.assign(globalMedAssistConfig,t);const s=getWidgetElement();if(s){if(t.agentId&&s.setAttribute("agent-id",t.agentId),t.authToken&&s.setAttribute("auth-token",t.authToken),t.title&&s.setAttribute("title",t.title),t.iconUrl&&s.setAttribute("icon-url",t.iconUrl),t.baseUrl&&s.setAttribute("base-url",t.baseUrl),t.resize!==void 0&&s.setAttribute("resize",String(t.resize)),(t.displayMode==="full"||t.displayMode==="widget")&&s.setAttribute("display-mode",t.displayMode),t.context)try{s.setAttribute("context",JSON.stringify(t.context))}catch{console.warn("Failed to stringify context passed to init")}typeof t.customLauncherStyles=="string"&&s.setAttribute("custom-launcher-styles",t.customLauncherStyles),t.redirectUrl&&s.setAttribute("redirect-url",t.redirectUrl),!((i=t.theme)===null||i===void 0)&&i.backgroundImage&&preloadImage(t.theme.backgroundImage),(o=(n=s).openFromBridge)===null||o===void 0||o.call(n)}}}}const scriptBaseUrl=(()=>{if(!scriptEl)return"";try{return new URL(".",scriptEl.src||window.location.href).href}catch{return""}})(),widgetAssetBaseUrl=(()=>{if(!scriptEl)return DEFAULT_WIDGET_ASSET_BASE;const e=scriptEl.dataset.widgetAssets;if(e==="local")return`${scriptBaseUrl}src/`;if(e&&e.length>0)try{return new URL(e,scriptBaseUrl).href}catch{return e.endsWith("/")?e:`${e}/`}return DEFAULT_WIDGET_ASSET_BASE})(),WIDGET_JS_URL=`${widgetAssetBaseUrl}medassist-widget.js`,WIDGET_CSS_URL=`${widgetAssetBaseUrl}medassist-widget.css`;let widgetModulePromise=null,widgetCssTextPromise=null;function getWidgetCssTextPromise(){return widgetCssTextPromise||(widgetCssTextPromise=fetch(WIDGET_CSS_URL).then(e=>{if(!e.ok)throw new Error(`Unable to fetch widget styles from ${WIDGET_CSS_URL}`);return e.text()})),widgetCssTextPromise}class MedAssistWidgetLoader extends HTMLElement{setLauncherState(t){var i;const n=(i=this.shadowRoot)===null||i===void 0?void 0:i.getElementById("medassist-open-btn");n&&(n.classList.toggle("loading",t==="loading"),n.classList.toggle("hidden",t==="open"),t==="loading"?n.setAttribute("aria-busy","true"):n.removeAttribute("aria-busy"))}getChannel(){const t=this.getAttribute("display-mode");if(t)return channelFromDisplayMode(t);const i=typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0;return channelFromDisplayMode(i==null?void 0:i.displayMode)}getAgentConfig(){var t;if(!this.agentConfigPromise){const i=(typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0)||{},n=i.baseUrl||this.getAttribute("base-url")||"https://matrix.eka.care/reloaded",o=i.agentId||this.getAttribute("agent-id")||"";if(!o)return Promise.resolve(void 0);const s=(t=getEnvironment(this.getAttribute("environment")))!==null&&t!==void 0?t:"production";this.agentConfigPromise=this.loadWidgetModule().then(d=>{var r;return(r=d.fetchAgentConfig)===null||r===void 0?void 0:r.call(d,{agentId:o,serverUrl:n,environment:s,channel:this.getChannel()})}).catch(()=>{this.agentConfigPromise=null})}return this.agentConfigPromise}constructor(){super(),this.reactRoot=null,this.agentConfigPromise=null,this.loading=!1,this.authPrefetchPromise=null,this.attachShadow({mode:"open"}),this.defaultIconUrl="https://cdn.eka.care/bot-icon.svg",this.widgetLoaded=!1,this.displayMode=this.getAttribute("display-mode")==="full"?"full":"widget",this.setupAuthExpirationListener()}static get observedAttributes(){return["icon-url","display-mode","custom-launcher-styles","redirect-url"]}connectedCallback(){this.displayMode==="full"?(this.initializeFullMode(),this.loadAndRender().catch(t=>{console.error("Failed to load MedAssist widget in full mode",t)})):(this.renderButton(),this.scheduleIdle(()=>{this.preloadWidgetAssets(),this.prefetchAuthTokens(),this.initNudge()}))}scheduleIdle(t){if(typeof window=="undefined"){t();return}const i=window.requestIdleCallback;typeof i=="function"?i(t,{timeout:3e3}):setTimeout(t,200)}attributeChangedCallback(t){if(t==="icon-url"&&this.displayMode==="widget"&&this.renderButton(),t==="display-mode"){const i=this.getAttribute("display-mode")==="full"?"full":"widget";i!==this.displayMode&&(this.displayMode=i,i==="full"?this.initializeFullMode():this.renderButton())}t==="custom-launcher-styles"&&this.applyCustomLauncherStyles()}preloadWidgetAssets(){getWidgetCssTextPromise(),this.loadWidgetModule(),this.preloadBackgroundImage()}prefetchAuthTokens(){var t;if(this.authPrefetchPromise)return this.authPrefetchPromise;const i=(typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0)||{},n=i.agentId||this.getAttribute("agent-id")||"";if(!n)return Promise.resolve(void 0);const o=i.authToken||this.getAttribute("auth-token")||void 0,s=i.baseUrl||this.getAttribute("base-url")||"https://matrix.eka.care/reloaded",d=(t=getEnvironment(this.getAttribute("environment")))!==null&&t!==void 0?t:"production";return this.authPrefetchPromise=this.loadWidgetModule().then(r=>{var a;return(a=r.prefetchAuth)===null||a===void 0?void 0:a.call(r,{agentId:n,authToken:o,serverUrl:s,environment:d,channel:this.getChannel()})}).catch(()=>{this.authPrefetchPromise=null}),this.authPrefetchPromise}async resolveSessToken(t){const i=readPersistedSessToken(t);if(i)return i;const n=await this.prefetchAuthTokens();return(n==null?void 0:n.sess_token)||readPersistedSessToken(t)}preloadBackgroundImage(){var t;const i=typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0,n=this.getAttribute("theme")?(()=>{try{return JSON.parse(this.getAttribute("theme")||"{}")}catch{return}})():void 0,o=(t=i==null?void 0:i.theme)===null||t===void 0?void 0:t.backgroundImage,s=n==null?void 0:n.backgroundImage;o&&preloadImage(o),s&&s!==o&&preloadImage(s),this.getAgentConfig().then(d=>{var r;const a=(r=d==null?void 0:d.theme)===null||r===void 0?void 0:r.background_img;a&&preloadImage(a)}).catch(()=>{})}setupAuthExpirationListener(){if(typeof window=="undefined")return;const t=i=>{var n;((n=i.data)===null||n===void 0?void 0:n.type)==="AUTH_EXPIRED"&&window.parent!==window&&window.parent.postMessage({type:"AUTH_EXPIRED",message:"Authentication expired"},"*")};window.addEventListener("message",t)}openFromBridge(){this.displayMode=this.getAttribute("display-mode")==="full"?"full":"widget",this.displayMode==="full"?this.initializeFullMode():this.renderButton(),this.loadAndRender().catch(t=>{console.error("Failed to open MedAssist widget from bridge",t)})}async initNudge(){var t,i,n,o;const s=typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0,d=(s==null?void 0:s.agentId)||this.getAttribute("agent-id")||"";if(!d)return;const r=await this.getAgentConfig();if(!(r!=null&&r.nudge))return;const a=(i=(t=r==null?void 0:r.theme)===null||t===void 0?void 0:t.nudge_color)!==null&&i!==void 0?i:"#ffffff",p=typeof window!="undefined"?window.location.href:"";let h;try{h=new URL(p)}catch{return}const u=getNudgePathCandidates(h.pathname),m=u.slice(0,1),v=u.slice(1);let f=findFreshCachedNudge(d,h,m);if(!f){const y=(s==null?void 0:s.baseUrl)||this.getAttribute("base-url")||"https://matrix.eka.care/reloaded",c=await this.resolveSessToken(d).catch(()=>{}),g=await fetchNudgeData(d,y,c,this.getChannel()).catch(()=>{});!((n=g==null?void 0:g.nudges)===null||n===void 0)&&n.length&&(storeNudgeResponse(d,g),f=findFreshCachedNudge(d,h,u))}if(f||(f=findFreshCachedNudge(d,h,v)),!f)return;const _=f.data.nudges[Math.floor(Math.random()*f.data.nudges.length)],b=(o=f.data.delay)!==null&&o!==void 0?o:5;setTimeout(()=>{this.showNudgePopup(_,a)},b*1e3)}showNudgePopup(t,i){var n,o;const s=this.shadowRoot;if(!s||!(!((n=s.getElementById("medassist-widget-root"))===null||n===void 0)&&n.classList.contains("hidden")))return;const r=((typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0)||{}).agentId||this.getAttribute("agent-id")||"";if(r&&getNudgeCookie(r)!==null||s.getElementById("medassist-nudge-popup"))return;const p=s.getElementById("medassist-open-btn"),h=p==null?void 0:p.getBoundingClientRect(),u=272,m=12,v=8,f=16,_=16;let b=window.innerWidth-u-m,y=76,c=u-f-v*2;if(h&&h.width>0){const A=h.left+h.width/2,w=A-u/2,x=window.innerWidth-u-m;b=Math.max(m,Math.min(w,x)),y=window.innerHeight-h.top+_,c=Math.max(f,Math.min(A-b-v,u-f-v*2))}const g=document.createElement("div");g.id="medassist-nudge-popup",g.innerHTML=`
1
+ "use strict";const getCurrentScript=()=>{if(typeof document=="undefined")return console.error("document is not defined"),null;const{currentScript:i}=document;if(i instanceof HTMLScriptElement)return i;const t=Array.from(document.getElementsByTagName("script")),e=t.find(o=>o.hasAttribute("data-widget-assets"));if(e)return e;const n=t.filter(o=>/(^|\/)index\.js(\?.*)?$/.test(o.src));return n.length?n[n.length-1]:t.length?t[t.length-1]:null},getEnvironment=i=>{if(i==="production"||i==="development"||i==="staging")return i},scriptEl=getCurrentScript(),DEFAULT_WIDGET_ASSET_BASE=(()=>{var i;return!((i=scriptEl==null?void 0:scriptEl.src)===null||i===void 0)&&i.includes("@dev"),"https://cdn.jsdelivr.net/npm/@eka-care/medassist-widget@0.1.127-2/dist/"})();var FeedbackTypeEnum;(function(i){i.DEFAULT="default",i.NPS="nps"})(FeedbackTypeEnum||(FeedbackTypeEnum={}));function mapAgentConfigThemeToWidgetTheme(i){if(!i)return;const t=i.mode==="dark"?"white":i.mode==="light"?"black":void 0;return{...i.background_img&&{backgroundImage:i.background_img},...i.accent&&{primary:i.accent},...t&&{textColor:t},...i.mode&&{mode:i.mode},...i.header_tinted!==void 0&&{headerTinted:i.header_tinted},...i.title_img&&{titleImg:i.title_img},...i.tagline&&{tagline:i.tagline},...i.hide_watermark&&{hideWatermark:i.hide_watermark},...i.explicit_disclaimer&&{explicitDisclaimer:i.explicit_disclaimer},...i.feature!==void 0&&{feature:i.feature}}}function preloadImage(i){if(!(!i||typeof document=="undefined"))try{const t=document.createElement("link");t.rel="preload",t.as="image",t.href=i,document.head.appendChild(t)}catch{const t=new Image;t.src=i}}function channelFromDisplayMode(i){return i==="full"?"web":i==="side_panel"?"side_panel":"widget"}function normalizeDisplayMode(i){return i==="full"?"full":i==="side_panel"?"side_panel":"widget"}const NUDGE_STORAGE_KEY="eka-medassist-nudges",AGENT_CONFIG_CACHE_KEY="eka-medassist-agent-config";function readAgentConfigCache(i){try{const t=localStorage.getItem(AGENT_CONFIG_CACHE_KEY);return(t?JSON.parse(t):{})[i]}catch{return}}function writeAgentConfigCache(i,t){try{const e=localStorage.getItem(AGENT_CONFIG_CACHE_KEY),n=e?JSON.parse(e):{};n[i]={...n[i]||{},...t},localStorage.setItem(AGENT_CONFIG_CACHE_KEY,JSON.stringify(n))}catch{}}function getNudgeStore(){try{const i=localStorage.getItem(NUDGE_STORAGE_KEY);return i?JSON.parse(i):{}}catch{return{}}}function setNudgeStore(i){try{localStorage.setItem(NUDGE_STORAGE_KEY,JSON.stringify(i))}catch{}}function normalizePath(i){let t=i.replace(/\/+$/,"");return t.startsWith("/")||(t="/"+t),t||"/"}function getNudgePathCandidates(i){const t=i.split("/").filter(Boolean),e=[];for(let n=t.length;n>=0;n--)e.push(n===0?"/":"/"+t.slice(0,n).join("/"));return e}function findCachedNudgeForCandidates(i,t,e){const o=getNudgeStore()[i];if(!o)return null;const s=t.host,r=o[s];if(!r)return null;for(const d of e){if(r[d]!==void 0)return{domain:s,path:d,data:r[d]};const a=d==="/"?"/*":d+"/*";if(r[a]!==void 0)return{domain:s,path:a,data:r[a]}}return null}function findFreshCachedNudge(i,t,e){const n=findCachedNudgeForCandidates(i,t,e);if(!n)return null;const o=Math.floor(Date.now()/1e3);return n.data.expiry<=o?(clearNudgeForPath(i,n.domain,n.path),null):n}function clearNudgeForPath(i,t,e){const n=getNudgeStore(),o=n[i];!o||!o[t]||(delete o[t][e],setNudgeStore(n))}function storeNudgeResponse(i,t){var e,n,o,s;const r=(e=t==null?void 0:t.url_pattern)===null||e===void 0?void 0:e.domain,d=(n=t==null?void 0:t.url_pattern)===null||n===void 0?void 0:n.path;if(!(!((o=t.nudges)===null||o===void 0)&&o.length)||!t.expiry||!r||!d)return;const a=getNudgeStore();a[i]||(a[i]={}),a[i][r]||(a[i][r]={}),a[i][r][d]={nudges:t.nudges,expiry:t.expiry,delay:(s=t.delay)!==null&&s!==void 0?s:5},setNudgeStore(a)}const NUDGE_COOKIE_PREFIX="eka-nudge";function setNudgeCookie(i,t){const e=new Date(Date.now()+864e5).toUTCString();document.cookie=`${NUDGE_COOKIE_PREFIX}-${i}=${t}; expires=${e}; path=/; SameSite=Lax`}function getNudgeCookie(i){const t=document.cookie.split(";").map(n=>n.trim()).find(n=>n.startsWith(`${NUDGE_COOKIE_PREFIX}-${i}=`));if(!t)return null;const e=t.split("=")[1];return e==="open"||e==="closed"?e:null}const WIDGET_STORE_KEY_PREFIX="med-assist-store-";function readPersistedSessToken(i){var t,e;try{const n=sessionStorage.getItem(`${WIDGET_STORE_KEY_PREFIX}${i}`),o=n?(e=(t=JSON.parse(n))===null||t===void 0?void 0:t.state)===null||e===void 0?void 0:e.sessToken:void 0;return typeof o=="string"&&o?o:void 0}catch{return}}async function fetchNudgeData(i,t,e,n="widget"){const o=`${t}/med-assist/user-nudge`,s=[];typeof document!="undefined"&&document.querySelectorAll("meta").forEach(r=>{var d,a,g;const c=(d=r.getAttribute("name"))!==null&&d!==void 0?d:void 0,h=(a=r.getAttribute("property"))!==null&&a!==void 0?a:void 0,p=(g=r.getAttribute("content"))!==null&&g!==void 0?g:void 0;(c||h)&&s.push({name:c,property:h,content:p})});try{const r=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json","x-agent-id":i,"x-channel":n,referer:typeof window!="undefined"?window.location.href:"",...e&&{Authorization:`Bearer ${e}`}},body:JSON.stringify({meta_tags:s,url:typeof window!="undefined"?window.location.href:""})});return r.ok?await r.json():void 0}catch{return}}const globalMedAssistConfig={},getWidgetElement=()=>typeof document=="undefined"?null:document.querySelector("eka-medassist-widget");if(typeof window!="undefined"){const i=window;i.__ekaMedAssistConfig__=globalMedAssistConfig,i.EkaMedAssist={init(t){var e,n,o;Object.assign(globalMedAssistConfig,t);const s=getWidgetElement();if(s){if(t.agentId&&s.setAttribute("agent-id",t.agentId),t.authToken&&s.setAttribute("auth-token",t.authToken),t.title&&s.setAttribute("title",t.title),t.iconUrl&&s.setAttribute("icon-url",t.iconUrl),t.baseUrl&&s.setAttribute("base-url",t.baseUrl),t.resize!==void 0&&s.setAttribute("resize",String(t.resize)),(t.displayMode==="full"||t.displayMode==="widget"||t.displayMode==="side_panel")&&s.setAttribute("display-mode",t.displayMode),t.sidePanelMode&&s.setAttribute("side-panel-mode",t.sidePanelMode),t.sidePanelWidth!==void 0&&s.setAttribute("side-panel-width",String(t.sidePanelWidth)),t.side&&s.setAttribute("side",t.side),t.context)try{s.setAttribute("context",JSON.stringify(t.context))}catch{console.warn("Failed to stringify context passed to init")}typeof t.customLauncherStyles=="string"&&s.setAttribute("custom-launcher-styles",t.customLauncherStyles),t.redirectUrl&&s.setAttribute("redirect-url",t.redirectUrl),!((e=t.theme)===null||e===void 0)&&e.backgroundImage&&preloadImage(t.theme.backgroundImage),(o=(n=s).openFromBridge)===null||o===void 0||o.call(n)}}}}const scriptBaseUrl=(()=>{if(!scriptEl)return"";try{return new URL(".",scriptEl.src||window.location.href).href}catch{return""}})(),widgetAssetBaseUrl=(()=>{if(!scriptEl)return DEFAULT_WIDGET_ASSET_BASE;const i=scriptEl.dataset.widgetAssets;if(i==="local")return`${scriptBaseUrl}src/`;if(i&&i.length>0)try{return new URL(i,scriptBaseUrl).href}catch{return i.endsWith("/")?i:`${i}/`}return DEFAULT_WIDGET_ASSET_BASE})(),WIDGET_JS_URL=`${widgetAssetBaseUrl}medassist-widget.js`,WIDGET_CSS_URL=`${widgetAssetBaseUrl}medassist-widget.css`;let widgetModulePromise=null,widgetCssTextPromise=null;function getWidgetCssTextPromise(){return widgetCssTextPromise||(widgetCssTextPromise=fetch(WIDGET_CSS_URL).then(i=>{if(!i.ok)throw new Error(`Unable to fetch widget styles from ${WIDGET_CSS_URL}`);return i.text()})),widgetCssTextPromise}class MedAssistWidgetLoader extends HTMLElement{setLauncherState(t){var e;const n=(e=this.shadowRoot)===null||e===void 0?void 0:e.getElementById("medassist-open-btn");n&&(n.classList.toggle("loading",t==="loading"),n.classList.toggle("hidden",t==="open"),t==="loading"?n.setAttribute("aria-busy","true"):n.removeAttribute("aria-busy"))}getChannel(){const t=this.getAttribute("display-mode");if(t)return channelFromDisplayMode(t);const e=typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0;return channelFromDisplayMode(e==null?void 0:e.displayMode)}getAgentConfig(){var t;if(!this.agentConfigPromise){const e=(typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0)||{},n=e.baseUrl||this.getAttribute("base-url")||"https://matrix.eka.care/reloaded",o=e.agentId||this.getAttribute("agent-id")||"";if(!o)return Promise.resolve(void 0);const s=(t=getEnvironment(this.getAttribute("environment")))!==null&&t!==void 0?t:"production";this.agentConfigPromise=this.loadWidgetModule().then(r=>{var d;return(d=r.fetchAgentConfig)===null||d===void 0?void 0:d.call(r,{agentId:o,serverUrl:n,environment:s,channel:this.getChannel()})}).catch(()=>{this.agentConfigPromise=null})}return this.agentConfigPromise}constructor(){super(),this.hostPushStyleEl=null,this.reactRoot=null,this.agentConfigPromise=null,this.loading=!1,this.authPrefetchPromise=null,this.attachShadow({mode:"open"}),this.defaultIconUrl="https://cdn.eka.care/bot-icon.svg",this.widgetLoaded=!1,this.displayMode=normalizeDisplayMode(this.getAttribute("display-mode")),this.setupAuthExpirationListener()}static get observedAttributes(){return["icon-url","display-mode","custom-launcher-styles","redirect-url","side-panel-mode","side-panel-width","side"]}connectedCallback(){this.displayMode==="full"?(this.initializeFullMode(),this.loadAndRender().catch(t=>{console.error("Failed to load MedAssist widget in full mode",t)})):(this.renderButton(),this.scheduleIdle(()=>{this.preloadWidgetAssets(),this.prefetchAuthTokens(),this.initNudge()}))}disconnectedCallback(){var t,e,n;(t=this.reactRoot)===null||t===void 0||t.unmount(),this.reactRoot=null,(e=document.body)===null||e===void 0||e.classList.remove("eka-medassist-pushed"),(n=this.hostPushStyleEl)===null||n===void 0||n.remove(),this.hostPushStyleEl=null}applyHostPush(t,e,n){if(typeof document=="undefined")return;this.hostPushStyleEl||(this.hostPushStyleEl=document.createElement("style"),this.hostPushStyleEl.setAttribute("data-medassist-side-panel-push","true"),document.head.appendChild(this.hostPushStyleEl));const o=n==="left"?"margin-left":"margin-right";this.hostPushStyleEl.textContent=`
2
+ body.eka-medassist-pushed {
3
+ ${o}: ${e}px;
4
+ transition: margin 300ms ease;
5
+ }
6
+ @media (prefers-reduced-motion: reduce) {
7
+ body.eka-medassist-pushed { transition: none !important; }
8
+ }
9
+ `,document.body.classList.toggle("eka-medassist-pushed",t),t||(document.body.classList.remove("eka-medassist-pushed"),this.hostPushStyleEl.remove(),this.hostPushStyleEl=null)}scheduleIdle(t){if(typeof window=="undefined"){t();return}const e=window.requestIdleCallback;typeof e=="function"?e(t,{timeout:3e3}):setTimeout(t,200)}attributeChangedCallback(t){if(t==="icon-url"&&this.displayMode!=="full"&&this.renderButton(),t==="display-mode"){const e=normalizeDisplayMode(this.getAttribute("display-mode"));e!==this.displayMode&&(this.displayMode=e,e==="full"?this.initializeFullMode():this.renderButton())}t==="custom-launcher-styles"&&this.applyCustomLauncherStyles()}preloadWidgetAssets(){getWidgetCssTextPromise(),this.loadWidgetModule(),this.preloadBackgroundImage()}prefetchAuthTokens(){var t;if(this.authPrefetchPromise)return this.authPrefetchPromise;const e=(typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0)||{},n=e.agentId||this.getAttribute("agent-id")||"";if(!n)return Promise.resolve(void 0);const o=e.authToken||this.getAttribute("auth-token")||void 0,s=e.baseUrl||this.getAttribute("base-url")||"https://matrix.eka.care/reloaded",r=(t=getEnvironment(this.getAttribute("environment")))!==null&&t!==void 0?t:"production";return this.authPrefetchPromise=this.loadWidgetModule().then(d=>{var a;return(a=d.prefetchAuth)===null||a===void 0?void 0:a.call(d,{agentId:n,authToken:o,serverUrl:s,environment:r,channel:this.getChannel()})}).catch(()=>{this.authPrefetchPromise=null}),this.authPrefetchPromise}async resolveSessToken(t){const e=readPersistedSessToken(t);if(e)return e;const n=await this.prefetchAuthTokens();return(n==null?void 0:n.sess_token)||readPersistedSessToken(t)}preloadBackgroundImage(){var t;const e=typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0,n=this.getAttribute("theme")?(()=>{try{return JSON.parse(this.getAttribute("theme")||"{}")}catch{return}})():void 0,o=(t=e==null?void 0:e.theme)===null||t===void 0?void 0:t.backgroundImage,s=n==null?void 0:n.backgroundImage;o&&preloadImage(o),s&&s!==o&&preloadImage(s),this.getAgentConfig().then(r=>{var d;const a=(d=r==null?void 0:r.theme)===null||d===void 0?void 0:d.background_img;a&&preloadImage(a)}).catch(()=>{})}setupAuthExpirationListener(){if(typeof window=="undefined")return;const t=e=>{var n;((n=e.data)===null||n===void 0?void 0:n.type)==="AUTH_EXPIRED"&&window.parent!==window&&window.parent.postMessage({type:"AUTH_EXPIRED",message:"Authentication expired"},"*")};window.addEventListener("message",t)}openFromBridge(){this.displayMode=normalizeDisplayMode(this.getAttribute("display-mode")),this.displayMode==="full"?this.initializeFullMode():this.renderButton(),this.loadAndRender().catch(t=>{console.error("Failed to open MedAssist widget from bridge",t)})}async initNudge(){var t,e,n,o;const s=typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0,r=(s==null?void 0:s.agentId)||this.getAttribute("agent-id")||"";if(!r)return;const d=await this.getAgentConfig();if(!(d!=null&&d.nudge))return;const a=(e=(t=d==null?void 0:d.theme)===null||t===void 0?void 0:t.nudge_color)!==null&&e!==void 0?e:"#ffffff",g=typeof window!="undefined"?window.location.href:"";let c;try{c=new URL(g)}catch{return}const h=getNudgePathCandidates(c.pathname),p=h.slice(0,1),m=h.slice(1);let f=findFreshCachedNudge(r,c,p);if(!f){const v=(s==null?void 0:s.baseUrl)||this.getAttribute("base-url")||"https://matrix.eka.care/reloaded",y=await this.resolveSessToken(r).catch(()=>{}),l=await fetchNudgeData(r,v,y,this.getChannel()).catch(()=>{});!((n=l==null?void 0:l.nudges)===null||n===void 0)&&n.length&&(storeNudgeResponse(r,l),f=findFreshCachedNudge(r,c,h))}if(f||(f=findFreshCachedNudge(r,c,m)),!f)return;const w=f.data.nudges[Math.floor(Math.random()*f.data.nudges.length)],b=(o=f.data.delay)!==null&&o!==void 0?o:5;setTimeout(()=>{this.showNudgePopup(w,a)},b*1e3)}showNudgePopup(t,e){var n,o;const s=this.shadowRoot;if(!s||!(!((n=s.getElementById("medassist-widget-root"))===null||n===void 0)&&n.classList.contains("hidden")))return;const d=((typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0)||{}).agentId||this.getAttribute("agent-id")||"";if(d&&getNudgeCookie(d)!==null||s.getElementById("medassist-nudge-popup"))return;const g=s.getElementById("medassist-open-btn"),c=g==null?void 0:g.getBoundingClientRect(),h=272,p=12,m=8,f=16,w=16;let b=window.innerWidth-h-p,v=76,y=h-f-m*2;if(c&&c.width>0){const A=c.left+c.width/2,S=A-h/2,C=window.innerWidth-h-p;b=Math.max(p,Math.min(S,C)),v=window.innerHeight-c.top+w,y=Math.max(f,Math.min(A-b-m,h-f-m*2))}const l=document.createElement("div");l.id="medassist-nudge-popup",l.innerHTML=`
2
10
  <style>
3
11
  @keyframes nudge-slide-up {
4
12
  from { opacity: 0; transform: translateY(12px) scale(0.97); }
@@ -6,10 +14,10 @@
6
14
  }
7
15
  #medassist-nudge-popup {
8
16
  position: fixed;
9
- bottom: ${y}px;
17
+ bottom: ${v}px;
10
18
  left: ${b}px;
11
- width: ${u}px;
12
- background: ${i};
19
+ width: ${h}px;
20
+ background: ${e};
13
21
  border-radius: 16px;
14
22
  box-shadow: 0 8px 32px rgba(0,0,0,0.14), 0 2px 8px rgba(0,0,0,0.08);
15
23
  padding: 16px 16px 14px 16px;
@@ -26,10 +34,10 @@
26
34
  content: '';
27
35
  position: absolute;
28
36
  bottom: -8px;
29
- left: ${c}px;
37
+ left: ${y}px;
30
38
  width: 16px;
31
39
  height: 10px;
32
- background: ${i};
40
+ background: ${e};
33
41
  clip-path: polygon(0 0, 100% 0, 50% 100%);
34
42
  }
35
43
  #medassist-nudge-popup {
@@ -79,7 +87,7 @@
79
87
  <p class="nudge-text">${t.replace(/</g,"&lt;").replace(/>/g,"&gt;")}</p>
80
88
  <button class="nudge-close" aria-label="Dismiss">&#x2715;</button>
81
89
  </div>
82
- `,(o=g.querySelector(".nudge-close"))===null||o===void 0||o.addEventListener("click",A=>{A.stopPropagation(),r&&setNudgeCookie(r,"closed"),this.dismissNudgePopup()}),g.addEventListener("click",()=>{r&&setNudgeCookie(r,"closed"),this.dismissNudgePopup(),this.loadAndRender()}),s.appendChild(g)}dismissNudgePopup(){var t;const i=(t=this.shadowRoot)===null||t===void 0?void 0:t.getElementById("medassist-nudge-popup");i==null||i.remove()}applyCustomLauncherStyles(){var t;const i=this.shadowRoot;if(!i||this.displayMode!=="widget")return;const n=i.querySelector('style[data-medassist-custom-launcher="true"]'),o=(t=this.getAttribute("custom-launcher-styles"))!==null&&t!==void 0?t:"";if(!o){n==null||n.remove();return}if(n){n.textContent=o;return}const s=document.createElement("style");s.setAttribute("data-medassist-custom-launcher","true"),s.textContent=o,i.appendChild(s)}renderButton(){var t;const i=this.getAttribute("icon-url")||this.defaultIconUrl,n=this.shadowRoot;if(!n){console.error("Shadow root was not created");return}if(!n.querySelector("button"))n.innerHTML=`
90
+ `,(o=l.querySelector(".nudge-close"))===null||o===void 0||o.addEventListener("click",A=>{A.stopPropagation(),d&&setNudgeCookie(d,"closed"),this.dismissNudgePopup()}),l.addEventListener("click",()=>{d&&setNudgeCookie(d,"closed"),this.dismissNudgePopup(),this.loadAndRender()}),s.appendChild(l)}dismissNudgePopup(){var t;const e=(t=this.shadowRoot)===null||t===void 0?void 0:t.getElementById("medassist-nudge-popup");e==null||e.remove()}applyCustomLauncherStyles(){var t;const e=this.shadowRoot;if(!e||this.displayMode==="full")return;const n=e.querySelector('style[data-medassist-custom-launcher="true"]'),o=(t=this.getAttribute("custom-launcher-styles"))!==null&&t!==void 0?t:"";if(!o){n==null||n.remove();return}if(n){n.textContent=o;return}const s=document.createElement("style");s.setAttribute("data-medassist-custom-launcher","true"),s.textContent=o,e.appendChild(s)}renderButton(){var t;const e=this.getAttribute("icon-url")||this.defaultIconUrl,n=this.shadowRoot;if(!n){console.error("Shadow root was not created");return}if(!n.querySelector("button"))n.innerHTML=`
83
91
  <style>
84
92
  #medassist-open-btn {
85
93
  width: 60px;
@@ -149,11 +157,11 @@
149
157
  </style>
150
158
 
151
159
  <button id="medassist-open-btn">
152
- <img src="${i}" alt="MedAssist Icon">
160
+ <img src="${e}" alt="MedAssist Icon">
153
161
  <span id="medassist-loader" aria-hidden="true"></span>
154
162
  </button>
155
163
  <div id="medassist-widget-root" class="hidden"></div>
156
- `,(t=n.getElementById("medassist-open-btn"))===null||t===void 0||t.addEventListener("click",()=>{const s=((typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0)||{}).agentId||this.getAttribute("agent-id")||"";s&&setNudgeCookie(s,"closed"),this.dismissNudgePopup(),this.loadAndRender()});else{const o=n.querySelector("#medassist-open-btn img");o&&(o.src=i)}this.applyCustomLauncherStyles()}initializeFullMode(){const t=this.shadowRoot;if(!t){console.error("Shadow root is not available");return}t.getElementById("medassist-widget-root")||(t.innerHTML=`
164
+ `,(t=n.getElementById("medassist-open-btn"))===null||t===void 0||t.addEventListener("click",()=>{const s=((typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0)||{}).agentId||this.getAttribute("agent-id")||"";s&&setNudgeCookie(s,"closed"),this.dismissNudgePopup(),this.loadAndRender()});else{const o=n.querySelector("#medassist-open-btn img");o&&(o.src=e)}this.applyCustomLauncherStyles()}initializeFullMode(){const t=this.shadowRoot;if(!t){console.error("Shadow root is not available");return}t.getElementById("medassist-widget-root")||(t.innerHTML=`
157
165
  <style>
158
166
  :host {
159
167
  display: block;
@@ -170,4 +178,4 @@
170
178
  }
171
179
  </style>
172
180
  <div id="medassist-widget-root"></div>
173
- `)}async loadAndRender(){var t,i;const n=this.shadowRoot;if(!n){console.error("Shadow root is not available");return}if(this.loading)return;this.prefetchAuthTokens(),this.style.display="";const o=n.getElementById("medassist-widget-root"),s=this.getAttribute("agent-id");let d=this.getAttribute("icon-url")||this.defaultIconUrl;const r=(t=getEnvironment(this.getAttribute("environment")))!==null&&t!==void 0?t:"production",a=this.getAttribute("connectivity"),p=a==="http_stream"||a==="socket"?a:void 0,h=this.getAttribute("force-start")==="true";let u=this.getAttribute("title")||"Medi Clinic";const m=this.getAttribute("base-url")||"https://matrix.eka.care/reloaded",f=this.getAttribute("display-mode")==="full"?"full":"widget",_=this.getAttribute("context")?JSON.parse(this.getAttribute("context")||"{}"):void 0,b=this.getAttribute("theme")?(()=>{try{return JSON.parse(this.getAttribute("theme")||"{}")}catch{return}})():void 0,y=this.getAttribute("feedback")?(()=>{try{return JSON.parse(this.getAttribute("feedback")||"{}")}catch{return}})():void 0,c=(typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0)||{},g={..._||{},...c.context||{}},A=c.authToken||this.getAttribute("auth-token")||void 0,w=c.agentId||s,x=c.baseUrl||m,k=typeof window!="undefined"?(i=window.EkaMedAssist)===null||i===void 0?void 0:i.onClose:void 0,z=this.getAttribute("redirect-url")||void 0,C=c.redirectUrl||z,F=!!C||c.showCloseButton===!0;if(!w){console.error("Agent ID is required");return}if(!o){console.error("Widget root element is missing");return}this.loading=!0,this.setLauncherState("loading"),o.classList.remove("hidden");let L,P,U,N=!1,R,T=!1,S;const B=l=>{var M,E,I;u=l.name||u,d=((M=l.theme)===null||M===void 0?void 0:M.icon_img)||d,L=mapAgentConfigThemeToWidgetTheme(l.theme||void 0),P=l.allowed,U=l.connectivity,N=l.resize||(c==null?void 0:c.resize)||!1,R=l.initial_message,T=(I=(E=l.theme)===null||E===void 0?void 0:E.hide_watermark)!==null&&I!==void 0?I:!1,S=l.feedback},W=readAgentConfigCache(w);if(W)B(W),this.getAgentConfig().then(l=>{l&&writeAgentConfigCache(w,l)}).catch(()=>{});else try{const l=await this.getAgentConfig();l&&(writeAgentConfigCache(w,l),B(l))}catch{}const O=p||U||"socket",$={title:c.title||u,iconUrl:d||c.iconUrl,showCloseButton:F,allowed:P,environment:r,connectionType:O,onClose:()=>{var l;if((l=this.reactRoot)===null||l===void 0||l.unmount(),this.reactRoot=null,k&&typeof k=="function"&&k(),C){window.location.href=C;return}f==="full"?this.style.display="none":(this.setLauncherState("idle"),o.classList.add("hidden"))},baseUrl:x,context:g,displayMode:f,resize:N||this.getAttribute("resize")==="true",authToken:A,force:h,initialMessage:R,hideWatermark:T,...(y||S)&&{feedback:y||S},theme:{...L||{},...b||{},...c.theme||{}}},D=window;if(this.widgetLoaded){this.reactRoot=D.renderMedAssist(o,w,$),this.setLauncherState("open"),this.loading=!1;return}try{const[,l]=await Promise.all([this.loadWidgetCss(),this.loadWidgetModule()]);this.reactRoot=l.renderMedAssist(o,w,$),this.widgetLoaded=!0,this.setLauncherState("open")}catch(l){console.error("Failed to load MedAssist widget",l),this.setLauncherState("idle"),o.classList.add("hidden")}finally{this.loading=!1}}async loadWidgetCss(){const t=this.shadowRoot;if(!t)throw new Error("Shadow root is not available");if(t.querySelector("[data-medassist-style='true']"))return;const i=await getWidgetCssTextPromise(),n=document.createElement("style");n.setAttribute("data-medassist-style","true"),n.textContent=i,t.appendChild(n)}loadWidgetModule(){return widgetModulePromise||(widgetModulePromise=import(WIDGET_JS_URL)),widgetModulePromise}}customElements.define("eka-medassist-widget",MedAssistWidgetLoader);
181
+ `)}async loadAndRender(){var t,e,n;const o=this.shadowRoot;if(!o){console.error("Shadow root is not available");return}if(this.loading)return;this.prefetchAuthTokens(),this.style.display="";const s=o.getElementById("medassist-widget-root"),r=this.getAttribute("agent-id");let d=this.getAttribute("icon-url")||this.defaultIconUrl;const a=(t=getEnvironment(this.getAttribute("environment")))!==null&&t!==void 0?t:"production",g=this.getAttribute("connectivity"),c=g==="http_stream"||g==="socket"?g:void 0,h=this.getAttribute("force-start")==="true";let p=this.getAttribute("title")||"Medi Clinic";const m=this.getAttribute("base-url")||"https://matrix.eka.care/reloaded",f=this.getAttribute("display-mode"),w=normalizeDisplayMode(f),b=this.getAttribute("context")?JSON.parse(this.getAttribute("context")||"{}"):void 0,v=this.getAttribute("theme")?(()=>{try{return JSON.parse(this.getAttribute("theme")||"{}")}catch{return}})():void 0,y=this.getAttribute("feedback")?(()=>{try{return JSON.parse(this.getAttribute("feedback")||"{}")}catch{return}})():void 0,l=(typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0)||{},A=this.getAttribute("side-panel-mode"),S=l.sidePanelMode||(A==="overlay"?"overlay":"push"),C=this.getAttribute("side-panel-width"),F=(e=l.sidePanelWidth)!==null&&e!==void 0?e:C?Number(C):void 0,O=l.side||this.getAttribute("side")||(typeof document!="undefined"&&document.dir==="rtl"?"left":"right"),D={...b||{},...l.context||{}},H=l.authToken||this.getAttribute("auth-token")||void 0,_=l.agentId||r,J=l.baseUrl||m,M=typeof window!="undefined"?(n=window.EkaMedAssist)===null||n===void 0?void 0:n.onClose:void 0,j=this.getAttribute("redirect-url")||void 0,E=l.redirectUrl||j,G=!!E||l.showCloseButton===!0;if(!_){console.error("Agent ID is required");return}if(!s){console.error("Widget root element is missing");return}this.loading=!0,this.setLauncherState("loading"),s.classList.remove("hidden");let L,U,R,N=!1,T,W=!1,P;const B=u=>{var x,k,I;p=u.name||p,d=((x=u.theme)===null||x===void 0?void 0:x.icon_img)||d,L=mapAgentConfigThemeToWidgetTheme(u.theme||void 0),U=u.allowed,R=u.connectivity,N=u.resize||(l==null?void 0:l.resize)||!1,T=u.initial_message,W=(I=(k=u.theme)===null||k===void 0?void 0:k.hide_watermark)!==null&&I!==void 0?I:!1,P=u.feedback},$=readAgentConfigCache(_);if($)B($),this.getAgentConfig().then(u=>{u&&writeAgentConfigCache(_,u)}).catch(()=>{});else try{const u=await this.getAgentConfig();u&&(writeAgentConfigCache(_,u),B(u))}catch{}const q=c||R||"socket",z={title:l.title||p,iconUrl:d||l.iconUrl,showCloseButton:G,allowed:U,environment:a,connectionType:q,onClose:()=>{var u;if((u=this.reactRoot)===null||u===void 0||u.unmount(),this.reactRoot=null,M&&typeof M=="function"&&M(),E){window.location.href=E;return}w==="full"?this.style.display="none":(this.setLauncherState("idle"),s.classList.add("hidden"))},baseUrl:J,context:D,displayMode:w,sidePanelMode:S,sidePanelWidth:F,side:O,onSidePanelPushChange:(u,x,k)=>this.applyHostPush(u,x,k),resize:N||this.getAttribute("resize")==="true",authToken:H,force:h,initialMessage:T,hideWatermark:W,...(y||P)&&{feedback:y||P},theme:{...L||{},...v||{},...l.theme||{}}},X=window;if(this.widgetLoaded){this.reactRoot=X.renderMedAssist(s,_,z),this.setLauncherState("open"),this.loading=!1;return}try{const[,u]=await Promise.all([this.loadWidgetCss(),this.loadWidgetModule()]);this.reactRoot=u.renderMedAssist(s,_,z),this.widgetLoaded=!0,this.setLauncherState("open")}catch(u){console.error("Failed to load MedAssist widget",u),this.setLauncherState("idle"),s.classList.add("hidden")}finally{this.loading=!1}}async loadWidgetCss(){const t=this.shadowRoot;if(!t)throw new Error("Shadow root is not available");if(t.querySelector("[data-medassist-style='true']"))return;const e=await getWidgetCssTextPromise(),n=document.createElement("style");n.setAttribute("data-medassist-style","true"),n.textContent=e,t.appendChild(n)}loadWidgetModule(){return widgetModulePromise||(widgetModulePromise=import(WIDGET_JS_URL)),widgetModulePromise}}customElements.define("eka-medassist-widget",MedAssistWidgetLoader);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eka-care/medassist-widget-embed",
3
- "version": "0.2.105-dev.1",
3
+ "version": "0.2.106-0",
4
4
  "description": "Embeddable MedAssist widget loader built with Web Components.",
5
5
  "author": "Geethanjali S",
6
6
  "license": "MIT",