graview 0.1.40 → 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.6PSWHBL2.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.2JB4Y2ET.js → chunk.3K2KBIRG.js} +1 -1
- package/dist/preview/chunk.3SKUJWFC.js +1 -0
- package/dist/preview/{chunk.47KHZCNG.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.YYIKSH2F.js → chunk.4YBP552Z.js} +2 -2
- package/dist/preview/{chunk.XQHDP5C3.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.XRYTJNA7.js → chunk.5NDYYTT4.js} +1 -1
- package/dist/preview/{chunk.4VG2KN7G.js → chunk.6HUS5UHZ.js} +1 -1
- package/dist/preview/{chunk.YYFLTMNN.js → chunk.6MLAJKYM.js} +1 -1
- package/dist/preview/{chunk.T3TYD7QI.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.DPZTW24D.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.S356ACK2.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.JQEYZB5I.js → chunk.AWSUMY3D.js} +1 -1
- package/dist/preview/{chunk.H6XKMLDQ.js → chunk.B65HPL4I.js} +1 -1
- package/dist/preview/{chunk.4QPVS2ZM.js → chunk.B6DKKNVR.js} +1 -1
- package/dist/preview/{chunk.PPG2SEIY.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.BSAXZQSY.js → chunk.CSWX7YGI.js} +1 -1
- package/dist/preview/chunk.D3ELYLME.js +1 -0
- package/dist/preview/{chunk.ETOGQE2V.js → chunk.DNMBZONP.js} +1 -1
- package/dist/preview/{chunk.G6VZNRQ5.js → chunk.DXAUXGNN.js} +1 -1
- package/dist/preview/{chunk.LPE4FLC6.js → chunk.EC2T2UVH.js} +2 -2
- package/dist/preview/chunk.EHMCRUYR.js +1 -0
- package/dist/preview/{chunk.STI447YW.js → chunk.EQIQPY4O.js} +1 -1
- package/dist/preview/{chunk.VZYCILPJ.js → chunk.ETWOZQWL.js} +1 -1
- package/dist/preview/{chunk.LPBM5AES.js → chunk.EVHXF7LZ.js} +1 -1
- package/dist/preview/{chunk.6J37UQKG.js → chunk.FFRWSODT.js} +1 -1
- package/dist/preview/chunk.G4AY6NGN.js +1 -0
- package/dist/preview/{chunk.ZGCRMNER.js → chunk.GN2SZEFH.js} +1 -1
- package/dist/preview/{chunk.ZK3X23EU.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.UOPKRN55.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.ESSSNLEO.js → chunk.IGA7OD3L.js} +1 -1
- package/dist/preview/{chunk.GY6RYJHM.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.6AVZWLRF.js → chunk.JCTT2LAK.js} +1 -1
- package/dist/preview/{chunk.FOQZADMA.js → chunk.JE4QQEJE.js} +1 -1
- package/dist/preview/{chunk.CL2ZS5EQ.js → chunk.JEBB3WM7.js} +1 -1
- package/dist/preview/{chunk.OW7NSJ4H.js → chunk.JPD2I4Z7.js} +1 -1
- package/dist/preview/{chunk.MIM2QLF5.js → chunk.K63BUJBF.js} +2 -2
- package/dist/preview/{chunk.GTV2VZAS.js → chunk.KMGGP6XT.js} +2 -2
- package/dist/preview/{chunk.P5ODICND.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.7WPCP2LZ.js → chunk.LKGDN25E.js} +1 -1
- package/dist/preview/{chunk.IDUPJMJO.js → chunk.LMUFLZYT.js} +1 -1
- package/dist/preview/chunk.LQGXUMUX.js +1 -0
- package/dist/preview/{chunk.UTCB3CE7.js → chunk.LWAZ6ZO6.js} +2 -2
- package/dist/preview/{chunk.CNFL5IN5.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.VF7P3ZVZ.js → chunk.P6FGIYWP.js} +1 -1
- package/dist/preview/{chunk.6JEU3ZNE.js → chunk.P6J6VFF5.js} +1 -1
- package/dist/preview/{chunk.ACBUAIDF.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.AWX7GP72.js → chunk.QHLD4TZW.js} +1 -1
- package/dist/preview/{chunk.ZJMDLRC5.js → chunk.QHP7AJUV.js} +1 -1
- package/dist/preview/{chunk.AKQXF7GW.js → chunk.QXMTGLHR.js} +1 -1
- package/dist/preview/{chunk.AVKDWISO.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.FDE3TSTK.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.2GDXNTY5.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.35PHXNOC.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.PYNYHNDS.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.2WACBAUN.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.R5WY567U.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.IFTWVUJO.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.2CF2XKOS.js +0 -1
- package/dist/preview/chunk.2FGYWAID.js +0 -1
- package/dist/preview/chunk.2NXH7VAI.js +0 -1
- package/dist/preview/chunk.2OSNYF5C.js +0 -1
- package/dist/preview/chunk.6CRRPXKP.js +0 -1
- package/dist/preview/chunk.74NOI7QN.js +0 -1
- package/dist/preview/chunk.AUBGUDO5.js +0 -1
- package/dist/preview/chunk.BNVMMOOY.js +0 -1
- package/dist/preview/chunk.CN5WAKHJ.js +0 -5
- package/dist/preview/chunk.DL26BKT7.js +0 -1
- package/dist/preview/chunk.GZIVMOY4.js +0 -117
- package/dist/preview/chunk.H7POIT3V.js +0 -1
- package/dist/preview/chunk.HFYUAK5Z.js +0 -6
- package/dist/preview/chunk.J2CR4RRH.js +0 -1
- package/dist/preview/chunk.J4IULZFD.js +0 -1
- package/dist/preview/chunk.JLDBFX6O.js +0 -1
- package/dist/preview/chunk.L3A6YLMT.js +0 -21
- package/dist/preview/chunk.LLEFYJPJ.js +0 -344
- package/dist/preview/chunk.LOZJQ5ZX.js +0 -1
- package/dist/preview/chunk.O5JKDFDH.js +0 -1
- package/dist/preview/chunk.O6F3K6CU.js +0 -1
- package/dist/preview/chunk.QCWZSSNC.js +0 -1
- package/dist/preview/chunk.S2U5CEP4.js +0 -1
- package/dist/preview/chunk.T73RB7LC.js +0 -1
- package/dist/preview/chunk.TD2LNFUB.js +0 -1
- package/dist/preview/chunk.TNESS3LQ.js +0 -2
- 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.W7R2GFBW.js +0 -47
- package/dist/preview/chunk.WBLHCH5M.js +0 -1
- package/dist/preview/chunk.XFZKP4IF.js +0 -2
- package/dist/preview/chunk.XQTMO5PW.js +0 -1
- package/dist/preview/chunk.YO24NALN.js +0 -1
- package/dist/preview/chunk.ZOR6FKNI.js +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{Ba as Q,Cb as I,E as F,F as Y,H as L,Ja as X,Jb as en,N as O,Q as j,R as B,S as U,T as K,Ua as v,Wa as nn,Z as J,_ as Z,ja as P}from"./chunk.V5MYKNL7.js";var un=1e4,p=class{constructor(a){this.nodes=a}},rn=Symbol.for("@graview/core:far-record"),fn=e=>typeof e=="object"&&e!==null&&e[rn]===!0;function cn(e){let a={...e.fields,id:`@${e.address}/${e.kind}:${e.id}`,kind:`@${e.address}/${e.kind}`,label:e.label};return Object.defineProperty(a,rn,{value:!0}),a}function Nn(e){let a=`the linked record in ${e.ref.address}`;return e.reason==="denied"?`${a} is not one this viewer may open`:`${a} has not been read`}var pn="",f=class extends Error{constructor(g,l){super(g);this.sentence=g;this.at=l}},z=class extends f{},V=e=>e!==null&&typeof e=="object"&&!Array.isArray(e)&&!(e instanceof p)&&typeof e.id=="string",tn=e=>{let a=new Set;return new p(e.filter(g=>!a.has(g.id)&&a.add(g.id)))},w=e=>e===null?"nothing":e instanceof p?"a set of records":Array.isArray(e)?"a list":V(e)?"a record":typeof e=="string"?"a word":typeof e;function on(e,a){let g=a.budget??un,l=(n,s)=>{if(g-=n,g<0)throw new z("this rule looks at too much of the graph to judge in one go",s)},u=a.today??L(),b=a.now??new Date().toISOString(),k=new Map,S=new Set,A=a.bindings,q=(n,s,t,o)=>{let d=`${n?.id}\0${s}`;if(k.has(d))return k.get(d);if(S.has(d))throw new f(`"${s}"${n?` of ${P(n.kind)}`:""} depends on itself`,o);S.add(d);let r=A;A=void 0;try{let i=$(t,n);return k.set(d,i),i}finally{A=r,S.delete(d)}},E=(n,s,t)=>{l(1,t);let o=a.kinds.get(n.kind),d=o?.computed?.get(s);if(d)return q(n,s,d,t);let r=o?.linked?.get(s);if(r){let y=Q(Object.hasOwn(n,s)?n[s]:void 0,r);l(y.length,t);let m=a.linked??X(a.graph),h=y.flatMap(x=>{let C=m?m(x):{unread:!0};return"record"in C?[cn(C.record)]:(a.onUnread?.({relation:s,ref:x,reason:"denied"in C?"denied":"unread"}),[])});return r.cardinality==="one"?h[0]??null:new p(h)}let i=Object.hasOwn(n,s);if(o?.fields.has(s)||i){let y=i?v(n,s,u):void 0;return y===void 0?null:y}let c=o?.edges.get(s);if(c){let y=a.graph.out(n.id,s);return l(y.length,t),c==="one"?y[0]??null:new p(y)}if(s==="id")return n.id;if(fn(n))return null;throw new f(`${P(n.kind)} has no field or relation called "${s}"`,t)},N=(n,s,t)=>{if(n instanceof p)return n;if(n===null)return new p([]);if(V(n))return new p([n]);throw new f(`${t}(\u2026) needs a set of records, and was given ${w(n)}`,s)},G=(n,s,t)=>{if(n===null)return null;if(typeof n=="string")return n;if(typeof n=="number"||typeof n=="boolean")return String(n);throw new f(`${t}(\u2026) needs a word, and was given ${w(n)}`,s)},_=(n,s,t)=>{let o=G(n,s,t);if(o===null)return null;let d=Date.parse(o.length===10?`${o}T00:00:00Z`:o);if(Number.isNaN(d))throw new f(`${t}(\u2026) needs a date, and "${o}" is not one`,s);return d},M=(n,s)=>V(n)&&V(s)?n.id===s.id:V(n)&&typeof s=="string"?n.id===s:typeof n=="string"&&V(s)?n===s.id:Array.isArray(n)&&Array.isArray(s)?n.length===s.length&&n.every((t,o)=>M(t,s[o])):n===s,R=(n,s,t)=>{if(n===null)return!1;if(typeof n=="boolean")return n;throw new f(`${t} must be true or false, and was ${w(n)}`,s)},T=(n,s)=>$(s,n);function $(n,s){switch(l(1,n.at),n.t){case"lit":return n.value;case"list":return n.items.map(t=>$(t,s));case"ident":{let t=A&&Object.hasOwn(A,n.name)?A[n.name]:void 0;if(t!==void 0)return t;if(s)return E(s,n.name,n.at);throw new f(`"${n.name}" means nothing in a rule over the whole graph`,n.at)}case"member":{let t=$(n.object,s);if(t===null)return null;if(V(t))return E(t,n.name,n.at);throw new f(`".${n.name}" needs a record before it, and was given ${w(t)}`,n.at)}case"unary":{let t=$(n.operand,s);if(n.op==="!")return!R(t,n.at,"what follows not");if(t===null)return null;if(typeof t!="number")throw new f(`"-" needs a number, and was given ${w(t)}`,n.at);return-t}case"where":{let t=N($(n.set,s),n.at,"where");return l(t.nodes.length,n.at),new p(t.nodes.filter(o=>R(T(o,n.filter),n.at,"a where condition")))}case"binary":return dn(n,s);case"call":return ln(n,s)}}function dn(n,s){if(n.op==="&&")return R($(n.left,s),n.at,"each side of and")&&R($(n.right,s),n.at,"each side of and");if(n.op==="||")return R($(n.left,s),n.at,"each side of or")||R($(n.right,s),n.at,"each side of or");let t=$(n.left,s),o=$(n.right,s);if(n.op==="&"||n.op==="|"||n.op==="-"&&(t instanceof p||o instanceof p)){let d=N(t,n.at,n.op).nodes,r=N(o,n.at,n.op).nodes;l(d.length+r.length,n.at);let i=new Set(r.map(c=>c.id));return tn(n.op==="|"?[...d,...r]:d.filter(c=>i.has(c.id)===(n.op==="&")))}switch(n.op){case"==":return M(t,o);case"!=":return!M(t,o);case"in":{if(o===null)return!1;if(o instanceof p)return o.nodes.some(d=>M(t,d));if(Array.isArray(o))return o.some(d=>M(t,d));if(typeof o=="string"&&typeof t=="string")return o.includes(t);throw new f(`"in" needs a list or a set on its right, and was given ${w(o)}`,n.at)}case"<":case"<=":case">":case">=":{if(t===null||o===null)return!1;if(!(typeof t=="number"&&typeof o=="number"||typeof t=="string"&&typeof o=="string"))throw new f(`cannot compare ${w(t)} with ${w(o)}`,n.at);return n.op==="<"?t<o:n.op==="<="?t<=o:n.op===">"?t>o:t>=o}default:{if(t===null||o===null)return null;if(n.op==="+"&&(typeof t=="string"||typeof o=="string")){let d=`${G(t,n.at,"+")}${G(o,n.at,"+")}`;if(d.length>1e4)throw new f("that makes a word too long",n.at);return d}if(typeof t!="number"||typeof o!="number")throw new f(`"${n.op}" needs numbers, and was given ${w(t)} and ${w(o)}`,n.at);return(n.op==="/"||n.op==="%")&&o===0?null:n.op==="+"?t+o:n.op==="-"?t-o:n.op==="*"?t*o:n.op==="/"?t/o:t%o}}}function ln(n,s){let t=(r,i=r)=>{if(n.args.length<r||n.args.length>i)throw new f(`${n.fn}(\u2026) takes ${r===i?r:`${r} to ${i}`} argument${i===1?"":"s"}`,n.at)},o=r=>$(n.args[r],s),d=r=>{let i=o(r);if(typeof i!="string")throw new f(`${n.fn}(\u2026) needs a quoted name, like ${n.fn}('name')`,n.at);return i};switch(n.fn){case"out":case"in":{t(1,2);let r=(y,m)=>n.fn==="out"?a.graph.out(y,m):a.graph.in(y,m);if(n.args.length===2){let y=N(o(0),n.at,n.fn).nodes,m=d(1);return tn(y.flatMap(h=>{let x=r(h.id,m);return l(x.length+1,n.at),x}))}let i=d(0);if(!s)throw new f(`${n.fn}('${i}') needs a record to start from`,n.at);let c=r(s.id,i);return l(c.length,n.at),new p(c)}case"all":{t(1,2);let r=a.graph.nodesOfKind(d(0),{archived:n.args.length===2?o(1):!1});return l(r.length,n.at),new p(r)}case"archived":return t(0,1),nn(n.args.length===1?o(0):s);case"count":return t(1),N(o(0),n.at,"count").nodes.length;case"exists":return t(1),N(o(0),n.at,"exists").nodes.length>0;case"every":case"some":{t(2);let r=N(o(0),n.at,n.fn);l(r.nodes.length,n.at);let i=c=>R(T(c,n.args[1]),n.at,`the condition in ${n.fn}(\u2026)`);return n.fn==="every"?r.nodes.every(i):r.nodes.some(i)}case"sum":case"min":case"max":{t(2);let r=N(o(0),n.at,n.fn);l(r.nodes.length,n.at);let i=n.args[1],c=i.t==="lit"&&typeof i.value=="string"?i.value:void 0,y=i.t==="ident"?`'${i.name}'`:c!==void 0?`'${c}'`:"\u2026",m=r.nodes.map(h=>i.t==="ident"?E(h,i.name,n.at):c!==void 0?E(h,c,n.at):T(h,i)).filter(h=>{if(h===null)return!1;if(typeof h!="number")throw new f(`${n.fn}(\u2026, ${y}) needs a number for each member, and found ${w(h)}`,n.at);return!0});return n.fn==="sum"?m.reduce((h,x)=>h+x,0):m.length===0?null:n.fn==="min"?Math.min(...m):Math.max(...m)}case"fact":{t(1);let r=d(0),i=a.kinds.get(pn)?.computed?.get(r);if(!i)throw new f(`no fact is called "${r}"`,n.at);return q(null,r,i,n.at)}case"first":return t(1),N(o(0),n.at,"first").nodes[0]??null;case"sort":{t(2,3);let r=N(o(0),n.at,"sort"),i=n.args.length===3?o(2):"asc";if(i!=="asc"&&i!=="desc")throw new f("sort(\u2026) goes 'asc' or 'desc'",n.at);let c=r.nodes.length;l(c+c*Math.ceil(Math.log2(c+1)),n.at);let y=r.nodes.map((h,x)=>({node:h,i:x,key:T(h,n.args[1])})),m=i==="desc"?-1:1;return y.sort((h,x)=>H(h.key,x.key,m,n.at)||h.i-x.i),new p(y.map(h=>h.node))}case"either":{if(n.args.length<1)throw new f("either(\u2026) takes at least one argument",n.at);for(let r=0;r<n.args.length;r++){let i=o(r);if(i!==null&&!(i instanceof p&&i.nodes.length===0))return i}return null}case"present":{t(1);let r=o(0);return r===null||r===""?!1:Array.isArray(r)?r.length>0:r instanceof p?r.nodes.length>0:!0}case"len":{t(1);let r=o(0);if(r===null)return 0;if(typeof r=="string"||Array.isArray(r))return r.length;if(r instanceof p)return r.nodes.length;throw new f(`len(\u2026) needs a word or a list, and was given ${w(r)}`,n.at)}case"contains":case"startsWith":{t(2);let r=o(0),i=o(1);if(r===null||i===null)return!1;if(n.fn==="contains"&&Array.isArray(r))return r.some(m=>M(m,i));let c=G(r,n.at,n.fn),y=G(i,n.at,n.fn);return n.fn==="contains"?c.toLowerCase().includes(y.toLowerCase()):c.startsWith(y)}case"lower":{t(1);let r=G(o(0),n.at,"lower");return r===null?null:r.toLowerCase()}case"today":return t(0),u;case"now":return t(0),b;case"date":{t(1);let r=_(o(0),n.at,"date");return r===null?null:new Date(r).toISOString().slice(0,10)}case"days":case"hours":{t(2);let r=_(o(0),n.at,n.fn),i=_(o(1),n.at,n.fn);if(r===null||i===null)return null;let c=(i-r)/(n.fn==="days"?864e5:36e5);return n.fn==="days"?Math.round(c):c}case"if":return t(3),R(o(0),n.at,"the condition in if(\u2026)")?o(1):o(2);default:throw new f(`"${n.fn}" is not a function the rule language knows`,n.at)}}function H(n,s,t,o){if(n===null||s===null)return n===s?0:n===null?1:-1;if(Array.isArray(n)&&Array.isArray(s)){for(let r=0;r<Math.max(n.length,s.length);r++){let i=H(n[r]??null,s[r]??null,t,o);if(i!==0)return i}return 0}let d=r=>typeof r=="number"||typeof r=="string"||typeof r=="boolean"?typeof r:w(r);if(d(n)!==d(s)||typeof n=="object"||typeof s=="object")throw new f(`sort(\u2026) cannot put ${w(n)} and ${w(s)} in order`,o);return typeof n=="string"?t*(n<s?-1:n>s?1:0):t*(Number(n)-Number(s))}return $(e,a.subject)}var Sn=["out","in","all","count","exists","every","some","sum","min","max","present","len","contains","startsWith","lower","today","now","date","days","hours","if","first","sort","either","fact","archived"];var Vn=(e,a,g,l)=>({severity:"error",code:e,path:a,message:g,...l?{fix:l}:{}}),Gn=(e,a,g,l)=>({severity:"warning",code:e,path:a,message:g,...l?{fix:l}:{}}),Mn=e=>e.some(a=>a.severity==="error");function On(e){return e.map(a=>`${a.severity==="error"?"\u2717":a.severity==="warning"?"!":"\xB7"} ${a.path||"(document)"}: ${a.message}${a.fix?` \u2014 ${a.fix}`:""}`).join(`
|
|
2
|
-
`)}var Cn=["money","percent","date","time","datetime","relative","upper","lower","count","words","and","plural","excerpt"],gn={getNode:()=>{},allNodes:()=>[],allEdges:()=>[],nodesOfKind:()=>[],edgesOfKind:()=>[],out:()=>[],in:()=>[],neighbors:()=>[],has:()=>!1};function jn(e,a,g,l=[],u,b=D){return W(e,a,g,l,u,b)}var yn=(e,a)=>e.capital?J(a):a;function hn(e){return e?a=>{let g=e.tryDefinition(a.kind)?.label;return g?g(a):D(a)}:D}var sn=["zero","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"],an=["","","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"];function mn(e,a){return!Number.isInteger(e)||e<0||e>99?K(e,a):e<20?sn[e]:e%10===0?an[e/10]:`${an[Math.floor(e/10)]}-${sn[e%10]}`}function wn(e){return/[^aeiou]y$/i.test(e)?`${e.slice(0,-1)}ies`:/(s|x|z|ch|sh)$/i.test(e)?`${e}es`:`${e}s`}var D=e=>String(e.name??e.title??e.label??e.id);function W(e,a,g,l=[],u,b=D){if(a==="plural"){let k=e instanceof p?e.nodes.length:Array.isArray(e)?e.length:typeof e=="number"?e:null;return k===null||l[0]===void 0?"\u2014":k===1?l[0]:l[1]??wn(l[0])}if(e===null)return"\u2014";if(e instanceof p)return a==="count"?String(e.nodes.length):a==="and"?Z(e.nodes.map(b)):e.nodes.map(b).join(", ");if(Array.isArray(e)){if(a==="count")return String(e.length);let k=e.map(S=>W(S,void 0,g,[],u,b));return a==="and"?Z(k):k.join(", ")}if(typeof e=="object")return b(e);switch(a){case"words":return typeof e=="number"?mn(e,u?.locale):String(e);case"money":return typeof e=="number"?I(e,u):String(e);case"percent":return typeof e=="number"?K(e,u?.locale,{style:"percent",maximumFractionDigits:0}):String(e);case"upper":return String(e).toUpperCase();case"lower":return String(e).toLowerCase();case"excerpt":return en(String(e),Number(l[0])||void 0);case"date":return O(U(String(e),u?.timeZone)??String(e).slice(0,10),u?.locale);case"time":return typeof e=="string"&&F.test(e)?O(e,u?.locale):B(String(e),u?.locale,u?.timeZone);case"datetime":return typeof e=="string"&&F.test(e)?O(e,u?.locale):j(String(e),u?.locale,u?.timeZone);case"relative":{let k=U(String(e),u?.timeZone),S=k===void 0?Date.parse(String(e)):Date.parse(`${k}T00:00:00Z`);if(Number.isNaN(S))return String(e);let A=Math.round((S-Date.parse(`${g}T00:00:00Z`))/864e5);return A===0?"today":A===1?"tomorrow":A===-1?"yesterday":A>0?`in ${A} days`:`${-A} days ago`}default:return typeof e=="string"&&F.test(e)?O(e,u?.locale):typeof e=="string"&&Y.test(e)?j(e,u?.locale,u?.timeZone):String(e)}}function Un(e,a){let g=a.today??L(),l=a.name??hn(a.graph?.schema);return e.map(u=>{if(u.text!==void 0)return u.text;try{let b=on(u.expr,{graph:a.graph??gn,subject:a.node,kinds:a.kinds,today:g,budget:a.budget??500,...a.bindings?{bindings:a.bindings}:{}});return yn(u,W(b,u.format,g,u.formatArgs,a.money,l))}catch(b){if(b instanceof f)return"\u2014";throw b}}).join("")}export{p as a,Nn as b,pn as c,f as d,z as e,on as f,Sn as g,Vn as h,Gn as i,Mn as j,On as k,Cn as l,gn as m,jn as n,yn as o,hn as p,Un as q};
|
|
@@ -1,5 +0,0 @@
|
|
|
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:]+)?$/,$f=n=>!Number.isNaN(Date.parse(n)),W=(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 yd(n){pn=mn(n.reader),hn=mn(n.app),gn=De(n.readerTimeZone),Te=De(n.appTimeZone)}function bd(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,vd=n=>Yn(n)??Intl.DateTimeFormat().resolvedOptions().timeZone??"UTC",xd=/^\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=!xd.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 wd(s.day,s.minutes)-Math.floor(i/6e4)*6e4};return r-o(r-o(r))}var wd=(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),kd=(n,e,t)=>Eo(n,{},e,t);function Sd(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 $d(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 Rd(n,e){return Fe.test(n)?he(Jn(n),{month:"short",day:"numeric",timeZone:Re},e):n}function _d(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 Ad=(n,e="short",t)=>he(Date.UTC(1970,0,4+n),{weekday:e,timeZone:Re},t),Od=(n,e)=>he(Date.UTC(1970,0,1,0,Math.round(n)),{hour:"numeric",minute:"2-digit",timeZone:Re},e),Ed=/(?<![\w-])(\d{4}-\d{2}-\d{2})(?![\w-]|:)/g;function Lt(n,e){return n.includes("-")?n.replace(Ed,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 Pd(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??W()):!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 zd(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 Md(n,e,t){let r=n.tryDefinition(e);return`${se(t)} ${t===1?U(r,e):ee(n,e).toLowerCase()}`}function ee(n,e){return n.tryDefinition(e)?.plural??`${C(e).toLowerCase()}s`}function Nd(n,e){return yn(ee(n,e))}function Id(n,e){let t=ee(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 jd=/^(u[nt]i|use|usu|uti|ubiq|eu|ewe|one|once)/,Td=/^(hour|honest|hono[ur]r?|heir)/;function zo(n){let e=C(n).toLowerCase();return Td.test(e)?"an":jd.test(e)?"a":/^[aeiou]/.test(e)?"an":"a"}function Ze(n){return`${zo(n)} ${C(n).toLowerCase()}`}function U(n,e){return n?.noun??C(e).toLowerCase()}function Ut(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 Bt(n,e="|"){return n.map(t=>Yt(t)).join(e)}function Mo(n,e){return typeof e=="bigint"?e.toString():e}var Kt=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 No(n){return new Kt(n)}function Io(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 jo(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}function et(n,e,t){Object.defineProperty(n,e,{value:t,writable:!0,enumerable:!0,configurable:!0})}function To(n){let e=Object.getOwnPropertyDescriptor(n,"shape");return e?.get?e.get.raw:e?.value}function Wt(n){return To(n._zod.def)??n._zod.def.shape}function Do(n,e,t){Object.defineProperty(n,e,{get(){let r=t();return et(this,e,r),r},enumerable:!0,configurable:!0})}function Fo(n,e,t){e in n?et(n,e,t):n[e]=t}function Dd(n,e,t,r){let o=Wt(e);for(let i of t){let s=Object.getOwnPropertyDescriptor(o,i);s.enumerable&&(s.get?Do(n,i,()=>{let a=e._zod.def.shape[i];return r?r(a,i):a}):Fo(n,i,r?r(s.value,i):s.value))}}function Fd(n,e){for(let t of Reflect.ownKeys(e)){let r=Object.getOwnPropertyDescriptor(e,t);r.enumerable&&(r.get?Do(n,t,()=>e[t]):Fo(n,t,r.value))}}function Zo(...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 Lo=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 Co(n){return Object.keys(n).filter(e=>n[e]._zod.optin!==void 0&&n[e]._zod.optout==="optional")}var Go={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 Ko(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,Zo(n._zod.def,{shape:Zd(n,e)}))}function Zd(n,e){let t={};return Dd(t,n,Reflect.ownKeys(Wt(n))),Fd(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 Uo(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 Ld=/[\uD800-\uDBFF]/;function Xt(n){let e=n.length;if(!Ld.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 Bo(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 Vo(n,e){for(let t in e){let r=Object.getOwnPropertyDescriptor(e,t);r.get?Object.defineProperty(n,t,{...r,enumerable:!1}):Cd(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 Cd(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 Gd(n,e){let t=Object.getPrototypeOf(n);return e in t?void 0:t}var Gt,me=!1,Kd={configurable:!0,get(){me=!0}};function ne(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,Kd);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 Wo(n,e,t,r){let o=Gd(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 qo;var nr={value:void 0,enumerable:!1},Ho="captureStackTrace"in Error?Error:null;function Ud(n){let e=Ho;if(e){let t=e.stackTraceLimit;if(typeof t=="number"){try{e.stackTraceLimit=0}catch{return Ho=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),Vo(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?Ud(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.")}};(qo=globalThis).__zod_globalConfig??(qo.__zod_globalConfig={});var Ce=globalThis.__zod_globalConfig;function Y(n){return n&&Object.assign(Ce,n),Ce}function Bd(){let n=this._zod;return n.message??(n.message=JSON.stringify(n.def,Mo,2)),n.message}function Vd(n){this._zod.message=n}var Wd={get:Bd,set:Vd,enumerable:!0,configurable:!0},rr={value:void 0,enumerable:!1},Yo=new WeakSet([Object.prototype,Error.prototype]),Jo=(n,e)=>{n.name="$ZodError",rr.value=e,Object.defineProperty(n,"issues",rr),rr.value=void 0,Object.defineProperty(n,"message",Wd);let t=Object.getPrototypeOf(n);Yo.has(t)||(Yo.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})}}))},Mf=O("$ZodError",Jo),wn=O("$ZodError",Jo,void 0,{Parent:Error});var Hd=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,Y())));throw qt(d,i?.callee??e),d}return a.value};return e},or=Hd(wn),Yd=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,Y())));throw qt(d,i?.callee??e),d}return a.value};return e},ir=Yd(wn),Jd=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?Xo(n,i.issues,o):{success:!0,data:i.value}},sr=Jd(wn);function Xo(n,e,t){let r;return{success:!1,get error(){return r||(r=new n(e.map(o=>de(o,t,Y()))),e=void 0,t=void 0),r},set error(o){r=o,e=void 0,t=void 0}}}var Xd=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?Xo(n,i.issues,o):{success:!0,data:i.value}},ar=Xd(wn);var Qo=/^(?:[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 ei=/^https?$/;var ni=/^[\s\S]{0,}$/;var dr=/^-?\d+(?:\.\d+)?$/,ti=/^(?:true|false)$/i,ri=/^null$/i;var J=O("$ZodCheck",(n,e)=>{var t;n._zod??(n._zod={}),n._zod.def=e,(t=n._zod).onattach??(t.onattach=[])});var oi=n=>{let e=n.value;return!Io(e)&&e.length!==void 0},nt={number:"number",bigint:"bigint",object:"date"},ii=O("$ZodCheckLessThan",(n,e)=>{J.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})}}),si=O("$ZodCheckGreaterThan",(n,e)=>{J.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})}}),ai=O("$ZodCheckMultipleOf",(n,e)=>{J.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):jo(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})}}),di=O("$ZodCheckNumberFormat",(n,e)=>{J.init(n,e),e.format=e.format||"float64";let t=e.format?.includes("int"),r=t?"int":"number",[o,i]=Go[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 ci=O("$ZodCheckMaxLength",(n,e)=>{var t;J.init(n,e),(t=n._zod.def).when??(t.when=oi),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})}}),ui=O("$ZodCheckMinLength",(n,e)=>{var t;J.init(n,e),(t=n._zod.def).when??(t.when=oi),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;J.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=()=>{})}),li=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 pi={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=pi;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(Uo(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",ec(this))},set"~standard"(n){_e(this,"~standard",n)}}),vi=(n,e)=>n.issues.length?{issues:n.issues.map(t=>de(t,e,Y()))}:{value:n.value};async function Qd(n,e){let t={async:!0};return vi(await n._zod.run({value:e,issues:[]},t),t)}function ec(n){return{validate:e=>{let t={async:!1};try{let r=n._zod.run({value:e,issues:[]},t);if(!(r instanceof Promise))return vi(r,t)}catch{}return Qd(n,e)},vendor:"zod",version:1}}var lr=O("$ZodString",(n,e)=>{G.init(n,e),n._zod.pattern=e.pattern??ni,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 xi=O("$ZodEmail",(n,e)=>{e.pattern??(e.pattern=Qo),ot.init(n,e)}),wi=1,tt=2;function nc(n){try{return typeof URL<"u"&&typeof URL.canParse=="function"?URL.canParse(n):(new URL(n),!0)}catch{return!1}}function tc(n,e){return!("normalize"in e)&&!("hostname"in e)&&!("protocol"in e)?nc(n)||tt:rc(n,e)}function rc(n,e){if(!e.normalize&&e.protocol?.source===ei.source&&!/^https?:\/\//i.test(n))return wi;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 oc=/[\t\n\r]/g;function hi(n){return n.replace(oc,"")}function ic(n,e){return e.lastIndex=0,e.test(n.hostname)}function sc(n,e){return e.lastIndex=0,e.test(n.protocol.endsWith(":")?n.protocol.slice(0,-1):n.protocol)}var ki=O("$ZodURL",(n,e)=>{ot.init(n,e),n._zod.check=t=>{try{let r=t.value.trim(),o=tc(r,e);if(o===wi){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=hi(r);return}e.hostname&&!ic(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&&!sc(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:hi(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}}),Si=O("$ZodNumberFormat",(n,e)=>{di.init(n,e),fr.init(n,e)}),$i=O("$ZodBoolean",(n,e)=>{G.init(n,e),n._zod.pattern=ti,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 Ri=O("$ZodNull",(n,e)=>{G.init(n,e),n._zod.pattern=ri,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 _i=O("$ZodUnknown",(n,e)=>{G.init(n,e),n._zod.parse=t=>t}),Ai=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 gi(n,e,t){n.issues.length&&e.issues.push(...ye(t,n.issues)),e.value[t]=n.value}var Oi=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=>gi(p,r,d)));else if(gi(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 ac=[];function dc(n){let e=Object.keys(n.shape),t=Object.getOwnPropertySymbols(n.shape),r=t.length?t:ac,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=Co(n.shape);return{...n,allKeys:o,symbolKeys:r,keySet:new Set(e),numKeys:e.length,optionalKeys:new Set(i)}}function cc(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 Ei=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=No(()=>dc(e));ne(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?cc(c,p,l,u,o.value,n,g===!0):c.length?Promise.all(c).then(()=>l):l}});function mi(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,Y())))}),e)}var Pi=O("$ZodUnion",(n,e)=>{G.init(n,e),ne(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),ne(n,"optout",r=>r.def.options.some(o=>o._zod.optout==="optional")?"optional":void 0),ne(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)))}),ne(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=>mi(a,r,n,o)):mi(s,r,n,o)}});var zi=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,Y())),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,Y())),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 Mi=O("$ZodEnum",(n,e)=>{G.init(n,e);let t=Ut(e.entries),r=new Set(t);n._zod.values=r,ne(n,"pattern",o=>{let i=Ut(o.def.entries).filter(s=>Lo.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}}),Ni=O("$ZodLiteral",(n,e)=>{G.init(n,e);let t=new Set(e.values);n._zod.values=t,ne(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 yi(n,e){return n.value=e.issues.length?void 0:e.value,n}var Ii=O("$ZodOptional",(n,e)=>{G.init(n,e),ne(n,"optin",t=>t.def.innerType._zod.optin==="defaulted"?"defaulted":"optional"),n._zod.optout="optional",ne(n,"values",t=>{let r=t.def.innerType._zod.values;return r?new Set([...r,void 0]):void 0}),ne(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=>yi(t,i)):yi(t,o)}return e.innerType._zod.run(t,r)}});var ji=O("$ZodCustom",(n,e)=>{J.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=>bi(i,t,r,n));bi(o,t,r,n)}});function bi(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 uc=()=>{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=Bo(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 ${Bt(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":""}: ${Bt(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 Ti(){return{localeError:uc()}}var Di;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 Fi(){return new pr}(Di=globalThis).__zod_globalRegistry??(Di.__zod_globalRegistry=Fi());var Ge=globalThis.__zod_globalRegistry;function Zi(n){return n.checks&&(n.checks=[...n.checks]),n}function Li(n,e){return new n(Zi({type:"string",...M(e)}))}function Ci(n,e){return new n({type:"string",format:"email",check:"string_format",abort:!1,...M(e)})}function Gi(n,e){return new n({type:"string",format:"url",check:"string_format",abort:!1,...M(e)})}function Ki(n,e){return new n(Zi({type:"number",checks:[],...M(e)}))}function Ui(n,e){return new n({type:"number",check:"number_format",abort:!1,format:"safeint",...M(e)})}function Bi(n,e){return new n({type:"boolean",...M(e)})}function Vi(n,e){return new n({type:"null",...M(e)})}function Wi(n){return new n({type:"unknown"})}function qi(n,e){return new n({type:"never",...M(e)})}function Hi(n,e){return new ii({check:"less_than",...M(e),value:n,inclusive:!0})}function Yi(n,e){return new si({check:"greater_than",...M(e),value:n,inclusive:!0})}function hc(n,e){return new ai({check:"multiple_of",...M(e),value:n})}function hr(n,e){return new ci({check:"max_length",...M(e),maximum:n})}function kn(n,e){return new ui({check:"min_length",...M(e),minimum:n})}function Sn(n,e){return new li({check:"string_format",format:"regex",...M(e),pattern:n})}function Ji(n,e,t){return new n({type:"custom",check:"custom",fn:e,...M(t)})}function Xi(n,e){let t=gc(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 gc(n,e){let t=new J({check:"custom",...M(e)});return t._zod.check=n,t}function Qi(n){let e=new J({check:"describe"});return e._zod.onattach=[t=>{let r=Ge.get(t)??{};Ge.add(t,{...r,description:n})}],e._zod.check=()=>{},e}var q=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)}}),ns=O("ZodMiniString",(n,e)=>{lr.init(n,e),q.init(n,e)});function D(n){return Li(ns,n)}var ts=O("ZodMiniStringFormat",(n,e)=>{ot.init(n,e),ns.init(n,e)}),bc=O("ZodMiniEmail",(n,e)=>{xi.init(n,e),ts.init(n,e)});function Tg(n){return Ci(bc,n)}var vc=O("ZodMiniURL",(n,e)=>{ki.init(n,e),ts.init(n,e)});function Dg(n){return Gi(vc,n)}var rs=O("ZodMiniNumber",(n,e)=>{fr.init(n,e),q.init(n,e)});function $n(n){return Ki(rs,n)}var xc=O("ZodMiniNumberFormat",(n,e)=>{Si.init(n,e),rs.init(n,e)});function Fg(n){return Ui(xc,n)}var wc=O("ZodMiniBoolean",(n,e)=>{$i.init(n,e),q.init(n,e)});function Zg(n){return Bi(wc,n)}var kc=O("ZodMiniNull",(n,e)=>{Ri.init(n,e),q.init(n,e)});function Lg(n){return Vi(kc,n)}var Sc=O("ZodMiniUnknown",(n,e)=>{_i.init(n,e),q.init(n,e)});function gr(){return Wi(Sc)}var $c=O("ZodMiniNever",(n,e)=>{Ai.init(n,e),q.init(n,e)});function Rc(n){return qi($c,n)}var _c=O("ZodMiniArray",(n,e)=>{Oi.init(n,e),q.init(n,e)});function Cg(n,e){return new _c({type:"array",element:n,...M(e)})}var mr=O("ZodMiniObject",(n,e)=>{Ei.init(n,e),q.init(n,e),Wo(n,"shape",t=>t._zod.def.shape,!1)});function Ke(n,e){let t={type:"object",shape:n??{},...M(e)};return new mr(t)}function Ue(n,e){return new mr({type:"object",shape:n,catchall:Rc(),...M(e)})}function Gg(n,e){return new mr({type:"object",shape:n,catchall:gr(),...M(e)})}function os(n,e){return Ko(n,e)}var Ac=O("ZodMiniUnion",(n,e)=>{Pi.init(n,e),q.init(n,e)});function Kg(n,e){return new Ac({type:"union",options:n,...M(e)})}var es=O("ZodMiniRecord",(n,e)=>{zi.init(n,e),q.init(n,e)});function Ug(n,e,t){return!e||!e._zod?new es({type:"record",keyType:D(),valueType:n,...M(e)}):new es({type:"record",keyType:n,valueType:e,...M(t)})}var Oc=O("ZodMiniEnum",(n,e)=>{Mi.init(n,e),q.init(n,e),n.options=[...n._zod.values]});function is(n,e){let t=Array.isArray(n)?Object.fromEntries(n.map(r=>[r,r])):n;return new Oc({type:"enum",entries:t,...M(e)})}var Ec=O("ZodMiniLiteral",(n,e)=>{Ni.init(n,e),q.init(n,e)});function ss(n,e){return new Ec({type:"literal",values:Array.isArray(n)?n:[n],...M(e)})}var Pc=O("ZodMiniOptional",(n,e)=>{Ii.init(n,e),q.init(n,e)});function X(n){return new Pc({type:"optional",innerType:n})}var zc=O("ZodMiniCustom",(n,e)=>{ji.init(n,e),q.init(n,e)});function it(n,e={}){return Ji(zc,n,e)}function Bg(n,e){return Xi(n,e)}var Vg=Qi;Y().localeError||Y(Ti());var I=n=>typeof n=="object"&&n!==null?n._zod?.def:void 0,Mc=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 Nc=(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||as(e.at)!==void 0)}function as(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 ds=n=>n.type.startsWith("image/"),cs=n=>n.type.startsWith("video/");function Ic(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 jc=(n,e)=>e==="image"?ds(n):e==="video"?cs(n):!0,Tc=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),us=Symbol.for("@graview/core:file"),Dc=(n,e)=>(Object.defineProperty(I(n),us,{value:e,enumerable:!0}),n);function ls(n){let e=I(n);return e?.[us]??(e?.innerType?ls(e.innerType):void 0)}var Fc=()=>({href:D(),name:D(),type:D(),bytes:$n(),width:X($n()),height:X($n()),caption:X(D()),poster:X(D()),duration:X($n()),captions:X(D()),at:X(D())});function Wm(n){return Dc(Ke(Fc()).check(it(e=>br(e)&&jc(e,n),Tc(n))),n)}var at=/^(?:https?:\/\/[^\s<>"'`\\]+|@?[A-Za-z0-9][\w.~-]*(?:\/[\w.~-]+)*)$/,dt=n=>typeof n=="string"&&n.length<501&&at.test(n);var fs=n=>typeof n=="object"&&n!==null?n._zod?.def:void 0,Zc=/^@(?:https?:\/\/[^\s<>"'`\\#?]+|[A-Za-z0-9][\w.~-]*(?:\/[\w.~-]+)*)\/[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;function ps(n){if(typeof n!="string"||!n.startsWith("@")||!Zc.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 Lc=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*:\S[^\n]{0,199}$/,Cc=n=>`${n.kind}:${n.id}`;function hs(n,e){if(typeof n!="string"||!Lc.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 Gc(n,e){return(Array.isArray(n)?n:n==null?[]:[n]).flatMap(r=>{let o=hs(r,e);return o?[o]:[]})}var gs=Symbol.for("@graview/core:linked"),Jm=(n,e)=>(Object.defineProperty(fs(n),gs,{value:e,enumerable:!0}),n);function _n(n){let e=fs(n);return e?e[gs]??_n(e.innerType):void 0}function Kc(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 Uc(n){if(n.to==="*"||n.to.length===0)return;let e=n.to.map(ps);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 Bc=n=>n.to!=="*"&&n.to.some(e=>typeof e=="string"&&e.startsWith("@"));function Xm(n){return Object.fromEntries(Object.entries(n??{}).filter(([,e])=>!Bc(e)))}function Qm(n){let e=new Map;for(let[t,r]of Object.entries(n??{})){let o=Uc(r);o&&e.set(t,o)}return e}var vr=new WeakMap;function Vc(n,e){e?vr.set(n,e):vr.delete(n)}var ms=n=>vr.get(n);var ct=["sun","mon","tue","wed","thu","fri","sat"],Wc=["day","week","month","year"],Ve=n=>`${n}Repeat`,On=n=>n.endsWith("Repeat")&&n.length>6?n.slice(0,-6):void 0,vs=/^\d{4}-\d{2}-\d{2}$/,xs=Symbol.for("@graview/core:repeat");function ut(n){let e=I(n);return!!e&&(e[xs]===1||ut(e.innerType))}var qc=n=>(Object.defineProperty(I(n),xs,{value:1,enumerable:!0}),n),xr=(n,e,t)=>n===void 0||Number.isInteger(n)&&n>=e&&n<=t,ys=(n,e)=>n===void 0||Array.isArray(n)&&n.length<=e&&n.every(t=>typeof t=="string"&&vs.test(t)),Hc=["every","interval","on","until","count","except","continues"],ws=n=>We(n)&&Object.keys(n).every(e=>Hc.includes(e))&&xr(n.interval,1,99)&&xr(n.count,1,1e3)&&ys(n.until===void 0?void 0:[n.until],1)&&ys(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))),ty=()=>qc(gr().check(it(n=>n===null||ws(n),"how a date repeats, or null"))),An=n=>Date.UTC(+n.slice(0,4),+n.slice(5,7)-1,+n.slice(8,10)),ks=n=>new Date(n).toISOString().slice(0,10),wr=(n,e)=>ks(An(n)+e*864e5),bs=(n,e,t)=>{let r=new Date(Date.UTC(n,e+1,0)).getUTCDate();return ks(Date.UTC(n,e,t<0||t>r?r:t))},We=n=>typeof n=="object"&&n!==null&&Wc.includes(n.every);function Be(n,e,t={}){let r=n.slice(0,10),o=n.slice(10),i=[];if(!vs.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=>bs(c,f+w,b)):[bs(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 Ss(n,e,t){if(!We(e)||typeof n!="string")return n;let r=Be(n,e,{from:t,limit:1})[0];if(r)return r;let o=e.until||e.count?Be(n,e):[];return o[o.length-1]??n}function Yc(n,e,t){let r=n[e],o=n[Ve(e)];return typeof r=="string"&&We(o)?Ss(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,sy=(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 Jc(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,os(a.fields,{id:D().check(kn(1)),kind:ss(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 $s(n){return n.addedNodes.length===0&&n.removedNodes.length===0&&n.changedNodes.length===0&&n.addedEdges.length===0&&n.removedEdges.length===0}function Xc(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=Xc(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 Qc(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"}},K=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",B=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 K(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 K(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 K(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`,Qc(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 K(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 eu(n,e){return{...e,name:n}}var ht=class extends Error{constructor(e){super(e),this.name="RuleBudgetError"}};function Rs(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(...Rs(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(...Rs(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 Sy(n){Rr=n}function nu(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 tu(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 V=n=>n.kind==="system"&&n.onBehalfOf===void 0,ve=(n,e)=>n.roles==="*"||(e.roles??[]).some(t=>n.roles.includes(t));function _s(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(V(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":`${_s(h)} can`);return{ok:!1,refusal:{mutation:t,...r===void 0?{}:{kind:r},wouldNeed:h,message:As(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":`${_s(p)} can`;return{ok:!1,refusal:{mutation:t,...r===void 0?{}:{kind:r},wouldNeed:p,message:As(n,[t],r,c,s)}}}function As(n,e,t,r,o){let i=[...new Set(e.flatMap(a=>Os(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 Os(n,e,t){return[...new Set(Es(n,e,t).flatMap(r=>r.describe||[]))]}var Es=(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=Es(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 Q=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,Ps(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,Ps(t,e.after));return}case"add-edge":this.setEdge(e.edge,!0);return;case"remove-edge":this.setEdge(e.edge,!1);return}}};function Ps(n,e){let t={...n};for(let[r,o]of Object.entries(e))He(o)?delete t[r]:t[r]=o;return t}var ru=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=ru(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 zs(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=ou(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 iu(n,r,d,l,a,p,u?.judge??t,e)}function ou(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 iu(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 Ny(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 Ns="A change you cannot see",Is={kind:"system",id:"withheld",name:"Someone"};function Xe(n){return n.withheld===!0}var jn=Oe,js=(n,e)=>Object.entries(n).some(([t,r])=>t!=="id"&&t!=="kind"&&j(r,e));function Ts(n){if(typeof n!="function")return n;let e=n,t=r=>e(r.id)&&!js(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 Ds(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 su(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 js(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=Ts(e),o=i=>r.shows(i)&&Fs(r,i);return{id:n.id,seq:n.seq,batch:n.batch,author:Is,intent:Ns,mutation:null,primitives:t??n.primitives.flatMap(i=>{let s=su(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=Ts(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 zs(n,r.timeline,o).map(({op:i,primitives:s,faithful:a})=>(!i.withheld&&a?Ms(i,r,s):void 0)??Pr(i,r,s))}return n.map(o=>(!o.withheld&&!Ds(o,r.shows)?Ms(o,r):void 0)??Pr(o,r))}function Ms(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)&&Fs(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 Fs(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 Zs(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 au(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 K?{reason:"missing",sentence:e}:n instanceof Q?{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 Yy(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 Cs=["connect","disconnect"],Gs=n=>n.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`),Ks=(n,e,t)=>`${n}-${e}-${Gs(t)}`;function Jy(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}-${Gs(i)}`)return{act:t[1],kind:r,relation:i}}}}var Ls=n=>`${/^[aeiou]/i.test(n)?"an":"a"} ${n}`;function Us(n,e){let t=e.also?` (${e.also})`:"";return{title:`${e.one?`${n==="connect"?"Set":"Clear"} the ${e.to}`:`${n==="connect"?"Link":"Unlink"} ${Ls(e.to)}`}${t}`,fromTheOtherEnd:`${n==="connect"?"Link":"Unlink"} ${Ls(e.from)}${t}`}}var du=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?du(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=B.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)))cu(i,a);return i}toJSON(){return[...this.ops]}};function cu(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 Vs=n=>n?.[Pn]===!0,uu=(n,e)=>Vs(("graph"in n?n.graph:n).getNode(e));function Bs(n,e,t){let r=n.tryDefinition(e);return t===void 0?r?.tidying:r?.edges?.[t]?.tidying}var Ws=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 qs(n,e){let t=lu(n);return[e,...e.map(r=>[r])].map(r=>t.get(Ws(r))).find(Boolean)}function lu(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(Ws(a),o)}return r}function Hs(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(Vs(u))return s(`change \u201C${F(n.tryDefinition(u.kind),u)}\u201D`,"a person said to leave it alone");if(!i)continue;let p=Bs(n,u.kind);if(p==="never")return s(`change ${ee(n,u.kind)} on its own`,"the app says they are never tidied");if(d&&p==="no-links")return s(`link or unlink ${ee(n,u.kind)} on its own`,"the app says they are never linked automatically")}if(d&&i&&l[0]&&Bs(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 fu(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},pu={plots:0,stage:1,tag:2,ties:2,lines:3,tieLabels:4,occupants:6,seatMarks:7,zoom:8,card:10,opened:11},hu={under:0,raised:1,over:2},Nr=n=>`--graview-layer-${n}`,gu=n=>`var(${Nr(n)}, ${mt[n]})`;function mu(){return Object.keys(mt).map(n=>` ${Nr(n)}: ${mt[n]};`).join(`
|
|
4
|
-
`)}function yu(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 Ys(){return`sub_${(globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`).replace(/-/g,"").slice(0,20)}`}function Js(n){return{...n,id:n.id??Ys(),at:n.at??new Date().toISOString()}}function bu(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=Js(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 Qs=(n,e)=>`${n}\0${e}`,Xs=new WeakMap;function vu(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(Qs(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 xu(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 wu(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=xu(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=Qs(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 ku(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=Xs.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&&ku(o,i),r>o.base&&(o.read=o.read.slice(r-o.base),o.base=r))}else o=void 0;o||Xs.set(n,o=vu(r));for(let i=o.end;i<t;i++)wu(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 Su(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 $u(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 Ru(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&&Ru(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=Su(r,r>0?_u(n,r)?.creators:void 0));for(let i=o.end;i<t;i++)$u(o,e[i-r]);return o.records}function _u(n,e){let t=[...n.epochs?.()??[]].reverse().find(r=>r.horizon);return t?.seq===e?t:void 0}function ea(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||V(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 V(e)?Tr:n.modules?.disabledKinds??Tr}function rn(n,e){return V(e)?!1:(n.policy?.sees?.length??0)>0||bt(n,e).size>0}function oa(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 Au={out:()=>[],in:()=>[]};function Ou(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},Au,i,we(n))}return t.set(s,d),d}}function Eu(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 ia(n,e).lens}var Dr=()=>({judged:new Map,shown:new Map});function ia(n,e){let t=Eu(n.schema),r=V(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(Ou(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 na=new WeakMap,ta=new WeakMap,Pu=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 zu(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=sa(e),a=na.get(n.log);a||na.set(n.log,a=new Map);let d=a.get(s),{pinWith:l}=ia(n,e),u=ta.get(n.log);u||ta.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=Pu(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 Mu(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 ra=new WeakMap;function sa(n){let e=V(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},Nu=Symbol.for("@graview/core:seat");function Zn(n,e){if(!rn(n,e))return n;let t=sa(e),r=ra.get(n);r||ra.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=()=>zu(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 Nu: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=>Mu(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:aa(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:aa(n,t)}}function aa(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 da(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=da(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=da(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 Iu(n,e){return e.includes("*")?"record":e.map(t=>U(n.tryDefinition(t),t)).join(" or ")}function ca(n,e,t,r){let o=Iu(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 la=Symbol.for("@graview/core:node-ref"),ua=n=>typeof n=="object"&&n!==null?n[la]:void 0;function ke(n="*"){return ju(D().check(kn(1)),n)}function ju(n,e){let t=Object.freeze(e==="*"?["*"]:[...e]),r=o=>{o&&Object.defineProperty(o,la,{value:t,enumerable:!0,configurable:!0})};return r(n),r(I(n)),n}function Kr(n){if(typeof n!="object"||n===null)return;let e=ua(n);if(e)return e;let t=I(n),r=ua(t);if(r)return r;let o=t?.innerType;return o?Kr(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=Kr(o);i&&t.push({name:r,kinds:i,optional:o.safeParse(void 0).success})}return t}function Ur(n){if(n===null||typeof n!="object")return JSON.stringify(n)??"null";if(Array.isArray(n))return`[${n.map(r=>r===void 0?"null":Ur(r)).join(",")}]`;let e=n;return`{${Object.keys(e).filter(r=>e[r]!==void 0).sort().map(r=>`${JSON.stringify(r)}:${Ur(e[r])}`).join(",")}}`}var fa=(n,e)=>n.key<e.key?-1:n.key>e.key?1:0;function Tu(n){let e=n.nodes.map(r=>({key:r.id,value:r})).sort(fa),t=n.edges.map(r=>({key:z(r),value:{kind:r.kind,from:r.from,to:r.to}})).sort(fa);return Ur({nodes:e.map(r=>r.value),edges:t.map(r=>r.value)})}function on(n){return`sha256:${ha(Tu(n))}`}function pa(n,e,t,r={}){let o=r.validate??!0,i=r.base??{nodes:[],edges:[]},s=on(t),a=B.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=B.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=B.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 Du=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]),Fu=new TextEncoder,Zu=new Uint32Array(64),Lu=new Uint32Array(8),xt=Array.from({length:256},(n,e)=>e.toString(16).padStart(2,"0"));function ha(n){let e=Fu.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=Lu;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=Zu;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+Du[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 Cu(n,e){return{...e,name:n}}function Br(n){if(!n.creates?.length)return!1;let e=n.input.shape;return e===void 0||!("id"in e)}function ba(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 Br(n)?[...r,"id"]:r}var ga=(n,e)=>`does not take ${n.map(t=>`"${t}"`).join(", ")}; it takes ${e.length>0?e.map(t=>`"${t}"`).join(", "):"nothing"}`;function Gu(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 Ku(n){let{id:e,...t}=n;return t}function ma(n){return n.normalize("NFKD").replace(/\p{M}/gu,"").toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,"")||"item"}function va(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 Uu(n,e){if(e.limited&&e.me===void 0)return ya(n,e.held);let t=e.limited?`${n}.${va(e.me)}`:n,r=t;for(let o=2;e.seen(r);o++)r=`${t}-${o}`;return e.held(r)?ya(t,e.held):r}function ya(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=Br(e)?Gu(t):void 0,i=o===void 0?t:Ku(t),s=ba(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:ga(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:ga(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 K(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 K(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 K(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}:${ma(m)}`:ma(m),b=Uu(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 xa=Symbol.for("@graview/core:amount"),Db=(n,e)=>(Object.defineProperty(I(n),xa,{value:e,enumerable:!0}),n);function Vr(n,e=!0){let t=I(n);return t?.[xa]??(e&&t?.innerType?Vr(t.innerType):void 0)}function wa(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 ka(n,{format:e,unit:t,currency:r,locale:o}){let i=/^[A-Z]{3}$/.test(t??"");return e==="money"||!e&&i?wa(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 Bu=Symbol.for("@graview/core:typed-field");function Wr(n){let e=I(n);return e?e[Bu]??Wr(e.innerType):void 0}var Vu=/^[("'“‘]*(?:(?:[a-z]{1,3}\.){2,}|(?:dr|mr|mrs|ms|mx|st|mt|vs|jr|sr|prof|no|fig|approx)\.)$/i;function Wu(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]==="."&&Vu.test(r))&&!(t.split(" ").length<3&&e.index+1<n.length))return t}}function Sa(n,e=140){let t=n.replace(/^[#>\s]+|\*\*|`|\](\([^)\s]*\))?|\[/gm,"").replace(/\s+/g," ").trim(),r=Wu(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 qu(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 Hu=[["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 $a(n,e){let t=new Set(e.map(o=>o.name)),r=[];for(let o of n.definitions){let i=qu(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 Hu){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:Ue({id:ke([s]),on:D().check(Sn(/^\d{4}-\d{2}-\d{2}$/,"a day, like 2026-10-21")),...i.length>1?{field:X(is(i))}:{},...u==="skip"?{}:Object.fromEntries(d.map(h=>[h,X(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 Q(`${l(y??{id:v.id})} does not repeat`,"refused");let w=Be(A,m,{from:k,to:k})[0];if(!w)throw new Q(`${l(y)} does not fall on ${ge(k)}`,"refused");let x=String(y.id),b=Object.fromEntries(d.filter(H=>v[H]!==void 0).map(H=>[H,v[H]])),$=Ve(S),R=H=>{let $o=Object.fromEntries(Object.entries({...y,...H,...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 Q(`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?Be(A,{...m,except:[]},{to:_}).length:0,{count:E,except:L,...ko}=m,So=H=>L?.some(H)?{except:L.filter(H)}:{};h.patchNode(x,{[$]:{...ko,until:_,...So(H=>H<k),...E?{count:P}:{}}}),R({[S]:w,[$]:{...ko,...So(H=>H>=k),...E?{count:E-P}:{},continues:x}})}})}}return r}function Ra(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=>U(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:U(d,l),one:h,also:v?C(c).toLowerCase():void 0},S=y.from;for(let A of Cs){let m=Ks(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}=Us(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:Ue({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 Q(`there is no record "${E}"`,"invalid");let P=b.graph.out(R,c).some(E=>E.id===_);if(A==="disconnect"){if(!P)throw new Q(`${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 _a(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 Aa(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 Oa(n,e,t){let r=n.tryDefinition(t);if(!r)return[];let o=Aa(n,e).get(t);return _a(r).filter(i=>!o?.has(i))}var Ea=n=>`edit-${n}`;function Pa(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 za(n,e){let t=new Set(e.map(o=>o.name)),r=[];for(let o of n.definitions){let i=o.kind,s=Ea(i);if(t.has(s))continue;let a=Oa(n,e,i);if(a.length===0)continue;let d=o.fields.shape,l=U(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:Ue({id:ke([i]),...Object.fromEntries(a.map(p=>[p,X(Xu(d[p]))]))}),describe:(p,c)=>Yu(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 Q(`Nothing to change \u2014 give at least one of ${u.join(", ")} a value.`,"invalid");p.patchNode(c.id,f)}})}return r}function Yu(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 ${Ju(u)}`:"stop repeating":Ma(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 Ju=n=>`every ${(n.interval??1)>1?`${n.interval} ${n.every}s`:n.every}`;function Ma(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=>Ma(n,e,t,i)).join(", ");if(typeof r=="boolean")return r?"yes":"no";if(typeof r=="number"){let i=Vr(e);return i?ka(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${Sa(r,60)}\u201D`}function Xu(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 Na(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"?Pa(n,e,t.derived.kind):Na(e,t.derived.kind)}function Qu(n,e){let t=new Set(e.map(o=>o.name)),r=[];for(let o of n.definitions){let i=o.kind,s=U(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:Ke(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[...za(n,e),...Qu(n,e),...$a(n,e),...Ra(n,e)]}var el=n=>({$made:n}),kt=n=>typeof n=="object"&&n!==null&&Object.keys(n).join()==="$made"&&Number.isInteger(n.$made)&&n.$made>=0,nl=(n,e)=>Object.fromEntries(Object.entries(n.args??{}).map(([t,r])=>[t,Array.isArray(r)?r.map(e):e(r)])),Ia=n=>Object.values(n.args??{}).some(e=>kt(e)||Array.isArray(e)&&e.some(kt)),ja=(n,e,t)=>({...n,args:nl(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 tl=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>tl||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 Ta(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:Ke({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 K(a,`Cannot remove missing edge ${a}`)}t.removeEdge({kind:o,from:i,to:s}),t.addEdge({kind:o,from:i,to:s})}}}var Da=(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 Fa=["kind-unknown","node-shape","edge-dangling","edge-disallowed","rule-error","rule-budget"];function Za(n,e){let t=ft(n,e);return t&&[...t.fields].filter(Boolean)}function rl(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 ol=n=>`${n.kind}:${n.from}->${n.to}`,$t=(n,e)=>n<e?-1:n>e?1:0;function La(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=Za(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=rl(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;Za(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=ol(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=B.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)=>Fa.indexOf(c.code)-Fa.indexOf(f.code)||$t(c.id,f.id)||$t(c.detail??"",f.detail??""))}var Kn=()=>globalThis.__graviewWatch;function Ca(n){Kn()?.store?.(n)}function Rt(n){n!==void 0&&Kn()?.learn?.({ids:[n],words:[]})}function Ga(n,e){Kn()?.refused?.({...n,...e===void 0?{}:{author:e}})}function Xr(n,e){let t=Kn();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 il(n,e){n instanceof oe&&Xr(n,e)}function sl(n,e,t){Kn()?.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 W(e,t)}var Qr=15*6e4;function Ka(n=Date.now(),e){let t=new Date(n).getTime(),r=Hn(e),o=W(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(;W(r,s)===o;)s+=Qr;for(;W(r,s-Qr)!==o;)s-=Qr;return s-t}function al(n,e){let t,r=()=>{t=setTimeout(()=>{let o=n.tick(new Date);r(),e?.(o)},Ka(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"},Ua={kind:"system"},Va={kind:"system",id:"modules",name:"Modules"},Ba=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 dl=new Set(["remove","archive","unarchive","merge"]),cl={has:()=>!0},Wa=n=>new Set(n.filter(e=>e.shape).map(e=>e.name));function qa(n,e,t){let r=Wa(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,cl),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 ul(){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:W(this.timeZone),on:W(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=ul();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=Ta(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?B.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=B.from(e.schema,e.snapshot??{nodes:[],edges:[]},o);e.past||(this.countPastTheLog(),Ca(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=>ee(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:Va,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=Da(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 qa(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&&dl.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&&Ga(e,t),new Pe(e)}get words(){return{act:e=>this.mutations.get(e)?.title,noun:e=>U(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=Ua){let r=this.modules.disabledKinds;if(r.size===0||!V(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:oa(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 K(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"}:ca(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&&!V(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=Ua){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(!(!V(t)&&!Fn(this,t)(i)))return this.graph.getNode(i)?.kind}today(){return this.pinned()??(this.ticked&&this.ticked.on===W(this.timeZone)?this.ticked.day:void 0)??(this.timeZone?W(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=ms(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=W(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:B.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=B.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(Ia);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]?ja(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=Hs(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 La({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=Zs(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(Ba),...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&&!V(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&&!V(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:Ba(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=qs(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&&$s(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 pa(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=ea(this.log,r);return Object.keys(s).length>0?{...i,creators:s}:i}compact(e){return this.stillNow(),this.log.compact(e)}};var ll=n=>`lens:${n}`,fl={hidden:[],removed:[],may:{views:!1,lenses:!1}};function pl(n,e,t){return n.name!==void 0&&e.may.views?"view":n.declared&&e.may.lenses&&t.lens?"lens":null}var Ha=["full","summary","glyph"],io=(n,e)=>n.as===e.as&&(n.over??[n.kind]).includes(e.kind),hl=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 Un(n,e){return`/${pe(n.tryDefinition(e)?.plural??`${e}s`)}`}function gl(n,e,t){return`${Un(n,e)}/${encodeURIComponent(t)}`}function ml(n,e){return`/places/${encodeURIComponent(n)}${e?`?of=${encodeURIComponent(e)}`:""}`}function Ya(n,e){return e.some(t=>t.as===n.as&&!io(n,t))}function yl(n,e,t){return Ya(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 bl(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 Ha)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 vl=["day","week","month","year","decade"];function Ja(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,...vl.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 xl(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 Bn={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"]}},wl=20,Qa=Object.keys(Bn),kl=(n,e,t,r=Bn[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.`}),ed=n=>Object.hasOwn(Bn,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 Xa(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 Sl(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(!ed(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 ${Qa.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=Bn[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}`,...kl(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=Ja(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?Xa(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=Xa(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 $l=6;function Rl(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 _l(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(Un(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 nd="overview",Al=`/places/${nd}`;function Ol(n){let e=n?.scene?.trim();return e||"Scene"}function El(n){let e=n?.pages?.trim();return e||"Pages"}function Pl(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 zl(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=>Un(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 Ml(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 Nl(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 td=Symbol.for("@graview/core:app-link"),Il=n=>(Object.defineProperty(I(n),td,{value:1,enumerable:!0}),n);function rd(n){let e=I(n);return!!e&&(e[td]===1||rd(e.innerType))}var Ex=()=>Il(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 jl(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=>Tl(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 Tl(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 Dl=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;static of(e){let t=new n;return t.note(e),t}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)??-1)<t.seq&&this.revs.set(s,t.seq)}}of(e,t){return this.revs.get(Pt(e,t))??-1}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 Fl(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 Zl=/^#([0-9a-f]{3,8})$/i,Ll=/(rgba?|hsla?)\(([^)]+)\)/gi;function Cl(n){let e=Zl.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 Gl(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:{...id(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{...id(n,e,t),a:1}}function id(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(Ll)){let r=Gl(t[0]);r&&e.push(r)}for(let t of n.matchAll(/#[0-9a-fA-F]{3,8}\b/g)){let r=Cl(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 od(n){return .2126*fo(n.r)+.7152*fo(n.g)+.0722*fo(n.b)}function ln(n,e){let[t,r]=[od(n),od(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})`,sd={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"?sd:Mt),l=go(un(a.panel)[0]??Mt,d),u=Vl(i,[l,d],s,4.5);u?Math.abs(u.l-i.l)>Bl&&(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(sd,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,Kl(c,l,s==="dark"?.55:.42,3)),...n.warn?.[s]?{warn:n.warn[s]}:{}};let h=un(t[s].warn)[0];h&&Ul(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 Kl(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 Ul(n,e){let t=Math.abs(n-e)%360;return t>180?360-t:t}var Bl=.3;function Vl(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 Wl(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}),ql="-0.025em",Hl=Object.freeze({minWidth:140,clearSpace:.5,microMax:24,regularMin:32,microBelow:28});var ad={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},dd={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:ad,light:dd};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 Yl(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 Jl(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 Kx=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 ud(n){return/^\s*(<\?xml[^>]*>\s*)?(<!--[\s\S]*?-->\s*)*(<!DOCTYPE svg[^>]*>\s*)?<svg[\s>/]/i.test(n)}var ld="http://www.w3.org/2000/svg",Xl=["http://www.w3.org/1999/xhtml","http://www.w3.org/1998/Math/MathML",ld],Ql=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(" ")),ef=new Set(["title","desc"]),Vn="it embeds a page or media",nf={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)"},tf={amp:"&",lt:"<",gt:">",quot:'"',apos:"'"};function rf(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=tf[o.toLowerCase()];return i===void 0&&(e=!0),i??""});return e?null:t}function of(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 sf(n,e,t){let r=rf(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===ld?null:"it changes what its elements are (another xmlns)";if(e.startsWith("xmlns:"))return Xl.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 of(r)?null:o==="style"?"its style loads something outside itself":"it loads or links to something outside itself"}var cd=/^\s+([A-Za-z_][A-Za-z0-9_.:-]*)\s*=\s*(?:"([^"<]*)"|'([^'<]*)')/;function fd(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=nf[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(!Ql.has(d))return`it has a <${d}> element, which a picture does not need`;let u=e[e.length-1];if(u&&ef.has(u))return`it has an element inside a <${u}>, which the page reads as HTML`;let p=a[0].length;for(let f=cd.exec(o.slice(p));f;f=cd.exec(o.slice(p))){let g=sf(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 pd(n){if(n){if(!ud(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 fd(n)===null?`data:image/svg+xml,${encodeURIComponent(n.trim())}`:void 0}}var It;function af(){if(It===void 0)try{It=new RegExp("^\\p{RGI_Emoji}$","v")}catch{It=null}return It}function df(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(df).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=af();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 hd(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 cf(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(hd(t))}`:void 0}return pd(e)}function uf(n){if(n?.logo)return;let e=xo(n?.favicon);return e!==void 0&&vo(e)===null?e:void 0}var gd={"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},lf=["serif","sans-serif","monospace","cursive","fantasy","system-ui","math","emoji","-apple-system","BlinkMacSystemFont"],md=["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 ff=n=>new Set(n.map(e=>e.toLowerCase()));function pf(n){return ff([...lf,...md]).has(n.toLowerCase())||n.toLowerCase().startsWith("ui-")}function hf(n){return gd[n]??n}function Yx(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 gf(n,e,t){if(t.rows===0)return;let r=ee(n,e.rows).toLowerCase(),o=ee(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=U(n.tryDefinition(e.rows),e.rows);return i?`No ${a} is linked to another yet: ${s}.`:`No ${a} is linked to ${Ze(U(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 mf(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 yf(n,e){return{...n.connectors.all,...n.connectors.byEdge[e]??{}}}function bf(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 vf(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 xf(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 wf(n){return`${n.kind}:${n.id??""}:${n.session??""}`}function kf(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 Sf(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,Hi as b,Yi as c,hc as d,hr as e,kn as f,Sn as g,D as h,Tg as i,Dg as j,$n as k,Fg as l,Zg as m,Lg as n,gr as o,Cg as p,Ke as q,Ue as r,Gg as s,Kg as t,Ug as u,is as v,ss as w,X as x,it as y,Bg as z,Vg as A,I as B,Mc as C,Dt as D,Fe as E,qn as F,$f as G,W as H,yd as I,bd as J,_o as K,Yn as L,vd as M,ge as N,Ft as O,Ao as P,Zt as Q,kd as R,Sd as S,se as T,$d as U,Rd as V,_d as W,Ad as X,Od as Y,yn as Z,Po as _,Pd as $,Ct as aa,F as ba,zd as ca,C as da,Md as ea,ee as fa,Nd as ga,Id as ha,Xn as ia,Ze as ja,U as ka,Nc as la,st as ma,br as na,as as oa,ds as pa,cs as qa,Ic as ra,Rn as sa,ls as ta,Wm as ua,dt as va,rd as wa,Ex as xa,Zc as ya,Cc as za,hs as Aa,Gc as Ba,Jm as Ca,_n as Da,Kc as Ea,Bc as Fa,Xm as Ga,Qm as Ha,Vc as Ia,ms as Ja,jl as Ka,ct as La,Wc as Ma,Ve as Na,On as Oa,ut as Pa,ty as Qa,We as Ra,Be as Sa,Ss as Ta,Yc as Ua,En as Va,Ae as Wa,sy as Xa,kr as Ya,lt as Za,Jc as _a,z as $a,Mn as ab,N as bb,B as cb,eu as db,ht as eb,Sy as fb,nu as gb,tu as hb,Dl as ib,T as jb,V as kb,ve as lb,xe as mb,Ny as nb,Ns as ob,Xe as pb,j as qb,Qe as rb,Pe as sb,Q as tb,au as ub,oe as vb,Cu as wb,Br as xb,ba as yb,sn as zb,Db as Ab,Vr as Bb,wa as Cb,ka as Db,Wr as Eb,ke as Fb,Kr as Gb,Ln as Hb,Wu as Ib,Sa as Jb,Yy as Kb,Jy as Lb,qr as Mb,Hr as Nb,Aa as Ob,za as Pb,el as Qb,kt as Rb,ze as Sb,uo as Tb,Fl as Ub,an as Vb,Mr as Wb,Vs as Xb,uu as Yb,fu as Zb,Wl as _b,mo as $b,ql as ac,fn as bc,je as cc,Yl as dc,Jl as ec,ud as fc,fd as gc,pd as hc,cf as ic,uf as jc,pf as kc,hf as lc,Yx as mc,xl as nc,gf as oc,mf as pc,yf as qc,bf as rc,pu as sc,hu as tc,gu as uc,mu as vc,nn as wc,Dn as xc,fe as yc,yt as zc,rn as Ac,Fn as Bc,Fr as Cc,Zn as Dc,yu as Ec,bu as Fc,vf as Gc,il as Hc,sl as Ic,ha as Jc,al as Kc,qa as Lc,dn as Mc,ro as Nc,ll as Oc,fl as Pc,pl as Qc,Ha as Rc,io as Sc,hl as Tc,pe as Uc,Un as Vc,gl as Wc,ml as Xc,Ya as Yc,yl as Zc,bl as _c,Ja as $c,Bn as ad,wl as bd,Qa as cd,ed as dd,Sl as ed,$l as fd,Rl as gd,_l as hd,nd as id,Al as jd,Ol as kd,El as ld,Pl as md,zl as nd,co as od,Ml as pd,Nl as qd,xf as rd,wf as sd,kf as td,Sf as ud};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b as on,c as an,d as te,e as sn,f as re,h as Oe,i as dn,n as cn,q as oe}from"./chunk.TNESS3LQ.js";import{$ as Ke,$a as Je,A as pe,Aa as Be,Ab as Xe,B as me,Ca as _e,E as ke,Fb as en,G as Ce,Ga as be,H as Ze,Ha as ve,Na as He,Qa as Ue,_a as We,b as De,bc as nn,c as $e,d as Te,da as Ve,db as xe,e as K,eb as Ye,g as de,h as P,i as Ge,j as Me,ja as Ie,k as ce,l as Pe,lc as tn,m as Le,mc as rn,o as Fe,p as le,q as he,tb as U,ua as we,v as Ne,wb as Qe,x as ne,xa as qe,y as fe}from"./chunk.V5MYKNL7.js";function $n(e,a){let n=e.brand??{},t=n.accent?rn(n.accent):void 0;t&&!t.ok&&a.push(dn("brand","brand.accent",`that accent cannot make a readable brand, so the app keeps Graview's colors: ${t.why}`,"pick a color further from orange-red, or a darker one"));let s=typeof n.logo=="string"?{src:n.logo}:n.logo,w=n.name??e.name,h=n.typography?Object.fromEntries(Object.entries(n.typography).filter(([,O])=>typeof O=="string"&&!/url\(|@import|[;{}<>\\]/i.test(O)).map(([O,L])=>[O,tn(L)])):void 0;return{name:w,schemes:t?.ok?t.schemes:nn,...n.currency?{currency:n.currency}:{},...n.locale?{locale:n.locale}:{},...n.timeZone?{timeZone:n.timeZone}:{},...s?{logo:s.src,logoAlt:s.alt??w}:{},...n.favicon?{favicon:n.favicon}:{},...e.description?{subtitle:e.description}:{},...h?{typography:h}:{},...n.shape?{shape:n.shape}:{},...n.accents?{accents:n.accents}:{},...n.scheme?{scheme:n.scheme}:{}}}function ln(e){let{currency:a,locale:n,timeZone:t}=e.brand??{};return{...a?{currency:a}:{},...n?{locale:n}:{},...t?{timeZone:t}:{}}}var wn=Symbol.for("@graview/core:typed-field"),fn=(e,a)=>(/^(phone|place|duration)$/.test(a)&&(me(e)[wn]=a),e),pn=/^(?=(?:\D*\d){3})\+?[\d ()./-]+(?: *(?:ext\.?|x|#) *\d+)?$/i;function mn(e){let a=P().check(K(300),fe(t=>Be(t,e)!==void 0,`a record of ${e.kinds.join(" or ")} in ${e.address}, as "<kind>:<id>"`)),n=e.cardinality==="one"?a:le(a).check(K(200));return _e(e.description?n.check(pe(e.description)):n,e)}var vn=new WeakMap;function un(e,a){vn.set(e,a)}var xn=[{where:"settings[]",was:"honoured",now:"honored",since:"0.1.16"},{where:"pages",was:"overview",now:"scene",since:"0.1.17"}],V=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);function yn(e,a=xn){if(!V(e))return{document:e,respelled:[]};let n=[],t=e;for(let s of a)t=Re(t,s.where.split("."),s,"",n);return{document:t,respelled:n}}function Re(e,a,n,t,s){if(a.length===0){if(!V(e)||!Object.hasOwn(e,n.was))return e;s.push(`${t}${n.was}`);let{[n.was]:$,...N}=e;return Object.hasOwn(e,n.now)?N:{...N,[n.now]:$}}if(!V(e))return e;let[w,...h]=a,O=w.endsWith("[]"),L=O?w.slice(0,-2):w,F=e[L],B=F;if(!O)B=Re(F,h,n,`${t}${L}.`,s);else if(Array.isArray(F)){let $=F.map((N,W)=>Re(N,h,n,`${t}${L}.${W}.`,s));B=$.some((N,W)=>N!==F[W])?$:F}return B===F?e:{...e,[L]:B}}var gn="graview-compiled@1";function On(e,a){return e.find(([n,t])=>n!==q&&"ref"in t&&(t.ref==="*"||t.ref.includes(a)))?.[0]}var q="id",ue=e=>typeof e=="string"&&/^\$[A-Za-z][A-Za-z0-9]*$/.test(e)?e.slice(1):void 0;function hn(e){let a=Object.entries(e.fields),n=t=>["name","title","label"].find(s=>t.some(([w])=>w===s))??t[0]?.[0];return n(a.filter(([,t])=>t.required&&(t.type==="string"||t.type==="text")))??n(a.filter(([,t])=>t.type==="string"))}function kn(e,a,n){let t;switch(e.type){case"string":case"place":t=P().check(K(500));break;case"phone":t=P().check(K(40),de(pn,"a phone number"));break;case"text":t=P().check(K(2e4)),e.format&&(me(t)[Symbol.for("@graview/core:markdown")]=1);break;case"number":case"integer":case"duration":{let w=e.min??(e.type==="duration"?0:void 0),h=[...e.type==="number"?[]:[Pe()],...w===void 0?[]:[$e(w)],...e.max===void 0?[]:[De(e.max)],...e.step===void 0?[]:[Te(e.step)]];t=h.length>0?ce().check(...h):ce();break}case"boolean":t=Le();break;case"date":t=P().check(de(ke,"a date like 2026-10-02"));break;case"datetime":t=P().check(fe(Ce,"a date and time like 2026-10-02T14:30:00Z"));break;case"enum":t=Ne(e.options);break;case"list":t=le(e.of==="number"?ce():e.of==="date"?P().check(de(ke)):e.of==="image"||e.of==="video"||e.of==="file"?we(e.of):P().check(K(500))).check(K(200));break;case"image":case"video":case"file":t=we(e.type);break;case"app-link":t=qe();break;case"url":t=Me();break;case"email":t=Ge();break}let s=e.type==="number"||e.type==="integer";return fn(t,s&&e.format==="duration"?"duration":e.type),e.description&&(t=t.check(pe(e.description))),s&&(e.format==="money"||e.format==="percent"||!e.format&&e.unit)&&Xe(t,{...n,...e.format?{format:e.format}:{},...e.unit?{unit:e.unit}:{}}),a?ne(t):t}var ie=e=>{throw new U(`there is no record "${e}"`,"invalid")},Rn=(e,a)=>"field"in e?kn(e.field,e.optional,a):"ref"in e?en(e.ref):ne(Fe()),zn=new WeakMap;var ze=(e,a)=>V(a)&&Object.keys(e??{}).length===Object.keys(a).length&&Object.keys(e??{}).every(n=>Object.hasOwn(a,n));function tt(e,a={}){let n=V(e)?e.format:void 0;if(n!==gn)return{ok:!1,findings:[Oe("compiled-format","format",n===void 0?"this is not a compiled Graview app":`this compiled app is ${JSON.stringify(n)}, and this build reads ${gn}`,"compile the document instead")]};let t=e,s=yn(t.document).document,w=s===t.document?t:{...t,document:s},h=V(s)&&typeof s.name=="string"&&V(s.kinds)&&ze(s.kinds,w.kinds)&&ze(s.acts,w.acts)&&ze(s.rules,w.rules)&&Array.isArray(w.edges)&&Array.isArray(w.findings),O={ok:!1,findings:[Oe("compiled-shape","","this compiled app's parts do not match its document","compile the document instead")]};if(!h)return O;try{return An(w,a)}catch{return O}}function An(e,a={}){let{document:n}=e,t=n.brand?.timeZone,s=a.today??(()=>Ze(t)),w=new Map(e.edges.map(([y,r])=>[y,r])),h=new Map;for(let[y,r]of Object.entries(n.kinds)){let z=e.kinds[y]?.computed,R=ve(r.edges);h.set(y,{fields:new Set([...Object.keys(r.fields),...R.keys()]),edges:new Map(Object.entries(be(r.edges)).map(([j,T])=>[j,T.cardinality??"many"])),...z?{computed:new Map(z)}:{},...R.size>0?{linked:R}:{}})}e.facts&&h.set(an,{computed:new Map(e.facts)});let O=ln(n),L=new Map,F=Object.entries(n.kinds).map(([y,r])=>{let z={};for(let[o,m]of Object.entries(r.fields))z[o]=kn(m,!m.required,O),m.repeats&&(z[He(o)]=ne(Ue()));for(let[o,m]of ve(r.edges))z[o]=ne(mn(m));let{label:R,describe:j,durations:T}=e.kinds[y]??{},G=Object.entries(r.computed??{}).map(([o,m])=>[o,typeof m=="string"?{expr:m}:m]),J=Object.hasOwn(r.fields,"label")&&!r.fields.label.label&&!/\{\s*label\b/.test(r.label??`{${hn(r)??""}}`),_=Object.fromEntries([...J?[["label","Label"]]:[],...Object.entries(r.fields).filter(([,o])=>o.label).map(([o,m])=>[o,m.label]),...G.filter(([,o])=>o.label).map(([o,m])=>[o,m.label])]),A=Object.keys(_).length>0,l=Object.fromEntries(Object.entries(r.fields).filter(([,o])=>o.default!==void 0).map(([o,m])=>[o,m.default]));L.set(y,l);let D=Object.fromEntries(Object.entries(be(r.edges)).map(([o,{renamedFrom:m,...I}])=>[o,I])),S=o=>r[o]?{[o]:r[o]}:{};return Ke(y,{fields:he(z),edges:D,...S("plural"),...S("noun"),...S("description"),...R?{label:o=>oe(R,{node:o,kinds:h,today:s(),money:O})||o.id}:{},...j?{describe:o=>oe(j,{node:o,kinds:h,today:s(),money:O})}:{},...S("lifecycle"),...S("figure"),...S("fieldRoles"),...S("people"),archives:r.archives,...r.tidying?{tidying:r.tidying}:{},...G.length>0?{computed:Object.fromEntries(G.map(([o,m])=>[o,T?.includes(o)?{...m,as:"duration"}:r.computed[o]]))}:{},...A||r.glance||r.page?{display:{...A?{labels:_}:{},...r.glance?{glance:[...r.glance]}:{},...r.page?{page:r.page}:{}}}:{},...Object.keys(l).length>0?{defaults:l}:{}})}),B=We(F,n.computed);function $(y){return B.tryDefinition(y.kind)?.label?.(y)??y.id}let N=y=>({id:"",kind:y,...L.get(y)}),W=[];for(let[y,r]of Object.entries(n.acts??{})){let z=e.acts[y],{title:R,effects:j,guard:T,refusal:G,destructive:J,idempotent:_,creates:A,connects:l,severs:D,writes:S,writesOther:o,sets:m}=z,I=new Map(z.args),ae={};for(let[d,v]of I)ae[d]=Rn(v,O);let k=[r.on??[]].flat(),C=new Map(z.exprs),M=j.find(d=>"create"in d),Y=(d,v,f,b=null)=>{if(V(d)&&"expr"in d)return re(C.get(d.expr),{graph:f,subject:b,kinds:h,bindings:v,today:s()});let g=ue(d);return g===void 0?typeof d=="string"&&d.startsWith("$$")?d.slice(1):d:g==="now"?new Date().toISOString():g==="today"?s():v[g]},Ee=(d,v)=>{if(!M)return"";let f=n.kinds[M.create].fields,b=N(M.create),g=[];for(let[x,ee]of Object.entries(M.set??{})){try{b[x]=Y(ee,d,v)??b[x]}catch{}let Q=ue(ee);Q&&d[Q]!==void 0&&g.push(x)}let Z=$(b).trim(),H=g.filter(x=>b[x]!==!1&&f[x].type!=="text"&&!(/[^]{41}/.test(b[x])||/ .*[.!?]$/.test(b[x])&&!/[ .][A-Z]\w{0,3}\.$/.test(b[x]))&&$({...b,[x]:void 0}).trim()===Z).map(x=>b[x]===!0?f[x].label??Ve(x):cn(b[x],f[x].format,s(),[],O));return Z&&H.length>0?`${Z} (${H.join(", ")})`:Z};W.push(Qe(y,{input:he(ae),title:R,...r.description?{description:r.description}:{},...r.fromTheOtherEnd?{fromTheOtherEnd:r.fromTheOtherEnd}:{},...I.has(q)?{subject:{kinds:k.length>0?k:"*",arg:q}}:{},...J?{destructive:!0}:{},..._?{idempotent:!0}:{},...A.length>0?{creates:A}:{},...l.length>0?{connects:l}:{},...D.length>0?{severs:D}:{},writes:S,...Object.keys(o).length>0?{writesOther:o}:{},...Object.keys(m).length>0?{sets:m}:{},describe:(d,v)=>{let f=typeof d[q]=="string"?v.getNode(d[q]):void 0,b=f?$(f):Ee(d,v);return b?`${R}: ${b}`:R},apply(d,v){let f=d.graph,b=typeof v[q]=="string"?v[q]:void 0,g=b?f.getNode(b):void 0;if(b&&!g&&ie(b),g&&k.length>0&&!k.includes(g.kind))throw new U(`"${R}" acts on ${k.join(" or ")}, not on ${Ie(g.kind)}`,"invalid");let Z={};for(let[i,c]of Object.entries(v))c!==void 0&&(Z[i]=c);if(T&&g){let i;try{i=re(T,{graph:f,subject:g,kinds:h,bindings:Z,today:s()})}catch(c){throw c instanceof te?new U(`"${R}" could not be judged: ${c.sentence}`):c}if(i!==!0)throw new U(G?oe(G,{node:g,kinds:h,graph:f,bindings:Z,today:s(),money:O}):`"${R}" is not allowed for ${$(g)} right now`)}let H=new Map,x=i=>f.has(i)||[...H.values()].includes(i),ee=new Set,Q=i=>{let c=Je(i);ee.has(c)||(ee.add(c),d.removeEdge(i))},X=(i,c)=>{let p=ue(i);if(p==="subject")return b;if(p==="me"){let u=d.me;if(u&&n.kinds[f.getNode(u)?.kind]?.people)return u;throw new U(`"${R}" is done as you, and you have no record here`)}if(H.has(p))return H.get(p);try{return Y(i,Z,f,c??g??null)}catch(u){throw u instanceof te?new U(`"${R}" could not work out a value: ${u.sentence}`):u}};for(let i of j)if("create"in i){let c=n.kinds[i.create],p=N(i.create);for(let[ge,se]of Object.entries(i.set??{})){let je=X(se,void 0);je!==void 0&&(p[ge]=je)}let u=hn(c),E=d.freshId(String((u&&p[u])??i.create),i.create);d.addNode({...p,id:E}),i.as&&H.set(i.as,E)}else if("connect"in i||"sever"in i){let c="connect"in i?i.connect:i.sever,p=String(X(i.from,void 0)??""),u=String(X(i.to,void 0)??"");if(x(p)||ie(p),x(u)||ie(u),"connect"in i){if(w.get(c)?.cardinality==="one")for(let E of f.out(p,c))E.id!==u&&Q({kind:c,from:p,to:E.id});f.out(p,c).some(E=>E.id===u)||d.addEdge({kind:c,from:p,to:u})}else Q({kind:c,from:p,to:u})}else if("set"in i){let c=String(X(i.target??"$subject",void 0)??""),p=f.getNode(c);!p&&!x(c)&&ie(c);let u={};for(let[E,ge]of Object.entries(i.set)){let se=X(ge,p);se!==void 0&&(u[E]=se)}Object.keys(u).length>0&&d.patchNode(c,u)}else if("remove"in i){let c=String(X(i.remove,void 0)??"");f.has(c)||ie(c),d.removeNode(c)}else if("replace"in i&&g){let c=v.to;for(let p of i.replace){let u=w.get(p)?.from.includes(g.kind)??!0;for(let E of u?f.out(g.id,p):f.in(g.id,p))p===i.keep&&E.id===c||Q(u?{kind:p,from:g.id,to:E.id}:{kind:p,from:E.id,to:g.id})}}}}))}let Ae=[];for(let[y,r]of Object.entries(n.rules??{})){let{title:z,require:R,when:j,says:T}=e.rules[y],G=r.repairs??[],J=(A,l,D=s(),S)=>{let o=[],m={graph:A,subject:l,kinds:h,today:D,...S?{linked:S}:{},onUnread:k=>o.push(k)},I;try{if(j&&re(j,m)!==!0)return[];if(I=re(R,m)===!0,!I&&o.length>0)throw new te(`it reads ${on(o[0])}`,0)}catch(k){throw k instanceof sn?new Ye(k.sentence):k instanceof te?new Error(k.sentence):k}if(I)return[];let ae=G.flatMap(k=>{let C=n.acts?.[k.act],M={},Y=l&&C?.on&&C.fromTheOtherEnd&&![C.on].flat().includes(l.kind)?On(e.acts[k.act].args,l.kind):void 0;Y?M[Y]=l.id:l&&(C?.on||/^(edit|remove|archive|unarchive|merge|skip|detach|split)-/.test(k.act))&&(M[q]=l.id);for(let[v,f]of Object.entries(k.args??{}))M[v]=ue(f)==="subject"?l?.id:f;let d=(C?e.acts[k.act].args:[]).filter(([v,f])=>f.required&&M[v]===void 0).map(([v])=>v);return[{mutation:k.act,label:k.label??(Y?C.fromTheOtherEnd:C?.title)??k.act.replace(/-/g," "),args:M,...d.length>0?{missing:d}:{}}]});return[{invariant:y,...l?{subjectId:l.id}:{},label:z,message:T?oe(T,{node:l,kinds:h,graph:A,today:D,money:O}):l?`${$(l)}: ${z}`:z,nodeIds:l?[l.id]:[],repairs:ae}]},_={label:z,shape:{over:r.over,require:R,when:j,says:T,declared:n.kinds,money:O,kinds:h,today:s},judgment:{require:r.require,...r.when?{when:r.when}:{},...r.says?{says:r.says}:{}},...r.description?{description:r.description}:{},...G.length>0?{repairs:G.map(A=>A.act)}:{}};Ae.push(r.over==="graph"?xe(y,{scope:"graph",..._,evaluate:({graph:A,today:l,context:D})=>J(A,null,l,D?.linked)}):xe(y,{scope:{kind:r.over},..._,evaluate:({graph:A,subject:l,today:D,context:S})=>J(A,l,D,S?.linked)}))}let Se=n.policy&&{...n.policy,...n.roles?{roles:n.roles}:{}},ye={name:n.name,schema:B,mutations:W,invariants:Ae,...Se?{policy:Se}:{},...e.brand?{brand:e.brand}:{},...n.modules?{modules:n.modules}:{},...n.lenses?{lenses:n.lenses}:{},...n.pages?{pages:n.pages}:{},...n.settings?{settings:n.settings}:{},...n.connections?{connections:n.connections}:{},...e.viewSpecs?{viewSpecs:e.viewSpecs}:{},...e.home?{home:e.home}:{},version:n.version??1};return un(ye,n),zn.set(ye,e),{ok:!0,app:ye,document:n,findings:e.findings,sights:n.policy?.sees,kinds:h}}export{yn as a,$n as b,gn as c,q as d,ue as e,hn as f,tt as g,An as h};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var __graviewPreload=(base,files)=>{if(typeof document>"u")return;const asked=globalThis.__graviewPreloaded??=new Set;for(const file of files){const href=new URL(file,base).href;if(asked.has(href))continue;asked.add(href);const link=document.createElement("link");link.rel="modulepreload";link.href=href;document.head.append(link)}};import{K as M,M as H,sb as N}from"./chunk.V5MYKNL7.js";var z=()=>(__graviewPreload(import.meta.url,["./chunk.D25XEVKO.js","./chunk.PXQVXBNG.js","./chunk.V5MYKNL7.js","./chunk.AJZBJBMO.js"]),import("./chunk.TIH2PDFH.js"));function F(e,l,y){let d=new Map;for(let u of y?.kinds??[])for(let a of e.nodesOfKind(u))l.has(a.id)||d.set(a.id,a);let o=new Set([...l,...d.keys()]),p=new Set(y?.edges??[]),k=new Set;if(p.size>0&&l.size>0){for(let u of l)for(let a of e.outEdges(u))p.has(a.kind)&&d.has(a.to)&&k.add(a.to);for(let u of d.keys())e.outEdges(u).some(a=>p.has(a.kind)&&l.has(a.to))&&k.add(u)}let b=new Map([...[...d].filter(([u])=>k.has(u)),...[...d].filter(([u])=>!k.has(u))]),h=[];if(p.size>0)for(let u of o)for(let a of e.outEdges(u))p.has(a.kind)&&o.has(a.to)&&h.push({kind:a.kind,from:a.from,to:a.to});return{nodes:[...b.values()],edges:h}}function L(e,l,y){let d=[];return()=>{let o=y();for(;d.length>0&&d[0]<=o-l;)d.shift();return d.length>=e?!1:(d.push(o),!0)}}function D(e={},l=Date.now){return{act:L(e.acts??30,e.actWindowMs??6e4,l),message:L(e.messages??120,e.messageWindowMs??1e3,l)}}var A=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);function K(e,l){let y=structuredClone(l),d=e.schema.tryDefinition(y.kind),o=y.label;return{...y,label:d?.label?d.label(y):typeof o=="string"&&o.length>0?o:y.id}}function J(e){let l=e.limiter??D(e.limits,e.now),y=e.limits?.maxHeight??4e3,d=`view:${e.view}`,o={applied:0,refused:0,dropped:0},p=()=>e.store.seenBy(e.principal),k=n=>K(e.store,n),b=()=>{if(e.props)return e.props();let n=p(),t=n.graph,r=e.input?.()??{},f=r.node?t.getNode(r.node.id):void 0,i=r.nodes?.flatMap(s=>{let m=t.getNode(s.id);return m?[m]:[]}),g=new Set([...f?[f.id]:[],...(i??[]).map(s=>s.id)]),c=[];for(let s of g)for(let m of t.outEdges(s))g.has(m.to)&&c.push({kind:m.kind,from:m.from,to:m.to});let w=F(t,g,e.reads),S=new Set(c.map(s=>`${s.kind} ${s.from} ${s.to}`));for(let s of w.edges)S.has(`${s.kind} ${s.from} ${s.to}`)||c.push(s);let P=w.nodes.length>0?[...i??[],...w.nodes]:i,x=s=>s?.filter(m=>t.has(m)),T=n.permittedMutations(e.principal).map(s=>({name:s.name,title:s.title??s.name,...s.description!==void 0?{description:s.description}:{},...s.subject?{subject:{kinds:s.subject.kinds,arg:s.subject.arg}}:{}}));return{view:e.view,...f?{node:k(f)}:{},...P?{nodes:P.map(k)}:{},edges:c,...r.label!==void 0?{label:r.label}:{},...r.fidelity!==void 0?{fidelity:r.fidelity}:{},...r.cardinality!==void 0?{cardinality:r.cardinality}:{},...r.mode!==void 0?{mode:r.mode}:{},...r.selected!==void 0?{selected:r.selected}:{},...r.implicated?{implicated:x(r.implicated)}:{},...r.flagged?{flagged:x(r.flagged)}:{},acts:T,...e.theme?{theme:e.theme()}:{},locale:M(),timeZone:H(),...e.placesShown?{places:e.placesShown().map(({as:s,title:m,kind:$})=>({as:s,title:m,kind:$}))}:{}}},h=!1,u=0,a=()=>{if(h)return;u+=1;let n=b();e.send({type:"props",props:e.hand?e.hand(n):n,push:u})},v=!1,E=e.store.subscribe(()=>{v||(v=!0,queueMicrotask(()=>{v=!1,a()}))}),G=(n,t)=>(o.refused+=1,{ok:!1,reason:n,message:t}),j=(n,t,r)=>R([{name:n,args:t}],r),R=(n,t,r)=>{if(!l.act())return G("rate-limited","Too many acts asked for at once; this one was not applied.");let f=[];for(let{name:i,args:g}of n){if(t){let c=t(i,g);if(!c.ok)return G(c.reason,c.message);i=c.name,g=c.args}if(!e.store.allMutations().some(c=>c.name===i))return G("unknown-act","There is no act by that name here.");f.push({name:i,args:g})}try{let i=e.store.applyAll(f,{author:e.principal,via:d,...r?{intent:r}:{}});return o.applied+=1,{ok:!0,intent:i.intent}}catch(i){return i instanceof N?G("refused",i.refusal.message):G("failed","The act could not be applied.")}},O=(n,t,r)=>{let f=Array.isArray(r);if(typeof t!="string"||(f?r.length===0||r.length>100||!r.every(A):!A(r)))return o.refused+=1,e.send({type:"answer",id:n,ok:!1,reason:"malformed",message:"An act is asked for by name, with its arguments as an object, or a list of 1 to 100 of them for several as one change."});let i=R((f?r:[r]).map(g=>({name:t,args:g})),e.judgeAct);e.send(i.ok?{type:"answer",id:n,ok:!0,intent:i.intent}:{type:"answer",id:n,ok:!1,reason:i.reason,message:i.message})};return{receive(n){if(!h){if(!l.message()){o.dropped+=1,e.onFlood?.();return}if(!A(n)||n.nonce!==e.nonce){o.dropped+=1;return}if(n.type==="act"&&(typeof n.id=="string"||typeof n.id=="number"))return O(n.id,n.name,n.args);if(n.type==="navigate"&&e.onArrive&&(typeof n.place=="string"||typeof n.to=="string")){let t={...n.where!==void 0?{where:n.where}:{},...n.section!==void 0?{section:n.section}:{}},r=typeof n.place=="string"?{place:n.place,...t}:{record:n.to,...t},f=e.onArrive;z().then(({judgeDestination:i,listsOf:g})=>{if(h)return;let c=new Set([...e.store.kindsKeptFrom(e.principal),...e.store.modules.disabledKinds]),w=i(r,{sees:S=>p().graph.has(S),places:e.placesShown?.()??[],lists:g(e.store.schema,c),schema:e.store.schema});w.ok?f(w.arrival):(o.dropped+=1,e.onLost?.(w.says))});return}if(n.type==="navigate"&&typeof n.place=="string"){e.places?.().includes(n.place)?e.onNavigatePlace?.(n.place):o.dropped+=1;return}if(n.type==="navigate"&&typeof n.to=="string"){p().graph.has(n.to)?e.onNavigate?.(n.to):o.dropped+=1;return}if(n.type==="render"&&Array.isArray(n.records)&&e.onRender){e.onRender(n.records);return}if(n.type==="style"&&typeof n.css=="string"&&e.onStyle){e.onStyle(n.css);return}if(n.type==="hears"&&Array.isArray(n.events)&&e.onHears){e.onHears(n.events.filter(t=>typeof t=="string").slice(0,20));return}if(n.type==="pushed"&&typeof n.push=="number"&&typeof n.ms=="number"&&e.onPushed){e.onPushed(n.push,n.ms);return}if(n.type==="size"&&typeof n.height=="number"&&Number.isFinite(n.height)){e.onSize?.(Math.max(0,Math.min(y,Math.round(n.height))));return}o.dropped+=1}},push:a,pressed(n){return h?{ok:!1,reason:"refused",message:"The view has gone."}:n.ok?j(n.name,n.args):(o.refused+=1,n)},change(n,t){return h?{ok:!1,reason:"refused",message:"The view has gone."}:R(n,void 0,t)},get stats(){return o},dispose(){h=!0,E()}}}export{F as a,D as b,K as c,J as d};
|