velloo 0.1.0 → 0.2.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 (96) hide show
  1. package/README.md +66 -40
  2. package/canvas/assets/index-ClaBqcaS.js +28 -0
  3. package/canvas/assets/lucide-all-iIF-pmzN.js +1 -0
  4. package/canvas/index.html +1 -1
  5. package/{chunk-k6ferbam.js → chunk-08sv3k41.js} +1 -1
  6. package/{chunk-74skmg76.js → chunk-0fe83yzt.js} +1 -1
  7. package/{chunk-n5007jcz.js → chunk-1h55s5he.js} +1 -1
  8. package/{chunk-5js0qw32.js → chunk-2c7jbx46.js} +1 -1
  9. package/chunk-308ynsxd.js +2 -0
  10. package/{chunk-w5rzk6ms.js → chunk-3e8vez4d.js} +2 -2
  11. package/{chunk-bk8b7f9a.js → chunk-40xgcth8.js} +4 -3
  12. package/chunk-4dn75m6t.js +3 -0
  13. package/chunk-4fj5tahv.js +3 -0
  14. package/chunk-6nqghjda.js +3 -0
  15. package/chunk-6w6ch4ce.js +2 -0
  16. package/chunk-735ezz23.js +86 -0
  17. package/chunk-7eq7nx37.js +7 -0
  18. package/chunk-7eyb8yrf.js +6 -0
  19. package/{chunk-8ssr8a8w.js → chunk-80fjfyha.js} +3 -6
  20. package/{chunk-b7j86xq7.js → chunk-80r93t2e.js} +1 -1
  21. package/chunk-94vx1yb0.js +3 -0
  22. package/{chunk-g02nd9hn.js → chunk-a84n72m2.js} +1 -1
  23. package/chunk-ampmdzz4.js +10 -0
  24. package/chunk-avns4dbf.js +2 -0
  25. package/{chunk-kxk5x7g6.js → chunk-ayrb3qnm.js} +1 -1
  26. package/{chunk-fgw3hp2v.js → chunk-bwnvcncx.js} +1 -1
  27. package/chunk-ccszg02q.js +5 -0
  28. package/{chunk-jnsfgtn9.js → chunk-cvn689d5.js} +1 -1
  29. package/{chunk-65wb0g7d.js → chunk-dg6z4vdd.js} +1 -1
  30. package/chunk-dgwjpbp9.js +3 -0
  31. package/{chunk-hs2j6s1v.js → chunk-dy41n60j.js} +8 -31
  32. package/{chunk-e2ag33vd.js → chunk-ek71z2fv.js} +2 -2
  33. package/{chunk-h0c36khx.js → chunk-er1fxb7d.js} +1 -1
  34. package/{chunk-xr6f94rj.js → chunk-eyr8hrzf.js} +1 -1
  35. package/{chunk-56vqqr8s.js → chunk-fsbsksga.js} +1 -1
  36. package/{chunk-t2ttkxe9.js → chunk-hcb68zt7.js} +1 -1
  37. package/chunk-j11fyeqh.js +2 -0
  38. package/{chunk-d385435m.js → chunk-jb21jkp1.js} +1 -1
  39. package/{chunk-7e39xe21.js → chunk-jfx9xjmr.js} +1 -1
  40. package/{chunk-b2ebm1t3.js → chunk-jr0ss0mm.js} +1 -1
  41. package/chunk-jv0xggh0.js +2 -0
  42. package/chunk-k17gfwq3.js +2 -0
  43. package/chunk-mh2pr7cq.js +5 -0
  44. package/chunk-mnapdp1y.js +2 -0
  45. package/chunk-n9gs6yx9.js +2 -0
  46. package/chunk-ngnymg2q.js +3 -0
  47. package/{chunk-79ykzywe.js → chunk-pjtg3wnm.js} +1 -1
  48. package/{chunk-2z0k59hz.js → chunk-pp86v6m6.js} +1 -1
  49. package/chunk-r22epxz2.js +3 -0
  50. package/chunk-rgasy862.js +5 -0
  51. package/{chunk-7p7ha0qk.js → chunk-rpwpeph5.js} +1 -1
  52. package/{chunk-k784090q.js → chunk-sjgqnykd.js} +1 -1
  53. package/chunk-sn3x2m0m.js +6 -0
  54. package/{chunk-mq4znqv2.js → chunk-t448rrfr.js} +1 -1
  55. package/{chunk-329e3phg.js → chunk-tdsk5wxa.js} +25 -25
  56. package/{chunk-2vx420g2.js → chunk-v40fn08f.js} +1 -1
  57. package/chunk-vdkrbzh1.js +2 -0
  58. package/{chunk-1gx45384.js → chunk-vgmr98cv.js} +7 -8
  59. package/chunk-vsv8z729.js +6 -0
  60. package/chunk-x4f4k9pp.js +26 -0
  61. package/{chunk-cep3ktr3.js → chunk-xt5ayg7g.js} +1 -1
  62. package/{chunk-rksq3w72.js → chunk-ydhwv29b.js} +1 -1
  63. package/chunk-zb6hc1y0.js +2 -0
  64. package/cli.js +1 -1
  65. package/launcher.cjs +1 -1
  66. package/package.json +3 -3
  67. package/pkgs/schema/src/config.ts +8 -1
  68. package/pkgs/schema/src/index.ts +8 -0
  69. package/pkgs/schema/src/migrate.ts +57 -4
  70. package/pkgs/schema/src/repo.ts +98 -16
  71. package/pkgs/schema/src/svg-sanitize.ts +472 -59
  72. package/skills/velloo-setup/SKILL.md +1 -1
  73. package/canvas/assets/index-BcBJ11d2.js +0 -28
  74. package/canvas/assets/lucide-all-BdEyryfF.js +0 -1
  75. package/chunk-1bywxgc5.js +0 -4
  76. package/chunk-1y50g9vp.js +0 -2
  77. package/chunk-1yhc252b.js +0 -3
  78. package/chunk-2mv65qxs.js +0 -5
  79. package/chunk-40657ggd.js +0 -10
  80. package/chunk-582y60bv.js +0 -2
  81. package/chunk-5x173xay.js +0 -2
  82. package/chunk-75wbh438.js +0 -2
  83. package/chunk-7dggmqwq.js +0 -53
  84. package/chunk-946pcnt5.js +0 -5
  85. package/chunk-aapybh30.js +0 -6
  86. package/chunk-bjnhhsak.js +0 -2
  87. package/chunk-dt03awr1.js +0 -2
  88. package/chunk-erwfk47h.js +0 -3
  89. package/chunk-nfr3q7mg.js +0 -5
  90. package/chunk-nsqs1bqf.js +0 -2
  91. package/chunk-pphgrsxa.js +0 -2
  92. package/chunk-qpvj6kzq.js +0 -6
  93. package/chunk-qwv7xkms.js +0 -2
  94. package/chunk-tmtzxcs5.js +0 -2
  95. package/chunk-y0zxzefg.js +0 -5
  96. package/chunk-zf3xc1wz.js +0 -2
@@ -0,0 +1,28 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/lucide-all-iIF-pmzN.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,t as r}from"./react-D0Ec-185.js";import{C as i,D as a,E as o,S as s,T as c,_ as l,a as u,b as d,c as f,d as p,f as m,g as h,h as g,i as _,l as v,m as y,n as b,o as x,p as S,r as C,s as w,t as ee,u as T,v as E,w as D,x as O,y as k}from"./vendor-CKmQ-Zst.js";import{$ as te,A as ne,B as re,C as ie,D as ae,E as oe,F as se,G as ce,H as le,I as ue,J as de,K as fe,L as A,M as pe,N as me,O as he,P as ge,Q as _e,R as ve,S as ye,T as be,U as xe,V as Se,W as Ce,X as we,Y as Te,Z as Ee,_ as De,a as Oe,at as ke,b as Ae,c as je,ct as Me,d as Ne,dt as Pe,et as Fe,f as Ie,ft as Le,g as Re,gt as ze,h as Be,ht as Ve,i as He,it as Ue,j as We,k as Ge,l as Ke,lt as qe,m as Je,mt as Ye,n as Xe,nt as Ze,o as Qe,ot as $e,p as et,pt as tt,q as nt,r as rt,rt as it,s as at,st as ot,t as st,tt as ct,u as lt,ut,v as dt,w as ft,x as pt,y as mt,z as ht}from"./radix-C3HaOB-d.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 gt=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),_t=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),vt=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),yt=e=>{let t=vt(e);return t.charAt(0).toUpperCase()+t.slice(1)},bt={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`},xt=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},j=e(t(),1),St=(0,j.createContext)({});function Ct({children:e,size:t,color:n,strokeWidth:r,absoluteStrokeWidth:i,className:a}){let o=(0,j.useMemo)(()=>({size:t,color:n,strokeWidth:r,absoluteStrokeWidth:i,className:a}),[t,n,r,i,a]);return(0,j.createElement)(St.Provider,{value:o},e)}var wt=()=>(0,j.useContext)(St),Tt=(0,j.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=``}=wt()??{},m=r??d?Number(n??u)*24/Number(t??l):n??u;return(0,j.createElement)(`svg`,{ref:c,...bt,width:t??l??bt.width,height:t??l??bt.height,stroke:e??f,strokeWidth:m,className:gt(`lucide`,p,i),...!a&&!xt(s)&&{"aria-hidden":`true`},...s},[...o.map(([e,t])=>(0,j.createElement)(e,t)),...Array.isArray(a)?a:[a]])}),M=(e,t)=>{let n=(0,j.forwardRef)(({className:n,...r},i)=>(0,j.createElement)(Tt,{ref:i,iconNode:t,className:gt(`lucide-${_t(yt(e))}`,`lucide-${e}`,n),...r}));return n.displayName=yt(e),n},Et=M(`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`}]]),Dt=M(`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`}]]),Ot=M(`arrow-down`,[[`path`,{d:`M12 5v14`,key:`s699le`}],[`path`,{d:`m19 12-7 7-7-7`,key:`1idqje`}]]),kt=M(`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`}]]),At=M(`arrow-left`,[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]),jt=M(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),Mt=M(`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`}]]),Nt=M(`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`}]]),Pt=M(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),Ft=M(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]),It=M(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),Lt=M(`chevron-up`,[[`path`,{d:`m18 15-6-6-6 6`,key:`153udz`}]]),Rt=M(`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`}]]),zt=M(`circle-check`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m16 9-5.5 5.5L8 12`,key:`xofnsj`}]]),Bt=M(`cloud`,[[`path`,{d:`M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z`,key:`p7xjir`}]]),Vt=M(`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`}]]),Ht=M(`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`}]]),Ut=M(`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`}]]),Wt=M(`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`}]]),Gt=M(`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`}]]),Kt=M(`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`}]]),qt=M(`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`}]]),Jt=M(`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`}]]),Yt=M(`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`}]]),Xt=M(`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`}]]),Zt=M(`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`}]]),Qt=M(`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`}]]),$t=M(`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`}]]),en=M(`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`}]]),tn=M(`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`}]]),nn=M(`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`}]]),rn=M(`info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),an=M(`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`}]]),on=M(`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`}]]),sn=M(`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`}]]),cn=M(`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`}]]),ln=M(`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`}]]),un=M(`loader-circle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]),dn=M(`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`}]]),fn=M(`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`}]]),pn=M(`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`}]]),mn=M(`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`}]]),hn=M(`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`}]]),gn=M(`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`}]]),_n=M(`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`}]]),vn=M(`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`}]]),yn=M(`minus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}]]),bn=M(`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`}]]),xn=M(`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`}]]),Sn=M(`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`}]]),Cn=M(`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`}]]),wn=M(`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`}]]),Tn=M(`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`}]]),En=M(`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`}]]),Dn=M(`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`}]]),On=M(`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`}]]),kn=M(`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`}]]),An=M(`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`}]]),jn=M(`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`}]]),Mn=M(`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`}]]),Nn=M(`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`}]]),Pn=M(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]),Fn=M(`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`}]]),In=M(`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`}]]),Ln=M(`reply`,[[`path`,{d:`M20 18v-2a4 4 0 0 0-4-4H4`,key:`5vmcpk`}],[`path`,{d:`m9 17-5-5 5-5`,key:`nvlc11`}]]),Rn=M(`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`}]]),zn=M(`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`}]]),Bn=M(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]),Vn=M(`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`}]]),Hn=M(`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`}]]),Un=M(`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`}]]),Wn=M(`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`}]]),Gn=M(`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`}]]),Kn=M(`smartphone`,[[`rect`,{width:`14`,height:`20`,x:`5`,y:`2`,rx:`2`,ry:`2`,key:`1yt0o3`}],[`path`,{d:`M12 18h.01`,key:`mhygvu`}]]),qn=M(`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`}]]),Jn=M(`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`}]]),Yn=M(`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`}]]),Xn=M(`square`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}]]),Zn=M(`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`}]]),Qn=M(`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`}]]),$n=M(`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=M(`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`}]]),tr=M(`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`}]]),nr=M(`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`}]]),rr=M(`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`}]]),ir=M(`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`}]]),ar=M(`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`}]]),or=M(`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`}]]),sr=M(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]),cr=n(),lr=!0;function ur(e){lr=e}function dr(){if(!lr)throw Error(`Disconnected from the velloo daemon — edits are paused until it reconnects.`)}var fr=D([k({type:l(`screen-changed`),screenId:i().min(1)}),k({type:l(`board-changed`),boardId:i().min(1)}),k({type:l(`theme-changed`)}),k({type:l(`snippet-changed`),snippetId:i().min(1)}),k({type:l(`annotations-changed`),screenId:i().min(1)}),k({type:l(`notes-changed`),boardId:i().min(1)}),k({type:l(`comments-changed`),boardId:i().min(1),scope:p([`local`,`shared`])}),k({type:l(`config-changed`)}),k({type:l(`folder-reloaded`)}),k({type:l(`reload-error`),source:i(),message:i()}),k({type:l(`activity`)}).loose()]);function pr(e){if(typeof e!=`string`)return null;let t;try{t=JSON.parse(e)}catch{return null}let n=fr.safeParse(t);return n.success?n.data:null}var mr=p([`public`,`private`]);k({appUrl:i().optional(),issuer:i().optional(),clientId:i().optional()}),k({ok:y().optional(),db:k({ok:y().optional()}).optional(),blob:k({ok:y().optional()}).optional()}),k({email:i(),name:i().optional(),tier:i().optional(),creditMicros:E().nullable().optional()});function hr(e){return e!==`free`}var gr=k({slug:i(),url:i(),title:i(),teamId:i().nullable(),visibility:mr,passwordProtected:y(),latestVersionId:i().nullable(),lastPublishedAt:i().nullable(),context:k({boardIds:S(i()),selectionFingerprint:i().nullable(),contextKnown:y(),repo:i().nullable(),branch:i().nullable()})});k({effectiveTeamId:i().nullable(),slots:S(gr)}),k({slug:i(),visibility:mr.optional(),passwordProtected:y().optional()}),k({visibility:mr,passwordProtected:y()}),k({files:E(),bytes:E(),url:i(),tier:i().optional(),history:k({retained:y(),versions:E(),pruned:E()}).optional()});var _r=k({slug:i(),title:i().nullable(),url:i(),visibility:mr,passwordProtected:y(),canManage:y(),mine:y(),ownerEmail:i().nullable().optional(),git:k({repo:i().optional(),branch:i().optional()}).nullable().optional(),published:y(),lastPublishedAt:i().nullable()});k({links:S(_r).optional()});var vr=k({id:i(),name:i(),isDefault:y().optional()});k({teams:S(vr)}),k({device_code:i(),user_code:i(),verification_uri:i(),verification_uri_complete:i(),expires_in:E(),interval:E()}),k({access_token:i().optional(),error:i().optional(),error_description:i().optional()}),k({token:i(),email:i()});var yr=k({intent:i(),summary:i(),priceMicros:E(),output:p([`image`,`svg`]),aspects:S(i()),defaultAspect:i(),reference:p([`forbidden`,`optional`,`required`])});k({intents:S(yr),maxCount:E().optional()});var br=k({kind:p([`image`,`svg`]),dataUrl:i()});k({id:i(),intent:i().optional(),chargedMicros:E(),balanceMicros:E(),assets:S(br).min(1).optional(),kind:p([`image`,`svg`]).optional(),dataUrl:i().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`}),a)}),k({scheme:i(),publicKey:i()}),k({signatures:S(i())});var xr={Unreachable:!0,HttpFailure:!0,LoggedOut:!0,ProtocolViolation:!0,UploadRaceLost:!0,InsecureCloudUrl:!0,InvalidRequest:!0};function Sr(e){return typeof e==`string`&&e in xr}var Cr=i().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/,`ids are [A-Za-z0-9][A-Za-z0-9_-]{0,63}`),wr=D([S(E().int().nonnegative()),i().regex(/^@[a-zA-Z][a-zA-Z0-9_-]*$/)]),Tr=k({locator:wr}),Er=D([k({x:E(),y:E()}),l(`auto`)]);k({id:Cr,target:Tr,position:Er.default(`auto`),body:i(),collapsed:y().optional(),author:p([`user`,`agent`]),cloud:k({commentId:i().min(1),slug:i().min(1),author:i().optional()}).optional()});var Dr=k({frameId:Cr,screenId:Cr,locator:wr});k({id:Cr,x:E().optional(),y:E().optional(),width:E().positive(),body:i(),attachment:Dr.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 Or=k({prompt:i(),intent:i(),aspect:i().optional(),width:E().int().positive().optional(),height:E().int().positive().optional(),generatedAt:i(),reference:S(i()).optional(),replaces:i().optional()});k({version:l(1),generated:O(i(),Or)});function kr(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 Ar=p([`light`,`dark`]),jr=k({id:Cr,screen:i().min(1),x:E(),y:E(),w:E().int().positive(),h:E().int().positive(),label:i().optional(),group:i().optional(),scheme:Ar.optional()});function Mr(e,t){return e.scheme??t}var Nr=k({id:Cr,name:i().min(1),color:i().optional()});k({id:Cr,name:i().min(1),theme:i().min(1).optional(),archivedAt:i().datetime().optional(),group:i().min(1).optional(),frames:S(jr).default([]),groups:S(Nr).default([])});var Pr=D([S(E().int().nonnegative()),i().regex(/^@[a-zA-Z][a-zA-Z0-9_-]*$/)]),Fr=k({x:E(),y:E(),w:E().nonnegative(),h:E().nonnegative()}),Ir=k({ref:i().min(1).optional(),text:i().max(500).optional(),ancestorIds:S(i().min(1)).max(16).optional()}),Lr=g(`kind`,[k({kind:l(`node`),boardId:Cr,frameId:Cr,screenId:Cr,locator:Pr,bounds:Fr,fingerprint:Ir.optional()}),k({kind:l(`board`),boardId:Cr,x:E(),y:E()})]),Rr=k({kind:p([`user`,`agent`,`reviewer`]),displayName:i().min(1).max(200).optional(),accountId:i().min(1).max(200).optional()}),zr=k({id:o(),author:Rr,body:i().trim().max(4e3),createdAt:T(),deletedAt:T().optional()}).refine(e=>e.deletedAt!==void 0||e.body.length>0,{message:`A comment needs something to say`,path:[`body`]}),Br=g(`kind`,[k({kind:l(`local`)}),k({kind:l(`published`),slug:i().min(1),versionId:i().min(1)})]);k({id:o(),scope:p([`local`,`shared`]),folderId:i().min(1),boardId:Cr,anchor:Lr.optional(),origin:Br,status:p([`open`,`resolved`]),messages:S(zr).min(1),createdAt:T(),updatedAt:T(),resolvedAt:T().optional()});var Vr=p([`boolean`,`number`,`string`,`color`,`enum`,`icon`]),Hr=k({name:i().min(1),type:i().min(1),optional:y(),defaultValue:i().optional(),control:Vr,enumValues:S(D([i(),E()])).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`})}),Ur=k({importPath:i().min(1),category:p([`ui`,`typography`]).optional(),description:i().optional(),props:S(Hr),origin:p([`agent`,`manual`]).optional(),render:p([`static`,`live`]).optional(),app:i().min(1).optional(),fit:p([`aspect-video`,`content`]).optional()}),Wr=k({enabled:y(),contactOk:y().optional()}),Gr=80;function Kr(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>Gr?`a design name can't be longer than ${Gr} characters`:null:`a design name can't start or end with spaces`}var qr=i().superRefine((e,t)=>{let n=Kr(e);n&&t.addIssue({code:`custom`,message:n})});k({$schema:i().optional(),designs:S(i().min(1)),defaultDesign:qr.optional(),feedback:Wr.optional()}).refine(e=>new Set(e.designs).size===e.designs.length,{message:`designs lists the same path twice`});var Jr=k({name:i().min(1),w:E().int().positive(),h:E().int().positive()}),Yr=k({id:p([`shadcn-upstream`,`none`,`mui`,`antd`,`chakra`]),version:i().min(1),source:p([`binary`,`cache`,`in-repo`]),componentsPath:i().min(1)}),Xr=k({componentsAlias:i().min(1).optional(),componentsDir:i().min(1).optional()}),Zr=k({root:i().min(1),aliases:O(i().min(1),i().min(1)).optional()});k({schemaVersion:l(4),toolVersion:i().min(1),name:qr,folderId:i().regex(/^[A-Za-z0-9_-]{8,64}$/).optional(),libraries:O(i().min(1),Yr),defaultLibrary:i().min(1),extensions:O(i().min(1),Ur).optional(),viewportPresets:S(Jr).min(1),defaultScreen:i().min(1).optional(),defaultBoard:i().min(1).optional(),boardOrder:S(i().min(1)).optional(),boardGroups:S(Nr).optional(),codegen:Xr.optional(),styling:k({framework:p([`tailwind`,`none`])}).optional(),hostApp:Zr.optional(),hostApps:O(i().min(1),Zr).optional(),feedback:Wr.optional()}).refine(e=>e.defaultLibrary in e.libraries,{message:"`defaultLibrary` must name an entry in `libraries`."});var Qr=/^[A-Za-z0-9_-]+$/;function $r(e){return Qr.test(e)}function ei(e){return e.replace(/\*\//g,``).replace(/[<>{};\\]/g,``).replace(/[\r\n]+/g,` `).trim()}function ti(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 ni(e){return typeof e.$ref==`string`}function ri(e){return typeof e.$snippet==`string`}function ii(e){return typeof e.$param==`string`}var ai=i().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 oi(e){return typeof e==`string`||typeof e==`number`?{$ref:`Box`,props:{as:`span`,children:e}}:e}var si=k({name:i().min(1),importPath:i().min(1)}),ci=h(()=>k({$ref:i().min(1),$id:ai.optional(),props:O(i(),c()).optional(),children:S(D([i(),E(),di])).transform(e=>e.map(oi)).optional(),$emitAs:si.optional()})),li=k({$snippet:i().min(1),$id:ai.optional(),$extraClassName:i().optional(),args:O(i(),c()).optional(),$overrides:O(i().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`}),k({props:O(i(),c())})).optional()}),ui=k({$param:i().min(1)}),di=c().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), or "$param" (param ref)`}),a;let n=e,r=typeof n.$ref==`string`?ci:typeof n.$snippet==`string`?li:typeof n.$param==`string`?ui:null;if(!r)return t.addIssue({code:`custom`,message:`node needs exactly one of "$ref" (component), "$snippet" (snippet instance), or "$param" (param ref, snippet bodies only)`}),a;let i=r.safeParse(e);if(!i.success){for(let e of i.error.issues)t.addIssue({...e});return a}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 fi(e){if(!ii(e))return e.$id}k({id:Cr,name:i().min(1),library:i().min(1).optional(),tree:di});var pi=k({name:i().min(1),type:p([`string`,`number`,`boolean`,`node`,`icon`,`color`,`enum`]),default:c().optional(),optional:y().optional(),enum:S(i()).optional(),min:E().optional(),max:E().optional(),step:E().optional(),description:i().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}"`})});k({id:Cr,name:i().min(1),params:S(pi),library:i().min(1).optional(),tree:di}),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]));var mi=D([E(),i().min(1)]),hi=h(()=>O(i(),D([i(),E(),hi]))),gi=D([i().min(1),k({DEFAULT:i().min(1),foreground:i().min(1).optional()})]),_i=k({background:i().min(1),foreground:i().min(1),primary:gi,secondary:gi.optional(),muted:gi.optional(),accent:gi.optional(),destructive:gi.optional(),card:gi.optional(),popover:gi.optional(),border:i().min(1).optional(),input:i().min(1).optional(),ring:i().min(1).optional()}),vi=O(i().regex(/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/),i().min(1)),yi=k({size:mi.optional(),leading:E().positive().optional(),flow:mi.optional(),fontBody:i().min(1).optional(),fontHeading:i().min(1).optional(),fontMono:i().min(1).optional()}),bi=k({fontFamily:O(i(),i().min(1)).optional(),googleFonts:S(i().min(1)).optional(),typesets:O(i().regex(/^[A-Za-z0-9_-]+$/),yi).optional()}).strict(),xi=k({none:mi.optional(),sm:mi.optional(),md:mi.optional(),lg:mi.optional(),xl:mi.optional(),"2xl":mi.optional(),"3xl":mi.optional(),full:mi.optional()}).partial(),Si=k({center:y().optional(),padding:i().min(1).optional(),maxWidth:i().min(1).optional()});k({name:i().min(1),colors:_i,colorsDark:_i.partial().optional(),palette:vi.optional(),paletteDark:vi.optional(),typography:bi,spacing:hi,radius:xi,shadows:hi.optional(),container:Si.optional(),keyframes:O(i(),O(i(),O(i(),i()))).optional(),animation:O(i(),i()).optional()});var Ci={size:`1em`,leading:1.75,flow:`1.25em`},wi=`default`;function Ti(e){return $r(e)}var Ei={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`}},Di=Object.keys(Ei),Oi={1:`h1`,2:`h2`,3:`h3`,4:`h4`,5:`h5`,6:`h6`},ki={default:`body`,muted:`caption`,small:`small`,lead:`lead`},Ai={400:`font-normal`,500:`font-medium`,600:`font-semibold`,700:`font-bold`};Object.fromEntries(Di.map(e=>[e,`text-${e} leading-${e} tracking-${e} ${Ai[Ei[e].weight]}`])),Object.fromEntries(Di.map(e=>[e,{fontSize:`var(--text-${e})`,lineHeight:`var(--leading-${e})`,letterSpacing:`var(--tracking-${e})`,fontWeight:Ei[e].weight}]));function ji(e){let t=Number(e??1);return Number.isFinite(t)&&t>=1&&t<=6?Math.trunc(t):1}function Mi(e){return Math.round(e*1e3)/1e3}function Ni(e){return typeof e==`number`?`${e}px`:ei(e)}function Pi(e,t){return!e||!$r(e)?t:`var(--font-${e})`}function Fi(e){return{...e,size:e?.size??Ci.size,leading:e?.leading??Ci.leading,flow:e?.flow??Ci.flow}}function Ii(e,t=` `,n=!1){let r=n?e??{}:Fi(e),i=[],a=(e,n)=>i.push(`${t}--typeset-${e}: ${n};`);return r.size!==void 0&&a(`size`,Ni(r.size)),r.leading!==void 0&&a(`leading`,String(Mi(r.leading))),r.flow!==void 0&&a(`flow`,Ni(r.flow)),(!n||r.fontBody!==void 0)&&a(`font-body`,Pi(r.fontBody,`inherit`)),(!n||r.fontHeading!==void 0)&&a(`font-heading`,Pi(r.fontHeading,`var(--typeset-font-body)`)),(!n||r.fontMono!==void 0)&&a(`font-mono`,Pi(r.fontMono,`var(--font-mono, ui-monospace, monospace)`)),i}var Li=16;function Ri(e,t=Li){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 zi(e,t={}){let n=Fi(e),r=t.rootPx??Li,i=Ri(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 Di){let t=Ei[e],r=t.face===`heading`?o??s:s;c[e]={fontSize:Mi(i*t.size),lineHeight:Mi(n.leading*t.leading),letterSpacing:t.tracking,fontWeight:t.weight,...r?{fontFamily:r}:{}}}return c}k({w:E().int().positive(),h:E().int().positive()});var Bi=S(E()),Vi=i().regex(/^@[a-zA-Z][a-zA-Z0-9_-]*$/,{message:`id locator must match /^@[a-zA-Z][a-zA-Z0-9_-]*$/`}),Hi=e=>d(e=>{if(typeof e==`string`){let t=e.trim();if(t.startsWith(`[`)||t.startsWith(`{`))try{return JSON.parse(t)}catch{}}return e},e),Ui=e=>d(e=>typeof e==`object`&&e&&!Array.isArray(e)?[e]:e,e),Wi=Hi(D([Bi,Vi])).describe(`Node address: an "@id" like "@hero-cta", or an index path from the root ([0,2,1])`),Gi=Wi.default([]),Ki=i().describe(`Body node: "@id" (preferred — survives restructures), a dotted index path ("0.2"), or "" for the root`),qi=O(i(),c()),Ji=i().min(1),Yi=i().min(1),Xi=i().min(1),Zi=i().min(1),Qi=s({x:E().optional(),y:E().optional(),w:E().int().positive().optional(),h:E().int().positive().optional(),label:i().nullable().optional(),group:i().nullable().optional(),scheme:Ar.nullable().optional()}),$i=k({name:i().min(1),importPath:i().min(1)}).describe(`Mark the node a host-component facade: the canvas renders the subtree, emit_code emits <name /> from importPath instead.`),ea=D([k({x:E(),y:E()}),l(`auto`)]),ta={screenId:Ji,parentPath:Gi,componentRef:i().min(1),id:ai.optional(),props:qi.optional(),children:Hi(D([S(di),i(),E()])).optional(),index:E().int().nonnegative().optional(),emitAs:$i.optional()};s(ta);var na=Hi(D([i(),qi,m()])).describe(`Native style channel: a className string (Tailwind), an object of properties (sx / style), or null to clear`),ra=k({path:Wi,propPatch:qi.optional(),style:na.optional()}).refine(e=>e.propPatch!==void 0||e.style!==void 0,{message:`each patch needs propPatch, style, or both`}),ia=i().max(64).optional().describe(`Opaque id of the drag this write belongs to; merges its undo steps into one`),aa={screenId:Ji,patches:Hi(Ui(S(ra).min(1))).describe(`One entry per node; length 1 for a single edit`),gesture:ia};s(aa);var oa={screenId:Ji,path:Gi,classes:i(),gesture:ia};s(oa),s({screenId:Ji,path:Wi});var sa={screenId:Ji,fromPath:Wi,toParent:Wi,toIndex:E().int().nonnegative().optional()};s(sa);var ca={screenId:Ji,path:Wi,id:ai.nullable()};s(ca);var la={name:i().min(1),id:i().min(1).optional(),fromScreenId:i().min(1).optional(),tree:di.optional()};s(la),s({screenId:Ji}),s({screenId:Ji,tree:di});var ua={screenId:Ji,patch:k({name:i().min(1).optional()})};s(ua);var da={name:i().min(1).max(80),id:i().min(1).optional(),group:i().min(1).optional()};s(da);var fa={boardId:Yi,patch:k({name:i().min(1).max(80).optional(),theme:i().min(1).nullable().optional(),archived:y().optional(),group:i().min(1).nullable().optional()})};s(fa),s({boardId:Yi});var pa={order:S(i().min(1))};s(pa);var ma={name:i().min(1),color:i().min(1).optional()};s(ma);var ha={groupId:i().min(1),patch:k({name:i().min(1).optional(),color:i().min(1).nullable().optional()})};s(ha);var ga={groupId:i().min(1)};s(ga);var _a={order:S(i().min(1))};s(_a);var va={boardId:Yi,screenId:Ji,x:E().optional(),y:E().optional(),w:E().int().positive(),h:E().int().positive(),label:i().optional(),group:i().optional(),id:i().min(1).optional()};s(va);var ya=d(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},k({frameId:Xi,patch:Qi})),ba={boardId:Yi,patches:Hi(Ui(S(ya).min(1))).describe(`One entry per frame; length 1 for a single edit`)};s(ba),s({boardId:Yi,frameId:Xi});var xa={boardId:Yi,frameId:Xi,toBoardId:Yi,x:E().optional(),y:E().optional()};s(xa);var Sa={name:i().min(1),id:i().min(1).optional(),params:S(pi).default([]),tree:di};s(Sa);var Ca={snippetId:Zi,patch:k({name:i().min(1).optional(),params:S(pi).optional(),tree:di.optional(),innerPatch:k({innerPath:Ki,propPatch:qi}).optional()})};s(Ca),s({snippetId:Zi});var wa={screenId:Ji,parentPath:Gi,snippetId:Zi,id:ai.optional(),args:qi.optional(),extraClassName:i().optional().describe(`One-off classes layered onto the snippet body's root, for this instance`),overrides:O(i(),k({props:qi})).optional(),index:E().int().nonnegative().optional()};s(wa),s({screenId:Ji,path:Wi,innerPath:Ki,propPatch:qi});var Ta={screenId:Ji,path:Wi,argPatch:qi.default({}),extraClassName:i().nullable().optional(),gesture:ia};s(Ta);var Ea={screenId:Ji,path:Wi,argPatch:qi.optional(),extraClassName:i().nullable().optional(),innerPath:Ki.optional(),propPatch:qi.optional()};s(Ea);var Da={screenId:Ji,target:k({locator:Wi}),body:i(),position:ea.optional(),collapsed:y().optional()};s(Da);var Oa={screenId:Ji,annotationId:i().min(1),patch:k({body:i().optional(),position:ea.optional(),collapsed:y().nullable().optional()})};s(Oa);var ka={screenId:Ji,annotationId:i().min(1)};s(ka);var Aa=k({frameId:Xi,screenId:Ji,locator:Wi}),ja={boardId:Yi,x:E().optional(),y:E().optional(),width:E().positive().optional(),body:i(),attachment:Aa.optional()};k(ja).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 Ma={boardId:Yi,noteId:i().min(1),patch:k({x:E().optional(),y:E().optional(),width:E().positive().optional(),body:i().optional()})};s(Ma);var Na={boardId:Yi,noteId:i().min(1)};s(Na);var Pa={presets:S(k({name:i().min(1),w:E().int().positive(),h:E().int().positive()}))};s(Pa);var Fa={defaultBoard:i().min(1).nullable().optional(),defaultScreen:i().min(1).nullable().optional()};s(Fa);var Ia={componentsAlias:i().nullable().optional()};s(Ia);var La={name:i()};s(La);var Ra={enabled:y().optional(),contactOk:y().optional()};s(Ra);var za=e=>e.kind===`AssetInUse`||Sr(e.kind);function Ba(e){return e instanceof Error&&e.payload?.kind===`LoggedOut`}var Va=e=>e.join(`, `);function Ha(e){if(za(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 ${Va(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 ${Va(e.viaPath)}).`;case`InvalidExtensionProp`:return e.message;case`LastScreen`:return`A folder needs at least one screen.`;case`ScreenIdConflict`:return`A screen called "${e.screenId}" already exists.`;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 ${Va([...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: ${Va(e.failed.map(e=>`${e.path} (${e.reason})`))}. Nothing was saved.`;default:return`The change could not be applied.`}}function Ua(e){let t=Ha(e),n=`hint`in e&&typeof e.hint==`string`?e.hint:void 0;return n?`${t} ${n}`:t}async function Wa(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 Ga(e,t){let n=await Wa(e),r=Error(n?Ua(n):`${t}: ${e.status}`);return n&&(r.payload=n),r}async function Ka(e,t,n){dr();let r=await fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!r.ok)throw await Ga(r,n);return await r.json()}async function qa(e,t,n){dr();let r=await fetch(t,{method:e,...n===void 0?{}:{headers:{"Content-Type":`application/json`},body:JSON.stringify(n)}});if(!r.ok)throw await Ga(r,t);return await r.json()}function N(e,t){return Ka(`/api/mutate/${e}`,t,`mutate/${e}`)}function Ja(e,t){return Ka(`/api/theme/${e}`,t,`theme/${e}`)}function Ya(e,t){return Ka(e,t,e)}async function Xa(){let e=await fetch(`/api/assets/intents`);return e.ok?(await e.json()).intents??[]:[]}function Za(e){return Ya(`/api/assets/delete`,{assetPath:e})}async function Qa(){let e=await fetch(`/api/assets`);if(!e.ok)throw Error(`assets: ${e.status}`);return(await e.json()).generated}function $a(e){return Ya(`/api/assets/generate`,e)}function eo(e){return e.loggedIn&&e.login.state===`idle`}function to(e,t){return t.loggedIn&&t.verified===!1&&e?.verified!==!1}var no={loggedIn:!1,verified:null,login:{state:`idle`}},ro={async status(){let e=await fetch(`/api/auth/status`);return e.ok?await e.json():no},async login(){return Ya(`/api/auth/login`,{})},async cancelLogin(){await Ya(`/api/auth/login/cancel`,{})},async logout(){await Ya(`/api/auth/logout`,{})}};async function P(e,t){let n=await fetch(e);if(!n.ok)throw await Ga(n,t);return await n.json()}function io(){return P(`/api/design`,`fetchDesign`)}function ao(e){return P(`/api/screen/${encodeURIComponent(e)}`,`fetchScreen(${e})`)}function oo(e){return P(`/api/board/${encodeURIComponent(e)}`,`fetchBoard(${e})`)}function so(e){return P(`/api/snippets/${encodeURIComponent(e)}`,`fetchSnippet(${e})`)}async function co(e){return(await P(`/api/annotations/${encodeURIComponent(e)}`,`fetchAnnotations(${e})`)).annotations.map(t=>({...t,screenId:e}))}async function lo(e){return(await P(`/api/notes/${encodeURIComponent(e)}`,`fetchNotes(${e})`)).notes}function uo(){return P(`/api/components`,`fetchComponents`)}function fo(e){return P(`/api/theme${e&&e!=="default"?`?name=${encodeURIComponent(e)}`:``}`,`fetchTheme`)}function po(){return P(`/api/theme/presets`,`fetchPresets`)}function mo(e,t,n,r){let i=r?`&theme=${encodeURIComponent(r)}`:``;return`/api/render/${encodeURIComponent(e)}?w=${t}&h=${n}${i}`}var ho=e=>e===`signed-out`||e===`expired`;function go(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 _o={async list(e,t,n=`all`){return(await P(`/api/comments?${new URLSearchParams({boardId:e,status:t,scope:n})}`,`fetchComments`)).threads},cloudAvailability(e){return P(`/api/comments/cloud?${new URLSearchParams({boardId:e})}`,`fetchCloudComments`)},async create(e){return(await qa(`POST`,`/api/comments`,e)).thread},async reply(e,t){return(await qa(`POST`,`/api/comments/${encodeURIComponent(e)}/messages`,{body:t})).thread},async update(e,t){return(await qa(`PATCH`,`/api/comments/${encodeURIComponent(e)}`,t)).thread},delete(e){return qa(`DELETE`,`/api/comments/${encodeURIComponent(e)}`)},async deleteMessage(e,t){return(await qa(`DELETE`,`/api/comments/${encodeURIComponent(e)}/messages/${encodeURIComponent(t)}`)).thread}};function vo(){return P(`/api/config`,`fetchConfig`)}var yo={viewportPresets(e){return N(`update_viewport_presets`,{presets:e})},defaults(e){return N(`update_defaults`,e)},designName(e){return N(`update_design_name`,{name:e})},codegen(e){return N(`update_codegen`,e)},feedback(e){return N(`update_feedback`,e)}};async function bo(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})`)}So(await r.blob(),xo(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 xo(e,t){return(e?/filename="([^"]+)"/.exec(e):null)?.[1]??t}function So(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 Co(){let e=await fetch(`/api/undo`);if(!e.ok)throw Error(`fetchHistory: ${e.status}`);return await e.json()}async function wo(){dr();let e=await fetch(`/api/undo`,{method:`POST`});if(!e.ok)throw Error(`undo: ${e.status}`);return await e.json()}async function To(){dr();let e=await fetch(`/api/undo/redo`,{method:`POST`});if(!e.ok)throw Error(`redo: ${e.status}`);return await e.json()}var F={addFrame(e){return N(`add_frame`,e)},updateFrame(e){let{boardId:t,frameId:n,patch:r}=e;return N(`update_frame`,{boardId:t,patches:[{frameId:n,patch:r}]})},removeFrame(e){return N(`remove_frame`,e)},moveFrame(e){return N(`move_frame`,e)},addBoard(e){return N(`add_board`,e)},updateBoard(e){return N(`update_board`,e)},removeBoard(e){return N(`remove_board`,e)},reorderBoards(e){return N(`reorder_boards`,e)},addBoardGroup(e){return N(`add_board_group`,e)},updateBoardGroup(e){return N(`update_board_group`,e)},removeBoardGroup(e){return N(`remove_board_group`,e)},reorderBoardGroups(e){return N(`reorder_board_groups`,e)},updateProps(e){let{screenId:t,path:n,propPatch:r,gesture:i}=e;return N(`update_props`,{screenId:t,patches:[{path:n,propPatch:r}],...i?{gesture:i}:{}})},applyClasses(e){return N(`apply_classes`,e)},setNodeId(e){return N(`set_node_id`,e)},updateSnippetArgs(e){return N(`update_snippet_args`,e)}},Eo={add(e){return Ya(`/api/notes/add`,e)},update(e){return Ya(`/api/notes/update`,e)},remove(e){return Ya(`/api/notes/remove`,e)}},Do={targets(){return P(`/api/publish/targets`,`publishTargets`)},status(){return P(`/api/publish/status`,`publishStatus`)},start(e){return Ya(`/api/publish`,e)},async reset(){await Ya(`/api/publish/reset`,{})},async published(){return(await P(`/api/publish/published`,`publishedBoards`)).boards},async unpublish(e){await qa(`DELETE`,`/api/publish/published/${encodeURIComponent(e)}`)}};function Oo(e){return P(`/api/search?q=${encodeURIComponent(e)}`,`fetchSearch`)}var ko=null;function Ao(e){return ko=e,()=>{ko===e&&(ko=null)}}function jo(e={}){ko?.(e)}var Mo={setToken(e,t,n){return Ja(`set_token`,{path:t,value:n,theme:e})},setTypeset(e,t){return Ja(`set_typeset`,{typesets:t,theme:e})},setFonts(e,t){return Ja(`set_fonts`,{fonts:t,theme:e})},applyPreset(e,t){return Ja(`apply_preset`,{presetName:t,theme:e})},addTheme(e,t){return Ja(`add_theme`,{name:e,from:t})},deriveFromColor(e,t,n){return Ja(`derive_palette_from_color`,{seedColor:t,name:n??(e==="default"?void 0:e)})}};function No(e={}){return P(e.refresh?`/api/updates/status?refresh=1`:`/api/updates/status`,`fetchUpdateStatus`)}function Po(){return Ya(`/api/updates`,{})}function I(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`?v.success(r,i):t===`error`?v.error(r,i):v(r,i),String(a)}function Fo(e){e&&v.dismiss(e)}function L(e,t){return Ba(e)?(jo(),``):I({kind:`error`,message:(e instanceof Error?e.message:typeof e==`string`?e:t)||t})}var Io=[];function Lo(e,t){return e.filter(e=>e.latestVersionId!==null&&e.context.boardIds.includes(t)).sort((e,t)=>Ro(t.lastPublishedAt)-Ro(e.lastPublishedAt)).at(0)??null}var Ro=e=>{let t=e?Date.parse(e):NaN;return Number.isFinite(t)?t:-1/0},zo=3e4,Bo=0,Vo=null,Ho=(e,t)=>({authStatus:null,signInPrompt:null,publishOpen:!1,publishScope:null,publishedBoardsOpen:!1,publishSlots:[],async refreshAuth(){let n=await ro.status(),r=to(t().authStatus,n);e({authStatus:n}),r&&I({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})},refreshPublishSlots({force:n=!1}={}){return t().authStatus?.loggedIn?!n&&Date.now()-Bo<zo?Promise.resolve():(Vo&&!n||(Vo=Do.targets().catch(()=>null).then(t=>{Bo=Date.now(),Vo=null,e({publishSlots:t?.slots??[]})})),Vo):(Bo=0,e({publishSlots:[]}),Promise.resolve())},publishBoardNow(n,r){t().settlePublish(!1),e({publishScope:{...n,mode:r},publishOpen:!0})},publishAndWait(t){return e({publishScope:{...t,mode:`public`},publishOpen:!0}),new Promise(e=>{Io.push(e)})},settlePublish(e){let n=Io;Io=[];for(let t of n)t(e);e&&n.length===0&&t().refreshCloudComments(),e&&t().refreshPublishSlots({force:!0})}}),Uo=200;function Wo(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 Go=(e,t)=>({activityEvents:[],activityFeedOpen:!1,lastAgentActivityAt:null,activityFlash:{},frameGlow:{},boardPulse:{},recordActivity(n){if(e(e=>({activityEvents:e.activityEvents.length>=Uo?[...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(Wo).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 Ko(e){let t=e().editingMarkupId;t&&(e().annotations.some(e=>e.id===t)||e().notes.some(e=>e.id===t)||e().setEditingMarkupId(null))}var qo=(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=>co(e)))).flat()}),Ko(t)}catch{}},async refreshNotes(){let n=t().currentBoardId;if(n)try{e({notes:await lo(n)}),Ko(t)}catch{}},async createNote(n){let r=t().currentBoardId;if(r){t().setCursorMode(`select`);try{let{note:i}=await Eo.add({boardId:r,body:``,...n});e(e=>({notes:e.notes.some(e=>e.id===i.id)?e.notes:[...e.notes,i]})),t().setMarkupVisible(!0),t().setEditingMarkupId(i.id)}catch(e){L(e,`Could not add note`)}}},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())}}),Jo=.1,Yo=1.05;function Xo(e){return e>0?1/Yo:Yo}function Zo(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 Qo(e,t,n,r=80){let i=Zo(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(Jo,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 $o(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(Jo,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 es(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(Jo,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 ts(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 ns(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(Jo,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 rs(e,t,n,r){let i=Math.max(Jo,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 is=`velloo:lastBoard`,as=`velloo:boardView:`;function os(){if(typeof localStorage>`u`)return null;try{return localStorage.getItem(is)||null}catch{return null}}function ss(e){if(!(typeof localStorage>`u`))try{localStorage.setItem(is,e)}catch{}}function cs(e){if(typeof localStorage>`u`)return null;try{let t=localStorage.getItem(as+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 ls(e,t){if(!(typeof localStorage>`u`))try{localStorage.setItem(as+e,JSON.stringify(t))}catch{}}function us(){if(!(typeof localStorage>`u`))try{localStorage.removeItem(is);let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n?.startsWith(as)&&e.push(n)}for(let t of e)localStorage.removeItem(t)}catch{}}var ds={min:240,max:560,default:320};function fs(e){return Math.min(ds.max,Math.max(ds.min,Math.round(e)))}var ps=`velloo:appTheme`;function ms(){if(typeof localStorage>`u`)return`system`;let e=localStorage.getItem(ps);return e===`light`||e===`dark`||e===`system`?e:`system`}var hs=`velloo:designMode`,gs=`velloo:rememberDesignMode`;function _s(e,t){if(typeof localStorage>`u`)return t;let n=localStorage.getItem(e);return n===null?t:n===`true`}function vs(){return typeof localStorage>`u`||!_s(gs,!0)?`light`:localStorage.getItem(hs)===`dark`?`dark`:`light`}var ys=`velloo:leftPanels`,bs=`velloo:panes`,xs=`velloo:paneWidths`,Ss=`velloo:rememberPanels`,Cs=480;function ws(e,t,n){return e-t-n>=Cs}var Ts=null;function Es(e,t,n){let r=e.panesExclusive&&!n;return r&&(Ts=t===`left`?`right`:`left`),t===`left`?{leftPaneCollapsed:n,rightPaneCollapsed:r||e.rightPaneCollapsed}:{leftPaneCollapsed:r||e.leftPaneCollapsed,rightPaneCollapsed:n}}function Ds(e,t){return Es(e,t,!1)}function Os(e,t){let n=Object.fromEntries(t.map(e=>[e,!1]));if(typeof localStorage>`u`||!_s(Ss,!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 ks(e,t){typeof localStorage<`u`&&_s(Ss,!0)&&localStorage.setItem(e,JSON.stringify(t))}function As(e,t){ks(bs,{...Os(bs,[`left`,`right`]),[e]:t})}function js(){let e={left:ds.default,right:ds.default};if(typeof localStorage>`u`||!_s(Ss,!0))return e;try{let t=localStorage.getItem(xs);if(!t)return e;let n=JSON.parse(t);return{left:typeof n.left==`number`?fs(n.left):e.left,right:typeof n.right==`number`?fs(n.right):e.right}}catch{return e}}function Ms(e,t){typeof localStorage<`u`&&_s(Ss,!0)&&localStorage.setItem(xs,JSON.stringify({left:e,right:t}))}function Ns(){let e=Os(ys,[`boards`,`tree`]),t=Os(bs,[`left`,`right`]),n=js();return{appTheme:ms(),designMode:vs(),rememberDesignMode:_s(gs,!0),rememberPanels:_s(Ss,!0),boardsCollapsed:e.boards,treeCollapsed:e.tree,leftPaneCollapsed:t.left,rightPaneCollapsed:t.right,leftPaneWidth:n.left,rightPaneWidth:n.right}}var Ps=[ps,hs,gs,ys,bs,xs,Ss],Fs=(e,t)=>({...Ns(),panesExclusive:!1,settingsScope:null,searchOpen:!1,exportTarget:null,previewTarget:null,setAppTheme(t){e({appTheme:t}),typeof localStorage<`u`&&localStorage.setItem(ps,t)},setDesignMode(t){e({designMode:t}),typeof localStorage<`u`&&_s(gs,!0)&&localStorage.setItem(hs,t)},setRememberDesignMode(n){e({rememberDesignMode:n}),!(typeof localStorage>`u`)&&(localStorage.setItem(gs,String(n)),n?localStorage.setItem(hs,t().designMode):localStorage.removeItem(hs))},setRememberPanels(n){if(e({rememberPanels:n}),!(typeof localStorage>`u`)){if(localStorage.setItem(Ss,String(n)),n){let e=t();ks(ys,{boards:e.boardsCollapsed,tree:e.treeCollapsed}),ks(bs,{left:e.leftPaneCollapsed,right:e.rightPaneCollapsed}),Ms(e.leftPaneWidth,e.rightPaneWidth)}else localStorage.removeItem(ys),localStorage.removeItem(bs),localStorage.removeItem(xs)}},setSettingsScope(t){e({settingsScope:t})},resetCanvasPrefs(){if(typeof localStorage<`u`)for(let e of Ps)localStorage.removeItem(e);us();let n=t().panesExclusive;Ts=n?`right`:null,e({appTheme:`system`,designMode:`light`,rememberDesignMode:!0,rememberPanels:!0,boardsCollapsed:!1,treeCollapsed:!1,leftPaneCollapsed:!1,rightPaneCollapsed:n,leftPaneWidth:ds.default,rightPaneWidth:ds.default})},toggleBoardsCollapsed(){e(e=>{let t=!e.boardsCollapsed;return ks(ys,{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 ks(ys,{boards:e.boardsCollapsed,tree:t}),{treeCollapsed:t}})},setLeftPaneCollapsed(t){As(`left`,t),e(e=>Es(e,`left`,t))},setRightPaneCollapsed(t){As(`right`,t),e(e=>Es(e,`right`,t))},setLeftPaneWidth(t){e(e=>{let n=fs(t);return Ms(n,e.rightPaneWidth),{leftPaneWidth:n}})},setRightPaneWidth(t){e(e=>{let n=fs(t);return Ms(e.leftPaneWidth,n),{rightPaneWidth:n}})},syncPaneLayout(n){let r=t(),i=!ws(n,r.leftPaneWidth,r.rightPaneWidth);if(i===r.panesExclusive)return;if(i){let t=!r.leftPaneCollapsed&&!r.rightPaneCollapsed;Ts=t?`right`:null,e({panesExclusive:!0,...t&&{rightPaneCollapsed:!0}});return}let a=Ts;Ts=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 Is(e,t){return e.findIndex(e=>e.id===t.id)<0?[t,...e]:e.map(e=>e.id===t.id?t:e)}var Ls=`This board wasn't published, so a cloud comment has nowhere to live yet. Publish it, or keep the comment local.`;async function Rs(e,t){let n=e().cloudComments;if(!n||n.available)return null;if(n.reason!==`unpublished`)return go(n.reason);let r=e().boards[t];return!r||!await e().publishAndWait({id:r.id,name:r.name})?Ls:(await e().refreshCloudComments(),e().cloudComments?.available?null:Ls)}var zs=(e,t)=>({commentThreads:[],commentStatus:`open`,commentScope:`all`,cloudComments:void 0,activeCommentId:null,pendingCommentAnchor:null,async refreshComments(){let n=t().currentBoardId;if(!n){e({commentThreads:[],activeCommentId:null});return}try{let r=await _o.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){L(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 _o.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`,...Ds(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(ts(i,a,r.bounds))},enterCommentMode(){e(e=>({cursorMode:`comment`,hover:null,pendingCommentAnchor:null,activeCommentId:null,rightTab:`comments`,...Ds(e,`right`),markupVisible:!0}))},beginComment(t){e(e=>({pendingCommentAnchor:t,activeCommentId:null,cursorMode:`select`,rightTab:`comments`,...Ds(e,`right`),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 Rs(t,i);if(e)return e;if(t().pendingCommentAnchor!==a)return null}try{let t=await _o.create({boardId:i,body:n,anchor:a,scope:r});return e(e=>({commentThreads:Is(e.commentThreads,t),activeCommentId:t.id,pendingCommentAnchor:null})),null}catch(e){return L(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 Rs(t,i);if(e)return e}try{let t=await _o.create({boardId:i,body:n,scope:r});return e(e=>({commentThreads:Is(e.commentThreads,t),activeCommentId:t.id,pendingCommentAnchor:null,rightTab:`comments`})),null}catch(e){return L(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 _o.reply(t,n);e(e=>({commentThreads:Is(e.commentThreads,r)}))}catch(e){L(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 _o.deleteMessage(n,r);e(e=>({commentThreads:Is(e.commentThreads,t)}))}catch(e){L(e,`Could not delete comment`)}},async setCommentResolved(n,r){try{let i=await _o.update(n,{resolved:r});t().commentStatus===`all`||t().commentStatus===i.status?e(e=>({commentThreads:Is(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){L(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 Rs(t,r.boardId);if(i){I({kind:`error`,title:`The thread is still local`,message:i});return}try{let t=await _o.update(n,{scope:`shared`});e(e=>{let r=e.commentThreads.filter(e=>e.id!==n),i=e.commentScope!==`local`;return{commentThreads:i?Is(r,t):r,activeCommentId:i?t.id:null,...i?{}:{selection:null,reveal:null,rightTab:`comments`}}})}catch(e){L(e,`Could not move the comment to the cloud`)}},async deleteComment(t){try{await _o.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){L(e,`Could not delete comment`)}}});function Bs(e){let t=e.currentBoardId;return(t?e.boards[t]?.theme:void 0)??`default`}var Vs=(e,t)=>({design:null,folderConfig:null,screens:{},boards:{},currentBoardId:null,currentScreenId:null,screenVersion:0,screenVersions:{},components:null,componentsLoading:!1,generatedAssets:{},styleChannel:null,channelsByLibrary:{},theme:null,themeName:`default`,themeVersion:0,typesetDraft:null,fontDraft:null,presets:[],history:{undo:0,redo:0},wsConnected:!1,wsEverConnected:!1,bootError:null,async refreshHistory(){try{e({history:await Co()})}catch{}},async loadDesign(n){let r;try{r=await io()}catch(t){e({bootError:t instanceof Error?t.message:String(t)});return}e({design:r,bootError:null});let i=e=>e&&r.boards.some(t=>t.id===e)?e:null,a=i(n?.boardId)??t().currentBoardId??i(r.defaultBoard)??i(os())??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 io()})},async loadFolderConfig(){e({folderConfig:await vo()})},async setBoardArchived(n,r){if(await F.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().components||t().componentsLoading)){e({componentsLoading:!0});try{let{manifest:t,styleChannel:n,channelsByLibrary:r}=await uo();e({components:t,styleChannel:n,channelsByLibrary:r})}finally{e({componentsLoading:!1})}}},async loadGeneratedAssets(){try{e({generatedAssets:await Qa()})}catch{e({generatedAssets:{}})}},async loadTheme(){let n=Bs(t()),[r,{presets:i}]=await Promise.all([fo(n),po()]);e({theme:r,themeName:n,presets:i,themeVersion:t().themeVersion+1})},async refreshTheme(){let n=Bs(t());e({theme:await fo(n),themeName:n,typesetDraft:null,fontDraft:null,themeVersion:t().themeVersion+1})},async syncThemeToBoard(){t().theme&&t().themeName!==Bs(t())&&await t().loadTheme()},setTypesetDraft(t){e({typesetDraft:t})},setFontDraft(t){e({fontDraft:t})},async loadScreen(t){try{let n=await ao(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 oo(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 oo(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 io();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}),ss(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 ao(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()}},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()}catch{}},async reloadAll(){let n=await io(),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()}}),Hs=e=>({rightTab:`node`,nodeState:`default`,browsingFaces:!1,setRightTab(t){e({rightTab:t})},setNodeState(t){e({nodeState:t})},setBrowsingFaces(t){e({browsingFaces:t})}}),Us=(e,t)=>({view:`boards`,libraryItem:null,editingSnippetId:null,preSnippetView:null,setView(n){e({view:n,...n===`boards`?{libraryItem:null}:{}}),(n===`library`||n===`snippet`)&&t().loadComponents()},openLibrary(n){e({view:`library`,libraryItem:n??null}),t().loadComponents()},closeLibrary(){e({view:`boards`,libraryItem:null})},openSnippetEditor(n){let r=t().view;e({view:`snippet`,editingSnippetId:n,preSnippetView:r===`snippet`?t().preSnippetView:r,selection:null,hover: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}}})}});function R(e){return e===``?[]:e.split(`.`).map(e=>Number(e))}function Ws(e){return e.join(`.`)}function Gs(e,t){if(!t)return null;let n=e[t.screenId];if(!n)return null;let r=R(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 Ks=(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}),so(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}))}}),qs=0;function Js(){qs+=1}var Ys=null,Xs=450,Zs=280,Qs=48,$s=e=>e<.5?4*e*e*e:1-(-2*e+2)**3/2;function ec(e,t,n,r=Xs,i){let a=++qs,o=performance.now(),s=c=>{if(a!==qs)return;let l=Math.min(1,(c-o)/r),u=$s(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)}var tc=()=>document.querySelector(`[data-velloo-board="true"]`),nc=320;function rc(e,t){let n=qs,r=performance.now()+nc,i=`${e.clientWidth}x${e.clientHeight}`,a=o=>{if(n!==qs)return;let s=`${e.clientWidth}x${e.clientHeight}`;if(s===i||o>=r){t();return}i=s,requestAnimationFrame(a)};requestAnimationFrame(a)}var ic=(e,t)=>({canvasZoom:.75,cursorMode:`select`,pan:{x:0,y:0},nodeRects:{},snippetRects:{},frameInsets:{},rectProbe:null,setCanvasZoom(n){Js(),t().editingMarkupId||(Ys=null),e({canvasZoom:Math.max(Jo,Math.min(4,n))})},setCursorMode(t){e({cursorMode:t,hover:null})},setPan(n){Js(),t().editingMarkupId||(Ys=null),e({pan:n})},zoomAtViewportCenter(n){let r=tc();if(!r){if(n.zoom!==void 0)e({canvasZoom:Math.max(Jo,Math.min(4,n.zoom))});else if(n.factor!==void 0){let r=t().canvasZoom*n.factor;e({canvasZoom:Math.max(Jo,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=rs(r.clientWidth/2,r.clientHeight/2,a,i);(o.zoom!==i.zoom||o.pan.x!==i.pan.x||o.pan.y!==i.pan.y)&&(Js(),t().editingMarkupId||(Ys=null),e({canvasZoom:o.zoom,pan:o.pan}))},zoomForMarkupEdit(){let n={zoom:t().canvasZoom,pan:t().pan};if(Ys||=n,Math.abs(n.zoom-1)<.02)return;let r=tc();if(!r){e({canvasZoom:1});return}ec(e,n,{zoom:1,pan:rs(r.clientWidth/2,r.clientHeight/2,1/n.zoom,n).pan},Zs)},zoomForCommentDraft(n,r){Ys||={zoom:t().canvasZoom,pan:t().pan};let i=tc();i&&rc(i,()=>{let a=es(n,r,i.clientWidth,i.clientHeight,Qs);a&&ec(e,{zoom:t().canvasZoom,pan:t().pan},a,Zs)})},restoreViewAfterMarkupEdit(){let n=Ys;if(!n)return;Js();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){Ys=null;return}ec(e,r,n,Zs,()=>{Ys=null})},centerOnFrame(n){let r=t(),i=(r.currentBoardId?r.boards[r.currentBoardId]:null)?.frames.find(e=>e.id===n),a=tc();if(!i||!a)return;let o=ns(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=tc();if(!i||!a)return;let o=ns(i,a.clientWidth,a.clientHeight);o&&ec(e,{zoom:r.canvasZoom,pan:r.pan},o)},flyToBoardRect(n){let r=tc();if(!r)return;let i=t(),a=$o(n,r.clientWidth,r.clientHeight);a&&ec(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=tc();if(!f)return;let p={zoom:t().canvasZoom,pan:t().pan};if(d){let n=$o(ts(u,t().frameInsets[u.id]??{x:0,y:0,chromeH:0},d),f.clientWidth,f.clientHeight);n&&ec(e,p,n);return}let m=ns(u,f.clientWidth,f.clientHeight);m&&ec(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}}})}}),z=w()((...e)=>({...Vs(...e),...Ks(...e),...ic(...e),...Fs(...e),...Hs(...e),...Us(...e),...qo(...e),...Go(...e),...Ho(...e),...zs(...e)}));function ac(e){return e===`system`?typeof window>`u`?`light`:window.matchMedia?.(`(prefers-color-scheme: dark)`).matches?`dark`:`light`:e}function oc(){let e=z(e=>e.appTheme);(0,j.useEffect)(()=>{let t=()=>{let t=ac(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 sc(e,t){let n=[e,t].filter(e=>!!e);return n.length>0?`${n.join(` · `)} - velloo`:`velloo`}function B(...e){return _(x(e))}var cc=`w-auto`,V=r(),lc=u(`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 H({className:e,variant:t=`default`,asChild:n=!1,...r}){let i=n?ze:`span`;return(0,V.jsx)(i,{"data-slot":`badge`,"data-variant":t,className:B(lc({variant:t}),e),...r})}var uc=u(`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 U({className:e,variant:t=`default`,size:n=`default`,asChild:r=!1,...i}){let a=r?ze:`button`;return(0,V.jsx)(a,{"data-slot":`button`,"data-variant":t,"data-size":n,className:B(uc({variant:t,size:n,className:e})),...i})}function dc({className:e,...t}){return(0,V.jsx)(`div`,{"data-slot":`empty`,className:B(`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 fc({className:e,...t}){return(0,V.jsx)(`div`,{"data-slot":`empty-header`,className:B(`flex max-w-sm flex-col items-center gap-2`,e),...t})}var pc=u(`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 mc({className:e,variant:t=`default`,...n}){return(0,V.jsx)(`div`,{"data-slot":`empty-icon`,"data-variant":t,className:B(pc({variant:t,className:e})),...n})}function hc({className:e,...t}){return(0,V.jsx)(`div`,{"data-slot":`empty-title`,className:B(`cn-font-heading text-sm font-medium tracking-tight`,e),...t})}function gc({className:e,...t}){return(0,V.jsx)(`div`,{"data-slot":`empty-description`,className:B(`text-sm/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary`,e),...t})}function _c({className:e,...t}){return(0,V.jsx)(`div`,{"data-slot":`empty-content`,className:B(`flex w-full max-w-sm min-w-0 flex-col items-center gap-2.5 text-sm text-balance`,e),...t})}var vc=1e4;function yc(){let e=z(e=>e.lastAgentActivityAt),t=z(e=>e.activityFeedOpen),n=z(e=>e.setActivityFeedOpen),[,r]=(0,j.useState)(0);(0,j.useEffect)(()=>{if(e===null)return;let t=setInterval(()=>r(e=>e+1),1e3);return()=>clearInterval(t)},[e]);let i=e!==null&&Date.now()-e<vc;return(0,V.jsxs)(U,{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,V.jsxs)(`span`,{className:`relative flex h-2 w-2`,children:[i?(0,V.jsx)(`span`,{className:`absolute inline-flex h-full w-full rounded-full bg-primary opacity-75 animate-ping`}):null,(0,V.jsx)(`span`,{className:`relative inline-flex h-2 w-2 rounded-full ${i?`bg-primary`:`bg-muted-foreground/40`}`})]}),(0,V.jsx)(Mt,{size:14})]})}function bc(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 xc=e=>e.replaceAll(`_`,` `);function Sc(e){let t=z.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=z.getState();if(n.view!==`boards`&&n.setView(`boards`),r&&e.path){await z.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 z.getState().selectScreen(r),!o)return;let s=z.getState().boards[o]?.frames.find(t=>e.frameId?t.id===e.frameId:r?t.screen===r:!1);s&&requestAnimationFrame(()=>z.getState().flyToFrame(s.id))})()},deleted:!1}}function Cc({source:e}){return e===`mcp`?(0,V.jsx)(Mt,{size:12,className:`text-primary shrink-0`}):e===`canvas`?(0,V.jsx)(Sn,{size:12,className:`shrink-0 opacity-60`}):(0,V.jsx)(Yn,{size:12,className:`shrink-0 opacity-60`})}function wc({entry:e}){let[t,n]=(0,j.useState)(!1),r=Sc(e.target),i=(e.opCount??0)>1||(e.ops?.length??0)>1,a=(e.opCount??0)-(e.ops?.length??0);return(0,V.jsxs)(`li`,{className:`border-b border-border/60 last:border-b-0`,children:[(0,V.jsxs)(`div`,{className:`flex items-start gap-2 px-3 py-2`,children:[(0,V.jsx)(Cc,{source:e.source}),(0,V.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,V.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,V.jsx)(`span`,{className:`font-medium`,children:xc(e.verb)}),i?(0,V.jsxs)(H,{variant:`secondary`,className:`ml-1 px-1 py-0 text-[10px]`,children:[e.opCount??e.ops?.length,` ops`]}):null,r.deleted?(0,V.jsx)(H,{variant:`secondary`,className:`ml-1 px-1 py-0 text-[10px]`,children:`deleted`}):null,(0,V.jsx)(`span`,{className:`block truncate text-muted-foreground`,children:r.crumbs.join(` › `)||`—`})]}),(0,V.jsxs)(`div`,{className:`mt-0.5 flex items-center gap-2 text-[10px] text-muted-foreground`,children:[(0,V.jsx)(`span`,{children:bc(e.ts)}),e.session?(0,V.jsxs)(H,{variant:`secondary`,className:`px-1 py-0`,title:`MCP session ${e.session}`,children:[`agent·`,e.session.slice(0,4)]}):null]})]}),i?(0,V.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,V.jsx)(Ft,{size:12}):(0,V.jsx)(It,{size:12})}):null]}),t&&e.ops?(0,V.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=Sc(e.target);return(0,V.jsx)(`li`,{className:`truncate py-0.5 text-[11px]`,children:(0,V.jsxs)(`button`,{type:`button`,disabled:n.navigate===null,onClick:()=>n.navigate?.(),className:n.navigate?`hover:underline`:`cursor-default opacity-60`,children:[xc(e.verb),(0,V.jsx)(`span`,{className:`ml-1 text-muted-foreground`,children:n.crumbs.join(` › `)})]})},t)}),a>0?(0,V.jsxs)(`li`,{className:`py-0.5 text-[11px] text-muted-foreground`,children:[`+`,a,` more`]}):null]}):null]})}function Tc(){let e=z(e=>e.activityFeedOpen),t=z(e=>e.setActivityFeedOpen),n=z(e=>e.activityEvents),[,r]=(0,j.useState)(0);if((0,j.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,V.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,V.jsxs)(`div`,{className:`flex items-center justify-between border-b px-3 py-2`,children:[(0,V.jsx)(`span`,{className:`text-xs font-semibold`,children:`Agent activity`}),(0,V.jsx)(U,{variant:`ghost`,size:`icon-xs`,onClick:()=>t(!1),title:`Close`,children:(0,V.jsx)(sr,{})})]}),i.length===0?(0,V.jsx)(dc,{className:`px-3 py-6`,children:(0,V.jsxs)(fc,{children:[(0,V.jsx)(mc,{variant:`icon`,children:(0,V.jsx)(Mt,{})}),(0,V.jsx)(hc,{className:`text-xs`,children:`No activity yet`}),(0,V.jsx)(gc,{className:`text-xs`,children:`Agent and canvas edits will appear here.`})]})}):(0,V.jsx)(`ul`,{className:`flex-1 overflow-y-auto`,children:i.map(e=>(0,V.jsx)(wc,{entry:e},e.id))})]})}function Ec({...e}){return(0,V.jsx)(Ue,{"data-slot":`dialog`,...e})}function Dc({...e}){return(0,V.jsx)(qe,{"data-slot":`dialog-portal`,...e})}function Oc({className:e,...t}){return(0,V.jsx)(Me,{"data-slot":`dialog-overlay`,className:B(`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 kc({className:e,children:t,showCloseButton:n=!0,...r}){return(0,V.jsxs)(Dc,{children:[(0,V.jsx)(Oc,{}),(0,V.jsxs)($e,{"data-slot":`dialog-content`,className:B(`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,V.jsx)(ke,{"data-slot":`dialog-close`,asChild:!0,children:(0,V.jsxs)(U,{variant:`ghost`,className:`absolute top-2 right-2`,size:`icon-sm`,children:[(0,V.jsx)(sr,{}),(0,V.jsx)(`span`,{className:`sr-only`,children:`Close`})]})})]})]})}function Ac({className:e,...t}){return(0,V.jsx)(`div`,{"data-slot":`dialog-header`,className:B(`flex flex-col gap-2`,e),...t})}function jc({className:e,showCloseButton:t=!1,children:n,...r}){return(0,V.jsxs)(`div`,{"data-slot":`dialog-footer`,className:B(`-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,V.jsx)(ke,{asChild:!0,children:(0,V.jsx)(U,{variant:`outline`,children:`Close`})})]})}function Mc({className:e,...t}){return(0,V.jsx)(ut,{"data-slot":`dialog-title`,className:B(`cn-font-heading text-base leading-none font-medium`,e),...t})}function Nc({className:e,...t}){return(0,V.jsx)(ot,{"data-slot":`dialog-description`,className:B(`text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground`,e),...t})}function W({className:e,...t}){return(0,V.jsx)(se,{"data-slot":`label`,className:B(`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 G({...e}){return(0,V.jsx)(mt,{"data-slot":`select`,...e})}function K({...e}){return(0,V.jsx)(Ge,{"data-slot":`select-value`,...e})}function q({className:e,size:t=`default`,children:n,...r}){return(0,V.jsxs)(he,{"data-slot":`select-trigger`,"data-size":t,className:B(`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,V.jsx)(pt,{asChild:!0,children:(0,V.jsx)(Ft,{className:`pointer-events-none size-4 text-muted-foreground`})})]})}function J({className:e,children:t,position:n=`item-aligned`,align:r=`center`,...i}){return(0,V.jsx)(be,{children:(0,V.jsxs)(Ae,{"data-slot":`select-content`,"data-align-trigger":n===`item-aligned`,className:B(`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,V.jsx)(Pc,{}),(0,V.jsx)(ne,{"data-position":n,className:B(`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,V.jsx)(Fc,{})]})})}function Y({className:e,children:t,...n}){return(0,V.jsxs)(ye,{"data-slot":`select-item`,className:B(`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,V.jsx)(`span`,{className:`pointer-events-none absolute right-2 flex size-4 items-center justify-center`,children:(0,V.jsx)(ie,{children:(0,V.jsx)(Pt,{className:`pointer-events-none`})})}),(0,V.jsx)(ft,{children:t})]})}function Pc({className:e,...t}){return(0,V.jsx)(ae,{"data-slot":`select-scroll-up-button`,className:B(`z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4`,e),...t,children:(0,V.jsx)(Lt,{})})}function Fc({className:e,...t}){return(0,V.jsx)(oe,{"data-slot":`select-scroll-down-button`,className:B(`z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4`,e),...t,children:(0,V.jsx)(Ft,{})})}var Ic=[{name:`Mobile`,w:390,h:844},{name:`Tablet`,w:768,h:1024},{name:`Desktop`,w:1440,h:900}];function Lc({boardId:e,onClose:t}){let n=z(e=>e.design?.screens??[]),r=z(e=>{let t=e.design?.viewportPresets;return t&&t.length>0?t:Ic}),[i,a]=(0,j.useState)(``),[o,s]=(0,j.useState)(``);return(0,j.useEffect)(()=>{e!==null&&(a(n[0]?.id??``),s(r[r.length-1]?.name??``))},[e]),(0,V.jsx)(Ec,{open:e!==null,onOpenChange:e=>!e&&t(),children:(0,V.jsxs)(kc,{className:`sm:max-w-sm`,children:[(0,V.jsxs)(Ac,{children:[(0,V.jsx)(Mc,{children:`Add frame`}),(0,V.jsx)(Nc,{children:`Place an existing screen on this board. The frame lands next to the current ones.`})]}),n.length===0?(0,V.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:`No screens in this folder yet — ask your agent to design one first.`}):(0,V.jsxs)(`div`,{className:`grid gap-4`,children:[(0,V.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,V.jsx)(W,{htmlFor:`add-frame-screen`,className:`text-xs`,children:`Screen`}),(0,V.jsxs)(G,{value:i,onValueChange:a,children:[(0,V.jsx)(q,{id:`add-frame-screen`,className:`w-full`,children:(0,V.jsx)(K,{placeholder:`Pick a screen`})}),(0,V.jsx)(J,{children:n.map(e=>(0,V.jsx)(Y,{value:e.id,children:e.name},e.id))})]})]}),(0,V.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,V.jsx)(W,{htmlFor:`add-frame-size`,className:`text-xs`,children:`Size`}),(0,V.jsxs)(G,{value:o,onValueChange:s,children:[(0,V.jsx)(q,{id:`add-frame-size`,className:`w-full`,children:(0,V.jsx)(K,{placeholder:`Pick a size`})}),(0,V.jsx)(J,{children:r.map(e=>(0,V.jsxs)(Y,{value:e.name,children:[e.name,` — `,e.w,`×`,e.h]},e.name))})]})]})]}),(0,V.jsxs)(jc,{children:[(0,V.jsx)(U,{type:`button`,variant:`outline`,onClick:t,children:`Cancel`}),(0,V.jsx)(U,{type:`button`,onClick:()=>{let n=r.find(e=>e.name===o)??r[0];e&&i&&n&&(t(),F.addFrame({boardId:e,screenId:i,w:n.w,h:n.h}).catch(e=>L(e,`Could not add frame`)))},disabled:!i||!o,children:`Add frame`})]})]})})}function Rc(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 zc=`(14px / var(--canvas-zoom, 1))`,Bc=(e,t,n)=>`clamp(${t}px + ${zc}, ${e}px, ${n}px - ${zc})`;function Vc(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:Bc(l+c.x+c.w,l,l+a.w),top:Bc(u+c.y,u,u+a.h)}}function Hc({threads:e,frames:t,insets:n,nodeRects:r,activeId:i,onOpen:a,showScope:o=!0}){let s=(0,j.useMemo)(()=>Rc(e),[e]);return(0,V.jsx)(`div`,{className:`pointer-events-none absolute inset-0`,"data-velloo-comment-pins":!0,children:e.map(e=>{let c=Vc(e,t,n,r);if(!c)return null;let l=e.anchorState.status===`stale`,u=i===e.id;return(0,V.jsx)(`button`,{type:`button`,"data-comment-thread":e.id,"data-anchor-state":e.anchorState.status,className:`pointer-events-auto absolute grid h-7 min-w-7 -translate-x-1/2 -translate-y-1/2 place-items-center rounded-full border px-1.5 text-[11px] font-semibold shadow-md transition-[scale] hover:scale-110 ${l?`border-destructive bg-destructive text-destructive-foreground`:u?`border-primary bg-primary text-primary-foreground ring-2 ring-primary/30`:`border-primary/40 bg-card text-foreground`}`,style:{...c,transform:`scale(calc(1 / var(--canvas-zoom, 1)))`},title:l?`Comment target changed`:`Open comment thread`,onPointerDown:e=>e.stopPropagation(),onClick:t=>{t.stopPropagation(),a(e.id)},children:(0,V.jsxs)(`span`,{className:`flex items-center gap-0.5`,children:[o&&e.scope===`shared`?(0,V.jsx)(Bt,{size:10}):(0,V.jsx)(_n,{size:10}),s.get(e.id)]})},e.id)})})}function Uc(){let e=z(e=>e.markupVisible),t=z(e=>e.commentThreads),n=z(e=>e.activeCommentId),r=z(e=>e.currentBoardId?e.boards[e.currentBoardId]:void 0),i=z(e=>e.nodeRects),a=z(e=>e.frameInsets),o=z(e=>e.setActiveComment);return!e||!r?null:(0,V.jsx)(Hc,{threads:t,frames:r.frames,insets:a,nodeRects:i,activeId:n,onOpen:o})}function Wc(e){let{frame:t,canvasDefault:n,boardTheme:r,screenRevision:i,themeVersion:a}=e,o=Mr(t,n);return`${mo(t.screen,t.w,t.h,r)}&mode=${o}&canvas=1&v=${i}.${a}`}function Gc(e){let{screenId:t,width:n,height:r,boardTheme:i,scheme:a,canvasDefault:o,screenRevision:s,themeVersion:c}=e,l=Mr({scheme:a},o);return`${mo(t,n,r,i)}&mode=${l}&v=${s}.${c}`}function Kc({...e}){return(0,V.jsx)(Ze,{"data-slot":`alert-dialog`,...e})}function qc({...e}){return(0,V.jsx)(ct,{"data-slot":`alert-dialog-portal`,...e})}function Jc({className:e,...t}){return(0,V.jsx)(Fe,{"data-slot":`alert-dialog-overlay`,className:B(`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 Yc({className:e,size:t=`default`,...n}){return(0,V.jsxs)(qc,{children:[(0,V.jsx)(Jc,{}),(0,V.jsx)(_e,{"data-slot":`alert-dialog-content`,"data-size":t,className:B(`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 Xc({className:e,...t}){return(0,V.jsx)(`div`,{"data-slot":`alert-dialog-header`,className:B(`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 Zc({className:e,...t}){return(0,V.jsx)(`div`,{"data-slot":`alert-dialog-footer`,className:B(`-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 Qc({className:e,...t}){return(0,V.jsx)(`div`,{"data-slot":`alert-dialog-media`,className:B(`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 $c({className:e,...t}){return(0,V.jsx)(it,{"data-slot":`alert-dialog-title`,className:B(`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 el({className:e,...t}){return(0,V.jsx)(te,{"data-slot":`alert-dialog-description`,className:B(`text-sm text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground`,e),...t})}function tl({className:e,variant:t=`default`,size:n=`default`,...r}){return(0,V.jsx)(U,{variant:t,size:n,asChild:!0,children:(0,V.jsx)(we,{"data-slot":`alert-dialog-action`,className:B(e),...r})})}function nl({className:e,variant:t=`outline`,size:n=`default`,...r}){return(0,V.jsx)(U,{variant:t,size:n,asChild:!0,children:(0,V.jsx)(Ee,{"data-slot":`alert-dialog-cancel`,className:B(e),...r})})}function rl({open:e,title:t,description:n,confirmLabel:r,onConfirm:i,onCancel:a}){return(0,V.jsx)(Kc,{open:e,onOpenChange:e=>{e||a()},children:(0,V.jsxs)(Yc,{children:[(0,V.jsxs)(Xc,{children:[(0,V.jsx)($c,{children:t}),(0,V.jsx)(el,{children:n})]}),(0,V.jsxs)(Zc,{children:[(0,V.jsx)(nl,{children:`Cancel`}),(0,V.jsx)(tl,{variant:`destructive`,onClick:i,children:r})]})]})})}function il(e){let t=z(e=>e.selection),n=z(e=>e.snippetFocus),r=z(e=>e.commentThreads),i=z(e=>e.notes),a=z(e=>e.annotations),o=t?.screenId===e.screen?t.path:null,s=(0,j.useMemo)(()=>{let t=al({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,j.useMemo)(()=>c===null?[]:[c],[c]),u=(0,j.useRef)(s);u.current=s;let d=(0,j.useRef)(l);return d.current=l,{anchoredPaths:s,snippetPaths:l,anchoredPathsRef:u,snippetPathsRef:d}}function al(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 ol({...e}){return(0,V.jsx)(re,{"data-slot":`dropdown-menu`,...e})}function sl({...e}){return(0,V.jsx)(ce,{"data-slot":`dropdown-menu-trigger`,...e})}function cl({className:e,align:t=`start`,sideOffset:n=4,...r}){return(0,V.jsx)(ht,{children:(0,V.jsx)(ue,{"data-slot":`dropdown-menu-content`,sideOffset:n,align:t,className:B(`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 X({className:e,inset:t,variant:n=`default`,...r}){return(0,V.jsx)(A,{"data-slot":`dropdown-menu-item`,"data-inset":t,"data-variant":n,className:B(`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 ll({className:e,inset:t,...n}){return(0,V.jsx)(ve,{"data-slot":`dropdown-menu-label`,"data-inset":t,className:B(`px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:pl-7`,e),...n})}function ul({className:e,...t}){return(0,V.jsx)(Se,{"data-slot":`dropdown-menu-separator`,className:B(`-mx-1 my-1 h-px bg-border`,e),...t})}function dl({...e}){return(0,V.jsx)(le,{"data-slot":`dropdown-menu-sub`,...e})}function fl({className:e,inset:t,children:n,...r}){return(0,V.jsxs)(Ce,{"data-slot":`dropdown-menu-sub-trigger`,"data-inset":t,className:B(`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,V.jsx)(It,{className:`cn-rtl-flip ml-auto`})]})}function pl({className:e,...t}){return(0,V.jsx)(ht,{children:(0,V.jsx)(xe,{"data-slot":`dropdown-menu-sub-content`,className:B(`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 ml(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 hl(e){return e===`light`?(0,V.jsx)($n,{}):e===`dark`?(0,V.jsx)(xn,{}):(0,V.jsx)(Qn,{})}function gl({frameLabel:e,scheme:t,canvasDefault:n,onChange:r}){return(0,V.jsxs)(dl,{children:[(0,V.jsxs)(fl,{children:[hl(t??null),`Color scheme`]}),(0,V.jsx)(pl,{children:ml(e,n,t).map(e=>(0,V.jsxs)(X,{"aria-label":e.ariaLabel,onSelect:()=>r(e.value),children:[hl(e.value),e.label,e.current?(0,V.jsx)(Pt,{className:`ml-auto`}):null]},e.label))})]})}var _l=120,vl=4096,yl=190;function bl(e){return Math.max(_l,Math.min(vl,Math.round(e)))}function xl({label:e,w:t,h:n,sharedCount:r,library:i,presets:a,scheme:o,canvasDefault:s,chromeWidth:c,onPointerDownGrip:l,onRemove:u,onExport:d,onResize:f,onPreview:p,onAddSibling:m,onSchemeChange:h,moveTargets:g,onMoveToBoard:_,onMoveToNewBoard:v}){let y=c<yl;return(0,V.jsxs)(`div`,{className:`flex items-center justify-between gap-2 overflow-hidden text-xs text-muted-foreground`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-1 min-w-0`,children:[(0,V.jsx)(`div`,{onPointerDown:l,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,V.jsx)(en,{size:12,strokeWidth:2})}),(0,V.jsx)(`span`,{className:`font-medium truncate`,title:e,children:e}),y?null:(0,V.jsxs)(`span`,{className:`inline-flex shrink-0 items-center gap-0.5 opacity-60 tabular-nums`,children:[(0,V.jsx)(Sl,{value:t,ariaLabel:`frame width`,onCommit:e=>f({w:bl(e)})}),(0,V.jsx)(`span`,{className:`opacity-60`,children:`×`}),(0,V.jsx)(Sl,{value:n,ariaLabel:`frame height`,onCommit:e=>f({h:bl(e)})})]}),o&&!y?(0,V.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,V.jsx)(xn,{size:10,strokeWidth:2}):(0,V.jsx)($n,{size:10,strokeWidth:2})}):null,i&&!y?(0,V.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,V.jsx)(cn,{size:10,strokeWidth:2}),i]}):null,r>1&&!y?(0,V.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,V.jsx)(ln,{size:10}),r]}):null]}),(0,V.jsx)(`div`,{className:`flex shrink-0 items-center gap-0.5`,children:(0,V.jsxs)(ol,{children:[(0,V.jsx)(sl,{asChild:!0,children:(0,V.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,V.jsx)(Kt,{size:12})})}),(0,V.jsxs)(cl,{align:`end`,className:cc,children:[(0,V.jsxs)(X,{onSelect:p,children:[(0,V.jsx)(gn,{}),`Full-screen preview`]}),(0,V.jsx)(gl,{frameLabel:e,scheme:o,canvasDefault:s,onChange:h}),(0,V.jsxs)(dl,{children:[(0,V.jsxs)(fl,{children:[(0,V.jsx)(Pn,{}),`New frame of this screen`]}),(0,V.jsxs)(pl,{children:[a.map(e=>(0,V.jsxs)(X,{onSelect:()=>m({w:e.w,h:e.h}),children:[e.name,(0,V.jsxs)(`span`,{className:`ml-auto pl-3 text-xs text-muted-foreground tabular-nums`,children:[e.w,`×`,e.h]})]},e.name)),(0,V.jsxs)(X,{onSelect:()=>m({w:t,h:n}),children:[(0,V.jsx)(Ut,{}),`Duplicate at current size`,(0,V.jsxs)(`span`,{className:`ml-auto pl-3 text-xs text-muted-foreground tabular-nums`,children:[t,`×`,n]})]})]})]}),(0,V.jsxs)(dl,{children:[(0,V.jsxs)(fl,{children:[(0,V.jsx)(Zt,{}),`Move to board`]}),(0,V.jsxs)(pl,{className:`max-h-[60vh] overflow-y-auto`,children:[g.map(e=>(0,V.jsxs)(X,{onSelect:()=>_(e.id),children:[(0,V.jsx)(an,{}),(0,V.jsx)(`span`,{className:`truncate`,children:e.name})]},e.id)),g.length>0?(0,V.jsx)(ul,{}):null,(0,V.jsxs)(X,{onSelect:v,children:[(0,V.jsx)(Qt,{}),`New board…`]})]})]}),(0,V.jsxs)(X,{onSelect:d,children:[(0,V.jsx)(Gt,{}),`Export…`]}),(0,V.jsx)(ul,{}),(0,V.jsxs)(X,{variant:`destructive`,onSelect:u,children:[(0,V.jsx)(tr,{}),`Remove frame`]})]})]})})]})}function Sl({value:e,ariaLabel:t,onCommit:n}){let[r,i]=(0,j.useState)(String(e));return(0,j.useEffect)(()=>{i(String(e))},[e]),(0,V.jsx)(`input`,{type:`number`,value:r,min:_l,max:vl,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 Cl=11;function wl({frame:e,presets:t,onPick:n}){return(0,V.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&&t.h===e.h;return(0,V.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:[Tl(t),t.name]},t.name)})})}function Tl(e){let t=e.name.toLowerCase();return t.includes(`mobile`)?(0,V.jsx)(Kn,{size:Cl}):t.includes(`tablet`)?(0,V.jsx)(er,{size:Cl}):(0,V.jsx)(bn,{size:Cl})}function El(e,t,n,r){let i=z(e=>e.selection),a=z(e=>e.snippetFocus),o=z(e=>e.hover),s=z(e=>e.reveal),c=z(e=>e.nodeState),l=z(e=>e.screenVersion),u=z(e=>e.canvasZoom),d=z(e=>e.activityFlash[t.screen]),f=z(e=>e.rectProbe),p=z(e=>e.clearNodeRects);(0,j.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,j.useEffect)(()=>{e.current?.send({type:`applySnippetFocus`,snippetId:a})},[e,a]),(0,j.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,j.useEffect)(()=>{let n=e.current;if(!n||!d||d.path===null)return;n.send({type:`applyHighlight`,path:d.path});let r=setTimeout(()=>{let e=z.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,j.useEffect)(()=>{let i=e.current;i&&f&&f.frameId===t.id&&i.send({type:`requestRects`,paths:[...new Set([f.path,...n])],snippetPaths:r})},[e,f,t.id,n,r]),(0,j.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,j.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,j.useEffect)(()=>{let i=e.current;if(i){if(n.length===0&&r.length===0){p(t.id);return}i.send({type:`requestRects`,paths:n,snippetPaths:r})}},[e,n,r,t.id,l,p]),(0,j.useEffect)(()=>{e.current?.send({type:`setChromeScale`,scale:u})},[e,u]),(0,j.useEffect)(()=>{let n=e.current;n&&i?.screenId===t.screen&&n.send({type:`requestComputed`,path:i.path})},[e,i,t.screen,l])}function Dl(e,t){let n=(0,j.useRef)(null),r=(0,j.useRef)(null),[i,a]=(0,j.useState)(()=>({srcs:[e,null],front:0})),o=(0,j.useRef)(i);o.current=i;let s=i.front;return(0,j.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,frontRef:s===0?n:r,slotRefs:[n,r],settleSlot:e=>{let i=o.current;if(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 Ol=[];function kl({boardId:e,frame:t,frameLabel:n,boardTheme:r}){let i=z(e=>e.design?.boards??Ol),[a,o]=(0,j.useState)(!1),[s,c]=(0,j.useState)(null),l=(n,r)=>{F.updateFrame({boardId:e,frameId:t.id,patch:n}).catch(e=>L(e,r))},u=e=>{(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=()=>{o(!1),F.removeFrame({boardId:e,frameId:t.id}).catch(e=>L(e,`Could not remove frame`))},m=()=>{z.getState().setExportTarget({kind:`frame`,id:t.id,name:n})},h=()=>{z.getState().setPreviewTarget({screenId:t.screen,name:n,...r?{boardTheme:r}:{},...t.scheme?{scheme:t.scheme}:{},w:t.w})},g=n=>{F.addFrame({boardId:e,screenId:t.screen,w:n.w,h:n.h}).catch(e=>L(e,`Could not add frame`))},_=(0,j.useMemo)(()=>i.filter(t=>t.id!==e).map(e=>({id:e.id,name:e.name})),[i,e]),v=(e,t)=>{I({kind:`info`,message:`Moved "${n}" to "${t}"`,action:{label:`Open board`,onClick:()=>void z.getState().selectBoard(e)}})};return{onPickPreset:u,onResize:d,onSchemeChange:f,onExport:m,onPreview:h,onAddSibling:g,moveTargets:_,onMoveToBoard:n=>{let r=_.find(e=>e.id===n)?.name??n;F.moveFrame({boardId:e,frameId:t.id,toBoardId:n}).then(()=>v(n,r)).catch(e=>L(e,`Could not move frame`))},confirmRemove:a,requestRemove:()=>o(!0),cancelRemove:()=>o(!1),doRemove:p,newBoardName:s,setNewBoardName:c,submitNewBoard:async()=>{let n=s?.trim();if(n){c(null);try{let{boardId:r}=await F.addBoard({name:n});await F.moveFrame({boardId:e,frameId:t.id,toBoardId:r}),await z.getState().refreshDesignSummary(),v(r,n)}catch(e){L(e,`Could not move frame to a new board`)}}}}}var Al=`#2563eb`,jl=`#8b5cf6`,Ml=`__velloo_init`,Nl=150,Pl=20,Fl=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:Ml,version:1},`*`,[t.port2]),this.scheduleRetry()}scheduleRetry(){this.destroyed||this.ready||this.attempts>=Pl||(this.retryTimer=setTimeout(()=>{this.retryTimer=null,!(this.ready||this.destroyed)&&this.sendInit()},Nl))}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 Il({boardId:e,frame:t,iframeRef:n,hasScreen:r,savedScrollRef:i,anchoredPathsRef:a,snippetPathsRef:o}){let s=(0,j.useRef)(null),c=z(e=>e.setSelection),l=z(e=>e.setHover),u=z(e=>e.setNodeRects),d=z(e=>e.setSelectionComputed),f=z(e=>e.clearNodeRects);return(0,j.useEffect)(()=>{let r=n.current;if(!r)return;let p=new Fl(r,{onSelect(n,i,a){if(n===null){c(null);return}let o=z.getState();if(o.snippetFocus!==null){i===void 0?c(null):(c({screenId:`snippet:${o.snippetFocus}`,path:i}),z.getState().setSelectionAnchor({frameId:t.id,instance:a??0}));return}if(o.cursorMode===`note`){let e=Gs(o.screens,{screenId:t.screen,path:n});if(!e)return;o.createNote({attachment:{frameId:t.id,screenId:t.screen,locator:Ll(e,n)}});return}if(o.cursorMode===`comment`){let i={screenId:t.screen,path:n},a=Gs(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=Ll(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=z.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&&z.getState().setSnippetFocus(t)},onExit(){z.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=z.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:z.getState().canvasZoom}),e.selection?.screenId===t.screen&&p.send({type:`requestComputed`,path:e.selection.path})},onParentZoom(e,t,n){let i=z.getState(),a=Xo(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=rs(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=z.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}function Ll(e,t){return`$id`in e&&e.$id?`@${String(e.$id)}`:t===``?[]:t.split(`.`).map(Number)}var Rl=(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 zl(e,t,n,r){let i=n,a=r,o=t.filter(t=>!Rl(e,t));for(let t=0;t<=o.length;t++){let t=o.find(t=>Rl({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 Bl(e,t,n,r){let i=n.x,a=n.y;for(let n=0;n<=t.length;n++){let n=t.find(t=>Rl({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 Vl=44;function Hl({boardId:e,frame:t,otherFrames:n}){let[r,i]=(0,j.useState)(null),[a,o]=(0,j.useState)(null),s=()=>{let e=z.getState().frameInsets,r=t=>e[t.id]?.chromeH??Vl;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,c=n.clientX,l=n.clientY,u=z.getState().canvasZoom||1,{chromeH:d,neighbors:f}=s(),p={w:t.w,h:t.h+d},m=e=>{let t=(e.clientX-c)/u,n=(e.clientY-l)/u;return Bl(p,f,{x:Math.round(i+t),y:Math.round(a+n)},{x:i,y:a})},h=e=>o(m(e)),g=n=>{r.removeEventListener(`pointermove`,h),r.removeEventListener(`pointerup`,g),r.removeEventListener(`pointercancel`,g);let s=m(n);o(null),(s.x!==i||s.y!==a)&&F.updateFrame({boardId:e,frameId:t.id,patch:{x:s.x,y:s.y}}).catch(e=>L(e,`Could not move frame`))};r.addEventListener(`pointermove`,h),r.addEventListener(`pointerup`,g),r.addEventListener(`pointercancel`,g)},startResize:n=>r=>{r.preventDefault(),r.stopPropagation();let a=r.currentTarget;a.setPointerCapture(r.pointerId);let o=t.w,c=t.h,l=r.clientX,u=r.clientY,d=z.getState().canvasZoom||1,{chromeH:f,neighbors:p}=s(),m={x:t.x,y:t.y,w:t.w,h:t.h+f},h=e=>{let t=(e.clientX-l)/d,r=(e.clientY-u)/d,i=n===`s`?o:Math.max(120,Math.round(o+t)),a=n===`e`?c:Math.max(120,Math.round(c+r)),s=zl(m,p,i,a+f);return{w:s.w,h:s.h-f}},g=e=>i(h(e)),_=n=>{a.removeEventListener(`pointermove`,g),a.removeEventListener(`pointerup`,_),a.removeEventListener(`pointercancel`,_);let r=h(n);i(null),(r.w!==o||r.h!==c)&&F.updateFrame({boardId:e,frameId:t.id,patch:{w:r.w,h:r.h}}).catch(e=>L(e,`Could not resize frame`))};a.addEventListener(`pointermove`,g),a.addEventListener(`pointerup`,_),a.addEventListener(`pointercancel`,_)}}}var Ul=[{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 Wl(e){return Ul.find(t=>t.family===e)}function Gl(e){return`"${e.family}", ${e.fallback}`}function Kl(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 ql(e){return $r(e.role)?`:root {\n --font-${e.role}: ${ei(e.stack)};\n}`:``}function Jl(e){return e.google?Kl(e.google,e.family):null}function Yl(e){let t=e.name===wi;if(!t&&!Ti(e.name))return``;let n=Ii(e.typeset,` `,!t);return n.length===0?``:`${t?`:root, .typeset`:`.typeset-${e.name}`} {\n${n.join(`
3
+ `)}\n}`}function Xl({slotRefs:e,front:t,screenRev:n,hasScreen:r,frontIsCurrent:i}){let a=z(e=>e.cursorMode),o=z(e=>e.typesetDraft),s=z(e=>e.fontDraft),[c,l]=e;(0,j.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,j.useRef)(null);o||s?u.current={css:[o?Yl(o):``,s?ql(s):``].filter(Boolean).join(`
4
+ `),fontUrl:s?Jl(s):null}:i&&(u.current=null);let d=u.current,f=d?.css??``,p=d?.fontUrl??null;(0,j.useEffect)(()=>{let e=e=>{let t=e?.contentDocument;t?.head&&(Zl(t,`__velloo-font-draft`,`link`,p,e=>{let t=e;t.rel=`stylesheet`,t.href=p}),Zl(t,`__velloo-theme-draft`,`style`,f||null,e=>{e.textContent=f}))};e(c.current),e(l.current)},[f,p,t,n,r])}function Zl(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 Ql=198,$l=`
5
+ @keyframes velloo-loading-trace {
6
+ 0% { stroke-dashoffset: ${Ql}; }
7
+ 40% { stroke-dashoffset: 0; }
8
+ 60% { stroke-dashoffset: 0; }
9
+ 100% { stroke-dashoffset: -${Ql}; }
10
+ }
11
+ .velloo-loading-ring {
12
+ stroke-dasharray: ${Ql};
13
+ /* backwards: amber's delay would otherwise show it fully drawn for 180ms
14
+ before the trace starts, popping on every mount. */
15
+ animation: velloo-loading-trace 1.6s ease-in-out infinite backwards;
16
+ }
17
+ .velloo-loading-ring-amber { animation-delay: 0.18s; }
18
+ @media (prefers-reduced-motion: reduce) {
19
+ .velloo-loading-ring {
20
+ animation: none;
21
+ stroke-dasharray: none;
22
+ stroke-dashoffset: 0;
23
+ }
24
+ }
25
+ `;function eu({size:e=22,className:t}){let n=`velloo-loading-weave-${(0,j.useId)().replace(/[^a-zA-Z0-9]/g,``)}`;return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`style`,{href:`velloo-loading`,precedence:`default`,children:$l}),(0,V.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,V.jsx)(`defs`,{children:(0,V.jsx)(`clipPath`,{id:n,children:(0,V.jsx)(`rect`,{x:`52`,y:`30`,width:`38`,height:`35`})})}),(0,V.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,V.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,V.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 tu({label:e,size:t,className:n}){return(0,V.jsxs)(`div`,{role:`status`,"aria-live":`polite`,className:`flex items-center justify-center gap-2${n?` ${n}`:``}`,children:[(0,V.jsx)(eu,{size:t}),e?(0,V.jsx)(`span`,{children:e}):(0,V.jsx)(`span`,{className:`sr-only`,children:`Loading`})]})}function Z({className:e,type:t,...n}){return(0,V.jsx)(`input`,{type:t,"data-slot":`input`,className:B(`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 nu({open:e,title:t,placeholder:n,submitLabel:r,maxLength:i,value:a,onValueChange:o,onSubmit:s,onCancel:c}){return(0,V.jsx)(Ec,{open:e,onOpenChange:e=>{e||c()},children:(0,V.jsxs)(kc,{className:`sm:max-w-sm`,children:[(0,V.jsx)(Ac,{children:(0,V.jsx)(Mc,{children:t})}),(0,V.jsxs)(`form`,{className:`grid gap-4`,onSubmit:e=>{e.preventDefault(),s()},children:[(0,V.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,V.jsxs)(jc,{children:[(0,V.jsx)(U,{type:`button`,variant:`outline`,onClick:c,children:`Cancel`}),(0,V.jsx)(U,{type:`submit`,disabled:a.trim().length===0,children:r})]})]})]})})}var ru=(0,j.memo)(function({boardId:e,frame:t,frames:n,presets:r,sharedCount:i}){let a=(0,j.useMemo)(()=>n.filter(e=>e.id!==t.id),[n,t.id]),o=(0,j.useRef)(null),s=z(e=>e.screens[t.screen]),c=z(t=>t.boards[e]?.theme),l=z(e=>e.screenVersions[t.screen]??0),u=z(e=>e.themeVersion),d=z(e=>e.designMode),f=z(e=>e.cursorMode),p=z(e=>e.wsConnected),m=z(e=>e.canvasZoom),h=z(e=>e.setFrameInset),g=z(e=>e.frameGlow[t.id]),[_,v]=(0,j.useState)(!1),{draftPos:y,draftSize:b,startDrag:x,startResize:S}=Hl({boardId:e,frame:t,otherFrames:a}),C=b?.w??t.w,w=b?.h??t.h,ee=y?.x??t.x,T=y?.y??t.y,E=!!s,{anchoredPaths:D,snippetPaths:O,anchoredPathsRef:k,snippetPathsRef:te}=il(t),ne=Wc({frame:t,canvasDefault:d,...c?{boardTheme:c}:{},screenRevision:l,themeVersion:u}),re=(0,j.useRef)(ne);p&&(re.current=ne);let ie=re.current,ae=(0,j.useRef)(null),{srcs:oe,front:se,frontRef:ce,slotRefs:le,settleSlot:ue}=Dl(ie,ae);(0,j.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,E,h]);let de=Il({boardId:e,frame:t,iframeRef:ce,hasScreen:E,savedScrollRef:ae,anchoredPathsRef:k,snippetPathsRef:te});El(de,t,D,O),Xl({slotRefs:le,front:se,screenRev:l,hasScreen:E,frontIsCurrent:oe[se]===ie}),(0,j.useEffect)(()=>{if(!g)return;v(!0);let e=setTimeout(()=>v(!1),1400);return()=>clearTimeout(e)},[g]);let fe=t.label??s?.name??t.screen,A=kl({boardId:e,frame:t,frameLabel:fe,boardTheme:c}),pe=f===`hand`;return(0,V.jsxs)(`div`,{className:`absolute group`,style:{left:ee,top:T},"data-frame-id":t.id,"data-group-id":t.group??``,children:[(0,V.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,V.jsx)(`div`,{style:{width:`calc(${C}px * var(--canvas-zoom, 1))`,transform:`scale(calc(1 / var(--canvas-zoom, 1)))`,transformOrigin:`bottom left`},children:(0,V.jsx)(xl,{label:fe,w:C,h:w,sharedCount:i,library:s?.library??null,presets:r,scheme:t.scheme,canvasDefault:d,chromeWidth:C*m,onPointerDownGrip:x,onRemove:A.requestRemove,onExport:A.onExport,onResize:A.onResize,onPreview:A.onPreview,onAddSibling:A.onAddSibling,onSchemeChange:A.onSchemeChange,moveTargets:A.moveTargets,onMoveToBoard:A.onMoveToBoard,onMoveToNewBoard:()=>A.setNewBoardName(fe)})}),s?(0,V.jsxs)(`div`,{ref:o,className:`relative`+(_?` rounded-md ring-2 ring-primary/70 shadow-[0_0_18px_2px] shadow-primary/25 transition-shadow duration-300`:``),style:{width:C,height:w},children:[[0,1].map(e=>oe[e]===null?null:(0,V.jsx)(`iframe`,{ref:le[e],title:`${s.name} (${t.id})${e===se?``:` — loading`}`,src:oe[e],width:C,height:w,onLoad:()=>{ue(e)&&de.current?.attach()},"aria-hidden":e!==se||void 0,className:`velloo-frame-iframe absolute inset-0 border rounded-md bg-white`+(e===se?``:` invisible`),style:{width:C,height:w,pointerEvents:e===se&&!pe?`auto`:`none`}},e)),(0,V.jsx)(`div`,{onPointerDown:S(`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,V.jsx)(`div`,{onPointerDown:S(`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,V.jsx)(`div`,{onPointerDown:S(`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,V.jsx)(`div`,{style:{width:C,height:w},className:`border border-dashed border-muted-foreground/30 rounded-md grid place-items-center text-xs text-muted-foreground`,children:(0,V.jsx)(tu,{size:28,label:t.screen,className:`flex-col`})}),(0,V.jsx)(`div`,{style:{width:`calc(${C}px * var(--canvas-zoom, 1))`,transform:`scale(calc(1 / var(--canvas-zoom, 1)))`,transformOrigin:`top left`},children:(0,V.jsx)(wl,{frame:t,presets:r,onPick:A.onPickPreset})})]}),(0,V.jsx)(rl,{open:A.confirmRemove,title:`Remove frame`,description:`Remove this placement of "${fe}" from the board? The underlying screen stays — only this frame is removed. You can put it back with ⌘Z.`,confirmLabel:`Remove`,onConfirm:A.doRemove,onCancel:A.cancelRemove}),(0,V.jsx)(nu,{open:A.newBoardName!==null,title:`Move to a new board`,placeholder:`Board name`,submitLabel:`Create and move`,maxLength:80,value:A.newBoardName??``,onValueChange:A.setNewBoardName,onSubmit:()=>void A.submitNewBoard(),onCancel:()=>A.setNewBoardName(null)})]})});function iu(){let e=z(e=>e.components);return(0,j.useMemo)(()=>{let t=e?.find(e=>e.id===`Icon`)?.props.find(e=>e.name===`name`);return Array.isArray(t?.enumValues)?t.enumValues:[]},[e])}function au(){let e=z(e=>e.selection),t=z(e=>e.currentBoardId?e.boards[e.currentBoardId]:void 0),n=z(e=>e.nodeRects),r=z(e=>e.snippetRects),i=z(e=>e.snippetFocus),a=z(e=>e.selectionAnchor),o=z(e=>e.frameInsets);return(0,j.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 ou=C(`oklch`),su=C(`rgb`),cu=C(`hsl`);function lu(e,t=3){if(e===void 0||Number.isNaN(e))return 0;let n=10**t;return Math.round(e*n)/n}function uu(e){let t=ou(e);return`oklch(${lu(t.l)} ${lu(t.c)} ${lu(t.h)}${t.alpha!==void 0&&t.alpha<1?` / ${lu(t.alpha,3)}`:``})`}function du(e){let t=cu(e);return`hsl(${lu(t.h??0,1)} ${lu((t.s??0)*100,1)}% ${lu((t.l??0)*100,1)}%${t.alpha!==void 0&&t.alpha<1?` / ${lu(t.alpha,3)}`:``})`}function fu(e){if(!e)return null;let t=b(e);return t?pu(t):null}function pu(e){let t=su(e);return{hex:ee(t)??`#000000`,oklch:uu(e),hsl:du(e)}}function mu(e){let t=b(e);return t?uu(t):null}var hu=e=>{if(!e)return null;let t=Number.parseFloat(e);return Number.isFinite(t)?Math.round(t*100)/100:null},gu={100:`light`,200:`light`,300:`light`,400:`normal`,500:`medium`,600:`semibold`,700:`bold`,800:`bold`,900:`bold`},_u={0:`0`,1:`1`,2:`2`,4:`4`};function vu(e){return e===null?null:`${e}px`}function yu(e){let t=e?.split(`,`)[0]?.trim();return t?t.replace(/^["']|["']$/g,``):null}function bu(e){return!e||/^rgba?\([^)]*[,/]\s*0\s*\)$/.test(e.trim())?null:fu(e)?.hex??null}function xu(e){let[t]=e;return t==null?null:e.every(e=>e===t)?t:null}function Su(e){if(!e)return{};let t={},n=(e,n)=>{n!==null&&(t[e]=n)},r=hu(e.fontSize);n(`font`,yu(e.fontFamily)),n(`size`,r),n(`weight`,gu[e.fontWeight??``]??null);let i=hu(e.lineHeight);n(`leading`,i!==null&&r?Math.round(i/r*100)/100:null),n(`tracking`,e.letterSpacing===`normal`?`normal`:vu(hu(e.letterSpacing))),n(`align`,(e.textAlign===`start`?`left`:e.textAlign===`end`?`right`:null)??e.textAlign??null),n(`color`,bu(e.color)),n(`bg`,bu(e.backgroundColor)),n(`borderColor`,bu(e.borderTopColor));let a=hu(e.borderTopWidth);return n(`borderWidth`,a===null?null:_u[a]??vu(a)),n(`rounded`,vu(hu(e.borderTopLeftRadius))),n(`padding`,xu([hu(e.paddingTop),hu(e.paddingRight),hu(e.paddingBottom),hu(e.paddingLeft)])),n(`margin`,xu([hu(e.marginTop),hu(e.marginRight),hu(e.marginBottom),hu(e.marginLeft)])),n(`gap`,e.columnGap===`normal`?0:hu(e.columnGap)),t}function Cu(e){return e.filter(e=>e.tier===`bar`)}var wu=new Set([`h1`,`h2`,`h3`,`h4`,`h5`,`h6`]),Tu=new Set([`p`,`span`,`small`,`strong`,`em`,`b`,`i`,`label`,`blockquote`,`figcaption`,`li`,`dt`,`dd`]),Eu=new Set([`Box`,`Card`,`CardContent`,`CardHeader`,`CardFooter`,`Container`,`Stack`,`Layer`,`Placeholder`]);function Du(e){if(ri(e))return`snippet`;if(!ni(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&&wu.has(t)?`heading`:t&&Tu.has(t)||typeof e.props?.children==`string`?`text`:`box`}return Eu.has(t)?`box`:`other`}var Ou=[{value:`full`,label:`Fill`},{value:`fit`,label:`Hug`},{value:`fixed`,label:`Fixed`}],ku=[{value:`light`,label:`Light`},{value:`normal`,label:`Regular`},{value:`medium`,label:`Medium`},{value:`semibold`,label:`Semibold`},{value:`bold`,label:`Bold`}],Au=[{value:`none`,label:`Square`},{value:`sm`,label:`Small`},{value:`md`,label:`Medium`},{value:`lg`,label:`Large`},{value:`full`,label:`Round`}],ju=[{value:`left`,label:`Left`},{value:`center`,label:`Center`},{value:`right`,label:`Right`}],Mu=[{value:`0`,label:`None`},{value:`1`,label:`Hairline`},{value:`2`,label:`Medium`},{value:`4`,label:`Thick`}],Nu=[{value:`tighter`,label:`Tighter`},{value:`tight`,label:`Tight`},{value:`normal`,label:`Normal`},{value:`wide`,label:`Wide`},{value:`wider`,label:`Wider`}];function Pu(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 Fu(e){if(!e)return[];let t=[],n=(n,r)=>{let i=Pu(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,Lu(t)),typeof r==`object`&&`foreground`in r&&r.foreground!==void 0&&n(`${t}-foreground`,`${Lu(t)} text`));return t}function Iu(e){let t=e?.typography?.fontFamily;return t?Object.keys(t).map(e=>({value:e,label:Lu(e)})):[]}function Lu(e){return e.charAt(0).toUpperCase()+e.slice(1).replace(/-/g,` `)}var Q=e=>({via:`style`,key:e}),Ru={id:`width`,label:`Width`,kind:`size`,slot:Q(`width`),tier:`pane`,width:132,choices:Ou},zu={id:`height`,label:`Height`,kind:`size`,slot:Q(`height`),tier:`pane`,width:132,choices:Ou},Bu={id:`rounded`,label:`Corners`,kind:`choice`,slot:Q(`rounded`),tier:`pane`,width:108,choices:Au},Vu=[{id:`borderWidth`,label:`Border`,kind:`choice`,slot:Q(`borderWidth`),tier:`bar`,width:100,choices:Mu},{id:`borderColor`,label:`Border color`,kind:`color`,slot:Q(`borderColor`),tier:`bar`,width:132}],Hu=[{id:`font`,label:`Font`,kind:`font`,slot:Q(`fontFamily`),tier:`bar`,width:112},{id:`size`,label:`Size`,kind:`number`,slot:Q(`fontSize`),tier:`bar`,width:84,min:8,max:200},{id:`weight`,label:`Weight`,kind:`choice`,slot:Q(`fontWeight`),tier:`bar`,width:112,choices:ku},{id:`align`,label:`Align`,kind:`align`,slot:Q(`textAlign`),tier:`bar`,width:96,choices:ju},{id:`color`,label:`Color`,kind:`color`,slot:Q(`textColor`),tier:`bar`,width:132},{id:`leading`,label:`Line height`,kind:`ratio`,slot:Q(`leading`),tier:`pane`,width:96,min:.75,max:3,step:.05},{id:`tracking`,label:`Letter spacing`,kind:`choice`,slot:Q(`tracking`),tier:`pane`,width:108,choices:Nu},{id:`bg`,label:`Background`,kind:`color`,slot:Q(`bg`),tier:`pane`,width:132},{...Ru},{...zu},{id:`padding`,label:`Padding`,kind:`number`,slot:Q(`padding`),tier:`pane`,width:88,min:0,max:256},{...Bu},...Vu.map(e=>({...e,tier:`pane`}))],Uu=[{id:`margin`,label:`Margin`,kind:`number`,slot:Q(`margin`),tier:`bar`,width:88,min:0,max:256},{id:`padding`,label:`Padding`,kind:`number`,slot:Q(`padding`),tier:`bar`,width:88,min:0,max:256},{id:`color`,label:`Text`,kind:`color`,slot:Q(`textColor`),tier:`bar`,width:132},{id:`bg`,label:`Background`,kind:`color`,slot:Q(`bg`),tier:`bar`,width:132},...Vu,{...Ru},{...zu},{id:`gap`,label:`Gap`,kind:`number`,slot:Q(`gap`),tier:`pane`,width:88,min:0,max:256},{...Bu},{id:`align`,label:`Align`,kind:`align`,slot:Q(`textAlign`),tier:`pane`,width:96,choices:ju}],Wu=[{id:`prompt`,label:`Prompt`,kind:`prompt`,slot:{via:`prop`,name:`src`},tier:`bar`,width:180},{...Bu,tier:`bar`},{...Ru},{...zu},...Vu.map(e=>({...e,tier:`pane`}))],Gu=[{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:Q(`textColor`),tier:`bar`,width:132}],Ku=new Set([`className`,`style`,`sx`,`asChild`,`children`,`key`,`ref`]);function qu(e){let t=[];for(let n of e?.props??[]){if(t.length>=2)break;Ku.has(n.name)||n.control===`enum`&&n.enumValues?.length&&t.push({id:`prop:${n.name}`,label:Lu(n.name),kind:`choice`,slot:{via:`prop`,name:n.name},tier:`bar`,width:124,choices:n.enumValues.map(e=>({value:String(e),label:Lu(String(e))}))})}return[...t,...Uu.map(e=>({...e,tier:`pane`}))]}var Ju=4;function Yu(e){if(!e)return[];let t=[];for(let n of e.params??[]){let e=Xu(n);e&&t.push(t.length<Ju?e:{...e,tier:`pane`})}return t}function Xu(e){let t={via:`arg`,name:e.name},n={id:`arg:${e.name}`,label:Lu(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:Lu(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 Zu({node:e,descriptor:t,snippet:n}){let r=Du(e);switch(r){case`heading`:case`text`:return{role:r,controls:Hu};case`box`:return{role:r,controls:Uu};case`image`:return{role:r,controls:Wu};case`icon`:return{role:r,controls:Gu};case`snippet`:return{role:r,controls:Yu(n)};case`other`:return{role:r,controls:qu(t)}}}function Qu(e){return!(`$ref`in e)||e.$ref!==`Heading`?null:Oi[ji(e.props?.level)]??null}var $u=new Set([`xs`,`sm`,`base`,`lg`,`xl`,`2xl`,`3xl`,`4xl`,`5xl`,`6xl`,`7xl`,`8xl`,`9xl`,...Di]),ed=new Set([`thin`,`extralight`,`light`,`normal`,`medium`,`semibold`,`bold`,`extrabold`,`black`]),td=/^\[-?[\d.]+(px|rem|em|%|ch|vw|vh)?\]$/;function nd(e,t){if(e.startsWith(`leading-`))return`leading`;if(e.startsWith(`tracking-`))return`tracking`;if(e.startsWith(`text-`)){let t=e.slice(5);return $u.has(t)||td.test(t)?`size`:null}if(e.startsWith(`font-`)){let n=e.slice(5);return ed.has(n)?`weight`:t.has(n)||n===`sans`||n===`serif`||n===`mono`?`family`:null}return null}function rd(e){let t=e.props??{};if(e.$ref===`Heading`){let e=ji(t.level);return{role:Oi[e],via:t.level===void 0?`level 1 (default)`:`level ${e}`}}if(e.$ref===`Text`){let e=String(t.variant??`default`),n=e in ki?e:`default`;return{role:ki[n],via:t.variant===void 0?`variant default`:`variant ${n}`}}return null}function id(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 ad(e,t){for(let n of id(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:wi,via:`prose`}}if(e.split(/\s+/).includes(`typeset`))return{name:wi,via:`class`}}return null}function od(e,t,n,r){if(!ni(r))return null;let i=rd(r);if(!i)return null;let a=e.typography.typesets??{},o=ad(t,n),s=a.default??{},c=o&&o.name!=="default"?a[o.name]:void 0,l={...s,...c??{}},u=e.typography.fontFamily??{},d=zi(l,{fontFamily:u})[i.role],f=Ei[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=nd(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 sd={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},cd=Object.fromEntries(Object.entries(sd).map(([e,t])=>[t,e]));function ld(e){if(e===void 0)return null;let t=sd[e];if(t!==void 0)return t;let n=/^\[(-?\d*\.?\d+)px\]$/.exec(e);return n?Number(n[1]):null}function ud(e){return cd[e]??`[${e}px]`}var dd=new Set([`block`,`inline-block`,`inline`,`flex`,`inline-flex`,`grid`,`inline-grid`,`hidden`,`contents`,`table`,`flow-root`]),fd=new Set([`xs`,`sm`,`base`,`lg`,`xl`,`2xl`,`3xl`,`4xl`,`5xl`,`6xl`,`7xl`,`8xl`,`9xl`]),pd=new Set([`thin`,`extralight`,`light`,`normal`,`medium`,`semibold`,`bold`,`extrabold`,`black`]),md=new Set([`left`,`center`,`right`,`justify`,`start`,`end`]),hd=new Set([`0`,`2`,`4`,`8`]),gd=new Set([`x`,`y`,`t`,`r`,`b`,`l`,`s`,`e`,`solid`,`dashed`,`dotted`,`double`,`hidden`,`none`,`collapse`,`separate`,`spacing`]),_d=new Set([`cover`,`contain`,`auto`,`center`,`top`,`bottom`,`left`,`right`,`repeat`,`no-repeat`,`fixed`,`local`,`scroll`,`clip`,`origin`,`blend`,`gradient`,`none`]),vd={t:`top`,r:`right`,b:`bottom`,l:`left`};function yd(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=vd[t];r&&(e[r]=n)}}function bd(e){return/^\[-?\d*\.?\d+(px|rem|em|%|vh|vw|ch|ex|pt)\]$/.test(e)}function xd(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(dd.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`:pd.has(s)?t.fontWeight=s:t.fontFamily=s;continue;case`text`:md.has(s)?t.textAlign=s:fd.has(s)||bd(s)?t.fontSize=s:t.textColor=s;continue;case`bg`:if(_d.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(hd.has(s)){t.borderWidth=s;continue}if(gd.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)yd(t[e.box],e.variant,e.arg);return{model:t,extra:n}}function Sd(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 Cd({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(...Sd(`p`,e.padding)),n.push(...Sd(`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 wd={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},Td=Object.fromEntries(Object.entries(wd).map(([e,t])=>[t,e]));function Ed(e){if(e===void 0)return null;let t=wd[e];if(t!==void 0)return t;let n=/^\[(\d*\.?\d+)px\]$/.exec(e);return n?Number(n[1]):null}function Dd(e){return Td[e]??`[${e}px]`}var Od={none:1,tight:1.25,snug:1.375,normal:1.5,relaxed:1.625,loose:2};function kd(e){if(e===void 0)return null;let t=Od[e];if(t!==void 0)return t;let n=/^\[(\d*\.?\d+)\]$/.exec(e);return n?Number(n[1]):null}function Ad(e){for(let[t,n]of Object.entries(Od))if(Math.abs(n-e)<.001)return t;return`[${Number(e.toFixed(3))}]`}function jd(e){let{top:t,right:n,bottom:r,left:i}=e;return t===void 0||t!==n||t!==r||t!==i?null:t}function Md(e){return e===void 0?{}:{top:e,right:e,bottom:e,left:e}}function Nd(e){return e===void 0?null:e===`full`||e===`screen`?`full`:e===`fit`||e===`auto`||e===`min`||e===`max`?`fit`:`fixed`}function Pd(e){if(e===void 0)return null;let t=/^\[(\d*\.?\d+)px\]$/.exec(e);return t?Number(t[1]):ld(e)}function Fd(e){return ri(e)?e.$extraClassName??``:ni(e)&&typeof e.props?.className==`string`?e.props.className:``}function Id(e,t){switch(t){case`padding`:return ld(jd(e.padding)??void 0);case`margin`:return ld(jd(e.margin)??void 0);case`gap`:return ld(e.gap);case`fontSize`:return Ed(e.fontSize);case`leading`:return kd(e.leading);case`borderWidth`:return e.borderWidth===``?`1`:e.borderWidth??null;default:return e[t]??null}}function Ld(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=Md(ud(Number(n)));break;case`margin`:r.margin=Md(ud(Number(n)));break;case`gap`:r.gap=ud(Number(n));break;case`fontSize`:r.fontSize=Dd(Number(n));break;case`leading`:r.leading=Ad(Number(n));break;case`borderWidth`:r.borderWidth=String(n)===`1`?``:String(n);break;default:r[t]=String(n)}return r}var Rd=new Set([`fontFamily`,`fontSize`,`fontWeight`,`leading`,`tracking`,`textColor`,`bg`,`borderColor`,`rounded`]);function zd(e,t){let{node:n,themeValues:r,themeSource:i}=t,a=t.computed?.[e.id]??null;if(e.slot.via===`arg`){let t=Bd((ri(n)?n.args:void 0)?.[e.slot.name]);return{value:t,origin:`plain`,authored:t!==null}}if(e.slot.via===`prop`){let t=Bd((ni(n)?n.props:void 0)?.[e.slot.name]);return{value:t,origin:`plain`,authored:t!==null}}let o=e.slot.key,{model:s}=xd(Fd(n)),c=Id(s,o),l=r?.[e.id]??null;return c===null?l===null?{value:null,origin:Rd.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 Bd(e){return e==null?null:typeof e==`string`||typeof e==`number`||typeof e==`boolean`?e:null}function Vd(e,t,n){let r=xd(e);return Cd({model:Ld(r.model,t,n),extra:r.extra})}var Hd=new Set([`span`,`a`,`em`,`strong`,`b`,`i`,`u`,`s`,`small`,`code`,`kbd`,`samp`,`var`,`abbr`,`cite`,`mark`,`q`,`sub`,`sup`,`time`,`label`]);function Ud(e,t){if(!ni(t))return e;let n=typeof t.props?.as==`string`?t.props.as:void 0;if(n===void 0||!Hd.has(n))return e;let r=xd(e);return r.model.display!==void 0&&r.model.display!==`inline`?e:Cd({model:{...r.model,display:`block`},extra:r.extra})}var Wd={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`},Gd={100:`thin`,200:`extralight`,300:`light`,400:`normal`,500:`medium`,600:`semibold`,700:`bold`,800:`extrabold`,900:`black`},Kd={values:{}},qd=[[`leading-`,`leading`],[`tracking-`,`tracking`],[`font-`,`weight`],[`text-`,`size`]];function Jd({theme:e,tree:t,path:n,node:r}){let i=Du(r);if(i!==`heading`&&i!==`text`||!e||!t)return Kd;let a=Xd(e,t,n,r);if(!a)return Kd;let{facts:o,inherited:s}=a,{resolved:c,face:l}=o,u=o.region?`${Wd[o.role]} · ${o.region.name}`:Wd[o.role],d=s?`${u}, inherited`:u,f={font:l.role??l.slot,size:Math.round(c.fontSize*100)/100,weight:Gd[c.fontWeight]??null,leading:Math.round(c.lineHeight*1e3)/1e3,tracking:c.letterSpacing};if(s){let{overrides:e}=o,t=Ed(Yd(e.size,`text-`));t!==null&&(f.size=t);let n=Yd(e.weight,`font-`);n!==void 0&&(f.weight=n);let r=Yd(e.family,`font-`);r!==void 0&&(f.font=r);let i=kd(Yd(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=qd.find(([e])=>t.startsWith(e));n&&(p[n[1]]=`${e} also applies at wider frames`)}return{values:f,source:d,notes:p}}function Yd(e,t){return e?.startsWith(t)?e.slice(t.length):void 0}function Xd(e,t,n,r){let i=od(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=Zd(t,i);if(!a)break;let o=od(e,t,i,a);if(o)return{facts:o,inherited:!0}}return null}function Zd(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 Qd(e,t){let n=(0,j.useRef)(null),r=(0,j.useRef)(null),i=(0,j.useRef)(0),a=(0,j.useRef)(t);a.current=t,(0,j.useEffect)(()=>()=>{n.current&&clearTimeout(n.current)},[]);let o=(0,j.useCallback)(()=>{n.current=null;let e=r.current;r.current=null,e&&(i.current=Date.now(),a.current(e.value))},[]);return(0,j.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 $d=200;function ef({selection:e,liveClasses:t,node:n}){let r=e?`${e.screenId}:${e.path}`:``,i=(0,j.useRef)(null),a=Qd($d,e=>{F.applyClasses({screenId:e.screenId,path:R(e.path),classes:e.classes,gesture:e.gesture}).catch(e=>L(e,`Could not update style`))}),o=Qd($d,e=>{F.updateProps({screenId:e.screenId,path:R(e.path),propPatch:e.patch,gesture:e.gesture}).catch(e=>L(e,`Could not update prop`))}),s=Qd($d,e=>{F.updateSnippetArgs({screenId:e.screenId,path:R(e.path),argPatch:e.patch,gesture:e.gesture}).catch(e=>L(e,`Could not update snippet`))});return(0,j.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)_=Vd(_,e,typeof t==`boolean`?String(t):t);h===`textAlign`&&l!==null&&n&&(_=Ud(_,n)),a({screenId:d,path:f,classes:_,gesture:p},m)},[e,r,t,n,a,o,s])}function tf(e){return t=>{t.key===`Enter`&&(t.metaKey||t.ctrlKey)&&(t.preventDefault(),e())}}function nf({className:e,...t}){return(0,V.jsx)(`textarea`,{"data-slot":`textarea`,className:B(`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})}var rf=[{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`}],af=[`1:1`,`4:3`,`3:4`,`16:9`,`9:16`,`3:2`,`2:3`];function of(e,t){if(!e||!t)return;let n=e/t,r,i=1/0;for(let e of af){let[t,a]=e.split(`:`).map(Number),o=Math.abs(n-t/a);o<i&&(i=o,r=e)}return r}var sf={"1:1":`1/1`,"4:3":`4/3`,"3:4":`3/4`,"16:9":`16/9`},cf=Object.fromEntries(Object.entries(sf).map(([e,t])=>[t,e]));function lf(e,t){return e?.aspect??cf[t??``]??of(e?.width,e?.height)??`1:1`}function uf(e){return`$${(e/1e6).toFixed(2)}`}function df(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 ff(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 pf({screenId:e,path:t,src:n,nodeAspect:r}){let i=z(e=>e.generatedAssets),a=z(e=>e.loadGeneratedAssets),o=kr(n),s=o?i[o]:void 0,[c,l]=(0,j.useState)(s?.prompt??``),[u,d]=(0,j.useState)(s?.intent??`illustration`),[f,p]=(0,j.useState)(()=>lf(s,r)),[m,h]=(0,j.useState)(!1),[g,_]=(0,j.useState)([]),[v,y]=(0,j.useState)(!1),b=(0,j.useRef)(o);(0,j.useEffect)(()=>{let e=o??``,t=e?i[e]:void 0;b.current===e?t&&c===``&&(l(t.prompt),d(t.intent),p(lf(t,r))):(b.current=e,l(t?.prompt??``),d(t?.intent??`illustration`),p(lf(t,r)),y(!1))},[o,i,c,r]),(0,j.useEffect)(()=>{let e=!0;return Xa().then(t=>e&&_(t)).catch(()=>void 0),()=>{e=!1}},[]);let x=e=>g.find(t=>t.intent===e)?.priceMicros,S=rf.filter(e=>g.length===0||x(e.id)!==void 0),C=rf.find(e=>e.id===u)?.label??u,w=u===`vector`||u===`mark`,ee=async()=>{let n=c.trim();if(n&&!m){h(!0);try{let i=await $a({prompt:n,intent:u,...w?{}:{aspect:f},...o?{replaces:o}:{}}),s={src:i.url},c=!r||r in cf,l=sf[of(i.width,i.height)??``]??(w?void 0:sf[f]);c&&l&&(s.aspect=l),b.current=i.assetPath,await F.updateProps({screenId:e,path:R(t),propPatch:s}),await a(),I({kind:`success`,title:`Image generated`,message:i.cost})}catch(e){L(e,`Could not generate the image`)}finally{h(!1)}}},T=async n=>{if(!m){h(!0);try{let a=i[n],o={src:`/${n}`},s=sf[of(a?.width,a?.height)??``];s&&(!r||r in cf)&&(o.aspect=s),b.current=n,l(a?.prompt??``),d(a?.intent??`illustration`),y(!1),await F.updateProps({screenId:e,path:R(t),propPatch:o})}catch(e){L(e,`Could not restore that version`)}finally{h(!1)}}},E=async e=>{if(!m){h(!0);try{await Za(e),await a(),I({kind:`success`,message:`Deleted ${e.replace(`assets/`,``)}.`})}catch(e){L(e,`Could not delete that image`)}finally{h(!1)}}};if(!o)return(0,V.jsxs)(`section`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsx)(`div`,{className:`text-xs uppercase tracking-wider text-muted-foreground`,children:`Image`}),(0,V.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`This image isn't in the folder's `,(0,V.jsx)(`code`,{children:`assets/`}),` store, so it has no velloo provenance. Point `,(0,V.jsx)(`code`,{children:`src`}),` at an asset to generate a replacement.`]})]});let D=!s&&!v,O=df(i,o);return(0,V.jsxs)(`section`,{className:`flex flex-col gap-2`,"data-testid":`image-panel`,children:[(0,V.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,V.jsx)(`div`,{className:`text-xs uppercase tracking-wider text-muted-foreground`,children:`Image`}),s?(0,V.jsx)(`span`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground`,"data-testid":`image-panel-badge`,children:`generated by velloo`}):(0,V.jsx)(`span`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground`,"data-testid":`image-panel-badge`,children:`not generated`})]}),D?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`velloo didn't generate this image, so there's no prompt to show.`}),(0,V.jsx)(U,{variant:`outline`,size:`sm`,className:`text-xs`,"data-testid":`image-panel-compose`,onClick:()=>y(!0),children:`Replace with a generated image`})]}):(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(W,{htmlFor:`image-prompt`,className:`text-xs font-medium text-muted-foreground`,children:`prompt`}),(0,V.jsx)(nf,{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:tf(()=>void ee())}),(0,V.jsxs)(`div`,{className:`flex gap-2`,children:[(0,V.jsxs)(`div`,{className:`flex-1 flex flex-col gap-1.5`,children:[(0,V.jsx)(W,{htmlFor:`image-intent`,className:`text-xs font-medium text-muted-foreground`,children:`intent`}),(0,V.jsxs)(G,{value:u,onValueChange:d,children:[(0,V.jsx)(q,{id:`image-intent`,size:`sm`,className:`text-xs`,children:(0,V.jsx)(K,{children:C})}),(0,V.jsx)(J,{children:S.map(e=>{let t=x(e.id);return(0,V.jsx)(Y,{value:e.id,className:`[&>span:last-child]:flex-1`,children:(0,V.jsxs)(`span`,{className:`flex items-center justify-between gap-4`,children:[(0,V.jsx)(`span`,{children:e.label}),t===void 0?null:(0,V.jsx)(`span`,{className:`text-muted-foreground tabular-nums`,children:uf(t)})]})},e.id)})})]})]}),w?null:(0,V.jsxs)(`div`,{className:`w-24 flex flex-col gap-1.5`,children:[(0,V.jsx)(W,{htmlFor:`image-aspect`,className:`text-xs font-medium text-muted-foreground`,children:`aspect`}),(0,V.jsxs)(G,{value:f,onValueChange:p,children:[(0,V.jsx)(q,{id:`image-aspect`,size:`sm`,className:`text-xs`,children:(0,V.jsx)(K,{})}),(0,V.jsx)(J,{children:af.map(e=>(0,V.jsx)(Y,{value:e,children:e},e))})]})]})]}),(0,V.jsx)(U,{size:`sm`,className:`text-xs`,"data-testid":`image-panel-generate`,disabled:m||c.trim().length===0,onClick:()=>void ee(),children:m?`Generating…`:s?`Regenerate`:`Generate`}),(0,V.jsxs)(`p`,{className:`text-[10px] text-muted-foreground leading-relaxed`,children:[s?(0,V.jsxs)(V.Fragment,{children:[s.intent,` · ${ff(s.generatedAt)}`,s.width&&s.height?` · ${s.width}×${s.height}`:null,(0,V.jsx)(`br`,{})]}):null,`Charged against your velloo-cloud credits. Each run makes a new asset and repoints this node.`]})]}),O.length>0?(0,V.jsxs)(`div`,{className:`flex flex-col gap-1.5 pt-1`,"data-testid":`image-panel-history`,children:[(0,V.jsx)(`div`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground`,children:`Previous versions`}),O.map(e=>{let t=i[e];return(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,"data-testid":`image-panel-version`,"data-version":e,children:[(0,V.jsx)(`img`,{src:`/${e}`,alt:``,className:`size-8 shrink-0 rounded border object-cover`}),(0,V.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-[10px] text-muted-foreground`,children:t?`${t.intent} · ${ff(t.generatedAt)}`:`original`}),(0,V.jsx)(U,{variant:`ghost`,size:`icon`,className:`size-6`,title:`Put this version back on the node`,"data-testid":`image-panel-restore`,disabled:m,onClick:()=>void T(e),children:(0,V.jsx)(Rn,{className:`size-3`})}),(0,V.jsx)(U,{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 E(e),children:(0,V.jsx)(tr,{className:`size-3`})})]},e)})]}):null]})}function mf({className:e,orientation:t=`horizontal`,decorative:n=!0,...r}){return(0,V.jsx)(dt,{"data-slot":`separator`,decorative:n,orientation:t,className:B(`shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch`,e),...r})}function hf({delayDuration:e=0,...t}){return(0,V.jsx)(He,{"data-slot":`tooltip-provider`,delayDuration:e,...t})}function gf({...e}){return(0,V.jsx)(Oe,{"data-slot":`tooltip`,...e})}function _f({...e}){return(0,V.jsx)(Qe,{"data-slot":`tooltip-trigger`,...e})}function vf({className:e,sideOffset:t=0,children:n,...r}){return(0,V.jsx)(rt,{children:(0,V.jsxs)(Xe,{"data-slot":`tooltip-content`,sideOffset:t,className:B(`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,V.jsx)(st,{className:`z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground`})]})})}var yf=C(`rgb`),bf=C(`hsv`);function xf({h:e,s:t,v:n}){return ee(yf({mode:`hsv`,h:e,s:t,v:n}))??`#000000`}function Sf(e){let t=b(e);if(!t)return null;let n=bf(t);return{h:n.h??0,s:n.s??0,v:n.v??0}}var Cf=160,wf=Cf/2,Tf=`conic-gradient(from 90deg, ${[0,60,120,180,240,300,360].map(e=>`hsl(${e} 100% 50%)`).join(`, `)})`;function Ef({value:e,onChange:t}){let n=(0,j.useRef)(null),r=(0,j.useCallback)((r,i)=>{let a=n.current?.getBoundingClientRect();if(!a)return;let o=r-(a.left+wf),s=i-(a.top+wf),c=(Math.atan2(s,o)*180/Math.PI+360)%360,l=Math.min(1,Math.hypot(o,s)/wf);t({...e,h:c,s:l})},[t,e]),i=e.h*Math.PI/180,a=wf+Math.cos(i)*e.s*wf,o=wf+Math.sin(i)*e.s*wf,s=xf(e);return(0,V.jsxs)(`div`,{className:`flex flex-col items-center gap-3`,children:[(0,V.jsx)(`div`,{ref:n,role:`application`,"aria-label":`Hue and saturation`,className:`relative cursor-crosshair rounded-full border border-border/60`,style:{width:Cf,height:Cf,backgroundImage:`radial-gradient(circle at center, #fff 0%, rgba(255,255,255,0) 100%), ${Tf}`},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,V.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,V.jsxs)(`label`,{className:`flex w-full items-center gap-2`,children:[(0,V.jsx)(`span`,{className:`sr-only`,children:`Brightness`}),(0,V.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, ${xf({...e,v:1})})`}})]})]})}function Df({hex:e,onChange:t}){let[n,r]=(0,j.useState)(e);return(0,j.useEffect)(()=>r(e),[e]),(0,V.jsxs)(`div`,{className:`flex items-center gap-1.5 rounded-md border bg-background px-2`,children:[(0,V.jsx)(`span`,{className:`size-3.5 shrink-0 rounded-full border border-border/70`,style:{background:b(n)?n:e}}),(0,V.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=b(i.startsWith(`#`)?i:`#${i}`);a&&t(ee(yf(a))??e)}})]})}var Of=`modulepreload`,kf=function(e){return`/`+e},Af={},jf=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=kf(t,n),t=s(t),t in Af)return;Af[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`:Of,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)})},Mf=null,Nf=null;function Pf(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 Ff(e,t){let n=t.trim();if(e&&n!==``)return e.get(n)??e.get(ti(n))}function If(){return Nf??=jf(()=>import(`./lucide-all-iIF-pmzN.js`).then(e=>(Mf=Pf(e),Mf)),__vite__mapDeps([0,1])),Nf}function Lf(){let[e,t]=(0,j.useState)(Mf);return(0,j.useEffect)(()=>{if(e)return;let n=!0;return If().then(e=>{n&&t(e)}),()=>{n=!1}},[e]),e}function Rf({...e}){return(0,V.jsx)(me,{"data-slot":`popover`,...e})}function zf({...e}){return(0,V.jsx)(ge,{"data-slot":`popover-trigger`,...e})}function Bf({className:e,align:t=`center`,sideOffset:n=4,...r}){return(0,V.jsx)(pe,{children:(0,V.jsx)(We,{"data-slot":`popover-content`,align:t,sideOffset:n,className:B(`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})})}var Vf=80;function Hf({value:e,options:t,onChange:n}){let[r,i]=(0,j.useState)(!1),a=Ff(Lf(),e);return(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(`div`,{className:`grid h-8 w-8 place-items-center rounded-md border bg-background text-foreground shrink-0`,children:a?(0,V.jsx)(a,{size:16,strokeWidth:2}):(0,V.jsx)(`span`,{className:`text-xs`,children:`?`})}),(0,V.jsxs)(Rf,{open:r,onOpenChange:i,children:[(0,V.jsx)(zf,{asChild:!0,children:(0,V.jsx)(U,{variant:`outline`,size:`default`,className:`flex-1 justify-start font-normal`,children:e||(0,V.jsx)(`span`,{className:`text-muted-foreground`,children:`Pick an icon…`})})}),(0,V.jsx)(Bf,{align:`end`,className:`w-72 p-0`,children:(0,V.jsx)(Uf,{value:e,options:t,onPick:e=>{n(e),i(!1)}})})]})]})}function Uf({value:e,options:t,onPick:n}){let[r,i]=(0,j.useState)(``),a=(0,j.useRef)(null),o=Lf();(0,j.useEffect)(()=>{let e=requestAnimationFrame(()=>a.current?.focus());return()=>cancelAnimationFrame(e)},[]);let s=(0,j.useMemo)(()=>{let e=r.trim().toLowerCase();return e?t.filter(t=>t.toLowerCase().includes(e)).slice(0,Vf):t.slice(0,Vf)},[t,r]);return(0,V.jsxs)(V.Fragment,{children:[(0,V.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,V.jsx)(`div`,{className:`grid max-h-64 grid-cols-8 gap-1 overflow-auto scroll-stable p-2`,children:s.length===0?(0,V.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=Ff(o,t);return r?(0,V.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,V.jsx)(r,{size:14,strokeWidth:2})},t):null})}),r&&s.length===Vf?(0,V.jsxs)(`div`,{className:`border-t px-3 py-1 text-[10px] text-muted-foreground`,children:[`Showing first `,Vf,`. Refine your search to see more.`]}):null]})}function Wf({className:e,orientation:t=`horizontal`,...n}){return(0,V.jsx)(lt,{"data-slot":`tabs`,"data-orientation":t,className:B(`group/tabs flex gap-2 data-horizontal:flex-col`,e),...n})}var Gf=u(`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 Kf({className:e,variant:t=`default`,...n}){return(0,V.jsx)(Ke,{"data-slot":`tabs-list`,"data-variant":t,className:B(Gf({variant:t}),e),...n})}function qf({className:e,...t}){return(0,V.jsx)(Ne,{"data-slot":`tabs-trigger`,className:B(`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 Jf=u(`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`}}),Yf=j.createContext({size:`default`,variant:`default`,spacing:2,orientation:`horizontal`});function Xf({className:e,variant:t,size:n,spacing:r=2,orientation:i=`horizontal`,children:a,...o}){return(0,V.jsx)(at,{"data-slot":`toggle-group`,"data-variant":t,"data-size":n,"data-spacing":r,"data-orientation":i,style:{"--gap":r},className:B(`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,V.jsx)(Yf.Provider,{value:{variant:t,size:n,spacing:r,orientation:i},children:a})})}function Zf({className:e,children:t,variant:n=`default`,size:r=`default`,...i}){let a=j.useContext(Yf);return(0,V.jsx)(je,{"data-slot":`toggle-group-item`,"data-variant":a.variant||n,"data-size":a.size||r,"data-spacing":a.spacing,className:B(`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`,Jf({variant:a.variant||n,size:a.size||r}),e),...i,children:t})}var Qf=e=>e>0?{className:`shrink-0`,style:{width:e}}:{className:`min-w-0`};function $f({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,V.jsx)(`span`,{className:`truncate ${c?`text-foreground font-medium`:`text-muted-foreground`}`,children:e}),d=Qf(i);return(0,V.jsxs)(`div`,{className:`flex flex-col gap-1 ${d.className}`,style:d.style,children:[(0,V.jsxs)(`div`,{className:`flex h-3.5 items-center gap-1 px-0.5 text-[10px] leading-none`,children:[c?(0,V.jsx)(`span`,{className:`size-1.5 shrink-0 rounded-full bg-primary`}):null,a?(0,V.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:`@`}):null,l?(0,V.jsxs)(gf,{children:[(0,V.jsx)(_f,{asChild:!0,children:u}),(0,V.jsx)(vf,{side:`top`,children:l})]}):u,c&&o?(0,V.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,V.jsx)(Rn,{size:9})}):null]}),s]})}var ep=`h-7 w-full rounded-md border bg-background text-xs`,tp=`—`;function np({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,j.useState)(null),d=(0,j.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,V.jsxs)(`div`,{className:`${ep} flex items-center overflow-hidden focus-within:ring-1 focus-within:ring-ring`,children:[(0,V.jsx)(`input`,{type:`text`,inputMode:`decimal`,value:l??(e===null?``:String(e)),placeholder:t==null?tp: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,V.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 rp({value:e,ghost:t,muted:n=!1,choices:r,onChange:i,placeholder:a}){return(0,V.jsxs)(G,{value:e??``,onValueChange:i,children:[(0,V.jsx)(q,{className:`${ep} min-h-0 px-2 [&>span]:truncate ${n||e===null?`text-muted-foreground`:``}`,children:(0,V.jsx)(K,{placeholder:t?ip(r,t):a??tp})}),(0,V.jsx)(J,{children:r.map(e=>(0,V.jsx)(Y,{value:e.value,className:`text-xs`,children:e.label},e.value))})]})}function ip(e,t){return t?e.find(e=>e.value===t)?.label??t:tp}function ap({mode:e,px:t,measured:n,muted:r=!1,choices:i,onMode:a,onPx:o}){return(0,V.jsxs)(`div`,{className:`flex items-stretch gap-1`,children:[(0,V.jsx)(`div`,{className:`w-[70px] shrink-0`,children:(0,V.jsx)(rp,{value:e,muted:r,choices:i,onChange:a,placeholder:`Auto`})}),(0,V.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,V.jsx)(np,{value:e===`fixed`?t:null,ghost:e===`fixed`?null:n??null,onChange:o,min:0,max:4096})})]})}function op({value:e,ghost:t,muted:n=!1,choices:r,onChange:i}){let a=e??t??null,o=n||e===null;return(0,V.jsx)(Xf,{type:`single`,value:a??``,onValueChange:e=>e&&i(e),className:`${ep} items-stretch p-0.5`,children:r.map(e=>(0,V.jsx)(Zf,{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 sp=`#7c3aed`;function cp({value:e,ghost:t,muted:n=!1,choices:r,resolve:i,onChange:a}){let[o,s]=(0,j.useState)(!1),c=e??t??null,l=c?.startsWith(`[`)===!0,[u,d]=(0,j.useState)(`theme`),[f,p]=(0,j.useState)({h:265,s:.75,v:.9}),m=(0,j.useRef)(``);(0,j.useEffect)(()=>{if(!o)return;m.current=`color-${Date.now()}`,d(l?`custom`:`theme`);let e=Sf(i(c)??sp);e&&p(e)},[o,l,c,i]);let h=e=>{p(e),a(`[${xf(e)}]`,{gesture:m.current})};return(0,V.jsxs)(Rf,{open:o,onOpenChange:s,children:[(0,V.jsxs)(zf,{className:`${ep} flex items-center gap-1.5 px-1.5 hover:bg-accent/50 ${n||e===null?`text-muted-foreground`:``}`,children:[(0,V.jsx)(up,{css:i(c),unset:c===null}),(0,V.jsx)(`span`,{className:`truncate`,children:c?ip(r,c):tp})]}),(0,V.jsxs)(Bf,{align:`start`,className:`w-64 p-0`,children:[(0,V.jsx)(Wf,{value:u,onValueChange:e=>d(e),children:(0,V.jsxs)(Kf,{className:`w-full rounded-none border-b bg-transparent p-1.5`,children:[(0,V.jsx)(qf,{value:`theme`,className:`flex-1 text-xs capitalize`,children:`theme`}),(0,V.jsx)(qf,{value:`custom`,className:`flex-1 text-xs capitalize`,children:`custom`})]})}),u===`theme`?(0,V.jsxs)(`div`,{className:`max-h-64 overflow-y-auto p-1`,children:[r.length===0?(0,V.jsx)(dc,{className:`p-3`,children:(0,V.jsx)(gc,{className:`text-xs`,children:`This theme declares no colours.`})}):null,r.map(e=>{let t=e.swatch??i(e.value);return(0,V.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,V.jsx)(up,{css:t}),(0,V.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:e.label}),(0,V.jsx)(`span`,{className:`shrink-0 font-mono text-[10px] text-muted-foreground`,children:lp(t)})]},e.value)})]}):(0,V.jsxs)(`div`,{className:`flex flex-col gap-3 p-3`,children:[(0,V.jsx)(Ef,{value:f,onChange:h}),(0,V.jsx)(Df,{hex:xf(f),onChange:e=>{let t=Sf(e);t&&h(t)}})]})]})]})}function lp(e){return e?fu(e)?.hex.toUpperCase()??``:``}function up({css:e,unset:t=!1}){return(0,V.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 dp({value:e,options:t,onChange:n}){let[r,i]=(0,j.useState)(!1),a=Ff(Lf(),e);return(0,V.jsxs)(Rf,{open:r,onOpenChange:i,children:[(0,V.jsxs)(zf,{className:`${ep} flex items-center gap-1.5 px-1.5 hover:bg-accent/50 ${e?``:`text-muted-foreground`}`,children:[(0,V.jsx)(`span`,{className:`grid size-4 shrink-0 place-items-center`,children:a?(0,V.jsx)(a,{size:14,strokeWidth:2}):`—`}),(0,V.jsx)(`span`,{className:`truncate`,children:e?fp(e):`Pick an icon`})]}),(0,V.jsx)(Bf,{align:`start`,className:`w-72 p-0`,children:(0,V.jsx)(Uf,{value:e,options:t,onPick:e=>{n(e),i(!1)}})})]})}function fp(e){let t=e.replace(/([a-z0-9])([A-Z])/g,`$1 $2`);return t.charAt(0)+t.slice(1).toLowerCase()}function pp({value:e,onChange:t,placeholder:n}){let[r,i]=(0,j.useState)(null);return(0,V.jsx)(`input`,{type:`text`,value:r??e,placeholder:n,className:`${ep} px-2 outline-none focus:ring-1 focus:ring-ring`,onChange:e=>{i(e.target.value),t(e.target.value)},onBlur:()=>i(null)})}function mp({value:e,onChange:t}){return(0,V.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":e,className:`${ep} px-2 text-left ${e?``:`text-muted-foreground`}`,onClick:()=>t(!e),children:e?`On`:`Off`})}function hp({summary:e,onOpen:t}){return(0,V.jsx)(`button`,{type:`button`,className:`${ep} truncate px-2 text-left hover:bg-accent/50 ${e?``:`text-muted-foreground`}`,onClick:t,title:e??void 0,children:e??`Describe…`})}var gp=`__browse`,_p={heading:rr,text:jn,box:Xn,image:nn,icon:Hn,snippet:Ht,other:Ht};function vp(){let e=z(e=>e.selection),t=z(e=>e.cursorMode),n=z(e=>e.wsConnected),r=z(e=>e.screens),i=z(e=>e.theme),a=z(e=>e.styleChannel),o=z(e=>e.channelsByLibrary),s=z(e=>e.components),c=z(e=>e.design),l=z(e=>e.openSnippetEditor),u=z(e=>e.setBrowsingFaces),d=z(e=>e.setRightTab),f=z(e=>e.setRightPaneCollapsed),p=z(e=>e.setSnippetFocus),m=z(e=>e.snippetFocus),h=au(),g=iu(),[_,v]=(0,j.useState)(!1),y=(0,j.useMemo)(()=>Gs(r,e),[r,e]),b=e?r[e.screenId]?.tree:void 0,x=(0,j.useMemo)(()=>!y||!s||!ni(y)?null:s.find(e=>e.id===y.$ref)??null,[y,s]),S=(0,j.useMemo)(()=>!y||!ri(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,ee=w===null||w.kind===`tailwind-classname`,T=(0,j.useMemo)(()=>{if(!y)return null;let e=Zu({node:y,descriptor:x,snippet:S}),t=ee?e.controls:e.controls.filter(e=>e.slot.via!==`style`);return{...e,controls:Cu(t)}},[y,x,S,ee]),E=(0,j.useMemo)(()=>!y||!e?{values:{}}:Jd({theme:i,tree:b,path:R(e.path),node:y}),[i,b,e,y]),D=z(e=>e.selectionComputed),O=(0,j.useMemo)(()=>Su(D),[D]),k=(0,j.useMemo)(()=>Fu(i),[i]),te=(0,j.useCallback)(e=>Pu(i,e),[i]),ne=(0,j.useMemo)(()=>[...Iu(i),{value:gp,label:`Browse fonts…`}],[i]),re=ef({selection:e,node:y,liveClasses:y?Fd(y):``}),ie=(0,j.useCallback)((e,t,n)=>{if(t===gp){d(`node`),f(!1),u(!0);return}re(e,t,n)},[re,u,d,f]);if(t!==`select`)return null;if(m!==null&&(!e||!y||!T))return(0,V.jsx)(bp,{name:c?.snippets.find(e=>e.id===m)?.name??m,onDone:()=>p(null),children:(0,V.jsx)(`span`,{className:`self-center text-xs text-muted-foreground`,children:`Pick anything inside it — every instance changes together.`})});if(!e||!y||!T)return null;let ae=h[0]??null,oe=ri(y)?y.$snippet:null,se=_p[T.role],ce=Qu(y),le=ri(y)?S?.name??y.$snippet:ni(y)?y.$ref:`Param`,ue=ni(y)&&typeof y.props?.src==`string`?y.props.src:null,de=e.screenId.startsWith(`snippet:`);return(0,V.jsxs)(hf,{delayDuration:300,children:[(0,V.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,V.jsx)(yp,{name:c?.snippets.find(e=>e.id===m)?.name??m,onDone:()=>p(null)}),(0,V.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 ${T.role===`snippet`||de?`border-violet-400/70`:``} ${n?``:`pointer-events-none opacity-50`}`,"data-velloo-hud":!0,children:[(0,V.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1.5 self-center pr-1 pl-0.5`,children:[(0,V.jsx)(se,{size:14,className:T.role===`snippet`?`text-violet-500`:`text-muted-foreground`}),(0,V.jsx)(`span`,{className:`max-w-[140px] truncate text-xs font-medium`,children:le}),de?(0,V.jsx)(H,{className:`bg-violet-500/15 px-1 py-0 text-[10px] text-violet-600 dark:text-violet-300`,children:`in snippet`}):null,ce?(0,V.jsx)(H,{variant:`secondary`,className:`px-1 py-0 text-[10px]`,children:ce}):null]}),(0,V.jsx)(mf,{orientation:`vertical`,className:`shrink-0 self-stretch`}),oe===null?null:(0,V.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 self-center`,children:[(0,V.jsx)(U,{size:`sm`,variant:`outline`,className:`h-7 text-xs`,onClick:()=>l(oe),children:`Edit snippet`}),(0,V.jsx)(U,{size:`sm`,variant:m===oe?`default`:`ghost`,className:`h-7 text-xs`,onClick:()=>p(m===oe?null:oe),title:`Edit this snippet in place — every instance updates together`,children:m===oe?`Done`:`Edit in place`}),T.controls.length>0?(0,V.jsx)(mf,{orientation:`vertical`,className:`self-stretch`}):null]}),(0,V.jsxs)(`div`,{className:`flex min-w-0 items-start gap-2 overflow-x-auto`,children:[T.controls.map(e=>{let t=zd(e,{node:y,themeValues:E.values,themeSource:E.source,computed:O});return(0,V.jsx)($f,{label:e.label,origin:t.origin,themeValue:t.themeValue,source:t.source,width:e.width,note:E.notes?.[e.id],onReset:t.origin===`changed`?()=>ie(e,null):void 0,children:(0,V.jsx)(xp,{spec:e,value:t,colors:k,resolveColor:te,fonts:ne,iconNames:g,measured:e.slot.via===`style`&&e.slot.key===`height`?ae?.h??null:ae?.w??null,onOpenPrompt:()=>v(!0),onChange:(t,n)=>ie(e,t,n)})},e.id)}),T.controls.length===0?(0,V.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,V.jsx)(Ec,{open:_,onOpenChange:v,children:(0,V.jsxs)(kc,{className:`max-w-lg`,children:[(0,V.jsx)(Ac,{children:(0,V.jsx)(Mc,{children:`Image`})}),ue===null?null:(0,V.jsx)(pf,{screenId:e.screenId,path:e.path,src:ue})]})})]})}function yp({name:e,onDone:t}){return(0,V.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,V.jsx)(Ht,{size:12,className:`text-violet-500`}),(0,V.jsxs)(`span`,{children:[`Editing `,(0,V.jsx)(`span`,{className:`font-medium`,children:e}),` — every instance updates together`]}),(0,V.jsx)(U,{size:`sm`,variant:`ghost`,className:`h-6 rounded-full px-2 text-xs`,onClick:t,children:`Done`})]})}function bp({name:e,onDone:t,children:n}){return(0,V.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,V.jsx)(yp,{name:e,onDone:t}),(0,V.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 xp({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,V.jsx)(np,{value:u,ghost:d,muted:p,onChange:c,min:e.min,max:e.max,step:e.step??1});case`ratio`:return(0,V.jsx)(np,{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=Nd(l??void 0);return(0,V.jsx)(ap,{mode:t,px:Pd(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,V.jsx)(rp,{value:l,ghost:f,muted:p,choices:e.choices??[],onChange:c});case`align`:return(0,V.jsx)(op,{value:l,ghost:f,muted:p,choices:e.choices??[],onChange:c});case`color`:return(0,V.jsx)(cp,{value:l,ghost:f,muted:p,choices:n,resolve:r,onChange:c});case`font`:return(0,V.jsx)(rp,{value:l,ghost:f,muted:p,choices:i,onChange:c});case`icon`:return(0,V.jsx)(dp,{value:l??``,options:a,onChange:c});case`text`:return(0,V.jsx)(pp,{value:l??``,onChange:c});case`toggle`:return(0,V.jsx)(mp,{value:t.value===!0,onChange:c});case`prompt`:return(0,V.jsx)(hp,{summary:l,onOpen:s})}}var Sp=[{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}],Cp=7,wp=90;function Tp(){let e=au(),t=z(e=>e.selection),n=z(e=>e.screens),r=z(e=>e.canvasZoom),i=z(e=>e.cursorMode),a=z(e=>e.wsConnected),o=t?Gs(n,t):null,s=(0,j.useRef)(null),[c,l]=(0,j.useState)(null),u=(0,j.useRef)([]),d=Qd(wp,e=>{F.applyClasses({screenId:e.screenId,path:R(e.path),classes:e.classes,gesture:e.gesture}).catch(e=>L(e,`Could not resize`))}),f=(0,j.useRef)(()=>{});if(f.current=(e,n,r)=>{if(!t||!o)return;let i=Fd(o);e.sx!==0&&(i=Vd(i,`width`,`[${Math.round(n)}px]`)),e.sy!==0&&(i=Vd(i,`height`,`[${Math.round(r)}px]`)),d({screenId:t.screenId,path:t.path,classes:i,gesture:e.gesture},!0)},(0,j.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?jl:Al,h=1/r;return(0,V.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,V.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,V.jsxs)(`div`,{className:`absolute`,style:{left:e.x-e.clip.x,top:e.y-e.clip.y,width:t,height:n},children:[(0,V.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,V.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?Sp.map(i=>(0,V.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:Cp*h,height:Cp*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 Ep={x:0,y:20},Dp=60;function Op(e,t,n,r){let i=e.map((e,i)=>{let a=e.resolved===null?null:e.resolved.join(`.`),o=a===null?null:r?.[a]??null;if(o&&e.position===`auto`){let r={x:t.x+n.x+o.x,y:t.y+n.y+o.y,w:o.w,h:o.h};return{annotation:e,nodeRect:r,card:{x:t.x+t.w+24,y:Math.max(t.y,r.y+r.h/2-Dp/2)}}}return typeof e.position==`object`?{annotation:e,nodeRect:o?{x:t.x+n.x+o.x,y:t.y+n.y+o.y,w:o.w,h:o.h}:null,card:{x:e.position.x,y:e.position.y}}:{annotation:e,nodeRect:null,card:{x:t.x+t.w+24,y:t.y+24+i*76}}});i.sort((e,t)=>e.card.y-t.card.y);let a=-1/0;for(let e of i)e.card.y<a+8&&(e.card.y=a+8),a=e.card.y+Dp;return i}function kp(e){let t=e.filter(e=>e.nodeRect!==null);if(t.length===0)return null;let n=1/0,r=1/0,i=-1/0,a=-1/0;for(let e of t){let t=e.nodeRect.x+e.nodeRect.w,o=e.nodeRect.y+e.nodeRect.h/2,s=e.card.x,c=e.card.y+Dp/2;n=Math.min(n,t,s),r=Math.min(r,o,c),i=Math.max(i,t,s),a=Math.max(a,o,c)}n-=8,r-=8,i+=8,a+=8;let o=t.map(e=>{let t=e.nodeRect.x+e.nodeRect.w-n,i=e.nodeRect.y+e.nodeRect.h/2-r,a=e.card.x-n,o=e.card.y+Dp/2-r,s=(t+a)/2,c=`M ${t} ${i} Q ${s} ${i} ${s} ${(i+o)/2} T ${a} ${o}`;return{id:e.annotation.id,path:c,dot:{x:t,y:i}}});return{box:{x:n,y:r,w:Math.max(1,i-n),h:Math.max(1,a-r)},lines:o}}function Ap(e,t,n,r){let i=[],a=new Map;for(let n of e){let e=n.attachment?.frameId;if(!e||!t.some(t=>t.id===e)){i.push({note:n,card:{x:n.x??0,y:n.y??0}});continue}let r=a.get(e)??[];r.push(n),a.set(e,r)}let o=[];for(let[e,i]of a){let a=t.find(t=>t.id===e);a&&o.push({frameId:e,placed:Op(i.map(jp),a,r[e]??Ep,n[e])})}return{free:i,sections:o}}function jp(e){return{id:e.id,position:e.x!==void 0&&e.y!==void 0?{x:e.x,y:e.y}:`auto`,resolved:e.resolved??null,note:e}}function Mp(e){return e.attachment!==void 0&&e.resolved===null}function Np({body:e}){let t=Pp(e);return(0,V.jsx)(V.Fragment,{children:t.map((e,t)=>(0,V.jsx)(j.Fragment,{children:Fp(e,t)},t))})}function Pp(e){let t=[],n=e.split(`
26
+ `),r=[],i=()=>{let e=r.join(`
27
+ `).trim();e&&t.push({kind:`p`,text:e}),r=[]};for(let e of n)/^### /.test(e)?(i(),t.push({kind:`h3`,text:e.slice(4).trim()})):/^## /.test(e)?(i(),t.push({kind:`h2`,text:e.slice(3).trim()})):/^# /.test(e)?(i(),t.push({kind:`h1`,text:e.slice(2).trim()})):e.trim()===``?i():r.push(e);return i(),t}function Fp(e,t){let n=Ip(e.text);switch(e.kind){case`h1`:return(0,V.jsx)(`h1`,{className:`text-lg font-bold tracking-tight leading-tight`,children:n},t);case`h2`:return(0,V.jsx)(`h2`,{className:`text-base font-semibold tracking-tight leading-snug`,children:n},t);case`h3`:return(0,V.jsx)(`h3`,{className:`text-sm font-semibold uppercase tracking-wider leading-snug`,children:n},t);case`p`:return(0,V.jsx)(`p`,{className:`text-sm leading-snug`,children:n},t)}}function Ip(e){let t=e.split(`
28
+ `),n=[];for(let e=0;e<t.length;e++){let r=t[e]??``;n.push((0,V.jsx)(j.Fragment,{children:Lp(r)},`l${e}`)),e<t.length-1&&n.push((0,V.jsx)(`br`,{},`br${e}`))}return n}function Lp(e){let t=[],n=0,r=``,i=0,a=()=>{r&&=(t.push((0,V.jsx)(j.Fragment,{children:r},`t${i++}`)),``)};for(;n<e.length;){if(e[n]===`*`&&e[n+1]===`*`){let r=e.indexOf(`**`,n+2);if(r!==-1){a(),t.push((0,V.jsx)(`strong`,{className:`font-semibold`,children:e.slice(n+2,r)},`b${i++}`)),n=r+2;continue}}if(e[n]===`*`){let r=e.indexOf(`*`,n+1);if(r!==-1&&r>n+1){a(),t.push((0,V.jsx)(`em`,{className:`italic`,children:e.slice(n+1,r)},`i${i++}`)),n=r+1;continue}}r+=e[n],n++}return a(),t}function Rp(){let e=z(e=>e.notes),t=z(e=>e.markupVisible),n=z(e=>e.currentBoardId),r=z(e=>n?e.boards[n]:null),i=z(e=>e.nodeRects),a=z(e=>e.frameInsets);if(!t||e.length===0)return null;let{free:o,sections:s}=Ap(e,r?.frames??[],i,a);return(0,V.jsxs)(V.Fragment,{children:[o.map(({note:e,card:t})=>(0,V.jsx)(Bp,{note:e,pos:t},e.id)),s.map(({frameId:e,placed:t})=>(0,V.jsxs)(j.Fragment,{children:[(0,V.jsx)(zp,{placed:t}),t.map(e=>(0,V.jsx)(Bp,{note:e.annotation.note,pos:e.card},e.annotation.id))]},e))]})}function zp({placed:e}){let t=kp(e);if(!t)return null;let{box:n,lines:r}=t;return(0,V.jsxs)(`svg`,{className:`absolute pointer-events-none text-amber-500/70`,style:{left:n.x,top:n.y,width:n.w,height:n.h},width:n.w,height:n.h,"aria-hidden":`true`,children:[(0,V.jsx)(`title`,{children:`Note connectors`}),r.map(e=>(0,V.jsxs)(`g`,{children:[(0,V.jsx)(`path`,{d:e.path,fill:`none`,stroke:`currentColor`,strokeWidth:1,strokeDasharray:`3 3`}),(0,V.jsx)(`circle`,{cx:e.dot.x,cy:e.dot.y,r:3,fill:`currentColor`})]},e.id))]})}function Bp({note:e,pos:t}){let n=z(e=>e.editingMarkupId),r=z(e=>e.setEditingMarkupId),i=z(e=>e.currentBoardId),a=n===e.id,[o,s]=(0,j.useState)(e.body),c=(0,j.useRef)(!1),l=(0,j.useRef)(null),u=(0,j.useRef)(null),d=Mp(e);(0,j.useEffect)(()=>{s(e.body),c.current=!1},[e.body]);let f=async t=>{if(i)try{await Eo.update({boardId:i,noteId:e.id,patch:t})}catch(e){L(e,`Could not update note`)}},p=e=>{if(a||e.button!==0)return;e.stopPropagation(),e.currentTarget.setPointerCapture(e.pointerId);let n=z.getState().canvasZoom||1;u.current={ox:t.x,oy:t.y,sx:e.clientX/n,sy:e.clientY/n}},m=e=>{let t=u.current;if(!t)return;let n=z.getState().canvasZoom||1,r=e.clientX/n-t.sx,i=e.clientY/n-t.sy;e.currentTarget.style.left=`${t.ox+r}px`,e.currentTarget.style.top=`${t.oy+i}px`},h=async e=>{let t=u.current;if(!t)return;e.currentTarget.releasePointerCapture(e.pointerId),u.current=null;let n=z.getState().canvasZoom||1,r=e.clientX/n-t.sx,i=e.clientY/n-t.sy;Math.abs(r)<1&&Math.abs(i)<1||await f({x:t.ox+r,y:t.oy+i})},g=async()=>{if(i){z.getState().editingMarkupId===e.id&&r(null);try{await Eo.remove({boardId:i,noteId:e.id})}catch(e){L(e,`Could not remove note`)}}},_=async()=>{if(!c.current){if(c.current=!0,z.getState().editingMarkupId===e.id&&r(null),!o.trim()){await g();return}o!==e.body&&await f({body:o})}},v=()=>{c.current||(c.current=!0,s(e.body),r(null),e.body.trim()||g())};return(0,V.jsx)(`div`,{className:`absolute select-none rounded-md px-3 py-2 bg-amber-100 border shadow-sm group/note text-amber-950 dark:text-amber-950 `+(d?`border-dashed border-amber-400 opacity-70 `:`border-amber-300 `)+(a?`ring-2 ring-amber-500`:``),style:{left:t.x,top:t.y,width:e.width},"data-note-id":e.id,"data-note-attached":e.attachment?`true`:void 0,onPointerDown:p,onPointerMove:m,onPointerUp:h,onPointerCancel:h,onDoubleClick:t=>{t.stopPropagation(),c.current=!1,r(e.id)},onKeyDown:t=>{a||(t.key===`Delete`||t.key===`Backspace`?(t.preventDefault(),g()):t.key===`Enter`&&(c.current=!1,r(e.id)))},tabIndex:0,children:a?(0,V.jsx)(`textarea`,{autoFocus:!0,className:`w-full min-h-[3rem] bg-transparent text-sm leading-snug outline-none resize-none font-mono`,value:o,onChange:e=>s(e.target.value),onBlur:()=>{requestAnimationFrame(()=>{l.current&&document.activeElement===l.current||_()})},onKeyDown:e=>{e.key===`Escape`?(e.preventDefault(),e.stopPropagation(),v()):e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),_())},ref:e=>{l.current=e,e&&(e.style.height=`auto`,e.style.height=`${e.scrollHeight}px`)},style:{height:`auto`}}):(0,V.jsxs)(`div`,{className:`text-sm leading-snug`,children:[e.body?(0,V.jsx)(Np,{body:e.body}):(0,V.jsx)(`span`,{className:`opacity-50`,children:`(empty note — double-click to edit)`}),d?(0,V.jsx)(`div`,{className:`mt-1 text-[11px] uppercase tracking-wide opacity-60`,children:`target removed`}):null]})})}var Vp=`Local comments stay on this machine. Cloud comments live on the published board, where reviewers can see and answer them.`;function Hp({scope:e,onChange:t}){return(0,V.jsxs)(Xf,{type:`single`,size:`sm`,variant:`outline`,value:e,onValueChange:e=>e&&t(e),className:`w-full`,"aria-label":`Comment scope`,children:[(0,V.jsx)(Zf,{value:`all`,className:`text-[11px]`,children:`All`}),(0,V.jsxs)(Zf,{value:`local`,className:`text-[11px]`,children:[(0,V.jsx)(_n,{}),` Local`]}),(0,V.jsxs)(Zf,{value:`shared`,className:`text-[11px]`,children:[(0,V.jsx)(Bt,{}),` Cloud`]})]})}function Up({scope:e,onChange:t,cloud:n,className:r=``}){let i=z(e=>e.openSignIn),a=n===void 0,o=n?.available===!1?n.reason:null,s=o===`unpublished`,c=!!o&&!s;return(0,V.jsxs)(`div`,{className:`flex flex-col gap-1.5 ${r}`,"data-comment-target-picker":!0,children:[(0,V.jsxs)(Xf,{type:`single`,size:`sm`,variant:`outline`,spacing:0,value:e,onValueChange:e=>e&&t(e),className:`w-full`,"aria-label":`Comment target`,children:[(0,V.jsxs)(Zf,{value:`local`,className:`flex-1 text-xs`,title:Vp,children:[(0,V.jsx)(_n,{}),` Local`]}),(0,V.jsxs)(Zf,{value:`shared`,className:`flex-1 text-xs`,disabled:a||c,title:o&&!s?go(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,V.jsx)(Bt,{}),` Cloud`,s?(0,V.jsx)(nr,{className:`text-amber-600 dark:text-amber-500`,"data-needs-publish":!0}):null]})]}),e===`shared`&&s?(0,V.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`This board isn't published yet. Posting opens the publish flow first.`}):null,o&&ho(o)?(0,V.jsx)(U,{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 Wp=u(`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 Gp({variant:e=`default`,align:t=`start`,className:n,...r}){return(0,V.jsx)(`div`,{"data-slot":`bubble`,"data-variant":e,"data-align":t,className:B(Wp({variant:e}),n),...r})}function Kp({asChild:e=!1,className:t,...n}){let r=e?ze:`div`;return(0,V.jsx)(r,{"data-slot":`bubble-content`,className:B(`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})}u(`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 qp({className:e,...t}){return(0,V.jsx)(`div`,{"data-slot":`input-group`,role:`group`,className:B(`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 Jp=u(`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 Yp({className:e,align:t=`inline-start`,...n}){return(0,V.jsx)(`div`,{role:`group`,"data-slot":`input-group-addon`,"data-align":t,className:B(Jp({align:t}),e),onClick:e=>{e.target.closest(`button`)||e.currentTarget.parentElement?.querySelector(`input`)?.focus()},...n})}var Xp=u(`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 Zp({className:e,type:t=`button`,variant:n=`ghost`,size:r=`xs`,...i}){return(0,V.jsx)(U,{type:t,"data-size":r,variant:n,className:B(Xp({size:r}),e),...i})}function Qp({className:e,...t}){return(0,V.jsx)(Z,{"data-slot":`input-group-control`,className:B(`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 $p({className:e,...t}){return(0,V.jsx)(nf,{"data-slot":`input-group-control`,className:B(`flex-1 resize-none rounded-none border-0 bg-transparent py-2 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 em({className:e,...t}){return(0,V.jsx)(`div`,{"data-slot":`message-group`,className:B(`flex min-w-0 flex-col gap-2`,e),...t})}function tm({className:e,align:t=`start`,...n}){return(0,V.jsx)(`div`,{"data-slot":`message`,"data-align":t,className:B(`group/message relative flex w-full min-w-0 gap-2 text-sm data-[align=end]:flex-row-reverse`,e),...n})}function nm({className:e,...t}){return(0,V.jsx)(`div`,{"data-slot":`message-content`,className:B(`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 rm({className:e,...t}){return(0,V.jsx)(`div`,{"data-slot":`message-header`,className:B(`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 im({className:e,size:t=`default`,...n}){return(0,V.jsxs)(`div`,{className:B(`group/native-select relative w-fit has-[select:disabled]:opacity-50`,e),"data-slot":`native-select-wrapper`,"data-size":t,children:[(0,V.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,V.jsx)(Ft,{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 am({className:e,...t}){return(0,V.jsx)(`option`,{"data-slot":`native-select-option`,className:B(`bg-[Canvas] text-[CanvasText]`,e),...t})}function om(e){let t=Math.max(0,Math.round((Date.now()-new Date(e).getTime())/6e4));return t<1?`now`:t<60?`${t}m`:t<1440?`${Math.floor(t/60)}h`:`${Math.floor(t/1440)}d`}var sm={user:`You`,agent:`Agent`,reviewer:`Reviewer`};function cm(e){switch(e.author.kind){case`user`:return{align:`end`,variant:`default`,name:sm.user};case`agent`:return{align:`start`,variant:`muted`,name:sm.agent};case`reviewer`:return{align:`start`,variant:`outline`,badge:`Reviewer`}}}var lm=e=>e.author.kind!==`reviewer`,um=`Comment deleted`;function dm({messages:e,onDelete:t,voice:n=cm,canDelete:r=lm}){return(0,V.jsx)(em,{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}=n(e);return(0,V.jsx)(tm,{align:o,children:(0,V.jsxs)(nm,{className:`gap-1`,children:[(0,V.jsxs)(rm,{className:`gap-1.5 px-3`,children:[l??e.author.displayName??sm[e.author.kind],c?(0,V.jsx)(H,{variant:`outline`,className:`px-1 py-0 text-[9px] uppercase`,children:c}):null,(0,V.jsx)(`span`,{className:`ml-auto font-normal`,children:om(e.createdAt)}),a?(0,V.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,V.jsx)(tr,{size:11})}):null]}),i?(0,V.jsx)(Gp,{variant:`ghost`,children:(0,V.jsx)(Kp,{className:`text-xs italic text-muted-foreground`,children:um})}):(0,V.jsx)(Gp,{variant:s,children:(0,V.jsx)(Kp,{className:`whitespace-pre-wrap`,children:e.body})})]})},e.id)})})}function fm(e){return e.messages.find(e=>!e.deletedAt)?.body??um}function pm(e,t){return t.kind===`thread`?e.anchor?`The conversation and its pin go, for good.`:`The conversation goes, for good.`: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 mm(e){return e.anchor?e.anchor.kind===`node`?`Pinned comment`:`Board pin`:`Board-wide`}function hm({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,V.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,V.jsx)(Bt,{size:9}):(0,V.jsx)(_n,{size:9}):null,t]})}function gm(){return(0,V.jsx)(`span`,{"aria-hidden":!0,className:`text-border`,children:`•`})}function _m({thread:e,number:t,onOpen:n,onLocate:r,onDelete:i,showScope:a=!0}){let o=e.scope===`shared`,s=e.anchorState.status===`stale`,c=e.messages.length-1,l=+!!e.anchor+ +!!i;return(0,V.jsxs)(`li`,{className:`group/thread relative rounded-lg border bg-card shadow-sm transition-colors hover:bg-accent/40 ${s?`border-destructive/30`:`hover:border-primary/40`} ${e.status===`resolved`?`opacity-75`:``}`,"data-comment-row":e.id,children:[(0,V.jsxs)(`button`,{type:`button`,className:`flex w-full items-start gap-2 p-2.5 text-left ${l===2?`pr-14`:l===1?`pr-9`:``}`,onClick:n,children:[(0,V.jsx)(hm,{thread:e,number:t,showScope:a}),(0,V.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,V.jsx)(`span`,{className:`line-clamp-2 text-sm leading-snug ${e.status===`resolved`?`text-muted-foreground`:``}`,children:fm(e)}),(0,V.jsxs)(`span`,{className:`mt-1.5 flex flex-wrap items-center gap-x-1.5 gap-y-1 text-[11px] text-muted-foreground`,children:[a?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[o?(0,V.jsx)(Bt,{size:11}):(0,V.jsx)(_n,{size:11}),o?`Cloud`:`Local`]}),(0,V.jsx)(gm,{})]}):null,(0,V.jsx)(`span`,{children:mm(e)}),(0,V.jsx)(gm,{}),(0,V.jsx)(`span`,{children:om(e.updatedAt)}),c>0?(0,V.jsxs)(H,{variant:`secondary`,className:`h-4 gap-0.5 px-1.5 text-[10px] tabular-nums`,children:[(0,V.jsx)(Ln,{}),c]}):null,s?(0,V.jsx)(H,{variant:`destructive`,className:`h-4 px-1.5 text-[10px]`,children:`Target changed`}):null,e.status===`resolved`?(0,V.jsxs)(H,{variant:`outline`,className:`h-4 gap-0.5 px-1.5 text-[10px]`,children:[(0,V.jsx)(Pt,{}),`Resolved`]}):null]})]})]}),l>0?(0,V.jsxs)(`div`,{className:`absolute right-1.5 top-1.5 flex items-center gap-0.5 opacity-0 transition-opacity focus-within:opacity-100 group-hover/thread:opacity-100`,children:[e.anchor?(0,V.jsx)(U,{variant:`ghost`,size:`icon-xs`,"aria-label":`Go to comment ${t}`,title:`Go to comment on canvas`,onClick:r,children:(0,V.jsx)(Wt,{})}):null,i?(0,V.jsx)(U,{variant:`ghost`,size:`icon-xs`,className:`text-muted-foreground hover:text-destructive`,"aria-label":`Delete thread ${t}`,title:`Delete this thread`,onClick:i,children:(0,V.jsx)(tr,{})}):null]}):null]})}function vm({status:e,onStatusChange:t,count:n,onAdd:r,children:i}){return(0,V.jsxs)(`div`,{className:`space-y-2 border-b px-3 py-2`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsxs)(im,{"aria-label":`Comment status`,size:`sm`,className:`w-auto text-xs`,value:e,onChange:e=>t(e.target.value),children:[(0,V.jsx)(am,{value:`open`,children:`Open`}),(0,V.jsx)(am,{value:`resolved`,children:`Resolved`}),(0,V.jsx)(am,{value:`all`,children:`All`})]}),(0,V.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:n}),(0,V.jsxs)(U,{variant:`outline`,size:`sm`,className:`ml-auto`,title:`Pin a new comment on the canvas`,onClick:r,children:[(0,V.jsx)(Pn,{}),` Add`]})]}),i]})}function ym({status:e}){return(0,V.jsx)(dc,{className:`h-full`,children:(0,V.jsxs)(fc,{children:[(0,V.jsx)(mc,{variant:`icon`,children:(0,V.jsx)(_n,{})}),(0,V.jsxs)(hc,{children:[`No `,e===`all`?``:`${e} `,`comments on this board.`]}),(0,V.jsx)(gc,{children:`Add a pin on the canvas or start a broad thread below.`})]})})}function bm({children:e}){return(0,V.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 xm({draft:e,onDraftChange:t,onSubmit:n,failure:r,busy:i=!1,target:a,help:o,className:s=``}){return(0,V.jsxs)(`div`,{className:`border-t p-3 ${s}`,"data-board-comment-composer":!0,children:[(0,V.jsxs)(qp,{children:[(0,V.jsx)($p,{"aria-label":`Start board-wide thread`,value:e,onChange:e=>t(e.target.value),placeholder:`Start a broad thread about this board…`,className:`min-h-16 text-sm`,onKeyDown:tf(n)}),(0,V.jsxs)(Yp,{align:`block-end`,className:`flex-wrap`,children:[a,(0,V.jsx)(Zp,{variant:`default`,className:`ml-auto`,disabled:i||!e.trim(),onClick:n,children:i?`Posting…`:r?`Try again`:`Start thread`})]})]}),r?(0,V.jsx)(bm,{children:r}):null,(0,V.jsxs)(`p`,{className:`mt-1.5 text-[11px] text-muted-foreground`,children:[`Board-wide threads have no canvas pin.`,o?(0,V.jsxs)(V.Fragment,{children:[` `,o]}):null]})]})}function Sm({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,V.jsxs)(`div`,{className:`flex min-h-full flex-col p-3`,"data-active-comment":e.id,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,V.jsx)(U,{variant:`ghost`,size:`sm`,onClick:i,children:`← Threads`}),(0,V.jsxs)(`span`,{className:`ml-auto flex items-center gap-1 text-[11px] text-muted-foreground`,children:[t?(0,V.jsxs)(V.Fragment,{children:[e.scope===`shared`?(0,V.jsx)(Bt,{size:11}):(0,V.jsx)(_n,{size:11}),e.scope===`shared`?`Cloud`:`Local`]}):null,(0,V.jsx)(`span`,{children:e.anchorState.status===`stale`?`Target changed`:e.anchor?`Pinned`:`Board-wide`})]})]}),(0,V.jsx)(dm,{messages:e.messages,voice:n,canDelete:r,onDelete:t=>a({kind:`message`,threadId:e.id,id:t})}),m&&l?(0,V.jsxs)(qp,{className:`mt-3`,children:[(0,V.jsx)($p,{"aria-label":`Reply`,value:o,onChange:e=>s(e.target.value),placeholder:`Reply…`,className:`min-h-16 text-sm`,onKeyDown:tf(c)}),(0,V.jsx)(Yp,{align:`block-end`,children:(0,V.jsx)(Zp,{variant:`default`,className:`ml-auto`,disabled:d||!o.trim(),onClick:c,children:`Reply`})})]}):m?u:null,f||p?(0,V.jsxs)(`div`,{className:`mt-auto grid grid-cols-2 gap-2 pt-4`,children:[f?(0,V.jsx)(U,{variant:`outline`,size:`sm`,className:p?``:`col-span-2`,disabled:d,onClick:f,children:m?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(Pt,{}),` Resolve`]}):(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(Rn,{}),` Reopen`]})}):null,p]}):null]})}function Cm({thread:e,pending:t,onCancel:n,onConfirm:r}){return(0,V.jsx)(Kc,{open:e!==null&&t!==null,onOpenChange:e=>{e||n()},children:(0,V.jsxs)(Yc,{"data-comment-delete-confirm":!0,children:[(0,V.jsxs)(Xc,{children:[(0,V.jsx)(Qc,{className:`text-destructive`,children:(0,V.jsx)(tr,{})}),(0,V.jsx)($c,{children:t?.kind===`message`?`Delete comment`:`Delete thread`}),(0,V.jsx)(el,{children:e&&t?pm(e,t):``})]}),(0,V.jsxs)(Zc,{children:[(0,V.jsx)(nl,{children:`Cancel`}),(0,V.jsx)(tl,{variant:`destructive`,onClick:r,children:`Delete`})]})]})})}var wm=14;function Tm(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?ts(r,n[r.id]??{x:0,y:0},e.bounds):null}function Em({anchor:e,frames:t,insets:n,onCancel:r,onSubmit:i,target:a,blocked:o,onFrame:s}){let[c,l]=(0,j.useState)(``),[u,d]=(0,j.useState)(null),[f,p]=(0,j.useState)(!1),m=(0,j.useRef)(null),h=(0,j.useRef)(s);h.current=s,(0,j.useEffect)(()=>{l(``),d(null)},[e]);let g=Tm(e,t,n);if((0,j.useEffect)(()=>{let e=m.current;if(e&&g)return h.current?.(g,{w:e.offsetWidth,h:e.offsetHeight,gap:wm})},[e]),!g)return null;let _=()=>{c.trim()&&!f&&(d(null),p(!0),i(c).then(d).finally(()=>p(!1)))};return(0,V.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(${wm}px, ${wm}px)`,transformOrigin:`top left`},"data-inline-comment-composer":!0,onPointerDown:e=>e.stopPropagation(),children:[(0,V.jsxs)(`div`,{className:`mb-2 flex items-center gap-1.5 text-xs font-medium`,children:[(0,V.jsx)(hn,{size:13}),e.kind===`node`?`Pinned comment`:`Pinned board location`,(0,V.jsx)(`button`,{type:`button`,className:`ml-auto text-muted-foreground hover:text-foreground`,"aria-label":`Cancel comment`,onClick:r,children:(0,V.jsx)(sr,{size:13})})]}),o??(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(nf,{autoFocus:!0,"aria-label":`New pinned comment`,value:c,onChange:e=>l(e.target.value),placeholder:`What should change?`,className:`min-h-20 resize-none text-sm`,onKeyDown:e=>{if(e.key===`Escape`){e.preventDefault(),r();return}tf(_)(e)}}),u?(0,V.jsx)(bm,{children:u}):null,(0,V.jsxs)(`div`,{className:`mt-2 flex items-end gap-2`,children:[a?(0,V.jsx)(`div`,{className:`min-w-0 flex-1`,children:a}):null,(0,V.jsx)(U,{size:`sm`,className:`ml-auto`,disabled:f||!c.trim(),onClick:_,children:f?`Posting…`:u?`Try again`:`Add comment`})]})]})]})}function Dm(){let e=z(e=>e.pendingCommentAnchor),t=z(e=>e.currentBoardId?e.boards[e.currentBoardId]:void 0),n=z(e=>e.frameInsets),r=z(e=>e.cloudComments),i=z(e=>e.clearPendingComment),a=z(e=>e.createPendingComment),o=z(e=>e.zoomForCommentDraft),s=z(e=>e.restoreViewAfterMarkupEdit),[c,l]=(0,j.useState)(`local`);return!e||!t?null:(0,V.jsx)(Em,{anchor:e,frames:t.frames,insets:n,onCancel:i,onSubmit:e=>a(e,c),target:(0,V.jsx)(Up,{scope:c,onChange:l,cloud:r}),onFrame:(e,t)=>(o(e,t),s)})}function Om({board:e}){let t=z(e=>e.setCanvasZoom),n=z(e=>e.setPan),r=z(e=>e.cursorMode),[i,a]=(0,j.useState)(!1),o=(0,j.useRef)(null),s=(0,j.useRef)(null),c=(0,j.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]),l=(0,j.useMemo)(()=>{let t={};for(let n of e.frames)t[n.screen]=(t[n.screen]??0)+1;return t},[e.frames]),u=(0,j.useRef)(null);(0,j.useEffect)(()=>{let r=o.current;if(!r||u.current===e.id)return;let i=cs(e.id);if(i){t(i.zoom),n(i.pan),u.current=e.id;return}if(e.frames.length===0){u.current=e.id;return}let a=()=>{let i=Qo(e.frames,r.clientWidth,r.clientHeight);return i?(t(i.zoom),n(i.pan),u.current=e.id,!0):!1};if(a())return;let s=null,c=requestAnimationFrame(()=>{a()||(s=new ResizeObserver(()=>{a()&&s?.disconnect()}),s.observe(r))});return()=>{cancelAnimationFrame(c),s?.disconnect()}},[e.id,e.frames,t,n]),(0,j.useEffect)(()=>{let e=o.current;if(!e)return;let t=t=>{let n=z.getState();if(t.metaKey||t.ctrlKey){t.preventDefault();let r=e.getBoundingClientRect(),i=rs(t.clientX-r.left,t.clientY-r.top,Xo(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 d=(e,t)=>{let n=o.current;if(!n)return{x:0,y:0};let{canvasZoom:r,pan:i}=z.getState(),a=n.getBoundingClientRect();return{x:(e-a.left-i.x)/r,y:(t-a.top-i.y)/r}},f=t=>{if(t.button!==0)return;if(r===`hand`){t.preventDefault(),t.currentTarget.setPointerCapture(t.pointerId),s.current={startX:t.clientX,startY:t.clientY,startPan:{...z.getState().pan}},a(!0);return}let n=t.target===t.currentTarget||!!t.target.dataset?.vellooBoardWorld;if(r===`note`&&n){let e=d(t.clientX,t.clientY);t.preventDefault(),z.getState().createNote(e);return}if(r===`comment`&&n){let n=d(t.clientX,t.clientY);t.preventDefault(),z.getState().beginComment({kind:`board`,boardId:e.id,...n});return}n&&z.getState().setSelection(null)},p=e=>{let t=s.current;t&&n({x:t.startPan.x+(e.clientX-t.startX),y:t.startPan.y+(e.clientY-t.startY)})},m=e=>{if(s.current){try{e.currentTarget.releasePointerCapture(e.pointerId)}catch{}s.current=null,a(!1)}};return(0,j.useEffect)(()=>{let e=()=>{s.current=null,a(!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,j.useEffect)(()=>{r!==`hand`&&(s.current=null,a(!1))},[r]),(0,V.jsxs)(`div`,{ref:o,"data-velloo-board":`true`,className:`flex-1 overflow-hidden bg-muted/30 relative`,onPointerDown:f,onPointerMove:p,onPointerUp:m,onPointerCancel:m,style:{cursor:r===`hand`?i?`grabbing`:`grab`:r===`note`?`crosshair`:r===`comment`?`cell`:`default`},children:[(0,V.jsxs)(km,{boardId:e.id,restoredRef:u,w:c.w,h:c.h,children:[e.frames.map(t=>(0,V.jsx)(ru,{boardId:e.id,frame:t,frames:e.frames,presets:Am,sharedCount:l[t.screen]??1},t.id)),(0,V.jsx)(Rp,{}),(0,V.jsx)(Dm,{}),(0,V.jsx)(Uc,{}),(0,V.jsx)(Tp,{})]}),(0,V.jsx)(vp,{})]})}function km({boardId:e,restoredRef:t,w:n,h:r,children:i}){let a=z(e=>e.canvasZoom),o=z(e=>e.pan);return(0,j.useEffect)(()=>{if(t.current!==e)return;let n=setTimeout(()=>ls(e,{pan:o,zoom:a}),150);return()=>clearTimeout(n)},[e,o,a,t]),(0,V.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 Am=[{name:`Mobile`,w:390,h:844},{name:`Tablet`,w:768,h:1024},{name:`Desktop`,w:1440,h:900}];function jm({title:e,hint:t,icon:n,action:r,size:i=`page`}){let a=i===`panel`;return(0,V.jsxs)(dc,{className:a?`flex-1 p-6`:`flex-1 p-12`,children:[(0,V.jsxs)(fc,{children:[n?(0,V.jsx)(mc,{variant:`icon`,children:(0,V.jsx)(n,{})}):null,(0,V.jsx)(hc,{className:a?`text-xs`:`text-base`,children:e}),t?(0,V.jsx)(gc,{className:a?`text-xs`:void 0,children:t}):null]}),r?(0,V.jsx)(_c,{children:r}):null]})}function Mm(e,t){return P(`/api/preflight?${new URLSearchParams({kind:e,id:t})}`,`preflightExportTarget`).then(e=>e.failures)}function Nm(e){return P(`/api/preflight?${new URLSearchParams(e.length>0?{boards:e.join(`,`)}:{})}`,`preflightBoards`).then(e=>e.failures)}function Pm(e){return e.componentId===null?`${e.screenName}: ${e.reason}`:`${e.screenName} — ${e.componentId}: ${e.reason}`}function Fm({failures:e,verb:t,onCancel:n,onConfirm:r}){let i=e?.length??0,a=new Set(e?.map(e=>e.screenId)).size;return(0,V.jsx)(Kc,{open:e!==null,onOpenChange:e=>!e&&n(),children:(0,V.jsxs)(Yc,{children:[(0,V.jsxs)(Xc,{children:[(0,V.jsxs)($c,{children:[i===1?`A component`:`${i} components`,` failed to render`]}),(0,V.jsxs)(el,{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,V.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,V.jsx)(`li`,{className:`py-0.5`,children:Pm(e)},`${e.screenId}:${e.componentId}`))}),(0,V.jsxs)(Zc,{children:[(0,V.jsx)(nl,{children:`Cancel`}),(0,V.jsxs)(tl,{onClick:r,children:[t,` anyway`]})]})]})})}function Im(){let e=z(e=>e.exportTarget),t=z(e=>e.setExportTarget),[n,r]=(0,j.useState)(`png`),[i,a]=(0,j.useState)(`light`),[o,s]=(0,j.useState)(`1`),[c,l]=(0,j.useState)(!1),[u,d]=(0,j.useState)(null);(0,j.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 bo({kind:e.kind,id:e.id,format:n,mode:p,...n===`png`?{scale:Number(o)}:{}});for(let e of r)I({kind:`info`,message:e});t(null)}catch(e){L(e,`Export failed`),l(!1)}},h=async()=>{if(!e||c)return;l(!0);let t=await Mm(e.kind,e.id).catch(()=>[]);if(t.length>0){d(t);return}await m()};return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(Fm,{failures:u,verb:`Export`,onCancel:()=>{d(null),l(!1)},onConfirm:()=>{d(null),m()}}),(0,V.jsx)(Ec,{open:e!==null,onOpenChange:e=>!e&&t(null),children:(0,V.jsxs)(kc,{className:`sm:max-w-sm`,children:[(0,V.jsxs)(Ac,{children:[(0,V.jsxs)(Mc,{children:[`Export `,e?.kind===`board`?`board`:`frame`]}),(0,V.jsx)(Nc,{className:`truncate`,children:e?.name})]}),(0,V.jsxs)(`div`,{className:`grid gap-4`,children:[(0,V.jsxs)(`div`,{className:`grid gap-2`,children:[(0,V.jsx)(W,{htmlFor:`export-format`,children:`Format`}),(0,V.jsxs)(G,{value:n,onValueChange:e=>{r(e),e!==`png`&&i===`compare`&&a(`light`)},children:[(0,V.jsx)(q,{id:`export-format`,children:(0,V.jsx)(K,{})}),(0,V.jsxs)(J,{children:[(0,V.jsx)(Y,{value:`png`,children:`PNG image`}),(0,V.jsx)(Y,{value:`pdf`,children:e?.kind===`board`?`PDF deck (one frame per page)`:`PDF (single page)`}),(0,V.jsx)(Y,{value:`html`,children:`Standalone HTML (self-contained)`})]})]})]}),(0,V.jsxs)(`div`,{className:`grid gap-2`,children:[(0,V.jsx)(W,{htmlFor:`export-mode`,children:`Mode`}),(0,V.jsxs)(G,{value:p,onValueChange:e=>a(e),children:[(0,V.jsx)(q,{id:`export-mode`,children:(0,V.jsx)(K,{})}),(0,V.jsxs)(J,{children:[(0,V.jsx)(Y,{value:`light`,children:`Light`}),(0,V.jsx)(Y,{value:`dark`,children:`Dark`}),f?(0,V.jsx)(Y,{value:`compare`,children:`Compare (light | dark)`}):null]})]})]}),n===`png`?(0,V.jsxs)(`div`,{className:`grid gap-2`,children:[(0,V.jsx)(W,{htmlFor:`export-scale`,children:`Scale`}),(0,V.jsxs)(G,{value:o,onValueChange:e=>s(e),children:[(0,V.jsx)(q,{id:`export-scale`,children:(0,V.jsx)(K,{})}),(0,V.jsxs)(J,{children:[(0,V.jsx)(Y,{value:`1`,children:`1× (CSS pixels)`}),(0,V.jsx)(Y,{value:`2`,children:`2× (retina)`})]})]})]}):null]}),(0,V.jsxs)(jc,{children:[(0,V.jsx)(U,{variant:`outline`,onClick:()=>t(null),disabled:c,children:`Cancel`}),(0,V.jsxs)(U,{onClick:()=>void h(),disabled:c,children:[(0,V.jsx)(Gt,{}),c?`Exporting…`:`Export`]})]})]})})]})}var Lm=[{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 Rm(e){return Lm.find(t=>t.id===e)?.label??`Components`}function zm(e){return e.family===void 0||e.family===e.id}var Bm=`other`;function Vm(e){if(!e||e.length===0)return[];let t=new Map;for(let n of e){if(!zm(n))continue;let e=n.group??Bm;t.set(e,[...t.get(e)??[],n.id])}let n=[...Lm.map(e=>e.id),Bm];return[...t.entries()].sort(([e],[t])=>n.indexOf(e)-n.indexOf(t)).map(([e,t])=>({id:e,label:Rm(e===Bm?void 0:e),components:[...t].sort((e,t)=>e.localeCompare(t))}))}function Hm(e,t){let n=e?.find(e=>e.id===t);return n?Rm(n.group):null}function Um(e){return e.default===void 0?null:typeof e.default==`string`?`"${e.default}"`:typeof e.default==`number`||typeof e.default==`boolean`?String(e.default):`…`}function Wm({className:e,...t}){return(0,V.jsx)(`nav`,{"aria-label":`breadcrumb`,"data-slot":`breadcrumb`,className:B(e),...t})}function Gm({className:e,...t}){return(0,V.jsx)(`ol`,{"data-slot":`breadcrumb-list`,className:B(`flex flex-wrap items-center gap-1.5 text-sm wrap-break-word text-muted-foreground`,e),...t})}function Km({className:e,...t}){return(0,V.jsx)(`li`,{"data-slot":`breadcrumb-item`,className:B(`inline-flex items-center gap-1`,e),...t})}function qm({asChild:e,className:t,...n}){let r=e?ze:`a`;return(0,V.jsx)(r,{"data-slot":`breadcrumb-link`,className:B(`transition-colors hover:text-foreground`,t),...n})}function Jm({className:e,...t}){return(0,V.jsx)(`span`,{"data-slot":`breadcrumb-page`,role:`link`,"aria-disabled":`true`,"aria-current":`page`,className:B(`font-normal text-foreground`,e),...t})}function Ym({children:e,className:t,...n}){return(0,V.jsx)(`li`,{"data-slot":`breadcrumb-separator`,role:`presentation`,"aria-hidden":`true`,className:B(`[&>svg]:size-3.5`,t),...n,children:e??(0,V.jsx)(It,{className:`cn-rtl-flip`})})}function Xm({className:e,size:t=`default`,...n}){return(0,V.jsx)(`div`,{"data-slot":`card`,"data-size":t,className:B(`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 Zm({className:e,...t}){return(0,V.jsx)(`div`,{"data-slot":`card-footer`,className:B(`flex items-center rounded-b-xl border-t bg-muted/50 p-(--card-spacing)`,e),...t})}function Qm({className:e,...t}){return(0,V.jsx)(`div`,{"data-slot":`table-container`,className:`relative w-full overflow-x-auto`,children:(0,V.jsx)(`table`,{"data-slot":`table`,className:B(`w-full caption-bottom text-sm`,e),...t})})}function $m({className:e,...t}){return(0,V.jsx)(`thead`,{"data-slot":`table-header`,className:B(`[&_tr]:border-b`,e),...t})}function eh({className:e,...t}){return(0,V.jsx)(`tbody`,{"data-slot":`table-body`,className:B(`[&_tr:last-child]:border-0`,e),...t})}function th({className:e,...t}){return(0,V.jsx)(`tr`,{"data-slot":`table-row`,className:B(`border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted`,e),...t})}function nh({className:e,...t}){return(0,V.jsx)(`th`,{"data-slot":`table-head`,className:B(`h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0`,e),...t})}function rh({className:e,...t}){return(0,V.jsx)(`td`,{"data-slot":`table-cell`,className:B(`p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0`,e),...t})}function ih({item:e,snippets:t}){return e.kind===`snippet`?(0,V.jsx)(ch,{item:e,snippets:t}):(0,V.jsx)(ah,{item:e})}function ah({item:e}){let t=z(e=>e.components),n=z(e=>e.themeVersion),r=z(e=>e.designMode),i=z(e=>e.openLibrary),a=(0,j.useMemo)(()=>t?t.find(t=>t.id===e.id)??null:null,[t,e.id]),o=Hm(t,e.id)??`Components`,s=r===`dark`?`&mode=dark`:``,c=a?.props.find(e=>e.name===`variant`&&e.enumValues),l=a?.props.find(e=>e.name===`size`&&e.enumValues),u=c?.enumValues??[],d=l?.enumValues??[],f=(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}${s}`};return(0,V.jsx)(`div`,{className:`flex-1 overflow-auto bg-background`,children:(0,V.jsxs)(`div`,{className:`mx-auto w-full max-w-5xl flex flex-col`,children:[(0,V.jsxs)(`header`,{className:`sticky top-0 z-10 bg-background/85 backdrop-blur-sm border-b px-8 pt-4 pb-5`,children:[(0,V.jsx)(dh,{onClick:()=>i(null)}),(0,V.jsx)(`div`,{className:`mt-3`,children:(0,V.jsx)(uh,{category:o,name:e.id})}),(0,V.jsxs)(`div`,{className:`mt-2 flex items-baseline gap-2.5 flex-wrap`,children:[(0,V.jsx)(`h1`,{className:`text-3xl font-semibold tracking-tight`,children:e.id}),a?(0,V.jsx)(H,{variant:`outline`,className:`text-[10px] font-mono uppercase tracking-wider`,children:a.source}):null,a?.designModeNotes?(0,V.jsx)(`span`,{className:`text-xs text-muted-foreground italic`,children:a.designModeNotes}):null]})]}),(0,V.jsxs)(`section`,{className:`px-8 py-6 flex flex-col gap-3`,children:[(0,V.jsx)(`div`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground font-medium`,children:`Preview`}),(0,V.jsx)(Xm,{className:`py-0`,children:(0,V.jsx)(`iframe`,{src:f(void 0,{w:720,h:220}),title:`${e.id} preview`,loading:`lazy`,className:`block w-full h-[220px] border-0`})})]}),u.length>0||d.length>0?(0,V.jsxs)(`section`,{className:`px-8 pb-6 flex flex-col gap-3`,children:[(0,V.jsxs)(`div`,{className:`flex items-baseline gap-2`,children:[(0,V.jsx)(`div`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground font-medium`,children:`Variants`}),(0,V.jsxs)(`div`,{className:`text-xs text-muted-foreground`,children:[u.length||1,` × `,d.length||1,` =`,` `,(u.length||1)*(d.length||1),` combinations`]})]}),(0,V.jsx)(oh,{componentId:e.id,variants:u,sizes:d,renderUrl:f})]}):null,a&&a.props.length>0?(0,V.jsxs)(`section`,{className:`px-8 pb-10 flex flex-col gap-3`,children:[(0,V.jsx)(`div`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground font-medium`,children:`Props`}),(0,V.jsx)(sh,{props:a.props})]}):null]})})}function oh({componentId:e,variants:t,sizes:n,renderUrl:r}){let i=t.length>0?t:[null],a=n.length>0?n:[null];return(0,V.jsx)(Xm,{className:`py-0`,children:(0,V.jsxs)(Qm,{children:[(0,V.jsx)($m,{className:`bg-muted/30`,children:(0,V.jsxs)(th,{children:[(0,V.jsx)(nh,{className:`w-32 text-[10px] uppercase tracking-wider`,children:t.length>0?`variant`:``}),a.map((e,t)=>(0,V.jsx)(nh,{className:`text-center text-[10px] uppercase tracking-wider`,children:e??`preview`},e??`col-${t}`))]})}),(0,V.jsx)(eh,{children:i.map((t,n)=>(0,V.jsxs)(th,{children:[(0,V.jsx)(rh,{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,V.jsx)(rh,{className:`p-3`,children:(0,V.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 sh({props:e}){return(0,V.jsx)(Xm,{className:`py-0`,children:(0,V.jsxs)(Qm,{children:[(0,V.jsx)($m,{className:`sr-only`,children:(0,V.jsxs)(th,{children:[(0,V.jsx)(nh,{children:`Prop`}),(0,V.jsx)(nh,{children:`Accepts`})]})}),(0,V.jsx)(eh,{children:e.map(e=>(0,V.jsxs)(th,{children:[(0,V.jsxs)(rh,{className:`w-32 py-3 align-top`,children:[(0,V.jsx)(`div`,{className:`font-mono text-xs font-medium`,children:e.name}),e.optional?(0,V.jsx)(`div`,{className:`mt-0.5 text-[10px] text-muted-foreground`,children:`optional`}):null]}),(0,V.jsxs)(rh,{className:`flex flex-row flex-wrap items-center gap-1 py-3`,children:[e.enumValues&&e.enumValues.length>0?e.enumValues.map(e=>(0,V.jsx)(H,{variant:`outline`,className:`font-mono text-[10px]`,children:String(e)},String(e))):(0,V.jsx)(H,{variant:`outline`,className:`font-mono text-[10px] text-muted-foreground`,children:e.control}),e.defaultValue?(0,V.jsxs)(`span`,{className:`ml-2 text-xs text-muted-foreground`,children:[`default: `,(0,V.jsx)(`span`,{className:`font-mono`,children:e.defaultValue})]}):null]})]},e.name))})]})})}function ch({item:e,snippets:t}){let n=z(e=>e.themeVersion),r=z(e=>e.designMode),i=z(e=>e.openLibrary),a=z(e=>e.openSnippetEditor),o=t.find(t=>t.id===e.id)??null,s=r===`dark`?`&mode=dark`:``;return(0,V.jsx)(`div`,{className:`flex-1 overflow-auto bg-background`,children:(0,V.jsxs)(`div`,{className:`mx-auto w-full max-w-5xl flex flex-col`,children:[(0,V.jsxs)(`header`,{className:`sticky top-0 z-10 bg-background/85 backdrop-blur-sm border-b px-8 pt-4 pb-5`,children:[(0,V.jsx)(dh,{onClick:()=>i(null)}),(0,V.jsx)(`div`,{className:`mt-3`,children:(0,V.jsx)(uh,{category:`Snippets`,name:o?.name??e.id})}),(0,V.jsxs)(`div`,{className:`mt-2 flex items-baseline gap-2.5 flex-wrap`,children:[(0,V.jsx)(`h1`,{className:`text-3xl font-semibold tracking-tight`,children:o?.name??e.id}),(0,V.jsx)(H,{variant:`outline`,className:`text-[10px] font-mono uppercase tracking-wider border-primary/40 text-primary`,children:`snippet`}),o?.unused?(0,V.jsx)(H,{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,V.jsx)(`div`,{className:`ml-auto`,children:(0,V.jsxs)(U,{size:`sm`,onClick:()=>a(e.id),children:[(0,V.jsx)(An,{}),`Open in canvas`]})})]}),o?(0,V.jsxs)(`div`,{className:`mt-1.5 flex flex-wrap items-center gap-x-2 gap-y-1 text-sm text-muted-foreground`,children:[(0,V.jsxs)(`span`,{children:[o.params.length,` parameter`,o.params.length===1?``:`s`]}),o.params.map(e=>(0,V.jsx)(lh,{param:e},e.name))]}):null]}),(0,V.jsxs)(`section`,{className:`px-8 py-6 flex flex-col gap-3`,children:[(0,V.jsx)(`div`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground font-medium`,children:`Preview`}),(0,V.jsx)(Xm,{className:`py-0`,children:(0,V.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,V.jsxs)(`section`,{className:`px-8 pb-10 flex flex-col gap-3`,children:[(0,V.jsx)(`div`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground font-medium`,children:`Parameters`}),(0,V.jsx)(Xm,{className:`py-0`,children:(0,V.jsxs)(Qm,{children:[(0,V.jsx)($m,{className:`sr-only`,children:(0,V.jsxs)(th,{children:[(0,V.jsx)(nh,{children:`Parameter`}),(0,V.jsx)(nh,{children:`Type`})]})}),(0,V.jsx)(eh,{children:o.params.map(e=>(0,V.jsxs)(th,{children:[(0,V.jsxs)(rh,{className:`w-32 py-3 font-mono text-xs font-medium`,children:[`$`,e.name]}),(0,V.jsxs)(rh,{className:`flex flex-row flex-wrap items-center gap-1 py-3`,children:[(0,V.jsx)(H,{variant:`outline`,className:`font-mono text-[10px]`,children:e.type}),Um(e)===null?(0,V.jsx)(`span`,{className:`ml-2 text-xs text-amber-600 dark:text-amber-400`,children:`required`}):(0,V.jsxs)(`span`,{className:`ml-2 text-xs text-muted-foreground`,children:[`default: `,(0,V.jsx)(`span`,{className:`font-mono`,children:Um(e)})]})]})]},e.name))})]})})]}):null]})})}function lh({param:e}){let t=Um(e);return(0,V.jsxs)(H,{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,V.jsxs)(`span`,{className:`opacity-70`,children:[` = `,t]})]})}function uh({category:e,name:t}){return(0,V.jsx)(Wm,{children:(0,V.jsxs)(Gm,{className:`text-xs`,children:[(0,V.jsxs)(Km,{children:[(0,V.jsx)(sn,{size:12,strokeWidth:2}),(0,V.jsx)(qm,{href:`#`,children:`Library`})]}),(0,V.jsx)(Ym,{}),(0,V.jsx)(Km,{children:(0,V.jsx)(`span`,{children:e})}),(0,V.jsx)(Ym,{}),(0,V.jsx)(Km,{children:(0,V.jsx)(Jm,{children:t})})]})})}function dh({onClick:e}){return(0,V.jsxs)(U,{variant:`ghost`,size:`sm`,onClick:e,className:`-ml-2 text-muted-foreground`,children:[(0,V.jsx)(At,{}),`Library`]})}function fh({className:e,...t}){return(0,V.jsx)(`div`,{"data-slot":`skeleton`,className:B(`animate-pulse rounded-md bg-muted`,e),...t})}var ph=`\0all`,mh={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 hh(e){return mh[e]??120}function gh({snippets:e}){let t=z(e=>e.components),n=z(e=>e.components===null&&e.componentsLoading),r=z(e=>e.openLibrary),i=z(e=>e.themeVersion),a=z(e=>e.designMode),[o,s]=(0,j.useState)(``),[c,l]=(0,j.useState)(null),u=(0,j.useMemo)(()=>Vm(t),[t]),d=(0,j.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:hh(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,V.jsx)(`div`,{className:`flex-1 overflow-auto scroll-stable bg-background`,children:(0,V.jsxs)(`div`,{className:`mx-auto w-full max-w-6xl flex flex-col`,children:[(0,V.jsxs)(`header`,{className:`px-8 pt-10 pb-5`,children:[(0,V.jsxs)(`div`,{className:`flex items-baseline gap-3`,children:[(0,V.jsx)(`h1`,{className:`text-3xl font-semibold tracking-tight`,children:`Library`}),(0,V.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[n?`loading components`:`${f} components`,` ·`,` `,p,` snippets`]})]}),(0,V.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,V.jsxs)(`div`,{className:`sticky top-0 z-20 bg-background/85 backdrop-blur-sm px-8 pt-3 pb-3`,children:[(0,V.jsx)(`div`,{className:`flex items-center gap-3 mb-3`,children:(0,V.jsxs)(qp,{className:`h-9 flex-1 max-w-md`,children:[(0,V.jsx)(Yp,{children:(0,V.jsx)(Bn,{size:14,strokeWidth:2})}),(0,V.jsx)(Qp,{type:`text`,value:o,onChange:e=>s(e.target.value),placeholder:`Search components and snippets…`})]})}),(0,V.jsxs)(Xf,{type:`single`,value:c??ph,onValueChange:e=>{e&&l(e===ph?null:e)},"aria-label":`Component shelf`,className:`flex-wrap items-center justify-start gap-2`,children:[(0,V.jsx)(vh,{value:ph,label:`All ${d.length}`}),u.map(e=>{let t=d.filter(t=>t.category===e.label).length;return t===0?null:(0,V.jsx)(vh,{value:e.label,label:`${e.label} ${t}`},e.id)}),p>0?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(mf,{orientation:`vertical`,className:`mx-1 h-5`}),(0,V.jsx)(vh,{value:`Snippets`,label:`Snippets ${p}`,accent:!0})]}):null]})]}),(0,V.jsxs)(`div`,{className:`px-8 pb-12 mt-5 flex flex-col gap-4`,children:[g.length>0?(0,V.jsx)(`div`,{className:`flex items-start gap-4`,children:_.map((e,t)=>{let n=`col-${t}`;return(0,V.jsx)(`div`,{className:`flex-1 flex flex-col gap-4 min-w-0`,children:e.map(e=>(0,V.jsx)(yh,{tile:e,previewMode:y,themeVersion:i,onClick:()=>r(e.ref)},`${e.ref.kind}:${e.ref.id}`))},n)})}):null,n?(0,V.jsx)(_h,{}):g.length===0?(0,V.jsx)(dc,{className:`py-16`,children:(0,V.jsxs)(fc,{children:[(0,V.jsx)(mc,{variant:`icon`,children:(0,V.jsx)(zn,{})}),(0,V.jsxs)(hc,{children:[`No matches for "`,o,`".`]}),(0,V.jsx)(gc,{children:`Try a shorter word, or clear the shelf filter above.`})]})}):null]})]})})}function _h(){return(0,V.jsx)(`div`,{className:`flex items-start gap-4`,"aria-hidden":`true`,children:[`left`,`middle`,`right`].map(e=>(0,V.jsxs)(`div`,{className:`flex-1 flex flex-col gap-4 min-w-0`,children:[(0,V.jsx)(fh,{className:`h-[160px] w-full`}),(0,V.jsx)(fh,{className:`h-[110px] w-full`}),(0,V.jsx)(fh,{className:`h-[140px] w-full`})]},e))})}function vh({value:e,label:t,accent:n}){return(0,V.jsx)(Zf,{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 yh({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,V.jsx)(Xm,{className:`gap-0 py-0 transition-shadow `+(i?`ring-primary/25 hover:ring-primary/60`:`hover:ring-primary/40`),children:(0,V.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,V.jsxs)(`div`,{className:`relative w-full overflow-hidden bg-background`,style:{height:e.previewHeight},children:[(0,V.jsx)(fh,{className:`absolute inset-0 rounded-none`}),(0,V.jsx)(`iframe`,{src:a,title:`${e.label} preview`,loading:`lazy`,className:`absolute inset-0 w-full h-full pointer-events-none border-0`})]}),(0,V.jsxs)(Zm,{className:`flex items-center justify-between gap-2 border-t px-3 py-2`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[(0,V.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full shrink-0 `+(i?`bg-primary`:`bg-muted-foreground`)}),(0,V.jsx)(`span`,{className:`text-xs font-medium truncate`,children:e.label})]}),(0,V.jsx)(H,{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 bh=240,xh=4096,Sh=[{name:`Mobile`,w:390,h:844},{name:`Tablet`,w:768,h:1024},{name:`Desktop`,w:1440,h:900}];function Ch(e){return Math.max(bh,Math.min(xh,Math.round(e)))}function wh(){let e=z(e=>e.previewTarget),t=z(e=>e.setPreviewTarget),n=z(e=>e.designMode),r=z(e=>e.themeVersion),i=z(t=>e?t.screenVersions[e.screenId]??0:0),a=z(e=>{let t=e.design?.viewportPresets;return t&&t.length>0?t:Sh}),[o,s]=(0,j.useState)(1200),[c,l]=(0,j.useState)(null),[u,d]=(0,j.useState)(900),f=(0,j.useRef)(null);(0,j.useEffect)(()=>{e&&(s(Ch(e.w)),l(null))},[e]),(0,j.useEffect)(()=>{if(!e)return;let t=f.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 p=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 Ch(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 m=c??o,h=Gc({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,V.jsx)(Ec,{open:!0,onOpenChange:e=>!e&&t(null),children:(0,V.jsxs)(kc,{className:`max-w-none sm:max-w-none w-[96vw] h-[94vh] flex flex-col gap-3 p-4 bg-card`,children:[(0,V.jsxs)(Ac,{className:`flex-row items-center gap-3 space-y-0 pr-10`,children:[(0,V.jsx)(Mc,{className:`text-sm truncate`,children:e.name}),(0,V.jsx)(Nc,{className:`sr-only`,children:`Full-screen preview with adjustable width`}),(0,V.jsxs)(`div`,{className:`ml-auto flex items-center gap-1.5`,children:[a.map(e=>(0,V.jsxs)(U,{variant:o===e.w&&c===null?`secondary`:`ghost`,size:`sm`,className:`h-6 px-2 text-xs`,onClick:()=>{l(null),s(Ch(e.w))},children:[e.name,` `,(0,V.jsx)(`span`,{className:`text-muted-foreground tabular-nums`,children:e.w})]},e.name)),(0,V.jsx)(Th,{value:m,onCommit:e=>s(Ch(e))})]})]}),(0,V.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto rounded-lg border bg-muted px-4 py-5`,children:(0,V.jsxs)(`div`,{ref:f,className:`relative mx-auto h-full group/preview`,style:{width:m,minWidth:m},children:[(0,V.jsx)(`iframe`,{title:`Preview: ${e.name}`,src:h,className:`h-full w-full border rounded-md bg-white`,style:{pointerEvents:c===null?`auto`:`none`}}),(0,V.jsx)(`div`,{onPointerDown:p(`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,V.jsx)(`div`,{onPointerDown:p(`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 Th({value:e,onCommit:t}){let[n,r]=(0,j.useState)(String(e));return(0,j.useEffect)(()=>{r(String(e))},[e]),(0,V.jsxs)(`span`,{className:`flex items-center gap-1 text-xs text-muted-foreground tabular-nums`,children:[(0,V.jsx)(`input`,{type:`number`,value:n,min:bh,max:xh,"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`]})}var Eh=u(`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 Dh({className:e,variant:t,...n}){return(0,V.jsx)(`div`,{"data-slot":`alert`,role:`alert`,className:B(Eh({variant:t}),e),...n})}function Oh({className:e,...t}){return(0,V.jsx)(`div`,{"data-slot":`alert-title`,className:B(`font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground`,e),...t})}function kh({className:e,...t}){return(0,V.jsx)(`div`,{"data-slot":`alert-description`,className:B(`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 Ah({className:e,...t}){return(0,V.jsx)(`div`,{"data-slot":`alert-action`,className:B(`absolute top-2 right-2`,e),...t})}function jh({className:e,...t}){return(0,V.jsx)(fe,{"data-slot":`checkbox`,className:B(`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,V.jsx)(nt,{"data-slot":`checkbox-indicator`,className:`grid place-content-center text-current transition-none [&>svg]:size-3.5`,children:(0,V.jsx)(Pt,{})})})}function Mh(e){let{boards:t,boardIds:n}=e;return(0,V.jsxs)(`div`,{className:`grid gap-4`,children:[(0,V.jsxs)(`div`,{className:`grid gap-2`,children:[(0,V.jsx)(W,{htmlFor:`publish-title`,children:`Title`}),(0,V.jsx)(Z,{id:`publish-title`,value:e.title,onChange:t=>e.onTitleChange(t.target.value),placeholder:`Board title`})]}),t.length>0?(0,V.jsxs)(`div`,{className:`grid gap-2`,children:[(0,V.jsx)(W,{children:`Boards`}),(0,V.jsx)(`div`,{className:`max-h-40 overflow-y-auto rounded-md border`,children:t.map(t=>(0,V.jsxs)(`div`,{className:`flex items-center gap-2 px-2.5 py-1.5 text-sm hover:bg-accent/50`,children:[(0,V.jsx)(jh,{id:`publish-board-${t.id}`,checked:n.includes(t.id),onCheckedChange:n=>e.onToggleBoard(t.id,n===!0)}),(0,V.jsx)(W,{htmlFor:`publish-board-${t.id}`,className:`flex-1 cursor-pointer truncate font-normal`,children:t.name}),(0,V.jsxs)(`span`,{className:`shrink-0 text-[11px] text-muted-foreground`,children:[t.frameCount,` frame`,t.frameCount===1?``:`s`]})]},t.id))})]}):(0,V.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`This folder has no boards, so every screen is published.`}),(0,V.jsxs)(`div`,{className:`grid gap-2`,children:[(0,V.jsx)(W,{htmlFor:`publish-destination`,children:`Destination`}),(0,V.jsxs)(G,{value:e.destinationSlug,onValueChange:e.onDestinationChange,disabled:!!e.destinationError,children:[(0,V.jsx)(q,{id:`publish-destination`,children:(0,V.jsx)(K,{})}),(0,V.jsxs)(J,{children:[e.matchingSlots.map(e=>(0,V.jsxs)(Y,{value:e.slug,children:[`Update `,e.title||`Untitled design`]},e.slug)),(0,V.jsx)(Y,{value:`new`,children:`Create a new link`})]})]}),e.destinationError?(0,V.jsx)(`p`,{className:`text-xs text-destructive`,children:e.destinationError}):e.selectedSlot?(0,V.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Matches this team, board selection, and source.`}):(0,V.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Creates a separate live URL and keeps existing review links unchanged.`})]}),e.protectedShares?(0,V.jsx)(Nh,{...e}):(0,V.jsx)(Ph,{upgradeUrl:e.upgradeUrl}),e.teams.length>1&&e.teamId?(0,V.jsxs)(`div`,{className:`grid gap-2`,children:[(0,V.jsx)(W,{htmlFor:`publish-team`,children:`Team`}),(0,V.jsxs)(G,{value:e.teamId,onValueChange:e.onTeamChange,children:[(0,V.jsx)(q,{id:`publish-team`,children:(0,V.jsx)(K,{})}),(0,V.jsx)(J,{children:e.teams.map(e=>(0,V.jsx)(Y,{value:e.id,children:e.name},e.id))})]})]}):null]})}function Nh({visibility:e,onVisibilityChange:t,passwordRequired:n,password:r,onPasswordChange:i}){let[a,o]=(0,j.useState)(!1);return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:`grid gap-2`,children:[(0,V.jsx)(W,{htmlFor:`publish-visibility`,children:`Visibility`}),(0,V.jsxs)(G,{value:e,onValueChange:e=>t(e===`private`?`private`:`public`),children:[(0,V.jsx)(q,{id:`publish-visibility`,children:(0,V.jsx)(K,{})}),(0,V.jsxs)(J,{children:[(0,V.jsx)(Y,{value:`public`,children:`Anyone with the link`}),(0,V.jsx)(Y,{value:`private`,children:`Only your organization`})]})]})]}),(0,V.jsxs)(`div`,{className:`grid gap-2`,children:[(0,V.jsxs)(W,{htmlFor:`publish-password`,children:[`Password`,n?``:` (optional)`]}),(0,V.jsxs)(`div`,{className:`relative`,children:[(0,V.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,V.jsx)(U,{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,V.jsx)(Jt,{}):(0,V.jsx)(Yt,{})})]}),(0,V.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 Ph({upgradeUrl:e}){return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:`grid gap-2`,children:[(0,V.jsx)(W,{htmlFor:`publish-visibility`,children:`Visibility`}),(0,V.jsx)(Z,{id:`publish-visibility`,readOnly:!0,value:`Anyone with the link`,className:`bg-muted/40 text-muted-foreground`})]}),(0,V.jsxs)(Dh,{role:`note`,"data-testid":`protected-shares-upsell`,children:[(0,V.jsx)(fn,{}),(0,V.jsx)(Oh,{children:`Private and password-protected links`}),(0,V.jsx)(kh,{className:`text-xs`,children:`Share only with your organization, or behind a password. Free accounts publish public links — upgrade to Team or Business to unlock both.`}),(0,V.jsx)(Ah,{children:(0,V.jsx)(U,{size:`xs`,variant:`secondary`,asChild:!0,children:(0,V.jsx)(`a`,{href:e,target:`_blank`,rel:`noreferrer`,children:`Upgrade`})})})]})]})}var Fh=9e5,Ih=`velloo:update-toasted`,Lh=new Set;function Rh(){for(let e of Lh)e()}function zh(e){return Lh.add(e),()=>Lh.delete(e)}var Bh={status:null,upgrading:!1};function Vh(e){Bh={...Bh,...e},Rh()}function Hh(){return(0,j.useSyncExternalStore)(zh,()=>Bh)}async function Uh(e={}){try{Vh({status:await No(e)})}catch{}}function Wh(e){if(!e)return``;let t=/^(\S+)\s*\((?:.*·\s*)?(.+)\)$/.exec(e);return t?`${t[1]} · ${t[2]}`:e}function Gh(e){if(e.available&&e.latest&&e.upgradable){try{if(localStorage.getItem(Ih)===e.latest)return;localStorage.setItem(Ih,e.latest)}catch{}I({kind:`info`,title:`Velloo ${Wh(e.latest)} is available`,message:`You're on ${Wh(e.current)}.`,ttl:1e4,action:{label:`Upgrade`,onClick:()=>void Jh()}})}}var Kh=!1;function qh(){if(Kh)return;Kh=!0;let e=async e=>{await Uh(e?{refresh:!0}:{}),Bh.status&&Gh(Bh.status)};(async()=>{await e(!1),await e(!0)})(),setInterval(()=>void e(!0),Fh)}async function Jh(){if(Bh.upgrading)return;Vh({upgrading:!0});let e=I({kind:`info`,message:`Upgrading velloo…`,ttl:6e4});try{let e=await Po();e.upgraded?I({kind:`success`,title:`Upgraded to ${e.to}`,message:"Quit the canvas and run `velloo upgrade` to finish — it migrates this folder.",ttl:15e3}):I({kind:`success`,message:`Velloo ${e.to} is already installed.`}),await Uh({refresh:!0})}catch(e){L(e,`Could not upgrade velloo.`)}finally{Fo(e),Vh({upgrading:!1})}}function Yh({className:e,size:t=`default`,...n}){return(0,V.jsx)(de,{"data-slot":`avatar`,"data-size":t,className:B(`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 Xh({className:e,...t}){return(0,V.jsx)(Te,{"data-slot":`avatar-fallback`,className:B(`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})}var Zh={free:`Free`,team:`Team`,business:`Business`,enterprise:`Enterprise`};function Qh(e){return Zh[e]??e}function $h(e){return`$${(e/1e6).toFixed(2)}`}function eg(e){return e.name?.trim().split(/\s+/)[0]||(e.email.split(`@`)[0]??e.email)}function tg(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 ng(e){if(!e)return null;try{return new URL(`/billing`,e).href}catch{return null}}function rg(e){if(!e)return`velloo-cloud`;try{return new URL(e).host}catch{return e}}function ig(){return(0,V.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 ag(){let e=z(e=>e.authStatus),t=z(e=>e.openSignIn),n=z(e=>e.setSettingsScope),r=z(e=>e.setPublishedBoardsOpen),{status:i,upgrading:a}=Hh(),o=!!(i?.available&&i.upgradable),s=()=>{z.getState().refreshAuth(),Uh()};(0,j.useEffect)(s,[]);let c=e?.loggedIn??!1,l=e?.account,u=c&&e?.verified===!1,d=l?.tier?`${Qh(l.tier)} plan`:null,f=l?.tier===`free`?ng(e?.appUrl):null;return(0,V.jsxs)(ol,{onOpenChange:e=>e&&s(),children:[(0,V.jsx)(sl,{asChild:!0,children:c&&l?(0,V.jsxs)(U,{variant:`ghost`,size:`sm`,className:`relative max-w-[12rem] gap-2 pl-1 pr-2.5 text-xs`,title:`${l.email} — account & settings`,children:[(0,V.jsx)(Yh,{"aria-hidden":`true`,className:`size-6`,children:(0,V.jsx)(Xh,{className:`text-[10px] font-semibold `+(u?`bg-muted text-muted-foreground`:`bg-primary text-primary-foreground`),children:tg(l)})}),(0,V.jsx)(`span`,{className:`truncate`,children:eg(l)}),o?(0,V.jsx)(ig,{}):null]}):(0,V.jsxs)(U,{variant:`outline`,size:`sm`,className:`relative max-w-[12rem] text-xs`,title:`Settings & account`,children:[(0,V.jsx)(Vn,{}),(0,V.jsx)(`span`,{className:`truncate`,children:`Settings`}),o?(0,V.jsx)(ig,{}):null]})}),(0,V.jsxs)(cl,{align:`end`,className:`w-64`,children:[(0,V.jsx)(ll,{className:`font-normal`,children:c?(0,V.jsxs)(`span`,{className:`flex flex-col gap-0.5`,children:[(0,V.jsxs)(`span`,{className:`text-[11px] text-muted-foreground`,children:[`Signed in to `,rg(e?.cloudUrl)]}),(0,V.jsx)(`span`,{className:`truncate text-sm`,children:l?.name??l?.email??`Signed in`}),l?.name&&l.email?(0,V.jsx)(`span`,{className:`truncate text-[11px] text-muted-foreground`,children:l.email}):null,d?(0,V.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:d}):null]}):(0,V.jsxs)(`span`,{className:`flex flex-col gap-0.5`,children:[(0,V.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:`Not signed in`}),(0,V.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:`Sign in to publish boards and pull comments.`})]})}),u?(0,V.jsxs)(Dh,{variant:`destructive`,className:`mb-1 gap-1.5 border-0 bg-transparent px-2 py-0`,children:[(0,V.jsx)(nr,{size:12,className:`mt-px shrink-0`}),(0,V.jsx)(kh,{className:`text-[11px] text-destructive`,children:`This credential expired — sign in again.`})]}):null,c?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(ul,{}),(0,V.jsxs)(`div`,{className:`flex items-center justify-between gap-2 px-2 py-1.5 text-xs`,"data-testid":`settings-credits`,children:[(0,V.jsxs)(`span`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,V.jsx)(Vt,{size:14,className:`shrink-0`}),`Credits`]}),typeof l?.creditMicros==`number`?(0,V.jsx)(`span`,{className:`font-medium tabular-nums`,children:$h(l.creditMicros)}):(0,V.jsx)(`span`,{className:`text-muted-foreground`,title:l?.creditMicros===null?`velloo-cloud couldn't read the balance just now.`:`This velloo-cloud doesn't report a credit balance.`,children:`—`})]}),f?(0,V.jsx)(X,{asChild:!0,children:(0,V.jsxs)(`a`,{href:f,target:`_blank`,rel:`noreferrer`,className:`text-inherit no-underline`,"data-testid":`settings-upgrade`,children:[(0,V.jsx)(qn,{className:`text-primary`}),`Upgrade plan`,(0,V.jsx)(`span`,{className:`ml-auto text-[10px] text-muted-foreground`,children:`Free`})]})}):null]}):null,(0,V.jsx)(ul,{}),(0,V.jsxs)(X,{onSelect:()=>n(`design`),children:[(0,V.jsx)(Gn,{}),`Settings…`]}),c?(0,V.jsxs)(X,{"data-testid":`settings-published-boards`,onSelect:()=>r(!0),children:[(0,V.jsx)(Xt,{}),`Published boards…`]}):null,c&&e?.appUrl?(0,V.jsx)(X,{asChild:!0,children:(0,V.jsxs)(`a`,{href:e.appUrl,target:`_blank`,rel:`noreferrer`,className:`text-inherit no-underline`,"data-testid":`settings-open-cloud`,children:[(0,V.jsx)(qt,{}),`Open velloo-cloud`]})}):null,o?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(X,{disabled:a,"data-testid":`settings-upgrade-velloo`,title:`You're on ${i?.current}`,onSelect:e=>{e.preventDefault(),Jh()},children:[(0,V.jsx)(Rt,{className:`text-primary`}),a?`Updating velloo…`:`Update velloo`]}),(0,V.jsx)(`div`,{className:`truncate px-2 pb-1 pl-8 text-[11px] text-muted-foreground`,children:Wh(i?.latest)})]}):null,(0,V.jsx)(ul,{}),c&&!u?(0,V.jsxs)(X,{onSelect:async()=>{try{await ro.logout(),await z.getState().refreshAuth(),I({kind:`success`,message:`Signed out of velloo-cloud.`})}catch(e){L(e,`Could not sign out.`)}},children:[(0,V.jsx)(mn,{}),`Log out`]}):(0,V.jsxs)(X,{onSelect:()=>t(u?{expired:!0}:{}),children:[(0,V.jsx)(pn,{}),u?`Sign in again…`:`Sign in to velloo-cloud…`]})]})]})}function og({run:e}){return(0,V.jsxs)(`div`,{className:`flex flex-col gap-3 py-4`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2 text-sm`,children:[(0,V.jsx)(eu,{size:16}),(0,V.jsx)(`span`,{children:e.message}),e.capture?(0,V.jsxs)(`span`,{className:`text-muted-foreground tabular-nums`,children:[e.capture.done,`/`,e.capture.total]}):null]}),(0,V.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Capturing previews takes the longest. You can close this — the publish keeps going.`}),(0,V.jsx)(dg,{messages:e.warnings})]})}function sg({run:e,upgradeUrl:t}){let{result:n}=e;return(0,V.jsxs)(`div`,{className:`flex flex-col gap-3 py-2`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2 text-sm`,children:[(0,V.jsx)(zt,{size:15,className:`text-emerald-600 dark:text-emerald-500`}),(0,V.jsx)(`span`,{children:n.created?`Published.`:`Updated the existing link.`})]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(Z,{readOnly:!0,value:n.shareUrl,className:`font-mono text-xs`}),(0,V.jsx)(U,{variant:`outline`,size:`icon-sm`,title:`Copy link`,onClick:()=>void lg(n.shareUrl),children:(0,V.jsx)(Ut,{})}),(0,V.jsx)(U,{variant:`outline`,size:`icon-sm`,title:`Open link`,asChild:!0,children:(0,V.jsx)(`a`,{href:n.shareUrl,target:`_blank`,rel:`noreferrer`,children:(0,V.jsx)(qt,{})})})]}),(0,V.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:ug(n)}),(0,V.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[n.boards,` board`,n.boards===1?``:`s`,` · `,n.screens,` screen`,n.screens===1?``:`s`,` · `,n.files,` files · `,Math.round(n.bytes/1024),` `,`KB`,n.screenshots>0?` · ${n.screenshots} previews`:``]}),(0,V.jsx)(fg,{history:n.history,upgradeUrl:t}),(0,V.jsx)(dg,{messages:e.warnings})]})}function cg({run:e,upgradeUrl:t,onSeePublished:n,onSignIn:r}){return(0,V.jsxs)(`div`,{className:`flex flex-col gap-3 py-2`,children:[e.boardLimit?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(Dh,{role:`note`,"data-testid":`board-limit-notice`,children:[(0,V.jsx)(Xt,{}),(0,V.jsxs)(Oh,{children:[`All `,e.boardLimit.limit,` board slots on the `,Qh(e.boardLimit.tier),` plan are in use`]}),(0,V.jsx)(kh,{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,V.jsxs)(`div`,{className:`flex gap-2`,children:[(0,V.jsx)(U,{size:`sm`,onClick:n,children:`See published boards`}),(0,V.jsx)(U,{size:`sm`,variant:`outline`,asChild:!0,children:(0,V.jsx)(`a`,{href:t,target:`_blank`,rel:`noreferrer`,children:`Upgrade plan`})})]})]}):(0,V.jsxs)(`div`,{className:`flex items-start gap-2 text-sm text-destructive`,children:[(0,V.jsx)(nr,{size:14,className:`mt-0.5 shrink-0`}),(0,V.jsx)(`span`,{children:e.message})]}),e.signInRequired?(0,V.jsx)(U,{onClick:r,className:`self-start`,children:`Sign in and try again…`}):null,(0,V.jsx)(dg,{messages:e.warnings})]})}async function lg(e){try{await navigator.clipboard.writeText(e),I({kind:`success`,message:`Share link copied.`})}catch{I({kind:`info`,message:e})}}function ug(e){return 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 dg({messages:e}){return e.length===0?null:(0,V.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,V.jsx)(`li`,{children:e},e))})}function fg({history:e,upgradeUrl:t}){return e?!e.retained&&e.pruned>0?(0,V.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Replaced the previous version — the free plan keeps only the latest.`,` `,(0,V.jsx)(`a`,{href:t,target:`_blank`,rel:`noreferrer`,className:`underline underline-offset-4`,children:`Upgrade to keep history`}),`.`]}):e.retained&&e.versions>1?(0,V.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[e.versions,` versions kept — earlier publishes stay pinnable.`]}):null:null}function pg(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 mg(e,t){return e.filter(e=>pg(e,t).length===0)}function hg(e,t){return mg(e,t).sort((e,t)=>gg(t.lastPublishedAt)-gg(e.lastPublishedAt))[0]??null}var gg=e=>{let t=e?Date.parse(e):NaN;return Number.isFinite(t)?t:-1/0},_g=700;function vg(){let e=z(e=>e.publishOpen),t=z(e=>e.setPublishOpen),n=z(e=>e.openSignIn),r=z(e=>e.setPublishedBoardsOpen),i=z(e=>e.settlePublish),a=z(e=>e.design),o=z(e=>e.publishScope),s=z(e=>hr(e.authStatus?.account?.tier)),c=z(e=>ng(e.authStatus?.appUrl))??`https://velloo.design/pricing`,[l,u]=(0,j.useState)(null),[d,f]=(0,j.useState)({state:`idle`}),[p,m]=(0,j.useState)(``),[h,g]=(0,j.useState)([]),[_,v]=(0,j.useState)(`public`),[y,b]=(0,j.useState)(``),[x,S]=(0,j.useState)(null),[C,w]=(0,j.useState)(`new`),[ee,T]=(0,j.useState)(!1),[E,D]=(0,j.useState)(!1),[O,k]=(0,j.useState)(null),te=a?.boards??[],ne=(0,j.useCallback)(async e=>{D(!0);try{f(await Do.start(e))}catch(e){L(e,`Could not start publishing`)}finally{D(!1)}},[]);(0,j.useEffect)(()=>{if(!e)return;m(o?o.name:a?.designName?`${a.designName} designs`:``),g(o?[o.id]:(a?.boards??[]).map(e=>e.id)),v(o?.mode===`private`?`private`:`public`),b(``),S(null),w(`new`),T(!1),D(!1),k(null);let t=!1;return(async()=>{let[e,n]=await Promise.all([Do.targets().catch(()=>({ready:!1,teams:[],slots:[]})),Do.status().catch(()=>({state:`idle`}))]);if(t)return;u(e),S(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 Do.reset().catch(()=>void 0),t)return;r={state:`idle`}}f(r)})(),()=>{t=!0}},[e,a?.designName,a?.boards,o]),(0,j.useEffect)(()=>{d.state===`done`&&i(!0)},[d.state,i]),(0,j.useEffect)(()=>{if(!e||d.state!==`running`)return;let t=setInterval(()=>{Do.status().then(f).catch(()=>void 0)},_g);return()=>clearInterval(t)},[e,d.state]);let re=x??l?.effectiveTeamId??null,ie=(0,j.useMemo)(()=>({boardIds:h,teamId:re,repo:l?.provenance?.repo??null,branch:l?.provenance?.branch??null}),[h,re,l?.provenance]),ae=(0,j.useMemo)(()=>{let e=hg(l?.slots??[],ie);return e?[e]:[]},[l?.slots,ie]),oe=ae.find(e=>e.slug===C)??null,se=ae[0]?.slug??`new`;(0,j.useEffect)(()=>{ee||w(se)},[ee,se]),(0,j.useEffect)(()=>{C!==`new`&&!ae.some(e=>e.slug===C)&&(T(!1),w(se))},[C,ae,se]);let ce=s?_:`public`,le=s?y:``,ue=o?s?o.mode:`public`:null,de=()=>{let e=oe?{mode:`update`,slug:oe.slug,expectedVersionId:oe.latestVersionId}:{mode:`new`};return{boardIds:h,...p.trim()?{title:p.trim()}:{},visibility:ce,...le.length>=3?{password:le}:{},...x?{teamId:x}:{},destination:e}},fe=async()=>{D(!0);let e=await Nm(h).catch(()=>[]);if(e.length>0){D(!1),k(e);return}await ne(de())},A=l===null?null:l.access??(l.ready?`ready`:`signed-out`),pe=A!==null&&A!==`ready`,me=A===`expired`,he=d.state===`unavailable`,ge=te.length>0&&h.length===0,_e=ue===`password`&&y.length<3,ve=e=>{t(!1),n({action:`publish these boards`,...e.expired?{expired:!0}:{}})};return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(Fm,{failures:O,verb:`Publish`,onCancel:()=>k(null),onConfirm:()=>{k(null),ne(de())}}),(0,V.jsx)(Ec,{open:e,onOpenChange:e=>!e&&t(!1),children:(0,V.jsxs)(kc,{className:`sm:max-w-md`,children:[(0,V.jsxs)(Ac,{children:[(0,V.jsx)(Mc,{children:`Publish to velloo-cloud`}),(0,V.jsx)(Nc,{children:o?`Sharing “${o.name}” ${ue===`private`?`privately`:ue===`password`?`with password protection`:`publicly`}.`:`Share a rendered, commentable copy of these boards by link.`})]}),he?(0,V.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.`}):pe?(0,V.jsxs)(`div`,{className:`flex flex-col gap-3 py-2`,children:[(0,V.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:me?`Your velloo-cloud session has ended. Sign in again to publish these boards.`:`Publishing needs a velloo-cloud account.`}),(0,V.jsx)(U,{onClick:()=>ve({expired:me}),className:`self-start`,children:me?`Sign in again…`:`Sign in…`})]}):d.state===`running`?(0,V.jsx)(og,{run:d}):d.state===`done`?(0,V.jsx)(sg,{run:d,upgradeUrl:c}):d.state===`error`?(0,V.jsx)(cg,{run:d,upgradeUrl:c,onSeePublished:()=>{t(!1),r(!0)},onSignIn:()=>ve({expired:d.signInRequired===`expired`})}):(0,V.jsx)(Mh,{title:p,onTitleChange:m,boards:te,boardIds:h,onToggleBoard:(e,t)=>g(n=>t?[...new Set([...n,e])]:n.filter(t=>t!==e)),destinationSlug:C,onDestinationChange:e=>{T(!0),w(e)},matchingSlots:ae,selectedSlot:oe,destinationError:l?.destinationError,protectedShares:s,visibility:ce,onVisibilityChange:v,passwordRequired:ue===`password`,password:le,onPasswordChange:b,upgradeUrl:c,teams:l?.teams??[],teamId:x,onTeamChange:S}),(0,V.jsxs)(jc,{children:[(0,V.jsx)(U,{variant:`outline`,onClick:()=>t(!1),children:d.state===`done`?`Done`:`Close`}),d.state===`idle`&&!pe&&!he?(0,V.jsxs)(U,{onClick:()=>void fe(),disabled:E||ge||_e||!!l?.destinationError,children:[(0,V.jsx)(Un,{}),E?`Starting…`:`Publish`]}):null,d.state===`error`?(0,V.jsx)(U,{onClick:()=>f({state:`idle`}),children:`Back`}):null]})]})})]})}var yg=u(`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 bg({className:e,variant:t=`default`,size:n=`default`,asChild:r=!1,...i}){let a=r?ze:`div`;return(0,V.jsx)(a,{"data-slot":`item`,"data-variant":t,"data-size":n,className:B(yg({variant:t,size:n,className:e})),...i})}u(`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 xg({className:e,...t}){return(0,V.jsx)(`div`,{"data-slot":`item-content`,className:B(`flex flex-1 flex-col gap-1 group-data-[size=xs]/item:gap-0 [&+[data-slot=item-content]]:flex-none`,e),...t})}function Sg({className:e,...t}){return(0,V.jsx)(`div`,{"data-slot":`item-title`,className:B(`line-clamp-1 flex w-fit items-center gap-2 text-sm leading-snug font-medium underline-offset-4`,e),...t})}function Cg({className:e,...t}){return(0,V.jsx)(`p`,{"data-slot":`item-description`,className:B(`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 wg({className:e,...t}){return(0,V.jsx)(`div`,{"data-slot":`item-actions`,className:B(`flex items-center gap-2`,e),...t})}var Tg=10;function Eg(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 Dg(e){if(!e)return null;try{return new URL(`/boards`,e).href}catch{return null}}function Og(e){return e.passwordProtected?{icon:Wn,text:`Password protected`}:e.visibility===`private`?{icon:fn,text:`Your organization`}:{icon:dn,text:`Anyone with the link`}}function kg(){let e=z(e=>e.publishedBoardsOpen),t=z(e=>e.setPublishedBoardsOpen),n=Dg(z(e=>e.authStatus?.appUrl)),[r,i]=(0,j.useState)(null),[a,o]=(0,j.useState)(null),[s,c]=(0,j.useState)(!1);(0,j.useEffect)(()=>{if(!e)return;i(null);let n=!1;return(async()=>{try{let e=await Do.published();n||i(e)}catch(e){if(n)return;L(e,`Could not read your published boards`),t(!1)}})(),()=>{n=!0}},[e,t]);let l=async e=>{c(!0);try{await Do.unpublish(e.slug),i(t=>t?.filter(t=>t.slug!==e.slug)??null),z.getState().refreshPublishSlots({force:!0}),I({kind:`success`,message:`Unpublished ${e.title||e.slug} — the link no longer resolves.`}),o(null)}catch(e){L(e,`Could not unpublish that board`)}finally{c(!1)}},u=r?.slice(0,Tg)??[];return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(Ec,{open:e,onOpenChange:e=>!e&&t(!1),children:(0,V.jsxs)(kc,{className:`sm:max-w-lg`,children:[(0,V.jsxs)(Ac,{children:[(0,V.jsx)(Mc,{children:`Published boards`}),(0,V.jsx)(Nc,{children:`Live links on velloo-cloud, newest first. Taking one down stops it resolving and frees the board slot it holds.`})]}),r===null?(0,V.jsxs)(`div`,{className:`flex items-center gap-2 py-6 text-sm text-muted-foreground`,children:[(0,V.jsx)(eu,{size:16}),`Reading velloo-cloud…`]}):u.length===0?(0,V.jsx)(jm,{size:`panel`,icon:Xt,title:`Nothing published yet`,hint:`Publish a board from its menu in the sidebar to get a share link.`}):(0,V.jsx)(`ul`,{className:`-mx-1 max-h-[22rem] overflow-y-auto px-1`,"data-testid":`published-boards-list`,children:u.map(e=>{let t=Og(e);return(0,V.jsx)(`li`,{children:(0,V.jsxs)(bg,{variant:`outline`,size:`sm`,className:`mb-1.5`,children:[(0,V.jsxs)(xg,{className:`min-w-0`,children:[(0,V.jsxs)(Sg,{className:`max-w-full`,children:[(0,V.jsx)(`a`,{href:e.url,target:`_blank`,rel:`noreferrer`,className:`truncate text-inherit no-underline hover:underline`,children:e.title||e.slug}),(0,V.jsx)(qt,{size:12,className:`shrink-0 text-muted-foreground`})]}),(0,V.jsxs)(Cg,{className:`flex items-center gap-1.5 text-xs`,children:[(0,V.jsx)(t.icon,{size:11,className:`shrink-0`}),t.text,` · `,Eg(e.lastPublishedAt)]})]}),(0,V.jsx)(wg,{children:(0,V.jsx)(U,{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:()=>o(e),children:(0,V.jsx)(tr,{className:e.canManage?`text-destructive`:void 0})})})]})},e.slug)})}),(0,V.jsxs)(jc,{className:`sm:justify-between`,children:[n?(0,V.jsx)(U,{variant:`ghost`,size:`sm`,asChild:!0,children:(0,V.jsxs)(`a`,{href:n,target:`_blank`,rel:`noreferrer`,"data-testid":`published-boards-all`,children:[(0,V.jsx)(qt,{}),r&&r.length>u.length?`See all ${r.length} on velloo-cloud`:`More details on velloo-cloud`]})}):(0,V.jsx)(`span`,{}),(0,V.jsx)(U,{variant:`outline`,onClick:()=>t(!1),children:`Close`})]})]})}),(0,V.jsx)(Kc,{open:a!==null,onOpenChange:e=>!e&&o(null),children:(0,V.jsxs)(Yc,{children:[(0,V.jsxs)(Xc,{children:[(0,V.jsxs)($c,{children:[`Unpublish “`,a?.title||a?.slug,`”?`]}),(0,V.jsx)(el,{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,V.jsxs)(Zc,{children:[(0,V.jsx)(nl,{disabled:s,children:`Keep it`}),(0,V.jsx)(tl,{variant:`destructive`,disabled:s,onClick:e=>{e.preventDefault(),a&&l(a)},children:s?`Unpublishing…`:`Unpublish`})]})]})})]})}var Ag=`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 jg(){let e=z(e=>e.currentBoardId),t=z(e=>e.commentThreads),n=z(e=>e.commentStatus),r=z(e=>e.commentScope),i=z(e=>e.cloudComments),a=z(e=>e.activeCommentId),o=z(e=>e.refreshComments),s=z(e=>e.refreshCloudComments),c=z(e=>e.setCommentStatus),l=z(e=>e.setCommentScope),u=z(e=>e.setActiveComment),d=z(e=>e.locateComment),f=z(e=>e.createBoardComment),p=z(e=>e.replyToComment),m=z(e=>e.setCommentResolved),h=z(e=>e.moveCommentToCloud),g=z(e=>e.deleteComment),_=z(e=>e.deleteCommentMessage),v=z(e=>e.enterCommentMode),[y,b]=(0,j.useState)(``),[x,S]=(0,j.useState)(`local`),[C,w]=(0,j.useState)(null),[ee,T]=(0,j.useState)(``),[E,D]=(0,j.useState)(null),O=t.find(e=>e.id===a)??null,k=(0,j.useMemo)(()=>Rc(t),[t]),te=E?t.find(e=>e.id===E.threadId)??null:null;return(0,j.useEffect)(()=>{e&&o()},[e,o]),(0,j.useEffect)(()=>{s()},[s]),(0,j.useEffect)(()=>{T(``)},[a]),(0,V.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,"data-velloo-comments-panel":!0,children:[(0,V.jsx)(vm,{status:n,onStatusChange:c,count:t.length,onAdd:v,children:(0,V.jsx)(Hp,{scope:r,onChange:l})}),(0,V.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:O?(0,V.jsx)(Sm,{thread:O,onBack:()=>u(null),onRequestDelete:D,replyDraft:ee,onReplyDraftChange:T,onReply:()=>void p(O.id,ee).then(()=>T(``)),onResolve:()=>void m(O.id,O.status===`open`),children:O.scope===`local`?(0,V.jsx)(Mg,{thread:O,cloud:i,onMoveToCloud:()=>void h(O.id),onRequestDelete:D}):null}):t.length>0?(0,V.jsx)(`ul`,{className:`space-y-1.5 p-2`,children:t.map(e=>(0,V.jsx)(_m,{thread:e,number:k.get(e.id)??0,onOpen:()=>u(e.id),onLocate:()=>d(e.id),onDelete:e.scope===`local`?()=>D({kind:`thread`,threadId:e.id}):void 0},e.id))}):(0,V.jsx)(ym,{status:n})}),O?null:(0,V.jsx)(xm,{draft:y,onDraftChange:b,onSubmit:()=>{w(null),f(y,x).then(e=>{w(e),e||b(``)})},failure:C,target:(0,V.jsx)(Up,{scope:x,onChange:S,cloud:i,className:`min-w-0 flex-1`}),help:Vp}),(0,V.jsx)(Cm,{thread:te,pending:E,onCancel:()=>D(null),onConfirm:()=>{E&&(E.kind===`thread`?g(E.threadId):_(E.threadId,E.id),D(null))}})]})}function Mg({thread:e,cloud:t,onMoveToCloud:n,onRequestDelete:r}){let i=t?.available===!1?t.reason:null,a=!!i&&i!==`unpublished`;return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(U,{variant:`outline`,size:`sm`,disabled:t===void 0||a,title:a&&i?go(i):Ag,onClick:n,children:[(0,V.jsx)(Bt,{}),` Move to cloud`,i===`unpublished`?(0,V.jsx)(nr,{className:`text-amber-600`}):null]}),(0,V.jsxs)(U,{variant:`ghost`,size:`sm`,className:`col-span-2 text-destructive`,onClick:()=>r({kind:`thread`,threadId:e.id}),children:[(0,V.jsx)(tr,{}),` Delete thread`]})]})}function Ng(e,t){let n=(0,j.useRef)(null),r=(0,j.useRef)(t);return r.current=t,(0,j.useEffect)(()=>()=>{n.current&&clearTimeout(n.current)},[]),(0,j.useCallback)(t=>{n.current&&clearTimeout(n.current),n.current=setTimeout(()=>r.current(t),e)},[e])}function Pg({initialValue:e,screenId:t,path:n,debounceMs:r}){let[i,a]=(0,j.useState)(e),o=(0,j.useRef)(null);(0,j.useEffect)(()=>()=>{o.current&&clearTimeout(o.current)},[]);let s=e=>{a(e),o.current&&clearTimeout(o.current),o.current=setTimeout(()=>{let r=e===``?null:e;F.updateProps({screenId:t,path:R(n),propPatch:{children:r}}).catch(e=>L(e,`Could not update text`))},r)};return(0,V.jsxs)(`section`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsx)(W,{htmlFor:`prop-children`,className:`text-xs font-medium text-muted-foreground`,children:`text`}),(0,V.jsx)(nf,{id:`prop-children`,value:i,onChange:e=>s(e.target.value),rows:2,className:`min-h-0`})]})}function Fg({node:e,tree:t,path:n,theme:r,descriptor:i,snippet:a,classChannel:o,computed:s,measured:c,onChange:l}){let u=iu(),d=(0,j.useMemo)(()=>Fu(r),[r]),f=(0,j.useMemo)(()=>Iu(r),[r]),p=(0,j.useCallback)(e=>Pu(r,e),[r]),m=(0,j.useMemo)(()=>Zu({node:e,descriptor:i,snippet:a}).controls.filter(e=>e.kind!==`prompt`&&(o||e.slot.via!==`style`)),[e,i,a,o]),h=(0,j.useMemo)(()=>Jd({theme:r,tree:t,path:R(n),node:e}),[r,t,n,e]);return m.length===0?null:(0,V.jsx)(hf,{delayDuration:300,children:(0,V.jsx)(`div`,{className:`grid grid-cols-2 gap-x-3 gap-y-2.5`,children:m.map(t=>{let n=zd(t,{node:e,themeValues:h.values,themeSource:h.source,computed:s}),r=t.kind===`color`||t.kind===`size`||t.kind===`prompt`;return(0,V.jsx)(`div`,{className:r?`col-span-2`:``,children:(0,V.jsx)($f,{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,V.jsx)(xp,{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 Ig=/^[a-zA-Z][a-zA-Z0-9_-]*$/;function Lg({initialValue:e,screenId:t,path:n}){let[r,i]=(0,j.useState)(e),[a,o]=(0,j.useState)(null);return(0,V.jsxs)(`div`,{className:`flex flex-col gap-1.5 text-xs`,children:[(0,V.jsxs)(`label`,{htmlFor:`velloo-node-id`,className:`flex items-center justify-between text-muted-foreground uppercase tracking-wider`,children:[(0,V.jsx)(`span`,{children:`Stable id`}),a?(0,V.jsx)(`span`,{className:`normal-case text-destructive`,children:a}):null]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,V.jsx)(`span`,{className:`text-muted-foreground font-mono`,children:`@`}),(0,V.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!==``&&!Ig.test(a)){o(`letters/digits/_/- only, leading letter`);return}o(null),F.setNodeId({screenId:t,path:R(n),id:a===``?null:a}).catch(t=>{L(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 Rg=`__velloo_unset__`;function zg(e,t){return e===`node`?JSON.stringify(t??null):t==null?``:typeof t==`string`?t:typeof t==`number`||typeof t==`boolean`?String(t):JSON.stringify(t)}function Bg(e){let{kind:t,id:n,compact:r}=e,[i,a]=(0,j.useState)(()=>zg(t,e.initialValue)),[o,s]=(0,j.useState)(!!e.initialValue),c=t===`enum`&&!(e.enumValues&&e.enumValues.length>0)||t===`icon`&&!e.iconNames?`string`:t,l=r?`flex flex-col gap-1`:`flex flex-col gap-1.5`,u=(0,V.jsx)(W,{htmlFor:n,className:e.labelClassName??(r?`text-[10px]`:`text-xs`),children:e.label});if(c===`boolean`){let t=t=>{s(t),e.onCommit(t)};return(0,V.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,title:e.title,children:[u,(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(jh,{id:n,checked:o,onCheckedChange:e=>t(!!e)}),(0,V.jsx)(`span`,{className:r?`text-[11px] text-muted-foreground`:`text-xs text-muted-foreground`,children:String(o)})]})]})}if(c===`icon`)return(0,V.jsxs)(`div`,{className:l,title:e.title,children:[u,(0,V.jsx)(Hf,{value:i,options:e.iconNames??[],onChange:t=>{a(t),e.onCommit(t)}})]});if(c===`enum`){let t=e.enumValues??[],o=typeof t[0]==`number`;return(0,V.jsxs)(`div`,{className:l,title:e.title,children:[u,(0,V.jsxs)(G,{value:i===``?e.allowUnset?Rg:``:i,onValueChange:t=>{if(t===Rg){a(``),e.onCommit(void 0);return}a(t),e.onCommit(o?Number(t):t)},children:[(0,V.jsx)(q,{id:n,size:`sm`,className:r?`text-xs`:`text-sm`,children:(0,V.jsx)(K,{placeholder:e.placeholder??`(unset)`})}),(0,V.jsxs)(J,{children:[e.allowUnset?(0,V.jsx)(Y,{value:Rg,children:`(unset)`}):null,t.map(e=>(0,V.jsx)(Y,{value:String(e),children:String(e)},String(e)))]})]})]})}if(c===`number`)return(0,V.jsxs)(`div`,{className:l,title:e.title,children:[u,(0,V.jsx)(Z,{id:n,type:`number`,value:i,min:e.min,max:e.max,step:e.step,placeholder:e.placeholder,onChange:t=>{if(a(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(c===`color`){let t=t=>{a(t),e.onCommit(e.emptyAsUndefined&&t===``?void 0:t)};return(0,V.jsxs)(`div`,{className:l,title:e.title,children:[u,(0,V.jsxs)(`div`,{className:r?`flex items-center gap-1.5`:`flex items-center gap-2`,children:[(0,V.jsx)(`input`,{type:`color`,"aria-label":`${e.name} color picker`,value:i.startsWith(`#`)?i:`#000000`,onChange:e=>t(e.target.value),className:`h-7 w-9 shrink-0 cursor-pointer rounded-md border border-input bg-transparent`}),(0,V.jsx)(Z,{id:n,type:`text`,value:i,placeholder:e.placeholder,onChange:e=>t(e.target.value),className:r?`h-7 flex-1 font-mono text-xs`:`flex-1 font-mono`})]})]})}return c===`node`?(0,V.jsxs)(`div`,{className:l,title:e.title,children:[u,(0,V.jsx)(Z,{id:n,value:i,placeholder:e.placeholder??`{"$ref":"Text","props":{"children":"..."}}`,onChange:t=>{a(t.target.value);try{e.onCommit(JSON.parse(t.target.value))}catch{}},className:`h-7 font-mono text-[10px]`})]}):(0,V.jsxs)(`div`,{className:l,title:e.title,children:[u,(0,V.jsx)(Z,{id:n,type:`text`,value:i,placeholder:e.placeholder,onChange:t=>{a(t.target.value),e.onCommit(e.emptyAsUndefined&&t.target.value===``?void 0:t.target.value)},className:r?`h-7 text-xs`:void 0})]})}function Vg(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 Hg({descriptor:e,initialValue:t,onChange:n}){let r=Vg(e);return(0,V.jsx)(Bg,{kind:r,id:`prop-${e.name}`,name:e.name,label:(0,V.jsxs)(V.Fragment,{children:[e.name,e.optional?null:(0,V.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})}var Ug=200;function Wg({selection:e,node:t}){let n=z(e=>e.design)?.snippets.find(e=>e.id===t.$snippet),r=iu(),[i,a]=(0,j.useState)(null);(0,j.useEffect)(()=>{let e=!0;return so(t.$snippet).then(t=>{e&&a(t)}).catch(()=>void 0),()=>{e=!1}},[t.$snippet]);let o=i?.params??n?.params??[],s=Ng(Ug,e=>{F.updateSnippetArgs({screenId:e.screenId,path:R(e.path),argPatch:{[e.name]:e.value===void 0?null:e.value}}).catch(e=>L(e,`Could not update snippet arg`))}),c=(t,n)=>s({screenId:e.screenId,path:e.path,name:t,value:n});return(0,V.jsxs)(`div`,{className:`flex-1 flex flex-col overflow-hidden`,children:[(0,V.jsxs)(`header`,{className:`px-4 py-3 border-b`,children:[(0,V.jsxs)(`div`,{className:`font-semibold text-sm truncate`,children:[`@`,t.$snippet]}),(0,V.jsxs)(`div`,{className:`text-xs text-muted-foreground mt-0.5`,children:[e.screenId,` · `,e.path===``?`(root)`:e.path,` · snippet instance`]})]}),(0,V.jsxs)(`div`,{className:`flex-1 overflow-y-auto scroll-stable p-4 flex flex-col gap-4`,children:[n==null?(0,V.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,V.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`This snippet takes no params.`}):(0,V.jsxs)(`section`,{className:`flex flex-col gap-3`,children:[(0,V.jsx)(`div`,{className:`text-xs uppercase tracking-wider text-muted-foreground`,children:`Args`}),o.map(n=>(0,V.jsx)(qg,{param:n,initialValue:t.args?.[n.name],onChange:e=>c(n.name,e),lucideIconNames:r},`${e.screenId}:${e.path}:${n.name}`))]}),(0,V.jsx)(Gg,{snippetId:t.$snippet,selection:e})]})]})}function Gg({snippetId:e,selection:t}){let[n,r]=(0,j.useState)(null),i=z(e=>e.screenVersion),a=z(e=>e.selectScreen),o=z(e=>e.setSelection);if((0,j.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,V.jsxs)(`section`,{className:`flex flex-col gap-2 border-t pt-4`,children:[(0,V.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,V.jsx)(`div`,{className:`text-xs uppercase tracking-wider text-muted-foreground`,children:`Instances`}),(0,V.jsxs)(`div`,{className:`text-[10px] text-muted-foreground tabular-nums`,children:[n.length,` total · `,s,` with override`]})]}),n.length===0?(0,V.jsx)(`div`,{className:`text-[10px] text-muted-foreground`,children:`Not used yet — instantiate from the Snippets panel to see this list populate.`}):(0,V.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,V.jsx)(`li`,{children:(0,V.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,V.jsxs)(`span`,{className:r?`truncate text-primary font-medium`:`truncate text-foreground`,children:[r?`● `:t?`↳ snippet: `:``,n]}),(0,V.jsx)(`span`,{className:`shrink-0 font-mono text-muted-foreground`,children:e.path===``?`(root)`:e.path}),e.hasOverride?(0,V.jsx)(`span`,{className:`shrink-0 rounded bg-primary/10 px-1 text-primary`,children:`override`}):null]})},`${e.screenId}:${e.path}`)})})]})}function Kg(e){switch(e.type){case`boolean`:case`number`:case`icon`:case`color`:return e.type;case`enum`:return Array.isArray(e.enum)&&e.enum.length>0?`enum`:`string`;default:return`string`}}function qg({param:e,initialValue:t,onChange:n,lucideIconNames:r}){let i=Kg(e);return(0,V.jsx)(Bg,{kind:i,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,min:e.min,max:e.max,step:e.step??1,placeholder:i===`enum`?`(choose)`:void 0})}function Jg({selection:e,node:t}){let n=z(e=>e.design),r=z(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,V.jsxs)(`section`,{className:`flex flex-col gap-3 border-t pt-4`,children:[(0,V.jsx)(`div`,{className:`text-xs uppercase tracking-wider text-muted-foreground`,children:`Substitutions`}),(0,V.jsx)(Yg,{nodeParams:o.map(e=>e.name),onInsert:async t=>{if(!r)return;let n=structuredClone(r.tree),a=n;for(let t of R(e.path)){if(!a||!ni(a))return;a=a.children?.[t]}if(a&&ni(a)){a.children=[...a.children??[],{$param:t}];try{await N(`update_snippet`,{snippetId:i,patch:{tree:n}}),I({kind:`success`,message:`Inserted {$param: ${t}} slot`})}catch(e){L(e,`Could not insert param ref`)}}}}),(0,V.jsx)(Xg,{node:t,boolParams:s.map(e=>e.name),onWrap:async(n,r)=>{let i=t.props?.[n];try{await F.updateProps({screenId:e.screenId,path:R(e.path),propPatch:{[n]:{$if:r,then:i??``,else:``}}}),I({kind:`success`,message:`${n} now branches on {$if: ${r}}`})}catch(e){L(e,`Could not add if branch`)}}})]})}function Yg({nodeParams:e,onInsert:t}){return e.length===0?(0,V.jsxs)(`div`,{className:`text-[11px] text-muted-foreground leading-relaxed`,children:[(0,V.jsx)(`span`,{className:`font-medium text-foreground`,children:`+ param ref`}),` — this snippet has no`,` `,(0,V.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,V.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsx)(W,{className:`text-xs`,children:`+ param ref`}),(0,V.jsxs)(G,{value:``,onValueChange:t,children:[(0,V.jsx)(q,{size:`sm`,className:`text-xs`,"aria-label":`Insert a param-ref slot`,children:(0,V.jsx)(K,{placeholder:`Insert {$param} slot as child…`})}),(0,V.jsx)(J,{children:e.map(e=>(0,V.jsx)(Y,{value:e,children:`{$param: ${e}}`},e))})]})]})}function Xg({node:e,boolParams:t,onWrap:n}){let[r,i]=(0,j.useState)(``),[a,o]=(0,j.useState)(``);if(t.length===0)return(0,V.jsxs)(`div`,{className:`text-[11px] text-muted-foreground leading-relaxed`,children:[(0,V.jsx)(`span`,{className:`font-medium text-foreground`,children:`+ if branch`}),` — this snippet has no`,` `,(0,V.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,V.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsx)(W,{className:`text-xs`,children:`+ if branch`}),(0,V.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,V.jsxs)(G,{value:r,onValueChange:i,children:[(0,V.jsx)(q,{size:`sm`,className:`flex-1 text-xs`,"aria-label":`Prop to branch`,children:(0,V.jsx)(K,{placeholder:`prop`})}),(0,V.jsx)(J,{children:[...s].map(e=>(0,V.jsx)(Y,{value:e,children:e},e))})]}),(0,V.jsxs)(G,{value:a,onValueChange:o,children:[(0,V.jsx)(q,{size:`sm`,className:`flex-1 text-xs`,"aria-label":`Boolean param`,children:(0,V.jsx)(K,{placeholder:`$if param`})}),(0,V.jsx)(J,{children:t.map(e=>(0,V.jsx)(Y,{value:e,children:e},e))})]}),(0,V.jsx)(U,{size:`xs`,variant:`outline`,className:`h-7 text-xs shrink-0`,disabled:r===``||a===``,onClick:()=>{n(r,a),i(``),o(``)},children:`Wrap`})]}),(0,V.jsxs)(`div`,{className:`text-[10px] text-muted-foreground leading-relaxed`,children:[`Wraps the prop's current value in `,(0,V.jsx)(`code`,{className:`font-mono`,children:`{$if, then, else}`}),` — tune the branches in the prop field after.`]})]})}function Zg(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 Qg(e){return e===`all`?0:e===`x`||e===`y`?1:2}function $g(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 e_={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`}},t_=[`display`,`flexDirection`,`justifyContent`,`alignItems`,`gap`,`width`,`height`,`fontFamily`,`fontSize`,`fontWeight`,`lineHeight`,`letterSpacing`,`textAlign`,`color`,`backgroundColor`,`borderRadius`],n_=new Set(t_);function r_(e){return n_.has(e)}function i_(e){return typeof e==`string`&&e.trim().includes(` `)}function a_(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 o_(e){let t={padding:{},margin:{}},n={},r=[];for(let[i,a]of Object.entries(e??{})){let e=e_[i];if(e&&(typeof a==`number`||typeof a==`string`)&&!(e.v===`all`&&i_(a))){r.push({box:e.box,v:e.v,val:a});continue}if(r_(i)&&(typeof a==`number`||typeof a==`string`)){t[i]=a;continue}n[i]=a}r.sort((e,t)=>Qg(e.v)-Qg(t.v));for(let e of r)Zg(t[e.box],e.v,e.val);return{model:t,extra:n}}var s_={top:`Top`,right:`Right`,bottom:`Bottom`,left:`Left`};function c_(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}${s_[r]}`]=i)}}}function l_({model:e,extra:t}){let n={};for(let t of t_){let r=e[t];r!==void 0&&(n[t]=r)}return c_(`padding`,e.padding,n),c_(`margin`,e.margin,n),Object.assign(n,t),n}function u_(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 d_({title:e,defaultOpen:t=!0,children:n}){let[r,i]=(0,j.useState)(t);return(0,V.jsxs)(`section`,{className:`border-b last:border-b-0`,children:[(0,V.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,V.jsx)(Ft,{className:`size-3 transition-transform ${r?``:`-rotate-90`}`})]}),r?(0,V.jsx)(`div`,{className:`px-3 pb-3 flex flex-col gap-2.5`,children:n}):null]})}function $({label:e,children:t}){return(0,V.jsxs)(`div`,{className:`flex items-center justify-between gap-3 min-h-7`,children:[(0,V.jsx)(`span`,{className:`text-xs text-muted-foreground shrink-0`,children:e}),t]})}function f_({value:e,onChange:t,options:n,className:r}){return(0,V.jsx)(Xf,{type:`single`,size:`sm`,value:e??``,onValueChange:e=>t(e||void 0),className:r,children:n.map(e=>(0,V.jsx)(Zf,{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 p_({value:e,onChange:t,unit:n,units:r,onUnitChange:i,placeholder:a,className:o}){return(0,V.jsxs)(`div`,{className:`inline-flex items-center h-7 rounded-md border border-input bg-background overflow-hidden ${o??`w-20`}`,children:[(0,V.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,V.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,V.jsx)(`option`,{value:e,children:e},e))}):n?(0,V.jsx)(`span`,{className:`self-stretch flex items-center border-l border-input px-1.5 text-[10px] text-muted-foreground`,children:n}):null]})}function m_({value:e,onChange:t,options:n,className:r,label:i}){return(0,V.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,V.jsx)(`option`,{value:e,children:t??e},e))})}function h_(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 g_({value:e,onChange:t,placeholder:n}){let r=h_(e);return(0,V.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,V.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,V.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 __({code:e}){return(0,V.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 v_({padding:e,margin:t,contentLabel:n,onPadding:r,onMargin:i}){let a=(e,t,n)=>(0,V.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,V.jsxs)(`div`,{className:`relative rounded-md border border-dashed bg-muted/40 px-2 pb-1 pt-4 text-muted-foreground`,children:[(0,V.jsx)(`span`,{className:`absolute left-2 top-1 text-[8px] font-medium uppercase tracking-wide text-muted-foreground/80`,children:`margin`}),(0,V.jsx)(`div`,{className:`flex justify-center`,children:a(t.top,e=>i(`top`,e),`mt`)}),(0,V.jsxs)(`div`,{className:`flex items-center gap-1`,children:[a(t.left,e=>i(`left`,e),`ml`),(0,V.jsxs)(`div`,{className:`relative flex-1 rounded border bg-accent/40 px-2 pb-1 pt-4`,children:[(0,V.jsx)(`span`,{className:`absolute left-1.5 top-0.5 text-[8px] font-medium uppercase tracking-wide text-muted-foreground/80`,children:`padding`}),(0,V.jsx)(`div`,{className:`flex justify-center`,children:a(e.top,e=>r(`top`,e),`pt`)}),(0,V.jsxs)(`div`,{className:`flex items-center gap-1`,children:[a(e.left,e=>r(`left`,e),`pl`),(0,V.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,V.jsx)(`div`,{className:`flex justify-center`,children:a(e.bottom,e=>r(`bottom`,e),`pb`)})]}),a(t.right,e=>i(`right`,e),`mr`)]}),(0,V.jsx)(`div`,{className:`flex justify-center`,children:a(t.bottom,e=>i(`bottom`,e),`mb`)})]})}function y_({placeholder:e,value:t,onChange:n,onSubmit:r}){return(0,V.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 b_=[[`flex`],[`block`],[`grid`],[`inline-flex`],[`none`]],x_=[{value:`row`,icon:(0,V.jsx)(jt,{className:`size-3.5`}),title:`row`},{value:`column`,icon:(0,V.jsx)(Ot,{className:`size-3.5`}),title:`column`}],S_=[[`flex-start`,`start`],[`center`],[`flex-end`,`end`],[`space-between`,`between`],[`space-around`,`around`]],C_=[[`flex-start`,`start`],[`center`],[`flex-end`,`end`],[`stretch`]],w_=[[`400`],[`500`],[`600`],[`700`],[`300`]],T_=[{value:`left`,label:`L`},{value:`center`,label:`C`},{value:`right`,label:`R`},{value:`justify`,label:`J`}],E_=[`px`,`rem`,`em`,`%`,`vh`,`vw`,`—`],D_=e=>e===void 0?``:String(e);function O_(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 k_(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 A_(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 j_({initialValue:e,prop:t,screenId:n,path:r,debounceMs:i}){let[a,o]=(0,j.useState)(()=>o_(e)),[s,c]=(0,j.useState)(``),l=Ng(i,e=>{let i=l_(e);F.updateProps({screenId:n,path:R(r),propPatch:{[t]:Object.keys(i).length?i:null}}).catch(e=>L(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=a_(e);return t===null?D_(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}=O_(d[e]);return(0,V.jsx)(p_,{value:t,unit:n,units:E_,onChange:t=>f({[e]:k_(t,n)}),onUnitChange:n=>f({[e]:k_(t,n)}),className:`w-28`})},v=Object.entries(l_(a)),y=(e,t)=>u(o_({...l_(a),[e]:A_(t)})),b=e=>{let{[e]:t,...n}=l_(a);u(o_(n))};return(0,V.jsxs)(`div`,{className:`-mx-4 -mb-4 flex flex-col`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2 border-b bg-primary/5 px-3 py-2`,children:[(0,V.jsx)(kt,{className:`size-3.5 text-primary`}),(0,V.jsx)(`span`,{className:`text-[11px] text-foreground`,children:`Controls ⇄ declarations — edit either side`})]}),(0,V.jsx)(d_,{title:`Box model`,children:(0,V.jsx)(v_,{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,V.jsxs)(d_,{title:`Layout`,children:[(0,V.jsx)($,{label:`display`,children:(0,V.jsx)(m_,{value:D_(d.display)||`—`,onChange:e=>f({display:e===`—`?void 0:e}),options:u_(b_,d.display)})}),(0,V.jsx)($,{label:`flexDirection`,children:(0,V.jsx)(f_,{value:D_(d.flexDirection)||void 0,onChange:e=>f({flexDirection:e}),options:x_})}),(0,V.jsx)($,{label:`justify`,children:(0,V.jsx)(m_,{value:D_(d.justifyContent)||`—`,onChange:e=>f({justifyContent:e===`—`?void 0:e}),options:u_(S_,d.justifyContent)})}),(0,V.jsx)($,{label:`alignItems`,children:(0,V.jsx)(m_,{value:D_(d.alignItems)||`—`,onChange:e=>f({alignItems:e===`—`?void 0:e}),options:u_(C_,d.alignItems)})}),(0,V.jsx)($,{label:`gap`,children:_(`gap`)})]}),(0,V.jsxs)(d_,{title:`Typography`,children:[(0,V.jsx)($,{label:`fontSize`,children:_(`fontSize`)}),(0,V.jsx)($,{label:`lineHeight`,children:_(`lineHeight`)}),(0,V.jsx)($,{label:`fontWeight`,children:(0,V.jsx)(m_,{value:D_(d.fontWeight)||`—`,onChange:e=>f({fontWeight:e===`—`?void 0:e}),options:u_(w_,d.fontWeight),className:`min-w-[5rem]`})}),(0,V.jsx)($,{label:`textAlign`,children:(0,V.jsx)(f_,{value:D_(d.textAlign)||void 0,onChange:e=>f({textAlign:e}),options:T_})}),(0,V.jsx)($,{label:`color`,children:(0,V.jsx)(g_,{value:D_(d.color),onChange:e=>f({color:e||void 0}),placeholder:`var(--foreground)`})})]}),(0,V.jsxs)(d_,{title:`Appearance`,children:[(0,V.jsx)($,{label:`background`,children:(0,V.jsx)(g_,{value:D_(d.backgroundColor),onChange:e=>f({backgroundColor:e||void 0}),placeholder:`var(--card)`})}),(0,V.jsx)($,{label:`radius`,children:_(`borderRadius`)})]}),(0,V.jsxs)(d_,{title:`Declarations (raw, synced)`,children:[v.map(([e,t])=>(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(`span`,{className:`w-28 shrink-0 truncate font-mono text-[11px] text-muted-foreground`,children:e}),(0,V.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,V.jsx)(`button`,{type:`button`,onClick:()=>b(e),className:`text-muted-foreground hover:text-foreground`,"aria-label":`remove ${e}`,children:(0,V.jsx)(sr,{className:`size-3`})})]},e)),v.length===0?(0,V.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:`no styles`}):null,(0,V.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,V.jsx)(Pn,{className:`size-3 text-muted-foreground`}),(0,V.jsx)(p_,{value:s,onChange:c,className:`w-full`,placeholder:`property…`}),(0,V.jsx)(`button`,{type:`button`,onClick:()=>{let e=s.trim();!e||e in l_(a)||(u(o_({...l_(a),[e]:``})),c(``))},className:`text-[11px] text-muted-foreground hover:text-foreground`,children:`add`})]}),(0,V.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 M_={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`}},N_=[`display`,`flexDirection`,`justifyContent`,`alignItems`,`gap`,`width`,`height`,`fontSize`,`fontWeight`,`lineHeight`,`letterSpacing`,`textAlign`,`typography`,`color`,`bgcolor`,`boxShadow`,`borderRadius`,`fontFamily`],P_=new Set(N_);function F_(e){return P_.has(e)}var I_=8;function L_(e){if(typeof e==`number`)return e*I_;if(typeof e==`string`){let t=/^(-?\d*\.?\d+)px$/.exec(e.trim());if(t)return Number(t[1])}return null}function R_(e){return e%I_===0?e/I_:`${e}px`}function z_(e){let t={padding:{},margin:{}},n={},r=[];for(let[i,a]of Object.entries(e??{})){let e=M_[i];if(e&&(typeof a==`string`||typeof a==`number`)){r.push({box:e.box,v:e.v,val:a});continue}if(F_(i)&&(typeof a==`string`||typeof a==`number`)){t[i]=a;continue}n[i]=a}r.sort((e,t)=>Qg(e.v)-Qg(t.v));for(let e of r)Zg(t[e.box],e.v,e.val);return{model:t,extra:n}}function B_(e,t,n){let r=$g(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 V_({model:e,extra:t}){let n={};for(let t of N_){let r=e[t];r!==void 0&&(n[t]=r)}return B_(`p`,e.padding,n),B_(`m`,e.margin,n),Object.assign(n,t),n}var H_=[[`flex`],[`block`],[`grid`],[`inline-flex`],[`none`]],U_=[{value:`row`,icon:(0,V.jsx)(jt,{className:`size-3.5`}),title:`row`},{value:`column`,icon:(0,V.jsx)(Ot,{className:`size-3.5`}),title:`column`}],W_=[[`flex-start`,`start`],[`center`],[`flex-end`,`end`],[`space-between`,`between`],[`space-around`,`around`],[`space-evenly`,`evenly`]],G_=[[`flex-start`,`start`],[`center`],[`flex-end`,`end`],[`stretch`],[`baseline`]],K_=[[`normal`],[`medium`],[`semibold`],[`bold`],[`light`]],q_=[{value:`left`,label:`L`},{value:`center`,label:`C`},{value:`right`,label:`R`},{value:`justify`,label:`J`}],J_=e=>e===void 0?``:String(e);function Y_(e){let t=e.trim();if(t)return/^-?\d+(\.\d+)?$/.test(t)?Number(t):t}function X_(e){let t=L_(e);return t===null?J_(e):String(t)}function Z_(e){let t=e.trim();if(t)return/^-?\d+(\.\d+)?$/.test(t)?R_(Number(t)):t}function Q_({initialValue:e,prop:t,screenId:n,path:r,debounceMs:i}){let[a,o]=(0,j.useState)(()=>z_(e)),[s,c]=(0,j.useState)(``),l=Ng(i,e=>{let i=V_(e);F.updateProps({screenId:n,path:R(r),propPatch:{[t]:Object.keys(i).length?i:null}}).catch(e=>L(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]:Z_(n)}}),m=e=>({top:X_(e.top),right:X_(e.right),bottom:X_(e.bottom),left:X_(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(V_(a),null,2);return(0,V.jsxs)(`div`,{className:`-mx-4 -mb-4 flex flex-col`,children:[(0,V.jsxs)(d_,{title:`Layout`,children:[(0,V.jsx)($,{label:`display`,children:(0,V.jsx)(m_,{value:J_(d.display)||`—`,onChange:e=>f({display:e===`—`?void 0:e}),options:u_(H_,d.display)})}),(0,V.jsx)($,{label:`flexDirection`,children:(0,V.jsx)(f_,{value:J_(d.flexDirection)||void 0,onChange:e=>f({flexDirection:e}),options:U_})}),(0,V.jsx)($,{label:`justify`,children:(0,V.jsx)(m_,{value:J_(d.justifyContent)||`—`,onChange:e=>f({justifyContent:e===`—`?void 0:e}),options:u_(W_,d.justifyContent)})}),(0,V.jsx)($,{label:`alignItems`,children:(0,V.jsx)(m_,{value:J_(d.alignItems)||`—`,onChange:e=>f({alignItems:e===`—`?void 0:e}),options:u_(G_,d.alignItems)})}),(0,V.jsx)($,{label:`gap`,children:(0,V.jsx)(p_,{value:X_(d.gap),onChange:e=>f({gap:Z_(e)}),unit:`px`})})]}),(0,V.jsxs)(d_,{title:`Spacing · theme.spacing ×8`,children:[(0,V.jsx)(v_,{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,V.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`number → theme.spacing(n): 2 = 16px; off-grid → a px string.`})]}),(0,V.jsxs)(d_,{title:`Typography`,children:[(0,V.jsx)($,{label:`typography`,children:(0,V.jsx)(m_,{value:J_(d.typography)||`—`,onChange:e=>f({typography:e===`—`?void 0:e}),options:u_([[`body1`],[`body2`],[`subtitle1`],[`subtitle2`],[`h6`],[`caption`]],d.typography),className:`min-w-[6rem]`})}),(0,V.jsx)($,{label:`fontSize`,children:(0,V.jsx)(p_,{value:J_(d.fontSize),onChange:e=>f({fontSize:Y_(e)}),placeholder:`14`})}),(0,V.jsx)($,{label:`fontWeight`,children:(0,V.jsx)(m_,{value:J_(d.fontWeight)||`—`,onChange:e=>f({fontWeight:e===`—`?void 0:e}),options:u_(K_,d.fontWeight),className:`min-w-[6rem]`})}),(0,V.jsx)($,{label:`textAlign`,children:(0,V.jsx)(f_,{value:J_(d.textAlign)||void 0,onChange:e=>f({textAlign:e}),options:q_})}),(0,V.jsx)($,{label:`color`,children:(0,V.jsx)(g_,{value:J_(d.color),onChange:e=>f({color:e||void 0}),placeholder:`text.primary`})})]}),(0,V.jsxs)(d_,{title:`Appearance`,children:[(0,V.jsx)($,{label:`bgcolor`,children:(0,V.jsx)(g_,{value:J_(d.bgcolor),onChange:e=>f({bgcolor:e||void 0}),placeholder:`background.paper`})}),(0,V.jsx)($,{label:`boxShadow`,children:(0,V.jsx)(p_,{value:J_(d.boxShadow),onChange:e=>f({boxShadow:Y_(e)}),unit:`elev`})}),(0,V.jsx)($,{label:`borderRadius`,children:(0,V.jsx)(p_,{value:J_(d.borderRadius),onChange:e=>f({borderRadius:Y_(e)})})})]}),(0,V.jsxs)(d_,{title:`Additional sx (raw)`,children:[(0,V.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,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(`span`,{className:`w-24 shrink-0 truncate font-mono text-[11px] text-muted-foreground`,children:e}),(0,V.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,V.jsx)(`button`,{type:`button`,onClick:()=>_(e),className:`text-muted-foreground hover:text-foreground`,"aria-label":`remove ${e}`,children:(0,V.jsx)(sr,{className:`size-3`})})]},e)),(0,V.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,V.jsx)(Pn,{className:`size-3 text-muted-foreground`}),(0,V.jsx)(y_,{placeholder:`property…`,value:s,onChange:c,onSubmit:v})]})]}),(0,V.jsx)(d_,{title:`sx (merged)`,defaultOpen:!1,children:(0,V.jsx)(__,{code:y})})]})}var $_=new Set;function ev(e,t,n=e){if(!t||$_.has(e))return;$_.add(e);let r=document.createElement(`link`);r.rel=`stylesheet`,r.href=Kl(t,e,n),document.head.appendChild(r)}var tv=[{role:`display`,hint:`display`},{role:`serif`,hint:`body`},{role:`sans`,hint:`body`},{role:`mono`,hint:`mono`}],nv=/^[a-z][a-z0-9-]*$/;function rv(e){return/^\s*(?:"([^"]+)"|'([^']+)'|([^,]+))/.exec(e)?.slice(1).find(Boolean)?.trim()??e}var iv=/^(-|ui-|system-ui$|sans-serif$|serif$|monospace$|cursive$)/;function av({theme:e,onBrowse:t}){let n=e.typography.fontFamily??{},r=Object.keys(n).sort(),[i,a]=(0,j.useState)(!1),[o,s]=(0,j.useState)(``),[c,l]=(0,j.useState)(null),u=z(e=>e.refreshTheme),d=z(e=>e.themeName);(0,j.useEffect)(()=>{for(let e of Object.values(n)){let t=Wl(rv(e));t&&ev(t.family,t.google)}},[n]);let f=e=>{Mo.setFonts(d,[e]).catch(e=>{L(e,`Could not update the font role`),u()})},p=o.trim(),m=nv.test(p)&&!r.includes(p),h=e=>{a(!1),t(e)};return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[r.length===0?(0,V.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No faces declared yet.`}):r.map(e=>{let r=n[e],i=rv(r),a=Wl(i),o=iv.test(i);return(0,V.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,V.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,V.jsx)(`span`,{className:`w-14 shrink-0 truncate font-mono text-[10px] text-muted-foreground`,children:e}),(0,V.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,V.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,V.jsx)(tr,{size:11})})]},e)}),i?(0,V.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,V.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,V.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,V.jsx)(Pt,{size:13})}),(0,V.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,V.jsx)(sr,{size:13})})]}),(0,V.jsx)(`div`,{className:`flex flex-wrap items-center gap-1`,children:tv.filter(e=>!r.includes(e.role)).map(e=>(0,V.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,V.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,V.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,V.jsx)(Pn,{size:12}),` Add a face`]})]}),(0,V.jsx)(Kc,{open:c!==null,onOpenChange:e=>!e&&l(null),children:(0,V.jsxs)(Yc,{children:[(0,V.jsxs)(Xc,{children:[(0,V.jsx)($c,{children:`Remove the "${c}" face`}),(0,V.jsx)(el,{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,V.jsxs)(Zc,{children:[(0,V.jsx)(nl,{children:`Cancel`}),(0,V.jsx)(tl,{variant:`destructive`,onClick:()=>{let e=c;l(null),e&&f({role:e,remove:!0})},children:`Remove`})]})]})})]})}function ov(e,t){return{role:e,family:t.family,fallback:t.fallback,...t.google?{google:t.google}:{}}}async function sv(e,t,n){let r=e.typography.fontFamily??{},i=Object.entries(r).find(([,e])=>rv(e)===n.family);if(i)return i[0];let a=lv(cv(n.family),r);return await Mo.setFonts(t,[ov(a,n)]),a}function cv(e){let t=e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``);return/^[a-z]/.test(t)?t:`font-${t}`}function lv(e,t){if(!(e in t))return e;let n=2;for(;`${e}-${n}`in t;)n++;return`${e}-${n}`}var uv=[{id:`suited`,label:`Suited`},{id:`all`,label:`All`},{id:`sans`,label:`Sans`},{id:`serif`,label:`Serif`},{id:`mono`,label:`Mono`}];function dv(e){return/^(mono|code)/.test(e)?`mono`:/(display|heading|title|wordmark|marquee|hero)/.test(e)?`display`:`body`}function fv(e,t){let n=e.roles.indexOf(t);return n===-1?e.roles.length+1:n}function pv({role:e,current:t,onPick:n,onBack:r}){let[i,a]=(0,j.useState)(``),[o,s]=(0,j.useState)(`suited`),c=z(e=>e.setFontDraft),l=dv(e);(0,j.useEffect)(()=>()=>c(null),[c]);let u=(0,j.useMemo)(()=>{let e=i.trim().toLowerCase(),t=[...Ul.filter(t=>e&&t.family.toLowerCase().includes(e)?!0:o===`suited`?t.roles.includes(l):o===`all`||t.category===o)].sort((e,t)=>fv(e,l)-fv(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:Gl(t),...t.google?{google:t.google}:{}})};return(0,V.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,V.jsxs)(`div`,{className:`flex flex-col gap-2 border-b p-3`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,V.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,V.jsx)(At,{size:14})}),(0,V.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`Face for `,(0,V.jsx)(`span`,{className:`font-mono text-foreground`,children:e})]})]}),(0,V.jsxs)(`div`,{className:`relative`,children:[(0,V.jsx)(Bn,{size:13,className:`pointer-events-none absolute left-2 top-1/2 -translate-y-1/2 text-muted-foreground/60`}),(0,V.jsx)(Z,{autoFocus:!0,value:i,onChange:e=>a(e.target.value),placeholder:`Search ${Ul.length} families`,spellCheck:!1,"aria-label":`Search families`,className:`h-7 pl-7 text-xs`})]}),(0,V.jsx)(`div`,{className:`flex items-center gap-0.5 rounded-md bg-muted p-0.5`,children:uv.map(e=>(0,V.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,V.jsx)(`div`,{className:`flex-1 overflow-y-auto scroll-stable`,children:u.length===0?(0,V.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,V.jsx)(mv,{font:e,picked:e.family===t,onPreview:()=>d(e),onPick:()=>n(e)},e.family))})]})}function mv({font:e,picked:t,onPreview:n,onPick:r}){let i=(0,j.useRef)(null);return(0,j.useEffect)(()=>{let t=i.current;if(!t)return;let n=new IntersectionObserver(t=>{t.some(e=>e.isIntersecting)&&(ev(e.family,e.google),n.disconnect())},{rootMargin:`200px`});return n.observe(t),()=>n.disconnect()},[e]),(0,V.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,V.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,V.jsx)(`span`,{className:`block truncate text-[15px] leading-tight text-foreground`,style:{fontFamily:Gl(e)},children:e.family}),(0,V.jsx)(`span`,{className:`mt-0.5 block truncate text-[10px] text-muted-foreground/80`,children:e.note})]}),t?(0,V.jsx)(Pt,{size:13,className:`shrink-0 text-primary`}):null]})}function hv({theme:e,tree:t,path:n,node:r}){let i=od(e,t,n,r);if(!i)return null;let{resolved:a,overrides:o}=i;return(0,V.jsxs)(`section`,{className:`flex flex-col gap-2`,children:[(0,V.jsx)(`div`,{className:`text-xs uppercase tracking-wider text-muted-foreground`,children:`Typeset`}),(0,V.jsxs)(`div`,{className:`rounded-md border bg-background`,children:[(0,V.jsxs)(`div`,{className:`flex items-baseline gap-2 border-b px-2.5 py-2`,children:[(0,V.jsx)(`span`,{className:`rounded bg-muted px-1.5 py-0.5 font-mono text-[11px] font-semibold text-foreground`,children:i.role}),(0,V.jsxs)(`span`,{className:`truncate text-[10px] text-muted-foreground`,children:[`from `,i.via]})]}),(0,V.jsxs)(`div`,{className:`flex flex-col px-2.5 py-1.5`,children:[(0,V.jsx)(bv,{label:`Size`,value:`${a.fontSize}px`,override:o.size}),(0,V.jsx)(bv,{label:`Leading`,value:a.lineHeight.toFixed(2),override:o.leading}),(0,V.jsx)(bv,{label:`Tracking`,value:a.letterSpacing,override:o.tracking}),(0,V.jsx)(bv,{label:`Weight`,value:String(a.fontWeight),override:o.weight}),(0,V.jsx)(bv,{label:`Face`,value:_v(i),override:o.family,mono:i.face.role!==void 0})]})]}),gv(o)?(0,V.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,V.jsxs)(`p`,{className:`text-[10px] leading-snug text-muted-foreground`,children:[yv(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,V.jsxs)(`p`,{className:`text-[10px] leading-snug text-muted-foreground/80`,children:[`Also `,(0,V.jsx)(`span`,{className:`font-mono text-foreground`,children:i.responsive.join(` `)}),` at wider breakpoints.`]}):null]})}function gv(e){return[`size`,`leading`,`tracking`,`weight`].every(t=>e[t])}function _v(e){let{slot:t,role:n,stack:r}=e.face;if(!n)return`inherited (${t})`;let i=r?vv(r):null;return i?`${n} → ${i}`:n}function vv(e){return/^\s*(?:"([^"]+)"|'([^']+)'|([^,]+))/.exec(e)?.slice(1).find(Boolean)?.trim()??e}function yv(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 bv({label:e,value:t,override:n,mono:r}){return(0,V.jsxs)(`div`,{className:`flex items-baseline gap-2 py-1`,children:[(0,V.jsx)(`span`,{className:`w-16 shrink-0 text-[10px] text-muted-foreground`,children:e}),(0,V.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,V.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 xv=200,Sv=new Set([`className`,`asChild`,`children`]);function Cv(){let e=z(e=>e.selection),t=z(e=>e.selectionComputed),n=au(),r=z(e=>e.components),i=z(e=>e.screens),a=z(e=>e.styleChannel),o=z(e=>e.channelsByLibrary),s=z(e=>e.theme),c=z(e=>e.themeName),l=z(e=>e.browsingFaces),u=z(e=>e.setBrowsingFaces),d=z(e=>e.loadComponents),f=z(e=>e.loadGeneratedAssets);(0,j.useEffect)(()=>{d()},[d]),(0,j.useEffect)(()=>{f()},[f]);let p=(0,j.useMemo)(()=>Gs(i,e),[i,e]),m=e?i[e.screenId]?.tree:void 0,h=(0,j.useMemo)(()=>!p||!r||!ni(p)?null:r.find(e=>e.id===p.$ref)??null,[p,r]),g=Ng(xv,e=>{F.updateProps({screenId:e.screenId,path:R(e.path),propPatch:{[e.name]:e.value===void 0?null:e.value}}).catch(e=>L(e,`Could not update prop`))}),_=ef({selection:e,node:p,liveClasses:p?Fd(p):``}),v=Su(t),y=n[0]??null;if(!e)return(0,V.jsx)(jm,{size:`panel`,icon:Cn,title:`Nothing selected`,hint:`Click a node in the canvas to edit its props.`});if(!p)return(0,V.jsx)(jm,{size:`panel`,icon:ar,title:`Selection is gone`,hint:`The selected node is no longer in the tree.`});if(ri(p))return(0,V.jsx)(Wg,{selection:e,node:p});if(!ni(p))return(0,V.jsx)(jm,{size:`panel`,icon:Nt,title:`Not editable here`,hint:`$param placeholders are only addressable inside a snippet body — open the snippet to edit.`});let b=(t,n)=>g({screenId:e.screenId,path:e.path,name:t,value:n}),x=i[e.screenId]?.library,S=(x?o[x]:void 0)??a,C=S?.prop??`className`,w=S?.kind===`sx`||S?.kind===`style`,ee=new Set([...Sv,C,...Zu({node:p,descriptor:h}).controls.map(e=>e.slot.via===`prop`?e.slot.name:null).filter(e=>e!==null)]),T=Qu(p),E=`${e.screenId}:${e.path}`,D=typeof p.props?.children==`string`?p.props.children:``,O=typeof p.props?.children==`string`||h===null,k=typeof p.props?.src==`string`?p.props.src:null,te=`${E}:${k??``}`;if(l&&s){let t=m?od(s,m,R(e.path),p):null,n=t?.overrides.family?.replace(/^font-/,``)??t?.face.role??t?.face.slot??`body`,r=s.typography.fontFamily?.[n];return(0,V.jsx)(`div`,{className:`flex-1 min-h-0`,children:(0,V.jsx)(pv,{role:n,current:r?rv(r):void 0,onBack:()=>u(!1),onPick:t=>{u(!1);let n=e;sv(s,c,t).then(e=>F.applyClasses({screenId:n.screenId,path:R(n.path),classes:Vd(typeof p.props?.className==`string`?p.props.className:``,`fontFamily`,e)})).catch(e=>L(e,`Could not set the face`))}})})}return(0,V.jsxs)(`div`,{className:`flex-1 flex flex-col overflow-hidden`,children:[(0,V.jsxs)(`header`,{className:`px-4 py-3 border-b`,children:[(0,V.jsxs)(`div`,{className:`font-semibold text-sm truncate`,children:[p.$ref,T?(0,V.jsx)(`span`,{className:`ml-1.5 font-mono text-xs text-muted-foreground`,children:T}):null]}),(0,V.jsxs)(`div`,{className:`text-xs text-muted-foreground mt-0.5`,children:[e.screenId,` · `,e.path===``?`(root)`:e.path]})]}),(0,V.jsx)(Tv,{},E),(0,V.jsxs)(`div`,{className:`flex-1 overflow-y-auto scroll-stable p-4 flex flex-col gap-4`,children:[(0,V.jsx)(Lg,{initialValue:fi(p)??``,screenId:e.screenId,path:e.path},`${E}:id`),O?(0,V.jsx)(Pg,{initialValue:D,screenId:e.screenId,path:e.path,debounceMs:xv},`${E}:children`):null,k===null?null:(0,V.jsx)(pf,{screenId:e.screenId,path:e.path,src:k,nodeAspect:typeof p.props?.aspect==`string`?p.props.aspect:void 0},`${E}:image`),(0,V.jsxs)(`section`,{className:`flex flex-col gap-3`,children:[(0,V.jsx)(`div`,{className:`text-xs uppercase tracking-wider text-muted-foreground`,children:`Style`}),(0,V.jsx)(Fg,{node:p,tree:m,path:e.path,theme:s,descriptor:h,snippet:null,classChannel:!w,computed:v,measured:y,onChange:_},`${E}:style`)]}),s&&m?(0,V.jsx)(hv,{theme:s,tree:m,path:R(e.path),node:p}):null,h&&h.props.filter(e=>!ee.has(e.name)).length>0?(0,V.jsxs)(`section`,{className:`flex flex-col gap-3`,children:[(0,V.jsx)(`div`,{className:`text-xs uppercase tracking-wider text-muted-foreground`,children:`Props`}),h.props.filter(e=>!ee.has(e.name)).map(e=>(0,V.jsx)(Hg,{descriptor:e,initialValue:p.props?.[e.name],onChange:t=>b(e.name,t)},`${te}:${e.name}`))]}):null,e.screenId.startsWith(`snippet:`)?(0,V.jsx)(Jg,{selection:e,node:p},`${E}:subs`):null,w?(()=>{let t=p.props?.[C]&&typeof p.props[C]==`object`?p.props[C]:void 0,n={key:`${E}:${C}`,initialValue:t,prop:C,screenId:e.screenId,path:e.path,debounceMs:xv};return S?.kind===`sx`?(0,V.jsx)(Q_,{...n}):(0,V.jsx)(j_,{...n})})():null]})]})}var wv=[`default`,`hover`,`focus`,`active`,`disabled`];function Tv(){let e=z(e=>e.nodeState),t=z(e=>e.setNodeState);return(0,j.useEffect)(()=>(t(`default`),()=>t(`default`)),[t]),(0,V.jsxs)(`div`,{className:`px-4 py-2 border-b flex items-center gap-2`,children:[(0,V.jsx)(W,{htmlFor:`node-state`,className:`text-xs uppercase tracking-wider text-muted-foreground`,children:`State`}),(0,V.jsxs)(G,{value:e,onValueChange:e=>t(e),children:[(0,V.jsx)(q,{id:`node-state`,size:`sm`,className:`flex-1 text-xs`,children:(0,V.jsx)(K,{})}),(0,V.jsx)(J,{children:wv.map(e=>(0,V.jsx)(Y,{value:e,children:e},e))})]})]})}function Ev(e,t){return t?`${e} — ${t}`:e}function Dv({side:e,expandLabel:t,hotkey:n,onExpand:r,actions:i=[]}){return(0,V.jsxs)(`div`,{className:`flex h-full w-full flex-col items-center gap-1 py-2`,children:[(0,V.jsx)(U,{variant:`ghost`,size:`icon-sm`,onClick:r,title:Ev(t,n),"aria-label":t,"aria-expanded":!1,children:e===`left`?(0,V.jsx)(Dn,{}):(0,V.jsx)(kn,{})}),i.length>0?(0,V.jsx)(`div`,{className:`my-1 h-px w-4 shrink-0 bg-border`}):null,i.map(e=>(0,V.jsxs)(U,{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,V.jsx)(`span`,{"data-rail-dot":e.label,className:`absolute right-1 top-1 size-1.5 rounded-full bg-primary`}):null]},e.label))]})}function Ov({side:e,label:t,hotkey:n,onCollapse:r}){return(0,V.jsx)(U,{variant:`ghost`,size:`icon-sm`,onClick:r,title:Ev(t,n),"aria-label":t,"aria-expanded":!0,className:`shrink-0 text-muted-foreground`,children:e===`left`?(0,V.jsx)(En,{}):(0,V.jsx)(On,{})})}function kv({side:e,width:t,onCommit:n,paneRef:r}){let i=(0,j.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=fs(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(fs(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(ds.default))},d=`Resize ${e===`left`?`sidebar`:`inspector`}`;return(0,V.jsx)(`div`,{role:`separator`,"aria-orientation":`vertical`,"aria-label":d,"aria-valuenow":t,"aria-valuemin":ds.min,"aria-valuemax":ds.max,tabIndex:0,title:`${d} — double-click to reset`,onPointerDown:o,onPointerMove:s,onPointerUp:c,onPointerCancel:c,onDoubleClick:()=>{a(ds.default),n(ds.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,V.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 Av=36,jv=200;function Mv({side:e,collapsed:t,width:n,onResize:r,rail:i,contentDisabled:a=!1,children:o}){let s=Nv(t),c=(0,j.useRef)(null);return(0,V.jsx)(`aside`,{ref:c,"data-pane":e,"data-collapsed":t,style:{width:t?Av: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,V.jsxs)(V.Fragment,{children:[t?null:(0,V.jsx)(kv,{side:e,width:n,onCommit:r,paneRef:c}),(0,V.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 Nv(e){let t=Fv(),[n,r]=(0,j.useState)(e),[i,a]=(0,j.useState)(!1);return n!==e&&(r(e),a(!t)),(0,j.useEffect)(()=>{if(!i)return;let e=setTimeout(()=>a(!1),jv);return()=>clearTimeout(e)},[i]),i}var Pv=`(prefers-reduced-motion: reduce)`;function Fv(){let[e,t]=(0,j.useState)(()=>typeof matchMedia==`function`&&matchMedia(Pv).matches);return(0,j.useEffect)(()=>{if(typeof matchMedia!=`function`)return;let e=matchMedia(Pv),n=()=>t(e.matches);return e.addEventListener(`change`,n),()=>e.removeEventListener(`change`,n)},[]),e}var Iv=250;function Lv({label:e,tokenPath:t,value:n}){let[r,i]=(0,j.useState)(n),[a,o]=(0,j.useState)(!1),s=(0,j.useRef)(null),c=z(e=>e.themeName);(0,j.useEffect)(()=>{i(n)},[n]),(0,j.useEffect)(()=>()=>{s.current&&clearTimeout(s.current)},[]);let l=e=>{i(e),s.current&&clearTimeout(s.current),s.current=setTimeout(()=>{let n=mu(e)??e;Mo.setToken(c,t,n).catch(e=>L(e,`Could not set color token`))},Iv)};return(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsxs)(Rf,{open:a,onOpenChange:o,children:[(0,V.jsx)(zf,{asChild:!0,children:(0,V.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:r},title:`${t} — click to edit`,"aria-label":`Edit ${e}`})}),(0,V.jsx)(Bf,{align:`start`,className:`w-72`,children:(0,V.jsx)(Rv,{currentValue:r,onCommit:l})})]}),(0,V.jsxs)(`div`,{className:`flex-1 min-w-0 flex flex-col gap-1`,children:[(0,V.jsx)(W,{htmlFor:`token-${t}`,className:`text-xs text-muted-foreground truncate`,children:e}),(0,V.jsx)(Z,{id:`token-${t}`,type:`text`,value:r,onChange:e=>l(e.target.value),spellCheck:!1,className:`text-xs font-mono`})]})]})}function Rv({currentValue:e,onCommit:t}){let n=fu(e)??{hex:`#000000`,oklch:`oklch(0 0 0)`,hsl:`hsl(0 0% 0%)`},[r,i]=(0,j.useState)(n.hex),[a,o]=(0,j.useState)(n.oklch),[s,c]=(0,j.useState)(n.hsl),[l,u]=(0,j.useState)(()=>Sf(n.hex)??{h:0,s:0,v:0}),d=(e,n)=>{let r=fu(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=Sf(r.hex);e&&u(e)}t(r.oklch)};return(0,V.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,V.jsx)(Ef,{value:l,onChange:e=>{u(e),d(xf(e),`wheel`)}}),(0,V.jsx)(zv,{label:`HEX`,value:r,onChange:e=>d(e,`hex`)}),(0,V.jsx)(zv,{label:`OKLCH`,value:a,onChange:e=>d(e,`oklch`)}),(0,V.jsx)(zv,{label:`HSL`,value:s,onChange:e=>d(e,`hsl`)})]})}function zv({label:e,value:t,onChange:n}){let r=`velloo-color-${e.toLowerCase()}`;return(0,V.jsxs)(`div`,{className:`flex items-center gap-2 text-xs`,children:[(0,V.jsx)(`label`,{htmlFor:r,className:`w-12 text-muted-foreground uppercase tracking-wider`,children:e}),(0,V.jsx)(Z,{id:r,type:`text`,value:t,onChange:e=>n(e.target.value),spellCheck:!1,className:`flex-1 font-mono text-xs`})]})}var Bv={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`},Vv={AAA:`AAA`,AA:`AA`,AAlarge:`AA·lg`,Fail:`FAIL`};function Hv({bumpKey:e}){let[t,n]=(0,j.useState)(null),r=z(e=>e.themeName);if((0,j.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,V.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,V.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsxs)(`div`,{className:`flex items-center justify-between text-xs`,children:[(0,V.jsx)(`span`,{className:`font-medium`,children:`Contrast`}),(0,V.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,V.jsx)(`ul`,{className:`flex flex-col gap-1`,children:t.map(e=>(0,V.jsxs)(`li`,{className:`flex items-center justify-between gap-2 rounded-md border bg-background px-1.5 py-1 text-[10px]`,children:[(0,V.jsx)(`span`,{className:`truncate text-muted-foreground`,children:e.label}),(0,V.jsxs)(`span`,{className:`shrink-0 tabular-nums ${Bv[e.tier]}`,children:[e.ratio.toFixed(2),`:1 `,Vv[e.tier]]})]},e.label))})]})}function Uv({presets:e,activeName:t}){let[n,r]=(0,j.useState)(null),i=z(e=>e.themeName);if((0,j.useEffect)(()=>{let e=!0;return fetch(`/api/theme/preset-summaries`).then(e=>e.ok?e.json():Promise.reject(Error(`${e.status}`))).then(t=>{e&&r(t.presets)}).catch(()=>{}),()=>{e=!1}},[]),e.length===0)return null;let a=e=>{Mo.applyPreset(i,e).catch(e=>L(e,`Could not apply preset`))};return n?(0,V.jsx)(`div`,{className:`grid grid-cols-2 gap-2`,children:n.map(e=>{let n=e.name===t;return(0,V.jsxs)(`button`,{type:`button`,onClick:()=>a(e.name),className:`group flex flex-col items-stretch gap-1.5 rounded-md border p-2 text-left transition-colors outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background `+(n?`border-primary ring-2 ring-primary/30`:`border-border hover:border-primary/50`),title:`${e.name}${n?` — active`:``}`,children:[(0,V.jsxs)(`div`,{className:`flex h-9 w-full overflow-hidden rounded`,style:{backgroundColor:e.swatches.background},children:[(0,V.jsx)(`div`,{className:`flex-1`,style:{backgroundColor:e.swatches.primary}}),(0,V.jsx)(`div`,{className:`flex-1`,style:{backgroundColor:e.swatches.accent}}),(0,V.jsx)(`div`,{className:`flex-1`,style:{backgroundColor:e.swatches.background}})]}),(0,V.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,V.jsx)(`span`,{className:`text-xs font-medium`,children:e.name}),n?(0,V.jsx)(`span`,{className:`text-[10px] uppercase tracking-wider text-primary`,children:`active`}):null]})]},e.name)})}):(0,V.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:e.map(e=>(0,V.jsx)(U,{variant:e===t?`default`:`outline`,size:`xs`,onClick:()=>a(e),className:`rounded-full`,children:e},e))})}var Wv=/^[a-z][a-z0-9-]*$/;function Gv(){let e=z(e=>e.currentBoardId),t=z(e=>e.themeName),n=z(e=>e.folderConfig),r=z(e=>e.loadFolderConfig),[i,a]=(0,j.useState)(!1),[o,s]=(0,j.useState)(``);(0,j.useEffect)(()=>{r()},[r]);let c=n?.themes??[`default`],l=c.includes(t)?c:[...c,t],u=async n=>{if(e&&n!==t)try{await F.updateBoard({boardId:e,patch:{theme:n==="default"?null:n}})}catch(e){L(e,`Could not switch the theme`)}},d=o.trim(),f=Wv.test(d)&&d!=="default"&&!c.includes(d),p=async()=>{if(f){a(!1);try{await Mo.addTheme(d,t),await r(),await u(d)}catch(e){L(e,`Could not create the theme`)}}};return(0,V.jsxs)(`div`,{className:`mb-3 flex flex-col gap-1.5 rounded-md border bg-muted/40 p-2`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,V.jsx)(`span`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground`,children:`Editing`}),(0,V.jsx)(m_,{value:t,onChange:e=>void u(e),options:l.map(e=>[e]),className:`ml-auto min-w-[8rem] font-mono`,label:`Theme being edited`}),(0,V.jsx)(`button`,{type:`button`,onClick:()=>{s(``),a(e=>!e)},title:`New theme from this one`,"aria-label":`New theme from this one`,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,V.jsx)(Pn,{size:13})})]}),i?(0,V.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,V.jsx)(Z,{autoFocus:!0,value:o,onChange:e=>s(e.target.value),onKeyDown:e=>{e.key===`Enter`&&p(),e.key===`Escape`&&a(!1)},placeholder:`new-theme-name`,spellCheck:!1,"aria-label":`New theme name`,className:`h-7 flex-1 font-mono text-xs`}),(0,V.jsx)(`button`,{type:`button`,onClick:()=>void p(),disabled:!f,"aria-label":`Create 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,V.jsx)(Pt,{size:13})}),(0,V.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,V.jsx)(sr,{size:13})})]}),(0,V.jsx)(`span`,{className:`text-[10px] leading-snug text-muted-foreground/80`,children:d.length>0&&!f?c.includes(d)||d==="default"?`"${d}" already exists`:`Lowercase letters, digits and dashes — it becomes the file name`:`Copies ${t} to theme/${d||`name`}.json and pins this board to it`})]}):(0,V.jsx)(`span`,{className:`text-[10px] leading-snug text-muted-foreground`,children:e?t==="default"?`The folder default — edits here reach every board that hasn't pinned its own.`:`Pinned by this board, so edits here leave every other board alone.`:`No board selected.`})]})}var Kv=[`h1`,`h3`,`body`,`caption`],qv=26;function Jv({scale:e,rootPx:t}){let n=Math.max(...Kv.map(t=>e[t].fontSize)),r=Math.min(1,qv/n);return(0,V.jsxs)(`div`,{className:`rounded-md border bg-background px-2.5 py-2`,children:[(0,V.jsxs)(`div`,{className:`mb-1 flex items-baseline gap-1.5`,children:[(0,V.jsx)(`span`,{className:`text-[10px] font-semibold uppercase tracking-[0.08em] text-muted-foreground`,children:`Resolved ladder`}),(0,V.jsx)(`span`,{className:`ml-auto font-mono text-[10px] text-muted-foreground/70`,children:`at ${t}px base`})]}),Kv.map((t,n)=>{let i=e[t];return(0,V.jsxs)(`div`,{className:`flex items-baseline gap-3 py-1.5${n===Kv.length-1?``:` border-b`}`,children:[(0,V.jsx)(`span`,{className:`w-12 shrink-0 font-mono text-[10px] text-muted-foreground`,children:t}),(0,V.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,V.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 Yv({className:e,defaultValue:t,value:n,min:r=0,max:i=100,tone:a=`primary`,"aria-label":o,...s}){let c=a===`muted`,l=j.useMemo(()=>Array.isArray(n)?n:Array.isArray(t)?t:[r,i],[n,t,r,i]);return(0,V.jsxs)(Je,{"data-slot":`slider`,...t===void 0?{}:{defaultValue:t},...n===void 0?{}:{value:n},min:r,max:i,className:B(`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,V.jsx)(De,{"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,V.jsx)(Be,{"data-slot":`slider-range`,className:B(`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,V.jsx)(Re,{"data-slot":`slider-thumb`,"aria-label":o,className:B(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))]})}function Xv({label:e,value:t,min:n,max:r,step:i,display:a,authored:o,onClear:s,hint:c,onPreview:l,onCommit:u}){return(0,V.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,V.jsxs)(`div`,{className:`flex items-baseline gap-1.5`,children:[(0,V.jsx)(`span`,{"aria-hidden":!0,className:`size-1.5 shrink-0 self-center rounded-full `+(o?`bg-primary`:`border border-muted-foreground/40`)}),(0,V.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e}),o?null:(0,V.jsx)(`span`,{className:`text-[10px] uppercase tracking-wide text-muted-foreground/60`,children:`inherited`}),o&&s?(0,V.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,V.jsx)(Rn,{size:11})}):null,(0,V.jsx)(`span`,{className:(o&&s?``:`ml-auto `)+`font-mono text-xs tabular-nums `+(o?`text-foreground`:`text-muted-foreground/60`),children:a})]}),(0,V.jsx)(Yv,{"aria-label":e,tone:o?`primary`:`muted`,value:[t],min:n,max:r,step:i,onValueChange:([e])=>l(e),onValueCommit:([e])=>u(e)}),(0,V.jsx)(`span`,{className:`text-[10px] text-muted-foreground/80`,children:c})]})}function Zv({names:e,selected:t,onSelect:n,onAdd:r,onRename:i,onRemove:a}){let[o,s]=(0,j.useState)(null),[c,l]=(0,j.useState)(``),[u,d]=(0,j.useState)(!1),f=t===wi,p=()=>{l(``),s(`add`)},m=()=>{l(t),s(`rename`)},h=o===`rename`?e.filter(e=>e!==t):e,g=c.trim(),_=g.length>0&&Ti(g)&&!h.includes(g),v=()=>{_&&(o===`add`?r(g):i(t,g),s(null))};return o?(0,V.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,V.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,V.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,V.jsx)(Pt,{size:13})}),(0,V.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,V.jsx)(sr,{size:13})})]}),(0,V.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,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,V.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,V.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,V.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,V.jsx)(Pn,{size:13})})]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,V.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground/80 truncate`,children:f?`:root — styles every screen`:`.typeset-${t}`}),f?null:(0,V.jsxs)(V.Fragment,{children:[(0,V.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,V.jsx)(Nn,{size:11})}),(0,V.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,V.jsx)(tr,{size:11})})]})]})]}),(0,V.jsx)(Kc,{open:u,onOpenChange:d,children:(0,V.jsxs)(Yc,{children:[(0,V.jsxs)(Xc,{children:[(0,V.jsx)($c,{children:`Delete the "${t}" typeset`}),(0,V.jsx)(el,{children:`Any region still carrying .typeset-${t} keeps the class but falls back to the default typeset's rhythm.`})]}),(0,V.jsxs)(Zc,{children:[(0,V.jsx)(nl,{children:`Cancel`}),(0,V.jsx)(tl,{variant:`destructive`,onClick:()=>{d(!1),a(t)},children:`Delete`})]})]})})]})}var Qv={min:12,max:24,step:.5},$v={min:1,max:2.2,step:.05},ey={min:.4,max:2.5,step:.05},ty=`__none`,ny=[{field:`fontBody`,label:`Body`},{field:`fontHeading`,label:`Heading`},{field:`fontMono`,label:`Mono`}];function ry(e){return[wi,...Object.keys(e).filter(e=>e!==wi).sort()]}function iy({theme:e}){let t=e.typography.typesets??{},n=ry(t),[r,i]=(0,j.useState)(wi),a=z(e=>e.setTypesetDraft),o=z(e=>e.typesetDraft),s=z(e=>e.refreshTheme),c=z(e=>e.themeName),l=n.includes(r)?r:wi;(0,j.useEffect)(()=>()=>a(null),[a]);let u=t[l]??{},d=o?.name===l?o.typeset:u,f=l===wi,p=t.default??{},m=Fi(f?d:{...p,...d}),h=Object.keys(e.typography.fontFamily??{}).sort(),g=Ri(m.size),_=zi(m,{fontFamily:e.typography.fontFamily??{}}),v=e=>{a({name:l,typeset:{...d,...e}})},y=(e,t)=>{Mo.setTypeset(c,[e]).then(()=>t?.()).catch(e=>{L(e,`Could not update the typeset`),s()})},b=e=>y({name:l,...e});return(0,V.jsxs)(`div`,{className:`flex flex-col gap-3.5`,children:[(0,V.jsx)(Zv,{names:n,selected:l,onSelect:e=>{a(null),i(e)},onAdd:e=>y({name:e},()=>i(e)),onRename:(e,t)=>y({name:e,renameTo:t},()=>i(t)),onRemove:e=>y({name:e,remove:!0},()=>i(wi))}),(0,V.jsx)(Xv,{label:`Size`,value:g,...Qv,display:d.size===void 0?String(m.size):oy(d.size),authored:d.size!==void 0,onClear:d.size===void 0?void 0:()=>b({size:null}),hint:d.size===void 0?`1em follows the container — drag to pin it`:`pinned; clear to follow the container again`,onPreview:e=>v({size:`${e}px`}),onCommit:e=>b({size:`${e}px`})}),(0,V.jsx)(Xv,{label:`Leading`,value:m.leading,...$v,display:m.leading.toFixed(2),authored:d.leading!==void 0,onClear:d.leading===void 0?void 0:()=>b({leading:null}),hint:`body line-height — the whole ladder scales with it`,onPreview:e=>v({leading:e}),onCommit:e=>b({leading:e})}),(0,V.jsx)(Xv,{label:`Flow`,value:Ri(m.flow)/16,...ey,display:oy(m.flow),authored:d.flow!==void 0,onClear:d.flow===void 0?void 0:()=>b({flow:null}),hint:`space between blocks, and the air above a heading`,onPreview:e=>v({flow:`${sy(e)}em`}),onCommit:e=>b({flow:`${sy(e)}em`})}),(0,V.jsx)(mf,{}),(0,V.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[ny.map(({field:e,label:t})=>(0,V.jsx)(ay,{label:t,roles:h,value:d[e],inherited:f?void 0:p[e],onChange:t=>b({[e]:t})},e)),(0,V.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,V.jsx)(mf,{}),(0,V.jsx)(Jv,{scale:_,rootPx:g})]})}function ay({label:e,roles:t,value:n,inherited:r,onChange:i}){return(0,V.jsxs)(`label`,{className:`flex items-center gap-1.5`,children:[(0,V.jsx)(`span`,{"aria-hidden":!0,className:`size-1.5 shrink-0 rounded-full `+(n===void 0?`border border-muted-foreground/40`:`bg-primary`)}),(0,V.jsx)(`span`,{className:`w-14 shrink-0 text-xs text-muted-foreground`,children:e}),(0,V.jsx)(m_,{value:n??ty,onChange:e=>i(e===ty?null:e),options:[[ty,r?`${r} (inherited)`:`—`],...t.map(e=>[e,e])],className:`flex-1 min-w-0`})]})}function oy(e){return typeof e==`number`?`${e}px`:e}function sy(e){return Math.round(e*100)/100}function cy({className:e,...t}){return(0,V.jsx)(Ye,{"data-slot":`accordion`,className:B(`flex w-full flex-col`,e),...t})}function ly({className:e,...t}){return(0,V.jsx)(tt,{"data-slot":`accordion-item`,className:B(`not-last:border-b`,e),...t})}function uy({className:e,children:t,...n}){return(0,V.jsx)(Le,{className:`flex`,children:(0,V.jsxs)(Ve,{"data-slot":`accordion-trigger`,className:B(`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,V.jsx)(Ft,{"data-slot":`accordion-trigger-icon`,className:`pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden`}),(0,V.jsx)(Lt,{"data-slot":`accordion-trigger-icon`,className:`pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline`})]})})}function dy({className:e,children:t,...n}){return(0,V.jsx)(Pe,{"data-slot":`accordion-content`,className:`overflow-hidden text-sm data-open:animate-accordion-down data-closed:animate-accordion-up`,...n,children:(0,V.jsx)(`div`,{className:B(`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 fy=[{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 py(e){return typeof e==`string`?e:e&&typeof e==`object`?e.DEFAULT:``}function my(e){return e&&typeof e==`object`&&e.foreground?e.foreground:null}var hy=`velloo:theme-panel:sections`,gy=[`presets`,`generate`,`accessibility`];function _y(){if(typeof localStorage>`u`)return gy;let e=localStorage.getItem(hy);if(!e)return gy;try{let t=JSON.parse(e);if(Array.isArray(t))return t.filter(e=>typeof e==`string`)}catch{}return gy}function vy({theme:e,presets:t}){let[n,r]=(0,j.useState)(``),[i,a]=(0,j.useState)(null),[o,s]=(0,j.useState)(null),c=z(e=>e.themeVersion),l=z(e=>e.themeName),u=z(e=>e.refreshTheme),[d,f]=(0,j.useState)(()=>_y()),[p,m]=(0,j.useState)(null);(0,j.useEffect)(()=>{typeof localStorage>`u`||localStorage.setItem(hy,JSON.stringify(d))},[d]);let h=async()=>{if(n.trim()){a(`derive`),s(null);try{await Mo.deriveFromColor(l,n.trim()),s(`palette derived from ${n.trim()}`)}catch(e){s(`derive failed: ${e.message}`)}finally{a(null)}}};if(p!==null){let t=e.typography.fontFamily?.[p];return(0,V.jsx)(`div`,{className:`flex-1 min-h-0`,children:(0,V.jsx)(pv,{role:p,current:t?rv(t):void 0,onBack:()=>m(null),onPick:e=>{m(null),Mo.setFonts(l,[ov(p,e)]).catch(e=>{L(e,`Could not set the face`),u()})}})})}return(0,V.jsxs)(`div`,{className:`flex-1 overflow-y-auto scroll-stable p-4`,children:[(0,V.jsx)(Gv,{}),(0,V.jsxs)(cy,{type:`multiple`,value:d,onValueChange:e=>f(e),className:`flex flex-col gap-1`,children:[(0,V.jsxs)(ly,{value:`presets`,children:[(0,V.jsx)(uy,{className:`text-xs uppercase tracking-wider text-muted-foreground hover:no-underline`,children:`Presets`}),(0,V.jsx)(dy,{children:(0,V.jsx)(Uv,{presets:t,activeName:e.name})})]}),(0,V.jsxs)(ly,{value:`generate`,children:[(0,V.jsx)(uy,{className:`text-xs uppercase tracking-wider text-muted-foreground hover:no-underline`,children:`Generate`}),(0,V.jsx)(dy,{children:(0,V.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,V.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsx)(W,{htmlFor:`theme-seed`,className:`text-xs text-muted-foreground`,children:`derive palette from color`}),(0,V.jsxs)(`div`,{className:`flex gap-2`,children:[(0,V.jsx)(Z,{id:`theme-seed`,type:`text`,value:n,onChange:e=>r(e.target.value),placeholder:`#7c3aed or oklch(...)`,spellCheck:!1,className:`flex-1 text-xs font-mono`}),(0,V.jsx)(U,{variant:`outline`,size:`sm`,onClick:h,disabled:i!==null||!n.trim(),children:i===`derive`?`…`:`Apply`})]})]}),o?(0,V.jsx)(`div`,{className:`text-[10px] text-muted-foreground`,children:o}):null]})})]}),(0,V.jsxs)(ly,{value:`accessibility`,children:[(0,V.jsx)(uy,{className:`text-xs uppercase tracking-wider text-muted-foreground hover:no-underline`,children:`Accessibility`}),(0,V.jsx)(dy,{children:(0,V.jsx)(Hv,{bumpKey:c})})]}),(0,V.jsxs)(ly,{value:`fonts`,children:[(0,V.jsx)(uy,{className:`text-xs uppercase tracking-wider text-muted-foreground hover:no-underline`,children:`Fonts`}),(0,V.jsx)(dy,{children:(0,V.jsx)(av,{theme:e,onBrowse:m})})]}),(0,V.jsxs)(ly,{value:`typography`,children:[(0,V.jsx)(uy,{className:`text-xs uppercase tracking-wider text-muted-foreground hover:no-underline`,children:`Typography`}),(0,V.jsx)(dy,{children:(0,V.jsx)(iy,{theme:e})})]}),(0,V.jsxs)(ly,{value:`colors`,children:[(0,V.jsx)(uy,{className:`text-xs uppercase tracking-wider text-muted-foreground hover:no-underline`,children:`Colors`}),(0,V.jsx)(dy,{children:(0,V.jsx)(`div`,{className:`flex flex-col gap-3`,children:fy.map(t=>{let n=e.colors[t.key],r=py(n);if(!r)return null;let i=my(n);return(0,V.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsx)(Lv,{label:t.label,tokenPath:t.pair&&typeof n==`object`?`colors.${t.key}.DEFAULT`:`colors.${t.key}`,value:r}),t.pair&&i?(0,V.jsx)(`div`,{className:`pl-9`,children:(0,V.jsx)(Lv,{label:`${t.label} fg`,tokenPath:`colors.${t.key}.foreground`,value:i})}):null]},t.key)})})})]})]})]})}function yy({screenId:e}){let t=z(e=>e.rightTab),n=z(e=>e.setRightTab),r=z(e=>e.selection),i=z(e=>e.selectionIntent),a=z(e=>e.pendingCommentAnchor),o=z(e=>e.activeCommentId),s=z(e=>e.theme),c=z(e=>e.presets),l=z(e=>e.cursorMode),u=z(e=>e.wsConnected),d=z(e=>e.rightPaneCollapsed),f=z(e=>e.setRightPaneCollapsed),p=z(e=>e.rightPaneWidth),m=z(e=>e.setRightPaneWidth);(0,j.useEffect)(()=>{r&&i===`inspect`&&!a&&!o&&l!==`comment`&&n(`node`)},[r,i,a,o,l,n]);let h=l===`hand`,g=e=>{n(e),f(!1)};return(0,V.jsxs)(Mv,{side:`right`,collapsed:d,width:p,onResize:m,contentDisabled:!u,rail:(0,V.jsx)(Dv,{side:`right`,expandLabel:`Expand inspector`,hotkey:`]`,onExpand:()=>f(!1),actions:[{icon:(0,V.jsx)(Jn,{}),label:`Node`,active:t===`node`,onClick:()=>g(`node`)},{icon:(0,V.jsx)(vn,{}),label:`Comments`,active:t===`comments`,onClick:()=>g(`comments`)},{icon:(0,V.jsx)(Tn,{}),label:`Theme`,active:t===`theme`,onClick:()=>g(`theme`)}]}),children:[(0,V.jsxs)(`div`,{className:`border-b p-2 flex items-center gap-1`,children:[(0,V.jsx)(Ov,{side:`right`,label:`Collapse inspector`,hotkey:`]`,onCollapse:()=>f(!0)}),(0,V.jsx)(Wf,{value:t,onValueChange:e=>n(e),className:`min-w-0 flex-1`,children:(0,V.jsxs)(Kf,{className:`w-full h-8`,children:[(0,V.jsxs)(qf,{value:`node`,className:`text-xs`,children:[(0,V.jsx)(Jn,{}),`Node`]}),(0,V.jsxs)(qf,{value:`theme`,className:`text-xs`,children:[(0,V.jsx)(Tn,{}),`Theme`]}),(0,V.jsxs)(qf,{value:`comments`,className:`text-xs`,children:[(0,V.jsx)(vn,{}),`Comments`]})]})})]}),t===`comments`?(0,V.jsx)(jg,{}):t===`node`?h?(0,V.jsx)(by,{children:`Hand tool active. Drag to pan; press V or Esc to return to select.`}):e?(0,V.jsx)(Cv,{}):(0,V.jsx)(by,{children:`No screen selected.`}):s?(0,V.jsx)(vy,{theme:s,presets:c}):(0,V.jsx)(by,{children:(0,V.jsx)(tu,{size:24,label:`Loading theme…`,className:`flex-col`})})]})}function by({children:e}){return(0,V.jsx)(dc,{className:`flex-1 p-6`,children:(0,V.jsx)(gc,{className:`text-xs`,children:e})})}function xy({className:e,...t}){return(0,V.jsx)(`kbd`,{"data-slot":`kbd`,className:B(`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 Sy({className:e,...t}){return(0,V.jsx)(`kbd`,{"data-slot":`kbd-group`,className:B(`inline-flex items-center gap-1`,e),...t})}var Cy=[`all`,`boards`,`screens`,`text`];function wy(){let e=z(e=>e.searchOpen),t=z(e=>e.setSearchOpen),[n,r]=(0,j.useState)(``),[i,a]=(0,j.useState)(null),[o,s]=(0,j.useState)(`all`),[c,l]=(0,j.useState)(0),u=(0,j.useRef)(0),d=(0,j.useRef)(null);(0,j.useEffect)(()=>{e&&(r(``),a(null),s(`all`),l(0))},[e]),(0,j.useEffect)(()=>{if(!e)return;let t=n.trim();if(t===``){a(null);return}let r=setTimeout(()=>{let e=++u.current;Oo(t).then(t=>{e===u.current&&(a(t),l(0))}).catch(()=>{})},120);return()=>clearTimeout(r)},[n,e]);let f=(0,j.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,j.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,j.useEffect)(()=>{d.current?.querySelector(`[data-result-index="${m}"]`)?.scrollIntoView({block:`nearest`})},[m]);let h=async e=>{t(!1);let n=z.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):z.getState().revealSelection({screenId:r,path:Ws(e.hit.path)}),!a)return;let o=z.getState().boards[a]?.frames.find(e=>e.screen===r);o&&requestAnimationFrame(()=>z.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?Cy.length-1:1;s(e=>Cy[(Cy.indexOf(e)+t)%Cy.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,V.jsx)(Ec,{open:e,onOpenChange:t,children:(0,V.jsxs)(kc,{"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,V.jsx)(Mc,{className:`sr-only`,children:`Search boards, screens, and text`}),(0,V.jsxs)(qp,{className:`h-[52px] rounded-none border-0 border-b shadow-none has-[[data-slot=input-group-control]:focus-visible]:ring-0`,children:[(0,V.jsx)(Yp,{children:(0,V.jsx)(Bn,{size:17,className:`shrink-0 text-muted-foreground`})}),(0,V.jsx)(Qp,{autoFocus:!0,value:n,onChange:e=>r(e.target.value),placeholder:`Search boards, screens, and text…`,className:`text-[15px]`}),(0,V.jsx)(Yp,{align:`inline-end`,children:(0,V.jsx)(xy,{children:`esc`})})]}),y?(0,V.jsx)(Xf,{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:Cy.map(e=>(0,V.jsxs)(Zf,{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,V.jsx)(`div`,{ref:d,className:`max-h-[380px] overflow-y-auto scroll-stable pb-1.5`,children:i?p.length===0?(0,V.jsx)(dc,{className:`p-6`,children:(0,V.jsxs)(fc,{children:[(0,V.jsx)(mc,{variant:`icon`,children:(0,V.jsx)(zn,{})}),(0,V.jsxs)(hc,{children:[`No matches for “`,_,`”.`]})]})}):(0,V.jsxs)(V.Fragment,{children:[f.boards.length>0?(0,V.jsx)(Ty,{children:`Boards`}):null,f.boards.map(e=>{b+=1;let t=b;return(0,V.jsxs)(Ey,{index:t,active:t===m,onPick:()=>void h({kind:`board`,hit:e}),onHover:()=>l(t),children:[e.archived?(0,V.jsx)(Dt,{size:16,className:`shrink-0 text-muted-foreground`,"aria-label":`Archived board`}):(0,V.jsx)(on,{size:16,className:`shrink-0 text-muted-foreground`}),(0,V.jsx)(`span`,{className:`truncate text-[13.5px] ${e.archived?`text-muted-foreground`:``}`,children:(0,V.jsx)(Dy,{text:e.name,query:_})}),(0,V.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,V.jsx)(Ty,{children:`Screens`}):null,f.screens.map(e=>{b+=1;let t=b;return(0,V.jsxs)(Ey,{index:t,active:t===m,onPick:()=>void h({kind:`screen`,hit:e}),onHover:()=>l(t),children:[(0,V.jsx)($t,{size:16,className:`shrink-0 text-muted-foreground`}),(0,V.jsx)(`span`,{className:`truncate text-[13.5px]`,children:(0,V.jsx)(Dy,{text:e.name,query:_})}),(0,V.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,V.jsx)(Ty,{children:`Text matches`}):null,f.text.map(e=>{b+=1;let t=b;return(0,V.jsx)(Ey,{index:t,active:t===m,onPick:()=>void h({kind:`text`,hit:e}),onHover:()=>l(t),tall:!0,children:(0,V.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,V.jsxs)(`p`,{className:`truncate text-[13px]`,children:[`“`,e.excerpt.slice(0,e.matchStart),(0,V.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,V.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,V.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,V.jsx)(dc,{className:`p-6`,children:(0,V.jsxs)(fc,{children:[(0,V.jsx)(mc,{variant:`icon`,children:(0,V.jsx)(Bn,{})}),(0,V.jsx)(gc,{children:`Type to search board names, screen names, and text inside screens.`})]})})}),(0,V.jsxs)(`div`,{className:`flex h-10 items-center gap-4 border-t px-4 text-[11px] text-muted-foreground`,children:[(0,V.jsx)(Oy,{keys:`↑↓`,children:`navigate`}),(0,V.jsx)(Oy,{keys:`↵`,children:`jump to match`}),(0,V.jsx)(Oy,{keys:`tab`,children:`switch filter`}),i?(0,V.jsxs)(`span`,{className:`ml-auto`,children:[v,` match`,v===1?``:`es`]}):null]})]})})}function Ty({children:e}){return(0,V.jsx)(`p`,{className:`px-4 pb-1 pt-2.5 text-[10.5px] font-semibold uppercase tracking-wider text-muted-foreground`,children:e})}function Ey({index:e,active:t,tall:n,onPick:r,onHover:i,children:a}){return(0,V.jsx)(`button`,{type:`button`,"data-result-index":e,onClick:r,onMouseMove:i,className:B(`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 Dy({text:e,query:t}){let n=t?e.toLowerCase().indexOf(t.toLowerCase()):-1;return n===-1?(0,V.jsx)(V.Fragment,{children:e}):(0,V.jsxs)(V.Fragment,{children:[e.slice(0,n),(0,V.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 Oy({keys:e,children:t}){return(0,V.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,V.jsx)(Sy,{children:[...e].map(e=>(0,V.jsx)(xy,{children:e},e))}),t]})}function ky({children:e,className:t}){return(0,V.jsx)(`div`,{className:B(`text-[10.5px] font-semibold uppercase tracking-wider text-muted-foreground`,t),children:e})}function Ay({children:e}){return(0,V.jsx)(`div`,{className:`mt-2 divide-y divide-border/70`,children:e})}function jy({label:e,description:t,htmlFor:n,children:r}){let i=`block text-[13px] font-medium text-foreground`;return(0,V.jsxs)(`div`,{className:`flex items-center justify-between gap-6 py-2.5`,children:[(0,V.jsxs)(`div`,{className:`min-w-0`,children:[n?(0,V.jsx)(`label`,{htmlFor:n,className:i,children:e}):(0,V.jsx)(`div`,{className:i,children:e}),t?(0,V.jsx)(`p`,{className:`mt-0.5 text-[11.5px] leading-snug text-muted-foreground`,children:t}):null]}),(0,V.jsx)(`div`,{className:`flex shrink-0 items-center justify-end gap-3`,children:r})]})}function My({label:e,stacked:t,children:n}){return(0,V.jsxs)(`div`,{className:B(`flex gap-2 text-[12px]`,t?`items-start`:`items-center`),children:[(0,V.jsx)(`span`,{className:`w-[68px] shrink-0 text-muted-foreground`,children:e}),(0,V.jsx)(`span`,{className:B(`flex min-w-0 text-foreground`,t?`flex-col items-start gap-1`:`items-center gap-1.5`),children:n})]})}var Ny=`__default__`;function Py({cfg:e}){let t=z(e=>e.currentBoardId),n=z(e=>e.design),r=z(e=>e.boards),i=z(e=>e.loadBoard),a=z(e=>e.setBoardArchived),o=[...n?.boards??[],...n?.archivedBoards??[]],[s,c]=(0,j.useState)(t??o[0]?.id??``),l=o.find(e=>e.id===s)??null,u=r[s]??null,d=(0,j.useId)(),f=(0,j.useId)();if((0,j.useEffect)(()=>{s&&i(s).catch(()=>{})},[s,i]),!l)return(0,V.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,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-3 rounded-lg border border-border bg-muted/40 px-3 py-2.5`,children:[(0,V.jsx)(on,{className:`size-4 shrink-0 text-muted-foreground`}),(0,V.jsx)(`span`,{className:`text-[12px] text-muted-foreground`,children:`Editing`}),(0,V.jsxs)(G,{value:s,onValueChange:c,children:[(0,V.jsx)(q,{className:`ml-auto w-[300px] bg-background text-[13px]`,children:(0,V.jsx)(K,{})}),(0,V.jsxs)(J,{children:[(n?.boards??[]).map(e=>(0,V.jsx)(Y,{value:e.id,children:e.name},e.id)),(n?.archivedBoards??[]).map(e=>(0,V.jsxs)(Y,{value:e.id,children:[e.name,` (archived)`]},e.id))]})]})]}),(0,V.jsx)(ky,{className:`mt-5`,children:`Identity`}),(0,V.jsxs)(Ay,{children:[(0,V.jsx)(jy,{label:`Name`,description:`Shown in the sidebar, search, and published links.`,htmlFor:d,children:(0,V.jsx)(Iy,{id:d,value:l.name,onCommit:async e=>{if(e!==l.name)try{await F.updateBoard({boardId:s,patch:{name:e}})}catch(e){L(e,`Could not rename the board`)}}})}),(0,V.jsx)(jy,{label:`Board id`,description:`The filename on disk. Fixed once created — frames and links point at it.`,children:(0,V.jsxs)(`div`,{className:`flex w-[300px] items-center gap-2 rounded-md bg-muted px-2.5 py-1.5`,children:[(0,V.jsxs)(`span`,{className:`truncate font-mono text-[12px] text-muted-foreground`,children:[`boards/`,s,`.json`]}),(0,V.jsx)(fn,{className:`ml-auto size-3 shrink-0 text-muted-foreground`})]})})]}),(0,V.jsx)(ky,{className:`mt-5`,children:`Theme`}),(0,V.jsx)(Ay,{children:(0,V.jsx)(jy,{label:`Render this board with`,description:`Every frame here re-renders on change. Screens are untouched.`,htmlFor:f,children:(0,V.jsxs)(G,{value:u?.theme??Ny,onValueChange:async e=>{try{await F.updateBoard({boardId:s,patch:{theme:e===Ny?null:e}}),await i(s)}catch(e){L(e,`Could not change the board theme`)}},children:[(0,V.jsx)(q,{id:f,className:`w-[300px] text-[13px]`,children:(0,V.jsx)(K,{})}),(0,V.jsxs)(J,{children:[(0,V.jsx)(Y,{value:Ny,children:`Folder default`}),e.themes.filter(e=>e!=="default").map(e=>(0,V.jsx)(Y,{value:e,children:e},e))]})]})})}),(0,V.jsx)(ky,{className:`mt-5`,children:`Contents`}),(0,V.jsxs)(`div`,{className:`mt-2 grid grid-cols-3 gap-3`,children:[(0,V.jsx)(Fy,{n:u?.frames.length??l.frameCount,label:`frames`}),(0,V.jsx)(Fy,{n:m,label:m===1?`screen`:`screens`}),(0,V.jsx)(Fy,{n:u?.groups.length??0,label:u?.groups.length===1?`group`:`groups`})]}),(0,V.jsxs)(`div`,{className:`mt-4 flex items-start gap-3 rounded-lg border border-border bg-muted/30 p-3`,children:[p?(0,V.jsx)(Et,{className:`mt-0.5 size-4 shrink-0 text-muted-foreground`}):(0,V.jsx)(Dt,{className:`mt-0.5 size-4 shrink-0 text-muted-foreground`}),(0,V.jsxs)(`div`,{className:`min-w-0`,children:[(0,V.jsx)(`div`,{className:`text-[13px] font-medium text-foreground`,children:p?`This board is archived`:`Archive this board`}),(0,V.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,V.jsx)(U,{variant:`outline`,size:`sm`,className:`ml-auto h-8 shrink-0 text-[12.5px]`,onClick:()=>{a(s,!p).catch(e=>L(e,p?`Could not restore the board`:`Could not archive it`))},children:p?`Restore`:`Archive`})]})]})}function Fy({n:e,label:t}){return(0,V.jsxs)(`div`,{className:`rounded-lg bg-muted/50 px-3 py-2`,children:[(0,V.jsx)(`div`,{className:`text-[18px] font-semibold leading-tight text-foreground`,children:e}),(0,V.jsx)(`div`,{className:`text-[11px] text-muted-foreground`,children:t})]})}function Iy({id:e,value:t,onCommit:n}){let[r,i]=(0,j.useState)(t);return(0,j.useEffect)(()=>i(t),[t]),(0,V.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 Ly({className:e,size:t=`default`,...n}){return(0,V.jsx)(Ie,{"data-slot":`switch`,"data-size":t,className:B(`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,V.jsx)(et,{"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`})})}function Ry(){let e=z(e=>e.appTheme),t=z(e=>e.setAppTheme),n=z(e=>e.designMode),r=z(e=>e.rememberDesignMode),i=z(e=>e.setRememberDesignMode),a=z(e=>e.rememberPanels),o=z(e=>e.setRememberPanels),s=z(e=>e.resetCanvasPrefs);return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(ky,{children:`Appearance`}),(0,V.jsxs)(Ay,{children:[(0,V.jsx)(jy,{label:`App theme`,description:`Velloo's own chrome — the toolbar, sidebar, and panels.`,children:(0,V.jsxs)(Xf,{type:`single`,variant:`outline`,size:`sm`,value:e,"aria-label":`App theme`,onValueChange:e=>e&&t(e),children:[(0,V.jsxs)(Zf,{value:`light`,className:`px-3 text-[12px]`,children:[(0,V.jsx)($n,{className:`size-3.5`}),`Light`]}),(0,V.jsxs)(Zf,{value:`dark`,className:`px-3 text-[12px]`,children:[(0,V.jsx)(xn,{className:`size-3.5`}),`Dark`]}),(0,V.jsxs)(Zf,{value:`system`,className:`px-3 text-[12px]`,children:[(0,V.jsx)(bn,{className:`size-3.5`}),`System`]})]})}),(0,V.jsxs)(jy,{label:`Remember the design preset`,description:`Reopen the canvas in whichever preset you last used. Off means every reload starts light.`,children:[(0,V.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,V.jsx)(xn,{className:`size-3.5`}):(0,V.jsx)($n,{className:`size-3.5`}),`now: `,n]}),(0,V.jsx)(Ly,{"aria-label":`Remember the design preset`,checked:r,onCheckedChange:i})]})]}),(0,V.jsx)(ky,{className:`mt-5`,children:`Layout`}),(0,V.jsx)(Ay,{children:(0,V.jsx)(jy,{label:`Remember panel layout`,description:`Side pane widths and collapse, boards list, and screen tree stay as you left them.`,children:(0,V.jsx)(Ly,{"aria-label":`Remember panel layout`,checked:a,onCheckedChange:o})})}),(0,V.jsxs)(`div`,{className:`mt-5 flex items-start gap-3 rounded-lg border border-border bg-muted/30 p-3`,children:[(0,V.jsx)(Rn,{className:`mt-0.5 size-4 shrink-0 text-muted-foreground`}),(0,V.jsxs)(`div`,{className:`min-w-0`,children:[(0,V.jsx)(`div`,{className:`text-[13px] font-medium text-foreground`,children:`Reset canvas preferences`}),(0,V.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,V.jsx)(U,{variant:`outline`,size:`sm`,className:`ml-auto h-8 shrink-0 text-[12.5px]`,onClick:()=>{s(),I({kind:`success`,message:`Canvas preferences reset.`})},children:`Reset`})]}),(0,V.jsxs)(`div`,{className:`mt-4 flex items-center gap-2 rounded-lg bg-muted/50 px-3 py-2`,children:[(0,V.jsx)(rn,{className:`size-3.5 shrink-0 text-muted-foreground`}),(0,V.jsx)(`span`,{className:`text-[11.5px] text-muted-foreground`,children:`Signing in and credits live in the account menu, top right.`})]})]})}var zy={"shadcn-upstream":`shadcn`,mui:`Material UI`,antd:`Ant Design`,chakra:`Chakra UI`,none:`No library`};function By(e){return zy[e]??e}function Vy(e){return/^\d{4}\./.test(e)?`snapshot ${e}`:`v${e}`}function Hy(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 Uy(e){return e.source!==`in-repo`}function Wy(e,t){if(!t)return!0;let n=e.id.toLowerCase();return n!=="default"&&n!==e.providerId.toLowerCase()&&n!==By(e.providerId).toLowerCase()}function Gy(e){return[...e.libraries].sort((t,n)=>Number(n.id===e.defaultLibrary)-Number(t.id===e.defaultLibrary))}function Ky(e){return new Set(e.map(e=>e.styleLabel)).size>1}function qy(e){return e.libraries.find(t=>t.id===e.defaultLibrary)?.styleLabel??(e.styling===`none`?`Inline styles`:`Tailwind classes`)}var Jy=`__none__`;function Yy(e){return e<600?Kn:e<1100?er:bn}function Xy({cfg:e}){let t=z(e=>e.design?.boards??[]),n=z(e=>e.design?.screens??[]),r=z(e=>e.loadFolderConfig),i=(0,j.useId)(),a=(0,j.useId)(),o=(0,j.useId)(),s=(0,j.useId)(),c=(0,j.useId)(),l=async(e,t)=>{try{await t(),await r()}catch(t){L(t,e),await r().catch(()=>{})}};return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(ky,{children:`Design`}),(0,V.jsx)(Ay,{children:(0,V.jsx)(jy,{label:`Name`,description:`What velloo commands, agents and the canvas call this design. Unique in this repo.`,htmlFor:i,children:(0,V.jsx)(eb,{id:i,value:e.designName,onCommit:e=>l(`Could not rename the design`,async()=>{await yo.designName(e),I({kind:`success`,message:`Renamed to "${e}"`})})})})}),(0,V.jsx)(ky,{className:`mt-5`,children:`Opens on`}),(0,V.jsxs)(Ay,{children:[(0,V.jsx)(jy,{label:`Board`,description:`Pins every load to one board. Unset, the canvas reopens the board you were last on.`,htmlFor:a,children:(0,V.jsxs)(G,{value:e.defaultBoard??Jy,onValueChange:e=>l(`Could not set the default board`,()=>yo.defaults({defaultBoard:e===Jy?null:e})),children:[(0,V.jsx)(q,{id:a,className:`w-[252px] text-[13px]`,children:(0,V.jsx)(K,{})}),(0,V.jsxs)(J,{children:[(0,V.jsx)(Y,{value:Jy,children:`Where you left off`}),t.map(e=>(0,V.jsx)(Y,{value:e.id,children:e.name},e.id))]})]})}),(0,V.jsx)(jy,{label:`Screen`,description:`Focused after load. Optional.`,htmlFor:o,children:(0,V.jsxs)(G,{value:e.defaultScreen??Jy,onValueChange:e=>l(`Could not set the default screen`,()=>yo.defaults({defaultScreen:e===Jy?null:e})),children:[(0,V.jsx)(q,{id:o,className:`w-[252px] text-[13px]`,children:(0,V.jsx)(K,{})}),(0,V.jsxs)(J,{children:[(0,V.jsx)(Y,{value:Jy,children:`No screen — fit the whole board`}),n.map(e=>(0,V.jsx)(Y,{value:e.id,children:e.name},e.id))]})]})})]}),(0,V.jsxs)(`div`,{className:`mt-5 flex items-baseline gap-2`,children:[(0,V.jsx)(ky,{children:`Viewport presets`}),(0,V.jsx)(`span`,{className:`text-[11.5px] text-muted-foreground`,children:`— offered when you add a frame`})]}),(0,V.jsx)(ib,{presets:e.viewportPresets,onCommit:l}),(0,V.jsx)(ky,{className:`mt-5`,children:`Code generation & feedback`}),(0,V.jsxs)(Ay,{children:[(0,V.jsx)(jy,{label:`Components import alias`,description:`Prefix emit_code writes for library imports.`,htmlFor:s,children:(0,V.jsx)(tb,{id:s,value:e.componentsAlias,onCommit:e=>l(`Could not save the import alias`,()=>yo.codegen({componentsAlias:e}))})}),(0,V.jsxs)(`div`,{className:`py-2.5`,children:[(0,V.jsxs)(`div`,{className:`flex items-center justify-between gap-6`,children:[(0,V.jsxs)(`div`,{className:`min-w-0`,children:[(0,V.jsx)(`div`,{className:`text-[13px] font-medium text-foreground`,children:`Send product feedback`}),(0,V.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,V.jsx)(Ly,{"aria-label":`Send product feedback`,checked:e.feedback.enabled,onCheckedChange:e=>l(`Could not change the feedback setting`,()=>yo.feedback({enabled:e}))})]}),(0,V.jsxs)(`label`,{htmlFor:c,className:`mt-2 flex items-start gap-2 border-l-2 border-border pl-3`,children:[(0,V.jsx)(jh,{id:c,className:`mt-0.5 size-3.5`,checked:e.feedback.contactOk,onCheckedChange:e=>l(`Could not change the contact setting`,()=>yo.feedback({contactOk:e===!0}))}),(0,V.jsxs)(`span`,{className:`min-w-0`,children:[(0,V.jsx)(`span`,{className:`block text-[12.5px] text-foreground`,children:`Velloo may contact me about what I send`}),(0,V.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,V.jsx)(ky,{className:`mt-5`,children:`What init decided`}),(0,V.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,V.jsx)(`div`,{className:`col-span-2 min-w-0`,children:(0,V.jsx)(Zy,{cfg:e})}),(0,V.jsx)(My,{label:`Styling`,children:Ky(e.libraries)?(0,V.jsx)(`span`,{className:`text-muted-foreground`,children:`per library`}):qy(e)}),(0,V.jsxs)(My,{label:`Format`,children:[`schema v`,e.schemaVersion,` · velloo `,e.toolVersion]}),(0,V.jsx)(`div`,{className:`col-span-2 min-w-0`,children:(0,V.jsx)(My,{label:`Cloud id`,children:e.folderId?(0,V.jsx)($y,{id:e.folderId}):(0,V.jsx)(Qy,{})})})]})]})}function Zy({cfg:e}){if(e.libraries.length===0)return(0,V.jsx)(My,{label:`Library`,children:e.defaultLibrary});let t=Gy(e),n=t.length>1,r=Ky(t);return(0,V.jsx)(My,{label:`Library`,stacked:n,children:t.map(t=>{let i=Hy(t.source,t.version),a=t.id===e.defaultLibrary;return(0,V.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5`,children:[n&&Wy(t,a)?(0,V.jsx)(`span`,{className:`shrink-0 font-mono text-[11px] text-muted-foreground`,children:t.id}):null,(0,V.jsx)(`span`,{className:`truncate`,children:By(t.providerId)}),Uy(t)?(0,V.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:Vy(t.version)}):null,(0,V.jsx)(H,{variant:`secondary`,title:i.title,className:`h-4 shrink-0 px-1.5 text-[10px] font-normal`,children:i.text}),r&&t.styleLabel?(0,V.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:t.styleLabel}):null,n&&a?(0,V.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:`· default`}):null]},t.id)})})}function Qy(){return(0,V.jsx)(`span`,{className:`text-muted-foreground`,children:`Not published yet`})}function $y({id:e}){let[t,n]=(0,j.useState)(!1);return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`span`,{className:`truncate font-mono text-[11px]`,children:e}),(0,V.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,V.jsx)(Pt,{className:`size-3`}):(0,V.jsx)(Ut,{className:`size-3`})})]})}function eb({id:e,value:t,onCommit:n}){let[r,i]=(0,j.useState)(t),a=(0,j.useRef)(t);return a.current=t,(0,j.useEffect)(()=>i(t),[t]),(0,V.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 tb({id:e,value:t,onCommit:n}){let[r,i]=(0,j.useState)(t??``);return(0,j.useEffect)(()=>i(t??``),[t]),(0,V.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 nb=0,rb=e=>({key:nb++,preset:e});function ib({presets:e,onCommit:t}){let[n,r]=(0,j.useState)(()=>e.map(rb));(0,j.useEffect)(()=>r(e.map(rb)),[e]);let i=n.map(e=>e.preset),a=e=>{r(e),t(`Could not save the viewport presets`,()=>yo.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)){I({kind:`error`,message:`A viewport preset needs a name and a positive width and height.`}),r(e.map(rb));return}a(n)}};return(0,V.jsxs)(`div`,{className:`mt-2 overflow-hidden rounded-lg border border-border`,children:[n.map(({key:e,preset:t},r)=>{let i=Yy(t.w);return(0,V.jsxs)(`div`,{className:`flex items-center gap-3 border-b border-border px-3 py-1.5 last:border-b-0`,children:[(0,V.jsx)(i,{className:`size-4 shrink-0 text-muted-foreground`}),(0,V.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,V.jsxs)(`div`,{className:`ml-auto flex items-center gap-1.5`,children:[(0,V.jsx)(ob,{label:`Preset ${r+1} width`,value:t.w,onChange:t=>o(e,{w:t}),onCommit:s}),(0,V.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:`×`}),(0,V.jsx)(ob,{label:`Preset ${r+1} height`,value:t.h,onChange:t=>o(e,{h:t}),onCommit:s})]}),(0,V.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,V.jsx)(tr,{className:`size-3.5`})})]},e)}),(0,V.jsxs)(`div`,{className:`flex items-center gap-3 border-t border-border px-3 py-1.5`,children:[(0,V.jsxs)(U,{variant:`ghost`,size:`sm`,className:`h-7 gap-1.5 px-2 text-[12.5px] text-muted-foreground`,onClick:()=>a([...n,rb({name:ab(i),w:1440,h:900})]),children:[(0,V.jsx)(Pn,{className:`size-3.5`}),`Add preset`]}),(0,V.jsx)(`span`,{className:`ml-auto text-[11px] text-muted-foreground`,children:`At least one preset is required.`})]})]})}function ab(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 ob({label:e,value:t,onChange:n,onCommit:r}){return(0,V.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 sb=[{id:`design`,label:`Design`,icon:Mn},{id:`board`,label:`Board`,icon:on},{id:`canvas`,label:`Canvas`,icon:Gn}],cb={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 lb(){let e=z(e=>e.settingsScope),t=z(e=>e.setSettingsScope),n=z(e=>e.folderConfig),r=z(e=>e.loadFolderConfig),i=z(e=>e.currentBoardId),a=z(e=>e.design?.boards.find(t=>t.id===e.currentBoardId)?.name??null);(0,j.useEffect)(()=>{e!==null&&r().catch(e=>L(e,`Could not load design settings`))},[e,r]);let o=e?cb[e]:cb.design;return(0,V.jsx)(Ec,{open:e!==null,onOpenChange:e=>!e&&t(null),children:(0,V.jsxs)(kc,{className:B(`flex h-[min(800px,85vh)] w-[920px] max-w-[calc(100vw-2rem)] gap-0 overflow-hidden p-0`,`sm:max-w-[920px]`),children:[(0,V.jsxs)(`nav`,{className:`flex w-[216px] shrink-0 flex-col border-r border-border bg-muted/40 p-3`,children:[(0,V.jsx)(`div`,{className:`px-2 pb-2 pt-1 text-[10.5px] font-semibold uppercase tracking-wider text-muted-foreground`,children:`Settings`}),sb.map(({id:n,label:r,icon:i})=>(0,V.jsxs)(`button`,{type:`button`,onClick:()=>t(n),className:B(`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,V.jsx)(i,{className:`size-4 shrink-0`}),r,n===`board`&&a?(0,V.jsx)(`span`,{className:`ml-auto max-w-[86px] truncate text-[10.5px] font-normal text-muted-foreground`,children:a}):null]},n)),n?(0,V.jsxs)(`div`,{className:`mt-auto rounded-md border border-dashed border-border px-2.5 py-2`,children:[(0,V.jsx)(`div`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground`,children:`Design folder`}),(0,V.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,V.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,V.jsxs)(Ac,{className:`gap-0 border-b border-border px-6 py-4 pr-12 text-left`,children:[(0,V.jsx)(Mc,{className:`text-[15px] font-semibold leading-tight`,children:o.title}),(0,V.jsx)(Nc,{className:`mt-1 text-[11.5px]`,children:o.description})]}),(0,V.jsx)(`div`,{className:`flex-1 overflow-y-auto px-6 pb-6 pt-4`,children:e===`canvas`?(0,V.jsx)(Ry,{}):n===null?(0,V.jsx)(tu,{size:24,label:`Loading settings…`,className:`flex-col pt-12 text-[13px] text-muted-foreground`}):e===`board`?(0,V.jsx)(Py,{cfg:n},i??``):(0,V.jsx)(Xy,{cfg:n})}),(0,V.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,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(bn,{className:`size-3.5 text-muted-foreground`}),(0,V.jsx)(`span`,{className:`text-[11.5px] text-muted-foreground`,children:`This browser only.`})]}):(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(Pt,{className:`size-3.5 text-muted-foreground`}),(0,V.jsx)(`span`,{className:`text-[11.5px] text-muted-foreground`,children:`Changes save as you make them.`})]}),(0,V.jsx)(U,{size:`sm`,className:`ml-auto h-8 text-[13px]`,onClick:()=>t(null),children:`Done`})]})]})]})})}var ub=`Disconnected — board switching resumes when the daemon is back.`;function db(){let e=z(e=>e.selectBoard),t=z(e=>e.wsConnected);return(n,r)=>{if(!t&&!r){I({kind:`error`,message:ub});return}e(n)}}function fb(){return(0,V.jsx)(H,{variant:`outline`,className:`ml-auto h-4 px-1.5 text-[10px] font-normal`,children:`Paid plan`})}function pb({board:e,active:t,groups:n,drag:r,onRename:i,onAddFrame:a,onMoveToGroup:o,onNewGroup:s,onArchive:c,onDelete:l}){let u=z(e=>e.wsConnected),d=z(t=>!!t.boardPulse[e.id]),f=z(e=>hr(e.authStatus?.account?.tier)),p=z(e=>e.publishSlots),m=z(e=>e.refreshPublishSlots),h=db(),g=Lo(p,e.id),_=t=>z.getState().publishBoardNow({id:e.id,name:e.name},t);return(0,V.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,V.jsxs)(`button`,{type:`button`,onClick:()=>h(e.id,t),title:!u&&!t?ub: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,V.jsxs)(`div`,{className:`font-medium truncate`,children:[e.name,!t&&d?(0,V.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,V.jsxs)(`div`,{className:`text-xs ${t?`text-primary-foreground/80`:`text-muted-foreground`}`,children:[e.frameCount,` frame`,e.frameCount===1?``:`s`]})]}),(0,V.jsxs)(ol,{onOpenChange:e=>e&&void m(),children:[(0,V.jsx)(sl,{asChild:!0,children:(0,V.jsx)(U,{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,V.jsx)(Kt,{})})}),(0,V.jsxs)(cl,{align:`end`,className:cc,children:[(0,V.jsxs)(X,{disabled:!u,onSelect:i,children:[(0,V.jsx)(Nn,{}),`Rename board`]}),(0,V.jsxs)(X,{disabled:!u,onSelect:a,children:[(0,V.jsx)($t,{}),`Add frame…`]}),(0,V.jsxs)(dl,{children:[(0,V.jsxs)(fl,{children:[(0,V.jsx)(Un,{}),`Publish board`]}),(0,V.jsxs)(pl,{children:[(0,V.jsxs)(X,{onSelect:()=>_(`public`),children:[(0,V.jsx)(dn,{}),`Public`]}),(0,V.jsxs)(X,{disabled:!f,onSelect:()=>_(`private`),children:[(0,V.jsx)(fn,{}),`Private`,f?null:(0,V.jsx)(fb,{})]}),(0,V.jsxs)(X,{disabled:!f,onSelect:()=>_(`password`),children:[(0,V.jsx)(Wn,{}),`Password protected…`,f?null:(0,V.jsx)(fb,{})]})]})]}),g?(0,V.jsx)(X,{asChild:!0,children:(0,V.jsxs)(`a`,{href:g.url,target:`_blank`,rel:`noreferrer`,className:`text-inherit no-underline`,title:`Published ${Eg(g.lastPublishedAt)}`,"data-testid":`board-latest-publish`,children:[(0,V.jsx)(qt,{}),`See latest publish`]})}):null,(0,V.jsxs)(dl,{children:[(0,V.jsxs)(fl,{disabled:!u,children:[(0,V.jsx)(Zt,{}),`Move to group`]}),(0,V.jsxs)(pl,{children:[n.map(t=>(0,V.jsxs)(X,{onSelect:()=>o(t.id),children:[(0,V.jsx)(`span`,{className:`size-2.5 rounded-[3px]`,style:{backgroundColor:t.color??`var(--muted-foreground)`}}),t.name,e.group===t.id?(0,V.jsx)(Pt,{className:`ml-auto`}):null]},t.id)),(0,V.jsxs)(X,{onSelect:()=>o(null),children:[(0,V.jsx)(`span`,{className:`size-2.5 rounded-[3px] border border-dashed`}),`No group`,e.group?null:(0,V.jsx)(Pt,{className:`ml-auto`})]}),(0,V.jsxs)(X,{onSelect:s,children:[(0,V.jsx)(Qt,{}),`New group…`]})]})]}),(0,V.jsxs)(X,{onSelect:()=>z.getState().setExportTarget({kind:`board`,id:e.id,name:e.name}),children:[(0,V.jsx)(Gt,{}),`Export board…`]}),(0,V.jsxs)(X,{disabled:!u,onSelect:c,children:[(0,V.jsx)(Dt,{}),`Archive board`]}),(0,V.jsxs)(X,{variant:`destructive`,disabled:!u,onSelect:l,children:[(0,V.jsx)(tr,{}),`Delete board`]})]})]})]})}function mb(e){let t=new Date(e);return Number.isNaN(t.getTime())?`archived`:t.toLocaleDateString(void 0,{month:`short`,day:`numeric`})}function hb({boards:e,currentBoardId:t,open:n,onToggle:r,onRestore:i,onDelete:a}){let o=z(e=>e.wsConnected),s=db();return(0,V.jsxs)(`div`,{className:`shrink-0 border-t px-2 py-1.5`,children:[(0,V.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:[n?(0,V.jsx)(Ft,{size:12,strokeWidth:2.5,className:`shrink-0`}):(0,V.jsx)(It,{size:12,strokeWidth:2.5,className:`shrink-0`}),(0,V.jsx)(Dt,{size:11,strokeWidth:2,className:`shrink-0`}),` Archived`,(0,V.jsxs)(`span`,{className:`normal-case opacity-60`,children:[`(`,e.length,`)`]})]}),n?(0,V.jsx)(`ul`,{className:`mt-0.5 flex flex-col gap-0.5`,children:e.map(e=>{let n=e.id===t;return(0,V.jsxs)(`li`,{className:`relative group/board rounded-md`,children:[(0,V.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,V.jsx)(`div`,{className:`truncate`,children:e.name}),(0,V.jsxs)(`div`,{className:`text-xs `+(n?`text-primary-foreground/80`:`text-muted-foreground/70`),children:[e.frameCount,` frame`,e.frameCount===1?``:`s`,e.archivedAt?` · ${mb(e.archivedAt)}`:``]})]}),(0,V.jsxs)(ol,{children:[(0,V.jsx)(sl,{asChild:!0,children:(0,V.jsx)(U,{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,V.jsx)(Kt,{})})}),(0,V.jsxs)(cl,{align:`end`,className:cc,children:[(0,V.jsxs)(X,{disabled:!o,onSelect:()=>i(e),children:[(0,V.jsx)(Et,{}),`Restore board`]}),(0,V.jsxs)(X,{variant:`destructive`,disabled:!o,onSelect:()=>a(e),children:[(0,V.jsx)(tr,{}),`Delete board`]})]})]})]},e.id)})}):null]})}var gb=[{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 _b({group:e,count:t,collapsed:n,dropTarget:r,disabled:i,onToggle:a,onDragOver:o,onRename:s,onRecolor:c,onDelete:l}){return(0,V.jsxs)(`li`,{onDragOver:o,className:`group/gr relative flex items-center rounded-md pr-7 ${r?`bg-accent`:``}`,children:[(0,V.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:[n?(0,V.jsx)(It,{size:12,strokeWidth:2.5,className:`shrink-0 text-muted-foreground`}):(0,V.jsx)(Ft,{size:12,strokeWidth:2.5,className:`shrink-0 text-muted-foreground`}),(0,V.jsx)(`span`,{className:`size-2.5 shrink-0 rounded-[3px]`,style:{backgroundColor:e.color??`var(--muted-foreground)`}}),(0,V.jsx)(`span`,{className:`truncate text-xs font-semibold`,children:e.name}),(0,V.jsx)(`span`,{className:`ml-auto text-[10px] text-muted-foreground`,children:t})]}),(0,V.jsxs)(ol,{children:[(0,V.jsx)(sl,{asChild:!0,children:(0,V.jsx)(U,{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,V.jsx)(Kt,{})})}),(0,V.jsxs)(cl,{align:`end`,className:cc,children:[(0,V.jsxs)(X,{disabled:i,onSelect:s,children:[(0,V.jsx)(Nn,{}),`Rename group`]}),(0,V.jsxs)(dl,{children:[(0,V.jsxs)(fl,{disabled:i,children:[(0,V.jsx)(Tn,{}),`Color`]}),(0,V.jsx)(pl,{children:gb.map(({value:t,label:n})=>(0,V.jsxs)(X,{onSelect:()=>c(t),children:[(0,V.jsx)(`span`,{className:`size-3 rounded-[3px]`,style:{backgroundColor:t}}),n,e.color===t?(0,V.jsx)(Pt,{className:`ml-auto`}):null]},t))})]}),(0,V.jsxs)(X,{variant:`destructive`,disabled:i,onSelect:l,children:[(0,V.jsx)(tr,{}),`Delete group`]})]})]})]})}var vb=(e,t=28)=>e.length>t?`${e.slice(0,t-1)}…`:e;function yb(e){if(ri(e)){let t=Object.entries(e.args??{}),n=t.find(([,e])=>typeof e==`string`&&e.trim());return n?vb(n[1].trim()):t.length>0?`${t.length} args`:null}if(ii(e))return 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 vb(n.trim());if(typeof n==`number`)return String(n)}if(typeof t.className==`string`){let e=t.className.trim();if(e)return vb(`.${e.split(/\s+/)[0]}`)}return null}function bb(e){if(ri(e))return`@${e.$snippet}`;if(ii(e))return`\${${e.$param}}`;let t=Qu(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 xb(e){return ni(e)?e.children:void 0}function Sb(e,t){if(!ni(e))return null;let n=t.get(e.$ref);return n?n.kind===`extension`?{Icon:Fn,tone:`text-primary`,title:`${e.$ref} — a custom component registered with add_extension.`}:n.source===`velloo`?null:{Icon:Ht,tone:`text-primary`,title:`${e.$ref} — a real ${n.source} component from this project's library.`}:{Icon:nr,tone:`text-destructive`,title:`${e.$ref} isn't in this screen's library — it renders as a fallback.`}}function Cb({node:e,path:t,screenId:n,depth:r,expandedSet:i,setExpanded:a,byId:o}){let s=Ws(t),c=z(e=>e.setSelection),l=z(e=>e.setHover),u=z(e=>e.openSnippetEditor),d=z(e=>e.selection?.screenId===n&&e.selection.path===s),f=z(e=>e.hover?.screenId===n&&e.hover.path===s),p=(0,j.useRef)(null);(0,j.useEffect)(()=>{d&&p.current?.scrollIntoView({block:`nearest`})},[d]);let m=xb(e),h=(m?.length??0)>0,g=h?i.has(s):!1,_=yb(e),v=ri(e)?e.$snippet:null,y=Sb(e,o),b=[`w-full flex items-center gap-1 px-2 py-1 rounded-sm text-sm cursor-default select-none text-left group/row`,d?`bg-primary text-primary-foreground`:f?`bg-muted`:`hover:bg-muted text-foreground`].join(` `);return(0,V.jsxs)(`div`,{children:[(0,V.jsxs)(`div`,{ref:p,className:b,style:{paddingLeft:`${.5+r*.875}rem`},children:[(0,V.jsx)(`button`,{type:`button`,onClick:()=>a(s,!g),className:`inline-flex w-4 h-4 items-center justify-center text-xs opacity-60 shrink-0`,"aria-label":g?`Collapse`:`Expand`,disabled:!h,children:h?g?`▾`:`▸`:``}),(0,V.jsxs)(`button`,{type:`button`,onClick:()=>c({screenId:n,path:s}),onDoubleClick:()=>{v&&u(v)},onMouseEnter:()=>l({screenId:n,path:s}),onMouseLeave:()=>l(null),onKeyDown:e=>{e.key===`ArrowRight`&&h&&!g?(e.preventDefault(),a(s,!0)):e.key===`ArrowLeft`&&h&&g?(e.preventDefault(),a(s,!1)):e.key===`Enter`&&v&&(e.preventDefault(),u(v))},className:`flex shrink-0 items-center gap-1 text-left text-inherit`,title:v?`Double-click or Enter to open ${v} in canvas`:void 0,children:[(0,V.jsx)(`span`,{className:`font-medium whitespace-nowrap`,children:bb(e)}),y?(0,V.jsx)(`span`,{role:`img`,"aria-label":y.title,title:y.title,className:`inline-flex shrink-0 ${d?`text-primary-foreground`:y.tone}`,children:(0,V.jsx)(y.Icon,{size:11,strokeWidth:2,"aria-hidden":!0})}):null,fi(e)?(0,V.jsxs)(H,{variant:`outline`,className:`shrink-0 px-1 py-0 font-mono text-[10px] leading-none `+(d?`border-primary-foreground/40 text-primary-foreground`:`text-muted-foreground`),title:`Stable anchor: @${fi(e)}`,children:[`@`,fi(e)]}):null,_?(0,V.jsx)(`span`,{className:`whitespace-nowrap text-xs opacity-70 `+(d?`text-primary-foreground`:`text-muted-foreground`),children:_}):null]}),(0,V.jsx)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),z.getState().locateNode(n,s)},className:`ml-auto shrink-0 inline-flex items-center justify-center w-5 h-5 rounded opacity-0 group-hover/row:opacity-70 hover:opacity-100 transition-opacity `+(d?`text-primary-foreground`:`text-muted-foreground`),"aria-label":`Locate on canvas`,title:`Locate on canvas (centers and zooms to this node)`,"data-locate-node":s,children:(0,V.jsx)(Wt,{size:11,strokeWidth:2})}),v?(0,V.jsx)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),u(v)},className:`shrink-0 inline-flex items-center justify-center w-5 h-5 rounded opacity-0 group-hover/row:opacity-70 hover:opacity-100 transition-opacity `+(d?`text-primary-foreground`:`text-muted-foreground`),"aria-label":`Open ${v} in canvas`,title:`Open ${v} in canvas`,children:(0,V.jsx)(An,{size:11,strokeWidth:2})}):null]}),h&&g?(0,V.jsx)(`div`,{children:m?.map((e,c)=>{let l=`${s===``?``:`${s}.`}${c}`;return(0,V.jsx)(Cb,{node:e,path:[...t,c],screenId:n,depth:r+1,expandedSet:i,setExpanded:a,byId:o},l)})}):null]})}function wb(e){let t=new Set;for(let n=0;n<e.length;n++)t.add(Ws(e.slice(0,n)));return t}function Tb(e,t=[],n=new Set){n.add(Ws(t));let r=xb(e);if(r)for(let e=0;e<r.length;e++){let i=r[e];i&&Tb(i,[...t,e],n)}return n}function Eb({screen:e}){let t=z(e=>e.selection),n=z(e=>e.components),r=z(e=>e.loadComponents);(0,j.useEffect)(()=>{r()},[r]);let i=(0,j.useMemo)(()=>new Map((n??[]).map(e=>[e.id,e])),[n]),[a,o]=(0,j.useState)(()=>Tb(e.tree)),s=(e,t)=>{o(n=>{let r=new Set(n);return t?r.add(e):r.delete(e),r})},c=(0,j.useMemo)(()=>{if(t?.screenId!==e.id)return a;let n=wb(R(t.path)),r=new Set(a);for(let e of n)r.add(e);return r},[a,t,e.id]);return(0,V.jsx)(`div`,{className:`flex w-max min-w-full flex-col py-1`,children:(0,V.jsx)(Cb,{node:e.tree,path:[],screenId:e.id,depth:0,expandedSet:c,setExpanded:s,byId:i})})}function Db({screens:e,currentBoardId:t,currentScreenId:n}){let r=z(e=>e.selectScreen),i=z(e=>e.cursorMode),a=z(e=>e.treeCollapsed),o=z(e=>e.toggleTreeCollapsed),s=z(e=>n?e.screens[n]??null:null),c=z(e=>e.snippetFocus),l=z(e=>e.setSnippetFocus),u=z(e=>e.snippetFocus?e.screens[`snippet:${e.snippetFocus}`]??null:null),d=u??s,f=z(e=>t?e.boards[t]??null:null),p=(0,j.useMemo)(()=>{if(!f)return[];let t=new Map(e.map(e=>[e.id,e])),r=new Set,i=[];for(let e of f.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},[f,e,n]);return(0,V.jsxs)(`section`,{className:a?`shrink-0`:`flex-1 flex flex-col min-h-0`,children:[(0,V.jsxs)(`div`,{className:`px-4 py-2 flex items-center gap-2 text-xs uppercase tracking-wider text-muted-foreground border-b`,children:[(0,V.jsx)(`button`,{type:`button`,onClick:o,className:`shrink-0 hover:text-foreground transition-colors`,"aria-expanded":!a,title:a?`Expand tree`:`Collapse tree`,children:a?(0,V.jsx)(It,{size:12,strokeWidth:2.5}):(0,V.jsx)(Ft,{size:12,strokeWidth:2.5})}),c===null?p.length>1?(0,V.jsxs)(G,{value:n??``,onValueChange:e=>{e&&r(e)},children:[(0,V.jsx)(q,{size:`sm`,className:`h-6 w-auto min-w-0 max-w-full overflow-hidden px-2 text-[10px] uppercase tracking-wider`,children:(0,V.jsx)(K,{className:`min-w-0 truncate`})}),(0,V.jsx)(J,{children:p.map(e=>(0,V.jsx)(Y,{value:e.id,children:e.name},e.id))})]}):(0,V.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:s?.name??`No screen`}):(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-violet-500`,children:u?.name??c}),(0,V.jsx)(`button`,{type:`button`,onClick:()=>l(null),className:`shrink-0 normal-case tracking-normal hover:text-foreground`,title:`Stop editing this snippet (Esc)`,children:`Done`})]})]}),a?null:(0,V.jsx)(`div`,{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,V.jsx)(Eb,{screen:d},d.id):(0,V.jsx)(dc,{className:`px-4 py-2`,children:(0,V.jsx)(gc,{className:`text-xs`,children:`Pick a screen above to see its tree.`})})})]})}function Ob({boards:e,groups:t,enabled:n,onRefile:r}){let i=z(e=>e.reorderBoardsLocal),a=e.length>1&&n,[o,s]=(0,j.useState)(null),[c,l]=(0,j.useState)(null),[u,d]=(0,j.useState)(void 0),f=(0,j.useRef)(!1),p=(0,j.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,j.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),F.reorderBoards({order:n}).catch(e=>{L(e,`Could not reorder boards`),z.getState().refreshDesignSummary()}))}}}var kb=`velloo:collapsedBoardGroups`;function Ab(){if(typeof localStorage>`u`)return[];try{let e=localStorage.getItem(kb),t=e?JSON.parse(e):[];return Array.isArray(t)?t.filter(e=>typeof e==`string`):[]}catch{return[]}}function jb(){let[e,t]=(0,j.useState)(Ab),[n,r]=(0,j.useState)(null),[i,a]=(0,j.useState)(``),[o,s]=(0,j.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(kb,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 F.updateBoardGroup({groupId:t.groupId,patch:{name:e}}):t.boardId?await F.updateBoard({boardId:t.boardId,patch:{group:e}}):await F.addBoardGroup({name:e}),await z.getState().refreshDesignSummary()}catch(e){L(e,t.mode===`rename`?`Could not rename group`:`Could not add group`)}},recolor:(e,t)=>{F.updateBoardGroup({groupId:e,patch:{color:t}}).then(()=>z.getState().refreshDesignSummary()).catch(e=>L(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 F.removeBoardGroup({groupId:e});await z.getState().refreshDesignSummary();let r=n.ungroupedBoardIds.length;I({kind:`info`,message:r>0?`Deleted "${t}" — ${r} board${r===1?``:`s`} moved to Ungrouped`:`Deleted "${t}"`})}catch(e){L(e,`Could not delete group`)}})()}}}function Mb(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 Nb=[],Pb=[];function Fb({boards:e,screens:t,currentBoardId:n,currentScreenId:r}){let i=z(e=>e.selectBoard),a=z(e=>e.wsConnected),o=z(e=>e.authStatus?.loggedIn??!1),s=z(e=>e.refreshPublishSlots),c=z(e=>e.boardsCollapsed),l=z(e=>e.treeCollapsed),u=z(e=>e.toggleBoardsCollapsed),d=z(e=>e.setBoardArchived),f=z(e=>e.design?.archivedBoards??Nb),p=z(e=>e.design?.boardGroups??Pb),m=jb(),[h,g]=(0,j.useState)(null),[_,v]=(0,j.useState)(null),[y,b]=(0,j.useState)(null),[x,S]=(0,j.useState)(``),C=(e,t)=>{F.updateBoard({boardId:e,patch:{group:t}}).then(()=>z.getState().refreshDesignSummary()).catch(e=>L(e,`Could not move board`))},w=()=>{S(`New board`),b({mode:`create`})},ee=e=>{S(e.name),b({mode:`rename`,boardId:e.id})},T=async()=>{let e=x.trim();if(!e||!y)return;let t=y;if(b(null),t.mode===`create`)try{let t=await F.addBoard({name:e});i(t.boardId)}catch(e){L(e,`Could not create board`)}else try{await F.updateBoard({boardId:t.boardId,patch:{name:e}})}catch(e){L(e,`Could not rename board`)}},E=()=>{if(!h)return;let{id:e,name:t}=h;g(null),(async()=>{try{let n=await F.removeBoard({boardId:e});z.getState().pruneScreens(n.removedScreenIds),await z.getState().pruneBoard(e),I({kind:`info`,message:Mb(t,n)})}catch(e){L(e,`Could not delete board`)}})()},[D,O]=(0,j.useState)(!1),k=f.some(e=>e.id===n);(0,j.useEffect)(()=>{k&&O(!0)},[k]),(0,j.useEffect)(()=>{o&&s()},[o,s]);let te=(e,t)=>{(async()=>{try{await d(e.id,t),I({kind:`info`,message:t?`Archived "${e.name}"`:`Restored "${e.name}"`}),t&&O(!0)}catch(e){L(e,t?`Could not archive board`:`Could not restore board`)}})()},ne=Ob({boards:e,groups:p,enabled:a,onRefile:C}),re=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`,ie=e=>(0,V.jsx)(pb,{board:e,active:e.id===n,groups:p,drag:ne.rowDrag(e.id),onRename:()=>ee(e),onAddFrame:()=>v(e.id),onMoveToGroup:t=>C(e.id,t),onNewGroup:()=>m.openDialog({mode:`create`,boardId:e.id}),onArchive:()=>te(e,!0),onDelete:()=>g({id:e.id,name:e.name})},e.id);return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`section`,{className:re,children:[(0,V.jsxs)(`div`,{className:`px-4 py-2 flex items-center justify-between gap-2 text-xs uppercase tracking-wider text-muted-foreground`,children:[(0,V.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:[c?(0,V.jsx)(It,{size:12,strokeWidth:2.5,className:`shrink-0`}):(0,V.jsx)(Ft,{size:12,strokeWidth:2.5,className:`shrink-0`}),(0,V.jsx)(an,{size:11,strokeWidth:2,className:`shrink-0`}),` Boards`,c&&e.length>0?(0,V.jsxs)(`span`,{className:`normal-case opacity-60`,children:[`(`,e.length,`)`]}):null]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-0.5`,children:[(0,V.jsx)(U,{variant:`ghost`,size:`icon-xs`,onClick:()=>m.openDialog({mode:`create`}),disabled:!a,title:a?`New group`:`Disconnected — edits are paused.`,children:(0,V.jsx)(Qt,{})}),(0,V.jsx)(U,{variant:`ghost`,size:`icon-xs`,onClick:w,disabled:!a,title:a?`New board`:`Disconnected — edits are paused.`,children:(0,V.jsx)(Pn,{})})]})]}),c?null:e.length===0?(0,V.jsx)(dc,{className:`gap-1 px-4 pb-2 pt-0`,children:(0,V.jsx)(gc,{className:`text-sm`,children:f.length>0?`No boards — everything's archived.`:`No boards yet.`})}):(0,V.jsx)(`ul`,{className:`flex flex-1 flex-col gap-0.5 overflow-auto scroll-stable px-2 pb-2 min-h-0`,onDragOver:ne.onListDragOver,onDrop:ne.onListDrop,children:ne.sections.map(e=>{let t=e.group;return t?(0,V.jsxs)(`li`,{children:[(0,V.jsx)(_b,{group:t,count:e.boards.length,collapsed:m.collapsed.includes(t.id),dropTarget:ne.dragGroup===t.id,disabled:!a,onToggle:()=>m.toggle(t.id),onDragOver:e=>ne.onGroupDragOver(e,t.id),onRename:()=>m.openDialog({mode:`rename`,group:t}),onRecolor:e=>m.recolor(t.id,e),onDelete:()=>m.requestDelete(t)}),m.collapsed.includes(t.id)?null:(0,V.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(ie)})]},t.id):(0,V.jsxs)(j.Fragment,{children:[p.length>0&&e.boards.length>0?(0,V.jsxs)(`li`,{onDragOver:e=>ne.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 `+(ne.dragGroup===null&&ne.dragging?`bg-accent`:``),children:[(0,V.jsx)(`span`,{className:`size-2.5 shrink-0 rounded-[3px] border border-dashed`}),`Ungrouped`,(0,V.jsx)(`span`,{className:`ml-auto normal-case opacity-70`,children:e.boards.length})]}):null,e.boards.map(ie)]},`__ungrouped`)})}),c||f.length===0?null:(0,V.jsx)(hb,{boards:f,currentBoardId:n,open:D,onToggle:()=>O(e=>!e),onRestore:e=>te(e,!1),onDelete:e=>g({id:e.id,name:e.name})})]}),(0,V.jsx)(Db,{screens:t,currentBoardId:n,currentScreenId:r}),(0,V.jsx)(nu,{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 T(),onCancel:()=>b(null)}),(0,V.jsx)(nu,{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,V.jsx)(rl,{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,V.jsx)(Lc,{boardId:_,onClose:()=>v(null)}),(0,V.jsx)(rl,{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:E,onCancel:()=>g(null)})]})}function Ib({snippets:e}){let t=z(e=>e.components),n=z(e=>e.components===null&&e.componentsLoading),r=z(e=>e.libraryItem),i=z(e=>e.openLibrary),[a,o]=(0,j.useState)(``),{categories:s,extensions:c}=(0,j.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:Vm(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,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`section`,{className:`border-b p-2`,children:(0,V.jsxs)(qp,{className:`h-7`,children:[(0,V.jsx)(Yp,{children:(0,V.jsx)(Bn,{size:12,strokeWidth:2})}),(0,V.jsx)(Qp,{type:`text`,value:a,onChange:e=>o(e.target.value),placeholder:`Search library…`})]})}),(0,V.jsxs)(`div`,{className:`flex-1 overflow-auto scroll-stable`,children:[(0,V.jsx)(Rb,{icon:(0,V.jsx)(Ht,{size:11,strokeWidth:2}),label:`Snippets`,accent:!0}),e.length===0?(0,V.jsx)(dc,{className:`gap-2 p-4`,children:(0,V.jsxs)(fc,{className:`gap-1`,children:[(0,V.jsx)(mc,{variant:`icon`,className:`size-8`,children:(0,V.jsx)(Ht,{})}),(0,V.jsx)(hc,{className:`text-xs`,children:`No snippets yet.`}),(0,V.jsxs)(gc,{className:`text-xs`,children:[`Create one with `,(0,V.jsx)(xy,{children:`add_snippet`}),` in the MCP, or save a subtree from a screen.`]})]})}):d.length===0?(0,V.jsx)(zb,{query:a,noun:`snippet`}):(0,V.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,V.jsx)(`li`,{children:(0,V.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,V.jsx)(`span`,{className:`h-1 w-1 rounded-full shrink-0 `+(t?`bg-primary-foreground`:`bg-primary`)}),(0,V.jsx)(`span`,{className:`truncate`,children:e.name})]})},e.id)})}),c.length>0?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(mf,{className:`mx-2 my-3`}),(0,V.jsx)(Rb,{icon:(0,V.jsx)(wn,{size:11,strokeWidth:2}),label:`Extensions`,count:f.length,accent:!0}),f.length===0?(0,V.jsx)(zb,{query:a,noun:`extension`}):(0,V.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,V.jsx)(`li`,{children:(0,V.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,V.jsx)(`span`,{className:`h-1 w-1 rounded-full shrink-0 ${t?`bg-primary-foreground`:`bg-primary/60`}`}),(0,V.jsx)(`span`,{className:`truncate`,children:e.label})]})},e.id)})})]}):null,(0,V.jsx)(mf,{className:`mx-2 my-3`}),n?(0,V.jsx)(Lb,{}):null,s.map(e=>{let t=e.components.filter(u);return t.length===0?null:(0,V.jsxs)(`section`,{className:`pb-2`,children:[(0,V.jsx)(Rb,{label:e.label,count:t.length}),(0,V.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,V.jsx)(`li`,{children:(0,V.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 Lb(){return(0,V.jsx)(`div`,{className:`px-4 flex flex-col gap-2`,"aria-hidden":`true`,children:[`70%`,`45%`,`60%`,`38%`,`55%`,`48%`].map(e=>(0,V.jsx)(fh,{className:`h-3.5`,style:{width:e}},e))})}function Rb({label:e,count:t,icon:n,accent:r}){return(0,V.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,V.jsx)(`span`,{className:`flex-1`,children:e}),t===void 0?null:(0,V.jsx)(H,{variant:`secondary`,className:`px-1.5 py-0 text-[10px] font-normal tabular-nums`,children:t})]})}function zb({query:e,noun:t}){return(0,V.jsx)(dc,{className:`p-3`,children:(0,V.jsxs)(gc,{className:`text-xs`,children:[`No `,t,` matches "`,e,`".`]})})}function Bb({boards:e,screens:t,snippets:n,currentBoardId:r,currentScreenId:i}){let a=z(e=>e.view),o=z(e=>e.setView),s=z(e=>e.leftPaneCollapsed),c=z(e=>e.setLeftPaneCollapsed),l=z(e=>e.leftPaneWidth),u=z(e=>e.setLeftPaneWidth),d=z(e=>e.boardPulse),f=e=>{o(e),c(!1)};return(0,V.jsxs)(Mv,{side:`left`,collapsed:s,width:l,onResize:u,rail:(0,V.jsx)(Dv,{side:`left`,expandLabel:`Expand sidebar`,hotkey:`[`,onExpand:()=>c(!1),actions:[{icon:(0,V.jsx)(an,{}),label:`Boards`,active:a===`boards`,dot:Object.keys(d).length>0?{title:`an agent edited another board`}:void 0,onClick:()=>f(`boards`)},{icon:(0,V.jsx)(sn,{}),label:`Library`,active:a===`library`,onClick:()=>f(`library`)}]}),children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-1 p-2 border-b`,children:[(0,V.jsx)(Wf,{value:a,onValueChange:e=>o(e),className:`min-w-0 flex-1`,children:(0,V.jsxs)(Kf,{className:`w-full h-8`,children:[(0,V.jsxs)(qf,{value:`boards`,className:`text-xs`,children:[(0,V.jsx)(an,{}),`Boards`]}),(0,V.jsxs)(qf,{value:`library`,className:`text-xs`,children:[(0,V.jsx)(sn,{}),`Library`]})]})}),(0,V.jsx)(Ov,{side:`left`,label:`Collapse sidebar`,hotkey:`[`,onCollapse:()=>c(!0)})]}),a===`boards`?(0,V.jsx)(Fb,{boards:e,screens:t,currentBoardId:r,currentScreenId:i}):(0,V.jsx)(Ib,{snippets:n})]})}function Vb({className:e,...t}){return(0,V.jsx)(un,{"data-slot":`spinner`,role:`status`,"aria-label":`Loading`,className:B(`size-4 animate-spin`,e),...t})}var Hb=1500;function Ub(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 Wb(){let e=z(e=>e.signInPrompt),t=z(e=>e.closeSignIn),n=z(e=>e.refreshAuth),r=e!==null,i=(0,j.useRef)({});e&&(i.current=e);let a=Ub(i.current),[o,s]=(0,j.useState)({state:`idle`}),[c,l]=(0,j.useState)(!1),u=(0,j.useRef)(null),d=(0,j.useCallback)(()=>{u.current?.();let e=!0,r,i=()=>{e=!1,r&&clearInterval(r)};u.current=i;let a=e=>{i(),n(),I({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 ro.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),eo(t)){a(t);return}t.login.state===`pending`&&(r=setInterval(()=>{ro.status().then(t=>{if(e){if(eo(t)){a(t);return}s(t.login),t.login.state!==`pending`&&i()}})},Hb))}})()},[n,t]);(0,j.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`&&ro.cancelLogin().catch(()=>void 0)};return(0,V.jsx)(Ec,{open:r,onOpenChange:e=>!e&&f(),children:(0,V.jsxs)(kc,{className:`sm:max-w-md`,children:[(0,V.jsxs)(Ac,{children:[(0,V.jsx)(Mc,{children:a.title}),(0,V.jsx)(Nc,{children:a.description})]}),c||o.state===`idle`?(0,V.jsxs)(`div`,{className:`flex items-center gap-2 py-6 text-sm text-muted-foreground`,children:[(0,V.jsx)(Vb,{className:`size-3.5`}),`Starting sign-in…`]}):null,o.state===`pending`?(0,V.jsxs)(`div`,{className:`flex flex-col gap-4 py-2`,children:[(0,V.jsxs)(`div`,{className:`flex flex-col items-center gap-2 rounded-md border bg-muted/40 py-4`,children:[(0,V.jsx)(`span`,{className:`text-[11px] uppercase tracking-wide text-muted-foreground`,children:`Your code`}),(0,V.jsx)(`span`,{className:`font-mono text-2xl tracking-[0.2em] tabular-nums`,children:o.userCode})]}),(0,V.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,V.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,V.jsx)(qt,{size:13}),`Open the sign-in page`]})]}):null,o.state===`error`?(0,V.jsxs)(`div`,{className:`flex items-start gap-2 py-2 text-sm text-destructive`,children:[(0,V.jsx)(nr,{size:14,className:`mt-0.5 shrink-0`}),(0,V.jsx)(`span`,{children:o.message})]}):null,(0,V.jsxs)(jc,{children:[(0,V.jsx)(U,{variant:`outline`,onClick:f,children:o.state===`pending`?`Cancel`:`Close`}),o.state===`error`?(0,V.jsx)(U,{onClick:d,children:`Try again`}):null]})]})})}function Gb({snippet:e}){return(0,V.jsxs)(`section`,{className:`border-b flex flex-col gap-1 px-3 pt-3 pb-2`,children:[(0,V.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,V.jsx)(`div`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground font-medium`,children:`Params`}),(0,V.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,V.jsx)(`div`,{className:`text-[11px] text-muted-foreground mt-1`,children:`No params.`}):(0,V.jsx)(`ul`,{className:`flex flex-col gap-1`,children:e.params.map(e=>(0,V.jsx)(`li`,{className:`rounded-md border bg-background`,children:(0,V.jsx)(Kb,{param:e})},e.name))})]})}function Kb({param:e}){let t=Um(e);return(0,V.jsxs)(`div`,{className:`flex items-center gap-1.5 px-2 py-1`,children:[(0,V.jsxs)(`span`,{className:`font-mono text-[11px] truncate`,children:[`$`,e.name]}),(0,V.jsx)(H,{variant:`outline`,className:`text-[9px] font-mono shrink-0`,children:e.type}),t?(0,V.jsxs)(`span`,{className:`text-[10px] text-muted-foreground truncate`,children:[`= `,t]}):(0,V.jsx)(`span`,{className:`text-[10px] text-amber-600 dark:text-amber-400`,children:`required`}),e.description?(0,V.jsxs)(`span`,{className:`text-[10px] text-muted-foreground truncate`,title:e.description,children:[`· `,e.description]}):null]})}var qb={name:`Snippet`,w:480,h:360};function Jb({snippetId:e,snippetMeta:t,presets:n}){let r=z(e=>e.closeSnippetEditor),i=z(e=>e.themeVersion),a=z(e=>e.designMode),o=z(t=>t.screenVersions[`snippet:${e}`]??0),s=z(e=>e.refreshDesignSummary),c=z(e=>e.setSelection),l=z(e=>e.setHover),u=z(e=>e.setNodeRects),d=z(e=>e.clearNodeRects),f=z(e=>e.selection),p=z(e=>e.hover),m=z(e=>e.nodeState),h=z(e=>e.setSyntheticScreen),g=z(e=>e.loadComponents),_=`snippet:${e}`,v=z(e=>e.screens[_]??null);(0,j.useEffect)(()=>{g()},[g]);let[y,b]=(0,j.useState)(null),[x,S]=(0,j.useState)(!0);(0,j.useEffect)(()=>{let t=!0;return S(!0),so(e).then(e=>{t&&(b(e),S(!1),h(_,{id:_,name:e.name,tree:e.tree,...e.library?{library:e.library}:{}}))}).catch(()=>{t&&S(!1)}),()=>{t=!1}},[e,h,_]);let C=n.find(e=>e.name.toLowerCase().includes(`desktop`))??n[0]??qb,[w,ee]=(0,j.useState)(C),T=a===`dark`?`&mode=dark`:``,E=`/api/render/snippet-body/${encodeURIComponent(e)}?w=${w.w}&h=${w.h}&v=${i}.${o}${T}`,D=(0,j.useRef)(null),O=(0,j.useRef)(null),k=(0,j.useRef)(null),te=`snippet-view-${e}`;(0,j.useEffect)(()=>{let e=D.current;if(!e)return;let t=new Fl(e,{onSelect(e){c(e===null?null:{screenId:_,path:e})},onHover(e){l(e===null?null:{screenId:_,path:e})},onReady(){let e=z.getState();e.selection?.screenId===_&&t.send({type:`applyHighlight`,path:e.selection.path}),e.hover?.screenId===_&&t.send({type:`applyHover`,path:e.hover.path})},onRects(e){u(te,e)},onParentPan(e,t){let n=O.current;n&&(n.scrollLeft+=e,n.scrollTop+=t)}});k.current=t;let n=()=>t.attach();return e.addEventListener(`load`,n),e.contentDocument?.readyState===`complete`&&t.attach(),()=>{e.removeEventListener(`load`,n),t.destroy(),k.current=null,d(te)}},[x,_,te,c,l,u,d]),(0,j.useEffect)(()=>{let e=k.current;e&&(f?.screenId===_?e.send({type:`applyHighlight`,path:f.path}):e.send({type:`clearHighlight`}))},[f,_]),(0,j.useEffect)(()=>{let e=k.current;e&&(p?.screenId===_?e.send({type:`applyHover`,path:p.path}):e.send({type:`clearHover`}))},[p,_]),(0,j.useEffect)(()=>{let e=k.current;if(!e)return;let t=f?.screenId===_?f.path:null;e.send({type:`applyVelloState`,path:t,state:t?m:`default`})},[m,f,_]);let ne=async t=>{try{await N(`update_snippet`,{snippetId:e,patch:{name:t}}),s()}catch(e){L(e,`Could not update snippet`)}};if(x)return(0,V.jsx)(`div`,{className:`flex-1 grid place-items-center text-sm text-muted-foreground`,children:(0,V.jsx)(tu,{size:32,label:`Loading snippet…`,className:`flex-col`})});if(!y)return(0,V.jsxs)(`div`,{className:`flex-1 grid place-items-center text-sm text-muted-foreground gap-2`,children:[(0,V.jsxs)(`div`,{children:[`Snippet "`,e,`" not found.`]}),(0,V.jsxs)(U,{variant:`ghost`,size:`sm`,onClick:r,children:[(0,V.jsx)(At,{}),` Back`]})]});let re=f?.screenId===_,ie={...y,name:t?.name??y.name,params:t?.params??y.params};return(0,V.jsxs)(`div`,{className:`flex-1 flex min-h-0`,children:[(0,V.jsxs)(`aside`,{className:`flex h-full w-72 shrink-0 flex-col border-r bg-card`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 border-b`,children:[(0,V.jsxs)(U,{variant:`ghost`,size:`xs`,onClick:r,className:`-ml-1`,children:[(0,V.jsx)(At,{size:12}),`Back`]}),(0,V.jsx)(H,{variant:`outline`,className:`ml-auto text-[10px] font-mono`,children:`snippet`})]}),(0,V.jsx)(Xb,{snippet:ie,onPatchName:ne}),(0,V.jsx)(Gb,{snippet:ie}),(0,V.jsxs)(`div`,{className:`border-t flex-1 overflow-y-auto scroll-stable`,children:[(0,V.jsx)(Yb,{children:`Body`}),v?(0,V.jsx)(Eb,{screen:v},v.id):(0,V.jsx)(`div`,{className:`px-4 py-3 text-xs text-muted-foreground`,children:`No body to display.`})]})]}),(0,V.jsxs)(`main`,{className:`flex-1 flex flex-col min-w-0 bg-background`,children:[(0,V.jsx)(Zb,{presets:n,viewport:w,setViewport:ee,snippet:ie}),(0,V.jsx)(`div`,{ref:O,className:`flex-1 overflow-auto scroll-stable bg-muted/30`,children:(0,V.jsx)(`div`,{className:`min-w-fit min-h-full flex items-center justify-center p-8`,children:(0,V.jsxs)(`div`,{className:`flex flex-col items-center gap-3`,children:[(0,V.jsx)(`div`,{className:`rounded-md border bg-white shadow-sm overflow-hidden shrink-0`,style:{width:w.w,height:w.h},children:(0,V.jsx)(`iframe`,{ref:D,title:`${y.name} preview`,src:E,className:`block border-0`,style:{width:w.w,height:w.h}})}),(0,V.jsxs)(`div`,{className:`text-xs text-muted-foreground tabular-nums`,children:[w.w,` × `,w.h]})]})})})]}),(0,V.jsx)(`aside`,{className:`w-80 shrink-0 border-l bg-card flex flex-col overflow-hidden`,children:re?(0,V.jsx)(Cv,{}):(0,V.jsx)(dc,{className:`flex-1 p-6`,children:(0,V.jsxs)(fc,{children:[(0,V.jsx)(mc,{variant:`icon`,children:(0,V.jsx)(Cn,{})}),(0,V.jsx)(hc,{className:`text-xs`,children:`Nothing selected`}),(0,V.jsx)(gc,{className:`text-xs`,children:`Click a node in the snippet preview to edit.`})]})})})]})}function Yb({children:e}){return(0,V.jsx)(`div`,{className:`px-3 pt-3 pb-1 text-[10px] uppercase tracking-wider text-muted-foreground font-medium`,children:e})}function Xb({snippet:e,onPatchName:t}){let[n,r]=(0,j.useState)(!1),[i,a]=(0,j.useState)(e.name),o=(0,j.useRef)(null);(0,j.useEffect)(()=>{a(e.name)},[e.name]),(0,j.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,V.jsxs)(`div`,{className:`px-3 py-2 border-b`,children:[n?(0,V.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,V.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,V.jsx)(qn,{size:11,className:`text-muted-foreground shrink-0`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`truncate`,children:e.name}),(0,V.jsx)(Nn,{size:10,className:`opacity-0 group-hover:opacity-50 transition-opacity shrink-0`})]}),(0,V.jsxs)(`div`,{className:`mt-0.5 text-[10px] font-mono text-muted-foreground truncate`,children:[`@`,e.id]})]})}function Zb({snippet:e,presets:t,viewport:n,setViewport:r}){return(0,V.jsxs)(`header`,{className:`border-b bg-card/40 backdrop-blur-sm px-6 py-2.5 flex items-center gap-3`,children:[(0,V.jsxs)(`div`,{className:`text-xs text-muted-foreground`,children:[`Preview · `,(0,V.jsx)(`span`,{className:`font-medium text-foreground`,children:e.name})]}),(0,V.jsx)(`div`,{className:`flex-1`}),(0,V.jsxs)(G,{value:n.name,onValueChange:e=>{let n=t.find(t=>t.name===e);n&&r(n)},children:[(0,V.jsx)(q,{size:`sm`,className:`text-xs w-44`,children:(0,V.jsx)(K,{})}),(0,V.jsx)(J,{children:t.map(e=>(0,V.jsxs)(Y,{value:e.name,children:[e.name,` · `,e.w,`×`,e.h]},e.name))})]})]})}function Qb({className:e,size:t=24}){return(0,V.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,V.jsx)(`title`,{children:`Velloo`}),(0,V.jsx)(`defs`,{children:(0,V.jsx)(`clipPath`,{id:`velloo-weave`,children:(0,V.jsx)(`rect`,{x:`52`,y:`30`,width:`38`,height:`35`})})}),(0,V.jsx)(`rect`,{x:`21`,y:`21`,width:`58`,height:`58`,rx:`20`,stroke:`#FF6F4D`,strokeWidth:`11`,strokeLinejoin:`round`}),(0,V.jsx)(`rect`,{x:`41`,y:`41`,width:`58`,height:`58`,rx:`20`,stroke:`#FFAB1F`,strokeWidth:`11`,strokeLinejoin:`round`}),(0,V.jsx)(`rect`,{x:`21`,y:`21`,width:`58`,height:`58`,rx:`20`,stroke:`#FF6F4D`,strokeWidth:`11`,strokeLinejoin:`round`,clipPath:`url(#velloo-weave)`})]})}function $b({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,V.jsxs)(`span`,{className:e,style:{display:`inline-flex`,alignItems:`center`,gap:Math.round(i*.28)},children:[(0,V.jsx)(Qb,{size:i}),(0,V.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,V.jsx)(`span`,{style:{width:n,height:n,borderRadius:9999,background:`#FFAB1F`,marginLeft:r,display:`inline-block`}}),(0,V.jsx)(`span`,{style:{width:n,height:n,borderRadius:9999,background:`#FF6F4D`,marginLeft:r,display:`inline-block`}})]})]})}var ex=u(`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 tx({className:e,orientation:t,...n}){return(0,V.jsx)(`div`,{role:`group`,"data-slot":`button-group`,"data-orientation":t,className:B(ex({orientation:t}),e),...n})}function nx({label:e,hotkey:t,children:n}){return(0,V.jsxs)(gf,{children:[(0,V.jsx)(_f,{asChild:!0,children:n}),(0,V.jsx)(vf,{children:(0,V.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[e,t?(0,V.jsx)(xy,{className:`border-border/40 bg-background/10 text-current opacity-80`,children:t}):null]})})]})}function rx(){let e=z(e=>e.design),t=z(e=>e.currentScreenId),n=z(e=>e.view),r=z(e=>e.libraryItem),i=z(e=>e.theme),a=z(e=>e.canvasZoom),o=z(e=>e.zoomAtViewportCenter),s=z(e=>e.cursorMode),c=z(e=>e.setCursorMode),l=z(e=>e.enterCommentMode),u=z(e=>e.history),d=z(e=>e.refreshHistory),f=z(e=>e.designMode),p=z(e=>e.setDesignMode),m=z(e=>e.setPublishOpen),h=e?.screens.find(e=>e.id===t),g=n===`library`?[`Library`,...r?[r.id]:[]]:h?[h.name]:[],_=[...e?.designName?[e.designName]:[],...g],v=f===`dark`,y=!!i?.colorsDark,b=()=>{if(!y){L("This theme has no dark palette. Add `colorsDark` in theme/default.json.",`Theme has no dark palette`);return}p(v?`light`:`dark`)},x=()=>{o({zoom:1})},S=()=>{wo().catch(e=>L(e,`Undo failed`)).finally(()=>d())},C=()=>{To().catch(e=>L(e,`Redo failed`)).finally(()=>d())},w=[{value:`select`,icon:(0,V.jsx)(Sn,{size:14,strokeWidth:2}),label:`Select`,hotkey:`V`},{value:`hand`,icon:(0,V.jsx)(tn,{size:14,strokeWidth:2}),label:`Pan canvas`,hotkey:`H`},{value:`note`,icon:(0,V.jsx)(Zn,{size:14,strokeWidth:2}),label:`Drop a free note`,hotkey:`T`},{value:`comment`,icon:(0,V.jsx)(vn,{size:14,strokeWidth:2}),label:`Comment on the design`,hotkey:`C`}];return(0,V.jsx)(hf,{delayDuration:200,children:(0,V.jsxs)(`header`,{className:`h-11 shrink-0 border-b bg-card flex items-center gap-3 px-4 text-sm`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[(0,V.jsx)($b,{fontSize:15}),_.length>0?(0,V.jsx)(Wm,{children:(0,V.jsx)(Gm,{className:`gap-1.5 text-sm sm:gap-1.5`,children:_.map((e,t)=>(0,V.jsxs)(j.Fragment,{children:[(0,V.jsx)(Ym,{className:`[&>svg]:size-3`}),(0,V.jsx)(Km,{children:t===_.length-1?(0,V.jsx)(Jm,{className:`truncate`,children:e}):(0,V.jsx)(`span`,{className:`truncate`,children:e})})]},t))})}):null]}),(0,V.jsxs)(`div`,{className:`ml-auto flex items-center gap-1.5`,children:[(0,V.jsx)(yc,{}),(0,V.jsx)(ix,{}),(0,V.jsx)(mf,{orientation:`vertical`,className:`mx-1 h-5`}),(0,V.jsx)(Xf,{type:`single`,variant:`outline`,size:`sm`,spacing:0,value:s,onValueChange:e=>{e&&(e===`comment`?l():c(e))},children:w.map(e=>(0,V.jsx)(nx,{label:e.label,hotkey:e.hotkey,children:(0,V.jsx)(Zf,{value:e.value,"aria-label":e.label,"aria-pressed":s===e.value,"data-state":s===e.value?`on`:`off`,className:s===e.value?`bg-accent text-accent-foreground hover:bg-accent hover:text-accent-foreground`:void 0,children:e.icon})},e.value))}),(0,V.jsx)(ax,{}),(0,V.jsxs)(tx,{className:`ml-2`,children:[(0,V.jsx)(nx,{label:`Undo${u.undo>0?` — ${u.undo} step${u.undo===1?``:`s`}`:``}`,hotkey:`⌘Z`,children:(0,V.jsx)(U,{variant:`outline`,size:`icon-sm`,onClick:S,disabled:u.undo===0,children:(0,V.jsx)(ir,{})})}),(0,V.jsx)(nx,{label:`Redo${u.redo>0?` — ${u.redo} step${u.redo===1?``:`s`}`:``}`,hotkey:`⌘⇧Z`,children:(0,V.jsx)(U,{variant:`outline`,size:`icon-sm`,onClick:C,disabled:u.redo===0,children:(0,V.jsx)(In,{})})})]}),(0,V.jsx)(mf,{orientation:`vertical`,className:`mx-1 h-5`}),(0,V.jsxs)(tx,{children:[(0,V.jsx)(nx,{label:`Zoom out`,hotkey:`−`,children:(0,V.jsx)(U,{variant:`outline`,size:`icon-sm`,onClick:()=>o({factor:1/1.1}),children:(0,V.jsx)(yn,{})})}),(0,V.jsx)(nx,{label:`Reset zoom`,hotkey:`0`,children:(0,V.jsxs)(U,{variant:`outline`,size:`sm`,onClick:x,className:`min-w-[3rem] tabular-nums text-muted-foreground`,children:[Math.round(a*100),`%`]})}),(0,V.jsx)(nx,{label:`Zoom in`,hotkey:`+`,children:(0,V.jsx)(U,{variant:`outline`,size:`icon-sm`,onClick:()=>o({factor:1.1}),children:(0,V.jsx)(Pn,{})})})]}),(0,V.jsx)(mf,{orientation:`vertical`,className:`mx-1 h-5`}),(0,V.jsx)(nx,{label:v?`Set canvas default to light; pinned frames stay pinned`:`Set canvas default to dark; pinned frames stay pinned`,children:(0,V.jsxs)(U,{variant:`outline`,size:`sm`,onClick:b,children:[v?(0,V.jsx)($n,{}):(0,V.jsx)(xn,{}),(0,V.jsx)(`span`,{children:`Default`})]})}),(0,V.jsx)(nx,{label:`Publish boards as a share link`,children:(0,V.jsxs)(U,{variant:`outline`,size:`sm`,onClick:()=>m(!0),children:[(0,V.jsx)(Un,{}),(0,V.jsx)(`span`,{children:`Publish`})]})}),(0,V.jsx)(ag,{})]})]})})}function ix(){let e=z(e=>e.setSearchOpen);return(0,V.jsx)(nx,{label:`Search boards, screens & text`,hotkey:`⌘K`,children:(0,V.jsx)(U,{variant:`outline`,size:`icon-sm`,onClick:()=>e(!0),children:(0,V.jsx)(Bn,{})})})}function ax(){let e=z(e=>e.markupVisible),t=z(e=>e.setMarkupVisible);return(0,V.jsx)(nx,{label:e?`Hide notes + comments`:`Show notes + comments`,children:(0,V.jsx)(U,{variant:`outline`,size:`icon-sm`,onClick:()=>t(!e),children:e?(0,V.jsx)(Yt,{}):(0,V.jsx)(Jt,{})})})}function ox(e){return e===`system`?typeof window>`u`?`light`:window.matchMedia?.(`(prefers-color-scheme: dark)`).matches?`dark`:`light`:e}function sx(e){let t=ox(z(e=>e.appTheme));return(0,V.jsx)(f,{theme:t,className:`toaster group`,style:{"--normal-bg":`var(--popover)`,"--normal-text":`var(--popover-foreground)`,"--normal-border":`var(--border)`},...e})}function cx(){let e=new URLSearchParams(window.location.search),t=e.get(`view`),n=t===`library`?`library`:t===`snippet`?`snippet`:`boards`,r=e.get(`item`),i=null;if(n===`library`&&r){let[e,...t]=r.split(`:`);(e===`component`||e===`snippet`)&&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 lx(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}`)):(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 ux(e){return e?`${e.kind}:${e.id}`:``}function dx(){let e=z(e=>e.view),t=z(e=>e.libraryItem),n=z(e=>e.currentBoardId),r=z(e=>e.currentScreenId),i=z(e=>e.selection),a=z(e=>e.editingSnippetId),o=(0,j.useRef)(void 0),s=(0,j.useRef)(void 0),c=(0,j.useRef)(void 0),l=(0,j.useRef)(!1);(0,j.useEffect)(()=>{if(l.current){l.current=!1,o.current=n,s.current=e,c.current=ux(t);return}let u=o.current,d=s.current,f=c.current,p=ux(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,lx(e,t,n,r,i,a,m||h||g)},[e,t,n,r,i,a]),(0,j.useEffect)(()=>{let e=()=>{let e=cx(),t=z.getState();l.current=!0;let 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):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)})};return window.addEventListener(`popstate`,e),()=>window.removeEventListener(`popstate`,e)},[])}function fx(){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=z.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=pr(e.data);if(!t)return;if(t.type===`activity`){let e=Wo(t);e&&z.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}=z.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();else if(t.type===`snippet-changed`){o(),n&&i(n);let e=z.getState();(e.editingSnippetId===t.snippetId||e.snippetFocus===t.snippetId)&&(async()=>{try{let e=await so(t.snippetId);z.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():t.type===`config-changed`?(o(),z.getState().folderConfig&&z.getState().loadFolderConfig()):t.type===`folder-reloaded`?z.getState().reloadAll():t.type===`reload-error`&&I({kind:`error`,title:`File change not applied`,message:`${t.source}: ${t.message}`,ttl:8e3})},e.onclose=()=>{ur(!1),z.getState().setWsConnected(!1),!t&&(setTimeout(r,n),n=Math.min(n*2,5e3))},e.onerror=()=>{e?.close()}}return r(),()=>{t=!0,e?.close()}}var px=6e4;function mx(){(0,j.useEffect)(()=>{let e=Ao(e=>z.getState().openSignIn(e)),t=()=>void z.getState().refreshAuth();t();let n=setInterval(t,px),r=()=>{document.visibilityState===`visible`&&t()};return document.addEventListener(`visibilitychange`,r),()=>{e(),clearInterval(n),document.removeEventListener(`visibilitychange`,r)}},[])}function hx(){(0,j.useEffect)(()=>{let e=()=>z.getState().syncPaneLayout(window.innerWidth);return e(),window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[])}function gx(){let e=z(e=>e.design),t=z(e=>e.bootError),n=z(e=>e.view),r=z(e=>e.libraryItem),i=z(e=>e.editingSnippetId),a=z(e=>e.currentBoardId),o=z(e=>e.currentScreenId),s=z(e=>a?e.boards[a]??null:null),c=z(e=>e.loadDesign),l=z(e=>e.setSelection),u=(0,j.useRef)(!1),d=(0,j.useRef)(null),[f,p]=(0,j.useState)(null);return(0,j.useEffect)(()=>{if(u.current)return;u.current=!0;let e=cx();return e.view===`library`?z.getState().openLibrary(e.libraryItem):e.view===`snippet`&&e.snippetId&&z.getState().openSnippetEditor(e.snippetId),(async()=>{await c({boardId:e.boardId,screenId:e.screenId}),e.view===`boards`&&e.selection&&l(e.selection)})(),fx()},[c,l]),dx(),oc(),mx(),hx(),(0,j.useEffect)(qh,[]),(0,j.useEffect)(()=>{document.title=sc(e?.designName,s?.name)},[e?.designName,s?.name]),(0,j.useEffect)(()=>{let e=e=>{let t=e.target,n=t&&(t.tagName===`INPUT`||t.tagName===`TEXTAREA`||t.isContentEditable),r=e.metaKey||e.ctrlKey,i=z.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(),wo().catch(e=>L(e,`Undo failed`))}else if(r&&(e.key===`z`||e.key===`Z`)&&e.shiftKey){if(n)return;e.preventDefault(),To().catch(e=>L(e,`Redo failed`))}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`))i.setCursorMode(`note`);else if(!r&&!n&&(e.key===`c`||e.key===`C`))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,z.getState().setCursorMode(e)}};return window.addEventListener(`keydown`,e),window.addEventListener(`keyup`,t),()=>{window.removeEventListener(`keydown`,e),window.removeEventListener(`keyup`,t)}},[]),(0,j.useEffect)(()=>{let e=[`hand`,`note`,`comment`],t=t=>{for(let n of e)document.body.classList.toggle(`velloo-${n}`,t===n)};t(z.getState().cursorMode);let n=z.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,V.jsxs)(`div`,{className:`h-full flex flex-col`,children:[(0,V.jsx)(rx,{}),(0,V.jsx)(_x,{}),(0,V.jsxs)(`div`,{className:`flex-1 flex min-h-0`,children:[(0,V.jsx)(Bb,{boards:e.boards,screens:e.screens,snippets:e.snippets,currentBoardId:a,currentScreenId:o}),(0,V.jsx)(`main`,{className:`flex-1 flex flex-col min-w-0`,children:n===`snippet`&&i?(0,V.jsx)(Jb,{snippetId:i,snippetMeta:e.snippets.find(e=>e.id===i)??null,presets:e.viewportPresets}):n===`library`?r?(0,V.jsx)(ih,{item:r,snippets:e.snippets}):(0,V.jsx)(gh,{snippets:e.snippets}):s&&s.frames.length>0?(0,V.jsx)(Om,{board:s}):s?(0,V.jsx)(jm,{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,V.jsxs)(U,{variant:`outline`,onClick:()=>p(s.id),children:[(0,V.jsx)(Pn,{}),`Add frame`]}):void 0}):(0,V.jsx)(jm,{title:e.boards.length===0?`No boards yet`:`No board selected`,hint:e.boards.length===0?`Create a board to start designing — or ask your agent over MCP to set up the folder.`:`Pick a board from the sidebar to see its frames.`,action:e.boards.length===0?(0,V.jsxs)(U,{variant:`outline`,onClick:()=>{(async()=>{try{let e=await F.addBoard({name:`Main`});await z.getState().selectBoard(e.boardId)}catch(e){L(e,`Could not create board`)}})()},children:[(0,V.jsx)(Pn,{}),`New board`]}):void 0})}),n===`boards`?(0,V.jsx)(yy,{screenId:o}):null]}),(0,V.jsx)(wy,{}),(0,V.jsx)(Im,{}),(0,V.jsx)(wh,{}),(0,V.jsx)(lb,{}),(0,V.jsx)(Lc,{boardId:f,onClose:()=>p(null)}),(0,V.jsx)(Wb,{}),(0,V.jsx)(vg,{}),(0,V.jsx)(kg,{}),(0,V.jsx)(Tc,{}),(0,V.jsx)(sx,{})]}):t?(0,V.jsx)(`div`,{className:`h-full grid place-items-center p-8`,children:(0,V.jsxs)(`div`,{className:`max-w-md text-center flex flex-col items-center gap-3`,children:[(0,V.jsx)(or,{className:`text-muted-foreground`,size:28}),(0,V.jsx)(`div`,{className:`text-base font-medium`,children:`Can't reach the velloo daemon`}),(0,V.jsxs)(`div`,{className:`text-sm text-muted-foreground`,children:[`The design server isn't answering (`,t,`). Start it with`,` `,(0,V.jsx)(`span`,{className:`font-mono`,children:`velloo run`}),` — the canvas reconnects automatically, or retry now.`]}),(0,V.jsx)(U,{variant:`outline`,onClick:()=>void z.getState().loadDesign(),children:`Retry`})]})}):(0,V.jsx)(`div`,{className:`h-full grid place-items-center`,children:(0,V.jsx)(tu,{size:44})})}function _x(){let e=z(e=>e.wsConnected),t=z(e=>e.wsEverConnected);return e||!t?null:(0,V.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,V.jsx)(or,{size:13}),`Disconnected from the velloo daemon — designs are view-only until it comes back. Reconnecting…`]})}var vx=document.getElementById(`root`);if(!vx)throw Error(`missing #root`);(0,cr.createRoot)(vx).render((0,V.jsx)(j.StrictMode,{children:(0,V.jsx)(gx,{})}));export{ln as $,Mn as A,jt as At,Sn as B,zn as C,Rt as Ct,Fn as D,Pt as Dt,In as E,Ft as Et,Dn as F,Et as Ft,_n as G,bn as H,En as I,M as It,mn as J,gn as K,Tn as L,Tt as Lt,An as M,kt as Mt,kn as N,Ot as Nt,Pn as O,Nt as Ot,On as P,Dt as Pt,un as Q,wn as R,Ct as Rt,Bn as S,zt as St,Ln as T,It as Tt,yn as U,xn as V,vn as W,fn as X,pn as Y,dn as Z,Gn as _,Wt as _t,rr as a,nn as at,Hn as b,Vt as bt,er as c,$t as ct,Zn as d,Xt as dt,cn as et,Xn as f,Yt as ft,Kn as g,Gt as gt,qn as h,Kt as ht,ir as i,rn as it,jn as j,At as jt,Nn as k,Mt as kt,$n as l,Qt as lt,Jn as m,qt as mt,or as n,on as nt,nr as o,tn as ot,Yn as p,Jt as pt,hn as q,ar as r,an as rt,tr as s,en as st,sr as t,sn as tt,Qn as u,Zt as ut,Wn as v,Ut as vt,Rn as w,Lt as wt,Vn as x,Bt as xt,Un as y,Ht as yt,Cn as z,wt as zt};