graview 0.1.38 → 0.1.39
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.23WYWIAJ.js +1 -0
- package/dist/preview/{chunk.5XJEGXDO.js → chunk.2BJRS3YJ.js} +1 -1
- package/dist/preview/{chunk.ROGYDMES.js → chunk.2GGDOFTF.js} +1 -1
- package/dist/preview/chunk.2HF54MYG.js +1 -0
- package/dist/preview/{chunk.OE4QOBJF.js → chunk.2IX3CZNP.js} +1 -1
- package/dist/preview/chunk.2NSTEREJ.js +1 -0
- package/dist/preview/chunk.2RCNSHXK.js +1 -0
- package/dist/preview/chunk.37ASLBGE.js +1 -0
- package/dist/preview/{chunk.33GN2NUT.js → chunk.3ZNQ5YKX.js} +1 -1
- package/dist/preview/{chunk.EUGWV3S6.js → chunk.4BBJ62ZO.js} +1 -1
- package/dist/preview/chunk.4ECICQ2S.js +1 -0
- package/dist/preview/{chunk.B5ILKGEF.js → chunk.4PNFX3TX.js} +1 -1
- package/dist/preview/{chunk.WG5NIR23.js → chunk.546WEHEX.js} +1 -1
- package/dist/preview/chunk.57OPL5WD.js +1 -0
- package/dist/preview/{chunk.36SQJMEE.js → chunk.5JPRFXYQ.js} +1 -1
- package/dist/preview/chunk.5OJJ2TKZ.js +9 -0
- package/dist/preview/chunk.5R4E5C76.js +1 -0
- package/dist/preview/{chunk.7H5KVW2F.js → chunk.5XNVN4HE.js} +1 -1
- package/dist/preview/chunk.5ZMENPY4.js +5 -0
- package/dist/preview/{chunk.YPY5BOEI.js → chunk.67USHK26.js} +1 -1
- package/dist/preview/chunk.6CFP5UYP.js +1 -0
- package/dist/preview/{chunk.74RMHUCX.js → chunk.6DHHUBSC.js} +1 -1
- package/dist/preview/chunk.6HBEYRJU.js +1 -0
- package/dist/preview/chunk.6L7IDF3J.js +1 -0
- package/dist/preview/{chunk.ZRQI5VJF.js → chunk.6XU2CXRZ.js} +1 -1
- package/dist/preview/{chunk.2VIGF4FO.js → chunk.7EFNLMKU.js} +1 -1
- package/dist/preview/chunk.7WSXVXP3.js +1 -0
- package/dist/preview/chunk.ALDLAQ7V.js +1 -0
- package/dist/preview/chunk.AYHCQWSU.js +1 -0
- package/dist/preview/{chunk.QYRPELLU.js → chunk.B2IRADR2.js} +1 -1
- package/dist/preview/{chunk.V2NBJDAX.js → chunk.B7TB6YRZ.js} +1 -1
- package/dist/preview/chunk.BCHHBGM6.js +1 -0
- package/dist/preview/{chunk.LHO7L3CS.js → chunk.BEC5ZH2L.js} +1 -1
- package/dist/preview/chunk.BL4S3I2N.js +1 -0
- package/dist/preview/chunk.BS3FX4PX.js +1 -0
- package/dist/preview/chunk.BTSXYZ6Z.js +25 -0
- package/dist/preview/chunk.BYKR7NEE.js +1 -0
- package/dist/preview/chunk.BZSU4HH2.js +1 -0
- package/dist/preview/chunk.C2OAKTZX.js +1 -0
- package/dist/preview/chunk.C4CFYTCW.js +1 -0
- package/dist/preview/{chunk.6ONRWFA6.js → chunk.C6X7CKU6.js} +1 -1
- package/dist/preview/chunk.CAMQ7MYJ.js +1 -0
- package/dist/preview/{chunk.NPX7SPXM.js → chunk.CC47O2DW.js} +1 -1
- package/dist/preview/{chunk.ZLXPIEUC.js → chunk.CF7DHTKL.js} +2 -2
- package/dist/preview/{chunk.SGB6IMWN.js → chunk.CMN6VVK2.js} +1 -1
- package/dist/preview/chunk.CTK2P4JV.js +3 -0
- package/dist/preview/chunk.DAA7IDQ4.js +1 -0
- package/dist/preview/{chunk.6UCRL4OF.js → chunk.DYNBWIPF.js} +1 -1
- package/dist/preview/chunk.E3HXXUKY.js +1 -0
- package/dist/preview/{chunk.GZ3IXNA4.js → chunk.EBHKKOPO.js} +1 -1
- package/dist/preview/chunk.EDC4EMIX.js +1 -0
- package/dist/preview/chunk.EM4Y4YAD.js +2 -0
- package/dist/preview/{chunk.IEDXW36H.js → chunk.EWWJMS6G.js} +1 -1
- package/dist/preview/chunk.F5UVEF2R.js +1 -0
- package/dist/preview/{chunk.TKSGC6XH.js → chunk.FCXBCKED.js} +1 -1
- package/dist/preview/chunk.FGDHEVH4.js +1 -0
- package/dist/preview/{chunk.IM7LXLIB.js → chunk.FILCNVGH.js} +1 -1
- package/dist/preview/chunk.FJBQ4UP3.js +32 -0
- package/dist/preview/{chunk.RZVZG2BQ.js → chunk.FMN5XDLE.js} +1 -1
- package/dist/preview/chunk.G23VFYGF.js +88 -0
- package/dist/preview/chunk.G46WGK5E.js +1 -0
- package/dist/preview/chunk.GAFYE37S.js +3 -0
- package/dist/preview/{chunk.VNBR4DHD.js → chunk.GP2F7TIN.js} +1 -1
- package/dist/preview/chunk.GXKECZ4S.js +19 -0
- package/dist/preview/{chunk.3D5T3XIE.js → chunk.H5CZZZLX.js} +1 -1
- package/dist/preview/{chunk.V5ZT5NSJ.js → chunk.HA3PPIEQ.js} +1 -1
- package/dist/preview/chunk.HFDYFPMJ.js +1 -0
- package/dist/preview/chunk.HFYUAK5Z.js +6 -0
- package/dist/preview/chunk.HGS32FT2.js +1 -0
- package/dist/preview/chunk.HHUCPVG5.js +1 -0
- package/dist/preview/{chunk.LF7PU77M.js → chunk.I7CU2E3C.js} +1 -1
- package/dist/preview/{chunk.MCVY6RRS.js → chunk.IAZRY42B.js} +1 -1
- package/dist/preview/{chunk.5MSO3KRO.js → chunk.ITEF3U2E.js} +1 -1
- package/dist/preview/{chunk.AZCFXPEL.js → chunk.IXYBIDAN.js} +1 -1
- package/dist/preview/{chunk.FTJBW25J.js → chunk.J3M2MZHG.js} +1 -1
- package/dist/preview/{chunk.MVNUWK5Y.js → chunk.JBTU2PJ4.js} +1 -1
- package/dist/preview/chunk.JCR3ECUM.js +1 -0
- package/dist/preview/{chunk.JWJQ2VXS.js → chunk.JEZTPXEB.js} +1 -1
- package/dist/preview/chunk.KIJCOW25.js +1 -0
- package/dist/preview/{chunk.2EJAIT33.js → chunk.KJNUZYXS.js} +1 -1
- package/dist/preview/chunk.L7DQKPJV.js +117 -0
- package/dist/preview/{chunk.RVJYEOFN.js → chunk.LCYMYLOP.js} +1 -1
- package/dist/preview/chunk.LP2DJ5ZB.js +6 -0
- package/dist/preview/chunk.LP3QUPCE.js +1 -0
- package/dist/preview/chunk.M5QFUGGG.js +1 -0
- package/dist/preview/chunk.N2SV3KX7.js +1 -0
- package/dist/preview/chunk.N7N5OFPL.js +1 -0
- package/dist/preview/{chunk.WERYQENC.js → chunk.NG3YMQ36.js} +1 -1
- package/dist/preview/{chunk.MWZK3HVG.js → chunk.NSNGPQGT.js} +1 -1
- package/dist/preview/chunk.OJKS3UQS.js +1 -0
- package/dist/preview/{chunk.KNJZ2YNJ.js → chunk.OM5CDW2S.js} +1 -1
- package/dist/preview/{chunk.QT4XGC5Z.js → chunk.ORXFUK6F.js} +2 -2
- package/dist/preview/chunk.OXTUXWMU.js +1 -0
- package/dist/preview/chunk.OYMM2UWE.js +1 -0
- package/dist/preview/chunk.P3JYH6HO.js +1 -0
- package/dist/preview/{chunk.FMVWXSQ7.js → chunk.P4WYBSYA.js} +1 -1
- package/dist/preview/chunk.P5325GYR.js +1 -0
- package/dist/preview/chunk.PMER4LVT.js +1 -0
- package/dist/preview/chunk.PONWLTTB.js +1 -0
- package/dist/preview/chunk.PXQVXBNG.js +1 -0
- package/dist/preview/chunk.QCF6Z2AZ.js +1 -0
- package/dist/preview/chunk.QEXXLWEU.js +6 -0
- package/dist/preview/chunk.QMFUPTR4.js +1 -0
- package/dist/preview/{chunk.BUVAMSOZ.js → chunk.RM7NVN7B.js} +2 -2
- package/dist/preview/{chunk.YUJG5SN5.js → chunk.ROINZMNO.js} +1 -1
- package/dist/preview/chunk.ROKRQRID.js +35 -0
- package/dist/preview/chunk.RWB4235L.js +1 -0
- package/dist/preview/chunk.RXSHFG6S.js +1 -0
- package/dist/preview/chunk.SDO3U72B.js +1 -0
- package/dist/preview/chunk.SHNYYBNW.js +1 -0
- package/dist/preview/{chunk.L73VUBXN.js → chunk.SK33IHL2.js} +2 -2
- package/dist/preview/chunk.STBJV6HJ.js +1 -0
- package/dist/preview/chunk.TCUB6IDY.js +1 -0
- package/dist/preview/chunk.TJCTTJWE.js +1 -0
- package/dist/preview/{chunk.SZWX56WR.js → chunk.TU4KG22J.js} +2 -2
- package/dist/preview/chunk.U4E5GQTK.js +1 -0
- package/dist/preview/{chunk.Z3ZKYSPN.js → chunk.U7QMA4H7.js} +1 -1
- package/dist/preview/{chunk.UXIFQIHA.js → chunk.UB3O3QJQ.js} +1 -1
- package/dist/preview/{chunk.6XJP7F3I.js → chunk.UCZR33MK.js} +1 -1
- package/dist/preview/chunk.UGCNMAPC.js +1 -0
- package/dist/preview/{chunk.VKHKYK5L.js → chunk.UIUHGA6W.js} +1 -1
- package/dist/preview/chunk.VC4JPG7O.js +1 -0
- package/dist/preview/{chunk.DL637Q3W.js → chunk.W4OX4BMP.js} +1 -1
- package/dist/preview/chunk.WJQY4E45.js +1 -0
- package/dist/preview/{chunk.XHWL7QBF.js → chunk.WQPNGBR7.js} +1 -1
- package/dist/preview/chunk.WTZOOAIW.js +1 -0
- package/dist/preview/{chunk.FUJM7GDV.js → chunk.WXYUWBKX.js} +1 -1
- package/dist/preview/chunk.XBOZTQQA.js +1 -0
- package/dist/preview/{chunk.TOWYHWPB.js → chunk.XLI44BBI.js} +1 -1
- package/dist/preview/chunk.XLZ2QRRS.js +1 -0
- package/dist/preview/chunk.XQTMO5PW.js +1 -0
- package/dist/preview/chunk.YWVOACSX.js +5 -0
- package/dist/preview/{chunk.67WL7BGF.js → chunk.YXGI7H4Y.js} +1 -1
- package/dist/preview/{chunk.GR5Q4HTW.js → chunk.Z7JRBKA7.js} +1 -1
- package/dist/preview/chunk.ZR5KVYWZ.js +21 -0
- package/dist/preview/{chunk.6IHXTT6Z.js → chunk.ZTMDU3OH.js} +1 -1
- package/dist/preview/index.html +45 -43
- package/dist/preview/page.js +7 -7
- package/package.json +6 -6
- package/dist/preview/chunk.2HFRVWWM.js +0 -1
- package/dist/preview/chunk.3FW4QNGV.js +0 -1
- package/dist/preview/chunk.3RT2GUZ5.js +0 -1
- package/dist/preview/chunk.3ZRHHB7X.js +0 -1
- package/dist/preview/chunk.4DEUD66C.js +0 -6
- package/dist/preview/chunk.4EQSP7I3.js +0 -1
- package/dist/preview/chunk.4Y6BCHV2.js +0 -1
- package/dist/preview/chunk.5VBBQ6Z3.js +0 -1
- package/dist/preview/chunk.6CKBIY7L.js +0 -1
- package/dist/preview/chunk.7RSZMIAL.js +0 -1
- package/dist/preview/chunk.AFY35RJP.js +0 -1
- package/dist/preview/chunk.BRHRAVU2.js +0 -3
- package/dist/preview/chunk.DFVVS6C5.js +0 -1
- package/dist/preview/chunk.DQJAEU4V.js +0 -1
- package/dist/preview/chunk.ESSQAMPM.js +0 -1
- package/dist/preview/chunk.EV553KRT.js +0 -1
- package/dist/preview/chunk.EZP4FHDX.js +0 -35
- package/dist/preview/chunk.F6PIK2J2.js +0 -1
- package/dist/preview/chunk.FYIQZMVF.js +0 -1
- package/dist/preview/chunk.HUSFMFXH.js +0 -1
- package/dist/preview/chunk.HVTGPEVW.js +0 -1
- package/dist/preview/chunk.I3SQJ2L2.js +0 -1
- package/dist/preview/chunk.IU6ISXXC.js +0 -1
- package/dist/preview/chunk.K5KEECHL.js +0 -88
- package/dist/preview/chunk.L34FY7QQ.js +0 -1
- package/dist/preview/chunk.L7JKEEMM.js +0 -1
- package/dist/preview/chunk.LAW5PQEM.js +0 -1
- package/dist/preview/chunk.LDD3QX7G.js +0 -1
- package/dist/preview/chunk.LU5LSXSW.js +0 -1
- package/dist/preview/chunk.MQ7FNHXG.js +0 -25
- package/dist/preview/chunk.NH5TDAB2.js +0 -1
- package/dist/preview/chunk.NORRCKGN.js +0 -1
- package/dist/preview/chunk.NQQHOSOK.js +0 -1
- package/dist/preview/chunk.NWWMUOZM.js +0 -1
- package/dist/preview/chunk.OEF3GPRM.js +0 -1
- package/dist/preview/chunk.OS3L4ZOF.js +0 -2
- package/dist/preview/chunk.OTL3Z345.js +0 -1
- package/dist/preview/chunk.P3UPCI23.js +0 -1
- package/dist/preview/chunk.PGKIEDYV.js +0 -9
- package/dist/preview/chunk.PKUWET2F.js +0 -1
- package/dist/preview/chunk.POHEWJKZ.js +0 -1
- package/dist/preview/chunk.PUBG2L6F.js +0 -117
- package/dist/preview/chunk.QTTBZJ6W.js +0 -1
- package/dist/preview/chunk.RJDZOF2L.js +0 -1
- package/dist/preview/chunk.SGLJTSTD.js +0 -1
- package/dist/preview/chunk.SITFEJES.js +0 -1
- package/dist/preview/chunk.UF3L6FJO.js +0 -1
- package/dist/preview/chunk.VSYHU5MA.js +0 -1
- package/dist/preview/chunk.VTWFVPKD.js +0 -19
- package/dist/preview/chunk.VV4BPOIK.js +0 -1
- package/dist/preview/chunk.W2HCJQVK.js +0 -32
- package/dist/preview/chunk.WLPTY4BF.js +0 -5
- package/dist/preview/chunk.XM3NPZLP.js +0 -1
- package/dist/preview/chunk.YAXZNQY6.js +0 -1
- package/dist/preview/chunk.YG423NEB.js +0 -1
- package/dist/preview/chunk.YVR3ZMTV.js +0 -1
- package/dist/preview/chunk.YXH3IWNR.js +0 -1
- package/dist/preview/chunk.ZYCNEOAQ.js +0 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import"./chunk.
|
|
1
|
+
import"./chunk.SK33IHL2.js";import{a as _,b as ge,c as me,e as fe}from"./chunk.U7QMA4H7.js";import"./chunk.C6X7CKU6.js";import"./chunk.HJCQ6I3S.js";import{a as ve,d as ye}from"./chunk.EBHKKOPO.js";import"./chunk.P4WYBSYA.js";import{a as de}from"./chunk.ZTMDU3OH.js";import{d as he}from"./chunk.HFDYFPMJ.js";import"./chunk.RWB4235L.js";import"./chunk.CTK2P4JV.js";import"./chunk.3ZNQ5YKX.js";import"./chunk.7EFNLMKU.js";import"./chunk.ITEF3U2E.js";import"./chunk.B2IRADR2.js";import"./chunk.J3M2MZHG.js";import"./chunk.UT6642FC.js";import"./chunk.B7TB6YRZ.js";import"./chunk.WVUJXDXZ.js";import"./chunk.KJNUZYXS.js";import"./chunk.4BBJ62ZO.js";import"./chunk.UCZR33MK.js";import"./chunk.CC47O2DW.js";import"./chunk.2IX3CZNP.js";import"./chunk.6DHHUBSC.js";import"./chunk.GZHZLJBF.js";import{o as ue,r as K}from"./chunk.HHUCPVG5.js";import"./chunk.OJGHDWI6.js";import{a as ce}from"./chunk.WXYUWBKX.js";import"./chunk.NSNGPQGT.js";import"./chunk.H5CZZZLX.js";import{c as le}from"./chunk.Z7JRBKA7.js";import{r as pe}from"./chunk.ORXFUK6F.js";import{G as xe,K as I,R as re,T as ie,_ as T,aa as R,j as M,ja as G,l as ne,m as B,r as P,v as ae,va as se,wa as W,z as oe}from"./chunk.BTSXYZ6Z.js";import"./chunk.SDO3U72B.js";import{T as D,aa as $,ba as F,ea as q,ga as L,ka as ee,tc as te}from"./chunk.5ZMENPY4.js";import{b as V}from"./chunk.AJZBJBMO.js";var l=V(xe(),1);var e=V(re(),1),Se=pe.part((t,u)=>(0,e.jsx)(t.ProblemRows,{...u}),{what:"The problems",as:"li"}),A="var(--graview-gap, 8px)",ke=720;function qe({showing:t}){return t.what==="lens"?(0,e.jsx)(Ae,{kind:t.kind},`lens:${t.kind}`):t.what==="record"?(0,e.jsx)(Pe,{id:t.id},`record:${t.id}`):(0,e.jsx)(Ne,{kind:t.kind},`district:${t.kind}`)}function Y({label:t,wide:u,testId:a,head:o,onClose:s,children:d,sheetHeight:p}){let i=(0,l.useRef)(null),[h,m]=(0,l.useState)(!1);(0,l.useLayoutEffect)(()=>{let r=i.current?.parentElement;if(!r)return;let f=()=>m(r.getBoundingClientRect().width<ke);if(f(),typeof ResizeObserver>"u")return;let x=new ResizeObserver(f);return x.observe(r),()=>x.disconnect()},[]);let v=(0,l.useRef)(s);return v.current=s,(0,l.useEffect)(()=>{let r=k=>{if(k.key!=="Escape"||k.defaultPrevented)return;let y=document.activeElement;y instanceof HTMLInputElement||y instanceof HTMLTextAreaElement||document.querySelector("[data-graview-popover]:popover-open")||f||v.current()},f=!1,x=()=>{f=document.querySelector('[data-testid="following-who"]')!==null};return window.addEventListener("keydown",x,!0),document.addEventListener("keydown",r),()=>{window.removeEventListener("keydown",x,!0),document.removeEventListener("keydown",r)}},[]),(0,e.jsxs)("section",{ref:i,"aria-label":t,"data-testid":a,"data-graview-map-panel":h?"sheet":"dock","data-graview-overlay":"","data-graview-offstage":"",className:"graview-map-panel",style:{position:"absolute",zIndex:te("rail"),boxSizing:"border-box",display:"flex",flexDirection:"column",background:"var(--graview-panel)",color:"var(--graview-ink)",overflow:"hidden",border:"1px solid var(--graview-edge)",borderRadius:"var(--graview-radius, 12px)",boxShadow:"var(--graview-lift-high)",...h?{left:A,right:A,bottom:`calc(${A} + env(safe-area-inset-bottom, 0px))`,height:p}:{top:A,right:A,bottom:A,width:u}},children:[h?(0,e.jsx)("style",{children:`:has(> [data-graview-map-panel="sheet"]) { --graview-sheet: calc(${p} + 2 * ${A} + env(safe-area-inset-bottom, 0px)); }`}):(0,e.jsx)("style",{children:`:has(> [data-graview-map-panel="dock"]) { --graview-dock: calc(${u} + 2 * ${A}); }`}),(0,e.jsxs)("header",{style:{display:"flex",alignItems:"flex-start",gap:10,padding:"14px 14px 10px 18px",borderBottom:"1px solid var(--graview-edge)"},children:[(0,e.jsx)("div",{style:{flex:"1 1 auto",minWidth:0},children:o}),(0,e.jsx)("button",{type:"button","data-testid":"map-panel-close","aria-label":"Close",title:"Close (Escape)",onClick:s,style:{flex:"0 0 auto",minWidth:32,height:32,borderRadius:8,fontSize:"1.1rem",lineHeight:1},children:"\xD7"})]}),(0,e.jsx)("div",{style:{flex:"1 1 auto",minHeight:0,overflow:"auto"},children:d})]})}var U={fontSize:"0.75rem",letterSpacing:"0.09em",textTransform:"uppercase",color:"var(--graview-ink-faint)"},J={margin:"2px 0 0",fontSize:"1.125rem",fontWeight:600,lineHeight:1.3,overflowWrap:"anywhere"},Q={margin:"4px 0 0",fontSize:"0.875rem",color:"var(--graview-ink-muted)"},j={margin:"14px 18px 6px",fontSize:"0.8125rem",fontWeight:600,color:"var(--graview-ink-muted)"},z={listStyle:"none",margin:0,padding:"0 10px 6px"},X={all:"unset",outline:"revert-layer",boxSizing:"border-box",display:"flex",alignItems:"baseline",gap:8,width:"100%",padding:"6px 8px",borderRadius:6,cursor:"pointer",fontSize:"0.875rem"},H={minHeight:30,padding:"0 12px",borderRadius:8,fontSize:"0.8125rem"};function Z(){let{setSelection:t,setMenuAt:u}=T();return(a,o)=>{a.preventDefault(),t([o]),u({x:a.clientX,y:a.clientY,on:o})}}function we({on:t,about:u}){let{setSelection:a,setMenuAt:o}=T();return(0,e.jsx)("button",{type:"button","data-testid":"map-panel-acts","aria-label":`What can be done with ${u}`,"aria-haspopup":"menu",style:H,onClick:s=>{let d=s.currentTarget.getBoundingClientRect();a([t]),o({x:Math.round(d.left),y:Math.round(d.bottom+4),on:t})},children:"Acts\u2026"})}var be=(t,u)=>({...M(B(t,!1),u),relation:null});function Ee(t,u){let a=`[data-graview-stage] [data-graview-view="${CSS.escape(t)}"][tabindex]`,o=null;for(let i=u?.parentElement??null;i&&!o;i=i.parentElement)o=i.querySelector(".graview-ground");o??=document.querySelector(".graview-ground");let s=o!==null&&!o.hasAttribute("tabindex");o&&s&&(o.setAttribute("tabindex","-1"),o.addEventListener("focusout",i=>{i.target===o&&o.removeAttribute("tabindex")},{once:!0})),o?.focus({preventScroll:!0});let d=performance.now()+5e3,p=()=>{let i=document.activeElement;if(!(i===null||i===document.body||i===document.documentElement||i===u||i===o))return;let m=document.querySelector(a);if(m&&m.isConnected&&!m.closest("[inert]"))return m.focus({preventScroll:!0});performance.now()<d&&requestAnimationFrame(p)};requestAnimationFrame(p)}function Ae({kind:t}){let u=Z(),{store:a,views:o,view:s,selection:d,setSelection:p}=T(),{go:i}=W(),h=R(),m=s.within?.view,v=o.places().filter(w=>w.kind===t),r=(m!==void 0?v.find(w=>w.as===m):void 0)??v.at(-1),f=o.resolve(t,{cardinality:"many",fidelity:"full"},r?.as??m),x=f?.view,k=a.schema.tryDefinition(t),y=(0,l.useMemo)(()=>a.graph.nodesOfKind(t).filter(w=>s.past===!0||$(k,w)),[a,t,h,s.past,k]),E=f?.title??r?.title??L(a.schema,t),C=x!==void 0&&G(x),c=d.filter(w=>a.graph.getNode(w)!==void 0),g=ce();return(0,e.jsxs)(Y,{label:E,testId:"lens-panel",wide:"min(max(440px, 46%), 760px)",sheetHeight:"60%",onClose:()=>i(ne(M(s,null),"view",null)),head:C?null:(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("div",{style:U,children:L(a.schema,t)}),(0,e.jsx)("h2",{style:J,"data-testid":"lens-panel-title",children:E}),(0,e.jsxs)("p",{style:Q,children:[q(a.schema,t,y.length),k?.description?` \xB7 ${k.description}`:""]}),r?(0,e.jsx)("div",{style:{marginTop:10},children:(0,e.jsx)("button",{type:"button","data-testid":"lens-panel-open",style:H,title:`Open ${E} on its own`,onClick:()=>i(oe(s,t,r.as)),children:"Open \u2197"})}):null]}),children:[(0,e.jsx)("style",{children:`.graview-ground[data-graview-altitude] .graview-plot:not([data-graview-plot="${P(t)}"]) { opacity: 0.35; }
|
|
2
2
|
.graview-ground[data-graview-altitude] [data-graview-view^="kind:"]:not([data-graview-view="${P(t)}"]) { opacity: 0.4; }`}),(0,e.jsx)("div",{"data-graview-lens":r?.as??"",style:{padding:"8px 12px 16px",minHeight:"100%",boxSizing:"border-box",display:"grid",gridTemplateRows:"1fr",gridTemplateColumns:"minmax(0, 1fr)",alignItems:"start"},onClick:w=>{let n=I(w.target);if(!n||a.graph.getNode(n)===void 0)return;let b=w.target.closest("button, a, input, select, textarea, [contenteditable='true']");b&&!b.hasAttribute("data-graview-pick")||p([n])},onDoubleClick:w=>{let n=I(w.target);!n||a.graph.getNode(n)===void 0||i(be(s,n))},onContextMenu:w=>{let n=I(w.target);!n||a.graph.getNode(n)===void 0||u(w,n)},children:x?(0,e.jsx)(de.Provider,{value:E,children:(0,e.jsx)(ie,{mode:"fullscreen",children:(0,e.jsx)(K,{kind:t,...f?.title?{view:f.title}:{},children:(0,e.jsx)(x,{nodes:y,label:E,fidelity:"full",cardinality:"many",mode:"fullscreen",selected:!1,...c.length>0?{implicated:c}:{},...g.length>0?{flagged:g}:{}})})})}):null})]})}function Ce(t,u,a,o){let s=o(a),d=new Map;for(let p of u){let i=p.from===a;if(!i&&p.to!==a)continue;let h=i?p.to:p.from,m=o(h);if(m===void 0||s===void 0)continue;let v=`${p.kind}|${i?"out":"in"}|${m}`,r=d.get(v);if(r){r.others.includes(h)||r.others.push(h);continue}d.set(v,{key:v,edge:p.kind,words:le(t,i?s:m,p.kind,i?"out":"in"),kind:m,others:[h]})}return[...d.values()]}function Pe({id:t}){let u=Z(),{store:a,views:o,view:s,setSelection:d}=T(),{go:p}=W(),i=R(),h=a.graph.getNode(t),m=c=>a.graph.getNode(c)?.kind,v=(0,l.useMemo)(()=>Ce(a.schema,a.graph.allEdges(),t,m),[a,t,i]);if(!h)return null;let r=h.kind,f=c=>{let g=a.graph.getNode(c);return g?F(a.schema.tryDefinition(g.kind),g):c},x=ee(a.schema.tryDefinition(r),r),y=o.resolve(r,{cardinality:"one",fidelity:"full"})?.view,E=y!==void 0&&!G(y),C=()=>s.focusId===t?p({...M(s,null),selection:[]}):d([]);return(0,e.jsxs)(Y,{label:`${f(t)}: its links`,testId:"record-panel",wide:E?"min(max(440px, 46%), 760px)":"min(360px, 40%)",sheetHeight:"52%",onClose:C,head:(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("div",{style:U,children:x}),(0,e.jsx)("h2",{style:J,"data-testid":"record-panel-title",children:f(t)}),(0,e.jsxs)("div",{style:{display:"flex",gap:8,flexWrap:"wrap",marginTop:10},children:[(0,e.jsx)("button",{type:"button","data-testid":"record-panel-go",style:H,onClick:c=>{p(be(s,t)),Ee(t,c.currentTarget)},children:"Go to it"}),(0,e.jsx)(we,{on:t,about:f(t)}),(0,e.jsxs)("button",{type:"button","data-testid":"record-panel-district",style:H,onClick:()=>d([P(r)]),children:["All ",L(a.schema,r).toLowerCase()]})]})]}),children:[(0,e.jsx)("div",{"data-graview-record-card":t,style:{padding:"8px 18px 0"},children:E?(0,e.jsx)(K,{kind:r,children:(0,e.jsx)(y,{node:h,fidelity:"full",cardinality:"one",mode:"fullscreen",selected:!1})}):(0,e.jsx)(he,{id:t,shown:[f(t)]})}),v.length===0?(0,e.jsx)("p",{style:{...Q,margin:"14px 18px"},children:"No links yet."}):null,v.map(c=>(0,e.jsxs)("section",{"aria-label":c.words,"data-graview-links":c.edge,children:[(0,e.jsxs)("h3",{style:j,children:[c.words.charAt(0).toUpperCase()+c.words.slice(1)," ",(0,e.jsxs)("span",{style:{fontWeight:400,color:"var(--graview-ink-faint)"},children:["\xB7 ",c.others.length]})]}),(0,e.jsx)("ul",{style:z,children:c.others.map(g=>(0,e.jsx)("li",{children:(0,e.jsxs)("button",{type:"button",className:"graview-map-panel-row","data-graview-record":g,style:X,onClick:()=>d([g]),onContextMenu:N=>u(N,g),children:[(0,e.jsx)("span",{style:{flex:"1 1 auto",minWidth:0,overflowWrap:"anywhere"},children:f(g)}),c.kind!==r?null:(0,e.jsx)("span",{style:{fontSize:"0.75rem",color:"var(--graview-ink-faint)"},children:x})]})},g))})]},c.key))]})}var Te=24;function Ne({kind:t}){let u=Z(),{store:a,view:o,setSelection:s,setEmphasis:d}=T(),{go:p}=W(),i=R(),[h,m]=(0,l.useState)(""),v=a.schema.tryDefinition(t),r=(0,l.useMemo)(()=>a.graph.nodesOfKind(t).filter(n=>o.past===!0||$(v,n)).map(n=>({id:n.id,name:F(v,n)})).sort((n,b)=>n.name.localeCompare(b.name)),[a,t,i,o.past,v]),f=(0,l.useMemo)(()=>{let n=S=>{let O=a.graph.getNode(S);return O!==void 0&&(o.past===!0||$(a.schema.tryDefinition(O.kind),O))},b=a.graph.allEdges().filter(S=>n(S.from)&&n(S.to));return ve(b,S=>a.graph.getNode(S)?.kind).filter(S=>S.from===t||S.to===t)},[a,t,i,o.past]);(0,l.useEffect)(()=>()=>d(null),[d]);let x=se(),k=ue().marks.flag,y=(0,l.useMemo)(()=>{let n=new Set(r.map(b=>b.id));return x.filter(b=>b.nodeIds.some(S=>n.has(S)))},[x,r]),E=(0,l.useMemo)(()=>[...new Set(y.flatMap(n=>n.nodeIds))].filter(n=>a.graph.getNode(n)?.kind===t).slice(0,300),[y,a,t]),C=(0,l.useRef)(null),c=(0,l.useSyncExternalStore)(ge,_,_);(0,l.useEffect)(()=>{c?.kind!==t||y.length===0||(C.current?.scrollIntoView?.({block:"start"}),C.current?.focus({preventScroll:!0}))},[c?.n,c?.kind,t,y.length>0]),(0,l.useEffect)(()=>()=>{me(),setTimeout(()=>{let n=document.activeElement;if(n&&n!==document.body)return;let b=CSS.escape(t);document.querySelector(`[data-testid="district-problems-${b}"]`)?.focus({preventScroll:!0})??document.querySelector(`[data-graview-view="${P(t).replace(/["\\]/g,"\\$&")}"]`)?.focus({preventScroll:!0})},0)},[t]);let g=L(a.schema,t),N=h.trim().toLowerCase(),w=N?r.filter(n=>n.name.toLowerCase().includes(N)):r;return(0,e.jsxs)(Y,{label:g,testId:"district-panel",wide:"min(360px, 40%)",sheetHeight:"52%",onClose:()=>s([]),head:(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("div",{style:U,children:"District"}),(0,e.jsx)("h2",{style:J,"data-testid":"district-panel-title",children:g}),(0,e.jsxs)("p",{style:Q,children:[q(a.schema,t,r.length),v?.description?` \xB7 ${v.description}`:""]}),(0,e.jsxs)("div",{style:{display:"flex",gap:8,flexWrap:"wrap",marginTop:10},children:[(0,e.jsx)("button",{type:"button","data-testid":"district-panel-go",style:H,onClick:()=>p({...M(B(o,!1),ae(t)),relation:null}),children:"Go in"}),(0,e.jsx)(we,{on:P(t),about:`the ${g.toLowerCase()}`})]})]}),children:[y.length>0?(0,e.jsxs)("section",{"aria-label":"Problems","data-testid":"district-problems","data-graview-problems":y.length,children:[(0,e.jsx)("style",{children:`${E.map(n=>`.graview-ground[data-graview-altitude] .graview-building[data-graview-building="${CSS.escape(n)}"] polygon`).join(`,
|
|
3
3
|
`)} { stroke: var(--graview-accent); stroke-width: 2.2; stroke-opacity: 1; }`}),(0,e.jsxs)("h3",{ref:C,tabIndex:-1,"data-testid":"district-problems-heading",style:{display:"flex",alignItems:"baseline",gap:8,margin:0,padding:"14px 18px 8px",fontSize:"0.9375rem",fontWeight:600,color:"var(--graview-warn)",borderTop:"1px solid var(--graview-edge)",scrollMarginTop:0,outlineOffset:-2},children:[(0,e.jsx)("span",{"aria-hidden":"true",children:k}),(0,e.jsx)("span",{style:{color:"var(--graview-ink)"},children:fe(y.length,g)})]}),(0,e.jsx)("ol",{style:z,"data-testid":"district-problem-rows",children:(0,e.jsx)(l.Suspense,{fallback:null,children:(0,e.jsx)(Se,{violations:y,pick:n=>{let b=n.subjectId??n.nodeIds[0];b!==void 0&&s([b])}})})})]}):null,f.length>0?(0,e.jsxs)("section",{"aria-label":"Relations",children:[(0,e.jsx)("h3",{style:j,children:"Relations"}),(0,e.jsx)("ul",{style:z,children:f.map(n=>(0,e.jsx)("li",{children:(0,e.jsxs)("div",{"data-graview-relation-said":n.edge,tabIndex:0,style:{...X,cursor:"default"},onPointerEnter:()=>d(n.edge),onPointerLeave:()=>d(null),onFocus:()=>d(n.edge),onBlur:()=>d(null),children:[(0,e.jsx)("span",{style:{flex:"1 1 auto",minWidth:0},children:ye(a.schema,n)}),(0,e.jsx)("span",{style:{fontSize:"0.75rem",color:"var(--graview-ink-faint)",fontVariantNumeric:"tabular-nums"},title:`${D(n.links)} links`,children:D(n.links)})]})},n.key))})]}):null,(0,e.jsxs)("div",{role:"group","aria-label":g,children:[(0,e.jsxs)("h3",{style:j,children:[g," ",(0,e.jsxs)("span",{style:{fontWeight:400,color:"var(--graview-ink-faint)"},children:["\xB7 ",r.length]})]}),r.length>Te?(0,e.jsx)("div",{style:{padding:"0 18px 6px"},children:(0,e.jsx)("input",{type:"search","data-testid":"district-panel-narrow","aria-label":`Narrow the ${g.toLowerCase()} by name`,placeholder:"Narrow by name",value:h,onChange:n=>m(n.target.value),style:{width:"100%",boxSizing:"border-box",minHeight:32}})}):null,(0,e.jsx)("ul",{style:z,children:w.map(n=>(0,e.jsx)("li",{children:(0,e.jsx)("button",{type:"button",className:"graview-map-panel-row","data-graview-record":n.id,style:X,onClick:()=>s([n.id]),onContextMenu:b=>u(b,n.id),children:(0,e.jsx)("span",{style:{flex:"1 1 auto",minWidth:0,overflowWrap:"anywhere"},children:n.name})})},n.id))})]})]})}export{qe as MapPanelFor};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
var Dt="en-US",Fe=/^\d{4}-\d{2}-\d{2}$/,qn=/^\d{4}(-\d\d){2}[T ]\d\d:\d\d(:[\d.]+)?(Z|[+-][\d:]+)?$/,kf=n=>!Number.isNaN(Date.parse(n)),W=(n,e=Date.now())=>{let t=Hn(n);return t?Ft(e,t).day:new Date(e).toISOString().slice(0,10)},Hn=n=>De(n)??Te,pn,hn,gn,Te;function md(n){pn=mn(n.reader),hn=mn(n.app),gn=De(n.readerTimeZone),Te=De(n.appTimeZone)}function yd(n,e){let t=[pn,hn,gn,Te];n.reader!==void 0&&(pn=mn(n.reader)),n.app!==void 0&&(hn=mn(n.app)),n.readerTimeZone!==void 0&&(gn=De(n.readerTimeZone)),n.appTimeZone!==void 0&&(Te=De(n.appTimeZone));try{return e()}finally{[pn,hn,gn,Te]=t}}var Ro=n=>pn??mn(n)??hn??Dt,Yn=n=>gn??De(n)??Te,bd=n=>Yn(n)??Intl.DateTimeFormat().resolvedOptions().timeZone??"UTC",vd=/^\s*([+\-−]|\d)/;var Tt=new Map;function De(n){if(n&&!Tt.has(n)){let e=!1;try{new Intl.DateTimeFormat(Dt,{timeZone:n}),e=!vd.test(n)}catch{}Tt.set(n,e)}return n&&Tt.get(n)?n:void 0}var $e=new Map;function mn(n){if(n&&!$e.has(n)){let e=!1;try{e=Intl.DateTimeFormat.supportedLocalesOf(n).length>0}catch{}$e.set(n,e)}return n&&$e.get(n)?n:void 0}function pe(n,e,t,r){let o=`${t=Ro(t)}${r?"#":"@"}${JSON.stringify(e)}`,i=$e.get(o);return i||$e.set(o,i=r?new Intl.NumberFormat(t,e):new Intl.DateTimeFormat(t,e)),i.format(n).replace(/ /g," ")}var Re="UTC",Jn=n=>Date.UTC(+n.slice(0,4),+n.slice(5,7)-1,+n.slice(8,10));function he(n,e){return Fe.test(n)?pe(Jn(n),{year:"numeric",month:"short",day:"numeric",timeZone:Re},e):n}function Ft(n,e){let t=`wall@${e??""}`,r=$e.get(t);r||$e.set(t,r=new Intl.DateTimeFormat("en-US",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",hourCycle:"h23",...e?{timeZone:e}:{}}));let o=Object.fromEntries(r.formatToParts(n).map(i=>[i.type,i.value]));return{day:`${o.year}-${o.month}-${o.day}`,minutes:Number(o.hour)%24*60+Number(o.minute)}}function _o(n,e,t){let r=Date.UTC(+n.slice(0,4),+n.slice(5,7)-1,+n.slice(8,10),0,e),o=i=>{let s=Ft(i,t);return xd(s.day,s.minutes)-Math.floor(i/6e4)*6e4};return r-o(r-o(r))}var xd=(n,e)=>Date.UTC(+n.slice(0,4),+n.slice(5,7)-1,+n.slice(8,10),0,e),Ao=n=>/[Z+-][\d:]*$/.test(n.slice(16));function Oo(n,e,t,r,o=!1){if(!qn.test(n))return n;let i=Ao(n),s=Date.parse(n.replace(" ","T")+(i?"":"Z"));if(Number.isNaN(s))return n;let a=i?Yn(r):Re;return pe(s,{...e,hour:"numeric",minute:"2-digit",...i&&o?{timeZoneName:"short"}:{},...a?{timeZone:a}:{}},t)}var Zt=(n,e,t)=>Oo(n,{year:"numeric",month:"short",day:"numeric"},e,t,!0),wd=(n,e,t)=>Oo(n,{},e,t);function kd(n,e){if(Fe.test(n))return n;if(!qn.test(n))return;if(!Ao(n))return n.slice(0,10);let t=Date.parse(n.replace(" ","T"));return Number.isNaN(t)?void 0:Ft(t,Yn(e)).day}function ie(n,e,t={maximumFractionDigits:2}){return Number.isFinite(n)?pe(n,t,e,!0):String(n)}function Sd(n,e={},t){return Fe.test(n)?pe(Jn(n),{weekday:e.weekday??"long",month:"short",day:"numeric",...e.year?{year:"numeric"}:{},timeZone:Re},t):n}function $d(n,e){return Fe.test(n)?pe(Jn(n),{month:"short",day:"numeric",timeZone:Re},e):n}function Rd(n,e={},t){if(!/^\d{4}-\d{2}/.test(n))return n;let r=e.year??!e.short;return pe(Jn(`${n.slice(0,7)}-01`),{month:e.short?"short":"long",...r?{year:e.short?"2-digit":"numeric"}:{},timeZone:Re},t)}var _d=(n,e="short",t)=>pe(Date.UTC(1970,0,4+n),{weekday:e,timeZone:Re},t),Ad=(n,e)=>pe(Date.UTC(1970,0,1,0,Math.round(n)),{hour:"numeric",minute:"2-digit",timeZone:Re},e),Od=/(?<![\w-])(\d{4}-\d{2}-\d{2})(?![\w-]|:)/g;function Lt(n,e){return n.includes("-")?n.replace(Od,t=>he(t,e)):n}var yn=n=>n.charAt(0).toUpperCase()+n.slice(1),Eo=(n,e="and")=>n.length>1?`${n.slice(0,-1).join(", ")} ${e} ${n.at(-1)}`:n[0]??"";function Ed(n,e){return{...e,kind:n,edges:e.edges??{}}}function Ct(n,e,t){let r=n?.lifecycle;if(!r)return!0;let o=e[r.field];return r.retired==="date"?typeof o!="string"||o.length===0?!0:o>=(t??W()):!r.retired.includes(o)}function F(n,e){if(n?.label)return n.label(e);let t=e.label;return typeof t=="string"&&t.length>0?t:e.id}function Pd(n){return n.title??C(n.name)}function C(n){let e=n.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_-]+/g," ").trim().toLowerCase();return yn(e)}function zd(n,e,t){let r=n.tryDefinition(e);return`${ie(t)} ${t===1?U(r,e):Q(n,e).toLowerCase()}`}function Q(n,e){return n.tryDefinition(e)?.plural??`${C(e).toLowerCase()}s`}function Md(n,e){return yn(Q(n,e))}function Nd(n,e){let t=Q(n,e);return`All ${/^[A-Z][a-z]/.test(t)?t.charAt(0).toLowerCase()+t.slice(1):t}`}function Xn(n,e){let t=n?.computed&&Object.hasOwn(n.computed,e)?n.computed[e]:void 0;return n?.display?.labels?.[e]??(typeof t=="object"?t.label:void 0)??(e==="label"?"Name":C(e))}var Id=/^(u[nt]i|use|usu|uti|ubiq|eu|ewe|one|once)/,jd=/^(hour|honest|hono[ur]r?|heir)/;function Po(n){let e=C(n).toLowerCase();return jd.test(e)?"an":Id.test(e)?"a":/^[aeiou]/.test(e)?"an":"a"}function Ze(n){return`${Po(n)} ${C(n).toLowerCase()}`}function U(n,e){return n?.noun??C(e).toLowerCase()}function Ut(n){let e=Object.values(n).filter(r=>typeof r=="number");return Object.entries(n).filter(([r,o])=>e.indexOf(+r)===-1).map(([r,o])=>o)}function Bt(n,e="|"){return n.map(t=>Yt(t)).join(e)}function zo(n,e){return typeof e=="bigint"?e.toString():e}var Kt=class{constructor(e){this._getter=e,this._value=void 0}get value(){let e=this._getter;return e!==void 0&&(this._value=e(),this._getter=void 0),this._value}};function Mo(n){return new Kt(n)}function No(n){return n==null}function Vt(n){let e=n.startsWith("^")?1:0,t=n.endsWith("$")?n.length-1:n.length;return n.slice(e,t)}function Io(n,e){let t=n/e,r=Math.round(t),o=4*Number.EPSILON*Math.max(Math.abs(t),1);return Math.abs(t-r)<o?0:t-r}function et(n,e,t){Object.defineProperty(n,e,{value:t,writable:!0,enumerable:!0,configurable:!0})}function jo(n){let e=Object.getOwnPropertyDescriptor(n,"shape");return e?.get?e.get.raw:e?.value}function Wt(n){return jo(n._zod.def)??n._zod.def.shape}function To(n,e,t){Object.defineProperty(n,e,{get(){let r=t();return et(this,e,r),r},enumerable:!0,configurable:!0})}function Do(n,e,t){e in n?et(n,e,t):n[e]=t}function Td(n,e,t,r){let o=Wt(e);for(let i of t){let s=Object.getOwnPropertyDescriptor(o,i);s.enumerable&&(s.get?To(n,i,()=>{let a=e._zod.def.shape[i];return r?r(a,i):a}):Do(n,i,r?r(s.value,i):s.value))}}function Dd(n,e){for(let t of Reflect.ownKeys(e)){let r=Object.getOwnPropertyDescriptor(e,t);r.enumerable&&(r.get?To(n,t,()=>e[t]):Do(n,t,r.value))}}function Fo(...n){let e={};for(let t of n){let r=Object.getOwnPropertyDescriptors(t);Object.assign(e,r)}return Object.defineProperties({},e)}var qt="captureStackTrace"in Error?Error.captureStackTrace:(...n)=>{};function Qn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Ht(n){if(Qn(n)===!1)return!1;let e=n.constructor;if(e===void 0||typeof e!="function")return!0;let t=e.prototype;return!(Qn(t)===!1||Object.prototype.hasOwnProperty.call(t,"isPrototypeOf")===!1)}var Zo=new Set(["string","number","symbol"]);function vn(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Le(n,e,t){let r=new n._zod.constr(e??n._zod.def);return(!e||t?.parent)&&(r._zod.parent=n),r}function M(n){let e=n;if(!e)return{};if(typeof e=="string")return{error:()=>e};if(e?.message!==void 0){if(e?.error!==void 0)throw new Error("Cannot specify both `message` and `error` params");e.error=e.message}return delete e.message,typeof e.error=="string"?{...e,error:()=>e.error}:e}function Yt(n){return typeof n=="bigint"?n.toString()+"n":typeof n=="string"?`"${n}"`:`${n}`}function Lo(n){return Object.keys(n).filter(e=>n[e]._zod.optin!==void 0&&n[e]._zod.optout==="optional")}var Co={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 Go(n,e){if(!Ht(e))throw new Error("Invalid input to extend: expected a plain object");let t=n._zod.def.checks;if(t&&t.length>0){let o=Wt(n);for(let i of Reflect.ownKeys(e))if(Object.getOwnPropertyDescriptor(o,i)!==void 0)throw new Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}return Le(n,Fo(n._zod.def,{shape:Fd(n,e)}))}function Fd(n,e){let t={};return Td(t,n,Reflect.ownKeys(Wt(n))),Dd(t,e),t}function se(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 Ko(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 me(n,e){return e.map(t=>{var r;return(r=t).path??(r.path=[]),t.path.unshift(n),t})}function bn(n){return typeof n=="string"?n:n?.message}function Jt(n,e,t){var r;for(let o=e;o<n.length;o++)(r=n[o]).schema??(r.schema=t)}function ae(n,e,t){var r;let o=n.inst?._zod?.traits;o?.has("$ZodType")&&(o.has("$ZodCheck")?(r=n).schema??(r.schema=n.inst):n.schema=n.inst);let i=n.schema!==n.inst?n.schema?._zod.def?.error:void 0,s=n.message?n.message:bn(n.inst?._zod.def?.error?.(n))??bn(i?.(n))??bn(e?.error?.(n))??bn(t.customError?.(n))??bn(t.localeError?.(n))??"Invalid input",a={};for(let d of Object.keys(n))d==="inst"||d==="schema"||d==="continue"||d==="input"||d==="__proto__"||(a[d]=n[d]);return a.path??(a.path=[]),a.message=s,e?.reportInput&&(a.input=n.input),a}var Zd=/[\uD800-\uDBFF]/;function Xt(n){let e=n.length;if(!Zd.test(n))return e;let t=e;for(let r=0;r<e-1;r++)(n.charCodeAt(r)&64512)===55296&&(n.charCodeAt(r+1)&64512)===56320&&(t--,r++);return t}function Qt(n){return Array.isArray(n)?"array":typeof n=="string"?"string":"unknown"}function Uo(n){let e=typeof n;switch(e){case"number":return Number.isNaN(n)?"nan":"number";case"object":{if(n===null)return"null";if(Array.isArray(n))return"array";let t=n;if(t&&Object.getPrototypeOf(t)!==Object.prototype&&"constructor"in t&&t.constructor)return t.constructor.name}}return e}function xn(...n){let[e,t,r]=n;return typeof e=="string"?{message:e,code:"custom",input:t,inst:r}:{...e}}function Bo(n,e){for(let t in e){let r=Object.getOwnPropertyDescriptor(e,t);r.get?Object.defineProperty(n,t,{...r,enumerable:!1}):Ld(n,t,r.value)}}function _e(n,e,t,r=!0){return Object.defineProperty(n,e,{configurable:!0,writable:!0,enumerable:r,value:t}),t}function er(n,e,t){return _e(n,e,t,!1)}function Ld(n,e,t){Object.defineProperty(n,e,{configurable:!0,get(){return this==null?t:_e(this,e,t.bind(this))},set(r){_e(this,e,r)}})}function Cd(n,e){let t=Object.getPrototypeOf(n);return e in t?void 0:t}var Gt,ge=!1,Gd={configurable:!0,get(){ge=!0}};function ne(n,e,t){let r=Object.getPrototypeOf(n._zod);if(e in r&&Gt!==n._zod){Gt=void 0;return}Gt=n._zod,Object.defineProperty(r,e,{configurable:!0,get(){Object.defineProperty(this,e,Gd);let o=ge;ge=!1;try{let i=t(this);return ge?delete this[e]:Object.defineProperty(this,e,{configurable:!0,writable:!0,value:i}),ge=ge||o,i}catch(i){throw delete this[e],ge=ge||o,i}},set(o){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:o})}})}function Vo(n,e,t,r){let o=Cd(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 Wo;var nr={value:void 0,enumerable:!1},qo="captureStackTrace"in Error?Error:null;function Kd(n){let e=qo;if(e){let t=e.stackTraceLimit;if(typeof t=="number"){try{e.stackTraceLimit=0}catch{return qo=null,new n}try{return new n}finally{e.stackTraceLimit=t}}}return new n}function O(n,e,t,r){let o={};function i(c){this.def=c,this.constr=p,this.traits=new Set}i.prototype=o;let s=t,a=s&&new WeakSet;function d(c,f){if(c._zod){if(c._zod.traits.has(n))return}else{nr.value=new i(f);try{Object.defineProperty(c,"_zod",nr)}finally{nr.value=void 0}}if(c._zod.traits.add(n),e(c,f),a){let h=Object.getPrototypeOf(c),v=c._zod.constr.prototype,y=h;for(;y&&y!==v;)y=Object.getPrototypeOf(y);let S=y??h;a.has(S)||(a.add(S),Bo(S,s))}let g=p.prototype;for(let h in g)Object.prototype.hasOwnProperty.call(g,h)&&(h in c||(c[h]=g[h].bind(c)))}let l=r?.Parent??Object;class u extends l{}Object.defineProperty(u,"name",{value:n});function p(c){let f=r?.Parent?Kd(u):this;d(f,c);let g=f._zod.deferred;if(g){for(let v of g)v();f._zod.deferred=void 0}let h=globalThis.__zod_globalConfig?.postProcessor;return h&&h(f),f}return Object.defineProperty(p,"init",{value:d}),Object.defineProperty(p,Symbol.hasInstance,{value:c=>r?.Parent&&c instanceof r.Parent?!0:c?._zod?.traits?.has(n)}),Object.defineProperty(p,"name",{value:n}),p}var ce=class extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}};(Wo=globalThis).__zod_globalConfig??(Wo.__zod_globalConfig={});var Ce=globalThis.__zod_globalConfig;function Y(n){return n&&Object.assign(Ce,n),Ce}function Ud(){let n=this._zod;return n.message??(n.message=JSON.stringify(n.def,zo,2)),n.message}function Bd(n){this._zod.message=n}var Vd={get:Ud,set:Bd,enumerable:!0,configurable:!0},rr={value:void 0,enumerable:!1},Ho=new WeakSet([Object.prototype,Error.prototype]),Yo=(n,e)=>{n.name="$ZodError",rr.value=e,Object.defineProperty(n,"issues",rr),rr.value=void 0,Object.defineProperty(n,"message",Vd);let t=Object.getPrototypeOf(n);Ho.has(t)||(Ho.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})}}))},Pf=O("$ZodError",Yo),wn=O("$ZodError",Yo,void 0,{Parent:Error});var qd=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 ce;if(a.issues.length){let d=new(i?.Err??n)(a.issues.map(l=>ae(l,s,Y())));throw qt(d,i?.callee??e),d}return a.value};return e},or=qd(wn),Hd=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=>ae(l,s,Y())));throw qt(d,i?.callee??e),d}return a.value};return e},ir=Hd(wn),Yd=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 ce;return i.issues.length?Jo(n,i.issues,o):{success:!0,data:i.value}},sr=Yd(wn);function Jo(n,e,t){let r;return{success:!1,get error(){return r||(r=new n(e.map(o=>ae(o,t,Y()))),e=void 0,t=void 0),r},set error(o){r=o,e=void 0,t=void 0}}}var Jd=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?Jo(n,i.issues,o):{success:!0,data:i.value}},ar=Jd(wn);var Xo=/^(?:[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 Qo=/^https?$/;var ei=/^[\s\S]{0,}$/;var dr=/^-?\d+(?:\.\d+)?$/,ni=/^(?:true|false)$/i,ti=/^null$/i;var J=O("$ZodCheck",(n,e)=>{var t;n._zod??(n._zod={}),n._zod.def=e,(t=n._zod).onattach??(t.onattach=[])});var ri=n=>{let e=n.value;return!No(e)&&e.length!==void 0},nt={number:"number",bigint:"bigint",object:"date"},oi=O("$ZodCheckLessThan",(n,e)=>{J.init(n,e);let t=nt[typeof e.value];n._zod.check=r=>{(e.inclusive?r.value<=e.value:r.value<e.value)||r.issues.push({origin:nt[typeof r.value]??t,code:"too_big",maximum:typeof e.value=="object"?e.value.getTime():e.value,input:r.value,inclusive:e.inclusive,inst:n,continue:!e.abort})}}),ii=O("$ZodCheckGreaterThan",(n,e)=>{J.init(n,e);let t=nt[typeof e.value];n._zod.check=r=>{(e.inclusive?r.value>=e.value:r.value>e.value)||r.issues.push({origin:nt[typeof r.value]??t,code:"too_small",minimum:typeof e.value=="object"?e.value.getTime():e.value,input:r.value,inclusive:e.inclusive,inst:n,continue:!e.abort})}}),si=O("$ZodCheckMultipleOf",(n,e)=>{J.init(n,e),n._zod.check=t=>{if(typeof t.value!=typeof e.value)throw new Error("Cannot mix number and bigint in multiple_of check.");(typeof t.value=="bigint"?e.value!==BigInt(0)&&t.value%e.value===BigInt(0):Io(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})}}),ai=O("$ZodCheckNumberFormat",(n,e)=>{J.init(n,e),e.format=e.format||"float64";let t=e.format?.includes("int"),r=t?"int":"number",[o,i]=Co[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 di=O("$ZodCheckMaxLength",(n,e)=>{var t;J.init(n,e),(t=n._zod.def).when??(t.when=ri),n._zod.check=r=>{let o=r.value,i=o.length;if((typeof o=="string"&&i>e.maximum?Xt(o):i)<=e.maximum)return;let a=Qt(o);r.issues.push({origin:a,code:"too_big",maximum:e.maximum,inclusive:!0,input:o,inst:n,continue:!e.abort})}}),ci=O("$ZodCheckMinLength",(n,e)=>{var t;J.init(n,e),(t=n._zod.def).when??(t.when=ri),n._zod.check=r=>{let o=r.value,i=o.length;if((typeof o=="string"&&i>=e.minimum&&i<e.minimum*2?Xt(o):i)>=e.minimum)return;let a=Qt(o);r.issues.push({origin:a,code:"too_small",minimum:e.minimum,inclusive:!0,input:o,inst:n,continue:!e.abort})}});var ur=O("$ZodCheckStringFormat",(n,e)=>{var t,r;J.init(n,e),e.pattern?(t=n._zod).check??(t.check=o=>{e.pattern.lastIndex=0,!e.pattern.test(o.value)&&o.issues.push({origin:"string",code:"invalid_format",format:e.format,input:o.value,...e.pattern?{pattern:e.pattern.toString()}:{},inst:n,continue:!e.abort})}):(r=n._zod).check??(r.check=()=>{})}),ui=O("$ZodCheckRegex",(n,e)=>{ur.init(n,e),n._zod.check=t=>{e.pattern.lastIndex=0,!e.pattern.test(t.value)&&t.issues.push({origin:"string",code:"invalid_format",format:"regex",input:t.value,pattern:e.pattern.toString(),inst:n,continue:!e.abort})}});var fi={major:4,minor:6,patch:5};var G=O("$ZodType",(n,e)=>{var t;n??(n={}),n._zod.def=e,n._zod.bag=n._zod.bag||{},n._zod.version=fi;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=se(a),p;for(let c of d){if(c._zod.def.when){if(Ko(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 ce;if(p||g instanceof Promise)p=(p??Promise.resolve()).then(async()=>{await g,a.issues.length!==f&&(Jt(a.issues,f,n),u||(u=se(a,f)))});else{if(a.issues.length===f)continue;Jt(a.issues,f,n),u||(u=se(a,f))}}return p?p.then(()=>a):a},s=(a,d,l)=>{if(se(a))return a.aborted=!0,a;let u=i(d,o,l);if(u instanceof Promise){if(l.async===!1)throw new ce;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 ce;return l.then(u=>i(u,o,d))}return i(l,o,d)}}},{get"~standard"(){return er(this,"~standard",Qd(this))},set"~standard"(n){_e(this,"~standard",n)}}),bi=(n,e)=>n.issues.length?{issues:n.issues.map(t=>ae(t,e,Y()))}:{value:n.value};async function Xd(n,e){let t={async:!0};return bi(await n._zod.run({value:e,issues:[]},t),t)}function Qd(n){return{validate:e=>{let t={async:!1};try{let r=n._zod.run({value:e,issues:[]},t);if(!(r instanceof Promise))return bi(r,t)}catch{}return Xd(n,e)},vendor:"zod",version:1}}var lr=O("$ZodString",(n,e)=>{G.init(n,e),n._zod.pattern=e.pattern??ei,n._zod.parse=(t,r)=>{if(e.coerce)try{t.value=String(t.value)}catch{}return typeof t.value=="string"||t.issues.push({expected:"string",code:"invalid_type",input:t.value,inst:n}),t}}),ot=O("$ZodStringFormat",(n,e)=>{ur.init(n,e),lr.init(n,e)});var vi=O("$ZodEmail",(n,e)=>{e.pattern??(e.pattern=Xo),ot.init(n,e)}),xi=1,tt=2;function ec(n){try{return typeof URL<"u"&&typeof URL.canParse=="function"?URL.canParse(n):(new URL(n),!0)}catch{return!1}}function nc(n,e){return!("normalize"in e)&&!("hostname"in e)&&!("protocol"in e)?ec(n)||tt:tc(n,e)}function tc(n,e){if(!e.normalize&&e.protocol?.source===Qo.source&&!/^https?:\/\//i.test(n))return xi;try{if(typeof URL<"u"){let t=URL;if(typeof t.parse=="function")return t.parse(n)??tt}return new URL(n)}catch{return tt}}var rc=/[\t\n\r]/g;function pi(n){return n.replace(rc,"")}function oc(n,e){return e.lastIndex=0,e.test(n.hostname)}function ic(n,e){return e.lastIndex=0,e.test(n.protocol.endsWith(":")?n.protocol.slice(0,-1):n.protocol)}var wi=O("$ZodURL",(n,e)=>{ot.init(n,e),n._zod.check=t=>{try{let r=t.value.trim(),o=nc(r,e);if(o===xi){t.issues.push({code:"invalid_format",format:"url",note:"Invalid URL format",input:t.value,inst:n,continue:!e.abort});return}if(o===tt){t.issues.push({code:"invalid_format",format:"url",input:t.value,inst:n,continue:!e.abort});return}if(o===!0){t.value=pi(r);return}e.hostname&&!oc(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&&!ic(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:pi(r);return}catch{t.issues.push({code:"invalid_format",format:"url",input:t.value,inst:n,continue:!e.abort})}}});var fr=O("$ZodNumber",(n,e)=>{G.init(n,e),n._zod.pattern=dr,n._zod.parse=(t,r)=>{if(e.coerce)try{t.value=Number(t.value)}catch{}let o=t.value;if(typeof o=="number"&&!Number.isNaN(o)&&Number.isFinite(o))return t;let i=typeof o=="number"?Number.isNaN(o)?"NaN":Number.isFinite(o)?void 0:String(o):void 0;return t.issues.push({expected:"number",code:"invalid_type",input:o,inst:n,...i?{received:i}:{}}),t}}),ki=O("$ZodNumberFormat",(n,e)=>{ai.init(n,e),fr.init(n,e)}),Si=O("$ZodBoolean",(n,e)=>{G.init(n,e),n._zod.pattern=ni,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 $i=O("$ZodNull",(n,e)=>{G.init(n,e),n._zod.pattern=ti,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 Ri=O("$ZodUnknown",(n,e)=>{G.init(n,e),n._zod.parse=t=>t}),_i=O("$ZodNever",(n,e)=>{G.init(n,e),n._zod.parse=(t,r)=>(t.issues.push({expected:"never",code:"invalid_type",input:t.value,inst:n}),t)});function hi(n,e,t){n.issues.length&&e.issues.push(...me(t,n.issues)),e.value[t]=n.value}var Ai=O("$ZodArray",(n,e)=>{G.init(n,e);let t=Ce.memoizer;t?.attach(n),n._zod.parse=(r,o)=>{let i=r.value;if(!Array.isArray(i))return r.issues.push({expected:"array",code:"invalid_type",input:i,inst:n}),r;r.value=t?t.alloc(n,r,Array(i.length),o):Array(i.length);let s=[],a=o?.abortEarly;for(let d=0;d<i.length;d++){let l=i[d],u=e.element._zod.run({value:l,issues:[]},o);if(u instanceof Promise)s.push(u.then(p=>hi(p,r,d)));else if(hi(u,r,d),a&&u.issues.length!==0&&se(u))break}return s.length?Promise.all(s).then(()=>r):r}});function rt(n,e,t,r,o,i){let s=t in r,a=i==="optional";if(!(!s&&a&&o==="optional")){if(n.issues.length){if(o!==void 0&&a&&!s)return;e.issues.push(...me(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 sc=[];function ac(n){let e=Object.keys(n.shape),t=Object.getOwnPropertySymbols(n.shape),r=t.length?t:sc,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=Lo(n.shape);return{...n,allKeys:o,symbolKeys:r,keySet:new Set(e),numKeys:e.length,optionalKeys:new Set(i)}}function dc(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(se(t,f))break;f=t.issues.length}if(d.has(g))continue;if(g==="__proto__"){u==="never"&&a.push(g);continue}if(u==="never"){a.push(g);continue}let h=l.run({value:e[g],issues:[]},r);h instanceof Promise?n.push(h.then(v=>rt(v,t,g,e,p,c))):rt(h,t,g,e,p,c)}return a.length&&t.issues.push({code:"unrecognized_keys",keys:a,input:e,inst:i,continue:!0}),n.length?Promise.all(n).then(()=>t):t}var Oi=O("$ZodObject",(n,e)=>{G.init(n,e);let t=Object.getOwnPropertyDescriptor(e,"shape"),r=t?.get?t.get.raw:e.shape??{};if(r){let l=()=>{let u={...r};return Object.defineProperty(e,"shape",{value:u}),l.raw=u,u};l.raw=r,Object.defineProperty(e,"shape",{get:l})}let o=Mo(()=>ac(e));ne(n,"propValues",l=>{let u=l.def.shape,p={};for(let c in u){let f=u[c]._zod;if(f.values){Object.prototype.hasOwnProperty.call(p,c)||et(p,c,new Set);for(let g of f.values)p[c].add(g);f.optin!==void 0&&p[c].add(void 0)}}return p});let i=Qn,s=e.catchall,a,d=Ce.memoizer;d?.attach(n),n._zod.parse=(l,u)=>{a??(a=o.value);let p=l.value;if(!i(p))return l.issues.push({expected:"object",code:"invalid_type",input:p,inst:n}),l;l.value=d?d.alloc(n,l,{},u):{};let c=[],f=a.shape,g=u?.abortEarly,h=l.issues.length;for(let v of a.allKeys){if(g&&l.issues.length!==h){if(se(l,h))break;h=l.issues.length}if(v==="__proto__")continue;let y=f[v],S=y._zod.optin,A=y._zod.optout,m=y._zod.run({value:p[v],issues:[]},u);m instanceof Promise?c.push(m.then(k=>rt(k,l,v,p,S,A))):rt(m,l,v,p,S,A)}return s?dc(c,p,l,u,o.value,n,g===!0):c.length?Promise.all(c).then(()=>l):l}});function gi(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=>!se(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=>ae(s,r,Y())))}),e)}var Ei=O("$ZodUnion",(n,e)=>{G.init(n,e),ne(n,"optin",r=>r.def.options.some(o=>o._zod.optin==="defaulted")?"defaulted":r.def.options.some(o=>o._zod.optin!==void 0)?"optional":void 0),ne(n,"optout",r=>r.def.options.some(o=>o._zod.optout==="optional")?"optional":void 0),ne(n,"values",r=>{if(r.def.options.every(o=>o._zod.values))return new Set(r.def.options.flatMap(o=>Array.from(o._zod.values)))}),ne(n,"pattern",r=>{if(r.def.options.every(o=>o._zod.pattern)){let o=r.def.options.map(i=>i._zod.pattern);return new RegExp(`^(${o.map(i=>Vt(i.source)).join("|")})$`)}});let t=e.options.length===1?e.options[0]._zod.run:null;n._zod.parse=(r,o)=>{if(t)return t(r,o);let i=!1,s=[];for(let a of e.options){let d=a._zod.run({value:r.value,issues:[]},o);if(d instanceof Promise)s.push(d),i=!0;else{if(d.issues.length===0)return d;s.push(d)}}return i?Promise.all(s).then(a=>gi(a,r,n,o)):gi(s,r,n,o)}});var Pi=O("$ZodRecord",(n,e)=>{G.init(n,e);let t=Ce.memoizer;t?.attach(n),n._zod.parse=(r,o)=>{let i=r.value;if(!Ht(i))return r.issues.push({expected:"record",code:"invalid_type",input:i,inst:n}),r;let s=[],a=e.keyType._zod.values;if(a&&!e.partial){r.value=t?t.alloc(n,r,{},o):{};let d=new Set;for(let u of a)if(typeof u=="string"||typeof u=="number"||typeof u=="symbol"){if(d.add(typeof u=="number"?u.toString():u),u==="__proto__")continue;let p=e.keyType._zod.run({value:u,issues:[]},o);if(p instanceof Promise)throw new Error("Async schemas not supported in object keys currently");if(p.issues.length){r.issues.push({code:"invalid_key",origin:"record",issues:p.issues.map(g=>ae(g,o,Y())),input:u,path:[u],inst:n});continue}let c=p.value;if(c==="__proto__")continue;let f=e.valueType._zod.run({value:i[u],issues:[]},o);f instanceof Promise?s.push(f.then(g=>{g.issues.length&&r.issues.push(...me(u,g.issues)),r.value[c]=g.value})):(f.issues.length&&r.issues.push(...me(u,f.issues)),r.value[c]=f.value)}let l;for(let u in i)if(!d.has(u))if(e.mode==="loose"){if(u==="__proto__")continue;r.value[u]=i[u]}else l=l??[],l.push(u);l&&l.length>0&&r.issues.push({code:"unrecognized_keys",input:i,inst:n,keys:l,continue:!0})}else{r.value=t?t.alloc(n,r,{},o):{};let d;for(let l of Reflect.ownKeys(i)){if(l==="__proto__"||!Object.prototype.propertyIsEnumerable.call(i,l))continue;let u=e.keyType._zod.run({value:l,issues:[]},o);if(u instanceof Promise)throw new Error("Async schemas not supported in object keys currently");if(typeof l=="string"&&dr.test(l)&&u.issues.length){let g=e.keyType._zod.run({value:Number(l),issues:[]},o);if(g instanceof Promise)throw new Error("Async schemas not supported in object keys currently");g.issues.length===0&&(u=g)}if(u.issues.length){e.mode==="loose"?r.value[l]=i[l]:a?(d=d??[],d.push(l)):r.issues.push({code:"invalid_key",origin:"record",issues:u.issues.map(g=>ae(g,o,Y())),input:l,path:[l],inst:n});continue}let c=u.value;if(c==="__proto__")continue;let f=e.valueType._zod.run({value:i[l],issues:[]},o);f instanceof Promise?s.push(f.then(g=>{g.issues.length&&r.issues.push(...me(l,g.issues)),r.value[c]=g.value})):(f.issues.length&&r.issues.push(...me(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 zi=O("$ZodEnum",(n,e)=>{G.init(n,e);let t=Ut(e.entries),r=new Set(t);n._zod.values=r,ne(n,"pattern",o=>{let i=Ut(o.def.entries).filter(s=>Zo.has(typeof s));return new RegExp(i.length?`^(${i.map(s=>vn(s.toString())).join("|")})$`:"^[^\\s\\S]$")}),n._zod.parse=(o,i)=>{let s=o.value;return r.has(s)||o.issues.push({code:"invalid_value",values:t,input:s,inst:n}),o}}),Mi=O("$ZodLiteral",(n,e)=>{G.init(n,e);let t=new Set(e.values);n._zod.values=t,ne(n,"pattern",r=>{let o=r.def.values;return new RegExp(o.length?`^(${o.map(i=>typeof i=="string"?vn(i):i?vn(i.toString()):String(i)).join("|")})$`:"^[^\\s\\S]$")}),n._zod.parse=(r,o)=>{let i=r.value;return t.has(i)||r.issues.push({code:"invalid_value",values:e.values,input:i,inst:n}),r}});function mi(n,e){return n.value=e.issues.length?void 0:e.value,n}var Ni=O("$ZodOptional",(n,e)=>{G.init(n,e),ne(n,"optin",t=>t.def.innerType._zod.optin==="defaulted"?"defaulted":"optional"),n._zod.optout="optional",ne(n,"values",t=>{let r=t.def.innerType._zod.values;return r?new Set([...r,void 0]):void 0}),ne(n,"pattern",t=>{let r=t.def.innerType._zod.pattern;return r?new RegExp(`^(${Vt(r.source)})?$`):void 0}),n._zod.parse=(t,r)=>{if(t.value===void 0){if(e.innerType._zod.optin!=="defaulted")return t;let o=e.innerType._zod.run({value:t.value,issues:[]},r);return o instanceof Promise?o.then(i=>mi(t,i)):mi(t,o)}return e.innerType._zod.run(t,r)}});var Ii=O("$ZodCustom",(n,e)=>{J.init(n,e),G.init(n,e),n._zod.parse=(t,r)=>t,n._zod.check=t=>{let r=t.value,o=e.fn(r);if(o instanceof Promise)return o.then(i=>yi(i,t,r,n));yi(o,t,r,n)}});function yi(n,e,t,r){if(!n){let o={code:"custom",input:t,inst:r,path:[...r._zod.def.path??[]],continue:!r._zod.def.abort};r._zod.def.params&&(o.params=r._zod.def.params),e.issues.push(xn(o))}}var cc=()=>{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=Uo(i.input),d=o(a,i.input);return`Invalid input: expected ${s}, received ${d}`}case"invalid_value":return i.values.length===1?`Invalid input: expected ${Yt(i.values[0])}`:`Invalid option: expected one of ${Bt(i.values,"|")}`;case"too_big":{let s=i.exact?"exactly ":i.inclusive?"<=":"<",a=e(i.origin);return a?`Too big: expected ${i.origin??"value"} to have ${s}${i.maximum.toString()} ${a.unit??"elements"}`:`Too big: expected ${i.origin??"value"} to be ${s}${i.maximum.toString()}`}case"too_small":{let s=i.exact?"exactly ":i.inclusive?">=":">",a=e(i.origin);return a?`Too small: expected ${i.origin} to have ${s}${i.minimum.toString()} ${a.unit}`:`Too small: expected ${i.origin} to be ${s}${i.minimum.toString()}`}case"invalid_format":{let s=i;return s.format==="starts_with"?`Invalid string: must start with "${s.prefix}"`:s.format==="ends_with"?`Invalid string: must end with "${s.suffix}"`:s.format==="includes"?`Invalid string: must include "${s.includes}"`:s.format==="regex"?`Invalid string: must match pattern ${s.pattern}`:`Invalid ${t[s.format]??i.format}`}case"not_multiple_of":return`Invalid number: must be a multiple of ${i.divisor}`;case"unrecognized_keys":return`Unrecognized key${i.keys.length>1?"s":""}: ${Bt(i.keys,", ")}`;case"invalid_key":return`Invalid key in ${i.origin}`;case"invalid_union":return i.options&&Array.isArray(i.options)&&i.options.length>0?`Invalid discriminator value. Expected ${i.options.map(a=>`'${a}'`).join(" | ")}`:i.inclusive===!1?"Invalid input: more than one option matched":"Invalid input";case"invalid_element":return`Invalid value in ${i.origin}`;default:return"Invalid input"}}};function ji(){return{localeError:cc()}}var Ti;var pr=class{constructor(){this._map=new WeakMap,this._idmap=new Map}add(e,...t){let r=t[0];return this._map.set(e,r),r&&typeof r=="object"&&"id"in r&&this._idmap.set(r.id,e),this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(e){let t=this._map.get(e);return t&&typeof t=="object"&&"id"in t&&this._idmap.delete(t.id),this._map.delete(e),this}get(e){let t=e._zod.parent;if(t){let r={...this.get(t)??{}};delete r.id;let o={...r,...this._map.get(e)};return Object.keys(o).length?o:void 0}return this._map.get(e)}has(e){return this._map.has(e)}};function Di(){return new pr}(Ti=globalThis).__zod_globalRegistry??(Ti.__zod_globalRegistry=Di());var Ge=globalThis.__zod_globalRegistry;function Fi(n){return n.checks&&(n.checks=[...n.checks]),n}function Zi(n,e){return new n(Fi({type:"string",...M(e)}))}function Li(n,e){return new n({type:"string",format:"email",check:"string_format",abort:!1,...M(e)})}function Ci(n,e){return new n({type:"string",format:"url",check:"string_format",abort:!1,...M(e)})}function Gi(n,e){return new n(Fi({type:"number",checks:[],...M(e)}))}function Ki(n,e){return new n({type:"number",check:"number_format",abort:!1,format:"safeint",...M(e)})}function Ui(n,e){return new n({type:"boolean",...M(e)})}function Bi(n,e){return new n({type:"null",...M(e)})}function Vi(n){return new n({type:"unknown"})}function Wi(n,e){return new n({type:"never",...M(e)})}function qi(n,e){return new oi({check:"less_than",...M(e),value:n,inclusive:!0})}function Hi(n,e){return new ii({check:"greater_than",...M(e),value:n,inclusive:!0})}function pc(n,e){return new si({check:"multiple_of",...M(e),value:n})}function hr(n,e){return new di({check:"max_length",...M(e),maximum:n})}function kn(n,e){return new ci({check:"min_length",...M(e),minimum:n})}function Sn(n,e){return new ui({check:"string_format",format:"regex",...M(e),pattern:n})}function Yi(n,e,t){return new n({type:"custom",check:"custom",fn:e,...M(t)})}function Ji(n,e){let t=hc(r=>(r.addIssue=o=>{if(typeof o=="string")r.issues.push(xn(o,r.value,t._zod.def));else{let i=o;i.fatal&&(i.continue=!1),i.code??(i.code="custom"),"input"in i||(i.input=r.value),i.inst??(i.inst=t),i.continue??(i.continue=!t._zod.def.abort),r.issues.push(xn(i))}},n(r.value,r)),e);return t}function hc(n,e){let t=new J({check:"custom",...M(e)});return t._zod.check=n,t}function Xi(n){let e=new J({check:"describe"});return e._zod.onattach=[t=>{let r=Ge.get(t)??{};Ge.add(t,{...r,description:n})}],e._zod.check=()=>{},e}var q=O("ZodMiniType",(n,e)=>{if(!n._zod)throw new Error("Uninitialized schema in ZodMiniType.");G.init(n,e),n.def=e,n.type=e.type},{get with(){return this.check},set with(n){_e(this,"with",n)},parse(n,e){return or(this,n,e,{callee:this.parse})},parseAsync(n,e){return ir(this,n,e,{callee:this.parseAsync})},safeParse(n,e){return sr(this,n,e)},safeParseAsync(n,e){return ar(this,n,e)},check(...n){let e=this.def;return this.clone({...e,checks:[...e.checks??[],...n.map(t=>typeof t=="function"?{_zod:{check:t,def:{check:"custom"},onattach:[]}}:t)]},{parent:!0})},clone(n,e){return Le(this,n,e)},brand(){return this},register(n,e){return n.add(this,e),this},apply(n,...e){return e.length===0?n(this):n(this,...e)}}),es=O("ZodMiniString",(n,e)=>{lr.init(n,e),q.init(n,e)});function Z(n){return Zi(es,n)}var ns=O("ZodMiniStringFormat",(n,e)=>{ot.init(n,e),es.init(n,e)}),yc=O("ZodMiniEmail",(n,e)=>{vi.init(n,e),ns.init(n,e)});function Ig(n){return Li(yc,n)}var bc=O("ZodMiniURL",(n,e)=>{wi.init(n,e),ns.init(n,e)});function jg(n){return Ci(bc,n)}var ts=O("ZodMiniNumber",(n,e)=>{fr.init(n,e),q.init(n,e)});function $n(n){return Gi(ts,n)}var vc=O("ZodMiniNumberFormat",(n,e)=>{ki.init(n,e),ts.init(n,e)});function Tg(n){return Ki(vc,n)}var xc=O("ZodMiniBoolean",(n,e)=>{Si.init(n,e),q.init(n,e)});function Dg(n){return Ui(xc,n)}var wc=O("ZodMiniNull",(n,e)=>{$i.init(n,e),q.init(n,e)});function Fg(n){return Bi(wc,n)}var kc=O("ZodMiniUnknown",(n,e)=>{Ri.init(n,e),q.init(n,e)});function gr(){return Vi(kc)}var Sc=O("ZodMiniNever",(n,e)=>{_i.init(n,e),q.init(n,e)});function $c(n){return Wi(Sc,n)}var Rc=O("ZodMiniArray",(n,e)=>{Ai.init(n,e),q.init(n,e)});function Zg(n,e){return new Rc({type:"array",element:n,...M(e)})}var mr=O("ZodMiniObject",(n,e)=>{Oi.init(n,e),q.init(n,e),Vo(n,"shape",t=>t._zod.def.shape,!1)});function Ke(n,e){let t={type:"object",shape:n??{},...M(e)};return new mr(t)}function Ue(n,e){return new mr({type:"object",shape:n,catchall:$c(),...M(e)})}function Lg(n,e){return new mr({type:"object",shape:n,catchall:gr(),...M(e)})}function rs(n,e){return Go(n,e)}var _c=O("ZodMiniUnion",(n,e)=>{Ei.init(n,e),q.init(n,e)});function Cg(n,e){return new _c({type:"union",options:n,...M(e)})}var Qi=O("ZodMiniRecord",(n,e)=>{Pi.init(n,e),q.init(n,e)});function Gg(n,e,t){return!e||!e._zod?new Qi({type:"record",keyType:Z(),valueType:n,...M(e)}):new Qi({type:"record",keyType:n,valueType:e,...M(t)})}var Ac=O("ZodMiniEnum",(n,e)=>{zi.init(n,e),q.init(n,e),n.options=[...n._zod.values]});function os(n,e){let t=Array.isArray(n)?Object.fromEntries(n.map(r=>[r,r])):n;return new Ac({type:"enum",entries:t,...M(e)})}var Oc=O("ZodMiniLiteral",(n,e)=>{Mi.init(n,e),q.init(n,e)});function is(n,e){return new Oc({type:"literal",values:Array.isArray(n)?n:[n],...M(e)})}var Ec=O("ZodMiniOptional",(n,e)=>{Ni.init(n,e),q.init(n,e)});function ee(n){return new Ec({type:"optional",innerType:n})}var Pc=O("ZodMiniCustom",(n,e)=>{Ii.init(n,e),q.init(n,e)});function it(n,e={}){return Yi(Pc,n,e)}function Kg(n,e){return Ji(n,e)}var Ug=Xi;Y().localeError||Y(ji());var I=n=>typeof n=="object"&&n!==null?n._zod?.def:void 0,zc=n=>{if(typeof n!="object"||n===null||!("_zod"in n))return;let e=Ge.get(n)?.description;return typeof e=="string"?e:void 0};var Mc=(n,e)=>n?.src?.(e)??e,st=n=>typeof n=="string"&&n.length<2049&&/^(?![^/?#]*:|\/\/)(?!(?:.*\/)?\.\.?(?:[/?#]|$))(?!.*%2e)[^\\\s]+$/i.test(n),yr=(n,e=1)=>e>0&&n===void 0||Number.isInteger(n)&&n>=e;function br(n){let e=n??{};return st(e.href)&&typeof e.name=="string"&&/^.{1,255}$/s.test(e.name)&&/^[\w.+-]{1,60}\/[\w.+-]{1,60}$/.test(e.type)&&yr(e.bytes,0)&&yr(e.width)&&yr(e.height)&&(e.caption===void 0||typeof e.caption=="string"&&e.caption.length<501)&&(e.poster===void 0||st(e.poster))&&(e.captions===void 0||st(e.captions))&&(e.duration===void 0||typeof e.duration=="number"&&Number.isFinite(e.duration)&&e.duration>0)}var ss=n=>n.type.startsWith("image/"),as=n=>n.type.startsWith("video/");function Nc(n){let e=n.duration===void 0?0:Math.round(n.duration);if(e<1)return"a video";if(e<60)return`a ${e}-second video`;let t=Math.round(e/60);return t<60?`a ${t}-minute video`:`a ${Math.floor(t/60)}-hour${t%60>0?` ${t%60}-minute`:""} video`}var Ic=(n,e)=>e==="image"?ss(n):e==="video"?as(n):!0,jc=n=>`${n==="image"?"an image":n==="video"?"a video":"a file"} the host stored, at a path on this host`,Rn=n=>(Array.isArray(n)?n:[n]).filter(br),ds=Symbol.for("@graview/core:file"),Tc=(n,e)=>(Object.defineProperty(I(n),ds,{value:e,enumerable:!0}),n);function cs(n){let e=I(n);return e?.[ds]??(e?.innerType?cs(e.innerType):void 0)}var Dc=()=>({href:Z(),name:Z(),type:Z(),bytes:$n(),width:ee($n()),height:ee($n()),caption:ee(Z()),poster:ee(Z()),duration:ee($n()),captions:ee(Z())});function Bm(n){return Tc(Ke(Dc()).check(it(e=>br(e)&&Ic(e,n),jc(n))),n)}var at=/^(?:https?:\/\/[^\s<>"'`\\]+|@?[A-Za-z0-9][\w.~-]*(?:\/[\w.~-]+)*)$/,dt=n=>typeof n=="string"&&n.length<501&&at.test(n);var us=n=>typeof n=="object"&&n!==null?n._zod?.def:void 0,Fc=/^@(?:https?:\/\/[^\s<>"'`\\#?]+|[A-Za-z0-9][\w.~-]*(?:\/[\w.~-]+)*)\/[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;function ls(n){if(typeof n!="string"||!n.startsWith("@")||!Fc.test(n))return;let e=n.lastIndexOf("/"),t=n.slice(0,e),r=n.slice(e+1),o=/^@https?:\/\//.test(t)||!t.includes("/")?t.slice(1):t;return dt(o)?{address:o,kind:r}:void 0}var Zc=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*:\S[^\n]{0,199}$/,Lc=n=>`${n.kind}:${n.id}`;function fs(n,e){if(typeof n!="string"||!Zc.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 Cc(n,e){return(Array.isArray(n)?n:n==null?[]:[n]).flatMap(r=>{let o=fs(r,e);return o?[o]:[]})}var ps=Symbol.for("@graview/core:linked"),Hm=(n,e)=>(Object.defineProperty(us(n),ps,{value:e,enumerable:!0}),n);function _n(n){let e=us(n);return e?e[ps]??_n(e.innerType):void 0}function Gc(n){let e=n?.fields?.shape??{},t=new Map;for(let[r,o]of Object.entries(e)){let i=_n(o);i&&t.set(r,i)}return t}function Kc(n){if(n.to==="*"||n.to.length===0)return;let e=n.to.map(ls);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 Uc=n=>n.to!=="*"&&n.to.some(e=>typeof e=="string"&&e.startsWith("@"));function Ym(n){return Object.fromEntries(Object.entries(n??{}).filter(([,e])=>!Uc(e)))}function Jm(n){let e=new Map;for(let[t,r]of Object.entries(n??{})){let o=Kc(r);o&&e.set(t,o)}return e}var vr=new WeakMap;function Bc(n,e){e?vr.set(n,e):vr.delete(n)}var hs=n=>vr.get(n);var ct=["sun","mon","tue","wed","thu","fri","sat"],Vc=["day","week","month","year"],Ve=n=>`${n}Repeat`,On=n=>n.endsWith("Repeat")&&n.length>6?n.slice(0,-6):void 0,ys=/^\d{4}-\d{2}-\d{2}$/,bs=Symbol.for("@graview/core:repeat");function ut(n){let e=I(n);return!!e&&(e[bs]===1||ut(e.innerType))}var Wc=n=>(Object.defineProperty(I(n),bs,{value:1,enumerable:!0}),n),xr=(n,e,t)=>n===void 0||Number.isInteger(n)&&n>=e&&n<=t,gs=(n,e)=>n===void 0||Array.isArray(n)&&n.length<=e&&n.every(t=>typeof t=="string"&&ys.test(t)),qc=["every","interval","on","until","count","except","continues"],vs=n=>We(n)&&Object.keys(n).every(e=>qc.includes(e))&&xr(n.interval,1,99)&&xr(n.count,1,1e3)&&gs(n.until===void 0?void 0:[n.until],1)&&gs(n.except,500)&&(n.continues===void 0||typeof n.continues=="string"&&n.continues.length<=200)&&(n.on===void 0||Array.isArray(n.on)&&n.on.length>0&&n.on.length<=31&&n.on.every(e=>n.every==="week"?ct.includes(e):n.every==="month"&&e!==0&&xr(e,-1,31))),ey=()=>Wc(gr().check(it(n=>n===null||vs(n),"how a date repeats, or null"))),An=n=>Date.UTC(+n.slice(0,4),+n.slice(5,7)-1,+n.slice(8,10)),xs=n=>new Date(n).toISOString().slice(0,10),wr=(n,e)=>xs(An(n)+e*864e5),ms=(n,e,t)=>{let r=new Date(Date.UTC(n,e+1,0)).getUTCDate();return xs(Date.UTC(n,e,t<0||t>r?r:t))},We=n=>typeof n=="object"&&n!==null&&Vc.includes(n.every);function Be(n,e,t={}){let r=n.slice(0,10),o=n.slice(10),i=[];if(!ys.test(r))return i;let s=Math.max(1,e.interval??1),a=e.every,d=t.from&&t.from>r?t.from.slice(0,10):r,l=[e.until,t.to?.slice(0,10)].filter(Boolean).sort()[0],u=t.limit??1e3,p=new Set(e.except??[]),c=+r.slice(0,4),f=+r.slice(5,7)-1,g=+r.slice(8,10),h=wr(r,-new Date(An(r)).getUTCDay()),v=(e.on?.length?e.on:[a==="week"?ct[new Date(An(r)).getUTCDay()]:g]).map(k=>typeof k=="string"?ct.indexOf(k):k),y=a==="day"?1:a==="week"?7:0,S=(+d.slice(0,4)-c)*12+(+d.slice(5,7)-1-f),A=e.count?0:Math.max(0,Math.floor((y?(An(d)-An(y===7?h:r))/864e5/y:a==="month"?S:S/12)/s)-1),m=0;for(let k=0;k<5e4&&i.length<u;k++,A++){let w=A*s,x=a==="day"?[wr(r,w)]:a==="week"?v.map(b=>wr(h,w*7+b)):a==="month"?v.map(b=>ms(c,f+w,b)):[ms(c+w,f,g)];for(let b of[...new Set(x)].sort())if(!(b<r)&&(l&&b>l||e.count&&m>=e.count||(m++,b>=d&&!p.has(b)&&i.push(b+o),i.length>=u)))return i}return i}function ws(n,e,t){if(!We(e)||typeof n!="string")return n;let r=Be(n,e,{from:t,limit:1})[0];if(r)return r;let o=e.until||e.count?Be(n,e):[];return o[o.length-1]??n}function Hc(n,e,t){let r=n[e],o=n[Ve(e)];return typeof r=="string"&&We(o)?ws(r,o,t):r}function En(n,e){if(n.onBehalfOf){let{onBehalfOf:i,...s}=n;return`${En(s,e)}, for ${En(i,e)}`}if(n.id===void 0)return n.name??(n.kind==="agent"?"an agent":n.kind);let t=e.graph.getNode(n.id);if(t)return F(e.schema.tryDefinition(t.kind),t);let r=e.seats?.find(i=>i.principal.id===n.id);if(r)return r.label;let o=e.people?.find(i=>i.id===n.id&&(i.kind===void 0||i.kind===n.kind));return o?o.name:n.name?n.name:/(^|:)migration$/.test(n.id)?"the upgrade":/[:_/]/.test(n.id)?{human:"somebody",agent:"an agent",rule:"a rule",system:"the system"}[n.kind]:n.id}var qe="$archived",Ae=n=>n?.[qe]===!0,oy=(n,e=!1)=>e==="all"||Ae(n)===e,kr=n=>n===!0||n==="true"?!0:n==="all"?"all":!1,Pn="$leftAlone",lt=new Set([qe,Pn]);var re="\0graview:unset",He=n=>n===void 0||n===re;function zn(n){if(n.op!=="patch-node")return n;let e=t=>Object.fromEntries(Object.entries(t).map(([r,o])=>[r,o===void 0?re:o]));return{...n,before:e(n.before),after:e(n.after)}}function Mn(n){switch(n.op){case"add-node":return{op:"remove-node",node:n.node};case"remove-node":return{op:"add-node",node:n.node};case"patch-node":return{op:"patch-node",id:n.id,before:n.after,after:n.before};case"add-edge":return{op:"remove-edge",edge:n.edge};case"remove-edge":return{op:"add-edge",edge:n.edge}}}function Oe(n){switch(n.op){case"add-node":case"remove-node":return[n.node.id];case"patch-node":return[n.id];case"add-edge":case"remove-edge":return[n.edge.from,n.edge.to]}}var te=class extends Error{constructor(t,r){super(r?`${t}
|
|
2
|
+
\u2192 ${r}`:t);this.hint=r;this.name="SchemaError"}};function Yc(n,e){let t=n,r=new Map;for(let a of t){if(r.has(a.kind))throw new te(`Duplicate node kind "${a.kind}"`,"Each kind may be declared once; merge the two defineNode calls.");r.set(a.kind,a)}let o=new Map;for(let a of t)for(let[d,l]of Object.entries(a.edges)){if(l.to!=="*"){for(let p of l.to)if(!r.has(p))throw new te(`Edge "${d}" on "${a.kind}" points at undeclared kind "${p}"`,`Declared kinds: ${[...r.keys()].join(", ")}`)}let u=o.get(d);u?u.from.push(a.kind):o.set(d,{from:[a.kind],decl:l})}let i=new Map;for(let[a,{from:d,decl:l}]of o){let u=d.map(p=>r.get(p).edges[a].to);i.set(a,{kind:a,from:d,to:u.includes("*")?"*":[...new Set(u.flat())],cardinality:l.cardinality??"many",...l.description===void 0?{}:{description:l.description}})}let s=new Map;for(let a of t)s.set(a.kind,rs(a.fields,{id:Z().check(kn(1)),kind:is(a.kind)}));return{definitions:t,computed:e,kinds:t.map(a=>a.kind),edgeKinds:[...i.keys()],definition(a){let d=r.get(a);if(!d)throw new te(`Unknown node kind "${String(a)}"`,`Declared kinds: ${[...r.keys()].join(", ")}`);return d},tryDefinition(a){return r.get(a)},edge(a){return i.get(a)},edgeAllowed(a,d,l){let u=r.get(d)?.edges[a];return u?u.to==="*"||u.to.includes(l):!1},parseNode(a){let d=a?.kind;if(typeof d!="string")throw new te("Node is missing a `kind`");let l=s.get(d);if(!l)throw new te(`Unknown node kind "${d}"`,`Declared kinds: ${[...r.keys()].join(", ")}`);let u={},p={};for(let[f,g]of Object.entries(a))lt.has(f)?g===!0&&(p[f]=!0):u[f]=g;let c=l.parse(u);return Object.keys(p).length>0?{...c,...p}:c},__node:void 0}}function z(n){return`${n.kind}\0${n.from}\0${n.to}`}var Nn={addedNodes:[],removedNodes:[],changedNodes:[],addedEdges:[],removedEdges:[],touched:[]};function ks(n){return n.addedNodes.length===0&&n.removedNodes.length===0&&n.changedNodes.length===0&&n.addedEdges.length===0&&n.removedEdges.length===0}function Jc(n,e){let t=new Set([...Object.keys(n),...Object.keys(e)]),r=[];for(let o of t){let i=n[o],s=e[o];JSON.stringify(i)!==JSON.stringify(s)&&r.push(o)}return r.sort()}function Ye(n,e){let t=new Map(n.nodes.map(c=>[c.id,c])),r=new Map(e.nodes.map(c=>[c.id,c])),o=e.nodes.filter(c=>!t.has(c.id)),i=n.nodes.filter(c=>!r.has(c.id)),s=[];for(let c of n.nodes){let f=r.get(c.id);if(!f||f===c)continue;let g=Jc(c,f);g.length>0&&s.push({before:c,after:f,fields:g})}let a=new Map(n.edges.map(c=>[z(c),c])),d=new Map(e.edges.map(c=>[z(c),c])),l=e.edges.filter(c=>!a.has(z(c))),u=n.edges.filter(c=>!d.has(z(c))),p=new Set;for(let c of o)p.add(c.id);for(let c of i)p.add(c.id);for(let c of s)p.add(c.after.id);for(let c of[...l,...u])p.add(c.from),p.add(c.to);return{addedNodes:o,removedNodes:i,changedNodes:s,addedEdges:l,removedEdges:u,touched:[...p].sort()}}function ye(n,e,t){let r=new Set(t.flatMap(i=>i.op==="patch-node"?[i.id]:"node"in i?[i.node.id]:[i.edge.from,i.edge.to]));if(r.size===0)return Nn;let o=i=>({nodes:i.nodes.filter(s=>r.has(s.id)),edges:i.edges.filter(s=>r.has(s.from)||r.has(s.to))});return Ye(o(n),o(e))}function Xc(n){let e=n?.issues;return!Array.isArray(e)||e.length===0?n instanceof Error?n.message:String(n):e.map(t=>{let r=t.path?.length?C(String(t.path.at(-1))):null,o=t.message??"is not what the declaration allows";return r?`${r}: ${o}`:o}).join("; ")}var N=class extends Error{constructor(t,r){super(r?`${t}
|
|
3
|
+
${r}`:t);this.hint=r;this.name="GraphError"}},K=class extends N{constructor(t,r){super(r);this.id=t;this.name="MissingRecordError"}};function ft(n,e){try{n.parseNode(e);return}catch(t){if(t instanceof te)throw t;let r=t.issues??[];return{fields:new Set(r.flatMap(i=>i.code==="unrecognized_keys"&&i.keys?[...i.keys]:typeof i.path?.[0]=="string"?[i.path[0]]:[""])),error:t}}}var Sr="n\0",$r="e\0",B=class n{constructor(e,t={}){this.schema=e;this.validate=t.validate??!0}nodes=new Map;edges=new Map;outIndex=new Map;inIndex=new Map;rank=0;ranks=new Map;lapsed=new Map;reordered=!1;counts=new Map;archived=new Set;listeners=new Set;validate;static from(e,t,r={}){let o=new n(e,r);return o.load(t),o}load(e){let t=this.snapshot();this.restore(e);let r=Ye(t,this.snapshot());return this.emit(r),r}getNode(e){return this.nodes.get(e)}has(e){return this.nodes.has(e)}allNodes(e){return this.reach([...this.nodes.values()],e,this.held)}count(e,t){return t||this.archived.size?this.nodesOfKind(e,t).length:this.counts.get(e)??0}allEdges(e){return this.reach([...this.edges.values()],e,t=>this.archived.has(t.from)||this.archived.has(t.to))}nodesOfKind(e,t){return this.allNodes(t).filter(r=>r.kind===e)}edgesOfKind(e,t){return this.allEdges(t).filter(r=>r.kind===e)}out(e,t,r){return this.reach(this.resolve(this.outIndex.get(e),t,"to"),r,this.held)}in(e,t,r){return this.reach(this.resolve(this.inIndex.get(e),t,"from"),r,this.held)}neighbors(e,t){let r=new Map;for(let o of[...this.out(e,void 0,t),...this.in(e,void 0,t)])r.set(o.id,o);return[...r.values()]}isArchived(e){return this.archived.has(e)}outEdges(e,t){return this.edgesFrom(this.outIndex.get(e),t)}inEdges(e,t){return this.edgesFrom(this.inIndex.get(e),t)}snapshot(){return{nodes:[...this.nodes.values()],edges:[...this.edges.values()]}}get size(){return{nodes:this.nodes.size,edges:this.edges.size}}applyPrimitives(e,t={}){let r=this.snapshot();try{for(let i of e)this.applyOne(i,t.restoring===!0,t.inPlace===!0);this.settleOrder()}catch(i){throw this.restore(r),i}let o=ye(r,this.snapshot(),e);return this.emit(o),o}preview(e,t={}){return n.from(this.schema,this.snapshot(),{validate:this.validate}).applyPrimitives(e,t)}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}restore(e){for(let t of[this.nodes,this.edges,this.outIndex,this.inIndex,this.ranks,this.lapsed,this.counts,this.archived])t.clear();this.reordered=!1;for(let t of e.nodes)this.insertNode(t,!0);for(let t of e.edges)this.insertEdge(t,!0)}tally(e,t){this.counts.set(e,(this.counts.get(e)??0)+t)}place(e,t){let r=t?this.lapsed.get(e):void 0;if(r===void 0){this.ranks.set(e,++this.rank);return}this.ranks.set(e,r),this.lapsed.delete(e),this.reordered=!0}lapse(e){let t=this.ranks.get(e);t!==void 0&&(this.ranks.delete(e),this.lapsed.set(e,t),this.lapsed.size>4096&&this.lapsed.delete(this.lapsed.keys().next().value))}settleOrder(){if(!this.reordered)return;this.reordered=!1;let e=o=>(i,s)=>this.ranks.get(o+i[0])-this.ranks.get(o+s[0]),t=[...this.nodes.entries()].sort(e(Sr));this.nodes.clear();for(let[o,i]of t)this.nodes.set(o,i);let r=[...this.edges.entries()].sort(e($r));this.edges.clear();for(let[o,i]of r)this.edges.set(o,i)}emit(e){if(!(e.addedNodes.length===0&&e.removedNodes.length===0&&e.changedNodes.length===0&&e.addedEdges.length===0&&e.removedEdges.length===0))for(let t of this.listeners)t(e)}applyOne(e,t,r){switch(e.op){case"add-node":this.insertNode(e.node,t,r);return;case"remove-node":{let o=e.node.id,i=this.nodes.get(o);if(!i)throw new K(o,`Cannot remove missing node "${o}"`);for(let s of[...this.outEdges(o),...this.inEdges(o)])this.deleteEdge(s);this.tally(i.kind,-1),this.archived.delete(o),this.nodes.delete(o),this.lapse(Sr+o),this.outIndex.delete(o),this.inIndex.delete(o);return}case"patch-node":{let o=this.nodes.get(e.id);if(!o)throw new K(e.id,`Cannot patch missing node "${e.id}"`);let i={...o};for(let[a,d]of Object.entries(e.after))He(d)?delete i[a]:i[a]=d;let s=t?i:this.checkPatch(o,i,Object.keys(e.after));this.nodes.set(e.id,s),this.archived[Ae(s)?"add":"delete"](e.id),s.kind!==o.kind&&(this.tally(o.kind,-1),this.tally(s.kind,1));return}case"add-edge":this.insertEdge(e.edge,t,r);return;case"remove-edge":{if(!this.edges.has(z(e.edge)))throw new K(z(e.edge),`Cannot remove missing edge ${z(e.edge)}`);this.deleteEdge(e.edge);return}}}check(e){if(!this.validate)return e;try{return this.schema.parseNode(e)}catch(t){throw this.refusal(e,t)}}checkPatch(e,t,r){if(!this.validate)return t;let o=this.schema.tryDefinition(String(t.kind))?.fields?.shape;if(!o)return this.check(t);for(let a of r){if(a==="id"||a==="kind"||lt.has(a))continue;let d=o[a];if(!d){delete t[a];continue}let l=d.safeParse(t[a]);l.success&&(l.data===void 0?delete t[a]:t[a]=l.data)}let i=ft(this.schema,t);if(i===void 0)return t;let s=ft(this.schema,e)?.fields??new Set;if([...i.fields].some(a=>r.includes(a)||!s.has(a)))throw this.refusal(t,i.error);return t}refusal(e,t){if(t instanceof te)return t;{let r=e?.id??"?",o=e?.kind??"?",i=this.schema.tryDefinition(o),s=i&&e&&typeof e=="object"?F(i,e):r;return new N(`${s} does not match what ${o} declares`,Xc(t))}}insertNode(e,t,r=!1){if(this.nodes.has(e.id))throw new N(`Duplicate node id "${e.id}"`);this.nodes.set(e.id,t?e:this.check(e)),Ae(e)&&this.archived.add(e.id),this.tally(e.kind,1),this.place(Sr+e.id,r)}insertEdge(e,t,r=!1){let o=this.nodes.get(e.from),i=this.nodes.get(e.to);if(!o||!i){let a=o?e.to:e.from;throw new K(a,`Edge "${e.kind}" references missing node "${a}"`)}if(this.validate&&!t&&!this.schema.edgeAllowed(e.kind,o.kind,i.kind)){let a=this.schema.edge(e.kind);throw new N(`Edge "${e.kind}" is not declared from ${o.kind} to ${i.kind}`,a?`Declared: ${a.from.join("|")} -> ${a.to==="*"?"*":a.to.join("|")}`:`No edge kind "${e.kind}" is declared in this schema`)}let s=z(e);this.edges.has(s)||(this.edges.set(s,e),this.place($r+s,r),this.index(this.outIndex,e.from,s),this.index(this.inIndex,e.to,s))}deleteEdge(e){let t=z(e);this.edges.delete(t),this.lapse($r+t),this.outIndex.get(e.from)?.delete(t),this.inIndex.get(e.to)?.delete(t)}index(e,t,r){(e.get(t)??e.set(t,new Set).get(t)).add(r)}edgesFrom(e,t){if(!e)return[];let r=[];for(let o of e){let i=this.edges.get(o);i&&(t===void 0||i.kind===t)&&r.push(i)}return r}resolve(e,t,r){let o=[];for(let i of this.edgesFrom(e,t)){let s=this.nodes.get(i[r]);s&&o.push(s)}return o}held=e=>this.archived.has(e.id);reach(e,t,r){let o=t?.archived??!1;return o==="all"||!o&&!this.archived.size?e:e.filter(i=>r(i)===o)}};var pt=class extends Error{constructor(t,r){super(`No invariant registered under "${t}" (required by node "${r}")`);this.invariant=t;this.nodeId=r;this.name="UnregisteredInvariantError"}};function Qc(n,e){return{...e,name:n}}var ht=class extends Error{constructor(e){super(e),this.name="RuleBudgetError"}};function Ss(n,e,t){try{return e().map(r=>r.status?r:{...r,status:"violated"})}catch(r){let o=r instanceof ht,i=r instanceof Error?r.message:String(r),s=n.label??n.name.replace(/-/g," ");return[{invariant:n.name,status:o?"over-budget":"could-not-judge",...t!==void 0?{subjectId:t}:{},label:s,message:`${s} could not be judged: ${i}`,nodeIds:t!==void 0?[t]:[],repairs:[]}]}}function Je(n,e,t={}){let r=t.context??{},o=t.today===void 0?{}:{today:t.today},i=t.onUnregistered??"skip",s=new Set(e.map(c=>c.name)),a=[];for(let c of e)c.scope==="graph"&&a.push(...Ss(c,()=>c.evaluate({graph:n,subject:void 0,context:r,...o}),void 0));let d=e.filter(c=>c.scope!=="graph"),l=new Map;for(let c of d){let f=c.scope.kind,g=l.get(f);g?g.push(c):l.set(f,[c])}for(let c of n.allNodes()){let f=n.schema.tryDefinition(c.kind),g=f?.requiresInvariant?.(c)??null;if(t.subjectFilter&&!t.subjectFilter(c,r))continue;if(g!==null&&!s.has(g)){if(i==="throw")throw new pt(g,c.id);continue}let h=!Ct(f,c,t.today);for(let v of l.get(c.kind)??[]){if(h&&v.judgesPast!==!0)continue;let y=v.scope.match;y&&!y(c)||a.push(...Ss(v,()=>v.evaluate({graph:n,subject:c,context:r,...o}),c.id))}}let u=new Set,p=a.filter(c=>{let f=`${c.message}|${[...c.nodeIds].sort().join(",")}`;return u.has(f)?!1:(u.add(f),!0)}).map(c=>{let f=Lt(c.message);return f===c.message?c:{...c,message:f}});return Rr?Rr(n,e,p,t.today):p}var Rr;function wy(n){Rr=n}function eu(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 nu(n){let e=new Set(n.map(r=>r.invariant)).size;if(e===0)return"All rules hold";let t=`${e} ${e===1?"rule":"rules"} broken`;return n.length>e?`${t} in ${n.length} places`:t}var gt=(n,e)=>n==="*"||n.includes(e);function T(n){let e=n.onBehalfOf;if(!e)return n;let t=e.roles??[],r=n.roles===void 0?t:n.roles.filter(o=>t.includes(o));return{...n,...e.id!==void 0?{id:e.id}:{},roles:r}}var V=n=>n.kind==="system"&&n.onBehalfOf===void 0,be=(n,e)=>n.roles==="*"||(e.roles??[]).some(t=>n.roles.includes(t));function $s(n){return Eo(n.map(e=>Ze(C(e).toLowerCase())),"or")}function ve(n,e,t,r,o,i,s={},a,d,l){if(!n)return{ok:!0};if(V(e))return{ok:!0};if(e=T(e),o!==void 0){if(ve(n,e,t,r,void 0,i).ok)return{ok:!0};let f=!1;if(o.some(y=>ve(n,e,y,r,void 0,i).ok)){if(!d||i===void 0||e.id!==void 0&&d()===e.id||!l&&n.grants.some(y=>y.roles!=="*"&&be(y,e)&&o.some(S=>gt(y.mutations,S))))return{ok:!0};f=!0}let g=f?[t]:[t,...o],h=[...new Set(g.flatMap(y=>_r(n,y,r)))].sort(),v=(f?"only on what you made; ":"")+(h.length===0?o.length===0?"no declared act creates or changes it, so no role can":"no role can":`${$s(h)} can`);return{ok:!1,refusal:{mutation:t,...r===void 0?{}:{kind:r},wouldNeed:h,message:Rs(n,g,r,v,s)}}}let u=!1;for(let f of n.grants){if(!be(f,e)||!gt(f.mutations,t)||f.kinds!==void 0&&f.kinds!=="*"&&(r===void 0||!f.kinds.includes(r))||f.self&&(i===void 0||e.id===void 0||i!==e.id))continue;let g=f.ownEnd?a?.()??[]:[e.id];if(!g.length||g.some(h=>h!==e.id)){u=!0;continue}return{ok:!0}}let p=_r(n,t,r),c=u?"only on your own end of the link":p.length===0?"no role can":`${$s(p)} can`;return{ok:!1,refusal:{mutation:t,...r===void 0?{}:{kind:r},wouldNeed:p,message:Rs(n,[t],r,c,s)}}}function Rs(n,e,t,r,o){let i=[...new Set(e.flatMap(a=>_s(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 _s(n,e,t){return[...new Set(As(n,e,t).flatMap(r=>r.describe||[]))]}var As=(n,e,t)=>n.grants.filter(r=>gt(r.mutations,e)&&(t===void 0||gt(r.kinds??"*",t)));function _r(n,e,t){let r=As(n,e,t);return r.some(o=>o.roles==="*")?[]:[...new Set(r.flatMap(o=>o.roles))].sort()}function Ar(n,e,t){return n?t.filter(r=>{let o=T(e).id;return Or(r).some(i=>ve(n,e,r.name,i,void 0,o,void 0,()=>[o??[]].flat()).ok)}):t}var Or=n=>n.subject&&n.subject.kinds!=="*"?n.subject.kinds:[void 0];var X=class extends Error{constructor(t,r="refused"){super(t);this.sentence=t;this.reason=r;this.name="ActRefusal"}};var In=class{constructor(e,t,r){this.present=e;this.timeline=t;this.unversioned=r}nodes=new Map;edges=new Map;touching=new Map;seq=Number.MAX_SAFE_INTEGER;wrote=new Map;begin(e){this.seq=e,this.wrote.clear()}writerOf(e){return t=>{let r=`${e}\0${t}`;return this.wrote.has(r)?this.wrote.get(r):this.timeline?.writers?.writerAt(e,t,this.seq)}}note(e,t){let r=e.op==="add-node"?e.node.id:e.op==="patch-node"?e.id:"";if(r===""||this.unversioned?.has(r))return;let o=e.op==="add-node"?Object.keys(e.node):Object.keys(e.after);for(let i of o)i!=="id"&&i!=="kind"&&this.wrote.set(`${r}\0${i}`,t(r,i))}node(e){return this.nodes.has(e)?this.nodes.get(e)??void 0:this.present.getNode(e)}setNode(e,t){this.nodes.set(e,t)}setEdge(e,t){let r=z(e);this.edges.set(r,t?e:null);for(let o of[e.from,e.to]){let i=this.touching.get(o);i||this.touching.set(o,i=new Set),i.add(r)}}incident(e){let t=new Map;for(let r of[...this.present.outEdges(e),...this.present.inEdges(e)]){let o=z(r);this.edges.has(o)||t.set(o,r)}for(let r of this.touching.get(e)??[]){let o=this.edges.get(r);o&&t.set(r,o)}return[...t.values()]}undo(e){switch(e.op){case"add-node":this.setNode(e.node.id,null);return;case"remove-node":this.setNode(e.node.id,e.node);return;case"patch-node":{if(this.unversioned?.has(e.id))return;let t=this.node(e.id);if(!t)return;this.setNode(e.id,Os(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,Os(t,e.after));return}case"add-edge":this.setEdge(e.edge,!0);return;case"remove-edge":this.setEdge(e.edge,!1);return}}};function Os(n,e){let t={...n};for(let[r,o]of Object.entries(e))He(o)?delete t[r]:t[r]=o;return t}var tu=n=>n.op==="add-node"||n.op==="remove-node"?n.node.id:n.op==="patch-node"?n.id:void 0;function Er(n,e,t,r){let o=u=>{let p=e.node(u);return p?t.served(p,e.writerOf(u))!==void 0:t.sees?.(u)??!1},i=tu(n);if(i===void 0){let u=n.edge,p=t.edgeClean(u)&&o(u.from)&&o(u.to);return e.apply(n),{primitives:p?[n]:[],faithful:!0}}let s=e.node(i),a=s?t.served(s,e.writerOf(i)):void 0;e.apply(n),e.note(n,r);let d=e.node(i),l=d?t.served(d,e.writerOf(i)):void 0;if(!a&&!l)return{primitives:[],faithful:!1};if(!a&&l){let u=e.incident(i).filter(c=>t.edgeClean(c)&&o(c.from===i?c.to:c.from)).map(c=>({op:"add-edge",edge:c})),p=n.op==="add-node"&&l===n.node&&u.length===0;return{primitives:p?[n]:[{op:"add-node",node:l},...u],faithful:p}}if(a&&!l){let u=n.op==="remove-node"&&a===s;return{primitives:u?[n]:[{op:"remove-node",node:a}],faithful:u}}if(n.op==="patch-node"){let u=(c,f)=>g=>g in c==(f!==void 0&&g in f);if(Object.keys(n.after).every(c=>u(a,s)(c)&&u(l,d)(c)))return{primitives:[n],faithful:!0};let p=c=>Object.fromEntries(Object.keys(n.after).map(f=>[f,f in c?c[f]:re]));return{primitives:[{op:"patch-node",id:i,before:p(a),after:p(l)}],faithful:!1}}return{primitives:[{op:"remove-node",node:a},{op:"add-node",node:l}],faithful:!1}}function Es(n,e,t){if(n.length===0)return[];let r=e.log.all(),o=r[0]?.seq??0,i=n.every(c=>r[c.seq-o]?.id===c.id),s=new In(e.present,e);if(!i)return s.begin(e.log.length??o+r.length),n.map(c=>{let f=T(c.author).id,g=c.primitives.map(h=>Er(h,s,t,()=>f));return{op:c,primitives:g.flatMap(h=>h.primitives),faithful:g.every(h=>h.faithful)}});let a=new Set(n.map(c=>c.seq)),d=Number.POSITIVE_INFINITY,l=Number.NEGATIVE_INFINITY;for(let c of a)c<d&&(d=c),c>l&&(l=c);d-=o,l-=o;let u=ru(r,d,e.present,t),p=u?new In(e.present,e,u.unversioned):s;for(let c=r.length-1;c>=d;c--){let f=r[c].primitives;for(let g=f.length-1;g>=0;g--)p.undo(f[g])}return ou(n,r,d,l,a,p,u?.judge??t,e)}function ru(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 ou(n,e,t,r,o,i,s,a){let d=new Map;for(let l=t;l<=r;l++){let u=e[l];if(i.begin(u.seq),!o.has(u.seq)){for(let f of u.primitives)i.apply(f);continue}let p=(f,g)=>a.writers?.writerAt(f,g,u.seq+1),c=u.primitives.map(f=>Er(f,i,s,p));d.set(u.seq,{op:u,primitives:c.flatMap(f=>f.primitives),faithful:c.every(f=>f.faithful)})}return n.map(l=>d.get(l.seq))}function zy(n,e,t,r){let o=new In(e.present,e);return o.begin(e.log.length??e.log.all().length),n.flatMap(i=>Er(i,o,t,()=>r).primitives)}var zs="A change you cannot see",Ms={kind:"system",id:"withheld",name:"Someone"};function Xe(n){return n.withheld===!0}var jn=Oe,Ns=(n,e)=>Object.entries(n).some(([t,r])=>t!=="id"&&t!=="kind"&&j(r,e));function Is(n){if(typeof n!="function")return n;let e=n,t=r=>e(r.id)&&!Ns(r,e)?r:void 0;return{sees:e,shows:e,served:t,servedWith:t,optional:()=>!1,kindOf:()=>{}}}function j(n,e){if(typeof n=="string")return!e(n);if(n===null||typeof n!="object")return!1;if(Array.isArray(n)){for(let t=0;t<n.length;t++)if(j(n[t],e))return!0;return!1}for(let t in n)if(Object.hasOwn(n,t)&&(!e(t)||j(n[t],e)))return!0;return!1}function js(n,e){let t=r=>!e(r);return n.primitives.some(r=>jn(r).some(t))||[...n.writes,...n.reads].some(t)||n.mutation!==null&&j(n.mutation.args,e)}function iu(n,e){if(jn(n).every(e.shows))switch(n.op){case"add-node":{let t=e.served(n.node);return t?t===n.node?n:{op:"add-node",node:t}:void 0}case"remove-node":{let t=n.node;return Ns(t,e.sees)?{op:"remove-node",node:Object.fromEntries(Object.entries(t).filter(([r,o])=>r==="id"||r==="kind"||!j(o,e.sees)))}:n}case"patch-node":{let t=e.kindOf(n.id),r={};for(let[i,s]of Object.entries(n.after))if(!j(s,e.sees))r[i]=s;else if(t!==void 0&&e.optional(t,i))r[i]=re;else return;let o=Object.fromEntries(Object.entries(n.before).filter(([,i])=>!j(i,e.sees)));return{op:"patch-node",id:n.id,before:o,after:r}}case"add-edge":case"remove-edge":return j(n.edge,e.sees)?void 0:n}}function Pr(n,e,t){let r=Is(e),o=i=>r.shows(i)&&Ts(r,i);return{id:n.id,seq:n.seq,batch:n.batch,author:Ms,intent:zs,mutation:null,primitives:t??n.primitives.flatMap(i=>{let s=iu(i,r);return s?[s]:[]}),inverse:[],reads:n.reads.filter(o),writes:n.writes.filter(o),at:n.at,...n.undoes!==void 0?{undoes:n.undoes}:{},withheld:!0}}function Qe(n,e){let t=Is(e);if(t.hides?.()===!1)return[...n];let r=t.pin?.()??t;if(r.redact)return r.redact(n);if(r.timeline){let o={served:(i,s)=>r.servedWith(i,s),edgeClean:i=>!j(i,r.sees),sees:r.sees,names:i=>j(i,r.sees)};return Es(n,r.timeline,o).map(({op:i,primitives:s,faithful:a})=>(!i.withheld&&a?Ps(i,r,s):void 0)??Pr(i,r,s))}return n.map(o=>(!o.withheld&&!js(o,r.shows)?Ps(o,r):void 0)??Pr(o,r))}function Ps(n,e,t){if(t&&t.length<n.primitives.length){if(!t.length)return;n={...n,primitives:t,inverse:n.inverse.filter(c=>jn(c).every(e.shows))}}let r=c=>e.sees(c)&&Ts(e,c),o=n.reads.filter(r),i=new Set(n.primitives.flatMap(jn)),s=n.writes.filter(c=>r(c)||e.sees(c)&&i.has(c)),a=o.length===n.reads.length&&s.length===n.writes.length?n:{...n,reads:o,writes:s},d=e.actor!==void 0&&T(n.author).id===e.actor;if(!d&&n.described?.some(c=>!e.sees(c)))return;if(!j(n,e.sees))return a;let l=new Set,u=c=>{if(typeof c=="string")l.add(c);else if(Array.isArray(c))for(let f of c)u(f);else if(c!==null&&typeof c=="object")for(let[f,g]of Object.entries(c))l.add(f),u(g)};t&&u(t);let p=c=>e.sees(c)||l.has(c);if(!j(a.inverse,p))return d&&n.mutation&&u(n.mutation.args),j({...a,primitives:[],inverse:[]},d?p:e.sees)?void 0:a}function Ts(n,e){return n.timeline===void 0||n.kindOf(e)!==void 0}var Ee=class extends N{constructor(t){super(t.message);this.check=t;this.name="UndoBlockedError"}get blockedBy(){return this.check.blockedBy}};function Tn(n,e){let t=new Set(e),r=n.undoneIds(),o=n.all().filter(f=>t.has(f.batch)&&!r.has(f.id)),i=[...n.epochs()].reverse().find(f=>f.horizon);if(i){let f=new Set(n.all().map(h=>h.batch)),g=e.filter(h=>!f.has(h));if(g.length>0)return{ok:!1,ops:o,blockedBy:[],includeBatches:[],reason:"missing",message:`Cannot undo ${g.map(h=>`batch ${h}`).join(", ")}: it is not after the undo horizon at op ${i.seq}${i.at?` (${i.at})`:""}. What was done before the horizon is archived, and undo does not reach behind it.`}}if(o.length===0)return{ok:!1,ops:o,blockedBy:[],includeBatches:[],reason:"missing",message:e.length===0?"No batch given to undo":`Nothing live to undo in ${e.join(", ")} \u2014 already undone, or never applied`};if(o.some(Xe))return{ok:!1,ops:o,blockedBy:[],includeBatches:[],reason:"forbidden",message:o.every(Xe)?"Cannot undo a change you cannot see: only somebody who can see it can take it back.":"Cannot undo this here: part of it is a change you cannot see, and only somebody who can see it can take it back."};if(o.some(f=>f.enabledModules!==void 0))return{ok:!1,ops:o,blockedBy:[],includeBatches:[],message:"Cannot undo turning a module off or on: it is changed by turning the module the other way."};let s=new Set;for(let f of o)for(let g of f.writes)s.add(g);let a=Math.min(...o.map(f=>f.seq)),d=n.epochs().find(f=>f.change!==void 0&&f.seq>a);if(d){let f=o.find(g=>g.seq<d.seq);return{ok:!1,ops:o,blockedBy:[],includeBatches:[],message:`Cannot undo "${f.intent}": ${f.intent===d.change?"it changed the declaration":`it was done before the declaration changed (${d.change})`}, and undo does not reach back across that change.`}}let l=new Map(n.all().map(f=>[f.id,f.seq])),u=[];for(let f of n.all()){if(f.seq<=a||t.has(f.batch)||r.has(f.id)||f.undoes!==void 0&&(l.get(f.undoes)??-1)>a)continue;let g=f.reads.filter(h=>s.has(h));g.length>0&&u.push({op:f,overlap:g})}if(u.length===0)return{ok:!0,ops:o};let p=u.filter(f=>!Xe(f.op)).map(f=>`"${f.op.intent}" (op ${f.op.id}, read ${f.overlap.join(", ")})`).join("; ");if(u.some(f=>Xe(f.op)))return{ok:!1,ops:o,blockedBy:u,includeBatches:[],message:`Cannot undo on its own \u2014 ${p?`a later operation depends on it: ${p}; and `:""}a later change you cannot see depends on it, which only somebody who can see it can take back.`};let c=[...new Set(u.map(f=>f.op.batch))];return{ok:!1,ops:o,blockedBy:u,includeBatches:c,message:`Cannot undo on its own \u2014 a later operation depends on it: ${p}. Include ${c.map(f=>`batch ${f}`).join(", ")} to undo them together.`}}function Ds(n){return[...n].sort((e,t)=>t.seq-e.seq).flatMap(e=>e.inverse)}var Pe=class extends Error{refusal;constructor(e){super(e.message),this.name="PermissionDeniedError",this.refusal=e}};function su(n){let e=n instanceof Error?n.message:String(n);if(n instanceof Pe){let t=n.refusal.wouldNeed;return{reason:"forbidden",sentence:e,...t.length>0?{wouldNeed:[...t]}:{}}}return n instanceof K?{reason:"missing",sentence:e}:n instanceof X?{reason:n.reason,sentence:n.sentence}:n instanceof Ee?{reason:n.check.reason??"invalid",sentence:e}:{reason:"invalid",sentence:e}}var xe=class extends N{constructor(t,r){super(`Invalid arguments for mutation "${t}"`,r.map(o=>`${o.path.map(String).join(".")||"(root)"}: ${o.message}`).join("; "));this.mutation=t;this.issues=r;this.name="InvalidArguments"}};function qy(n){let e=/^(edit|remove|archive|unarchive|merge|leave-alone|allow-tidying|skip|detach|split)-(.+)$/.exec(n);return e?{act:e[1],kind:e[2]}:void 0}var Zs=["connect","disconnect"],Ls=n=>n.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`),Cs=(n,e,t)=>`${n}-${e}-${Ls(t)}`;function Hy(n,e){let t=/^(connect|disconnect)-(.+)$/.exec(n);if(t){for(let[r,o]of e)if(t[2].startsWith(`${r}-`)){for(let i of o)if(t[2]===`${r}-${Ls(i)}`)return{act:t[1],kind:r,relation:i}}}}var Fs=n=>`${/^[aeiou]/i.test(n)?"an":"a"} ${n}`;function Gs(n,e){let t=e.also?` (${e.also})`:"";return{title:`${e.one?`${n==="connect"?"Set":"Clear"} the ${e.to}`:`${n==="connect"?"Link":"Unlink"} ${Fs(e.to)}`}${t}`,fromTheOtherEnd:`${n==="connect"?"Link":"Unlink"} ${Fs(e.from)}${t}`}}var au=n=>`Op "${n.id}" has seq ${n.seq}, so the log begins at seq ${n.seq}: a log that begins past 0 begins at its undo horizon, and none was given (a checkpoint epoch, or { horizon })`,en=class n{ops=[];marks=[];start=0;get length(){return this.start+this.ops.length}get horizon(){return this.start}all(){return this.ops}opsFrom(e){return this.ops.slice(Math.max(0,e-this.start))}append(e){if(e.seq!==this.length)throw new Error(this.length===0&&e.seq>0?au(e):`Op "${e.id}" has seq ${e.seq} but the log is ${this.length} long`);this.ops.push(e)}static from(e,t=[],r={}){let o=new n,i=[...t].reverse().find(d=>d.horizon),s=r.horizon??i?.seq??0;if(!Number.isInteger(s)||s<0)throw new Error(`A log cannot begin at seq ${s}`);if(i&&r.horizon!==void 0&&i.seq!==r.horizon)throw new Error(`A log said to begin at seq ${r.horizon} has its checkpoint at seq ${i.seq}`);let a=e[0];if(a&&s>0&&a.seq!==s)throw new Error(`A log compacted at seq ${s} begins with op "${a.id}" at seq ${a.seq}`);o.start=s;for(let d of e)o.append(d);for(let d of t)o.markEpoch(d);return o}replace(e,t=[],r={}){let o=n.from(e,t,r);this.ops=o.ops,this.marks=o.marks,this.start=o.start}epochs(){return this.marks}lastEpoch(){return this.marks.at(-1)}markEpoch(e){if(!Number.isInteger(e.seq)||e.seq<0||e.seq>this.length)throw new Error(`An epoch at seq ${e.seq} starts past the end of a log ${this.length} long`);if(e.seq<this.start)throw new Error(`An epoch at seq ${e.seq} is behind the horizon at seq ${this.start}: it went to the archive with the ops before it`);let t=this.lastEpoch();if(t&&e.seq<t.seq)throw new Error(`An epoch at seq ${e.seq} comes before the last one, at seq ${t.seq}`);this.marks.push(e)}truncate(e){if(!Number.isInteger(e)||e<this.start||e>this.length)throw new Error(`Cannot cut a log ${this.length} long back to ${e}`);let t=this.lastEpoch();if(t&&t.seq>e)throw new Error(`Cannot cut the log back to ${e}: an epoch begins at seq ${t.seq}`);return this.ops.splice(e-this.start)}checkpointAt(e,t,r={}){if(!Number.isInteger(t)||t<this.start||t>this.length)throw new Error(`No checkpoint at seq ${t}: this log holds seqs ${this.start} to ${this.length}`);let o=[...this.marks].reverse().find(a=>a.seq<=t);if(o?.seq===t)return{...o,horizon:!0};let i=this.fold(e,{...r,...o?{from:o}:{},to:t}).snapshot(),s=this.ops[t-1-this.start]?.at??o?.at;return{seq:t,base:i,...o?.version!==void 0?{version:o.version}:{},...s!==void 0?{at:s}:{},horizon:!0}}compact(e){if(!Number.isInteger(e.seq)||e.seq<this.start||e.seq>this.length)throw new Error(`Cannot compact at seq ${e.seq}: this log holds seqs ${this.start} to ${this.length}`);let t=this.ops.slice(0,e.seq-this.start),r=this.marks.filter(o=>o.seq<e.seq);return this.ops=this.ops.slice(e.seq-this.start),this.marks=[{...e,horizon:!0},...this.marks.filter(o=>o.seq>e.seq)],this.start=e.seq,{ops:t,epochs:r}}get(e){return this.ops.find(t=>t.id===e)}live(){let e=this.undoneIds();return this.ops.filter(t=>!e.has(t.id))}undoneIds(){return ze(this.ops)}opsInBatch(e){return this.ops.filter(t=>t.batch===e)}batches(){return zr(this.ops,this.undoneIds())}fold(e,t={}){let r=t.from?.seq??0;if(r<this.start)throw new Error(t.from?`An epoch at seq ${r} is behind the horizon at seq ${this.start}: fold from the checkpoint`:`A log compacted at seq ${this.start} does not fold from empty: fold from its checkpoint`);let o=t.from?.base??{nodes:[],edges:[]},i=B.from(e,o,t.validate!==void 0?{validate:t.validate}:{}),s=t.to??this.length;for(let a of this.ops.slice(r-this.start,Math.max(0,s-this.start)))du(i,a);return i}toJSON(){return[...this.ops]}};function du(n,e){if(e.undoes!==void 0){n.applyPrimitives(e.primitives,{restoring:!0});return}try{n.applyPrimitives(e.primitives)}catch{n.applyPrimitives(e.primitives,{restoring:!0})}}function ze(n){let e=new Map;for(let r of n){if(!r.undoes)continue;let o=e.get(r.undoes);o?o.push(r.id):e.set(r.undoes,[r.id])}let t=new Map;for(let r=n.length-1;r>=0;r--){let o=n[r],i=e.get(o.id)??[];t.set(o.id,!i.some(s=>t.get(s)===!0))}return new Set(n.filter(r=>t.get(r.id)===!1).map(r=>r.id))}function zr(n,e){let t=[],r=new Map;for(let o of n){let i=r.get(o.batch);i?i.push(o):(r.set(o.batch,[o]),t.push(o.batch))}return t.map(o=>{let i=r.get(o)??[],s=i[0];return{id:o,author:s.author,intent:s.batchIntent??s.intent,at:s.at,...s.lineage?{lineage:s.lineage}:{},ops:i,undone:i.every(a=>e.has(a.id))}})}function Mr(n){return n?.automated===!0&&n.kind!=="human"&&n.kind!=="rule"}var Us=n=>n?.[Pn]===!0,cu=(n,e)=>Us(("graph"in n?n.graph:n).getNode(e));function Ks(n,e,t){let r=n.tryDefinition(e);return t===void 0?r?.tidying:r?.edges?.[t]?.tidying}var Bs=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 Vs(n,e){let t=uu(n);return[e,...e.map(r=>[r])].map(r=>t.get(Bs(r))).find(Boolean)}function uu(n){let e=ze(n),t=new Map(n.map(o=>[o.id,o])),r=new Map;for(let o of n){let i=o.undoes!==void 0&&!e.has(o.id)&&!o.withheld?t.get(o.undoes):void 0,s=i?.suggests??(i?.mutation&&(i.lineage||o.undoneLineage)?[i.mutation]:[]);if(s.length>0)for(let a of[s,...s.map(d=>[d])])r.set(Bs(a),o)}return r}function Ws(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(Us(u))return s(`change \u201C${F(n.tryDefinition(u.kind),u)}\u201D`,"a person said to leave it alone");if(!i)continue;let p=Ks(n,u.kind);if(p==="never")return s(`change ${Q(n,u.kind)} on its own`,"the app says they are never tidied");if(d&&p==="no-links")return s(`link or unlink ${Q(n,u.kind)} on its own`,"the app says they are never linked automatically")}if(d&&i&&l[0]&&Ks(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 lu(n,e){if(!e||n.length===0)return null;let t=e.roles,r=o=>t?o.wouldNeed.some(i=>t.includes(i)):o.wouldNeed.length>0;return n.every(({refusal:o})=>r(o))?e:null}var mt={scene:0,overview:10,rail:20,popover:30,dialog:40,toast:50},fu={plots:0,stage:1,tag:2,ties:2,lines:3,tieLabels:4,occupants:6,seatMarks:7,zoom:8,card:10,opened:11},pu={under:0,raised:1,over:2},Nr=n=>`--graview-layer-${n}`,hu=n=>`var(${Nr(n)}, ${mt[n]})`;function gu(){return Object.keys(mt).map(n=>` ${Nr(n)}: ${mt[n]};`).join(`
|
|
4
|
+
`)}function mu(n){let e=n.onBehalfOf??n;return{kind:e.kind,...e.id!==void 0?{id:e.id}:{},...e.name!==void 0?{name:e.name}:{},...e.roles!==void 0?{roles:e.roles}:{}}}function qs(){return`sub_${(globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`).replace(/-/g,"").slice(0,20)}`}function Hs(n){return{...n,id:n.id??qs(),at:n.at??new Date().toISOString()}}function yu(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=Hs(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 Js=(n,e)=>`${n}\0${e}`,Ys=new WeakMap;function bu(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(Js(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 vu(n){if(n.op==="add-node")return[n.node.id,Object.keys(n.node).filter(e=>e!=="id"&&e!=="kind")];if(n.op==="patch-node")return[n.id,Object.keys(n.after).filter(e=>!He(n.after[e]))]}function xu(n,e){let t=n.end,r=T(e.author).id,o=e.undoes!==void 0?n.seqOf.get(e.undoes):void 0,i=[];for(let s of e.primitives){let a=vu(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=Js(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 wu(n,e){for(;n.written.length>0&&n.written.at(-1).seq>=e;){let{keys:t}=n.written.pop();for(let r of t)n.fields.get(r)?.pop()}for(let t of n.read.slice(e-n.base))n.seqOf.delete(t.id);n.read.length=e-n.base,n.end=e}function yt(n){let e=n.all(),t=typeof n.length=="number"?n.length:e.length,r=t-e.length,o=Ys.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&&wu(o,i),r>o.base&&(o.read=o.read.slice(r-o.base),o.base=r))}else o=void 0;o||Ys.set(n,o=bu(r));for(let i=o.end;i<t;i++)xu(o,e[i-r]);return o.writers}var nn={served:new WeakSet},Dn=n=>n.fields!==void 0||(n.hide?.length??0)>0,we=n=>nn.on===!0||nn.served.has(n);var Ir=new WeakMap;function ku(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 Su(n,e){let t=n.end;for(let r of e.primitives){if(r.op!=="add-node"&&r.op!=="remove-node")continue;let{id:o,kind:i}=r.node;if(n.kinds.has(o)||(n.kinds.set(o,i),n.entries.push({seq:t,id:o,creator:!1})),r.op!=="add-node"||n.creators.has(o)||e.undoes!==void 0)continue;let s=T(e.author).id;s!==void 0&&(n.creators.set(o,s),n.entries.push({seq:t,id:o,creator:!0}))}n.read.push(e),n.end++}function $u(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 le(n){let e=n.all(),t=typeof n.length=="number"?n.length:e.length,r=t-e.length,o=Ir.get(n);if(o&&o.base<=r&&r<=o.end){let i=Math.min(o.end,t);for(;i>r&&e[i-1-r]!==o.read[i-1-o.base];)i--;i===r&&r>o.base&&i<o.end?o=void 0:(i<o.end&&$u(o,i),r>o.base&&(o.read=o.read.slice(r-o.base),o.base=r))}else o=void 0;o||Ir.set(n,o=ku(r,r>0?Ru(n,r)?.creators:void 0));for(let i=o.end;i<t;i++)Su(o,e[i-r]);return o.records}function Ru(n,e){let t=[...n.epochs?.()??[]].reverse().find(r=>r.horizon);return t?.seq===e?t:void 0}function Xs(n,e){le(n);let t=Ir.get(n),r=new Set;for(let i=t.entries.length-1;i>=0&&t.entries[i].seq>=e;i--)t.entries[i].creator&&r.add(t.entries[i].id);let o={};for(let[i,s]of t.creators)r.has(i)||(o[i]=s);return o}function tn(n,e,t,r,o,i=nn.on===!0){if(!n?.sees?.length||V(e))return!0;let s=n.sees.filter(a=>a.kinds.includes(t.kind)&&(i||!Dn(a)));return s.length===0?!1:(e=T(e),s.some(a=>{if(!be(a,e))return!1;if(!a.own&&!a.via)return!0;let d=e.id;if(d===void 0)return!1;let l=u=>u.id===d;return a.via?r.out(t.id,a.via).some(l)||r.in(t.id,a.via).some(l):t.id===d||r.out(t.id).some(l)||r.in(t.id).some(l)||o?.creatorOf(t.id)===d}))}var Tr=new Set;function bt(n,e){return V(e)?Tr:n.modules?.disabledKinds??Tr}function rn(n,e){return V(e)?!1:(n.policy?.sees?.length??0)>0||bt(n,e).size>0}function ta(n,e){if(!rn(n,e))return()=>!0;let t=n.modules?.disabledKinds??Tr,r=n.policy?.sees??[],o=T(e),i=we(n),s=d=>!t.has(d)&&(r.length===0||r.some(l=>l.kinds.includes(d)&&be(l,o)&&!l.own&&!l.via&&(i||!Dn(l)))),a=n.schema.kinds.every(s);return d=>a||d!==void 0&&s(d)}function Fn(n,e){return t=>{let r=bt(n,e);if(!n.policy?.sees?.length&&r.size===0)return!0;let o=le(n.log),i=n.graph.getNode(t);if(i)return!r.has(i.kind)&&tn(n.policy,e,i,n.graph,o,we(n));let s=o.kindOf(t);return s===void 0?!0:!r.has(s)&&tn(n.policy,e,{id:t,kind:s},{out:()=>[],in:()=>[]},o,we(n))}}var _u={out:()=>[],in:()=>[]};function Au(n,e,t=new Map,r){let o=bt(n,e);if(!n.policy?.sees?.length&&o.size===0)return()=>!0;let i=le(n.log);return s=>{let a=t.get(s);if(a!==void 0)return a;let d,l=n.graph.getNode(s);if(l)d=!o.has(l.kind)&&tn(n.policy,e,l,n.graph,i,we(n));else{let u=i.kindOf(s);if(u===void 0)return r?.add(s),!0;d=!o.has(u)&&tn(n.policy,e,{id:s,kind:u},_u,i,we(n))}return t.set(s,d),d}}function Ou(n){let e=new Map;return(t,r)=>{let o=`${t}\0${r}`,i=e.get(o);if(i===void 0){let s=n?.tryDefinition(t)?.fields?.shape,a=s?.[r];i=s!==void 0&&(a===void 0||a.safeParse?.(void 0).success===!0),e.set(o,i)}return i}}function Fr(n,e){return ra(n,e).lens}var Dr=()=>({judged:new Map,shown:new Map});function ra(n,e){let t=Ou(n.schema),r=V(e)?void 0:T(e).id,o=()=>n.log.length??n.log.all().length,i=new WeakMap,s=n.graph,a=(u,p,c,f,g)=>{let h=(b,$)=>{if(!u(b.id))return;let R;for(let D in b)if(!(!Object.hasOwn(b,D)||D==="id"||D==="kind"||!j(b[D],u))&&!(r!==void 0&&$(D)===r)){if(!t(b.kind,D))return;(R??=[]).push(D)}if(!R)return b;let _=R.join("\0"),P=i.get(b);if(P?.without===_)return P.node;let E=Object.fromEntries(Object.entries(b).filter(([D])=>!R.includes(D)));return i.set(b,{without:_,node:E}),E},v=b=>{let $=c();return h(b,R=>p().writerAt(b.id,R,$))},y=new WeakMap,S=g?b=>{let $=y.get(b);return $||y.set(b,$={node:v(b)}),$.node}:v,A=b=>{if(!u(b))return!1;let $=s.getNode(b);return $===void 0||S($)!==void 0},m=g?.shown??new Map,k=g?b=>{let $=m.get(b);return $===void 0&&m.set(b,$=A(b)),$}:A,w=s.outEdges&&s.inEdges?{present:{getNode:b=>s.getNode(b),outEdges:b=>s.outEdges(b),inEdges:b=>s.inEdges(b)},log:n.log,get writers(){return p()}}:void 0,x={sees:u,shows:k,served:S,servedWith:h,optional:t,kindOf:f,...r!==void 0?{actor:r}:{},...w?{timeline:w}:{},hides:()=>rn(n,e),pin:g?()=>x:()=>d(Dr())};return nn.lens?.(x,n,e)??x};function d(u){let p,c=o(),f=le(n.log);return a(Au(n,e,u.judged,u.unnamed),()=>p??=yt(n.log),()=>c,g=>s.getNode(g)?.kind??f.kindOf(g),u)}return{lens:a(Fn(n,e),()=>yt(n.log),o,u=>s.getNode(u)?.kind??le(n.log).kindOf(u)),pinWith:d}}var Qs=new WeakMap,ea=new WeakMap,Eu=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 Pu(n,e){if(!rn(n,e))return n.log.all();let t=n.log.all(),r=n.log.length??t.length,o=r-t.length,i=[...bt(n,e)].sort().join("\0"),s=oa(e),a=Qs.get(n.log);a||Qs.set(n.log,a=new Map);let d=a.get(s),{pinWith:l}=ra(n,e),u=ea.get(n.log);u||ea.set(n.log,u=new Set);let p=d!==void 0&&d.horizon===o&&d.off===i&&d.length<=r&&(d.length===o||t[d.length-1-o]===d.last);if(d&&p){if(d.length===r)return d.ops;let g=t.slice(d.length-o),h=l(Dr()),v=!0,y=Eu(g);for(let S of y){let A=d.judgments.judged.get(S),m=d.judgments.shown.get(S);if(A!==void 0&&h.sees(S)!==A||m!==void 0&&h.shows(S)!==m){v=!1;break}}if(v){for(let S of y)if(u.has(S)){v=!1;break}}if(v){let S=[...d.ops,...Qe(g,l(d.judgments))],A={horizon:o,off:i,length:r,last:t.at(-1),ops:S,judgments:d.judgments};return a.set(s,A),S}}let c={...Dr(),unnamed:u},f=Qe(t,l(c));return a.set(s,{horizon:o,off:i,length:r,last:t.at(-1),ops:f,judgments:c}),f}function zu(n,e,t){return(t.subjectId===void 0||!e(t.subjectId)||n.shows(t.subjectId))&&t.nodeIds.every(r=>!e(r)||n.shows(r))&&!j(t,n.sees)}function Zr(n,e){return{all:()=>n,undoneIds:()=>ze(n),epochs:e}}var na=new WeakMap;function oa(n){let e=V(n)?n:T(n);return`${n.kind}|${e.id??""}|${(e.roles??[]).join(",")}|${n.onBehalfOf?"for":""}`}var jr=(n,e)=>{let t=Reflect.get(n,e,n);return typeof t=="function"?t.bind(n):t},Mu=Symbol.for("@graview/core:seat");function Zn(n,e){if(!rn(n,e))return n;let t=oa(e),r=na.get(n);r||na.set(n,r=new Map);let o=r.get(t);if(o)return o;let i=n.graph,s=Fr(n,e),a=m=>{let k=R=>R===void 0?void 0:m.served(R),w=R=>k(R)!==void 0,x=R=>w(i.getNode(R));return{served:k,seenNode:w,seenId:x,seenEdge:R=>x(R.from)&&x(R.to)&&!j(R,m.sees),servedAll:R=>R.flatMap(_=>k(_)??[])}},{served:d,seenId:l}=a(s),u=()=>a(s.pin?.()??s),p=(m,k)=>{let w=yt(n.log),x=s.pin?.()??s,b=m.nodes.flatMap(R=>x.servedWith(R,_=>w.writerAt(R.id,_,k))??[]),$=new Set(b.map(R=>R.id));return{nodes:b,edges:m.edges.filter(R=>$.has(R.from)&&$.has(R.to)&&!j(R,x.sees))}},c=m=>{let k=p(m.base,m.seq);if(!m.creators)return{...m,base:k};let w=new Set(k.nodes.map(b=>b.id)),x=Object.fromEntries(Object.entries(m.creators).filter(([b,$])=>w.has(b)&&!j($,s.sees)));return{...m,base:k,creators:x}},f=m=>m&&c(m),g=()=>Pu(n,e),h=()=>Zr(g(),()=>n.log.epochs()),v=new Proxy(i,{get(m,k){switch(k){case"getNode":return w=>d(m.getNode(w));case"has":return l;case"allNodes":case"nodesOfKind":return(...w)=>u().servedAll(m[k](...w));case"count":return(...w)=>u().servedAll(m.nodesOfKind(...w)).length;case"allEdges":case"edgesOfKind":case"outEdges":case"inEdges":return(...w)=>m[k](...w).filter(u().seenEdge);case"out":case"in":case"neighbors":return(w,...x)=>{let b=u();return b.seenId(w)?b.servedAll(m[k](w,...x)):[]};case"snapshot":return()=>{let w=m.snapshot(),x=u();return{...w,nodes:x.servedAll(w.nodes),edges:w.edges.filter(x.seenEdge)}};case"size":{let w=u();return{nodes:w.servedAll(m.allNodes({archived:"all"})).length,edges:m.allEdges({archived:"all"}).filter(w.seenEdge).length}}default:return jr(m,k)}}}),y=()=>{let m=g();return zr(m,ze(m))},S=new Proxy(n.log,{get(m,k){switch(k){case"all":case"toJSON":return()=>[...g()];case"epochs":return()=>m.epochs().map(c);case"lastEpoch":return()=>f(m.lastEpoch());case"live":return()=>{let w=g(),x=ze(w);return w.filter(b=>!x.has(b.id))};case"get":return w=>g().find(x=>x.id===w);case"opsInBatch":return w=>g().filter(x=>x.batch===w);case"batches":return y;default:return jr(m,k)}}}),A=new Proxy(n,{get(m,k){switch(k){case Mu:return{store:m,principal:e};case"graph":return v;case"log":return S;case"snapshot":return v.snapshot;case"batches":return y;case"canUndo":return w=>Tn(h(),typeof w=="string"?[w]:w);case"violations":return w=>m.violations(w,v).filter(x=>zu(s,b=>i.has(b),x));case"findings":return()=>m.findings().filter(w=>(w.id.includes("->")?w.id.split("->").map((b,$)=>$===0?b.slice(b.indexOf(":")+1):b):[w.id]).every(b=>!i.has(b)||l(b))&&!j(w,s.sees));case"wouldChange":return w=>m.wouldChange(w,e);case"preview":return(w,x,b)=>m.preview(w,x,{author:e,...b});case"seenBy":return w=>Zn(m,w);case"seenFor":return e;case"checkpoint":return w=>f(m.checkpoint(w));default:return jr(m,k)}}});return r.set(t,A),A}var Lr=new Set;function Cr(n,e){if(!n||e===void 0)return{enabled:new Set(Object.keys(n??{})),disabledKinds:Lr,disabledMutations:Lr,disabledInvariants:Lr,administered:ia(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:ia(n,t)}}function ia(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 sa(n){return n.normalize("NFKD").replace(/\p{M}/gu,"").toLowerCase().trim().replace(/\s+/g," ")}var vt=class{constructor(e){this.graph=e;for(let t of e.allNodes({archived:"all"}))this.file(t);e.subscribe(t=>this.follow(t))}kinds=new Map;filed=new Map;labelOf(e){return this.filed.get(e)?.label}lookup(e,t){let r=sa(t);if(r.length===0)return{exact:[],prefix:[]};let o=e.includes("*")?[...this.kinds.values()]:e.flatMap(a=>this.kinds.get(a)??[]),i=[],s=[];for(let a of o)for(let d=Gr(a.sorted,r);d<a.sorted.length&&a.sorted[d].startsWith(r);d+=1){let l=[...a.ids.get(a.sorted[d])??[]];s.push(...l),a.sorted[d]===r&&i.push(...l)}return{exact:i,prefix:s}}follow(e){for(let t of e.removedNodes)this.unfile(t.id);for(let t of e.changedNodes)this.unfile(t.after.id),this.file(t.after);for(let t of e.addedNodes)this.file(t)}file(e){let t=F(this.graph.schema.tryDefinition(e.kind),e),r=sa(t);this.filed.set(e.id,{kind:e.kind,key:r,label:t});let o=this.kinds.get(e.kind);o||this.kinds.set(e.kind,o={ids:new Map,sorted:[]});let i=o.ids.get(r);i?i.add(e.id):(o.ids.set(r,new Set([e.id])),o.sorted.splice(Gr(o.sorted,r),0,r))}unfile(e){let t=this.filed.get(e);if(!t)return;this.filed.delete(e);let r=this.kinds.get(t.kind),o=r?.ids.get(t.key);if(!r||!o||(o.delete(e),o.size>0))return;r.ids.delete(t.key);let i=Gr(r.sorted,t.key);r.sorted[i]===t.key&&r.sorted.splice(i,1)}};function Gr(n,e){let t=0,r=n.length;for(;t<r;){let o=t+r>>>1;n[o]<e?t=o+1:r=o}return t}function Nu(n,e){return e.includes("*")?"record":e.map(t=>U(n.tryDefinition(t),t)).join(" or ")}function aa(n,e,t,r){let o=Nu(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 ca=Symbol.for("@graview/core:node-ref"),da=n=>typeof n=="object"&&n!==null?n[ca]:void 0;function ke(n="*"){return Iu(Z().check(kn(1)),n)}function Iu(n,e){let t=Object.freeze(e==="*"?["*"]:[...e]),r=o=>{o&&Object.defineProperty(o,ca,{value:t,enumerable:!0,configurable:!0})};return r(n),r(I(n)),n}function Kr(n){if(typeof n!="object"||n===null)return;let e=da(n);if(e)return e;let t=I(n),r=da(t);if(r)return r;let o=t?.innerType;return o?Kr(o):void 0}function Ln(n){let e=n.shape;if(!e)return[];let t=[];for(let[r,o]of Object.entries(e)){let i=Kr(o);i&&t.push({name:r,kinds:i,optional:o.safeParse(void 0).success})}return t}function Ur(n){if(n===null||typeof n!="object")return JSON.stringify(n)??"null";if(Array.isArray(n))return`[${n.map(r=>r===void 0?"null":Ur(r)).join(",")}]`;let e=n;return`{${Object.keys(e).filter(r=>e[r]!==void 0).sort().map(r=>`${JSON.stringify(r)}:${Ur(e[r])}`).join(",")}}`}var ua=(n,e)=>n.key<e.key?-1:n.key>e.key?1:0;function ju(n){let e=n.nodes.map(r=>({key:r.id,value:r})).sort(ua),t=n.edges.map(r=>({key:z(r),value:{kind:r.kind,from:r.from,to:r.to}})).sort(ua);return Ur({nodes:e.map(r=>r.value),edges:t.map(r=>r.value)})}function on(n){return`sha256:${fa(ju(n))}`}function la(n,e,t,r={}){let o=r.validate??!0,i=r.base??{nodes:[],edges:[]},s=on(t),a=B.from(n,i,{validate:o});for(let[h,v]of e.entries())try{a.applyPrimitives(v.primitives)}catch(y){let S=e[h-1];return{ok:!1,expected:on(a.snapshot()),actual:s,...S?{divergedAfter:S.id}:{},reason:`The log does not fold: op "${v.id}" (${v.intent}) could not be applied. ${y instanceof Error?y.message:String(y)}`}}let d=on(a.snapshot());if(d===s)return{ok:!0,hash:s};let l=h=>{let v=B.from(n,i,{validate:o});for(let y=0;y<=h;y++)v.applyPrimitives(e[y].primitives);return on(v.snapshot())},u=h=>{try{let v=B.from(n,t,{validate:o});for(let y=e.length-1;y>h;y--)v.applyPrimitives(e[y].inverse);return on(v.snapshot())}catch{return}},p=h=>{let v=u(h);return v!==void 0&&v!==l(h)},c=-1,f=e.length-1;for(;c<f;){let h=Math.floor((c+f)/2);p(h)?f=h:c=h+1}let g=f>=0?e[f]:void 0;return{ok:!1,expected:d,actual:s,...g?{divergedAfter:g.id}:{},reason:g?`The graph and the fold of its log part after op "${g.id}" (${g.intent}).`:"The graph and the fold of its log disagree before any op: the base it folds from does not match."}}var Tu=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]),Du=new TextEncoder,Fu=new Uint32Array(64),Zu=new Uint32Array(8),xt=Array.from({length:256},(n,e)=>e.toString(16).padStart(2,"0"));function fa(n){let e=Du.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=Zu;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=Fu;for(let d=0;d<r.length;d+=64){for(let y=0;y<16;y++)s[y]=o.getUint32(d+y*4);for(let y=16;y<64;y++){let S=s[y-15],A=s[y-2],m=(S>>>7|S<<25)^(S>>>18|S<<14)^S>>>3,k=(A>>>17|A<<15)^(A>>>19|A<<13)^A>>>10;s[y]=s[y-16]+m+s[y-7]+k>>>0}let l=i[0],u=i[1],p=i[2],c=i[3],f=i[4],g=i[5],h=i[6],v=i[7];for(let y=0;y<64;y++){let S=(f>>>6|f<<26)^(f>>>11|f<<21)^(f>>>25|f<<7),A=f&g^~f&h,m=v+S+A+Tu[y]+s[y]>>>0,k=(l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10),w=l&u^l&p^u&p,x=k+w>>>0;v=h,h=g,g=f,f=c+m>>>0,c=p,p=u,u=l,l=m+x>>>0}i[0]=i[0]+l>>>0,i[1]=i[1]+u>>>0,i[2]=i[2]+p>>>0,i[3]=i[3]+c>>>0,i[4]=i[4]+f>>>0,i[5]=i[5]+g>>>0,i[6]=i[6]+h>>>0,i[7]=i[7]+v>>>0}let a="";for(let d=0;d<8;d++){let l=i[d];a+=xt[l>>>24]+xt[l>>>16&255]+xt[l>>>8&255]+xt[l&255]}return a}var Cn=class{constructor(e){this.inner=e}seen=new Set;reads(){return[...this.seen]}markAll(e){for(let t of e)this.seen.add(t.id);return e}markEdges(e){for(let t of e)this.seen.add(t.from),this.seen.add(t.to);return e}getNode(e){return this.seen.add(e),this.inner.getNode(e)}has(e){return this.seen.add(e),this.inner.has(e)}allNodes(e){return this.markAll(this.inner.allNodes(e))}allEdges(e){return this.markEdges(this.inner.allEdges(e))}nodesOfKind(e,t){return this.markAll(this.inner.nodesOfKind(e,t))}edgesOfKind(e,t){return this.markEdges(this.inner.edgesOfKind(e,t))}out(e,t,r){return this.seen.add(e),this.markAll(this.inner.out(e,t,r))}in(e,t,r){return this.seen.add(e),this.markAll(this.inner.in(e,t,r))}neighbors(e,t){return this.seen.add(e),this.markAll(this.inner.neighbors(e,t))}};function Lu(n,e){return{...e,name:n}}function Br(n){if(!n.creates?.length)return!1;let e=n.input.shape;return e===void 0||!("id"in e)}function ma(n){let e=n.input,t=e._zod?.def;if(t?.type!=="object"||t.catchall!==void 0||!e.shape)return;let r=Object.keys(e.shape);return Br(n)?[...r,"id"]:r}var pa=(n,e)=>`does not take ${n.map(t=>`"${t}"`).join(", ")}; it takes ${e.length>0?e.map(t=>`"${t}"`).join(", "):"nothing"}`;function Cu(n){if(typeof n!="object"||n===null)return;let e=n.id;if(e!==void 0){if(typeof e!="string"||e.trim().length===0)throw new N("An id must be a non-empty string",`Got ${JSON.stringify(e)}.`);return e}}function Gu(n){let{id:e,...t}=n;return t}function ha(n){return n.normalize("NFKD").replace(/\p{M}/gu,"").toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,"")||"item"}function ya(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 Ku(n,e){if(e.limited&&e.me===void 0)return ga(n,e.held);let t=e.limited?`${n}.${ya(e.me)}`:n,r=t;for(let o=2;e.seen(r);o++)r=`${t}-${o}`;return e.held(r)?ga(t,e.held):r}function ga(n,e){let t;do t=`${n}-${Math.floor(Math.random()*36**6).toString(36).padStart(6,"0")}`;while(e(t));return t}function sn(n,e,t,r={}){let o=Br(e)?Cu(t):void 0,i=o===void 0?t:Gu(t),s=ma(e);if(s&&typeof i=="object"&&i!==null&&!Array.isArray(i)){let m=Object.keys(i).filter(k=>!s.includes(k)&&i[k]!==void 0);if(m.length>0)throw new xe(e.name,[{path:[],message:pa(m,s)}])}let a=e.input.safeParse(i);if(!a.success){let m=Object.keys(e.input.shape??{});throw new xe(e.name,a.error.issues.map(k=>k.code==="unrecognized_keys"&&m.length>0?{...k,message:pa(k.keys,m)}:k))}let d=a.data,l=new Cn(r.seen??n),u=[],p=new Set,c=m=>l.has(m)||n.has(m)||p.has(m),f,g=m=>{let k=new Set([...n.outEdges(m),...n.inEdges(m)]);for(let w of k)l.getNode(w.from),l.getNode(w.to),u.push({op:"remove-edge",edge:w});return k},h={graph:l,schema:n.schema,me:r.me,emit(m){u.push(m)},addNode(m){u.push({op:"add-node",node:m})},removeNode(m){let k=l.getNode(m)&&n.getNode(m);if(!k)throw new K(m,`Cannot remove missing node "${m}"`);g(m),u.push({op:"remove-node",node:k})},patchNode(m,k){let w=l.getNode(m)&&n.getNode(m);if(!w)throw new K(m,`Cannot patch missing node "${m}"`);let x={},b={};for(let[$,R]of Object.entries(k)){let _=w[$];JSON.stringify(_)===JSON.stringify(R)&&!r.keepUnchanged?.(R,$,w)||(x[$]=_,b[$]=R)}Object.keys(b).length!==0&&u.push({op:"patch-node",id:m,before:x,after:b})},archiveNode:m=>h.patchNode(m,{[qe]:!0}),unarchiveNode:m=>h.patchNode(m,{[qe]:void 0}),mergeNode(m,k){let w=l.getNode(k)&&n.getNode(k);if(!w)throw new K(k,`Cannot merge into missing node "${k}"`);if(m===k||Ae(w))throw new N(m===k?"Cannot merge a record into itself":"Cannot merge into an archived record");let x=new Set([...n.outEdges(k),...n.inEdges(k)].map(z));for(let b of g(m)){let $={kind:b.kind,from:b.from===m?k:b.from,to:b.to===m?k:b.to};$.from!==$.to&&!x.has(z($))&&(x.add(z($)),u.push({op:"add-edge",edge:$}))}h.archiveNode(m),f=k},addEdge(m){u.push({op:"add-edge",edge:m})},removeEdge(m){u.push({op:"remove-edge",edge:m})},setSingleSource(m,k,w){n.inEdges(k,m).some(x=>x.from===w)||u.push({op:"add-edge",edge:{kind:m,from:w,to:k}});for(let x of n.inEdges(k,m))l.getNode(x.from),x.from!==w&&u.push({op:"remove-edge",edge:x})},freshId(m,k){if(o!==void 0&&!p.has(o)){if(r.seesInFull&&!r.seesInFull())throw new N(`"${e.name}" makes its own id here`,"Leave id out: the answer says the id it made.");if(c(o))throw new N(`Id "${o}" is already taken`,`"${e.name}" was asked to make a node with that id, and the graph has one. Pick another, or leave id out and let the act mint one.`);return p.add(o),o}let w=k?`${k}:${ha(m)}`:ha(m),b=Ku(w,{seen:$=>(r.seen?r.seen.has($):n.has($))||p.has($),held:c,limited:r.seesInFull!==void 0&&!r.seesInFull(k),me:r.me});return p.add(b),b}};e.apply(h,d);let v=r.check?.(u,e),y=new Set(u.flatMap(Oe)),S=new Cn(r.seen??n),A=e.describe?.(d,S)??`${e.name}(${Object.entries(d).map(([m,k])=>`${m}=${JSON.stringify(k)}`).join(", ")})`;return{primitives:u,reads:[...new Set([...l.reads(),...S.reads()])],...e.describe?{described:[...S.reads(),...v??[]]}:{},writes:[...y],intent:A,...f!==void 0?{mergedInto:f}:{}}}var ba=Symbol.for("@graview/core:amount"),jb=(n,e)=>(Object.defineProperty(I(n),ba,{value:e,enumerable:!0}),n);function Vr(n,e=!0){let t=I(n);return t?.[ba]??(e&&t?.innerType?Vr(t.innerType):void 0)}function va(n,e={}){let t=Number.isInteger(n),r={maximumFractionDigits:t?0:2,minimumFractionDigits:t?0:2};try{return ie(n,e.locale,e.currency?{style:"currency",currency:e.currency,...r}:r)}catch{return ie(n,e.locale,r)}}function xa(n,{format:e,unit:t,currency:r,locale:o}){let i=/^[A-Z]{3}$/.test(t??"");return e==="money"||!e&&i?va(n,{...o?{locale:o}:{},...(i?t:r)?{currency:i?t:r}:{}}):e==="percent"?ie(n,o,{style:"percent",maximumFractionDigits:0}):ie(n,o)+(t?` ${t}`:"")}var Uu=Symbol.for("@graview/core:typed-field");function Wr(n){let e=I(n);return e?e[Uu]??Wr(e.innerType):void 0}var Bu=/^[("'“‘]*(?:(?:[a-z]{1,3}\.){2,}|(?:dr|mr|mrs|ms|mx|st|mt|vs|jr|sr|prof|no|fig|approx)\.)$/i;function Vu(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]==="."&&Bu.test(r))&&!(t.split(" ").length<3&&e.index+1<n.length))return t}}function wa(n,e=140){let t=n.replace(/^[#>\s]+|\*\*|`|\](\([^)\s]*\))?|\[/gm,"").replace(/\s+/g," ").trim(),r=Vu(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 Wu(n){let e=n.fields.shape;return Object.keys(e).flatMap(t=>{let r=ut(e[t])?On(t):void 0;return r&&e[r]?[r]:[]})}var qu=[["skip","Skip this one","Leave one day out of the series; the rest stay as they are.","Skip {} on "],["detach","Change just this one","Make one day of the series a record of its own, to change apart from the rest.","Change {} only on "],["split","Change from here","End the series the day before, and start it again from that day with what changes.","Change {} from "]];function ka(n,e){let t=new Set(e.map(o=>o.name)),r=[];for(let o of n.definitions){let i=Wu(o);if(i.length===0)continue;let s=o.kind,a=o.fields.shape,d=Object.keys(a).filter(u=>!(u in(o.fixed??{}))),l=u=>F(o,u);for(let[u,p,c,f]of qu){let g=`${u}-${s}`;t.has(g)||r.push({name:g,derived:{kind:s,act:u},title:p,description:c,subject:{kinds:[s],arg:"id"},writes:i.map(Ve),...u==="skip"?{}:{creates:[s]},input:Ue({id:ke([s]),on:Z().check(Sn(/^\d{4}-\d{2}-\d{2}$/,"a day, like 2026-10-21")),...i.length>1?{field:ee(os(i))}:{},...u==="skip"?{}:Object.fromEntries(d.map(h=>[h,ee(a[h])]))}),describe:(h,v)=>f.replace("{}",l(v.getNode(String(h.id))??{id:h.id}))+he(String(h.on)),apply(h,v){let y=h.graph.getNode(String(v.id)),S=String(v.field??i[0]),A=y?.[S],m=y?.[Ve(S)],k=String(v.on);if(typeof A!="string"||!We(m))throw new X(`${l(y??{id:v.id})} does not repeat`,"refused");let w=Be(A,m,{from:k,to:k})[0];if(!w)throw new X(`${l(y)} does not fall on ${he(k)}`,"refused");let x=String(y.id),b=Object.fromEntries(d.filter(H=>v[H]!==void 0).map(H=>[H,v[H]])),$=Ve(S),R=H=>{let So=Object.fromEntries(Object.entries({...y,...H,...b}).filter(([Wn,jt])=>jt!=null&&Wn!=="id")),$o=h.freshId(l(So));h.addNode({...So,id:$o,kind:s});for(let Wn of Object.keys(o.edges??{}))for(let jt of h.graph.out(x,Wn))h.addEdge({kind:Wn,from:$o,to:jt.id})};if(u!=="split"){h.patchNode(x,{[$]:{...m,except:[...new Set([...m.except??[],k])].sort()}}),u==="detach"&&R({[S]:w,[$]:null});return}if(Object.keys(b).length===0)throw new X(`Nothing to change: give ${l(y)} from ${he(k)} something new`,"invalid");if(k<=A.slice(0,10))return h.patchNode(x,b);let _=new Date(Date.parse(`${k}T00:00:00Z`)-864e5).toISOString().slice(0,10),P=m.count?Be(A,{...m,except:[]},{to:_}).length:0,{count:E,except:D,...wo}=m,ko=H=>D?.some(H)?{except:D.filter(H)}:{};h.patchNode(x,{[$]:{...wo,until:_,...ko(H=>H<k),...E?{count:P}:{}}}),R({[S]:w,[$]:{...wo,...ko(H=>H>=k),...E?{count:E-P}:{},continues:x}})}})}}return r}function Sa(n,e){let t=new Set(e.map(d=>d.name)),r=e.filter(d=>!d.derived),o=new Set(r.flatMap(d=>d.connects??[])),i=new Set(r.flatMap(d=>d.severs??[])),s=[],a=(d,l)=>{let u=d.getNode(String(l));return u?F(n.tryDefinition(u.kind),u):String(l)};for(let d of n.definitions){let l=d.kind,u=Object.entries(d.edges??{}),p=c=>c.to==="*"?"record":c.to.map(f=>U(n.tryDefinition(f),f)).join(" or ");for(let[c,f]of u){let g=p(f),h=f.cardinality==="one",v=u.some(([A,m])=>A!==c&&p(m)===g),y={to:g,from:U(d,l),one:h,also:v?C(c).toLowerCase():void 0},S=y.from;for(let A of Zs){let m=Cs(A,l,c);if(t.has(m)||f.acts==="none"||(A==="connect"?o.has(c):i.has(c)||f.appendOnly))continue;let{title:k,fromTheOtherEnd:w}=Gs(A,y),x=f.description?`: ${f.description.replace(/\.$/,"")}`:"";s.push({name:m,derived:{kind:l,act:A,relation:c},title:k,fromTheOtherEnd:w,description:A==="connect"?`Link this ${S} to ${/^[aeiou]/i.test(g)?"an":"a"} ${g}${x}.${h?" It has one, so this replaces the one it has.":""}`:`Take away the link between this ${S} and ${/^[aeiou]/i.test(g)?"an":"a"} ${g}${x}. Undo puts it back.`,subject:{kinds:[l],arg:"id"},...A==="connect"?{connects:[c]}:{severs:[c],destructive:!0},idempotent:!0,input:Ue({id:ke([l]),to:ke(f.to==="*"?"*":f.to)}),describe:(b,$)=>A==="disconnect"?`Unlink ${a($,b.id)} from ${a($,b.to)}`:h?`Set the ${g} of ${a($,b.id)} to ${a($,b.to)}`:`Link ${a($,b.id)} to ${a($,b.to)}`,apply(b,$){let R=String($.id),_=String($.to);for(let E of[R,_])if(!b.graph.getNode(E))throw new X(`there is no record "${E}"`,"invalid");let P=b.graph.out(R,c).some(E=>E.id===_);if(A==="disconnect"){if(!P)throw new X(`${a(b.graph,R)} is not linked to ${a(b.graph,_)}`,"invalid");b.removeEdge({kind:c,from:R,to:_});return}if(h)for(let E of b.graph.out(R,c))E.id!==_&&b.removeEdge({kind:c,from:R,to:E.id});P||b.addEdge({kind:c,from:R,to:_})}})}}}return s}function $a(n){let e=n.fields.shape;return Object.keys(e).filter(t=>!(t in(n.fixed??{})))}function qr(n,e){let t=e.subject;return t?t.kinds==="*"?n.kinds:t.kinds:[]}function Hr(n,e){let t=n.subject;if(!t||!n.writes&&n.creates?.length)return[];let r=new Set(Object.keys(e.fields.shape));if(n.writes)return n.writes.filter(s=>r.has(s));let o=n.input.shape??{},i=new Set(Ln(n.input).map(s=>s.name));return Object.keys(o).filter(s=>s!==t.arg&&r.has(s)&&!i.has(s))}function Ra(n,e){let t=new Map,r=(o,i,s)=>{let a=t.get(o)??new Map;a.get(i)?.includes(s)||(a.set(i,[...a.get(i)??[],s]),t.set(o,a))};for(let o of e){for(let i of qr(n,o)){let s=n.tryDefinition(i);if(s)for(let a of Hr(o,s))r(i,a,o.name)}for(let[i,s]of Object.entries(o.writesOther??{})){let a=n.tryDefinition(i)?.fields.shape;if(a)for(let d of s)d in a&&r(i,d,o.name)}}return t}function _a(n,e,t){let r=n.tryDefinition(t);if(!r)return[];let o=Ra(n,e).get(t);return $a(r).filter(i=>!o?.has(i))}var Aa=n=>`edit-${n}`;function Oa(n,e,t){let r=n.tryDefinition(t);if(!r)return[];let o=new Set;for(let i of e)i.derived||((i.creates??[]).includes(t)&&o.add(i.name),qr(n,i).includes(t)&&Hr(i,r).length>0&&o.add(i.name));return[...o]}function Ea(n,e){let t=new Set(e.map(o=>o.name)),r=[];for(let o of n.definitions){let i=o.kind,s=Aa(i);if(t.has(s))continue;let a=_a(n,e,i);if(a.length===0)continue;let d=o.fields.shape,l=U(o,i),u=a.map(p=>Xn(o,p).toLowerCase());r.push({name:s,derived:{kind:i,act:"edit"},idempotent:!0,title:`Change the ${l}`,description:`Change what was set when this ${l} was made: ${u.join(", ")}.`,subject:{kinds:[i],arg:"id"},writes:a,input:Ue({id:ke([i]),...Object.fromEntries(a.map(p=>[p,ee(Ju(d[p]))]))}),describe:(p,c)=>Hu(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 X(`Nothing to change \u2014 give at least one of ${u.join(", ")} a value.`,"invalid");p.patchNode(c.id,f)}})}return r}function Hu(n,e,t,r,o){let i=o.getNode(r.id),s=i?F(n,i):"a record",a=t.filter(d=>r[d]!==void 0).map((d,l)=>{let u=r[d],p=On(d),c=p!==void 0&&p in e,f=Xn(n,c?p:d);return`the ${f===f.toUpperCase()?f:f.charAt(0).toLowerCase()+f.slice(1)}${l===0?` of ${s}`:""} to ${c?u?`repeat ${Yu(u)}`:"stop repeating":Pa(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 Yu=n=>`every ${(n.interval??1)>1?`${n.interval} ${n.every}s`:n.every}`;function Pa(n,e,t,r){if(r===null||r===""||Array.isArray(r)&&r.length===0)return"nothing";let o=n.display?.format?.[t];try{if(o)return String(o(r))}catch{}if(Rn(r).length>0)return Rn(r).map(i=>i.name).join(", ");if(_n(e))return Array.isArray(r)&&r.length>1?`${r.length} linked records`:"a linked record";if(Array.isArray(r))return r.map(i=>Pa(n,e,t,i)).join(", ");if(typeof r=="boolean")return r?"yes":"no";if(typeof r=="number"){let i=Vr(e);return i?xa(r,i):Wr(e)==="duration"?`${r>=60?`${Math.floor(r/60)} h `:""}${r%60||r<60?`${r%60} min`:""}`.trim():String(r)}if(typeof r!="string")return"a new value";if(Fe.test(r))return he(r);if(qn.test(r))return Zt(r);for(let i=I(e);i;i=I(i.innerType))if(i.type==="enum")return C(r);return`\u201C${wa(r,60)}\u201D`}function Ju(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 za(n,e){return n.filter(t=>!t.derived&&(t.creates??[]).includes(e)).map(t=>t.name)}function wt(n,e,t){if(!t.derived)return;let r=t.derived.act;return r==="edit"||r==="skip"||r==="detach"||r==="split"||r==="connect"||r==="disconnect"?Oa(n,e,t.derived.kind):za(e,t.derived.kind)}function Xu(n,e){let t=new Set(e.map(o=>o.name)),r=[];for(let o of n.definitions){let i=o.kind,s=U(o,i),a=(l,u)=>{let p=l.getNode(String(u));return p?F(o,p):String(u)},d=ke([i]);for(let[l,u,p,c]of[["remove","Remove",`Remove the ${s}`,`Take this ${s} out of the graph, with every tie it has. Undo puts it back.`],["archive","Archive",`Archive the ${s}`,`Set this ${s} aside, with its ties and history kept.`],["unarchive","Bring back","Bring it back",`Bring this archived ${s} back.`],["merge","Merge",`Merge into another ${s}`,`The other takes this ${s}'s ties, and this one is archived.`],["leave-alone","Leave alone","Leave this one alone",`Nothing automated changes this ${s}: tidying passes it by until you allow it again.`],["allow-tidying","Allow tidying of","Allow tidying again",`Let tidying change this ${s} again.`]]){let f=`${l}-${i}`,g=l==="leave-alone"||l==="allow-tidying";t.has(f)||!g&&l!=="remove"&&o.archives===!1||g&&o.tidying==="never"||r.push({name:f,derived:{kind:i,act:l},title:p,description:c,subject:{kinds:[i],arg:"id"},...l==="remove"?{destructive:!0}:{},idempotent:!0,input:Ke(l==="merge"?{id:d,into:d}:{id:d}),describe:(h,v)=>{let y=l==="remove"&&v.getNode(String(h.id)),S=y?new Set(Object.values(y).flatMap(A=>Rn(A).map(m=>m.href))).size:0;return`${u} ${a(v,h.id)}${l==="merge"?` into ${a(v,h.into)}`:""}${S?` and its ${S} file${S>1?"s":""}`:""}`},apply:g?(h,v)=>h.patchNode(String(v.id),{[Pn]:l==="leave-alone"?!0:void 0}):(h,v)=>h[`${l}Node`](v.id,v.into)})}}return r}function Yr(n,e){return[...Ea(n,e),...Xu(n,e),...ka(n,e),...Sa(n,e)]}var Qu=n=>({$made:n}),kt=n=>typeof n=="object"&&n!==null&&Object.keys(n).join()==="$made"&&Number.isInteger(n.$made)&&n.$made>=0,el=(n,e)=>Object.fromEntries(Object.entries(n.args??{}).map(([t,r])=>[t,Array.isArray(r)?r.map(e):e(r)])),Ma=n=>Object.values(n.args??{}).some(e=>kt(e)||Array.isArray(e)&&e.some(kt)),Na=(n,e,t)=>({...n,args:el(n,r=>{if(!kt(r))return r;let o=r.$made<t?e[r.$made]:void 0;if(o===void 0)throw new Error(`\u201C${n.name}\u201D names the record call ${r.$made+1} makes, and no call before it made that record.`);return o})});var nl=500,Jr=120;function Gn(n){if(n===void 0)return;let{basis:e,confidence:t,model:r,suggestion:o,interaction:i}=n??{},s=typeof e=="string"?e.trim():"",a=typeof r=="string"?r.trim():"";if(!s||s.length>nl||t!==void 0&&!(typeof t=="number"&&t>=0&&t<=1)||r!==void 0&&!(a&&a.length<=Jr)||o!==void 0&&!(typeof o=="string"&&o.length>0&&o.length<=Jr)||i!==void 0&&!(typeof i=="string"&&i.length>0&&i.length<=Jr))throw new N("A lineage is { basis: 1\u2013500 characters, confidence?: 0\u20131, model?: 1\u2013120 characters, suggestion?: an op id, interaction?: an AI interaction's id }");return{basis:s,...t!==void 0?{confidence:t}:{},...a?{model:a}:{},...typeof o=="string"?{suggestion:o}:{},...typeof i=="string"?{interaction:i}:{}}}var an="keep-link";function Ia(n){let e=(t,r)=>{let o=t.getNode(r);return o?F(n.tryDefinition(o.kind),o):r};return{name:an,title:"Keep this link",input:Ke({kind:Z(),from:Z(),to:Z()}),describe:(t,r)=>`Keep the link from ${e(r,t.from)} to ${e(r,t.to)}`,apply(t,r){let{kind:o,from:i,to:s}=r;if(!t.graph.getNode(i)||!t.graph.getNode(s)){let a=z({kind:o,from:i,to:s});throw new K(a,`Cannot remove missing edge ${a}`)}t.removeEdge({kind:o,from:i,to:s}),t.addEdge({kind:o,from:i,to:s})}}}var ja=(n,e)=>[...n].filter(t=>!t.derived&&t.name!==an&&typeof e=="string"&&(t.connects?.includes(e)||t.severs?.includes(e))).map(t=>t.name);var Ta=["kind-unknown","node-shape","edge-dangling","edge-disallowed","rule-error","rule-budget"];function Da(n,e){let t=ft(n,e);return t&&[...t.fields].filter(Boolean)}function tl(n,e,t){return n.tryDefinition(e)?.fields?.shape?.[t]}function St(n,e){try{return F(n.tryDefinition(e.kind),e)}catch{return typeof e.label=="string"?e.label:"A record"}}var rl=n=>`${n.kind}:${n.from}->${n.to}`,$t=(n,e)=>n<e?-1:n>e?1:0;function Fa(n,e,t={}){let{schema:r}=n,o=[],i=new Map;for(let c of e.nodes)i.has(c.id)||i.set(c.id,c);let s=c=>e.edges.filter(f=>f.from===c||f.to===c),a=c=>({action:"drop",primitives:[...s(c.id).filter(f=>i.has(f.from)&&i.has(f.to)).map(f=>({op:"remove-edge",edge:f})),{op:"remove-node",node:c}]}),d=new Set;for(let c of[...i.values()].sort((f,g)=>$t(f.id,g.id))){if(!r.tryDefinition(c.kind)){d.add(c.id),o.push({code:"kind-unknown",id:c.id,message:`${St(r,c)} is a kind of record this app no longer has`,repair:a(c)});continue}let f=Da(r,c);if(f===void 0)continue;let g=St(r,c),h=new Map,v=f.length>0;for(let y of f){if(y==="id"||y==="kind"){v=!1;continue}let S=tl(r,c.kind,y),A=S?S.safeParse(void 0):{success:!0,data:void 0},m=r.tryDefinition(c.kind)?.defaults;!A.success&&S&&m&&Object.hasOwn(m,y)&&(A=S.safeParse(m[y])),A.success?A.data===void 0?h.set(y,{action:"clear",value:re}):h.set(y,{action:"coerce",value:A.data}):v=!1}if(v){let y={...c};for(let[S,A]of h)A.value===re?delete y[S]:y[S]=A.value;Da(r,y)!==void 0&&(v=!1)}if(f.length===0){o.push({code:"node-shape",id:c.id,message:`${g} does not fit what ${c.kind} declares`,repair:a(c)});continue}for(let y of f){let S=h.get(y),A=v&&S?{action:S.action,primitives:[{op:"patch-node",id:c.id,before:{[y]:c[y]===void 0?re:c[y]},after:{[y]:S.value}}]}:a(c);o.push({code:"node-shape",id:c.id,detail:y,message:`${g}: ${C(y)} does not fit what ${c.kind} declares`,repair:A})}}let l=new Set,u=[];for(let c of[...e.edges].sort((f,g)=>$t(z(f),z(g)))){if(l.has(z(c)))continue;l.add(z(c));let f=rl(c),g=i.get(c.from),h=i.get(c.to);if(!g||!h){o.push({code:"edge-dangling",id:f,message:"A link points at a record that is not there",repair:{action:"drop",primitives:[{op:"remove-edge",edge:c}]}});continue}u.push(c),!(d.has(g.id)||d.has(h.id))&&(r.edgeAllowed(c.kind,g.kind,h.kind)||o.push({code:"edge-disallowed",id:f,message:`${St(r,g)} \u2192 ${St(r,h)}: this app does not allow that link between them`,repair:{action:"drop",primitives:[{op:"remove-edge",edge:c}]}}))}let p=n.invariants??[];if(p.length>0){let c=B.from(r,{nodes:[...i.values()],edges:u},{validate:!1}),f=new Set,g;try{g=Je(c,p,t.invariantOptions??{})}catch{g=[{invariant:"rules",status:"could-not-judge",label:"The rules",message:"The rules could not be judged",nodeIds:[],repairs:[]}]}for(let h of g){let v=h.status==="could-not-judge"?"rule-error":h.status==="over-budget"?"rule-budget":void 0;if(!v)continue;let y=h.subjectId??h.invariant,S=`${v}|${y}|${h.invariant}`;f.has(S)||(f.add(S),o.push({code:v,id:y,detail:h.invariant,message:h.message}))}}return o.sort((c,f)=>Ta.indexOf(c.code)-Ta.indexOf(f.code)||$t(c.id,f.id)||$t(c.detail??"",f.detail??""))}var Kn=()=>globalThis.__graviewWatch;function Za(n){Kn()?.store?.(n)}function Rt(n){n!==void 0&&Kn()?.learn?.({ids:[n],words:[]})}function La(n,e){Kn()?.refused?.({...n,...e===void 0?{}:{author:e}})}function Ca(n,e){Kn()?.refusedInput?.({mutation:n.mutation,message:n.message,...e===void 0?{}:{author:e}})}function ol(n,e,t){Kn()?.seat?.(n,e,t)}function Qr(n,e){if(typeof n=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(n))return n;let t=new Date(n).getTime();if(Number.isNaN(t))throw new Error(`Not a day: ${String(n)}`);return W(e,t)}var Xr=15*6e4;function Ga(n=Date.now(),e){let t=new Date(n).getTime(),r=Hn(e),o=W(r,t),i=new Date(Date.parse(`${o}T00:00:00Z`));if(i.setUTCDate(i.getUTCDate()+1),!r)return i.getTime()-t;let s=_o(i.toISOString().slice(0,10),0,r);for(;W(r,s)===o;)s+=Xr;for(;W(r,s-Xr)!==o;)s-=Xr;return s-t}function il(n,e){let t,r=()=>{t=setTimeout(()=>{let o=n.tick(new Date);r(),e?.(o)},Ga(Date.now(),n.timeZone)+1e3),t.unref?.()};return r(),()=>clearTimeout(t)}var _t=class extends N{constructor(e){super(`This is the app as it stood${e.at?` at ${e.at}`:" at the start"}: the past is read, never changed`),this.name="PastError"}},eo="preview",L=(n,e)=>e===void 0?{}:{[n]:e},Me={kind:"human"},Ka={kind:"system"},Ba={kind:"system",id:"modules",name:"Modules"},Ua=n=>n.mutation===null&&n.undoes===void 0;function no(n,e){return`${n.invariant}|${n.subjectId??""}|${n.line||e?.has(n.invariant)?n.label:n.message}`}var sl=new Set(["remove","archive","unarchive","merge"]),al={has:()=>!0},Va=n=>new Set(n.filter(e=>e.shape).map(e=>e.name));function Wa(n,e,t){let r=Va(n),o=p=>no(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&&no(p,al),u=d.map(l);return{introduces:a.filter(p=>{let c=l(p)?u.indexOf(l(p)):-1;return c<0||(u[c]=null,!1)}),resolves:d.filter((p,c)=>u[c]!==null)}}var dn=class extends Error{constructor(t,r){super(`Op "${t.id}" (${t.intent}) could not be applied: ${r instanceof Error?r.message:String(r)}`,{cause:r});this.op=t;this.name="ReceiveError"}},At=class extends N{constructor(t,r){super(`Unknown mutation "${t}"`,`Registered: ${r.join(", ")||"(none)"}`);this.mutation=t;this.name="UnknownMutationError"}};function dl(){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 to=class n{schema;graph;log;mutations=new Map;keeper;invariants;invariantOptions;policy;intelligence;may=new Map;by;declaredModules;startingModules;projected;nextId;now;validate;mintBatch;batchTag;counter=0;opCount=0;quiet=0;rehearsing=!1;suggesting=!1;ticked;timeZone;past;pastEvery;listeners=new Set;constructor(e){this.pastEvery=Math.max(1,e.pastEvery??64),this.past=e.past,this.schema=e.schema,this.invariants=e.invariants??[],this.invariantOptions=e.invariantOptions??{},this.timeZone=e.timeZone,this.timeZone&&(this.ticked={day:W(this.timeZone),on:W(this.timeZone)}),this.policy=e.policy,this.by=e.principal??Me,this.intelligence=e.intelligence??[];for(let i of e.intelligence??[])i.may&&this.may.set(i.name,new Set(i.may));this.declaredModules=e.modules,this.startingModules=e.enabledModules,this.nextId=e.ids??(()=>`op${++this.opCount}`),this.now=e.now??(()=>new Date().toISOString()),this.validate=e.validate??!0;let t=dl();this.batchTag=e.batchIds?void 0:t,this.mintBatch=e.batchIds??(i=>`${i}:${t}:${++this.counter}`);for(let i of e.past?[]:e.mutations??[]){if(this.mutations.has(i.name))throw new N(`Duplicate mutation "${i.name}"`);this.mutations.set(i.name,i)}for(let i of e.past?[]:Yr(e.schema,e.mutations??[]))this.mutations.set(i.name,i);!e.past&&!this.mutations.has(an)&&(this.keeper=Ia(e.schema),this.mutations.set(an,this.keeper));let r=L("horizon",e.horizon),o={validate:this.validate};if(e.log){this.log=en.from(e.log,e.epochs,r);let i=this.log.lastEpoch();this.graph=e.snapshot?B.from(e.schema,e.snapshot,o):this.log.fold(e.schema,{...o,...i?{from:i}:{}})}else this.log=en.from([],e.epochs??(e.snapshot?[{seq:e.horizon??0,base:e.snapshot}]:[]),r),this.graph=B.from(e.schema,e.snapshot??{nodes:[],edges:[]},o);e.past||(this.countPastTheLog(),Za(this))}stillNow(){if(this.past)throw new _t(this.past)}countPastTheLog(){let e=t=>{let r=/(\d+)$/.exec(t);return r?Number(r[1]):0};for(let t of this.log.all())this.counter=Math.max(this.counter,e(t.batch)),this.opCount=Math.max(this.opCount,e(t.id));this.log.horizon>0&&(this.opCount=Math.max(this.opCount,this.log.length))}get modules(){let e=this.log.all(),t=e.at(-1)?.id,r=this.projected;if(r&&r.length===e.length&&r.last===t)return r.projection;let o,i=0;r&&r.length<=e.length&&(r.length===0||e[r.length-1]?.id===r.last)&&(o=r.said,i=r.length);for(let a=e.length-1;a>=i;a--){let d=e[a].enabledModules;if(d!==void 0){o=d;break}}let s=r&&o===r.said?r.projection:Cr(this.declaredModules,o??this.startingModules);return this.projected={projection:s,length:e.length,last:t,said:o},s}setEnabledModules(e,t={}){this.stillNow();let r=this.modules.enabled,o=Cr(this.declaredModules,e).enabled,i=[...r].filter(u=>!o.has(u)),s=[...o].filter(u=>!r.has(u));if(i.length===0&&s.length===0)return;let a=u=>u.map(p=>{let c=this.declaredModules?.[p]?.kinds??[];return c.length>0?c.map(f=>Q(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:Ba,intent:yn(d),mutation:null,primitives:[],inverse:[],reads:[],writes:[],at:this.now(),...L("via",t.via),enabledModules:[...o].sort()};return this.log.append(l),this.notify(Nn,[l]),l}mutation(e){let t=this.mutations.get(e);if(!t)throw new At(e,[...this.mutations.keys()]);if(this.mutationDisabled(t))throw new N(`Mutation "${e}" belongs to a module this workspace has turned off`,`Enabled modules: ${[...this.modules.enabled].join(", ")||"(none)"}`);return t}mutationDisabled(e){return this.modules.disabledMutations.has(e.name)?!0:e.derived!==void 0&&this.modules.disabledKinds.has(e.derived.kind)}allMutations(){return[...this.mutations.values()].filter(e=>e!==this.keeper&&!this.mutationDisabled(e))}viaOf(e,t){if(e!==void 0&&e===this.keeper){let r=ja(this.mutations.values(),t?.args.kind);if(r.length>0)return r;let o=[...this.mutations.values()];return[...new Set(o.filter(i=>i.derived?.relation===t?.args.kind).flatMap(i=>wt(this.schema,o,i)??[]))]}if(e?.derived)return wt(this.schema,[...this.mutations.values()],e)}moved(e,t){return Wa(this.allInvariants(),e,t)}allInvariants(){return this.invariants.filter(e=>this.invariantEnabled(e))}invariantEnabled(e){if(this.modules.disabledInvariants.has(e.name))return!1;if(e.scope!=="graph"){let t=e.scope.kind;if(this.modules.disabledKinds.has(t))return!1}return!0}permits(e,t=Me){if(this.past)return{ok:!1,refusal:{mutation:e.name,wouldNeed:[],message:"Nothing changes while you look back."}};let r=this.refusesAgent(e,t)??this.namesTurnedOff(e,t);if(r)return{ok:!1,refusal:r};let o=this.mutations.get(e.name),i=o?.subject&&e.args[o.subject.arg];return ve(this.policy,t,e.name,this.subjectKindOf(e,t),this.viaOf(o,e),typeof i=="string"?i:void 0,this.words,()=>{let s=T(t).id,a=this.namedIn(e,!1);try{for(let d of sn(this.graph,o,e.args,this.sighted(t)).primitives)"edge"in d&&d.edge.from!==s&&d.edge.to!==s&&a.push(d.edge.to)}catch{}return a},o?.derived&&(()=>le(this.log).creatorOf(i)),o?.derived!==void 0&&sl.has(o.derived.act))}namedIn(e,t=!0){let r=this.mutations.get(e.name);if(!r)return[];let o=r.subject?.arg;return[...t&&o?[e.args[o]]:[],...Ln(r.input).flatMap(s=>s.name===o?[]:[e.args[s.name]])].flat().filter(s=>typeof s=="string")}refuse(e,t,r=!this.rehearsing){throw r&&La(e,t),new Pe(e)}get words(){return{act:e=>this.mutations.get(e)?.title,noun:e=>U(this.schema.tryDefinition(e),e)}}refusesAgent(e,t){if(t.kind!=="agent"||t.id===void 0)return;let r=this.may.get(t.id);if(!r||r.has(e.name))return;let o=s=>`\u201C${this.mutations.get(s)?.title??s}\u201D`,i=[...r].map(o);return{mutation:e.name,message:`${t.id} may not ${o(e.name)} here: it was declared able to ${i.length===0?"do nothing else":i.join(", ")}.`,wouldNeed:[]}}namesTurnedOff(e,t=Ka){let r=this.modules.disabledKinds;if(r.size===0||!V(t))return;let o=this.mutations.get(e.name);if(!(!o||!this.namedIn(e).some(i=>r.has(this.graph.getNode(i)?.kind))))return{mutation:e.name,message:`\u201C${o.title??e.name}\u201D names a record of a module this workspace has turned off.`,wouldNeed:[]}}sighted(e){let t={me:e&&T(e).id};if(e===void 0||!rn(this,e))return t;let r=Fn(this,e);return{...t,seen:Zn(this,e).graph,keepUnchanged:o=>j(o,r),seesInFull:ta(this,e)}}missingFor(e,t=Me){let r=this.mutations.get(e.name),o=new Set(this.namedIn(e));if(!r||o.size===0)return;let i=Zn(this,t).graph;for(let s of o)if(!i.has(s))return new K(s,`\u201C${r.title??e.name}\u201D names a record that is not there.`)}mayAdminister(e,t=Me){let r=this.modules.administered.get(e);return r?(r.mutations??[]).some(o=>{let i=this.mutations.get(o);return!!i&&Or(i).some(s=>ve(this.policy,t,o,s,this.viaOf(i)).ok)}):!1}seenBy(e){return Zn(this,e)}sees(e,t){return this.graph.has(t)&&Fn(this,e)(t)}labels;resolveRef(e,t,r=Me){let o=(this.policy?.sees?.length??0)>0,i=c=>!o||this.sees(r,c),s=this.graph.getNode(t);if(this.labels??=new vt(this.graph),s&&i(t))return{ok:!0,id:t,label:this.labels.labelOf(t)??t,by:"id"};let a=this.labels.lookup(e.kinds,t),d=c=>{let f=c.filter(g=>!this.graph.isArchived(g));return f.length?f:c},l=d(a.exact.filter(i)),u=l.length>0,p=(u?l:d(a.prefix.filter(i))).map(c=>({id:c,kind:this.graph.getNode(c).kind,label:this.labels.labelOf(c)??c})).sort((c,f)=>c.label<f.label?-1:c.label>f.label?1:c.id<f.id?-1:1);return p.length===1?{ok:!0,id:p[0].id,label:p[0].label,by:u?"label":"prefix"}:aa(this.schema,e,t,p)}kindsKeptFrom(e=Me){let t=new Set;for(let[o,i]of this.modules.administered)if(!this.mayAdminister(o,e))for(let s of i.kinds??[])t.add(s);let r=this.policy?.sees??[];if(r.length>0&&!V(e)){let o=new Set(this.permittedMutations(e).flatMap(s=>s.creates??[])),i=we(this);for(let s of this.schema.kinds)!r.some(d=>d.kinds.includes(s)&&be(d,e)&&(!d.own&&!d.via||e.id!==void 0)&&(i||!Dn(d)))&&!o.has(s)&&t.add(s)}return t}permittedMutations(e=Me){let t=this.allMutations(),r=Ar(this.policy,e,t.filter(i=>!i.derived)),o=t.filter(i=>i.derived!==void 0&&ve(this.policy,e,i.name,i.derived.kind,this.viaOf(i),T(e).id).ok);return[...r,...o]}subjectKindOf(e,t=Ka){let o=this.mutations.get(e.name)?.subject;if(!o)return;let i=e.args[o.arg];if(typeof i!="string")return o.kinds!=="*"&&o.kinds.length===1?o.kinds[0]:void 0;if(!(!V(t)&&!Fn(this,t)(i)))return this.graph.getNode(i)?.kind}today(){return this.pinned()??(this.ticked&&this.ticked.on===W(this.timeZone)?this.ticked.day:void 0)??(this.timeZone?W(this.timeZone):void 0)}pinned(){let e=this.invariantOptions.context,t=this.invariantOptions.today??e?.today;return typeof t=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(t)?t:void 0}judging(e){let t=this.today(),r=hs(this.graph),o=e??this.invariantOptions.context,i=r&&!(o&&"linked"in o)?{...o,linked:r}:e,s=i??o,a=this.timeZone&&t!==void 0&&e===void 0&&!(s&&"today"in s)?{...s,today:t}:i;return{...this.invariantOptions,...a===void 0?{}:{context:a},...t===void 0?{}:{today:t}}}tick(e=new Date){let t=this.pinned();if(t!==void 0)return{day:t,was:t,appeared:[],cleared:[]};let r=Qr(e,this.timeZone),o=W(this.timeZone);this.ticked&&(this.ticked={day:this.ticked.day,on:o});let i=this.today(),s=this.violations();this.ticked={day:r,on:o};let a=this.moved(s,this.violations());if(r!==i&&!this.rehearsing&&this.quiet===0)for(let d of this.listeners)d(Nn,[]);return{day:r,...i===void 0?{}:{was:i},appeared:a.introduces,cleared:a.resolves}}reread(){if(!(this.rehearsing||this.quiet>0))for(let e of this.listeners)e(Nn,[])}violations(e,t=this.graph){return Je(t,this.allInvariants(),this.judging(e)).map(r=>this.asking(r))}required=new Map;asking(e){if(!e.repairs.some(o=>o.missing===void 0))return e;let t=!1,r=e.repairs.map(o=>{if(o.missing!==void 0)return o;let i=this.requiredOf(o.mutation).filter(s=>o.args?.[s]===void 0);return i.length===0?o:(t=!0,{...o,missing:i})});return t?{...e,repairs:r}:e}requiredOf(e){let t=this.required.get(e);if(t)return t;let r=this.mutations.get(e)?.input?.shape??{},o=Object.entries(r).filter(([,i])=>typeof i?.safeParse=="function"&&!i.safeParse(void 0).success).map(([i])=>i);return this.required.set(e,o),o}wouldChange(e,t){try{return sn(this.graph,this.mutation(e.name),e.args,this.sighted(t)).primitives.length>0}catch{return!0}}preview(e,t,r={}){let o=this.mutation(e.name),i=sn(this.graph,o,e.args,this.sighted(r.author));return this.previewPrimitives(i.primitives,{reads:i.reads,writes:i.writes,intent:i.intent,context:t})}previewAll(e,t={}){let{context:r,...o}=t;return{...this.rehearsal().applying(e,o,r),kept:!1}}rehearsal(){let e=Object.assign(Object.create(n.prototype),this),t=0;return Object.assign(e,{graph:B.from(this.schema,this.graph.snapshot(),{validate:this.validate}),log:en.from(this.log.all(),this.log.epochs(),{horizon:this.log.horizon}),listeners:new Set,labels:void 0,nextId:()=>`${eo}:${++t}`,mintBatch:()=>eo,rehearsing:!0}),e}previewPrimitives(e,t){let r=this.violations(t.context),o=B.from(this.schema,this.graph.snapshot()),i=o.applyPrimitives(e,{restoring:t.restoring===!0}),s=Je(o,this.allInvariants(),this.judging(t.context));return{diff:i,primitives:e,reads:t.reads,writes:t.writes,intent:t.intent,...this.moved(r,s),violationsAfter:s}}apply(e,t={}){return this.applyAll([e],t)}applyAll(e,t={}){return this.applying(e,t)}applying(e,t,r){this.stillNow();let o=t.batch??this.mintBatch("batch"),i=t.author??this.by,s=Gn(t.lineage),a=[],d=[],l=new Set,u=new Set,p=[],c=this.violations(r),f=this.graph.snapshot(),g=this.log.length,h=w=>{let x=this.policy?this.permits(w,i):void 0;x&&!x.ok&&this.refuse(x.refusal,i.id)},v=w=>{let x=this.refusesAgent(w,i)??this.namesTurnedOff(w,i);x&&this.refuse(x,i.id)},y=e.map(Ma);e.forEach((w,x)=>y[x]||h(w)),e.forEach((w,x)=>y[x]||v(w));let S=Mr(i);S&&this.refuseDeclined(e,i),this.rehearsing||Rt(i.id);let A=[];try{for(let[w,x]of e.entries()){let b=y[w]?Na(x,A,w):x;y[w]&&(h(b),v(b));let $=this.mutation(b.name),R=this.missingFor(b,i);if(R)throw R;let _;try{_=sn(this.graph,$,b.args,this.sighted(i))}catch(E){throw E instanceof xe&&!this.rehearsing&&Ca({mutation:E.mutation,message:E.issues.map(D=>`${D.path.map(String).join(".")}: ${D.message}`).join("; ")},i.id),E}if(S){let E=Ws(this.schema,this.graph,_.primitives,this.authorName(i),{declaration:!this.suggesting});E&&this.refuse({mutation:b.name,message:E,wouldNeed:[]},i.id)}if(_.primitives.length===0)continue;A[w]=_.primitives.find(E=>E.op==="add-node")?.node.id;let P={id:this.nextId(),seq:this.log.length,batch:o,author:i,intent:$.describe!==void 0?_.intent:t.intent??_.intent,...L("batchIntent",t.intent),mutation:b,primitives:_.primitives.map(zn),inverse:[..._.primitives].reverse().map(zn).map(Mn),reads:_.reads,writes:_.writes,...$.describe!==void 0&&_.described&&_.described.length>0?{described:_.described}:{},...L("mergedInto",_.mergedInto),at:this.now(),...L("via",t.via),...L("lineage",s)};this.graph.applyPrimitives(P.primitives),this.log.append(P),a.push(P),d.push(...P.primitives);for(let E of P.reads)l.add(E);for(let E of P.writes)u.add(E);p.push(P.intent)}}catch(w){throw this.putBack(f,g),w}let m=ye(f,this.graph.snapshot(),d);this.admitted(t,a,d,m,f,g);let k=this.violations(r);return this.notify(m,a),{batch:o,ops:a,diff:m,primitives:d,reads:[...l],writes:[...u],intent:t.intent??p.join("; "),...this.moved(c,k),violationsAfter:k}}receive(e,t={}){this.stillNow();let r=new Set(this.log.all().map(d=>d.id)),o=e.filter(d=>!r.has(d.id));if(o.length===0)return[];let i=this.graph.snapshot(),s=[];if(!t.applied)for(let d of o)try{this.graph.applyPrimitives(d.primitives,{restoring:d.undoes!==void 0})}catch(l){throw this.graph.load(i),new dn(d,l)}let a=this.log.length;for(let[d,l]of o.entries()){let u={...l,seq:a+d};this.log.append(u),s.push(u)}return this.notify(ye(i,this.graph.snapshot(),o.flatMap(d=>d.primitives)),s),s}append(e,t={}){if(this.stillNow(),e.length===0)return[];let r=new Set(this.log.all().map(a=>a.id)),o,i=e.map((a,d)=>{let l=a.primitives.map(zn),u={id:a.id??this.nextId(),seq:this.log.length+d,batch:a.batch??t.batch??(o??=this.mintBatch("batch")),author:a.author,intent:a.intent,...L("batchIntent",a.batchIntent),mutation:a.mutation??null,primitives:l,inverse:a.inverse??[...l].reverse().map(Mn),reads:a.reads??[],writes:a.writes??[...new Set(l.flatMap(Oe))],at:a.at??this.now(),...L("undoes",a.undoes),...L("via",a.via),...L("lineage",Gn(a.lineage))};if(r.has(u.id))throw new N(`Op "${u.id}" (${u.intent}) is already in the log`,"A host-made op needs an id of its own; leave `id` out and the store mints one.");return r.add(u.id),u}),s=this.graph.snapshot();for(let a of i)try{this.graph.applyPrimitives(a.primitives,{restoring:a.undoes!==void 0})}catch(d){throw this.graph.load(s),new dn(a,d)}for(let a of i)this.log.append(a);for(let a of i)Rt(a.author.id);return this.notify(ye(s,this.graph.snapshot(),i.flatMap(a=>a.primitives)),i),i}applyPrimitives(e,t={}){this.stillNow();let r=t.batch??this.mintBatch("batch"),o=t.author??this.by,i=this.violations(),s=this.graph.snapshot(),a=t.intent??"Apply a change",d=Gn(t.lineage),l=e.map(zn),u=[];if(l.length>0){let f={id:this.nextId(),seq:this.log.length,batch:r,author:o,intent:a,mutation:null,primitives:l,inverse:[...l].reverse().map(Mn),reads:[],writes:[...new Set(l.flatMap(Oe))],at:this.now(),...L("via",t.via),...L("lineage",d)};this.graph.applyPrimitives(f.primitives),this.log.append(f),u.push(f),Rt(o.id)}let p=this.violations(),c=ye(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 Fa({schema:this.schema,invariants:this.allInvariants()},this.graph.snapshot(),{invariantOptions:this.invariantOptions})}batches(){return this.log.batches()}canUndo(e){return Tn(this.log,typeof e=="string"?[e]:e)}previewUndo(e,t){let r=this.canUndo(e);if(!r.ok)return{ok:!1,check:r};let o=Ds(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(Ua),...t===void 0?{}:{context:t}})}}undo(e,t={}){return this.undoing(e,t)}undoing(e,t){this.stillNow();let r=typeof e=="string"?[e]:e,o=t.author??this.by,i=(this.policy?.sees?.length??0)>0&&!V(o);if(i){let h=Tn(Zr(Qe(this.log.all(),Fr(this,o)),()=>this.log.epochs()),r);if(!h.ok)throw new Ee(h)}let s=this.canUndo(r);if(!s.ok)throw new Ee(i?{ok:!1,ops:[],blockedBy:[],includeBatches:[],message:"Cannot undo on its own \u2014 a later change you cannot see depends on it, which only somebody who can see it can take back."}:s);let a=t.batch??this.mintBatch("undo"),d=Gn(t.lineage);if(this.policy)for(let h of s.ops){if(!h.mutation)continue;let v=T(h.author).id,y=A=>JSON.stringify(A).includes(JSON.stringify(v)),S=v!==void 0&&v!==T(o).id&&!V(o)&&!y(h.mutation.args)&&y(h.primitives)?{ok:!1,refusal:{mutation:h.mutation.name,wouldNeed:[],message:"it was done as somebody else."}}:this.permits(h.mutation,o);S.ok||this.refuse({...S.refusal,message:`Not permitted to undo "${h.intent}": ${S.refusal.message}`},o.id,!0)}let l=this.graph.snapshot(),u=this.violations(),p=[],c=this.log.length;for(let h of[...s.ops].sort((v,y)=>y.seq-v.seq)){let v={id:this.nextId(),seq:this.log.length,batch:a,author:o,intent:`Undo: ${h.intent}`,...L("batchIntent",t.intent),mutation:null,primitives:h.inverse,inverse:[...h.inverse].reverse().map(Mn),reads:h.reads,writes:h.writes,at:this.now(),undoes:h.id,...L("via",t.via),...L("lineage",d),...L("undoneLineage",h.lineage)};this.graph.applyPrimitives(v.primitives,{restoring:Ua(h)}),this.log.append(v),p.push(v)}let f=ye(l,this.graph.snapshot(),p.flatMap(h=>[...h.primitives]));this.admitted(t,p,p.flatMap(h=>[...h.primitives]),f,l,c);let g=this.violations();return this.notify(f,p),{batch:a,ops:p,diff:f,primitives:p.flatMap(h=>[...h.primitives]),reads:[...new Set(p.flatMap(h=>[...h.reads]))],writes:[...new Set(p.flatMap(h=>[...h.writes]))],intent:t.intent??p.map(h=>h.intent).join("; "),...this.moved(u,g),violationsAfter:g}}authorName(e){return En(e,{graph:this.graph,schema:this.schema})}refuseDeclined(e,t){let r=Vs(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&&ks(e)))for(let r of this.listeners)r(e,t)}rebase(e){this.stillNow();let t=new Set([...e.pending,...e.drop??[]]),r=this.log.all(),o=r.findIndex(h=>t.has(h.batch)),i=r.slice(o<0?r.length:o),s=this.log.horizon+(o<0?r.length:o),a=i.find(h=>!t.has(h.batch));if(a)throw new N(`Cannot rebase: op "${a.id}" (${a.intent}) comes after a pending batch and is neither pending nor dropped`,"While anything is pending, land the server's ops through rebase, so the log stays confirmed ops then pending ones.");let d=this.log.lastEpoch();if(d&&d.seq>s)throw new N(`Cannot rebase across an epoch: one begins at seq ${d.seq}, after pending op "${i[0].id}"`);let l=this.graph.snapshot(),u=[],p=[],c=[];this.quiet++;try{for(let v of[...i].reverse())this.graph.applyPrimitives(v.inverse,{restoring:!0,inPlace:!0});this.log.truncate(s);let h=new Set(this.log.all().map(v=>v.id));for(let v of e.confirmed){if(h.has(v.id))continue;try{this.graph.applyPrimitives(v.primitives,{restoring:v.undoes!==void 0})}catch(S){throw new dn(v,S)}let y={...v,seq:this.log.length};this.log.append(y),h.add(v.id),u.push(y)}for(let v of e.pending){let y=i.filter(S=>S.batch===v);if(y.length!==0)try{p.push(...this.replay(v,y))}catch(S){c.push({batch:v,error:S})}}}catch(h){this.log.truncate(s);for(let v of i)this.log.append(v);throw this.graph.load(l),h}finally{this.quiet--}let f=Ye(l,this.graph.snapshot()),g=[...u,...p];return this.notify(f,g),{diff:f,confirmed:u,pending:p,refused:c}}adopt(e){this.stillNow();let t=new Set(e.drop??[]),r=(e.pending??[]).filter(f=>!t.has(f)),o=this.log.all(),i=this.graph.snapshot(),s={ops:[...o],epochs:[...this.log.epochs()],horizon:this.log.horizon},a=new Set(o.map(f=>f.id)),d=new Map(r.map(f=>[f,o.filter(g=>g.batch===f)]));if(e.log.length>0)this.log.replace(e.log,e.epochs,L("horizon",e.horizon));else{let f=e.horizon??0;this.log.replace([],e.epochs??[{seq:f,base:e.snapshot}],{horizon:f})}let l=[],u=[];this.quiet++;try{this.graph.load(e.snapshot),this.projected=void 0,this.countPastTheLog();for(let f of r){let g=d.get(f)??[];if(g.length!==0)try{l.push(...this.replay(f,g))}catch(h){u.push({batch:f,error:h})}}}catch(f){throw this.log.replace(s.ops,s.epochs,{horizon:s.horizon}),this.graph.load(i),this.projected=void 0,f}finally{this.quiet--}let p=this.log.all().filter(f=>!a.has(f.id)&&!l.includes(f)),c=Ye(i,this.graph.snapshot());return this.notify(c,[...p,...l]),{diff:c,adopted:p,pending:l,refused:u}}replay(e,t){let r=t[0],o={author:r.author,batch:e,...L("intent",r.batchIntent),...L("via",r.via),...L("lineage",r.lineage)};if(r.undoes!==void 0){let i=t.map(a=>this.log.get(a.undoes??"")),s=t.find((a,d)=>i[d]===void 0);if(s)throw new N(`What "${s.intent}" took back is no longer in the log`);return this.undoing([...new Set(i.map(a=>a.batch))],o).ops}return t.every(i=>i.mutation!==null)?this.applying(t.map(i=>i.mutation),o).ops:this.append(t.map(({seq:i,...s})=>s))}snapshot(){return this.graph.snapshot()}verify(){let e=this.log.lastEpoch();return la(this.schema,this.log.opsFrom(e?.seq??0),this.graph.snapshot(),{validate:this.validate,...e?{base:e.base}:{}})}checkpoint(e={}){let t=this.log.all(),r;if(e.seq!==void 0)r=e.seq;else{let a=this.log.length-(e.keepOps??1e3),l=Date.parse(e.now??this.now())-(e.keepDays??90)*864e5,u=t.find(c=>Date.parse(c.at)>l),p=u?u.seq:this.log.length;r=Math.min(a,p)}for(r=Math.min(Math.max(r,this.log.horizon),this.log.length);r>this.log.horizon&&r<this.log.length&&t[r-this.log.horizon].batch===t[r-1-this.log.horizon].batch;)r--;if(r<=this.log.horizon)return;let o=this.verify();if(!o.ok)throw new N(`Cannot compact a store that does not verify: ${o.reason}`);let i=this.log.checkpointAt(this.schema,r,{validate:this.validate}),s=Xs(this.log,r);return Object.keys(s).length>0?{...i,creators:s}:i}compact(e){return this.stillNow(),this.log.compact(e)}};var cl=n=>`lens:${n}`,ul={hidden:[],removed:[],may:{views:!1,lenses:!1}};function ll(n,e,t){return n.name!==void 0&&e.may.views?"view":n.declared&&e.may.lenses&&t.lens?"lens":null}var qa=["full","summary","glyph"],oo=(n,e)=>n.as===e.as&&(n.over??[n.kind]).includes(e.kind),fl=n=>n.filter((e,t)=>!n.slice(0,t).some(r=>oo(r,e)));function fe(n){return n.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function Un(n,e){return`/${fe(n.tryDefinition(e)?.plural??`${e}s`)}`}function pl(n,e,t){return`${Un(n,e)}/${encodeURIComponent(t)}`}function hl(n,e){return`/places/${encodeURIComponent(n)}${e?`?of=${encodeURIComponent(e)}`:""}`}function Ha(n,e){return e.some(t=>t.as===n.as&&!oo(n,t))}function gl(n,e,t){return Ha(n,e)?`${n.title} \xB7 ${(t.tryDefinition(n.kind)?.plural??`${n.kind}s`).toLowerCase()}`:n.title}var Ne=(n,e,t="")=>`${n}|${e.cardinality}|${e.fidelity}|${t}`;function ro(n){switch(n){case"full":return["full","summary","glyph"];case"summary":return["summary","full","glyph"];case"glyph":return["glyph","summary","full"]}}function ml(n){let e=new Map,t=[],r=[],o,i,s={arrange(a){return a!==void 0&&(o=a),s},arrangement:()=>o,home(a){return a!==void 0&&(i=a),s},homeView:()=>i,register(a,d,l,u){let p={...u?.over?.[1]?{over:u.over}:{},...u?.hidden?{hidden:!0}:{},...u?.name?{name:u.name}:{},...u?.declared?{declared:!0}:{}},c={kind:a,cardinality:d.cardinality,fidelity:d.fidelity,view:l,...u?.title?{title:u.title}:{},...u?.across?{across:u.across}:{},...u?.beside?{beside:!0}:{},...p};if(r.push(c),!u?.beside&&!p.hidden&&e.set(Ne(a,d),c),u?.title){let f=fe(u.title);e.set(Ne(a,d,f),c),d.cardinality==="many"&&!t.some(g=>g.kind===a&&g.as===f)&&t.push({kind:a,title:u.title,as:f,...u.across?{across:u.across}:{},...p,...u.lens?{lens:u.lens}:{},...u.reads?.length?{reads:u.reads}:{}})}return s},places:()=>t,forget(a,d){for(let u of qa)e.delete(Ne(a,{cardinality:"many",fidelity:u},d));let l=t.findIndex(u=>u.kind===a&&u.as===d);return l>=0&&t.splice(l,1),s},lookup(a,d){return e.get(Ne(a,d))?.view},resolve(a,d,l){if(l)for(let u of ro(d.fidelity)){let p=e.get(Ne(a,{cardinality:d.cardinality,fidelity:u},l));if(p)return p}for(let u of ro(d.fidelity)){let p=e.get(Ne(a,{cardinality:d.cardinality,fidelity:u}));if(p)return p}if(d.cardinality==="one")for(let u of ro(d.fidelity)){let p=e.get(Ne(a,{cardinality:"many",fidelity:u}));if(p)return p}},registrations:()=>r,all(){return[...e.values()]},kindsWithViews(){return[...new Set([...e.values()].map(a=>a.kind))]}};return s}var yl=["day","week","month","year","decade"];function Ya(n){let e={};n.q&&n.q.trim().length>0&&(e.query=n.q);let t=kr(n.archived);if(t&&(e.archived=t),n.sort){let[r,o]=n.sort.split(":");r&&(e.sort={by:r,direction:o==="desc"?"desc":"asc"})}if(n.filter){let r=[];for(let o of n.filter.split(",")){let i=o.indexOf(":");i<=0||r.push({key:o.slice(0,i),value:o.slice(i+1)})}r.length>0&&(e.filter=r)}if(n.group){let[r,o]=n.group.split(":");r&&(e.group={by:r,...yl.includes(o)?{bucket:o}:{}})}return e}function io(n){if(typeof n=="string"&&n.length>0)return{by:n,direction:"asc"};if(typeof n!="object"||n===null)return;let{by:e,direction:t}=n;if(!(typeof e!="string"||e.length===0))return{by:e,direction:t==="desc"?"desc":"asc"}}function Ot(n,e,t){let r=io(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 bl(n,e,t){let r=io(e);if(!r)return n;let o=r.direction==="desc"?-1:1;return n.map((i,s)=>({item:i,at:s,value:t(i,r.by)})).sort((i,s)=>{let a=(i.value===void 0||i.value===null||i.value===""?1:0)-(s.value===void 0||s.value===null||s.value===""?1:0);if(a!==0)return a;if(i.value===s.value||i.value===void 0||i.value===null)return i.at-s.at;let d=typeof i.value=="number"&&typeof s.value=="number"?i.value-s.value:String(i.value).localeCompare(String(s.value),void 0,{numeric:!0});return d===0?i.at-s.at:d*o}).map(i=>i.item)}var Bn={timeline:{binds:"fields",requiredRoles:["start","end"],options:["columns","extent","tick","minWindow","arranging"]},calendar:{binds:"fields",requiredRoles:["start"],options:["today","range","weekStartsOn","perCell","horizon","arranging","search","filters"]},coverage:{binds:"entities",requiredRoles:["rows","columns","link"],options:["rowRef","rowGroup","groupOrder","requiredGroups","requiredVia","badge","columnGroup","sort","columnSort","search","filters"]},board:{binds:"entities",requiredRoles:["slots","x","y","fill"],options:["fillFrom","slotCode","zones","aspect","emptyLabel","pickTarget","arranging","arrange"]},plan:{binds:"entities",requiredRoles:["regions","outline"],options:["hues","aspect","undrawnLabel","strayLabel","draw","place","help"]},reach:{binds:"nothing",requiredRoles:[],options:[]},blocks:{binds:"nothing",requiredRoles:[],options:["blocks"]},columns:{binds:"fields",requiredRoles:["column"],options:["sort","search","filters","move","collapsed","cap","hidden"]}},vl=20,Xa=Object.keys(Bn),xl=(n,e,t,r=Bn[n].options)=>({message:`The ${n} lens takes no option "${e}", so "${t}" ignores it.`,fix:r.length?`Use one of: ${r.join(", ")}.`:`The ${n} lens takes no options; drop it.`}),Qa=n=>Object.hasOwn(Bn,n);function so(n,e,t){let r=n[e],o=Array.isArray(r)?r.filter(i=>typeof i=="string"&&t(i)):[];o.length>0?n[e]=o:delete n[e]}var cn=n=>typeof n=="object"&&n!==null&&!Array.isArray(n);function Ja(n,e,t){let r=n.tryDefinition(e)?.fields.shape,o=I(r?.[t]);for(;o&&(o.type==="optional"||o.type==="default"||o.type==="nullable"||o.type==="prefault");)o=I(o.innerType);return o?.type!=="enum"?[]:(o.entries?Object.values(o.entries):o.values??[]).filter(s=>typeof s=="string")}function wl(n){let e=[],t=[],r=[],o=new Set(n.schema.kinds),i=new Set;for(let d of o)for(let l of Object.keys(n.schema.tryDefinition(d)?.edges??{}))i.add(l);let s=d=>Object.keys(n.schema.tryDefinition(d)?.fields.shape??{}),a=new Map;return(n.lenses??[]).forEach((d,l)=>{let u=`lenses.${l}`,p=typeof d.title=="string"&&d.title.trim().length>0?d.title.trim():void 0,c=(x,b)=>{t.push({index:l,name:d.name,...p?{title:p}:{},why:x}),b&&r.push({severity:"warning",...b})};if(!Qa(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 ${Xa.join(", ")} \u2014 or register the view yourself and drop the title.`}):c("it is a lens this app wrote, drawn by the app's own views");return}if(!p)return c("it has no title, so it is bindings the checker holds and no place");let f=Bn[d.name],g=cn(d.options)?d.options:{};if(d.options!==void 0&&!cn(d.options))return c("its options are not an object",{code:"lens-options-not-an-object",path:`${u}.options`,message:`"${p}" has options that are not an object.`,fix:'Write them as { "<option>": <value> }, or drop them.'});for(let x of Object.keys(g))f.options.includes(x)||r.push({severity:"warning",code:"lens-option-unknown",path:`${u}.options.${x}`,...xl(d.name,x,p,f.options)});let h={};for(let x of f.options)g[x]!==void 0&&(h[x]=g[x]);d.arrangedBy&&(h.arrangedBy=Ya(d.arrangedBy));let v=cn(d.bindings)?d.bindings:{},y=[],S,A=(x,b,$)=>c(b,{code:"lens-cannot-draw",path:x,message:`"${p}" cannot draw: ${b}.`,fix:$});if(f.binds==="fields"){let x=Object.keys(v).filter($=>cn(v[$])),b=x.filter($=>!o.has($));if(x.length===0)return A(`${u}.bindings`,"it binds no kind",`Bind a kind's fields: "bindings": { "<kind>": { ${f.requiredRoles.map($=>`"${$}": "<field>"`).join(", ")} } }.`);if(b.length>0)return;if(h.bindings=v,y=x,d.name==="timeline"){let $=g.columns;if(Array.isArray($))h.columns=$.map(R=>typeof R=="string"?{id:R,label:R}:R);else{let R=x.flatMap(P=>{let E=v[P],D=typeof E.column=="string"?E.column:typeof E.columns=="string"?E.columns:void 0;return D?Ja(n.schema,P,D):[]}),_=[...new Set(R)];if(_.length===0)return A(`${u}.options.columns`,"it has no columns \u2014 no option names them and no `column` role is bound to a field of set values",'Bind "column" to a field whose values are the columns, or say "columns": ["mon", "tue", \u2026].');h.columns=_.map(P=>({id:P,label:P.toUpperCase()}))}h.extent===void 0&&(h.extent=1440)}if(d.name==="columns"){if(h.sort!==void 0){let R=x.map(_=>Ot(h.sort,s(_),_)).find(Boolean);R&&(r.push({severity:"warning",code:"lens-sort",path:`${u}.options.sort`,message:`"${p}" cannot order its cards: ${R}.`,fix:'Write { "by": "<a field>", "direction": "asc" }, or drop it.'}),delete h.sort)}let $=new Set;for(let R of x){let _=v[R].column;if(typeof _!="string"||!s(R).includes(_))return;let P=Ja(n.schema,R,_);if(P.length===0)return A(`${u}.bindings.${R}.column`,`its column field "${_}" is not a choice`,`Bind "column" to a choice field of ${R}, like a status.`);for(let E of P)$.add(E)}typeof h.move!="boolean"&&delete h.move,Number.isInteger(h.cap)&&h.cap>=1&&h.cap<=500||delete h.cap;for(let R of["collapsed","hidden"])so(h,R,_=>$.has(_))}if(d.name==="calendar"&&h.today!==void 0&&!(typeof h.today=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(h.today)))return A(`${u}.options.today`,"its today is not a date",'Write it as "YYYY-MM-DD", or leave it out and the calendar opens on the day it is drawn.');if(d.name==="calendar"&&h.horizon!==void 0){let $=h.horizon,R=E=>E===void 0||Number.isInteger(E)&&E>=1&&E<=9999,_=typeof $=="number"?{years:$,title:"Years"}:$;cn(_)&&Number.isInteger(_.years)&&_.years>=1&&_.years<=200&&typeof _.title=="string"&&_.title.trim().length>0&&R(_.from)&&R(_.to)&&Object.keys(_).every(E=>["years","title","from","to"].includes(E))&&!(typeof _.from=="number"&&typeof _.to=="number"&&_.to<_.from)?h.horizon=_:(delete h.horizon,r.push({severity:"warning",code:"lens-horizon",path:`${u}.options.horizon`,message:`"${p}" has a horizon that is not a span of years, so it offers no span of years.`,fix:'Write { "years": 30, "title": "The career" } \u2014 "from" and "to" (years, like 1962 and 2023) only to pin its ends, which otherwise reach the first and last of its records.'}))}if(d.name==="calendar"&&h.range!==void 0&&!["day","week","month","quarter","year","years","agenda"].includes(h.range))return A(`${u}.options.range`,`its range "${String(h.range)}" is not one a calendar opens at`,"Use one of: day, week, month, quarter, year, agenda.")}else if(f.binds==="entities"){let x=R=>{let _=v[R];if(cn(_)){if(typeof _.kind=="string")return _.kind;if(typeof _.edge=="string")return _.edge;if(Array.isArray(_.path))return{path:_.path};if(typeof _.field=="string")return _.field}};for(let R of f.requiredRoles)if(x(R)===void 0)return;let b=d.name==="coverage"?"rows":d.name==="board"?"slots":"regions",$=x(b);if(!o.has($))return;if(d.name==="coverage"){let R=x("columns");if(!o.has(R))return;let _=x("link");if(typeof _=="string"&&!i.has(_))return;Object.assign(h,{rows:$,columns:R,link:_}),R!==$&&(S=R);for(let[P,E]of[["sort",$],["columnSort",R]]){if(h[P]===void 0)continue;let D=Ot(h[P],s(E),E);D&&(r.push({severity:"warning",code:"lens-sort",path:`${u}.options.${P}`,message:`"${p}" cannot order its ${P==="sort"?"rows":"columns"}: ${D}.`,fix:`Write { "by": "<a field of ${E}>", "direction": "asc" }, or drop it.`}),delete h[P])}}else if(d.name==="board"){Object.assign(h,{slots:$,x:x("x"),y:x("y"),fill:x("fill")});for(let R of["x","y"])if(!s($).includes(h[R]))return}else{Object.assign(h,{regions:$,outline:x("outline")});for(let R of["markers","at","within","nests","regionKind","markerKind"]){let _=x(R);typeof _=="string"&&(h[R]=_)}}y=[$]}else if(d.name==="blocks"){if(!d.on)return A(`${u}.on`,"it does not say which kind it stands on",'Say "on": "<the kind it is a place of>".');if(!Array.isArray(h.blocks)||h.blocks.length===0)return A(`${u}.options.blocks`,"it has no blocks to draw",`Say "options": { "blocks": [{ "headline": "\u2026" }, { "list": "all('<kind>')", "as": "card" }] }.`)}else{let x=["user","person","member"].find(b=>o.has(b));if(!d.on&&!x)return A(`${u}.on`,"it does not say which kind it stands on",'Say "on": "<the kind whose records are the people>".');y=x?[x]:[]}if(d.on!==void 0){if(typeof d.on!="string"||!o.has(d.on))return A(`${u}.on`,`it stands on "${String(d.on)}", which is not a kind`,`Use one of: ${[...o].join(", ")}.`);if(y=[d.on],d.name==="coverage"){let x=[h.rows,h.columns].find(b=>b!==d.on);S=typeof x=="string"?x:void 0}}let m=typeof h.rows=="string"?h.rows:y[0];if(m!==void 0){let x=["label",...s(m)],b=new Set(["is",...x,...Object.keys(n.schema.tryDefinition(m)?.edges??{})]);so(h,"search",$=>x.includes($)),so(h,"filters",$=>b.has($.split(".")[0]))}let k=fe(p);if(k.length===0)return A(`${u}.title`,"its title has no letters or digits to make an address of","Give it a title a person would say.");for(let x of y){let b=`${x}|${k}`;if(a.has(b))return c(`another lens on ${x} is already called "${p}"`,{code:"lens-title-taken",path:`${u}.title`,message:`"${p}" is the title of lenses.${a.get(b)} too, on the same kind, so one address would name two pictures.`,fix:"Give each its own title."})}for(let x of y)a.set(`${x}|${k}`,l);let w=d.create;w!==void 0&&typeof w!="boolean"&&r.push({severity:"warning",code:"lens-create",path:`${u}.create`,message:`"${p}" says create ${JSON.stringify(w)}, which is neither true nor false, so its page keeps the forms that begin its kind.`,fix:'Say "create": false to leave them off, or drop it.'}),e.push({index:l,lens:d.name,title:p,as:k,kinds:y,...S?{across:S}:{},options:h,...d.hidden===!0?{hidden:!0}:{},...w===!1?{create:!1}:{}})}),{drawn:e,undrawn:t,findings:r}}var kl=6;function Sl(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 $l(n,e,t){if(!n?.primary)return;let r=new Set(n.primary.map(fe));return{kinds:new Set(e.kinds.filter(o=>r.has(fe(o))||r.has(Un(e,o).slice(1)))),places:new Set(t.filter(o=>r.has(o.as)||r.has(fe(o.title))).map(o=>`${o.kind}|${o.as}`))}}var ed="overview",Rl=`/places/${ed}`;function _l(n){let e=n?.scene?.trim();return e||"Scene"}function Al(n){let e=n?.pages?.trim();return e||"Pages"}function Ol(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 El(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=fe(r),i=t.find(d=>d.title===r)??t.find(d=>d.as===o);if(i)return{to:"place",place:i};let s=e.kinds,a=s.find(d=>d===r)??s.find(d=>Un(e,d).slice(1)===o);return a?{to:"kind",kind:a}:void 0}function ao(n){let e=(n??"").replace(/\/+$/,"");return e===""?"":e.startsWith("/")?e:`/${e}`}function Pl(n,e={}){let t=typeof n=="string"?n:n.address,r=ao(e.basePath),o=t.startsWith("/")?t:`/${t}`;return r===""?o:o==="/"?r:o.startsWith("/?")||o.startsWith("/#")?`${r}${o.slice(1)}`:`${r}${o}`}function zl(n,e){let t=ao(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 nd=Symbol.for("@graview/core:app-link"),Ml=n=>(Object.defineProperty(I(n),nd,{value:1,enumerable:!0}),n);function td(n){let e=I(n);return!!e&&(e[nd]===1||td(e.innerType))}var _x=()=>Ml(Z().check(hr(500),Sn(at,"another app's address")));var Et=(n,e)=>`${e.kind}\0${e.id??""}\0${n.address}\0${n.kind}\0${n.id}`;function Nl(n,e,t=()=>{}){let r=new Map,o=new Map,i=s=>{let a=Et(s,e),d=r.get(a);return d||(d=Promise.resolve().then(()=>n.resolve(s,e)).then(l=>Il(l)?l:null,()=>null).then(l=>(r.get(a)===d&&(o.set(a,l),t(s)),l)),r.set(a,d)),d};return{read(s){let a=Et(s,e);if(o.has(a)){let d=o.get(a);return d===null?{unread:!0}:"denied"in d?{denied:!0}:{record:d}}return i(s),{unread:!0}},ask:i,answered:s=>o.get(Et(s,e)),forget(s){if(!s){r.clear(),o.clear();return}let a=Et(s,e);r.delete(a),o.delete(a)}}}function Il(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 jl=1;var Pt=(n,e)=>`${n}\0${e}`;function uo(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 co=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 uo(r)){let s=Pt(o,i);(this.revs.get(s)??-1)<t.seq&&this.revs.set(s,t.seq)}}of(e,t){return this.revs.get(Pt(e,t))??-1}baseFor(e,t=new Set){let r=new Set,o=new Map;for(let i of e)for(let s of i.primitives)if(s.op==="add-node"&&r.add(s.node.id),!(s.op!=="patch-node"||r.has(s.id)||t.has(s.id)))for(let a of Object.keys(s.after)){let d=Pt(s.id,a);t.has(d)||o.has(d)||o.set(d,{node:s.id,field:a,rev:this.of(s.id,a)})}return[...o.values()]}stale(e){return e.filter(t=>this.of(t.node,t.field)!==t.rev)}};function Tl(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 uo(r))e.add(Pt(o,i))}return e}var Dl=/^#([0-9a-f]{3,8})$/i,Fl=/(rgba?|hsla?)\(([^)]+)\)/gi;function Zl(n){let e=Dl.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 Ll(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:{...od(o,i>1?i/100:i,s>1?s/100:s),a:a??1}}function fo(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 po(n,e,t){return{...od(n,e,t),a:1}}function od(n,e,t){let r=(1-Math.abs(2*t-1))*e,o=(n%360+360)%360/60,i=r*(1-Math.abs(o%2-1)),[s,a,d]=o<1?[r,i,0]:o<2?[i,r,0]:o<3?[0,r,i]:o<4?[0,i,r]:o<5?[i,0,r]:[r,0,i],l=t-r/2;return{r:Math.round((s+l)*255),g:Math.round((a+l)*255),b:Math.round((d+l)*255)}}function un(n){let e=[];for(let t of n.matchAll(Fl)){let r=Ll(t[0]);r&&e.push(r)}for(let t of n.matchAll(/#[0-9a-fA-F]{3,8}\b/g)){let r=Zl(t[0]);r&&e.push(r)}return e}function ho(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 lo(n){let e=n/255;return e<=.03928?e/12.92:((e+.055)/1.055)**2.4}function rd(n){return .2126*lo(n.r)+.7152*lo(n.g)+.0722*lo(n.b)}function ln(n,e){let[t,r]=[rd(n),rd(e)].sort((o,i)=>i-o);return(t+.05)/(r+.05)}var zt=(n,e)=>`rgba(${Math.round(n.r)}, ${Math.round(n.g)}, ${Math.round(n.b)}, ${e})`,id={r:0,g:0,b:0,a:1},Mt={r:255,g:255,b:255,a:1};function Nt(n){let e=un(n.accent)[0];if(!e)return{ok:!1,missing:["accent"],why:`"${n.accent}" is not a color this can read. Use a hex, rgb() or hsl() value.`};let t={},r=new Set,o=[],i=fo(e);for(let s of["dark","light"]){let a=n.base[s],d=un(a.ground)[0]??(s==="dark"?id:Mt),l=ho(un(a.panel)[0]??Mt,d),u=Ul(i,[l,d],s,4.5);u?Math.abs(u.l-i.l)>Kl&&(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=po(p.h,p.s,p.l),f=n.accentInk?.[s]??(ln(Mt,c)>=ln(id,c)?"#ffffff":"#000000"),g=ln(un(f)[0]??Mt,c);g+.005<4.5&&(r.add(`accentInk (${s})`),o.push(`neither black nor white clears 4.5:1 on the accent (best ${g.toFixed(2)}:1), so text on a filled button has to be given`)),t[s]={...a,accent:zt(c,1),accentDim:zt(c,s==="dark"?.35:.22),accentInk:f,glow:zt(c,s==="dark"?.28:.1),edgeBright:zt(c,Cl(c,l,s==="dark"?.55:.42,3)),...n.warn?.[s]?{warn:n.warn[s]}:{}};let h=un(t[s].warn)[0];h&&Gl(fo(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 Cl(n,e,t,r){for(let o=Math.round(t*100);o<=100;o++){let i=o/100;if(ln(ho({...n,a:i},e),e)>=r)return i}return 1}function Gl(n,e){let t=Math.abs(n-e)%360;return t>180?360-t:t}var Kl=.3;function Ul(n,e,t,r){let o=t==="dark";for(let i=0;i<=100;i++){let s=o?n.l+i/100:n.l-i/100,a=o?n.l-i/100:n.l+i/100;for(let d of[s,a])if(!(d<0||d>1)&&e.every(l=>ln(po(n.h,n.s,d),l)>=r))return{...n,l:d}}return null}function Bl(n,e){let t=e?.[n];if(t!==void 0)return(t%360+360)%360;let r=2166136261;for(let o=0;o<n.length;o++)r^=n.charCodeAt(o),r=Math.imul(r,16777619);return(r>>>0)%360}var Ie=Object.freeze({navy:"#001769",turquoise:"#00e5b9",paper:"#f7f7f2",ink:"#18213a",muted:"#586174"}),go="Montserrat",mo=Object.freeze({display:550,body:450,label:600}),yo=Object.freeze({display:600,body:400,label:600}),Vl="-0.025em",Wl=Object.freeze({minWidth:140,clearSpace:.5,microMax:24,regularMin:32,microBelow:28});var sd={ground:"#0a0f1f",groundDeep:"#060914",wash:"none",panel:"rgba(19, 27, 52, 0.96)",panelMuted:"rgba(14, 21, 42, 0.94)",panelWarning:"rgba(48, 33, 18, 0.95)",edge:"rgba(164, 178, 222, 0.18)",edgeBright:"rgba(154, 171, 255, 0.6)",ink:"#eef0f6",inkMuted:"#aab2c6",inkFaint:"#97a0b6",accent:"#9aabff",accentDim:"rgba(154, 171, 255, 0.32)",accentInk:Ie.navy,warn:"#f0a868",good:"#8fdcaa",bad:"#ffa3a3",glow:"rgba(154, 171, 255, 0.18)",bar:"rgba(10, 15, 31, 0.96)",float:"rgba(16, 23, 45, 0.98)",liftLow:"0 14px 36px -22px #000",liftHigh:"0 28px 64px -30px #000",tintAlpha:.2,tintLightness:52,gridAlpha:.35},ad={ground:Ie.paper,groundDeep:"#efefe8",wash:"none",panel:"#ffffff",panelMuted:"#fafaf6",panelWarning:"#fdf4ea",edge:"rgba(24, 33, 58, 0.12)",edgeBright:"rgba(0, 23, 105, 0.6)",ink:Ie.ink,inkMuted:Ie.muted,inkFaint:"#626b7d",accent:Ie.navy,accentDim:"rgba(0, 23, 105, 0.16)",accentInk:"#ffffff",warn:"#9a5312",good:"#1b6436",bad:"#a1232d",glow:"rgba(0, 23, 105, 0.08)",bar:"rgba(255, 255, 255, 0.96)",float:"#ffffff",liftLow:"0 1px 2px rgba(24,33,58,0.06), 0 8px 24px -12px rgba(24,33,58,0.16)",liftHigh:"0 2px 6px rgba(24,33,58,0.08), 0 24px 56px -24px rgba(24,33,58,0.26)",tintAlpha:.16,tintLightness:46,gridAlpha:.5},fn={dark:sd,light:ad};var Se=Object.freeze({radius:8,density:1,radiusSmall:.72,radiusSmallFloor:2,pad:15,padSmall:10,gap:7}),je=Object.freeze({body:`"${go}", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif`,mono:'ui-monospace, SFMono-Regular, "SF Mono", Menlo, monospace'});function ql(n){let e=n?.shape?.radius??Se.radius,t=n?.shape?.density??Se.density;return Object.freeze({radius:e,radiusSmall:Math.max(Se.radiusSmallFloor,Math.round(e*Se.radiusSmall)),pad:Math.round(Se.pad*t),padSmall:Math.round(Se.padSmall*t),gap:Math.round(Se.gap*t)})}function Hl(n){let e=n?.typography?.body??je.body,t=n?.typography?.display??e,o=e===je.body&&t===je.body?mo:yo,i=n?.typography?.weights;return Object.freeze({body:e,display:t,mono:n?.typography?.mono??je.mono,weights:Object.freeze({display:i?.display??o.display,body:i?.body??o.body,label:i?.label??o.label})})}var Lx=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 cd(n){return/^\s*(<\?xml[^>]*>\s*)?(<!--[\s\S]*?-->\s*)*(<!DOCTYPE svg[^>]*>\s*)?<svg[\s>/]/i.test(n)}var ud="http://www.w3.org/2000/svg",Yl=["http://www.w3.org/1999/xhtml","http://www.w3.org/1998/Math/MathML",ud],Jl=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(" ")),Xl=new Set(["title","desc"]),Vn="it embeds a page or media",Ql={script:"it has a script in it",foreignobject:"it embeds HTML (foreignObject)",iframe:Vn,embed:Vn,object:Vn,audio:Vn,video:Vn,style:"it has a style sheet in it; a mark is styled by its attributes",a:"it links to something (an <a> element)"},ef={amp:"&",lt:"<",gt:">",quot:'"',apos:"'"};function nf(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=ef[o.toLowerCase()];return i===void 0&&(e=!0),i??""});return e?null:t}function tf(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 rf(n,e,t){let r=nf(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===ud?null:"it changes what its elements are (another xmlns)";if(e.startsWith("xmlns:"))return Yl.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 tf(r)?null:o==="style"?"its style loads something outside itself":"it loads or links to something outside itself"}var dd=/^\s+([A-Za-z_][A-Za-z0-9_.:-]*)\s*=\s*(?:"([^"<]*)"|'([^'<]*)')/;function ld(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=Ql[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(!Jl.has(d))return`it has a <${d}> element, which a picture does not need`;let u=e[e.length-1];if(u&&Xl.has(u))return`it has an element inside a <${u}>, which the page reads as HTML`;let p=a[0].length;for(let f=dd.exec(o.slice(p));f;f=dd.exec(o.slice(p))){let g=rf(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 fd(n){if(n){if(!cd(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 ld(n)===null?`data:image/svg+xml,${encodeURIComponent(n.trim())}`:void 0}}var It;function of(){if(It===void 0)try{It=new RegExp("^\\p{RGI_Emoji}$","v")}catch{It=null}return It}function sf(n){return/\p{Extended_Pictographic}|\p{Regional_Indicator}|⃣/u.test(n)}function bo(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(sf).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=of();return r&&!r.test(n)?"it is not one of the standard emoji every emoji set draws":null}function vo(n){return typeof n=="object"&&n!==null&&typeof n.emoji=="string"?n.emoji:void 0}function pd(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 af(n){let e=n?.favicon;if(typeof e=="object"&&e!==null){let t=vo(e);return t!==void 0&&bo(t)===null?`data:image/svg+xml,${encodeURIComponent(pd(t))}`:void 0}return fd(e)}function df(n){if(n?.logo)return;let e=vo(n?.favicon);return e!==void 0&&bo(e)===null?e:void 0}var hd={"system-sans":'ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif',"system-serif":'ui-serif, "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, Cambria, "Times New Roman", serif',"system-mono":je.mono},cf=["serif","sans-serif","monospace","cursive","fantasy","system-ui","math","emoji","-apple-system","BlinkMacSystemFont"],gd=["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 uf=n=>new Set(n.map(e=>e.toLowerCase()));function lf(n){return uf([...cf,...gd]).has(n.toLowerCase())||n.toLowerCase().startsWith("ui-")}function ff(n){return hd[n]??n}function Wx(n){let e=Nt({accent:n,base:fn});return e.ok||!e.missing.every(t=>t.startsWith("warn"))?e:Nt({accent:n,base:fn,warn:{light:fn.light.bad,dark:fn.dark.bad}})}function pf(n,e,t){if(t.rows===0)return;let r=Q(n,e.rows).toLowerCase(),o=Q(n,e.columns).toLowerCase(),i=e.rows===e.columns,s=i?`link ${r} to each other`:`link ${r} to ${o}`;if(t.columns===0)return`No ${o} yet: ${s}.`;if(t.cells>0||typeof e.link=="object"&&e.link!==null)return;let a=U(n.tryDefinition(e.rows),e.rows);return i?`No ${a} is linked to another yet: ${s}.`:`No ${a} is linked to ${Ze(U(n.tryDefinition(e.columns),e.columns))} yet: ${s}.`}var oe={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 hf(n){return n?{connectors:{all:{...oe.connectors.all,...n.connectors?.all??{}},byEdge:{...oe.connectors.byEdge,...n.connectors?.byEdge??{}}},captions:{...oe.captions,...n.captions??{}},grid:{...oe.grid,...n.grid??{}},lattice:{...oe.lattice,...n.lattice??{}},tags:{...oe.tags,...n.tags??{}},emphasis:{...oe.emphasis,...n.emphasis??{}},marks:{...oe.marks,...n.marks??{}}}:oe}function gf(n,e){return{...n.connectors.all,...n.connectors.byEdge[e]??{}}}function mf(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 yf(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 bf(n){let e=n.name??"";return e&&n.onBehalfOfName?`${e}, for ${n.onBehalfOfName}`:e}function xo(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 vf(n){return`${n.kind}:${n.id??""}:${n.session??""}`}function xf(n,e,t,r=2500,o){let i=new Map;for(let[s,a]of n)xo(a,t,r)&&i.set(s,a);for(let s of e){if(!xo(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 wf(n,e){return!n||!e?n===e:n.participant===e.participant&&n.kind===e.kind&&n.name===e.name&&n.onBehalfOf===e.onBehalfOf&&n.onBehalfOfName===e.onBehalfOfName&&n.until===e.until&&n.held===e.held&&n.hue===e.hue&&n.stop===e.stop&&(n.over??null)===(e.over??null)&&(n.robot?.at??null)===(e.robot?.at??null)&&(n.robot?.mode??null)===(e.robot?.mode??null)}export{Ge as a,qi as b,Hi as c,pc as d,hr as e,kn as f,Sn as g,Z as h,Ig as i,jg as j,$n as k,Tg as l,Dg as m,Fg as n,gr as o,Zg as p,Ke as q,Ue as r,Lg as s,Cg as t,Gg as u,os as v,is as w,ee as x,it as y,Kg as z,Ug as A,I as B,zc as C,Dt as D,Fe as E,qn as F,kf as G,W as H,md as I,yd as J,Ro as K,Yn as L,bd as M,he as N,Ft as O,_o as P,Zt as Q,wd as R,kd as S,ie as T,Sd as U,$d as V,Rd as W,_d as X,Ad as Y,yn as Z,Eo as _,Ed as $,Ct as aa,F as ba,Pd as ca,C as da,zd as ea,Q as fa,Md as ga,Nd as ha,Xn as ia,Ze as ja,U as ka,Mc as la,st as ma,br as na,ss as oa,as as pa,Nc as qa,Rn as ra,cs as sa,Bm as ta,dt as ua,td as va,_x as wa,Fc as xa,Lc as ya,fs as za,Cc as Aa,Hm as Ba,_n as Ca,Gc as Da,Uc as Ea,Ym as Fa,Jm as Ga,Bc as Ha,hs as Ia,Nl as Ja,ct as Ka,Vc as La,Ve as Ma,On as Na,ut as Oa,ey as Pa,We as Qa,Be as Ra,ws as Sa,Hc as Ta,En as Ua,Ae as Va,oy as Wa,kr as Xa,lt as Ya,Yc as Za,z as _a,Mn as $a,N as ab,B as bb,Qc as cb,ht as db,wy as eb,eu as fb,nu as gb,jl as hb,T as ib,V as jb,be as kb,ve as lb,zy as mb,zs as nb,Xe as ob,j as pb,Qe as qb,Pe as rb,X as sb,su as tb,xe as ub,Lu as vb,Br as wb,ma as xb,sn as yb,jb as zb,Vr as Ab,va as Bb,xa as Cb,Wr as Db,ke as Eb,Kr as Fb,Ln as Gb,Vu as Hb,wa as Ib,qy as Jb,Hy as Kb,qr as Lb,Hr as Mb,Ra as Nb,Ea as Ob,Qu as Pb,kt as Qb,ze as Rb,co as Sb,Tl as Tb,an as Ub,Mr as Vb,Us as Wb,cu as Xb,lu as Yb,Bl as Zb,go as _b,Vl as $b,fn as ac,je as bc,ql as cc,Hl as dc,cd as ec,ld as fc,fd as gc,af as hc,df as ic,lf as jc,ff as kc,Wx as lc,bl as mc,pf as nc,hf as oc,gf as pc,mf as qc,fu as rc,pu as sc,hu as tc,gu as uc,nn as vc,Dn as wc,le as xc,yt as yc,rn as zc,Fn as Ac,Fr as Bc,Zn as Cc,mu as Dc,yu as Ec,yf as Fc,ol as Gc,fa as Hc,il as Ic,Wa as Jc,dn as Kc,to as Lc,cl as Mc,ul as Nc,ll as Oc,qa as Pc,oo as Qc,fl as Rc,fe as Sc,Un as Tc,pl as Uc,hl as Vc,Ha as Wc,gl as Xc,ml as Yc,Ya as Zc,Bn as _c,vl as $c,Xa as ad,Qa as bd,wl as cd,kl as dd,Sl as ed,$l as fd,ed as gd,Rl as hd,_l as id,Al as jd,Ol as kd,El as ld,ao as md,Pl as nd,zl as od,bf as pd,vf as qd,xf as rd,wf as sd};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var __graviewPreload=(base,files)=>{if(typeof document>"u")return;const asked=globalThis.__graviewPreloaded??=new Set;for(const file of files){const href=new URL(file,base).href;if(asked.has(href))continue;asked.add(href);const link=document.createElement("link");link.rel="modulepreload";link.href=href;document.head.append(link)}};import{a as y}from"./chunk.
|
|
1
|
+
var __graviewPreload=(base,files)=>{if(typeof document>"u")return;const asked=globalThis.__graviewPreloaded??=new Set;for(const file of files){const href=new URL(file,base).href;if(asked.has(href))continue;asked.add(href);const link=document.createElement("link");link.rel="modulepreload";link.href=href;document.head.append(link)}};import{a as y}from"./chunk.UIUHGA6W.js";import{D as v,G as I,R as h,_ as w}from"./chunk.BTSXYZ6Z.js";import{Ua as g}from"./chunk.5ZMENPY4.js";import{b as d}from"./chunk.AJZBJBMO.js";var k=d(I(),1);var t=d(h(),1),r={display:"inline-flex",alignItems:"center",minHeight:24,minWidth:24,padding:"1px 8px",fontSize:"0.75rem"};function E({shows:e,onShows:i,mine:a,onMine:l}){let o={all:"All",changes:"Changes",ai:"AI"};return(0,t.jsxs)("div",{"data-testid":"activity-filter",role:"group","aria-label":"Show",style:{display:"flex",flexWrap:"wrap",gap:4,alignItems:"center"},children:[["all","changes","ai"].map(s=>(0,t.jsx)("button",{type:"button","data-shows":s,"aria-pressed":e===s,onClick:()=>i(s),style:{...r,...e===s?{borderColor:"var(--graview-accent)",color:"var(--graview-ink)"}:{}},children:o[s]},s)),(0,t.jsx)("button",{type:"button","data-testid":"activity-mine","aria-pressed":a,onClick:()=>l(!a),style:{...r,marginLeft:"auto",...a?{borderColor:"var(--graview-accent)",color:"var(--graview-ink)"}:{}},children:"Just mine"})]})}var x=e=>e.ask.kind==="suggest"?"suggest":e.ask.kind==="fill"?"fill in":e.ask.kind==="record"?"add one":e.ask.kind==="panel"?"draw a panel":`answer \u201C${e.ask.said}\u201D`;function $(e){let i=e.offered.filter(a=>e.accepted?.includes(a.id)).map(a=>a.label);switch(e.outcome){case"accepted":return i.length>0?`Took ${i.join(", ")}`:"Taken";case"partly":return`Took ${i.length} of ${e.offered.length}: ${i.join(", ")}`;case"dismissed":return"Dismissed";case"drawn":return e.panel?`Drew \u201C${e.panel.title}\u201D`:"Drew a panel";case"failed":return e.failed??"Failed";default:return"Offered, not yet taken"}}function C(e){let i=[...new Set((e.usage??[]).map(o=>o.model))];if(i.length===0)return null;let a=(e.usage??[]).flatMap(o=>o.costUsd===void 0?[]:[o.costUsd]),l=a.length>0?a.reduce((o,s)=>o+s,0):void 0;return`${i.join(", ")}${l!==void 0?` \xB7 $${l<.01?l.toPrecision(2):l.toFixed(2)}`:""}`}function F({entry:e,undo:i}){let{store:a,principal:l,seats:o,people:s,ai:b}=w(),c=y(),[p,u]=(0,k.useState)(!1),A=e.by.kind==="human"&&e.by.onBehalfOf===void 0&&(e.by.id===void 0||l.id===void 0||e.by.id===l.id)?"you":g(e.by,{graph:a.graph,schema:a.schema,seats:o,people:s}),f=C(e),S=v(b),m=n=>{u(!0),(__graviewPreload(import.meta.url,["./chunk.RM7NVN7B.js","./chunk.J3M2MZHG.js","./chunk.UT6642FC.js","./chunk.IAZRY42B.js","./chunk.FMN5XDLE.js","./chunk.UIUHGA6W.js","./chunk.TI4OSTQV.js","./chunk.4BBJ62ZO.js","./chunk.NSNGPQGT.js","./chunk.H5CZZZLX.js","./chunk.Z7JRBKA7.js","./chunk.ORXFUK6F.js","./chunk.BTSXYZ6Z.js","./chunk.SDO3U72B.js","./chunk.5ZMENPY4.js","./chunk.AJZBJBMO.js"]),import("./chunk.TCUB6IDY.js")).then(n).finally(()=>u(!1))};return(0,t.jsxs)("li",{"data-testid":"activity-interaction","data-interaction":e.id,"data-outcome":e.outcome,style:{display:"grid",gap:3,lineHeight:1.45},children:[(0,t.jsx)("div",{style:{display:"flex",alignItems:"baseline",gap:6},children:(0,t.jsxs)("span",{style:{minWidth:0},children:[(0,t.jsx)("strong",{style:{fontWeight:600},children:A})," ",(0,t.jsxs)("span",{style:{color:"var(--graview-ink-muted)"},children:["asked AI to ",x(e)]}),(0,t.jsxs)("span",{style:{color:"var(--graview-ink-faint)"},children:[" \xB7 ",e.targetLabel]})]})}),e.offered.length>0&&e.outcome!=="accepted"&&e.outcome!=="partly"?(0,t.jsxs)("div",{"data-testid":"interaction-offered",style:{color:"var(--graview-ink-muted)"},children:["Offered ",e.offered.map(n=>n.label).join(", ")]}):null,(0,t.jsxs)("div",{style:{display:"flex",alignItems:"baseline",gap:6,flexWrap:"wrap"},children:[(0,t.jsx)("span",{"data-testid":"interaction-outcome",style:{color:e.outcome==="failed"?"var(--graview-warn)":"var(--graview-ink)"},children:$(e)}),(e.batches??[]).map(n=>(0,t.jsx)("span",{"data-interaction-batch":n,style:{marginLeft:"auto"},children:i(n)},n))]}),f?(0,t.jsx)("div",{"data-testid":"interaction-model",style:{fontSize:"0.75rem",color:"var(--graview-ink-faint)"},children:f}):null,S?(0,t.jsxs)("div",{style:{display:"flex",gap:6,flexWrap:"wrap"},children:[e.panel?(0,t.jsx)("button",{type:"button","data-testid":"interaction-reopen",disabled:p,onClick:()=>m(n=>n.drawPanel(c,e.panel)),style:r,children:"Show the panel"}):null,(0,t.jsx)("button",{type:"button","data-testid":"interaction-again",disabled:p,onClick:()=>m(n=>n.askAgain(c,e)),style:r,children:"Ask again"})]}):null]})}export{E as a,F as b};
|