graview 0.1.30 → 0.1.32
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.
- package/dist/preview/chunk.2NIOHEMX.js +1 -0
- package/dist/preview/{chunk.XRJBLH4N.js → chunk.3AGY4QVS.js} +1 -1
- package/dist/preview/chunk.3HXN4BOY.js +1 -0
- package/dist/preview/{chunk.2CIBWZJG.js → chunk.3K6YSVHC.js} +1 -1
- package/dist/preview/{chunk.FWCOJDOD.js → chunk.3TVXGJTU.js} +1 -1
- package/dist/preview/{chunk.NDADLJE6.js → chunk.3TY5NFLY.js} +1 -1
- package/dist/preview/{chunk.UWGWXFWZ.js → chunk.47STJVRV.js} +1 -1
- package/dist/preview/{chunk.34ZMMURV.js → chunk.4HRAQNJO.js} +6 -6
- package/dist/preview/{chunk.QTMWHE5O.js → chunk.4HZ7QTXZ.js} +1 -1
- package/dist/preview/{chunk.3JGGBLRB.js → chunk.4MERAWS2.js} +1 -1
- package/dist/preview/chunk.52W7WYME.js +1 -0
- package/dist/preview/chunk.5A4AOFOA.js +1 -0
- package/dist/preview/chunk.5H4VXLZF.js +88 -0
- package/dist/preview/{chunk.XS7YFNDU.js → chunk.5T5XGILP.js} +1 -1
- package/dist/preview/chunk.5TVB6BUY.js +1 -0
- package/dist/preview/chunk.5UL7YDUD.js +1 -0
- package/dist/preview/chunk.63GXY2ME.js +1 -0
- package/dist/preview/chunk.6QWV5MVH.js +25 -0
- package/dist/preview/{chunk.PAVR5TK5.js → chunk.6UGEYZAC.js} +1 -1
- package/dist/preview/chunk.6YCBYL2Y.js +2 -0
- package/dist/preview/{chunk.ZYKAS4BT.js → chunk.7GKUVQVF.js} +1 -1
- package/dist/preview/{chunk.T3VPD7JQ.js → chunk.7T7NZZTC.js} +1 -1
- package/dist/preview/chunk.AKFKM4SW.js +3 -0
- package/dist/preview/chunk.AOSMJKLH.js +1 -0
- package/dist/preview/{chunk.D3IECJ2S.js → chunk.ASCLIM2P.js} +1 -1
- package/dist/preview/chunk.B2GLDIAS.js +1 -0
- package/dist/preview/chunk.BNV77BQZ.js +4 -0
- package/dist/preview/chunk.BOO6WVM4.js +117 -0
- package/dist/preview/chunk.BQ3JHEHV.js +1 -0
- package/dist/preview/chunk.CAVBSL27.js +1 -0
- package/dist/preview/{chunk.YLQB3KBA.js → chunk.CDP2XL66.js} +1 -1
- package/dist/preview/chunk.CIPS2OGR.js +1 -0
- package/dist/preview/chunk.CJJLJ3KW.js +2 -0
- package/dist/preview/chunk.CN3UEF5N.js +90 -0
- package/dist/preview/{chunk.6XMEU2Q2.js → chunk.COQKECUH.js} +1 -1
- package/dist/preview/{chunk.QTA4ROAK.js → chunk.CWHRDBOF.js} +1 -1
- package/dist/preview/chunk.CX3KL2C5.js +1 -0
- package/dist/preview/{chunk.AK3IHFCF.js → chunk.D75KC3LL.js} +1 -1
- package/dist/preview/chunk.DAZ2VSRD.js +1 -0
- package/dist/preview/{chunk.RIEHYQLK.js → chunk.DHIUSUCL.js} +50 -24
- package/dist/preview/{chunk.3ADPAGPY.js → chunk.DYSPCGXX.js} +1 -1
- package/dist/preview/chunk.E2YEOMPH.js +1 -0
- package/dist/preview/chunk.EBGAYL32.js +1 -0
- package/dist/preview/chunk.EF3XNU4O.js +1 -0
- package/dist/preview/chunk.EJPI3ST6.js +1 -0
- package/dist/preview/chunk.EKPRNDUV.js +1 -0
- package/dist/preview/chunk.ERIT3R6N.js +1 -0
- package/dist/preview/chunk.EYTBDMTW.js +1 -0
- package/dist/preview/chunk.F6EH7HI2.js +1 -0
- package/dist/preview/{chunk.3URFMWXZ.js → chunk.F6ZK7RMB.js} +2 -2
- package/dist/preview/chunk.FSTCX2AI.js +1 -0
- package/dist/preview/{chunk.HHPGWJDO.js → chunk.FWTIUYXH.js} +1 -1
- package/dist/preview/{chunk.6T2Q6NLO.js → chunk.G5NZVPJU.js} +1 -1
- package/dist/preview/{chunk.VG56IUIQ.js → chunk.GO4XBWJO.js} +1 -1
- package/dist/preview/chunk.GV2CQVKV.js +1 -0
- package/dist/preview/chunk.GYICGZMG.js +3 -0
- package/dist/preview/chunk.H7BST3XO.js +1 -0
- package/dist/preview/chunk.H7EPE74C.js +1 -0
- package/dist/preview/{chunk.26CZTUY4.js → chunk.HAIG6NVX.js} +1 -1
- package/dist/preview/{chunk.V7BDAGDE.js → chunk.HLTRQU4Y.js} +1 -1
- package/dist/preview/{chunk.VS7K3SCD.js → chunk.I6FPNX43.js} +1 -1
- package/dist/preview/chunk.IDVAR5HM.js +1 -0
- package/dist/preview/chunk.J25KOSNW.js +1 -0
- package/dist/preview/chunk.JDUJDAGA.js +1 -0
- package/dist/preview/{chunk.X37L5TN5.js → chunk.JFAOHHJJ.js} +1 -1
- package/dist/preview/chunk.JOOQUWLT.js +341 -0
- package/dist/preview/{chunk.4SJUTBDV.js → chunk.JQU5GEU3.js} +1 -1
- package/dist/preview/chunk.K5ME5GCG.js +1 -0
- package/dist/preview/chunk.K7PMDSOL.js +1 -0
- package/dist/preview/chunk.KSES5U5B.js +1 -0
- package/dist/preview/{chunk.DT7LHWU2.js → chunk.LLLZEGRK.js} +1 -1
- package/dist/preview/chunk.LR3VDXPI.js +1 -0
- package/dist/preview/{chunk.WYTIOLPP.js → chunk.LXBOVRFI.js} +1 -1
- package/dist/preview/{chunk.42YX6NOY.js → chunk.MAF7C3VM.js} +1 -1
- package/dist/preview/chunk.MNP4JI33.js +5 -0
- package/dist/preview/{chunk.O2LK2AO7.js → chunk.MWGGV7DE.js} +1 -1
- package/dist/preview/chunk.N6OX4NEQ.js +1 -0
- package/dist/preview/chunk.NM6MZYFN.js +47 -0
- package/dist/preview/chunk.NRAYZY3X.js +1 -0
- package/dist/preview/chunk.NTF7FVB2.js +1 -0
- package/dist/preview/{chunk.DZRTOURR.js → chunk.OC6IWRQ3.js} +1 -1
- package/dist/preview/chunk.OF34OZ4V.js +1 -0
- package/dist/preview/chunk.OJGHDWI6.js +1 -0
- package/dist/preview/chunk.OKRNJXTV.js +1 -0
- package/dist/preview/chunk.PBSMLINK.js +1 -0
- package/dist/preview/chunk.PHKSMUIA.js +1 -0
- package/dist/preview/{chunk.JN7DIFR3.js → chunk.PIP6Z563.js} +1 -1
- package/dist/preview/chunk.QGTSHKJL.js +1 -0
- package/dist/preview/chunk.QVVJRSRM.js +1 -0
- package/dist/preview/{chunk.L6OMEYL6.js → chunk.QYZNAUIR.js} +1 -1
- package/dist/preview/chunk.R6K6GF5R.js +1 -0
- package/dist/preview/{chunk.JTNWD2CN.js → chunk.RCKTBOY2.js} +1 -1
- package/dist/preview/{chunk.QNGWEV47.js → chunk.RIJUCHP4.js} +1 -1
- package/dist/preview/chunk.SHTJZ6UX.js +1 -0
- package/dist/preview/{chunk.PKK6FRZR.js → chunk.SYAEBGDC.js} +1 -1
- package/dist/preview/chunk.T5VG5A6V.js +1 -0
- package/dist/preview/{chunk.ERXSYPYL.js → chunk.TAQ764IQ.js} +1 -1
- package/dist/preview/chunk.TCNBCTWO.js +1 -0
- package/dist/preview/{chunk.HHI65WFZ.js → chunk.UATVTXZY.js} +1 -1
- package/dist/preview/{chunk.XSTXV6FP.js → chunk.UBFNZMUX.js} +2 -2
- package/dist/preview/{chunk.WAFDCOOG.js → chunk.UGFJKSHU.js} +1 -1
- package/dist/preview/chunk.UHUGOTUU.js +19 -0
- package/dist/preview/chunk.ULRW47RP.js +1 -0
- package/dist/preview/chunk.UNL2HIF2.js +1 -0
- package/dist/preview/chunk.UZGRRDHD.js +1 -0
- package/dist/preview/{chunk.BPWNWE7N.js → chunk.VG3O4LWB.js} +1 -1
- package/dist/preview/chunk.WAZ7OGBD.js +1 -0
- package/dist/preview/{chunk.3JNMSOFG.js → chunk.XANVHJQ4.js} +1 -1
- package/dist/preview/chunk.XKABS745.js +1 -0
- package/dist/preview/chunk.XMC7YDWT.js +1 -0
- package/dist/preview/chunk.XNJEFUF7.js +3 -0
- package/dist/preview/chunk.Y6ZNFQK3.js +6 -0
- package/dist/preview/{chunk.J2ITFGN3.js → chunk.YIR7PPF3.js} +1 -1
- package/dist/preview/index.html +51 -0
- package/dist/preview/page.js +6 -6
- package/package.json +6 -6
- package/dist/preview/chunk.2EXGG6BB.js +0 -1
- package/dist/preview/chunk.2NBYNZRD.js +0 -1
- package/dist/preview/chunk.2XAONC66.js +0 -1
- package/dist/preview/chunk.3R4W2P5X.js +0 -1
- package/dist/preview/chunk.3SKKIHU3.js +0 -4
- package/dist/preview/chunk.3VL5WECB.js +0 -1
- package/dist/preview/chunk.4ALKPNXM.js +0 -1
- package/dist/preview/chunk.4HP7UWA2.js +0 -1
- package/dist/preview/chunk.5U5J3ISK.js +0 -1
- package/dist/preview/chunk.6V2RG5JG.js +0 -5
- package/dist/preview/chunk.7BWT5L2L.js +0 -1
- package/dist/preview/chunk.C5CYZNSJ.js +0 -1
- package/dist/preview/chunk.CM6LOIQE.js +0 -88
- package/dist/preview/chunk.FDELO7NY.js +0 -116
- package/dist/preview/chunk.FGVKJWNS.js +0 -6
- package/dist/preview/chunk.GFF2FB2J.js +0 -25
- package/dist/preview/chunk.GLBHQFJ2.js +0 -1
- package/dist/preview/chunk.HSCTWAUV.js +0 -1
- package/dist/preview/chunk.INZUEWC5.js +0 -1
- package/dist/preview/chunk.JH6MU6TX.js +0 -2
- package/dist/preview/chunk.JISMMIMX.js +0 -1
- package/dist/preview/chunk.JPHNKWTY.js +0 -1
- package/dist/preview/chunk.K75FUIZI.js +0 -1
- package/dist/preview/chunk.K776HO42.js +0 -2
- package/dist/preview/chunk.KN3ULTGF.js +0 -1
- package/dist/preview/chunk.KOB6N3SL.js +0 -1
- package/dist/preview/chunk.KQT7WAQE.js +0 -1
- package/dist/preview/chunk.L4DECHXR.js +0 -327
- package/dist/preview/chunk.LQ7V6KEE.js +0 -1
- package/dist/preview/chunk.MD74YVRN.js +0 -3
- package/dist/preview/chunk.MGNP4LAM.js +0 -1
- package/dist/preview/chunk.NCTOBUCT.js +0 -1
- package/dist/preview/chunk.NO52VON3.js +0 -1
- package/dist/preview/chunk.OAF7TUMI.js +0 -1
- package/dist/preview/chunk.OQ4KFN6W.js +0 -1
- package/dist/preview/chunk.OQDETV4X.js +0 -1
- package/dist/preview/chunk.OXQMNIRO.js +0 -1
- package/dist/preview/chunk.OZNW5W4Z.js +0 -1
- package/dist/preview/chunk.QIAKO27D.js +0 -1
- package/dist/preview/chunk.R26DREVU.js +0 -1
- package/dist/preview/chunk.RI3PYG5T.js +0 -19
- package/dist/preview/chunk.RRVIXV7W.js +0 -1
- package/dist/preview/chunk.RYT5U3QM.js +0 -1
- package/dist/preview/chunk.SE5SKFQH.js +0 -1
- package/dist/preview/chunk.SOBC3CTN.js +0 -47
- package/dist/preview/chunk.SOD3PBJM.js +0 -1
- package/dist/preview/chunk.UDSEJKCY.js +0 -1
- package/dist/preview/chunk.UZWWDAGM.js +0 -14
- package/dist/preview/chunk.V5ZYUVMH.js +0 -1
- package/dist/preview/chunk.VOAZBHCG.js +0 -1
- package/dist/preview/chunk.VSZQXB4Q.js +0 -3
- package/dist/preview/chunk.W3S6UXNA.js +0 -1
- package/dist/preview/chunk.Y4UXEL6Y.js +0 -1
- package/dist/preview/chunk.YJUB4OD7.js +0 -1
- package/dist/preview/chunk.YNQDVGZM.js +0 -1
- package/dist/preview/chunk.YV2LJFGS.js +0 -1
- package/dist/preview/chunk.Z2YUYZT4.js +0 -1
- /package/dist/preview/{chunk.EYZ7MHBZ.js → chunk.GZHZLJBF.js} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{a as
|
|
2
|
-
${r}`);this.hint=r;this.name="BoardBindingError"}},
|
|
3
|
-
`),style:{...H,display:"grid",justifyItems:ae?"center":"start",gap:3,opacity:j?.5:1,transition:"opacity 160ms ease"},children:[ae?(0,N.jsxs)("span",{style:{position:"relative",width:34,height:34,borderRadius:999,display:"grid",placeItems:"center",fontSize:"0.75rem",letterSpacing:"0.02em",border:D?"1.5px dashed var(--graview-warn)":`1px solid ${G?"var(--graview-warn)":"var(--graview-edge-bright)"}`,background:D?"transparent":G?"var(--graview-panel-warning)":"var(--graview-panel)",color:D||G?"var(--graview-warn)":"var(--graview-ink)",boxShadow:D?void 0:"var(--graview-lift-low)"},children:[p.code,v&&!D?(0,N.jsx)("span",{"aria-hidden":"true",style:{position:"absolute",top:-3,right:-3,fontSize:"0.6875rem",lineHeight:1,color:"var(--graview-warn)"},children:"\u26A0"}):null]}):(0,N.jsxs)("span",{style:{display:"grid",gap:1,minWidth:0,maxWidth:180,padding:"5px 10px 6px",borderRadius:8,border:D?"1.5px dashed var(--graview-warn)":`1px solid ${G?"var(--graview-warn)":"var(--graview-edge-bright)"}`,background:D?"transparent":G?"var(--graview-panel-warning)":"var(--graview-panel)",boxShadow:D?void 0:"var(--graview-lift-low)"},children:[(0,N.jsxs)("span",{style:{fontSize:"0.8125rem",fontWeight:550,lineHeight:1.25,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",color:D||G?"var(--graview-warn)":"var(--graview-ink)"},children:[p.code,v&&!D?" \u26A0":null]}),D?(0,N.jsx)("span",{style:{fontSize:"0.75rem",lineHeight:1.3,color:"var(--graview-warn)"},children:Ue}):(0,N.jsx)("span",{style:{display:"flex",flexWrap:"wrap",gap:"0 8px",fontSize:"0.75rem",lineHeight:1.3},children:p.occupants.map(F=>(0,N.jsxs)("span",{...K(F),style:{whiteSpace:"nowrap",color:ve(F)},children:[F.label,l.has(F.id)?" \u26A0":""]},F.id))})]}),ae?D?(0,N.jsx)("span",{style:{fontSize:"0.75rem",whiteSpace:"nowrap",color:"var(--graview-warn)"},children:Ue}):p.occupants.map(F=>(0,N.jsxs)("span",{...K(F),style:{fontSize:"0.75rem",whiteSpace:"nowrap",color:ve(F)},children:[F.label,l.has(F.id)?" \u26A0":""]},F.id)):null]},p.id)},ge=i.zones??[],pe=ge.map((p,H)=>({label:p.label,slots:x.slots.filter(D=>D.y>=p.from&&(D.y<p.to||H===ge.length-1&&D.y<=p.to))})),T=new Set(pe.flatMap(p=>p.slots.map(H=>H.id))),$=x.slots.filter(p=>!T.has(p.id));($.length>0||pe.length===0)&&pe.push({label:"",slots:$});let V={boxSizing:"border-box",borderRadius:12,border:"1px solid var(--graview-edge)",background:"linear-gradient(var(--graview-panel-muted), var(--graview-panel-muted)), var(--graview-panel)",overflow:"hidden"};return(0,N.jsxs)(te,{title:n??"Board",meta:x.slots.length===0?void 0:x.empty.length===0?`all ${x.slots.length} filled`:`${x.empty.length} unfilled`,...P?{style:{flex:"1 1 auto",minHeight:0,height:"100%"}}:{},children:[(0,N.jsxs)("div",{ref:R,style:{display:"flex",gap:28,alignItems:"stretch",justifyContent:"center",flex:"1 1 auto",minHeight:0},children:[P&&U?(0,N.jsxs)("div",{style:{width:260,flex:"0 0 auto",alignSelf:"center",display:"grid",gap:8},children:[(0,N.jsx)("span",{style:{fontSize:"0.75rem",letterSpacing:"0.14em",textTransform:"uppercase",color:"var(--graview-ink-faint)"},children:"What is marked"}),U]}):null,ne?(0,N.jsx)("div",{"data-graview-primitive":"board","data-graview-arrange":"shelf",style:{...V,overflow:"auto",flex:"1 1 auto",minWidth:0,alignSelf:"stretch",display:"grid",alignContent:"start"},children:pe.map((p,H)=>(0,N.jsxs)("section",{"data-graview-zone":p.label||void 0,style:{display:"grid",gap:8,padding:"10px 14px 14px",...H>0?{borderTop:"1px dashed var(--graview-edge)"}:{}},children:[p.label?(0,N.jsx)("span",{style:{fontSize:"0.6875rem",letterSpacing:"0.14em",textTransform:"uppercase",color:"var(--graview-ink-faint)"},children:p.label}):null,p.slots.length>0?(0,N.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:"10px 12px",alignItems:"flex-start"},children:p.slots.map(D=>ee(D,{}))}):(0,N.jsx)("span",{style:{fontSize:"0.75rem",color:"var(--graview-ink-faint)"},children:"nothing here"})]},p.label||`band-${H}`))}):(0,N.jsxs)("div",{style:{display:"flex",gap:5,alignItems:"stretch",minWidth:0,...M?{flex:"1 1 auto",alignSelf:"flex-start"}:{}},children:[!A&&ge.length>0?(0,N.jsx)("div",{"aria-hidden":"true",style:{position:"relative",width:15,flex:"0 0 auto",alignSelf:"stretch"},children:ge.map(p=>(0,N.jsx)("span",{title:p.label,style:{position:"absolute",top:`${p.from*100}%`,height:`${(p.to-p.from)*100}%`,right:0,writingMode:"vertical-rl",transform:"rotate(180deg)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"0.6875rem",letterSpacing:"0.14em",textTransform:"uppercase",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",color:"var(--graview-ink-faint)"},children:p.label},p.label))}):null,(0,N.jsxs)("div",{"data-graview-primitive":"board","data-graview-arrange":"exact",style:{...V,position:"relative",aspectRatio:`${A?1/C:C}`,...M?{width:"100%",height:"auto",flex:"1 1 auto",minWidth:0,alignSelf:"flex-start"}:{height:"100%",flex:"0 1 auto",...k!==null?{width:Math.round(k*(A?1/C:C))}:{}},maxWidth:"100%"},children:[ge.map(p=>(0,N.jsx)("div",{"aria-hidden":"true",style:{position:"absolute",...A?{top:0,bottom:0,left:`${(1-p.to)*100}%`,width:`${(p.to-p.from)*100}%`,borderLeft:"1px dashed var(--graview-edge)"}:{left:0,right:0,top:`${p.from*100}%`,height:`${(p.to-p.from)*100}%`,borderBottom:"1px dashed var(--graview-edge)"}}},p.label)),A?ge.map(p=>(0,N.jsx)("span",{"aria-hidden":"true",title:p.label,style:{position:"absolute",bottom:3,left:`${(1-p.to)*100}%`,width:`${(p.to-p.from)*100}%`,textAlign:"center",fontSize:"0.6875rem",letterSpacing:"0.14em",textTransform:"uppercase",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",color:"var(--graview-ink-faint)"},children:p.label},`label-${p.label}`)):null,x.slots.map(p=>ee(p,{position:"absolute",left:`${w(p.x,p.y).x*100}%`,top:`${w(p.x,p.y).y*100}%`,transform:"translate(-50%, -50%)",width:"max-content",maxWidth:"100%"}))]})]}),x.spare.length>0?(0,N.jsxs)("div",{style:{display:"grid",gap:6,alignContent:"start",minWidth:0},children:[(0,N.jsx)("span",{style:{fontSize:"0.75rem",letterSpacing:"0.14em",textTransform:"uppercase",color:"var(--graview-ink-faint)"},children:"Not in"}),(0,N.jsx)(Ee,{pick:!0,max:10,items:x.spare.map(p=>({...p,emphasis:s.size===0?"plain":s.has(p.id)?"lit":"dimmed"}))})]}):null]}),P?null:U]})}function Dt(e){function t(n){let{store:r}=X(),a=Tn(He(r.graph,r.schema,n.nodes),r.graph.allEdges(),e,r.schema),d=[...a.slots.flatMap(c=>c.occupants.map(f=>f.id)),...a.spare.map(c=>c.id)].map(c=>r.graph.getNode(c)).filter(c=>c!==void 0),{arranged:m,bar:g}=Pe(n,{...e.arranging!==void 0?{allow:e.arranging}:{},lensAllows:{group:!1},...e.arrangedBy?{arrangedBy:e.arrangedBy}:{},subject:d}),y=(0,N.jsx)($r,{schema:r.schema,...n,options:e,...e.arranging===!1?{}:{occupants:m.nodes.map(c=>c.id)}});return Me(n,r.schema,g?(0,N.jsxs)("div",{style:{display:"grid",gap:6,height:"100%",minHeight:0,gridTemplateRows:"auto 1fr"},children:[g,y]}):y)}return{name:"board",requiredRoles:[...Or],options:e,View:t,build(n,r,a){return Tn(n,r,e,a)}}}var pn=_(De(),1);var zt=864e5;function Nn(e){if(typeof e!="string")return null;let t=/^(\d{4}-\d{2}-\d{2})/.exec(e);return t?t[1]:null}function sn(e){if(typeof e!="string")return null;let t=/^\d{4}-\d{2}-\d{2}[T ](\d{2}):(\d{2})/.exec(e);return t?Number(t[1])*60+Number(t[2]):null}var on=e=>Date.UTC(Number(e.slice(0,4)),Number(e.slice(5,7))-1,Number(e.slice(8,10))),ln=e=>new Date(e).toISOString().slice(0,10);function we(e,t){return ln(on(e)+t*zt)}function ze(e,t){let n=Number(e.slice(0,4)),r=Number(e.slice(5,7))-1+t,a=Number(e.slice(8,10)),i=new Date(Date.UTC(n,r+1,0)).getUTCDate();return ln(Date.UTC(n,r,Math.min(a,i)))}var Dn=e=>new Date(on(e)).getUTCDay();function Ge(e,t=1){let n=(Dn(e)-t+7)%7;return we(e,-n)}var zn=e=>`${e.slice(0,7)}-01`;function oe(e,t){return Math.round((on(t)-on(e))/zt)}function je(e,t){return Array.from({length:t},(n,r)=>we(e,r))}var Bt=e=>Zn(e,"short"),Oe=e=>Jn(e,{weekday:"short"}),Bn=e=>Ke(e);function Be(e,t){let n=t?.fieldRoles?.when;return e&&!e.start&&n?{...e,start:n}:e}function Wt(e,t){return t===void 0?!1:typeof t=="string"?e[t]===!0:t.is.includes(e[t.field])}var dn=["start"],Rr=["day","week","month","quarter","year","agenda"];function cn(e){return e.horizon?["day","week","month","quarter","year","years","agenda"]:Rr}function It(e,t){return e==="years"?t?.title??"Years":`The ${e}`}function Vt(){let e=new Date;return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`}var Wn=class extends Error{constructor(n,r){super(`The calendar lens has no binding for ${r.map(a=>`"${a}"`).join(", ")} on "${n}". Bind them in the lens declaration: bindings: { ${n}: { start: "<field>" } }.`);this.kind=n;this.missing=r;this.name="CalendarBindingError"}};function gn(e,t,n){let r=Be(t[e.kind],n?.tryDefinition(e.kind));if(!r)return null;let a=e,i=n?.tryDefinition(e.kind)?.fields.shape,d=dn.filter(f=>{let x=r[f];return x?i?!(x in i):!(x in a):!0});if(d.length>0)throw new Wn(e.kind,d);let m=Nn(a[r.start]);if(m===null)return null;let g=(r.end?Nn(a[r.end]):null)??m,y=sn(a[r.start]),c=r.label?a[r.label]:void 0;return{id:e.id,kind:e.kind,label:typeof c=="string"&&c.length>0?c:he(n?.tryDefinition(e.kind),e),from:m,to:oe(m,g)<0?m:g,at:r.allDay&&a[r.allDay]===!0?null:y,allDay:r.allDay&&a[r.allDay]===!0||y===null,done:Wt(a,r.done)}}function Ht(e,t,n,r){let a=gn(e,t,n);if(!a)return[];let i=Be(t[e.kind],n?.tryDefinition(e.kind)).start,d=e,m=d[i],g=d[tt(i)];if(typeof m!="string"||!rt(g))return[a];let y=oe(a.from,a.to);return("next"in r?[it(m,g,r.next)]:at(m,g,{from:we(r.from,-y),to:r.to,limit:400})).map(f=>({...a,from:f.slice(0,10),to:we(f.slice(0,10),y),repeats:!0}))}function un(e,t){return e.filter(n=>oe(n.from,t)>=0&&oe(t,n.to)>=0).sort((n,r)=>n.allDay!==r.allDay?n.allDay?-1:1:n.at!==r.at?(n.at??0)-(r.at??0):n.label.localeCompare(r.label))}function Gt(e,t,n){let r=ot(e.schema,e.allMutations()).get(t)?.get(n)??[],a=new Map(e.allMutations().map(d=>[d.name,d]));for(let d of r){let m=a.get(d),g=m?.subject;if(!m||!g)continue;let y=m.input?.shape??{};if(n in y)return{name:m.name,arg:g.arg}}let i=e.allMutations().find(d=>d.derived?.act==="edit"&&d.derived.kind===t);return i?.subject?{name:i.name,arg:i.subject.arg}:null}var jt=(e,t)=>({from:zn(e),to:_t(e),label:kn(e,{short:!0,year:t})});function _t(e){return ln(Date.UTC(Number(e.slice(0,4)),Number(e.slice(5,7)),0))}function Ar(e){let t=Math.floor((Number(e.slice(5,7))-1)/3);return`${e.slice(0,4)}-${String(t*3+1).padStart(2,"0")}-01`}function Ft(e,t,n={}){let r=n.weekStartsOn??1,a=(g,y)=>({from:g,to:g,label:String(Number(g.slice(8,10))),...y?{outside:!0}:{}});if(e==="day")return{title:Oe(t),grain:"day",columns:1,cells:[a(t)]};if(e==="week"){let g=Ge(t,r);return{title:`${Oe(g)} \u2013 ${Oe(we(g,6))}`,grain:"day",columns:7,cells:je(g,7).map(y=>a(y))}}if(e==="agenda")return{title:`From ${Oe(t)}`,grain:"day",columns:1,cells:je(t,42).map(g=>a(g))};if(e==="quarter"){let g=Ar(t),y=_t(ze(g,2)),c=[];for(let f=Ge(g,r);oe(f,y)>=0;f=we(f,7))c.push({from:f,to:we(f,6),label:Xn(f),...oe(f,g)>0&&oe(we(f,6),g)>0?{outside:!0}:{}});return{title:`Q${Math.floor((Number(t.slice(5,7))-1)/3)+1} ${t.slice(0,4)}`,grain:"week",columns:4,cells:c}}if(e==="year"){let g=t.slice(0,4);return{title:g,grain:"month",columns:4,cells:Array.from({length:12},(y,c)=>jt(`${g}-${String(c+1).padStart(2,"0")}-01`,!1))}}if(e==="years"){let g=Number(t.slice(0,4)),y=g+Math.max(1,n.horizon?.years??1)-1,c=n.horizon?.from!==void 0||n.horizon?.to!==void 0,f=c?n.horizon?.from??g:Math.min(g,n.fit?.first??g),s=(c?Math.max(f,n.horizon?.to??f+Math.max(1,n.horizon?.years??1)-1):Math.max(y,n.fit?.last??y))-f+1,l=Array.from({length:s},(h,o)=>String(f+o));return s>Er?{title:`${n.horizon?.title??"Years"} \xB7 ${l[0]}\u2013${l[l.length-1]}`,grain:"year",columns:5,years:l,cells:l.map(h=>({from:`${h}-01-01`,to:`${h}-12-31`,label:h}))}:{title:`${n.horizon?.title??"Years"} \xB7 ${l[0]}\u2013${l[l.length-1]}`,grain:"month",columns:4,years:l,cells:l.flatMap(h=>Array.from({length:12},(o,b)=>jt(`${h}-${String(b+1).padStart(2,"0")}-01`,!0)))}}let i=zn(t),d=Ge(i,r),m=t.slice(0,7);return{title:kn(t),grain:"day",columns:7,cells:je(d,42).map(g=>a(g,g.slice(0,7)!==m))}}function qt(e,t,n){return e.filter(r=>oe(r.from,n)>=0&&oe(t,r.to)>=0).sort((r,a)=>r.allDay!==a.allDay?r.allDay?-1:1:r.from!==a.from?r.from.localeCompare(a.from):r.at!==a.at?(r.at??0)-(a.at??0):r.label.localeCompare(a.label))}var Er=10;function Ut(e){return e==="year"?"year":e==="month"?"month":e==="week"?"week":"day"}var Kt=_(De(),1);var Q=_(J(),1);function In({label:e,glyph:t,onPress:n}){return(0,Q.jsx)("button",{type:"button","aria-label":e,title:e,onClick:n,style:_e,children:t})}var _e={minHeight:24,minWidth:24,padding:"2px 9px",borderRadius:6,fontSize:"0.8125rem",borderWidth:1,borderStyle:"solid",borderColor:"transparent",color:"var(--graview-ink-muted)",background:"transparent"},Yt={day:12,week:4,month:3,year:5};function Qt({span:e,weekStartsOn:t,entries:n,today:r,perCell:a,emphasisOf:i,broken:d,hue:m,onOpen:g,onMove:y}){let c=(0,Kt.useRef)(null),f=Ve(c),x=f===null?e.columns:Math.max(1,Math.floor(f/44)),s=x<e.columns,l=s?x:e.columns,h=!s&&e.grain==="day"&&e.columns===7?je(Ge(e.cells[0]?.from??r,t),7):e.grain==="day"&&e.columns===1?e.cells.map(o=>o.from):null;return s&&e.grain==="day"&&e.columns>1?(0,Q.jsx)("div",{ref:c,"data-calendar-shape":"agenda",style:{display:"grid",minHeight:0,flex:1},children:(0,Q.jsx)(mn,{days:e.cells.map(o=>o.from),entries:n,today:r,emphasisOf:i,broken:d,hue:m,onMove:(o,b)=>y(o,{from:b,to:b,label:b},"day")})}):(0,Q.jsxs)("div",{ref:c,"data-calendar-shape":s?"wrapped":"grid",style:{display:"grid",gap:4,gridTemplateRows:h?"auto 1fr":"1fr",minHeight:0,flex:1},children:[h?(0,Q.jsx)("div",{style:{display:"grid",gridTemplateColumns:`repeat(${l}, minmax(0, 1fr))`,gap:4},children:h.map(o=>(0,Q.jsx)("span",{style:{fontSize:"0.75rem",letterSpacing:"0.16em",textTransform:"uppercase",color:"var(--graview-ink-muted)",textAlign:"center"},children:e.columns===7?Bt(Dn(o)):Oe(o)},o))}):null,(0,Q.jsx)("div",{tabIndex:0,"aria-label":`The days of ${e.title}`,style:{display:"grid",gridTemplateColumns:`repeat(${l}, minmax(0, 1fr))`,gridAutoRows:"max-content",gap:4,minHeight:0,overflow:"auto"},children:e.cells.map((o,b)=>{let C=qt(n,o.from,o.to),R=C.slice(0,a),A=C.slice(a),S=A.filter(u=>d.has(u.id)).length,k=oe(o.from,r)>=0&&oe(r,o.to)>=0;return(0,Q.jsxs)("div",{"data-calendar-day":e.grain==="day"?o.from:void 0,"data-calendar-cell":o.from,"data-calendar-grain":e.grain,"data-calendar-count":C.length,"data-calendar-outside":o.outside||void 0,onDragOver:u=>{u.dataTransfer.types.includes("text/graview-node")&&(u.preventDefault(),u.dataTransfer.dropEffect="move")},onDrop:u=>{let E=u.dataTransfer.getData("text/graview-node");E&&(u.preventDefault(),u.stopPropagation(),y(E,o,e.grain))},style:{minHeight:62,display:"flex",flexDirection:"column",gap:2,padding:4,borderRadius:7,border:"1px solid var(--graview-edge)",background:k?"var(--graview-panel)":o.outside?"var(--graview-panel-muted)":"transparent"},children:[(0,Q.jsxs)("span",{style:{display:"flex",alignItems:"baseline",gap:4},children:[(0,Q.jsx)("span",{style:{fontSize:"0.75rem",fontVariantNumeric:"tabular-nums",color:k?"var(--graview-accent)":"var(--graview-ink-faint)"},children:o.label}),e.grain!=="day"&&C.length>0?(0,Q.jsx)("span",{style:{fontSize:"0.75rem",color:"var(--graview-ink-faint)",marginLeft:"auto"},children:C.length}):null]}),R.map(u=>(0,Q.jsx)(Jt,{entry:u,cell:o,rowStart:b%l===0,emphasis:i(u.id),flagged:d.has(u.id),hue:m(u)},`${u.id}:${u.from}:${o.from}`)),A.length>0?(0,Q.jsxs)("button",{type:"button","data-testid":`calendar-more-${o.from}`,onClick:()=>g(o),title:`Open ${o.label}`,style:{minHeight:24,padding:"1px 5px",fontSize:"0.75rem",borderRadius:5,border:"1px dashed var(--graview-edge)",background:"transparent",color:S>0?"var(--graview-warn)":"var(--graview-ink-muted)",textAlign:"left"},children:["+",A.length," more",S>0?` \xB7 ${S} flagged`:""]}):null]},o.from)})})]})}function mn({days:e,entries:t,today:n,emphasisOf:r,broken:a,hue:i,onMove:d}){let m=e.map(g=>({day:g,here:un(t,g)})).filter(({here:g})=>g.length>0);return m.length===0?(0,Q.jsx)("p",{"data-testid":"calendar-empty",style:{margin:0,fontSize:"0.875rem",color:"var(--graview-ink-muted)"},children:"Nothing is scheduled in the next six weeks."}):(0,Q.jsx)("ol",{tabIndex:0,"aria-label":"What is scheduled",style:{margin:0,padding:0,listStyle:"none",display:"grid",alignContent:"start",gap:10,overflow:"auto",minHeight:0},children:m.map(({day:g,here:y})=>(0,Q.jsxs)("li",{"data-calendar-day":g,onDragOver:c=>{c.dataTransfer.types.includes("text/graview-node")&&(c.preventDefault(),c.dataTransfer.dropEffect="move")},onDrop:c=>{let f=c.dataTransfer.getData("text/graview-node");f&&(c.preventDefault(),c.stopPropagation(),d(f,g))},style:{display:"grid",gap:4},children:[(0,Q.jsxs)("span",{style:{fontSize:"0.75rem",letterSpacing:"0.16em",textTransform:"uppercase",color:g===n?"var(--graview-accent)":"var(--graview-ink-muted)"},children:[Oe(g),g===n?" \xB7 today":""]}),y.map(c=>(0,Q.jsx)(Jt,{entry:c,cell:{from:g,to:g,label:g},emphasis:r(c.id),flagged:a.has(c.id),hue:i(c)},`${c.id}:${c.from}:${g}`))]},g))})}function Jt({entry:e,cell:t,emphasis:n,flagged:r,hue:a,rowStart:i=!1}){let d=oe(t.from,e.from)>=0,m=oe(e.to,t.to)>=0,g=!(d&&m),y=e.at!==null&&d&&e.from===t.from?`${Bn(e.at)} ${e.label}`:e.label;return(0,Q.jsx)("span",{"data-graview-pick":e.id,"data-calendar-entry":e.id,"data-calendar-repeat":e.repeats?e.from:void 0,draggable:!e.repeats,onDragStart:c=>{c.dataTransfer.setData("text/graview-node",e.id),c.dataTransfer.effectAllowed="move"},"data-graview-emphasis":n,"data-calendar-part":g?d?"opens":m?"closes":"through":void 0,"data-calendar-in":t.from,title:g?`${e.label} \xB7 ${e.from} \u2013 ${e.to}`:`${e.label}${e.at===null?" \xB7 all day":` \xB7 ${Bn(e.at)}`}${e.repeats?" \xB7 repeats":""}`,style:{display:"block",minHeight:24,boxSizing:"border-box",padding:"3px 6px",fontSize:"0.75rem",lineHeight:1.35,borderRadius:g?d?"5px 0 0 5px":m?"0 5px 5px 0":0:5,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",textDecoration:e.done?"line-through":"none",opacity:n==="dimmed"?.35:e.done?.6:1,background:`color-mix(in oklab, hsl(${Math.round(a)} 70% 55%) ${n==="lit"?38:20}%, transparent)`,color:"var(--graview-ink)",...n==="lit"?{outline:"1px solid var(--graview-accent)"}:{},...r?{borderLeft:"3px solid var(--graview-warn)",paddingLeft:4}:{}},children:d||i?e.repeats?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)("span",{"aria-hidden":"true",children:"\u21BB "}),y]}):y:" "})}var q=_(J(),1);function Mr(e){let t=1/0,n=-1/0;for(let r of e)r&&(t=Math.min(t,Number(r.from.slice(0,4))),n=Math.max(n,Number(r.to.slice(0,4))));return Number.isFinite(t)&&Number.isFinite(n)?{first:t,last:n}:void 0}function Xt(e){let t=n=>function(a){let{store:i}=X(),{view:d}=Je(),m=n?{...e,range:n}:e,g=d.within?.range??m.range??"month",y=Object.keys(e.bindings),{nodes:c,arranged:f,arrangement:x,bar:s}=Pe(a,{...e.arranging!==void 0?{allow:e.arranging}:{},lensAllows:{sort:!1,group:g==="agenda"},...e.arrangedBy?{arrangedBy:e.arrangedBy}:{},...y[0]?{kind:(a.nodes??[]).find(C=>y.includes(String(C.kind)))?.kind??y[0]}:{}}),l=g==="agenda"&&f.grouped&&x.group?f.groups.map(C=>({label:C.label,ids:new Set(C.nodes.map(R=>R.id))})):void 0,h=new Set((a.nodes??[]).map(C=>String(C.kind))),o=y.filter(C=>!h.has(C)&&i.schema.tryDefinition(C)!==void 0).flatMap(C=>{let R=i.schema.tryDefinition(C);return i.graph.nodesOfKind(C).filter(A=>d.past===!0||We(R,A))}),b=o.length===0?c:[...c,...a.budget!==void 0?o.slice(0,a.budget):o];return Me(a,i.schema,(0,q.jsx)(Pr,{schema:i.schema,...a,nodes:b,options:{...m,today:m.today??i.today()??Vt()},...s?{bar:s}:{},...l?{groups:l}:{}}))};return{name:"calendar",requiredRoles:[...dn],bindings:e.bindings,options:e,View:t(),at:n=>t(n),ranges:()=>cn(e).map(n=>({range:n,title:It(n,e.horizon)})),place:(n,r)=>n.map(a=>gn(a,e.bindings,r)).filter(a=>a!==null)}}function Pr({nodes:e,label:t,fidelity:n,mode:r,options:a,schema:i,selectedIds:d=[],implicated:m=[],flagged:g=[],bar:y,groups:c}){let{view:f,go:x}=Je(),{store:s,principal:l}=X(),h=f.within?.at??a.today,o=f.within?.range??a.range??"month",b=a.weekStartsOn??1,C=new Set([...m,...d]),R=$=>C.size===0?"plain":C.has($)?"lit":"dimmed",A=new Set(g),S=o==="years"&&f.within?.at===void 0?Mr((e??[]).map($=>gn($,a.bindings,i))):void 0,k=Ft(o,h,{weekStartsOn:b,...a.horizon?{horizon:a.horizon}:{},...S?{fit:S}:{}}),E=n==="glyph"||n==="summary"?{next:a.today}:{from:k.cells[0]?.from??h,to:k.cells[k.cells.length-1]?.to??h},M=(e??[]).flatMap($=>Ht($,a.bindings,i,E)),B=a.hueOf??($=>de($.kind));if(n==="glyph")return(0,q.jsx)(ye,{label:`${t??"Calendar"} \xB7 ${M.length}`,hue:de("calendar")});if(n==="summary"){let $=un(M,a.today);return(0,q.jsx)(te,{title:t??"Calendar",meta:`${M.length} dated`,tone:"muted",children:(0,q.jsx)(Ee,{max:6,items:$.length>0?$.map(V=>({id:V.id,label:V.label,hue:B(V)})):M.filter(V=>oe(a.today,V.from)>=0).sort((V,p)=>V.from.localeCompare(p.from)).slice(0,6).map(V=>({id:V.id,label:`${V.from.slice(5)} ${V.label}`,hue:B(V)}))})})}let w=r==="fullscreen",[W,P]=(0,pn.useState)(null),U=($,V,p)=>{let H=s.graph.getNode($);if(!H)return;let D=Be(a.bindings[H.kind],s.schema.tryDefinition(H.kind));if(!D)return;let j=Gt(s,H.kind,D.start);if(!j){P({text:`Nothing declared writes the ${Cn(s.schema.definitions.find(K=>K.kind===H.kind),D.start).toLowerCase()}, so this cannot be moved from here.`,tone:"refused"});return}let v=V.from,O=H[D.start],ie=sn(O)===null?v:`${v}${String(O).slice(10)}`,se={name:j.name,args:{[j.arg]:$,[D.start]:ie}},ue=s.permits(se,l);if(!ue.ok){P({text:ue.refusal.message,tone:"refused"});return}try{s.apply(se,{author:l}),P(p==="day"?null:{text:`Moved to ${Oe(v)} \u2014 a ${p} is coarser than the ${Cn(s.schema.definitions.find(K=>K.kind===H.kind),D.start).toLowerCase()} holds, so it takes the first day of the cell. Undo puts it back.`,tone:"rounded"})}catch(K){P({text:K instanceof Error?K.message:String(K),tone:"refused"})}},ne=$=>{let V=o==="years"?ze(`${k.years?.[0]??h.slice(0,4)}${h.slice(4)}`,$*12*Math.max(1,k.years?.length??a.horizon?.years??1)):o==="year"?ze(h,$*12):o==="quarter"?ze(h,$*3):o==="month"?ze(h,$):o==="week"?we(h,$*7):we(h,$);x(Qe(f,"at",V))},ae=($,V)=>{let p=Qe(f,"range",$);V!==void 0&&(p=Qe(p,"at",V)),x(p)},ee=(0,pn.useRef)(null),ge=Ve(ee),pe=ge!==null&&ge<420,T=$=>$==="years"?a.horizon?.title??"years":$.charAt(0).toUpperCase()+$.slice(1);return(0,q.jsx)(te,{title:t??"Calendar",meta:k.title,style:{gap:10,...w?{flex:"1 1 auto",minHeight:0,height:"100%"}:{}},children:(0,q.jsxs)("div",{ref:ee,"data-testid":"calendar","data-calendar-range":o,"data-calendar-at":h,style:{display:"flex",flexDirection:"column",height:"100%",minHeight:0,gap:8},children:[(0,q.jsxs)("div",{style:{display:"flex",alignItems:"center",flexWrap:"wrap",gap:6},children:[(0,q.jsxs)("nav",{"aria-label":"When",style:{display:"flex",gap:4},children:[(0,q.jsx)(In,{label:"Previous",glyph:"\u2039",onPress:()=>ne(-1)}),(0,q.jsx)("button",{type:"button","data-testid":"calendar-today",onClick:()=>x(Qe(f,"at",a.today)),style:_e,children:"Today"}),(0,q.jsx)(In,{label:"Next",glyph:"\u203A",onPress:()=>ne(1)})]}),pe?(0,q.jsx)("select",{"aria-label":"Range","data-testid":"calendar-ranges",value:o,onChange:$=>ae($.target.value),style:{..._e,borderRadius:999,borderColor:"var(--graview-edge)",background:void 0,backgroundColor:"transparent",marginLeft:"auto",maxWidth:"50%",paddingRight:24,appearance:"none",WebkitAppearance:"none",backgroundImage:"linear-gradient(45deg, transparent 50%, currentColor 50%), linear-gradient(135deg, currentColor 50%, transparent 50%)",backgroundPosition:"calc(100% - 13px) 55%, calc(100% - 9px) 55%",backgroundSize:"4px 4px, 4px 4px",backgroundRepeat:"no-repeat"},children:cn(a).map($=>(0,q.jsx)("option",{value:$,children:T($)},$))}):(0,q.jsx)("div",{role:"group","aria-label":"Range","data-testid":"calendar-ranges",style:{display:"flex",flexWrap:"wrap",gap:4,marginLeft:"auto"},children:cn(a).map($=>(0,q.jsx)("button",{type:"button","aria-pressed":$===o,"data-testid":`calendar-range-${$}`,onClick:()=>ae($),style:{..._e,borderRadius:999,borderColor:"var(--graview-edge)",...$==="years"?{}:{textTransform:"capitalize"},...$===o?{borderColor:"var(--graview-accent)",color:"var(--graview-accent)",background:"var(--graview-panel)"}:{}},children:$==="years"?a.horizon?.title??"years":$},$))})]}),W?(0,q.jsx)("p",{"data-testid":W.tone==="refused"?"calendar-refused":"calendar-rounded",role:"status",style:{margin:0,fontSize:"0.8125rem",color:W.tone==="refused"?"var(--graview-warn)":"var(--graview-ink-muted)"},children:W.text}):null,k.years?(0,q.jsx)("nav",{"aria-label":"Years","data-testid":"calendar-years",style:{display:"flex",flexWrap:"wrap",gap:4},children:k.years.map($=>(0,q.jsx)("button",{type:"button","data-testid":`calendar-year-${$}`,onClick:()=>ae("year",`${$}-01-01`),style:_e,children:$},$))}):null,y,o==="agenda"&&c?(0,q.jsx)("div",{"data-testid":"calendar-groups",style:{display:"grid",gap:10,minHeight:0,overflow:"auto"},children:c.map($=>(0,q.jsxs)("section",{"data-testid":"calendar-group",style:{display:"grid",gap:4},children:[(0,q.jsxs)("h3",{style:{margin:0,fontSize:"0.8125rem",letterSpacing:"0.08em",textTransform:"uppercase",color:"var(--graview-ink-muted)"},children:[$.label," ",(0,q.jsx)("span",{style:{fontWeight:400},children:$.ids.size})]}),(0,q.jsx)(mn,{days:k.cells.map(V=>V.from),entries:M.filter(V=>$.ids.has(V.id)),today:a.today,emphasisOf:R,broken:A,hue:B,onMove:(V,p)=>U(V,{from:p,to:p,label:p},"day")})]},$.label))}):o==="agenda"?(0,q.jsx)(mn,{days:k.cells.map($=>$.from),entries:M,today:a.today,emphasisOf:R,broken:A,hue:B,onMove:($,V)=>U($,{from:V,to:V,label:V},"day")}):(0,q.jsx)(Qt,{span:k,weekStartsOn:b,entries:M,today:a.today,perCell:a.perCell??Yt[k.grain],emphasisOf:R,broken:A,hue:B,onOpen:$=>ae(Ut(k.grain),$.from),onMove:U})]})})}var ce=_(De(),1);var I=_(J(),1),Lr=`
|
|
1
|
+
import{a as Et,b as Mt,c as Pt,d as Tn}from"./chunk.Y6ZNFQK3.js";import{a as Mn,b as kt,c as Pn,d as Ct,e as Ot,f as $t}from"./chunk.BNV77BQZ.js";import{a as Rt,b as Ln,c as At}from"./chunk.SYAEBGDC.js";import{c as Lt,g as Tt,h as Nt}from"./chunk.NRAYZY3X.js";import{e as vt}from"./chunk.YIR7PPF3.js";import{m as St}from"./chunk.UHUGOTUU.js";import{a as bt,b as xt}from"./chunk.47STJVRV.js";import{f as yt,h as wt}from"./chunk.EBGAYL32.js";import{e as ht}from"./chunk.DAZ2VSRD.js";import{b as mt,c as te,d as ye,e as Ee}from"./chunk.3K6YSVHC.js";import{d as pt}from"./chunk.ULRW47RP.js";import{l as ft,m as En}from"./chunk.XMC7YDWT.js";import{m as Rn,n as An}from"./chunk.B2GLDIAS.js";import{k as Ve}from"./chunk.JOOQUWLT.js";import{F as De,Q as J,R as ct,Y as X,_ as gt,m as Qe,oa as ut,pa as Je}from"./chunk.6QWV5MVH.js";import{$ as tn,Bb as lt,Da as at,Ha as it,Ia as ot,Ja as st,Kb as de,O as Zn,P as et,Q as kn,R as nt,S as Ke,W as We,X as he,Zb as Ye,_ as Ie,_b as dt,aa as tt,ca as Cn,cb as On,da as rt,dc as Ce,ea as rn,qc as $n}from"./chunk.MNP4JI33.js";import{b as _}from"./chunk.AJZBJBMO.js";var Nn=_(J(),1);function Me(e,t,n){let r=e.nodes?.length??0;if(e.total===void 0||e.total<=r)return n;let a=e.nodes?.[0]?.kind,i=a?tn(t,a).toLowerCase():"more";return(0,Nn.jsxs)("div",{style:{display:"grid",gridTemplateRows:"minmax(0, 1fr) auto",height:"100%",minHeight:0},children:[n,(0,Nn.jsxs)("p",{"data-testid":"lens-more",style:{margin:"4px 0 0",fontSize:"0.8125rem",color:"var(--graview-ink-muted)"},children:["+",e.total-r," more ",i]})]})}var Dt=_(J(),1),Or=(e,t)=>{if(e===!1||t===!1)return!1;let n=e===void 0||e===!0?{}:e,r=t===void 0||t===!0?{}:t;return{sort:n.sort!==!1&&r.sort!==!1,filter:n.filter!==!1&&r.filter!==!1,group:n.group!==!1&&r.group!==!1}},$r=["sort","filter","group","q","archived"];function Pe(e,t={}){let{store:n}=X(),{view:r,go:a}=Je(),d=$r.some(R=>r.within?.[R]!==void 0)?bt(r):t.arrangedBy??{},m=e.nodes??[],g=t.kind??m[0]?.kind??e.node?.kind,y=d.archived!==void 0&&d.archived!==!1&&g!==void 0&&!t.subject?n.graph.nodesOfKind(g,{archived:d.archived}):m,c=t.subject??(t.only?y.filter(t.only):y),f=t.subject?[]:t.only?y.filter(R=>!t.only(R)):[],x=t.kind??c[0]?.kind,s=Or(t.allow,t.lensAllows),l=x?ht(n.schema,String(x)):void 0,h=l?yt(d,l).arrangement:{},o=wt(c,s===!1?{}:h,{schema:n.schema,graph:n.graph,flagged:new Set(e.flagged??[])}),b=e.retired!==void 0&&e.retired>0&&(m[0]?.kind??x)===x?e.retired:0,C=x&&s!==!1&&e.fidelity==="full"&&e.budget===void 0&&(c.length>1||b>0)?(0,Dt.jsx)(St,{schema:n.schema,graph:n.graph,kind:String(x),arrangement:h,allow:s,query:t.query!==!1,onChange:R=>a(xt(r,R)),kept:{shown:o.nodes.length,of:c.length},...b>0?{past:{count:b,widen:()=>a(vt(r,!0))}}:{}}):null;return{nodes:[...f,...o.nodes],arranged:o,arrangement:h,bar:C}}function He(e,t,n){let r=new Set((n??[]).map(i=>i.kind)),a=new Set((n??[]).map(i=>i.id));return e.allNodes().filter(i=>r.has(i.kind)?a.has(i.id):We(t.tryDefinition(i.kind),i))}var Le=_(De(),1);var N=_(J(),1),Rr=["slots","x","y","fill"],an=class extends Error{constructor(n,r){super(`${n}
|
|
2
|
+
${r}`);this.hint=r;this.name="BoardBindingError"}},zt=e=>Math.max(0,Math.min(1,e));function Dn(e,t,n,r){let a=l=>l,i=l=>r?he(r.tryDefinition(l.kind),l):String(a(l).label??l.id);if(r&&r.tryDefinition(n.slots)===void 0)throw new an(`No kind is declared for "${n.slots}".`,'Check the lens bindings: { slots: "<kind>", x: "<field>", y: "<field>", fill: "<edge kind>" }');let d=e.filter(l=>l.kind===n.slots);if(!r&&d.length===0)throw new an(`Nothing to arrange: no "${n.slots}" nodes.`,'Check the lens bindings: { slots: "<kind>", x: "<field>", y: "<field>", fill: "<edge kind>" }');let m=t.filter(l=>l.kind===n.fill),g=new Map(e.map(l=>[l.id,l])),y=new Map(e.map((l,h)=>[l.id,h])),c=d.map(l=>{let h=a(l),o=n.fillFrom==="occupant",b=m.filter(C=>(o?C.to:C.from)===l.id).map(C=>g.get(o?C.from:C.to)).filter(C=>C!==void 0).sort((C,R)=>(y.get(C.id)??0)-(y.get(R.id)??0)).map(C=>({id:C.id,label:i(C)}));return{id:l.id,code:String(h[n.slotCode??""]??"").trim()||i(l),label:i(l),x:zt(Number(h[n.x]??.5)),y:zt(Number(h[n.y]??.5)),occupants:b}}).sort((l,h)=>l.y-h.y||l.x-h.x),f=new Set(c.flatMap(l=>l.occupants.map(h=>h.id))),x=new Set([...f].map(l=>g.get(l)?.kind).filter(l=>l!==void 0)),s=e.filter(l=>x.has(l.kind)&&!f.has(l.id)).map(l=>({id:l.id,label:i(l)})).sort((l,h)=>l.label<h.label?-1:l.label>h.label?1:0);return{slots:c,empty:c.filter(l=>l.occupants.length===0).map(l=>l.id),spare:s}}function Ar({nodes:e,occupants:t,label:n,fidelity:r,mode:a,options:i,schema:d,implicated:m=[],flagged:g=[]}){let{store:y}=X(),c=He(y.graph,y.schema,e),f=t?[...c.filter(p=>p.kind===i.slots),...t.map(p=>y.graph.getNode(p)).filter(p=>p!==void 0)]:c,x=Dn(f,y.graph.allEdges(),i,d),s=new Set(m),l=new Set(g),h=ut(),o=new Map;for(let p of h)for(let H of p.nodeIds)o.set(H,[...o.get(H)??[],p.message]);let b=p=>p?o.get(p)??[]:[];if(r==="glyph")return(0,N.jsx)(ye,{label:`${n??"Board"} \xB7 ${x.slots.length-x.empty.length}/${x.slots.length}`,hue:de("board")});if(r==="summary"){let p=x.slots.filter(H=>x.empty.includes(H.id));return(0,N.jsx)(te,{title:n??"Board",meta:`${x.slots.length-x.empty.length}/${x.slots.length}`,tone:p.length>0?"warning":"muted",fit:!0,children:p.length>0?(0,N.jsx)(Ee,{pick:!0,max:5,items:p.map(H=>({id:H.id,label:H.code}))}):(0,N.jsx)("span",{style:{fontSize:"0.8125rem",color:"var(--graview-ink-faint)"},children:"Every slot filled."})})}let C=i.aspect??.68,R=(0,Le.useRef)(null),[A,S]=(0,Le.useState)(!1),[k,u]=(0,Le.useState)(null),E=160,[M,B]=(0,Le.useState)(!1);(0,Le.useEffect)(()=>{let p=R.current;if(!p||typeof ResizeObserver>"u")return;let H=new ResizeObserver(D=>{let j=D[0]?.contentRect;if(!j)return;let v=j.height<E;B(v),S(!v&&C<1&&j.width/j.height>1.3),u(v?null:j.height)});return H.observe(p),()=>H.disconnect()},[C]);let w=(p,H)=>A?{x:1-H,y:p}:{x:p,y:H},W=(()=>{let p=new Map,H=(D,j,v)=>{let O=p.get(v)??{ids:[],codes:[]};O.ids.includes(D)||(O.ids.push(D),O.codes.includes(j)||O.codes.push(j)),p.set(v,O)};for(let D of x.slots){for(let j of b(D.id))H(D.id,D.code,j);for(let j of D.occupants)for(let v of b(j.id))H(j.id,j.label,v)}return[...p.entries()].map(([D,j])=>({id:j.ids[0],code:j.codes.join(", "),text:D}))})(),P=a==="fullscreen",U=W.length===0?null:(0,N.jsxs)("ul",{"data-graview-primitive":"board-key",style:{margin:"2px 0 0",padding:0,listStyle:"none",display:"grid",gap:3,flex:"0 0 auto"},children:[W.slice(0,P?6:2).map(p=>(0,N.jsxs)("li",{"data-graview-pick":p.id,"data-graview-emphasis":s.size===0?"plain":s.has(p.id)?"lit":"dimmed",title:p.text,style:{display:P?"grid":"flex",gap:P?1:7,alignItems:P?"start":"baseline",fontSize:"0.8125rem",lineHeight:1.45,color:"var(--graview-ink-muted)",minHeight:24,width:"fit-content",maxWidth:"100%",padding:P?"2px 0":"3px 6px",marginLeft:P?0:-6,borderRadius:7,cursor:"pointer"},children:[(0,N.jsxs)("span",{style:{flex:"0 0 auto",fontWeight:600,color:"var(--graview-warn)",letterSpacing:"0.02em"},children:["\u26A0 ",p.code]}),(0,N.jsx)("span",{style:{minWidth:0,...P?{}:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},children:p.text})]},p.id)),W.length>(P?6:2)?(0,N.jsxs)("li",{style:{fontSize:"0.8125rem",color:"var(--graview-ink-faint)"},children:["+",W.length-(P?6:2)," more"]}):null]}),ne=i.arrange==="shelf",ae=x.slots.every(p=>p.code.length<=3&&!/\s/.test(p.code)),ee=(p,H)=>{let D=p.occupants.length===0,j=s.size>0&&!s.has(p.id)&&!p.occupants.some(F=>s.has(F.id)),v=l.has(p.id),O=p.occupants.some(F=>l.has(F.id)),G=v,ie=[...b(p.id),...p.occupants.flatMap(F=>b(F.id))],se=p.occupants.length===1?p.occupants[0]:null,ue=i.pickTarget==="slot"?p.id:se?se.id:p.id,K=F=>se?{}:{"data-graview-pick":F.id,"data-graview-emphasis":s.size===0?"plain":j?"dimmed":"lit"},ve=F=>l.has(F.id)?"var(--graview-warn)":"var(--graview-ink-muted)",Ue=i.emptyLabel??"empty";return(0,N.jsxs)("div",{"data-graview-pick":ue,"data-graview-slot":p.id,"data-graview-mark":ae?"disc":"token","data-graview-flagged":v&&O?"both":v?"slot":O?"occupant":void 0,"data-graview-emphasis":s.size===0?"plain":j?"dimmed":"lit",title:[D?`${p.label} \u2014 nobody in it`:`${p.occupants.map(F=>F.label).join(", ")} at ${p.label}`,...ie].join(`
|
|
3
|
+
`),style:{...H,display:"grid",justifyItems:ae?"center":"start",gap:3,opacity:j?.5:1,transition:"opacity 160ms ease"},children:[ae?(0,N.jsxs)("span",{style:{position:"relative",width:34,height:34,borderRadius:999,display:"grid",placeItems:"center",fontSize:"0.75rem",letterSpacing:"0.02em",border:D?"1.5px dashed var(--graview-warn)":`1px solid ${G?"var(--graview-warn)":"var(--graview-edge-bright)"}`,background:D?"transparent":G?"var(--graview-panel-warning)":"var(--graview-panel)",color:D||G?"var(--graview-warn)":"var(--graview-ink)",boxShadow:D?void 0:"var(--graview-lift-low)"},children:[p.code,v&&!D?(0,N.jsx)("span",{"aria-hidden":"true",style:{position:"absolute",top:-3,right:-3,fontSize:"0.6875rem",lineHeight:1,color:"var(--graview-warn)"},children:"\u26A0"}):null]}):(0,N.jsxs)("span",{style:{display:"grid",gap:1,minWidth:0,maxWidth:180,padding:"5px 10px 6px",borderRadius:8,border:D?"1.5px dashed var(--graview-warn)":`1px solid ${G?"var(--graview-warn)":"var(--graview-edge-bright)"}`,background:D?"transparent":G?"var(--graview-panel-warning)":"var(--graview-panel)",boxShadow:D?void 0:"var(--graview-lift-low)"},children:[(0,N.jsxs)("span",{style:{fontSize:"0.8125rem",fontWeight:550,lineHeight:1.25,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",color:D||G?"var(--graview-warn)":"var(--graview-ink)"},children:[p.code,v&&!D?" \u26A0":null]}),D?(0,N.jsx)("span",{style:{fontSize:"0.75rem",lineHeight:1.3,color:"var(--graview-warn)"},children:Ue}):(0,N.jsx)("span",{style:{display:"flex",flexWrap:"wrap",gap:"0 8px",fontSize:"0.75rem",lineHeight:1.3},children:p.occupants.map(F=>(0,N.jsxs)("span",{...K(F),style:{whiteSpace:"nowrap",color:ve(F)},children:[F.label,l.has(F.id)?" \u26A0":""]},F.id))})]}),ae?D?(0,N.jsx)("span",{style:{fontSize:"0.75rem",whiteSpace:"nowrap",color:"var(--graview-warn)"},children:Ue}):p.occupants.map(F=>(0,N.jsxs)("span",{...K(F),style:{fontSize:"0.75rem",whiteSpace:"nowrap",color:ve(F)},children:[F.label,l.has(F.id)?" \u26A0":""]},F.id)):null]},p.id)},ge=i.zones??[],pe=ge.map((p,H)=>({label:p.label,slots:x.slots.filter(D=>D.y>=p.from&&(D.y<p.to||H===ge.length-1&&D.y<=p.to))})),T=new Set(pe.flatMap(p=>p.slots.map(H=>H.id))),$=x.slots.filter(p=>!T.has(p.id));($.length>0||pe.length===0)&&pe.push({label:"",slots:$});let V={boxSizing:"border-box",borderRadius:12,border:"1px solid var(--graview-edge)",background:"linear-gradient(var(--graview-panel-muted), var(--graview-panel-muted)), var(--graview-panel)",overflow:"hidden"};return(0,N.jsxs)(te,{title:n??"Board",meta:x.slots.length===0?void 0:x.empty.length===0?`all ${x.slots.length} filled`:`${x.empty.length} unfilled`,...P?{style:{flex:"1 1 auto",minHeight:0,height:"100%"}}:{},children:[(0,N.jsxs)("div",{ref:R,style:{display:"flex",gap:28,alignItems:"stretch",justifyContent:"center",flex:"1 1 auto",minHeight:0},children:[P&&U?(0,N.jsxs)("div",{style:{width:260,flex:"0 0 auto",alignSelf:"center",display:"grid",gap:8},children:[(0,N.jsx)("span",{style:{fontSize:"0.75rem",letterSpacing:"0.14em",textTransform:"uppercase",color:"var(--graview-ink-faint)"},children:"What is marked"}),U]}):null,ne?(0,N.jsx)("div",{"data-graview-primitive":"board","data-graview-arrange":"shelf",style:{...V,overflow:"auto",flex:"1 1 auto",minWidth:0,alignSelf:"stretch",display:"grid",alignContent:"start"},children:pe.map((p,H)=>(0,N.jsxs)("section",{"data-graview-zone":p.label||void 0,style:{display:"grid",gap:8,padding:"10px 14px 14px",...H>0?{borderTop:"1px dashed var(--graview-edge)"}:{}},children:[p.label?(0,N.jsx)("span",{style:{fontSize:"0.6875rem",letterSpacing:"0.14em",textTransform:"uppercase",color:"var(--graview-ink-faint)"},children:p.label}):null,p.slots.length>0?(0,N.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:"10px 12px",alignItems:"flex-start"},children:p.slots.map(D=>ee(D,{}))}):(0,N.jsx)("span",{style:{fontSize:"0.75rem",color:"var(--graview-ink-faint)"},children:"nothing here"})]},p.label||`band-${H}`))}):(0,N.jsxs)("div",{style:{display:"flex",gap:5,alignItems:"stretch",minWidth:0,...M?{flex:"1 1 auto",alignSelf:"flex-start"}:{}},children:[!A&&ge.length>0?(0,N.jsx)("div",{"aria-hidden":"true",style:{position:"relative",width:15,flex:"0 0 auto",alignSelf:"stretch"},children:ge.map(p=>(0,N.jsx)("span",{title:p.label,style:{position:"absolute",top:`${p.from*100}%`,height:`${(p.to-p.from)*100}%`,right:0,writingMode:"vertical-rl",transform:"rotate(180deg)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"0.6875rem",letterSpacing:"0.14em",textTransform:"uppercase",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",color:"var(--graview-ink-faint)"},children:p.label},p.label))}):null,(0,N.jsxs)("div",{"data-graview-primitive":"board","data-graview-arrange":"exact",style:{...V,position:"relative",aspectRatio:`${A?1/C:C}`,...M?{width:"100%",height:"auto",flex:"1 1 auto",minWidth:0,alignSelf:"flex-start"}:{height:"100%",flex:"0 1 auto",...k!==null?{width:Math.round(k*(A?1/C:C))}:{}},maxWidth:"100%"},children:[ge.map(p=>(0,N.jsx)("div",{"aria-hidden":"true",style:{position:"absolute",...A?{top:0,bottom:0,left:`${(1-p.to)*100}%`,width:`${(p.to-p.from)*100}%`,borderLeft:"1px dashed var(--graview-edge)"}:{left:0,right:0,top:`${p.from*100}%`,height:`${(p.to-p.from)*100}%`,borderBottom:"1px dashed var(--graview-edge)"}}},p.label)),A?ge.map(p=>(0,N.jsx)("span",{"aria-hidden":"true",title:p.label,style:{position:"absolute",bottom:3,left:`${(1-p.to)*100}%`,width:`${(p.to-p.from)*100}%`,textAlign:"center",fontSize:"0.6875rem",letterSpacing:"0.14em",textTransform:"uppercase",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",color:"var(--graview-ink-faint)"},children:p.label},`label-${p.label}`)):null,x.slots.map(p=>ee(p,{position:"absolute",left:`${w(p.x,p.y).x*100}%`,top:`${w(p.x,p.y).y*100}%`,transform:"translate(-50%, -50%)",width:"max-content",maxWidth:"100%"}))]})]}),x.spare.length>0?(0,N.jsxs)("div",{style:{display:"grid",gap:6,alignContent:"start",minWidth:0},children:[(0,N.jsx)("span",{style:{fontSize:"0.75rem",letterSpacing:"0.14em",textTransform:"uppercase",color:"var(--graview-ink-faint)"},children:"Not in"}),(0,N.jsx)(Ee,{pick:!0,max:10,items:x.spare.map(p=>({...p,emphasis:s.size===0?"plain":s.has(p.id)?"lit":"dimmed"}))})]}):null]}),P?null:U]})}function Bt(e){function t(n){let{store:r}=X(),a=Dn(He(r.graph,r.schema,n.nodes),r.graph.allEdges(),e,r.schema),d=[...a.slots.flatMap(c=>c.occupants.map(f=>f.id)),...a.spare.map(c=>c.id)].map(c=>r.graph.getNode(c)).filter(c=>c!==void 0),{arranged:m,bar:g}=Pe(n,{...e.arranging!==void 0?{allow:e.arranging}:{},lensAllows:{group:!1},...e.arrangedBy?{arrangedBy:e.arrangedBy}:{},subject:d}),y=(0,N.jsx)(Ar,{schema:r.schema,...n,options:e,...e.arranging===!1?{}:{occupants:m.nodes.map(c=>c.id)}});return Me(n,r.schema,g?(0,N.jsxs)("div",{style:{display:"grid",gap:6,height:"100%",minHeight:0,gridTemplateRows:"auto 1fr"},children:[g,y]}):y)}return{name:"board",requiredRoles:[...Rr],options:e,View:t,build(n,r,a){return Dn(n,r,e,a)}}}var pn=_(De(),1);var Wt=864e5;function zn(e){if(typeof e!="string")return null;if(Rn(e))return An(e)?.day??null;let t=/^(\d{4}-\d{2}-\d{2})/.exec(e);return t?t[1]:null}function sn(e){if(typeof e!="string")return null;if(Rn(e))return An(e)?.minutes??null;let t=/^\d{4}-\d{2}-\d{2}[T ](\d{2}):(\d{2})/.exec(e);return t?Number(t[1])*60+Number(t[2]):null}var on=e=>Date.UTC(Number(e.slice(0,4)),Number(e.slice(5,7))-1,Number(e.slice(8,10))),ln=e=>new Date(e).toISOString().slice(0,10);function we(e,t){return ln(on(e)+t*Wt)}function ze(e,t){let n=Number(e.slice(0,4)),r=Number(e.slice(5,7))-1+t,a=Number(e.slice(8,10)),i=new Date(Date.UTC(n,r+1,0)).getUTCDate();return ln(Date.UTC(n,r,Math.min(a,i)))}var Bn=e=>new Date(on(e)).getUTCDay();function Ge(e,t=1){let n=(Bn(e)-t+7)%7;return we(e,-n)}var Wn=e=>`${e.slice(0,7)}-01`;function oe(e,t){return Math.round((on(t)-on(e))/Wt)}function je(e,t){return Array.from({length:t},(n,r)=>we(e,r))}var It=e=>nt(e,"short"),Oe=e=>Zn(e,{weekday:"short"}),In=e=>Ke(e);function Be(e,t){let n=t?.fieldRoles?.when;return e&&!e.start&&n?{...e,start:n}:e}function Vt(e,t){return t===void 0?!1:typeof t=="string"?e[t]===!0:t.is.includes(e[t.field])}var dn=["start"],Er=["day","week","month","quarter","year","agenda"];function cn(e){return e.horizon?["day","week","month","quarter","year","years","agenda"]:Er}function Ht(e,t){return e==="years"?t?.title??"Years":`The ${e}`}function Gt(){let e=new Date;return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`}var Vn=class extends Error{constructor(n,r){super(`The calendar lens has no binding for ${r.map(a=>`"${a}"`).join(", ")} on "${n}". Bind them in the lens declaration: bindings: { ${n}: { start: "<field>" } }.`);this.kind=n;this.missing=r;this.name="CalendarBindingError"}};function gn(e,t,n){let r=Be(t[e.kind],n?.tryDefinition(e.kind));if(!r)return null;let a=e,i=n?.tryDefinition(e.kind)?.fields.shape,d=dn.filter(f=>{let x=r[f];return x?i?!(x in i):!(x in a):!0});if(d.length>0)throw new Vn(e.kind,d);let m=zn(a[r.start]);if(m===null)return null;let g=(r.end?zn(a[r.end]):null)??m,y=sn(a[r.start]),c=r.label?a[r.label]:void 0;return{id:e.id,kind:e.kind,label:typeof c=="string"&&c.length>0?c:he(n?.tryDefinition(e.kind),e),from:m,to:oe(m,g)<0?m:g,at:r.allDay&&a[r.allDay]===!0?null:y,allDay:r.allDay&&a[r.allDay]===!0||y===null,done:Vt(a,r.done)}}function jt(e,t,n,r){let a=gn(e,t,n);if(!a)return[];let i=Be(t[e.kind],n?.tryDefinition(e.kind)).start,d=e,m=d[i],g=d[at(i)];if(typeof m!="string"||!it(g))return[a];let y=oe(a.from,a.to);return("next"in r?[st(m,g,r.next)]:ot(m,g,{from:we(r.from,-y),to:r.to,limit:400})).map(f=>({...a,from:f.slice(0,10),to:we(f.slice(0,10),y),repeats:!0}))}function un(e,t){return e.filter(n=>oe(n.from,t)>=0&&oe(t,n.to)>=0).sort((n,r)=>n.allDay!==r.allDay?n.allDay?-1:1:n.at!==r.at?(n.at??0)-(r.at??0):n.label.localeCompare(r.label))}function _t(e,t,n){let r=lt(e.schema,e.allMutations()).get(t)?.get(n)??[],a=new Map(e.allMutations().map(d=>[d.name,d]));for(let d of r){let m=a.get(d),g=m?.subject;if(!m||!g)continue;let y=m.input?.shape??{};if(n in y)return{name:m.name,arg:g.arg}}let i=e.allMutations().find(d=>d.derived?.act==="edit"&&d.derived.kind===t);return i?.subject?{name:i.name,arg:i.subject.arg}:null}var Ft=(e,t)=>({from:Wn(e),to:qt(e),label:kn(e,{short:!0,year:t})});function qt(e){return ln(Date.UTC(Number(e.slice(0,4)),Number(e.slice(5,7)),0))}function Mr(e){let t=Math.floor((Number(e.slice(5,7))-1)/3);return`${e.slice(0,4)}-${String(t*3+1).padStart(2,"0")}-01`}function Ut(e,t,n={}){let r=n.weekStartsOn??1,a=(g,y)=>({from:g,to:g,label:String(Number(g.slice(8,10))),...y?{outside:!0}:{}});if(e==="day")return{title:Oe(t),grain:"day",columns:1,cells:[a(t)]};if(e==="week"){let g=Ge(t,r);return{title:`${Oe(g)} \u2013 ${Oe(we(g,6))}`,grain:"day",columns:7,cells:je(g,7).map(y=>a(y))}}if(e==="agenda")return{title:`From ${Oe(t)}`,grain:"day",columns:1,cells:je(t,42).map(g=>a(g))};if(e==="quarter"){let g=Mr(t),y=qt(ze(g,2)),c=[];for(let f=Ge(g,r);oe(f,y)>=0;f=we(f,7))c.push({from:f,to:we(f,6),label:et(f),...oe(f,g)>0&&oe(we(f,6),g)>0?{outside:!0}:{}});return{title:`Q${Math.floor((Number(t.slice(5,7))-1)/3)+1} ${t.slice(0,4)}`,grain:"week",columns:4,cells:c}}if(e==="year"){let g=t.slice(0,4);return{title:g,grain:"month",columns:4,cells:Array.from({length:12},(y,c)=>Ft(`${g}-${String(c+1).padStart(2,"0")}-01`,!1))}}if(e==="years"){let g=Number(t.slice(0,4)),y=g+Math.max(1,n.horizon?.years??1)-1,c=n.horizon?.from!==void 0||n.horizon?.to!==void 0,f=c?n.horizon?.from??g:Math.min(g,n.fit?.first??g),s=(c?Math.max(f,n.horizon?.to??f+Math.max(1,n.horizon?.years??1)-1):Math.max(y,n.fit?.last??y))-f+1,l=Array.from({length:s},(h,o)=>String(f+o));return s>Pr?{title:`${n.horizon?.title??"Years"} \xB7 ${l[0]}\u2013${l[l.length-1]}`,grain:"year",columns:5,years:l,cells:l.map(h=>({from:`${h}-01-01`,to:`${h}-12-31`,label:h}))}:{title:`${n.horizon?.title??"Years"} \xB7 ${l[0]}\u2013${l[l.length-1]}`,grain:"month",columns:4,years:l,cells:l.flatMap(h=>Array.from({length:12},(o,b)=>Ft(`${h}-${String(b+1).padStart(2,"0")}-01`,!0)))}}let i=Wn(t),d=Ge(i,r),m=t.slice(0,7);return{title:kn(t),grain:"day",columns:7,cells:je(d,42).map(g=>a(g,g.slice(0,7)!==m))}}function Kt(e,t,n){return e.filter(r=>oe(r.from,n)>=0&&oe(t,r.to)>=0).sort((r,a)=>r.allDay!==a.allDay?r.allDay?-1:1:r.from!==a.from?r.from.localeCompare(a.from):r.at!==a.at?(r.at??0)-(a.at??0):r.label.localeCompare(a.label))}var Pr=10;function Yt(e){return e==="year"?"year":e==="month"?"month":e==="week"?"week":"day"}var Qt=_(De(),1);var Q=_(J(),1);function Hn({label:e,glyph:t,onPress:n}){return(0,Q.jsx)("button",{type:"button","aria-label":e,title:e,onClick:n,style:_e,children:t})}var _e={minHeight:24,minWidth:24,padding:"2px 9px",borderRadius:6,fontSize:"0.8125rem",borderWidth:1,borderStyle:"solid",borderColor:"transparent",color:"var(--graview-ink-muted)",background:"transparent"},Jt={day:12,week:4,month:3,year:5};function Xt({span:e,weekStartsOn:t,entries:n,today:r,perCell:a,emphasisOf:i,broken:d,hue:m,onOpen:g,onMove:y}){let c=(0,Qt.useRef)(null),f=Ve(c),x=f===null?e.columns:Math.max(1,Math.floor(f/44)),s=x<e.columns,l=s?x:e.columns,h=!s&&e.grain==="day"&&e.columns===7?je(Ge(e.cells[0]?.from??r,t),7):e.grain==="day"&&e.columns===1?e.cells.map(o=>o.from):null;return s&&e.grain==="day"&&e.columns>1?(0,Q.jsx)("div",{ref:c,"data-calendar-shape":"agenda",style:{display:"grid",minHeight:0,flex:1},children:(0,Q.jsx)(mn,{days:e.cells.map(o=>o.from),entries:n,today:r,emphasisOf:i,broken:d,hue:m,onMove:(o,b)=>y(o,{from:b,to:b,label:b},"day")})}):(0,Q.jsxs)("div",{ref:c,"data-calendar-shape":s?"wrapped":"grid",style:{display:"grid",gap:4,gridTemplateRows:h?"auto 1fr":"1fr",minHeight:0,flex:1},children:[h?(0,Q.jsx)("div",{style:{display:"grid",gridTemplateColumns:`repeat(${l}, minmax(0, 1fr))`,gap:4},children:h.map(o=>(0,Q.jsx)("span",{style:{fontSize:"0.75rem",letterSpacing:"0.16em",textTransform:"uppercase",color:"var(--graview-ink-muted)",textAlign:"center"},children:e.columns===7?It(Bn(o)):Oe(o)},o))}):null,(0,Q.jsx)("div",{tabIndex:0,"aria-label":`The days of ${e.title}`,style:{display:"grid",gridTemplateColumns:`repeat(${l}, minmax(0, 1fr))`,gridAutoRows:"max-content",gap:4,minHeight:0,overflow:"auto"},children:e.cells.map((o,b)=>{let C=Kt(n,o.from,o.to),R=C.slice(0,a),A=C.slice(a),S=A.filter(u=>d.has(u.id)).length,k=oe(o.from,r)>=0&&oe(r,o.to)>=0;return(0,Q.jsxs)("div",{"data-calendar-day":e.grain==="day"?o.from:void 0,"data-calendar-cell":o.from,"data-calendar-grain":e.grain,"data-calendar-count":C.length,"data-calendar-outside":o.outside||void 0,onDragOver:u=>{u.dataTransfer.types.includes("text/graview-node")&&(u.preventDefault(),u.dataTransfer.dropEffect="move")},onDrop:u=>{let E=u.dataTransfer.getData("text/graview-node");E&&(u.preventDefault(),u.stopPropagation(),y(E,o,e.grain))},style:{minHeight:62,display:"flex",flexDirection:"column",gap:2,padding:4,borderRadius:7,border:"1px solid var(--graview-edge)",background:k?"var(--graview-panel)":o.outside?"var(--graview-panel-muted)":"transparent"},children:[(0,Q.jsxs)("span",{style:{display:"flex",alignItems:"baseline",gap:4},children:[(0,Q.jsx)("span",{style:{fontSize:"0.75rem",fontVariantNumeric:"tabular-nums",color:k?"var(--graview-accent)":"var(--graview-ink-faint)"},children:o.label}),e.grain!=="day"&&C.length>0?(0,Q.jsx)("span",{style:{fontSize:"0.75rem",color:"var(--graview-ink-faint)",marginLeft:"auto"},children:C.length}):null]}),R.map(u=>(0,Q.jsx)(Zt,{entry:u,cell:o,rowStart:b%l===0,emphasis:i(u.id),flagged:d.has(u.id),hue:m(u)},`${u.id}:${u.from}:${o.from}`)),A.length>0?(0,Q.jsxs)("button",{type:"button","data-testid":`calendar-more-${o.from}`,onClick:()=>g(o),title:`Open ${o.label}`,style:{minHeight:24,padding:"1px 5px",fontSize:"0.75rem",borderRadius:5,border:"1px dashed var(--graview-edge)",background:"transparent",color:S>0?"var(--graview-warn)":"var(--graview-ink-muted)",textAlign:"left"},children:["+",A.length," more",S>0?` \xB7 ${S} flagged`:""]}):null]},o.from)})})]})}function mn({days:e,entries:t,today:n,emphasisOf:r,broken:a,hue:i,onMove:d}){let m=e.map(g=>({day:g,here:un(t,g)})).filter(({here:g})=>g.length>0);return m.length===0?(0,Q.jsx)("p",{"data-testid":"calendar-empty",style:{margin:0,fontSize:"0.875rem",color:"var(--graview-ink-muted)"},children:"Nothing is scheduled in the next six weeks."}):(0,Q.jsx)("ol",{tabIndex:0,"aria-label":"What is scheduled",style:{margin:0,padding:0,listStyle:"none",display:"grid",alignContent:"start",gap:10,overflow:"auto",minHeight:0},children:m.map(({day:g,here:y})=>(0,Q.jsxs)("li",{"data-calendar-day":g,onDragOver:c=>{c.dataTransfer.types.includes("text/graview-node")&&(c.preventDefault(),c.dataTransfer.dropEffect="move")},onDrop:c=>{let f=c.dataTransfer.getData("text/graview-node");f&&(c.preventDefault(),c.stopPropagation(),d(f,g))},style:{display:"grid",gap:4},children:[(0,Q.jsxs)("span",{style:{fontSize:"0.75rem",letterSpacing:"0.16em",textTransform:"uppercase",color:g===n?"var(--graview-accent)":"var(--graview-ink-muted)"},children:[Oe(g),g===n?" \xB7 today":""]}),y.map(c=>(0,Q.jsx)(Zt,{entry:c,cell:{from:g,to:g,label:g},emphasis:r(c.id),flagged:a.has(c.id),hue:i(c)},`${c.id}:${c.from}:${g}`))]},g))})}function Zt({entry:e,cell:t,emphasis:n,flagged:r,hue:a,rowStart:i=!1}){let d=oe(t.from,e.from)>=0,m=oe(e.to,t.to)>=0,g=!(d&&m),y=e.at!==null&&d&&e.from===t.from?`${In(e.at)} ${e.label}`:e.label;return(0,Q.jsx)("span",{"data-graview-pick":e.id,"data-calendar-entry":e.id,"data-calendar-repeat":e.repeats?e.from:void 0,draggable:!e.repeats,onDragStart:c=>{c.dataTransfer.setData("text/graview-node",e.id),c.dataTransfer.effectAllowed="move"},"data-graview-emphasis":n,"data-calendar-part":g?d?"opens":m?"closes":"through":void 0,"data-calendar-in":t.from,title:g?`${e.label} \xB7 ${e.from} \u2013 ${e.to}`:`${e.label}${e.at===null?" \xB7 all day":` \xB7 ${In(e.at)}`}${e.repeats?" \xB7 repeats":""}`,style:{display:"block",minHeight:24,boxSizing:"border-box",padding:"3px 6px",fontSize:"0.75rem",lineHeight:1.35,borderRadius:g?d?"5px 0 0 5px":m?"0 5px 5px 0":0:5,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",textDecoration:e.done?"line-through":"none",opacity:n==="dimmed"?.35:e.done?.6:1,background:`color-mix(in oklab, hsl(${Math.round(a)} 70% 55%) ${n==="lit"?38:20}%, transparent)`,color:"var(--graview-ink)",...n==="lit"?{outline:"1px solid var(--graview-accent)"}:{},...r?{borderLeft:"3px solid var(--graview-warn)",paddingLeft:4}:{}},children:d||i?e.repeats?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)("span",{"aria-hidden":"true",children:"\u21BB "}),y]}):y:" "})}var q=_(J(),1);function Lr(e){let t=1/0,n=-1/0;for(let r of e)r&&(t=Math.min(t,Number(r.from.slice(0,4))),n=Math.max(n,Number(r.to.slice(0,4))));return Number.isFinite(t)&&Number.isFinite(n)?{first:t,last:n}:void 0}function er(e){let t=n=>function(a){let{store:i}=X(),{view:d}=Je(),m=n?{...e,range:n}:e,g=d.within?.range??m.range??"month",y=Object.keys(e.bindings),{nodes:c,arranged:f,arrangement:x,bar:s}=Pe(a,{...e.arranging!==void 0?{allow:e.arranging}:{},lensAllows:{sort:!1,group:g==="agenda"},...e.arrangedBy?{arrangedBy:e.arrangedBy}:{},...y[0]?{kind:(a.nodes??[]).find(C=>y.includes(String(C.kind)))?.kind??y[0]}:{}}),l=g==="agenda"&&f.grouped&&x.group?f.groups.map(C=>({label:C.label,ids:new Set(C.nodes.map(R=>R.id))})):void 0,h=new Set((a.nodes??[]).map(C=>String(C.kind))),o=y.filter(C=>!h.has(C)&&i.schema.tryDefinition(C)!==void 0).flatMap(C=>{let R=i.schema.tryDefinition(C);return i.graph.nodesOfKind(C).filter(A=>d.past===!0||We(R,A))}),b=o.length===0?c:[...c,...a.budget!==void 0?o.slice(0,a.budget):o];return Me(a,i.schema,(0,q.jsx)(Tr,{schema:i.schema,...a,nodes:b,options:{...m,today:m.today??i.today()??Gt()},...s?{bar:s}:{},...l?{groups:l}:{}}))};return{name:"calendar",requiredRoles:[...dn],bindings:e.bindings,options:e,View:t(),at:n=>t(n),ranges:()=>cn(e).map(n=>({range:n,title:Ht(n,e.horizon)})),place:(n,r)=>n.map(a=>gn(a,e.bindings,r)).filter(a=>a!==null)}}function Tr({nodes:e,label:t,fidelity:n,mode:r,options:a,schema:i,selectedIds:d=[],implicated:m=[],flagged:g=[],bar:y,groups:c}){let{view:f,go:x}=Je(),{store:s,principal:l}=X(),h=f.within?.at??a.today,o=f.within?.range??a.range??"month",b=a.weekStartsOn??1,C=new Set([...m,...d]),R=$=>C.size===0?"plain":C.has($)?"lit":"dimmed",A=new Set(g),S=o==="years"&&f.within?.at===void 0?Lr((e??[]).map($=>gn($,a.bindings,i))):void 0,k=Ut(o,h,{weekStartsOn:b,...a.horizon?{horizon:a.horizon}:{},...S?{fit:S}:{}}),E=n==="glyph"||n==="summary"?{next:a.today}:{from:k.cells[0]?.from??h,to:k.cells[k.cells.length-1]?.to??h},M=(e??[]).flatMap($=>jt($,a.bindings,i,E)),B=a.hueOf??($=>de($.kind));if(n==="glyph")return(0,q.jsx)(ye,{label:`${t??"Calendar"} \xB7 ${M.length}`,hue:de("calendar")});if(n==="summary"){let $=un(M,a.today);return(0,q.jsx)(te,{title:t??"Calendar",meta:`${M.length} dated`,tone:"muted",children:(0,q.jsx)(Ee,{max:6,items:$.length>0?$.map(V=>({id:V.id,label:V.label,hue:B(V)})):M.filter(V=>oe(a.today,V.from)>=0).sort((V,p)=>V.from.localeCompare(p.from)).slice(0,6).map(V=>({id:V.id,label:`${V.from.slice(5)} ${V.label}`,hue:B(V)}))})})}let w=r==="fullscreen",[W,P]=(0,pn.useState)(null),U=($,V,p)=>{let H=s.graph.getNode($);if(!H)return;let D=Be(a.bindings[H.kind],s.schema.tryDefinition(H.kind));if(!D)return;let j=_t(s,H.kind,D.start);if(!j){P({text:`Nothing declared writes the ${Cn(s.schema.definitions.find(K=>K.kind===H.kind),D.start).toLowerCase()}, so this cannot be moved from here.`,tone:"refused"});return}let v=V.from,O=H[D.start],ie=sn(O)===null?v:`${v}${String(O).slice(10)}`,se={name:j.name,args:{[j.arg]:$,[D.start]:ie}},ue=s.permits(se,l);if(!ue.ok){P({text:ue.refusal.message,tone:"refused"});return}try{s.apply(se,{author:l}),P(p==="day"?null:{text:`Moved to ${Oe(v)} \u2014 a ${p} is coarser than the ${Cn(s.schema.definitions.find(K=>K.kind===H.kind),D.start).toLowerCase()} holds, so it takes the first day of the cell. Undo puts it back.`,tone:"rounded"})}catch(K){P({text:K instanceof Error?K.message:String(K),tone:"refused"})}},ne=$=>{let V=o==="years"?ze(`${k.years?.[0]??h.slice(0,4)}${h.slice(4)}`,$*12*Math.max(1,k.years?.length??a.horizon?.years??1)):o==="year"?ze(h,$*12):o==="quarter"?ze(h,$*3):o==="month"?ze(h,$):o==="week"?we(h,$*7):we(h,$);x(Qe(f,"at",V))},ae=($,V)=>{let p=Qe(f,"range",$);V!==void 0&&(p=Qe(p,"at",V)),x(p)},ee=(0,pn.useRef)(null),ge=Ve(ee),pe=ge!==null&&ge<420,T=$=>$==="years"?a.horizon?.title??"years":$.charAt(0).toUpperCase()+$.slice(1);return(0,q.jsx)(te,{title:t??"Calendar",meta:k.title,style:{gap:10,...w?{flex:"1 1 auto",minHeight:0,height:"100%"}:{}},children:(0,q.jsxs)("div",{ref:ee,"data-testid":"calendar","data-calendar-range":o,"data-calendar-at":h,style:{display:"flex",flexDirection:"column",height:"100%",minHeight:0,gap:8},children:[(0,q.jsxs)("div",{style:{display:"flex",alignItems:"center",flexWrap:"wrap",gap:6},children:[(0,q.jsxs)("nav",{"aria-label":"When",style:{display:"flex",gap:4},children:[(0,q.jsx)(Hn,{label:"Previous",glyph:"\u2039",onPress:()=>ne(-1)}),(0,q.jsx)("button",{type:"button","data-testid":"calendar-today",onClick:()=>x(Qe(f,"at",a.today)),style:_e,children:"Today"}),(0,q.jsx)(Hn,{label:"Next",glyph:"\u203A",onPress:()=>ne(1)})]}),pe?(0,q.jsx)("select",{"aria-label":"Range","data-testid":"calendar-ranges",value:o,onChange:$=>ae($.target.value),style:{..._e,borderRadius:999,borderColor:"var(--graview-edge)",background:void 0,backgroundColor:"transparent",marginLeft:"auto",maxWidth:"50%",paddingRight:24,appearance:"none",WebkitAppearance:"none",backgroundImage:"linear-gradient(45deg, transparent 50%, currentColor 50%), linear-gradient(135deg, currentColor 50%, transparent 50%)",backgroundPosition:"calc(100% - 13px) 55%, calc(100% - 9px) 55%",backgroundSize:"4px 4px, 4px 4px",backgroundRepeat:"no-repeat"},children:cn(a).map($=>(0,q.jsx)("option",{value:$,children:T($)},$))}):(0,q.jsx)("div",{role:"group","aria-label":"Range","data-testid":"calendar-ranges",style:{display:"flex",flexWrap:"wrap",gap:4,marginLeft:"auto"},children:cn(a).map($=>(0,q.jsx)("button",{type:"button","aria-pressed":$===o,"data-testid":`calendar-range-${$}`,onClick:()=>ae($),style:{..._e,borderRadius:999,borderColor:"var(--graview-edge)",...$==="years"?{}:{textTransform:"capitalize"},...$===o?{borderColor:"var(--graview-accent)",color:"var(--graview-accent)",background:"var(--graview-panel)"}:{}},children:$==="years"?a.horizon?.title??"years":$},$))})]}),W?(0,q.jsx)("p",{"data-testid":W.tone==="refused"?"calendar-refused":"calendar-rounded",role:"status",style:{margin:0,fontSize:"0.8125rem",color:W.tone==="refused"?"var(--graview-warn)":"var(--graview-ink-muted)"},children:W.text}):null,k.years?(0,q.jsx)("nav",{"aria-label":"Years","data-testid":"calendar-years",style:{display:"flex",flexWrap:"wrap",gap:4},children:k.years.map($=>(0,q.jsx)("button",{type:"button","data-testid":`calendar-year-${$}`,onClick:()=>ae("year",`${$}-01-01`),style:_e,children:$},$))}):null,y,o==="agenda"&&c?(0,q.jsx)("div",{"data-testid":"calendar-groups",style:{display:"grid",gap:10,minHeight:0,overflow:"auto"},children:c.map($=>(0,q.jsxs)("section",{"data-testid":"calendar-group",style:{display:"grid",gap:4},children:[(0,q.jsxs)("h3",{style:{margin:0,fontSize:"0.8125rem",letterSpacing:"0.08em",textTransform:"uppercase",color:"var(--graview-ink-muted)"},children:[$.label," ",(0,q.jsx)("span",{style:{fontWeight:400},children:$.ids.size})]}),(0,q.jsx)(mn,{days:k.cells.map(V=>V.from),entries:M.filter(V=>$.ids.has(V.id)),today:a.today,emphasisOf:R,broken:A,hue:B,onMove:(V,p)=>U(V,{from:p,to:p,label:p},"day")})]},$.label))}):o==="agenda"?(0,q.jsx)(mn,{days:k.cells.map($=>$.from),entries:M,today:a.today,emphasisOf:R,broken:A,hue:B,onMove:($,V)=>U($,{from:V,to:V,label:V},"day")}):(0,q.jsx)(Xt,{span:k,weekStartsOn:b,entries:M,today:a.today,perCell:a.perCell??Jt[k.grain],emphasisOf:R,broken:A,hue:B,onOpen:$=>ae(Yt(k.grain),$.from),onMove:U})]})})}var ce=_(De(),1);var I=_(J(),1),Nr=`
|
|
4
4
|
.graview-columns { display: flex; flex-wrap: wrap; gap: 10px; align-items: flex-start; }
|
|
5
5
|
.graview-columns-column { flex: 1 1 13rem; min-width: 0; display: flex; flex-direction: column; gap: 8px; padding: 8px; border-radius: 10px; border: 1px solid var(--graview-edge); background: color-mix(in srgb, var(--graview-panel) 60%, transparent); }
|
|
6
6
|
.graview-columns-column[data-droppable="true"] { border-color: var(--graview-accent); }
|
|
@@ -22,6 +22,6 @@ import{a as Rt,b as At,c as Et,d as Pn}from"./chunk.FGVKJWNS.js";import{b as An,
|
|
|
22
22
|
.graview-columns-card .graview-choose-at { position: absolute; top: 6px; right: 6px; z-index: ${Ce.raised}; display: flex; }
|
|
23
23
|
[data-graview-choosable] { outline: none; }
|
|
24
24
|
@media (pointer: coarse) { [data-graview-choosable]:not([data-graview-choosing]) .graview-columns-card .graview-choose-at { display: none; } }
|
|
25
|
-
`;function
|
|
26
|
-
${r}`);this.hint=r;this.name="CoverageBindingError"}},Hn=(e,t)=>t&&e[t]!==void 0?String(e[t]):"",zr=40,Br=24;function Wr(e,t={}){let n=t.rows??zr,r=t.columns??Br;if(e.rows.length<=n&&e.columns.length<=r)return e;let a=new Map;for(let c of e.cells)a.set(c.rowId,(a.get(c.rowId)??0)+1),a.set(`col:${c.columnId}`,(a.get(`col:${c.columnId}`)??0)+1);let i=(c,f,x)=>{if(c.length<=f)return c;let s=new Set(c.map((l,h)=>({item:l,index:h,count:a.get(x(l))??0})).sort((l,h)=>h.count-l.count||l.index-h.index).slice(0,f).map(l=>l.item.id));return c.filter(l=>s.has(l.id))},d=i(e.rows,n,c=>c.id),m=i(e.columns,r,c=>`col:${c.id}`),g=new Set(d.map(c=>c.id)),y=new Set(m.map(c=>c.id));return{...e,rows:d,columns:m,cells:e.cells.filter(c=>g.has(c.rowId)&&y.has(c.columnId)),of:{rows:e.rows.length,columns:e.columns.length}}}function ar(e,t,n,r){let a=u=>u,i=u=>r?he(r.tryDefinition(u.kind),u):String(a(u).label??u.id),d=r?[n.rows,n.columns].filter(u=>r.tryDefinition(u)===void 0):[];if(d.length>0)throw new Xe(`No kind is declared for ${d.map(u=>`"${u}"`).join(" or ")}.`,'Check the lens bindings: { rows: "<kind>", columns: "<kind>", link: "<edge kind>" }');if(r&&typeof n.link!="string"){let u=$n(r,n.columns,n.link.path);if(!u.ok||!u.reached.has(n.rows)){let E=$n(r,n.columns,[...n.link.path].reverse());throw new Xe(E.ok&&E.reached.has(n.rows)?`The path runs from the ${n.rows} to the ${n.columns}; it is walked from the columns.`:`The path [${n.link.path.join(", ")}] cannot get from a ${n.columns} to a ${n.rows}.`,`Name it column end first: link: { path: [${[...n.link.path].reverse().map(M=>JSON.stringify(M)).join(", ")}] }`)}}let m=e.filter(u=>u.kind===n.rows),g=e.filter(u=>u.kind===n.columns);if(!r&&m.length===0&&g.length===0)throw new Xe(`Nothing to lay out: no "${n.rows}" and no "${n.columns}" nodes.`,'Check the lens bindings: { rows: "<kind>", columns: "<kind>", link: "<edge kind>" }');let y=n.groupOrder??[],c=u=>{let E=y.indexOf(u);return E===-1?y.length:E},f=n.badge?t.filter(u=>u.kind===n.badge.edge):[],x=new Set(m.map(u=>u.id)),s=new Set(g.map(u=>u.id)),l=[];if(typeof n.link=="string"){let u=n.link,E=t.filter(P=>P.kind===u),M=P=>r?.tryDefinition?.(P)?.edges?.[u]?.to,B=(M(n.columns)??[]).some(P=>P===n.rows||P==="*"),w=(M(n.rows)??[]).some(P=>P===n.columns||P==="*"),W=B||!w;for(let P of E){let U=W?P.to:P.from,ne=W?P.from:P.to;x.has(U)&&s.has(ne)&&l.push({rowId:U,columnId:ne})}}else{let u=new Map;for(let M of new Set(n.link.path))u.set(M,new Map);for(let M of t){let B=u.get(M.kind);if(!B)continue;let w=B.get(M.from);w?w.push(M.to):B.set(M.from,[M.to]);let W=B.get(M.to);W?W.push(M.from):B.set(M.to,[M.from])}let E=new Set;for(let M of g){let B=[{id:M.id,via:[]}];for(let w of n.link.path){let W=[],P=new Set,U=u.get(w);for(let ne of B)for(let ae of U.get(ne.id)??[])P.has(`${ne.id}|${ae}`)||(P.add(`${ne.id}|${ae}`),W.push({id:ae,via:[...ne.via,ne.id]}));B=W}for(let w of B){if(!x.has(w.id))continue;let W=`${w.id}|${M.id}`;E.has(W)||(E.add(W),l.push({rowId:w.id,columnId:M.id,via:w.via.slice(1)}))}}}let h=new Set(n.requiredGroups??[]),o=n.requiredVia?new Set(t.filter(u=>u.kind===n.requiredVia.edge).map(u=>u.to)):null,b=new Set(l.map(u=>u.rowId)),C=new Set(l.map(u=>u.columnId)),R=new Set(f.map(u=>u.to)),A=(u,E)=>E==="label"?i(u):a(u)[E],S=Ye(m,n.sort,A).map(u=>{let E=a(u),M=Hn(E,n.rowGroup);return{id:u.id,ref:Hn(E,n.rowRef),label:i(u),group:M,required:o?o.has(u.id):h.size===0||h.has(M),covered:b.has(u.id),badged:R.has(u.id)}}).sort((u,E)=>c(u.group)-c(E.group)||(n.sort!==void 0?0:u.ref<E.ref?-1:u.ref>E.ref?1:0)),k=Ye(g,n.columnSort,A).map(u=>({id:u.id,label:i(u),used:C.has(u.id),group:Hn(a(u),n.columnGroup)})).sort((u,E)=>u.group<E.group?-1:u.group>E.group?1:n.columnSort!==void 0?0:u.id<E.id?-1:u.id>E.id?1:0).map(({group:u,...E})=>E);return{rows:S,columns:k,cells:l,gaps:S.filter(u=>u.required&&!u.covered).map(u=>u.id),unasked:k.filter(u=>!u.used).map(u=>u.id)}}var er=316,Gn=58,jn=176,Ir=Math.sin(Gn*Math.PI/180),Vr=Math.cos(Gn*Math.PI/180),Hr=e=>{let t=e.reduce((r,a)=>Math.max(r,a.length),0),n=Math.min(jn,Math.max(46,t*5.4+12));return Math.ceil(n*Ir)+8},nr=Math.ceil(jn*Vr),tr=(e,t)=>tn(e,t).toLowerCase(),ir=(e,t)=>rn(e.tryDefinition(t),t);function Gr(e,t,n){return t.rows===t.columns?`${e} with none across`:`${Ie(n,t.rows,e)} with no ${ir(n,t.columns)}`}function jr(e,t,n){return t.rows===t.columns?`${e} with none down`:`${Ie(n,t.columns,e)} on no ${ir(n,t.rows)}`}function _r({nodes:e,label:t,fidelity:n,mode:r,options:a,schema:i,implicated:d=[],flagged:m=[],budget:g,rowsKept:y}){let{store:c}=X(),f=Qr(),x=(0,be.useRef)(null),s=Ve(x),[l,h]=(0,be.useState)(null),o=ar(He(c.graph,c.schema,e).filter(w=>w.kind===a.rows||w.kind===a.columns).filter(w=>y===void 0||a.rows===a.columns||w.kind!==a.rows||y.has(w.id)),c.graph.allEdges(),a,i),b=n==="full"?Wr(o,g!==void 0?{rows:g,columns:g}:{}):o,C=typeof a.link=="string"?a.link:void 0,R=y!==void 0&&o.cells.length===0&&o.columns.length>0&&(C===void 0||c.graph.allEdges().some(w=>w.kind===C))?void 0:st(c.schema,a,{rows:o.rows.length,columns:o.columns.length,cells:o.cells.length});if(n==="glyph")return(0,z.jsx)(ye,{label:`${t??"Coverage"} \xB7 ${R?"nothing linked":b.gaps.length===0?"complete":`${b.gaps.length} missing`}`,hue:de("coverage")});if(R)return(0,z.jsx)(te,{title:t??"Coverage",tone:"muted",fit:!0,...r==="fullscreen"?{style:{flex:"1 1 auto",minHeight:0,height:"100%"}}:{},children:(0,z.jsx)("p",{"data-coverage-unlinked":"",style:{margin:0,color:"var(--graview-ink-muted)"},children:R})});if(n==="summary"){let w=b.rows.filter(W=>b.gaps.includes(W.id));return(0,z.jsxs)(te,{title:t??"Coverage",meta:`${b.rows.length-b.gaps.length}/${b.rows.length}`,tone:b.gaps.length>0?"warning":"muted",fit:!0,children:[(0,z.jsx)(Yr,{grid:b}),w.length>0?(0,z.jsx)(Ee,{pick:!0,max:4,items:w.map(W=>({id:W.id,label:W.ref||W.label}))}):null]})}let A=new Set(d),S=new Set(m),k=l!==null&&l.every(w=>A.has(w))?l:null,u=r==="fullscreen",E=Hr(b.columns.map(w=>w.label)),M=s===null?er:Math.max(96,Math.min(er,Math.round(s*.36))),B=s!==null&&(s<420||M+b.columns.length*28+nr>s);return(0,z.jsx)(te,{title:t??"Coverage",...u?{style:{flex:"1 1 auto",minHeight:0,height:"100%"}}:{},meta:b.rows.length===0||b.columns.length===0?void 0:b.gaps.length===0&&b.unasked.length===0?"complete":[b.gaps.length>0?Gr(b.gaps.length,a,c.schema):"",b.unasked.length>0?jr(b.unasked.length,a,c.schema):""].filter(Boolean).join(" \xB7 "),selected:!1,fit:!0,children:(0,z.jsxs)("div",{ref:x,"data-coverage-shape":B?"stacked":"matrix",onClick:w=>h(rr(w.target)),onKeyDown:w=>{(w.key==="Enter"||w.key===" ")&&h(rr(w.target))},style:{position:"relative",display:"flex",flexDirection:"column",flex:"1 1 auto",minHeight:0,paddingRight:B?0:nr},children:[B?null:(0,z.jsxs)("div",{style:{display:"flex",alignItems:"flex-end",flex:"0 0 auto",position:"sticky",top:0,zIndex:Ce.over,background:"var(--graview-panel)",paddingTop:6},children:[(0,z.jsx)("div",{ref:f.corner,style:{width:M,flex:"0 0 auto",alignSelf:"stretch",position:"sticky",left:0,zIndex:Ce.raised,background:"var(--graview-panel)"}}),(0,z.jsx)("div",{ref:f.heads,style:{display:"flex",flex:1,minWidth:0,height:E},children:b.columns.map(w=>(0,z.jsx)("div",{"data-graview-pick":w.id,"data-graview-emphasis":A.size===0?"plain":A.has(w.id)?"lit":"dimmed",title:w.label,"data-graview-column":w.id,style:{flex:1,minWidth:28,boxSizing:"border-box",borderLeft:"1px solid transparent",pointerEvents:"none",position:"relative",display:"flex",alignItems:"flex-end",justifyContent:"center"},children:(0,z.jsxs)("span",{style:{position:"absolute",bottom:3,padding:"3px 0",pointerEvents:"auto",cursor:"pointer",left:"50%",visibility:f.hidden.has(w.id)?"hidden":"visible",transformOrigin:"left bottom",transform:`rotate(-${Gn}deg)`,whiteSpace:"nowrap",maxWidth:jn,overflow:"hidden",textOverflow:"ellipsis",fontSize:"0.75rem",letterSpacing:"0.005em",color:w.used?A.size>0&&!A.has(w.id)?"var(--graview-ink-faint)":"var(--graview-ink)":"var(--graview-warn)"},children:[w.used?"":"\u26A0 ",w.label]})},w.id))})]}),b.of?(0,z.jsxs)("p",{"data-testid":"coverage-more",style:{margin:"4px 0 6px",fontSize:"0.8125rem",color:"var(--graview-ink-muted)"},children:[[b.of.rows>b.rows.length?`the ${b.rows.length} most connected of ${b.of.rows} ${tr(c.schema,a.rows)}`:null,b.of.columns>b.columns.length?`${b.columns.length} of ${b.of.columns} ${tr(c.schema,a.columns)} across`:null].filter(Boolean).join(" \xB7 ").replace(/^./,w=>w.toUpperCase())," ","\u2014 what is missing is still counted over all of them."]}):null,(0,z.jsx)("div",{children:b.rows.map((w,W)=>{let P=b.rows[W-1],U=P===void 0||P.group!==w.group,ne=w.required&&!w.covered,ae=A.size>0&&!A.has(w.id);return(0,z.jsxs)("div",{children:[U&&w.group?(0,z.jsx)("div",{style:{fontSize:"0.6875rem",letterSpacing:"0.16em",textTransform:"uppercase",color:"var(--graview-ink-faint)",padding:"9px 0 3px"},children:(0,z.jsx)("span",{style:{position:"sticky",left:0,display:"inline-block",paddingRight:8,background:"var(--graview-panel)"},children:w.group})}):null,(0,z.jsxs)("div",{style:{display:"flex",flexDirection:B?"column":"row",alignItems:"stretch",borderTop:"1px solid var(--graview-edge)",opacity:ae?.72:1},children:[(0,z.jsxs)("div",{"data-graview-pick":w.id,"data-graview-emphasis":A.size===0?"plain":ae?"dimmed":"lit",title:w.label,style:{width:B?"auto":M,flex:"0 0 auto",position:B?"static":"sticky",left:0,zIndex:Ce.raised,background:"var(--graview-panel)",display:"flex",alignItems:"center",gap:7,padding:"6px 10px 6px 0",boxSizing:"border-box",fontSize:"0.8125rem",minWidth:0,color:ne||S.has(w.id)?"var(--graview-warn)":"var(--graview-ink)"},children:[w.ref?(0,z.jsx)("span",{style:{flex:"0 0 auto",fontVariantNumeric:"tabular-nums",color:"var(--graview-ink-faint)"},children:w.ref}):null,(0,z.jsx)("span",{style:{minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:w.label}),a.badge?(0,z.jsx)("span",{title:w.badged?a.badge.title:a.badge.missingTitle,style:{marginLeft:"auto",flex:"0 0 auto",fontSize:"0.75rem",color:w.badged?"var(--graview-ink-faint)":"var(--graview-warn)"},children:w.badged?a.badge.symbol:"\u25CB"}):null]}),(0,z.jsx)("div",{style:{display:"flex",flex:1,minWidth:0,...B?{flexWrap:"wrap",gap:6,padding:"0 0 8px"}:{}},children:b.columns.map(ee=>{let ge=b.cells.find(T=>T.rowId===w.id&&T.columnId===ee.id),pe=ge!==void 0;return(0,z.jsxs)("div",{"data-graview-mark":"",...pe?{"data-graview-pick":ee.id,"data-graview-emphasis":A.size===0?"plain":A.has(ee.id)&&A.has(w.id)?"lit":"dimmed","data-graview-joins":JSON.stringify(Fr(ge))}:{},title:pe?`${ee.label} answers ${w.ref||w.label}`:`${ee.label} does not answer ${w.ref||w.label}`,style:B?{flex:"0 0 auto",minHeight:24,boxSizing:"border-box",display:"inline-flex",alignItems:"center",gap:6,padding:"2px 9px 2px 7px",borderRadius:6,border:"1px solid var(--graview-edge)",fontSize:"0.75rem",color:pe?"var(--graview-ink)":"var(--graview-ink-faint)"}:{flex:1,minWidth:28,boxSizing:"border-box",display:"flex",alignItems:"center",justifyContent:"center",borderLeft:"1px solid var(--graview-edge)"},children:[(0,z.jsx)("span",{style:Kr(pe,ne,A.has(ee.id)&&A.has(w.id),A.size>0)}),B?(0,z.jsx)("span",{children:ee.label}):null]},ee.id)})})]})]},w.id)})}),k?(0,z.jsx)(Ur,{box:x,joins:k,shape:`${B?"stacked":"matrix"} ${s??""}`}):null]})})}var Fr=e=>[e.rowId,e.columnId,...e.via??[]];function rr(e){let t=e?.closest?.("[data-graview-joins]")?.getAttribute("data-graview-joins");if(!t)return null;try{let n=JSON.parse(t);return Array.isArray(n)&&n.every(r=>typeof r=="string")?n:null}catch{return null}}var fn=(e,t,n)=>Math.min(n,Math.max(t,e));function qr(e){let t=e.getBoundingClientRect(),n=typeof document.createRange=="function"?document.createRange():null;n?.selectNodeContents(e);let r=typeof n?.getBoundingClientRect=="function"?n.getBoundingClientRect():null;return r&&r.width>0&&r.height>0?r:t}function Ur({box:e,joins:t,shape:n}){let[r,a]=(0,be.useState)([]),i=JSON.stringify(t);return(0,be.useLayoutEffect)(()=>{let d=e.current;if(!d||typeof window>"u")return;let m=()=>{let c=d.getBoundingClientRect(),f=d.offsetWidth>0&&c.width>0?c.width/d.offsetWidth:1,x=[...d.querySelectorAll("[data-graview-joins]")].find(h=>h.getAttribute("data-graview-joins")===i);if(!x){a([]);return}let s=x.getBoundingClientRect(),l=[];for(let h of JSON.parse(i)){let o=[...d.querySelectorAll("[data-graview-pick]")].find(k=>k.getAttribute("data-graview-pick")===h&&!k.closest("[data-graview-mark]"));if(!o)continue;let b=qr(o),C=fn(s.left+s.width/2,b.left,b.right),R=fn(s.top+s.height/2,b.top,b.bottom),A=fn(C,s.left,s.right),S=fn(R,s.top,s.bottom);l.push({id:h,x1:(A-c.left)/f,y1:(S-c.top)/f,x2:(C-c.left)/f,y2:(R-c.top)/f})}a(l)};m();let g=0,y=()=>{g===0&&(g=requestAnimationFrame(()=>{g=0,m()}))};return document.addEventListener("scroll",y,{capture:!0,passive:!0}),window.addEventListener("resize",y,{passive:!0}),()=>{document.removeEventListener("scroll",y,{capture:!0}),window.removeEventListener("resize",y),g!==0&&cancelAnimationFrame(g)}},[e,i,n]),(0,z.jsx)("svg",{"aria-hidden":"true","data-coverage-join":i,style:{position:"absolute",left:0,top:0,width:"100%",height:"100%",overflow:"visible",pointerEvents:"none",zIndex:Ce.over},children:r.map(d=>(0,z.jsxs)("g",{"data-coverage-join-to":d.id,children:[(0,z.jsx)("line",{x1:d.x1,y1:d.y1,x2:d.x2,y2:d.y2,stroke:"var(--graview-accent)",strokeWidth:1.6,strokeLinecap:"round"}),(0,z.jsx)("circle",{cx:d.x2,cy:d.y2,r:2.6,fill:"var(--graview-accent)"})]},d.id))})}function Kr(e,t,n,r){return e?{width:13,height:13,borderRadius:4,background:n||!r?"var(--graview-accent)":"var(--graview-accent-dim)",boxShadow:n&&r?"0 0 12px -2px var(--graview-accent)":void 0}:{width:5,height:5,borderRadius:1,background:t?"var(--graview-warn)":"var(--graview-edge)",opacity:t?.5:1}}function Yr({grid:e}){let t=e.rows.filter(a=>a.required),n=t.filter(a=>a.covered).length,r=t.length===0?1:n/t.length;return(0,z.jsx)("div",{role:"img","aria-label":`${n} of ${t.length} covered`,style:{height:6,borderRadius:999,overflow:"hidden",background:"var(--graview-edge)"},children:(0,z.jsx)("div",{style:{width:`${Math.round(r*100)}%`,height:"100%",background:r===1?"var(--graview-accent)":"var(--graview-warn)"}})})}function or(e){function t(n){let{store:r}=X(),a=He(r.graph,r.schema,n.nodes).filter(g=>g.kind===e.rows),{arranged:i,bar:d}=Pe(n,{lensAllows:{sort:!1,group:!1},subject:a,kind:e.rows}),m=(0,z.jsx)(_r,{schema:r.schema,...n,options:e,...d?{rowsKept:new Set(i.nodes.map(g=>g.id))}:{}});return d?(0,z.jsxs)("div",{style:{display:"grid",gap:6,height:"100%",minHeight:0,gridTemplateRows:"auto 1fr"},children:[d,m]}):m}return{name:"coverage",requiredRoles:[...Dr],options:e,View:t,build(n,r,a){return ar(n,r,e,a)}}}function Qr(){let e=(0,be.useRef)(null),t=(0,be.useRef)(null),[n,r]=(0,be.useState)(new Set);return(0,be.useEffect)(()=>{let a=t.current;if(!a||typeof window>"u")return;let i=a.parentElement;for(;i&&!/(auto|scroll)/.test(getComputedStyle(i).overflowX);)i=i.parentElement;if(!i)return;let d=0,m=()=>{d=0;let y=e.current?.getBoundingClientRect().right??0,c=new Set;for(let f of a.querySelectorAll("[data-graview-column]")){let x=f.getBoundingClientRect();x.left+x.width/2<y&&c.add(f.dataset.graviewColumn)}r(f=>f.size===c.size&&[...c].every(x=>f.has(x))?f:c)},g=()=>{d===0&&(d=requestAnimationFrame(m))};return m(),i.addEventListener("scroll",g,{passive:!0}),()=>{i.removeEventListener("scroll",g),d!==0&&cancelAnimationFrame(d)}},[]),{corner:e,heads:t,hidden:n}}var lr=["regions","outline"],Fe=class extends Error{constructor(n,r){super(`${n}
|
|
27
|
-
${r}`);this.hint=r;this.name="PlanBindingError"}},hn='Check the lens bindings: { regions: "<kind>", outline: "<field>", markers?: "<kind>", at?: "<field>", within?: "<edge>" }',sr=e=>typeof e=="object"&&e!==null&&typeof e.x=="number"&&typeof e.y=="number";function yn(e,t,n,r){let a=o=>o,i=o=>r?he(r.tryDefinition(o.kind),o):String(a(o).label??o.id);if(r&&r.tryDefinition(n.regions)===void 0)throw new Fe(`No kind is declared for "${n.regions}".`,hn);if(n.markers&&r&&r.tryDefinition(n.markers)===void 0)throw new Fe(`No kind is declared for "${n.markers}".`,hn);let d=e.filter(o=>o.kind===n.regions);if(!r&&d.length===0)throw new Fe(`Nothing to draw: no "${n.regions}" nodes.`,hn);let g=r?.tryDefinition(n.regions)?.fields?.shape;if(g!==void 0&&!(n.outline in g))throw new Fe(`"${n.regions}" has no field called "${n.outline}".`,hn);let y=(()=>{let o=new Map;if(n.nests)for(let b of t)b.kind===n.nests&&o.set(b.from,b.to);return b=>{let C=0,R=o.get(b),A=new Set([b]);for(;R!==void 0&&!A.has(R)&&C<d.length;)A.add(R),C+=1,R=o.get(R);return C}})(),c=n.markers?e.filter(o=>o.kind===n.markers):[],f=new Map;if(n.within)for(let o of t)o.kind===n.within&&f.set(o.from,o.to);let x=[],s=new Map;for(let o of c){let b=n.at===void 0?void 0:a(o)[n.at],C=f.get(o.id);if(!sr(b)||C===void 0){x.push({id:o.id,label:i(o)});continue}let R=n.markerKind===void 0?void 0:a(o)[n.markerKind],A=s.get(C)??[];A.push({id:o.id,label:i(o),at:b,...typeof R=="string"?{what:R}:{}}),s.set(C,A)}let l=[],h=[];for(let o of d){let b=a(o)[n.outline];if(!Array.isArray(b)||b.length<3||!b.every(sr)){l.push({id:o.id,label:i(o)});continue}let C=n.regionKind===void 0?void 0:a(o)[n.regionKind];h.push({id:o.id,label:i(o),outline:b,center:St(b),depth:y(o.id),markers:s.get(o.id)??[],...typeof C=="string"?{what:C}:{}})}return h.sort((o,b)=>o.depth-b.depth),{regions:h,undrawn:l,strays:x}}var Te=_(De(),1);var L=_(J(),1);function dr({map:e,options:t,implicated:n,flagged:r}){return(0,L.jsxs)("ul",{style:{margin:0,padding:0,listStyle:"none",display:"grid",gap:".25rem"},children:[e.regions.map(a=>{let i=wn(a.id,n,r);return(0,L.jsxs)("li",{"data-graview-pick":a.id,...i?{"data-graview-emphasis":i}:{},style:{display:"flex",flexWrap:"wrap",gap:".5rem",justifyContent:"space-between",minWidth:0,padding:".25rem .4rem",borderRadius:".35rem",background:i==="flagged"?Fn(a.what,i,t.hues):void 0},children:[(0,L.jsx)("span",{style:{minWidth:0,overflowWrap:"anywhere"},children:a.label}),(0,L.jsxs)("span",{style:{opacity:.7,whiteSpace:"nowrap"},children:[a.what?`${a.what} \xB7 `:"",a.markers.length]})]},a.id)}),e.undrawn.map(a=>(0,L.jsxs)("li",{"data-graview-pick":a.id,style:{display:"flex",gap:".5rem",opacity:.7,padding:".25rem .4rem"},children:[(0,L.jsx)("span",{style:{minWidth:0,overflowWrap:"anywhere"},children:a.label}),(0,L.jsx)("span",{style:{whiteSpace:"nowrap"},children:t.undrawnLabel??"not drawn"})]},a.id))]})}var _n=1e3,cr=.022,Ze={minHeight:"1.9rem",padding:".25rem .65rem",borderRadius:".35rem",border:"1px solid var(--graview-edge)",background:"var(--graview-panel)",color:"var(--graview-ink)",font:"inherit",fontSize:"0.9375rem",cursor:"pointer"},wn=(e,t,n)=>{if(n?.includes(e))return"flagged";if(t?.includes(e))return"implicated"},vn=(e,t)=>(e===void 0?void 0:t?.[e])??de(e??"region"),Fn=(e,t,n)=>t==="flagged"?"color-mix(in oklab, var(--graview-warn) 26%, var(--graview-panel))":`color-mix(in oklab, hsl(${vn(e,n)} 52% 48%) 24%, var(--graview-panel))`,gr=(e,t,n)=>t==="flagged"?"var(--graview-warn)":`color-mix(in oklab, hsl(${vn(e,n)} 48% 42%) 78%, var(--graview-ink))`;function Jr(e){let t=e.currentTarget.getBoundingClientRect(),n=r=>Math.round(Math.max(0,Math.min(1,r))*1e3)/1e3;return{x:n(t.width===0?0:(e.clientX-t.left)/t.width),y:n(t.height===0?0:(e.clientY-t.top)/t.height)}}function ur({schema:e,options:t,nodes:n,label:r,fidelity:a,selected:i,implicated:d,flagged:m}){let{store:g}=X(),y=g.graph.allEdges(),c=g.graph.allNodes(),f=n===void 0?void 0:new Set(n.map(v=>v.id)),x=f===void 0?c:c.filter(v=>v.kind!==t.regions||f.has(v.id)),s=yn(x,y,t,e),l=s.regions.length,h=s.regions.reduce((v,O)=>v+O.markers.length,0);if(a==="glyph")return(0,L.jsx)(ye,{label:`${r??"Ground"} \xB7 ${l}`,...s.undrawn.length>0?{meta:`+${s.undrawn.length} undrawn`}:{},selected:i});if(a==="summary")return(0,L.jsx)(te,{title:r??"The plan",subtitle:`${l} drawn \xB7 ${h} standing in them`,children:(0,L.jsx)(dr,{map:s,options:t,...d?{implicated:d}:{},...m?{flagged:m}:{}})});let o=(0,Te.useMemo)(()=>{let v=1/0,O=1/0,G=-1/0,ie=-1/0,se=K=>{K.x<v&&(v=K.x),K.x>G&&(G=K.x),K.y<O&&(O=K.y),K.y>ie&&(ie=K.y)};for(let K of s.regions){for(let ve of K.outline)se(ve);for(let ve of K.markers)se(ve.at)}if(!Number.isFinite(v)||G-v<=0||ie-O<=0)return{x0:0,y0:0,x1:1,y1:1};let ue=Math.max(G-v,ie-O)*.04;return{x0:v-ue,y0:O-ue,x1:G+ue,y1:ie+ue}},[s.regions]),b=(o.x1-o.x0)/(o.y1-o.y0),C=t.aspect??Math.min(3.2,Math.max(.55,b)),R=Math.round(_n/(o.x1-o.x0)),A=Math.round(R*(o.x1-o.x0)),S=Math.round(A/C),k={x:o.x0*R,y:o.y0*R-(S-R*(o.y1-o.y0))/2,w:A,h:S},u=R,E=k.w,M=(d?.length??0)>0||(m?.length??0)>0,B=(0,Te.useRef)(null),{touchable:w,legible:W}=mt(B,{units:k.w,target:E*cr*2}),P=Rn("--graview-font-display","serif"),U=Rn("--graview-font-body","sans-serif"),{named:ne,placed:ae,tagged:ee}=(0,Te.useMemo)(()=>{let v=[],O=E*.012,G=_n*.004,ie=(le,Y)=>!v.some(fe=>fe!==Y&&Ct({x0:le.x0-G,y0:le.y0-G,x1:le.x1+G,y1:le.y1+G},fe)),se=[...s.regions].sort((le,Y)=>En(Y.outline)-En(le.outline)),ue=new Map,K=new Map;for(let le of se){let Y=xt(le.outline),fe=Math.max(0,(Y.bottom-Y.top)*u*.55),$e=null;for(let ke of[.12,.26,.42,.6,.78]){let xe=Y.top+ke*(Y.bottom-Y.top),Re=An(le.outline,xe),bn=Math.max(0,(Re.x1-Re.x0)*R-O*2),me=kt(le.label,{room:bn,height:fe,size:E*.023,floor:E*.015,measure:P});if(me===null)continue;let Ne=Math.max(...me.lines.map(Sr=>P(Sr,me.fontSize))),Ae=me.lines.length*me.fontSize*1.15,Kn=Y.top*u+O+Ae/2,Yn=Y.bottom*u-O-Ae/2,nn=Yn<Kn?(Y.top+Y.bottom)*u/2:Math.min(Math.max(xe*u,Kn),Yn),xn=An(le.outline,nn/u),Sn=xn.x0*R+O;if(Ne>(xn.x1-xn.x0)*R-O*2)continue;let Qn={x0:Sn,y0:nn-Ae/2,x1:Sn+Ne,y1:nn+Ae/2};if(ie(Qn)){v.push(Qn),$e={fitted:me,x:Sn,y:nn};break}}ue.set(le.id,$e?.fitted??null),$e!==null&&K.set(le.id,{x:$e.x,y:$e.y})}let ve=E*.018,Ue=new Map,F=E*.011+E*.004,Un=new Map;for(let le of s.regions)for(let Y of le.markers){let fe={x0:Y.at.x*R-F,y0:Y.at.y*u-F,x1:Y.at.x*R+F,y1:Y.at.y*u+F};Un.set(Y.id,fe),v.push(fe)}for(let le of w?s.regions:[])for(let Y of le.markers){let fe=E*.018,$e=U(Y.label,ve),ke=Y.at.x*R,xe=Y.at.y*u,Re=ve*1.15,bn=[{x:ke+fe,y:xe,anchor:"start"},{x:ke-fe,y:xe,anchor:"end"},{x:ke+fe*.7,y:xe-Re,anchor:"start"},{x:ke-fe*.7,y:xe-Re,anchor:"end"},{x:ke+fe*.7,y:xe+Re,anchor:"start"},{x:ke-fe*.7,y:xe+Re,anchor:"end"},{x:ke,y:xe-Re*1.1,anchor:"start"},{x:ke,y:xe+Re*1.1,anchor:"start"}];for(let me of bn){let Ne=me.anchor==="start"?me.x:me.x-$e,Ae={x0:Ne,y0:me.y-ve*.62,x1:Ne+$e,y1:me.y+ve*.62};if(!(Ne<k.x+4||Ne+$e>k.x+k.w-4)&&!(Ae.y0<k.y+2||Ae.y1>k.y+k.h-2)&&ie(Ae,Un.get(Y.id))){v.push(Ae),Ue.set(Y.id,{at:{x:me.x,y:me.y},anchor:me.anchor,size:ve});break}}}return{named:ue,placed:K,tagged:Ue}},[s.regions,_n,u,w,P,U]),ge=(0,Te.useMemo)(()=>{let v=[];for(let O of s.regions)(ne.get(O.id)?.whole??!1)===!1&&v.push({id:O.id,label:O.label,what:O.what,round:!1});for(let O of s.regions)for(let G of O.markers)(!w||!ee.has(G.id))&&v.push({id:G.id,label:G.label,what:G.what,round:!0});return v},[s.regions,ne,ee,w]),{principal:pe}=X(),[T,$]=(0,Te.useState)(null),V=t.draw!==void 0,p=t.place!==void 0,H=v=>{if(T===null)return;v.stopPropagation();let O=Jr(v);if(T.kind==="marker"){g.apply({name:t.place.act,args:{[t.place.id]:T.id,[t.place.at]:O}},{author:pe,intent:`Placed ${T.label} on the map`}),$(null);return}$({...T,corners:[...T.corners,O]})},D=()=>{T===null||T.kind!=="region"||T.corners.length<3||(g.apply({name:t.draw.act,args:{[t.draw.id]:T.id,[t.draw.outline]:T.corners}},{author:pe,intent:`Drew ${T.label} on the map \u2014 ${T.corners.length} corners`}),$(null))},j=T===null?s.regions.length===0?"Nothing drawn yet. Choose an area below, then click its corners here.":null:T.kind==="marker"?`Click where ${T.label} stands.`:T.corners.length<3?`Click the corners of ${T.label} \u2014 ${3-T.corners.length} more to make an area.`:`${T.corners.length} corners. Keep clicking, or press Done.`;return W?(0,L.jsxs)(te,{title:r??"The plan",subtitle:`${l} drawn \xB7 ${h} standing in them`,...s.undrawn.length>0?{meta:`${s.undrawn.length} ${t.undrawnLabel??"not drawn yet"}`}:{},selected:i,fit:!0,children:[(0,L.jsx)("div",{style:{position:"relative",width:"100%",aspectRatio:`${k.w} / ${k.h}`,overflow:"hidden"},children:(0,L.jsxs)("svg",{ref:B,viewBox:`${k.x} ${k.y} ${k.w} ${k.h}`,width:"100%",height:"100%",preserveAspectRatio:"xMidYMid meet",role:T!==null?"application":w?"group":"img","aria-label":T===null?`${r??"The plan"}: ${l} drawn, ${h} standing in them`:j??"Drawing",onClick:H,"data-testid":"plan-canvas",style:{display:"block",position:"absolute",inset:0,cursor:T===null?void 0:"crosshair",border:"1px dashed color-mix(in oklab, var(--graview-edge) 80%, transparent)",borderRadius:".4rem",backgroundImage:"linear-gradient(color-mix(in oklab, var(--graview-edge) 35%, transparent) 1px, transparent 1px),linear-gradient(90deg, color-mix(in oklab, var(--graview-edge) 35%, transparent) 1px, transparent 1px)",backgroundSize:"10% 10%"},children:[(0,L.jsx)("text",{x:k.x+k.w-E*.028,y:k.y+E*.034,fontSize:E*.022,textAnchor:"middle",fill:"var(--graview-ink)",opacity:.55,children:"N"}),j!==null&&s.regions.length===0?(0,L.jsx)("text",{x:k.x+k.w/2,y:k.y+k.h/2,textAnchor:"middle",dominantBaseline:"middle",fontSize:E*.026,fill:"var(--graview-ink)",opacity:.7,style:{pointerEvents:"none",fontFamily:"var(--graview-font-body)"},children:j}):null,T!==null&&T.kind==="region"&&T.corners.length>0?(0,L.jsxs)("g",{style:{pointerEvents:"none"},children:[(0,L.jsx)("polyline",{points:T.corners.map(v=>`${v.x*R},${v.y*u}`).join(" "),fill:T.corners.length>=3?"color-mix(in oklab, var(--graview-accent) 22%, transparent)":"none",stroke:"var(--graview-accent)",strokeWidth:3,strokeDasharray:"8 6"}),T.corners.map((v,O)=>(0,L.jsx)("circle",{cx:v.x*R,cy:v.y*u,r:E*.008,fill:"var(--graview-accent)"},O))]}):null,s.regions.map(v=>{let O=wn(v.id,d,m),G=M&&O===void 0?.34:1,ie=v.outline.map(se=>`${se.x*R},${se.y*u}`).join(" ");return(0,L.jsx)("g",{"data-graview-pick":v.id,...O?{"data-graview-emphasis":O}:{},role:"button","aria-label":`${v.label}${v.what?`, ${v.what}`:""}, ${v.markers.length} standing in it`,style:{opacity:G,cursor:"pointer"},children:(0,L.jsx)("polygon",{points:ie,fill:Fn(v.what,O,t.hues),stroke:gr(v.what,O,t.hues),strokeWidth:O==="flagged"?5:2.5,strokeLinejoin:"round"})},v.id)}),s.regions.flatMap(v=>v.markers.map(O=>{let G=wn(O.id,d,m),ie=M&&G===void 0?.34:1;return(0,L.jsxs)("g",{...w?{"data-graview-pick":O.id,role:"button","aria-label":`${O.label}${O.what?`, ${O.what}`:""}, in ${v.label}`}:{"aria-hidden":!0},...G?{"data-graview-emphasis":G}:{},style:{opacity:ie,cursor:w?"pointer":"default"},children:[w?(0,L.jsx)("circle",{cx:O.at.x*R,cy:O.at.y*u,r:E*cr,fill:"transparent"}):null,(0,L.jsx)("circle",{cx:O.at.x*R,cy:O.at.y*u,r:E*.011,fill:G==="flagged"?"var(--graview-warn)":`hsl(${vn(O.what,t.hues)} 55% 45%)`,stroke:"var(--graview-panel)",strokeWidth:E*.004}),ee.has(O.id)?(0,L.jsx)("text",{x:ee.get(O.id).at.x,y:ee.get(O.id).at.y,textAnchor:ee.get(O.id).anchor,dominantBaseline:"middle",fontSize:ee.get(O.id).size,fill:"var(--graview-ink)",stroke:"var(--graview-panel)",strokeWidth:Math.max(2,ee.get(O.id).size*.3),paintOrder:"stroke","data-testid":`marker-label-${O.id}`,style:{pointerEvents:"none",fontFamily:"var(--graview-font-body)"},children:O.label}):null]},O.id)})),s.regions.map(v=>{let O=ne.get(v.id),G=ae.get(v.id);if(!O||G===void 0)return null;let ie=wn(v.id,d,m);return(0,L.jsx)("text",{x:G.x,y:G.y-(O.lines.length-1)*O.fontSize*1.15/2,textAnchor:"start",dominantBaseline:"middle",fontSize:O.fontSize,fill:"var(--graview-ink)",opacity:M&&ie===void 0?.34:1,stroke:"var(--graview-panel)",strokeWidth:Math.max(2,O.fontSize*.26),paintOrder:"stroke","data-testid":`region-label-${v.id}`,style:{pointerEvents:"none",fontFamily:"var(--graview-font-display)"},children:O.lines.map((se,ue)=>(0,L.jsx)("tspan",{x:G.x,dy:ue===0?0:O.fontSize*1.15,children:se},se+String(ue)))},`label-${v.id}`)})]})}),ge.length>0?(0,L.jsx)("ul",{"data-testid":"map-key",style:{margin:".5rem 0 0",padding:0,listStyle:"none",display:"flex",flexWrap:"wrap",gap:".2rem .75rem",fontSize:"0.875rem"},children:ge.map(v=>(0,L.jsxs)("li",{"data-graview-pick":v.id,style:{display:"flex",alignItems:"center",gap:".35rem",minWidth:0,minHeight:"max(1.5rem, 24px)",padding:"0 .15rem",cursor:"pointer"},children:[(0,L.jsx)("span",{"aria-hidden":"true",style:{width:v.round?".55rem":".7rem",height:v.round?".55rem":".7rem",flex:"0 0 auto",borderRadius:v.round?"50%":".15rem",background:v.round?`hsl(${vn(v.what,t.hues)} 55% 45%)`:Fn(v.what,void 0,t.hues),border:v.round?void 0:`1px solid ${gr(v.what,void 0,t.hues)}`}}),(0,L.jsx)("span",{style:{minWidth:0,overflowWrap:"anywhere"},children:v.label})]},v.id))}):null,T!==null?(0,L.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:".5rem",marginTop:".5rem",alignItems:"center"},children:[s.regions.length>0&&j!==null?(0,L.jsx)("span",{style:{fontSize:"0.9375rem",opacity:.8,flexBasis:"100%"},"aria-live":"polite",children:j}):null,T.kind==="region"?(0,L.jsxs)("button",{type:"button",onClick:D,disabled:T.corners.length<3,"data-testid":"draw-done",style:{...Ze,background:"var(--graview-accent)",color:"var(--graview-accent-ink)",borderColor:"transparent"},children:["Done \u2014 keep ",T.label]}):null,T.kind==="region"&&T.corners.length>0?(0,L.jsx)("button",{type:"button",onClick:()=>$({...T,corners:T.corners.slice(0,-1)}),style:Ze,children:"Undo a corner"}):null,(0,L.jsx)("button",{type:"button",onClick:()=>$(null),style:Ze,"data-testid":"draw-cancel",children:"Stop"})]}):(0,L.jsxs)(L.Fragment,{children:[V&&s.undrawn.length>0?(0,L.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:".4rem",marginTop:".5rem",alignItems:"center"},children:[(0,L.jsxs)("span",{style:{fontSize:"0.875rem",opacity:.75},children:[t.undrawnLabel??"Not drawn yet",":"]}),s.undrawn.map(v=>(0,L.jsxs)("button",{type:"button",style:Ze,onClick:()=>$({kind:"region",id:v.id,label:v.label,corners:[]}),"data-testid":`draw-${v.id}`,children:["Draw ",v.label]},v.id))]}):null,p&&s.strays.length>0?(0,L.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:".4rem",marginTop:".5rem",alignItems:"center"},children:[(0,L.jsxs)("span",{style:{fontSize:"0.875rem",opacity:.75},children:[t.strayLabel??"Not placed",":"]}),s.strays.map(v=>(0,L.jsxs)("button",{type:"button",style:Ze,onClick:()=>$({kind:"marker",id:v.id,label:v.label}),"data-testid":`place-${v.id}`,children:["Place ",v.label]},v.id))]}):null,t.help!==void 0&&(s.undrawn.length>0||s.strays.length>0)?(0,L.jsx)("p",{style:{margin:".5rem 0 0",fontSize:"0.875rem"},children:(0,L.jsx)("a",{href:t.help.href,"data-testid":"map-help",children:t.help.label})}):null,!V&&(s.undrawn.length>0||s.strays.length>0)?(0,L.jsxs)("p",{style:{margin:".5rem 0 0",fontSize:"0.875rem",opacity:.75},children:[s.undrawn.map(v=>v.label).join(", "),s.undrawn.length>0?` \u2014 ${t.undrawnLabel??"not drawn yet"}. `:"",s.strays.map(v=>v.label).join(", "),s.strays.length>0?` \u2014 ${t.strayLabel??"not placed"}.`:""]}):null]})]}):(0,L.jsx)(te,{title:r??"The plan",subtitle:`${l} drawn \xB7 ${h} standing in them`,selected:i,children:(0,L.jsx)(dr,{map:s,options:t,...d?{implicated:d}:{},...m?{flagged:m}:{}})})}var pr=_(J(),1);function mr(e){function t(n){let{store:r}=X();return(0,pr.jsx)(ur,{schema:r.schema,...n,options:e})}return{name:"plan",requiredRoles:[...lr],options:e,View:t,build(n,r,a){return yn(n,r,e,a)}}}var re=_(J(),1);function Xr(e,t,n){let r=t.flatMap(i=>(i.subject&&i.subject.kinds!=="*"?i.subject.kinds:[null]).map(m=>({name:i.name,title:i.title??i.name,kind:m}))),a=[];for(let i of n){let d={kind:"human",id:"themselves",roles:[i]};for(let m of r){let g=m.kind??void 0,y=On(e,d,m.name,g).ok,c=!y&&On(e,d,m.name,g,void 0,"themselves").ok;a.push({role:i,act:m.name,kind:m.kind,may:y?"yes":c?"self":"no"})}}return{roles:n,acts:r,cells:a}}function Zr({label:e,fidelity:t,mode:n}){let{store:r}=X(),a=r.policy,i=a?.roles??[],d=r.allMutations().filter(f=>!f.derived).map(f=>({name:f.name,...f.title?{title:f.title}:{},...f.subject?{subject:f.subject}:{}})),m=Xr(a,d,i),g=e??"Who may do what";if(!a||i.length===0)return(0,re.jsxs)("div",{"data-testid":"reach-lens",style:{padding:14,color:"var(--graview-ink-muted)",fontSize:"0.875rem"},children:[g,": this installation has no policy, so everyone may do everything."]});if(t==="glyph")return(0,re.jsx)(ye,{label:`${g} \xB7 ${i.length} ${i.length===1?"role":"roles"}`,hue:de("role")});let y=n==="fullscreen",c=f=>f==="yes"?"\u25CF":f==="self"?"\u25D0":"\xB7";return(0,re.jsxs)("div",{"data-testid":"reach-lens",style:{display:"grid",gap:10,padding:y?0:14,borderRadius:"var(--graview-radius, 12px)",background:y?"transparent":"var(--graview-panel)",border:y?"none":"1px solid var(--graview-edge)",color:"var(--graview-ink)",minWidth:0},children:[(0,re.jsxs)("div",{style:{display:"flex",alignItems:"baseline",gap:10},children:[(0,re.jsx)("span",{style:{fontFamily:"var(--graview-font-display)",fontSize:"1.125rem",fontWeight:600},children:g}),(0,re.jsx)("span",{style:{marginLeft:"auto",fontSize:"0.75rem",color:"var(--graview-ink-faint)"},children:"\u25CF may \xB7 \u25D0 on their own record \xB7 read from the policy"})]}),(0,re.jsx)("div",{"data-scroller":!0,style:{overflowX:"auto"},children:(0,re.jsxs)("table",{style:{borderCollapse:"collapse",fontSize:"0.875rem",minWidth:"100%"},children:[(0,re.jsx)("thead",{children:(0,re.jsxs)("tr",{children:[(0,re.jsx)("th",{scope:"col",style:{textAlign:"left",padding:"4px 10px 6px 0",fontWeight:500,color:"var(--graview-ink-faint)",fontSize:"0.75rem",letterSpacing:"0.12em",textTransform:"uppercase"},children:"Role"}),m.acts.map(f=>(0,re.jsxs)("th",{scope:"col",title:f.kind?`${f.title}, on ${nt(rn(r.schema.tryDefinition(f.kind),f.kind))}`:f.title,style:{textAlign:"left",padding:"4px 10px 6px",fontWeight:500,whiteSpace:"nowrap",color:"var(--graview-ink-muted)",fontSize:"0.8125rem"},children:[f.title,f.kind?(0,re.jsxs)("span",{style:{color:"var(--graview-ink-faint)"},children:[" \xB7 ",f.kind]}):null]},`${f.name}|${f.kind??""}`))]})}),(0,re.jsx)("tbody",{children:m.roles.map(f=>(0,re.jsxs)("tr",{children:[(0,re.jsx)("th",{scope:"row",style:{textAlign:"left",padding:"6px 10px 6px 0",fontWeight:600,whiteSpace:"nowrap",borderTop:"1px solid var(--graview-edge)"},children:f}),m.acts.map(x=>{let s=m.cells.find(l=>l.role===f&&l.act===x.name&&l.kind===x.kind);return(0,re.jsx)("td",{"data-graview-reach":s.may,title:`${f} ${s.may==="yes"?"may":s.may==="self"?"may, on their own record,":"may not"} ${x.title.toLowerCase()}`,style:{padding:"6px 10px",textAlign:"center",borderTop:"1px solid var(--graview-edge)",color:s.may==="no"?"var(--graview-ink-faint)":"var(--graview-accent)",fontSize:s.may==="no"?"0.875rem":"0.8125rem"},children:c(s.may)},`${x.name}|${x.kind??""}`)})]},f))})]})})]})}var fr={name:"reach",requiredRoles:[],View:Zr};var Se=_(De(),1);var Z=_(J(),1),yr=["start","end"];function ea(e,t,{pad:n=45,minimum:r=480}={}){if(e.length===0)return{start:0,end:t};let a=Math.min(...e.map(y=>y.start)),i=Math.max(...e.map(y=>y.end)),d=Math.max(0,a-n),m=Math.min(t,i+n),g=r-(m-d);return g>0&&(d=Math.max(0,d-g/2),m=Math.min(t,d+r)),{start:Math.floor(d),end:Math.ceil(m)}}function na(e){let t=[...e].sort((i,d)=>i.start-d.start||i.end-d.end||i.id.localeCompare(d.id)),n=[],r=t.map(i=>{let d=n.findIndex(m=>m<=i.start);return d===-1?(d=n.length,n.push(i.end)):n[d]=i.end,{...i,lane:d,lanes:1}}),a=Math.max(1,n.length);return r.map(i=>({...i,lanes:a}))}var qn=class extends Error{constructor(t,n){super(`The timeline lens needs ${n.join(" and ")} for "${t}". Add them to the lens bindings: { ${t}: { ${n.map(r=>`${r}: "<field name>"`).join(", ")} } }.`),this.name="TimelineBindingError"}};function wr(e,t,n){let r=Be(t[e.kind],n?.tryDefinition(e.kind));if(!r)return null;let a=e,i=n?.tryDefinition(e.kind)?.fields.shape,d=yr.filter(c=>{let f=r[c];return f?i?!(f in i):!(f in a):!0});if(d.length>0)throw new qn(e.kind,d);let m=Number(a[r.start]??Number.NaN),g=Number(a[r.end]??m);if(!Number.isFinite(m))return null;let y=[];if(r.columns){let c=a[r.columns];Array.isArray(c)&&y.push(...c.map(String))}if(r.column){let c=a[r.column];c!=null&&y.push(String(c))}return{id:e.id,kind:e.kind,label:he(n?.tryDefinition(e.kind),e),columnIds:y,start:m,end:Number.isFinite(g)?Math.max(g,m):m}}function ta(e,t){let n=Math.round(t),r=a=>`linear-gradient(hsl(${n} 55% var(--graview-tint-lightness) / ${a}), hsl(${n} 55% var(--graview-tint-lightness) / ${a})), var(--graview-panel)`;return e==="lit"?{border:"1px solid var(--graview-accent)",background:r("calc(var(--graview-tint-alpha) * 1.15)"),color:"var(--graview-ink)",boxShadow:"0 0 16px -4px var(--graview-accent)"}:e==="dimmed"?{border:"1px solid var(--graview-edge)",background:r("calc(var(--graview-tint-alpha) * 0.25)"),color:"var(--graview-ink-muted)"}:{border:`1px solid hsl(${n} 50% var(--graview-tint-lightness) / 0.42)`,background:r("var(--graview-tint-alpha)"),color:"var(--graview-ink)"}}var ra=.045,en=52,vr=4,aa=44,ia=240;function oa({nodes:e,label:t,fidelity:n,mode:r,options:a,schema:i,selectedIds:d=[],implicated:m=[],flagged:g=[]}){let y=new Set([...m,...d]),c=S=>y.size===0?"plain":y.has(S)?"lit":"dimmed",f=new Set(g),x=(e??[]).map(S=>wr(S,a.bindings,i)).filter(S=>S!==null),s=a.hueOf??(S=>de(S.kind));if(n==="glyph")return(0,Z.jsx)(ye,{label:`${t??"Timeline"} \xB7 ${x.length}`,hue:de("timeline")});if(n==="summary")return(0,Z.jsx)(te,{title:t??"Timeline",meta:`${x.length} items`,tone:"muted",children:(0,Z.jsx)(Ee,{max:a.columns.length,items:a.columns.map(S=>({id:S.id,label:`${S.label} ${x.filter(k=>k.columnIds.includes(S.id)).length}`,hue:de(S.id)}))})});let l=a.format??String,h=ea(x,a.extent,{...a.minWindow===void 0?{}:{minimum:a.minWindow}}),o=h.end-h.start,b=S=>(S-h.start)/o*100,C=a.tick??Math.max(60,Math.round(o/8/60)*60),R=[];for(let S=Math.ceil(h.start/C)*C;S<=h.end;S+=C)R.push(S);let A=r==="fullscreen";return(0,Z.jsx)(te,{title:t??"Timeline",meta:`${l(h.start)} \u2013 ${l(h.end)}`,style:{gap:12,...A?{flex:"1 1 auto",minHeight:0,height:"100%"}:{}},children:(0,Z.jsxs)("div",{style:{display:"flex",flexDirection:"column",height:"100%",minHeight:0},children:[(0,Z.jsx)(da,{columns:a.columns}),(0,Z.jsxs)("div",{"data-graview-timeline-grid":"",style:{position:"relative",flex:1,minHeight:Math.max(ia,Math.ceil(o/C)*aa)},children:[R.map((S,k)=>(0,Z.jsx)("div",{style:{position:"absolute",left:en-8,right:0,top:k===R.length-1?"calc(100% - 1px)":`${b(S)}%`,height:1,background:"var(--graview-edge)"},children:(0,Z.jsx)("span",{style:{position:"absolute",left:-(en-8),...k===R.length-1?{bottom:2}:{top:-7},width:en-16,textAlign:"right",fontSize:"0.75rem",letterSpacing:"0.06em",color:"var(--graview-ink-faint)"},children:l(S)})},S)),(0,Z.jsx)("div",{style:{position:"absolute",inset:0,left:en,display:"flex",gap:vr},children:a.columns.map(S=>(0,Z.jsx)(ca,{spans:x.filter(k=>k.columnIds.includes(S.id)),window:h,format:l,hue:s,emphasisOf:c,brokenIds:f},S.id))})]})]})})}function sa(){let e=(0,Se.useRef)(null),[t,n]=(0,Se.useState)(new Set);return(0,Se.useLayoutEffect)(()=>{let r=e.current;if(!r)return;let a=[...r.querySelectorAll("[data-graview-span-name]")].filter(i=>i.scrollWidth>i.clientWidth+.5).map(i=>i.getAttribute("data-graview-span-name")).filter(i=>!t.has(i));a.length>0&&n(new Set([...t,...a]))}),(0,Se.useLayoutEffect)(()=>{let r=e.current;if(!r||typeof ResizeObserver>"u")return;let a=Math.round(r.clientWidth),i=new ResizeObserver(()=>{let d=Math.round(r.clientWidth);d!==a&&(a=d,n(new Set))});return i.observe(r),()=>i.disconnect()},[]),{column:e,oneLine:t}}var la=(e,t)=>t===0?e:e.slice(0,t),hr=[0,3,1];function da({columns:e}){let t=(0,Se.useRef)(null),[n,r]=(0,Se.useState)(0);(0,Se.useLayoutEffect)(()=>{let i=t.current;if(!i)return;[...i.children].some(m=>m.scrollWidth>m.clientWidth+.5)&&n<hr.length-1&&r(n+1)}),(0,Se.useLayoutEffect)(()=>{let i=t.current;if(!i||typeof ResizeObserver>"u")return;let d=i.clientWidth,m=new ResizeObserver(()=>{i.clientWidth!==d&&(d=i.clientWidth,r(0))});return m.observe(i),()=>m.disconnect()},[]);let a=hr[n];return(0,Z.jsx)("div",{ref:t,style:{display:"flex",gap:vr,paddingLeft:en,paddingBottom:10},children:e.map(i=>{let d=la(i.label,a);return(0,Z.jsx)("div",{"data-graview-day-head":i.id,title:d===i.label?void 0:i.label,...d===i.label?{}:{"aria-label":i.label},style:{flex:1,minWidth:0,overflow:"hidden",whiteSpace:"nowrap",fontSize:"0.75rem",letterSpacing:a===1?0:"0.18em",textTransform:"uppercase",textAlign:"center",color:"var(--graview-ink-muted)"},children:d},i.id)})})}function ca({spans:e,window:t,format:n,hue:r,emphasisOf:a,brokenIds:i}){let d=t.end-t.start,m=s=>(s-t.start)/d*100,g=s=>(s.end-s.start)/d<ra,y=na(e.filter(s=>!g(s))),c=[...e.filter(g)].sort((s,l)=>s.start-l.start),f=Math.max(1,...y.map(s=>s.lanes)),x=sa();return(0,Z.jsxs)("div",{ref:x.column,"data-graview-day-column":"",style:{position:"relative",flex:1,minWidth:0},children:[y.map(s=>{let l=100/f,h=Math.max(1.6,m(s.end)-m(s.start));return(0,Z.jsx)("div",{"data-graview-span":s.id,"data-graview-pick":s.id,"data-graview-emphasis":a(s.id),"data-graview-flagged":i.has(s.id)?"":void 0,title:`${s.label} \xB7 ${n(s.start)}\u2013${n(s.end)}`,style:{position:"absolute",top:`${m(s.start)}%`,height:`${h}%`,left:`${s.lane*l}%`,width:`${l}%`,padding:"0 2px 2px 0",boxSizing:"border-box"},children:(0,Z.jsx)("div",{"data-graview-span-name":s.id,style:{height:"100%",minHeight:15,borderRadius:6,padding:"3px 6px",fontSize:"0.75rem",lineHeight:1.25,overflow:"hidden",overflowWrap:"normal",wordBreak:"normal",...x.oneLine.has(s.id)?{display:"block",whiteSpace:"nowrap",textOverflow:"ellipsis"}:{display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical"},...ta(a(s.id),r(s)),...i.has(s.id)?{borderLeft:"3px solid var(--graview-warn)",paddingLeft:4}:{}},children:h>=3.4?s.label:null})},s.id)}),c.map(s=>{let l=a(s.id);return(0,Z.jsxs)("div",{"data-graview-span":s.id,"data-graview-pick":s.id,"data-graview-emphasis":l,"data-graview-moment":"",title:`${s.label} \xB7 ${n(s.start)}`,style:{position:"absolute",top:`${m(s.start)}%`,right:0,maxWidth:"100%",boxSizing:"border-box",transform:"translateY(-50%)",display:"flex",alignItems:"center",justifyContent:"flex-end",gap:5,minHeight:24,padding:"0 4px 0 8px",borderRadius:999,background:"linear-gradient(90deg, transparent, var(--graview-ground) 35%)"},children:[(0,Z.jsx)("span",{style:{fontSize:"0.6875rem",letterSpacing:"0.04em",whiteSpace:"nowrap",color:l==="lit"?"var(--graview-accent)":"var(--graview-ink-faint)"},children:n(s.start)}),(0,Z.jsx)("span",{style:{fontSize:"0.75rem",minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",color:l==="dimmed"?"var(--graview-ink-faint)":"var(--graview-ink)"},children:s.label}),(0,Z.jsx)("span",{style:{width:7,height:7,borderRadius:999,flex:"0 0 auto",background:i.has(s.id)?"var(--graview-warn)":l==="dimmed"?"var(--graview-edge)":`hsl(${Math.round(r(s))} 60% var(--graview-tint-lightness))`,boxShadow:i.has(s.id)?"0 0 0 3px var(--graview-warn)":l==="lit"?"0 0 0 3px var(--graview-accent-dim)":l==="dimmed"?void 0:`0 0 8px hsl(${Math.round(r(s))} 60% var(--graview-tint-lightness) / 0.45)`}})]},s.id)})]})}function br(e){function t(n){let{store:r}=X(),a=Object.keys(e.bindings),{nodes:i,bar:d}=Pe(n,{...e.arranging!==void 0?{allow:e.arranging}:{},lensAllows:{group:!1},...e.arrangedBy?{arrangedBy:e.arrangedBy}:{},...a[0]?{kind:(n.nodes??[]).find(g=>a.includes(String(g.kind)))?.kind??a[0]}:{}}),m=(0,Z.jsx)(oa,{schema:r.schema,...n,nodes:i,options:e});return Me(n,r.schema,d?(0,Z.jsxs)("div",{style:{display:"grid",gap:6,height:"100%",minHeight:0,gridTemplateRows:"auto 1fr"},children:[d,m]}):m)}return{name:"timeline",requiredRoles:[...yr],bindings:e.bindings,options:e,View:t,place(n,r){return n.map(a=>wr(a,e.bindings,r)).filter(a=>a!==null)}}}var qe=_(J(),1),xr=new WeakMap;function ga(e){return e===1440?t=>Ke(Math.floor(t/60)*60+Math.round(t%60)):e===24?t=>Ke(Math.floor(t)*60):t=>String(t)}function ua(e){let t=e.options;switch(e.lens){case"timeline":{let n=typeof t.extent=="number"?t.extent:1440;return br({...t,extent:n,format:ga(n)}).View}case"calendar":return Xt({...t,...typeof t.today=="string"?{today:t.today}:{}}).View;case"coverage":return or(t).View;case"board":return Dt(t).View;case"plan":return mr(t).View;case"reach":return fr.View;case"columns":return Zt(t).View;case"blocks":return ma(ut(Array.isArray(t.blocks)?t.blocks:[]),e.as)}}function ma(e,t){return n=>{let r=(0,qe.jsx)(Lt,{blocks:e,slot:"place",view:t,heading:n.mode==="fullscreen"?2:3});return n.fidelity==="glyph"?(0,qe.jsx)("span",{className:"graview-spec-title",children:n.label}):n.mode==="fullscreen"?(0,qe.jsx)("div",{style:{padding:"14px 16px"},children:r}):(0,qe.jsx)(te,{title:n.label??"",children:r})}}function uo(e){let t=xr.get(e);if(!t){let n=ua(e),r=a=>(0,qe.jsx)(n,{...a,label:e.title});xr.set(e,t=r)}return t}export{ga as a,uo as b};
|
|
25
|
+
`;function nr(e){function t(n){let{store:r}=X();gt();let a=Object.keys(e.bindings).filter(l=>r.schema.tryDefinition(l)!==void 0),i=n.nodes??[],d=new Set(i.map(l=>String(l.kind))),m=l=>r.graph.nodesOfKind(l).filter(h=>We(r.schema.tryDefinition(l),h)),g=n.total!==void 0&&n.total>i.length,y=a.map(l=>{let h=e.bindings[l].column,o=Rt(r.schema,l,h),b=(A,S)=>S==="label"?he(r.schema.tryDefinition(A.kind),A):A[S],C=Ye(d.has(l)?i.filter(A=>A.kind===l):m(l).slice(0,n.budget??1/0),e.sort,b),R=d.has(l)&&!g?C:m(l);return{kind:l,field:h,columns:o.map(A=>({column:A,cards:C.filter(S=>Ln(S,h,o)===A.value),count:R.filter(S=>Ln(S,h,o)===A.value).length})).filter(A=>A.column.value!==null||A.count>0)}}),c=y.reduce((l,h)=>l+h.columns.reduce((o,b)=>o+b.count,0),0),f=n.label??"Board",x=a[0];if(n.fidelity==="glyph")return(0,I.jsx)(ye,{label:`${f} \xB7 ${c}`,hue:de("columns")});if(n.fidelity==="summary")return(0,I.jsx)(te,{title:f,meta:x?Ie(r.schema,x,c):String(c),tone:"muted",children:(0,I.jsx)("p",{style:{margin:0,fontSize:"0.8125rem",color:"var(--graview-ink-muted)"},"data-testid":"columns-summary",children:y.flatMap(l=>l.columns.map(h=>`${h.column.label} ${h.count}`)).join(" \xB7 ")})});let s=(0,I.jsx)(Dr,{boards:y,title:f});return Me(n,r.schema,n.mode==="fullscreen"?(0,I.jsx)("div",{style:{padding:"14px 16px"},children:s}):(0,I.jsx)(te,{title:f,meta:x?Ie(r.schema,x,c):void 0,children:s}))}return{name:"columns",requiredRoles:["column"],bindings:e.bindings,View:t}}function Dr({boards:e,title:t}){let{store:n,principal:r}=X(),a=(0,ce.useRef)(null),[i,d]=(0,ce.useState)(null),[m,g]=(0,ce.useState)(null),[y,c]=(0,ce.useState)(null),[f,x]=(0,ce.useState)(null);(0,ce.useLayoutEffect)(()=>{if(!f)return;a.current?.querySelector(f)?.focus(),x(null)});let s=S=>{let k=n.graph.getNode(S);return k?he(n.schema.tryDefinition(k.kind),k):S},l=(0,ce.useMemo)(()=>e.flatMap(S=>S.columns.flatMap(k=>k.cards.map(u=>u.id))),[e]),h=Et(l),o=(0,ce.useMemo)(()=>n.permittedMutations(r).some(S=>{let k=S.subject?.kinds;return k!==void 0&&(k==="*"||e.some(u=>k.includes(u.kind)))}),[n,r,e]),b=S=>{h.choose(S),requestAnimationFrame(()=>{((S[0]===void 0?null:a.current?.querySelector(`[data-graview-choose-box="${Gn(S[0])}"]`))??a.current)?.focus({preventScroll:!0})})},C=(S,k)=>At(n,r,S,k.field,k.columns.map(u=>u.column)),R=(S,k,u,E)=>{try{let M=n.apply(k.call,{author:r});d({text:`Moved \u201C${s(S)}\u201D to ${u}.`,tone:"moved",batch:M.batch,id:S}),E==="keyboard"&&x(`[data-columns-move="${Gn(S)}"] > button`)}catch(M){d({text:M instanceof Error?M.message:String(M),tone:"refused"})}},A=()=>{if(i?.batch)try{n.undo(i.batch,{author:r}),d({text:`\u201C${s(i.id??"")}\u201D is back where it was.`,tone:"moved"}),i.id&&x(`[data-columns-move="${Gn(i.id)}"] > button`)}catch(S){d({text:S instanceof Error?S.message:String(S),tone:"refused"})}};return(0,I.jsxs)("div",{"data-testid":"columns-lens",...o?{...h.listProps,tabIndex:-1,role:"group","aria-label":h.chosen.length>0?`${t}, ${h.chosen.length} chosen`:t,"data-graview-choosable":""}:{},ref:S=>{a.current=S,h.list.current=S},children:[(0,I.jsx)("style",{children:Nr}),o?(0,I.jsx)("style",{children:Mt}):null,(0,I.jsxs)("p",{className:"graview-columns-said",role:"status","data-tone":i?.tone,"data-testid":"columns-said",style:i?void 0:{position:"absolute",width:1,height:1,overflow:"hidden",clipPath:"inset(50%)"},children:[i?(0,I.jsx)("span",{children:i.text}):null,i?.batch?(0,I.jsx)("button",{type:"button","data-testid":"columns-undo",onClick:A,children:"Undo"}):null]}),e.map(S=>(0,I.jsx)("section",{"data-columns-kind":S.kind,"aria-label":`${tt(n.schema,S.kind)} by ${S.field}`,children:(0,I.jsx)("div",{className:"graview-columns",children:S.columns.map(({column:k,cards:u,count:E})=>{let M=k.value??"",B=m!==null&&k.value!==null&&m.to.includes(k.value);return(0,I.jsxs)("section",{className:"graview-columns-column","data-graview-column":M,"data-droppable":B||void 0,"data-over":B&&y===M||void 0,"aria-label":`${t} \xB7 ${k.label}, ${E}`,"data-graview-named-by-lens":"",onDragOver:w=>{B&&(w.preventDefault(),w.dataTransfer.dropEffect="move",c(M))},onDragLeave:()=>c(w=>w===M?null:w),onDrop:w=>{let W=w.dataTransfer.getData("text/graview-node"),P=n.graph.getNode(W);if(c(null),g(null),!P||k.value===null)return;let U=C(P,S).find(ne=>ne.to===k.value);U&&(w.preventDefault(),w.stopPropagation(),R(W,U,k.label,"drag"))},children:[(0,I.jsxs)("h3",{className:"graview-columns-heading",children:[(0,I.jsx)("span",{children:k.label}),(0,I.jsx)("span",{className:"graview-columns-count","data-testid":"columns-count",children:E})]}),u.length===0?(0,I.jsx)("p",{className:"graview-columns-empty",children:"Nothing here."}):(0,I.jsx)("ul",{className:"graview-columns-cards",children:(0,I.jsx)(Lt.Provider,{value:k.value===null?null:{field:S.field,values:[k.value,k.label]},children:u.map(w=>{let W=C(w,S);return(0,I.jsx)(zr,{card:w,moves:W,...o?{choosing:h}:{},labelOf:P=>S.columns.find(U=>U.column.value===P)?.column.label??P,onMove:(P,U)=>R(w.id,P,U,"keyboard"),onDrag:P=>g(P?{id:w.id,to:W.map(U=>U.to)}:null)},w.id)})})})]},M)})})},S.kind)),o?(0,I.jsx)(Pt,{store:n,chosen:h.chosen,principal:r,anchor:()=>a.current?.closest('[data-testid="kind-stop"], [data-embed-content]')??null,of:l.length,onChooseAll:()=>h.choose(l),onClear:h.clear,onActed:b}):null]})}var Gn=e=>typeof globalThis.CSS?.escape=="function"?globalThis.CSS.escape(e):e.replace(/["\\]/g,"\\$&");function zr({card:e,moves:t,labelOf:n,onMove:r,onDrag:a,choosing:i}){let{store:d,views:m}=X(),[g,y]=(0,ce.useState)(!1),c=(0,ce.useRef)(null),f=(0,ce.useRef)(null),x=he(d.schema.tryDefinition(e.kind),e),s=m.lookup(e.kind,{cardinality:"one",fidelity:"summary"});(0,ce.useLayoutEffect)(()=>{g&&c.current?.querySelector("button")?.focus()},[g]);let l=()=>{y(!1),f.current?.focus()},h=o=>{let b=[...c.current?.querySelectorAll("button")??[]],C=b.indexOf(document.activeElement);o.key==="Escape"?(o.preventDefault(),o.stopPropagation(),l()):(o.key==="ArrowDown"||o.key==="ArrowUp")&&(o.preventDefault(),o.stopPropagation(),b[(C+(o.key==="ArrowDown"?1:b.length-1))%b.length]?.focus())};return(0,I.jsxs)("li",{className:"graview-spec-item graview-columns-card","data-graview-listed":e.id,"data-as":"card",...i?{"data-graview-choose":e.id}:{},draggable:t.length>0||void 0,onDragStart:o=>{t.length!==0&&(o.dataTransfer.setData("text/graview-node",e.id),o.dataTransfer.effectAllowed="move",a(!0))},onDragEnd:()=>a(!1),children:[(0,I.jsx)(Tt,{node:e,label:x}),s?(0,I.jsx)(ct,{mode:"scene",children:(0,I.jsx)(mt.Provider,{value:x,children:(0,I.jsx)(s,{node:e,cardinality:"one",fidelity:"summary",mode:"scene",selected:!1})})}):(0,I.jsx)("span",{className:"graview-spec-item-name","aria-hidden":"true",children:x}),i?(0,I.jsx)("span",{className:"graview-choose-at",children:(0,I.jsx)("input",{...i.boxProps(e.id,x),onPointerEnter:Tn,onFocus:Tn})}):null,t.length>0?(0,I.jsxs)("div",{className:"graview-columns-move","data-columns-move":e.id,"data-open":g||void 0,onBlur:o=>{o.currentTarget.contains(o.relatedTarget)||y(!1)},children:[(0,I.jsx)("button",{ref:f,type:"button","aria-haspopup":"menu","aria-expanded":g,"aria-label":`Move \u201C${x}\u201D to another column`,"data-testid":"columns-move",onClick:()=>y(o=>!o),children:"Move\u2026"}),g?(0,I.jsx)("div",{ref:c,role:"menu","aria-label":`Move \u201C${x}\u201D to`,className:"graview-columns-menu",onKeyDown:h,onMouseDown:o=>o.preventDefault(),children:t.map(o=>(0,I.jsx)("button",{type:"button",role:"menuitem","data-columns-to":o.to,title:o.title,onClick:()=>{y(!1),r(o,n(o.to))},children:n(o.to)},o.to))}):null]}):null]})}var be=_(De(),1);var z=_(J(),1),Br=["rows","columns","link"],Xe=class extends Error{constructor(n,r){super(`${n}
|
|
26
|
+
${r}`);this.hint=r;this.name="CoverageBindingError"}},jn=(e,t)=>t&&e[t]!==void 0?String(e[t]):"",Wr=40,Ir=24;function Vr(e,t={}){let n=t.rows??Wr,r=t.columns??Ir;if(e.rows.length<=n&&e.columns.length<=r)return e;let a=new Map;for(let c of e.cells)a.set(c.rowId,(a.get(c.rowId)??0)+1),a.set(`col:${c.columnId}`,(a.get(`col:${c.columnId}`)??0)+1);let i=(c,f,x)=>{if(c.length<=f)return c;let s=new Set(c.map((l,h)=>({item:l,index:h,count:a.get(x(l))??0})).sort((l,h)=>h.count-l.count||l.index-h.index).slice(0,f).map(l=>l.item.id));return c.filter(l=>s.has(l.id))},d=i(e.rows,n,c=>c.id),m=i(e.columns,r,c=>`col:${c.id}`),g=new Set(d.map(c=>c.id)),y=new Set(m.map(c=>c.id));return{...e,rows:d,columns:m,cells:e.cells.filter(c=>g.has(c.rowId)&&y.has(c.columnId)),of:{rows:e.rows.length,columns:e.columns.length}}}function or(e,t,n,r){let a=u=>u,i=u=>r?he(r.tryDefinition(u.kind),u):String(a(u).label??u.id),d=r?[n.rows,n.columns].filter(u=>r.tryDefinition(u)===void 0):[];if(d.length>0)throw new Xe(`No kind is declared for ${d.map(u=>`"${u}"`).join(" or ")}.`,'Check the lens bindings: { rows: "<kind>", columns: "<kind>", link: "<edge kind>" }');if(r&&typeof n.link!="string"){let u=$n(r,n.columns,n.link.path);if(!u.ok||!u.reached.has(n.rows)){let E=$n(r,n.columns,[...n.link.path].reverse());throw new Xe(E.ok&&E.reached.has(n.rows)?`The path runs from the ${n.rows} to the ${n.columns}; it is walked from the columns.`:`The path [${n.link.path.join(", ")}] cannot get from a ${n.columns} to a ${n.rows}.`,`Name it column end first: link: { path: [${[...n.link.path].reverse().map(M=>JSON.stringify(M)).join(", ")}] }`)}}let m=e.filter(u=>u.kind===n.rows),g=e.filter(u=>u.kind===n.columns);if(!r&&m.length===0&&g.length===0)throw new Xe(`Nothing to lay out: no "${n.rows}" and no "${n.columns}" nodes.`,'Check the lens bindings: { rows: "<kind>", columns: "<kind>", link: "<edge kind>" }');let y=n.groupOrder??[],c=u=>{let E=y.indexOf(u);return E===-1?y.length:E},f=n.badge?t.filter(u=>u.kind===n.badge.edge):[],x=new Set(m.map(u=>u.id)),s=new Set(g.map(u=>u.id)),l=[];if(typeof n.link=="string"){let u=n.link,E=t.filter(P=>P.kind===u),M=P=>r?.tryDefinition?.(P)?.edges?.[u]?.to,B=(M(n.columns)??[]).some(P=>P===n.rows||P==="*"),w=(M(n.rows)??[]).some(P=>P===n.columns||P==="*"),W=B||!w;for(let P of E){let U=W?P.to:P.from,ne=W?P.from:P.to;x.has(U)&&s.has(ne)&&l.push({rowId:U,columnId:ne})}}else{let u=new Map;for(let M of new Set(n.link.path))u.set(M,new Map);for(let M of t){let B=u.get(M.kind);if(!B)continue;let w=B.get(M.from);w?w.push(M.to):B.set(M.from,[M.to]);let W=B.get(M.to);W?W.push(M.from):B.set(M.to,[M.from])}let E=new Set;for(let M of g){let B=[{id:M.id,via:[]}];for(let w of n.link.path){let W=[],P=new Set,U=u.get(w);for(let ne of B)for(let ae of U.get(ne.id)??[])P.has(`${ne.id}|${ae}`)||(P.add(`${ne.id}|${ae}`),W.push({id:ae,via:[...ne.via,ne.id]}));B=W}for(let w of B){if(!x.has(w.id))continue;let W=`${w.id}|${M.id}`;E.has(W)||(E.add(W),l.push({rowId:w.id,columnId:M.id,via:w.via.slice(1)}))}}}let h=new Set(n.requiredGroups??[]),o=n.requiredVia?new Set(t.filter(u=>u.kind===n.requiredVia.edge).map(u=>u.to)):null,b=new Set(l.map(u=>u.rowId)),C=new Set(l.map(u=>u.columnId)),R=new Set(f.map(u=>u.to)),A=(u,E)=>E==="label"?i(u):a(u)[E],S=Ye(m,n.sort,A).map(u=>{let E=a(u),M=jn(E,n.rowGroup);return{id:u.id,ref:jn(E,n.rowRef),label:i(u),group:M,required:o?o.has(u.id):h.size===0||h.has(M),covered:b.has(u.id),badged:R.has(u.id)}}).sort((u,E)=>c(u.group)-c(E.group)||(n.sort!==void 0?0:u.ref<E.ref?-1:u.ref>E.ref?1:0)),k=Ye(g,n.columnSort,A).map(u=>({id:u.id,label:i(u),used:C.has(u.id),group:jn(a(u),n.columnGroup)})).sort((u,E)=>u.group<E.group?-1:u.group>E.group?1:n.columnSort!==void 0?0:u.id<E.id?-1:u.id>E.id?1:0).map(({group:u,...E})=>E);return{rows:S,columns:k,cells:l,gaps:S.filter(u=>u.required&&!u.covered).map(u=>u.id),unasked:k.filter(u=>!u.used).map(u=>u.id)}}var tr=316,_n=58,Fn=176,Hr=Math.sin(_n*Math.PI/180),Gr=Math.cos(_n*Math.PI/180),jr=e=>{let t=e.reduce((r,a)=>Math.max(r,a.length),0),n=Math.min(Fn,Math.max(46,t*5.4+12));return Math.ceil(n*Hr)+8},rr=Math.ceil(Fn*Gr),ar=(e,t)=>tn(e,t).toLowerCase(),sr=(e,t)=>rn(e.tryDefinition(t),t);function _r(e,t,n){return t.rows===t.columns?`${e} with none across`:`${Ie(n,t.rows,e)} with no ${sr(n,t.columns)}`}function Fr(e,t,n){return t.rows===t.columns?`${e} with none down`:`${Ie(n,t.columns,e)} on no ${sr(n,t.rows)}`}function qr({nodes:e,label:t,fidelity:n,mode:r,options:a,schema:i,implicated:d=[],flagged:m=[],budget:g,rowsKept:y}){let{store:c}=X(),f=Xr(),x=(0,be.useRef)(null),s=Ve(x),[l,h]=(0,be.useState)(null),o=or(He(c.graph,c.schema,e).filter(w=>w.kind===a.rows||w.kind===a.columns).filter(w=>y===void 0||a.rows===a.columns||w.kind!==a.rows||y.has(w.id)),c.graph.allEdges(),a,i),b=n==="full"?Vr(o,g!==void 0?{rows:g,columns:g}:{}):o,C=typeof a.link=="string"?a.link:void 0,R=y!==void 0&&o.cells.length===0&&o.columns.length>0&&(C===void 0||c.graph.allEdges().some(w=>w.kind===C))?void 0:dt(c.schema,a,{rows:o.rows.length,columns:o.columns.length,cells:o.cells.length});if(n==="glyph")return(0,z.jsx)(ye,{label:`${t??"Coverage"} \xB7 ${R?"nothing linked":b.gaps.length===0?"complete":`${b.gaps.length} missing`}`,hue:de("coverage")});if(R)return(0,z.jsx)(te,{title:t??"Coverage",tone:"muted",fit:!0,...r==="fullscreen"?{style:{flex:"1 1 auto",minHeight:0,height:"100%"}}:{},children:(0,z.jsx)("p",{"data-coverage-unlinked":"",style:{margin:0,color:"var(--graview-ink-muted)"},children:R})});if(n==="summary"){let w=b.rows.filter(W=>b.gaps.includes(W.id));return(0,z.jsxs)(te,{title:t??"Coverage",meta:`${b.rows.length-b.gaps.length}/${b.rows.length}`,tone:b.gaps.length>0?"warning":"muted",fit:!0,children:[(0,z.jsx)(Jr,{grid:b}),w.length>0?(0,z.jsx)(Ee,{pick:!0,max:4,items:w.map(W=>({id:W.id,label:W.ref||W.label}))}):null]})}let A=new Set(d),S=new Set(m),k=l!==null&&l.every(w=>A.has(w))?l:null,u=r==="fullscreen",E=jr(b.columns.map(w=>w.label)),M=s===null?tr:Math.max(96,Math.min(tr,Math.round(s*.36))),B=s!==null&&(s<420||M+b.columns.length*28+rr>s);return(0,z.jsx)(te,{title:t??"Coverage",...u?{style:{flex:"1 1 auto",minHeight:0,height:"100%"}}:{},meta:b.rows.length===0||b.columns.length===0?void 0:b.gaps.length===0&&b.unasked.length===0?"complete":[b.gaps.length>0?_r(b.gaps.length,a,c.schema):"",b.unasked.length>0?Fr(b.unasked.length,a,c.schema):""].filter(Boolean).join(" \xB7 "),selected:!1,fit:!0,children:(0,z.jsxs)("div",{ref:x,"data-coverage-shape":B?"stacked":"matrix",onClick:w=>h(ir(w.target)),onKeyDown:w=>{(w.key==="Enter"||w.key===" ")&&h(ir(w.target))},style:{position:"relative",display:"flex",flexDirection:"column",flex:"1 1 auto",minHeight:0,paddingRight:B?0:rr},children:[B?null:(0,z.jsxs)("div",{style:{display:"flex",alignItems:"flex-end",flex:"0 0 auto",position:"sticky",top:0,zIndex:Ce.over,background:"var(--graview-panel)",paddingTop:6},children:[(0,z.jsx)("div",{ref:f.corner,style:{width:M,flex:"0 0 auto",alignSelf:"stretch",position:"sticky",left:0,zIndex:Ce.raised,background:"var(--graview-panel)"}}),(0,z.jsx)("div",{ref:f.heads,style:{display:"flex",flex:1,minWidth:0,height:E},children:b.columns.map(w=>(0,z.jsx)("div",{"data-graview-pick":w.id,"data-graview-emphasis":A.size===0?"plain":A.has(w.id)?"lit":"dimmed",title:w.label,"data-graview-column":w.id,style:{flex:1,minWidth:28,boxSizing:"border-box",borderLeft:"1px solid transparent",pointerEvents:"none",position:"relative",display:"flex",alignItems:"flex-end",justifyContent:"center"},children:(0,z.jsxs)("span",{style:{position:"absolute",bottom:3,padding:"3px 0",pointerEvents:"auto",cursor:"pointer",left:"50%",visibility:f.hidden.has(w.id)?"hidden":"visible",transformOrigin:"left bottom",transform:`rotate(-${_n}deg)`,whiteSpace:"nowrap",maxWidth:Fn,overflow:"hidden",textOverflow:"ellipsis",fontSize:"0.75rem",letterSpacing:"0.005em",color:w.used?A.size>0&&!A.has(w.id)?"var(--graview-ink-faint)":"var(--graview-ink)":"var(--graview-warn)"},children:[w.used?"":"\u26A0 ",w.label]})},w.id))})]}),b.of?(0,z.jsxs)("p",{"data-testid":"coverage-more",style:{margin:"4px 0 6px",fontSize:"0.8125rem",color:"var(--graview-ink-muted)"},children:[[b.of.rows>b.rows.length?`the ${b.rows.length} most connected of ${b.of.rows} ${ar(c.schema,a.rows)}`:null,b.of.columns>b.columns.length?`${b.columns.length} of ${b.of.columns} ${ar(c.schema,a.columns)} across`:null].filter(Boolean).join(" \xB7 ").replace(/^./,w=>w.toUpperCase())," ","\u2014 what is missing is still counted over all of them."]}):null,(0,z.jsx)("div",{children:b.rows.map((w,W)=>{let P=b.rows[W-1],U=P===void 0||P.group!==w.group,ne=w.required&&!w.covered,ae=A.size>0&&!A.has(w.id);return(0,z.jsxs)("div",{children:[U&&w.group?(0,z.jsx)("div",{style:{fontSize:"0.6875rem",letterSpacing:"0.16em",textTransform:"uppercase",color:"var(--graview-ink-faint)",padding:"9px 0 3px"},children:(0,z.jsx)("span",{style:{position:"sticky",left:0,display:"inline-block",paddingRight:8,background:"var(--graview-panel)"},children:w.group})}):null,(0,z.jsxs)("div",{style:{display:"flex",flexDirection:B?"column":"row",alignItems:"stretch",borderTop:"1px solid var(--graview-edge)",opacity:ae?.72:1},children:[(0,z.jsxs)("div",{"data-graview-pick":w.id,"data-graview-emphasis":A.size===0?"plain":ae?"dimmed":"lit",title:w.label,style:{width:B?"auto":M,flex:"0 0 auto",position:B?"static":"sticky",left:0,zIndex:Ce.raised,background:"var(--graview-panel)",display:"flex",alignItems:"center",gap:7,padding:"6px 10px 6px 0",boxSizing:"border-box",fontSize:"0.8125rem",minWidth:0,color:ne||S.has(w.id)?"var(--graview-warn)":"var(--graview-ink)"},children:[w.ref?(0,z.jsx)("span",{style:{flex:"0 0 auto",fontVariantNumeric:"tabular-nums",color:"var(--graview-ink-faint)"},children:w.ref}):null,(0,z.jsx)("span",{style:{minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:w.label}),a.badge?(0,z.jsx)("span",{title:w.badged?a.badge.title:a.badge.missingTitle,style:{marginLeft:"auto",flex:"0 0 auto",fontSize:"0.75rem",color:w.badged?"var(--graview-ink-faint)":"var(--graview-warn)"},children:w.badged?a.badge.symbol:"\u25CB"}):null]}),(0,z.jsx)("div",{style:{display:"flex",flex:1,minWidth:0,...B?{flexWrap:"wrap",gap:6,padding:"0 0 8px"}:{}},children:b.columns.map(ee=>{let ge=b.cells.find(T=>T.rowId===w.id&&T.columnId===ee.id),pe=ge!==void 0;return(0,z.jsxs)("div",{"data-graview-mark":"",...pe?{"data-graview-pick":ee.id,"data-graview-emphasis":A.size===0?"plain":A.has(ee.id)&&A.has(w.id)?"lit":"dimmed","data-graview-joins":JSON.stringify(Ur(ge))}:{},title:pe?`${ee.label} answers ${w.ref||w.label}`:`${ee.label} does not answer ${w.ref||w.label}`,style:B?{flex:"0 0 auto",minHeight:24,boxSizing:"border-box",display:"inline-flex",alignItems:"center",gap:6,padding:"2px 9px 2px 7px",borderRadius:6,border:"1px solid var(--graview-edge)",fontSize:"0.75rem",color:pe?"var(--graview-ink)":"var(--graview-ink-faint)"}:{flex:1,minWidth:28,boxSizing:"border-box",display:"flex",alignItems:"center",justifyContent:"center",borderLeft:"1px solid var(--graview-edge)"},children:[(0,z.jsx)("span",{style:Qr(pe,ne,A.has(ee.id)&&A.has(w.id),A.size>0)}),B?(0,z.jsx)("span",{children:ee.label}):null]},ee.id)})})]})]},w.id)})}),k?(0,z.jsx)(Yr,{box:x,joins:k,shape:`${B?"stacked":"matrix"} ${s??""}`}):null]})})}var Ur=e=>[e.rowId,e.columnId,...e.via??[]];function ir(e){let t=e?.closest?.("[data-graview-joins]")?.getAttribute("data-graview-joins");if(!t)return null;try{let n=JSON.parse(t);return Array.isArray(n)&&n.every(r=>typeof r=="string")?n:null}catch{return null}}var fn=(e,t,n)=>Math.min(n,Math.max(t,e));function Kr(e){let t=e.getBoundingClientRect(),n=typeof document.createRange=="function"?document.createRange():null;n?.selectNodeContents(e);let r=typeof n?.getBoundingClientRect=="function"?n.getBoundingClientRect():null;return r&&r.width>0&&r.height>0?r:t}function Yr({box:e,joins:t,shape:n}){let[r,a]=(0,be.useState)([]),i=JSON.stringify(t);return(0,be.useLayoutEffect)(()=>{let d=e.current;if(!d||typeof window>"u")return;let m=()=>{let c=d.getBoundingClientRect(),f=d.offsetWidth>0&&c.width>0?c.width/d.offsetWidth:1,x=[...d.querySelectorAll("[data-graview-joins]")].find(h=>h.getAttribute("data-graview-joins")===i);if(!x){a([]);return}let s=x.getBoundingClientRect(),l=[];for(let h of JSON.parse(i)){let o=[...d.querySelectorAll("[data-graview-pick]")].find(k=>k.getAttribute("data-graview-pick")===h&&!k.closest("[data-graview-mark]"));if(!o)continue;let b=Kr(o),C=fn(s.left+s.width/2,b.left,b.right),R=fn(s.top+s.height/2,b.top,b.bottom),A=fn(C,s.left,s.right),S=fn(R,s.top,s.bottom);l.push({id:h,x1:(A-c.left)/f,y1:(S-c.top)/f,x2:(C-c.left)/f,y2:(R-c.top)/f})}a(l)};m();let g=0,y=()=>{g===0&&(g=requestAnimationFrame(()=>{g=0,m()}))};return document.addEventListener("scroll",y,{capture:!0,passive:!0}),window.addEventListener("resize",y,{passive:!0}),()=>{document.removeEventListener("scroll",y,{capture:!0}),window.removeEventListener("resize",y),g!==0&&cancelAnimationFrame(g)}},[e,i,n]),(0,z.jsx)("svg",{"aria-hidden":"true","data-coverage-join":i,style:{position:"absolute",left:0,top:0,width:"100%",height:"100%",overflow:"visible",pointerEvents:"none",zIndex:Ce.over},children:r.map(d=>(0,z.jsxs)("g",{"data-coverage-join-to":d.id,children:[(0,z.jsx)("line",{x1:d.x1,y1:d.y1,x2:d.x2,y2:d.y2,stroke:"var(--graview-accent)",strokeWidth:1.6,strokeLinecap:"round"}),(0,z.jsx)("circle",{cx:d.x2,cy:d.y2,r:2.6,fill:"var(--graview-accent)"})]},d.id))})}function Qr(e,t,n,r){return e?{width:13,height:13,borderRadius:4,background:n||!r?"var(--graview-accent)":"var(--graview-accent-dim)",boxShadow:n&&r?"0 0 12px -2px var(--graview-accent)":void 0}:{width:5,height:5,borderRadius:1,background:t?"var(--graview-warn)":"var(--graview-edge)",opacity:t?.5:1}}function Jr({grid:e}){let t=e.rows.filter(a=>a.required),n=t.filter(a=>a.covered).length,r=t.length===0?1:n/t.length;return(0,z.jsx)("div",{role:"img","aria-label":`${n} of ${t.length} covered`,style:{height:6,borderRadius:999,overflow:"hidden",background:"var(--graview-edge)"},children:(0,z.jsx)("div",{style:{width:`${Math.round(r*100)}%`,height:"100%",background:r===1?"var(--graview-accent)":"var(--graview-warn)"}})})}function lr(e){function t(n){let{store:r}=X(),a=He(r.graph,r.schema,n.nodes).filter(g=>g.kind===e.rows),{arranged:i,bar:d}=Pe(n,{lensAllows:{sort:!1,group:!1},subject:a,kind:e.rows}),m=(0,z.jsx)(qr,{schema:r.schema,...n,options:e,...d?{rowsKept:new Set(i.nodes.map(g=>g.id))}:{}});return d?(0,z.jsxs)("div",{style:{display:"grid",gap:6,height:"100%",minHeight:0,gridTemplateRows:"auto 1fr"},children:[d,m]}):m}return{name:"coverage",requiredRoles:[...Br],options:e,View:t,build(n,r,a){return or(n,r,e,a)}}}function Xr(){let e=(0,be.useRef)(null),t=(0,be.useRef)(null),[n,r]=(0,be.useState)(new Set);return(0,be.useEffect)(()=>{let a=t.current;if(!a||typeof window>"u")return;let i=a.parentElement;for(;i&&!/(auto|scroll)/.test(getComputedStyle(i).overflowX);)i=i.parentElement;if(!i)return;let d=0,m=()=>{d=0;let y=e.current?.getBoundingClientRect().right??0,c=new Set;for(let f of a.querySelectorAll("[data-graview-column]")){let x=f.getBoundingClientRect();x.left+x.width/2<y&&c.add(f.dataset.graviewColumn)}r(f=>f.size===c.size&&[...c].every(x=>f.has(x))?f:c)},g=()=>{d===0&&(d=requestAnimationFrame(m))};return m(),i.addEventListener("scroll",g,{passive:!0}),()=>{i.removeEventListener("scroll",g),d!==0&&cancelAnimationFrame(d)}},[]),{corner:e,heads:t,hidden:n}}var cr=["regions","outline"],Fe=class extends Error{constructor(n,r){super(`${n}
|
|
27
|
+
${r}`);this.hint=r;this.name="PlanBindingError"}},hn='Check the lens bindings: { regions: "<kind>", outline: "<field>", markers?: "<kind>", at?: "<field>", within?: "<edge>" }',dr=e=>typeof e=="object"&&e!==null&&typeof e.x=="number"&&typeof e.y=="number";function yn(e,t,n,r){let a=o=>o,i=o=>r?he(r.tryDefinition(o.kind),o):String(a(o).label??o.id);if(r&&r.tryDefinition(n.regions)===void 0)throw new Fe(`No kind is declared for "${n.regions}".`,hn);if(n.markers&&r&&r.tryDefinition(n.markers)===void 0)throw new Fe(`No kind is declared for "${n.markers}".`,hn);let d=e.filter(o=>o.kind===n.regions);if(!r&&d.length===0)throw new Fe(`Nothing to draw: no "${n.regions}" nodes.`,hn);let g=r?.tryDefinition(n.regions)?.fields?.shape;if(g!==void 0&&!(n.outline in g))throw new Fe(`"${n.regions}" has no field called "${n.outline}".`,hn);let y=(()=>{let o=new Map;if(n.nests)for(let b of t)b.kind===n.nests&&o.set(b.from,b.to);return b=>{let C=0,R=o.get(b),A=new Set([b]);for(;R!==void 0&&!A.has(R)&&C<d.length;)A.add(R),C+=1,R=o.get(R);return C}})(),c=n.markers?e.filter(o=>o.kind===n.markers):[],f=new Map;if(n.within)for(let o of t)o.kind===n.within&&f.set(o.from,o.to);let x=[],s=new Map;for(let o of c){let b=n.at===void 0?void 0:a(o)[n.at],C=f.get(o.id);if(!dr(b)||C===void 0){x.push({id:o.id,label:i(o)});continue}let R=n.markerKind===void 0?void 0:a(o)[n.markerKind],A=s.get(C)??[];A.push({id:o.id,label:i(o),at:b,...typeof R=="string"?{what:R}:{}}),s.set(C,A)}let l=[],h=[];for(let o of d){let b=a(o)[n.outline];if(!Array.isArray(b)||b.length<3||!b.every(dr)){l.push({id:o.id,label:i(o)});continue}let C=n.regionKind===void 0?void 0:a(o)[n.regionKind];h.push({id:o.id,label:i(o),outline:b,center:Ct(b),depth:y(o.id),markers:s.get(o.id)??[],...typeof C=="string"?{what:C}:{}})}return h.sort((o,b)=>o.depth-b.depth),{regions:h,undrawn:l,strays:x}}var Te=_(De(),1);var L=_(J(),1);function gr({map:e,options:t,implicated:n,flagged:r}){return(0,L.jsxs)("ul",{style:{margin:0,padding:0,listStyle:"none",display:"grid",gap:".25rem"},children:[e.regions.map(a=>{let i=wn(a.id,n,r);return(0,L.jsxs)("li",{"data-graview-pick":a.id,...i?{"data-graview-emphasis":i}:{},style:{display:"flex",flexWrap:"wrap",gap:".5rem",justifyContent:"space-between",minWidth:0,padding:".25rem .4rem",borderRadius:".35rem",background:i==="flagged"?Un(a.what,i,t.hues):void 0},children:[(0,L.jsx)("span",{style:{minWidth:0,overflowWrap:"anywhere"},children:a.label}),(0,L.jsxs)("span",{style:{opacity:.7,whiteSpace:"nowrap"},children:[a.what?`${a.what} \xB7 `:"",a.markers.length]})]},a.id)}),e.undrawn.map(a=>(0,L.jsxs)("li",{"data-graview-pick":a.id,style:{display:"flex",gap:".5rem",opacity:.7,padding:".25rem .4rem"},children:[(0,L.jsx)("span",{style:{minWidth:0,overflowWrap:"anywhere"},children:a.label}),(0,L.jsx)("span",{style:{whiteSpace:"nowrap"},children:t.undrawnLabel??"not drawn"})]},a.id))]})}var qn=1e3,ur=.022,Ze={minHeight:"1.9rem",padding:".25rem .65rem",borderRadius:".35rem",border:"1px solid var(--graview-edge)",background:"var(--graview-panel)",color:"var(--graview-ink)",font:"inherit",fontSize:"0.9375rem",cursor:"pointer"},wn=(e,t,n)=>{if(n?.includes(e))return"flagged";if(t?.includes(e))return"implicated"},vn=(e,t)=>(e===void 0?void 0:t?.[e])??de(e??"region"),Un=(e,t,n)=>t==="flagged"?"color-mix(in oklab, var(--graview-warn) 26%, var(--graview-panel))":`color-mix(in oklab, hsl(${vn(e,n)} 52% 48%) 24%, var(--graview-panel))`,mr=(e,t,n)=>t==="flagged"?"var(--graview-warn)":`color-mix(in oklab, hsl(${vn(e,n)} 48% 42%) 78%, var(--graview-ink))`;function Zr(e){let t=e.currentTarget.getBoundingClientRect(),n=r=>Math.round(Math.max(0,Math.min(1,r))*1e3)/1e3;return{x:n(t.width===0?0:(e.clientX-t.left)/t.width),y:n(t.height===0?0:(e.clientY-t.top)/t.height)}}function pr({schema:e,options:t,nodes:n,label:r,fidelity:a,selected:i,implicated:d,flagged:m}){let{store:g}=X(),y=g.graph.allEdges(),c=g.graph.allNodes(),f=n===void 0?void 0:new Set(n.map(v=>v.id)),x=f===void 0?c:c.filter(v=>v.kind!==t.regions||f.has(v.id)),s=yn(x,y,t,e),l=s.regions.length,h=s.regions.reduce((v,O)=>v+O.markers.length,0);if(a==="glyph")return(0,L.jsx)(ye,{label:`${r??"Ground"} \xB7 ${l}`,...s.undrawn.length>0?{meta:`+${s.undrawn.length} undrawn`}:{},selected:i});if(a==="summary")return(0,L.jsx)(te,{title:r??"The plan",subtitle:`${l} drawn \xB7 ${h} standing in them`,children:(0,L.jsx)(gr,{map:s,options:t,...d?{implicated:d}:{},...m?{flagged:m}:{}})});let o=(0,Te.useMemo)(()=>{let v=1/0,O=1/0,G=-1/0,ie=-1/0,se=K=>{K.x<v&&(v=K.x),K.x>G&&(G=K.x),K.y<O&&(O=K.y),K.y>ie&&(ie=K.y)};for(let K of s.regions){for(let ve of K.outline)se(ve);for(let ve of K.markers)se(ve.at)}if(!Number.isFinite(v)||G-v<=0||ie-O<=0)return{x0:0,y0:0,x1:1,y1:1};let ue=Math.max(G-v,ie-O)*.04;return{x0:v-ue,y0:O-ue,x1:G+ue,y1:ie+ue}},[s.regions]),b=(o.x1-o.x0)/(o.y1-o.y0),C=t.aspect??Math.min(3.2,Math.max(.55,b)),R=Math.round(qn/(o.x1-o.x0)),A=Math.round(R*(o.x1-o.x0)),S=Math.round(A/C),k={x:o.x0*R,y:o.y0*R-(S-R*(o.y1-o.y0))/2,w:A,h:S},u=R,E=k.w,M=(d?.length??0)>0||(m?.length??0)>0,B=(0,Te.useRef)(null),{touchable:w,legible:W}=ft(B,{units:k.w,target:E*ur*2}),P=En("--graview-font-display","serif"),U=En("--graview-font-body","sans-serif"),{named:ne,placed:ae,tagged:ee}=(0,Te.useMemo)(()=>{let v=[],O=E*.012,G=qn*.004,ie=(le,Y)=>!v.some(fe=>fe!==Y&&$t({x0:le.x0-G,y0:le.y0-G,x1:le.x1+G,y1:le.y1+G},fe)),se=[...s.regions].sort((le,Y)=>Pn(Y.outline)-Pn(le.outline)),ue=new Map,K=new Map;for(let le of se){let Y=kt(le.outline),fe=Math.max(0,(Y.bottom-Y.top)*u*.55),$e=null;for(let ke of[.12,.26,.42,.6,.78]){let xe=Y.top+ke*(Y.bottom-Y.top),Re=Mn(le.outline,xe),bn=Math.max(0,(Re.x1-Re.x0)*R-O*2),me=Ot(le.label,{room:bn,height:fe,size:E*.023,floor:E*.015,measure:P});if(me===null)continue;let Ne=Math.max(...me.lines.map(Cr=>P(Cr,me.fontSize))),Ae=me.lines.length*me.fontSize*1.15,Qn=Y.top*u+O+Ae/2,Jn=Y.bottom*u-O-Ae/2,nn=Jn<Qn?(Y.top+Y.bottom)*u/2:Math.min(Math.max(xe*u,Qn),Jn),xn=Mn(le.outline,nn/u),Sn=xn.x0*R+O;if(Ne>(xn.x1-xn.x0)*R-O*2)continue;let Xn={x0:Sn,y0:nn-Ae/2,x1:Sn+Ne,y1:nn+Ae/2};if(ie(Xn)){v.push(Xn),$e={fitted:me,x:Sn,y:nn};break}}ue.set(le.id,$e?.fitted??null),$e!==null&&K.set(le.id,{x:$e.x,y:$e.y})}let ve=E*.018,Ue=new Map,F=E*.011+E*.004,Yn=new Map;for(let le of s.regions)for(let Y of le.markers){let fe={x0:Y.at.x*R-F,y0:Y.at.y*u-F,x1:Y.at.x*R+F,y1:Y.at.y*u+F};Yn.set(Y.id,fe),v.push(fe)}for(let le of w?s.regions:[])for(let Y of le.markers){let fe=E*.018,$e=U(Y.label,ve),ke=Y.at.x*R,xe=Y.at.y*u,Re=ve*1.15,bn=[{x:ke+fe,y:xe,anchor:"start"},{x:ke-fe,y:xe,anchor:"end"},{x:ke+fe*.7,y:xe-Re,anchor:"start"},{x:ke-fe*.7,y:xe-Re,anchor:"end"},{x:ke+fe*.7,y:xe+Re,anchor:"start"},{x:ke-fe*.7,y:xe+Re,anchor:"end"},{x:ke,y:xe-Re*1.1,anchor:"start"},{x:ke,y:xe+Re*1.1,anchor:"start"}];for(let me of bn){let Ne=me.anchor==="start"?me.x:me.x-$e,Ae={x0:Ne,y0:me.y-ve*.62,x1:Ne+$e,y1:me.y+ve*.62};if(!(Ne<k.x+4||Ne+$e>k.x+k.w-4)&&!(Ae.y0<k.y+2||Ae.y1>k.y+k.h-2)&&ie(Ae,Yn.get(Y.id))){v.push(Ae),Ue.set(Y.id,{at:{x:me.x,y:me.y},anchor:me.anchor,size:ve});break}}}return{named:ue,placed:K,tagged:Ue}},[s.regions,qn,u,w,P,U]),ge=(0,Te.useMemo)(()=>{let v=[];for(let O of s.regions)(ne.get(O.id)?.whole??!1)===!1&&v.push({id:O.id,label:O.label,what:O.what,round:!1});for(let O of s.regions)for(let G of O.markers)(!w||!ee.has(G.id))&&v.push({id:G.id,label:G.label,what:G.what,round:!0});return v},[s.regions,ne,ee,w]),{principal:pe}=X(),[T,$]=(0,Te.useState)(null),V=t.draw!==void 0,p=t.place!==void 0,H=v=>{if(T===null)return;v.stopPropagation();let O=Zr(v);if(T.kind==="marker"){g.apply({name:t.place.act,args:{[t.place.id]:T.id,[t.place.at]:O}},{author:pe,intent:`Placed ${T.label} on the map`}),$(null);return}$({...T,corners:[...T.corners,O]})},D=()=>{T===null||T.kind!=="region"||T.corners.length<3||(g.apply({name:t.draw.act,args:{[t.draw.id]:T.id,[t.draw.outline]:T.corners}},{author:pe,intent:`Drew ${T.label} on the map \u2014 ${T.corners.length} corners`}),$(null))},j=T===null?s.regions.length===0?"Nothing drawn yet. Choose an area below, then click its corners here.":null:T.kind==="marker"?`Click where ${T.label} stands.`:T.corners.length<3?`Click the corners of ${T.label} \u2014 ${3-T.corners.length} more to make an area.`:`${T.corners.length} corners. Keep clicking, or press Done.`;return W?(0,L.jsxs)(te,{title:r??"The plan",subtitle:`${l} drawn \xB7 ${h} standing in them`,...s.undrawn.length>0?{meta:`${s.undrawn.length} ${t.undrawnLabel??"not drawn yet"}`}:{},selected:i,fit:!0,children:[(0,L.jsx)("div",{style:{position:"relative",width:"100%",aspectRatio:`${k.w} / ${k.h}`,overflow:"hidden"},children:(0,L.jsxs)("svg",{ref:B,viewBox:`${k.x} ${k.y} ${k.w} ${k.h}`,width:"100%",height:"100%",preserveAspectRatio:"xMidYMid meet",role:T!==null?"application":w?"group":"img","aria-label":T===null?`${r??"The plan"}: ${l} drawn, ${h} standing in them`:j??"Drawing",onClick:H,"data-testid":"plan-canvas",style:{display:"block",position:"absolute",inset:0,cursor:T===null?void 0:"crosshair",border:"1px dashed color-mix(in oklab, var(--graview-edge) 80%, transparent)",borderRadius:".4rem",backgroundImage:"linear-gradient(color-mix(in oklab, var(--graview-edge) 35%, transparent) 1px, transparent 1px),linear-gradient(90deg, color-mix(in oklab, var(--graview-edge) 35%, transparent) 1px, transparent 1px)",backgroundSize:"10% 10%"},children:[(0,L.jsx)("text",{x:k.x+k.w-E*.028,y:k.y+E*.034,fontSize:E*.022,textAnchor:"middle",fill:"var(--graview-ink)",opacity:.55,children:"N"}),j!==null&&s.regions.length===0?(0,L.jsx)("text",{x:k.x+k.w/2,y:k.y+k.h/2,textAnchor:"middle",dominantBaseline:"middle",fontSize:E*.026,fill:"var(--graview-ink)",opacity:.7,style:{pointerEvents:"none",fontFamily:"var(--graview-font-body)"},children:j}):null,T!==null&&T.kind==="region"&&T.corners.length>0?(0,L.jsxs)("g",{style:{pointerEvents:"none"},children:[(0,L.jsx)("polyline",{points:T.corners.map(v=>`${v.x*R},${v.y*u}`).join(" "),fill:T.corners.length>=3?"color-mix(in oklab, var(--graview-accent) 22%, transparent)":"none",stroke:"var(--graview-accent)",strokeWidth:3,strokeDasharray:"8 6"}),T.corners.map((v,O)=>(0,L.jsx)("circle",{cx:v.x*R,cy:v.y*u,r:E*.008,fill:"var(--graview-accent)"},O))]}):null,s.regions.map(v=>{let O=wn(v.id,d,m),G=M&&O===void 0?.34:1,ie=v.outline.map(se=>`${se.x*R},${se.y*u}`).join(" ");return(0,L.jsx)("g",{"data-graview-pick":v.id,...O?{"data-graview-emphasis":O}:{},role:"button","aria-label":`${v.label}${v.what?`, ${v.what}`:""}, ${v.markers.length} standing in it`,style:{opacity:G,cursor:"pointer"},children:(0,L.jsx)("polygon",{points:ie,fill:Un(v.what,O,t.hues),stroke:mr(v.what,O,t.hues),strokeWidth:O==="flagged"?5:2.5,strokeLinejoin:"round"})},v.id)}),s.regions.flatMap(v=>v.markers.map(O=>{let G=wn(O.id,d,m),ie=M&&G===void 0?.34:1;return(0,L.jsxs)("g",{...w?{"data-graview-pick":O.id,role:"button","aria-label":`${O.label}${O.what?`, ${O.what}`:""}, in ${v.label}`}:{"aria-hidden":!0},...G?{"data-graview-emphasis":G}:{},style:{opacity:ie,cursor:w?"pointer":"default"},children:[w?(0,L.jsx)("circle",{cx:O.at.x*R,cy:O.at.y*u,r:E*ur,fill:"transparent"}):null,(0,L.jsx)("circle",{cx:O.at.x*R,cy:O.at.y*u,r:E*.011,fill:G==="flagged"?"var(--graview-warn)":`hsl(${vn(O.what,t.hues)} 55% 45%)`,stroke:"var(--graview-panel)",strokeWidth:E*.004}),ee.has(O.id)?(0,L.jsx)("text",{x:ee.get(O.id).at.x,y:ee.get(O.id).at.y,textAnchor:ee.get(O.id).anchor,dominantBaseline:"middle",fontSize:ee.get(O.id).size,fill:"var(--graview-ink)",stroke:"var(--graview-panel)",strokeWidth:Math.max(2,ee.get(O.id).size*.3),paintOrder:"stroke","data-testid":`marker-label-${O.id}`,style:{pointerEvents:"none",fontFamily:"var(--graview-font-body)"},children:O.label}):null]},O.id)})),s.regions.map(v=>{let O=ne.get(v.id),G=ae.get(v.id);if(!O||G===void 0)return null;let ie=wn(v.id,d,m);return(0,L.jsx)("text",{x:G.x,y:G.y-(O.lines.length-1)*O.fontSize*1.15/2,textAnchor:"start",dominantBaseline:"middle",fontSize:O.fontSize,fill:"var(--graview-ink)",opacity:M&&ie===void 0?.34:1,stroke:"var(--graview-panel)",strokeWidth:Math.max(2,O.fontSize*.26),paintOrder:"stroke","data-testid":`region-label-${v.id}`,style:{pointerEvents:"none",fontFamily:"var(--graview-font-display)"},children:O.lines.map((se,ue)=>(0,L.jsx)("tspan",{x:G.x,dy:ue===0?0:O.fontSize*1.15,children:se},se+String(ue)))},`label-${v.id}`)})]})}),ge.length>0?(0,L.jsx)("ul",{"data-testid":"map-key",style:{margin:".5rem 0 0",padding:0,listStyle:"none",display:"flex",flexWrap:"wrap",gap:".2rem .75rem",fontSize:"0.875rem"},children:ge.map(v=>(0,L.jsxs)("li",{"data-graview-pick":v.id,style:{display:"flex",alignItems:"center",gap:".35rem",minWidth:0,minHeight:"max(1.5rem, 24px)",padding:"0 .15rem",cursor:"pointer"},children:[(0,L.jsx)("span",{"aria-hidden":"true",style:{width:v.round?".55rem":".7rem",height:v.round?".55rem":".7rem",flex:"0 0 auto",borderRadius:v.round?"50%":".15rem",background:v.round?`hsl(${vn(v.what,t.hues)} 55% 45%)`:Un(v.what,void 0,t.hues),border:v.round?void 0:`1px solid ${mr(v.what,void 0,t.hues)}`}}),(0,L.jsx)("span",{style:{minWidth:0,overflowWrap:"anywhere"},children:v.label})]},v.id))}):null,T!==null?(0,L.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:".5rem",marginTop:".5rem",alignItems:"center"},children:[s.regions.length>0&&j!==null?(0,L.jsx)("span",{style:{fontSize:"0.9375rem",opacity:.8,flexBasis:"100%"},"aria-live":"polite",children:j}):null,T.kind==="region"?(0,L.jsxs)("button",{type:"button",onClick:D,disabled:T.corners.length<3,"data-testid":"draw-done",style:{...Ze,background:"var(--graview-accent)",color:"var(--graview-accent-ink)",borderColor:"transparent"},children:["Done \u2014 keep ",T.label]}):null,T.kind==="region"&&T.corners.length>0?(0,L.jsx)("button",{type:"button",onClick:()=>$({...T,corners:T.corners.slice(0,-1)}),style:Ze,children:"Undo a corner"}):null,(0,L.jsx)("button",{type:"button",onClick:()=>$(null),style:Ze,"data-testid":"draw-cancel",children:"Stop"})]}):(0,L.jsxs)(L.Fragment,{children:[V&&s.undrawn.length>0?(0,L.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:".4rem",marginTop:".5rem",alignItems:"center"},children:[(0,L.jsxs)("span",{style:{fontSize:"0.875rem",opacity:.75},children:[t.undrawnLabel??"Not drawn yet",":"]}),s.undrawn.map(v=>(0,L.jsxs)("button",{type:"button",style:Ze,onClick:()=>$({kind:"region",id:v.id,label:v.label,corners:[]}),"data-testid":`draw-${v.id}`,children:["Draw ",v.label]},v.id))]}):null,p&&s.strays.length>0?(0,L.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:".4rem",marginTop:".5rem",alignItems:"center"},children:[(0,L.jsxs)("span",{style:{fontSize:"0.875rem",opacity:.75},children:[t.strayLabel??"Not placed",":"]}),s.strays.map(v=>(0,L.jsxs)("button",{type:"button",style:Ze,onClick:()=>$({kind:"marker",id:v.id,label:v.label}),"data-testid":`place-${v.id}`,children:["Place ",v.label]},v.id))]}):null,t.help!==void 0&&(s.undrawn.length>0||s.strays.length>0)?(0,L.jsx)("p",{style:{margin:".5rem 0 0",fontSize:"0.875rem"},children:(0,L.jsx)("a",{href:t.help.href,"data-testid":"map-help",children:t.help.label})}):null,!V&&(s.undrawn.length>0||s.strays.length>0)?(0,L.jsxs)("p",{style:{margin:".5rem 0 0",fontSize:"0.875rem",opacity:.75},children:[s.undrawn.map(v=>v.label).join(", "),s.undrawn.length>0?` \u2014 ${t.undrawnLabel??"not drawn yet"}. `:"",s.strays.map(v=>v.label).join(", "),s.strays.length>0?` \u2014 ${t.strayLabel??"not placed"}.`:""]}):null]})]}):(0,L.jsx)(te,{title:r??"The plan",subtitle:`${l} drawn \xB7 ${h} standing in them`,selected:i,children:(0,L.jsx)(gr,{map:s,options:t,...d?{implicated:d}:{},...m?{flagged:m}:{}})})}var hr=_(J(),1);function fr(e){function t(n){let{store:r}=X();return(0,hr.jsx)(pr,{schema:r.schema,...n,options:e})}return{name:"plan",requiredRoles:[...cr],options:e,View:t,build(n,r,a){return yn(n,r,e,a)}}}var re=_(J(),1);function ea(e,t,n){let r=t.flatMap(i=>(i.subject&&i.subject.kinds!=="*"?i.subject.kinds:[null]).map(m=>({name:i.name,title:i.title??i.name,kind:m}))),a=[];for(let i of n){let d={kind:"human",id:"themselves",roles:[i]};for(let m of r){let g=m.kind??void 0,y=On(e,d,m.name,g).ok,c=!y&&On(e,d,m.name,g,void 0,"themselves").ok;a.push({role:i,act:m.name,kind:m.kind,may:y?"yes":c?"self":"no"})}}return{roles:n,acts:r,cells:a}}function na({label:e,fidelity:t,mode:n}){let{store:r}=X(),a=r.policy,i=a?.roles??[],d=r.allMutations().filter(f=>!f.derived).map(f=>({name:f.name,...f.title?{title:f.title}:{},...f.subject?{subject:f.subject}:{}})),m=ea(a,d,i),g=e??"Who may do what";if(!a||i.length===0)return(0,re.jsxs)("div",{"data-testid":"reach-lens",style:{padding:14,color:"var(--graview-ink-muted)",fontSize:"0.875rem"},children:[g,": this installation has no policy, so everyone may do everything."]});if(t==="glyph")return(0,re.jsx)(ye,{label:`${g} \xB7 ${i.length} ${i.length===1?"role":"roles"}`,hue:de("role")});let y=n==="fullscreen",c=f=>f==="yes"?"\u25CF":f==="self"?"\u25D0":"\xB7";return(0,re.jsxs)("div",{"data-testid":"reach-lens",style:{display:"grid",gap:10,padding:y?0:14,borderRadius:"var(--graview-radius, 12px)",background:y?"transparent":"var(--graview-panel)",border:y?"none":"1px solid var(--graview-edge)",color:"var(--graview-ink)",minWidth:0},children:[(0,re.jsxs)("div",{style:{display:"flex",alignItems:"baseline",gap:10},children:[(0,re.jsx)("span",{style:{fontFamily:"var(--graview-font-display)",fontSize:"1.125rem",fontWeight:600},children:g}),(0,re.jsx)("span",{style:{marginLeft:"auto",fontSize:"0.75rem",color:"var(--graview-ink-faint)"},children:"\u25CF may \xB7 \u25D0 on their own record \xB7 read from the policy"})]}),(0,re.jsx)("div",{"data-scroller":!0,style:{overflowX:"auto"},children:(0,re.jsxs)("table",{style:{borderCollapse:"collapse",fontSize:"0.875rem",minWidth:"100%"},children:[(0,re.jsx)("thead",{children:(0,re.jsxs)("tr",{children:[(0,re.jsx)("th",{scope:"col",style:{textAlign:"left",padding:"4px 10px 6px 0",fontWeight:500,color:"var(--graview-ink-faint)",fontSize:"0.75rem",letterSpacing:"0.12em",textTransform:"uppercase"},children:"Role"}),m.acts.map(f=>(0,re.jsxs)("th",{scope:"col",title:f.kind?`${f.title}, on ${rt(rn(r.schema.tryDefinition(f.kind),f.kind))}`:f.title,style:{textAlign:"left",padding:"4px 10px 6px",fontWeight:500,whiteSpace:"nowrap",color:"var(--graview-ink-muted)",fontSize:"0.8125rem"},children:[f.title,f.kind?(0,re.jsxs)("span",{style:{color:"var(--graview-ink-faint)"},children:[" \xB7 ",f.kind]}):null]},`${f.name}|${f.kind??""}`))]})}),(0,re.jsx)("tbody",{children:m.roles.map(f=>(0,re.jsxs)("tr",{children:[(0,re.jsx)("th",{scope:"row",style:{textAlign:"left",padding:"6px 10px 6px 0",fontWeight:600,whiteSpace:"nowrap",borderTop:"1px solid var(--graview-edge)"},children:f}),m.acts.map(x=>{let s=m.cells.find(l=>l.role===f&&l.act===x.name&&l.kind===x.kind);return(0,re.jsx)("td",{"data-graview-reach":s.may,title:`${f} ${s.may==="yes"?"may":s.may==="self"?"may, on their own record,":"may not"} ${x.title.toLowerCase()}`,style:{padding:"6px 10px",textAlign:"center",borderTop:"1px solid var(--graview-edge)",color:s.may==="no"?"var(--graview-ink-faint)":"var(--graview-accent)",fontSize:s.may==="no"?"0.875rem":"0.8125rem"},children:c(s.may)},`${x.name}|${x.kind??""}`)})]},f))})]})})]})}var yr={name:"reach",requiredRoles:[],View:na};var Se=_(De(),1);var Z=_(J(),1),vr=["start","end"];function ta(e,t,{pad:n=45,minimum:r=480}={}){if(e.length===0)return{start:0,end:t};let a=Math.min(...e.map(y=>y.start)),i=Math.max(...e.map(y=>y.end)),d=Math.max(0,a-n),m=Math.min(t,i+n),g=r-(m-d);return g>0&&(d=Math.max(0,d-g/2),m=Math.min(t,d+r)),{start:Math.floor(d),end:Math.ceil(m)}}function ra(e){let t=[...e].sort((i,d)=>i.start-d.start||i.end-d.end||i.id.localeCompare(d.id)),n=[],r=t.map(i=>{let d=n.findIndex(m=>m<=i.start);return d===-1?(d=n.length,n.push(i.end)):n[d]=i.end,{...i,lane:d,lanes:1}}),a=Math.max(1,n.length);return r.map(i=>({...i,lanes:a}))}var Kn=class extends Error{constructor(t,n){super(`The timeline lens needs ${n.join(" and ")} for "${t}". Add them to the lens bindings: { ${t}: { ${n.map(r=>`${r}: "<field name>"`).join(", ")} } }.`),this.name="TimelineBindingError"}};function br(e,t,n){let r=Be(t[e.kind],n?.tryDefinition(e.kind));if(!r)return null;let a=e,i=n?.tryDefinition(e.kind)?.fields.shape,d=vr.filter(c=>{let f=r[c];return f?i?!(f in i):!(f in a):!0});if(d.length>0)throw new Kn(e.kind,d);let m=Number(a[r.start]??Number.NaN),g=Number(a[r.end]??m);if(!Number.isFinite(m))return null;let y=[];if(r.columns){let c=a[r.columns];Array.isArray(c)&&y.push(...c.map(String))}if(r.column){let c=a[r.column];c!=null&&y.push(String(c))}return{id:e.id,kind:e.kind,label:he(n?.tryDefinition(e.kind),e),columnIds:y,start:m,end:Number.isFinite(g)?Math.max(g,m):m}}function aa(e,t){let n=Math.round(t),r=a=>`linear-gradient(hsl(${n} 55% var(--graview-tint-lightness) / ${a}), hsl(${n} 55% var(--graview-tint-lightness) / ${a})), var(--graview-panel)`;return e==="lit"?{border:"1px solid var(--graview-accent)",background:r("calc(var(--graview-tint-alpha) * 1.15)"),color:"var(--graview-ink)",boxShadow:"0 0 16px -4px var(--graview-accent)"}:e==="dimmed"?{border:"1px solid var(--graview-edge)",background:r("calc(var(--graview-tint-alpha) * 0.25)"),color:"var(--graview-ink-muted)"}:{border:`1px solid hsl(${n} 50% var(--graview-tint-lightness) / 0.42)`,background:r("var(--graview-tint-alpha)"),color:"var(--graview-ink)"}}var ia=.045,en=52,xr=4,oa=44,sa=240;function la({nodes:e,label:t,fidelity:n,mode:r,options:a,schema:i,selectedIds:d=[],implicated:m=[],flagged:g=[]}){let y=new Set([...m,...d]),c=S=>y.size===0?"plain":y.has(S)?"lit":"dimmed",f=new Set(g),x=(e??[]).map(S=>br(S,a.bindings,i)).filter(S=>S!==null),s=a.hueOf??(S=>de(S.kind));if(n==="glyph")return(0,Z.jsx)(ye,{label:`${t??"Timeline"} \xB7 ${x.length}`,hue:de("timeline")});if(n==="summary")return(0,Z.jsx)(te,{title:t??"Timeline",meta:`${x.length} items`,tone:"muted",children:(0,Z.jsx)(Ee,{max:a.columns.length,items:a.columns.map(S=>({id:S.id,label:`${S.label} ${x.filter(k=>k.columnIds.includes(S.id)).length}`,hue:de(S.id)}))})});let l=a.format??String,h=ta(x,a.extent,{...a.minWindow===void 0?{}:{minimum:a.minWindow}}),o=h.end-h.start,b=S=>(S-h.start)/o*100,C=a.tick??Math.max(60,Math.round(o/8/60)*60),R=[];for(let S=Math.ceil(h.start/C)*C;S<=h.end;S+=C)R.push(S);let A=r==="fullscreen";return(0,Z.jsx)(te,{title:t??"Timeline",meta:`${l(h.start)} \u2013 ${l(h.end)}`,style:{gap:12,...A?{flex:"1 1 auto",minHeight:0,height:"100%"}:{}},children:(0,Z.jsxs)("div",{style:{display:"flex",flexDirection:"column",height:"100%",minHeight:0},children:[(0,Z.jsx)(ga,{columns:a.columns}),(0,Z.jsxs)("div",{"data-graview-timeline-grid":"",style:{position:"relative",flex:1,minHeight:Math.max(sa,Math.ceil(o/C)*oa)},children:[R.map((S,k)=>(0,Z.jsx)("div",{style:{position:"absolute",left:en-8,right:0,top:k===R.length-1?"calc(100% - 1px)":`${b(S)}%`,height:1,background:"var(--graview-edge)"},children:(0,Z.jsx)("span",{style:{position:"absolute",left:-(en-8),...k===R.length-1?{bottom:2}:{top:-7},width:en-16,textAlign:"right",fontSize:"0.75rem",letterSpacing:"0.06em",color:"var(--graview-ink-faint)"},children:l(S)})},S)),(0,Z.jsx)("div",{style:{position:"absolute",inset:0,left:en,display:"flex",gap:xr},children:a.columns.map(S=>(0,Z.jsx)(ua,{spans:x.filter(k=>k.columnIds.includes(S.id)),window:h,format:l,hue:s,emphasisOf:c,brokenIds:f},S.id))})]})]})})}function da(){let e=(0,Se.useRef)(null),[t,n]=(0,Se.useState)(new Set);return(0,Se.useLayoutEffect)(()=>{let r=e.current;if(!r)return;let a=[...r.querySelectorAll("[data-graview-span-name]")].filter(i=>i.scrollWidth>i.clientWidth+.5).map(i=>i.getAttribute("data-graview-span-name")).filter(i=>!t.has(i));a.length>0&&n(new Set([...t,...a]))}),(0,Se.useLayoutEffect)(()=>{let r=e.current;if(!r||typeof ResizeObserver>"u")return;let a=Math.round(r.clientWidth),i=new ResizeObserver(()=>{let d=Math.round(r.clientWidth);d!==a&&(a=d,n(new Set))});return i.observe(r),()=>i.disconnect()},[]),{column:e,oneLine:t}}var ca=(e,t)=>t===0?e:e.slice(0,t),wr=[0,3,1];function ga({columns:e}){let t=(0,Se.useRef)(null),[n,r]=(0,Se.useState)(0);(0,Se.useLayoutEffect)(()=>{let i=t.current;if(!i)return;[...i.children].some(m=>m.scrollWidth>m.clientWidth+.5)&&n<wr.length-1&&r(n+1)}),(0,Se.useLayoutEffect)(()=>{let i=t.current;if(!i||typeof ResizeObserver>"u")return;let d=i.clientWidth,m=new ResizeObserver(()=>{i.clientWidth!==d&&(d=i.clientWidth,r(0))});return m.observe(i),()=>m.disconnect()},[]);let a=wr[n];return(0,Z.jsx)("div",{ref:t,style:{display:"flex",gap:xr,paddingLeft:en,paddingBottom:10},children:e.map(i=>{let d=ca(i.label,a);return(0,Z.jsx)("div",{"data-graview-day-head":i.id,title:d===i.label?void 0:i.label,...d===i.label?{}:{"aria-label":i.label},style:{flex:1,minWidth:0,overflow:"hidden",whiteSpace:"nowrap",fontSize:"0.75rem",letterSpacing:a===1?0:"0.18em",textTransform:"uppercase",textAlign:"center",color:"var(--graview-ink-muted)"},children:d},i.id)})})}function ua({spans:e,window:t,format:n,hue:r,emphasisOf:a,brokenIds:i}){let d=t.end-t.start,m=s=>(s-t.start)/d*100,g=s=>(s.end-s.start)/d<ia,y=ra(e.filter(s=>!g(s))),c=[...e.filter(g)].sort((s,l)=>s.start-l.start),f=Math.max(1,...y.map(s=>s.lanes)),x=da();return(0,Z.jsxs)("div",{ref:x.column,"data-graview-day-column":"",style:{position:"relative",flex:1,minWidth:0},children:[y.map(s=>{let l=100/f,h=Math.max(1.6,m(s.end)-m(s.start));return(0,Z.jsx)("div",{"data-graview-span":s.id,"data-graview-pick":s.id,"data-graview-emphasis":a(s.id),"data-graview-flagged":i.has(s.id)?"":void 0,title:`${s.label} \xB7 ${n(s.start)}\u2013${n(s.end)}`,style:{position:"absolute",top:`${m(s.start)}%`,height:`${h}%`,left:`${s.lane*l}%`,width:`${l}%`,padding:"0 2px 2px 0",boxSizing:"border-box"},children:(0,Z.jsx)("div",{"data-graview-span-name":s.id,style:{height:"100%",minHeight:15,borderRadius:6,padding:"3px 6px",fontSize:"0.75rem",lineHeight:1.25,overflow:"hidden",overflowWrap:"normal",wordBreak:"normal",...x.oneLine.has(s.id)?{display:"block",whiteSpace:"nowrap",textOverflow:"ellipsis"}:{display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical"},...aa(a(s.id),r(s)),...i.has(s.id)?{borderLeft:"3px solid var(--graview-warn)",paddingLeft:4}:{}},children:h>=3.4?s.label:null})},s.id)}),c.map(s=>{let l=a(s.id);return(0,Z.jsxs)("div",{"data-graview-span":s.id,"data-graview-pick":s.id,"data-graview-emphasis":l,"data-graview-moment":"",title:`${s.label} \xB7 ${n(s.start)}`,style:{position:"absolute",top:`${m(s.start)}%`,right:0,maxWidth:"100%",boxSizing:"border-box",transform:"translateY(-50%)",display:"flex",alignItems:"center",justifyContent:"flex-end",gap:5,minHeight:24,padding:"0 4px 0 8px",borderRadius:999,background:"linear-gradient(90deg, transparent, var(--graview-ground) 35%)"},children:[(0,Z.jsx)("span",{style:{fontSize:"0.6875rem",letterSpacing:"0.04em",whiteSpace:"nowrap",color:l==="lit"?"var(--graview-accent)":"var(--graview-ink-faint)"},children:n(s.start)}),(0,Z.jsx)("span",{style:{fontSize:"0.75rem",minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",color:l==="dimmed"?"var(--graview-ink-faint)":"var(--graview-ink)"},children:s.label}),(0,Z.jsx)("span",{style:{width:7,height:7,borderRadius:999,flex:"0 0 auto",background:i.has(s.id)?"var(--graview-warn)":l==="dimmed"?"var(--graview-edge)":`hsl(${Math.round(r(s))} 60% var(--graview-tint-lightness))`,boxShadow:i.has(s.id)?"0 0 0 3px var(--graview-warn)":l==="lit"?"0 0 0 3px var(--graview-accent-dim)":l==="dimmed"?void 0:`0 0 8px hsl(${Math.round(r(s))} 60% var(--graview-tint-lightness) / 0.45)`}})]},s.id)})]})}function Sr(e){function t(n){let{store:r}=X(),a=Object.keys(e.bindings),{nodes:i,bar:d}=Pe(n,{...e.arranging!==void 0?{allow:e.arranging}:{},lensAllows:{group:!1},...e.arrangedBy?{arrangedBy:e.arrangedBy}:{},...a[0]?{kind:(n.nodes??[]).find(g=>a.includes(String(g.kind)))?.kind??a[0]}:{}}),m=(0,Z.jsx)(la,{schema:r.schema,...n,nodes:i,options:e});return Me(n,r.schema,d?(0,Z.jsxs)("div",{style:{display:"grid",gap:6,height:"100%",minHeight:0,gridTemplateRows:"auto 1fr"},children:[d,m]}):m)}return{name:"timeline",requiredRoles:[...vr],bindings:e.bindings,options:e,View:t,place(n,r){return n.map(a=>br(a,e.bindings,r)).filter(a=>a!==null)}}}var qe=_(J(),1),kr=new WeakMap;function ma(e){return e===1440?t=>Ke(Math.floor(t/60)*60+Math.round(t%60)):e===24?t=>Ke(Math.floor(t)*60):t=>String(t)}function pa(e){let t=e.options;switch(e.lens){case"timeline":{let n=typeof t.extent=="number"?t.extent:1440;return Sr({...t,extent:n,format:ma(n)}).View}case"calendar":return er({...t,...typeof t.today=="string"?{today:t.today}:{}}).View;case"coverage":return lr(t).View;case"board":return Bt(t).View;case"plan":return fr(t).View;case"reach":return yr.View;case"columns":return nr(t).View;case"blocks":return fa(pt(Array.isArray(t.blocks)?t.blocks:[]),e.as)}}function fa(e,t){return n=>{let r=(0,qe.jsx)(Nt,{blocks:e,slot:"place",view:t,heading:n.mode==="fullscreen"?2:3});return n.fidelity==="glyph"?(0,qe.jsx)("span",{className:"graview-spec-title",children:n.label}):n.mode==="fullscreen"?(0,qe.jsx)("div",{style:{padding:"14px 16px"},children:r}):(0,qe.jsx)(te,{title:n.label??"",children:r})}}function fo(e){let t=kr.get(e);if(!t){let n=pa(e),r=a=>(0,qe.jsx)(n,{...a,label:e.title});kr.set(e,t=r)}return t}export{ma as a,fo as b};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as rn,c as on,d as te,e as an,f as re,h as Oe,i as sn,n as dn,q as oe}from"./chunk.42YX6NOY.js";import{A as pe,B as me,Ca as _e,D as ke,F as Ne,Fa as He,G as Ce,Mb as en,Pa as Ue,Qa as We,U as Ke,Ua as xe,Va as Je,Wb as nn,Xb as tn,Y as Ve,b as je,c as De,ca as Ie,d as $e,e as K,g as de,h as L,hb as U,i as Te,j as Ge,ja as we,k as ce,kb as Ye,l as Me,m as Pe,ma as Ze,o as Le,ob as Qe,p as le,pa as qe,q as he,ra as Be,tb as Xe,v as Fe,va as be,wa as ve,x as ne,y as fe}from"./chunk.6V2RG5JG.js";function Dn(e,a){let n=e.brand??{},t=n.accent?tn(n.accent):void 0;t&&!t.ok&&a.push(sn("brand","brand.accent",`that accent cannot make a readable brand, so the app keeps Graview's colors: ${t.why}`,"pick a color further from orange-red, or a darker one"));let l=typeof n.logo=="string"?{src:n.logo}:n.logo,c=n.name??e.name,x=n.typography?Object.fromEntries(Object.entries(n.typography).filter(([,S])=>typeof S=="string"&&!/url\(|@import|[;{}<>\\]/i.test(S)).map(([S,I])=>[S,nn(I)])):void 0;return{name:c,schemes:t?.ok?t.schemes:en,...n.currency?{currency:n.currency}:{},...n.locale?{locale:n.locale}:{},...l?{logo:l.src,logoAlt:l.alt??c}:{},...n.favicon?{favicon:n.favicon}:{},...e.description?{subtitle:e.description}:{},...x?{typography:x}:{},...n.shape?{shape:n.shape}:{},...n.accents?{accents:n.accents}:{},...n.scheme?{scheme:n.scheme}:{}}}function cn(e){let{currency:a,locale:n}=e.brand??{};return{...a?{currency:a}:{},...n?{locale:n}:{}}}var kn=Symbol.for("@graview/core:typed-field"),ln=(e,a)=>(/^(phone|place|duration)$/.test(a)&&(me(e)[kn]=a),e),fn=/^(?=(?:\D*\d){3})\+?[\d ()./-]+(?: *(?:ext\.?|x|#) *\d+)?$/i;function pn(e){let a=L().check(K(300),fe(t=>qe(t,e)!==void 0,`a record of ${e.kinds.join(" or ")} in ${e.address}, as "<kind>:<id>"`)),n=e.cardinality==="one"?a:le(a).check(K(200));return Be(e.description?n.check(pe(e.description)):n,e)}var bn=new WeakMap;function mn(e,a){bn.set(e,a)}var vn=[{where:"settings[]",was:"honoured",now:"honored",since:"0.1.16"},{where:"pages",was:"overview",now:"scene",since:"0.1.17"}],V=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);function un(e,a=vn){if(!V(e))return{document:e,respelled:[]};let n=[],t=e;for(let l of a)t=Re(t,l.where.split("."),l,"",n);return{document:t,respelled:n}}function Re(e,a,n,t,l){if(a.length===0){if(!V(e)||!Object.hasOwn(e,n.was))return e;l.push(`${t}${n.was}`);let{[n.was]:B,...F}=e;return Object.hasOwn(e,n.now)?F:{...F,[n.now]:B}}if(!V(e))return e;let[c,...x]=a,S=c.endsWith("[]"),I=S?c.slice(0,-2):c,$=e[I],T=$;if(!S)T=Re($,x,n,`${t}${I}.`,l);else if(Array.isArray($)){let B=$.map((F,W)=>Re(F,x,n,`${t}${I}.${W}.`,l));T=B.some((F,W)=>F!==$[W])?B:$}return T===$?e:{...e,[I]:T}}var yn="graview-compiled@1";function xn(e,a){return e.find(([n,t])=>n!==q&&"ref"in t&&(t.ref==="*"||t.ref.includes(a)))?.[0]}var q="id",ue=e=>typeof e=="string"&&/^\$[A-Za-z][A-Za-z0-9]*$/.test(e)?e.slice(1):void 0;function gn(e){let a=Object.entries(e.fields),n=t=>["name","title","label"].find(l=>t.some(([c])=>c===l))??t[0]?.[0];return n(a.filter(([,t])=>t.required&&(t.type==="string"||t.type==="text")))??n(a.filter(([,t])=>t.type==="string"))}function hn(e,a,n){let t;switch(e.type){case"string":case"place":t=L().check(K(500));break;case"phone":t=L().check(K(40),de(fn,"a phone number"));break;case"text":t=L().check(K(2e4)),e.format&&(me(t)[Symbol.for("@graview/core:markdown")]=1);break;case"number":case"integer":case"duration":{let c=e.min??(e.type==="duration"?0:void 0),x=[...e.type==="number"?[]:[Me()],...c===void 0?[]:[De(c)],...e.max===void 0?[]:[je(e.max)],...e.step===void 0?[]:[$e(e.step)]];t=x.length>0?ce().check(...x):ce();break}case"boolean":t=Pe();break;case"date":t=L().check(de(ke,"a date like 2026-10-02"));break;case"datetime":t=L().check(fe(Ne,"a date and time like 2026-10-02T14:30:00Z"));break;case"enum":t=Fe(e.options);break;case"list":t=le(e.of==="number"?ce():e.of==="date"?L().check(de(ke)):e.of==="image"||e.of==="file"?we(e.of):L().check(K(500))).check(K(200));break;case"image":case"file":t=we(e.type);break;case"app-link":t=Ze();break;case"url":t=Ge();break;case"email":t=Te();break}let l=e.type==="number"||e.type==="integer";return ln(t,l&&e.format==="duration"?"duration":e.type),e.description&&(t=t.check(pe(e.description))),l&&(e.format==="money"||e.format==="percent"||!e.format&&e.unit)&&Qe(t,{...n,...e.format?{format:e.format}:{},...e.unit?{unit:e.unit}:{}}),a?ne(t):t}var ie=e=>{throw new U(`there is no record "${e}"`,"invalid")},On=(e,a)=>"field"in e?hn(e.field,e.optional,a):"ref"in e?Xe(e.ref):ne(Le()),Rn=new WeakMap;var Ae=(e,a)=>V(a)&&Object.keys(e??{}).length===Object.keys(a).length&&Object.keys(e??{}).every(n=>Object.hasOwn(a,n));function nt(e,a={}){let n=V(e)?e.format:void 0;if(n!==yn)return{ok:!1,findings:[Oe("compiled-format","format",n===void 0?"this is not a compiled Graview app":`this compiled app is ${JSON.stringify(n)}, and this build reads ${yn}`,"compile the document instead")]};let t=e,l=un(t.document).document,c=l===t.document?t:{...t,document:l},x=V(l)&&typeof l.name=="string"&&V(l.kinds)&&Ae(l.kinds,c.kinds)&&Ae(l.acts,c.acts)&&Ae(l.rules,c.rules)&&Array.isArray(c.edges)&&Array.isArray(c.findings),S={ok:!1,findings:[Oe("compiled-shape","","this compiled app's parts do not match its document","compile the document instead")]};if(!x)return S;try{return An(c,a)}catch{return S}}function An(e,a={}){let{document:n}=e,t=a.today??Ce,l=new Map(e.edges.map(([g,r])=>[g,r])),c=new Map;for(let[g,r]of Object.entries(n.kinds)){let R=e.kinds[g]?.computed,O=ve(r.edges);c.set(g,{fields:new Set([...Object.keys(r.fields),...O.keys()]),edges:new Map(Object.entries(be(r.edges)).map(([j,G])=>[j,G.cardinality??"many"])),...R?{computed:new Map(R)}:{},...O.size>0?{linked:O}:{}})}e.facts&&c.set(on,{computed:new Map(e.facts)});let x=cn(n),S=new Map,I=Object.entries(n.kinds).map(([g,r])=>{let R={};for(let[o,u]of Object.entries(r.fields))R[o]=hn(u,!u.required,x),u.repeats&&(R[_e(o)]=ne(He()));for(let[o,u]of ve(r.edges))R[o]=ne(pn(u));let{label:O,describe:j,durations:G}=e.kinds[g]??{},M=Object.entries(r.computed??{}).map(([o,u])=>[o,typeof u=="string"?{expr:u}:u]),J=Object.hasOwn(r.fields,"label")&&!r.fields.label.label&&!/\{\s*label\b/.test(r.label??`{${gn(r)??""}}`),_=Object.fromEntries([...J?[["label","Label"]]:[],...Object.entries(r.fields).filter(([,o])=>o.label).map(([o,u])=>[o,u.label]),...M.filter(([,o])=>o.label).map(([o,u])=>[o,u.label])]),A=Object.keys(_).length>0,f=Object.fromEntries(Object.entries(r.fields).filter(([,o])=>o.default!==void 0).map(([o,u])=>[o,u.default]));S.set(g,f);let D=Object.fromEntries(Object.entries(be(r.edges)).map(([o,{renamedFrom:u,...Z}])=>[o,Z])),z=o=>r[o]?{[o]:r[o]}:{};return Ke(g,{fields:he(R),edges:D,...z("plural"),...z("noun"),...z("description"),...O?{label:o=>oe(O,{node:o,kinds:c,today:t(),money:x})||o.id}:{},...j?{describe:o=>oe(j,{node:o,kinds:c,today:t(),money:x})}:{},...z("lifecycle"),...z("figure"),...z("fieldRoles"),...z("people"),archives:r.archives,...r.tidying?{tidying:r.tidying}:{},...M.length>0?{computed:Object.fromEntries(M.map(([o,u])=>[o,G?.includes(o)?{...u,as:"duration"}:r.computed[o]]))}:{},...A||r.glance||r.page?{display:{...A?{labels:_}:{},...r.glance?{glance:[...r.glance]}:{},...r.page?{page:r.page}:{}}}:{},...Object.keys(f).length>0?{defaults:f}:{}})}),$=Ue(I,n.computed);function T(g){return $.tryDefinition(g.kind)?.label?.(g)??g.id}let B=g=>({id:"",kind:g,...S.get(g)}),F=[];for(let[g,r]of Object.entries(n.acts??{})){let R=e.acts[g],{title:O,effects:j,guard:G,refusal:M,destructive:J,idempotent:_,creates:A,connects:f,severs:D,writes:z,writesOther:o,sets:u}=R,Z=new Map(R.args),ae={};for(let[s,b]of Z)ae[s]=On(b,x);let k=[r.on??[]].flat(),N=new Map(R.exprs),P=j.find(s=>"create"in s),Y=(s,b,p,w=null)=>{if(V(s)&&"expr"in s)return re(N.get(s.expr),{graph:p,subject:w,kinds:c,bindings:b,today:t()});let h=ue(s);return h===void 0?typeof s=="string"&&s.startsWith("$$")?s.slice(1):s:h==="now"?new Date().toISOString():h==="today"?t():b[h]},Se=(s,b)=>{if(!P)return"";let p=n.kinds[P.create].fields,w=B(P.create),h=[];for(let[v,ee]of Object.entries(P.set??{})){try{w[v]=Y(ee,s,b)??w[v]}catch{}let Q=ue(ee);Q&&s[Q]!==void 0&&h.push(v)}let C=T(w).trim(),H=h.filter(v=>w[v]!==!1&&p[v].type!=="text"&&!(/[^]{41}/.test(w[v])||/ .*[.!?]$/.test(w[v])&&!/[ .][A-Z]\w{0,3}\.$/.test(w[v]))&&T({...w,[v]:void 0}).trim()===C).map(v=>w[v]===!0?p[v].label??Ve(v):dn(w[v],p[v].format,t(),[],x));return C&&H.length>0?`${C} (${H.join(", ")})`:C};F.push(Ye(g,{input:he(ae),title:O,...r.description?{description:r.description}:{},...r.fromTheOtherEnd?{fromTheOtherEnd:r.fromTheOtherEnd}:{},...Z.has(q)?{subject:{kinds:k.length>0?k:"*",arg:q}}:{},...J?{destructive:!0}:{},..._?{idempotent:!0}:{},...A.length>0?{creates:A}:{},...f.length>0?{connects:f}:{},...D.length>0?{severs:D}:{},writes:z,...Object.keys(o).length>0?{writesOther:o}:{},...Object.keys(u).length>0?{sets:u}:{},describe:(s,b)=>{let p=typeof s[q]=="string"?b.getNode(s[q]):void 0,w=p?T(p):Se(s,b);return w?`${O}: ${w}`:O},apply(s,b){let p=s.graph,w=typeof b[q]=="string"?b[q]:void 0,h=w?p.getNode(w):void 0;if(w&&!h&&ie(w),h&&k.length>0&&!k.includes(h.kind))throw new U(`"${O}" acts on ${k.join(" or ")}, not on ${Ie(h.kind)}`,"invalid");let C={};for(let[i,d]of Object.entries(b))d!==void 0&&(C[i]=d);if(G&&h){let i;try{i=re(G,{graph:p,subject:h,kinds:c,bindings:C,today:t()})}catch(d){throw d instanceof te?new U(`"${O}" could not be judged: ${d.sentence}`):d}if(i!==!0)throw new U(M?oe(M,{node:h,kinds:c,graph:p,bindings:C,today:t(),money:x}):`"${O}" is not allowed for ${T(h)} right now`)}let H=new Map,v=i=>p.has(i)||[...H.values()].includes(i),ee=new Set,Q=i=>{let d=We(i);ee.has(d)||(ee.add(d),s.removeEdge(i))},X=(i,d)=>{let m=ue(i);if(m==="subject")return w;if(m==="me"){let y=s.me;if(y&&n.kinds[p.getNode(y)?.kind]?.people)return y;throw new U(`"${O}" is done as you, and you have no record here`)}if(H.has(m))return H.get(m);try{return Y(i,C,p,d??h??null)}catch(y){throw y instanceof te?new U(`"${O}" could not work out a value: ${y.sentence}`):y}};for(let i of j)if("create"in i){let d=n.kinds[i.create],m=B(i.create);for(let[ge,se]of Object.entries(i.set??{})){let Ee=X(se,void 0);Ee!==void 0&&(m[ge]=Ee)}let y=gn(d),E=s.freshId(String((y&&m[y])??i.create),i.create);s.addNode({...m,id:E}),i.as&&H.set(i.as,E)}else if("connect"in i||"sever"in i){let d="connect"in i?i.connect:i.sever,m=String(X(i.from,void 0)??""),y=String(X(i.to,void 0)??"");if(v(m)||ie(m),v(y)||ie(y),"connect"in i){if(l.get(d)?.cardinality==="one")for(let E of p.out(m,d))E.id!==y&&Q({kind:d,from:m,to:E.id});p.out(m,d).some(E=>E.id===y)||s.addEdge({kind:d,from:m,to:y})}else Q({kind:d,from:m,to:y})}else if("set"in i){let d=String(X(i.target??"$subject",void 0)??""),m=p.getNode(d);!m&&!v(d)&&ie(d);let y={};for(let[E,ge]of Object.entries(i.set)){let se=X(ge,m);se!==void 0&&(y[E]=se)}Object.keys(y).length>0&&s.patchNode(d,y)}else if("remove"in i){let d=String(X(i.remove,void 0)??"");p.has(d)||ie(d),s.removeNode(d)}else if("replace"in i&&h){let d=b.to;for(let m of i.replace){let y=l.get(m)?.from.includes(h.kind)??!0;for(let E of y?p.out(h.id,m):p.in(h.id,m))m===i.keep&&E.id===d||Q(y?{kind:m,from:h.id,to:E.id}:{kind:m,from:E.id,to:h.id})}}}}))}let W=[];for(let[g,r]of Object.entries(n.rules??{})){let{title:R,require:O,when:j,says:G}=e.rules[g],M=r.repairs??[],J=(A,f,D=t(),z)=>{let o=[],u={graph:A,subject:f,kinds:c,today:D,...z?{linked:z}:{},onUnread:k=>o.push(k)},Z;try{if(j&&re(j,u)!==!0)return[];if(Z=re(O,u)===!0,!Z&&o.length>0)throw new te(`it reads ${rn(o[0])}`,0)}catch(k){throw k instanceof an?new Je(k.sentence):k instanceof te?new Error(k.sentence):k}if(Z)return[];let ae=M.flatMap(k=>{let N=n.acts?.[k.act],P={},Y=f&&N?.on&&N.fromTheOtherEnd&&![N.on].flat().includes(f.kind)?xn(e.acts[k.act].args,f.kind):void 0;Y?P[Y]=f.id:f&&(N?.on||/^(edit|remove|archive|unarchive|merge|skip|detach|split)-/.test(k.act))&&(P[q]=f.id);for(let[b,p]of Object.entries(k.args??{}))P[b]=ue(p)==="subject"?f?.id:p;let s=(N?e.acts[k.act].args:[]).filter(([b,p])=>p.required&&P[b]===void 0).map(([b])=>b);return[{mutation:k.act,label:k.label??(Y?N.fromTheOtherEnd:N?.title)??k.act.replace(/-/g," "),args:P,...s.length>0?{missing:s}:{}}]});return[{invariant:g,...f?{subjectId:f.id}:{},label:R,message:G?oe(G,{node:f,kinds:c,graph:A,today:D,money:x}):f?`${T(f)}: ${R}`:R,nodeIds:f?[f.id]:[],repairs:ae}]},_={label:R,shape:{over:r.over,require:O,when:j,says:G,declared:n.kinds,money:x,kinds:c,today:t},judgment:{require:r.require,...r.when?{when:r.when}:{},...r.says?{says:r.says}:{}},...r.description?{description:r.description}:{},...M.length>0?{repairs:M.map(A=>A.act)}:{}};W.push(r.over==="graph"?xe(g,{scope:"graph",..._,evaluate:({graph:A,today:f,context:D})=>J(A,null,f,D?.linked)}):xe(g,{scope:{kind:r.over},..._,evaluate:({graph:A,subject:f,today:D,context:z})=>J(A,f,D,z?.linked)}))}let ze=n.policy&&{...n.policy,...n.roles?{roles:n.roles}:{}},ye={name:n.name,schema:$,mutations:F,invariants:W,...ze?{policy:ze}:{},...e.brand?{brand:e.brand}:{},...n.modules?{modules:n.modules}:{},...n.lenses?{lenses:n.lenses}:{},...n.pages?{pages:n.pages}:{},...n.settings?{settings:n.settings}:{},...e.viewSpecs?{viewSpecs:e.viewSpecs}:{},...e.home?{home:e.home}:{},version:n.version??1};return mn(ye,n),Rn.set(ye,e),{ok:!0,app:ye,document:n,findings:e.findings,sights:n.policy?.sees,kinds:c}}export{un as a,Dn as b,yn as c,q as d,ue as e,gn as f,nt as g,An as h};
|
|
1
|
+
import{b as rn,c as on,d as te,e as an,f as re,h as Oe,i as sn,n as dn,q as oe}from"./chunk.MAF7C3VM.js";import{A as pe,B as me,Da as _e,E as ke,G as Ne,Ga as He,H as Ce,Nb as en,Qa as Ue,Ra as We,V as Ke,Va as xe,Wa as Je,Xb as nn,Yb as tn,Z as Ve,b as je,c as De,d as $e,da as Ie,e as K,g as de,h as L,i as Te,ib as U,j as Ge,k as ce,ka as we,l as Me,lb as Ye,m as Pe,na as Ze,o as Le,p as le,pb as Qe,q as he,qa as qe,sa as Be,ub as Xe,v as Fe,wa as be,x as ne,xa as ve,y as fe}from"./chunk.MNP4JI33.js";function Dn(e,a){let n=e.brand??{},t=n.accent?tn(n.accent):void 0;t&&!t.ok&&a.push(sn("brand","brand.accent",`that accent cannot make a readable brand, so the app keeps Graview's colors: ${t.why}`,"pick a color further from orange-red, or a darker one"));let l=typeof n.logo=="string"?{src:n.logo}:n.logo,c=n.name??e.name,x=n.typography?Object.fromEntries(Object.entries(n.typography).filter(([,S])=>typeof S=="string"&&!/url\(|@import|[;{}<>\\]/i.test(S)).map(([S,I])=>[S,nn(I)])):void 0;return{name:c,schemes:t?.ok?t.schemes:en,...n.currency?{currency:n.currency}:{},...n.locale?{locale:n.locale}:{},...l?{logo:l.src,logoAlt:l.alt??c}:{},...n.favicon?{favicon:n.favicon}:{},...e.description?{subtitle:e.description}:{},...x?{typography:x}:{},...n.shape?{shape:n.shape}:{},...n.accents?{accents:n.accents}:{},...n.scheme?{scheme:n.scheme}:{}}}function cn(e){let{currency:a,locale:n}=e.brand??{};return{...a?{currency:a}:{},...n?{locale:n}:{}}}var kn=Symbol.for("@graview/core:typed-field"),ln=(e,a)=>(/^(phone|place|duration)$/.test(a)&&(me(e)[kn]=a),e),fn=/^(?=(?:\D*\d){3})\+?[\d ()./-]+(?: *(?:ext\.?|x|#) *\d+)?$/i;function pn(e){let a=L().check(K(300),fe(t=>qe(t,e)!==void 0,`a record of ${e.kinds.join(" or ")} in ${e.address}, as "<kind>:<id>"`)),n=e.cardinality==="one"?a:le(a).check(K(200));return Be(e.description?n.check(pe(e.description)):n,e)}var bn=new WeakMap;function mn(e,a){bn.set(e,a)}var vn=[{where:"settings[]",was:"honoured",now:"honored",since:"0.1.16"},{where:"pages",was:"overview",now:"scene",since:"0.1.17"}],V=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);function un(e,a=vn){if(!V(e))return{document:e,respelled:[]};let n=[],t=e;for(let l of a)t=Re(t,l.where.split("."),l,"",n);return{document:t,respelled:n}}function Re(e,a,n,t,l){if(a.length===0){if(!V(e)||!Object.hasOwn(e,n.was))return e;l.push(`${t}${n.was}`);let{[n.was]:B,...F}=e;return Object.hasOwn(e,n.now)?F:{...F,[n.now]:B}}if(!V(e))return e;let[c,...x]=a,S=c.endsWith("[]"),I=S?c.slice(0,-2):c,$=e[I],T=$;if(!S)T=Re($,x,n,`${t}${I}.`,l);else if(Array.isArray($)){let B=$.map((F,W)=>Re(F,x,n,`${t}${I}.${W}.`,l));T=B.some((F,W)=>F!==$[W])?B:$}return T===$?e:{...e,[I]:T}}var yn="graview-compiled@1";function xn(e,a){return e.find(([n,t])=>n!==q&&"ref"in t&&(t.ref==="*"||t.ref.includes(a)))?.[0]}var q="id",ue=e=>typeof e=="string"&&/^\$[A-Za-z][A-Za-z0-9]*$/.test(e)?e.slice(1):void 0;function gn(e){let a=Object.entries(e.fields),n=t=>["name","title","label"].find(l=>t.some(([c])=>c===l))??t[0]?.[0];return n(a.filter(([,t])=>t.required&&(t.type==="string"||t.type==="text")))??n(a.filter(([,t])=>t.type==="string"))}function hn(e,a,n){let t;switch(e.type){case"string":case"place":t=L().check(K(500));break;case"phone":t=L().check(K(40),de(fn,"a phone number"));break;case"text":t=L().check(K(2e4)),e.format&&(me(t)[Symbol.for("@graview/core:markdown")]=1);break;case"number":case"integer":case"duration":{let c=e.min??(e.type==="duration"?0:void 0),x=[...e.type==="number"?[]:[Me()],...c===void 0?[]:[De(c)],...e.max===void 0?[]:[je(e.max)],...e.step===void 0?[]:[$e(e.step)]];t=x.length>0?ce().check(...x):ce();break}case"boolean":t=Pe();break;case"date":t=L().check(de(ke,"a date like 2026-10-02"));break;case"datetime":t=L().check(fe(Ne,"a date and time like 2026-10-02T14:30:00Z"));break;case"enum":t=Fe(e.options);break;case"list":t=le(e.of==="number"?ce():e.of==="date"?L().check(de(ke)):e.of==="image"||e.of==="file"?we(e.of):L().check(K(500))).check(K(200));break;case"image":case"file":t=we(e.type);break;case"app-link":t=Ze();break;case"url":t=Ge();break;case"email":t=Te();break}let l=e.type==="number"||e.type==="integer";return ln(t,l&&e.format==="duration"?"duration":e.type),e.description&&(t=t.check(pe(e.description))),l&&(e.format==="money"||e.format==="percent"||!e.format&&e.unit)&&Qe(t,{...n,...e.format?{format:e.format}:{},...e.unit?{unit:e.unit}:{}}),a?ne(t):t}var ie=e=>{throw new U(`there is no record "${e}"`,"invalid")},On=(e,a)=>"field"in e?hn(e.field,e.optional,a):"ref"in e?Xe(e.ref):ne(Le()),Rn=new WeakMap;var Ae=(e,a)=>V(a)&&Object.keys(e??{}).length===Object.keys(a).length&&Object.keys(e??{}).every(n=>Object.hasOwn(a,n));function nt(e,a={}){let n=V(e)?e.format:void 0;if(n!==yn)return{ok:!1,findings:[Oe("compiled-format","format",n===void 0?"this is not a compiled Graview app":`this compiled app is ${JSON.stringify(n)}, and this build reads ${yn}`,"compile the document instead")]};let t=e,l=un(t.document).document,c=l===t.document?t:{...t,document:l},x=V(l)&&typeof l.name=="string"&&V(l.kinds)&&Ae(l.kinds,c.kinds)&&Ae(l.acts,c.acts)&&Ae(l.rules,c.rules)&&Array.isArray(c.edges)&&Array.isArray(c.findings),S={ok:!1,findings:[Oe("compiled-shape","","this compiled app's parts do not match its document","compile the document instead")]};if(!x)return S;try{return An(c,a)}catch{return S}}function An(e,a={}){let{document:n}=e,t=a.today??Ce,l=new Map(e.edges.map(([g,r])=>[g,r])),c=new Map;for(let[g,r]of Object.entries(n.kinds)){let R=e.kinds[g]?.computed,O=ve(r.edges);c.set(g,{fields:new Set([...Object.keys(r.fields),...O.keys()]),edges:new Map(Object.entries(be(r.edges)).map(([j,G])=>[j,G.cardinality??"many"])),...R?{computed:new Map(R)}:{},...O.size>0?{linked:O}:{}})}e.facts&&c.set(on,{computed:new Map(e.facts)});let x=cn(n),S=new Map,I=Object.entries(n.kinds).map(([g,r])=>{let R={};for(let[o,u]of Object.entries(r.fields))R[o]=hn(u,!u.required,x),u.repeats&&(R[_e(o)]=ne(He()));for(let[o,u]of ve(r.edges))R[o]=ne(pn(u));let{label:O,describe:j,durations:G}=e.kinds[g]??{},M=Object.entries(r.computed??{}).map(([o,u])=>[o,typeof u=="string"?{expr:u}:u]),J=Object.hasOwn(r.fields,"label")&&!r.fields.label.label&&!/\{\s*label\b/.test(r.label??`{${gn(r)??""}}`),_=Object.fromEntries([...J?[["label","Label"]]:[],...Object.entries(r.fields).filter(([,o])=>o.label).map(([o,u])=>[o,u.label]),...M.filter(([,o])=>o.label).map(([o,u])=>[o,u.label])]),A=Object.keys(_).length>0,f=Object.fromEntries(Object.entries(r.fields).filter(([,o])=>o.default!==void 0).map(([o,u])=>[o,u.default]));S.set(g,f);let D=Object.fromEntries(Object.entries(be(r.edges)).map(([o,{renamedFrom:u,...Z}])=>[o,Z])),z=o=>r[o]?{[o]:r[o]}:{};return Ke(g,{fields:he(R),edges:D,...z("plural"),...z("noun"),...z("description"),...O?{label:o=>oe(O,{node:o,kinds:c,today:t(),money:x})||o.id}:{},...j?{describe:o=>oe(j,{node:o,kinds:c,today:t(),money:x})}:{},...z("lifecycle"),...z("figure"),...z("fieldRoles"),...z("people"),archives:r.archives,...r.tidying?{tidying:r.tidying}:{},...M.length>0?{computed:Object.fromEntries(M.map(([o,u])=>[o,G?.includes(o)?{...u,as:"duration"}:r.computed[o]]))}:{},...A||r.glance||r.page?{display:{...A?{labels:_}:{},...r.glance?{glance:[...r.glance]}:{},...r.page?{page:r.page}:{}}}:{},...Object.keys(f).length>0?{defaults:f}:{}})}),$=Ue(I,n.computed);function T(g){return $.tryDefinition(g.kind)?.label?.(g)??g.id}let B=g=>({id:"",kind:g,...S.get(g)}),F=[];for(let[g,r]of Object.entries(n.acts??{})){let R=e.acts[g],{title:O,effects:j,guard:G,refusal:M,destructive:J,idempotent:_,creates:A,connects:f,severs:D,writes:z,writesOther:o,sets:u}=R,Z=new Map(R.args),ae={};for(let[s,b]of Z)ae[s]=On(b,x);let k=[r.on??[]].flat(),N=new Map(R.exprs),P=j.find(s=>"create"in s),Y=(s,b,p,w=null)=>{if(V(s)&&"expr"in s)return re(N.get(s.expr),{graph:p,subject:w,kinds:c,bindings:b,today:t()});let h=ue(s);return h===void 0?typeof s=="string"&&s.startsWith("$$")?s.slice(1):s:h==="now"?new Date().toISOString():h==="today"?t():b[h]},Se=(s,b)=>{if(!P)return"";let p=n.kinds[P.create].fields,w=B(P.create),h=[];for(let[v,ee]of Object.entries(P.set??{})){try{w[v]=Y(ee,s,b)??w[v]}catch{}let Q=ue(ee);Q&&s[Q]!==void 0&&h.push(v)}let C=T(w).trim(),H=h.filter(v=>w[v]!==!1&&p[v].type!=="text"&&!(/[^]{41}/.test(w[v])||/ .*[.!?]$/.test(w[v])&&!/[ .][A-Z]\w{0,3}\.$/.test(w[v]))&&T({...w,[v]:void 0}).trim()===C).map(v=>w[v]===!0?p[v].label??Ve(v):dn(w[v],p[v].format,t(),[],x));return C&&H.length>0?`${C} (${H.join(", ")})`:C};F.push(Ye(g,{input:he(ae),title:O,...r.description?{description:r.description}:{},...r.fromTheOtherEnd?{fromTheOtherEnd:r.fromTheOtherEnd}:{},...Z.has(q)?{subject:{kinds:k.length>0?k:"*",arg:q}}:{},...J?{destructive:!0}:{},..._?{idempotent:!0}:{},...A.length>0?{creates:A}:{},...f.length>0?{connects:f}:{},...D.length>0?{severs:D}:{},writes:z,...Object.keys(o).length>0?{writesOther:o}:{},...Object.keys(u).length>0?{sets:u}:{},describe:(s,b)=>{let p=typeof s[q]=="string"?b.getNode(s[q]):void 0,w=p?T(p):Se(s,b);return w?`${O}: ${w}`:O},apply(s,b){let p=s.graph,w=typeof b[q]=="string"?b[q]:void 0,h=w?p.getNode(w):void 0;if(w&&!h&&ie(w),h&&k.length>0&&!k.includes(h.kind))throw new U(`"${O}" acts on ${k.join(" or ")}, not on ${Ie(h.kind)}`,"invalid");let C={};for(let[i,d]of Object.entries(b))d!==void 0&&(C[i]=d);if(G&&h){let i;try{i=re(G,{graph:p,subject:h,kinds:c,bindings:C,today:t()})}catch(d){throw d instanceof te?new U(`"${O}" could not be judged: ${d.sentence}`):d}if(i!==!0)throw new U(M?oe(M,{node:h,kinds:c,graph:p,bindings:C,today:t(),money:x}):`"${O}" is not allowed for ${T(h)} right now`)}let H=new Map,v=i=>p.has(i)||[...H.values()].includes(i),ee=new Set,Q=i=>{let d=We(i);ee.has(d)||(ee.add(d),s.removeEdge(i))},X=(i,d)=>{let m=ue(i);if(m==="subject")return w;if(m==="me"){let y=s.me;if(y&&n.kinds[p.getNode(y)?.kind]?.people)return y;throw new U(`"${O}" is done as you, and you have no record here`)}if(H.has(m))return H.get(m);try{return Y(i,C,p,d??h??null)}catch(y){throw y instanceof te?new U(`"${O}" could not work out a value: ${y.sentence}`):y}};for(let i of j)if("create"in i){let d=n.kinds[i.create],m=B(i.create);for(let[ge,se]of Object.entries(i.set??{})){let Ee=X(se,void 0);Ee!==void 0&&(m[ge]=Ee)}let y=gn(d),E=s.freshId(String((y&&m[y])??i.create),i.create);s.addNode({...m,id:E}),i.as&&H.set(i.as,E)}else if("connect"in i||"sever"in i){let d="connect"in i?i.connect:i.sever,m=String(X(i.from,void 0)??""),y=String(X(i.to,void 0)??"");if(v(m)||ie(m),v(y)||ie(y),"connect"in i){if(l.get(d)?.cardinality==="one")for(let E of p.out(m,d))E.id!==y&&Q({kind:d,from:m,to:E.id});p.out(m,d).some(E=>E.id===y)||s.addEdge({kind:d,from:m,to:y})}else Q({kind:d,from:m,to:y})}else if("set"in i){let d=String(X(i.target??"$subject",void 0)??""),m=p.getNode(d);!m&&!v(d)&&ie(d);let y={};for(let[E,ge]of Object.entries(i.set)){let se=X(ge,m);se!==void 0&&(y[E]=se)}Object.keys(y).length>0&&s.patchNode(d,y)}else if("remove"in i){let d=String(X(i.remove,void 0)??"");p.has(d)||ie(d),s.removeNode(d)}else if("replace"in i&&h){let d=b.to;for(let m of i.replace){let y=l.get(m)?.from.includes(h.kind)??!0;for(let E of y?p.out(h.id,m):p.in(h.id,m))m===i.keep&&E.id===d||Q(y?{kind:m,from:h.id,to:E.id}:{kind:m,from:E.id,to:h.id})}}}}))}let W=[];for(let[g,r]of Object.entries(n.rules??{})){let{title:R,require:O,when:j,says:G}=e.rules[g],M=r.repairs??[],J=(A,f,D=t(),z)=>{let o=[],u={graph:A,subject:f,kinds:c,today:D,...z?{linked:z}:{},onUnread:k=>o.push(k)},Z;try{if(j&&re(j,u)!==!0)return[];if(Z=re(O,u)===!0,!Z&&o.length>0)throw new te(`it reads ${rn(o[0])}`,0)}catch(k){throw k instanceof an?new Je(k.sentence):k instanceof te?new Error(k.sentence):k}if(Z)return[];let ae=M.flatMap(k=>{let N=n.acts?.[k.act],P={},Y=f&&N?.on&&N.fromTheOtherEnd&&![N.on].flat().includes(f.kind)?xn(e.acts[k.act].args,f.kind):void 0;Y?P[Y]=f.id:f&&(N?.on||/^(edit|remove|archive|unarchive|merge|skip|detach|split)-/.test(k.act))&&(P[q]=f.id);for(let[b,p]of Object.entries(k.args??{}))P[b]=ue(p)==="subject"?f?.id:p;let s=(N?e.acts[k.act].args:[]).filter(([b,p])=>p.required&&P[b]===void 0).map(([b])=>b);return[{mutation:k.act,label:k.label??(Y?N.fromTheOtherEnd:N?.title)??k.act.replace(/-/g," "),args:P,...s.length>0?{missing:s}:{}}]});return[{invariant:g,...f?{subjectId:f.id}:{},label:R,message:G?oe(G,{node:f,kinds:c,graph:A,today:D,money:x}):f?`${T(f)}: ${R}`:R,nodeIds:f?[f.id]:[],repairs:ae}]},_={label:R,shape:{over:r.over,require:O,when:j,says:G,declared:n.kinds,money:x,kinds:c,today:t},judgment:{require:r.require,...r.when?{when:r.when}:{},...r.says?{says:r.says}:{}},...r.description?{description:r.description}:{},...M.length>0?{repairs:M.map(A=>A.act)}:{}};W.push(r.over==="graph"?xe(g,{scope:"graph",..._,evaluate:({graph:A,today:f,context:D})=>J(A,null,f,D?.linked)}):xe(g,{scope:{kind:r.over},..._,evaluate:({graph:A,subject:f,today:D,context:z})=>J(A,f,D,z?.linked)}))}let ze=n.policy&&{...n.policy,...n.roles?{roles:n.roles}:{}},ye={name:n.name,schema:$,mutations:F,invariants:W,...ze?{policy:ze}:{},...e.brand?{brand:e.brand}:{},...n.modules?{modules:n.modules}:{},...n.lenses?{lenses:n.lenses}:{},...n.pages?{pages:n.pages}:{},...n.settings?{settings:n.settings}:{},...n.connections?{connections:n.connections}:{},...e.viewSpecs?{viewSpecs:e.viewSpecs}:{},...e.home?{home:e.home}:{},version:n.version??1};return mn(ye,n),Rn.set(ye,e),{ok:!0,app:ye,document:n,findings:e.findings,sights:n.policy?.sees,kinds:c}}export{un as a,Dn as b,yn as c,q as d,ue as e,gn as f,nt as g,An as h};
|