import{d as Nt,c as IA,g as q,t as AA,a as Y,s as u,i as G,b as W,F as we,r as GA,S as mA,m as Ir,e as CA,f as LA,o as tB,h as Hs,u as vs,j as Is,D as ms,k as ys}from"./web.gEHESIx2.js";import{w as He,g as Ks,a as ne,W as Ls}from"./registry.C0UvCNn_.js";import{S as bs,P as xs,W as Ss,A as Ds,D as jt,O as Ts,G as Os,a as Ms,M as An,b as Gs,c as ve,B as qe,C as Rs,d as en,L as rn}from"./OrbitControls.B-WH-rzu.js";var Vs=AA("
"),Ns=AA("

Dashboard Preview ( widgets)

Live Preview
'),Sl=AA("
Drop to snap"),Dl=AA("
");const Gl=()=>{const[e,A]=IA([]),[t,r]=IA(""),[n,B]=IA(""),[s,a]=IA(!1),[i,o]=IA({templateId:null,widgetPlacements:[]}),[g,c]=IA(null),[l,f]=IA(!1),Q=Is(()=>{const d=i().templateId?ne(i().templateId):null;if(!d)return 1;const S=d.template.width||800,y=d.template.height||600,x=window.innerWidth-450-140,k=window.innerHeight*.85-80,R=x/S,cA=k/y;return Math.min(R,cA,1)*.9}),w=d=>{d.position||(d.position={x:10,y:10}),A(S=>[...S,d]),T([...e(),d])},H=d=>{const S=e().filter(y=>y.id!==d);A(S),T(S)},U=(d,S)=>{const y=e().map(x=>x.id===d?{...x,position:S}:x);A(y),T(y)},C=(d,S)=>{const y=e().map(x=>x.id===d?{...x,size:S}:x);A(y),T(y)},m=()=>{const d={widgets:e(),grid:i()},S=JSON.stringify(d,null,2),y=new Blob([S],{type:"application/json"}),x=URL.createObjectURL(y),k=document.createElement("a");k.href=x,k.download="dashboard-config.json",k.click(),URL.revokeObjectURL(x)},I=d=>{const y=d.target.files?.[0];if(y){const x=new FileReader;x.onload=k=>{try{const R=JSON.parse(k.target?.result);Array.isArray(R)?(A(R),T(R)):(R.widgets&&(A(R.widgets),T(R.widgets)),R.grid&&(o(R.grid),K(R.grid)))}catch{alert("Error parsing config file")}},x.readAsText(y)}},v=async()=>{const d={widgets:e(),grid:i()},S=encodeURIComponent(JSON.stringify(d)),y=`${window.location.origin}/app/preview?config=${S}`;r(y);try{const k=await(await fetch("/api/generate-link",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:y})})).json();k.shortLink&&B(k.shortLink)}catch(x){console.error("Error generating short link:",x),B("")}a(!0)},F=()=>{navigator.clipboard.writeText(t()),alert("URL copied to clipboard!")},L=()=>{navigator.clipboard.writeText(n()),alert("Short link copied to clipboard!")},b=d=>{o({templateId:d,widgetPlacements:[]}),K({templateId:d,widgetPlacements:[]})},E=(d,S)=>{const y={...i()};y.widgetPlacements=y.widgetPlacements.filter(x=>x.widgetId!==d),S&&y.widgetPlacements.push({widgetId:d,cellId:S}),o(y),K(y)},O=d=>{c(d)},Z=d=>{f(d),d||c(null)},T=d=>{localStorage.setItem("dashboard-config",JSON.stringify(d))},K=d=>{localStorage.setItem("dashboard-grid-config",JSON.stringify(d))};return tB(()=>{const d=localStorage.getItem("dashboard-config");if(d)try{A(JSON.parse(d))}catch(y){console.error("Error loading saved config",y)}const S=localStorage.getItem("dashboard-grid-config");if(S)try{o(JSON.parse(S))}catch(y){console.error("Error loading saved grid config",y)}}),(()=>{var d=q(xl),S=d.firstChild,y=S.firstChild,x=y.firstChild,k=x.firstChild,R=y.nextSibling,cA=R.firstChild,iA=cA.nextSibling,EA=iA.firstChild,lA=EA.nextSibling,HA=iA.nextSibling,uA=S.nextSibling,[UA,SA]=Y(uA.nextSibling),Wr=UA.nextSibling,[Ue,Yr]=Y(Wr.nextSibling),We=Ue.nextSibling,Fe=We.firstChild,Zr=Fe.firstChild,N=Zr.nextSibling,[aA,he]=Y(N.nextSibling);aA.nextSibling;var $r=Fe.nextSibling,DA=$r.firstChild,NA=DA.firstChild,is=NA.firstChild,[Zt,as]=Y(is.nextSibling),os=Zt.nextSibling,[$t,gs]=Y(os.nextSibling),cs=$t.nextSibling,[ls,Qs]=Y(cs.nextSibling),te=DA.nextSibling,ws=te.firstChild,[zt,us]=Y(ws.nextSibling),de=zt.nextSibling,fs=We.nextSibling,[Cs,Us]=Y(fs.nextSibling);return u(k,"color","white"),u(R,"display","flex"),u(R,"gap","0.5rem"),cA.$$click=m,u(iA,"border","1px solid var(--border)"),u(iA,"padding","0.5rem 1rem"),u(iA,"cursor","pointer"),u(iA,"display","inline-block"),lA.addEventListener("change",I),u(lA,"display","none"),HA.$$click=v,G(d,W(ei,{onSelectGrid:b,get currentGridId(){return i().templateId}}),UA,SA),G(d,W(zs,{onAddWidget:w}),Ue,Yr),G(Fe,()=>e().length,aA,he),u($r,"display","grid"),u($r,"gap","1.5rem"),u(DA,"border","1px solid var(--border)"),u(DA,"padding","20px"),u(DA,"position","relative"),u(DA,"background","var(--bg, #fff)"),u(DA,"overflow","hidden"),u(DA,"display","flex"),u(DA,"cursor","pointer"),u(NA,"position","relative"),G(NA,W(mA,{get when(){return i().templateId},children:()=>{const X=ne(i().templateId);return X?W(ms,{get component(){return X.Component}}):null}}),Zt,as),G(NA,W(mA,{get when(){return Ir(()=>!!l())()&&i().templateId},children:()=>{const X=ne(i().templateId);return W(we,{get each(){return X?.template.cells||[]},children:eA=>{const TA=g()===eA.id;return(()=>{var tA=q(Dl);return u(tA,"position","absolute"),u(tA,"background-color",TA?"#ffffff":"transparent"),u(tA,"border",TA?"4px solid #000000":"2px dashed #ffffff"),u(tA,"transition","none"),u(tA,"transform",TA?"scale(0.98)":"scale(1)"),G(tA,W(mA,{when:TA,get children(){var P=q(Sl);return u(P,"position","absolute"),u(P,"top","8px"),u(P,"right","8px"),u(P,"background","#000000"),u(P,"color","#ffffff"),u(P,"padding","4px 8px"),u(P,"border","2px solid #ffffff"),P}})),CA(P=>{var zA=eA.id,pe=`${eA.x}px`,Ye=`${eA.y}px`,Ze=`${eA.width}px`,Ee=`${eA.height}px`;return zA!==P.e&&ys(tA,"data-cell-highlight",P.e=zA),pe!==P.t&&u(tA,"left",P.t=pe),Ye!==P.a&&u(tA,"top",P.a=Ye),Ze!==P.o&&u(tA,"width",P.o=Ze),Ee!==P.i&&u(tA,"height",P.i=Ee),P},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),tA})()}})}}),$t,gs),G(NA,W(we,{get each(){return e()},children:X=>{const eA=i().templateId?ne(i().templateId||""):null;return W(Ls,{config:X,onPositionUpdate:U,onSizeUpdate:C,onRemove:H,onSnapToCell:E,onCellHover:O,onDragStateChange:Z,get gridCells(){return eA?.template.cells||[]}})}}),ls,Qs),u(te,"border","1px solid var(--border)"),u(te,"background","#000"),u(te,"position","relative"),u(te,"display","flex"),G(te,W(Kl,{dashboardElement:null}),zt,us),u(de,"position","absolute"),u(de,"bottom","1rem"),u(de,"left","50%"),u(de,"transform","translateX(-50%)"),u(de,"color","#666"),G(d,W(mA,{get when(){return s()},get children(){var X=q(bl),eA=X.firstChild,TA=eA.firstChild,tA=TA.nextSibling,P=tA.nextSibling,zA=P.nextSibling,pe=zA.firstChild,Ye=pe.nextSibling,Ze=zA.nextSibling,[Ee,Fs]=Y(Ze.nextSibling),hs=Ee.nextSibling,ds=hs.firstChild;return X.$$click=()=>a(!1),u(X,"position","fixed"),u(X,"top","0"),u(X,"left","0"),u(X,"right","0"),u(X,"bottom","0"),u(X,"background","#ffffff"),u(X,"display","flex"),eA.$$click=$e=>$e.stopPropagation(),u(eA,"background","#000000"),u(eA,"padding","2rem"),u(eA,"border","3px solid #ffffff"),u(eA,"width","90%"),u(tA,"color","#ffffff"),u(P,"width","100%"),u(P,"padding","0.5rem"),u(zA,"display","flex"),u(zA,"gap","0.5rem"),pe.$$click=F,Ye.$$click=()=>window.open(t(),"_blank"),G(eA,W(mA,{get when(){return n()},get children(){var $e=q(Ll),ps=$e.firstChild,qt=ps.nextSibling,ze=qt.nextSibling,Es=ze.nextSibling;return u(qt,"color","#ffffff"),u(ze,"width","100%"),u(ze,"padding","0.5rem"),Es.$$click=L,CA(()=>LA(ze,"value",n())),GA(),$e}}),Ee,Fs),ds.$$click=()=>a(!1),CA(()=>LA(P,"value",t())),GA(),X}}),Cs,Us),CA(X=>{var eA=i().templateId?`${ne(i().templateId)?.template.width||800}px`:"100%",TA=i().templateId?`${ne(i().templateId)?.template.height||600}px`:"100%",tA=`scale(${Q()})`;return eA!==X.e&&u(NA,"width",X.e=eA),TA!==X.t&&u(NA,"height",X.t=TA),tA!==X.a&&u(NA,"transform",X.a=tA),X},{e:void 0,t:void 0,a:void 0}),GA(),d})()};Nt(["click"]);export{Gl as Dashboard};