@marketrix.ai/widget 4.0.132 → 4.0.134
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.
|
@@ -12,8 +12,6 @@
|
|
|
12
12
|
* cascade rather than being pinned to a default, and the caller's `style` spreads LAST so it wins
|
|
13
13
|
* over every resolved token. `inheritColor` overrides `variant` and resolves to `TEXT_TONE.inherit`,
|
|
14
14
|
* letting text inside an already-coloured container (button, badge) take that colour.
|
|
15
|
-
*
|
|
16
|
-
* `className` is an escape hatch for `blocks/` only — product code styles through the props above.
|
|
17
15
|
*/
|
|
18
16
|
import type { ElementType, Ref } from 'react';
|
|
19
17
|
import { type TextLeading } from '../../design-system/component-tokens';
|
|
@@ -32,8 +30,7 @@ interface TextProps extends React.HTMLAttributes<HTMLElement> {
|
|
|
32
30
|
weight?: TextWeight;
|
|
33
31
|
truncate?: boolean;
|
|
34
32
|
align?: TextAlign;
|
|
35
|
-
className?: string;
|
|
36
33
|
ref?: Ref<HTMLElement>;
|
|
37
34
|
}
|
|
38
|
-
export declare function Text({ as: Component, block, inheritColor, italic, leading, variant, size, weight, truncate, align,
|
|
35
|
+
export declare function Text({ as: Component, block, inheritColor, italic, leading, variant, size, weight, truncate, align, ref, style, ...props }: TextProps): import("react").JSX.Element;
|
|
39
36
|
export {};
|
|
@@ -18,6 +18,16 @@
|
|
|
18
18
|
* as the console: an undelivered `tool/response` leaves the agent waiting on a reply that never comes, so
|
|
19
19
|
* the run stalls with nothing on screen unless the visitor is told, and `do` mode may still be clicking.
|
|
20
20
|
*
|
|
21
|
+
* `lastStreamErrorRef`/`currentErrorRef` close the loop `handleError` alone leaves open: `StreamClient`
|
|
22
|
+
* calls `onError` on every failed dial, not only a terminal give-up, so the visitor sees "Stream
|
|
23
|
+
* connection failed" while a transient blip is still auto-retrying, and nothing else ever un-shows it —
|
|
24
|
+
* without this pair, a single reconnect blip leaves a stale error banner on screen forever after the
|
|
25
|
+
* stream has already recovered. `registered` clears it, but ONLY when the error still on screen
|
|
26
|
+
* (`currentErrorRef`, a `useLatest` mirror of `uiState.error`) is byte-identical to the one this same
|
|
27
|
+
* effect set (`lastStreamErrorRef`): the visitor dismissing the banner themselves, or a later unrelated
|
|
28
|
+
* error (a tool failure, a stop failure) overwriting it, both change `currentErrorRef` away from that
|
|
29
|
+
* remembered string, so `registered` arriving later never clears a message it didn't put there.
|
|
30
|
+
*
|
|
21
31
|
* `event.type === 'task/status' && isTerminalTaskStatus(event.status)` reads `event.status` on every
|
|
22
32
|
* branch, but only the `task/status` variant of `WidgetEvent` carries a `status` field at all — on any
|
|
23
33
|
* other event it is `undefined`, which `isTerminalTaskStatus` (an `in` check against the status map)
|
package/dist/widget.mjs
CHANGED
|
@@ -11,14 +11,14 @@ return b(uc,{...d,ref:u,className:ac("mtx-button",e),"data-disabled":t?"true":"f
|
|
|
11
11
|
return b(n,{...p,ref:t,className:r,style:{...hc[c],...fc[u],...Ir(l),...ic(a),...i&&gc[i],...o}})}),bc=o(function(e,t){const{direction:n,hidden:r,style:o,...i}=e;/* @__PURE__ */
|
|
12
12
|
return b(yc,{...i,ref:t,hidden:r,style:{display:!0===r?"none":"flex",..."column"===n&&{flexDirection:"column"},...o}})}),vc=o(function(e,t){/* @__PURE__ */
|
|
13
13
|
return b(bc,{...e,ref:t,direction:"column"})}),wc=(e,t=2)=>({d:e,stroke:"currentColor",strokeWidth:t,strokeLinecap:"round",strokeLinejoin:"round"}),xc={checkCircle:{viewBox:"0 0 512 512",paths:[{d:"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"}]},circle:{viewBox:"0 0 512 512",paths:[{d:"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8z"}]},exclamationCircle:{viewBox:"0 0 512 512",paths:[{d:"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"}]},arrowUp:{viewBox:"0 0 448 512",paths:[{d:"M34.9 289.5l-22.2-22.2c-9.4-9.4-9.4-24.6 0-33.9L207 39c9.4-9.4 24.6-9.4 33.9 0l194.3 194.3c9.4 9.4 9.4 24.6 0 33.9L413 289.4c-9.5 9.5-25 9.3-34.3-.4L264 168.6V456c0 13.3-10.7 24-24 24h-32c-13.3 0-24-10.7-24-24V168.6L69.2 289.1c-9.3 9.8-24.8 10-34.3.4z"}]},arrowDown:{viewBox:"0 0 448 512",paths:[{d:"M413.1 222.5l22.2 22.2c9.4 9.4 9.4 24.6 0 33.9L241 473c-9.4 9.4-24.6 9.4-33.9 0L12.7 278.6c-9.4-9.4-9.4-24.6 0-33.9l22.2-22.2c9.5-9.5 25-9.3 34.3.4L184 343.4V56c0-13.3 10.7-24 24-24h32c13.3 0 24 10.7 24 24v287.4l114.8-120.5c9.3-9.8 24.8-10 34.3-.4z"}]},chatBubble:{viewBox:"0 0 512 512",paths:[{d:"M87.48 380c1.2-4.38-1.43-10.47-3.94-14.86a42.63 42.63 0 0 0-2.54-3.8 199.81 199.81 0 0 1-33-110C47.64 139.09 140.72 48 255.82 48 356.2 48 440 117.54 459.57 209.85a199 199 0 0 1 4.43 41.64c0 112.41-89.49 204.93-204.59 204.93-18.31 0-43-4.6-56.47-8.37s-26.92-8.77-30.39-10.11a31.14 31.14 0 0 0-11.13-2.07 30.7 30.7 0 0 0-12.08 2.43L81.5 462.78a15.92 15.92 0 0 1-4.66 1.22 9.61 9.61 0 0 1-9.58-9.74 15.85 15.85 0 0 1 .6-3.29z",fill:"none",stroke:"currentColor",strokeWidth:32,strokeLinecap:"round"},{d:"M160 256 m-32 0 a32 32 0 1 1 64 0 a32 32 0 1 1 -64 0"},{d:"M256 256 m-32 0 a32 32 0 1 1 64 0 a32 32 0 1 1 -64 0"},{d:"M352 256 m-32 0 a32 32 0 1 1 64 0 a32 32 0 1 1 -64 0"}]},stop:{viewBox:"0 0 512 512",paths:[{d:"M392 432H120a40 40 0 0 1-40-40V120a40 40 0 0 1 40-40h272a40 40 0 0 1 40 40v272a40 40 0 0 1-40 40z"}]},mousePointerClick:{viewBox:"0 0 24 24",paths:[wc("M14 4.1 12 6"),wc("m5.1 8-2.9-.8"),wc("m6 12-1.9 2"),wc("M7.2 2.2 8 5.1"),wc("M9.037 9.69a.498.498 0 0 1 .653-.653l11 4.5a.5.5 0 0 1-.074.949l-4.349 1.041a1 1 0 0 0-.74.739l-1.04 4.35a.5.5 0 0 1-.95.074z")]},ticktick:{viewBox:"0 0 24 24",paths:[{d:"M12 0C5.383 0 0 5.383 0 12s5.383 12 12 12 12-5.383 12-12h-2.7c0 5.128-4.172 9.3-9.3 9.3-5.128 0-9.3-4.172-9.3-9.3 0-5.128 4.172-9.3 9.3-9.3V0Zm7.4 2.583-7.505 9.371L8.388 9.08l-2.002 2.436 4.741 3.888a1.573 1.573 0 0 0 2.231-.233l8.504-10.617L19.4 2.583Z"}]},home:{viewBox:"0 0 24 24",paths:[wc("M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6")]},chat:{viewBox:"0 0 24 24",paths:[wc("M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z")]},send:{viewBox:"0 0 24 24",paths:[wc("M5 12h14m-7-7l7 7-7 7")]},closeSmall:{viewBox:"0 0 12 12",paths:[wc("M9 3L3 9M3 3l6 6",1.5)]},close:{viewBox:"0 0 20 20",paths:[{d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",fillRule:"evenodd",clipRule:"evenodd"}]},chevronDown:{viewBox:"0 0 24 24",paths:[wc("M19 9l-7 7-7-7",2.5)]},screenShare:{viewBox:"0 0 24 24",paths:[wc("M15 10l4.553-2.276A1 1 0 0121 8.618v6.764a1 1 0 01-1.447.894L15 14M5 18h8a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v8a2 2 0 002 2z")]},alertCircle:{viewBox:"0 0 24 24",paths:[wc("M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z")]}};function Sc({name:e,size:t=16,className:n,ref:r,...o}){const i=xc[e];return i?/* @__PURE__ */b("svg",{...o,ref:r,"aria-hidden":"true",className:ac("mtx-icon",n),fill:"none",height:t,viewBox:i.viewBox,width:t,xmlns:"http://www.w3.org/2000/svg",children:i.paths.map((e,t)=>/* @__PURE__ */b("path",{clipRule:e.clipRule,d:e.d,fill:e.fill??(e.stroke?"none":"currentColor"),fillRule:e.fillRule,stroke:e.stroke,strokeLinecap:e.strokeLinecap,strokeLinejoin:e.strokeLinejoin,strokeMiterlimit:e.strokeMiterlimit,strokeWidth:e.strokeWidth},t))}):null}function kc({variant:e="ghost",size:t="sm",tone:n,label:r,disabled:o,children:i,style:s,ref:a,...c}){/* @__PURE__ */
|
|
14
|
-
return b("button",{...c,ref:a,type:"button",disabled:o,"aria-label":r,className:"mtx-icon-button","data-disabled":o?"true":"false","data-size":t,"data-variant":e,style:n?{color:xr[n],...s}:s,children:i})}var Cc={xxs:"10px",xs:"0.75rem",sm:"0.875rem",lg:"1.125rem"},Ec={normal:400,medium:500,semibold:600},Ic={overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"};function Mc({as:e="span",block:t=!1,inheritColor:n=!1,italic:r=!1,leading:o,variant:i="default",size:s,weight:a,truncate:c,align:l,
|
|
15
|
-
return b(e,{...
|
|
14
|
+
return b("button",{...c,ref:a,type:"button",disabled:o,"aria-label":r,className:"mtx-icon-button","data-disabled":o?"true":"false","data-size":t,"data-variant":e,style:n?{color:xr[n],...s}:s,children:i})}var Cc={xxs:"10px",xs:"0.75rem",sm:"0.875rem",lg:"1.125rem"},Ec={normal:400,medium:500,semibold:600},Ic={overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"};function Mc({as:e="span",block:t=!1,inheritColor:n=!1,italic:r=!1,leading:o,variant:i="default",size:s,weight:a,truncate:c,align:l,ref:u,style:d,...p}){/* @__PURE__ */
|
|
15
|
+
return b(e,{...p,ref:u,style:{color:xr[n?"inherit":i],...s&&{fontSize:Cc[s]},...a&&{fontWeight:Ec[a]},...l&&{textAlign:l},...o&&{lineHeight:Sr[o]},...t&&{display:"block"},...r&&{fontStyle:"italic"},...c&&Ic,...d}})}var Tc=()=>{const{toasts:e}=Ja();return e.map(e=>{const t=Er["error"===e.type||"info"===e.type?e.type:"neutral"];/* @__PURE__ */
|
|
16
16
|
return v(zs,{toast:e,className:"mtx-toast",render:/* @__PURE__ */b(bc,{align:"center",gap:"md",rounded:"pill",paddingPreset:"toast",elevation:"panel",style:{backgroundColor:t.background,border:t.border}}),children:[
|
|
17
17
|
/* @__PURE__ */b(lc,{src:Za,alt:"",size:28,rounded:"pill"}),
|
|
18
18
|
/* @__PURE__ */v(vc,{grow:!0,minWidth:"0",children:[/* @__PURE__ */b(Ys,{render:/* @__PURE__ */b(Mc,{as:"span",block:!0,inheritColor:!0,truncate:!0,weight:"medium",style:{fontSize:"13px",color:t.titleColor,...e.actionProps&&{whiteSpace:"normal"}}})}),null!=e.description&&/* @__PURE__ */b(Vs,{render:/* @__PURE__ */b(Mc,{as:"span",block:!0,inheritColor:!0,truncate:!0,style:{fontSize:"12px",color:t.bodyColor,opacity:.8}})})]}),e.actionProps&&/* @__PURE__ */b(ea,{render:/* @__PURE__ */b(pc,{variant:"ghost",shape:"pill",size:"sm",style:{color:t.titleColor,backgroundColor:t.actionBackground,border:t.border}})}),
|
|
19
19
|
/* @__PURE__ */b(Qs,{onMouseDown:e=>e.preventDefault(),render:/* @__PURE__ */b(kc,{label:"Dismiss",size:"xs",tone:"inherit",style:{color:t.closeColor,padding:"2px"}}),children:/* @__PURE__ */b(Sc,{name:"closeSmall",size:12})})]},e.id)})},Rc=({children:e,container:t,offsetBottom:n=20})=>/* @__PURE__ */v(Zi,{children:[e,/* @__PURE__ */b(pa,{container:t??void 0,children:/* @__PURE__ */b(Ss,{className:"mtx-toast-viewport",style:{zIndex:2147483004,bottom:`${n}px`},children:/* @__PURE__ */b(Tc,{})})})]}),Oc=({error:e,onClearError:t,onRetry:n,greeting:r,greetingBody:o,onGreetingDismiss:i})=>{const{add:s,close:c}=Ja();return a(()=>{null!=e?s({id:"error",type:"error",title:e,timeout:0,priority:"high",onClose:t,...n&&{actionProps:{children:"Retry",onClick:n}}}):c("error")},[e,n,s,c,t]),a(()=>{r?s({id:"greeting",type:"info",title:r,description:o,timeout:8e3,onClose:i}):c("greeting")},[r,o,s,c,i]),null};function Ac(e){const t=d(e);return t.current=e,t}var _c=e=>e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement,Dc=e=>e instanceof HTMLButtonElement||"button"===e.getAttribute("role");function Pc(e,t){const n=1===t?"ArrowDown":"ArrowUp",r=e.selectedIndex+t;return r<0||r>=e.options.length?`${n}: already at ${1===t?"last":"first"} option`:(e.selectedIndex=r,e.dispatchEvent(new Event("change",{bubbles:!0})),`${n}: selected "${e.options[r]?.text??""}"`)}function Nc(e,t){const n=e.value,r=e.selectionStart??n.length,o=e.selectionEnd??n.length;let i,s;if(r!==o)i=n.slice(0,r)+n.slice(o),s=r;else if("Backspace"===t&&r>0)i=n.slice(0,r-1)+n.slice(o),s=r-1;else{if(!("Delete"===t&&r<n.length))return`${t}: ${"Backspace"===t?"cursor at start":"cursor at end"}, nothing to delete`;i=n.slice(0,r)+n.slice(r+1),s=r}return function(e,t,n){Lc(e,t),e.dispatchEvent(new Event("input",{bubbles:!0})),e.dispatchEvent(new Event("change",{bubbles:!0})),e.setSelectionRange(n,n)}(e,i,s),`${t}: deleted character, value is now "${i}"`}function Lc(e,t){const n=Object.getOwnPropertyDescriptor(e instanceof HTMLTextAreaElement?HTMLTextAreaElement.prototype:HTMLInputElement.prototype,"value")?.set;n?n.call(e,t):e.value=t}var Fc=e=>({success:!0,data:{text:e}}),zc=e=>({success:!0,data:e}),$c=e=>({success:!1,error:e}),Bc=(e,t)=>({success:!0,data:{text:e},afterResponseAttempt:t}),Wc="finish",Uc=new class{tools={navigate:{label:"Navigating",run:e=>this.navigate(e)},search_web:{label:"Searching",run:e=>this.search(e)},click_element:{label:"Clicking element",waitForUser:!0,run:e=>this.clickElement(e)},type_text:{label:"Typing text",waitForUser:!0,run:e=>this.typeText(e)},scroll:{label:"Scrolling",run:e=>this.scroll(e)},scroll_to_text:{label:"Scrolling to text",run:e=>this.scrollToText(e)},extract:{label:"Extracting content",run:e=>this.extract(e)},go_back:{label:"Going back",run:()=>this.goBack()},wait_seconds:{label:"Waiting",run:e=>this.wait(e)},select_dropdown:{label:"Selecting option",waitForUser:!0,run:e=>this.selectDropdownOption(e)},get_dropdown_options:{label:"Reading dropdown options",run:e=>this.getDropdownOptions(e)},send_keys:{label:"Pressing key",waitForUser:!0,run:e=>this.sendKeys(e)},close_tab:{label:"Closing tab",run:()=>this.closeTab()},[Wc]:{label:"Done",run:e=>this.done(e)},get_html:{label:"Reading the page",run:()=>this.getHtml()},get_screenshot:{label:"Taking screenshot",run:()=>this.getScreenshot()}};element(e){if(void 0===e)throw new Error("Index required");const{element:t,error:n}=_r.getValidatedElement(e);if(!t)throw new Error(n||`Element ${e} not found`);return t}selectElement(e){const t=this.element(e);if(!(t instanceof HTMLSelectElement))throw new Error(`Element ${e} is not a select element`);return t}getFriendlyToolName(e){return this.tools[e]?.label??e}isWaitForUserTool(e){return!!this.tools[e]?.waitForUser}async executeTool(e,t,n,r=""){const o=t,i=this.tools[e];try{return"show"===n&&i?.waitForUser&&void 0!==o.index&&await Lr.showToolAction({element:this.element(o.index),explanation:r||`Execute ${e}`,browserToolName:e,isClickAction:"click_element"===e}),i?await i.run(o):$c(`Unknown tool: ${e}`)}catch(s){return $c(Oe(s))}}navigate(e){const t=(e=>{if(!e)return null;try{const t=new URL(e,window.location.href);return"http:"===t.protocol||"https:"===t.protocol?t.href:null}catch{return null}})(e.url);return t?e.new_tab?window.open(t,"_blank")?Fc(`Opened ${t} in new tab`):$c("The browser blocked opening a new tab"):Bc(`Navigating to ${t}`,()=>{window.location.href=t}):$c("An http(s) URL is required")}search(e){if(!e.query)return $c("Query is required");const t=e.engine||"duckduckgo",n=encodeURIComponent(e.query);let r=`https://duckduckgo.com/?q=${n}`;return"google"===t&&(r=`https://www.google.com/search?q=${n}`),"bing"===t&&(r=`https://www.bing.com/search?q=${n}`),Bc(`Searching for "${e.query}" on ${t}`,()=>{window.location.href=r})}async clickElement(e){const t=this.element(e.index);return t.scrollIntoView({behavior:"smooth",block:"center"}),await new Promise(e=>setTimeout(e,100)),Bc(`Clicking element ${e.index}`,()=>t.click())}typeText(e){if(void 0===e.text)return $c("Text required");const t=!1!==e.clear,n=this.element(e.index);if(_c(n))n.focus(),Lc(n,t?e.text:n.value+e.text),n.dispatchEvent(new InputEvent("input",{bubbles:!0,cancelable:!0,inputType:"insertText",data:e.text})),n.dispatchEvent(new Event("change",{bubbles:!0})),n.dispatchEvent(new Event("blur",{bubbles:!0}));else if(n.isContentEditable){n.focus();const r=window.getSelection();if(t?r?.selectAllChildren(n):r?.collapse(n,n.childNodes.length),!document.execCommand("insertText",!1,e.text))return $c(`Could not insert text into element ${e.index}`)}else"value"in n?(n.value=e.text,n.dispatchEvent(new Event("input",{bubbles:!0})),n.dispatchEvent(new Event("change",{bubbles:!0}))):(n.textContent=e.text,n.dispatchEvent(new Event("input",{bubbles:!0})));return Fc(`Typed text into element ${e.index}`)}scroll(e){const t=.8*window.innerHeight;switch(e.direction){case"down":window.scrollBy({top:t,behavior:"smooth"});break;case"up":window.scrollBy({top:-t,behavior:"smooth"});break;case"left":window.scrollBy({left:-t,behavior:"smooth"});break;case"right":window.scrollBy({left:t,behavior:"smooth"});break;default:return $c("Invalid direction")}return Fc(`Scrolled ${e.direction}`)}scrollToText(e){if(!e.text)return $c("Text required");const t=document.createTreeWalker(document.body,NodeFilter.SHOW_TEXT);let n;for(;n=t.nextNode();)if(n.textContent?.includes(e.text))return n.parentElement?.scrollIntoView({behavior:"smooth",block:"center"}),Fc(`Scrolled to "${e.text}"`);return $c(`Text "${e.text}" not found`)}extract(e){const t=!1!==e.extract_links,n={title:document.title,url:window.location.href,text:document.body.innerText.slice(0,1e4),links:t?Array.from(document.querySelectorAll("a[href]")).slice(0,100).map(e=>({text:e.textContent?.trim()||"",href:e.getAttribute("href")})):[]};return zc(n)}goBack(){return window.history.length<=1?$c("No history"):Bc("Going back",()=>window.history.back())}async wait({seconds:e}){return void 0===e?$c("Seconds required"):(await new Promise(t=>setTimeout(t,1e3*e)),Fc(`Waited ${e}s`))}selectDropdownOption(e){if(!e.option)return $c("Option required");const t=this.selectElement(e.index),n=Array.from(t.options).find(t=>t.value===e.option||t.text===e.option);return n?(t.value=n.value,t.dispatchEvent(new Event("change",{bubbles:!0})),Fc(`Selected ${e.option}`)):$c(`Option ${e.option} not found`)}getDropdownOptions(e){const t=Array.from(this.selectElement(e.index).options).map(e=>({value:e.value,text:e.text}));return zc({options:t})}sendKeys(e){if(!e.keys)return $c("Keys required");const t=this.element(e.index);t.focus(),t.dispatchEvent(new KeyboardEvent("keydown",{key:e.keys,bubbles:!0,cancelable:!0})),t.dispatchEvent(new KeyboardEvent("keyup",{key:e.keys,bubbles:!0,cancelable:!0}));const n=function(e,t){switch(t){case"Tab":case"Shift+Tab":{const n="Tab"===t?1:-1,r=Tr(document),o=r.indexOf(e),i=-1===o?void 0:r[o+n];return i?(i.focus(),`${t}: moved focus to ${i.tagName.toLowerCase()}${i.id?`#${i.id}`:""}`):`${t}: no ${n>0?"next":"previous"} focusable element`}case"Enter":if(Dc(e))return e.click(),"Enter: clicked button";if(_c(e)){const t=e.closest("form");if(t){const e=t.querySelector('button[type="submit"], input[type="submit"]');return e?(e.click(),"Enter: clicked form submit button"):(t.requestSubmit(),"Enter: submitted form")}}return e instanceof HTMLAnchorElement?(e.click(),"Enter: clicked link"):"Enter: dispatched event";case"Escape":return e.blur(),document.dispatchEvent(new KeyboardEvent("keydown",{key:"Escape",bubbles:!0,cancelable:!0})),"Escape: blurred element and dispatched to document";case" ":case"Space":return e instanceof HTMLInputElement&&("checkbox"===e.type||"radio"===e.type)?(e.click(),`Space: toggled ${e.type}`):Dc(e)?(e.click(),"Space: clicked button"):"Space: dispatched event";case"ArrowDown":return e instanceof HTMLSelectElement?Pc(e,1):"ArrowDown: dispatched event";case"ArrowUp":return e instanceof HTMLSelectElement?Pc(e,-1):"ArrowUp: dispatched event";case"Home":return _c(e)?(e.setSelectionRange(0,0),"Home: moved cursor to start"):"Home: dispatched event";case"End":if(_c(e)){const t=e.value.length;return e.setSelectionRange(t,t),"End: moved cursor to end"}return"End: dispatched event";case"Backspace":return _c(e)?Nc(e,"Backspace"):"Backspace: dispatched event";case"Delete":return _c(e)?Nc(e,"Delete"):"Delete: dispatched event";default:return null}}(t,e.keys);return Fc(n||`Sent keys ${e.keys}`)}closeTab(){return window.close(),window.closed?Fc("Tab closed"):$c("The browser refused to close a tab this script did not open")}done(e){return Fc(e.message||"Task ended")}getHtml(){return Fc(_r.reindexAndSnapshot())}async getScreenshot(){const e=br();if(!e)return $c("The visitor is not sharing their screen.");const t=document.createElement("video");try{t.srcObject=e,t.autoplay=!0,t.style.display="none",document.body.appendChild(t),await new Promise((e,n)=>{const r=setTimeout(()=>n(/* @__PURE__ */new Error("Screen capture produced no frame")),5e3);t.onloadeddata=()=>{clearTimeout(r),e()},t.onerror=()=>{clearTimeout(r),n(/* @__PURE__ */new Error("Screen capture failed"))}});const n=document.createElement("canvas");n.width=t.videoWidth,n.height=t.videoHeight;const r=n.getContext("2d");return r?(r.drawImage(t,0,0),Fc(n.toDataURL("image/jpeg",.75))):$c("Could not read the shared screen: the browser refused a 2d canvas context.")}finally{t.remove()}}},Hc={show:"Show",tell:"Tell",do:"Do"},jc=e=>Hc[e];function qc(e,t){for(let n=e.length-1;n>=0;n--){const r=e[n];if(void 0!==r&&t(r))return n}return-1}function Vc({messages:e,isTaskRunning:t,currentMode:n}){const r=e=>"agent"===e.sender&&!e.isSystemMessage&&!e.isScreenAccessRequest&&!e.taskStatus,o=e=>e.isPlaceholder&&void 0===e.mode||e.mode===n,i=[];!t||"show"!==n&&"do"!==n||i.push(e=>r(e)&&o(e)&&!!e.isPlaceholder,e=>r(e)&&o(e)),i.push(e=>r(e)&&!!e.isPlaceholder,r);const s=qc(e,e=>"agent"===e.sender&&!!e.taskStatus)+1,a=e.slice(s);for(const c of i){const e=qc(a,c),t=e>=0?a[e]:void 0;if(t)return{index:s+e,message:t}}return Ae(`[MessageFinder] No message found for progress update: totalMessages=${e.length} isTaskRunning=${t} currentMode=${n}`),null}var Yc=e=>e.replace(/\(?cancelled by cleanup\)?/gi,"").trim();function Kc(e,t,n){const r=t>=0?e.parts[t]:void 0;if(!r)return e;const o=[...e.parts];return o[t]={...r,...n},{...e,parts:o}}var Xc=(e,t)=>e.parts.findIndex(e=>"progress"===e.type&&"in_progress"===e.status&&e.browserToolName===t);function Gc(e,t,n,r={}){return{id:`${e}-${globalThis.crypto.randomUUID()}`,sender:t,timestamp:/* @__PURE__ */new Date,parts:n?[{type:"text",content:n}]:[],...r}}var Jc=(e,t,n="user-message")=>Gc(n,"user",e.trim(),{mode:t}),Zc=e=>Gc("agent-message","agent",e.trim()),Qc=(e,t)=>Gc(t,"agent",e,{isSystemMessage:!0}),el="I'm sorry, I encountered an error processing your request. Please try again.",tl=e=>({state:e,effects:[]});function nl(e,t,n,r,o,i,s){const a=Vc({messages:e,isTaskRunning:t,currentMode:n});if(!a)return e;let c=a.message;if("failed"===i?c=function(e,t,n){const r=Xc(e,t),o=r>=0?e.parts[r]:void 0;if(!o)return e;const i=Yc(o.content),s=Yc(n);return Kc(e,r,{status:"failed",content:s?`${i} (${s})`:i})}(c,r,s||""):"finish"!==r&&(c="in_progress"===i?function(e,t,n){const r=Yc(n),o=Xc(e,t);return o>=0?Kc(e,o,{content:r}):{...e,parts:[...e.parts,{type:"progress",content:r,status:"in_progress",browserToolName:t}]}}(c,r,o||Uc.getFriendlyToolName(r)):((e,t)=>Kc(e,Xc(e,t),{status:"completed"}))(c,r)),t&&("show"===n||"do"===n)){const e="in_progress"===i&&"show"===n&&Uc.isWaitForUserTool(r);c={...c,placeholderState:e?"waiting-for-user":"thinking"}}const l=[...e];return l[a.index]=c,l}var rl=(e,t)=>"running"===e.task.phase?e.task.mode??t:t,ol=e=>({...e,isPlaceholder:!1}),il=e=>"stopped"===e.phase?e:{phase:"idle"};function sl(e,t,n){const r=Vc({messages:e.messages,isTaskRunning:"running"===e.task.phase,currentMode:rl(e,t)}),o=[...e.messages];return r&&(o[r.index]=ol(n(r.message))),{messages:o,task:il(e.task)}}var al={completed:"done",failed:"failed",stopped:"stopped"};function cl(e,t,n,r){const o=e.messages.map(e=>{if(e.id!==t)return e;const o=[...e.parts],i=o[o.length-1],s="text"===i?.type&&!0===i.streaming;if("text"===i?.type&&!s&&i.content===n)return e;const a={type:"text",content:r&&s?i.content+n:n,...r&&{streaming:!0}};return s?o[o.length-1]=a:o.push(a),{...e,isPlaceholder:!1,placeholderState:void 0,parts:o}});return{...e,messages:o}}var ll=(e,t)=>({...e,parts:[...e.parts,{type:"text",content:t}]}),ul=(e,t)=>({...ol(ll(e,t)),placeholderState:void 0,taskStatus:"failed"});function dl(e,t,n){const r=e.messages.map(e=>e.id===t?ul(e,n):e);return{...e,messages:r}}var pl=n(void 0),hl=({children:e})=>{const[t,n]=p({isOpen:!1,activeView:"home",currentMode:"tell"}),r=u(()=>({setActiveView:e=>n(t=>({...t,activeView:e})),toggleWidget:()=>n(e=>({...e,isOpen:!e.isOpen})),closeWidget:()=>n(e=>({...e,isOpen:!1})),setMode:e=>n(t=>({...t,currentMode:e})),setError:e=>n(t=>({...t,error:e})),applyState:e=>n(t=>({...t,...e}))}),[]),o=u(()=>({uiState:t,uiActions:r}),[t,r]);/* @__PURE__ */
|
|
20
|
-
return b(pl.Provider,{value:o,children:e})},fl=()=>{const e=s(pl);if(!e)throw new Error("useUIStateContext must be used within UIStateProvider");return e},ml=n(void 0),gl=({children:e,previewMode:t=!1})=>{const{uiState:n,uiActions:r}=fl(),[o,s]=p(()=>({messages:[],task:{phase:"idle"}})),c=d(o),l=Ac(n.currentMode),h=d(/* @__PURE__ */new Set),f=i(e=>{const t=c.current,n=e(t);n===t||n.messages===t.messages&&n.task===t.task||(c.current=n,s(n))},[]),
|
|
21
|
-
return b(ml.Provider,{value:
|
|
20
|
+
return b(pl.Provider,{value:o,children:e})},fl=()=>{const e=s(pl);if(!e)throw new Error("useUIStateContext must be used within UIStateProvider");return e},ml=n(void 0),gl=({children:e,previewMode:t=!1})=>{const{uiState:n,uiActions:r}=fl(),[o,s]=p(()=>({messages:[],task:{phase:"idle"}})),c=d(o),l=Ac(n.currentMode),h=d(/* @__PURE__ */new Set),f=Ac(n.error),m=d(void 0),g=i(e=>{const t=c.current,n=e(t);n===t||n.messages===t.messages&&n.task===t.task||(c.current=n,s(n))},[]),y=i(e=>{g(t=>({...t,messages:[...t.messages,e]}))},[g]),v=i((e,t)=>{g(n=>({...n,messages:n.messages.map(n=>n.id===e?{...n,...t}:n)}))},[g]),w=i(e=>{g(t=>({...t,messages:t.messages.filter(t=>t.id!==e)}))},[g]),x=i(e=>{g(t=>({...t,messages:e}))},[g]),S=i(()=>{g(e=>({...e,messages:[]}))},[g]),k=i(()=>{g(e=>({...e,task:{phase:"idle"}}))},[g]),C=o.messages.filter(e=>e.isPlaceholder).map(e=>`${e.id}:${e.parts.length}`).join(" ");a(()=>{const e=C.split(" ").filter(Boolean).map(e=>e.split(":")[0]).filter(e=>void 0!==e).map(e=>setTimeout(()=>g(t=>function(e,t){const n=e.messages.find(e=>e.id===t);return n?.isPlaceholder&&"waiting-for-user"!==n.placeholderState?dl(e,t,"This is taking longer than expected. Please try again."):e}(t,e)),12e4));return()=>e.forEach(clearTimeout)},[C,g]);const E=i(async(e,n,r)=>{const o=n??l.current;if(t)return r||y(Jc(e,o)),void y(Zc("This is a preview. In production, I'll respond to your messages here."));if(!Be.getCredentialedConfig())return console.error("Config not loaded or incomplete"),void y(Zc("Configuration error: Missing API credentials. Please check your widget settings."));r||y(Jc(e,o));const i=(e=>Gc("temp","agent","",{mode:e,isPlaceholder:!0,placeholderState:"thinking"}))(o);g(e=>function(e,t){return{messages:[...e.messages,t],task:{phase:"idle"}}}(e,i));try{await async function(e,t,n){const r=await We.getOrCreateChatId(),o={type:`chat/${t}`,request_id:n,content:e};await fr.ready(r),await fr.send(o)}(e,o,i.id)}catch(s){console.error("Failed to send message:",s),g(e=>dl(e,i.id,el))}},[t,y,g]);a(()=>{if(t)return;const{handleMessage:e,handleError:n}=function(e){const{commit:t,currentModeRef:n,setError:r,processedToolCallIds:o,currentErrorRef:i,lastStreamErrorRef:s}=e,a=async e=>{const{toolCallId:o,tool:i,args:s,mode:a,explanation:c}=e,l=await Uc.executeTool(i,s,a,c),u=l.success?void 0:l.error;t(e=>function(e,t,n,r,o,i){return{...e,messages:nl(e.messages,"running"===e.task.phase,rl(e,o),t,n,r,i)}}(e,i,c,u?"failed":"completed",n.current,u)),u||"finish"!==i||t(e=>sl(e,n.current,e=>({...e,taskStatus:"done",parts:e.parts.filter(e=>"progress"!==e.type)}))),await fr.send({type:"tool/response",tool_call_id:o,success:l.success,...l.success&&{data:JSON.stringify(l.data)},error:u}).catch(e=>{console.error("Failed to send tool response:",e),r("Could not report that step back to the assistant — it may stop responding.")}),l.success&&l.afterResponseAttempt?.()};return{handleMessage:e=>{if("tool/call"===e.type){const t=e.tool_call_id;if(o.current.has(t))return;o.current.add(t),o.current.size>1e3&&(o.current=new Set([...o.current].slice(-500)))}else"task/status"===e.type&&e.status in al?o.current.clear():"chat/error"===e.type?Ae("[Widget] Chat error from server:",e.error):"registered"===e.type&&void 0!==s.current&&i.current===s.current&&(s.current=void 0,r(void 0));let c=[];t(t=>{const r=function(e,t,n){switch(t.type){case"tool/call":{if("stopped"===e.task.phase)return tl(e);const r="running"===e.task.phase?e.task:{phase:"running",mode:t.mode||n},o=t.explanation||"";return{state:{messages:nl(e.messages,!0,r.mode??n,t.browser_tool,o,"in_progress"),task:r},effects:[{type:"executeTool",toolCallId:t.tool_call_id,tool:t.browser_tool,args:t.args,mode:t.mode||n,explanation:o}]}}case"task/status":{if("running"===t.status)return tl(e);const r=t.status,o=e=>t.message?ll(e,t.message):e;return{state:sl(e,n,"has_question"===r?e=>({...o(e),placeholderState:"waiting-for-user"}):e=>({...o(e),taskStatus:al[r]})),effects:[]}}case"chat/delta":return{state:cl(e,t.request_id,t.text,!0),effects:[]};case"chat/response":return{state:cl(e,t.request_id,t.text,!1),effects:[]};case"chat/error":return{state:dl(e,t.request_id,el),effects:[]};default:return tl(e)}}(t,e,n.current);return c=r.effects,r.state});for(const t of c)a(t).catch(e=>{console.error("[Widget] Tool call failed:",e),r("Something went wrong running that step. Please try again.")})},handleError:e=>{r(e.message),s.current=e.message,e instanceof hr&&t(t=>{return n=t,r=e.message,{messages:n.messages.map(e=>e.isPlaceholder?ul(e,r):e),task:il(n.task)};var n,r})}}}({commit:g,currentModeRef:l,setError:r.setError,processedToolCallIds:h,currentErrorRef:f,lastStreamErrorRef:m}),o={onMessage:e,onError:n};return fr.addCallbacks(o),()=>{fr.removeCallbacks(o)}},[t,g,r,l]);const I=i(async()=>{g(e=>function(e,t){return{...sl(e,t,e=>({...e,taskStatus:"stopped"})),task:{phase:"stopped"}}}(e,l.current)),t||fr.send({type:"chat/stop"}).catch(e=>{console.error("Failed to stop task remotely:",e),r.setError("Could not stop the assistant — it may still be working.")})},[t,g,r]),M=u(()=>({addMessage:y,updateMessage:v,removeMessage:w,setMessages:x,clearMessages:S,messageDispatch:E}),[y,v,w,x,S,E]),T=u(()=>({resetTask:k,stopTask:I}),[k,I]),R=u(()=>({messages:o.messages,chatActions:M,taskState:o.task,taskActions:T}),[o.messages,M,o.task,T]);/* @__PURE__ */
|
|
21
|
+
return b(ml.Provider,{value:R,children:e})},yl=()=>{const e=s(ml);if(!e)throw new Error("useChatContext must be used within ChatProvider");return e},bl=n(null),vl=()=>{const{uiState:e}=fl(),{messages:t}=yl();return a(()=>{const{currentMode:n,isOpen:r}=e;var o;o={messages:t,currentMode:n,isOpen:r},Be.updateContext({...o,messages:o.messages.map(({videoStream:e,...t})=>{const n=t.timestamp.toISOString();if(!e)return{...t,timestamp:n,content:Re(t.parts)};const r="Screen sharing ended";return{...t,timestamp:n,content:r,isSystemMessage:!0,parts:[{type:"text",content:r}]}})})},[t,e]),null},wl=({children:e,previewMode:t})=>{const{uiActions:n}=fl(),{chatActions:r}=yl(),[o,i]=p(!1);return a(()=>{if(t)return;let e=!1;return(async()=>{const{messages:t,...o}=function(){const{chat_id:e,config:t,timestamp:n,messages:r,...o}=Be.getContext();return{...o,messages:r.map(({content:e,...t})=>{const n=[...t.parts],r=e.trim();return 0===n.length&&r&&n.push({type:"text",content:r}),{...t,timestamp:new Date(t.timestamp),parts:n}})}}();n.applyState(o),r.setMessages(t),i(!0);const s=await We.getOrCreateChatId();e||fr.connect(s)})().catch(t=>{e||(console.error("Widget initialization failed:",t),n.setError("Widget failed to initialise — please refresh the page."))}),()=>{e=!0}},[t,n,r]),/* @__PURE__ */v(y,{children:[e,o&&/* @__PURE__ */b(vl,{})]})},xl=({children:e,previewMode:t=!1})=>/* @__PURE__ */b(hl,{children:/* @__PURE__ */b(gl,{previewMode:t,children:/* @__PURE__ */b(wl,{previewMode:t,children:e})})}),Sl=/^#?([a-f\d]{3}|[a-f\d]{6})$/i,kl=/^rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)/i;function Cl(e){const t=Sl.exec(e.trim())?.[1];if(t){const[e,n,r]=3===t.length?[t.charAt(0)+t.charAt(0),t.charAt(1)+t.charAt(1),t.charAt(2)+t.charAt(2)]:[t.slice(0,2),t.slice(2,4),t.slice(4,6)];return{r:parseInt(e??"",16),g:parseInt(n??"",16),b:parseInt(r??"",16)}}const n=kl.exec(e.trim());if(!n)return null;const r=Number(n[1]),o=Number(n[2]),i=Number(n[3]);return r>255||o>255||i>255?null:{r:r,g:o,b:i}}function El({r:e,g:t,b:n}){const r=e=>e<=.03928?e/12.92:Math.pow((e+.055)/1.055,2.4);return.2126*r(e/255)+.7152*r(t/255)+.0722*r(n/255)}function Il(e,t){const n=Cl(e),r=Cl(t);if(!n||!r)return null;const o=El(n),i=El(r);return(Math.max(o,i)+.05)/(Math.min(o,i)+.05)}function Ml(e){return Cl(e)?(Il(e,"#000000")??0)>=(Il(e,"#ffffff")??0)?"#000000":"#ffffff":"#000000"}function Tl(e,t){const n=Cl(e);return n?`rgba(${n.r}, ${n.g}, ${n.b}, ${t})`:e}function Rl(e){return e.includes("gradient")?e:`linear-gradient(135deg, ${e} 0%, ${e} 100%)`}var Ol={widget_background_color:"#ffffff",widget_text_color:"#1f2937",widget_border_color:"#e5e7eb",widget_accent_color:"#3b82f6",widget_secondary_color:"#6b7280"},Al=n(null),_l=()=>{const e=s(Al);if(!e)throw new Error("useWidgetConfig must be used within WidgetRoot");return e},Dl=()=>{const{uiState:e,uiActions:t}=fl(),{messages:n,chatActions:r,taskState:o,taskActions:i}=yl();return{state:u(()=>({...e,messages:n,isTaskRunning:"running"===o.phase,isAwaitingReply:n.some(e=>e.isPlaceholder)}),[e,n,o]),actions:u(()=>({...t,...i,...r,clearChatHistory:()=>{r.clearMessages(),i.resetTask(),t.setError(void 0)}}),[t,i,r])}},Pl={bottom_right:{vertical:"bottom",horizontal:"right"},bottom_left:{vertical:"bottom",horizontal:"left"},top_right:{vertical:"top",horizontal:"right"},top_left:{vertical:"top",horizontal:"left"}},Nl=Object.keys(Pl),Ll=e=>Pl[e],Fl=e=>{const{vertical:t,horizontal:n}=Ll(e);return{[t]:"20px",[n]:"20px"}},zl={top:"bottom",bottom:"top",left:"right",right:"left"},$l=(e,t,n,r,o)=>{const{vertical:i,horizontal:s}=Ll(e);return{x:"left"===s?20:t-20-r,y:"top"===i?20:n-20-o}},Bl=class extends t.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e,t){console.error(`${this.props.label} Error Boundary caught error:`,e,t)}render(){return this.state.hasError?this.props.fallback??null:this.props.children}},Wl="cubic-bezier(0.16, 1, 0.3, 1)",Ul=({onPositionCommit:e})=>{const{isPreviewMode:n=!1,widget_accent_color:r,widget_background_color:o,widget_position:s,widget_position_z_index:a}=_l(),{state:c,actions:u}=Dl(),h=c.isOpen,f=c.isTaskRunning,m=!!c.error,g=!h&&(c.isAwaitingReply||f),y=!h&&f,w=m?"error":"processing",x=d(null),{isDragging:S,pixelPositionStyle:k,onPointerDown:C,onPointerMove:E,onPointerUp:I,onPointerCancel:M,suppressUntilRef:T}=function({position:e,onPositionCommit:n,isPreviewMode:r=!1,wrapperRef:o}){const[s,a]=p(!1),[c,u]=p({w:56,h:56}),[,h]=p(0),f=d(null),m=d(null),g=d(null),y=d(0),b=d([]),v=d(0),w=()=>{null!==g.current&&window.cancelAnimationFrame(g.current),g.current=null};t.useEffect(()=>()=>{w(),f.current?.()},[]),t.useEffect(()=>{if(r)return;const e=()=>h(e=>e+1);return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[r]);const x=i(()=>{if(!o.current||"undefined"==typeof window)return;const e=o.current.getBoundingClientRect();u(t=>t.w===e.width&&t.h===e.height?t:{w:e.width,h:e.height})},[o]);l(()=>{x();const e="undefined"!=typeof window&&o.current?new ResizeObserver(x):null;return e&&o.current&&e.observe(o.current),()=>e?.disconnect()},[x,e,o]);const S="undefined"!=typeof window?window.innerWidth:0,k="undefined"!=typeof window?window.innerHeight:0,C=$l(e,S,k,c.w,c.h),E=!r&&S>0&&k>0?{left:C.x,top:C.y}:void 0,I=i(()=>{w(),o.current&&(o.current.style.transform="",o.current.style.willChange="",o.current.style.transition="",o.current.style.left="",o.current.style.top="")},[o]),M=i((e,t)=>{f.current?.();let r=!1;const i=()=>{r=!0,window.clearTimeout(c),t.removeEventListener("transitionend",l),f.current=null},s=()=>{r||(i(),t.style.transition="none",t.style.willChange="",t.style.left="",t.style.top="",n(e),a(!1),requestAnimationFrame(()=>{o.current&&(o.current.style.transition="")}))},c=window.setTimeout(s,650),l=e=>{e.target===t&&"left"===e.propertyName&&s()};t.addEventListener("transitionend",l),f.current=i},[n,o]),T=i((t,r,i)=>{if(!o.current||!E)return I(),n(t),void a(!1);w();const s=o.current,l=$l(e,S,k,c.w,c.h),u=$l(t,S,k,c.w,c.h);s.style.transition="none",s.style.transform="none",s.style.willChange="left, top",s.style.left=`${l.x+r}px`,s.style.top=`${l.y+i}px`,requestAnimationFrame(()=>{s.style.transition=`left 600ms ${Wl}, top 600ms ${Wl}`,s.style.left=`${u.x}px`,s.style.top=`${u.y}px`}),M(t,s)},[M,n,E,e,I,S,k,c.w,c.h,o]),R=e=>{I(),m.current=null,a(!1),e.currentTarget.releasePointerCapture(e.pointerId)};return{isDragging:s,pixelPositionStyle:E,onPointerDown:e=>{m.current={pointerId:e.pointerId,startX:e.clientX,startY:e.clientY,dragging:!1,lastX:0,lastY:0},e.currentTarget.setPointerCapture(e.pointerId)},onPointerMove:e=>{const t=m.current;if(t?.pointerId!==e.pointerId)return;const n=e.clientX-t.startX,r=e.clientY-t.startY;if(!t.dragging&&Math.hypot(n,r)>5&&(t.dragging=!0,a(!0),b.current=[],v.current=0,o.current&&(o.current.style.willChange="transform",o.current.style.transition="none")),!t.dragging)return;t.lastX=n,t.lastY=r;const i=Date.now();i-v.current>=10&&(v.current=i,b.current=[...b.current.slice(-5),{x:e.clientX,y:e.clientY,t:i}]),null===g.current&&(g.current=window.requestAnimationFrame(()=>{g.current=null;const e=m.current,t=o.current;t&&e&&(t.style.transform=`translate3d(${e.lastX}px, ${e.lastY}px, 0)`)}))},onPointerUp:t=>{const n=m.current;if(n?.pointerId===t.pointerId){if(n.dragging){const r=function(e,t=.999){if(e.length<2)return{x:0,y:0};const n=e[0],r=e[e.length-1];if(!n||!r)return{x:0,y:0};const o=r.t-n.t;if(o<=0)return{x:0,y:0};const i=e=>e/o*t/(1-t);return{x:i(r.x-n.x),y:i(r.y-n.y)}}(b.current),i={dx:n.lastX+r.x,dy:n.lastY+r.y},s=o.current?.getBoundingClientRect(),a=s?((e,t,n,r,o,i)=>{const s=$l(t,n,r,o,i),a=s.x+e.dx,c=s.y+e.dy;let l=t,u=1/0;for(const d of Nl){const e=$l(d,n,r,o,i),t=Math.hypot(a-e.x,c-e.y);t<u&&(u=t,l=d)}return l})(i,e,window.innerWidth,window.innerHeight,s.width,s.height):e;return T(a,n.lastX,n.lastY),y.current=Date.now()+600,m.current=null,void t.currentTarget.releasePointerCapture(t.pointerId)}R(t)}},onPointerCancel:e=>{m.current?.pointerId===e.pointerId&&R(e)},suppressUntilRef:y}}({position:s,onPositionCommit:e,isPreviewMode:n,wrapperRef:x});/* @__PURE__ */
|
|
22
22
|
return b(yc,{ref:x,className:"mtx-fab-anchor","data-animated":S?"false":"true","data-preview":n?"true":"false",style:{zIndex:a,pointerEvents:h?"none":"auto",...S?k:Fl(s)},children:/* @__PURE__ */v(yc,{className:"mtx-fab","data-open":h?"true":"false",children:[g&&/* @__PURE__ */b(yc,{className:"mtx-fab-glow","data-tone":w,"aria-hidden":!0}),y&&!S&&/* @__PURE__ */b(pc,{variant:"secondary",size:"sm",className:"mtx-fab-stop","data-side":s.includes("left")?"left":"right",onClick:e=>{e.preventDefault(),e.stopPropagation(),u.stopTask()},children:"Stop"}),
|
|
23
23
|
/* @__PURE__ */b(pc,{variant:"bare",onClick:()=>{Date.now()<T.current||u.toggleWidget()},onDragStart:e=>e.preventDefault(),onPointerDown:C,onPointerMove:E,onPointerUp:I,onPointerCancel:M,className:"mtx-fab-trigger",style:{touchAction:"none",cursor:S?"grabbing":"grab",userSelect:"none",WebkitUserSelect:"none"},"aria-label":h?"Close":"Open","aria-live":"polite",children:/* @__PURE__ */b(bc,{className:"mtx-fab-center",children:/* @__PURE__ */v(yc,{className:"mtx-fab-badge",style:{borderRadius:"12px",backgroundColor:h?o:r,boxShadow:kr.fab},children:[g&&/* @__PURE__ */b("svg",{className:"mtx-fab-ring","data-tone":w,viewBox:"0 0 54 54",fill:"none","aria-hidden":!0,children:/* @__PURE__ */b("rect",{x:"1.25",y:"1.25",width:"51.5",height:"51.5",rx:13,ry:13})}),
|
|
24
24
|
/* @__PURE__ */b(bc,{className:"mtx-fab-icon-layer",style:{transform:h?"rotate(30deg) scale(0)":"rotate(0deg) scale(1)",opacity:h?0:1},"aria-hidden":h,children:/* @__PURE__ */b(lc,{src:Za,alt:"",className:"mtx-fab-avatar",draggable:!1,onDragStart:e=>e.preventDefault(),style:{borderRadius:"12px",border:"none",outline:"none",backgroundColor:"transparent",pointerEvents:"none",userSelect:"none"}})}),
|