velloo 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/BUN-LICENSE.md +4 -3
  2. package/THIRD-PARTY-NOTICES.md +3 -3
  3. package/canvas/assets/index-DFOlwAKW.js +31 -0
  4. package/canvas/assets/{lucide-all-Cezxn40A.js → lucide-all-CezGNjGW.js} +1 -1
  5. package/canvas/index.html +1 -1
  6. package/{chunk-mqtnj8ws.js → chunk-00n2d68z.js} +1 -1
  7. package/{chunk-45wv1fs5.js → chunk-02gpgqj4.js} +5 -5
  8. package/{chunk-m0v3d581.js → chunk-0ztxyzac.js} +1 -1
  9. package/{chunk-07fxzrx2.js → chunk-2x5rw009.js} +3 -3
  10. package/{chunk-w30zfv3m.js → chunk-3f2p94wa.js} +1 -1
  11. package/{chunk-zgwvkgsz.js → chunk-3jqbybmp.js} +1 -1
  12. package/{chunk-mqx96m2g.js → chunk-5tatkt2j.js} +1 -1
  13. package/{chunk-qqagacne.js → chunk-640swnrm.js} +1 -1
  14. package/{chunk-v6ks5v53.js → chunk-6600wkmq.js} +1 -1
  15. package/{chunk-esg0x95a.js → chunk-6adv9eke.js} +1 -1
  16. package/{chunk-s1cwck4c.js → chunk-6wfvb07c.js} +1 -1
  17. package/{chunk-dqqpbmxt.js → chunk-8a2agf28.js} +1 -1
  18. package/{chunk-asqpx5v7.js → chunk-8kn6tp4b.js} +2 -2
  19. package/{chunk-cq2q36d1.js → chunk-9b4akcfp.js} +1 -1
  20. package/{chunk-8n07n0cr.js → chunk-9kvbe53e.js} +2 -2
  21. package/{chunk-3612470d.js → chunk-a5mxgvcz.js} +1 -1
  22. package/{chunk-sjxp2bx3.js → chunk-as4rn21e.js} +1 -1
  23. package/{chunk-qx83fdv2.js → chunk-avewjans.js} +4 -4
  24. package/chunk-bpb97rsk.js +17 -0
  25. package/{chunk-q7wwqn03.js → chunk-bsn761jv.js} +1 -1
  26. package/{chunk-rg86bhtb.js → chunk-c11n1tve.js} +1 -1
  27. package/{chunk-emty5315.js → chunk-cfksd3zh.js} +1 -1
  28. package/{chunk-hsk91jms.js → chunk-ck3bg8rf.js} +1 -1
  29. package/{chunk-r5y1sh4f.js → chunk-cy1nmr0f.js} +1 -1
  30. package/{chunk-nx0ex7qw.js → chunk-dqy6a75x.js} +1 -1
  31. package/{chunk-qgbat4fv.js → chunk-f8jchnwe.js} +1 -1
  32. package/{chunk-d19ttv1a.js → chunk-fejhav0p.js} +1 -1
  33. package/{chunk-x84qrz4q.js → chunk-fzqt4rsz.js} +1 -1
  34. package/{chunk-rrrn1mkq.js → chunk-g7pbfad5.js} +1 -1
  35. package/{chunk-cg0sjdqt.js → chunk-gv209d5j.js} +1 -1
  36. package/chunk-j4rt31qb.js +2 -0
  37. package/{chunk-t08391mh.js → chunk-kmsbcb3q.js} +1 -1
  38. package/{chunk-nrxqr4v5.js → chunk-ktps9v0k.js} +1 -1
  39. package/{chunk-rhfzy9c0.js → chunk-ktsdzzgx.js} +1 -1
  40. package/{chunk-8ztgcajz.js → chunk-kvxn1cyx.js} +1 -1
  41. package/{chunk-xg49s85z.js → chunk-n70zfv0m.js} +902 -902
  42. package/{chunk-djwvt6jx.js → chunk-n8pr0kc8.js} +1 -1
  43. package/{chunk-dy7qwj3t.js → chunk-pasvz8xw.js} +1 -1
  44. package/{chunk-t61vyqpd.js → chunk-qewarcqf.js} +1 -1
  45. package/{chunk-b4hny6hw.js → chunk-qf1c6jxh.js} +1 -1
  46. package/chunk-qn05hn7a.js +5 -0
  47. package/{chunk-majd3gx9.js → chunk-qvdvxqs0.js} +1 -1
  48. package/{chunk-aefn23tr.js → chunk-r014f76h.js} +1 -1
  49. package/{chunk-32cq4wpr.js → chunk-seaar5na.js} +1 -1
  50. package/{chunk-g3k8k6fq.js → chunk-tax7fxav.js} +1 -1
  51. package/{chunk-c4164x55.js → chunk-tmjs6xas.js} +1 -1
  52. package/{chunk-z6r6wxm6.js → chunk-v6w8akph.js} +1 -1
  53. package/{chunk-xxw67jpk.js → chunk-w40pqmyz.js} +4 -4
  54. package/{chunk-yjwtdm71.js → chunk-x05grjd9.js} +1 -1
  55. package/{chunk-ffm2jpxp.js → chunk-x61f42fj.js} +2 -2
  56. package/{chunk-h3ser37q.js → chunk-xc6mats8.js} +1 -1
  57. package/chunk-yp39f93e.js +815 -0
  58. package/{chunk-ez720ked.js → chunk-ysf9388d.js} +1 -1
  59. package/{chunk-6w42sr61.js → chunk-z3r8px3d.js} +1 -1
  60. package/{chunk-8qf0ne1p.js → chunk-z9kcdgj8.js} +1 -1
  61. package/chunk-zexzy6zv.js +2 -0
  62. package/chunk-zjbbd87h.js +2 -0
  63. package/cli.js +1 -1
  64. package/package.json +9 -9
  65. package/pkgs/schema/src/index.ts +1 -0
  66. package/pkgs/schema/src/snippet-resolve.ts +43 -0
  67. package/canvas/assets/index-CcPwhD7W.js +0 -31
  68. package/chunk-4g4c9h7k.js +0 -2
  69. package/chunk-9g45c5md.js +0 -815
  70. package/chunk-bntsn3wj.js +0 -2
  71. package/chunk-ejpccmcj.js +0 -18
  72. package/chunk-jxgwdz2r.js +0 -5
  73. package/chunk-kvq7pcph.js +0 -2
@@ -0,0 +1,31 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/lucide-all-CezGNjGW.js","assets/rolldown-runtime-hePW80VL.js"])))=>i.map(i=>d[i]);
2
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,n,r,t as i}from"./react-D0Ec-185.js";import{C as a,D as o,E as s,S as c,T as l,_ as u,a as d,b as f,c as p,d as m,f as h,g,h as _,i as v,l as y,m as b,n as x,o as S,p as C,r as w,s as T,t as E,u as D,v as O,w as k,x as A,y as j}from"./vendor-CKmQ-Zst.js";import{$ as M,A as ee,B as te,C as ne,D as re,E as ie,F as ae,G as oe,H as se,I as ce,J as le,K as ue,L as de,M as N,N as fe,O as pe,P as me,Q as he,R as ge,S as _e,T as ve,U as ye,V as be,W as xe,X as Se,Y as Ce,Z as we,_ as Te,_t as Ee,a as De,at as Oe,b as ke,c as Ae,ct as je,d as Me,dt as Ne,et as Pe,f as Fe,ft as Ie,g as Le,gt as Re,h as ze,ht as Be,i as Ve,it as He,j as Ue,k as We,l as Ge,lt as Ke,m as qe,mt as Je,n as Ye,nt as Xe,o as Ze,ot as Qe,p as $e,pt as et,q as tt,r as nt,rt,s as it,st as at,t as ot,tt as st,u as ct,ut as lt,v as ut,vt as dt,w as ft,x as pt,y as mt,yt as ht,z as gt}from"./radix-gmpYzWRH.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var _t=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),vt=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),yt=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),bt=e=>{let t=yt(e);return t.charAt(0).toUpperCase()+t.slice(1)},xt={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},St=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},P=e(t(),1),Ct=(0,P.createContext)({});function wt({children:e,size:t,color:n,strokeWidth:r,absoluteStrokeWidth:i,className:a}){let o=(0,P.useMemo)(()=>({size:t,color:n,strokeWidth:r,absoluteStrokeWidth:i,className:a}),[t,n,r,i,a]);return(0,P.createElement)(Ct.Provider,{value:o},e)}var Tt=()=>(0,P.useContext)(Ct),Et=(0,P.forwardRef)(({color:e,size:t,strokeWidth:n,absoluteStrokeWidth:r,className:i=``,children:a,iconNode:o,...s},c)=>{let{size:l=24,strokeWidth:u=2,absoluteStrokeWidth:d=!1,color:f=`currentColor`,className:p=``}=Tt()??{},m=r??d?Number(n??u)*24/Number(t??l):n??u;return(0,P.createElement)(`svg`,{ref:c,...xt,width:t??l??xt.width,height:t??l??xt.height,stroke:e??f,strokeWidth:m,className:_t(`lucide`,p,i),...!a&&!St(s)&&{"aria-hidden":`true`},...s},[...o.map(([e,t])=>(0,P.createElement)(e,t)),...Array.isArray(a)?a:[a]])}),F=(e,t)=>{let n=(0,P.forwardRef)(({className:n,...r},i)=>(0,P.createElement)(Et,{ref:i,iconNode:t,className:_t(`lucide-${vt(bt(e))}`,`lucide-${e}`,n),...r}));return n.displayName=bt(e),n},Dt=F(`archive-restore`,[[`rect`,{width:`20`,height:`5`,x:`2`,y:`3`,rx:`1`,key:`1wp1u1`}],[`path`,{d:`M4 8v11a2 2 0 0 0 2 2h2`,key:`tvwodi`}],[`path`,{d:`M20 8v11a2 2 0 0 1-2 2h-2`,key:`1gkqxj`}],[`path`,{d:`m9 15 3-3 3 3`,key:`1pd0qc`}],[`path`,{d:`M12 12v9`,key:`192myk`}]]),Ot=F(`archive`,[[`rect`,{width:`20`,height:`5`,x:`2`,y:`3`,rx:`1`,key:`1wp1u1`}],[`path`,{d:`M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8`,key:`1s80jp`}],[`path`,{d:`M10 12h4`,key:`a56b0p`}]]),kt=F(`arrow-down`,[[`path`,{d:`M12 5v14`,key:`s699le`}],[`path`,{d:`m19 12-7 7-7-7`,key:`1idqje`}]]),At=F(`arrow-left-right`,[[`path`,{d:`M8 3 4 7l4 4`,key:`9rb6wj`}],[`path`,{d:`M4 7h16`,key:`6tx8e3`}],[`path`,{d:`m16 21 4-4-4-4`,key:`siv7j2`}],[`path`,{d:`M20 17H4`,key:`h6l3hr`}]]),jt=F(`arrow-left`,[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]),Mt=F(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),Nt=F(`blend`,[[`circle`,{cx:`15`,cy:`9`,r:`7`,key:`1i12rt`}],[`circle`,{cx:`9`,cy:`15`,r:`7`,key:`19bs8k`}]]),Pt=F(`blocks`,[[`path`,{d:`M10 22V7a1 1 0 0 0-1-1H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-5a1 1 0 0 0-1-1H2`,key:`1ah6g2`}],[`rect`,{x:`14`,y:`2`,width:`8`,height:`8`,rx:`1`,key:`88lufb`}]]),Ft=F(`bold`,[[`path`,{d:`M6 12h9a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h7a4 4 0 0 1 0 8`,key:`mg9rjx`}]]),It=F(`bot`,[[`path`,{d:`M12 8V4H8`,key:`hb8ula`}],[`rect`,{width:`16`,height:`12`,x:`4`,y:`8`,rx:`2`,key:`enze0r`}],[`path`,{d:`M2 14h2`,key:`vft8re`}],[`path`,{d:`M20 14h2`,key:`4cs60a`}],[`path`,{d:`M15 13v2`,key:`1xurst`}],[`path`,{d:`M9 13v2`,key:`rq6x2g`}]]),Lt=F(`boxes`,[[`path`,{d:`M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z`,key:`lc1i9w`}],[`path`,{d:`m7 16.5-4.74-2.85`,key:`1o9zyk`}],[`path`,{d:`m7 16.5 5-3`,key:`va8pkn`}],[`path`,{d:`M7 16.5v5.17`,key:`jnp8gn`}],[`path`,{d:`M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z`,key:`8zsnat`}],[`path`,{d:`m17 16.5-5-3`,key:`8arw3v`}],[`path`,{d:`m17 16.5 4.74-2.85`,key:`8rfmw`}],[`path`,{d:`M17 16.5v5.17`,key:`k6z78m`}],[`path`,{d:`M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z`,key:`1xygjf`}],[`path`,{d:`M12 8 7.26 5.15`,key:`1vbdud`}],[`path`,{d:`m12 8 4.74-2.85`,key:`3rx089`}],[`path`,{d:`M12 13.5V8`,key:`1io7kd`}]]),Rt=F(`braces`,[[`path`,{d:`M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1`,key:`ezmyqa`}],[`path`,{d:`M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1`,key:`e1hn23`}]]),zt=F(`bug`,[[`path`,{d:`M12 20v-9`,key:`1qisl0`}],[`path`,{d:`M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z`,key:`uouzyp`}],[`path`,{d:`M14.12 3.88 16 2`,key:`qol33r`}],[`path`,{d:`M21 21a4 4 0 0 0-3.81-4`,key:`1b0z45`}],[`path`,{d:`M21 5a4 4 0 0 1-3.55 3.97`,key:`5cxbf6`}],[`path`,{d:`M22 13h-4`,key:`1jl80f`}],[`path`,{d:`M3 21a4 4 0 0 1 3.81-4`,key:`1fjd4g`}],[`path`,{d:`M3 5a4 4 0 0 0 3.55 3.97`,key:`1d7oge`}],[`path`,{d:`M6 13H2`,key:`82j7cp`}],[`path`,{d:`m8 2 1.88 1.88`,key:`fmnt4t`}],[`path`,{d:`M9 7.13V6a3 3 0 1 1 6 0v1.13`,key:`1vgav8`}]]),Bt=F(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),Vt=F(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]),Ht=F(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),Ut=F(`chevron-up`,[[`path`,{d:`m18 15-6-6-6 6`,key:`153udz`}]]),Wt=F(`circle-arrow-up`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m16 12-4-4-4 4`,key:`177agl`}],[`path`,{d:`M12 16V8`,key:`1sbj14`}]]),Gt=F(`circle-check`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m16 9-5.5 5.5L8 12`,key:`xofnsj`}]]),Kt=F(`cloud-upload`,[[`path`,{d:`M12 13v8`,key:`1l5pq0`}],[`path`,{d:`M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242`,key:`1pljnt`}],[`path`,{d:`m8 17 4-4 4 4`,key:`1quai1`}]]),qt=F(`cloud`,[[`path`,{d:`M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z`,key:`p7xjir`}]]),Jt=F(`coins`,[[`path`,{d:`M13.744 17.736a6 6 0 1 1-7.48-7.48`,key:`bq4yh3`}],[`path`,{d:`M15 6h1v4`,key:`11y1tn`}],[`path`,{d:`m6.134 14.768.866-.5 2 3.464`,key:`17snzx`}],[`circle`,{cx:`16`,cy:`8`,r:`6`,key:`14bfc9`}]]),Yt=F(`component`,[[`path`,{d:`M15.536 11.293a1 1 0 0 0 0 1.414l2.376 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0z`,key:`1uwlt4`}],[`path`,{d:`M2.297 11.293a1 1 0 0 0 0 1.414l2.377 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414L6.088 8.916a1 1 0 0 0-1.414 0z`,key:`10291m`}],[`path`,{d:`M8.916 17.912a1 1 0 0 0 0 1.415l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.415l-2.377-2.376a1 1 0 0 0-1.414 0z`,key:`1tqoq1`}],[`path`,{d:`M8.916 4.674a1 1 0 0 0 0 1.414l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0z`,key:`1x6lto`}]]),Xt=F(`copy`,[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]),Zt=F(`crosshair`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`22`,x2:`18`,y1:`12`,y2:`12`,key:`l9bcsi`}],[`line`,{x1:`6`,x2:`2`,y1:`12`,y2:`12`,key:`13hhkx`}],[`line`,{x1:`12`,x2:`12`,y1:`6`,y2:`2`,key:`10w3f3`}],[`line`,{x1:`12`,x2:`12`,y1:`22`,y2:`18`,key:`15g9kq`}]]),Qt=F(`download`,[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]),$t=F(`ellipsis`,[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`19`,cy:`12`,r:`1`,key:`1wjl8i`}],[`circle`,{cx:`5`,cy:`12`,r:`1`,key:`1pcz8c`}]]),en=F(`external-link`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`M10 14 21 3`,key:`gplh6r`}],[`path`,{d:`M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6`,key:`a6xqqp`}]]),tn=F(`eye-off`,[[`path`,{d:`M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49`,key:`ct8e1f`}],[`path`,{d:`M14.084 14.158a3 3 0 0 1-4.242-4.242`,key:`151rxh`}],[`path`,{d:`M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143`,key:`13bj9a`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),nn=F(`eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),rn=F(`file-stack`,[[`path`,{d:`M11 21a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-8a1 1 0 0 1 1-1`,key:`likhh7`}],[`path`,{d:`M16 16a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1`,key:`17ky3x`}],[`path`,{d:`M21 6a2 2 0 0 0-.586-1.414l-2-2A2 2 0 0 0 17 2h-3a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1z`,key:`1hyeo0`}]]),an=F(`folder-input`,[[`path`,{d:`M2 9V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-1`,key:`fm4g5t`}],[`path`,{d:`M2 13h10`,key:`pgb2dq`}],[`path`,{d:`m9 16 3-3-3-3`,key:`6m91ic`}]]),on=F(`folder-plus`,[[`path`,{d:`M12 10v6`,key:`1bos4e`}],[`path`,{d:`M9 13h6`,key:`1uhe8q`}],[`path`,{d:`M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z`,key:`1kt360`}]]),sn=F(`frame`,[[`line`,{x1:`22`,x2:`2`,y1:`6`,y2:`6`,key:`15w7dq`}],[`line`,{x1:`22`,x2:`2`,y1:`18`,y2:`18`,key:`1ip48p`}],[`line`,{x1:`6`,x2:`6`,y1:`2`,y2:`22`,key:`a2lnyx`}],[`line`,{x1:`18`,x2:`18`,y1:`2`,y2:`22`,key:`8vb6jd`}]]),cn=F(`git-branch`,[[`path`,{d:`M15 6a9 9 0 0 0-9 9V3`,key:`1cii5b`}],[`circle`,{cx:`18`,cy:`6`,r:`3`,key:`1h7g24`}],[`circle`,{cx:`6`,cy:`18`,r:`3`,key:`fqmcym`}]]),ln=F(`grip-vertical`,[[`circle`,{cx:`9`,cy:`12`,r:`1`,key:`1vctgf`}],[`circle`,{cx:`9`,cy:`5`,r:`1`,key:`hp0tcf`}],[`circle`,{cx:`9`,cy:`19`,r:`1`,key:`fkjjf6`}],[`circle`,{cx:`15`,cy:`12`,r:`1`,key:`1tmaij`}],[`circle`,{cx:`15`,cy:`5`,r:`1`,key:`19l28e`}],[`circle`,{cx:`15`,cy:`19`,r:`1`,key:`f4zoj3`}]]),un=F(`hand`,[[`path`,{d:`M18 11V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2`,key:`1fvzgz`}],[`path`,{d:`M14 10V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v2`,key:`1kc0my`}],[`path`,{d:`M10 10.5V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2v8`,key:`10h0bg`}],[`path`,{d:`M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15`,key:`1s1gnw`}]]),dn=F(`heading-1`,[[`path`,{d:`M4 12h8`,key:`17cfdx`}],[`path`,{d:`M4 18V6`,key:`1rz3zl`}],[`path`,{d:`M12 18V6`,key:`zqpxq5`}],[`path`,{d:`m17 12 3-2v8`,key:`1hhhft`}]]),fn=F(`heading-2`,[[`path`,{d:`M4 12h8`,key:`17cfdx`}],[`path`,{d:`M4 18V6`,key:`1rz3zl`}],[`path`,{d:`M12 18V6`,key:`zqpxq5`}],[`path`,{d:`M21 18h-4c0-4 4-3 4-6 0-1.5-2-2.5-4-1`,key:`9jr5yi`}]]),pn=F(`heading`,[[`path`,{d:`M6 12h12`,key:`8npq4p`}],[`path`,{d:`M6 20V4`,key:`1w1bmo`}],[`path`,{d:`M18 20V4`,key:`o2hl4u`}]]),mn=F(`image`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,ry:`2`,key:`1m3agn`}],[`circle`,{cx:`9`,cy:`9`,r:`2`,key:`af1f0g`}],[`path`,{d:`m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21`,key:`1xmnt7`}]]),hn=F(`info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),gn=F(`italic`,[[`line`,{x1:`19`,x2:`10`,y1:`4`,y2:`4`,key:`15jd3p`}],[`line`,{x1:`14`,x2:`5`,y1:`20`,y2:`20`,key:`bu0au3`}],[`line`,{x1:`15`,x2:`9`,y1:`4`,y2:`20`,key:`uljnxc`}]]),_n=F(`layers`,[[`path`,{d:`M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z`,key:`zw3jo`}],[`path`,{d:`M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12`,key:`1wduqc`}],[`path`,{d:`M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17`,key:`kqbvx6`}]]),vn=F(`layout-dashboard`,[[`rect`,{width:`7`,height:`9`,x:`3`,y:`3`,rx:`1`,key:`10lvy0`}],[`rect`,{width:`7`,height:`5`,x:`14`,y:`3`,rx:`1`,key:`16une8`}],[`rect`,{width:`7`,height:`9`,x:`14`,y:`12`,rx:`1`,key:`1hutg5`}],[`rect`,{width:`7`,height:`5`,x:`3`,y:`16`,rx:`1`,key:`ldoo1y`}]]),yn=F(`layout-grid`,[[`rect`,{width:`7`,height:`7`,x:`3`,y:`3`,rx:`1`,key:`1g98yp`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`3`,rx:`1`,key:`6d4xhi`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`14`,rx:`1`,key:`nxv5o0`}],[`rect`,{width:`7`,height:`7`,x:`3`,y:`14`,rx:`1`,key:`1bb6yr`}]]),bn=F(`library-big`,[[`rect`,{width:`8`,height:`18`,x:`3`,y:`3`,rx:`1`,key:`oynpb5`}],[`path`,{d:`M7 3v18`,key:`bbkbws`}],[`path`,{d:`M20.4 18.9c.2.5-.1 1.1-.6 1.3l-1.9.7c-.5.2-1.1-.1-1.3-.6L11.1 5.1c-.2-.5.1-1.1.6-1.3l1.9-.7c.5-.2 1.1.1 1.3.6Z`,key:`1qboyk`}]]),xn=F(`library`,[[`path`,{d:`m16 6 4 14`,key:`ji33uf`}],[`path`,{d:`M12 6v14`,key:`1n7gus`}],[`path`,{d:`M8 8v12`,key:`1gg7y9`}],[`path`,{d:`M4 4v16`,key:`6qkkli`}]]),Sn=F(`link-2`,[[`path`,{d:`M9 17H7A5 5 0 0 1 7 7h2`,key:`8i5ue5`}],[`path`,{d:`M15 7h2a5 5 0 1 1 0 10h-2`,key:`1b9ql8`}],[`line`,{x1:`8`,x2:`16`,y1:`12`,y2:`12`,key:`1jonct`}]]),Cn=F(`list-checks`,[[`path`,{d:`M13 5h8`,key:`a7qcls`}],[`path`,{d:`M13 12h8`,key:`h98zly`}],[`path`,{d:`M13 19h8`,key:`c3s6r1`}],[`path`,{d:`m3 17 2 2 4-4`,key:`1jhpwq`}],[`path`,{d:`m3 7 2 2 4-4`,key:`1obspn`}]]),wn=F(`list`,[[`path`,{d:`M3 5h.01`,key:`18ugdj`}],[`path`,{d:`M3 12h.01`,key:`nlz23k`}],[`path`,{d:`M3 19h.01`,key:`noohij`}],[`path`,{d:`M8 5h13`,key:`1pao27`}],[`path`,{d:`M8 12h13`,key:`1za7za`}],[`path`,{d:`M8 19h13`,key:`m83p4d`}]]),Tn=F(`loader-circle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]),En=F(`lock-open`,[[`rect`,{width:`18`,height:`11`,x:`3`,y:`11`,rx:`2`,ry:`2`,key:`1w4ew1`}],[`path`,{d:`M7 11V7a5 5 0 0 1 9.9-1`,key:`1mm8w8`}]]),Dn=F(`lock`,[[`rect`,{width:`18`,height:`11`,x:`3`,y:`11`,rx:`2`,ry:`2`,key:`1w4ew1`}],[`path`,{d:`M7 11V7a5 5 0 0 1 10 0v4`,key:`fwvmzm`}]]),On=F(`log-in`,[[`path`,{d:`m10 17 5-5-5-5`,key:`1bsop3`}],[`path`,{d:`M15 12H3`,key:`6jk70r`}],[`path`,{d:`M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4`,key:`u53s6r`}]]),kn=F(`log-out`,[[`path`,{d:`m16 17 5-5-5-5`,key:`1bji2h`}],[`path`,{d:`M21 12H9`,key:`dn1m92`}],[`path`,{d:`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,key:`1uf3rs`}]]),An=F(`mail`,[[`path`,{d:`m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7`,key:`132q7q`}],[`rect`,{x:`2`,y:`4`,width:`20`,height:`16`,rx:`2`,key:`izxlao`}]]),jn=F(`map-pin`,[[`path`,{d:`M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0`,key:`1r0f0z`}],[`circle`,{cx:`12`,cy:`10`,r:`3`,key:`ilqhr7`}]]),Mn=F(`maximize-2`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`m21 3-7 7`,key:`1l2asr`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M9 21H3v-6`,key:`wtvkvv`}]]),Nn=F(`message-circle`,[[`path`,{d:`M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719`,key:`1sd12s`}]]),Pn=F(`message-square-text`,[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}],[`path`,{d:`M7 11h10`,key:`1twpyw`}],[`path`,{d:`M7 15h6`,key:`d9of3u`}],[`path`,{d:`M7 7h8`,key:`af5zfr`}]]),Fn=F(`message-square`,[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}]]),In=F(`minus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}]]),Ln=F(`monitor`,[[`rect`,{width:`20`,height:`14`,x:`2`,y:`3`,rx:`2`,key:`48i651`}],[`line`,{x1:`8`,x2:`16`,y1:`21`,y2:`21`,key:`1svkeh`}],[`line`,{x1:`12`,x2:`12`,y1:`17`,y2:`21`,key:`vw1qmm`}]]),Rn=F(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),zn=F(`mouse-pointer-2`,[[`path`,{d:`M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z`,key:`edeuup`}]]),Bn=F(`mouse-pointer-click`,[[`path`,{d:`M14 4.1 12 6`,key:`ita8i4`}],[`path`,{d:`m5.1 8-2.9-.8`,key:`1go3kf`}],[`path`,{d:`m6 12-1.9 2`,key:`mnht97`}],[`path`,{d:`M7.2 2.2 8 5.1`,key:`1cfko1`}],[`path`,{d:`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`,key:`s0h3yz`}]]),Vn=F(`move-vertical`,[[`path`,{d:`M12 2v20`,key:`t6zp3m`}],[`path`,{d:`m8 18 4 4 4-4`,key:`bh5tu3`}],[`path`,{d:`m8 6 4-4 4 4`,key:`ybng9g`}]]),Hn=F(`navigation`,[[`polygon`,{points:`3 11 22 2 13 21 11 13 3 11`,key:`1ltx0t`}]]),Un=F(`package`,[[`path`,{d:`M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z`,key:`1a0edw`}],[`path`,{d:`M12 22V12`,key:`d0xqtd`}],[`polyline`,{points:`3.29 7 12 12 20.71 7`,key:`ousv84`}],[`path`,{d:`m7.5 4.27 9 5.15`,key:`1c824w`}]]),Wn=F(`palette`,[[`path`,{d:`M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z`,key:`e79jfc`}],[`circle`,{cx:`13.5`,cy:`6.5`,r:`.5`,fill:`currentColor`,key:`1okk4w`}],[`circle`,{cx:`17.5`,cy:`10.5`,r:`.5`,fill:`currentColor`,key:`f64h9f`}],[`circle`,{cx:`6.5`,cy:`12.5`,r:`.5`,fill:`currentColor`,key:`qy21gx`}],[`circle`,{cx:`8.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`fotxhn`}]]),Gn=F(`panel-bottom`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M3 15h18`,key:`5xshup`}]]),Kn=F(`panel-left-close`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}],[`path`,{d:`m16 15-3-3 3-3`,key:`14y99z`}]]),qn=F(`panel-left-open`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}],[`path`,{d:`m14 9 3 3-3 3`,key:`8010ee`}]]),Jn=F(`panel-right-close`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M15 3v18`,key:`14nvp0`}],[`path`,{d:`m8 9 3 3-3 3`,key:`12hl5m`}]]),Yn=F(`panel-right-open`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M15 3v18`,key:`14nvp0`}],[`path`,{d:`m10 15-3-3 3-3`,key:`1pgupc`}]]),Xn=F(`panel-top`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M3 9h18`,key:`1pudct`}]]),Zn=F(`panels-top-left`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M3 9h18`,key:`1pudct`}],[`path`,{d:`M9 21V9`,key:`1oto5p`}]]),Qn=F(`pen-line`,[[`path`,{d:`M13 21h8`,key:`1jsn5i`}],[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}]]),$n=F(`pencil-ruler`,[[`path`,{d:`M13 7 8.7 2.7a2.41 2.41 0 0 0-3.4 0L2.7 5.3a2.41 2.41 0 0 0 0 3.4L7 13`,key:`orapub`}],[`path`,{d:`m8 6 2-2`,key:`115y1s`}],[`path`,{d:`m18 16 2-2`,key:`ee94s4`}],[`path`,{d:`m17 11 4.3 4.3c.94.94.94 2.46 0 3.4l-2.6 2.6c-.94.94-2.46.94-3.4 0L11 17`,key:`cfq27r`}],[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}],[`path`,{d:`m15 5 4 4`,key:`1mk7zo`}]]),er=F(`pencil`,[[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}],[`path`,{d:`m15 5 4 4`,key:`1mk7zo`}]]),tr=F(`pilcrow`,[[`path`,{d:`M13 4v16`,key:`8vvj80`}],[`path`,{d:`M17 4v16`,key:`7dpous`}],[`path`,{d:`M19 4H9.5a4.5 4.5 0 0 0 0 9H13`,key:`sh4n9v`}]]),nr=F(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]),rr=F(`puzzle`,[[`path`,{d:`M15.39 4.39a1 1 0 0 0 1.68-.474 2.5 2.5 0 1 1 3.014 3.015 1 1 0 0 0-.474 1.68l1.683 1.682a2.414 2.414 0 0 1 0 3.414L19.61 15.39a1 1 0 0 1-1.68-.474 2.5 2.5 0 1 0-3.014 3.015 1 1 0 0 1 .474 1.68l-1.683 1.682a2.414 2.414 0 0 1-3.414 0L8.61 19.61a1 1 0 0 0-1.68.474 2.5 2.5 0 1 1-3.014-3.015 1 1 0 0 0 .474-1.68l-1.683-1.682a2.414 2.414 0 0 1 0-3.414L4.39 8.61a1 1 0 0 1 1.68.474 2.5 2.5 0 1 0 3.014-3.015 1 1 0 0 1-.474-1.68l1.683-1.682a2.414 2.414 0 0 1 3.414 0z`,key:`w46dr5`}]]),ir=F(`quote`,[[`path`,{d:`M16 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z`,key:`rib7q0`}],[`path`,{d:`M5 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z`,key:`1ymkrd`}]]),ar=F(`redo-2`,[[`path`,{d:`m15 14 5-5-5-5`,key:`12vg1m`}],[`path`,{d:`M20 9H9.5A5.5 5.5 0 0 0 4 14.5A5.5 5.5 0 0 0 9.5 20H13`,key:`6uklza`}]]),or=F(`reply`,[[`path`,{d:`M20 18v-2a4 4 0 0 0-4-4H4`,key:`5vmcpk`}],[`path`,{d:`m9 17-5-5 5-5`,key:`nvlc11`}]]),sr=F(`rotate-ccw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]),cr=F(`scan-search`,[[`path`,{d:`M3 7V5a2 2 0 0 1 2-2h2`,key:`aa7l1z`}],[`path`,{d:`M17 3h2a2 2 0 0 1 2 2v2`,key:`4qcy5o`}],[`path`,{d:`M21 17v2a2 2 0 0 1-2 2h-2`,key:`6vwrx8`}],[`path`,{d:`M7 21H5a2 2 0 0 1-2-2v-2`,key:`ioqczr`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}],[`path`,{d:`m16 16-1.9-1.9`,key:`1dq9hf`}]]),lr=F(`search-x`,[[`path`,{d:`m13.5 8.5-5 5`,key:`1cs55j`}],[`path`,{d:`m8.5 8.5 5 5`,key:`a8mexj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}],[`path`,{d:`m21 21-4.3-4.3`,key:`1qie3q`}]]),ur=F(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]),dr=F(`settings`,[[`path`,{d:`M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915`,key:`1i5ecw`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),fr=F(`shapes`,[[`path`,{d:`M8.3 10a.7.7 0 0 1-.626-1.079L11.4 3a.7.7 0 0 1 1.198-.043L16.3 8.9a.7.7 0 0 1-.572 1.1Z`,key:`1bo67w`}],[`rect`,{x:`3`,y:`14`,width:`7`,height:`7`,rx:`1`,key:`1bkyp8`}],[`circle`,{cx:`17.5`,cy:`17.5`,r:`3.5`,key:`w3z12y`}]]),pr=F(`share-2`,[[`circle`,{cx:`18`,cy:`5`,r:`3`,key:`gq8acd`}],[`circle`,{cx:`6`,cy:`12`,r:`3`,key:`w7nqdw`}],[`circle`,{cx:`18`,cy:`19`,r:`3`,key:`1xt0gg`}],[`line`,{x1:`8.59`,x2:`15.42`,y1:`13.51`,y2:`17.49`,key:`47mynk`}],[`line`,{x1:`15.41`,x2:`8.59`,y1:`6.51`,y2:`10.49`,key:`1n3mei`}]]),mr=F(`shield-check`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),hr=F(`sliders-horizontal`,[[`path`,{d:`M10 5H3`,key:`1qgfaw`}],[`path`,{d:`M12 19H3`,key:`yhmn1j`}],[`path`,{d:`M14 3v4`,key:`1sua03`}],[`path`,{d:`M16 17v4`,key:`1q0r14`}],[`path`,{d:`M21 12h-9`,key:`1o4lsq`}],[`path`,{d:`M21 19h-5`,key:`1rlt1p`}],[`path`,{d:`M21 5h-7`,key:`1oszz2`}],[`path`,{d:`M8 10v4`,key:`tgpxqk`}],[`path`,{d:`M8 12H3`,key:`a7s4jb`}]]),gr=F(`smartphone`,[[`rect`,{width:`14`,height:`20`,x:`5`,y:`2`,rx:`2`,ry:`2`,key:`1yt0o3`}],[`path`,{d:`M12 18h.01`,key:`mhygvu`}]]),_r=F(`sparkles`,[[`path`,{d:`M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z`,key:`1s2grr`}],[`path`,{d:`M20 2v4`,key:`1rf3ol`}],[`path`,{d:`M22 4h-4`,key:`gwowj6`}],[`circle`,{cx:`4`,cy:`20`,r:`2`,key:`6kqj1y`}]]),vr=F(`square-dashed`,[[`path`,{d:`M5 3a2 2 0 0 0-2 2`,key:`y57alp`}],[`path`,{d:`M19 3a2 2 0 0 1 2 2`,key:`18rm91`}],[`path`,{d:`M21 19a2 2 0 0 1-2 2`,key:`1j7049`}],[`path`,{d:`M5 21a2 2 0 0 1-2-2`,key:`sbafld`}],[`path`,{d:`M9 3h1`,key:`1yesri`}],[`path`,{d:`M9 21h1`,key:`15o7lz`}],[`path`,{d:`M14 3h1`,key:`1ec4yj`}],[`path`,{d:`M14 21h1`,key:`v9vybs`}],[`path`,{d:`M3 9v1`,key:`1r0deq`}],[`path`,{d:`M21 9v1`,key:`mxsmne`}],[`path`,{d:`M3 14v1`,key:`vnatye`}],[`path`,{d:`M21 14v1`,key:`169vum`}]]),yr=F(`square-mouse-pointer`,[[`path`,{d:`M12.034 12.681a.498.498 0 0 1 .647-.647l9 3.5a.5.5 0 0 1-.033.943l-3.444 1.068a1 1 0 0 0-.66.66l-1.067 3.443a.5.5 0 0 1-.943.033z`,key:`xwnzip`}],[`path`,{d:`M21 11V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h6`,key:`14rsvq`}]]),br=F(`square-round-corner`,[[`path`,{d:`M21 11a8 8 0 0 0-8-8`,key:`1lxwo5`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,key:`1dv2y5`}]]),xr=F(`square-terminal`,[[`path`,{d:`m7 11 2-2-2-2`,key:`1lz0vl`}],[`path`,{d:`M11 13h4`,key:`1p7l4v`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,ry:`2`,key:`1m3agn`}]]),Sr=F(`square`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}]]),Cr=F(`sticky-note`,[[`path`,{d:`M21 9a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 15 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2z`,key:`1dfntj`}],[`path`,{d:`M15 3v5a1 1 0 0 0 1 1h5`,key:`6s6qgf`}]]),wr=F(`sun-moon`,[[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M14.837 16.385a6 6 0 1 1-7.223-7.222c.624-.147.97.66.715 1.248a4 4 0 0 0 5.26 5.259c.589-.255 1.396.09 1.248.715`,key:`xlf6rm`}],[`path`,{d:`M16 12a4 4 0 0 0-4-4`,key:`6vsxu`}],[`path`,{d:`m19 5-1.256 1.256`,key:`1yg6a6`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}]]),Tr=F(`sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]),Er=F(`swatch-book`,[[`path`,{d:`M11 17a4 4 0 0 1-8 0V5a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2Z`,key:`1ldrpk`}],[`path`,{d:`M16.7 13H19a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2H7`,key:`11i5po`}],[`path`,{d:`M 7 17h.01`,key:`1euzgo`}],[`path`,{d:`m11 8 2.3-2.3a2.4 2.4 0 0 1 3.404.004L18.6 7.6a2.4 2.4 0 0 1 .026 3.434L9.9 19.8`,key:`o2gii7`}]]),Dr=F(`table`,[[`path`,{d:`M12 3v18`,key:`108xh3`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M3 9h18`,key:`1pudct`}],[`path`,{d:`M3 15h18`,key:`5xshup`}]]),Or=F(`tablet`,[[`rect`,{width:`16`,height:`20`,x:`4`,y:`2`,rx:`2`,ry:`2`,key:`76otgf`}],[`line`,{x1:`12`,x2:`12.01`,y1:`18`,y2:`18`,key:`1dp563`}]]),kr=F(`text-cursor-input`,[[`path`,{d:`M12 20h-1a2 2 0 0 1-2-2 2 2 0 0 1-2 2H6`,key:`1528k5`}],[`path`,{d:`M13 8h7a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-7`,key:`13ksps`}],[`path`,{d:`M5 16H4a2 2 0 0 1-2-2v-4a2 2 0 0 1 2-2h1`,key:`1n9rhb`}],[`path`,{d:`M6 4h1a2 2 0 0 1 2 2 2 2 0 0 1 2-2h1`,key:`1mj8rg`}],[`path`,{d:`M9 6v12`,key:`velyjx`}]]),Ar=F(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]),jr=F(`triangle-alert`,[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),Mr=F(`type`,[[`path`,{d:`M12 4v16`,key:`1654pz`}],[`path`,{d:`M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2`,key:`e0r10z`}],[`path`,{d:`M9 20h6`,key:`s66wpe`}]]),Nr=F(`undo-2`,[[`path`,{d:`M9 14 4 9l5-5`,key:`102s5s`}],[`path`,{d:`M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11`,key:`f3b9sd`}]]),Pr=F(`unlink`,[[`path`,{d:`m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71`,key:`yqzxt4`}],[`path`,{d:`m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71`,key:`4qinb0`}],[`line`,{x1:`8`,x2:`8`,y1:`2`,y2:`5`,key:`1041cp`}],[`line`,{x1:`2`,x2:`5`,y1:`8`,y2:`8`,key:`14m1p5`}],[`line`,{x1:`16`,x2:`16`,y1:`19`,y2:`22`,key:`rzdirn`}],[`line`,{x1:`19`,x2:`22`,y1:`16`,y2:`16`,key:`ox905f`}]]),Fr=F(`user-plus`,[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}],[`line`,{x1:`19`,x2:`19`,y1:`8`,y2:`14`,key:`1bvyxn`}],[`line`,{x1:`22`,x2:`16`,y1:`11`,y2:`11`,key:`1shjgl`}]]),Ir=F(`user-round`,[[`circle`,{cx:`12`,cy:`8`,r:`5`,key:`1hypcn`}],[`path`,{d:`M20 21a8 8 0 0 0-16 0`,key:`rfgkzh`}]]),Lr=F(`users`,[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`path`,{d:`M16 3.128a4 4 0 0 1 0 7.744`,key:`16gr8j`}],[`path`,{d:`M22 21v-2a4 4 0 0 0-3-3.87`,key:`kshegd`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}]]),Rr=F(`video`,[[`path`,{d:`m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5`,key:`ftymec`}],[`rect`,{x:`2`,y:`6`,width:`14`,height:`12`,rx:`2`,key:`158x01`}]]),zr=F(`wifi-off`,[[`path`,{d:`M12 20h.01`,key:`zekei9`}],[`path`,{d:`M8.5 16.429a5 5 0 0 1 7 0`,key:`1bycff`}],[`path`,{d:`M5 12.859a10 10 0 0 1 5.17-2.69`,key:`1dl1wf`}],[`path`,{d:`M19 12.859a10 10 0 0 0-2.007-1.523`,key:`4k23kn`}],[`path`,{d:`M2 8.82a15 15 0 0 1 4.177-2.643`,key:`1grhjp`}],[`path`,{d:`M22 8.82a15 15 0 0 0-11.288-3.764`,key:`z3jwby`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),Br=F(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]),Vr=n(),Hr=!0;function Ur(e){Hr=e}function Wr(){if(!Hr)throw Error(`Disconnected from the velloo daemon — edits are paused until it reconnects.`)}var Gr=k([j({type:u(`screen-changed`),screenId:a().min(1)}),j({type:u(`board-changed`),boardId:a().min(1)}),j({type:u(`theme-changed`)}),j({type:u(`snippet-changed`),snippetId:a().min(1)}),j({type:u(`annotations-changed`),screenId:a().min(1)}),j({type:u(`notes-changed`),boardId:a().min(1)}),j({type:u(`comments-changed`),boardId:a().min(1),scope:m([`local`,`shared`])}),j({type:u(`config-changed`)}),j({type:u(`folder-reloaded`)}),j({type:u(`reload-error`),source:a(),message:a()}),j({type:u(`activity`)}).loose()]);function Kr(e){if(typeof e!=`string`)return null;let t;try{t=JSON.parse(e)}catch{return null}let n=Gr.safeParse(t);return n.success?n.data:null}var qr=m([`public`,`private`]);j({appUrl:a().optional(),issuer:a().optional(),clientId:a().optional()}),j({ok:b().optional(),db:j({ok:b().optional()}).optional(),blob:j({ok:b().optional()}).optional()}),j({email:a(),name:a().optional(),tier:a().optional(),creditMicros:O().nullable().optional(),accountId:a().optional()});function Jr(e){return e!==`free`}function Yr(e){return e===void 0||e===`business`||e===`enterprise`}function Xr(e){return Jr(e)}var Zr=j({slug:a(),url:a(),title:a(),teamId:a().nullable(),visibility:qr,passwordProtected:b(),latestVersionId:a().nullable(),lastPublishedAt:a().nullable(),context:j({boardIds:C(a()),selectionFingerprint:a().nullable(),contextKnown:b(),repo:a().nullable(),branch:a().nullable()})});j({effectiveTeamId:a().nullable(),slots:C(Zr)});var Qr=j({type:m([`organization`,`team`,`account`]),id:a(),name:a().optional()});j({slug:a(),visibility:qr.optional(),passwordProtected:b().optional(),audience:C(Qr).optional(),publicComments:b().optional()}),j({visibility:qr,passwordProtected:b(),audience:C(Qr).optional(),publicComments:b().optional()}),j({files:O(),bytes:O(),url:a(),tier:a().optional(),history:j({retained:b(),versions:O(),pruned:O()}).optional()});var $r=j({slug:a(),title:a().nullable(),url:a(),visibility:qr,passwordProtected:b(),canManage:b(),mine:b(),ownerEmail:a().nullable().optional(),ownerName:a().nullable().optional(),teamName:a().nullable().optional(),audience:C(Qr).optional(),publicComments:b().optional(),guestCount:O().optional(),git:j({repo:a().optional(),branch:a().optional()}).nullable().optional(),published:b(),lastPublishedAt:a().nullable()});j({links:C($r).optional()});var ei=j({id:a(),name:a(),isDefault:b().optional(),role:a().optional(),canPublish:b().optional(),canManage:b().optional()});j({teams:C(ei)});var ti=j({id:a(),name:a().nullable(),email:a().optional(),createdAt:a(),lastSeenAt:a().nullable(),linkExpiresAt:a().nullable().optional()});j({guests:C(ti)}),j({guest:ti,delivery:j({sent:b(),reason:a().optional()}),guestUrl:a().optional()}),j({guestUrl:a()}),j({device_code:a(),user_code:a(),verification_uri:a(),verification_uri_complete:a(),expires_in:O(),interval:O()}),j({access_token:a().optional(),error:a().optional(),error_description:a().optional()}),j({token:a(),email:a()});var ni=j({intent:a(),summary:a(),priceMicros:O(),output:m([`image`,`svg`]),aspects:C(a()),defaultAspect:a(),reference:m([`forbidden`,`optional`,`required`])});j({intents:C(ni),maxCount:O().optional()});var ri=j({kind:m([`image`,`svg`]),dataUrl:a()});j({id:a(),intent:a().optional(),chargedMicros:O(),balanceMicros:O(),assets:C(ri).min(1).optional(),kind:m([`image`,`svg`]).optional(),dataUrl:a().optional()}).transform((e,t)=>{let n=e.assets??(e.dataUrl&&e.kind?[{kind:e.kind,dataUrl:e.dataUrl}]:null);return n?{id:e.id,intent:e.intent??``,assets:n,chargedMicros:e.chargedMicros,balanceMicros:e.balanceMicros}:(t.addIssue({code:`custom`,message:`no assets in the generation reply`}),o)}),j({scheme:a(),publicKey:a()}),j({signatures:C(a())});var ii={Unreachable:!0,HttpFailure:!0,LoggedOut:!0,ProtocolViolation:!0,UploadRaceLost:!0,InsecureCloudUrl:!0,InvalidRequest:!0};function ai(e){return typeof e==`string`&&e in ii}var oi=a().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/,`ids are [A-Za-z0-9][A-Za-z0-9_-]{0,63}`),si=k([C(O().int().nonnegative()),a().regex(/^@[a-zA-Z][a-zA-Z0-9_-]*$/)]),ci=j({locator:si}),li=k([j({x:O(),y:O()}),u(`auto`)]);j({id:oi,target:ci,position:li.default(`auto`),body:a(),collapsed:b().optional(),author:m([`user`,`agent`]),cloud:j({commentId:a().min(1),slug:a().min(1),author:a().optional()}).optional()});var ui=j({frameId:oi,screenId:oi,locator:si});j({id:oi,x:O().optional(),y:O().optional(),width:O().positive(),height:O().positive().optional(),body:a(),attachment:ui.optional()}).refine(e=>e.attachment!==void 0||e.x!==void 0&&e.y!==void 0,{message:`A note without an attachment needs x and y`,path:[`x`]});var di=j({prompt:a(),intent:a(),aspect:a().optional(),width:O().int().positive().optional(),height:O().int().positive().optional(),generatedAt:a(),reference:C(a()).optional(),replaces:a().optional()});j({version:u(1),generated:A(a(),di)});function fi(e){if(typeof e!=`string`||e.length===0)return null;let t=e.replace(/^\.?\//,``);if(!t.startsWith(`assets/`))return null;let n=t.split(/[?#]/)[0]??``;return n.length>7?n:null}var pi=j({from:a().min(1),to:a().min(1),label:a().min(1).optional(),state:a().min(1).optional(),labelAt:O().min(0).max(1).optional()}),mi=[`loading`,`empty`,`error`,`success`];function hi(e){if(!e.edges||e.edges.length===0)return[];let t=new Set(e.frames.map(e=>e.id));return e.edges.filter(e=>e.from!==e.to&&t.has(e.from)&&t.has(e.to))}var gi=m([`light`,`dark`]),_i=j({id:oi,screen:a().min(1),x:O(),y:O(),w:O().int().positive(),h:O().int().positive(),label:a().optional(),group:a().optional(),scheme:gi.optional(),fit:u(`content`).optional()});function vi(e,t){return e.scheme??t}var yi=j({id:oi,name:a().min(1),color:a().optional()});j({id:oi,name:a().min(1),theme:a().min(1).optional(),archivedAt:a().datetime().optional(),group:a().min(1).optional(),frames:C(_i).default([]),groups:C(yi).default([]),edges:C(pi).optional()});var bi=k([C(O().int().nonnegative()),a().regex(/^@[a-zA-Z][a-zA-Z0-9_-]*$/)]),xi=j({x:O(),y:O(),w:O().nonnegative(),h:O().nonnegative()}),Si=j({ref:a().min(1).optional(),text:a().max(500).optional(),ancestorIds:C(a().min(1)).max(16).optional()}),Ci=_(`kind`,[j({kind:u(`node`),boardId:oi,frameId:oi,screenId:oi,locator:bi,bounds:xi,fingerprint:Si.optional()}),j({kind:u(`board`),boardId:oi,x:O(),y:O()})]),wi=m([`owner`,`admin`,`member`,`reviewer`,`guest`]),Ti=j({kind:m([`user`,`agent`,`reviewer`]),displayName:a().min(1).max(200).optional(),accountId:a().min(1).max(200).optional(),role:wi.optional(),publisher:b().optional()}),Ei=j({id:s(),author:Ti,body:a().trim().max(4e3),createdAt:D(),deletedAt:D().optional()}).refine(e=>e.deletedAt!==void 0||e.body.length>0,{message:`A comment needs something to say`,path:[`body`]}),Di=_(`kind`,[j({kind:u(`local`)}),j({kind:u(`published`),slug:a().min(1),versionId:a().min(1)})]);j({id:s(),scope:m([`local`,`shared`]),folderId:a().min(1),boardId:oi,anchor:Ci.optional(),origin:Di,status:m([`open`,`resolved`]),messages:C(Ei).min(1),createdAt:D(),updatedAt:D(),resolvedAt:D().optional()});var Oi=m([`boolean`,`number`,`string`,`color`,`enum`,`icon`]),ki=j({name:a().min(1),type:a().min(1),optional:b(),defaultValue:a().optional(),control:Oi,enumValues:C(k([a(),O()])).optional()}).superRefine((e,t)=>{e.control===`enum`&&(!e.enumValues||e.enumValues.length===0)&&t.addIssue({code:`custom`,path:[`enumValues`],message:`prop "${e.name}": control "enum" requires a non-empty \`enumValues\` array`})}),Ai=j({importPath:a().min(1),category:m([`ui`,`typography`]).optional(),description:a().optional(),props:C(ki),origin:m([`agent`,`manual`]).optional(),render:m([`static`,`live`]).optional(),app:a().min(1).optional(),fit:m([`aspect-video`,`content`]).optional()}),ji=j({description:a().optional(),exclude:b().optional(),proxy:a().min(1).optional(),props:C(ki).optional(),states:A(a().min(1),A(a(),l())).optional()});j({components:A(a().min(1),ji)});var Mi=j({enabled:b(),contactOk:b().optional()}),Ni=80;function Pi(e){return e.trim()===``?`a design name can't be empty`:e===e.trim()?e===`.`||e===`..`?`"${e}" can't be a design name`:/[/\\]/.test(e)?`a design name can't contain / or \\`:/\p{Cc}/u.test(e)?`a design name can't contain control characters`:[...e].length>Ni?`a design name can't be longer than ${Ni} characters`:null:`a design name can't start or end with spaces`}var Fi=a().superRefine((e,t)=>{let n=Pi(e);n&&t.addIssue({code:`custom`,message:n})});j({$schema:a().optional(),designs:C(a().min(1)),defaultDesign:Fi.optional(),feedback:Mi.optional()}).refine(e=>new Set(e.designs).size===e.designs.length,{message:`designs lists the same path twice`});var Ii=j({name:a().min(1),w:O().int().positive(),h:O().int().positive()}),Li=j({id:m([`shadcn-upstream`,`none`,`html`,`mui`,`antd`,`chakra`]),version:a().min(1),source:m([`binary`,`cache`,`in-repo`]),componentsPath:a().min(1)}),Ri=j({componentsAlias:a().min(1).optional(),componentsDir:a().min(1).optional()}),zi=a().min(1).refine(e=>!/^(?:[\\/~]|[A-Za-z]:)/.test(e)&&!e.split(/[\\/]/).includes(`..`),{message:"must be relative to the app root, with no absolute path or `..` segment"}),Bi=j({root:a().min(1),aliases:A(a().min(1),a().min(1)).optional(),preview:a().min(1).optional(),stylesheets:C(a().regex(/^(?:\/(?!\/)|https:\/\/)/)).optional(),components:j({include:C(a().min(1)).optional(),exclude:C(a().min(1)).optional()}).optional()}),Vi=j({kind:m([`stylesheet`,`design-md`,`mantine`,`mui`,`library-defaults`,`preset`]),files:C(zi).min(1).optional(),library:a().min(1).optional()}),Hi=j({framework:m([`tailwind`,`none`])});j({schemaVersion:u(4),toolVersion:a().min(1),name:Fi,folderId:a().regex(/^[A-Za-z0-9_-]{8,64}$/).optional(),libraries:A(a().min(1),Li),defaultLibrary:a().min(1),extensions:A(a().min(1),Ai).optional(),viewportPresets:C(Ii).min(1),defaultScreen:a().min(1).optional(),defaultBoard:a().min(1).optional(),boardOrder:C(a().min(1)).optional(),boardGroups:C(yi).optional(),codegen:Ri.optional(),styling:Hi.optional(),hostApp:Bi.optional(),designSystem:j({path:zi}).optional(),themeSource:Vi.optional(),hostApps:A(a().min(1),Bi).optional(),feedback:Mi.optional()}).refine(e=>e.defaultLibrary in e.libraries,{message:"`defaultLibrary` must name an entry in `libraries`."});var Ui=/^[A-Za-z0-9_-]+$/;function Wi(e){return Ui.test(e)}function Gi(e){return e.replace(/\*\//g,``).replace(/[<>{};\\]/g,``).replace(/[\r\n]+/g,` `).trim()}function Ki(e){let t=e.trim();return t===``?t:/[-_\s]/.test(t)?t.split(/[-_\s]+/).filter(e=>e!==``).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``):t.charAt(0).toUpperCase()+t.slice(1)}function qi(e){return typeof e?.$ref==`string`}function Ji(e){return typeof e?.$snippet==`string`}function Yi(e){return typeof e?.$param==`string`}function Xi(e){return typeof e?.$text==`string`}function Zi(e){let t=e?.$type;return!Array.isArray(e)&&typeof t==`object`&&!!t&&typeof t.$ref==`string`}var Qi=a().min(1).max(64).regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/,{message:`node id must match /^[a-zA-Z][a-zA-Z0-9_-]*$/`});function $i(e){return e.flatMap(e=>{if(typeof e!=`string`&&typeof e!=`number`)return[e];let t=String(e);return t===``?[]:[{$text:t}]})}var ea=j({name:a().min(1),importPath:a().min(1)});function ta(e){return/^[\w@./~-]+$/.test(e)?e.startsWith(`/`)?`must not be an absolute path`:e.split(`/`).includes(`..`)?`must not climb out of the host app with ..`:null:`has characters an import specifier can't carry`}var na=j({importPath:a().min(1).superRefine((e,t)=>{let n=ta(e);n&&t.addIssue({code:`custom`,message:`importPath ${n}`})}),exportName:a().regex(/^[A-Za-z_$][\w$]*$/,{message:`exportName must be an identifier or "default"`}),member:a().regex(/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*$/,{message:`member must be a dotted identifier path like "List"`}).optional(),app:a().min(1).optional(),proxy:a().min(1).optional()}),ra=c({$type:c({$ref:a().regex(/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*$/,{message:`a component type's $ref must be a component name like "ScrollArea"`}),$repo:na.optional()})});function ia(e,t,n){if(Array.isArray(e)){e.forEach((e,r)=>{ia(e,t,[...n,r])});return}if(typeof e==`object`&&e){if(Object.hasOwn(e,`$type`)){let r=ra.safeParse(e);if(!r.success)for(let e of r.error.issues)t.addIssue({code:`custom`,message:e.message,path:[...n,...e.path]});return}for(let[r,i]of Object.entries(e))ia(i,t,[...n,r])}}var aa=A(a(),l()).superRefine((e,t)=>{ia(e,t,[])}),oa=g(()=>j({$ref:a().min(1),$id:Qi.optional(),props:aa.optional(),children:C(k([a(),O(),fa])).transform($i).optional(),$emitAs:ea.optional(),$repo:na.optional()}));function sa(e){return qi(e)&&e.$repo!==void 0}function ca(e){let t=e.member?`.${e.member}`:``;return`repo:${encodeURIComponent(e.app??``)}:${e.importPath}#${e.exportName}${t}`}var la=j({$snippet:a().min(1),$id:Qi.optional(),$extraClassName:a().optional(),args:aa.optional(),$overrides:A(a().regex(/^$|^\d+(\.\d+)*$|^@[a-zA-Z][a-zA-Z0-9_-]*$/,{message:`override key must be a dotted index path like "0.2", an "@id" reference with a literal leading @ (e.g. "@row-active" to target the body node whose $id is "row-active"), or "" for the body root`}),j({props:aa})).optional()}),ua=j({$param:a().min(1)}),da=c({$text:a().min(1)}),fa=l().transform((e,t)=>{if(typeof e!=`object`||!e||Array.isArray(e))return t.addIssue({code:`custom`,message:`node must be an object with one of "$ref" (component), "$snippet" (instance), "$param" (param ref), or "$text" (text beside elements)`}),o;let n=e,r=typeof n.$ref==`string`?oa:typeof n.$snippet==`string`?la:typeof n.$param==`string`?ua:typeof n.$text==`string`?da:null;if(!r)return t.addIssue({code:`custom`,message:Zi(n)?`a component type ({"$type": …}) is a prop value, not a node — to render one here, write {"$ref": ${JSON.stringify(n.$type.$ref)}}`:`node needs exactly one of "$ref" (component), "$snippet" (snippet instance), "$param" (param ref, snippet bodies only), or "$text" (text beside elements)`}),o;let i=r.safeParse(e);if(!i.success){for(let e of i.error.issues)t.addIssue({...e});return o}return i.data}).describe(`{"$ref":"Button","$id?":"cta","props?":{...},"children?":[Node]}, or {"$snippet":"<id>","args?":{...}}. Guide: velloo://guide/components`).meta({type:`object`,additionalProperties:!0});function pa(e){if(!(Yi(e)||Xi(e)))return e.$id}var ma=[`velloo:param-tag`,`velloo:static`];function ha(e){return ma.includes(e)}function ga(e){if(typeof e!=`object`||!e||Array.isArray(e))return{kind:`invalid`,value:e};let t=e;return Ji(t)?{kind:`snippet`,node:t}:Yi(t)?{kind:`param`,node:t}:qi(t)?t.$repo===void 0?t.$emitAs===void 0?ha(t.$ref)?{kind:`synthetic`,node:t,ref:t.$ref}:{kind:`named`,node:t,ref:t.$ref}:{kind:`emit-as`,node:t,ref:t.$ref,emitAs:t.$emitAs}:{kind:`repo`,node:t,ref:t.$ref,repo:t.$repo}:Xi(t)?{kind:`text`,node:t,text:t.$text}:{kind:`invalid`,value:e}}function _a(e){return ga(e).kind!==`invalid`}j({id:oi,name:a().min(1),library:a().min(1).optional(),route:a().min(1).optional(),tree:fa});var va=j({name:a().min(1),type:m([`string`,`number`,`boolean`,`node`,`icon`,`color`,`enum`]),default:l().optional(),optional:b().optional(),enum:C(a()).optional(),min:O().optional(),max:O().optional(),step:O().optional(),description:a().optional()}).superRefine((e,t)=>{if(e.type===`enum`){if(!e.enum||e.enum.length===0){t.addIssue({code:`custom`,path:[`enum`],message:`param "${e.name}": type "enum" requires a non-empty \`enum\` array`});return}e.default!==void 0&&!e.enum.includes(e.default)&&t.addIssue({code:`custom`,path:[`default`],message:`param "${e.name}": default ${JSON.stringify(e.default)} is not one of the declared enum values`});return}if(e.default===void 0||e.type===`node`)return;let n=e.type===`number`?`number`:e.type===`boolean`?`boolean`:`string`;typeof e.default!==n&&t.addIssue({code:`custom`,path:[`default`],message:`param "${e.name}": default ${JSON.stringify(e.default)} does not match declared type "${e.type}"`})});j({id:oi,name:a().min(1),params:C(va),library:a().min(1).optional(),tree:fa});function ya(e){let t=new Set,n=new Set,r=(e,t)=>{if(typeof e!=`object`||!e)return;if(Array.isArray(e)){for(let n of e)r(n,t);return}let n=e;typeof n.$param==`string`&&t.add(n.$param);for(let e of Object.values(n))r(e,t)},i=e=>{if(Array.isArray(e)){for(let t of e)i(t);return}if(typeof e!=`object`||!e)return;let n=e;typeof n.$param==`string`?t.add(n.$param):typeof n.$if==`string`?(i(n.then),i(n.else)):a(n)},a=e=>{r(e.props,n),r(e.args,n),i(e.children)};i(e.tree);for(let e of n)t.delete(e);return t}var ba=new Map(`a.circle.clipPath.defs.desc.ellipse.feBlend.feColorMatrix.feComponentTransfer.feComposite.feConvolveMatrix.feDiffuseLighting.feDisplacementMap.feDistantLight.feDropShadow.feFlood.feFuncA.feFuncB.feFuncG.feFuncR.feGaussianBlur.feImage.feMerge.feMergeNode.feMorphology.feOffset.fePointLight.feSpecularLighting.feSpotLight.feTile.feTurbulence.filter.g.image.line.linearGradient.marker.mask.path.pattern.polygon.polyline.radialGradient.rect.stop.style.svg.switch.symbol.text.textPath.title.tspan.use.view`.split(`.`).map(e=>[e.toLowerCase(),e]));new Set(ba.values());var xa=k([O(),a().min(1)]),Sa=g(()=>A(a(),k([a(),O(),Sa]))),Ca=k([a().min(1),j({DEFAULT:a().min(1),foreground:a().min(1).optional()})]),wa=j({background:a().min(1),foreground:a().min(1),primary:Ca,secondary:Ca.optional(),muted:Ca.optional(),accent:Ca.optional(),destructive:Ca.optional(),card:Ca.optional(),popover:Ca.optional(),border:a().min(1).optional(),input:a().min(1).optional(),ring:a().min(1).optional()});function Ta(e,t=!1){if(!t||!e.colorsDark)return e.colors;let n={...e.colors};for(let[t,r]of Object.entries(e.colorsDark))r!==void 0&&(n[t]=r);return n}var Ea=A(a().regex(/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,`palette keys are lowercase kebab-case, letter first — "primary-soft", "success-500", "border-primary-300"`),a().min(1));function Da(e){return[...new Set([...Object.keys(e.palette??{}),...Object.keys(e.paletteDark??{})])].filter(e=>!/(?:^|-)\d+$/.test(e)).sort()}var Oa=j({size:xa.optional(),leading:O().positive().optional(),flow:xa.optional(),fontBody:a().min(1).optional(),fontHeading:a().min(1).optional(),fontMono:a().min(1).optional()}),ka=j({fontFamily:A(a(),a().min(1)).optional(),googleFonts:C(a().min(1)).optional(),typesets:A(a().regex(/^[A-Za-z0-9_-]+$/),Oa).optional()}).strict(),Aa=j({none:xa.optional(),sm:xa.optional(),md:xa.optional(),lg:xa.optional(),xl:xa.optional(),"2xl":xa.optional(),"3xl":xa.optional(),full:xa.optional()}).partial(),ja=j({center:b().optional(),padding:a().min(1).optional(),maxWidth:a().min(1).optional()});j({name:a().min(1),colors:wa,colorsDark:wa.partial().optional(),palette:Ea.optional(),paletteDark:Ea.optional(),typography:ka,spacing:Sa,radius:Aa,shadows:Sa.optional(),container:ja.optional(),keyframes:A(a(),A(a(),A(a(),a()))).optional(),animation:A(a(),a()).optional()});var Ma=48,Na=/^[A-Za-z0-9](?:[A-Za-z0-9 _-]*[A-Za-z0-9])?$/;function Pa(e){return e.trim().replace(/\s+/g,` `)}function Fa(e,t=[]){if(e===``)return`Give the theme a name.`;if(e.length>Ma)return`Keep the name to ${Ma} characters.`;if(!Na.test(e))return`Use letters, digits, spaces, dashes and underscores, starting and ending with a letter or digit.`;let n=e.toLowerCase();if(n==="default")return`Every design already has a "Default" theme.`;for(let e of t)if(e.toLowerCase()===n)return`A theme named "${e}" already exists.`;return null}var Ia={size:`1em`,leading:1.75,flow:`1.25em`},La=`default`;function Ra(e){return Wi(e)}var za={h1:{size:2.5,leading:.63,tracking:`-0.025em`,weight:700,face:`heading`},h2:{size:2,leading:.66,tracking:`-0.025em`,weight:700,face:`heading`},h3:{size:1.5,leading:.71,tracking:`-0.02em`,weight:600,face:`heading`},h4:{size:1.25,leading:.74,tracking:`-0.02em`,weight:600,face:`heading`},h5:{size:1.125,leading:.8,tracking:`-0.015em`,weight:600,face:`heading`},h6:{size:1,leading:.8,tracking:`-0.01em`,weight:600,face:`heading`},body:{size:1,leading:1,tracking:`0em`,weight:400,face:`body`},lead:{size:1.25,leading:.91,tracking:`0em`,weight:400,face:`body`},small:{size:.875,leading:.57,tracking:`0em`,weight:500,face:`body`},caption:{size:.875,leading:.86,tracking:`0em`,weight:400,face:`body`}},Ba=Object.keys(za),Va={1:`h1`,2:`h2`,3:`h3`,4:`h4`,5:`h5`,6:`h6`},Ha={default:`body`,muted:`caption`,small:`small`,lead:`lead`},Ua={400:`font-normal`,500:`font-medium`,600:`font-semibold`,700:`font-bold`};Object.fromEntries(Ba.map(e=>[e,`text-${e} leading-${e} tracking-${e} ${Ua[za[e].weight]}`])),Object.fromEntries(Ba.map(e=>[e,{fontSize:`var(--text-${e})`,lineHeight:`var(--leading-${e})`,letterSpacing:`var(--tracking-${e})`,fontWeight:za[e].weight}]));function Wa(e){let t=Number(e??1);return Number.isFinite(t)&&t>=1&&t<=6?Math.trunc(t):1}function Ga(e){return Math.round(e*1e3)/1e3}function Ka(e){return typeof e==`number`?`${e}px`:Gi(e)}function qa(e,t){return!e||!Wi(e)?t:`var(--font-${e})`}function Ja(e){return{...e,size:e?.size??Ia.size,leading:e?.leading??Ia.leading,flow:e?.flow??Ia.flow}}function Ya(e,t=` `,n=!1){let r=n?e??{}:Ja(e),i=[],a=(e,n)=>i.push(`${t}--typeset-${e}: ${n};`);return r.size!==void 0&&a(`size`,Ka(r.size)),r.leading!==void 0&&a(`leading`,String(Ga(r.leading))),r.flow!==void 0&&a(`flow`,Ka(r.flow)),(!n||r.fontBody!==void 0)&&a(`font-body`,qa(r.fontBody,`inherit`)),(!n||r.fontHeading!==void 0)&&a(`font-heading`,qa(r.fontHeading,`var(--typeset-font-body)`)),(!n||r.fontMono!==void 0)&&a(`font-mono`,qa(r.fontMono,`var(--font-mono, ui-monospace, monospace)`)),i}var Xa=16;function Za(e,t=Xa){if(typeof e==`number`)return e;let n=/^(-?[\d.]+)\s*(px|rem|em|%)?$/.exec(e.trim());if(!n)return t;let r=Number.parseFloat(n[1]);if(!Number.isFinite(r))return t;switch(n[2]){case`px`:case void 0:return r;case`%`:return r/100*t;default:return r*t}}function Qa(e,t={}){let n=Ja(e),r=t.rootPx??Xa,i=Za(n.size,r),a=t.fontFamily??{},o=n.fontHeading?a[n.fontHeading]:void 0,s=n.fontBody?a[n.fontBody]:void 0,c={};for(let e of Ba){let t=za[e],r=t.face===`heading`?o??s:s;c[e]={fontSize:Ga(i*t.size),lineHeight:Ga(n.leading*t.leading),letterSpacing:t.tracking,fontWeight:t.weight,...r?{fontFamily:r}:{}}}return c}j({w:O().int().positive(),h:O().int().positive()});var $a=C(O()),eo=a().regex(/^@[a-zA-Z][a-zA-Z0-9_-]*$/,{message:`id locator must match /^@[a-zA-Z][a-zA-Z0-9_-]*$/`}),to=e=>f(e=>{if(typeof e==`string`){let t=e.trim();if(t.startsWith(`[`)||t.startsWith(`{`))try{return JSON.parse(t)}catch{}}return e},e),no=e=>f(e=>typeof e==`object`&&e&&!Array.isArray(e)?[e]:e,e),ro=to(f(e=>typeof e==`string`&&/^\d+(\.\d+)*$/.test(e)?e.split(`.`).map(Number):e,k([$a,eo]))).describe(`Node address: an "@id" like "@hero-cta", or an index path from the root ([0,2,1])`),io=ro.default([]),ao=a().describe(`Body node: "@id" (preferred — survives restructures), a dotted index path ("0.2"), or "" for the root`),oo=A(a(),l()),so=a().min(1),co=a().min(1),lo=a().min(1),uo=a().min(1),fo=c({x:O().optional(),y:O().optional(),w:O().int().positive().optional(),h:O().int().positive().optional(),label:a().nullable().optional(),group:a().nullable().optional(),scheme:gi.nullable().optional(),fit:u(`content`).nullable().optional()}),po=j({name:a().min(1),importPath:a().min(1)}).describe(`Mark the node a host-component facade: the canvas renders the subtree, emit_code emits <name /> from importPath instead.`),mo=k([j({x:O(),y:O()}),u(`auto`)]),ho={screenId:so,parentPath:io,componentRef:a().min(1),id:Qi.optional(),props:oo.optional(),children:to(k([C(fa),a(),O()])).optional(),index:O().int().nonnegative().optional(),emitAs:po.optional(),repo:na.optional().describe(`Place an app component by identity (importPath + exportName [+ member]) when it isn't in list_components' repo catalog yet`)};c(ho);var go=to(k([a(),oo,h()])).describe(`Native style channel: a className string (Tailwind), an object of properties (sx / style), or null to clear`),_o=j({path:ro,propPatch:oo.optional(),style:go.optional()}).refine(e=>e.propPatch!==void 0||e.style!==void 0,{message:`each patch needs propPatch, style, or both`}),vo=a().max(64).optional().describe(`Opaque id of the drag this write belongs to; merges its undo steps into one`),yo={screenId:so,patches:to(no(C(_o).min(1))).describe(`One entry per node; length 1 for a single edit`),gesture:vo};c(yo);var bo={screenId:so,path:io,classes:a(),gesture:vo};c(bo),c({screenId:so,path:ro});var xo={screenId:so,fromPath:ro,toParent:ro,toIndex:O().int().nonnegative().optional()};c(xo);var So={screenId:so,path:ro,id:Qi.nullable()};c(So);var Co=a().trim().min(1).transform(e=>e.startsWith(`/`)?e:`/${e}`),wo={name:a().min(1),id:a().min(1).optional(),fromScreenId:a().min(1).optional(),tree:fa.optional(),route:Co.optional()};c(wo),c({screenId:so}),c({screenId:so,tree:fa});var To={screenId:so,patch:j({name:a().min(1).optional(),route:Co.nullable().optional()})};c(To);var Eo={name:a().min(1).max(80),id:a().min(1).optional(),group:a().min(1).optional()};c(Eo);var Do={boardId:co,patch:j({name:a().min(1).max(80).optional(),theme:a().min(1).nullable().optional(),archived:b().optional(),group:a().min(1).nullable().optional()})};c(Do),c({boardId:co});var Oo={order:C(a().min(1))};c(Oo);var ko={name:a().min(1),color:a().min(1).optional()};c(ko);var Ao={groupId:a().min(1),patch:j({name:a().min(1).optional(),color:a().min(1).nullable().optional()})};c(Ao);var jo={groupId:a().min(1)};c(jo);var Mo={order:C(a().min(1))};c(Mo);var No={boardId:co,screenId:so,x:O().optional(),y:O().optional(),w:O().int().positive(),h:O().int().positive(),label:a().optional(),group:a().optional(),id:a().min(1).optional()};c(No);var Po=f(e=>{if(typeof e!=`object`||!e||Array.isArray(e)||`patch`in e)return e;let{frameId:t,...n}=e;return Object.keys(n).length>0?{frameId:t,patch:n}:e},j({frameId:lo,patch:fo})),Fo={boardId:co,patches:to(no(C(Po).min(1))).describe(`One entry per frame; length 1 for a single edit`)};c(Fo),c({boardId:co,frameId:lo});var Io={boardId:co,frameId:lo,toBoardId:co,x:O().optional(),y:O().optional()};c(Io);var Lo={from:a(),to:a(),label:a().nullable().optional(),state:a().nullable().optional(),remove:b().optional()},Ro=c(Lo);to(no(C(Ro).min(1))),c({boardId:co,edges:to(no(C(c({...Lo,labelAt:O().min(0).max(1).nullable().optional()})).min(1)))});var zo={name:a().min(1),id:a().min(1).optional(),params:C(va).default([]),tree:fa};c(zo);var Bo={snippetId:uo,patch:j({name:a().min(1).optional(),params:C(va).optional(),tree:fa.optional(),innerPatch:j({innerPath:ao,propPatch:oo}).optional()})};c(Bo),c({snippetId:uo});var Vo={screenId:so,parentPath:io,snippetId:uo,id:Qi.optional(),args:oo.optional(),extraClassName:a().optional().describe(`One-off classes layered onto the snippet body's root, for this instance`),overrides:A(a(),j({props:oo})).optional(),index:O().int().nonnegative().optional()};c(Vo),c({screenId:so,path:ro,innerPath:ao,propPatch:oo});var Ho={screenId:so,path:ro,argPatch:oo.default({}),extraClassName:a().nullable().optional(),gesture:vo};c(Ho);var Uo={screenId:so,path:ro,argPatch:oo.optional(),extraClassName:a().nullable().optional(),innerPath:ao.optional(),propPatch:oo.optional()};c(Uo);var Wo={screenId:so,target:j({locator:ro}),body:a(),position:mo.optional(),collapsed:b().optional()};c(Wo);var Go={screenId:so,annotationId:a().min(1),patch:j({body:a().optional(),position:mo.optional(),collapsed:b().nullable().optional()})};c(Go);var Ko={screenId:so,annotationId:a().min(1)};c(Ko);var qo=j({frameId:lo,screenId:so,locator:ro}),Jo={boardId:co,x:O().optional(),y:O().optional(),width:O().positive().optional(),height:O().positive().optional(),body:a(),attachment:qo.optional()};j(Jo).refine(e=>e.attachment!==void 0||e.x!==void 0&&e.y!==void 0,{message:`A note without an attachment needs x and y`,path:[`x`]});var Yo={boardId:co,noteId:a().min(1),patch:j({x:O().optional(),y:O().optional(),width:O().positive().optional(),height:O().positive().optional(),body:a().optional()})};c(Yo);var Xo={boardId:co,noteId:a().min(1)};c(Xo);var Zo={presets:C(j({name:a().min(1),w:O().int().positive(),h:O().int().positive()}))};c(Zo);var Qo={defaultBoard:a().min(1).nullable().optional(),defaultScreen:a().min(1).nullable().optional()};c(Qo);var $o={componentsAlias:a().nullable().optional()};c($o);var es={name:a()};c(es);var ts={enabled:b().optional(),contactOk:b().optional()};c(ts);var ns=e=>e.kind===`AssetInUse`||ai(e.kind);function rs(e){return e instanceof Error&&e.payload?.kind===`LoggedOut`}var is=e=>e.join(`, `);function as(e){if(ns(e))return e.message;switch(e.kind){case`BadRequest`:return e.message;case`ScreenNotFound`:return`No screen "${e.screenId}".`;case`BoardNotFound`:return`No board "${e.boardId}".`;case`FrameNotFound`:return`No frame "${e.frameId}" on board "${e.boardId}".`;case`BoardGroupNotFound`:return`No board group "${e.groupId}".`;case`SnippetNotFound`:return`No snippet "${e.snippetId}".`;case`IdNotFound`:return`No node with id "${e.id}" on "${e.screenId}".`;case`AnnotationNotFound`:return`No annotation "${e.annotationId}" on "${e.screenId}".`;case`CanvasNoteNotFound`:return`No note "${e.noteId}".`;case`UnknownComponent`:return e.suggestions.length>0?`No component "${e.ref}". Did you mean ${is(e.suggestions)}?`:`No component "${e.ref}".`;case`InvalidPath`:case`InvalidMove`:return e.reason;case`SnippetParamMismatch`:return`Snippet "${e.snippetId}": ${e.reason}`;case`SnippetCycle`:return`Snippet "${e.snippetId}" would contain itself (via ${is(e.viaPath)}).`;case`InvalidExtensionProp`:case`ShadowedComponent`:return e.message;case`LastScreen`:return`A folder needs at least one screen.`;case`ScreenIdConflict`:return`A screen called "${e.screenId}" already exists.`;case`ScreenChangedSinceRead`:return`"${e.screenId}" changed since it was read.`;case`BoardIdConflict`:return`A board called "${e.boardId}" already exists.`;case`SnippetIdConflict`:return`A snippet called "${e.snippetId}" already exists.`;case`FrameIdConflict`:return`Board "${e.boardId}" already has a frame "${e.frameId}".`;case`ScreenIdExhausted`:case`BoardIdExhausted`:return`Ran out of unique ids based on "${e.base}".`;case`IdConflict`:return`"${e.screenId}" already has ${e.paths.length} nodes with id "${e.id}".`;case`AnnotationConflict`:return`That node already has an annotation.`;case`SnippetInUse`:return`Snippet "${e.snippetId}" is still used by ${is([...e.screenIds,...e.snippetIds.map(e=>`snippet ${e}`)])} — remove those first.`;case`ExtensionIdConflict`:case`ExtensionNotFound`:case`ExtensionInUse`:return e.message;case`InvalidColor`:case`InvalidThemePath`:return e.reason;case`UnknownPreset`:return`No preset "${e.presetName}".`;case`BulkTokensInvalid`:return`${e.failed.length} token${e.failed.length===1?``:`s`} rejected: ${is(e.failed.map(e=>`${e.path} (${e.reason})`))}. Nothing was saved.`;default:return`The change could not be applied.`}}function os(e){let t=as(e),n=`hint`in e&&typeof e.hint==`string`?e.hint:void 0;return n?`${t} ${n}`:t}async function ss(e){let t=await e.json().catch(()=>void 0);if(!t||typeof t!=`object`)return;let n=t.error;if(n&&typeof n==`object`&&typeof n.kind==`string`)return n}async function cs(e,t){let n=await ss(e),r=Error(n?os(n):`${t}: ${e.status}`);return n&&(r.payload=n),r}async function ls(e,t,n){Wr();let r=await fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!r.ok)throw await cs(r,n);return await r.json()}async function us(e,t,n){Wr();let r=await fetch(t,{method:e,...n===void 0?{}:{headers:{"Content-Type":`application/json`},body:JSON.stringify(n)}});if(!r.ok)throw await cs(r,t);return await r.json()}function I(e,t){return ls(`/api/mutate/${e}`,t,`mutate/${e}`)}function ds(e,t){return ls(`/api/theme/${e}`,t,`theme/${e}`)}function fs(e,t){return ls(e,t,e)}async function ps(){let e=await fetch(`/api/assets/intents`);return e.ok?(await e.json()).intents??[]:[]}function ms(e){return fs(`/api/assets/delete`,{assetPath:e})}async function hs(){let e=await fetch(`/api/assets`);if(!e.ok)throw Error(`assets: ${e.status}`);return(await e.json()).generated}function gs(e){return fs(`/api/assets/generate`,e)}function _s(e){return e.loggedIn&&e.login.state===`idle`}function vs(e,t){return t.loggedIn&&t.verified===!1&&e?.verified!==!1}var ys={loggedIn:!1,verified:null,login:{state:`idle`}},bs={async status(){let e=await fetch(`/api/auth/status`);return e.ok?await e.json():ys},async login(){return fs(`/api/auth/login`,{})},async cancelLogin(){await fs(`/api/auth/login/cancel`,{})},async logout(){await fs(`/api/auth/logout`,{})}};async function L(e,t){let n=await fetch(e);if(!n.ok)throw await cs(n,t);return await n.json()}function xs(){return L(`/api/design`,`fetchDesign`)}function Ss(e){return L(`/api/screen/${encodeURIComponent(e)}`,`fetchScreen(${e})`)}function Cs(e){return L(`/api/board/${encodeURIComponent(e)}`,`fetchBoard(${e})`)}function ws(e){return L(`/api/snippets/${encodeURIComponent(e)}`,`fetchSnippet(${e})`)}async function Ts(e){return(await L(`/api/annotations/${encodeURIComponent(e)}`,`fetchAnnotations(${e})`)).annotations.map(t=>({...t,screenId:e}))}async function Es(e){return(await L(`/api/notes/${encodeURIComponent(e)}`,`fetchNotes(${e})`)).notes}function Ds(){return L(`/api/components`,`fetchComponents`)}function Os(e){return L(`/api/theme${e&&e!=="default"?`?name=${encodeURIComponent(e)}`:``}`,`fetchTheme`)}function ks(e,t,n,r){let i=r?`&theme=${encodeURIComponent(r)}`:``;return`/api/render/${encodeURIComponent(e)}?w=${t}&h=${n}${i}`}var As=e=>e===`signed-out`||e===`expired`;function js(e){switch(e){case`signed-out`:return`Sign in to velloo cloud to write a cloud comment.`;case`expired`:return`Your velloo-cloud session has ended — sign in again to write a cloud comment.`;case`unpublished`:return`Publish this board to write a cloud comment on it.`;default:return`This canvas cannot write cloud comments.`}}var Ms={async summary(){return(await L(`/api/comments/summary`,`fetchCommentSummary`)).boards},async list(e,t,n=`all`){return(await L(`/api/comments?${new URLSearchParams({boardId:e,status:t,scope:n})}`,`fetchComments`)).threads},cloudAvailability(e){return L(`/api/comments/cloud?${new URLSearchParams({boardId:e})}`,`fetchCloudComments`)},async create(e){return(await us(`POST`,`/api/comments`,e)).thread},async reply(e,t){return(await us(`POST`,`/api/comments/${encodeURIComponent(e)}/messages`,{body:t})).thread},async update(e,t){return(await us(`PATCH`,`/api/comments/${encodeURIComponent(e)}`,t)).thread},delete(e){return us(`DELETE`,`/api/comments/${encodeURIComponent(e)}`)},async deleteMessage(e,t){return(await us(`DELETE`,`/api/comments/${encodeURIComponent(e)}/messages/${encodeURIComponent(t)}`)).thread}};function Ns(){return L(`/api/config`,`fetchConfig`)}var Ps={viewportPresets(e){return I(`update_viewport_presets`,{presets:e})},defaults(e){return I(`update_defaults`,e)},designName(e){return I(`update_design_name`,{name:e})},codegen(e){return I(`update_codegen`,e)},feedback(e){return I(`update_feedback`,e)}};function Fs(e,t,n){return`/api/render/specimen?mode=${e}${n==="default"?``:`&theme=${encodeURIComponent(n)}`}&v=${t}`}var Is={fetch(){return L(`/api/design-language`,`designLanguage`)},saveRules(e){return fs(`/api/design-language/rules`,e)},restore(e){return fs(`/api/design-language/restore`,e)}};async function Ls(e){let t=new URLSearchParams({mode:e.mode});e.scale&&e.scale!==1&&t.set(`scale`,String(e.scale));let n=`/api/export/${e.kind}/${encodeURIComponent(e.id)}.${e.format}?${t}`,r=await fetch(n);if(!r.ok){let e=await r.json().catch(()=>({}));throw Error(e.error??`export failed (${r.status})`)}zs(await r.blob(),Rs(r.headers.get(`content-disposition`),`${e.id}.${e.format}`));let i=r.headers.get(`x-velloo-export-warnings`);if(!i)return[];try{return JSON.parse(decodeURIComponent(i))}catch{return[]}}function Rs(e,t){return(e?/filename="([^"]+)"/.exec(e):null)?.[1]??t}function zs(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,document.body.appendChild(r),r.click(),r.remove(),setTimeout(()=>URL.revokeObjectURL(n),1e4)}async function Bs(e){return(await us(`POST`,`/api/feedback`,e)).message}async function Vs(){let e=await fetch(`/api/undo`);if(!e.ok)throw Error(`fetchHistory: ${e.status}`);return await e.json()}async function Hs(){return Wr(),Ws(await fetch(`/api/undo`,{method:`POST`}),`undo`)}async function Us(){return Wr(),Ws(await fetch(`/api/undo/redo`,{method:`POST`}),`redo`)}async function Ws(e,t){if(e.status===409){let n=await e.json().catch(()=>null);throw Error(n?.message??`Can't ${t}: it has been changed since.`)}if(!e.ok)throw Error(`${t}: ${e.status}`);return await e.json()}var R={addFrame(e){return I(`add_frame`,e)},updateFrame(e){let{boardId:t,frameId:n,patch:r}=e;return I(`update_frame`,{boardId:t,patches:[{frameId:n,patch:r}]})},removeFrame(e){return I(`remove_frame`,e)},moveFrame(e){return I(`move_frame`,e)},connectFrames(e){return I(`connect_frames`,e)},addBoard(e){return I(`add_board`,e)},updateBoard(e){return I(`update_board`,e)},removeBoard(e){return I(`remove_board`,e)},reorderBoards(e){return I(`reorder_boards`,e)},addBoardGroup(e){return I(`add_board_group`,e)},updateBoardGroup(e){return I(`update_board_group`,e)},removeBoardGroup(e){return I(`remove_board_group`,e)},reorderBoardGroups(e){return I(`reorder_board_groups`,e)},updateProps(e){let{screenId:t,path:n,propPatch:r,gesture:i}=e;return I(`update_props`,{screenId:t,patches:[{path:n,propPatch:r}],...i?{gesture:i}:{}})},applyClasses(e){return I(`apply_classes`,e)},setNodeId(e){return I(`set_node_id`,e)},removeNode(e){return I(`remove_node`,e)},updateSnippetArgs(e){return I(`update_snippet_args`,e)}},Gs={add(e){return fs(`/api/notes/add`,e)},update(e){return fs(`/api/notes/update`,e)},remove(e){return fs(`/api/notes/remove`,e)}},Ks=(e,t=``)=>`/api/publish/published/${encodeURIComponent(e)}/guests${t}`,qs={targets(){return L(`/api/publish/targets`,`publishTargets`)},status(){return L(`/api/publish/status`,`publishStatus`)},start(e){return fs(`/api/publish`,e)},async reset(){await fs(`/api/publish/reset`,{})},async published(){return(await L(`/api/publish/published`,`publishedBoards`)).boards},async unpublish(e){await us(`DELETE`,`/api/publish/published/${encodeURIComponent(e)}`)},guests:{async list(e){return(await L(Ks(e),`guests`)).guests},invite(e,t){return fs(Ks(e),t)},resend(e,t){return fs(Ks(e,`/${encodeURIComponent(t)}/resend`),{})},async link(e,t){return(await fs(Ks(e,`/${encodeURIComponent(t)}/link`),{})).guestUrl},async remove(e,t){await us(`DELETE`,Ks(e,`/${encodeURIComponent(t)}`))}}};function Js(e,t){return Ys(`/api/components/status`,t,`fetchLibraryStatus`,e?{library:e}:{})}async function Ys(e,t,n,r={}){return t.length===0?[]:(await L(`${e}?${[`ids=${t.map(encodeURIComponent).join(`,`)}`,...Object.entries(r).map(([e,t])=>`${e}=${encodeURIComponent(t)}`)].join(`&`)}`,n)).diagnostics}function Xs(){return L(`/api/repo/components`,`fetchRepoComponents`)}function Zs(e){return Ys(`/api/repo/status`,e,`fetchRepoStatus`)}function Qs(e,t={}){let n=new URLSearchParams;return n.set(`state`,String(t.state??0)),n.set(`w`,String(t.w??480)),n.set(`h`,String(t.h??200)),t.v!==void 0&&n.set(`v`,String(t.v)),t.dark&&n.set(`mode`,`dark`),`/api/render/repo/${encodeURIComponent(e)}?${n.toString()}`}function $s(e){let{importPath:t,exportName:n}=e.identity;return n==="default"?`import ${e.family} from "${t}";`:`import { ${n} } from "${t}";`}function ec(e){return L(`/api/search?q=${encodeURIComponent(e)}`,`fetchSearch`)}var tc=null;function nc(e){return tc=e,()=>{tc===e&&(tc=null)}}function rc(e={}){tc?.(e)}var ic={setToken(e,t,n){return ds(`set_token`,{path:t,value:n,theme:e})},setTokens(e,t){return ds(`set_tokens`,{entries:t,theme:e})},setRadius(e,t){return ds(`set_radius`,{value:t,theme:e})},setRole(e,t){return ds(`set_role`,{...t,theme:e})},removeRole(e,t){return ds(`set_role`,{name:t,remove:!0,theme:e})},setTypeset(e,t){return ds(`set_typeset`,{typesets:t,theme:e})},setFonts(e,t){return ds(`set_fonts`,{fonts:t,theme:e})},startingPoints(e){return L(`/api/theme/starting-points${e==="default"?``:`?name=${encodeURIComponent(e)}`}`,`startingPoints`)},applyStartingPoint(e,t){return ds(`apply_starting_point`,{id:t,theme:e})},addTheme(e,t){return ds(`add_theme`,{name:e,from:t})},removeTheme(e){return ds(`remove_theme`,{name:e})},deriveFromColor(e,t,n){return ds(`derive_palette_from_color`,{seedColor:t,name:n??(e==="default"?void 0:e)})}};function ac(e={}){return L(e.refresh?`/api/updates/status?refresh=1`:`/api/updates/status`,`fetchUpdateStatus`)}function oc(){return fs(`/api/updates`,{})}function z(e){let t=e.kind??`info`,n=e.ttl??(t===`error`?6e3:3500),r=e.title??e.message,i={description:e.title?e.message:void 0,duration:n,action:e.action},a;return a=t===`success`?y.success(r,i):t===`error`?y.error(r,i):y(r,i),String(a)}function sc(e){e&&y.dismiss(e)}function B(e,t){return rs(e)?(rc(),``):z({kind:`error`,message:(e instanceof Error?e.message:typeof e==`string`?e:t)||t})}var cc=[];function lc(e){return e.authStatus?.loggedIn?e.authStatus.account?.accountId:void 0}function uc(e,t){return e.filter(e=>e.latestVersionId!==null&&e.context.boardIds.includes(t)).sort((e,t)=>dc(t.lastPublishedAt)-dc(e.lastPublishedAt)).at(0)??null}var dc=e=>{let t=e?Date.parse(e):NaN;return Number.isFinite(t)?t:-1/0},fc=3e4,pc=0,mc=null,hc=(e,t)=>({authStatus:null,signInPrompt:null,publishOpen:!1,publishScope:null,publishedBoardsOpen:!1,feedbackOpen:!1,guestsBoard:null,publishSlots:[],async refreshAuth(){let n=await bs.status(),r=vs(t().authStatus,n);e({authStatus:n}),r&&z({kind:`error`,title:`velloo-cloud session ended`,message:`Publishing and cloud comments need you to sign in again.`,ttl:1e4,action:{label:`Sign in`,onClick:()=>t().openSignIn({expired:!0})}})},openSignIn(t={}){e({signInPrompt:t})},closeSignIn(){e({signInPrompt:null})},setPublishOpen(n){t().settlePublish(!1),e({publishOpen:n,publishScope:null})},setPublishedBoardsOpen(t){e({publishedBoardsOpen:t})},setFeedbackOpen(t){e({feedbackOpen:t})},openGuests(t){e({guestsBoard:t})},refreshPublishSlots({force:n=!1}={}){return t().authStatus?.loggedIn?!n&&Date.now()-pc<fc?Promise.resolve():(mc&&!n||(mc=qs.targets().catch(()=>null).then(t=>{pc=Date.now(),mc=null,e({publishSlots:t?.slots??[]})})),mc):(pc=0,e({publishSlots:[]}),Promise.resolve())},publishBoard(n){t().settlePublish(!1),e({publishScope:{id:n.id,name:n.name},publishOpen:!0})},publishAndWait(t){return e({publishScope:{id:t.id,name:t.name},publishOpen:!0}),new Promise(e=>{cc.push(e)})},settlePublish(e){let n=cc;cc=[];for(let t of n)t(e);e&&n.length===0&&t().refreshCloudComments(),e&&t().refreshPublishSlots({force:!0})}}),gc=class{pending=new Set;generation=0;reset(){this.generation+=1,this.pending.clear()}async load(e,t,n,r){let i=[...new Set(e)].filter(e=>!(e in t)&&!this.pending.has(e));if(i.length===0)return;for(let e of i)this.pending.add(e);let a=this.generation;try{let e=await n(i);if(a!==this.generation)return;r(Object.fromEntries(i.map(t=>[t,e.get(t)??null])))}catch{}finally{if(a===this.generation)for(let e of i)this.pending.delete(e)}}};function _c(e,t){return`${e}\u0000${t}`}function vc(e,t){return(t?e?.screens.find(e=>e.id===t):void 0)?.library??e?.defaultLibrary??``}var yc=(e,t)=>{let n=new gc;return{libraryStatus:{},async loadLibraryStatus(r,i){let a=new Map(i.map(e=>[_c(r,e),e]));await n.load([...a.keys()],t().libraryStatus,async e=>{let t=await Js(r,e.map(e=>a.get(e)));return new Map(t.map(e=>[_c(r,e.id),e]))},t=>e(e=>({libraryStatus:{...e.libraryStatus,...t}})))},resetLibraryStatus(){n.reset(),e({libraryStatus:{}})}}},bc=200;function xc(e){if(!e||typeof e!=`object`)return null;let t=e;return typeof t.id!=`number`||typeof t.ts!=`number`||typeof t.verb!=`string`||t.source!==`mcp`&&t.source!==`canvas`&&t.source!==`cli`||!t.target||typeof t.target!=`object`?null:e}var Sc=(e,t)=>({activityEvents:[],activityFeedOpen:!1,lastAgentActivityAt:null,activityFlash:{},frameGlow:{},boardPulse:{},recordActivity(n){if(e(e=>({activityEvents:e.activityEvents.length>=bc?[...e.activityEvents.slice(-199),n]:[...e.activityEvents,n]})),n.source===`canvas`)return;let r=t(),i={...r.activityFlash},a={...r.frameGlow},o={...r.boardPulse},s=r.currentBoardId?r.boards[r.currentBoardId]:null,c=e=>{if(e.screenId&&e.path){let t=i[e.screenId];i[e.screenId]={nonce:(t?.nonce??0)+1,path:e.path.join(`.`)}}else if(e.screenId)for(let t of s?.frames??[])t.screen===e.screenId&&(a[t.id]=(a[t.id]??0)+1);if(e.frameId&&(a[e.frameId]=(a[e.frameId]??0)+1),e.themeName!==void 0||e.token!==void 0)for(let e of s?.frames??[])a[e.id]=(a[e.id]??0)+1;let t=new Set(e.boards??[]);if(e.boardId&&t.add(e.boardId),e.screenId)for(let n of Object.values(r.boards))n.frames.some(t=>t.screen===e.screenId)&&t.add(n.id);for(let e of t)e!==r.currentBoardId&&(o[e]=n.ts)};c(n.target);for(let e of n.ops??[])c(e.target);e({lastAgentActivityAt:Date.now(),activityFlash:i,frameGlow:a,boardPulse:o})},async backfillActivity(){try{let t=await fetch(`/api/activity`);if(!t.ok)return;let n=((await t.json()).events??[]).map(xc).filter(e=>e!==null);e(e=>{let t=new Set(e.activityEvents.map(e=>e.id));return{activityEvents:[...n.filter(e=>!t.has(e.id)),...e.activityEvents].sort((e,t)=>e.id-t.id).slice(-200)}})}catch{}},setActivityFeedOpen(n){e({activityFeedOpen:n}),n&&t().backfillActivity()}});function Cc(e){return e===``?[]:e.split(`.`).map(e=>Number(e))}function wc(e){return e.join(`.`)}function Tc(e,t){return`$id`in e&&e.$id?`@${String(e.$id)}`:Cc(t)}function Ec(e,t){if(!t)return null;let n=e[t.screenId];if(!n)return null;let r=Cc(t.path),i=n.tree;for(let e of r){if(!i||!(`$ref`in i))return null;let t=i.children;if(!t||e<0||e>=t.length)return null;i=t[e]}return i??null}var Dc=(e,t)=>({selection:null,hover:null,reveal:null,selectionIntent:`inspect`,snippetFocus:null,selectionComputed:null,selectionAnchor:null,setSelectionComputed(n,r){t().selection?.path===n&&e({selectionComputed:r})},setSnippetFocus(n){t().snippetFocus!==n&&(e({snippetFocus:n,...t().selection?.screenId.startsWith(`snippet:`)===!0?{selection:null,hover:null}:{}}),n!==null&&(e({selection:null,hover:null}),ws(n).then(e=>{t().snippetFocus===n&&(t().setSyntheticScreen(`snippet:${n}`,{id:`snippet:${n}`,name:e.name,tree:e.tree,...e.library?{library:e.library}:{}}),t().setSelection({screenId:`snippet:${n}`,path:``}))}).catch(()=>e({snippetFocus:null}))))},setSelection(n){t().reveal&&e({reveal:null});let r=t().selection;r===n||r!==null&&n!==null&&r.screenId===n.screenId&&r.path===n.path?n&&t().selectionIntent!==`inspect`&&e({selectionIntent:`inspect`}):e({selection:n,selectionIntent:`inspect`,selectionComputed:null,selectionAnchor:null}),n&&n.screenId!==t().currentScreenId&&!n.screenId.startsWith(`snippet:`)&&t().selectScreen(n.screenId)},revealSelection(n,r={}){let i=(t().reveal?.nonce??0)+1;t().setSelection(n),e({reveal:{...n,nonce:i},selectionIntent:r.preserveTab?`preserve-tab`:`inspect`})},setSelectionAnchor(n){let r=t().selectionAnchor;r===n||r!==null&&n!==null&&r.frameId===n.frameId&&r.instance===n.instance||e({selectionAnchor:n})},setHover(n){let r=t().hover;r!==n&&(r&&n&&r.screenId===n.screenId&&r.path===n.path||e({hover:n}))}});function Oc(e){let t=e().editingMarkupId;t&&(e().annotations.some(e=>e.id===t)||e().notes.some(e=>e.id===t)||e().setEditingMarkupId(null))}var kc=`draft:`,Ac=240;function jc(e){return e.startsWith(kc)}var Mc=(e,t)=>({annotations:[],notes:[],markupVisible:!0,editingMarkupId:null,async refreshAnnotations(){let n=t().currentBoardId,r=n?t().boards[n]:null,i=r?[...new Set(r.frames.map(e=>e.screen))]:t().currentScreenId?[t().currentScreenId]:[];if(i.length===0){e({annotations:[]});return}try{e({annotations:(await Promise.all(i.map(e=>Ts(e)))).flat()}),Oc(t)}catch{}},async refreshNotes(){let n=t().currentBoardId;if(n)try{let r=await Es(n);e(e=>({notes:[...r,...e.notes.filter(e=>jc(e.id))]})),Oc(t)}catch{}},createNote(n){if(!t().currentBoardId)return;t().setCursorMode(`select`);let r=`${kc}${Math.random().toString(36).slice(2,10)}`,i=`attachment`in n?{id:r,width:Ac,body:``,attachment:n.attachment,resolved:n.resolved??null}:{id:r,x:n.x,y:n.y,width:n.width??Ac,...n.height!==void 0&&{height:n.height},body:``};e(e=>({notes:[...e.notes,i]})),t().setMarkupVisible(!0),t().setEditingMarkupId(r)},noteOnSelection(){let e=t(),n=e.selection,r=e.currentBoardId;if(!n||!r||n.screenId.startsWith(`snippet:`))return!1;let i=Ec(e.screens,n);if(!i)return!1;let a=e.boards[r]?.frames??[],o=a.find(t=>t.screen===n.screenId&&e.nodeRects[t.id]?.[n.path])??a.find(e=>e.screen===n.screenId);return o?(t().createNote({attachment:{frameId:o.id,screenId:n.screenId,locator:Tc(i,n.path)},resolved:n.path===``?[]:n.path.split(`.`).map(Number)}),!0):!1},async saveDraftNote(n,r){let i=t().currentBoardId,a=t().notes.find(e=>e.id===n);if(!i||!a)return;let o={...a,...r};try{let{note:t}=await Gs.add({boardId:i,body:o.body,width:o.width,...o.height!==void 0&&{height:o.height},...o.attachment?{attachment:o.attachment}:{x:o.x??0,y:o.y??0}});e(e=>({notes:e.notes.some(e=>e.id===t.id)?e.notes.filter(e=>e.id!==n):e.notes.map(e=>e.id===n?{...t,resolved:a.resolved}:e)}))}catch(e){B(e,`Could not add note`)}},updateDraftNote(t,n){e(e=>({notes:e.notes.map(e=>e.id===t?{...e,...n}:e)}))},discardDraftNote(n){e(e=>({notes:e.notes.filter(e=>e.id!==n)})),Oc(t)},setMarkupVisible(n){n||t().setEditingMarkupId(null),e({markupVisible:n})},setEditingMarkupId(n){let r=t().editingMarkupId;r!==n&&(e({editingMarkupId:n}),n&&!r?t().zoomForMarkupEdit():!n&&r&&t().restoreViewAfterMarkupEdit())}}),Nc=.1,Pc=1.05;function Fc(e){return e>0?1/Pc:Pc}function Ic(e,t=60){if(e.length===0)return null;let n=1/0,r=1/0,i=-1/0,a=-1/0;for(let o of e)o.x<n&&(n=o.x),o.y<r&&(r=o.y),o.x+o.w>i&&(i=o.x+o.w),o.y+o.h+t>a&&(a=o.y+o.h+t);return{minX:n,minY:r,maxX:i,maxY:a}}function Lc(e,t,n,r=80){let i=Ic(e);if(!i||t<50||n<50)return null;let a=Math.max(1,i.maxX-i.minX),o=Math.max(1,i.maxY-i.minY),s=(i.minX+i.maxX)/2,c=(i.minY+i.maxY)/2,l=(t-r*2)/a,u=(n-r*2)/o,d=Math.max(Nc,Math.min(1,Math.min(l,u)));return{zoom:d,pan:{x:Math.round(t/2-s*d),y:Math.round(n/2-c*d)}}}function Rc(e,t,n,r=120,i=1){if(t<50||n<50)return null;let a=(t-r*2)/Math.max(1,e.w),o=(n-r*2)/Math.max(1,e.h),s=Math.max(Nc,Math.min(i,a,o)),c=e.x+e.w/2,l=e.y+e.h/2;return{zoom:s,pan:{x:Math.round(t/2-c*s),y:Math.round(n/2-l*s)}}}function zc(e,t,n,r,i=48){if(n<50||r<50)return null;let a=Math.max(1,n-i*2-t.gap-t.w),o=Math.max(Nc,Math.min(1,a/Math.max(1,e.w),(r-i*2)/Math.max(1,e.h))),s=e.w*o+t.gap+t.w,c=Math.max(e.h*o,t.gap+t.h);return{zoom:o,pan:{x:Math.round((n-s)/2-e.x*o),y:Math.round((r-c)/2-e.y*o)}}}function Bc(e,t,n){let r=Math.max(0,e.w-n.w),i=Math.max(0,e.h-n.h);return{x:e.x+t.x+Math.max(0,Math.min(n.x,r)),y:e.y+t.y+Math.max(0,Math.min(n.y,i)),w:n.w,h:n.h}}function Vc(e,t,n,r=80,i=60){if(t<50||n<50)return null;let a=e.h+i,o=(t-r*2)/e.w,s=(n-r*2)/a,c=Math.max(Nc,Math.min(1,o,s)),l=e.x+e.w/2,u=e.y+a/2;return{zoom:c,pan:{x:Math.round(t/2-l*c),y:Math.round(n/2-u*c)}}}function Hc(e,t,n,r){let i=Math.max(Nc,Math.min(4,r.zoom*n));if(i===r.zoom)return r;let a=(e-r.pan.x)/r.zoom,o=(t-r.pan.y)/r.zoom;return{zoom:i,pan:{x:Math.round(e-a*i),y:Math.round(t-o*i)}}}var Uc=`velloo:lastBoard`,Wc=`velloo:boardView:`;function Gc(){if(typeof localStorage>`u`)return null;try{return localStorage.getItem(Uc)||null}catch{return null}}function Kc(e){if(!(typeof localStorage>`u`))try{localStorage.setItem(Uc,e)}catch{}}function qc(e){if(typeof localStorage>`u`)return null;try{let t=localStorage.getItem(Wc+e);if(!t)return null;let n=JSON.parse(t),r=typeof n.zoom==`number`&&Number.isFinite(n.zoom)?n.zoom:null,i=n.pan&&typeof n.pan.x==`number`&&Number.isFinite(n.pan.x)?n.pan.x:null,a=n.pan&&typeof n.pan.y==`number`&&Number.isFinite(n.pan.y)?n.pan.y:null;return r===null||i===null||a===null?null:{pan:{x:i,y:a},zoom:r}}catch{return null}}function Jc(e,t){if(!(typeof localStorage>`u`))try{localStorage.setItem(Wc+e,JSON.stringify(t))}catch{}}function Yc(){if(!(typeof localStorage>`u`))try{localStorage.removeItem(Uc);let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n?.startsWith(Wc)&&e.push(n)}for(let t of e)localStorage.removeItem(t)}catch{}}var Xc={min:240,max:560,default:320};function Zc(e){return Number.isNaN(e)?Xc.default:Math.min(Xc.max,Math.max(Xc.min,Math.round(e)))}var Qc=`velloo:appTheme`;function $c(){if(typeof localStorage>`u`)return`system`;let e=localStorage.getItem(Qc);return e===`light`||e===`dark`||e===`system`?e:`system`}var el=`velloo:designMode`,tl=`velloo:rememberDesignMode`;function nl(e,t){if(typeof localStorage>`u`)return t;let n=localStorage.getItem(e);return n===null?t:n===`true`}function rl(){return typeof localStorage>`u`||!nl(tl,!0)?`light`:localStorage.getItem(el)===`dark`?`dark`:`light`}var il=`velloo:leftPanels`,al=`velloo:panes`,ol=`velloo:paneWidths`,sl=`velloo:rememberPanels`,cl=480;function ll(e,t,n){return e-t-n>=cl}var ul=null;function dl(e,t,n){let r=e.panesExclusive&&!n;return r&&(ul=t===`left`?`right`:`left`),t===`left`?{leftPaneCollapsed:n,rightPaneCollapsed:r||e.rightPaneCollapsed}:{leftPaneCollapsed:r||e.leftPaneCollapsed,rightPaneCollapsed:n}}function fl(e,t){return dl(e,t,!1)}function pl(e,t){let n=Object.fromEntries(t.map(e=>[e,!1]));if(typeof localStorage>`u`||!nl(sl,!0))return n;try{let r=localStorage.getItem(e);if(!r)return n;let i=JSON.parse(r);for(let e of t)n[e]=i[e]===!0;return n}catch{return n}}function ml(e,t){typeof localStorage<`u`&&nl(sl,!0)&&localStorage.setItem(e,JSON.stringify(t))}function hl(e,t){ml(al,{...pl(al,[`left`,`right`]),[e]:t})}function gl(){let e={left:Xc.default,right:Xc.default};if(typeof localStorage>`u`||!nl(sl,!0))return e;try{let t=localStorage.getItem(ol);if(!t)return e;let n=JSON.parse(t);return{left:typeof n.left==`number`?Zc(n.left):e.left,right:typeof n.right==`number`?Zc(n.right):e.right}}catch{return e}}function _l(e,t){typeof localStorage<`u`&&nl(sl,!0)&&localStorage.setItem(ol,JSON.stringify({left:e,right:t}))}function vl(){let e=pl(il,[`boards`,`tree`]),t=pl(al,[`left`,`right`]),n=gl();return{appTheme:$c(),designMode:rl(),rememberDesignMode:nl(tl,!0),rememberPanels:nl(sl,!0),boardsCollapsed:e.boards,treeCollapsed:e.tree,leftPaneCollapsed:t.left,rightPaneCollapsed:t.right,leftPaneWidth:n.left,rightPaneWidth:n.right}}var yl=[Qc,el,tl,il,al,ol,sl],bl=(e,t)=>({...vl(),panesExclusive:!1,settingsScope:null,searchOpen:!1,exportTarget:null,previewTarget:null,setAppTheme(t){e({appTheme:t}),typeof localStorage<`u`&&localStorage.setItem(Qc,t)},setDesignMode(t){e({designMode:t}),typeof localStorage<`u`&&nl(tl,!0)&&localStorage.setItem(el,t)},setRememberDesignMode(n){e({rememberDesignMode:n}),!(typeof localStorage>`u`)&&(localStorage.setItem(tl,String(n)),n?localStorage.setItem(el,t().designMode):localStorage.removeItem(el))},setRememberPanels(n){if(e({rememberPanels:n}),!(typeof localStorage>`u`)){if(localStorage.setItem(sl,String(n)),n){let e=t();ml(il,{boards:e.boardsCollapsed,tree:e.treeCollapsed}),ml(al,{left:e.leftPaneCollapsed,right:e.rightPaneCollapsed}),_l(e.leftPaneWidth,e.rightPaneWidth)}else localStorage.removeItem(il),localStorage.removeItem(al),localStorage.removeItem(ol)}},setSettingsScope(t){e({settingsScope:t})},resetCanvasPrefs(){if(typeof localStorage<`u`)for(let e of yl)localStorage.removeItem(e);Yc();let n=t().panesExclusive;ul=n?`right`:null,e({appTheme:`system`,designMode:`light`,rememberDesignMode:!0,rememberPanels:!0,boardsCollapsed:!1,treeCollapsed:!1,leftPaneCollapsed:!1,rightPaneCollapsed:n,leftPaneWidth:Xc.default,rightPaneWidth:Xc.default})},toggleBoardsCollapsed(){e(e=>{let t=!e.boardsCollapsed;return ml(il,{boards:t,tree:e.treeCollapsed}),{boardsCollapsed:t}})},setSearchOpen(t){e({searchOpen:t})},setExportTarget(t){e({exportTarget:t})},setPreviewTarget(t){e({previewTarget:t})},toggleTreeCollapsed(){e(e=>{let t=!e.treeCollapsed;return ml(il,{boards:e.boardsCollapsed,tree:t}),{treeCollapsed:t}})},setLeftPaneCollapsed(t){hl(`left`,t),e(e=>dl(e,`left`,t))},setRightPaneCollapsed(t){hl(`right`,t),e(e=>dl(e,`right`,t))},setLeftPaneWidth(t){e(e=>{let n=Zc(t);return _l(n,e.rightPaneWidth),{leftPaneWidth:n}})},setRightPaneWidth(t){e(e=>{let n=Zc(t);return _l(e.leftPaneWidth,n),{rightPaneWidth:n}})},syncPaneLayout(n){let r=t(),i=!ll(n,r.leftPaneWidth,r.rightPaneWidth);if(i===r.panesExclusive)return;if(i){let t=!r.leftPaneCollapsed&&!r.rightPaneCollapsed;ul=t?`right`:null,e({panesExclusive:!0,...t&&{rightPaneCollapsed:!0}});return}let a=ul;ul=null;let o=a===`left`?r.rightPaneCollapsed:r.leftPaneCollapsed;if(!a||o){e({panesExclusive:!1});return}e(a===`left`?{panesExclusive:!1,leftPaneCollapsed:!1}:{panesExclusive:!1,rightPaneCollapsed:!1})}});function xl(e,t){return{...e.commentStatus===`resolved`&&{commentStatus:`open`},...e.commentScope!==`all`&&e.commentScope!==t.scope&&{commentScope:`all`}}}function Sl(e,t){return Array.isArray(e)&&Array.isArray(t)?e.length===t.length&&e.every((e,n)=>e===t[n]):e===t}function Cl(e){let t=`$ref`in e?e.$ref:`$snippet`in e?e.$snippet:void 0,n=`props`in e?e.props?.children:void 0,r=typeof n==`string`?n.trim().replace(/\s+/g,` `).slice(0,500):void 0;if(t||r)return{...t&&{ref:t},...r&&{text:r}}}function wl(e,t){return e.findIndex(e=>e.id===t.id)<0?[t,...e]:e.map(e=>e.id===t.id?t:e)}var Tl=null,El=!1,Dl=`This board wasn't published, so a cloud comment has nowhere to live yet. Publish it, or keep the comment local.`;async function Ol(e,t){let n=e().cloudComments;if(!n||n.available)return null;if(n.reason!==`unpublished`)return js(n.reason);let r=e().boards[t];return!r||!await e().publishAndWait({id:r.id,name:r.name})?Dl:(await e().refreshCloudComments(),e().cloudComments?.available?null:Dl)}var kl=(e,t)=>({commentThreads:[],commentStatus:`open`,commentScope:`all`,cloudComments:void 0,activeCommentId:null,pendingCommentAnchor:null,boardCommentCounts:{},refreshCommentCounts(){return Tl?(El=!0,Tl):(Tl=(async()=>{do{El=!1;try{e({boardCommentCounts:await Ms.summary()})}catch{}}while(El)})().finally(()=>{Tl=null}),Tl)},async refreshComments(){let n=t().currentBoardId;if(!n){e({commentThreads:[],activeCommentId:null});return}try{let r=await Ms.list(n,t().commentStatus,t().commentScope);e(e=>{let t=r.some(t=>t.id===e.activeCommentId);return{commentThreads:r,activeCommentId:t?e.activeCommentId:null,...!t&&e.activeCommentId?{selection:null,reveal:null,rightTab:`comments`}:{}}})}catch(e){B(e,`Could not load comments`)}},async refreshCloudComments(){let n=t().currentBoardId;if(!n){e({cloudComments:{available:!1,reason:`unsupported`}});return}e({cloudComments:void 0});try{let r=await Ms.cloudAvailability(n);t().currentBoardId===n&&e({cloudComments:r})}catch{e({cloudComments:{available:!1,reason:`unsupported`}})}},setCommentStatus(n){e({commentStatus:n}),t().refreshComments()},setCommentScope(n){e({commentScope:n}),t().refreshComments()},setActiveComment(n){if(n===null){e({activeCommentId:null,pendingCommentAnchor:null,selection:null,reveal:null,rightTab:`comments`});return}e(e=>({activeCommentId:n,pendingCommentAnchor:null,rightTab:`comments`,...fl(e,`right`),markupVisible:!0})),t().locateComment(n)},locateComment(e){let n=t().commentThreads.find(t=>t.id===e);if(!n?.anchor)return;let r=n.anchor;if(r.kind===`board`){t().flyToBoardRect({x:r.x-7,y:r.y-7,w:14,h:14});return}if(n.anchorState.status===`attached`){t().locateNode(r.screenId,n.anchorState.resolvedPath.join(`.`),{frameId:r.frameId,preserveTab:!0});return}let i=t().boards[n.boardId]?.frames.find(e=>e.id===r.frameId);if(!i)return;let a=t().frameInsets[i.id]??{x:0,y:0,chromeH:0};t().flyToBoardRect(Bc(i,a,r.bounds))},enterCommentMode(){t().commentOnSelection()||e({cursorMode:`comment`,hover:null,pendingCommentAnchor:null,activeCommentId:null,rightTab:`comments`,markupVisible:!0})},commentOnSelection(){let e=t(),n=e.selection,r=e.currentBoardId;if(!n||!r||n.screenId.startsWith(`snippet:`))return!1;let i=Ec(e.screens,n);if(!i)return!1;let a=(e.boards[r]?.frames??[]).find(t=>t.screen===n.screenId&&e.nodeRects[t.id]?.[n.path]),o=a?e.nodeRects[a.id]?.[n.path]:void 0;if(!a||!o)return!1;let s=Tc(i,n.path),c=e.pendingCommentAnchor;if(c?.kind===`node`&&c.frameId===a.id&&Sl(c.locator,s))return!0;let l=Cl(i);return t().beginComment({kind:`node`,boardId:r,frameId:a.id,screenId:n.screenId,locator:s,bounds:o,...l&&{fingerprint:l}}),!0},beginComment(t){e({pendingCommentAnchor:t,activeCommentId:null,cursorMode:`select`,rightTab:`comments`,markupVisible:!0})},clearPendingComment(){e({pendingCommentAnchor:null})},async createPendingComment(n,r=`local`){let i=t().currentBoardId,a=t().pendingCommentAnchor;if(!i||!a||!n.trim())return`There is nothing to post.`;if(r===`shared`){let e=await Ol(t,i);if(e)return e;if(t().pendingCommentAnchor!==a)return null}try{let o=await Ms.create({boardId:i,body:n,anchor:a,scope:r}),s=xl(t(),o);return e(e=>({commentThreads:wl(e.commentThreads,o),activeCommentId:o.id,pendingCommentAnchor:null,rightTab:`comments`,...fl(e,`right`),...s})),Object.keys(s).length>0&&t().refreshComments(),null}catch(e){return B(e,`Could not create comment`),`The daemon refused the comment. Its message has the details.`}},async createBoardComment(n,r=`local`){let i=t().currentBoardId;if(!i||!n.trim())return`There is nothing to post.`;if(r===`shared`){let e=await Ol(t,i);if(e)return e}try{let a=await Ms.create({boardId:i,body:n,scope:r}),o=xl(t(),a);return e(e=>({commentThreads:wl(e.commentThreads,a),activeCommentId:a.id,pendingCommentAnchor:null,rightTab:`comments`,...o})),Object.keys(o).length>0&&t().refreshComments(),null}catch(e){return B(e,`Could not create comment`),`The daemon refused the comment. Its message has the details.`}},async replyToComment(t,n){if(n.trim())try{let r=await Ms.reply(t,n);e(e=>({commentThreads:wl(e.commentThreads,r)}))}catch(e){B(e,`Could not reply`)}},async deleteCommentMessage(n,r){let i=t().commentThreads.find(e=>e.id===n);if(i?.scope===`local`&&i.messages.length===1){await t().deleteComment(n);return}try{let t=await Ms.deleteMessage(n,r);e(e=>({commentThreads:wl(e.commentThreads,t)}))}catch(e){B(e,`Could not delete comment`)}},async setCommentResolved(n,r){try{let i=await Ms.update(n,{resolved:r});t().commentStatus===`all`||t().commentStatus===i.status?e(e=>({commentThreads:wl(e.commentThreads,i)})):e(e=>({commentThreads:e.commentThreads.filter(e=>e.id!==n),activeCommentId:e.activeCommentId===n?null:e.activeCommentId,...e.activeCommentId===n?{selection:null,reveal:null,rightTab:`comments`}:{}}))}catch(e){B(e,r?`Could not resolve comment`:`Could not reopen comment`)}},async moveCommentToCloud(n){let r=t().commentThreads.find(e=>e.id===n);if(!r)return;let i=await Ol(t,r.boardId);if(i){z({kind:`error`,title:`The thread is still local`,message:i});return}try{let t=await Ms.update(n,{scope:`shared`});e(e=>{let r=e.commentThreads.filter(e=>e.id!==n),i=e.commentScope!==`local`;return{commentThreads:i?wl(r,t):r,activeCommentId:i?t.id:null,...i?{}:{selection:null,reveal:null,rightTab:`comments`}}})}catch(e){B(e,`Could not move the comment to the cloud`)}},async deleteComment(t){try{await Ms.delete(t),e(e=>({commentThreads:e.commentThreads.filter(e=>e.id!==t),activeCommentId:e.activeCommentId===t?null:e.activeCommentId,...e.activeCommentId===t?{selection:null,reveal:null,rightTab:`comments`}:{}}))}catch(e){B(e,`Could not delete comment`)}}});function Al(e){if(e.view===`language`)return e.languageTheme;let t=e.currentBoardId;return(t?e.boards[t]?.theme:void 0)??`default`}var jl=0,Ml=(e,t)=>({design:null,folderConfig:null,screens:{},boards:{},currentBoardId:null,currentScreenId:null,screenVersion:0,screenVersions:{},renderErrors:{},components:null,componentsLoading:!1,generatedAssets:{},styleChannel:null,channelsByLibrary:{},theme:null,themeName:`default`,themeVersion:0,typesetDraft:null,fontDraft:null,history:{undo:0,redo:0},wsConnected:!1,wsEverConnected:!1,bootError:null,async refreshHistory(){try{e({history:await Vs()})}catch{}},async loadDesign(n){let r;try{r=await xs()}catch(t){e({bootError:t instanceof Error?t.message:String(t)});return}e({design:r,bootError:null}),t().refreshCommentCounts();let i=e=>e&&r.boards.some(t=>t.id===e)?e:null,a=i(n?.boardId)??t().currentBoardId??i(r.defaultBoard)??i(Gc())??r.boards[0]?.id??null;a&&await t().selectBoard(a);let o=n?.screenId&&r.screens.some(e=>e.id===n.screenId)?n.screenId:null;if(o&&o!==t().currentScreenId&&await t().selectScreen(o),!t().currentScreenId){let e=(r.defaultScreen&&r.screens.some(e=>e.id===r.defaultScreen)?r.defaultScreen:null)??r.screens[0]?.id??null;e&&await t().selectScreen(e)}await t().loadTheme(),await t().refreshHistory()},async refreshDesignSummary(){e({design:await xs()})},async loadFolderConfig(){e({folderConfig:await Ns()})},async setBoardArchived(n,r){if(await R.updateBoard({boardId:n,patch:{archived:r}}),await t().refreshDesignSummary(),!r||t().currentBoardId!==n)return;let i=t().design?.boards[0]?.id??null;i?await t().selectBoard(i):(e({currentBoardId:null,currentScreenId:null,annotations:[],notes:[],commentThreads:[]}),t().setEditingMarkupId(null))},reorderBoardsLocal(t){e(e=>{if(!e.design)return e;let n=new Map(e.design.boards.map(e=>[e.id,e])),r=[];for(let e of t){let t=n.get(e);t&&(r.push(t),n.delete(e))}for(let t of e.design.boards)n.has(t.id)&&r.push(t);return{design:{...e.design,boards:r}}})},async loadComponents(){if(t().loadRepoCatalog(),!(t().components||t().componentsLoading)){e({componentsLoading:!0});try{let{manifest:t,styleChannel:n,channelsByLibrary:r}=await Ds();e({components:t,styleChannel:n,channelsByLibrary:r})}finally{e({componentsLoading:!1})}}},async loadGeneratedAssets(){try{e({generatedAssets:await hs()})}catch{e({generatedAssets:{}})}},async loadTheme(){let n=Al(t()),r=++jl,i=await Os(n);r===jl&&e({theme:i,themeName:n,themeVersion:t().themeVersion+1})},async refreshTheme(){let n=Al(t());e({theme:await Os(n),themeName:n,typesetDraft:null,fontDraft:null,themeVersion:t().themeVersion+1})},async syncThemeToBoard(){t().theme&&t().themeName!==Al(t())&&await t().loadTheme()},setTypesetDraft(t){e({typesetDraft:t})},setFontDraft(t){e({fontDraft:t})},async loadScreen(t){try{let n=await Ss(t);return e(e=>({screens:{...e.screens,[t]:n},screenVersion:e.screenVersion+1,screenVersions:{...e.screenVersions,[t]:(e.screenVersions[t]??0)+1}})),n}catch{return null}},async loadBoard(n){try{let r=await Cs(n);e(e=>({boards:{...e.boards,[n]:r}}));let i=new Set;for(let e of r.frames)i.add(e.screen);for(let e of i)t().screens[e]||await t().loadScreen(e);return r}catch{return null}},async refreshBoard(n){try{let r=await Cs(n);e(e=>({boards:{...e.boards,[n]:r},design:e.design?{...e.design,boards:e.design.boards.map(e=>e.id===n?{...e,name:r.name,frameCount:r.frames.length,group:r.group??null}:e)}:e.design}));let i=t().design;i&&i.boards.some(e=>e.id===n)===!!r.archivedAt&&await t().refreshDesignSummary();for(let e of r.frames)t().screens[e.screen]||await t().loadScreen(e.screen);n===t().currentBoardId&&await t().syncThemeToBoard()}catch{try{let r=await xs();e({design:r}),r.boards.some(e=>e.id===n)||await t().pruneBoard(n)}catch{}}},async pruneBoard(n){if(e(e=>{let{[n]:t,...r}=e.boards;return{boards:r,design:e.design?{...e.design,boards:e.design.boards.filter(e=>e.id!==n)}:e.design}}),t().currentBoardId!==n)return;let r=t().design?.boards[0]?.id??null;r?await t().selectBoard(r):(e({currentBoardId:null,currentScreenId:null,annotations:[],notes:[]}),t().setEditingMarkupId(null))},pruneScreens(t){if(t.length===0)return;let n=new Set(t);e(e=>({screens:Object.fromEntries(Object.entries(e.screens).filter(([e])=>!n.has(e))),design:e.design?{...e.design,screens:e.design.screens.filter(e=>!n.has(e.id))}:e.design,...e.currentScreenId&&n.has(e.currentScreenId)?{currentScreenId:null,annotations:[]}:{}}))},async selectBoard(n){let r=t().boards[n];if(!r){let e=await t().loadBoard(n);if(!e)return;r=e}e({currentBoardId:n,notes:[],commentThreads:[],activeCommentId:null}),Kc(n);let i=new Set(r.frames.map(e=>e.screen)),a=t().currentScreenId;if(r.frames.length===0)a&&(e({currentScreenId:null,annotations:[]}),t().setEditingMarkupId(null));else if(!a||!i.has(a)){let e=r.frames[0]?.screen;e&&await t().selectScreen(e)}else await t().refreshAnnotations();await t().refreshNotes(),await t().refreshComments(),await t().syncThemeToBoard()},async selectScreen(n){let r=t().screens[n];if(!r){let e=await t().loadScreen(n);if(!e)return;r=e}t().setEditingMarkupId(null),e({currentScreenId:n}),await t().refreshAnnotations()},async refreshScreen(n){try{let r=await Ss(n);e(e=>({screens:{...e.screens,[n]:r},screenVersion:e.screenVersion+1,screenVersions:{...e.screenVersions,[n]:(e.screenVersions[n]??0)+1}}));let i=t().currentBoardId,a=i?t().boards[i]:null;a?.frames.some(e=>e.screen===n)&&await t().refreshAnnotations(),a?.frames.some(e=>e.screen===n)&&await t().refreshComments()}catch{await t().loadDesign()}},reportRenderError(t,n){e(e=>e.renderErrors[t]===n?e:{renderErrors:{...e.renderErrors,[t]:n}})},setWsConnected(t){e(e=>({wsConnected:t,wsEverConnected:e.wsEverConnected||t}))},async resyncAfterReconnect(){try{await t().refreshDesignSummary(),await t().refreshTheme(),await t().refreshHistory();let e=t().currentBoardId;e&&await t().refreshBoard(e);for(let e of Object.keys(t().screens))e.startsWith(`snippet:`)||await t().refreshScreen(e);await t().refreshAnnotations(),await t().refreshNotes(),await t().refreshComments(),await t().refreshCommentCounts()}catch{}},async reloadAll(){let n=await xs(),r=t().currentBoardId,i=t().currentScreenId;e({design:n,screens:{},boards:{},currentBoardId:r&&n.boards.some(e=>e.id===r)?r:null,currentScreenId:i&&n.screens.some(e=>e.id===i)?i:null,annotations:[],notes:[],commentThreads:[],activeCommentId:null}),t().setEditingMarkupId(null),await t().loadDesign()}}),Nl={left:{x:-1,y:0},right:{x:1,y:0},top:{x:0,y:-1},bottom:{x:0,y:1}},Pl={left:0,top:90,right:180,bottom:-90},Fl=32,Il=220;function Ll(e,t,n){switch(t){case`left`:return{x:e.x,y:e.y+e.h*n};case`right`:return{x:e.x+e.w,y:e.y+e.h*n};case`top`:return{x:e.x+e.w*n,y:e.y-(e.head??0)};case`bottom`:return{x:e.x+e.w*n,y:e.y+e.h}}}function Rl(e,t){if(e.x+e.w<=t.x)return[`right`,`left`];if(t.x+t.w<=e.x)return[`left`,`right`];if(e.y+e.h<=t.y)return[`bottom`,`top`];if(t.y+t.h<=e.y)return[`top`,`bottom`];let n=t.x+t.w/2-(e.x+e.w/2),r=t.y+t.h/2-(e.y+e.h/2);return Math.abs(n)>=Math.abs(r)?n>=0?[`right`,`left`]:[`left`,`right`]:r>=0?[`bottom`,`top`]:[`top`,`bottom`]}var zl=e=>Math.round(e*10)/10;function Bl(e,t){let n=(e,t)=>t===`left`||t===`right`?e.y+e.h/2:e.x+e.w/2,r=t.map(t=>{let n=e.get(t.from),r=e.get(t.to);if(!n||!r)return null;let[i,a]=Rl(n,r);return{from:n,to:r,leave:i,enter:a}}),i=new Map,a=(e,t,n,r)=>{let a=`${e}\u0000${t}`,o=i.get(a);o?o.push({index:n,toward:r}):i.set(a,[{index:n,toward:r}])};r.forEach((e,r)=>{if(!e)return;let i=t[r];a(i.from,e.leave,r,n(e.to,e.leave)),a(i.to,e.enter,r,n(e.from,e.enter))});let o=(e,t,n)=>{let r=[...i.get(`${e}\u0000${t}`)??[]].sort((e,t)=>e.toward-t.toward||e.index-t.index);return(r.findIndex(e=>e.index===n)+1)/(r.length+1)};return r.map((e,n)=>{if(!e)return null;let r=t[n],i=o(r.from,e.leave,n);return{...Hl(Ll(e.from,e.leave,i),e.leave,Ll(e.to,e.enter,o(r.to,e.enter,n)),e.enter),lane:i<.5?-1:+(i>.5)}})}function Vl(e,t){let[n,r]=Rl(e,{x:t.x,y:t.y,w:0,h:0});return Hl(Ll(e,n,.5),n,t,r)}function Hl(e,t,n,r){let i=Nl[t],a=Nl[r],o=Math.hypot(n.x-e.x,n.y-e.y),s=Math.max(Fl,Math.min(Il,o*.4)),c={x:e.x+i.x*s,y:e.y+i.y*s},l={x:n.x+a.x*s,y:n.y+a.y*s};return{d:`M ${zl(e.x)} ${zl(e.y)} C ${zl(c.x)} ${zl(c.y)}, ${zl(l.x)} ${zl(l.y)}, ${zl(n.x)} ${zl(n.y)}`,start:e,end:n,c1:c,c2:l,mid:{x:zl((e.x+3*c.x+3*l.x+n.x)/8),y:zl((e.y+3*c.y+3*l.y+n.y)/8)},angle:Pl[r],lane:0}}function Ul(e,t,n=0){for(let r=e.length-1;r>=0;r--){let i=e[r];if(t.x>=i.x-n&&t.x<=i.x+i.w+n&&t.y>=i.y-n&&t.y<=i.y+i.h+n)return i.id}return null}var Wl=e=>[e.start,e.c1,e.c2,e.end],Gl=(e,t,n)=>({x:e.x+(t.x-e.x)*n,y:e.y+(t.y-e.y)*n});function Kl([e,t,n,r],i){let a=Gl(e,t,i),o=Gl(t,n,i),s=Gl(n,r,i),c=Gl(a,o,i),l=Gl(o,s,i),u=Gl(c,l,i);return[[e,a,c,u],[u,l,s,r]]}function ql(e,t){let[n,r]=Kl(Wl(e),t),i=n[3],a=t<=0?r[0]:n[2],o=t>=1?n[3]:r[1],s=o.x-a.x,c=o.y-a.y;return{x:zl(i.x),y:zl(i.y),angle:s===0&&c===0?e.angle:Math.atan2(c,s)*180/Math.PI}}var Jl=48;function Yl(e,t){let n=Wl(e),r=e=>{let r=Kl(n,e)[0][3];return(r.x-t.x)**2+(r.y-t.y)**2},i=0;for(let e=1;e<=Jl;e++)r(e/Jl)<r(i)&&(i=e/Jl);let a=Math.max(0,i-1/Jl),o=Math.min(1,i+1/Jl);for(let e=0;e<12;e++){let e=(o-a)/3;r(a+e)<r(o-e)?o-=e:a+=e}return(a+o)/2}function Xl(e,t,n=0){if(t.length===0)return[[0,1]];let r=Wl(e),i=e=>{let i=Kl(r,e)[0][3];return t.some(e=>{let t=e.y-(e.head??0)-n;return i.x>e.x-n&&i.x<e.x+e.w+n&&i.y>t&&i.y<e.y+e.h+n})},a=(e,t)=>{let n=e,r=t;for(let e=0;e<14;e++){let e=(n+r)/2;i(e)?r=e:n=e}return n},o=[],s=i(0)?null:0;for(let e=1;e<=Jl;e++){let t=e/Jl,n=(e-1)/Jl,r=i(t);r&&s!==null?(o.push([s,a(n,t)]),s=null):!r&&s===null&&(s=a(t,n))}return s!==null&&o.push([s,1]),o}function Zl(e,t,n){if(t<=0&&n>=1)return e.d;let r=t<=0?Wl(e):Kl(Wl(e),t)[1],[i,a,o,s]=n>=1?r:Kl(r,(n-t)/(1-t))[0];return`M ${zl(i.x)} ${zl(i.y)} C ${zl(a.x)} ${zl(a.y)}, ${zl(o.x)} ${zl(o.y)}, ${zl(s.x)} ${zl(s.y)}`}function Ql(e){if(e.some(([e,t])=>e<=.5&&t>=.5))return .5;let t;for(let n of e)(!t||n[1]-n[0]>t[1]-t[0])&&(t=n);return t?(t[0]+t[1])/2:.5}function V(...e){return v(S(e))}var $l=`w-auto`,H=i(),eu=d(`group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!`,{variants:{variant:{default:`bg-primary text-primary-foreground [a]:hover:bg-primary/80`,secondary:`bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80`,destructive:`bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20`,outline:`border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground`,ghost:`hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50`,link:`text-primary underline-offset-4 hover:underline`}},defaultVariants:{variant:`default`}});function U({className:e,variant:t=`default`,asChild:n=!1,...r}){let i=n?ht:`span`;return(0,H.jsx)(i,{"data-slot":`badge`,"data-variant":t,className:V(eu({variant:t}),e),...r})}var tu=e=>`calc(${e}px / var(--canvas-zoom, 1))`,nu=`scale(calc(1 / var(--canvas-zoom, 1)))`,ru=7,iu=7,au={loading:`text-amber-500`,empty:`text-muted-foreground`,error:`text-destructive`,success:`text-emerald-500`},ou=e=>e.state===void 0?`text-foreground/60`:au[e.state]??`text-primary`,su=e=>`${e.from}→${e.to}`;function cu(e,t,n){return e.map(e=>{let r=t[e.id]??{x:0,y:0};return{id:e.id,x:e.x+r.x,y:e.y+r.y,w:e.w,h:e.h,head:r.y/(n||1)}})}function lu(e,t,n){let r=Bl(new Map(e.map(e=>[e.id,e])),t);return t.flatMap((t,i)=>{let a=r[i];if(!a)return[];let o=Xl(a,e.filter(e=>e.id!==t.from&&e.id!==t.to),ru/(n||1));return[{key:su(t),edge:t,route:a,spans:o}]})}var uu=[[0,1]];function du({route:e,spans:t=uu,dashed:n,firm:r=!1}){let i={strokeWidth:tu(r?2.25:1.5),...n?{strokeDasharray:`${tu(6)} ${tu(5)}`}:{}},a=t.flatMap(([e,t])=>[...e>0?[e]:[],...t<1?[t]:[]]),o=t.at(-1)?.[1]===1;return(0,H.jsxs)(H.Fragment,{children:[t.map(([t,n])=>(0,H.jsx)(`path`,{d:Zl(e,t,n),fill:`none`,stroke:`currentColor`,strokeLinecap:`round`,style:i},t)),a.map(t=>{let n=ql(e,t);return(0,H.jsx)(`path`,{"data-flow-cut":!0,d:`M 0 -6 L 0 6`,fill:`none`,stroke:`currentColor`,strokeWidth:`3`,strokeLinecap:`round`,style:{transform:`translate(${n.x}px, ${n.y}px) rotate(${n.angle}deg) ${nu}`}},t)}),o?(0,H.jsx)(`path`,{d:`M 0 0 L -10 -4.5 L -10 4.5 Z`,fill:`currentColor`,style:{transform:`translate(${e.end.x}px, ${e.end.y}px) rotate(${e.angle}deg) ${nu}`}}):null]})}function fu({routed:{key:e,edge:t,route:n,spans:r},near:i,onNear:a,onPick:o}){return(0,H.jsxs)(`g`,{"data-flow-edge":e,"data-flow-state":t.state??``,className:ou(t),children:[(0,H.jsx)(du,{route:n,spans:r,dashed:t.state!==void 0,firm:i}),r.map(([r,i])=>(0,H.jsx)(`path`,{"data-flow-hit":!0,d:Zl(n,r,i),fill:`none`,stroke:`transparent`,style:{strokeWidth:tu(14),pointerEvents:`stroke`,...o?{cursor:`pointer`}:{}},onPointerEnter:()=>a(e),onPointerLeave:()=>a(null),onClick:o?()=>o(t):void 0},r))]})}function pu(e,t){let n=e*Math.PI/180;return Math.abs(Math.cos(n))>=Math.abs(Math.sin(n))?t===1?`translate(0, calc(50% + ${iu}px))`:`translate(0, calc(-50% - ${iu}px))`:t===-1?`translate(calc(-50% - ${iu}px), 0)`:`translate(calc(50% + ${iu}px), 0)`}function mu({routed:{key:e,edge:t,route:n,spans:r},at:i,bare:a=!1,near:o,forward:s=!1,onNear:c,children:l}){let u=ql(n,i??t.labelAt??Ql(r));return(0,H.jsx)(`div`,{"data-flow-label":e,"data-flow-near":o||s?``:void 0,className:`absolute opacity-70 transition-opacity data-[flow-near]:opacity-100`,style:{left:u.x,top:u.y,transform:`translate(-50%, -50%) ${nu}${a?``:` ${pu(u.angle,n.lane)}`}`},onPointerEnter:()=>c(e),onPointerLeave:()=>c(null),children:l})}var hu=`flex max-w-60 items-center rounded-full border border-border bg-background py-0.5 pr-2 pl-0.5 text-xs text-foreground shadow-xs`;function gu({edge:e}){return(0,H.jsxs)(H.Fragment,{children:[e.state===void 0?null:(0,H.jsx)(U,{variant:`outline`,className:`${ou(e)} bg-background`,children:e.state}),e.label===void 0?null:(0,H.jsx)(`span`,{className:`truncate ${e.state===void 0?`pl-0.5`:``}`,children:e.label})]})}function _u({frames:e,insets:t,zoom:n,edges:r,onPick:i,label:a,overlay:o}){let[s,c]=(0,P.useState)(null),l=lu(cu(e,t,n),hi({frames:e,edges:r?[...r]:[]}),n);return l.length===0&&!o?null:(0,H.jsxs)(H.Fragment,{children:[(0,H.jsxs)(`svg`,{"data-flow-layer":!0,"aria-hidden":`true`,width:`1`,height:`1`,className:`pointer-events-none absolute left-0 top-0 overflow-visible`,children:[l.map(e=>(0,H.jsx)(fu,{routed:e,near:s===e.key,onNear:c,onPick:i},e.key)),o]}),l.map(e=>{let t=s===e.key;return a?(0,H.jsx)(P.Fragment,{children:a({routed:e,near:t,onNear:c})},e.key):e.edge.label===void 0&&e.edge.state===void 0?null:(0,H.jsx)(mu,{routed:e,near:t,onNear:c,children:(0,H.jsx)(`div`,{className:`${hu} pl-2`,children:(0,H.jsx)(gu,{edge:e.edge})})},e.key)})]})}var vu=(e,t)=>e!==null&&t!==null&&e.from===t.from&&e.to===t.to;function yu(e,t){return cu(t.frames.map(t=>({...t,...e.frameDrafts[t.id]})),e.frameInsets,e.canvasZoom)}var bu=(e,t)=>({frameDrafts:{},flowDraft:null,activeFlowEdge:null,setFrameDraft(t,n){e(e=>{if(n===null){if(!(t in e.frameDrafts))return e;let{[t]:n,...r}=e.frameDrafts;return{frameDrafts:r}}return{frameDrafts:{...e.frameDrafts,[t]:n}}})},setFlowDraft(t){e({flowDraft:t})},setActiveFlowEdge(t){e({activeFlowEdge:t})},async connectFrames(n){let r=t().currentBoardId;if(!r)return null;try{let i=await R.connectFrames({boardId:r,edges:n});e(e=>{let t=e.boards[r];if(!t)return e;let{edges:n,...a}=t,o=i.edges.length>0?{...a,edges:i.edges}:a;return{boards:{...e.boards,[r]:o}}}),i.readAsTransitions?.length&&z({message:`That arrow leads back into its own step, so it stays a transition — the frame it points at is already part of the step.`});let a=t().activeFlowEdge;return a&&!i.edges.some(e=>vu(e,a))&&e({activeFlowEdge:null}),i.edges}catch(e){return B(e,`Could not update the flow`),null}}}),xu=e=>({rightTab:`node`,nodeState:`default`,browsingFaces:!1,setRightTab(t){e({rightTab:t})},setNodeState(t){e({nodeState:t})},setBrowsingFaces(t){e({browsingFaces:t})}}),Su=(e,t)=>JSON.stringify(e)===JSON.stringify(t);function Cu(e,t,n){let r=e.theme,i=e=>[e.colors,e.colorsDark,e.palette,e.paletteDark];return[...Su(i(r),i(t))?[]:[`colour`],...Su(r.typography,t.typography)?[]:[`type`],...Su(r.radius,t.radius)?[]:[`corners`],...e.rules.intent===n.intent&&Su(e.rules.rules,n.rules)?[]:[`rules`]]}var wu=0,Tu=(e,t)=>{let n=0,r=null,i=e=>{if(r)return r.catch(()=>{});let t=e().finally(()=>{r=null});return r=t,t},a=async()=>{t().view===`language`&&(n++,e({view:`boards`,languageBaseline:null,languageThemeIsNew:!1}),await t().loadTheme())},o=()=>{let{currentBoardId:e,boards:n}=t();return(e?n[e]?.theme:void 0)??`default`},s=async(r,i,o)=>{let s=++n;e({view:`language`,languageMode:r,languageTheme:i,languageThemeIsNew:o,languageBaseline:null,libraryItem:null,selection:null,hover:null,snippetFocus:null}),t().loadFolderConfig();let c;try{[c]=await Promise.all([Is.fetch(),t().loadTheme()])}catch(e){if(s!==n)return;throw await a().catch(()=>{}),e}if(s!==n)return;let{rules:l,frameworkRoles:u}=c,d=t().theme;e({languageRules:l,frameworkRoles:u,languageScheme:t().designMode,languageBaseline:d?{theme:d,rules:l}:null})};return{languageRules:null,languageMode:`review`,languageTheme:`default`,languageThemeIsNew:!1,languageBaseline:null,languageScheme:`light`,frameworkRoles:null,languageHandoff:null,dismissLanguageHandoff(){e({languageHandoff:null})},setLanguageScheme(t){e({languageScheme:t})},openLanguage(e=`review`,t){return s(e,t??o(),!1)},async startTheme(e){await ic.addTheme(e,o()),await s(`guided`,e,!0)},finishLanguage(){return i(async()=>{let{languageBaseline:n,languageTheme:r,languageThemeIsNew:i,theme:o,languageRules:s,currentBoardId:c}=t(),l=n&&o&&s?Cu(n,o,s):[];i&&c&&await R.updateBoard({boardId:c,patch:{theme:r}}),await a();let u=Object.values(t().boards).filter(e=>i?e.id===c:(e.theme??`default`)===r).map(e=>e.name);l.length>0&&u.length>0&&e({languageHandoff:{theme:r,areas:l,boards:u}})})},cancelLanguage(){return i(async()=>{let{languageBaseline:n,languageTheme:r,languageThemeIsNew:i}=t();if(n){let{source:t}=n.rules,{rules:a}=await Is.restore({...i?{}:{theme:n.theme,name:r},...t&&!t.writable?{}:{rules:t?{intent:n.rules.intent,rules:n.rules.rules}:null}});e({languageRules:a})}i&&(await ic.removeTheme(r),t().loadFolderConfig()),await a()})},async refreshLanguage(){let{rules:t,frameworkRoles:n}=await Is.fetch();e(wu===0?{languageRules:t,frameworkRoles:n}:{frameworkRoles:n})},async saveRules(n){let r=t().languageRules;r&&e({languageRules:{...r,...n}}),wu++;try{let{rules:t}=await Is.saveRules(n);wu===1&&e({languageRules:t})}catch(t){throw wu===1&&e({languageRules:(await Is.fetch()).rules}),t}finally{wu--}}}},Eu=(e,t)=>({view:`boards`,libraryItem:null,lastLibraryItem:null,editingSnippetId:null,preSnippetView:null,setView(n){let{libraryItem:r,lastLibraryItem:i}=t();e(n===`boards`?{view:n,libraryItem:null,lastLibraryItem:r}:n===`library`?{view:n,libraryItem:r??i}:{view:n}),(n===`library`||n===`snippet`)&&t().loadComponents()},openLibrary(n){e({view:`library`,libraryItem:n??null,lastLibraryItem:null}),t().loadComponents()},closeLibrary(){e(e=>({view:`boards`,libraryItem:null,lastLibraryItem:e.libraryItem}))},openSnippetEditor(n){let r=t().view;e({view:`snippet`,editingSnippetId:n,preSnippetView:r===`snippet`?t().preSnippetView:r,selection:null,hover:null,snippetFocus:null}),t().loadComponents()},closeSnippetEditor(){let n=t().preSnippetView??`boards`;e(e=>{let t={};for(let[n,r]of Object.entries(e.screens))n.startsWith(`snippet:`)||(t[n]=r);return{view:n,editingSnippetId:null,preSnippetView:null,selection:null,hover:null,screens:t}})},setSyntheticScreen(t,n){e(e=>{let r=e.screens[t];return r&&JSON.stringify(r)===JSON.stringify(n)?e:{screens:{...e.screens,[t]:n},screenVersion:e.screenVersion+1,screenVersions:{...e.screenVersions,[t]:(e.screenVersions[t]??0)+1}}})}}),Du=(e,t)=>{let n=new gc,r=0;return{repoCatalog:null,repoCatalogLoading:!1,repoStatus:{},async loadRepoCatalog(){if(t().repoCatalog||t().repoCatalogLoading)return;e({repoCatalogLoading:!0});let n=r,i;try{i=await Xs()}catch{i={entries:[],apps:[],warnings:[]}}n===r&&e({repoCatalog:i,repoCatalogLoading:!1})},async reloadRepoCatalog(){let i=t().repoCatalog!==null||t().repoCatalogLoading;r+=1,n.reset(),e({repoCatalog:null,repoCatalogLoading:!1,repoStatus:{}}),i&&await t().loadRepoCatalog()},async refreshRepoStatus(n){e(e=>{let t={...e.repoStatus};for(let e of n)delete t[e];return{repoStatus:t}}),await t().loadRepoStatus(n)},async loadRepoStatus(r){await n.load(r,t().repoStatus,async e=>new Map((await Zs(e)).map(e=>[e.id,e])),t=>e(e=>({repoStatus:{...e.repoStatus,...t}})))}}};function Ou(e,t){if(!e)return null;let n=ca(t);return e.entries.find(e=>e.key===n)??null}var ku=0;function Au(){ku+=1}var ju=null,Mu=450,Nu=280,Pu=48,Fu=e=>e<.5?4*e*e*e:1-(-2*e+2)**3/2;function Iu(e,t,n,r=Mu,i){let a=++ku,o=performance.now(),s=c=>{if(a!==ku)return;let l=Math.min(1,(c-o)/r),u=Fu(l);e({canvasZoom:t.zoom+(n.zoom-t.zoom)*u,pan:{x:t.pan.x+(n.pan.x-t.pan.x)*u,y:t.pan.y+(n.pan.y-t.pan.y)*u}}),l<1?requestAnimationFrame(s):i?.()};requestAnimationFrame(s)}function Lu(e){let t=e.notes.find(t=>t.id===e.editingMarkupId),n=(e.currentBoardId?e.boards[e.currentBoardId]:void 0)?.frames.find(e=>e.id===t?.attachment?.frameId);if(!t||!n)return null;let r=e.frameInsets[n.id]??{x:0,y:0},i=t.resolved&&e.nodeRects[n.id]?.[t.resolved.join(`.`)]||{x:0,y:0,w:n.w,h:n.h};return{node:{x:n.x+r.x+i.x,y:n.y+r.y+i.y,w:i.w,h:i.h},card:{w:t.width+16,h:(t.height??120)+16,gap:0}}}var Ru=()=>document.querySelector(`[data-velloo-board="true"]`),zu=320;function Bu(e,t){let n=ku,r=performance.now()+zu,i=`${e.clientWidth}x${e.clientHeight}`,a=o=>{if(n!==ku)return;let s=`${e.clientWidth}x${e.clientHeight}`;if(s===i||o>=r){t();return}i=s,requestAnimationFrame(a)};requestAnimationFrame(a)}var Vu=(e,t)=>({canvasZoom:.75,cursorMode:`select`,pan:{x:0,y:0},nodeRects:{},snippetRects:{},frameInsets:{},rectProbe:null,setCanvasZoom(n){Au(),t().editingMarkupId||(ju=null),e({canvasZoom:Math.max(Nc,Math.min(4,n))})},setCursorMode(t){e({cursorMode:t,hover:null})},setPan(n){Au(),t().editingMarkupId||(ju=null),e({pan:n})},zoomAtViewportCenter(n){let r=Ru();if(!r){if(n.zoom!==void 0)e({canvasZoom:Math.max(Nc,Math.min(4,n.zoom))});else if(n.factor!==void 0){let r=t().canvasZoom*n.factor;e({canvasZoom:Math.max(Nc,Math.min(4,r))})}return}let i={zoom:t().canvasZoom,pan:t().pan},a=n.factor??(n.zoom!==void 0&&i.zoom>0?n.zoom/i.zoom:1),o=Hc(r.clientWidth/2,r.clientHeight/2,a,i);(o.zoom!==i.zoom||o.pan.x!==i.pan.x||o.pan.y!==i.pan.y)&&(Au(),t().editingMarkupId||(ju=null),e({canvasZoom:o.zoom,pan:o.pan}))},zoomForMarkupEdit(){let n={zoom:t().canvasZoom,pan:t().pan};ju||=n;let r=Lu(t());if(r){t().zoomForCommentDraft(r.node,r.card);return}if(Math.abs(n.zoom-1)<.02)return;let i=Ru();if(!i){e({canvasZoom:1});return}let a=t().notes.find(e=>e.id===t().editingMarkupId),o=a&&!a.attachment&&a.x!==void 0&&a.y!==void 0?{x:a.x*n.zoom+n.pan.x,y:a.y*n.zoom+n.pan.y}:{x:i.clientWidth/2,y:i.clientHeight/2};Iu(e,n,{zoom:1,pan:Hc(o.x,o.y,1/n.zoom,n).pan},Nu)},zoomForCommentDraft(n,r){ju||={zoom:t().canvasZoom,pan:t().pan};let i=Ru();i&&Bu(i,()=>{let a=zc(n,r,i.clientWidth,i.clientHeight,Pu);a&&Iu(e,{zoom:t().canvasZoom,pan:t().pan},a,Nu)})},restoreViewAfterMarkupEdit(){let n=ju;if(!n)return;Au();let r={zoom:t().canvasZoom,pan:t().pan};if(Math.abs(r.zoom-n.zoom)<.001&&r.pan.x===n.pan.x&&r.pan.y===n.pan.y){ju=null;return}Iu(e,r,n,Nu,()=>{ju=null})},centerOnFrame(n){let r=t(),i=(r.currentBoardId?r.boards[r.currentBoardId]:null)?.frames.find(e=>e.id===n),a=Ru();if(!i||!a)return;let o=Vc(i,a.clientWidth,a.clientHeight);o&&e({canvasZoom:o.zoom,pan:o.pan})},flyToFrame(n){let r=t(),i=(r.currentBoardId?r.boards[r.currentBoardId]:null)?.frames.find(e=>e.id===n),a=Ru();if(!i||!a)return;let o=Vc(i,a.clientWidth,a.clientHeight);o&&Iu(e,{zoom:r.canvasZoom,pan:r.pan},o)},flyToBoardRect(n){let r=Ru();if(!r)return;let i=t(),a=Rc(n,r.clientWidth,r.clientHeight);a&&Iu(e,{zoom:i.canvasZoom,pan:i.pan},a)},async locateNode(n,r,i={}){let a=t(),o=i.hostBoards??[],s=a.currentBoardId&&(a.boards[a.currentBoardId]?.frames.some(e=>e.screen===n)||o.includes(a.currentBoardId))?a.currentBoardId:Object.values(a.boards).find(e=>e.frames.some(e=>e.screen===n))?.id??o.find(e=>a.design?.boards.some(t=>t.id===e))??null;if(s&&s!==a.currentBoardId&&await a.selectBoard(s),t().revealSelection({screenId:n,path:r},i.preserveTab?{preserveTab:!0}:void 0),typeof document>`u`)return;let c=t().currentBoardId,l=c?t().boards[c]:null,u=i.frameId?l?.frames.find(e=>e.id===i.frameId&&e.screen===n):l?.frames.find(e=>e.screen===n);if(!u)return;e(e=>{let t=e.nodeRects[u.id],n=t?{...t}:void 0;return n&&delete n[r],{rectProbe:{frameId:u.id,path:r,nonce:(e.rectProbe?.nonce??0)+1},...n?{nodeRects:{...e.nodeRects,[u.id]:n}}:{}}});let d=await new Promise(e=>{let n=Date.now()+700,i=()=>{let a=t().nodeRects[u.id]?.[r];if(a&&a.w>0)return e(a);if(Date.now()>n)return e(null);setTimeout(i,60)};setTimeout(i,90)}),f=Ru();if(!f)return;let p={zoom:t().canvasZoom,pan:t().pan};if(d){let n=Rc(Bc(u,t().frameInsets[u.id]??{x:0,y:0,chromeH:0},d),f.clientWidth,f.clientHeight);n&&Iu(e,p,n);return}let m=Vc(u,f.clientWidth,f.clientHeight);m&&Iu(e,p,m)},setNodeRects(t,n){e(e=>{let r={},i={};for(let e of n){let t={x:e.x,y:e.y,w:e.w,h:e.h};if(!e.snippet){r[e.path]=t;continue}let n=i[e.path];n?n.push(t):i[e.path]=[t]}return{nodeRects:{...e.nodeRects,[t]:r},snippetRects:{...e.snippetRects,[t]:i}}})},clearNodeRects(t){e(e=>{if(!(t in e.nodeRects)&&!(t in e.snippetRects))return e;let{[t]:n,...r}=e.nodeRects,{[t]:i,...a}=e.snippetRects;return{nodeRects:r,snippetRects:a}})},setFrameInset(t,n){e(e=>{let r=e.frameInsets[t];if(n===null){if(!r)return e;let{[t]:n,...i}=e.frameInsets;return{frameInsets:i}}return r&&r.x===n.x&&r.y===n.y&&r.chromeH===n.chromeH?e:{frameInsets:{...e.frameInsets,[t]:n}}})}}),W=T()((...e)=>({...Ml(...e),...Dc(...e),...Vu(...e),...bl(...e),...xu(...e),...Eu(...e),...Tu(...e),...Du(...e),...yc(...e),...Mc(...e),...bu(...e),...Sc(...e),...hc(...e),...kl(...e)}));function Hu(e){return e===`system`?typeof window>`u`?`light`:window.matchMedia?.(`(prefers-color-scheme: dark)`).matches?`dark`:`light`:e}function Uu(){let e=W(e=>e.appTheme);(0,P.useEffect)(()=>{let t=()=>{let t=Hu(e);document.documentElement.classList.toggle(`dark`,t===`dark`)};if(t(),e!==`system`)return;let n=window.matchMedia?.(`(prefers-color-scheme: dark)`);if(!n)return;let r=()=>t();return n.addEventListener(`change`,r),()=>n.removeEventListener(`change`,r)},[e])}function Wu(e,t){let n=[e,t].filter(e=>!!e);return n.length>0?`${n.join(` · `)} - velloo`:`velloo`}var Gu=d(`group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,{variants:{variant:{default:`bg-primary text-primary-foreground hover:bg-primary/80`,outline:`border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50`,secondary:`bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground`,ghost:`hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50`,destructive:`bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40`,link:`text-primary underline-offset-4 hover:underline`},size:{default:`h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2`,xs:`h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3`,sm:`h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5`,lg:`h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2`,icon:`size-8`,"icon-xs":`size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3`,"icon-sm":`size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg`,"icon-lg":`size-9`}},defaultVariants:{variant:`default`,size:`default`}});function G({className:e,variant:t=`default`,size:n=`default`,asChild:r=!1,...i}){let a=r?ht:`button`;return(0,H.jsx)(a,{"data-slot":`button`,"data-variant":t,"data-size":n,className:V(Gu({variant:t,size:n,className:e})),...i})}function Ku({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`empty`,className:V(`flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-xl border-dashed p-6 text-center text-balance`,e),...t})}function qu({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`empty-header`,className:V(`flex max-w-sm flex-col items-center gap-2`,e),...t})}var Ju=d(`mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0`,{variants:{variant:{default:`bg-transparent`,icon:`flex size-8 shrink-0 items-center justify-center rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-4`}},defaultVariants:{variant:`default`}});function Yu({className:e,variant:t=`default`,...n}){return(0,H.jsx)(`div`,{"data-slot":`empty-icon`,"data-variant":t,className:V(Ju({variant:t,className:e})),...n})}function Xu({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`empty-title`,className:V(`cn-font-heading text-sm font-medium tracking-tight`,e),...t})}function Zu({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`empty-description`,className:V(`text-sm/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary`,e),...t})}function Qu({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`empty-content`,className:V(`flex w-full max-w-sm min-w-0 flex-col items-center gap-2.5 text-sm text-balance`,e),...t})}var $u=1e4;function ed(){let e=W(e=>e.lastAgentActivityAt),t=W(e=>e.activityFeedOpen),n=W(e=>e.setActivityFeedOpen),[,r]=(0,P.useState)(0);(0,P.useEffect)(()=>{if(e===null)return;let t=setInterval(()=>r(e=>e+1),1e3);return()=>clearInterval(t)},[e]);let i=e!==null&&Date.now()-e<$u;return(0,H.jsxs)(G,{variant:`ghost`,size:`sm`,onClick:()=>n(!t),title:i?`An agent is editing — click for the activity feed`:`Activity feed`,className:`gap-1.5`,"data-agent-active":i?`true`:`false`,children:[(0,H.jsxs)(`span`,{className:`relative flex h-2 w-2`,children:[i?(0,H.jsx)(`span`,{className:`absolute inline-flex h-full w-full rounded-full bg-primary opacity-75 animate-ping`}):null,(0,H.jsx)(`span`,{className:`relative inline-flex h-2 w-2 rounded-full ${i?`bg-primary`:`bg-muted-foreground/40`}`})]}),(0,H.jsx)(It,{size:14})]})}function td(e){let t=Math.max(0,Math.round((Date.now()-e)/1e3));if(t<5)return`now`;if(t<60)return`${t}s ago`;let n=Math.round(t/60);if(n<60)return`${n}m ago`;let r=Math.round(n/60);return r<24?`${r}h ago`:`${Math.round(r/24)}d ago`}var nd=e=>e.replaceAll(`_`,` `);function rd(e){let t=W.getState().design,n=[];if(e.boardId){let r=t?.boards.find(t=>t.id===e.boardId);if(!r)return{crumbs:[e.boardId],navigate:null,deleted:!0};n.push(r.name)}if(e.screenId){let r=t?.screens.find(t=>t.id===e.screenId);if(!r)return{crumbs:[...n,e.screenId],navigate:null,deleted:!0};r.name,n.push(r.name)}e.path&&n.push(`node ${e.path.join(`.`)}`),e.snippetId&&n.push(`snippet ${e.snippetId}`),e.token&&n.push(e.token),e.themeName&&n.push(`theme ${e.themeName}`),e.extension&&n.push(`extension ${e.extension}`);let r=e.screenId,i=e.boardId;return!r&&!i?{crumbs:n,navigate:null,deleted:!1}:{crumbs:n,navigate:()=>{(async()=>{let n=W.getState();if(n.view!==`boards`&&n.setView(`boards`),r&&e.path){await W.getState().locateNode(r,e.path.join(`.`),{hostBoards:[...i?[i]:[],...e.boards??[]]});return}let a=e.boards??[],o=i??(r?n.currentBoardId&&(n.boards[n.currentBoardId]?.frames.some(e=>e.screen===r)||a.includes(n.currentBoardId))?n.currentBoardId:Object.values(n.boards).find(e=>e.frames.some(e=>e.screen===r))?.id??a.find(e=>t?.boards.some(t=>t.id===e))??null:null);if(o&&o!==n.currentBoardId&&await n.selectBoard(o),r&&await W.getState().selectScreen(r),!o)return;let s=W.getState().boards[o]?.frames.find(t=>e.frameId?t.id===e.frameId:r?t.screen===r:!1);s&&requestAnimationFrame(()=>W.getState().flyToFrame(s.id))})()},deleted:!1}}function id({source:e}){return e===`mcp`?(0,H.jsx)(It,{size:12,className:`text-primary shrink-0`}):e===`canvas`?(0,H.jsx)(zn,{size:12,className:`shrink-0 opacity-60`}):(0,H.jsx)(xr,{size:12,className:`shrink-0 opacity-60`})}function ad({entry:e}){let[t,n]=(0,P.useState)(!1),r=rd(e.target),i=(e.opCount??0)>1||(e.ops?.length??0)>1,a=(e.opCount??0)-(e.ops?.length??0);return(0,H.jsxs)(`li`,{className:`border-b border-border/60 last:border-b-0`,children:[(0,H.jsxs)(`div`,{className:`flex items-start gap-2 px-3 py-2`,children:[(0,H.jsx)(id,{source:e.source}),(0,H.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,H.jsxs)(`button`,{type:`button`,disabled:r.navigate===null,onClick:()=>r.navigate?.(),className:`block w-full text-left text-xs ${r.navigate?`hover:underline cursor-pointer`:`cursor-default`} ${r.deleted?`opacity-50`:``}`,children:[(0,H.jsx)(`span`,{className:`font-medium`,children:nd(e.verb)}),i?(0,H.jsxs)(U,{variant:`secondary`,className:`ml-1 px-1 py-0 text-[10px]`,children:[e.opCount??e.ops?.length,` ops`]}):null,r.deleted?(0,H.jsx)(U,{variant:`secondary`,className:`ml-1 px-1 py-0 text-[10px]`,children:`deleted`}):null,(0,H.jsx)(`span`,{className:`block truncate text-muted-foreground`,children:r.crumbs.join(` › `)||`—`})]}),(0,H.jsxs)(`div`,{className:`mt-0.5 flex items-center gap-2 text-[10px] text-muted-foreground`,children:[(0,H.jsx)(`span`,{children:td(e.ts)}),e.session?(0,H.jsxs)(U,{variant:`secondary`,className:`px-1 py-0`,title:`MCP session ${e.session}`,children:[`agent·`,e.session.slice(0,4)]}):null]})]}),i?(0,H.jsx)(`button`,{type:`button`,onClick:()=>n(e=>!e),className:`mt-0.5 shrink-0 text-muted-foreground hover:text-foreground`,title:t?`Collapse ops`:`Expand ops`,children:t?(0,H.jsx)(Vt,{size:12}):(0,H.jsx)(Ht,{size:12})}):null]}),t&&e.ops?(0,H.jsxs)(`ul`,{className:`mb-2 ml-8 mr-3 rounded bg-muted/40 px-2 py-1`,children:[e.ops.map((e,t)=>{let n=rd(e.target);return(0,H.jsx)(`li`,{className:`truncate py-0.5 text-[11px]`,children:(0,H.jsxs)(`button`,{type:`button`,disabled:n.navigate===null,onClick:()=>n.navigate?.(),className:n.navigate?`hover:underline`:`cursor-default opacity-60`,children:[nd(e.verb),(0,H.jsx)(`span`,{className:`ml-1 text-muted-foreground`,children:n.crumbs.join(` › `)})]})},t)}),a>0?(0,H.jsxs)(`li`,{className:`py-0.5 text-[11px] text-muted-foreground`,children:[`+`,a,` more`]}):null]}):null]})}function od(){let e=W(e=>e.activityFeedOpen),t=W(e=>e.setActivityFeedOpen),n=W(e=>e.activityEvents),[,r]=(0,P.useState)(0);if((0,P.useEffect)(()=>{if(!e)return;let t=setInterval(()=>r(e=>e+1),3e4);return()=>clearInterval(t)},[e]),!e)return null;let i=[...n].reverse();return(0,H.jsxs)(`aside`,{"data-activity-feed":`true`,className:`fixed right-3 top-14 bottom-10 z-40 flex w-72 flex-col overflow-hidden rounded-lg border bg-background/95 shadow-lg backdrop-blur`,children:[(0,H.jsxs)(`div`,{className:`flex items-center justify-between border-b px-3 py-2`,children:[(0,H.jsx)(`span`,{className:`text-xs font-semibold`,children:`Agent activity`}),(0,H.jsx)(G,{variant:`ghost`,size:`icon-xs`,onClick:()=>t(!1),title:`Close`,children:(0,H.jsx)(Br,{})})]}),i.length===0?(0,H.jsx)(Ku,{className:`px-3 py-6`,children:(0,H.jsxs)(qu,{children:[(0,H.jsx)(Yu,{variant:`icon`,children:(0,H.jsx)(It,{})}),(0,H.jsx)(Xu,{className:`text-xs`,children:`No activity yet`}),(0,H.jsx)(Zu,{className:`text-xs`,children:`Agent and canvas edits will appear here.`})]})}):(0,H.jsx)(`ul`,{className:`flex-1 overflow-y-auto`,children:i.map(e=>(0,H.jsx)(ad,{entry:e},e.id))})]})}var sd=[{name:`Mobile`,w:390,h:844},{name:`Tablet`,w:768,h:1024},{name:`Desktop`,w:1440,h:900}],cd=JSON.stringify(sd);function ld(){let e=W(e=>{let t=e.design?.viewportPresets;return t&&t.length>0?JSON.stringify(t):cd});return(0,P.useMemo)(()=>e===cd?sd:JSON.parse(e),[e])}function ud({...e}){return(0,H.jsx)(He,{"data-slot":`dialog`,...e})}function dd({...e}){return(0,H.jsx)(Ke,{"data-slot":`dialog-portal`,...e})}function fd({className:e,...t}){return(0,H.jsx)(je,{"data-slot":`dialog-overlay`,className:V(`fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0`,e),...t})}function pd({className:e,children:t,showCloseButton:n=!0,...r}){return(0,H.jsxs)(dd,{children:[(0,H.jsx)(fd,{}),(0,H.jsxs)(Qe,{"data-slot":`dialog-content`,className:V(`fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95`,e),...r,children:[t,n&&(0,H.jsx)(Oe,{"data-slot":`dialog-close`,asChild:!0,children:(0,H.jsxs)(G,{variant:`ghost`,className:`absolute top-2 right-2`,size:`icon-sm`,children:[(0,H.jsx)(Br,{}),(0,H.jsx)(`span`,{className:`sr-only`,children:`Close`})]})})]})]})}function md({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`dialog-header`,className:V(`flex flex-col gap-2`,e),...t})}function hd({className:e,showCloseButton:t=!1,children:n,...r}){return(0,H.jsxs)(`div`,{"data-slot":`dialog-footer`,className:V(`-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:justify-end`,e),...r,children:[n,t&&(0,H.jsx)(Oe,{asChild:!0,children:(0,H.jsx)(G,{variant:`outline`,children:`Close`})})]})}function gd({className:e,...t}){return(0,H.jsx)(lt,{"data-slot":`dialog-title`,className:V(`cn-font-heading text-base leading-none font-medium`,e),...t})}function _d({className:e,...t}){return(0,H.jsx)(at,{"data-slot":`dialog-description`,className:V(`text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground`,e),...t})}function K({className:e,...t}){return(0,H.jsx)(ae,{"data-slot":`label`,className:V(`flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50`,e),...t})}function q({...e}){return(0,H.jsx)(mt,{"data-slot":`select`,...e})}function J({...e}){return(0,H.jsx)(We,{"data-slot":`select-value`,...e})}function Y({className:e,size:t=`default`,children:n,...r}){return(0,H.jsxs)(pe,{"data-slot":`select-trigger`,"data-size":t,className:V(`flex w-fit items-center justify-between gap-1.5 rounded-lg border border-input bg-transparent py-2 pr-2 pl-2.5 text-sm whitespace-nowrap transition-colors outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,e),...r,children:[n,(0,H.jsx)(pt,{asChild:!0,children:(0,H.jsx)(Vt,{className:`pointer-events-none size-4 text-muted-foreground`})})]})}function vd({className:e,children:t,position:n=`item-aligned`,align:r=`center`,...i}){return(0,H.jsx)(ve,{children:(0,H.jsxs)(ke,{"data-slot":`select-content`,"data-align-trigger":n===`item-aligned`,className:V(`cn-menu-target cn-menu-translucent relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95`,n===`popper`&&`data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1`,e),position:n,align:r,...i,children:[(0,H.jsx)(yd,{}),(0,H.jsx)(ee,{"data-position":n,className:V(`data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)`,n===`popper`&&``),children:t}),(0,H.jsx)(bd,{})]})})}function X({className:e,children:t,...n}){return(0,H.jsxs)(_e,{"data-slot":`select-item`,className:V(`relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2`,e),...n,children:[(0,H.jsx)(`span`,{className:`pointer-events-none absolute right-2 flex size-4 items-center justify-center`,children:(0,H.jsx)(ne,{children:(0,H.jsx)(Bt,{className:`pointer-events-none`})})}),(0,H.jsx)(ft,{children:t})]})}function yd({className:e,...t}){return(0,H.jsx)(re,{"data-slot":`select-scroll-up-button`,className:V(`z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4`,e),...t,children:(0,H.jsx)(Ut,{})})}function bd({className:e,...t}){return(0,H.jsx)(ie,{"data-slot":`select-scroll-down-button`,className:V(`z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4`,e),...t,children:(0,H.jsx)(Vt,{})})}function xd({boardId:e,onClose:t}){let n=W(e=>e.design?.screens??[]),r=ld(),[i,a]=(0,P.useState)(``),[o,s]=(0,P.useState)(``);return(0,P.useEffect)(()=>{e!==null&&(a(n[0]?.id??``),s(r[r.length-1]?.name??``))},[e]),(0,H.jsx)(ud,{open:e!==null,onOpenChange:e=>!e&&t(),children:(0,H.jsxs)(pd,{className:`sm:max-w-sm`,children:[(0,H.jsxs)(md,{children:[(0,H.jsx)(gd,{children:`Add frame`}),(0,H.jsx)(_d,{children:`Place an existing screen on this board. The frame lands next to the current ones.`})]}),n.length===0?(0,H.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:`No screens in this folder yet — ask your agent to design one first.`}):(0,H.jsxs)(`div`,{className:`grid gap-4`,children:[(0,H.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,H.jsx)(K,{htmlFor:`add-frame-screen`,className:`text-xs`,children:`Screen`}),(0,H.jsxs)(q,{value:i,onValueChange:a,children:[(0,H.jsx)(Y,{id:`add-frame-screen`,className:`w-full`,children:(0,H.jsx)(J,{placeholder:`Pick a screen`})}),(0,H.jsx)(vd,{children:n.map(e=>(0,H.jsx)(X,{value:e.id,children:e.name},e.id))})]})]}),(0,H.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,H.jsx)(K,{htmlFor:`add-frame-size`,className:`text-xs`,children:`Size`}),(0,H.jsxs)(q,{value:o,onValueChange:s,children:[(0,H.jsx)(Y,{id:`add-frame-size`,className:`w-full`,children:(0,H.jsx)(J,{placeholder:`Pick a size`})}),(0,H.jsx)(vd,{children:r.map(e=>(0,H.jsxs)(X,{value:e.name,children:[e.name,` — `,e.w,`×`,e.h]},e.name))})]})]})]}),(0,H.jsxs)(hd,{children:[(0,H.jsx)(G,{type:`button`,variant:`outline`,onClick:t,children:`Cancel`}),(0,H.jsx)(G,{type:`button`,onClick:()=>{let n=r.find(e=>e.name===o)??r[0];e&&i&&n&&(t(),R.addFrame({boardId:e,screenId:i,w:n.w,h:n.h}).catch(e=>B(e,`Could not add frame`)))},disabled:!i||!o,children:`Add frame`})]})]})})}function Sd(e){return new Map([...e].sort((e,t)=>{let n=e.createdAt.localeCompare(t.createdAt);return n===0?e.id.localeCompare(t.id):n}).map((e,t)=>[e.id,t+1]))}var Cd=`(14px / var(--canvas-zoom, 1))`;function wd(e,t,n){return`clamp(${t}px + ${Cd}, ${e}px, ${n}px - ${Cd})`}var Td=18;function Ed(e){return`calc(-50% - ${e*Td}px / var(--canvas-zoom, 1)) -50%`}function Dd(e){return`${e.left}|${e.top}`}function Od(e){return t=>{t.key===`Enter`&&(t.metaKey||t.ctrlKey)&&(t.preventDefault(),e())}}var kd=/^(#{1,3}) (.*)$/,Ad=/^[-*] (.*)$/;function jd(e){return e.split(`
3
+ `).map(e=>{let t=kd.exec(e);if(t)return{kind:`h${t[1].length}`,inline:Fd(t[2])};let n=Ad.exec(e);return n?{kind:`li`,inline:Fd(n[1])}:{kind:`p`,inline:Fd(e)}})}function Md(e){let t=[];for(let n of e){let e=t[t.length-1];n.kind===`li`?Array.isArray(e)?e.push(n):t.push([n]):t.push(n)}return t}function Nd(e){let t=e.trim();return/^(https?:\/\/|mailto:)/i.test(t)?t:null}var Pd=/^\[([^\]\n]+)\]\(([^)\s]+)\)/;function Fd(e){let t=[],n=``,r=()=>{n&&t.push({kind:`text`,text:n}),n=``},i=0;for(;i<e.length;){let a=e.slice(i),o=Pd.exec(a);if(o){let e=Nd(o[2]);if(e){r(),t.push({kind:`link`,href:e,children:Fd(o[1])}),i+=o[0].length;continue}}if(a.startsWith(`**`)){let n=e.indexOf(`**`,i+2);if(n>i+2){r(),t.push({kind:`strong`,children:Fd(e.slice(i+2,n))}),i=n+2;continue}}let s=e[i];if(s===`*`||s===`_`){let n=e.indexOf(s,i+1);if(n>i+1){r(),t.push({kind:`em`,children:Fd(e.slice(i+1,n))}),i=n+1;continue}}n+=s,i++}return r(),t}function Id(e){let t=e=>e.map(e=>e.kind===`text`?e.text:t(e.children)).join(``);return jd(e).map(e=>t(e.inline)).join(`
4
+ `)}var Ld=`[&_h1]:text-lg [&_h1]:font-bold [&_h1]:leading-tight [&_h1]:tracking-tight [&_h2]:text-base [&_h2]:font-semibold [&_h2]:leading-snug [&_h2]:tracking-tight [&_h3]:text-sm [&_h3]:font-semibold [&_h3]:uppercase [&_h3]:tracking-wider [&_strong]:font-semibold [&_b]:font-semibold [&_em]:italic [&_i]:italic [&_ul]:list-disc [&_ul]:pl-5 [&_li]:pl-0.5 [&_li]:marker:text-current/60 [&_a]:underline [&_a]:underline-offset-2 [&_a]:decoration-current/40 whitespace-pre-wrap break-words`;function Rd({body:e,className:t=``}){return(0,H.jsx)(`div`,{className:`${Ld} ${t}`,"data-markdown":!0,children:Md(jd(e)).map((e,t)=>Array.isArray(e)?(0,H.jsx)(`ul`,{children:e.map((e,t)=>(0,H.jsx)(`li`,{children:e.inline.length>0?Bd(e.inline):(0,H.jsx)(`br`,{})},t))},t):(0,H.jsx)(P.Fragment,{children:zd(e)},t))})}function zd(e){let t=e.inline.length>0?Bd(e.inline):(0,H.jsx)(`br`,{});switch(e.kind){case`h1`:return(0,H.jsx)(`h1`,{children:t});case`h2`:return(0,H.jsx)(`h2`,{children:t});case`h3`:return(0,H.jsx)(`h3`,{children:t});case`p`:case`li`:return(0,H.jsx)(`div`,{children:t})}}function Bd(e){return e.map((e,t)=>(0,H.jsx)(P.Fragment,{children:Vd(e)},t))}function Vd(e){if(e.kind===`text`)return e.text;let t=Bd(e.children);return e.kind===`link`?(0,H.jsx)(`a`,{href:e.href,target:`_blank`,rel:`noopener noreferrer`,children:t}):e.kind===`strong`?(0,H.jsx)(`strong`,{children:t}):(0,H.jsx)(`em`,{children:t})}var Hd=e(r(),1),Ud=`​`,Wd=new Set([`DIV`,`P`,`H1`,`H2`,`H3`,`H4`,`H5`,`H6`,`LI`,`UL`,`OL`,`BLOCKQUOTE`,`PRE`]);function Gd(e,t){let n=e.ownerDocument,r=(e,t)=>{let r=n.createElement(e);return t.inline.length===0?r.append(n.createElement(`br`)):r.append(...Kd(n,t.inline)),r};e.replaceChildren(...Md(jd(t)).map(e=>{if(!Array.isArray(e))return r(e.kind===`p`?`div`:e.kind,e);let t=n.createElement(`ul`);return t.append(...e.map(e=>r(`li`,e))),t}))}function Kd(e,t){return t.map(t=>{if(t.kind===`text`)return e.createTextNode(t.text);let n=e.createElement(t.kind===`link`?`a`:t.kind);return t.kind===`link`&&n.setAttribute(`href`,t.href),n.append(...Kd(e,t.children)),n})}var qd=e=>e.nodeType===1&&Wd.has(e.tagName);function Jd(e){let t=e.tagName;return t===`LI`?`- `:t===`H1`?`# `:t===`H2`?`## `:/^H[3-6]$/.test(t)?`### `:``}function Yd(e){let t=[];return Xd(e,``,t,!0),t.join(`
5
+ `)}function Xd(e,t,n,r=!1){let i=n.length,a=``,o=!1,s=!0,c=e=>{(o||e)&&(n.push((s?t:``)+a),s=!1),a=``,o=!1},l=[...e.childNodes];l.forEach((e,t)=>{if(qd(e)){c(!1),Xd(e,Jd(e),n);return}if(e.nodeName===`BR`){if(t===l.length-1)return;c(!0);return}a+=Zd(e,new Set),o=!0}),c(!1),!r&&n.length===i&&n.push(t)}function Zd(e,t){if(e.nodeType===3)return(e.textContent??``).replaceAll(Ud,``).replaceAll(`\xA0`,` `);if(e.nodeType!==1)return``;let n=e;if(n.tagName===`BR`)return` `;let r=n.tagName===`STRONG`||n.tagName===`B`?`**`:n.tagName===`EM`||n.tagName===`I`?`*`:null,i=e=>[...n.childNodes].map(t=>Zd(t,e)).join(``);if(n.tagName===`A`){let e=i(t),r=Nd(n.getAttribute(`href`)??``);return r&&e.trim()?`[${e}](${r})`:e}if(!r||t.has(r))return i(t);let a=i(new Set([...t,r])),[,o=``,s=``,c=``]=/^(\s*)([\s\S]*?)(\s*)$/.exec(a)??[];return s?`${o}${r}${s}${r}${c}`:a}function Qd(e,t){let n=t;for(;n&&n.parentNode!==e;)n=n.parentNode;return n&&n.nodeType===1?n:null}function $d(e,t){if(e.tagName.toLowerCase()===t)return e;let n=e.ownerDocument.createElement(t);return n.append(...e.childNodes),n.firstChild||n.append(e.ownerDocument.createElement(`br`)),e.replaceWith(n),n}function ef(e){let t=e.ownerDocument.getSelection();if(!t||t.rangeCount===0||!t.isCollapsed)return!1;let n=t.anchorNode;if(n?.nodeType!==3||!e.contains(n))return!1;let r=n;if(r.parentNode===e){let n=t.anchorOffset,i=e.ownerDocument.createElement(`div`);r.replaceWith(i),i.append(r),mf(t,r,n)}return nf(e,t,r)||af(e,t,r)||ff(t,r)}var tf=/^(#{1,3})[  ]/;function nf(e,t,n){let r=Qd(e,n);if(!r||r.tagName!==`DIV`&&r.tagName!==`P`||uf(r)!==n)return!1;let i=tf.exec(n.data);if(!i)return!1;let a=t.anchorOffset-i[0].length;n.data=n.data.slice(i[0].length);let o=i[1].length;return of(t,$d(r,`h${o}`),n,a),!0}var rf=/^[-*][ \u00A0]/;function af(e,t,n){let r=Qd(e,n);if(!r||r.tagName!==`DIV`&&r.tagName!==`P`||uf(r)!==n)return!1;let i=rf.exec(n.data);if(!i)return!1;let a=t.anchorOffset-i[0].length;n.data=n.data.slice(i[0].length);let o=r.ownerDocument.createElement(`li`);o.append(...r.childNodes);let s=r.previousElementSibling,c=r.nextElementSibling;if(s?.tagName===`UL`)s.append(o),r.remove();else if(c?.tagName===`UL`)c.prepend(o),r.remove();else{let e=r.ownerDocument.createElement(`ul`);e.append(o),r.replaceWith(e)}return of(t,o,n,a),!0}function of(e,t,n,r){if(n.data.length>0){mf(e,n,Math.max(0,r));return}n.remove(),t.firstChild||t.append(t.ownerDocument.createElement(`br`)),mf(e,t,0)}function sf(e,t){let n=t;for(;n&&n!==e;){if(n.nodeName===`LI`)return n;n=n.parentNode}return null}function cf(e){let t=e.ownerDocument,n=e.parentElement,r=t.createElement(`div`);r.append(...e.childNodes),r.firstChild||r.append(t.createElement(`br`));let i=[...n.children].slice([...n.children].indexOf(e)+1);if(e.remove(),i.length>0){let e=t.createElement(`ul`);e.append(...i),n.after(r,e)}else n.after(r);return n.children.length===0&&n.remove(),r}function lf(e){let t=e.ownerDocument,n=t.createElement(`li`);n.append(...e.childNodes),n.firstChild||n.append(t.createElement(`br`));let r=e.previousElementSibling;if(r?.tagName===`UL`)r.append(n),e.remove();else{let r=t.createElement(`ul`);r.append(n),e.replaceWith(r)}return n}function uf(e){return(e.ownerDocument?.createTreeWalker(e,4))?.nextNode()??null}var df=[{pattern:/\[([^\]\n]+)\]\(([^)\s]+)\)/,build(e,t){let n=Nd(t[2]);if(!n)return null;let r=e.createElement(`a`);return r.setAttribute(`href`,n),r.textContent=t[1],r}},{pattern:/\*\*([^*\n]+)\*\*/,build(e,t){let n=e.createElement(`strong`);return n.textContent=t[1],n}},{pattern:/(^|[^*])\*([^*\s][^*\n]*)\*(?!\*)/,lead:e=>e[1].length,build(e,t){let n=e.createElement(`em`);return n.textContent=t[2],n}},{pattern:/(^|[^\w_])_([^_\s][^_\n]*)_(?![\w_])/,lead:e=>e[1].length,build(e,t){let n=e.createElement(`em`);return n.textContent=t[2],n}}];function ff(e,t){let n=!1,r=t,i=e.anchorOffset;for(;;){let t=pf(r.ownerDocument,r.data,i);if(!t)return n;let{start:a,end:o,el:s}=t,c=r.data.slice(o);r.data=r.data.slice(0,a);let l=r.ownerDocument.createTextNode(c||Ud);r.after(s,l),i=c?i-o:1,mf(e,l,i),r=l,n=!0}}function pf(e,t,n){let r=null;for(let i of df){let a=new RegExp(i.pattern.source,`g`);for(let o=a.exec(t);o;o=a.exec(t)){let t=o.index+o[0].length;if(t>n)break;let a=o.index+(i.lead?.(o)??0);if(r&&a>=r.start)break;let s=i.build(e,o);if(s){r={start:a,end:t,el:s};break}}}return r}function mf(e,t,n){let r=(t.ownerDocument??t).createRange();r&&(r.setStart(t,n),r.collapse(!0),e.removeAllRanges(),e.addRange(r))}function hf({value:e,onChange:t,onBlur:n,onKeyDown:r,placeholder:i,autoFocus:a=!1,ariaLabel:o,className:s=``,dataSlot:c}){let l=(0,P.useRef)(null),u=(0,P.useRef)(null),d=(0,P.useRef)(null),[f,p]=(0,P.useState)(e.trim()===``),[m,h]=(0,P.useState)(null);(0,P.useLayoutEffect)(()=>{let t=l.current;t&&e!==d.current&&(Gd(t,e),d.current=e,p(e.trim()===``))},[e]),(0,P.useEffect)(()=>{let e=l.current;if(!a||!e)return;e.focus();let t=e.ownerDocument.getSelection();t?.selectAllChildren(e),t?.collapseToEnd()},[]),(0,P.useEffect)(()=>{let e=l.current?.ownerDocument;if(!e)return;let t=()=>{let t=l.current;if(!t||u.current?.contains(e.activeElement))return;let n=e.getSelection(),r=n&&n.rangeCount>0?n.getRangeAt(0):null;if(!r||r.collapsed||!t.contains(r.commonAncestorContainer)){h(null);return}h(r.getBoundingClientRect())};return e.addEventListener(`selectionchange`,t),()=>e.removeEventListener(`selectionchange`,t)},[]);let g=()=>{let e=l.current;if(!e)return;e.firstChild||Gd(e,``);let n=Yd(e);d.current=n,p(n.trim()===``),t(n)},_=()=>{requestAnimationFrame(()=>{let e=l.current?.ownerDocument.activeElement;e&&(l.current?.contains(e)||u.current?.contains(e))||(h(null),n?.())})},v=e=>{l.current?.ownerDocument.execCommand(e),g()},y=()=>{let e=l.current,t=e?.ownerDocument.getSelection();return!e||!t||t.rangeCount===0?null:sf(e,t.anchorNode)??Qd(e,t.anchorNode)};return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(`div`,{ref:l,role:`textbox`,"aria-multiline":`true`,"aria-label":o,contentEditable:!0,suppressContentEditableWarning:!0,tabIndex:0,"data-slot":c,"data-rich-editor":!0,"data-empty":f?`true`:void 0,"data-placeholder":i,className:`relative cursor-text whitespace-pre-wrap outline-none ${Ld} data-[empty=true]:before:pointer-events-none data-[empty=true]:before:absolute data-[empty=true]:before:text-muted-foreground data-[empty=true]:before:content-[attr(data-placeholder)] ${s}`,onInput:()=>{let e=l.current;e&&ef(e),g()},onPaste:e=>{e.preventDefault();let t=e.clipboardData.getData(`text/plain`);l.current?.ownerDocument.execCommand(`insertText`,!1,t)},onKeyDown:e=>{let t=l.current,n=t?.ownerDocument.getSelection();if(t&&n?.isCollapsed){let r=sf(t,n.anchorNode),i=r??Qd(t,n.anchorNode),a=i?gf(i,n):!1;if(r&&(e.key===`Backspace`&&a||e.key===`Enter`&&!e.shiftKey&&!e.metaKey&&!e.ctrlKey&&(r.textContent??``).replaceAll(`​`,``)===``)){e.preventDefault();let t=cf(r);n.collapse(t,0),g();return}if(e.key===`Backspace`&&i&&/^H[1-3]$/.test(i.tagName)&&a){e.preventDefault(),n.collapse($d(i,`div`),0),g();return}}r?.(e)},onBlur:_}),m?(0,Hd.createPortal)((0,H.jsx)(_f,{ref:u,rect:m,onBold:()=>v(`bold`),onItalic:()=>v(`italic`),onHeading:e=>{let t=y();t&&(t.tagName===`LI`&&(t=cf(t)),$d(t,t.tagName===`H${e}`?`div`:`h${e}`),g())},onBullet:()=>{let e=y();e&&(e.tagName===`LI`?cf(e):lf(/^H[1-6]$/.test(e.tagName)?$d(e,`div`):e),g())},onLink:(e,t)=>{let n=l.current,r=n?.ownerDocument.getSelection();n&&r&&(n.focus(),r.removeAllRanges(),r.addRange(t),n.ownerDocument.execCommand(`createLink`,!1,e),g())},onDone:()=>l.current?.focus(),onLeave:_}),document.body):null]})}function gf(e,t){let n=e.ownerDocument.createRange();return n.selectNodeContents(e),n.setEnd(t.anchorNode,t.anchorOffset),n.toString().replaceAll(`​`,``)===``}function _f({ref:e,rect:t,onBold:n,onItalic:r,onHeading:i,onBullet:a,onLink:o,onDone:s,onLeave:c}){let[l,u]=(0,P.useState)(null),[d,f]=(0,P.useState)(`https://`),p=e=>e.preventDefault(),m=(e,t,n)=>(0,H.jsx)(`button`,{type:`button`,"aria-label":e,title:e,className:`flex size-7 items-center justify-center rounded-md text-foreground/80 hover:bg-accent hover:text-foreground`,onMouseDown:p,onClick:n,children:t});return(0,H.jsx)(`div`,{ref:e,role:`toolbar`,"aria-label":`Formatting`,"data-formatting-hud":!0,className:`fixed z-[100] flex -translate-x-1/2 -translate-y-full items-center gap-0.5 rounded-lg border border-border bg-popover p-1 shadow-lg`,style:{left:t.left+t.width/2,top:t.top-6},onPointerDown:e=>e.stopPropagation(),children:l?(0,H.jsx)(`input`,{autoFocus:!0,"aria-label":`Link address`,className:`h-7 w-56 rounded-md bg-transparent px-2 text-xs outline-none`,value:d,onChange:e=>f(e.target.value),onBlur:c,onKeyDown:e=>{if(e.key===`Enter`){e.preventDefault();let t=Nd(d);t&&o(t,l),u(null)}else e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),u(null),s())}}):(0,H.jsxs)(H.Fragment,{children:[m(`Bold`,(0,H.jsx)(Ft,{size:14}),n),m(`Italic`,(0,H.jsx)(gn,{size:14}),r),m(`Heading 1`,(0,H.jsx)(dn,{size:14}),()=>i(1)),m(`Heading 2`,(0,H.jsx)(fn,{size:14}),()=>i(2)),m(`Bullet list`,(0,H.jsx)(wn,{size:14}),a),m(`Link`,(0,H.jsx)(Sn,{size:14}),()=>{let e=document.getSelection();e&&e.rangeCount>0&&(f(`https://`),u(e.getRangeAt(0).cloneRange()))})]})})}var vf=`inline-flex size-4 shrink-0 items-center justify-center rounded text-muted-foreground transition-colors`,yf=`${vf} hover:bg-muted hover:text-foreground`,bf=`${vf} hover:bg-destructive/10 hover:text-destructive`,xf=`gap-px`,Sf={size:11,strokeWidth:2};function Cf({...e}){return(0,H.jsx)(Xe,{"data-slot":`alert-dialog`,...e})}function wf({...e}){return(0,H.jsx)(st,{"data-slot":`alert-dialog-portal`,...e})}function Tf({className:e,...t}){return(0,H.jsx)(Pe,{"data-slot":`alert-dialog-overlay`,className:V(`fixed inset-0 z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0`,e),...t})}function Ef({className:e,size:t=`default`,...n}){return(0,H.jsxs)(wf,{children:[(0,H.jsx)(Tf,{}),(0,H.jsx)(he,{"data-slot":`alert-dialog-content`,"data-size":t,className:V(`group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95`,e),...n})]})}function Df({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`alert-dialog-header`,className:V(`grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]`,e),...t})}function Of({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`alert-dialog-footer`,className:V(`-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end`,e),...t})}function kf({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`alert-dialog-media`,className:V(`mb-2 inline-flex size-10 items-center justify-center rounded-md bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-6`,e),...t})}function Af({className:e,...t}){return(0,H.jsx)(rt,{"data-slot":`alert-dialog-title`,className:V(`cn-font-heading text-base font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2`,e),...t})}function jf({className:e,...t}){return(0,H.jsx)(M,{"data-slot":`alert-dialog-description`,className:V(`text-sm text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground`,e),...t})}function Mf({className:e,variant:t=`default`,size:n=`default`,...r}){return(0,H.jsx)(G,{variant:t,size:n,asChild:!0,children:(0,H.jsx)(Se,{"data-slot":`alert-dialog-action`,className:V(e),...r})})}function Nf({className:e,variant:t=`outline`,size:n=`default`,...r}){return(0,H.jsx)(G,{variant:t,size:n,asChild:!0,children:(0,H.jsx)(we,{"data-slot":`alert-dialog-cancel`,className:V(e),...r})})}var Pf=d(`group/bubble relative flex w-fit max-w-[80%] min-w-0 flex-col gap-1 group-data-[align=end]/message:self-end data-[align=end]:self-end data-[variant=ghost]:max-w-full`,{variants:{variant:{default:`*:data-[slot=bubble-content]:bg-primary *:data-[slot=bubble-content]:text-primary-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-primary/80`,secondary:`*:data-[slot=bubble-content]:bg-secondary *:data-[slot=bubble-content]:text-secondary-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)]`,muted:`*:data-[slot=bubble-content]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[color-mix(in_oklch,var(--muted),var(--foreground)_5%)]`,tinted:`*:data-[slot=bubble-content]:bg-[oklch(from_var(--primary)_0.93_calc(c*0.4)_h)] *:data-[slot=bubble-content]:text-foreground dark:*:data-[slot=bubble-content]:bg-[oklch(from_var(--primary)_0.3_calc(c*0.4)_h)] [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[oklch(from_var(--primary)_0.88_calc(c*0.5)_h)] dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-[oklch(from_var(--primary)_0.35_calc(c*0.5)_h)]`,outline:`*:data-[slot=bubble-content]:border-border *:data-[slot=bubble-content]:bg-background [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-input/30`,ghost:`border-none *:data-[slot=bubble-content]:rounded-none *:data-[slot=bubble-content]:bg-transparent *:data-[slot=bubble-content]:p-0 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted/50`,destructive:`*:data-[slot=bubble-content]:bg-destructive/10 *:data-[slot=bubble-content]:text-destructive dark:*:data-[slot=bubble-content]:bg-destructive/20 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/20 dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/30`}},defaultVariants:{variant:`default`}});function Ff({variant:e=`default`,align:t=`start`,className:n,...r}){return(0,H.jsx)(`div`,{"data-slot":`bubble`,"data-variant":e,"data-align":t,className:V(Pf({variant:e}),n),...r})}function If({asChild:e=!1,className:t,...n}){let r=e?ht:`div`;return(0,H.jsx)(r,{"data-slot":`bubble-content`,className:V(`w-fit max-w-full min-w-0 overflow-hidden rounded-xl border border-transparent px-3 py-2 text-sm leading-relaxed wrap-break-word group-data-[align=end]/bubble:self-end [button]:text-left [button,a]:transition-colors [button,a]:outline-none [button,a]:focus-visible:border-ring [button,a]:focus-visible:ring-3 [button,a]:focus-visible:ring-ring/50`,t),...n})}d(`absolute z-10 flex w-fit shrink-0 items-center justify-center gap-1 rounded-full bg-muted px-1.5 py-0.5 text-sm ring-3 ring-card has-[button]:p-0`,{variants:{side:{top:`top-0 -translate-y-3/4`,bottom:`bottom-0 translate-y-3/4`},align:{start:`left-3`,end:`right-3`}},defaultVariants:{side:`bottom`,align:`end`}});function Z({className:e,type:t,...n}){return(0,H.jsx)(`input`,{type:t,"data-slot":`input`,className:V(`h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40`,e),...n})}function Lf({className:e,...t}){return(0,H.jsx)(`textarea`,{"data-slot":`textarea`,className:V(`flex field-sizing-content min-h-16 w-full rounded-lg border border-input bg-transparent px-2.5 py-2 text-base transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40`,e),...t})}function Rf({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`input-group`,role:`group`,className:V(`group/input-group relative flex h-8 w-full min-w-0 items-center rounded-lg border border-input transition-colors outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-disabled:bg-input/50 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto dark:bg-input/30 dark:has-disabled:bg-input/80 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5`,e),...t})}var zf=d(`flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4`,{variants:{align:{"inline-start":`order-first pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem]`,"inline-end":`order-last pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem]`,"block-start":`order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2`,"block-end":`order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2`}},defaultVariants:{align:`inline-start`}});function Bf({className:e,align:t=`inline-start`,...n}){return(0,H.jsx)(`div`,{role:`group`,"data-slot":`input-group-addon`,"data-align":t,className:V(zf({align:t}),e),onClick:e=>{e.target.closest(`button`)||e.currentTarget.parentElement?.querySelector(`input`)?.focus()},...n})}var Vf=d(`flex items-center gap-2 text-sm shadow-none`,{variants:{size:{xs:`h-6 gap-1 rounded-[calc(var(--radius)-3px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5`,sm:``,"icon-xs":`size-6 rounded-[calc(var(--radius)-3px)] p-0 has-[>svg]:p-0`,"icon-sm":`size-8 p-0 has-[>svg]:p-0`}},defaultVariants:{size:`xs`}});function Hf({className:e,type:t=`button`,variant:n=`ghost`,size:r=`xs`,...i}){return(0,H.jsx)(G,{type:t,"data-size":r,variant:n,className:V(Vf({size:r}),e),...i})}function Uf({className:e,...t}){return(0,H.jsx)(Z,{"data-slot":`input-group-control`,className:V(`flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent`,e),...t})}function Wf({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`message-group`,className:V(`flex min-w-0 flex-col gap-2`,e),...t})}function Gf({className:e,align:t=`start`,...n}){return(0,H.jsx)(`div`,{"data-slot":`message`,"data-align":t,className:V(`group/message relative flex w-full min-w-0 gap-2 text-sm data-[align=end]:flex-row-reverse`,e),...n})}function Kf({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`message-content`,className:V(`flex w-full min-w-0 flex-col gap-2.5 wrap-break-word group-data-[align=end]/message:*:data-slot:self-end`,e),...t})}function qf({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`message-header`,className:V(`flex max-w-full min-w-0 items-center px-3 text-xs font-medium text-muted-foreground group-has-data-[variant=ghost]/message:px-0`,e),...t})}function Jf({className:e,size:t=`default`,...n}){return(0,H.jsxs)(`div`,{className:V(`group/native-select relative w-fit has-[select:disabled]:opacity-50`,e),"data-slot":`native-select-wrapper`,"data-size":t,children:[(0,H.jsx)(`select`,{"data-slot":`native-select`,"data-size":t,className:`h-8 w-full min-w-0 appearance-none rounded-lg border border-input bg-transparent py-1 pr-8 pl-2.5 text-sm transition-colors outline-none select-none selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] data-[size=sm]:py-0.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40`,...n}),(0,H.jsx)(Vt,{className:`pointer-events-none absolute top-1/2 right-2.5 size-4 -translate-y-1/2 text-muted-foreground select-none`,"aria-hidden":`true`,"data-slot":`native-select-icon`})]})}function Yf({className:e,...t}){return(0,H.jsx)(`option`,{"data-slot":`native-select-option`,className:V(`bg-[Canvas] text-[CanvasText]`,e),...t})}var Xf=`min-h-16 w-full flex-1 px-2.5 py-2 text-sm`;function Zf(e,t){let n=Math.max(0,Math.round((t-new Date(e).getTime())/6e4));return n<1?`now`:n<60?`${n}m`:n<1440?`${Math.floor(n/60)}h`:`${Math.floor(n/1440)}d`}var Qf=3e4;function $f({iso:e,className:t}){let[n,r]=(0,P.useState)(()=>Date.now());return(0,P.useEffect)(()=>{let e=setInterval(()=>r(Date.now()),Qf);return()=>clearInterval(e)},[]),(0,H.jsx)(`time`,{dateTime:e,className:t,children:Zf(e,n)})}var ep={user:`You`,agent:`Agent`,reviewer:`Reviewer`},tp={owner:`Admin`,admin:`Admin`,member:`Member`,reviewer:`Reviewer`,guest:`Guest`};function np(e){return tp[e]}function rp(e){if(e.kind!==`agent`){if(e.publisher??(e.kind===`user`&&e.displayName!==void 0))return`publisher`;if(e.role===`guest`)return`guest`}}var ip={publisher:{label:`Publisher`,Icon:Kt},guest:{label:`Guest`,Icon:Ir}};function ap(e,t){return!t||!e.accountId?`unknown`:e.accountId===t?`mine`:`theirs`}function op(e){return t=>{let{author:n}=t;if(n.kind===`agent`)return{align:`start`,variant:`muted`,name:ep.agent};let r={role:n.role?np(n.role):void 0,marker:rp(n)},i=ap(n,e);return i===`mine`||i===`unknown`&&n.kind===`user`?{align:`end`,variant:`default`,name:ep.user,...r}:{align:`start`,variant:`outline`,...r}}}function sp(e){return t=>{let n=ap(t.author,e);return n===`unknown`?t.author.kind!==`reviewer`:n===`mine`}}function cp(e){return t=>t.scope===`local`||e&&t.manage!==!1}var lp=op(void 0),up=sp(void 0),dp=`Comment deleted`;function fp({messages:e,onDelete:t,voice:n=lp,canDelete:r=up}){return(0,H.jsx)(Wf,{className:`mt-2 gap-3`,children:e.map(e=>{let i=e.deletedAt!==void 0,a=t&&!i&&r(e),{align:o,variant:s,badge:c,name:l,role:u,marker:d}=n(e),f=d?ip[d]:void 0;return(0,H.jsx)(Gf,{align:o,children:(0,H.jsxs)(Kf,{className:`gap-1`,children:[(0,H.jsxs)(qf,{className:`gap-1.5 px-3`,children:[(0,H.jsx)(`span`,{title:u,className:`truncate`,children:l??e.author.displayName??ep[e.author.kind]}),f?(0,H.jsx)(f.Icon,{size:11,role:`img`,"aria-label":f.label,className:`-ml-0.5 shrink-0 text-muted-foreground`,"data-author-marker":d,children:(0,H.jsx)(`title`,{children:f.label})}):null,c?(0,H.jsx)(U,{variant:`outline`,className:`px-1 py-0 text-[9px] uppercase`,children:c}):null,(0,H.jsx)($f,{iso:e.createdAt,className:`ml-auto font-normal`}),a?(0,H.jsx)(`button`,{type:`button`,className:`-mr-1 rounded p-0.5 opacity-0 transition-opacity hover:text-destructive focus-visible:opacity-100 group-hover/message:opacity-100`,title:`Delete this comment`,"aria-label":`Delete this comment`,onClick:()=>t(e.id),children:(0,H.jsx)(Ar,{size:11})}):null]}),i?(0,H.jsx)(Ff,{variant:`ghost`,children:(0,H.jsx)(If,{className:`text-xs italic text-muted-foreground`,children:dp})}):(0,H.jsx)(Ff,{variant:s,children:(0,H.jsx)(If,{children:(0,H.jsx)(Rd,{body:e.body})})})]})},e.id)})})}function pp(e){let t=e.messages.find(e=>!e.deletedAt)?.body;return t===void 0?dp:Id(t)}function mp(e,t){if(t.kind===`thread`){let t=e.anchor?`The conversation and its pin go`:`The conversation goes`;return e.scope===`shared`?`${t} for everyone on the share link, replies included, for good.`:`${t}, for good.`}return e.scope===`shared`?`Anyone who has already read it will see that something was here, but not what it said.`:e.messages.length===1?`It's the only comment on this thread, so the thread goes with it.`:`It goes for good. The rest of the thread stays.`}function hp(e){return e.anchor?e.anchor.kind===`node`?`Pinned comment`:`Board pin`:`Board-wide`}function gp({thread:e,number:t,showScope:n}){let r=e.anchorState.status===`stale`?`border-destructive/40 bg-destructive/10 text-destructive group-hover/thread:bg-destructive group-hover/thread:text-destructive-foreground`:`border-primary/30 bg-primary/10 text-primary group-hover/thread:bg-primary group-hover/thread:text-primary-foreground`;return(0,H.jsxs)(`span`,{"aria-hidden":!0,className:`flex h-6 shrink-0 items-center gap-0.5 border px-1.5 text-[11px] font-semibold tabular-nums transition-colors ${e.anchor?`rounded-full ${r}`:`rounded-md border-dashed border-border bg-muted text-muted-foreground`}`,children:[e.anchor?n&&e.scope===`shared`?(0,H.jsx)(qt,{size:9}):(0,H.jsx)(Nn,{size:9}):null,t]})}function _p(){return(0,H.jsx)(`span`,{"aria-hidden":!0,className:`text-border`,children:`•`})}function vp({thread:e,onOpen:t,actions:n=1}){let r=e.messages[0];if(!r)return null;let i=e.messages.length-1,a=r.author.displayName??ep[r.author.kind];return(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,"data-comment-preview":e.id,children:[(0,H.jsxs)(`div`,{className:`flex items-baseline gap-2 text-xs ${n>1?`pr-14`:`pr-7`}`,children:[(0,H.jsx)(`span`,{className:`font-medium text-foreground`,children:a}),(0,H.jsx)($f,{iso:r.createdAt,className:`text-muted-foreground`}),e.status===`resolved`?(0,H.jsx)(`span`,{className:`text-muted-foreground`,children:`· Resolved`}):null]}),e.branch?(0,H.jsx)(yp,{branch:e.branch,className:`-mt-1 text-[11px] text-muted-foreground`}):null,r.deletedAt?(0,H.jsx)(`p`,{className:`text-[13px] italic text-muted-foreground`,children:`Deleted`}):(0,H.jsx)(Rd,{body:r.body,className:`max-h-24 overflow-hidden text-[13px] leading-relaxed text-foreground/85`}),(0,H.jsxs)(`div`,{className:`flex items-center justify-between gap-2 text-xs text-muted-foreground`,children:[(0,H.jsx)(`span`,{children:i===0?`No replies`:i===1?`1 reply`:`${i} replies`}),t?(0,H.jsx)(`button`,{type:`button`,className:`font-medium text-foreground underline-offset-2 hover:underline`,onClick:t,children:`Open thread`}):null]})]})}function yp({branch:e,className:t}){return(0,H.jsxs)(`span`,{className:`inline-flex min-w-0 items-center gap-1 ${t??``}`,title:`On the link published from ${e}`,children:[(0,H.jsx)(cn,{size:11,className:`shrink-0`}),(0,H.jsx)(`span`,{className:`truncate font-mono`,children:e})]})}var bp={1:`pr-8`,2:`pr-12`,3:`pr-16`};function xp({thread:e,number:t,onOpen:n,onLocate:r,onResolve:i,onDelete:a,showScope:o=!0}){let s=e.scope===`shared`,c=e.anchorState.status===`stale`,l=e.messages.length-1,u=+!!e.anchor+ +!!i+ +!!a,d=e.status===`resolved`;return(0,H.jsxs)(`li`,{className:`group/thread relative rounded-lg border bg-card shadow-sm transition-colors hover:bg-accent/40 ${c?`border-destructive/30`:`hover:border-primary/40`} ${e.status===`resolved`?`opacity-75`:``}`,"data-comment-row":e.id,children:[(0,H.jsxs)(`button`,{type:`button`,className:`flex w-full items-start gap-2 p-2.5 text-left ${bp[u]??``}`,onClick:n,children:[(0,H.jsx)(gp,{thread:e,number:t,showScope:o}),(0,H.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,H.jsx)(`span`,{className:`line-clamp-2 text-sm leading-snug ${e.status===`resolved`?`text-muted-foreground`:``}`,children:pp(e)}),(0,H.jsxs)(`span`,{className:`mt-1.5 flex flex-wrap items-center gap-x-1.5 gap-y-1 text-[11px] text-muted-foreground`,children:[o?(0,H.jsxs)(H.Fragment,{children:[(0,H.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[s?(0,H.jsx)(qt,{size:11}):(0,H.jsx)(Nn,{size:11}),s?`Cloud`:`Local`]}),(0,H.jsx)(_p,{})]}):null,(0,H.jsx)(`span`,{children:hp(e)}),(0,H.jsx)(_p,{}),(0,H.jsx)($f,{iso:e.updatedAt}),l>0?(0,H.jsxs)(U,{variant:`secondary`,className:`h-4 gap-0.5 px-1.5 text-[10px] tabular-nums`,children:[(0,H.jsx)(or,{}),l]}):null,c?(0,H.jsx)(U,{variant:`destructive`,className:`h-4 px-1.5 text-[10px]`,children:`Target changed`}):null,e.status===`resolved`?(0,H.jsxs)(U,{variant:`outline`,className:`h-4 gap-0.5 px-1.5 text-[10px]`,children:[(0,H.jsx)(Bt,{}),`Resolved`]}):null]}),e.branch?(0,H.jsx)(yp,{branch:e.branch,className:`mt-1 max-w-full text-[11px] text-muted-foreground`}):null]})]}),u>0?(0,H.jsxs)(`div`,{className:`absolute right-1.5 top-1.5 flex items-center ${xf} rounded-md border bg-popover px-px py-px text-popover-foreground opacity-0 shadow-sm transition-opacity focus-within:opacity-100 group-hover/thread:opacity-100`,children:[e.anchor?(0,H.jsx)(`button`,{type:`button`,className:yf,"aria-label":`Go to comment ${t}`,title:`Go to comment on canvas`,onClick:r,children:(0,H.jsx)(Zt,{...Sf})}):null,i?(0,H.jsx)(`button`,{type:`button`,className:yf,"aria-label":`${d?`Reopen`:`Resolve`} thread ${t}`,title:d?`Reopen this thread`:`Resolve this thread`,onClick:i,children:d?(0,H.jsx)(sr,{...Sf}):(0,H.jsx)(Bt,{...Sf})}):null,a?(0,H.jsx)(`button`,{type:`button`,className:bf,"aria-label":`Delete thread ${t}`,title:`Delete this thread`,onClick:a,children:(0,H.jsx)(Ar,{...Sf})}):null]}):null]})}function Sp({status:e,onStatusChange:t,count:n,onAdd:r,children:i}){return(0,H.jsxs)(`div`,{className:`space-y-2 border-b px-3 py-2`,children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,H.jsxs)(Jf,{"aria-label":`Comment status`,size:`sm`,className:`w-auto text-xs`,value:e,onChange:e=>t(e.target.value),children:[(0,H.jsx)(Yf,{value:`open`,children:`Open`}),(0,H.jsx)(Yf,{value:`resolved`,children:`Resolved`}),(0,H.jsx)(Yf,{value:`all`,children:`All`})]}),(0,H.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:n}),(0,H.jsxs)(G,{variant:`outline`,size:`sm`,className:`ml-auto`,title:`Pin a new comment on the canvas`,onClick:r,children:[(0,H.jsx)(nr,{}),` Add`]})]}),i]})}function Cp({status:e}){return(0,H.jsx)(Ku,{className:`h-full`,children:(0,H.jsxs)(qu,{children:[(0,H.jsx)(Yu,{variant:`icon`,children:(0,H.jsx)(Nn,{})}),(0,H.jsxs)(Xu,{children:[`No `,e===`all`?``:`${e} `,`comments on this board.`]}),(0,H.jsx)(Zu,{children:`Add a pin on the canvas or start a broad thread below.`})]})})}function wp({children:e}){return(0,H.jsx)(`p`,{className:`mt-1.5 rounded-md border border-destructive/40 bg-destructive/10 px-2 py-1.5 text-[11px] text-destructive`,"data-comment-failure":!0,role:`alert`,children:e})}function Tp({draft:e,onDraftChange:t,onSubmit:n,failure:r,busy:i=!1,target:a,help:o,className:s=``}){return(0,H.jsxs)(`div`,{className:`border-t p-3 ${s}`,"data-board-comment-composer":!0,children:[(0,H.jsxs)(Rf,{children:[(0,H.jsx)(hf,{dataSlot:`input-group-control`,ariaLabel:`Start board-wide thread`,value:e,onChange:t,placeholder:`Start a broad thread about this board…`,className:Xf,onKeyDown:Od(n)}),(0,H.jsxs)(Bf,{align:`block-end`,className:`flex-wrap`,children:[a,(0,H.jsx)(Hf,{variant:`default`,className:`ml-auto`,disabled:i||!e.trim(),onClick:n,children:i?`Posting…`:r?`Try again`:`Start thread`})]})]}),r?(0,H.jsx)(wp,{children:r}):null,(0,H.jsxs)(`p`,{className:`mt-1.5 text-[11px] text-muted-foreground`,children:[`Board-wide threads have no canvas pin.`,o?(0,H.jsxs)(H.Fragment,{children:[` `,o]}):null]})]})}function Ep({thread:e,showScope:t=!0,voice:n,canDelete:r,onBack:i,onRequestDelete:a,replyDraft:o,onReplyDraftChange:s,onReply:c,canReply:l=!0,replyFallback:u,busy:d=!1,onResolve:f,children:p}){let m=e.status===`open`;return(0,H.jsxs)(`div`,{className:`flex min-h-full flex-col p-3`,"data-active-comment":e.id,children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,H.jsx)(G,{variant:`ghost`,size:`sm`,onClick:i,children:`← Threads`}),(0,H.jsxs)(`span`,{className:`ml-auto flex items-center gap-1 text-[11px] text-muted-foreground`,children:[t?(0,H.jsxs)(H.Fragment,{children:[e.scope===`shared`?(0,H.jsx)(qt,{size:11}):(0,H.jsx)(Nn,{size:11}),e.scope===`shared`?`Cloud`:`Local`]}):null,(0,H.jsx)(`span`,{children:e.anchorState.status===`stale`?`Target changed`:e.anchor?`Pinned`:`Board-wide`})]})]}),(0,H.jsx)(fp,{messages:e.messages,voice:n,canDelete:r,onDelete:t=>a({kind:`message`,threadId:e.id,id:t})}),m&&l?(0,H.jsxs)(Rf,{className:`mt-3`,children:[(0,H.jsx)(hf,{dataSlot:`input-group-control`,ariaLabel:`Reply`,value:o,onChange:s,placeholder:`Reply…`,className:Xf,onKeyDown:Od(c)}),(0,H.jsx)(Bf,{align:`block-end`,children:(0,H.jsx)(Hf,{variant:`default`,className:`ml-auto`,disabled:d||!o.trim(),onClick:c,children:`Reply`})})]}):m?u:null,f||p?(0,H.jsxs)(`div`,{className:`mt-auto grid grid-cols-2 gap-2 pt-4`,children:[f?(0,H.jsx)(G,{variant:`outline`,size:`sm`,className:p?``:`col-span-2`,disabled:d,onClick:f,children:m?(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(Bt,{}),` Resolve`]}):(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(sr,{}),` Reopen`]})}):null,p]}):null]})}function Dp({thread:e,onRequestDelete:t}){return(0,H.jsxs)(G,{variant:`ghost`,size:`sm`,className:`col-span-2 text-destructive`,onClick:()=>t({kind:`thread`,threadId:e.id}),children:[(0,H.jsx)(Ar,{}),` Delete thread`]})}function Op({thread:e,pending:t,onCancel:n,onConfirm:r,onResolveInstead:i}){let a=e!==null&&t!==null,o=i!==void 0&&t?.kind===`thread`&&e?.status===`open`;return(0,H.jsx)(Cf,{open:a,onOpenChange:e=>{e||n()},children:(0,H.jsxs)(Ef,{"data-comment-delete-confirm":!0,children:[(0,H.jsxs)(Df,{children:[(0,H.jsx)(kf,{className:`text-destructive`,children:(0,H.jsx)(Ar,{})}),(0,H.jsx)(Af,{children:t?.kind===`message`?`Delete comment`:`Delete thread`}),(0,H.jsx)(jf,{children:e&&t?mp(e,t):``})]}),(0,H.jsxs)(Of,{children:[(0,H.jsx)(Nf,{children:`Cancel`}),o?(0,H.jsxs)(Mf,{variant:`outline`,onClick:i,children:[(0,H.jsx)(Bt,{}),` Resolve instead`]}):null,(0,H.jsx)(Mf,{variant:`destructive`,onClick:r,children:`Delete`})]})]})})}function kp(e,t,n,r){let i=e.anchor;if(!i)return null;if(i.kind===`board`)return{left:`${i.x}px`,top:`${i.y}px`};let a=t.find(e=>e.id===i.frameId);if(!a)return null;let o=n[a.id]??{x:0,y:0},s=e.anchorState.status===`attached`?e.anchorState.resolvedPath.join(`.`):null,c=(s===null?void 0:r[a.id]?.[s])??i.bounds,l=a.x+o.x,u=a.y+o.y;return{left:wd(l+c.x+c.w,l,l+a.w),top:wd(u+c.y,u,u+a.h)}}var Ap=()=>!0,jp=160;function Mp({threads:e,frames:t,insets:n,nodeRects:r,activeId:i,onOpen:a,onResolve:o,onDelete:s,actionable:c=Ap,preview:l=!1,showScope:u=!0}){let d=(0,P.useMemo)(()=>Sd(e),[e]),f=new Map,[p,m]=(0,P.useState)(null),[h,g]=(0,P.useState)(null),_=(0,P.useRef)(null);(0,P.useEffect)(()=>()=>{_.current&&clearTimeout(_.current)},[]),(0,P.useEffect)(()=>{let t=p?e.find(e=>e.id===p):void 0;if(!l||!s||!p||!t||!c(t))return;let n=e=>{(e.key===`Delete`||e.key===`Backspace`)&&(e.target?.closest(`input, textarea, [contenteditable='true']`)||(e.preventDefault(),s(p)))};return window.addEventListener(`keydown`,n),()=>window.removeEventListener(`keydown`,n)},[l,s,p,e,c]);let v=e=>{_.current&&clearTimeout(_.current),m(e)},y=()=>{_.current&&clearTimeout(_.current),_.current=setTimeout(()=>m(null),jp)};return(0,H.jsx)(`div`,{className:`pointer-events-none absolute inset-0`,"data-velloo-comment-pins":!0,children:e.map(e=>{let m=kp(e,t,n,r);if(!m)return null;let _=Dd(m),b=f.get(_)??0;f.set(_,b+1);let x=e.anchorState.status===`stale`,S=i===e.id||h===e.id,C=l&&(h===e.id||p===e.id),w=c(e),T=w?o:void 0,E=w?s:void 0;return(0,H.jsxs)(`div`,{children:[(0,H.jsx)(`button`,{type:`button`,"data-comment-thread":e.id,"data-anchor-state":e.anchorState.status,"aria-expanded":l?C:void 0,className:`pointer-events-auto absolute grid h-7 min-w-7 place-items-center hover:z-10 rounded-full border px-1.5 text-[11px] font-semibold shadow-md transition-[scale] hover:scale-110 ${x?`border-destructive bg-destructive text-destructive-foreground`:S?`border-primary bg-primary text-primary-foreground ring-2 ring-primary/30`:`border-primary/40 bg-card text-foreground`}`,style:{...m,translate:Ed(b),transform:`scale(calc(1 / var(--canvas-zoom, 1)))`},title:l?void 0:x?`Comment target changed`:`Open comment thread`,onPointerDown:e=>e.stopPropagation(),onMouseEnter:l?()=>v(e.id):void 0,onMouseLeave:l?y:void 0,onClick:t=>{t.stopPropagation(),l?g(t=>t===e.id?null:e.id):a(e.id)},onKeyDown:t=>{(t.key===`Delete`||t.key===`Backspace`)&&E?(t.preventDefault(),t.stopPropagation(),E(e.id)):t.key===`Escape`&&h===e.id&&(t.preventDefault(),t.stopPropagation(),g(null))},children:(0,H.jsxs)(`span`,{className:`flex items-center gap-0.5`,children:[u&&e.scope===`shared`?(0,H.jsx)(qt,{size:10}):(0,H.jsx)(Nn,{size:10}),d.get(e.id)]})}),C?(0,H.jsx)(`div`,{className:`pointer-events-auto absolute z-20`,style:{...m,transform:`scale(calc(1 / var(--canvas-zoom, 1)))`,transformOrigin:`top left`},onMouseEnter:()=>v(e.id),onMouseLeave:y,onPointerDown:e=>e.stopPropagation(),children:(0,H.jsxs)(`div`,{className:`relative ml-4 mt-4 w-64 rounded-lg border border-border bg-popover p-3 shadow-lg`,children:[(0,H.jsxs)(`div`,{className:`absolute right-2 top-2 flex items-center gap-0.5`,children:[T?(0,H.jsx)(`button`,{type:`button`,"aria-label":e.status===`resolved`?`Reopen thread`:`Resolve thread`,title:e.status===`resolved`?`Reopen thread`:`Resolve thread`,className:`flex size-6 items-center justify-center rounded-md text-muted-foreground hover:bg-accent hover:text-foreground`,onClick:t=>{t.stopPropagation(),T(e.id)},children:e.status===`resolved`?(0,H.jsx)(sr,{size:13}):(0,H.jsx)(Bt,{size:13})}):null,E?(0,H.jsx)(`button`,{type:`button`,"aria-label":`Delete comment`,title:`Delete comment`,"data-comment-trash":!0,className:`flex size-6 items-center justify-center rounded-md text-muted-foreground hover:bg-destructive/10 hover:text-destructive`,onClick:t=>{t.stopPropagation(),E(e.id)},children:(0,H.jsx)(Ar,{size:13})}):null]}),(0,H.jsx)(vp,{thread:e,onOpen:()=>a(e.id),actions:+!!T+ +!!E}),x?(0,H.jsx)(`p`,{className:`mt-2 text-xs text-destructive`,children:`Its target has changed.`}):null]})}):null]},e.id)})})}function Np(){let e=W(e=>e.markupVisible),t=W(e=>e.commentThreads),n=W(e=>e.activeCommentId),r=W(e=>e.currentBoardId?e.boards[e.currentBoardId]:void 0),i=W(e=>e.nodeRects),a=W(e=>e.frameInsets),o=W(e=>e.setActiveComment),s=W(e=>e.deleteComment),c=W(e=>e.setCommentResolved),l=W(e=>e.authStatus?.loggedIn===!0),u=(0,P.useMemo)(()=>cp(l),[l]),[d,f]=(0,P.useState)(null);if(!e||!r)return null;let p=d?t.find(e=>e.id===d)??null:null;return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(Mp,{threads:t,frames:r.frames,insets:a,nodeRects:i,activeId:n,onOpen:o,preview:!0,onResolve:e=>{let n=t.find(t=>t.id===e);n&&c(e,n.status===`open`)},onDelete:f,actionable:u}),(0,H.jsx)(Op,{thread:p,pending:p?{kind:`thread`,threadId:p.id}:null,onCancel:()=>f(null),onConfirm:()=>{f(null),p&&s(p.id)},onResolveInstead:()=>{f(null),p&&c(p.id,!0)}})]})}function Pp({className:e,orientation:t=`horizontal`,decorative:n=!0,...r}){return(0,H.jsx)(ut,{"data-slot":`separator`,decorative:n,orientation:t,className:V(`shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch`,e),...r})}function Fp({className:e,...t}){return(0,H.jsx)(`fieldset`,{"data-slot":`field-set`,className:V(`flex flex-col gap-4 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3`,e),...t})}function Ip({className:e,variant:t=`legend`,...n}){return(0,H.jsx)(`legend`,{"data-slot":`field-legend`,"data-variant":t,className:V(`mb-1.5 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base`,e),...n})}function Lp({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`field-group`,className:V(`group/field-group @container/field-group flex w-full flex-col gap-5 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4`,e),...t})}var Rp=d(`group/field flex w-full gap-2 data-[invalid=true]:text-destructive`,{variants:{orientation:{vertical:`flex-col *:w-full [&>.sr-only]:w-auto`,horizontal:`flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px`,responsive:`flex-col *:w-full @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:*:data-[slot=field-label]:flex-auto [&>.sr-only]:w-auto @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px`}},defaultVariants:{orientation:`vertical`}});function zp({className:e,orientation:t=`vertical`,...n}){return(0,H.jsx)(`div`,{role:`group`,"data-slot":`field`,"data-orientation":t,className:V(Rp({orientation:t}),e),...n})}function Bp({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`field-content`,className:V(`group/field-content flex flex-1 flex-col gap-0.5 leading-snug`,e),...t})}function Vp({className:e,...t}){return(0,H.jsx)(K,{"data-slot":`field-label`,className:V(`group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50 has-data-checked:border-primary/30 has-data-checked:bg-primary/5 has-[>[data-slot=field]]:rounded-lg has-[>[data-slot=field]]:border has-[>[data-slot=field]]:not-has-[:disabled,[data-disabled]]:hover:bg-muted/50 has-[>[data-slot=field]]:has-[:focus-visible]:border-ring has-[>[data-slot=field]]:has-[:focus-visible]:ring-3 has-[>[data-slot=field]]:has-[:focus-visible]:ring-ring/50 *:data-[slot=field]:p-2.5 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10`,`has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col`,e),...t})}function Hp({className:e,...t}){return(0,H.jsx)(`p`,{"data-slot":`field-description`,className:V(`text-left text-sm leading-normal font-normal text-muted-foreground group-has-data-horizontal/field:text-balance [[data-variant=legend]+&]:-mt-1.5`,`last:mt-0 nth-last-2:-mt-1`,`[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary`,e),...t})}function Up({className:e,children:t,errors:n,...r}){let i=(0,P.useMemo)(()=>{if(t)return t;if(!n?.length)return null;let e=[...new Map(n.map(e=>[e?.message,e])).values()];return e?.length==1?e[0]?.message:(0,H.jsx)(`ul`,{className:`ml-4 flex list-disc flex-col gap-1`,children:e.map((e,t)=>e?.message&&(0,H.jsx)(`li`,{children:e.message},t))})},[t,n]);return i?(0,H.jsx)(`div`,{role:`alert`,"data-slot":`field-error`,className:V(`text-sm font-normal text-destructive`,e),...r,children:i}):null}function Wp({...e}){return(0,H.jsx)(fe,{"data-slot":`popover`,...e})}function Gp({...e}){return(0,H.jsx)(me,{"data-slot":`popover-trigger`,...e})}function Kp({className:e,align:t=`center`,sideOffset:n=4,...r}){return(0,H.jsx)(N,{children:(0,H.jsx)(Ue,{"data-slot":`popover-content`,align:t,sideOffset:n,className:V(`z-50 flex w-72 origin-(--radix-popover-content-transform-origin) flex-col gap-2.5 rounded-lg bg-popover p-2.5 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95`,e),...r})})}function qp({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`popover-header`,className:V(`flex flex-col gap-0.5 text-sm`,e),...t})}function Jp({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`popover-title`,className:V(`font-medium`,e),...t})}var Yp=d(`group/toggle inline-flex items-center justify-center gap-1 rounded-lg text-sm font-medium whitespace-nowrap transition-all outline-none hover:bg-muted hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-pressed:bg-muted data-[state=on]:bg-muted dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,{variants:{variant:{default:`bg-transparent`,outline:`border border-input bg-transparent hover:bg-muted`},size:{default:`h-8 min-w-8 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2`,sm:`h-7 min-w-7 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5`,lg:`h-9 min-w-9 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2`}},defaultVariants:{variant:`default`,size:`default`}}),Xp=P.createContext({size:`default`,variant:`default`,spacing:2,orientation:`horizontal`});function Zp({className:e,variant:t,size:n,spacing:r=2,orientation:i=`horizontal`,children:a,...o}){return(0,H.jsx)(it,{"data-slot":`toggle-group`,"data-variant":t,"data-size":n,"data-spacing":r,"data-orientation":i,style:{"--gap":r},className:V(`group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] rounded-lg data-[size=sm]:rounded-[min(var(--radius-md),10px)] data-vertical:flex-col data-vertical:items-stretch`,e),...o,children:(0,H.jsx)(Xp.Provider,{value:{variant:t,size:n,spacing:r,orientation:i},children:a})})}function Qp({className:e,children:t,variant:n=`default`,size:r=`default`,...i}){let a=P.useContext(Xp);return(0,H.jsx)(Ae,{"data-slot":`toggle-group-item`,"data-variant":a.variant||n,"data-size":a.size||r,"data-spacing":a.spacing,className:V(`shrink-0 group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 focus:z-10 focus-visible:z-10 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-end]:pr-1.5 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-start]:pl-1.5 group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-lg group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-lg group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-lg group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-lg group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t`,Yp({variant:a.variant||n,size:a.size||r}),e),...i,children:t})}function $p(e,t){let n=e.getBoundingClientRect(),r=W.getState().canvasZoom||1;return{x:(t.clientX-n.left)/r,y:(t.clientY-n.top)/r}}var em={min:.06,max:.94};function tm(){let e=W(e=>e.markupVisible),t=W(e=>e.currentBoardId?e.boards[e.currentBoardId]:void 0),n=W(e=>e.frameInsets),r=W(e=>e.frameDrafts),i=W(e=>e.flowDraft),a=W(e=>e.screens),o=W(e=>e.canvasZoom),s=W(e=>e.setActiveFlowEdge);if(!e||!t)return null;let c=t.frames.map(e=>({...e,...r[e.id]})),l=e=>{let n=t.frames.find(t=>t.id===e);return n?.label??(n?a[n.screen]?.name:void 0)??e},u=yu({frameInsets:n,frameDrafts:r,canvasZoom:o},t),d=i?u.find(e=>e.id===i.from):void 0,f=i&&d?Ul(u.filter(e=>e.id!==i.from),i,16/(o||1)):null,p=f?u.find(e=>e.id===f):void 0;return(0,H.jsx)(_u,{frames:c,insets:n,zoom:o,edges:hi(t),onPick:e=>s({from:e.from,to:e.to}),label:({routed:e,near:t,onNear:n})=>(0,H.jsx)(nm,{routed:e,near:t,onNear:n,fromName:l(e.edge.from),toName:l(e.edge.to)}),overlay:i&&d?(0,H.jsxs)(`g`,{className:`text-primary`,children:[p?(0,H.jsx)(`rect`,{"data-flow-drop-target":f,x:p.x,y:p.y,width:p.w,height:p.h,rx:`6`,fill:`none`,stroke:`currentColor`,style:{strokeWidth:tu(2)}}):null,(0,H.jsx)(du,{route:Vl(d,i),dashed:!0})]}):void 0})}function nm({routed:e,near:t,onNear:n,fromName:r,toName:i}){let{key:a,edge:o,route:s}=e,c={from:o.from,to:o.to},l=W(e=>vu(e.activeFlowEdge,c)),[u,d]=(0,P.useState)(null),f=W(e=>e.setActiveFlowEdge),p=W(e=>e.connectFrames),[m,h]=(0,P.useState)(o.label??``),g=(0,P.useId)();(0,P.useEffect)(()=>h(o.label??``),[o.label]);let _=()=>{let e=m.trim();e!==(o.label??``)&&p([{...c,label:e===``?null:e}])},v=o.state===void 0||mi.includes(o.state)?[...mi]:[...mi,o.state],y=o.label===void 0&&o.state===void 0;return(0,H.jsx)(mu,{routed:e,at:u,bare:y,near:t,forward:l||u!==null,onNear:n,children:(0,H.jsxs)(Wp,{open:l,onOpenChange:e=>{e||_(),f(e?c:null)},children:[y?(0,H.jsx)(Gp,{asChild:!0,children:(0,H.jsx)(`button`,{type:`button`,"data-flow-chip":a,"aria-label":`Arrow from ${r} to ${i}`,className:`block size-2.5 rounded-full border border-border bg-background shadow-xs hover:scale-150 hover:border-primary data-[state=open]:border-primary transition-transform`})}):(0,H.jsxs)(`div`,{className:`${hu} hover:border-primary has-data-[state=open]:border-primary`,children:[(0,H.jsx)(`div`,{role:`presentation`,"data-flow-grip":a,title:`Drag to slide along the arrow`,onPointerDown:e=>{if(e.button!==0)return;let t=e.currentTarget,n=t.closest(`[data-velloo-board-world]`);if(!n)return;e.preventDefault(),e.stopPropagation(),t.setPointerCapture(e.pointerId);let r=e=>Math.min(em.max,Math.max(em.min,Yl(s,$p(n,e)))),i=e=>d(r(e)),a=()=>{t.removeEventListener(`pointermove`,i),t.removeEventListener(`pointerup`,l),t.removeEventListener(`pointercancel`,o)},o=()=>{a(),d(null)},l=e=>{a();let t=Math.round(r(e)*100)/100;d(t),p([{...c,labelAt:t}]).finally(()=>d(null))};t.addEventListener(`pointermove`,i),t.addEventListener(`pointerup`,l),t.addEventListener(`pointercancel`,o)},className:`grid h-4 w-3.5 shrink-0 cursor-grab place-items-center rounded text-muted-foreground hover:text-foreground active:cursor-grabbing`,children:(0,H.jsx)(ln,{size:12,strokeWidth:2})}),(0,H.jsx)(Gp,{asChild:!0,children:(0,H.jsx)(`button`,{type:`button`,"data-flow-chip":a,"aria-label":`Arrow from ${r} to ${i}${o.label?`: ${o.label}`:``}`,className:`flex min-w-0 items-center gap-1 rounded-full outline-none focus-visible:ring-2 focus-visible:ring-ring/50`,children:(0,H.jsx)(gu,{edge:o})})})]}),(0,H.jsxs)(Kp,{side:`top`,className:`w-80`,updatePositionStrategy:`always`,children:[(0,H.jsx)(qp,{children:(0,H.jsxs)(Jp,{className:`truncate`,children:[r,` → `,i]})}),(0,H.jsxs)(Lp,{className:`gap-3`,children:[(0,H.jsxs)(zp,{children:[(0,H.jsx)(Vp,{htmlFor:g,children:`When`}),(0,H.jsx)(Z,{id:g,value:m,maxLength:120,placeholder:o.state===void 0?`Submit`:`Email already taken`,onChange:e=>h(e.target.value),onBlur:_,onKeyDown:e=>{e.key===`Enter`&&(_(),f(null))}})]}),(0,H.jsxs)(zp,{children:[(0,H.jsx)(Vp,{children:`State of the same step`}),(0,H.jsx)(Zp,{type:`single`,variant:`outline`,size:`sm`,spacing:1,className:`flex-wrap`,value:o.state??``,onValueChange:e=>void p([{...c,state:e===``?null:e}]),children:v.map(e=>(0,H.jsx)(Qp,{value:e,"data-flow-state-option":e,children:e},e))}),(0,H.jsx)(Hp,{children:o.state===void 0?`None — this arrow leads on to another step.`:`“${i}” is “${r}” in its ${o.state} state.`})]})]}),(0,H.jsxs)(G,{variant:`destructive`,size:`sm`,className:`self-start`,onClick:()=>void p([{...c,remove:!0}]),children:[(0,H.jsx)(Ar,{"data-icon":`inline-start`}),`Remove arrow`]})]})]})})}var rm=`#2563eb`,im=`#8b5cf6`,am=`__velloo_init`;function om(e){try{return(e?.contentDocument?.querySelector(`meta[name="velloo-render-error"]`))?.getAttribute(`content`)||null}catch{return null}}function sm(e){let{frame:t,canvasDefault:n,boardTheme:r,screenRevision:i,themeVersion:a}=e,o=vi(t,n);return`${ks(t.screen,t.w,t.h,r)}&mode=${o}&canvas=1&v=${i}.${a}`}function cm(e){let{screenId:t,width:n,height:r,boardTheme:i,scheme:a,canvasDefault:o,screenRevision:s,themeVersion:c}=e,l=vi({scheme:a},o);return`${ks(t,n,r,i)}&mode=${l}&v=${s}.${c}`}function lm({open:e,title:t,description:n,confirmLabel:r,onConfirm:i,onCancel:a}){return(0,H.jsx)(Cf,{open:e,onOpenChange:e=>{e||a()},children:(0,H.jsxs)(Ef,{children:[(0,H.jsxs)(Df,{children:[(0,H.jsx)(Af,{children:t}),(0,H.jsx)(jf,{children:n})]}),(0,H.jsxs)(Of,{children:[(0,H.jsx)(Nf,{children:`Cancel`}),(0,H.jsx)(Mf,{variant:`destructive`,onClick:i,children:r})]})]})})}function um(e){let t=W(e=>e.selection),n=W(e=>e.snippetFocus),r=W(e=>e.commentThreads),i=W(e=>e.notes),a=W(e=>e.annotations),o=t?.screenId===e.screen?t.path:null,s=(0,P.useMemo)(()=>{let t=dm({commentThreads:r,notes:i,annotations:a},e.id,e.screen);return o!==null&&!t.includes(o)&&t.push(o),t},[r,i,a,e.id,e.screen,o]),c=n!==null&&t?.screenId===`snippet:${n}`?t.path:null,l=(0,P.useMemo)(()=>c===null?[]:[c],[c]),u=(0,P.useRef)(s);u.current=s;let d=(0,P.useRef)(l);return d.current=l,{anchoredPaths:s,snippetPaths:l,anchoredPathsRef:u,snippetPathsRef:d}}function dm(e,t,n){let r=new Set;for(let n of e.commentThreads)n.anchor?.kind===`node`&&n.anchor.frameId===t&&n.anchorState.status===`attached`&&r.add(n.anchorState.resolvedPath.join(`.`));for(let n of e.notes)n.attachment?.frameId===t&&n.resolved&&r.add(n.resolved.join(`.`));for(let t of e.annotations)t.screenId===n&&t.resolved&&r.add(t.resolved.join(`.`));return[...r]}function fm({frameId:e}){return W(e=>e.markupVisible&&e.cursorMode===`select`)?(0,H.jsx)(`div`,{role:`presentation`,"data-flow-handle":e,title:`Drag onto another frame to connect them`,onPointerDown:t=>{if(t.button!==0)return;let n=t.currentTarget,r=n.closest(`[data-velloo-board-world]`);if(!r)return;t.preventDefault(),t.stopPropagation(),n.setPointerCapture(t.pointerId);let i=W.getState,a=e=>$p(r,e);i().setFlowDraft({from:e,...a(t)});let o=t=>i().setFlowDraft({from:e,...a(t)}),s=()=>{n.removeEventListener(`pointermove`,o),n.removeEventListener(`pointerup`,c),n.removeEventListener(`pointercancel`,s),i().setFlowDraft(null)},c=t=>{s();let n=i(),r=n.currentBoardId?n.boards[n.currentBoardId]:void 0;if(!r)return;let o=Ul(yu(n,r).filter(t=>t.id!==e),a(t),16/(n.canvasZoom||1));if(!o)return;let c={from:e,to:o};if(hi(r).some(e=>vu(e,c))){n.setActiveFlowEdge(c);return}n.connectFrames([c]).then(e=>{e&&i().setActiveFlowEdge(c)})};n.addEventListener(`pointermove`,o),n.addEventListener(`pointerup`,c),n.addEventListener(`pointercancel`,s)},className:`absolute right-0 top-1/2 size-3.5 cursor-crosshair rounded-full border-2 border-background bg-primary opacity-0 shadow-xs transition-opacity group-hover:opacity-100 hover:opacity-100`,style:{transform:`translate(50%, -50%) scale(calc(1 / var(--canvas-zoom, 1)))`}}):null}function pm({...e}){return(0,H.jsx)(te,{"data-slot":`dropdown-menu`,...e})}function mm({...e}){return(0,H.jsx)(oe,{"data-slot":`dropdown-menu-trigger`,...e})}function hm({className:e,align:t=`start`,sideOffset:n=4,...r}){return(0,H.jsx)(gt,{children:(0,H.jsx)(ce,{"data-slot":`dropdown-menu-content`,sideOffset:n,align:t,className:V(`cn-menu-target cn-menu-translucent z-50 max-h-(--radix-dropdown-menu-content-available-height) w-(--radix-dropdown-menu-trigger-width) min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:overflow-hidden data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95`,e),...r})})}function Q({className:e,inset:t,variant:n=`default`,...r}){return(0,H.jsx)(de,{"data-slot":`dropdown-menu-item`,"data-inset":t,"data-variant":n,className:V(`group/dropdown-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive`,e),...r})}function gm({className:e,inset:t,...n}){return(0,H.jsx)(ge,{"data-slot":`dropdown-menu-label`,"data-inset":t,className:V(`px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:pl-7`,e),...n})}function _m({className:e,...t}){return(0,H.jsx)(be,{"data-slot":`dropdown-menu-separator`,className:V(`-mx-1 my-1 h-px bg-border`,e),...t})}function vm({...e}){return(0,H.jsx)(se,{"data-slot":`dropdown-menu-sub`,...e})}function ym({className:e,inset:t,children:n,...r}){return(0,H.jsxs)(xe,{"data-slot":`dropdown-menu-sub-trigger`,"data-inset":t,className:V(`flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,e),...r,children:[n,(0,H.jsx)(Ht,{className:`cn-rtl-flip ml-auto`})]})}function bm({className:e,...t}){return(0,H.jsx)(gt,{children:(0,H.jsx)(ye,{"data-slot":`dropdown-menu-sub-content`,className:V(`cn-menu-target cn-menu-translucent z-50 min-w-[96px] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-lg bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95`,e),...t})})}function xm(e,t,n){let r=n??null;return[{value:null,label:`Follow canvas (${t})`,ariaLabel:`Follow canvas default for ${e} (currently ${t})`,current:r===null},{value:`light`,label:`Pin to light`,ariaLabel:`Pin ${e} to light mode`,current:r===`light`},{value:`dark`,label:`Pin to dark`,ariaLabel:`Pin ${e} to dark mode`,current:r===`dark`}]}function Sm(e){return e===`light`?(0,H.jsx)(Tr,{}):e===`dark`?(0,H.jsx)(Rn,{}):(0,H.jsx)(wr,{})}function Cm({frameLabel:e,scheme:t,canvasDefault:n,onChange:r}){return(0,H.jsxs)(vm,{children:[(0,H.jsxs)(ym,{children:[Sm(t??null),`Color scheme`]}),(0,H.jsx)(bm,{children:xm(e,n,t).map(e=>(0,H.jsxs)(Q,{"aria-label":e.ariaLabel,onSelect:()=>r(e.value),children:[Sm(e.value),e.label,e.current?(0,H.jsx)(Bt,{className:`ml-auto`}):null]},e.label))})]})}var wm=120,Tm=4096,Em=190;function Dm(e){return Math.max(wm,Math.min(Tm,Math.round(e)))}function Om({label:e,w:t,h:n,sharedCount:r,library:i,presets:a,scheme:o,canvasDefault:s,fit:c,chromeWidth:l,onPointerDownGrip:u,onRemove:d,onExport:f,onResize:p,onPreview:m,onAddSibling:h,onSchemeChange:g,onFitChange:_,moveTargets:v,onMoveToBoard:y,onMoveToNewBoard:b}){let x=l<Em;return(0,H.jsxs)(`div`,{className:`flex items-center justify-between gap-2 overflow-hidden text-xs text-muted-foreground`,children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-1 min-w-0`,children:[(0,H.jsx)(`div`,{onPointerDown:u,className:`shrink-0 h-4 w-4 grid place-items-center rounded cursor-grab active:cursor-grabbing text-muted-foreground hover:text-foreground hover:bg-card`,title:`Drag to move`,role:`presentation`,children:(0,H.jsx)(ln,{size:12,strokeWidth:2})}),(0,H.jsx)(`span`,{className:`font-medium truncate`,title:e,children:e}),x?null:(0,H.jsxs)(`span`,{className:`inline-flex shrink-0 items-center gap-0.5 opacity-60 tabular-nums`,children:[(0,H.jsx)(km,{value:t,ariaLabel:`frame width`,onCommit:e=>p({w:Dm(e)})}),(0,H.jsx)(`span`,{className:`opacity-60`,children:`×`}),(0,H.jsx)(km,{value:n,ariaLabel:`frame height`,onCommit:e=>p({h:Dm(e)})})]}),c&&!x?(0,H.jsx)(`span`,{className:`inline-flex shrink-0 items-center rounded px-1 py-0.5 text-[10px] bg-muted text-muted-foreground`,title:`Height follows the screen's content. Type a height or drag the frame's edge to set your own.`,role:`img`,"aria-label":`height fits content`,children:(0,H.jsx)(Vn,{size:10,strokeWidth:2})}):null,o&&!x?(0,H.jsx)(`span`,{className:`inline-flex shrink-0 items-center rounded px-1 py-0.5 text-[10px] bg-muted text-muted-foreground`,title:`Pinned to ${o} — this frame ignores the canvas default (${s}).`,role:`img`,"aria-label":`pinned to ${o}`,children:o===`dark`?(0,H.jsx)(Rn,{size:10,strokeWidth:2}):(0,H.jsx)(Tr,{size:10,strokeWidth:2})}):null,i&&!x?(0,H.jsxs)(`span`,{className:`inline-flex shrink-0 items-center gap-0.5 rounded px-1 py-0.5 text-[10px] bg-muted text-muted-foreground`,title:`This screen renders against library "${i}".`,children:[(0,H.jsx)(xn,{size:10,strokeWidth:2}),i]}):null,r>1&&!x?(0,H.jsxs)(`span`,{className:`inline-flex shrink-0 items-center gap-0.5 rounded px-1 py-0.5 text-[10px] bg-primary/10 text-primary`,title:`${r} frames share this screen — edits sync across all of them.`,children:[(0,H.jsx)(Sn,{size:10}),r]}):null]}),(0,H.jsx)(`div`,{className:`flex shrink-0 items-center gap-0.5`,children:(0,H.jsxs)(pm,{children:[(0,H.jsx)(mm,{asChild:!0,children:(0,H.jsx)(`button`,{type:`button`,className:`opacity-0 group-hover:opacity-100 data-[state=open]:opacity-100 transition-opacity h-4 w-5 grid place-items-center rounded hover:bg-card text-muted-foreground hover:text-foreground`,title:`Frame actions`,children:(0,H.jsx)($t,{size:12})})}),(0,H.jsxs)(hm,{align:`end`,className:$l,children:[(0,H.jsxs)(Q,{onSelect:m,children:[(0,H.jsx)(Mn,{}),`Full-screen preview`]}),(0,H.jsx)(Cm,{frameLabel:e,scheme:o,canvasDefault:s,onChange:g}),(0,H.jsxs)(Q,{"aria-label":c?`Stop fitting height to content`:`Fit height to content`,onSelect:()=>_(!c),children:[(0,H.jsx)(Vn,{}),`Fit height to content`,c?(0,H.jsx)(Bt,{className:`ml-auto`}):null]}),(0,H.jsxs)(vm,{children:[(0,H.jsxs)(ym,{children:[(0,H.jsx)(nr,{}),`New frame of this screen`]}),(0,H.jsxs)(bm,{children:[a.map(e=>(0,H.jsxs)(Q,{onSelect:()=>h({w:e.w,h:e.h}),children:[e.name,(0,H.jsxs)(`span`,{className:`ml-auto pl-3 text-xs text-muted-foreground tabular-nums`,children:[e.w,`×`,e.h]})]},e.name)),(0,H.jsxs)(Q,{onSelect:()=>h({w:t,h:n}),children:[(0,H.jsx)(Xt,{}),`Duplicate at current size`,(0,H.jsxs)(`span`,{className:`ml-auto pl-3 text-xs text-muted-foreground tabular-nums`,children:[t,`×`,n]})]})]})]}),(0,H.jsxs)(vm,{children:[(0,H.jsxs)(ym,{children:[(0,H.jsx)(an,{}),`Move to board`]}),(0,H.jsxs)(bm,{className:`max-h-[60vh] overflow-y-auto`,children:[v.map(e=>(0,H.jsxs)(Q,{onSelect:()=>y(e.id),children:[(0,H.jsx)(vn,{}),(0,H.jsx)(`span`,{className:`truncate`,children:e.name})]},e.id)),v.length>0?(0,H.jsx)(_m,{}):null,(0,H.jsxs)(Q,{onSelect:b,children:[(0,H.jsx)(on,{}),`New board…`]})]})]}),(0,H.jsxs)(Q,{onSelect:f,children:[(0,H.jsx)(Qt,{}),`Export…`]}),(0,H.jsx)(_m,{}),(0,H.jsxs)(Q,{variant:`destructive`,onSelect:d,children:[(0,H.jsx)(Ar,{}),`Remove frame`]})]})]})})]})}function km({value:e,ariaLabel:t,onCommit:n}){let[r,i]=(0,P.useState)(String(e));return(0,P.useEffect)(()=>{i(String(e))},[e]),(0,H.jsx)(`input`,{type:`number`,value:r,min:wm,max:Tm,step:1,"aria-label":t,onChange:e=>i(e.target.value),onBlur:()=>{let t=Number(r);if(!Number.isFinite(t)){i(String(e));return}t!==e&&n(t)},onKeyDown:t=>{t.key===`Enter`&&(t.preventDefault(),t.currentTarget.blur()),t.key===`Escape`&&(i(String(e)),t.currentTarget.blur())},onPointerDown:e=>e.stopPropagation(),className:`w-10 bg-transparent text-right tabular-nums outline-none hover:bg-card focus:bg-card rounded-sm px-0.5 [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none`})}var Am=11;function jm({frame:e,presets:t,onPick:n}){return(0,H.jsx)(`div`,{className:`flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity`,children:t.map(t=>{let r=t.w===e.w&&(e.fit===`content`||t.h===e.h);return(0,H.jsxs)(`button`,{type:`button`,onClick:()=>n(t),title:`${t.name}: ${t.w}×${t.h}`,className:`inline-flex items-center gap-1 rounded border px-1.5 py-0.5 text-[10px] `+(r?`border-primary bg-primary/10 text-primary`:`bg-card text-muted-foreground hover:text-foreground`),children:[Mm(t),t.name]},t.name)})})}function Mm(e){let t=e.name.toLowerCase();return t.includes(`mobile`)?(0,H.jsx)(gr,{size:Am}):t.includes(`tablet`)?(0,H.jsx)(Or,{size:Am}):(0,H.jsx)(Ln,{size:Am})}function Nm(e,t,n,r){let i=W(e=>e.selection),a=W(e=>e.snippetFocus),o=W(e=>e.hover),s=W(e=>e.reveal),c=W(e=>e.nodeState),l=W(e=>e.screenVersion),u=W(e=>e.canvasZoom),d=W(e=>e.activityFlash[t.screen]),f=W(e=>e.rectProbe),p=W(e=>e.clearNodeRects);(0,P.useEffect)(()=>{let n=e.current;n&&(i?.screenId===t.screen?n.send({type:`applyHighlight`,path:i.path}):a!==null&&i?.screenId===`snippet:${a}`?n.send({type:`applyHighlight`,path:``,snippetPath:i.path}):n.send({type:`clearHighlight`}))},[e,i,a,t.screen]),(0,P.useEffect)(()=>{e.current?.send({type:`applySnippetFocus`,snippetId:a})},[e,a]),(0,P.useEffect)(()=>{let n=e.current;n&&s&&s.screenId===t.screen&&n.send({type:`applyHighlight`,path:s.path,scroll:!0})},[e,s,t.screen]),(0,P.useEffect)(()=>{let n=e.current;if(!n||!d||d.path===null)return;n.send({type:`applyHighlight`,path:d.path});let r=setTimeout(()=>{let e=W.getState().selection;e?.screenId===t.screen?n.send({type:`applyHighlight`,path:e.path}):n.send({type:`clearHighlight`})},1100);return()=>clearTimeout(r)},[e,d,t.screen]),(0,P.useEffect)(()=>{let i=e.current;i&&f&&f.frameId===t.id&&i.send({type:`requestRects`,paths:[...new Set([f.path,...n])],snippetPaths:r,force:!0})},[e,f,t.id,n,r]),(0,P.useEffect)(()=>{let n=e.current;n&&(o?.screenId===t.screen?n.send({type:`applyHover`,path:o.path}):a!==null&&o?.screenId===`snippet:${a}`?n.send({type:`applyHover`,path:``,snippetPath:o.path}):n.send({type:`clearHover`}))},[e,o,a,t.screen]),(0,P.useEffect)(()=>{let n=e.current;if(!n)return;let r=i?.screenId===t.screen?i.path:null;n.send({type:`applyVelloState`,path:r,state:r?c:`default`})},[e,c,i,t.screen]),(0,P.useEffect)(()=>{let i=e.current;if(i){if(n.length===0&&r.length===0){p(t.id),i.send({type:`requestRects`,paths:[],snippetPaths:[]});return}i.send({type:`requestRects`,paths:n,snippetPaths:r})}},[e,n,r,t.id,l,p]),(0,P.useEffect)(()=>{e.current?.send({type:`setChromeScale`,scale:u})},[e,u]),(0,P.useEffect)(()=>{let n=e.current;n&&i?.screenId===t.screen&&n.send({type:`requestComputed`,path:i.path})},[e,i,t.screen,l])}function Pm(e,t){let n=(0,P.useRef)(null),r=(0,P.useRef)(null),[i,a]=(0,P.useState)(()=>({srcs:[e,null],front:0})),o=(0,P.useRef)(i);o.current=i;let s=i.front,[c,l]=(0,P.useState)(!1);return(0,P.useEffect)(()=>{a(t=>{let n=1-t.front;if(t.srcs[t.front]===e){if(t.srcs[n]===null)return t;let e=[...t.srcs];return e[n]=null,{...t,srcs:e}}if(t.srcs[n]===e)return t;let r=[...t.srcs];return r[n]=e,{...t,srcs:r}})},[e]),{srcs:i.srcs,front:s,painted:c,frontRef:s===0?n:r,slotRefs:[n,r],settleSlot:e=>{let i=o.current;if(l(!0),e===i.front)return!0;if(i.srcs[e]===null)return!1;let s=t.current,c=(e===0?n:r).current?.contentWindow;return s&&c&&c.scrollTo(s.x,s.y),a(e===0?{srcs:[i.srcs[0],null],front:0}:{srcs:[null,i.srcs[1]],front:1}),!1}}}var Fm=[];function Im({boardId:e,frame:t,frameLabel:n,boardTheme:r}){let i=W(e=>e.design?.boards??Fm),[a,o]=(0,P.useState)(!1),[s,c]=(0,P.useState)(null),l=(n,r)=>{R.updateFrame({boardId:e,frameId:t.id,patch:n}).catch(e=>B(e,r))},u=e=>{if(t.fit===`content`){if(e.w===t.w)return;l({w:e.w,fit:`content`},`Could not resize frame`);return}(e.w!==t.w||e.h!==t.h)&&l({w:e.w,h:e.h},`Could not resize frame`)},d=e=>l(e,`Could not resize frame`),f=e=>l({scheme:e},`Could not update frame color scheme`),p=e=>l({fit:e?`content`:null},`Could not change how the frame is sized`),m=()=>{o(!1),R.removeFrame({boardId:e,frameId:t.id}).catch(e=>B(e,`Could not remove frame`))},h=()=>{W.getState().setExportTarget({kind:`frame`,id:t.id,name:n})},g=()=>{W.getState().setPreviewTarget({screenId:t.screen,name:n,...r?{boardTheme:r}:{},...t.scheme?{scheme:t.scheme}:{},w:t.w})},_=n=>{R.addFrame({boardId:e,screenId:t.screen,w:n.w,h:n.h}).catch(e=>B(e,`Could not add frame`))},v=(0,P.useMemo)(()=>i.filter(t=>t.id!==e).map(e=>({id:e.id,name:e.name})),[i,e]),y=(e,t)=>{z({kind:`info`,message:`Moved "${n}" to "${t}"`,action:{label:`Open board`,onClick:()=>void W.getState().selectBoard(e)}})};return{onPickPreset:u,onResize:d,onSchemeChange:f,onFitChange:p,onExport:h,onPreview:g,onAddSibling:_,moveTargets:v,onMoveToBoard:n=>{let r=v.find(e=>e.id===n)?.name??n;R.moveFrame({boardId:e,frameId:t.id,toBoardId:n}).then(()=>y(n,r)).catch(e=>B(e,`Could not move frame`))},confirmRemove:a,requestRemove:()=>o(!0),cancelRemove:()=>o(!1),doRemove:m,newBoardName:s,setNewBoardName:c,submitNewBoard:async()=>{let n=s?.trim();if(n){c(null);try{let{boardId:r}=await R.addBoard({name:n});await R.moveFrame({boardId:e,frameId:t.id,toBoardId:r}),await W.getState().refreshDesignSummary(),y(r,n)}catch(e){B(e,`Could not move frame to a new board`)}}}}}var Lm=150,Rm=20,zm=class{iframe;handlers;port=null;buffered=[];ready=!1;destroyed=!1;retryTimer=null;attempts=0;constructor(e,t){this.iframe=e,this.handlers=t}attach(){this.destroyed||(this.cancelRetry(),this.port?.close(),this.port=null,this.ready=!1,this.attempts=0,this.sendInit())}sendInit(){if(this.destroyed||this.ready)return;let e=this.iframe.contentWindow;if(!e){this.scheduleRetry();return}this.attempts+=1,this.port?.close();let t=new MessageChannel;this.port=t.port1,this.port.onmessage=e=>this.handleMessage(e.data),e.postMessage({type:am,version:1},`*`,[t.port2]),this.scheduleRetry()}scheduleRetry(){this.destroyed||this.ready||this.attempts>=Rm||(this.retryTimer=setTimeout(()=>{this.retryTimer=null,!(this.ready||this.destroyed)&&this.sendInit()},Lm))}cancelRetry(){this.retryTimer!==null&&(clearTimeout(this.retryTimer),this.retryTimer=null)}handleMessage(e){if(!e||typeof e!=`object`||typeof e.type!=`string`)return;let t=e;if(t.type===`ready`){t.version!==1&&console.error(`velloo: iframe protocol mismatch — canvas v1, iframe v${t.version??`<unversioned>`}. Reload the page.`),this.ready=!0,this.cancelRetry();for(let e of this.buffered)this.port?.postMessage(e);this.buffered=[],this.handlers.onReady?.();return}if(t.type===`select`)this.handlers.onSelect?.(t.path,t.snippetPath,t.instance);else if(t.type===`hover`)this.handlers.onHover?.(t.path,t.snippetPath);else if(t.type===`enter`)this.handlers.onEnter?.(t.path,t.snippetId);else if(t.type===`exit`)this.handlers.onExit?.();else if(t.type===`key`){let{type:e,...n}=t;this.handlers.onKey?.(n)}else t.type===`nodeRects`?this.handlers.onRects?.(t.rects):t.type===`nodeComputed`?this.handlers.onComputed?.(t.computed.path,t.computed.values):t.type===`parentZoom`?this.handlers.onParentZoom?.(t.deltaY,t.clientX,t.clientY):t.type===`parentPan`?this.handlers.onParentPan?.(t.deltaX,t.deltaY):t.type===`scrollPos`&&this.handlers.onScrollPos?.(t.x,t.y)}send(e){if(!this.ready||!this.port){this.buffered.push(e);return}this.port.postMessage(e)}destroy(){this.destroyed=!0,this.cancelRetry(),this.port?.close(),this.port=null,this.buffered=[],this.ready=!1}};function Bm({boardId:e,frame:t,iframeRef:n,hasScreen:r,savedScrollRef:i,anchoredPathsRef:a,snippetPathsRef:o}){let s=(0,P.useRef)(null),c=W(e=>e.setSelection),l=W(e=>e.setHover),u=W(e=>e.setNodeRects),d=W(e=>e.setSelectionComputed),f=W(e=>e.clearNodeRects);return(0,P.useEffect)(()=>{let r=n.current;if(!r)return;let p=new zm(r,{onSelect(n,i,a){if(n===null){c(null);return}let o=W.getState();if(o.snippetFocus!==null){i===void 0?c(null):(c({screenId:`snippet:${o.snippetFocus}`,path:i}),W.getState().setSelectionAnchor({frameId:t.id,instance:a??0}));return}if(o.cursorMode===`note`){let e=Ec(o.screens,{screenId:t.screen,path:n});if(!e)return;o.createNote({attachment:{frameId:t.id,screenId:t.screen,locator:Tc(e,n)},resolved:n===``?[]:n.split(`.`).map(Number)});return}if(o.cursorMode===`comment`){let i={screenId:t.screen,path:n},a=Ec(o.screens,i),s=Array.from(r.contentDocument?.querySelectorAll(`[data-node-path]`)??[]).find(e=>e.dataset.nodePath===n);if(!a||!s)return;let c=s.getBoundingClientRect(),l=Tc(a,n),u=`$ref`in a?a.$ref:`$snippet`in a?a.$snippet:void 0,d=s.textContent?.trim().replace(/\s+/g,` `).slice(0,500);o.beginComment({kind:`node`,boardId:e,frameId:t.id,screenId:t.screen,locator:l,bounds:{x:c.x,y:c.y,w:c.width,h:c.height},...(u||d)&&{fingerprint:{...u&&{ref:u},...d&&{text:d}}}});return}c({screenId:t.screen,path:n})},onHover(e,n){let r=W.getState().snippetFocus;l(e===null?null:r===null?{screenId:t.screen,path:e}:n===void 0?null:{screenId:`snippet:${r}`,path:n})},onEnter(e,t){t!==void 0&&W.getState().setSnippetFocus(t)},onExit(){W.getState().setSnippetFocus(null)},onKey(e){window.dispatchEvent(new KeyboardEvent(`keydown`,e))},onRects(e){u(t.id,e)},onComputed(e,t){d(e,t)},onScrollPos(e,t){i.current={x:e,y:t};let n=a.current,r=o.current;(n.length>0||r.length>0)&&p.send({type:`requestRects`,paths:n,snippetPaths:r})},onReady(){let e=W.getState();if(e.snippetFocus!==null&&(p.send({type:`applySnippetFocus`,snippetId:e.snippetFocus}),e.selection?.screenId===`snippet:${e.snippetFocus}`&&p.send({type:`applyHighlight`,path:``,snippetPath:e.selection.path})),e.reveal?.screenId!==t.screen&&i.current&&p.send({type:`restoreScroll`,...i.current}),e.selection?.screenId===t.screen){let n=e.reveal?.screenId===t.screen&&e.reveal.path===e.selection.path;p.send({type:`applyHighlight`,path:e.selection.path,...n?{scroll:n}:{}})}e.hover?.screenId===t.screen&&p.send({type:`applyHover`,path:e.hover.path}),e.nodeState!=="default"&&e.selection?.screenId===t.screen&&p.send({type:`applyVelloState`,path:e.selection.path,state:e.nodeState});let n=a.current,r=o.current;(n.length>0||r.length>0)&&p.send({type:`requestRects`,paths:n,snippetPaths:r}),p.send({type:`setChromeScale`,scale:W.getState().canvasZoom}),e.selection?.screenId===t.screen&&p.send({type:`requestComputed`,path:e.selection.path})},onParentZoom(e,t,n){let i=W.getState(),a=Fc(e),o=r.closest(`[data-velloo-board="true"]`);if(!o){i.zoomAtViewportCenter({factor:a});return}let s=r.getBoundingClientRect(),c=o.getBoundingClientRect(),l=r.clientWidth>0?s.width/r.clientWidth:i.canvasZoom,u=r.clientHeight>0?s.height/r.clientHeight:i.canvasZoom,d=Hc(s.left-c.left+t*l,s.top-c.top+n*u,a,{zoom:i.canvasZoom,pan:i.pan});d.zoom!==i.canvasZoom&&(i.setCanvasZoom(d.zoom),i.setPan(d.pan))},onParentPan(e,t){let n=W.getState();n.setPan({x:n.pan.x-e,y:n.pan.y-t})}});return s.current=p,r.contentDocument?.readyState===`complete`&&p.attach(),()=>{p.destroy(),s.current=null,f(t.id)}},[t.id,t.screen,e,r,n,i,a,o,c,l,u,d,f]),s}var Vm=(e,t)=>t.x<e.x+e.w&&t.x+t.w>e.x&&t.y<e.y+e.h&&t.y+t.h>e.y;function Hm(e,t,n,r){let i=n,a=r,o=t.filter(t=>!Vm(e,t));for(let t=0;t<=o.length;t++){let t=o.find(t=>Vm({x:e.x,y:e.y,w:i,h:a},t));if(!t)break;let n=t.x-e.x,r=t.y-e.y,s=n>=e.w,c=r>=e.h;if(s&&(!c||n*a>=i*r))i=n;else if(c)a=r;else break}return{w:i,h:a}}function Um(e,t,n,r){let i=n.x,a=n.y;for(let n=0;n<=t.length;n++){let n=t.find(t=>Vm({x:i,y:a,w:e.w,h:e.h},t));if(!n)return{x:i,y:a};let r=[{dx:n.x-e.w-i,dy:0},{dx:n.x+n.w-i,dy:0},{dx:0,dy:n.y-e.h-a},{dx:0,dy:n.y+n.h-a}].reduce((e,t)=>Math.abs(t.dx)+Math.abs(t.dy)<Math.abs(e.dx)+Math.abs(e.dy)?t:e);i+=r.dx,a+=r.dy}return r}var Wm=44;function Gm({boardId:e,frame:t,otherFrames:n}){let[r,i]=(0,P.useState)(null),[a,o]=(0,P.useState)(null),s=W(e=>e.setFrameDraft),c=()=>{let e=W.getState().frameInsets,r=t=>e[t.id]?.chromeH??Wm;return{chromeH:r(t),neighbors:n.map(e=>({x:e.x,y:e.y,w:e.w,h:e.h+r(e)}))}};return{draftPos:a,draftSize:r,startDrag:n=>{if(n.button!==0)return;n.preventDefault(),n.stopPropagation();let r=n.currentTarget;r.setPointerCapture(n.pointerId);let i=t.x,a=t.y,l=n.clientX,u=n.clientY,d=W.getState().canvasZoom||1,{chromeH:f,neighbors:p}=c(),m={w:t.w,h:t.h+f},h=e=>{let t=(e.clientX-l)/d,n=(e.clientY-u)/d;return Um(m,p,{x:Math.round(i+t),y:Math.round(a+n)},{x:i,y:a})},g=e=>{let n=h(e);o(n),s(t.id,{...n,w:t.w,h:t.h})},_=n=>{r.removeEventListener(`pointermove`,g),r.removeEventListener(`pointerup`,_),r.removeEventListener(`pointercancel`,_);let c=h(n);o(null),s(t.id,null),(c.x!==i||c.y!==a)&&R.updateFrame({boardId:e,frameId:t.id,patch:{x:c.x,y:c.y}}).catch(e=>B(e,`Could not move frame`))};r.addEventListener(`pointermove`,g),r.addEventListener(`pointerup`,_),r.addEventListener(`pointercancel`,_)},startResize:n=>r=>{r.preventDefault(),r.stopPropagation();let a=r.currentTarget;a.setPointerCapture(r.pointerId);let o=t.w,l=t.h,u=r.clientX,d=r.clientY,f=W.getState().canvasZoom||1,{chromeH:p,neighbors:m}=c(),h={x:t.x,y:t.y,w:t.w,h:t.h+p},g=e=>{let t=(e.clientX-u)/f,r=(e.clientY-d)/f,i=n===`s`?o:Math.max(120,Math.round(o+t)),a=n===`e`?l:Math.max(120,Math.round(l+r)),s=Hm(h,m,i,a+p);return{w:s.w,h:s.h-p}},_=e=>{let n=g(e);i(n),s(t.id,{x:t.x,y:t.y,...n})},v=n=>{a.removeEventListener(`pointermove`,_),a.removeEventListener(`pointerup`,v),a.removeEventListener(`pointercancel`,v);let r=g(n);i(null),s(t.id,null),(r.w!==o||r.h!==l)&&R.updateFrame({boardId:e,frameId:t.id,patch:{w:r.w,h:r.h}}).catch(e=>B(e,`Could not resize frame`))};a.addEventListener(`pointermove`,_),a.addEventListener(`pointerup`,v),a.addEventListener(`pointercancel`,v)}}}var Km=[{family:`Inter`,category:`sans`,google:`ital,opsz,wght@0,14..32,100..900;1,14..32,100..900`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`body`],note:`The default for a reason — neutral, huge x-height, drawn for screens.`},{family:`Geist`,category:`sans`,google:`ital,wght@0,100..900;1,100..900`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`body`],note:`Tighter and more opinionated than Inter, with a mono twin.`},{family:`Manrope`,category:`sans`,google:`wght@200..800`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`body`,`display`],note:`Semi-rounded geometric; friendly without going soft.`},{family:`DM Sans`,category:`sans`,google:`ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`body`,`display`],note:`Low-contrast geometric that stays clean when set large.`},{family:`Plus Jakarta Sans`,category:`sans`,google:`ital,wght@0,200..800;1,200..800`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`body`,`display`],note:`Geometric bones, humanist warmth; strong at both ends.`},{family:`Work Sans`,category:`sans`,google:`ital,wght@0,100..900;1,100..900`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`body`],note:`Optimised for the middle sizes where most interface text lives.`},{family:`Public Sans`,category:`sans`,google:`ital,wght@0,100..900;1,100..900`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`body`],note:`Unopinionated on purpose — a neutral civic workhorse.`},{family:`Figtree`,category:`sans`,google:`ital,wght@0,300..900;1,300..900`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`body`,`display`],note:`Geometric with a little play in it; holds up small.`},{family:`Outfit`,category:`sans`,google:`wght@100..900`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`display`,`body`],note:`Purely geometric — strongest as a heading face.`},{family:`Sora`,category:`sans`,google:`wght@100..800`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`display`,`body`],note:`Angular and technical; a display sans that isn't generic.`},{family:`Lexend`,category:`sans`,google:`wght@100..900`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`body`],note:`Wide apertures, tuned for reading proficiency.`},{family:`Rubik`,category:`sans`,google:`ital,wght@0,300..900;1,300..900`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`body`,`display`],note:`Softened corners; warm and sturdy at any weight.`},{family:`Karla`,category:`sans`,google:`ital,wght@0,200..800;1,200..800`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`body`],note:`A grotesque with quirks — good foil for a serif display.`},{family:`Mulish`,category:`sans`,google:`ital,wght@0,200..1000;1,200..1000`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`body`],note:`Minimal and quiet enough to disappear behind the content.`},{family:`Nunito Sans`,category:`sans`,google:`ital,opsz,wght@0,6..12,200..1000;1,6..12,200..1000`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`body`],note:`Rounded terminals; an approachable product voice.`},{family:`Source Sans 3`,category:`sans`,google:`ital,wght@0,200..900;1,200..900`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`body`],note:`Adobe's interface workhorse; very legible small.`},{family:`IBM Plex Sans`,category:`sans`,google:`ital,wght@0,100..700;1,100..700`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`body`],note:`Engineered and faintly technical; pairs with Plex Mono.`},{family:`Barlow`,category:`sans`,google:`wght@400;500;600;700`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`body`],note:`Slightly condensed grotesque when you need the density.`},{family:`Archivo`,category:`sans`,google:`ital,wght@0,100..900;1,100..900`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`body`,`display`],note:`Built for high performance; enormous weight range.`},{family:`Epilogue`,category:`sans`,google:`ital,wght@0,100..900;1,100..900`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`display`,`body`],note:`Real personality once you get into the heavy weights.`},{family:`Onest`,category:`sans`,google:`wght@100..900`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`body`],note:`Contemporary neutral — a fresher take on the Inter brief.`},{family:`Instrument Sans`,category:`sans`,google:`ital,wght@0,400..700;1,400..700`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`body`],note:`Compact grotesque; sharp and very current.`},{family:`Schibsted Grotesk`,category:`sans`,google:`ital,wght@0,400..900;1,400..900`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`body`,`display`],note:`Editorial grotesque, drawn for a news publisher.`},{family:`Space Grotesk`,category:`sans`,google:`wght@300..700`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`display`,`body`],note:`Techy proportions; the default startup display face.`},{family:`Albert Sans`,category:`sans`,google:`ital,wght@0,100..900;1,100..900`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`body`,`display`],note:`Geometric revival with an elegant lowercase.`},{family:`Bricolage Grotesque`,category:`sans`,google:`opsz,wght@12..96,200..800`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`display`],note:`Deliberately awkward — excellent editorial headers.`},{family:`Hanken Grotesk`,category:`sans`,google:`ital,wght@0,100..900;1,100..900`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`body`],note:`Even-toned grotesque that never draws attention.`},{family:`Be Vietnam Pro`,category:`sans`,google:`wght@400;500;600;700`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`body`],note:`Crisp geometric with unusually good diacritics.`},{family:`Red Hat Display`,category:`sans`,google:`ital,wght@0,300..900;1,300..900`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`display`,`body`],note:`Open and geometric; corporate without being cold.`},{family:`Source Serif 4`,category:`serif`,google:`ital,opsz,wght@0,8..60,200..900;1,8..60,200..900`,fallback:`ui-serif, Georgia, serif`,roles:[`body`],note:`Screen-first serif; comfortable over long measures.`},{family:`Lora`,category:`serif`,google:`ital,wght@0,400..700;1,400..700`,fallback:`ui-serif, Georgia, serif`,roles:[`body`],note:`Brushed curves — the safe editorial body serif.`},{family:`Crimson Pro`,category:`serif`,google:`ital,wght@0,200..900;1,200..900`,fallback:`ui-serif, Georgia, serif`,roles:[`body`],note:`Old-style and book-like; low contrast survives screens.`},{family:`Newsreader`,category:`serif`,google:`ital,opsz,wght@0,6..72,200..800;1,6..72,200..800`,fallback:`ui-serif, Georgia, serif`,roles:[`body`,`display`],note:`Made for news, so it works as body and as headline.`},{family:`Literata`,category:`serif`,google:`ital,opsz,wght@0,7..72,200..900;1,7..72,200..900`,fallback:`ui-serif, Georgia, serif`,roles:[`body`],note:`Google's ebook serif; sturdy down to small sizes.`},{family:`Spectral`,category:`serif`,google:`wght@400;500;600;700`,fallback:`ui-serif, Georgia, serif`,roles:[`body`],note:`Screen-native serif with generous built-in spacing.`},{family:`EB Garamond`,category:`serif`,google:`ital,wght@0,400..800;1,400..800`,fallback:`ui-serif, Georgia, serif`,roles:[`body`],note:`Classic Garamond — give it size and leading to breathe.`},{family:`Libre Baskerville`,category:`serif`,google:`ital,wght@0,400..700;1,400..700`,fallback:`ui-serif, Georgia, serif`,roles:[`body`],note:`High contrast; set it larger than you think.`},{family:`Bitter`,category:`serif`,google:`ital,wght@0,100..900;1,100..900`,fallback:`ui-serif, Georgia, serif`,roles:[`body`],note:`Contemporary slab that stays strong at small sizes.`},{family:`Merriweather`,category:`serif`,google:`ital,opsz,wght@0,18..144,300..900;1,18..144,300..900`,fallback:`ui-serif, Georgia, serif`,roles:[`body`],note:`Dense and dark; built to be legible on screens.`},{family:`Petrona`,category:`serif`,google:`ital,wght@0,100..900;1,100..900`,fallback:`ui-serif, Georgia, serif`,roles:[`body`,`display`],note:`Quirky text serif with a surprisingly wide range.`},{family:`Faustina`,category:`serif`,google:`ital,wght@0,300..800;1,300..800`,fallback:`ui-serif, Georgia, serif`,roles:[`body`],note:`Compact serif that packs a lot of words per line.`},{family:`Frank Ruhl Libre`,category:`serif`,google:`wght@300..900`,fallback:`ui-serif, Georgia, serif`,roles:[`body`,`display`],note:`Hebrew-rooted serif with striking heavy weights.`},{family:`Vollkorn`,category:`serif`,google:`ital,wght@0,400..900;1,400..900`,fallback:`ui-serif, Georgia, serif`,roles:[`body`],note:`Warm and slightly rough — good for long-form.`},{family:`Zilla Slab`,category:`serif`,google:`wght@400;500;600;700`,fallback:`ui-serif, Georgia, serif`,roles:[`body`,`display`],note:`Mozilla's slab: technical but warm.`},{family:`Roboto Slab`,category:`serif`,google:`wght@100..900`,fallback:`ui-serif, Georgia, serif`,roles:[`body`,`display`],note:`Neutral slab; the least surprising choice.`},{family:`Alegreya`,category:`serif`,google:`ital,wght@0,400..900;1,400..900`,fallback:`ui-serif, Georgia, serif`,roles:[`body`],note:`Calligraphic origins, designed for literature.`},{family:`Instrument Serif`,category:`serif`,google:`wght@400`,fallback:`ui-serif, Georgia, serif`,roles:[`display`],note:`High-contrast display serif; everywhere right now.`},{family:`Fraunces`,category:`serif`,google:`opsz,wght@9..144,100..900`,fallback:`ui-serif, Georgia, serif`,roles:[`display`],note:`Wonky and optical-size aware; enormous personality.`},{family:`Playfair Display`,category:`serif`,google:`wght@400..900`,fallback:`ui-serif, Georgia, serif`,roles:[`display`],note:`High-contrast Didone — the classic luxury headline.`},{family:`DM Serif Display`,category:`serif`,google:`wght@400`,fallback:`ui-serif, Georgia, serif`,roles:[`display`],note:`Sharp Didone; the free Playfair alternative.`},{family:`Bodoni Moda`,category:`serif`,google:`opsz,wght@6..96,400..900`,fallback:`ui-serif, Georgia, serif`,roles:[`display`],note:`True Didone with optical sizes; fashion-editorial.`},{family:`Abril Fatface`,category:`display`,google:`wght@400`,fallback:`ui-serif, Georgia, serif`,roles:[`display`],note:`Heavy Didone built for one-word headlines.`},{family:`Unbounded`,category:`sans`,google:`wght@200..900`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`display`],note:`Geometric and loud; unmistakably brand-forward.`},{family:`Syne`,category:`sans`,google:`wght@400..800`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`display`],note:`Deliberately odd widths — art-gallery energy.`},{family:`Anton`,category:`sans`,google:`wght@400`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`display`],note:`Ultra-condensed poster weight, and only that.`},{family:`Bebas Neue`,category:`sans`,google:`wght@400`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`display`],note:`All-caps condensed; posters and scoreboards.`},{family:`Archivo Black`,category:`sans`,google:`wght@400`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`display`],note:`One very heavy weight that fills the line.`},{family:`Big Shoulders`,category:`display`,google:`opsz,wght@10..72,100..900`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`display`],note:`Tall condensed; wayfinding and data-dense headers.`},{family:`Cormorant Garamond`,category:`serif`,google:`wght@300..700`,fallback:`ui-serif, Georgia, serif`,roles:[`display`],note:`Delicate high contrast — set it big or lose it.`},{family:`Marcellus`,category:`serif`,google:`wght@400`,fallback:`ui-serif, Georgia, serif`,roles:[`display`],note:`Roman inscriptional capitals; quietly expensive.`},{family:`Prata`,category:`serif`,google:`wght@400`,fallback:`ui-serif, Georgia, serif`,roles:[`display`],note:`Didone with a single weight and a lot of poise.`},{family:`Gloock`,category:`serif`,google:`wght@400`,fallback:`ui-serif, Georgia, serif`,roles:[`display`],note:`Fat high-contrast serif; editorial and current.`},{family:`Yeseva One`,category:`display`,google:`wght@400`,fallback:`ui-serif, Georgia, serif`,roles:[`display`],note:`Curvy and decorative; strong at very large sizes.`},{family:`Chivo`,category:`sans`,google:`ital,wght@0,100..900;1,100..900`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`display`,`body`],note:`Grotesque with heavy weights made for headlines.`},{family:`Darker Grotesque`,category:`sans`,google:`wght@300..900`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`display`],note:`Tall, tight and slightly strange.`},{family:`Familjen Grotesk`,category:`sans`,google:`ital,wght@0,400..700;1,400..700`,fallback:`ui-sans-serif, system-ui, sans-serif`,roles:[`display`,`body`],note:`Swedish grotesque with a distinctive g.`},{family:`Caveat`,category:`handwriting`,google:`wght@400..700`,fallback:`ui-rounded, cursive`,roles:[`display`],note:`Handwritten — annotations and margin notes.`},{family:`JetBrains Mono`,category:`mono`,google:`wght@100..800`,fallback:`ui-monospace, SFMono-Regular, monospace`,roles:[`mono`],note:`Tall x-height, drawn for code; the safe default.`},{family:`IBM Plex Mono`,category:`mono`,google:`wght@400;500;600;700`,fallback:`ui-monospace, SFMono-Regular, monospace`,roles:[`mono`],note:`Pairs exactly with Plex Sans and Plex Serif.`},{family:`Space Mono`,category:`mono`,google:`wght@400;700`,fallback:`ui-monospace, SFMono-Regular, monospace`,roles:[`mono`,`display`],note:`Retro-technical and quirky; works as display mono.`},{family:`Fira Code`,category:`mono`,google:`wght@300..700`,fallback:`ui-monospace, SFMono-Regular, monospace`,roles:[`mono`],note:`Programming ligatures, if you want them.`},{family:`Source Code Pro`,category:`mono`,google:`wght@200..900`,fallback:`ui-monospace, SFMono-Regular, monospace`,roles:[`mono`],note:`Adobe's code face; wide and unambiguous.`},{family:`Roboto Mono`,category:`mono`,google:`wght@100..700`,fallback:`ui-monospace, SFMono-Regular, monospace`,roles:[`mono`],note:`The neutral default nobody objects to.`},{family:`DM Mono`,category:`mono`,google:`wght@400;500`,fallback:`ui-monospace, SFMono-Regular, monospace`,roles:[`mono`],note:`Low contrast and geometric; unusually pretty.`},{family:`Geist Mono`,category:`mono`,google:`wght@100..900`,fallback:`ui-monospace, SFMono-Regular, monospace`,roles:[`mono`],note:`Geist's twin — use them together.`},{family:`Martian Mono`,category:`mono`,google:`wght@100..800`,fallback:`ui-monospace, SFMono-Regular, monospace`,roles:[`mono`,`display`],note:`Wide and semi-condensed; a mono with presence.`},{family:`Azeret Mono`,category:`mono`,google:`wght@100..900`,fallback:`ui-monospace, SFMono-Regular, monospace`,roles:[`mono`],note:`Boxy and deliberate; good for figures and tables.`},{family:`Red Hat Mono`,category:`mono`,google:`wght@300..700`,fallback:`ui-monospace, SFMono-Regular, monospace`,roles:[`mono`],note:`Humanist mono that reads like prose.`},{family:`Inconsolata`,category:`mono`,google:`wght@200..900`,fallback:`ui-monospace, SFMono-Regular, monospace`,roles:[`mono`],note:`Narrow and efficient; fits more columns.`}];function qm(e){return Km.find(t=>t.family===e)}function Jm(e){return`"${e.family}", ${e.fallback}`}function Ym(e,t,n){let r=t.replace(/ /g,`+`);return`https://fonts.googleapis.com/css2?family=${e===!0?r:`${r}:${e}`}${n?`&text=${encodeURIComponent(n)}`:``}&display=swap`}function Xm(e){return Wi(e.role)?`:root {\n --font-${e.role}: ${Gi(e.stack)};\n}`:``}function Zm(e){return e.google?Ym(e.google,e.family):null}function Qm(e){let t=e.name===La;if(!t&&!Ra(e.name))return``;let n=Ya(e.typeset,` `,!t);return n.length===0?``:`${t?`:root, .typeset`:`.typeset-${e.name}`} {\n${n.join(`
6
+ `)}\n}`}function $m({slotRefs:e,front:t,screenRev:n,hasScreen:r,frontIsCurrent:i}){let a=W(e=>e.cursorMode),o=W(e=>e.typesetDraft),s=W(e=>e.fontDraft),[c,l]=e;(0,P.useEffect)(()=>{let e=e=>{let t=e?.contentDocument;if(!t?.head)return;let n=`__velloo-comment-cursor`,r=t.getElementById(n),i=a===`comment`?`cell`:a===`note`?`crosshair`:null;i?(r||(r=t.createElement(`style`),r.id=n,t.head.appendChild(r)),r.textContent=`*, *::before, *::after { cursor: ${i} !important; }`):r&&r.remove()};e(c.current),e(l.current)},[a,t,n,r]);let u=(0,P.useRef)(null);o||s?u.current={css:[o?Qm(o):``,s?Xm(s):``].filter(Boolean).join(`
7
+ `),fontUrl:s?Zm(s):null}:i&&(u.current=null);let d=u.current,f=d?.css??``,p=d?.fontUrl??null;(0,P.useEffect)(()=>{let e=e=>{let t=e?.contentDocument;t?.head&&(eh(t,`__velloo-font-draft`,`link`,p,e=>{let t=e;t.rel=`stylesheet`,t.href=p}),eh(t,`__velloo-theme-draft`,`style`,f||null,e=>{e.textContent=f}))};e(c.current),e(l.current)},[f,p,t,n,r])}function eh(e,t,n,r,i){let a=e.getElementById(t);if(r===null){a?.remove();return}let o=a??e.createElement(n);a||(o.id=t,e.head.appendChild(o)),i(o)}var th=198,nh=`
8
+ @keyframes velloo-loading-trace {
9
+ 0% { stroke-dashoffset: ${th}; }
10
+ 40% { stroke-dashoffset: 0; }
11
+ 60% { stroke-dashoffset: 0; }
12
+ 100% { stroke-dashoffset: -${th}; }
13
+ }
14
+ .velloo-loading-ring {
15
+ stroke-dasharray: ${th};
16
+ /* backwards: amber's delay would otherwise show it fully drawn for 180ms
17
+ before the trace starts, popping on every mount. */
18
+ animation: velloo-loading-trace 1.6s ease-in-out infinite backwards;
19
+ }
20
+ .velloo-loading-ring-amber { animation-delay: 0.18s; }
21
+ @media (prefers-reduced-motion: reduce) {
22
+ .velloo-loading-ring {
23
+ animation: none;
24
+ stroke-dasharray: none;
25
+ stroke-dashoffset: 0;
26
+ }
27
+ }
28
+ `;function rh({size:e=22,className:t}){let n=`velloo-loading-weave-${(0,P.useId)().replace(/[^a-zA-Z0-9]/g,``)}`;return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(`style`,{href:`velloo-loading`,precedence:`default`,children:nh}),(0,H.jsxs)(`svg`,{viewBox:`0 0 120 120`,width:e,height:e,className:t,fill:`none`,"aria-hidden":`true`,focusable:`false`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,H.jsx)(`defs`,{children:(0,H.jsx)(`clipPath`,{id:n,children:(0,H.jsx)(`rect`,{x:`52`,y:`30`,width:`38`,height:`35`})})}),(0,H.jsx)(`rect`,{className:`velloo-loading-ring`,x:`21`,y:`21`,width:`58`,height:`58`,rx:`20`,stroke:`#FF6F4D`,strokeWidth:`11`,strokeLinejoin:`round`,strokeLinecap:`round`}),(0,H.jsx)(`rect`,{className:`velloo-loading-ring velloo-loading-ring-amber`,x:`41`,y:`41`,width:`58`,height:`58`,rx:`20`,stroke:`#FFAB1F`,strokeWidth:`11`,strokeLinejoin:`round`,strokeLinecap:`round`}),(0,H.jsx)(`rect`,{className:`velloo-loading-ring`,x:`21`,y:`21`,width:`58`,height:`58`,rx:`20`,stroke:`#FF6F4D`,strokeWidth:`11`,strokeLinejoin:`round`,strokeLinecap:`round`,clipPath:`url(#${n})`})]})]})}function ih({label:e,size:t,className:n}){return(0,H.jsxs)(`div`,{role:`status`,"aria-live":`polite`,className:`flex items-center justify-center gap-2${n?` ${n}`:``}`,children:[(0,H.jsx)(rh,{size:t}),e?(0,H.jsx)(`span`,{children:e}):(0,H.jsx)(`span`,{className:`sr-only`,children:`Loading`})]})}function ah({open:e,title:t,placeholder:n,submitLabel:r,maxLength:i,value:a,onValueChange:o,onSubmit:s,onCancel:c}){return(0,H.jsx)(ud,{open:e,onOpenChange:e=>{e||c()},children:(0,H.jsxs)(pd,{className:`sm:max-w-sm`,children:[(0,H.jsx)(md,{children:(0,H.jsx)(gd,{children:t})}),(0,H.jsxs)(`form`,{className:`grid gap-4`,onSubmit:e=>{e.preventDefault(),s()},children:[(0,H.jsx)(Z,{autoFocus:!0,value:a,onChange:e=>o(e.target.value),onFocus:e=>e.currentTarget.select(),maxLength:i,placeholder:n,"aria-label":n}),(0,H.jsxs)(hd,{children:[(0,H.jsx)(G,{type:`button`,variant:`outline`,onClick:c,children:`Cancel`}),(0,H.jsx)(G,{type:`submit`,disabled:a.trim().length===0,children:r})]})]})]})})}function oh({size:e=28,label:t,counterZoom:n=!1}){return(0,H.jsx)(`div`,{role:`status`,"aria-live":`polite`,className:`absolute inset-0 z-10 grid place-items-center rounded-md border bg-card text-xs text-muted-foreground pointer-events-none`,children:(0,H.jsxs)(`div`,{className:`flex flex-col items-center gap-2`,style:n?{transform:`scale(calc(1 / var(--canvas-zoom, 1)))`}:void 0,children:[(0,H.jsx)(rh,{size:e}),t?(0,H.jsx)(`span`,{children:t}):(0,H.jsx)(`span`,{className:`sr-only`,children:`Loading`})]})})}var sh=(0,P.memo)(function({boardId:e,frame:t,frames:n,presets:r,sharedCount:i}){let a=(0,P.useMemo)(()=>n.filter(e=>e.id!==t.id),[n,t.id]),o=(0,P.useRef)(null),s=W(e=>e.screens[t.screen]),c=W(t=>t.boards[e]?.theme),l=W(e=>e.screenVersions[t.screen]??0),u=W(e=>e.themeVersion),d=W(e=>e.designMode),f=W(e=>e.cursorMode),p=W(e=>e.wsConnected),m=W(e=>e.canvasZoom),h=W(e=>e.setFrameInset),g=W(e=>e.reportRenderError),_=W(e=>e.frameGlow[t.id]),[v,y]=(0,P.useState)(!1),{draftPos:b,draftSize:x,startDrag:S,startResize:C}=Gm({boardId:e,frame:t,otherFrames:a}),w=x?.w??t.w,T=x?.h??t.h,E=b?.x??t.x,D=b?.y??t.y,O=!!s,{anchoredPaths:k,snippetPaths:A,anchoredPathsRef:j,snippetPathsRef:M}=um(t),ee=sm({frame:t,canvasDefault:d,...c?{boardTheme:c}:{},screenRevision:l,themeVersion:u}),te=(0,P.useRef)(ee);p&&(te.current=ee);let ne=te.current,re=(0,P.useRef)(null),{srcs:ie,front:ae,painted:oe,frontRef:se,slotRefs:ce,settleSlot:le}=Pm(ne,re);(0,P.useEffect)(()=>{let e=o.current;if(!e)return;let n=e.parentElement,r=()=>{h(t.id,{x:e.offsetLeft,y:e.offsetTop,chromeH:(n?.offsetHeight??e.offsetHeight)-e.offsetHeight})};r();let i=new ResizeObserver(r);return n&&i.observe(n),i.observe(e),()=>{i.disconnect(),h(t.id,null)}},[t.id,O,h]);let ue=Bm({boardId:e,frame:t,iframeRef:se,hasScreen:O,savedScrollRef:re,anchoredPathsRef:j,snippetPathsRef:M});Nm(ue,t,k,A),$m({slotRefs:ce,front:ae,screenRev:l,hasScreen:O,frontIsCurrent:ie[ae]===ne}),(0,P.useEffect)(()=>{if(!_)return;y(!0);let e=setTimeout(()=>y(!1),1400);return()=>clearTimeout(e)},[_]);let de=t.label??s?.name??t.screen,N=Im({boardId:e,frame:t,frameLabel:de,boardTheme:c}),fe=f===`hand`;return(0,H.jsxs)(`div`,{className:`absolute group`,style:{left:E,top:D},"data-frame-id":t.id,"data-group-id":t.group??``,children:[(0,H.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,H.jsx)(`div`,{style:{width:`calc(${w}px * var(--canvas-zoom, 1))`,transform:`scale(calc(1 / var(--canvas-zoom, 1)))`,transformOrigin:`bottom left`},children:(0,H.jsx)(Om,{label:de,w,h:T,sharedCount:i,library:s?.library??null,presets:r,scheme:t.scheme,fit:t.fit===`content`,canvasDefault:d,chromeWidth:w*m,onPointerDownGrip:S,onRemove:N.requestRemove,onExport:N.onExport,onResize:N.onResize,onPreview:N.onPreview,onAddSibling:N.onAddSibling,onSchemeChange:N.onSchemeChange,onFitChange:N.onFitChange,moveTargets:N.moveTargets,onMoveToBoard:N.onMoveToBoard,onMoveToNewBoard:()=>N.setNewBoardName(de)})}),s?(0,H.jsxs)(`div`,{ref:o,className:`relative`+(v?` rounded-md ring-2 ring-primary/70 shadow-[0_0_18px_2px] shadow-primary/25 transition-shadow duration-300`:``),style:{width:w,height:T},children:[[0,1].map(e=>ie[e]===null?null:(0,H.jsx)(`iframe`,{ref:ce[e],title:`${s.name} (${t.id})${e===ae?``:` — loading`}`,src:ie[e],width:w,height:T,onLoad:()=>{g(t.screen,om(ce[e].current)),le(e)&&ue.current?.attach()},"aria-hidden":e!==ae||void 0,className:`velloo-frame-iframe absolute inset-0 rounded-md bg-white ring-1 ring-border`+(e===ae?``:` invisible`),style:{width:w,height:T,pointerEvents:e===ae&&!fe?`auto`:`none`}},e)),oe?null:(0,H.jsx)(oh,{counterZoom:!0}),(0,H.jsx)(`div`,{onPointerDown:C(`e`),className:`absolute top-0 right-0 h-full w-0.5 cursor-ew-resize opacity-0 group-hover:opacity-100 transition-opacity border-r border-dashed border-primary/40 hover:border-solid hover:border-r-2 hover:border-primary/70`,role:`presentation`}),(0,H.jsx)(`div`,{onPointerDown:C(`s`),className:`absolute bottom-0 left-0 w-full h-0.5 cursor-ns-resize opacity-0 group-hover:opacity-100 transition-opacity border-b border-dashed border-primary/40 hover:border-solid hover:border-b-2 hover:border-primary/70`,role:`presentation`}),(0,H.jsx)(`div`,{onPointerDown:C(`se`),className:`absolute bottom-0 right-0 h-2 w-2 cursor-nwse-resize opacity-0 group-hover:opacity-100 transition-opacity bg-primary/50 hover:bg-primary rounded-br`,role:`presentation`}),(0,H.jsx)(fm,{frameId:t.id})]}):(0,H.jsx)(`div`,{style:{width:w,height:T},className:`border border-dashed border-muted-foreground/30 rounded-md grid place-items-center text-xs text-muted-foreground`,children:(0,H.jsx)(ih,{size:28,label:t.screen,className:`flex-col`})}),(0,H.jsx)(`div`,{style:{width:`calc(${w}px * var(--canvas-zoom, 1))`,transform:`scale(calc(1 / var(--canvas-zoom, 1)))`,transformOrigin:`top left`},children:(0,H.jsx)(jm,{frame:t,presets:r,onPick:N.onPickPreset})})]}),(0,H.jsx)(lm,{open:N.confirmRemove,title:`Remove frame`,description:`Remove this placement of "${de}" from the board? The underlying screen stays — only this frame is removed. You can put it back with ⌘Z.`,confirmLabel:`Remove`,onConfirm:N.doRemove,onCancel:N.cancelRemove}),(0,H.jsx)(ah,{open:N.newBoardName!==null,title:`Move to a new board`,placeholder:`Board name`,submitLabel:`Create and move`,maxLength:80,value:N.newBoardName??``,onValueChange:N.setNewBoardName,onSubmit:()=>void N.submitNewBoard(),onCancel:()=>N.setNewBoardName(null)})]})});function ch(){let e=W(e=>e.components);return(0,P.useMemo)(()=>{let t=e?.find(e=>e.id===`Icon`)?.props.find(e=>e.name===`name`);return Array.isArray(t?.enumValues)?t.enumValues:[]},[e])}function lh(){let e=W(e=>e.selection),t=W(e=>e.currentBoardId?e.boards[e.currentBoardId]:void 0),n=W(e=>e.nodeRects),r=W(e=>e.snippetRects),i=W(e=>e.snippetFocus),a=W(e=>e.selectionAnchor),o=W(e=>e.frameInsets);return(0,P.useMemo)(()=>{if(!e||!t)return[];let s=i!==null&&e.screenId===`snippet:${i}`,c=[];for(let i of t.frames){let t=s?r[i.id]?.[e.path]??[]:i.screen===e.screenId?[n[i.id]?.[e.path]]:[],l=o[i.id]??{x:0,y:0,chromeH:0},u={x:i.x+l.x,y:i.y+l.y,w:i.w,h:i.h};t.forEach((e,t)=>{e&&c.push({frameId:i.id,key:`${i.id}:${t}`,x:u.x+e.x,y:u.y+e.y,w:e.w,h:e.h,anchor:s?a?a.frameId===i.id&&a.instance===t:c.length===0:!0,clip:u})})}return c},[e,t,n,r,i,a,o])}var uh=w(`oklch`),dh=w(`rgb`),fh=w(`hsl`);function ph(e,t=3){if(e===void 0||Number.isNaN(e))return 0;let n=10**t;return Math.round(e*n)/n}function mh(e){let t=uh(e);return`oklch(${ph(t.l)} ${ph(t.c)} ${ph(t.h)}${t.alpha!==void 0&&t.alpha<1?` / ${ph(t.alpha,3)}`:``})`}function hh(e){let t=fh(e);return`hsl(${ph(t.h??0,1)} ${ph((t.s??0)*100,1)}% ${ph((t.l??0)*100,1)}%${t.alpha!==void 0&&t.alpha<1?` / ${ph(t.alpha,3)}`:``})`}function gh(e){if(!e)return null;let t=x(e);return t?_h(t):null}function _h(e){let t=dh(e);return{hex:E(t)??`#000000`,oklch:mh(e),hsl:hh(e)}}function vh(e){let t=x(e);return t?mh(t):null}var yh=e=>{if(!e)return null;let t=Number.parseFloat(e);return Number.isFinite(t)?Math.round(t*100)/100:null},bh={100:`light`,200:`light`,300:`light`,400:`normal`,500:`medium`,600:`semibold`,700:`bold`,800:`bold`,900:`bold`},xh={0:`0`,1:`1`,2:`2`,4:`4`};function Sh(e){return e===null?null:`${e}px`}function Ch(e){let t=e?.split(`,`)[0]?.trim();return t?t.replace(/^["']|["']$/g,``):null}function wh(e){return!e||/^rgba?\([^)]*[,/]\s*0\s*\)$/.test(e.trim())?null:gh(e)?.hex??null}function Th(e){let[t]=e;return t==null?null:e.every(e=>e===t)?t:null}function Eh(e){if(!e)return{};let t={},n=(e,n)=>{n!==null&&(t[e]=n)},r=yh(e.fontSize);n(`font`,Ch(e.fontFamily)),n(`size`,r),n(`weight`,bh[e.fontWeight??``]??null);let i=yh(e.lineHeight);n(`leading`,i!==null&&r?Math.round(i/r*100)/100:null),n(`tracking`,e.letterSpacing===`normal`?`normal`:Sh(yh(e.letterSpacing))),n(`align`,(e.textAlign===`start`?`left`:e.textAlign===`end`?`right`:null)??e.textAlign??null),n(`color`,wh(e.color)),n(`bg`,wh(e.backgroundColor)),n(`borderColor`,wh(e.borderTopColor));let a=yh(e.borderTopWidth);return n(`borderWidth`,a===null?null:xh[a]??Sh(a)),n(`rounded`,Sh(yh(e.borderTopLeftRadius))),n(`padding`,Th([yh(e.paddingTop),yh(e.paddingRight),yh(e.paddingBottom),yh(e.paddingLeft)])),n(`margin`,Th([yh(e.marginTop),yh(e.marginRight),yh(e.marginBottom),yh(e.marginLeft)])),n(`gap`,e.columnGap===`normal`?0:yh(e.columnGap)),t}function Dh(e){return e.filter(e=>e.tier===`bar`)}var Oh=new Set([`h1`,`h2`,`h3`,`h4`,`h5`,`h6`]),kh=new Set([`p`,`span`,`small`,`strong`,`em`,`b`,`i`,`label`,`blockquote`,`figcaption`,`li`,`dt`,`dd`]),Ah=new Set([`Box`,`Card`,`CardContent`,`CardHeader`,`CardFooter`,`Container`,`Stack`,`Layer`,`Placeholder`]);function jh(e){if(Ji(e))return`snippet`;if(!qi(e))return`other`;let t=e.$ref;if(t===`Image`)return`image`;if(t===`Icon`)return`icon`;if(t===`Heading`)return`heading`;if(t===`Text`)return`text`;if(t===`Box`){let t=typeof e.props?.as==`string`?e.props.as:void 0;return t&&Oh.has(t)?`heading`:t&&kh.has(t)||typeof e.props?.children==`string`?`text`:`box`}return Ah.has(t)?`box`:`other`}var Mh=[{value:`full`,label:`Fill`},{value:`fit`,label:`Hug`},{value:`fixed`,label:`Fixed`}],Nh=[{value:`light`,label:`Light`},{value:`normal`,label:`Regular`},{value:`medium`,label:`Medium`},{value:`semibold`,label:`Semibold`},{value:`bold`,label:`Bold`}],Ph=[{value:`none`,label:`Square`},{value:`sm`,label:`Small`},{value:`md`,label:`Medium`},{value:`lg`,label:`Large`},{value:`full`,label:`Round`}],Fh=[{value:`left`,label:`Left`},{value:`center`,label:`Center`},{value:`right`,label:`Right`}],Ih=[{value:`0`,label:`None`},{value:`1`,label:`Hairline`},{value:`2`,label:`Medium`},{value:`4`,label:`Thick`}],Lh=[{value:`tighter`,label:`Tighter`},{value:`tight`,label:`Tight`},{value:`normal`,label:`Normal`},{value:`wide`,label:`Wide`},{value:`wider`,label:`Wider`}];function Rh(e,t){if(!t)return null;if(t.startsWith(`[`))return t.slice(1,-1);if(t.startsWith(`#`))return t;if(!e)return null;let n=t.split(`/`)[0]??t,r=e.colors,i=r[n];if(typeof i==`string`)return i;if(i&&typeof i==`object`)return i.DEFAULT??null;let a=/^(.*)-foreground$/.exec(n);if(a){let e=r[a[1]??``];if(e&&typeof e==`object`)return e.foreground??null}return e.palette?.[n]??null}function zh(e){if(!e)return[];let t=[],n=(n,r)=>{let i=Rh(e,n);t.push({value:n,label:r,...i===null?{}:{swatch:i}})};for(let[t,r]of Object.entries(e.colors))r!=null&&(n(t,Vh(t)),typeof r==`object`&&`foreground`in r&&r.foreground!==void 0&&n(`${t}-foreground`,`${Vh(t)} text`));return t}function Bh(e){let t=e?.typography?.fontFamily;return t?Object.keys(t).map(e=>({value:e,label:Vh(e)})):[]}function Vh(e){return e.charAt(0).toUpperCase()+e.slice(1).replace(/-/g,` `)}var Hh=e=>({via:`style`,key:e}),Uh={id:`width`,label:`Width`,kind:`size`,slot:Hh(`width`),tier:`pane`,width:132,choices:Mh},Wh={id:`height`,label:`Height`,kind:`size`,slot:Hh(`height`),tier:`pane`,width:132,choices:Mh},Gh={id:`rounded`,label:`Corners`,kind:`choice`,slot:Hh(`rounded`),tier:`pane`,width:108,choices:Ph},Kh=[{id:`borderWidth`,label:`Border`,kind:`choice`,slot:Hh(`borderWidth`),tier:`bar`,width:100,choices:Ih},{id:`borderColor`,label:`Border color`,kind:`color`,slot:Hh(`borderColor`),tier:`bar`,width:132}],qh=[{id:`font`,label:`Font`,kind:`font`,slot:Hh(`fontFamily`),tier:`bar`,width:112},{id:`size`,label:`Size`,kind:`number`,slot:Hh(`fontSize`),tier:`bar`,width:84,min:8,max:200},{id:`weight`,label:`Weight`,kind:`choice`,slot:Hh(`fontWeight`),tier:`bar`,width:112,choices:Nh},{id:`align`,label:`Align`,kind:`align`,slot:Hh(`textAlign`),tier:`bar`,width:96,choices:Fh},{id:`color`,label:`Color`,kind:`color`,slot:Hh(`textColor`),tier:`bar`,width:132},{id:`leading`,label:`Line height`,kind:`ratio`,slot:Hh(`leading`),tier:`pane`,width:96,min:.75,max:3,step:.05},{id:`tracking`,label:`Letter spacing`,kind:`choice`,slot:Hh(`tracking`),tier:`pane`,width:108,choices:Lh},{id:`bg`,label:`Background`,kind:`color`,slot:Hh(`bg`),tier:`pane`,width:132},{...Uh},{...Wh},{id:`padding`,label:`Padding`,kind:`number`,slot:Hh(`padding`),tier:`pane`,width:88,min:0,max:256},{...Gh},...Kh.map(e=>({...e,tier:`pane`}))],Jh=[{id:`margin`,label:`Margin`,kind:`number`,slot:Hh(`margin`),tier:`bar`,width:88,min:0,max:256},{id:`padding`,label:`Padding`,kind:`number`,slot:Hh(`padding`),tier:`bar`,width:88,min:0,max:256},{id:`color`,label:`Text`,kind:`color`,slot:Hh(`textColor`),tier:`bar`,width:132},{id:`bg`,label:`Background`,kind:`color`,slot:Hh(`bg`),tier:`bar`,width:132},...Kh,{...Uh},{...Wh},{id:`gap`,label:`Gap`,kind:`number`,slot:Hh(`gap`),tier:`pane`,width:88,min:0,max:256},{...Gh},{id:`align`,label:`Align`,kind:`align`,slot:Hh(`textAlign`),tier:`pane`,width:96,choices:Fh}],Yh=[{id:`prompt`,label:`Prompt`,kind:`prompt`,slot:{via:`prop`,name:`src`},tier:`bar`,width:180},{...Gh,tier:`bar`},{...Uh},{...Wh},...Kh.map(e=>({...e,tier:`pane`}))],Xh=[{id:`name`,label:`Icon`,kind:`icon`,slot:{via:`prop`,name:`name`},tier:`bar`,width:148},{id:`size`,label:`Size`,kind:`number`,slot:{via:`prop`,name:`size`},tier:`bar`,width:84,min:8,max:128},{id:`color`,label:`Color`,kind:`color`,slot:Hh(`textColor`),tier:`bar`,width:132}],Zh=new Set([`className`,`style`,`sx`,`asChild`,`children`,`key`,`ref`]);function Qh(e){let t=[];for(let n of e?.props??[]){if(t.length>=2)break;Zh.has(n.name)||n.control===`enum`&&n.enumValues?.length&&t.push({id:`prop:${n.name}`,label:Vh(n.name),kind:`choice`,slot:{via:`prop`,name:n.name},tier:`bar`,width:124,choices:n.enumValues.map(e=>({value:String(e),label:Vh(String(e))}))})}return[...t,...Jh.map(e=>({...e,tier:`pane`}))]}var $h=4;function eg(e){if(!e)return[];let t=[];for(let n of e.params??[]){let e=tg(n);e&&t.push(t.length<$h?e:{...e,tier:`pane`})}return t}function tg(e){let t={via:`arg`,name:e.name},n={id:`arg:${e.name}`,label:Vh(e.name),slot:t,tier:`bar`};switch(e.type){case`number`:return{...n,kind:`number`,width:88,...e.min===void 0?{}:{min:e.min},...e.max===void 0?{}:{max:e.max},...e.step===void 0?{}:{step:e.step}};case`boolean`:return{...n,kind:`toggle`,width:88};case`enum`:return{...n,kind:`choice`,width:124,choices:(e.enum??[]).map(e=>({value:e,label:Vh(e)}))};case`color`:return{...n,kind:`color`,width:132};case`icon`:return{...n,kind:`icon`,width:148};case`string`:return{...n,kind:`text`,width:144};case`node`:return null}}function ng({node:e,descriptor:t,snippet:n}){let r=jh(e);switch(r){case`heading`:case`text`:return{role:r,controls:qh};case`box`:return{role:r,controls:Jh};case`image`:return{role:r,controls:Yh};case`icon`:return{role:r,controls:Xh};case`snippet`:return{role:r,controls:eg(n)};case`other`:return{role:r,controls:Qh(t)}}}function rg(e){return!(`$ref`in e)||e.$ref!==`Heading`?null:Va[Wa(e.props?.level)]??null}var ig=new Set([`xs`,`sm`,`base`,`lg`,`xl`,`2xl`,`3xl`,`4xl`,`5xl`,`6xl`,`7xl`,`8xl`,`9xl`,...Ba]),ag=new Set([`thin`,`extralight`,`light`,`normal`,`medium`,`semibold`,`bold`,`extrabold`,`black`]),og=/^\[-?[\d.]+(px|rem|em|%|ch|vw|vh)?\]$/;function sg(e,t){if(e.startsWith(`leading-`))return`leading`;if(e.startsWith(`tracking-`))return`tracking`;if(e.startsWith(`text-`)){let t=e.slice(5);return ig.has(t)||og.test(t)?`size`:null}if(e.startsWith(`font-`)){let n=e.slice(5);return ag.has(n)?`weight`:t.has(n)||n===`sans`||n===`serif`||n===`mono`?`family`:null}return null}function cg(e){let t=e.props??{};if(e.$ref===`Heading`){let e=Wa(t.level);return{role:Va[e],via:t.level===void 0?`level 1 (default)`:`level ${e}`}}if(e.$ref===`Text`){let e=String(t.variant??`default`),n=e in Ha?e:`default`;return{role:Ha[n],via:t.variant===void 0?`variant default`:`variant ${n}`}}return null}function lg(e,t){let n=[e],r=e;for(let e of t){if(!r||!(`$ref`in r)||(r=r.children?.[e],!r))break;n.push(r)}return n.reverse()}function ug(e,t){for(let n of lg(e,t)){if(!(`$ref`in n))continue;let e=typeof n.props?.className==`string`?n.props.className:``,t=e.split(/\s+/).find(e=>e.startsWith(`typeset-`));if(t)return{name:t.slice(8),via:`class`};if(n.$ref===`Prose`){let e=n.props?.preset;return{name:typeof e==`string`&&e?e:La,via:`prose`}}if(e.split(/\s+/).includes(`typeset`))return{name:La,via:`class`}}return null}function dg(e,t,n,r){if(!qi(r))return null;let i=cg(r);if(!i)return null;let a=e.typography.typesets??{},o=ug(t,n),s=a.default??{},c=o&&o.name!=="default"?a[o.name]:void 0,l={...s,...c??{}},u=e.typography.fontFamily??{},d=Qa(l,{fontFamily:u})[i.role],f=za[i.role].face,p=f===`heading`?l.fontHeading??l.fontBody:l.fontBody,m=new Set(Object.keys(u)),h=typeof r.props?.className==`string`?r.props.className:``,g={},_=[];for(let e of h.split(/\s+/).filter(Boolean)){let t=e.lastIndexOf(`:`),n=sg(t===-1?e:e.slice(t+1),m);n&&(t===-1?g[n]??=e:_.push(e))}return{role:i.role,via:i.via,resolved:d,face:{slot:f,...p?{role:p}:{},...p&&u[p]?{stack:u[p]}:{}},overrides:g,responsive:_,region:o}}var fg={0:0,px:1,"0.5":2,1:4,"1.5":6,2:8,"2.5":10,3:12,"3.5":14,4:16,5:20,6:24,7:28,8:32,9:36,10:40,11:44,12:48,14:56,16:64,20:80,24:96,28:112,32:128,36:144,40:160,44:176,48:192,56:224,64:256},pg=Object.fromEntries(Object.entries(fg).map(([e,t])=>[t,e]));function mg(e){if(e===void 0)return null;let t=fg[e];if(t!==void 0)return t;let n=/^\[(-?\d*\.?\d+)px\]$/.exec(e);return n?Number(n[1]):null}function hg(e){return pg[e]??`[${e}px]`}var gg=new Set([`block`,`inline-block`,`inline`,`flex`,`inline-flex`,`grid`,`inline-grid`,`hidden`,`contents`,`table`,`flow-root`]),_g=new Set([`xs`,`sm`,`base`,`lg`,`xl`,`2xl`,`3xl`,`4xl`,`5xl`,`6xl`,`7xl`,`8xl`,`9xl`]),vg=new Set([`thin`,`extralight`,`light`,`normal`,`medium`,`semibold`,`bold`,`extrabold`,`black`]),yg=new Set([`left`,`center`,`right`,`justify`,`start`,`end`]),bg=new Set([`0`,`2`,`4`,`8`]),xg=new Set([`x`,`y`,`t`,`r`,`b`,`l`,`s`,`e`,`solid`,`dashed`,`dotted`,`double`,`hidden`,`none`,`collapse`,`separate`,`spacing`]),Sg=new Set([`cover`,`contain`,`auto`,`center`,`top`,`bottom`,`left`,`right`,`repeat`,`no-repeat`,`fixed`,`local`,`scroll`,`clip`,`origin`,`blend`,`gradient`,`none`]),Cg={t:`top`,r:`right`,b:`bottom`,l:`left`};function wg(e,t,n){if(t===``)e.top=e.right=e.bottom=e.left=n;else if(t===`x`)e.left=e.right=n;else if(t===`y`)e.top=e.bottom=n;else{let r=Cg[t];r&&(e[r]=n)}}function Tg(e){return/^\[-?\d*\.?\d+(px|rem|em|%|vh|vw|ch|ex|pt)\]$/.test(e)}function Eg(e){let t={padding:{},margin:{}},n=[],r=[];for(let i of e.split(/\s+/)){let e=i.trim();if(!e)continue;if(e.includes(`:`)||e.startsWith(`!`)){n.push(e);continue}if(gg.has(e)){t.display=e===`hidden`?`none`:e;continue}if(e===`flex-row`||e===`flex-row-reverse`||e===`flex-col`||e===`flex-col-reverse`){t.flexDirection=e.slice(5);continue}if(e===`flex-wrap`||e===`flex-nowrap`||e===`flex-wrap-reverse`){t.flexWrap=e.slice(5);continue}let a=e.indexOf(`-`),o=a===-1?e:e.slice(0,a),s=a===-1?``:e.slice(a+1);if((o===`p`||o===`px`||o===`py`||o===`pt`||o===`pr`||o===`pb`||o===`pl`)&&s){r.push({box:`padding`,variant:o.slice(1),arg:s});continue}if((o===`m`||o===`mx`||o===`my`||o===`mt`||o===`mr`||o===`mb`||o===`ml`)&&s){r.push({box:`margin`,variant:o.slice(1),arg:s});continue}switch(o){case`justify`:t.justify=s;continue;case`items`:t.items=s;continue;case`gap`:if(s){t.gap=s;continue}break;case`w`:if(s){t.width=s;continue}break;case`h`:if(s){t.height=s;continue}break;case`leading`:t.leading=s;continue;case`tracking`:t.tracking=s;continue;case`font`:vg.has(s)?t.fontWeight=s:t.fontFamily=s;continue;case`text`:yg.has(s)?t.textAlign=s:_g.has(s)||Tg(s)?t.fontSize=s:t.textColor=s;continue;case`bg`:if(Sg.has(s.split(`-`)[0]??``))break;t.bg=s;continue;case`rounded`:if(s===``||!/^(t|r|b|l|tl|tr|br|bl|s|e|ss|se|ee|es)(-|$)/.test(s)){t.rounded=s;continue}break;case`border`:if(s===``){t.borderWidth=``;continue}if(bg.has(s)){t.borderWidth=s;continue}if(xg.has(s.split(`-`)[0]??``))break;t.borderColor=s;continue}n.push(e)}let i=e=>e===``?0:e===`x`||e===`y`?1:2;r.sort((e,t)=>i(e.variant)-i(t.variant));for(let e of r)wg(t[e.box],e.variant,e.arg);return{model:t,extra:n}}function Dg(e,t){let{top:n,right:r,bottom:i,left:a}=t;if(n===void 0&&r===void 0&&i===void 0&&a===void 0)return[];if(n!==void 0&&n===r&&r===i&&i===a)return[`${e}-${n}`];let o=[];return n!==void 0&&n===i?o.push(`${e}y-${n}`):(n!==void 0&&o.push(`${e}t-${n}`),i!==void 0&&o.push(`${e}b-${i}`)),a!==void 0&&a===r?o.push(`${e}x-${a}`):(a!==void 0&&o.push(`${e}l-${a}`),r!==void 0&&o.push(`${e}r-${r}`)),o}function Og({model:e,extra:t}){let n=[];return e.display&&n.push(e.display===`none`?`hidden`:e.display),e.flexDirection&&n.push(`flex-${e.flexDirection}`),e.flexWrap&&n.push(`flex-${e.flexWrap}`),e.items&&n.push(`items-${e.items}`),e.justify&&n.push(`justify-${e.justify}`),e.gap&&n.push(`gap-${e.gap}`),n.push(...Dg(`p`,e.padding)),n.push(...Dg(`m`,e.margin)),e.width&&n.push(`w-${e.width}`),e.height&&n.push(`h-${e.height}`),e.fontFamily&&n.push(`font-${e.fontFamily}`),e.fontSize&&n.push(`text-${e.fontSize}`),e.fontWeight&&n.push(`font-${e.fontWeight}`),e.leading&&n.push(`leading-${e.leading}`),e.tracking&&n.push(`tracking-${e.tracking}`),e.textAlign&&n.push(`text-${e.textAlign}`),e.textColor&&n.push(`text-${e.textColor}`),e.bg&&n.push(`bg-${e.bg}`),e.rounded!==void 0&&n.push(e.rounded===``?`rounded`:`rounded-${e.rounded}`),e.borderWidth!==void 0&&n.push(e.borderWidth===``?`border`:`border-${e.borderWidth}`),e.borderColor&&n.push(`border-${e.borderColor}`),n.push(...t),n.join(` `)}var kg={xs:12,sm:14,base:16,lg:18,xl:20,"2xl":24,"3xl":30,"4xl":36,"5xl":48,"6xl":60,"7xl":72,"8xl":96,"9xl":128},Ag=Object.fromEntries(Object.entries(kg).map(([e,t])=>[t,e]));function jg(e){if(e===void 0)return null;let t=kg[e];if(t!==void 0)return t;let n=/^\[(\d*\.?\d+)px\]$/.exec(e);return n?Number(n[1]):null}function Mg(e){return Ag[e]??`[${e}px]`}var Ng={none:1,tight:1.25,snug:1.375,normal:1.5,relaxed:1.625,loose:2};function Pg(e){if(e===void 0)return null;let t=Ng[e];if(t!==void 0)return t;let n=/^\[(\d*\.?\d+)\]$/.exec(e);return n?Number(n[1]):null}function Fg(e){for(let[t,n]of Object.entries(Ng))if(Math.abs(n-e)<.001)return t;return`[${Number(e.toFixed(3))}]`}function Ig(e){let{top:t,right:n,bottom:r,left:i}=e;return t===void 0||t!==n||t!==r||t!==i?null:t}function Lg(e){return e===void 0?{}:{top:e,right:e,bottom:e,left:e}}function Rg(e){return e===void 0?null:e===`full`||e===`screen`?`full`:e===`fit`||e===`auto`||e===`min`||e===`max`?`fit`:`fixed`}function zg(e){if(e===void 0)return null;let t=/^\[(\d*\.?\d+)px\]$/.exec(e);return t?Number(t[1]):mg(e)}function Bg(e){return Ji(e)?e.$extraClassName??``:qi(e)&&typeof e.props?.className==`string`?e.props.className:``}function Vg(e,t){switch(t){case`padding`:return mg(Ig(e.padding)??void 0);case`margin`:return mg(Ig(e.margin)??void 0);case`gap`:return mg(e.gap);case`fontSize`:return jg(e.fontSize);case`leading`:return Pg(e.leading);case`borderWidth`:return e.borderWidth===``?`1`:e.borderWidth??null;default:return e[t]??null}}function Hg(e,t,n){let r={...e,padding:{...e.padding},margin:{...e.margin}};if(n===null){switch(t){case`padding`:r.padding={};break;case`margin`:r.margin={};break;default:r[t]=void 0}return r}switch(t){case`padding`:r.padding=Lg(hg(Number(n)));break;case`margin`:r.margin=Lg(hg(Number(n)));break;case`gap`:r.gap=hg(Number(n));break;case`fontSize`:r.fontSize=Mg(Number(n));break;case`leading`:r.leading=Fg(Number(n));break;case`borderWidth`:r.borderWidth=String(n)===`1`?``:String(n);break;default:r[t]=String(n)}return r}var Ug=new Set([`fontFamily`,`fontSize`,`fontWeight`,`leading`,`tracking`,`textColor`,`bg`,`borderColor`,`rounded`]);function Wg(e,t){let{node:n,themeValues:r,themeSource:i}=t,a=t.computed?.[e.id]??null;if(e.slot.via===`arg`){let t=Gg((Ji(n)?n.args:void 0)?.[e.slot.name]);return{value:t,origin:`plain`,authored:t!==null}}if(e.slot.via===`prop`){let t=Gg((qi(n)?n.props:void 0)?.[e.slot.name]);return{value:t,origin:`plain`,authored:t!==null}}let o=e.slot.key,{model:s}=Eg(Bg(n)),c=Vg(s,o),l=r?.[e.id]??null;return c===null?l===null?{value:null,origin:Ug.has(o)?`theme`:`plain`,authored:!1,computed:a}:{value:l,origin:`theme`,authored:!1,source:i}:l!==null&&l!==c?{value:c,origin:`changed`,authored:!0,themeValue:l,source:i}:{value:c,origin:l===null?`plain`:`theme`,authored:!0,...l!==null&&i!==void 0?{source:i}:{}}}function Gg(e){return e==null?null:typeof e==`string`||typeof e==`number`||typeof e==`boolean`?e:null}function Kg(e,t,n){let r=Eg(e);return Og({model:Hg(r.model,t,n),extra:r.extra})}var qg=new Set([`span`,`a`,`em`,`strong`,`b`,`i`,`u`,`s`,`small`,`code`,`kbd`,`samp`,`var`,`abbr`,`cite`,`mark`,`q`,`sub`,`sup`,`time`,`label`]);function Jg(e,t){if(!qi(t))return e;let n=typeof t.props?.as==`string`?t.props.as:void 0;if(n===void 0||!qg.has(n))return e;let r=Eg(e);return r.model.display!==void 0&&r.model.display!==`inline`?e:Og({model:{...r.model,display:`block`},extra:r.extra})}var Yg={h1:`Heading 1`,h2:`Heading 2`,h3:`Heading 3`,h4:`Heading 4`,h5:`Heading 5`,h6:`Heading 6`,body:`Body`,lead:`Lead`,small:`Small`,caption:`Caption`},Xg={100:`thin`,200:`extralight`,300:`light`,400:`normal`,500:`medium`,600:`semibold`,700:`bold`,800:`extrabold`,900:`black`},Zg={values:{}},Qg=[[`leading-`,`leading`],[`tracking-`,`tracking`],[`font-`,`weight`],[`text-`,`size`]];function $g({theme:e,tree:t,path:n,node:r}){let i=jh(r);if(i!==`heading`&&i!==`text`||!e||!t)return Zg;let a=t_(e,t,n,r);if(!a)return Zg;let{facts:o,inherited:s}=a,{resolved:c,face:l}=o,u=o.region?`${Yg[o.role]} · ${o.region.name}`:Yg[o.role],d=s?`${u}, inherited`:u,f={font:l.role??l.slot,size:Math.round(c.fontSize*100)/100,weight:Xg[c.fontWeight]??null,leading:Math.round(c.lineHeight*1e3)/1e3,tracking:c.letterSpacing};if(s){let{overrides:e}=o,t=jg(e_(e.size,`text-`));t!==null&&(f.size=t);let n=e_(e.weight,`font-`);n!==void 0&&(f.weight=n);let r=e_(e.family,`font-`);r!==void 0&&(f.font=r);let i=Pg(e_(e.leading,`leading-`));i!==null&&(f.leading=Math.round(i*1e3)/1e3)}let p={};for(let e of o.responsive){let t=e.slice(e.indexOf(`:`)+1),n=Qg.find(([e])=>t.startsWith(e));n&&(p[n[1]]=`${e} also applies at wider frames`)}return{values:f,source:d,notes:p}}function e_(e,t){return e?.startsWith(t)?e.slice(t.length):void 0}function t_(e,t,n,r){let i=dg(e,t,n,r);if(i)return{facts:i,inherited:!1};for(let r=n.length-1;r>=0;r--){let i=n.slice(0,r),a=n_(t,i);if(!a)break;let o=dg(e,t,i,a);if(o)return{facts:o,inherited:!0}}return null}function n_(e,t){let n=e;for(let e of t){if(!n||!(`$ref`in n))return null;n=n.children?.[e]}return n??null}function r_(e,t){let n=(0,P.useRef)(null),r=(0,P.useRef)(null),i=(0,P.useRef)(0),a=(0,P.useRef)(t);a.current=t,(0,P.useEffect)(()=>()=>{n.current&&clearTimeout(n.current)},[]);let o=(0,P.useCallback)(()=>{n.current=null;let e=r.current;r.current=null,e&&(i.current=Date.now(),a.current(e.value))},[]);return(0,P.useCallback)((t,a=!1)=>{if(r.current={value:t},!a){n.current&&clearTimeout(n.current),n.current=setTimeout(o,e);return}n.current||=setTimeout(o,Math.max(0,e-(Date.now()-i.current)))},[e,o])}var i_=200;function a_({selection:e,liveClasses:t,node:n}){let r=e?`${e.screenId}:${e.path}`:``,i=(0,P.useRef)(null),a=r_(i_,e=>{R.applyClasses({screenId:e.screenId,path:Cc(e.path),classes:e.classes,gesture:e.gesture}).catch(e=>B(e,`Could not update style`))}),o=r_(i_,e=>{R.updateProps({screenId:e.screenId,path:Cc(e.path),propPatch:e.patch,gesture:e.gesture}).catch(e=>B(e,`Could not update prop`))}),s=r_(i_,e=>{R.updateSnippetArgs({screenId:e.screenId,path:Cc(e.path),argPatch:e.patch,gesture:e.gesture}).catch(e=>B(e,`Could not update snippet`))});return(0,P.useCallback)((c,l,u={})=>{if(!e)return;let{screenId:d,path:f}=e,{gesture:p}=u,m=p!==void 0;if(c.slot.via===`prop`){o({screenId:d,path:f,patch:{[c.slot.name]:l},gesture:p},m);return}if(c.slot.via===`arg`){s({screenId:d,path:f,patch:{[c.slot.name]:l},gesture:p},m);return}let h=c.slot.key,g=[...(i.current?.key===r?i.current.slots:[]).filter(([e])=>e!==h),[h,typeof l==`boolean`?String(l):l]];i.current={key:r,slots:g};let _=t;for(let[e,t]of g)_=Kg(_,e,typeof t==`boolean`?String(t):t);h===`textAlign`&&l!==null&&n&&(_=Jg(_,n)),a({screenId:d,path:f,classes:_,gesture:p},m)},[e,r,t,n,a,o,s])}var o_=[{id:`illustration`,label:`Illustration`,hint:`Spot art, empty states, editorial`},{id:`photo`,label:`Photo`,hint:`Realistic marketing, product, hero`},{id:`graphic`,label:`Graphic`,hint:`Layouts with legible text`},{id:`texture`,label:`Texture`,hint:`Backgrounds, gradients, patterns`},{id:`icon`,label:`Icon`,hint:`One pictogram, transparent`},{id:`vector`,label:`Vector (SVG)`,hint:`Illustrative logos and spot vectors`},{id:`mark`,label:`Mark (SVG)`,hint:`Flat geometric shapes — cheapest SVG`}],s_=[`1:1`,`4:3`,`3:4`,`16:9`,`9:16`,`3:2`,`2:3`];function c_(e,t){if(!e||!t)return;let n=e/t,r,i=1/0;for(let e of s_){let[t,a]=e.split(`:`).map(Number),o=Math.abs(n-t/a);o<i&&(i=o,r=e)}return r}var l_={"1:1":`1/1`,"4:3":`4/3`,"3:4":`3/4`,"16:9":`16/9`},u_=Object.fromEntries(Object.entries(l_).map(([e,t])=>[t,e]));function d_(e,t){return e?.aspect??u_[t??``]??c_(e?.width,e?.height)??`1:1`}function f_(e){return`$${(e/1e6).toFixed(2)}`}function p_(e,t){let n=new Map,r=(e,t)=>{n.has(e)||n.set(e,new Set),n.has(t)||n.set(t,new Set),n.get(e)?.add(t),n.get(t)?.add(e)};for(let[t,n]of Object.entries(e))n.replaces&&r(t,n.replaces);let i=new Set([t]),a=[t];for(;a.length>0;){let e=a.shift();for(let t of n.get(e)??[])i.has(t)||(i.add(t),a.push(t))}return i.delete(t),[...i].sort((t,n)=>(e[n]?.generatedAt??``).localeCompare(e[t]?.generatedAt??``))}function m_(e){let t=Date.now()-new Date(e).getTime();if(!Number.isFinite(t)||t<0)return`just now`;let n=Math.round(t/6e4);if(n<1)return`just now`;if(n<60)return`${n}m ago`;let r=Math.round(n/60);return r<24?`${r}h ago`:`${Math.round(r/24)}d ago`}function h_({screenId:e,path:t,src:n,nodeAspect:r}){let i=W(e=>e.generatedAssets),a=W(e=>e.loadGeneratedAssets),o=fi(n),s=o?i[o]:void 0,[c,l]=(0,P.useState)(s?.prompt??``),[u,d]=(0,P.useState)(s?.intent??`illustration`),[f,p]=(0,P.useState)(()=>d_(s,r)),[m,h]=(0,P.useState)(!1),[g,_]=(0,P.useState)([]),[v,y]=(0,P.useState)(!1),b=(0,P.useRef)(o);(0,P.useEffect)(()=>{let e=o??``,t=e?i[e]:void 0;b.current===e?t&&c===``&&(l(t.prompt),d(t.intent),p(d_(t,r))):(b.current=e,l(t?.prompt??``),d(t?.intent??`illustration`),p(d_(t,r)),y(!1))},[o,i,c,r]),(0,P.useEffect)(()=>{let e=!0;return ps().then(t=>e&&_(t)).catch(()=>void 0),()=>{e=!1}},[]);let x=e=>g.find(t=>t.intent===e)?.priceMicros,S=o_.filter(e=>g.length===0||x(e.id)!==void 0),C=o_.find(e=>e.id===u)?.label??u,w=u===`vector`||u===`mark`,T=async()=>{let n=c.trim();if(n&&!m){h(!0);try{let i=await gs({prompt:n,intent:u,...w?{}:{aspect:f},...o?{replaces:o}:{}}),s={src:i.url},c=!r||r in u_,l=l_[c_(i.width,i.height)??``]??(w?void 0:l_[f]);c&&l&&(s.aspect=l),b.current=i.assetPath,await R.updateProps({screenId:e,path:Cc(t),propPatch:s}),await a(),z({kind:`success`,title:`Image generated`,message:i.cost})}catch(e){B(e,`Could not generate the image`)}finally{h(!1)}}},E=async n=>{if(!m){h(!0);try{let a=i[n],o={src:`/${n}`},s=l_[c_(a?.width,a?.height)??``];s&&(!r||r in u_)&&(o.aspect=s),b.current=n,l(a?.prompt??``),d(a?.intent??`illustration`),y(!1),await R.updateProps({screenId:e,path:Cc(t),propPatch:o})}catch(e){B(e,`Could not restore that version`)}finally{h(!1)}}},D=async e=>{if(!m){h(!0);try{await ms(e),await a(),z({kind:`success`,message:`Deleted ${e.replace(`assets/`,``)}.`})}catch(e){B(e,`Could not delete that image`)}finally{h(!1)}}};if(!o)return(0,H.jsxs)(`section`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(`div`,{className:`text-xs uppercase tracking-wider text-muted-foreground`,children:`Image`}),(0,H.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`This image isn't in the folder's `,(0,H.jsx)(`code`,{children:`assets/`}),` store, so it has no velloo provenance. Point `,(0,H.jsx)(`code`,{children:`src`}),` at an asset to generate a replacement.`]})]});let O=!s&&!v,k=p_(i,o);return(0,H.jsxs)(`section`,{className:`flex flex-col gap-2`,"data-testid":`image-panel`,children:[(0,H.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,H.jsx)(`div`,{className:`text-xs uppercase tracking-wider text-muted-foreground`,children:`Image`}),s?(0,H.jsx)(`span`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground`,"data-testid":`image-panel-badge`,children:`generated by velloo`}):(0,H.jsx)(`span`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground`,"data-testid":`image-panel-badge`,children:`not generated`})]}),O?(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`velloo didn't generate this image, so there's no prompt to show.`}),(0,H.jsx)(G,{variant:`outline`,size:`sm`,className:`text-xs`,"data-testid":`image-panel-compose`,onClick:()=>y(!0),children:`Replace with a generated image`})]}):(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(K,{htmlFor:`image-prompt`,className:`text-xs font-medium text-muted-foreground`,children:`prompt`}),(0,H.jsx)(Lf,{id:`image-prompt`,"data-testid":`image-panel-prompt`,value:c,onChange:e=>l(e.target.value),rows:4,placeholder:`Describe subject, style, lighting and mood — these models reward detail.`,className:`min-h-0 text-xs`,onKeyDown:Od(()=>void T())}),(0,H.jsxs)(`div`,{className:`flex gap-2`,children:[(0,H.jsxs)(`div`,{className:`flex-1 flex flex-col gap-1.5`,children:[(0,H.jsx)(K,{htmlFor:`image-intent`,className:`text-xs font-medium text-muted-foreground`,children:`intent`}),(0,H.jsxs)(q,{value:u,onValueChange:d,children:[(0,H.jsx)(Y,{id:`image-intent`,size:`sm`,className:`text-xs`,children:(0,H.jsx)(J,{children:C})}),(0,H.jsx)(vd,{children:S.map(e=>{let t=x(e.id);return(0,H.jsx)(X,{value:e.id,className:`[&>span:last-child]:flex-1`,children:(0,H.jsxs)(`span`,{className:`flex items-center justify-between gap-4`,children:[(0,H.jsx)(`span`,{children:e.label}),t===void 0?null:(0,H.jsx)(`span`,{className:`text-muted-foreground tabular-nums`,children:f_(t)})]})},e.id)})})]})]}),w?null:(0,H.jsxs)(`div`,{className:`w-24 flex flex-col gap-1.5`,children:[(0,H.jsx)(K,{htmlFor:`image-aspect`,className:`text-xs font-medium text-muted-foreground`,children:`aspect`}),(0,H.jsxs)(q,{value:f,onValueChange:p,children:[(0,H.jsx)(Y,{id:`image-aspect`,size:`sm`,className:`text-xs`,children:(0,H.jsx)(J,{})}),(0,H.jsx)(vd,{children:s_.map(e=>(0,H.jsx)(X,{value:e,children:e},e))})]})]})]}),(0,H.jsx)(G,{size:`sm`,className:`text-xs`,"data-testid":`image-panel-generate`,disabled:m||c.trim().length===0,onClick:()=>void T(),children:m?`Generating…`:s?`Regenerate`:`Generate`}),(0,H.jsxs)(`p`,{className:`text-[10px] text-muted-foreground leading-relaxed`,children:[s?(0,H.jsxs)(H.Fragment,{children:[s.intent,` · ${m_(s.generatedAt)}`,s.width&&s.height?` · ${s.width}×${s.height}`:null,(0,H.jsx)(`br`,{})]}):null,`Charged against your velloo-cloud credits. Each run makes a new asset and repoints this node.`]})]}),k.length>0?(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5 pt-1`,"data-testid":`image-panel-history`,children:[(0,H.jsx)(`div`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground`,children:`Previous versions`}),k.map(e=>{let t=i[e];return(0,H.jsxs)(`div`,{className:`flex items-center gap-2`,"data-testid":`image-panel-version`,"data-version":e,children:[(0,H.jsx)(`img`,{src:`/${e}`,alt:``,className:`size-8 shrink-0 rounded border object-cover`}),(0,H.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-[10px] text-muted-foreground`,children:t?`${t.intent} · ${m_(t.generatedAt)}`:`original`}),(0,H.jsx)(G,{variant:`ghost`,size:`icon`,className:`size-6`,title:`Put this version back on the node`,"data-testid":`image-panel-restore`,disabled:m,onClick:()=>void E(e),children:(0,H.jsx)(sr,{className:`size-3`})}),(0,H.jsx)(G,{variant:`ghost`,size:`icon`,className:`size-6 text-muted-foreground hover:text-destructive`,title:`Delete this version for good`,"data-testid":`image-panel-delete`,disabled:m,onClick:()=>void D(e),children:(0,H.jsx)(Ar,{className:`size-3`})})]},e)})]}):null]})}function g_({delayDuration:e=0,...t}){return(0,H.jsx)(Ve,{"data-slot":`tooltip-provider`,delayDuration:e,...t})}function __({...e}){return(0,H.jsx)(De,{"data-slot":`tooltip`,...e})}function v_({...e}){return(0,H.jsx)(Ze,{"data-slot":`tooltip-trigger`,...e})}function y_({className:e,sideOffset:t=0,children:n,...r}){return(0,H.jsx)(nt,{children:(0,H.jsxs)(Ye,{"data-slot":`tooltip-content`,sideOffset:t,className:V(`z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95`,e),...r,children:[n,(0,H.jsx)(ot,{className:`z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground`})]})})}var b_=w(`rgb`),x_=w(`hsv`);function S_({h:e,s:t,v:n}){return E(b_({mode:`hsv`,h:e,s:t,v:n}))??`#000000`}function C_(e){let t=x(e);if(!t)return null;let n=x_(t);return{h:n.h??0,s:n.s??0,v:n.v??0}}var w_=160,T_=w_/2,E_=`conic-gradient(from 90deg, ${[0,60,120,180,240,300,360].map(e=>`hsl(${e} 100% 50%)`).join(`, `)})`;function D_({value:e,onChange:t}){let n=(0,P.useRef)(null),r=(0,P.useCallback)((r,i)=>{let a=n.current?.getBoundingClientRect();if(!a)return;let o=r-(a.left+T_),s=i-(a.top+T_),c=(Math.atan2(s,o)*180/Math.PI+360)%360,l=Math.min(1,Math.hypot(o,s)/T_);t({...e,h:c,s:l})},[t,e]),i=e.h*Math.PI/180,a=T_+Math.cos(i)*e.s*T_,o=T_+Math.sin(i)*e.s*T_,s=S_(e),c=`rgba(0,0,0,${1-Math.min(1,Math.max(0,e.v))})`;return(0,H.jsxs)(`div`,{className:`flex flex-col items-center gap-3`,children:[(0,H.jsx)(`div`,{ref:n,role:`application`,"aria-label":`Hue and saturation`,className:`relative cursor-crosshair rounded-full border border-border/60`,style:{width:w_,height:w_,backgroundImage:`linear-gradient(${c}, ${c}), radial-gradient(circle at center, #fff 0%, rgba(255,255,255,0) 100%), ${E_}`},onPointerDown:e=>{e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),r(e.clientX,e.clientY)},onPointerMove:e=>{e.buttons!==0&&r(e.clientX,e.clientY)},children:(0,H.jsx)(`span`,{className:`pointer-events-none absolute size-3.5 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-white shadow-[0_0_0_1px_rgba(0,0,0,0.45)]`,style:{left:a,top:o,background:s}})}),(0,H.jsxs)(`label`,{className:`flex w-full items-center gap-2`,title:`Brightness`,children:[(0,H.jsx)(`span`,{className:`sr-only`,children:`Brightness`}),(0,H.jsx)(`input`,{type:`range`,min:0,max:1,step:.01,value:e.v,onChange:n=>t({...e,v:Number(n.target.value)}),className:`h-2 w-full cursor-pointer appearance-none rounded-full border border-border/60 [&::-webkit-slider-thumb]:size-3.5 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:border-2 [&::-webkit-slider-thumb]:border-white [&::-webkit-slider-thumb]:bg-transparent [&::-webkit-slider-thumb]:shadow-[0_0_0_1px_rgba(0,0,0,0.45)]`,style:{backgroundImage:`linear-gradient(to right, #000, ${S_({...e,v:1})})`}})]})]})}function O_({hex:e,onChange:t}){let[n,r]=(0,P.useState)(e);return(0,P.useEffect)(()=>r(e),[e]),(0,H.jsxs)(`div`,{className:`flex items-center gap-1.5 rounded-md border bg-background px-2`,children:[(0,H.jsx)(`span`,{className:`size-3.5 shrink-0 rounded-full border border-border/70`,style:{background:x(n)?n:e}}),(0,H.jsx)(`input`,{value:n,spellCheck:!1,"aria-label":`Hex`,className:`h-7 min-w-0 flex-1 bg-transparent font-mono text-xs uppercase outline-none`,onChange:n=>{let i=n.target.value;r(i);let a=x(i.startsWith(`#`)?i:`#${i}`);a&&t(E(b_(a))??e)}})]})}var k_=`modulepreload`,A_=function(e){return`/`+e},j_={},M_=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=A_(t,n),t=s(t),t in j_)return;j_[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:k_,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},N_=null,P_=null;function F_(e){let t=new Map;for(let[n,r]of Object.entries(e))typeof r==`object`&&r&&typeof r.displayName==`string`&&t.set(n,r);return t}function I_(e,t){let n=t.trim();if(e&&n!==``)return e.get(n)??e.get(Ki(n))}function L_(){return P_??=M_(()=>import(`./lucide-all-CezGNjGW.js`).then(e=>(N_=F_(e),N_)),__vite__mapDeps([0,1])),P_}function R_(){let[e,t]=(0,P.useState)(N_);return(0,P.useEffect)(()=>{if(e)return;let n=!0;return L_().then(e=>{n&&t(e)}),()=>{n=!1}},[e]),e}var z_=80;function B_({value:e,options:t,onChange:n}){let[r,i]=(0,P.useState)(!1),a=I_(R_(),e);return(0,H.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,H.jsx)(`div`,{className:`grid h-8 w-8 place-items-center rounded-md border bg-background text-foreground shrink-0`,children:a?(0,H.jsx)(a,{size:16,strokeWidth:2}):(0,H.jsx)(`span`,{className:`text-xs`,children:`?`})}),(0,H.jsxs)(Wp,{open:r,onOpenChange:i,children:[(0,H.jsx)(Gp,{asChild:!0,children:(0,H.jsx)(G,{variant:`outline`,size:`default`,className:`flex-1 justify-start font-normal`,children:e||(0,H.jsx)(`span`,{className:`text-muted-foreground`,children:`Pick an icon…`})})}),(0,H.jsx)(Kp,{align:`end`,className:`w-72 p-0`,children:(0,H.jsx)(V_,{value:e,options:t,onPick:e=>{n(e),i(!1)}})})]})]})}function V_({value:e,options:t,onPick:n}){let[r,i]=(0,P.useState)(``),a=(0,P.useRef)(null),o=R_();(0,P.useEffect)(()=>{let e=requestAnimationFrame(()=>a.current?.focus());return()=>cancelAnimationFrame(e)},[]);let s=(0,P.useMemo)(()=>{let e=r.trim().toLowerCase();return e?t.filter(t=>t.toLowerCase().includes(e)).slice(0,z_):t.slice(0,z_)},[t,r]);return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(Z,{ref:a,type:`text`,value:r,placeholder:`Search ${t.length} icons…`,onChange:e=>i(e.target.value),className:`rounded-b-none border-0 border-b shadow-none focus-visible:ring-0`}),(0,H.jsx)(`div`,{className:`grid max-h-64 grid-cols-8 gap-1 overflow-auto scroll-stable p-2`,children:s.length===0?(0,H.jsx)(`div`,{className:`col-span-8 px-2 py-4 text-center text-xs text-muted-foreground`,children:`No matches.`}):s.map(t=>{let r=I_(o,t);return r?(0,H.jsx)(`button`,{type:`button`,title:t,onClick:()=>n(t),className:`grid h-7 w-7 place-items-center rounded-md transition-colors `+(t===e?`bg-primary text-primary-foreground`:`text-foreground hover:bg-muted`),children:(0,H.jsx)(r,{size:14,strokeWidth:2})},t):null})}),r&&s.length===z_?(0,H.jsxs)(`div`,{className:`border-t px-3 py-1 text-[10px] text-muted-foreground`,children:[`Showing first `,z_,`. Refine your search to see more.`]}):null]})}function H_({className:e,orientation:t=`horizontal`,...n}){return(0,H.jsx)(ct,{"data-slot":`tabs`,"data-orientation":t,className:V(`group/tabs flex gap-2 data-horizontal:flex-col`,e),...n})}var U_=d(`group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-horizontal/tabs:h-8 group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col data-[variant=line]:rounded-none`,{variants:{variant:{default:`bg-muted`,line:`gap-1 bg-transparent`}},defaultVariants:{variant:`default`}});function W_({className:e,variant:t=`default`,...n}){return(0,H.jsx)(Ge,{"data-slot":`tabs-list`,"data-variant":t,className:V(U_({variant:t}),e),...n})}function G_({className:e,...t}){return(0,H.jsx)(Me,{"data-slot":`tabs-trigger`,className:V(`relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 dark:text-muted-foreground dark:hover:text-foreground group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,`group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent`,`data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground`,`after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100`,e),...t})}var K_=e=>e>0?{className:`shrink-0`,style:{width:e}}:{className:`min-w-0`};function q_({label:e,origin:t,themeValue:n,source:r,width:i,note:a,onReset:o,children:s}){let c=t===`changed`,l=[c&&n!=null?`${r??`Theme`} sets ${n}`:t===`theme`&&r?`From ${r}`:null,a].filter(Boolean).join(` — `)||null,u=(0,H.jsx)(`span`,{className:`truncate ${c?`text-foreground font-medium`:`text-muted-foreground`}`,children:e}),d=K_(i);return(0,H.jsxs)(`div`,{className:`flex flex-col gap-1 ${d.className}`,style:d.style,children:[(0,H.jsxs)(`div`,{className:`flex h-3.5 items-center gap-1 px-0.5 text-[10px] leading-none`,children:[c?(0,H.jsx)(`span`,{className:`size-1.5 shrink-0 rounded-full bg-primary`}):null,a?(0,H.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:`@`}):null,l?(0,H.jsxs)(__,{children:[(0,H.jsx)(v_,{asChild:!0,children:u}),(0,H.jsx)(y_,{side:`top`,children:l})]}):u,c&&o?(0,H.jsx)(`button`,{type:`button`,"aria-label":`Reset ${e}`,title:l??`Reset ${e}`,className:`ml-auto shrink-0 text-muted-foreground hover:text-foreground`,onClick:o,children:(0,H.jsx)(sr,{size:9})}):null]}),s]})}var J_=`h-7 w-full rounded-md border bg-background text-xs`,Y_=`—`;function X_({value:e,ghost:t,muted:n=!1,onChange:r,min:i,max:a,step:o=1,gear:s=3,suffix:c=`px`}){let[l,u]=(0,P.useState)(null),d=(0,P.useRef)(null),f=e=>{let t=e;return i!==void 0&&(t=Math.max(i,t)),a!==void 0&&(t=Math.min(a,t)),Math.round(t*1e3)/1e3},p=e=>{let t=Number.parseFloat(e);Number.isFinite(t)&&r(f(t)),u(null)},m=e??(typeof t==`number`?t:0);return(0,H.jsxs)(`div`,{className:`${J_} flex items-center overflow-hidden focus-within:ring-1 focus-within:ring-ring`,children:[(0,H.jsx)(`input`,{type:`text`,inputMode:`decimal`,value:l??(e===null?``:String(e)),placeholder:t==null?Y_:String(t),className:`min-w-0 flex-1 bg-transparent px-2 tabular-nums outline-none placeholder:text-muted-foreground/60 ${n?`text-muted-foreground`:``}`,onChange:e=>u(e.target.value),onBlur:e=>p(e.target.value),onKeyDown:e=>{if(e.key===`Enter`)p(e.target.value),e.target.blur();else if(e.key===`Escape`)u(null),e.target.blur();else if(e.key===`ArrowUp`||e.key===`ArrowDown`){e.preventDefault();let t=e.shiftKey?10:1,n=f(m+(e.key===`ArrowUp`?o:-o)*t);u(null),r(n)}}}),(0,H.jsx)(`button`,{type:`button`,tabIndex:-1,"aria-label":`Drag to adjust`,className:`h-full shrink-0 cursor-ew-resize select-none border-l px-1.5 text-[9px] text-muted-foreground hover:bg-accent hover:text-foreground`,onPointerDown:e=>{e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),d.current={startX:e.clientX,startValue:m,gesture:`scrub-${e.pointerId}-${Date.now()}`}},onPointerMove:t=>{let n=d.current;if(!n)return;let i=Math.round((t.clientX-n.startX)/s);if(i===0)return;let a=f(n.startValue+i*o);a!==e&&r(a,{gesture:n.gesture})},onPointerUp:e=>{d.current=null,e.currentTarget.releasePointerCapture(e.pointerId)},children:c})]})}function Z_({value:e,ghost:t,muted:n=!1,choices:r,onChange:i,placeholder:a}){return(0,H.jsxs)(q,{value:e??``,onValueChange:i,children:[(0,H.jsx)(Y,{className:`${J_} min-h-0 px-2 [&>span]:truncate ${n||e===null?`text-muted-foreground`:``}`,children:(0,H.jsx)(J,{placeholder:t?Q_(r,t):a??Y_})}),(0,H.jsx)(vd,{children:r.map(e=>(0,H.jsx)(X,{value:e.value,className:`text-xs`,children:e.label},e.value))})]})}function Q_(e,t){return t?e.find(e=>e.value===t)?.label??t:Y_}function $_({mode:e,px:t,measured:n,muted:r=!1,choices:i,onMode:a,onPx:o}){return(0,H.jsxs)(`div`,{className:`flex items-stretch gap-1`,children:[(0,H.jsx)(`div`,{className:`w-[70px] shrink-0`,children:(0,H.jsx)(Z_,{value:e,muted:r,choices:i,onChange:a,placeholder:`Auto`})}),(0,H.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,H.jsx)(X_,{value:e===`fixed`?t:null,ghost:e===`fixed`?null:n??null,onChange:o,min:0,max:4096})})]})}function ev({value:e,ghost:t,muted:n=!1,choices:r,onChange:i}){let a=e??t??null,o=n||e===null;return(0,H.jsx)(Zp,{type:`single`,value:a??``,onValueChange:e=>e&&i(e),className:`${J_} items-stretch p-0.5`,children:r.map(e=>(0,H.jsx)(Qp,{value:e.value,title:e.label,className:`h-auto min-w-0 flex-1 rounded-sm text-[10px] text-muted-foreground hover:bg-accent/50 `+(o?`data-[state=on]:bg-muted data-[state=on]:text-muted-foreground`:`data-[state=on]:bg-accent data-[state=on]:text-accent-foreground`),children:e.label.charAt(0)},e.value))})}var tv=`#7c3aed`;function nv({value:e,ghost:t,muted:n=!1,choices:r,resolve:i,onChange:a}){let[o,s]=(0,P.useState)(!1),c=e??t??null,l=c?.startsWith(`[`)===!0,[u,d]=(0,P.useState)(`theme`),[f,p]=(0,P.useState)({h:265,s:.75,v:.9}),m=(0,P.useRef)(``);(0,P.useEffect)(()=>{if(!o)return;m.current=`color-${Date.now()}`,d(l?`custom`:`theme`);let e=C_(i(c)??tv);e&&p(e)},[o,l,c,i]);let h=e=>{p(e),a(`[${S_(e)}]`,{gesture:m.current})};return(0,H.jsxs)(Wp,{open:o,onOpenChange:s,children:[(0,H.jsxs)(Gp,{className:`${J_} flex items-center gap-1.5 px-1.5 hover:bg-accent/50 ${n||e===null?`text-muted-foreground`:``}`,children:[(0,H.jsx)(iv,{css:i(c),unset:c===null}),(0,H.jsx)(`span`,{className:`truncate`,children:c?Q_(r,c):Y_})]}),(0,H.jsxs)(Kp,{align:`start`,className:`w-64 p-0`,children:[(0,H.jsx)(H_,{value:u,onValueChange:e=>d(e),children:(0,H.jsxs)(W_,{className:`w-full rounded-none border-b bg-transparent p-1.5`,children:[(0,H.jsx)(G_,{value:`theme`,className:`flex-1 text-xs capitalize`,children:`theme`}),(0,H.jsx)(G_,{value:`custom`,className:`flex-1 text-xs capitalize`,children:`custom`})]})}),u===`theme`?(0,H.jsxs)(`div`,{className:`max-h-64 overflow-y-auto p-1`,children:[r.length===0?(0,H.jsx)(Ku,{className:`p-3`,children:(0,H.jsx)(Zu,{className:`text-xs`,children:`This theme declares no colours.`})}):null,r.map(e=>{let t=e.swatch??i(e.value);return(0,H.jsxs)(`button`,{type:`button`,className:`flex w-full items-center gap-2 rounded-sm px-1.5 py-1 text-left text-xs hover:bg-accent/50 ${c===e.value?`bg-accent text-accent-foreground`:``}`,onClick:()=>{a(e.value),s(!1)},children:[(0,H.jsx)(iv,{css:t}),(0,H.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:e.label}),(0,H.jsx)(`span`,{className:`shrink-0 font-mono text-[10px] text-muted-foreground`,children:rv(t)})]},e.value)})]}):(0,H.jsxs)(`div`,{className:`flex flex-col gap-3 p-3`,children:[(0,H.jsx)(D_,{value:f,onChange:h}),(0,H.jsx)(O_,{hex:S_(f),onChange:e=>{let t=C_(e);t&&h(t)}})]})]})]})}function rv(e){return e?gh(e)?.hex.toUpperCase()??``:``}function iv({css:e,unset:t=!1}){return(0,H.jsx)(`span`,{className:`size-4 shrink-0 rounded-full border border-border/70`,style:e?{background:e}:t?void 0:{backgroundImage:`repeating-linear-gradient(45deg, var(--muted-foreground) 0 2px, transparent 2px 5px)`}})}function av({value:e,options:t,onChange:n}){let[r,i]=(0,P.useState)(!1),a=I_(R_(),e);return(0,H.jsxs)(Wp,{open:r,onOpenChange:i,children:[(0,H.jsxs)(Gp,{className:`${J_} flex items-center gap-1.5 px-1.5 hover:bg-accent/50 ${e?``:`text-muted-foreground`}`,children:[(0,H.jsx)(`span`,{className:`grid size-4 shrink-0 place-items-center`,children:a?(0,H.jsx)(a,{size:14,strokeWidth:2}):`—`}),(0,H.jsx)(`span`,{className:`truncate`,children:e?ov(e):`Pick an icon`})]}),(0,H.jsx)(Kp,{align:`start`,className:`w-72 p-0`,children:(0,H.jsx)(V_,{value:e,options:t,onPick:e=>{n(e),i(!1)}})})]})}function ov(e){let t=e.replace(/([a-z0-9])([A-Z])/g,`$1 $2`);return t.charAt(0)+t.slice(1).toLowerCase()}function sv({value:e,onChange:t,placeholder:n}){let[r,i]=(0,P.useState)(null);return(0,H.jsx)(`input`,{type:`text`,value:r??e,placeholder:n,className:`${J_} px-2 outline-none focus:ring-1 focus:ring-ring`,onChange:e=>{i(e.target.value),t(e.target.value)},onBlur:()=>i(null)})}function cv({value:e,onChange:t}){return(0,H.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":e,className:`${J_} px-2 text-left ${e?``:`text-muted-foreground`}`,onClick:()=>t(!e),children:e?`On`:`Off`})}function lv({summary:e,onOpen:t}){return(0,H.jsx)(`button`,{type:`button`,className:`${J_} truncate px-2 text-left hover:bg-accent/50 ${e?``:`text-muted-foreground`}`,onClick:t,title:e??void 0,children:e??`Describe…`})}var uv=`__browse`,dv={heading:Mr,text:Qn,box:Sr,image:mn,icon:fr,snippet:Yt,other:Yt};function fv(){let e=W(e=>e.selection),t=W(e=>e.cursorMode),n=W(e=>e.wsConnected),r=W(e=>e.screens),i=W(e=>e.theme),a=W(e=>e.styleChannel),o=W(e=>e.channelsByLibrary),s=W(e=>e.components),c=W(e=>e.design),l=W(e=>e.openSnippetEditor),u=W(e=>e.setBrowsingFaces),d=W(e=>e.setRightTab),f=W(e=>e.setRightPaneCollapsed),p=W(e=>e.setSnippetFocus),m=W(e=>e.snippetFocus),h=lh(),g=ch(),[_,v]=(0,P.useState)(!1),y=(0,P.useMemo)(()=>Ec(r,e),[r,e]),b=e?r[e.screenId]?.tree:void 0,x=(0,P.useMemo)(()=>!y||!s||!qi(y)?null:s.find(e=>e.id===y.$ref)??null,[y,s]),S=(0,P.useMemo)(()=>!y||!Ji(y)?null:c?.snippets.find(e=>e.id===y.$snippet)??null,[y,c]),C=e?r[e.screenId]?.library:void 0,w=(C?o[C]:void 0)??a,T=w===null||w.kind===`tailwind-classname`,E=(0,P.useMemo)(()=>{if(!y)return null;let e=ng({node:y,descriptor:x,snippet:S}),t=T?e.controls:e.controls.filter(e=>e.slot.via!==`style`);return{...e,controls:Dh(t)}},[y,x,S,T]),D=(0,P.useMemo)(()=>!y||!e?{values:{}}:$g({theme:i,tree:b,path:Cc(e.path),node:y}),[i,b,e,y]),O=W(e=>e.selectionComputed),k=(0,P.useMemo)(()=>Eh(O),[O]),A=(0,P.useMemo)(()=>zh(i),[i]),j=(0,P.useCallback)(e=>Rh(i,e),[i]),M=(0,P.useMemo)(()=>[...Bh(i),{value:uv,label:`Browse fonts…`}],[i]),ee=a_({selection:e,node:y,liveClasses:y?Bg(y):``}),te=(0,P.useCallback)((e,t,n)=>{if(t===uv){d(`node`),f(!1),u(!0);return}ee(e,t,n)},[ee,u,d,f]);if(t!==`select`)return null;if(m!==null&&(!e||!y||!E))return(0,H.jsx)(mv,{name:c?.snippets.find(e=>e.id===m)?.name??m,onDone:()=>p(null),children:(0,H.jsx)(`span`,{className:`self-center text-xs text-muted-foreground`,children:`Pick anything inside it — every instance changes together.`})});if(!e||!y||!E||Xi(y))return null;let ne=h[0]??null,re=Ji(y)?y.$snippet:null,ie=dv[E.role],ae=rg(y),oe=Ji(y)?S?.name??y.$snippet:qi(y)?y.$ref:`Param`,se=qi(y)&&typeof y.props?.src==`string`?y.props.src:null,ce=e.screenId.startsWith(`snippet:`);return(0,H.jsxs)(g_,{delayDuration:300,children:[(0,H.jsxs)(`div`,{className:`pointer-events-none absolute inset-x-0 bottom-4 z-30 flex flex-col items-center gap-1.5 px-6`,children:[m===null?null:(0,H.jsx)(pv,{name:c?.snippets.find(e=>e.id===m)?.name??m,onDone:()=>p(null)}),(0,H.jsxs)(`div`,{className:`pointer-events-auto flex max-w-full items-stretch gap-2 rounded-xl border bg-card/95 p-2 shadow-xl backdrop-blur-sm ${E.role===`snippet`||ce?`border-violet-400/70`:``} ${n?``:`pointer-events-none opacity-50`}`,"data-velloo-hud":!0,children:[(0,H.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1.5 self-center pr-1 pl-0.5`,children:[(0,H.jsx)(ie,{size:14,className:E.role===`snippet`?`text-violet-500`:`text-muted-foreground`}),(0,H.jsx)(`span`,{className:`max-w-[140px] truncate text-xs font-medium`,children:oe}),ce?(0,H.jsx)(U,{className:`bg-violet-500/15 px-1 py-0 text-[10px] text-violet-600 dark:text-violet-300`,children:`in snippet`}):null,ae?(0,H.jsx)(U,{variant:`secondary`,className:`px-1 py-0 text-[10px]`,children:ae}):null]}),(0,H.jsx)(Pp,{orientation:`vertical`,className:`shrink-0 self-stretch`}),re===null?null:(0,H.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 self-center`,children:[(0,H.jsx)(G,{size:`sm`,variant:`outline`,className:`h-7 text-xs`,onClick:()=>l(re),children:`Edit snippet`}),(0,H.jsx)(G,{size:`sm`,variant:m===re?`default`:`ghost`,className:`h-7 text-xs`,onClick:()=>p(m===re?null:re),title:`Edit this snippet in place — every instance updates together`,children:m===re?`Done`:`Edit in place`}),E.controls.length>0?(0,H.jsx)(Pp,{orientation:`vertical`,className:`self-stretch`}):null]}),(0,H.jsxs)(`div`,{className:`flex min-w-0 items-start gap-2 overflow-x-auto`,children:[E.controls.map(e=>{let t=Wg(e,{node:y,themeValues:D.values,themeSource:D.source,computed:k});return(0,H.jsx)(q_,{label:e.label,origin:t.origin,themeValue:t.themeValue,source:t.source,width:e.width,note:D.notes?.[e.id],onReset:t.origin===`changed`?()=>te(e,null):void 0,children:(0,H.jsx)(hv,{spec:e,value:t,colors:A,resolveColor:j,fonts:M,iconNames:g,measured:e.slot.via===`style`&&e.slot.key===`height`?ne?.h??null:ne?.w??null,onOpenPrompt:()=>v(!0),onChange:(t,n)=>te(e,t,n)})},e.id)}),E.controls.length===0?(0,H.jsx)(`button`,{type:`button`,className:`grid h-[42px] place-items-center px-3 text-xs text-muted-foreground underline-offset-2 hover:underline`,onClick:()=>{d(`node`),f(!1)},children:`Nothing to tune here — open the panel`}):null]})]})]}),(0,H.jsx)(ud,{open:_,onOpenChange:v,children:(0,H.jsxs)(pd,{className:`max-w-lg`,children:[(0,H.jsx)(md,{children:(0,H.jsx)(gd,{children:`Image`})}),se===null?null:(0,H.jsx)(h_,{screenId:e.screenId,path:e.path,src:se})]})})]})}function pv({name:e,onDone:t}){return(0,H.jsxs)(`div`,{className:`pointer-events-auto flex items-center gap-2 rounded-full border border-violet-400/70 bg-card/95 py-1 pr-1 pl-3 text-xs shadow-lg backdrop-blur-sm`,children:[(0,H.jsx)(Yt,{size:12,className:`text-violet-500`}),(0,H.jsxs)(`span`,{children:[`Editing `,(0,H.jsx)(`span`,{className:`font-medium`,children:e}),` — every instance updates together`]}),(0,H.jsx)(G,{size:`sm`,variant:`ghost`,className:`h-6 rounded-full px-2 text-xs`,onClick:t,children:`Done`})]})}function mv({name:e,onDone:t,children:n}){return(0,H.jsxs)(`div`,{className:`pointer-events-none absolute inset-x-0 bottom-4 z-30 flex flex-col items-center gap-1.5 px-6`,children:[(0,H.jsx)(pv,{name:e,onDone:t}),(0,H.jsx)(`div`,{className:`pointer-events-auto flex items-stretch gap-2 rounded-xl border border-violet-400/70 bg-card/95 px-3 py-2 shadow-xl backdrop-blur-sm`,"data-velloo-hud":!0,onPointerDown:e=>e.stopPropagation(),children:n})]})}function hv({spec:e,value:t,colors:n,resolveColor:r,fonts:i,iconNames:a,measured:o,onOpenPrompt:s,onChange:c}){let l=t.value===null?null:String(t.value),u=typeof t.value==`number`?t.value:null,d=t.themeValue??t.computed??null,f=d===null?null:String(d),p=!t.authored;switch(e.kind){case`number`:return(0,H.jsx)(X_,{value:u,ghost:d,muted:p,onChange:c,min:e.min,max:e.max,step:e.step??1});case`ratio`:return(0,H.jsx)(X_,{value:u,ghost:d,muted:p,onChange:c,min:e.min,max:e.max,step:e.step??.05,gear:8,suffix:`×`});case`size`:{let t=Rg(l??void 0);return(0,H.jsx)($_,{mode:t,px:zg(l??void 0),measured:o===null?null:Math.round(o),muted:p,choices:e.choices??[],onMode:e=>c(e===`fixed`?`[${Math.round(o??100)}px]`:e),onPx:(e,t)=>c(`[${e}px]`,t)})}case`choice`:return(0,H.jsx)(Z_,{value:l,ghost:f,muted:p,choices:e.choices??[],onChange:c});case`align`:return(0,H.jsx)(ev,{value:l,ghost:f,muted:p,choices:e.choices??[],onChange:c});case`color`:return(0,H.jsx)(nv,{value:l,ghost:f,muted:p,choices:n,resolve:r,onChange:c});case`font`:return(0,H.jsx)(Z_,{value:l,ghost:f,muted:p,choices:i,onChange:c});case`icon`:return(0,H.jsx)(av,{value:l??``,options:a,onChange:c});case`text`:return(0,H.jsx)(sv,{value:l??``,onChange:c});case`toggle`:return(0,H.jsx)(cv,{value:t.value===!0,onChange:c});case`prompt`:return(0,H.jsx)(lv,{summary:l,onOpen:s})}}var gv=[{id:`nw`,x:0,y:0,cursor:`nwse-resize`,sx:-1,sy:-1},{id:`n`,x:.5,y:0,cursor:`ns-resize`,sx:0,sy:-1},{id:`ne`,x:1,y:0,cursor:`nesw-resize`,sx:1,sy:-1},{id:`e`,x:1,y:.5,cursor:`ew-resize`,sx:1,sy:0},{id:`se`,x:1,y:1,cursor:`nwse-resize`,sx:1,sy:1},{id:`s`,x:.5,y:1,cursor:`ns-resize`,sx:0,sy:1},{id:`sw`,x:0,y:1,cursor:`nesw-resize`,sx:-1,sy:1},{id:`w`,x:0,y:.5,cursor:`ew-resize`,sx:-1,sy:0}],_v=7,vv=90;function yv(){let e=lh(),t=W(e=>e.selection),n=W(e=>e.screens),r=W(e=>e.canvasZoom),i=W(e=>e.cursorMode),a=W(e=>e.wsConnected),o=t?Ec(n,t):null,s=(0,P.useRef)(null),[c,l]=(0,P.useState)(null),u=(0,P.useRef)([]),d=r_(vv,e=>{R.applyClasses({screenId:e.screenId,path:Cc(e.path),classes:e.classes,gesture:e.gesture}).catch(e=>B(e,`Could not resize`))}),f=(0,P.useRef)(()=>{});if(f.current=(e,n,r)=>{if(!t||!o)return;let i=Bg(o);e.sx!==0&&(i=Kg(i,`width`,`[${Math.round(n)}px]`)),e.sy!==0&&(i=Kg(i,`height`,`[${Math.round(r)}px]`)),d({screenId:t.screenId,path:t.path,classes:i,gesture:e.gesture},!0)},(0,P.useEffect)(()=>{let e=e=>{let t=s.current;if(!t)return;let n=(e.clientX-t.startX)/t.zoom*t.sx,r=(e.clientY-t.startY)/t.zoom*t.sy,i={w:Math.max(8,t.startW+n),h:Math.max(8,t.startH+r)};l(i),f.current(t,i.w,i.h)},t=()=>{let e=s.current;e&&(s.current=null,l(t=>(t&&f.current(e,t.w,t.h),null)))};return window.addEventListener(`pointermove`,e),window.addEventListener(`pointerup`,t),window.addEventListener(`pointercancel`,t),()=>{window.removeEventListener(`pointermove`,e),window.removeEventListener(`pointerup`,t),window.removeEventListener(`pointercancel`,t)}},[]),!t||!o||i!==`select`||!a)return null;e.length>0&&s.current===null&&(u.current=e);let p=s.current!==null||c!==null?u.current:e;if(p.length===0)return null;let m=`$snippet`in o?im:rm,h=1/r;return(0,H.jsx)(`div`,{className:`pointer-events-none absolute inset-0`,"data-velloo-selection-layer":!0,children:p.map(e=>{let t=c&&e.anchor?c.w:e.w,n=c&&e.anchor?c.h:e.h;return(0,H.jsx)(`div`,{className:`absolute overflow-hidden`,style:{left:e.clip.x,top:e.clip.y,width:e.clip.w,height:e.clip.h},children:(0,H.jsxs)(`div`,{className:`absolute`,style:{left:e.x-e.clip.x,top:e.y-e.clip.y,width:t,height:n},children:[(0,H.jsx)(`div`,{className:`absolute inset-0`,"data-velloo-selection-box":!0,style:{outline:`${2*h}px solid ${m}`,outlineOffset:-2*h}}),c&&e.anchor?(0,H.jsxs)(`div`,{className:`absolute left-1/2 whitespace-nowrap rounded px-1.5 py-0.5 text-white tabular-nums`,style:{top:n+6*h,fontSize:10*h,background:m,transform:`translateX(-50%)`},children:[Math.round(c.w),` × `,Math.round(c.h)]}):null,e.anchor?gv.map(i=>(0,H.jsx)(`button`,{type:`button`,"aria-label":`Resize ${i.id}`,className:`pointer-events-auto absolute rounded-none`,style:{left:i.x*t,top:i.y*n,width:_v*h,height:_v*h,marginLeft:-7/2*h,marginTop:-7/2*h,background:m,cursor:i.cursor},onPointerDown:t=>{t.preventDefault(),t.stopPropagation(),t.currentTarget.setPointerCapture(t.pointerId),s.current={startX:t.clientX,startY:t.clientY,startW:e.w,startH:e.h,sx:i.sx,sy:i.sy,zoom:r,gesture:`resize-${t.pointerId}-${Date.now()}`},l({w:e.w,h:e.h})}},i.id)):null]})},e.key)})})}var bv={x:0,y:20};function xv(e,t,n,r){let i={free:[],attached:[]};for(let a of e){let e=a.attachment&&t.find(e=>e.id===a.attachment?.frameId);if(!e){i.free.push({note:a,card:{x:a.x??0,y:a.y??0}});continue}let o=r[e.id]??bv,s=e.x+o.x,c=e.y+o.y,l=Sv(a),u=a.resolved?n[e.id]?.[a.resolved.join(`.`)]:void 0,d={x:s+(u?u.x+u.w:e.w),y:c+(u?u.y:0)};i.attached.push({note:a,marker:d,frame:{left:s,top:c,right:s+e.w,bottom:c+e.h},stale:l})}return i}function Sv(e){return e.attachment!==void 0&&e.resolved===null}var Cv=`text-[13px] leading-relaxed text-muted-foreground [&_a]:text-foreground [&_h1]:text-foreground [&_h2]:text-foreground [&_h3]:text-foreground [&_strong]:text-foreground [&_b]:text-foreground`,wv=`absolute flex flex-col gap-2 rounded-r-md border-l-2 border-foreground/15 py-1 pl-4 pr-3`,Tv=`absolute left-4 top-4 flex flex-col rounded-md border bg-card px-3 py-2.5 shadow-lg`;function Ev({body:e,emptyHint:t}){return e?(0,H.jsx)(Rd,{body:e,className:Cv}):(0,H.jsx)(`span`,{className:`text-[13px] text-muted-foreground/60`,children:t??`Empty note`})}function Dv({children:e}){let t=(0,P.useRef)(null);return(0,P.useEffect)(()=>{let e=t.current;if(!e)return;let n=t=>{t.ctrlKey||t.metaKey||e.scrollHeight>e.clientHeight+1&&t.stopPropagation()};return e.addEventListener(`wheel`,n),()=>e.removeEventListener(`wheel`,n)},[]),(0,H.jsx)(`div`,{ref:t,className:`min-h-0 flex-1 overflow-y-auto`,"data-note-scroll":!0,children:e})}var Ov=160;function kv(e=!1){let[t,n]=(0,P.useState)(!1),[r,i]=(0,P.useState)(e),a=(0,P.useRef)(null);return(0,P.useEffect)(()=>()=>{a.current&&clearTimeout(a.current)},[]),{hovered:t,held:r,setHeld:i,enter(){a.current&&clearTimeout(a.current),n(!0)},leave(){a.current&&clearTimeout(a.current),a.current=setTimeout(()=>n(!1),Ov)}}}function Av({position:e,pileIndex:t,stale:n,open:r,held:i,onEnter:a,onLeave:o,onToggle:s,onDoubleClick:c,onKeyDown:l}){return(0,H.jsx)(`button`,{type:`button`,"aria-label":r?`Note`:`Show note`,"aria-expanded":r,"data-note-marker":!0,"data-stop-pan":!0,className:`absolute z-10 flex size-7 items-center justify-center rounded-full shadow-md transition-[scale] hover:z-20 hover:scale-110 ${n?`border border-dashed border-destructive bg-card text-destructive`:i?`bg-primary-foreground text-primary ring-2 ring-primary`:`bg-primary text-primary-foreground ring-1 ring-primary-foreground/20`}`,style:{...e,translate:Ed(t),transform:`scale(calc(1 / var(--canvas-zoom, 1)))`},title:n?`Note — its node is gone`:void 0,onMouseEnter:a,onMouseLeave:o,onPointerDown:e=>e.stopPropagation(),onClick:e=>{e.stopPropagation(),s()},onDoubleClick:e=>{c&&(e.stopPropagation(),c())},onKeyDown:l,children:(0,H.jsx)(Cr,{size:13})})}function jv({position:e,onEnter:t,onLeave:n,children:r}){return(0,H.jsx)(`div`,{className:`absolute z-30`,"data-stop-pan":!0,style:{...e,transform:`scale(calc(1 / var(--canvas-zoom, 1)))`,transformOrigin:`top left`},onMouseEnter:t,onMouseLeave:n,children:r})}function Mv(e,t,n,r,i=[]){let{free:a,attached:o}=xv(e,t,r,n),s=new Map;for(let e of i){let i=kp(e,t,n,r);i&&s.set(Dd(i),(s.get(Dd(i))??0)+1)}return{free:a.map(({note:e,card:t})=>({note:e,at:t})),attached:o.map(({note:e,marker:t,frame:n,stale:r})=>{let i={left:wd(t.x,n.left,n.right),top:wd(t.y,n.top,n.bottom)},a=Dd(i),o=s.get(a)??0;return s.set(a,o+1),{note:e,position:i,pileIndex:o,stale:r}})}}function Nv(){let e=W(e=>e.notes),t=W(e=>e.markupVisible),n=W(e=>e.currentBoardId),r=W(e=>n?e.boards[n]:null),i=W(e=>e.nodeRects),a=W(e=>e.frameInsets),o=W(e=>e.commentThreads);if(!t||e.length===0)return null;let{free:s,attached:c}=Mv(e,r?.frames??[],a,i,o);return(0,H.jsxs)(H.Fragment,{children:[s.map(({note:e,at:t})=>(0,H.jsx)(Vv,{note:e,pos:t},e.id)),c.map(({note:e,position:t,pileIndex:n,stale:r})=>(0,H.jsx)(Hv,{note:e,position:t,pileIndex:n,stale:r},e.id))]})}var Pv=120,Fv=32;function Iv(e){let t=W(e=>e.editingMarkupId),n=W(e=>e.setEditingMarkupId),r=W(e=>e.currentBoardId),i=t===e.id,[a,o]=(0,P.useState)(e.body),s=(0,P.useRef)(!1);(0,P.useEffect)(()=>{o(e.body),s.current=!1},[e.body]);let c=async t=>{if(jc(e.id)){W.getState().updateDraftNote(e.id,t);return}if(r)try{await Gs.update({boardId:r,noteId:e.id,patch:t})}catch(e){B(e,`Could not update note`)}},l=async()=>{if(W.getState().editingMarkupId===e.id&&n(null),jc(e.id)){W.getState().discardDraftNote(e.id);return}if(r)try{await Gs.remove({boardId:r,noteId:e.id})}catch(e){B(e,`Could not remove note`)}};return{isEditing:i,text:a,setText:o,update:c,remove:l,startEditing:()=>{s.current=!1,n(e.id)},saveAndExit:async()=>{if(!s.current){if(s.current=!0,W.getState().editingMarkupId===e.id&&n(null),!a.trim()){await l();return}if(jc(e.id)){await W.getState().saveDraftNote(e.id,{body:a});return}if(a!==e.body&&r)try{await Gs.update({boardId:r,noteId:e.id,patch:{body:a}})}catch(e){B(e,`Could not update note`)}}},cancelAndExit:()=>{s.current||(s.current=!0,o(e.body),n(null),jc(e.id)&&W.getState().discardDraftNote(e.id))}}}function Lv({editing:e}){return(0,H.jsx)(`div`,{onPointerDown:e=>e.stopPropagation(),children:(0,H.jsx)(hf,{autoFocus:!0,ariaLabel:`Note`,value:e.text,onChange:e.setText,onBlur:()=>void e.saveAndExit(),placeholder:`Write a note…`,className:`min-h-[1.5em] ${Cv}`,onKeyDown:t=>{(t.key===`Escape`||t.key===`Enter`&&(t.metaKey||t.ctrlKey))&&(t.preventDefault(),t.stopPropagation(),e.saveAndExit())}})})}function Rv({onRemove:e}){return(0,H.jsx)(`button`,{type:`button`,"aria-label":`Delete note`,title:`Delete note`,"data-note-trash":!0,className:`absolute right-1 top-1 hidden size-6 items-center justify-center rounded-md border border-border bg-card text-muted-foreground shadow-sm hover:text-destructive group-hover/note:flex`,onPointerDown:e=>e.stopPropagation(),onClick:t=>{t.stopPropagation(),e()},children:(0,H.jsx)(Ar,{size:13})})}function zv({size:e,scale:t,onResize:n,onCommit:r}){let i=(0,P.useRef)(null),a=(0,P.useRef)(null),o=(o,s)=>(0,H.jsx)(`div`,{"aria-hidden":`true`,"data-note-resize":o,className:`absolute size-2.5 rounded-[2px] border border-primary bg-card ${s}`,onMouseDown:e=>e.preventDefault(),onPointerDown:t=>{t.preventDefault(),t.stopPropagation(),t.currentTarget.setPointerCapture(t.pointerId),i.current={x:t.clientX,y:t.clientY,...e()}},onPointerMove:e=>{let r=i.current;if(!r)return;let s=t()||1,c={w:o===`y`?r.w:Math.max(Pv,r.w+(e.clientX-r.x)/s),h:o===`x`?r.h:Math.max(Fv,r.h+(e.clientY-r.y)/s)};a.current=c,n(c)},onPointerUp:e=>{e.currentTarget.releasePointerCapture(e.pointerId),i.current=null,a.current&&r(a.current),a.current=null}});return(0,H.jsxs)(H.Fragment,{children:[o(`x`,`-right-[5px] top-1/2 -translate-y-1/2 cursor-ew-resize`),o(`y`,`-bottom-[5px] left-1/2 -translate-x-1/2 cursor-ns-resize`),o(`xy`,`-bottom-[5px] -right-[5px] cursor-nwse-resize`)]})}function Bv(e){let[t,n]=(0,P.useState)(null);return(0,P.useEffect)(()=>{n(null)},[e.width,e.height]),[t,n]}function Vv({note:e,pos:t}){let n=Iv(e),r=(0,P.useRef)(null),i=(0,P.useRef)(null),[a,o]=Bv(e),s=()=>W.getState().canvasZoom||1,c=e=>{n.isEditing||e.button!==0||(e.stopPropagation(),e.currentTarget.setPointerCapture(e.pointerId),i.current={ox:t.x,oy:t.y,sx:e.clientX/s(),sy:e.clientY/s()})},l=e=>{let t=i.current;t&&(e.currentTarget.style.left=`${t.ox+e.clientX/s()-t.sx}px`,e.currentTarget.style.top=`${t.oy+e.clientY/s()-t.sy}px`)},u=async e=>{let t=i.current;if(!t)return;e.currentTarget.releasePointerCapture(e.pointerId),i.current=null;let r=e.clientX/s()-t.sx,a=e.clientY/s()-t.sy;Math.abs(r)<1&&Math.abs(a)<1||await n.update({x:t.ox+r,y:t.oy+a})};return(0,H.jsxs)(`div`,{ref:r,className:`group/note ${wv} outline-none ${n.isEditing?`bg-card/80 outline-1 outline-offset-4 outline-primary`:`hover:bg-foreground/[0.03] focus:outline-1 focus:outline-offset-4 focus:outline-primary`}`,style:{left:t.x,top:t.y,width:a?.w??e.width,height:a?.h??e.height},"data-note-id":e.id,onPointerDown:c,onPointerMove:l,onPointerUp:u,onPointerCancel:u,onDoubleClick:e=>{e.stopPropagation(),n.startEditing()},onKeyDown:e=>{n.isEditing||(e.key===`Delete`||e.key===`Backspace`?(e.preventDefault(),n.remove()):e.key===`Enter`&&(e.preventDefault(),n.startEditing()))},tabIndex:0,children:[(0,H.jsx)(Dv,{children:n.isEditing?(0,H.jsx)(Lv,{editing:n}):(0,H.jsx)(Ev,{body:e.body,emptyHint:`Empty note — double-click to edit`})}),n.isEditing?(0,H.jsx)(zv,{size:()=>({w:r.current?.offsetWidth??e.width,h:r.current?.offsetHeight??e.height??Fv}),scale:s,onResize:o,onCommit:e=>void n.update({width:e.w,height:e.h})}):(0,H.jsx)(Rv,{onRemove:()=>void n.remove()})]})}function Hv({note:e,position:t,pileIndex:n,stale:r}){let i=Iv(e),a=kv(jc(e.id)),o=(0,P.useRef)(null),[s,c]=Bv(e),l=a.held,u=a.setHeld,d=a.hovered||l||i.isEditing,f=e=>{i.isEditing||(e.key===`Delete`||e.key===`Backspace`?(e.preventDefault(),i.remove()):e.key===`Enter`?(e.preventDefault(),u(!0),i.startEditing()):e.key===`Escape`&&l&&(e.preventDefault(),e.stopPropagation(),u(!1)))};return(0,H.jsxs)(`div`,{"data-note-id":e.id,"data-note-attached":`true`,className:`contents`,children:[(0,H.jsx)(Av,{position:t,pileIndex:n,stale:r,open:d,held:l||i.isEditing,onEnter:a.enter,onLeave:a.leave,onToggle:()=>u(e=>!e),onDoubleClick:()=>{u(!0),i.startEditing()},onKeyDown:f}),d?(0,H.jsx)(jv,{position:t,onEnter:a.enter,onLeave:a.leave,children:(0,H.jsxs)(`div`,{ref:o,className:`group/note ${Tv} ${i.isEditing?`border-primary`:`border-border`}`,style:{width:s?.w??e.width,height:s?.h??e.height},"data-note-card":!0,onPointerDown:e=>e.stopPropagation(),onDoubleClick:e=>{e.stopPropagation(),u(!0),i.startEditing()},onKeyDown:f,children:[(0,H.jsx)(Dv,{children:(0,H.jsxs)(`div`,{className:`border-l-2 border-foreground/15 pl-3 pr-6`,children:[i.isEditing?(0,H.jsx)(Lv,{editing:i}):(0,H.jsx)(Ev,{body:e.body,emptyHint:`Empty note — double-click to edit`}),r?(0,H.jsx)(`div`,{className:`mt-1 text-[11px] uppercase tracking-wide text-destructive/80`,children:`Its node is gone`}):null]})}),i.isEditing?(0,H.jsx)(zv,{size:()=>({w:o.current?.offsetWidth??e.width,h:o.current?.offsetHeight??e.height??Fv}),scale:()=>1,onResize:c,onCommit:e=>void i.update({width:e.w,height:e.h})}):(0,H.jsx)(Rv,{onRemove:()=>void i.remove()})]})}):null]})}var Uv=`Local comments stay on this machine. Cloud comments live on the published board, where reviewers can see and answer them.`;function Wv({scope:e,onChange:t}){return(0,H.jsxs)(Zp,{type:`single`,size:`sm`,variant:`outline`,value:e,onValueChange:e=>e&&t(e),className:`w-full`,"aria-label":`Comment scope`,children:[(0,H.jsx)(Qp,{value:`all`,className:`text-[11px]`,children:`All`}),(0,H.jsxs)(Qp,{value:`local`,className:`text-[11px]`,children:[(0,H.jsx)(Nn,{}),` Local`]}),(0,H.jsxs)(Qp,{value:`shared`,className:`text-[11px]`,children:[(0,H.jsx)(qt,{}),` Cloud`]})]})}function Gv({scope:e,onChange:t,cloud:n,className:r=``}){let i=W(e=>e.openSignIn),a=n===void 0,o=n?.available===!1?n.reason:null,s=o===`unpublished`,c=!!o&&!s;return(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5 ${r}`,"data-comment-target-picker":!0,children:[(0,H.jsxs)(Zp,{type:`single`,size:`sm`,variant:`outline`,spacing:0,value:e,onValueChange:e=>e&&t(e),className:`w-full`,"aria-label":`Comment target`,children:[(0,H.jsxs)(Qp,{value:`local`,className:`flex-1 text-xs`,title:Uv,children:[(0,H.jsx)(Nn,{}),` Local`]}),(0,H.jsxs)(Qp,{value:`shared`,className:`flex-1 text-xs`,disabled:a||c,title:o&&!s?js(o):s?`This board has no published link yet — posting will publish it first.`:n?.available?`Post to the published board at ${n.url}`:`Checking this board's published link…`,children:[(0,H.jsx)(qt,{}),` Cloud`,s?(0,H.jsx)(jr,{className:`text-amber-600 dark:text-amber-500`,"data-needs-publish":!0}):null]})]}),e===`shared`&&s?(0,H.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`This board isn't published yet. Posting opens the publish flow first.`}):null,o&&As(o)?(0,H.jsx)(G,{variant:`ghost`,size:`sm`,className:`self-start text-[11px]`,onClick:()=>i({action:`post comments to the published board`,expired:o===`expired`}),children:`Sign in to write cloud comments`}):null]})}var Kv=14;function qv(e,t,n){if(e.kind===`board`)return{x:e.x,y:e.y,w:0,h:0};let r=t.find(t=>t.id===e.frameId);return r?Bc(r,n[r.id]??{x:0,y:0},e.bounds):null}function Jv({anchor:e,frames:t,insets:n,onCancel:r,onSubmit:i,target:a,blocked:o,onFrame:s}){let[c,l]=(0,P.useState)(``),[u,d]=(0,P.useState)(null),[f,p]=(0,P.useState)(!1),m=(0,P.useRef)(null),h=(0,P.useRef)(s);h.current=s,(0,P.useEffect)(()=>{l(``),d(null)},[e]);let g=qv(e,t,n);if((0,P.useEffect)(()=>{let e=m.current;if(e&&g)return h.current?.(g,{w:e.offsetWidth,h:e.offsetHeight,gap:Kv})},[e]),!g)return null;let _=()=>{c.trim()&&!f&&(d(null),p(!0),i(c).then(d).finally(()=>p(!1)))};return(0,H.jsxs)(`div`,{ref:m,className:`absolute z-30 rounded-lg border bg-card p-3 shadow-xl ${a?`w-96`:`w-80`}`,style:{left:g.x+g.w,top:g.y,transform:`scale(calc(1 / var(--canvas-zoom, 1))) translate(${Kv}px, ${Kv}px)`,transformOrigin:`top left`},"data-inline-comment-composer":!0,onPointerDown:e=>e.stopPropagation(),children:[(0,H.jsxs)(`div`,{className:`mb-2 flex items-center gap-1.5 text-xs font-medium`,children:[(0,H.jsx)(jn,{size:13}),e.kind===`node`?`Pinned comment`:`Pinned board location`,(0,H.jsx)(`button`,{type:`button`,className:`ml-auto text-muted-foreground hover:text-foreground`,"aria-label":`Cancel comment`,onClick:r,children:(0,H.jsx)(Br,{size:13})})]}),o??(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(hf,{autoFocus:!0,ariaLabel:`New pinned comment`,value:c,onChange:l,placeholder:`What should change?`,className:`min-h-20 w-full rounded-lg border border-input bg-transparent px-2.5 py-2 text-sm focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 dark:bg-input/30`,onKeyDown:e=>{if(e.key===`Escape`){e.preventDefault(),r();return}Od(_)(e)}}),u?(0,H.jsx)(wp,{children:u}):null,(0,H.jsxs)(`div`,{className:`mt-2 flex items-end gap-2`,children:[a?(0,H.jsx)(`div`,{className:`min-w-0 flex-1`,children:a}):null,(0,H.jsx)(G,{size:`sm`,className:`ml-auto`,disabled:f||!c.trim(),onClick:_,children:f?`Posting…`:u?`Try again`:`Add comment`})]})]})]})}function Yv(){let e=W(e=>e.pendingCommentAnchor),t=W(e=>e.currentBoardId?e.boards[e.currentBoardId]:void 0),n=W(e=>e.frameInsets),r=W(e=>e.cloudComments),i=W(e=>e.clearPendingComment),a=W(e=>e.createPendingComment),o=W(e=>e.zoomForCommentDraft),s=W(e=>e.restoreViewAfterMarkupEdit),[c,l]=(0,P.useState)(`local`);return!e||!t?null:(0,H.jsx)(Jv,{anchor:e,frames:t.frames,insets:n,onCancel:i,onSubmit:e=>a(e,c),target:(0,H.jsx)(Gv,{scope:c,onChange:l,cloud:r}),onFrame:(e,t)=>(o(e,t),s)})}function Xv({board:e}){let t=W(e=>e.setCanvasZoom),n=W(e=>e.setPan),r=W(e=>e.cursorMode),i=ld(),[a,o]=(0,P.useState)(!1),[s,c]=(0,P.useState)(null),l=(0,P.useRef)(null),u=(0,P.useRef)(null),d=(0,P.useMemo)(()=>{let t=800,n=600;for(let r of e.frames)r.x+r.w>t&&(t=r.x+r.w),r.y+r.h>n&&(n=r.y+r.h);return{w:t+600,h:n+400}},[e.frames]),f=(0,P.useMemo)(()=>{let t={};for(let n of e.frames)t[n.screen]=(t[n.screen]??0)+1;return t},[e.frames]),p=(0,P.useRef)(null);(0,P.useEffect)(()=>{let r=l.current;if(!r||p.current===e.id)return;let i=qc(e.id);if(i){t(i.zoom),n(i.pan),p.current=e.id;return}if(e.frames.length===0){p.current=e.id;return}let a=()=>{let i=Lc(e.frames,r.clientWidth,r.clientHeight);return i?(t(i.zoom),n(i.pan),p.current=e.id,!0):!1};if(a())return;let o=null,s=requestAnimationFrame(()=>{a()||(o=new ResizeObserver(()=>{a()&&o?.disconnect()}),o.observe(r))});return()=>{cancelAnimationFrame(s),o?.disconnect()}},[e.id,e.frames,t,n]),(0,P.useEffect)(()=>{let e=l.current;if(!e)return;let t=t=>{let n=W.getState();if(t.metaKey||t.ctrlKey){t.preventDefault();let r=e.getBoundingClientRect(),i=Hc(t.clientX-r.left,t.clientY-r.top,Fc(t.deltaY),{zoom:n.canvasZoom,pan:n.pan});n.setCanvasZoom(i.zoom),n.setPan(i.pan);return}t.preventDefault(),n.setPan({x:n.pan.x-t.deltaX,y:n.pan.y-t.deltaY})};return e.addEventListener(`wheel`,t,{passive:!1}),()=>e.removeEventListener(`wheel`,t)},[]);let m=(e,t)=>{let n=l.current;if(!n)return{x:0,y:0};let{canvasZoom:r,pan:i}=W.getState(),a=n.getBoundingClientRect();return{x:(e-a.left-i.x)/r,y:(t-a.top-i.y)/r}},h=t=>{if(t.button!==0)return;if(r===`hand`){t.preventDefault(),t.currentTarget.setPointerCapture(t.pointerId),u.current={startX:t.clientX,startY:t.clientY,startPan:{...W.getState().pan}},o(!0);return}let n=t.target===t.currentTarget||!!t.target.dataset?.vellooBoardWorld;if(r===`note`&&n){let e=m(t.clientX,t.clientY);t.preventDefault(),t.currentTarget.setPointerCapture(t.pointerId),c({x0:e.x,y0:e.y,x1:e.x,y1:e.y});return}if(r===`comment`&&n){let n=m(t.clientX,t.clientY);t.preventDefault(),W.getState().beginComment({kind:`board`,boardId:e.id,...n});return}n&&W.getState().setSelection(null)},g=e=>{if(s){let t=m(e.clientX,e.clientY);c({...s,x1:t.x,y1:t.y});return}let t=u.current;t&&n({x:t.startPan.x+(e.clientX-t.startX),y:t.startPan.y+(e.clientY-t.startY)})},_=e=>{if(s){c(null),W.getState().createNote(ey(s,W.getState().canvasZoom));return}if(u.current){try{e.currentTarget.releasePointerCapture(e.pointerId)}catch{}u.current=null,o(!1)}};return(0,P.useEffect)(()=>{let e=()=>{u.current=null,o(!1)};return window.addEventListener(`pointerup`,e),window.addEventListener(`pointercancel`,e),window.addEventListener(`blur`,e),()=>{window.removeEventListener(`pointerup`,e),window.removeEventListener(`pointercancel`,e),window.removeEventListener(`blur`,e)}},[]),(0,P.useEffect)(()=>{r!==`hand`&&(u.current=null,o(!1))},[r]),(0,H.jsxs)(`div`,{ref:l,"data-velloo-board":`true`,className:`flex-1 min-h-0 min-w-0 overflow-clip bg-muted/30 relative`,onPointerDown:h,onPointerMove:g,onPointerUp:_,onPointerCancel:_,style:{cursor:r===`hand`?a?`grabbing`:`grab`:r===`note`?`crosshair`:r===`comment`?`cell`:`default`},children:[(0,H.jsxs)(Zv,{boardId:e.id,restoredRef:p,w:d.w,h:d.h,children:[e.frames.map(t=>(0,H.jsx)(sh,{boardId:e.id,frame:t,frames:e.frames,presets:i,sharedCount:f[t.screen]??1},t.id)),(0,H.jsx)(tm,{}),(0,H.jsx)(yv,{}),(0,H.jsx)(Nv,{}),s?(0,H.jsx)(ty,{rect:s}):null,(0,H.jsx)(Yv,{}),(0,H.jsx)(Np,{})]}),(0,H.jsx)(fv,{})]})}function Zv({boardId:e,restoredRef:t,w:n,h:r,children:i}){let a=W(e=>e.canvasZoom),o=W(e=>e.pan);return(0,P.useEffect)(()=>{if(t.current!==e)return;let n=setTimeout(()=>Jc(e,{pan:o,zoom:a}),150);return()=>clearTimeout(n)},[e,o,a,t]),(0,H.jsx)(`div`,{"data-velloo-board-world":`true`,className:`relative origin-top-left`,style:{width:n,height:r,transform:`translate(${o.x}px, ${o.y}px) scale(${a})`,"--canvas-zoom":a},children:i})}var Qv=4,$v={w:120,h:32};function ey(e,t){let n=Math.min(e.x0,e.x1),r=Math.min(e.y0,e.y1),i=Math.abs(e.x1-e.x0),a=Math.abs(e.y1-e.y0),o=Qv/(t||1);return i<o&&a<o?{x:e.x0,y:e.y0}:{x:n,y:r,width:Math.max($v.w,i),height:Math.max($v.h,a)}}function ty({rect:e}){let t=Math.min(e.x0,e.x1),n=Math.min(e.y0,e.y1),r=Math.abs(e.x1-e.x0),i=Math.abs(e.y1-e.y0);return(0,H.jsx)(`div`,{"aria-hidden":`true`,"data-note-drag-preview":!0,className:`pointer-events-none absolute rounded-sm border border-dashed border-primary bg-primary/5`,style:{left:t,top:n,width:r,height:i}})}function ny({className:e,size:t=`default`,...n}){return(0,H.jsx)(`div`,{"data-slot":`card`,"data-size":t,className:V(`group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl`,e),...n})}function ry({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`card-header`,className:V(`group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing)`,e),...t})}function iy({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`card-title`,className:V(`cn-font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm`,e),...t})}function ay({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`card-description`,className:V(`text-sm text-muted-foreground`,e),...t})}function oy({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`card-content`,className:V(`px-(--card-spacing)`,e),...t})}function sy({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`card-footer`,className:V(`flex items-center rounded-b-xl border-t bg-muted/50 p-(--card-spacing)`,e),...t})}var cy=[`Use Velloo to propose this app's design language, for me to review on the canvas:`,`1. Match the app's theme and fonts (the velloo-setup skill covers how).`,`2. Call set_design_language with the intent in a sentence or two and the Do's and Don'ts you can point to evidence for in the code.`,`Tell me what you could not determine instead of guessing.`].join(`
29
+ `),ly=e=>`velloo:languageSet:id:${e}`;function uy(e){return!e||typeof localStorage>`u`?!1:localStorage.getItem(ly(e))===`true`}function dy(e){!e||typeof localStorage>`u`||localStorage.setItem(ly(e),`true`)}var fy=`Use Velloo to design a first screen for this app, following the design language already set on this design (get_theme, and the rules in the document it names).`;async function py(e){try{await navigator.clipboard.writeText(e),z({kind:`success`,message:`Prompt copied — paste it to your coding agent.`})}catch{z({kind:`info`,message:`Copy failed — select the prompt text instead.`})}}function my({onNewBoard:e}){let t=W(e=>e.openLanguage),n=W(e=>e.languageRules),r=W(e=>e.design?.folderId),i=!!n?.source,a=i||uy(r),o=(0,P.useRef)(null);(0,P.useEffect)(()=>{n!==null&&(o.current===!1&&i&&t(`review`).catch(e=>B(e,`Could not open the proposal`)),o.current=i)},[n,i,t]);let s=e=>void t(e).catch(e=>B(e,`Could not open the design language`));return a?(0,H.jsx)(`div`,{className:`flex-1 overflow-y-auto grid place-items-center p-10`,children:(0,H.jsxs)(`div`,{className:`w-full max-w-xl flex flex-col gap-5`,children:[(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Your design language is set`}),(0,H.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Every design here follows it. Start a board, or have your agent design a first screen with it.`})]}),(0,H.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,H.jsxs)(G,{size:`sm`,onClick:e,children:[(0,H.jsx)(nr,{}),`New board`]}),(0,H.jsxs)(G,{variant:`outline`,size:`sm`,onClick:()=>void py(fy),children:[(0,H.jsx)(Xt,{}),`Copy a prompt for a first screen`]}),(0,H.jsxs)(G,{variant:`ghost`,size:`sm`,onClick:()=>s(`review`),children:[(0,H.jsx)(Er,{}),`Review the design language`]})]})]})}):(0,H.jsx)(`div`,{className:`flex-1 overflow-y-auto grid place-items-center p-10`,children:(0,H.jsxs)(`div`,{className:`w-full max-w-3xl flex flex-col gap-6`,children:[(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Start with a design language`}),(0,H.jsx)(`p`,{className:`max-w-xl text-sm text-muted-foreground`,children:`Colour, type, shape and a few rules in plain words — set once, shown on this design's real components, and followed by every design after it.`})]}),(0,H.jsxs)(`div`,{className:`grid gap-4 md:grid-cols-2`,children:[(0,H.jsxs)(ny,{children:[(0,H.jsxs)(ry,{children:[(0,H.jsx)(cr,{className:`size-5 text-primary`}),(0,H.jsx)(iy,{children:`Read it from my app`}),(0,H.jsx)(ay,{children:`Your coding agent reads the app's styles, fonts and components and proposes a language. You review it here.`})]}),(0,H.jsxs)(oy,{className:`flex flex-col gap-2`,children:[(0,H.jsx)(`pre`,{className:`whitespace-pre-wrap rounded-md bg-muted/60 p-3 text-xs leading-relaxed font-mono`,children:cy}),(0,H.jsxs)(G,{variant:`outline`,size:`sm`,onClick:()=>void py(cy),children:[(0,H.jsx)(Xt,{}),`Copy prompt for your agent`]}),(0,H.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`This page opens the proposal on its own when it lands.`})]})]}),(0,H.jsxs)(ny,{children:[(0,H.jsxs)(ry,{children:[(0,H.jsx)(Er,{className:`size-5 text-primary`}),(0,H.jsx)(iy,{children:`Define it here`}),(0,H.jsx)(ay,{children:`No app to match, or you want a new direction. Four short steps — colour, type, shape, rules — on live components. No agent needed.`})]}),(0,H.jsx)(oy,{children:(0,H.jsx)(G,{size:`sm`,onClick:()=>s(`guided`),children:`Start`})})]})]}),(0,H.jsx)(`div`,{children:(0,H.jsxs)(G,{variant:`ghost`,size:`sm`,onClick:e,children:[(0,H.jsx)(nr,{}),`Or start with an empty board`]})})]})})}function hy(e){return e.length<=1?e.join(``):`${e.slice(0,-1).join(`, `)} and ${e.at(-1)}`}function gy({theme:e,areas:t,boards:n}){let r=e==="default";return[r?`The design language of this Velloo design just changed (${hy(t)}). Bring every board that uses the default theme in line with it:`:`The "${e}" theme of this Velloo design just changed (${hy(t)}). Bring the boards that use it in line with it — ${hy(n)}:`,`1. Read it first: get_theme${r?``:` { theme: "${e}" }`}, and the rules in the document it names (designSystem.path).`,`2. Go board by board. Screenshot each screen in light and dark, and fix what no longer follows the language — colours, faces or corner radii set by hand instead of through the theme, and anything that breaks a rule.`,`3. Leave the theme and the rules as they are; they are the source of truth now.`,`4. Tell me, board by board, what you changed and what you left alone.`].join(`
30
+ `)}function _y(){let e=W(e=>e.languageHandoff),t=W(e=>e.dismissLanguageHandoff);if(!e)return null;let n=gy(e),r=e.boards.length,i=async()=>{try{await navigator.clipboard.writeText(n),z({kind:`success`,message:`Prompt copied — paste it to your coding agent.`})}catch{z({kind:`info`,message:`Copy failed — select the prompt text instead.`})}};return(0,H.jsx)(ud,{open:!0,onOpenChange:e=>{e||t()},children:(0,H.jsxs)(pd,{"data-testid":`language-handoff`,className:`sm:max-w-lg`,children:[(0,H.jsxs)(md,{children:[(0,H.jsx)(gd,{children:`Bring your boards in line`}),(0,H.jsxs)(_d,{children:[`The change to `,hy(e.areas),` is already on`,` `,r===1?`the board`:`the ${r} boards`,` that use`,r===1?`s`:``,` `,e.theme==="default"?`this theme`:e.theme,`, wherever a design reads the theme. What the theme cannot reach — a colour, face or corner set by hand, or a layout that now breaks a rule — needs your agent to go and look.`]})]}),(0,H.jsx)(`pre`,{className:`whitespace-pre-wrap rounded-md bg-muted/60 p-3 text-xs leading-relaxed font-mono`,children:n}),(0,H.jsxs)(hd,{children:[(0,H.jsx)(G,{variant:`ghost`,onClick:t,children:`Not now`}),(0,H.jsxs)(G,{onClick:()=>void i(),children:[(0,H.jsx)(Xt,{}),`Copy prompt for your agent`]})]})]})})}function vy(e){return e==="default"?`Default`:e}var yy=new Set;function by(e,t,n=e){if(!t||yy.has(e))return;yy.add(e);let r=document.createElement(`link`);r.rel=`stylesheet`,r.href=Ym(t,e,n),document.head.appendChild(r)}var xy=[{id:`suited`,label:`Suited`},{id:`all`,label:`All`},{id:`sans`,label:`Sans`},{id:`serif`,label:`Serif`},{id:`mono`,label:`Mono`}];function Sy(e){return/^(mono|code)/.test(e)?`mono`:/(display|heading|title|wordmark|marquee|hero)/.test(e)?`display`:`body`}function Cy(e,t){let n=e.roles.indexOf(t);return n===-1?e.roles.length+1:n}function wy({role:e,current:t,onPick:n,onBack:r}){let[i,a]=(0,P.useState)(``),[o,s]=(0,P.useState)(`suited`),c=W(e=>e.setFontDraft),l=Sy(e);(0,P.useEffect)(()=>()=>c(null),[c]);let u=(0,P.useMemo)(()=>{let e=i.trim().toLowerCase(),t=[...Km.filter(t=>e&&t.family.toLowerCase().includes(e)?!0:o===`suited`?t.roles.includes(l):o===`all`||t.category===o)].sort((e,t)=>Cy(e,l)-Cy(t,l));return e?t.filter(t=>`${t.family} ${t.note} ${t.category}`.toLowerCase().includes(e)):t},[i,o,l]),d=t=>{c({role:e,family:t.family,stack:Jm(t),...t.google?{google:t.google}:{}})};return(0,H.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,H.jsxs)(`div`,{className:`flex flex-col gap-2 border-b p-3`,children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,H.jsx)(`button`,{type:`button`,onClick:r,"aria-label":`Back to theme`,className:`size-6 shrink-0 grid place-items-center rounded-md text-muted-foreground hover:text-foreground cursor-pointer`,children:(0,H.jsx)(jt,{size:14})}),(0,H.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`Face for `,(0,H.jsx)(`span`,{className:`font-mono text-foreground`,children:e})]})]}),(0,H.jsxs)(`div`,{className:`relative`,children:[(0,H.jsx)(ur,{size:13,className:`pointer-events-none absolute left-2 top-1/2 -translate-y-1/2 text-muted-foreground/60`}),(0,H.jsx)(Z,{autoFocus:!0,value:i,onChange:e=>a(e.target.value),placeholder:`Search ${Km.length} families`,spellCheck:!1,"aria-label":`Search families`,className:`h-7 pl-7 text-xs`})]}),(0,H.jsx)(`div`,{className:`flex items-center gap-0.5 rounded-md bg-muted p-0.5`,children:xy.map(e=>(0,H.jsx)(`button`,{type:`button`,onClick:()=>s(e.id),"aria-pressed":o===e.id,className:`flex-1 h-6 rounded-[5px] text-[11px] cursor-pointer `+(o===e.id?`bg-background font-medium text-foreground shadow-sm`:`text-muted-foreground hover:text-foreground`),children:e.label},e.id))})]}),(0,H.jsx)(`div`,{className:`flex-1 overflow-y-auto scroll-stable`,children:u.length===0?(0,H.jsxs)(`p`,{className:`p-4 text-xs text-muted-foreground`,children:[i.trim()?`No family here matches "${i.trim()}".`:`Nothing in this filter.`,o===`suited`?` Try All.`:``]}):u.map(e=>(0,H.jsx)(Ty,{font:e,picked:e.family===t,onPreview:()=>d(e),onPick:()=>n(e)},e.family))})]})}function Ty({font:e,picked:t,onPreview:n,onPick:r}){let i=(0,P.useRef)(null);return(0,P.useEffect)(()=>{let t=i.current;if(!t)return;let n=new IntersectionObserver(t=>{t.some(e=>e.isIntersecting)&&(by(e.family,e.google),n.disconnect())},{rootMargin:`200px`});return n.observe(t),()=>n.disconnect()},[e]),(0,H.jsxs)(`button`,{ref:i,type:`button`,onClick:r,onMouseEnter:n,onFocus:n,className:`flex w-full items-center gap-2 border-b px-3 py-2 text-left hover:bg-accent/50 focus-visible:bg-accent/50 outline-none cursor-pointer`,children:[(0,H.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,H.jsx)(`span`,{className:`block truncate text-[15px] leading-tight text-foreground`,style:{fontFamily:Jm(e)},children:e.family}),(0,H.jsx)(`span`,{className:`mt-0.5 block truncate text-[10px] text-muted-foreground/80`,children:e.note})]}),t?(0,H.jsx)(Bt,{size:13,className:`shrink-0 text-primary`}):null]})}var Ey=[{role:`display`,hint:`display`},{role:`serif`,hint:`body`},{role:`sans`,hint:`body`},{role:`mono`,hint:`mono`}],Dy=/^[a-z][a-z0-9-]*$/;function Oy(e){return/^\s*(?:"([^"]+)"|'([^']+)'|([^,]+))/.exec(e)?.slice(1).find(Boolean)?.trim()??e}var ky=/^(-|ui-|system-ui$|sans-serif$|serif$|monospace$|cursive$)/;function Ay({theme:e,onBrowse:t}){let n=e.typography.fontFamily??{},r=Object.keys(n).sort(),[i,a]=(0,P.useState)(!1),[o,s]=(0,P.useState)(``),[c,l]=(0,P.useState)(null),u=W(e=>e.refreshTheme),d=W(e=>e.themeName);(0,P.useEffect)(()=>{for(let e of Object.values(n)){let t=qm(Oy(e));t&&by(t.family,t.google)}},[n]);let f=e=>{ic.setFonts(d,[e]).catch(e=>{B(e,`Could not update the font role`),u()})},p=o.trim(),m=Dy.test(p)&&!r.includes(p),h=e=>{a(!1),t(e)};return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[r.length===0?(0,H.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No faces declared yet.`}):r.map(e=>{let r=n[e],i=Oy(r),a=qm(i),o=ky.test(i);return(0,H.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,H.jsxs)(`button`,{type:`button`,onClick:()=>t(e),title:r,className:`min-w-0 flex-1 flex items-baseline gap-2 rounded-md border border-input bg-background px-2 py-1.5 text-left hover:bg-accent/50 cursor-pointer`,children:[(0,H.jsx)(`span`,{className:`w-14 shrink-0 truncate font-mono text-[10px] text-muted-foreground`,children:e}),(0,H.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-xs `+(o?`text-muted-foreground`:`text-foreground`),style:a?{fontFamily:r}:void 0,children:o?`System default`:i})]}),(0,H.jsx)(`button`,{type:`button`,onClick:()=>l(e),title:`Remove the ${e} face`,"aria-label":`Remove the ${e} face`,className:`size-6 shrink-0 grid place-items-center rounded-md text-muted-foreground/60 hover:text-destructive cursor-pointer`,children:(0,H.jsx)(Ar,{size:11})})]},e)}),i?(0,H.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,H.jsx)(Z,{autoFocus:!0,value:o,onChange:e=>s(e.target.value),onKeyDown:e=>{e.key===`Enter`&&m&&h(p),e.key===`Escape`&&a(!1)},placeholder:`Role name`,spellCheck:!1,"aria-label":`New role name`,className:`h-7 flex-1 font-mono text-xs`}),(0,H.jsx)(`button`,{type:`button`,onClick:()=>h(p),disabled:!m,"aria-label":`Choose a face`,className:`size-7 shrink-0 grid place-items-center rounded-md border border-input bg-background text-muted-foreground hover:text-foreground disabled:opacity-40 disabled:cursor-not-allowed cursor-pointer`,children:(0,H.jsx)(Bt,{size:13})}),(0,H.jsx)(`button`,{type:`button`,onClick:()=>a(!1),"aria-label":`Cancel`,className:`size-7 shrink-0 grid place-items-center rounded-md text-muted-foreground hover:text-foreground cursor-pointer`,children:(0,H.jsx)(Br,{size:13})})]}),(0,H.jsx)(`div`,{className:`flex flex-wrap items-center gap-1`,children:Ey.filter(e=>!r.includes(e.role)).map(e=>(0,H.jsx)(`button`,{type:`button`,onClick:()=>s(e.role),className:`rounded-full border px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground hover:text-foreground cursor-pointer`,children:e.role},e.role))}),(0,H.jsx)(`span`,{className:`text-[10px] text-muted-foreground/80`,children:p.length>0&&!m?r.includes(p)?`"${p}" is already declared`:`Lowercase letters, digits and dashes — it becomes a utility name`:`Becomes --font-${p||`role`} and the font-${p||`role`} class`})]}):(0,H.jsxs)(`button`,{type:`button`,onClick:()=>{s(``),a(!0)},className:`flex items-center justify-center gap-1 rounded-md border border-dashed py-1.5 text-[11px] text-muted-foreground hover:text-foreground cursor-pointer`,children:[(0,H.jsx)(nr,{size:12}),` Add a face`]})]}),(0,H.jsx)(Cf,{open:c!==null,onOpenChange:e=>!e&&l(null),children:(0,H.jsxs)(Ef,{children:[(0,H.jsxs)(Df,{children:[(0,H.jsx)(Af,{children:`Remove the "${c}" face`}),(0,H.jsx)(jf,{children:`Anything using the font-${c} class falls back to the inherited face. A typeset still pointing at this role will block the removal.`})]}),(0,H.jsxs)(Of,{children:[(0,H.jsx)(Nf,{children:`Cancel`}),(0,H.jsx)(Mf,{variant:`destructive`,onClick:()=>{let e=c;l(null),e&&f({role:e,remove:!0})},children:`Remove`})]})]})})]})}function jy(e,t){return{role:e,family:t.family,fallback:t.fallback,...t.google?{google:t.google}:{}}}function My({className:e,...t}){return(0,H.jsx)(`div`,{role:`list`,"data-slot":`item-group`,className:V(`group/item-group flex w-full flex-col gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2`,e),...t})}var Ny=d(`group/item flex w-full flex-wrap items-center rounded-lg border text-sm transition-colors duration-100 outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 [a]:transition-colors [a]:hover:bg-muted`,{variants:{variant:{default:`border-transparent`,outline:`border-border`,muted:`border-transparent bg-muted/50`},size:{default:`gap-2.5 px-3 py-2.5`,sm:`gap-2.5 px-3 py-2.5`,xs:`gap-2 px-2.5 py-2 in-data-[slot=dropdown-menu-content]:p-0`}},defaultVariants:{variant:`default`,size:`default`}});function Py({className:e,variant:t=`default`,size:n=`default`,asChild:r=!1,...i}){let a=r?ht:`div`;return(0,H.jsx)(a,{"data-slot":`item`,"data-variant":t,"data-size":n,className:V(Ny({variant:t,size:n,className:e})),...i})}var Fy=d(`flex shrink-0 items-center justify-center gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start [&_svg]:pointer-events-none`,{variants:{variant:{default:`bg-transparent`,icon:`[&_svg:not([class*='size-'])]:size-4`,image:`size-10 overflow-hidden rounded-sm group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 [&_img]:size-full [&_img]:object-cover`}},defaultVariants:{variant:`default`}});function Iy({className:e,variant:t=`default`,...n}){return(0,H.jsx)(`div`,{"data-slot":`item-media`,"data-variant":t,className:V(Fy({variant:t,className:e})),...n})}function Ly({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`item-content`,className:V(`flex flex-1 flex-col gap-1 group-data-[size=xs]/item:gap-0 [&+[data-slot=item-content]]:flex-none`,e),...t})}function Ry({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`item-title`,className:V(`line-clamp-1 flex w-fit items-center gap-2 text-sm leading-snug font-medium underline-offset-4`,e),...t})}function zy({className:e,...t}){return(0,H.jsx)(`p`,{"data-slot":`item-description`,className:V(`line-clamp-2 text-left text-sm leading-normal font-normal text-muted-foreground group-data-[size=xs]/item:text-xs [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary`,e),...t})}function By({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`item-actions`,className:V(`flex items-center gap-2`,e),...t})}var Vy=d(`group/alert relative grid w-full gap-0.5 rounded-lg border px-2.5 py-2 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4`,{variants:{variant:{default:`bg-card text-card-foreground`,destructive:`bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current`}},defaultVariants:{variant:`default`}});function Hy({className:e,variant:t,...n}){return(0,H.jsx)(`div`,{"data-slot":`alert`,role:`alert`,className:V(Vy({variant:t}),e),...n})}function Uy({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`alert-title`,className:V(`font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground`,e),...t})}function Wy({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`alert-description`,className:V(`text-sm text-balance text-muted-foreground md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4`,e),...t})}function Gy({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`alert-action`,className:V(`absolute top-2 right-2`,e),...t})}var Ky=[{kind:`do`,label:`Do`,placeholder:`One primary action per view`},{kind:`dont`,label:`Don't`,placeholder:`Shadows on flat surfaces`}];function qy({state:e}){let t=W(e=>e.saveRules),n=e.source!==null&&!e.source.writable,[r,i]=(0,P.useState)(e.intent);(0,P.useEffect)(()=>{i(e.intent)},[e.intent]);let a=n=>{t({intent:n.intent??e.intent,rules:n.rules??e.rules}).catch(e=>B(e,`Could not save the rules`))};return(0,H.jsxs)(`div`,{className:`flex flex-col gap-5 p-4`,children:[n&&e.source?(0,H.jsxs)(Hy,{children:[(0,H.jsxs)(Uy,{children:[`Read from `,e.source.path]}),(0,H.jsx)(Wy,{children:`This design follows the repo's own design system document, so its rules are edited in that file. Changes show up here as soon as it is saved.`})]}):null,(0,H.jsxs)(zp,{children:[(0,H.jsx)(Vp,{htmlFor:`language-intent`,children:`Intent`}),(0,H.jsx)(Lf,{id:`language-intent`,value:r,readOnly:n,rows:3,placeholder:`What this design is going for, in a sentence or two.`,onChange:e=>i(e.target.value),onBlur:()=>{!n&&r.trim()!==e.intent&&a({intent:r.trim()})}})]}),Ky.map(({kind:t,label:r,placeholder:i})=>(0,H.jsx)(Jy,{kind:t,label:r,placeholder:i,rules:e.rules,readOnly:n,onChange:e=>a({rules:e})},t)),n?null:(0,H.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Saved to guidance.md in this design. Your agent reads it before composing, and a review quotes each rule word for word.`})]})}function Jy({kind:e,label:t,placeholder:n,rules:r,readOnly:i,onChange:a}){let[o,s]=(0,P.useState)(``),c=r.filter(t=>t.kind===e),l=`language-rule-${e}`,u=()=>{let t=o.trim();t!==``&&(s(``),a([...r,{kind:e,text:t}]))};return(0,H.jsxs)(zp,{children:[(0,H.jsx)(Vp,{htmlFor:l,children:t}),c.length>0?(0,H.jsx)(My,{className:`gap-1.5`,children:c.map(t=>(0,H.jsxs)(Py,{variant:`outline`,size:`xs`,children:[(0,H.jsx)(Iy,{children:e===`do`?(0,H.jsx)(Bt,{className:`size-3.5 text-primary`}):(0,H.jsx)(Br,{className:`size-3.5 text-destructive`})}),(0,H.jsx)(Ly,{children:(0,H.jsx)(Ry,{className:`text-xs font-normal leading-snug`,children:t.text})}),i?null:(0,H.jsx)(By,{children:(0,H.jsx)(G,{variant:`ghost`,size:`icon-xs`,"aria-label":`Remove rule: ${t.text}`,onClick:()=>a(r.filter(e=>e!==t)),children:(0,H.jsx)(Ar,{})})})]},t.text))}):i?(0,H.jsx)(Hp,{className:`text-xs`,children:`None stated.`}):null,i?null:(0,H.jsxs)(Rf,{children:[(0,H.jsx)(Uf,{id:l,value:o,placeholder:c.length===0?`e.g. ${n}`:`Add another`,className:`text-xs`,onChange:e=>s(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),u())}}),(0,H.jsx)(Bf,{align:`inline-end`,children:(0,H.jsx)(Hf,{size:`icon-xs`,"aria-label":`Add a ${t} rule`,disabled:o.trim()===``,onClick:u,children:(0,H.jsx)(nr,{})})})]})]})}var Yy=16;function Xy(e){if(typeof e==`number`)return e;if(e===void 0)return null;let t=/^(-?\d*\.?\d+)(px|rem)?$/.exec(e.trim());if(!t)return null;let n=Number(t[1]);return t[2]===`rem`?n*Yy:n}function Zy(e){return`${Number((e/Yy).toFixed(4))}rem`}var Qy=[{px:0,label:`Sharp`},{px:4,label:`Subtle`},{px:8,label:`Soft`},{px:12,label:`Round`},{px:20,label:`Pill`}];function $y(e){return Qy.find(t=>t.px===e)?.label??`Custom`}function eb({className:e,defaultValue:t,value:n,min:r=0,max:i=100,tone:a=`primary`,"aria-label":o,...s}){let c=a===`muted`,l=P.useMemo(()=>Array.isArray(n)?n:Array.isArray(t)?t:[r,i],[n,t,r,i]);return(0,H.jsxs)(qe,{"data-slot":`slider`,...t===void 0?{}:{defaultValue:t},...n===void 0?{}:{value:n},min:r,max:i,className:V(`relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-vertical:h-full data-vertical:min-h-40 data-vertical:w-auto data-vertical:flex-col`,e),...s,children:[(0,H.jsx)(Te,{"data-slot":`slider-track`,className:`relative grow overflow-hidden rounded-full bg-muted data-horizontal:h-1 data-horizontal:w-full data-vertical:h-full data-vertical:w-1`,children:(0,H.jsx)(ze,{"data-slot":`slider-range`,className:V(`absolute select-none data-horizontal:h-full data-vertical:w-full`,c?`bg-muted-foreground/30`:`bg-primary`)})}),Array.from({length:l.length},(e,t)=>(0,H.jsx)(Le,{"data-slot":`slider-thumb`,"aria-label":o,className:V(c&&`border-muted-foreground/40 bg-muted`,`relative block size-3 shrink-0 rounded-full border border-ring bg-white ring-ring/50 transition-[color,box-shadow] select-none after:absolute after:-inset-2 hover:ring-3 focus-visible:ring-3 focus-visible:outline-hidden active:ring-3 disabled:pointer-events-none disabled:opacity-50`)},t))]})}var tb=24;function nb({theme:e}){let t=W(e=>e.themeName),n=e.radius.md??e.radius.lg??e.radius.sm,r=Xy(n),[i,a]=(0,P.useState)(r??8);(0,P.useEffect)(()=>{r!==null&&a(r)},[r]);let o=e=>{a(e),ic.setRadius(t,Zy(e)).catch(e=>B(e,`Could not set the corner radius`))};return(0,H.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,H.jsxs)(zp,{children:[(0,H.jsx)(Vp,{children:`Corners`}),(0,H.jsx)(Zp,{type:`single`,variant:`outline`,size:`sm`,className:`w-full`,value:String(i),onValueChange:e=>{e!==``&&o(Number(e))},children:Qy.map(e=>(0,H.jsx)(Qp,{value:String(e.px),className:`flex-1 text-xs`,children:e.label},e.px))})]}),(0,H.jsxs)(zp,{children:[(0,H.jsxs)(`div`,{className:`flex items-baseline justify-between`,children:[(0,H.jsx)(Vp,{children:`Radius`}),(0,H.jsxs)(`span`,{className:`font-mono text-xs tabular-nums`,children:[i,`px`]})]}),(0,H.jsx)(eb,{"aria-label":`Corner radius`,value:[Math.min(i,tb)],min:0,max:tb,step:1,onValueChange:([e])=>a(e),onValueCommit:([e])=>o(e)}),(0,H.jsx)(Hp,{className:`text-xs`,children:r===null&&n!==void 0?`The theme's radius is ${String(n)}, which this control can't show. Moving it replaces that value.`:`The large corner. Small and medium step down from it, extra large steps up.`})]})]})}var rb={AAA:`text-emerald-600 dark:text-emerald-400`,AA:`text-emerald-600 dark:text-emerald-400`,AAlarge:`text-amber-600 dark:text-amber-400`,Fail:`text-rose-600 dark:text-rose-400`},ib={AAA:`AAA`,AA:`AA`,AAlarge:`AA·lg`,Fail:`FAIL`};function ab({bumpKey:e}){let[t,n]=(0,P.useState)(null),r=W(e=>e.themeName);if((0,P.useEffect)(()=>{let e=!0,t=r==="default"?``:`?name=${encodeURIComponent(r)}`;return fetch(`/api/theme/contrast${t}`).then(e=>e.ok?e.json():Promise.reject(Error(`${e.status}`))).then(t=>{e&&n(t.results)}).catch(()=>{e&&n([])}),()=>{e=!1}},[e,r]),!t)return null;if(t.length===0)return(0,H.jsx)(`div`,{className:`text-[10px] text-muted-foreground`,children:`Contrast: no parseable pairs.`});let i=t.filter(e=>e.tier===`Fail`),a=`${t.length-i.length}/${t.length} pass WCAG AA`;return(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsxs)(`div`,{className:`flex items-center justify-between text-xs`,children:[(0,H.jsx)(`span`,{className:`font-medium`,children:`Contrast`}),(0,H.jsx)(`span`,{className:`tabular-nums `+(i.length===0?`text-emerald-600 dark:text-emerald-400`:`text-rose-600 dark:text-rose-400`),children:a})]}),(0,H.jsx)(`ul`,{className:`flex flex-col gap-1`,children:t.map(e=>(0,H.jsxs)(`li`,{className:`flex items-center justify-between gap-2 rounded-md border bg-background px-1.5 py-1 text-[10px]`,children:[(0,H.jsx)(`span`,{className:`truncate text-muted-foreground`,children:e.label}),(0,H.jsxs)(`span`,{className:`shrink-0 tabular-nums ${rb[e.tier]}`,children:[e.ratio.toFixed(2),`:1 `,ib[e.tier]]})]},e.label))})]})}function ob({id:e,label:t,value:n,onChange:r,fallback:i,placeholder:a,title:o,children:s}){let[c,l]=(0,P.useState)(!1),u=(0,P.useRef)(null),d=n.trim()||i||``;return(0,H.jsxs)(`div`,{className:`flex items-end gap-2`,children:[(0,H.jsxs)(Wp,{open:c,onOpenChange:l,children:[(0,H.jsx)(Gp,{asChild:!0,children:(0,H.jsx)(`button`,{type:`button`,className:`h-7 w-7 rounded-md border shrink-0 cursor-pointer outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background`,style:{background:d||`transparent`},title:o,"aria-label":`Edit ${t}`})}),(0,H.jsx)(Kp,{align:`start`,className:`w-72`,onOpenAutoFocus:e=>{document.activeElement===u.current&&e.preventDefault()},onInteractOutside:e=>{e.target===u.current&&e.preventDefault()},children:(0,H.jsx)(lb,{currentValue:d||`#000000`,onCommit:r})})]}),(0,H.jsxs)(`div`,{className:`flex-1 min-w-0 flex flex-col gap-1`,children:[(0,H.jsx)(K,{htmlFor:e,className:`text-xs text-muted-foreground truncate`,children:t}),(0,H.jsx)(Z,{ref:u,id:e,type:`text`,value:n,placeholder:a,onChange:e=>r(e.target.value),onFocus:()=>l(!0),spellCheck:!1,className:`text-xs font-mono`})]}),s]})}var sb=250;function cb({label:e,tokenPath:t,value:n,write:r,children:i}){let[a,o]=(0,P.useState)(n),s=(0,P.useRef)(null),c=W(e=>e.themeName);return(0,P.useEffect)(()=>{o(n)},[n]),(0,P.useEffect)(()=>()=>{s.current&&clearTimeout(s.current)},[]),(0,H.jsx)(ob,{id:`token-${t}`,label:e,value:a,onChange:e=>{o(e),s.current&&clearTimeout(s.current),s.current=setTimeout(()=>{let n=vh(e)??e;(r?r(n):ic.setToken(c,t,n)).catch(e=>B(e,`Could not set color token`))},sb)},title:`${t} — click to edit`,children:i})}function lb({currentValue:e,onCommit:t}){let n=gh(e)??{hex:`#000000`,oklch:`oklch(0 0 0)`,hsl:`hsl(0 0% 0%)`},[r,i]=(0,P.useState)(n.hex),[a,o]=(0,P.useState)(n.oklch),[s,c]=(0,P.useState)(n.hsl),[l,u]=(0,P.useState)(()=>C_(n.hex)??{h:0,s:0,v:0}),d=(0,P.useRef)(n.oklch);(0,P.useEffect)(()=>{if(e===d.current)return;let t=gh(e);if(!t||t.oklch===d.current)return;d.current=t.oklch,i(t.hex),o(t.oklch),c(t.hsl);let n=C_(t.hex);n&&u(n)},[e]);let f=(e,n)=>{let r=gh(e);if(!r){n===`hex`&&i(e),n===`oklch`&&o(e),n===`hsl`&&c(e);return}if(i(r.hex),o(r.oklch),c(r.hsl),n!==`wheel`){let e=C_(r.hex);e&&u(e)}d.current=r.oklch,t(r.oklch)};return(0,H.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,H.jsx)(D_,{value:l,onChange:e=>{u(e),f(S_(e),`wheel`)}}),(0,H.jsx)(ub,{label:`HEX`,value:r,onChange:e=>f(e,`hex`)}),(0,H.jsx)(ub,{label:`OKLCH`,value:a,onChange:e=>f(e,`oklch`)}),(0,H.jsx)(ub,{label:`HSL`,value:s,onChange:e=>f(e,`hsl`)})]})}function ub({label:e,value:t,onChange:n}){let r=`velloo-color-${e.toLowerCase()}`;return(0,H.jsxs)(`div`,{className:`flex items-center gap-2 text-xs`,children:[(0,H.jsx)(`label`,{htmlFor:r,className:`w-12 text-muted-foreground uppercase tracking-wider`,children:e}),(0,H.jsx)(Z,{id:r,type:`text`,value:t,onChange:e=>n(e.target.value),spellCheck:!1,className:`flex-1 font-mono text-xs`})]})}var db=[{key:`background`,label:`Background`,pair:!1},{key:`foreground`,label:`Foreground`,pair:!1},{key:`primary`,label:`Primary`,pair:!0},{key:`secondary`,label:`Secondary`,pair:!0},{key:`muted`,label:`Muted`,pair:!0},{key:`accent`,label:`Accent`,pair:!0},{key:`destructive`,label:`Destructive`,pair:!0},{key:`card`,label:`Card`,pair:!0},{key:`popover`,label:`Popover`,pair:!0},{key:`border`,label:`Border`,pair:!1},{key:`input`,label:`Input`,pair:!1},{key:`ring`,label:`Ring`,pair:!1}];function fb(e){return typeof e==`string`?e:e&&typeof e==`object`?e.DEFAULT:``}function pb(e){return e&&typeof e==`object`&&e.foreground?e.foreground:null}function mb({theme:e,scheme:t=`light`,only:n}){let r=W(e=>e.themeName),i=t===`dark`,a=Ta(e,i),o=i?`colorsDark`:`colors`;return(0,H.jsx)(`div`,{className:`flex flex-col gap-3`,children:db.filter(e=>!n||n.has(e.key)).map(t=>{let n=a[t.key],s=fb(n);if(!s)return null;let c=pb(n),l=t.pair&&typeof n==`object`,u=i&&l&&typeof e.colorsDark?.[t.key]!=`object`,d=e=>u?n=>ic.setTokens(r,[{path:`${o}.${t.key}.DEFAULT`,value:e===`DEFAULT`?n:s},...e===`foreground`||c?[{path:`${o}.${t.key}.foreground`,value:e===`foreground`?n:c}]:[]]):void 0;return(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(cb,{label:t.label,tokenPath:l?`${o}.${t.key}.DEFAULT`:`${o}.${t.key}`,value:s,write:d(`DEFAULT`)}),l&&c?(0,H.jsx)(`div`,{className:`pl-9`,children:(0,H.jsx)(cb,{label:`${t.label} fg`,tokenPath:`${o}.${t.key}.foreground`,value:c,write:d(`foreground`)})}):null]},t.key)})})}function hb(){let[e,t]=(0,P.useState)(``),[n,r]=(0,P.useState)(!1),[i,a]=(0,P.useState)(null),o=W(e=>e.themeName),s=W(e=>fb(e.theme?.colors.primary));return(0,H.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,H.jsx)(ob,{id:`theme-seed`,label:`derive palette from color`,value:e,onChange:t,fallback:s,placeholder:`#7c3aed or oklch(...)`,children:(0,H.jsx)(G,{variant:`outline`,size:`sm`,onClick:async()=>{if(e.trim()){r(!0),a(null);try{await ic.deriveFromColor(o,e.trim()),a(`palette derived from ${e.trim()}`)}catch(e){a(`derive failed: ${e.message}`)}finally{r(!1)}}},disabled:n||!e.trim(),children:n?`…`:`Apply`})}),i?(0,H.jsx)(`div`,{className:`text-[10px] text-muted-foreground`,children:i}):null]})}function gb(e,t){let n=t===void 0?void 0:String(t),r=[[`—`,`—`],...e];return n!==void 0&&!e.some(([e])=>e===n)&&r.push([n,n]),r}function _b({title:e,defaultOpen:t=!0,children:n}){let[r,i]=(0,P.useState)(t);return(0,H.jsxs)(`section`,{className:`border-b last:border-b-0`,children:[(0,H.jsxs)(`button`,{type:`button`,onClick:()=>i(e=>!e),className:`w-full flex items-center justify-between px-3 py-2.5 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground hover:text-foreground`,children:[e,(0,H.jsx)(Vt,{className:`size-3 transition-transform ${r?``:`-rotate-90`}`})]}),r?(0,H.jsx)(`div`,{className:`px-3 pb-3 flex flex-col gap-2.5`,children:n}):null]})}function $({label:e,children:t}){return(0,H.jsxs)(`div`,{className:`flex items-center justify-between gap-3 min-h-7`,children:[(0,H.jsx)(`span`,{className:`text-xs text-muted-foreground shrink-0`,children:e}),t]})}function vb({value:e,onChange:t,options:n,className:r}){return(0,H.jsx)(Zp,{type:`single`,size:`sm`,value:e??``,onValueChange:e=>t(e||void 0),className:r,children:n.map(e=>(0,H.jsx)(Qp,{value:e.value,title:e.title??e.label??e.value,className:`h-7 min-w-7 px-2 text-[11px]`,children:e.icon??e.label??e.value},e.value))})}function yb({value:e,onChange:t,unit:n,units:r,onUnitChange:i,placeholder:a,className:o}){return(0,H.jsxs)(`div`,{className:`inline-flex items-center h-7 rounded-md border border-input bg-background overflow-hidden ${o??`w-20`}`,children:[(0,H.jsx)(`input`,{value:e,placeholder:a,spellCheck:!1,onChange:e=>t(e.target.value),className:`min-w-0 flex-1 bg-transparent px-2 text-xs tabular-nums outline-none`}),r&&i?(0,H.jsx)(`select`,{value:n??r[0],onChange:e=>i(e.target.value),className:`self-stretch border-l border-input bg-muted/50 px-1 text-[10px] text-muted-foreground outline-none`,children:r.map(e=>(0,H.jsx)(`option`,{value:e,children:e},e))}):n?(0,H.jsx)(`span`,{className:`self-stretch flex items-center border-l border-input px-1.5 text-[10px] text-muted-foreground`,children:n}):null]})}function bb({value:e,onChange:t,options:n,className:r,label:i}){return(0,H.jsx)(`select`,{value:e,"aria-label":i,onChange:e=>t(e.target.value),className:`h-7 rounded-md border border-input bg-background px-2 text-xs text-foreground outline-none ${r??`min-w-[7rem]`}`,children:n.map(([e,t])=>(0,H.jsx)(`option`,{value:e,children:t??e},e))})}function xb(e){let t=/^\[(.+)\]$/.exec(e)?.[1]??e;return/^#([0-9a-f]{3,8})$/i.test(t)||/^(rgb|hsl|oklch|var)\(/i.test(t)?t:null}function Sb({value:e,onChange:t,placeholder:n}){let r=xb(e);return(0,H.jsxs)(`div`,{className:`inline-flex min-w-0 items-center gap-1.5 h-7 pl-1.5 pr-2 rounded-md border border-input bg-background`,children:[(0,H.jsx)(`span`,{className:`size-4 shrink-0 rounded-[3px] border border-border bg-[repeating-conic-gradient(#0000_0deg_90deg,#8884_90deg_180deg)]`,style:r?{background:r}:void 0}),(0,H.jsx)(`input`,{value:e,placeholder:n,spellCheck:!1,onChange:e=>t(e.target.value),className:`min-w-0 flex-1 bg-transparent text-xs outline-none`})]})}function Cb({code:e}){return(0,H.jsx)(`pre`,{className:`rounded-md border bg-muted/50 p-2.5 font-mono text-[10.5px] leading-[1.6] text-muted-foreground whitespace-pre-wrap break-words`,children:e})}function wb({padding:e,margin:t,contentLabel:n,onPadding:r,onMargin:i}){let a=(e,t,n)=>(0,H.jsx)(`input`,{value:e,spellCheck:!1,onChange:e=>t(e.target.value),className:`w-9 rounded border border-transparent bg-transparent text-center text-[10px] tabular-nums text-foreground outline-none focus:border-ring hover:bg-background/60`},n);return(0,H.jsxs)(`div`,{className:`relative rounded-md border border-dashed bg-muted/40 px-2 pb-1 pt-4 text-muted-foreground`,children:[(0,H.jsx)(`span`,{className:`absolute left-2 top-1 text-[8px] font-medium uppercase tracking-wide text-muted-foreground/80`,children:`margin`}),(0,H.jsx)(`div`,{className:`flex justify-center`,children:a(t.top,e=>i(`top`,e),`mt`)}),(0,H.jsxs)(`div`,{className:`flex items-center gap-1`,children:[a(t.left,e=>i(`left`,e),`ml`),(0,H.jsxs)(`div`,{className:`relative flex-1 rounded border bg-accent/40 px-2 pb-1 pt-4`,children:[(0,H.jsx)(`span`,{className:`absolute left-1.5 top-0.5 text-[8px] font-medium uppercase tracking-wide text-muted-foreground/80`,children:`padding`}),(0,H.jsx)(`div`,{className:`flex justify-center`,children:a(e.top,e=>r(`top`,e),`pt`)}),(0,H.jsxs)(`div`,{className:`flex items-center gap-1`,children:[a(e.left,e=>r(`left`,e),`pl`),(0,H.jsx)(`div`,{className:`flex h-9 flex-1 items-center justify-center rounded border bg-background text-[10px] text-muted-foreground`,children:n}),a(e.right,e=>r(`right`,e),`pr`)]}),(0,H.jsx)(`div`,{className:`flex justify-center`,children:a(e.bottom,e=>r(`bottom`,e),`pb`)})]}),a(t.right,e=>i(`right`,e),`mr`)]}),(0,H.jsx)(`div`,{className:`flex justify-center`,children:a(t.bottom,e=>i(`bottom`,e),`mb`)})]})}function Tb({placeholder:e,value:t,onChange:n,onSubmit:r}){return(0,H.jsx)(`input`,{value:t,placeholder:e,spellCheck:!1,onChange:e=>n(e.target.value),onKeyDown:e=>{e.key===`Enter`&&r()},className:`h-7 w-full rounded-md border border-dashed border-input bg-background px-2 text-[11px] text-foreground outline-none placeholder:text-muted-foreground focus:border-ring`})}var Eb=[`h1`,`h3`,`body`,`caption`],Db=26;function Ob({scale:e,rootPx:t}){let n=Math.max(...Eb.map(t=>e[t].fontSize)),r=Math.min(1,Db/n);return(0,H.jsxs)(`div`,{className:`rounded-md border bg-background px-2.5 py-2`,children:[(0,H.jsxs)(`div`,{className:`mb-1 flex items-baseline gap-1.5`,children:[(0,H.jsx)(`span`,{className:`text-[10px] font-semibold uppercase tracking-[0.08em] text-muted-foreground`,children:`Resolved ladder`}),(0,H.jsx)(`span`,{className:`ml-auto font-mono text-[10px] text-muted-foreground/70`,children:`at ${t}px base`})]}),Eb.map((t,n)=>{let i=e[t];return(0,H.jsxs)(`div`,{className:`flex items-baseline gap-3 py-1.5${n===Eb.length-1?``:` border-b`}`,children:[(0,H.jsx)(`span`,{className:`w-12 shrink-0 font-mono text-[10px] text-muted-foreground`,children:t}),(0,H.jsx)(`span`,{className:`truncate text-foreground`,style:{fontSize:i.fontSize*r,lineHeight:1,letterSpacing:i.letterSpacing,fontWeight:i.fontWeight,...i.fontFamily?{fontFamily:i.fontFamily}:{}},children:`Aa`}),(0,H.jsx)(`span`,{className:`ml-auto shrink-0 font-mono text-[10px] tabular-nums text-muted-foreground/80`,children:`${i.fontSize} / ${i.lineHeight.toFixed(2)}`})]},t)})]})}function kb({label:e,value:t,min:n,max:r,step:i,display:a,authored:o,onClear:s,hint:c,onPreview:l,onCommit:u}){return(0,H.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,H.jsxs)(`div`,{className:`flex items-baseline gap-1.5`,children:[(0,H.jsx)(`span`,{"aria-hidden":!0,className:`size-1.5 shrink-0 self-center rounded-full `+(o?`bg-primary`:`border border-muted-foreground/40`)}),(0,H.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e}),o?null:(0,H.jsx)(`span`,{className:`text-[10px] uppercase tracking-wide text-muted-foreground/60`,children:`inherited`}),o&&s?(0,H.jsx)(`button`,{type:`button`,onClick:s,title:`Clear ${e} — inherit it from the default typeset again`,"aria-label":`Clear ${e}`,className:`ml-auto text-muted-foreground/60 hover:text-foreground cursor-pointer`,children:(0,H.jsx)(sr,{size:11})}):null,(0,H.jsx)(`span`,{className:(o&&s?``:`ml-auto `)+`font-mono text-xs tabular-nums `+(o?`text-foreground`:`text-muted-foreground/60`),children:a})]}),(0,H.jsx)(eb,{"aria-label":e,tone:o?`primary`:`muted`,value:[t],min:n,max:r,step:i,onValueChange:([e])=>l(e),onValueCommit:([e])=>u(e)}),(0,H.jsx)(`span`,{className:`text-[10px] text-muted-foreground/80`,children:c})]})}function Ab({names:e,selected:t,onSelect:n,onAdd:r,onRename:i,onRemove:a}){let[o,s]=(0,P.useState)(null),[c,l]=(0,P.useState)(``),[u,d]=(0,P.useState)(!1),f=t===La,p=()=>{l(``),s(`add`)},m=()=>{l(t),s(`rename`)},h=o===`rename`?e.filter(e=>e!==t):e,g=c.trim(),_=g.length>0&&Ra(g)&&!h.includes(g),v=()=>{_&&(o===`add`?r(g):i(t,g),s(null))};return o?(0,H.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,H.jsx)(Z,{autoFocus:!0,value:c,onChange:e=>l(e.target.value),onKeyDown:e=>{e.key===`Enter`&&v(),e.key===`Escape`&&s(null)},placeholder:o===`add`?`New preset name`:`Rename preset`,spellCheck:!1,className:`h-7 flex-1 text-xs font-mono`,"aria-label":o===`add`?`New preset name`:`Rename preset`}),(0,H.jsx)(`button`,{type:`button`,onClick:v,disabled:!_,"aria-label":`Confirm`,className:`size-7 shrink-0 grid place-items-center rounded-md border border-input bg-background text-muted-foreground hover:text-foreground disabled:opacity-40 disabled:cursor-not-allowed cursor-pointer`,children:(0,H.jsx)(Bt,{size:13})}),(0,H.jsx)(`button`,{type:`button`,onClick:()=>s(null),"aria-label":`Cancel`,className:`size-7 shrink-0 grid place-items-center rounded-md text-muted-foreground hover:text-foreground cursor-pointer`,children:(0,H.jsx)(Br,{size:13})})]}),(0,H.jsx)(`span`,{className:`text-[10px] text-muted-foreground/80`,children:g.length>0&&!_?h.includes(g)?`"${g}" already exists`:`Letters, digits, dash and underscore only — it becomes a class name`:`Becomes .typeset-${g||`name`}`})]}):(0,H.jsxs)(H.Fragment,{children:[(0,H.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,H.jsx)(`div`,{className:`flex-1 min-w-0 flex items-center gap-0.5 p-0.5 rounded-md bg-muted overflow-x-auto`,children:e.map(e=>(0,H.jsx)(`button`,{type:`button`,onClick:()=>n(e),"aria-pressed":e===t,className:`flex-1 min-w-14 h-6 px-2 grid place-items-center rounded-[5px] text-[11px] truncate cursor-pointer `+(e===t?`bg-background font-medium text-foreground shadow-sm`:`text-muted-foreground hover:text-foreground`),children:e},e))}),(0,H.jsx)(`button`,{type:`button`,onClick:p,title:`New preset`,"aria-label":`New preset`,className:`size-7 shrink-0 grid place-items-center rounded-md border border-input bg-background text-muted-foreground hover:text-foreground cursor-pointer`,children:(0,H.jsx)(nr,{size:13})})]}),(0,H.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,H.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground/80 truncate`,children:f?`:root — styles every screen`:`.typeset-${t}`}),f?null:(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(`button`,{type:`button`,onClick:m,title:`Rename ${t}`,"aria-label":`Rename ${t}`,className:`ml-auto text-muted-foreground/60 hover:text-foreground cursor-pointer`,children:(0,H.jsx)(er,{size:11})}),(0,H.jsx)(`button`,{type:`button`,onClick:()=>d(!0),title:`Delete ${t}`,"aria-label":`Delete ${t}`,className:`text-muted-foreground/60 hover:text-destructive cursor-pointer`,children:(0,H.jsx)(Ar,{size:11})})]})]})]}),(0,H.jsx)(Cf,{open:u,onOpenChange:d,children:(0,H.jsxs)(Ef,{children:[(0,H.jsxs)(Df,{children:[(0,H.jsx)(Af,{children:`Delete the "${t}" typeset`}),(0,H.jsx)(jf,{children:`Any region still carrying .typeset-${t} keeps the class but falls back to the default typeset's rhythm.`})]}),(0,H.jsxs)(Of,{children:[(0,H.jsx)(Nf,{children:`Cancel`}),(0,H.jsx)(Mf,{variant:`destructive`,onClick:()=>{d(!1),a(t)},children:`Delete`})]})]})})]})}var jb={min:12,max:24,step:.5},Mb={min:1,max:2.2,step:.05},Nb={min:.4,max:2.5,step:.05},Pb=`__none`,Fb=[{field:`fontBody`,label:`Body`},{field:`fontHeading`,label:`Heading`},{field:`fontMono`,label:`Mono`}];function Ib(e){return[La,...Object.keys(e).filter(e=>e!==La).sort()]}function Lb({theme:e,baselineOnly:t=!1}){let n=e.typography.typesets??{},r=Ib(n),[i,a]=(0,P.useState)(La),o=W(e=>e.setTypesetDraft),s=W(e=>e.typesetDraft),c=W(e=>e.refreshTheme),l=W(e=>e.themeName),u=r.includes(i)?i:La;(0,P.useEffect)(()=>()=>o(null),[o]);let d=n[u]??{},f=s?.name===u?s.typeset:d,p=u===La,m=n.default??{},h=Ja(p?f:{...m,...f}),g=Object.keys(e.typography.fontFamily??{}).sort(),_=Za(h.size),v=Qa(h,{fontFamily:e.typography.fontFamily??{}}),y=e=>{o({name:u,typeset:{...f,...e}})},b=(e,t)=>{ic.setTypeset(l,[e]).then(()=>t?.()).catch(e=>{B(e,`Could not update the typeset`),c()})},x=e=>b({name:u,...e});return(0,H.jsxs)(`div`,{className:`flex flex-col gap-3.5`,children:[t?null:(0,H.jsx)(Ab,{names:r,selected:u,onSelect:e=>{o(null),a(e)},onAdd:e=>b({name:e},()=>a(e)),onRename:(e,t)=>b({name:e,renameTo:t},()=>a(t)),onRemove:e=>b({name:e,remove:!0},()=>a(La))}),(0,H.jsx)(kb,{label:`Size`,value:_,...jb,display:f.size===void 0?String(h.size):zb(f.size),authored:f.size!==void 0,onClear:f.size===void 0?void 0:()=>x({size:null}),hint:f.size===void 0?`1em follows the container — drag to pin it`:`pinned; clear to follow the container again`,onPreview:e=>y({size:`${e}px`}),onCommit:e=>x({size:`${e}px`})}),(0,H.jsx)(kb,{label:`Leading`,value:h.leading,...Mb,display:h.leading.toFixed(2),authored:f.leading!==void 0,onClear:f.leading===void 0?void 0:()=>x({leading:null}),hint:`body line-height — the whole ladder scales with it`,onPreview:e=>y({leading:e}),onCommit:e=>x({leading:e})}),(0,H.jsx)(kb,{label:`Flow`,value:Za(h.flow)/16,...Nb,display:zb(h.flow),authored:f.flow!==void 0,onClear:f.flow===void 0?void 0:()=>x({flow:null}),hint:`space between blocks, and the air above a heading`,onPreview:e=>y({flow:`${Bb(e)}em`}),onCommit:e=>x({flow:`${Bb(e)}em`})}),(0,H.jsx)(Pp,{}),(0,H.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[Fb.map(({field:e,label:t})=>(0,H.jsx)(Rb,{label:t,roles:g,value:f[e],inherited:p?void 0:m[e],onChange:t=>x({[e]:t})},e)),(0,H.jsx)(`p`,{className:`text-[10px] leading-relaxed text-muted-foreground/80`,children:`Roles, not stacks — they point at the fonts you declared, so swapping a face updates every typeset that names it.`})]}),(0,H.jsx)(Pp,{}),(0,H.jsx)(Ob,{scale:v,rootPx:_})]})}function Rb({label:e,roles:t,value:n,inherited:r,onChange:i}){return(0,H.jsxs)(`label`,{className:`flex items-center gap-1.5`,children:[(0,H.jsx)(`span`,{"aria-hidden":!0,className:`size-1.5 shrink-0 rounded-full `+(n===void 0?`border border-muted-foreground/40`:`bg-primary`)}),(0,H.jsx)(`span`,{className:`w-14 shrink-0 text-xs text-muted-foreground`,children:e}),(0,H.jsx)(bb,{value:n??Pb,onChange:e=>i(e===Pb?null:e),options:[[Pb,r?`${r} (inherited)`:`—`],...t.map(e=>[e,e])],className:`flex-1 min-w-0`})]})}function zb(e){return typeof e==`number`?`${e}px`:e}function Bb(e){return Math.round(e*100)/100}function Vb({...e}){return(0,H.jsx)(dt,{"data-slot":`collapsible`,...e})}function Hb({...e}){return(0,H.jsx)(Ee,{"data-slot":`collapsible-trigger`,...e})}function Ub({...e}){return(0,H.jsx)(Re,{"data-slot":`collapsible-content`,...e})}var Wb={"shadcn-upstream":`shadcn`,mui:`Material UI`,antd:`Ant Design`,chakra:`Chakra UI`,none:`No library`,html:`HTML + htmx`};function Gb(e){return Wb[e]??e}function Kb(e){return/^\d{4}\./.test(e)?`snapshot ${e}`:`v${e}`}function qb(e,t){switch(e){case`in-repo`:return{text:`your repo`,title:`Components render from your app. Velloo's bundled snapshot (${t}) covers only the files it can't compile.`};case`binary`:return{text:`bundled`,title:`Components ship inside the velloo binary.`};case`cache`:return{text:`cached`,title:`Components were downloaded into ~/.velloo.`};default:return{text:e}}}function Jb(e){return e.source!==`in-repo`}function Yb(e,t){if(!t)return!0;let n=e.id.toLowerCase();return n!=="default"&&n!==e.providerId.toLowerCase()&&n!==Gb(e.providerId).toLowerCase()}function Xb(e){return[...e.libraries].sort((t,n)=>Number(n.id===e.defaultLibrary)-Number(t.id===e.defaultLibrary))}function Zb(e){return new Set(e.map(e=>e.styleLabel)).size>1}function Qb(e){return e.libraries.find(t=>t.id===e.defaultLibrary)?.styleLabel??(e.styling===`none`?`Inline styles`:`Tailwind classes`)}function $b(e){return e.trim().toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``)}function ex({theme:e,scheme:t,onSchemeChange:n}){let r=W(e=>e.themeName),i=W(e=>e.frameworkRoles),a=W(e=>Gb(e.design?.providerId??``)),[o,s]=(0,P.useState)(``),c=t===`dark`,l=i?new Set(i):null,u=l?new Set(db.map(e=>e.key).filter(e=>!l.has(e))):null,d=Da(e),f=e.colors.primary,p=typeof f==`string`?f:f.DEFAULT,m=()=>{let e=$b(o);e!==``&&(s(``),ic.setRole(r,{name:e,light:p,dark:p}).catch(e=>B(e,`Could not add the role`)))};return(0,H.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,H.jsxs)(Zp,{type:`single`,variant:`outline`,size:`sm`,className:`w-full`,value:t,onValueChange:e=>{(e===`light`||e===`dark`)&&n(e)},children:[(0,H.jsx)(Qp,{value:`light`,className:`flex-1 text-xs`,children:`Light`}),(0,H.jsx)(Qp,{value:`dark`,className:`flex-1 text-xs`,children:`Dark`})]}),c&&!e.colorsDark?(0,H.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`This theme has no dark palette yet, so dark shows the light colours. Change one and it becomes the first dark colour — or pick a starting point above to get a whole palette.`}):null,l?(0,H.jsxs)(H.Fragment,{children:[(0,H.jsxs)(zp,{children:[(0,H.jsxs)(Vp,{children:[`Used by `,a,`'s components`]}),(0,H.jsx)(mb,{theme:e,scheme:t,only:l})]}),u&&u.size>0?(0,H.jsxs)(zp,{children:[(0,H.jsx)(Vp,{children:`For your own designs`}),(0,H.jsxs)(Hp,{className:`text-xs`,children:[a,` has no place for these, but a design can still use them.`]}),(0,H.jsx)(mb,{theme:e,scheme:t,only:u})]}):null]}):(0,H.jsx)(mb,{theme:e,scheme:t}),(0,H.jsxs)(zp,{children:[(0,H.jsx)(Vp,{htmlFor:`language-custom-role`,children:`Custom roles`}),d.map(t=>{let n=e.palette?.[t],i=(c?e.paletteDark?.[t]:n)??n??``;return(0,H.jsx)(cb,{label:t,tokenPath:`${c?`paletteDark`:`palette`}.${t}`,value:i,children:(0,H.jsx)(G,{variant:`ghost`,size:`icon-sm`,"aria-label":`Remove the ${t} role`,onClick:()=>void ic.removeRole(r,t).catch(e=>B(e,`Could not remove the role`)),children:(0,H.jsx)(Ar,{})})},t)}),(0,H.jsxs)(Rf,{children:[(0,H.jsx)(Uf,{id:`language-custom-role`,value:o,placeholder:d.length===0?`e.g. success, tertiary`:`Add another`,className:`text-xs`,onChange:e=>s(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),m())}}),(0,H.jsx)(Bf,{align:`inline-end`,children:(0,H.jsx)(Hf,{size:`icon-xs`,"aria-label":`Add custom role`,disabled:$b(o)===``,onClick:m,children:(0,H.jsx)(nr,{})})})]}),(0,H.jsx)(Hp,{className:`text-xs`,children:`A role of your own gets a light and a dark colour — switch above to set each. Designs use it by name; the library's components do not know it.`})]})]})}function tx(){let e=W(e=>e.themeName),t=W(e=>e.themeVersion),[n,r]=(0,P.useState)([]),[i,a]=(0,P.useState)(null);(0,P.useEffect)(()=>{let t=!0;return ic.startingPoints(e).then(e=>{t&&(r(e.startingPoints),a(e.active))}).catch(()=>{}),()=>{t=!1}},[e,t]);let o=t=>{ic.applyStartingPoint(e,t).catch(e=>B(e,`Could not apply the starting point`))};return n.length===0?null:(0,H.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,H.jsx)(`div`,{className:`grid grid-cols-2 gap-2`,children:n.map(e=>(0,H.jsx)(Py,{asChild:!0,size:`xs`,variant:`outline`,className:`cursor-pointer flex-nowrap text-left hover:bg-muted/50 aria-pressed:border-primary aria-pressed:bg-muted/50`,children:(0,H.jsxs)(`button`,{type:`button`,"aria-pressed":i===e.id,title:e.note,onClick:()=>o(e.id),children:[(0,H.jsx)(Iy,{children:(0,H.jsx)(`span`,{"aria-hidden":!0,className:`block size-8 border border-black/10`,style:{background:e.primary,borderRadius:e.radius}})}),(0,H.jsxs)(Ly,{className:`min-w-0 gap-0`,children:[(0,H.jsx)(Ry,{className:`text-xs`,children:e.name}),(0,H.jsx)(zy,{className:`truncate text-[10px]`,children:e.note})]})]})},e.id))}),(0,H.jsx)(`p`,{className:`text-[11px] leading-snug text-muted-foreground`,children:`A place to begin, not a framework: each sets a colour, faces and corners, and derives the rest of the palette in light and dark. Change anything afterwards.`})]})}function nx(){let e=W(e=>e.themeName),t=W(e=>e.themeVersion),[n,r]=(0,P.useState)(0);return(0,P.useEffect)(()=>{let t=!0,n=e==="default"?``:`?name=${encodeURIComponent(e)}`;return fetch(`/api/theme/contrast${n}`).then(e=>e.ok?e.json():Promise.reject(Error(`${e.status}`))).then(e=>{t&&r(e.results.filter(e=>e.tier===`Fail`).length)}).catch(()=>{t&&r(0)}),()=>{t=!1}},[e,t]),n}function rx({theme:e,startFirst:t=!1,scheme:n,onSchemeChange:r}){let i=W(e=>e.themeVersion),a=nx();return(0,H.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[t?(0,H.jsxs)(H.Fragment,{children:[(0,H.jsxs)(Fp,{children:[(0,H.jsx)(Ip,{variant:`label`,children:`Start from a direction`}),(0,H.jsx)(tx,{})]}),(0,H.jsxs)(Fp,{children:[(0,H.jsx)(Ip,{variant:`label`,children:`Or from one colour`}),(0,H.jsx)(hb,{})]})]}):null,(0,H.jsxs)(Fp,{children:[(0,H.jsx)(Ip,{variant:`label`,children:`Roles`}),(0,H.jsx)(ex,{theme:e,scheme:n,onSchemeChange:r})]}),t?null:(0,H.jsxs)(Vb,{children:[(0,H.jsx)(Hb,{asChild:!0,children:(0,H.jsxs)(G,{variant:`ghost`,size:`sm`,className:`group w-full justify-start`,children:[`Start over from a direction or a colour`,(0,H.jsx)(Vt,{className:`ml-auto transition-transform group-data-[state=open]:rotate-180`})]})}),(0,H.jsxs)(Ub,{className:`flex flex-col gap-4 pt-2`,children:[(0,H.jsx)(tx,{}),(0,H.jsx)(hb,{})]})]}),(0,H.jsxs)(Vb,{children:[(0,H.jsx)(Hb,{asChild:!0,children:(0,H.jsxs)(G,{variant:`ghost`,size:`sm`,className:`group w-full justify-start`,children:[`Contrast`,(0,H.jsx)(`span`,{className:a>0?`text-xs text-destructive`:`text-xs text-muted-foreground`,children:a>0?`${a} failing`:`all pairs pass`}),(0,H.jsx)(Vt,{className:`ml-auto transition-transform group-data-[state=open]:rotate-180`})]})}),(0,H.jsx)(Ub,{className:`pt-2`,children:(0,H.jsx)(ab,{bumpKey:i})})]})]})}function ix({theme:e,onBrowse:t,baselineOnly:n=!1}){return(0,H.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,H.jsxs)(Fp,{children:[(0,H.jsx)(Ip,{variant:`label`,children:`Faces`}),(0,H.jsx)(Ay,{theme:e,onBrowse:t})]}),(0,H.jsxs)(Fp,{children:[(0,H.jsx)(Ip,{variant:`label`,children:`Rhythm`}),(0,H.jsx)(Lb,{theme:e,baselineOnly:n})]})]})}var ax=[{id:`colour`,label:`Colour`,icon:Wn,ask:`Pick a direction or a colour of your own to start from, then change any role.`},{id:`type`,label:`Type`,icon:Mr,ask:`Choose the faces and the rhythm. The specimen's ladder follows as you go.`},{id:`shape`,label:`Shape`,icon:br,ask:`How round the corners are, everywhere.`},{id:`rules`,label:`Rules`,icon:Cn,ask:`A few rules in plain words. Optional — but they are what your agent and reviews are held to.`}];function ox(e,t){let n=e.typography.fontFamily?.[t??`sans`];return n?Oy(n):`System`}async function sx(){try{await navigator.clipboard.writeText(cy),z({kind:`success`,message:`Prompt copied — paste it to your coding agent.`})}catch{z({kind:`info`,message:`Copy failed — ask your agent to propose a design language.`})}}function cx(){let e=W(e=>e.theme),t=W(e=>e.themeName),n=W(e=>e.languageRules),r=W(e=>e.languageMode),i=W(e=>e.languageBaseline),a=W(e=>e.languageThemeIsNew),o=W(e=>e.folderConfig?.themes.length??1),s=W(e=>e.design?.folderId),c=W(e=>e.refreshTheme),l=W(e=>e.finishLanguage),u=W(e=>e.cancelLanguage),d=W(e=>e.wsConnected),f=W(e=>e.languageScheme),p=W(e=>e.setLanguageScheme),[m,h]=(0,P.useState)(`colour`),[g,_]=(0,P.useState)(0),[v,y]=(0,P.useState)(!1),[b,x]=(0,P.useState)(null),S=nx();if(!e||!n||!i)return(0,H.jsx)(`aside`,{className:`w-[360px] shrink-0 border-r bg-card grid place-items-center`,children:(0,H.jsx)(ih,{size:24,label:`Opening the design language…`,className:`flex-col`})});if(b!==null){let n=e.typography.fontFamily?.[b];return(0,H.jsx)(`aside`,{className:`w-[360px] shrink-0 border-r bg-card flex flex-col min-h-0`,children:(0,H.jsx)(wy,{role:b,current:n?Oy(n):void 0,onBack:()=>x(null),onPick:e=>{x(null),ic.setFonts(t,[jy(b,e)]).catch(e=>{B(e,`Could not set the face`),c()})}})})}let C=JSON.stringify(e)!==JSON.stringify(i.theme)||n.intent!==i.rules.intent||JSON.stringify(n.rules)!==JSON.stringify(i.rules.rules),w=()=>{t==="default"&&dy(s),l().catch(e=>B(e,`Could not close`))},T=()=>{y(!1),u().catch(e=>B(e,`Could not undo the changes`))},E=ax.findIndex(e=>e.id===m),D=ax[E]??ax[0],O=ax[E+1],k=e=>{let t=ax[e];t&&(h(t.id),_(t=>Math.max(t,e)))},A=e.typography.typesets?.default,j=Xy(e.radius.md??e.radius.lg??e.radius.sm),M=n.rules.filter(e=>e.kind===`do`).length,ee={colour:S>0?`${S} text ${S===1?`pair fails`:`pairs fail`} contrast`:`Every text pair passes contrast`,type:`${ox(e,A?.fontHeading??A?.fontBody)} · ${ox(e,A?.fontBody)}`,shape:j===null?`Custom radius`:`${$y(j)} · ${j}px corners`,rules:n.rules.length===0?`None stated`:`${M} do · ${n.rules.length-M} don't`};return(0,H.jsxs)(`aside`,{"data-language-stage":r,className:`w-[360px] shrink-0 border-r bg-card flex flex-col min-h-0`,inert:!d,children:[(0,H.jsxs)(`header`,{className:`flex items-start gap-2.5 border-b p-3`,children:[(0,H.jsx)(`div`,{className:`size-8 grid place-items-center rounded-lg bg-primary/10 text-primary shrink-0`,children:(0,H.jsx)(Er,{className:`size-4`})}),(0,H.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,H.jsx)(`div`,{className:`text-sm font-medium`,children:`Design language`}),t!=="default"||o>1?(0,H.jsx)(U,{variant:`secondary`,className:`my-0.5 max-w-full`,"data-language-theme":t,children:(0,H.jsx)(`span`,{className:`truncate`,children:vy(t)})}):null,(0,H.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:a?`A new theme. Done puts this board on it; Cancel discards it.`:t==="default"&&o<=1?`Changes show at once, on every board. Cancel puts them back.`:`Changes show at once, on the boards that use this theme. Cancel puts them back.`})]}),(0,H.jsx)(G,{variant:`ghost`,size:`sm`,onClick:()=>{C?y(!0):a?T():l()},children:`Cancel`}),r===`review`?(0,H.jsx)(G,{size:`sm`,onClick:w,children:`Done`}):null]}),r===`guided`?(0,H.jsxs)(`div`,{className:`flex flex-col gap-2 border-b p-3`,children:[(0,H.jsx)(H_,{value:m,onValueChange:e=>h(e),children:(0,H.jsx)(W_,{className:`h-8 w-full`,children:ax.map((e,t)=>(0,H.jsx)(G_,{value:e.id,disabled:t>g,className:`text-xs`,children:e.label},e.id))})}),(0,H.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[(0,H.jsxs)(`span`,{className:`font-medium text-foreground`,children:[`Step `,E+1,` of `,ax.length,`.`]}),` `,D?.ask]})]}):(0,H.jsx)(`nav`,{"aria-label":`Design language`,className:`flex flex-col gap-0.5 border-b p-2`,children:ax.map(({id:e,label:t,icon:n})=>(0,H.jsx)(Py,{asChild:!0,size:`xs`,variant:m===e?`muted`:`default`,className:`cursor-pointer text-left hover:bg-muted/50`,children:(0,H.jsxs)(`button`,{type:`button`,"aria-current":m===e?`page`:void 0,onClick:()=>h(e),children:[(0,H.jsx)(Iy,{children:(0,H.jsx)(n,{className:m===e?`size-4 text-primary`:`size-4 text-muted-foreground`})}),(0,H.jsxs)(Ly,{className:`gap-0`,children:[(0,H.jsx)(Ry,{className:`text-[13px]`,children:t}),(0,H.jsx)(zy,{className:`text-[11px]`,children:ee[e]})]}),e===`colour`&&S>0?(0,H.jsx)(By,{children:(0,H.jsx)(jr,{className:`size-3.5 text-destructive`,"aria-label":`Needs attention`})}):null]})},e))}),(0,H.jsx)(`div`,{className:`flex-1 min-h-0 overflow-y-auto scroll-stable`,children:m===`colour`?(0,H.jsx)(`div`,{className:`p-4`,children:(0,H.jsx)(rx,{theme:e,startFirst:r===`guided`,scheme:f,onSchemeChange:p})}):m===`type`?(0,H.jsx)(`div`,{className:`p-4`,children:(0,H.jsx)(ix,{theme:e,onBrowse:x,baselineOnly:!0})}):m===`shape`?(0,H.jsx)(`div`,{className:`p-4`,children:(0,H.jsx)(nb,{theme:e})}):(0,H.jsxs)(H.Fragment,{children:[t==="default"&&o<=1?null:(0,H.jsx)(`p`,{className:`border-b bg-muted/40 px-4 py-2 text-xs text-muted-foreground`,children:`Rules belong to the whole design: every theme is held to the same ones.`}),(0,H.jsx)(qy,{state:n})]})}),r===`guided`?(0,H.jsxs)(`footer`,{className:`flex items-center justify-between gap-2 border-t p-2`,children:[(0,H.jsxs)(G,{variant:`ghost`,size:`sm`,disabled:E===0,onClick:()=>k(E-1),children:[(0,H.jsx)(jt,{}),`Back`]}),O?(0,H.jsxs)(G,{size:`sm`,onClick:()=>k(E+1),children:[`Next: `,O.label,(0,H.jsx)(Mt,{})]}):(0,H.jsx)(G,{size:`sm`,onClick:w,children:`Done`})]}):t==="default"?(0,H.jsx)(`footer`,{className:`flex items-center gap-2 border-t p-2`,children:(0,H.jsxs)(G,{variant:`ghost`,size:`xs`,onClick:()=>void sx(),children:[(0,H.jsx)(Xt,{}),`Copy a prompt to have your agent propose one`]})}):null,(0,H.jsx)(lm,{open:v,title:a?`Discard ${t}?`:`Discard these changes?`,description:a?`The new theme is removed, and the rules go back to how they were.`:`The theme and the rules go back to how they were when you opened the design language.`,confirmLabel:`Discard`,onConfirm:T,onCancel:()=>y(!1)})]})}var lx=1120,ux=320;function dx(){let e=W(e=>e.languageScheme),t=W(e=>e.setLanguageScheme),n=W(e=>!!e.theme?.colorsDark),r=W(e=>e.languageBaseline!==null),[i,a]=(0,P.useState)(!1),o=i?`both`:e;return(0,H.jsxs)(`div`,{className:`flex-1 min-w-0 flex flex-col`,children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-3 border-b bg-card px-4 py-2`,children:[(0,H.jsx)(`span`,{className:`text-xs font-medium`,children:`Specimen`}),(0,H.jsx)(`span`,{className:`min-w-0 truncate text-xs text-muted-foreground`,children:`This design's own components, drawn with the language as it stands. Read-only.`}),(0,H.jsxs)(Zp,{type:`single`,variant:`outline`,size:`sm`,className:`ml-auto`,value:o,onValueChange:e=>{e===`both`?a(!0):(e===`light`||e===`dark`)&&(a(!1),t(e))},children:[(0,H.jsx)(Qp,{value:`light`,className:`text-xs`,children:`Light`}),(0,H.jsx)(Qp,{value:`dark`,className:`text-xs`,children:`Dark`}),(0,H.jsx)(Qp,{value:`both`,className:`text-xs`,children:`Both`})]})]}),!n&&o!==`light`?(0,H.jsx)(`p`,{className:`border-b bg-muted/40 px-4 py-1.5 text-xs text-muted-foreground`,children:`This theme has no dark palette yet, so dark renders as light. A starting point or a seed colour gives it one.`}):null,(0,H.jsx)(`div`,{className:`flex-1 min-h-0 flex gap-4 overflow-x-auto p-4`,children:r?(i?[`light`,`dark`]:[e]).map(e=>(0,H.jsx)(fx,{scheme:e},e)):(0,H.jsx)(`div`,{className:`relative flex-1 rounded-md bg-white ring-1 ring-border`,style:{minWidth:ux},children:(0,H.jsx)(oh,{})})})]})}function fx({scheme:e}){let t=W(e=>e.themeVersion),n=Fs(e,t,W(e=>e.languageTheme)),r=(0,P.useRef)(null),{srcs:i,front:a,painted:o,slotRefs:s,settleSlot:c}=Pm(n,r);$m({slotRefs:s,front:a,screenRev:t,hasScreen:!0,frontIsCurrent:i[a]===n});let l=(0,P.useRef)(null),[u,d]=(0,P.useState)({w:lx,h:800});(0,P.useEffect)(()=>{let e=l.current;if(!e)return;let t=()=>d({w:e.clientWidth,h:e.clientHeight});t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[]);let f=Math.max(u.w,ux),p=Math.min(1,f/lx);return(0,H.jsxs)(`div`,{ref:l,"data-specimen":e,className:`relative flex-1 overflow-hidden rounded-md bg-white ring-1 ring-border`,style:{minWidth:ux},children:[[0,1].map(t=>i[t]===null?null:(0,H.jsx)(`iframe`,{ref:s[t],title:`Specimen, ${e}${t===a?``:` — loading`}`,src:i[t],"aria-hidden":t!==a||void 0,onLoad:()=>{let e=s[t].current?.contentWindow;e?.addEventListener(`scroll`,()=>{r.current={x:e.scrollX,y:e.scrollY}}),c(t)},className:`absolute left-0 top-0 origin-top-left border-0${t===a?``:` invisible`}`,style:{width:f/p,height:u.h/p,transform:p===1?void 0:`scale(${p})`}},t)),o?null:(0,H.jsx)(oh,{})]})}function px({title:e,hint:t,icon:n,action:r,size:i=`page`}){let a=i===`panel`;return(0,H.jsxs)(Ku,{className:a?`flex-1 p-6`:`flex-1 p-12`,children:[(0,H.jsxs)(qu,{children:[n?(0,H.jsx)(Yu,{variant:`icon`,children:(0,H.jsx)(n,{})}):null,(0,H.jsx)(Xu,{className:a?`text-xs`:`text-base`,children:e}),t?(0,H.jsx)(Zu,{className:a?`text-xs`:void 0,children:t}):null]}),r?(0,H.jsx)(Qu,{children:r}):null]})}function mx(e,t){return L(`/api/preflight?${new URLSearchParams({kind:e,id:t})}`,`preflightExportTarget`).then(e=>e.failures)}function hx(e){return L(`/api/preflight?${new URLSearchParams(e.length>0?{boards:e.join(`,`)}:{})}`,`preflightBoards`).then(e=>e.failures)}function gx(e){return e.componentId===null?`${e.screenName}: ${e.reason}`:`${e.screenName} — ${e.componentId}: ${e.reason}`}function _x({failures:e,verb:t,onCancel:n,onConfirm:r}){let i=e?.length??0,a=new Set(e?.map(e=>e.screenId)).size;return(0,H.jsx)(Cf,{open:e!==null,onOpenChange:e=>!e&&n(),children:(0,H.jsxs)(Ef,{children:[(0,H.jsxs)(Df,{children:[(0,H.jsxs)(Af,{children:[i===1?`A component`:`${i} components`,` failed to render`]}),(0,H.jsxs)(jf,{children:[`On `,a===1?`1 screen`:`${a} screens`,`. Each one appears as a placeholder box in the output, not as the component — whoever opens it will see the error, not the design.`]})]}),(0,H.jsx)(`ul`,{className:`max-h-48 overflow-y-auto scroll-stable rounded-md border bg-muted/30 p-2 text-xs font-mono`,children:e?.map(e=>(0,H.jsx)(`li`,{className:`py-0.5`,children:gx(e)},`${e.screenId}:${e.componentId}`))}),(0,H.jsxs)(Of,{children:[(0,H.jsx)(Nf,{children:`Cancel`}),(0,H.jsxs)(Mf,{onClick:r,children:[t,` anyway`]})]})]})})}function vx(){let e=W(e=>e.exportTarget),t=W(e=>e.setExportTarget),[n,r]=(0,P.useState)(`png`),[i,a]=(0,P.useState)(`light`),[o,s]=(0,P.useState)(`1`),[c,l]=(0,P.useState)(!1),[u,d]=(0,P.useState)(null);(0,P.useEffect)(()=>{e&&(r(`png`),a(`light`),s(`1`),l(!1),d(null))},[e]);let f=e?.kind===`frame`&&n===`png`,p=i===`compare`&&!f?`light`:i,m=async()=>{if(e)try{let r=await Ls({kind:e.kind,id:e.id,format:n,mode:p,...n===`png`?{scale:Number(o)}:{}});for(let e of r)z({kind:`info`,message:e});t(null)}catch(e){B(e,`Export failed`),l(!1)}},h=async()=>{if(!e||c)return;l(!0);let t=await mx(e.kind,e.id).catch(()=>[]);if(t.length>0){d(t);return}await m()};return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(_x,{failures:u,verb:`Export`,onCancel:()=>{d(null),l(!1)},onConfirm:()=>{d(null),m()}}),(0,H.jsx)(ud,{open:e!==null,onOpenChange:e=>!e&&t(null),children:(0,H.jsxs)(pd,{className:`sm:max-w-sm`,children:[(0,H.jsxs)(md,{children:[(0,H.jsxs)(gd,{children:[`Export `,e?.kind===`board`?`board`:`frame`]}),(0,H.jsx)(_d,{className:`truncate`,children:e?.name})]}),(0,H.jsxs)(`div`,{className:`grid gap-4`,children:[(0,H.jsxs)(`div`,{className:`grid gap-2`,children:[(0,H.jsx)(K,{htmlFor:`export-format`,children:`Format`}),(0,H.jsxs)(q,{value:n,onValueChange:e=>{r(e),e!==`png`&&i===`compare`&&a(`light`)},children:[(0,H.jsx)(Y,{id:`export-format`,children:(0,H.jsx)(J,{})}),(0,H.jsxs)(vd,{children:[(0,H.jsx)(X,{value:`png`,children:`PNG image`}),(0,H.jsx)(X,{value:`pdf`,children:e?.kind===`board`?`PDF deck (one frame per page)`:`PDF (single page)`}),(0,H.jsx)(X,{value:`html`,children:`Standalone HTML (self-contained)`})]})]})]}),(0,H.jsxs)(`div`,{className:`grid gap-2`,children:[(0,H.jsx)(K,{htmlFor:`export-mode`,children:`Mode`}),(0,H.jsxs)(q,{value:p,onValueChange:e=>a(e),children:[(0,H.jsx)(Y,{id:`export-mode`,children:(0,H.jsx)(J,{})}),(0,H.jsxs)(vd,{children:[(0,H.jsx)(X,{value:`light`,children:`Light`}),(0,H.jsx)(X,{value:`dark`,children:`Dark`}),f?(0,H.jsx)(X,{value:`compare`,children:`Compare (light | dark)`}):null]})]})]}),n===`png`?(0,H.jsxs)(`div`,{className:`grid gap-2`,children:[(0,H.jsx)(K,{htmlFor:`export-scale`,children:`Scale`}),(0,H.jsxs)(q,{value:o,onValueChange:e=>s(e),children:[(0,H.jsx)(Y,{id:`export-scale`,children:(0,H.jsx)(J,{})}),(0,H.jsxs)(vd,{children:[(0,H.jsx)(X,{value:`1`,children:`1× (CSS pixels)`}),(0,H.jsx)(X,{value:`2`,children:`2× (retina)`})]})]})]}):null]}),(0,H.jsxs)(hd,{children:[(0,H.jsx)(G,{variant:`outline`,onClick:()=>t(null),disabled:c,children:`Cancel`}),(0,H.jsxs)(G,{onClick:()=>void h(),disabled:c,children:[(0,H.jsx)(Qt,{}),c?`Exporting…`:`Export`]})]})]})})]})}function yx({className:e,...t}){return(0,H.jsx)(Tn,{"data-slot":`spinner`,role:`status`,"aria-label":`Loading`,className:V(`size-4 animate-spin`,e),...t})}function bx({className:e,size:t=`default`,...n}){return(0,H.jsx)(Fe,{"data-slot":`switch`,"data-size":t,className:V(`peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-all outline-none group-has-[:focus-visible]/field-label:border-transparent group-has-[:focus-visible]/field-label:ring-0 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50`,e),...n,children:(0,H.jsx)($e,{"data-slot":`switch-thumb`,className:`pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 dark:data-unchecked:bg-foreground`})})}var xx=6e3,Sx={bug:`What happened, and what did you expect instead? Steps to reproduce help most.`,feedback:`What's working, what isn't, what you wish velloo did…`};function Cx(){let e=W(e=>e.feedbackOpen),t=W(e=>e.setFeedbackOpen),n=W(e=>e.authStatus),r=W(e=>e.openSignIn),i=W(e=>e.signInPrompt),a=(0,P.useRef)(!1),[o,s]=(0,P.useState)(`bug`),[c,l]=(0,P.useState)(``),[u,d]=(0,P.useState)(!0),[f,p]=(0,P.useState)(!1),m=(0,P.useId)(),h=(0,P.useId)();(0,P.useEffect)(()=>{e&&W.getState().refreshAuth()},[e]),(0,P.useEffect)(()=>{let{feedbackOpen:e,setFeedbackOpen:t}=W.getState();i&&e?(a.current=!0,t(!1)):!i&&a.current&&(a.current=!1,t(!0))},[i]);let g=!!n?.loggedIn&&n?.verified===!1,_=!!n?.loggedIn&&!g,v=n?.account?.email,y=c.trim(),b=_&&y.length>0&&!f,x=async()=>{if(b){p(!0);try{z({kind:`success`,message:await Bs({kind:o,body:y,anonymous:u})}),l(``),t(!1)}catch(e){B(e,o===`bug`?`Could not send the bug report`:`Could not send feedback`)}finally{p(!1)}}};return(0,H.jsx)(ud,{open:e,onOpenChange:e=>!f&&t(e),children:(0,H.jsxs)(pd,{className:`sm:max-w-md`,"data-testid":`feedback-dialog`,children:[(0,H.jsxs)(md,{children:[(0,H.jsx)(gd,{children:`Report a bug or send feedback`}),(0,H.jsx)(_d,{children:`Goes straight to the velloo team. Leave out anything confidential — nothing from your designs is attached.`})]}),_?null:(0,H.jsxs)(Hy,{"data-testid":`feedback-sign-in`,children:[(0,H.jsx)(On,{}),(0,H.jsx)(Uy,{children:g?`Sign in again to send`:`Sign in to send`}),(0,H.jsxs)(Wy,{children:[(0,H.jsx)(`p`,{children:`Feedback needs a velloo cloud account — even anonymous feedback, which is vouched for by your sign-in without naming you.`}),(0,H.jsx)(G,{size:`sm`,variant:`outline`,className:`mt-2`,onClick:()=>r({action:`send your feedback`,...g&&{expired:!0}}),children:g?`Sign in again…`:`Sign in to velloo cloud…`})]})]}),(0,H.jsxs)(`form`,{className:`grid gap-4`,onSubmit:e=>{e.preventDefault(),x()},children:[(0,H.jsxs)(Lp,{className:`gap-4`,children:[(0,H.jsxs)(Zp,{type:`single`,variant:`outline`,size:`sm`,spacing:0,value:o,onValueChange:e=>e&&s(e),className:`w-full`,"aria-label":`What are you sending?`,children:[(0,H.jsxs)(Qp,{value:`bug`,className:`flex-1`,"data-testid":`feedback-kind-bug`,children:[(0,H.jsx)(zt,{}),` Bug`]}),(0,H.jsxs)(Qp,{value:`feedback`,className:`flex-1`,"data-testid":`feedback-kind-feedback`,children:[(0,H.jsx)(Fn,{}),` Feedback`]})]}),(0,H.jsxs)(zp,{children:[(0,H.jsx)(Vp,{htmlFor:m,className:`sr-only`,children:o===`bug`?`Describe the bug`:`Your feedback`}),(0,H.jsx)(Lf,{id:m,value:c,onChange:e=>l(e.target.value),maxLength:xx,placeholder:Sx[o],className:`min-h-32`,autoFocus:!0}),(0,H.jsxs)(Hp,{className:`text-right text-[11px] tabular-nums`,children:[c.length.toLocaleString(),` / `,xx.toLocaleString()]})]}),(0,H.jsxs)(zp,{orientation:`horizontal`,children:[(0,H.jsxs)(Bp,{children:[(0,H.jsx)(Vp,{htmlFor:h,children:`Send anonymously`}),(0,H.jsx)(Hp,{"data-testid":`feedback-anonymous-help`,children:u?`Anonymous feedback can't be linked to your account, so we can't reply to it.`:`Sent from your account${v?` (${v})`:``}, so we can follow up with you.`})]}),(0,H.jsx)(bx,{id:h,checked:u,onCheckedChange:d,"data-testid":`feedback-anonymous`})]})]}),(0,H.jsxs)(hd,{children:[(0,H.jsx)(G,{type:`button`,variant:`outline`,disabled:f,onClick:()=>t(!1),children:`Cancel`}),(0,H.jsxs)(G,{type:`submit`,disabled:!b,"data-testid":`feedback-send`,children:[f?(0,H.jsx)(yx,{}):null,f?`Sending…`:`Send`]})]})]})]})})}var wx=10;function Tx(e){if(!e)return`date unknown`;let t=Date.parse(e);if(!Number.isFinite(t))return`date unknown`;let n=Math.floor((Date.now()-t)/864e5);return n<=0?`today`:n===1?`yesterday`:n<30?`${n} days ago`:new Date(t).toLocaleDateString(void 0,{month:`short`,day:`numeric`})}function Ex(e){if(!e)return null;try{return new URL(`/boards`,e).href}catch{return null}}function Dx(e){return e.passwordProtected?{icon:mr,text:`Password protected`}:e.visibility===`private`?{icon:Dn,text:e.onlyTeam?`Only ${e.onlyTeam}`:`Your organization`}:{icon:En,text:`Anyone with the link`}}function Ox(){let e=W(e=>e.publishedBoardsOpen),t=W(e=>e.setPublishedBoardsOpen),n=W(e=>e.openGuests),r=Ex(W(e=>e.authStatus?.appUrl)),[i,a]=(0,P.useState)(null),[o,s]=(0,P.useState)(null),[c,l]=(0,P.useState)(!1);(0,P.useEffect)(()=>{if(!e)return;a(null);let n=!1;return(async()=>{try{let e=await qs.published();n||a(e)}catch(e){if(n)return;B(e,`Could not read your published boards`),t(!1)}})(),()=>{n=!0}},[e,t]);let u=async e=>{l(!0);try{await qs.unpublish(e.slug),a(t=>t?.filter(t=>t.slug!==e.slug)??null),W.getState().refreshPublishSlots({force:!0}),z({kind:`success`,message:`Unpublished ${e.title||e.slug} — the link no longer resolves.`}),s(null)}catch(e){B(e,`Could not unpublish that board`)}finally{l(!1)}},d=i?.slice(0,wx)??[];return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(ud,{open:e,onOpenChange:e=>!e&&t(!1),children:(0,H.jsxs)(pd,{className:`sm:max-w-lg`,children:[(0,H.jsxs)(md,{children:[(0,H.jsx)(gd,{children:`Published boards`}),(0,H.jsx)(_d,{children:`Live links on velloo-cloud, newest first. Taking one down stops it resolving and frees the board slot it holds.`})]}),i===null?(0,H.jsxs)(`div`,{className:`flex items-center gap-2 py-6 text-sm text-muted-foreground`,children:[(0,H.jsx)(rh,{size:16}),`Reading velloo-cloud…`]}):d.length===0?(0,H.jsx)(px,{size:`panel`,icon:rn,title:`Nothing published yet`,hint:`Publish a board from its menu in the sidebar to get a share link.`}):(0,H.jsx)(`ul`,{className:`-mx-1 max-h-[22rem] overflow-y-auto px-1`,"data-testid":`published-boards-list`,children:d.map(e=>{let r=Dx(e);return(0,H.jsx)(`li`,{children:(0,H.jsxs)(Py,{variant:`outline`,size:`sm`,className:`mb-1.5`,children:[(0,H.jsxs)(Ly,{className:`min-w-0`,children:[(0,H.jsxs)(Ry,{className:`max-w-full`,children:[(0,H.jsx)(`a`,{href:e.url,target:`_blank`,rel:`noreferrer`,className:`truncate text-inherit no-underline hover:underline`,children:e.title||e.slug}),(0,H.jsx)(en,{size:12,className:`shrink-0 text-muted-foreground`})]}),(0,H.jsxs)(zy,{className:`flex items-center gap-1.5 text-xs`,children:[(0,H.jsx)(r.icon,{size:11,className:`shrink-0`}),r.text,` · `,Tx(e.lastPublishedAt),e.guestCount?` · ${e.guestCount} guest${e.guestCount===1?``:`s`}`:``]})]}),(0,H.jsxs)(By,{children:[(0,H.jsx)(G,{variant:`ghost`,size:`icon-sm`,disabled:!e.canManage,title:e.canManage?`Guests…`:`Only the board's publisher and admins can invite guests`,"aria-label":`Guests on ${e.title||e.slug}`,onClick:()=>{t(!1),n({slug:e.slug,title:e.title||e.slug})},children:(0,H.jsx)(Lr,{})}),(0,H.jsx)(G,{variant:`ghost`,size:`icon-sm`,disabled:!e.canManage,title:e.canManage?`Unpublish this board`:`A teammate published this — only they can take it down`,"aria-label":`Unpublish ${e.title||e.slug}`,onClick:()=>s(e),children:(0,H.jsx)(Ar,{className:e.canManage?`text-destructive`:void 0})})]})]})},e.slug)})}),(0,H.jsxs)(hd,{className:`sm:justify-between`,children:[r?(0,H.jsx)(G,{variant:`ghost`,size:`sm`,asChild:!0,children:(0,H.jsxs)(`a`,{href:r,target:`_blank`,rel:`noreferrer`,"data-testid":`published-boards-all`,children:[(0,H.jsx)(en,{}),i&&i.length>d.length?`See all ${i.length} on velloo-cloud`:`More details on velloo-cloud`]})}):(0,H.jsx)(`span`,{}),(0,H.jsx)(G,{variant:`outline`,onClick:()=>t(!1),children:`Close`})]})]})}),(0,H.jsx)(Cf,{open:o!==null,onOpenChange:e=>!e&&s(null),children:(0,H.jsxs)(Ef,{children:[(0,H.jsxs)(Df,{children:[(0,H.jsxs)(Af,{children:[`Unpublish “`,o?.title||o?.slug,`”?`]}),(0,H.jsx)(jf,{children:`The share link stops resolving for everyone who has it, along with any comments left on it. Your local boards and screens are untouched, and publishing again mints a new link.`})]}),(0,H.jsxs)(Of,{children:[(0,H.jsx)(Nf,{disabled:c,children:`Keep it`}),(0,H.jsx)(Mf,{variant:`destructive`,disabled:c,onClick:e=>{e.preventDefault(),o&&u(o)},children:c?`Unpublishing…`:`Unpublish`})]})]})})]})}var kx=9e5,Ax=`velloo:update-toasted`,jx=new Set;function Mx(){for(let e of jx)e()}function Nx(e){return jx.add(e),()=>jx.delete(e)}var Px={status:null,upgrading:!1};function Fx(e){Px={...Px,...e},Mx()}function Ix(){return(0,P.useSyncExternalStore)(Nx,()=>Px)}async function Lx(e={}){try{Fx({status:await ac(e)})}catch{}}function Rx(e){if(!e)return``;let t=/^(\S+)\s*\((?:.*·\s*)?(.+)\)$/.exec(e);return t?`${t[1]} · ${t[2]}`:e}function zx(e){if(e.available&&e.latest&&e.upgradable){try{if(localStorage.getItem(Ax)===e.latest)return;localStorage.setItem(Ax,e.latest)}catch{}z({kind:`info`,title:`Velloo ${Rx(e.latest)} is available`,message:`You're on ${Rx(e.current)}.`,ttl:1e4,action:{label:`Upgrade`,onClick:()=>void Hx()}})}}var Bx=!1;function Vx(){if(Bx)return;Bx=!0;let e=async e=>{await Lx(e?{refresh:!0}:{}),Px.status&&zx(Px.status)};(async()=>{await e(!1),await e(!0)})(),setInterval(()=>void e(!0),kx)}async function Hx(){if(Px.upgrading)return;Fx({upgrading:!0});let e=z({kind:`info`,message:`Upgrading velloo…`,ttl:6e4});try{let e=await oc();e.upgraded?z({kind:`success`,title:`Upgraded to ${e.to}`,message:"Quit the canvas and run `velloo upgrade` to finish — it migrates this folder.",ttl:15e3}):z({kind:`success`,message:`Velloo ${e.to} is already installed.`}),await Lx({refresh:!0})}catch(e){B(e,`Could not upgrade velloo.`)}finally{sc(e),Fx({upgrading:!1})}}function Ux({className:e,size:t=`default`,...n}){return(0,H.jsx)(le,{"data-slot":`avatar`,"data-size":t,className:V(`group/avatar relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:border-border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6 dark:after:mix-blend-lighten`,e),...n})}function Wx({className:e,...t}){return(0,H.jsx)(Ce,{"data-slot":`avatar-fallback`,className:V(`flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs`,e),...t})}function Gx(e){let t=e.name?.trim().split(/\s+/)[0];if(t)return t;let n=e.email??``;return n.split(`@`)[0]||n}function Kx(e){let t=e.name?.trim().split(/\s+/).filter(Boolean)??[];return t.length>=2?`${t[0]?.[0]??``}${t[t.length-1]?.[0]??``}`.toUpperCase():(t[0]??e.email??``).slice(0,2).toUpperCase()}function qx({account:e,expired:t=!1,compact:n=!1,badge:r,className:i,...a}){return e?(0,H.jsxs)(G,{variant:`ghost`,size:`sm`,className:V(`relative max-w-[12rem] gap-2 pl-1 pr-2.5 text-xs`,i),title:`${e.email??Gx(e)} — account & settings`,...a,children:[(0,H.jsx)(Ux,{"aria-hidden":`true`,className:`size-6`,children:(0,H.jsx)(Wx,{className:`text-[10px] font-semibold `+(t?`bg-muted text-muted-foreground`:`bg-primary text-primary-foreground`),children:Kx(e)})}),(0,H.jsx)(`span`,{className:n?`sr-only`:`truncate`,children:Gx(e)}),r]}):(0,H.jsxs)(G,{variant:`outline`,size:`sm`,className:V(`relative max-w-[12rem] text-xs`,i),title:`Settings & account`,...a,children:[(0,H.jsx)(dr,{}),(0,H.jsx)(`span`,{className:n?`sr-only`:`truncate`,children:`Settings`}),r]})}var Jx={free:`Free`,team:`Team`,business:`Business`,enterprise:`Enterprise`};function Yx(e){return Jx[e]??e}function Xx(e){return`$${(e/1e6).toFixed(2)}`}function Zx(e){if(!e)return null;try{return new URL(`/billing`,e).href}catch{return null}}function Qx(e){if(!e)return null;try{return new URL(`/home`,e).href}catch{return null}}function $x(e){if(!e)return`velloo-cloud`;try{return new URL(e).host}catch{return e}}function eS(){return(0,H.jsx)(`span`,{"aria-hidden":`true`,"data-testid":`settings-update-dot`,className:`absolute -right-0.5 -top-0.5 size-2 rounded-full bg-primary ring-2 ring-background`})}function tS(){let e=W(e=>e.authStatus),t=W(e=>e.openSignIn),n=W(e=>e.setSettingsScope),r=W(e=>e.openLanguage),i=W(e=>e.setPublishedBoardsOpen),a=W(e=>e.setFeedbackOpen),{status:o,upgrading:s}=Ix(),c=!!(o?.available&&o.upgradable),l=()=>{W.getState().refreshAuth(),Lx()};(0,P.useEffect)(l,[]);let u=e?.loggedIn??!1,d=e?.account,f=u&&e?.verified===!1,p=d?.tier?`${Yx(d.tier)} plan`:null,m=d?.tier===`free`?Zx(e?.appUrl):null,h=Qx(e?.appUrl);return(0,H.jsxs)(pm,{onOpenChange:e=>e&&l(),children:[(0,H.jsx)(mm,{asChild:!0,children:(0,H.jsx)(qx,{account:u&&d?d:null,expired:f,badge:c?(0,H.jsx)(eS,{}):null})}),(0,H.jsxs)(hm,{align:`end`,className:`w-64`,children:[(0,H.jsx)(gm,{className:`font-normal`,children:u?(0,H.jsxs)(`span`,{className:`flex flex-col gap-0.5`,children:[(0,H.jsxs)(`span`,{className:`text-[11px] text-muted-foreground`,children:[`Signed in to `,$x(e?.cloudUrl)]}),(0,H.jsx)(`span`,{className:`truncate text-sm`,children:d?.name??d?.email??`Signed in`}),d?.name&&d.email?(0,H.jsx)(`span`,{className:`truncate text-[11px] text-muted-foreground`,children:d.email}):null,p?(0,H.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:p}):null]}):(0,H.jsxs)(`span`,{className:`flex flex-col gap-0.5`,children:[(0,H.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:`Not signed in`}),(0,H.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:`Sign in to publish boards and pull comments.`})]})}),f?(0,H.jsxs)(Hy,{variant:`destructive`,className:`mb-1 gap-1.5 border-0 bg-transparent px-2 py-0`,children:[(0,H.jsx)(jr,{size:12,className:`mt-px shrink-0`}),(0,H.jsx)(Wy,{className:`text-[11px] text-destructive`,children:`This credential expired — sign in again.`})]}):null,u?(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(_m,{}),(0,H.jsxs)(`div`,{className:`flex items-center justify-between gap-2 px-2 py-1.5 text-xs`,"data-testid":`settings-credits`,children:[(0,H.jsxs)(`span`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,H.jsx)(Jt,{size:14,className:`shrink-0`}),`Credits`]}),typeof d?.creditMicros==`number`?(0,H.jsx)(`span`,{className:`font-medium tabular-nums`,children:Xx(d.creditMicros)}):(0,H.jsx)(`span`,{className:`text-muted-foreground`,title:d?.creditMicros===null?`velloo-cloud couldn't read the balance just now.`:`This velloo-cloud doesn't report a credit balance.`,children:`—`})]}),m?(0,H.jsx)(Q,{asChild:!0,children:(0,H.jsxs)(`a`,{href:m,target:`_blank`,rel:`noreferrer`,className:`text-inherit no-underline`,"data-testid":`settings-upgrade`,children:[(0,H.jsx)(_r,{className:`text-primary`}),`Upgrade plan`,(0,H.jsx)(`span`,{className:`ml-auto text-[10px] text-muted-foreground`,children:`Free`})]})}):null]}):null,(0,H.jsx)(_m,{}),(0,H.jsxs)(Q,{onSelect:()=>n(`design`),children:[(0,H.jsx)(hr,{}),`Settings…`]}),(0,H.jsxs)(Q,{onSelect:()=>void r(`review`).catch(e=>B(e,`Could not open the design language`)),children:[(0,H.jsx)(Er,{}),`Design language`]}),u?(0,H.jsxs)(Q,{"data-testid":`settings-published-boards`,onSelect:()=>i(!0),children:[(0,H.jsx)(rn,{}),`Published boards…`]}):null,u&&h?(0,H.jsx)(Q,{asChild:!0,children:(0,H.jsxs)(`a`,{href:h,target:`_blank`,rel:`noreferrer`,className:`text-inherit no-underline`,"data-testid":`settings-open-cloud`,children:[(0,H.jsx)(en,{}),`Open Velloo Cloud`]})}):null,c?(0,H.jsxs)(H.Fragment,{children:[(0,H.jsxs)(Q,{disabled:s,"data-testid":`settings-upgrade-velloo`,title:`You're on ${o?.current}`,onSelect:e=>{e.preventDefault(),Hx()},children:[(0,H.jsx)(Wt,{className:`text-primary`}),s?`Updating velloo…`:`Update velloo`]}),(0,H.jsx)(`div`,{className:`truncate px-2 pb-1 pl-8 text-[11px] text-muted-foreground`,children:Rx(o?.latest)})]}):null,(0,H.jsxs)(Q,{"data-testid":`settings-feedback`,onSelect:()=>a(!0),title:u&&!f?void 0:`Sending feedback needs a velloo cloud account — you can sign in from the dialog.`,children:[(0,H.jsx)(zt,{}),`Send feedback…`]}),(0,H.jsx)(_m,{}),u&&!f?(0,H.jsxs)(Q,{onSelect:async()=>{try{await bs.logout(),await W.getState().refreshAuth(),z({kind:`success`,message:`Signed out of velloo-cloud.`})}catch(e){B(e,`Could not sign out.`)}},children:[(0,H.jsx)(kn,{}),`Log out`]}):(0,H.jsxs)(Q,{onSelect:()=>t(f?{expired:!0}:{}),children:[(0,H.jsx)(On,{}),f?`Sign in again…`:`Sign in to velloo-cloud…`]})]})]})}var nS=e=>e.name||e.email||`this guest`;function rS(){let e=W(e=>e.guestsBoard),t=W(e=>e.openGuests),n=W(e=>Xr(e.authStatus?.account?.tier)),r=W(e=>Zx(e.authStatus?.appUrl)),[i,a]=(0,P.useState)(null),[o,s]=(0,P.useState)(``),[c,l]=(0,P.useState)(``),[u,d]=(0,P.useState)(!1),[f,p]=(0,P.useState)(null),[m,h]=(0,P.useState)(null),g=e?.slug??null;(0,P.useEffect)(()=>{if(!g)return;a(null),s(``),l(``),p(null),h(null);let e=!1;return qs.guests.list(g).then(t=>{e||a(t)}).catch(t=>{e||(B(t,`Could not read this board's guests`),a([]))}),()=>{e=!0}},[g]);let _=()=>t(null),v=e=>a(t=>[...(t??[]).filter(t=>t.id!==e.id),e]),y=(e,t)=>{if(v(e.guest),e.emailed||!e.guestUrl){z({kind:`success`,message:t}),p(null);return}p({who:nS(e.guest),url:e.guestUrl,note:`Email isn't available here${e.reason?` (${e.reason})`:``}, so send this link yourself.`})},b=async e=>{if(e.preventDefault(),g&&o.trim()){d(!0);try{let e=await qs.guests.invite(g,{email:o.trim(),...c.trim()?{name:c.trim()}:{}});y(e,`Invited ${nS(e.guest)} — they'll get an email with their link.`),s(``),l(``)}catch(e){B(e,`Could not invite that guest`)}finally{d(!1)}}},x=async e=>{if(g)try{let t=await qs.guests.resend(g,e.id);y(t,`Emailed ${nS(e)} a new link — the one they had stops working.`)}catch(e){B(e,`Could not resend that guest's link`)}},S=async e=>{if(g)try{let t=await qs.guests.link(g,e.id);p({who:nS(e),url:t,note:`The link they had before no longer works.`}),await iS(t,`New guest link copied — the one they had before no longer works.`)}catch(e){B(e,`Could not make a new link for that guest`)}},C=async e=>{if(g){h(null);try{await qs.guests.remove(g,e.id),a(t=>t?.filter(t=>t.id!==e.id)??null),f?.who===nS(e)&&p(null),z({kind:`success`,message:`${nS(e)} can no longer open this board.`})}catch(e){B(e,`Could not remove that guest`)}}};return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(ud,{open:e!==null,onOpenChange:e=>!e&&_(),children:(0,H.jsxs)(pd,{className:`sm:max-w-md`,children:[(0,H.jsxs)(md,{children:[(0,H.jsxs)(gd,{children:[`Guests on “`,e?.title,`”`]}),(0,H.jsx)(_d,{children:`People outside your organization who can open this board, and only this board, through a personal link. They don't need an account.`})]}),n?null:(0,H.jsxs)(Hy,{role:`note`,"data-testid":`guests-upsell`,children:[(0,H.jsx)(Dn,{}),(0,H.jsx)(Uy,{children:`Invite guests`}),(0,H.jsx)(Wy,{className:`text-xs`,children:`Share a board with people outside your organization by email. Upgrade your plan to invite guests.`}),r&&(0,H.jsx)(Gy,{children:(0,H.jsx)(G,{size:`xs`,variant:`secondary`,asChild:!0,children:(0,H.jsx)(`a`,{href:r,target:`_blank`,rel:`noreferrer`,children:`Upgrade`})})})]}),(0,H.jsxs)(`form`,{className:`grid gap-2`,onSubmit:e=>void b(e),children:[(0,H.jsxs)(`div`,{className:`grid grid-cols-[1fr_auto] gap-2 sm:grid-cols-[3fr_2fr]`,children:[(0,H.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,H.jsx)(K,{htmlFor:`guest-email`,children:`Email`}),(0,H.jsx)(Z,{id:`guest-email`,type:`email`,autoComplete:`off`,placeholder:`name@company.com`,value:o,disabled:!n||u,onChange:e=>s(e.target.value)})]}),(0,H.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,H.jsx)(K,{htmlFor:`guest-name`,children:`Name (optional)`}),(0,H.jsx)(Z,{id:`guest-name`,autoComplete:`off`,value:c,disabled:!n||u,onChange:e=>l(e.target.value)})]})]}),(0,H.jsxs)(G,{type:`submit`,size:`sm`,className:`justify-self-start`,disabled:!n||u||!o.trim(),children:[(0,H.jsx)(Fr,{}),u?`Inviting…`:`Invite`]})]}),f?(0,H.jsxs)(`div`,{className:`grid gap-1.5 rounded-md border bg-muted/40 p-2`,"data-testid":`guest-handover`,children:[(0,H.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Link for `,f.who,`. `,f.note]}),(0,H.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,H.jsx)(Z,{readOnly:!0,value:f.url,className:`font-mono text-xs`}),(0,H.jsx)(G,{variant:`outline`,size:`icon-sm`,title:`Copy link`,"aria-label":`Copy guest link`,onClick:()=>void iS(f.url,`Guest link copied.`),children:(0,H.jsx)(Xt,{})})]})]}):null,i===null?(0,H.jsxs)(`div`,{className:`flex items-center gap-2 py-4 text-sm text-muted-foreground`,children:[(0,H.jsx)(rh,{size:16}),`Reading guests…`]}):i.length===0?(0,H.jsx)(px,{size:`panel`,icon:Lr,title:`No guests yet`,hint:`Invite someone by email and they'll get a link to this board.`}):(0,H.jsx)(`ul`,{className:`-mx-1 max-h-64 overflow-y-auto px-1`,"data-testid":`guests-list`,children:i.map(e=>(0,H.jsx)(`li`,{children:(0,H.jsxs)(Py,{variant:`outline`,size:`sm`,className:`mb-1.5`,children:[(0,H.jsxs)(Ly,{className:`min-w-0`,children:[(0,H.jsx)(Ry,{className:`max-w-full truncate`,children:nS(e)}),(0,H.jsxs)(zy,{className:`truncate text-xs`,children:[e.name&&e.email?`${e.email} · `:``,e.lastSeenAt?`Last opened ${Tx(e.lastSeenAt)}`:`Not opened yet`]})]}),(0,H.jsx)(By,{children:(0,H.jsxs)(pm,{children:[(0,H.jsx)(mm,{asChild:!0,children:(0,H.jsx)(G,{variant:`ghost`,size:`icon-sm`,"aria-label":`Actions for ${nS(e)}`,children:(0,H.jsx)($t,{})})}),(0,H.jsxs)(hm,{align:`end`,children:[(0,H.jsxs)(Q,{disabled:!n,onSelect:()=>void S(e),title:`Makes a new link — the one they had stops working`,children:[(0,H.jsx)(Sn,{}),`Copy a new link`]}),(0,H.jsxs)(Q,{disabled:!n,onSelect:()=>void x(e),title:`Emails a new link — the one they had stops working`,children:[(0,H.jsx)(An,{}),`Email a new link`]}),(0,H.jsx)(_m,{}),(0,H.jsxs)(Q,{variant:`destructive`,onSelect:()=>h(e),children:[(0,H.jsx)(Ar,{}),`Remove`]})]})]})})]})},e.id))}),(0,H.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`A new link, copied or emailed, replaces the one the guest had.`}),(0,H.jsx)(hd,{children:(0,H.jsx)(G,{variant:`outline`,onClick:_,children:`Done`})})]})}),(0,H.jsx)(lm,{open:m!==null,title:`Remove ${m?nS(m):`this guest`}?`,description:`Their link stops working right away. You can invite them again later.`,confirmLabel:`Remove`,onConfirm:()=>{m&&C(m)},onCancel:()=>h(null)})]})}async function iS(e,t){try{await navigator.clipboard.writeText(e),z({kind:`success`,message:t})}catch{}}var aS=[{id:`actions`,label:`Actions`},{id:`forms`,label:`Forms & Inputs`},{id:`display`,label:`Display`},{id:`feedback`,label:`Feedback`},{id:`navigation`,label:`Navigation`},{id:`overlays`,label:`Overlays`},{id:`layout`,label:`Layout`},{id:`typography`,label:`Typography`},{id:`visuals`,label:`Visuals`},{id:`chat`,label:`Chat & AI`}];function oS(e){return aS.find(t=>t.id===e)?.label??`Components`}function sS(e){return e.family===void 0||e.family===e.id}var cS=`other`;function lS(e){if(!e||e.length===0)return[];let t=new Map;for(let n of e){if(!sS(n))continue;let e=n.group??cS;t.set(e,[...t.get(e)??[],n.id])}let n=[...aS.map(e=>e.id),cS];return[...t.entries()].sort(([e],[t])=>n.indexOf(e)-n.indexOf(t)).map(([e,t])=>({id:e,label:oS(e===cS?void 0:e),components:[...t].sort((e,t)=>e.localeCompare(t))}))}function uS(e,t){let n=e?.find(e=>e.id===t);return n?oS(n.group):null}function dS(e){return e.default===void 0?null:typeof e.default==`string`?`"${e.default}"`:typeof e.default==`number`||typeof e.default==`boolean`?String(e.default):`…`}var fS={exact:`border-emerald-500/40 text-emerald-700 dark:text-emerald-400`,adapted:`border-primary/40 text-primary`,"server-rendered":`border-primary/40 text-primary`,unstyled:`border-amber-500/40 text-amber-700 dark:text-amber-400`,proxy:`border-amber-500/40 text-amber-700 dark:text-amber-400`,unchecked:`border-muted-foreground/40 text-muted-foreground`,unavailable:`border-destructive/40 text-destructive`,fallback:`border-destructive/40 text-destructive`},pS={exact:`Renders the app's real component.`,adapted:`Renders through a canvas-safe adaptation.`,"server-rendered":`Rendered on the server, not mounted in the browser.`,unstyled:`Renders without the app's styles.`,proxy:`A proxy snippet stands in for it.`,unchecked:`How this renders has not been established.`,unavailable:`Can't render in the canvas — a labelled fallback stands in.`,fallback:`A fallback stands in for it.`};function mS({diagnostic:e,className:t}){if(!e)return null;let n=e.status;if(n===`exact`&&!e.observed)return null;let r=fS[n]??`text-muted-foreground`,i=pS[n]??n;return(0,H.jsx)(U,{variant:`outline`,"data-fidelity":n,className:`px-1.5 py-0 text-[10px] font-normal ${r} ${t??``}`,title:e.note?`${i} ${e.note}`:i,children:n})}function hS(e,t=!0){_S(e,t,W(e=>e.loadRepoStatus))}function gS(e,t,n=!0){let r=W(e=>e.loadLibraryStatus);_S(t,n,(0,P.useCallback)(t=>r(e,t),[r,e]))}function _S(e,t,n){let r=t?e.join(`,`):``;(0,P.useEffect)(()=>{if(!r)return;let e=setTimeout(()=>void n(r.split(`,`)),250);return()=>clearTimeout(e)},[r,n])}function vS({className:e,...t}){return(0,H.jsx)(`nav`,{"aria-label":`breadcrumb`,"data-slot":`breadcrumb`,className:V(e),...t})}function yS({className:e,...t}){return(0,H.jsx)(`ol`,{"data-slot":`breadcrumb-list`,className:V(`flex flex-wrap items-center gap-1.5 text-sm wrap-break-word text-muted-foreground`,e),...t})}function bS({className:e,...t}){return(0,H.jsx)(`li`,{"data-slot":`breadcrumb-item`,className:V(`inline-flex items-center gap-1`,e),...t})}function xS({asChild:e,className:t,...n}){let r=e?ht:`a`;return(0,H.jsx)(r,{"data-slot":`breadcrumb-link`,className:V(`transition-colors hover:text-foreground`,t),...n})}function SS({className:e,...t}){return(0,H.jsx)(`span`,{"data-slot":`breadcrumb-page`,role:`link`,"aria-disabled":`true`,"aria-current":`page`,className:V(`font-normal text-foreground`,e),...t})}function CS({children:e,className:t,...n}){return(0,H.jsx)(`li`,{"data-slot":`breadcrumb-separator`,role:`presentation`,"aria-hidden":`true`,className:V(`[&>svg]:size-3.5`,t),...n,children:e??(0,H.jsx)(Ht,{className:`cn-rtl-flip`})})}function wS({category:e,name:t}){return(0,H.jsx)(vS,{children:(0,H.jsxs)(yS,{className:`text-xs`,children:[(0,H.jsxs)(bS,{children:[(0,H.jsx)(bn,{size:12,strokeWidth:2}),(0,H.jsx)(xS,{href:`#`,children:`Library`})]}),(0,H.jsx)(CS,{}),(0,H.jsx)(bS,{children:(0,H.jsx)(`span`,{children:e})}),(0,H.jsx)(CS,{}),(0,H.jsx)(bS,{children:(0,H.jsx)(SS,{children:t})})]})})}function TS({onClick:e}){return(0,H.jsxs)(G,{variant:`ghost`,size:`sm`,onClick:e,className:`-ml-2 text-muted-foreground`,children:[(0,H.jsx)(jt,{}),`Library`]})}function ES({entry:e,diagnostic:t,previewLabel:n}){let[r,i]=(0,P.useState)(!1),a=OS(e,t,n);return(0,H.jsxs)(`div`,{className:`rounded-md border border-dashed px-4 py-3 flex flex-col gap-2`,children:[(0,H.jsxs)(`p`,{className:`text-sm`,children:[`Your agent can fix this: ask it to set up the design's`,` `,(0,H.jsx)(`span`,{className:`font-medium`,children:`preview entry`}),` — the file that gives the canvas the providers and styles your app's own entry gives its components.`]}),(0,H.jsxs)(Vb,{open:r,onOpenChange:i,children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,H.jsx)(Hb,{asChild:!0,children:(0,H.jsxs)(G,{size:`xs`,variant:`ghost`,className:`px-1.5 -ml-1.5`,children:[(0,H.jsx)(Ht,{className:`transition-transform ${r?`rotate-90`:``}`}),r?`Hide the prompt`:`See the prompt`]})}),(0,H.jsxs)(G,{size:`xs`,variant:`outline`,onClick:()=>void DS(a),children:[(0,H.jsx)(Xt,{}),`Copy prompt`]})]}),(0,H.jsx)(Ub,{children:(0,H.jsx)(`pre`,{className:`mt-2 whitespace-pre-wrap rounded-md bg-muted/60 p-3 text-xs leading-relaxed font-mono`,children:a})})]})]})}async function DS(e){try{await navigator.clipboard.writeText(e),z({kind:`success`,message:`Prompt copied.`})}catch{z({kind:`info`,message:`Copy failed — select the prompt text instead.`})}}function OS(e,t,n){let r=[t.note,t.remedy].filter(Boolean).join(` `),i=(e.dataSources??[]).map(e=>e.name).join(`, `);return[`In Velloo, ${e.id} (from ${e.identity.importPath}) doesn't render on the canvas:`,`${t.status}${t.code?` (${t.code})`:``}. ${r}`.trim(),``,n?`The design's preview entry is currently: ${n}.`:`The design has no preview entry yet.`,``,...i?[`It reads its own data through ${i}, so the preview has to supply that too.`,``]:[],`Please run preview_status to see what the app's components need, then write the`,`preview entry with set_preview_entry: import the app's global stylesheet and wrap`,`children in the providers the app's own entry uses (theme, i18n, query client, …),`,`with fixtures instead of network calls. Re-run preview_status, and check`,`component_status for ${e.id} to confirm it renders.`].join(`
31
+ `)}function kS({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`table-container`,className:`relative w-full overflow-x-auto`,children:(0,H.jsx)(`table`,{"data-slot":`table`,className:V(`w-full caption-bottom text-sm`,e),...t})})}function AS({className:e,...t}){return(0,H.jsx)(`thead`,{"data-slot":`table-header`,className:V(`[&_tr]:border-b`,e),...t})}function jS({className:e,...t}){return(0,H.jsx)(`tbody`,{"data-slot":`table-body`,className:V(`[&_tr:last-child]:border-0`,e),...t})}function MS({className:e,...t}){return(0,H.jsx)(`tr`,{"data-slot":`table-row`,className:V(`border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted`,e),...t})}function NS({className:e,...t}){return(0,H.jsx)(`th`,{"data-slot":`table-head`,className:V(`h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0`,e),...t})}function PS({className:e,...t}){return(0,H.jsx)(`td`,{"data-slot":`table-cell`,className:V(`p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0`,e),...t})}var FS=`text-[10px] uppercase tracking-wider text-muted-foreground font-medium`;async function IS(e){try{await navigator.clipboard.writeText(e),z({kind:`success`,message:`Import copied.`})}catch{z({kind:`info`,message:e})}}function LS({id:e}){let t=W(e=>e.repoCatalog),n=W(e=>e.repoStatus),r=W(e=>e.themeVersion),i=W(e=>e.designMode===`dark`),a=W(e=>e.openLibrary),o=W(e=>e.refreshRepoStatus),s=t?.entries.find(t=>t.id===e)??null,c=(0,P.useMemo)(()=>s?(t?.entries??[]).filter(e=>e.id!==s.id&&e.identity.member!==void 0&&e.identity.importPath===s.identity.importPath&&e.identity.exportName===s.identity.exportName&&e.identity.app===s.identity.app):[],[t,s]);if(hS(s?[s.id]:[]),!t)return null;if(!s)return(0,H.jsxs)(`div`,{className:`flex-1 flex flex-col bg-background`,children:[(0,H.jsx)(`div`,{className:`px-8 pt-4`,children:(0,H.jsx)(TS,{onClick:()=>a(null)})}),(0,H.jsx)(px,{icon:lr,title:`${e} isn't in the repo catalog`,hint:`The app may no longer use it, or discovery hasn't seen it yet.`})]});let l=n[s.id],u=s.source===`local`?`This app`:s.packageName??s.identity.importPath,d=$s(s),f=s.states.length>0?s.states:[null];return(0,H.jsx)(`div`,{className:`flex-1 overflow-auto bg-background`,"data-repo-detail":s.id,children:(0,H.jsxs)(`div`,{className:`mx-auto w-full max-w-5xl flex flex-col`,children:[(0,H.jsxs)(`header`,{className:`sticky top-0 z-10 bg-background/85 backdrop-blur-sm border-b px-8 pt-4 pb-5`,children:[(0,H.jsx)(TS,{onClick:()=>a(null)}),(0,H.jsx)(`div`,{className:`mt-3`,children:(0,H.jsx)(wS,{category:`Repo · ${u}`,name:s.id})}),(0,H.jsxs)(`div`,{className:`mt-2 flex items-baseline gap-2.5 flex-wrap`,children:[(0,H.jsx)(`h1`,{className:`text-3xl font-semibold tracking-tight`,children:s.id}),(0,H.jsx)(U,{variant:`outline`,className:`text-[10px] font-mono uppercase tracking-wider`,children:s.source===`local`?`app`:`package`}),s.recipe?(0,H.jsx)(U,{variant:`outline`,className:`text-[10px] font-mono`,children:s.recipe}):null,(0,H.jsx)(mS,{diagnostic:l})]}),s.description?(0,H.jsx)(`p`,{className:`mt-1.5 text-sm text-muted-foreground`,children:s.description}):null,s.dataSources&&s.dataSources.length>0?(0,H.jsxs)(`p`,{className:`mt-1.5 text-sm text-muted-foreground`,"data-repo-data-sources":!0,children:[`Reads its own data through`,` `,s.dataSources.map((e,t)=>(0,H.jsxs)(`span`,{children:[t>0?`, `:``,(0,H.jsx)(`span`,{className:`font-mono text-xs`,children:e.name}),e.from?(0,H.jsxs)(`span`,{className:`text-xs`,children:[` (`,e.from,`)`]}):null]},e.name)),`, so props alone won't fill it — a preview needs that data.`]}):null,s.qualifiedBecause?(0,H.jsxs)(`p`,{className:`mt-1 text-xs text-muted-foreground italic`,children:[`Placed as `,(0,H.jsx)(`span`,{className:`font-mono`,children:s.id}),`: `,s.qualifiedBecause]}):null,(0,H.jsxs)(Rf,{className:`mt-3 h-8 max-w-xl`,children:[(0,H.jsx)(Uf,{readOnly:!0,value:d,"aria-label":`Import`,className:`font-mono text-xs`,onFocus:e=>e.currentTarget.select()}),(0,H.jsx)(Bf,{align:`inline-end`,children:(0,H.jsx)(Hf,{size:`icon-xs`,"aria-label":`Copy import`,title:`Copy import`,onClick:()=>void IS(d),children:(0,H.jsx)(Xt,{})})})]})]}),l&&(l.note||l.remedy)?(0,H.jsxs)(`section`,{className:`px-8 pt-6 flex flex-col gap-2 text-sm`,children:[(0,H.jsx)(`div`,{className:FS,children:`Fidelity`}),l.note?(0,H.jsx)(`p`,{children:l.note}):null,l.remedy?(0,H.jsx)(`p`,{className:`text-muted-foreground`,children:l.remedy}):null,l.status!==`exact`&&l.status!==`adapted`?(0,H.jsx)(ES,{entry:s,diagnostic:l,previewLabel:t?.apps.find(e=>e.app===s.identity.app)?.preview.label}):null]}):null,(0,H.jsxs)(`section`,{className:`px-8 py-6 flex flex-col gap-3`,children:[(0,H.jsx)(`div`,{className:FS,children:`Preview`}),(0,H.jsx)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:f.map((e,t)=>(0,H.jsxs)(ny,{className:`py-0 gap-0`,children:[(0,H.jsx)(`div`,{className:`p-3`,children:(0,H.jsx)(`iframe`,{src:Qs(s.id,{state:t,w:480,h:200,v:r,dark:i}),title:`${s.id} ${e?.name??`preview`}`,loading:`lazy`,onLoad:()=>setTimeout(()=>void o([s.id]),1500),className:`block w-full h-[200px] border-0`})}),(0,H.jsxs)(`div`,{className:`flex items-center gap-2 border-t px-3 py-1.5 text-xs`,children:[(0,H.jsx)(`span`,{className:`font-medium`,children:e?.name??`default`}),e?(0,H.jsxs)(`span`,{className:`text-muted-foreground truncate`,title:e.at,children:[e.source,e.at?` · ${e.at}`:``]}):null]})]},e?`${e.name}-${t}`:`default`))})]}),s.props.length>0?(0,H.jsxs)(`section`,{className:`px-8 pb-6 flex flex-col gap-3`,children:[(0,H.jsx)(`div`,{className:FS,children:`Props`}),(0,H.jsx)(RS,{props:s.props})]}):null,c.length>0||(s.parts?.length??0)>0?(0,H.jsxs)(`section`,{className:`px-8 pb-6 flex flex-col gap-3`,children:[(0,H.jsx)(`div`,{className:FS,children:`Parts`}),(0,H.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:(c.length>0?c.map(e=>e.id):(s.parts??[]).map(e=>`${s.name}.${e}`)).map(e=>(0,H.jsx)(U,{variant:`outline`,className:`font-mono text-[11px]`,children:e},e))})]}):null,s.provenance.length>0?(0,H.jsxs)(`section`,{className:`px-8 pb-10 flex flex-col gap-3`,children:[(0,H.jsx)(`div`,{className:FS,children:`Used at`}),(0,H.jsx)(`ul`,{className:`flex flex-col gap-0.5 font-mono text-xs text-muted-foreground`,children:s.provenance.map(e=>(0,H.jsx)(`li`,{children:e},e))})]}):null]})})}function RS({props:e}){let t=e.filter(e=>!e.inherited),n=e.filter(e=>e.inherited),[r,i]=(0,P.useState)(!1);return(0,H.jsxs)(ny,{className:`py-0`,children:[(0,H.jsxs)(kS,{children:[(0,H.jsx)(AS,{className:`sr-only`,children:(0,H.jsxs)(MS,{children:[(0,H.jsx)(NS,{children:`Prop`}),(0,H.jsx)(NS,{children:`Accepts`})]})}),(0,H.jsx)(jS,{children:t.map(e=>(0,H.jsx)(zS,{prop:e},e.name))})]}),n.length>0?(0,H.jsxs)(Vb,{open:r,onOpenChange:i,children:[(0,H.jsxs)(Hb,{className:`flex w-full items-center gap-1.5 border-t px-3 py-2 text-xs text-muted-foreground hover:text-foreground`,children:[(0,H.jsx)(Ht,{size:12,className:`transition-transform ${r?`rotate-90`:``}`}),n.length,` inherited prop`,n.length===1?``:`s`]}),(0,H.jsx)(Ub,{children:(0,H.jsx)(kS,{children:(0,H.jsx)(jS,{children:n.map(e=>(0,H.jsx)(zS,{prop:e},e.name))})})})]}):null]})}function zS({prop:e}){return(0,H.jsxs)(MS,{"data-prop":e.name,children:[(0,H.jsxs)(PS,{className:`w-40 py-3 align-top`,children:[(0,H.jsx)(`div`,{className:`font-mono text-xs font-medium`,children:e.name}),(0,H.jsx)(`div`,{className:`mt-0.5 text-[10px] text-muted-foreground`,children:[e.optional?`optional`:`required`,e.slot?`slot`:null].filter(Boolean).join(` · `)})]}),(0,H.jsxs)(PS,{className:`py-3 whitespace-normal`,children:[(0,H.jsxs)(`div`,{className:`flex flex-row flex-wrap items-center gap-1`,children:[e.enumValues&&e.enumValues.length>0?e.enumValues.map(e=>(0,H.jsx)(U,{variant:`outline`,className:`font-mono text-[10px]`,children:String(e)},String(e))):(0,H.jsx)(U,{variant:`outline`,className:`font-mono text-[10px] text-muted-foreground max-w-full truncate`,title:e.type,children:e.type||e.control}),e.defaultValue?(0,H.jsxs)(`span`,{className:`ml-2 text-xs text-muted-foreground`,children:[`default: `,(0,H.jsx)(`span`,{className:`font-mono`,children:e.defaultValue})]}):null]}),e.description?(0,H.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:e.description}):null,!e.serializable&&e.constraint?(0,H.jsx)(`p`,{className:`mt-1 text-xs text-amber-700 dark:text-amber-400`,children:e.constraint}):null]})]})}function BS({item:e,snippets:t}){return e.kind===`snippet`?(0,H.jsx)(WS,{item:e,snippets:t}):e.kind===`repo`?(0,H.jsx)(LS,{id:e.id}):(0,H.jsx)(VS,{item:e})}function VS({item:e}){let t=W(e=>e.components),n=W(e=>e.themeVersion),r=W(e=>e.designMode),i=W(e=>e.openLibrary),a=W(e=>vc(e.design)),o=W(t=>t.libraryStatus[_c(a,e.id)]);gS(a,[e.id]);let s=(0,P.useMemo)(()=>t?t.find(t=>t.id===e.id)??null:null,[t,e.id]),c=uS(t,e.id)??`Components`,l=r===`dark`?`&mode=dark`:``,u=s?.props.find(e=>e.name===`variant`&&e.enumValues),d=s?.props.find(e=>e.name===`size`&&e.enumValues),f=u?.enumValues??[],p=d?.enumValues??[],m=(t,r)=>{let i=r?.w??480,a=r?.h??180,o=t?`&props=${encodeURIComponent(JSON.stringify(t))}`:``;return`/api/render/component/${encodeURIComponent(e.id)}?w=${i}&h=${a}&v=${n}${o}${l}`};return(0,H.jsx)(`div`,{className:`flex-1 overflow-auto bg-background`,children:(0,H.jsxs)(`div`,{className:`mx-auto w-full max-w-5xl flex flex-col`,children:[(0,H.jsxs)(`header`,{className:`sticky top-0 z-10 bg-background/85 backdrop-blur-sm border-b px-8 pt-4 pb-5`,children:[(0,H.jsx)(TS,{onClick:()=>i(null)}),(0,H.jsx)(`div`,{className:`mt-3`,children:(0,H.jsx)(wS,{category:c,name:e.id})}),(0,H.jsxs)(`div`,{className:`mt-2 flex items-baseline gap-2.5 flex-wrap`,children:[(0,H.jsx)(`h1`,{className:`text-3xl font-semibold tracking-tight`,children:e.id}),s?(0,H.jsx)(U,{variant:`outline`,className:`text-[10px] font-mono uppercase tracking-wider`,children:s.source}):null,(0,H.jsx)(mS,{diagnostic:o}),s?.designModeNotes?(0,H.jsx)(`span`,{className:`text-xs text-muted-foreground italic`,children:s.designModeNotes}):null]})]}),(0,H.jsxs)(`section`,{className:`px-8 py-6 flex flex-col gap-3`,children:[(0,H.jsx)(`div`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground font-medium`,children:`Preview`}),(0,H.jsx)(ny,{className:`py-0`,children:(0,H.jsx)(`div`,{className:`p-3`,children:(0,H.jsx)(`iframe`,{src:m(void 0,{w:720,h:220}),title:`${e.id} preview`,loading:`lazy`,className:`block w-full h-[220px] border-0`})})})]}),f.length>0||p.length>0?(0,H.jsxs)(`section`,{className:`px-8 pb-6 flex flex-col gap-3`,children:[(0,H.jsxs)(`div`,{className:`flex items-baseline gap-2`,children:[(0,H.jsx)(`div`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground font-medium`,children:`Variants`}),(0,H.jsxs)(`div`,{className:`text-xs text-muted-foreground`,children:[f.length||1,` × `,p.length||1,` =`,` `,(f.length||1)*(p.length||1),` combinations`]})]}),(0,H.jsx)(HS,{componentId:e.id,variants:f,sizes:p,renderUrl:m})]}):null,s&&s.props.length>0?(0,H.jsxs)(`section`,{className:`px-8 pb-10 flex flex-col gap-3`,children:[(0,H.jsx)(`div`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground font-medium`,children:`Props`}),(0,H.jsx)(US,{props:s.props})]}):null]})})}function HS({componentId:e,variants:t,sizes:n,renderUrl:r}){let i=t.length>0?t:[null],a=n.length>0?n:[null];return(0,H.jsx)(ny,{className:`py-0`,children:(0,H.jsxs)(kS,{children:[(0,H.jsx)(AS,{className:`bg-muted/30`,children:(0,H.jsxs)(MS,{children:[(0,H.jsx)(NS,{className:`w-32 text-[10px] uppercase tracking-wider`,children:t.length>0?`variant`:``}),a.map((e,t)=>(0,H.jsx)(NS,{className:`text-center text-[10px] uppercase tracking-wider`,children:e??`preview`},e??`col-${t}`))]})}),(0,H.jsx)(jS,{children:i.map((t,n)=>(0,H.jsxs)(MS,{children:[(0,H.jsx)(PS,{className:`w-32 font-mono text-xs`,children:t??``}),a.map((i,a)=>{let o={};return t!==null&&(o.variant=t),i!==null&&(o.size=i),(0,H.jsx)(PS,{className:`p-3`,children:(0,H.jsx)(`iframe`,{src:r(o,{w:280,h:80}),title:`${e} ${t??``} ${i??``}`,loading:`lazy`,className:`w-full h-[80px] border-0`})},`${t??n}-${i??a}`)})]},t??`row-${n}`))})]})})}function US({props:e}){return(0,H.jsx)(ny,{className:`py-0`,children:(0,H.jsxs)(kS,{children:[(0,H.jsx)(AS,{className:`sr-only`,children:(0,H.jsxs)(MS,{children:[(0,H.jsx)(NS,{children:`Prop`}),(0,H.jsx)(NS,{children:`Accepts`})]})}),(0,H.jsx)(jS,{children:e.map(e=>(0,H.jsxs)(MS,{children:[(0,H.jsxs)(PS,{className:`w-32 py-3 align-top`,children:[(0,H.jsx)(`div`,{className:`font-mono text-xs font-medium`,children:e.name}),e.optional?(0,H.jsx)(`div`,{className:`mt-0.5 text-[10px] text-muted-foreground`,children:`optional`}):null]}),(0,H.jsxs)(PS,{className:`flex flex-row flex-wrap items-center gap-1 py-3`,children:[e.enumValues&&e.enumValues.length>0?e.enumValues.map(e=>(0,H.jsx)(U,{variant:`outline`,className:`font-mono text-[10px]`,children:String(e)},String(e))):(0,H.jsx)(U,{variant:`outline`,className:`font-mono text-[10px] text-muted-foreground`,children:e.control}),e.defaultValue?(0,H.jsxs)(`span`,{className:`ml-2 text-xs text-muted-foreground`,children:[`default: `,(0,H.jsx)(`span`,{className:`font-mono`,children:e.defaultValue})]}):null]})]},e.name))})]})})}function WS({item:e,snippets:t}){let n=W(e=>e.themeVersion),r=W(e=>e.designMode),i=W(e=>e.openLibrary),a=W(e=>e.openSnippetEditor),o=t.find(t=>t.id===e.id)??null,s=r===`dark`?`&mode=dark`:``;return(0,H.jsx)(`div`,{className:`flex-1 overflow-auto bg-background`,children:(0,H.jsxs)(`div`,{className:`mx-auto w-full max-w-5xl flex flex-col`,children:[(0,H.jsxs)(`header`,{className:`sticky top-0 z-10 bg-background/85 backdrop-blur-sm border-b px-8 pt-4 pb-5`,children:[(0,H.jsx)(TS,{onClick:()=>i(null)}),(0,H.jsx)(`div`,{className:`mt-3`,children:(0,H.jsx)(wS,{category:`Snippets`,name:o?.name??e.id})}),(0,H.jsxs)(`div`,{className:`mt-2 flex items-baseline gap-2.5 flex-wrap`,children:[(0,H.jsx)(`h1`,{className:`text-3xl font-semibold tracking-tight`,children:o?.name??e.id}),(0,H.jsx)(U,{variant:`outline`,className:`text-[10px] font-mono uppercase tracking-wider border-primary/40 text-primary`,children:`snippet`}),o?.unused?(0,H.jsx)(U,{variant:`outline`,className:`text-[10px] uppercase tracking-wider border-amber-500/40 text-amber-600 dark:text-amber-400`,title:`No screen reaches this snippet, directly or through another snippet — nothing renders it.`,children:`unused`}):null,(0,H.jsx)(`div`,{className:`ml-auto`,children:(0,H.jsxs)(G,{size:`sm`,onClick:()=>a(e.id),children:[(0,H.jsx)(Zn,{}),`Open in canvas`]})})]}),o?(0,H.jsxs)(`div`,{className:`mt-1.5 flex flex-wrap items-center gap-x-2 gap-y-1 text-sm text-muted-foreground`,children:[(0,H.jsxs)(`span`,{children:[o.params.length,` parameter`,o.params.length===1?``:`s`]}),o.params.map(e=>(0,H.jsx)(GS,{param:e},e.name))]}):null]}),(0,H.jsxs)(`section`,{className:`px-8 py-6 flex flex-col gap-3`,children:[(0,H.jsx)(`div`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground font-medium`,children:`Preview`}),(0,H.jsx)(ny,{className:`py-0`,children:(0,H.jsx)(`div`,{className:`p-3`,children:(0,H.jsx)(`iframe`,{src:`/api/render/snippet/${encodeURIComponent(e.id)}?w=720&h=260&v=${n}${s}`,title:`${e.id} preview`,loading:`lazy`,className:`block w-full h-[260px] border-0`})})})]}),o&&o.params.length>0?(0,H.jsxs)(`section`,{className:`px-8 pb-10 flex flex-col gap-3`,children:[(0,H.jsx)(`div`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground font-medium`,children:`Parameters`}),(0,H.jsx)(ny,{className:`py-0`,children:(0,H.jsxs)(kS,{children:[(0,H.jsx)(AS,{className:`sr-only`,children:(0,H.jsxs)(MS,{children:[(0,H.jsx)(NS,{children:`Parameter`}),(0,H.jsx)(NS,{children:`Type`})]})}),(0,H.jsx)(jS,{children:o.params.map(e=>(0,H.jsxs)(MS,{children:[(0,H.jsxs)(PS,{className:`w-32 py-3 font-mono text-xs font-medium`,children:[`$`,e.name]}),(0,H.jsxs)(PS,{className:`flex flex-row flex-wrap items-center gap-1 py-3`,children:[(0,H.jsx)(U,{variant:`outline`,className:`font-mono text-[10px]`,children:e.type}),dS(e)===null?(0,H.jsx)(`span`,{className:`ml-2 text-xs text-amber-600 dark:text-amber-400`,children:`required`}):(0,H.jsxs)(`span`,{className:`ml-2 text-xs text-muted-foreground`,children:[`default: `,(0,H.jsx)(`span`,{className:`font-mono`,children:dS(e)})]})]})]},e.name))})]})})]}):null]})})}function GS({param:e}){let t=dS(e);return(0,H.jsxs)(U,{variant:`outline`,className:`border-dashed font-mono text-[10px] text-muted-foreground`,title:`${e.type}${t===null?` · required`:``}`,children:[`$`,e.name,t===null?null:(0,H.jsxs)(`span`,{className:`opacity-70`,children:[` = `,t]})]})}function KS({className:e,...t}){return(0,H.jsx)(`div`,{"data-slot":`skeleton`,className:V(`animate-pulse rounded-md bg-muted`,e),...t})}var qS=`\0all`,JS={Button:110,Badge:110,Heading:90,Text:80,Label:80,Input:100,Textarea:130,Switch:100,Checkbox:100,Slider:100,Progress:100,Skeleton:80,Separator:80,Divider:80,Toggle:100,Calendar:280,Icon:110,Placeholder:150,Avatar:110,Alert:140,Card:130,Tabs:110,Breadcrumb:80,Pagination:100,Accordion:150,RadioGroup:100,ToggleGroup:100,Select:100,Toaster:140,Gradient:130};function YS(e){return JS[e]??120}function XS({snippets:e}){let t=W(e=>e.components),n=W(e=>e.components===null&&e.componentsLoading),r=W(e=>e.openLibrary),i=W(e=>e.themeVersion),a=W(e=>e.designMode),[o,s]=(0,P.useState)(``),[c,l]=(0,P.useState)(null),u=(0,P.useMemo)(()=>lS(t),[t]),d=(0,P.useMemo)(()=>{let t=[];for(let e of u)for(let n of e.components)t.push({ref:{kind:`component`,id:n},label:n,category:e.label,isSnippet:!1,previewHeight:YS(n)});for(let n of e)t.push({ref:{kind:`snippet`,id:n.id},label:n.name,category:`Snippets`,isSnippet:!0,...n.unused?{unused:!0}:{},previewHeight:150});return t},[u,e]),f=d.filter(e=>!e.isSnippet).length,p=d.filter(e=>e.isSnippet).length,m=o.trim().toLowerCase(),h=e=>!m||e.toLowerCase().includes(m),g=d.filter(e=>!(c&&e.category!==c||!h(e.label))),_=Array.from({length:3},()=>[]),v=Array.from({length:3},()=>0);for(let e of g){let t=0,n=v[0]??0;for(let e=1;e<3;e+=1){let r=v[e]??0;r<n&&(t=e,n=r)}_[t]?.push(e),v[t]=(v[t]??0)+e.previewHeight+60}let y=a===`dark`?`&mode=dark`:``;return(0,H.jsx)(`div`,{className:`flex-1 overflow-auto scroll-stable bg-background`,children:(0,H.jsxs)(`div`,{className:`mx-auto w-full max-w-6xl flex flex-col`,children:[(0,H.jsxs)(`header`,{className:`px-8 pt-10 pb-5`,children:[(0,H.jsxs)(`div`,{className:`flex items-baseline gap-3`,children:[(0,H.jsx)(`h1`,{className:`text-3xl font-semibold tracking-tight`,children:`Library`}),(0,H.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[n?`loading components`:`${f} components`,` ·`,` `,p,` snippets`]})]}),(0,H.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground max-w-2xl`,children:`Everything you can drop onto a board. Click a tile to see variants and props.`})]}),(0,H.jsxs)(`div`,{className:`sticky top-0 z-20 bg-background/85 backdrop-blur-sm px-8 pt-3 pb-3`,children:[(0,H.jsx)(`div`,{className:`flex items-center gap-3 mb-3`,children:(0,H.jsxs)(Rf,{className:`h-9 flex-1 max-w-md`,children:[(0,H.jsx)(Bf,{children:(0,H.jsx)(ur,{size:14,strokeWidth:2})}),(0,H.jsx)(Uf,{type:`text`,value:o,onChange:e=>s(e.target.value),placeholder:`Search components and snippets…`})]})}),(0,H.jsxs)(Zp,{type:`single`,value:c??qS,onValueChange:e=>{e&&l(e===qS?null:e)},"aria-label":`Component shelf`,className:`flex-wrap items-center justify-start gap-2`,children:[(0,H.jsx)(QS,{value:qS,label:`All ${d.length}`}),u.map(e=>{let t=d.filter(t=>t.category===e.label).length;return t===0?null:(0,H.jsx)(QS,{value:e.label,label:`${e.label} ${t}`},e.id)}),p>0?(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(Pp,{orientation:`vertical`,className:`mx-1 h-5`}),(0,H.jsx)(QS,{value:`Snippets`,label:`Snippets ${p}`,accent:!0})]}):null]})]}),(0,H.jsxs)(`div`,{className:`px-8 pb-12 mt-5 flex flex-col gap-4`,children:[g.length>0?(0,H.jsx)(`div`,{className:`flex items-start gap-4`,children:_.map((e,t)=>{let n=`col-${t}`;return(0,H.jsx)(`div`,{className:`flex-1 flex flex-col gap-4 min-w-0`,children:e.map(e=>(0,H.jsx)($S,{tile:e,previewMode:y,themeVersion:i,onClick:()=>r(e.ref)},`${e.ref.kind}:${e.ref.id}`))},n)})}):null,n?(0,H.jsx)(ZS,{}):g.length===0?(0,H.jsx)(Ku,{className:`py-16`,children:(0,H.jsxs)(qu,{children:[(0,H.jsx)(Yu,{variant:`icon`,children:(0,H.jsx)(lr,{})}),(0,H.jsxs)(Xu,{children:[`No matches for "`,o,`".`]}),(0,H.jsx)(Zu,{children:`Try a shorter word, or clear the shelf filter above.`})]})}):null]})]})})}function ZS(){return(0,H.jsx)(`div`,{className:`flex items-start gap-4`,"aria-hidden":`true`,children:[`left`,`middle`,`right`].map(e=>(0,H.jsxs)(`div`,{className:`flex-1 flex flex-col gap-4 min-w-0`,children:[(0,H.jsx)(KS,{className:`h-[160px] w-full`}),(0,H.jsx)(KS,{className:`h-[110px] w-full`}),(0,H.jsx)(KS,{className:`h-[140px] w-full`})]},e))})}function QS({value:e,label:t,accent:n}){return(0,H.jsx)(Qp,{value:e,className:`h-7 rounded-full px-3 text-xs whitespace-nowrap `+(n?`border-primary/40 bg-primary/5 text-primary hover:bg-primary/10 hover:text-primary data-[state=on]:bg-primary data-[state=on]:font-medium data-[state=on]:text-primary-foreground`:`bg-card text-muted-foreground data-[state=on]:bg-foreground data-[state=on]:font-medium data-[state=on]:text-background`),children:t})}function $S({tile:e,previewMode:t,themeVersion:n,onClick:r}){let i=e.isSnippet,a=e.ref.kind===`snippet`?`/api/render/snippet/${encodeURIComponent(e.ref.id)}?w=480&h=${e.previewHeight}&v=${n}${t}`:`/api/render/component/${encodeURIComponent(e.ref.id)}?w=480&h=${e.previewHeight}&v=${n}${t}`;return(0,H.jsx)(ny,{className:`gap-0 py-0 transition-shadow `+(i?`ring-primary/25 hover:ring-primary/60`:`hover:ring-primary/40`),children:(0,H.jsxs)(`button`,{type:`button`,onClick:r,className:`block w-full text-left outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset`,children:[(0,H.jsxs)(`div`,{className:`relative w-full overflow-hidden bg-background`,style:{height:e.previewHeight},children:[(0,H.jsx)(KS,{className:`absolute inset-0 rounded-none`}),(0,H.jsx)(`iframe`,{src:a,title:`${e.label} preview`,loading:`lazy`,className:`absolute inset-0 w-full h-full pointer-events-none border-0`})]}),(0,H.jsxs)(sy,{className:`flex items-center justify-between gap-2 border-t px-3 py-2`,children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[(0,H.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full shrink-0 `+(i?`bg-primary`:`bg-muted-foreground`)}),(0,H.jsx)(`span`,{className:`text-xs font-medium truncate`,children:e.label})]}),(0,H.jsx)(U,{variant:i?`secondary`:`outline`,className:`px-1.5 py-0 text-[10px] uppercase tracking-wider `+(e.unused?`text-amber-600 dark:text-amber-400`:i?`text-primary`:`text-muted-foreground`),title:e.unused?`No screen reaches this snippet — nothing renders it.`:void 0,children:e.unused?`Unused`:i?`Snippet`:e.category})]})]})})}var eC=240,tC=4096;function nC(e){return Math.max(eC,Math.min(tC,Math.round(e)))}function rC(){let e=W(e=>e.previewTarget),t=W(e=>e.setPreviewTarget),n=W(e=>e.designMode),r=W(e=>e.themeVersion),i=W(t=>e?t.screenVersions[e.screenId]??0:0),a=ld(),[o,s]=(0,P.useState)(1200),[c,l]=(0,P.useState)(null),[u,d]=(0,P.useState)(900),[f,p]=(0,P.useState)(!1),m=(0,P.useRef)(null);(0,P.useEffect)(()=>{e&&(s(nC(e.w)),l(null),p(!1))},[e]),(0,P.useEffect)(()=>{if(!e)return;let t=m.current;if(!t)return;let n=()=>d(Math.max(200,Math.round(t.clientHeight)));n();let r=new ResizeObserver(n);return r.observe(t),()=>r.disconnect()},[e]);let h=e=>t=>{t.preventDefault();let n=t.currentTarget;n.setPointerCapture(t.pointerId);let r=t.clientX,i=c??o,a=t=>{let n=(t.clientX-r)*(e===`e`?2:-2);return nC(i+n)},u=e=>l(a(e)),d=e=>{n.removeEventListener(`pointermove`,u),n.removeEventListener(`pointerup`,d),n.removeEventListener(`pointercancel`,d),l(null),s(a(e))};n.addEventListener(`pointermove`,u),n.addEventListener(`pointerup`,d),n.addEventListener(`pointercancel`,d)};if(!e)return null;let g=c??o,_=cm({screenId:e.screenId,width:o,height:u,...e.boardTheme?{boardTheme:e.boardTheme}:{},...e.scheme?{scheme:e.scheme}:{},canvasDefault:n,screenRevision:i,themeVersion:r});return(0,H.jsx)(ud,{open:!0,onOpenChange:e=>!e&&t(null),children:(0,H.jsxs)(pd,{className:`max-w-none sm:max-w-none w-[96vw] h-[94vh] flex flex-col gap-3 p-4 bg-card`,children:[(0,H.jsxs)(md,{className:`flex-row items-center gap-3 space-y-0 pr-10`,children:[(0,H.jsx)(gd,{className:`text-sm truncate`,children:e.name}),(0,H.jsx)(_d,{className:`sr-only`,children:`Full-screen preview with adjustable width`}),(0,H.jsxs)(`div`,{className:`ml-auto flex items-center gap-1.5`,children:[a.map(e=>(0,H.jsxs)(G,{variant:o===e.w&&c===null?`secondary`:`ghost`,size:`sm`,className:`h-6 px-2 text-xs`,onClick:()=>{l(null),s(nC(e.w))},children:[e.name,` `,(0,H.jsx)(`span`,{className:`text-muted-foreground tabular-nums`,children:e.w})]},e.name)),(0,H.jsx)(iC,{value:g,onCommit:e=>s(nC(e))})]})]}),(0,H.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto rounded-lg border bg-muted px-4 py-5`,children:(0,H.jsxs)(`div`,{ref:m,className:`relative mx-auto h-full group/preview`,style:{width:g,minWidth:g},children:[(0,H.jsx)(`iframe`,{title:`Preview: ${e.name}`,src:_,onLoad:()=>p(!0),className:`h-full w-full rounded-md bg-white ring-1 ring-border`,style:{pointerEvents:c===null?`auto`:`none`}}),f?null:(0,H.jsx)(oh,{size:40}),(0,H.jsx)(`div`,{onPointerDown:h(`w`),className:`absolute top-0 left-0 h-full w-1.5 -translate-x-1 cursor-ew-resize rounded opacity-0 group-hover/preview:opacity-100 transition-opacity bg-primary/40 hover:bg-primary/70`,role:`presentation`}),(0,H.jsx)(`div`,{onPointerDown:h(`e`),className:`absolute top-0 right-0 h-full w-1.5 translate-x-1 cursor-ew-resize rounded opacity-0 group-hover/preview:opacity-100 transition-opacity bg-primary/40 hover:bg-primary/70`,role:`presentation`})]})})]})})}function iC({value:e,onCommit:t}){let[n,r]=(0,P.useState)(String(e));return(0,P.useEffect)(()=>{r(String(e))},[e]),(0,H.jsxs)(`span`,{className:`flex items-center gap-1 text-xs text-muted-foreground tabular-nums`,children:[(0,H.jsx)(`input`,{type:`number`,value:n,min:eC,max:tC,"aria-label":`preview width`,onChange:e=>r(e.target.value),onBlur:()=>{let i=Number(n);if(!Number.isFinite(i)){r(String(e));return}i!==e&&t(i)},onKeyDown:t=>{t.key===`Enter`&&(t.preventDefault(),t.currentTarget.blur()),t.key===`Escape`&&(r(String(e)),t.currentTarget.blur())},className:`w-14 rounded-sm border bg-transparent px-1 py-0.5 text-right outline-none focus:bg-card [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none`}),`px`]})}function aC({className:e,...t}){return(0,H.jsx)(ue,{"data-slot":`checkbox`,className:V(`peer relative flex size-4 shrink-0 items-center justify-center rounded-[4px] border border-input transition-colors outline-none group-has-disabled/field:opacity-50 group-has-[:focus-visible]/field-label:ring-0 group-has-[:focus-visible]/field-label:not-data-checked:border-input after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground group-has-[:focus-visible]/field-label:data-checked:border-primary dark:data-checked:bg-primary`,e),...t,children:(0,H.jsx)(tt,{"data-slot":`checkbox-indicator`,className:`grid place-content-center text-current transition-none [&>svg]:size-3.5`,children:(0,H.jsx)(Bt,{})})})}function oC(e,t){let n=new Map;for(let r of e){if(r.scope!==`shared`||r.status!==`open`||r.manage===!1||r.origin.kind!==`published`||r.origin.slug===t)continue;let e=r.origin.slug,i=n.get(e)??{slug:e,branch:r.branch??null,threadIds:[]};i.threadIds.push(r.id),n.set(e,i)}return[...n.values()]}function sC({groups:e,chosen:t,onToggle:n}){return e.length===0?null:(0,H.jsxs)(`div`,{className:`grid gap-2`,"data-publish-migrate":!0,children:[(0,H.jsx)(K,{children:`Comments on other links`}),(0,H.jsx)(`div`,{className:`rounded-md border`,children:e.map(e=>{let r=e.threadIds.length;return(0,H.jsxs)(`div`,{className:`flex items-center gap-2 px-2.5 py-1.5 text-sm hover:bg-accent/50`,children:[(0,H.jsx)(aC,{id:`publish-migrate-${e.slug}`,checked:t.includes(e.slug),onCheckedChange:t=>n(e.slug,t===!0)}),(0,H.jsxs)(K,{htmlFor:`publish-migrate-${e.slug}`,className:`flex min-w-0 flex-1 cursor-pointer items-center gap-1.5 font-normal`,children:[(0,H.jsxs)(`span`,{className:`shrink-0`,children:[`Bring `,r,` open comment`,r===1?``:`s`,` from`]}),e.branch?(0,H.jsxs)(`span`,{className:`inline-flex min-w-0 items-center gap-1 font-mono text-xs`,children:[(0,H.jsx)(cn,{size:12,className:`shrink-0`}),(0,H.jsx)(`span`,{className:`truncate`,children:e.branch})]}):(0,H.jsxs)(`span`,{className:`truncate font-mono text-xs`,children:[`/s/`,e.slug,`/`]})]})]},e.slug)})}),(0,H.jsx)(`p`,{className:`text-[11px] leading-snug text-muted-foreground`,children:`Each link keeps its own conversation. Comments brought here leave the other link.`})]})}var cC={public:`Public — anyone with the link`,private:`Private — everyone in your organization`,team:e=>`Only ${e} — that team, plus your organization's owner and admins`};function lC(e){let{boards:t,boardIds:n}=e;return(0,H.jsxs)(`div`,{className:`grid gap-4`,children:[(0,H.jsxs)(`div`,{className:`grid gap-2`,children:[(0,H.jsx)(K,{htmlFor:`publish-title`,children:`Title`}),(0,H.jsx)(Z,{id:`publish-title`,value:e.title,onChange:t=>e.onTitleChange(t.target.value),placeholder:`Board title`})]}),t.length>0?(0,H.jsxs)(`div`,{className:`grid gap-2`,children:[(0,H.jsx)(K,{children:`Boards`}),(0,H.jsx)(`div`,{className:`max-h-40 overflow-y-auto rounded-md border`,children:t.map(t=>(0,H.jsxs)(`div`,{className:`flex items-center gap-2 px-2.5 py-1.5 text-sm hover:bg-accent/50`,children:[(0,H.jsx)(aC,{id:`publish-board-${t.id}`,checked:n.includes(t.id),onCheckedChange:n=>e.onToggleBoard(t.id,n===!0)}),(0,H.jsx)(K,{htmlFor:`publish-board-${t.id}`,className:`flex-1 cursor-pointer truncate font-normal`,children:t.name}),(0,H.jsxs)(`span`,{className:`shrink-0 text-[11px] text-muted-foreground`,children:[t.frameCount,` frame`,t.frameCount===1?``:`s`]})]},t.id))})]}):(0,H.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`This folder has no boards, so every screen is published.`}),(0,H.jsxs)(`div`,{className:`grid gap-2`,children:[(0,H.jsx)(K,{htmlFor:`publish-destination`,children:`Destination`}),(0,H.jsxs)(q,{value:e.destinationSlug,onValueChange:e.onDestinationChange,disabled:!!e.destinationError,children:[(0,H.jsx)(Y,{id:`publish-destination`,children:(0,H.jsx)(J,{})}),(0,H.jsxs)(vd,{children:[e.matchingSlots.map(e=>(0,H.jsxs)(X,{value:e.slug,children:[`Update `,e.title||`Untitled design`]},e.slug)),(0,H.jsx)(X,{value:`new`,children:`Create a new link`})]})]}),e.destinationError?(0,H.jsx)(`p`,{className:`text-xs text-destructive`,children:e.destinationError}):e.selectedSlot?(0,H.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Matches this team, board selection, and source.`}):(0,H.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Creates a separate live URL and keeps existing review links unchanged.`})]}),e.protectedShares?(0,H.jsx)(uC,{...e}):(0,H.jsx)(dC,{upgradeUrl:e.upgradeUrl}),e.publicComments?(0,H.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,H.jsxs)(`div`,{className:`grid gap-0.5`,children:[(0,H.jsx)(K,{htmlFor:`publish-public-comments`,children:`Let people outside your organization comment`}),(0,H.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:e.publicComments.keepsExisting?`They give their name to comment. Left alone, the link keeps its current setting.`:`They give their name to comment.`})]}),(0,H.jsx)(bx,{id:`publish-public-comments`,checked:e.publicComments.on,onCheckedChange:e.onPublicCommentsChange})]}):null,e.teams.length>1&&e.teamId?(0,H.jsxs)(`div`,{className:`grid gap-2`,children:[(0,H.jsx)(K,{htmlFor:`publish-team`,children:`Team`}),(0,H.jsxs)(q,{value:e.teamId,onValueChange:e.onTeamChange,children:[(0,H.jsx)(Y,{id:`publish-team`,children:(0,H.jsx)(J,{})}),(0,H.jsx)(vd,{children:e.teams.map(e=>(0,H.jsx)(X,{value:e.id,children:e.name},e.id))})]})]}):null]})}function uC({visibility:e,onVisibilityChange:t,teamOnlyName:n,password:r,onPasswordChange:i}){let[a,o]=(0,P.useState)(!1);return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsxs)(`div`,{className:`grid gap-2`,children:[(0,H.jsx)(K,{htmlFor:`publish-visibility`,children:`Visibility`}),(0,H.jsxs)(q,{value:e,onValueChange:e=>t(e===`private`||e===`team`?e:`public`),children:[(0,H.jsx)(Y,{id:`publish-visibility`,children:(0,H.jsx)(J,{})}),(0,H.jsxs)(vd,{children:[(0,H.jsx)(X,{value:`public`,children:cC.public}),(0,H.jsx)(X,{value:`private`,children:cC.private}),n?(0,H.jsx)(X,{value:`team`,children:cC.team(n)}):null]})]})]}),(0,H.jsxs)(`div`,{className:`grid gap-2`,children:[(0,H.jsx)(K,{htmlFor:`publish-password`,children:`Password (optional)`}),(0,H.jsxs)(`div`,{className:`relative`,children:[(0,H.jsx)(Z,{id:`publish-password`,className:`pr-10`,type:a?`text`:`password`,minLength:3,autoComplete:`new-password`,placeholder:`3+ characters`,value:r,onChange:e=>i(e.target.value)}),(0,H.jsx)(G,{type:`button`,variant:`ghost`,className:`absolute right-0 top-0 h-9 w-9 p-0`,onClick:()=>o(e=>!e),title:a?`Hide password`:`Show password`,"aria-label":a?`Hide password`:`Show password`,"aria-pressed":a,children:a?(0,H.jsx)(tn,{}):(0,H.jsx)(nn,{})})]}),(0,H.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Anyone with the password can view, signed in or not. Send it separately from the link.`})]})]})}function dC({upgradeUrl:e}){return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsxs)(`div`,{className:`grid gap-2`,children:[(0,H.jsx)(K,{htmlFor:`publish-visibility`,children:`Visibility`}),(0,H.jsx)(Z,{id:`publish-visibility`,readOnly:!0,value:cC.public,className:`bg-muted/40 text-muted-foreground`})]}),(0,H.jsxs)(Hy,{role:`note`,"data-testid":`protected-shares-upsell`,children:[(0,H.jsx)(Dn,{}),(0,H.jsx)(Uy,{children:`Private and password-protected links`}),(0,H.jsx)(Wy,{className:`text-xs`,children:`Share only with your organization, or behind a password. Free accounts publish public links — upgrade your plan to unlock both.`}),e&&(0,H.jsx)(Gy,{children:(0,H.jsx)(G,{size:`xs`,variant:`secondary`,asChild:!0,children:(0,H.jsx)(`a`,{href:e,target:`_blank`,rel:`noreferrer`,children:`Upgrade`})})})]})]})}function fC({run:e}){return(0,H.jsxs)(`div`,{className:`flex flex-col gap-3 py-4`,children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-2 text-sm`,children:[(0,H.jsx)(rh,{size:16}),(0,H.jsx)(`span`,{children:e.message}),e.capture?(0,H.jsxs)(`span`,{className:`text-muted-foreground tabular-nums`,children:[e.capture.done,`/`,e.capture.total]}):null]}),(0,H.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Capturing previews takes the longest. You can close this — the publish keeps going.`}),(0,H.jsx)(_C,{messages:e.warnings})]})}function pC({run:e,upgradeUrl:t,onInviteGuests:n}){let{result:r}=e;return(0,H.jsxs)(`div`,{className:`flex flex-col gap-3 py-2`,children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-2 text-sm`,children:[(0,H.jsx)(Gt,{size:15,className:`text-emerald-600 dark:text-emerald-500`}),(0,H.jsxs)(`span`,{children:[r.created?`Published.`:`Updated the existing link.`,r.migratedComments?` Brought ${r.migratedComments} comment${r.migratedComments===1?``:`s`} over.`:``]})]}),(0,H.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,H.jsx)(Z,{readOnly:!0,value:r.shareUrl,className:`font-mono text-xs`}),(0,H.jsx)(G,{variant:`outline`,size:`icon-sm`,title:`Copy link`,onClick:()=>void hC(r.shareUrl),children:(0,H.jsx)(Xt,{})}),(0,H.jsx)(G,{variant:`outline`,size:`icon-sm`,title:`Open link`,asChild:!0,children:(0,H.jsx)(`a`,{href:r.shareUrl,target:`_blank`,rel:`noreferrer`,children:(0,H.jsx)(en,{})})})]}),(0,H.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:gC(r)}),n?(0,H.jsxs)(G,{variant:`outline`,size:`sm`,className:`self-start`,onClick:n,"data-testid":`publish-invite-guests`,children:[(0,H.jsx)(Fr,{}),`Invite guests…`]}):null,(0,H.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[r.boards,` board`,r.boards===1?``:`s`,` · `,r.screens,` screen`,r.screens===1?``:`s`,` · `,r.files,` files · `,Math.round(r.bytes/1024),` `,`KB`,r.screenshots>0?` · ${r.screenshots} previews`:``]}),(0,H.jsx)(vC,{history:r.history,upgradeUrl:t}),(0,H.jsx)(_C,{messages:e.warnings})]})}function mC({run:e,upgradeUrl:t,onSeePublished:n,onSignIn:r}){return(0,H.jsxs)(`div`,{className:`flex flex-col gap-3 py-2`,children:[e.boardLimit?(0,H.jsxs)(H.Fragment,{children:[(0,H.jsxs)(Hy,{role:`note`,"data-testid":`board-limit-notice`,children:[(0,H.jsx)(rn,{}),(0,H.jsxs)(Uy,{children:[`All `,e.boardLimit.limit,` board slots on the `,Yx(e.boardLimit.tier),` plan are in use`]}),(0,H.jsx)(Wy,{className:`text-xs`,children:`Take one of your published boards down to free a slot, or upgrade for more. Re-publishing an existing link always works — the cap only counts new boards.`})]}),(0,H.jsxs)(`div`,{className:`flex gap-2`,children:[(0,H.jsx)(G,{size:`sm`,onClick:n,children:`See published boards`}),t&&(0,H.jsx)(G,{size:`sm`,variant:`outline`,asChild:!0,children:(0,H.jsx)(`a`,{href:t,target:`_blank`,rel:`noreferrer`,children:`Upgrade plan`})})]})]}):(0,H.jsxs)(`div`,{className:`flex items-start gap-2 text-sm text-destructive`,children:[(0,H.jsx)(jr,{size:14,className:`mt-0.5 shrink-0`}),(0,H.jsx)(`span`,{children:e.message})]}),e.signInRequired?(0,H.jsx)(G,{onClick:r,className:`self-start`,children:`Sign in and try again…`}):null,(0,H.jsx)(_C,{messages:e.warnings})]})}async function hC(e){try{await navigator.clipboard.writeText(e),z({kind:`success`,message:`Share link copied.`})}catch{z({kind:`info`,message:e})}}function gC(e){return e.onlyTeam?e.passwordProtected?`${e.onlyTeam}, your organization's owner and admins, or anyone with the password.`:`${e.onlyTeam}, plus your organization's owner and admins.`:e.visibility===`private`?e.passwordProtected?`Your organization, or anyone with the password.`:`Anyone signed in at your organization.`:e.passwordProtected?`Anyone with the link and the password.`:`Anyone with the link.`}function _C({messages:e}){return e.length===0?null:(0,H.jsx)(`ul`,{className:`flex flex-col gap-1 rounded-md border bg-muted/40 p-2 text-[11px] text-muted-foreground`,children:e.map(e=>(0,H.jsx)(`li`,{children:e},e))})}function vC({history:e,upgradeUrl:t}){return e?!e.retained&&e.pruned>0?(0,H.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Replaced the previous version — the free plan keeps only the latest.`,t&&(0,H.jsxs)(H.Fragment,{children:[` `,(0,H.jsx)(`a`,{href:t,target:`_blank`,rel:`noreferrer`,className:`underline underline-offset-4`,children:`Upgrade to keep history`}),`.`]})]}):e.retained&&e.versions>1?(0,H.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[e.versions,` versions kept — earlier publishes stay pinnable.`]}):null:null}function yC(e,t){let n=[];e.context.contextKnown||n.push(`board context is unknown`),e.teamId!==t.teamId&&n.push(`team differs`);let r=e=>[...new Set(e)].sort();return JSON.stringify(r(e.context.boardIds))!==JSON.stringify(r(t.boardIds))&&n.push(`board selection differs`),e.context.repo===t.repo?t.repo!==null&&(!e.context.branch||!t.branch?n.push(`branch is unavailable`):e.context.branch!==t.branch&&n.push(`branch differs`)):n.push(`repository differs`),n}function bC(e,t){return e.filter(e=>yC(e,t).length===0)}function xC(e,t){return bC(e,t).sort((e,t)=>SC(t.lastPublishedAt)-SC(e.lastPublishedAt))[0]??null}var SC=e=>{let t=e?Date.parse(e):NaN;return Number.isFinite(t)?t:-1/0},CC=700;function wC(){let e=W(e=>e.publishOpen),t=W(e=>e.setPublishOpen),n=W(e=>e.openSignIn),r=W(e=>e.setPublishedBoardsOpen),i=W(e=>e.openGuests),a=W(e=>e.settlePublish),o=W(e=>e.design),s=W(e=>e.publishScope),c=W(e=>Jr(e.authStatus?.account?.tier)),l=W(e=>Yr(e.authStatus?.account?.tier)),u=W(e=>Xr(e.authStatus?.account?.tier)),d=W(e=>Zx(e.authStatus?.appUrl)),[f,p]=(0,P.useState)(null),[m,h]=(0,P.useState)({state:`idle`}),[g,_]=(0,P.useState)(``),[v,y]=(0,P.useState)([]),[b,x]=(0,P.useState)(`public`),[S,C]=(0,P.useState)(``),[w,T]=(0,P.useState)(null),[E,D]=(0,P.useState)(`new`),[O,k]=(0,P.useState)(!1),[A,j]=(0,P.useState)(!1),[M,ee]=(0,P.useState)(!1),[te,ne]=(0,P.useState)(!1),[re,ie]=(0,P.useState)(null),[ae,oe]=(0,P.useState)([]),[se,ce]=(0,P.useState)([]),le=o?.boards??[],ue=(0,P.useCallback)(async e=>{ne(!0);try{h(await qs.start(e))}catch(e){B(e,`Could not start publishing`)}finally{ne(!1)}},[]);(0,P.useEffect)(()=>{if(!e)return;_(s?s.name:o?.designName?`${o.designName} designs`:``),y(s?[s.id]:[]),ce([]),x(`public`),C(``),j(!1),ee(!1),T(null),D(`new`),k(!1),ne(!1),ie(null);let t=!1;return(async()=>{let[e,n]=await Promise.all([qs.targets().catch(()=>({ready:!1,teams:[],slots:[]})),qs.status().catch(()=>({state:`idle`}))]);if(t)return;p(e),T(e.effectiveTeamId??(e.teams.find(e=>e.isDefault)??e.teams[0])?.id??null);let r=n;if(n.state===`done`||n.state===`error`){if(await qs.reset().catch(()=>void 0),t)return;r={state:`idle`}}h(r)})(),()=>{t=!0}},[e,o?.designName,s]),(0,P.useEffect)(()=>{m.state===`done`&&a(!0)},[m.state,a]),(0,P.useEffect)(()=>{if(!e||m.state!==`running`)return;let t=setInterval(()=>{qs.status().then(h).catch(()=>void 0)},CC);return()=>clearInterval(t)},[e,m.state]);let de=w??f?.effectiveTeamId??null,N=(0,P.useMemo)(()=>({boardIds:v,teamId:de,repo:f?.provenance?.repo??null,branch:f?.provenance?.branch??null}),[v,de,f?.provenance]),fe=(0,P.useMemo)(()=>{let e=xC(f?.slots??[],N);return e?[e]:[]},[f?.slots,N]),pe=fe.find(e=>e.slug===E)??null,me=(0,P.useMemo)(()=>oC(ae,pe?.slug??null),[ae,pe]);(0,P.useEffect)(()=>{if(!e||v.length===0){oe([]);return}let t=!0;return Promise.all(v.map(e=>Ms.list(e,`open`,`shared`))).then(e=>{t&&oe(e.flat())}).catch(()=>{t&&oe([])}),()=>{t=!1}},[e,v]);let he=fe[0]?.slug??`new`;(0,P.useEffect)(()=>{O||D(he)},[O,he]),(0,P.useEffect)(()=>{E!==`new`&&!fe.some(e=>e.slug===E)&&(k(!1),D(he))},[E,fe,he]);let ge=f?.teams??[],_e=c&&l&&ge.length>1?ge.find(e=>e.id===w)?.name??null:null,ve=c?b===`team`&&!_e?`private`:b:`public`,ye=c?S:``,be=ve===`public`||ye.length>=3,xe=me.filter(e=>se.includes(e.slug)).flatMap(e=>e.threadIds),Se=()=>{let e=pe?{mode:`update`,slug:pe.slug,expectedVersionId:pe.latestVersionId}:{mode:`new`},t=be&&(!pe||M);return{boardIds:v,...g.trim()?{title:g.trim()}:{},visibility:ve===`public`?`public`:`private`,...ve===`team`?{teamOnly:!0}:{},...ye.length>=3?{password:ye}:{},...w?{teamId:w}:{},...t?{publicComments:A}:{},destination:e,...xe.length>0?{migrateThreadIds:xe}:{}}},Ce=async()=>{ne(!0);let e=await hx(v).catch(()=>[]);if(e.length>0){ne(!1),ie(e);return}await ue(Se())},we=f===null?null:f.access??(f.ready?`ready`:`signed-out`),Te=we!==null&&we!==`ready`,Ee=!Te&&m.state===`idle`?f?.blocked??null:null,De=we===`expired`,Oe=m.state===`unavailable`,ke=le.length>0&&v.length===0,Ae=e=>{t(!1),n({action:`publish these boards`,...e.expired?{expired:!0}:{}})};return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(_x,{failures:re,verb:`Publish`,onCancel:()=>ie(null),onConfirm:()=>{ie(null),ue(Se())}}),(0,H.jsx)(ud,{open:e,onOpenChange:e=>!e&&t(!1),children:(0,H.jsxs)(pd,{className:`sm:max-w-md`,children:[(0,H.jsxs)(md,{children:[(0,H.jsx)(gd,{children:`Publish to velloo-cloud`}),(0,H.jsx)(_d,{children:s?`Share a rendered, commentable copy of “${s.name}” by link.`:`Share a rendered, commentable copy of these boards by link.`})]}),Oe?(0,H.jsx)(`p`,{className:`py-4 text-sm text-muted-foreground`,children:`This canvas isn't running through the velloo CLI, so it has no account to publish with.`}):Te?(0,H.jsxs)(`div`,{className:`flex flex-col gap-3 py-2`,children:[(0,H.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:De?`Your velloo-cloud session has ended. Sign in again to publish these boards.`:`Publishing needs a velloo-cloud account.`}),(0,H.jsx)(G,{onClick:()=>Ae({expired:De}),className:`self-start`,children:De?`Sign in again…`:`Sign in…`})]}):Ee?(0,H.jsxs)(`p`,{className:`py-4 text-sm text-muted-foreground`,"data-testid":`publish-blocked`,children:[Ee.charAt(0).toUpperCase()+Ee.slice(1),`.`]}):m.state===`running`?(0,H.jsx)(fC,{run:m}):m.state===`done`?(0,H.jsx)(pC,{run:m,upgradeUrl:d,onInviteGuests:m.result.created&&u&&m.result.slug?()=>{t(!1),i({slug:m.result.slug,title:g.trim()||m.result.slug})}:null}):m.state===`error`?(0,H.jsx)(mC,{run:m,upgradeUrl:d,onSeePublished:()=>{t(!1),r(!0)},onSignIn:()=>Ae({expired:m.signInRequired===`expired`})}):(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(lC,{title:g,onTitleChange:_,boards:le,boardIds:v,onToggleBoard:(e,t)=>y(n=>t?[...new Set([...n,e])]:n.filter(t=>t!==e)),destinationSlug:E,onDestinationChange:e=>{k(!0),D(e)},matchingSlots:fe,selectedSlot:pe,destinationError:f?.destinationError,protectedShares:c,visibility:ve,onVisibilityChange:x,teamOnlyName:_e,password:ye,onPasswordChange:C,upgradeUrl:d,teams:ge,teamId:w,onTeamChange:T,publicComments:be?{on:A,keepsExisting:!!pe&&!M}:null,onPublicCommentsChange:e=>{ee(!0),j(e)}}),(0,H.jsx)(sC,{groups:me,chosen:se,onToggle:(e,t)=>ce(n=>t?[...n,e]:n.filter(t=>t!==e))})]}),(0,H.jsxs)(hd,{children:[(0,H.jsx)(G,{variant:`outline`,onClick:()=>t(!1),children:m.state===`done`?`Done`:`Close`}),m.state===`idle`&&!Te&&!Oe&&!Ee?(0,H.jsxs)(G,{onClick:()=>void Ce(),disabled:te||ke||!!f?.destinationError,children:[(0,H.jsx)(pr,{}),te?`Starting…`:`Publish`]}):null,m.state===`error`?(0,H.jsx)(G,{onClick:()=>h({state:`idle`}),children:`Back`}):null]})]})})]})}var TC=`Moving a thread to the cloud republishes the conversation on the published board and removes the local copy. A board with no link yet is published first.`;function EC(){let e=W(e=>e.currentBoardId),t=W(e=>e.commentThreads),n=W(e=>e.commentStatus),r=W(e=>e.commentScope),i=W(e=>e.cloudComments),a=W(e=>e.activeCommentId),o=W(e=>e.refreshComments),s=W(e=>e.refreshCloudComments),c=W(e=>e.setCommentStatus),l=W(e=>e.setCommentScope),u=W(e=>e.setActiveComment),d=W(e=>e.locateComment),f=W(e=>e.createBoardComment),p=W(e=>e.replyToComment),m=W(e=>e.setCommentResolved),h=W(e=>e.moveCommentToCloud),g=W(e=>e.deleteComment),_=W(e=>e.deleteCommentMessage),v=W(e=>e.enterCommentMode),[y,b]=(0,P.useState)(``),[x,S]=(0,P.useState)(`local`),[C,w]=(0,P.useState)(null),[T,E]=(0,P.useState)(``),[D,O]=(0,P.useState)(null),k=t.find(e=>e.id===a)??null,A=(0,P.useMemo)(()=>Sd(t),[t]),j=W(lc),M=(0,P.useMemo)(()=>op(j),[j]),ee=(0,P.useMemo)(()=>sp(j),[j]),te=W(e=>e.authStatus?.loggedIn===!0),ne=(0,P.useMemo)(()=>cp(te),[te]),re=D?t.find(e=>e.id===D.threadId)??null:null;return(0,P.useEffect)(()=>{e&&o()},[e,o]),(0,P.useEffect)(()=>{s()},[s]),(0,P.useEffect)(()=>{E(``)},[a]),(0,H.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,"data-velloo-comments-panel":!0,children:[(0,H.jsx)(Sp,{status:n,onStatusChange:c,count:t.length,onAdd:v,children:(0,H.jsx)(Wv,{scope:r,onChange:l})}),(0,H.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:k?(0,H.jsx)(Ep,{thread:k,voice:M,canDelete:ee,onBack:()=>u(null),onRequestDelete:O,replyDraft:T,onReplyDraftChange:E,onReply:()=>void p(k.id,T).then(()=>E(``)),onResolve:ne(k)?()=>void m(k.id,k.status===`open`):void 0,children:k.scope===`local`?(0,H.jsx)(DC,{thread:k,cloud:i,onMoveToCloud:()=>void h(k.id),onRequestDelete:O}):ne(k)?(0,H.jsx)(Dp,{thread:k,onRequestDelete:O}):null}):t.length>0?(0,H.jsx)(`ul`,{className:`space-y-1.5 p-2`,children:t.map(e=>(0,H.jsx)(xp,{thread:e,number:A.get(e.id)??0,onOpen:()=>u(e.id),onLocate:()=>d(e.id),onResolve:ne(e)?()=>void m(e.id,e.status===`open`):void 0,onDelete:ne(e)?()=>O({kind:`thread`,threadId:e.id}):void 0},e.id))}):(0,H.jsx)(Cp,{status:n})}),k?null:(0,H.jsx)(Tp,{draft:y,onDraftChange:b,onSubmit:()=>{w(null),f(y,x).then(e=>{w(e),e||b(``)})},failure:C,target:(0,H.jsx)(Gv,{scope:x,onChange:S,cloud:i,className:`min-w-0 flex-1`}),help:Uv}),(0,H.jsx)(Op,{thread:re,pending:D,onCancel:()=>O(null),onConfirm:()=>{D&&(D.kind===`thread`?g(D.threadId):_(D.threadId,D.id),O(null))},onResolveInstead:()=>{D&&m(D.threadId,!0),O(null)}})]})}function DC({thread:e,cloud:t,onMoveToCloud:n,onRequestDelete:r}){let i=t?.available===!1?t.reason:null,a=!!i&&i!==`unpublished`;return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsxs)(G,{variant:`outline`,size:`sm`,disabled:t===void 0||a,title:a&&i?js(i):TC,onClick:n,children:[(0,H.jsx)(qt,{}),` Move to cloud`,i===`unpublished`?(0,H.jsx)(jr,{className:`text-amber-600`}):null]}),(0,H.jsx)(Dp,{thread:e,onRequestDelete:r})]})}function OC(e,t){let n=(0,P.useRef)(null),r=(0,P.useRef)(t);return r.current=t,(0,P.useEffect)(()=>()=>{n.current&&clearTimeout(n.current)},[]),(0,P.useCallback)(t=>{n.current&&clearTimeout(n.current),n.current=setTimeout(()=>r.current(t),e)},[e])}function kC({initialValue:e,screenId:t,path:n,debounceMs:r,required:i}){let[a,o]=(0,P.useState)(e),s=(0,P.useRef)(null);(0,P.useEffect)(()=>()=>{s.current&&clearTimeout(s.current)},[]);let c=e=>{o(e),s.current&&clearTimeout(s.current),!(i&&e===``)&&(s.current=setTimeout(()=>{let r=e===``?null:e;R.updateProps({screenId:t,path:Cc(n),propPatch:{children:r}}).catch(e=>B(e,`Could not update text`))},r))};return(0,H.jsxs)(`section`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(K,{htmlFor:`prop-children`,className:`text-xs font-medium text-muted-foreground`,children:`text`}),(0,H.jsx)(Lf,{id:`prop-children`,value:a,onChange:e=>c(e.target.value),rows:2,className:`min-h-0`})]})}function AC({node:e,tree:t,path:n,theme:r,descriptor:i,snippet:a,classChannel:o,computed:s,measured:c,onChange:l}){let u=ch(),d=(0,P.useMemo)(()=>zh(r),[r]),f=(0,P.useMemo)(()=>Bh(r),[r]),p=(0,P.useCallback)(e=>Rh(r,e),[r]),m=(0,P.useMemo)(()=>ng({node:e,descriptor:i,snippet:a}).controls.filter(e=>e.kind!==`prompt`&&(o||e.slot.via!==`style`)),[e,i,a,o]),h=(0,P.useMemo)(()=>$g({theme:r,tree:t,path:Cc(n),node:e}),[r,t,n,e]);return m.length===0?null:(0,H.jsx)(g_,{delayDuration:300,children:(0,H.jsx)(`div`,{className:`grid grid-cols-2 gap-x-3 gap-y-2.5`,children:m.map(t=>{let n=Wg(t,{node:e,themeValues:h.values,themeSource:h.source,computed:s}),r=t.kind===`color`||t.kind===`size`||t.kind===`prompt`;return(0,H.jsx)(`div`,{className:r?`col-span-2`:``,children:(0,H.jsx)(q_,{label:t.label,origin:n.origin,themeValue:n.themeValue,source:n.source,width:0,note:h.notes?.[t.id],onReset:n.origin===`changed`?()=>l(t,null):void 0,children:(0,H.jsx)(hv,{spec:t,value:n,colors:d,resolveColor:p,fonts:f,iconNames:u,measured:t.slot.via===`style`&&t.slot.key===`height`?c?.h??null:c?.w??null,onOpenPrompt:()=>void 0,onChange:(e,n)=>l(t,e,n)})})},t.id)})})})}var jC=/^[a-zA-Z][a-zA-Z0-9_-]*$/;function MC({initialValue:e,screenId:t,path:n}){let[r,i]=(0,P.useState)(e),[a,o]=(0,P.useState)(null);return(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5 text-xs`,children:[(0,H.jsxs)(`label`,{htmlFor:`velloo-node-id`,className:`flex items-center justify-between text-muted-foreground uppercase tracking-wider`,children:[(0,H.jsx)(`span`,{children:`Stable id`}),a?(0,H.jsx)(`span`,{className:`normal-case text-destructive`,children:a}):null]}),(0,H.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,H.jsx)(`span`,{className:`text-muted-foreground font-mono`,children:`@`}),(0,H.jsx)(Z,{id:`velloo-node-id`,type:`text`,inputMode:`text`,autoComplete:`off`,spellCheck:!1,value:r,placeholder:`(none)`,onChange:e=>{i(e.target.value),o(null)},onBlur:()=>{let a=r.trim();if(a!==e){if(a!==``&&!jC.test(a)){o(`letters/digits/_/- only, leading letter`);return}o(null),R.setNodeId({screenId:t,path:Cc(n),id:a===``?null:a}).catch(t=>{B(t,`Could not set node id`),i(e)})}},onKeyDown:t=>{t.key===`Enter`?(t.preventDefault(),t.currentTarget.blur()):t.key===`Escape`&&(i(e),o(null),t.currentTarget.blur())},"aria-invalid":a!==null,className:`flex-1 font-mono`})]})]})}var NC=`__velloo_unset__`,PC={held:!0};function FC(e,t){let n=e.trim();if(n===``)return{held:!1,value:void 0};let r=n.startsWith(`{`)||n.startsWith(`[`),i;try{i=JSON.parse(n)}catch{return r?PC:{held:!1,value:e}}return i===null||typeof i==`string`||(t?IC(i):typeof i==`object`)?{held:!1,value:i}:r?PC:{held:!1,value:e}}function IC(e){return _a(e)||Array.isArray(e)&&e.every(e=>typeof e==`string`||_a(e))}function LC(e,t){if(e==null)return``;let n=t&&RC(e)?e.$text:e;if(typeof n==`string`){let e=FC(n,t);if(!e.held&&e.value===n)return n}return JSON.stringify(e)}function RC(e){return typeof e==`object`&&!!e&&Object.keys(e).length===1&&typeof e.$text==`string`}function zC(e,t,n){return e===`node`?LC(t,n):t==null?``:typeof t==`string`?t:typeof t==`number`||typeof t==`boolean`?String(t):JSON.stringify(t)}function BC(e){let{kind:t,id:n,compact:r}=e,i=e.nodesOnly??!0,[a,o]=(0,P.useState)(()=>zC(t,e.initialValue,i)),[s,c]=(0,P.useState)(!!e.initialValue),l=t===`enum`&&!(e.enumValues&&e.enumValues.length>0)||t===`icon`&&!e.iconNames?`string`:t,u=r?`flex flex-col gap-1`:`flex flex-col gap-1.5`,d=(0,H.jsx)(K,{htmlFor:n,className:e.labelClassName??(r?`text-[10px]`:`text-xs`),children:e.label});if(l===`boolean`){let t=t=>{c(t),e.onCommit(t)};return(0,H.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,title:e.title,children:[d,(0,H.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,H.jsx)(aC,{id:n,checked:s,onCheckedChange:e=>t(!!e)}),(0,H.jsx)(`span`,{className:r?`text-[11px] text-muted-foreground`:`text-xs text-muted-foreground`,children:String(s)})]})]})}if(l===`icon`)return(0,H.jsxs)(`div`,{className:u,title:e.title,children:[d,(0,H.jsx)(B_,{value:a,options:e.iconNames??[],onChange:t=>{o(t),e.onCommit(t)}})]});if(l===`enum`){let t=e.enumValues??[],i=typeof t[0]==`number`;return(0,H.jsxs)(`div`,{className:u,title:e.title,children:[d,(0,H.jsxs)(q,{value:a===``?e.allowUnset?NC:``:a,onValueChange:t=>{if(t===NC){o(``),e.onCommit(void 0);return}o(t),e.onCommit(i?Number(t):t)},children:[(0,H.jsx)(Y,{id:n,size:`sm`,className:r?`text-xs`:`text-sm`,children:(0,H.jsx)(J,{placeholder:e.placeholder??`(unset)`})}),(0,H.jsxs)(vd,{children:[e.allowUnset?(0,H.jsx)(X,{value:NC,children:`(unset)`}):null,t.map(e=>(0,H.jsx)(X,{value:String(e),children:String(e)},String(e)))]})]})]})}if(l===`number`)return(0,H.jsxs)(`div`,{className:u,title:e.title,children:[d,(0,H.jsx)(Z,{id:n,type:`number`,value:a,min:e.min,max:e.max,step:e.step,placeholder:e.placeholder,onChange:t=>{if(o(t.target.value),t.target.value===``&&e.emptyAsUndefined){e.onCommit(void 0);return}let n=Number(t.target.value);Number.isFinite(n)&&e.onCommit(n)},className:r?`h-7 text-xs`:void 0})]});if(l===`color`){let t=t=>{o(t),e.onCommit(e.emptyAsUndefined&&t===``?void 0:t)};return(0,H.jsxs)(`div`,{className:u,title:e.title,children:[d,(0,H.jsxs)(`div`,{className:r?`flex items-center gap-1.5`:`flex items-center gap-2`,children:[(0,H.jsx)(`input`,{type:`color`,"aria-label":`${e.name} color picker`,value:a.startsWith(`#`)?a:`#000000`,onChange:e=>t(e.target.value),className:`h-7 w-9 shrink-0 cursor-pointer rounded-md border border-input bg-transparent`}),(0,H.jsx)(Z,{id:n,type:`text`,value:a,placeholder:e.placeholder,onChange:e=>t(e.target.value),className:r?`h-7 flex-1 font-mono text-xs`:`flex-1 font-mono`})]})]})}if(l===`node`){let t=FC(a,i).held;return(0,H.jsxs)(`div`,{className:u,title:e.title,children:[d,(0,H.jsx)(Z,{id:n,value:a,"aria-invalid":t||void 0,"aria-describedby":t?`${n}-held`:void 0,placeholder:e.placeholder??(i?`Text, or a node: {"$ref":"Card"}`:`Text, or JSON`),onChange:t=>{o(t.target.value);let n=FC(t.target.value,i);n.held||e.onCommit(n.value)},className:`h-7 font-mono text-[10px]`}),t?(0,H.jsx)(`p`,{id:`${n}-held`,className:`text-[10px] text-muted-foreground`,children:i?`Not saved — not a node yet. Write a node, a list, a quoted string, or plain text.`:`Not saved — not JSON yet.`}):null]})}return(0,H.jsxs)(`div`,{className:u,title:e.title,children:[d,(0,H.jsx)(Z,{id:n,type:`text`,value:a,placeholder:e.placeholder,onChange:t=>{o(t.target.value),e.onCommit(e.emptyAsUndefined&&t.target.value===``?void 0:t.target.value)},className:r?`h-7 text-xs`:void 0})]})}function VC(e){switch(e.control){case`boolean`:case`number`:case`color`:return e.control;case`icon`:case`enum`:return e.enumValues?e.control:`string`;default:return`string`}}function HC({descriptor:e,initialValue:t,onChange:n}){let r=VC(e);return(0,H.jsx)(BC,{kind:r,id:`prop-${e.name}`,name:e.name,label:(0,H.jsxs)(H.Fragment,{children:[e.name,e.optional?null:(0,H.jsx)(`span`,{className:`text-destructive`,children:` *`})]}),labelClassName:`text-xs font-medium text-muted-foreground capitalize`,initialValue:t,onCommit:n,emptyAsUndefined:!0,allowUnset:e.optional,enumValues:e.enumValues,iconNames:r===`icon`?e.enumValues:void 0,placeholder:r===`color`?`oklch(... 0 0) or #rrggbb`:void 0})}function UC({repo:e,entry:t}){let n=W(e=>e.repoCatalog),r=W(e=>t?e.repoStatus[t.id]:void 0),i=W(e=>e.openLibrary);hS(t?[t.id]:[]);let a=[e.exportName,e.member].filter(Boolean).join(`.`),o=t?n?.entries.find(e=>!e.identity.member&&e.identity.importPath===t.identity.importPath&&e.identity.exportName===t.identity.exportName&&e.identity.app===t.identity.app)?.id??t.id:null;return(0,H.jsxs)(`section`,{className:`flex flex-col gap-2 rounded-md border p-3`,"data-repo-block":``,children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs uppercase tracking-wider text-muted-foreground`,children:[(0,H.jsx)(Lt,{size:12,strokeWidth:2}),(0,H.jsx)(`span`,{className:`flex-1`,children:`App component`}),(0,H.jsx)(mS,{diagnostic:r})]}),(0,H.jsxs)(`dl`,{className:`grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 text-xs`,children:[(0,H.jsx)(`dt`,{className:`text-muted-foreground`,children:`Import`}),(0,H.jsx)(`dd`,{className:`font-mono truncate`,title:e.importPath,children:e.importPath}),(0,H.jsx)(`dt`,{className:`text-muted-foreground`,children:`Export`}),(0,H.jsx)(`dd`,{className:`font-mono truncate`,children:a}),e.app?(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(`dt`,{className:`text-muted-foreground`,children:`App`}),(0,H.jsx)(`dd`,{className:`font-mono truncate`,children:e.app})]}):null]}),r&&r.status!==`exact`&&r.note?(0,H.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:r.note}):null,t?(0,H.jsx)(`p`,{className:`text-xs text-muted-foreground`,"data-repo-styling":``,children:t.recipe?`Styled by ${t.recipe}'s theme — Velloo theme edits reach it through the recipe.`:`Styled by the app's own CSS.`}):n?(0,H.jsx)(`p`,{className:`text-xs text-muted-foreground`,"data-repo-missing":``,children:`This import is not in the catalog — it still renders from the app, but Velloo has no props or previews for it.`}):null,o?(0,H.jsxs)(G,{variant:`ghost`,size:`xs`,className:`self-start -ml-2 text-muted-foreground`,onClick:()=>i({kind:`repo`,id:o}),children:[(0,H.jsx)(bn,{}),`Open in Library`]}):null]})}function WC({props:e,values:t,hidden:n,fieldKey:r,onChange:i}){let[a,o]=(0,P.useState)(!1),s=e.filter(e=>e.serializable&&!e.slot&&!n.has(e.name)),c=s.filter(e=>!e.inherited),l=s.filter(e=>e.inherited);if(s.length===0)return null;let u=e=>(0,H.jsx)(HC,{descriptor:e,initialValue:t?.[e.name],onChange:t=>i(e.name,t)},`${r}:${e.name}`);return(0,H.jsxs)(`section`,{className:`flex flex-col gap-3`,"data-repo-props":``,children:[(0,H.jsx)(`div`,{className:`text-xs uppercase tracking-wider text-muted-foreground`,children:`Props`}),c.map(u),l.length>0?(0,H.jsxs)(Vb,{open:a,onOpenChange:o,children:[(0,H.jsxs)(Hb,{className:`flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground`,children:[(0,H.jsx)(Ht,{size:12,className:`transition-transform ${a?`rotate-90`:``}`}),l.length,` inherited prop`,l.length===1?``:`s`]}),(0,H.jsx)(Ub,{className:`mt-3 flex flex-col gap-3`,children:l.map(u)})]}):null]})}var GC=200;function KC({selection:e,node:t}){let n=W(e=>e.design)?.snippets.find(e=>e.id===t.$snippet),r=ch(),[i,a]=(0,P.useState)(null);(0,P.useEffect)(()=>{let e=!0;return ws(t.$snippet).then(t=>{e&&a(t)}).catch(()=>void 0),()=>{e=!1}},[t.$snippet]);let o=i?.params??n?.params??[],s=i?ya(i):null,c=OC(GC,e=>{R.updateSnippetArgs({screenId:e.screenId,path:Cc(e.path),argPatch:{[e.name]:e.value===void 0?null:e.value}}).catch(e=>B(e,`Could not update snippet arg`))}),l=(t,n)=>c({screenId:e.screenId,path:e.path,name:t,value:n});return(0,H.jsxs)(`div`,{className:`flex-1 flex flex-col overflow-hidden`,children:[(0,H.jsxs)(`header`,{className:`px-4 py-3 border-b`,children:[(0,H.jsxs)(`div`,{className:`font-semibold text-sm truncate`,children:[`@`,t.$snippet]}),(0,H.jsxs)(`div`,{className:`text-xs text-muted-foreground mt-0.5`,children:[e.screenId,` · `,e.path===``?`(root)`:e.path,` · snippet instance`]})]}),(0,H.jsxs)(`div`,{className:`flex-1 overflow-y-auto scroll-stable p-4 flex flex-col gap-4`,children:[n==null?(0,H.jsxs)(`div`,{className:`text-xs text-muted-foreground`,children:[`Snippet "`,t.$snippet,`" is not in the registry — the instance is dangling.`]}):o.length===0?(0,H.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`This snippet takes no params.`}):(0,H.jsxs)(`section`,{className:`flex flex-col gap-3`,children:[(0,H.jsx)(`div`,{className:`text-xs uppercase tracking-wider text-muted-foreground`,children:`Args`}),o.map(n=>(0,H.jsx)(YC,{param:n,initialValue:t.args?.[n.name],onChange:e=>l(n.name,e),nodesOnly:s?.has(n.name)??!0,lucideIconNames:r},`${e.screenId}:${e.path}:${n.name}`))]}),(0,H.jsx)(qC,{snippetId:t.$snippet,selection:e})]})]})}function qC({snippetId:e,selection:t}){let[n,r]=(0,P.useState)(null),i=W(e=>e.screenVersion),a=W(e=>e.selectScreen),o=W(e=>e.setSelection);if((0,P.useEffect)(()=>{let t=!0;return fetch(`/api/snippets/${encodeURIComponent(e)}/instances`).then(e=>e.ok?e.json():Promise.reject(Error(`${e.status}`))).then(e=>{t&&r(e.instances)}).catch(()=>{t&&r([])}),()=>{t=!1}},[e,i]),!n)return null;let s=n.filter(e=>e.hasOverride).length,c=e=>e.screenId===t.screenId&&e.path===t.path;return(0,H.jsxs)(`section`,{className:`flex flex-col gap-2 border-t pt-4`,children:[(0,H.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,H.jsx)(`div`,{className:`text-xs uppercase tracking-wider text-muted-foreground`,children:`Instances`}),(0,H.jsxs)(`div`,{className:`text-[10px] text-muted-foreground tabular-nums`,children:[n.length,` total · `,s,` with override`]})]}),n.length===0?(0,H.jsx)(`div`,{className:`text-[10px] text-muted-foreground`,children:`Not used yet — instantiate from the Snippets panel to see this list populate.`}):(0,H.jsx)(`ul`,{className:`flex flex-col gap-0.5`,children:n.map(e=>{let t=e.screenId.startsWith(`snippet:`),n=t?e.screenId.slice(8):e.screenId,r=c(e);return(0,H.jsx)(`li`,{children:(0,H.jsxs)(`button`,{type:`button`,disabled:t||r,onClick:async()=>{t||r||(await a(e.screenId),o({screenId:e.screenId,path:e.path}))},title:r?`This is the instance you're currently editing.`:t?`Used inside snippet "${n}" — open via Snippets list.`:`Jump to ${e.screenId} · ${e.path===``?`(root)`:e.path}`,className:r?`flex w-full items-center justify-between gap-2 rounded-md border border-primary bg-primary/10 px-1.5 py-1 text-left text-[10px] cursor-default`:`flex w-full items-center justify-between gap-2 rounded-md border bg-background px-1.5 py-1 text-left text-[10px] hover:bg-muted disabled:opacity-60`,children:[(0,H.jsxs)(`span`,{className:r?`truncate text-primary font-medium`:`truncate text-foreground`,children:[r?`● `:t?`↳ snippet: `:``,n]}),(0,H.jsx)(`span`,{className:`shrink-0 font-mono text-muted-foreground`,children:e.path===``?`(root)`:e.path}),e.hasOverride?(0,H.jsx)(`span`,{className:`shrink-0 rounded bg-primary/10 px-1 text-primary`,children:`override`}):null]})},`${e.screenId}:${e.path}`)})})]})}function JC(e){switch(e.type){case`string`:case`boolean`:case`number`:case`icon`:case`color`:case`node`:return e.type;case`enum`:return Array.isArray(e.enum)&&e.enum.length>0?`enum`:`string`}}function YC({param:e,initialValue:t,onChange:n,lucideIconNames:r,nodesOnly:i}){let a=JC(e);return(0,H.jsx)(BC,{kind:a,id:`snip-arg-${e.name}`,name:e.name,label:e.name,labelClassName:`text-xs`,title:e.description??void 0,initialValue:t,onCommit:n,enumValues:e.enum,iconNames:r,nodesOnly:i,min:e.min,max:e.max,step:e.step??1,placeholder:a===`enum`?`(choose)`:void 0})}function XC({selection:e,node:t}){let n=W(e=>e.design),r=W(t=>t.screens[e.screenId]),i=e.screenId.slice(8),a=n?.snippets.find(e=>e.id===i)?.params??[],o=a.filter(e=>e.type===`node`),s=a.filter(e=>e.type===`boolean`);return(0,H.jsxs)(`section`,{className:`flex flex-col gap-3 border-t pt-4`,children:[(0,H.jsx)(`div`,{className:`text-xs uppercase tracking-wider text-muted-foreground`,children:`Substitutions`}),(0,H.jsx)(ZC,{nodeParams:o.map(e=>e.name),onInsert:async t=>{if(!r)return;let n=structuredClone(r.tree),a=n;for(let t of Cc(e.path)){if(!a||!qi(a))return;a=a.children?.[t]}if(a&&qi(a)){a.children=[...a.children??[],{$param:t}];try{await I(`update_snippet`,{snippetId:i,patch:{tree:n}}),z({kind:`success`,message:`Inserted {$param: ${t}} slot`})}catch(e){B(e,`Could not insert param ref`)}}}}),(0,H.jsx)(QC,{node:t,boolParams:s.map(e=>e.name),onWrap:async(n,r)=>{let i=t.props?.[n];try{await R.updateProps({screenId:e.screenId,path:Cc(e.path),propPatch:{[n]:{$if:r,then:i??``,else:``}}}),z({kind:`success`,message:`${n} now branches on {$if: ${r}}`})}catch(e){B(e,`Could not add if branch`)}}})]})}function ZC({nodeParams:e,onInsert:t}){return e.length===0?(0,H.jsxs)(`div`,{className:`text-[11px] text-muted-foreground leading-relaxed`,children:[(0,H.jsx)(`span`,{className:`font-medium text-foreground`,children:`+ param ref`}),` — this snippet has no`,` `,(0,H.jsx)(`code`,{className:`text-[10px] font-mono px-1 py-0.5 rounded bg-muted`,children:`node`}),` param to slot in. Ask your agent to declare one.`]}):(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(K,{className:`text-xs`,children:`+ param ref`}),(0,H.jsxs)(q,{value:``,onValueChange:t,children:[(0,H.jsx)(Y,{size:`sm`,className:`text-xs`,"aria-label":`Insert a param-ref slot`,children:(0,H.jsx)(J,{placeholder:`Insert {$param} slot as child…`})}),(0,H.jsx)(vd,{children:e.map(e=>(0,H.jsx)(X,{value:e,children:`{$param: ${e}}`},e))})]})]})}function QC({node:e,boolParams:t,onWrap:n}){let[r,i]=(0,P.useState)(``),[a,o]=(0,P.useState)(``);if(t.length===0)return(0,H.jsxs)(`div`,{className:`text-[11px] text-muted-foreground leading-relaxed`,children:[(0,H.jsx)(`span`,{className:`font-medium text-foreground`,children:`+ if branch`}),` — this snippet has no`,` `,(0,H.jsx)(`code`,{className:`text-[10px] font-mono px-1 py-0.5 rounded bg-muted`,children:`boolean`}),` param to branch on. Ask your agent to declare one.`]});let s=new Set([`className`]);(!e.children||e.children.length===0)&&s.add(`children`);for(let[t,n]of Object.entries(e.props??{}))t!==`asChild`&&(typeof n!=`object`||!n)&&s.add(t);return(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(K,{className:`text-xs`,children:`+ if branch`}),(0,H.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,H.jsxs)(q,{value:r,onValueChange:i,children:[(0,H.jsx)(Y,{size:`sm`,className:`flex-1 text-xs`,"aria-label":`Prop to branch`,children:(0,H.jsx)(J,{placeholder:`prop`})}),(0,H.jsx)(vd,{children:[...s].map(e=>(0,H.jsx)(X,{value:e,children:e},e))})]}),(0,H.jsxs)(q,{value:a,onValueChange:o,children:[(0,H.jsx)(Y,{size:`sm`,className:`flex-1 text-xs`,"aria-label":`Boolean param`,children:(0,H.jsx)(J,{placeholder:`$if param`})}),(0,H.jsx)(vd,{children:t.map(e=>(0,H.jsx)(X,{value:e,children:e},e))})]}),(0,H.jsx)(G,{size:`xs`,variant:`outline`,className:`h-7 text-xs shrink-0`,disabled:r===``||a===``,onClick:()=>{n(r,a),i(``),o(``)},children:`Wrap`})]}),(0,H.jsxs)(`div`,{className:`text-[10px] text-muted-foreground leading-relaxed`,children:[`Wraps the prop's current value in `,(0,H.jsx)(`code`,{className:`font-mono`,children:`{$if, then, else}`}),` — tune the branches in the prop field after.`]})]})}function $C(e,t,n){switch(t){case`all`:e.top=e.right=e.bottom=e.left=n;break;case`x`:e.left=e.right=n;break;case`y`:e.top=e.bottom=n;break;default:e[t]=n}}function ew(e){return e===`all`?0:e===`x`||e===`y`?1:2}function tw(e){let{top:t,right:n,bottom:r,left:i}=e,a={};return t===void 0&&n===void 0&&r===void 0&&i===void 0?a:t!==void 0&&t===n&&n===r&&r===i?(a.all=t,a):(t!==void 0&&t===r?a.y=t:(t!==void 0&&(a.top=t),r!==void 0&&(a.bottom=r)),i!==void 0&&i===n?a.x=i:(i!==void 0&&(a.left=i),n!==void 0&&(a.right=n)),a)}var nw={padding:{box:`padding`,v:`all`},paddingTop:{box:`padding`,v:`top`},paddingRight:{box:`padding`,v:`right`},paddingBottom:{box:`padding`,v:`bottom`},paddingLeft:{box:`padding`,v:`left`},margin:{box:`margin`,v:`all`},marginTop:{box:`margin`,v:`top`},marginRight:{box:`margin`,v:`right`},marginBottom:{box:`margin`,v:`bottom`},marginLeft:{box:`margin`,v:`left`}},rw=[`display`,`flexDirection`,`justifyContent`,`alignItems`,`gap`,`width`,`height`,`fontFamily`,`fontSize`,`fontWeight`,`lineHeight`,`letterSpacing`,`textAlign`,`color`,`backgroundColor`,`borderRadius`],iw=new Set(rw);function aw(e){return iw.has(e)}function ow(e){return typeof e==`string`&&e.trim().includes(` `)}function sw(e){if(typeof e==`number`)return e;if(typeof e==`string`){let t=/^(-?\d*\.?\d+)px$/.exec(e.trim());if(t)return Number(t[1])}return null}function cw(e){let t={padding:{},margin:{}},n={},r=[];for(let[i,a]of Object.entries(e??{})){let e=nw[i];if(e&&(typeof a==`number`||typeof a==`string`)&&!(e.v===`all`&&ow(a))){r.push({box:e.box,v:e.v,val:a});continue}if(aw(i)&&(typeof a==`number`||typeof a==`string`)){t[i]=a;continue}n[i]=a}r.sort((e,t)=>ew(e.v)-ew(t.v));for(let e of r)$C(t[e.box],e.v,e.val);return{model:t,extra:n}}var lw={top:`Top`,right:`Right`,bottom:`Bottom`,left:`Left`};function uw(e,t,n){let{top:r,right:i,bottom:a,left:o}=t;if(r!==void 0||i!==void 0||a!==void 0||o!==void 0){if(r!==void 0&&r===i&&i===a&&a===o){n[e]=r;return}for(let r of[`top`,`right`,`bottom`,`left`]){let i=t[r];i!==void 0&&(n[`${e}${lw[r]}`]=i)}}}function dw({model:e,extra:t}){let n={};for(let t of rw){let r=e[t];r!==void 0&&(n[t]=r)}return uw(`padding`,e.padding,n),uw(`margin`,e.margin,n),Object.assign(n,t),n}var fw=[[`flex`],[`block`],[`grid`],[`inline-flex`],[`none`]],pw=[{value:`row`,icon:(0,H.jsx)(Mt,{className:`size-3.5`}),title:`row`},{value:`column`,icon:(0,H.jsx)(kt,{className:`size-3.5`}),title:`column`}],mw=[[`flex-start`,`start`],[`center`],[`flex-end`,`end`],[`space-between`,`between`],[`space-around`,`around`]],hw=[[`flex-start`,`start`],[`center`],[`flex-end`,`end`],[`stretch`]],gw=[[`400`],[`500`],[`600`],[`700`],[`300`]],_w=[{value:`left`,label:`L`},{value:`center`,label:`C`},{value:`right`,label:`R`},{value:`justify`,label:`J`}],vw=[`px`,`rem`,`em`,`%`,`vh`,`vw`,`—`],yw=e=>e===void 0?``:String(e);function bw(e){if(e===void 0)return{num:``,unit:`px`};if(typeof e==`number`)return{num:String(e),unit:`px`};let t=/^(-?\d*\.?\d+)(px|rem|em|%|vh|vw)?$/.exec(e.trim());return t?{num:t[1]??``,unit:t[2]??`—`}:{num:e,unit:`—`}}function xw(e,t){let n=e.trim();if(!n)return;let r=/^-?\d*\.?\d+$/.test(n);return t===`px`?r?Number(n):`${n}px`:t===`—`?r?Number(n):n:`${n}${t}`}function Sw(e){let t=e.trim();if(/^-?\d*\.?\d+$/.test(t))return Number(t);try{let e=JSON.parse(t);if(typeof e==`object`&&e)return e}catch{}return e}function Cw({initialValue:e,prop:t,screenId:n,path:r,debounceMs:i}){let[a,o]=(0,P.useState)(()=>cw(e)),[s,c]=(0,P.useState)(``),l=OC(i,e=>{let i=dw(e);R.updateProps({screenId:n,path:Cc(r),propPatch:{[t]:Object.keys(i).length?i:null}}).catch(e=>B(e,`Could not update styles`))}),u=e=>{o(e),l(e)},d=a.model,f=e=>u({...a,model:{...d,...e}}),p=e=>{let t=e.trim();if(t)return/^-?\d+(\.\d+)?$/.test(t)?Number(t):t},m=(e,t,n)=>f({[e]:{...d[e],[t]:p(n)}}),h=e=>{let t=sw(e);return t===null?yw(e):String(t)},g=e=>({top:h(e.top),right:h(e.right),bottom:h(e.bottom),left:h(e.left)}),_=e=>{let{num:t,unit:n}=bw(d[e]);return(0,H.jsx)(yb,{value:t,unit:n,units:vw,onChange:t=>f({[e]:xw(t,n)}),onUnitChange:n=>f({[e]:xw(t,n)}),className:`w-28`})},v=Object.entries(dw(a)),y=(e,t)=>u(cw({...dw(a),[e]:Sw(t)})),b=e=>{let{[e]:t,...n}=dw(a);u(cw(n))};return(0,H.jsxs)(`div`,{className:`-mx-4 -mb-4 flex flex-col`,children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-2 border-b bg-primary/5 px-3 py-2`,children:[(0,H.jsx)(At,{className:`size-3.5 text-primary`}),(0,H.jsx)(`span`,{className:`text-[11px] text-foreground`,children:`Controls ⇄ declarations — edit either side`})]}),(0,H.jsx)(_b,{title:`Box model`,children:(0,H.jsx)(wb,{contentLabel:`content`,padding:g(d.padding),margin:g(d.margin),onPadding:(e,t)=>m(`padding`,e,t),onMargin:(e,t)=>m(`margin`,e,t)})}),(0,H.jsxs)(_b,{title:`Layout`,children:[(0,H.jsx)($,{label:`display`,children:(0,H.jsx)(bb,{value:yw(d.display)||`—`,onChange:e=>f({display:e===`—`?void 0:e}),options:gb(fw,d.display)})}),(0,H.jsx)($,{label:`flexDirection`,children:(0,H.jsx)(vb,{value:yw(d.flexDirection)||void 0,onChange:e=>f({flexDirection:e}),options:pw})}),(0,H.jsx)($,{label:`justify`,children:(0,H.jsx)(bb,{value:yw(d.justifyContent)||`—`,onChange:e=>f({justifyContent:e===`—`?void 0:e}),options:gb(mw,d.justifyContent)})}),(0,H.jsx)($,{label:`alignItems`,children:(0,H.jsx)(bb,{value:yw(d.alignItems)||`—`,onChange:e=>f({alignItems:e===`—`?void 0:e}),options:gb(hw,d.alignItems)})}),(0,H.jsx)($,{label:`gap`,children:_(`gap`)})]}),(0,H.jsxs)(_b,{title:`Typography`,children:[(0,H.jsx)($,{label:`fontSize`,children:_(`fontSize`)}),(0,H.jsx)($,{label:`lineHeight`,children:_(`lineHeight`)}),(0,H.jsx)($,{label:`fontWeight`,children:(0,H.jsx)(bb,{value:yw(d.fontWeight)||`—`,onChange:e=>f({fontWeight:e===`—`?void 0:e}),options:gb(gw,d.fontWeight),className:`min-w-[5rem]`})}),(0,H.jsx)($,{label:`textAlign`,children:(0,H.jsx)(vb,{value:yw(d.textAlign)||void 0,onChange:e=>f({textAlign:e}),options:_w})}),(0,H.jsx)($,{label:`color`,children:(0,H.jsx)(Sb,{value:yw(d.color),onChange:e=>f({color:e||void 0}),placeholder:`var(--foreground)`})})]}),(0,H.jsxs)(_b,{title:`Appearance`,children:[(0,H.jsx)($,{label:`background`,children:(0,H.jsx)(Sb,{value:yw(d.backgroundColor),onChange:e=>f({backgroundColor:e||void 0}),placeholder:`var(--card)`})}),(0,H.jsx)($,{label:`radius`,children:_(`borderRadius`)})]}),(0,H.jsxs)(_b,{title:`Declarations (raw, synced)`,children:[v.map(([e,t])=>(0,H.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,H.jsx)(`span`,{className:`w-28 shrink-0 truncate font-mono text-[11px] text-muted-foreground`,children:e}),(0,H.jsx)(`input`,{value:typeof t==`string`?t:typeof t==`number`?String(t):JSON.stringify(t),spellCheck:!1,onChange:t=>y(e,t.target.value),className:`min-w-0 flex-1 h-6 rounded border border-input bg-background px-1.5 font-mono text-[11px] outline-none`}),(0,H.jsx)(`button`,{type:`button`,onClick:()=>b(e),className:`text-muted-foreground hover:text-foreground`,"aria-label":`remove ${e}`,children:(0,H.jsx)(Br,{className:`size-3`})})]},e)),v.length===0?(0,H.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:`no styles`}):null,(0,H.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,H.jsx)(nr,{className:`size-3 text-muted-foreground`}),(0,H.jsx)(yb,{value:s,onChange:c,className:`w-full`,placeholder:`property…`}),(0,H.jsx)(`button`,{type:`button`,onClick:()=>{let e=s.trim();!e||e in dw(a)||(u(cw({...dw(a),[e]:``})),c(``))},className:`text-[11px] text-muted-foreground hover:text-foreground`,children:`add`})]}),(0,H.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`A bare number is px (gap: 16); other units → a string ('0.875rem', '50vh'). Unitless props stay numbers (lineHeight: 1.5).`})]})]})}var ww={p:{box:`padding`,v:`all`},padding:{box:`padding`,v:`all`},px:{box:`padding`,v:`x`},py:{box:`padding`,v:`y`},pt:{box:`padding`,v:`top`},paddingTop:{box:`padding`,v:`top`},pr:{box:`padding`,v:`right`},paddingRight:{box:`padding`,v:`right`},pb:{box:`padding`,v:`bottom`},paddingBottom:{box:`padding`,v:`bottom`},pl:{box:`padding`,v:`left`},paddingLeft:{box:`padding`,v:`left`},m:{box:`margin`,v:`all`},margin:{box:`margin`,v:`all`},mx:{box:`margin`,v:`x`},my:{box:`margin`,v:`y`},mt:{box:`margin`,v:`top`},marginTop:{box:`margin`,v:`top`},mr:{box:`margin`,v:`right`},marginRight:{box:`margin`,v:`right`},mb:{box:`margin`,v:`bottom`},marginBottom:{box:`margin`,v:`bottom`},ml:{box:`margin`,v:`left`},marginLeft:{box:`margin`,v:`left`}},Tw=[`display`,`flexDirection`,`justifyContent`,`alignItems`,`gap`,`width`,`height`,`fontSize`,`fontWeight`,`lineHeight`,`letterSpacing`,`textAlign`,`typography`,`color`,`bgcolor`,`boxShadow`,`borderRadius`,`fontFamily`],Ew=new Set(Tw);function Dw(e){return Ew.has(e)}var Ow=8;function kw(e){if(typeof e==`number`)return e*Ow;if(typeof e==`string`){let t=/^(-?\d*\.?\d+)px$/.exec(e.trim());if(t)return Number(t[1])}return null}function Aw(e){return e%Ow===0?e/Ow:`${e}px`}function jw(e){let t={padding:{},margin:{}},n={},r=[];for(let[i,a]of Object.entries(e??{})){let e=ww[i];if(e&&(typeof a==`string`||typeof a==`number`)){r.push({box:e.box,v:e.v,val:a});continue}if(Dw(i)&&(typeof a==`string`||typeof a==`number`)){t[i]=a;continue}n[i]=a}r.sort((e,t)=>ew(e.v)-ew(t.v));for(let e of r)$C(t[e.box],e.v,e.val);return{model:t,extra:n}}function Mw(e,t,n){let r=tw(t),i={all:e,x:`${e}x`,y:`${e}y`,top:`${e}t`,right:`${e}r`,bottom:`${e}b`,left:`${e}l`};for(let[e,t]of Object.entries(r))t!==void 0&&(n[i[e]]=t)}function Nw({model:e,extra:t}){let n={};for(let t of Tw){let r=e[t];r!==void 0&&(n[t]=r)}return Mw(`p`,e.padding,n),Mw(`m`,e.margin,n),Object.assign(n,t),n}var Pw=[[`flex`],[`block`],[`grid`],[`inline-flex`],[`none`]],Fw=[{value:`row`,icon:(0,H.jsx)(Mt,{className:`size-3.5`}),title:`row`},{value:`column`,icon:(0,H.jsx)(kt,{className:`size-3.5`}),title:`column`}],Iw=[[`flex-start`,`start`],[`center`],[`flex-end`,`end`],[`space-between`,`between`],[`space-around`,`around`],[`space-evenly`,`evenly`]],Lw=[[`flex-start`,`start`],[`center`],[`flex-end`,`end`],[`stretch`],[`baseline`]],Rw=[[`normal`],[`medium`],[`semibold`],[`bold`],[`light`]],zw=[{value:`left`,label:`L`},{value:`center`,label:`C`},{value:`right`,label:`R`},{value:`justify`,label:`J`}],Bw=e=>e===void 0?``:String(e);function Vw(e){let t=e.trim();if(t)return/^-?\d+(\.\d+)?$/.test(t)?Number(t):t}function Hw(e){let t=kw(e);return t===null?Bw(e):String(t)}function Uw(e){let t=e.trim();if(t)return/^-?\d+(\.\d+)?$/.test(t)?Aw(Number(t)):t}function Ww({initialValue:e,prop:t,screenId:n,path:r,debounceMs:i}){let[a,o]=(0,P.useState)(()=>jw(e)),[s,c]=(0,P.useState)(``),l=OC(i,e=>{let i=Nw(e);R.updateProps({screenId:n,path:Cc(r),propPatch:{[t]:Object.keys(i).length?i:null}}).catch(e=>B(e,`Could not update styles`))}),u=e=>{o(e),l(e)},d=a.model,f=e=>u({...a,model:{...d,...e}}),p=(e,t,n)=>f({[e]:{...d[e],[t]:Uw(n)}}),m=e=>({top:Hw(e.top),right:Hw(e.right),bottom:Hw(e.bottom),left:Hw(e.left)}),h=Object.entries(a.extra),g=(e,t)=>{let n=t;try{n=JSON.parse(t)}catch{}u({...a,extra:{...a.extra,[e]:n}})},_=e=>{let{[e]:t,...n}=a.extra;u({...a,extra:n})},v=()=>{let e=s.trim();!e||e in a.extra||(u({...a,extra:{...a.extra,[e]:``}}),c(``))},y=JSON.stringify(Nw(a),null,2);return(0,H.jsxs)(`div`,{className:`-mx-4 -mb-4 flex flex-col`,children:[(0,H.jsxs)(_b,{title:`Layout`,children:[(0,H.jsx)($,{label:`display`,children:(0,H.jsx)(bb,{value:Bw(d.display)||`—`,onChange:e=>f({display:e===`—`?void 0:e}),options:gb(Pw,d.display)})}),(0,H.jsx)($,{label:`flexDirection`,children:(0,H.jsx)(vb,{value:Bw(d.flexDirection)||void 0,onChange:e=>f({flexDirection:e}),options:Fw})}),(0,H.jsx)($,{label:`justify`,children:(0,H.jsx)(bb,{value:Bw(d.justifyContent)||`—`,onChange:e=>f({justifyContent:e===`—`?void 0:e}),options:gb(Iw,d.justifyContent)})}),(0,H.jsx)($,{label:`alignItems`,children:(0,H.jsx)(bb,{value:Bw(d.alignItems)||`—`,onChange:e=>f({alignItems:e===`—`?void 0:e}),options:gb(Lw,d.alignItems)})}),(0,H.jsx)($,{label:`gap`,children:(0,H.jsx)(yb,{value:Hw(d.gap),onChange:e=>f({gap:Uw(e)}),unit:`px`})})]}),(0,H.jsxs)(_b,{title:`Spacing · theme.spacing ×8`,children:[(0,H.jsx)(wb,{contentLabel:`content`,padding:m(d.padding),margin:m(d.margin),onPadding:(e,t)=>p(`padding`,e,t),onMargin:(e,t)=>p(`margin`,e,t)}),(0,H.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`number → theme.spacing(n): 2 = 16px; off-grid → a px string.`})]}),(0,H.jsxs)(_b,{title:`Typography`,children:[(0,H.jsx)($,{label:`typography`,children:(0,H.jsx)(bb,{value:Bw(d.typography)||`—`,onChange:e=>f({typography:e===`—`?void 0:e}),options:gb([[`body1`],[`body2`],[`subtitle1`],[`subtitle2`],[`h6`],[`caption`]],d.typography),className:`min-w-[6rem]`})}),(0,H.jsx)($,{label:`fontSize`,children:(0,H.jsx)(yb,{value:Bw(d.fontSize),onChange:e=>f({fontSize:Vw(e)}),placeholder:`14`})}),(0,H.jsx)($,{label:`fontWeight`,children:(0,H.jsx)(bb,{value:Bw(d.fontWeight)||`—`,onChange:e=>f({fontWeight:e===`—`?void 0:e}),options:gb(Rw,d.fontWeight),className:`min-w-[6rem]`})}),(0,H.jsx)($,{label:`textAlign`,children:(0,H.jsx)(vb,{value:Bw(d.textAlign)||void 0,onChange:e=>f({textAlign:e}),options:zw})}),(0,H.jsx)($,{label:`color`,children:(0,H.jsx)(Sb,{value:Bw(d.color),onChange:e=>f({color:e||void 0}),placeholder:`text.primary`})})]}),(0,H.jsxs)(_b,{title:`Appearance`,children:[(0,H.jsx)($,{label:`bgcolor`,children:(0,H.jsx)(Sb,{value:Bw(d.bgcolor),onChange:e=>f({bgcolor:e||void 0}),placeholder:`background.paper`})}),(0,H.jsx)($,{label:`boxShadow`,children:(0,H.jsx)(yb,{value:Bw(d.boxShadow),onChange:e=>f({boxShadow:Vw(e)}),unit:`elev`})}),(0,H.jsx)($,{label:`borderRadius`,children:(0,H.jsx)(yb,{value:Bw(d.borderRadius),onChange:e=>f({borderRadius:Vw(e)})})})]}),(0,H.jsxs)(_b,{title:`Additional sx (raw)`,children:[(0,H.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`props the controls don't cover — pseudo-selectors, transitions, one-offs`}),h.map(([e,t])=>(0,H.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,H.jsx)(`span`,{className:`w-24 shrink-0 truncate font-mono text-[11px] text-muted-foreground`,children:e}),(0,H.jsx)(`input`,{defaultValue:typeof t==`string`?t:JSON.stringify(t),spellCheck:!1,onChange:t=>g(e,t.target.value),className:`min-w-0 flex-1 h-6 rounded border border-input bg-background px-1.5 font-mono text-[11px] outline-none`}),(0,H.jsx)(`button`,{type:`button`,onClick:()=>_(e),className:`text-muted-foreground hover:text-foreground`,"aria-label":`remove ${e}`,children:(0,H.jsx)(Br,{className:`size-3`})})]},e)),(0,H.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,H.jsx)(nr,{className:`size-3 text-muted-foreground`}),(0,H.jsx)(Tb,{placeholder:`property…`,value:s,onChange:c,onSubmit:v})]})]}),(0,H.jsx)(_b,{title:`sx (merged)`,defaultOpen:!1,children:(0,H.jsx)(Cb,{code:y})})]})}async function Gw(e,t,n){let r=e.typography.fontFamily??{},i=Object.entries(r).find(([,e])=>Oy(e)===n.family);if(i)return i[0];let a=qw(Kw(n.family),r);return await ic.setFonts(t,[jy(a,n)]),a}function Kw(e){let t=e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``);return/^[a-z]/.test(t)?t:`font-${t}`}function qw(e,t){if(!(e in t))return e;let n=2;for(;`${e}-${n}`in t;)n++;return`${e}-${n}`}function Jw({theme:e,tree:t,path:n,node:r}){let i=dg(e,t,n,r);if(!i)return null;let{resolved:a,overrides:o}=i;return(0,H.jsxs)(`section`,{className:`flex flex-col gap-2`,children:[(0,H.jsx)(`div`,{className:`text-xs uppercase tracking-wider text-muted-foreground`,children:`Typeset`}),(0,H.jsxs)(`div`,{className:`rounded-md border bg-background`,children:[(0,H.jsxs)(`div`,{className:`flex items-baseline gap-2 border-b px-2.5 py-2`,children:[(0,H.jsx)(`span`,{className:`rounded bg-muted px-1.5 py-0.5 font-mono text-[11px] font-semibold text-foreground`,children:i.role}),(0,H.jsxs)(`span`,{className:`truncate text-[10px] text-muted-foreground`,children:[`from `,i.via]})]}),(0,H.jsxs)(`div`,{className:`flex flex-col px-2.5 py-1.5`,children:[(0,H.jsx)($w,{label:`Size`,value:`${a.fontSize}px`,override:o.size}),(0,H.jsx)($w,{label:`Leading`,value:a.lineHeight.toFixed(2),override:o.leading}),(0,H.jsx)($w,{label:`Tracking`,value:a.letterSpacing,override:o.tracking}),(0,H.jsx)($w,{label:`Weight`,value:String(a.fontWeight),override:o.weight}),(0,H.jsx)($w,{label:`Face`,value:Xw(i),override:o.family,mono:i.face.role!==void 0})]})]}),Yw(o)?(0,H.jsx)(`p`,{className:`text-[10px] leading-snug text-amber-600 dark:text-amber-500`,children:`Every rung property is overridden here, so this node ignores the theme's ladder — a rhythm change in the Theme tab won't move it.`}):null,(0,H.jsxs)(`p`,{className:`text-[10px] leading-snug text-muted-foreground`,children:[Qw(i),` Change the rhythm or the faces in the Theme tab — it moves every node on this rung at once.`]}),i.responsive.length>0?(0,H.jsxs)(`p`,{className:`text-[10px] leading-snug text-muted-foreground/80`,children:[`Also `,(0,H.jsx)(`span`,{className:`font-mono text-foreground`,children:i.responsive.join(` `)}),` at wider breakpoints.`]}):null]})}function Yw(e){return[`size`,`leading`,`tracking`,`weight`].every(t=>e[t])}function Xw(e){let{slot:t,role:n,stack:r}=e.face;if(!n)return`inherited (${t})`;let i=r?Zw(r):null;return i?`${n} → ${i}`:n}function Zw(e){return/^\s*(?:"([^"]+)"|'([^']+)'|([^,]+))/.exec(e)?.slice(1).find(Boolean)?.trim()??e}function Qw(e){let{region:t}=e;if(!t)return`Resolved against the default typeset — no typeset region wraps this node.`;let n=t.via===`prose`?`a Prose ancestor`:`a typeset class on an ancestor`;return`Resolved against the ${t.name==="default"?`default`:t.name} typeset, applied by ${n}.`}function $w({label:e,value:t,override:n,mono:r}){return(0,H.jsxs)(`div`,{className:`flex items-baseline gap-2 py-1`,children:[(0,H.jsx)(`span`,{className:`w-16 shrink-0 text-[10px] text-muted-foreground`,children:e}),(0,H.jsx)(`span`,{title:t,className:n?`min-w-0 max-w-[45%] truncate font-mono text-[11px] text-muted-foreground/60 line-through`:`min-w-0 flex-1 truncate text-[11px] text-foreground${r?` font-mono`:``}`,children:t}),n?(0,H.jsx)(`span`,{title:`${n} overrides the ${e.toLowerCase()} this rung would set`,className:`min-w-0 flex-1 truncate font-mono text-[11px] text-foreground`,children:n}):null]})}var eT=200,tT=new Set([`className`,`asChild`,`children`]);function nT(){let e=W(e=>e.selection),t=W(e=>e.selectionComputed),n=lh(),r=W(e=>e.components),i=W(e=>e.repoCatalog),a=W(e=>e.screens),o=W(e=>e.styleChannel),s=W(e=>e.channelsByLibrary),c=W(e=>e.theme),l=W(e=>e.themeName),u=W(e=>e.browsingFaces),d=W(e=>e.setBrowsingFaces),f=W(e=>e.loadComponents),p=W(e=>e.loadGeneratedAssets);(0,P.useEffect)(()=>{f()},[f]),(0,P.useEffect)(()=>{p()},[p]);let m=(0,P.useMemo)(()=>Ec(a,e),[a,e]),h=e?a[e.screenId]?.tree:void 0,g=(0,P.useMemo)(()=>!m||!r||!qi(m)||sa(m)?null:r.find(e=>e.id===m.$ref)??null,[m,r]),_=(0,P.useMemo)(()=>m&&sa(m)?Ou(i,m.$repo):null,[m,i]),v=W(t=>vc(t.design,e?.screenId)),y=W(e=>g?e.libraryStatus[_c(v,g.id)]:null);gS(v,g?[g.id]:[]);let b=OC(eT,e=>{R.updateProps({screenId:e.screenId,path:Cc(e.path),propPatch:{[e.name]:e.value===void 0?null:e.value}}).catch(e=>B(e,`Could not update prop`))}),x=a_({selection:e,node:m,liveClasses:m?Bg(m):``}),S=Eh(t),C=n[0]??null;if(!e)return(0,H.jsx)(px,{size:`panel`,icon:Bn,title:`Nothing selected`,hint:`Click a node in the canvas to edit its props.`});if(!m)return(0,H.jsx)(px,{size:`panel`,icon:Pr,title:`Selection is gone`,hint:`The selected node is no longer in the tree.`});if(Ji(m))return(0,H.jsx)(KC,{selection:e,node:m});if(Xi(m))return(0,H.jsxs)(`div`,{className:`flex-1 flex flex-col overflow-hidden`,children:[(0,H.jsxs)(`header`,{className:`px-4 py-3 border-b`,children:[(0,H.jsx)(`div`,{className:`font-semibold text-sm truncate`,children:`Text`}),(0,H.jsxs)(`div`,{className:`text-xs text-muted-foreground mt-0.5`,children:[e.screenId,` · `,e.path]})]}),(0,H.jsxs)(`div`,{className:`flex-1 overflow-y-auto scroll-stable p-4 flex flex-col gap-4`,children:[(0,H.jsx)(kC,{initialValue:m.$text,screenId:e.screenId,path:e.path,debounceMs:eT,required:!0},`${e.screenId}:${e.path}:text`),(0,H.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Text beside other elements. It has no element of its own, so it takes the type and color of the element it sits in — select that to style it.`})]})]});if(!qi(m))return(0,H.jsx)(px,{size:`panel`,icon:Rt,title:`Not editable here`,hint:`$param placeholders are only addressable inside a snippet body — open the snippet to edit.`});let w=(t,n)=>b({screenId:e.screenId,path:e.path,name:t,value:n}),T=a[e.screenId]?.library,E=(T?s[T]:void 0)??o,D=sa(m)?m.$repo:null,O=_?.styleProps??[],k=O.includes(`sx`)?`sx`:O.includes(`style`)?`style`:null,A=D?O.includes(`className`)&&E?.kind===`tailwind-classname`:E?.kind!==`sx`&&E?.kind!==`style`,j=D?k??`className`:E?.prop??`className`,M=D?k:E?.kind,ee=M===`sx`||M===`style`,te=new Set([...tT,j,...O,...ng({node:m,descriptor:g}).controls.map(e=>e.slot.via===`prop`?e.slot.name:null).filter(e=>e!==null)]),ne=rg(m),re=`${e.screenId}:${e.path}`,ie=typeof m.props?.children==`string`?m.props.children:``,ae=typeof m.props?.children==`string`||(D?(_?.acceptsChildren??!0)&&!m.children?.length:g===null),oe=typeof m.props?.src==`string`?m.props.src:null,se=`${re}:${oe??``}`;if(u&&c){let t=h?dg(c,h,Cc(e.path),m):null,n=t?.overrides.family?.replace(/^font-/,``)??t?.face.role??t?.face.slot??`body`,r=c.typography.fontFamily?.[n];return(0,H.jsx)(`div`,{className:`flex-1 min-h-0`,children:(0,H.jsx)(wy,{role:n,current:r?Oy(r):void 0,onBack:()=>d(!1),onPick:t=>{d(!1);let n=e;Gw(c,l,t).then(e=>R.applyClasses({screenId:n.screenId,path:Cc(n.path),classes:Kg(typeof m.props?.className==`string`?m.props.className:``,`fontFamily`,e)})).catch(e=>B(e,`Could not set the face`))}})})}return(0,H.jsxs)(`div`,{className:`flex-1 flex flex-col overflow-hidden`,children:[(0,H.jsxs)(`header`,{className:`px-4 py-3 border-b`,children:[(0,H.jsxs)(`div`,{className:`font-semibold text-sm truncate`,children:[m.$ref,ne?(0,H.jsx)(`span`,{className:`ml-1.5 font-mono text-xs text-muted-foreground`,children:ne}):null,(0,H.jsx)(mS,{diagnostic:y,className:`ml-1.5 align-middle`})]}),(0,H.jsxs)(`div`,{className:`text-xs text-muted-foreground mt-0.5`,children:[e.screenId,` · `,e.path===``?`(root)`:e.path]})]}),(0,H.jsx)(iT,{},re),(0,H.jsxs)(`div`,{className:`flex-1 overflow-y-auto scroll-stable p-4 flex flex-col gap-4`,children:[D?(0,H.jsx)(UC,{repo:D,entry:_}):null,(0,H.jsx)(MC,{initialValue:pa(m)??``,screenId:e.screenId,path:e.path},`${re}:id`),ae?(0,H.jsx)(kC,{initialValue:ie,screenId:e.screenId,path:e.path,debounceMs:eT},`${re}:children`):null,oe===null?null:(0,H.jsx)(h_,{screenId:e.screenId,path:e.path,src:oe,nodeAspect:typeof m.props?.aspect==`string`?m.props.aspect:void 0},`${re}:image`),D&&!A?null:(0,H.jsxs)(`section`,{className:`flex flex-col gap-3`,children:[(0,H.jsx)(`div`,{className:`text-xs uppercase tracking-wider text-muted-foreground`,children:`Style`}),(0,H.jsx)(AC,{node:m,tree:h,path:e.path,theme:c,descriptor:g,snippet:null,classChannel:A,computed:S,measured:C,onChange:x},`${re}:style`)]}),c&&h?(0,H.jsx)(Jw,{theme:c,tree:h,path:Cc(e.path),node:m}):null,_?(0,H.jsx)(WC,{props:_.props,values:m.props,hidden:te,fieldKey:se,onChange:w}):null,g&&g.props.filter(e=>!te.has(e.name)).length>0?(0,H.jsxs)(`section`,{className:`flex flex-col gap-3`,children:[(0,H.jsx)(`div`,{className:`text-xs uppercase tracking-wider text-muted-foreground`,children:`Props`}),g.props.filter(e=>!te.has(e.name)).map(e=>(0,H.jsx)(HC,{descriptor:e,initialValue:m.props?.[e.name],onChange:t=>w(e.name,t)},`${se}:${e.name}`))]}):null,e.screenId.startsWith(`snippet:`)?(0,H.jsx)(XC,{selection:e,node:m},`${re}:subs`):null,ee?(()=>{let t=m.props?.[j]&&typeof m.props[j]==`object`?m.props[j]:void 0,n=`${re}:${j}`,r={initialValue:t,prop:j,screenId:e.screenId,path:e.path,debounceMs:eT};return M===`sx`?(0,H.jsx)(Ww,{...r},n):(0,H.jsx)(Cw,{...r},n)})():null]})]})}var rT=[`default`,`hover`,`focus`,`active`,`disabled`];function iT(){let e=W(e=>e.nodeState),t=W(e=>e.setNodeState);return(0,P.useEffect)(()=>(t(`default`),()=>t(`default`)),[t]),(0,H.jsxs)(`div`,{className:`px-4 py-2 border-b flex items-center gap-2`,children:[(0,H.jsx)(K,{htmlFor:`node-state`,className:`text-xs uppercase tracking-wider text-muted-foreground`,children:`State`}),(0,H.jsxs)(q,{value:e,onValueChange:e=>t(e),children:[(0,H.jsx)(Y,{id:`node-state`,size:`sm`,className:`flex-1 text-xs`,children:(0,H.jsx)(J,{})}),(0,H.jsx)(vd,{children:rT.map(e=>(0,H.jsx)(X,{value:e,children:e},e))})]})]})}function aT(e,t){return t?`${e} — ${t}`:e}function oT({side:e,expandLabel:t,hotkey:n,onExpand:r,actions:i=[]}){return(0,H.jsxs)(`div`,{className:`flex h-full w-full flex-col items-center gap-1 py-2`,children:[(0,H.jsx)(G,{variant:`ghost`,size:`icon-sm`,onClick:r,title:aT(t,n),"aria-label":t,"aria-expanded":!1,children:e===`left`?(0,H.jsx)(qn,{}):(0,H.jsx)(Yn,{})}),i.length>0?(0,H.jsx)(`div`,{className:`my-1 h-px w-4 shrink-0 bg-border`}):null,i.map(e=>(0,H.jsxs)(G,{variant:`ghost`,size:`icon-sm`,onClick:e.onClick,title:e.dot?`${e.label} — ${e.dot.title}`:e.label,"aria-label":e.label,className:`relative ${e.active?`bg-accent text-accent-foreground`:`text-muted-foreground`}`,children:[e.icon,e.dot?(0,H.jsx)(`span`,{"data-rail-dot":e.label,className:`absolute right-1 top-1 size-1.5 rounded-full bg-primary`}):null]},e.label))]})}function sT({side:e,label:t,hotkey:n,onCollapse:r}){return(0,H.jsx)(G,{variant:`ghost`,size:`icon-sm`,onClick:r,title:aT(t,n),"aria-label":t,"aria-expanded":!0,className:`shrink-0 text-muted-foreground`,children:e===`left`?(0,H.jsx)(Kn,{}):(0,H.jsx)(Jn,{})})}function cT({side:e,width:t,onCommit:n,paneRef:r}){let i=(0,P.useRef)(null),a=e=>{let t=r.current;t&&(t.style.width=`${e}px`)},o=e=>{e.button===0&&(e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),i.current={startX:e.clientX,startWidth:t,width:t},document.body.classList.add(`velloo-resizing`))},s=t=>{let n=i.current;if(!n)return;let r=e===`left`?t.clientX-n.startX:n.startX-t.clientX;n.width=Zc(n.startWidth+r),a(n.width)},c=e=>{let t=i.current;t&&(i.current=null,e.currentTarget.hasPointerCapture(e.pointerId)&&e.currentTarget.releasePointerCapture(e.pointerId),document.body.classList.remove(`velloo-resizing`),n(t.width))},l=(e,r)=>{let i=r?48:16;n(Zc(t+(e?-i:i)))},u=t=>{t.key===`ArrowLeft`?(t.preventDefault(),l(e===`left`,t.shiftKey)):t.key===`ArrowRight`?(t.preventDefault(),l(e===`right`,t.shiftKey)):(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),n(Xc.default))},d=`Resize ${e===`left`?`sidebar`:`inspector`}`;return(0,H.jsx)(`div`,{role:`separator`,"aria-orientation":`vertical`,"aria-label":d,"aria-valuenow":t,"aria-valuemin":Xc.min,"aria-valuemax":Xc.max,tabIndex:0,title:`${d} — double-click to reset`,onPointerDown:o,onPointerMove:s,onPointerUp:c,onPointerCancel:c,onDoubleClick:()=>{a(Xc.default),n(Xc.default)},onKeyDown:u,className:`group absolute inset-y-0 z-10 w-1.5 cursor-col-resize pointer-events-auto outline-none `+(e===`left`?`right-0`:`left-0`),children:(0,H.jsx)(`div`,{className:`h-full w-px bg-transparent transition-colors group-hover:bg-primary/60 group-focus-visible:bg-primary `+(e===`left`?`ml-auto`:`mr-auto`)})})}var lT=36,uT=200;function dT({side:e,collapsed:t,width:n,onResize:r,rail:i,contentDisabled:a=!1,children:o}){let s=fT(t),c=(0,P.useRef)(null);return(0,H.jsx)(`aside`,{ref:c,"data-pane":e,"data-collapsed":t,style:{width:t?lT:n},className:`relative h-full shrink-0 overflow-hidden bg-card `+(e===`left`?`border-r `:`border-l `)+(s?`transition-[width] duration-200 ease-out`:``),children:t&&!s?i:(0,H.jsxs)(H.Fragment,{children:[t?null:(0,H.jsx)(cT,{side:e,width:n,onCommit:r,paneRef:c}),(0,H.jsx)(`div`,{style:{width:t||s?n:`100%`},className:`absolute inset-y-0 flex flex-col ${e===`left`?`left-0`:`right-0`} `+(a?`opacity-50 pointer-events-none select-none`:``),"aria-disabled":a||void 0,children:o})]})})}function fT(e){let t=mT(),[n,r]=(0,P.useState)(e),[i,a]=(0,P.useState)(!1);return n!==e&&(r(e),a(!t)),(0,P.useEffect)(()=>{if(!i)return;let e=setTimeout(()=>a(!1),uT);return()=>clearTimeout(e)},[i]),i}var pT=`(prefers-reduced-motion: reduce)`;function mT(){let[e,t]=(0,P.useState)(()=>typeof matchMedia==`function`&&matchMedia(pT).matches);return(0,P.useEffect)(()=>{if(typeof matchMedia!=`function`)return;let e=matchMedia(pT),n=()=>t(e.matches);return e.addEventListener(`change`,n),()=>e.removeEventListener(`change`,n)},[]),e}function hT({from:e,existing:t,onClose:n}){let r=W(e=>e.startTheme),[i,a]=(0,P.useState)(``),[o,s]=(0,P.useState)(!1),c=Pa(i),l=Fa(c,t),u=c===``?null:l,d=async()=>{if(!(l||o)){s(!0);try{await r(c),n()}catch(e){B(e,`Could not create the theme`),s(!1)}}};return(0,H.jsx)(ud,{open:!0,onOpenChange:e=>{!e&&!o&&n()},children:(0,H.jsx)(pd,{"data-testid":`new-theme`,className:`sm:max-w-md`,children:(0,H.jsxs)(`form`,{className:`flex flex-col gap-4`,onSubmit:e=>{e.preventDefault(),d()},children:[(0,H.jsxs)(md,{children:[(0,H.jsx)(gd,{children:`New theme`}),(0,H.jsxs)(_d,{children:[`It starts as a copy of `,vy(e),`. Next you choose its colour, type and shape; this board switches to it when you are done.`]})]}),(0,H.jsxs)(zp,{"data-invalid":u?!0:void 0,children:[(0,H.jsx)(Vp,{htmlFor:`new-theme-name`,children:`Name`}),(0,H.jsx)(Z,{id:`new-theme-name`,autoFocus:!0,autoComplete:`off`,spellCheck:!1,value:i,placeholder:`Night`,"aria-invalid":u?!0:void 0,"aria-describedby":`new-theme-name-help`,onChange:e=>a(e.target.value)}),u?(0,H.jsx)(Up,{id:`new-theme-name-help`,children:u}):(0,H.jsxs)(Hp,{id:`new-theme-name-help`,children:[`Saved as theme/`,c||`Night`,`.json — the name your agent uses for it too.`]})]}),(0,H.jsxs)(hd,{children:[(0,H.jsx)(G,{type:`button`,variant:`ghost`,onClick:n,disabled:o,children:`Cancel`}),(0,H.jsx)(G,{type:`submit`,disabled:l!==null||o,children:`Create and define`})]})]})})})}function gT(){let e=W(e=>e.currentBoardId),t=W(e=>e.themeName),n=W(e=>e.folderConfig),r=W(e=>e.loadFolderConfig),[i,a]=(0,P.useState)(!1);(0,P.useEffect)(()=>{r()},[r]);let o=n?.themes??[`default`],s=o.includes(t)?o:[...o,t],c=async n=>{if(e&&n!==t)try{await R.updateBoard({boardId:e,patch:{theme:n==="default"?null:n}})}catch(e){B(e,`Could not switch the theme`)}};return(0,H.jsxs)(`div`,{className:`mb-3 flex flex-col gap-1.5 rounded-md border bg-muted/40 p-2`,children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,H.jsx)(`span`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground`,children:`Theme`}),(0,H.jsx)(bb,{value:t,onChange:e=>void c(e),options:s.map(e=>[e,vy(e)]),className:`ml-auto min-w-[8rem]`,label:`Theme this board uses`}),(0,H.jsx)(`button`,{type:`button`,onClick:()=>a(!0),disabled:!e,title:`New theme`,"aria-label":`New theme`,className:`size-7 shrink-0 grid place-items-center rounded-md border border-input bg-background text-muted-foreground hover:text-foreground disabled:opacity-40 disabled:cursor-not-allowed cursor-pointer`,children:(0,H.jsx)(nr,{size:13})})]}),(0,H.jsx)(`span`,{className:`text-[10px] leading-snug text-muted-foreground`,children:e?t==="default"?`The theme every board uses unless it picks another. Edits here reach all of those.`:`This board uses ${t}. Edits here leave boards on other themes alone.`:`No board selected.`}),i?(0,H.jsx)(hT,{from:t,existing:s,onClose:()=>a(!1)}):null]})}function _T({className:e,...t}){return(0,H.jsx)(Je,{"data-slot":`accordion`,className:V(`flex w-full flex-col`,e),...t})}function vT({className:e,...t}){return(0,H.jsx)(et,{"data-slot":`accordion-item`,className:V(`not-last:border-b`,e),...t})}function yT({className:e,children:t,...n}){return(0,H.jsx)(Ie,{className:`flex`,children:(0,H.jsxs)(Be,{"data-slot":`accordion-trigger`,className:V(`group/accordion-trigger relative flex flex-1 items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:after:border-ring disabled:pointer-events-none disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground`,e),...n,children:[t,(0,H.jsx)(Vt,{"data-slot":`accordion-trigger-icon`,className:`pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden`}),(0,H.jsx)(Ut,{"data-slot":`accordion-trigger-icon`,className:`pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline`})]})})}function bT({className:e,children:t,...n}){return(0,H.jsx)(Ne,{"data-slot":`accordion-content`,className:`overflow-hidden text-sm data-open:animate-accordion-down data-closed:animate-accordion-up`,...n,children:(0,H.jsx)(`div`,{className:V(`h-(--radix-accordion-content-height) pt-0 pb-2.5 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4`,e),children:t})})}var xT=`velloo:theme-panel:sections`,ST=[`colour`,`type`,`shape`],CT=[`colour`];function wT(){if(typeof localStorage>`u`)return CT;let e=localStorage.getItem(xT);if(!e)return CT;try{let t=JSON.parse(e);if(Array.isArray(t)){let e=t.filter(e=>ST.includes(e));return e.length>0||t.length===0?e:CT}}catch{}return CT}function TT({theme:e}){let t=W(e=>e.themeName),n=W(e=>e.refreshTheme),r=W(e=>e.openLanguage),i=W(e=>e.designMode),a=W(e=>e.setDesignMode),[o,s]=(0,P.useState)(()=>wT()),[c,l]=(0,P.useState)(null);if((0,P.useEffect)(()=>{typeof localStorage>`u`||localStorage.setItem(xT,JSON.stringify(o))},[o]),c!==null){let r=e.typography.fontFamily?.[c];return(0,H.jsx)(`div`,{className:`flex-1 min-h-0`,children:(0,H.jsx)(wy,{role:c,current:r?Oy(r):void 0,onBack:()=>l(null),onPick:e=>{l(null),ic.setFonts(t,[jy(c,e)]).catch(e=>{B(e,`Could not set the face`),n()})}})})}let u=`text-xs uppercase tracking-wider text-muted-foreground hover:no-underline`;return(0,H.jsxs)(`div`,{className:`flex-1 overflow-y-auto scroll-stable p-4`,children:[(0,H.jsx)(gT,{}),(0,H.jsxs)(G,{variant:`outline`,size:`sm`,className:`mb-3 w-full justify-start`,title:`The whole language: its rules in words, on a specimen of your components`,onClick:()=>void r(`review`).catch(e=>B(e,`Could not open`)),children:[(0,H.jsx)(Er,{}),`Open the design language`]}),(0,H.jsxs)(_T,{type:`multiple`,value:o,onValueChange:e=>s(e),className:`flex flex-col gap-1`,children:[(0,H.jsxs)(vT,{value:`colour`,children:[(0,H.jsx)(yT,{className:u,children:`Colour`}),(0,H.jsx)(bT,{children:(0,H.jsx)(rx,{theme:e,scheme:i,onSchemeChange:a})})]}),(0,H.jsxs)(vT,{value:`type`,children:[(0,H.jsx)(yT,{className:u,children:`Type`}),(0,H.jsx)(bT,{children:(0,H.jsx)(ix,{theme:e,onBrowse:l})})]}),(0,H.jsxs)(vT,{value:`shape`,children:[(0,H.jsx)(yT,{className:u,children:`Shape`}),(0,H.jsx)(bT,{children:(0,H.jsx)(nb,{theme:e})})]})]})]})}function ET({screenId:e}){let t=W(e=>e.rightTab),n=W(e=>e.setRightTab),r=W(e=>e.selection),i=W(e=>e.selectionIntent),a=W(e=>e.pendingCommentAnchor),o=W(e=>e.activeCommentId),s=W(e=>e.theme),c=W(e=>e.cursorMode),l=W(e=>e.wsConnected),u=W(e=>e.rightPaneCollapsed),d=W(e=>e.setRightPaneCollapsed),f=W(e=>e.rightPaneWidth),p=W(e=>e.setRightPaneWidth);(0,P.useEffect)(()=>{r&&i===`inspect`&&!a&&!o&&c!==`comment`&&n(`node`)},[r,i,a,o,c,n]);let m=c===`hand`,h=e=>{n(e),d(!1)};return(0,H.jsxs)(dT,{side:`right`,collapsed:u,width:f,onResize:p,contentDisabled:!l,rail:(0,H.jsx)(oT,{side:`right`,expandLabel:`Expand inspector`,hotkey:`]`,onExpand:()=>d(!1),actions:[{icon:(0,H.jsx)(yr,{}),label:`Node`,active:t===`node`,onClick:()=>h(`node`)},{icon:(0,H.jsx)(Pn,{}),label:`Comments`,active:t===`comments`,onClick:()=>h(`comments`)},{icon:(0,H.jsx)(Wn,{}),label:`Theme`,active:t===`theme`,onClick:()=>h(`theme`)}]}),children:[(0,H.jsxs)(`div`,{className:`border-b p-2 flex items-center gap-1`,children:[(0,H.jsx)(sT,{side:`right`,label:`Collapse inspector`,hotkey:`]`,onCollapse:()=>d(!0)}),(0,H.jsx)(H_,{value:t,onValueChange:e=>n(e),className:`min-w-0 flex-1`,children:(0,H.jsxs)(W_,{className:`w-full h-8`,children:[(0,H.jsxs)(G_,{value:`node`,className:`text-xs`,children:[(0,H.jsx)(yr,{}),`Node`]}),(0,H.jsxs)(G_,{value:`theme`,className:`text-xs`,children:[(0,H.jsx)(Wn,{}),`Theme`]}),(0,H.jsxs)(G_,{value:`comments`,className:`text-xs`,children:[(0,H.jsx)(Pn,{}),`Comments`]})]})})]}),t===`comments`?(0,H.jsx)(EC,{}):t===`node`?m?(0,H.jsx)(DT,{children:`Hand tool active. Drag to pan; press V or Esc to return to select.`}):e?(0,H.jsx)(nT,{}):(0,H.jsx)(DT,{children:`No screen selected.`}):s?(0,H.jsx)(TT,{theme:s}):(0,H.jsx)(DT,{children:(0,H.jsx)(ih,{size:24,label:`Loading theme…`,className:`flex-col`})})]})}function DT({children:e}){return(0,H.jsx)(Ku,{className:`flex-1 p-6`,children:(0,H.jsx)(Zu,{className:`text-xs`,children:e})})}function OT({className:e,...t}){return(0,H.jsx)(`kbd`,{"data-slot":`kbd`,className:V(`pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm bg-muted px-1 font-sans text-xs font-medium text-muted-foreground select-none in-data-[slot=tooltip-content]:bg-background/20 in-data-[slot=tooltip-content]:text-background dark:in-data-[slot=tooltip-content]:bg-background/10 [&_svg:not([class*='size-'])]:size-3`,e),...t})}function kT({className:e,...t}){return(0,H.jsx)(`kbd`,{"data-slot":`kbd-group`,className:V(`inline-flex items-center gap-1`,e),...t})}var AT=[`all`,`boards`,`screens`,`text`];function jT(){let e=W(e=>e.searchOpen),t=W(e=>e.setSearchOpen),[n,r]=(0,P.useState)(``),[i,a]=(0,P.useState)(null),[o,s]=(0,P.useState)(`all`),[c,l]=(0,P.useState)(0),u=(0,P.useRef)(0),d=(0,P.useRef)(null);(0,P.useEffect)(()=>{e&&(r(``),a(null),s(`all`),l(0))},[e]),(0,P.useEffect)(()=>{if(!e)return;let t=n.trim();if(t===``){a(null);return}let r=setTimeout(()=>{let e=++u.current;ec(t).then(t=>{e===u.current&&(a(t),l(0))}).catch(()=>{})},120);return()=>clearTimeout(r)},[n,e]);let f=(0,P.useMemo)(()=>i?{boards:o===`all`||o===`boards`?i.boards:[],screens:o===`all`||o===`screens`?i.screens:[],text:o===`all`||o===`text`?i.text:[]}:{boards:[],screens:[],text:[]},[i,o]),p=(0,P.useMemo)(()=>[...f.boards.map(e=>({kind:`board`,hit:e})),...f.screens.map(e=>({kind:`screen`,hit:e})),...f.text.map(e=>({kind:`text`,hit:e}))],[f]),m=Math.min(c,Math.max(0,p.length-1));(0,P.useEffect)(()=>{d.current?.querySelector(`[data-result-index="${m}"]`)?.scrollIntoView({block:`nearest`})},[m]);let h=async e=>{t(!1);let n=W.getState();if(n.view!==`boards`&&n.setView(`boards`),e.kind===`board`){await n.selectBoard(e.hit.id);return}let r=e.kind===`screen`?e.hit.id:e.hit.screenId,i=e.kind===`screen`?e.hit.boards:e.hit.board?[e.hit.board]:[],a=i.some(e=>e.id===n.currentBoardId)?n.currentBoardId:i[0]?.id??null;if(a&&a!==n.currentBoardId&&await n.selectBoard(a),e.kind===`screen`?await n.selectScreen(r):W.getState().revealSelection({screenId:r,path:wc(e.hit.path)}),!a)return;let o=W.getState().boards[a]?.frames.find(e=>e.screen===r);o&&requestAnimationFrame(()=>W.getState().centerOnFrame(o.id))},g=e=>{if(e.key===`ArrowDown`)e.preventDefault(),l(e=>Math.min(e+1,Math.max(0,p.length-1)));else if(e.key===`ArrowUp`)e.preventDefault(),l(e=>Math.max(e-1,0));else if(e.key===`Enter`){e.preventDefault();let t=p[m];t&&h(t)}else if(e.key===`Tab`){e.preventDefault();let t=e.shiftKey?AT.length-1:1;s(e=>AT[(AT.indexOf(e)+t)%AT.length]??`all`),l(0)}},_=i?.query??``,v=i?i.boards.length+i.screens.length+i.textTotal:0,y=i?{all:v,boards:i.boards.length,screens:i.screens.length,text:i.textTotal}:null,b=-1;return(0,H.jsx)(ud,{open:e,onOpenChange:t,children:(0,H.jsxs)(pd,{"aria-describedby":void 0,onKeyDown:g,className:`top-[16%] max-w-[680px] translate-y-0 gap-0 overflow-hidden p-0 [&>[data-slot=dialog-close]]:hidden`,children:[(0,H.jsx)(gd,{className:`sr-only`,children:`Search boards, screens, and text`}),(0,H.jsxs)(Rf,{className:`h-[52px] rounded-none border-0 border-b shadow-none has-[[data-slot=input-group-control]:focus-visible]:ring-0`,children:[(0,H.jsx)(Bf,{children:(0,H.jsx)(ur,{size:17,className:`shrink-0 text-muted-foreground`})}),(0,H.jsx)(Uf,{autoFocus:!0,value:n,onChange:e=>r(e.target.value),placeholder:`Search boards, screens, and text…`,className:`text-[15px]`}),(0,H.jsx)(Bf,{align:`inline-end`,children:(0,H.jsx)(OT,{children:`esc`})})]}),y?(0,H.jsx)(Zp,{type:`single`,value:o,onValueChange:e=>{e&&(s(e),l(0))},"aria-label":`Result filter`,className:`justify-start gap-1.5 border-b px-3 py-2`,children:AT.map(e=>(0,H.jsxs)(Qp,{value:e,className:`rounded-full bg-muted px-2.5 text-[11px] capitalize data-[state=on]:bg-foreground data-[state=on]:font-medium data-[state=on]:text-background`,children:[e===`all`?`All`:e,` `,y[e]]},e))}):null,(0,H.jsx)(`div`,{ref:d,className:`max-h-[380px] overflow-y-auto scroll-stable pb-1.5`,children:i?p.length===0?(0,H.jsx)(Ku,{className:`p-6`,children:(0,H.jsxs)(qu,{children:[(0,H.jsx)(Yu,{variant:`icon`,children:(0,H.jsx)(lr,{})}),(0,H.jsxs)(Xu,{children:[`No matches for “`,_,`”.`]})]})}):(0,H.jsxs)(H.Fragment,{children:[f.boards.length>0?(0,H.jsx)(MT,{children:`Boards`}):null,f.boards.map(e=>{b+=1;let t=b;return(0,H.jsxs)(NT,{index:t,active:t===m,onPick:()=>void h({kind:`board`,hit:e}),onHover:()=>l(t),children:[e.archived?(0,H.jsx)(Ot,{size:16,className:`shrink-0 text-muted-foreground`,"aria-label":`Archived board`}):(0,H.jsx)(yn,{size:16,className:`shrink-0 text-muted-foreground`}),(0,H.jsx)(`span`,{className:`truncate text-[13.5px] ${e.archived?`text-muted-foreground`:``}`,children:(0,H.jsx)(PT,{text:e.name,query:_})}),(0,H.jsxs)(`span`,{className:`ml-auto shrink-0 text-[11.5px] text-muted-foreground`,children:[e.archived?`Archived · `:``,e.frameCount,` frame`,e.frameCount===1?``:`s`]})]},e.id)}),f.screens.length>0?(0,H.jsx)(MT,{children:`Screens`}):null,f.screens.map(e=>{b+=1;let t=b;return(0,H.jsxs)(NT,{index:t,active:t===m,onPick:()=>void h({kind:`screen`,hit:e}),onHover:()=>l(t),children:[(0,H.jsx)(sn,{size:16,className:`shrink-0 text-muted-foreground`}),(0,H.jsx)(`span`,{className:`truncate text-[13.5px]`,children:(0,H.jsx)(PT,{text:e.name,query:_})}),(0,H.jsx)(`span`,{className:`ml-auto shrink-0 text-[11.5px] text-muted-foreground`,children:e.boards.map(e=>e.name).join(` · `)||`Not on a board`})]},e.id)}),f.text.length>0?(0,H.jsx)(MT,{children:`Text matches`}):null,f.text.map(e=>{b+=1;let t=b;return(0,H.jsx)(NT,{index:t,active:t===m,onPick:()=>void h({kind:`text`,hit:e}),onHover:()=>l(t),tall:!0,children:(0,H.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,H.jsxs)(`p`,{className:`truncate text-[13px]`,children:[`“`,e.excerpt.slice(0,e.matchStart),(0,H.jsx)(`mark`,{className:`rounded-[3px] bg-primary/15 px-0.5 font-medium text-primary`,children:e.excerpt.slice(e.matchStart,e.matchEnd)}),e.excerpt.slice(e.matchEnd),`”`]}),(0,H.jsxs)(`p`,{className:`truncate text-[11px] text-muted-foreground`,children:[e.board?`${e.board.name} › `:``,e.screenName,` › `,e.ref,e.nodeId?` @${e.nodeId}`:``,e.prop===`children`?``:` · ${e.prop}`]})]})},`${e.screenId}:${e.path.join(`.`)}`)}),i.textTotal>f.text.length&&(o===`all`||o===`text`)?(0,H.jsxs)(`p`,{className:`px-4 py-1.5 text-[11.5px] text-muted-foreground`,children:[i.textTotal-f.text.length,` more text match`,i.textTotal-f.text.length===1?``:`es`,` — keep typing to narrow.`]}):null]}):(0,H.jsx)(Ku,{className:`p-6`,children:(0,H.jsxs)(qu,{children:[(0,H.jsx)(Yu,{variant:`icon`,children:(0,H.jsx)(ur,{})}),(0,H.jsx)(Zu,{children:`Type to search board names, screen names, and text inside screens.`})]})})}),(0,H.jsxs)(`div`,{className:`flex h-10 items-center gap-4 border-t px-4 text-[11px] text-muted-foreground`,children:[(0,H.jsx)(FT,{keys:`↑↓`,children:`navigate`}),(0,H.jsx)(FT,{keys:`↵`,children:`jump to match`}),(0,H.jsx)(FT,{keys:`tab`,children:`switch filter`}),i?(0,H.jsxs)(`span`,{className:`ml-auto`,children:[v,` match`,v===1?``:`es`]}):null]})]})})}function MT({children:e}){return(0,H.jsx)(`p`,{className:`px-4 pb-1 pt-2.5 text-[10.5px] font-semibold uppercase tracking-wider text-muted-foreground`,children:e})}function NT({index:e,active:t,tall:n,onPick:r,onHover:i,children:a}){return(0,H.jsx)(`button`,{type:`button`,"data-result-index":e,onClick:r,onMouseMove:i,className:V(`mx-1.5 flex w-[calc(100%-0.75rem)] items-center gap-3 rounded-md px-2.5 text-left`,n?`py-2`:`h-10`,t&&`bg-accent`),children:a})}function PT({text:e,query:t}){let n=t?e.toLowerCase().indexOf(t.toLowerCase()):-1;return n===-1?(0,H.jsx)(H.Fragment,{children:e}):(0,H.jsxs)(H.Fragment,{children:[e.slice(0,n),(0,H.jsx)(`mark`,{className:`rounded-[3px] bg-primary/15 px-0.5 font-medium text-primary`,children:e.slice(n,n+t.length)}),e.slice(n+t.length)]})}function FT({keys:e,children:t}){return(0,H.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,H.jsx)(kT,{children:[...e].map(e=>(0,H.jsx)(OT,{children:e},e))}),t]})}function IT({children:e,className:t}){return(0,H.jsx)(`div`,{className:V(`text-[10.5px] font-semibold uppercase tracking-wider text-muted-foreground`,t),children:e})}function LT({children:e}){return(0,H.jsx)(`div`,{className:`mt-2 divide-y divide-border/70`,children:e})}function RT({label:e,description:t,htmlFor:n,children:r}){let i=`block text-[13px] font-medium text-foreground`;return(0,H.jsxs)(`div`,{className:`flex items-center justify-between gap-6 py-2.5`,children:[(0,H.jsxs)(`div`,{className:`min-w-0`,children:[n?(0,H.jsx)(`label`,{htmlFor:n,className:i,children:e}):(0,H.jsx)(`div`,{className:i,children:e}),t?(0,H.jsx)(`p`,{className:`mt-0.5 text-[11.5px] leading-snug text-muted-foreground`,children:t}):null]}),(0,H.jsx)(`div`,{className:`flex shrink-0 items-center justify-end gap-3`,children:r})]})}function zT({label:e,stacked:t,children:n}){return(0,H.jsxs)(`div`,{className:V(`flex gap-2 text-[12px]`,t?`items-start`:`items-center`),children:[(0,H.jsx)(`span`,{className:`w-[68px] shrink-0 text-muted-foreground`,children:e}),(0,H.jsx)(`span`,{className:V(`flex min-w-0 text-foreground`,t?`flex-col items-start gap-1`:`items-center gap-1.5`),children:n})]})}var BT=`__default__`;function VT({cfg:e}){let t=W(e=>e.currentBoardId),n=W(e=>e.design),r=W(e=>e.boards),i=W(e=>e.loadBoard),a=W(e=>e.setBoardArchived),o=[...n?.boards??[],...n?.archivedBoards??[]],[s,c]=(0,P.useState)(t??o[0]?.id??``),l=o.find(e=>e.id===s)??null,u=r[s]??null,d=(0,P.useId)(),f=(0,P.useId)();if((0,P.useEffect)(()=>{s&&i(s).catch(()=>{})},[s,i]),!l)return(0,H.jsx)(`p`,{className:`text-[13px] text-muted-foreground`,children:`This folder has no boards yet.`});let p=l.archivedAt!=null,m=new Set((u?.frames??[]).map(e=>e.screen)).size;return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-3 rounded-lg border border-border bg-muted/40 px-3 py-2.5`,children:[(0,H.jsx)(yn,{className:`size-4 shrink-0 text-muted-foreground`}),(0,H.jsx)(`span`,{className:`text-[12px] text-muted-foreground`,children:`Editing`}),(0,H.jsxs)(q,{value:s,onValueChange:c,children:[(0,H.jsx)(Y,{className:`ml-auto w-[300px] bg-background text-[13px]`,children:(0,H.jsx)(J,{})}),(0,H.jsxs)(vd,{children:[(n?.boards??[]).map(e=>(0,H.jsx)(X,{value:e.id,children:e.name},e.id)),(n?.archivedBoards??[]).map(e=>(0,H.jsxs)(X,{value:e.id,children:[e.name,` (archived)`]},e.id))]})]})]}),(0,H.jsx)(IT,{className:`mt-5`,children:`Identity`}),(0,H.jsxs)(LT,{children:[(0,H.jsx)(RT,{label:`Name`,description:`Shown in the sidebar, search, and published links.`,htmlFor:d,children:(0,H.jsx)(UT,{id:d,value:l.name,onCommit:async e=>{if(e!==l.name)try{await R.updateBoard({boardId:s,patch:{name:e}})}catch(e){B(e,`Could not rename the board`)}}})}),(0,H.jsx)(RT,{label:`Board id`,description:`The filename on disk. Fixed once created — frames and links point at it.`,children:(0,H.jsxs)(`div`,{className:`flex w-[300px] items-center gap-2 rounded-md bg-muted px-2.5 py-1.5`,children:[(0,H.jsxs)(`span`,{className:`truncate font-mono text-[12px] text-muted-foreground`,children:[`boards/`,s,`.json`]}),(0,H.jsx)(Dn,{className:`ml-auto size-3 shrink-0 text-muted-foreground`})]})})]}),(0,H.jsx)(IT,{className:`mt-5`,children:`Theme`}),(0,H.jsx)(LT,{children:(0,H.jsx)(RT,{label:`Render this board with`,description:`Every frame here re-renders on change. Screens are untouched.`,htmlFor:f,children:(0,H.jsxs)(q,{value:u?.theme??BT,onValueChange:async e=>{try{await R.updateBoard({boardId:s,patch:{theme:e===BT?null:e}}),await i(s)}catch(e){B(e,`Could not change the board theme`)}},children:[(0,H.jsx)(Y,{id:f,className:`w-[300px] text-[13px]`,children:(0,H.jsx)(J,{})}),(0,H.jsxs)(vd,{children:[(0,H.jsx)(X,{value:BT,children:`Folder default`}),e.themes.filter(e=>e!=="default").map(e=>(0,H.jsx)(X,{value:e,children:e},e))]})]})})}),(0,H.jsx)(IT,{className:`mt-5`,children:`Contents`}),(0,H.jsxs)(`div`,{className:`mt-2 grid grid-cols-3 gap-3`,children:[(0,H.jsx)(HT,{n:u?.frames.length??l.frameCount,label:`frames`}),(0,H.jsx)(HT,{n:m,label:m===1?`screen`:`screens`}),(0,H.jsx)(HT,{n:u?.groups.length??0,label:u?.groups.length===1?`group`:`groups`})]}),(0,H.jsxs)(`div`,{className:`mt-4 flex items-start gap-3 rounded-lg border border-border bg-muted/30 p-3`,children:[p?(0,H.jsx)(Dt,{className:`mt-0.5 size-4 shrink-0 text-muted-foreground`}):(0,H.jsx)(Ot,{className:`mt-0.5 size-4 shrink-0 text-muted-foreground`}),(0,H.jsxs)(`div`,{className:`min-w-0`,children:[(0,H.jsx)(`div`,{className:`text-[13px] font-medium text-foreground`,children:p?`This board is archived`:`Archive this board`}),(0,H.jsx)(`p`,{className:`mt-0.5 text-[11.5px] leading-snug text-muted-foreground`,children:p?`It stays out of the sidebar and out of publishes until you restore it.`:`Files it out of the sidebar and out of publishes. Nothing is deleted — the file stays and you can restore it any time.`})]}),(0,H.jsx)(G,{variant:`outline`,size:`sm`,className:`ml-auto h-8 shrink-0 text-[12.5px]`,onClick:()=>{a(s,!p).catch(e=>B(e,p?`Could not restore the board`:`Could not archive it`))},children:p?`Restore`:`Archive`})]})]})}function HT({n:e,label:t}){return(0,H.jsxs)(`div`,{className:`rounded-lg bg-muted/50 px-3 py-2`,children:[(0,H.jsx)(`div`,{className:`text-[18px] font-semibold leading-tight text-foreground`,children:e}),(0,H.jsx)(`div`,{className:`text-[11px] text-muted-foreground`,children:t})]})}function UT({id:e,value:t,onCommit:n}){let[r,i]=(0,P.useState)(t);return(0,P.useEffect)(()=>i(t),[t]),(0,H.jsx)(Z,{id:e,value:r,className:`h-8 w-[300px] text-[13px]`,onChange:e=>i(e.target.value),onBlur:()=>{let e=r.trim();e===``?i(t):n(e)},onKeyDown:e=>{e.key===`Enter`&&e.currentTarget.blur(),e.key===`Escape`&&i(t)}})}function WT(){let e=W(e=>e.appTheme),t=W(e=>e.setAppTheme),n=W(e=>e.designMode),r=W(e=>e.rememberDesignMode),i=W(e=>e.setRememberDesignMode),a=W(e=>e.rememberPanels),o=W(e=>e.setRememberPanels),s=W(e=>e.resetCanvasPrefs);return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(IT,{children:`Appearance`}),(0,H.jsxs)(LT,{children:[(0,H.jsx)(RT,{label:`App theme`,description:`Velloo's own chrome — the toolbar, sidebar, and panels.`,children:(0,H.jsxs)(Zp,{type:`single`,variant:`outline`,size:`sm`,value:e,"aria-label":`App theme`,onValueChange:e=>e&&t(e),children:[(0,H.jsxs)(Qp,{value:`light`,className:`px-3 text-[12px]`,children:[(0,H.jsx)(Tr,{className:`size-3.5`}),`Light`]}),(0,H.jsxs)(Qp,{value:`dark`,className:`px-3 text-[12px]`,children:[(0,H.jsx)(Rn,{className:`size-3.5`}),`Dark`]}),(0,H.jsxs)(Qp,{value:`system`,className:`px-3 text-[12px]`,children:[(0,H.jsx)(Ln,{className:`size-3.5`}),`System`]})]})}),(0,H.jsxs)(RT,{label:`Remember the design preset`,description:`Reopen the canvas in whichever preset you last used. Off means every reload starts light.`,children:[(0,H.jsxs)(`span`,{className:`flex items-center gap-1.5 rounded-md border border-border bg-muted/60 px-2 py-1 text-[11.5px] text-muted-foreground`,children:[n===`dark`?(0,H.jsx)(Rn,{className:`size-3.5`}):(0,H.jsx)(Tr,{className:`size-3.5`}),`now: `,n]}),(0,H.jsx)(bx,{"aria-label":`Remember the design preset`,checked:r,onCheckedChange:i})]})]}),(0,H.jsx)(IT,{className:`mt-5`,children:`Layout`}),(0,H.jsx)(LT,{children:(0,H.jsx)(RT,{label:`Remember panel layout`,description:`Side pane widths and collapse, boards list, and screen tree stay as you left them.`,children:(0,H.jsx)(bx,{"aria-label":`Remember panel layout`,checked:a,onCheckedChange:o})})}),(0,H.jsxs)(`div`,{className:`mt-5 flex items-start gap-3 rounded-lg border border-border bg-muted/30 p-3`,children:[(0,H.jsx)(sr,{className:`mt-0.5 size-4 shrink-0 text-muted-foreground`}),(0,H.jsxs)(`div`,{className:`min-w-0`,children:[(0,H.jsx)(`div`,{className:`text-[13px] font-medium text-foreground`,children:`Reset canvas preferences`}),(0,H.jsx)(`p`,{className:`mt-0.5 text-[11.5px] leading-snug text-muted-foreground`,children:`Clears theme, panel, and last-viewed board memory for this browser. Your design is untouched.`})]}),(0,H.jsx)(G,{variant:`outline`,size:`sm`,className:`ml-auto h-8 shrink-0 text-[12.5px]`,onClick:()=>{s(),z({kind:`success`,message:`Canvas preferences reset.`})},children:`Reset`})]}),(0,H.jsxs)(`div`,{className:`mt-4 flex items-center gap-2 rounded-lg bg-muted/50 px-3 py-2`,children:[(0,H.jsx)(hn,{className:`size-3.5 shrink-0 text-muted-foreground`}),(0,H.jsx)(`span`,{className:`text-[11.5px] text-muted-foreground`,children:`Signing in and credits live in the account menu, top right.`})]})]})}var GT=`__none__`;function KT(e){return e<600?gr:e<1100?Or:Ln}function qT({cfg:e}){let t=W(e=>e.design?.boards??[]),n=W(e=>e.design?.screens??[]),r=W(e=>e.loadFolderConfig),i=W(e=>e.openLanguage),a=W(e=>e.setSettingsScope),o=(0,P.useId)(),s=(0,P.useId)(),c=(0,P.useId)(),l=(0,P.useId)(),u=(0,P.useId)(),d=async(e,t)=>{try{await t(),await r()}catch(t){B(t,e),await r().catch(()=>{})}};return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(IT,{children:`Design`}),(0,H.jsxs)(LT,{children:[(0,H.jsx)(RT,{label:`Name`,description:`What velloo commands, agents and the canvas call this design. Unique in this repo.`,htmlFor:o,children:(0,H.jsx)(ZT,{id:o,value:e.designName,onCommit:e=>d(`Could not rename the design`,async()=>{await Ps.designName(e),z({kind:`success`,message:`Renamed to "${e}"`})})})}),(0,H.jsx)(RT,{label:`Design language`,description:`Colour, type, shape and the rules in words every board follows.`,children:(0,H.jsxs)(G,{variant:`outline`,size:`sm`,onClick:()=>{a(null),i(`review`).catch(e=>B(e,`Could not open the design language`))},children:[(0,H.jsx)(Er,{}),`Open`]})})]}),(0,H.jsx)(IT,{className:`mt-5`,children:`Opens on`}),(0,H.jsxs)(LT,{children:[(0,H.jsx)(RT,{label:`Board`,description:`Pins every load to one board. Unset, the canvas reopens the board you were last on.`,htmlFor:s,children:(0,H.jsxs)(q,{value:e.defaultBoard??GT,onValueChange:e=>d(`Could not set the default board`,()=>Ps.defaults({defaultBoard:e===GT?null:e})),children:[(0,H.jsx)(Y,{id:s,className:`w-[252px] text-[13px]`,children:(0,H.jsx)(J,{})}),(0,H.jsxs)(vd,{children:[(0,H.jsx)(X,{value:GT,children:`Where you left off`}),t.map(e=>(0,H.jsx)(X,{value:e.id,children:e.name},e.id))]})]})}),(0,H.jsx)(RT,{label:`Screen`,description:`Focused after load. Optional.`,htmlFor:c,children:(0,H.jsxs)(q,{value:e.defaultScreen??GT,onValueChange:e=>d(`Could not set the default screen`,()=>Ps.defaults({defaultScreen:e===GT?null:e})),children:[(0,H.jsx)(Y,{id:c,className:`w-[252px] text-[13px]`,children:(0,H.jsx)(J,{})}),(0,H.jsxs)(vd,{children:[(0,H.jsx)(X,{value:GT,children:`No screen — fit the whole board`}),n.map(e=>(0,H.jsx)(X,{value:e.id,children:e.name},e.id))]})]})})]}),(0,H.jsxs)(`div`,{className:`mt-5 flex items-baseline gap-2`,children:[(0,H.jsx)(IT,{children:`Viewport presets`}),(0,H.jsx)(`span`,{className:`text-[11.5px] text-muted-foreground`,children:`— offered when you add a frame`})]}),(0,H.jsx)(tE,{presets:e.viewportPresets,onCommit:d}),(0,H.jsx)(IT,{className:`mt-5`,children:`Code generation & feedback`}),(0,H.jsxs)(LT,{children:[(0,H.jsx)(RT,{label:`Components import alias`,description:`Prefix emit_code writes for library imports.`,htmlFor:l,children:(0,H.jsx)(QT,{id:l,value:e.componentsAlias,onCommit:e=>d(`Could not save the import alias`,()=>Ps.codegen({componentsAlias:e}))})}),(0,H.jsxs)(`div`,{className:`py-2.5`,children:[(0,H.jsxs)(`div`,{className:`flex items-center justify-between gap-6`,children:[(0,H.jsxs)(`div`,{className:`min-w-0`,children:[(0,H.jsx)(`div`,{className:`text-[13px] font-medium text-foreground`,children:`Send product feedback`}),(0,H.jsx)(`p`,{className:`mt-0.5 text-[11.5px] leading-snug text-muted-foreground`,children:`Gives your agent the send_feedback tool. Off keeps velloo offline. Set once per repo — every design folder here shares this answer.`})]}),(0,H.jsx)(bx,{"aria-label":`Send product feedback`,checked:e.feedback.enabled,onCheckedChange:e=>d(`Could not change the feedback setting`,()=>Ps.feedback({enabled:e}))})]}),(0,H.jsxs)(`label`,{htmlFor:u,className:`mt-2 flex items-start gap-2 border-l-2 border-border pl-3`,children:[(0,H.jsx)(aC,{id:u,className:`mt-0.5 size-3.5`,checked:e.feedback.contactOk,onCheckedChange:e=>d(`Could not change the contact setting`,()=>Ps.feedback({contactOk:e===!0}))}),(0,H.jsxs)(`span`,{className:`min-w-0`,children:[(0,H.jsx)(`span`,{className:`block text-[12.5px] text-foreground`,children:`Velloo may contact me about what I send`}),(0,H.jsx)(`span`,{className:`block text-[11px] text-muted-foreground`,children:`Attaches your account email to each report. Unchecked, feedback goes in anonymously. Saved on this machine, not in the repo — nobody who clones it inherits your answer.`})]})]})]})]}),(0,H.jsx)(IT,{className:`mt-5`,children:`What init decided`}),(0,H.jsxs)(`div`,{className:`mt-2 grid grid-cols-2 items-start gap-x-8 gap-y-1.5 rounded-lg bg-muted/50 px-4 py-3`,children:[(0,H.jsx)(`div`,{className:`col-span-2 min-w-0`,children:(0,H.jsx)(JT,{cfg:e})}),(0,H.jsx)(zT,{label:`Styling`,children:Zb(e.libraries)?(0,H.jsx)(`span`,{className:`text-muted-foreground`,children:`per library`}):Qb(e)}),(0,H.jsxs)(zT,{label:`Format`,children:[`schema v`,e.schemaVersion,` · velloo `,e.toolVersion]}),(0,H.jsx)(`div`,{className:`col-span-2 min-w-0`,children:(0,H.jsx)(zT,{label:`Cloud id`,children:e.folderId?(0,H.jsx)(XT,{id:e.folderId}):(0,H.jsx)(YT,{})})})]})]})}function JT({cfg:e}){if(e.libraries.length===0)return(0,H.jsx)(zT,{label:`Library`,children:e.defaultLibrary});let t=Xb(e),n=t.length>1,r=Zb(t);return(0,H.jsx)(zT,{label:`Library`,stacked:n,children:t.map(t=>{let i=qb(t.source,t.version),a=t.id===e.defaultLibrary;return(0,H.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5`,children:[n&&Yb(t,a)?(0,H.jsx)(`span`,{className:`shrink-0 font-mono text-[11px] text-muted-foreground`,children:t.id}):null,(0,H.jsx)(`span`,{className:`truncate`,children:Gb(t.providerId)}),Jb(t)?(0,H.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:Kb(t.version)}):null,(0,H.jsx)(U,{variant:`secondary`,title:i.title,className:`h-4 shrink-0 px-1.5 text-[10px] font-normal`,children:i.text}),r&&t.styleLabel?(0,H.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:t.styleLabel}):null,n&&a?(0,H.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:`· default`}):null]},t.id)})})}function YT(){return(0,H.jsx)(`span`,{className:`text-muted-foreground`,children:`Not published yet`})}function XT({id:e}){let[t,n]=(0,P.useState)(!1);return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(`span`,{className:`truncate font-mono text-[11px]`,children:e}),(0,H.jsx)(`button`,{type:`button`,title:`Copy folder id`,className:`shrink-0 text-muted-foreground hover:text-foreground`,onClick:()=>{navigator.clipboard.writeText(e).then(()=>{n(!0),setTimeout(()=>n(!1),1200)})},children:t?(0,H.jsx)(Bt,{className:`size-3`}):(0,H.jsx)(Xt,{className:`size-3`})})]})}function ZT({id:e,value:t,onCommit:n}){let[r,i]=(0,P.useState)(t),a=(0,P.useRef)(t);return a.current=t,(0,P.useEffect)(()=>i(t),[t]),(0,H.jsx)(Z,{id:e,value:r,spellCheck:!1,className:`h-8 w-[252px] font-mono text-[12.5px]`,onChange:e=>i(e.target.value),onBlur:()=>{let e=r.trim();if(e===``||e===t){i(t);return}n(e).finally(()=>i(a.current))},onKeyDown:e=>{e.key===`Enter`&&e.currentTarget.blur(),e.key===`Escape`&&i(t)}})}function QT({id:e,value:t,onCommit:n}){let[r,i]=(0,P.useState)(t??``);return(0,P.useEffect)(()=>i(t??``),[t]),(0,H.jsx)(Z,{id:e,value:r,placeholder:`@/components/ui`,className:`h-8 w-[252px] font-mono text-[12.5px]`,onChange:e=>i(e.target.value),onBlur:()=>{let e=r.trim();e!==(t??``)&&n(e===``?null:e)},onKeyDown:e=>{e.key===`Enter`&&e.currentTarget.blur(),e.key===`Escape`&&i(t??``)}})}var $T=0,eE=e=>({key:$T++,preset:e});function tE({presets:e,onCommit:t}){let[n,r]=(0,P.useState)(()=>e.map(eE));(0,P.useEffect)(()=>r(e.map(eE)),[e]);let i=n.map(e=>e.preset),a=e=>{r(e),t(`Could not save the viewport presets`,()=>Ps.viewportPresets(e.map(e=>e.preset)))},o=(e,t)=>r(n.map(n=>n.key===e?{key:e,preset:{...n.preset,...t}}:n)),s=()=>{if(JSON.stringify(i)!==JSON.stringify(e)){if(i.some(e=>e.name.trim()===``||e.w<=0||e.h<=0)){z({kind:`error`,message:`A viewport preset needs a name and a positive width and height.`}),r(e.map(eE));return}a(n)}};return(0,H.jsxs)(`div`,{className:`mt-2 overflow-hidden rounded-lg border border-border`,children:[n.map(({key:e,preset:t},r)=>{let i=KT(t.w);return(0,H.jsxs)(`div`,{className:`flex items-center gap-3 border-b border-border px-3 py-1.5 last:border-b-0`,children:[(0,H.jsx)(i,{className:`size-4 shrink-0 text-muted-foreground`}),(0,H.jsx)(Z,{value:t.name,"aria-label":`Preset ${r+1} name`,className:`h-7 w-40 text-[13px]`,onChange:t=>o(e,{name:t.target.value}),onBlur:s,onKeyDown:e=>e.key===`Enter`&&e.currentTarget.blur()}),(0,H.jsxs)(`div`,{className:`ml-auto flex items-center gap-1.5`,children:[(0,H.jsx)(rE,{label:`Preset ${r+1} width`,value:t.w,onChange:t=>o(e,{w:t}),onCommit:s}),(0,H.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:`×`}),(0,H.jsx)(rE,{label:`Preset ${r+1} height`,value:t.h,onChange:t=>o(e,{h:t}),onCommit:s})]}),(0,H.jsx)(`button`,{type:`button`,disabled:n.length<=1,title:n.length<=1?`At least one preset is required.`:`Remove ${t.name}`,className:`shrink-0 text-muted-foreground hover:text-destructive disabled:opacity-40 disabled:hover:text-muted-foreground`,onClick:()=>a(n.filter(t=>t.key!==e)),children:(0,H.jsx)(Ar,{className:`size-3.5`})})]},e)}),(0,H.jsxs)(`div`,{className:`flex items-center gap-3 border-t border-border px-3 py-1.5`,children:[(0,H.jsxs)(G,{variant:`ghost`,size:`sm`,className:`h-7 gap-1.5 px-2 text-[12.5px] text-muted-foreground`,onClick:()=>a([...n,eE({name:nE(i),w:1440,h:900})]),children:[(0,H.jsx)(nr,{className:`size-3.5`}),`Add preset`]}),(0,H.jsx)(`span`,{className:`ml-auto text-[11px] text-muted-foreground`,children:`At least one preset is required.`})]})]})}function nE(e){let t=new Set(e.map(e=>e.name.toLowerCase()));if(!t.has(`new preset`))return`New preset`;for(let e=2;;e++){let n=`New preset ${e}`;if(!t.has(n.toLowerCase()))return n}}function rE({label:e,value:t,onChange:n,onCommit:r}){return(0,H.jsx)(Z,{"aria-label":e,inputMode:`numeric`,value:String(t),className:`h-7 w-[68px] text-center font-mono text-[12px]`,onChange:e=>{let t=Number.parseInt(e.target.value,10);n(Number.isFinite(t)&&t>0?t:0)},onBlur:r,onKeyDown:e=>e.key===`Enter`&&e.currentTarget.blur()})}var iE=[{id:`design`,label:`Design`,icon:$n},{id:`board`,label:`Board`,icon:yn},{id:`canvas`,label:`Canvas`,icon:hr}],aE={design:{title:`Design`,description:`Saved to the design's config.json — visible to your agent, and committed with your repo when the design lives in it.`},board:{title:`Board`,description:`Applies to one board — its own file under boards/, committed with your repo.`},canvas:{title:`Canvas`,description:`How the editor behaves for you. Kept in this browser — never written to the folder, never shared.`}};function oE(){let e=W(e=>e.settingsScope),t=W(e=>e.setSettingsScope),n=W(e=>e.folderConfig),r=W(e=>e.loadFolderConfig),i=W(e=>e.currentBoardId),a=W(e=>e.design?.boards.find(t=>t.id===e.currentBoardId)?.name??null);(0,P.useEffect)(()=>{e!==null&&r().catch(e=>B(e,`Could not load design settings`))},[e,r]);let o=e?aE[e]:aE.design;return(0,H.jsx)(ud,{open:e!==null,onOpenChange:e=>!e&&t(null),children:(0,H.jsxs)(pd,{className:V(`flex h-[min(800px,85vh)] w-[920px] max-w-[calc(100vw-2rem)] gap-0 overflow-hidden p-0`,`sm:max-w-[920px]`),children:[(0,H.jsxs)(`nav`,{className:`flex w-[216px] shrink-0 flex-col border-r border-border bg-muted/40 p-3`,children:[(0,H.jsx)(`div`,{className:`px-2 pb-2 pt-1 text-[10.5px] font-semibold uppercase tracking-wider text-muted-foreground`,children:`Settings`}),iE.map(({id:n,label:r,icon:i})=>(0,H.jsxs)(`button`,{type:`button`,onClick:()=>t(n),className:V(`mt-0.5 flex items-center gap-2.5 rounded-md px-2.5 py-2 text-left text-[13px] first:mt-0`,e===n?`bg-background font-medium text-foreground shadow-sm ring-1 ring-border`:`text-muted-foreground hover:bg-accent/60`),children:[(0,H.jsx)(i,{className:`size-4 shrink-0`}),r,n===`board`&&a?(0,H.jsx)(`span`,{className:`ml-auto max-w-[86px] truncate text-[10.5px] font-normal text-muted-foreground`,children:a}):null]},n)),n?(0,H.jsxs)(`div`,{className:`mt-auto rounded-md border border-dashed border-border px-2.5 py-2`,children:[(0,H.jsx)(`div`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground`,children:`Design folder`}),(0,H.jsx)(`div`,{className:`mt-1 break-all font-mono text-[10.5px] leading-tight text-foreground/80`,title:n.root,children:n.root})]}):null]}),(0,H.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,H.jsxs)(md,{className:`gap-0 border-b border-border px-6 py-4 pr-12 text-left`,children:[(0,H.jsx)(gd,{className:`text-[15px] font-semibold leading-tight`,children:o.title}),(0,H.jsx)(_d,{className:`mt-1 text-[11.5px]`,children:o.description})]}),(0,H.jsx)(`div`,{className:`flex-1 overflow-y-auto px-6 pb-6 pt-4`,children:e===`canvas`?(0,H.jsx)(WT,{}):n===null?(0,H.jsx)(ih,{size:24,label:`Loading settings…`,className:`flex-col pt-12 text-[13px] text-muted-foreground`}):e===`board`?(0,H.jsx)(VT,{cfg:n},i??``):(0,H.jsx)(qT,{cfg:n})}),(0,H.jsxs)(`div`,{className:`flex h-12 shrink-0 items-center gap-2 border-t border-border bg-muted/30 px-6`,children:[e===`canvas`?(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(Ln,{className:`size-3.5 text-muted-foreground`}),(0,H.jsx)(`span`,{className:`text-[11.5px] text-muted-foreground`,children:`This browser only.`})]}):(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(Bt,{className:`size-3.5 text-muted-foreground`}),(0,H.jsx)(`span`,{className:`text-[11.5px] text-muted-foreground`,children:`Changes save as you make them.`})]}),(0,H.jsx)(G,{size:`sm`,className:`ml-auto h-8 text-[13px]`,onClick:()=>t(null),children:`Done`})]})]})]})})}var sE=200,cE=`(prefers-reduced-motion: reduce)`;function lE({open:e,className:t=``,"aria-disabled":n,children:r}){let i=(0,P.useRef)(null),a=(0,P.useRef)(null),[o,s]=(0,P.useState)(e),[c,l]=(0,P.useState)(e),[u,d]=(0,P.useState)(!1);if(c!==e){let t=!uE();l(e),d(t),s(e||t)}return(0,P.useLayoutEffect)(()=>{let t=i.current;if(!t||(t.style.cssText=``,!u))return;let n=e?0:a.current??t.offsetHeight,r=e?t.offsetHeight:0;t.style.flex=`0 0 auto`,t.style.overflow=`hidden`,t.style.height=`${n}px`,t.offsetHeight,t.style.transition=`height ${sE}ms ease-out`,t.style.height=`${r}px`},[u,e]),(0,P.useLayoutEffect)(()=>{!u&&e&&(a.current=i.current?.offsetHeight??null)}),(0,P.useEffect)(()=>{if(!u)return;let t=setTimeout(()=>{d(!1),e||s(!1)},sE);return()=>clearTimeout(t)},[u,e]),o?(0,H.jsx)(`div`,{ref:i,className:t,"aria-disabled":n,children:r}):null}function uE(){return typeof matchMedia==`function`&&matchMedia(cE).matches}function dE(e,t){return`${e} open ${t===`shared`?`cloud`:`local`} comment${e===1?``:`s`}`}function fE({counts:e,active:t}){return!e||e.shared===0&&e.local===0?null:(0,H.jsxs)(`span`,{className:`flex shrink-0 items-center gap-1`,children:[e.shared>0?(0,H.jsxs)(U,{"data-testid":`board-comments-shared`,variant:`secondary`,title:dE(e.shared,`shared`),className:V(`h-4 gap-0.5 bg-primary/10 px-1.5 text-[10px] text-primary tabular-nums`,t&&`bg-primary-foreground text-primary`),children:[(0,H.jsx)(qt,{"aria-hidden":`true`}),(0,H.jsx)(`span`,{"aria-hidden":`true`,children:e.shared}),(0,H.jsx)(`span`,{className:`sr-only`,children:dE(e.shared,`shared`)})]}):null,e.local>0?(0,H.jsxs)(U,{"data-testid":`board-comments-local`,variant:`outline`,title:dE(e.local,`local`),className:V(`h-4 gap-0.5 px-1.5 text-[10px] tabular-nums text-muted-foreground`,t&&`border-primary-foreground/50 text-primary-foreground`),children:[(0,H.jsx)(Nn,{"aria-hidden":`true`}),(0,H.jsx)(`span`,{"aria-hidden":`true`,children:e.local}),(0,H.jsx)(`span`,{className:`sr-only`,children:dE(e.local,`local`)})]}):null]})}var pE=`Disconnected — board switching resumes when the daemon is back.`;function mE(){let e=W(e=>e.selectBoard),t=W(e=>e.wsConnected);return(n,r)=>{if(!t&&!r){z({kind:`error`,message:pE});return}e(n)}}function hE({board:e,active:t,groups:n,drag:r,onRename:i,onAddFrame:a,onMoveToGroup:o,onNewGroup:s,onArchive:c,onDelete:l}){let u=W(e=>e.wsConnected),d=W(t=>!!t.boardPulse[e.id]),f=W(e=>e.publishSlots),p=W(t=>t.boardCommentCounts[e.id]),m=W(e=>e.refreshPublishSlots),h=mE(),g=uc(f,e.id);return(0,H.jsxs)(`li`,{draggable:r.draggable,onDragStart:r.onDragStart,onDragOver:r.onDragOver,onDragEnd:r.onDragEnd,className:`relative group/board rounded-md `+(r.draggable?`cursor-grab active:cursor-grabbing `:``)+(r.dragging?`opacity-50`:``),children:[(0,H.jsxs)(`button`,{type:`button`,onClick:()=>h(e.id,t),title:!u&&!t?pE:void 0,className:`w-full text-left px-2 py-1.5 pr-8 rounded-md text-sm transition-colors `+(t?`bg-primary text-primary-foreground`:u?`hover:bg-muted text-foreground`:`text-muted-foreground cursor-not-allowed opacity-60`),children:[(0,H.jsxs)(`div`,{className:`font-medium truncate`,children:[e.name,!t&&d?(0,H.jsx)(`span`,{"data-board-pulse":e.id,title:`An agent edited this board recently`,className:`ml-1.5 inline-block h-1.5 w-1.5 rounded-full bg-primary align-middle`}):null]}),(0,H.jsxs)(`div`,{className:`flex items-center justify-between gap-2 text-xs ${t?`text-primary-foreground/80`:`text-muted-foreground`}`,children:[(0,H.jsxs)(`span`,{className:`truncate`,children:[e.frameCount,` frame`,e.frameCount===1?``:`s`]}),(0,H.jsx)(fE,{counts:p,active:t})]})]}),(0,H.jsxs)(pm,{onOpenChange:e=>e&&void m(),children:[(0,H.jsx)(mm,{asChild:!0,children:(0,H.jsx)(G,{variant:`ghost`,size:`icon-xs`,title:`Board menu`,className:`absolute right-2 top-2 opacity-0 group-hover/board:opacity-100 data-[state=open]:opacity-100`,children:(0,H.jsx)($t,{})})}),(0,H.jsxs)(hm,{align:`end`,className:$l,children:[(0,H.jsxs)(Q,{disabled:!u,onSelect:i,children:[(0,H.jsx)(er,{}),`Rename board`]}),(0,H.jsxs)(Q,{disabled:!u,onSelect:a,children:[(0,H.jsx)(sn,{}),`Add frame…`]}),(0,H.jsxs)(Q,{onSelect:()=>W.getState().publishBoard({id:e.id,name:e.name}),"data-testid":`board-publish`,children:[(0,H.jsx)(pr,{}),`Publish…`]}),g?(0,H.jsx)(Q,{asChild:!0,children:(0,H.jsxs)(`a`,{href:g.url,target:`_blank`,rel:`noreferrer`,className:`text-inherit no-underline`,title:`Published ${Tx(g.lastPublishedAt)}`,"data-testid":`board-latest-publish`,children:[(0,H.jsx)(en,{}),`See latest publish`]})}):null,(0,H.jsxs)(vm,{children:[(0,H.jsxs)(ym,{disabled:!u,children:[(0,H.jsx)(an,{}),`Move to group`]}),(0,H.jsxs)(bm,{children:[n.map(t=>(0,H.jsxs)(Q,{onSelect:()=>o(t.id),children:[(0,H.jsx)(`span`,{className:`size-2.5 rounded-[3px]`,style:{backgroundColor:t.color??`var(--muted-foreground)`}}),t.name,e.group===t.id?(0,H.jsx)(Bt,{className:`ml-auto`}):null]},t.id)),(0,H.jsxs)(Q,{onSelect:()=>o(null),children:[(0,H.jsx)(`span`,{className:`size-2.5 rounded-[3px] border border-dashed`}),`No group`,e.group?null:(0,H.jsx)(Bt,{className:`ml-auto`})]}),(0,H.jsxs)(Q,{onSelect:s,children:[(0,H.jsx)(on,{}),`New group…`]})]})]}),(0,H.jsxs)(Q,{onSelect:()=>W.getState().setExportTarget({kind:`board`,id:e.id,name:e.name}),children:[(0,H.jsx)(Qt,{}),`Export board…`]}),(0,H.jsxs)(Q,{disabled:!u,onSelect:c,children:[(0,H.jsx)(Ot,{}),`Archive board`]}),(0,H.jsxs)(Q,{variant:`destructive`,disabled:!u,onSelect:l,children:[(0,H.jsx)(Ar,{}),`Delete board`]})]})]})]})}function gE(e){let t=new Date(e);return Number.isNaN(t.getTime())?`archived`:t.toLocaleDateString(void 0,{month:`short`,day:`numeric`})}function _E({boards:e,currentBoardId:t,open:n,onToggle:r,onRestore:i,onDelete:a}){let o=W(e=>e.wsConnected),s=mE();return(0,H.jsxs)(`div`,{className:`shrink-0 border-t px-2 py-1.5`,children:[(0,H.jsxs)(`button`,{type:`button`,onClick:r,"aria-expanded":n,className:`flex w-full items-center gap-1.5 rounded-md px-2 py-1 text-[11px] uppercase tracking-wider text-muted-foreground transition-colors hover:text-foreground`,children:[(0,H.jsx)(Ht,{size:13,strokeWidth:2.5,className:`shrink-0 transition-transform duration-200 motion-reduce:transition-none `+(n?`rotate-90`:``)}),(0,H.jsx)(Ot,{size:11,strokeWidth:2,className:`shrink-0`}),` Archived`,(0,H.jsxs)(`span`,{className:`normal-case opacity-60`,children:[`(`,e.length,`)`]})]}),(0,H.jsx)(lE,{open:n,children:(0,H.jsx)(`ul`,{className:`mt-0.5 flex flex-col gap-0.5`,children:e.map(e=>{let n=e.id===t;return(0,H.jsxs)(`li`,{className:`relative group/board rounded-md`,children:[(0,H.jsxs)(`button`,{type:`button`,onClick:()=>s(e.id,n),className:`w-full text-left px-2 py-1.5 pr-8 rounded-md text-sm transition-colors `+(n?`bg-primary text-primary-foreground`:`hover:bg-muted text-muted-foreground`),children:[(0,H.jsx)(`div`,{className:`truncate`,children:e.name}),(0,H.jsxs)(`div`,{className:`text-xs `+(n?`text-primary-foreground/80`:`text-muted-foreground/70`),children:[e.frameCount,` frame`,e.frameCount===1?``:`s`,e.archivedAt?` · ${gE(e.archivedAt)}`:``]})]}),(0,H.jsxs)(pm,{children:[(0,H.jsx)(mm,{asChild:!0,children:(0,H.jsx)(G,{variant:`ghost`,size:`icon-xs`,title:`Board menu`,className:`absolute right-2 top-2 opacity-0 group-hover/board:opacity-100 data-[state=open]:opacity-100`,children:(0,H.jsx)($t,{})})}),(0,H.jsxs)(hm,{align:`end`,className:$l,children:[(0,H.jsxs)(Q,{disabled:!o,onSelect:()=>i(e),children:[(0,H.jsx)(Dt,{}),`Restore board`]}),(0,H.jsxs)(Q,{variant:`destructive`,disabled:!o,onSelect:()=>a(e),children:[(0,H.jsx)(Ar,{}),`Delete board`]})]})]})]},e.id)})})})]})}var vE=[{value:`#8b5cf6`,label:`Violet`},{value:`#0ea5e9`,label:`Sky`},{value:`#f59e0b`,label:`Amber`},{value:`#f43f5e`,label:`Rose`},{value:`#10b981`,label:`Emerald`},{value:`#6366f1`,label:`Indigo`},{value:`#ec4899`,label:`Pink`},{value:`#84cc16`,label:`Lime`}];function yE({group:e,count:t,collapsed:n,dropTarget:r,disabled:i,onToggle:a,onDragOver:o,onRename:s,onRecolor:c,onDelete:l}){return(0,H.jsxs)(`li`,{onDragOver:o,className:`group/gr relative flex items-center rounded-md pr-7 ${r?`bg-accent`:``}`,children:[(0,H.jsxs)(`button`,{type:`button`,onClick:a,"aria-expanded":!n,className:`flex min-w-0 flex-1 items-center gap-2 rounded-md px-1.5 py-1.5 text-left transition-colors hover:bg-muted`,children:[(0,H.jsx)(Ht,{size:13,strokeWidth:2.5,className:`shrink-0 text-muted-foreground transition-transform duration-200 motion-reduce:transition-none `+(n?``:`rotate-90`)}),(0,H.jsx)(`span`,{className:`size-2.5 shrink-0 rounded-[3px]`,style:{backgroundColor:e.color??`var(--muted-foreground)`}}),(0,H.jsx)(`span`,{className:`truncate text-xs font-semibold`,children:e.name}),(0,H.jsx)(`span`,{className:`ml-auto text-[10px] text-muted-foreground`,children:t})]}),(0,H.jsxs)(pm,{children:[(0,H.jsx)(mm,{asChild:!0,children:(0,H.jsx)(G,{variant:`ghost`,size:`icon-xs`,title:`Group menu`,className:`absolute right-1 top-1.5 opacity-0 group-hover/gr:opacity-100 data-[state=open]:opacity-100`,children:(0,H.jsx)($t,{})})}),(0,H.jsxs)(hm,{align:`end`,className:$l,children:[(0,H.jsxs)(Q,{disabled:i,onSelect:s,children:[(0,H.jsx)(er,{}),`Rename group`]}),(0,H.jsxs)(vm,{children:[(0,H.jsxs)(ym,{disabled:i,children:[(0,H.jsx)(Wn,{}),`Color`]}),(0,H.jsx)(bm,{children:vE.map(({value:t,label:n})=>(0,H.jsxs)(Q,{onSelect:()=>c(t),children:[(0,H.jsx)(`span`,{className:`size-3 rounded-[3px]`,style:{backgroundColor:t}}),n,e.color===t?(0,H.jsx)(Bt,{className:`ml-auto`}):null]},t))})]}),(0,H.jsxs)(Q,{variant:`destructive`,disabled:i,onSelect:l,children:[(0,H.jsx)(Ar,{}),`Delete group`]})]})]})]})}var bE={Divider:In,Gradient:Nt,Heading:pn,Icon:_r,Image:mn,Layer:_n,Placeholder:vr,Prose:tr,SVG:fr,Text:Mr},xE={a:Sn,blockquote:ir,button:yr,em:Mr,footer:Gn,form:kr,h1:pn,h2:pn,h3:pn,h4:pn,h5:pn,h6:pn,header:Xn,img:mn,input:kr,label:Mr,li:wn,nav:Hn,ol:wn,p:Mr,small:Mr,span:Mr,strong:Mr,svg:fr,table:Dr,textarea:kr,ul:wn,video:Rr};function SE(e,t){if(Yi(e))return{Icon:Rt,tone:`text-muted-foreground`};if(Ji(e))return{Icon:Pt,tone:`text-violet-500`,title:`@${e.$snippet} — a snippet instance.`};if(Xi(e))return{Icon:tr,tone:`text-muted-foreground`,title:`Text beside elements — it has no element of its own.`};if(sa(e)){let{importPath:t,exportName:n,member:r,app:i}=e.$repo,a=n==="default"?`default export`:n,o=r?`${a}.${r}`:a;return{Icon:Lt,tone:`text-primary`,title:`${e.$ref} — the app's own component: ${o} from ${t}${i?` (${i})`:``}.`}}let n=t?.get(e.$ref);if(t&&!n)return{Icon:jr,tone:`text-destructive`,title:`${e.$ref} isn't in this screen's library — it renders as a fallback.`};if(n?.kind===`extension`)return{Icon:rr,tone:`text-primary`,title:`${e.$ref} — a custom component registered with add_extension.`};if(n&&n.source!==`velloo`)return{Icon:Yt,tone:`text-primary`,title:`${e.$ref} — a real ${n.source} component from this project's library.`};let r=bE[e.$ref];if(r)return{Icon:r,tone:`text-muted-foreground`};let i=typeof e.props?.as==`string`?e.props.as:null;return{Icon:(i?xE[i]:void 0)??Sr,tone:`text-muted-foreground`}}var CE=(e,t=28)=>e.length>t?`${e.slice(0,t-1)}…`:e,wE=200;function TE(e){if(Ji(e)){let t=Object.entries(e.args??{}),n=t.find(([,e])=>typeof e==`string`&&e.trim());return n?CE(n[1].trim()):t.length>0?`${t.length} args`:null}if(Yi(e))return null;if(Xi(e))return CE(e.$text.trim())||null;let t=e.props;if(!t)return null;for(let e of[`children`,`label`,`placeholder`,`value`,`title`]){let n=t[e];if(typeof n==`string`&&n.trim())return CE(n.trim());if(typeof n==`number`)return String(n)}if(typeof t.className==`string`){let e=t.className.trim();if(e)return CE(`.${e.split(/\s+/)[0]}`)}return null}function EE(e){if(Ji(e))return`@${e.$snippet}`;if(Yi(e))return`\${${e.$param}}`;if(Xi(e))return`text`;let t=rg(e),n=typeof e.props?.as==`string`?e.props.as:null,r=n&&n!==`div`?`${e.$ref} ${n}`:e.$ref;return t?`${r} ${t}`:r}function DE(e){return qi(e)?e.children:void 0}function OE(e){let[t,n]=(0,P.useState)(e),[r,i]=(0,P.useState)(e),[a,o]=(0,P.useState)(!1);return r!==e&&(i(e),o(!0),e&&n(!0)),(0,P.useEffect)(()=>{if(!a)return;let t=setTimeout(()=>{o(!1),e||n(!1)},wE);return()=>clearTimeout(t)},[a,e]),{mounted:t,animating:a}}function kE({icon:e,selected:t}){let n=`shrink-0 ${t?`text-primary-foreground`:e.tone}`;return e.title?(0,H.jsx)(`span`,{role:`img`,"aria-label":e.title,title:e.title,className:`inline-flex ${n}`,children:(0,H.jsx)(e.Icon,{size:13,strokeWidth:2,"aria-hidden":!0})}):(0,H.jsx)(e.Icon,{size:13,strokeWidth:2,className:n,"aria-hidden":!0})}function AE({node:e,path:t,screenId:n,depth:r,expandedSet:i,setExpanded:a,byId:o}){let s=wc(t),c=W(e=>e.setSelection),l=W(e=>e.setHover),u=W(e=>e.openSnippetEditor),d=W(e=>e.setSnippetFocus),f=W(e=>e.selection?.screenId===n&&e.selection.path===s),p=W(e=>e.hover?.screenId===n&&e.hover.path===s),m=(0,P.useRef)(null);(0,P.useEffect)(()=>{f&&m.current?.scrollIntoView({block:`nearest`})},[f]);let h=DE(e),g=(h?.length??0)>0,_=g?i.has(s):!1,{mounted:v,animating:y}=OE(_),b=TE(e),x=Ji(e)?e.$snippet:null,S=SE(e,o),C=[`w-full flex items-center gap-1 px-2 py-1 rounded-sm text-sm cursor-default select-none text-left group/row`,f?`bg-primary text-primary-foreground`:p?`bg-muted`:`hover:bg-muted text-foreground`].join(` `),w=()=>c({screenId:n,path:s}),T=()=>{(async()=>{try{let{removedRef:e}=await R.removeNode({screenId:n,path:t}),r=W.getState();r.selection?.screenId===n&&(r.selection.path===s||r.selection.path.startsWith(`${s}.`))&&r.setSelection(null),r.setHover(null),r.refreshHistory(),z({kind:`info`,message:`Removed ${e}`,action:{label:`Undo`,onClick:()=>{Hs().catch(e=>B(e,`Undo failed`)).finally(()=>void W.getState().refreshHistory())}}})}catch(e){B(e,`Could not remove node`)}})()};return(0,H.jsxs)(`div`,{children:[(0,H.jsxs)(`div`,{ref:m,className:C,style:{paddingLeft:`${.5+r*.875}rem`},children:[(0,H.jsx)(`button`,{type:`button`,onClick:()=>a(s,!_),className:`inline-flex size-5 shrink-0 items-center justify-center rounded transition-colors disabled:opacity-0 `+(f?`text-primary-foreground hover:bg-primary-foreground/20`:`text-muted-foreground hover:bg-foreground/10 hover:text-foreground`),"aria-label":_?`Collapse`:`Expand`,disabled:!g,children:(0,H.jsx)(Ht,{size:15,strokeWidth:2.5,"aria-hidden":!0,className:`transition-transform duration-200 motion-reduce:transition-none `+(_?`rotate-90`:``)})}),(0,H.jsxs)(`button`,{type:`button`,onClick:w,onDoubleClick:()=>{x&&d(x)},onMouseEnter:()=>l({screenId:n,path:s}),onMouseLeave:()=>l(null),onKeyDown:e=>{e.key===`ArrowRight`&&g&&!_?(e.preventDefault(),a(s,!0)):e.key===`ArrowLeft`&&g&&_?(e.preventDefault(),a(s,!1)):e.key===`Enter`&&x&&(e.preventDefault(),d(x))},className:`flex shrink-0 items-center gap-1.5 text-left text-inherit`,title:x?`Double-click or Enter to edit ${x} in place`:void 0,children:[(0,H.jsx)(kE,{icon:S,selected:f}),(0,H.jsx)(`span`,{className:`font-medium whitespace-nowrap`,children:EE(e)}),pa(e)?(0,H.jsxs)(U,{variant:`outline`,className:`shrink-0 px-1 py-0 font-mono text-[10px] leading-none `+(f?`border-primary-foreground/40 text-primary-foreground`:`text-muted-foreground`),title:`Stable anchor: @${pa(e)}`,children:[`@`,pa(e)]}):null,b?(0,H.jsx)(`span`,{className:`whitespace-nowrap text-xs opacity-70 `+(f?`text-primary-foreground`:`text-muted-foreground`),children:b}):null]}),(0,H.jsxs)(`div`,{className:`pointer-events-none sticky right-1 z-10 ml-auto flex shrink-0 items-center ${xf} rounded-md border bg-popover px-px text-popover-foreground opacity-0 shadow-sm transition-opacity group-hover/row:pointer-events-auto group-hover/row:opacity-100 focus-within:pointer-events-auto focus-within:opacity-100`,children:[(0,H.jsx)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),W.getState().locateNode(n,s)},className:yf,"aria-label":`Locate on canvas`,title:`Locate on canvas (centers and zooms to this node)`,"data-locate-node":s,children:(0,H.jsx)(Zt,{...Sf})}),x?(0,H.jsx)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),u(x)},className:yf,"aria-label":`Open ${x} in canvas`,title:`Open ${x} in canvas`,children:(0,H.jsx)(Zn,{...Sf})}):null,r===0?null:(0,H.jsx)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),T()},className:bf,"aria-label":`Delete node`,title:`Delete this node (undoable)`,"data-remove-node":s,children:(0,H.jsx)(Ar,{...Sf})})]})]}),g?(0,H.jsx)(`div`,{className:`grid transition-[grid-template-rows] duration-200 ease-out motion-reduce:transition-none `+(_?`grid-rows-[1fr]`:`grid-rows-[0fr]`),children:(0,H.jsx)(`div`,{className:_&&!y?``:`overflow-hidden`,children:v?h?.map((e,c)=>{let l=`${s===``?``:`${s}.`}${c}`;return(0,H.jsx)(AE,{node:e,path:[...t,c],screenId:n,depth:r+1,expandedSet:i,setExpanded:a,byId:o},l)}):null})}):null]})}function jE(e){let t=new Set;for(let n=0;n<e.length;n++)t.add(wc(e.slice(0,n)));return t}function ME(e,t=[],n=new Set){n.add(wc(t));let r=DE(e);if(r)for(let e=0;e<r.length;e++){let i=r[e];i&&ME(i,[...t,e],n)}return n}function NE({screen:e}){let t=W(e=>e.selection),n=W(e=>e.components),r=W(e=>e.loadComponents);(0,P.useEffect)(()=>{r()},[r]);let i=(0,P.useMemo)(()=>n?new Map(n.map(e=>[e.id,e])):null,[n]),[a,o]=(0,P.useState)(()=>ME(e.tree)),s=(e,t)=>{o(n=>{let r=new Set(n);return t?r.add(e):r.delete(e),r})},c=(0,P.useMemo)(()=>{if(t?.screenId!==e.id)return a;let n=jE(Cc(t.path)),r=new Set(a);for(let e of n)r.add(e);return r},[a,t,e.id]);return(0,H.jsx)(`div`,{className:`flex w-max min-w-full flex-col py-1`,children:(0,H.jsx)(AE,{node:e.tree,path:[],screenId:e.id,depth:0,expandedSet:c,setExpanded:s,byId:i})})}function PE({screens:e,currentBoardId:t,currentScreenId:n}){let r=W(e=>e.selectScreen),i=W(e=>e.cursorMode),a=W(e=>e.treeCollapsed),o=W(e=>e.toggleTreeCollapsed),s=W(e=>n?e.screens[n]??null:null),c=W(e=>e.snippetFocus),l=W(e=>e.setSnippetFocus),u=W(e=>e.snippetFocus?e.screens[`snippet:${e.snippetFocus}`]??null:null),d=u??s,f=W(e=>d?e.renderErrors[d.id]??null:null),p=W(e=>t?e.boards[t]??null:null),m=(0,P.useMemo)(()=>{if(!p)return[];let t=new Map(e.map(e=>[e.id,e])),r=new Set,i=[];for(let e of p.frames){if(r.has(e.screen))continue;r.add(e.screen);let n=t.get(e.screen);n&&i.push(n)}if(n&&!r.has(n)){let e=t.get(n);e&&i.push(e)}return i},[p,e,n]);return(0,H.jsxs)(`section`,{className:a?`shrink-0`:`flex-1 flex flex-col min-h-0`,children:[(0,H.jsxs)(`div`,{className:`px-4 py-2 flex items-center gap-2 text-xs uppercase tracking-wider text-muted-foreground border-b`,children:[(0,H.jsx)(`button`,{type:`button`,onClick:o,className:`shrink-0 hover:text-foreground transition-colors`,"aria-expanded":!a,title:a?`Expand tree`:`Collapse tree`,children:(0,H.jsx)(Ht,{size:13,strokeWidth:2.5,className:`transition-transform duration-200 motion-reduce:transition-none `+(a?``:`rotate-90`)})}),c===null?m.length>1?(0,H.jsxs)(q,{value:n??``,onValueChange:e=>{e&&r(e)},children:[(0,H.jsx)(Y,{size:`sm`,className:`h-6 w-auto min-w-0 max-w-full overflow-hidden px-2 text-[10px] uppercase tracking-wider`,children:(0,H.jsx)(J,{className:`min-w-0 truncate`})}),(0,H.jsx)(vd,{children:m.map(e=>(0,H.jsx)(X,{value:e.id,children:e.name},e.id))})]}):(0,H.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:s?.name??`No screen`}):(0,H.jsxs)(H.Fragment,{children:[(0,H.jsxs)(`button`,{type:`button`,onClick:()=>l(null),className:`inline-flex shrink-0 items-center gap-1 normal-case tracking-normal hover:text-foreground`,title:`Back to the screen (Esc)`,children:[(0,H.jsx)(jt,{size:13,strokeWidth:2.5,"aria-hidden":!0}),`Back`]}),(0,H.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-violet-500`,children:u?.name??c})]})]}),(0,H.jsx)(lE,{open:!a,className:`flex-1 overflow-auto scroll-stable py-1 `+(i===`hand`?`opacity-40 pointer-events-none select-none`:``),"aria-disabled":i===`hand`,children:d?(0,H.jsxs)(H.Fragment,{children:[f?(0,H.jsxs)(Hy,{variant:`destructive`,className:`mx-2 mb-1 w-auto`,children:[(0,H.jsx)(jr,{}),(0,H.jsx)(Uy,{className:`text-xs`,children:f}),(0,H.jsx)(Wy,{className:`text-xs`,children:`Nothing drew, so these rows have nothing to locate on the canvas. The frame says why.`})]}):null,(0,H.jsx)(NE,{screen:d},d.id)]}):(0,H.jsx)(Ku,{className:`px-4 py-2`,children:(0,H.jsx)(Zu,{className:`text-xs`,children:`Pick a screen above to see its tree.`})})})]})}function FE({boards:e,groups:t,enabled:n,onRefile:r}){let i=W(e=>e.reorderBoardsLocal),a=e.length>1&&n,[o,s]=(0,P.useState)(null),[c,l]=(0,P.useState)(null),[u,d]=(0,P.useState)(void 0),f=(0,P.useRef)(!1),p=(0,P.useMemo)(()=>{if(!c)return e;let t=new Map(e.map(e=>[e.id,e])),n=[];for(let e of c){let r=t.get(e);r&&n.push(r)}for(let t of e)c.includes(t.id)||n.push(t);return n},[c,e]),m=()=>{s(null),l(null),d(void 0)},h=(t,n)=>{f.current=!1,s(n),l(e.map(e=>e.id)),d(void 0),t.dataTransfer.effectAllowed=`move`,t.dataTransfer.setData(`text/plain`,n),document.body.classList.add(`velloo-dragging`)},g=(t,n)=>{if(!o||(t.preventDefault(),t.dataTransfer.dropEffect=`move`,n===o))return;let r=e.find(e=>e.id===n);r&&d(r.group??null),l(t=>{let r=t??e.map(e=>e.id),i=r.indexOf(o),a=r.indexOf(n);if(i===-1||a===-1||i===a)return r;let s=[...r];return s.splice(i,1),s.splice(a,0,o),s})},_=()=>{document.body.classList.remove(`velloo-dragging`),!f.current&&m()};return{sections:(0,P.useMemo)(()=>{let e=e=>e.id===o&&u!==void 0?u:e.group??null,n=new Set(t.map(e=>e.id)),r=t.map(t=>({group:t,boards:p.filter(n=>e(n)===t.id)})),i=p.filter(t=>{let r=e(t);return r===null||!n.has(r)});return r.push({group:null,boards:i}),r},[t,p,o,u]),dragging:o!==null,dragGroup:u,rowDrag:e=>({draggable:a,dragging:o===e,onDragStart:t=>h(t,e),onDragOver:t=>g(t,e),onDragEnd:_}),onGroupDragOver:(e,t)=>{o&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,d(t))},onListDragOver:e=>{o&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`)},onListDrop:t=>{if(!o)return;t.preventDefault(),f.current=!0;let n=c,a=u,s=e.find(e=>e.id===o);if(m(),s&&a!==void 0&&(s.group??null)!==a&&r(s.id,a),!n)return;let l=e.map(e=>e.id);n.length===l.length&&n.every((e,t)=>e===l[t])||(i(n),R.reorderBoards({order:n}).catch(e=>{B(e,`Could not reorder boards`),W.getState().refreshDesignSummary()}))}}}var IE=`velloo:collapsedBoardGroups`;function LE(){if(typeof localStorage>`u`)return[];try{let e=localStorage.getItem(IE),t=e?JSON.parse(e):[];return Array.isArray(t)?t.filter(e=>typeof e==`string`):[]}catch{return[]}}function RE(){let[e,t]=(0,P.useState)(LE),[n,r]=(0,P.useState)(null),[i,a]=(0,P.useState)(``),[o,s]=(0,P.useState)(null);return{collapsed:e,toggle:e=>{t(t=>{let n=t.includes(e)?t.filter(t=>t!==e):[...t,e];return typeof localStorage<`u`&&localStorage.setItem(IE,JSON.stringify(n)),n})},dialog:n,name:i,setName:a,openDialog:e=>{e.mode===`create`?(a(`New group`),r({mode:`create`,...e.boardId?{boardId:e.boardId}:{}})):(a(e.group.name),r({mode:`rename`,groupId:e.group.id}))},closeDialog:()=>r(null),submitDialog:async()=>{let e=i.trim();if(!e||!n)return;let t=n;r(null);try{t.mode===`rename`?await R.updateBoardGroup({groupId:t.groupId,patch:{name:e}}):t.boardId?await R.updateBoard({boardId:t.boardId,patch:{group:e}}):await R.addBoardGroup({name:e}),await W.getState().refreshDesignSummary()}catch(e){B(e,t.mode===`rename`?`Could not rename group`:`Could not add group`)}},recolor:(e,t)=>{R.updateBoardGroup({groupId:e,patch:{color:t}}).then(()=>W.getState().refreshDesignSummary()).catch(e=>B(e,`Could not recolor group`))},pendingDelete:o,requestDelete:s,cancelDelete:()=>s(null),confirmDelete:()=>{if(!o)return;let{id:e,name:t}=o;s(null),(async()=>{try{let n=await R.removeBoardGroup({groupId:e});await W.getState().refreshDesignSummary();let r=n.ungroupedBoardIds.length;z({kind:`info`,message:r>0?`Deleted "${t}" — ${r} board${r===1?``:`s`} moved to Ungrouped`:`Deleted "${t}"`})}catch(e){B(e,`Could not delete group`)}})()}}}function zE(e,t){let n=[],r=t.removedScreenIds.length,i=t.removedSnippetIds.length;return r>0&&n.push(`${r} screen${r===1?``:`s`}`),i>0&&n.push(`${i} unused snippet${i===1?``:`s`}`),n.length===0?`Deleted "${e}"`:`Deleted "${e}" and ${n.join(` + `)}`}var BE=[],VE=[];function HE({boards:e,screens:t,currentBoardId:n,currentScreenId:r}){let i=W(e=>e.selectBoard),a=W(e=>e.wsConnected),o=W(e=>e.authStatus?.loggedIn??!1),s=W(e=>e.refreshPublishSlots),c=W(e=>e.boardsCollapsed),l=W(e=>e.treeCollapsed),u=W(e=>e.toggleBoardsCollapsed),d=W(e=>e.setBoardArchived),f=W(e=>e.design?.archivedBoards??BE),p=W(e=>e.design?.boardGroups??VE),m=RE(),[h,g]=(0,P.useState)(null),[_,v]=(0,P.useState)(null),[y,b]=(0,P.useState)(null),[x,S]=(0,P.useState)(``),C=(e,t)=>{R.updateBoard({boardId:e,patch:{group:t}}).then(()=>W.getState().refreshDesignSummary()).catch(e=>B(e,`Could not move board`))},w=()=>{S(`New board`),b({mode:`create`})},T=e=>{S(e.name),b({mode:`rename`,boardId:e.id})},E=async()=>{let e=x.trim();if(!e||!y)return;let t=y;if(b(null),t.mode===`create`)try{let t=await R.addBoard({name:e});i(t.boardId)}catch(e){B(e,`Could not create board`)}else try{await R.updateBoard({boardId:t.boardId,patch:{name:e}})}catch(e){B(e,`Could not rename board`)}},D=()=>{if(!h)return;let{id:e,name:t}=h;g(null),(async()=>{try{let n=await R.removeBoard({boardId:e});W.getState().pruneScreens(n.removedScreenIds),await W.getState().pruneBoard(e),z({kind:`info`,message:zE(t,n)})}catch(e){B(e,`Could not delete board`)}})()},[O,k]=(0,P.useState)(!1),A=f.some(e=>e.id===n);(0,P.useEffect)(()=>{A&&k(!0)},[A]),(0,P.useEffect)(()=>{o&&s()},[o,s]);let j=(e,t)=>{(async()=>{try{await d(e.id,t),z({kind:`info`,message:t?`Archived "${e.name}"`:`Restored "${e.name}"`}),t&&k(!0)}catch(e){B(e,t?`Could not archive board`:`Could not restore board`)}})()},M=FE({boards:e,groups:p,enabled:a,onRefile:C}),ee=c?`shrink-0 border-b`:l?`flex-1 flex flex-col min-h-0 border-b`:`flex flex-col min-h-0 max-h-[50%] border-b`,te=e=>(0,H.jsx)(hE,{board:e,active:e.id===n,groups:p,drag:M.rowDrag(e.id),onRename:()=>T(e),onAddFrame:()=>v(e.id),onMoveToGroup:t=>C(e.id,t),onNewGroup:()=>m.openDialog({mode:`create`,boardId:e.id}),onArchive:()=>j(e,!0),onDelete:()=>g({id:e.id,name:e.name})},e.id);return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsxs)(`section`,{className:ee,children:[(0,H.jsxs)(`div`,{className:`px-4 py-2 flex items-center justify-between gap-2 text-xs uppercase tracking-wider text-muted-foreground`,children:[(0,H.jsxs)(`button`,{type:`button`,onClick:u,className:`flex min-w-0 items-center gap-1.5 hover:text-foreground transition-colors`,"aria-expanded":!c,title:c?`Expand boards`:`Collapse boards`,children:[(0,H.jsx)(Ht,{size:13,strokeWidth:2.5,className:`shrink-0 transition-transform duration-200 motion-reduce:transition-none `+(c?``:`rotate-90`)}),(0,H.jsx)(vn,{size:11,strokeWidth:2,className:`shrink-0`}),` Boards`,c&&e.length>0?(0,H.jsxs)(`span`,{className:`normal-case opacity-60`,children:[`(`,e.length,`)`]}):null]}),(0,H.jsxs)(`div`,{className:`flex items-center gap-0.5`,children:[(0,H.jsx)(G,{variant:`ghost`,size:`icon-xs`,onClick:()=>m.openDialog({mode:`create`}),disabled:!a,title:a?`New group`:`Disconnected — edits are paused.`,children:(0,H.jsx)(on,{})}),(0,H.jsx)(G,{variant:`ghost`,size:`icon-xs`,onClick:w,disabled:!a,title:a?`New board`:`Disconnected — edits are paused.`,children:(0,H.jsx)(nr,{})})]})]}),(0,H.jsxs)(lE,{open:!c,className:`flex min-h-0 flex-1 flex-col overflow-hidden`,children:[e.length===0?(0,H.jsx)(Ku,{className:`gap-1 px-4 pb-2 pt-0`,children:(0,H.jsx)(Zu,{className:`text-sm`,children:f.length>0?`No boards — everything's archived.`:`No boards yet.`})}):(0,H.jsx)(`ul`,{className:`flex flex-1 flex-col gap-0.5 overflow-auto scroll-stable px-2 pb-2 min-h-0`,onDragOver:M.onListDragOver,onDrop:M.onListDrop,children:M.sections.map(e=>{let t=e.group;return t?(0,H.jsxs)(`li`,{children:[(0,H.jsx)(yE,{group:t,count:e.boards.length,collapsed:m.collapsed.includes(t.id),dropTarget:M.dragGroup===t.id,disabled:!a,onToggle:()=>m.toggle(t.id),onDragOver:e=>M.onGroupDragOver(e,t.id),onRename:()=>m.openDialog({mode:`rename`,group:t}),onRecolor:e=>m.recolor(t.id,e),onDelete:()=>m.requestDelete(t)}),(0,H.jsx)(lE,{open:!m.collapsed.includes(t.id),children:(0,H.jsx)(`ul`,{className:`ml-[15px] flex flex-col gap-0.5 border-l-2 pl-2`,style:{borderColor:t.color??`var(--border)`},children:e.boards.map(te)})})]},t.id):(0,H.jsxs)(P.Fragment,{children:[p.length>0&&e.boards.length>0?(0,H.jsxs)(`li`,{onDragOver:e=>M.onGroupDragOver(e,null),className:`mt-1 flex items-center gap-1.5 rounded-md px-1.5 py-1 text-[11px] uppercase tracking-wide text-muted-foreground `+(M.dragGroup===null&&M.dragging?`bg-accent`:``),children:[(0,H.jsx)(`span`,{className:`size-2.5 shrink-0 rounded-[3px] border border-dashed`}),`Ungrouped`,(0,H.jsx)(`span`,{className:`ml-auto normal-case opacity-70`,children:e.boards.length})]}):null,e.boards.map(te)]},`__ungrouped`)})}),f.length===0?null:(0,H.jsx)(_E,{boards:f,currentBoardId:n,open:O,onToggle:()=>k(e=>!e),onRestore:e=>j(e,!1),onDelete:e=>g({id:e.id,name:e.name})})]})]}),(0,H.jsx)(PE,{screens:t,currentBoardId:n,currentScreenId:r}),(0,H.jsx)(ah,{open:y!==null,title:y?.mode===`rename`?`Rename board`:`New board`,placeholder:`Board name`,submitLabel:y?.mode===`rename`?`Rename`:`Create`,maxLength:80,value:x,onValueChange:S,onSubmit:()=>void E(),onCancel:()=>b(null)}),(0,H.jsx)(ah,{open:m.dialog!==null,title:m.dialog?.mode===`rename`?`Rename group`:`New group`,placeholder:`Group name`,submitLabel:m.dialog?.mode===`rename`?`Rename`:`Create`,maxLength:40,value:m.name,onValueChange:m.setName,onSubmit:()=>void m.submitDialog(),onCancel:m.closeDialog}),(0,H.jsx)(lm,{open:m.pendingDelete!==null,title:`Delete group`,description:m.pendingDelete?`Delete the group "${m.pendingDelete.name}"? Its boards aren't deleted — they move to Ungrouped.`:``,confirmLabel:`Delete group`,onConfirm:m.confirmDelete,onCancel:m.cancelDelete}),(0,H.jsx)(xd,{boardId:_,onClose:()=>v(null)}),(0,H.jsx)(lm,{open:h!==null,title:`Delete board`,description:h?`Delete board "${h.name}"? Screens only this board places are deleted with it, along with any snippet nothing else reaches afterwards. Screens another board also places are kept.`:``,confirmLabel:`Delete`,onConfirm:D,onCancel:()=>g(null)})]})}function UE(e){let t=new Map;for(let n of e){let e=n.identity.app,r=n.packageName??n.identity.importPath,i=n.source===`local`?`local:${e??``}`:`package:${r}:${e??``}`,a=n.source===`local`?`This app`:r,o=t.get(i);o||(o={key:i,label:e?`${a} · ${e}`:a,roots:[],entries:[]},t.set(i,o)),o.entries.push(n),n.identity.member||o.roots.push(n)}for(let e of t.values()){let t=new Set(e.roots.map(e=>e.family));for(let n of e.entries)t.has(n.family)||(t.add(n.family),e.roots.push(n));e.roots.sort((e,t)=>e.id.localeCompare(t.id))}return[...t.values()].sort((e,t)=>+!e.key.startsWith(`local:`)-!t.key.startsWith(`local:`)||e.label.localeCompare(t.label))}function WE(e,t){if(!t)return e.roots;let n=new Set(e.entries.filter(e=>e.id.toLowerCase().includes(t)||e.name.toLowerCase().includes(t)).map(e=>e.family));return e.roots.filter(e=>n.has(e.family))}function GE({query:e}){let t=W(e=>e.repoCatalog),n=W(e=>e.loadRepoCatalog);(0,P.useEffect)(()=>{n()},[n]);let r=(0,P.useMemo)(()=>UE(t?.entries??[]),[t]);if(r.length===0)return null;let i=e.trim().toLowerCase(),a=r.map(e=>({source:e,roots:WE(e,i)})).filter(({roots:e})=>e.length>0);return a.length===0?null:(0,H.jsxs)(`div`,{"data-repo-shelves":``,children:[(0,H.jsxs)(`div`,{className:`px-4 pt-3 pb-1.5 flex items-center gap-1.5 text-[10px] uppercase tracking-wider font-semibold text-primary`,children:[(0,H.jsx)(Lt,{size:11,strokeWidth:2}),(0,H.jsx)(`span`,{className:`flex-1`,children:`Repo`})]}),a.map(({source:e,roots:t})=>(0,H.jsx)(KE,{label:e.label,roots:t,forceOpen:i.length>0,defaultOpen:e.key.startsWith(`local:`)||r.length===1},e.key)),(0,H.jsx)(Pp,{className:`mx-2 my-3`})]})}function KE({label:e,roots:t,forceOpen:n,defaultOpen:r}){let[i,a]=(0,P.useState)(r),o=n||i,s=W(e=>e.libraryItem),c=W(e=>e.openLibrary),l=W(e=>e.repoStatus);return hS(t.map(e=>e.id),o),(0,H.jsxs)(Vb,{open:o,onOpenChange:a,"data-repo-source":e,children:[(0,H.jsxs)(Hb,{className:`w-full px-4 pt-2 pb-1 flex items-center gap-1.5 text-[10px] uppercase tracking-wider font-semibold text-muted-foreground hover:text-foreground`,children:[(0,H.jsx)(Ht,{size:11,strokeWidth:2,className:`shrink-0 transition-transform ${o?`rotate-90`:``}`}),(0,H.jsx)(`span`,{className:`flex-1 truncate text-left normal-case tracking-normal font-mono`,children:e}),(0,H.jsx)(U,{variant:`secondary`,className:`px-1.5 py-0 text-[10px] font-normal tabular-nums`,children:t.length})]}),(0,H.jsx)(Ub,{children:(0,H.jsx)(`ul`,{className:`flex flex-col px-2 gap-0.5 pb-1`,children:t.map(e=>{let t=s?.kind===`repo`&&s.id===e.id;return(0,H.jsx)(`li`,{children:(0,H.jsxs)(`button`,{type:`button`,"data-repo-id":e.id,onClick:()=>c({kind:`repo`,id:e.id}),className:`w-full text-left px-2 py-1 rounded-md text-sm transition-colors flex items-center gap-2 `+(t?`bg-primary text-primary-foreground`:`hover:bg-muted`),children:[(0,H.jsx)(`span`,{className:`truncate flex-1`,children:e.id}),e.parts&&e.parts.length>0?(0,H.jsxs)(`span`,{className:`text-[10px] tabular-nums ${t?``:`text-muted-foreground`}`,title:e.parts.join(`, `),children:[`+`,e.parts.length]}):null,(0,H.jsx)(mS,{diagnostic:l[e.id]})]})},e.id)})})})]})}function qE({snippets:e}){let t=W(e=>e.components),n=W(e=>e.components===null&&e.componentsLoading),r=W(e=>e.libraryItem),i=W(e=>e.openLibrary),[a,o]=(0,P.useState)(``),{categories:s,extensions:c}=(0,P.useMemo)(()=>{if(!t)return{categories:[],extensions:[]};let e=[],n=[];for(let r of t)r.kind===`extension`?n.push({id:r.id,label:r.id}):e.push(r);return n.sort((e,t)=>e.id.localeCompare(t.id)),{categories:lS(e),extensions:n}},[t]),l=a.trim().toLowerCase(),u=e=>!l||e.toLowerCase().includes(l),d=e.filter(e=>u(e.name)||u(e.id)),f=c.filter(e=>u(e.id));return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(`section`,{className:`border-b p-2`,children:(0,H.jsxs)(Rf,{className:`h-7`,children:[(0,H.jsx)(Bf,{children:(0,H.jsx)(ur,{size:12,strokeWidth:2})}),(0,H.jsx)(Uf,{type:`text`,value:a,onChange:e=>o(e.target.value),placeholder:`Search library…`})]})}),(0,H.jsxs)(`div`,{className:`flex-1 overflow-auto scroll-stable`,children:[(0,H.jsx)(YE,{icon:(0,H.jsx)(Yt,{size:11,strokeWidth:2}),label:`Snippets`,accent:!0}),e.length===0?(0,H.jsx)(Ku,{className:`gap-2 p-4`,children:(0,H.jsxs)(qu,{className:`gap-1`,children:[(0,H.jsx)(Yu,{variant:`icon`,className:`size-8`,children:(0,H.jsx)(Yt,{})}),(0,H.jsx)(Xu,{className:`text-xs`,children:`No snippets yet.`}),(0,H.jsxs)(Zu,{className:`text-xs`,children:[`Create one with `,(0,H.jsx)(OT,{children:`add_snippet`}),` in the MCP, or save a subtree from a screen.`]})]})}):d.length===0?(0,H.jsx)(XE,{query:a,noun:`snippet`}):(0,H.jsx)(`ul`,{className:`flex flex-col px-2 gap-0.5 pb-1`,children:d.map(e=>{let t=r?.kind===`snippet`&&r.id===e.id;return(0,H.jsx)(`li`,{children:(0,H.jsxs)(`button`,{type:`button`,onClick:()=>i({kind:`snippet`,id:e.id}),className:`w-full text-left px-2 py-1 rounded-md text-sm transition-colors flex items-center gap-2 `+(t?`bg-primary text-primary-foreground`:`hover:bg-muted`),children:[(0,H.jsx)(`span`,{className:`h-1 w-1 rounded-full shrink-0 `+(t?`bg-primary-foreground`:`bg-primary`)}),(0,H.jsx)(`span`,{className:`truncate`,children:e.name})]})},e.id)})}),c.length>0?(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(Pp,{className:`mx-2 my-3`}),(0,H.jsx)(YE,{icon:(0,H.jsx)(Un,{size:11,strokeWidth:2}),label:`Extensions`,count:f.length,accent:!0}),f.length===0?(0,H.jsx)(XE,{query:a,noun:`extension`}):(0,H.jsx)(`ul`,{className:`flex flex-col px-2 gap-0.5 pb-1`,children:f.map(e=>{let t=r?.kind===`component`&&r.id===e.id;return(0,H.jsx)(`li`,{children:(0,H.jsxs)(`button`,{type:`button`,onClick:()=>i({kind:`component`,id:e.id}),className:`w-full text-left px-2 py-1 rounded-md text-sm transition-colors flex items-center gap-2 ${t?`bg-primary text-primary-foreground`:`hover:bg-muted`}`,title:`Custom component registered via add_extension`,children:[(0,H.jsx)(`span`,{className:`h-1 w-1 rounded-full shrink-0 ${t?`bg-primary-foreground`:`bg-primary/60`}`}),(0,H.jsx)(`span`,{className:`truncate`,children:e.label})]})},e.id)})})]}):null,(0,H.jsx)(Pp,{className:`mx-2 my-3`}),(0,H.jsx)(GE,{query:a}),n?(0,H.jsx)(JE,{}):null,s.map(e=>{let t=e.components.filter(u);return t.length===0?null:(0,H.jsxs)(`section`,{className:`pb-2`,children:[(0,H.jsx)(YE,{label:e.label,count:t.length}),(0,H.jsx)(`ul`,{className:`flex flex-col px-2 gap-0.5`,children:t.map(e=>{let t=r?.kind===`component`&&r.id===e;return(0,H.jsx)(`li`,{children:(0,H.jsx)(`button`,{type:`button`,onClick:()=>i({kind:`component`,id:e}),className:`w-full text-left px-2 py-1 rounded-md text-sm transition-colors `+(t?`bg-primary text-primary-foreground`:`hover:bg-muted`),children:e})},e)})})]},e.id)})]})]})}function JE(){return(0,H.jsx)(`div`,{className:`px-4 flex flex-col gap-2`,"aria-hidden":`true`,children:[`70%`,`45%`,`60%`,`38%`,`55%`,`48%`].map(e=>(0,H.jsx)(KS,{className:`h-3.5`,style:{width:e}},e))})}function YE({label:e,count:t,icon:n,accent:r}){return(0,H.jsxs)(`div`,{className:`px-4 pt-3 pb-1.5 flex items-center gap-1.5 text-[10px] uppercase tracking-wider font-semibold `+(r?`text-primary`:`text-muted-foreground`),children:[n,(0,H.jsx)(`span`,{className:`flex-1`,children:e}),t===void 0?null:(0,H.jsx)(U,{variant:`secondary`,className:`px-1.5 py-0 text-[10px] font-normal tabular-nums`,children:t})]})}function XE({query:e,noun:t}){return(0,H.jsx)(Ku,{className:`p-3`,children:(0,H.jsxs)(Zu,{className:`text-xs`,children:[`No `,t,` matches "`,e,`".`]})})}function ZE({boards:e,screens:t,snippets:n,currentBoardId:r,currentScreenId:i}){let a=W(e=>e.view),o=W(e=>e.setView),s=W(e=>e.leftPaneCollapsed),c=W(e=>e.setLeftPaneCollapsed),l=W(e=>e.leftPaneWidth),u=W(e=>e.setLeftPaneWidth),d=W(e=>e.boardPulse),f=e=>{o(e),c(!1)};return(0,H.jsxs)(dT,{side:`left`,collapsed:s,width:l,onResize:u,rail:(0,H.jsx)(oT,{side:`left`,expandLabel:`Expand sidebar`,hotkey:`[`,onExpand:()=>c(!1),actions:[{icon:(0,H.jsx)(vn,{}),label:`Boards`,active:a===`boards`,dot:Object.keys(d).length>0?{title:`an agent edited another board`}:void 0,onClick:()=>f(`boards`)},{icon:(0,H.jsx)(bn,{}),label:`Library`,active:a===`library`,onClick:()=>f(`library`)}]}),children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-1 p-2 border-b`,children:[(0,H.jsx)(H_,{value:a,onValueChange:e=>o(e),className:`min-w-0 flex-1`,children:(0,H.jsxs)(W_,{className:`w-full h-8`,children:[(0,H.jsxs)(G_,{value:`boards`,className:`text-xs`,children:[(0,H.jsx)(vn,{}),`Boards`]}),(0,H.jsxs)(G_,{value:`library`,className:`text-xs`,children:[(0,H.jsx)(bn,{}),`Library`]})]})}),(0,H.jsx)(sT,{side:`left`,label:`Collapse sidebar`,hotkey:`[`,onCollapse:()=>c(!0)})]}),a===`boards`?(0,H.jsx)(HE,{boards:e,screens:t,currentBoardId:r,currentScreenId:i}):(0,H.jsx)(qE,{snippets:n})]})}var QE=1500;function $E(e){let t=e.action??`use velloo-cloud`;return e.expired?{title:`Sign in again to continue`,description:`Your velloo-cloud session has ended, so velloo can't ${t} until you sign back in.`}:e.action?{title:`Sign in to continue`,description:`Signing in to velloo-cloud lets velloo ${t}.`}:{title:`Sign in to velloo-cloud`,description:`Publishing boards and pulling share-link comments need an account.`}}function eD(){let e=W(e=>e.signInPrompt),t=W(e=>e.closeSignIn),n=W(e=>e.refreshAuth),r=e!==null,i=(0,P.useRef)({});e&&(i.current=e);let a=$E(i.current),[o,s]=(0,P.useState)({state:`idle`}),[c,l]=(0,P.useState)(!1),u=(0,P.useRef)(null),d=(0,P.useCallback)(()=>{u.current?.();let e=!0,r,i=()=>{e=!1,r&&clearInterval(r)};u.current=i;let a=e=>{i(),n(),z({kind:`success`,message:e.account?.email?`Signed in as ${e.account.email}.`:`Signed in to velloo-cloud.`}),t()};(async()=>{l(!0);let t;try{t=await bs.login()}catch(t){if(!e)return;l(!1),s({state:`error`,message:t instanceof Error?t.message:`Could not start sign-in.`});return}if(e){if(l(!1),s(t.login),_s(t)){a(t);return}t.login.state===`pending`&&(r=setInterval(()=>{bs.status().then(t=>{if(e){if(_s(t)){a(t);return}s(t.login),t.login.state!==`pending`&&i()}})},QE))}})()},[n,t]);(0,P.useEffect)(()=>{if(!r){u.current?.(),u.current=null,s({state:`idle`}),l(!1);return}return d(),()=>{u.current?.(),u.current=null}},[r,d]);let f=()=>{t(),o.state===`pending`&&bs.cancelLogin().catch(()=>void 0)};return(0,H.jsx)(ud,{open:r,onOpenChange:e=>!e&&f(),children:(0,H.jsxs)(pd,{className:`sm:max-w-md`,children:[(0,H.jsxs)(md,{children:[(0,H.jsx)(gd,{children:a.title}),(0,H.jsx)(_d,{children:a.description})]}),c||o.state===`idle`?(0,H.jsxs)(`div`,{className:`flex items-center gap-2 py-6 text-sm text-muted-foreground`,children:[(0,H.jsx)(yx,{className:`size-3.5`}),`Starting sign-in…`]}):null,o.state===`pending`?(0,H.jsxs)(`div`,{className:`flex flex-col gap-4 py-2`,children:[(0,H.jsxs)(`div`,{className:`flex flex-col items-center gap-2 rounded-md border bg-muted/40 py-4`,children:[(0,H.jsx)(`span`,{className:`text-[11px] uppercase tracking-wide text-muted-foreground`,children:`Your code`}),(0,H.jsx)(`span`,{className:`font-mono text-2xl tracking-[0.2em] tabular-nums`,children:o.userCode})]}),(0,H.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`A browser tab should have opened. Enter the code there to finish signing in — this dialog closes itself once it lands.`}),(0,H.jsxs)(`a`,{href:o.verificationUrl,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1.5 text-sm underline underline-offset-4`,children:[(0,H.jsx)(en,{size:13}),`Open the sign-in page`]})]}):null,o.state===`error`?(0,H.jsxs)(`div`,{className:`flex items-start gap-2 py-2 text-sm text-destructive`,children:[(0,H.jsx)(jr,{size:14,className:`mt-0.5 shrink-0`}),(0,H.jsx)(`span`,{children:o.message})]}):null,(0,H.jsxs)(hd,{children:[(0,H.jsx)(G,{variant:`outline`,onClick:f,children:o.state===`pending`?`Cancel`:`Close`}),o.state===`error`?(0,H.jsx)(G,{onClick:d,children:`Try again`}):null]})]})})}function tD({snippet:e}){return(0,H.jsxs)(`section`,{className:`border-b flex flex-col gap-1 px-3 pt-3 pb-2`,children:[(0,H.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,H.jsx)(`div`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground font-medium`,children:`Params`}),(0,H.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,title:`A param is a contract with every instance of this snippet across every screen. Changing one here could only ever change this side of it, so a removed param left each caller passing an arg that no longer resolved — breaking screens you weren't looking at. Ask your agent: update_snippet moves the declaration and the call sites in one pass.`,children:`read-only`})]}),e.params.length===0?(0,H.jsx)(`div`,{className:`text-[11px] text-muted-foreground mt-1`,children:`No params.`}):(0,H.jsx)(`ul`,{className:`flex flex-col gap-1`,children:e.params.map(e=>(0,H.jsx)(`li`,{className:`rounded-md border bg-background`,children:(0,H.jsx)(nD,{param:e})},e.name))})]})}function nD({param:e}){let t=dS(e);return(0,H.jsxs)(`div`,{className:`flex items-center gap-1.5 px-2 py-1`,children:[(0,H.jsxs)(`span`,{className:`font-mono text-[11px] truncate`,children:[`$`,e.name]}),(0,H.jsx)(U,{variant:`outline`,className:`text-[9px] font-mono shrink-0`,children:e.type}),t?(0,H.jsxs)(`span`,{className:`text-[10px] text-muted-foreground truncate`,children:[`= `,t]}):(0,H.jsx)(`span`,{className:`text-[10px] text-amber-600 dark:text-amber-400`,children:`required`}),e.description?(0,H.jsxs)(`span`,{className:`text-[10px] text-muted-foreground truncate`,title:e.description,children:[`· `,e.description]}):null]})}var rD={name:`Snippet`,w:480,h:360};function iD({snippetId:e,snippetMeta:t,presets:n}){let r=W(e=>e.closeSnippetEditor),i=W(e=>e.themeVersion),a=W(e=>e.designMode),o=W(t=>t.screenVersions[`snippet:${e}`]??0),s=W(e=>e.refreshDesignSummary),c=W(e=>e.setSelection),l=W(e=>e.setHover),u=W(e=>e.setNodeRects),d=W(e=>e.reportRenderError),f=W(e=>e.clearNodeRects),p=W(e=>e.selection),m=W(e=>e.hover),h=W(e=>e.nodeState),g=W(e=>e.setSyntheticScreen),_=W(e=>e.loadComponents),v=`snippet:${e}`,y=W(e=>e.screens[v]??null);(0,P.useEffect)(()=>{_()},[_]);let[b,x]=(0,P.useState)(null),[S,C]=(0,P.useState)(!0),[w,T]=(0,P.useState)(!1);(0,P.useEffect)(()=>{let t=!0;return C(!0),T(!1),ws(e).then(e=>{t&&(x(e),C(!1),g(v,{id:v,name:e.name,tree:e.tree,...e.library?{library:e.library}:{}}))}).catch(()=>{t&&C(!1)}),()=>{t=!1}},[e,g,v]);let E=n.find(e=>e.name.toLowerCase().includes(`desktop`))??n[0]??rD,[D,O]=(0,P.useState)(E),k=a===`dark`?`&mode=dark`:``,A=`/api/render/snippet-body/${encodeURIComponent(e)}?w=${D.w}&h=${D.h}&v=${i}.${o}${k}`,j=(0,P.useRef)(null),M=(0,P.useRef)(null),ee=(0,P.useRef)(null),te=`snippet-view-${e}`;(0,P.useEffect)(()=>{let e=j.current;if(!e)return;let t=new zm(e,{onSelect(e){c(e===null?null:{screenId:v,path:e})},onHover(e){l(e===null?null:{screenId:v,path:e})},onReady(){let e=W.getState();e.selection?.screenId===v&&t.send({type:`applyHighlight`,path:e.selection.path}),e.hover?.screenId===v&&t.send({type:`applyHover`,path:e.hover.path})},onRects(e){u(te,e)},onParentPan(e,t){let n=M.current;n&&(n.scrollLeft+=e,n.scrollTop+=t)}});ee.current=t;let n=()=>{d(v,om(e)),t.attach()};return e.addEventListener(`load`,n),e.contentDocument?.readyState===`complete`&&n(),()=>{e.removeEventListener(`load`,n),t.destroy(),ee.current=null,f(te)}},[S,v,te,c,l,u,f,d]),(0,P.useEffect)(()=>{let e=ee.current;e&&(p?.screenId===v?e.send({type:`applyHighlight`,path:p.path}):e.send({type:`clearHighlight`}))},[p,v]),(0,P.useEffect)(()=>{let e=ee.current;e&&(m?.screenId===v?e.send({type:`applyHover`,path:m.path}):e.send({type:`clearHover`}))},[m,v]),(0,P.useEffect)(()=>{let e=ee.current;if(!e)return;let t=p?.screenId===v?p.path:null;e.send({type:`applyVelloState`,path:t,state:t?h:`default`})},[h,p,v]);let ne=async t=>{try{await I(`update_snippet`,{snippetId:e,patch:{name:t}}),s()}catch(e){B(e,`Could not update snippet`)}};if(S)return(0,H.jsx)(`div`,{className:`flex-1 grid place-items-center text-sm text-muted-foreground`,children:(0,H.jsx)(ih,{size:32,label:`Loading snippet…`,className:`flex-col`})});if(!b)return(0,H.jsxs)(`div`,{className:`flex-1 grid place-items-center text-sm text-muted-foreground gap-2`,children:[(0,H.jsxs)(`div`,{children:[`Snippet "`,e,`" not found.`]}),(0,H.jsxs)(G,{variant:`ghost`,size:`sm`,onClick:r,children:[(0,H.jsx)(jt,{}),` Back`]})]});let re=p?.screenId===v,ie={...b,name:t?.name??b.name,params:t?.params??b.params};return(0,H.jsxs)(`div`,{className:`flex-1 flex min-h-0`,children:[(0,H.jsxs)(`aside`,{className:`flex h-full w-72 shrink-0 flex-col border-r bg-card`,children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 border-b`,children:[(0,H.jsxs)(G,{variant:`ghost`,size:`xs`,onClick:r,className:`-ml-1`,children:[(0,H.jsx)(jt,{size:12}),`Back`]}),(0,H.jsx)(U,{variant:`outline`,className:`ml-auto text-[10px] font-mono`,children:`snippet`})]}),(0,H.jsx)(oD,{snippet:ie,onPatchName:ne}),(0,H.jsx)(tD,{snippet:ie}),(0,H.jsxs)(`div`,{className:`border-t flex-1 overflow-y-auto scroll-stable`,children:[(0,H.jsx)(aD,{children:`Body`}),y?(0,H.jsx)(NE,{screen:y},y.id):(0,H.jsx)(`div`,{className:`px-4 py-3 text-xs text-muted-foreground`,children:`No body to display.`})]})]}),(0,H.jsxs)(`main`,{className:`flex-1 flex flex-col min-w-0 bg-background`,children:[(0,H.jsx)(sD,{presets:n,viewport:D,setViewport:O,snippet:ie}),(0,H.jsx)(`div`,{ref:M,className:`flex-1 overflow-auto scroll-stable bg-muted/30`,children:(0,H.jsx)(`div`,{className:`min-w-fit min-h-full flex items-center justify-center p-8`,children:(0,H.jsxs)(`div`,{className:`flex flex-col items-center gap-3`,children:[(0,H.jsxs)(`div`,{className:`relative rounded-md border bg-white shadow-sm overflow-hidden shrink-0`,style:{width:D.w,height:D.h},children:[(0,H.jsx)(`iframe`,{ref:j,title:`${b.name} preview`,src:A,onLoad:()=>T(!0),className:`block border-0`,style:{width:D.w,height:D.h}}),w?null:(0,H.jsx)(oh,{})]}),(0,H.jsxs)(`div`,{className:`text-xs text-muted-foreground tabular-nums`,children:[D.w,` × `,D.h]})]})})})]}),(0,H.jsx)(`aside`,{className:`w-80 shrink-0 border-l bg-card flex flex-col overflow-hidden`,children:re?(0,H.jsx)(nT,{}):(0,H.jsx)(Ku,{className:`flex-1 p-6`,children:(0,H.jsxs)(qu,{children:[(0,H.jsx)(Yu,{variant:`icon`,children:(0,H.jsx)(Bn,{})}),(0,H.jsx)(Xu,{className:`text-xs`,children:`Nothing selected`}),(0,H.jsx)(Zu,{className:`text-xs`,children:`Click a node in the snippet preview to edit.`})]})})})]})}function aD({children:e}){return(0,H.jsx)(`div`,{className:`px-3 pt-3 pb-1 text-[10px] uppercase tracking-wider text-muted-foreground font-medium`,children:e})}function oD({snippet:e,onPatchName:t}){let[n,r]=(0,P.useState)(!1),[i,a]=(0,P.useState)(e.name),o=(0,P.useRef)(null);(0,P.useEffect)(()=>{a(e.name)},[e.name]),(0,P.useEffect)(()=>{n&&o.current?.focus()},[n]);let s=()=>{let n=i.trim();r(!1),n&&n!==e.name?t(n):a(e.name)};return(0,H.jsxs)(`div`,{className:`px-3 py-2 border-b`,children:[n?(0,H.jsx)(Z,{ref:o,value:i,onChange:e=>a(e.target.value),onBlur:s,onKeyDown:t=>{t.key===`Enter`&&s(),t.key===`Escape`&&(r(!1),a(e.name))},className:`h-7`}):(0,H.jsxs)(`button`,{type:`button`,onClick:()=>r(!0),className:`w-full text-left font-semibold text-sm flex items-center gap-1.5 hover:text-primary group truncate`,title:`Rename snippet`,children:[(0,H.jsx)(_r,{size:11,className:`text-muted-foreground shrink-0`,"aria-hidden":`true`}),(0,H.jsx)(`span`,{className:`truncate`,children:e.name}),(0,H.jsx)(er,{size:10,className:`opacity-0 group-hover:opacity-50 transition-opacity shrink-0`})]}),(0,H.jsxs)(`div`,{className:`mt-0.5 text-[10px] font-mono text-muted-foreground truncate`,children:[`@`,e.id]})]})}function sD({snippet:e,presets:t,viewport:n,setViewport:r}){return(0,H.jsxs)(`header`,{className:`border-b bg-card/40 backdrop-blur-sm px-6 py-2.5 flex items-center gap-3`,children:[(0,H.jsxs)(`div`,{className:`text-xs text-muted-foreground`,children:[`Preview · `,(0,H.jsx)(`span`,{className:`font-medium text-foreground`,children:e.name})]}),(0,H.jsx)(`div`,{className:`flex-1`}),(0,H.jsxs)(q,{value:n.name,onValueChange:e=>{let n=t.find(t=>t.name===e);n&&r(n)},children:[(0,H.jsx)(Y,{size:`sm`,className:`text-xs w-44`,children:(0,H.jsx)(J,{})}),(0,H.jsx)(vd,{children:t.map(e=>(0,H.jsxs)(X,{value:e.name,children:[e.name,` · `,e.w,`×`,e.h]},e.name))})]})]})}function cD({className:e,size:t=24}){return(0,H.jsxs)(`svg`,{viewBox:`0 0 120 120`,width:t,height:t,className:e,role:`img`,"aria-label":`Velloo`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,H.jsx)(`title`,{children:`Velloo`}),(0,H.jsx)(`defs`,{children:(0,H.jsx)(`clipPath`,{id:`velloo-weave`,children:(0,H.jsx)(`rect`,{x:`52`,y:`30`,width:`38`,height:`35`})})}),(0,H.jsx)(`rect`,{x:`21`,y:`21`,width:`58`,height:`58`,rx:`20`,stroke:`#FF6F4D`,strokeWidth:`11`,strokeLinejoin:`round`}),(0,H.jsx)(`rect`,{x:`41`,y:`41`,width:`58`,height:`58`,rx:`20`,stroke:`#FFAB1F`,strokeWidth:`11`,strokeLinejoin:`round`}),(0,H.jsx)(`rect`,{x:`21`,y:`21`,width:`58`,height:`58`,rx:`20`,stroke:`#FF6F4D`,strokeWidth:`11`,strokeLinejoin:`round`,clipPath:`url(#velloo-weave)`})]})}function lD({className:e,fontSize:t=26}){let n=Math.round(t*.57),r=Math.max(1,Math.round(t*.022)),i=Math.round(t*1.55);return(0,H.jsxs)(`span`,{className:e,style:{display:`inline-flex`,alignItems:`center`,gap:Math.round(i*.28)},children:[(0,H.jsx)(cD,{size:i}),(0,H.jsxs)(`span`,{style:{display:`inline-flex`,alignItems:`baseline`,fontFamily:`"Poppins", ui-sans-serif, system-ui, sans-serif`,fontWeight:700,fontSize:t,letterSpacing:`-0.06em`,lineHeight:1},children:[`vell`,(0,H.jsx)(`span`,{style:{width:n,height:n,borderRadius:9999,background:`#FFAB1F`,marginLeft:r,display:`inline-block`}}),(0,H.jsx)(`span`,{style:{width:n,height:n,borderRadius:9999,background:`#FF6F4D`,marginLeft:r,display:`inline-block`}})]})]})}var uD=d(`group/button-group flex w-fit items-stretch *:focus-visible:relative *:focus-visible:z-10 has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-lg [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1`,{variants:{orientation:{horizontal:`[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-lg!`,vertical:`flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-lg!`}},defaultVariants:{orientation:`horizontal`}});function dD({className:e,orientation:t,...n}){return(0,H.jsx)(`div`,{role:`group`,"data-slot":`button-group`,"data-orientation":t,className:V(uD({orientation:t}),e),...n})}function fD({label:e,hotkey:t,children:n}){return(0,H.jsxs)(__,{children:[(0,H.jsx)(v_,{asChild:!0,children:n}),(0,H.jsx)(y_,{children:(0,H.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[e,t?(0,H.jsx)(OT,{className:`border-border/40 bg-background/10 text-current opacity-80`,children:t}):null]})})]})}function pD(){let e=W(e=>e.design),t=W(e=>e.currentScreenId),n=W(e=>e.view),r=W(e=>e.languageTheme),i=W(e=>e.libraryItem),a=W(e=>e.theme),o=W(e=>e.canvasZoom),s=W(e=>e.zoomAtViewportCenter),c=W(e=>e.cursorMode),l=W(e=>e.setCursorMode),u=W(e=>e.enterCommentMode),d=W(e=>e.history),f=W(e=>e.refreshHistory),p=W(e=>e.designMode),m=W(e=>e.setDesignMode),h=W(e=>e.setPublishOpen),g=W(e=>e.publishBoard),_=W(e=>e.view===`boards`&&!e.editingSnippetId&&e.currentBoardId?e.boards[e.currentBoardId]:void 0),v=()=>_?g({id:_.id,name:_.name}):h(!0),y=e?.screens.find(e=>e.id===t),b=n===`library`?[`Library`,...i?[i.id]:[]]:n===`language`?[`Design language`,...r==="default"?[]:[r]]:y?[y.name]:[],x=[...e?.designName?[e.designName]:[],...b],S=p===`dark`,C=!!a?.colorsDark,w=()=>{if(!C){B("This theme has no dark palette. Add `colorsDark` in theme/default.json.",`Theme has no dark palette`);return}m(S?`light`:`dark`)},T=()=>{s({zoom:1})},E=()=>{Hs().catch(e=>B(e,`Undo failed`)).finally(()=>f())},D=()=>{Us().catch(e=>B(e,`Redo failed`)).finally(()=>f())},O=[{value:`select`,icon:(0,H.jsx)(zn,{size:14,strokeWidth:2}),label:`Select`,hotkey:`V`},{value:`hand`,icon:(0,H.jsx)(un,{size:14,strokeWidth:2}),label:`Pan canvas`,hotkey:`H`},{value:`note`,icon:(0,H.jsx)(Cr,{size:14,strokeWidth:2}),label:`Drop a free note`,hotkey:`T`},{value:`comment`,icon:(0,H.jsx)(Pn,{size:14,strokeWidth:2}),label:`Comment on the design`,hotkey:`C`}];return(0,H.jsx)(g_,{delayDuration:200,children:(0,H.jsxs)(`header`,{className:`h-11 shrink-0 border-b bg-card flex items-center gap-3 px-4 text-sm`,children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[(0,H.jsx)(lD,{fontSize:15}),x.length>0?(0,H.jsx)(vS,{children:(0,H.jsx)(yS,{className:`gap-1.5 text-sm sm:gap-1.5`,children:x.map((e,t)=>(0,H.jsxs)(P.Fragment,{children:[(0,H.jsx)(CS,{className:`[&>svg]:size-3`}),(0,H.jsx)(bS,{children:t===x.length-1?(0,H.jsx)(SS,{className:`truncate`,children:e}):(0,H.jsx)(`span`,{className:`truncate`,children:e})})]},t))})}):null]}),(0,H.jsxs)(`div`,{className:`ml-auto flex items-center gap-1.5`,children:[(0,H.jsx)(ed,{}),(0,H.jsx)(mD,{}),(0,H.jsx)(Pp,{orientation:`vertical`,className:`mx-1 h-5`}),(0,H.jsx)(Zp,{type:`single`,variant:`outline`,size:`sm`,spacing:0,value:c,onValueChange:e=>{e&&(e===`comment`?u():l(e))},children:O.map(e=>(0,H.jsx)(fD,{label:e.label,hotkey:e.hotkey,children:(0,H.jsx)(Qp,{value:e.value,"aria-label":e.label,"aria-pressed":c===e.value,"data-state":c===e.value?`on`:`off`,className:c===e.value?`bg-accent text-accent-foreground hover:bg-accent hover:text-accent-foreground`:void 0,children:e.icon})},e.value))}),(0,H.jsx)(hD,{}),(0,H.jsx)(fD,{label:S?`Design theme: dark — show designs in light (pinned frames keep theirs)`:`Design theme: light — show designs in dark (pinned frames keep theirs)`,children:(0,H.jsx)(G,{variant:`outline`,size:`icon-sm`,onClick:w,"aria-label":S?`Show designs in light`:`Show designs in dark`,children:S?(0,H.jsx)(Tr,{}):(0,H.jsx)(Rn,{})})}),(0,H.jsxs)(dD,{className:`ml-2`,children:[(0,H.jsx)(fD,{label:`Undo${d.undo>0?` — ${d.undo} step${d.undo===1?``:`s`}`:``}`,hotkey:`⌘Z`,children:(0,H.jsx)(G,{variant:`outline`,size:`icon-sm`,onClick:E,disabled:d.undo===0,children:(0,H.jsx)(Nr,{})})}),(0,H.jsx)(fD,{label:`Redo${d.redo>0?` — ${d.redo} step${d.redo===1?``:`s`}`:``}`,hotkey:`⌘⇧Z`,children:(0,H.jsx)(G,{variant:`outline`,size:`icon-sm`,onClick:D,disabled:d.redo===0,children:(0,H.jsx)(ar,{})})})]}),(0,H.jsx)(Pp,{orientation:`vertical`,className:`mx-1 h-5`}),(0,H.jsxs)(dD,{children:[(0,H.jsx)(fD,{label:`Zoom out`,hotkey:`−`,children:(0,H.jsx)(G,{variant:`outline`,size:`icon-sm`,onClick:()=>s({factor:1/1.1}),children:(0,H.jsx)(In,{})})}),(0,H.jsx)(fD,{label:`Reset zoom`,hotkey:`0`,children:(0,H.jsxs)(G,{variant:`outline`,size:`sm`,onClick:T,className:`min-w-[3rem] tabular-nums text-muted-foreground`,children:[Math.round(o*100),`%`]})}),(0,H.jsx)(fD,{label:`Zoom in`,hotkey:`+`,children:(0,H.jsx)(G,{variant:`outline`,size:`icon-sm`,onClick:()=>s({factor:1.1}),children:(0,H.jsx)(nr,{})})})]}),(0,H.jsx)(Pp,{orientation:`vertical`,className:`mx-1 h-5`}),(0,H.jsx)(fD,{label:`Publish this board as a share link`,children:(0,H.jsxs)(G,{variant:`outline`,size:`sm`,onClick:v,children:[(0,H.jsx)(pr,{}),(0,H.jsx)(`span`,{children:`Publish`})]})}),(0,H.jsx)(tS,{})]})]})})}function mD(){let e=W(e=>e.setSearchOpen);return(0,H.jsx)(fD,{label:`Search boards, screens & text`,hotkey:`⌘K`,children:(0,H.jsx)(G,{variant:`outline`,size:`icon-sm`,onClick:()=>e(!0),children:(0,H.jsx)(ur,{})})})}function hD(){let e=W(e=>e.markupVisible),t=W(e=>e.setMarkupVisible);return(0,H.jsx)(fD,{label:e?`Hide notes + comments`:`Show notes + comments`,children:(0,H.jsx)(G,{variant:`outline`,size:`icon-sm`,onClick:()=>t(!e),children:e?(0,H.jsx)(nn,{}):(0,H.jsx)(tn,{})})})}function gD(e){return e===`system`?typeof window>`u`?`light`:window.matchMedia?.(`(prefers-color-scheme: dark)`).matches?`dark`:`light`:e}function _D(e){let t=gD(W(e=>e.appTheme));return(0,H.jsx)(p,{theme:t,className:`toaster group`,style:{"--normal-bg":`var(--popover)`,"--normal-text":`var(--popover-foreground)`,"--normal-border":`var(--border)`},...e})}function vD(){let e=e=>{e.ctrlKey&&e.preventDefault()},t=e=>e.preventDefault();window.addEventListener(`wheel`,e,{passive:!1});for(let e of yD)document.addEventListener(e,t);return()=>{window.removeEventListener(`wheel`,e);for(let e of yD)document.removeEventListener(e,t)}}var yD=[`gesturestart`,`gesturechange`];function bD(){let e=new URLSearchParams(window.location.search),t=e.get(`view`),n=t===`library`||t===`snippet`||t===`language`?t:`boards`,r=e.get(`item`),i=null;if(n===`library`&&r){let[e,...t]=r.split(`:`);(e===`component`||e===`snippet`||e===`repo`)&&t.length>0&&(i={kind:e,id:t.join(`:`)})}let a=e.get(`board`),o=e.get(`screen`),s=e.get(`sel`),c=o&&s!==null?{screenId:o,path:s}:null,l=n===`snippet`?e.get(`snippet`):null;return{view:n,libraryItem:i,boardId:a,screenId:o,selection:c,snippetId:l}}function xD(e,t,n,r,i,a,o){let s=new URL(window.location.href);s.searchParams.delete(`view`),s.searchParams.delete(`item`),s.searchParams.delete(`board`),s.searchParams.delete(`screen`),s.searchParams.delete(`sel`),s.searchParams.delete(`snippet`),e===`snippet`&&a?(s.searchParams.set(`view`,`snippet`),s.searchParams.set(`snippet`,a)):e===`library`?(s.searchParams.set(`view`,`library`),t&&s.searchParams.set(`item`,`${t.kind}:${t.id}`)):e===`language`?s.searchParams.set(`view`,`language`):(n&&s.searchParams.set(`board`,n),r&&s.searchParams.set(`screen`,r),i&&s.searchParams.set(`sel`,i.path)),o?window.history.pushState({},``,s.toString()):window.history.replaceState({},``,s.toString())}function SD(e){let t=W.getState();return e.view===t.view&&e.view===`boards`&&(!e.boardId||e.boardId===t.currentBoardId)&&(!e.screenId||e.screenId===t.currentScreenId)}function CD(e){return e?`${e.kind}:${e.id}`:``}function wD(){let e=W(e=>e.view),t=W(e=>e.libraryItem),n=W(e=>e.currentBoardId),r=W(e=>e.currentScreenId),i=W(e=>e.selection),a=W(e=>e.editingSnippetId),o=(0,P.useRef)(void 0),s=(0,P.useRef)(void 0),c=(0,P.useRef)(void 0),l=(0,P.useRef)(!1);(0,P.useEffect)(()=>{if(l.current){l.current=!1,o.current=n,s.current=e,c.current=CD(t);return}let u=o.current,d=s.current,f=c.current,p=CD(t),m=e===`boards`&&!!(u&&n&&u!==n),h=d!==void 0&&d!==e,g=e===`library`&&f!==void 0&&f!==p;o.current=n,s.current=e,c.current=p,xD(e,t,n,r,i,a,m||h||g)},[e,t,n,r,i,a]),(0,P.useEffect)(()=>{let e=e=>{let t=W.getState(),n=[];e.view===t.view?e.view===`library`?t.openLibrary(e.libraryItem):e.view===`snippet`&&e.snippetId&&t.openSnippetEditor(e.snippetId):e.view===`snippet`&&e.snippetId?t.openSnippetEditor(e.snippetId):e.view===`library`?t.openLibrary(e.libraryItem):e.view===`language`?n.push(t.openLanguage().catch(e=>B(e,`Could not open the design language`))):t.editingSnippetId?t.closeSnippetEditor():t.closeLibrary(),e.view===`boards`&&(e.boardId&&e.boardId!==t.currentBoardId&&n.push(t.selectBoard(e.boardId)),e.screenId&&e.screenId!==t.currentScreenId&&n.push(t.selectScreen(e.screenId))),Promise.all(n).then(()=>{e.view===`boards`&&t.setSelection(e.selection)})},t=()=>{let t=bD();if(l.current=!0,W.getState().view!==`language`||t.view===`language`){e(t);return}(async()=>{try{await W.getState().cancelLanguage()}catch(e){B(e,`Could not undo the changes`);return}W.getState().view!==`language`&&(SD(t)||(l.current=!0),e(t))})()};return window.addEventListener(`popstate`,t),()=>window.removeEventListener(`popstate`,t)},[])}function TD(){let e=null,t=!1,n=250;function r(){if(t)return;let i=`${window.location.protocol===`https:`?`wss:`:`ws:`}//${window.location.host}/ws`;e=new WebSocket(i),e.onopen=()=>{n=250,Ur(!0);let e=W.getState(),t=e.wsEverConnected&&!e.wsConnected;e.setWsConnected(!0),e.design===null?e.bootError!==null&&e.loadDesign():t&&e.resyncAfterReconnect()},e.onmessage=e=>{let t=Kr(e.data);if(!t)return;if(t.type===`activity`){let e=xc(t);e&&W.getState().recordActivity(e);return}let{currentScreenId:n,currentBoardId:r,refreshScreen:i,refreshBoard:a,refreshDesignSummary:o,refreshHistory:s,refreshTheme:c,refreshAnnotations:l,refreshNotes:u,refreshComments:d,screens:f,boards:p}=W.getState();if(s(),t.type===`screen-changed`)t.screenId in f?i(t.screenId):o();else if(t.type===`board-changed`)t.boardId in p?a(t.boardId):o();else if(t.type===`theme-changed`)c(),W.getState().refreshLanguage().catch(()=>{});else if(t.type===`snippet-changed`){o(),n&&i(n);let e=W.getState();(e.editingSnippetId===t.snippetId||e.snippetFocus===t.snippetId)&&(async()=>{try{let e=await ws(t.snippetId);W.getState().setSyntheticScreen(`snippet:${t.snippetId}`,{id:`snippet:${t.snippetId}`,name:e.name,tree:e.tree,...e.library?{library:e.library}:{}})}catch{}})()}else if(t.type===`annotations-changed`){let e=r?p[r]:null;(e?.frames.some(e=>e.screen===t.screenId)||!e&&t.screenId===n)&&l()}else t.type===`notes-changed`?t.boardId===r&&u():t.type===`comments-changed`?(t.boardId===r&&d(),W.getState().refreshCommentCounts()):t.type===`config-changed`?(o(),W.getState().folderConfig&&W.getState().loadFolderConfig(),W.getState().reloadRepoCatalog(),W.getState().resetLibraryStatus()):t.type===`folder-reloaded`?(W.getState().reloadAll(),W.getState().reloadRepoCatalog(),W.getState().resetLibraryStatus()):t.type===`reload-error`&&z({kind:`error`,title:`File change not applied`,message:`${t.source}: ${t.message}`,ttl:8e3})},e.onclose=()=>{Ur(!1),W.getState().setWsConnected(!1),!t&&(setTimeout(r,n),n=Math.min(n*2,5e3))},e.onerror=()=>{e?.close()}}return r(),()=>{t=!0,e?.close()}}var ED=6e4;function DD(){(0,P.useEffect)(()=>{let e=nc(e=>W.getState().openSignIn(e)),t=()=>void W.getState().refreshAuth();t();let n=setInterval(t,ED),r=()=>{document.visibilityState===`visible`&&t()};return document.addEventListener(`visibilitychange`,r),()=>{e(),clearInterval(n),document.removeEventListener(`visibilitychange`,r)}},[])}function OD(){(0,P.useEffect)(()=>{let e=()=>W.getState().syncPaneLayout(window.innerWidth);return e(),window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[])}function kD(){let e=W(e=>e.design),t=W(e=>e.bootError),n=W(e=>e.view),r=W(e=>e.libraryItem),i=W(e=>e.editingSnippetId),a=W(e=>e.currentBoardId),o=W(e=>e.currentScreenId),s=W(e=>a?e.boards[a]??null:null),c=W(e=>e.loadDesign),l=W(e=>e.setSelection),u=(0,P.useRef)(!1),d=(0,P.useRef)(null),[f,p]=(0,P.useState)(null);return(0,P.useEffect)(()=>{if(u.current)return;u.current=!0;let e=bD();return e.view===`library`?W.getState().openLibrary(e.libraryItem):e.view===`snippet`&&e.snippetId?W.getState().openSnippetEditor(e.snippetId):e.view===`language`&&W.getState().setView(`language`),(async()=>{await c({boardId:e.boardId,screenId:e.screenId}),W.getState().refreshLanguage().catch(()=>{}),e.view===`boards`&&e.selection&&l(e.selection),e.view===`language`&&await W.getState().openLanguage().catch(e=>B(e,`Could not open the design language`))})(),TD()},[c,l]),wD(),Uu(),DD(),OD(),(0,P.useEffect)(Vx,[]),(0,P.useEffect)(vD,[]),(0,P.useEffect)(()=>{document.title=Wu(e?.designName,s?.name)},[e?.designName,s?.name]),(0,P.useEffect)(()=>{let e=e=>{let t=e.target,n=t&&(t.tagName===`INPUT`||t.tagName===`TEXTAREA`||t.isContentEditable),r=e.metaKey||e.ctrlKey,i=W.getState();if(r&&(e.key===`k`||e.key===`K`))e.preventDefault(),i.setSearchOpen(!i.searchOpen);else if(r&&(e.key===`z`||e.key===`Z`)&&!e.shiftKey){if(n)return;e.preventDefault(),Hs().catch(e=>B(e,`Undo failed`)).finally(()=>i.refreshHistory())}else if(r&&(e.key===`z`||e.key===`Z`)&&e.shiftKey){if(n)return;e.preventDefault(),Us().catch(e=>B(e,`Redo failed`)).finally(()=>i.refreshHistory())}else if(!r&&!n&&(e.key===`=`||e.key===`+`))e.preventDefault(),i.zoomAtViewportCenter({factor:1.1});else if(!r&&!n&&e.key===`-`)e.preventDefault(),i.zoomAtViewportCenter({factor:1/1.1});else if(!r&&!n&&e.key===`0`)e.preventDefault(),i.zoomAtViewportCenter({zoom:1});else if(!r&&!n&&e.key===`[`)e.preventDefault(),i.setLeftPaneCollapsed(!i.leftPaneCollapsed);else if(!r&&!n&&e.key===`]`)e.preventDefault(),i.setRightPaneCollapsed(!i.rightPaneCollapsed);else if(!r&&!n&&(e.key===`v`||e.key===`V`))i.setCursorMode(`select`);else if(!r&&!n&&(e.key===`h`||e.key===`H`))i.setCursorMode(`hand`);else if(!r&&!n&&(e.key===`t`||e.key===`T`))e.preventDefault(),i.noteOnSelection()||i.setCursorMode(`note`);else if(!r&&!n&&(e.key===`c`||e.key===`C`))e.preventDefault(),i.enterCommentMode();else if(e.key===` `&&!n&&!d.current)e.preventDefault(),d.current=i.cursorMode,i.setCursorMode(`hand`);else if(e.key===`Escape`){if(i.snippetFocus){e.preventDefault(),i.setSnippetFocus(null);return}if(i.editingSnippetId){e.preventDefault(),i.closeSnippetEditor();return}i.setCursorMode(`select`),i.setEditingMarkupId(null)}},t=e=>{if(e.key===` `&&d.current){let e=d.current;d.current=null,W.getState().setCursorMode(e)}};return window.addEventListener(`keydown`,e),window.addEventListener(`keyup`,t),()=>{window.removeEventListener(`keydown`,e),window.removeEventListener(`keyup`,t)}},[]),(0,P.useEffect)(()=>{let e=[`hand`,`note`,`comment`],t=t=>{for(let n of e)document.body.classList.toggle(`velloo-${n}`,t===n)};t(W.getState().cursorMode);let n=W.subscribe((e,n)=>{e.cursorMode!==n.cursorMode&&t(e.cursorMode)});return()=>{n();for(let t of e)document.body.classList.remove(`velloo-${t}`)}},[]),e?(0,H.jsxs)(`div`,{className:`h-full flex flex-col`,children:[(0,H.jsx)(pD,{}),(0,H.jsx)(AD,{}),(0,H.jsxs)(`div`,{className:`flex-1 flex min-h-0`,children:[n===`language`?(0,H.jsx)(cx,{}):(0,H.jsx)(ZE,{boards:e.boards,screens:e.screens,snippets:e.snippets,currentBoardId:a,currentScreenId:o}),(0,H.jsx)(`main`,{className:`flex-1 flex flex-col min-w-0`,children:n===`snippet`&&i?(0,H.jsx)(iD,{snippetId:i,snippetMeta:e.snippets.find(e=>e.id===i)??null,presets:e.viewportPresets}):n===`library`?r?(0,H.jsx)(BS,{item:r,snippets:e.snippets}):(0,H.jsx)(XS,{snippets:e.snippets}):n===`language`?(0,H.jsx)(dx,{}):s&&s.frames.length>0?(0,H.jsx)(Xv,{board:s}):s?(0,H.jsx)(px,{title:`Board "${s.name}" is empty`,hint:`Ask your agent to design something here — it places screens on boards through the velloo MCP tools. Or place an existing screen yourself.`,action:e.screens.length>0?(0,H.jsxs)(G,{variant:`outline`,onClick:()=>p(s.id),children:[(0,H.jsx)(nr,{}),`Add frame`]}):void 0}):e.boards.length===0?(0,H.jsx)(my,{onNewBoard:()=>{(async()=>{try{let e=await R.addBoard({name:`Main`});await W.getState().selectBoard(e.boardId)}catch(e){B(e,`Could not create board`)}})()}}):(0,H.jsx)(px,{title:`No board selected`,hint:`Pick a board from the sidebar to see its frames.`})}),n===`boards`?(0,H.jsx)(ET,{screenId:o}):null]}),(0,H.jsx)(jT,{}),(0,H.jsx)(vx,{}),(0,H.jsx)(rC,{}),(0,H.jsx)(oE,{}),(0,H.jsx)(xd,{boardId:f,onClose:()=>p(null)}),(0,H.jsx)(Cx,{}),(0,H.jsx)(eD,{}),(0,H.jsx)(wC,{}),(0,H.jsx)(Ox,{}),(0,H.jsx)(rS,{}),(0,H.jsx)(_y,{}),(0,H.jsx)(od,{}),(0,H.jsx)(_D,{})]}):t?(0,H.jsx)(`div`,{className:`h-full grid place-items-center p-8`,children:(0,H.jsxs)(`div`,{className:`max-w-md text-center flex flex-col items-center gap-3`,children:[(0,H.jsx)(zr,{className:`text-muted-foreground`,size:28}),(0,H.jsx)(`div`,{className:`text-base font-medium`,children:`Can't reach the velloo daemon`}),(0,H.jsxs)(`div`,{className:`text-sm text-muted-foreground`,children:[`The design server isn't answering (`,t,`). Start it with`,` `,(0,H.jsx)(`span`,{className:`font-mono`,children:`velloo run`}),` — the canvas reconnects automatically, or retry now.`]}),(0,H.jsx)(G,{variant:`outline`,onClick:()=>void W.getState().loadDesign(),children:`Retry`})]})}):(0,H.jsx)(`div`,{className:`h-full grid place-items-center`,children:(0,H.jsx)(ih,{size:44})})}function AD(){let e=W(e=>e.wsConnected),t=W(e=>e.wsEverConnected);return e||!t?null:(0,H.jsxs)(`div`,{role:`status`,className:`shrink-0 flex items-center justify-center gap-2 px-4 py-1.5 text-xs font-medium bg-destructive text-destructive-foreground`,children:[(0,H.jsx)(zr,{size:13}),`Disconnected from the velloo daemon — designs are view-only until it comes back. Reconnecting…`]})}var jD=document.getElementById(`root`);if(!jD)throw Error(`missing #root`);(0,Vr.createRoot)(jD).render((0,H.jsx)(P.StrictMode,{children:(0,H.jsx)(kD,{})}));export{Hn as $,Vt as $t,dr as A,dn as At,tr as B,en as Bt,vr as C,vn as Ct,mr as D,mn as Dt,hr as E,hn as Et,or as F,on as Ft,Xn as G,Yt as Gt,$n as H,Qt as Ht,ar as I,an as It,qn as J,Kt as Jt,Yn as K,Jt as Kt,ir as L,rn as Lt,lr as M,ln as Mt,cr as N,cn as Nt,pr as O,pn as Ot,sr as P,sn as Pt,Un as Q,Ht as Qt,rr as R,nn as Rt,yr as S,yn as St,gr as T,gn as Tt,Qn as U,Zt as Ut,er as V,$t as Vt,Zn as W,Xt as Wt,Gn as X,Wt as Xt,Kn as Y,Gt as Yt,Wn as Z,Ut as Zt,wr as _,Tt as _n,wn as _t,Ir as a,Ft as an,In as at,xr as b,xn as bt,Nr as c,Mt as cn,Nn as ct,Ar as d,kt as dn,An as dt,Bt as en,Vn as et,kr as f,Ot as fn,kn as ft,Tr as g,wt as gn,Tn as gt,Er as h,Et as hn,En as ht,Lr as i,It as in,Ln as it,ur as j,un as jt,fr as k,fn as kt,Mr as l,jt as ln,Mn as lt,Dr as m,F as mn,Dn as mt,zr as n,Rt as nn,zn as nt,Fr as o,Pt as on,Fn as ot,Or as p,Dt as pn,On as pt,Jn as q,qt,Rr as r,Lt as rn,Rn as rt,Pr as s,Nt as sn,Pn as st,Br as t,zt as tn,Bn as tt,jr as u,At as un,jn as ut,Cr as v,Cn as vt,_r as w,_n as wt,br as x,bn as xt,Sr as y,Sn as yt,nr as z,tn as zt};