@marketrix.ai/widget 4.0.131 → 4.0.132
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.
|
@@ -3,13 +3,17 @@
|
|
|
3
3
|
* and published through `WidgetConfigContext` — and the one place the root element is published through
|
|
4
4
|
* `PortalContainerContext`. Renders `MessengerShell` (inside an `ErrorBoundary`, so a panel crash still leaves the
|
|
5
5
|
* launcher and toasts alive), `WidgetFab`, `WidgetNotifications`, and a fixed screen-edge glow while a reply or
|
|
6
|
-
* task is in flight;
|
|
6
|
+
* task is in flight; an effect arms the greeting toast.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* so
|
|
11
|
-
*
|
|
12
|
-
*
|
|
8
|
+
* `widgetPosition`'s stored/drag-pinned corner is read in `useState`'s lazy initializer, not a mount effect —
|
|
9
|
+
* `index.tsx`'s `updateMarketrixConfig` re-mounts the whole tree on any config change (this file's header note
|
|
10
|
+
* above), so `WidgetRoot` never receives an updated `config` prop in place; a sync effect keyed on `config`
|
|
11
|
+
* could only ever re-run for a config this component was never given, which is to say never. The position
|
|
12
|
+
* storage key is written ONLY by a drag — seeding it with `config.widget_position` would pin the dashboard's
|
|
13
|
+
* setting at whatever it was on a visitor's first load — and preview mode neither reads nor writes it, so the
|
|
14
|
+
* dashboard always shows the configured corner. Preview mode overrides the hidden check (`show_widget: false` /
|
|
15
|
+
* `widget_appearance: 'hidden'` suppress the widget on a host page, but the dashboard preview must still render)
|
|
16
|
+
* with its `null` return sitting below every hook so hook order stays stable either way.
|
|
13
17
|
*
|
|
14
18
|
* The published z-index is `max(tenant value, LAYER_TOKENS.panel)` so a tenant's low setting cannot sink the
|
|
15
19
|
* widget under the host page's own stacking context. The root `Surface` IS the `[data-marketrix-widget]` element
|
package/dist/widget.mjs
CHANGED
|
@@ -58,8 +58,8 @@ return v(vc,{height:"full",overflow:"hidden",children:[/* @__PURE__ */v(vc,{grow
|
|
|
58
58
|
/* @__PURE__ */b(Mc,{as:"span",size:"xs",align:"center",inheritColor:!0,truncate:!0,block:!0,children:e.label})]},e.id))});function hd(e){const t=e.getRootNode();return(t instanceof ShadowRoot?t.activeElement:document.activeElement)??null}function fd({width:e,height:t}){return{width:Math.min(Math.max(e,280),600),height:Math.min(Math.max(t,320),Math.floor(.85*window.innerHeight))}}function md(e,t){const n=/^\s*(\d+(?:\.\d+)?)px\s*$/.exec(e??"");return n?Number(n[1]):t}var gd=["home","chat"],yd=()=>{const e=_l(),{state:t,actions:n}=Dl(),{isOpen:r,activeView:o}=t,{isPreviewMode:s}=e,{widthPx:c,heightPx:l,grip:h,onResizeStart:f,onResizeKeyDown:m,containerRef:g}=function(e,t,n,r,o){const s=De("marketrix_widget_size",r),c=d(null),l=u(()=>(e=>{const t=Ll(e),n=zl[t.vertical],r=zl[t.horizontal];return{vertical:n,horizontal:r,growX:"left"===r?-1:1,growY:"top"===n?-1:1,cursor:"top"===n==("left"===r)?"nwse-resize":"nesw-resize"}})(n),[n]),[h,f]=p(()=>function(e){try{const t=JSON.parse(Ne(e)??"null");return function(e){return"object"==typeof e&&null!==e&&"number"==typeof e.width&&"number"==typeof e.height}(t)?fd(t):null}catch(t){return Ae("[useResize] Ignoring an unparseable stored size:",t),null}}(s)??fd({width:md(e,360),height:md(t,450)})),m=d(h);m.current=h;const g=d(null);a(()=>()=>g.current?.(),[]);const y=i(e=>{if(e.preventDefault(),e.stopPropagation(),o)return;const t=e.clientX,n=e.clientY,r=m.current.width,i=m.current.height,{growX:a,growY:u,cursor:d}=l;c.current&&(c.current.dataset.resizing="true");const p=e=>{const o=fd({width:r+(e.clientX-t)*a,height:i+(e.clientY-n)*u});m.current=o,c.current&&(c.current.style.width=`${o.width}px`,c.current.style.height=`${o.height}px`)},h=()=>{document.removeEventListener("mousemove",p),document.removeEventListener("mouseup",h),document.body.style.cursor="",document.body.style.userSelect="",g.current=null,c.current&&delete c.current.dataset.resizing,f({...m.current}),Le(s,JSON.stringify(m.current))};document.body.style.cursor=d,document.body.style.userSelect="none",document.addEventListener("mousemove",p),document.addEventListener("mouseup",h),g.current=h},[o,s,l]),b=i(e=>{if(o)return;const t={ArrowLeft:{width:-16,height:0},ArrowRight:{width:16,height:0},ArrowUp:{width:0,height:-16},ArrowDown:{width:0,height:16}}[e.key];if(!t)return;e.preventDefault();const n=fd({width:m.current.width+t.width,height:m.current.height+t.height});m.current=n,f(n),Le(s,JSON.stringify(n))},[o,s]);return{widthPx:`${h.width}px`,heightPx:`${h.height}px`,grip:l,onResizeStart:y,onResizeKeyDown:b,containerRef:c}}(e.widget_width,e.widget_height,e.widget_position,e,s),y=d(null),w="chat"===o?"forward":"back";!function(e,t,n){const r=d(!1),o=d(null);a(()=>{if(!t)return r.current&&(o.current?.focus({preventScroll:!0}),o.current=null),void(r.current=!1);const i=e.current;if(!i)return;r.current||(o.current=hd(i)),r.current=!0,(n?.focusTargetRef?.current??Tr(i)[0])?.focus({preventScroll:!0});const s=e=>{const t=hd(i);if(!t||!i.contains(t))return;if("Escape"===e.key)return void n?.onEscape?.();if("Tab"!==e.key)return;const r=Tr(i);if(0===r.length)return;const o=r.indexOf(t);-1!==o&&(e.shiftKey?0===o&&(e.preventDefault(),r[r.length-1]?.focus()):o===r.length-1&&(e.preventDefault(),r[0]?.focus()))};return document.addEventListener("keydown",s,!0),()=>document.removeEventListener("keydown",s,!0)},[t,e,n?.focusTargetRef,n?.onEscape])}(g,r,{onEscape:n.closeWidget,focusTargetRef:"chat"===o?y:void 0});const x=Fl(e.widget_position),[S,k]=p(!1),C=d(null);if(!r)return null;const E=Rl(e.widget_background_color),{vertical:I,horizontal:M}=Ll(e.widget_position),T="chat"===o&&!1!==e.use_screenshare?()=>C.current?.():void 0;/* @__PURE__ */
|
|
59
59
|
return v(vc,{ref:g,position:s?"absolute":"fixed",rounded:"lg",border:!0,overflow:"hidden",style:{zIndex:e.widget_position_z_index,backgroundImage:E,transformOrigin:`${I} ${M}`,width:c,height:l,fontSize:"14px",...x,pointerEvents:"auto",scrollbarWidth:"thin",animation:"messenger-entrance 300ms cubic-bezier(0, 1.2, 1, 1)",boxShadow:kr.panel},children:[
|
|
60
60
|
/* @__PURE__ */b(ku,{title:e.widget_header,subtitle:e.widget_body,onClose:n.closeWidget,controls:T&&/* @__PURE__ */v(kc,{variant:"ghost",size:"sm",label:S?"Stop screen sharing":"Start screen sharing",onClick:T,children:[S&&/* @__PURE__ */b(Su,{style:{position:"absolute",top:"2px",right:"2px"}}),/* @__PURE__ */b(Sc,{name:"screenShare",size:16})]})}),
|
|
61
|
-
/* @__PURE__ */v(Ql,{value:o,onValueChange:e=>{"string"==typeof e&&(e=>gd.includes(e))(e)&&n.setActiveView(e)},render:/* @__PURE__ */b(vc,{grow:!0,minHeight:"0"}),children:[/* @__PURE__ */v(vc,{grow:!0,overflow:"hidden",minHeight:"0",children:[/* @__PURE__ */b(lu,{value:"home","data-view-transition":!0,"data-direction":w,style:{width:"100%",height:"100%"},children:/* @__PURE__ */b(ud,{onNavigateToChat:()=>n.setActiveView("chat"),onChipClick:e=>{n.addMessage(Jc(e.text,e.type,"chip-message")),n.setMode(e.type),n.messageDispatch(e.text,e.type,!0)}})}),/* @__PURE__ */b(lu,{value:"chat","data-view-transition":!0,"data-direction":w,style:{width:"100%",height:"100%"},children:/* @__PURE__ */b(cd,{onScreenSharingChange:k,toggleScreenShareRef:C,messageInputRef:y})})]}),/* @__PURE__ */b(pd,{})]}),!s&&/* @__PURE__ */b("div",{role:"separator","aria-label":`Resize widget from ${h.vertical} ${h.horizontal}. Use arrow keys to resize.`,title:"Drag to resize",tabIndex:0,style:{position:"absolute",[h.vertical]:0,[h.horizontal]:0,width:"20px",height:"20px",padding:"4px",touchAction:"none",zIndex:10,display:"flex",alignItems:"top"===h.vertical?"flex-start":"flex-end",justifyContent:"left"===h.horizontal?"flex-start":"flex-end",cursor:h.cursor},onMouseDown:f,onKeyDown:m})]})},bd=({config:e})=>{const[t,n]=p(!1),[r,o]=p(null),{state:i,actions:s}=Dl(),c=e.isPreviewMode??!1;var l;l=i.isOpen,a(()=>{if(!l)return;if(!window.matchMedia("(max-width: 767px)").matches)return;const e=document.documentElement,t=document.body,n=e.style.overflow,r=t.style.overflow;return e.style.overflow="hidden",t.style.overflow="hidden",()=>{e.style.overflow=n,t.style.overflow=r}},[l]);const
|
|
62
|
-
return b(Al,{value:g,children:/* @__PURE__ */b(yc,{ref:o,"data-marketrix-widget":!0,position:"relative",style:{...w,...c&&{width:"100%",height:"100%"}},children:/* @__PURE__ */b(bl,{value:r,children:/* @__PURE__ */v(Rc,{container:r,offsetBottom:"top"===Ll(
|
|
61
|
+
/* @__PURE__ */v(Ql,{value:o,onValueChange:e=>{"string"==typeof e&&(e=>gd.includes(e))(e)&&n.setActiveView(e)},render:/* @__PURE__ */b(vc,{grow:!0,minHeight:"0"}),children:[/* @__PURE__ */v(vc,{grow:!0,overflow:"hidden",minHeight:"0",children:[/* @__PURE__ */b(lu,{value:"home","data-view-transition":!0,"data-direction":w,style:{width:"100%",height:"100%"},children:/* @__PURE__ */b(ud,{onNavigateToChat:()=>n.setActiveView("chat"),onChipClick:e=>{n.addMessage(Jc(e.text,e.type,"chip-message")),n.setMode(e.type),n.messageDispatch(e.text,e.type,!0)}})}),/* @__PURE__ */b(lu,{value:"chat","data-view-transition":!0,"data-direction":w,style:{width:"100%",height:"100%"},children:/* @__PURE__ */b(cd,{onScreenSharingChange:k,toggleScreenShareRef:C,messageInputRef:y})})]}),/* @__PURE__ */b(pd,{})]}),!s&&/* @__PURE__ */b("div",{role:"separator","aria-label":`Resize widget from ${h.vertical} ${h.horizontal}. Use arrow keys to resize.`,title:"Drag to resize",tabIndex:0,style:{position:"absolute",[h.vertical]:0,[h.horizontal]:0,width:"20px",height:"20px",padding:"4px",touchAction:"none",zIndex:10,display:"flex",alignItems:"top"===h.vertical?"flex-start":"flex-end",justifyContent:"left"===h.horizontal?"flex-start":"flex-end",cursor:h.cursor},onMouseDown:f,onKeyDown:m})]})},bd=({config:e})=>{const[t,n]=p(!1),[r,o]=p(null),{state:i,actions:s}=Dl(),c=e.isPreviewMode??!1;var l;l=i.isOpen,a(()=>{if(!l)return;if(!window.matchMedia("(max-width: 767px)").matches)return;const e=document.documentElement,t=document.body,n=e.style.overflow,r=t.style.overflow;return e.style.overflow="hidden",t.style.overflow="hidden",()=>{e.style.overflow=n,t.style.overflow=r}},[l]);const u=De("marketrix_widget_position",e),[d,h]=p(()=>{const t=c?null:Ne(u);return(e=>Nl.includes(e))(t)?t:e.widget_position??"bottom_right"});a(()=>{if(i.isOpen||c||!e.widget_greeting_toast)return void n(!1);const t=setTimeout(()=>n(!0),2e3);return()=>clearTimeout(t)},[i.isOpen,c,e.widget_greeting_toast]);const f=!1===e.show_widget||"hidden"===e.widget_appearance;if(!c&&f)return null;const m=Math.max(e.widget_position_z_index??0,2147483002),g={...e,widget_position:d,widget_position_z_index:m,isPreviewMode:c},y=i.isAwaitingReply||i.isTaskRunning,w=(x=function(e={}){const t=Object.fromEntries(Object.entries(e).filter(([,e])=>void 0!==e)),n={...Ol,...t};return{color:{background:n.widget_background_color,foreground:n.widget_text_color,foregroundMuted:Tl(n.widget_text_color,.6),foregroundFaint:Tl(n.widget_text_color,.4),border:n.widget_border_color,primary:n.widget_accent_color,primaryForeground:Ml(n.widget_accent_color),primaryHover:Tl(n.widget_accent_color,.85),secondary:n.widget_secondary_color,secondaryForeground:Ml(n.widget_secondary_color),secondaryBg:Tl(n.widget_secondary_color,.2),secondaryHover:Tl(n.widget_secondary_color,.3),ring:Ml(n.widget_background_color)},radius:"12px",motion:{durationAnimation:"300ms",durationFade:"200ms"}}}(e),{"--foreground":x.color.foreground,"--card":x.color.background,"--card-foreground":x.color.foreground,"--primary":x.color.primary,"--foreground-muted":x.color.foregroundMuted,"--foreground-faint":x.color.foregroundFaint,"--primary-foreground":x.color.primaryForeground,"--primary-hover":x.color.primaryHover,"--secondary":x.color.secondary,"--secondary-foreground":x.color.secondaryForeground,"--secondary-bg":x.color.secondaryBg,"--secondary-hover":x.color.secondaryHover,"--border":x.color.border,"--ring":x.color.ring,"--ring-offset":x.color.background,"--radius":x.radius,"--duration-animation":x.motion.durationAnimation,"--duration-fade":x.motion.durationFade});var x;/* @__PURE__ */
|
|
62
|
+
return b(Al,{value:g,children:/* @__PURE__ */b(yc,{ref:o,"data-marketrix-widget":!0,position:"relative",style:{...w,...c&&{width:"100%",height:"100%"}},children:/* @__PURE__ */b(bl,{value:r,children:/* @__PURE__ */v(Rc,{container:r,offsetBottom:"top"===Ll(d).vertical?20:90,children:[y&&/* @__PURE__ */b(yc,{"data-screen-edge-glow":!0,position:"fixed",inset:"0",style:{boxShadow:`inset 0 0 22px 2px ${Tl(g.widget_accent_color,.72)}, inset 0 0 46px 10px ${Tl(g.widget_accent_color,.28)}`,pointerEvents:"none",zIndex:2147483001}}),
|
|
63
63
|
/* @__PURE__ */b(Bl,{label:"Widget",children:/* @__PURE__ */b(yd,{})}),
|
|
64
|
-
/* @__PURE__ */b(Ul,{onPositionCommit:e=>{
|
|
64
|
+
/* @__PURE__ */b(Ul,{onPositionCommit:e=>{h(e),c||Le(u,e)}}),
|
|
65
65
|
/* @__PURE__ */b(Oc,{error:i.error,onClearError:()=>s.setError(void 0),...fr.canReconnect()&&{onRetry:()=>{s.setError(void 0),fr.reconnectNow()}},greeting:t&&!i.error?e.widget_greeting:void 0,greetingBody:e.widget_body,onGreetingDismiss:()=>n(!1)})]})})})})},vd={mount:null},wd=null,xd=(e,t)=>{const n=e.attachShadow({mode:"closed"}),r=document.createElement("style");r.textContent=':root,:host{--foreground:oklch(14.5% 0 0);--card:oklch(100% 0 0);--card-foreground:oklch(14.5% 0 0);--primary:oklch(20.5% 0 0);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(97% 0 0);--secondary-foreground:oklch(20.5% 0 0);--border:oklch(92.2% 0 0);--ring:oklch(70.8% 0 0);--ring-offset:oklch(100% 0 0);--foreground-muted:#1f293799;--foreground-faint:#1f293766;--primary-hover:#3b82f6d9;--secondary-bg:#6b728033;--secondary-hover:#6b72804d;--font-sans:"Inter", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--radius:.625rem;--shadow-sm:0 1px 3px 0px #0000001a, 0 1px 2px -1px #0000001a;--shadow-lg:0 1px 3px 0px #0000001a, 0 4px 6px -1px #0000001a;--duration-animation:.3s;--duration-fade:.2s;--radius-pill:9999px;--status-processing-rgb:49, 208, 109;--status-error-rgb:208, 52, 44;--overlay-dark:#111827}*,:before,:after{box-sizing:border-box;border:0 solid var(--border);margin:0;padding:0}:host,[data-marketrix-widget]{font-family:var(--font-sans);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:1.5}:where([data-marketrix-widget]) :where(h1,h2,h3){font-size:inherit;font-weight:inherit}:where([data-marketrix-widget]) :where(img,svg,video,canvas){vertical-align:middle;display:block}:where([data-marketrix-widget]) :where(img,video){max-width:100%;height:auto}:where([data-marketrix-widget]) :where(button,input,textarea){font:inherit;color:inherit;background:0 0;border-radius:0}:where([data-marketrix-widget]) :where(button){appearance:button}:where([data-marketrix-widget]) :where(textarea){resize:vertical}[data-marketrix-widget] [hidden]{display:none!important}[data-marketrix-widget],[data-marketrix-widget] *{pointer-events:auto;transition:color .2s ease-in-out,background-color .2s ease-in-out,border-color .2s ease-in-out,opacity .2s ease-in-out,box-shadow .2s ease-in-out,transform .2s ease-in-out}[data-resizing=true],[data-resizing=true] *{transition:none!important}@media (prefers-reduced-motion:reduce){[data-marketrix-widget]{--duration-animation:0s!important;--duration-fade:0s!important}}.mtx-button,.mtx-icon-button{cursor:pointer;justify-content:center;align-items:center;transition:all .2s ease-in-out;display:inline-flex}.mtx-button{border:1px solid #0000;gap:8px;font-weight:500}.mtx-button:focus-visible,.mtx-icon-button:focus-visible{box-shadow:0 0 0 2px var(--ring-offset), 0 0 0 4px var(--ring);outline:none}.mtx-button[data-size=sm]{min-height:28px;padding:4px 8px;font-size:.75rem}.mtx-button[data-size=md]{min-height:36px;padding:8px 16px;font-size:.875rem}.mtx-button[data-variant=primary]:hover{background:color-mix(in oklab, var(--primary) 90%, transparent)}.mtx-button[data-variant=secondary]{background:var(--secondary);color:var(--secondary-foreground)}.mtx-button[data-variant=secondary]:hover{background:color-mix(in oklab, var(--secondary) 80%, transparent)}.mtx-button[data-variant=ghost]{color:var(--foreground);border-color:var(--border);background:0 0}.mtx-button[data-variant=ghost]:hover{background:var(--border)}.mtx-button[data-variant=chip]{background:var(--secondary-bg);color:var(--foreground)}.mtx-button[data-variant=chip]:hover{background:var(--primary);color:var(--primary-foreground);border-color:var(--primary)}.mtx-button[data-variant=bare],.mtx-button[data-variant=tab]{background:0 0;border-color:#0000;min-height:0;padding:0}.mtx-button[data-variant=bare]{color:inherit}.mtx-button[data-variant=tab]{color:var(--foreground-muted);flex:1;min-width:0;height:100%;position:relative}.mtx-button[data-variant=tab]:hover{color:var(--foreground)}.mtx-button[data-variant=tab][aria-selected=true]{color:var(--primary);font-weight:600}.mtx-button[data-stacked=true]{flex-direction:column;gap:2px}.mtx-button[data-full=true]{width:100%}.mtx-icon-button{border-radius:var(--radius-pill);border:none;flex-shrink:0}.mtx-icon-button[data-size=xs]{width:20px;min-width:20px;height:20px}.mtx-icon-button[data-size=sm]{width:28px;min-width:28px;height:28px}.mtx-button[data-variant=primary],.mtx-icon-button[data-variant=primary]{background:var(--primary);color:var(--primary-foreground)}.mtx-icon-button[data-variant=primary]:hover{background:var(--primary-hover)}.mtx-icon-button[data-variant=secondary]{background:var(--secondary-bg);color:var(--foreground)}.mtx-icon-button[data-variant=secondary]:hover{background:var(--secondary-hover)}.mtx-icon-button[data-variant=ghost]{color:var(--foreground);opacity:.6;background:0 0}.mtx-icon-button[data-variant=ghost]:hover{opacity:1}.mtx-button[data-disabled=true],.mtx-icon-button[data-disabled=true]{opacity:.5;cursor:not-allowed;pointer-events:none}.mtx-icon{flex-shrink:0;display:inline-block}.mtx-avatar{flex-shrink:0}.mtx-spinner-ring{border-radius:var(--radius-pill);border-style:solid;border-color:#0000 currentColor currentColor;flex-shrink:0;animation:1s linear infinite mtx-spin}.mtx-visually-hidden{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.mtx-composer:focus-within{border-color:var(--foreground-faint)}.mtx-composer-input{resize:none;width:100%;min-height:0;color:var(--foreground);background:0 0;border:none;padding-left:12px;padding-right:12px;font-size:.875rem;display:block}.mtx-composer-input::placeholder{color:var(--foreground-faint)}.mtx-composer-input:focus{outline:none}.mtx-composer-input:disabled{cursor:not-allowed;opacity:.5}.mtx-mode-chip{border-radius:var(--radius-pill);cursor:pointer;background:var(--secondary-bg);color:var(--foreground-muted);border:none;align-items:center;gap:2px;padding:2px 8px;font-size:11px;font-weight:500;transition:all .2s ease-in-out;display:inline-flex}.mtx-mode-chip[data-active=true]{background:var(--primary);color:var(--primary-foreground);box-shadow:var(--shadow-sm)}.mtx-toast-viewport{flex-direction:column;gap:8px;max-width:420px;display:flex;position:fixed;left:50%;transform:translate(-50%)}.mtx-toast{animation:mtx-fade-in var(--duration-animation) ease-out}.mtx-toast[data-ending-style]{opacity:0;transition:opacity var(--duration-animation) ease-out}.mtx-dialog-backdrop{animation:mtx-dialog-overlay-in var(--duration-fade) ease-out;background:#0003;position:fixed;inset:0}.mtx-dialog-popup{border-radius:var(--radius);background:var(--card);width:100%;max-width:24rem;max-height:85vh;animation:mtx-dialog-content-in var(--duration-animation) ease-out;flex-direction:column;padding:16px;display:flex;position:fixed;top:50%;left:50%;overflow:auto;transform:translate(-50%,-50%)}.mtx-dialog-title{color:var(--foreground);margin-bottom:4px;font-size:1rem;font-weight:600}.mtx-dialog-description{color:var(--foreground-muted);margin-bottom:16px;font-size:.875rem;line-height:1.625}.mtx-fab-anchor{position:fixed}.mtx-fab-anchor[data-preview=true]{position:absolute}.mtx-fab-anchor[data-animated=true]{transition:transform var(--duration-animation) ease-in-out}.mtx-fab{width:56px;height:56px;transition:all var(--duration-animation) ease-in-out;position:relative;overflow:visible}.mtx-fab[data-open=false]:hover{transform:scale(1.1)}.mtx-fab[data-open=true]{opacity:0;pointer-events:none;transform:scale(0)}.mtx-fab-trigger{z-index:10;width:56px;min-width:56px;height:56px;position:relative}.mtx-fab-center{justify-content:center;align-items:center;width:100%;height:100%;position:relative}.mtx-fab-badge{width:48px;height:48px;transition:transform .167s cubic-bezier(.33,0,0,1),opacity .167s cubic-bezier(.33,0,0,1),background-color .167s cubic-bezier(.33,0,0,1);animation:.25s ease-out forwards mtx-launcher-entrance;position:relative;overflow:hidden}.mtx-fab-badge:hover{transition-duration:.25s;transform:scale(1.1)}.mtx-fab-badge:active{transition-duration:.134s;transition-timing-function:cubic-bezier(.45,0,.2,1);transform:scale(.85)}.mtx-fab-icon-layer{justify-content:center;align-items:center;transition-property:transform,opacity;transition-duration:.16s,80ms;transition-timing-function:linear;position:absolute;inset:0}.mtx-fab-avatar{z-index:10;object-fit:contain;width:100%;height:100%;position:relative}.mtx-fab-chevron{z-index:10;color:var(--foreground);pointer-events:none;position:relative}.mtx-fab-stop{z-index:20;border-radius:var(--radius-pill);background:var(--overlay-dark);text-transform:uppercase;letter-spacing:.025em;color:#fff;box-shadow:var(--shadow-lg);opacity:0;pointer-events:none;border:1px solid #ffffff40;padding:4px 10px;font-size:11px;font-weight:600;transition:opacity .15s ease-in-out;position:absolute;top:50%;transform:translateY(-50%)}.mtx-fab-stop[data-side=left]{margin-left:8px;left:100%}.mtx-fab-stop[data-side=right]{margin-right:8px;right:100%}.mtx-fab:hover .mtx-fab-stop,.mtx-fab:focus-within .mtx-fab-stop{opacity:1;pointer-events:auto}.mtx-tab-underline{border-radius:var(--radius-pill);background:var(--primary);opacity:0;height:2px;position:absolute;top:0;left:25%;right:25%}[aria-selected=true]>.mtx-tab-underline{opacity:1}.mtx-live-dot{width:6px;height:6px;display:inline-flex;position:relative}.mtx-live-dot-ping{border-radius:var(--radius-pill);opacity:.75;background:currentColor;width:100%;height:100%;animation:1s cubic-bezier(0,0,.2,1) infinite mtx-ping;display:inline-flex;position:absolute}.mtx-live-dot-core{border-radius:var(--radius-pill);background:currentColor;width:6px;height:6px;display:inline-flex;position:relative}.mtx-fab-glow{pointer-events:none;filter:blur(14px);will-change:transform, opacity;border-radius:50%;width:140%;height:140%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.mtx-fab-ring{pointer-events:none;z-index:0;position:absolute;inset:-3px;overflow:visible}.mtx-fab-ring rect{fill:none;stroke-width:2.5px;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:40 120;animation:1.9s cubic-bezier(.4,0,.2,1) infinite mtx-fab-ring-travel}.mtx-fab-ring[data-tone=processing] rect{stroke:rgb(var(--status-processing-rgb));filter:drop-shadow(0 0 3px rgba(var(--status-processing-rgb), .7))}.mtx-fab-ring[data-tone=error] rect{stroke:rgb(var(--status-error-rgb));filter:drop-shadow(0 0 3px rgba(var(--status-error-rgb), .7))}.mtx-fab-glow[data-tone=processing]{--glow-rgb:var(--status-processing-rgb);--glow-op-base:.72;--glow-op-peak:1;--glow-op-near:.38;--glow-op-far:.24;--glow-op-near-peak:.55;--glow-op-far-peak:.33;animation:2s ease-in-out infinite mtx-fab-glow-pulse}.mtx-fab-glow[data-tone=error]{--glow-rgb:var(--status-error-rgb);--glow-op-base:.65;--glow-op-peak:.95;--glow-op-near:.34;--glow-op-far:.22;--glow-op-near-peak:.5;--glow-op-far-peak:.3;animation:1.5s ease-in-out infinite mtx-fab-glow-pulse}[data-screen-edge-glow]{animation:1.6s ease-in-out infinite mtx-screen-edge-pulse}[data-view-transition][data-direction=forward]{animation:.3s both mtx-view-slide-forward}[data-view-transition][data-direction=back]{animation:.3s both mtx-view-slide-back}@keyframes mtx-spin{to{transform:rotate(360deg)}}@keyframes mtx-ping{75%,to{opacity:0;transform:scale(2)}}@keyframes mtx-dialog-overlay-in{0%{opacity:0}to{opacity:1}}@keyframes mtx-dialog-content-in{0%{opacity:0;scale:.96}to{opacity:1;scale:1}}@keyframes mtx-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes mtx-launcher-entrance{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}@keyframes mtx-screen-edge-pulse{0%,to{opacity:.55}50%{opacity:1}}@keyframes mtx-fab-ring-travel{0%{stroke-dashoffset:0;opacity:.5}18%{stroke-dashoffset:-112px;opacity:1}35%{stroke-dashoffset:-160px;opacity:.65}60%{stroke-dashoffset:-160px;opacity:.45}82%{stroke-dashoffset:-272px;opacity:1}to{stroke-dashoffset:-320px;opacity:.6}}@keyframes mtx-fab-glow-pulse{0%,to{opacity:var(--glow-op-base);background:radial-gradient(circle, rgba(var(--glow-rgb), 0) 38%, rgba(var(--glow-rgb), var(--glow-op-near)) 58%, rgba(var(--glow-rgb), var(--glow-op-far)) 68%, transparent 78%);transform:translate(-50%,-50%)scale(1)}50%{opacity:var(--glow-op-peak);background:radial-gradient(circle, rgba(var(--glow-rgb), 0) 34%, rgba(var(--glow-rgb), var(--glow-op-near-peak)) 56%, rgba(var(--glow-rgb), var(--glow-op-far-peak)) 68%, transparent 80%);transform:translate(-50%,-50%)scale(1.1)}}@keyframes mtx-view-slide-forward{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@keyframes mtx-view-slide-back{0%{opacity:0;transform:translate(-20px)}to{opacity:1;transform:translate(0)}}',n.appendChild(r);const o=document.createElement("div");return o.id=t,n.appendChild(o),{shadowRoot:n,mountEl:o}},Sd=e=>{const t=e??document.body,n=document.createElement("div");n.className="marketrix-widget-container",n.style.pointerEvents="auto",e&&Object.assign(n.style,{width:"100%",height:"100%",position:"relative",overflow:"visible"}),t.appendChild(n);const{shadowRoot:r,mountEl:o}=xd(n,"marketrix-widget-root");return Object.assign(o.style,{pointerEvents:"auto",width:"100%",height:"100%",position:"relative"}),{container:n,shadowRoot:r,mountEl:o}},kd=(e,n,r=!1)=>{const o=m(e);return o.render(/* @__PURE__ */b(t.StrictMode,{children:/* @__PURE__ */b(xl,{previewMode:r,children:/* @__PURE__ */b(bd,{config:n})})})),o},Cd=()=>null!==vd.mount,Ed=()=>vd.mount?.config??null,Id=(e,n="neutral")=>{if("undefined"==typeof window||"undefined"==typeof document)return;Md();const r=document.createElement("div");r.id="marketrix-widget-notice-container",r.className="marketrix-widget-notice-container",document.body.appendChild(r);const{mountEl:o}=xd(r,"marketrix-widget-notice-root");(wd=m(o)).render(/* @__PURE__ */b(t.StrictMode,{children:/* @__PURE__ */b(Rc,{container:o,children:/* @__PURE__ */b(Oc,{error:"error"===n?e:void 0,onClearError:Md,greeting:"error"===n?void 0:e,onGreetingDismiss:Md})})}))},Md=()=>{wd?.unmount(),wd=null,document.getElementById("marketrix-widget-notice-container")?.remove()},Td=null,Rd=0,Od=null;function Ad(e,t={}){const n=Hr(e);return n.invalidFields?(console.error(`Marketrix Widget: ${jr(n.invalidFields)}`),null):{...qr(n.settings,t),isPreviewMode:!0}}function _d(e,t,n=!1){const{container:r,mountEl:o}=Sd(t),i=kd(o,e,n);vd.mount={instance:i,config:e,container:r,host:t,previewMode:n}}var Dd=(e,t)=>{if(Td)return Td;if(window.__mtx?.state)return Promise.resolve();if(Cd())return Ae("Marketrix Widget: already initialized"),Promise.resolve();const n=async function(e,t,n){let r;window.__mtx={state:"initializing"},Id("Loading widget settings...");try{(e=>{if(!e?.trim())throw new Error("API URL is required for SDK configuration");e!==Ie&&(Ie=e,Me=Ee(e))})(e.mtxApiHost??""),r=await async function(e){const{mtxId:t,mtxKey:n}=e;if(!t||!n)throw new Error("Please provide mtxId + mtxKey");const r=`${t}:${n}`;let o=Vr.get(r);o||(o=async function(e,t,n){let r;try{({items:r}=await Te.widgetPublicSearch({marketrix_id:e,marketrix_key:t}))}catch(s){const e=Oe(s);throw function(e,t){return Object.assign(new Error(e),{cause:t})}(["Failed to fetch","ERR_CONNECTION_REFUSED","NetworkError","Network request failed"].some(t=>e.includes(t))?`Cannot connect to API server. Please ensure the API server is running at ${n||"configured API server"}. Error: ${e}`:`Widget validation failed: ${e}`,s)}if(!r.length)throw new Error("Widget not found or invalid credentials");const o=r.find(e=>"active"===e.status);if(!o){const e=r.map(e=>e.status).join(", ");throw new Error(`Found widget(s) but none are active. Current status(es): ${e}. Please activate the widget in the dashboard.`)}if(!o.application_id)throw new Error("Widget missing application_id");const i=Hr(o.settings);if(i.invalidFields)throw new Error(jr(i.invalidFields));return{settings:i.settings,applicationId:o.application_id}}(t,n,e.mtxApiHost),Vr.set(r,o),o.catch(()=>Vr.delete(r)));const{settings:i,applicationId:s}=await o;return{...qr(i,e),mtxId:t,mtxKey:n,mtxApp:s,isPreviewMode:!1}}(e)}catch(o){if(n!==Rd)return;return console.error("Marketrix Widget initialization failed:",o),Id(Oe(o,"Failed to initialize widget"),"error"),void(window.__mtx=void 0)}n===Rd&&(Md(),r.widget_enabled?(Be.setConfig(r),_d(r,t),window.__mtx={state:"active"},r.widget_recording&&r.mtxApp&&(async()=>{try{const e=await We.getOrCreateChatId();if(n!==Rd)return;const t=new mr(e,r.mtxApp);Od=t,await t.start(),n!==Rd&&(t.stop(),Od===t&&(Od=null))}catch(o){n===Rd&&console.error("Failed to start session recording:",o)}})()):window.__mtx=void 0)}(e,t,++Rd);return Td=n,n.then(()=>{Td===n&&(Td=null)},()=>{Td===n&&(Td=null)}),n},Pd=()=>{Rd++,fr.disconnect(),Od?.stop(),Od=null,vr(),Lr.cleanup();const e=vd.mount;vd.mount=null,e&&(e.instance.unmount(),e.container.remove()),Td=null,window.__mtx=void 0,Md()},Nd=async e=>{const t=vd.mount;if(!t)return;const{config:n,host:r,previewMode:o}=t,i={...n,...e};Pd(),o?_d(i,r,!0):await Dd(i,r)},Ld=({settings:e,container:t})=>{const n=d(null),r=d(null),o=d(null);return a(()=>{const i=t??n.current??document.body;if(!(i&&(s=i,s instanceof HTMLElement)))return void console.error("MarketrixWidgetPreview: Invalid container");var s;const a=Ad(e);if(!a)return;const{container:c,mountEl:l}=Sd(i);return o.current=c,r.current=kd(l,a,!0),()=>{r.current&&(r.current.unmount(),r.current=null),o.current&&(o.current.remove(),o.current=null)}},[e,t]),t?null:/* @__PURE__ */b("div",{ref:n,style:{width:"100%",height:"100%",position:"relative"}})},Fd=async e=>{const t=e.container;if(void 0!==e.settings){const{settings:n,container:r,...o}=e,i=Ad(e.settings,o);if(!i)return;Pd(),_d(i,t,!0)}else{if(void 0===e.mtxId||void 0===e.mtxKey)throw new Error("Invalid configuration: provide either settings (preview) or mtxId+mtxKey (production)");{const{container:n,...r}=e;await Dd(r,t)}}};"undefined"!=typeof window&&setTimeout(()=>{try{(e=>{if("undefined"==typeof window||"undefined"==typeof document)return;if(window.__mtx?.state)return;const t=document.querySelectorAll("script[mtx-id]"),n=t[t.length-1];if(!(n&&(r=n,r instanceof HTMLScriptElement)))return;var r;const o=n.getAttribute("mtx-id"),i=n.getAttribute("mtx-key"),s=n.getAttribute("mtx-api-host");if(!o||!i||!s){if(Cd())return;return console.error("[AutoInit] Missing required attributes:",{hasMtxId:!!o,hasMtxKey:!!i,hasMtxApiHost:!!s}),void Id("Please configure mtx-id, mtx-key and mtx-api-host","error")}const a={mtxId:o,mtxKey:i,mtxApiHost:s};"false"===n.getAttribute("mtx-use-screenshare")&&(a.use_screenshare=!1),e(a).catch(e=>console.error("[AutoInit] Failed to initialize widget:",e))})(Dd)}catch(e){console.error("Marketrix Widget: Auto-init registration failed",e)}},0);var zd={MarketrixWidgetPreview:Ld,mountWidget:Fd,initWidget:Dd,unmountWidget:Pd,updateMarketrixConfig:Nd,getCurrentConfig:Ed};export{Ld as MarketrixWidgetPreview,zd as default,Ed as getCurrentConfig,Dd as initWidget,Fd as mountWidget,Pd as unmountWidget,Nd as updateMarketrixConfig};
|