@eka-care/medassist-widget-embed 0.2.106-1 → 0.2.106-3

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/README.md CHANGED
@@ -57,7 +57,10 @@ The widget appears as a floating button; clicking it loads and opens the chat.
57
57
  - **`icon-url`** – Custom icon URL for the widget button (default: Eka CDN icon)
58
58
  - **`title`** – Widget title
59
59
  - **`base-url`** – Base URL for API/agent config
60
- - **`display-mode`** – `"widget"` (floating button) or `"full"` (inline full view)
60
+ - **`display-mode`** – `"widget"` (floating button), `"full"` (inline full view) or `"side_panel"` (docked panel, see [Side panel mode](#side-panel-mode))
61
+ - **`side-panel-mode`** – `"push"` (default) or `"overlay"`; only used with `display-mode="side_panel"`
62
+ - **`side-panel-width`** – panel width in px, clamped to 320–560 (default 400); side panel only
63
+ - **`side`** – `"right"` (default) or `"left"`; defaults to `"left"` on RTL documents; side panel only
61
64
  - **`context`** – JSON string of context key-value pairs
62
65
 
63
66
  ### Programmatic config with `EkaMedAssist.init()`
@@ -117,6 +120,73 @@ window.EkaMedAssist.init({
117
120
 
118
121
  This only affects the launcher button — the chat panel that opens on click is unaffected.
119
122
 
123
+ ### Side panel mode
124
+
125
+ `display-mode="side_panel"` docks the chat to a viewport edge at a fixed width instead of floating it. On mobile-width viewports the widget falls back to its mobile layout, as with every other mode.
126
+
127
+ ```html
128
+ <eka-medassist-widget
129
+ agent-id="your-agent-id"
130
+ display-mode="side_panel"
131
+ side-panel-mode="push"
132
+ side-panel-width="400"
133
+ side="right"></eka-medassist-widget>
134
+ ```
135
+
136
+ `side-panel-mode` picks how the panel relates to your page:
137
+
138
+ - **`overlay`** – the panel floats on top of the page. Nothing on your page moves.
139
+ - **`push`** (default) – the page is shifted aside so the panel does not cover it. On open the loader injects a stylesheet into your document `<head>` and adds the `eka-medassist-pushed` class to `<body>`; on close both are removed again, leaving the page exactly as it was.
140
+
141
+ The injected stylesheet does two things:
142
+
143
+ ```css
144
+ body.eka-medassist-pushed { margin-right: 400px; transition: margin 300ms ease; } /* margin-left when side="left" */
145
+ body.eka-medassist-pushed > * { max-width: 100%; }
146
+ ```
147
+
148
+ The margin reflows normal in-flow content. The `max-width` cap makes viewport-sized app roots (`width: 100vw`, Tailwind `w-screen`) that are **direct children of `<body>`** shrink with `<body>` instead of sliding under the panel. It does not touch `position: fixed` elements, and a `min-width` you set still wins.
149
+
150
+ If your viewport-sized root sits inside a wrapper element, the cap does not reach it. Either size it relative to its parent (`w-full` instead of `w-screen`), or subtract the panel width explicitly:
151
+
152
+ ```css
153
+ /* An app shell that must stay 100vw when the panel is closed */
154
+ .app-shell {
155
+ width: calc(100vw - var(--eka-medassist-panel-width, 0px));
156
+ transition: width 300ms ease;
157
+ }
158
+ ```
159
+
160
+ #### What push cannot move, and the hooks to handle it
161
+
162
+ `position: fixed` elements (sticky headers, banners, `inset: 0` overlays) are positioned against the viewport, so no outside stylesheet can move them. While the panel is open the loader publishes what it did so your own CSS or JS can follow:
163
+
164
+ - `body.eka-medassist-pushed` – class on `<body>` while pushed.
165
+ - `--eka-medassist-panel-width` – custom property on `<html>`, e.g. `400px`. Removed on close.
166
+ - `--eka-medassist-panel-side` – custom property on `<html>`, `right` or `left`. Removed on close.
167
+ - `eka-medassist:side-panel-push` – `window` event, `detail: { pushed: boolean, width: number, side: "left" | "right" }`. Fired on open (`pushed: true`) and close (`pushed: false`).
168
+ - `window.EkaMedAssist.onSidePanelPushChange(pushed, widthPx, side)` – same signal as a callback, alongside `EkaMedAssist.onClose`.
169
+
170
+ Give the custom property a `0px` fallback so the same rule is correct while the panel is closed:
171
+
172
+ ```css
173
+ /* A fixed header that should stop at the panel edge instead of running under it */
174
+ .site-header {
175
+ position: fixed;
176
+ top: 0;
177
+ left: 0;
178
+ right: var(--eka-medassist-panel-width, 0px);
179
+ transition: right 300ms ease;
180
+ }
181
+ ```
182
+
183
+ ```javascript
184
+ window.addEventListener("eka-medassist:side-panel-push", (e) => {
185
+ const { pushed, width, side } = e.detail;
186
+ // e.g. store in app state and offset fixed chrome / recompute a canvas
187
+ });
188
+ ```
189
+
120
190
  ## How it works
121
191
 
122
192
  1. **Initial load** – The script registers the custom element `<eka-medassist-widget>`.
@@ -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-4/dist/medassist-widget.js"
21
+ href="https://cdn.jsdelivr.net/npm/@eka-care/medassist-widget@0.1.127-6/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-4/dist/medassist-widget.css"
30
+ href="https://cdn.jsdelivr.net/npm/@eka-care/medassist-widget@0.1.127-6/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-4/dist/medassist-widget.css"
37
+ href="https://cdn.jsdelivr.net/npm/@eka-care/medassist-widget@0.1.127-6/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-4/dist/medassist-widget.js"
152
+ src="https://cdn.jsdelivr.net/npm/@eka-care/medassist-widget@0.1.127-6/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-4/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-6/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,6 +30,8 @@ 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;
33
35
  /** Feature flag — currently gates the chat-history UI (session drawer + fullscreen sidebar). */
34
36
  feature?: boolean;
35
37
  };
@@ -83,6 +85,7 @@ type MedAssistInitConfig = {
83
85
  titleImg?: string;
84
86
  tagline?: string;
85
87
  explicitDisclaimer?: boolean;
88
+ upfrontConsent?: boolean;
86
89
  feature?: boolean;
87
90
  };
88
91
  [key: string]: unknown;
@@ -173,10 +176,31 @@ declare function fetchNudgeData(agentId: string, baseUrl?: string, sessToken?: s
173
176
  type ReactRoot = {
174
177
  unmount: () => void;
175
178
  };
179
+ /**
180
+ * Window event fired whenever side-panel push mode shifts (or un-shifts) the
181
+ * host page. `detail` is a {@link SidePanelPushDetail}.
182
+ */
183
+ declare const SIDE_PANEL_PUSH_EVENT = "eka-medassist:side-panel-push";
184
+ type SidePanelPushDetail = {
185
+ /** true when the panel just opened and the host was pushed; false on close. */
186
+ pushed: boolean;
187
+ /** Panel width in px (the amount the host is shifted by). */
188
+ width: number;
189
+ /** Which viewport edge the panel is docked to. */
190
+ side: "left" | "right";
191
+ };
176
192
  interface EkaMedAssistWindow extends Window {
177
193
  EkaMedAssist?: {
178
194
  init: (config: MedAssistInitConfig) => void;
179
195
  onClose?: () => void;
196
+ /**
197
+ * Side-panel push mode only. Called with `true` when the panel opens and
198
+ * the host <body> has been shifted, and with `false` when it closes and the
199
+ * shift is reverted — a host can adjust its own `position: fixed` chrome
200
+ * here. The same signal is also dispatched as the
201
+ * `eka-medassist:side-panel-push` window event.
202
+ */
203
+ onSidePanelPushChange?: (pushed: boolean, widthPx: number, side: "left" | "right") => void;
180
204
  };
181
205
  __ekaMedAssistConfig__?: MedAssistInitConfig;
182
206
  renderMedAssist?: (container: HTMLElement, agentId: string, config: MedAssistInitConfig) => ReactRoot;
@@ -220,6 +244,8 @@ declare class MedAssistWidgetLoader extends HTMLElement {
220
244
  private widgetLoaded;
221
245
  private displayMode;
222
246
  private hostPushStyleEl;
247
+ /** Current host push, or null when the host is not shifted. See applyHostPush. */
248
+ private hostPushState;
223
249
  private reactRoot;
224
250
  private agentConfigPromise;
225
251
  private loading;
@@ -256,6 +282,22 @@ declare class MedAssistWidgetLoader extends HTMLElement {
256
282
  * element, toggled via a class on <body> so open/close is just a class flip
257
283
  * once the CSS is in place. Fully removes both on revert so closing the
258
284
  * widget leaves the host page pixel-identical to before it opened.
285
+ *
286
+ * A body margin only reflows in-flow content sized relative to <body>. Two
287
+ * common host shapes need more, and both are handled here:
288
+ *
289
+ * - App roots sized with `width: 100vw` (Tailwind `w-screen`) resolve against
290
+ * the viewport, so they ignore the margin and slide under the panel. The
291
+ * injected `body > * { max-width: 100% }` rule caps body's direct children
292
+ * at body's (now narrower) content box so they shrink with it. It has no
293
+ * effect on `position: fixed` children (their containing block is the
294
+ * viewport) and a host `min-width` still wins over `max-width`.
295
+ * - `position: fixed` host chrome (headers, banners, `inset-0` overlays) is
296
+ * viewport-anchored and cannot be moved from the outside. The host opts in
297
+ * via the contract published here: `--eka-medassist-panel-width` /
298
+ * `--eka-medassist-panel-side` custom properties on <html>, the
299
+ * `body.eka-medassist-pushed` class, an `eka-medassist:side-panel-push`
300
+ * window event, and the `EkaMedAssist.onSidePanelPushChange` hook.
259
301
  */
260
302
  private applyHostPush;
261
303
  /** Run work when the browser is idle, falling back to a short timeout. */
package/dist/index.js CHANGED
@@ -1,12 +1,15 @@
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-4/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=`
1
+ "use strict";const getCurrentScript=()=>{if(typeof document=="undefined")return console.error("document is not defined"),null;const{currentScript:n}=document;if(n instanceof HTMLScriptElement)return n;const e=Array.from(document.getElementsByTagName("script")),t=e.find(o=>o.hasAttribute("data-widget-assets"));if(t)return t;const i=e.filter(o=>/(^|\/)index\.js(\?.*)?$/.test(o.src));return i.length?i[i.length-1]:e.length?e[e.length-1]:null},getEnvironment=n=>{if(n==="production"||n==="development"||n==="staging")return n},scriptEl=getCurrentScript(),DEFAULT_WIDGET_ASSET_BASE=(()=>{var n;return!((n=scriptEl==null?void 0:scriptEl.src)===null||n===void 0)&&n.includes("@dev"),"https://cdn.jsdelivr.net/npm/@eka-care/medassist-widget@0.1.127-6/dist/"})();var FeedbackTypeEnum;(function(n){n.DEFAULT="default",n.NPS="nps"})(FeedbackTypeEnum||(FeedbackTypeEnum={}));function mapAgentConfigThemeToWidgetTheme(n){if(!n)return;const e=n.mode==="dark"?"white":n.mode==="light"?"black":void 0;return{...n.background_img&&{backgroundImage:n.background_img},...n.accent&&{primary:n.accent},...e&&{textColor:e},...n.mode&&{mode:n.mode},...n.header_tinted!==void 0&&{headerTinted:n.header_tinted},...n.title_img&&{titleImg:n.title_img},...n.tagline&&{tagline:n.tagline},...n.hide_watermark&&{hideWatermark:n.hide_watermark},...n.explicit_disclaimer&&{explicitDisclaimer:n.explicit_disclaimer},...n.upfront_consent&&{upfrontConsent:n.upfront_consent},...n.feature!==void 0&&{feature:n.feature}}}function preloadImage(n){if(!(!n||typeof document=="undefined"))try{const e=document.createElement("link");e.rel="preload",e.as="image",e.href=n,document.head.appendChild(e)}catch{const e=new Image;e.src=n}}function channelFromDisplayMode(n){return n==="full"?"web":n==="side_panel"?"side_panel":"widget"}function normalizeDisplayMode(n){return n==="full"?"full":n==="side_panel"?"side_panel":"widget"}const NUDGE_STORAGE_KEY="eka-medassist-nudges",AGENT_CONFIG_CACHE_KEY="eka-medassist-agent-config";function readAgentConfigCache(n){try{const e=localStorage.getItem(AGENT_CONFIG_CACHE_KEY);return(e?JSON.parse(e):{})[n]}catch{return}}function writeAgentConfigCache(n,e){try{const t=localStorage.getItem(AGENT_CONFIG_CACHE_KEY),i=t?JSON.parse(t):{};i[n]={...i[n]||{},...e},localStorage.setItem(AGENT_CONFIG_CACHE_KEY,JSON.stringify(i))}catch{}}function getNudgeStore(){try{const n=localStorage.getItem(NUDGE_STORAGE_KEY);return n?JSON.parse(n):{}}catch{return{}}}function setNudgeStore(n){try{localStorage.setItem(NUDGE_STORAGE_KEY,JSON.stringify(n))}catch{}}function normalizePath(n){let e=n.replace(/\/+$/,"");return e.startsWith("/")||(e="/"+e),e||"/"}function getNudgePathCandidates(n){const e=n.split("/").filter(Boolean),t=[];for(let i=e.length;i>=0;i--)t.push(i===0?"/":"/"+e.slice(0,i).join("/"));return t}function findCachedNudgeForCandidates(n,e,t){const o=getNudgeStore()[n];if(!o)return null;const s=e.host,r=o[s];if(!r)return null;for(const d of t){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(n,e,t){const i=findCachedNudgeForCandidates(n,e,t);if(!i)return null;const o=Math.floor(Date.now()/1e3);return i.data.expiry<=o?(clearNudgeForPath(n,i.domain,i.path),null):i}function clearNudgeForPath(n,e,t){const i=getNudgeStore(),o=i[n];!o||!o[e]||(delete o[e][t],setNudgeStore(i))}function storeNudgeResponse(n,e){var t,i,o,s;const r=(t=e==null?void 0:e.url_pattern)===null||t===void 0?void 0:t.domain,d=(i=e==null?void 0:e.url_pattern)===null||i===void 0?void 0:i.path;if(!(!((o=e.nudges)===null||o===void 0)&&o.length)||!e.expiry||!r||!d)return;const a=getNudgeStore();a[n]||(a[n]={}),a[n][r]||(a[n][r]={}),a[n][r][d]={nudges:e.nudges,expiry:e.expiry,delay:(s=e.delay)!==null&&s!==void 0?s:5},setNudgeStore(a)}const NUDGE_COOKIE_PREFIX="eka-nudge";function setNudgeCookie(n,e){const t=new Date(Date.now()+864e5).toUTCString();document.cookie=`${NUDGE_COOKIE_PREFIX}-${n}=${e}; expires=${t}; path=/; SameSite=Lax`}function getNudgeCookie(n){const e=document.cookie.split(";").map(i=>i.trim()).find(i=>i.startsWith(`${NUDGE_COOKIE_PREFIX}-${n}=`));if(!e)return null;const t=e.split("=")[1];return t==="open"||t==="closed"?t:null}const WIDGET_STORE_KEY_PREFIX="med-assist-store-";function readPersistedSessToken(n){var e,t;try{const i=sessionStorage.getItem(`${WIDGET_STORE_KEY_PREFIX}${n}`),o=i?(t=(e=JSON.parse(i))===null||e===void 0?void 0:e.state)===null||t===void 0?void 0:t.sessToken:void 0;return typeof o=="string"&&o?o:void 0}catch{return}}async function fetchNudgeData(n,e,t,i="widget"){const o=`${e}/med-assist/user-nudge`,s=[];typeof document!="undefined"&&document.querySelectorAll("meta").forEach(r=>{var d,a,f;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=(f=r.getAttribute("content"))!==null&&f!==void 0?f: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":n,"x-channel":i,referer:typeof window!="undefined"?window.location.href:"",...t&&{Authorization:`Bearer ${t}`}},body:JSON.stringify({meta_tags:s,url:typeof window!="undefined"?window.location.href:""})});return r.ok?await r.json():void 0}catch{return}}const SIDE_PANEL_PUSH_EVENT="eka-medassist:side-panel-push",globalMedAssistConfig={},getWidgetElement=()=>typeof document=="undefined"?null:document.querySelector("eka-medassist-widget");if(typeof window!="undefined"){const n=window;n.__ekaMedAssistConfig__=globalMedAssistConfig,n.EkaMedAssist={init(e){var t,i,o;Object.assign(globalMedAssistConfig,e);const s=getWidgetElement();if(s){if(e.agentId&&s.setAttribute("agent-id",e.agentId),e.authToken&&s.setAttribute("auth-token",e.authToken),e.title&&s.setAttribute("title",e.title),e.iconUrl&&s.setAttribute("icon-url",e.iconUrl),e.baseUrl&&s.setAttribute("base-url",e.baseUrl),e.resize!==void 0&&s.setAttribute("resize",String(e.resize)),(e.displayMode==="full"||e.displayMode==="widget"||e.displayMode==="side_panel")&&s.setAttribute("display-mode",e.displayMode),e.sidePanelMode&&s.setAttribute("side-panel-mode",e.sidePanelMode),e.sidePanelWidth!==void 0&&s.setAttribute("side-panel-width",String(e.sidePanelWidth)),e.side&&s.setAttribute("side",e.side),e.context)try{s.setAttribute("context",JSON.stringify(e.context))}catch{console.warn("Failed to stringify context passed to init")}typeof e.customLauncherStyles=="string"&&s.setAttribute("custom-launcher-styles",e.customLauncherStyles),e.redirectUrl&&s.setAttribute("redirect-url",e.redirectUrl),!((t=e.theme)===null||t===void 0)&&t.backgroundImage&&preloadImage(e.theme.backgroundImage),(o=(i=s).openFromBridge)===null||o===void 0||o.call(i)}}}}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 n=scriptEl.dataset.widgetAssets;if(n==="local")return`${scriptBaseUrl}src/`;if(n&&n.length>0)try{return new URL(n,scriptBaseUrl).href}catch{return n.endsWith("/")?n:`${n}/`}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(n=>{if(!n.ok)throw new Error(`Unable to fetch widget styles from ${WIDGET_CSS_URL}`);return n.text()})),widgetCssTextPromise}class MedAssistWidgetLoader extends HTMLElement{setLauncherState(e){var t;const i=(t=this.shadowRoot)===null||t===void 0?void 0:t.getElementById("medassist-open-btn");i&&(i.classList.toggle("loading",e==="loading"),i.classList.toggle("hidden",e==="open"),e==="loading"?i.setAttribute("aria-busy","true"):i.removeAttribute("aria-busy"))}getChannel(){const e=this.getAttribute("display-mode");if(e)return channelFromDisplayMode(e);const t=typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0;return channelFromDisplayMode(t==null?void 0:t.displayMode)}getAgentConfig(){var e;if(!this.agentConfigPromise){const t=(typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0)||{},i=t.baseUrl||this.getAttribute("base-url")||"https://matrix.eka.care/reloaded",o=t.agentId||this.getAttribute("agent-id")||"";if(!o)return Promise.resolve(void 0);const s=(e=getEnvironment(this.getAttribute("environment")))!==null&&e!==void 0?e:"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:i,environment:s,channel:this.getChannel()})}).catch(()=>{this.agentConfigPromise=null})}return this.agentConfigPromise}constructor(){super(),this.hostPushStyleEl=null,this.hostPushState=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(e=>{console.error("Failed to load MedAssist widget in full mode",e)})):(this.renderButton(),this.scheduleIdle(()=>{this.preloadWidgetAssets(),this.prefetchAuthTokens(),this.initNudge()}))}disconnectedCallback(){var e,t,i,o,s;(e=this.reactRoot)===null||e===void 0||e.unmount(),this.reactRoot=null,(t=document.body)===null||t===void 0||t.classList.remove("eka-medassist-pushed"),(i=document.documentElement)===null||i===void 0||i.style.removeProperty("--eka-medassist-panel-width"),(o=document.documentElement)===null||o===void 0||o.style.removeProperty("--eka-medassist-panel-side"),(s=this.hostPushStyleEl)===null||s===void 0||s.remove(),this.hostPushStyleEl=null,this.hostPushState=null}applyHostPush(e,t,i){var o;if(typeof document=="undefined")return;const s=e?{width:t,side:i}:null,r=this.hostPushState;if(r===s||r&&s&&r.width===s.width&&r.side===s.side)return;this.hostPushState=s,this.hostPushStyleEl||(this.hostPushStyleEl=document.createElement("style"),this.hostPushStyleEl.setAttribute("data-medassist-side-panel-push","true"),document.head.appendChild(this.hostPushStyleEl)),console.log("side panle [ush function called");const d=i==="left"?"margin-left":"margin-right";this.hostPushStyleEl.textContent=`
2
2
  body.eka-medassist-pushed {
3
- ${o}: ${e}px;
3
+ ${d}: ${t}px;
4
4
  transition: margin 300ms ease;
5
5
  }
6
+ body.eka-medassist-pushed > * {
7
+ max-width: 100%;
8
+ }
6
9
  @media (prefers-reduced-motion: reduce) {
7
10
  body.eka-medassist-pushed { transition: none !important; }
8
11
  }
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=`
12
+ `;const a=document.documentElement.style;e?(a.setProperty("--eka-medassist-panel-width",`${t}px`),a.setProperty("--eka-medassist-panel-side",i),document.body.classList.add("eka-medassist-pushed")):(document.body.classList.remove("eka-medassist-pushed"),a.removeProperty("--eka-medassist-panel-width"),a.removeProperty("--eka-medassist-panel-side"),this.hostPushStyleEl.remove(),this.hostPushStyleEl=null);const f={pushed:e,width:t,side:i};if(typeof window!="undefined"){try{window.dispatchEvent(new CustomEvent(SIDE_PANEL_PUSH_EVENT,{detail:f}))}catch{}const c=(o=window.EkaMedAssist)===null||o===void 0?void 0:o.onSidePanelPushChange;if(typeof c=="function")try{c(e,t,i)}catch(h){console.error("EkaMedAssist.onSidePanelPushChange threw",h)}}}scheduleIdle(e){if(typeof window=="undefined"){e();return}const t=window.requestIdleCallback;typeof t=="function"?t(e,{timeout:3e3}):setTimeout(e,200)}attributeChangedCallback(e){if(e==="icon-url"&&this.displayMode!=="full"&&this.renderButton(),e==="display-mode"){const t=normalizeDisplayMode(this.getAttribute("display-mode"));t!==this.displayMode&&(this.displayMode=t,t==="full"?this.initializeFullMode():this.renderButton())}e==="custom-launcher-styles"&&this.applyCustomLauncherStyles()}preloadWidgetAssets(){getWidgetCssTextPromise(),this.loadWidgetModule(),this.preloadBackgroundImage()}prefetchAuthTokens(){var e;if(this.authPrefetchPromise)return this.authPrefetchPromise;const t=(typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0)||{},i=t.agentId||this.getAttribute("agent-id")||"";if(!i)return Promise.resolve(void 0);const o=t.authToken||this.getAttribute("auth-token")||void 0,s=t.baseUrl||this.getAttribute("base-url")||"https://matrix.eka.care/reloaded",r=(e=getEnvironment(this.getAttribute("environment")))!==null&&e!==void 0?e:"production";return this.authPrefetchPromise=this.loadWidgetModule().then(d=>{var a;return(a=d.prefetchAuth)===null||a===void 0?void 0:a.call(d,{agentId:i,authToken:o,serverUrl:s,environment:r,channel:this.getChannel()})}).catch(()=>{this.authPrefetchPromise=null}),this.authPrefetchPromise}async resolveSessToken(e){const t=readPersistedSessToken(e);if(t)return t;const i=await this.prefetchAuthTokens();return(i==null?void 0:i.sess_token)||readPersistedSessToken(e)}preloadBackgroundImage(){var e;const t=typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0,i=this.getAttribute("theme")?(()=>{try{return JSON.parse(this.getAttribute("theme")||"{}")}catch{return}})():void 0,o=(e=t==null?void 0:t.theme)===null||e===void 0?void 0:e.backgroundImage,s=i==null?void 0:i.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 e=t=>{var i;((i=t.data)===null||i===void 0?void 0:i.type)==="AUTH_EXPIRED"&&window.parent!==window&&window.parent.postMessage({type:"AUTH_EXPIRED",message:"Authentication expired"},"*")};window.addEventListener("message",e)}openFromBridge(){this.displayMode=normalizeDisplayMode(this.getAttribute("display-mode")),this.displayMode==="full"?this.initializeFullMode():this.renderButton(),this.loadAndRender().catch(e=>{console.error("Failed to open MedAssist widget from bridge",e)})}async initNudge(){var e,t,i,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=(t=(e=d==null?void 0:d.theme)===null||e===void 0?void 0:e.nudge_color)!==null&&t!==void 0?t:"#ffffff",f=typeof window!="undefined"?window.location.href:"";let c;try{c=new URL(f)}catch{return}const h=getNudgePathCandidates(c.pathname),p=h.slice(0,1),m=h.slice(1);let g=findFreshCachedNudge(r,c,p);if(!g){const v=(s==null?void 0:s.baseUrl)||this.getAttribute("base-url")||"https://matrix.eka.care/reloaded",b=await this.resolveSessToken(r).catch(()=>{}),l=await fetchNudgeData(r,v,b,this.getChannel()).catch(()=>{});!((i=l==null?void 0:l.nudges)===null||i===void 0)&&i.length&&(storeNudgeResponse(r,l),g=findFreshCachedNudge(r,c,h))}if(g||(g=findFreshCachedNudge(r,c,m)),!g)return;const w=g.data.nudges[Math.floor(Math.random()*g.data.nudges.length)],y=(o=g.data.delay)!==null&&o!==void 0?o:5;setTimeout(()=>{this.showNudgePopup(w,a)},y*1e3)}showNudgePopup(e,t){var i,o;const s=this.shadowRoot;if(!s||!(!((i=s.getElementById("medassist-widget-root"))===null||i===void 0)&&i.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 f=s.getElementById("medassist-open-btn"),c=f==null?void 0:f.getBoundingClientRect(),h=272,p=12,m=8,g=16,w=16;let y=window.innerWidth-h-p,v=76,b=h-g-m*2;if(c&&c.width>0){const A=c.left+c.width/2,S=A-h/2,C=window.innerWidth-h-p;y=Math.max(p,Math.min(S,C)),v=window.innerHeight-c.top+w,b=Math.max(g,Math.min(A-y-m,h-g-m*2))}const l=document.createElement("div");l.id="medassist-nudge-popup",l.innerHTML=`
10
13
  <style>
11
14
  @keyframes nudge-slide-up {
12
15
  from { opacity: 0; transform: translateY(12px) scale(0.97); }
@@ -15,9 +18,9 @@
15
18
  #medassist-nudge-popup {
16
19
  position: fixed;
17
20
  bottom: ${v}px;
18
- left: ${b}px;
21
+ left: ${y}px;
19
22
  width: ${h}px;
20
- background: ${e};
23
+ background: ${t};
21
24
  border-radius: 16px;
22
25
  box-shadow: 0 8px 32px rgba(0,0,0,0.14), 0 2px 8px rgba(0,0,0,0.08);
23
26
  padding: 16px 16px 14px 16px;
@@ -34,10 +37,10 @@
34
37
  content: '';
35
38
  position: absolute;
36
39
  bottom: -8px;
37
- left: ${y}px;
40
+ left: ${b}px;
38
41
  width: 16px;
39
42
  height: 10px;
40
- background: ${e};
43
+ background: ${t};
41
44
  clip-path: polygon(0 0, 100% 0, 50% 100%);
42
45
  }
43
46
  #medassist-nudge-popup {
@@ -84,10 +87,10 @@
84
87
  }
85
88
  </style>
86
89
  <div class="nudge-header">
87
- <p class="nudge-text">${t.replace(/</g,"&lt;").replace(/>/g,"&gt;")}</p>
90
+ <p class="nudge-text">${e.replace(/</g,"&lt;").replace(/>/g,"&gt;")}</p>
88
91
  <button class="nudge-close" aria-label="Dismiss">&#x2715;</button>
89
92
  </div>
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=`
93
+ `,(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 e;const t=(e=this.shadowRoot)===null||e===void 0?void 0:e.getElementById("medassist-nudge-popup");t==null||t.remove()}applyCustomLauncherStyles(){var e;const t=this.shadowRoot;if(!t||this.displayMode==="full")return;const i=t.querySelector('style[data-medassist-custom-launcher="true"]'),o=(e=this.getAttribute("custom-launcher-styles"))!==null&&e!==void 0?e:"";if(!o){i==null||i.remove();return}if(i){i.textContent=o;return}const s=document.createElement("style");s.setAttribute("data-medassist-custom-launcher","true"),s.textContent=o,t.appendChild(s)}renderButton(){var e;const t=this.getAttribute("icon-url")||this.defaultIconUrl,i=this.shadowRoot;if(!i){console.error("Shadow root was not created");return}if(!i.querySelector("button"))i.innerHTML=`
91
94
  <style>
92
95
  #medassist-open-btn {
93
96
  width: 60px;
@@ -157,11 +160,11 @@
157
160
  </style>
158
161
 
159
162
  <button id="medassist-open-btn">
160
- <img src="${e}" alt="MedAssist Icon">
163
+ <img src="${t}" alt="MedAssist Icon">
161
164
  <span id="medassist-loader" aria-hidden="true"></span>
162
165
  </button>
163
166
  <div id="medassist-widget-root" class="hidden"></div>
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=`
167
+ `,(e=i.getElementById("medassist-open-btn"))===null||e===void 0||e.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=i.querySelector("#medassist-open-btn img");o&&(o.src=t)}this.applyCustomLauncherStyles()}initializeFullMode(){const e=this.shadowRoot;if(!e){console.error("Shadow root is not available");return}e.getElementById("medassist-widget-root")||(e.innerHTML=`
165
168
  <style>
166
169
  :host {
167
170
  display: block;
@@ -178,4 +181,4 @@
178
181
  }
179
182
  </style>
180
183
  <div id="medassist-widget-root"></div>
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);
184
+ `)}async loadAndRender(){var e,t,i;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=(e=getEnvironment(this.getAttribute("environment")))!==null&&e!==void 0?e:"production",f=this.getAttribute("connectivity"),c=f==="http_stream"||f==="socket"?f: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",g=this.getAttribute("display-mode"),w=normalizeDisplayMode(g),y=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,b=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=(t=l.sidePanelWidth)!==null&&t!==void 0?t:C?Number(C):void 0,O=l.side||this.getAttribute("side")||(typeof document!="undefined"&&document.dir==="rtl"?"left":"right"),D={...y||{},...l.context||{}},H=l.authToken||this.getAttribute("auth-token")||void 0,_=l.agentId||r,J=l.baseUrl||m,E=typeof window!="undefined"?(i=window.EkaMedAssist)===null||i===void 0?void 0:i.onClose:void 0,j=this.getAttribute("redirect-url")||void 0,P=l.redirectUrl||j,G=!!P||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,N,R=!1,T,W=!1,M;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,N=u.connectivity,R=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,M=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||N||"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,E&&typeof E=="function"&&E(),P){window.location.href=P;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:R||this.getAttribute("resize")==="true",authToken:H,force:h,initialMessage:T,hideWatermark:W,...(b||M)&&{feedback:b||M},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 e=this.shadowRoot;if(!e)throw new Error("Shadow root is not available");if(e.querySelector("[data-medassist-style='true']"))return;const t=await getWidgetCssTextPromise(),i=document.createElement("style");i.setAttribute("data-medassist-style","true"),i.textContent=t,e.appendChild(i)}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.106-1",
3
+ "version": "0.2.106-3",
4
4
  "description": "Embeddable MedAssist widget loader built with Web Components.",
5
5
  "author": "Geethanjali S",
6
6
  "license": "MIT",