graview 0.1.35 → 0.1.36
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.3C4RJIJU.js → chunk.272ZJXQP.js} +1 -1
- package/dist/preview/{chunk.H243UV3Z.js → chunk.27TLAVRR.js} +1 -1
- package/dist/preview/{chunk.GF7LA4QG.js → chunk.2A2DLMT3.js} +1 -1
- package/dist/preview/{chunk.FBY5IUGU.js → chunk.2B4WVCVV.js} +1 -1
- package/dist/preview/{chunk.ZE4CTZQ3.js → chunk.3PT55HXT.js} +1 -1
- package/dist/preview/{chunk.DPP7ITTU.js → chunk.3SM2CHKF.js} +1 -1
- package/dist/preview/{chunk.VWHMYPLL.js → chunk.3ZIOAPI5.js} +1 -1
- package/dist/preview/{chunk.5B7NWF7C.js → chunk.42WJ6VJZ.js} +1 -1
- package/dist/preview/{chunk.RIW7SQH4.js → chunk.4B73P2WA.js} +1 -1
- package/dist/preview/{chunk.JMQ6YLQX.js → chunk.4GXXD4NG.js} +1 -1
- package/dist/preview/chunk.4Q56V7GS.js +1 -0
- package/dist/preview/{chunk.SBBNIYVB.js → chunk.4STIUIT6.js} +1 -1
- package/dist/preview/chunk.53IKY7UP.js +1 -0
- package/dist/preview/chunk.56BPXB6E.js +1 -0
- package/dist/preview/{chunk.LRRVBM4F.js → chunk.5PU3RWYY.js} +2 -2
- package/dist/preview/chunk.64MJ5FRL.js +1 -0
- package/dist/preview/{chunk.UWIYKGYK.js → chunk.6II4BONS.js} +1 -1
- package/dist/preview/{chunk.VMGWYCXU.js → chunk.6KMXLUOS.js} +1 -1
- package/dist/preview/{chunk.AINNENYD.js → chunk.6QDFBCV4.js} +2 -2
- package/dist/preview/{chunk.IHFNLKXV.js → chunk.6W7J76TK.js} +1 -1
- package/dist/preview/{chunk.5VB7DJTL.js → chunk.6ZZZBDEG.js} +1 -1
- package/dist/preview/{chunk.CHJZ7LST.js → chunk.7CO7S6QM.js} +1 -1
- package/dist/preview/chunk.7G3B5QPH.js +1 -0
- package/dist/preview/chunk.7TBSVQSH.js +1 -0
- package/dist/preview/{chunk.QVKKXMNK.js → chunk.7YQYWOZR.js} +1 -1
- package/dist/preview/{chunk.4K5QCJFH.js → chunk.AAZFVCSP.js} +1 -1
- package/dist/preview/{chunk.ZSW74NVJ.js → chunk.ACEYGWMO.js} +1 -1
- package/dist/preview/{chunk.TIBZZ2WY.js → chunk.ACXA55GW.js} +1 -1
- package/dist/preview/{chunk.Y5Z4ZDTO.js → chunk.BZ5VLPKB.js} +2 -2
- package/dist/preview/chunk.CE3NOADH.js +1 -0
- package/dist/preview/chunk.CNJENUPC.js +1 -0
- package/dist/preview/{chunk.DMNXYMLC.js → chunk.CRPT3ZT3.js} +1 -1
- package/dist/preview/{chunk.2OBIO5Y6.js → chunk.CUCNT7MG.js} +1 -1
- package/dist/preview/{chunk.6J7DR7XQ.js → chunk.D6RDTUX3.js} +1 -1
- package/dist/preview/{chunk.UHQD3NTK.js → chunk.DANDYIB5.js} +1 -1
- package/dist/preview/{chunk.OEDCAHII.js → chunk.DSP62QYK.js} +1 -1
- package/dist/preview/chunk.E77K6KBX.js +1 -0
- package/dist/preview/{chunk.HPD5ZDZH.js → chunk.EBLKEQ7O.js} +1 -1
- package/dist/preview/{chunk.EQWOQOFJ.js → chunk.EDSPYKR4.js} +1 -1
- package/dist/preview/chunk.EQIGKXIG.js +1 -0
- package/dist/preview/{chunk.ZHXX22AT.js → chunk.ER5ILWKY.js} +2 -2
- package/dist/preview/{chunk.KYH4QIVI.js → chunk.ET76FISZ.js} +1 -1
- package/dist/preview/{chunk.X7W27IRI.js → chunk.F5BCCGFK.js} +5 -5
- package/dist/preview/{chunk.OZ5KJLA2.js → chunk.FERBNBDE.js} +1 -1
- package/dist/preview/{chunk.FUQVNXLB.js → chunk.FQKH67BP.js} +1 -1
- package/dist/preview/{chunk.577PGFUT.js → chunk.FUR4IHWG.js} +1 -1
- package/dist/preview/chunk.FWBQVPMI.js +1 -0
- package/dist/preview/{chunk.3QXHII5W.js → chunk.GOCUBIRW.js} +1 -1
- package/dist/preview/{chunk.A3F7MFDR.js → chunk.GUDKPK42.js} +1 -1
- package/dist/preview/{chunk.QVUL2FSI.js → chunk.GXLAZGYT.js} +1 -1
- package/dist/preview/{chunk.Z7ZCR4LN.js → chunk.GZLYTPE7.js} +1 -1
- package/dist/preview/{chunk.EAM4NAQH.js → chunk.H4T56OXM.js} +1 -1
- package/dist/preview/{chunk.SECORXDP.js → chunk.HPX3F7XX.js} +1 -1
- package/dist/preview/{chunk.PJ2DF6C7.js → chunk.HZPTBPJY.js} +1 -1
- package/dist/preview/{chunk.PW7YH6JV.js → chunk.IB32NOV5.js} +1 -1
- package/dist/preview/{chunk.FSAHO3LV.js → chunk.IMRCAU4T.js} +1 -1
- package/dist/preview/{chunk.FX6GH57T.js → chunk.ITXIFDQ7.js} +1 -1
- package/dist/preview/{chunk.LWSTEZIP.js → chunk.J3TEJBI5.js} +1 -1
- package/dist/preview/{chunk.B2KITMSD.js → chunk.JLXQ6ZLI.js} +1 -1
- package/dist/preview/{chunk.ZZTDQKM2.js → chunk.JZMA2AV7.js} +1 -1
- package/dist/preview/{chunk.FIVLFXFB.js → chunk.K5NJTE3F.js} +1 -1
- package/dist/preview/{chunk.3P4IIXIT.js → chunk.KBJG5SI2.js} +1 -1
- package/dist/preview/{chunk.3H4NVUWV.js → chunk.KU6NIMQX.js} +1 -1
- package/dist/preview/{chunk.LAF6GTBN.js → chunk.LA7535VO.js} +1 -1
- package/dist/preview/{chunk.D4WQEBWV.js → chunk.LMVCWYYG.js} +1 -1
- package/dist/preview/{chunk.2YGQVI6T.js → chunk.LNNFNJKN.js} +1 -1
- package/dist/preview/{chunk.BL6VDLAW.js → chunk.M4FQ7SSM.js} +1 -1
- package/dist/preview/{chunk.BGW7XTMH.js → chunk.MXJS67W4.js} +1 -1
- package/dist/preview/{chunk.LIIC25G6.js → chunk.NJ62C2GU.js} +1 -1
- package/dist/preview/{chunk.VZHV25JE.js → chunk.NNCTJSD3.js} +1 -1
- package/dist/preview/{chunk.GO4QBFED.js → chunk.NWYOLGQ3.js} +1 -1
- package/dist/preview/{chunk.DNDHDDM6.js → chunk.O3OALXCI.js} +2 -2
- package/dist/preview/{chunk.JLMLKDVX.js → chunk.O6ROFVFD.js} +1 -1
- package/dist/preview/{chunk.KSXB4LDF.js → chunk.OF34OZ4V.js} +1 -1
- package/dist/preview/{chunk.GCVO6N26.js → chunk.OFJH7LDC.js} +1 -1
- package/dist/preview/{chunk.Q7TP4RFE.js → chunk.OH5BBE2B.js} +1 -1
- package/dist/preview/{chunk.PKKA6JWA.js → chunk.OREMUXB5.js} +1 -1
- package/dist/preview/{chunk.CDMV6L5I.js → chunk.OXZRGP53.js} +1 -1
- package/dist/preview/chunk.OZR5NI4J.js +1 -0
- package/dist/preview/{chunk.PPUAPAWR.js → chunk.P75TPZWT.js} +1 -1
- package/dist/preview/{chunk.QRMWFEEH.js → chunk.PWOVXARZ.js} +1 -1
- package/dist/preview/chunk.Q63RPNUS.js +1 -0
- package/dist/preview/{chunk.KWCML3BF.js → chunk.QDHUDLJB.js} +1 -1
- package/dist/preview/{chunk.4NZBMZC7.js → chunk.QEALNWWL.js} +3 -3
- package/dist/preview/{chunk.APNN6BKF.js → chunk.QLMUGC7R.js} +1 -1
- package/dist/preview/{chunk.DQ5HAB3N.js → chunk.QTITRX5Q.js} +1 -1
- package/dist/preview/{chunk.GMOTRAKJ.js → chunk.R45BF6JV.js} +1 -1
- package/dist/preview/{chunk.U5EJSTST.js → chunk.R7LRJS6B.js} +2 -2
- package/dist/preview/{chunk.2QQAOJET.js → chunk.RKHEZ6KZ.js} +1 -1
- package/dist/preview/{chunk.G2ZPQUXM.js → chunk.S6GJGTJE.js} +1 -1
- package/dist/preview/{chunk.MVN6H65Q.js → chunk.SG23JC6D.js} +1 -1
- package/dist/preview/chunk.SSRP5SBR.js +1 -0
- package/dist/preview/{chunk.FVPOSGNG.js → chunk.T2CN7UTZ.js} +2 -2
- package/dist/preview/{chunk.5FZQI2US.js → chunk.T47DLH5Z.js} +1 -1
- package/dist/preview/{chunk.RTB4MMF6.js → chunk.TGEF6TMM.js} +1 -1
- package/dist/preview/{chunk.JAPYJ53U.js → chunk.UJR3Y7MP.js} +1 -1
- package/dist/preview/{chunk.52QAIGCD.js → chunk.VHWUGSFW.js} +1 -1
- package/dist/preview/{chunk.6K2HASOH.js → chunk.W42P7NOL.js} +1 -1
- package/dist/preview/{chunk.SD33BD7A.js → chunk.WGI5G6NM.js} +1 -1
- package/dist/preview/{chunk.IX6RNGAT.js → chunk.WHTQHU3M.js} +1 -1
- package/dist/preview/{chunk.TWWFWHK3.js → chunk.WJ2TWU2I.js} +1 -1
- package/dist/preview/{chunk.GCGITEON.js → chunk.XBTZXWJX.js} +1 -1
- package/dist/preview/{chunk.747GGBPR.js → chunk.XRCGADKC.js} +1 -1
- package/dist/preview/{chunk.XSYBNUXF.js → chunk.Y3IJDWNS.js} +1 -1
- package/dist/preview/{chunk.5MCC54VM.js → chunk.YNE5QR7Q.js} +1 -1
- package/dist/preview/{chunk.5EAQDBBE.js → chunk.ZDNJK2SX.js} +1 -1
- package/dist/preview/{chunk.QU356VB2.js → chunk.ZEW2OOZ5.js} +1 -1
- package/dist/preview/chunk.ZNS3LYJU.js +1 -0
- package/dist/preview/{chunk.YT2CYCVT.js → chunk.ZSSOTIFL.js} +1 -1
- package/dist/preview/{chunk.DLT3EE4D.js → chunk.ZVMIHXVK.js} +1 -1
- package/dist/preview/{chunk.DUUARGPE.js → chunk.ZWZ5SEXT.js} +1 -1
- package/dist/preview/index.html +42 -42
- package/dist/preview/page.js +2 -2
- package/package.json +6 -6
- package/dist/preview/chunk.4J75WRDG.js +0 -1
- package/dist/preview/chunk.656N5BHG.js +0 -1
- package/dist/preview/chunk.6P7P2AW7.js +0 -1
- package/dist/preview/chunk.AEHPDVLQ.js +0 -1
- package/dist/preview/chunk.DTR5I4BI.js +0 -1
- package/dist/preview/chunk.FHXXYWL3.js +0 -1
- package/dist/preview/chunk.M5HADQPP.js +0 -1
- package/dist/preview/chunk.O36ZDLWC.js +0 -1
- package/dist/preview/chunk.PQPTYNW2.js +0 -1
- package/dist/preview/chunk.RHYA742Q.js +0 -1
- package/dist/preview/chunk.TPX6AVJL.js +0 -1
- package/dist/preview/chunk.U2PYW5MS.js +0 -1
- package/dist/preview/chunk.ZFWV4JAJ.js +0 -1
- package/dist/preview/chunk.ZKXK22AH.js +0 -1
- package/dist/preview/chunk.ZQNLC33L.js +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
var lo="en-US",an=/^\d{4}-\d{2}-\d{2}$/,_t=/^\d{4}(-\d\d){2}[T ]\d\d:\d\d(:[\d.]+)?(Z|[+-][\d:]+)?$/,Tl=n=>!Number.isNaN(Date.parse(n)),dn=()=>new Date().toISOString().slice(0,10),fo,po;function qa(n){fo=$t(n.reader),po=$t(n.app)}var ho=n=>fo??$t(n)??po??lo,sn=new Map;function $t(n){if(n&&!sn.has(n)){let e=!1;try{e=Intl.DateTimeFormat.supportedLocalesOf(n).length>0}catch{}sn.set(n,e)}return n&&sn.get(n)?n:void 0}function le(n,e,t,r){let o=`${t=ho(t)}${r?"#":"@"}${JSON.stringify(e)}`,i=sn.get(o);return i||sn.set(o,i=r?new Intl.NumberFormat(t,e):new Intl.DateTimeFormat(t,e)),i.format(n).replace(/ /g," ")}var we="UTC",Fn=n=>Date.UTC(+n.slice(0,4),+n.slice(5,7)-1,+n.slice(8,10));function fe(n,e){return an.test(n)?le(Fn(n),{year:"numeric",month:"short",day:"numeric",timeZone:we},e):n}function go(n,e,t,r=!1){if(!_t.test(n))return n;let o=/[Z+-][\d:]*$/.test(n.slice(16)),i=Date.parse(n.replace(" ","T")+(o?"":"Z"));return Number.isNaN(i)?n:le(i,{...e,hour:"numeric",minute:"2-digit",...o?r?{timeZoneName:"short"}:{}:{timeZone:we}},t)}var Rt=(n,e)=>go(n,{year:"numeric",month:"short",day:"numeric"},e,!0),Ha=(n,e)=>go(n,{},e);function re(n,e,t={maximumFractionDigits:2}){return Number.isFinite(n)?le(n,t,e,!0):String(n)}function Ja(n,e={},t){return an.test(n)?le(Fn(n),{weekday:e.weekday??"long",month:"short",day:"numeric",...e.year?{year:"numeric"}:{},timeZone:we},t):n}function Ya(n,e){return an.test(n)?le(Fn(n),{month:"short",day:"numeric",timeZone:we},e):n}function Xa(n,e={},t){if(!/^\d{4}-\d{2}/.test(n))return n;let r=e.year??!e.short;return le(Fn(`${n.slice(0,7)}-01`),{month:e.short?"short":"long",...r?{year:e.short?"2-digit":"numeric"}:{},timeZone:we},t)}var Qa=(n,e="short",t)=>le(Date.UTC(1970,0,4+n),{weekday:e,timeZone:we},t),ed=(n,e)=>le(Date.UTC(1970,0,1,0,Math.round(n)),{hour:"numeric",minute:"2-digit",timeZone:we},e),nd=/(?<![\w-])(\d{4}-\d{2}-\d{2})(?![\w-]|:)/g;function At(n,e){return n.includes("-")?n.replace(nd,t=>fe(t,e)):n}var cn=n=>n.charAt(0).toUpperCase()+n.slice(1),mo=(n,e="and")=>n.length>1?`${n.slice(0,-1).join(", ")} ${e} ${n.at(-1)}`:n[0]??"";function td(n,e){return{...e,kind:n,edges:e.edges??{}}}function Ot(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??dn()):!r.retired.includes(o)}function T(n,e){if(n?.label)return n.label(e);let t=e.label;return typeof t=="string"&&t.length>0?t:e.id}function rd(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 cn(e)}function od(n,e,t){let r=n.tryDefinition(e);return`${re(t)} ${t===1?Y(r,e):J(n,e).toLowerCase()}`}function J(n,e){return n.tryDefinition(e)?.plural??`${C(e).toLowerCase()}s`}function id(n,e){return cn(J(n,e))}function sd(n,e){let t=J(n,e);return`All ${/^[A-Z][a-z]/.test(t)?t.charAt(0).toLowerCase()+t.slice(1):t}`}function Zn(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 ad=/^(u[nt]i|use|usu|uti|ubiq|eu|ewe|one|once)/,dd=/^(hour|honest|hono[ur]r?|heir)/;function yo(n){let e=C(n).toLowerCase();return dd.test(e)?"an":ad.test(e)?"a":/^[aeiou]/.test(e)?"an":"a"}function ze(n){return`${yo(n)} ${C(n).toLowerCase()}`}function Y(n,e){return n?.noun??C(e).toLowerCase()}function zt(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 Mt(n,e="|"){return n.map(t=>Tt(t)).join(e)}function bo(n,e){return typeof e=="bigint"?e.toString():e}var Et=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 xo(n){return new Et(n)}function vo(n){return n==null}function Nt(n){let e=n.startsWith("^")?1:0,t=n.endsWith("$")?n.length-1:n.length;return n.slice(e,t)}function wo(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 Cn(n,e,t){Object.defineProperty(n,e,{value:t,writable:!0,enumerable:!0,configurable:!0})}function ko(n){let e=Object.getOwnPropertyDescriptor(n,"shape");return e?.get?e.get.raw:e?.value}function It(n){return ko(n._zod.def)??n._zod.def.shape}function So(n,e,t){Object.defineProperty(n,e,{get(){let r=t();return Cn(this,e,r),r},enumerable:!0,configurable:!0})}function $o(n,e,t){e in n?Cn(n,e,t):n[e]=t}function cd(n,e,t,r){let o=It(e);for(let i of t){let s=Object.getOwnPropertyDescriptor(o,i);s.enumerable&&(s.get?So(n,i,()=>{let a=e._zod.def.shape[i];return r?r(a,i):a}):$o(n,i,r?r(s.value,i):s.value))}}function ud(n,e){for(let t of Reflect.ownKeys(e)){let r=Object.getOwnPropertyDescriptor(e,t);r.enumerable&&(r.get?So(n,t,()=>e[t]):$o(n,t,r.value))}}function _o(...n){let e={};for(let t of n){let r=Object.getOwnPropertyDescriptors(t);Object.assign(e,r)}return Object.defineProperties({},e)}var jt="captureStackTrace"in Error?Error.captureStackTrace:(...n)=>{};function Ln(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Dt(n){if(Ln(n)===!1)return!1;let e=n.constructor;if(e===void 0||typeof e!="function")return!0;let t=e.prototype;return!(Ln(t)===!1||Object.prototype.hasOwnProperty.call(t,"isPrototypeOf")===!1)}var Ro=new Set(["string","number","symbol"]);function ln(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Me(n,e,t){let r=new n._zod.constr(e??n._zod.def);return(!e||t?.parent)&&(r._zod.parent=n),r}function P(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 Tt(n){return typeof n=="bigint"?n.toString()+"n":typeof n=="string"?`"${n}"`:`${n}`}function Ao(n){return Object.keys(n).filter(e=>n[e]._zod.optin!==void 0&&n[e]._zod.optout==="optional")}var Oo={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 Po(n,e){if(!Dt(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=It(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 Me(n,_o(n._zod.def,{shape:ld(n,e)}))}function ld(n,e){let t={};return cd(t,n,Reflect.ownKeys(It(n))),ud(t,e),t}function oe(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 Eo(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 he(n,e){return e.map(t=>{var r;return(r=t).path??(r.path=[]),t.path.unshift(n),t})}function un(n){return typeof n=="string"?n:n?.message}function Ft(n,e,t){var r;for(let o=e;o<n.length;o++)(r=n[o]).schema??(r.schema=t)}function ie(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:un(n.inst?._zod.def?.error?.(n))??un(i?.(n))??un(e?.error?.(n))??un(t.customError?.(n))??un(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 fd=/[\uD800-\uDBFF]/;function Zt(n){let e=n.length;if(!fd.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 Lt(n){return Array.isArray(n)?"array":typeof n=="string"?"string":"unknown"}function zo(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 fn(...n){let[e,t,r]=n;return typeof e=="string"?{message:e,code:"custom",input:t,inst:r}:{...e}}function Mo(n,e){for(let t in e){let r=Object.getOwnPropertyDescriptor(e,t);r.get?Object.defineProperty(n,t,{...r,enumerable:!1}):pd(n,t,r.value)}}function ke(n,e,t,r=!0){return Object.defineProperty(n,e,{configurable:!0,writable:!0,enumerable:r,value:t}),t}function Ct(n,e,t){return ke(n,e,t,!1)}function pd(n,e,t){Object.defineProperty(n,e,{configurable:!0,get(){return this==null?t:ke(this,e,t.bind(this))},set(r){ke(this,e,r)}})}function hd(n,e){let t=Object.getPrototypeOf(n);return e in t?void 0:t}var Pt,pe=!1,gd={configurable:!0,get(){pe=!0}};function X(n,e,t){let r=Object.getPrototypeOf(n._zod);if(e in r&&Pt!==n._zod){Pt=void 0;return}Pt=n._zod,Object.defineProperty(r,e,{configurable:!0,get(){Object.defineProperty(this,e,gd);let o=pe;pe=!1;try{let i=t(this);return pe?delete this[e]:Object.defineProperty(this,e,{configurable:!0,writable:!0,value:i}),pe=pe||o,i}catch(i){throw delete this[e],pe=pe||o,i}},set(o){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:o})}})}function No(n,e,t,r){let o=hd(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 Io;var Gt={value:void 0,enumerable:!1},jo="captureStackTrace"in Error?Error:null;function md(n){let e=jo;if(e){let t=e.stackTraceLimit;if(typeof t=="number"){try{e.stackTraceLimit=0}catch{return jo=null,new n}try{return new n}finally{e.stackTraceLimit=t}}}return new n}function A(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{Gt.value=new i(f);try{Object.defineProperty(c,"_zod",Gt)}finally{Gt.value=void 0}}if(c._zod.traits.add(n),e(c,f),a){let h=Object.getPrototypeOf(c),x=c._zod.constr.prototype,b=h;for(;b&&b!==x;)b=Object.getPrototypeOf(b);let k=b??h;a.has(k)||(a.add(k),Mo(k,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?md(u):this;d(f,c);let g=f._zod.deferred;if(g){for(let x of g)x();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 ae=class extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}};(Io=globalThis).__zod_globalConfig??(Io.__zod_globalConfig={});var Ne=globalThis.__zod_globalConfig;function V(n){return n&&Object.assign(Ne,n),Ne}function yd(){let n=this._zod;return n.message??(n.message=JSON.stringify(n.def,bo,2)),n.message}function bd(n){this._zod.message=n}var xd={get:yd,set:bd,enumerable:!0,configurable:!0},Ut={value:void 0,enumerable:!1},Do=new WeakSet([Object.prototype,Error.prototype]),To=(n,e)=>{n.name="$ZodError",Ut.value=e,Object.defineProperty(n,"issues",Ut),Ut.value=void 0,Object.defineProperty(n,"message",xd);let t=Object.getPrototypeOf(n);Do.has(t)||(Do.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})}}))},Kl=A("$ZodError",To),pn=A("$ZodError",To,void 0,{Parent:Error});var wd=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 ae;if(a.issues.length){let d=new(i?.Err??n)(a.issues.map(l=>ie(l,s,V())));throw jt(d,i?.callee??e),d}return a.value};return e},Kt=wd(pn),kd=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=>ie(l,s,V())));throw jt(d,i?.callee??e),d}return a.value};return e},Vt=kd(pn),Sd=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 ae;return i.issues.length?Fo(n,i.issues,o):{success:!0,data:i.value}},Wt=Sd(pn);function Fo(n,e,t){let r;return{success:!1,get error(){return r||(r=new n(e.map(o=>ie(o,t,V()))),e=void 0,t=void 0),r},set error(o){r=o,e=void 0,t=void 0}}}var $d=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?Fo(n,i.issues,o):{success:!0,data:i.value}},qt=$d(pn);var Zo=/^(?:[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 Lo=/^https?$/;var Co=/^[\s\S]{0,}$/;var Ht=/^-?\d+(?:\.\d+)?$/,Go=/^(?:true|false)$/i,Bo=/^null$/i;var W=A("$ZodCheck",(n,e)=>{var t;n._zod??(n._zod={}),n._zod.def=e,(t=n._zod).onattach??(t.onattach=[])});var Uo=n=>{let e=n.value;return!vo(e)&&e.length!==void 0},Gn={number:"number",bigint:"bigint",object:"date"},Ko=A("$ZodCheckLessThan",(n,e)=>{W.init(n,e);let t=Gn[typeof e.value];n._zod.check=r=>{(e.inclusive?r.value<=e.value:r.value<e.value)||r.issues.push({origin:Gn[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})}}),Vo=A("$ZodCheckGreaterThan",(n,e)=>{W.init(n,e);let t=Gn[typeof e.value];n._zod.check=r=>{(e.inclusive?r.value>=e.value:r.value>e.value)||r.issues.push({origin:Gn[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})}}),Wo=A("$ZodCheckMultipleOf",(n,e)=>{W.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):wo(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})}}),qo=A("$ZodCheckNumberFormat",(n,e)=>{W.init(n,e),e.format=e.format||"float64";let t=e.format?.includes("int"),r=t?"int":"number",[o,i]=Oo[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 Ho=A("$ZodCheckMaxLength",(n,e)=>{var t;W.init(n,e),(t=n._zod.def).when??(t.when=Uo),n._zod.check=r=>{let o=r.value,i=o.length;if((typeof o=="string"&&i>e.maximum?Zt(o):i)<=e.maximum)return;let a=Lt(o);r.issues.push({origin:a,code:"too_big",maximum:e.maximum,inclusive:!0,input:o,inst:n,continue:!e.abort})}}),Jo=A("$ZodCheckMinLength",(n,e)=>{var t;W.init(n,e),(t=n._zod.def).when??(t.when=Uo),n._zod.check=r=>{let o=r.value,i=o.length;if((typeof o=="string"&&i>=e.minimum&&i<e.minimum*2?Zt(o):i)>=e.minimum)return;let a=Lt(o);r.issues.push({origin:a,code:"too_small",minimum:e.minimum,inclusive:!0,input:o,inst:n,continue:!e.abort})}});var Yt=A("$ZodCheckStringFormat",(n,e)=>{var t,r;W.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=()=>{})}),Yo=A("$ZodCheckRegex",(n,e)=>{Yt.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 Qo={major:4,minor:6,patch:5};var Z=A("$ZodType",(n,e)=>{var t;n??(n={}),n._zod.def=e,n._zod.bag=n._zod.bag||{},n._zod.version=Qo;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=oe(a),p;for(let c of d){if(c._zod.def.when){if(Eo(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 ae;if(p||g instanceof Promise)p=(p??Promise.resolve()).then(async()=>{await g,a.issues.length!==f&&(Ft(a.issues,f,n),u||(u=oe(a,f)))});else{if(a.issues.length===f)continue;Ft(a.issues,f,n),u||(u=oe(a,f))}}return p?p.then(()=>a):a},s=(a,d,l)=>{if(oe(a))return a.aborted=!0,a;let u=i(d,o,l);if(u instanceof Promise){if(l.async===!1)throw new ae;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 ae;return l.then(u=>i(u,o,d))}return i(l,o,d)}}},{get"~standard"(){return Ct(this,"~standard",Rd(this))},set"~standard"(n){ke(this,"~standard",n)}}),ii=(n,e)=>n.issues.length?{issues:n.issues.map(t=>ie(t,e,V()))}:{value:n.value};async function _d(n,e){let t={async:!0};return ii(await n._zod.run({value:e,issues:[]},t),t)}function Rd(n){return{validate:e=>{let t={async:!1};try{let r=n._zod.run({value:e,issues:[]},t);if(!(r instanceof Promise))return ii(r,t)}catch{}return _d(n,e)},vendor:"zod",version:1}}var Xt=A("$ZodString",(n,e)=>{Z.init(n,e),n._zod.pattern=e.pattern??Co,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}}),Kn=A("$ZodStringFormat",(n,e)=>{Yt.init(n,e),Xt.init(n,e)});var si=A("$ZodEmail",(n,e)=>{e.pattern??(e.pattern=Zo),Kn.init(n,e)}),ai=1,Bn=2;function Ad(n){try{return typeof URL<"u"&&typeof URL.canParse=="function"?URL.canParse(n):(new URL(n),!0)}catch{return!1}}function Od(n,e){return!("normalize"in e)&&!("hostname"in e)&&!("protocol"in e)?Ad(n)||Bn:Pd(n,e)}function Pd(n,e){if(!e.normalize&&e.protocol?.source===Lo.source&&!/^https?:\/\//i.test(n))return ai;try{if(typeof URL<"u"){let t=URL;if(typeof t.parse=="function")return t.parse(n)??Bn}return new URL(n)}catch{return Bn}}var Ed=/[\t\n\r]/g;function ei(n){return n.replace(Ed,"")}function zd(n,e){return e.lastIndex=0,e.test(n.hostname)}function Md(n,e){return e.lastIndex=0,e.test(n.protocol.endsWith(":")?n.protocol.slice(0,-1):n.protocol)}var di=A("$ZodURL",(n,e)=>{Kn.init(n,e),n._zod.check=t=>{try{let r=t.value.trim(),o=Od(r,e);if(o===ai){t.issues.push({code:"invalid_format",format:"url",note:"Invalid URL format",input:t.value,inst:n,continue:!e.abort});return}if(o===Bn){t.issues.push({code:"invalid_format",format:"url",input:t.value,inst:n,continue:!e.abort});return}if(o===!0){t.value=ei(r);return}e.hostname&&!zd(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&&!Md(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:ei(r);return}catch{t.issues.push({code:"invalid_format",format:"url",input:t.value,inst:n,continue:!e.abort})}}});var Qt=A("$ZodNumber",(n,e)=>{Z.init(n,e),n._zod.pattern=Ht,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}}),ci=A("$ZodNumberFormat",(n,e)=>{qo.init(n,e),Qt.init(n,e)}),ui=A("$ZodBoolean",(n,e)=>{Z.init(n,e),n._zod.pattern=Go,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 li=A("$ZodNull",(n,e)=>{Z.init(n,e),n._zod.pattern=Bo,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 fi=A("$ZodUnknown",(n,e)=>{Z.init(n,e),n._zod.parse=t=>t}),pi=A("$ZodNever",(n,e)=>{Z.init(n,e),n._zod.parse=(t,r)=>(t.issues.push({expected:"never",code:"invalid_type",input:t.value,inst:n}),t)});function ni(n,e,t){n.issues.length&&e.issues.push(...he(t,n.issues)),e.value[t]=n.value}var hi=A("$ZodArray",(n,e)=>{Z.init(n,e);let t=Ne.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=>ni(p,r,d)));else if(ni(u,r,d),a&&u.issues.length!==0&&oe(u))break}return s.length?Promise.all(s).then(()=>r):r}});function Un(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(...he(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 Nd=[];function Id(n){let e=Object.keys(n.shape),t=Object.getOwnPropertySymbols(n.shape),r=t.length?t:Nd,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=Ao(n.shape);return{...n,allKeys:o,symbolKeys:r,keySet:new Set(e),numKeys:e.length,optionalKeys:new Set(i)}}function jd(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(oe(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(x=>Un(x,t,g,e,p,c))):Un(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 gi=A("$ZodObject",(n,e)=>{Z.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=xo(()=>Id(e));X(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)||Cn(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=Ln,s=e.catchall,a,d=Ne.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 x of a.allKeys){if(g&&l.issues.length!==h){if(oe(l,h))break;h=l.issues.length}if(x==="__proto__")continue;let b=f[x],k=b._zod.optin,R=b._zod.optout,m=b._zod.run({value:p[x],issues:[]},u);m instanceof Promise?c.push(m.then(w=>Un(w,l,x,p,k,R))):Un(m,l,x,p,k,R)}return s?jd(c,p,l,u,o.value,n,g===!0):c.length?Promise.all(c).then(()=>l):l}});function ti(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=>!oe(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=>ie(s,r,V())))}),e)}var mi=A("$ZodUnion",(n,e)=>{Z.init(n,e),X(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),X(n,"optout",r=>r.def.options.some(o=>o._zod.optout==="optional")?"optional":void 0),X(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)))}),X(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=>Nt(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=>ti(a,r,n,o)):ti(s,r,n,o)}});var yi=A("$ZodRecord",(n,e)=>{Z.init(n,e);let t=Ne.memoizer;t?.attach(n),n._zod.parse=(r,o)=>{let i=r.value;if(!Dt(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=>ie(g,o,V())),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(...he(u,g.issues)),r.value[c]=g.value})):(f.issues.length&&r.issues.push(...he(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"&&Ht.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=>ie(g,o,V())),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(...he(l,g.issues)),r.value[c]=g.value})):(f.issues.length&&r.issues.push(...he(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 bi=A("$ZodEnum",(n,e)=>{Z.init(n,e);let t=zt(e.entries),r=new Set(t);n._zod.values=r,X(n,"pattern",o=>{let i=zt(o.def.entries).filter(s=>Ro.has(typeof s));return new RegExp(i.length?`^(${i.map(s=>ln(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}}),xi=A("$ZodLiteral",(n,e)=>{Z.init(n,e);let t=new Set(e.values);n._zod.values=t,X(n,"pattern",r=>{let o=r.def.values;return new RegExp(o.length?`^(${o.map(i=>typeof i=="string"?ln(i):i?ln(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 ri(n,e){return n.value=e.issues.length?void 0:e.value,n}var vi=A("$ZodOptional",(n,e)=>{Z.init(n,e),X(n,"optin",t=>t.def.innerType._zod.optin==="defaulted"?"defaulted":"optional"),n._zod.optout="optional",X(n,"values",t=>{let r=t.def.innerType._zod.values;return r?new Set([...r,void 0]):void 0}),X(n,"pattern",t=>{let r=t.def.innerType._zod.pattern;return r?new RegExp(`^(${Nt(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=>ri(t,i)):ri(t,o)}return e.innerType._zod.run(t,r)}});var wi=A("$ZodCustom",(n,e)=>{W.init(n,e),Z.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=>oi(i,t,r,n));oi(o,t,r,n)}});function oi(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(fn(o))}}var Dd=()=>{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=zo(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 ${Tt(i.values[0])}`:`Invalid option: expected one of ${Mt(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":""}: ${Mt(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 ki(){return{localeError:Dd()}}var Si;var er=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 $i(){return new er}(Si=globalThis).__zod_globalRegistry??(Si.__zod_globalRegistry=$i());var Ie=globalThis.__zod_globalRegistry;function _i(n){return n.checks&&(n.checks=[...n.checks]),n}function Ri(n,e){return new n(_i({type:"string",...P(e)}))}function Ai(n,e){return new n({type:"string",format:"email",check:"string_format",abort:!1,...P(e)})}function Oi(n,e){return new n({type:"string",format:"url",check:"string_format",abort:!1,...P(e)})}function Pi(n,e){return new n(_i({type:"number",checks:[],...P(e)}))}function Ei(n,e){return new n({type:"number",check:"number_format",abort:!1,format:"safeint",...P(e)})}function zi(n,e){return new n({type:"boolean",...P(e)})}function Mi(n,e){return new n({type:"null",...P(e)})}function Ni(n){return new n({type:"unknown"})}function Ii(n,e){return new n({type:"never",...P(e)})}function ji(n,e){return new Ko({check:"less_than",...P(e),value:n,inclusive:!0})}function Di(n,e){return new Vo({check:"greater_than",...P(e),value:n,inclusive:!0})}function Ld(n,e){return new Wo({check:"multiple_of",...P(e),value:n})}function nr(n,e){return new Ho({check:"max_length",...P(e),maximum:n})}function hn(n,e){return new Jo({check:"min_length",...P(e),minimum:n})}function gn(n,e){return new Yo({check:"string_format",format:"regex",...P(e),pattern:n})}function Ti(n,e,t){return new n({type:"custom",check:"custom",fn:e,...P(t)})}function Fi(n,e){let t=Cd(r=>(r.addIssue=o=>{if(typeof o=="string")r.issues.push(fn(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(fn(i))}},n(r.value,r)),e);return t}function Cd(n,e){let t=new W({check:"custom",...P(e)});return t._zod.check=n,t}function Zi(n){let e=new W({check:"describe"});return e._zod.onattach=[t=>{let r=Ie.get(t)??{};Ie.add(t,{...r,description:n})}],e._zod.check=()=>{},e}var U=A("ZodMiniType",(n,e)=>{if(!n._zod)throw new Error("Uninitialized schema in ZodMiniType.");Z.init(n,e),n.def=e,n.type=e.type},{get with(){return this.check},set with(n){ke(this,"with",n)},parse(n,e){return Kt(this,n,e,{callee:this.parse})},parseAsync(n,e){return Vt(this,n,e,{callee:this.parseAsync})},safeParse(n,e){return Wt(this,n,e)},safeParseAsync(n,e){return qt(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 Me(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)}}),Ci=A("ZodMiniString",(n,e)=>{Xt.init(n,e),U.init(n,e)});function F(n){return Ri(Ci,n)}var Gi=A("ZodMiniStringFormat",(n,e)=>{Kn.init(n,e),Ci.init(n,e)}),Ud=A("ZodMiniEmail",(n,e)=>{si.init(n,e),Gi.init(n,e)});function Jh(n){return Ai(Ud,n)}var Kd=A("ZodMiniURL",(n,e)=>{di.init(n,e),Gi.init(n,e)});function Yh(n){return Oi(Kd,n)}var Bi=A("ZodMiniNumber",(n,e)=>{Qt.init(n,e),U.init(n,e)});function Vn(n){return Pi(Bi,n)}var Vd=A("ZodMiniNumberFormat",(n,e)=>{ci.init(n,e),Bi.init(n,e)});function Xh(n){return Ei(Vd,n)}var Wd=A("ZodMiniBoolean",(n,e)=>{ui.init(n,e),U.init(n,e)});function Qh(n){return zi(Wd,n)}var qd=A("ZodMiniNull",(n,e)=>{li.init(n,e),U.init(n,e)});function eg(n){return Mi(qd,n)}var Hd=A("ZodMiniUnknown",(n,e)=>{fi.init(n,e),U.init(n,e)});function tr(){return Ni(Hd)}var Jd=A("ZodMiniNever",(n,e)=>{pi.init(n,e),U.init(n,e)});function Yd(n){return Ii(Jd,n)}var Xd=A("ZodMiniArray",(n,e)=>{hi.init(n,e),U.init(n,e)});function ng(n,e){return new Xd({type:"array",element:n,...P(e)})}var rr=A("ZodMiniObject",(n,e)=>{gi.init(n,e),U.init(n,e),No(n,"shape",t=>t._zod.def.shape,!1)});function je(n,e){let t={type:"object",shape:n??{},...P(e)};return new rr(t)}function Wn(n,e){return new rr({type:"object",shape:n,catchall:Yd(),...P(e)})}function tg(n,e){return new rr({type:"object",shape:n,catchall:tr(),...P(e)})}function Ui(n,e){return Po(n,e)}var Qd=A("ZodMiniUnion",(n,e)=>{mi.init(n,e),U.init(n,e)});function rg(n,e){return new Qd({type:"union",options:n,...P(e)})}var Li=A("ZodMiniRecord",(n,e)=>{yi.init(n,e),U.init(n,e)});function og(n,e,t){return!e||!e._zod?new Li({type:"record",keyType:F(),valueType:n,...P(e)}):new Li({type:"record",keyType:n,valueType:e,...P(t)})}var ec=A("ZodMiniEnum",(n,e)=>{bi.init(n,e),U.init(n,e),n.options=[...n._zod.values]});function Ki(n,e){let t=Array.isArray(n)?Object.fromEntries(n.map(r=>[r,r])):n;return new ec({type:"enum",entries:t,...P(e)})}var nc=A("ZodMiniLiteral",(n,e)=>{xi.init(n,e),U.init(n,e)});function Vi(n,e){return new nc({type:"literal",values:Array.isArray(n)?n:[n],...P(e)})}var tc=A("ZodMiniOptional",(n,e)=>{vi.init(n,e),U.init(n,e)});function de(n){return new tc({type:"optional",innerType:n})}var rc=A("ZodMiniCustom",(n,e)=>{wi.init(n,e),U.init(n,e)});function qn(n,e={}){return Ti(rc,n,e)}function ig(n,e){return Fi(n,e)}var sg=Zi;V().localeError||V(ki());var M=n=>typeof n=="object"&&n!==null?n._zod?.def:void 0,oc=n=>{if(typeof n!="object"||n===null||!("_zod"in n))return;let e=Ie.get(n)?.description;return typeof e=="string"?e:void 0};var Wi=n=>typeof n=="string"&&n.length<2049&&/^(?![^/?#]*:|\/\/)(?!(?:.*\/)?\.\.?(?:[/?#]|$))(?!.*%2e)[^\\\s]+$/i.test(n),or=(n,e=1)=>e>0&&n===void 0||Number.isInteger(n)&&n>=e;function ir(n){let e=n??{};return Wi(e.href)&&typeof e.name=="string"&&/^.{1,255}$/s.test(e.name)&&/^[\w.+-]{1,60}\/[\w.+-]{1,60}$/.test(e.type)&&or(e.bytes,0)&&or(e.width)&&or(e.height)&&(e.caption===void 0||typeof e.caption=="string"&&e.caption.length<501)}var qi=n=>n.type.startsWith("image/"),mn=n=>(Array.isArray(n)?n:[n]).filter(ir),Hi=Symbol.for("@graview/core:file"),ic=(n,e)=>(Object.defineProperty(M(n),Hi,{value:e,enumerable:!0}),n);function Ji(n){let e=M(n);return e?.[Hi]??(e?.innerType?Ji(e.innerType):void 0)}var sc=()=>({href:F(),name:F(),type:F(),bytes:Vn(),width:de(Vn()),height:de(Vn()),caption:de(F())});function am(n){return ic(je(sc()).check(qn(e=>ir(e)&&(n==="file"||qi(e)),`${n==="image"?"an image":"a file"} the host stored, at a path on this host`)),n)}var Hn=/^(?:https?:\/\/[^\s<>"'`\\]+|@?[A-Za-z0-9][\w.~-]*(?:\/[\w.~-]+)*)$/,Jn=n=>typeof n=="string"&&n.length<501&&Hn.test(n);var Yi=n=>typeof n=="object"&&n!==null?n._zod?.def:void 0,ac=/^@(?:https?:\/\/[^\s<>"'`\\#?]+|[A-Za-z0-9][\w.~-]*(?:\/[\w.~-]+)*)\/[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;function Xi(n){if(typeof n!="string"||!n.startsWith("@")||!ac.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 Jn(o)?{address:o,kind:r}:void 0}var dc=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*:\S[^\n]{0,199}$/,cc=n=>`${n.kind}:${n.id}`;function Qi(n,e){if(typeof n!="string"||!dc.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 uc(n,e){return(Array.isArray(n)?n:n==null?[]:[n]).flatMap(r=>{let o=Qi(r,e);return o?[o]:[]})}var es=Symbol.for("@graview/core:linked"),lm=(n,e)=>(Object.defineProperty(Yi(n),es,{value:e,enumerable:!0}),n);function yn(n){let e=Yi(n);return e?e[es]??yn(e.innerType):void 0}function lc(n){let e=n?.fields?.shape??{},t=new Map;for(let[r,o]of Object.entries(e)){let i=yn(o);i&&t.set(r,i)}return t}function fc(n){if(n.to==="*"||n.to.length===0)return;let e=n.to.map(Xi);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 pc=n=>n.to!=="*"&&n.to.some(e=>typeof e=="string"&&e.startsWith("@"));function fm(n){return Object.fromEntries(Object.entries(n??{}).filter(([,e])=>!pc(e)))}function pm(n){let e=new Map;for(let[t,r]of Object.entries(n??{})){let o=fc(r);o&&e.set(t,o)}return e}var sr=new WeakMap;function hc(n,e){e?sr.set(n,e):sr.delete(n)}var ns=n=>sr.get(n);var Yn=["sun","mon","tue","wed","thu","fri","sat"],gc=["day","week","month","year"],Te=n=>`${n}Repeat`,xn=n=>n.endsWith("Repeat")&&n.length>6?n.slice(0,-6):void 0,os=/^\d{4}-\d{2}-\d{2}$/,is=Symbol.for("@graview/core:repeat");function Xn(n){let e=M(n);return!!e&&(e[is]===1||Xn(e.innerType))}var mc=n=>(Object.defineProperty(M(n),is,{value:1,enumerable:!0}),n),ar=(n,e,t)=>n===void 0||Number.isInteger(n)&&n>=e&&n<=t,ts=(n,e)=>n===void 0||Array.isArray(n)&&n.length<=e&&n.every(t=>typeof t=="string"&&os.test(t)),yc=["every","interval","on","until","count","except","continues"],ss=n=>Fe(n)&&Object.keys(n).every(e=>yc.includes(e))&&ar(n.interval,1,99)&&ar(n.count,1,1e3)&&ts(n.until===void 0?void 0:[n.until],1)&&ts(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"?Yn.includes(e):n.every==="month"&&e!==0&&ar(e,-1,31))),mm=()=>mc(tr().check(qn(n=>n===null||ss(n),"how a date repeats, or null"))),bn=n=>Date.UTC(+n.slice(0,4),+n.slice(5,7)-1,+n.slice(8,10)),as=n=>new Date(n).toISOString().slice(0,10),dr=(n,e)=>as(bn(n)+e*864e5),rs=(n,e,t)=>{let r=new Date(Date.UTC(n,e+1,0)).getUTCDate();return as(Date.UTC(n,e,t<0||t>r?r:t))},Fe=n=>typeof n=="object"&&n!==null&&gc.includes(n.every);function De(n,e,t={}){let r=n.slice(0,10),o=n.slice(10),i=[];if(!os.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=dr(r,-new Date(bn(r)).getUTCDay()),x=(e.on?.length?e.on:[a==="week"?Yn[new Date(bn(r)).getUTCDay()]:g]).map(w=>typeof w=="string"?Yn.indexOf(w):w),b=a==="day"?1:a==="week"?7:0,k=(+d.slice(0,4)-c)*12+(+d.slice(5,7)-1-f),R=e.count?0:Math.max(0,Math.floor((b?(bn(d)-bn(b===7?h:r))/864e5/b:a==="month"?k:k/12)/s)-1),m=0;for(let w=0;w<5e4&&i.length<u;w++,R++){let y=R*s,S=a==="day"?[dr(r,y)]:a==="week"?x.map(v=>dr(h,y*7+v)):a==="month"?x.map(v=>rs(c,f+y,v)):[rs(c+y,f,g)];for(let v of[...new Set(S)].sort())if(!(v<r)&&(l&&v>l||e.count&&m>=e.count||(m++,v>=d&&!p.has(v)&&i.push(v+o),i.length>=u)))return i}return i}function ds(n,e,t){if(!Fe(e)||typeof n!="string")return n;let r=De(n,e,{from:t,limit:1})[0];if(r)return r;let o=e.until||e.count?De(n,e):[];return o[o.length-1]??n}function bc(n,e,t){let r=n[e],o=n[Te(e)];return typeof r=="string"&&Fe(o)?ds(r,o,t):r}function vn(n,e){if(n.onBehalfOf){let{onBehalfOf:i,...s}=n;return`${vn(s,e)}, for ${vn(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 T(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 Ze="$archived",Se=n=>n?.[Ze]===!0,vm=(n,e=!1)=>e==="all"||Se(n)===e,cr=n=>n===!0||n==="true"?!0:n==="all"?"all":!1,wn="$leftAlone",Qn=new Set([Ze,wn]);var ee="\0graview:unset",Le=n=>n===void 0||n===ee;function kn(n){if(n.op!=="patch-node")return n;let e=t=>Object.fromEntries(Object.entries(t).map(([r,o])=>[r,o===void 0?ee:o]));return{...n,before:e(n.before),after:e(n.after)}}function Sn(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 $e(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 Q=class extends Error{constructor(t,r){super(r?`${t}
|
|
2
|
-
\u2192 ${r}`:t);this.hint=r;this.name="SchemaError"}};function
|
|
3
|
-
${r}`:t);this.hint=r;this.name="GraphError"}},L=class extends E{constructor(t,r){super(r);this.id=t;this.name="MissingRecordError"}};function et(n,e){try{n.parseNode(e);return}catch(t){if(t instanceof Q)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 ur="n\0",lr="e\0",G=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=Ce(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=me(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(ur));this.nodes.clear();for(let[o,i]of t)this.nodes.set(o,i);let r=[...this.edges.entries()].sort(e(lr));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 L(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(ur+o),this.outIndex.delete(o),this.inIndex.delete(o);return}case"patch-node":{let o=this.nodes.get(e.id);if(!o)throw new L(e.id,`Cannot patch missing node "${e.id}"`);let i={...o};for(let[a,d]of Object.entries(e.after))Le(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[Se(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(O(e.edge)))throw new L(O(e.edge),`Cannot remove missing edge ${O(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"||Qn.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=et(this.schema,t);if(i===void 0)return t;let s=et(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 Q)return t;{let r=e?.id??"?",o=e?.kind??"?",i=this.schema.tryDefinition(o),s=i&&e&&typeof e=="object"?T(i,e):r;return new E(`${s} does not match what ${o} declares`,wc(t))}}insertNode(e,t,r=!1){if(this.nodes.has(e.id))throw new E(`Duplicate node id "${e.id}"`);this.nodes.set(e.id,t?e:this.check(e)),Se(e)&&this.archived.add(e.id),this.tally(e.kind,1),this.place(ur+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 L(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 E(`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=O(e);this.edges.has(s)||(this.edges.set(s,e),this.place(lr+s,r),this.index(this.outIndex,e.from,s),this.index(this.inIndex,e.to,s))}deleteEdge(e){let t=O(e);this.edges.delete(t),this.lapse(lr+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 nt=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 kc(n,e){return{...e,name:n}}var tt=class extends Error{constructor(e){super(e),this.name="RuleBudgetError"}};function us(n,e,t){try{return e().map(r=>r.status?r:{...r,status:"violated"})}catch(r){let o=r instanceof tt,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 Ge(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(...us(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 nt(g,c.id);continue}let h=!Ot(f,c,t.today);for(let x of l.get(c.kind)??[]){if(h&&x.judgesPast!==!0)continue;let b=x.scope.match;b&&!b(c)||a.push(...us(x,()=>x.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=At(c.message);return f===c.message?c:{...c,message:f}});return fr?fr(n,e,p,t.today):p}var fr;function Tm(n){fr=n}function Sc(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 $c(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 rt=(n,e)=>n==="*"||n.includes(e);function I(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 B=n=>n.kind==="system"&&n.onBehalfOf===void 0,ye=(n,e)=>n.roles==="*"||(e.roles??[]).some(t=>n.roles.includes(t));function ls(n){return mo(n.map(e=>ze(C(e).toLowerCase())),"or")}function be(n,e,t,r,o,i,s={},a,d,l){if(!n)return{ok:!0};if(B(e))return{ok:!0};if(e=I(e),o!==void 0){if(be(n,e,t,r,void 0,i).ok)return{ok:!0};let f=!1;if(o.some(b=>be(n,e,b,r,void 0,i).ok)){if(!d||i===void 0||e.id!==void 0&&d()===e.id||!l&&n.grants.some(b=>b.roles!=="*"&&ye(b,e)&&o.some(k=>rt(b.mutations,k))))return{ok:!0};f=!0}let g=f?[t]:[t,...o],h=[...new Set(g.flatMap(b=>pr(n,b,r)))].sort(),x=(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":`${ls(h)} can`);return{ok:!1,refusal:{mutation:t,...r===void 0?{}:{kind:r},wouldNeed:h,message:fs(n,g,r,x,s)}}}let u=!1;for(let f of n.grants){if(!ye(f,e)||!rt(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=pr(n,t,r),c=u?"only on your own end of the link":p.length===0?"no role can":`${ls(p)} can`;return{ok:!1,refusal:{mutation:t,...r===void 0?{}:{kind:r},wouldNeed:p,message:fs(n,[t],r,c,s)}}}function fs(n,e,t,r,o){let i=[...new Set(e.flatMap(a=>ps(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 ps(n,e,t){return[...new Set(hs(n,e,t).flatMap(r=>r.describe||[]))]}var hs=(n,e,t)=>n.grants.filter(r=>rt(r.mutations,e)&&(t===void 0||rt(r.kinds??"*",t)));function pr(n,e,t){let r=hs(n,e,t);return r.some(o=>o.roles==="*")?[]:[...new Set(r.flatMap(o=>o.roles))].sort()}function hr(n,e,t){return n?t.filter(r=>{let o=I(e).id;return gr(r).some(i=>be(n,e,r.name,i,void 0,o,void 0,()=>[o??[]].flat()).ok)}):t}var gr=n=>n.subject&&n.subject.kinds!=="*"?n.subject.kinds:[void 0];var ne=class extends Error{constructor(t,r="refused"){super(t);this.sentence=t;this.reason=r;this.name="ActRefusal"}};var _n=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=O(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=O(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,gs(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,gs(t,e.after));return}case"add-edge":this.setEdge(e.edge,!0);return;case"remove-edge":this.setEdge(e.edge,!1);return}}};function gs(n,e){let t={...n};for(let[r,o]of Object.entries(e))Le(o)?delete t[r]:t[r]=o;return t}var _c=n=>n.op==="add-node"||n.op==="remove-node"?n.node.id:n.op==="patch-node"?n.id:void 0;function mr(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=_c(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]:ee]));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 ms(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 _n(e.present,e);if(!i)return s.begin(e.log.length??o+r.length),n.map(c=>{let f=I(c.author).id,g=c.primitives.map(h=>mr(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=Rc(r,d,e.present,t),p=u?new _n(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 Ac(n,r,d,l,a,p,u?.judge??t,e)}function Rc(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 Ac(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=>mr(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 Wm(n,e,t,r){let o=new _n(e.present,e);return o.begin(e.log.length??e.log.all().length),n.flatMap(i=>mr(i,o,t,()=>r).primitives)}var bs="A change you cannot see",xs={kind:"system",id:"withheld",name:"Someone"};function Be(n){return n.withheld===!0}var Rn=$e,vs=(n,e)=>Object.entries(n).some(([t,r])=>t!=="id"&&t!=="kind"&&N(r,e));function ws(n){if(typeof n!="function")return n;let e=n,t=r=>e(r.id)&&!vs(r,e)?r:void 0;return{sees:e,shows:e,served:t,servedWith:t,optional:()=>!1,kindOf:()=>{}}}function N(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(N(n[t],e))return!0;return!1}for(let t in n)if(Object.hasOwn(n,t)&&(!e(t)||N(n[t],e)))return!0;return!1}function ks(n,e){let t=r=>!e(r);return n.primitives.some(r=>Rn(r).some(t))||[...n.writes,...n.reads].some(t)||n.mutation!==null&&N(n.mutation.args,e)}function Oc(n,e){if(Rn(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 vs(t,e.sees)?{op:"remove-node",node:Object.fromEntries(Object.entries(t).filter(([r,o])=>r==="id"||r==="kind"||!N(o,e.sees)))}:n}case"patch-node":{let t=e.kindOf(n.id),r={};for(let[i,s]of Object.entries(n.after))if(!N(s,e.sees))r[i]=s;else if(t!==void 0&&e.optional(t,i))r[i]=ee;else return;let o=Object.fromEntries(Object.entries(n.before).filter(([,i])=>!N(i,e.sees)));return{op:"patch-node",id:n.id,before:o,after:r}}case"add-edge":case"remove-edge":return N(n.edge,e.sees)?void 0:n}}function yr(n,e,t){let r=ws(e),o=i=>r.shows(i)&&Ss(r,i);return{id:n.id,seq:n.seq,batch:n.batch,author:xs,intent:bs,mutation:null,primitives:t??n.primitives.flatMap(i=>{let s=Oc(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 Ue(n,e){let t=ws(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=>!N(i,r.sees),sees:r.sees,names:i=>N(i,r.sees)};return ms(n,r.timeline,o).map(({op:i,primitives:s,faithful:a})=>(!i.withheld&&a?ys(i,r,s):void 0)??yr(i,r,s))}return n.map(o=>(!o.withheld&&!ks(o,r.shows)?ys(o,r):void 0)??yr(o,r))}function ys(n,e,t){if(t&&t.length<n.primitives.length){if(!t.length)return;n={...n,primitives:t,inverse:n.inverse.filter(c=>Rn(c).every(e.shows))}}let r=c=>e.sees(c)&&Ss(e,c),o=n.reads.filter(r),i=new Set(n.primitives.flatMap(Rn)),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&&I(n.author).id===e.actor;if(!d&&n.described?.some(c=>!e.sees(c)))return;if(!N(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(!N(a.inverse,p))return d&&n.mutation&&u(n.mutation.args),N({...a,primitives:[],inverse:[]},d?p:e.sees)?void 0:a}function Ss(n,e){return n.timeline===void 0||n.kindOf(e)!==void 0}var _e=class extends E{constructor(t){super(t.message);this.check=t;this.name="UndoBlockedError"}get blockedBy(){return this.check.blockedBy}};function An(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(Be))return{ok:!1,ops:o,blockedBy:[],includeBatches:[],reason:"forbidden",message:o.every(Be)?"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=>!Be(f.op)).map(f=>`"${f.op.intent}" (op ${f.op.id}, read ${f.overlap.join(", ")})`).join("; ");if(u.some(f=>Be(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 $s(n){return[...n].sort((e,t)=>t.seq-e.seq).flatMap(e=>e.inverse)}var Ke=class extends Error{refusal;constructor(e){super(e.message),this.name="PermissionDeniedError",this.refusal=e}};function Pc(n){let e=n instanceof Error?n.message:String(n);if(n instanceof Ke){let t=n.refusal.wouldNeed;return{reason:"forbidden",sentence:e,...t.length>0?{wouldNeed:[...t]}:{}}}return n instanceof L?{reason:"missing",sentence:e}:n instanceof ne?{reason:n.reason,sentence:n.sentence}:n instanceof _e?{reason:n.check.reason??"invalid",sentence:e}:{reason:"invalid",sentence:e}}var Ve=class extends E{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"}};var Ec=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 })`,We=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?Ec(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 Re(this.ops)}opsInBatch(e){return this.ops.filter(t=>t.batch===e)}batches(){return br(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=G.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)))zc(i,a);return i}toJSON(){return[...this.ops]}};function zc(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 Re(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 br(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 xr(n){return n?.automated===!0&&n.kind!=="human"&&n.kind!=="rule"}var Rs=n=>n?.[wn]===!0,Mc=(n,e)=>Rs(("graph"in n?n.graph:n).getNode(e));function _s(n,e,t){let r=n.tryDefinition(e);return t===void 0?r?.tidying:r?.edges?.[t]?.tidying}var As=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 Os(n,e){let t=Nc(n);return[e,...e.map(r=>[r])].map(r=>t.get(As(r))).find(Boolean)}function Nc(n){let e=Re(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(As(a),o)}return r}function Ps(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(Rs(u))return s(`change \u201C${T(n.tryDefinition(u.kind),u)}\u201D`,"a person said to leave it alone");if(!i)continue;let p=_s(n,u.kind);if(p==="never")return s(`change ${J(n,u.kind)} on its own`,"the app says they are never tidied");if(d&&p==="no-links")return s(`link or unlink ${J(n,u.kind)} on its own`,"the app says they are never linked automatically")}if(d&&i&&l[0]&&_s(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 Ic(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 ot={scene:0,overview:10,rail:20,popover:30,dialog:40,toast:50},jc={plots:0,stage:1,tag:2,ties:2,lines:3,tieLabels:4,occupants:6,seatMarks:7,zoom:8,card:10,opened:11},Dc={under:0,raised:1,over:2},vr=n=>`--graview-layer-${n}`,Tc=n=>`var(${vr(n)}, ${ot[n]})`;function Fc(){return Object.keys(ot).map(n=>` ${vr(n)}: ${ot[n]};`).join(`
|
|
4
|
-
`)}function Zc(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 Es(){return`sub_${(globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`).replace(/-/g,"").slice(0,20)}`}function zs(n){return{...n,id:n.id??Es(),at:n.at??new Date().toISOString()}}function Lc(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=zs(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 Ns=(n,e)=>`${n}\0${e}`,Ms=new WeakMap;function Cc(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(Ns(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 Gc(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=>!Le(n.after[e]))]}function Bc(n,e){let t=n.end,r=I(e.author).id,o=e.undoes!==void 0?n.seqOf.get(e.undoes):void 0,i=[];for(let s of e.primitives){let a=Gc(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=Ns(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 Uc(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 it(n){let e=n.all(),t=typeof n.length=="number"?n.length:e.length,r=t-e.length,o=Ms.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&&Uc(o,i),r>o.base&&(o.read=o.read.slice(r-o.base),o.base=r))}else o=void 0;o||Ms.set(n,o=Cc(r));for(let i=o.end;i<t;i++)Bc(o,e[i-r]);return o.writers}var qe={served:new WeakSet},On=n=>n.fields!==void 0||(n.hide?.length??0)>0,xe=n=>qe.on===!0||qe.served.has(n);var wr=new WeakMap;function Kc(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 Vc(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=I(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 Wc(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 ce(n){let e=n.all(),t=typeof n.length=="number"?n.length:e.length,r=t-e.length,o=wr.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&&Wc(o,i),r>o.base&&(o.read=o.read.slice(r-o.base),o.base=r))}else o=void 0;o||wr.set(n,o=Kc(r,r>0?qc(n,r)?.creators:void 0));for(let i=o.end;i<t;i++)Vc(o,e[i-r]);return o.records}function qc(n,e){let t=[...n.epochs?.()??[]].reverse().find(r=>r.horizon);return t?.seq===e?t:void 0}function Is(n,e){ce(n);let t=wr.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 He(n,e,t,r,o,i=qe.on===!0){if(!n?.sees?.length||B(e))return!0;let s=n.sees.filter(a=>a.kinds.includes(t.kind)&&(i||!On(a)));return s.length===0?!1:(e=I(e),s.some(a=>{if(!ye(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 Sr=new Set;function st(n,e){return B(e)?Sr:n.modules?.disabledKinds??Sr}function Je(n,e){return B(e)?!1:(n.policy?.sees?.length??0)>0||st(n,e).size>0}function Fs(n,e){if(!Je(n,e))return()=>!0;let t=n.modules?.disabledKinds??Sr,r=n.policy?.sees??[],o=I(e),i=xe(n),s=d=>!t.has(d)&&(r.length===0||r.some(l=>l.kinds.includes(d)&&ye(l,o)&&!l.own&&!l.via&&(i||!On(l)))),a=n.schema.kinds.every(s);return d=>a||d!==void 0&&s(d)}function Pn(n,e){return t=>{let r=st(n,e);if(!n.policy?.sees?.length&&r.size===0)return!0;let o=ce(n.log),i=n.graph.getNode(t);if(i)return!r.has(i.kind)&&He(n.policy,e,i,n.graph,o,xe(n));let s=o.kindOf(t);return s===void 0?!0:!r.has(s)&&He(n.policy,e,{id:t,kind:s},{out:()=>[],in:()=>[]},o,xe(n))}}var Hc={out:()=>[],in:()=>[]};function Jc(n,e,t=new Map,r){let o=st(n,e);if(!n.policy?.sees?.length&&o.size===0)return()=>!0;let i=ce(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)&&He(n.policy,e,l,n.graph,i,xe(n));else{let u=i.kindOf(s);if(u===void 0)return r?.add(s),!0;d=!o.has(u)&&He(n.policy,e,{id:s,kind:u},Hc,i,xe(n))}return t.set(s,d),d}}function Yc(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 _r(n,e){return Zs(n,e).lens}var $r=()=>({judged:new Map,shown:new Map});function Zs(n,e){let t=Yc(n.schema),r=B(e)?void 0:I(e).id,o=()=>n.log.length??n.log.all().length,i=new WeakMap,s=n.graph,a=(u,p,c,f,g)=>{let h=(v,$)=>{if(!u(v.id))return;let _;for(let H in v)if(!(!Object.hasOwn(v,H)||H==="id"||H==="kind"||!N(v[H],u))&&!(r!==void 0&&$(H)===r)){if(!t(v.kind,H))return;(_??=[]).push(H)}if(!_)return v;let z=_.join("\0"),j=i.get(v);if(j?.without===z)return j.node;let q=Object.fromEntries(Object.entries(v).filter(([H])=>!_.includes(H)));return i.set(v,{without:z,node:q}),q},x=v=>{let $=c();return h(v,_=>p().writerAt(v.id,_,$))},b=new WeakMap,k=g?v=>{let $=b.get(v);return $||b.set(v,$={node:x(v)}),$.node}:x,R=v=>{if(!u(v))return!1;let $=s.getNode(v);return $===void 0||k($)!==void 0},m=g?.shown??new Map,w=g?v=>{let $=m.get(v);return $===void 0&&m.set(v,$=R(v)),$}:R,y=s.outEdges&&s.inEdges?{present:{getNode:v=>s.getNode(v),outEdges:v=>s.outEdges(v),inEdges:v=>s.inEdges(v)},log:n.log,get writers(){return p()}}:void 0,S={sees:u,shows:w,served:k,servedWith:h,optional:t,kindOf:f,...r!==void 0?{actor:r}:{},...y?{timeline:y}:{},hides:()=>Je(n,e),pin:g?()=>S:()=>d($r())};return qe.lens?.(S,n,e)??S};function d(u){let p,c=o(),f=ce(n.log);return a(Jc(n,e,u.judged,u.unnamed),()=>p??=it(n.log),()=>c,g=>s.getNode(g)?.kind??f.kindOf(g),u)}return{lens:a(Pn(n,e),()=>it(n.log),o,u=>s.getNode(u)?.kind??ce(n.log).kindOf(u)),pinWith:d}}var js=new WeakMap,Ds=new WeakMap,Xc=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 Qc(n,e){if(!Je(n,e))return n.log.all();let t=n.log.all(),r=n.log.length??t.length,o=r-t.length,i=[...st(n,e)].sort().join("\0"),s=Ls(e),a=js.get(n.log);a||js.set(n.log,a=new Map);let d=a.get(s),{pinWith:l}=Zs(n,e),u=Ds.get(n.log);u||Ds.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($r()),x=!0,b=Xc(g);for(let k of b){let R=d.judgments.judged.get(k),m=d.judgments.shown.get(k);if(R!==void 0&&h.sees(k)!==R||m!==void 0&&h.shows(k)!==m){x=!1;break}}if(x){for(let k of b)if(u.has(k)){x=!1;break}}if(x){let k=[...d.ops,...Ue(g,l(d.judgments))],R={horizon:o,off:i,length:r,last:t.at(-1),ops:k,judgments:d.judgments};return a.set(s,R),k}}let c={...$r(),unnamed:u},f=Ue(t,l(c));return a.set(s,{horizon:o,off:i,length:r,last:t.at(-1),ops:f,judgments:c}),f}function eu(n,e,t){return(t.subjectId===void 0||!e(t.subjectId)||n.shows(t.subjectId))&&t.nodeIds.every(r=>!e(r)||n.shows(r))&&!N(t,n.sees)}function Rr(n,e){return{all:()=>n,undoneIds:()=>Re(n),epochs:e}}var Ts=new WeakMap;function Ls(n){let e=B(n)?n:I(n);return`${n.kind}|${e.id??""}|${(e.roles??[]).join(",")}|${n.onBehalfOf?"for":""}`}var kr=(n,e)=>{let t=Reflect.get(n,e,n);return typeof t=="function"?t.bind(n):t},nu=Symbol.for("@graview/core:seat");function En(n,e){if(!Je(n,e))return n;let t=Ls(e),r=Ts.get(n);r||Ts.set(n,r=new Map);let o=r.get(t);if(o)return o;let i=n.graph,s=_r(n,e),a=m=>{let w=_=>_===void 0?void 0:m.served(_),y=_=>w(_)!==void 0,S=_=>y(i.getNode(_));return{served:w,seenNode:y,seenId:S,seenEdge:_=>S(_.from)&&S(_.to)&&!N(_,m.sees),servedAll:_=>_.flatMap(z=>w(z)??[])}},{served:d,seenId:l}=a(s),u=()=>a(s.pin?.()??s),p=(m,w)=>{let y=it(n.log),S=s.pin?.()??s,v=m.nodes.flatMap(_=>S.servedWith(_,z=>y.writerAt(_.id,z,w))??[]),$=new Set(v.map(_=>_.id));return{nodes:v,edges:m.edges.filter(_=>$.has(_.from)&&$.has(_.to)&&!N(_,S.sees))}},c=m=>{let w=p(m.base,m.seq);if(!m.creators)return{...m,base:w};let y=new Set(w.nodes.map(v=>v.id)),S=Object.fromEntries(Object.entries(m.creators).filter(([v,$])=>y.has(v)&&!N($,s.sees)));return{...m,base:w,creators:S}},f=m=>m&&c(m),g=()=>Qc(n,e),h=()=>Rr(g(),()=>n.log.epochs()),x=new Proxy(i,{get(m,w){switch(w){case"getNode":return y=>d(m.getNode(y));case"has":return l;case"allNodes":case"nodesOfKind":return(...y)=>u().servedAll(m[w](...y));case"count":return(...y)=>u().servedAll(m.nodesOfKind(...y)).length;case"allEdges":case"edgesOfKind":case"outEdges":case"inEdges":return(...y)=>m[w](...y).filter(u().seenEdge);case"out":case"in":case"neighbors":return(y,...S)=>{let v=u();return v.seenId(y)?v.servedAll(m[w](y,...S)):[]};case"snapshot":return()=>{let y=m.snapshot(),S=u();return{...y,nodes:S.servedAll(y.nodes),edges:y.edges.filter(S.seenEdge)}};case"size":{let y=u();return{nodes:y.servedAll(m.allNodes({archived:"all"})).length,edges:m.allEdges({archived:"all"}).filter(y.seenEdge).length}}default:return kr(m,w)}}}),b=()=>{let m=g();return br(m,Re(m))},k=new Proxy(n.log,{get(m,w){switch(w){case"all":case"toJSON":return()=>[...g()];case"epochs":return()=>m.epochs().map(c);case"lastEpoch":return()=>f(m.lastEpoch());case"live":return()=>{let y=g(),S=Re(y);return y.filter(v=>!S.has(v.id))};case"get":return y=>g().find(S=>S.id===y);case"opsInBatch":return y=>g().filter(S=>S.batch===y);case"batches":return b;default:return kr(m,w)}}}),R=new Proxy(n,{get(m,w){switch(w){case nu:return{store:m,principal:e};case"graph":return x;case"log":return k;case"snapshot":return x.snapshot;case"batches":return b;case"canUndo":return y=>An(h(),typeof y=="string"?[y]:y);case"violations":return y=>m.violations(y,x).filter(S=>eu(s,v=>i.has(v),S));case"findings":return()=>m.findings().filter(y=>(y.id.includes("->")?y.id.split("->").map((v,$)=>$===0?v.slice(v.indexOf(":")+1):v):[y.id]).every(v=>!i.has(v)||l(v))&&!N(y,s.sees));case"wouldChange":return y=>m.wouldChange(y,e);case"preview":return(y,S,v)=>m.preview(y,S,{author:e,...v});case"seenBy":return y=>En(m,y);case"seenFor":return e;case"checkpoint":return(...y)=>f(m.checkpoint(...y));default:return kr(m,w)}}});return r.set(t,R),R}var Ar=new Set;function Or(n,e){if(!n||e===void 0)return{enabled:new Set(Object.keys(n??{})),disabledKinds:Ar,disabledMutations:Ar,disabledInvariants:Ar,administered:Cs(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:Cs(n,t)}}function Cs(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 Gs(n){return n.normalize("NFKD").replace(/\p{M}/gu,"").toLowerCase().trim().replace(/\s+/g," ")}var at=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=Gs(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=Pr(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=T(this.graph.schema.tryDefinition(e.kind),e),r=Gs(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(Pr(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=Pr(r.sorted,t.key);r.sorted[i]===t.key&&r.sorted.splice(i,1)}};function Pr(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 tu(n,e){return e.includes("*")?"record":e.map(t=>Y(n.tryDefinition(t),t)).join(" or ")}function Bs(n,e,t,r){let o=tu(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 Ks=Symbol.for("@graview/core:node-ref"),Us=n=>typeof n=="object"&&n!==null?n[Ks]:void 0;function zn(n="*"){return ru(F().check(hn(1)),n)}function ru(n,e){let t=Object.freeze(e==="*"?["*"]:[...e]),r=o=>{o&&Object.defineProperty(o,Ks,{value:t,enumerable:!0,configurable:!0})};return r(n),r(M(n)),n}function Er(n){if(typeof n!="object"||n===null)return;let e=Us(n);if(e)return e;let t=M(n),r=Us(t);if(r)return r;let o=t?.innerType;return o?Er(o):void 0}function Mn(n){let e=n.shape;if(!e)return[];let t=[];for(let[r,o]of Object.entries(e)){let i=Er(o);i&&t.push({name:r,kinds:i,optional:o.safeParse(void 0).success})}return t}function zr(n){if(n===null||typeof n!="object")return JSON.stringify(n)??"null";if(Array.isArray(n))return`[${n.map(r=>r===void 0?"null":zr(r)).join(",")}]`;let e=n;return`{${Object.keys(e).filter(r=>e[r]!==void 0).sort().map(r=>`${JSON.stringify(r)}:${zr(e[r])}`).join(",")}}`}var Vs=(n,e)=>n.key<e.key?-1:n.key>e.key?1:0;function ou(n){let e=n.nodes.map(r=>({key:r.id,value:r})).sort(Vs),t=n.edges.map(r=>({key:O(r),value:{kind:r.kind,from:r.from,to:r.to}})).sort(Vs);return zr({nodes:e.map(r=>r.value),edges:t.map(r=>r.value)})}function Ye(n){return`sha256:${qs(ou(n))}`}function Ws(n,e,t,r={}){let o=r.validate??!0,i=r.base??{nodes:[],edges:[]},s=Ye(t),a=G.from(n,i,{validate:o});for(let[h,x]of e.entries())try{a.applyPrimitives(x.primitives)}catch(b){let k=e[h-1];return{ok:!1,expected:Ye(a.snapshot()),actual:s,...k?{divergedAfter:k.id}:{},reason:`The log does not fold: op "${x.id}" (${x.intent}) could not be applied. ${b instanceof Error?b.message:String(b)}`}}let d=Ye(a.snapshot());if(d===s)return{ok:!0,hash:s};let l=h=>{let x=G.from(n,i,{validate:o});for(let b=0;b<=h;b++)x.applyPrimitives(e[b].primitives);return Ye(x.snapshot())},u=h=>{try{let x=G.from(n,t,{validate:o});for(let b=e.length-1;b>h;b--)x.applyPrimitives(e[b].inverse);return Ye(x.snapshot())}catch{return}},p=h=>{let x=u(h);return x!==void 0&&x!==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 iu=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]),su=new TextEncoder,au=new Uint32Array(64),du=new Uint32Array(8),dt=Array.from({length:256},(n,e)=>e.toString(16).padStart(2,"0"));function qs(n){let e=su.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=du;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=au;for(let d=0;d<r.length;d+=64){for(let b=0;b<16;b++)s[b]=o.getUint32(d+b*4);for(let b=16;b<64;b++){let k=s[b-15],R=s[b-2],m=(k>>>7|k<<25)^(k>>>18|k<<14)^k>>>3,w=(R>>>17|R<<15)^(R>>>19|R<<13)^R>>>10;s[b]=s[b-16]+m+s[b-7]+w>>>0}let l=i[0],u=i[1],p=i[2],c=i[3],f=i[4],g=i[5],h=i[6],x=i[7];for(let b=0;b<64;b++){let k=(f>>>6|f<<26)^(f>>>11|f<<21)^(f>>>25|f<<7),R=f&g^~f&h,m=x+k+R+iu[b]+s[b]>>>0,w=(l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10),y=l&u^l&p^u&p,S=w+y>>>0;x=h,h=g,g=f,f=c+m>>>0,c=p,p=u,u=l,l=m+S>>>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]+x>>>0}let a="";for(let d=0;d<8;d++){let l=i[d];a+=dt[l>>>24]+dt[l>>>16&255]+dt[l>>>8&255]+dt[l&255]}return a}var Nn=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 Mr(n){if(!n.creates?.length)return!1;let e=n.input.shape;return e===void 0||!("id"in e)}function Xs(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 Mr(n)?[...r,"id"]:r}var Hs=(n,e)=>`does not take ${n.map(t=>`"${t}"`).join(", ")}; it takes ${e.length>0?e.map(t=>`"${t}"`).join(", "):"nothing"}`;function uu(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 E("An id must be a non-empty string",`Got ${JSON.stringify(e)}.`);return e}}function lu(n){let{id:e,...t}=n;return t}function Js(n){return n.normalize("NFKD").replace(/\p{M}/gu,"").toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,"")||"item"}function Qs(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 fu(n,e){if(e.limited&&e.me===void 0)return Ys(n,e.held);let t=e.limited?`${n}.${Qs(e.me)}`:n,r=t;for(let o=2;e.seen(r);o++)r=`${t}-${o}`;return e.held(r)?Ys(t,e.held):r}function Ys(n,e){let t;do t=`${n}-${Math.floor(Math.random()*36**6).toString(36).padStart(6,"0")}`;while(e(t));return t}function Xe(n,e,t,r={}){let o=Mr(e)?uu(t):void 0,i=o===void 0?t:lu(t),s=Xs(e);if(s&&typeof i=="object"&&i!==null&&!Array.isArray(i)){let m=Object.keys(i).filter(w=>!s.includes(w)&&i[w]!==void 0);if(m.length>0)throw new Ve(e.name,[{path:[],message:Hs(m,s)}])}let a=e.input.safeParse(i);if(!a.success){let m=Object.keys(e.input.shape??{});throw new Ve(e.name,a.error.issues.map(w=>w.code==="unrecognized_keys"&&m.length>0?{...w,message:Hs(w.keys,m)}:w))}let d=a.data,l=new Nn(r.seen??n),u=[],p=new Set,c=m=>l.has(m)||n.has(m)||p.has(m),f,g=m=>{let w=new Set([...n.outEdges(m),...n.inEdges(m)]);for(let y of w)l.getNode(y.from),l.getNode(y.to),u.push({op:"remove-edge",edge:y});return w},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 w=l.getNode(m)&&n.getNode(m);if(!w)throw new L(m,`Cannot remove missing node "${m}"`);g(m),u.push({op:"remove-node",node:w})},patchNode(m,w){let y=l.getNode(m)&&n.getNode(m);if(!y)throw new L(m,`Cannot patch missing node "${m}"`);let S={},v={};for(let[$,_]of Object.entries(w)){let z=y[$];JSON.stringify(z)===JSON.stringify(_)&&!r.keepUnchanged?.(_,$,y)||(S[$]=z,v[$]=_)}Object.keys(v).length!==0&&u.push({op:"patch-node",id:m,before:S,after:v})},archiveNode:m=>h.patchNode(m,{[Ze]:!0}),unarchiveNode:m=>h.patchNode(m,{[Ze]:void 0}),mergeNode(m,w){let y=l.getNode(w)&&n.getNode(w);if(!y)throw new L(w,`Cannot merge into missing node "${w}"`);if(m===w||Se(y))throw new E(m===w?"Cannot merge a record into itself":"Cannot merge into an archived record");let S=new Set([...n.outEdges(w),...n.inEdges(w)].map(O));for(let v of g(m)){let $={kind:v.kind,from:v.from===m?w:v.from,to:v.to===m?w:v.to};$.from!==$.to&&!S.has(O($))&&(S.add(O($)),u.push({op:"add-edge",edge:$}))}h.archiveNode(m),f=w},addEdge(m){u.push({op:"add-edge",edge:m})},removeEdge(m){u.push({op:"remove-edge",edge:m})},setSingleSource(m,w,y){n.inEdges(w,m).some(S=>S.from===y)||u.push({op:"add-edge",edge:{kind:m,from:y,to:w}});for(let S of n.inEdges(w,m))l.getNode(S.from),S.from!==y&&u.push({op:"remove-edge",edge:S})},freshId(m,w){if(o!==void 0&&!p.has(o)){if(r.seesInFull&&!r.seesInFull())throw new E(`"${e.name}" makes its own id here`,"Leave id out: the answer says the id it made.");if(c(o))throw new E(`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 y=w?`${w}:${Js(m)}`:Js(m),v=fu(y,{seen:$=>(r.seen?r.seen.has($):n.has($))||p.has($),held:c,limited:r.seesInFull!==void 0&&!r.seesInFull(w),me:r.me});return p.add(v),v}};e.apply(h,d);let x=r.check?.(u,e),b=new Set(u.flatMap($e)),k=new Nn(r.seen??n),R=e.describe?.(d,k)??`${e.name}(${Object.entries(d).map(([m,w])=>`${m}=${JSON.stringify(w)}`).join(", ")})`;return{primitives:u,reads:[...new Set([...l.reads(),...k.reads()])],...e.describe?{described:[...k.reads(),...x??[]]}:{},writes:[...b],intent:R,...f!==void 0?{mergedInto:f}:{}}}var ea=Symbol.for("@graview/core:amount"),qy=(n,e)=>(Object.defineProperty(M(n),ea,{value:e,enumerable:!0}),n);function Nr(n,e=!0){let t=M(n);return t?.[ea]??(e&&t?.innerType?Nr(t.innerType):void 0)}function na(n,e={}){let t=Number.isInteger(n),r={maximumFractionDigits:t?0:2,minimumFractionDigits:t?0:2};try{return re(n,e.locale,e.currency?{style:"currency",currency:e.currency,...r}:r)}catch{return re(n,e.locale,r)}}function ta(n,{format:e,unit:t,currency:r,locale:o}){let i=/^[A-Z]{3}$/.test(t??"");return e==="money"||!e&&i?na(n,{...o?{locale:o}:{},...(i?t:r)?{currency:i?t:r}:{}}):e==="percent"?re(n,o,{style:"percent",maximumFractionDigits:0}):re(n,o)+(t?` ${t}`:"")}var pu=Symbol.for("@graview/core:typed-field");function Ir(n){let e=M(n);return e?e[pu]??Ir(e.innerType):void 0}var hu=/^[("'“‘]*(?:(?:[a-z]{1,3}\.){2,}|(?:dr|mr|mrs|ms|mx|st|mt|vs|jr|sr|prof|no|fig|approx)\.)$/i;function gu(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]==="."&&hu.test(r))&&!(t.split(" ").length<3&&e.index+1<n.length))return t}}function ra(n,e=140){let t=n.replace(/^[#>\s]+|\*\*|`|\](\([^)\s]*\))?|\[/gm,"").replace(/\s+/g," ").trim(),r=gu(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 mu(n){let e=n.fields.shape;return Object.keys(e).flatMap(t=>{let r=Xn(e[t])?xn(t):void 0;return r&&e[r]?[r]:[]})}var yu=[["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 oa(n,e){let t=new Set(e.map(o=>o.name)),r=[];for(let o of n.definitions){let i=mu(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=>T(o,u);for(let[u,p,c,f]of yu){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(Te),...u==="skip"?{}:{creates:[s]},input:Wn({id:zn([s]),on:F().check(gn(/^\d{4}-\d{2}-\d{2}$/,"a day, like 2026-10-21")),...i.length>1?{field:de(Ki(i))}:{},...u==="skip"?{}:Object.fromEntries(d.map(h=>[h,de(a[h])]))}),describe:(h,x)=>f.replace("{}",l(x.getNode(String(h.id))??{id:h.id}))+fe(String(h.on)),apply(h,x){let b=h.graph.getNode(String(x.id)),k=String(x.field??i[0]),R=b?.[k],m=b?.[Te(k)],w=String(x.on);if(typeof R!="string"||!Fe(m))throw new ne(`${l(b??{id:x.id})} does not repeat`,"refused");let y=De(R,m,{from:w,to:w})[0];if(!y)throw new ne(`${l(b)} does not fall on ${fe(w)}`,"refused");let S=String(b.id),v=Object.fromEntries(d.filter(K=>x[K]!==void 0).map(K=>[K,x[K]])),$=Te(k),_=K=>{let co=Object.fromEntries(Object.entries({...b,...K,...v}).filter(([Tn,St])=>St!=null&&Tn!=="id")),uo=h.freshId(l(co));h.addNode({...co,id:uo,kind:s});for(let Tn of Object.keys(o.edges??{}))for(let St of h.graph.out(S,Tn))h.addEdge({kind:Tn,from:uo,to:St.id})};if(u!=="split"){h.patchNode(S,{[$]:{...m,except:[...new Set([...m.except??[],w])].sort()}}),u==="detach"&&_({[k]:y,[$]:null});return}if(Object.keys(v).length===0)throw new ne(`Nothing to change: give ${l(b)} from ${fe(w)} something new`,"invalid");if(w<=R.slice(0,10))return h.patchNode(S,v);let z=new Date(Date.parse(`${w}T00:00:00Z`)-864e5).toISOString().slice(0,10),j=m.count?De(R,{...m,except:[]},{to:z}).length:0,{count:q,except:H,...so}=m,ao=K=>H?.some(K)?{except:H.filter(K)}:{};h.patchNode(S,{[$]:{...so,until:z,...ao(K=>K<w),...q?{count:j}:{}}}),_({[k]:y,[$]:{...so,...ao(K=>K>=w),...q?{count:q-j}:{},continues:S}})}})}}return r}function ia(n){let e=n.fields.shape;return Object.keys(e).filter(t=>!(t in(n.fixed??{})))}function jr(n,e){let t=e.subject;return t?t.kinds==="*"?n.kinds:t.kinds:[]}function Dr(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(Mn(n.input).map(s=>s.name));return Object.keys(o).filter(s=>s!==t.arg&&r.has(s)&&!i.has(s))}function sa(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 jr(n,o)){let s=n.tryDefinition(i);if(s)for(let a of Dr(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 aa(n,e,t){let r=n.tryDefinition(t);if(!r)return[];let o=sa(n,e).get(t);return ia(r).filter(i=>!o?.has(i))}var da=n=>`edit-${n}`;function ca(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),jr(n,i).includes(t)&&Dr(i,r).length>0&&o.add(i.name));return[...o]}function ua(n,e){let t=new Set(e.map(o=>o.name)),r=[];for(let o of n.definitions){let i=o.kind,s=da(i);if(t.has(s))continue;let a=aa(n,e,i);if(a.length===0)continue;let d=o.fields.shape,l=Y(o,i),u=a.map(p=>Zn(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:Wn({id:zn([i]),...Object.fromEntries(a.map(p=>[p,de(vu(d[p]))]))}),describe:(p,c)=>bu(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 ne(`Nothing to change \u2014 give at least one of ${u.join(", ")} a value.`,"invalid");p.patchNode(c.id,f)}})}return r}function bu(n,e,t,r,o){let i=o.getNode(r.id),s=i?T(n,i):"a record",a=t.filter(d=>r[d]!==void 0).map((d,l)=>{let u=r[d],p=xn(d),c=p!==void 0&&p in e,f=Zn(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 ${xu(u)}`:"stop repeating":la(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 xu=n=>`every ${(n.interval??1)>1?`${n.interval} ${n.every}s`:n.every}`;function la(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(mn(r).length>0)return mn(r).map(i=>i.name).join(", ");if(yn(e))return Array.isArray(r)&&r.length>1?`${r.length} linked records`:"a linked record";if(Array.isArray(r))return r.map(i=>la(n,e,t,i)).join(", ");if(typeof r=="boolean")return r?"yes":"no";if(typeof r=="number"){let i=Nr(e);return i?ta(r,i):Ir(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(an.test(r))return fe(r);if(_t.test(r))return Rt(r);for(let i=M(e);i;i=M(i.innerType))if(i.type==="enum")return C(r);return`\u201C${ra(r,60)}\u201D`}function vu(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 fa(n,e){return n.filter(t=>!t.derived&&(t.creates??[]).includes(e)).map(t=>t.name)}function Tr(n,e,t){if(t.derived)return t.derived.act==="edit"||t.derived.act==="skip"||t.derived.act==="detach"||t.derived.act==="split"?ca(n,e,t.derived.kind):fa(e,t.derived.kind)}function wu(n,e){let t=new Set(e.map(o=>o.name)),r=[];for(let o of n.definitions){let i=o.kind,s=Y(o,i),a=(l,u)=>{let p=l.getNode(String(u));return p?T(o,p):String(u)},d=zn([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:je(l==="merge"?{id:d,into:d}:{id:d}),describe:(h,x)=>{let b=l==="remove"&&x.getNode(String(h.id)),k=b?new Set(Object.values(b).flatMap(R=>mn(R).map(m=>m.href))).size:0;return`${u} ${a(x,h.id)}${l==="merge"?` into ${a(x,h.into)}`:""}${k?` and its ${k} file${k>1?"s":""}`:""}`},apply:g?(h,x)=>h.patchNode(String(x.id),{[wn]:l==="leave-alone"?!0:void 0}):(h,x)=>h[`${l}Node`](x.id,x.into)})}}return r}function Fr(n,e){return[...ua(n,e),...wu(n,e),...oa(n,e)]}var ku=500,Zr=120;function In(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>ku||t!==void 0&&!(typeof t=="number"&&t>=0&&t<=1)||r!==void 0&&!(a&&a.length<=Zr)||o!==void 0&&!(typeof o=="string"&&o.length>0&&o.length<=Zr)||i!==void 0&&!(typeof i=="string"&&i.length>0&&i.length<=Zr))throw new E("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 Qe="keep-link";function pa(n){let e=(t,r)=>{let o=t.getNode(r);return o?T(n.tryDefinition(o.kind),o):r};return{name:Qe,title:"Keep this link",input:je({kind:F(),from:F(),to:F()}),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=O({kind:o,from:i,to:s});throw new L(a,`Cannot remove missing edge ${a}`)}t.removeEdge({kind:o,from:i,to:s}),t.addEdge({kind:o,from:i,to:s})}}}var ha=(n,e)=>[...n].filter(t=>!t.derived&&t.name!==Qe&&typeof e=="string"&&(t.connects?.includes(e)||t.severs?.includes(e))).map(t=>t.name);var ga=["kind-unknown","node-shape","edge-dangling","edge-disallowed","rule-error","rule-budget"];function ma(n,e){let t=et(n,e);return t&&[...t.fields].filter(Boolean)}function Su(n,e,t){return n.tryDefinition(e)?.fields?.shape?.[t]}function ct(n,e){try{return T(n.tryDefinition(e.kind),e)}catch{return typeof e.label=="string"?e.label:"A record"}}var $u=n=>`${n.kind}:${n.from}->${n.to}`,ut=(n,e)=>n<e?-1:n>e?1:0;function ya(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)=>ut(f.id,g.id))){if(!r.tryDefinition(c.kind)){d.add(c.id),o.push({code:"kind-unknown",id:c.id,message:`${ct(r,c)} is a kind of record this app no longer has`,repair:a(c)});continue}let f=ma(r,c);if(f===void 0)continue;let g=ct(r,c),h=new Map,x=f.length>0;for(let b of f){if(b==="id"||b==="kind"){x=!1;continue}let k=Su(r,c.kind,b),R=k?k.safeParse(void 0):{success:!0,data:void 0},m=r.tryDefinition(c.kind)?.defaults;!R.success&&k&&m&&Object.hasOwn(m,b)&&(R=k.safeParse(m[b])),R.success?R.data===void 0?h.set(b,{action:"clear",value:ee}):h.set(b,{action:"coerce",value:R.data}):x=!1}if(x){let b={...c};for(let[k,R]of h)R.value===ee?delete b[k]:b[k]=R.value;ma(r,b)!==void 0&&(x=!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 b of f){let k=h.get(b),R=x&&k?{action:k.action,primitives:[{op:"patch-node",id:c.id,before:{[b]:c[b]===void 0?ee:c[b]},after:{[b]:k.value}}]}:a(c);o.push({code:"node-shape",id:c.id,detail:b,message:`${g}: ${C(b)} does not fit what ${c.kind} declares`,repair:R})}}let l=new Set,u=[];for(let c of[...e.edges].sort((f,g)=>ut(O(f),O(g)))){if(l.has(O(c)))continue;l.add(O(c));let f=$u(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:`${ct(r,g)} \u2192 ${ct(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=G.from(r,{nodes:[...i.values()],edges:u},{validate:!1}),f=new Set,g;try{g=Ge(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 x=h.status==="could-not-judge"?"rule-error":h.status==="over-budget"?"rule-budget":void 0;if(!x)continue;let b=h.subjectId??h.invariant,k=`${x}|${b}|${h.invariant}`;f.has(k)||(f.add(k),o.push({code:x,id:b,detail:h.invariant,message:h.message}))}}return o.sort((c,f)=>ga.indexOf(c.code)-ga.indexOf(f.code)||ut(c.id,f.id)||ut(c.detail??"",f.detail??""))}var lt=()=>globalThis.__graviewWatch;function ba(n){lt()?.store?.(n)}function ft(n){n!==void 0&<()?.learn?.({ids:[n],words:[]})}function xa(n,e){lt()?.refused?.({...n,...e===void 0?{}:{author:e}})}function _u(n,e,t){lt()?.seat?.(n,e,t)}function Lr(n){if(typeof n=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(n))return n;let e=new Date(n);if(Number.isNaN(e.getTime()))throw new Error(`Not a day: ${String(n)}`);return e.toISOString().slice(0,10)}function va(n=Date.now()){let e=new Date(n).getTime(),t=new Date(e);return t.setUTCHours(24,0,0,0),t.getTime()-e}function Ru(n,e){let t,r=()=>{t=setTimeout(()=>{let o=n.tick(new Date);r(),e?.(o)},va()+1e3),t.unref?.()};return r(),()=>clearTimeout(t)}var pt=class extends E{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"}},Cr="preview",D=(n,e)=>e===void 0?{}:{[n]:e},Ae={kind:"human"},wa={kind:"system"},Sa={kind:"system",id:"modules",name:"Modules"},ka=n=>n.mutation===null&&n.undoes===void 0;function Gr(n,e){return`${n.invariant}|${n.subjectId??""}|${n.line||e?.has(n.invariant)?n.label:n.message}`}var Au=new Set(["remove","archive","unarchive","merge"]),Ou={has:()=>!0},$a=n=>new Set(n.filter(e=>e.shape).map(e=>e.name));function _a(n,e,t){let r=$a(n),o=p=>Gr(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&&Gr(p,Ou),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 en=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"}},ht=class extends E{constructor(t,r){super(`Unknown mutation "${t}"`,`Registered: ${r.join(", ")||"(none)"}`);this.mutation=t;this.name="UnknownMutationError"}};function Pu(){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 Br=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;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.policy=e.policy,this.by=e.principal??Ae,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=Pu();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 E(`Duplicate mutation "${i.name}"`);this.mutations.set(i.name,i)}for(let i of e.past?[]:Fr(e.schema,e.mutations??[]))this.mutations.set(i.name,i);!e.past&&!this.mutations.has(Qe)&&(this.keeper=pa(e.schema),this.mutations.set(Qe,this.keeper));let r=D("horizon",e.horizon),o={validate:this.validate};if(e.log){this.log=We.from(e.log,e.epochs,r);let i=this.log.lastEpoch();this.graph=e.snapshot?G.from(e.schema,e.snapshot,o):this.log.fold(e.schema,{...o,...i?{from:i}:{}})}else this.log=We.from([],e.epochs??(e.snapshot?[{seq:e.horizon??0,base:e.snapshot}]:[]),r),this.graph=G.from(e.schema,e.snapshot??{nodes:[],edges:[]},o);e.past||(this.countPastTheLog(),ba(this))}stillNow(){if(this.past)throw new pt(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:Or(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=Or(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=>J(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:Sa,intent:cn(d),mutation:null,primitives:[],inverse:[],reads:[],writes:[],at:this.now(),...D("via",t.via),enabledModules:[...o].sort()};return this.log.append(l),this.notify($n,[l]),l}mutation(e){let t=this.mutations.get(e);if(!t)throw new ht(e,[...this.mutations.keys()]);if(this.mutationDisabled(t))throw new E(`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)return ha(this.mutations.values(),t?.args.kind);if(e?.derived)return Tr(this.schema,[...this.mutations.values()],e)}moved(e,t){return _a(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=Ae){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 be(this.policy,t,e.name,this.subjectKindOf(e,t),this.viaOf(o,e),typeof i=="string"?i:void 0,this.words,()=>{let s=I(t).id,a=this.namedIn(e,!1);try{for(let d of Xe(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&&(()=>ce(this.log).creatorOf(i)),o?.derived!==void 0&&Au.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]]:[],...Mn(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&&xa(e,t),new Ke(e)}get words(){return{act:e=>this.mutations.get(e)?.title,noun:e=>Y(this.schema.tryDefinition(e),e)}}refusesAgent(e,t){if(t.kind!=="agent"||t.id===void 0)return;let r=this.may.get(t.id);if(!r||r.has(e.name))return;let o=s=>`\u201C${this.mutations.get(s)?.title??s}\u201D`,i=[...r].map(o);return{mutation:e.name,message:`${t.id} may not ${o(e.name)} here: it was declared able to ${i.length===0?"do nothing else":i.join(", ")}.`,wouldNeed:[]}}namesTurnedOff(e,t=wa){let r=this.modules.disabledKinds;if(r.size===0||!B(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&&I(e).id};if(e===void 0||!Je(this,e))return t;let r=Pn(this,e);return{...t,seen:En(this,e).graph,keepUnchanged:o=>N(o,r),seesInFull:Fs(this,e)}}missingFor(e,t=Ae){let r=this.mutations.get(e.name),o=new Set(this.namedIn(e));if(!r||o.size===0)return;let i=En(this,t).graph;for(let s of o)if(!i.has(s))return new L(s,`\u201C${r.title??e.name}\u201D names a record that is not there.`)}mayAdminister(e,t=Ae){let r=this.modules.administered.get(e);return r?(r.mutations??[]).some(o=>{let i=this.mutations.get(o);return!!i&&gr(i).some(s=>be(this.policy,t,o,s,this.viaOf(i)).ok)}):!1}seenBy(e){return En(this,e)}sees(e,t){return this.graph.has(t)&&Pn(this,e)(t)}labels;resolveRef(e,t,r=Ae){let o=(this.policy?.sees?.length??0)>0,i=c=>!o||this.sees(r,c),s=this.graph.getNode(t);if(this.labels??=new at(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"}:Bs(this.schema,e,t,p)}kindsKeptFrom(e=Ae){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&&!B(e)){let o=new Set(this.permittedMutations(e).flatMap(s=>s.creates??[])),i=xe(this);for(let s of this.schema.kinds)!r.some(d=>d.kinds.includes(s)&&ye(d,e)&&(!d.own&&!d.via||e.id!==void 0)&&(i||!On(d)))&&!o.has(s)&&t.add(s)}return t}permittedMutations(e=Ae){let t=this.allMutations(),r=hr(this.policy,e,t.filter(i=>!i.derived)),o=t.filter(i=>i.derived!==void 0&&be(this.policy,e,i.name,i.derived.kind,this.viaOf(i),I(e).id).ok);return[...r,...o]}subjectKindOf(e,t=wa){let o=this.mutations.get(e.name)?.subject;if(!o)return;let i=e.args[o.arg];if(typeof i!="string")return o.kinds!=="*"&&o.kinds.length===1?o.kinds[0]:void 0;if(!(!B(t)&&!Pn(this,t)(i)))return this.graph.getNode(i)?.kind}today(){return this.pinned()??(this.ticked&&this.ticked.on===dn()?this.ticked.day: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=ns(this.graph),o=e??this.invariantOptions.context,i=r&&!(o&&"linked"in o)?{...o,linked:r}:e;return{...this.invariantOptions,...i===void 0?{}:{context:i},...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=Lr(e),o=this.today(),i=this.violations();this.ticked={day:r,on:dn()};let s=this.moved(i,this.violations());if(r!==o&&!this.rehearsing&&this.quiet===0)for(let a of this.listeners)a($n,[]);return{day:r,...o===void 0?{}:{was:o},appeared:s.introduces,cleared:s.resolves}}reread(){if(!(this.rehearsing||this.quiet>0))for(let e of this.listeners)e($n,[])}violations(e,t=this.graph){return Ge(t,this.allInvariants(),this.judging(e))}wouldChange(e,t){try{return Xe(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=Xe(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:G.from(this.schema,this.graph.snapshot(),{validate:this.validate}),log:We.from(this.log.all(),this.log.epochs(),{horizon:this.log.horizon}),listeners:new Set,labels:void 0,nextId:()=>`${Cr}:${++t}`,mintBatch:()=>Cr,rehearsing:!0}),e}previewPrimitives(e,t){let r=this.violations(t.context),o=G.from(this.schema,this.graph.snapshot()),i=o.applyPrimitives(e,{restoring:t.restoring===!0}),s=Ge(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=In(t.lineage),a=[],d=[],l=new Set,u=new Set,p=[],c=this.violations(r),f=this.graph.snapshot(),g=this.log.length;if(this.policy)for(let k of e){let R=this.permits(k,i);R.ok||this.refuse(R.refusal,i.id)}for(let k of e){let R=this.refusesAgent(k,i)??this.namesTurnedOff(k,i);R&&this.refuse(R,i.id)}let h=xr(i);h&&this.refuseDeclined(e,i),this.rehearsing||ft(i.id);try{for(let k of e){let R=this.mutation(k.name),m=this.missingFor(k,i);if(m)throw m;let w=Xe(this.graph,R,k.args,this.sighted(i));if(h){let S=Ps(this.schema,this.graph,w.primitives,this.authorName(i),{declaration:!this.suggesting});S&&this.refuse({mutation:k.name,message:S,wouldNeed:[]},i.id)}if(w.primitives.length===0)continue;let y={id:this.nextId(),seq:this.log.length,batch:o,author:i,intent:R.describe!==void 0?w.intent:t.intent??w.intent,...D("batchIntent",t.intent),mutation:k,primitives:w.primitives.map(kn),inverse:[...w.primitives].reverse().map(kn).map(Sn),reads:w.reads,writes:w.writes,...R.describe!==void 0&&w.described&&w.described.length>0?{described:w.described}:{},...D("mergedInto",w.mergedInto),at:this.now(),...D("via",t.via),...D("lineage",s)};this.graph.applyPrimitives(y.primitives),this.log.append(y),a.push(y),d.push(...y.primitives);for(let S of y.reads)l.add(S);for(let S of y.writes)u.add(S);p.push(y.intent)}}catch(k){throw this.putBack(f,g),k}let x=me(f,this.graph.snapshot(),d);this.admitted(t,a,d,x,f,g);let b=this.violations(r);return this.notify(x,a),{batch:o,ops:a,diff:x,primitives:d,reads:[...l],writes:[...u],intent:t.intent??p.join("; "),...this.moved(c,b),violationsAfter:b}}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 en(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(me(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(kn),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,...D("batchIntent",a.batchIntent),mutation:a.mutation??null,primitives:l,inverse:a.inverse??[...l].reverse().map(Sn),reads:a.reads??[],writes:a.writes??[...new Set(l.flatMap($e))],at:a.at??this.now(),...D("undoes",a.undoes),...D("via",a.via),...D("lineage",In(a.lineage))};if(r.has(u.id))throw new E(`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 en(a,d)}for(let a of i)this.log.append(a);for(let a of i)ft(a.author.id);return this.notify(me(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=In(t.lineage),l=e.map(kn),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(Sn),reads:[],writes:[...new Set(l.flatMap($e))],at:this.now(),...D("via",t.via),...D("lineage",d)};this.graph.applyPrimitives(f.primitives),this.log.append(f),u.push(f),ft(o.id)}let p=this.violations(),c=me(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 ya({schema:this.schema,invariants:this.allInvariants()},this.graph.snapshot(),{invariantOptions:this.invariantOptions})}batches(){return this.log.batches()}canUndo(e){return An(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=$s(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(ka),...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&&!B(o);if(i){let h=An(Rr(Ue(this.log.all(),_r(this,o)),()=>this.log.epochs()),r);if(!h.ok)throw new _e(h)}let s=this.canUndo(r);if(!s.ok)throw new _e(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=In(t.lineage);if(this.policy)for(let h of s.ops){if(!h.mutation)continue;let x=I(h.author).id,b=R=>JSON.stringify(R).includes(JSON.stringify(x)),k=x!==void 0&&x!==I(o).id&&!B(o)&&!b(h.mutation.args)&&b(h.primitives)?{ok:!1,refusal:{mutation:h.mutation.name,wouldNeed:[],message:"it was done as somebody else."}}:this.permits(h.mutation,o);k.ok||this.refuse({...k.refusal,message:`Not permitted to undo "${h.intent}": ${k.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((x,b)=>b.seq-x.seq)){let x={id:this.nextId(),seq:this.log.length,batch:a,author:o,intent:`Undo: ${h.intent}`,...D("batchIntent",t.intent),mutation:null,primitives:h.inverse,inverse:[...h.inverse].reverse().map(Sn),reads:h.reads,writes:h.writes,at:this.now(),undoes:h.id,...D("via",t.via),...D("lineage",d),...D("undoneLineage",h.lineage)};this.graph.applyPrimitives(x.primitives,{restoring:ka(h)}),this.log.append(x),p.push(x)}let f=me(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 vn(e,{graph:this.graph,schema:this.schema})}refuseDeclined(e,t){let r=Os(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&&cs(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 E(`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 E(`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 x of[...i].reverse())this.graph.applyPrimitives(x.inverse,{restoring:!0,inPlace:!0});this.log.truncate(s);let h=new Set(this.log.all().map(x=>x.id));for(let x of e.confirmed){if(h.has(x.id))continue;try{this.graph.applyPrimitives(x.primitives,{restoring:x.undoes!==void 0})}catch(k){throw new en(x,k)}let b={...x,seq:this.log.length};this.log.append(b),h.add(x.id),u.push(b)}for(let x of e.pending){let b=i.filter(k=>k.batch===x);if(b.length!==0)try{p.push(...this.replay(x,b))}catch(k){c.push({batch:x,error:k})}}}catch(h){this.log.truncate(s);for(let x of i)this.log.append(x);throw this.graph.load(l),h}finally{this.quiet--}let f=Ce(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,D("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=Ce(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,...D("intent",r.batchIntent),...D("via",r.via),...D("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 E(`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 Ws(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 E(`Cannot compact a store that does not verify: ${o.reason}`);let i=this.log.checkpointAt(this.schema,r,{validate:this.validate}),s=Is(this.log,r);return Object.keys(s).length>0?{...i,creators:s}:i}compact(e){return this.stillNow(),this.log.compact(e)}};var Ra=["full","summary","glyph"],Kr=(n,e)=>n.as===e.as&&(n.over??[n.kind]).includes(e.kind),Eu=n=>n.filter((e,t)=>!n.slice(0,t).some(r=>Kr(r,e)));function ue(n){return n.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function jn(n,e){return`/${ue(n.tryDefinition(e)?.plural??`${e}s`)}`}function zu(n,e,t){return`${jn(n,e)}/${encodeURIComponent(t)}`}function Mu(n,e){return`/places/${encodeURIComponent(n)}${e?`?of=${encodeURIComponent(e)}`:""}`}function Aa(n,e){return e.some(t=>t.as===n.as&&!Kr(n,t))}function Nu(n,e,t){return Aa(n,e)?`${n.title} \xB7 ${(t.tryDefinition(n.kind)?.plural??`${n.kind}s`).toLowerCase()}`:n.title}var Oe=(n,e,t="")=>`${n}|${e.cardinality}|${e.fidelity}|${t}`;function Ur(n){switch(n){case"full":return["full","summary","glyph"];case"summary":return["summary","full","glyph"];case"glyph":return["glyph","summary","full"]}}function Iu(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}:{}},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(Oe(a,d),c),u?.title){let f=ue(u.title);e.set(Oe(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})}return s},places:()=>t,forget(a,d){for(let u of Ra)e.delete(Oe(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(Oe(a,d))?.view},resolve(a,d,l){if(l)for(let u of Ur(d.fidelity)){let p=e.get(Oe(a,{cardinality:d.cardinality,fidelity:u},l));if(p)return p}for(let u of Ur(d.fidelity)){let p=e.get(Oe(a,{cardinality:d.cardinality,fidelity:u}));if(p)return p}if(d.cardinality==="one")for(let u of Ur(d.fidelity)){let p=e.get(Oe(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 ju=["day","week","month","year","decade"];function Oa(n){let e={};n.q&&n.q.trim().length>0&&(e.query=n.q);let t=cr(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,...ju.includes(o)?{bucket:o}:{}})}return e}function Vr(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 gt(n,e,t){let r=Vr(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 Du(n,e,t){let r=Vr(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 mt={timeline:{binds:"fields",requiredRoles:["start","end"],options:["columns","extent","tick","minWindow","arranging"]},calendar:{binds:"fields",requiredRoles:["start"],options:["today","range","weekStartsOn","perCell","horizon","arranging"]},coverage:{binds:"entities",requiredRoles:["rows","columns","link"],options:["rowRef","rowGroup","groupOrder","requiredGroups","requiredVia","badge","columnGroup","sort","columnSort"]},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"]}},Ea=Object.keys(mt),za=n=>Object.hasOwn(mt,n);var nn=n=>typeof n=="object"&&n!==null&&!Array.isArray(n);function Pa(n,e,t){let r=n.tryDefinition(e)?.fields.shape,o=M(r?.[t]);for(;o&&(o.type==="optional"||o.type==="default"||o.type==="nullable"||o.type==="prefault");)o=M(o.innerType);return o?.type!=="enum"?[]:(o.entries?Object.values(o.entries):o.values??[]).filter(s=>typeof s=="string")}function Tu(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=(y,S)=>{t.push({index:l,name:d.name,...p?{title:p}:{},why:y}),S&&r.push({severity:"warning",...S})};if(!za(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 ${Ea.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=mt[d.name],g=nn(d.options)?d.options:{};if(d.options!==void 0&&!nn(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 y of Object.keys(g))f.options.includes(y)||r.push({severity:"warning",code:"lens-option-unknown",path:`${u}.options.${y}`,message:`The ${d.name} lens takes no option "${y}", so "${p}" ignores it.`,fix:f.options.length===0?`The ${d.name} lens takes no options; drop it.`:`Use one of: ${f.options.join(", ")}.`});let h={};for(let y of f.options)g[y]!==void 0&&(h[y]=g[y]);d.arrangedBy&&(h.arrangedBy=Oa(d.arrangedBy));let x=nn(d.bindings)?d.bindings:{},b=[],k,R=(y,S,v)=>c(S,{code:"lens-cannot-draw",path:y,message:`"${p}" cannot draw: ${S}.`,fix:v});if(f.binds==="fields"){let y=Object.keys(x).filter(v=>nn(x[v])),S=y.filter(v=>!o.has(v));if(y.length===0)return R(`${u}.bindings`,"it binds no kind",`Bind a kind's fields: "bindings": { "<kind>": { ${f.requiredRoles.map(v=>`"${v}": "<field>"`).join(", ")} } }.`);if(S.length>0)return;if(h.bindings=x,b=y,d.name==="timeline"){let v=g.columns;if(Array.isArray(v))h.columns=v.map($=>typeof $=="string"?{id:$,label:$}:$);else{let $=y.flatMap(z=>{let j=x[z],q=typeof j.column=="string"?j.column:typeof j.columns=="string"?j.columns:void 0;return q?Pa(n.schema,z,q):[]}),_=[...new Set($)];if(_.length===0)return R(`${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(z=>({id:z,label:z.toUpperCase()}))}h.extent===void 0&&(h.extent=1440)}if(d.name==="columns"){if(h.sort!==void 0){let v=y.map($=>gt(h.sort,s($),$)).find(Boolean);v&&(r.push({severity:"warning",code:"lens-sort",path:`${u}.options.sort`,message:`"${p}" cannot order its cards: ${v}.`,fix:'Write { "by": "<a field>", "direction": "asc" }, or drop it.'}),delete h.sort)}for(let v of y){let $=x[v].column;if(typeof $!="string"||!s(v).includes($))return;if(Pa(n.schema,v,$).length===0)return R(`${u}.bindings.${v}.column`,`its column field "${$}" is not a choice`,`Bind "column" to a choice field of ${v}, like a status.`)}}if(d.name==="calendar"&&h.today!==void 0&&!(typeof h.today=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(h.today)))return R(`${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 v=h.horizon,$=j=>j===void 0||Number.isInteger(j)&&j>=1&&j<=9999,_=typeof v=="number"?{years:v,title:"Years"}:v;nn(_)&&Number.isInteger(_.years)&&_.years>=1&&_.years<=200&&typeof _.title=="string"&&_.title.trim().length>0&&$(_.from)&&$(_.to)&&Object.keys(_).every(j=>["years","title","from","to"].includes(j))&&!(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 R(`${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 y=$=>{let _=x[$];if(nn(_)){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 $ of f.requiredRoles)if(y($)===void 0)return;let S=d.name==="coverage"?"rows":d.name==="board"?"slots":"regions",v=y(S);if(!o.has(v))return;if(d.name==="coverage"){let $=y("columns");if(!o.has($))return;let _=y("link");if(typeof _=="string"&&!i.has(_))return;Object.assign(h,{rows:v,columns:$,link:_}),$!==v&&(k=$);for(let[z,j]of[["sort",v],["columnSort",$]]){if(h[z]===void 0)continue;let q=gt(h[z],s(j),j);q&&(r.push({severity:"warning",code:"lens-sort",path:`${u}.options.${z}`,message:`"${p}" cannot order its ${z==="sort"?"rows":"columns"}: ${q}.`,fix:`Write { "by": "<a field of ${j}>", "direction": "asc" }, or drop it.`}),delete h[z])}}else if(d.name==="board"){Object.assign(h,{slots:v,x:y("x"),y:y("y"),fill:y("fill")});for(let $ of["x","y"])if(!s(v).includes(h[$]))return}else{Object.assign(h,{regions:v,outline:y("outline")});for(let $ of["markers","at","within","nests","regionKind","markerKind"]){let _=y($);typeof _=="string"&&(h[$]=_)}}b=[v]}else if(d.name==="blocks"){if(!d.on)return R(`${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 R(`${u}.options.blocks`,"it has no blocks to draw",`Say "options": { "blocks": [{ "headline": "\u2026" }, { "list": "all('<kind>')", "as": "card" }] }.`)}else{let y=["user","person","member"].find(S=>o.has(S));if(!d.on&&!y)return R(`${u}.on`,"it does not say which kind it stands on",'Say "on": "<the kind whose records are the people>".');b=y?[y]:[]}if(d.on!==void 0){if(typeof d.on!="string"||!o.has(d.on))return R(`${u}.on`,`it stands on "${String(d.on)}", which is not a kind`,`Use one of: ${[...o].join(", ")}.`);if(b=[d.on],d.name==="coverage"){let y=[h.rows,h.columns].find(S=>S!==d.on);k=typeof y=="string"?y:void 0}}let m=ue(p);if(m.length===0)return R(`${u}.title`,"its title has no letters or digits to make an address of","Give it a title a person would say.");for(let y of b){let S=`${y}|${m}`;if(a.has(S))return c(`another lens on ${y} is already called "${p}"`,{code:"lens-title-taken",path:`${u}.title`,message:`"${p}" is the title of lenses.${a.get(S)} too, on the same kind, so one address would name two pictures.`,fix:"Give each its own title."})}for(let y of b)a.set(`${y}|${m}`,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:m,kinds:b,...k?{across:k}:{},options:h,...d.hidden===!0?{hidden:!0}:{},...w===!1?{create:!1}:{}})}),{drawn:e,undrawn:t,findings:r}}var Fu=6;function Zu(n,e,t=[]){let r=n.kinds,o=s=>Object.values(n.tryDefinition(s)?.edges??{}).map(a=>(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 Lu(n,e,t){if(!n?.primary)return;let r=new Set(n.primary.map(ue));return{kinds:new Set(e.kinds.filter(o=>r.has(ue(o))||r.has(jn(e,o).slice(1)))),places:new Set(t.filter(o=>r.has(o.as)||r.has(ue(o.title))).map(o=>`${o.kind}|${o.as}`))}}var Ma="overview",Cu=`/places/${Ma}`;function Gu(n){let e=n?.scene?.trim();return e||"Scene"}function Bu(n){let e=n?.pages?.trim();return e||"Pages"}function Uu(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 Ku(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=ue(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=>jn(e,d).slice(1)===o);return a?{to:"kind",kind:a}:void 0}function Wr(n){let e=(n??"").replace(/\/+$/,"");return e===""?"":e.startsWith("/")?e:`/${e}`}function Vu(n,e={}){let t=typeof n=="string"?n:n.address,r=Wr(e.basePath),o=t.startsWith("/")?t:`/${t}`;return r===""?o:o==="/"?r:o.startsWith("/?")||o.startsWith("/#")?`${r}${o.slice(1)}`:`${r}${o}`}function Wu(n,e){let t=Wr(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 Na=Symbol.for("@graview/core:app-link"),qu=n=>(Object.defineProperty(M(n),Na,{value:1,enumerable:!0}),n);function Ia(n){let e=M(n);return!!e&&(e[Na]===1||Ia(e.innerType))}var Ax=()=>qu(F().check(nr(500),gn(Hn,"another app's address")));var yt=(n,e)=>`${e.kind}\0${e.id??""}\0${n.address}\0${n.kind}\0${n.id}`;function Hu(n,e,t=()=>{}){let r=new Map,o=new Map,i=s=>{let a=yt(s,e),d=r.get(a);return d||(d=Promise.resolve().then(()=>n.resolve(s,e)).then(l=>Ju(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=yt(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(yt(s,e)),forget(s){if(!s){r.clear(),o.clear();return}let a=yt(s,e);r.delete(a),o.delete(a)}}}function Ju(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 Yu=1;var bt=(n,e)=>`${n}\0${e}`;function Hr(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 qr=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 Hr(r)){let s=bt(o,i);(this.revs.get(s)??-1)<t.seq&&this.revs.set(s,t.seq)}}of(e,t){return this.revs.get(bt(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=bt(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 Xu(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 Hr(r))e.add(bt(o,i))}return e}var Qu=/^#([0-9a-f]{3,8})$/i,el=/(rgba?|hsla?)\(([^)]+)\)/gi;function nl(n){let e=Qu.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 tl(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:{...Da(o,i>1?i/100:i,s>1?s/100:s),a:a??1}}function Yr(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 Xr(n,e,t){return{...Da(n,e,t),a:1}}function Da(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 tn(n){let e=[];for(let t of n.matchAll(el)){let r=tl(t[0]);r&&e.push(r)}for(let t of n.matchAll(/#[0-9a-fA-F]{3,8}\b/g)){let r=nl(t[0]);r&&e.push(r)}return e}function Qr(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 Jr(n){let e=n/255;return e<=.03928?e/12.92:((e+.055)/1.055)**2.4}function ja(n){return .2126*Jr(n.r)+.7152*Jr(n.g)+.0722*Jr(n.b)}function rn(n,e){let[t,r]=[ja(n),ja(e)].sort((o,i)=>i-o);return(t+.05)/(r+.05)}var xt=(n,e)=>`rgba(${Math.round(n.r)}, ${Math.round(n.g)}, ${Math.round(n.b)}, ${e})`,Ta={r:0,g:0,b:0,a:1},vt={r:255,g:255,b:255,a:1};function wt(n){let e=tn(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=Yr(e);for(let s of["dark","light"]){let a=n.base[s],d=tn(a.ground)[0]??(s==="dark"?Ta:vt),l=Qr(tn(a.panel)[0]??vt,d),u=sl(i,[l,d],s,4.5);u?Math.abs(u.l-i.l)>il&&(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=Xr(p.h,p.s,p.l),f=n.accentInk?.[s]??(rn(vt,c)>=rn(Ta,c)?"#ffffff":"#000000"),g=rn(tn(f)[0]??vt,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:xt(c,1),accentDim:xt(c,s==="dark"?.35:.22),accentInk:f,glow:xt(c,s==="dark"?.28:.1),edgeBright:xt(c,rl(c,l,s==="dark"?.55:.42,3)),...n.warn?.[s]?{warn:n.warn[s]}:{}};let h=tn(t[s].warn)[0];h&&ol(Yr(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 rl(n,e,t,r){for(let o=Math.round(t*100);o<=100;o++){let i=o/100;if(rn(Qr({...n,a:i},e),e)>=r)return i}return 1}function ol(n,e){let t=Math.abs(n-e)%360;return t>180?360-t:t}var il=.3;function sl(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=>rn(Xr(n.h,n.s,d),l)>=r))return{...n,l:d}}return null}function al(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 Pe=Object.freeze({navy:"#001769",turquoise:"#00e5b9",paper:"#f7f7f2",ink:"#18213a",muted:"#586174"}),eo="Montserrat",no=Object.freeze({display:550,body:450,label:600}),to=Object.freeze({display:600,body:400,label:600}),dl="-0.025em",cl=Object.freeze({minWidth:140,clearSpace:.5,microMax:24,regularMin:32,microBelow:28});var Fa={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:Pe.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},Za={ground:Pe.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:Pe.ink,inkMuted:Pe.muted,inkFaint:"#626b7d",accent:Pe.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},on={dark:Fa,light:Za};var ve=Object.freeze({radius:8,density:1,radiusSmall:.72,radiusSmallFloor:2,pad:15,padSmall:10,gap:7}),Ee=Object.freeze({body:`"${eo}", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif`,mono:'ui-monospace, SFMono-Regular, "SF Mono", Menlo, monospace'});function ul(n){let e=n?.shape?.radius??ve.radius,t=n?.shape?.density??ve.density;return Object.freeze({radius:e,radiusSmall:Math.max(ve.radiusSmallFloor,Math.round(e*ve.radiusSmall)),pad:Math.round(ve.pad*t),padSmall:Math.round(ve.padSmall*t),gap:Math.round(ve.gap*t)})}function ll(n){let e=n?.typography?.body??Ee.body,t=n?.typography?.display??e,o=e===Ee.body&&t===Ee.body?no:to,i=n?.typography?.weights;return Object.freeze({body:e,display:t,mono:n?.typography?.mono??Ee.mono,weights:Object.freeze({display:i?.display??o.display,body:i?.body??o.body,label:i?.label??o.label})})}var Cx=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 Ca(n){return/^\s*(<\?xml[^>]*>\s*)?(<!--[\s\S]*?-->\s*)*(<!DOCTYPE svg[^>]*>\s*)?<svg[\s>/]/i.test(n)}var Ga="http://www.w3.org/2000/svg",fl=["http://www.w3.org/1999/xhtml","http://www.w3.org/1998/Math/MathML",Ga],pl=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(" ")),hl=new Set(["title","desc"]),Dn="it embeds a page or media",gl={script:"it has a script in it",foreignobject:"it embeds HTML (foreignObject)",iframe:Dn,embed:Dn,object:Dn,audio:Dn,video:Dn,style:"it has a style sheet in it; a mark is styled by its attributes",a:"it links to something (an <a> element)"},ml={amp:"&",lt:"<",gt:">",quot:'"',apos:"'"};function yl(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=ml[o.toLowerCase()];return i===void 0&&(e=!0),i??""});return e?null:t}function bl(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 xl(n,e,t){let r=yl(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===Ga?null:"it changes what its elements are (another xmlns)";if(e.startsWith("xmlns:"))return fl.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 bl(r)?null:o==="style"?"its style loads something outside itself":"it loads or links to something outside itself"}var La=/^\s+([A-Za-z_][A-Za-z0-9_.:-]*)\s*=\s*(?:"([^"<]*)"|'([^'<]*)')/;function Ba(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=gl[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(!pl.has(d))return`it has a <${d}> element, which a picture does not need`;let u=e[e.length-1];if(u&&hl.has(u))return`it has an element inside a <${u}>, which the page reads as HTML`;let p=a[0].length;for(let f=La.exec(o.slice(p));f;f=La.exec(o.slice(p))){let g=xl(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 Ua(n){if(n){if(!Ca(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 Ba(n)===null?`data:image/svg+xml,${encodeURIComponent(n.trim())}`:void 0}}var kt;function vl(){if(kt===void 0)try{kt=new RegExp("^\\p{RGI_Emoji}$","v")}catch{kt=null}return kt}function wl(n){return/\p{Extended_Pictographic}|\p{Regional_Indicator}|⃣/u.test(n)}function ro(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(wl).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=vl();return r&&!r.test(n)?"it is not one of the standard emoji every emoji set draws":null}function oo(n){return typeof n=="object"&&n!==null&&typeof n.emoji=="string"?n.emoji:void 0}function Ka(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 kl(n){let e=n?.favicon;if(typeof e=="object"&&e!==null){let t=oo(e);return t!==void 0&&ro(t)===null?`data:image/svg+xml,${encodeURIComponent(Ka(t))}`:void 0}return Ua(e)}function Sl(n){if(n?.logo)return;let e=oo(n?.favicon);return e!==void 0&&ro(e)===null?e:void 0}var Va={"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":Ee.mono},$l=["serif","sans-serif","monospace","cursive","fantasy","system-ui","math","emoji","-apple-system","BlinkMacSystemFont"],Wa=["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 _l=n=>new Set(n.map(e=>e.toLowerCase()));function Rl(n){return _l([...$l,...Wa]).has(n.toLowerCase())||n.toLowerCase().startsWith("ui-")}function Al(n){return Va[n]??n}function qx(n){let e=wt({accent:n,base:on});return e.ok||!e.missing.every(t=>t.startsWith("warn"))?e:wt({accent:n,base:on,warn:{light:on.light.bad,dark:on.dark.bad}})}function Ol(n,e,t){if(t.rows===0)return;let r=J(n,e.rows).toLowerCase(),o=J(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=Y(n.tryDefinition(e.rows),e.rows);return i?`No ${a} is linked to another yet: ${s}.`:`No ${a} is linked to ${ze(Y(n.tryDefinition(e.columns),e.columns))} yet: ${s}.`}var te={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 Pl(n){return n?{connectors:{all:{...te.connectors.all,...n.connectors?.all??{}},byEdge:{...te.connectors.byEdge,...n.connectors?.byEdge??{}}},captions:{...te.captions,...n.captions??{}},grid:{...te.grid,...n.grid??{}},lattice:{...te.lattice,...n.lattice??{}},tags:{...te.tags,...n.tags??{}},emphasis:{...te.emphasis,...n.emphasis??{}},marks:{...te.marks,...n.marks??{}}}:te}function El(n,e){return{...n.connectors.all,...n.connectors.byEdge[e]??{}}}function zl(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
|
|
1
|
+
var lo="en-US",an=/^\d{4}-\d{2}-\d{2}$/,_t=/^\d{4}(-\d\d){2}[T ]\d\d:\d\d(:[\d.]+)?(Z|[+-][\d:]+)?$/,Fl=n=>!Number.isNaN(Date.parse(n)),dn=()=>new Date().toISOString().slice(0,10),fo,po;function qa(n){fo=$t(n.reader),po=$t(n.app)}var ho=n=>fo??$t(n)??po??lo,sn=new Map;function $t(n){if(n&&!sn.has(n)){let e=!1;try{e=Intl.DateTimeFormat.supportedLocalesOf(n).length>0}catch{}sn.set(n,e)}return n&&sn.get(n)?n:void 0}function le(n,e,t,r){let o=`${t=ho(t)}${r?"#":"@"}${JSON.stringify(e)}`,i=sn.get(o);return i||sn.set(o,i=r?new Intl.NumberFormat(t,e):new Intl.DateTimeFormat(t,e)),i.format(n).replace(/ /g," ")}var we="UTC",Fn=n=>Date.UTC(+n.slice(0,4),+n.slice(5,7)-1,+n.slice(8,10));function fe(n,e){return an.test(n)?le(Fn(n),{year:"numeric",month:"short",day:"numeric",timeZone:we},e):n}function go(n,e,t,r=!1){if(!_t.test(n))return n;let o=/[Z+-][\d:]*$/.test(n.slice(16)),i=Date.parse(n.replace(" ","T")+(o?"":"Z"));return Number.isNaN(i)?n:le(i,{...e,hour:"numeric",minute:"2-digit",...o?r?{timeZoneName:"short"}:{}:{timeZone:we}},t)}var Rt=(n,e)=>go(n,{year:"numeric",month:"short",day:"numeric"},e,!0),Ha=(n,e)=>go(n,{},e);function re(n,e,t={maximumFractionDigits:2}){return Number.isFinite(n)?le(n,t,e,!0):String(n)}function Ja(n,e={},t){return an.test(n)?le(Fn(n),{weekday:e.weekday??"long",month:"short",day:"numeric",...e.year?{year:"numeric"}:{},timeZone:we},t):n}function Ya(n,e){return an.test(n)?le(Fn(n),{month:"short",day:"numeric",timeZone:we},e):n}function Xa(n,e={},t){if(!/^\d{4}-\d{2}/.test(n))return n;let r=e.year??!e.short;return le(Fn(`${n.slice(0,7)}-01`),{month:e.short?"short":"long",...r?{year:e.short?"2-digit":"numeric"}:{},timeZone:we},t)}var Qa=(n,e="short",t)=>le(Date.UTC(1970,0,4+n),{weekday:e,timeZone:we},t),ed=(n,e)=>le(Date.UTC(1970,0,1,0,Math.round(n)),{hour:"numeric",minute:"2-digit",timeZone:we},e),nd=/(?<![\w-])(\d{4}-\d{2}-\d{2})(?![\w-]|:)/g;function At(n,e){return n.includes("-")?n.replace(nd,t=>fe(t,e)):n}var cn=n=>n.charAt(0).toUpperCase()+n.slice(1),mo=(n,e="and")=>n.length>1?`${n.slice(0,-1).join(", ")} ${e} ${n.at(-1)}`:n[0]??"";function td(n,e){return{...e,kind:n,edges:e.edges??{}}}function Ot(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??dn()):!r.retired.includes(o)}function T(n,e){if(n?.label)return n.label(e);let t=e.label;return typeof t=="string"&&t.length>0?t:e.id}function rd(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 cn(e)}function od(n,e,t){let r=n.tryDefinition(e);return`${re(t)} ${t===1?Y(r,e):J(n,e).toLowerCase()}`}function J(n,e){return n.tryDefinition(e)?.plural??`${C(e).toLowerCase()}s`}function id(n,e){return cn(J(n,e))}function sd(n,e){let t=J(n,e);return`All ${/^[A-Z][a-z]/.test(t)?t.charAt(0).toLowerCase()+t.slice(1):t}`}function Zn(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 ad=/^(u[nt]i|use|usu|uti|ubiq|eu|ewe|one|once)/,dd=/^(hour|honest|hono[ur]r?|heir)/;function yo(n){let e=C(n).toLowerCase();return dd.test(e)?"an":ad.test(e)?"a":/^[aeiou]/.test(e)?"an":"a"}function ze(n){return`${yo(n)} ${C(n).toLowerCase()}`}function Y(n,e){return n?.noun??C(e).toLowerCase()}function zt(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 Mt(n,e="|"){return n.map(t=>Tt(t)).join(e)}function bo(n,e){return typeof e=="bigint"?e.toString():e}var Et=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 xo(n){return new Et(n)}function vo(n){return n==null}function Nt(n){let e=n.startsWith("^")?1:0,t=n.endsWith("$")?n.length-1:n.length;return n.slice(e,t)}function wo(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 Cn(n,e,t){Object.defineProperty(n,e,{value:t,writable:!0,enumerable:!0,configurable:!0})}function ko(n){let e=Object.getOwnPropertyDescriptor(n,"shape");return e?.get?e.get.raw:e?.value}function It(n){return ko(n._zod.def)??n._zod.def.shape}function So(n,e,t){Object.defineProperty(n,e,{get(){let r=t();return Cn(this,e,r),r},enumerable:!0,configurable:!0})}function $o(n,e,t){e in n?Cn(n,e,t):n[e]=t}function cd(n,e,t,r){let o=It(e);for(let i of t){let s=Object.getOwnPropertyDescriptor(o,i);s.enumerable&&(s.get?So(n,i,()=>{let a=e._zod.def.shape[i];return r?r(a,i):a}):$o(n,i,r?r(s.value,i):s.value))}}function ud(n,e){for(let t of Reflect.ownKeys(e)){let r=Object.getOwnPropertyDescriptor(e,t);r.enumerable&&(r.get?So(n,t,()=>e[t]):$o(n,t,r.value))}}function _o(...n){let e={};for(let t of n){let r=Object.getOwnPropertyDescriptors(t);Object.assign(e,r)}return Object.defineProperties({},e)}var jt="captureStackTrace"in Error?Error.captureStackTrace:(...n)=>{};function Ln(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Dt(n){if(Ln(n)===!1)return!1;let e=n.constructor;if(e===void 0||typeof e!="function")return!0;let t=e.prototype;return!(Ln(t)===!1||Object.prototype.hasOwnProperty.call(t,"isPrototypeOf")===!1)}var Ro=new Set(["string","number","symbol"]);function ln(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Me(n,e,t){let r=new n._zod.constr(e??n._zod.def);return(!e||t?.parent)&&(r._zod.parent=n),r}function P(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 Tt(n){return typeof n=="bigint"?n.toString()+"n":typeof n=="string"?`"${n}"`:`${n}`}function Ao(n){return Object.keys(n).filter(e=>n[e]._zod.optin!==void 0&&n[e]._zod.optout==="optional")}var Oo={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 Po(n,e){if(!Dt(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=It(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 Me(n,_o(n._zod.def,{shape:ld(n,e)}))}function ld(n,e){let t={};return cd(t,n,Reflect.ownKeys(It(n))),ud(t,e),t}function oe(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 Eo(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 he(n,e){return e.map(t=>{var r;return(r=t).path??(r.path=[]),t.path.unshift(n),t})}function un(n){return typeof n=="string"?n:n?.message}function Ft(n,e,t){var r;for(let o=e;o<n.length;o++)(r=n[o]).schema??(r.schema=t)}function ie(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:un(n.inst?._zod.def?.error?.(n))??un(i?.(n))??un(e?.error?.(n))??un(t.customError?.(n))??un(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 fd=/[\uD800-\uDBFF]/;function Zt(n){let e=n.length;if(!fd.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 Lt(n){return Array.isArray(n)?"array":typeof n=="string"?"string":"unknown"}function zo(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 fn(...n){let[e,t,r]=n;return typeof e=="string"?{message:e,code:"custom",input:t,inst:r}:{...e}}function Mo(n,e){for(let t in e){let r=Object.getOwnPropertyDescriptor(e,t);r.get?Object.defineProperty(n,t,{...r,enumerable:!1}):pd(n,t,r.value)}}function ke(n,e,t,r=!0){return Object.defineProperty(n,e,{configurable:!0,writable:!0,enumerable:r,value:t}),t}function Ct(n,e,t){return ke(n,e,t,!1)}function pd(n,e,t){Object.defineProperty(n,e,{configurable:!0,get(){return this==null?t:ke(this,e,t.bind(this))},set(r){ke(this,e,r)}})}function hd(n,e){let t=Object.getPrototypeOf(n);return e in t?void 0:t}var Pt,pe=!1,gd={configurable:!0,get(){pe=!0}};function X(n,e,t){let r=Object.getPrototypeOf(n._zod);if(e in r&&Pt!==n._zod){Pt=void 0;return}Pt=n._zod,Object.defineProperty(r,e,{configurable:!0,get(){Object.defineProperty(this,e,gd);let o=pe;pe=!1;try{let i=t(this);return pe?delete this[e]:Object.defineProperty(this,e,{configurable:!0,writable:!0,value:i}),pe=pe||o,i}catch(i){throw delete this[e],pe=pe||o,i}},set(o){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:o})}})}function No(n,e,t,r){let o=hd(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 Io;var Gt={value:void 0,enumerable:!1},jo="captureStackTrace"in Error?Error:null;function md(n){let e=jo;if(e){let t=e.stackTraceLimit;if(typeof t=="number"){try{e.stackTraceLimit=0}catch{return jo=null,new n}try{return new n}finally{e.stackTraceLimit=t}}}return new n}function A(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{Gt.value=new i(f);try{Object.defineProperty(c,"_zod",Gt)}finally{Gt.value=void 0}}if(c._zod.traits.add(n),e(c,f),a){let h=Object.getPrototypeOf(c),x=c._zod.constr.prototype,b=h;for(;b&&b!==x;)b=Object.getPrototypeOf(b);let k=b??h;a.has(k)||(a.add(k),Mo(k,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?md(u):this;d(f,c);let g=f._zod.deferred;if(g){for(let x of g)x();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 ae=class extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}};(Io=globalThis).__zod_globalConfig??(Io.__zod_globalConfig={});var Ne=globalThis.__zod_globalConfig;function V(n){return n&&Object.assign(Ne,n),Ne}function yd(){let n=this._zod;return n.message??(n.message=JSON.stringify(n.def,bo,2)),n.message}function bd(n){this._zod.message=n}var xd={get:yd,set:bd,enumerable:!0,configurable:!0},Ut={value:void 0,enumerable:!1},Do=new WeakSet([Object.prototype,Error.prototype]),To=(n,e)=>{n.name="$ZodError",Ut.value=e,Object.defineProperty(n,"issues",Ut),Ut.value=void 0,Object.defineProperty(n,"message",xd);let t=Object.getPrototypeOf(n);Do.has(t)||(Do.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})}}))},Vl=A("$ZodError",To),pn=A("$ZodError",To,void 0,{Parent:Error});var wd=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 ae;if(a.issues.length){let d=new(i?.Err??n)(a.issues.map(l=>ie(l,s,V())));throw jt(d,i?.callee??e),d}return a.value};return e},Kt=wd(pn),kd=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=>ie(l,s,V())));throw jt(d,i?.callee??e),d}return a.value};return e},Vt=kd(pn),Sd=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 ae;return i.issues.length?Fo(n,i.issues,o):{success:!0,data:i.value}},Wt=Sd(pn);function Fo(n,e,t){let r;return{success:!1,get error(){return r||(r=new n(e.map(o=>ie(o,t,V()))),e=void 0,t=void 0),r},set error(o){r=o,e=void 0,t=void 0}}}var $d=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?Fo(n,i.issues,o):{success:!0,data:i.value}},qt=$d(pn);var Zo=/^(?:[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 Lo=/^https?$/;var Co=/^[\s\S]{0,}$/;var Ht=/^-?\d+(?:\.\d+)?$/,Go=/^(?:true|false)$/i,Bo=/^null$/i;var W=A("$ZodCheck",(n,e)=>{var t;n._zod??(n._zod={}),n._zod.def=e,(t=n._zod).onattach??(t.onattach=[])});var Uo=n=>{let e=n.value;return!vo(e)&&e.length!==void 0},Gn={number:"number",bigint:"bigint",object:"date"},Ko=A("$ZodCheckLessThan",(n,e)=>{W.init(n,e);let t=Gn[typeof e.value];n._zod.check=r=>{(e.inclusive?r.value<=e.value:r.value<e.value)||r.issues.push({origin:Gn[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})}}),Vo=A("$ZodCheckGreaterThan",(n,e)=>{W.init(n,e);let t=Gn[typeof e.value];n._zod.check=r=>{(e.inclusive?r.value>=e.value:r.value>e.value)||r.issues.push({origin:Gn[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})}}),Wo=A("$ZodCheckMultipleOf",(n,e)=>{W.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):wo(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})}}),qo=A("$ZodCheckNumberFormat",(n,e)=>{W.init(n,e),e.format=e.format||"float64";let t=e.format?.includes("int"),r=t?"int":"number",[o,i]=Oo[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 Ho=A("$ZodCheckMaxLength",(n,e)=>{var t;W.init(n,e),(t=n._zod.def).when??(t.when=Uo),n._zod.check=r=>{let o=r.value,i=o.length;if((typeof o=="string"&&i>e.maximum?Zt(o):i)<=e.maximum)return;let a=Lt(o);r.issues.push({origin:a,code:"too_big",maximum:e.maximum,inclusive:!0,input:o,inst:n,continue:!e.abort})}}),Jo=A("$ZodCheckMinLength",(n,e)=>{var t;W.init(n,e),(t=n._zod.def).when??(t.when=Uo),n._zod.check=r=>{let o=r.value,i=o.length;if((typeof o=="string"&&i>=e.minimum&&i<e.minimum*2?Zt(o):i)>=e.minimum)return;let a=Lt(o);r.issues.push({origin:a,code:"too_small",minimum:e.minimum,inclusive:!0,input:o,inst:n,continue:!e.abort})}});var Yt=A("$ZodCheckStringFormat",(n,e)=>{var t,r;W.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=()=>{})}),Yo=A("$ZodCheckRegex",(n,e)=>{Yt.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 Qo={major:4,minor:6,patch:5};var Z=A("$ZodType",(n,e)=>{var t;n??(n={}),n._zod.def=e,n._zod.bag=n._zod.bag||{},n._zod.version=Qo;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=oe(a),p;for(let c of d){if(c._zod.def.when){if(Eo(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 ae;if(p||g instanceof Promise)p=(p??Promise.resolve()).then(async()=>{await g,a.issues.length!==f&&(Ft(a.issues,f,n),u||(u=oe(a,f)))});else{if(a.issues.length===f)continue;Ft(a.issues,f,n),u||(u=oe(a,f))}}return p?p.then(()=>a):a},s=(a,d,l)=>{if(oe(a))return a.aborted=!0,a;let u=i(d,o,l);if(u instanceof Promise){if(l.async===!1)throw new ae;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 ae;return l.then(u=>i(u,o,d))}return i(l,o,d)}}},{get"~standard"(){return Ct(this,"~standard",Rd(this))},set"~standard"(n){ke(this,"~standard",n)}}),ii=(n,e)=>n.issues.length?{issues:n.issues.map(t=>ie(t,e,V()))}:{value:n.value};async function _d(n,e){let t={async:!0};return ii(await n._zod.run({value:e,issues:[]},t),t)}function Rd(n){return{validate:e=>{let t={async:!1};try{let r=n._zod.run({value:e,issues:[]},t);if(!(r instanceof Promise))return ii(r,t)}catch{}return _d(n,e)},vendor:"zod",version:1}}var Xt=A("$ZodString",(n,e)=>{Z.init(n,e),n._zod.pattern=e.pattern??Co,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}}),Kn=A("$ZodStringFormat",(n,e)=>{Yt.init(n,e),Xt.init(n,e)});var si=A("$ZodEmail",(n,e)=>{e.pattern??(e.pattern=Zo),Kn.init(n,e)}),ai=1,Bn=2;function Ad(n){try{return typeof URL<"u"&&typeof URL.canParse=="function"?URL.canParse(n):(new URL(n),!0)}catch{return!1}}function Od(n,e){return!("normalize"in e)&&!("hostname"in e)&&!("protocol"in e)?Ad(n)||Bn:Pd(n,e)}function Pd(n,e){if(!e.normalize&&e.protocol?.source===Lo.source&&!/^https?:\/\//i.test(n))return ai;try{if(typeof URL<"u"){let t=URL;if(typeof t.parse=="function")return t.parse(n)??Bn}return new URL(n)}catch{return Bn}}var Ed=/[\t\n\r]/g;function ei(n){return n.replace(Ed,"")}function zd(n,e){return e.lastIndex=0,e.test(n.hostname)}function Md(n,e){return e.lastIndex=0,e.test(n.protocol.endsWith(":")?n.protocol.slice(0,-1):n.protocol)}var di=A("$ZodURL",(n,e)=>{Kn.init(n,e),n._zod.check=t=>{try{let r=t.value.trim(),o=Od(r,e);if(o===ai){t.issues.push({code:"invalid_format",format:"url",note:"Invalid URL format",input:t.value,inst:n,continue:!e.abort});return}if(o===Bn){t.issues.push({code:"invalid_format",format:"url",input:t.value,inst:n,continue:!e.abort});return}if(o===!0){t.value=ei(r);return}e.hostname&&!zd(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&&!Md(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:ei(r);return}catch{t.issues.push({code:"invalid_format",format:"url",input:t.value,inst:n,continue:!e.abort})}}});var Qt=A("$ZodNumber",(n,e)=>{Z.init(n,e),n._zod.pattern=Ht,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}}),ci=A("$ZodNumberFormat",(n,e)=>{qo.init(n,e),Qt.init(n,e)}),ui=A("$ZodBoolean",(n,e)=>{Z.init(n,e),n._zod.pattern=Go,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 li=A("$ZodNull",(n,e)=>{Z.init(n,e),n._zod.pattern=Bo,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 fi=A("$ZodUnknown",(n,e)=>{Z.init(n,e),n._zod.parse=t=>t}),pi=A("$ZodNever",(n,e)=>{Z.init(n,e),n._zod.parse=(t,r)=>(t.issues.push({expected:"never",code:"invalid_type",input:t.value,inst:n}),t)});function ni(n,e,t){n.issues.length&&e.issues.push(...he(t,n.issues)),e.value[t]=n.value}var hi=A("$ZodArray",(n,e)=>{Z.init(n,e);let t=Ne.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=>ni(p,r,d)));else if(ni(u,r,d),a&&u.issues.length!==0&&oe(u))break}return s.length?Promise.all(s).then(()=>r):r}});function Un(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(...he(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 Nd=[];function Id(n){let e=Object.keys(n.shape),t=Object.getOwnPropertySymbols(n.shape),r=t.length?t:Nd,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=Ao(n.shape);return{...n,allKeys:o,symbolKeys:r,keySet:new Set(e),numKeys:e.length,optionalKeys:new Set(i)}}function jd(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(oe(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(x=>Un(x,t,g,e,p,c))):Un(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 gi=A("$ZodObject",(n,e)=>{Z.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=xo(()=>Id(e));X(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)||Cn(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=Ln,s=e.catchall,a,d=Ne.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 x of a.allKeys){if(g&&l.issues.length!==h){if(oe(l,h))break;h=l.issues.length}if(x==="__proto__")continue;let b=f[x],k=b._zod.optin,R=b._zod.optout,m=b._zod.run({value:p[x],issues:[]},u);m instanceof Promise?c.push(m.then(w=>Un(w,l,x,p,k,R))):Un(m,l,x,p,k,R)}return s?jd(c,p,l,u,o.value,n,g===!0):c.length?Promise.all(c).then(()=>l):l}});function ti(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=>!oe(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=>ie(s,r,V())))}),e)}var mi=A("$ZodUnion",(n,e)=>{Z.init(n,e),X(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),X(n,"optout",r=>r.def.options.some(o=>o._zod.optout==="optional")?"optional":void 0),X(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)))}),X(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=>Nt(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=>ti(a,r,n,o)):ti(s,r,n,o)}});var yi=A("$ZodRecord",(n,e)=>{Z.init(n,e);let t=Ne.memoizer;t?.attach(n),n._zod.parse=(r,o)=>{let i=r.value;if(!Dt(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=>ie(g,o,V())),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(...he(u,g.issues)),r.value[c]=g.value})):(f.issues.length&&r.issues.push(...he(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"&&Ht.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=>ie(g,o,V())),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(...he(l,g.issues)),r.value[c]=g.value})):(f.issues.length&&r.issues.push(...he(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 bi=A("$ZodEnum",(n,e)=>{Z.init(n,e);let t=zt(e.entries),r=new Set(t);n._zod.values=r,X(n,"pattern",o=>{let i=zt(o.def.entries).filter(s=>Ro.has(typeof s));return new RegExp(i.length?`^(${i.map(s=>ln(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}}),xi=A("$ZodLiteral",(n,e)=>{Z.init(n,e);let t=new Set(e.values);n._zod.values=t,X(n,"pattern",r=>{let o=r.def.values;return new RegExp(o.length?`^(${o.map(i=>typeof i=="string"?ln(i):i?ln(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 ri(n,e){return n.value=e.issues.length?void 0:e.value,n}var vi=A("$ZodOptional",(n,e)=>{Z.init(n,e),X(n,"optin",t=>t.def.innerType._zod.optin==="defaulted"?"defaulted":"optional"),n._zod.optout="optional",X(n,"values",t=>{let r=t.def.innerType._zod.values;return r?new Set([...r,void 0]):void 0}),X(n,"pattern",t=>{let r=t.def.innerType._zod.pattern;return r?new RegExp(`^(${Nt(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=>ri(t,i)):ri(t,o)}return e.innerType._zod.run(t,r)}});var wi=A("$ZodCustom",(n,e)=>{W.init(n,e),Z.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=>oi(i,t,r,n));oi(o,t,r,n)}});function oi(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(fn(o))}}var Dd=()=>{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=zo(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 ${Tt(i.values[0])}`:`Invalid option: expected one of ${Mt(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":""}: ${Mt(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 ki(){return{localeError:Dd()}}var Si;var er=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 $i(){return new er}(Si=globalThis).__zod_globalRegistry??(Si.__zod_globalRegistry=$i());var Ie=globalThis.__zod_globalRegistry;function _i(n){return n.checks&&(n.checks=[...n.checks]),n}function Ri(n,e){return new n(_i({type:"string",...P(e)}))}function Ai(n,e){return new n({type:"string",format:"email",check:"string_format",abort:!1,...P(e)})}function Oi(n,e){return new n({type:"string",format:"url",check:"string_format",abort:!1,...P(e)})}function Pi(n,e){return new n(_i({type:"number",checks:[],...P(e)}))}function Ei(n,e){return new n({type:"number",check:"number_format",abort:!1,format:"safeint",...P(e)})}function zi(n,e){return new n({type:"boolean",...P(e)})}function Mi(n,e){return new n({type:"null",...P(e)})}function Ni(n){return new n({type:"unknown"})}function Ii(n,e){return new n({type:"never",...P(e)})}function ji(n,e){return new Ko({check:"less_than",...P(e),value:n,inclusive:!0})}function Di(n,e){return new Vo({check:"greater_than",...P(e),value:n,inclusive:!0})}function Ld(n,e){return new Wo({check:"multiple_of",...P(e),value:n})}function nr(n,e){return new Ho({check:"max_length",...P(e),maximum:n})}function hn(n,e){return new Jo({check:"min_length",...P(e),minimum:n})}function gn(n,e){return new Yo({check:"string_format",format:"regex",...P(e),pattern:n})}function Ti(n,e,t){return new n({type:"custom",check:"custom",fn:e,...P(t)})}function Fi(n,e){let t=Cd(r=>(r.addIssue=o=>{if(typeof o=="string")r.issues.push(fn(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(fn(i))}},n(r.value,r)),e);return t}function Cd(n,e){let t=new W({check:"custom",...P(e)});return t._zod.check=n,t}function Zi(n){let e=new W({check:"describe"});return e._zod.onattach=[t=>{let r=Ie.get(t)??{};Ie.add(t,{...r,description:n})}],e._zod.check=()=>{},e}var U=A("ZodMiniType",(n,e)=>{if(!n._zod)throw new Error("Uninitialized schema in ZodMiniType.");Z.init(n,e),n.def=e,n.type=e.type},{get with(){return this.check},set with(n){ke(this,"with",n)},parse(n,e){return Kt(this,n,e,{callee:this.parse})},parseAsync(n,e){return Vt(this,n,e,{callee:this.parseAsync})},safeParse(n,e){return Wt(this,n,e)},safeParseAsync(n,e){return qt(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 Me(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)}}),Ci=A("ZodMiniString",(n,e)=>{Xt.init(n,e),U.init(n,e)});function F(n){return Ri(Ci,n)}var Gi=A("ZodMiniStringFormat",(n,e)=>{Kn.init(n,e),Ci.init(n,e)}),Ud=A("ZodMiniEmail",(n,e)=>{si.init(n,e),Gi.init(n,e)});function Yh(n){return Ai(Ud,n)}var Kd=A("ZodMiniURL",(n,e)=>{di.init(n,e),Gi.init(n,e)});function Xh(n){return Oi(Kd,n)}var Bi=A("ZodMiniNumber",(n,e)=>{Qt.init(n,e),U.init(n,e)});function Vn(n){return Pi(Bi,n)}var Vd=A("ZodMiniNumberFormat",(n,e)=>{ci.init(n,e),Bi.init(n,e)});function Qh(n){return Ei(Vd,n)}var Wd=A("ZodMiniBoolean",(n,e)=>{ui.init(n,e),U.init(n,e)});function eg(n){return zi(Wd,n)}var qd=A("ZodMiniNull",(n,e)=>{li.init(n,e),U.init(n,e)});function ng(n){return Mi(qd,n)}var Hd=A("ZodMiniUnknown",(n,e)=>{fi.init(n,e),U.init(n,e)});function tr(){return Ni(Hd)}var Jd=A("ZodMiniNever",(n,e)=>{pi.init(n,e),U.init(n,e)});function Yd(n){return Ii(Jd,n)}var Xd=A("ZodMiniArray",(n,e)=>{hi.init(n,e),U.init(n,e)});function tg(n,e){return new Xd({type:"array",element:n,...P(e)})}var rr=A("ZodMiniObject",(n,e)=>{gi.init(n,e),U.init(n,e),No(n,"shape",t=>t._zod.def.shape,!1)});function je(n,e){let t={type:"object",shape:n??{},...P(e)};return new rr(t)}function Wn(n,e){return new rr({type:"object",shape:n,catchall:Yd(),...P(e)})}function rg(n,e){return new rr({type:"object",shape:n,catchall:tr(),...P(e)})}function Ui(n,e){return Po(n,e)}var Qd=A("ZodMiniUnion",(n,e)=>{mi.init(n,e),U.init(n,e)});function og(n,e){return new Qd({type:"union",options:n,...P(e)})}var Li=A("ZodMiniRecord",(n,e)=>{yi.init(n,e),U.init(n,e)});function ig(n,e,t){return!e||!e._zod?new Li({type:"record",keyType:F(),valueType:n,...P(e)}):new Li({type:"record",keyType:n,valueType:e,...P(t)})}var ec=A("ZodMiniEnum",(n,e)=>{bi.init(n,e),U.init(n,e),n.options=[...n._zod.values]});function Ki(n,e){let t=Array.isArray(n)?Object.fromEntries(n.map(r=>[r,r])):n;return new ec({type:"enum",entries:t,...P(e)})}var nc=A("ZodMiniLiteral",(n,e)=>{xi.init(n,e),U.init(n,e)});function Vi(n,e){return new nc({type:"literal",values:Array.isArray(n)?n:[n],...P(e)})}var tc=A("ZodMiniOptional",(n,e)=>{vi.init(n,e),U.init(n,e)});function de(n){return new tc({type:"optional",innerType:n})}var rc=A("ZodMiniCustom",(n,e)=>{wi.init(n,e),U.init(n,e)});function qn(n,e={}){return Ti(rc,n,e)}function sg(n,e){return Fi(n,e)}var ag=Zi;V().localeError||V(ki());var M=n=>typeof n=="object"&&n!==null?n._zod?.def:void 0,oc=n=>{if(typeof n!="object"||n===null||!("_zod"in n))return;let e=Ie.get(n)?.description;return typeof e=="string"?e:void 0};var ic=(n,e)=>n?.src?.(e)??e,Wi=n=>typeof n=="string"&&n.length<2049&&/^(?![^/?#]*:|\/\/)(?!(?:.*\/)?\.\.?(?:[/?#]|$))(?!.*%2e)[^\\\s]+$/i.test(n),or=(n,e=1)=>e>0&&n===void 0||Number.isInteger(n)&&n>=e;function ir(n){let e=n??{};return Wi(e.href)&&typeof e.name=="string"&&/^.{1,255}$/s.test(e.name)&&/^[\w.+-]{1,60}\/[\w.+-]{1,60}$/.test(e.type)&&or(e.bytes,0)&&or(e.width)&&or(e.height)&&(e.caption===void 0||typeof e.caption=="string"&&e.caption.length<501)}var qi=n=>n.type.startsWith("image/"),mn=n=>(Array.isArray(n)?n:[n]).filter(ir),Hi=Symbol.for("@graview/core:file"),sc=(n,e)=>(Object.defineProperty(M(n),Hi,{value:e,enumerable:!0}),n);function Ji(n){let e=M(n);return e?.[Hi]??(e?.innerType?Ji(e.innerType):void 0)}var ac=()=>({href:F(),name:F(),type:F(),bytes:Vn(),width:de(Vn()),height:de(Vn()),caption:de(F())});function dm(n){return sc(je(ac()).check(qn(e=>ir(e)&&(n==="file"||qi(e)),`${n==="image"?"an image":"a file"} the host stored, at a path on this host`)),n)}var Hn=/^(?:https?:\/\/[^\s<>"'`\\]+|@?[A-Za-z0-9][\w.~-]*(?:\/[\w.~-]+)*)$/,Jn=n=>typeof n=="string"&&n.length<501&&Hn.test(n);var Yi=n=>typeof n=="object"&&n!==null?n._zod?.def:void 0,dc=/^@(?:https?:\/\/[^\s<>"'`\\#?]+|[A-Za-z0-9][\w.~-]*(?:\/[\w.~-]+)*)\/[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;function Xi(n){if(typeof n!="string"||!n.startsWith("@")||!dc.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 Jn(o)?{address:o,kind:r}:void 0}var cc=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*:\S[^\n]{0,199}$/,uc=n=>`${n.kind}:${n.id}`;function Qi(n,e){if(typeof n!="string"||!cc.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 lc(n,e){return(Array.isArray(n)?n:n==null?[]:[n]).flatMap(r=>{let o=Qi(r,e);return o?[o]:[]})}var es=Symbol.for("@graview/core:linked"),fm=(n,e)=>(Object.defineProperty(Yi(n),es,{value:e,enumerable:!0}),n);function yn(n){let e=Yi(n);return e?e[es]??yn(e.innerType):void 0}function fc(n){let e=n?.fields?.shape??{},t=new Map;for(let[r,o]of Object.entries(e)){let i=yn(o);i&&t.set(r,i)}return t}function pc(n){if(n.to==="*"||n.to.length===0)return;let e=n.to.map(Xi);if(e.some(r=>!r))return;let t=e[0].address;if(!e.some(r=>r.address!==t))return{address:t,kinds:[...new Set(e.map(r=>r.kind))],cardinality:n.cardinality??"many",...n.description?{description:n.description}:{}}}var hc=n=>n.to!=="*"&&n.to.some(e=>typeof e=="string"&&e.startsWith("@"));function pm(n){return Object.fromEntries(Object.entries(n??{}).filter(([,e])=>!hc(e)))}function hm(n){let e=new Map;for(let[t,r]of Object.entries(n??{})){let o=pc(r);o&&e.set(t,o)}return e}var sr=new WeakMap;function gc(n,e){e?sr.set(n,e):sr.delete(n)}var ns=n=>sr.get(n);var Yn=["sun","mon","tue","wed","thu","fri","sat"],mc=["day","week","month","year"],Te=n=>`${n}Repeat`,xn=n=>n.endsWith("Repeat")&&n.length>6?n.slice(0,-6):void 0,os=/^\d{4}-\d{2}-\d{2}$/,is=Symbol.for("@graview/core:repeat");function Xn(n){let e=M(n);return!!e&&(e[is]===1||Xn(e.innerType))}var yc=n=>(Object.defineProperty(M(n),is,{value:1,enumerable:!0}),n),ar=(n,e,t)=>n===void 0||Number.isInteger(n)&&n>=e&&n<=t,ts=(n,e)=>n===void 0||Array.isArray(n)&&n.length<=e&&n.every(t=>typeof t=="string"&&os.test(t)),bc=["every","interval","on","until","count","except","continues"],ss=n=>Fe(n)&&Object.keys(n).every(e=>bc.includes(e))&&ar(n.interval,1,99)&&ar(n.count,1,1e3)&&ts(n.until===void 0?void 0:[n.until],1)&&ts(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"?Yn.includes(e):n.every==="month"&&e!==0&&ar(e,-1,31))),ym=()=>yc(tr().check(qn(n=>n===null||ss(n),"how a date repeats, or null"))),bn=n=>Date.UTC(+n.slice(0,4),+n.slice(5,7)-1,+n.slice(8,10)),as=n=>new Date(n).toISOString().slice(0,10),dr=(n,e)=>as(bn(n)+e*864e5),rs=(n,e,t)=>{let r=new Date(Date.UTC(n,e+1,0)).getUTCDate();return as(Date.UTC(n,e,t<0||t>r?r:t))},Fe=n=>typeof n=="object"&&n!==null&&mc.includes(n.every);function De(n,e,t={}){let r=n.slice(0,10),o=n.slice(10),i=[];if(!os.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=dr(r,-new Date(bn(r)).getUTCDay()),x=(e.on?.length?e.on:[a==="week"?Yn[new Date(bn(r)).getUTCDay()]:g]).map(w=>typeof w=="string"?Yn.indexOf(w):w),b=a==="day"?1:a==="week"?7:0,k=(+d.slice(0,4)-c)*12+(+d.slice(5,7)-1-f),R=e.count?0:Math.max(0,Math.floor((b?(bn(d)-bn(b===7?h:r))/864e5/b:a==="month"?k:k/12)/s)-1),m=0;for(let w=0;w<5e4&&i.length<u;w++,R++){let y=R*s,S=a==="day"?[dr(r,y)]:a==="week"?x.map(v=>dr(h,y*7+v)):a==="month"?x.map(v=>rs(c,f+y,v)):[rs(c+y,f,g)];for(let v of[...new Set(S)].sort())if(!(v<r)&&(l&&v>l||e.count&&m>=e.count||(m++,v>=d&&!p.has(v)&&i.push(v+o),i.length>=u)))return i}return i}function ds(n,e,t){if(!Fe(e)||typeof n!="string")return n;let r=De(n,e,{from:t,limit:1})[0];if(r)return r;let o=e.until||e.count?De(n,e):[];return o[o.length-1]??n}function xc(n,e,t){let r=n[e],o=n[Te(e)];return typeof r=="string"&&Fe(o)?ds(r,o,t):r}function vn(n,e){if(n.onBehalfOf){let{onBehalfOf:i,...s}=n;return`${vn(s,e)}, for ${vn(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 T(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 Ze="$archived",Se=n=>n?.[Ze]===!0,wm=(n,e=!1)=>e==="all"||Se(n)===e,cr=n=>n===!0||n==="true"?!0:n==="all"?"all":!1,wn="$leftAlone",Qn=new Set([Ze,wn]);var ee="\0graview:unset",Le=n=>n===void 0||n===ee;function kn(n){if(n.op!=="patch-node")return n;let e=t=>Object.fromEntries(Object.entries(t).map(([r,o])=>[r,o===void 0?ee:o]));return{...n,before:e(n.before),after:e(n.after)}}function Sn(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 $e(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 Q=class extends Error{constructor(t,r){super(r?`${t}
|
|
2
|
+
\u2192 ${r}`:t);this.hint=r;this.name="SchemaError"}};function vc(n,e){let t=n,r=new Map;for(let a of t){if(r.has(a.kind))throw new Q(`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 Q(`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,Ui(a.fields,{id:F().check(hn(1)),kind:Vi(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 Q(`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 Q("Node is missing a `kind`");let l=s.get(d);if(!l)throw new Q(`Unknown node kind "${d}"`,`Declared kinds: ${[...r.keys()].join(", ")}`);let u={},p={};for(let[f,g]of Object.entries(a))Qn.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 O(n){return`${n.kind}\0${n.from}\0${n.to}`}var $n={addedNodes:[],removedNodes:[],changedNodes:[],addedEdges:[],removedEdges:[],touched:[]};function cs(n){return n.addedNodes.length===0&&n.removedNodes.length===0&&n.changedNodes.length===0&&n.addedEdges.length===0&&n.removedEdges.length===0}function wc(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 Ce(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=wc(c,f);g.length>0&&s.push({before:c,after:f,fields:g})}let a=new Map(n.edges.map(c=>[O(c),c])),d=new Map(e.edges.map(c=>[O(c),c])),l=e.edges.filter(c=>!a.has(O(c))),u=n.edges.filter(c=>!d.has(O(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 me(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 $n;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 Ce(o(n),o(e))}function kc(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 E=class extends Error{constructor(t,r){super(r?`${t}
|
|
3
|
+
${r}`:t);this.hint=r;this.name="GraphError"}},L=class extends E{constructor(t,r){super(r);this.id=t;this.name="MissingRecordError"}};function et(n,e){try{n.parseNode(e);return}catch(t){if(t instanceof Q)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 ur="n\0",lr="e\0",G=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=Ce(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=me(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(ur));this.nodes.clear();for(let[o,i]of t)this.nodes.set(o,i);let r=[...this.edges.entries()].sort(e(lr));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 L(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(ur+o),this.outIndex.delete(o),this.inIndex.delete(o);return}case"patch-node":{let o=this.nodes.get(e.id);if(!o)throw new L(e.id,`Cannot patch missing node "${e.id}"`);let i={...o};for(let[a,d]of Object.entries(e.after))Le(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[Se(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(O(e.edge)))throw new L(O(e.edge),`Cannot remove missing edge ${O(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"||Qn.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=et(this.schema,t);if(i===void 0)return t;let s=et(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 Q)return t;{let r=e?.id??"?",o=e?.kind??"?",i=this.schema.tryDefinition(o),s=i&&e&&typeof e=="object"?T(i,e):r;return new E(`${s} does not match what ${o} declares`,kc(t))}}insertNode(e,t,r=!1){if(this.nodes.has(e.id))throw new E(`Duplicate node id "${e.id}"`);this.nodes.set(e.id,t?e:this.check(e)),Se(e)&&this.archived.add(e.id),this.tally(e.kind,1),this.place(ur+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 L(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 E(`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=O(e);this.edges.has(s)||(this.edges.set(s,e),this.place(lr+s,r),this.index(this.outIndex,e.from,s),this.index(this.inIndex,e.to,s))}deleteEdge(e){let t=O(e);this.edges.delete(t),this.lapse(lr+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 nt=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 Sc(n,e){return{...e,name:n}}var tt=class extends Error{constructor(e){super(e),this.name="RuleBudgetError"}};function us(n,e,t){try{return e().map(r=>r.status?r:{...r,status:"violated"})}catch(r){let o=r instanceof tt,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 Ge(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(...us(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 nt(g,c.id);continue}let h=!Ot(f,c,t.today);for(let x of l.get(c.kind)??[]){if(h&&x.judgesPast!==!0)continue;let b=x.scope.match;b&&!b(c)||a.push(...us(x,()=>x.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=At(c.message);return f===c.message?c:{...c,message:f}});return fr?fr(n,e,p,t.today):p}var fr;function Fm(n){fr=n}function $c(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 _c(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 rt=(n,e)=>n==="*"||n.includes(e);function I(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 B=n=>n.kind==="system"&&n.onBehalfOf===void 0,ye=(n,e)=>n.roles==="*"||(e.roles??[]).some(t=>n.roles.includes(t));function ls(n){return mo(n.map(e=>ze(C(e).toLowerCase())),"or")}function be(n,e,t,r,o,i,s={},a,d,l){if(!n)return{ok:!0};if(B(e))return{ok:!0};if(e=I(e),o!==void 0){if(be(n,e,t,r,void 0,i).ok)return{ok:!0};let f=!1;if(o.some(b=>be(n,e,b,r,void 0,i).ok)){if(!d||i===void 0||e.id!==void 0&&d()===e.id||!l&&n.grants.some(b=>b.roles!=="*"&&ye(b,e)&&o.some(k=>rt(b.mutations,k))))return{ok:!0};f=!0}let g=f?[t]:[t,...o],h=[...new Set(g.flatMap(b=>pr(n,b,r)))].sort(),x=(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":`${ls(h)} can`);return{ok:!1,refusal:{mutation:t,...r===void 0?{}:{kind:r},wouldNeed:h,message:fs(n,g,r,x,s)}}}let u=!1;for(let f of n.grants){if(!ye(f,e)||!rt(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=pr(n,t,r),c=u?"only on your own end of the link":p.length===0?"no role can":`${ls(p)} can`;return{ok:!1,refusal:{mutation:t,...r===void 0?{}:{kind:r},wouldNeed:p,message:fs(n,[t],r,c,s)}}}function fs(n,e,t,r,o){let i=[...new Set(e.flatMap(a=>ps(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 ps(n,e,t){return[...new Set(hs(n,e,t).flatMap(r=>r.describe||[]))]}var hs=(n,e,t)=>n.grants.filter(r=>rt(r.mutations,e)&&(t===void 0||rt(r.kinds??"*",t)));function pr(n,e,t){let r=hs(n,e,t);return r.some(o=>o.roles==="*")?[]:[...new Set(r.flatMap(o=>o.roles))].sort()}function hr(n,e,t){return n?t.filter(r=>{let o=I(e).id;return gr(r).some(i=>be(n,e,r.name,i,void 0,o,void 0,()=>[o??[]].flat()).ok)}):t}var gr=n=>n.subject&&n.subject.kinds!=="*"?n.subject.kinds:[void 0];var ne=class extends Error{constructor(t,r="refused"){super(t);this.sentence=t;this.reason=r;this.name="ActRefusal"}};var _n=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=O(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=O(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,gs(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,gs(t,e.after));return}case"add-edge":this.setEdge(e.edge,!0);return;case"remove-edge":this.setEdge(e.edge,!1);return}}};function gs(n,e){let t={...n};for(let[r,o]of Object.entries(e))Le(o)?delete t[r]:t[r]=o;return t}var Rc=n=>n.op==="add-node"||n.op==="remove-node"?n.node.id:n.op==="patch-node"?n.id:void 0;function mr(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=Rc(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]:ee]));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 ms(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 _n(e.present,e);if(!i)return s.begin(e.log.length??o+r.length),n.map(c=>{let f=I(c.author).id,g=c.primitives.map(h=>mr(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=Ac(r,d,e.present,t),p=u?new _n(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 Oc(n,r,d,l,a,p,u?.judge??t,e)}function Ac(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 Oc(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=>mr(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 qm(n,e,t,r){let o=new _n(e.present,e);return o.begin(e.log.length??e.log.all().length),n.flatMap(i=>mr(i,o,t,()=>r).primitives)}var bs="A change you cannot see",xs={kind:"system",id:"withheld",name:"Someone"};function Be(n){return n.withheld===!0}var Rn=$e,vs=(n,e)=>Object.entries(n).some(([t,r])=>t!=="id"&&t!=="kind"&&N(r,e));function ws(n){if(typeof n!="function")return n;let e=n,t=r=>e(r.id)&&!vs(r,e)?r:void 0;return{sees:e,shows:e,served:t,servedWith:t,optional:()=>!1,kindOf:()=>{}}}function N(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(N(n[t],e))return!0;return!1}for(let t in n)if(Object.hasOwn(n,t)&&(!e(t)||N(n[t],e)))return!0;return!1}function ks(n,e){let t=r=>!e(r);return n.primitives.some(r=>Rn(r).some(t))||[...n.writes,...n.reads].some(t)||n.mutation!==null&&N(n.mutation.args,e)}function Pc(n,e){if(Rn(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 vs(t,e.sees)?{op:"remove-node",node:Object.fromEntries(Object.entries(t).filter(([r,o])=>r==="id"||r==="kind"||!N(o,e.sees)))}:n}case"patch-node":{let t=e.kindOf(n.id),r={};for(let[i,s]of Object.entries(n.after))if(!N(s,e.sees))r[i]=s;else if(t!==void 0&&e.optional(t,i))r[i]=ee;else return;let o=Object.fromEntries(Object.entries(n.before).filter(([,i])=>!N(i,e.sees)));return{op:"patch-node",id:n.id,before:o,after:r}}case"add-edge":case"remove-edge":return N(n.edge,e.sees)?void 0:n}}function yr(n,e,t){let r=ws(e),o=i=>r.shows(i)&&Ss(r,i);return{id:n.id,seq:n.seq,batch:n.batch,author:xs,intent:bs,mutation:null,primitives:t??n.primitives.flatMap(i=>{let s=Pc(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 Ue(n,e){let t=ws(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=>!N(i,r.sees),sees:r.sees,names:i=>N(i,r.sees)};return ms(n,r.timeline,o).map(({op:i,primitives:s,faithful:a})=>(!i.withheld&&a?ys(i,r,s):void 0)??yr(i,r,s))}return n.map(o=>(!o.withheld&&!ks(o,r.shows)?ys(o,r):void 0)??yr(o,r))}function ys(n,e,t){if(t&&t.length<n.primitives.length){if(!t.length)return;n={...n,primitives:t,inverse:n.inverse.filter(c=>Rn(c).every(e.shows))}}let r=c=>e.sees(c)&&Ss(e,c),o=n.reads.filter(r),i=new Set(n.primitives.flatMap(Rn)),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&&I(n.author).id===e.actor;if(!d&&n.described?.some(c=>!e.sees(c)))return;if(!N(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(!N(a.inverse,p))return d&&n.mutation&&u(n.mutation.args),N({...a,primitives:[],inverse:[]},d?p:e.sees)?void 0:a}function Ss(n,e){return n.timeline===void 0||n.kindOf(e)!==void 0}var _e=class extends E{constructor(t){super(t.message);this.check=t;this.name="UndoBlockedError"}get blockedBy(){return this.check.blockedBy}};function An(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(Be))return{ok:!1,ops:o,blockedBy:[],includeBatches:[],reason:"forbidden",message:o.every(Be)?"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=>!Be(f.op)).map(f=>`"${f.op.intent}" (op ${f.op.id}, read ${f.overlap.join(", ")})`).join("; ");if(u.some(f=>Be(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 $s(n){return[...n].sort((e,t)=>t.seq-e.seq).flatMap(e=>e.inverse)}var Ke=class extends Error{refusal;constructor(e){super(e.message),this.name="PermissionDeniedError",this.refusal=e}};function Ec(n){let e=n instanceof Error?n.message:String(n);if(n instanceof Ke){let t=n.refusal.wouldNeed;return{reason:"forbidden",sentence:e,...t.length>0?{wouldNeed:[...t]}:{}}}return n instanceof L?{reason:"missing",sentence:e}:n instanceof ne?{reason:n.reason,sentence:n.sentence}:n instanceof _e?{reason:n.check.reason??"invalid",sentence:e}:{reason:"invalid",sentence:e}}var Ve=class extends E{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"}};var zc=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 })`,We=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?zc(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 Re(this.ops)}opsInBatch(e){return this.ops.filter(t=>t.batch===e)}batches(){return br(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=G.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)))Mc(i,a);return i}toJSON(){return[...this.ops]}};function Mc(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 Re(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 br(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 xr(n){return n?.automated===!0&&n.kind!=="human"&&n.kind!=="rule"}var Rs=n=>n?.[wn]===!0,Nc=(n,e)=>Rs(("graph"in n?n.graph:n).getNode(e));function _s(n,e,t){let r=n.tryDefinition(e);return t===void 0?r?.tidying:r?.edges?.[t]?.tidying}var As=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 Os(n,e){let t=Ic(n);return[e,...e.map(r=>[r])].map(r=>t.get(As(r))).find(Boolean)}function Ic(n){let e=Re(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(As(a),o)}return r}function Ps(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(Rs(u))return s(`change \u201C${T(n.tryDefinition(u.kind),u)}\u201D`,"a person said to leave it alone");if(!i)continue;let p=_s(n,u.kind);if(p==="never")return s(`change ${J(n,u.kind)} on its own`,"the app says they are never tidied");if(d&&p==="no-links")return s(`link or unlink ${J(n,u.kind)} on its own`,"the app says they are never linked automatically")}if(d&&i&&l[0]&&_s(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 jc(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 ot={scene:0,overview:10,rail:20,popover:30,dialog:40,toast:50},Dc={plots:0,stage:1,tag:2,ties:2,lines:3,tieLabels:4,occupants:6,seatMarks:7,zoom:8,card:10,opened:11},Tc={under:0,raised:1,over:2},vr=n=>`--graview-layer-${n}`,Fc=n=>`var(${vr(n)}, ${ot[n]})`;function Zc(){return Object.keys(ot).map(n=>` ${vr(n)}: ${ot[n]};`).join(`
|
|
4
|
+
`)}function Lc(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 Es(){return`sub_${(globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`).replace(/-/g,"").slice(0,20)}`}function zs(n){return{...n,id:n.id??Es(),at:n.at??new Date().toISOString()}}function Cc(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=zs(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 Ns=(n,e)=>`${n}\0${e}`,Ms=new WeakMap;function Gc(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(Ns(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 Bc(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=>!Le(n.after[e]))]}function Uc(n,e){let t=n.end,r=I(e.author).id,o=e.undoes!==void 0?n.seqOf.get(e.undoes):void 0,i=[];for(let s of e.primitives){let a=Bc(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=Ns(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 Kc(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 it(n){let e=n.all(),t=typeof n.length=="number"?n.length:e.length,r=t-e.length,o=Ms.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&&Kc(o,i),r>o.base&&(o.read=o.read.slice(r-o.base),o.base=r))}else o=void 0;o||Ms.set(n,o=Gc(r));for(let i=o.end;i<t;i++)Uc(o,e[i-r]);return o.writers}var qe={served:new WeakSet},On=n=>n.fields!==void 0||(n.hide?.length??0)>0,xe=n=>qe.on===!0||qe.served.has(n);var wr=new WeakMap;function Vc(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 Wc(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=I(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 qc(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 ce(n){let e=n.all(),t=typeof n.length=="number"?n.length:e.length,r=t-e.length,o=wr.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&&qc(o,i),r>o.base&&(o.read=o.read.slice(r-o.base),o.base=r))}else o=void 0;o||wr.set(n,o=Vc(r,r>0?Hc(n,r)?.creators:void 0));for(let i=o.end;i<t;i++)Wc(o,e[i-r]);return o.records}function Hc(n,e){let t=[...n.epochs?.()??[]].reverse().find(r=>r.horizon);return t?.seq===e?t:void 0}function Is(n,e){ce(n);let t=wr.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 He(n,e,t,r,o,i=qe.on===!0){if(!n?.sees?.length||B(e))return!0;let s=n.sees.filter(a=>a.kinds.includes(t.kind)&&(i||!On(a)));return s.length===0?!1:(e=I(e),s.some(a=>{if(!ye(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 Sr=new Set;function st(n,e){return B(e)?Sr:n.modules?.disabledKinds??Sr}function Je(n,e){return B(e)?!1:(n.policy?.sees?.length??0)>0||st(n,e).size>0}function Fs(n,e){if(!Je(n,e))return()=>!0;let t=n.modules?.disabledKinds??Sr,r=n.policy?.sees??[],o=I(e),i=xe(n),s=d=>!t.has(d)&&(r.length===0||r.some(l=>l.kinds.includes(d)&&ye(l,o)&&!l.own&&!l.via&&(i||!On(l)))),a=n.schema.kinds.every(s);return d=>a||d!==void 0&&s(d)}function Pn(n,e){return t=>{let r=st(n,e);if(!n.policy?.sees?.length&&r.size===0)return!0;let o=ce(n.log),i=n.graph.getNode(t);if(i)return!r.has(i.kind)&&He(n.policy,e,i,n.graph,o,xe(n));let s=o.kindOf(t);return s===void 0?!0:!r.has(s)&&He(n.policy,e,{id:t,kind:s},{out:()=>[],in:()=>[]},o,xe(n))}}var Jc={out:()=>[],in:()=>[]};function Yc(n,e,t=new Map,r){let o=st(n,e);if(!n.policy?.sees?.length&&o.size===0)return()=>!0;let i=ce(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)&&He(n.policy,e,l,n.graph,i,xe(n));else{let u=i.kindOf(s);if(u===void 0)return r?.add(s),!0;d=!o.has(u)&&He(n.policy,e,{id:s,kind:u},Jc,i,xe(n))}return t.set(s,d),d}}function Xc(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 _r(n,e){return Zs(n,e).lens}var $r=()=>({judged:new Map,shown:new Map});function Zs(n,e){let t=Xc(n.schema),r=B(e)?void 0:I(e).id,o=()=>n.log.length??n.log.all().length,i=new WeakMap,s=n.graph,a=(u,p,c,f,g)=>{let h=(v,$)=>{if(!u(v.id))return;let _;for(let H in v)if(!(!Object.hasOwn(v,H)||H==="id"||H==="kind"||!N(v[H],u))&&!(r!==void 0&&$(H)===r)){if(!t(v.kind,H))return;(_??=[]).push(H)}if(!_)return v;let z=_.join("\0"),j=i.get(v);if(j?.without===z)return j.node;let q=Object.fromEntries(Object.entries(v).filter(([H])=>!_.includes(H)));return i.set(v,{without:z,node:q}),q},x=v=>{let $=c();return h(v,_=>p().writerAt(v.id,_,$))},b=new WeakMap,k=g?v=>{let $=b.get(v);return $||b.set(v,$={node:x(v)}),$.node}:x,R=v=>{if(!u(v))return!1;let $=s.getNode(v);return $===void 0||k($)!==void 0},m=g?.shown??new Map,w=g?v=>{let $=m.get(v);return $===void 0&&m.set(v,$=R(v)),$}:R,y=s.outEdges&&s.inEdges?{present:{getNode:v=>s.getNode(v),outEdges:v=>s.outEdges(v),inEdges:v=>s.inEdges(v)},log:n.log,get writers(){return p()}}:void 0,S={sees:u,shows:w,served:k,servedWith:h,optional:t,kindOf:f,...r!==void 0?{actor:r}:{},...y?{timeline:y}:{},hides:()=>Je(n,e),pin:g?()=>S:()=>d($r())};return qe.lens?.(S,n,e)??S};function d(u){let p,c=o(),f=ce(n.log);return a(Yc(n,e,u.judged,u.unnamed),()=>p??=it(n.log),()=>c,g=>s.getNode(g)?.kind??f.kindOf(g),u)}return{lens:a(Pn(n,e),()=>it(n.log),o,u=>s.getNode(u)?.kind??ce(n.log).kindOf(u)),pinWith:d}}var js=new WeakMap,Ds=new WeakMap,Qc=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 eu(n,e){if(!Je(n,e))return n.log.all();let t=n.log.all(),r=n.log.length??t.length,o=r-t.length,i=[...st(n,e)].sort().join("\0"),s=Ls(e),a=js.get(n.log);a||js.set(n.log,a=new Map);let d=a.get(s),{pinWith:l}=Zs(n,e),u=Ds.get(n.log);u||Ds.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($r()),x=!0,b=Qc(g);for(let k of b){let R=d.judgments.judged.get(k),m=d.judgments.shown.get(k);if(R!==void 0&&h.sees(k)!==R||m!==void 0&&h.shows(k)!==m){x=!1;break}}if(x){for(let k of b)if(u.has(k)){x=!1;break}}if(x){let k=[...d.ops,...Ue(g,l(d.judgments))],R={horizon:o,off:i,length:r,last:t.at(-1),ops:k,judgments:d.judgments};return a.set(s,R),k}}let c={...$r(),unnamed:u},f=Ue(t,l(c));return a.set(s,{horizon:o,off:i,length:r,last:t.at(-1),ops:f,judgments:c}),f}function nu(n,e,t){return(t.subjectId===void 0||!e(t.subjectId)||n.shows(t.subjectId))&&t.nodeIds.every(r=>!e(r)||n.shows(r))&&!N(t,n.sees)}function Rr(n,e){return{all:()=>n,undoneIds:()=>Re(n),epochs:e}}var Ts=new WeakMap;function Ls(n){let e=B(n)?n:I(n);return`${n.kind}|${e.id??""}|${(e.roles??[]).join(",")}|${n.onBehalfOf?"for":""}`}var kr=(n,e)=>{let t=Reflect.get(n,e,n);return typeof t=="function"?t.bind(n):t},tu=Symbol.for("@graview/core:seat");function En(n,e){if(!Je(n,e))return n;let t=Ls(e),r=Ts.get(n);r||Ts.set(n,r=new Map);let o=r.get(t);if(o)return o;let i=n.graph,s=_r(n,e),a=m=>{let w=_=>_===void 0?void 0:m.served(_),y=_=>w(_)!==void 0,S=_=>y(i.getNode(_));return{served:w,seenNode:y,seenId:S,seenEdge:_=>S(_.from)&&S(_.to)&&!N(_,m.sees),servedAll:_=>_.flatMap(z=>w(z)??[])}},{served:d,seenId:l}=a(s),u=()=>a(s.pin?.()??s),p=(m,w)=>{let y=it(n.log),S=s.pin?.()??s,v=m.nodes.flatMap(_=>S.servedWith(_,z=>y.writerAt(_.id,z,w))??[]),$=new Set(v.map(_=>_.id));return{nodes:v,edges:m.edges.filter(_=>$.has(_.from)&&$.has(_.to)&&!N(_,S.sees))}},c=m=>{let w=p(m.base,m.seq);if(!m.creators)return{...m,base:w};let y=new Set(w.nodes.map(v=>v.id)),S=Object.fromEntries(Object.entries(m.creators).filter(([v,$])=>y.has(v)&&!N($,s.sees)));return{...m,base:w,creators:S}},f=m=>m&&c(m),g=()=>eu(n,e),h=()=>Rr(g(),()=>n.log.epochs()),x=new Proxy(i,{get(m,w){switch(w){case"getNode":return y=>d(m.getNode(y));case"has":return l;case"allNodes":case"nodesOfKind":return(...y)=>u().servedAll(m[w](...y));case"count":return(...y)=>u().servedAll(m.nodesOfKind(...y)).length;case"allEdges":case"edgesOfKind":case"outEdges":case"inEdges":return(...y)=>m[w](...y).filter(u().seenEdge);case"out":case"in":case"neighbors":return(y,...S)=>{let v=u();return v.seenId(y)?v.servedAll(m[w](y,...S)):[]};case"snapshot":return()=>{let y=m.snapshot(),S=u();return{...y,nodes:S.servedAll(y.nodes),edges:y.edges.filter(S.seenEdge)}};case"size":{let y=u();return{nodes:y.servedAll(m.allNodes({archived:"all"})).length,edges:m.allEdges({archived:"all"}).filter(y.seenEdge).length}}default:return kr(m,w)}}}),b=()=>{let m=g();return br(m,Re(m))},k=new Proxy(n.log,{get(m,w){switch(w){case"all":case"toJSON":return()=>[...g()];case"epochs":return()=>m.epochs().map(c);case"lastEpoch":return()=>f(m.lastEpoch());case"live":return()=>{let y=g(),S=Re(y);return y.filter(v=>!S.has(v.id))};case"get":return y=>g().find(S=>S.id===y);case"opsInBatch":return y=>g().filter(S=>S.batch===y);case"batches":return b;default:return kr(m,w)}}}),R=new Proxy(n,{get(m,w){switch(w){case tu:return{store:m,principal:e};case"graph":return x;case"log":return k;case"snapshot":return x.snapshot;case"batches":return b;case"canUndo":return y=>An(h(),typeof y=="string"?[y]:y);case"violations":return y=>m.violations(y,x).filter(S=>nu(s,v=>i.has(v),S));case"findings":return()=>m.findings().filter(y=>(y.id.includes("->")?y.id.split("->").map((v,$)=>$===0?v.slice(v.indexOf(":")+1):v):[y.id]).every(v=>!i.has(v)||l(v))&&!N(y,s.sees));case"wouldChange":return y=>m.wouldChange(y,e);case"preview":return(y,S,v)=>m.preview(y,S,{author:e,...v});case"seenBy":return y=>En(m,y);case"seenFor":return e;case"checkpoint":return(...y)=>f(m.checkpoint(...y));default:return kr(m,w)}}});return r.set(t,R),R}var Ar=new Set;function Or(n,e){if(!n||e===void 0)return{enabled:new Set(Object.keys(n??{})),disabledKinds:Ar,disabledMutations:Ar,disabledInvariants:Ar,administered:Cs(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:Cs(n,t)}}function Cs(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 Gs(n){return n.normalize("NFKD").replace(/\p{M}/gu,"").toLowerCase().trim().replace(/\s+/g," ")}var at=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=Gs(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=Pr(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=T(this.graph.schema.tryDefinition(e.kind),e),r=Gs(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(Pr(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=Pr(r.sorted,t.key);r.sorted[i]===t.key&&r.sorted.splice(i,1)}};function Pr(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 ru(n,e){return e.includes("*")?"record":e.map(t=>Y(n.tryDefinition(t),t)).join(" or ")}function Bs(n,e,t,r){let o=ru(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 Ks=Symbol.for("@graview/core:node-ref"),Us=n=>typeof n=="object"&&n!==null?n[Ks]:void 0;function zn(n="*"){return ou(F().check(hn(1)),n)}function ou(n,e){let t=Object.freeze(e==="*"?["*"]:[...e]),r=o=>{o&&Object.defineProperty(o,Ks,{value:t,enumerable:!0,configurable:!0})};return r(n),r(M(n)),n}function Er(n){if(typeof n!="object"||n===null)return;let e=Us(n);if(e)return e;let t=M(n),r=Us(t);if(r)return r;let o=t?.innerType;return o?Er(o):void 0}function Mn(n){let e=n.shape;if(!e)return[];let t=[];for(let[r,o]of Object.entries(e)){let i=Er(o);i&&t.push({name:r,kinds:i,optional:o.safeParse(void 0).success})}return t}function zr(n){if(n===null||typeof n!="object")return JSON.stringify(n)??"null";if(Array.isArray(n))return`[${n.map(r=>r===void 0?"null":zr(r)).join(",")}]`;let e=n;return`{${Object.keys(e).filter(r=>e[r]!==void 0).sort().map(r=>`${JSON.stringify(r)}:${zr(e[r])}`).join(",")}}`}var Vs=(n,e)=>n.key<e.key?-1:n.key>e.key?1:0;function iu(n){let e=n.nodes.map(r=>({key:r.id,value:r})).sort(Vs),t=n.edges.map(r=>({key:O(r),value:{kind:r.kind,from:r.from,to:r.to}})).sort(Vs);return zr({nodes:e.map(r=>r.value),edges:t.map(r=>r.value)})}function Ye(n){return`sha256:${qs(iu(n))}`}function Ws(n,e,t,r={}){let o=r.validate??!0,i=r.base??{nodes:[],edges:[]},s=Ye(t),a=G.from(n,i,{validate:o});for(let[h,x]of e.entries())try{a.applyPrimitives(x.primitives)}catch(b){let k=e[h-1];return{ok:!1,expected:Ye(a.snapshot()),actual:s,...k?{divergedAfter:k.id}:{},reason:`The log does not fold: op "${x.id}" (${x.intent}) could not be applied. ${b instanceof Error?b.message:String(b)}`}}let d=Ye(a.snapshot());if(d===s)return{ok:!0,hash:s};let l=h=>{let x=G.from(n,i,{validate:o});for(let b=0;b<=h;b++)x.applyPrimitives(e[b].primitives);return Ye(x.snapshot())},u=h=>{try{let x=G.from(n,t,{validate:o});for(let b=e.length-1;b>h;b--)x.applyPrimitives(e[b].inverse);return Ye(x.snapshot())}catch{return}},p=h=>{let x=u(h);return x!==void 0&&x!==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 su=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]),au=new TextEncoder,du=new Uint32Array(64),cu=new Uint32Array(8),dt=Array.from({length:256},(n,e)=>e.toString(16).padStart(2,"0"));function qs(n){let e=au.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=cu;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=du;for(let d=0;d<r.length;d+=64){for(let b=0;b<16;b++)s[b]=o.getUint32(d+b*4);for(let b=16;b<64;b++){let k=s[b-15],R=s[b-2],m=(k>>>7|k<<25)^(k>>>18|k<<14)^k>>>3,w=(R>>>17|R<<15)^(R>>>19|R<<13)^R>>>10;s[b]=s[b-16]+m+s[b-7]+w>>>0}let l=i[0],u=i[1],p=i[2],c=i[3],f=i[4],g=i[5],h=i[6],x=i[7];for(let b=0;b<64;b++){let k=(f>>>6|f<<26)^(f>>>11|f<<21)^(f>>>25|f<<7),R=f&g^~f&h,m=x+k+R+su[b]+s[b]>>>0,w=(l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10),y=l&u^l&p^u&p,S=w+y>>>0;x=h,h=g,g=f,f=c+m>>>0,c=p,p=u,u=l,l=m+S>>>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]+x>>>0}let a="";for(let d=0;d<8;d++){let l=i[d];a+=dt[l>>>24]+dt[l>>>16&255]+dt[l>>>8&255]+dt[l&255]}return a}var Nn=class{constructor(e){this.inner=e}seen=new Set;reads(){return[...this.seen]}markAll(e){for(let t of e)this.seen.add(t.id);return e}markEdges(e){for(let t of e)this.seen.add(t.from),this.seen.add(t.to);return e}getNode(e){return this.seen.add(e),this.inner.getNode(e)}has(e){return this.seen.add(e),this.inner.has(e)}allNodes(e){return this.markAll(this.inner.allNodes(e))}allEdges(e){return this.markEdges(this.inner.allEdges(e))}nodesOfKind(e,t){return this.markAll(this.inner.nodesOfKind(e,t))}edgesOfKind(e,t){return this.markEdges(this.inner.edgesOfKind(e,t))}out(e,t,r){return this.seen.add(e),this.markAll(this.inner.out(e,t,r))}in(e,t,r){return this.seen.add(e),this.markAll(this.inner.in(e,t,r))}neighbors(e,t){return this.seen.add(e),this.markAll(this.inner.neighbors(e,t))}};function uu(n,e){return{...e,name:n}}function Mr(n){if(!n.creates?.length)return!1;let e=n.input.shape;return e===void 0||!("id"in e)}function Xs(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 Mr(n)?[...r,"id"]:r}var Hs=(n,e)=>`does not take ${n.map(t=>`"${t}"`).join(", ")}; it takes ${e.length>0?e.map(t=>`"${t}"`).join(", "):"nothing"}`;function lu(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 E("An id must be a non-empty string",`Got ${JSON.stringify(e)}.`);return e}}function fu(n){let{id:e,...t}=n;return t}function Js(n){return n.normalize("NFKD").replace(/\p{M}/gu,"").toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,"")||"item"}function Qs(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 pu(n,e){if(e.limited&&e.me===void 0)return Ys(n,e.held);let t=e.limited?`${n}.${Qs(e.me)}`:n,r=t;for(let o=2;e.seen(r);o++)r=`${t}-${o}`;return e.held(r)?Ys(t,e.held):r}function Ys(n,e){let t;do t=`${n}-${Math.floor(Math.random()*36**6).toString(36).padStart(6,"0")}`;while(e(t));return t}function Xe(n,e,t,r={}){let o=Mr(e)?lu(t):void 0,i=o===void 0?t:fu(t),s=Xs(e);if(s&&typeof i=="object"&&i!==null&&!Array.isArray(i)){let m=Object.keys(i).filter(w=>!s.includes(w)&&i[w]!==void 0);if(m.length>0)throw new Ve(e.name,[{path:[],message:Hs(m,s)}])}let a=e.input.safeParse(i);if(!a.success){let m=Object.keys(e.input.shape??{});throw new Ve(e.name,a.error.issues.map(w=>w.code==="unrecognized_keys"&&m.length>0?{...w,message:Hs(w.keys,m)}:w))}let d=a.data,l=new Nn(r.seen??n),u=[],p=new Set,c=m=>l.has(m)||n.has(m)||p.has(m),f,g=m=>{let w=new Set([...n.outEdges(m),...n.inEdges(m)]);for(let y of w)l.getNode(y.from),l.getNode(y.to),u.push({op:"remove-edge",edge:y});return w},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 w=l.getNode(m)&&n.getNode(m);if(!w)throw new L(m,`Cannot remove missing node "${m}"`);g(m),u.push({op:"remove-node",node:w})},patchNode(m,w){let y=l.getNode(m)&&n.getNode(m);if(!y)throw new L(m,`Cannot patch missing node "${m}"`);let S={},v={};for(let[$,_]of Object.entries(w)){let z=y[$];JSON.stringify(z)===JSON.stringify(_)&&!r.keepUnchanged?.(_,$,y)||(S[$]=z,v[$]=_)}Object.keys(v).length!==0&&u.push({op:"patch-node",id:m,before:S,after:v})},archiveNode:m=>h.patchNode(m,{[Ze]:!0}),unarchiveNode:m=>h.patchNode(m,{[Ze]:void 0}),mergeNode(m,w){let y=l.getNode(w)&&n.getNode(w);if(!y)throw new L(w,`Cannot merge into missing node "${w}"`);if(m===w||Se(y))throw new E(m===w?"Cannot merge a record into itself":"Cannot merge into an archived record");let S=new Set([...n.outEdges(w),...n.inEdges(w)].map(O));for(let v of g(m)){let $={kind:v.kind,from:v.from===m?w:v.from,to:v.to===m?w:v.to};$.from!==$.to&&!S.has(O($))&&(S.add(O($)),u.push({op:"add-edge",edge:$}))}h.archiveNode(m),f=w},addEdge(m){u.push({op:"add-edge",edge:m})},removeEdge(m){u.push({op:"remove-edge",edge:m})},setSingleSource(m,w,y){n.inEdges(w,m).some(S=>S.from===y)||u.push({op:"add-edge",edge:{kind:m,from:y,to:w}});for(let S of n.inEdges(w,m))l.getNode(S.from),S.from!==y&&u.push({op:"remove-edge",edge:S})},freshId(m,w){if(o!==void 0&&!p.has(o)){if(r.seesInFull&&!r.seesInFull())throw new E(`"${e.name}" makes its own id here`,"Leave id out: the answer says the id it made.");if(c(o))throw new E(`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 y=w?`${w}:${Js(m)}`:Js(m),v=pu(y,{seen:$=>(r.seen?r.seen.has($):n.has($))||p.has($),held:c,limited:r.seesInFull!==void 0&&!r.seesInFull(w),me:r.me});return p.add(v),v}};e.apply(h,d);let x=r.check?.(u,e),b=new Set(u.flatMap($e)),k=new Nn(r.seen??n),R=e.describe?.(d,k)??`${e.name}(${Object.entries(d).map(([m,w])=>`${m}=${JSON.stringify(w)}`).join(", ")})`;return{primitives:u,reads:[...new Set([...l.reads(),...k.reads()])],...e.describe?{described:[...k.reads(),...x??[]]}:{},writes:[...b],intent:R,...f!==void 0?{mergedInto:f}:{}}}var ea=Symbol.for("@graview/core:amount"),Hy=(n,e)=>(Object.defineProperty(M(n),ea,{value:e,enumerable:!0}),n);function Nr(n,e=!0){let t=M(n);return t?.[ea]??(e&&t?.innerType?Nr(t.innerType):void 0)}function na(n,e={}){let t=Number.isInteger(n),r={maximumFractionDigits:t?0:2,minimumFractionDigits:t?0:2};try{return re(n,e.locale,e.currency?{style:"currency",currency:e.currency,...r}:r)}catch{return re(n,e.locale,r)}}function ta(n,{format:e,unit:t,currency:r,locale:o}){let i=/^[A-Z]{3}$/.test(t??"");return e==="money"||!e&&i?na(n,{...o?{locale:o}:{},...(i?t:r)?{currency:i?t:r}:{}}):e==="percent"?re(n,o,{style:"percent",maximumFractionDigits:0}):re(n,o)+(t?` ${t}`:"")}var hu=Symbol.for("@graview/core:typed-field");function Ir(n){let e=M(n);return e?e[hu]??Ir(e.innerType):void 0}var gu=/^[("'“‘]*(?:(?:[a-z]{1,3}\.){2,}|(?:dr|mr|mrs|ms|mx|st|mt|vs|jr|sr|prof|no|fig|approx)\.)$/i;function mu(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]==="."&&gu.test(r))&&!(t.split(" ").length<3&&e.index+1<n.length))return t}}function ra(n,e=140){let t=n.replace(/^[#>\s]+|\*\*|`|\](\([^)\s]*\))?|\[/gm,"").replace(/\s+/g," ").trim(),r=mu(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 yu(n){let e=n.fields.shape;return Object.keys(e).flatMap(t=>{let r=Xn(e[t])?xn(t):void 0;return r&&e[r]?[r]:[]})}var bu=[["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 oa(n,e){let t=new Set(e.map(o=>o.name)),r=[];for(let o of n.definitions){let i=yu(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=>T(o,u);for(let[u,p,c,f]of bu){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(Te),...u==="skip"?{}:{creates:[s]},input:Wn({id:zn([s]),on:F().check(gn(/^\d{4}-\d{2}-\d{2}$/,"a day, like 2026-10-21")),...i.length>1?{field:de(Ki(i))}:{},...u==="skip"?{}:Object.fromEntries(d.map(h=>[h,de(a[h])]))}),describe:(h,x)=>f.replace("{}",l(x.getNode(String(h.id))??{id:h.id}))+fe(String(h.on)),apply(h,x){let b=h.graph.getNode(String(x.id)),k=String(x.field??i[0]),R=b?.[k],m=b?.[Te(k)],w=String(x.on);if(typeof R!="string"||!Fe(m))throw new ne(`${l(b??{id:x.id})} does not repeat`,"refused");let y=De(R,m,{from:w,to:w})[0];if(!y)throw new ne(`${l(b)} does not fall on ${fe(w)}`,"refused");let S=String(b.id),v=Object.fromEntries(d.filter(K=>x[K]!==void 0).map(K=>[K,x[K]])),$=Te(k),_=K=>{let co=Object.fromEntries(Object.entries({...b,...K,...v}).filter(([Tn,St])=>St!=null&&Tn!=="id")),uo=h.freshId(l(co));h.addNode({...co,id:uo,kind:s});for(let Tn of Object.keys(o.edges??{}))for(let St of h.graph.out(S,Tn))h.addEdge({kind:Tn,from:uo,to:St.id})};if(u!=="split"){h.patchNode(S,{[$]:{...m,except:[...new Set([...m.except??[],w])].sort()}}),u==="detach"&&_({[k]:y,[$]:null});return}if(Object.keys(v).length===0)throw new ne(`Nothing to change: give ${l(b)} from ${fe(w)} something new`,"invalid");if(w<=R.slice(0,10))return h.patchNode(S,v);let z=new Date(Date.parse(`${w}T00:00:00Z`)-864e5).toISOString().slice(0,10),j=m.count?De(R,{...m,except:[]},{to:z}).length:0,{count:q,except:H,...so}=m,ao=K=>H?.some(K)?{except:H.filter(K)}:{};h.patchNode(S,{[$]:{...so,until:z,...ao(K=>K<w),...q?{count:j}:{}}}),_({[k]:y,[$]:{...so,...ao(K=>K>=w),...q?{count:q-j}:{},continues:S}})}})}}return r}function ia(n){let e=n.fields.shape;return Object.keys(e).filter(t=>!(t in(n.fixed??{})))}function jr(n,e){let t=e.subject;return t?t.kinds==="*"?n.kinds:t.kinds:[]}function Dr(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(Mn(n.input).map(s=>s.name));return Object.keys(o).filter(s=>s!==t.arg&&r.has(s)&&!i.has(s))}function sa(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 jr(n,o)){let s=n.tryDefinition(i);if(s)for(let a of Dr(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 aa(n,e,t){let r=n.tryDefinition(t);if(!r)return[];let o=sa(n,e).get(t);return ia(r).filter(i=>!o?.has(i))}var da=n=>`edit-${n}`;function ca(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),jr(n,i).includes(t)&&Dr(i,r).length>0&&o.add(i.name));return[...o]}function ua(n,e){let t=new Set(e.map(o=>o.name)),r=[];for(let o of n.definitions){let i=o.kind,s=da(i);if(t.has(s))continue;let a=aa(n,e,i);if(a.length===0)continue;let d=o.fields.shape,l=Y(o,i),u=a.map(p=>Zn(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:Wn({id:zn([i]),...Object.fromEntries(a.map(p=>[p,de(wu(d[p]))]))}),describe:(p,c)=>xu(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 ne(`Nothing to change \u2014 give at least one of ${u.join(", ")} a value.`,"invalid");p.patchNode(c.id,f)}})}return r}function xu(n,e,t,r,o){let i=o.getNode(r.id),s=i?T(n,i):"a record",a=t.filter(d=>r[d]!==void 0).map((d,l)=>{let u=r[d],p=xn(d),c=p!==void 0&&p in e,f=Zn(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 ${vu(u)}`:"stop repeating":la(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 vu=n=>`every ${(n.interval??1)>1?`${n.interval} ${n.every}s`:n.every}`;function la(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(mn(r).length>0)return mn(r).map(i=>i.name).join(", ");if(yn(e))return Array.isArray(r)&&r.length>1?`${r.length} linked records`:"a linked record";if(Array.isArray(r))return r.map(i=>la(n,e,t,i)).join(", ");if(typeof r=="boolean")return r?"yes":"no";if(typeof r=="number"){let i=Nr(e);return i?ta(r,i):Ir(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(an.test(r))return fe(r);if(_t.test(r))return Rt(r);for(let i=M(e);i;i=M(i.innerType))if(i.type==="enum")return C(r);return`\u201C${ra(r,60)}\u201D`}function wu(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 fa(n,e){return n.filter(t=>!t.derived&&(t.creates??[]).includes(e)).map(t=>t.name)}function Tr(n,e,t){if(t.derived)return t.derived.act==="edit"||t.derived.act==="skip"||t.derived.act==="detach"||t.derived.act==="split"?ca(n,e,t.derived.kind):fa(e,t.derived.kind)}function ku(n,e){let t=new Set(e.map(o=>o.name)),r=[];for(let o of n.definitions){let i=o.kind,s=Y(o,i),a=(l,u)=>{let p=l.getNode(String(u));return p?T(o,p):String(u)},d=zn([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:je(l==="merge"?{id:d,into:d}:{id:d}),describe:(h,x)=>{let b=l==="remove"&&x.getNode(String(h.id)),k=b?new Set(Object.values(b).flatMap(R=>mn(R).map(m=>m.href))).size:0;return`${u} ${a(x,h.id)}${l==="merge"?` into ${a(x,h.into)}`:""}${k?` and its ${k} file${k>1?"s":""}`:""}`},apply:g?(h,x)=>h.patchNode(String(x.id),{[wn]:l==="leave-alone"?!0:void 0}):(h,x)=>h[`${l}Node`](x.id,x.into)})}}return r}function Fr(n,e){return[...ua(n,e),...ku(n,e),...oa(n,e)]}var Su=500,Zr=120;function In(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>Su||t!==void 0&&!(typeof t=="number"&&t>=0&&t<=1)||r!==void 0&&!(a&&a.length<=Zr)||o!==void 0&&!(typeof o=="string"&&o.length>0&&o.length<=Zr)||i!==void 0&&!(typeof i=="string"&&i.length>0&&i.length<=Zr))throw new E("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 Qe="keep-link";function pa(n){let e=(t,r)=>{let o=t.getNode(r);return o?T(n.tryDefinition(o.kind),o):r};return{name:Qe,title:"Keep this link",input:je({kind:F(),from:F(),to:F()}),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=O({kind:o,from:i,to:s});throw new L(a,`Cannot remove missing edge ${a}`)}t.removeEdge({kind:o,from:i,to:s}),t.addEdge({kind:o,from:i,to:s})}}}var ha=(n,e)=>[...n].filter(t=>!t.derived&&t.name!==Qe&&typeof e=="string"&&(t.connects?.includes(e)||t.severs?.includes(e))).map(t=>t.name);var ga=["kind-unknown","node-shape","edge-dangling","edge-disallowed","rule-error","rule-budget"];function ma(n,e){let t=et(n,e);return t&&[...t.fields].filter(Boolean)}function $u(n,e,t){return n.tryDefinition(e)?.fields?.shape?.[t]}function ct(n,e){try{return T(n.tryDefinition(e.kind),e)}catch{return typeof e.label=="string"?e.label:"A record"}}var _u=n=>`${n.kind}:${n.from}->${n.to}`,ut=(n,e)=>n<e?-1:n>e?1:0;function ya(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)=>ut(f.id,g.id))){if(!r.tryDefinition(c.kind)){d.add(c.id),o.push({code:"kind-unknown",id:c.id,message:`${ct(r,c)} is a kind of record this app no longer has`,repair:a(c)});continue}let f=ma(r,c);if(f===void 0)continue;let g=ct(r,c),h=new Map,x=f.length>0;for(let b of f){if(b==="id"||b==="kind"){x=!1;continue}let k=$u(r,c.kind,b),R=k?k.safeParse(void 0):{success:!0,data:void 0},m=r.tryDefinition(c.kind)?.defaults;!R.success&&k&&m&&Object.hasOwn(m,b)&&(R=k.safeParse(m[b])),R.success?R.data===void 0?h.set(b,{action:"clear",value:ee}):h.set(b,{action:"coerce",value:R.data}):x=!1}if(x){let b={...c};for(let[k,R]of h)R.value===ee?delete b[k]:b[k]=R.value;ma(r,b)!==void 0&&(x=!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 b of f){let k=h.get(b),R=x&&k?{action:k.action,primitives:[{op:"patch-node",id:c.id,before:{[b]:c[b]===void 0?ee:c[b]},after:{[b]:k.value}}]}:a(c);o.push({code:"node-shape",id:c.id,detail:b,message:`${g}: ${C(b)} does not fit what ${c.kind} declares`,repair:R})}}let l=new Set,u=[];for(let c of[...e.edges].sort((f,g)=>ut(O(f),O(g)))){if(l.has(O(c)))continue;l.add(O(c));let f=_u(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:`${ct(r,g)} \u2192 ${ct(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=G.from(r,{nodes:[...i.values()],edges:u},{validate:!1}),f=new Set,g;try{g=Ge(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 x=h.status==="could-not-judge"?"rule-error":h.status==="over-budget"?"rule-budget":void 0;if(!x)continue;let b=h.subjectId??h.invariant,k=`${x}|${b}|${h.invariant}`;f.has(k)||(f.add(k),o.push({code:x,id:b,detail:h.invariant,message:h.message}))}}return o.sort((c,f)=>ga.indexOf(c.code)-ga.indexOf(f.code)||ut(c.id,f.id)||ut(c.detail??"",f.detail??""))}var lt=()=>globalThis.__graviewWatch;function ba(n){lt()?.store?.(n)}function ft(n){n!==void 0&<()?.learn?.({ids:[n],words:[]})}function xa(n,e){lt()?.refused?.({...n,...e===void 0?{}:{author:e}})}function Ru(n,e,t){lt()?.seat?.(n,e,t)}function Lr(n){if(typeof n=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(n))return n;let e=new Date(n);if(Number.isNaN(e.getTime()))throw new Error(`Not a day: ${String(n)}`);return e.toISOString().slice(0,10)}function va(n=Date.now()){let e=new Date(n).getTime(),t=new Date(e);return t.setUTCHours(24,0,0,0),t.getTime()-e}function Au(n,e){let t,r=()=>{t=setTimeout(()=>{let o=n.tick(new Date);r(),e?.(o)},va()+1e3),t.unref?.()};return r(),()=>clearTimeout(t)}var pt=class extends E{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"}},Cr="preview",D=(n,e)=>e===void 0?{}:{[n]:e},Ae={kind:"human"},wa={kind:"system"},Sa={kind:"system",id:"modules",name:"Modules"},ka=n=>n.mutation===null&&n.undoes===void 0;function Gr(n,e){return`${n.invariant}|${n.subjectId??""}|${n.line||e?.has(n.invariant)?n.label:n.message}`}var Ou=new Set(["remove","archive","unarchive","merge"]),Pu={has:()=>!0},$a=n=>new Set(n.filter(e=>e.shape).map(e=>e.name));function _a(n,e,t){let r=$a(n),o=p=>Gr(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&&Gr(p,Pu),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 en=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"}},ht=class extends E{constructor(t,r){super(`Unknown mutation "${t}"`,`Registered: ${r.join(", ")||"(none)"}`);this.mutation=t;this.name="UnknownMutationError"}};function Eu(){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 Br=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;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.policy=e.policy,this.by=e.principal??Ae,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=Eu();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 E(`Duplicate mutation "${i.name}"`);this.mutations.set(i.name,i)}for(let i of e.past?[]:Fr(e.schema,e.mutations??[]))this.mutations.set(i.name,i);!e.past&&!this.mutations.has(Qe)&&(this.keeper=pa(e.schema),this.mutations.set(Qe,this.keeper));let r=D("horizon",e.horizon),o={validate:this.validate};if(e.log){this.log=We.from(e.log,e.epochs,r);let i=this.log.lastEpoch();this.graph=e.snapshot?G.from(e.schema,e.snapshot,o):this.log.fold(e.schema,{...o,...i?{from:i}:{}})}else this.log=We.from([],e.epochs??(e.snapshot?[{seq:e.horizon??0,base:e.snapshot}]:[]),r),this.graph=G.from(e.schema,e.snapshot??{nodes:[],edges:[]},o);e.past||(this.countPastTheLog(),ba(this))}stillNow(){if(this.past)throw new pt(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:Or(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=Or(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=>J(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:Sa,intent:cn(d),mutation:null,primitives:[],inverse:[],reads:[],writes:[],at:this.now(),...D("via",t.via),enabledModules:[...o].sort()};return this.log.append(l),this.notify($n,[l]),l}mutation(e){let t=this.mutations.get(e);if(!t)throw new ht(e,[...this.mutations.keys()]);if(this.mutationDisabled(t))throw new E(`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)return ha(this.mutations.values(),t?.args.kind);if(e?.derived)return Tr(this.schema,[...this.mutations.values()],e)}moved(e,t){return _a(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=Ae){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 be(this.policy,t,e.name,this.subjectKindOf(e,t),this.viaOf(o,e),typeof i=="string"?i:void 0,this.words,()=>{let s=I(t).id,a=this.namedIn(e,!1);try{for(let d of Xe(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&&(()=>ce(this.log).creatorOf(i)),o?.derived!==void 0&&Ou.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]]:[],...Mn(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&&xa(e,t),new Ke(e)}get words(){return{act:e=>this.mutations.get(e)?.title,noun:e=>Y(this.schema.tryDefinition(e),e)}}refusesAgent(e,t){if(t.kind!=="agent"||t.id===void 0)return;let r=this.may.get(t.id);if(!r||r.has(e.name))return;let o=s=>`\u201C${this.mutations.get(s)?.title??s}\u201D`,i=[...r].map(o);return{mutation:e.name,message:`${t.id} may not ${o(e.name)} here: it was declared able to ${i.length===0?"do nothing else":i.join(", ")}.`,wouldNeed:[]}}namesTurnedOff(e,t=wa){let r=this.modules.disabledKinds;if(r.size===0||!B(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&&I(e).id};if(e===void 0||!Je(this,e))return t;let r=Pn(this,e);return{...t,seen:En(this,e).graph,keepUnchanged:o=>N(o,r),seesInFull:Fs(this,e)}}missingFor(e,t=Ae){let r=this.mutations.get(e.name),o=new Set(this.namedIn(e));if(!r||o.size===0)return;let i=En(this,t).graph;for(let s of o)if(!i.has(s))return new L(s,`\u201C${r.title??e.name}\u201D names a record that is not there.`)}mayAdminister(e,t=Ae){let r=this.modules.administered.get(e);return r?(r.mutations??[]).some(o=>{let i=this.mutations.get(o);return!!i&&gr(i).some(s=>be(this.policy,t,o,s,this.viaOf(i)).ok)}):!1}seenBy(e){return En(this,e)}sees(e,t){return this.graph.has(t)&&Pn(this,e)(t)}labels;resolveRef(e,t,r=Ae){let o=(this.policy?.sees?.length??0)>0,i=c=>!o||this.sees(r,c),s=this.graph.getNode(t);if(this.labels??=new at(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"}:Bs(this.schema,e,t,p)}kindsKeptFrom(e=Ae){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&&!B(e)){let o=new Set(this.permittedMutations(e).flatMap(s=>s.creates??[])),i=xe(this);for(let s of this.schema.kinds)!r.some(d=>d.kinds.includes(s)&&ye(d,e)&&(!d.own&&!d.via||e.id!==void 0)&&(i||!On(d)))&&!o.has(s)&&t.add(s)}return t}permittedMutations(e=Ae){let t=this.allMutations(),r=hr(this.policy,e,t.filter(i=>!i.derived)),o=t.filter(i=>i.derived!==void 0&&be(this.policy,e,i.name,i.derived.kind,this.viaOf(i),I(e).id).ok);return[...r,...o]}subjectKindOf(e,t=wa){let o=this.mutations.get(e.name)?.subject;if(!o)return;let i=e.args[o.arg];if(typeof i!="string")return o.kinds!=="*"&&o.kinds.length===1?o.kinds[0]:void 0;if(!(!B(t)&&!Pn(this,t)(i)))return this.graph.getNode(i)?.kind}today(){return this.pinned()??(this.ticked&&this.ticked.on===dn()?this.ticked.day: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=ns(this.graph),o=e??this.invariantOptions.context,i=r&&!(o&&"linked"in o)?{...o,linked:r}:e;return{...this.invariantOptions,...i===void 0?{}:{context:i},...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=Lr(e),o=this.today(),i=this.violations();this.ticked={day:r,on:dn()};let s=this.moved(i,this.violations());if(r!==o&&!this.rehearsing&&this.quiet===0)for(let a of this.listeners)a($n,[]);return{day:r,...o===void 0?{}:{was:o},appeared:s.introduces,cleared:s.resolves}}reread(){if(!(this.rehearsing||this.quiet>0))for(let e of this.listeners)e($n,[])}violations(e,t=this.graph){return Ge(t,this.allInvariants(),this.judging(e))}wouldChange(e,t){try{return Xe(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=Xe(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:G.from(this.schema,this.graph.snapshot(),{validate:this.validate}),log:We.from(this.log.all(),this.log.epochs(),{horizon:this.log.horizon}),listeners:new Set,labels:void 0,nextId:()=>`${Cr}:${++t}`,mintBatch:()=>Cr,rehearsing:!0}),e}previewPrimitives(e,t){let r=this.violations(t.context),o=G.from(this.schema,this.graph.snapshot()),i=o.applyPrimitives(e,{restoring:t.restoring===!0}),s=Ge(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=In(t.lineage),a=[],d=[],l=new Set,u=new Set,p=[],c=this.violations(r),f=this.graph.snapshot(),g=this.log.length;if(this.policy)for(let k of e){let R=this.permits(k,i);R.ok||this.refuse(R.refusal,i.id)}for(let k of e){let R=this.refusesAgent(k,i)??this.namesTurnedOff(k,i);R&&this.refuse(R,i.id)}let h=xr(i);h&&this.refuseDeclined(e,i),this.rehearsing||ft(i.id);try{for(let k of e){let R=this.mutation(k.name),m=this.missingFor(k,i);if(m)throw m;let w=Xe(this.graph,R,k.args,this.sighted(i));if(h){let S=Ps(this.schema,this.graph,w.primitives,this.authorName(i),{declaration:!this.suggesting});S&&this.refuse({mutation:k.name,message:S,wouldNeed:[]},i.id)}if(w.primitives.length===0)continue;let y={id:this.nextId(),seq:this.log.length,batch:o,author:i,intent:R.describe!==void 0?w.intent:t.intent??w.intent,...D("batchIntent",t.intent),mutation:k,primitives:w.primitives.map(kn),inverse:[...w.primitives].reverse().map(kn).map(Sn),reads:w.reads,writes:w.writes,...R.describe!==void 0&&w.described&&w.described.length>0?{described:w.described}:{},...D("mergedInto",w.mergedInto),at:this.now(),...D("via",t.via),...D("lineage",s)};this.graph.applyPrimitives(y.primitives),this.log.append(y),a.push(y),d.push(...y.primitives);for(let S of y.reads)l.add(S);for(let S of y.writes)u.add(S);p.push(y.intent)}}catch(k){throw this.putBack(f,g),k}let x=me(f,this.graph.snapshot(),d);this.admitted(t,a,d,x,f,g);let b=this.violations(r);return this.notify(x,a),{batch:o,ops:a,diff:x,primitives:d,reads:[...l],writes:[...u],intent:t.intent??p.join("; "),...this.moved(c,b),violationsAfter:b}}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 en(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(me(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(kn),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,...D("batchIntent",a.batchIntent),mutation:a.mutation??null,primitives:l,inverse:a.inverse??[...l].reverse().map(Sn),reads:a.reads??[],writes:a.writes??[...new Set(l.flatMap($e))],at:a.at??this.now(),...D("undoes",a.undoes),...D("via",a.via),...D("lineage",In(a.lineage))};if(r.has(u.id))throw new E(`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 en(a,d)}for(let a of i)this.log.append(a);for(let a of i)ft(a.author.id);return this.notify(me(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=In(t.lineage),l=e.map(kn),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(Sn),reads:[],writes:[...new Set(l.flatMap($e))],at:this.now(),...D("via",t.via),...D("lineage",d)};this.graph.applyPrimitives(f.primitives),this.log.append(f),u.push(f),ft(o.id)}let p=this.violations(),c=me(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 ya({schema:this.schema,invariants:this.allInvariants()},this.graph.snapshot(),{invariantOptions:this.invariantOptions})}batches(){return this.log.batches()}canUndo(e){return An(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=$s(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(ka),...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&&!B(o);if(i){let h=An(Rr(Ue(this.log.all(),_r(this,o)),()=>this.log.epochs()),r);if(!h.ok)throw new _e(h)}let s=this.canUndo(r);if(!s.ok)throw new _e(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=In(t.lineage);if(this.policy)for(let h of s.ops){if(!h.mutation)continue;let x=I(h.author).id,b=R=>JSON.stringify(R).includes(JSON.stringify(x)),k=x!==void 0&&x!==I(o).id&&!B(o)&&!b(h.mutation.args)&&b(h.primitives)?{ok:!1,refusal:{mutation:h.mutation.name,wouldNeed:[],message:"it was done as somebody else."}}:this.permits(h.mutation,o);k.ok||this.refuse({...k.refusal,message:`Not permitted to undo "${h.intent}": ${k.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((x,b)=>b.seq-x.seq)){let x={id:this.nextId(),seq:this.log.length,batch:a,author:o,intent:`Undo: ${h.intent}`,...D("batchIntent",t.intent),mutation:null,primitives:h.inverse,inverse:[...h.inverse].reverse().map(Sn),reads:h.reads,writes:h.writes,at:this.now(),undoes:h.id,...D("via",t.via),...D("lineage",d),...D("undoneLineage",h.lineage)};this.graph.applyPrimitives(x.primitives,{restoring:ka(h)}),this.log.append(x),p.push(x)}let f=me(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 vn(e,{graph:this.graph,schema:this.schema})}refuseDeclined(e,t){let r=Os(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&&cs(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 E(`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 E(`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 x of[...i].reverse())this.graph.applyPrimitives(x.inverse,{restoring:!0,inPlace:!0});this.log.truncate(s);let h=new Set(this.log.all().map(x=>x.id));for(let x of e.confirmed){if(h.has(x.id))continue;try{this.graph.applyPrimitives(x.primitives,{restoring:x.undoes!==void 0})}catch(k){throw new en(x,k)}let b={...x,seq:this.log.length};this.log.append(b),h.add(x.id),u.push(b)}for(let x of e.pending){let b=i.filter(k=>k.batch===x);if(b.length!==0)try{p.push(...this.replay(x,b))}catch(k){c.push({batch:x,error:k})}}}catch(h){this.log.truncate(s);for(let x of i)this.log.append(x);throw this.graph.load(l),h}finally{this.quiet--}let f=Ce(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,D("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=Ce(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,...D("intent",r.batchIntent),...D("via",r.via),...D("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 E(`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 Ws(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 E(`Cannot compact a store that does not verify: ${o.reason}`);let i=this.log.checkpointAt(this.schema,r,{validate:this.validate}),s=Is(this.log,r);return Object.keys(s).length>0?{...i,creators:s}:i}compact(e){return this.stillNow(),this.log.compact(e)}};var Ra=["full","summary","glyph"],Kr=(n,e)=>n.as===e.as&&(n.over??[n.kind]).includes(e.kind),zu=n=>n.filter((e,t)=>!n.slice(0,t).some(r=>Kr(r,e)));function ue(n){return n.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function jn(n,e){return`/${ue(n.tryDefinition(e)?.plural??`${e}s`)}`}function Mu(n,e,t){return`${jn(n,e)}/${encodeURIComponent(t)}`}function Nu(n,e){return`/places/${encodeURIComponent(n)}${e?`?of=${encodeURIComponent(e)}`:""}`}function Aa(n,e){return e.some(t=>t.as===n.as&&!Kr(n,t))}function Iu(n,e,t){return Aa(n,e)?`${n.title} \xB7 ${(t.tryDefinition(n.kind)?.plural??`${n.kind}s`).toLowerCase()}`:n.title}var Oe=(n,e,t="")=>`${n}|${e.cardinality}|${e.fidelity}|${t}`;function Ur(n){switch(n){case"full":return["full","summary","glyph"];case"summary":return["summary","full","glyph"];case"glyph":return["glyph","summary","full"]}}function ju(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}:{}},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(Oe(a,d),c),u?.title){let f=ue(u.title);e.set(Oe(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})}return s},places:()=>t,forget(a,d){for(let u of Ra)e.delete(Oe(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(Oe(a,d))?.view},resolve(a,d,l){if(l)for(let u of Ur(d.fidelity)){let p=e.get(Oe(a,{cardinality:d.cardinality,fidelity:u},l));if(p)return p}for(let u of Ur(d.fidelity)){let p=e.get(Oe(a,{cardinality:d.cardinality,fidelity:u}));if(p)return p}if(d.cardinality==="one")for(let u of Ur(d.fidelity)){let p=e.get(Oe(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 Du=["day","week","month","year","decade"];function Oa(n){let e={};n.q&&n.q.trim().length>0&&(e.query=n.q);let t=cr(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,...Du.includes(o)?{bucket:o}:{}})}return e}function Vr(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 gt(n,e,t){let r=Vr(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 Tu(n,e,t){let r=Vr(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 mt={timeline:{binds:"fields",requiredRoles:["start","end"],options:["columns","extent","tick","minWindow","arranging"]},calendar:{binds:"fields",requiredRoles:["start"],options:["today","range","weekStartsOn","perCell","horizon","arranging"]},coverage:{binds:"entities",requiredRoles:["rows","columns","link"],options:["rowRef","rowGroup","groupOrder","requiredGroups","requiredVia","badge","columnGroup","sort","columnSort"]},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"]}},Ea=Object.keys(mt),za=n=>Object.hasOwn(mt,n);var nn=n=>typeof n=="object"&&n!==null&&!Array.isArray(n);function Pa(n,e,t){let r=n.tryDefinition(e)?.fields.shape,o=M(r?.[t]);for(;o&&(o.type==="optional"||o.type==="default"||o.type==="nullable"||o.type==="prefault");)o=M(o.innerType);return o?.type!=="enum"?[]:(o.entries?Object.values(o.entries):o.values??[]).filter(s=>typeof s=="string")}function Fu(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=(y,S)=>{t.push({index:l,name:d.name,...p?{title:p}:{},why:y}),S&&r.push({severity:"warning",...S})};if(!za(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 ${Ea.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=mt[d.name],g=nn(d.options)?d.options:{};if(d.options!==void 0&&!nn(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 y of Object.keys(g))f.options.includes(y)||r.push({severity:"warning",code:"lens-option-unknown",path:`${u}.options.${y}`,message:`The ${d.name} lens takes no option "${y}", so "${p}" ignores it.`,fix:f.options.length===0?`The ${d.name} lens takes no options; drop it.`:`Use one of: ${f.options.join(", ")}.`});let h={};for(let y of f.options)g[y]!==void 0&&(h[y]=g[y]);d.arrangedBy&&(h.arrangedBy=Oa(d.arrangedBy));let x=nn(d.bindings)?d.bindings:{},b=[],k,R=(y,S,v)=>c(S,{code:"lens-cannot-draw",path:y,message:`"${p}" cannot draw: ${S}.`,fix:v});if(f.binds==="fields"){let y=Object.keys(x).filter(v=>nn(x[v])),S=y.filter(v=>!o.has(v));if(y.length===0)return R(`${u}.bindings`,"it binds no kind",`Bind a kind's fields: "bindings": { "<kind>": { ${f.requiredRoles.map(v=>`"${v}": "<field>"`).join(", ")} } }.`);if(S.length>0)return;if(h.bindings=x,b=y,d.name==="timeline"){let v=g.columns;if(Array.isArray(v))h.columns=v.map($=>typeof $=="string"?{id:$,label:$}:$);else{let $=y.flatMap(z=>{let j=x[z],q=typeof j.column=="string"?j.column:typeof j.columns=="string"?j.columns:void 0;return q?Pa(n.schema,z,q):[]}),_=[...new Set($)];if(_.length===0)return R(`${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(z=>({id:z,label:z.toUpperCase()}))}h.extent===void 0&&(h.extent=1440)}if(d.name==="columns"){if(h.sort!==void 0){let v=y.map($=>gt(h.sort,s($),$)).find(Boolean);v&&(r.push({severity:"warning",code:"lens-sort",path:`${u}.options.sort`,message:`"${p}" cannot order its cards: ${v}.`,fix:'Write { "by": "<a field>", "direction": "asc" }, or drop it.'}),delete h.sort)}for(let v of y){let $=x[v].column;if(typeof $!="string"||!s(v).includes($))return;if(Pa(n.schema,v,$).length===0)return R(`${u}.bindings.${v}.column`,`its column field "${$}" is not a choice`,`Bind "column" to a choice field of ${v}, like a status.`)}}if(d.name==="calendar"&&h.today!==void 0&&!(typeof h.today=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(h.today)))return R(`${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 v=h.horizon,$=j=>j===void 0||Number.isInteger(j)&&j>=1&&j<=9999,_=typeof v=="number"?{years:v,title:"Years"}:v;nn(_)&&Number.isInteger(_.years)&&_.years>=1&&_.years<=200&&typeof _.title=="string"&&_.title.trim().length>0&&$(_.from)&&$(_.to)&&Object.keys(_).every(j=>["years","title","from","to"].includes(j))&&!(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 R(`${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 y=$=>{let _=x[$];if(nn(_)){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 $ of f.requiredRoles)if(y($)===void 0)return;let S=d.name==="coverage"?"rows":d.name==="board"?"slots":"regions",v=y(S);if(!o.has(v))return;if(d.name==="coverage"){let $=y("columns");if(!o.has($))return;let _=y("link");if(typeof _=="string"&&!i.has(_))return;Object.assign(h,{rows:v,columns:$,link:_}),$!==v&&(k=$);for(let[z,j]of[["sort",v],["columnSort",$]]){if(h[z]===void 0)continue;let q=gt(h[z],s(j),j);q&&(r.push({severity:"warning",code:"lens-sort",path:`${u}.options.${z}`,message:`"${p}" cannot order its ${z==="sort"?"rows":"columns"}: ${q}.`,fix:`Write { "by": "<a field of ${j}>", "direction": "asc" }, or drop it.`}),delete h[z])}}else if(d.name==="board"){Object.assign(h,{slots:v,x:y("x"),y:y("y"),fill:y("fill")});for(let $ of["x","y"])if(!s(v).includes(h[$]))return}else{Object.assign(h,{regions:v,outline:y("outline")});for(let $ of["markers","at","within","nests","regionKind","markerKind"]){let _=y($);typeof _=="string"&&(h[$]=_)}}b=[v]}else if(d.name==="blocks"){if(!d.on)return R(`${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 R(`${u}.options.blocks`,"it has no blocks to draw",`Say "options": { "blocks": [{ "headline": "\u2026" }, { "list": "all('<kind>')", "as": "card" }] }.`)}else{let y=["user","person","member"].find(S=>o.has(S));if(!d.on&&!y)return R(`${u}.on`,"it does not say which kind it stands on",'Say "on": "<the kind whose records are the people>".');b=y?[y]:[]}if(d.on!==void 0){if(typeof d.on!="string"||!o.has(d.on))return R(`${u}.on`,`it stands on "${String(d.on)}", which is not a kind`,`Use one of: ${[...o].join(", ")}.`);if(b=[d.on],d.name==="coverage"){let y=[h.rows,h.columns].find(S=>S!==d.on);k=typeof y=="string"?y:void 0}}let m=ue(p);if(m.length===0)return R(`${u}.title`,"its title has no letters or digits to make an address of","Give it a title a person would say.");for(let y of b){let S=`${y}|${m}`;if(a.has(S))return c(`another lens on ${y} is already called "${p}"`,{code:"lens-title-taken",path:`${u}.title`,message:`"${p}" is the title of lenses.${a.get(S)} too, on the same kind, so one address would name two pictures.`,fix:"Give each its own title."})}for(let y of b)a.set(`${y}|${m}`,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:m,kinds:b,...k?{across:k}:{},options:h,...d.hidden===!0?{hidden:!0}:{},...w===!1?{create:!1}:{}})}),{drawn:e,undrawn:t,findings:r}}var Zu=6;function Lu(n,e,t=[]){let r=n.kinds,o=s=>Object.values(n.tryDefinition(s)?.edges??{}).map(a=>(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 Cu(n,e,t){if(!n?.primary)return;let r=new Set(n.primary.map(ue));return{kinds:new Set(e.kinds.filter(o=>r.has(ue(o))||r.has(jn(e,o).slice(1)))),places:new Set(t.filter(o=>r.has(o.as)||r.has(ue(o.title))).map(o=>`${o.kind}|${o.as}`))}}var Ma="overview",Gu=`/places/${Ma}`;function Bu(n){let e=n?.scene?.trim();return e||"Scene"}function Uu(n){let e=n?.pages?.trim();return e||"Pages"}function Ku(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 Vu(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=ue(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=>jn(e,d).slice(1)===o);return a?{to:"kind",kind:a}:void 0}function Wr(n){let e=(n??"").replace(/\/+$/,"");return e===""?"":e.startsWith("/")?e:`/${e}`}function Wu(n,e={}){let t=typeof n=="string"?n:n.address,r=Wr(e.basePath),o=t.startsWith("/")?t:`/${t}`;return r===""?o:o==="/"?r:o.startsWith("/?")||o.startsWith("/#")?`${r}${o.slice(1)}`:`${r}${o}`}function qu(n,e){let t=Wr(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 Na=Symbol.for("@graview/core:app-link"),Hu=n=>(Object.defineProperty(M(n),Na,{value:1,enumerable:!0}),n);function Ia(n){let e=M(n);return!!e&&(e[Na]===1||Ia(e.innerType))}var Ox=()=>Hu(F().check(nr(500),gn(Hn,"another app's address")));var yt=(n,e)=>`${e.kind}\0${e.id??""}\0${n.address}\0${n.kind}\0${n.id}`;function Ju(n,e,t=()=>{}){let r=new Map,o=new Map,i=s=>{let a=yt(s,e),d=r.get(a);return d||(d=Promise.resolve().then(()=>n.resolve(s,e)).then(l=>Yu(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=yt(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(yt(s,e)),forget(s){if(!s){r.clear(),o.clear();return}let a=yt(s,e);r.delete(a),o.delete(a)}}}function Yu(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 Xu=1;var bt=(n,e)=>`${n}\0${e}`;function Hr(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 qr=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 Hr(r)){let s=bt(o,i);(this.revs.get(s)??-1)<t.seq&&this.revs.set(s,t.seq)}}of(e,t){return this.revs.get(bt(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=bt(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 Qu(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 Hr(r))e.add(bt(o,i))}return e}var el=/^#([0-9a-f]{3,8})$/i,nl=/(rgba?|hsla?)\(([^)]+)\)/gi;function tl(n){let e=el.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 rl(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:{...Da(o,i>1?i/100:i,s>1?s/100:s),a:a??1}}function Yr(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 Xr(n,e,t){return{...Da(n,e,t),a:1}}function Da(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 tn(n){let e=[];for(let t of n.matchAll(nl)){let r=rl(t[0]);r&&e.push(r)}for(let t of n.matchAll(/#[0-9a-fA-F]{3,8}\b/g)){let r=tl(t[0]);r&&e.push(r)}return e}function Qr(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 Jr(n){let e=n/255;return e<=.03928?e/12.92:((e+.055)/1.055)**2.4}function ja(n){return .2126*Jr(n.r)+.7152*Jr(n.g)+.0722*Jr(n.b)}function rn(n,e){let[t,r]=[ja(n),ja(e)].sort((o,i)=>i-o);return(t+.05)/(r+.05)}var xt=(n,e)=>`rgba(${Math.round(n.r)}, ${Math.round(n.g)}, ${Math.round(n.b)}, ${e})`,Ta={r:0,g:0,b:0,a:1},vt={r:255,g:255,b:255,a:1};function wt(n){let e=tn(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=Yr(e);for(let s of["dark","light"]){let a=n.base[s],d=tn(a.ground)[0]??(s==="dark"?Ta:vt),l=Qr(tn(a.panel)[0]??vt,d),u=al(i,[l,d],s,4.5);u?Math.abs(u.l-i.l)>sl&&(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=Xr(p.h,p.s,p.l),f=n.accentInk?.[s]??(rn(vt,c)>=rn(Ta,c)?"#ffffff":"#000000"),g=rn(tn(f)[0]??vt,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:xt(c,1),accentDim:xt(c,s==="dark"?.35:.22),accentInk:f,glow:xt(c,s==="dark"?.28:.1),edgeBright:xt(c,ol(c,l,s==="dark"?.55:.42,3)),...n.warn?.[s]?{warn:n.warn[s]}:{}};let h=tn(t[s].warn)[0];h&&il(Yr(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 ol(n,e,t,r){for(let o=Math.round(t*100);o<=100;o++){let i=o/100;if(rn(Qr({...n,a:i},e),e)>=r)return i}return 1}function il(n,e){let t=Math.abs(n-e)%360;return t>180?360-t:t}var sl=.3;function al(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=>rn(Xr(n.h,n.s,d),l)>=r))return{...n,l:d}}return null}function dl(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 Pe=Object.freeze({navy:"#001769",turquoise:"#00e5b9",paper:"#f7f7f2",ink:"#18213a",muted:"#586174"}),eo="Montserrat",no=Object.freeze({display:550,body:450,label:600}),to=Object.freeze({display:600,body:400,label:600}),cl="-0.025em",ul=Object.freeze({minWidth:140,clearSpace:.5,microMax:24,regularMin:32,microBelow:28});var Fa={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:Pe.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},Za={ground:Pe.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:Pe.ink,inkMuted:Pe.muted,inkFaint:"#626b7d",accent:Pe.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},on={dark:Fa,light:Za};var ve=Object.freeze({radius:8,density:1,radiusSmall:.72,radiusSmallFloor:2,pad:15,padSmall:10,gap:7}),Ee=Object.freeze({body:`"${eo}", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif`,mono:'ui-monospace, SFMono-Regular, "SF Mono", Menlo, monospace'});function ll(n){let e=n?.shape?.radius??ve.radius,t=n?.shape?.density??ve.density;return Object.freeze({radius:e,radiusSmall:Math.max(ve.radiusSmallFloor,Math.round(e*ve.radiusSmall)),pad:Math.round(ve.pad*t),padSmall:Math.round(ve.padSmall*t),gap:Math.round(ve.gap*t)})}function fl(n){let e=n?.typography?.body??Ee.body,t=n?.typography?.display??e,o=e===Ee.body&&t===Ee.body?no:to,i=n?.typography?.weights;return Object.freeze({body:e,display:t,mono:n?.typography?.mono??Ee.mono,weights:Object.freeze({display:i?.display??o.display,body:i?.body??o.body,label:i?.label??o.label})})}var Gx=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 Ca(n){return/^\s*(<\?xml[^>]*>\s*)?(<!--[\s\S]*?-->\s*)*(<!DOCTYPE svg[^>]*>\s*)?<svg[\s>/]/i.test(n)}var Ga="http://www.w3.org/2000/svg",pl=["http://www.w3.org/1999/xhtml","http://www.w3.org/1998/Math/MathML",Ga],hl=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(" ")),gl=new Set(["title","desc"]),Dn="it embeds a page or media",ml={script:"it has a script in it",foreignobject:"it embeds HTML (foreignObject)",iframe:Dn,embed:Dn,object:Dn,audio:Dn,video:Dn,style:"it has a style sheet in it; a mark is styled by its attributes",a:"it links to something (an <a> element)"},yl={amp:"&",lt:"<",gt:">",quot:'"',apos:"'"};function bl(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=yl[o.toLowerCase()];return i===void 0&&(e=!0),i??""});return e?null:t}function xl(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 vl(n,e,t){let r=bl(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===Ga?null:"it changes what its elements are (another xmlns)";if(e.startsWith("xmlns:"))return pl.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 xl(r)?null:o==="style"?"its style loads something outside itself":"it loads or links to something outside itself"}var La=/^\s+([A-Za-z_][A-Za-z0-9_.:-]*)\s*=\s*(?:"([^"<]*)"|'([^'<]*)')/;function Ba(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=ml[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(!hl.has(d))return`it has a <${d}> element, which a picture does not need`;let u=e[e.length-1];if(u&&gl.has(u))return`it has an element inside a <${u}>, which the page reads as HTML`;let p=a[0].length;for(let f=La.exec(o.slice(p));f;f=La.exec(o.slice(p))){let g=vl(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 Ua(n){if(n){if(!Ca(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 Ba(n)===null?`data:image/svg+xml,${encodeURIComponent(n.trim())}`:void 0}}var kt;function wl(){if(kt===void 0)try{kt=new RegExp("^\\p{RGI_Emoji}$","v")}catch{kt=null}return kt}function kl(n){return/\p{Extended_Pictographic}|\p{Regional_Indicator}|⃣/u.test(n)}function ro(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(kl).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=wl();return r&&!r.test(n)?"it is not one of the standard emoji every emoji set draws":null}function oo(n){return typeof n=="object"&&n!==null&&typeof n.emoji=="string"?n.emoji:void 0}function Ka(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 Sl(n){let e=n?.favicon;if(typeof e=="object"&&e!==null){let t=oo(e);return t!==void 0&&ro(t)===null?`data:image/svg+xml,${encodeURIComponent(Ka(t))}`:void 0}return Ua(e)}function $l(n){if(n?.logo)return;let e=oo(n?.favicon);return e!==void 0&&ro(e)===null?e:void 0}var Va={"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":Ee.mono},_l=["serif","sans-serif","monospace","cursive","fantasy","system-ui","math","emoji","-apple-system","BlinkMacSystemFont"],Wa=["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 Rl=n=>new Set(n.map(e=>e.toLowerCase()));function Al(n){return Rl([..._l,...Wa]).has(n.toLowerCase())||n.toLowerCase().startsWith("ui-")}function Ol(n){return Va[n]??n}function Hx(n){let e=wt({accent:n,base:on});return e.ok||!e.missing.every(t=>t.startsWith("warn"))?e:wt({accent:n,base:on,warn:{light:on.light.bad,dark:on.dark.bad}})}function Pl(n,e,t){if(t.rows===0)return;let r=J(n,e.rows).toLowerCase(),o=J(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=Y(n.tryDefinition(e.rows),e.rows);return i?`No ${a} is linked to another yet: ${s}.`:`No ${a} is linked to ${ze(Y(n.tryDefinition(e.columns),e.columns))} yet: ${s}.`}var te={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 El(n){return n?{connectors:{all:{...te.connectors.all,...n.connectors?.all??{}},byEdge:{...te.connectors.byEdge,...n.connectors?.byEdge??{}}},captions:{...te.captions,...n.captions??{}},grid:{...te.grid,...n.grid??{}},lattice:{...te.lattice,...n.lattice??{}},tags:{...te.tags,...n.tags??{}},emphasis:{...te.emphasis,...n.emphasis??{}},marks:{...te.marks,...n.marks??{}}}:te}function zl(n,e){return{...n.connectors.all,...n.connectors.byEdge[e]??{}}}function Ml(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 Nl(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 Il(n){let e=n.name??"";return e&&n.onBehalfOfName?`${e}, for ${n.onBehalfOfName}`:e}function io(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 jl(n){return`${n.kind}:${n.id??""}:${n.session??""}`}function Dl(n,e,t,r=2500,o){let i=new Map;for(let[s,a]of n)io(a,t,r)&&i.set(s,a);for(let s of e){if(!io(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 Tl(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{Ie as a,ji as b,Di as c,Ld as d,nr as e,hn as f,gn as g,F as h,Yh as i,Xh as j,Vn as k,Qh as l,eg as m,ng as n,tr as o,tg as p,je as q,Wn as r,rg as s,og as t,ig as u,Ki as v,Vi as w,de as x,qn as y,sg as z,ag as A,M as B,oc as C,lo as D,an as E,_t as F,Fl as G,dn as H,qa as I,ho as J,fe as K,Rt as L,Ha as M,re as N,Ja as O,Ya as P,Xa as Q,Qa as R,ed as S,cn as T,mo as U,td as V,Ot as W,T as X,rd as Y,C as Z,od as _,J as $,id as aa,sd as ba,Zn as ca,ze as da,Y as ea,ic as fa,Wi as ga,ir as ha,qi as ia,mn as ja,Ji as ka,dm as la,Jn as ma,Ia as na,Ox as oa,dc as pa,uc as qa,Qi as ra,lc as sa,fm as ta,yn as ua,fc as va,hc as wa,pm as xa,hm as ya,gc as za,ns as Aa,Ju as Ba,Yn as Ca,mc as Da,Te as Ea,xn as Fa,Xn as Ga,ym as Ha,Fe as Ia,De as Ja,ds as Ka,xc as La,vn as Ma,Se as Na,wm as Oa,cr as Pa,Qn as Qa,vc as Ra,O as Sa,Sn as Ta,E as Ua,G as Va,Sc as Wa,tt as Xa,Fm as Ya,$c as Za,_c as _a,Xu as $a,I as ab,B as bb,ye as cb,be as db,qm as eb,bs as fb,Be as gb,N as hb,Ue as ib,ne as jb,Ec as kb,Ve as lb,uu as mb,Mr as nb,Xs as ob,Xe as pb,Hy as qb,Nr as rb,na as sb,ta as tb,Ir as ub,zn as vb,Er as wb,Mn as xb,mu as yb,ra as zb,jr as Ab,Dr as Bb,sa as Cb,ua as Db,Re as Eb,qr as Fb,Qu as Gb,Qe as Hb,xr as Ib,Rs as Jb,Nc as Kb,jc as Lb,dl as Mb,eo as Nb,cl as Ob,on as Pb,Ee as Qb,ll as Rb,fl as Sb,Ca as Tb,Ba as Ub,Ua as Vb,Sl as Wb,$l as Xb,Al as Yb,Ol as Zb,Hx as _b,Tu as $b,Pl as ac,El as bc,zl as cc,Ml as dc,Dc as ec,Tc as fc,Fc as gc,Zc as hc,qe as ic,On as jc,ce as kc,it as lc,Je as mc,Pn as nc,_r as oc,En as pc,Lc as qc,Cc as rc,Nl as sc,Ru as tc,qs as uc,Au as vc,_a as wc,en as xc,Br as yc,Kr as zc,zu as Ac,ue as Bc,jn as Cc,Mu as Dc,Nu as Ec,Aa as Fc,Iu as Gc,ju as Hc,Oa as Ic,mt as Jc,Ea as Kc,za as Lc,Fu as Mc,Zu as Nc,Lu as Oc,Cu as Pc,Ma as Qc,Gu as Rc,Bu as Sc,Uu as Tc,Ku as Uc,Vu as Vc,Wr as Wc,Wu as Xc,qu as Yc,Il as Zc,jl as _c,Dl as $c,Tl as ad};
|