PageSourceSearch

https://snew.ai/assets/AgentChatView-BsWTKckG.js

js snew.ai collected 2026-10-05 15:08:26 UTC 90,379 bytes, 110 lines download raw bytes

1import{r as f,Z as Oa,j as s,R as N,u as ca,av as Ka}from"./index-L9AYrVUw.js";import{useSearchParams as Ba}from"./index-p7aFGi8o.js";import{m as Ha}from"./DotsSixVertical.es-CqAy0LdQ.js";import{c as ua}from"./locale-Cctu0V3Y.js";import{d8 as $e,d6 as Re,a4 as Ga,a as _a,aE as Wa}from"./PlanAccessModal-P_W2GThH.js";import{s as Ua}from"./ArrowUp.es-sg_sCqx1.js";import{n as Ja}from"./FloatingTopMenu-CIhwk2RR.js";import{h as Xa,Y as ve}from"./App-DyVHSnY3.js";import"./productFunnel-DiJFcMU2.js";import"./SnewLogo-Cg53XTnQ.js";import"./Trash.es-D2Zs5Rpt.js";import"./dissolve-CQo8GAUH.js";const je=f.createContext(null);je.displayName="PanelGroupContext";const L={group:"data-panel-group",groupDirection:"data-panel-group-direction",groupId:"data-panel-group-id",panel:"data-panel",panelCollapsible:"data-panel-collapsible",panelId:"data-panel-id",panelSize:"data-panel-size",resizeHandle:"data-resize-handle",resizeHandleActive:"data-resize-handle-active",resizeHandleEnabled:"data-panel-resize-handle-enabled",resizeHandleId:"data-panel-resize-handle-id",resizeHandleState:"data-resize-handle-state"},Ge=10,oe=f.useLayoutEffect,ea=Oa.useId,Qa=typeof ea=="function"?ea:()=>null;let Ya=0;function _e(e=null){const a=Qa(),t=f.useRef(e||a||null);return t.current===null&&(t.current=""+Ya++),e??t.current}function pa({children:e,className:a="",collapsedSize:t,collapsible:o,defaultSize:n,forwardedRef:i,id:l,maxSize:d,minSize:r,onCollapse:u,onExpand:A,onResize:p,order:c,style:b,tagName:h="div",...C}){const E=f.useContext(je);if(E===null)throw Error("Panel components must be rendered within a PanelGroup container");const{collapsePanel:k,expandPanel:w,getPanelSize:I,getPanelStyle:v,groupId:q,isPanelCollapsed:j,reevaluatePanelConstraints:P,registerPanel:_,resizePanel:Q,unregisterPanel:H}=E,O=_e(l),F=f.useRef({callbacks:{onCollapse:u,onExpand:A,onResize:p},constraints:{collapsedSize:t,collapsible:o,defaultSize:n,maxSize:d,minSize:r},id:O,idIsFromProps:l!==void 0,order:c});f.useRef({didLogMissingDefaultSizeWarning:!1}),oe(()=>{const{callbacks:V,constraints:D}=F.current,K={...D};F.current.id=O,F.current.idIsFromProps=l!==void 0,F.current.order=c,V.onCollapse=u,V.onExpand=A,V.onResize=p,D.collapsedSize=t,D.collapsible=o,D.defaultSize=n,D.maxSize=d,D.minSize=r,(K.collapsedSize!==D.collapsedSize||K.collapsible!==D.collapsible||K.maxSize!==D.maxSize||K.minSize!==D.minSize)&&P(F.current,K)}),oe(()=>{const V=F.current;return _(V),()=>{H(V)}},[c,O,_,H]),f.useImperativeHandle(i,()=>({collapse:()=>{k(F.current)},expand:V=>{w(F.current,V)},getId(){return O},getSize(){return I(F.current)},isCollapsed(){return j(F.current)},isExpanded(){return!j(F.current)},resize:V=>{Q(F.current,V)}}),[k,w,I,j,O,Q]);const ee=v(F.current,n);return f.createElement(h,{...C,children:e,className:a,id:O,style:{...ee,...b},[L.groupId]:q,[L.panel]:"",[L.panelCollapsible]:o||void 0,[L.panelId]:O,[L.panelSize]:parseFloat(""+ee.flexGrow).toFixed(1)})}const ma=f.forwardRef((e,a)=>f.createElement(pa,{...e,forwardedRef:a}));pa.displayName="Panel";ma.displayName="forwardRef(Panel)";let Ke=null,Pe=-1,Z=null;function Za(e,a){if(a){const t=(a&ba)!==0,o=(a&xa)!==0,n=(a&ya)!==0,i=(a&Sa)!==0;if(t)return n?"se-resize":i?"ne-resize":"e-resize";if(o)return n?"sw-resize":i?"nw-resize":"w-resize";if(n)return"s-resize";if(i)return"n-resize"}switch(e){case"horizontal":return"ew-resize";case"intersection":return"move";case"vertical":return"ns-resize"}}function et(){Z!==null&&(document.head.removeChild(Z),Ke=null,Z=null,Pe=-1)}function Te(e,a){var t,o;const n=Za(e,a);if(Ke!==n){if(Ke=n,Z===null&&(Z=document.createElement("style"),document.head.appendChild(Z)),Pe>=0){var i;(i=Z.sheet)===null||i===void 0||i.removeRule(Pe)}Pe=(t=(o=Z.sheet)===null||o===void 0?void 0:o.insertRule(`*{cursor: ${n} !important;}`))!==null&&t!==void 0?t:-1}}function fa(e){return e.type==="keydown"}function ga(e){return e.type.startsWith("pointer")}function va(e){return e.type.startsWith("mouse")}function Ie(e){if(ga(e)){if(e.isPrimary)return{x:e.clientX,y:e.clientY}}else if(va(e))return{x:e.clientX,y:e.clientY};return{x:1/0,y:1/0}}function at(){if(typeof matchMedia=="function")return matchMedia("(pointer:coarse)").matches?"coarse":"fine"}function tt(e,a,t){return e.x<a.x+a.width&&e.x+e.width>a.x&&e.y<a.y+a.height&&e.y+e.height>a.y}function ot(e,a){if(e===a)throw new Error("Cannot compare node with itself");const t={a:oa(e),b:oa(a)};let o;for(;t.a.at(-1)===t.b.at(-1);)e=t.a.pop(),a=t.b.pop(),o=e;R(o,"Stacking order can only be calculated for elements with a common ancestor");const n={a:ta(aa(t.a)),b:ta(aa(t.b))};if(n.a===n.b){const i=o.childNodes,l={a:t.a.at(-1),b:t.b.at(-1)};let d=i.length;for(;d--;){const r=i[d];if(r===l.a)return 1;if(r===l.b)return-1}}return Math.sign(n.a-n.b)}const nt=/\b(?:position|zIndex|opacity|transform|webkitTransform|mixBlendMode|filter|webkitFilter|isolation)\b/;function it(e){var a;const t=getComputedStyle((a=ha(e))!==null&&a!==void 0?a:e).display;return t==="flex"||t==="inline-flex"}function rt(e){const a=getComputedStyle(e);return!!(a.position==="fixed"||a.zIndex!=="auto"&&(a.position!=="static"||it(e))||+a.opacity<1||"transform"in a&&a.transform!=="none"||"webkitTransform"in a&&a.webkitTransform!=="none"||"mixBlendMode"in a&&a.mixBlendMode!=="normal"||"filter"in a&&a.filter!=="none"||"webkitFilter"in a&&a.webkitFilter!=="none"||"isolation"in a&&a.isolation==="isolate"||nt.test(a.willChange)||a.webkitOverflowScrolling==="touch")}function aa(e){let a=e.length;for(;a--;){const t=e[a];if(R(t,"Missing node"),rt(t))return t}return null}function ta(e){return e&&Number(getComputedStyle(e).zIndex)||0}function oa(e){const a=[];for(;e;)a.push(e),e=ha(e);return a}function ha(e){const{parentNode:a}=e;return a&&a instanceof ShadowRoot?a.host:a}
1const ba=1,xa=2,ya=4,Sa=8,st=at()==="coarse";let U=[],de=!1,te=new Map,Me=new Map;const ye=new Set;function lt(e,a,t,o,n){var i;const{ownerDocument:l}=a,d={direction:t,element:a,hitAreaMargins:o,setResizeHandlerState:n},r=(i=te.get(l))!==null&&i!==void 0?i:0;return te.set(l,r+1),ye.add(d),Ee(),function(){var A;Me.delete(e),ye.delete(d);const p=(A=te.get(l))!==null&&A!==void 0?A:1;if(te.set(l,p-1),Ee(),p===1&&te.delete(l),U.includes(d)){const c=U.indexOf(d);c>=0&&U.splice(c,1),Ue(),n("up",!0,null)}}}function dt(e){const{target:a}=e,{x:t,y:o}=Ie(e);de=!0,We({target:a,x:t,y:o}),Ee(),U.length>0&&(we("down",e),e.preventDefault(),Ra(a)||e.stopImmediatePropagation())}function De(e){const{x:a,y:t}=Ie(e);if(de&&e.buttons===0&&(de=!1,we("up",e)),!de){const{target:o}=e;We({target:o,x:a,y:t})}we("move",e),Ue(),U.length>0&&e.preventDefault()}function Ne(e){const{target:a}=e,{x:t,y:o}=Ie(e);Me.clear(),de=!1,U.length>0&&(e.preventDefault(),Ra(a)||e.stopImmediatePropagation()),we("up",e),We({target:a,x:t,y:o}),Ue(),Ee()}function Ra(e){let a=e;for(;a;){if(a.hasAttribute(L.resizeHandle))return!0;a=a.parentElement}return!1}function We({target:e,x:a,y:t}){U.splice(0);let o=null;(e instanceof HTMLElement||e instanceof SVGElement)&&(o=e),ye.forEach(n=>{const{element:i,hitAreaMargins:l}=n,d=i.getBoundingClientRect(),{bottom:r,left:u,right:A,top:p}=d,c=st?l.coarse:l.fine;if(a>=u-c&&a<=A+c&&t>=p-c&&t<=r+c){if(o!==null&&document.contains(o)&&i!==o&&!i.contains(o)&&!o.contains(i)&&ot(o,i)>0){let h=o,C=!1;for(;h&&!h.contains(i);){if(tt(h.getBoundingClientRect(),d)){C=!0;break}h=h.parentElement}if(C)return}U.push(n)}})}function qe(e,a){Me.set(e,a)}function Ue(){let e=!1,a=!1;U.forEach(o=>{const{direction:n}=o;n==="horizontal"?e=!0:a=!0});let t=0;Me.forEach(o=>{t|=o}),e&&a?Te("intersection",t):e?Te("horizontal",t):a?Te("vertical",t):et()}let Ve=new AbortController;function Ee(){Ve.abort(),Ve=new AbortController;const e={capture:!0,signal:Ve.signal};ye.size&&(de?(U.length>0&&te.forEach((a,t)=>{const{body:o}=t;a>0&&(o.addEventListener("contextmenu",Ne,e),o.addEventListener("pointerleave",De,e),o.addEventListener("pointermove",De,e))}),window.addEventListener("pointerup",Ne,e),window.addEventListener("pointercancel",Ne,e)):te.forEach((a,t)=>{const{body:o}=t;a>0&&(o.addEventListener("pointerdown",dt,e),o.addEventListener("pointermove",De,e))}))}function we(e,a){ye.forEach(t=>{const{setResizeHandlerState:o}=t,n=U.includes(t);o(e,n,a)})}function ct(){const[e,a]=f.useState(0);return f.useCallback(()=>a(t=>t+1),[])}function R(e,a){if(!e)throw console.error(a),Error(a)}function ne(e,a,t=Ge){return e.toFixed(t)===a.toFixed(t)?0:e>a?1:-1}function Y(e,a,t=Ge){return ne(e,a,t)===0}function G(e,a,t){return ne(e,a,t)===0}function ut(e,a,t){if(e.length!==a.length)return!1;for(let o=0;o<e.length;o++){const n=e[o],i=a[o];if(!G(n,i,t))return!1}return!0}function le({panelConstraints:e,panelIndex:a,size:t}){const o=e[a];R(o!=null,`Panel constraints not found for index ${a}`);let{collapsedSize:n=0,collapsible:i,maxSize:l=100,minSize:d=0}=o;if(ne(t,d)<0)if(i){const r=(n+d)/2;ne(t,r)<0?t=n:t=d}else t=d;return t=Math.min(l,t),t=parseFloat(t.toFixed(Ge)),t}function he({delta:e,initialLayout:a,panelConstraints:t,pivotIndices:o,prevLayout:n,trigger:i}){if(G(e,0))return a;const l=[...a],[d,r]=o;R(d!=null,"Invalid first pivot index"),R(r!=null,"Invalid second pivot index");let u=0;if(i==="keyboard"){{const p=e<0?r:d,c=t[p];R(c,`Panel constraints not found for index ${p}`);const{collapsedSize:b=0,collapsible:h,minSize:C=0}=c;if(h){const E=a[p];if(R(E!=null,`Previous layout not found for panel index ${p}`),G(E,b)){const k=C-E;ne(k,Math.abs(e))>0&&(e=e<0?0-k:k)}}}{const p=e<0?d:r,c=t[p];R(c,`No panel constraints found for index ${p}`);const{collapsedSize:b=0,collapsible:h,minSize:C=0}=c;if(h){const E=a[p];if(R(E!=null,`Previous layout not found for panel index ${p}`),G(E,C)){const k=E-b;ne(k,Math.abs(e))>0&&(e=e<0?0-k:k)}}}}{const p=e<0?1:-1;let c=e<0?r:d,b=0;for(;;){const C=a[c];R(C!=null,`Previous layout not found for panel index ${c}`);const k=le({panelConstraints:t,panelIndex:c,size:100})-C;if(b+=k,c+=p,c<0||c>=t.length)break}const h=Math.min(Math.abs(e),Math.abs(b));e=e<0?0-h:h}{let c=e<0?d:r;for(;c>=0&&c<t.length;){const b=Math.abs(e)-Math.abs(u),h=a[c];R(h!=null,`Previous layout not found for panel index ${c}`);const C=h-b,E=le({panelConstraints:t,panelIndex:c,size:C});if(!G(h,E)&&(u+=h-E,l[c]=E,u.toPrecision(3).localeCompare(Math.abs(e).toPrecision(3),void 0,{numeric:!0})>=0))break;e<0?c--:c++}}if(ut(n,l))return n;{const p=e<0?r:d,c=a[p];R(c!=null,`Previous layout not found for panel index ${p}`);const b=c+u,h=le({panelConstraints:t,panelIndex:p,size:b});if(l[p]=h,!G(h,b)){let C=b-h,k=e<0?r:d;for(;k>=0&&k<t.length;){const w=l[k];R(w!=null,`Previous layout not found for panel index ${k}`);const I=w+C,v=le({panelConstraints:t,panelIndex:k,size:I});if(G(w,v)||(C-=v-w,l[k]=v),G(C,0))break;e>0?k--:k++}}}const A=l.reduce((p,c)=>c+p,0);return G(A,100)?l:n}function pt({layout:e,panelsArray:a,pivotIndices:t}){let o=0,n=100,i=0,l=0;const d=t[0];R(d!=null,"No pivot index found"),a.forEach((p,c)=>{const{constraints:b}=p,{maxSize:h=100,minSize:C=0}=b;c===d?(o=C,n=h):(i+=C,l+=h)});const r=Math.min(n,100-i),u=Math.max(o,100-l),A=e[d];return{valueMax:r,valueMin:u,valueNow:A}}function Se(e,a=document){return Array.from(a.querySelectorAll(`[${L.resizeHandleId}][data-panel-group-id="${e}"]`))}function Aa(e,a,t=document){const n=Se(e,t).findIndex(i=>i.getAttribute(L.resizeHandleId)===a);return n??null}function za(e,a,t){const o=Aa(e,a,t);return o!=null?[o,o+1]:[-1,-1]}function ka(e,a=document){var t;if(a instanceof HTMLElement&&(a==null||(t=a.dataset)===null||t===void 0?void 0:t.panelGroupId)==e)return a;
1const o=a.querySelector(`[data-panel-group][data-panel-group-id="${e}"]`);return o||null}function Le(e,a=document){const t=a.querySelector(`[${L.resizeHandleId}="${e}"]`);return t||null}function mt(e,a,t,o=document){var n,i,l,d;const r=Le(a,o),u=Se(e,o),A=r?u.indexOf(r):-1,p=(n=(i=t[A])===null||i===void 0?void 0:i.id)!==null&&n!==void 0?n:null,c=(l=(d=t[A+1])===null||d===void 0?void 0:d.id)!==null&&l!==void 0?l:null;return[p,c]}function ft({committedValuesRef:e,eagerValuesRef:a,groupId:t,layout:o,panelDataArray:n,panelGroupElement:i,setLayout:l}){f.useRef({didWarnAboutMissingResizeHandle:!1}),oe(()=>{if(!i)return;const d=Se(t,i);for(let r=0;r<n.length-1;r++){const{valueMax:u,valueMin:A,valueNow:p}=pt({layout:o,panelsArray:n,pivotIndices:[r,r+1]}),c=d[r];if(c!=null){const b=n[r];R(b,`No panel data found for index "${r}"`),c.setAttribute("aria-controls",b.id),c.setAttribute("aria-valuemax",""+Math.round(u)),c.setAttribute("aria-valuemin",""+Math.round(A)),c.setAttribute("aria-valuenow",p!=null?""+Math.round(p):"")}}return()=>{d.forEach((r,u)=>{r.removeAttribute("aria-controls"),r.removeAttribute("aria-valuemax"),r.removeAttribute("aria-valuemin"),r.removeAttribute("aria-valuenow")})}},[t,o,n,i]),f.useEffect(()=>{if(!i)return;const d=a.current;R(d,"Eager values not found");const{panelDataArray:r}=d,u=ka(t,i);R(u!=null,`No group found for id "${t}"`);const A=Se(t,i);R(A,`No resize handles found for group id "${t}"`);const p=A.map(c=>{const b=c.getAttribute(L.resizeHandleId);R(b,"Resize handle element has no handle id attribute");const[h,C]=mt(t,b,r,i);if(h==null||C==null)return()=>{};const E=k=>{if(!k.defaultPrevented)switch(k.key){case"Enter":{k.preventDefault();const w=r.findIndex(I=>I.id===h);if(w>=0){const I=r[w];R(I,`No panel data found for index ${w}`);const v=o[w],{collapsedSize:q=0,collapsible:j,minSize:P=0}=I.constraints;if(v!=null&&j){const _=he({delta:G(v,q)?P-q:q-v,initialLayout:o,panelConstraints:r.map(Q=>Q.constraints),pivotIndices:za(t,b,i),prevLayout:o,trigger:"keyboard"});o!==_&&l(_)}}break}}};return c.addEventListener("keydown",E),()=>{c.removeEventListener("keydown",E)}});return()=>{p.forEach(c=>c())}},[i,e,a,t,o,n,l])}function na(e,a){if(e.length!==a.length)return!1;for(let t=0;t<e.length;t++)if(e[t]!==a[t])return!1;return!0}function Pa(e,a){const t=e==="horizontal",{x:o,y:n}=Ie(a);return t?o:n}function gt(e,a,t,o,n){const i=t==="horizontal",l=Le(a,n);R(l,`No resize handle element found for id "${a}"`);const d=l.getAttribute(L.groupId);R(d,"Resize handle element has no group id attribute");let{initialCursorPosition:r}=o;const u=Pa(t,e),A=ka(d,n);R(A,`No group element found for id "${d}"`);const p=A.getBoundingClientRect(),c=i?p.width:p.height;return(u-r)/c*100}function vt(e,a,t,o,n,i){if(fa(e)){const l=t==="horizontal";let d=0;e.shiftKey?d=100:n!=null?d=n:d=10;let r=0;switch(e.key){case"ArrowDown":r=l?0:d;break;case"ArrowLeft":r=l?-d:0;break;case"ArrowRight":r=l?d:0;break;case"ArrowUp":r=l?0:-d;break;case"End":r=100;break;case"Home":r=-100;break}return r}else return o==null?0:gt(e,a,t,o,i)}function ht({panelDataArray:e}){const a=Array(e.length),t=e.map(i=>i.constraints);let o=0,n=100;for(let i=0;i<e.length;i++){const l=t[i];R(l,`Panel constraints not found for index ${i}`);const{defaultSize:d}=l;d!=null&&(o++,a[i]=d,n-=d)}for(let i=0;i<e.length;i++){const l=t[i];R(l,`Panel constraints not found for index ${i}`);const{defaultSize:d}=l;if(d!=null)continue;const r=e.length-o,u=n/r;o++,a[i]=u,n-=u}return a}function re(e,a,t){a.forEach((o,n)=>{const i=e[n];R(i,`Panel data not found for index ${n}`);const{callbacks:l,constraints:d,id:r}=i,{collapsedSize:u=0,collapsible:A}=d,p=t[r];if(p==null||o!==p){t[r]=o;const{onCollapse:c,onExpand:b,onResize:h}=l;h&&h(o,p),A&&(c||b)&&(b&&(p==null||Y(p,u))&&!Y(o,u)&&b(),c&&(p==null||!Y(p,u))&&Y(o,u)&&c())}})}function ke(e,a){if(e.length!==a.length)return!1;for(let t=0;t<e.length;t++)if(e[t]!=a[t])return!1;return!0}function bt({defaultSize:e,dragState:a,layout:t,panelData:o,panelIndex:n,precision:i=3}){const l=t[n];let d;return l==null?d=e!=null?e.toPrecision(i):"1":o.length===1?d="1":d=l.toPrecision(i),{flexBasis:0,flexGrow:d,flexShrink:1,overflow:"hidden",pointerEvents:a!==null?"none":void 0}}function xt(e,a=10){let t=null;return(...n)=>{t!==null&&clearTimeout(t),t=setTimeout(()=>{e(...n)},a)}}function ia(e){try{if(typeof localStorage<"u")e.getItem=a=>localStorage.getItem(a),e.setItem=(a,t)=>{localStorage.setItem(a,t)};else throw new Error("localStorage not supported in this environment")}catch(a){console.error(a),e.getItem=()=>null,e.setItem=()=>{}}}function Ca(e){return`react-resizable-panels:${e}`}function Ea(e){return e.map(a=>{const{constraints:t,id:o,idIsFromProps:n,order:i}=a;return n?o:i?`${i}:${JSON.stringify(t)}`:JSON.stringify(t)}).sort((a,t)=>a.localeCompare(t)).join(",")}function wa(e,a){try{const t=Ca(e),o=a.getItem(t);if(o){const n=JSON.parse(o);if(typeof n=="object"&&n!=null)return n}}catch{}return null}function yt(e,a,t){var o,n;const i=(o=wa(e,t))!==null&&o!==void 0?o:{},l=Ea(a);return(n=i[l])!==null&&n!==void 0?n:null}function St(e,a,t,o,n){var i;
1const l=Ca(e),d=Ea(a),r=(i=wa(e,n))!==null&&i!==void 0?i:{};r[d]={expandToSizes:Object.fromEntries(t.entries()),layout:o};try{n.setItem(l,JSON.stringify(r))}catch(u){console.error(u)}}function ra({layout:e,panelConstraints:a}){const t=[...e],o=t.reduce((i,l)=>i+l,0);if(t.length!==a.length)throw Error(`Invalid ${a.length} panel layout: ${t.map(i=>`${i}%`).join(", ")}`);if(!G(o,100)&&t.length>0)for(let i=0;i<a.length;i++){const l=t[i];R(l!=null,`No layout data found for index ${i}`);const d=100/o*l;t[i]=d}let n=0;for(let i=0;i<a.length;i++){const l=t[i];R(l!=null,`No layout data found for index ${i}`);const d=le({panelConstraints:a,panelIndex:i,size:l});l!=d&&(n+=l-d,t[i]=d)}if(!G(n,0))for(let i=0;i<a.length;i++){const l=t[i];R(l!=null,`No layout data found for index ${i}`);const d=l+n,r=le({panelConstraints:a,panelIndex:i,size:d});if(l!==r&&(n-=r-l,t[i]=r,G(n,0)))break}return t}const Rt=100,be={getItem:e=>(ia(be),be.getItem(e)),setItem:(e,a)=>{ia(be),be.setItem(e,a)}},sa={};function $a({autoSaveId:e=null,children:a,className:t="",direction:o,forwardedRef:n,id:i=null,onLayout:l=null,keyboardResizeBy:d=null,storage:r=be,style:u,tagName:A="div",...p}){const c=_e(i),b=f.useRef(null),[h,C]=f.useState(null),[E,k]=f.useState([]),w=ct(),I=f.useRef({}),v=f.useRef(new Map),q=f.useRef(0),j=f.useRef({autoSaveId:e,direction:o,dragState:h,id:c,keyboardResizeBy:d,onLayout:l,storage:r}),P=f.useRef({layout:E,panelDataArray:[],panelDataArrayChanged:!1});f.useRef({didLogIdAndOrderWarning:!1,didLogPanelConstraintsWarning:!1,prevPanelIds:[]}),f.useImperativeHandle(n,()=>({getId:()=>j.current.id,getLayout:()=>{const{layout:m}=P.current;return m},setLayout:m=>{const{onLayout:y}=j.current,{layout:z,panelDataArray:x}=P.current,g=ra({layout:m,panelConstraints:x.map(S=>S.constraints)});na(z,g)||(k(g),P.current.layout=g,y&&y(g),re(x,g,I.current))}}),[]),oe(()=>{j.current.autoSaveId=e,j.current.direction=o,j.current.dragState=h,j.current.id=c,j.current.onLayout=l,j.current.storage=r}),ft({committedValuesRef:j,eagerValuesRef:P,groupId:c,layout:E,panelDataArray:P.current.panelDataArray,setLayout:k,panelGroupElement:b.current}),f.useEffect(()=>{const{panelDataArray:m}=P.current;if(e){if(E.length===0||E.length!==m.length)return;let y=sa[e];y==null&&(y=xt(St,Rt),sa[e]=y);const z=[...m],x=new Map(v.current);y(e,z,x,E,r)}},[e,E,r]),f.useEffect(()=>{});const _=f.useCallback(m=>{const{onLayout:y}=j.current,{layout:z,panelDataArray:x}=P.current;if(m.constraints.collapsible){const g=x.map(J=>J.constraints),{collapsedSize:S=0,panelSize:$,pivotIndices:T}=ae(x,m,z);if(R($!=null,`Panel size not found for panel "${m.id}"`),!Y($,S)){v.current.set(m.id,$);const X=se(x,m)===x.length-1?$-S:S-$,M=he({delta:X,initialLayout:z,panelConstraints:g,pivotIndices:T,prevLayout:z,trigger:"imperative-api"});ke(z,M)||(k(M),P.current.layout=M,y&&y(M),re(x,M,I.current))}}},[]),Q=f.useCallback((m,y)=>{const{onLayout:z}=j.current,{layout:x,panelDataArray:g}=P.current;if(m.constraints.collapsible){const S=g.map(W=>W.constraints),{collapsedSize:$=0,panelSize:T=0,minSize:J=0,pivotIndices:X}=ae(g,m,x),M=y??J;if(Y(T,$)){const W=v.current.get(m.id),fe=W!=null&&W>=M?W:M,Fe=se(g,m)===g.length-1?T-fe:fe-T,B=he({delta:Fe,initialLayout:x,panelConstraints:S,pivotIndices:X,prevLayout:x,trigger:"imperative-api"});ke(x,B)||(k(B),P.current.layout=B,z&&z(B),re(g,B,I.current))}}},[]),H=f.useCallback(m=>{const{layout:y,panelDataArray:z}=P.current,{panelSize:x}=ae(z,m,y);return R(x!=null,`Panel size not found for panel "${m.id}"`),x},[]),O=f.useCallback((m,y)=>{const{panelDataArray:z}=P.current,x=se(z,m);return bt({defaultSize:y,dragState:h,layout:E,panelData:z,panelIndex:x})},[h,E]),F=f.useCallback(m=>{const{layout:y,panelDataArray:z}=P.current,{collapsedSize:x=0,collapsible:g,panelSize:S}=ae(z,m,y);return R(S!=null,`Panel size not found for panel "${m.id}"`),g===!0&&Y(S,x)},[]),ee=f.useCallback(m=>{const{layout:y,panelDataArray:z}=P.current,{collapsedSize:x=0,collapsible:g,panelSize:S}=ae(z,m,y);return R(S!=null,`Panel size not found for panel "${m.id}"`),!g||ne(S,x)>0},[]),V=f.useCallback(m=>{const{panelDataArray:y}=P.current;y.push(m),y.sort((z,x)=>{const g=z.order,S=x.order;return g==null&&S==null?0:g==null?-1:S==null?1:g-S}),P.current.panelDataArrayChanged=!0,w()},[w]);oe(()=>{if(P.current.panelDataArrayChanged){P.current.panelDataArrayChanged=!1;const{autoSaveId:m,onLayout:y,storage:z}=j.current,{layout:x,panelDataArray:g}=P.current;let S=null;if(m){const T=yt(m,g,z);
1T&&(v.current=new Map(Object.entries(T.expandToSizes)),S=T.layout)}S==null&&(S=ht({panelDataArray:g}));const $=ra({layout:S,panelConstraints:g.map(T=>T.constraints)});na(x,$)||(k($),P.current.layout=$,y&&y($),re(g,$,I.current))}}),oe(()=>{const m=P.current;return()=>{m.layout=[]}},[]);const D=f.useCallback(m=>{let y=!1;const z=b.current;return z&&window.getComputedStyle(z,null).getPropertyValue("direction")==="rtl"&&(y=!0),function(g){g.preventDefault();const S=b.current;if(!S)return()=>null;const{direction:$,dragState:T,id:J,keyboardResizeBy:X,onLayout:M}=j.current,{layout:W,panelDataArray:fe}=P.current,{initialLayout:ze}=T??{},Fe=za(J,m,S);let B=vt(g,m,$,T,X,S);const Ye=$==="horizontal";Ye&&y&&(B=-B);const qa=fe.map(Va=>Va.constraints),ge=he({delta:B,initialLayout:ze??W,panelConstraints:qa,pivotIndices:Fe,prevLayout:W,trigger:fa(g)?"keyboard":"mouse-or-touch"}),Ze=!ke(W,ge);(ga(g)||va(g))&&q.current!=B&&(q.current=B,!Ze&&B!==0?Ye?qe(m,B<0?ba:xa):qe(m,B<0?ya:Sa):qe(m,0)),Ze&&(k(ge),P.current.layout=ge,M&&M(ge),re(fe,ge,I.current))}},[]),K=f.useCallback((m,y)=>{const{onLayout:z}=j.current,{layout:x,panelDataArray:g}=P.current,S=g.map(W=>W.constraints),{panelSize:$,pivotIndices:T}=ae(g,m,x);R($!=null,`Panel size not found for panel "${m.id}"`);const X=se(g,m)===g.length-1?$-y:y-$,M=he({delta:X,initialLayout:x,panelConstraints:S,pivotIndices:T,prevLayout:x,trigger:"imperative-api"});ke(x,M)||(k(M),P.current.layout=M,z&&z(M),re(g,M,I.current))},[]),ce=f.useCallback((m,y)=>{const{layout:z,panelDataArray:x}=P.current,{collapsedSize:g=0,collapsible:S}=y,{collapsedSize:$=0,collapsible:T,maxSize:J=100,minSize:X=0}=m.constraints,{panelSize:M}=ae(x,m,z);M!=null&&(S&&T&&Y(M,g)?Y(g,$)||K(m,$):M<X?K(m,X):M>J&&K(m,J))},[K]),ue=f.useCallback((m,y)=>{const{direction:z}=j.current,{layout:x}=P.current;if(!b.current)return;const g=Le(m,b.current);R(g,`Drag handle element not found for id "${m}"`);const S=Pa(z,y);C({dragHandleId:m,dragHandleRect:g.getBoundingClientRect(),initialCursorPosition:S,initialLayout:x})},[]),pe=f.useCallback(()=>{C(null)},[]),Ae=f.useCallback(m=>{const{panelDataArray:y}=P.current,z=se(y,m);z>=0&&(y.splice(z,1),delete I.current[m.id],P.current.panelDataArrayChanged=!0,w())},[w]),ie=f.useMemo(()=>({collapsePanel:_,direction:o,dragState:h,expandPanel:Q,getPanelSize:H,getPanelStyle:O,groupId:c,isPanelCollapsed:F,isPanelExpanded:ee,reevaluatePanelConstraints:ce,registerPanel:V,registerResizeHandle:D,resizePanel:K,startDragging:ue,stopDragging:pe,unregisterPanel:Ae,panelGroupElement:b.current}),[_,h,o,Q,H,O,c,F,ee,ce,V,D,K,ue,pe,Ae]),me={display:"flex",flexDirection:o==="horizontal"?"row":"column",height:"100%",overflow:"hidden",width:"100%"};return f.createElement(je.Provider,{value:ie},f.createElement(A,{...p,children:a,className:t,id:i,ref:b,style:{...me,...u},[L.group]:"",[L.groupDirection]:o,[L.groupId]:c}))}const ja=f.forwardRef((e,a)=>f.createElement($a,{...e,forwardedRef:a}));$a.displayName="PanelGroup";ja.displayName="forwardRef(PanelGroup)";function se(e,a){return e.findIndex(t=>t===a||t.id===a.id)}function ae(e,a,t){const o=se(e,a),i=o===e.length-1?[o-1,o]:[o,o+1],l=t[o];return{...a.constraints,panelSize:l,pivotIndices:i}}function At({disabled:e,handleId:a,resizeHandler:t,panelGroupElement:o}){f.useEffect(()=>{if(e||t==null||o==null)return;const n=Le(a,o);if(n==null)return;const i=l=>{if(!l.defaultPrevented)switch(l.key){case"ArrowDown":case"ArrowLeft":case"ArrowRight":case"ArrowUp":case"End":case"Home":{l.preventDefault(),t(l);break}case"F6":{l.preventDefault();const d=n.getAttribute(L.groupId);R(d,`No group element found for id "${d}"`);const r=Se(d,o),u=Aa(d,a,o);R(u!==null,`No resize element found for id "${a}"`);const A=l.shiftKey?u>0?u-1:r.length-1:u+1<r.length?u+1:0;r[A].focus();break}}};return n.addEventListener("keydown",i),()=>{n.removeEventListener("keydown",i)}},[o,e,a,t])}function Ia({children:e=null,className:a="",disabled:t=!1,hitAreaMargins:o,id:n,onBlur:i,onClick:l,onDragging:d,onFocus:r,onPointerDown:u,onPointerUp:A,style:p={},tabIndex:c=0,tagName:b="div",...h}){var C,E;const k=f.useRef(null),w=f.useRef({onClick:l,onDragging:d,onPointerDown:u,onPointerUp:A});f.useEffect(()=>{w.current.onClick=l,w.current.onDragging=d,w.current.onPointerDown=u,w.current.onPointerUp=A});const I=f.useContext(je);if(I===null)throw Error("PanelResizeHandle components must be rendered within a PanelGroup container");const{direction:v,groupId:q,registerResizeHandle:j,startDragging:P,stopDragging:_,panelGroupElement:Q}=I,H=_e(n),[O,F]=f.useState("inactive"),[ee,V]=f.useState(!1),[D,K]=f.useState(null),ce=f.useRef({state:O});oe(()=>{ce.current.state=O}),f.useEffect(()=>{if(t)K(null);else{const ie=j(H);K(()=>ie)}},[t,H,j]);const ue=(C=o==null?void 0:o.coarse)!==null&&C!==void 0?C:15,pe=(E=o==null?void 0:o.fine)!==null&&E!==void 0?E:5;f.useEffect(()=>{if(t||D==null)return;const ie=k.current;R(ie,"Element ref not attached");let me=!1;return lt(H,ie,v,{coarse:ue,fine:pe},(y,z,x)=>{if(!z){F("inactive");return}switch(y){case"down":{F("drag"),me=!1,R(x,'Expected event to be defined for "down" action'),P(H,x);const{onDragging:g,onPointerDown:S}=w.current;g==null||g(!0),S==null||S();break}case"move":{const{state:g}=ce.current;me=!0,g!=="drag"&&F("hover"),R(x,'Expected event to be defined for "move" action'),D(x);break}case"up":{F("hover"),_();const{onClick:g,onDragging:S,onPointerUp:$}=w.current;S==null||S(!1),$==null||$(),me||g==null||g();break}}})},[ue,v,t,pe,j,H,D,P,_]),At({disabled:t,handleId:H,resizeHandler:D,panelGroupElement:Q});const Ae={touchAction:"none",userSelect:"none"};return f.createElement(b,{...h,children:e,className:a,id:n,onBlur:()=>{V(!1),i==null||i()},onFocus:()=>{V(!0),r==null||r()},ref:k,role:"separator",style:{...Ae,...p},tabIndex:c,[L.groupDirection]:v,[L.groupId]:q,[L.resizeHandle]:"",[L.resizeHandleActive]:O==="drag"?"pointer":ee?"keyboard":void 0,[L.resizeHandleEnabled]:!t,[L.resizeHandleId]:H,[L.resizeHandleState]:O})}Ia.displayName="PanelResizeHandle";
1const zt=ja,kt=Ia,Ma=f.forwardRef(({className:e,...a},t)=>s.jsx(zt,{ref:t,className:ua("flex h-full w-full data-[panel-group-direction=vertical]:flex-col",e),...a}));Ma.displayName="ResizablePanelGroup";const la=ma,La=f.forwardRef(({withHandle:e,className:a,...t},o)=>s.jsx(kt,{ref:o,className:ua("relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:-translate-y-1/2 data-[panel-group-direction=vertical]:after:translate-x-0 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 [&[data-panel-group-direction=vertical]>div]:rotate-90",a),...t,children:e&&s.jsx("div",{className:"z-10 flex h-4 w-3 items-center justify-center rounded-sm border bg-border",children:s.jsx(Ha,{className:"h-2.5 w-2.5"})})}));La.displayName="ResizableHandle";const Pt={"abandoned-cart":{id:"abandoned-cart",name:"Carrinhos Abandonados",description:"Lista carrinhos com valor e cliente, prioriza recuperação.",category:"sales",active:!0,suggestion:{priority:"urgent",title:"23 carrinhos acima de R$ 200 abandonados nas últimas 48h",description:"Janela de recuperação de alta conversão expira em 24h.",metric:"R$ 8,4k"},initialPrompt:"Mostra os carrinhos abandonados acima de R$ 200 dos últimos 7 dias",thinkingSteps:[{label:"Consultando pedidos abandonados",duration:800},{label:"Filtrando valor acima de R$ 200",duration:600},{label:"Cruzando com segmentação de cliente",duration:900},{label:"Estimando ROI de recuperação",duration:700}],agentResponse:`Encontrei **23 carrinhos** acima de R$ 200 nos últimos 7 dias. Valor total de R$ 8,4k.
2
3Dos 23, 8 são de clientes VIP e 15 têm comportamento de compra recorrente. Essas são as maiores chances de conversão.
4
5Minha recomendação é disparar recuperação por WhatsApp para os top 10. ROI estimado de R$ 2,1k. Posso executar?`,artifact:{title:"Lista: 23 carrinhos abandonados",type:"table",data:{metrics:[{label:"Total de carrinhos",value:"23"},{label:"Valor total",value:"R$ 8,4k"},{label:"ROI estimado",value:"R$ 2,1k",highlight:!0}],columns:["Cliente","Produto","Valor","Há","Segmento"],rows:[{values:["Ana S.","Sandália Elara infantil","R$ 340","2h",{badge:"VIP",color:"pink"}]},{values:["João M.","Tênis Milkes + Meia kit","R$ 285","4h",{badge:"Recorrente"}]},{values:["Mariana C.","Sandália Nara","R$ 268","6h",{badge:"VIP",color:"pink"}]},{values:["Paulo R.","Sandália Elara","R$ 260","8h",{badge:"Recorrente"}]},{values:["Fernanda L.","Conjunto Verão menina","R$ 245","12h",{badge:"VIP",color:"pink"}]},{values:["Ricardo T.","Tênis Milkes Unissex","R$ 230","1d",{badge:"Recorrente"}]},{values:["Camila B.","Kit 3 sandálias","R$ 225","1d",{badge:"Recorrente"}]},{values:["Thiago A.","Tênis infantil + Mochila","R$ 218","2d",{badge:"Novo"}]}]}},actions:[{id:"approve",label:"Disparar recuperação WhatsApp (top 10)",kind:"approve",destructive:!0},{id:"adjust",label:"Ajustar critérios",kind:"adjust"},{id:"export",label:"Exportar CSV",kind:"export"}]},"churn-prediction":{id:"churn-prediction",name:"Reativação de Clientes",description:"Identifica clientes em risco de churn e prepara campanha.",category:"retention",active:!0,suggestion:{priority:"opportunity",title:"12 clientes VIP sem compra há 90+ dias",description:"Potencial recuperação estimado com campanha direcionada.",metric:"R$ 14k"},initialPrompt:"Quais clientes VIP estão em risco de churn?",thinkingSteps:[{label:"Consultando base de clientes VIP",duration:700},{label:"Calculando janela de inatividade",duration:600},{label:"Cruzando LTV histórico",duration:800},{label:"Modelando probabilidade de retorno",duration:1e3},{label:"Montando plano de reativação",duration:600}],agentResponse:`Identifiquei **12 clientes VIP** sem compra há 90+ dias. O LTV médio do grupo é de R$ 1.160 — são clientes valiosos que você pode estar perdendo pro concorrente.
6
7Montei um plano de reativação em 3 toques (WhatsApp com benefício exclusivo → email com lookbook da n
7ova coleção → segunda oferta personalizada em 5 dias). Potencial de recuperação estimado em R$ 14k nas próximas 4 semanas.
8
9Aprovar e executar a primeira onda?`,artifact:{title:"Plano de reativação: 12 clientes VIP",type:"plan",data:{metrics:[{label:"Clientes em risco",value:"12"},{label:"LTV médio",value:"R$ 1.160"},{label:"Recuperação estimada",value:"R$ 14k",highlight:!0}],sections:[{title:"Toque 1 — WhatsApp (amanhã, 10h)",content:"Mensagem personalizada com cupom exclusivo de 15% + frete grátis. Referência à última compra de cada cliente."},{title:"Toque 2 — Email (D+3, 18h)",content:"Lookbook da nova coleção com peças alinhadas ao histórico de compra. CTA: usar cupom enviado no WhatsApp."},{title:"Toque 3 — WhatsApp personalizado (D+7, 11h)",content:"Para quem não converteu: upgrade do cupom para 20% + produto sugerido baseado em afinidade."}],targetList:[{name:"Juliana M.",lastOrder:"há 102 dias",ltv:"R$ 2.340",affinity:"Sandália, moda praia"},{name:"Rafael S.",lastOrder:"há 98 dias",ltv:"R$ 1.820",affinity:"Tênis, streetwear infantil"},{name:"Patrícia O.",lastOrder:"há 95 dias",ltv:"R$ 1.680",affinity:"Vestidos, conjuntos"},{name:"André L.",lastOrder:"há 93 dias",ltv:"R$ 1.540",affinity:"Calçados esportivos"},{name:"Vanessa C.",lastOrder:"há 92 dias",ltv:"R$ 1.320",affinity:"Sandália, acessórios"}]}},actions:[{id:"approve",label:"Aprovar e disparar toque 1",kind:"approve",destructive:!0},{id:"adjust",label:"Ajustar cupom ou timing",kind:"adjust"},{id:"export",label:"Exportar lista",kind:"export"}]},"low-margin":{id:"low-margin",name:"Produtos com Margem Baixa",description:"Detecta SKUs com margem abaixo do mínimo configurado.",category:"catalog",active:!0,suggestion:{priority:"important",title:"5 produtos operando com margem abaixo de 10%",description:"Sandália Elara está no top 3 de vendas com margem 7%."},initialPrompt:"Quais produtos estão com margem baixa?",thinkingSteps:[{label:"Lendo tabela de custos atualizada",duration:600},{label:"Cruzando com preços de venda",duration:500},{label:"Filtrando margem < 10%",duration:400},{label:"Calculando impacto no faturamento",duration:700}],agentResponse:`Encontrei **5 produtos** com margem abaixo de 10%, o limite mínimo configurado. Juntos eles representaram 18% do faturamento do mês passado — o impacto não é pequeno.
10
11O caso mais crítico é a **Sandália Elara**, que está no top 3 de vendas mas rodando com margem de apenas 7%. Ajustar o preço em R$ 12 (+6%) levaria a margem pra 12,5% sem grande risco de queda de volume, segundo elasticidade histórica.
12
13Posso simular o impacto de diferentes ajustes?`,artifact:{title:"SKUs com margem crítica",type:"table",data:{metrics:[{label:"Produtos em alerta",value:"5"},{label:"% do faturamento",value:"18%"},{label:"Potencial com ajuste",value:"+R$ 4,2k/mês",highlight:!0}],columns:["Produto","Preço","Custo","Margem","Ajuste sugerido","Nova margem"],rows:[{values:["Sandália Elara","R$ 189","R$ 176","7%","+R$ 12","12,5%"]},{values:["Tênis Milkes Lite","R$ 159","R$ 145","8,8%","+R$ 10","13,1%"]},{values:["Conjunto Verão rosa","R$ 129","R$ 118","8,5%","+R$ 8","12,6%"]},{values:["Kit meias 6 pares","R$ 59","R$ 54","8,5%","+R$ 5","15,1%"]},{values:["Mochila escolar mini","R$ 99","R$ 91","8,1%","+R$ 7","13,8%"]}]}},actions:[{id:"approve",label:"Aplicar ajustes sugeridos",kind:"approve",destructive:!0},{id:"adjust",label:"Simular outros preços",kind:"adjust"},{id:"export",label:"Exportar análise",kind:"export"}]},"sales-summary":{id:"sales-summary",name:"Resumo de Vendas",description:"Total, pedidos, ticket médio e top produtos no período.",category:"sales",active:!0,suggestion:{priority:"opportunity",title:"Terça-feira bate 3 semanas consecutivas de alta",description:"Padrão consistente sugere campanha recorrente no dia.",metric:"+24%"},initialPrompt:"Resumo de vendas dos últimos 30 dias",thinkingSteps:[{label:"Agregando pedidos do período",duration:500},{label:"Calculando métricas principais",duration:400},{label:"Comparando com período anterior",duration:600},{label:"Identificando top produtos e canais",duration:700}],agentResponse:`Nos últimos 30 dias, a Milkes faturou **R$ 34.280** em **187 pedidos**, com ticket médio de R$ 183. Isso representa **+12% vs o período anterior**.
14
15Destaque para as terças-feiras, que batem 3 semanas consecutivas de alta (+24% acima da média semanal). É um padrão forte, sugere oportunidade pra campanha recorrente nesse dia.
16
17O top produto continua sendo a Sandália Elara (23% do faturamento). Canal principal: WhatsApp (41%), seguido de Instagram Shop (28%).`,artifact:{title:"Resumo de vendas — últimos 30 dias",type:"metrics",data:{metrics:[{label:"Faturamento",value:"R$ 34.280",trend:"+12%"},{label:"Pedidos",value:"187",trend:"+8%"},{label:"Ticket médio",value:"R$ 183",trend:"+4%"},{label:"Taxa de conversão",value:"2,4%",trend:"+0,3pp"}],breakdown:[{title:"Top 5 produtos",items:[{label:"Sandália Elara",value:"R$ 7.885 · 23%"},{label:"Tênis Milkes Lite",value:"R$ 5.142 · 15%"},{label:"Conjunto Verão",value:"R$ 3.770 · 11%"},{label:"Sandália Nara",value:"R$ 3.085 · 9%"},{label:"Kit meias 6 pares",value:"R$ 2.400 · 7%"}]},{title:"Por canal",items:[{label:"WhatsApp Business",value:"R$ 14.055 · 41%"},{label:"Instagram Shop",value:"R$ 9.598 · 28%"},{label:"Site direto",value:"R$ 6.856 · 20%"},{label:"Marketplace",value:"R$ 3.771 · 11%"}]},{title:"Por dia da semana",items:[{label:"Segunda",value:"R$ 3.940"},{label:"Terça",value:"R$ 6.428",highlight:!0},{label:"Quarta",value:"R$ 4.570"},{label:"Quinta",value:"R$ 5.142"},{label:"Sexta",value:"R$ 5.828"},{label:"Sábado",value:"R$ 4.742"},{label:"Domingo",value:"R$ 3.630"}]}]}},actions:[{id:"campaign",label:"Criar campanha de terça-feira",kind:"approve",destructive:!0},{id:"drill",label:"Detalhar por produto",kind:"adjust"},{id:"export",label:"Exportar relatório",kind:"export"}]},"rfm-segmentation":{id:"rfm-segmentation",name:"Segmentação RFM",description:"Segmenta clientes por recência, frequência e valor.",category:"customer",active:!0,suggestion:{priority:"opportunity",title:"34 clientes VIP identificados — grupo não tem campanha ativa",description:"Segmento de maior LTV da base sem comunicação nas últimas 3 semanas.",metric:"R$ 48k/mês"},initialPrompt:"Faz uma segmentação RFM dos meus clientes",thinkingSteps:[{label:"Lendo histórico de pedidos (12 meses)",duration:900},{label:"Calculando recência por cliente",duration:500},{label:"Calculando frequência de compra",duration:500},{label:"Calculando valor acumulado",duration:500},{label:"Aplicando modelo RFM",duration:700},{label:"Gerando recomendações por grupo",duration:800}],agentResponse:`Segmentei seus **1.247 clientes ativos** em 5 grupos RFM. O insight mais importante: você tem **34 clientes VIP** que concentram **38% do faturamento** mas não estão recebendo comunicação dedicada há 3 semanas.
18
19O segmento **Em Risco** (142 clientes) também precisa atenção — são ex-VIPs que podem virar churn se não houver ação nas próximas 2-3 semanas.
20
21Recomendo começar pela ativação dos VIPs com oferta exclusiva — é o grupo com maior retorno por mensagem enviada.`,artifact:{title:"Segmentação RFM — 1.247 clientes",type:"table",data:{metrics:[{label:"Total ativos",value:"1.247"},{label:"VIPs (top)",value:"34"},{label:"Em Risco",value:"142",highlight:!0}],columns:["Segmento","Clientes","% base","LTV médio","% faturamento","Ação sugerida"],rows:[{values:["VIP","34","2,7%","R$ 2.840","38%","Campanha exclusiva"]},{values:["Fiel","218","17%","R$ 820","32%","Programa de pontos"]},{values:["Em Risco","142","11%","R$ 1.420","14%","Reativação urgente"]},{values:["Novo","387","31%","R$ 240","9%","Onboarding jornada"]},{values:["Ocasional","466","37%","R$ 310","7%","Nurturing orgânico"]}]}},actions:[{id:"campaign",label:"Criar campanha VIP exclusiva",kind:"approve",destructive:!0},{id:"drill",label:"Detalhar segmento Em Risco",kind:"adjust"},{id:"export",label:"Exportar listas",kind:"export"}]},"demand-forecast":{id:"demand-forecast",name:"Previsão de Demanda",description:"Projeta demanda por produto para os próximos 90 dias.",category:"ops",active:!0,suggestion:{priority:"important",title:"Sandália Elara vai romper estoque em 12 dias pelo ritmo atual",description:"Lead time do fornecedor é 18 dias. Reposição urgente necessária.",metric:"12 dias"},initialPrompt:"Previsão de demanda para os próximos 90 dias",thinkingSteps:[{label:"Consultando histórico de vendas (18 meses)",duration:900},{label:"Aplicando modelo de sazonalidade",duration:800},{label:"Ajustando para tendência de 60 dias",duration:700},{label:"Calculando pontos de reposição",duration:600},{label:"Cruzando com lead time de fornecedores",duration:500}],agentResponse:`Projetei a demanda de **42 SKUs ativos** para os próximos 90 dias. **3 produtos estão com risco crítico de ruptura** antes da próxima reposição chegar:
22
23**Sandália Elara** é o mais urgente — o ritmo atual esgota o estoque em 12 dias, e o lead time do fornecedor é 18 dias. **Gap de 6 dias sem produto**, o que pode custar até R$ 3,2k em vendas perdidas.
24
25Recomendação: antecipar o pedido de reposição hoje. Posso gerar a ordem de compra sugerida?`,artifact:{title:"Previsão 90 dias — 3 produtos em risco",type:"table",data:{metrics:[{label:"SKUs analisados",value:"42"},{label:"Em risco de ruptura",value:"3",highlight:!0},{label:"Receita em risco",value:"R$ 9,1k"}],columns:["Produto","Estoque","Venda/dia","Rompe em","Lead time","Gap","Ação"],rows:[{values:["
25Sandália Elara","84 un","7,2","12 dias","18 dias",{badge:"6 dias",color:"pink"},"Pedir hoje"]},{values:["Tênis Milkes Lite","62 un","4,8","13 dias","15 dias",{badge:"2 dias",color:"pink"},"Pedir 3 dias"]},{values:["Conjunto Verão","45 un","3,1","15 dias","20 dias",{badge:"5 dias",color:"pink"},"Pedir hoje"]},{values:["Sandália Nara","128 un","3,8","34 dias","18 dias","OK","Monitorar"]},{values:["Kit meias 6p","340 un","5,2","65 dias","10 dias","OK","Monitorar"]}]}},actions:[{id:"approve",label:"Gerar ordens de compra",kind:"approve",destructive:!0},{id:"adjust",label:"Revisar quantidades",kind:"adjust"},{id:"export",label:"Exportar previsão",kind:"export"}]},"inventory-alert":{id:"inventory-alert",name:"Estoque em Alerta",description:"Produtos abaixo do limite configurado, com SKU e quantidade.",category:"ops",active:!0,suggestion:{priority:"urgent",title:"8 SKUs já estão abaixo do estoque mínimo configurado",description:"3 são de produtos em campanha ativa no Instagram agora.",metric:"8 SKUs"},initialPrompt:"Produtos abaixo do estoque mínimo?",thinkingSteps:[{label:"Verificando níveis atuais de estoque",duration:400},{label:"Comparando com limites configurados",duration:300},{label:"Cruzando com campanhas ativas",duration:500},{label:"Classificando por criticidade",duration:400}],agentResponse:`**8 SKUs** estão abaixo do estoque mínimo configurado agora. **3 deles estão em campanha ativa no Instagram Shop** — isso é crítico, porque se esgotam vamos pagar anúncio pra gerar frustração.
26
27O cenário mais urgente é o Conjunto Verão rosa: 4 unidades restantes, campanha impulsionando 200 cliques/dia. Com ticket médio de R$ 129, isso vira reclamação em menos de 24h.
28
29Recomendo pausar as campanhas dos 3 produtos em risco imediatamente e priorizar reposição.`,artifact:{title:"8 produtos em alerta de estoque",type:"table",data:{metrics:[{label:"Em alerta",value:"8"},{label:"Com campanha ativa",value:"3",highlight:!0},{label:"Esgotando hoje",value:"2"}],columns:["SKU","Produto","Atual","Mínimo","Status","Campanha"],rows:[{values:["MLK-CV-ROSA-P","Conjunto Verão rosa P","4","15",{badge:"CRÍTICO",color:"pink"},"Ativa"]},{values:["MLK-SE-32","Sandália Elara 32","6","20",{badge:"CRÍTICO",color:"pink"},"Ativa"]},{values:["MLK-TL-28","Tênis Milkes Lite 28","8","20",{badge:"CRÍTICO",color:"pink"},"Ativa"]},{values:["MLK-SN-30","Sandália Nara 30","11","15","Alerta","-"]},{values:["MLK-KM-6P","Kit meias 6 pares","28","50","Alerta","-"]},{values:["MLK-VEST-4","Vestido floral tam 4","5","12","Alerta","-"]},{values:["MLK-BER-BB","Berço mini baby","2","8","Alerta","-"]},{values:["MLK-MOC-M","Mochila escolar M","9","20","Alerta","-"]}]}},actions:[{id:"pause-campaigns",label:"Pausar campanhas dos 3 críticos",kind:"approve",destructive:!0},{id:"reorder",label:"Gerar ordens de reposição",kind:"adjust"},{id:"export",label:"Exportar lista",kind:"export"}]},"catalog-audit":{id:"catalog-audit",name:"Auditoria de Catálogo",description:"Varre produtos sem imagem, SKU, preço ou despublicados.",category:"catalog",active:!0,suggestion:{priority:"important",title:"17 produtos com dados incompletos no catálogo",description:"9 estão sem imagem secundária, 4 sem descrição SEO.",metric:"17 itens"},initialPrompt:"Faz uma auditoria do meu catálogo",thinkingSteps:[{label:"Varrendo todos os produtos publicados",duration:700},{label:"Verificando campos obrigatórios",duration:500},{label:"Analisando qualidade de imagens",duration:800},{label:"Checando descrições e SEO",duration:600}],agentResponse:`Varri os **94 produtos** do catálogo. Encontrei **17 com issues** que podem estar impactando conversão:
30
31- **9 produtos sem imagem secundária** (só têm foto principal). CTR de produto cai ~40% quando só tem 1 foto.
32- **4 produtos sem descrição SEO** (só o nome).
33- **3 produtos com preço R$ 0** (devem ser rascunhos esquecidos).
34- **1 produto despublicado mas em campanha ativa** (crítico, gasta budget em vão).
35
36Montei lista priorizada por impacto. Quer que eu comece pelos críticos?`,artifact:{title:"Auditoria de catálogo — 17 issues",type:"table",data:{metrics:[{label:"Produtos totais",value:"94"},{label:"Com issues",value:"17",highlight:!0},{label:"Críticos",value:"4"}],columns:["SKU","Produto","Issue","Severidade","Impacto estimado"],rows:[{values:["MLK-SE-VERM","S
36andália Elara vermelha","Despublicado mas em campanha",{badge:"CRÍTICO",color:"pink"},"R$ 80/dia em budget"]},{values:["MLK-TENIS-UN","Tênis Milkes Unissex","Preço R$ 0",{badge:"CRÍTICO",color:"pink"},"Não converte"]},{values:["MLK-VEST-AZ","Vestido azul claro","Preço R$ 0",{badge:"CRÍTICO",color:"pink"},"Não converte"]},{values:["MLK-SN-ROSA","Sandália Nara rosa","Preço R$ 0",{badge:"CRÍTICO",color:"pink"},"Não converte"]},{values:["MLK-KIT-ESC","Kit escolar","Sem descrição SEO","Médio","-30% tráfego orgânico"]},{values:["MLK-MOCH-G","Mochila escolar G","Sem descrição SEO","Médio","-30% tráfego orgânico"]},{values:["MLK-MEIA-1P","Meia 1 par","Só 1 foto","Baixo","-15% CTR"]},{values:["MLK-BONE-UN","Boné unissex","Só 1 foto","Baixo","-15% CTR"]}]}},actions:[{id:"fix-critical",label:"Pausar 4 críticos agora",kind:"approve",destructive:!0},{id:"generate-seo",label:"Gerar descrições SEO faltantes",kind:"adjust"},{id:"export",label:"Exportar checklist",kind:"export"}]},"vip-treatment":{id:"vip-treatment",name:"Tratamento VIP",description:"Identifica clientes VIP e prepara benefícios exclusivos.",category:"customer",active:!0,suggestion:{priority:"opportunity",title:"Aniversário de 5 clientes VIP nesta semana",description:"Oportunidade pra presente personalizado gerar engajamento.",metric:"5 VIPs"},initialPrompt:"Prepara benefício exclusivo pros clientes VIP dessa semana",thinkingSteps:[{label:"Identificando VIPs com evento próximo",duration:500},{label:"Cruzando histórico de compra",duration:600},{label:"Modelando benefício ideal por perfil",duration:700},{label:"Calculando custo e impacto estimado",duration:500}],agentResponse:`**5 clientes VIP fazem aniversário essa semana.** O LTV médio deles é de R$ 1.920 — são relacionamentos valiosos, vale investir.
37
38Montei um plano de presente personalizado por cliente, baseado no histórico de compra e afinidade. Custo total: R$ 340 (4% do LTV somado). A expectativa é gerar engajamento forte em redes (VIPs costumam postar) e 3-4 compras de retorno.
39
40Os envios precisam sair até quinta pra chegar no dia. Posso disparar os pedidos?`,artifact:{title:"Presente personalizado — 5 VIPs",type:"plan",data:{metrics:[{label:"VIPs da semana",value:"5"},{label:"Custo total",value:"R$ 340"},{label:"LTV somado",value:"R$ 9,6k",highlight:!0}],sections:[{title:"Juliana M. · aniversário quarta",content:"Bracelete infantil personalizado + cartão manuscrito. Afinidade: acessórios (comprou 3x)."},{title:"Rafael S. · aniversário quinta",content:"Par de meias tema favorito do filho (dinossauros) + foto polaroid. Afinidade: itens lúdicos."},{title:"Patrícia O. · aniversário sexta",content:"Vestido infantil da nova coleção em tamanho do filho + sacola de pano Milkes. Afinidade: vestidos."},{title:"André L. · aniversário sábado",content:"Tênis da coleção que ele vinha olhando + cadarço colorido de cortesia. Afinidade: calçados esportivos."},{title:"Vanessa C. · aniversário domingo",content:"Sandália tamanho do filho + pulseirinha combinando. Afinidade: looks coordenados."}]}},actions:[{id:"approve",label:"Aprovar e processar os 5 envios",kind:"approve",destructive:!0},{id:"adjust",label:"Editar presente específico",kind:"adjust"},{id:"export",label:"Exportar ordens",kind:"export"}]},"coupon-campaign":{id:"coupon-campaign",name:"Criador de Campanhas de Cupom",description:"Cria campanhas de cupons por segmento, validade e regras.",category:"sales",active:!0,suggestion:{priority:"opportunity",title:"Dia das Crianças em 24 dias — catálogo infantil em alta",description:"Melhor momento histórico pra campanha de cupom do ano.",metric:"24 dias"},initialPrompt:"Cria uma campanha de cupom pro Dia das Crianças",thinkingSteps:[{label:"Analisando performance histórica da data",duration:700},{label:"Calculando desconto com margem protegida",duration:600},{label:"Segmentando público alvo",duration:500},{label:"Modelando mecânica da campanha",duration:700},{label:"Gerando copies por canal",duration:800}],agentResponse:`Montei uma campanha de cupom pro **Dia das Crianças (12 de outubro)**. Baseado no histórico, essa é a melhor data comercial do ano pra Milkes.
41
42**Mecânica sugerida:** cupom DIADAS15 com 15% off na primeira compra, 20% off pra VIPs. Desconto calibrado com piso de margem mantido em 18%. Período: 01 a 13 de outubro.
43
44Expectativa: +180 pedidos adicionais no período, R$ 28k em receita incremental. ROI projetado 4,2x sobre o custo de desconto.`,artifact:{title:"Campanha Dia das Crianças 2026",type:"plan",data:{metrics:[{label:"Receita projetada",value:"R$ 28k"},{label:"Pedidos adicionais",value:"+180"},{label:"ROI projetado",value:"4,2x",highlight:!0}],sections:[{title:"Mecânica",content:"Cupom DIADAS15: 15% off na primeira compra da campanha, 20% off pra clientes VIP. Válido de 01/10 a 13/10. Piso de margem protegido (18%). Limite de 1 uso por cliente."},{title:"Segmentação",content:"1.247 clientes ativos · 34 VIPs recebem versão 20%. Base inteira recebe 15%. Novos visitantes ganham cupom após 30s na home."},{title:"Canais de disparo",content:"WhatsApp (01/10, 10h), Email (01/10, 18h), Instagram Stories (01-13/10 diário), Pop-up site (01-13/10). Follow-up WhatsApp dia 10 pra quem não converteu."},{title:"Copies por canal",content:`WhatsApp: "Oi [nome], o Dia das Crianças tá chegando 💛 preparei 15% pra você escolher o presente perfeito. Use DIADAS15 até 13/10 →"
45
46Email subject: "[nome], 15% off pra celebrar a Milkes"
47
48Instagram: "DIA DAS CRIANÇAS MILKES · 15% OFF · cupom DIADAS15 · até 13/10"`}]}},actions:[{id:"approve",label:"Aprovar e agendar campanha",kind:"approve",destructive:!0},{id:"adjust",label:"Ajustar desconto ou datas",kind:"adjust"},{id:"export",label:"Exportar plano",kind:"export"}]},"cost-update":{id:"cost-update",name:"Atualizar Custos em Lote",description:"Atualiza custo (cost_price) de produtos em lote a partir de planilha ou novo percentual.",category:"catalog",active:!0,suggestion:{priority:"important",title:"Fornecedor reajustou preço em 7% — 23 SKUs afetados",description:"Custos desatualizados estão inflando margem reportada incorretamente.",metric:"23 SKUs"},initialPrompt:"Atualiza o custo dos produtos do fornecedor Calçados Sul em 7%",thinkingSteps:[{label:"Filtrando produtos por fornecedor",duration:500},{label:"Calculando novos custos",duration:400},{label:"Recalculando margens",duration:600},{label:"Identificando SKUs que ficam em alerta",duration:500}],agentResponse:`Identifiquei **23 SKUs do fornecedor Calçados Sul**. Aplicando +7% no custo:
49
50- Margem média cai de 24% para 17%.
51- **4 produtos passam pro status "margem crítica"** (abaixo de 10%) e precisam de ajuste de preço de venda.
52- **2 produtos ficam com margem negativa** se os preços atuais forem mantidos — esses precisam de decisão imediata.
53
54Quer que eu aplique o reajuste de custo e te mostre as recomendações de ajuste de preço de venda?`,artifact:{title:"Reajuste de custo — 23 SKUs",type:"table",data:{metrics:[{label:"SKUs afetados",value:"23"},{label:"Novos críticos",value:"4",highlight:!0},{label:"Margem negativa",value:"2"}],columns:["Produto","Custo atual","Novo custo","Preço","Margem atual","Nova margem"],rows:[{values:["Sandália Elara","R$ 176","R$ 188","R$ 189","7%",{badge:"-0,5%",color:"pink"}]},{values:["Tênis Milkes Lite","R$ 145","R$ 155","R$ 159","8,8%","2,5%"]},{values:["Sandália Nara","R$ 118","R$ 126","R$ 169","30%","25%"]},{values:["Tênis Milkes Sport","R$ 178","R$ 190","R$ 189","6%",{badge:"-0,5%",color:"pink"}]},{values:["Sandália Luna","R$ 95","R$ 102","R$ 139","31%","26%"]}]}},actions:[{id:"approve",label:"Aplicar reajuste nos 23 SKUs",kind:"approve",destructive:!0},{id:"fix-prices",label:"Ajustar preços críticos primeiro",kind:"adjust"},{id:"export",label:"Exportar simulação",kind:"export"}]},"draft-cleanup":{id:"draft-cleanup",name:"Limpeza de Rascunhos",description:"Lista rascunhos de pedidos antigos (draft orders) e sugere quais fechar, enviar ou descartar.",category:"ops",active:!0,suggestion:{priority:"opportunity",title:"14 rascunhos de pedido parados há mais de 7 dias",description:"R$ 2,8k em valor travado. 6 parecem ser esquecidos no WhatsApp.",metric:"R$ 2,8k"},initialPrompt:"Lista os rascunhos de pedido parados",thinkingSteps:[{label:"Consultando draft orders",duration:400},{label:"Filtrando por idade (>7 dias)",duration:300},{label:"Cruzando com última interação do cliente",duration:600},{label:"Classificando por provável ação",duration:500}],agentResponse:`Achei **14 rascunhos de pedido** parados há mais de 7 dias, somando **R$ 2.834** em valor.
55
56Classifiquei em 3 grupos:
57
58- **6 esquecidos (R$ 1.240):** clientes que negociaram no WhatsApp, receberam link de pagamento e não voltaram. Vale um follow-up de recuperação.
59- **5 cancelados de fato (R$ 890):** cliente confirmou que não vai fechar. Podem ser arquivados.
60- **3 aguardando definição (R$ 704):** cliente ainda conversando ou escolhendo tamanho. Manter monitoramento.
61
62Disparar a recuperação dos 6 esquecidos?`,artifact:{title:"Rascunhos parados — ação por grupo",type:"table",data:{metrics:[{label:"Rascunhos parados",value:"14"},{label:"Valor recuperável",value:"R$ 1.240",highlight:!0},{label:"Descartáveis",value:"R$ 890"}],columns:["#","Cliente","Produto","Valor","Parado há","Status","Ação"],rows:[{values:["D-1247","Beatriz M.","Conjunto verão + meia","R$ 218","8 dias",{badge:"Esquecido"},"Follow-up"]},{values:["D-1251","Carlos R.","Tênis Milkes Lite","R$ 159","9 dias",{badge:"Esquecido"},"Follow-up"]},{values:["D-1253","Amanda S.","Sandália Elara","R$ 189","10 dias",{badge:"Esquecido"},"Follow-up"]},{values:["D-1256","Marcelo T.","Kit meias + mochila","R$ 158","11 dias",{badge:"Cancelado"},"Arquivar"]},{values:["D-1259","Juliana P.","Vestido tam 4","R$ 129","12 dias",{badge:"Cancelado"},"Arquivar"]}]}},actions:[{id:"recover",label:"Disparar follow-up dos 6 esquecidos",kind:"approve",destructive:!0}
62,{id:"archive",label:"Arquivar os 5 cancelados",kind:"adjust"},{id:"export",label:"Exportar lista",kind:"export"}]},"shipping-tracking":{id:"shipping-tracking",name:"Acompanhamento de Envios",description:"Lista pedidos em trânsito ou com envio atrasado, agrupando por transportadora.",category:"ops",active:!0,suggestion:{priority:"important",title:"7 pedidos com prazo de entrega estourado pela transportadora X",description:"Clientes ainda não reclamaram, oportunidade pra proatividade.",metric:"7 pedidos"},initialPrompt:"Pedidos atrasados ou em risco",thinkingSteps:[{label:"Consultando pedidos em trânsito",duration:500},{label:"Cruzando com SLA prometido por frete",duration:500},{label:"Detectando padrões por transportadora",duration:600},{label:"Priorizando ação pro cliente final",duration:400}],agentResponse:`Tem **12 pedidos em trânsito**. **7 deles já estouraram o prazo prometido** pela transportadora.
63
64O padrão é claro: **6 dos 7 atrasos são da transportadora Sedex** (dentro do CEP região SE-interior). Vale escalar com a conta deles ou remanejar essa região pra outra opção.
65
66Criticidade imediata: os clientes **ainda não reclamaram**. É o melhor momento pra enviar mensagem proativa de pedido de desculpa + voucher — melhora NPS ao invés de deixar virar queixa no Reclame Aqui.`,artifact:{title:"Pedidos atrasados — ação proativa",type:"table",data:{metrics:[{label:"Em trânsito",value:"12"},{label:"Atrasados",value:"7",highlight:!0},{label:"Transportadora X",value:"6/7"}],columns:["Pedido","Cliente","Produto","Transportadora","Previsto","Atraso","Ação"],rows:[{values:["#4851","Thiago A.","Kit calçado infantil","Sedex","2 dias atrás",{badge:"3 dias",color:"pink"},"Desculpa + voucher"]},{values:["#4856","Viviane B.","Sandália Elara","Sedex","1 dia atrás",{badge:"2 dias",color:"pink"},"Desculpa + voucher"]},{values:["#4859","Gustavo L.","Tênis Milkes","Sedex","1 dia atrás",{badge:"1 dia",color:"pink"},"Monitorar"]},{values:["#4862","Letícia O.","Conjunto verão","Sedex","hoje",{badge:"atrasando",color:"pink"},"Monitorar"]},{values:["#4865","Renan S.","Mochila escolar","Correios","2 dias atrás",{badge:"2 dias",color:"pink"},"Desculpa + voucher"]}]}},actions:[{id:"proactive",label:"Enviar desculpa + voucher aos 7",kind:"approve",destructive:!0},{id:"escalate",label:"Abrir chamado na Sedex",kind:"adjust"},{id:"export",label:"Exportar lista",kind:"export"}]},"order-review":{id:"order-review",name:"Revisão de Pedidos",description:"Lista pedidos recentes por status, destaca pendências (pagamento, fulfillment) e sugere próximas ações.",category:"ops",active:!0,suggestion:{priority:"important",title:"9 pedidos com pagamento pendente há mais de 24h",description:"Total de R$ 1.620 em vendas que não foram concretizadas.",metric:"R$ 1.620"},initialPrompt:"Revisa os pedidos com pendência",thinkingSteps:[{label:"Listando pedidos por status",duration:400},{label:"Identificando pendências críticas",duration:500},{label:"Calculando tempo em cada estado",duration:400},{label:"Sugerindo ação por caso",duration:600}],agentResponse:`Revisei os **38 pedidos ativos**. Tem **3 tipos de pendência** que precisam de atenção:
67
68- **9 pedidos com pagamento pendente há 24h+** (R$ 1.620). PIX ou boleto gerado que não foi pago. Recomendo segundo lembrete por WhatsApp.
69- **4 pedidos pagos mas não separados** há mais de 48h. Gargalo no armazém — investigar.
70- **2 pedidos com divergência entre NF e produto** enviado. Precisam de revisão imediata antes que virem reclamação.
71
72Qual começa?`,artifact:{title:"Pedidos com pendência",type:"table",data:{metrics:[{label:"Pedidos ativos",value:"38"},{label:"Com pendência",value:"15",highlight:!0},{label:"Valor travado",value:"R$ 2.410"}],columns:["Pedido","Cliente","Valor","Status","Parado há","Ação"],rows:[{values:["#4870","Patricia D.","R$ 218","Pgto pendente PIX","28h","2º lembrete WhatsApp"]},{values:["#4872","Ronaldo F.","R$ 189","Pgto pendente boleto","30h","2º lembrete email"]},{values:["#4868","Bruna L.","R$ 245","Pago, não separado","52h","Escalar armazém"]},{values:["#4861","Evandro P.","R$ 156","Divergência NF","2 dias",{badge:"URGENTE",color:"pink"},"Revisar manualmente"]}]}},actions:[{id:"remind-payments",label:"Enviar 2º lembrete nos 9",kind:"approve",destructive:!0},{id:"escalate-fulfillment",label:"Escalar gargalo de separação",kind:"adjust"},{id:"export",label:"Exportar relatório",kind:"export"}]},"payment-methods":{id:"payment-methods",name:"Formas de Pagamento",description:"Lista formas de pagamento ativas e sinaliza se está faltando algo que a maioria dos lojistas do nicho oferece.",category:"ops",active:!0,suggestion:{priority:"opportunity",title:"Milkes não aceita Pix parcelado — 67% dos concorrentes oferecem",description:"Pode estar afastando clientes que não querem boleto nem cartão.",metric:"+R$ 6k/mês"},initialPrompt:"Analisa minhas formas de pagamento",thinkingSteps:[{label:"Listando métodos ativos",duration:400},{label:"Comparando com benchmark do nicho",duration:600},{label:"Analisando conversão por método",duration:500},{label:"Identificando gaps de mercado",duration:500}],agentResponse:`Você tem **4 métodos ativos** (PIX, boleto, cartão crédito, cartão débito). Comparando com 30 lojistas do nicho infantil:
73
74- **Pix parcelado:** 67% dos concorrentes oferecem. Você não. Estimativa de impacto: +R$ 6k/mês, principalmente no ticket médio mais alto.
75- **Picpay:** 43% oferecem. Pode ser relevante pro seu público jovem (mães 25-34).
76- **Crediário próprio:** 12% oferecem. Baixa adesão do nicho, não vale investir.
77
78Também notei que **boleto tem apenas 34% de taxa de conversão** (vs 89% do PIX). Vale incentivar migração no checkout.`,artifact:{title:"Análise de métodos de pagamento",type:"table",data:{metrics:[{label:"Métodos ativos",value:"4"},{label:"Gap identificado",value:"Pix parcelado",highlight:!0},{label:"Impacto estimado",value:"+R$ 6k/mês"}],columns:["Método","Status","Conversão","% benchmark","Recomendação"],rows:[{values:["PIX","Ativo","89%","100%","OK"]},{values:["PIX parcelado",{badge:"FALTA",color:"pink"},"-","67%","Ativar"]},{values:["Boleto","Ativo","34%","52%","Melhorar timeout"]},{values:["Cartão crédito","Ativo","76%","72%","OK"]},{values:["Cartão débito","Ativo","81%","68%","OK"]},{values:["Picpay",{badge:"FALTA"},"-","43%","Avaliar"]},{values:["Crediário próprio",{badge:"FALTA"},"-","12%","Não priorizar"]}]}},actions:[{id:"activate-pix-installments",label:"Ativar Pix parcelado",kind:"approve",destructive:!0},{id:"simulate-picpay",label:"Simular Picpay",kind:"adjust"},{id:"export",label:"Exportar análise",kind:"export"}]},"price-monitor":{id:"price-monitor",name:"Monitoramento de Preço",description:"Adiciona, lista e remove monitores de preço de concorrentes, e reporta o que mudou desde a última checagem.",category:"catalog",active:!0,suggestion:{priority:"important",title:"3 concorrentes subiram preço da sandália infantil nos últimos 5 dias",description:"Oportunidade pra ajustar precificação da Sandália Elara sem perder competitividade.",metric:"+R$ 18/un"},initialPrompt:"Mostra mudanças de preço dos concorrentes",thinkingSteps:[{label:"Verificando monitores ativos (8 produtos × 6 concorrentes)",duration:900},{label:"Coletando preços atuais",duration:800},{label:"Comparando com última checagem",duration:500},{label:"Identificando mudanças significativas",duration:400}],agentResponse:`Monitorando **48 combinações produto × concorrente**. Nas últimas 72h houve **7 mudanças relevantes** (>5%):
79
80**Destaque:** 3 concorrentes (Tricae, Carters Brasil, Momi Kids) **subiram o pre
80ço da sandália infantil 32-34** numa média de R$ 18. A sua Sandália Elara continua em R$ 189 — agora você tá R$ 11 **abaixo** da média deles.
81
82Isso é oportunidade dupla: (1) você pode subir o preço mantendo competitividade, (2) usar no marketing "ainda mais barato que os concorrentes" por algumas semanas.
83
84Quer simular um reajuste de +R$ 8?`,artifact:{title:"Mudanças de preço — 72h",type:"table",data:{metrics:[{label:"Monitores ativos",value:"48"},{label:"Mudanças detectadas",value:"7"},{label:"Oportunidade",value:"R$ 18/un",highlight:!0}],columns:["Produto","Concorrente","Antes","Agora","Mudança","Seu preço"],rows:[{values:["Sandália infantil 32","Tricae","R$ 179","R$ 199",{badge:"+11%",color:"pink"},"R$ 189"]},{values:["Sandália infantil 32","Carters BR","R$ 189","R$ 209",{badge:"+11%",color:"pink"},"R$ 189"]},{values:["Sandália infantil 32","Momi Kids","R$ 184","R$ 199",{badge:"+8%",color:"pink"},"R$ 189"]},{values:["Tênis infantil 28","Tricae","R$ 149","R$ 139",{badge:"-7%"},"R$ 159"]},{values:["Conjunto verão","Carters BR","R$ 139","R$ 129",{badge:"-7%"},"R$ 129"]}]}},actions:[{id:"price-up",label:"Simular reajuste Sandália Elara +R$ 8",kind:"approve",destructive:!0},{id:"watch-more",label:"Adicionar mais monitores",kind:"adjust"},{id:"export",label:"Exportar relatório",kind:"export"}]},"category-organizer":{id:"category-organizer",name:"Organizador de Categorias",description:"Analisa a árvore de categorias da loja, identifica duplicadas, vazias ou mal nomeadas e propõe reorganização.",category:"catalog",active:!0,suggestion:{priority:"opportunity",title:"Árvore de categorias da loja com 6 problemas estruturais",description:"2 categorias duplicadas, 3 vazias e 1 mal nomeada impactam navegação e SEO.",metric:"6 issues"},initialPrompt:"Analisa a estrutura de categorias do meu site",thinkingSteps:[{label:"Lendo árvore de categorias",duration:500},{label:"Detectando duplicatas e vazias",duration:600},{label:"Avaliando nomenclatura",duration:500},{label:"Cruzando com busca interna",duration:700},{label:"Propondo reorganização",duration:600}],agentResponse:`Analisei a árvore de categorias da Milkes (**18 categorias, 3 níveis**). Encontrei 6 problemas estruturais:
85
86- **"Sandálias" e "Sandália" coexistem** como duas categorias separadas (uma com 14 produtos, outra com 3). Fundir elimina confusão e melhora SEO.
87- **3 categorias vazias** ("Promoções", "Outlet", "Básicos") que aparecem no menu mas não têm produto — pioram experiência.
88- **"Roupinhas" é infantilismo** que pode soar datado; buscas internas usam mais "Roupas" (4x mais frequente).
89
90Também achei um insight forte: **"calçado esportivo infantil" é a 3ª busca mais frequente da loja**, mas não tem categoria dedicada. Vale criar.`,artifact:{title:"Reorganização proposta — árvore de categorias",type:"plan",data:{metrics:[{label:"Categorias atuais",value:"18"},{label:"Issues encontradas",value:"6",highlight:!0},{label:"Impacto SEO estimado",value:"+15% tráfego"}],sections:[{title:'Ação 1 — Fundir "Sandálias" e "Sandália"',content:'17 produtos consolidados em "Sandálias". Redirect 301 da página antiga. Ganho SEO: concentra autoridade e elimina canibalização de keywords.'},{title:"Ação 2 — Remover 3 categorias vazias",content:'"Promoções", "Outlet" e "Básicos" saem do menu enquanto não tiverem produtos. Podem voltar a qualquer momento.'},{title:'Ação 3 — Renomear "Roupinhas" → "Roupas"',content:'Alinha com linguagem real dos clientes. Busca interna mostra "roupas" 4x mais que "roupinhas".'},{title:'Ação 4 — Criar "Calçado Esportivo Infantil"',content:'Nova categoria filha de "Calçados". Conter Tênis Milkes Lite, Milkes Sport e futuros lançamentos esportivos. 3ª busca mais frequente da loja.'}]}},actions:[{id:"approve",label:"Aplicar reorganização completa",kind:"approve",destructive:!0},{id:"adjust",label:"Revisar nomes sugeridos",kind:"adjust"},{id:"export",label:"Exportar plano",kind:"export"}]},"store-pages":{id:"store-pages",name:"Páginas da Loja",description:"Revisa páginas informativas (Sobre, FAQ, Política de Trocas) e sugere atualização ou criação das que faltam.",category:"catalog",active:!0,suggestion:{priority:"opportunity",title:"FAQ da loja não tem resposta pras 5 perguntas mais enviadas no WhatsApp",description:"Atualizar FAQ reduz carga do CS e melhora taxa de conversão direto no site.",metric:"-40% tickets"},initialPrompt:"Analisa as páginas institucionais da minha loja",thinkingSteps:[{label:"Listando páginas institucionais existentes",duration:400},{label:"Cruzando com perguntas recebidas no CS",duration:700}
90,{label:"Avaliando atualização e completude",duration:600},{label:"Priorizando ações por impacto",duration:500}],agentResponse:`A Milkes tem **4 páginas institucionais** (Sobre, Troca, Envio, Contato). Comparei o conteúdo com as **198 perguntas recebidas no WhatsApp nos últimos 30 dias**:
91
92- **5 perguntas mais frequentes não estão respondidas** no FAQ atual (que tem apenas 6 respostas genéricas). São perguntas que viram ticket no CS e atraso pro cliente.
93- **Política de Troca está desatualizada** (menciona prazo de 7 dias, mas a lei garante 30).
94- **Falta página de "Guia de Tamanhos"** — 23% das trocas vêm de tamanho errado, página dedicada resolveria.
95
96Posso preparar os textos de FAQ e Guia de Tamanhos pra você revisar antes de publicar?`,artifact:{title:"Gap de páginas institucionais",type:"table",data:{metrics:[{label:"Páginas atuais",value:"4"},{label:"Gaps detectados",value:"6",highlight:!0},{label:"Redução estimada em tickets",value:"-40%"}],columns:["Item","Status","Prioridade","Impacto"],rows:[{values:["FAQ — 5 perguntas frequentes",{badge:"FALTA",color:"pink"},"Alta","Reduz tickets CS"]},{values:["Guia de tamanhos",{badge:"FALTA",color:"pink"},"Alta","Reduz 23% trocas"]},{values:["Política de Troca (prazo)","Desatualizado","Alta","Compliance legal"]},{values:["Página Sobre","OK","-","-"]},{values:["Política de Envio","OK","-","-"]},{values:["Certificados segurança",{badge:"FALTA"},"Média","+Confiança checkout"]}]}},actions:[{id:"generate-content",label:"Gerar conteúdos das páginas faltantes",kind:"approve",destructive:!0},{id:"update-policy",label:"Atualizar Política de Troca",kind:"adjust"},{id:"export",label:"Exportar checklist",kind:"export"}]},"store-checkup":{id:"store-checkup",name:"Checkup da Loja",description:"Audita informações gerais da loja — dados fiscais, endereço, contato, SEO básico — e sinaliza lacunas.",category:"catalog",active:!0,suggestion:{priority:"important",title:"4 lacunas de configuração podem estar impactando conversão",description:"Meta description ausente, horário de atendimento desatualizado, entre outras.",metric:"4 itens"},initialPrompt:"Faz um checkup geral da minha loja",thinkingSteps:[{label:"Lendo configurações gerais",duration:500},{label:"Verificando dados fiscais e endereço",duration:400},{label:"Auditando SEO básico",duration:600},{label:"Checando integrações (Google, Meta, analytics)",duration:700}],agentResponse:`Fiz um checkup completo da Milkes. A base tá boa, mas achei **4 lacunas importantes** que valem ação:
97
98- **Meta description da home não existe.** Google renderiza texto aleatório nos resultados de busca. Impacto direto no CTR orgânico.
99- **Horário de atendimento diz "9h às 18h"** na página de contato, mas as conversas no WhatsApp mostram que você responde até 22h. Ajustar pode reduzir perdas de cliente noturno.
100- **Pixel da Meta não está disparando o evento Purchase corretamente.** Detectado em 3 dos últimos 10 pedidos. Isso prejudica otimização dos seus anúncios.
101- **Google Search Console não está verificado.** Você está perdendo dados de posição orgânica.
102
103Posso gerar as correções?`,artifact:{title:"Checkup da loja — 4 lacunas",type:"table",data:{metrics:[{label:"Itens auditados",value:"23"},{label:"Com lacuna",value:"4",highlight:!0},{label:"Críticas",value:"2"}],columns:["Item","Status","Severidade","Impacto"],rows:[{values:["Meta description home",{badge:"AUSENTE",color:"pink"},"Alta","-20% CTR orgânico"]},{values:["Pixel Meta — evento Purchase","Falha intermitente","Alta","Anúncios sub-otimizados"]},{values:["Horário atendimento","Desatualizado","Média","Perda de leads noturnos"]},{values:["Google Search Console","Não verificado","Média","Sem dados de posição"]},{values:["CNPJ e endereço fiscal","OK","-","-"]},{values:["Certificado SSL","OK","-","-"]},{values:["Política de privacidade","OK","-","-"]}]}},actions:[{id:"generate-meta",label:"Gerar meta description + pixel fix",kind:"approve",destructive:!0},{id:"verify-gsc",label:"Instruir verificação GSC",kind:"adjust"},{id:"export",label:"Exportar diagnóstico",kind:"export"}]},"financial-reconciliation":{id:"financial-reconciliation",name:"Reconciliação Financeira",description:"Cruza transações de pagamento com pedidos para detectar divergências, estornos e pendências.",category:"finance",active:!0,suggestion:{priority:"important",title:"3 divergências entre gateway de pagamento e pedidos do mês",description:"R$ 780 em transações sem pedido associado — pode ser estorno não registrado.",metric:"R$ 780"},initialPrompt:"Reconcilia as transações do mês",thinkingSteps:[{label:"Baixando extrato do gateway",duration:600},{label:"Cruzando com pedidos registrados",duration:800},{label:"Identificando divergências",duration:500},{label:"Classificando tipo de gap",duration:500}],agentResponse:`Reconciliei **187 transações** do mês com os pedidos no sistema. Achei **3 divergências**:
104
105- **R$ 580 em 2 transações sem pedido associado.** Analisando os detalhes, parecem ser **estornos não registrados manualmente** (Nubank 16/09 e Mercado Pago 22/09).
106- **R$ 200 em 1 pedido marcado como pago mas sem transação** no gateway correspondente. Pode ser pagamento fora do sistema (PIX direto pra conta pessoal) que não entrou no fluxo.
107
108Valor total em divergência: **R$ 780** (0,9% do faturamento do mês). Dentro do aceitável mas vale corrigir antes de fechar o mês fiscal.`,artifact:{title:"Reconciliação — setembro 2025",type:"table",data:{metrics:[{label:"Transações",value:"187"},{label:"Divergências",value:"3",highlight:!0},{label:"Valor em gap",value:"R$ 780"}],columns:["Data","Tipo","Valor","Gateway","Pedido","Status"],rows:[{values:["16/09 14:22","Transação sem pedido","R$ 340","Nubank","Não encontrado",{badge:"Estorno?",color:"pink"}]},{values:["22/09 10:08","Transação sem pedido","R$ 240","Mercado Pago","Não encontrado",{badge:"Estorno?",color:"pink"}]},{values:["28/09 16:45","Pedido sem transação","R$ 200","-","#4751",{badge:"PIX manual?",color:"pink"}]}]}},actions:[{id:"investigate",label:"Ir pra cada divergência no gateway",kind:"approve",destructive:!1},{id:"mark-resolved",label:"Marcar como estornos já processados",kind:"adjust"},{id:"export",label:"Exportar reconciliação",kind:"export"}]}},Ct={skills:Pt},Je=Ct.skills,Xe="snew:agent-threads",Be="snew:agent-messages",He="snew:agent-artifacts";if(typeof window<"u")try{localStorage.removeItem("snew:agent-suggestions"),localStorage.removeItem("snew:agent-suggestions:v2")}catch{}const Fa=[{id:"general",name:"Análise geral",description:"Pergunte qualquer coisa e o agente decide qual skill usar.",category:"general",active:!0},...Object.values(Je).map(e=>({id:e.id,name:e.name,description:e.description,category:e.category,active:e.active}))],da={urgent:0,important:1,opportunity:2};function Et(){const e=Date.now();return Object.values(Je).filter(a=>a.suggestion).map((a,t)=>({id:`sug-${a.id}`,priority:a.suggestion.priority,skillId:a.id,title:a.suggestion.title,de
108scription:a.suggestion.description,metric:a.suggestion.metric,createdAt:new Date(e-t*15*60*1e3).toISOString(),...a.suggestion.priority==="urgent"?{expiresAt:new Date(e+24*60*60*1e3).toISOString()}:{}})).sort((a,t)=>da[a.priority]-da[t.priority])}Et();function Qe(){try{const e=Re(Xe);if(e)return JSON.parse(e)}catch{}return[]}function wt(e,a,t){const o={id:`thread-${Date.now()}-${Math.random().toString(36).slice(2,6)}`,skillId:e,title:a,lastMessageAt:new Date().toISOString(),messageCount:0,status:"active"},n=[...Qe(),o];return $e(Xe,JSON.stringify(n)),window.dispatchEvent(new Event("snew:agent-threads-updated")),o}function $t(e,a){const t=Qe().map(o=>o.id===e?{...o,...a}:o);$e(Xe,JSON.stringify(t)),window.dispatchEvent(new Event("snew:agent-threads-updated"))}function xe(e){try{const a=Re(Be);if(a)return JSON.parse(a)[e]??[]}catch{}return[]}function Ta(e,a){let t={};try{const o=Re(Be);o&&(t=JSON.parse(o))}catch{}t[e]=a,$e(Be,JSON.stringify(t)),window.dispatchEvent(new Event(`snew:messages-updated-${e}`))}function Ce(e,a){const t=xe(e),o={...a,id:`msg-${Date.now()}-${Math.random().toString(36).slice(2,6)}`,threadId:e,createdAt:new Date().toISOString()};return Ta(e,[...t,o]),$t(e,{lastMessageAt:o.createdAt,messageCount:t.length+1,previewText:a.content.slice(0,80)}),o}function Oe(e){try{const a=Re(He);if(a)return JSON.parse(a)[e]??[]}catch{}return[]}function Da(e,a){let t={};try{const n=Re(He);n&&(t=JSON.parse(n))}catch{}const o={...a,id:`art-${Date.now()}-${Math.random().toString(36).slice(2,6)}`,threadId:e,createdAt:new Date().toISOString()};return t[e]=[...t[e]??[],o],$e(He,JSON.stringify(t)),window.dispatchEvent(new Event(`snew:artifacts-updated-${e}`)),o}async function jt(e,a,t){const o=Je[t],n=(o==null?void 0:o.thinkingSteps)??[{label:"Consultando dados",duration:600},{label:"Aplicando filtros",duration:600},{label:"Cruzando com perfil de cliente",duration:700},{label:"Calculando métricas",duration:600}],i=n.map((r,u)=>({id:`s${u+1}`,label:r.label,status:"running"})),l=Ce(e,{role:"thinking",content:"",steps:i});for(let r=0;r<i.length;r++){await new Promise(p=>{var c;return setTimeout(p,((c=n[r])==null?void 0:c.duration)??600)});const A=xe(e).map(p=>{var c;return p.id===l.id?{...p,steps:(c=p.steps)==null?void 0:c.map((b,h)=>({...b,status:h<=r?"done":"running"}))}:p});Ta(e,A)}if(o){const r=Da(e,{title:o.artifact.title,type:o.artifact.type,data:o.artifact.data});Ce(e,{role:"agent",content:o.agentResponse,artifactIds:[r.id],actions:o.actions.map(u=>({id:u.id,label:u.label,kind:u.kind,destructive:u.destructive}))});return}const d=It(e,t,a);Ce(e,{role:"agent",content:`Análise para "${a}" concluída. Revise os detalhes no painel ao lado.`,artifactIds:[d.id],actions:[{id:"a1",label:"Aprovar e executar",kind:"approve",destructive:!0},{id:"a2",label:"Ajustar",kind:"adjust"},{id:"a3",label:"Apenas exportar",kind:"export"}]})}function It(e,a,t){return Da(e,{title:"Análise",type:"document",data:{content:`Análise gerada para: "${t}".
109
110O agente preparou os insights abaixo.`}})}function Mt(e){const[a,t]=N.useState(()=>xe(e));return N.useEffect(()=>{t(xe(e));const o=()=>t(xe(e));return window.addEventListener(`snew:messages-updated-${e}`,o),()=>window.removeEventListener(`snew:messages-updated-${e}`,o)},[e]),a}function Lt(e){const[a,t]=N.useState(()=>Oe(e));return N.useEffect(()=>{t(Oe(e));const o=()=>t(Oe(e));return window.addEventListener(`snew:artifacts-updated-${e}`,o),()=>window.removeEventListener(`snew:artifacts-updated-${e}`,o)},[e]),a}const Ft=({data:e})=>s.jsxs(s.Fragment,{children:[e.metrics&&s.jsx("div",{style:{display:"grid",gridTemplateColumns:`repeat(${e.metrics.length}, 1fr)`,gap:10,marginBottom:16},children:e.metrics.map((a,t)=>s.jsxs("div",{style:{background:"#F5F5F3",borderRadius:10,padding:12},children:[s.jsx("div",{style:{fontSize:11,color:"#999",marginBottom:4},children:a.label}),s.jsx("div",{style:{fontSize:20,fontWeight:500,color:a.highlight?"#3B6D11":"#1A1A1A"},children:a.value})]},t))}),s.jsxs("table",{style:{width:"100%",fontSize:12,borderCollapse:"collapse"},children:[s.jsx("thead",{children:s.jsx("tr",{style:{borderBottom:"0.5px solid #E8E8E4"},children:e.columns.map((a,t)=>s.jsx("th",{style:{textAlign:"left",padding:"8px 4px",fontSize:10,textTransform:"uppercase",letterSpacing:"0.06em",color:"#999",fontWeight:500},children:a},t))})}),s.jsx("tbody",{children:e.rows.map((a,t)=>s.jsx("tr",{style:{borderBottom:"0.5px solid #F0F0EC"},children:a.values.map((o,n)=>s.jsx("td",{style:{padding:"10px 4px",color:"#1A1A1A"},children:typeof o=="object"&&o.badge?s.jsx("span",{style:{padding:"2px 8px",borderRadius:999,background:o.color==="pink"?"#FBEAF0":"#F0F0EC",color:o.color==="pink"?"#72243E":"#666",fontSize:10,fontWeight:500},children:o.badge}):o},n))},t))})]})]}),Tt=({data:e})=>s.jsx("div",{style:{fontSize:13,lineHeight:1.6,color:"#1A1A1A",whiteSpace:"pre-wrap"},children:e.content}),Na=({metrics:e})=>s.jsx("div",{style:{display:"grid",gridTemplateColumns:`repeat(${Math.min(e.length,4)}, 1fr)`,gap:10,marginBottom:16},children:e.map((a,t)=>s.jsxs("div",{style:{background:"#F5F5F3",borderRadius:10,padding:12},children:[s.jsx("div",{style:{fontSize:11,color:"#999",marginBottom:4},children:a.label}),s.jsx("div",{style:{fontSize:20,fontWeight:500,color:a.highlight?"#3B6D11":"#1A1A1A"},children:a.value}),a.trend&&s.jsx("div",{style:{fontSize:11,color:"#3B6D11",marginTop:2},children:a.trend})]},t))}),Dt=({data:e})=>s.jsxs(s.Fragment,{children:[e.metrics&&s.jsx(Na,{metrics:e.metrics}),s.jsx("div",{style:{display:"flex",flexDirection:"column",gap:12},children:(e.sections??[]).map((a,t)=>s.jsxs("div",{style:{border:"0.5px solid #E8E8E4",borderRadius:12,padding:16,background:"#FAFAF8"},children:[s.jsx("div",{style:{fontSize:13,fontWeight:500,color:"#1A1A1A",marginBottom:6},children:a.title}),s.jsx("div",{style:{fontSize:12,color:"#666",lineHeight:1.6,whiteSpace:"pre-wrap"},children:a.content})]},t))})]}),Nt=({data:e})=>s.jsxs(s.Fragment,{children:[e.metrics&&s.jsx(Na,{metrics:e.metrics}),(e.breakdown??[]).map((a,t)=>s.jsxs("div",{style:{marginBottom:16},children:[s.jsx("div",{style:{fontSize:11,color:"#999",textTransform:"uppercase",letterSpacing:"0.06em",fontWeight:500,marginBottom:8},children:a.title}),s.jsx("div",{style:{display:"flex",flexDirection:"column",gap:4},children:(a.items??[]).map((o,n)=>s.jsxs("div",{style:{display:"flex",justifyContent:"space-between",padding:"8px 0",borderBottom:"0.5px solid #F0F0EC",fontSize:12,color:"#1A1A1A"},children:[s.jsx("span",{children:o.label}),s.jsx("span",{style:{color:"#666"},children:o.value})]},n))})]},t))]}),qt=({artifact:e})=>{switch(e.type){case"table":return s.jsx(Ft,{data:e.data});case"plan":return s.jsx(Dt,{data:e.data});case"metrics":return s.jsx(Nt,{data:e.data});case"chart":case"document":default:return s.jsx(Tt,{data:e.data})}},Vt=({artifacts:e,activeArtifactId:a,onSelectArtifact:t})=>{const o=e.find(n=>n.id===a);return e.length===0?s.jsx("div",{style:{height:"100%",display:"flex",alignItems:"center",justifyContent:"center",background:"#FFFFFF",color:"#999",fontSize:13,padding:40,textAlign:"center"},children:"Artifacts gerados pela análise aparecerão aqui."}):s.jsxs("div",{style:{height:"100%",display:"flex",flexDirection:"column",background:"#FFFFFF"},children:[e.length>1&&s.jsx("div",{style:{padding:"0 24px",display:"flex",gap:4,borderBottom:"0.5px solid #E8E8E4"},children:e.map(n=>s.jsx("button",{onClick:()=>t(n.id),style:{padding:"14px 12px",fontSize:12,color:n.id===a?"#1A1A1A":"#999",fontWeight:n.id===a?500:400,background:"transparent",border:"none",borderBottom:n.id===a?"2px solid #1A1A1A":"2px s
110olid transparent",marginBottom:-1,cursor:"pointer",fontFamily:"inherit"},children:n.title},n.id))}),o&&e.length===1&&s.jsxs("header",{style:{padding:"16px 24px",display:"flex",alignItems:"center",gap:10,borderBottom:"0.5px solid #E8E8E4"},children:[s.jsx("div",{style:{fontSize:13,color:"#1A1A1A",fontWeight:500},children:o.title}),s.jsx("div",{style:{padding:"2px 8px",borderRadius:999,background:"#F0F0EC",fontSize:10,color:"#666"},children:o.type==="table"?"Tabela":o.type==="chart"?"Gráfico":o.type==="plan"?"Plano":o.type==="metrics"?"Métricas":"Documento"}),s.jsx("div",{style:{flex:1}}),s.jsx("button",{style:{fontSize:11,color:"#666",background:"transparent",border:"none",cursor:"pointer",fontFamily:"inherit"},onClick:()=>ve({title:"Exportando CSV…"}),children:"Exportar CSV"})]}),s.jsx("div",{style:{flex:1,overflow:"auto",padding:24},children:o&&s.jsx(qt,{artifact:o})})]})},Ot=({message:e,artifacts:a,isLastAgentMsg:t,onArtifactClick:o,onAction:n})=>{var i,l,d;if(e.role==="user")return s.jsx("div",{style:{alignSelf:"flex-end",maxWidth:"85%"},children:s.jsx("div",{style:{background:"#1A1A1A",color:"#FFFFFF",padding:"10px 14px",borderRadius:16,borderBottomRightRadius:4,fontSize:13,lineHeight:1.5,whiteSpace:"pre-wrap"},children:e.content})});if(e.role==="thinking"){const r=(i=e.steps)==null?void 0:i.every(u=>u.status==="done");return s.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:8},children:[s.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[s.jsx("div",{style:{width:18,height:18,borderRadius:999,background:"#F0F0EC",display:"flex",alignItems:"center",justifyContent:"center",fontSize:10,color:"#1A1A1A"},children:s.jsx(_a,{size:10})}),s.jsx("div",{style:{fontSize:11,color:"#999",textTransform:"uppercase",letterSpacing:"0.06em"},children:r?"Análise concluída":"Analisando…"})]}),s.jsx("div",{style:{paddingLeft:24,display:"flex",flexDirection:"column",gap:4},children:(l=e.steps)==null?void 0:l.map(u=>s.jsxs("div",{style:{fontSize:12,color:"#666",display:"flex",alignItems:"center",gap:6,opacity:u.status==="running"?.7:1},children:[u.status==="done"&&s.jsx("span",{style:{color:"#3B6D11"}}),u.status==="running"&&s.jsx(Wa,{size:10,className:"animate-spin"}),u.status==="failed"&&s.jsx("span",{style:{color:"#E24B4A"}}),u.label]},u.id))})]})}return s.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:10,maxWidth:"92%"},children:[s.jsx("div",{style:{fontSize:13,color:"#1A1A1A",lineHeight:1.6,whiteSpace:"pre-wrap"},children:e.content.split(/(\*\*[^*]+\*\*)/g).map((r,u)=>r.startsWith("**")&&r.endsWith("**")?s.jsx("strong",{children:r.slice(2,-2)},u):s.jsx(N.Fragment,{children:r},u))}),(d=e.artifactIds)==null?void 0:d.map(r=>{const u=a.find(A=>A.id===r);return u?s.jsxs("button",{onClick:()=>o(r),style:{padding:"10px 12px",border:"0.5px solid #E8E8E4",borderRadius:10,background:"#FFFFFF",display:"flex",alignItems:"center",gap:10,cursor:"pointer",fontFamily:"inherit",textAlign:"left"},children:[s.jsx("div",{style:{width:28,height:28,borderRadius:6,background:"#F0F0EC",display:"flex",alignItems:"center",justifyContent:"center"},children:s.jsx(Xa,{size:14,color:"#666"})}),s.jsxs("div",{style:{flex:1,minWidth:0},children:[s.jsx("div",{style:{fontSize:12,color:"#1A1A1A",fontWeight:500},children:u.title}),s.jsxs("div",{style:{fontSize:10,color:"#999"},children:[u.type==="table"?"Tabela":u.type==="chart"?"Gráfico":"Documento"," ","· atualizada agora"]})]}),s.jsx("div",{style:{fontSize:11,color:"#666"},children:"abrir →"})]},r):null}),t&&e.actions&&e.actions.length>0&&s.jsx("div",{style:{display:"flex",gap:6,flexWrap:"wrap",marginTop:4},children:e.actions.map(r=>s.jsx("button",{onClick:()=>n(r),style:{padding:r.destructive?"8px 14px":"8px 12px",borderRadius:999,background:r.destructive?"hsl(var(--color-background-danger))":"transparent",color:r.destructive?"hsl(var(--color-text-danger))":"#666",fontSize:12,fontWeight:r.destructive?500:400,border:r.destructive?"none":"0.5px solid #E8E8E4",cursor:"pointer",fontFamily:"inherit"},children:r.label},r.id))})]})},Kt=({threadId:e,initialPrompt:a})=>{var I;const t=ca(),o=Mt(e),n=Lt(e),i=Qe().find(v=>v.id===e),l=i?Fa.find(v=>v.id===i.skillId):null,[d,r]=N.useState(null),[u,A]=N.useState(""),[p,c]=N.useState(!1),b=N.useRef(null),h=N.useRef(!1);N.useEffect(()=>{n.length>0&&r(v=>v??n[n.length-1].id)},[n]);const C=N.useCallback(async v=>{!v.trim()||p||!i||(c(!0),Ce(e,{role:"user",content:v}),A(""),await jt(e,v,i.skillId),c(!1))},[p,i,e]);N.useEffect(()=>{h.current||o.length===0&&a&&i&&(h.current=!0,C(a))},[o.length,a,i,C]),N.useEffect(()=>{var v;(v=b.current)==null||v.scrollIntoView({behavior:"smooth"})},[o]);const E=v=>{v.kind==="approve"?ve({title:"Executando ação",description:v.label}):v.kind==="export"?ve({title:"Exportando CSV…"}):v.kind==="adjust"?ve({title:"Ajuste",description:"Continue a conversa para refinar."}):ve({title:"Ação dispensada"})},k=(I=[...o].reverse().find(v=>v.role==="agent"))==null?void 0:I.id,w=N.useMemo(()=>{try{const v=localStorage.getItem("snew:agent-panel-size");if(v){const q=JSON.parse(v);if(Array.isArray(q)&&q.length===2)return q}}catch{}return[40,60]},[]);return s.jsxs(Ma,{direction:"horizontal",style:{height:"100vh"},onLayout:v=>{localStorage.setItem("snew:agent-panel-size",JSON.stringify(v))},children:[s.jsx(la,{defaultSize:w[0],minSize:25,maxSize:60,children:s.jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",background:"#FAFAF8"},children:[s.jsxs("header",{style:{padding:"16px 20px",display:"flex",alignItems:"center",gap:10,borderBottom:"0.5px solid #E8E8E4",background:"#FFFFFF"},children:[s.jsx("button",{onClick:()=>t("/agent"),style:{background:"transparent",border:"none",cursor:"pointer",color:"#666",padding:4},children:s.jsx(Ga,{size:16})}),s.jsx("div",{style:{fontSize:12,color:"#999"},children:"Snew Agent /"}),s.jsx("div",{style:{fontSize:13,color:"#1A1A1A",fontWeight:500},children:(l==null?void 0:l.name)??"Thread"}),s.jsx("div",{style:{flex:1}}),s.jsx("button",{style:{background:"transparent",border:"none",cursor:"pointer",color:"#999",padding:4},children:s.jsx(Ja,{size:16})})]}),s.jsxs("div",{style:{flex:1,overflowY:"auto",padding:20,display:"flex",flexDirection:"column",gap:20},children:[o.length===0&&s.jsx("div",{style:{color:"#999",fontSize:13,textAlign:"center",marginTop:40},children:"Faça uma pergunta para iniciar a análise."}
110),o.map(v=>s.jsx(Ot,{message:v,artifacts:n,isLastAgentMsg:v.id===k,onArtifactClick:q=>r(q),onAction:E},v.id)),s.jsx("div",{ref:b})]}),s.jsx("div",{style:{padding:"16px 20px",background:"#FFFFFF",borderTop:"0.5px solid #E8E8E4"},children:s.jsxs("div",{style:{background:"#FAFAF8",border:"0.5px solid #E8E8E4",borderRadius:20,padding:"12px 16px",display:"flex",gap:8,alignItems:"flex-end"},children:[s.jsx("textarea",{value:u,onChange:v=>A(v.target.value),placeholder:"Continue a conversa…",disabled:p,onKeyDown:v=>{v.key==="Enter"&&!v.shiftKey&&(v.preventDefault(),C(u))},style:{flex:1,border:"none",outline:"none",resize:"none",fontSize:13,lineHeight:1.5,background:"transparent",fontFamily:"inherit",minHeight:20,maxHeight:120,color:"#1A1A1A"}}),s.jsx("button",{className:"snew-main-action",onClick:()=>C(u),disabled:!u.trim()||p,style:{width:28,height:28,borderRadius:999,border:"none",cursor:u.trim()&&!p?"pointer":"not-allowed",display:"flex",alignItems:"center",justifyContent:"center"},children:s.jsx(Ua,{size:14})})]})})]})}),s.jsx(La,{}),s.jsx(la,{defaultSize:w[1],minSize:40,children:s.jsx(Vt,{artifacts:n,activeArtifactId:d,onSelectArtifact:r})})]})},ao=()=>{const e=ca(),{threadId:a,skillId:t}=Ka(),[o]=Ba(),[n,i]=N.useState(a??null);return N.useEffect(()=>{if(a){i(a);return}if(t){const l=Fa.find(d=>d.id===t);if(l){const d=wt(t,l.name);i(d.id),e(`/agent/thread/${d.id}`,{replace:!0})}}},[a,t,e]),n?s.jsx(Kt,{threadId:n,initialPrompt:o.get("prompt")}):s.jsx("div",{style:{padding:40,color:"#999"},children:"Carregando…"})};export{ao as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.