graview 0.1.41 → 0.1.42
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.22QEYFWI.js +1 -0
- package/dist/preview/{chunk.YWNHCZQ5.js → chunk.27P37343.js} +1 -1
- package/dist/preview/{chunk.D25XEVKO.js → chunk.2ZGICECC.js} +1 -1
- package/dist/preview/{chunk.2GQPLTV3.js → chunk.35FR36BQ.js} +1 -1
- package/dist/preview/chunk.36LP3I7Z.js +21 -0
- package/dist/preview/{chunk.JDRLSVOI.js → chunk.37NF3YXZ.js} +1 -1
- package/dist/preview/chunk.3JATXDSP.js +1 -0
- package/dist/preview/{chunk.VCX3HEIE.js → chunk.3K2KBIRG.js} +1 -1
- package/dist/preview/chunk.3SKUJWFC.js +1 -0
- package/dist/preview/{chunk.BQRAIU5R.js → chunk.3WABA2WQ.js} +1 -1
- package/dist/preview/{chunk.FFZBOP65.js → chunk.4NBB44YU.js} +1 -1
- package/dist/preview/chunk.4QEDYRES.js +349 -0
- package/dist/preview/{chunk.BELCPW66.js → chunk.4YBP552Z.js} +2 -2
- package/dist/preview/{chunk.57R2GXXN.js → chunk.4YRCKOX2.js} +1 -1
- package/dist/preview/{chunk.WVDKYUF3.js → chunk.57R4ZUMM.js} +1 -1
- package/dist/preview/{chunk.VNUHESMZ.js → chunk.5FHH5NR6.js} +1 -1
- package/dist/preview/{chunk.DMF35E7D.js → chunk.5NDYYTT4.js} +1 -1
- package/dist/preview/{chunk.RQGTHRRJ.js → chunk.6HUS5UHZ.js} +1 -1
- package/dist/preview/{chunk.YYFLTMNN.js → chunk.6MLAJKYM.js} +1 -1
- package/dist/preview/{chunk.F2MQJH6Y.js → chunk.6NF32PAT.js} +1 -1
- package/dist/preview/chunk.6WB24MS3.js +1 -0
- package/dist/preview/{chunk.Z7LDT55A.js → chunk.7EB6SDUQ.js} +1 -1
- package/dist/preview/chunk.7HZVCW3Q.js +1 -0
- package/dist/preview/{chunk.4Q7XJJZY.js → chunk.7MJM3OVC.js} +1 -1
- package/dist/preview/chunk.7OSL64QH.js +1 -0
- package/dist/preview/chunk.7XDNCCLG.js +6 -0
- package/dist/preview/{chunk.XOYJ26YB.js → chunk.7Z2GTKA4.js} +1 -1
- package/dist/preview/{chunk.GT2BITLW.js → chunk.AOC2KUFE.js} +1 -1
- package/dist/preview/{chunk.6FNMDAX5.js → chunk.AQTCN7KQ.js} +1 -1
- package/dist/preview/{chunk.5RABSIF7.js → chunk.ARTJL3X2.js} +1 -1
- package/dist/preview/{chunk.7YIFF6BF.js → chunk.AWSUMY3D.js} +1 -1
- package/dist/preview/{chunk.3ZILIZZ6.js → chunk.B65HPL4I.js} +1 -1
- package/dist/preview/{chunk.4QPVS2ZM.js → chunk.B6DKKNVR.js} +1 -1
- package/dist/preview/{chunk.W3FTEJH5.js → chunk.B7DCQJXV.js} +1 -1
- package/dist/preview/chunk.BBLIT7S7.js +1 -0
- package/dist/preview/chunk.BJET6KOG.js +1 -0
- package/dist/preview/{chunk.I7XSDXQ3.js → chunk.BZ4VZ6WQ.js} +1 -1
- package/dist/preview/{chunk.67WWRC6Y.js → chunk.CAZX6OPN.js} +1 -1
- package/dist/preview/{chunk.TN5PYGU7.js → chunk.CSWX7YGI.js} +1 -1
- package/dist/preview/chunk.D3ELYLME.js +1 -0
- package/dist/preview/{chunk.5P556A7W.js → chunk.DNMBZONP.js} +1 -1
- package/dist/preview/{chunk.5QXWMC6C.js → chunk.DXAUXGNN.js} +1 -1
- package/dist/preview/{chunk.C4TSM4W5.js → chunk.EC2T2UVH.js} +2 -2
- package/dist/preview/chunk.EHMCRUYR.js +1 -0
- package/dist/preview/{chunk.BK6RWVRE.js → chunk.EQIQPY4O.js} +1 -1
- package/dist/preview/{chunk.53CDFJNM.js → chunk.ETWOZQWL.js} +1 -1
- package/dist/preview/{chunk.6YPLZNVT.js → chunk.EVHXF7LZ.js} +1 -1
- package/dist/preview/{chunk.EQ4UAWRB.js → chunk.FFRWSODT.js} +1 -1
- package/dist/preview/chunk.G4AY6NGN.js +1 -0
- package/dist/preview/{chunk.DGCMEDQA.js → chunk.GN2SZEFH.js} +1 -1
- package/dist/preview/{chunk.B5724ULM.js → chunk.GXWOEOUY.js} +1 -1
- package/dist/preview/{chunk.ISXFH3CK.js → chunk.HAY22FPJ.js} +1 -1
- package/dist/preview/{chunk.42XSBKPO.js → chunk.HG2IO5NS.js} +1 -1
- package/dist/preview/{chunk.EAH47SCN.js → chunk.HOTOH7ZB.js} +1 -1
- package/dist/preview/chunk.HQMGTPDC.js +117 -0
- package/dist/preview/{chunk.C2PECN4C.js → chunk.I7QCXRP7.js} +1 -1
- package/dist/preview/{chunk.O75JKQPF.js → chunk.IGA7OD3L.js} +1 -1
- package/dist/preview/{chunk.HKCK3JI4.js → chunk.ILPD5CZG.js} +1 -1
- package/dist/preview/chunk.IQ3LUSD6.js +6 -0
- package/dist/preview/chunk.IWLVZGW5.js +1 -0
- package/dist/preview/chunk.IXS5XBG6.js +1 -0
- package/dist/preview/{chunk.ZHLQWMV5.js → chunk.J7ZMNAWB.js} +1 -1
- package/dist/preview/{chunk.UEXIKCLF.js → chunk.JCTT2LAK.js} +1 -1
- package/dist/preview/{chunk.FOQZADMA.js → chunk.JE4QQEJE.js} +1 -1
- package/dist/preview/{chunk.LPYVOBWB.js → chunk.JEBB3WM7.js} +1 -1
- package/dist/preview/{chunk.OW7NSJ4H.js → chunk.JPD2I4Z7.js} +1 -1
- package/dist/preview/{chunk.LPNIEPYI.js → chunk.K63BUJBF.js} +2 -2
- package/dist/preview/{chunk.HI7X6PLZ.js → chunk.KMGGP6XT.js} +2 -2
- package/dist/preview/{chunk.OF34OZ4V.js → chunk.KSXB4LDF.js} +1 -1
- package/dist/preview/{chunk.PMGXASFI.js → chunk.KZDLDXLB.js} +1 -1
- package/dist/preview/{chunk.BFNVG5JE.js → chunk.L6HKDIZB.js} +1 -1
- package/dist/preview/{chunk.2FLPDPEL.js → chunk.LFJH6X6O.js} +1 -1
- package/dist/preview/{chunk.M4T377LG.js → chunk.LKGDN25E.js} +1 -1
- package/dist/preview/{chunk.HEVC6HHP.js → chunk.LMUFLZYT.js} +1 -1
- package/dist/preview/chunk.LQGXUMUX.js +1 -0
- package/dist/preview/{chunk.ZRYSVOLA.js → chunk.LWAZ6ZO6.js} +2 -2
- package/dist/preview/{chunk.33KXSD6F.js → chunk.LZH65VSN.js} +1 -1
- package/dist/preview/{chunk.H5HWN7A2.js → chunk.MUBZIU6F.js} +1 -1
- package/dist/preview/chunk.MZ6I2Q4E.js +1 -0
- package/dist/preview/{chunk.UWW6ZEPY.js → chunk.NS3Z7QNP.js} +1 -1
- package/dist/preview/{chunk.7LIKEE5Z.js → chunk.NTJNBKWC.js} +1 -1
- package/dist/preview/chunk.O7VHAKSA.js +2 -0
- package/dist/preview/{chunk.Q4TZHWQX.js → chunk.OMCXJGDI.js} +1 -1
- package/dist/preview/chunk.OTHGZPUC.js +1 -0
- package/dist/preview/{chunk.PMDNFN7Z.js → chunk.P6FGIYWP.js} +1 -1
- package/dist/preview/{chunk.C7JKMOFC.js → chunk.P6J6VFF5.js} +1 -1
- package/dist/preview/{chunk.LOCSF3BR.js → chunk.P7ISPJAQ.js} +1 -1
- package/dist/preview/{chunk.HB7ELBVK.js → chunk.PACJFDDU.js} +1 -1
- package/dist/preview/{chunk.2RVUDRRY.js → chunk.PCTVLNOS.js} +1 -1
- package/dist/preview/{chunk.BXT6FDT4.js → chunk.PH5ITX3N.js} +1 -1
- package/dist/preview/chunk.PYFQGBU3.js +1 -0
- package/dist/preview/{chunk.L4STJLUV.js → chunk.QHLD4TZW.js} +1 -1
- package/dist/preview/{chunk.AIZQBPGU.js → chunk.QHP7AJUV.js} +1 -1
- package/dist/preview/{chunk.AKQXF7GW.js → chunk.QXMTGLHR.js} +1 -1
- package/dist/preview/{chunk.MSP73H5Z.js → chunk.RFCTUGMU.js} +1 -1
- package/dist/preview/chunk.ROHM3ETN.js +49 -0
- package/dist/preview/{chunk.SIGC3G7S.js → chunk.RR4RZH4S.js} +1 -1
- package/dist/preview/chunk.RRCPEHM4.js +1 -0
- package/dist/preview/{chunk.LOSMUESM.js → chunk.S5K4FLLG.js} +1 -1
- package/dist/preview/{chunk.ZRLXVYPG.js → chunk.SUQU4AXG.js} +1 -1
- package/dist/preview/{chunk.TIH2PDFH.js → chunk.SZKVNPEF.js} +1 -1
- package/dist/preview/chunk.T3F6BKIO.js +1 -0
- package/dist/preview/{chunk.V3V47QRE.js → chunk.U3MQUIJL.js} +1 -1
- package/dist/preview/{chunk.H5ADMSE7.js → chunk.U6YOAS4X.js} +1 -1
- package/dist/preview/chunk.UG727PEE.js +5 -0
- package/dist/preview/{chunk.NGDXH66B.js → chunk.V3K32XD7.js} +1 -1
- package/dist/preview/{chunk.QIV65FWE.js → chunk.V5VQCANB.js} +1 -1
- package/dist/preview/{chunk.RCM7NOPF.js → chunk.VEP4EJ2N.js} +1 -1
- package/dist/preview/chunk.VKJAGZNU.js +2 -0
- package/dist/preview/{chunk.N2K25KH3.js → chunk.VMBIFUYX.js} +1 -1
- package/dist/preview/{chunk.MUKDKVVC.js → chunk.VO6DBVZR.js} +1 -1
- package/dist/preview/{chunk.UUBYFBPN.js → chunk.VTUMPH4Z.js} +1 -1
- package/dist/preview/{chunk.3Q75TIGL.js → chunk.VXZFW52D.js} +1 -1
- package/dist/preview/{chunk.USZPOOLZ.js → chunk.VYPR2MZO.js} +1 -1
- package/dist/preview/chunk.W77OH637.js +1 -0
- package/dist/preview/{chunk.HPAGOEZG.js → chunk.WERBD5ZR.js} +1 -1
- package/dist/preview/{chunk.WUKHYLQT.js → chunk.WODEO2JF.js} +2 -2
- package/dist/preview/{chunk.JACGQ2PR.js → chunk.WUQOSVQU.js} +2 -2
- package/dist/preview/{chunk.N6MVK3KD.js → chunk.WVN62OMH.js} +1 -1
- package/dist/preview/{chunk.Z5AB2DBF.js → chunk.WZEA2UK6.js} +1 -1
- package/dist/preview/{chunk.VJXXCUKS.js → chunk.X2M7IOQA.js} +1 -1
- package/dist/preview/chunk.X5WIS4BC.js +1 -0
- package/dist/preview/{chunk.UHI3D7JC.js → chunk.XDPIS7RS.js} +1 -1
- package/dist/preview/{chunk.VIYECFKZ.js → chunk.XNW7PUAF.js} +1 -1
- package/dist/preview/chunk.XPML6T3P.js +1 -0
- package/dist/preview/{chunk.XEKLEHC3.js → chunk.Y2QDZLSY.js} +1 -1
- package/dist/preview/{chunk.2NB7U4EW.js → chunk.YJM23BJL.js} +1 -1
- package/dist/preview/chunk.YLGSXLXF.js +1 -0
- package/dist/preview/chunk.YLI6I6XP.js +1 -0
- package/dist/preview/chunk.YRYEWVNP.js +1 -0
- package/dist/preview/chunk.Z2TYCMBT.js +5 -0
- package/dist/preview/chunk.ZAFIZXGX.js +1 -0
- package/dist/preview/{chunk.I4JBWTZM.js → chunk.ZBYLAC3B.js} +1 -1
- package/dist/preview/chunk.ZOS5APMD.js +1 -0
- package/dist/preview/{chunk.TGVUIFKD.js → chunk.ZQCGDTQ3.js} +1 -1
- package/dist/preview/chunk.ZRIDKFTV.js +1 -0
- package/dist/preview/index.html +45 -45
- package/dist/preview/page.js +3 -3
- package/package.json +6 -6
- package/dist/preview/chunk.242EUAPE.js +0 -1
- package/dist/preview/chunk.2FGYWAID.js +0 -1
- package/dist/preview/chunk.4EEWBCT2.js +0 -1
- package/dist/preview/chunk.6CRRPXKP.js +0 -1
- package/dist/preview/chunk.6RID3OWK.js +0 -1
- package/dist/preview/chunk.A4UIM35E.js +0 -1
- package/dist/preview/chunk.DL26BKT7.js +0 -1
- package/dist/preview/chunk.H7POIT3V.js +0 -1
- package/dist/preview/chunk.HFYUAK5Z.js +0 -6
- package/dist/preview/chunk.HPUN5DKZ.js +0 -117
- package/dist/preview/chunk.J2CR4RRH.js +0 -1
- package/dist/preview/chunk.J4IULZFD.js +0 -1
- package/dist/preview/chunk.JHEVGLKB.js +0 -345
- package/dist/preview/chunk.JLBGJSCZ.js +0 -1
- package/dist/preview/chunk.JYJ4LZJJ.js +0 -5
- package/dist/preview/chunk.L3A6YLMT.js +0 -21
- package/dist/preview/chunk.LOZJQ5ZX.js +0 -1
- package/dist/preview/chunk.MUPO5S2A.js +0 -47
- package/dist/preview/chunk.O6F3K6CU.js +0 -1
- package/dist/preview/chunk.OVTCW3AI.js +0 -1
- package/dist/preview/chunk.QHYXXZRD.js +0 -1
- package/dist/preview/chunk.S2U5CEP4.js +0 -1
- package/dist/preview/chunk.SADG5RMV.js +0 -1
- package/dist/preview/chunk.SCYQSXW4.js +0 -1
- package/dist/preview/chunk.T3BWINOF.js +0 -1
- package/dist/preview/chunk.TNESS3LQ.js +0 -2
- package/dist/preview/chunk.UTWPZULC.js +0 -1
- package/dist/preview/chunk.V4KLBSC4.js +0 -1
- package/dist/preview/chunk.V5MYKNL7.js +0 -5
- package/dist/preview/chunk.VDAMCTNL.js +0 -1
- package/dist/preview/chunk.W4HBRXMY.js +0 -1
- package/dist/preview/chunk.XFZKP4IF.js +0 -2
- package/dist/preview/chunk.XQTMO5PW.js +0 -1
- package/dist/preview/chunk.Z7BCIYDW.js +0 -1
- package/dist/preview/chunk.ZOR6FKNI.js +0 -1
- package/dist/preview/chunk.ZTMEESII.js +0 -1
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
var Dt="en-US",Fe=/^\d{4}-\d{2}-\d{2}$/,qn=/^\d{4}(-\d\d){2}[T ]\d\d:\d\d(:[\d.]+)?(Z|[+-][\d:]+)?$/,Ef=n=>!Number.isNaN(Date.parse(n)),H=(n,e=Date.now())=>{let t=Hn(n);return t?Ft(e,t).day:new Date(e).toISOString().slice(0,10)},Hn=n=>De(n)??Te,pn,hn,gn,Te;function xd(n){pn=mn(n.reader),hn=mn(n.app),gn=De(n.readerTimeZone),Te=De(n.appTimeZone)}function wd(n,e){let t=[pn,hn,gn,Te];n.reader!==void 0&&(pn=mn(n.reader)),n.app!==void 0&&(hn=mn(n.app)),n.readerTimeZone!==void 0&&(gn=De(n.readerTimeZone)),n.appTimeZone!==void 0&&(Te=De(n.appTimeZone));try{return e()}finally{[pn,hn,gn,Te]=t}}var _o=n=>pn??mn(n)??hn??Dt,Yn=n=>gn??De(n)??Te,kd=n=>Yn(n)??Intl.DateTimeFormat().resolvedOptions().timeZone??"UTC",Sd=/^\s*([+\-−]|\d)/;var Tt=new Map;function De(n){if(n&&!Tt.has(n)){let e=!1;try{new Intl.DateTimeFormat(Dt,{timeZone:n}),e=!Sd.test(n)}catch{}Tt.set(n,e)}return n&&Tt.get(n)?n:void 0}var $e=new Map;function mn(n){if(n&&!$e.has(n)){let e=!1;try{e=Intl.DateTimeFormat.supportedLocalesOf(n).length>0}catch{}$e.set(n,e)}return n&&$e.get(n)?n:void 0}function he(n,e,t,r){let o=`${t=_o(t)}${r?"#":"@"}${JSON.stringify(e)}`,i=$e.get(o);return i||$e.set(o,i=r?new Intl.NumberFormat(t,e):new Intl.DateTimeFormat(t,e)),i.format(n).replace(/ /g," ")}var Re="UTC",Jn=n=>Date.UTC(+n.slice(0,4),+n.slice(5,7)-1,+n.slice(8,10));function ge(n,e){return Fe.test(n)?he(Jn(n),{year:"numeric",month:"short",day:"numeric",timeZone:Re},e):n}function Ft(n,e){let t=`wall@${e??""}`,r=$e.get(t);r||$e.set(t,r=new Intl.DateTimeFormat("en-US",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",hourCycle:"h23",...e?{timeZone:e}:{}}));let o=Object.fromEntries(r.formatToParts(n).map(i=>[i.type,i.value]));return{day:`${o.year}-${o.month}-${o.day}`,minutes:Number(o.hour)%24*60+Number(o.minute)}}function Ao(n,e,t){let r=Date.UTC(+n.slice(0,4),+n.slice(5,7)-1,+n.slice(8,10),0,e),o=i=>{let s=Ft(i,t);return $d(s.day,s.minutes)-Math.floor(i/6e4)*6e4};return r-o(r-o(r))}var $d=(n,e)=>Date.UTC(+n.slice(0,4),+n.slice(5,7)-1,+n.slice(8,10),0,e),Oo=n=>/[Z+-][\d:]*$/.test(n.slice(16));function Eo(n,e,t,r,o=!1){if(!qn.test(n))return n;let i=Oo(n),s=Date.parse(n.replace(" ","T")+(i?"":"Z"));if(Number.isNaN(s))return n;let a=i?Yn(r):Re;return he(s,{...e,hour:"numeric",minute:"2-digit",...i&&o?{timeZoneName:"short"}:{},...a?{timeZone:a}:{}},t)}var Zt=(n,e,t)=>Eo(n,{year:"numeric",month:"short",day:"numeric"},e,t,!0),Rd=(n,e,t)=>Eo(n,{},e,t);function _d(n,e){if(Fe.test(n))return n;if(!qn.test(n))return;if(!Oo(n))return n.slice(0,10);let t=Date.parse(n.replace(" ","T"));return Number.isNaN(t)?void 0:Ft(t,Yn(e)).day}function se(n,e,t={maximumFractionDigits:2}){return Number.isFinite(n)?he(n,t,e,!0):String(n)}function Ad(n,e={},t){return Fe.test(n)?he(Jn(n),{weekday:e.weekday??"long",month:"short",day:"numeric",...e.year?{year:"numeric"}:{},timeZone:Re},t):n}function Od(n,e){return Fe.test(n)?he(Jn(n),{month:"short",day:"numeric",timeZone:Re},e):n}function Ed(n,e={},t){if(!/^\d{4}-\d{2}/.test(n))return n;let r=e.year??!e.short;return he(Jn(`${n.slice(0,7)}-01`),{month:e.short?"short":"long",...r?{year:e.short?"2-digit":"numeric"}:{},timeZone:Re},t)}var Pd=(n,e="short",t)=>he(Date.UTC(1970,0,4+n),{weekday:e,timeZone:Re},t),zd=(n,e)=>he(Date.UTC(1970,0,1,0,Math.round(n)),{hour:"numeric",minute:"2-digit",timeZone:Re},e),Md=/(?<![\w-])(\d{4}-\d{2}-\d{2})(?![\w-]|:)/g;function Lt(n,e){return n.includes("-")?n.replace(Md,t=>ge(t,e)):n}var yn=n=>n.charAt(0).toUpperCase()+n.slice(1),Po=(n,e="and")=>n.length>1?`${n.slice(0,-1).join(", ")} ${e} ${n.at(-1)}`:n[0]??"";function Nd(n,e){return{...e,kind:n,edges:e.edges??{}}}function Ct(n,e,t){let r=n?.lifecycle;if(!r)return!0;let o=e[r.field];return r.retired==="date"?typeof o!="string"||o.length===0?!0:o>=(t??H()):!r.retired.includes(o)}function F(n,e){if(n?.label)return n.label(e);let t=e.label;return typeof t=="string"&&t.length>0?t:e.id}function Id(n){return n.title??C(n.name)}function C(n){let e=n.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_-]+/g," ").trim().toLowerCase();return yn(e)}function jd(n,e,t){let r=n.tryDefinition(e);return`${se(t)} ${t===1?K(r,e):ne(n,e).toLowerCase()}`}function ne(n,e){return n.tryDefinition(e)?.plural??`${C(e).toLowerCase()}s`}function Td(n,e){return yn(ne(n,e))}function Dd(n,e){let t=ne(n,e);return`All ${/^[A-Z][a-z]/.test(t)?t.charAt(0).toLowerCase()+t.slice(1):t}`}function Xn(n,e){let t=n?.computed&&Object.hasOwn(n.computed,e)?n.computed[e]:void 0;return n?.display?.labels?.[e]??(typeof t=="object"?t.label:void 0)??(e==="label"?"Name":C(e))}var Fd=/^(u[nt]i|use|usu|uti|ubiq|eu|ewe|one|once)/,Zd=/^(hour|honest|hono[ur]r?|heir)/;function zo(n){let e=C(n).toLowerCase();return Zd.test(e)?"an":Fd.test(e)?"a":/^[aeiou]/.test(e)?"an":"a"}function Ze(n){return`${zo(n)} ${C(n).toLowerCase()}`}function K(n,e){return n?.noun??C(e).toLowerCase()}function Kt(n){let e=Object.values(n).filter(r=>typeof r=="number");return Object.entries(n).filter(([r,o])=>e.indexOf(+r)===-1).map(([r,o])=>o)}function Ut(n,e="|"){return n.map(t=>Yt(t)).join(e)}function No(n,e){return typeof e=="bigint"?e.toString():e}var Bt=class{constructor(e){this._getter=e,this._value=void 0}get value(){let e=this._getter;return e!==void 0&&(this._value=e(),this._getter=void 0),this._value}};function Io(n){return new Bt(n)}function jo(n){return n==null}function Vt(n){let e=n.startsWith("^")?1:0,t=n.endsWith("$")?n.length-1:n.length;return n.slice(e,t)}function To(n,e){let t=n/e,r=Math.round(t),o=4*Number.EPSILON*Math.max(Math.abs(t),1);return Math.abs(t-r)<o?0:t-r}var Mo=Symbol("evaluating");function Do(n,e,t){let r;Object.defineProperty(n,e,{get(){if(r!==Mo)return r===void 0&&(r=Mo,r=t()),r},set(o){Object.defineProperty(n,e,{value:o})},configurable:!0})}function et(n,e,t){Object.defineProperty(n,e,{value:t,writable:!0,enumerable:!0,configurable:!0})}function Fo(n){let e=Object.getOwnPropertyDescriptor(n,"shape");return e?.get?e.get.raw:e?.value}function Wt(n){return Fo(n._zod.def)??n._zod.def.shape}function Zo(n,e,t){Object.defineProperty(n,e,{get(){let r=t();return et(this,e,r),r},enumerable:!0,configurable:!0})}function Lo(n,e,t){e in n?et(n,e,t):n[e]=t}function Ld(n,e,t,r){let o=Wt(e);for(let i of t){let s=Object.getOwnPropertyDescriptor(o,i);s.enumerable&&(s.get?Zo(n,i,()=>{let a=e._zod.def.shape[i];return r?r(a,i):a}):Lo(n,i,r?r(s.value,i):s.value))}}function Cd(n,e){for(let t of Reflect.ownKeys(e)){let r=Object.getOwnPropertyDescriptor(e,t);r.enumerable&&(r.get?Zo(n,t,()=>e[t]):Lo(n,t,r.value))}}function Co(...n){let e={};for(let t of n){let r=Object.getOwnPropertyDescriptors(t);Object.assign(e,r)}return Object.defineProperties({},e)}var qt="captureStackTrace"in Error?Error.captureStackTrace:(...n)=>{};function Qn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Ht(n){if(Qn(n)===!1)return!1;let e=n.constructor;if(e===void 0||typeof e!="function")return!0;let t=e.prototype;return!(Qn(t)===!1||Object.prototype.hasOwnProperty.call(t,"isPrototypeOf")===!1)}var Go=new Set(["string","number","symbol"]);function vn(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Le(n,e,t){let r=new n._zod.constr(e??n._zod.def);return(!e||t?.parent)&&(r._zod.parent=n),r}function M(n){let e=n;if(!e)return{};if(typeof e=="string")return{error:()=>e};if(e?.message!==void 0){if(e?.error!==void 0)throw new Error("Cannot specify both `message` and `error` params");e.error=e.message}return delete e.message,typeof e.error=="string"?{...e,error:()=>e.error}:e}function Yt(n){return typeof n=="bigint"?n.toString()+"n":typeof n=="string"?`"${n}"`:`${n}`}function Bo(n){return Object.keys(n).filter(e=>n[e]._zod.optin!==void 0&&n[e]._zod.optout==="optional")}var Ko={safeint:[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]};function Uo(n,e){if(!Ht(e))throw new Error("Invalid input to extend: expected a plain object");let t=n._zod.def.checks;if(t&&t.length>0){let o=Wt(n);for(let i of Reflect.ownKeys(e))if(Object.getOwnPropertyDescriptor(o,i)!==void 0)throw new Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}return Le(n,Co(n._zod.def,{shape:Gd(n,e)}))}function Gd(n,e){let t={};return Ld(t,n,Reflect.ownKeys(Wt(n))),Cd(t,e),t}function ae(n,e=0){if(n.aborted===!0)return!0;for(let t=e;t<n.issues.length;t++)if(n.issues[t]?.continue!==!0)return!0;return!1}function Vo(n,e=0){if(n.aborted===!0)return!0;for(let t=e;t<n.issues.length;t++)if(n.issues[t]?.continue===!1)return!0;return!1}function ye(n,e){return e.map(t=>{var r;return(r=t).path??(r.path=[]),t.path.unshift(n),t})}function bn(n){return typeof n=="string"?n:n?.message}function Jt(n,e,t){var r;for(let o=e;o<n.length;o++)(r=n[o]).schema??(r.schema=t)}function de(n,e,t){var r;let o=n.inst?._zod?.traits;o?.has("$ZodType")&&(o.has("$ZodCheck")?(r=n).schema??(r.schema=n.inst):n.schema=n.inst);let i=n.schema!==n.inst?n.schema?._zod.def?.error:void 0,s=n.message?n.message:bn(n.inst?._zod.def?.error?.(n))??bn(i?.(n))??bn(e?.error?.(n))??bn(t.customError?.(n))??bn(t.localeError?.(n))??"Invalid input",a={};for(let d of Object.keys(n))d==="inst"||d==="schema"||d==="continue"||d==="input"||d==="__proto__"||(a[d]=n[d]);return a.path??(a.path=[]),a.message=s,e?.reportInput&&(a.input=n.input),a}var Bd=/[\uD800-\uDBFF]/;function Xt(n){let e=n.length;if(!Bd.test(n))return e;let t=e;for(let r=0;r<e-1;r++)(n.charCodeAt(r)&64512)===55296&&(n.charCodeAt(r+1)&64512)===56320&&(t--,r++);return t}function Qt(n){return Array.isArray(n)?"array":typeof n=="string"?"string":"unknown"}function Wo(n){let e=typeof n;switch(e){case"number":return Number.isNaN(n)?"nan":"number";case"object":{if(n===null)return"null";if(Array.isArray(n))return"array";let t=n;if(t&&Object.getPrototypeOf(t)!==Object.prototype&&"constructor"in t&&t.constructor)return t.constructor.name}}return e}function xn(...n){let[e,t,r]=n;return typeof e=="string"?{message:e,code:"custom",input:t,inst:r}:{...e}}function qo(n,e){for(let t in e){let r=Object.getOwnPropertyDescriptor(e,t);r.get?Object.defineProperty(n,t,{...r,enumerable:!1}):Kd(n,t,r.value)}}function _e(n,e,t,r=!0){return Object.defineProperty(n,e,{configurable:!0,writable:!0,enumerable:r,value:t}),t}function er(n,e,t){return _e(n,e,t,!1)}function Kd(n,e,t){Object.defineProperty(n,e,{configurable:!0,get(){return this==null?t:_e(this,e,t.bind(this))},set(r){_e(this,e,r)}})}function Ud(n,e){let t=Object.getPrototypeOf(n);return e in t?void 0:t}var Gt,me=!1,Vd={configurable:!0,get(){me=!0}};function U(n,e,t){let r=Object.getPrototypeOf(n._zod);if(e in r&&Gt!==n._zod){Gt=void 0;return}Gt=n._zod,Object.defineProperty(r,e,{configurable:!0,get(){Object.defineProperty(this,e,Vd);let o=me;me=!1;try{let i=t(this);return me?delete this[e]:Object.defineProperty(this,e,{configurable:!0,writable:!0,value:i}),me=me||o,i}catch(i){throw delete this[e],me=me||o,i}},set(o){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:o})}})}function Ho(n,e,t,r){let o=Ud(n,e);o&&Object.defineProperty(o,e,{configurable:!0,get(){let i={configurable:!0,writable:!0,enumerable:r,value:void 0};return Object.defineProperty(this,e,i),i.value=t(this),Object.defineProperty(this,e,i),i.value},set(i){Object.defineProperty(this,e,{configurable:!0,writable:!0,enumerable:r,value:i})}})}var Yo;var nr={value:void 0,enumerable:!1},Jo="captureStackTrace"in Error?Error:null;function Wd(n){let e=Jo;if(e){let t=e.stackTraceLimit;if(typeof t=="number"){try{e.stackTraceLimit=0}catch{return Jo=null,new n}try{return new n}finally{e.stackTraceLimit=t}}}return new n}function O(n,e,t,r){let o={};function i(c){this.def=c,this.constr=p,this.traits=new Set}i.prototype=o;let s=t,a=s&&new WeakSet;function d(c,f){if(c._zod){if(c._zod.traits.has(n))return}else{nr.value=new i(f);try{Object.defineProperty(c,"_zod",nr)}finally{nr.value=void 0}}if(c._zod.traits.add(n),e(c,f),a){let h=Object.getPrototypeOf(c),v=c._zod.constr.prototype,y=h;for(;y&&y!==v;)y=Object.getPrototypeOf(y);let S=y??h;a.has(S)||(a.add(S),qo(S,s))}let g=p.prototype;for(let h in g)Object.prototype.hasOwnProperty.call(g,h)&&(h in c||(c[h]=g[h].bind(c)))}let l=r?.Parent??Object;class u extends l{}Object.defineProperty(u,"name",{value:n});function p(c){let f=r?.Parent?Wd(u):this;d(f,c);let g=f._zod.deferred;if(g){for(let v of g)v();f._zod.deferred=void 0}let h=globalThis.__zod_globalConfig?.postProcessor;return h&&h(f),f}return Object.defineProperty(p,"init",{value:d}),Object.defineProperty(p,Symbol.hasInstance,{value:c=>r?.Parent&&c instanceof r.Parent?!0:c?._zod?.traits?.has(n)}),Object.defineProperty(p,"name",{value:n}),p}var ue=class extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}};(Yo=globalThis).__zod_globalConfig??(Yo.__zod_globalConfig={});var Ce=globalThis.__zod_globalConfig;function J(n){return n&&Object.assign(Ce,n),Ce}function qd(){let n=this._zod;return n.message??(n.message=JSON.stringify(n.def,No,2)),n.message}function Hd(n){this._zod.message=n}var Yd={get:qd,set:Hd,enumerable:!0,configurable:!0},rr={value:void 0,enumerable:!1},Xo=new WeakSet([Object.prototype,Error.prototype]),Qo=(n,e)=>{n.name="$ZodError",rr.value=e,Object.defineProperty(n,"issues",rr),rr.value=void 0,Object.defineProperty(n,"message",Yd);let t=Object.getPrototypeOf(n);Xo.has(t)||(Xo.add(t),Object.defineProperty(t,"toString",{configurable:!0,enumerable:!1,get(){let r=()=>this.message;return Object.defineProperty(this,"toString",{value:r,configurable:!0,writable:!0}),r},set(r){Object.defineProperty(this,"toString",{value:r,configurable:!0,writable:!0})}}))},Df=O("$ZodError",Qo),wn=O("$ZodError",Qo,void 0,{Parent:Error});var Xd=n=>{let e=(t,r,o,i)=>{let s=o?{...o,async:!1}:{async:!1},a=t._zod.run({value:r,issues:[]},s);if(a instanceof Promise)throw new ue;if(a.issues.length){let d=new(i?.Err??n)(a.issues.map(l=>de(l,s,J())));throw qt(d,i?.callee??e),d}return a.value};return e},or=Xd(wn),Qd=n=>{let e=async(t,r,o,i)=>{let s=o?{...o,async:!0}:{async:!0},a=t._zod.run({value:r,issues:[]},s);if(a instanceof Promise&&(a=await a),a.issues.length){let d=new(i?.Err??n)(a.issues.map(l=>de(l,s,J())));throw qt(d,i?.callee??e),d}return a.value};return e},ir=Qd(wn),ec=n=>(e,t,r)=>{let o=r?{...r,async:!1}:{async:!1},i=e._zod.run({value:t,issues:[]},o);if(i instanceof Promise)throw new ue;return i.issues.length?ei(n,i.issues,o):{success:!0,data:i.value}},sr=ec(wn);function ei(n,e,t){let r;return{success:!1,get error(){return r||(r=new n(e.map(o=>de(o,t,J()))),e=void 0,t=void 0),r},set error(o){r=o,e=void 0,t=void 0}}}var nc=n=>async(e,t,r)=>{let o=r?{...r,async:!0}:{async:!0},i=e._zod.run({value:t,issues:[]},o);return i instanceof Promise&&(i=await i),i.issues.length?ei(n,i.issues,o):{success:!0,data:i.value}},ar=nc(wn);var ni=/^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/;var ti=/^https?$/;var ri=/^[\s\S]{0,}$/;var dr=/^-?\d+(?:\.\d+)?$/,oi=/^(?:true|false)$/i,ii=/^null$/i;var X=O("$ZodCheck",(n,e)=>{var t;n._zod??(n._zod={}),n._zod.def=e,(t=n._zod).onattach??(t.onattach=[])});var si=n=>{let e=n.value;return!jo(e)&&e.length!==void 0},nt={number:"number",bigint:"bigint",object:"date"},ai=O("$ZodCheckLessThan",(n,e)=>{X.init(n,e);let t=nt[typeof e.value];n._zod.check=r=>{(e.inclusive?r.value<=e.value:r.value<e.value)||r.issues.push({origin:nt[typeof r.value]??t,code:"too_big",maximum:typeof e.value=="object"?e.value.getTime():e.value,input:r.value,inclusive:e.inclusive,inst:n,continue:!e.abort})}}),di=O("$ZodCheckGreaterThan",(n,e)=>{X.init(n,e);let t=nt[typeof e.value];n._zod.check=r=>{(e.inclusive?r.value>=e.value:r.value>e.value)||r.issues.push({origin:nt[typeof r.value]??t,code:"too_small",minimum:typeof e.value=="object"?e.value.getTime():e.value,input:r.value,inclusive:e.inclusive,inst:n,continue:!e.abort})}}),ci=O("$ZodCheckMultipleOf",(n,e)=>{X.init(n,e),n._zod.check=t=>{if(typeof t.value!=typeof e.value)throw new Error("Cannot mix number and bigint in multiple_of check.");(typeof t.value=="bigint"?e.value!==BigInt(0)&&t.value%e.value===BigInt(0):To(t.value,e.value)===0)||t.issues.push({origin:typeof t.value,code:"not_multiple_of",divisor:e.value,input:t.value,inst:n,continue:!e.abort})}}),ui=O("$ZodCheckNumberFormat",(n,e)=>{X.init(n,e),e.format=e.format||"float64";let t=e.format?.includes("int"),r=t?"int":"number",[o,i]=Ko[e.format];n._zod.check=s=>{let a=s.value;if(t){if(!Number.isInteger(a)){s.issues.push({expected:r,format:e.format,code:"invalid_type",continue:!1,input:a,inst:n});return}if(!Number.isSafeInteger(a)){a>0?s.issues.push({input:a,code:"too_big",maximum:Number.MAX_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:n,origin:r,inclusive:!0,continue:!e.abort}):s.issues.push({input:a,code:"too_small",minimum:Number.MIN_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:n,origin:r,inclusive:!0,continue:!e.abort});return}}a<o&&s.issues.push({origin:"number",input:a,code:"too_small",minimum:o,inclusive:!0,inst:n,continue:!e.abort}),a>i&&s.issues.push({origin:"number",input:a,code:"too_big",maximum:i,inclusive:!0,inst:n,continue:!e.abort})}});var li=O("$ZodCheckMaxLength",(n,e)=>{var t;X.init(n,e),(t=n._zod.def).when??(t.when=si),n._zod.check=r=>{let o=r.value,i=o.length;if((typeof o=="string"&&i>e.maximum?Xt(o):i)<=e.maximum)return;let a=Qt(o);r.issues.push({origin:a,code:"too_big",maximum:e.maximum,inclusive:!0,input:o,inst:n,continue:!e.abort})}}),fi=O("$ZodCheckMinLength",(n,e)=>{var t;X.init(n,e),(t=n._zod.def).when??(t.when=si),n._zod.check=r=>{let o=r.value,i=o.length;if((typeof o=="string"&&i>=e.minimum&&i<e.minimum*2?Xt(o):i)>=e.minimum)return;let a=Qt(o);r.issues.push({origin:a,code:"too_small",minimum:e.minimum,inclusive:!0,input:o,inst:n,continue:!e.abort})}});var ur=O("$ZodCheckStringFormat",(n,e)=>{var t,r;X.init(n,e),e.pattern?(t=n._zod).check??(t.check=o=>{e.pattern.lastIndex=0,!e.pattern.test(o.value)&&o.issues.push({origin:"string",code:"invalid_format",format:e.format,input:o.value,...e.pattern?{pattern:e.pattern.toString()}:{},inst:n,continue:!e.abort})}):(r=n._zod).check??(r.check=()=>{})}),pi=O("$ZodCheckRegex",(n,e)=>{ur.init(n,e),n._zod.check=t=>{e.pattern.lastIndex=0,!e.pattern.test(t.value)&&t.issues.push({origin:"string",code:"invalid_format",format:"regex",input:t.value,pattern:e.pattern.toString(),inst:n,continue:!e.abort})}});var gi={major:4,minor:6,patch:5};var G=O("$ZodType",(n,e)=>{var t;n??(n={}),n._zod.def=e,n._zod.bag=n._zod.bag||{},n._zod.version=gi;let r=n._zod.def.checks,o=n._zod.traits.has("$ZodCheck")?[n,...r??[]]:r?.length?[...r]:[];for(let i of o)for(let s of i._zod.onattach)s(n);if(o.length===0)(t=n._zod).deferred??(t.deferred=[]),n._zod.deferred?.push(()=>{n._zod.run=n._zod.parse});else{let i=(a,d,l)=>{if(a.memo)return a;let u=ae(a),p;for(let c of d){if(c._zod.def.when){if(Vo(a)||!c._zod.def.when(a))continue}else if(u)continue;let f=a.issues.length,g=c._zod.check(a);if(g instanceof Promise&&l?.async===!1)throw new ue;if(p||g instanceof Promise)p=(p??Promise.resolve()).then(async()=>{await g,a.issues.length!==f&&(Jt(a.issues,f,n),u||(u=ae(a,f)))});else{if(a.issues.length===f)continue;Jt(a.issues,f,n),u||(u=ae(a,f))}}return p?p.then(()=>a):a},s=(a,d,l)=>{if(ae(a))return a.aborted=!0,a;let u=i(d,o,l);if(u instanceof Promise){if(l.async===!1)throw new ue;return u.then(p=>n._zod.parse(p,l))}return n._zod.parse(u,l)};n._zod.run=(a,d)=>{if(d.skipChecks)return n._zod.parse(a,d);if(d.direction==="backward"){let u=n._zod.parse({value:a.value,issues:[]},{...d,skipChecks:!0});return u instanceof Promise?u.then(p=>s(p,a,d)):s(u,a,d)}let l=n._zod.parse(a,d);if(l instanceof Promise){if(d.async===!1)throw new ue;return l.then(u=>i(u,o,d))}return i(l,o,d)}}},{get"~standard"(){return er(this,"~standard",rc(this))},set"~standard"(n){_e(this,"~standard",n)}}),wi=(n,e)=>n.issues.length?{issues:n.issues.map(t=>de(t,e,J()))}:{value:n.value};async function tc(n,e){let t={async:!0};return wi(await n._zod.run({value:e,issues:[]},t),t)}function rc(n){return{validate:e=>{let t={async:!1};try{let r=n._zod.run({value:e,issues:[]},t);if(!(r instanceof Promise))return wi(r,t)}catch{}return tc(n,e)},vendor:"zod",version:1}}var lr=O("$ZodString",(n,e)=>{G.init(n,e),n._zod.pattern=e.pattern??ri,n._zod.parse=(t,r)=>{if(e.coerce)try{t.value=String(t.value)}catch{}return typeof t.value=="string"||t.issues.push({expected:"string",code:"invalid_type",input:t.value,inst:n}),t}}),ot=O("$ZodStringFormat",(n,e)=>{ur.init(n,e),lr.init(n,e)});var ki=O("$ZodEmail",(n,e)=>{e.pattern??(e.pattern=ni),ot.init(n,e)}),Si=1,tt=2;function oc(n){try{return typeof URL<"u"&&typeof URL.canParse=="function"?URL.canParse(n):(new URL(n),!0)}catch{return!1}}function ic(n,e){return!("normalize"in e)&&!("hostname"in e)&&!("protocol"in e)?oc(n)||tt:sc(n,e)}function sc(n,e){if(!e.normalize&&e.protocol?.source===ti.source&&!/^https?:\/\//i.test(n))return Si;try{if(typeof URL<"u"){let t=URL;if(typeof t.parse=="function")return t.parse(n)??tt}return new URL(n)}catch{return tt}}var ac=/[\t\n\r]/g;function mi(n){return n.replace(ac,"")}function dc(n,e){return e.lastIndex=0,e.test(n.hostname)}function cc(n,e){return e.lastIndex=0,e.test(n.protocol.endsWith(":")?n.protocol.slice(0,-1):n.protocol)}var $i=O("$ZodURL",(n,e)=>{ot.init(n,e),n._zod.check=t=>{try{let r=t.value.trim(),o=ic(r,e);if(o===Si){t.issues.push({code:"invalid_format",format:"url",note:"Invalid URL format",input:t.value,inst:n,continue:!e.abort});return}if(o===tt){t.issues.push({code:"invalid_format",format:"url",input:t.value,inst:n,continue:!e.abort});return}if(o===!0){t.value=mi(r);return}e.hostname&&!dc(o,e.hostname)&&t.issues.push({code:"invalid_format",format:"url",note:"Invalid hostname",pattern:e.hostname.source,input:t.value,inst:n,continue:!e.abort}),e.protocol&&!cc(o,e.protocol)&&t.issues.push({code:"invalid_format",format:"url",note:"Invalid protocol",pattern:e.protocol.source,input:t.value,inst:n,continue:!e.abort}),t.value=e.normalize?o.href:mi(r);return}catch{t.issues.push({code:"invalid_format",format:"url",input:t.value,inst:n,continue:!e.abort})}}});var fr=O("$ZodNumber",(n,e)=>{G.init(n,e),n._zod.pattern=dr,n._zod.parse=(t,r)=>{if(e.coerce)try{t.value=Number(t.value)}catch{}let o=t.value;if(typeof o=="number"&&!Number.isNaN(o)&&Number.isFinite(o))return t;let i=typeof o=="number"?Number.isNaN(o)?"NaN":Number.isFinite(o)?void 0:String(o):void 0;return t.issues.push({expected:"number",code:"invalid_type",input:o,inst:n,...i?{received:i}:{}}),t}}),Ri=O("$ZodNumberFormat",(n,e)=>{ui.init(n,e),fr.init(n,e)}),_i=O("$ZodBoolean",(n,e)=>{G.init(n,e),n._zod.pattern=oi,n._zod.parse=(t,r)=>{if(e.coerce)try{t.value=!!t.value}catch{}let o=t.value;return typeof o=="boolean"||t.issues.push({expected:"boolean",code:"invalid_type",input:o,inst:n}),t}});var Ai=O("$ZodNull",(n,e)=>{G.init(n,e),n._zod.pattern=ii,n._zod.values=new Set([null]),n._zod.parse=(t,r)=>{let o=t.value;return o===null||t.issues.push({expected:"null",code:"invalid_type",input:o,inst:n}),t}});var Oi=O("$ZodUnknown",(n,e)=>{G.init(n,e),n._zod.parse=t=>t}),Ei=O("$ZodNever",(n,e)=>{G.init(n,e),n._zod.parse=(t,r)=>(t.issues.push({expected:"never",code:"invalid_type",input:t.value,inst:n}),t)});function yi(n,e,t){n.issues.length&&e.issues.push(...ye(t,n.issues)),e.value[t]=n.value}var Pi=O("$ZodArray",(n,e)=>{G.init(n,e);let t=Ce.memoizer;t?.attach(n),n._zod.parse=(r,o)=>{let i=r.value;if(!Array.isArray(i))return r.issues.push({expected:"array",code:"invalid_type",input:i,inst:n}),r;r.value=t?t.alloc(n,r,Array(i.length),o):Array(i.length);let s=[],a=o?.abortEarly;for(let d=0;d<i.length;d++){let l=i[d],u=e.element._zod.run({value:l,issues:[]},o);if(u instanceof Promise)s.push(u.then(p=>yi(p,r,d)));else if(yi(u,r,d),a&&u.issues.length!==0&&ae(u))break}return s.length?Promise.all(s).then(()=>r):r}});function rt(n,e,t,r,o,i){let s=t in r,a=i==="optional";if(!(!s&&a&&o==="optional")){if(n.issues.length){if(o!==void 0&&a&&!s)return;e.issues.push(...ye(t,n.issues))}if(!s&&o===void 0){n.issues.length||e.issues.push({code:"invalid_type",expected:"nonoptional",input:void 0,path:[t]});return}n.value===void 0?(s||o==="defaulted"&&!a)&&(e.value[t]=void 0):e.value[t]=n.value}}var uc=[];function lc(n){let e=Object.keys(n.shape),t=Object.getOwnPropertySymbols(n.shape),r=t.length?t:uc,o=r.length?[...e,...r]:e;for(let s of o)if(!n.shape?.[s]?._zod?.traits?.has("$ZodType"))throw new Error(`Invalid element at key "${String(s)}": expected a Zod schema`);let i=Bo(n.shape);return{...n,allKeys:o,symbolKeys:r,keySet:new Set(e),numKeys:e.length,optionalKeys:new Set(i)}}function fc(n,e,t,r,o,i,s){let a=[],d=o.keySet,l=o.catchall._zod,u=l.def.type,p=l.optin,c=l.optout,f=0;for(let g in e){if(s&&t.issues.length!==f){if(ae(t,f))break;f=t.issues.length}if(d.has(g))continue;if(g==="__proto__"){u==="never"&&a.push(g);continue}if(u==="never"){a.push(g);continue}let h=l.run({value:e[g],issues:[]},r);h instanceof Promise?n.push(h.then(v=>rt(v,t,g,e,p,c))):rt(h,t,g,e,p,c)}return a.length&&t.issues.push({code:"unrecognized_keys",keys:a,input:e,inst:i,continue:!0}),n.length?Promise.all(n).then(()=>t):t}var zi=O("$ZodObject",(n,e)=>{G.init(n,e);let t=Object.getOwnPropertyDescriptor(e,"shape"),r=t?.get?t.get.raw:e.shape??{};if(r){let l=()=>{let u={...r};return Object.defineProperty(e,"shape",{value:u}),l.raw=u,u};l.raw=r,Object.defineProperty(e,"shape",{get:l})}let o=Io(()=>lc(e));U(n,"propValues",l=>{let u=l.def.shape,p={};for(let c in u){let f=u[c]._zod;if(f.values){Object.prototype.hasOwnProperty.call(p,c)||et(p,c,new Set);for(let g of f.values)p[c].add(g);f.optin!==void 0&&p[c].add(void 0)}}return p});let i=Qn,s=e.catchall,a,d=Ce.memoizer;d?.attach(n),n._zod.parse=(l,u)=>{a??(a=o.value);let p=l.value;if(!i(p))return l.issues.push({expected:"object",code:"invalid_type",input:p,inst:n}),l;l.value=d?d.alloc(n,l,{},u):{};let c=[],f=a.shape,g=u?.abortEarly,h=l.issues.length;for(let v of a.allKeys){if(g&&l.issues.length!==h){if(ae(l,h))break;h=l.issues.length}if(v==="__proto__")continue;let y=f[v],S=y._zod.optin,A=y._zod.optout,m=y._zod.run({value:p[v],issues:[]},u);m instanceof Promise?c.push(m.then(k=>rt(k,l,v,p,S,A))):rt(m,l,v,p,S,A)}return s?fc(c,p,l,u,o.value,n,g===!0):c.length?Promise.all(c).then(()=>l):l}});function bi(n,e,t,r){for(let i of n)if(i.issues.length===0)return e.value=i.value,e;let o=n.filter(i=>!ae(i));return o.length===1?(e.value=o[0].value,o[0]):(e.issues.push({code:"invalid_union",input:e.value,inst:t,errors:n.map(i=>i.issues.map(s=>de(s,r,J())))}),e)}var Mi=O("$ZodUnion",(n,e)=>{G.init(n,e),U(n,"optin",r=>r.def.options.some(o=>o._zod.optin==="defaulted")?"defaulted":r.def.options.some(o=>o._zod.optin!==void 0)?"optional":void 0),U(n,"optout",r=>r.def.options.some(o=>o._zod.optout==="optional")?"optional":void 0),U(n,"values",r=>{if(r.def.options.every(o=>o._zod.values))return new Set(r.def.options.flatMap(o=>Array.from(o._zod.values)))}),U(n,"pattern",r=>{if(r.def.options.every(o=>o._zod.pattern)){let o=r.def.options.map(i=>i._zod.pattern);return new RegExp(`^(${o.map(i=>Vt(i.source)).join("|")})$`)}});let t=e.options.length===1?e.options[0]._zod.run:null;n._zod.parse=(r,o)=>{if(t)return t(r,o);let i=!1,s=[];for(let a of e.options){let d=a._zod.run({value:r.value,issues:[]},o);if(d instanceof Promise)s.push(d),i=!0;else{if(d.issues.length===0)return d;s.push(d)}}return i?Promise.all(s).then(a=>bi(a,r,n,o)):bi(s,r,n,o)}});var Ni=O("$ZodRecord",(n,e)=>{G.init(n,e);let t=Ce.memoizer;t?.attach(n),n._zod.parse=(r,o)=>{let i=r.value;if(!Ht(i))return r.issues.push({expected:"record",code:"invalid_type",input:i,inst:n}),r;let s=[],a=e.keyType._zod.values;if(a&&!e.partial){r.value=t?t.alloc(n,r,{},o):{};let d=new Set;for(let u of a)if(typeof u=="string"||typeof u=="number"||typeof u=="symbol"){if(d.add(typeof u=="number"?u.toString():u),u==="__proto__")continue;let p=e.keyType._zod.run({value:u,issues:[]},o);if(p instanceof Promise)throw new Error("Async schemas not supported in object keys currently");if(p.issues.length){r.issues.push({code:"invalid_key",origin:"record",issues:p.issues.map(g=>de(g,o,J())),input:u,path:[u],inst:n});continue}let c=p.value;if(c==="__proto__")continue;let f=e.valueType._zod.run({value:i[u],issues:[]},o);f instanceof Promise?s.push(f.then(g=>{g.issues.length&&r.issues.push(...ye(u,g.issues)),r.value[c]=g.value})):(f.issues.length&&r.issues.push(...ye(u,f.issues)),r.value[c]=f.value)}let l;for(let u in i)if(!d.has(u))if(e.mode==="loose"){if(u==="__proto__")continue;r.value[u]=i[u]}else l=l??[],l.push(u);l&&l.length>0&&r.issues.push({code:"unrecognized_keys",input:i,inst:n,keys:l,continue:!0})}else{r.value=t?t.alloc(n,r,{},o):{};let d;for(let l of Reflect.ownKeys(i)){if(l==="__proto__"||!Object.prototype.propertyIsEnumerable.call(i,l))continue;let u=e.keyType._zod.run({value:l,issues:[]},o);if(u instanceof Promise)throw new Error("Async schemas not supported in object keys currently");if(typeof l=="string"&&dr.test(l)&&u.issues.length){let g=e.keyType._zod.run({value:Number(l),issues:[]},o);if(g instanceof Promise)throw new Error("Async schemas not supported in object keys currently");g.issues.length===0&&(u=g)}if(u.issues.length){e.mode==="loose"?r.value[l]=i[l]:a?(d=d??[],d.push(l)):r.issues.push({code:"invalid_key",origin:"record",issues:u.issues.map(g=>de(g,o,J())),input:l,path:[l],inst:n});continue}let c=u.value;if(c==="__proto__")continue;let f=e.valueType._zod.run({value:i[l],issues:[]},o);f instanceof Promise?s.push(f.then(g=>{g.issues.length&&r.issues.push(...ye(l,g.issues)),r.value[c]=g.value})):(f.issues.length&&r.issues.push(...ye(l,f.issues)),r.value[c]=f.value)}d&&d.length>0&&r.issues.push({code:"unrecognized_keys",input:i,inst:n,keys:d,continue:!0})}return s.length?Promise.all(s).then(()=>r):r}});var Ii=O("$ZodEnum",(n,e)=>{G.init(n,e);let t=Kt(e.entries),r=new Set(t);n._zod.values=r,U(n,"pattern",o=>{let i=Kt(o.def.entries).filter(s=>Go.has(typeof s));return new RegExp(i.length?`^(${i.map(s=>vn(s.toString())).join("|")})$`:"^[^\\s\\S]$")}),n._zod.parse=(o,i)=>{let s=o.value;return r.has(s)||o.issues.push({code:"invalid_value",values:t,input:s,inst:n}),o}}),ji=O("$ZodLiteral",(n,e)=>{G.init(n,e);let t=new Set(e.values);n._zod.values=t,U(n,"pattern",r=>{let o=r.def.values;return new RegExp(o.length?`^(${o.map(i=>typeof i=="string"?vn(i):i?vn(i.toString()):String(i)).join("|")})$`:"^[^\\s\\S]$")}),n._zod.parse=(r,o)=>{let i=r.value;return t.has(i)||r.issues.push({code:"invalid_value",values:e.values,input:i,inst:n}),r}});function vi(n,e){return n.value=e.issues.length?void 0:e.value,n}var Ti=O("$ZodOptional",(n,e)=>{G.init(n,e),U(n,"optin",t=>t.def.innerType._zod.optin==="defaulted"?"defaulted":"optional"),n._zod.optout="optional",U(n,"values",t=>{let r=t.def.innerType._zod.values;return r?new Set([...r,void 0]):void 0}),U(n,"pattern",t=>{let r=t.def.innerType._zod.pattern;return r?new RegExp(`^(${Vt(r.source)})?$`):void 0}),n._zod.parse=(t,r)=>{if(t.value===void 0){if(e.innerType._zod.optin!=="defaulted")return t;let o=e.innerType._zod.run({value:t.value,issues:[]},r);return o instanceof Promise?o.then(i=>vi(t,i)):vi(t,o)}return e.innerType._zod.run(t,r)}});var Di=O("$ZodLazy",(n,e)=>{G.init(n,e),Do(n._zod,"innerType",()=>{let t=e;return t._cachedInner||(t._cachedInner=e.getter()),t._cachedInner}),U(n,"pattern",t=>t.innerType?._zod?.pattern),U(n,"propValues",t=>t.innerType?._zod?.propValues),U(n,"optin",t=>t.innerType?._zod?.optin??void 0),U(n,"optout",t=>t.innerType?._zod?.optout??void 0),n._zod.parse=(t,r)=>n._zod.innerType._zod.run(t,r)}),Fi=O("$ZodCustom",(n,e)=>{X.init(n,e),G.init(n,e),n._zod.parse=(t,r)=>t,n._zod.check=t=>{let r=t.value,o=e.fn(r);if(o instanceof Promise)return o.then(i=>xi(i,t,r,n));xi(o,t,r,n)}});function xi(n,e,t,r){if(!n){let o={code:"custom",input:t,inst:r,path:[...r._zod.def.path??[]],continue:!r._zod.def.abort};r._zod.def.params&&(o.params=r._zod.def.params),e.issues.push(xn(o))}}var pc=()=>{let n={string:{unit:"characters",verb:"to have"},file:{unit:"bytes",verb:"to have"},array:{unit:"items",verb:"to have"},set:{unit:"items",verb:"to have"},map:{unit:"entries",verb:"to have"}};function e(i){return n[i]??null}let t={regex:"input",email:"email address",url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO datetime",date:"ISO date",time:"ISO time",duration:"ISO duration",ipv4:"IPv4 address",ipv6:"IPv6 address",mac:"MAC address",cidrv4:"IPv4 range",cidrv6:"IPv6 range",base64:"base64-encoded string",base64url:"base64url-encoded string",json_string:"JSON string",e164:"E.164 number",currency_code:"currency code",credit_card:"credit card number",iban:"IBAN",jwt:"JWT",template_literal:"input"},r={nan:"NaN"};function o(i,s){return i==="number"&&typeof s=="number"&&!Number.isFinite(s)?String(s):r[i]??i}return i=>{switch(i.code){case"invalid_type":{let s=o(i.expected),a=Wo(i.input),d=o(a,i.input);return`Invalid input: expected ${s}, received ${d}`}case"invalid_value":return i.values.length===1?`Invalid input: expected ${Yt(i.values[0])}`:`Invalid option: expected one of ${Ut(i.values,"|")}`;case"too_big":{let s=i.exact?"exactly ":i.inclusive?"<=":"<",a=e(i.origin);return a?`Too big: expected ${i.origin??"value"} to have ${s}${i.maximum.toString()} ${a.unit??"elements"}`:`Too big: expected ${i.origin??"value"} to be ${s}${i.maximum.toString()}`}case"too_small":{let s=i.exact?"exactly ":i.inclusive?">=":">",a=e(i.origin);return a?`Too small: expected ${i.origin} to have ${s}${i.minimum.toString()} ${a.unit}`:`Too small: expected ${i.origin} to be ${s}${i.minimum.toString()}`}case"invalid_format":{let s=i;return s.format==="starts_with"?`Invalid string: must start with "${s.prefix}"`:s.format==="ends_with"?`Invalid string: must end with "${s.suffix}"`:s.format==="includes"?`Invalid string: must include "${s.includes}"`:s.format==="regex"?`Invalid string: must match pattern ${s.pattern}`:`Invalid ${t[s.format]??i.format}`}case"not_multiple_of":return`Invalid number: must be a multiple of ${i.divisor}`;case"unrecognized_keys":return`Unrecognized key${i.keys.length>1?"s":""}: ${Ut(i.keys,", ")}`;case"invalid_key":return`Invalid key in ${i.origin}`;case"invalid_union":return i.options&&Array.isArray(i.options)&&i.options.length>0?`Invalid discriminator value. Expected ${i.options.map(a=>`'${a}'`).join(" | ")}`:i.inclusive===!1?"Invalid input: more than one option matched":"Invalid input";case"invalid_element":return`Invalid value in ${i.origin}`;default:return"Invalid input"}}};function Zi(){return{localeError:pc()}}var Li;var pr=class{constructor(){this._map=new WeakMap,this._idmap=new Map}add(e,...t){let r=t[0];return this._map.set(e,r),r&&typeof r=="object"&&"id"in r&&this._idmap.set(r.id,e),this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(e){let t=this._map.get(e);return t&&typeof t=="object"&&"id"in t&&this._idmap.delete(t.id),this._map.delete(e),this}get(e){let t=e._zod.parent;if(t){let r={...this.get(t)??{}};delete r.id;let o={...r,...this._map.get(e)};return Object.keys(o).length?o:void 0}return this._map.get(e)}has(e){return this._map.has(e)}};function Ci(){return new pr}(Li=globalThis).__zod_globalRegistry??(Li.__zod_globalRegistry=Ci());var Ge=globalThis.__zod_globalRegistry;function Gi(n){return n.checks&&(n.checks=[...n.checks]),n}function Bi(n,e){return new n(Gi({type:"string",...M(e)}))}function Ki(n,e){return new n({type:"string",format:"email",check:"string_format",abort:!1,...M(e)})}function Ui(n,e){return new n({type:"string",format:"url",check:"string_format",abort:!1,...M(e)})}function Vi(n,e){return new n(Gi({type:"number",checks:[],...M(e)}))}function Wi(n,e){return new n({type:"number",check:"number_format",abort:!1,format:"safeint",...M(e)})}function qi(n,e){return new n({type:"boolean",...M(e)})}function Hi(n,e){return new n({type:"null",...M(e)})}function Yi(n){return new n({type:"unknown"})}function Ji(n,e){return new n({type:"never",...M(e)})}function Xi(n,e){return new ai({check:"less_than",...M(e),value:n,inclusive:!0})}function Qi(n,e){return new di({check:"greater_than",...M(e),value:n,inclusive:!0})}function yc(n,e){return new ci({check:"multiple_of",...M(e),value:n})}function hr(n,e){return new li({check:"max_length",...M(e),maximum:n})}function kn(n,e){return new fi({check:"min_length",...M(e),minimum:n})}function Sn(n,e){return new pi({check:"string_format",format:"regex",...M(e),pattern:n})}function es(n,e,t){return new n({type:"custom",check:"custom",fn:e,...M(t)})}function ns(n,e){let t=bc(r=>(r.addIssue=o=>{if(typeof o=="string")r.issues.push(xn(o,r.value,t._zod.def));else{let i=o;i.fatal&&(i.continue=!1),i.code??(i.code="custom"),"input"in i||(i.input=r.value),i.inst??(i.inst=t),i.continue??(i.continue=!t._zod.def.abort),r.issues.push(xn(i))}},n(r.value,r)),e);return t}function bc(n,e){let t=new X({check:"custom",...M(e)});return t._zod.check=n,t}function ts(n){let e=new X({check:"describe"});return e._zod.onattach=[t=>{let r=Ge.get(t)??{};Ge.add(t,{...r,description:n})}],e._zod.check=()=>{},e}var V=O("ZodMiniType",(n,e)=>{if(!n._zod)throw new Error("Uninitialized schema in ZodMiniType.");G.init(n,e),n.def=e,n.type=e.type},{get with(){return this.check},set with(n){_e(this,"with",n)},parse(n,e){return or(this,n,e,{callee:this.parse})},parseAsync(n,e){return ir(this,n,e,{callee:this.parseAsync})},safeParse(n,e){return sr(this,n,e)},safeParseAsync(n,e){return ar(this,n,e)},check(...n){let e=this.def;return this.clone({...e,checks:[...e.checks??[],...n.map(t=>typeof t=="function"?{_zod:{check:t,def:{check:"custom"},onattach:[]}}:t)]},{parent:!0})},clone(n,e){return Le(this,n,e)},brand(){return this},register(n,e){return n.add(this,e),this},apply(n,...e){return e.length===0?n(this):n(this,...e)}}),os=O("ZodMiniString",(n,e)=>{lr.init(n,e),V.init(n,e)});function D(n){return Bi(os,n)}var is=O("ZodMiniStringFormat",(n,e)=>{ot.init(n,e),os.init(n,e)}),wc=O("ZodMiniEmail",(n,e)=>{ki.init(n,e),is.init(n,e)});function Zg(n){return Ki(wc,n)}var kc=O("ZodMiniURL",(n,e)=>{$i.init(n,e),is.init(n,e)});function Lg(n){return Ui(kc,n)}var ss=O("ZodMiniNumber",(n,e)=>{fr.init(n,e),V.init(n,e)});function $n(n){return Vi(ss,n)}var Sc=O("ZodMiniNumberFormat",(n,e)=>{Ri.init(n,e),ss.init(n,e)});function Cg(n){return Wi(Sc,n)}var $c=O("ZodMiniBoolean",(n,e)=>{_i.init(n,e),V.init(n,e)});function Gg(n){return qi($c,n)}var Rc=O("ZodMiniNull",(n,e)=>{Ai.init(n,e),V.init(n,e)});function Bg(n){return Hi(Rc,n)}var _c=O("ZodMiniUnknown",(n,e)=>{Oi.init(n,e),V.init(n,e)});function gr(){return Yi(_c)}var Ac=O("ZodMiniNever",(n,e)=>{Ei.init(n,e),V.init(n,e)});function Oc(n){return Ji(Ac,n)}var Ec=O("ZodMiniArray",(n,e)=>{Pi.init(n,e),V.init(n,e)});function Kg(n,e){return new Ec({type:"array",element:n,...M(e)})}var mr=O("ZodMiniObject",(n,e)=>{zi.init(n,e),V.init(n,e),Ho(n,"shape",t=>t._zod.def.shape,!1)});function Be(n,e){let t={type:"object",shape:n??{},...M(e)};return new mr(t)}function Ke(n,e){return new mr({type:"object",shape:n,catchall:Oc(),...M(e)})}function Ug(n,e){return new mr({type:"object",shape:n,catchall:gr(),...M(e)})}function as(n,e){return Uo(n,e)}var Pc=O("ZodMiniUnion",(n,e)=>{Mi.init(n,e),V.init(n,e)});function Vg(n,e){return new Pc({type:"union",options:n,...M(e)})}var rs=O("ZodMiniRecord",(n,e)=>{Ni.init(n,e),V.init(n,e)});function Wg(n,e,t){return!e||!e._zod?new rs({type:"record",keyType:D(),valueType:n,...M(e)}):new rs({type:"record",keyType:n,valueType:e,...M(t)})}var zc=O("ZodMiniEnum",(n,e)=>{Ii.init(n,e),V.init(n,e),n.options=[...n._zod.values]});function ds(n,e){let t=Array.isArray(n)?Object.fromEntries(n.map(r=>[r,r])):n;return new zc({type:"enum",entries:t,...M(e)})}var Mc=O("ZodMiniLiteral",(n,e)=>{ji.init(n,e),V.init(n,e)});function cs(n,e){return new Mc({type:"literal",values:Array.isArray(n)?n:[n],...M(e)})}var Nc=O("ZodMiniOptional",(n,e)=>{Ti.init(n,e),V.init(n,e)});function Q(n){return new Nc({type:"optional",innerType:n})}var Ic=O("ZodMiniLazy",(n,e)=>{Di.init(n,e),V.init(n,e)});function qg(n){return new Ic({type:"lazy",getter:n})}var jc=O("ZodMiniCustom",(n,e)=>{Fi.init(n,e),V.init(n,e)});function it(n,e={}){return es(jc,n,e)}function Hg(n,e){return ns(n,e)}var Yg=ts;J().localeError||J(Zi());var I=n=>typeof n=="object"&&n!==null?n._zod?.def:void 0,Tc=n=>{if(typeof n!="object"||n===null||!("_zod"in n))return;let e=Ge.get(n)?.description;return typeof e=="string"?e:void 0};var Dc=(n,e)=>n?.src?.(e)??e,st=n=>typeof n=="string"&&n.length<2049&&/^(?![^/?#]*:|\/\/)(?!(?:.*\/)?\.\.?(?:[/?#]|$))(?!.*%2e)[^\\\s]+$/i.test(n),yr=(n,e=1)=>e>0&&n===void 0||Number.isInteger(n)&&n>=e;function br(n){let e=n??{};return st(e.href)&&typeof e.name=="string"&&/^.{1,255}$/s.test(e.name)&&/^[\w.+-]{1,60}\/[\w.+-]{1,60}$/.test(e.type)&&yr(e.bytes,0)&&yr(e.width)&&yr(e.height)&&(e.caption===void 0||typeof e.caption=="string"&&e.caption.length<501)&&(e.poster===void 0||st(e.poster))&&(e.captions===void 0||st(e.captions))&&(e.duration===void 0||typeof e.duration=="number"&&Number.isFinite(e.duration)&&e.duration>0)&&(e.at===void 0||us(e.at)!==void 0)}function us(n){return typeof n=="string"&&n.length<41&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(:\d{2}(\.\d{1,9})?)?(Z|[+-]\d{2}:?\d{2})$/.test(n)&&Number.isFinite(Date.parse(n))?n:void 0}var ls=n=>n.type.startsWith("image/"),fs=n=>n.type.startsWith("video/");function Fc(n){let e=n.duration===void 0?0:Math.round(n.duration);if(e<1)return"a video";if(e<60)return`a ${e}-second video`;let t=Math.round(e/60);return t<60?`a ${t}-minute video`:`a ${Math.floor(t/60)}-hour${t%60>0?` ${t%60}-minute`:""} video`}var Zc=(n,e)=>e==="image"?ls(n):e==="video"?fs(n):!0,Lc=n=>`${n==="image"?"an image":n==="video"?"a video":"a file"} the host stored, at a path on this host`,Rn=n=>(Array.isArray(n)?n:[n]).filter(br),ps=Symbol.for("@graview/core:file"),Cc=(n,e)=>(Object.defineProperty(I(n),ps,{value:e,enumerable:!0}),n);function hs(n){let e=I(n);return e?.[ps]??(e?.innerType?hs(e.innerType):void 0)}var Gc=()=>({href:D(),name:D(),type:D(),bytes:$n(),width:Q($n()),height:Q($n()),caption:Q(D()),poster:Q(D()),duration:Q($n()),captions:Q(D()),at:Q(D())});function Jm(n){return Cc(Be(Gc()).check(it(e=>br(e)&&Zc(e,n),Lc(n))),n)}var at=/^(?:https?:\/\/[^\s<>"'`\\]+|@?[A-Za-z0-9][\w.~-]*(?:\/[\w.~-]+)*)$/,dt=n=>typeof n=="string"&&n.length<501&&at.test(n);var gs=n=>typeof n=="object"&&n!==null?n._zod?.def:void 0,Bc=/^@(?:https?:\/\/[^\s<>"'`\\#?]+|[A-Za-z0-9][\w.~-]*(?:\/[\w.~-]+)*)\/[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;function ms(n){if(typeof n!="string"||!n.startsWith("@")||!Bc.test(n))return;let e=n.lastIndexOf("/"),t=n.slice(0,e),r=n.slice(e+1),o=/^@https?:\/\//.test(t)||!t.includes("/")?t.slice(1):t;return dt(o)?{address:o,kind:r}:void 0}var Kc=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*:\S[^\n]{0,199}$/,Uc=n=>`${n.kind}:${n.id}`;function ys(n,e){if(typeof n!="string"||!Kc.test(n))return;let t=n.indexOf(":"),r=n.slice(0,t);return e.kinds.includes(r)?{address:e.address,kind:r,id:n.slice(t+1)}:void 0}function Vc(n,e){return(Array.isArray(n)?n:n==null?[]:[n]).flatMap(r=>{let o=ys(r,e);return o?[o]:[]})}var bs=Symbol.for("@graview/core:linked"),ny=(n,e)=>(Object.defineProperty(gs(n),bs,{value:e,enumerable:!0}),n);function _n(n){let e=gs(n);return e?e[bs]??_n(e.innerType):void 0}function Wc(n){let e=n?.fields?.shape??{},t=new Map;for(let[r,o]of Object.entries(e)){let i=_n(o);i&&t.set(r,i)}return t}function qc(n){if(n.to==="*"||n.to.length===0)return;let e=n.to.map(ms);if(e.some(r=>!r))return;let t=e[0].address;if(!e.some(r=>r.address!==t))return{address:t,kinds:[...new Set(e.map(r=>r.kind))],cardinality:n.cardinality??"many",...n.description?{description:n.description}:{}}}var Hc=n=>n.to!=="*"&&n.to.some(e=>typeof e=="string"&&e.startsWith("@"));function ty(n){return Object.fromEntries(Object.entries(n??{}).filter(([,e])=>!Hc(e)))}function ry(n){let e=new Map;for(let[t,r]of Object.entries(n??{})){let o=qc(r);o&&e.set(t,o)}return e}var vr=new WeakMap;function Yc(n,e){e?vr.set(n,e):vr.delete(n)}var vs=n=>vr.get(n);var ct=["sun","mon","tue","wed","thu","fri","sat"],Jc=["day","week","month","year"],Ve=n=>`${n}Repeat`,On=n=>n.endsWith("Repeat")&&n.length>6?n.slice(0,-6):void 0,ks=/^\d{4}-\d{2}-\d{2}$/,Ss=Symbol.for("@graview/core:repeat");function ut(n){let e=I(n);return!!e&&(e[Ss]===1||ut(e.innerType))}var Xc=n=>(Object.defineProperty(I(n),Ss,{value:1,enumerable:!0}),n),xr=(n,e,t)=>n===void 0||Number.isInteger(n)&&n>=e&&n<=t,xs=(n,e)=>n===void 0||Array.isArray(n)&&n.length<=e&&n.every(t=>typeof t=="string"&&ks.test(t)),Qc=["every","interval","on","until","count","except","continues"],$s=n=>We(n)&&Object.keys(n).every(e=>Qc.includes(e))&&xr(n.interval,1,99)&&xr(n.count,1,1e3)&&xs(n.until===void 0?void 0:[n.until],1)&&xs(n.except,500)&&(n.continues===void 0||typeof n.continues=="string"&&n.continues.length<=200)&&(n.on===void 0||Array.isArray(n.on)&&n.on.length>0&&n.on.length<=31&&n.on.every(e=>n.every==="week"?ct.includes(e):n.every==="month"&&e!==0&&xr(e,-1,31))),sy=()=>Xc(gr().check(it(n=>n===null||$s(n),"how a date repeats, or null"))),An=n=>Date.UTC(+n.slice(0,4),+n.slice(5,7)-1,+n.slice(8,10)),Rs=n=>new Date(n).toISOString().slice(0,10),wr=(n,e)=>Rs(An(n)+e*864e5),ws=(n,e,t)=>{let r=new Date(Date.UTC(n,e+1,0)).getUTCDate();return Rs(Date.UTC(n,e,t<0||t>r?r:t))},We=n=>typeof n=="object"&&n!==null&&Jc.includes(n.every);function Ue(n,e,t={}){let r=n.slice(0,10),o=n.slice(10),i=[];if(!ks.test(r))return i;let s=Math.max(1,e.interval??1),a=e.every,d=t.from&&t.from>r?t.from.slice(0,10):r,l=[e.until,t.to?.slice(0,10)].filter(Boolean).sort()[0],u=t.limit??1e3,p=new Set(e.except??[]),c=+r.slice(0,4),f=+r.slice(5,7)-1,g=+r.slice(8,10),h=wr(r,-new Date(An(r)).getUTCDay()),v=(e.on?.length?e.on:[a==="week"?ct[new Date(An(r)).getUTCDay()]:g]).map(k=>typeof k=="string"?ct.indexOf(k):k),y=a==="day"?1:a==="week"?7:0,S=(+d.slice(0,4)-c)*12+(+d.slice(5,7)-1-f),A=e.count?0:Math.max(0,Math.floor((y?(An(d)-An(y===7?h:r))/864e5/y:a==="month"?S:S/12)/s)-1),m=0;for(let k=0;k<5e4&&i.length<u;k++,A++){let w=A*s,x=a==="day"?[wr(r,w)]:a==="week"?v.map(b=>wr(h,w*7+b)):a==="month"?v.map(b=>ws(c,f+w,b)):[ws(c+w,f,g)];for(let b of[...new Set(x)].sort())if(!(b<r)&&(l&&b>l||e.count&&m>=e.count||(m++,b>=d&&!p.has(b)&&i.push(b+o),i.length>=u)))return i}return i}function _s(n,e,t){if(!We(e)||typeof n!="string")return n;let r=Ue(n,e,{from:t,limit:1})[0];if(r)return r;let o=e.until||e.count?Ue(n,e):[];return o[o.length-1]??n}function eu(n,e,t){let r=n[e],o=n[Ve(e)];return typeof r=="string"&&We(o)?_s(r,o,t):r}function En(n,e){if(n.onBehalfOf){let{onBehalfOf:i,...s}=n;return`${En(s,e)}, for ${En(i,e)}`}if(n.id===void 0)return n.name??(n.kind==="agent"?"an agent":n.kind);let t=e.graph.getNode(n.id);if(t)return F(e.schema.tryDefinition(t.kind),t);let r=e.seats?.find(i=>i.principal.id===n.id);if(r)return r.label;let o=e.people?.find(i=>i.id===n.id&&(i.kind===void 0||i.kind===n.kind));return o?o.name:n.name?n.name:/(^|:)migration$/.test(n.id)?"the upgrade":/[:_/]/.test(n.id)?{human:"somebody",agent:"an agent",rule:"a rule",system:"the system"}[n.kind]:n.id}var qe="$archived",Ae=n=>n?.[qe]===!0,uy=(n,e=!1)=>e==="all"||Ae(n)===e,kr=n=>n===!0||n==="true"?!0:n==="all"?"all":!1,Pn="$leftAlone",lt=new Set([qe,Pn]);var re="\0graview:unset",He=n=>n===void 0||n===re;function zn(n){if(n.op!=="patch-node")return n;let e=t=>Object.fromEntries(Object.entries(t).map(([r,o])=>[r,o===void 0?re:o]));return{...n,before:e(n.before),after:e(n.after)}}function Mn(n){switch(n.op){case"add-node":return{op:"remove-node",node:n.node};case"remove-node":return{op:"add-node",node:n.node};case"patch-node":return{op:"patch-node",id:n.id,before:n.after,after:n.before};case"add-edge":return{op:"remove-edge",edge:n.edge};case"remove-edge":return{op:"add-edge",edge:n.edge}}}function Oe(n){switch(n.op){case"add-node":case"remove-node":return[n.node.id];case"patch-node":return[n.id];case"add-edge":case"remove-edge":return[n.edge.from,n.edge.to]}}var te=class extends Error{constructor(t,r){super(r?`${t}
|
|
2
|
+
\u2192 ${r}`:t);this.hint=r;this.name="SchemaError"}};function nu(n,e){let t=n,r=new Map;for(let a of t){if(r.has(a.kind))throw new te(`Duplicate node kind "${a.kind}"`,"Each kind may be declared once; merge the two defineNode calls.");r.set(a.kind,a)}let o=new Map;for(let a of t)for(let[d,l]of Object.entries(a.edges)){if(l.to!=="*"){for(let p of l.to)if(!r.has(p))throw new te(`Edge "${d}" on "${a.kind}" points at undeclared kind "${p}"`,`Declared kinds: ${[...r.keys()].join(", ")}`)}let u=o.get(d);u?u.from.push(a.kind):o.set(d,{from:[a.kind],decl:l})}let i=new Map;for(let[a,{from:d,decl:l}]of o){let u=d.map(p=>r.get(p).edges[a].to);i.set(a,{kind:a,from:d,to:u.includes("*")?"*":[...new Set(u.flat())],cardinality:l.cardinality??"many",...l.description===void 0?{}:{description:l.description}})}let s=new Map;for(let a of t)s.set(a.kind,as(a.fields,{id:D().check(kn(1)),kind:cs(a.kind)}));return{definitions:t,computed:e,kinds:t.map(a=>a.kind),edgeKinds:[...i.keys()],definition(a){let d=r.get(a);if(!d)throw new te(`Unknown node kind "${String(a)}"`,`Declared kinds: ${[...r.keys()].join(", ")}`);return d},tryDefinition(a){return r.get(a)},edge(a){return i.get(a)},edgeAllowed(a,d,l){let u=r.get(d)?.edges[a];return u?u.to==="*"||u.to.includes(l):!1},parseNode(a){let d=a?.kind;if(typeof d!="string")throw new te("Node is missing a `kind`");let l=s.get(d);if(!l)throw new te(`Unknown node kind "${d}"`,`Declared kinds: ${[...r.keys()].join(", ")}`);let u={},p={};for(let[f,g]of Object.entries(a))lt.has(f)?g===!0&&(p[f]=!0):u[f]=g;let c=l.parse(u);return Object.keys(p).length>0?{...c,...p}:c},__node:void 0}}function z(n){return`${n.kind}\0${n.from}\0${n.to}`}var Nn={addedNodes:[],removedNodes:[],changedNodes:[],addedEdges:[],removedEdges:[],touched:[]};function As(n){return n.addedNodes.length===0&&n.removedNodes.length===0&&n.changedNodes.length===0&&n.addedEdges.length===0&&n.removedEdges.length===0}function tu(n,e){let t=new Set([...Object.keys(n),...Object.keys(e)]),r=[];for(let o of t){let i=n[o],s=e[o];JSON.stringify(i)!==JSON.stringify(s)&&r.push(o)}return r.sort()}function Ye(n,e){let t=new Map(n.nodes.map(c=>[c.id,c])),r=new Map(e.nodes.map(c=>[c.id,c])),o=e.nodes.filter(c=>!t.has(c.id)),i=n.nodes.filter(c=>!r.has(c.id)),s=[];for(let c of n.nodes){let f=r.get(c.id);if(!f||f===c)continue;let g=tu(c,f);g.length>0&&s.push({before:c,after:f,fields:g})}let a=new Map(n.edges.map(c=>[z(c),c])),d=new Map(e.edges.map(c=>[z(c),c])),l=e.edges.filter(c=>!a.has(z(c))),u=n.edges.filter(c=>!d.has(z(c))),p=new Set;for(let c of o)p.add(c.id);for(let c of i)p.add(c.id);for(let c of s)p.add(c.after.id);for(let c of[...l,...u])p.add(c.from),p.add(c.to);return{addedNodes:o,removedNodes:i,changedNodes:s,addedEdges:l,removedEdges:u,touched:[...p].sort()}}function be(n,e,t){let r=new Set(t.flatMap(i=>i.op==="patch-node"?[i.id]:"node"in i?[i.node.id]:[i.edge.from,i.edge.to]));if(r.size===0)return Nn;let o=i=>({nodes:i.nodes.filter(s=>r.has(s.id)),edges:i.edges.filter(s=>r.has(s.from)||r.has(s.to))});return Ye(o(n),o(e))}function ru(n){let e=n?.issues;return!Array.isArray(e)||e.length===0?n instanceof Error?n.message:String(n):e.map(t=>{let r=t.path?.length?C(String(t.path.at(-1))):null,o=t.message??"is not what the declaration allows";return r?`${r}: ${o}`:o}).join("; ")}var N=class extends Error{constructor(t,r){super(r?`${t}
|
|
3
|
+
${r}`:t);this.hint=r;this.name="GraphError"}},B=class extends N{constructor(t,r){super(r);this.id=t;this.name="MissingRecordError"}};function ft(n,e){try{n.parseNode(e);return}catch(t){if(t instanceof te)throw t;let r=t.issues??[];return{fields:new Set(r.flatMap(i=>i.code==="unrecognized_keys"&&i.keys?[...i.keys]:typeof i.path?.[0]=="string"?[i.path[0]]:[""])),error:t}}}var Sr="n\0",$r="e\0",W=class n{constructor(e,t={}){this.schema=e;this.validate=t.validate??!0}nodes=new Map;edges=new Map;outIndex=new Map;inIndex=new Map;rank=0;ranks=new Map;lapsed=new Map;reordered=!1;counts=new Map;archived=new Set;listeners=new Set;validate;static from(e,t,r={}){let o=new n(e,r);return o.load(t),o}load(e){let t=this.snapshot();this.restore(e);let r=Ye(t,this.snapshot());return this.emit(r),r}getNode(e){return this.nodes.get(e)}has(e){return this.nodes.has(e)}allNodes(e){return this.reach([...this.nodes.values()],e,this.held)}count(e,t){return t||this.archived.size?this.nodesOfKind(e,t).length:this.counts.get(e)??0}allEdges(e){return this.reach([...this.edges.values()],e,t=>this.archived.has(t.from)||this.archived.has(t.to))}nodesOfKind(e,t){return this.allNodes(t).filter(r=>r.kind===e)}edgesOfKind(e,t){return this.allEdges(t).filter(r=>r.kind===e)}out(e,t,r){return this.reach(this.resolve(this.outIndex.get(e),t,"to"),r,this.held)}in(e,t,r){return this.reach(this.resolve(this.inIndex.get(e),t,"from"),r,this.held)}neighbors(e,t){let r=new Map;for(let o of[...this.out(e,void 0,t),...this.in(e,void 0,t)])r.set(o.id,o);return[...r.values()]}isArchived(e){return this.archived.has(e)}outEdges(e,t){return this.edgesFrom(this.outIndex.get(e),t)}inEdges(e,t){return this.edgesFrom(this.inIndex.get(e),t)}snapshot(){return{nodes:[...this.nodes.values()],edges:[...this.edges.values()]}}get size(){return{nodes:this.nodes.size,edges:this.edges.size}}applyPrimitives(e,t={}){let r=this.snapshot();try{for(let i of e)this.applyOne(i,t.restoring===!0,t.inPlace===!0);this.settleOrder()}catch(i){throw this.restore(r),i}let o=be(r,this.snapshot(),e);return this.emit(o),o}preview(e,t={}){return n.from(this.schema,this.snapshot(),{validate:this.validate}).applyPrimitives(e,t)}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}restore(e){for(let t of[this.nodes,this.edges,this.outIndex,this.inIndex,this.ranks,this.lapsed,this.counts,this.archived])t.clear();this.reordered=!1;for(let t of e.nodes)this.insertNode(t,!0);for(let t of e.edges)this.insertEdge(t,!0)}tally(e,t){this.counts.set(e,(this.counts.get(e)??0)+t)}place(e,t){let r=t?this.lapsed.get(e):void 0;if(r===void 0){this.ranks.set(e,++this.rank);return}this.ranks.set(e,r),this.lapsed.delete(e),this.reordered=!0}lapse(e){let t=this.ranks.get(e);t!==void 0&&(this.ranks.delete(e),this.lapsed.set(e,t),this.lapsed.size>4096&&this.lapsed.delete(this.lapsed.keys().next().value))}settleOrder(){if(!this.reordered)return;this.reordered=!1;let e=o=>(i,s)=>this.ranks.get(o+i[0])-this.ranks.get(o+s[0]),t=[...this.nodes.entries()].sort(e(Sr));this.nodes.clear();for(let[o,i]of t)this.nodes.set(o,i);let r=[...this.edges.entries()].sort(e($r));this.edges.clear();for(let[o,i]of r)this.edges.set(o,i)}emit(e){if(!(e.addedNodes.length===0&&e.removedNodes.length===0&&e.changedNodes.length===0&&e.addedEdges.length===0&&e.removedEdges.length===0))for(let t of this.listeners)t(e)}applyOne(e,t,r){switch(e.op){case"add-node":this.insertNode(e.node,t,r);return;case"remove-node":{let o=e.node.id,i=this.nodes.get(o);if(!i)throw new B(o,`Cannot remove missing node "${o}"`);for(let s of[...this.outEdges(o),...this.inEdges(o)])this.deleteEdge(s);this.tally(i.kind,-1),this.archived.delete(o),this.nodes.delete(o),this.lapse(Sr+o),this.outIndex.delete(o),this.inIndex.delete(o);return}case"patch-node":{let o=this.nodes.get(e.id);if(!o)throw new B(e.id,`Cannot patch missing node "${e.id}"`);let i={...o};for(let[a,d]of Object.entries(e.after))He(d)?delete i[a]:i[a]=d;let s=t?i:this.checkPatch(o,i,Object.keys(e.after));this.nodes.set(e.id,s),this.archived[Ae(s)?"add":"delete"](e.id),s.kind!==o.kind&&(this.tally(o.kind,-1),this.tally(s.kind,1));return}case"add-edge":this.insertEdge(e.edge,t,r);return;case"remove-edge":{if(!this.edges.has(z(e.edge)))throw new B(z(e.edge),`Cannot remove missing edge ${z(e.edge)}`);this.deleteEdge(e.edge);return}}}check(e){if(!this.validate)return e;try{return this.schema.parseNode(e)}catch(t){throw this.refusal(e,t)}}checkPatch(e,t,r){if(!this.validate)return t;let o=this.schema.tryDefinition(String(t.kind))?.fields?.shape;if(!o)return this.check(t);for(let a of r){if(a==="id"||a==="kind"||lt.has(a))continue;let d=o[a];if(!d){delete t[a];continue}let l=d.safeParse(t[a]);l.success&&(l.data===void 0?delete t[a]:t[a]=l.data)}let i=ft(this.schema,t);if(i===void 0)return t;let s=ft(this.schema,e)?.fields??new Set;if([...i.fields].some(a=>r.includes(a)||!s.has(a)))throw this.refusal(t,i.error);return t}refusal(e,t){if(t instanceof te)return t;{let r=e?.id??"?",o=e?.kind??"?",i=this.schema.tryDefinition(o),s=i&&e&&typeof e=="object"?F(i,e):r;return new N(`${s} does not match what ${o} declares`,ru(t))}}insertNode(e,t,r=!1){if(this.nodes.has(e.id))throw new N(`Duplicate node id "${e.id}"`);this.nodes.set(e.id,t?e:this.check(e)),Ae(e)&&this.archived.add(e.id),this.tally(e.kind,1),this.place(Sr+e.id,r)}insertEdge(e,t,r=!1){let o=this.nodes.get(e.from),i=this.nodes.get(e.to);if(!o||!i){let a=o?e.to:e.from;throw new B(a,`Edge "${e.kind}" references missing node "${a}"`)}if(this.validate&&!t&&!this.schema.edgeAllowed(e.kind,o.kind,i.kind)){let a=this.schema.edge(e.kind);throw new N(`Edge "${e.kind}" is not declared from ${o.kind} to ${i.kind}`,a?`Declared: ${a.from.join("|")} -> ${a.to==="*"?"*":a.to.join("|")}`:`No edge kind "${e.kind}" is declared in this schema`)}let s=z(e);this.edges.has(s)||(this.edges.set(s,e),this.place($r+s,r),this.index(this.outIndex,e.from,s),this.index(this.inIndex,e.to,s))}deleteEdge(e){let t=z(e);this.edges.delete(t),this.lapse($r+t),this.outIndex.get(e.from)?.delete(t),this.inIndex.get(e.to)?.delete(t)}index(e,t,r){(e.get(t)??e.set(t,new Set).get(t)).add(r)}edgesFrom(e,t){if(!e)return[];let r=[];for(let o of e){let i=this.edges.get(o);i&&(t===void 0||i.kind===t)&&r.push(i)}return r}resolve(e,t,r){let o=[];for(let i of this.edgesFrom(e,t)){let s=this.nodes.get(i[r]);s&&o.push(s)}return o}held=e=>this.archived.has(e.id);reach(e,t,r){let o=t?.archived??!1;return o==="all"||!o&&!this.archived.size?e:e.filter(i=>r(i)===o)}};var pt=class extends Error{constructor(t,r){super(`No invariant registered under "${t}" (required by node "${r}")`);this.invariant=t;this.nodeId=r;this.name="UnregisteredInvariantError"}};function ou(n,e){return{...e,name:n}}var ht=class extends Error{constructor(e){super(e),this.name="RuleBudgetError"}};function Os(n,e,t){try{return e().map(r=>r.status?r:{...r,status:"violated"})}catch(r){let o=r instanceof ht,i=r instanceof Error?r.message:String(r),s=n.label??n.name.replace(/-/g," ");return[{invariant:n.name,status:o?"over-budget":"could-not-judge",...t!==void 0?{subjectId:t}:{},label:s,message:`${s} could not be judged: ${i}`,nodeIds:t!==void 0?[t]:[],repairs:[]}]}}function Je(n,e,t={}){let r=t.context??{},o=t.today===void 0?{}:{today:t.today},i=t.onUnregistered??"skip",s=new Set(e.map(c=>c.name)),a=[];for(let c of e)c.scope==="graph"&&a.push(...Os(c,()=>c.evaluate({graph:n,subject:void 0,context:r,...o}),void 0));let d=e.filter(c=>c.scope!=="graph"),l=new Map;for(let c of d){let f=c.scope.kind,g=l.get(f);g?g.push(c):l.set(f,[c])}for(let c of n.allNodes()){let f=n.schema.tryDefinition(c.kind),g=f?.requiresInvariant?.(c)??null;if(t.subjectFilter&&!t.subjectFilter(c,r))continue;if(g!==null&&!s.has(g)){if(i==="throw")throw new pt(g,c.id);continue}let h=!Ct(f,c,t.today);for(let v of l.get(c.kind)??[]){if(h&&v.judgesPast!==!0)continue;let y=v.scope.match;y&&!y(c)||a.push(...Os(v,()=>v.evaluate({graph:n,subject:c,context:r,...o}),c.id))}}let u=new Set,p=a.filter(c=>{let f=`${c.message}|${[...c.nodeIds].sort().join(",")}`;return u.has(f)?!1:(u.add(f),!0)}).map(c=>{let f=Lt(c.message);return f===c.message?c:{...c,message:f}});return Rr?Rr(n,e,p,t.today):p}var Rr;function Ay(n){Rr=n}function iu(n,e){let t=new Set(e);return n.filter(r=>r.nodeIds.some(o=>t.has(o))||r.subjectId!==void 0&&t.has(r.subjectId))}function su(n){let e=new Set(n.map(r=>r.invariant)).size;if(e===0)return"All rules hold";let t=`${e} ${e===1?"rule":"rules"} broken`;return n.length>e?`${t} in ${n.length} places`:t}var gt=(n,e)=>n==="*"||n.includes(e);function T(n){let e=n.onBehalfOf;if(!e)return n;let t=e.roles??[],r=n.roles===void 0?t:n.roles.filter(o=>t.includes(o));return{...n,...e.id!==void 0?{id:e.id}:{},roles:r}}var q=n=>n.kind==="system"&&n.onBehalfOf===void 0,ve=(n,e)=>n.roles==="*"||(e.roles??[]).some(t=>n.roles.includes(t));function Es(n){return Po(n.map(e=>Ze(C(e).toLowerCase())),"or")}function xe(n,e,t,r,o,i,s={},a,d,l){if(!n)return{ok:!0};if(q(e))return{ok:!0};if(e=T(e),o!==void 0){if(xe(n,e,t,r,void 0,i).ok)return{ok:!0};let f=!1;if(o.some(y=>xe(n,e,y,r,void 0,i).ok)){if(!d||i===void 0||e.id!==void 0&&d()===e.id||!l&&n.grants.some(y=>y.roles!=="*"&&ve(y,e)&&o.some(S=>gt(y.mutations,S))))return{ok:!0};f=!0}let g=f?[t]:[t,...o],h=[...new Set(g.flatMap(y=>_r(n,y,r)))].sort(),v=(f?"only on what you made; ":"")+(h.length===0?o.length===0?"no declared act creates or changes it, so no role can":"no role can":`${Es(h)} can`);return{ok:!1,refusal:{mutation:t,...r===void 0?{}:{kind:r},wouldNeed:h,message:Ps(n,g,r,v,s)}}}let u=!1;for(let f of n.grants){if(!ve(f,e)||!gt(f.mutations,t)||f.kinds!==void 0&&f.kinds!=="*"&&(r===void 0||!f.kinds.includes(r))||f.self&&(i===void 0||e.id===void 0||i!==e.id))continue;let g=f.ownEnd?a?.()??[]:[e.id];if(!g.length||g.some(h=>h!==e.id)){u=!0;continue}return{ok:!0}}let p=_r(n,t,r),c=u?"only on your own end of the link":p.length===0?"no role can":`${Es(p)} can`;return{ok:!1,refusal:{mutation:t,...r===void 0?{}:{kind:r},wouldNeed:p,message:Ps(n,[t],r,c,s)}}}function Ps(n,e,t,r,o){let i=[...new Set(e.flatMap(a=>zs(n,a,t)))],s=o.act?.(e[0]);return`Not permitted: ${s?`\u201C${s}\u201D`:e[0]}${t?` on ${Ze(o.noun?.(t)??t)}`:""} \u2014 ${r}.`+(i.length>0?` ${i.join(" ")}`:"")}function zs(n,e,t){return[...new Set(Ms(n,e,t).flatMap(r=>r.describe||[]))]}var Ms=(n,e,t)=>n.grants.filter(r=>gt(r.mutations,e)&&(t===void 0||gt(r.kinds??"*",t)));function _r(n,e,t){let r=Ms(n,e,t);return r.some(o=>o.roles==="*")?[]:[...new Set(r.flatMap(o=>o.roles))].sort()}function Ar(n,e,t){return n?t.filter(r=>{let o=T(e).id;return Or(r).some(i=>xe(n,e,r.name,i,void 0,o,void 0,()=>[o??[]].flat()).ok)}):t}var Or=n=>n.subject&&n.subject.kinds!=="*"?n.subject.kinds:[void 0];var ee=class extends Error{constructor(t,r="refused"){super(t);this.sentence=t;this.reason=r;this.name="ActRefusal"}};var In=class{constructor(e,t,r){this.present=e;this.timeline=t;this.unversioned=r}nodes=new Map;edges=new Map;touching=new Map;seq=Number.MAX_SAFE_INTEGER;wrote=new Map;begin(e){this.seq=e,this.wrote.clear()}writerOf(e){return t=>{let r=`${e}\0${t}`;return this.wrote.has(r)?this.wrote.get(r):this.timeline?.writers?.writerAt(e,t,this.seq)}}note(e,t){let r=e.op==="add-node"?e.node.id:e.op==="patch-node"?e.id:"";if(r===""||this.unversioned?.has(r))return;let o=e.op==="add-node"?Object.keys(e.node):Object.keys(e.after);for(let i of o)i!=="id"&&i!=="kind"&&this.wrote.set(`${r}\0${i}`,t(r,i))}node(e){return this.nodes.has(e)?this.nodes.get(e)??void 0:this.present.getNode(e)}setNode(e,t){this.nodes.set(e,t)}setEdge(e,t){let r=z(e);this.edges.set(r,t?e:null);for(let o of[e.from,e.to]){let i=this.touching.get(o);i||this.touching.set(o,i=new Set),i.add(r)}}incident(e){let t=new Map;for(let r of[...this.present.outEdges(e),...this.present.inEdges(e)]){let o=z(r);this.edges.has(o)||t.set(o,r)}for(let r of this.touching.get(e)??[]){let o=this.edges.get(r);o&&t.set(r,o)}return[...t.values()]}undo(e){switch(e.op){case"add-node":this.setNode(e.node.id,null);return;case"remove-node":this.setNode(e.node.id,e.node);return;case"patch-node":{if(this.unversioned?.has(e.id))return;let t=this.node(e.id);if(!t)return;this.setNode(e.id,Ns(t,e.before));return}case"add-edge":this.setEdge(e.edge,!1);return;case"remove-edge":this.setEdge(e.edge,!0);return}}apply(e){switch(e.op){case"add-node":this.setNode(e.node.id,e.node);return;case"remove-node":for(let t of this.incident(e.node.id))this.setEdge(t,!1);this.setNode(e.node.id,null);return;case"patch-node":{if(this.unversioned?.has(e.id))return;let t=this.node(e.id);if(!t)return;this.setNode(e.id,Ns(t,e.after));return}case"add-edge":this.setEdge(e.edge,!0);return;case"remove-edge":this.setEdge(e.edge,!1);return}}};function Ns(n,e){let t={...n};for(let[r,o]of Object.entries(e))He(o)?delete t[r]:t[r]=o;return t}var au=n=>n.op==="add-node"||n.op==="remove-node"?n.node.id:n.op==="patch-node"?n.id:void 0;function Er(n,e,t,r){let o=u=>{let p=e.node(u);return p?t.served(p,e.writerOf(u))!==void 0:t.sees?.(u)??!1},i=au(n);if(i===void 0){let u=n.edge,p=t.edgeClean(u)&&o(u.from)&&o(u.to);return e.apply(n),{primitives:p?[n]:[],faithful:!0}}let s=e.node(i),a=s?t.served(s,e.writerOf(i)):void 0;e.apply(n),e.note(n,r);let d=e.node(i),l=d?t.served(d,e.writerOf(i)):void 0;if(!a&&!l)return{primitives:[],faithful:!1};if(!a&&l){let u=e.incident(i).filter(c=>t.edgeClean(c)&&o(c.from===i?c.to:c.from)).map(c=>({op:"add-edge",edge:c})),p=n.op==="add-node"&&l===n.node&&u.length===0;return{primitives:p?[n]:[{op:"add-node",node:l},...u],faithful:p}}if(a&&!l){let u=n.op==="remove-node"&&a===s;return{primitives:u?[n]:[{op:"remove-node",node:a}],faithful:u}}if(n.op==="patch-node"){let u=(c,f)=>g=>g in c==(f!==void 0&&g in f);if(Object.keys(n.after).every(c=>u(a,s)(c)&&u(l,d)(c)))return{primitives:[n],faithful:!0};let p=c=>Object.fromEntries(Object.keys(n.after).map(f=>[f,f in c?c[f]:re]));return{primitives:[{op:"patch-node",id:i,before:p(a),after:p(l)}],faithful:!1}}return{primitives:[{op:"remove-node",node:a},{op:"add-node",node:l}],faithful:!1}}function Is(n,e,t){if(n.length===0)return[];let r=e.log.all(),o=r[0]?.seq??0,i=n.every(c=>r[c.seq-o]?.id===c.id),s=new In(e.present,e);if(!i)return s.begin(e.log.length??o+r.length),n.map(c=>{let f=T(c.author).id,g=c.primitives.map(h=>Er(h,s,t,()=>f));return{op:c,primitives:g.flatMap(h=>h.primitives),faithful:g.every(h=>h.faithful)}});let a=new Set(n.map(c=>c.seq)),d=Number.POSITIVE_INFINITY,l=Number.NEGATIVE_INFINITY;for(let c of a)c<d&&(d=c),c>l&&(l=c);d-=o,l-=o;let u=du(r,d,e.present,t),p=u?new In(e.present,e,u.unversioned):s;for(let c=r.length-1;c>=d;c--){let f=r[c].primitives;for(let g=f.length-1;g>=0;g--)p.undo(f[g])}return cu(n,r,d,l,a,p,u?.judge??t,e)}function du(n,e,t,r){let{sees:o,names:i}=r;if(!o||!i)return;let s=new Set,a=new Set,d=new Set,l=(p,c)=>{s.has(p)||a.has(p)||(o(p)?i(c)?(a.add(p),d.delete(p)):d.add(p):(s.add(p),d.delete(p)))};for(let p=e;p<n.length;p++)for(let c of n[p].primitives)c.op==="add-node"||c.op==="remove-node"?l(c.node.id,c.node):c.op==="patch-node"&&(l(c.id,c.before),l(c.id,c.after));for(let p of d){let c=t.getNode(p);c&&i(c)&&(d.delete(p),a.add(p))}return{unversioned:new Set([...d,...s]),judge:{...r,served:(p,c)=>d.has(p.id)?p:s.has(p.id)?void 0:r.served(p,c)}}}function cu(n,e,t,r,o,i,s,a){let d=new Map;for(let l=t;l<=r;l++){let u=e[l];if(i.begin(u.seq),!o.has(u.seq)){for(let f of u.primitives)i.apply(f);continue}let p=(f,g)=>a.writers?.writerAt(f,g,u.seq+1),c=u.primitives.map(f=>Er(f,i,s,p));d.set(u.seq,{op:u,primitives:c.flatMap(f=>f.primitives),faithful:c.every(f=>f.faithful)})}return n.map(l=>d.get(l.seq))}function Dy(n,e,t,r){let o=new In(e.present,e);return o.begin(e.log.length??e.log.all().length),n.flatMap(i=>Er(i,o,t,()=>r).primitives)}var Ts="A change you cannot see",Ds={kind:"system",id:"withheld",name:"Someone"};function Xe(n){return n.withheld===!0}var jn=Oe,Fs=(n,e)=>Object.entries(n).some(([t,r])=>t!=="id"&&t!=="kind"&&j(r,e));function Zs(n){if(typeof n!="function")return n;let e=n,t=r=>e(r.id)&&!Fs(r,e)?r:void 0;return{sees:e,shows:e,served:t,servedWith:t,optional:()=>!1,kindOf:()=>{}}}function j(n,e){if(typeof n=="string")return!e(n);if(n===null||typeof n!="object")return!1;if(Array.isArray(n)){for(let t=0;t<n.length;t++)if(j(n[t],e))return!0;return!1}for(let t in n)if(Object.hasOwn(n,t)&&(!e(t)||j(n[t],e)))return!0;return!1}function Ls(n,e){let t=r=>!e(r);return n.primitives.some(r=>jn(r).some(t))||[...n.writes,...n.reads].some(t)||n.mutation!==null&&j(n.mutation.args,e)}function uu(n,e){if(jn(n).every(e.shows))switch(n.op){case"add-node":{let t=e.served(n.node);return t?t===n.node?n:{op:"add-node",node:t}:void 0}case"remove-node":{let t=n.node;return Fs(t,e.sees)?{op:"remove-node",node:Object.fromEntries(Object.entries(t).filter(([r,o])=>r==="id"||r==="kind"||!j(o,e.sees)))}:n}case"patch-node":{let t=e.kindOf(n.id),r={};for(let[i,s]of Object.entries(n.after))if(!j(s,e.sees))r[i]=s;else if(t!==void 0&&e.optional(t,i))r[i]=re;else return;let o=Object.fromEntries(Object.entries(n.before).filter(([,i])=>!j(i,e.sees)));return{op:"patch-node",id:n.id,before:o,after:r}}case"add-edge":case"remove-edge":return j(n.edge,e.sees)?void 0:n}}function Pr(n,e,t){let r=Zs(e),o=i=>r.shows(i)&&Cs(r,i);return{id:n.id,seq:n.seq,batch:n.batch,author:Ds,intent:Ts,mutation:null,primitives:t??n.primitives.flatMap(i=>{let s=uu(i,r);return s?[s]:[]}),inverse:[],reads:n.reads.filter(o),writes:n.writes.filter(o),at:n.at,...n.undoes!==void 0?{undoes:n.undoes}:{},withheld:!0}}function Qe(n,e){let t=Zs(e);if(t.hides?.()===!1)return[...n];let r=t.pin?.()??t;if(r.redact)return r.redact(n);if(r.timeline){let o={served:(i,s)=>r.servedWith(i,s),edgeClean:i=>!j(i,r.sees),sees:r.sees,names:i=>j(i,r.sees)};return Is(n,r.timeline,o).map(({op:i,primitives:s,faithful:a})=>(!i.withheld&&a?js(i,r,s):void 0)??Pr(i,r,s))}return n.map(o=>(!o.withheld&&!Ls(o,r.shows)?js(o,r):void 0)??Pr(o,r))}function js(n,e,t){if(t&&t.length<n.primitives.length){if(!t.length)return;n={...n,primitives:t,inverse:n.inverse.filter(c=>jn(c).every(e.shows))}}let r=c=>e.sees(c)&&Cs(e,c),o=n.reads.filter(r),i=new Set(n.primitives.flatMap(jn)),s=n.writes.filter(c=>r(c)||e.sees(c)&&i.has(c)),a=o.length===n.reads.length&&s.length===n.writes.length?n:{...n,reads:o,writes:s},d=e.actor!==void 0&&T(n.author).id===e.actor;if(!d&&n.described?.some(c=>!e.sees(c)))return;if(!j(n,e.sees))return a;let l=new Set,u=c=>{if(typeof c=="string")l.add(c);else if(Array.isArray(c))for(let f of c)u(f);else if(c!==null&&typeof c=="object")for(let[f,g]of Object.entries(c))l.add(f),u(g)};t&&u(t);let p=c=>e.sees(c)||l.has(c);if(!j(a.inverse,p))return d&&n.mutation&&u(n.mutation.args),j({...a,primitives:[],inverse:[]},d?p:e.sees)?void 0:a}function Cs(n,e){return n.timeline===void 0||n.kindOf(e)!==void 0}var Ee=class extends N{constructor(t){super(t.message);this.check=t;this.name="UndoBlockedError"}get blockedBy(){return this.check.blockedBy}};function Tn(n,e){let t=new Set(e),r=n.undoneIds(),o=n.all().filter(f=>t.has(f.batch)&&!r.has(f.id)),i=[...n.epochs()].reverse().find(f=>f.horizon);if(i){let f=new Set(n.all().map(h=>h.batch)),g=e.filter(h=>!f.has(h));if(g.length>0)return{ok:!1,ops:o,blockedBy:[],includeBatches:[],reason:"missing",message:`Cannot undo ${g.map(h=>`batch ${h}`).join(", ")}: it is not after the undo horizon at op ${i.seq}${i.at?` (${i.at})`:""}. What was done before the horizon is archived, and undo does not reach behind it.`}}if(o.length===0)return{ok:!1,ops:o,blockedBy:[],includeBatches:[],reason:"missing",message:e.length===0?"No batch given to undo":`Nothing live to undo in ${e.join(", ")} \u2014 already undone, or never applied`};if(o.some(Xe))return{ok:!1,ops:o,blockedBy:[],includeBatches:[],reason:"forbidden",message:o.every(Xe)?"Cannot undo a change you cannot see: only somebody who can see it can take it back.":"Cannot undo this here: part of it is a change you cannot see, and only somebody who can see it can take it back."};if(o.some(f=>f.enabledModules!==void 0))return{ok:!1,ops:o,blockedBy:[],includeBatches:[],message:"Cannot undo turning a module off or on: it is changed by turning the module the other way."};let s=new Set;for(let f of o)for(let g of f.writes)s.add(g);let a=Math.min(...o.map(f=>f.seq)),d=n.epochs().find(f=>f.change!==void 0&&f.seq>a);if(d){let f=o.find(g=>g.seq<d.seq);return{ok:!1,ops:o,blockedBy:[],includeBatches:[],message:`Cannot undo "${f.intent}": ${f.intent===d.change?"it changed the declaration":`it was done before the declaration changed (${d.change})`}, and undo does not reach back across that change.`}}let l=new Map(n.all().map(f=>[f.id,f.seq])),u=[];for(let f of n.all()){if(f.seq<=a||t.has(f.batch)||r.has(f.id)||f.undoes!==void 0&&(l.get(f.undoes)??-1)>a)continue;let g=f.reads.filter(h=>s.has(h));g.length>0&&u.push({op:f,overlap:g})}if(u.length===0)return{ok:!0,ops:o};let p=u.filter(f=>!Xe(f.op)).map(f=>`"${f.op.intent}" (op ${f.op.id}, read ${f.overlap.join(", ")})`).join("; ");if(u.some(f=>Xe(f.op)))return{ok:!1,ops:o,blockedBy:u,includeBatches:[],message:`Cannot undo on its own \u2014 ${p?`a later operation depends on it: ${p}; and `:""}a later change you cannot see depends on it, which only somebody who can see it can take back.`};let c=[...new Set(u.map(f=>f.op.batch))];return{ok:!1,ops:o,blockedBy:u,includeBatches:c,message:`Cannot undo on its own \u2014 a later operation depends on it: ${p}. Include ${c.map(f=>`batch ${f}`).join(", ")} to undo them together.`}}function Gs(n){return[...n].sort((e,t)=>t.seq-e.seq).flatMap(e=>e.inverse)}var Pe=class extends Error{refusal;constructor(e){super(e.message),this.name="PermissionDeniedError",this.refusal=e}};function lu(n){let e=n instanceof Error?n.message:String(n);if(n instanceof Pe){let t=n.refusal.wouldNeed;return{reason:"forbidden",sentence:e,...t.length>0?{wouldNeed:[...t]}:{}}}return n instanceof B?{reason:"missing",sentence:e}:n instanceof ee?{reason:n.reason,sentence:n.sentence}:n instanceof Ee?{reason:n.check.reason??"invalid",sentence:e}:{reason:"invalid",sentence:e}}var oe=class extends N{constructor(t,r){super(`Invalid arguments for mutation "${t}"`,r.map(o=>`${o.path.map(String).join(".")||"(root)"}: ${o.message}`).join("; "));this.mutation=t;this.issues=r;this.name="InvalidArguments"}};function eb(n){let e=/^(edit|remove|archive|unarchive|merge|leave-alone|allow-tidying|skip|detach|split)-(.+)$/.exec(n);return e?{act:e[1],kind:e[2]}:void 0}var Ks=["connect","disconnect"],Us=n=>n.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`),Vs=(n,e,t)=>`${n}-${e}-${Us(t)}`;function nb(n,e){let t=/^(connect|disconnect)-(.+)$/.exec(n);if(t){for(let[r,o]of e)if(t[2].startsWith(`${r}-`)){for(let i of o)if(t[2]===`${r}-${Us(i)}`)return{act:t[1],kind:r,relation:i}}}}var Bs=n=>`${/^[aeiou]/i.test(n)?"an":"a"} ${n}`;function Ws(n,e){let t=e.also?` (${e.also})`:"";return{title:`${e.one?`${n==="connect"?"Set":"Clear"} the ${e.to}`:`${n==="connect"?"Link":"Unlink"} ${Bs(e.to)}`}${t}`,fromTheOtherEnd:`${n==="connect"?"Link":"Unlink"} ${Bs(e.from)}${t}`}}var fu=n=>`Op "${n.id}" has seq ${n.seq}, so the log begins at seq ${n.seq}: a log that begins past 0 begins at its undo horizon, and none was given (a checkpoint epoch, or { horizon })`,en=class n{ops=[];marks=[];start=0;get length(){return this.start+this.ops.length}get horizon(){return this.start}all(){return this.ops}opsFrom(e){return this.ops.slice(Math.max(0,e-this.start))}append(e){if(e.seq!==this.length)throw new Error(this.length===0&&e.seq>0?fu(e):`Op "${e.id}" has seq ${e.seq} but the log is ${this.length} long`);this.ops.push(e)}static from(e,t=[],r={}){let o=new n,i=[...t].reverse().find(d=>d.horizon),s=r.horizon??i?.seq??0;if(!Number.isInteger(s)||s<0)throw new Error(`A log cannot begin at seq ${s}`);if(i&&r.horizon!==void 0&&i.seq!==r.horizon)throw new Error(`A log said to begin at seq ${r.horizon} has its checkpoint at seq ${i.seq}`);let a=e[0];if(a&&s>0&&a.seq!==s)throw new Error(`A log compacted at seq ${s} begins with op "${a.id}" at seq ${a.seq}`);o.start=s;for(let d of e)o.append(d);for(let d of t)o.markEpoch(d);return o}replace(e,t=[],r={}){let o=n.from(e,t,r);this.ops=o.ops,this.marks=o.marks,this.start=o.start}epochs(){return this.marks}lastEpoch(){return this.marks.at(-1)}markEpoch(e){if(!Number.isInteger(e.seq)||e.seq<0||e.seq>this.length)throw new Error(`An epoch at seq ${e.seq} starts past the end of a log ${this.length} long`);if(e.seq<this.start)throw new Error(`An epoch at seq ${e.seq} is behind the horizon at seq ${this.start}: it went to the archive with the ops before it`);let t=this.lastEpoch();if(t&&e.seq<t.seq)throw new Error(`An epoch at seq ${e.seq} comes before the last one, at seq ${t.seq}`);this.marks.push(e)}truncate(e){if(!Number.isInteger(e)||e<this.start||e>this.length)throw new Error(`Cannot cut a log ${this.length} long back to ${e}`);let t=this.lastEpoch();if(t&&t.seq>e)throw new Error(`Cannot cut the log back to ${e}: an epoch begins at seq ${t.seq}`);return this.ops.splice(e-this.start)}checkpointAt(e,t,r={}){if(!Number.isInteger(t)||t<this.start||t>this.length)throw new Error(`No checkpoint at seq ${t}: this log holds seqs ${this.start} to ${this.length}`);let o=[...this.marks].reverse().find(a=>a.seq<=t);if(o?.seq===t)return{...o,horizon:!0};let i=this.fold(e,{...r,...o?{from:o}:{},to:t}).snapshot(),s=this.ops[t-1-this.start]?.at??o?.at;return{seq:t,base:i,...o?.version!==void 0?{version:o.version}:{},...s!==void 0?{at:s}:{},horizon:!0}}compact(e){if(!Number.isInteger(e.seq)||e.seq<this.start||e.seq>this.length)throw new Error(`Cannot compact at seq ${e.seq}: this log holds seqs ${this.start} to ${this.length}`);let t=this.ops.slice(0,e.seq-this.start),r=this.marks.filter(o=>o.seq<e.seq);return this.ops=this.ops.slice(e.seq-this.start),this.marks=[{...e,horizon:!0},...this.marks.filter(o=>o.seq>e.seq)],this.start=e.seq,{ops:t,epochs:r}}get(e){return this.ops.find(t=>t.id===e)}live(){let e=this.undoneIds();return this.ops.filter(t=>!e.has(t.id))}undoneIds(){return ze(this.ops)}opsInBatch(e){return this.ops.filter(t=>t.batch===e)}batches(){return zr(this.ops,this.undoneIds())}fold(e,t={}){let r=t.from?.seq??0;if(r<this.start)throw new Error(t.from?`An epoch at seq ${r} is behind the horizon at seq ${this.start}: fold from the checkpoint`:`A log compacted at seq ${this.start} does not fold from empty: fold from its checkpoint`);let o=t.from?.base??{nodes:[],edges:[]},i=W.from(e,o,t.validate!==void 0?{validate:t.validate}:{}),s=t.to??this.length;for(let a of this.ops.slice(r-this.start,Math.max(0,s-this.start)))pu(i,a);return i}toJSON(){return[...this.ops]}};function pu(n,e){if(e.undoes!==void 0){n.applyPrimitives(e.primitives,{restoring:!0});return}try{n.applyPrimitives(e.primitives)}catch{n.applyPrimitives(e.primitives,{restoring:!0})}}function ze(n){let e=new Map;for(let r of n){if(!r.undoes)continue;let o=e.get(r.undoes);o?o.push(r.id):e.set(r.undoes,[r.id])}let t=new Map;for(let r=n.length-1;r>=0;r--){let o=n[r],i=e.get(o.id)??[];t.set(o.id,!i.some(s=>t.get(s)===!0))}return new Set(n.filter(r=>t.get(r.id)===!1).map(r=>r.id))}function zr(n,e){let t=[],r=new Map;for(let o of n){let i=r.get(o.batch);i?i.push(o):(r.set(o.batch,[o]),t.push(o.batch))}return t.map(o=>{let i=r.get(o)??[],s=i[0];return{id:o,author:s.author,intent:s.batchIntent??s.intent,at:s.at,...s.lineage?{lineage:s.lineage}:{},ops:i,undone:i.every(a=>e.has(a.id))}})}function Mr(n){return n?.automated===!0&&n.kind!=="human"&&n.kind!=="rule"}var Hs=n=>n?.[Pn]===!0,hu=(n,e)=>Hs(("graph"in n?n.graph:n).getNode(e));function qs(n,e,t){let r=n.tryDefinition(e);return t===void 0?r?.tidying:r?.edges?.[t]?.tidying}var Ys=n=>JSON.stringify(n.map(e=>[e.name,e.args]),(e,t)=>t&&typeof t=="object"&&!Array.isArray(t)?Object.fromEntries(Object.entries(t).sort()):t);function Js(n,e){let t=gu(n);return[e,...e.map(r=>[r])].map(r=>t.get(Ys(r))).find(Boolean)}function gu(n){let e=ze(n),t=new Map(n.map(o=>[o.id,o])),r=new Map;for(let o of n){let i=o.undoes!==void 0&&!e.has(o.id)&&!o.withheld?t.get(o.undoes):void 0,s=i?.suggests??(i?.mutation&&(i.lineage||o.undoneLineage)?[i.mutation]:[]);if(s.length>0)for(let a of[s,...s.map(d=>[d])])r.set(Ys(a),o)}return r}function Xs(n,e,t,r,o={}){let i=o.declaration!==!1,s=(a,d)=>`${r} may not ${a}: ${d}.`;for(let a of t){let d="edge"in a?a.edge:void 0,l=(d?[d.from,d.to]:["id"in a?a.id:a.node.id]).map(u=>e.getNode(u)??("node"in a?a.node:void 0));for(let u of l){if(!u)continue;if(Hs(u))return s(`change \u201C${F(n.tryDefinition(u.kind),u)}\u201D`,"a person said to leave it alone");if(!i)continue;let p=qs(n,u.kind);if(p==="never")return s(`change ${ne(n,u.kind)} on its own`,"the app says they are never tidied");if(d&&p==="no-links")return s(`link or unlink ${ne(n,u.kind)} on its own`,"the app says they are never linked automatically")}if(d&&i&&l[0]&&qs(n,l[0].kind,d.kind)==="never")return s(`${a.op==="add-edge"?"make":"break"} a \u201C${d.kind}\u201D link on its own`,"the app says that relation is never tidied")}}function mu(n,e){if(!e||n.length===0)return null;let t=e.roles,r=o=>t?o.wouldNeed.some(i=>t.includes(i)):o.wouldNeed.length>0;return n.every(({refusal:o})=>r(o))?e:null}var mt={scene:0,overview:10,rail:20,popover:30,dialog:40,toast:50},yu={plots:0,stage:1,tag:2,ties:2,lines:3,tieLabels:4,occupants:6,seatMarks:7,zoom:8,card:10,opened:11},bu={under:0,raised:1,over:2},Nr=n=>`--graview-layer-${n}`,vu=n=>`var(${Nr(n)}, ${mt[n]})`;function xu(){return Object.keys(mt).map(n=>` ${Nr(n)}: ${mt[n]};`).join(`
|
|
4
|
+
`)}function wu(n){let e=n.onBehalfOf??n;return{kind:e.kind,...e.id!==void 0?{id:e.id}:{},...e.name!==void 0?{name:e.name}:{},...e.roles!==void 0?{roles:e.roles}:{}}}function Qs(){return`sub_${(globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`).replace(/-/g,"").slice(0,20)}`}function ea(n){return{...n,id:n.id??Qs(),at:n.at??new Date().toISOString()}}function ku(n=[]){let e=[...n],t=new Set,r=()=>{for(let o of t)o()};return{list:o=>o===void 0?e:e.filter(i=>i.who.id===o),add(o){let i=ea(o);return e=[...e.filter(s=>s.id!==i.id),i],r(),i},remove(o){let i=e.length;e=e.filter(a=>a.id!==o);let s=e.length<i;return s&&r(),s},onChange(o){return t.add(o),()=>t.delete(o)}}}var ta=(n,e)=>`${n}\0${e}`,na=new WeakMap;function Su(n){let e=new Map;return{base:n,end:n,read:[],fields:e,written:[],seqOf:new Map,writers:{writerAt:(r,o,i)=>{let s=e.get(ta(r,o));if(!s)return;let a=0,d=s.length;for(;a<d;){let l=a+d>>1;s[l].seq<i?a=l+1:d=l}return a===0?void 0:s[a-1].by}}}}function $u(n){if(n.op==="add-node")return[n.node.id,Object.keys(n.node).filter(e=>e!=="id"&&e!=="kind")];if(n.op==="patch-node")return[n.id,Object.keys(n.after).filter(e=>!He(n.after[e]))]}function Ru(n,e){let t=n.end,r=T(e.author).id,o=e.undoes!==void 0?n.seqOf.get(e.undoes):void 0,i=[];for(let s of e.primitives){let a=$u(s);if(!a)continue;let[d,l]=a;for(let u of l){let p=e.undoes===void 0?r:o!==void 0?n.writers.writerAt(d,u,o):void 0,c=ta(d,u),f=n.fields.get(c);f||n.fields.set(c,f=[]),f.push({seq:t,by:p}),i.push(c)}}n.written.push({seq:t,keys:i}),n.seqOf.set(e.id,t),n.read.push(e),n.end++}function _u(n,e){for(;n.written.length>0&&n.written.at(-1).seq>=e;){let{keys:t}=n.written.pop();for(let r of t)n.fields.get(r)?.pop()}for(let t of n.read.slice(e-n.base))n.seqOf.delete(t.id);n.read.length=e-n.base,n.end=e}function yt(n){let e=n.all(),t=typeof n.length=="number"?n.length:e.length,r=t-e.length,o=na.get(n);if(o&&o.base<=r&&r<=o.end){let i=Math.min(o.end,t);for(;i>r&&e[i-1-r]!==o.read[i-1-o.base];)i--;i===r&&r>o.base&&i<o.end?o=void 0:(i<o.end&&_u(o,i),r>o.base&&(o.read=o.read.slice(r-o.base),o.base=r))}else o=void 0;o||na.set(n,o=Su(r));for(let i=o.end;i<t;i++)Ru(o,e[i-r]);return o.writers}var nn={served:new WeakSet},Dn=n=>n.fields!==void 0||(n.hide?.length??0)>0,we=n=>nn.on===!0||nn.served.has(n);var Ir=new WeakMap;function Au(n,e){let t=new Map,r=new Map(Object.entries(e??{}));return{base:n,end:n,read:[],kinds:t,creators:r,entries:[],records:{kindOf:o=>t.get(o),creatorOf:o=>r.get(o)}}}function Ou(n,e){let t=n.end;for(let r of e.primitives){if(r.op!=="add-node"&&r.op!=="remove-node")continue;let{id:o,kind:i}=r.node;if(n.kinds.has(o)||(n.kinds.set(o,i),n.entries.push({seq:t,id:o,creator:!1})),r.op!=="add-node"||n.creators.has(o)||e.undoes!==void 0)continue;let s=T(e.author).id;s!==void 0&&(n.creators.set(o,s),n.entries.push({seq:t,id:o,creator:!0}))}n.read.push(e),n.end++}function Eu(n,e){for(;n.entries.length>0&&n.entries.at(-1).seq>=e;){let t=n.entries.pop();(t.creator?n.creators:n.kinds).delete(t.id)}n.read.length=e-n.base,n.end=e}function fe(n){let e=n.all(),t=typeof n.length=="number"?n.length:e.length,r=t-e.length,o=Ir.get(n);if(o&&o.base<=r&&r<=o.end){let i=Math.min(o.end,t);for(;i>r&&e[i-1-r]!==o.read[i-1-o.base];)i--;i===r&&r>o.base&&i<o.end?o=void 0:(i<o.end&&Eu(o,i),r>o.base&&(o.read=o.read.slice(r-o.base),o.base=r))}else o=void 0;o||Ir.set(n,o=Au(r,r>0?Pu(n,r)?.creators:void 0));for(let i=o.end;i<t;i++)Ou(o,e[i-r]);return o.records}function Pu(n,e){let t=[...n.epochs?.()??[]].reverse().find(r=>r.horizon);return t?.seq===e?t:void 0}function ra(n,e){fe(n);let t=Ir.get(n),r=new Set;for(let i=t.entries.length-1;i>=0&&t.entries[i].seq>=e;i--)t.entries[i].creator&&r.add(t.entries[i].id);let o={};for(let[i,s]of t.creators)r.has(i)||(o[i]=s);return o}function tn(n,e,t,r,o,i=nn.on===!0){if(!n?.sees?.length||q(e))return!0;let s=n.sees.filter(a=>a.kinds.includes(t.kind)&&(i||!Dn(a)));return s.length===0?!1:(e=T(e),s.some(a=>{if(!ve(a,e))return!1;if(!a.own&&!a.via)return!0;let d=e.id;if(d===void 0)return!1;let l=u=>u.id===d;return a.via?r.out(t.id,a.via).some(l)||r.in(t.id,a.via).some(l):t.id===d||r.out(t.id).some(l)||r.in(t.id).some(l)||o?.creatorOf(t.id)===d}))}var Tr=new Set;function bt(n,e){return q(e)?Tr:n.modules?.disabledKinds??Tr}function rn(n,e){return q(e)?!1:(n.policy?.sees?.length??0)>0||bt(n,e).size>0}function aa(n,e){if(!rn(n,e))return()=>!0;let t=n.modules?.disabledKinds??Tr,r=n.policy?.sees??[],o=T(e),i=we(n),s=d=>!t.has(d)&&(r.length===0||r.some(l=>l.kinds.includes(d)&&ve(l,o)&&!l.own&&!l.via&&(i||!Dn(l)))),a=n.schema.kinds.every(s);return d=>a||d!==void 0&&s(d)}function Fn(n,e){return t=>{let r=bt(n,e);if(!n.policy?.sees?.length&&r.size===0)return!0;let o=fe(n.log),i=n.graph.getNode(t);if(i)return!r.has(i.kind)&&tn(n.policy,e,i,n.graph,o,we(n));let s=o.kindOf(t);return s===void 0?!0:!r.has(s)&&tn(n.policy,e,{id:t,kind:s},{out:()=>[],in:()=>[]},o,we(n))}}var zu={out:()=>[],in:()=>[]};function Mu(n,e,t=new Map,r){let o=bt(n,e);if(!n.policy?.sees?.length&&o.size===0)return()=>!0;let i=fe(n.log);return s=>{let a=t.get(s);if(a!==void 0)return a;let d,l=n.graph.getNode(s);if(l)d=!o.has(l.kind)&&tn(n.policy,e,l,n.graph,i,we(n));else{let u=i.kindOf(s);if(u===void 0)return r?.add(s),!0;d=!o.has(u)&&tn(n.policy,e,{id:s,kind:u},zu,i,we(n))}return t.set(s,d),d}}function Nu(n){let e=new Map;return(t,r)=>{let o=`${t}\0${r}`,i=e.get(o);if(i===void 0){let s=n?.tryDefinition(t)?.fields?.shape,a=s?.[r];i=s!==void 0&&(a===void 0||a.safeParse?.(void 0).success===!0),e.set(o,i)}return i}}function Fr(n,e){return da(n,e).lens}var Dr=()=>({judged:new Map,shown:new Map});function da(n,e){let t=Nu(n.schema),r=q(e)?void 0:T(e).id,o=()=>n.log.length??n.log.all().length,i=new WeakMap,s=n.graph,a=(u,p,c,f,g)=>{let h=(b,$)=>{if(!u(b.id))return;let R;for(let L in b)if(!(!Object.hasOwn(b,L)||L==="id"||L==="kind"||!j(b[L],u))&&!(r!==void 0&&$(L)===r)){if(!t(b.kind,L))return;(R??=[]).push(L)}if(!R)return b;let _=R.join("\0"),P=i.get(b);if(P?.without===_)return P.node;let E=Object.fromEntries(Object.entries(b).filter(([L])=>!R.includes(L)));return i.set(b,{without:_,node:E}),E},v=b=>{let $=c();return h(b,R=>p().writerAt(b.id,R,$))},y=new WeakMap,S=g?b=>{let $=y.get(b);return $||y.set(b,$={node:v(b)}),$.node}:v,A=b=>{if(!u(b))return!1;let $=s.getNode(b);return $===void 0||S($)!==void 0},m=g?.shown??new Map,k=g?b=>{let $=m.get(b);return $===void 0&&m.set(b,$=A(b)),$}:A,w=s.outEdges&&s.inEdges?{present:{getNode:b=>s.getNode(b),outEdges:b=>s.outEdges(b),inEdges:b=>s.inEdges(b)},log:n.log,get writers(){return p()}}:void 0,x={sees:u,shows:k,served:S,servedWith:h,optional:t,kindOf:f,...r!==void 0?{actor:r}:{},...w?{timeline:w}:{},hides:()=>rn(n,e),pin:g?()=>x:()=>d(Dr())};return nn.lens?.(x,n,e)??x};function d(u){let p,c=o(),f=fe(n.log);return a(Mu(n,e,u.judged,u.unnamed),()=>p??=yt(n.log),()=>c,g=>s.getNode(g)?.kind??f.kindOf(g),u)}return{lens:a(Fn(n,e),()=>yt(n.log),o,u=>s.getNode(u)?.kind??fe(n.log).kindOf(u)),pinWith:d}}var oa=new WeakMap,ia=new WeakMap,Iu=n=>{let e=new Set;for(let t of n)for(let r of t.primitives)r.op==="add-node"||r.op==="remove-node"?e.add(r.node.id):r.op==="patch-node"?e.add(r.id):(e.add(r.edge.from),e.add(r.edge.to));return e};function ju(n,e){if(!rn(n,e))return n.log.all();let t=n.log.all(),r=n.log.length??t.length,o=r-t.length,i=[...bt(n,e)].sort().join("\0"),s=ca(e),a=oa.get(n.log);a||oa.set(n.log,a=new Map);let d=a.get(s),{pinWith:l}=da(n,e),u=ia.get(n.log);u||ia.set(n.log,u=new Set);let p=d!==void 0&&d.horizon===o&&d.off===i&&d.length<=r&&(d.length===o||t[d.length-1-o]===d.last);if(d&&p){if(d.length===r)return d.ops;let g=t.slice(d.length-o),h=l(Dr()),v=!0,y=Iu(g);for(let S of y){let A=d.judgments.judged.get(S),m=d.judgments.shown.get(S);if(A!==void 0&&h.sees(S)!==A||m!==void 0&&h.shows(S)!==m){v=!1;break}}if(v){for(let S of y)if(u.has(S)){v=!1;break}}if(v){let S=[...d.ops,...Qe(g,l(d.judgments))],A={horizon:o,off:i,length:r,last:t.at(-1),ops:S,judgments:d.judgments};return a.set(s,A),S}}let c={...Dr(),unnamed:u},f=Qe(t,l(c));return a.set(s,{horizon:o,off:i,length:r,last:t.at(-1),ops:f,judgments:c}),f}function Tu(n,e,t){return(t.subjectId===void 0||!e(t.subjectId)||n.shows(t.subjectId))&&t.nodeIds.every(r=>!e(r)||n.shows(r))&&!j(t,n.sees)}function Zr(n,e){return{all:()=>n,undoneIds:()=>ze(n),epochs:e}}var sa=new WeakMap;function ca(n){let e=q(n)?n:T(n);return`${n.kind}|${e.id??""}|${(e.roles??[]).join(",")}|${n.onBehalfOf?"for":""}`}var jr=(n,e)=>{let t=Reflect.get(n,e,n);return typeof t=="function"?t.bind(n):t},Du=Symbol.for("@graview/core:seat");function Zn(n,e){if(!rn(n,e))return n;let t=ca(e),r=sa.get(n);r||sa.set(n,r=new Map);let o=r.get(t);if(o)return o;let i=n.graph,s=Fr(n,e),a=m=>{let k=R=>R===void 0?void 0:m.served(R),w=R=>k(R)!==void 0,x=R=>w(i.getNode(R));return{served:k,seenNode:w,seenId:x,seenEdge:R=>x(R.from)&&x(R.to)&&!j(R,m.sees),servedAll:R=>R.flatMap(_=>k(_)??[])}},{served:d,seenId:l}=a(s),u=()=>a(s.pin?.()??s),p=(m,k)=>{let w=yt(n.log),x=s.pin?.()??s,b=m.nodes.flatMap(R=>x.servedWith(R,_=>w.writerAt(R.id,_,k))??[]),$=new Set(b.map(R=>R.id));return{nodes:b,edges:m.edges.filter(R=>$.has(R.from)&&$.has(R.to)&&!j(R,x.sees))}},c=m=>{let k=p(m.base,m.seq);if(!m.creators)return{...m,base:k};let w=new Set(k.nodes.map(b=>b.id)),x=Object.fromEntries(Object.entries(m.creators).filter(([b,$])=>w.has(b)&&!j($,s.sees)));return{...m,base:k,creators:x}},f=m=>m&&c(m),g=()=>ju(n,e),h=()=>Zr(g(),()=>n.log.epochs()),v=new Proxy(i,{get(m,k){switch(k){case"getNode":return w=>d(m.getNode(w));case"has":return l;case"allNodes":case"nodesOfKind":return(...w)=>u().servedAll(m[k](...w));case"count":return(...w)=>u().servedAll(m.nodesOfKind(...w)).length;case"allEdges":case"edgesOfKind":case"outEdges":case"inEdges":return(...w)=>m[k](...w).filter(u().seenEdge);case"out":case"in":case"neighbors":return(w,...x)=>{let b=u();return b.seenId(w)?b.servedAll(m[k](w,...x)):[]};case"snapshot":return()=>{let w=m.snapshot(),x=u();return{...w,nodes:x.servedAll(w.nodes),edges:w.edges.filter(x.seenEdge)}};case"size":{let w=u();return{nodes:w.servedAll(m.allNodes({archived:"all"})).length,edges:m.allEdges({archived:"all"}).filter(w.seenEdge).length}}default:return jr(m,k)}}}),y=()=>{let m=g();return zr(m,ze(m))},S=new Proxy(n.log,{get(m,k){switch(k){case"all":case"toJSON":return()=>[...g()];case"epochs":return()=>m.epochs().map(c);case"lastEpoch":return()=>f(m.lastEpoch());case"live":return()=>{let w=g(),x=ze(w);return w.filter(b=>!x.has(b.id))};case"get":return w=>g().find(x=>x.id===w);case"opsInBatch":return w=>g().filter(x=>x.batch===w);case"batches":return y;default:return jr(m,k)}}}),A=new Proxy(n,{get(m,k){switch(k){case Du:return{store:m,principal:e};case"graph":return v;case"log":return S;case"snapshot":return v.snapshot;case"batches":return y;case"canUndo":return w=>Tn(h(),typeof w=="string"?[w]:w);case"violations":return w=>m.violations(w,v).filter(x=>Tu(s,b=>i.has(b),x));case"findings":return()=>m.findings().filter(w=>(w.id.includes("->")?w.id.split("->").map((b,$)=>$===0?b.slice(b.indexOf(":")+1):b):[w.id]).every(b=>!i.has(b)||l(b))&&!j(w,s.sees));case"wouldChange":return w=>m.wouldChange(w,e);case"preview":return(w,x,b)=>m.preview(w,x,{author:e,...b});case"seenBy":return w=>Zn(m,w);case"seenFor":return e;case"checkpoint":return w=>f(m.checkpoint(w));default:return jr(m,k)}}});return r.set(t,A),A}var Lr=new Set;function Cr(n,e){if(!n||e===void 0)return{enabled:new Set(Object.keys(n??{})),disabledKinds:Lr,disabledMutations:Lr,disabledInvariants:Lr,administered:ua(n,new Set(Object.keys(n??{})))};let t=new Set,r=a=>{if(!(t.has(a)||!(a in n))){t.add(a);for(let d of n[a]?.requires??[])r(d)}};for(let a of e)r(a);for(let[a,d]of Object.entries(n))d.required&&r(a);let o=new Set,i=new Set,s=new Set;for(let[a,d]of Object.entries(n))if(!t.has(a)){for(let l of d.kinds??[])o.add(l);for(let l of d.mutations??[])i.add(l);for(let l of d.invariants??[])s.add(l)}for(let a of t){let d=n[a];for(let l of d?.kinds??[])o.delete(l);for(let l of d?.mutations??[])i.delete(l);for(let l of d?.invariants??[])s.delete(l)}return{enabled:t,disabledKinds:o,disabledMutations:i,disabledInvariants:s,administered:ua(n,t)}}function ua(n,e){let t=new Map;for(let[r,o]of Object.entries(n??{}))e.has(r)&&o.visibility==="admin"&&t.set(r,o);return t}function la(n){return n.normalize("NFKD").replace(/\p{M}/gu,"").toLowerCase().trim().replace(/\s+/g," ")}var vt=class{constructor(e){this.graph=e;for(let t of e.allNodes({archived:"all"}))this.file(t);e.subscribe(t=>this.follow(t))}kinds=new Map;filed=new Map;labelOf(e){return this.filed.get(e)?.label}lookup(e,t){let r=la(t);if(r.length===0)return{exact:[],prefix:[]};let o=e.includes("*")?[...this.kinds.values()]:e.flatMap(a=>this.kinds.get(a)??[]),i=[],s=[];for(let a of o)for(let d=Gr(a.sorted,r);d<a.sorted.length&&a.sorted[d].startsWith(r);d+=1){let l=[...a.ids.get(a.sorted[d])??[]];s.push(...l),a.sorted[d]===r&&i.push(...l)}return{exact:i,prefix:s}}follow(e){for(let t of e.removedNodes)this.unfile(t.id);for(let t of e.changedNodes)this.unfile(t.after.id),this.file(t.after);for(let t of e.addedNodes)this.file(t)}file(e){let t=F(this.graph.schema.tryDefinition(e.kind),e),r=la(t);this.filed.set(e.id,{kind:e.kind,key:r,label:t});let o=this.kinds.get(e.kind);o||this.kinds.set(e.kind,o={ids:new Map,sorted:[]});let i=o.ids.get(r);i?i.add(e.id):(o.ids.set(r,new Set([e.id])),o.sorted.splice(Gr(o.sorted,r),0,r))}unfile(e){let t=this.filed.get(e);if(!t)return;this.filed.delete(e);let r=this.kinds.get(t.kind),o=r?.ids.get(t.key);if(!r||!o||(o.delete(e),o.size>0))return;r.ids.delete(t.key);let i=Gr(r.sorted,t.key);r.sorted[i]===t.key&&r.sorted.splice(i,1)}};function Gr(n,e){let t=0,r=n.length;for(;t<r;){let o=t+r>>>1;n[o]<e?t=o+1:r=o}return t}function Fu(n,e){return e.includes("*")?"record":e.map(t=>K(n.tryDefinition(t),t)).join(" or ")}function fa(n,e,t,r){let o=Fu(n,e.kinds);if(r.length===0)return{ok:!1,reason:"none",candidates:r,message:`There is no ${o} called "${t}".`};let i=r.slice(0,10).map(a=>`${a.label} (${a.id})`),s=r.length>i.length?`, and ${r.length-i.length} more`:"";return{ok:!1,reason:"ambiguous",candidates:r,message:`"${t}" names more than one ${o}: ${i.join(", ")}${s}. Pass the id of the one you mean as ${e.name}.`}}var ha=Symbol.for("@graview/core:node-ref"),pa=n=>typeof n=="object"&&n!==null?n[ha]:void 0;function ke(n="*"){return Zu(D().check(kn(1)),n)}function Zu(n,e){let t=Object.freeze(e==="*"?["*"]:[...e]),r=o=>{o&&Object.defineProperty(o,ha,{value:t,enumerable:!0,configurable:!0})};return r(n),r(I(n)),n}function Br(n){if(typeof n!="object"||n===null)return;let e=pa(n);if(e)return e;let t=I(n),r=pa(t);if(r)return r;let o=t?.innerType;return o?Br(o):void 0}function Ln(n){let e=n.shape;if(!e)return[];let t=[];for(let[r,o]of Object.entries(e)){let i=Br(o);i&&t.push({name:r,kinds:i,optional:o.safeParse(void 0).success})}return t}function Kr(n){if(n===null||typeof n!="object")return JSON.stringify(n)??"null";if(Array.isArray(n))return`[${n.map(r=>r===void 0?"null":Kr(r)).join(",")}]`;let e=n;return`{${Object.keys(e).filter(r=>e[r]!==void 0).sort().map(r=>`${JSON.stringify(r)}:${Kr(e[r])}`).join(",")}}`}var ga=(n,e)=>n.key<e.key?-1:n.key>e.key?1:0;function Lu(n){let e=n.nodes.map(r=>({key:r.id,value:r})).sort(ga),t=n.edges.map(r=>({key:z(r),value:{kind:r.kind,from:r.from,to:r.to}})).sort(ga);return Kr({nodes:e.map(r=>r.value),edges:t.map(r=>r.value)})}function on(n){return`sha256:${ya(Lu(n))}`}function ma(n,e,t,r={}){let o=r.validate??!0,i=r.base??{nodes:[],edges:[]},s=on(t),a=W.from(n,i,{validate:o});for(let[h,v]of e.entries())try{a.applyPrimitives(v.primitives)}catch(y){let S=e[h-1];return{ok:!1,expected:on(a.snapshot()),actual:s,...S?{divergedAfter:S.id}:{},reason:`The log does not fold: op "${v.id}" (${v.intent}) could not be applied. ${y instanceof Error?y.message:String(y)}`}}let d=on(a.snapshot());if(d===s)return{ok:!0,hash:s};let l=h=>{let v=W.from(n,i,{validate:o});for(let y=0;y<=h;y++)v.applyPrimitives(e[y].primitives);return on(v.snapshot())},u=h=>{try{let v=W.from(n,t,{validate:o});for(let y=e.length-1;y>h;y--)v.applyPrimitives(e[y].inverse);return on(v.snapshot())}catch{return}},p=h=>{let v=u(h);return v!==void 0&&v!==l(h)},c=-1,f=e.length-1;for(;c<f;){let h=Math.floor((c+f)/2);p(h)?f=h:c=h+1}let g=f>=0?e[f]:void 0;return{ok:!1,expected:d,actual:s,...g?{divergedAfter:g.id}:{},reason:g?`The graph and the fold of its log part after op "${g.id}" (${g.intent}).`:"The graph and the fold of its log disagree before any op: the base it folds from does not match."}}var Cu=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Gu=new TextEncoder,Bu=new Uint32Array(64),Ku=new Uint32Array(8),xt=Array.from({length:256},(n,e)=>e.toString(16).padStart(2,"0"));function ya(n){let e=Gu.encode(n),t=e.length*8,r=new Uint8Array(e.length+9+63>>6<<6);r.set(e),r[e.length]=128;let o=new DataView(r.buffer);o.setUint32(r.length-8,Math.floor(t/2**32)),o.setUint32(r.length-4,t>>>0);let i=Ku;i[0]=1779033703,i[1]=3144134277,i[2]=1013904242,i[3]=2773480762,i[4]=1359893119,i[5]=2600822924,i[6]=528734635,i[7]=1541459225;let s=Bu;for(let d=0;d<r.length;d+=64){for(let y=0;y<16;y++)s[y]=o.getUint32(d+y*4);for(let y=16;y<64;y++){let S=s[y-15],A=s[y-2],m=(S>>>7|S<<25)^(S>>>18|S<<14)^S>>>3,k=(A>>>17|A<<15)^(A>>>19|A<<13)^A>>>10;s[y]=s[y-16]+m+s[y-7]+k>>>0}let l=i[0],u=i[1],p=i[2],c=i[3],f=i[4],g=i[5],h=i[6],v=i[7];for(let y=0;y<64;y++){let S=(f>>>6|f<<26)^(f>>>11|f<<21)^(f>>>25|f<<7),A=f&g^~f&h,m=v+S+A+Cu[y]+s[y]>>>0,k=(l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10),w=l&u^l&p^u&p,x=k+w>>>0;v=h,h=g,g=f,f=c+m>>>0,c=p,p=u,u=l,l=m+x>>>0}i[0]=i[0]+l>>>0,i[1]=i[1]+u>>>0,i[2]=i[2]+p>>>0,i[3]=i[3]+c>>>0,i[4]=i[4]+f>>>0,i[5]=i[5]+g>>>0,i[6]=i[6]+h>>>0,i[7]=i[7]+v>>>0}let a="";for(let d=0;d<8;d++){let l=i[d];a+=xt[l>>>24]+xt[l>>>16&255]+xt[l>>>8&255]+xt[l&255]}return a}var Cn=class{constructor(e){this.inner=e}seen=new Set;reads(){return[...this.seen]}markAll(e){for(let t of e)this.seen.add(t.id);return e}markEdges(e){for(let t of e)this.seen.add(t.from),this.seen.add(t.to);return e}getNode(e){return this.seen.add(e),this.inner.getNode(e)}has(e){return this.seen.add(e),this.inner.has(e)}allNodes(e){return this.markAll(this.inner.allNodes(e))}allEdges(e){return this.markEdges(this.inner.allEdges(e))}nodesOfKind(e,t){return this.markAll(this.inner.nodesOfKind(e,t))}edgesOfKind(e,t){return this.markEdges(this.inner.edgesOfKind(e,t))}out(e,t,r){return this.seen.add(e),this.markAll(this.inner.out(e,t,r))}in(e,t,r){return this.seen.add(e),this.markAll(this.inner.in(e,t,r))}neighbors(e,t){return this.seen.add(e),this.markAll(this.inner.neighbors(e,t))}};function Uu(n,e){return{...e,name:n}}function Ur(n){if(!n.creates?.length)return!1;let e=n.input.shape;return e===void 0||!("id"in e)}function wa(n){let e=n.input,t=e._zod?.def;if(t?.type!=="object"||t.catchall!==void 0||!e.shape)return;let r=Object.keys(e.shape);return Ur(n)?[...r,"id"]:r}var ba=(n,e)=>`does not take ${n.map(t=>`"${t}"`).join(", ")}; it takes ${e.length>0?e.map(t=>`"${t}"`).join(", "):"nothing"}`;function Vu(n){if(typeof n!="object"||n===null)return;let e=n.id;if(e!==void 0){if(typeof e!="string"||e.trim().length===0)throw new N("An id must be a non-empty string",`Got ${JSON.stringify(e)}.`);return e}}function Wu(n){let{id:e,...t}=n;return t}function va(n){return n.normalize("NFKD").replace(/\p{M}/gu,"").toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,"")||"item"}function ka(n){let e=2166136261;for(let t=0;t<n.length;t++)e=Math.imul(e^n.charCodeAt(t),16777619);return(e>>>0).toString(36).padStart(7,"0")}function qu(n,e){if(e.limited&&e.me===void 0)return xa(n,e.held);let t=e.limited?`${n}.${ka(e.me)}`:n,r=t;for(let o=2;e.seen(r);o++)r=`${t}-${o}`;return e.held(r)?xa(t,e.held):r}function xa(n,e){let t;do t=`${n}-${Math.floor(Math.random()*36**6).toString(36).padStart(6,"0")}`;while(e(t));return t}function sn(n,e,t,r={}){let o=Ur(e)?Vu(t):void 0,i=o===void 0?t:Wu(t),s=wa(e);if(s&&typeof i=="object"&&i!==null&&!Array.isArray(i)){let m=Object.keys(i).filter(k=>!s.includes(k)&&i[k]!==void 0);if(m.length>0)throw new oe(e.name,[{path:[],message:ba(m,s)}])}let a=e.input.safeParse(i);if(!a.success){let m=Object.keys(e.input.shape??{});throw new oe(e.name,a.error.issues.map(k=>k.code==="unrecognized_keys"&&m.length>0?{...k,message:ba(k.keys,m)}:k))}let d=a.data,l=new Cn(r.seen??n),u=[],p=new Set,c=m=>l.has(m)||n.has(m)||p.has(m),f,g=m=>{let k=new Set([...n.outEdges(m),...n.inEdges(m)]);for(let w of k)l.getNode(w.from),l.getNode(w.to),u.push({op:"remove-edge",edge:w});return k},h={graph:l,schema:n.schema,me:r.me,emit(m){u.push(m)},addNode(m){u.push({op:"add-node",node:m})},removeNode(m){let k=l.getNode(m)&&n.getNode(m);if(!k)throw new B(m,`Cannot remove missing node "${m}"`);g(m),u.push({op:"remove-node",node:k})},patchNode(m,k){let w=l.getNode(m)&&n.getNode(m);if(!w)throw new B(m,`Cannot patch missing node "${m}"`);let x={},b={};for(let[$,R]of Object.entries(k)){let _=w[$];JSON.stringify(_)===JSON.stringify(R)&&!r.keepUnchanged?.(R,$,w)||(x[$]=_,b[$]=R)}Object.keys(b).length!==0&&u.push({op:"patch-node",id:m,before:x,after:b})},archiveNode:m=>h.patchNode(m,{[qe]:!0}),unarchiveNode:m=>h.patchNode(m,{[qe]:void 0}),mergeNode(m,k){let w=l.getNode(k)&&n.getNode(k);if(!w)throw new B(k,`Cannot merge into missing node "${k}"`);if(m===k||Ae(w))throw new N(m===k?"Cannot merge a record into itself":"Cannot merge into an archived record");let x=new Set([...n.outEdges(k),...n.inEdges(k)].map(z));for(let b of g(m)){let $={kind:b.kind,from:b.from===m?k:b.from,to:b.to===m?k:b.to};$.from!==$.to&&!x.has(z($))&&(x.add(z($)),u.push({op:"add-edge",edge:$}))}h.archiveNode(m),f=k},addEdge(m){u.push({op:"add-edge",edge:m})},removeEdge(m){u.push({op:"remove-edge",edge:m})},setSingleSource(m,k,w){n.inEdges(k,m).some(x=>x.from===w)||u.push({op:"add-edge",edge:{kind:m,from:w,to:k}});for(let x of n.inEdges(k,m))l.getNode(x.from),x.from!==w&&u.push({op:"remove-edge",edge:x})},freshId(m,k){if(o!==void 0&&!p.has(o)){if(r.seesInFull&&!r.seesInFull())throw new N(`"${e.name}" makes its own id here`,"Leave id out: the answer says the id it made.");if(c(o))throw new N(`Id "${o}" is already taken`,`"${e.name}" was asked to make a node with that id, and the graph has one. Pick another, or leave id out and let the act mint one.`);return p.add(o),o}let w=k?`${k}:${va(m)}`:va(m),b=qu(w,{seen:$=>(r.seen?r.seen.has($):n.has($))||p.has($),held:c,limited:r.seesInFull!==void 0&&!r.seesInFull(k),me:r.me});return p.add(b),b}};e.apply(h,d);let v=r.check?.(u,e),y=new Set(u.flatMap(Oe)),S=new Cn(r.seen??n),A=e.describe?.(d,S)??`${e.name}(${Object.entries(d).map(([m,k])=>`${m}=${JSON.stringify(k)}`).join(", ")})`;return{primitives:u,reads:[...new Set([...l.reads(),...S.reads()])],...e.describe?{described:[...S.reads(),...v??[]]}:{},writes:[...y],intent:A,...f!==void 0?{mergedInto:f}:{}}}var Sa=Symbol.for("@graview/core:amount"),Cb=(n,e)=>(Object.defineProperty(I(n),Sa,{value:e,enumerable:!0}),n);function Vr(n,e=!0){let t=I(n);return t?.[Sa]??(e&&t?.innerType?Vr(t.innerType):void 0)}function $a(n,e={}){let t=Number.isInteger(n),r={maximumFractionDigits:t?0:2,minimumFractionDigits:t?0:2};try{return se(n,e.locale,e.currency?{style:"currency",currency:e.currency,...r}:r)}catch{return se(n,e.locale,r)}}function Ra(n,{format:e,unit:t,currency:r,locale:o}){let i=/^[A-Z]{3}$/.test(t??"");return e==="money"||!e&&i?$a(n,{...o?{locale:o}:{},...(i?t:r)?{currency:i?t:r}:{}}):e==="percent"?se(n,o,{style:"percent",maximumFractionDigits:0}):se(n,o)+(t?` ${t}`:"")}var Hu=Symbol.for("@graview/core:typed-field");function Wr(n){let e=I(n);return e?e[Hu]??Wr(e.innerType):void 0}var Yu=/^[("'“‘]*(?:(?:[a-z]{1,3}\.){2,}|(?:dr|mr|mrs|ms|mx|st|mt|vs|jr|sr|prof|no|fig|approx)\.)$/i;function Ju(n){for(let e of n.matchAll(/[.!?](?=\s|$)/g)){let t=n.slice(0,e.index+1),r=/\S+$/.exec(t)?.[0]??"";if(!(e[0]==="."&&Yu.test(r))&&!(t.split(" ").length<3&&e.index+1<n.length))return t}}function _a(n,e=140){let t=n.replace(/^[#>\s]+|\*\*|`|\](\([^)\s]*\))?|\[/gm,"").replace(/\s+/g," ").trim(),r=Ju(t);return r&&r.length<=e?r:t.length<=e?t:`${(t.slice(0,e+1).replace(/\s+\S*$/,"")||t.slice(0,e)).replace(/[\s,;:.—-]+$/,"")}\u2026`}function Xu(n){let e=n.fields.shape;return Object.keys(e).flatMap(t=>{let r=ut(e[t])?On(t):void 0;return r&&e[r]?[r]:[]})}var Qu=[["skip","Skip this one","Leave one day out of the series; the rest stay as they are.","Skip {} on "],["detach","Change just this one","Make one day of the series a record of its own, to change apart from the rest.","Change {} only on "],["split","Change from here","End the series the day before, and start it again from that day with what changes.","Change {} from "]];function Aa(n,e){let t=new Set(e.map(o=>o.name)),r=[];for(let o of n.definitions){let i=Xu(o);if(i.length===0)continue;let s=o.kind,a=o.fields.shape,d=Object.keys(a).filter(u=>!(u in(o.fixed??{}))),l=u=>F(o,u);for(let[u,p,c,f]of Qu){let g=`${u}-${s}`;t.has(g)||r.push({name:g,derived:{kind:s,act:u},title:p,description:c,subject:{kinds:[s],arg:"id"},writes:i.map(Ve),...u==="skip"?{}:{creates:[s]},input:Ke({id:ke([s]),on:D().check(Sn(/^\d{4}-\d{2}-\d{2}$/,"a day, like 2026-10-21")),...i.length>1?{field:Q(ds(i))}:{},...u==="skip"?{}:Object.fromEntries(d.map(h=>[h,Q(a[h])]))}),describe:(h,v)=>f.replace("{}",l(v.getNode(String(h.id))??{id:h.id}))+ge(String(h.on)),apply(h,v){let y=h.graph.getNode(String(v.id)),S=String(v.field??i[0]),A=y?.[S],m=y?.[Ve(S)],k=String(v.on);if(typeof A!="string"||!We(m))throw new ee(`${l(y??{id:v.id})} does not repeat`,"refused");let w=Ue(A,m,{from:k,to:k})[0];if(!w)throw new ee(`${l(y)} does not fall on ${ge(k)}`,"refused");let x=String(y.id),b=Object.fromEntries(d.filter(Y=>v[Y]!==void 0).map(Y=>[Y,v[Y]])),$=Ve(S),R=Y=>{let $o=Object.fromEntries(Object.entries({...y,...Y,...b}).filter(([Wn,jt])=>jt!=null&&Wn!=="id")),Ro=h.freshId(l($o));h.addNode({...$o,id:Ro,kind:s});for(let Wn of Object.keys(o.edges??{}))for(let jt of h.graph.out(x,Wn))h.addEdge({kind:Wn,from:Ro,to:jt.id})};if(u!=="split"){h.patchNode(x,{[$]:{...m,except:[...new Set([...m.except??[],k])].sort()}}),u==="detach"&&R({[S]:w,[$]:null});return}if(Object.keys(b).length===0)throw new ee(`Nothing to change: give ${l(y)} from ${ge(k)} something new`,"invalid");if(k<=A.slice(0,10))return h.patchNode(x,b);let _=new Date(Date.parse(`${k}T00:00:00Z`)-864e5).toISOString().slice(0,10),P=m.count?Ue(A,{...m,except:[]},{to:_}).length:0,{count:E,except:L,...ko}=m,So=Y=>L?.some(Y)?{except:L.filter(Y)}:{};h.patchNode(x,{[$]:{...ko,until:_,...So(Y=>Y<k),...E?{count:P}:{}}}),R({[S]:w,[$]:{...ko,...So(Y=>Y>=k),...E?{count:E-P}:{},continues:x}})}})}}return r}function Oa(n,e){let t=new Set(e.map(d=>d.name)),r=e.filter(d=>!d.derived),o=new Set(r.flatMap(d=>d.connects??[])),i=new Set(r.flatMap(d=>d.severs??[])),s=[],a=(d,l)=>{let u=d.getNode(String(l));return u?F(n.tryDefinition(u.kind),u):String(l)};for(let d of n.definitions){let l=d.kind,u=Object.entries(d.edges??{}),p=c=>c.to==="*"?"record":c.to.map(f=>K(n.tryDefinition(f),f)).join(" or ");for(let[c,f]of u){let g=p(f),h=f.cardinality==="one",v=u.some(([A,m])=>A!==c&&p(m)===g),y={to:g,from:K(d,l),one:h,also:v?C(c).toLowerCase():void 0},S=y.from;for(let A of Ks){let m=Vs(A,l,c);if(t.has(m)||f.acts==="none"||(A==="connect"?o.has(c):i.has(c)||f.appendOnly))continue;let{title:k,fromTheOtherEnd:w}=Ws(A,y),x=f.description?`: ${f.description.replace(/\.$/,"")}`:"";s.push({name:m,derived:{kind:l,act:A,relation:c},title:k,fromTheOtherEnd:w,description:A==="connect"?`Link this ${S} to ${/^[aeiou]/i.test(g)?"an":"a"} ${g}${x}.${h?" It has one, so this replaces the one it has.":""}`:`Take away the link between this ${S} and ${/^[aeiou]/i.test(g)?"an":"a"} ${g}${x}. Undo puts it back.`,subject:{kinds:[l],arg:"id"},...A==="connect"?{connects:[c]}:{severs:[c],destructive:!0},idempotent:!0,input:Ke({id:ke([l]),to:ke(f.to==="*"?"*":f.to)}),describe:(b,$)=>A==="disconnect"?`Unlink ${a($,b.id)} from ${a($,b.to)}`:h?`Set the ${g} of ${a($,b.id)} to ${a($,b.to)}`:`Link ${a($,b.id)} to ${a($,b.to)}`,apply(b,$){let R=String($.id),_=String($.to);for(let E of[R,_])if(!b.graph.getNode(E))throw new ee(`there is no record "${E}"`,"invalid");let P=b.graph.out(R,c).some(E=>E.id===_);if(A==="disconnect"){if(!P)throw new ee(`${a(b.graph,R)} is not linked to ${a(b.graph,_)}`,"invalid");b.removeEdge({kind:c,from:R,to:_});return}if(h)for(let E of b.graph.out(R,c))E.id!==_&&b.removeEdge({kind:c,from:R,to:E.id});P||b.addEdge({kind:c,from:R,to:_})}})}}}return s}function Ea(n){let e=n.fields.shape;return Object.keys(e).filter(t=>!(t in(n.fixed??{})))}function qr(n,e){let t=e.subject;return t?t.kinds==="*"?n.kinds:t.kinds:[]}function Hr(n,e){let t=n.subject;if(!t||!n.writes&&n.creates?.length)return[];let r=new Set(Object.keys(e.fields.shape));if(n.writes)return n.writes.filter(s=>r.has(s));let o=n.input.shape??{},i=new Set(Ln(n.input).map(s=>s.name));return Object.keys(o).filter(s=>s!==t.arg&&r.has(s)&&!i.has(s))}function Pa(n,e){let t=new Map,r=(o,i,s)=>{let a=t.get(o)??new Map;a.get(i)?.includes(s)||(a.set(i,[...a.get(i)??[],s]),t.set(o,a))};for(let o of e){for(let i of qr(n,o)){let s=n.tryDefinition(i);if(s)for(let a of Hr(o,s))r(i,a,o.name)}for(let[i,s]of Object.entries(o.writesOther??{})){let a=n.tryDefinition(i)?.fields.shape;if(a)for(let d of s)d in a&&r(i,d,o.name)}}return t}function za(n,e,t){let r=n.tryDefinition(t);if(!r)return[];let o=Pa(n,e).get(t);return Ea(r).filter(i=>!o?.has(i))}var Ma=n=>`edit-${n}`;function Na(n,e,t){let r=n.tryDefinition(t);if(!r)return[];let o=new Set;for(let i of e)i.derived||((i.creates??[]).includes(t)&&o.add(i.name),qr(n,i).includes(t)&&Hr(i,r).length>0&&o.add(i.name));return[...o]}function Ia(n,e){let t=new Set(e.map(o=>o.name)),r=[];for(let o of n.definitions){let i=o.kind,s=Ma(i);if(t.has(s))continue;let a=za(n,e,i);if(a.length===0)continue;let d=o.fields.shape,l=K(o,i),u=a.map(p=>Xn(o,p).toLowerCase());r.push({name:s,derived:{kind:i,act:"edit"},idempotent:!0,title:`Change the ${l}`,description:`Change what was set when this ${l} was made: ${u.join(", ")}.`,subject:{kinds:[i],arg:"id"},writes:a,input:Ke({id:ke([i]),...Object.fromEntries(a.map(p=>[p,Q(tl(d[p]))]))}),describe:(p,c)=>el(o,d,a,p,c),apply(p,c){let f={};for(let g of a){let h=c[g];h!==void 0&&(f[g]=h)}if(Object.keys(f).length===0)throw new ee(`Nothing to change \u2014 give at least one of ${u.join(", ")} a value.`,"invalid");p.patchNode(c.id,f)}})}return r}function el(n,e,t,r,o){let i=o.getNode(r.id),s=i?F(n,i):"a record",a=t.filter(d=>r[d]!==void 0).map((d,l)=>{let u=r[d],p=On(d),c=p!==void 0&&p in e,f=Xn(n,c?p:d);return`the ${f===f.toUpperCase()?f:f.charAt(0).toLowerCase()+f.slice(1)}${l===0?` of ${s}`:""} to ${c?u?`repeat ${nl(u)}`:"stop repeating":ja(n,e[d],d,u)}`});return a.length===0?`Changed nothing on ${s}`:`Changed ${a.length>1?`${a.slice(0,-1).join(", ")} and ${a.at(-1)}`:a[0]}`}var nl=n=>`every ${(n.interval??1)>1?`${n.interval} ${n.every}s`:n.every}`;function ja(n,e,t,r){if(r===null||r===""||Array.isArray(r)&&r.length===0)return"nothing";let o=n.display?.format?.[t];try{if(o)return String(o(r))}catch{}if(Rn(r).length>0)return Rn(r).map(i=>i.name).join(", ");if(_n(e))return Array.isArray(r)&&r.length>1?`${r.length} linked records`:"a linked record";if(Array.isArray(r))return r.map(i=>ja(n,e,t,i)).join(", ");if(typeof r=="boolean")return r?"yes":"no";if(typeof r=="number"){let i=Vr(e);return i?Ra(r,i):Wr(e)==="duration"?`${r>=60?`${Math.floor(r/60)} h `:""}${r%60||r<60?`${r%60} min`:""}`.trim():String(r)}if(typeof r!="string")return"a new value";if(Fe.test(r))return ge(r);if(qn.test(r))return Zt(r);for(let i=I(e);i;i=I(i.innerType))if(i.type==="enum")return C(r);return`\u201C${_a(r,60)}\u201D`}function tl(n){let e=n;for(let t=0;t<4;t++){let r=e._zod?.def;if((r?.type==="default"||r?.type==="prefault")&&r.innerType)e=r.innerType;else break}return e}function Ta(n,e){return n.filter(t=>!t.derived&&(t.creates??[]).includes(e)).map(t=>t.name)}function wt(n,e,t){if(!t.derived)return;let r=t.derived.act;return r==="edit"||r==="skip"||r==="detach"||r==="split"||r==="connect"||r==="disconnect"?Na(n,e,t.derived.kind):Ta(e,t.derived.kind)}function rl(n,e){let t=new Set(e.map(o=>o.name)),r=[];for(let o of n.definitions){let i=o.kind,s=K(o,i),a=(l,u)=>{let p=l.getNode(String(u));return p?F(o,p):String(u)},d=ke([i]);for(let[l,u,p,c]of[["remove","Remove",`Remove the ${s}`,`Take this ${s} out of the graph, with every tie it has. Undo puts it back.`],["archive","Archive",`Archive the ${s}`,`Set this ${s} aside, with its ties and history kept.`],["unarchive","Bring back","Bring it back",`Bring this archived ${s} back.`],["merge","Merge",`Merge into another ${s}`,`The other takes this ${s}'s ties, and this one is archived.`],["leave-alone","Leave alone","Leave this one alone",`Nothing automated changes this ${s}: tidying passes it by until you allow it again.`],["allow-tidying","Allow tidying of","Allow tidying again",`Let tidying change this ${s} again.`]]){let f=`${l}-${i}`,g=l==="leave-alone"||l==="allow-tidying";t.has(f)||!g&&l!=="remove"&&o.archives===!1||g&&o.tidying==="never"||r.push({name:f,derived:{kind:i,act:l},title:p,description:c,subject:{kinds:[i],arg:"id"},...l==="remove"?{destructive:!0}:{},idempotent:!0,input:Be(l==="merge"?{id:d,into:d}:{id:d}),describe:(h,v)=>{let y=l==="remove"&&v.getNode(String(h.id)),S=y?new Set(Object.values(y).flatMap(A=>Rn(A).map(m=>m.href))).size:0;return`${u} ${a(v,h.id)}${l==="merge"?` into ${a(v,h.into)}`:""}${S?` and its ${S} file${S>1?"s":""}`:""}`},apply:g?(h,v)=>h.patchNode(String(v.id),{[Pn]:l==="leave-alone"?!0:void 0}):(h,v)=>h[`${l}Node`](v.id,v.into)})}}return r}function Yr(n,e){return[...Ia(n,e),...rl(n,e),...Aa(n,e),...Oa(n,e)]}var ol=n=>({$made:n}),kt=n=>typeof n=="object"&&n!==null&&Object.keys(n).join()==="$made"&&Number.isInteger(n.$made)&&n.$made>=0,il=(n,e)=>Object.fromEntries(Object.entries(n.args??{}).map(([t,r])=>[t,Array.isArray(r)?r.map(e):e(r)])),Da=n=>Object.values(n.args??{}).some(e=>kt(e)||Array.isArray(e)&&e.some(kt)),Fa=(n,e,t)=>({...n,args:il(n,r=>{if(!kt(r))return r;let o=r.$made<t?e[r.$made]:void 0;if(o===void 0)throw new Error(`\u201C${n.name}\u201D names the record call ${r.$made+1} makes, and no call before it made that record.`);return o})});var sl=500,Jr=120;function Gn(n){if(n===void 0)return;let{basis:e,confidence:t,model:r,suggestion:o,interaction:i}=n??{},s=typeof e=="string"?e.trim():"",a=typeof r=="string"?r.trim():"";if(!s||s.length>sl||t!==void 0&&!(typeof t=="number"&&t>=0&&t<=1)||r!==void 0&&!(a&&a.length<=Jr)||o!==void 0&&!(typeof o=="string"&&o.length>0&&o.length<=Jr)||i!==void 0&&!(typeof i=="string"&&i.length>0&&i.length<=Jr))throw new N("A lineage is { basis: 1\u2013500 characters, confidence?: 0\u20131, model?: 1\u2013120 characters, suggestion?: an op id, interaction?: an AI interaction's id }");return{basis:s,...t!==void 0?{confidence:t}:{},...a?{model:a}:{},...typeof o=="string"?{suggestion:o}:{},...typeof i=="string"?{interaction:i}:{}}}var an="keep-link";function Za(n){let e=(t,r)=>{let o=t.getNode(r);return o?F(n.tryDefinition(o.kind),o):r};return{name:an,title:"Keep this link",input:Be({kind:D(),from:D(),to:D()}),describe:(t,r)=>`Keep the link from ${e(r,t.from)} to ${e(r,t.to)}`,apply(t,r){let{kind:o,from:i,to:s}=r;if(!t.graph.getNode(i)||!t.graph.getNode(s)){let a=z({kind:o,from:i,to:s});throw new B(a,`Cannot remove missing edge ${a}`)}t.removeEdge({kind:o,from:i,to:s}),t.addEdge({kind:o,from:i,to:s})}}}var La=(n,e)=>[...n].filter(t=>!t.derived&&t.name!==an&&typeof e=="string"&&(t.connects?.includes(e)||t.severs?.includes(e))).map(t=>t.name);var Ca=["kind-unknown","node-shape","edge-dangling","edge-disallowed","rule-error","rule-budget"];function Ga(n,e){let t=ft(n,e);return t&&[...t.fields].filter(Boolean)}function al(n,e,t){return n.tryDefinition(e)?.fields?.shape?.[t]}function St(n,e){try{return F(n.tryDefinition(e.kind),e)}catch{return typeof e.label=="string"?e.label:"A record"}}var dl=n=>`${n.kind}:${n.from}->${n.to}`,$t=(n,e)=>n<e?-1:n>e?1:0;function Ba(n,e,t={}){let{schema:r}=n,o=[],i=new Map;for(let c of e.nodes)i.has(c.id)||i.set(c.id,c);let s=c=>e.edges.filter(f=>f.from===c||f.to===c),a=c=>({action:"drop",primitives:[...s(c.id).filter(f=>i.has(f.from)&&i.has(f.to)).map(f=>({op:"remove-edge",edge:f})),{op:"remove-node",node:c}]}),d=new Set;for(let c of[...i.values()].sort((f,g)=>$t(f.id,g.id))){if(!r.tryDefinition(c.kind)){d.add(c.id),o.push({code:"kind-unknown",id:c.id,message:`${St(r,c)} is a kind of record this app no longer has`,repair:a(c)});continue}let f=Ga(r,c);if(f===void 0)continue;let g=St(r,c),h=new Map,v=f.length>0;for(let y of f){if(y==="id"||y==="kind"){v=!1;continue}let S=al(r,c.kind,y),A=S?S.safeParse(void 0):{success:!0,data:void 0},m=r.tryDefinition(c.kind)?.defaults;!A.success&&S&&m&&Object.hasOwn(m,y)&&(A=S.safeParse(m[y])),A.success?A.data===void 0?h.set(y,{action:"clear",value:re}):h.set(y,{action:"coerce",value:A.data}):v=!1}if(v){let y={...c};for(let[S,A]of h)A.value===re?delete y[S]:y[S]=A.value;Ga(r,y)!==void 0&&(v=!1)}if(f.length===0){o.push({code:"node-shape",id:c.id,message:`${g} does not fit what ${c.kind} declares`,repair:a(c)});continue}for(let y of f){let S=h.get(y),A=v&&S?{action:S.action,primitives:[{op:"patch-node",id:c.id,before:{[y]:c[y]===void 0?re:c[y]},after:{[y]:S.value}}]}:a(c);o.push({code:"node-shape",id:c.id,detail:y,message:`${g}: ${C(y)} does not fit what ${c.kind} declares`,repair:A})}}let l=new Set,u=[];for(let c of[...e.edges].sort((f,g)=>$t(z(f),z(g)))){if(l.has(z(c)))continue;l.add(z(c));let f=dl(c),g=i.get(c.from),h=i.get(c.to);if(!g||!h){o.push({code:"edge-dangling",id:f,message:"A link points at a record that is not there",repair:{action:"drop",primitives:[{op:"remove-edge",edge:c}]}});continue}u.push(c),!(d.has(g.id)||d.has(h.id))&&(r.edgeAllowed(c.kind,g.kind,h.kind)||o.push({code:"edge-disallowed",id:f,message:`${St(r,g)} \u2192 ${St(r,h)}: this app does not allow that link between them`,repair:{action:"drop",primitives:[{op:"remove-edge",edge:c}]}}))}let p=n.invariants??[];if(p.length>0){let c=W.from(r,{nodes:[...i.values()],edges:u},{validate:!1}),f=new Set,g;try{g=Je(c,p,t.invariantOptions??{})}catch{g=[{invariant:"rules",status:"could-not-judge",label:"The rules",message:"The rules could not be judged",nodeIds:[],repairs:[]}]}for(let h of g){let v=h.status==="could-not-judge"?"rule-error":h.status==="over-budget"?"rule-budget":void 0;if(!v)continue;let y=h.subjectId??h.invariant,S=`${v}|${y}|${h.invariant}`;f.has(S)||(f.add(S),o.push({code:v,id:y,detail:h.invariant,message:h.message}))}}return o.sort((c,f)=>Ca.indexOf(c.code)-Ca.indexOf(f.code)||$t(c.id,f.id)||$t(c.detail??"",f.detail??""))}var Bn=()=>globalThis.__graviewWatch;function Ka(n){Bn()?.store?.(n)}function Rt(n){n!==void 0&&Bn()?.learn?.({ids:[n],words:[]})}function Ua(n,e){Bn()?.refused?.({...n,...e===void 0?{}:{author:e}})}function Xr(n,e){let t=Bn();if(!t?.refusedInput)return;let r=n.issues.map(o=>`${o.path.map(String).join(".")}: ${o.message}`).join("; ");t.refusedInput({mutation:n.mutation,message:r,...e===void 0?{}:{author:e}})}function cl(n,e){n instanceof oe&&Xr(n,e)}function ul(n,e,t){Bn()?.seat?.(n,e,t)}function eo(n,e){if(typeof n=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(n))return n;let t=new Date(n).getTime();if(Number.isNaN(t))throw new Error(`Not a day: ${String(n)}`);return H(e,t)}var Qr=15*6e4;function Va(n=Date.now(),e){let t=new Date(n).getTime(),r=Hn(e),o=H(r,t),i=new Date(Date.parse(`${o}T00:00:00Z`));if(i.setUTCDate(i.getUTCDate()+1),!r)return i.getTime()-t;let s=Ao(i.toISOString().slice(0,10),0,r);for(;H(r,s)===o;)s+=Qr;for(;H(r,s-Qr)!==o;)s-=Qr;return s-t}function ll(n,e){let t,r=()=>{t=setTimeout(()=>{let o=n.tick(new Date);r(),e?.(o)},Va(Date.now(),n.timeZone)+1e3),t.unref?.()};return r(),()=>clearTimeout(t)}var _t=class extends N{constructor(e){super(`This is the app as it stood${e.at?` at ${e.at}`:" at the start"}: the past is read, never changed`),this.name="PastError"}},no="preview",Z=(n,e)=>e===void 0?{}:{[n]:e},Me={kind:"human"},Wa={kind:"system"},Ha={kind:"system",id:"modules",name:"Modules"},qa=n=>n.mutation===null&&n.undoes===void 0;function to(n,e){return`${n.invariant}|${n.subjectId??""}|${n.line||e?.has(n.invariant)?n.label:n.message}`}var fl=new Set(["remove","archive","unarchive","merge"]),pl={has:()=>!0},Ya=n=>new Set(n.filter(e=>e.shape).map(e=>e.name));function Ja(n,e,t){let r=Ya(n),o=p=>to(p,r),i=new Set(e.map(o)),s=new Set(t.map(o)),a=t.filter(p=>!i.has(o(p))),d=e.filter(p=>!s.has(o(p)));if(a.length===0||d.length===0)return{introduces:a,resolves:d};let l=p=>p.subjectId&&to(p,pl),u=d.map(l);return{introduces:a.filter(p=>{let c=l(p)?u.indexOf(l(p)):-1;return c<0||(u[c]=null,!1)}),resolves:d.filter((p,c)=>u[c]!==null)}}var dn=class extends Error{constructor(t,r){super(`Op "${t.id}" (${t.intent}) could not be applied: ${r instanceof Error?r.message:String(r)}`,{cause:r});this.op=t;this.name="ReceiveError"}},At=class extends N{constructor(t,r){super(`Unknown mutation "${t}"`,`Registered: ${r.join(", ")||"(none)"}`);this.mutation=t;this.name="UnknownMutationError"}};function hl(){let n=globalThis.crypto,e=new Uint8Array(6);if(n?.getRandomValues)n.getRandomValues(e);else for(let t=0;t<e.length;t++)e[t]=Math.floor(Math.random()*256);return[...e].map(t=>t.toString(36).padStart(2,"0")).join("")}var ro=class n{schema;graph;log;mutations=new Map;keeper;invariants;invariantOptions;policy;intelligence;may=new Map;by;declaredModules;startingModules;projected;nextId;now;validate;mintBatch;batchTag;counter=0;opCount=0;quiet=0;rehearsing=!1;suggesting=!1;ticked;timeZone;past;pastEvery;listeners=new Set;constructor(e){this.pastEvery=Math.max(1,e.pastEvery??64),this.past=e.past,this.schema=e.schema,this.invariants=e.invariants??[],this.invariantOptions=e.invariantOptions??{},this.timeZone=e.timeZone,this.timeZone&&(this.ticked={day:H(this.timeZone),on:H(this.timeZone)}),this.policy=e.policy,this.by=e.principal??Me,this.intelligence=e.intelligence??[];for(let i of e.intelligence??[])i.may&&this.may.set(i.name,new Set(i.may));this.declaredModules=e.modules,this.startingModules=e.enabledModules,this.nextId=e.ids??(()=>`op${++this.opCount}`),this.now=e.now??(()=>new Date().toISOString()),this.validate=e.validate??!0;let t=hl();this.batchTag=e.batchIds?void 0:t,this.mintBatch=e.batchIds??(i=>`${i}:${t}:${++this.counter}`);for(let i of e.past?[]:e.mutations??[]){if(this.mutations.has(i.name))throw new N(`Duplicate mutation "${i.name}"`);this.mutations.set(i.name,i)}for(let i of e.past?[]:Yr(e.schema,e.mutations??[]))this.mutations.set(i.name,i);!e.past&&!this.mutations.has(an)&&(this.keeper=Za(e.schema),this.mutations.set(an,this.keeper));let r=Z("horizon",e.horizon),o={validate:this.validate};if(e.log){this.log=en.from(e.log,e.epochs,r);let i=this.log.lastEpoch();this.graph=e.snapshot?W.from(e.schema,e.snapshot,o):this.log.fold(e.schema,{...o,...i?{from:i}:{}})}else this.log=en.from([],e.epochs??(e.snapshot?[{seq:e.horizon??0,base:e.snapshot}]:[]),r),this.graph=W.from(e.schema,e.snapshot??{nodes:[],edges:[]},o);e.past||(this.countPastTheLog(),Ka(this))}stillNow(){if(this.past)throw new _t(this.past)}countPastTheLog(){let e=t=>{let r=/(\d+)$/.exec(t);return r?Number(r[1]):0};for(let t of this.log.all())this.counter=Math.max(this.counter,e(t.batch)),this.opCount=Math.max(this.opCount,e(t.id));this.log.horizon>0&&(this.opCount=Math.max(this.opCount,this.log.length))}get modules(){let e=this.log.all(),t=e.at(-1)?.id,r=this.projected;if(r&&r.length===e.length&&r.last===t)return r.projection;let o,i=0;r&&r.length<=e.length&&(r.length===0||e[r.length-1]?.id===r.last)&&(o=r.said,i=r.length);for(let a=e.length-1;a>=i;a--){let d=e[a].enabledModules;if(d!==void 0){o=d;break}}let s=r&&o===r.said?r.projection:Cr(this.declaredModules,o??this.startingModules);return this.projected={projection:s,length:e.length,last:t,said:o},s}setEnabledModules(e,t={}){this.stillNow();let r=this.modules.enabled,o=Cr(this.declaredModules,e).enabled,i=[...r].filter(u=>!o.has(u)),s=[...o].filter(u=>!r.has(u));if(i.length===0&&s.length===0)return;let a=u=>u.map(p=>{let c=this.declaredModules?.[p]?.kinds??[];return c.length>0?c.map(f=>ne(this.schema,f)).join(", "):p}).join(", "),d=[i.length>0?`Turn off ${a(i)}`:"",s.length>0?`turn on ${a(s)}`:""].filter(Boolean).join("; "),l={id:this.nextId(),seq:this.log.length,batch:t.batch??this.mintBatch("batch"),author:Ha,intent:yn(d),mutation:null,primitives:[],inverse:[],reads:[],writes:[],at:this.now(),...Z("via",t.via),enabledModules:[...o].sort()};return this.log.append(l),this.notify(Nn,[l]),l}mutation(e){let t=this.mutations.get(e);if(!t)throw new At(e,[...this.mutations.keys()]);if(this.mutationDisabled(t))throw new N(`Mutation "${e}" belongs to a module this workspace has turned off`,`Enabled modules: ${[...this.modules.enabled].join(", ")||"(none)"}`);return t}mutationDisabled(e){return this.modules.disabledMutations.has(e.name)?!0:e.derived!==void 0&&this.modules.disabledKinds.has(e.derived.kind)}allMutations(){return[...this.mutations.values()].filter(e=>e!==this.keeper&&!this.mutationDisabled(e))}viaOf(e,t){if(e!==void 0&&e===this.keeper){let r=La(this.mutations.values(),t?.args.kind);if(r.length>0)return r;let o=[...this.mutations.values()];return[...new Set(o.filter(i=>i.derived?.relation===t?.args.kind).flatMap(i=>wt(this.schema,o,i)??[]))]}if(e?.derived)return wt(this.schema,[...this.mutations.values()],e)}moved(e,t){return Ja(this.allInvariants(),e,t)}allInvariants(){return this.invariants.filter(e=>this.invariantEnabled(e))}invariantEnabled(e){if(this.modules.disabledInvariants.has(e.name))return!1;if(e.scope!=="graph"){let t=e.scope.kind;if(this.modules.disabledKinds.has(t))return!1}return!0}permits(e,t=Me){if(this.past)return{ok:!1,refusal:{mutation:e.name,wouldNeed:[],message:"Nothing changes while you look back."}};let r=this.refusesAgent(e,t)??this.namesTurnedOff(e,t);if(r)return{ok:!1,refusal:r};let o=this.mutations.get(e.name),i=o?.subject&&e.args[o.subject.arg];return xe(this.policy,t,e.name,this.subjectKindOf(e,t),this.viaOf(o,e),typeof i=="string"?i:void 0,this.words,()=>{let s=T(t).id,a=this.namedIn(e,!1);try{for(let d of sn(this.graph,o,e.args,this.sighted(t)).primitives)"edge"in d&&d.edge.from!==s&&d.edge.to!==s&&a.push(d.edge.to)}catch{}return a},o?.derived&&(()=>fe(this.log).creatorOf(i)),o?.derived!==void 0&&fl.has(o.derived.act))}namedIn(e,t=!0){let r=this.mutations.get(e.name);if(!r)return[];let o=r.subject?.arg;return[...t&&o?[e.args[o]]:[],...Ln(r.input).flatMap(s=>s.name===o?[]:[e.args[s.name]])].flat().filter(s=>typeof s=="string")}refuse(e,t,r=!this.rehearsing){throw r&&Ua(e,t),new Pe(e)}get words(){return{act:e=>this.mutations.get(e)?.title,noun:e=>K(this.schema.tryDefinition(e),e)}}refusesAgent(e,t){if(t.kind!=="agent"||t.id===void 0)return;let r=this.may.get(t.id);if(!r||r.has(e.name))return;let o=s=>`\u201C${this.mutations.get(s)?.title??s}\u201D`,i=[...r].map(o);return{mutation:e.name,message:`${t.id} may not ${o(e.name)} here: it was declared able to ${i.length===0?"do nothing else":i.join(", ")}.`,wouldNeed:[]}}namesTurnedOff(e,t=Wa){let r=this.modules.disabledKinds;if(r.size===0||!q(t))return;let o=this.mutations.get(e.name);if(!(!o||!this.namedIn(e).some(i=>r.has(this.graph.getNode(i)?.kind))))return{mutation:e.name,message:`\u201C${o.title??e.name}\u201D names a record of a module this workspace has turned off.`,wouldNeed:[]}}sighted(e){let t={me:e&&T(e).id};if(e===void 0||!rn(this,e))return t;let r=Fn(this,e);return{...t,seen:Zn(this,e).graph,keepUnchanged:o=>j(o,r),seesInFull:aa(this,e)}}missingFor(e,t=Me){let r=this.mutations.get(e.name),o=new Set(this.namedIn(e));if(!r||o.size===0)return;let i=Zn(this,t).graph;for(let s of o)if(!i.has(s))return new B(s,`\u201C${r.title??e.name}\u201D names a record that is not there.`)}mayAdminister(e,t=Me){let r=this.modules.administered.get(e);return r?(r.mutations??[]).some(o=>{let i=this.mutations.get(o);return!!i&&Or(i).some(s=>xe(this.policy,t,o,s,this.viaOf(i)).ok)}):!1}seenBy(e){return Zn(this,e)}sees(e,t){return this.graph.has(t)&&Fn(this,e)(t)}labels;resolveRef(e,t,r=Me){let o=(this.policy?.sees?.length??0)>0,i=c=>!o||this.sees(r,c),s=this.graph.getNode(t);if(this.labels??=new vt(this.graph),s&&i(t))return{ok:!0,id:t,label:this.labels.labelOf(t)??t,by:"id"};let a=this.labels.lookup(e.kinds,t),d=c=>{let f=c.filter(g=>!this.graph.isArchived(g));return f.length?f:c},l=d(a.exact.filter(i)),u=l.length>0,p=(u?l:d(a.prefix.filter(i))).map(c=>({id:c,kind:this.graph.getNode(c).kind,label:this.labels.labelOf(c)??c})).sort((c,f)=>c.label<f.label?-1:c.label>f.label?1:c.id<f.id?-1:1);return p.length===1?{ok:!0,id:p[0].id,label:p[0].label,by:u?"label":"prefix"}:fa(this.schema,e,t,p)}kindsKeptFrom(e=Me){let t=new Set;for(let[o,i]of this.modules.administered)if(!this.mayAdminister(o,e))for(let s of i.kinds??[])t.add(s);let r=this.policy?.sees??[];if(r.length>0&&!q(e)){let o=new Set(this.permittedMutations(e).flatMap(s=>s.creates??[])),i=we(this);for(let s of this.schema.kinds)!r.some(d=>d.kinds.includes(s)&&ve(d,e)&&(!d.own&&!d.via||e.id!==void 0)&&(i||!Dn(d)))&&!o.has(s)&&t.add(s)}return t}permittedMutations(e=Me){let t=this.allMutations(),r=Ar(this.policy,e,t.filter(i=>!i.derived)),o=t.filter(i=>i.derived!==void 0&&xe(this.policy,e,i.name,i.derived.kind,this.viaOf(i),T(e).id).ok);return[...r,...o]}subjectKindOf(e,t=Wa){let o=this.mutations.get(e.name)?.subject;if(!o)return;let i=e.args[o.arg];if(typeof i!="string")return o.kinds!=="*"&&o.kinds.length===1?o.kinds[0]:void 0;if(!(!q(t)&&!Fn(this,t)(i)))return this.graph.getNode(i)?.kind}today(){return this.pinned()??(this.ticked&&this.ticked.on===H(this.timeZone)?this.ticked.day:void 0)??(this.timeZone?H(this.timeZone):void 0)}pinned(){let e=this.invariantOptions.context,t=this.invariantOptions.today??e?.today;return typeof t=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(t)?t:void 0}judging(e){let t=this.today(),r=vs(this.graph),o=e??this.invariantOptions.context,i=r&&!(o&&"linked"in o)?{...o,linked:r}:e,s=i??o,a=this.timeZone&&t!==void 0&&e===void 0&&!(s&&"today"in s)?{...s,today:t}:i;return{...this.invariantOptions,...a===void 0?{}:{context:a},...t===void 0?{}:{today:t}}}tick(e=new Date){let t=this.pinned();if(t!==void 0)return{day:t,was:t,appeared:[],cleared:[]};let r=eo(e,this.timeZone),o=H(this.timeZone);this.ticked&&(this.ticked={day:this.ticked.day,on:o});let i=this.today(),s=this.violations();this.ticked={day:r,on:o};let a=this.moved(s,this.violations());if(r!==i&&!this.rehearsing&&this.quiet===0)for(let d of this.listeners)d(Nn,[]);return{day:r,...i===void 0?{}:{was:i},appeared:a.introduces,cleared:a.resolves}}reread(){if(!(this.rehearsing||this.quiet>0))for(let e of this.listeners)e(Nn,[])}violations(e,t=this.graph){return Je(t,this.allInvariants(),this.judging(e)).map(r=>this.asking(r))}required=new Map;asking(e){if(!e.repairs.some(o=>o.missing===void 0))return e;let t=!1,r=e.repairs.map(o=>{if(o.missing!==void 0)return o;let i=this.requiredOf(o.mutation).filter(s=>o.args?.[s]===void 0);return i.length===0?o:(t=!0,{...o,missing:i})});return t?{...e,repairs:r}:e}requiredOf(e){let t=this.required.get(e);if(t)return t;let r=this.mutations.get(e)?.input?.shape??{},o=Object.entries(r).filter(([,i])=>typeof i?.safeParse=="function"&&!i.safeParse(void 0).success).map(([i])=>i);return this.required.set(e,o),o}wouldChange(e,t){try{return sn(this.graph,this.mutation(e.name),e.args,this.sighted(t)).primitives.length>0}catch{return!0}}preview(e,t,r={}){let o=this.mutation(e.name),i=sn(this.graph,o,e.args,this.sighted(r.author));return this.previewPrimitives(i.primitives,{reads:i.reads,writes:i.writes,intent:i.intent,context:t})}previewAll(e,t={}){let{context:r,...o}=t;return{...this.rehearsal().applying(e,o,r),kept:!1}}rehearsal(){let e=Object.assign(Object.create(n.prototype),this),t=0;return Object.assign(e,{graph:W.from(this.schema,this.graph.snapshot(),{validate:this.validate}),log:en.from(this.log.all(),this.log.epochs(),{horizon:this.log.horizon}),listeners:new Set,labels:void 0,nextId:()=>`${no}:${++t}`,mintBatch:()=>no,rehearsing:!0}),e}previewPrimitives(e,t){let r=this.violations(t.context),o=W.from(this.schema,this.graph.snapshot()),i=o.applyPrimitives(e,{restoring:t.restoring===!0}),s=Je(o,this.allInvariants(),this.judging(t.context));return{diff:i,primitives:e,reads:t.reads,writes:t.writes,intent:t.intent,...this.moved(r,s),violationsAfter:s}}apply(e,t={}){return this.applyAll([e],t)}applyAll(e,t={}){return this.applying(e,t)}applying(e,t,r){this.stillNow();let o=t.batch??this.mintBatch("batch"),i=t.author??this.by,s=Gn(t.lineage),a=[],d=[],l=new Set,u=new Set,p=[],c=this.violations(r),f=this.graph.snapshot(),g=this.log.length,h=w=>{let x=this.policy?this.permits(w,i):void 0;x&&!x.ok&&this.refuse(x.refusal,i.id)},v=w=>{let x=this.refusesAgent(w,i)??this.namesTurnedOff(w,i);x&&this.refuse(x,i.id)},y=e.map(Da);e.forEach((w,x)=>y[x]||h(w)),e.forEach((w,x)=>y[x]||v(w));let S=Mr(i);S&&this.refuseDeclined(e,i),this.rehearsing||Rt(i.id);let A=[];try{for(let[w,x]of e.entries()){let b=y[w]?Fa(x,A,w):x;y[w]&&(h(b),v(b));let $=this.mutation(b.name),R=this.missingFor(b,i);if(R)throw R;let _;try{_=sn(this.graph,$,b.args,this.sighted(i))}catch(E){throw E instanceof oe&&!this.rehearsing&&Xr(E,i.id),E}if(S){let E=Xs(this.schema,this.graph,_.primitives,this.authorName(i),{declaration:!this.suggesting});E&&this.refuse({mutation:b.name,message:E,wouldNeed:[]},i.id)}if(_.primitives.length===0)continue;A[w]=_.primitives.find(E=>E.op==="add-node")?.node.id;let P={id:this.nextId(),seq:this.log.length,batch:o,author:i,intent:$.describe!==void 0?_.intent:t.intent??_.intent,...Z("batchIntent",t.intent),mutation:b,primitives:_.primitives.map(zn),inverse:[..._.primitives].reverse().map(zn).map(Mn),reads:_.reads,writes:_.writes,...$.describe!==void 0&&_.described&&_.described.length>0?{described:_.described}:{},...Z("mergedInto",_.mergedInto),at:this.now(),...Z("via",t.via),...Z("lineage",s)};this.graph.applyPrimitives(P.primitives),this.log.append(P),a.push(P),d.push(...P.primitives);for(let E of P.reads)l.add(E);for(let E of P.writes)u.add(E);p.push(P.intent)}}catch(w){throw this.putBack(f,g),w}let m=be(f,this.graph.snapshot(),d);this.admitted(t,a,d,m,f,g);let k=this.violations(r);return this.notify(m,a),{batch:o,ops:a,diff:m,primitives:d,reads:[...l],writes:[...u],intent:t.intent??p.join("; "),...this.moved(c,k),violationsAfter:k}}receive(e,t={}){this.stillNow();let r=new Set(this.log.all().map(d=>d.id)),o=e.filter(d=>!r.has(d.id));if(o.length===0)return[];let i=this.graph.snapshot(),s=[];if(!t.applied)for(let d of o)try{this.graph.applyPrimitives(d.primitives,{restoring:d.undoes!==void 0})}catch(l){throw this.graph.load(i),new dn(d,l)}let a=this.log.length;for(let[d,l]of o.entries()){let u={...l,seq:a+d};this.log.append(u),s.push(u)}return this.notify(be(i,this.graph.snapshot(),o.flatMap(d=>d.primitives)),s),s}append(e,t={}){if(this.stillNow(),e.length===0)return[];let r=new Set(this.log.all().map(a=>a.id)),o,i=e.map((a,d)=>{let l=a.primitives.map(zn),u={id:a.id??this.nextId(),seq:this.log.length+d,batch:a.batch??t.batch??(o??=this.mintBatch("batch")),author:a.author,intent:a.intent,...Z("batchIntent",a.batchIntent),mutation:a.mutation??null,primitives:l,inverse:a.inverse??[...l].reverse().map(Mn),reads:a.reads??[],writes:a.writes??[...new Set(l.flatMap(Oe))],at:a.at??this.now(),...Z("undoes",a.undoes),...Z("via",a.via),...Z("lineage",Gn(a.lineage))};if(r.has(u.id))throw new N(`Op "${u.id}" (${u.intent}) is already in the log`,"A host-made op needs an id of its own; leave `id` out and the store mints one.");return r.add(u.id),u}),s=this.graph.snapshot();for(let a of i)try{this.graph.applyPrimitives(a.primitives,{restoring:a.undoes!==void 0})}catch(d){throw this.graph.load(s),new dn(a,d)}for(let a of i)this.log.append(a);for(let a of i)Rt(a.author.id);return this.notify(be(s,this.graph.snapshot(),i.flatMap(a=>a.primitives)),i),i}applyPrimitives(e,t={}){this.stillNow();let r=t.batch??this.mintBatch("batch"),o=t.author??this.by,i=this.violations(),s=this.graph.snapshot(),a=t.intent??"Apply a change",d=Gn(t.lineage),l=e.map(zn),u=[];if(l.length>0){let f={id:this.nextId(),seq:this.log.length,batch:r,author:o,intent:a,mutation:null,primitives:l,inverse:[...l].reverse().map(Mn),reads:[],writes:[...new Set(l.flatMap(Oe))],at:this.now(),...Z("via",t.via),...Z("lineage",d)};this.graph.applyPrimitives(f.primitives),this.log.append(f),u.push(f),Rt(o.id)}let p=this.violations(),c=be(s,this.graph.snapshot(),l);return this.notify(c,u),{batch:r,ops:u,diff:c,primitives:l,reads:[],writes:u[0]?.writes??[],intent:a,...this.moved(i,p),violationsAfter:p}}findings(){return Ba({schema:this.schema,invariants:this.allInvariants()},this.graph.snapshot(),{invariantOptions:this.invariantOptions})}batches(){return this.log.batches()}canUndo(e){return Tn(this.log,typeof e=="string"?[e]:e)}previewUndo(e,t){let r=this.canUndo(e);if(!r.ok)return{ok:!1,check:r};let o=Gs(r.ops),i=new Set;for(let s of r.ops)for(let a of s.writes)i.add(a);return{ok:!0,check:r,...this.previewPrimitives(o,{reads:[...new Set(r.ops.flatMap(s=>[...s.reads]))],writes:[...i],intent:`Undo: ${r.ops.map(s=>s.intent).join("; ")}`,restoring:r.ops.every(qa),...t===void 0?{}:{context:t}})}}undo(e,t={}){return this.undoing(e,t)}undoing(e,t){this.stillNow();let r=typeof e=="string"?[e]:e,o=t.author??this.by,i=(this.policy?.sees?.length??0)>0&&!q(o);if(i){let h=Tn(Zr(Qe(this.log.all(),Fr(this,o)),()=>this.log.epochs()),r);if(!h.ok)throw new Ee(h)}let s=this.canUndo(r);if(!s.ok)throw new Ee(i?{ok:!1,ops:[],blockedBy:[],includeBatches:[],message:"Cannot undo on its own \u2014 a later change you cannot see depends on it, which only somebody who can see it can take back."}:s);let a=t.batch??this.mintBatch("undo"),d=Gn(t.lineage);if(this.policy)for(let h of s.ops){if(!h.mutation)continue;let v=T(h.author).id,y=A=>JSON.stringify(A).includes(JSON.stringify(v)),S=v!==void 0&&v!==T(o).id&&!q(o)&&!y(h.mutation.args)&&y(h.primitives)?{ok:!1,refusal:{mutation:h.mutation.name,wouldNeed:[],message:"it was done as somebody else."}}:this.permits(h.mutation,o);S.ok||this.refuse({...S.refusal,message:`Not permitted to undo "${h.intent}": ${S.refusal.message}`},o.id,!0)}let l=this.graph.snapshot(),u=this.violations(),p=[],c=this.log.length;for(let h of[...s.ops].sort((v,y)=>y.seq-v.seq)){let v={id:this.nextId(),seq:this.log.length,batch:a,author:o,intent:`Undo: ${h.intent}`,...Z("batchIntent",t.intent),mutation:null,primitives:h.inverse,inverse:[...h.inverse].reverse().map(Mn),reads:h.reads,writes:h.writes,at:this.now(),undoes:h.id,...Z("via",t.via),...Z("lineage",d),...Z("undoneLineage",h.lineage)};this.graph.applyPrimitives(v.primitives,{restoring:qa(h)}),this.log.append(v),p.push(v)}let f=be(l,this.graph.snapshot(),p.flatMap(h=>[...h.primitives]));this.admitted(t,p,p.flatMap(h=>[...h.primitives]),f,l,c);let g=this.violations();return this.notify(f,p),{batch:a,ops:p,diff:f,primitives:p.flatMap(h=>[...h.primitives]),reads:[...new Set(p.flatMap(h=>[...h.reads]))],writes:[...new Set(p.flatMap(h=>[...h.writes]))],intent:t.intent??p.map(h=>h.intent).join("; "),...this.moved(u,g),violationsAfter:g}}authorName(e){return En(e,{graph:this.graph,schema:this.schema})}refuseDeclined(e,t){let r=Js(this.log.all(),e);r&&this.refuse({mutation:e[0].name,message:`${this.authorName(t)} may not make this again: a person declined it on ${r.at.slice(0,10)}.`,wouldNeed:[]},t.id)}putBack(e,t){this.graph.load(e),this.log.length>t&&this.log.truncate(t)}admitted(e,t,r,o,i,s){if(!e.admit||t.length===0)return;let a=this.graph.size;try{e.admit({ops:t,primitives:r,added:{nodes:o.addedNodes.length,edges:o.addedEdges.length},removed:{nodes:o.removedNodes.length,edges:o.removedEdges.length},changed:{nodes:o.changedNodes.length},nodesAfter:a.nodes,edgesAfter:a.edges})}catch(d){throw this.putBack(i,s),d}}redo(e,t={}){return this.undo(e,t)}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}notify(e,t){if(!(this.quiet>0)&&!(t.length===0&&As(e)))for(let r of this.listeners)r(e,t)}rebase(e){this.stillNow();let t=new Set([...e.pending,...e.drop??[]]),r=this.log.all(),o=r.findIndex(h=>t.has(h.batch)),i=r.slice(o<0?r.length:o),s=this.log.horizon+(o<0?r.length:o),a=i.find(h=>!t.has(h.batch));if(a)throw new N(`Cannot rebase: op "${a.id}" (${a.intent}) comes after a pending batch and is neither pending nor dropped`,"While anything is pending, land the server's ops through rebase, so the log stays confirmed ops then pending ones.");let d=this.log.lastEpoch();if(d&&d.seq>s)throw new N(`Cannot rebase across an epoch: one begins at seq ${d.seq}, after pending op "${i[0].id}"`);let l=this.graph.snapshot(),u=[],p=[],c=[];this.quiet++;try{for(let v of[...i].reverse())this.graph.applyPrimitives(v.inverse,{restoring:!0,inPlace:!0});this.log.truncate(s);let h=new Set(this.log.all().map(v=>v.id));for(let v of e.confirmed){if(h.has(v.id))continue;try{this.graph.applyPrimitives(v.primitives,{restoring:v.undoes!==void 0})}catch(S){throw new dn(v,S)}let y={...v,seq:this.log.length};this.log.append(y),h.add(v.id),u.push(y)}for(let v of e.pending){let y=i.filter(S=>S.batch===v);if(y.length!==0)try{p.push(...this.replay(v,y))}catch(S){c.push({batch:v,error:S})}}}catch(h){this.log.truncate(s);for(let v of i)this.log.append(v);throw this.graph.load(l),h}finally{this.quiet--}let f=Ye(l,this.graph.snapshot()),g=[...u,...p];return this.notify(f,g),{diff:f,confirmed:u,pending:p,refused:c}}adopt(e){this.stillNow();let t=new Set(e.drop??[]),r=(e.pending??[]).filter(f=>!t.has(f)),o=this.log.all(),i=this.graph.snapshot(),s={ops:[...o],epochs:[...this.log.epochs()],horizon:this.log.horizon},a=new Set(o.map(f=>f.id)),d=new Map(r.map(f=>[f,o.filter(g=>g.batch===f)]));if(e.log.length>0)this.log.replace(e.log,e.epochs,Z("horizon",e.horizon));else{let f=e.horizon??0;this.log.replace([],e.epochs??[{seq:f,base:e.snapshot}],{horizon:f})}let l=[],u=[];this.quiet++;try{this.graph.load(e.snapshot),this.projected=void 0,this.countPastTheLog();for(let f of r){let g=d.get(f)??[];if(g.length!==0)try{l.push(...this.replay(f,g))}catch(h){u.push({batch:f,error:h})}}}catch(f){throw this.log.replace(s.ops,s.epochs,{horizon:s.horizon}),this.graph.load(i),this.projected=void 0,f}finally{this.quiet--}let p=this.log.all().filter(f=>!a.has(f.id)&&!l.includes(f)),c=Ye(i,this.graph.snapshot());return this.notify(c,[...p,...l]),{diff:c,adopted:p,pending:l,refused:u}}replay(e,t){let r=t[0],o={author:r.author,batch:e,...Z("intent",r.batchIntent),...Z("via",r.via),...Z("lineage",r.lineage)};if(r.undoes!==void 0){let i=t.map(a=>this.log.get(a.undoes??"")),s=t.find((a,d)=>i[d]===void 0);if(s)throw new N(`What "${s.intent}" took back is no longer in the log`);return this.undoing([...new Set(i.map(a=>a.batch))],o).ops}return t.every(i=>i.mutation!==null)?this.applying(t.map(i=>i.mutation),o).ops:this.append(t.map(({seq:i,...s})=>s))}snapshot(){return this.graph.snapshot()}verify(){let e=this.log.lastEpoch();return ma(this.schema,this.log.opsFrom(e?.seq??0),this.graph.snapshot(),{validate:this.validate,...e?{base:e.base}:{}})}checkpoint(e={}){let t=this.log.all(),r;if(e.seq!==void 0)r=e.seq;else{let a=this.log.length-(e.keepOps??1e3),l=Date.parse(e.now??this.now())-(e.keepDays??90)*864e5,u=t.find(c=>Date.parse(c.at)>l),p=u?u.seq:this.log.length;r=Math.min(a,p)}for(r=Math.min(Math.max(r,this.log.horizon),this.log.length);r>this.log.horizon&&r<this.log.length&&t[r-this.log.horizon].batch===t[r-1-this.log.horizon].batch;)r--;if(r<=this.log.horizon)return;let o=this.verify();if(!o.ok)throw new N(`Cannot compact a store that does not verify: ${o.reason}`);let i=this.log.checkpointAt(this.schema,r,{validate:this.validate}),s=ra(this.log,r);return Object.keys(s).length>0?{...i,creators:s}:i}compact(e){return this.stillNow(),this.log.compact(e)}};var gl=n=>`lens:${n}`,ml={hidden:[],removed:[],may:{views:!1,lenses:!1}};function yl(n,e,t){return n.name!==void 0&&e.may.views?"view":n.declared&&e.may.lenses&&t.lens?"lens":null}var Xa=["full","summary","glyph"],io=(n,e)=>n.as===e.as&&(n.over??[n.kind]).includes(e.kind),bl=n=>n.filter((e,t)=>!n.slice(0,t).some(r=>io(r,e)));function pe(n){return n.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function Kn(n,e){return`/${pe(n.tryDefinition(e)?.plural??`${e}s`)}`}function vl(n,e,t){return`${Kn(n,e)}/${encodeURIComponent(t)}`}function xl(n,e){return`/places/${encodeURIComponent(n)}${e?`?of=${encodeURIComponent(e)}`:""}`}function Qa(n,e){return e.some(t=>t.as===n.as&&!io(n,t))}function wl(n,e,t){return Qa(n,e)?`${n.title} \xB7 ${(t.tryDefinition(n.kind)?.plural??`${n.kind}s`).toLowerCase()}`:n.title}var Ne=(n,e,t="")=>`${n}|${e.cardinality}|${e.fidelity}|${t}`;function oo(n){switch(n){case"full":return["full","summary","glyph"];case"summary":return["summary","full","glyph"];case"glyph":return["glyph","summary","full"]}}function kl(n){let e=new Map,t=[],r=[],o,i,s={arrange(a){return a!==void 0&&(o=a),s},arrangement:()=>o,home(a){return a!==void 0&&(i=a),s},homeView:()=>i,register(a,d,l,u){let p={...u?.over?.[1]?{over:u.over}:{},...u?.hidden?{hidden:!0}:{},...u?.name?{name:u.name}:{},...u?.declared?{declared:!0}:{}},c={kind:a,cardinality:d.cardinality,fidelity:d.fidelity,view:l,...u?.title?{title:u.title}:{},...u?.across?{across:u.across}:{},...u?.beside?{beside:!0}:{},...p};if(r.push(c),!u?.beside&&!p.hidden&&e.set(Ne(a,d),c),u?.title){let f=pe(u.title);e.set(Ne(a,d,f),c),d.cardinality==="many"&&!t.some(g=>g.kind===a&&g.as===f)&&t.push({kind:a,title:u.title,as:f,...u.across?{across:u.across}:{},...p,...u.lens?{lens:u.lens}:{},...u.reads?.length?{reads:u.reads}:{}})}return s},places:()=>t,forget(a,d){for(let u of Xa)e.delete(Ne(a,{cardinality:"many",fidelity:u},d));let l=t.findIndex(u=>u.kind===a&&u.as===d);return l>=0&&t.splice(l,1),s},lookup(a,d){return e.get(Ne(a,d))?.view},resolve(a,d,l){if(l)for(let u of oo(d.fidelity)){let p=e.get(Ne(a,{cardinality:d.cardinality,fidelity:u},l));if(p)return p}for(let u of oo(d.fidelity)){let p=e.get(Ne(a,{cardinality:d.cardinality,fidelity:u}));if(p)return p}if(d.cardinality==="one")for(let u of oo(d.fidelity)){let p=e.get(Ne(a,{cardinality:"many",fidelity:u}));if(p)return p}},registrations:()=>r,all(){return[...e.values()]},kindsWithViews(){return[...new Set([...e.values()].map(a=>a.kind))]}};return s}var Sl=["day","week","month","year","decade"];function ed(n){let e={};n.q&&n.q.trim().length>0&&(e.query=n.q);let t=kr(n.archived);if(t&&(e.archived=t),n.sort){let[r,o]=n.sort.split(":");r&&(e.sort={by:r,direction:o==="desc"?"desc":"asc"})}if(n.filter){let r=[];for(let o of n.filter.split(",")){let i=o.indexOf(":");i<=0||r.push({key:o.slice(0,i),value:o.slice(i+1)})}r.length>0&&(e.filter=r)}if(n.group){let[r,o]=n.group.split(":");r&&(e.group={by:r,...Sl.includes(o)?{bucket:o}:{}})}return e}function so(n){if(typeof n=="string"&&n.length>0)return{by:n,direction:"asc"};if(typeof n!="object"||n===null)return;let{by:e,direction:t}=n;if(!(typeof e!="string"||e.length===0))return{by:e,direction:t==="desc"?"desc":"asc"}}function Ot(n,e,t){let r=so(n);if(!r)return'an order is a field, like "released", or { "by": "released", "direction": "asc" | "desc" }';let o=typeof n=="object"&&n!==null?n.direction:void 0;if(o!==void 0&&o!=="asc"&&o!=="desc")return`an order runs "asc" or "desc", not "${String(o)}"`;if(r.by!=="label"&&!e.includes(r.by))return`${t} has no field "${r.by}" to order by (it has ${e.length>0?e.map(i=>`"${i}"`).join(", "):"none"}, and "label", its name)`}function $l(n,e,t){let r=so(e);if(!r)return n;let o=r.direction==="desc"?-1:1;return n.map((i,s)=>({item:i,at:s,value:t(i,r.by)})).sort((i,s)=>{let a=(i.value===void 0||i.value===null||i.value===""?1:0)-(s.value===void 0||s.value===null||s.value===""?1:0);if(a!==0)return a;if(i.value===s.value||i.value===void 0||i.value===null)return i.at-s.at;let d=typeof i.value=="number"&&typeof s.value=="number"?i.value-s.value:String(i.value).localeCompare(String(s.value),void 0,{numeric:!0});return d===0?i.at-s.at:d*o}).map(i=>i.item)}var Un={timeline:{binds:"fields",requiredRoles:["start","end"],options:["columns","extent","tick","minWindow","arranging"]},calendar:{binds:"fields",requiredRoles:["start"],options:["today","range","weekStartsOn","perCell","horizon","arranging","search","filters"]},coverage:{binds:"entities",requiredRoles:["rows","columns","link"],options:["rowRef","rowGroup","groupOrder","requiredGroups","requiredVia","badge","columnGroup","sort","columnSort","search","filters"]},board:{binds:"entities",requiredRoles:["slots","x","y","fill"],options:["fillFrom","slotCode","zones","aspect","emptyLabel","pickTarget","arranging","arrange"]},plan:{binds:"entities",requiredRoles:["regions","outline"],options:["hues","aspect","undrawnLabel","strayLabel","draw","place","help"]},reach:{binds:"nothing",requiredRoles:[],options:[]},blocks:{binds:"nothing",requiredRoles:[],options:["blocks"]},columns:{binds:"fields",requiredRoles:["column"],options:["sort","search","filters","move","collapsed","cap","hidden"]}},Rl=20,td=Object.keys(Un),_l=(n,e,t,r=Un[n].options)=>({message:`The ${n} lens takes no option "${e}", so "${t}" ignores it.`,fix:r.length?`Use one of: ${r.join(", ")}.`:`The ${n} lens takes no options; drop it.`}),rd=n=>Object.hasOwn(Un,n);function ao(n,e,t){let r=n[e],o=Array.isArray(r)?r.filter(i=>typeof i=="string"&&t(i)):[];o.length>0?n[e]=o:delete n[e]}var cn=n=>typeof n=="object"&&n!==null&&!Array.isArray(n);function nd(n,e,t){let r=n.tryDefinition(e)?.fields.shape,o=I(r?.[t]);for(;o&&(o.type==="optional"||o.type==="default"||o.type==="nullable"||o.type==="prefault");)o=I(o.innerType);return o?.type!=="enum"?[]:(o.entries?Object.values(o.entries):o.values??[]).filter(s=>typeof s=="string")}function Al(n){let e=[],t=[],r=[],o=new Set(n.schema.kinds),i=new Set;for(let d of o)for(let l of Object.keys(n.schema.tryDefinition(d)?.edges??{}))i.add(l);let s=d=>Object.keys(n.schema.tryDefinition(d)?.fields.shape??{}),a=new Map;return(n.lenses??[]).forEach((d,l)=>{let u=`lenses.${l}`,p=typeof d.title=="string"&&d.title.trim().length>0?d.title.trim():void 0,c=(x,b)=>{t.push({index:l,name:d.name,...p?{title:p}:{},why:x}),b&&r.push({severity:"warning",...b})};if(!rd(d.name)){p?c(`"${d.name}" is not a lens this framework draws`,{code:"lens-not-shipped",path:`${u}.name`,message:`"${p}" names the lens "${d.name}", which the framework does not ship, so nothing draws it.`,fix:`Name one of ${td.join(", ")} \u2014 or register the view yourself and drop the title.`}):c("it is a lens this app wrote, drawn by the app's own views");return}if(!p)return c("it has no title, so it is bindings the checker holds and no place");let f=Un[d.name],g=cn(d.options)?d.options:{};if(d.options!==void 0&&!cn(d.options))return c("its options are not an object",{code:"lens-options-not-an-object",path:`${u}.options`,message:`"${p}" has options that are not an object.`,fix:'Write them as { "<option>": <value> }, or drop them.'});for(let x of Object.keys(g))f.options.includes(x)||r.push({severity:"warning",code:"lens-option-unknown",path:`${u}.options.${x}`,..._l(d.name,x,p,f.options)});let h={};for(let x of f.options)g[x]!==void 0&&(h[x]=g[x]);d.arrangedBy&&(h.arrangedBy=ed(d.arrangedBy));let v=cn(d.bindings)?d.bindings:{},y=[],S,A=(x,b,$)=>c(b,{code:"lens-cannot-draw",path:x,message:`"${p}" cannot draw: ${b}.`,fix:$});if(f.binds==="fields"){let x=Object.keys(v).filter($=>cn(v[$])),b=x.filter($=>!o.has($));if(x.length===0)return A(`${u}.bindings`,"it binds no kind",`Bind a kind's fields: "bindings": { "<kind>": { ${f.requiredRoles.map($=>`"${$}": "<field>"`).join(", ")} } }.`);if(b.length>0)return;if(h.bindings=v,y=x,d.name==="timeline"){let $=g.columns;if(Array.isArray($))h.columns=$.map(R=>typeof R=="string"?{id:R,label:R}:R);else{let R=x.flatMap(P=>{let E=v[P],L=typeof E.column=="string"?E.column:typeof E.columns=="string"?E.columns:void 0;return L?nd(n.schema,P,L):[]}),_=[...new Set(R)];if(_.length===0)return A(`${u}.options.columns`,"it has no columns \u2014 no option names them and no `column` role is bound to a field of set values",'Bind "column" to a field whose values are the columns, or say "columns": ["mon", "tue", \u2026].');h.columns=_.map(P=>({id:P,label:P.toUpperCase()}))}h.extent===void 0&&(h.extent=1440)}if(d.name==="columns"){if(h.sort!==void 0){let R=x.map(_=>Ot(h.sort,s(_),_)).find(Boolean);R&&(r.push({severity:"warning",code:"lens-sort",path:`${u}.options.sort`,message:`"${p}" cannot order its cards: ${R}.`,fix:'Write { "by": "<a field>", "direction": "asc" }, or drop it.'}),delete h.sort)}let $=new Set;for(let R of x){let _=v[R].column;if(typeof _!="string"||!s(R).includes(_))return;let P=nd(n.schema,R,_);if(P.length===0)return A(`${u}.bindings.${R}.column`,`its column field "${_}" is not a choice`,`Bind "column" to a choice field of ${R}, like a status.`);for(let E of P)$.add(E)}typeof h.move!="boolean"&&delete h.move,Number.isInteger(h.cap)&&h.cap>=1&&h.cap<=500||delete h.cap;for(let R of["collapsed","hidden"])ao(h,R,_=>$.has(_))}if(d.name==="calendar"&&h.today!==void 0&&!(typeof h.today=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(h.today)))return A(`${u}.options.today`,"its today is not a date",'Write it as "YYYY-MM-DD", or leave it out and the calendar opens on the day it is drawn.');if(d.name==="calendar"&&h.horizon!==void 0){let $=h.horizon,R=E=>E===void 0||Number.isInteger(E)&&E>=1&&E<=9999,_=typeof $=="number"?{years:$,title:"Years"}:$;cn(_)&&Number.isInteger(_.years)&&_.years>=1&&_.years<=200&&typeof _.title=="string"&&_.title.trim().length>0&&R(_.from)&&R(_.to)&&Object.keys(_).every(E=>["years","title","from","to"].includes(E))&&!(typeof _.from=="number"&&typeof _.to=="number"&&_.to<_.from)?h.horizon=_:(delete h.horizon,r.push({severity:"warning",code:"lens-horizon",path:`${u}.options.horizon`,message:`"${p}" has a horizon that is not a span of years, so it offers no span of years.`,fix:'Write { "years": 30, "title": "The career" } \u2014 "from" and "to" (years, like 1962 and 2023) only to pin its ends, which otherwise reach the first and last of its records.'}))}if(d.name==="calendar"&&h.range!==void 0&&!["day","week","month","quarter","year","years","agenda"].includes(h.range))return A(`${u}.options.range`,`its range "${String(h.range)}" is not one a calendar opens at`,"Use one of: day, week, month, quarter, year, agenda.")}else if(f.binds==="entities"){let x=R=>{let _=v[R];if(cn(_)){if(typeof _.kind=="string")return _.kind;if(typeof _.edge=="string")return _.edge;if(Array.isArray(_.path))return{path:_.path};if(typeof _.field=="string")return _.field}};for(let R of f.requiredRoles)if(x(R)===void 0)return;let b=d.name==="coverage"?"rows":d.name==="board"?"slots":"regions",$=x(b);if(!o.has($))return;if(d.name==="coverage"){let R=x("columns");if(!o.has(R))return;let _=x("link");if(typeof _=="string"&&!i.has(_))return;Object.assign(h,{rows:$,columns:R,link:_}),R!==$&&(S=R);for(let[P,E]of[["sort",$],["columnSort",R]]){if(h[P]===void 0)continue;let L=Ot(h[P],s(E),E);L&&(r.push({severity:"warning",code:"lens-sort",path:`${u}.options.${P}`,message:`"${p}" cannot order its ${P==="sort"?"rows":"columns"}: ${L}.`,fix:`Write { "by": "<a field of ${E}>", "direction": "asc" }, or drop it.`}),delete h[P])}}else if(d.name==="board"){Object.assign(h,{slots:$,x:x("x"),y:x("y"),fill:x("fill")});for(let R of["x","y"])if(!s($).includes(h[R]))return}else{Object.assign(h,{regions:$,outline:x("outline")});for(let R of["markers","at","within","nests","regionKind","markerKind"]){let _=x(R);typeof _=="string"&&(h[R]=_)}}y=[$]}else if(d.name==="blocks"){if(!d.on)return A(`${u}.on`,"it does not say which kind it stands on",'Say "on": "<the kind it is a place of>".');if(!Array.isArray(h.blocks)||h.blocks.length===0)return A(`${u}.options.blocks`,"it has no blocks to draw",`Say "options": { "blocks": [{ "headline": "\u2026" }, { "list": "all('<kind>')", "as": "card" }] }.`)}else{let x=["user","person","member"].find(b=>o.has(b));if(!d.on&&!x)return A(`${u}.on`,"it does not say which kind it stands on",'Say "on": "<the kind whose records are the people>".');y=x?[x]:[]}if(d.on!==void 0){if(typeof d.on!="string"||!o.has(d.on))return A(`${u}.on`,`it stands on "${String(d.on)}", which is not a kind`,`Use one of: ${[...o].join(", ")}.`);if(y=[d.on],d.name==="coverage"){let x=[h.rows,h.columns].find(b=>b!==d.on);S=typeof x=="string"?x:void 0}}let m=typeof h.rows=="string"?h.rows:y[0];if(m!==void 0){let x=["label",...s(m)],b=new Set(["is",...x,...Object.keys(n.schema.tryDefinition(m)?.edges??{})]);ao(h,"search",$=>x.includes($)),ao(h,"filters",$=>b.has($.split(".")[0]))}let k=pe(p);if(k.length===0)return A(`${u}.title`,"its title has no letters or digits to make an address of","Give it a title a person would say.");for(let x of y){let b=`${x}|${k}`;if(a.has(b))return c(`another lens on ${x} is already called "${p}"`,{code:"lens-title-taken",path:`${u}.title`,message:`"${p}" is the title of lenses.${a.get(b)} too, on the same kind, so one address would name two pictures.`,fix:"Give each its own title."})}for(let x of y)a.set(`${x}|${k}`,l);let w=d.create;w!==void 0&&typeof w!="boolean"&&r.push({severity:"warning",code:"lens-create",path:`${u}.create`,message:`"${p}" says create ${JSON.stringify(w)}, which is neither true nor false, so its page keeps the forms that begin its kind.`,fix:'Say "create": false to leave them off, or drop it.'}),e.push({index:l,lens:d.name,title:p,as:k,kinds:y,...S?{across:S}:{},options:h,...d.hidden===!0?{hidden:!0}:{},...w===!1?{create:!1}:{}})}),{drawn:e,undrawn:t,findings:r}}var Ol=6;function El(n,e,t=[]){let r=n.kinds,o=s=>Object.values(n.tryDefinition(s)?.edges??{}).map(a=>(a.to==="*"?r:a.to).filter(d=>d!==s)),i=new Set(r.flatMap(s=>o(s).flat()));return new Set([...e?.hide??[],...t,...r.filter(s=>!i.has(s)&&o(s).length>0&&o(s).every(a=>a.length>=2))])}function Pl(n,e,t){if(!n?.primary)return;let r=new Set(n.primary.map(pe));return{kinds:new Set(e.kinds.filter(o=>r.has(pe(o))||r.has(Kn(e,o).slice(1)))),places:new Set(t.filter(o=>r.has(o.as)||r.has(pe(o.title))).map(o=>`${o.kind}|${o.as}`))}}var od="overview",zl=`/places/${od}`;function Ml(n){let e=n?.scene?.trim();return e||"Scene"}function Nl(n){let e=n?.pages?.trim();return e||"Pages"}function Il(n,e){if(!e||e.length===0)return n;let t=e.filter(r=>n.includes(r));return[...new Set(t),...n.filter(r=>!t.includes(r))]}function jl(n,e,t){if(n===void 0)return;let r=n.trim();if(r==="")return;if(r.toLowerCase()==="home"||r==="/")return{to:"home"};let o=pe(r),i=t.find(d=>d.title===r)??t.find(d=>d.as===o);if(i)return{to:"place",place:i};let s=e.kinds,a=s.find(d=>d===r)??s.find(d=>Kn(e,d).slice(1)===o);return a?{to:"kind",kind:a}:void 0}function co(n){let e=(n??"").replace(/\/+$/,"");return e===""?"":e.startsWith("/")?e:`/${e}`}function Tl(n,e={}){let t=typeof n=="string"?n:n.address,r=co(e.basePath),o=t.startsWith("/")?t:`/${t}`;return r===""?o:o==="/"?r:o.startsWith("/?")||o.startsWith("/#")?`${r}${o.slice(1)}`:`${r}${o}`}function Dl(n,e){let t=co(e);if(t==="")return n.startsWith("/")?n:`/${n}`;if(!n.toLowerCase().startsWith(t.toLowerCase()))return null;let r=n.slice(t.length);return r===""||r==="/"?"/":r.startsWith("/")?r:null}var id=Symbol.for("@graview/core:app-link"),Fl=n=>(Object.defineProperty(I(n),id,{value:1,enumerable:!0}),n);function sd(n){let e=I(n);return!!e&&(e[id]===1||sd(e.innerType))}var Nx=()=>Fl(D().check(hr(500),Sn(at,"another app's address")));var Et=(n,e)=>`${e.kind}\0${e.id??""}\0${n.address}\0${n.kind}\0${n.id}`;function Zl(n,e,t=()=>{}){let r=new Map,o=new Map,i=s=>{let a=Et(s,e),d=r.get(a);return d||(d=Promise.resolve().then(()=>n.resolve(s,e)).then(l=>Ll(l)?l:null,()=>null).then(l=>(r.get(a)===d&&(o.set(a,l),t(s)),l)),r.set(a,d)),d};return{read(s){let a=Et(s,e);if(o.has(a)){let d=o.get(a);return d===null?{unread:!0}:"denied"in d?{denied:!0}:{record:d}}return i(s),{unread:!0}},ask:i,answered:s=>o.get(Et(s,e)),forget(s){if(!s){r.clear(),o.clear();return}let a=Et(s,e);r.delete(a),o.delete(a)}}}function Ll(n){if(n===null)return!0;if(typeof n!="object"||n===void 0)return!1;if(n.denied===!0)return!0;let e=n;return typeof e.label=="string"&&typeof e.id=="string"&&typeof e.kind=="string"&&typeof e.fields=="object"&&e.fields!==null}var Cl=1;var Pt=(n,e)=>`${n}\0${e}`;function lo(n){return n.op==="add-node"?Object.keys(n.node).filter(e=>e!=="id"&&e!=="kind").map(e=>[n.node.id,e]):n.op==="patch-node"?Object.keys(n.after).map(e=>[n.id,e]):[]}var uo=class n{revs=new Map;floor;constructor(e=0){this.floor=Math.max(0,Math.floor(e))-1}static of(e,t={}){let r=new n(t.horizon);return r.note(e),r}note(e){for(let t of e)for(let r of t.primitives)for(let[o,i]of lo(r)){let s=Pt(o,i);(this.revs.get(s)??this.floor)<t.seq&&this.revs.set(s,t.seq)}}of(e,t){return this.revs.get(Pt(e,t))??this.floor}baseFor(e,t=new Set){let r=new Set,o=new Map;for(let i of e)for(let s of i.primitives)if(s.op==="add-node"&&r.add(s.node.id),!(s.op!=="patch-node"||r.has(s.id)||t.has(s.id)))for(let a of Object.keys(s.after)){let d=Pt(s.id,a);t.has(d)||o.has(d)||o.set(d,{node:s.id,field:a,rev:this.of(s.id,a)})}return[...o.values()]}stale(e){return e.filter(t=>this.of(t.node,t.field)>t.rev)}};function Gl(n){let e=new Set;for(let t of n)for(let r of t.primitives){r.op==="add-node"&&e.add(r.node.id);for(let[o,i]of lo(r))e.add(Pt(o,i))}return e}var Bl=/^#([0-9a-f]{3,8})$/i,Kl=/(rgba?|hsla?)\(([^)]+)\)/gi;function Ul(n){let e=Bl.exec(n.trim());if(!e)return null;let t=e[1];if((t.length===3||t.length===4)&&(t=[...t].map(i=>i+i).join("")),t.length!==6&&t.length!==8)return null;let r=Number.parseInt(t.slice(0,6),16),o=t.length===8?Number.parseInt(t.slice(6,8),16)/255:1;return{r:r>>16&255,g:r>>8&255,b:r&255,a:o}}function Vl(n){let e=n.slice(0,n.indexOf("(")).toLowerCase(),r=n.slice(n.indexOf("(")+1,n.lastIndexOf(")")).split(/[,\s/]+/).filter(Boolean).map(d=>d.endsWith("%")?Number.parseFloat(d)/100:Number.parseFloat(d));if(r.some(Number.isNaN))return null;if(e.startsWith("rgb")){let[d,l,u,p]=r;return d===void 0||l===void 0||u===void 0?null:{r:d,g:l,b:u,a:p??1}}let[o,i,s,a]=r;return o===void 0||i===void 0||s===void 0?null:{...dd(o,i>1?i/100:i,s>1?s/100:s),a:a??1}}function po(n){let e=n.r/255,t=n.g/255,r=n.b/255,o=Math.max(e,t,r),i=Math.min(e,t,r),s=(o+i)/2;if(o===i)return{h:0,s:0,l:s};let a=o-i,d=a/(1-Math.abs(2*s-1));return{h:((o===e?60*((t-r)/a%6):o===t?60*((r-e)/a+2):60*((e-t)/a+4))+360)%360,s:d,l:s}}function ho(n,e,t){return{...dd(n,e,t),a:1}}function dd(n,e,t){let r=(1-Math.abs(2*t-1))*e,o=(n%360+360)%360/60,i=r*(1-Math.abs(o%2-1)),[s,a,d]=o<1?[r,i,0]:o<2?[i,r,0]:o<3?[0,r,i]:o<4?[0,i,r]:o<5?[i,0,r]:[r,0,i],l=t-r/2;return{r:Math.round((s+l)*255),g:Math.round((a+l)*255),b:Math.round((d+l)*255)}}function un(n){let e=[];for(let t of n.matchAll(Kl)){let r=Vl(t[0]);r&&e.push(r)}for(let t of n.matchAll(/#[0-9a-fA-F]{3,8}\b/g)){let r=Ul(t[0]);r&&e.push(r)}return e}function go(n,e){let t=n.a+e.a*(1-n.a);if(t===0)return{r:0,g:0,b:0,a:0};let r=(o,i)=>(o*n.a+i*e.a*(1-n.a))/t;return{r:r(n.r,e.r),g:r(n.g,e.g),b:r(n.b,e.b),a:t}}function fo(n){let e=n/255;return e<=.03928?e/12.92:((e+.055)/1.055)**2.4}function ad(n){return .2126*fo(n.r)+.7152*fo(n.g)+.0722*fo(n.b)}function ln(n,e){let[t,r]=[ad(n),ad(e)].sort((o,i)=>i-o);return(t+.05)/(r+.05)}var zt=(n,e)=>`rgba(${Math.round(n.r)}, ${Math.round(n.g)}, ${Math.round(n.b)}, ${e})`,cd={r:0,g:0,b:0,a:1},Mt={r:255,g:255,b:255,a:1};function Nt(n){let e=un(n.accent)[0];if(!e)return{ok:!1,missing:["accent"],why:`"${n.accent}" is not a color this can read. Use a hex, rgb() or hsl() value.`};let t={},r=new Set,o=[],i=po(e);for(let s of["dark","light"]){let a=n.base[s],d=un(a.ground)[0]??(s==="dark"?cd:Mt),l=go(un(a.panel)[0]??Mt,d),u=Yl(i,[l,d],s,4.5);u?Math.abs(u.l-i.l)>Hl&&(r.add(`accent (${s})`),o.push(`reaching 4.5:1 on the ${s} panel would move the accent's lightness by ${Math.round(Math.abs(u.l-i.l)*100)} points, which is far enough that it stops being the same color \u2014 supply one for ${s}`)):(r.add(`accent (${s})`),o.push(`no lightness of this hue clears 4.5:1 as text on the ${s} panel, so ${s} needs an accent of its own`));let p=u??i,c=ho(p.h,p.s,p.l),f=n.accentInk?.[s]??(ln(Mt,c)>=ln(cd,c)?"#ffffff":"#000000"),g=ln(un(f)[0]??Mt,c);g+.005<4.5&&(r.add(`accentInk (${s})`),o.push(`neither black nor white clears 4.5:1 on the accent (best ${g.toFixed(2)}:1), so text on a filled button has to be given`)),t[s]={...a,accent:zt(c,1),accentDim:zt(c,s==="dark"?.35:.22),accentInk:f,glow:zt(c,s==="dark"?.28:.1),edgeBright:zt(c,Wl(c,l,s==="dark"?.55:.42,3)),...n.warn?.[s]?{warn:n.warn[s]}:{}};let h=un(t[s].warn)[0];h&&ql(po(h).h,p.h)<25&&(r.add(`warn (${s})`),o.push(`the warning color shares the accent's hue in ${s}, so "something is broken" looks like "this is selected"`))}return r.size>0?{ok:!1,missing:[...r].sort(),why:o.join("; ")}:{ok:!0,schemes:t}}function Wl(n,e,t,r){for(let o=Math.round(t*100);o<=100;o++){let i=o/100;if(ln(go({...n,a:i},e),e)>=r)return i}return 1}function ql(n,e){let t=Math.abs(n-e)%360;return t>180?360-t:t}var Hl=.3;function Yl(n,e,t,r){let o=t==="dark";for(let i=0;i<=100;i++){let s=o?n.l+i/100:n.l-i/100,a=o?n.l-i/100:n.l+i/100;for(let d of[s,a])if(!(d<0||d>1)&&e.every(l=>ln(ho(n.h,n.s,d),l)>=r))return{...n,l:d}}return null}function Jl(n,e){let t=e?.[n];if(t!==void 0)return(t%360+360)%360;let r=2166136261;for(let o=0;o<n.length;o++)r^=n.charCodeAt(o),r=Math.imul(r,16777619);return(r>>>0)%360}var Ie=Object.freeze({navy:"#001769",turquoise:"#00e5b9",paper:"#f7f7f2",ink:"#18213a",muted:"#586174"}),mo="Montserrat",yo=Object.freeze({display:550,body:450,label:600}),bo=Object.freeze({display:600,body:400,label:600}),Xl="-0.025em",Ql=Object.freeze({minWidth:140,clearSpace:.5,microMax:24,regularMin:32,microBelow:28});var ud={ground:"#0a0f1f",groundDeep:"#060914",wash:"none",panel:"rgba(19, 27, 52, 0.96)",panelMuted:"rgba(14, 21, 42, 0.94)",panelWarning:"rgba(48, 33, 18, 0.95)",edge:"rgba(164, 178, 222, 0.18)",edgeBright:"rgba(154, 171, 255, 0.6)",ink:"#eef0f6",inkMuted:"#aab2c6",inkFaint:"#97a0b6",accent:"#9aabff",accentDim:"rgba(154, 171, 255, 0.32)",accentInk:Ie.navy,warn:"#f0a868",good:"#8fdcaa",bad:"#ffa3a3",glow:"rgba(154, 171, 255, 0.18)",bar:"rgba(10, 15, 31, 0.96)",float:"rgba(16, 23, 45, 0.98)",liftLow:"0 14px 36px -22px #000",liftHigh:"0 28px 64px -30px #000",tintAlpha:.2,tintLightness:52,gridAlpha:.35},ld={ground:Ie.paper,groundDeep:"#efefe8",wash:"none",panel:"#ffffff",panelMuted:"#fafaf6",panelWarning:"#fdf4ea",edge:"rgba(24, 33, 58, 0.12)",edgeBright:"rgba(0, 23, 105, 0.6)",ink:Ie.ink,inkMuted:Ie.muted,inkFaint:"#626b7d",accent:Ie.navy,accentDim:"rgba(0, 23, 105, 0.16)",accentInk:"#ffffff",warn:"#9a5312",good:"#1b6436",bad:"#a1232d",glow:"rgba(0, 23, 105, 0.08)",bar:"rgba(255, 255, 255, 0.96)",float:"#ffffff",liftLow:"0 1px 2px rgba(24,33,58,0.06), 0 8px 24px -12px rgba(24,33,58,0.16)",liftHigh:"0 2px 6px rgba(24,33,58,0.08), 0 24px 56px -24px rgba(24,33,58,0.26)",tintAlpha:.16,tintLightness:46,gridAlpha:.5},fn={dark:ud,light:ld};var Se=Object.freeze({radius:8,density:1,radiusSmall:.72,radiusSmallFloor:2,pad:15,padSmall:10,gap:7}),je=Object.freeze({body:`"${mo}", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif`,mono:'ui-monospace, SFMono-Regular, "SF Mono", Menlo, monospace'});function ef(n){let e=n?.shape?.radius??Se.radius,t=n?.shape?.density??Se.density;return Object.freeze({radius:e,radiusSmall:Math.max(Se.radiusSmallFloor,Math.round(e*Se.radiusSmall)),pad:Math.round(Se.pad*t),padSmall:Math.round(Se.padSmall*t),gap:Math.round(Se.gap*t)})}function nf(n){let e=n?.typography?.body??je.body,t=n?.typography?.display??e,o=e===je.body&&t===je.body?yo:bo,i=n?.typography?.weights;return Object.freeze({body:e,display:t,mono:n?.typography?.mono??je.mono,weights:Object.freeze({display:i?.display??o.display,body:i?.body??o.body,label:i?.label??o.label})})}var Wx=Object.freeze({light:Object.freeze({roof:Object.freeze({saturation:48,lightness:82}),right:Object.freeze({saturation:40,lightness:66}),left:Object.freeze({saturation:34,lightness:55}),roofEdge:"rgba(255,255,255,0.75)",plot:Object.freeze({saturation:45,lightness:58,alpha:.12}),plotEdge:Object.freeze({saturation:40,lightness:48,alpha:.55})}),dark:Object.freeze({roof:Object.freeze({saturation:42,lightness:32}),right:Object.freeze({saturation:40,lightness:21}),left:Object.freeze({saturation:38,lightness:13}),roofEdge:"rgba(255,255,255,0.14)",plot:Object.freeze({saturation:45,lightness:48,alpha:.2}),plotEdge:Object.freeze({saturation:40,lightness:62,alpha:.55})})});function pd(n){return/^\s*(<\?xml[^>]*>\s*)?(<!--[\s\S]*?-->\s*)*(<!DOCTYPE svg[^>]*>\s*)?<svg[\s>/]/i.test(n)}var hd="http://www.w3.org/2000/svg",tf=["http://www.w3.org/1999/xhtml","http://www.w3.org/1998/Math/MathML",hd],rf=new Set("svg g defs symbol use title desc path rect circle ellipse line polyline polygon text tspan textPath linearGradient radialGradient stop pattern clipPath mask marker image filter feBlend feColorMatrix feComponentTransfer feComposite feDropShadow feFlood feFuncA feFuncB feFuncG feFuncR feGaussianBlur feMerge feMergeNode feMorphology feOffset feTile feTurbulence".split(" ")),of=new Set(["title","desc"]),Vn="it embeds a page or media",sf={script:"it has a script in it",foreignobject:"it embeds HTML (foreignObject)",iframe:Vn,embed:Vn,object:Vn,audio:Vn,video:Vn,style:"it has a style sheet in it; a mark is styled by its attributes",a:"it links to something (an <a> element)"},af={amp:"&",lt:"<",gt:">",quot:'"',apos:"'"};function df(n){let e=!1,t=n.replace(/&(#x[0-9a-f]+|#[0-9]+|[a-z][a-z0-9]*);?/gi,(r,o)=>{if(o[0]==="#"){let s=o[1]==="x"||o[1]==="X"?parseInt(o.slice(2),16):parseInt(o.slice(1),10);return s>0&&s<=1114111?String.fromCodePoint(s):"\uFFFD"}let i=af[o.toLowerCase()];return i===void 0&&(e=!0),i??""});return e?null:t}function cf(n){if(/\\|@|expression\s*\(|(?:image-set|cross-fade|image|element|src)\s*\(/i.test(n))return!1;for(let[,e]of n.matchAll(/url\s*\(\s*["']?\s*([^)]*)/gi))if(!e.startsWith("#"))return!1;return!0}function uf(n,e,t){let r=df(t);if(r===null)return"it declares XML entities";let o=(e.includes(":")?e.slice(e.indexOf(":")+1):e).toLowerCase();if(o.startsWith("on"))return"it has an event handler (an on\u2026 attribute)";if(e==="xml:base")return"it loads or links to something outside itself";if(e==="xmlns")return r===hd?null:"it changes what its elements are (another xmlns)";if(e.startsWith("xmlns:"))return tf.includes(r)?"it changes what its elements are (another xmlns)":null;if(o==="href"||o==="src"){let i=r.replace(/[\u0000- ]+/g,"");return i.startsWith("#")||n==="image"&&/^data:image\/(png|jpe?g|gif|webp|avif);/i.test(i)?null:"it loads or links to something outside itself"}return cf(r)?null:o==="style"?"its style loads something outside itself":"it loads or links to something outside itself"}var fd=/^\s+([A-Za-z_][A-Za-z0-9_.:-]*)\s*=\s*(?:"([^"<]*)"|'([^'<]*)')/;function gd(n){if(/<!ENTITY/i.test(n))return"it declares XML entities";if(/<!\[CDATA\[/i.test(n))return"it has a CDATA section, which the page and the picture read differently";let e=[],t=!1,r=/^\s*(<\?xml\s[^?<>]*\?>)?/.exec(n)[0].length;for(;r<n.length;){let o=n.slice(r),i=/^[^<]+/.exec(o);if(i){if(e.length===0&&i[0].trim()!=="")return"it is not one SVG: there is text outside it";r+=i[0].length;continue}if(o.startsWith("<!--")){let f=o.indexOf("-->",4);if(f<0)return"it has a comment that never ends";let g=o.slice(4,f);if(/^-?>/.test(g)||g.includes("--")||g.includes("<!")||g.endsWith("-"))return"it has a comment the page and the picture read differently";r+=f+3;continue}if(/^<!DOCTYPE/i.test(o)){let f=/^<!DOCTYPE\s+svg\b[^<>[\]]*>/i.exec(o);if(!f||e.length>0||t)return"it declares XML entities";r+=f[0].length;continue}let s=/^<\/([A-Za-z][A-Za-z0-9_.:-]*)\s*>/.exec(o);if(s){if(e.pop()!==s[1])return`it is not one SVG: </${s[1]}> closes what is not open`;e.length===0&&(t=!0),r+=s[0].length;continue}let a=/^<([A-Za-z][A-Za-z0-9_.:-]*)/.exec(o);if(!a)return"it is not one SVG: it has markup a picture cannot hold";let d=a[1],l=sf[d.toLowerCase()];if(l)return l;if(t)return`it is not one SVG: <${d}> comes after it ends`;if(e.length===0&&d!=="svg")return"it is not one SVG";if(d.includes(":"))return`it has an element of another kind (<${d}>)`;if(!rf.has(d))return`it has a <${d}> element, which a picture does not need`;let u=e[e.length-1];if(u&&of.has(u))return`it has an element inside a <${u}>, which the page reads as HTML`;let p=a[0].length;for(let f=fd.exec(o.slice(p));f;f=fd.exec(o.slice(p))){let g=uf(d,f[1],f[2]??f[3]??"");if(g)return g;p+=f[0].length}let c=/^\s*(\/?)>/.exec(o.slice(p));if(!c)return/(?:^|[\s/"'])on[a-z]+\s*=/i.test(o.slice(p,p+400))?"it has an event handler (an on\u2026 attribute)":`it is not one SVG: <${d}>'s attributes are not each quoted and apart`;c[1]!=="/"?e.push(d):e.length===0&&(t=!0),r+=p+c[0].length}return e.length>0?`it is not one SVG: <${e[e.length-1]}> is never closed`:t?null:"it is not one SVG"}function md(n){if(n){if(!pd(n)){if(/^\s*</.test(n))return;let e=/^\s*([a-z][a-z0-9+.-]*):/i.exec(n)?.[1]?.toLowerCase();return e===void 0||e==="http"||e==="https"||e==="data"&&/^\s*data:image\//i.test(n)?n:void 0}return gd(n)===null?`data:image/svg+xml,${encodeURIComponent(n.trim())}`:void 0}}var It;function lf(){if(It===void 0)try{It=new RegExp("^\\p{RGI_Emoji}$","v")}catch{It=null}return It}function ff(n){return/\p{Extended_Pictographic}|\p{Regional_Indicator}|⃣/u.test(n)}function vo(n){if(typeof n!="string"||n.trim()==="")return"it is empty; give one emoji, like \u{1F3E1}";let e=[...new Intl.Segmenter("en",{granularity:"grapheme"}).segment(n)].map(o=>o.segment),t=e.filter(ff).length;if(t===0)return"it is not an emoji; give one emoji, like \u{1F3E1}";if(e.length>1)return t===e.length?`it is ${e.length} emoji, and a mark is one`:"it has other characters beside the emoji; give the emoji alone";let r=lf();return r&&!r.test(n)?"it is not one of the standard emoji every emoji set draws":null}function xo(n){return typeof n=="object"&&n!==null&&typeof n.emoji=="string"?n.emoji:void 0}function yd(n){return`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><text x="50" y="50" dy=".35em" font-size="88" text-anchor="middle">${n}</text></svg>`}function pf(n){let e=n?.favicon;if(typeof e=="object"&&e!==null){let t=xo(e);return t!==void 0&&vo(t)===null?`data:image/svg+xml,${encodeURIComponent(yd(t))}`:void 0}return md(e)}function hf(n){let e=n?.logo;return typeof e=="string"?e===""?void 0:{light:e}:e&&typeof e.light=="string"&&e.light!==""?e:void 0}function gf(n){if(n?.logo)return;let e=xo(n?.favicon);return e!==void 0&&vo(e)===null?e:void 0}var bd={"system-sans":'ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif',"system-serif":'ui-serif, "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, Cambria, "Times New Roman", serif',"system-mono":je.mono},mf=["serif","sans-serif","monospace","cursive","fantasy","system-ui","math","emoji","-apple-system","BlinkMacSystemFont"],vd=["Georgia","Times New Roman","Times","Iowan Old Style","Palatino","Palatino Linotype","Charter","Cambria","Baskerville","Optima","Helvetica","Helvetica Neue","Arial","Verdana","Segoe UI","Roboto","Avenir","Avenir Next","Gill Sans","Menlo","Monaco","Consolas","SF Mono","SFMono-Regular","Courier New"];var yf=n=>new Set(n.map(e=>e.toLowerCase()));function bf(n){return yf([...mf,...vd]).has(n.toLowerCase())||n.toLowerCase().startsWith("ui-")}function vf(n){return bd[n]??n}function ew(n){let e=Nt({accent:n,base:fn});return e.ok||!e.missing.every(t=>t.startsWith("warn"))?e:Nt({accent:n,base:fn,warn:{light:fn.light.bad,dark:fn.dark.bad}})}function xf(n,e,t){if(t.rows===0)return;let r=ne(n,e.rows).toLowerCase(),o=ne(n,e.columns).toLowerCase(),i=e.rows===e.columns,s=i?`link ${r} to each other`:`link ${r} to ${o}`;if(t.columns===0)return`No ${o} yet: ${s}.`;if(t.cells>0||typeof e.link=="object"&&e.link!==null)return;let a=K(n.tryDefinition(e.rows),e.rows);return i?`No ${a} is linked to another yet: ${s}.`:`No ${a} is linked to ${Ze(K(n.tryDefinition(e.columns),e.columns))} yet: ${s}.`}var ie={connectors:{all:{route:"curve",visible:!0},byEdge:{}},captions:{visible:!0},grid:{visible:!0,size:64},lattice:{visible:!0,size:46},tags:{visible:!0},emphasis:{rest:.34,dim:.12},marks:{flag:"\u26A0"}};function wf(n){return n?{connectors:{all:{...ie.connectors.all,...n.connectors?.all??{}},byEdge:{...ie.connectors.byEdge,...n.connectors?.byEdge??{}}},captions:{...ie.captions,...n.captions??{}},grid:{...ie.grid,...n.grid??{}},lattice:{...ie.lattice,...n.lattice??{}},tags:{...ie.tags,...n.tags??{}},emphasis:{...ie.emphasis,...n.emphasis??{}},marks:{...ie.marks,...n.marks??{}}}:ie}function kf(n,e){return{...n.connectors.all,...n.connectors.byEdge[e]??{}}}function Sf(n){return[` --graview-kit-grid: ${n.grid.visible?1:0};`,` --graview-kit-grid-size: ${n.grid.size}px;`,` --graview-kit-lattice: ${n.lattice.visible?1:0};`,` --graview-kit-lattice-size: ${n.lattice.size}px;`,` --graview-kit-tags: ${n.tags.visible?"inline-flex":"none"};`,` --graview-kit-captions: ${n.captions.visible?"block":"none"};`,` --graview-kit-rest: ${n.emphasis.rest};`,` --graview-kit-dim: ${n.emphasis.dim};`,` --graview-kit-flag: "${n.marks.flag.replace(/"/g,"'")}";`].join(`
|
|
5
|
+
`)}function $f(n,e,t){let r=new Set([e]);for(let[o,i]of t.entries()){let s=n.edge(i);if(!s)return{ok:!1,at:o};let a=s.from,d=s.to==="*"?n.kinds:s.to,l=new Set;for(let u of r){if(a.includes(u))for(let p of d)l.add(p);if(s.to==="*"||d.includes(u))for(let p of a)l.add(p)}if(l.size===0)return{ok:!1,at:o};r=l}return{ok:!0,reached:r}}function Rf(n){let e=n.name??"";return e&&n.onBehalfOfName?`${e}, for ${n.onBehalfOfName}`:e}function wo(n,e,t=2500){return n.held==="socket"?!0:n.until!==void 0?e<Date.parse(n.until):e-Date.parse(n.at)<t}function _f(n){return`${n.kind}:${n.id??""}:${n.session??""}`}function Af(n,e,t,r=2500,o){let i=new Map;for(let[s,a]of n)wo(a,t,r)&&i.set(s,a);for(let s of e){if(!wo(s,t,r)){i.delete(s.participant);continue}let a=i.get(s.participant);(!a||Date.parse(a.at)<=Date.parse(s.at))&&i.set(s.participant,s)}return o!==void 0&&i.delete(o),i}function Of(n,e){return!n||!e?n===e:n.participant===e.participant&&n.kind===e.kind&&n.name===e.name&&n.onBehalfOf===e.onBehalfOf&&n.onBehalfOfName===e.onBehalfOfName&&n.until===e.until&&n.held===e.held&&n.hue===e.hue&&n.stop===e.stop&&(n.over??null)===(e.over??null)&&(n.robot?.at??null)===(e.robot?.at??null)&&(n.robot?.mode??null)===(e.robot?.mode??null)}export{Ge as a,Xi as b,Qi as c,yc as d,hr as e,kn as f,Sn as g,D as h,Zg as i,Lg as j,$n as k,Cg as l,Gg as m,Bg as n,gr as o,Kg as p,Be as q,Ke as r,Ug as s,Vg as t,Wg as u,ds as v,cs as w,Q as x,qg as y,it as z,Hg as A,Yg as B,I as C,Tc as D,Dt as E,Fe as F,qn as G,Ef as H,H as I,xd as J,wd as K,_o as L,Yn as M,kd as N,ge as O,Ft as P,Ao as Q,Zt as R,Rd as S,_d as T,se as U,Ad as V,Od as W,Ed as X,Pd as Y,zd as Z,yn as _,Po as $,Nd as aa,Ct as ba,F as ca,Id as da,C as ea,jd as fa,ne as ga,Td as ha,Dd as ia,Xn as ja,Ze as ka,K as la,Dc as ma,st as na,br as oa,us as pa,ls as qa,fs as ra,Fc as sa,Rn as ta,hs as ua,Jm as va,dt as wa,sd as xa,Nx as ya,Bc as za,Uc as Aa,ys as Ba,Vc as Ca,ny as Da,_n as Ea,Wc as Fa,Hc as Ga,ty as Ha,ry as Ia,Yc as Ja,vs as Ka,Zl as La,ct as Ma,Jc as Na,Ve as Oa,On as Pa,ut as Qa,sy as Ra,We as Sa,Ue as Ta,_s as Ua,eu as Va,En as Wa,Ae as Xa,uy as Ya,kr as Za,lt as _a,nu as $a,z as ab,Mn as bb,N as cb,W as db,ou as eb,ht as fb,Ay as gb,iu as hb,su as ib,Cl as jb,T as kb,q as lb,ve as mb,xe as nb,Dy as ob,Ts as pb,Xe as qb,j as rb,Qe as sb,Pe as tb,ee as ub,lu as vb,oe as wb,Uu as xb,Ur as yb,wa as zb,sn as Ab,Cb as Bb,Vr as Cb,$a as Db,Ra as Eb,Wr as Fb,ke as Gb,Br as Hb,Ln as Ib,Ju as Jb,_a as Kb,eb as Lb,nb as Mb,qr as Nb,Hr as Ob,Pa as Pb,Ia as Qb,ol as Rb,kt as Sb,ze as Tb,uo as Ub,Gl as Vb,an as Wb,Mr as Xb,Hs as Yb,hu as Zb,mu as _b,Jl as $b,mo as ac,Xl as bc,fn as cc,je as dc,ef as ec,nf as fc,pd as gc,gd as hc,md as ic,pf as jc,hf as kc,gf as lc,bf as mc,vf as nc,ew as oc,$l as pc,xf as qc,wf as rc,kf as sc,Sf as tc,yu as uc,bu as vc,vu as wc,xu as xc,nn as yc,Dn as zc,fe as Ac,yt as Bc,rn as Cc,Fn as Dc,Fr as Ec,Zn as Fc,wu as Gc,ku as Hc,$f as Ic,cl as Jc,ul as Kc,ya as Lc,ll as Mc,Ja as Nc,dn as Oc,ro as Pc,gl as Qc,ml as Rc,yl as Sc,Xa as Tc,io as Uc,bl as Vc,pe as Wc,Kn as Xc,vl as Yc,xl as Zc,Qa as _c,wl as $c,kl as ad,ed as bd,Un as cd,Rl as dd,td as ed,rd as fd,Al as gd,Ol as hd,El as id,Pl as jd,od as kd,zl as ld,Ml as md,Nl as nd,Il as od,jl as pd,co as qd,Tl as rd,Dl as sd,Rf as td,_f as ud,Af as vd,Of as wd};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as I,b as H,c as T,e as D,h as V,i as R,j as A,k,l as x,n as Y,o as Z}from"./chunk.
|
|
1
|
+
import{a as I,b as H,c as T,e as D,h as V,i as R,j as A,k,l as x,n as Y,o as Z}from"./chunk.CAZX6OPN.js";import{b as U}from"./chunk.VTUMPH4Z.js";import{I as C,O as G,Va as F,X as M,Ya as B,ca as W,ea as j}from"./chunk.UG727PEE.js";function re(e,r){return e===void 0||e===!0?!0:e===!1?!1:e[r]!==!1}function te(e){let r={};return e.query&&e.query.trim().length>0&&(r.q=e.query),e.archived!==void 0&&e.archived!==!1&&(r.archived=String(e.archived)),e.sort&&(r.sort=e.sort.direction==="desc"?`${e.sort.by}:desc`:e.sort.by),e.filter?.length&&(r.filter=e.filter.map(n=>`${n.key}:${n.value}`).join(",")),e.group&&(r.group=e.group.bucket?`${e.group.by}:${e.group.bucket}`:e.group.by),r}function ne(e,r){let n=[],s={};if(e.query&&(s.query=e.query),e.archived!==void 0&&e.archived!==!1&&(s.archived=e.archived),e.sort&&(r.sorts.some(u=>u.key===e.sort.by)?s.sort=e.sort:n.push(`sort ${e.sort.by}`)),e.filter){let u=e.filter.filter(c=>r.filters.find(f=>f.key===c.key)?!0:(n.push(`filter ${c.key}`),!1));u.length>0&&(s.filter=u)}return e.group&&(r.groups.some(u=>u.key===e.group.by)?s.group=e.group:n.push(`group ${e.group.by}`)),{arrangement:s,dropped:n}}function S(e,r){return W(e.schema.tryDefinition(r.kind),A(r))}var oe=(e,r)=>e==null?r==null?0:1:r==null?-1:typeof e=="number"&&typeof r=="number"?e-r:typeof e=="boolean"&&typeof r=="boolean"?e===r?0:e?1:-1:String(e).localeCompare(String(r),void 0,{numeric:!0,sensitivity:"base"});function ie(e,r,n){if(n==="label")return S(e,r);let s=e.schema.tryDefinition(r.kind);return s&&n in(s.fields.shape??{})?F(R(r),n,e.today??C()):s?.computed?.[n]!==void 0?e.read?.(r,n):k(e.graph,r.id,n).map(c=>S(e,c)).sort()[0]}var se=/^(\d{4})-(\d{2})-(\d{2})/;function _(e,r){let n=se.exec(e);if(!n)return;let[,s,u,c]=n;if(r==="day")return`${s}-${u}-${c}`;if(r==="month")return`${s}-${u}-01`;if(r==="year")return`${s}-01-01`;if(r==="decade")return`${String(Number(s)-Number(s)%10).padStart(4,"0")}-01-01`;let a=new Date(Date.UTC(Number(s),Number(u)-1,Number(c))),f=(a.getUTCDay()+6)%7;return a.setUTCDate(a.getUTCDate()-f),a.toISOString().slice(0,10)}function de(e,r){return r==="month"?M(e):r==="week"?`Week of ${G(e)}`:r==="year"?e.slice(0,4):r==="decade"?`The ${e.slice(0,4)}s`:G(e)}function ue(e,r,n){return z(e,n)(r)}function z(e,r){let{words:n,conditions:s}=Y(r);if(n.length===0&&s.length===0)return()=>!0;let u=new Map,c=a=>{let f=u.get(a);return f||(f=new Set(D(e.schema,a).filters.map(d=>d.key)),u.set(a,f)),f};return a=>{let f=c(a.kind),d=s.filter(i=>f.has(i.key));return d.every(i=>x(e,a,i))?n.length>0?Z(e.schema.tryDefinition(a.kind),A(a),n,e.searchIn)!==void 0:d.length>0:!1}}function ae(e,r,n){let s=r.query?.trim(),u=r.archived===void 0?e:e.filter(t=>B(t,r.archived)),c=s?u.filter(z(n,s)):u,a=r.filter?.length?c.filter(t=>r.filter.every(l=>x(n,t,l))):[...c],f=[];for(let t=r.sort;t&&f.length<4;t=t.then)f.push(t);let d=f.length>0?a.map((t,l)=>({node:t,index:l,values:f.map(o=>ie(n,t,o.by))})).sort((t,l)=>{for(let[o,p]of f.entries()){let[h,K]=[t.values[o],l.values[o]],v=oe(h,K),E=p.direction==="desc"&&v!==0&&h!==void 0&&K!==void 0?-v:v;if(E!==0)return E}return t.index-l.index}).map(t=>t.node):a,i=r.group;if(!i)return{nodes:d,groups:[{key:"",label:"",nodes:d}],grouped:!1};let y=new Map,g=(t,l,o)=>{let p=y.get(t)??{label:l,nodes:[]};p.nodes.push(o),y.set(t,p)},N=d[0],m=N?n.schema.tryDefinition(N.kind):void 0,O=m?.fields.shape??{},J=m?I(m,i.by):j(i.by),$=i.by in O,b=$?H(O[i.by]):void 0,X=T(n.schema,N?.kind??"").find(t=>t.key===i.by)?.label,L=$?`No ${J.toLowerCase()}`:`Without ${(X??j(i.by)).toLowerCase()}`,q=$?new Map:U([...new Map(d.flatMap(t=>k(n.graph,t.id,i.by)).map(t=>[t.id,t])).values()].map(A),t=>n.schema.tryDefinition(t));for(let t of d){if($){let o=F(R(t),i.by,n.today??C());if(o==null||o==="")g("",L,t);else if(b==="date"){let p=i.bucket??"day",h=_(String(o),p);h?g(h,de(h,p),t):g("",L,t)}else if(b==="boolean")g(o?"1":"0",o?"Yes":"No",t);else{let p=m?.display?.format?.[i.by];g(String(o),p?p(o):String(o),t)}continue}let l=k(n.graph,t.id,i.by).map(o=>({id:o.id,label:q.has(o.id)?`${S(n,o)} \xB7 ${q.get(o.id)}`:S(n,o)})).sort((o,p)=>o.label.localeCompare(p.label));l.length===0?g("",L,t):g(l.map(o=>o.id).join(","),l.map(o=>o.label).join(", "),t)}let w=b==="choice"?V(O[i.by]):void 0,ee=[...y.entries()].sort(([t,l],[o,p])=>t===""?1:o===""?-1:w?w.indexOf(t)-w.indexOf(o):b==="boolean"?o.localeCompare(t):b==="date"?t.localeCompare(o):l.label.localeCompare(p.label)).map(([t,l])=>({key:t,label:l.label,nodes:l.nodes}));return{nodes:d,groups:ee,grouped:!0}}function P(e){if(e===void 0)return;if(typeof e=="string")return{by:e,direction:"asc"};let r=e.then===void 0?void 0:typeof e.then=="string"?{by:e.then,direction:"asc"}:{by:e.then.by,direction:e.then.direction??"asc"};return{by:e.by,direction:e.direction??"asc",...r?{then:r}:{}}}function Q(e){if(e!==void 0)return typeof e=="string"?{by:e}:e}function fe(e){let r=P(e?.sort),n=Q(e?.group);if(!(!r&&!n))return{...r?{sort:r}:{},...n?{group:{by:n.by}}:{}}}var le=(e,r)=>r?e==="1"?"true":"false":e;function ce(e,r,n){let s=n.type==="boolean",u=s?["true","false"]:n.options??[],c=[...new Set([...(r.order??[]).filter(d=>u.includes(d)),...u])],a=r.closed??[],f=d=>{if(d.key==="")return[1,0];let i=le(d.key,s);if(a.includes(i))return[2,a.indexOf(i)];let y=c.indexOf(i);return[0,y<0?c.length:y]};return e.map((d,i)=>({group:d,at:i,rank:f(d)})).sort((d,i)=>d.rank[0]-i.rank[0]||d.rank[1]-i.rank[1]||d.at-i.at).map(({group:d,rank:i})=>({...d,closed:i[0]===2}))}export{Q as a,fe as b,ce as c,re as d,te as e,ne as f,ue as g,ae as h};
|