graview 0.1.36 → 0.1.38

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.
Files changed (191) hide show
  1. package/dist/preview/chunk.2EJAIT33.js +1 -0
  2. package/dist/preview/chunk.2HFRVWWM.js +1 -0
  3. package/dist/preview/chunk.2VIGF4FO.js +1 -0
  4. package/dist/preview/chunk.33GN2NUT.js +1 -0
  5. package/dist/preview/chunk.36SQJMEE.js +1 -0
  6. package/dist/preview/chunk.3D5T3XIE.js +2 -0
  7. package/dist/preview/chunk.3FW4QNGV.js +1 -0
  8. package/dist/preview/chunk.3RT2GUZ5.js +1 -0
  9. package/dist/preview/chunk.3ZRHHB7X.js +1 -0
  10. package/dist/preview/{chunk.6QDFBCV4.js → chunk.4DEUD66C.js} +2 -2
  11. package/dist/preview/{chunk.S6GJGTJE.js → chunk.4EQSP7I3.js} +1 -1
  12. package/dist/preview/chunk.4Y6BCHV2.js +1 -0
  13. package/dist/preview/{chunk.LA7535VO.js → chunk.5MSO3KRO.js} +1 -1
  14. package/dist/preview/chunk.5VBBQ6Z3.js +1 -0
  15. package/dist/preview/chunk.5XJEGXDO.js +3 -0
  16. package/dist/preview/{chunk.6KMXLUOS.js → chunk.67WL7BGF.js} +1 -1
  17. package/dist/preview/{chunk.RKHEZ6KZ.js → chunk.6CKBIY7L.js} +1 -1
  18. package/dist/preview/chunk.6IHXTT6Z.js +1 -0
  19. package/dist/preview/{chunk.Y3IJDWNS.js → chunk.6ONRWFA6.js} +1 -1
  20. package/dist/preview/chunk.6UCRL4OF.js +1 -0
  21. package/dist/preview/chunk.6XJP7F3I.js +1 -0
  22. package/dist/preview/chunk.74RMHUCX.js +2 -0
  23. package/dist/preview/{chunk.OXZRGP53.js → chunk.7H5KVW2F.js} +1 -1
  24. package/dist/preview/chunk.7RSZMIAL.js +1 -0
  25. package/dist/preview/{chunk.QDHUDLJB.js → chunk.AFY35RJP.js} +1 -1
  26. package/dist/preview/{chunk.HPX3F7XX.js → chunk.AZCFXPEL.js} +1 -1
  27. package/dist/preview/{chunk.R45BF6JV.js → chunk.B5ILKGEF.js} +1 -1
  28. package/dist/preview/{chunk.5PU3RWYY.js → chunk.BRHRAVU2.js} +2 -2
  29. package/dist/preview/chunk.BUVAMSOZ.js +3 -0
  30. package/dist/preview/{chunk.6ZZZBDEG.js → chunk.DFVVS6C5.js} +1 -1
  31. package/dist/preview/chunk.DL637Q3W.js +1 -0
  32. package/dist/preview/chunk.DQJAEU4V.js +1 -0
  33. package/dist/preview/chunk.ESSQAMPM.js +1 -0
  34. package/dist/preview/{chunk.P75TPZWT.js → chunk.EUGWV3S6.js} +1 -1
  35. package/dist/preview/chunk.EV553KRT.js +1 -0
  36. package/dist/preview/chunk.EZP4FHDX.js +35 -0
  37. package/dist/preview/chunk.F6PIK2J2.js +1 -0
  38. package/dist/preview/{chunk.ZWZ5SEXT.js → chunk.FMVWXSQ7.js} +1 -1
  39. package/dist/preview/chunk.FTJBW25J.js +1 -0
  40. package/dist/preview/chunk.FUJM7GDV.js +1 -0
  41. package/dist/preview/{chunk.H4T56OXM.js → chunk.FYIQZMVF.js} +1 -1
  42. package/dist/preview/{chunk.IMRCAU4T.js → chunk.GR5Q4HTW.js} +1 -1
  43. package/dist/preview/chunk.GZ3IXNA4.js +1 -0
  44. package/dist/preview/chunk.HUSFMFXH.js +1 -0
  45. package/dist/preview/chunk.HVTGPEVW.js +1 -0
  46. package/dist/preview/chunk.I3SQJ2L2.js +1 -0
  47. package/dist/preview/chunk.IEDXW36H.js +1 -0
  48. package/dist/preview/chunk.IM7LXLIB.js +2 -0
  49. package/dist/preview/chunk.IU6ISXXC.js +1 -0
  50. package/dist/preview/{chunk.WQBDTLPZ.js → chunk.J2CR4RRH.js} +1 -1
  51. package/dist/preview/{chunk.J3TEJBI5.js → chunk.JWJQ2VXS.js} +1 -1
  52. package/dist/preview/chunk.K5KEECHL.js +88 -0
  53. package/dist/preview/{chunk.DANDYIB5.js → chunk.KNJZ2YNJ.js} +1 -1
  54. package/dist/preview/{chunk.OF34OZ4V.js → chunk.KSXB4LDF.js} +1 -1
  55. package/dist/preview/chunk.L34FY7QQ.js +1 -0
  56. package/dist/preview/chunk.L73VUBXN.js +4 -0
  57. package/dist/preview/{chunk.LMVCWYYG.js → chunk.L7JKEEMM.js} +1 -1
  58. package/dist/preview/chunk.LAW5PQEM.js +1 -0
  59. package/dist/preview/chunk.LDD3QX7G.js +1 -0
  60. package/dist/preview/chunk.LF7PU77M.js +7 -0
  61. package/dist/preview/chunk.LHO7L3CS.js +1 -0
  62. package/dist/preview/chunk.LU5LSXSW.js +1 -0
  63. package/dist/preview/chunk.MCVY6RRS.js +1 -0
  64. package/dist/preview/chunk.MQ7FNHXG.js +25 -0
  65. package/dist/preview/chunk.MVNUWK5Y.js +1 -0
  66. package/dist/preview/chunk.MWZK3HVG.js +1 -0
  67. package/dist/preview/{chunk.GUDKPK42.js → chunk.NH5TDAB2.js} +1 -1
  68. package/dist/preview/{chunk.MXJS67W4.js → chunk.NORRCKGN.js} +1 -1
  69. package/dist/preview/{chunk.FUR4IHWG.js → chunk.NPX7SPXM.js} +1 -1
  70. package/dist/preview/chunk.NQQHOSOK.js +1 -0
  71. package/dist/preview/chunk.NWWMUOZM.js +1 -0
  72. package/dist/preview/{chunk.2B4WVCVV.js → chunk.OE4QOBJF.js} +1 -1
  73. package/dist/preview/chunk.OEF3GPRM.js +1 -0
  74. package/dist/preview/{chunk.XRCGADKC.js → chunk.OS3L4ZOF.js} +1 -1
  75. package/dist/preview/chunk.OTL3Z345.js +1 -0
  76. package/dist/preview/{chunk.WJ2TWU2I.js → chunk.P3UPCI23.js} +1 -1
  77. package/dist/preview/chunk.PGKIEDYV.js +9 -0
  78. package/dist/preview/{chunk.42WJ6VJZ.js → chunk.PKUWET2F.js} +1 -1
  79. package/dist/preview/chunk.POHEWJKZ.js +1 -0
  80. package/dist/preview/chunk.PUBG2L6F.js +117 -0
  81. package/dist/preview/chunk.QT4XGC5Z.js +344 -0
  82. package/dist/preview/chunk.QTTBZJ6W.js +1 -0
  83. package/dist/preview/{chunk.ZEW2OOZ5.js → chunk.QYRPELLU.js} +1 -1
  84. package/dist/preview/chunk.RJDZOF2L.js +1 -0
  85. package/dist/preview/{chunk.CUCNT7MG.js → chunk.ROGYDMES.js} +1 -1
  86. package/dist/preview/chunk.RVJYEOFN.js +1 -0
  87. package/dist/preview/chunk.RZVZG2BQ.js +1 -0
  88. package/dist/preview/chunk.SGB6IMWN.js +1 -0
  89. package/dist/preview/chunk.SGLJTSTD.js +1 -0
  90. package/dist/preview/{chunk.ITXIFDQ7.js → chunk.SITFEJES.js} +1 -1
  91. package/dist/preview/{chunk.T2CN7UTZ.js → chunk.SZWX56WR.js} +6 -6
  92. package/dist/preview/chunk.TKSGC6XH.js +1 -0
  93. package/dist/preview/chunk.TOWYHWPB.js +17 -0
  94. package/dist/preview/{chunk.UJR3Y7MP.js → chunk.UF3L6FJO.js} +1 -1
  95. package/dist/preview/chunk.UXIFQIHA.js +2 -0
  96. package/dist/preview/{chunk.EBLKEQ7O.js → chunk.V2NBJDAX.js} +1 -1
  97. package/dist/preview/chunk.V5ZT5NSJ.js +1 -0
  98. package/dist/preview/chunk.VKHKYK5L.js +1 -0
  99. package/dist/preview/{chunk.KU6NIMQX.js → chunk.VNBR4DHD.js} +1 -1
  100. package/dist/preview/chunk.VSYHU5MA.js +1 -0
  101. package/dist/preview/chunk.VTWFVPKD.js +19 -0
  102. package/dist/preview/chunk.VV4BPOIK.js +1 -0
  103. package/dist/preview/chunk.W2HCJQVK.js +32 -0
  104. package/dist/preview/{chunk.HZPTBPJY.js → chunk.WERYQENC.js} +1 -1
  105. package/dist/preview/{chunk.FERBNBDE.js → chunk.WG5NIR23.js} +1 -1
  106. package/dist/preview/chunk.WLPTY4BF.js +5 -0
  107. package/dist/preview/chunk.XHWL7QBF.js +1 -0
  108. package/dist/preview/chunk.XM3NPZLP.js +1 -0
  109. package/dist/preview/chunk.YAXZNQY6.js +1 -0
  110. package/dist/preview/chunk.YG423NEB.js +1 -0
  111. package/dist/preview/{chunk.TGEF6TMM.js → chunk.YPY5BOEI.js} +1 -1
  112. package/dist/preview/{chunk.EDSPYKR4.js → chunk.YUJG5SN5.js} +1 -1
  113. package/dist/preview/chunk.YVR3ZMTV.js +1 -0
  114. package/dist/preview/chunk.YXH3IWNR.js +1 -0
  115. package/dist/preview/{chunk.WHTQHU3M.js → chunk.Z3ZKYSPN.js} +1 -1
  116. package/dist/preview/{chunk.O3OALXCI.js → chunk.ZLXPIEUC.js} +2 -2
  117. package/dist/preview/{chunk.OREMUXB5.js → chunk.ZRQI5VJF.js} +1 -1
  118. package/dist/preview/chunk.ZYCNEOAQ.js +1 -0
  119. package/dist/preview/index.html +43 -42
  120. package/dist/preview/page.js +7 -7
  121. package/package.json +6 -6
  122. package/dist/preview/chunk.272ZJXQP.js +0 -1
  123. package/dist/preview/chunk.27TLAVRR.js +0 -19
  124. package/dist/preview/chunk.2A2DLMT3.js +0 -1
  125. package/dist/preview/chunk.3PT55HXT.js +0 -1
  126. package/dist/preview/chunk.3SM2CHKF.js +0 -1
  127. package/dist/preview/chunk.3ZIOAPI5.js +0 -1
  128. package/dist/preview/chunk.4B73P2WA.js +0 -2
  129. package/dist/preview/chunk.4GXXD4NG.js +0 -1
  130. package/dist/preview/chunk.4Q56V7GS.js +0 -1
  131. package/dist/preview/chunk.4STIUIT6.js +0 -1
  132. package/dist/preview/chunk.53IKY7UP.js +0 -1
  133. package/dist/preview/chunk.56BPXB6E.js +0 -1
  134. package/dist/preview/chunk.64MJ5FRL.js +0 -1
  135. package/dist/preview/chunk.6II4BONS.js +0 -25
  136. package/dist/preview/chunk.6W7J76TK.js +0 -1
  137. package/dist/preview/chunk.7CO7S6QM.js +0 -27
  138. package/dist/preview/chunk.7G3B5QPH.js +0 -1
  139. package/dist/preview/chunk.7TBSVQSH.js +0 -1
  140. package/dist/preview/chunk.7YQYWOZR.js +0 -1
  141. package/dist/preview/chunk.AAZFVCSP.js +0 -2
  142. package/dist/preview/chunk.ACEYGWMO.js +0 -1
  143. package/dist/preview/chunk.ACXA55GW.js +0 -1
  144. package/dist/preview/chunk.BZ5VLPKB.js +0 -341
  145. package/dist/preview/chunk.CE3NOADH.js +0 -1
  146. package/dist/preview/chunk.CNJENUPC.js +0 -1
  147. package/dist/preview/chunk.CRPT3ZT3.js +0 -1
  148. package/dist/preview/chunk.D6RDTUX3.js +0 -1
  149. package/dist/preview/chunk.DSP62QYK.js +0 -9
  150. package/dist/preview/chunk.E77K6KBX.js +0 -1
  151. package/dist/preview/chunk.EQIGKXIG.js +0 -1
  152. package/dist/preview/chunk.ER5ILWKY.js +0 -3
  153. package/dist/preview/chunk.ET76FISZ.js +0 -17
  154. package/dist/preview/chunk.F5BCCGFK.js +0 -5
  155. package/dist/preview/chunk.FQKH67BP.js +0 -1
  156. package/dist/preview/chunk.FWBQVPMI.js +0 -1
  157. package/dist/preview/chunk.GOCUBIRW.js +0 -1
  158. package/dist/preview/chunk.GXLAZGYT.js +0 -1
  159. package/dist/preview/chunk.GZLYTPE7.js +0 -1
  160. package/dist/preview/chunk.IB32NOV5.js +0 -2
  161. package/dist/preview/chunk.JLXQ6ZLI.js +0 -1
  162. package/dist/preview/chunk.JZMA2AV7.js +0 -1
  163. package/dist/preview/chunk.K5NJTE3F.js +0 -35
  164. package/dist/preview/chunk.KBJG5SI2.js +0 -3
  165. package/dist/preview/chunk.LNNFNJKN.js +0 -1
  166. package/dist/preview/chunk.M4FQ7SSM.js +0 -1
  167. package/dist/preview/chunk.NJ62C2GU.js +0 -1
  168. package/dist/preview/chunk.NNCTJSD3.js +0 -1
  169. package/dist/preview/chunk.NWYOLGQ3.js +0 -1
  170. package/dist/preview/chunk.O6ROFVFD.js +0 -88
  171. package/dist/preview/chunk.OFJH7LDC.js +0 -1
  172. package/dist/preview/chunk.OH5BBE2B.js +0 -1
  173. package/dist/preview/chunk.OZR5NI4J.js +0 -1
  174. package/dist/preview/chunk.PWOVXARZ.js +0 -1
  175. package/dist/preview/chunk.Q63RPNUS.js +0 -1
  176. package/dist/preview/chunk.QEALNWWL.js +0 -117
  177. package/dist/preview/chunk.QLMUGC7R.js +0 -1
  178. package/dist/preview/chunk.QTITRX5Q.js +0 -1
  179. package/dist/preview/chunk.R7LRJS6B.js +0 -4
  180. package/dist/preview/chunk.SG23JC6D.js +0 -1
  181. package/dist/preview/chunk.SSRP5SBR.js +0 -1
  182. package/dist/preview/chunk.T47DLH5Z.js +0 -1
  183. package/dist/preview/chunk.VHWUGSFW.js +0 -1
  184. package/dist/preview/chunk.W42P7NOL.js +0 -1
  185. package/dist/preview/chunk.WGI5G6NM.js +0 -1
  186. package/dist/preview/chunk.XBTZXWJX.js +0 -1
  187. package/dist/preview/chunk.YNE5QR7Q.js +0 -1
  188. package/dist/preview/chunk.ZDNJK2SX.js +0 -1
  189. package/dist/preview/chunk.ZNS3LYJU.js +0 -1
  190. package/dist/preview/chunk.ZSSOTIFL.js +0 -1
  191. package/dist/preview/chunk.ZVMIHXVK.js +0 -1
@@ -1,3 +0,0 @@
1
- var __graviewPreload=(base,files)=>{if(typeof document>"u")return;const asked=globalThis.__graviewPreloaded??=new Set;for(const file of files){const href=new URL(file,base).href;if(asked.has(href))continue;asked.add(href);const link=document.createElement("link");link.rel="modulepreload";link.href=href;document.head.append(link)}};import{a as Je}from"./chunk.7YQYWOZR.js";import{a as Ue}from"./chunk.ACEYGWMO.js";import{a as Le}from"./chunk.D6RDTUX3.js";import{a as oe}from"./chunk.TI4OSTQV.js";import{a as re}from"./chunk.P75TPZWT.js";import{e as ke}from"./chunk.BZ5VLPKB.js";import{F as sn,I as je,O as Ne,Q as De,Y as He}from"./chunk.6II4BONS.js";import{$ as _,Ab as ie,Cb as Me,X as te,Z as L,ca as Ie,ea as me,gb as ve,gc as Ee,xb as Re}from"./chunk.F5BCCGFK.js";import{b as he}from"./chunk.AJZBJBMO.js";var an=e=>/^(?:aggregate|kind):([^,]+)$/.exec(e)?.[1];function Fe(e,n){let t=e.about??[];if(e.field!==void 0&&e.on!==void 0&&n(e.on))return{on:"field",id:e.on,field:e.field};let i=t.filter(n);if(i.length>1)return{on:"selection",ids:i};if(e.on!==void 0&&n(e.on))return{on:"record",id:e.on};if(i.length===1)return{on:"record",id:i[0]};let o=[e.on,...t].map(r=>r===void 0?void 0:an(r)).find(r=>r!==void 0);return e.place!==void 0?{on:"lens",place:e.place,...o?{kind:o}:{}}:o!==void 0?{on:"list",kind:o}:{on:"place",place:"home"}}var K=e=>e.on==="record"||e.on==="field"?[e.id]:e.on==="selection"?e.ids:e.on==="act"&&e.id!==void 0?[e.id]:[],se=(e,n)=>e.tryDefinition(n)?.fields?.shape??{},G=(e,n)=>e.tryDefinition(n)?.edges??{},ae=(e,n)=>new Set(e.tryDefinition(n)?.display?.hide??[]),N=(e,n)=>te(e.tryDefinition(n.kind),n),be=(e,n,t)=>Ie(e.tryDefinition(n),t)||L(t),Ae=e=>typeof e=="boolean"?e?"yes":"no":String(e);function xe(e,n){let t=e.kindsKeptFrom(n);return new Set(e.schema.kinds.filter(i=>!t.has(i)))}function Se(e,n,t,i){if(!e.permits(n,t).ok)return!1;if(!i)return!0;try{return e.previewAll([n],{author:t}).ops.length>0}catch{return!1}}function de(e,n,t){let i=e,{principal:o}=t,r=t.each??8,l=oe(i)?.store??i,d=l.seenBy(o),a=l.schema,k=xe(l,o),c=s=>{let p=d.graph.getNode(s);return p&&k.has(p.kind)?p:void 0},f=l.allMutations(),g=new Map(f.map(s=>[s.name,s])),A=[],$=new Set,b=s=>{$.has(s.id)||($.add(s.id),A.push(s))},h=s=>s.slice(0,r),x=K(n).filter(s=>c(s)!==void 0);if(K(n).length>0&&x.length===0)return{target:n,candidates:[]};let m=x.length===1?c(x[0]):void 0,u=m?.kind??(n.on==="list"?n.kind:n.on==="lens"?n.kind??t.places?.find(s=>s.as===n.place)?.kind:void 0)??(n.on==="selection"?c(x[0])?.kind:void 0);if(u!==void 0&&!k.has(u))return{target:n,candidates:[]};let v=(s,p)=>`act:${s}${Object.keys(p).length>0?`:${Object.values(p).map(C=>String(C)).join(",")}`:""}`,P=(s,p,C,y,O)=>{s.destructive||Object.values(p).some(E=>typeof E=="string"&&l.graph.has(E)&&c(E)===void 0)||Se(l,{name:s.name,args:{...p}},o,y.length===0)&&b({type:"act",id:v(s.name,p),label:C,description:O??s.description??C,mutation:s.name,args:p,asks:y})};if(n.on!=="place"||t.acts)if(t.acts)for(let s of t.acts){let p=g.get(s.mutation);!p||s.destructive||n.on==="act"&&s.mutation!==n.act||P(p,s.args,s.label,(s.open??[]).filter(C=>!C.optional).map(C=>C.name),s.why)}else{let s=m?[m]:[];for(let p of f){if(n.on==="act"&&p.name!==n.act)continue;let C=p.input.shape??{},y=O=>Object.entries(C).filter(([E,w])=>E!==O&&w.safeParse?.(void 0).success===!1).map(([E])=>E);if(p.subject)for(let O of s)ie(a,p).includes(O.kind)&&P(p,{[p.subject.arg]:O.id},`${p.title??L(p.name)}: ${N(a,O)}`,y(p.subject.arg));else u!==void 0&&(p.creates??[]).includes(u)&&P(p,{},p.title??L(p.name),y(void 0))}}let W=A.filter(s=>s.type==="act");A.splice(0,A.length,...h(W));let q=(s,p)=>{let C=Me(a,f).get(s.kind),y=se(a,s.kind),O=ae(a,s.kind),E=[];for(let[w,j]of Object.entries(y)){if(p!==void 0?w!==p:O.has(w)||s[w]!==void 0)continue;let H=re(j),U=H?.type==="enum"?H.options??[]:H?.type==="boolean"?[!0,!1]:[];if(U.length===0)continue;let D=(C?.get(w)??[]).map(R=>g.get(R)).find(R=>R?.subject!==void 0&&Se(l,{name:R.name,args:{[R.subject.arg]:s.id,[w]:U.find(ge=>ge!==s[w])??U[0]}},o,!0));if(D?.subject)for(let R of U)s[w]!==R&&E.push({type:"fill",id:`fill:${s.id}:${w}:${Ae(R)}`,label:`${be(a,s.kind,w)}: ${Ae(R)}`,description:`Set ${be(a,s.kind,w).toLowerCase()} of ${N(a,s)} to ${Ae(R)}`,record:s.id,field:w,value:R,call:{name:D.name,args:{[D.subject.arg]:s.id,[w]:R}}})}for(let[w,j]of Object.entries(G(a,s.kind))){if(p!==void 0&&w!==p)continue;let H=j.to==="*"?[...k]:j.to.filter(I=>k.has(I)),U=new Set(d.graph.out(s.id,w).map(I=>I.id)),D=f.find(I=>(I.connects??[]).includes(w)&&I.subject!==void 0&&ie(a,I).includes(s.kind));if(!D?.subject)continue;let R=Re(D.input).find(I=>I.name!==D.subject.arg);if(!R)continue;let ge=H.flatMap(I=>R.kinds.length===0||R.kinds.includes(I)?d.graph.nodesOfKind(I):[]).filter(I=>I.id!==s.id&&!U.has(I.id)&&c(I.id)!==void 0);for(let I of h(ge)){let Pe={name:D.name,args:{[D.subject.arg]:s.id,[R.name]:I.id}};Se(l,Pe,o,!0)&&E.push({type:"fill",id:`fill:${s.id}:${w}:${I.id}`,label:`${L(w)}: ${N(a,I)}`,description:`Link ${N(a,s)} to ${N(a,I)}${j.description?` as ${j.description}`:""}`,record:s.id,field:w,value:I.id,call:Pe})}}return E};if(n.on==="field"&&m)for(let s of q(m,n.field))b(s);else if(m&&n.on==="record")for(let s of h(q(m)))b(s);let z=s=>{let p=_(a,s).toLowerCase(),C=[{type:"panel",id:`panel:${s}:list`,label:`A list of ${p}`,description:`Every ${me(a.tryDefinition(s),s).toLowerCase()} this viewer may see, as a list`,panel:{lens:"blocks",kind:s}}],y=ae(a,s);for(let[O,E]of Object.entries(se(a,s))){if(y.has(O))continue;let w=re(E),j=be(a,s,O).toLowerCase();if(w?.type==="enum")C.push({type:"panel",id:`panel:${s}:group:${O}`,label:`${F(p)} by ${j}`,description:`A list of ${p} grouped by ${j}`,panel:{lens:"blocks",kind:s,group:O}}),C.push({type:"panel",id:`panel:${s}:columns:${O}`,label:`Columns of ${p} by ${j}`,description:`${F(p)} in a column for each ${j}`,panel:{lens:"columns",kind:s,column:O}});else if(w?.type==="number"||w?.type==="integer"||w?.type==="date"||w?.type==="datetime"){let H=w.type==="date"||w.type==="datetime";C.push({type:"panel",id:`panel:${s}:sort:${O}`,label:`${F(p)} by ${j}`,description:`A list of ${p}, the ${H?"latest":"highest"} ${j} first`,panel:{lens:"blocks",kind:s,sort:{by:O,direction:"desc"}}}),H&&C.push({type:"panel",id:`panel:${s}:calendar:${O}`,label:`A calendar of ${p}`,description:`${F(p)} on a calendar by ${j}`,panel:{lens:"calendar",kind:s,start:O}})}}return C},ne=n.on==="place"?[...k]:u!==void 0?[u]:[];for(let s of ne)for(let p of h(z(s)))b(p);for(let s of h((t.places??[]).filter(p=>p.kind===void 0?n.on==="place":k.has(p.kind)&&(n.on==="place"||p.kind===u))))n.on==="lens"&&s.as===n.place||b({type:"place",id:`place:${s.as}`,label:s.title,description:`Go to ${s.title}`,place:s.as});if(m){let s=[];for(let[p,C]of Object.entries(G(a,m.kind)))for(let y of d.graph.out(m.id,p))c(y.id)&&s.push({type:"record",id:`record:${y.id}`,label:N(a,y),description:`${F(C.description??L(p))}: ${N(a,y)}`,record:y.id,relation:p});for(let p of a.kinds)for(let[C,y]of Object.entries(G(a,p)))if(!(y.to!=="*"&&!y.to.includes(m.kind)))for(let O of d.graph.in(m.id,C))O.kind===p&&c(O.id)&&s.push({type:"record",id:`record:${O.id}`,label:N(a,O),description:`${F(y.inverse??L(C))}: ${N(a,O)}`,record:O.id,relation:C});for(let p of h(s))b(p)}else if(n.on==="list"||n.on==="lens")for(let s of h(u!==void 0?d.graph.nodesOfKind(u):[]))c(s.id)&&b({type:"record",id:`record:${s.id}`,label:N(a,s),description:`Open ${N(a,s)}`,record:s.id});else if(n.on==="selection")for(let s of x){let p=c(s);b({type:"record",id:`record:${s}`,label:N(a,p),description:`Open ${N(a,p)}`,record:s})}return{target:n,candidates:A}}var F=e=>e&&`${e[0].toUpperCase()}${e.slice(1)}`,we=new WeakMap;function dn(e){let n=2166136261;for(let t=0;t<e.length;t++)n^=e.charCodeAt(t),n=Math.imul(n,16777619)>>>0;return n.toString(36)}function ln(e,n){let t=e,i=oe(t)?.store??t,o=i.schema,r=xe(i,n),d=i.allMutations().filter(b=>!b.destructive&&i.permits({name:b.name,args:{}},n).ok!==!1),a=`${[...r].join(",")}|${d.map(b=>b.name).join(",")}`,k=we.get(o)?.get(a);if(k)return k;let c=[...r].map(b=>{let h=ae(o,b),x={};for(let[u,v]of Object.entries(se(o,b))){if(h.has(u))continue;let P=re(v);P&&(x[u]=P.type==="enum"?`enum:${(P.options??[]).join("|")}`:P.type)}let m={};for(let[u,v]of Object.entries(G(o,b)))m[u]=v.to==="*"?[...r]:v.to.filter(P=>r.has(P));return{kind:b,noun:me(o.tryDefinition(b),b),plural:_(o,b),fields:x,relations:m}}),f=d.map(b=>({name:b.name,title:b.title??L(b.name),...b.subject?{on:ie(o,b).filter(h=>r.has(h))}:{}})),g={kinds:c,acts:f},A={version:dn(JSON.stringify(g)),...g},$=we.get(o)??new Map;return $.set(a,A),we.set(o,$),A}var cn=e=>e.name??e.id??e.kind;function Ge(e,n,t){let i=e,{principal:o}=t,r=oe(i)?.store??i,l=r.seenBy(o),d=r.schema,a=xe(r,o),k=m=>{let u=l.graph.getNode(m);return u&&a.has(u.kind)?u:void 0},c=m=>({id:m.id,kind:m.kind,label:N(d,m)}),f=K(n),g=f.length===1?k(f[0]):void 0,A=g?Object.fromEntries(Object.keys(se(d,g.kind)).filter(m=>!ae(d,g.kind).has(m)&&g[m]!==void 0&&m!=="label").map(m=>[m,g[m]])):{},$={on:n.on,...g?{record:{...c(g),fields:A}}:{},...n.on==="field"&&g?{field:n.field}:{},...n.on==="list"&&a.has(n.kind)?{kind:n.kind}:{},...n.on==="lens"?{place:n.place,...n.kind&&a.has(n.kind)?{kind:n.kind}:{}}:{},...n.on==="place"?{place:n.place}:{},...n.on==="act"?{act:n.act}:{}},b=[...new Set([...n.on==="selection"?n.ids:[],...t.selection??[]])].flatMap(m=>{let u=k(m);return u?[c(u)]:[]}),h=[];if(g){for(let m of Object.keys(G(d,g.kind)))for(let u of l.graph.out(g.id,m))k(u.id)&&h.push({...c(u),relation:m,direction:"out"});for(let m of d.kinds)for(let u of Object.keys(G(d,m)))for(let v of l.graph.in(g.id,u))v.kind===m&&k(v.id)&&h.push({...c(v),relation:u,direction:"in"})}let x=l.batches().filter(m=>!m.ops.every(ve)).slice(-(t.recent??6)).reverse().map(m=>({intent:m.intent,at:m.at,by:cn(m.author)}));return{...t.place!==void 0?{place:t.place}:{},target:$,selection:b,neighbors:h.slice(0,24),recent:x,schema:ln(r,o)}}function Q(e){if(!e.off)return e.fast??(e.decide?{model:e.name??"decide",decide:e.decide}:void 0)}function Be(e){return e.suggestOnOpen!==!1&&Q(e)!==void 0}function J(e){if(e.off)return;if(e.thinking)return e.thinking;let n=e.name??"model";if(e.complete){let t=e.complete;return{model:n,think:async({system:i,prompt:o})=>({text:await t(`${i}
2
-
3
- ${o}`)})}}if(e.turn){let t=e.turn;return{model:n,think:async({system:i,prompt:o})=>({text:await t({system:i,messages:[{role:"user",content:o}],tools:[],call:async()=>({error:"No tools here."})})})}}}var Oe=(e,n,t)=>e?n/1e6*(e.inputPerMillion??0)+t/1e6*(e.outputPerMillion??0):void 0,Ce=()=>`ai-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`;function fn(e,n,t=[]){let i=o=>{let r=e.graph.getNode(o);return r?te(e.schema.tryDefinition(r.kind),r):"a record"};switch(n.on){case"record":return i(n.id);case"field":return`${i(n.id)} \xB7 ${n.field}`;case"selection":return`${n.ids.length} records`;case"list":return e.schema.tryDefinition(n.kind)?_(e.schema,n.kind):n.kind;case"lens":case"place":return t.find(o=>o.as===n.place)?.title??(n.place==="home"?"Home":n.place);case"act":return n.act}}var We=e=>e.type!=="act"||e.asks.length===0,$e=(e,n)=>({id:e.id,type:e.type,label:e.label,...n!==void 0?{confidence:n}:{}});function Y(e,n){let t=n.interaction??Ce(),i=de(n.store,n.target,{principal:n.principal,...n.acts?{acts:n.acts}:{},...n.places?{places:n.places}:{}}),o=Ge(n.store,n.target,{principal:n.principal,...n.place?{place:n.place}:{},...n.selection?{selection:n.selection}:{}}),r=[];return{id:t,catalog:i,state:o,entry:{id:t,at:new Date().toISOString(),by:n.by??n.principal,target:n.target,targetLabel:fn(n.store,n.target,n.places)},usage:r,meter:l=>{r.push(l),e.meter?.({...l,interaction:t})}}}async function ce(e,n,t,i){let o=await e.decide(n,t),{inputTokens:r,outputTokens:l}=o.usage,d=Oe(e.price,r,l);return i({tier:"fast",model:e.model,inputTokens:r,outputTokens:l,...d!==void 0?{costUsd:d}:{}}),o.answers}async function V(e,n,t,i,o){let r=await e.think({system:n,prompt:t,state:i.state,catalog:i.catalog}),l=r.usage?.inputTokens,d=r.usage?.outputTokens,a=r.usage?.costUsd??(l!==void 0?Oe(e.price,l,d??0):void 0);return o({tier:"thinking",model:e.model,...l!==void 0?{inputTokens:l}:{},...d!==void 0?{outputTokens:d}:{},...a!==void 0?{costUsd:a}:{}}),Ue(r.text)}function fe(e,n){let t=new Map(e.map((i,o)=>[`c${o+1}`,i]));return{question:{type:"choice",instructions:n,criteria:Object.fromEntries([...t].map(([i,o])=>[i,`${o.label} \u2014 ${o.description}`]))},of:i=>t.get(i)}}function ue(e,n,t){if(e?.type!=="choice")return[];let i=e,o=Object.entries(i.probabilities).sort((r,l)=>l[1]-r[1]);return o.some(([r])=>r===i.choice)||o.unshift([i.choice,i.confidence]),o.flatMap(([r,l])=>{let d=n(r);return d?[{candidate:d,confidence:l}]:[]}).slice(0,t)}var M=(e,n,t,i)=>({interaction:{...e.entry,ask:{kind:t,said:n??""},offered:[],outcome:"failed",failed:i,usage:[...e.usage]},offers:[]}),X="AI isn't on here.";async function qe(e,n,t=3){let i=Y(e,n),o=n.said??"Suggest",r=i.catalog.candidates.filter(We).slice(0,24);if(r.length===0)return{interaction:{...i.entry,ask:{kind:"suggest",said:o},offered:[],outcome:"offered",usage:[]},offers:[]};let l=Q(e),d=J(e),a=[];try{if(l){let{question:k,of:c}=fe(r,"Which of these would the person most likely want to do next, here?"),f=await ce(l,{...i.state,candidates:r.map(g=>({id:g.id,type:g.type,says:g.description}))},{next:k},i.meter);a=ue(f.next,c,t)}else if(d){let k=await V(d,'You suggest what a person most likely wants to do next in an app. Answer only JSON: {"pick": [candidate ids, best first]}. Pick only ids from the candidates.',JSON.stringify({state:i.state,candidates:r.map(f=>({id:f.id,says:f.description}))}),i,i.meter);a=(Array.isArray(k?.pick)?k.pick.filter(f=>typeof f=="string"):[]).flatMap(f=>r.filter(g=>g.id===f)).slice(0,t).map(f=>({candidate:f}))}else return M(i,o,"suggest",X)}catch(k){return M(i,o,"suggest",k instanceof Error?k.message:String(k))}return{interaction:{...i.entry,ask:{kind:"suggest",said:o},offered:a.map(({candidate:k,confidence:c})=>$e(k,c)),outcome:"offered",usage:[...i.usage]},offers:a.map(({candidate:k})=>k)}}async function ze(e,n){let t=Y(e,n),i=n.said??"Fill in",o=t.catalog.candidates.filter(f=>f.type==="fill"),r=new Map;for(let f of o)r.set(f.field,[...r.get(f.field)??[],f]);if(r.size===0)return{interaction:{...t.entry,ask:{kind:"fill",said:i},offered:[],outcome:"offered",usage:[]},offers:[]};let l=Q(e),d=J(e),a=[];try{if(l){let f=[...r].map(([A,$],b)=>({key:`f${b+1}`,field:A,...fe($,`Which value fits "${A}" best for this record?`)})),g=await ce(l,t.state,Object.fromEntries(f.map(A=>[A.key,A.question])),t.meter);for(let A of f){let $=!un(n.store,n.target,A.field)&&pn(n.store,n.target,A.field)!=="one";a.push(...ue(g[A.key],A.of,$?3:1).filter((b,h)=>h===0||b.confidence>=.4))}}else if(d){let f=await V(d,`You fill in a record's fields in an app. Answer only JSON: {"fills": [candidate ids]}, at most one per field, only ids from the candidates.`,JSON.stringify({state:t.state,candidates:o.map($=>({id:$.id,says:$.description}))}),t,t.meter),g=Array.isArray(f?.fills)?f.fills.filter($=>typeof $=="string"):[],A=new Set;for(let $ of g){let b=o.find(h=>h.id===$);b?.type==="fill"&&!A.has(b.field)&&(A.add(b.field),a.push({candidate:b}))}}else return M(t,i,"fill",X)}catch(f){return M(t,i,"fill",f instanceof Error?f.message:String(f))}let k=t.usage.at(-1)?.model,c=Z(n.store,{interaction:t.id,target:n.target,basis:i,...k?{model:k}:{},proposals:a.flatMap(({candidate:f,confidence:g})=>f.type==="fill"?[{id:f.id,label:f.label,said:f.description,call:f.call,record:f.record,field:f.field,...g!==void 0?{confidence:g}:{}}]:[])},n.principal);return{interaction:{...t.entry,ask:{kind:"fill",said:i},offered:c.proposals.map(f=>({id:f.id,type:"fill",label:f.label,...f.confidence!==void 0?{confidence:f.confidence}:{}})),outcome:"offered",usage:[...t.usage]},offers:[],...c.proposals.length>0?{ghost:c}:{}}}function un(e,n,t){let i=n.on==="record"||n.on==="field"?n.id:void 0,o=i?e.graph.getNode(i)?.kind:void 0,r=(o?e.schema.tryDefinition(o)?.fields?.shape:void 0)??{};return t in r}function pn(e,n,t){let i=n.on==="record"||n.on==="field"?n.id:void 0,o=i?e.graph.getNode(i)?.kind:void 0;return o?e.schema.tryDefinition(o)?.edges?.[t]?.cardinality:void 0}async function _e(e,n){let t=Y(e,n),i=n.said??"Add one",o=new Set(n.store.allMutations().filter(c=>(c.creates??[]).length>0).map(c=>c.name)),r=t.catalog.candidates.filter(c=>c.type==="act"&&c.asks.length>0&&o.has(c.mutation));if(r.length===0)return M(t,i,"record","Nothing here makes a record.");let l=J(e);if(!l)return M(t,i,"record",X);let d;try{let c=await V(l,'You propose one new record for an app by filling in an act. Answer only JSON: {"act": a candidate id, "args": {argument: value}}. Use only the candidates, and fill every argument the act asks for with a value that fits the state.',JSON.stringify({ask:i,state:t.state,candidates:r.map(A=>({id:A.id,says:A.description,asks:A.asks}))}),t,t.meter),f=r.find(A=>A.id===c?.act),g=typeof c?.args=="object"&&c.args!==null?c.args:{};f&&(d={act:f,args:Object.fromEntries(Object.entries(g).filter(([A])=>f.asks.includes(A)))})}catch(c){return M(t,i,"record",c instanceof Error?c.message:String(c))}if(!d)return M(t,i,"record","The model named no act this app has here.");let a=t.usage.at(-1)?.model,k=Z(n.store,{interaction:t.id,target:n.target,basis:i,...a?{model:a}:{},proposals:[{id:d.act.id,label:d.act.label,said:d.act.description,call:{name:d.act.mutation,args:{...d.act.args,...d.args}}}]},n.principal);return k.proposals.length===0?M(t,i,"record","What the model proposed could not be made here."):{interaction:{...t.entry,ask:{kind:"record",said:i},offered:k.proposals.map(c=>({id:c.id,type:"act",label:c.said})),outcome:"offered",usage:[...t.usage]},offers:[d.act],ghost:k}}async function Ke(e,n){let t=Y(e,n),i=n.said??"Make a panel",o=t.catalog.candidates.filter(c=>c.type==="panel");if(o.length===0)return M(t,i,"panel","Nothing here can be drawn as a panel.");let r=Q(e),l=J(e),d;try{if(l){let c=await V(l,'You choose a panel to draw in an app. Answer only JSON: {"panel": a candidate id, "title": a short title}. Choose only among the candidates.',JSON.stringify({ask:i,state:t.state,candidates:o.map(g=>({id:g.id,says:g.description}))}),t,t.meter),f=o.find(g=>g.id===c?.panel);f&&(d={panel:f,...typeof c?.title=="string"&&c.title.trim()?{title:c.title.trim().slice(0,60)}:{}})}else if(r){let{question:c,of:f}=fe(o,`Which panel answers this best: ${i}`),g=ue((await ce(r,t.state,{panel:c},t.meter)).panel,f,1)[0];g?.candidate.type==="panel"&&(d={panel:g.candidate,confidence:g.confidence})}else return M(t,i,"panel",X)}catch(c){return M(t,i,"panel",c instanceof Error?c.message:String(c))}if(!d)return M(t,i,"panel","The model named no panel this app can draw.");let a=d.title??d.panel.label,k={title:a,recipe:{...d.panel.panel,title:a}};return{interaction:{...t.entry,ask:{kind:"panel",said:i},offered:[$e(d.panel,d.confidence)],outcome:"drawn",panel:k,usage:[...t.usage]},offers:[d.panel],panel:k}}function yn(e){return e.off?void 0:e.answer}var gn=`You answer a person's question about what they are looking at in an app, from the state given and nothing else. Answer only JSON: {"answer": one to three short sentences, "pick": [candidate ids that act on the answer, best first, at most three]}. Pick only ids from the candidates, and none when nothing fits. Never say an id to the person.`;async function Rn(e,n){let t=Y(e,n),i=n.said.trim(),o=t.catalog.candidates.filter(h=>We(h)||h.type==="panel"||h.type==="place"||h.type==="record").slice(0,32),r=yn(e),l=J(e),d=Q(e),a="",k=[],c=h=>h.flatMap(x=>o.filter(m=>m.id===x)).slice(0,3).map(x=>({candidate:x}));try{if(r){let h=await r.answer({said:i,target:n.target,targetLabel:t.entry.targetLabel,state:t.state,catalog:{target:t.catalog.target,candidates:o},...n.follows?{follows:n.follows}:{}}),x=h.usage?.inputTokens,m=h.usage?.outputTokens,u=h.usage?.costUsd??(x!==void 0?Oe(r.price,x,m??0):void 0);t.meter({tier:"thinking",model:r.model,...x!==void 0?{inputTokens:x}:{},...m!==void 0?{outputTokens:m}:{},...u!==void 0?{costUsd:u}:{}}),a=typeof h.text=="string"?h.text.trim():"",k=c(h.pick??[])}else if(l){let h=await V(l,gn,JSON.stringify({ask:i,about:t.entry.targetLabel,...n.follows?{follows:n.follows}:{},state:t.state,candidates:o.map(x=>({id:x.id,says:x.description}))}),t,t.meter);a=typeof h?.answer=="string"?h.answer.trim():"",k=c(Array.isArray(h?.pick)?h.pick:[])}else if(d&&o.length>0){let{question:h,of:x}=fe(o,`Which of these best answers, or acts on: ${i}`),m=await ce(d,{...t.state,asked:i,candidates:o.map(u=>({id:u.id,type:u.type,says:u.description}))},{answer:h},t.meter);k=ue(m.answer,x,3),a=k.length>0?`These fit \u201C${i}\u201D.`:""}else return M(t,i,"ask",X)}catch(h){return M(t,i,"ask",h instanceof Error?h.message:String(h))}if(!a&&k.length===0)return M(t,i,"ask","The AI had no answer to that here.");let f=t.usage.at(-1)?.model,g=k.flatMap(({candidate:h,confidence:x})=>{let m=le(h);return m?[{...m,...x!==void 0?{confidence:x}:{}}]:[]}),A=g.length>0?Z(n.store,{interaction:t.id,target:n.target,basis:i,...f?{model:f}:{},proposals:g},n.principal):void 0,$=k.map(({candidate:h})=>h).filter(h=>le(h)===void 0),b=[...$.map(h=>$e(h,k.find(x=>x.candidate===h)?.confidence)),...(A?.proposals??[]).map(h=>({id:h.id,type:h.field!==void 0?"fill":"act",label:h.label,...h.confidence!==void 0?{confidence:h.confidence}:{}}))];return{interaction:{...t.entry,ask:{kind:"ask",said:i},offered:b,outcome:"offered",...a?{answer:a}:{},usage:[...t.usage]},offers:$,...A&&A.proposals.length>0?{ghost:A}:{},...a?{answer:a}:{}}}function Z(e,n,t){let i=n.proposals.flatMap(o=>{try{let r=e.previewAll([o.call],{author:t}),l=r.ops.map(d=>d.intent).join("; ");return r.ops.length>0?[{...o,said:l||o.said}]:[]}catch{return[]}});return{...n,proposals:i}}function le(e){if(e.type==="fill")return{id:e.id,label:e.label,said:e.description,call:e.call,record:e.record,field:e.field};if(e.type==="act"&&e.asks.length===0)return{id:e.id,label:e.label,said:e.description,call:{name:e.mutation,args:{...e.args}}}}function Qe(e,n,t){let i=n.proposals.filter(r=>t.ids===void 0||t.ids.includes(r.id));if(i.length===0)return{ok:!1,refused:"Nothing was chosen."};let o=i.flatMap(r=>r.confidence===void 0?[]:[r.confidence]);try{let l=e.applyAll(i.map(d=>d.call),{author:t.author,via:`ai:${n.interaction}`,intent:n.basis,lineage:{basis:`Asked \u201C${n.basis}\u201D`,...n.model?{model:n.model}:{},...o.length>0?{confidence:Math.min(...o)}:{},interaction:n.interaction}}).ops[0]?.batch;return l?{ok:!0,batch:l,accepted:i.map(d=>d.id)}:{ok:!1,refused:"That changes nothing now."}}catch(r){return{ok:!1,refused:r instanceof Error?r.message:String(r)}}}function Ye(e,n,t){let i=e.ask.kind==="suggest"?n.length>0:e.offered.length>0&&e.offered.every(o=>n.includes(o.id));return{...e,outcome:i?"accepted":"partly",accepted:n,batches:[...e.batches??[],t]}}var Ve=e=>({...e,outcome:"dismissed"});var T=he(sn(),1);var S=he(De(),1);function Ze(e,n,t){let i=n.on==="selection"?n.ids:n.on==="record"||n.on==="field"?[n.id]:[],o=i.length>0?Je(e.store,i,{principal:e.principal,...i.length===1?{focus:i[0]}:{}}).affordances.map(r=>({mutation:r.mutation,label:r.label,args:r.args,open:r.open,why:r.why,...r.destructive?{destructive:!0}:{}})):void 0;return{store:e.store,target:n,principal:e.principal,interaction:Ce(),places:e.places,selection:e.selection,...o?{acts:o}:{},...e.place?{place:e.place}:{},...t?{said:t}:{}}}async function en(e,n,t){let i=await (__graviewPreload(import.meta.url,["./chunk.6KMXLUOS.js","./chunk.G4JJXA63.js","./chunk.LA7535VO.js","./chunk.ZEW2OOZ5.js","./chunk.ACEYGWMO.js","./chunk.3PT55HXT.js","./chunk.Q5WEOX3Q.js","./chunk.CRPT3ZT3.js","./chunk.LNNFNJKN.js","./chunk.EBLKEQ7O.js","./chunk.WVUJXDXZ.js","./chunk.VHWUGSFW.js","./chunk.P75TPZWT.js","./chunk.6W7J76TK.js","./chunk.FUR4IHWG.js","./chunk.2B4WVCVV.js","./chunk.AAZFVCSP.js","./chunk.GZLYTPE7.js","./chunk.4B73P2WA.js","./chunk.IMRCAU4T.js","./chunk.F5BCCGFK.js","./chunk.AJZBJBMO.js"]),import("./chunk.7G3B5QPH.js")),o=i.recipeDraft(n.recipe,{app:e.app,sight:i.draftSight(e.app,e.principal)});if(i.isDraftFailure(o))return o.failed;t?.(),e.seatTalk.setDraft(o,null),e.goTo.draft?.(),nn()}function nn(e=180){if(typeof document>"u")return;let n=document.querySelector('[data-testid="draft-keep"]'),t=document.activeElement,i=!t||t===document.body||t.closest?.("[inert]")!==null;if(n){i&&n.focus();return}e>0&&requestAnimationFrame(()=>nn(e-1))}async function ee(e,n,t,i,o){let r=Ze(e,t,i),l=n==="suggest"?await qe(e.ai,r):n==="fill"?await ze(e.ai,r):n==="record"?await _e(e.ai,r):await Ke(e.ai,r);if(l.interaction.outcome==="failed")return n!=="suggest"&&e.desk.record(l.interaction),l;let d=a=>{let k={...l.interaction,outcome:"failed",failed:a};return e.desk.record(k),{...l,interaction:k}};if(n==="fill"||n==="record"){if(!l.ghost||l.ghost.proposals.length===0)return d("Nothing here could be filled in.");o?.(),e.desk.setGhost({ghost:l.ghost}),e.desk.record(l.interaction)}if(n==="panel"&&l.panel){let a=await en(e,l.panel,o);if(a)return d(a);e.desk.record(l.interaction)}return l}var Te=new WeakMap,hn=64,Xe=new WeakMap;function mn(e){let n=Xe.get(e);if(!n){let t=n={n:0};Xe.set(e,t),e.subscribe(()=>void(t.n+=1))}return n.n}var tn=(e,n)=>{let t=K(n);return t.length>0?t.map(i=>e.graph.getNode(i)):[mn(e)]},on=(e,n)=>JSON.stringify({target:n,seat:e.principal}),rn=(e,n,t)=>{let i=tn(e.store,n);return t.schema===e.store.schema&&t.ai===e.ai&&i.length===t.depends.length&&i.every((o,r)=>o===t.depends[r])};function kn(e,n){let t=Te.get(e.store)?.get(on(e,n));return t?.result!==void 0&&rn(e,n,t)?t.result:void 0}function bn(e,n){let t=Te.get(e.store);t||Te.set(e.store,t=new Map);let i=on(e,n),o=t.get(i);if(o&&rn(e,n,o))return o.result?Promise.resolve(o.result):o.asked;let r=ee(e,"suggest",n),l={schema:e.store.schema,ai:e.ai,depends:tn(e.store,n),asked:r};t.delete(i),t.set(i,l),t.size>hn&&t.delete(t.keys().next().value);let d=t;return r.then(a=>{a.interaction.outcome!=="failed"?l.result=a:d.get(i)===l&&d.delete(i)}),r}async function An(e,n,t,i){let o=n.interaction,r=le(t);if(r){let l=o.usage?.at(-1)?.model,d=o.offered.find(k=>k.id===t.id)?.confidence,a=Z(e.store,{interaction:o.id,target:o.target,basis:`${o.ask.said}: ${t.label}`,...l?{model:l}:{},proposals:[{...r,...d!==void 0?{confidence:d}:{}}]},e.principal);if(a.proposals.length===0){let k="That can't be done now.";return e.desk.record({...o,outcome:"failed",failed:k}),k}i?.(),e.desk.setGhost({ghost:a}),e.desk.record(o);return}if(t.type==="panel"){let l=t.label,d={title:l,recipe:{...t.panel,title:l}},a=await en(e,d,i);return e.desk.record(a?{...o,outcome:"failed",failed:a}:{...o,outcome:"drawn",accepted:[t.id],panel:d}),a}i?.(),t.type==="place"?e.goTo.place(t.place):t.type==="record"&&e.goTo.record(t.record),e.desk.record({...o,outcome:"accepted",accepted:[t.id]})}async function Fn(e,n){if(n.ask.kind==="ask")return ke(e.desk,{target:n.target,asked:n.ask.said}),null;let t=n.ask.kind==="panel"||n.ask.kind==="record"?n.ask.kind:"fill";return ee(e,t,n.target,n.ask.said)}var B={padding:"5px 10px",fontSize:"0.875rem",borderRadius:8,width:"100%",textAlign:"left",borderWidth:1,borderStyle:"solid",borderColor:"transparent",background:"none",boxShadow:"none"},pe={margin:0,padding:"4px 10px",fontSize:"0.8125rem",color:"var(--graview-ink-muted)"};function Gn({target:e,close:n}){let t=Le(),i=(0,T.useMemo)(()=>Fe(e,y=>t.store.graph.has(y)),[e,t.store]),o=(0,T.useMemo)(()=>{let y=Ze(t,i);return de(t.store,i,{principal:t.principal,places:t.places,...y.acts?{acts:y.acts}:{}})},[t,i]),r=o.candidates.some(y=>y.type==="fill"),l=o.candidates.some(y=>y.type==="panel"),d=(0,T.useMemo)(()=>new Set(t.store.allMutations().filter(y=>(y.creates??[]).length>0).map(y=>y.name)),[t.store]),a=J(t.ai)!==void 0&&o.candidates.some(y=>y.type==="act"&&y.asks.length>0&&d.has(y.mutation)),k=Be(t.ai),c=kn(t,i),f=JSON.stringify(i),[g,A]=(0,T.useState)(!1),[$,b]=(0,T.useState)(null),[h,x]=(0,T.useState)(k&&c===void 0);(0,T.useEffect)(()=>{if(c!==void 0||!(k||g))return;let y=!0;return x(!0),bn(t,i).then(O=>{y&&(b(O),x(!1))}),()=>{y=!1}},[f,g]);let m=c??$,u=m?.interaction.outcome==="failed"?m.interaction.failed??"The AI could not suggest anything here.":null,v=(0,T.useRef)(!1),P=(0,T.useRef)(null);(0,T.useLayoutEffect)(()=>{m===null||!v.current||(v.current=!1,P.current?.querySelector("button")?.focus())},[m]);let W=(0,T.useRef)(!0);(0,T.useEffect)(()=>()=>{W.current=!1},[]);let[q,z]=(0,T.useState)(!1),[ne,s]=(0,T.useState)(null),p=y=>{if(q)return;z(!0),s(null);let O=!1;y(()=>{O=!0,n()}).then(w=>{W.current&&(z(!1),w?s(w):O||n())},w=>{W.current&&(z(!1),s(w instanceof Error?w.message:String(w)))})},C=y=>y.interaction.outcome==="failed"?y.interaction.failed??"The AI could not do that here.":void 0;return(0,S.jsxs)("div",{ref:P,"data-testid":"inline-ai",style:{display:"grid",gap:2},children:[h&&!g?(0,S.jsx)("p",{role:"status","data-testid":"inline-ai-thinking",style:pe,children:"Thinking\u2026"}):q?(0,S.jsx)("p",{role:"status","data-testid":"inline-ai-asking",style:pe,children:"Asking\u2026"}):ne?(0,S.jsx)("p",{role:"alert","data-testid":"inline-ai-failed",style:{...pe,color:"var(--graview-warn)"},children:ne}):u?(0,S.jsx)("p",{role:"status",style:pe,children:u}):null,(0,S.jsxs)("ul",{style:{margin:0,padding:0,listStyle:"none",display:"flex",flexDirection:"column",gap:2},children:[(m?.offers??[]).map(y=>(0,S.jsx)("li",{children:(0,S.jsxs)("button",{type:"button","data-menu-item":`ai-offer:${y.id}`,"data-ai-offer":y.id,"data-ai-offer-type":y.type,onClick:()=>p(O=>An(t,m,y,O)),style:B,children:[y.label,(0,S.jsxs)("span",{style:{color:"var(--graview-ink-faint)"},children:[" \xB7 ",y.type==="panel"?"a panel":y.type==="place"?"go there":y.type==="record"?"open it":"suggested"]})]})},y.id)),!k&&m===null?(0,S.jsx)("li",{children:(0,S.jsx)("button",{type:"button","data-menu-item":"ai-suggest","aria-disabled":g||void 0,onClick:y=>{g||(v.current=document.activeElement===y.currentTarget,A(!0))},style:B,children:g?"Thinking\u2026":"Suggest\u2026"})}):null,r?(0,S.jsx)("li",{children:(0,S.jsx)("button",{type:"button","data-menu-item":"ai-fill",onClick:()=>p(async y=>C(await ee(t,"fill",i,"Fill in",y))),style:B,children:"Fill in with AI"})}):null,a?(0,S.jsx)("li",{children:(0,S.jsx)("button",{type:"button","data-menu-item":"ai-record",onClick:()=>p(async y=>C(await ee(t,"record",i,"Add one",y))),style:B,children:"Add one with AI"})}):null,l?(0,S.jsx)("li",{children:(0,S.jsx)("button",{type:"button","data-menu-item":"ai-panel",onClick:()=>p(async y=>C(await ee(t,"panel",i,"Draw a panel",y))),style:B,children:"Draw a panel"})}):null,(0,S.jsx)("li",{children:(0,S.jsx)("button",{type:"button","data-menu-item":"ai-ask",onClick:()=>{let y=document.activeElement;n(),ke(t.desk,{target:i,returnTo:y instanceof HTMLElement&&y!==document.body?y:null})},style:B,children:"Ask about this\u2026"})})]})]})}var ye={display:"inline-flex",alignItems:"center",minHeight:28,padding:"2px 10px",fontSize:"0.8125rem",borderRadius:8};function Bn({placement:e="picture"}){let{store:n,principal:t,aiDesk:i}=He(),o=Ne(n,t),{ghost:r,entries:l}=je(i),[d,a]=(0,T.useState)(new Set);(0,T.useEffect)(()=>a(new Set),[r?.ghost.interaction]);let k=(0,T.useRef)(null),c=(0,T.useRef)(null),f=r?.batch;if((0,T.useEffect)(()=>{f!==void 0&&c.current?.focus()},[f]),!r)return null;let{ghost:g}=r,A=l.find(u=>u.id===g.interaction),$=()=>{let u=g.target.on==="record"||g.target.on==="field"?g.target.id:void 0,v=k.current?.closest("[data-graview-face], main")?.parentElement??document,P=(u?v.querySelector(`[data-graview-view="${CSS.escape(u)}"][tabindex]`):null)??document.querySelector("[data-graview-page-title]")??k.current?.closest("main")??document.querySelector("main");P&&!P.hasAttribute("tabindex")&&P.setAttribute("tabindex","-1"),P?.focus({preventScroll:!0}),i.setGhost(null)},b=g.proposals.filter(u=>!d.has(u.id)).map(u=>u.id),h=()=>{let u=Qe(o,g,{author:t,ids:b});if(!u.ok){i.setGhost({...r,refused:u.refused});return}A&&i.record(Ye(A,u.accepted,u.batch)),i.setGhost({ghost:g,batch:u.batch,took:u.accepted.length,...r.onCard?{onCard:!0}:{}})},x=()=>{A&&r.batch===void 0&&i.record(Ve(A)),$()},m=()=>{if(r.batch!==void 0)try{o.undo(r.batch,{author:t}),$()}catch(u){i.setGhost({...r,refused:u instanceof Error?u.message:String(u)})}};return(0,S.jsxs)("section",{ref:k,"data-testid":"ai-ghost","data-interaction":g.interaction,"aria-label":"Proposed by AI",style:{...e==="card"?{position:"static"}:{position:e==="page"?"fixed":"absolute",insetInline:"max(12px, calc(50% - 220px))",bottom:"calc(var(--graview-foot-room, 0px) + 72px)",zIndex:Ee("toast"),boxShadow:"var(--graview-lift-high)"},display:"grid",gap:8,padding:12,borderRadius:12,border:"1px dashed var(--graview-accent)",background:"var(--graview-float)",fontSize:"0.875rem"},children:[(0,S.jsx)("p",{style:{margin:0,color:"var(--graview-ink-muted)"},children:r.batch!==void 0?`Done: ${r.took===1?"one change":`${r.took} changes`}, as one.`:`Proposed by AI \xB7 ${g.basis}`}),r.batch===void 0?(0,S.jsx)("ul",{style:{margin:0,padding:0,listStyle:"none",display:"grid",gap:4},children:g.proposals.map(u=>(0,S.jsx)("li",{"data-ghost-proposal":u.id,children:(0,S.jsxs)("label",{style:{display:"flex",alignItems:"baseline",gap:8,cursor:"pointer"},children:[(0,S.jsx)("input",{type:"checkbox",checked:!d.has(u.id),onChange:v=>{let P=new Set(d);v.target.checked?P.delete(u.id):P.add(u.id),a(P)}}),(0,S.jsx)("span",{style:{fontStyle:"italic",color:"var(--graview-ink)"},children:u.said}),u.confidence!==void 0?(0,S.jsxs)("span",{style:{color:"var(--graview-ink-faint)"},children:[Math.round(u.confidence*100),"% sure"]}):null]})},u.id))}):null,r.refused?(0,S.jsx)("p",{role:"alert",style:{margin:0,color:"var(--graview-warn)"},children:r.refused}):null,(0,S.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:r.batch===void 0?(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)("button",{type:"button","data-testid":"ghost-accept",disabled:b.length===0,onClick:h,style:ye,children:b.length===g.proposals.length?"Accept":`Accept ${b.length} of ${g.proposals.length}`}),(0,S.jsx)("button",{type:"button","data-testid":"ghost-dismiss",onClick:x,style:ye,children:"Dismiss"})]}):(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)("button",{type:"button",ref:c,"data-testid":"ghost-undo",onClick:m,style:ye,children:"Undo"}),(0,S.jsx)("button",{type:"button","data-testid":"ghost-close",onClick:$,style:ye,children:"Close"})]})})]})}export{Fe as a,K as b,de as c,fn as d,Rn as e,Ze as f,en as g,ee as h,kn as i,bn as j,An as k,Fn as l,Gn as m,Bn as n};
@@ -1,17 +0,0 @@
1
- import{a as j,b as D}from"./chunk.GXLAZGYT.js";import"./chunk.IB32NOV5.js";import"./chunk.ZEW2OOZ5.js";import"./chunk.7YQYWOZR.js";import{a as I}from"./chunk.3SM2CHKF.js";import"./chunk.E77K6KBX.js";import"./chunk.UT6642FC.js";import{a as k,b as V}from"./chunk.MB7LKKUD.js";import"./chunk.VHWUGSFW.js";import"./chunk.P75TPZWT.js";import"./chunk.6W7J76TK.js";import"./chunk.FUR4IHWG.js";import"./chunk.2B4WVCVV.js";import"./chunk.AAZFVCSP.js";import"./chunk.GZLYTPE7.js";import"./chunk.4B73P2WA.js";import"./chunk.IMRCAU4T.js";import"./chunk.BZ5VLPKB.js";import{F as Q,Q as H,ta as x}from"./chunk.6II4BONS.js";import{_ as B,gc as q}from"./chunk.F5BCCGFK.js";import{b}from"./chunk.AJZBJBMO.js";var t=b(Q(),1);var a=b(H(),1);function U(r){let n=[];return r.applied.length>0&&r.intent&&n.push(`${r.intent}.`),r.unchanged.length>0&&n.push(`${r.unchanged.length} already so.`),r.allOrNothing&&n.push("None of it was kept."),n.join(" ")}function ie({store:r,chosen:n,principal:d,context:v,via:S,anchor:E,of:g,onChooseAll:A,onClear:p,onActed:F}){let[K,W]=(0,t.useState)(0);(0,t.useEffect)(()=>r.subscribe(()=>W(e=>e+1)),[r]);let m=n.join(`
2
- `),{acts:h,withheld:N}=(0,t.useMemo)(()=>j(r,n,{...d?{principal:d}:{},...v?{context:v}:{}}),[r,m,d,v,K]),[L,u]=(0,t.useState)(!1),[l,c]=(0,t.useState)(null),[s,O]=(0,t.useState)(null),w=(0,t.useRef)(null),M=(0,t.useId)(),f=(0,t.useMemo)(()=>[...new Set(n.map(e=>r.graph.getNode(e)?.kind))],[r,m]),_=f.length===1&&f[0]?`${B(r.schema,f[0],n.length)} chosen`:`${n.length} chosen`,P=typeof matchMedia=="function"&&matchMedia("(pointer: coarse), (max-width: 599px)").matches?2:3,C=h.filter(e=>!e.more),G=C.slice(0,P),T=[...C.slice(P),...h.filter(e=>e.more)];(0,t.useEffect)(()=>{c(null),u(!1)},[m]),(0,t.useLayoutEffect)(()=>{let e=w.current;if(!e)return;if(typeof e.showPopover=="function"&&!x(e))try{e.showPopover()}catch{}let i=()=>{V(e,E?.()??null),dispatchEvent(new Event(k))};i(),addEventListener("resize",i),addEventListener("scroll",i,!0);let o=typeof ResizeObserver=="function"?new ResizeObserver(i):null;return o?.observe(e),()=>{if(o?.disconnect(),removeEventListener("resize",i),removeEventListener("scroll",i,!0),e.isConnected&&x(e))try{e.hidePopover()}catch{}dispatchEvent(new Event(k))}},[E]);let y=(0,t.useRef)({asking:l,onClear:p});y.current={asking:l,onClear:p},(0,t.useEffect)(()=>{let e=i=>{if(i.key!=="Escape"||i.defaultPrevented)return;let o=document.activeElement;if(!(!(w.current?.contains(o)??!1)&&(o instanceof HTMLTextAreaElement||o instanceof HTMLInputElement&&o.type!=="checkbox"||o instanceof HTMLSelectElement))){if(i.preventDefault(),i.stopPropagation(),y.current.asking){c(null);return}y.current.onClear()}};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[]);let R=(e,i={})=>{let o=D(r,{mutation:e.mutation,subject:e.subject,args:{...e.args,...i},label:e.label},n,{...d?{author:d}:{},...S?{via:S}:{},...v?{context:v}:{}});c(null),u(!1),O(o.refused.length>0||o.applied.length===0?o:null),F(o.refused.map(z=>z.id))},J=e=>{O(null),u(!1),e.open.length>0?c(e):R(e)},$=e=>(0,a.jsxs)("button",{type:"button",className:"graview-several-act","data-testid":"several-act","data-act":e.id,"data-mutation":e.mutation,...e.destructive?{"data-tone":"warn"}:{},"aria-pressed":l?.id===e.id?!0:void 0,onClick:()=>J(e),children:[e.label,e.open.length>0?"\u2026":""]},e.id);return(0,a.jsxs)("div",{ref:w,popover:"manual",role:"region","aria-label":"The chosen records",className:"graview-several-bar","data-testid":"several-bar","data-graview-foot":"","data-graview-overlay":"","data-graview-popover":"","data-graview-offstage":"",style:X,children:[(0,a.jsx)("style",{children:Y}),(0,a.jsxs)("div",{className:"graview-several-line",children:[(0,a.jsx)("span",{role:"status","aria-live":"polite",className:"graview-several-count","data-testid":"several-count",children:_}),(0,a.jsxs)("div",{role:"group","aria-label":`What to do with the ${n.length} chosen`,className:"graview-several-acts",children:[G.map($),T.length>0?(0,a.jsx)("button",{type:"button",className:"graview-several-act","data-testid":"several-more","aria-expanded":L,"aria-controls":M,onClick:()=>u(e=>!e),children:"More"}):null,A&&g!==void 0&&g>n.length?(0,a.jsxs)("button",{type:"button",className:"graview-several-quiet","data-testid":"several-all",onClick:A,children:["Choose all ",g]}):null,(0,a.jsx)("button",{type:"button",className:"graview-several-quiet","data-testid":"several-clear","aria-keyshortcuts":"Escape",title:"Put the choice down \u2014 Escape",onClick:p,children:"Clear"})]})]}),L?(0,a.jsx)("div",{id:M,role:"group","aria-label":"More",className:"graview-several-acts","data-testid":"several-more-acts",children:T.map($)}):null,h.length===0?(0,a.jsx)("p",{className:"graview-several-said","data-testid":"several-none",children:N.length>0?`Nothing here can be done to all of them by you: ${N[0].message}`:"Nothing can be done to all of these at once."}):null,l?(0,a.jsx)("div",{className:"graview-several-ask",role:"group","aria-label":`${l.label}, for all ${n.length}`,"data-testid":"several-ask",children:(0,a.jsx)(I,{store:r,affordance:l.affordance,onApply:e=>R(l,e),onCancel:()=>c(null)})}):null,s?(0,a.jsxs)("div",{role:"alert",className:"graview-several-said","data-testid":"several-outcome",children:[U(s),s.refused.length>0?(0,a.jsxs)(a.Fragment,{children:[" ",s.refused.length===1?"One was not changed, and is still chosen:":`${s.refused.length} were not changed, and are still chosen:`,(0,a.jsx)("ul",{"data-testid":"several-refused",children:s.refused.map(e=>(0,a.jsxs)("li",{"data-record":e.id,children:["\u201C",e.label,"\u201D \u2014 ",e.message]},e.id))})]}):null]}):null]})}var X={position:"fixed",inset:"auto",margin:0,zIndex:q("toast"),boxSizing:"border-box",width:"max-content",height:"auto",bottom:"calc(16px + env(safe-area-inset-bottom, 0px))",left:16,overflow:"visible"},Y=`
3
- .graview-several-bar{display:grid;gap:8px;padding:8px 10px;border:1px solid var(--graview-edge);border-radius:var(--graview-radius,12px);background:var(--graview-float);color:var(--graview-ink);box-shadow:var(--graview-lift-high);font-size:.875rem;line-height:1.4;max-height:70vh;overflow:auto}
4
- .graview-several-line{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}
5
- .graview-several-count{font-weight:600;white-space:nowrap}
6
- .graview-several-acts{display:flex;flex-wrap:wrap;align-items:center;gap:6px;min-width:0}
7
- .graview-several-act,.graview-several-quiet{min-height:32px;padding:0 12px;border-radius:8px;font:inherit;cursor:pointer;box-shadow:none}
8
- .graview-several-act{border:1px solid var(--graview-edge);background:transparent;color:var(--graview-ink);font-weight:600}
9
- .graview-several-act:hover,.graview-several-act[aria-pressed=true],.graview-several-act[aria-expanded=true]{background:color-mix(in srgb,var(--graview-accent) 14%,transparent)}
10
- .graview-several-act[data-tone=warn]{color:var(--graview-warn)}
11
- .graview-several-quiet{border:0;background:none;color:var(--graview-ink-muted);text-decoration:underline;text-underline-offset:2px}
12
- .graview-several-bar :focus-visible{outline:2px solid var(--graview-accent);outline-offset:2px}
13
- .graview-several-said{margin:0;max-width:52ch;overflow-wrap:anywhere}
14
- .graview-several-said ul{margin:4px 0 0;padding-left:18px}
15
- .graview-several-ask{padding:8px 4px 2px;border-top:1px solid var(--graview-edge)}
16
- @media (pointer: coarse){.graview-several-act,.graview-several-quiet{min-height:44px}}
17
- `;export{ie as SeveralBar};
@@ -1,5 +0,0 @@
1
- var lo="en-US",an=/^\d{4}-\d{2}-\d{2}$/,_t=/^\d{4}(-\d\d){2}[T ]\d\d:\d\d(:[\d.]+)?(Z|[+-][\d:]+)?$/,Fl=n=>!Number.isNaN(Date.parse(n)),dn=()=>new Date().toISOString().slice(0,10),fo,po;function qa(n){fo=$t(n.reader),po=$t(n.app)}var ho=n=>fo??$t(n)??po??lo,sn=new Map;function $t(n){if(n&&!sn.has(n)){let e=!1;try{e=Intl.DateTimeFormat.supportedLocalesOf(n).length>0}catch{}sn.set(n,e)}return n&&sn.get(n)?n:void 0}function le(n,e,t,r){let o=`${t=ho(t)}${r?"#":"@"}${JSON.stringify(e)}`,i=sn.get(o);return i||sn.set(o,i=r?new Intl.NumberFormat(t,e):new Intl.DateTimeFormat(t,e)),i.format(n).replace(/ /g," ")}var we="UTC",Fn=n=>Date.UTC(+n.slice(0,4),+n.slice(5,7)-1,+n.slice(8,10));function fe(n,e){return an.test(n)?le(Fn(n),{year:"numeric",month:"short",day:"numeric",timeZone:we},e):n}function go(n,e,t,r=!1){if(!_t.test(n))return n;let o=/[Z+-][\d:]*$/.test(n.slice(16)),i=Date.parse(n.replace(" ","T")+(o?"":"Z"));return Number.isNaN(i)?n:le(i,{...e,hour:"numeric",minute:"2-digit",...o?r?{timeZoneName:"short"}:{}:{timeZone:we}},t)}var Rt=(n,e)=>go(n,{year:"numeric",month:"short",day:"numeric"},e,!0),Ha=(n,e)=>go(n,{},e);function re(n,e,t={maximumFractionDigits:2}){return Number.isFinite(n)?le(n,t,e,!0):String(n)}function Ja(n,e={},t){return an.test(n)?le(Fn(n),{weekday:e.weekday??"long",month:"short",day:"numeric",...e.year?{year:"numeric"}:{},timeZone:we},t):n}function Ya(n,e){return an.test(n)?le(Fn(n),{month:"short",day:"numeric",timeZone:we},e):n}function Xa(n,e={},t){if(!/^\d{4}-\d{2}/.test(n))return n;let r=e.year??!e.short;return le(Fn(`${n.slice(0,7)}-01`),{month:e.short?"short":"long",...r?{year:e.short?"2-digit":"numeric"}:{},timeZone:we},t)}var Qa=(n,e="short",t)=>le(Date.UTC(1970,0,4+n),{weekday:e,timeZone:we},t),ed=(n,e)=>le(Date.UTC(1970,0,1,0,Math.round(n)),{hour:"numeric",minute:"2-digit",timeZone:we},e),nd=/(?<![\w-])(\d{4}-\d{2}-\d{2})(?![\w-]|:)/g;function At(n,e){return n.includes("-")?n.replace(nd,t=>fe(t,e)):n}var cn=n=>n.charAt(0).toUpperCase()+n.slice(1),mo=(n,e="and")=>n.length>1?`${n.slice(0,-1).join(", ")} ${e} ${n.at(-1)}`:n[0]??"";function td(n,e){return{...e,kind:n,edges:e.edges??{}}}function Ot(n,e,t){let r=n?.lifecycle;if(!r)return!0;let o=e[r.field];return r.retired==="date"?typeof o!="string"||o.length===0?!0:o>=(t??dn()):!r.retired.includes(o)}function T(n,e){if(n?.label)return n.label(e);let t=e.label;return typeof t=="string"&&t.length>0?t:e.id}function rd(n){return n.title??C(n.name)}function C(n){let e=n.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_-]+/g," ").trim().toLowerCase();return cn(e)}function od(n,e,t){let r=n.tryDefinition(e);return`${re(t)} ${t===1?Y(r,e):J(n,e).toLowerCase()}`}function J(n,e){return n.tryDefinition(e)?.plural??`${C(e).toLowerCase()}s`}function id(n,e){return cn(J(n,e))}function sd(n,e){let t=J(n,e);return`All ${/^[A-Z][a-z]/.test(t)?t.charAt(0).toLowerCase()+t.slice(1):t}`}function Zn(n,e){let t=n?.computed&&Object.hasOwn(n.computed,e)?n.computed[e]:void 0;return n?.display?.labels?.[e]??(typeof t=="object"?t.label:void 0)??(e==="label"?"Name":C(e))}var ad=/^(u[nt]i|use|usu|uti|ubiq|eu|ewe|one|once)/,dd=/^(hour|honest|hono[ur]r?|heir)/;function yo(n){let e=C(n).toLowerCase();return dd.test(e)?"an":ad.test(e)?"a":/^[aeiou]/.test(e)?"an":"a"}function ze(n){return`${yo(n)} ${C(n).toLowerCase()}`}function Y(n,e){return n?.noun??C(e).toLowerCase()}function zt(n){let e=Object.values(n).filter(r=>typeof r=="number");return Object.entries(n).filter(([r,o])=>e.indexOf(+r)===-1).map(([r,o])=>o)}function Mt(n,e="|"){return n.map(t=>Tt(t)).join(e)}function bo(n,e){return typeof e=="bigint"?e.toString():e}var Et=class{constructor(e){this._getter=e,this._value=void 0}get value(){let e=this._getter;return e!==void 0&&(this._value=e(),this._getter=void 0),this._value}};function xo(n){return new Et(n)}function vo(n){return n==null}function Nt(n){let e=n.startsWith("^")?1:0,t=n.endsWith("$")?n.length-1:n.length;return n.slice(e,t)}function wo(n,e){let t=n/e,r=Math.round(t),o=4*Number.EPSILON*Math.max(Math.abs(t),1);return Math.abs(t-r)<o?0:t-r}function Cn(n,e,t){Object.defineProperty(n,e,{value:t,writable:!0,enumerable:!0,configurable:!0})}function ko(n){let e=Object.getOwnPropertyDescriptor(n,"shape");return e?.get?e.get.raw:e?.value}function It(n){return ko(n._zod.def)??n._zod.def.shape}function So(n,e,t){Object.defineProperty(n,e,{get(){let r=t();return Cn(this,e,r),r},enumerable:!0,configurable:!0})}function $o(n,e,t){e in n?Cn(n,e,t):n[e]=t}function cd(n,e,t,r){let o=It(e);for(let i of t){let s=Object.getOwnPropertyDescriptor(o,i);s.enumerable&&(s.get?So(n,i,()=>{let a=e._zod.def.shape[i];return r?r(a,i):a}):$o(n,i,r?r(s.value,i):s.value))}}function ud(n,e){for(let t of Reflect.ownKeys(e)){let r=Object.getOwnPropertyDescriptor(e,t);r.enumerable&&(r.get?So(n,t,()=>e[t]):$o(n,t,r.value))}}function _o(...n){let e={};for(let t of n){let r=Object.getOwnPropertyDescriptors(t);Object.assign(e,r)}return Object.defineProperties({},e)}var jt="captureStackTrace"in Error?Error.captureStackTrace:(...n)=>{};function Ln(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Dt(n){if(Ln(n)===!1)return!1;let e=n.constructor;if(e===void 0||typeof e!="function")return!0;let t=e.prototype;return!(Ln(t)===!1||Object.prototype.hasOwnProperty.call(t,"isPrototypeOf")===!1)}var Ro=new Set(["string","number","symbol"]);function ln(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Me(n,e,t){let r=new n._zod.constr(e??n._zod.def);return(!e||t?.parent)&&(r._zod.parent=n),r}function P(n){let e=n;if(!e)return{};if(typeof e=="string")return{error:()=>e};if(e?.message!==void 0){if(e?.error!==void 0)throw new Error("Cannot specify both `message` and `error` params");e.error=e.message}return delete e.message,typeof e.error=="string"?{...e,error:()=>e.error}:e}function Tt(n){return typeof n=="bigint"?n.toString()+"n":typeof n=="string"?`"${n}"`:`${n}`}function Ao(n){return Object.keys(n).filter(e=>n[e]._zod.optin!==void 0&&n[e]._zod.optout==="optional")}var Oo={safeint:[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]};function Po(n,e){if(!Dt(e))throw new Error("Invalid input to extend: expected a plain object");let t=n._zod.def.checks;if(t&&t.length>0){let o=It(n);for(let i of Reflect.ownKeys(e))if(Object.getOwnPropertyDescriptor(o,i)!==void 0)throw new Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}return Me(n,_o(n._zod.def,{shape:ld(n,e)}))}function ld(n,e){let t={};return cd(t,n,Reflect.ownKeys(It(n))),ud(t,e),t}function oe(n,e=0){if(n.aborted===!0)return!0;for(let t=e;t<n.issues.length;t++)if(n.issues[t]?.continue!==!0)return!0;return!1}function Eo(n,e=0){if(n.aborted===!0)return!0;for(let t=e;t<n.issues.length;t++)if(n.issues[t]?.continue===!1)return!0;return!1}function he(n,e){return e.map(t=>{var r;return(r=t).path??(r.path=[]),t.path.unshift(n),t})}function un(n){return typeof n=="string"?n:n?.message}function Ft(n,e,t){var r;for(let o=e;o<n.length;o++)(r=n[o]).schema??(r.schema=t)}function ie(n,e,t){var r;let o=n.inst?._zod?.traits;o?.has("$ZodType")&&(o.has("$ZodCheck")?(r=n).schema??(r.schema=n.inst):n.schema=n.inst);let i=n.schema!==n.inst?n.schema?._zod.def?.error:void 0,s=n.message?n.message:un(n.inst?._zod.def?.error?.(n))??un(i?.(n))??un(e?.error?.(n))??un(t.customError?.(n))??un(t.localeError?.(n))??"Invalid input",a={};for(let d of Object.keys(n))d==="inst"||d==="schema"||d==="continue"||d==="input"||d==="__proto__"||(a[d]=n[d]);return a.path??(a.path=[]),a.message=s,e?.reportInput&&(a.input=n.input),a}var fd=/[\uD800-\uDBFF]/;function Zt(n){let e=n.length;if(!fd.test(n))return e;let t=e;for(let r=0;r<e-1;r++)(n.charCodeAt(r)&64512)===55296&&(n.charCodeAt(r+1)&64512)===56320&&(t--,r++);return t}function Lt(n){return Array.isArray(n)?"array":typeof n=="string"?"string":"unknown"}function zo(n){let e=typeof n;switch(e){case"number":return Number.isNaN(n)?"nan":"number";case"object":{if(n===null)return"null";if(Array.isArray(n))return"array";let t=n;if(t&&Object.getPrototypeOf(t)!==Object.prototype&&"constructor"in t&&t.constructor)return t.constructor.name}}return e}function fn(...n){let[e,t,r]=n;return typeof e=="string"?{message:e,code:"custom",input:t,inst:r}:{...e}}function Mo(n,e){for(let t in e){let r=Object.getOwnPropertyDescriptor(e,t);r.get?Object.defineProperty(n,t,{...r,enumerable:!1}):pd(n,t,r.value)}}function ke(n,e,t,r=!0){return Object.defineProperty(n,e,{configurable:!0,writable:!0,enumerable:r,value:t}),t}function Ct(n,e,t){return ke(n,e,t,!1)}function pd(n,e,t){Object.defineProperty(n,e,{configurable:!0,get(){return this==null?t:ke(this,e,t.bind(this))},set(r){ke(this,e,r)}})}function hd(n,e){let t=Object.getPrototypeOf(n);return e in t?void 0:t}var Pt,pe=!1,gd={configurable:!0,get(){pe=!0}};function X(n,e,t){let r=Object.getPrototypeOf(n._zod);if(e in r&&Pt!==n._zod){Pt=void 0;return}Pt=n._zod,Object.defineProperty(r,e,{configurable:!0,get(){Object.defineProperty(this,e,gd);let o=pe;pe=!1;try{let i=t(this);return pe?delete this[e]:Object.defineProperty(this,e,{configurable:!0,writable:!0,value:i}),pe=pe||o,i}catch(i){throw delete this[e],pe=pe||o,i}},set(o){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:o})}})}function No(n,e,t,r){let o=hd(n,e);o&&Object.defineProperty(o,e,{configurable:!0,get(){let i={configurable:!0,writable:!0,enumerable:r,value:void 0};return Object.defineProperty(this,e,i),i.value=t(this),Object.defineProperty(this,e,i),i.value},set(i){Object.defineProperty(this,e,{configurable:!0,writable:!0,enumerable:r,value:i})}})}var Io;var Gt={value:void 0,enumerable:!1},jo="captureStackTrace"in Error?Error:null;function md(n){let e=jo;if(e){let t=e.stackTraceLimit;if(typeof t=="number"){try{e.stackTraceLimit=0}catch{return jo=null,new n}try{return new n}finally{e.stackTraceLimit=t}}}return new n}function A(n,e,t,r){let o={};function i(c){this.def=c,this.constr=p,this.traits=new Set}i.prototype=o;let s=t,a=s&&new WeakSet;function d(c,f){if(c._zod){if(c._zod.traits.has(n))return}else{Gt.value=new i(f);try{Object.defineProperty(c,"_zod",Gt)}finally{Gt.value=void 0}}if(c._zod.traits.add(n),e(c,f),a){let h=Object.getPrototypeOf(c),x=c._zod.constr.prototype,b=h;for(;b&&b!==x;)b=Object.getPrototypeOf(b);let k=b??h;a.has(k)||(a.add(k),Mo(k,s))}let g=p.prototype;for(let h in g)Object.prototype.hasOwnProperty.call(g,h)&&(h in c||(c[h]=g[h].bind(c)))}let l=r?.Parent??Object;class u extends l{}Object.defineProperty(u,"name",{value:n});function p(c){let f=r?.Parent?md(u):this;d(f,c);let g=f._zod.deferred;if(g){for(let x of g)x();f._zod.deferred=void 0}let h=globalThis.__zod_globalConfig?.postProcessor;return h&&h(f),f}return Object.defineProperty(p,"init",{value:d}),Object.defineProperty(p,Symbol.hasInstance,{value:c=>r?.Parent&&c instanceof r.Parent?!0:c?._zod?.traits?.has(n)}),Object.defineProperty(p,"name",{value:n}),p}var ae=class extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}};(Io=globalThis).__zod_globalConfig??(Io.__zod_globalConfig={});var Ne=globalThis.__zod_globalConfig;function V(n){return n&&Object.assign(Ne,n),Ne}function yd(){let n=this._zod;return n.message??(n.message=JSON.stringify(n.def,bo,2)),n.message}function bd(n){this._zod.message=n}var xd={get:yd,set:bd,enumerable:!0,configurable:!0},Ut={value:void 0,enumerable:!1},Do=new WeakSet([Object.prototype,Error.prototype]),To=(n,e)=>{n.name="$ZodError",Ut.value=e,Object.defineProperty(n,"issues",Ut),Ut.value=void 0,Object.defineProperty(n,"message",xd);let t=Object.getPrototypeOf(n);Do.has(t)||(Do.add(t),Object.defineProperty(t,"toString",{configurable:!0,enumerable:!1,get(){let r=()=>this.message;return Object.defineProperty(this,"toString",{value:r,configurable:!0,writable:!0}),r},set(r){Object.defineProperty(this,"toString",{value:r,configurable:!0,writable:!0})}}))},Vl=A("$ZodError",To),pn=A("$ZodError",To,void 0,{Parent:Error});var wd=n=>{let e=(t,r,o,i)=>{let s=o?{...o,async:!1}:{async:!1},a=t._zod.run({value:r,issues:[]},s);if(a instanceof Promise)throw new ae;if(a.issues.length){let d=new(i?.Err??n)(a.issues.map(l=>ie(l,s,V())));throw jt(d,i?.callee??e),d}return a.value};return e},Kt=wd(pn),kd=n=>{let e=async(t,r,o,i)=>{let s=o?{...o,async:!0}:{async:!0},a=t._zod.run({value:r,issues:[]},s);if(a instanceof Promise&&(a=await a),a.issues.length){let d=new(i?.Err??n)(a.issues.map(l=>ie(l,s,V())));throw jt(d,i?.callee??e),d}return a.value};return e},Vt=kd(pn),Sd=n=>(e,t,r)=>{let o=r?{...r,async:!1}:{async:!1},i=e._zod.run({value:t,issues:[]},o);if(i instanceof Promise)throw new ae;return i.issues.length?Fo(n,i.issues,o):{success:!0,data:i.value}},Wt=Sd(pn);function Fo(n,e,t){let r;return{success:!1,get error(){return r||(r=new n(e.map(o=>ie(o,t,V()))),e=void 0,t=void 0),r},set error(o){r=o,e=void 0,t=void 0}}}var $d=n=>async(e,t,r)=>{let o=r?{...r,async:!0}:{async:!0},i=e._zod.run({value:t,issues:[]},o);return i instanceof Promise&&(i=await i),i.issues.length?Fo(n,i.issues,o):{success:!0,data:i.value}},qt=$d(pn);var Zo=/^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/;var Lo=/^https?$/;var Co=/^[\s\S]{0,}$/;var Ht=/^-?\d+(?:\.\d+)?$/,Go=/^(?:true|false)$/i,Bo=/^null$/i;var W=A("$ZodCheck",(n,e)=>{var t;n._zod??(n._zod={}),n._zod.def=e,(t=n._zod).onattach??(t.onattach=[])});var Uo=n=>{let e=n.value;return!vo(e)&&e.length!==void 0},Gn={number:"number",bigint:"bigint",object:"date"},Ko=A("$ZodCheckLessThan",(n,e)=>{W.init(n,e);let t=Gn[typeof e.value];n._zod.check=r=>{(e.inclusive?r.value<=e.value:r.value<e.value)||r.issues.push({origin:Gn[typeof r.value]??t,code:"too_big",maximum:typeof e.value=="object"?e.value.getTime():e.value,input:r.value,inclusive:e.inclusive,inst:n,continue:!e.abort})}}),Vo=A("$ZodCheckGreaterThan",(n,e)=>{W.init(n,e);let t=Gn[typeof e.value];n._zod.check=r=>{(e.inclusive?r.value>=e.value:r.value>e.value)||r.issues.push({origin:Gn[typeof r.value]??t,code:"too_small",minimum:typeof e.value=="object"?e.value.getTime():e.value,input:r.value,inclusive:e.inclusive,inst:n,continue:!e.abort})}}),Wo=A("$ZodCheckMultipleOf",(n,e)=>{W.init(n,e),n._zod.check=t=>{if(typeof t.value!=typeof e.value)throw new Error("Cannot mix number and bigint in multiple_of check.");(typeof t.value=="bigint"?e.value!==BigInt(0)&&t.value%e.value===BigInt(0):wo(t.value,e.value)===0)||t.issues.push({origin:typeof t.value,code:"not_multiple_of",divisor:e.value,input:t.value,inst:n,continue:!e.abort})}}),qo=A("$ZodCheckNumberFormat",(n,e)=>{W.init(n,e),e.format=e.format||"float64";let t=e.format?.includes("int"),r=t?"int":"number",[o,i]=Oo[e.format];n._zod.check=s=>{let a=s.value;if(t){if(!Number.isInteger(a)){s.issues.push({expected:r,format:e.format,code:"invalid_type",continue:!1,input:a,inst:n});return}if(!Number.isSafeInteger(a)){a>0?s.issues.push({input:a,code:"too_big",maximum:Number.MAX_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:n,origin:r,inclusive:!0,continue:!e.abort}):s.issues.push({input:a,code:"too_small",minimum:Number.MIN_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:n,origin:r,inclusive:!0,continue:!e.abort});return}}a<o&&s.issues.push({origin:"number",input:a,code:"too_small",minimum:o,inclusive:!0,inst:n,continue:!e.abort}),a>i&&s.issues.push({origin:"number",input:a,code:"too_big",maximum:i,inclusive:!0,inst:n,continue:!e.abort})}});var Ho=A("$ZodCheckMaxLength",(n,e)=>{var t;W.init(n,e),(t=n._zod.def).when??(t.when=Uo),n._zod.check=r=>{let o=r.value,i=o.length;if((typeof o=="string"&&i>e.maximum?Zt(o):i)<=e.maximum)return;let a=Lt(o);r.issues.push({origin:a,code:"too_big",maximum:e.maximum,inclusive:!0,input:o,inst:n,continue:!e.abort})}}),Jo=A("$ZodCheckMinLength",(n,e)=>{var t;W.init(n,e),(t=n._zod.def).when??(t.when=Uo),n._zod.check=r=>{let o=r.value,i=o.length;if((typeof o=="string"&&i>=e.minimum&&i<e.minimum*2?Zt(o):i)>=e.minimum)return;let a=Lt(o);r.issues.push({origin:a,code:"too_small",minimum:e.minimum,inclusive:!0,input:o,inst:n,continue:!e.abort})}});var Yt=A("$ZodCheckStringFormat",(n,e)=>{var t,r;W.init(n,e),e.pattern?(t=n._zod).check??(t.check=o=>{e.pattern.lastIndex=0,!e.pattern.test(o.value)&&o.issues.push({origin:"string",code:"invalid_format",format:e.format,input:o.value,...e.pattern?{pattern:e.pattern.toString()}:{},inst:n,continue:!e.abort})}):(r=n._zod).check??(r.check=()=>{})}),Yo=A("$ZodCheckRegex",(n,e)=>{Yt.init(n,e),n._zod.check=t=>{e.pattern.lastIndex=0,!e.pattern.test(t.value)&&t.issues.push({origin:"string",code:"invalid_format",format:"regex",input:t.value,pattern:e.pattern.toString(),inst:n,continue:!e.abort})}});var Qo={major:4,minor:6,patch:5};var Z=A("$ZodType",(n,e)=>{var t;n??(n={}),n._zod.def=e,n._zod.bag=n._zod.bag||{},n._zod.version=Qo;let r=n._zod.def.checks,o=n._zod.traits.has("$ZodCheck")?[n,...r??[]]:r?.length?[...r]:[];for(let i of o)for(let s of i._zod.onattach)s(n);if(o.length===0)(t=n._zod).deferred??(t.deferred=[]),n._zod.deferred?.push(()=>{n._zod.run=n._zod.parse});else{let i=(a,d,l)=>{if(a.memo)return a;let u=oe(a),p;for(let c of d){if(c._zod.def.when){if(Eo(a)||!c._zod.def.when(a))continue}else if(u)continue;let f=a.issues.length,g=c._zod.check(a);if(g instanceof Promise&&l?.async===!1)throw new ae;if(p||g instanceof Promise)p=(p??Promise.resolve()).then(async()=>{await g,a.issues.length!==f&&(Ft(a.issues,f,n),u||(u=oe(a,f)))});else{if(a.issues.length===f)continue;Ft(a.issues,f,n),u||(u=oe(a,f))}}return p?p.then(()=>a):a},s=(a,d,l)=>{if(oe(a))return a.aborted=!0,a;let u=i(d,o,l);if(u instanceof Promise){if(l.async===!1)throw new ae;return u.then(p=>n._zod.parse(p,l))}return n._zod.parse(u,l)};n._zod.run=(a,d)=>{if(d.skipChecks)return n._zod.parse(a,d);if(d.direction==="backward"){let u=n._zod.parse({value:a.value,issues:[]},{...d,skipChecks:!0});return u instanceof Promise?u.then(p=>s(p,a,d)):s(u,a,d)}let l=n._zod.parse(a,d);if(l instanceof Promise){if(d.async===!1)throw new ae;return l.then(u=>i(u,o,d))}return i(l,o,d)}}},{get"~standard"(){return Ct(this,"~standard",Rd(this))},set"~standard"(n){ke(this,"~standard",n)}}),ii=(n,e)=>n.issues.length?{issues:n.issues.map(t=>ie(t,e,V()))}:{value:n.value};async function _d(n,e){let t={async:!0};return ii(await n._zod.run({value:e,issues:[]},t),t)}function Rd(n){return{validate:e=>{let t={async:!1};try{let r=n._zod.run({value:e,issues:[]},t);if(!(r instanceof Promise))return ii(r,t)}catch{}return _d(n,e)},vendor:"zod",version:1}}var Xt=A("$ZodString",(n,e)=>{Z.init(n,e),n._zod.pattern=e.pattern??Co,n._zod.parse=(t,r)=>{if(e.coerce)try{t.value=String(t.value)}catch{}return typeof t.value=="string"||t.issues.push({expected:"string",code:"invalid_type",input:t.value,inst:n}),t}}),Kn=A("$ZodStringFormat",(n,e)=>{Yt.init(n,e),Xt.init(n,e)});var si=A("$ZodEmail",(n,e)=>{e.pattern??(e.pattern=Zo),Kn.init(n,e)}),ai=1,Bn=2;function Ad(n){try{return typeof URL<"u"&&typeof URL.canParse=="function"?URL.canParse(n):(new URL(n),!0)}catch{return!1}}function Od(n,e){return!("normalize"in e)&&!("hostname"in e)&&!("protocol"in e)?Ad(n)||Bn:Pd(n,e)}function Pd(n,e){if(!e.normalize&&e.protocol?.source===Lo.source&&!/^https?:\/\//i.test(n))return ai;try{if(typeof URL<"u"){let t=URL;if(typeof t.parse=="function")return t.parse(n)??Bn}return new URL(n)}catch{return Bn}}var Ed=/[\t\n\r]/g;function ei(n){return n.replace(Ed,"")}function zd(n,e){return e.lastIndex=0,e.test(n.hostname)}function Md(n,e){return e.lastIndex=0,e.test(n.protocol.endsWith(":")?n.protocol.slice(0,-1):n.protocol)}var di=A("$ZodURL",(n,e)=>{Kn.init(n,e),n._zod.check=t=>{try{let r=t.value.trim(),o=Od(r,e);if(o===ai){t.issues.push({code:"invalid_format",format:"url",note:"Invalid URL format",input:t.value,inst:n,continue:!e.abort});return}if(o===Bn){t.issues.push({code:"invalid_format",format:"url",input:t.value,inst:n,continue:!e.abort});return}if(o===!0){t.value=ei(r);return}e.hostname&&!zd(o,e.hostname)&&t.issues.push({code:"invalid_format",format:"url",note:"Invalid hostname",pattern:e.hostname.source,input:t.value,inst:n,continue:!e.abort}),e.protocol&&!Md(o,e.protocol)&&t.issues.push({code:"invalid_format",format:"url",note:"Invalid protocol",pattern:e.protocol.source,input:t.value,inst:n,continue:!e.abort}),t.value=e.normalize?o.href:ei(r);return}catch{t.issues.push({code:"invalid_format",format:"url",input:t.value,inst:n,continue:!e.abort})}}});var Qt=A("$ZodNumber",(n,e)=>{Z.init(n,e),n._zod.pattern=Ht,n._zod.parse=(t,r)=>{if(e.coerce)try{t.value=Number(t.value)}catch{}let o=t.value;if(typeof o=="number"&&!Number.isNaN(o)&&Number.isFinite(o))return t;let i=typeof o=="number"?Number.isNaN(o)?"NaN":Number.isFinite(o)?void 0:String(o):void 0;return t.issues.push({expected:"number",code:"invalid_type",input:o,inst:n,...i?{received:i}:{}}),t}}),ci=A("$ZodNumberFormat",(n,e)=>{qo.init(n,e),Qt.init(n,e)}),ui=A("$ZodBoolean",(n,e)=>{Z.init(n,e),n._zod.pattern=Go,n._zod.parse=(t,r)=>{if(e.coerce)try{t.value=!!t.value}catch{}let o=t.value;return typeof o=="boolean"||t.issues.push({expected:"boolean",code:"invalid_type",input:o,inst:n}),t}});var li=A("$ZodNull",(n,e)=>{Z.init(n,e),n._zod.pattern=Bo,n._zod.values=new Set([null]),n._zod.parse=(t,r)=>{let o=t.value;return o===null||t.issues.push({expected:"null",code:"invalid_type",input:o,inst:n}),t}});var fi=A("$ZodUnknown",(n,e)=>{Z.init(n,e),n._zod.parse=t=>t}),pi=A("$ZodNever",(n,e)=>{Z.init(n,e),n._zod.parse=(t,r)=>(t.issues.push({expected:"never",code:"invalid_type",input:t.value,inst:n}),t)});function ni(n,e,t){n.issues.length&&e.issues.push(...he(t,n.issues)),e.value[t]=n.value}var hi=A("$ZodArray",(n,e)=>{Z.init(n,e);let t=Ne.memoizer;t?.attach(n),n._zod.parse=(r,o)=>{let i=r.value;if(!Array.isArray(i))return r.issues.push({expected:"array",code:"invalid_type",input:i,inst:n}),r;r.value=t?t.alloc(n,r,Array(i.length),o):Array(i.length);let s=[],a=o?.abortEarly;for(let d=0;d<i.length;d++){let l=i[d],u=e.element._zod.run({value:l,issues:[]},o);if(u instanceof Promise)s.push(u.then(p=>ni(p,r,d)));else if(ni(u,r,d),a&&u.issues.length!==0&&oe(u))break}return s.length?Promise.all(s).then(()=>r):r}});function Un(n,e,t,r,o,i){let s=t in r,a=i==="optional";if(!(!s&&a&&o==="optional")){if(n.issues.length){if(o!==void 0&&a&&!s)return;e.issues.push(...he(t,n.issues))}if(!s&&o===void 0){n.issues.length||e.issues.push({code:"invalid_type",expected:"nonoptional",input:void 0,path:[t]});return}n.value===void 0?(s||o==="defaulted"&&!a)&&(e.value[t]=void 0):e.value[t]=n.value}}var Nd=[];function Id(n){let e=Object.keys(n.shape),t=Object.getOwnPropertySymbols(n.shape),r=t.length?t:Nd,o=r.length?[...e,...r]:e;for(let s of o)if(!n.shape?.[s]?._zod?.traits?.has("$ZodType"))throw new Error(`Invalid element at key "${String(s)}": expected a Zod schema`);let i=Ao(n.shape);return{...n,allKeys:o,symbolKeys:r,keySet:new Set(e),numKeys:e.length,optionalKeys:new Set(i)}}function jd(n,e,t,r,o,i,s){let a=[],d=o.keySet,l=o.catchall._zod,u=l.def.type,p=l.optin,c=l.optout,f=0;for(let g in e){if(s&&t.issues.length!==f){if(oe(t,f))break;f=t.issues.length}if(d.has(g))continue;if(g==="__proto__"){u==="never"&&a.push(g);continue}if(u==="never"){a.push(g);continue}let h=l.run({value:e[g],issues:[]},r);h instanceof Promise?n.push(h.then(x=>Un(x,t,g,e,p,c))):Un(h,t,g,e,p,c)}return a.length&&t.issues.push({code:"unrecognized_keys",keys:a,input:e,inst:i,continue:!0}),n.length?Promise.all(n).then(()=>t):t}var gi=A("$ZodObject",(n,e)=>{Z.init(n,e);let t=Object.getOwnPropertyDescriptor(e,"shape"),r=t?.get?t.get.raw:e.shape??{};if(r){let l=()=>{let u={...r};return Object.defineProperty(e,"shape",{value:u}),l.raw=u,u};l.raw=r,Object.defineProperty(e,"shape",{get:l})}let o=xo(()=>Id(e));X(n,"propValues",l=>{let u=l.def.shape,p={};for(let c in u){let f=u[c]._zod;if(f.values){Object.prototype.hasOwnProperty.call(p,c)||Cn(p,c,new Set);for(let g of f.values)p[c].add(g);f.optin!==void 0&&p[c].add(void 0)}}return p});let i=Ln,s=e.catchall,a,d=Ne.memoizer;d?.attach(n),n._zod.parse=(l,u)=>{a??(a=o.value);let p=l.value;if(!i(p))return l.issues.push({expected:"object",code:"invalid_type",input:p,inst:n}),l;l.value=d?d.alloc(n,l,{},u):{};let c=[],f=a.shape,g=u?.abortEarly,h=l.issues.length;for(let x of a.allKeys){if(g&&l.issues.length!==h){if(oe(l,h))break;h=l.issues.length}if(x==="__proto__")continue;let b=f[x],k=b._zod.optin,R=b._zod.optout,m=b._zod.run({value:p[x],issues:[]},u);m instanceof Promise?c.push(m.then(w=>Un(w,l,x,p,k,R))):Un(m,l,x,p,k,R)}return s?jd(c,p,l,u,o.value,n,g===!0):c.length?Promise.all(c).then(()=>l):l}});function ti(n,e,t,r){for(let i of n)if(i.issues.length===0)return e.value=i.value,e;let o=n.filter(i=>!oe(i));return o.length===1?(e.value=o[0].value,o[0]):(e.issues.push({code:"invalid_union",input:e.value,inst:t,errors:n.map(i=>i.issues.map(s=>ie(s,r,V())))}),e)}var mi=A("$ZodUnion",(n,e)=>{Z.init(n,e),X(n,"optin",r=>r.def.options.some(o=>o._zod.optin==="defaulted")?"defaulted":r.def.options.some(o=>o._zod.optin!==void 0)?"optional":void 0),X(n,"optout",r=>r.def.options.some(o=>o._zod.optout==="optional")?"optional":void 0),X(n,"values",r=>{if(r.def.options.every(o=>o._zod.values))return new Set(r.def.options.flatMap(o=>Array.from(o._zod.values)))}),X(n,"pattern",r=>{if(r.def.options.every(o=>o._zod.pattern)){let o=r.def.options.map(i=>i._zod.pattern);return new RegExp(`^(${o.map(i=>Nt(i.source)).join("|")})$`)}});let t=e.options.length===1?e.options[0]._zod.run:null;n._zod.parse=(r,o)=>{if(t)return t(r,o);let i=!1,s=[];for(let a of e.options){let d=a._zod.run({value:r.value,issues:[]},o);if(d instanceof Promise)s.push(d),i=!0;else{if(d.issues.length===0)return d;s.push(d)}}return i?Promise.all(s).then(a=>ti(a,r,n,o)):ti(s,r,n,o)}});var yi=A("$ZodRecord",(n,e)=>{Z.init(n,e);let t=Ne.memoizer;t?.attach(n),n._zod.parse=(r,o)=>{let i=r.value;if(!Dt(i))return r.issues.push({expected:"record",code:"invalid_type",input:i,inst:n}),r;let s=[],a=e.keyType._zod.values;if(a&&!e.partial){r.value=t?t.alloc(n,r,{},o):{};let d=new Set;for(let u of a)if(typeof u=="string"||typeof u=="number"||typeof u=="symbol"){if(d.add(typeof u=="number"?u.toString():u),u==="__proto__")continue;let p=e.keyType._zod.run({value:u,issues:[]},o);if(p instanceof Promise)throw new Error("Async schemas not supported in object keys currently");if(p.issues.length){r.issues.push({code:"invalid_key",origin:"record",issues:p.issues.map(g=>ie(g,o,V())),input:u,path:[u],inst:n});continue}let c=p.value;if(c==="__proto__")continue;let f=e.valueType._zod.run({value:i[u],issues:[]},o);f instanceof Promise?s.push(f.then(g=>{g.issues.length&&r.issues.push(...he(u,g.issues)),r.value[c]=g.value})):(f.issues.length&&r.issues.push(...he(u,f.issues)),r.value[c]=f.value)}let l;for(let u in i)if(!d.has(u))if(e.mode==="loose"){if(u==="__proto__")continue;r.value[u]=i[u]}else l=l??[],l.push(u);l&&l.length>0&&r.issues.push({code:"unrecognized_keys",input:i,inst:n,keys:l,continue:!0})}else{r.value=t?t.alloc(n,r,{},o):{};let d;for(let l of Reflect.ownKeys(i)){if(l==="__proto__"||!Object.prototype.propertyIsEnumerable.call(i,l))continue;let u=e.keyType._zod.run({value:l,issues:[]},o);if(u instanceof Promise)throw new Error("Async schemas not supported in object keys currently");if(typeof l=="string"&&Ht.test(l)&&u.issues.length){let g=e.keyType._zod.run({value:Number(l),issues:[]},o);if(g instanceof Promise)throw new Error("Async schemas not supported in object keys currently");g.issues.length===0&&(u=g)}if(u.issues.length){e.mode==="loose"?r.value[l]=i[l]:a?(d=d??[],d.push(l)):r.issues.push({code:"invalid_key",origin:"record",issues:u.issues.map(g=>ie(g,o,V())),input:l,path:[l],inst:n});continue}let c=u.value;if(c==="__proto__")continue;let f=e.valueType._zod.run({value:i[l],issues:[]},o);f instanceof Promise?s.push(f.then(g=>{g.issues.length&&r.issues.push(...he(l,g.issues)),r.value[c]=g.value})):(f.issues.length&&r.issues.push(...he(l,f.issues)),r.value[c]=f.value)}d&&d.length>0&&r.issues.push({code:"unrecognized_keys",input:i,inst:n,keys:d,continue:!0})}return s.length?Promise.all(s).then(()=>r):r}});var bi=A("$ZodEnum",(n,e)=>{Z.init(n,e);let t=zt(e.entries),r=new Set(t);n._zod.values=r,X(n,"pattern",o=>{let i=zt(o.def.entries).filter(s=>Ro.has(typeof s));return new RegExp(i.length?`^(${i.map(s=>ln(s.toString())).join("|")})$`:"^[^\\s\\S]$")}),n._zod.parse=(o,i)=>{let s=o.value;return r.has(s)||o.issues.push({code:"invalid_value",values:t,input:s,inst:n}),o}}),xi=A("$ZodLiteral",(n,e)=>{Z.init(n,e);let t=new Set(e.values);n._zod.values=t,X(n,"pattern",r=>{let o=r.def.values;return new RegExp(o.length?`^(${o.map(i=>typeof i=="string"?ln(i):i?ln(i.toString()):String(i)).join("|")})$`:"^[^\\s\\S]$")}),n._zod.parse=(r,o)=>{let i=r.value;return t.has(i)||r.issues.push({code:"invalid_value",values:e.values,input:i,inst:n}),r}});function ri(n,e){return n.value=e.issues.length?void 0:e.value,n}var vi=A("$ZodOptional",(n,e)=>{Z.init(n,e),X(n,"optin",t=>t.def.innerType._zod.optin==="defaulted"?"defaulted":"optional"),n._zod.optout="optional",X(n,"values",t=>{let r=t.def.innerType._zod.values;return r?new Set([...r,void 0]):void 0}),X(n,"pattern",t=>{let r=t.def.innerType._zod.pattern;return r?new RegExp(`^(${Nt(r.source)})?$`):void 0}),n._zod.parse=(t,r)=>{if(t.value===void 0){if(e.innerType._zod.optin!=="defaulted")return t;let o=e.innerType._zod.run({value:t.value,issues:[]},r);return o instanceof Promise?o.then(i=>ri(t,i)):ri(t,o)}return e.innerType._zod.run(t,r)}});var wi=A("$ZodCustom",(n,e)=>{W.init(n,e),Z.init(n,e),n._zod.parse=(t,r)=>t,n._zod.check=t=>{let r=t.value,o=e.fn(r);if(o instanceof Promise)return o.then(i=>oi(i,t,r,n));oi(o,t,r,n)}});function oi(n,e,t,r){if(!n){let o={code:"custom",input:t,inst:r,path:[...r._zod.def.path??[]],continue:!r._zod.def.abort};r._zod.def.params&&(o.params=r._zod.def.params),e.issues.push(fn(o))}}var Dd=()=>{let n={string:{unit:"characters",verb:"to have"},file:{unit:"bytes",verb:"to have"},array:{unit:"items",verb:"to have"},set:{unit:"items",verb:"to have"},map:{unit:"entries",verb:"to have"}};function e(i){return n[i]??null}let t={regex:"input",email:"email address",url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO datetime",date:"ISO date",time:"ISO time",duration:"ISO duration",ipv4:"IPv4 address",ipv6:"IPv6 address",mac:"MAC address",cidrv4:"IPv4 range",cidrv6:"IPv6 range",base64:"base64-encoded string",base64url:"base64url-encoded string",json_string:"JSON string",e164:"E.164 number",currency_code:"currency code",credit_card:"credit card number",iban:"IBAN",jwt:"JWT",template_literal:"input"},r={nan:"NaN"};function o(i,s){return i==="number"&&typeof s=="number"&&!Number.isFinite(s)?String(s):r[i]??i}return i=>{switch(i.code){case"invalid_type":{let s=o(i.expected),a=zo(i.input),d=o(a,i.input);return`Invalid input: expected ${s}, received ${d}`}case"invalid_value":return i.values.length===1?`Invalid input: expected ${Tt(i.values[0])}`:`Invalid option: expected one of ${Mt(i.values,"|")}`;case"too_big":{let s=i.exact?"exactly ":i.inclusive?"<=":"<",a=e(i.origin);return a?`Too big: expected ${i.origin??"value"} to have ${s}${i.maximum.toString()} ${a.unit??"elements"}`:`Too big: expected ${i.origin??"value"} to be ${s}${i.maximum.toString()}`}case"too_small":{let s=i.exact?"exactly ":i.inclusive?">=":">",a=e(i.origin);return a?`Too small: expected ${i.origin} to have ${s}${i.minimum.toString()} ${a.unit}`:`Too small: expected ${i.origin} to be ${s}${i.minimum.toString()}`}case"invalid_format":{let s=i;return s.format==="starts_with"?`Invalid string: must start with "${s.prefix}"`:s.format==="ends_with"?`Invalid string: must end with "${s.suffix}"`:s.format==="includes"?`Invalid string: must include "${s.includes}"`:s.format==="regex"?`Invalid string: must match pattern ${s.pattern}`:`Invalid ${t[s.format]??i.format}`}case"not_multiple_of":return`Invalid number: must be a multiple of ${i.divisor}`;case"unrecognized_keys":return`Unrecognized key${i.keys.length>1?"s":""}: ${Mt(i.keys,", ")}`;case"invalid_key":return`Invalid key in ${i.origin}`;case"invalid_union":return i.options&&Array.isArray(i.options)&&i.options.length>0?`Invalid discriminator value. Expected ${i.options.map(a=>`'${a}'`).join(" | ")}`:i.inclusive===!1?"Invalid input: more than one option matched":"Invalid input";case"invalid_element":return`Invalid value in ${i.origin}`;default:return"Invalid input"}}};function ki(){return{localeError:Dd()}}var Si;var er=class{constructor(){this._map=new WeakMap,this._idmap=new Map}add(e,...t){let r=t[0];return this._map.set(e,r),r&&typeof r=="object"&&"id"in r&&this._idmap.set(r.id,e),this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(e){let t=this._map.get(e);return t&&typeof t=="object"&&"id"in t&&this._idmap.delete(t.id),this._map.delete(e),this}get(e){let t=e._zod.parent;if(t){let r={...this.get(t)??{}};delete r.id;let o={...r,...this._map.get(e)};return Object.keys(o).length?o:void 0}return this._map.get(e)}has(e){return this._map.has(e)}};function $i(){return new er}(Si=globalThis).__zod_globalRegistry??(Si.__zod_globalRegistry=$i());var Ie=globalThis.__zod_globalRegistry;function _i(n){return n.checks&&(n.checks=[...n.checks]),n}function Ri(n,e){return new n(_i({type:"string",...P(e)}))}function Ai(n,e){return new n({type:"string",format:"email",check:"string_format",abort:!1,...P(e)})}function Oi(n,e){return new n({type:"string",format:"url",check:"string_format",abort:!1,...P(e)})}function Pi(n,e){return new n(_i({type:"number",checks:[],...P(e)}))}function Ei(n,e){return new n({type:"number",check:"number_format",abort:!1,format:"safeint",...P(e)})}function zi(n,e){return new n({type:"boolean",...P(e)})}function Mi(n,e){return new n({type:"null",...P(e)})}function Ni(n){return new n({type:"unknown"})}function Ii(n,e){return new n({type:"never",...P(e)})}function ji(n,e){return new Ko({check:"less_than",...P(e),value:n,inclusive:!0})}function Di(n,e){return new Vo({check:"greater_than",...P(e),value:n,inclusive:!0})}function Ld(n,e){return new Wo({check:"multiple_of",...P(e),value:n})}function nr(n,e){return new Ho({check:"max_length",...P(e),maximum:n})}function hn(n,e){return new Jo({check:"min_length",...P(e),minimum:n})}function gn(n,e){return new Yo({check:"string_format",format:"regex",...P(e),pattern:n})}function Ti(n,e,t){return new n({type:"custom",check:"custom",fn:e,...P(t)})}function Fi(n,e){let t=Cd(r=>(r.addIssue=o=>{if(typeof o=="string")r.issues.push(fn(o,r.value,t._zod.def));else{let i=o;i.fatal&&(i.continue=!1),i.code??(i.code="custom"),"input"in i||(i.input=r.value),i.inst??(i.inst=t),i.continue??(i.continue=!t._zod.def.abort),r.issues.push(fn(i))}},n(r.value,r)),e);return t}function Cd(n,e){let t=new W({check:"custom",...P(e)});return t._zod.check=n,t}function Zi(n){let e=new W({check:"describe"});return e._zod.onattach=[t=>{let r=Ie.get(t)??{};Ie.add(t,{...r,description:n})}],e._zod.check=()=>{},e}var U=A("ZodMiniType",(n,e)=>{if(!n._zod)throw new Error("Uninitialized schema in ZodMiniType.");Z.init(n,e),n.def=e,n.type=e.type},{get with(){return this.check},set with(n){ke(this,"with",n)},parse(n,e){return Kt(this,n,e,{callee:this.parse})},parseAsync(n,e){return Vt(this,n,e,{callee:this.parseAsync})},safeParse(n,e){return Wt(this,n,e)},safeParseAsync(n,e){return qt(this,n,e)},check(...n){let e=this.def;return this.clone({...e,checks:[...e.checks??[],...n.map(t=>typeof t=="function"?{_zod:{check:t,def:{check:"custom"},onattach:[]}}:t)]},{parent:!0})},clone(n,e){return Me(this,n,e)},brand(){return this},register(n,e){return n.add(this,e),this},apply(n,...e){return e.length===0?n(this):n(this,...e)}}),Ci=A("ZodMiniString",(n,e)=>{Xt.init(n,e),U.init(n,e)});function F(n){return Ri(Ci,n)}var Gi=A("ZodMiniStringFormat",(n,e)=>{Kn.init(n,e),Ci.init(n,e)}),Ud=A("ZodMiniEmail",(n,e)=>{si.init(n,e),Gi.init(n,e)});function Yh(n){return Ai(Ud,n)}var Kd=A("ZodMiniURL",(n,e)=>{di.init(n,e),Gi.init(n,e)});function Xh(n){return Oi(Kd,n)}var Bi=A("ZodMiniNumber",(n,e)=>{Qt.init(n,e),U.init(n,e)});function Vn(n){return Pi(Bi,n)}var Vd=A("ZodMiniNumberFormat",(n,e)=>{ci.init(n,e),Bi.init(n,e)});function Qh(n){return Ei(Vd,n)}var Wd=A("ZodMiniBoolean",(n,e)=>{ui.init(n,e),U.init(n,e)});function eg(n){return zi(Wd,n)}var qd=A("ZodMiniNull",(n,e)=>{li.init(n,e),U.init(n,e)});function ng(n){return Mi(qd,n)}var Hd=A("ZodMiniUnknown",(n,e)=>{fi.init(n,e),U.init(n,e)});function tr(){return Ni(Hd)}var Jd=A("ZodMiniNever",(n,e)=>{pi.init(n,e),U.init(n,e)});function Yd(n){return Ii(Jd,n)}var Xd=A("ZodMiniArray",(n,e)=>{hi.init(n,e),U.init(n,e)});function tg(n,e){return new Xd({type:"array",element:n,...P(e)})}var rr=A("ZodMiniObject",(n,e)=>{gi.init(n,e),U.init(n,e),No(n,"shape",t=>t._zod.def.shape,!1)});function je(n,e){let t={type:"object",shape:n??{},...P(e)};return new rr(t)}function Wn(n,e){return new rr({type:"object",shape:n,catchall:Yd(),...P(e)})}function rg(n,e){return new rr({type:"object",shape:n,catchall:tr(),...P(e)})}function Ui(n,e){return Po(n,e)}var Qd=A("ZodMiniUnion",(n,e)=>{mi.init(n,e),U.init(n,e)});function og(n,e){return new Qd({type:"union",options:n,...P(e)})}var Li=A("ZodMiniRecord",(n,e)=>{yi.init(n,e),U.init(n,e)});function ig(n,e,t){return!e||!e._zod?new Li({type:"record",keyType:F(),valueType:n,...P(e)}):new Li({type:"record",keyType:n,valueType:e,...P(t)})}var ec=A("ZodMiniEnum",(n,e)=>{bi.init(n,e),U.init(n,e),n.options=[...n._zod.values]});function Ki(n,e){let t=Array.isArray(n)?Object.fromEntries(n.map(r=>[r,r])):n;return new ec({type:"enum",entries:t,...P(e)})}var nc=A("ZodMiniLiteral",(n,e)=>{xi.init(n,e),U.init(n,e)});function Vi(n,e){return new nc({type:"literal",values:Array.isArray(n)?n:[n],...P(e)})}var tc=A("ZodMiniOptional",(n,e)=>{vi.init(n,e),U.init(n,e)});function de(n){return new tc({type:"optional",innerType:n})}var rc=A("ZodMiniCustom",(n,e)=>{wi.init(n,e),U.init(n,e)});function qn(n,e={}){return Ti(rc,n,e)}function sg(n,e){return Fi(n,e)}var ag=Zi;V().localeError||V(ki());var M=n=>typeof n=="object"&&n!==null?n._zod?.def:void 0,oc=n=>{if(typeof n!="object"||n===null||!("_zod"in n))return;let e=Ie.get(n)?.description;return typeof e=="string"?e:void 0};var ic=(n,e)=>n?.src?.(e)??e,Wi=n=>typeof n=="string"&&n.length<2049&&/^(?![^/?#]*:|\/\/)(?!(?:.*\/)?\.\.?(?:[/?#]|$))(?!.*%2e)[^\\\s]+$/i.test(n),or=(n,e=1)=>e>0&&n===void 0||Number.isInteger(n)&&n>=e;function ir(n){let e=n??{};return Wi(e.href)&&typeof e.name=="string"&&/^.{1,255}$/s.test(e.name)&&/^[\w.+-]{1,60}\/[\w.+-]{1,60}$/.test(e.type)&&or(e.bytes,0)&&or(e.width)&&or(e.height)&&(e.caption===void 0||typeof e.caption=="string"&&e.caption.length<501)}var qi=n=>n.type.startsWith("image/"),mn=n=>(Array.isArray(n)?n:[n]).filter(ir),Hi=Symbol.for("@graview/core:file"),sc=(n,e)=>(Object.defineProperty(M(n),Hi,{value:e,enumerable:!0}),n);function Ji(n){let e=M(n);return e?.[Hi]??(e?.innerType?Ji(e.innerType):void 0)}var ac=()=>({href:F(),name:F(),type:F(),bytes:Vn(),width:de(Vn()),height:de(Vn()),caption:de(F())});function dm(n){return sc(je(ac()).check(qn(e=>ir(e)&&(n==="file"||qi(e)),`${n==="image"?"an image":"a file"} the host stored, at a path on this host`)),n)}var Hn=/^(?:https?:\/\/[^\s<>"'`\\]+|@?[A-Za-z0-9][\w.~-]*(?:\/[\w.~-]+)*)$/,Jn=n=>typeof n=="string"&&n.length<501&&Hn.test(n);var Yi=n=>typeof n=="object"&&n!==null?n._zod?.def:void 0,dc=/^@(?:https?:\/\/[^\s<>"'`\\#?]+|[A-Za-z0-9][\w.~-]*(?:\/[\w.~-]+)*)\/[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;function Xi(n){if(typeof n!="string"||!n.startsWith("@")||!dc.test(n))return;let e=n.lastIndexOf("/"),t=n.slice(0,e),r=n.slice(e+1),o=/^@https?:\/\//.test(t)||!t.includes("/")?t.slice(1):t;return Jn(o)?{address:o,kind:r}:void 0}var cc=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*:\S[^\n]{0,199}$/,uc=n=>`${n.kind}:${n.id}`;function Qi(n,e){if(typeof n!="string"||!cc.test(n))return;let t=n.indexOf(":"),r=n.slice(0,t);return e.kinds.includes(r)?{address:e.address,kind:r,id:n.slice(t+1)}:void 0}function lc(n,e){return(Array.isArray(n)?n:n==null?[]:[n]).flatMap(r=>{let o=Qi(r,e);return o?[o]:[]})}var es=Symbol.for("@graview/core:linked"),fm=(n,e)=>(Object.defineProperty(Yi(n),es,{value:e,enumerable:!0}),n);function yn(n){let e=Yi(n);return e?e[es]??yn(e.innerType):void 0}function fc(n){let e=n?.fields?.shape??{},t=new Map;for(let[r,o]of Object.entries(e)){let i=yn(o);i&&t.set(r,i)}return t}function pc(n){if(n.to==="*"||n.to.length===0)return;let e=n.to.map(Xi);if(e.some(r=>!r))return;let t=e[0].address;if(!e.some(r=>r.address!==t))return{address:t,kinds:[...new Set(e.map(r=>r.kind))],cardinality:n.cardinality??"many",...n.description?{description:n.description}:{}}}var hc=n=>n.to!=="*"&&n.to.some(e=>typeof e=="string"&&e.startsWith("@"));function pm(n){return Object.fromEntries(Object.entries(n??{}).filter(([,e])=>!hc(e)))}function hm(n){let e=new Map;for(let[t,r]of Object.entries(n??{})){let o=pc(r);o&&e.set(t,o)}return e}var sr=new WeakMap;function gc(n,e){e?sr.set(n,e):sr.delete(n)}var ns=n=>sr.get(n);var Yn=["sun","mon","tue","wed","thu","fri","sat"],mc=["day","week","month","year"],Te=n=>`${n}Repeat`,xn=n=>n.endsWith("Repeat")&&n.length>6?n.slice(0,-6):void 0,os=/^\d{4}-\d{2}-\d{2}$/,is=Symbol.for("@graview/core:repeat");function Xn(n){let e=M(n);return!!e&&(e[is]===1||Xn(e.innerType))}var yc=n=>(Object.defineProperty(M(n),is,{value:1,enumerable:!0}),n),ar=(n,e,t)=>n===void 0||Number.isInteger(n)&&n>=e&&n<=t,ts=(n,e)=>n===void 0||Array.isArray(n)&&n.length<=e&&n.every(t=>typeof t=="string"&&os.test(t)),bc=["every","interval","on","until","count","except","continues"],ss=n=>Fe(n)&&Object.keys(n).every(e=>bc.includes(e))&&ar(n.interval,1,99)&&ar(n.count,1,1e3)&&ts(n.until===void 0?void 0:[n.until],1)&&ts(n.except,500)&&(n.continues===void 0||typeof n.continues=="string"&&n.continues.length<=200)&&(n.on===void 0||Array.isArray(n.on)&&n.on.length>0&&n.on.length<=31&&n.on.every(e=>n.every==="week"?Yn.includes(e):n.every==="month"&&e!==0&&ar(e,-1,31))),ym=()=>yc(tr().check(qn(n=>n===null||ss(n),"how a date repeats, or null"))),bn=n=>Date.UTC(+n.slice(0,4),+n.slice(5,7)-1,+n.slice(8,10)),as=n=>new Date(n).toISOString().slice(0,10),dr=(n,e)=>as(bn(n)+e*864e5),rs=(n,e,t)=>{let r=new Date(Date.UTC(n,e+1,0)).getUTCDate();return as(Date.UTC(n,e,t<0||t>r?r:t))},Fe=n=>typeof n=="object"&&n!==null&&mc.includes(n.every);function De(n,e,t={}){let r=n.slice(0,10),o=n.slice(10),i=[];if(!os.test(r))return i;let s=Math.max(1,e.interval??1),a=e.every,d=t.from&&t.from>r?t.from.slice(0,10):r,l=[e.until,t.to?.slice(0,10)].filter(Boolean).sort()[0],u=t.limit??1e3,p=new Set(e.except??[]),c=+r.slice(0,4),f=+r.slice(5,7)-1,g=+r.slice(8,10),h=dr(r,-new Date(bn(r)).getUTCDay()),x=(e.on?.length?e.on:[a==="week"?Yn[new Date(bn(r)).getUTCDay()]:g]).map(w=>typeof w=="string"?Yn.indexOf(w):w),b=a==="day"?1:a==="week"?7:0,k=(+d.slice(0,4)-c)*12+(+d.slice(5,7)-1-f),R=e.count?0:Math.max(0,Math.floor((b?(bn(d)-bn(b===7?h:r))/864e5/b:a==="month"?k:k/12)/s)-1),m=0;for(let w=0;w<5e4&&i.length<u;w++,R++){let y=R*s,S=a==="day"?[dr(r,y)]:a==="week"?x.map(v=>dr(h,y*7+v)):a==="month"?x.map(v=>rs(c,f+y,v)):[rs(c+y,f,g)];for(let v of[...new Set(S)].sort())if(!(v<r)&&(l&&v>l||e.count&&m>=e.count||(m++,v>=d&&!p.has(v)&&i.push(v+o),i.length>=u)))return i}return i}function ds(n,e,t){if(!Fe(e)||typeof n!="string")return n;let r=De(n,e,{from:t,limit:1})[0];if(r)return r;let o=e.until||e.count?De(n,e):[];return o[o.length-1]??n}function xc(n,e,t){let r=n[e],o=n[Te(e)];return typeof r=="string"&&Fe(o)?ds(r,o,t):r}function vn(n,e){if(n.onBehalfOf){let{onBehalfOf:i,...s}=n;return`${vn(s,e)}, for ${vn(i,e)}`}if(n.id===void 0)return n.name??(n.kind==="agent"?"an agent":n.kind);let t=e.graph.getNode(n.id);if(t)return T(e.schema.tryDefinition(t.kind),t);let r=e.seats?.find(i=>i.principal.id===n.id);if(r)return r.label;let o=e.people?.find(i=>i.id===n.id&&(i.kind===void 0||i.kind===n.kind));return o?o.name:n.name?n.name:/(^|:)migration$/.test(n.id)?"the upgrade":/[:_/]/.test(n.id)?{human:"somebody",agent:"an agent",rule:"a rule",system:"the system"}[n.kind]:n.id}var Ze="$archived",Se=n=>n?.[Ze]===!0,wm=(n,e=!1)=>e==="all"||Se(n)===e,cr=n=>n===!0||n==="true"?!0:n==="all"?"all":!1,wn="$leftAlone",Qn=new Set([Ze,wn]);var ee="\0graview:unset",Le=n=>n===void 0||n===ee;function kn(n){if(n.op!=="patch-node")return n;let e=t=>Object.fromEntries(Object.entries(t).map(([r,o])=>[r,o===void 0?ee:o]));return{...n,before:e(n.before),after:e(n.after)}}function Sn(n){switch(n.op){case"add-node":return{op:"remove-node",node:n.node};case"remove-node":return{op:"add-node",node:n.node};case"patch-node":return{op:"patch-node",id:n.id,before:n.after,after:n.before};case"add-edge":return{op:"remove-edge",edge:n.edge};case"remove-edge":return{op:"add-edge",edge:n.edge}}}function $e(n){switch(n.op){case"add-node":case"remove-node":return[n.node.id];case"patch-node":return[n.id];case"add-edge":case"remove-edge":return[n.edge.from,n.edge.to]}}var Q=class extends Error{constructor(t,r){super(r?`${t}
2
- \u2192 ${r}`:t);this.hint=r;this.name="SchemaError"}};function vc(n,e){let t=n,r=new Map;for(let a of t){if(r.has(a.kind))throw new Q(`Duplicate node kind "${a.kind}"`,"Each kind may be declared once; merge the two defineNode calls.");r.set(a.kind,a)}let o=new Map;for(let a of t)for(let[d,l]of Object.entries(a.edges)){if(l.to!=="*"){for(let p of l.to)if(!r.has(p))throw new Q(`Edge "${d}" on "${a.kind}" points at undeclared kind "${p}"`,`Declared kinds: ${[...r.keys()].join(", ")}`)}let u=o.get(d);u?u.from.push(a.kind):o.set(d,{from:[a.kind],decl:l})}let i=new Map;for(let[a,{from:d,decl:l}]of o){let u=d.map(p=>r.get(p).edges[a].to);i.set(a,{kind:a,from:d,to:u.includes("*")?"*":[...new Set(u.flat())],cardinality:l.cardinality??"many",...l.description===void 0?{}:{description:l.description}})}let s=new Map;for(let a of t)s.set(a.kind,Ui(a.fields,{id:F().check(hn(1)),kind:Vi(a.kind)}));return{definitions:t,computed:e,kinds:t.map(a=>a.kind),edgeKinds:[...i.keys()],definition(a){let d=r.get(a);if(!d)throw new Q(`Unknown node kind "${String(a)}"`,`Declared kinds: ${[...r.keys()].join(", ")}`);return d},tryDefinition(a){return r.get(a)},edge(a){return i.get(a)},edgeAllowed(a,d,l){let u=r.get(d)?.edges[a];return u?u.to==="*"||u.to.includes(l):!1},parseNode(a){let d=a?.kind;if(typeof d!="string")throw new Q("Node is missing a `kind`");let l=s.get(d);if(!l)throw new Q(`Unknown node kind "${d}"`,`Declared kinds: ${[...r.keys()].join(", ")}`);let u={},p={};for(let[f,g]of Object.entries(a))Qn.has(f)?g===!0&&(p[f]=!0):u[f]=g;let c=l.parse(u);return Object.keys(p).length>0?{...c,...p}:c},__node:void 0}}function O(n){return`${n.kind}\0${n.from}\0${n.to}`}var $n={addedNodes:[],removedNodes:[],changedNodes:[],addedEdges:[],removedEdges:[],touched:[]};function cs(n){return n.addedNodes.length===0&&n.removedNodes.length===0&&n.changedNodes.length===0&&n.addedEdges.length===0&&n.removedEdges.length===0}function wc(n,e){let t=new Set([...Object.keys(n),...Object.keys(e)]),r=[];for(let o of t){let i=n[o],s=e[o];JSON.stringify(i)!==JSON.stringify(s)&&r.push(o)}return r.sort()}function Ce(n,e){let t=new Map(n.nodes.map(c=>[c.id,c])),r=new Map(e.nodes.map(c=>[c.id,c])),o=e.nodes.filter(c=>!t.has(c.id)),i=n.nodes.filter(c=>!r.has(c.id)),s=[];for(let c of n.nodes){let f=r.get(c.id);if(!f||f===c)continue;let g=wc(c,f);g.length>0&&s.push({before:c,after:f,fields:g})}let a=new Map(n.edges.map(c=>[O(c),c])),d=new Map(e.edges.map(c=>[O(c),c])),l=e.edges.filter(c=>!a.has(O(c))),u=n.edges.filter(c=>!d.has(O(c))),p=new Set;for(let c of o)p.add(c.id);for(let c of i)p.add(c.id);for(let c of s)p.add(c.after.id);for(let c of[...l,...u])p.add(c.from),p.add(c.to);return{addedNodes:o,removedNodes:i,changedNodes:s,addedEdges:l,removedEdges:u,touched:[...p].sort()}}function me(n,e,t){let r=new Set(t.flatMap(i=>i.op==="patch-node"?[i.id]:"node"in i?[i.node.id]:[i.edge.from,i.edge.to]));if(r.size===0)return $n;let o=i=>({nodes:i.nodes.filter(s=>r.has(s.id)),edges:i.edges.filter(s=>r.has(s.from)||r.has(s.to))});return Ce(o(n),o(e))}function kc(n){let e=n?.issues;return!Array.isArray(e)||e.length===0?n instanceof Error?n.message:String(n):e.map(t=>{let r=t.path?.length?C(String(t.path.at(-1))):null,o=t.message??"is not what the declaration allows";return r?`${r}: ${o}`:o}).join("; ")}var E=class extends Error{constructor(t,r){super(r?`${t}
3
- ${r}`:t);this.hint=r;this.name="GraphError"}},L=class extends E{constructor(t,r){super(r);this.id=t;this.name="MissingRecordError"}};function et(n,e){try{n.parseNode(e);return}catch(t){if(t instanceof Q)throw t;let r=t.issues??[];return{fields:new Set(r.flatMap(i=>i.code==="unrecognized_keys"&&i.keys?[...i.keys]:typeof i.path?.[0]=="string"?[i.path[0]]:[""])),error:t}}}var ur="n\0",lr="e\0",G=class n{constructor(e,t={}){this.schema=e;this.validate=t.validate??!0}nodes=new Map;edges=new Map;outIndex=new Map;inIndex=new Map;rank=0;ranks=new Map;lapsed=new Map;reordered=!1;counts=new Map;archived=new Set;listeners=new Set;validate;static from(e,t,r={}){let o=new n(e,r);return o.load(t),o}load(e){let t=this.snapshot();this.restore(e);let r=Ce(t,this.snapshot());return this.emit(r),r}getNode(e){return this.nodes.get(e)}has(e){return this.nodes.has(e)}allNodes(e){return this.reach([...this.nodes.values()],e,this.held)}count(e,t){return t||this.archived.size?this.nodesOfKind(e,t).length:this.counts.get(e)??0}allEdges(e){return this.reach([...this.edges.values()],e,t=>this.archived.has(t.from)||this.archived.has(t.to))}nodesOfKind(e,t){return this.allNodes(t).filter(r=>r.kind===e)}edgesOfKind(e,t){return this.allEdges(t).filter(r=>r.kind===e)}out(e,t,r){return this.reach(this.resolve(this.outIndex.get(e),t,"to"),r,this.held)}in(e,t,r){return this.reach(this.resolve(this.inIndex.get(e),t,"from"),r,this.held)}neighbors(e,t){let r=new Map;for(let o of[...this.out(e,void 0,t),...this.in(e,void 0,t)])r.set(o.id,o);return[...r.values()]}isArchived(e){return this.archived.has(e)}outEdges(e,t){return this.edgesFrom(this.outIndex.get(e),t)}inEdges(e,t){return this.edgesFrom(this.inIndex.get(e),t)}snapshot(){return{nodes:[...this.nodes.values()],edges:[...this.edges.values()]}}get size(){return{nodes:this.nodes.size,edges:this.edges.size}}applyPrimitives(e,t={}){let r=this.snapshot();try{for(let i of e)this.applyOne(i,t.restoring===!0,t.inPlace===!0);this.settleOrder()}catch(i){throw this.restore(r),i}let o=me(r,this.snapshot(),e);return this.emit(o),o}preview(e,t={}){return n.from(this.schema,this.snapshot(),{validate:this.validate}).applyPrimitives(e,t)}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}restore(e){for(let t of[this.nodes,this.edges,this.outIndex,this.inIndex,this.ranks,this.lapsed,this.counts,this.archived])t.clear();this.reordered=!1;for(let t of e.nodes)this.insertNode(t,!0);for(let t of e.edges)this.insertEdge(t,!0)}tally(e,t){this.counts.set(e,(this.counts.get(e)??0)+t)}place(e,t){let r=t?this.lapsed.get(e):void 0;if(r===void 0){this.ranks.set(e,++this.rank);return}this.ranks.set(e,r),this.lapsed.delete(e),this.reordered=!0}lapse(e){let t=this.ranks.get(e);t!==void 0&&(this.ranks.delete(e),this.lapsed.set(e,t),this.lapsed.size>4096&&this.lapsed.delete(this.lapsed.keys().next().value))}settleOrder(){if(!this.reordered)return;this.reordered=!1;let e=o=>(i,s)=>this.ranks.get(o+i[0])-this.ranks.get(o+s[0]),t=[...this.nodes.entries()].sort(e(ur));this.nodes.clear();for(let[o,i]of t)this.nodes.set(o,i);let r=[...this.edges.entries()].sort(e(lr));this.edges.clear();for(let[o,i]of r)this.edges.set(o,i)}emit(e){if(!(e.addedNodes.length===0&&e.removedNodes.length===0&&e.changedNodes.length===0&&e.addedEdges.length===0&&e.removedEdges.length===0))for(let t of this.listeners)t(e)}applyOne(e,t,r){switch(e.op){case"add-node":this.insertNode(e.node,t,r);return;case"remove-node":{let o=e.node.id,i=this.nodes.get(o);if(!i)throw new L(o,`Cannot remove missing node "${o}"`);for(let s of[...this.outEdges(o),...this.inEdges(o)])this.deleteEdge(s);this.tally(i.kind,-1),this.archived.delete(o),this.nodes.delete(o),this.lapse(ur+o),this.outIndex.delete(o),this.inIndex.delete(o);return}case"patch-node":{let o=this.nodes.get(e.id);if(!o)throw new L(e.id,`Cannot patch missing node "${e.id}"`);let i={...o};for(let[a,d]of Object.entries(e.after))Le(d)?delete i[a]:i[a]=d;let s=t?i:this.checkPatch(o,i,Object.keys(e.after));this.nodes.set(e.id,s),this.archived[Se(s)?"add":"delete"](e.id),s.kind!==o.kind&&(this.tally(o.kind,-1),this.tally(s.kind,1));return}case"add-edge":this.insertEdge(e.edge,t,r);return;case"remove-edge":{if(!this.edges.has(O(e.edge)))throw new L(O(e.edge),`Cannot remove missing edge ${O(e.edge)}`);this.deleteEdge(e.edge);return}}}check(e){if(!this.validate)return e;try{return this.schema.parseNode(e)}catch(t){throw this.refusal(e,t)}}checkPatch(e,t,r){if(!this.validate)return t;let o=this.schema.tryDefinition(String(t.kind))?.fields?.shape;if(!o)return this.check(t);for(let a of r){if(a==="id"||a==="kind"||Qn.has(a))continue;let d=o[a];if(!d){delete t[a];continue}let l=d.safeParse(t[a]);l.success&&(l.data===void 0?delete t[a]:t[a]=l.data)}let i=et(this.schema,t);if(i===void 0)return t;let s=et(this.schema,e)?.fields??new Set;if([...i.fields].some(a=>r.includes(a)||!s.has(a)))throw this.refusal(t,i.error);return t}refusal(e,t){if(t instanceof Q)return t;{let r=e?.id??"?",o=e?.kind??"?",i=this.schema.tryDefinition(o),s=i&&e&&typeof e=="object"?T(i,e):r;return new E(`${s} does not match what ${o} declares`,kc(t))}}insertNode(e,t,r=!1){if(this.nodes.has(e.id))throw new E(`Duplicate node id "${e.id}"`);this.nodes.set(e.id,t?e:this.check(e)),Se(e)&&this.archived.add(e.id),this.tally(e.kind,1),this.place(ur+e.id,r)}insertEdge(e,t,r=!1){let o=this.nodes.get(e.from),i=this.nodes.get(e.to);if(!o||!i){let a=o?e.to:e.from;throw new L(a,`Edge "${e.kind}" references missing node "${a}"`)}if(this.validate&&!t&&!this.schema.edgeAllowed(e.kind,o.kind,i.kind)){let a=this.schema.edge(e.kind);throw new E(`Edge "${e.kind}" is not declared from ${o.kind} to ${i.kind}`,a?`Declared: ${a.from.join("|")} -> ${a.to==="*"?"*":a.to.join("|")}`:`No edge kind "${e.kind}" is declared in this schema`)}let s=O(e);this.edges.has(s)||(this.edges.set(s,e),this.place(lr+s,r),this.index(this.outIndex,e.from,s),this.index(this.inIndex,e.to,s))}deleteEdge(e){let t=O(e);this.edges.delete(t),this.lapse(lr+t),this.outIndex.get(e.from)?.delete(t),this.inIndex.get(e.to)?.delete(t)}index(e,t,r){(e.get(t)??e.set(t,new Set).get(t)).add(r)}edgesFrom(e,t){if(!e)return[];let r=[];for(let o of e){let i=this.edges.get(o);i&&(t===void 0||i.kind===t)&&r.push(i)}return r}resolve(e,t,r){let o=[];for(let i of this.edgesFrom(e,t)){let s=this.nodes.get(i[r]);s&&o.push(s)}return o}held=e=>this.archived.has(e.id);reach(e,t,r){let o=t?.archived??!1;return o==="all"||!o&&!this.archived.size?e:e.filter(i=>r(i)===o)}};var nt=class extends Error{constructor(t,r){super(`No invariant registered under "${t}" (required by node "${r}")`);this.invariant=t;this.nodeId=r;this.name="UnregisteredInvariantError"}};function Sc(n,e){return{...e,name:n}}var tt=class extends Error{constructor(e){super(e),this.name="RuleBudgetError"}};function us(n,e,t){try{return e().map(r=>r.status?r:{...r,status:"violated"})}catch(r){let o=r instanceof tt,i=r instanceof Error?r.message:String(r),s=n.label??n.name.replace(/-/g," ");return[{invariant:n.name,status:o?"over-budget":"could-not-judge",...t!==void 0?{subjectId:t}:{},label:s,message:`${s} could not be judged: ${i}`,nodeIds:t!==void 0?[t]:[],repairs:[]}]}}function Ge(n,e,t={}){let r=t.context??{},o=t.today===void 0?{}:{today:t.today},i=t.onUnregistered??"skip",s=new Set(e.map(c=>c.name)),a=[];for(let c of e)c.scope==="graph"&&a.push(...us(c,()=>c.evaluate({graph:n,subject:void 0,context:r,...o}),void 0));let d=e.filter(c=>c.scope!=="graph"),l=new Map;for(let c of d){let f=c.scope.kind,g=l.get(f);g?g.push(c):l.set(f,[c])}for(let c of n.allNodes()){let f=n.schema.tryDefinition(c.kind),g=f?.requiresInvariant?.(c)??null;if(t.subjectFilter&&!t.subjectFilter(c,r))continue;if(g!==null&&!s.has(g)){if(i==="throw")throw new nt(g,c.id);continue}let h=!Ot(f,c,t.today);for(let x of l.get(c.kind)??[]){if(h&&x.judgesPast!==!0)continue;let b=x.scope.match;b&&!b(c)||a.push(...us(x,()=>x.evaluate({graph:n,subject:c,context:r,...o}),c.id))}}let u=new Set,p=a.filter(c=>{let f=`${c.message}|${[...c.nodeIds].sort().join(",")}`;return u.has(f)?!1:(u.add(f),!0)}).map(c=>{let f=At(c.message);return f===c.message?c:{...c,message:f}});return fr?fr(n,e,p,t.today):p}var fr;function Fm(n){fr=n}function $c(n,e){let t=new Set(e);return n.filter(r=>r.nodeIds.some(o=>t.has(o))||r.subjectId!==void 0&&t.has(r.subjectId))}function _c(n){let e=new Set(n.map(r=>r.invariant)).size;if(e===0)return"All rules hold";let t=`${e} ${e===1?"rule":"rules"} broken`;return n.length>e?`${t} in ${n.length} places`:t}var rt=(n,e)=>n==="*"||n.includes(e);function I(n){let e=n.onBehalfOf;if(!e)return n;let t=e.roles??[],r=n.roles===void 0?t:n.roles.filter(o=>t.includes(o));return{...n,...e.id!==void 0?{id:e.id}:{},roles:r}}var B=n=>n.kind==="system"&&n.onBehalfOf===void 0,ye=(n,e)=>n.roles==="*"||(e.roles??[]).some(t=>n.roles.includes(t));function ls(n){return mo(n.map(e=>ze(C(e).toLowerCase())),"or")}function be(n,e,t,r,o,i,s={},a,d,l){if(!n)return{ok:!0};if(B(e))return{ok:!0};if(e=I(e),o!==void 0){if(be(n,e,t,r,void 0,i).ok)return{ok:!0};let f=!1;if(o.some(b=>be(n,e,b,r,void 0,i).ok)){if(!d||i===void 0||e.id!==void 0&&d()===e.id||!l&&n.grants.some(b=>b.roles!=="*"&&ye(b,e)&&o.some(k=>rt(b.mutations,k))))return{ok:!0};f=!0}let g=f?[t]:[t,...o],h=[...new Set(g.flatMap(b=>pr(n,b,r)))].sort(),x=(f?"only on what you made; ":"")+(h.length===0?o.length===0?"no declared act creates or changes it, so no role can":"no role can":`${ls(h)} can`);return{ok:!1,refusal:{mutation:t,...r===void 0?{}:{kind:r},wouldNeed:h,message:fs(n,g,r,x,s)}}}let u=!1;for(let f of n.grants){if(!ye(f,e)||!rt(f.mutations,t)||f.kinds!==void 0&&f.kinds!=="*"&&(r===void 0||!f.kinds.includes(r))||f.self&&(i===void 0||e.id===void 0||i!==e.id))continue;let g=f.ownEnd?a?.()??[]:[e.id];if(!g.length||g.some(h=>h!==e.id)){u=!0;continue}return{ok:!0}}let p=pr(n,t,r),c=u?"only on your own end of the link":p.length===0?"no role can":`${ls(p)} can`;return{ok:!1,refusal:{mutation:t,...r===void 0?{}:{kind:r},wouldNeed:p,message:fs(n,[t],r,c,s)}}}function fs(n,e,t,r,o){let i=[...new Set(e.flatMap(a=>ps(n,a,t)))],s=o.act?.(e[0]);return`Not permitted: ${s?`\u201C${s}\u201D`:e[0]}${t?` on ${ze(o.noun?.(t)??t)}`:""} \u2014 ${r}.`+(i.length>0?` ${i.join(" ")}`:"")}function ps(n,e,t){return[...new Set(hs(n,e,t).flatMap(r=>r.describe||[]))]}var hs=(n,e,t)=>n.grants.filter(r=>rt(r.mutations,e)&&(t===void 0||rt(r.kinds??"*",t)));function pr(n,e,t){let r=hs(n,e,t);return r.some(o=>o.roles==="*")?[]:[...new Set(r.flatMap(o=>o.roles))].sort()}function hr(n,e,t){return n?t.filter(r=>{let o=I(e).id;return gr(r).some(i=>be(n,e,r.name,i,void 0,o,void 0,()=>[o??[]].flat()).ok)}):t}var gr=n=>n.subject&&n.subject.kinds!=="*"?n.subject.kinds:[void 0];var ne=class extends Error{constructor(t,r="refused"){super(t);this.sentence=t;this.reason=r;this.name="ActRefusal"}};var _n=class{constructor(e,t,r){this.present=e;this.timeline=t;this.unversioned=r}nodes=new Map;edges=new Map;touching=new Map;seq=Number.MAX_SAFE_INTEGER;wrote=new Map;begin(e){this.seq=e,this.wrote.clear()}writerOf(e){return t=>{let r=`${e}\0${t}`;return this.wrote.has(r)?this.wrote.get(r):this.timeline?.writers?.writerAt(e,t,this.seq)}}note(e,t){let r=e.op==="add-node"?e.node.id:e.op==="patch-node"?e.id:"";if(r===""||this.unversioned?.has(r))return;let o=e.op==="add-node"?Object.keys(e.node):Object.keys(e.after);for(let i of o)i!=="id"&&i!=="kind"&&this.wrote.set(`${r}\0${i}`,t(r,i))}node(e){return this.nodes.has(e)?this.nodes.get(e)??void 0:this.present.getNode(e)}setNode(e,t){this.nodes.set(e,t)}setEdge(e,t){let r=O(e);this.edges.set(r,t?e:null);for(let o of[e.from,e.to]){let i=this.touching.get(o);i||this.touching.set(o,i=new Set),i.add(r)}}incident(e){let t=new Map;for(let r of[...this.present.outEdges(e),...this.present.inEdges(e)]){let o=O(r);this.edges.has(o)||t.set(o,r)}for(let r of this.touching.get(e)??[]){let o=this.edges.get(r);o&&t.set(r,o)}return[...t.values()]}undo(e){switch(e.op){case"add-node":this.setNode(e.node.id,null);return;case"remove-node":this.setNode(e.node.id,e.node);return;case"patch-node":{if(this.unversioned?.has(e.id))return;let t=this.node(e.id);if(!t)return;this.setNode(e.id,gs(t,e.before));return}case"add-edge":this.setEdge(e.edge,!1);return;case"remove-edge":this.setEdge(e.edge,!0);return}}apply(e){switch(e.op){case"add-node":this.setNode(e.node.id,e.node);return;case"remove-node":for(let t of this.incident(e.node.id))this.setEdge(t,!1);this.setNode(e.node.id,null);return;case"patch-node":{if(this.unversioned?.has(e.id))return;let t=this.node(e.id);if(!t)return;this.setNode(e.id,gs(t,e.after));return}case"add-edge":this.setEdge(e.edge,!0);return;case"remove-edge":this.setEdge(e.edge,!1);return}}};function gs(n,e){let t={...n};for(let[r,o]of Object.entries(e))Le(o)?delete t[r]:t[r]=o;return t}var Rc=n=>n.op==="add-node"||n.op==="remove-node"?n.node.id:n.op==="patch-node"?n.id:void 0;function mr(n,e,t,r){let o=u=>{let p=e.node(u);return p?t.served(p,e.writerOf(u))!==void 0:t.sees?.(u)??!1},i=Rc(n);if(i===void 0){let u=n.edge,p=t.edgeClean(u)&&o(u.from)&&o(u.to);return e.apply(n),{primitives:p?[n]:[],faithful:!0}}let s=e.node(i),a=s?t.served(s,e.writerOf(i)):void 0;e.apply(n),e.note(n,r);let d=e.node(i),l=d?t.served(d,e.writerOf(i)):void 0;if(!a&&!l)return{primitives:[],faithful:!1};if(!a&&l){let u=e.incident(i).filter(c=>t.edgeClean(c)&&o(c.from===i?c.to:c.from)).map(c=>({op:"add-edge",edge:c})),p=n.op==="add-node"&&l===n.node&&u.length===0;return{primitives:p?[n]:[{op:"add-node",node:l},...u],faithful:p}}if(a&&!l){let u=n.op==="remove-node"&&a===s;return{primitives:u?[n]:[{op:"remove-node",node:a}],faithful:u}}if(n.op==="patch-node"){let u=(c,f)=>g=>g in c==(f!==void 0&&g in f);if(Object.keys(n.after).every(c=>u(a,s)(c)&&u(l,d)(c)))return{primitives:[n],faithful:!0};let p=c=>Object.fromEntries(Object.keys(n.after).map(f=>[f,f in c?c[f]:ee]));return{primitives:[{op:"patch-node",id:i,before:p(a),after:p(l)}],faithful:!1}}return{primitives:[{op:"remove-node",node:a},{op:"add-node",node:l}],faithful:!1}}function ms(n,e,t){if(n.length===0)return[];let r=e.log.all(),o=r[0]?.seq??0,i=n.every(c=>r[c.seq-o]?.id===c.id),s=new _n(e.present,e);if(!i)return s.begin(e.log.length??o+r.length),n.map(c=>{let f=I(c.author).id,g=c.primitives.map(h=>mr(h,s,t,()=>f));return{op:c,primitives:g.flatMap(h=>h.primitives),faithful:g.every(h=>h.faithful)}});let a=new Set(n.map(c=>c.seq)),d=Number.POSITIVE_INFINITY,l=Number.NEGATIVE_INFINITY;for(let c of a)c<d&&(d=c),c>l&&(l=c);d-=o,l-=o;let u=Ac(r,d,e.present,t),p=u?new _n(e.present,e,u.unversioned):s;for(let c=r.length-1;c>=d;c--){let f=r[c].primitives;for(let g=f.length-1;g>=0;g--)p.undo(f[g])}return Oc(n,r,d,l,a,p,u?.judge??t,e)}function Ac(n,e,t,r){let{sees:o,names:i}=r;if(!o||!i)return;let s=new Set,a=new Set,d=new Set,l=(p,c)=>{s.has(p)||a.has(p)||(o(p)?i(c)?(a.add(p),d.delete(p)):d.add(p):(s.add(p),d.delete(p)))};for(let p=e;p<n.length;p++)for(let c of n[p].primitives)c.op==="add-node"||c.op==="remove-node"?l(c.node.id,c.node):c.op==="patch-node"&&(l(c.id,c.before),l(c.id,c.after));for(let p of d){let c=t.getNode(p);c&&i(c)&&(d.delete(p),a.add(p))}return{unversioned:new Set([...d,...s]),judge:{...r,served:(p,c)=>d.has(p.id)?p:s.has(p.id)?void 0:r.served(p,c)}}}function Oc(n,e,t,r,o,i,s,a){let d=new Map;for(let l=t;l<=r;l++){let u=e[l];if(i.begin(u.seq),!o.has(u.seq)){for(let f of u.primitives)i.apply(f);continue}let p=(f,g)=>a.writers?.writerAt(f,g,u.seq+1),c=u.primitives.map(f=>mr(f,i,s,p));d.set(u.seq,{op:u,primitives:c.flatMap(f=>f.primitives),faithful:c.every(f=>f.faithful)})}return n.map(l=>d.get(l.seq))}function qm(n,e,t,r){let o=new _n(e.present,e);return o.begin(e.log.length??e.log.all().length),n.flatMap(i=>mr(i,o,t,()=>r).primitives)}var bs="A change you cannot see",xs={kind:"system",id:"withheld",name:"Someone"};function Be(n){return n.withheld===!0}var Rn=$e,vs=(n,e)=>Object.entries(n).some(([t,r])=>t!=="id"&&t!=="kind"&&N(r,e));function ws(n){if(typeof n!="function")return n;let e=n,t=r=>e(r.id)&&!vs(r,e)?r:void 0;return{sees:e,shows:e,served:t,servedWith:t,optional:()=>!1,kindOf:()=>{}}}function N(n,e){if(typeof n=="string")return!e(n);if(n===null||typeof n!="object")return!1;if(Array.isArray(n)){for(let t=0;t<n.length;t++)if(N(n[t],e))return!0;return!1}for(let t in n)if(Object.hasOwn(n,t)&&(!e(t)||N(n[t],e)))return!0;return!1}function ks(n,e){let t=r=>!e(r);return n.primitives.some(r=>Rn(r).some(t))||[...n.writes,...n.reads].some(t)||n.mutation!==null&&N(n.mutation.args,e)}function Pc(n,e){if(Rn(n).every(e.shows))switch(n.op){case"add-node":{let t=e.served(n.node);return t?t===n.node?n:{op:"add-node",node:t}:void 0}case"remove-node":{let t=n.node;return vs(t,e.sees)?{op:"remove-node",node:Object.fromEntries(Object.entries(t).filter(([r,o])=>r==="id"||r==="kind"||!N(o,e.sees)))}:n}case"patch-node":{let t=e.kindOf(n.id),r={};for(let[i,s]of Object.entries(n.after))if(!N(s,e.sees))r[i]=s;else if(t!==void 0&&e.optional(t,i))r[i]=ee;else return;let o=Object.fromEntries(Object.entries(n.before).filter(([,i])=>!N(i,e.sees)));return{op:"patch-node",id:n.id,before:o,after:r}}case"add-edge":case"remove-edge":return N(n.edge,e.sees)?void 0:n}}function yr(n,e,t){let r=ws(e),o=i=>r.shows(i)&&Ss(r,i);return{id:n.id,seq:n.seq,batch:n.batch,author:xs,intent:bs,mutation:null,primitives:t??n.primitives.flatMap(i=>{let s=Pc(i,r);return s?[s]:[]}),inverse:[],reads:n.reads.filter(o),writes:n.writes.filter(o),at:n.at,...n.undoes!==void 0?{undoes:n.undoes}:{},withheld:!0}}function Ue(n,e){let t=ws(e);if(t.hides?.()===!1)return[...n];let r=t.pin?.()??t;if(r.redact)return r.redact(n);if(r.timeline){let o={served:(i,s)=>r.servedWith(i,s),edgeClean:i=>!N(i,r.sees),sees:r.sees,names:i=>N(i,r.sees)};return ms(n,r.timeline,o).map(({op:i,primitives:s,faithful:a})=>(!i.withheld&&a?ys(i,r,s):void 0)??yr(i,r,s))}return n.map(o=>(!o.withheld&&!ks(o,r.shows)?ys(o,r):void 0)??yr(o,r))}function ys(n,e,t){if(t&&t.length<n.primitives.length){if(!t.length)return;n={...n,primitives:t,inverse:n.inverse.filter(c=>Rn(c).every(e.shows))}}let r=c=>e.sees(c)&&Ss(e,c),o=n.reads.filter(r),i=new Set(n.primitives.flatMap(Rn)),s=n.writes.filter(c=>r(c)||e.sees(c)&&i.has(c)),a=o.length===n.reads.length&&s.length===n.writes.length?n:{...n,reads:o,writes:s},d=e.actor!==void 0&&I(n.author).id===e.actor;if(!d&&n.described?.some(c=>!e.sees(c)))return;if(!N(n,e.sees))return a;let l=new Set,u=c=>{if(typeof c=="string")l.add(c);else if(Array.isArray(c))for(let f of c)u(f);else if(c!==null&&typeof c=="object")for(let[f,g]of Object.entries(c))l.add(f),u(g)};t&&u(t);let p=c=>e.sees(c)||l.has(c);if(!N(a.inverse,p))return d&&n.mutation&&u(n.mutation.args),N({...a,primitives:[],inverse:[]},d?p:e.sees)?void 0:a}function Ss(n,e){return n.timeline===void 0||n.kindOf(e)!==void 0}var _e=class extends E{constructor(t){super(t.message);this.check=t;this.name="UndoBlockedError"}get blockedBy(){return this.check.blockedBy}};function An(n,e){let t=new Set(e),r=n.undoneIds(),o=n.all().filter(f=>t.has(f.batch)&&!r.has(f.id)),i=[...n.epochs()].reverse().find(f=>f.horizon);if(i){let f=new Set(n.all().map(h=>h.batch)),g=e.filter(h=>!f.has(h));if(g.length>0)return{ok:!1,ops:o,blockedBy:[],includeBatches:[],reason:"missing",message:`Cannot undo ${g.map(h=>`batch ${h}`).join(", ")}: it is not after the undo horizon at op ${i.seq}${i.at?` (${i.at})`:""}. What was done before the horizon is archived, and undo does not reach behind it.`}}if(o.length===0)return{ok:!1,ops:o,blockedBy:[],includeBatches:[],reason:"missing",message:e.length===0?"No batch given to undo":`Nothing live to undo in ${e.join(", ")} \u2014 already undone, or never applied`};if(o.some(Be))return{ok:!1,ops:o,blockedBy:[],includeBatches:[],reason:"forbidden",message:o.every(Be)?"Cannot undo a change you cannot see: only somebody who can see it can take it back.":"Cannot undo this here: part of it is a change you cannot see, and only somebody who can see it can take it back."};if(o.some(f=>f.enabledModules!==void 0))return{ok:!1,ops:o,blockedBy:[],includeBatches:[],message:"Cannot undo turning a module off or on: it is changed by turning the module the other way."};let s=new Set;for(let f of o)for(let g of f.writes)s.add(g);let a=Math.min(...o.map(f=>f.seq)),d=n.epochs().find(f=>f.change!==void 0&&f.seq>a);if(d){let f=o.find(g=>g.seq<d.seq);return{ok:!1,ops:o,blockedBy:[],includeBatches:[],message:`Cannot undo "${f.intent}": ${f.intent===d.change?"it changed the declaration":`it was done before the declaration changed (${d.change})`}, and undo does not reach back across that change.`}}let l=new Map(n.all().map(f=>[f.id,f.seq])),u=[];for(let f of n.all()){if(f.seq<=a||t.has(f.batch)||r.has(f.id)||f.undoes!==void 0&&(l.get(f.undoes)??-1)>a)continue;let g=f.reads.filter(h=>s.has(h));g.length>0&&u.push({op:f,overlap:g})}if(u.length===0)return{ok:!0,ops:o};let p=u.filter(f=>!Be(f.op)).map(f=>`"${f.op.intent}" (op ${f.op.id}, read ${f.overlap.join(", ")})`).join("; ");if(u.some(f=>Be(f.op)))return{ok:!1,ops:o,blockedBy:u,includeBatches:[],message:`Cannot undo on its own \u2014 ${p?`a later operation depends on it: ${p}; and `:""}a later change you cannot see depends on it, which only somebody who can see it can take back.`};let c=[...new Set(u.map(f=>f.op.batch))];return{ok:!1,ops:o,blockedBy:u,includeBatches:c,message:`Cannot undo on its own \u2014 a later operation depends on it: ${p}. Include ${c.map(f=>`batch ${f}`).join(", ")} to undo them together.`}}function $s(n){return[...n].sort((e,t)=>t.seq-e.seq).flatMap(e=>e.inverse)}var Ke=class extends Error{refusal;constructor(e){super(e.message),this.name="PermissionDeniedError",this.refusal=e}};function Ec(n){let e=n instanceof Error?n.message:String(n);if(n instanceof Ke){let t=n.refusal.wouldNeed;return{reason:"forbidden",sentence:e,...t.length>0?{wouldNeed:[...t]}:{}}}return n instanceof L?{reason:"missing",sentence:e}:n instanceof ne?{reason:n.reason,sentence:n.sentence}:n instanceof _e?{reason:n.check.reason??"invalid",sentence:e}:{reason:"invalid",sentence:e}}var Ve=class extends E{constructor(t,r){super(`Invalid arguments for mutation "${t}"`,r.map(o=>`${o.path.map(String).join(".")||"(root)"}: ${o.message}`).join("; "));this.mutation=t;this.issues=r;this.name="InvalidArguments"}};var zc=n=>`Op "${n.id}" has seq ${n.seq}, so the log begins at seq ${n.seq}: a log that begins past 0 begins at its undo horizon, and none was given (a checkpoint epoch, or { horizon })`,We=class n{ops=[];marks=[];start=0;get length(){return this.start+this.ops.length}get horizon(){return this.start}all(){return this.ops}opsFrom(e){return this.ops.slice(Math.max(0,e-this.start))}append(e){if(e.seq!==this.length)throw new Error(this.length===0&&e.seq>0?zc(e):`Op "${e.id}" has seq ${e.seq} but the log is ${this.length} long`);this.ops.push(e)}static from(e,t=[],r={}){let o=new n,i=[...t].reverse().find(d=>d.horizon),s=r.horizon??i?.seq??0;if(!Number.isInteger(s)||s<0)throw new Error(`A log cannot begin at seq ${s}`);if(i&&r.horizon!==void 0&&i.seq!==r.horizon)throw new Error(`A log said to begin at seq ${r.horizon} has its checkpoint at seq ${i.seq}`);let a=e[0];if(a&&s>0&&a.seq!==s)throw new Error(`A log compacted at seq ${s} begins with op "${a.id}" at seq ${a.seq}`);o.start=s;for(let d of e)o.append(d);for(let d of t)o.markEpoch(d);return o}replace(e,t=[],r={}){let o=n.from(e,t,r);this.ops=o.ops,this.marks=o.marks,this.start=o.start}epochs(){return this.marks}lastEpoch(){return this.marks.at(-1)}markEpoch(e){if(!Number.isInteger(e.seq)||e.seq<0||e.seq>this.length)throw new Error(`An epoch at seq ${e.seq} starts past the end of a log ${this.length} long`);if(e.seq<this.start)throw new Error(`An epoch at seq ${e.seq} is behind the horizon at seq ${this.start}: it went to the archive with the ops before it`);let t=this.lastEpoch();if(t&&e.seq<t.seq)throw new Error(`An epoch at seq ${e.seq} comes before the last one, at seq ${t.seq}`);this.marks.push(e)}truncate(e){if(!Number.isInteger(e)||e<this.start||e>this.length)throw new Error(`Cannot cut a log ${this.length} long back to ${e}`);let t=this.lastEpoch();if(t&&t.seq>e)throw new Error(`Cannot cut the log back to ${e}: an epoch begins at seq ${t.seq}`);return this.ops.splice(e-this.start)}checkpointAt(e,t,r={}){if(!Number.isInteger(t)||t<this.start||t>this.length)throw new Error(`No checkpoint at seq ${t}: this log holds seqs ${this.start} to ${this.length}`);let o=[...this.marks].reverse().find(a=>a.seq<=t);if(o?.seq===t)return{...o,horizon:!0};let i=this.fold(e,{...r,...o?{from:o}:{},to:t}).snapshot(),s=this.ops[t-1-this.start]?.at??o?.at;return{seq:t,base:i,...o?.version!==void 0?{version:o.version}:{},...s!==void 0?{at:s}:{},horizon:!0}}compact(e){if(!Number.isInteger(e.seq)||e.seq<this.start||e.seq>this.length)throw new Error(`Cannot compact at seq ${e.seq}: this log holds seqs ${this.start} to ${this.length}`);let t=this.ops.slice(0,e.seq-this.start),r=this.marks.filter(o=>o.seq<e.seq);return this.ops=this.ops.slice(e.seq-this.start),this.marks=[{...e,horizon:!0},...this.marks.filter(o=>o.seq>e.seq)],this.start=e.seq,{ops:t,epochs:r}}get(e){return this.ops.find(t=>t.id===e)}live(){let e=this.undoneIds();return this.ops.filter(t=>!e.has(t.id))}undoneIds(){return Re(this.ops)}opsInBatch(e){return this.ops.filter(t=>t.batch===e)}batches(){return br(this.ops,this.undoneIds())}fold(e,t={}){let r=t.from?.seq??0;if(r<this.start)throw new Error(t.from?`An epoch at seq ${r} is behind the horizon at seq ${this.start}: fold from the checkpoint`:`A log compacted at seq ${this.start} does not fold from empty: fold from its checkpoint`);let o=t.from?.base??{nodes:[],edges:[]},i=G.from(e,o,t.validate!==void 0?{validate:t.validate}:{}),s=t.to??this.length;for(let a of this.ops.slice(r-this.start,Math.max(0,s-this.start)))Mc(i,a);return i}toJSON(){return[...this.ops]}};function Mc(n,e){if(e.undoes!==void 0){n.applyPrimitives(e.primitives,{restoring:!0});return}try{n.applyPrimitives(e.primitives)}catch{n.applyPrimitives(e.primitives,{restoring:!0})}}function Re(n){let e=new Map;for(let r of n){if(!r.undoes)continue;let o=e.get(r.undoes);o?o.push(r.id):e.set(r.undoes,[r.id])}let t=new Map;for(let r=n.length-1;r>=0;r--){let o=n[r],i=e.get(o.id)??[];t.set(o.id,!i.some(s=>t.get(s)===!0))}return new Set(n.filter(r=>t.get(r.id)===!1).map(r=>r.id))}function br(n,e){let t=[],r=new Map;for(let o of n){let i=r.get(o.batch);i?i.push(o):(r.set(o.batch,[o]),t.push(o.batch))}return t.map(o=>{let i=r.get(o)??[],s=i[0];return{id:o,author:s.author,intent:s.batchIntent??s.intent,at:s.at,...s.lineage?{lineage:s.lineage}:{},ops:i,undone:i.every(a=>e.has(a.id))}})}function xr(n){return n?.automated===!0&&n.kind!=="human"&&n.kind!=="rule"}var Rs=n=>n?.[wn]===!0,Nc=(n,e)=>Rs(("graph"in n?n.graph:n).getNode(e));function _s(n,e,t){let r=n.tryDefinition(e);return t===void 0?r?.tidying:r?.edges?.[t]?.tidying}var As=n=>JSON.stringify(n.map(e=>[e.name,e.args]),(e,t)=>t&&typeof t=="object"&&!Array.isArray(t)?Object.fromEntries(Object.entries(t).sort()):t);function Os(n,e){let t=Ic(n);return[e,...e.map(r=>[r])].map(r=>t.get(As(r))).find(Boolean)}function Ic(n){let e=Re(n),t=new Map(n.map(o=>[o.id,o])),r=new Map;for(let o of n){let i=o.undoes!==void 0&&!e.has(o.id)&&!o.withheld?t.get(o.undoes):void 0,s=i?.suggests??(i?.mutation&&(i.lineage||o.undoneLineage)?[i.mutation]:[]);if(s.length>0)for(let a of[s,...s.map(d=>[d])])r.set(As(a),o)}return r}function Ps(n,e,t,r,o={}){let i=o.declaration!==!1,s=(a,d)=>`${r} may not ${a}: ${d}.`;for(let a of t){let d="edge"in a?a.edge:void 0,l=(d?[d.from,d.to]:["id"in a?a.id:a.node.id]).map(u=>e.getNode(u)??("node"in a?a.node:void 0));for(let u of l){if(!u)continue;if(Rs(u))return s(`change \u201C${T(n.tryDefinition(u.kind),u)}\u201D`,"a person said to leave it alone");if(!i)continue;let p=_s(n,u.kind);if(p==="never")return s(`change ${J(n,u.kind)} on its own`,"the app says they are never tidied");if(d&&p==="no-links")return s(`link or unlink ${J(n,u.kind)} on its own`,"the app says they are never linked automatically")}if(d&&i&&l[0]&&_s(n,l[0].kind,d.kind)==="never")return s(`${a.op==="add-edge"?"make":"break"} a \u201C${d.kind}\u201D link on its own`,"the app says that relation is never tidied")}}function jc(n,e){if(!e||n.length===0)return null;let t=e.roles,r=o=>t?o.wouldNeed.some(i=>t.includes(i)):o.wouldNeed.length>0;return n.every(({refusal:o})=>r(o))?e:null}var ot={scene:0,overview:10,rail:20,popover:30,dialog:40,toast:50},Dc={plots:0,stage:1,tag:2,ties:2,lines:3,tieLabels:4,occupants:6,seatMarks:7,zoom:8,card:10,opened:11},Tc={under:0,raised:1,over:2},vr=n=>`--graview-layer-${n}`,Fc=n=>`var(${vr(n)}, ${ot[n]})`;function Zc(){return Object.keys(ot).map(n=>` ${vr(n)}: ${ot[n]};`).join(`
4
- `)}function Lc(n){let e=n.onBehalfOf??n;return{kind:e.kind,...e.id!==void 0?{id:e.id}:{},...e.name!==void 0?{name:e.name}:{},...e.roles!==void 0?{roles:e.roles}:{}}}function Es(){return`sub_${(globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`).replace(/-/g,"").slice(0,20)}`}function zs(n){return{...n,id:n.id??Es(),at:n.at??new Date().toISOString()}}function Cc(n=[]){let e=[...n],t=new Set,r=()=>{for(let o of t)o()};return{list:o=>o===void 0?e:e.filter(i=>i.who.id===o),add(o){let i=zs(o);return e=[...e.filter(s=>s.id!==i.id),i],r(),i},remove(o){let i=e.length;e=e.filter(a=>a.id!==o);let s=e.length<i;return s&&r(),s},onChange(o){return t.add(o),()=>t.delete(o)}}}var Ns=(n,e)=>`${n}\0${e}`,Ms=new WeakMap;function Gc(n){let e=new Map;return{base:n,end:n,read:[],fields:e,written:[],seqOf:new Map,writers:{writerAt:(r,o,i)=>{let s=e.get(Ns(r,o));if(!s)return;let a=0,d=s.length;for(;a<d;){let l=a+d>>1;s[l].seq<i?a=l+1:d=l}return a===0?void 0:s[a-1].by}}}}function Bc(n){if(n.op==="add-node")return[n.node.id,Object.keys(n.node).filter(e=>e!=="id"&&e!=="kind")];if(n.op==="patch-node")return[n.id,Object.keys(n.after).filter(e=>!Le(n.after[e]))]}function Uc(n,e){let t=n.end,r=I(e.author).id,o=e.undoes!==void 0?n.seqOf.get(e.undoes):void 0,i=[];for(let s of e.primitives){let a=Bc(s);if(!a)continue;let[d,l]=a;for(let u of l){let p=e.undoes===void 0?r:o!==void 0?n.writers.writerAt(d,u,o):void 0,c=Ns(d,u),f=n.fields.get(c);f||n.fields.set(c,f=[]),f.push({seq:t,by:p}),i.push(c)}}n.written.push({seq:t,keys:i}),n.seqOf.set(e.id,t),n.read.push(e),n.end++}function Kc(n,e){for(;n.written.length>0&&n.written.at(-1).seq>=e;){let{keys:t}=n.written.pop();for(let r of t)n.fields.get(r)?.pop()}for(let t of n.read.slice(e-n.base))n.seqOf.delete(t.id);n.read.length=e-n.base,n.end=e}function it(n){let e=n.all(),t=typeof n.length=="number"?n.length:e.length,r=t-e.length,o=Ms.get(n);if(o&&o.base<=r&&r<=o.end){let i=Math.min(o.end,t);for(;i>r&&e[i-1-r]!==o.read[i-1-o.base];)i--;i===r&&r>o.base&&i<o.end?o=void 0:(i<o.end&&Kc(o,i),r>o.base&&(o.read=o.read.slice(r-o.base),o.base=r))}else o=void 0;o||Ms.set(n,o=Gc(r));for(let i=o.end;i<t;i++)Uc(o,e[i-r]);return o.writers}var qe={served:new WeakSet},On=n=>n.fields!==void 0||(n.hide?.length??0)>0,xe=n=>qe.on===!0||qe.served.has(n);var wr=new WeakMap;function Vc(n,e){let t=new Map,r=new Map(Object.entries(e??{}));return{base:n,end:n,read:[],kinds:t,creators:r,entries:[],records:{kindOf:o=>t.get(o),creatorOf:o=>r.get(o)}}}function Wc(n,e){let t=n.end;for(let r of e.primitives){if(r.op!=="add-node"&&r.op!=="remove-node")continue;let{id:o,kind:i}=r.node;if(n.kinds.has(o)||(n.kinds.set(o,i),n.entries.push({seq:t,id:o,creator:!1})),r.op!=="add-node"||n.creators.has(o)||e.undoes!==void 0)continue;let s=I(e.author).id;s!==void 0&&(n.creators.set(o,s),n.entries.push({seq:t,id:o,creator:!0}))}n.read.push(e),n.end++}function qc(n,e){for(;n.entries.length>0&&n.entries.at(-1).seq>=e;){let t=n.entries.pop();(t.creator?n.creators:n.kinds).delete(t.id)}n.read.length=e-n.base,n.end=e}function ce(n){let e=n.all(),t=typeof n.length=="number"?n.length:e.length,r=t-e.length,o=wr.get(n);if(o&&o.base<=r&&r<=o.end){let i=Math.min(o.end,t);for(;i>r&&e[i-1-r]!==o.read[i-1-o.base];)i--;i===r&&r>o.base&&i<o.end?o=void 0:(i<o.end&&qc(o,i),r>o.base&&(o.read=o.read.slice(r-o.base),o.base=r))}else o=void 0;o||wr.set(n,o=Vc(r,r>0?Hc(n,r)?.creators:void 0));for(let i=o.end;i<t;i++)Wc(o,e[i-r]);return o.records}function Hc(n,e){let t=[...n.epochs?.()??[]].reverse().find(r=>r.horizon);return t?.seq===e?t:void 0}function Is(n,e){ce(n);let t=wr.get(n),r=new Set;for(let i=t.entries.length-1;i>=0&&t.entries[i].seq>=e;i--)t.entries[i].creator&&r.add(t.entries[i].id);let o={};for(let[i,s]of t.creators)r.has(i)||(o[i]=s);return o}function He(n,e,t,r,o,i=qe.on===!0){if(!n?.sees?.length||B(e))return!0;let s=n.sees.filter(a=>a.kinds.includes(t.kind)&&(i||!On(a)));return s.length===0?!1:(e=I(e),s.some(a=>{if(!ye(a,e))return!1;if(!a.own&&!a.via)return!0;let d=e.id;if(d===void 0)return!1;let l=u=>u.id===d;return a.via?r.out(t.id,a.via).some(l)||r.in(t.id,a.via).some(l):t.id===d||r.out(t.id).some(l)||r.in(t.id).some(l)||o?.creatorOf(t.id)===d}))}var Sr=new Set;function st(n,e){return B(e)?Sr:n.modules?.disabledKinds??Sr}function Je(n,e){return B(e)?!1:(n.policy?.sees?.length??0)>0||st(n,e).size>0}function Fs(n,e){if(!Je(n,e))return()=>!0;let t=n.modules?.disabledKinds??Sr,r=n.policy?.sees??[],o=I(e),i=xe(n),s=d=>!t.has(d)&&(r.length===0||r.some(l=>l.kinds.includes(d)&&ye(l,o)&&!l.own&&!l.via&&(i||!On(l)))),a=n.schema.kinds.every(s);return d=>a||d!==void 0&&s(d)}function Pn(n,e){return t=>{let r=st(n,e);if(!n.policy?.sees?.length&&r.size===0)return!0;let o=ce(n.log),i=n.graph.getNode(t);if(i)return!r.has(i.kind)&&He(n.policy,e,i,n.graph,o,xe(n));let s=o.kindOf(t);return s===void 0?!0:!r.has(s)&&He(n.policy,e,{id:t,kind:s},{out:()=>[],in:()=>[]},o,xe(n))}}var Jc={out:()=>[],in:()=>[]};function Yc(n,e,t=new Map,r){let o=st(n,e);if(!n.policy?.sees?.length&&o.size===0)return()=>!0;let i=ce(n.log);return s=>{let a=t.get(s);if(a!==void 0)return a;let d,l=n.graph.getNode(s);if(l)d=!o.has(l.kind)&&He(n.policy,e,l,n.graph,i,xe(n));else{let u=i.kindOf(s);if(u===void 0)return r?.add(s),!0;d=!o.has(u)&&He(n.policy,e,{id:s,kind:u},Jc,i,xe(n))}return t.set(s,d),d}}function Xc(n){let e=new Map;return(t,r)=>{let o=`${t}\0${r}`,i=e.get(o);if(i===void 0){let s=n?.tryDefinition(t)?.fields?.shape,a=s?.[r];i=s!==void 0&&(a===void 0||a.safeParse?.(void 0).success===!0),e.set(o,i)}return i}}function _r(n,e){return Zs(n,e).lens}var $r=()=>({judged:new Map,shown:new Map});function Zs(n,e){let t=Xc(n.schema),r=B(e)?void 0:I(e).id,o=()=>n.log.length??n.log.all().length,i=new WeakMap,s=n.graph,a=(u,p,c,f,g)=>{let h=(v,$)=>{if(!u(v.id))return;let _;for(let H in v)if(!(!Object.hasOwn(v,H)||H==="id"||H==="kind"||!N(v[H],u))&&!(r!==void 0&&$(H)===r)){if(!t(v.kind,H))return;(_??=[]).push(H)}if(!_)return v;let z=_.join("\0"),j=i.get(v);if(j?.without===z)return j.node;let q=Object.fromEntries(Object.entries(v).filter(([H])=>!_.includes(H)));return i.set(v,{without:z,node:q}),q},x=v=>{let $=c();return h(v,_=>p().writerAt(v.id,_,$))},b=new WeakMap,k=g?v=>{let $=b.get(v);return $||b.set(v,$={node:x(v)}),$.node}:x,R=v=>{if(!u(v))return!1;let $=s.getNode(v);return $===void 0||k($)!==void 0},m=g?.shown??new Map,w=g?v=>{let $=m.get(v);return $===void 0&&m.set(v,$=R(v)),$}:R,y=s.outEdges&&s.inEdges?{present:{getNode:v=>s.getNode(v),outEdges:v=>s.outEdges(v),inEdges:v=>s.inEdges(v)},log:n.log,get writers(){return p()}}:void 0,S={sees:u,shows:w,served:k,servedWith:h,optional:t,kindOf:f,...r!==void 0?{actor:r}:{},...y?{timeline:y}:{},hides:()=>Je(n,e),pin:g?()=>S:()=>d($r())};return qe.lens?.(S,n,e)??S};function d(u){let p,c=o(),f=ce(n.log);return a(Yc(n,e,u.judged,u.unnamed),()=>p??=it(n.log),()=>c,g=>s.getNode(g)?.kind??f.kindOf(g),u)}return{lens:a(Pn(n,e),()=>it(n.log),o,u=>s.getNode(u)?.kind??ce(n.log).kindOf(u)),pinWith:d}}var js=new WeakMap,Ds=new WeakMap,Qc=n=>{let e=new Set;for(let t of n)for(let r of t.primitives)r.op==="add-node"||r.op==="remove-node"?e.add(r.node.id):r.op==="patch-node"?e.add(r.id):(e.add(r.edge.from),e.add(r.edge.to));return e};function eu(n,e){if(!Je(n,e))return n.log.all();let t=n.log.all(),r=n.log.length??t.length,o=r-t.length,i=[...st(n,e)].sort().join("\0"),s=Ls(e),a=js.get(n.log);a||js.set(n.log,a=new Map);let d=a.get(s),{pinWith:l}=Zs(n,e),u=Ds.get(n.log);u||Ds.set(n.log,u=new Set);let p=d!==void 0&&d.horizon===o&&d.off===i&&d.length<=r&&(d.length===o||t[d.length-1-o]===d.last);if(d&&p){if(d.length===r)return d.ops;let g=t.slice(d.length-o),h=l($r()),x=!0,b=Qc(g);for(let k of b){let R=d.judgments.judged.get(k),m=d.judgments.shown.get(k);if(R!==void 0&&h.sees(k)!==R||m!==void 0&&h.shows(k)!==m){x=!1;break}}if(x){for(let k of b)if(u.has(k)){x=!1;break}}if(x){let k=[...d.ops,...Ue(g,l(d.judgments))],R={horizon:o,off:i,length:r,last:t.at(-1),ops:k,judgments:d.judgments};return a.set(s,R),k}}let c={...$r(),unnamed:u},f=Ue(t,l(c));return a.set(s,{horizon:o,off:i,length:r,last:t.at(-1),ops:f,judgments:c}),f}function nu(n,e,t){return(t.subjectId===void 0||!e(t.subjectId)||n.shows(t.subjectId))&&t.nodeIds.every(r=>!e(r)||n.shows(r))&&!N(t,n.sees)}function Rr(n,e){return{all:()=>n,undoneIds:()=>Re(n),epochs:e}}var Ts=new WeakMap;function Ls(n){let e=B(n)?n:I(n);return`${n.kind}|${e.id??""}|${(e.roles??[]).join(",")}|${n.onBehalfOf?"for":""}`}var kr=(n,e)=>{let t=Reflect.get(n,e,n);return typeof t=="function"?t.bind(n):t},tu=Symbol.for("@graview/core:seat");function En(n,e){if(!Je(n,e))return n;let t=Ls(e),r=Ts.get(n);r||Ts.set(n,r=new Map);let o=r.get(t);if(o)return o;let i=n.graph,s=_r(n,e),a=m=>{let w=_=>_===void 0?void 0:m.served(_),y=_=>w(_)!==void 0,S=_=>y(i.getNode(_));return{served:w,seenNode:y,seenId:S,seenEdge:_=>S(_.from)&&S(_.to)&&!N(_,m.sees),servedAll:_=>_.flatMap(z=>w(z)??[])}},{served:d,seenId:l}=a(s),u=()=>a(s.pin?.()??s),p=(m,w)=>{let y=it(n.log),S=s.pin?.()??s,v=m.nodes.flatMap(_=>S.servedWith(_,z=>y.writerAt(_.id,z,w))??[]),$=new Set(v.map(_=>_.id));return{nodes:v,edges:m.edges.filter(_=>$.has(_.from)&&$.has(_.to)&&!N(_,S.sees))}},c=m=>{let w=p(m.base,m.seq);if(!m.creators)return{...m,base:w};let y=new Set(w.nodes.map(v=>v.id)),S=Object.fromEntries(Object.entries(m.creators).filter(([v,$])=>y.has(v)&&!N($,s.sees)));return{...m,base:w,creators:S}},f=m=>m&&c(m),g=()=>eu(n,e),h=()=>Rr(g(),()=>n.log.epochs()),x=new Proxy(i,{get(m,w){switch(w){case"getNode":return y=>d(m.getNode(y));case"has":return l;case"allNodes":case"nodesOfKind":return(...y)=>u().servedAll(m[w](...y));case"count":return(...y)=>u().servedAll(m.nodesOfKind(...y)).length;case"allEdges":case"edgesOfKind":case"outEdges":case"inEdges":return(...y)=>m[w](...y).filter(u().seenEdge);case"out":case"in":case"neighbors":return(y,...S)=>{let v=u();return v.seenId(y)?v.servedAll(m[w](y,...S)):[]};case"snapshot":return()=>{let y=m.snapshot(),S=u();return{...y,nodes:S.servedAll(y.nodes),edges:y.edges.filter(S.seenEdge)}};case"size":{let y=u();return{nodes:y.servedAll(m.allNodes({archived:"all"})).length,edges:m.allEdges({archived:"all"}).filter(y.seenEdge).length}}default:return kr(m,w)}}}),b=()=>{let m=g();return br(m,Re(m))},k=new Proxy(n.log,{get(m,w){switch(w){case"all":case"toJSON":return()=>[...g()];case"epochs":return()=>m.epochs().map(c);case"lastEpoch":return()=>f(m.lastEpoch());case"live":return()=>{let y=g(),S=Re(y);return y.filter(v=>!S.has(v.id))};case"get":return y=>g().find(S=>S.id===y);case"opsInBatch":return y=>g().filter(S=>S.batch===y);case"batches":return b;default:return kr(m,w)}}}),R=new Proxy(n,{get(m,w){switch(w){case tu:return{store:m,principal:e};case"graph":return x;case"log":return k;case"snapshot":return x.snapshot;case"batches":return b;case"canUndo":return y=>An(h(),typeof y=="string"?[y]:y);case"violations":return y=>m.violations(y,x).filter(S=>nu(s,v=>i.has(v),S));case"findings":return()=>m.findings().filter(y=>(y.id.includes("->")?y.id.split("->").map((v,$)=>$===0?v.slice(v.indexOf(":")+1):v):[y.id]).every(v=>!i.has(v)||l(v))&&!N(y,s.sees));case"wouldChange":return y=>m.wouldChange(y,e);case"preview":return(y,S,v)=>m.preview(y,S,{author:e,...v});case"seenBy":return y=>En(m,y);case"seenFor":return e;case"checkpoint":return(...y)=>f(m.checkpoint(...y));default:return kr(m,w)}}});return r.set(t,R),R}var Ar=new Set;function Or(n,e){if(!n||e===void 0)return{enabled:new Set(Object.keys(n??{})),disabledKinds:Ar,disabledMutations:Ar,disabledInvariants:Ar,administered:Cs(n,new Set(Object.keys(n??{})))};let t=new Set,r=a=>{if(!(t.has(a)||!(a in n))){t.add(a);for(let d of n[a]?.requires??[])r(d)}};for(let a of e)r(a);for(let[a,d]of Object.entries(n))d.required&&r(a);let o=new Set,i=new Set,s=new Set;for(let[a,d]of Object.entries(n))if(!t.has(a)){for(let l of d.kinds??[])o.add(l);for(let l of d.mutations??[])i.add(l);for(let l of d.invariants??[])s.add(l)}for(let a of t){let d=n[a];for(let l of d?.kinds??[])o.delete(l);for(let l of d?.mutations??[])i.delete(l);for(let l of d?.invariants??[])s.delete(l)}return{enabled:t,disabledKinds:o,disabledMutations:i,disabledInvariants:s,administered:Cs(n,t)}}function Cs(n,e){let t=new Map;for(let[r,o]of Object.entries(n??{}))e.has(r)&&o.visibility==="admin"&&t.set(r,o);return t}function Gs(n){return n.normalize("NFKD").replace(/\p{M}/gu,"").toLowerCase().trim().replace(/\s+/g," ")}var at=class{constructor(e){this.graph=e;for(let t of e.allNodes({archived:"all"}))this.file(t);e.subscribe(t=>this.follow(t))}kinds=new Map;filed=new Map;labelOf(e){return this.filed.get(e)?.label}lookup(e,t){let r=Gs(t);if(r.length===0)return{exact:[],prefix:[]};let o=e.includes("*")?[...this.kinds.values()]:e.flatMap(a=>this.kinds.get(a)??[]),i=[],s=[];for(let a of o)for(let d=Pr(a.sorted,r);d<a.sorted.length&&a.sorted[d].startsWith(r);d+=1){let l=[...a.ids.get(a.sorted[d])??[]];s.push(...l),a.sorted[d]===r&&i.push(...l)}return{exact:i,prefix:s}}follow(e){for(let t of e.removedNodes)this.unfile(t.id);for(let t of e.changedNodes)this.unfile(t.after.id),this.file(t.after);for(let t of e.addedNodes)this.file(t)}file(e){let t=T(this.graph.schema.tryDefinition(e.kind),e),r=Gs(t);this.filed.set(e.id,{kind:e.kind,key:r,label:t});let o=this.kinds.get(e.kind);o||this.kinds.set(e.kind,o={ids:new Map,sorted:[]});let i=o.ids.get(r);i?i.add(e.id):(o.ids.set(r,new Set([e.id])),o.sorted.splice(Pr(o.sorted,r),0,r))}unfile(e){let t=this.filed.get(e);if(!t)return;this.filed.delete(e);let r=this.kinds.get(t.kind),o=r?.ids.get(t.key);if(!r||!o||(o.delete(e),o.size>0))return;r.ids.delete(t.key);let i=Pr(r.sorted,t.key);r.sorted[i]===t.key&&r.sorted.splice(i,1)}};function Pr(n,e){let t=0,r=n.length;for(;t<r;){let o=t+r>>>1;n[o]<e?t=o+1:r=o}return t}function ru(n,e){return e.includes("*")?"record":e.map(t=>Y(n.tryDefinition(t),t)).join(" or ")}function Bs(n,e,t,r){let o=ru(n,e.kinds);if(r.length===0)return{ok:!1,reason:"none",candidates:r,message:`There is no ${o} called "${t}".`};let i=r.slice(0,10).map(a=>`${a.label} (${a.id})`),s=r.length>i.length?`, and ${r.length-i.length} more`:"";return{ok:!1,reason:"ambiguous",candidates:r,message:`"${t}" names more than one ${o}: ${i.join(", ")}${s}. Pass the id of the one you mean as ${e.name}.`}}var Ks=Symbol.for("@graview/core:node-ref"),Us=n=>typeof n=="object"&&n!==null?n[Ks]:void 0;function zn(n="*"){return ou(F().check(hn(1)),n)}function ou(n,e){let t=Object.freeze(e==="*"?["*"]:[...e]),r=o=>{o&&Object.defineProperty(o,Ks,{value:t,enumerable:!0,configurable:!0})};return r(n),r(M(n)),n}function Er(n){if(typeof n!="object"||n===null)return;let e=Us(n);if(e)return e;let t=M(n),r=Us(t);if(r)return r;let o=t?.innerType;return o?Er(o):void 0}function Mn(n){let e=n.shape;if(!e)return[];let t=[];for(let[r,o]of Object.entries(e)){let i=Er(o);i&&t.push({name:r,kinds:i,optional:o.safeParse(void 0).success})}return t}function zr(n){if(n===null||typeof n!="object")return JSON.stringify(n)??"null";if(Array.isArray(n))return`[${n.map(r=>r===void 0?"null":zr(r)).join(",")}]`;let e=n;return`{${Object.keys(e).filter(r=>e[r]!==void 0).sort().map(r=>`${JSON.stringify(r)}:${zr(e[r])}`).join(",")}}`}var Vs=(n,e)=>n.key<e.key?-1:n.key>e.key?1:0;function iu(n){let e=n.nodes.map(r=>({key:r.id,value:r})).sort(Vs),t=n.edges.map(r=>({key:O(r),value:{kind:r.kind,from:r.from,to:r.to}})).sort(Vs);return zr({nodes:e.map(r=>r.value),edges:t.map(r=>r.value)})}function Ye(n){return`sha256:${qs(iu(n))}`}function Ws(n,e,t,r={}){let o=r.validate??!0,i=r.base??{nodes:[],edges:[]},s=Ye(t),a=G.from(n,i,{validate:o});for(let[h,x]of e.entries())try{a.applyPrimitives(x.primitives)}catch(b){let k=e[h-1];return{ok:!1,expected:Ye(a.snapshot()),actual:s,...k?{divergedAfter:k.id}:{},reason:`The log does not fold: op "${x.id}" (${x.intent}) could not be applied. ${b instanceof Error?b.message:String(b)}`}}let d=Ye(a.snapshot());if(d===s)return{ok:!0,hash:s};let l=h=>{let x=G.from(n,i,{validate:o});for(let b=0;b<=h;b++)x.applyPrimitives(e[b].primitives);return Ye(x.snapshot())},u=h=>{try{let x=G.from(n,t,{validate:o});for(let b=e.length-1;b>h;b--)x.applyPrimitives(e[b].inverse);return Ye(x.snapshot())}catch{return}},p=h=>{let x=u(h);return x!==void 0&&x!==l(h)},c=-1,f=e.length-1;for(;c<f;){let h=Math.floor((c+f)/2);p(h)?f=h:c=h+1}let g=f>=0?e[f]:void 0;return{ok:!1,expected:d,actual:s,...g?{divergedAfter:g.id}:{},reason:g?`The graph and the fold of its log part after op "${g.id}" (${g.intent}).`:"The graph and the fold of its log disagree before any op: the base it folds from does not match."}}var su=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),au=new TextEncoder,du=new Uint32Array(64),cu=new Uint32Array(8),dt=Array.from({length:256},(n,e)=>e.toString(16).padStart(2,"0"));function qs(n){let e=au.encode(n),t=e.length*8,r=new Uint8Array(e.length+9+63>>6<<6);r.set(e),r[e.length]=128;let o=new DataView(r.buffer);o.setUint32(r.length-8,Math.floor(t/2**32)),o.setUint32(r.length-4,t>>>0);let i=cu;i[0]=1779033703,i[1]=3144134277,i[2]=1013904242,i[3]=2773480762,i[4]=1359893119,i[5]=2600822924,i[6]=528734635,i[7]=1541459225;let s=du;for(let d=0;d<r.length;d+=64){for(let b=0;b<16;b++)s[b]=o.getUint32(d+b*4);for(let b=16;b<64;b++){let k=s[b-15],R=s[b-2],m=(k>>>7|k<<25)^(k>>>18|k<<14)^k>>>3,w=(R>>>17|R<<15)^(R>>>19|R<<13)^R>>>10;s[b]=s[b-16]+m+s[b-7]+w>>>0}let l=i[0],u=i[1],p=i[2],c=i[3],f=i[4],g=i[5],h=i[6],x=i[7];for(let b=0;b<64;b++){let k=(f>>>6|f<<26)^(f>>>11|f<<21)^(f>>>25|f<<7),R=f&g^~f&h,m=x+k+R+su[b]+s[b]>>>0,w=(l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10),y=l&u^l&p^u&p,S=w+y>>>0;x=h,h=g,g=f,f=c+m>>>0,c=p,p=u,u=l,l=m+S>>>0}i[0]=i[0]+l>>>0,i[1]=i[1]+u>>>0,i[2]=i[2]+p>>>0,i[3]=i[3]+c>>>0,i[4]=i[4]+f>>>0,i[5]=i[5]+g>>>0,i[6]=i[6]+h>>>0,i[7]=i[7]+x>>>0}let a="";for(let d=0;d<8;d++){let l=i[d];a+=dt[l>>>24]+dt[l>>>16&255]+dt[l>>>8&255]+dt[l&255]}return a}var Nn=class{constructor(e){this.inner=e}seen=new Set;reads(){return[...this.seen]}markAll(e){for(let t of e)this.seen.add(t.id);return e}markEdges(e){for(let t of e)this.seen.add(t.from),this.seen.add(t.to);return e}getNode(e){return this.seen.add(e),this.inner.getNode(e)}has(e){return this.seen.add(e),this.inner.has(e)}allNodes(e){return this.markAll(this.inner.allNodes(e))}allEdges(e){return this.markEdges(this.inner.allEdges(e))}nodesOfKind(e,t){return this.markAll(this.inner.nodesOfKind(e,t))}edgesOfKind(e,t){return this.markEdges(this.inner.edgesOfKind(e,t))}out(e,t,r){return this.seen.add(e),this.markAll(this.inner.out(e,t,r))}in(e,t,r){return this.seen.add(e),this.markAll(this.inner.in(e,t,r))}neighbors(e,t){return this.seen.add(e),this.markAll(this.inner.neighbors(e,t))}};function uu(n,e){return{...e,name:n}}function Mr(n){if(!n.creates?.length)return!1;let e=n.input.shape;return e===void 0||!("id"in e)}function Xs(n){let e=n.input,t=e._zod?.def;if(t?.type!=="object"||t.catchall!==void 0||!e.shape)return;let r=Object.keys(e.shape);return Mr(n)?[...r,"id"]:r}var Hs=(n,e)=>`does not take ${n.map(t=>`"${t}"`).join(", ")}; it takes ${e.length>0?e.map(t=>`"${t}"`).join(", "):"nothing"}`;function lu(n){if(typeof n!="object"||n===null)return;let e=n.id;if(e!==void 0){if(typeof e!="string"||e.trim().length===0)throw new E("An id must be a non-empty string",`Got ${JSON.stringify(e)}.`);return e}}function fu(n){let{id:e,...t}=n;return t}function Js(n){return n.normalize("NFKD").replace(/\p{M}/gu,"").toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,"")||"item"}function Qs(n){let e=2166136261;for(let t=0;t<n.length;t++)e=Math.imul(e^n.charCodeAt(t),16777619);return(e>>>0).toString(36).padStart(7,"0")}function pu(n,e){if(e.limited&&e.me===void 0)return Ys(n,e.held);let t=e.limited?`${n}.${Qs(e.me)}`:n,r=t;for(let o=2;e.seen(r);o++)r=`${t}-${o}`;return e.held(r)?Ys(t,e.held):r}function Ys(n,e){let t;do t=`${n}-${Math.floor(Math.random()*36**6).toString(36).padStart(6,"0")}`;while(e(t));return t}function Xe(n,e,t,r={}){let o=Mr(e)?lu(t):void 0,i=o===void 0?t:fu(t),s=Xs(e);if(s&&typeof i=="object"&&i!==null&&!Array.isArray(i)){let m=Object.keys(i).filter(w=>!s.includes(w)&&i[w]!==void 0);if(m.length>0)throw new Ve(e.name,[{path:[],message:Hs(m,s)}])}let a=e.input.safeParse(i);if(!a.success){let m=Object.keys(e.input.shape??{});throw new Ve(e.name,a.error.issues.map(w=>w.code==="unrecognized_keys"&&m.length>0?{...w,message:Hs(w.keys,m)}:w))}let d=a.data,l=new Nn(r.seen??n),u=[],p=new Set,c=m=>l.has(m)||n.has(m)||p.has(m),f,g=m=>{let w=new Set([...n.outEdges(m),...n.inEdges(m)]);for(let y of w)l.getNode(y.from),l.getNode(y.to),u.push({op:"remove-edge",edge:y});return w},h={graph:l,schema:n.schema,me:r.me,emit(m){u.push(m)},addNode(m){u.push({op:"add-node",node:m})},removeNode(m){let w=l.getNode(m)&&n.getNode(m);if(!w)throw new L(m,`Cannot remove missing node "${m}"`);g(m),u.push({op:"remove-node",node:w})},patchNode(m,w){let y=l.getNode(m)&&n.getNode(m);if(!y)throw new L(m,`Cannot patch missing node "${m}"`);let S={},v={};for(let[$,_]of Object.entries(w)){let z=y[$];JSON.stringify(z)===JSON.stringify(_)&&!r.keepUnchanged?.(_,$,y)||(S[$]=z,v[$]=_)}Object.keys(v).length!==0&&u.push({op:"patch-node",id:m,before:S,after:v})},archiveNode:m=>h.patchNode(m,{[Ze]:!0}),unarchiveNode:m=>h.patchNode(m,{[Ze]:void 0}),mergeNode(m,w){let y=l.getNode(w)&&n.getNode(w);if(!y)throw new L(w,`Cannot merge into missing node "${w}"`);if(m===w||Se(y))throw new E(m===w?"Cannot merge a record into itself":"Cannot merge into an archived record");let S=new Set([...n.outEdges(w),...n.inEdges(w)].map(O));for(let v of g(m)){let $={kind:v.kind,from:v.from===m?w:v.from,to:v.to===m?w:v.to};$.from!==$.to&&!S.has(O($))&&(S.add(O($)),u.push({op:"add-edge",edge:$}))}h.archiveNode(m),f=w},addEdge(m){u.push({op:"add-edge",edge:m})},removeEdge(m){u.push({op:"remove-edge",edge:m})},setSingleSource(m,w,y){n.inEdges(w,m).some(S=>S.from===y)||u.push({op:"add-edge",edge:{kind:m,from:y,to:w}});for(let S of n.inEdges(w,m))l.getNode(S.from),S.from!==y&&u.push({op:"remove-edge",edge:S})},freshId(m,w){if(o!==void 0&&!p.has(o)){if(r.seesInFull&&!r.seesInFull())throw new E(`"${e.name}" makes its own id here`,"Leave id out: the answer says the id it made.");if(c(o))throw new E(`Id "${o}" is already taken`,`"${e.name}" was asked to make a node with that id, and the graph has one. Pick another, or leave id out and let the act mint one.`);return p.add(o),o}let y=w?`${w}:${Js(m)}`:Js(m),v=pu(y,{seen:$=>(r.seen?r.seen.has($):n.has($))||p.has($),held:c,limited:r.seesInFull!==void 0&&!r.seesInFull(w),me:r.me});return p.add(v),v}};e.apply(h,d);let x=r.check?.(u,e),b=new Set(u.flatMap($e)),k=new Nn(r.seen??n),R=e.describe?.(d,k)??`${e.name}(${Object.entries(d).map(([m,w])=>`${m}=${JSON.stringify(w)}`).join(", ")})`;return{primitives:u,reads:[...new Set([...l.reads(),...k.reads()])],...e.describe?{described:[...k.reads(),...x??[]]}:{},writes:[...b],intent:R,...f!==void 0?{mergedInto:f}:{}}}var ea=Symbol.for("@graview/core:amount"),Hy=(n,e)=>(Object.defineProperty(M(n),ea,{value:e,enumerable:!0}),n);function Nr(n,e=!0){let t=M(n);return t?.[ea]??(e&&t?.innerType?Nr(t.innerType):void 0)}function na(n,e={}){let t=Number.isInteger(n),r={maximumFractionDigits:t?0:2,minimumFractionDigits:t?0:2};try{return re(n,e.locale,e.currency?{style:"currency",currency:e.currency,...r}:r)}catch{return re(n,e.locale,r)}}function ta(n,{format:e,unit:t,currency:r,locale:o}){let i=/^[A-Z]{3}$/.test(t??"");return e==="money"||!e&&i?na(n,{...o?{locale:o}:{},...(i?t:r)?{currency:i?t:r}:{}}):e==="percent"?re(n,o,{style:"percent",maximumFractionDigits:0}):re(n,o)+(t?` ${t}`:"")}var hu=Symbol.for("@graview/core:typed-field");function Ir(n){let e=M(n);return e?e[hu]??Ir(e.innerType):void 0}var gu=/^[("'“‘]*(?:(?:[a-z]{1,3}\.){2,}|(?:dr|mr|mrs|ms|mx|st|mt|vs|jr|sr|prof|no|fig|approx)\.)$/i;function mu(n){for(let e of n.matchAll(/[.!?](?=\s|$)/g)){let t=n.slice(0,e.index+1),r=/\S+$/.exec(t)?.[0]??"";if(!(e[0]==="."&&gu.test(r))&&!(t.split(" ").length<3&&e.index+1<n.length))return t}}function ra(n,e=140){let t=n.replace(/^[#>\s]+|\*\*|`|\](\([^)\s]*\))?|\[/gm,"").replace(/\s+/g," ").trim(),r=mu(t);return r&&r.length<=e?r:t.length<=e?t:`${(t.slice(0,e+1).replace(/\s+\S*$/,"")||t.slice(0,e)).replace(/[\s,;:.—-]+$/,"")}\u2026`}function yu(n){let e=n.fields.shape;return Object.keys(e).flatMap(t=>{let r=Xn(e[t])?xn(t):void 0;return r&&e[r]?[r]:[]})}var bu=[["skip","Skip this one","Leave one day out of the series; the rest stay as they are.","Skip {} on "],["detach","Change just this one","Make one day of the series a record of its own, to change apart from the rest.","Change {} only on "],["split","Change from here","End the series the day before, and start it again from that day with what changes.","Change {} from "]];function oa(n,e){let t=new Set(e.map(o=>o.name)),r=[];for(let o of n.definitions){let i=yu(o);if(i.length===0)continue;let s=o.kind,a=o.fields.shape,d=Object.keys(a).filter(u=>!(u in(o.fixed??{}))),l=u=>T(o,u);for(let[u,p,c,f]of bu){let g=`${u}-${s}`;t.has(g)||r.push({name:g,derived:{kind:s,act:u},title:p,description:c,subject:{kinds:[s],arg:"id"},writes:i.map(Te),...u==="skip"?{}:{creates:[s]},input:Wn({id:zn([s]),on:F().check(gn(/^\d{4}-\d{2}-\d{2}$/,"a day, like 2026-10-21")),...i.length>1?{field:de(Ki(i))}:{},...u==="skip"?{}:Object.fromEntries(d.map(h=>[h,de(a[h])]))}),describe:(h,x)=>f.replace("{}",l(x.getNode(String(h.id))??{id:h.id}))+fe(String(h.on)),apply(h,x){let b=h.graph.getNode(String(x.id)),k=String(x.field??i[0]),R=b?.[k],m=b?.[Te(k)],w=String(x.on);if(typeof R!="string"||!Fe(m))throw new ne(`${l(b??{id:x.id})} does not repeat`,"refused");let y=De(R,m,{from:w,to:w})[0];if(!y)throw new ne(`${l(b)} does not fall on ${fe(w)}`,"refused");let S=String(b.id),v=Object.fromEntries(d.filter(K=>x[K]!==void 0).map(K=>[K,x[K]])),$=Te(k),_=K=>{let co=Object.fromEntries(Object.entries({...b,...K,...v}).filter(([Tn,St])=>St!=null&&Tn!=="id")),uo=h.freshId(l(co));h.addNode({...co,id:uo,kind:s});for(let Tn of Object.keys(o.edges??{}))for(let St of h.graph.out(S,Tn))h.addEdge({kind:Tn,from:uo,to:St.id})};if(u!=="split"){h.patchNode(S,{[$]:{...m,except:[...new Set([...m.except??[],w])].sort()}}),u==="detach"&&_({[k]:y,[$]:null});return}if(Object.keys(v).length===0)throw new ne(`Nothing to change: give ${l(b)} from ${fe(w)} something new`,"invalid");if(w<=R.slice(0,10))return h.patchNode(S,v);let z=new Date(Date.parse(`${w}T00:00:00Z`)-864e5).toISOString().slice(0,10),j=m.count?De(R,{...m,except:[]},{to:z}).length:0,{count:q,except:H,...so}=m,ao=K=>H?.some(K)?{except:H.filter(K)}:{};h.patchNode(S,{[$]:{...so,until:z,...ao(K=>K<w),...q?{count:j}:{}}}),_({[k]:y,[$]:{...so,...ao(K=>K>=w),...q?{count:q-j}:{},continues:S}})}})}}return r}function ia(n){let e=n.fields.shape;return Object.keys(e).filter(t=>!(t in(n.fixed??{})))}function jr(n,e){let t=e.subject;return t?t.kinds==="*"?n.kinds:t.kinds:[]}function Dr(n,e){let t=n.subject;if(!t||!n.writes&&n.creates?.length)return[];let r=new Set(Object.keys(e.fields.shape));if(n.writes)return n.writes.filter(s=>r.has(s));let o=n.input.shape??{},i=new Set(Mn(n.input).map(s=>s.name));return Object.keys(o).filter(s=>s!==t.arg&&r.has(s)&&!i.has(s))}function sa(n,e){let t=new Map,r=(o,i,s)=>{let a=t.get(o)??new Map;a.get(i)?.includes(s)||(a.set(i,[...a.get(i)??[],s]),t.set(o,a))};for(let o of e){for(let i of jr(n,o)){let s=n.tryDefinition(i);if(s)for(let a of Dr(o,s))r(i,a,o.name)}for(let[i,s]of Object.entries(o.writesOther??{})){let a=n.tryDefinition(i)?.fields.shape;if(a)for(let d of s)d in a&&r(i,d,o.name)}}return t}function aa(n,e,t){let r=n.tryDefinition(t);if(!r)return[];let o=sa(n,e).get(t);return ia(r).filter(i=>!o?.has(i))}var da=n=>`edit-${n}`;function ca(n,e,t){let r=n.tryDefinition(t);if(!r)return[];let o=new Set;for(let i of e)i.derived||((i.creates??[]).includes(t)&&o.add(i.name),jr(n,i).includes(t)&&Dr(i,r).length>0&&o.add(i.name));return[...o]}function ua(n,e){let t=new Set(e.map(o=>o.name)),r=[];for(let o of n.definitions){let i=o.kind,s=da(i);if(t.has(s))continue;let a=aa(n,e,i);if(a.length===0)continue;let d=o.fields.shape,l=Y(o,i),u=a.map(p=>Zn(o,p).toLowerCase());r.push({name:s,derived:{kind:i,act:"edit"},idempotent:!0,title:`Change the ${l}`,description:`Change what was set when this ${l} was made: ${u.join(", ")}.`,subject:{kinds:[i],arg:"id"},writes:a,input:Wn({id:zn([i]),...Object.fromEntries(a.map(p=>[p,de(wu(d[p]))]))}),describe:(p,c)=>xu(o,d,a,p,c),apply(p,c){let f={};for(let g of a){let h=c[g];h!==void 0&&(f[g]=h)}if(Object.keys(f).length===0)throw new ne(`Nothing to change \u2014 give at least one of ${u.join(", ")} a value.`,"invalid");p.patchNode(c.id,f)}})}return r}function xu(n,e,t,r,o){let i=o.getNode(r.id),s=i?T(n,i):"a record",a=t.filter(d=>r[d]!==void 0).map((d,l)=>{let u=r[d],p=xn(d),c=p!==void 0&&p in e,f=Zn(n,c?p:d);return`the ${f===f.toUpperCase()?f:f.charAt(0).toLowerCase()+f.slice(1)}${l===0?` of ${s}`:""} to ${c?u?`repeat ${vu(u)}`:"stop repeating":la(n,e[d],d,u)}`});return a.length===0?`Changed nothing on ${s}`:`Changed ${a.length>1?`${a.slice(0,-1).join(", ")} and ${a.at(-1)}`:a[0]}`}var vu=n=>`every ${(n.interval??1)>1?`${n.interval} ${n.every}s`:n.every}`;function la(n,e,t,r){if(r===null||r===""||Array.isArray(r)&&r.length===0)return"nothing";let o=n.display?.format?.[t];try{if(o)return String(o(r))}catch{}if(mn(r).length>0)return mn(r).map(i=>i.name).join(", ");if(yn(e))return Array.isArray(r)&&r.length>1?`${r.length} linked records`:"a linked record";if(Array.isArray(r))return r.map(i=>la(n,e,t,i)).join(", ");if(typeof r=="boolean")return r?"yes":"no";if(typeof r=="number"){let i=Nr(e);return i?ta(r,i):Ir(e)==="duration"?`${r>=60?`${Math.floor(r/60)} h `:""}${r%60||r<60?`${r%60} min`:""}`.trim():String(r)}if(typeof r!="string")return"a new value";if(an.test(r))return fe(r);if(_t.test(r))return Rt(r);for(let i=M(e);i;i=M(i.innerType))if(i.type==="enum")return C(r);return`\u201C${ra(r,60)}\u201D`}function wu(n){let e=n;for(let t=0;t<4;t++){let r=e._zod?.def;if((r?.type==="default"||r?.type==="prefault")&&r.innerType)e=r.innerType;else break}return e}function fa(n,e){return n.filter(t=>!t.derived&&(t.creates??[]).includes(e)).map(t=>t.name)}function Tr(n,e,t){if(t.derived)return t.derived.act==="edit"||t.derived.act==="skip"||t.derived.act==="detach"||t.derived.act==="split"?ca(n,e,t.derived.kind):fa(e,t.derived.kind)}function ku(n,e){let t=new Set(e.map(o=>o.name)),r=[];for(let o of n.definitions){let i=o.kind,s=Y(o,i),a=(l,u)=>{let p=l.getNode(String(u));return p?T(o,p):String(u)},d=zn([i]);for(let[l,u,p,c]of[["remove","Remove",`Remove the ${s}`,`Take this ${s} out of the graph, with every tie it has. Undo puts it back.`],["archive","Archive",`Archive the ${s}`,`Set this ${s} aside, with its ties and history kept.`],["unarchive","Bring back","Bring it back",`Bring this archived ${s} back.`],["merge","Merge",`Merge into another ${s}`,`The other takes this ${s}'s ties, and this one is archived.`],["leave-alone","Leave alone","Leave this one alone",`Nothing automated changes this ${s}: tidying passes it by until you allow it again.`],["allow-tidying","Allow tidying of","Allow tidying again",`Let tidying change this ${s} again.`]]){let f=`${l}-${i}`,g=l==="leave-alone"||l==="allow-tidying";t.has(f)||!g&&l!=="remove"&&o.archives===!1||g&&o.tidying==="never"||r.push({name:f,derived:{kind:i,act:l},title:p,description:c,subject:{kinds:[i],arg:"id"},...l==="remove"?{destructive:!0}:{},idempotent:!0,input:je(l==="merge"?{id:d,into:d}:{id:d}),describe:(h,x)=>{let b=l==="remove"&&x.getNode(String(h.id)),k=b?new Set(Object.values(b).flatMap(R=>mn(R).map(m=>m.href))).size:0;return`${u} ${a(x,h.id)}${l==="merge"?` into ${a(x,h.into)}`:""}${k?` and its ${k} file${k>1?"s":""}`:""}`},apply:g?(h,x)=>h.patchNode(String(x.id),{[wn]:l==="leave-alone"?!0:void 0}):(h,x)=>h[`${l}Node`](x.id,x.into)})}}return r}function Fr(n,e){return[...ua(n,e),...ku(n,e),...oa(n,e)]}var Su=500,Zr=120;function In(n){if(n===void 0)return;let{basis:e,confidence:t,model:r,suggestion:o,interaction:i}=n??{},s=typeof e=="string"?e.trim():"",a=typeof r=="string"?r.trim():"";if(!s||s.length>Su||t!==void 0&&!(typeof t=="number"&&t>=0&&t<=1)||r!==void 0&&!(a&&a.length<=Zr)||o!==void 0&&!(typeof o=="string"&&o.length>0&&o.length<=Zr)||i!==void 0&&!(typeof i=="string"&&i.length>0&&i.length<=Zr))throw new E("A lineage is { basis: 1\u2013500 characters, confidence?: 0\u20131, model?: 1\u2013120 characters, suggestion?: an op id, interaction?: an AI interaction's id }");return{basis:s,...t!==void 0?{confidence:t}:{},...a?{model:a}:{},...typeof o=="string"?{suggestion:o}:{},...typeof i=="string"?{interaction:i}:{}}}var Qe="keep-link";function pa(n){let e=(t,r)=>{let o=t.getNode(r);return o?T(n.tryDefinition(o.kind),o):r};return{name:Qe,title:"Keep this link",input:je({kind:F(),from:F(),to:F()}),describe:(t,r)=>`Keep the link from ${e(r,t.from)} to ${e(r,t.to)}`,apply(t,r){let{kind:o,from:i,to:s}=r;if(!t.graph.getNode(i)||!t.graph.getNode(s)){let a=O({kind:o,from:i,to:s});throw new L(a,`Cannot remove missing edge ${a}`)}t.removeEdge({kind:o,from:i,to:s}),t.addEdge({kind:o,from:i,to:s})}}}var ha=(n,e)=>[...n].filter(t=>!t.derived&&t.name!==Qe&&typeof e=="string"&&(t.connects?.includes(e)||t.severs?.includes(e))).map(t=>t.name);var ga=["kind-unknown","node-shape","edge-dangling","edge-disallowed","rule-error","rule-budget"];function ma(n,e){let t=et(n,e);return t&&[...t.fields].filter(Boolean)}function $u(n,e,t){return n.tryDefinition(e)?.fields?.shape?.[t]}function ct(n,e){try{return T(n.tryDefinition(e.kind),e)}catch{return typeof e.label=="string"?e.label:"A record"}}var _u=n=>`${n.kind}:${n.from}->${n.to}`,ut=(n,e)=>n<e?-1:n>e?1:0;function ya(n,e,t={}){let{schema:r}=n,o=[],i=new Map;for(let c of e.nodes)i.has(c.id)||i.set(c.id,c);let s=c=>e.edges.filter(f=>f.from===c||f.to===c),a=c=>({action:"drop",primitives:[...s(c.id).filter(f=>i.has(f.from)&&i.has(f.to)).map(f=>({op:"remove-edge",edge:f})),{op:"remove-node",node:c}]}),d=new Set;for(let c of[...i.values()].sort((f,g)=>ut(f.id,g.id))){if(!r.tryDefinition(c.kind)){d.add(c.id),o.push({code:"kind-unknown",id:c.id,message:`${ct(r,c)} is a kind of record this app no longer has`,repair:a(c)});continue}let f=ma(r,c);if(f===void 0)continue;let g=ct(r,c),h=new Map,x=f.length>0;for(let b of f){if(b==="id"||b==="kind"){x=!1;continue}let k=$u(r,c.kind,b),R=k?k.safeParse(void 0):{success:!0,data:void 0},m=r.tryDefinition(c.kind)?.defaults;!R.success&&k&&m&&Object.hasOwn(m,b)&&(R=k.safeParse(m[b])),R.success?R.data===void 0?h.set(b,{action:"clear",value:ee}):h.set(b,{action:"coerce",value:R.data}):x=!1}if(x){let b={...c};for(let[k,R]of h)R.value===ee?delete b[k]:b[k]=R.value;ma(r,b)!==void 0&&(x=!1)}if(f.length===0){o.push({code:"node-shape",id:c.id,message:`${g} does not fit what ${c.kind} declares`,repair:a(c)});continue}for(let b of f){let k=h.get(b),R=x&&k?{action:k.action,primitives:[{op:"patch-node",id:c.id,before:{[b]:c[b]===void 0?ee:c[b]},after:{[b]:k.value}}]}:a(c);o.push({code:"node-shape",id:c.id,detail:b,message:`${g}: ${C(b)} does not fit what ${c.kind} declares`,repair:R})}}let l=new Set,u=[];for(let c of[...e.edges].sort((f,g)=>ut(O(f),O(g)))){if(l.has(O(c)))continue;l.add(O(c));let f=_u(c),g=i.get(c.from),h=i.get(c.to);if(!g||!h){o.push({code:"edge-dangling",id:f,message:"A link points at a record that is not there",repair:{action:"drop",primitives:[{op:"remove-edge",edge:c}]}});continue}u.push(c),!(d.has(g.id)||d.has(h.id))&&(r.edgeAllowed(c.kind,g.kind,h.kind)||o.push({code:"edge-disallowed",id:f,message:`${ct(r,g)} \u2192 ${ct(r,h)}: this app does not allow that link between them`,repair:{action:"drop",primitives:[{op:"remove-edge",edge:c}]}}))}let p=n.invariants??[];if(p.length>0){let c=G.from(r,{nodes:[...i.values()],edges:u},{validate:!1}),f=new Set,g;try{g=Ge(c,p,t.invariantOptions??{})}catch{g=[{invariant:"rules",status:"could-not-judge",label:"The rules",message:"The rules could not be judged",nodeIds:[],repairs:[]}]}for(let h of g){let x=h.status==="could-not-judge"?"rule-error":h.status==="over-budget"?"rule-budget":void 0;if(!x)continue;let b=h.subjectId??h.invariant,k=`${x}|${b}|${h.invariant}`;f.has(k)||(f.add(k),o.push({code:x,id:b,detail:h.invariant,message:h.message}))}}return o.sort((c,f)=>ga.indexOf(c.code)-ga.indexOf(f.code)||ut(c.id,f.id)||ut(c.detail??"",f.detail??""))}var lt=()=>globalThis.__graviewWatch;function ba(n){lt()?.store?.(n)}function ft(n){n!==void 0&&lt()?.learn?.({ids:[n],words:[]})}function xa(n,e){lt()?.refused?.({...n,...e===void 0?{}:{author:e}})}function Ru(n,e,t){lt()?.seat?.(n,e,t)}function Lr(n){if(typeof n=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(n))return n;let e=new Date(n);if(Number.isNaN(e.getTime()))throw new Error(`Not a day: ${String(n)}`);return e.toISOString().slice(0,10)}function va(n=Date.now()){let e=new Date(n).getTime(),t=new Date(e);return t.setUTCHours(24,0,0,0),t.getTime()-e}function Au(n,e){let t,r=()=>{t=setTimeout(()=>{let o=n.tick(new Date);r(),e?.(o)},va()+1e3),t.unref?.()};return r(),()=>clearTimeout(t)}var pt=class extends E{constructor(e){super(`This is the app as it stood${e.at?` at ${e.at}`:" at the start"}: the past is read, never changed`),this.name="PastError"}},Cr="preview",D=(n,e)=>e===void 0?{}:{[n]:e},Ae={kind:"human"},wa={kind:"system"},Sa={kind:"system",id:"modules",name:"Modules"},ka=n=>n.mutation===null&&n.undoes===void 0;function Gr(n,e){return`${n.invariant}|${n.subjectId??""}|${n.line||e?.has(n.invariant)?n.label:n.message}`}var Ou=new Set(["remove","archive","unarchive","merge"]),Pu={has:()=>!0},$a=n=>new Set(n.filter(e=>e.shape).map(e=>e.name));function _a(n,e,t){let r=$a(n),o=p=>Gr(p,r),i=new Set(e.map(o)),s=new Set(t.map(o)),a=t.filter(p=>!i.has(o(p))),d=e.filter(p=>!s.has(o(p)));if(a.length===0||d.length===0)return{introduces:a,resolves:d};let l=p=>p.subjectId&&Gr(p,Pu),u=d.map(l);return{introduces:a.filter(p=>{let c=l(p)?u.indexOf(l(p)):-1;return c<0||(u[c]=null,!1)}),resolves:d.filter((p,c)=>u[c]!==null)}}var en=class extends Error{constructor(t,r){super(`Op "${t.id}" (${t.intent}) could not be applied: ${r instanceof Error?r.message:String(r)}`,{cause:r});this.op=t;this.name="ReceiveError"}},ht=class extends E{constructor(t,r){super(`Unknown mutation "${t}"`,`Registered: ${r.join(", ")||"(none)"}`);this.mutation=t;this.name="UnknownMutationError"}};function Eu(){let n=globalThis.crypto,e=new Uint8Array(6);if(n?.getRandomValues)n.getRandomValues(e);else for(let t=0;t<e.length;t++)e[t]=Math.floor(Math.random()*256);return[...e].map(t=>t.toString(36).padStart(2,"0")).join("")}var Br=class n{schema;graph;log;mutations=new Map;keeper;invariants;invariantOptions;policy;intelligence;may=new Map;by;declaredModules;startingModules;projected;nextId;now;validate;mintBatch;batchTag;counter=0;opCount=0;quiet=0;rehearsing=!1;suggesting=!1;ticked;past;pastEvery;listeners=new Set;constructor(e){this.pastEvery=Math.max(1,e.pastEvery??64),this.past=e.past,this.schema=e.schema,this.invariants=e.invariants??[],this.invariantOptions=e.invariantOptions??{},this.policy=e.policy,this.by=e.principal??Ae,this.intelligence=e.intelligence??[];for(let i of e.intelligence??[])i.may&&this.may.set(i.name,new Set(i.may));this.declaredModules=e.modules,this.startingModules=e.enabledModules,this.nextId=e.ids??(()=>`op${++this.opCount}`),this.now=e.now??(()=>new Date().toISOString()),this.validate=e.validate??!0;let t=Eu();this.batchTag=e.batchIds?void 0:t,this.mintBatch=e.batchIds??(i=>`${i}:${t}:${++this.counter}`);for(let i of e.past?[]:e.mutations??[]){if(this.mutations.has(i.name))throw new E(`Duplicate mutation "${i.name}"`);this.mutations.set(i.name,i)}for(let i of e.past?[]:Fr(e.schema,e.mutations??[]))this.mutations.set(i.name,i);!e.past&&!this.mutations.has(Qe)&&(this.keeper=pa(e.schema),this.mutations.set(Qe,this.keeper));let r=D("horizon",e.horizon),o={validate:this.validate};if(e.log){this.log=We.from(e.log,e.epochs,r);let i=this.log.lastEpoch();this.graph=e.snapshot?G.from(e.schema,e.snapshot,o):this.log.fold(e.schema,{...o,...i?{from:i}:{}})}else this.log=We.from([],e.epochs??(e.snapshot?[{seq:e.horizon??0,base:e.snapshot}]:[]),r),this.graph=G.from(e.schema,e.snapshot??{nodes:[],edges:[]},o);e.past||(this.countPastTheLog(),ba(this))}stillNow(){if(this.past)throw new pt(this.past)}countPastTheLog(){let e=t=>{let r=/(\d+)$/.exec(t);return r?Number(r[1]):0};for(let t of this.log.all())this.counter=Math.max(this.counter,e(t.batch)),this.opCount=Math.max(this.opCount,e(t.id));this.log.horizon>0&&(this.opCount=Math.max(this.opCount,this.log.length))}get modules(){let e=this.log.all(),t=e.at(-1)?.id,r=this.projected;if(r&&r.length===e.length&&r.last===t)return r.projection;let o,i=0;r&&r.length<=e.length&&(r.length===0||e[r.length-1]?.id===r.last)&&(o=r.said,i=r.length);for(let a=e.length-1;a>=i;a--){let d=e[a].enabledModules;if(d!==void 0){o=d;break}}let s=r&&o===r.said?r.projection:Or(this.declaredModules,o??this.startingModules);return this.projected={projection:s,length:e.length,last:t,said:o},s}setEnabledModules(e,t={}){this.stillNow();let r=this.modules.enabled,o=Or(this.declaredModules,e).enabled,i=[...r].filter(u=>!o.has(u)),s=[...o].filter(u=>!r.has(u));if(i.length===0&&s.length===0)return;let a=u=>u.map(p=>{let c=this.declaredModules?.[p]?.kinds??[];return c.length>0?c.map(f=>J(this.schema,f)).join(", "):p}).join(", "),d=[i.length>0?`Turn off ${a(i)}`:"",s.length>0?`turn on ${a(s)}`:""].filter(Boolean).join("; "),l={id:this.nextId(),seq:this.log.length,batch:t.batch??this.mintBatch("batch"),author:Sa,intent:cn(d),mutation:null,primitives:[],inverse:[],reads:[],writes:[],at:this.now(),...D("via",t.via),enabledModules:[...o].sort()};return this.log.append(l),this.notify($n,[l]),l}mutation(e){let t=this.mutations.get(e);if(!t)throw new ht(e,[...this.mutations.keys()]);if(this.mutationDisabled(t))throw new E(`Mutation "${e}" belongs to a module this workspace has turned off`,`Enabled modules: ${[...this.modules.enabled].join(", ")||"(none)"}`);return t}mutationDisabled(e){return this.modules.disabledMutations.has(e.name)?!0:e.derived!==void 0&&this.modules.disabledKinds.has(e.derived.kind)}allMutations(){return[...this.mutations.values()].filter(e=>e!==this.keeper&&!this.mutationDisabled(e))}viaOf(e,t){if(e!==void 0&&e===this.keeper)return ha(this.mutations.values(),t?.args.kind);if(e?.derived)return Tr(this.schema,[...this.mutations.values()],e)}moved(e,t){return _a(this.allInvariants(),e,t)}allInvariants(){return this.invariants.filter(e=>this.invariantEnabled(e))}invariantEnabled(e){if(this.modules.disabledInvariants.has(e.name))return!1;if(e.scope!=="graph"){let t=e.scope.kind;if(this.modules.disabledKinds.has(t))return!1}return!0}permits(e,t=Ae){if(this.past)return{ok:!1,refusal:{mutation:e.name,wouldNeed:[],message:"Nothing changes while you look back."}};let r=this.refusesAgent(e,t)??this.namesTurnedOff(e,t);if(r)return{ok:!1,refusal:r};let o=this.mutations.get(e.name),i=o?.subject&&e.args[o.subject.arg];return be(this.policy,t,e.name,this.subjectKindOf(e,t),this.viaOf(o,e),typeof i=="string"?i:void 0,this.words,()=>{let s=I(t).id,a=this.namedIn(e,!1);try{for(let d of Xe(this.graph,o,e.args,this.sighted(t)).primitives)"edge"in d&&d.edge.from!==s&&d.edge.to!==s&&a.push(d.edge.to)}catch{}return a},o?.derived&&(()=>ce(this.log).creatorOf(i)),o?.derived!==void 0&&Ou.has(o.derived.act))}namedIn(e,t=!0){let r=this.mutations.get(e.name);if(!r)return[];let o=r.subject?.arg;return[...t&&o?[e.args[o]]:[],...Mn(r.input).flatMap(s=>s.name===o?[]:[e.args[s.name]])].flat().filter(s=>typeof s=="string")}refuse(e,t,r=!this.rehearsing){throw r&&xa(e,t),new Ke(e)}get words(){return{act:e=>this.mutations.get(e)?.title,noun:e=>Y(this.schema.tryDefinition(e),e)}}refusesAgent(e,t){if(t.kind!=="agent"||t.id===void 0)return;let r=this.may.get(t.id);if(!r||r.has(e.name))return;let o=s=>`\u201C${this.mutations.get(s)?.title??s}\u201D`,i=[...r].map(o);return{mutation:e.name,message:`${t.id} may not ${o(e.name)} here: it was declared able to ${i.length===0?"do nothing else":i.join(", ")}.`,wouldNeed:[]}}namesTurnedOff(e,t=wa){let r=this.modules.disabledKinds;if(r.size===0||!B(t))return;let o=this.mutations.get(e.name);if(!(!o||!this.namedIn(e).some(i=>r.has(this.graph.getNode(i)?.kind))))return{mutation:e.name,message:`\u201C${o.title??e.name}\u201D names a record of a module this workspace has turned off.`,wouldNeed:[]}}sighted(e){let t={me:e&&I(e).id};if(e===void 0||!Je(this,e))return t;let r=Pn(this,e);return{...t,seen:En(this,e).graph,keepUnchanged:o=>N(o,r),seesInFull:Fs(this,e)}}missingFor(e,t=Ae){let r=this.mutations.get(e.name),o=new Set(this.namedIn(e));if(!r||o.size===0)return;let i=En(this,t).graph;for(let s of o)if(!i.has(s))return new L(s,`\u201C${r.title??e.name}\u201D names a record that is not there.`)}mayAdminister(e,t=Ae){let r=this.modules.administered.get(e);return r?(r.mutations??[]).some(o=>{let i=this.mutations.get(o);return!!i&&gr(i).some(s=>be(this.policy,t,o,s,this.viaOf(i)).ok)}):!1}seenBy(e){return En(this,e)}sees(e,t){return this.graph.has(t)&&Pn(this,e)(t)}labels;resolveRef(e,t,r=Ae){let o=(this.policy?.sees?.length??0)>0,i=c=>!o||this.sees(r,c),s=this.graph.getNode(t);if(this.labels??=new at(this.graph),s&&i(t))return{ok:!0,id:t,label:this.labels.labelOf(t)??t,by:"id"};let a=this.labels.lookup(e.kinds,t),d=c=>{let f=c.filter(g=>!this.graph.isArchived(g));return f.length?f:c},l=d(a.exact.filter(i)),u=l.length>0,p=(u?l:d(a.prefix.filter(i))).map(c=>({id:c,kind:this.graph.getNode(c).kind,label:this.labels.labelOf(c)??c})).sort((c,f)=>c.label<f.label?-1:c.label>f.label?1:c.id<f.id?-1:1);return p.length===1?{ok:!0,id:p[0].id,label:p[0].label,by:u?"label":"prefix"}:Bs(this.schema,e,t,p)}kindsKeptFrom(e=Ae){let t=new Set;for(let[o,i]of this.modules.administered)if(!this.mayAdminister(o,e))for(let s of i.kinds??[])t.add(s);let r=this.policy?.sees??[];if(r.length>0&&!B(e)){let o=new Set(this.permittedMutations(e).flatMap(s=>s.creates??[])),i=xe(this);for(let s of this.schema.kinds)!r.some(d=>d.kinds.includes(s)&&ye(d,e)&&(!d.own&&!d.via||e.id!==void 0)&&(i||!On(d)))&&!o.has(s)&&t.add(s)}return t}permittedMutations(e=Ae){let t=this.allMutations(),r=hr(this.policy,e,t.filter(i=>!i.derived)),o=t.filter(i=>i.derived!==void 0&&be(this.policy,e,i.name,i.derived.kind,this.viaOf(i),I(e).id).ok);return[...r,...o]}subjectKindOf(e,t=wa){let o=this.mutations.get(e.name)?.subject;if(!o)return;let i=e.args[o.arg];if(typeof i!="string")return o.kinds!=="*"&&o.kinds.length===1?o.kinds[0]:void 0;if(!(!B(t)&&!Pn(this,t)(i)))return this.graph.getNode(i)?.kind}today(){return this.pinned()??(this.ticked&&this.ticked.on===dn()?this.ticked.day:void 0)}pinned(){let e=this.invariantOptions.context,t=this.invariantOptions.today??e?.today;return typeof t=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(t)?t:void 0}judging(e){let t=this.today(),r=ns(this.graph),o=e??this.invariantOptions.context,i=r&&!(o&&"linked"in o)?{...o,linked:r}:e;return{...this.invariantOptions,...i===void 0?{}:{context:i},...t===void 0?{}:{today:t}}}tick(e=new Date){let t=this.pinned();if(t!==void 0)return{day:t,was:t,appeared:[],cleared:[]};let r=Lr(e),o=this.today(),i=this.violations();this.ticked={day:r,on:dn()};let s=this.moved(i,this.violations());if(r!==o&&!this.rehearsing&&this.quiet===0)for(let a of this.listeners)a($n,[]);return{day:r,...o===void 0?{}:{was:o},appeared:s.introduces,cleared:s.resolves}}reread(){if(!(this.rehearsing||this.quiet>0))for(let e of this.listeners)e($n,[])}violations(e,t=this.graph){return Ge(t,this.allInvariants(),this.judging(e))}wouldChange(e,t){try{return Xe(this.graph,this.mutation(e.name),e.args,this.sighted(t)).primitives.length>0}catch{return!0}}preview(e,t,r={}){let o=this.mutation(e.name),i=Xe(this.graph,o,e.args,this.sighted(r.author));return this.previewPrimitives(i.primitives,{reads:i.reads,writes:i.writes,intent:i.intent,context:t})}previewAll(e,t={}){let{context:r,...o}=t;return{...this.rehearsal().applying(e,o,r),kept:!1}}rehearsal(){let e=Object.assign(Object.create(n.prototype),this),t=0;return Object.assign(e,{graph:G.from(this.schema,this.graph.snapshot(),{validate:this.validate}),log:We.from(this.log.all(),this.log.epochs(),{horizon:this.log.horizon}),listeners:new Set,labels:void 0,nextId:()=>`${Cr}:${++t}`,mintBatch:()=>Cr,rehearsing:!0}),e}previewPrimitives(e,t){let r=this.violations(t.context),o=G.from(this.schema,this.graph.snapshot()),i=o.applyPrimitives(e,{restoring:t.restoring===!0}),s=Ge(o,this.allInvariants(),this.judging(t.context));return{diff:i,primitives:e,reads:t.reads,writes:t.writes,intent:t.intent,...this.moved(r,s),violationsAfter:s}}apply(e,t={}){return this.applyAll([e],t)}applyAll(e,t={}){return this.applying(e,t)}applying(e,t,r){this.stillNow();let o=t.batch??this.mintBatch("batch"),i=t.author??this.by,s=In(t.lineage),a=[],d=[],l=new Set,u=new Set,p=[],c=this.violations(r),f=this.graph.snapshot(),g=this.log.length;if(this.policy)for(let k of e){let R=this.permits(k,i);R.ok||this.refuse(R.refusal,i.id)}for(let k of e){let R=this.refusesAgent(k,i)??this.namesTurnedOff(k,i);R&&this.refuse(R,i.id)}let h=xr(i);h&&this.refuseDeclined(e,i),this.rehearsing||ft(i.id);try{for(let k of e){let R=this.mutation(k.name),m=this.missingFor(k,i);if(m)throw m;let w=Xe(this.graph,R,k.args,this.sighted(i));if(h){let S=Ps(this.schema,this.graph,w.primitives,this.authorName(i),{declaration:!this.suggesting});S&&this.refuse({mutation:k.name,message:S,wouldNeed:[]},i.id)}if(w.primitives.length===0)continue;let y={id:this.nextId(),seq:this.log.length,batch:o,author:i,intent:R.describe!==void 0?w.intent:t.intent??w.intent,...D("batchIntent",t.intent),mutation:k,primitives:w.primitives.map(kn),inverse:[...w.primitives].reverse().map(kn).map(Sn),reads:w.reads,writes:w.writes,...R.describe!==void 0&&w.described&&w.described.length>0?{described:w.described}:{},...D("mergedInto",w.mergedInto),at:this.now(),...D("via",t.via),...D("lineage",s)};this.graph.applyPrimitives(y.primitives),this.log.append(y),a.push(y),d.push(...y.primitives);for(let S of y.reads)l.add(S);for(let S of y.writes)u.add(S);p.push(y.intent)}}catch(k){throw this.putBack(f,g),k}let x=me(f,this.graph.snapshot(),d);this.admitted(t,a,d,x,f,g);let b=this.violations(r);return this.notify(x,a),{batch:o,ops:a,diff:x,primitives:d,reads:[...l],writes:[...u],intent:t.intent??p.join("; "),...this.moved(c,b),violationsAfter:b}}receive(e,t={}){this.stillNow();let r=new Set(this.log.all().map(d=>d.id)),o=e.filter(d=>!r.has(d.id));if(o.length===0)return[];let i=this.graph.snapshot(),s=[];if(!t.applied)for(let d of o)try{this.graph.applyPrimitives(d.primitives,{restoring:d.undoes!==void 0})}catch(l){throw this.graph.load(i),new en(d,l)}let a=this.log.length;for(let[d,l]of o.entries()){let u={...l,seq:a+d};this.log.append(u),s.push(u)}return this.notify(me(i,this.graph.snapshot(),o.flatMap(d=>d.primitives)),s),s}append(e,t={}){if(this.stillNow(),e.length===0)return[];let r=new Set(this.log.all().map(a=>a.id)),o,i=e.map((a,d)=>{let l=a.primitives.map(kn),u={id:a.id??this.nextId(),seq:this.log.length+d,batch:a.batch??t.batch??(o??=this.mintBatch("batch")),author:a.author,intent:a.intent,...D("batchIntent",a.batchIntent),mutation:a.mutation??null,primitives:l,inverse:a.inverse??[...l].reverse().map(Sn),reads:a.reads??[],writes:a.writes??[...new Set(l.flatMap($e))],at:a.at??this.now(),...D("undoes",a.undoes),...D("via",a.via),...D("lineage",In(a.lineage))};if(r.has(u.id))throw new E(`Op "${u.id}" (${u.intent}) is already in the log`,"A host-made op needs an id of its own; leave `id` out and the store mints one.");return r.add(u.id),u}),s=this.graph.snapshot();for(let a of i)try{this.graph.applyPrimitives(a.primitives,{restoring:a.undoes!==void 0})}catch(d){throw this.graph.load(s),new en(a,d)}for(let a of i)this.log.append(a);for(let a of i)ft(a.author.id);return this.notify(me(s,this.graph.snapshot(),i.flatMap(a=>a.primitives)),i),i}applyPrimitives(e,t={}){this.stillNow();let r=t.batch??this.mintBatch("batch"),o=t.author??this.by,i=this.violations(),s=this.graph.snapshot(),a=t.intent??"Apply a change",d=In(t.lineage),l=e.map(kn),u=[];if(l.length>0){let f={id:this.nextId(),seq:this.log.length,batch:r,author:o,intent:a,mutation:null,primitives:l,inverse:[...l].reverse().map(Sn),reads:[],writes:[...new Set(l.flatMap($e))],at:this.now(),...D("via",t.via),...D("lineage",d)};this.graph.applyPrimitives(f.primitives),this.log.append(f),u.push(f),ft(o.id)}let p=this.violations(),c=me(s,this.graph.snapshot(),l);return this.notify(c,u),{batch:r,ops:u,diff:c,primitives:l,reads:[],writes:u[0]?.writes??[],intent:a,...this.moved(i,p),violationsAfter:p}}findings(){return ya({schema:this.schema,invariants:this.allInvariants()},this.graph.snapshot(),{invariantOptions:this.invariantOptions})}batches(){return this.log.batches()}canUndo(e){return An(this.log,typeof e=="string"?[e]:e)}previewUndo(e,t){let r=this.canUndo(e);if(!r.ok)return{ok:!1,check:r};let o=$s(r.ops),i=new Set;for(let s of r.ops)for(let a of s.writes)i.add(a);return{ok:!0,check:r,...this.previewPrimitives(o,{reads:[...new Set(r.ops.flatMap(s=>[...s.reads]))],writes:[...i],intent:`Undo: ${r.ops.map(s=>s.intent).join("; ")}`,restoring:r.ops.every(ka),...t===void 0?{}:{context:t}})}}undo(e,t={}){return this.undoing(e,t)}undoing(e,t){this.stillNow();let r=typeof e=="string"?[e]:e,o=t.author??this.by,i=(this.policy?.sees?.length??0)>0&&!B(o);if(i){let h=An(Rr(Ue(this.log.all(),_r(this,o)),()=>this.log.epochs()),r);if(!h.ok)throw new _e(h)}let s=this.canUndo(r);if(!s.ok)throw new _e(i?{ok:!1,ops:[],blockedBy:[],includeBatches:[],message:"Cannot undo on its own \u2014 a later change you cannot see depends on it, which only somebody who can see it can take back."}:s);let a=t.batch??this.mintBatch("undo"),d=In(t.lineage);if(this.policy)for(let h of s.ops){if(!h.mutation)continue;let x=I(h.author).id,b=R=>JSON.stringify(R).includes(JSON.stringify(x)),k=x!==void 0&&x!==I(o).id&&!B(o)&&!b(h.mutation.args)&&b(h.primitives)?{ok:!1,refusal:{mutation:h.mutation.name,wouldNeed:[],message:"it was done as somebody else."}}:this.permits(h.mutation,o);k.ok||this.refuse({...k.refusal,message:`Not permitted to undo "${h.intent}": ${k.refusal.message}`},o.id,!0)}let l=this.graph.snapshot(),u=this.violations(),p=[],c=this.log.length;for(let h of[...s.ops].sort((x,b)=>b.seq-x.seq)){let x={id:this.nextId(),seq:this.log.length,batch:a,author:o,intent:`Undo: ${h.intent}`,...D("batchIntent",t.intent),mutation:null,primitives:h.inverse,inverse:[...h.inverse].reverse().map(Sn),reads:h.reads,writes:h.writes,at:this.now(),undoes:h.id,...D("via",t.via),...D("lineage",d),...D("undoneLineage",h.lineage)};this.graph.applyPrimitives(x.primitives,{restoring:ka(h)}),this.log.append(x),p.push(x)}let f=me(l,this.graph.snapshot(),p.flatMap(h=>[...h.primitives]));this.admitted(t,p,p.flatMap(h=>[...h.primitives]),f,l,c);let g=this.violations();return this.notify(f,p),{batch:a,ops:p,diff:f,primitives:p.flatMap(h=>[...h.primitives]),reads:[...new Set(p.flatMap(h=>[...h.reads]))],writes:[...new Set(p.flatMap(h=>[...h.writes]))],intent:t.intent??p.map(h=>h.intent).join("; "),...this.moved(u,g),violationsAfter:g}}authorName(e){return vn(e,{graph:this.graph,schema:this.schema})}refuseDeclined(e,t){let r=Os(this.log.all(),e);r&&this.refuse({mutation:e[0].name,message:`${this.authorName(t)} may not make this again: a person declined it on ${r.at.slice(0,10)}.`,wouldNeed:[]},t.id)}putBack(e,t){this.graph.load(e),this.log.length>t&&this.log.truncate(t)}admitted(e,t,r,o,i,s){if(!e.admit||t.length===0)return;let a=this.graph.size;try{e.admit({ops:t,primitives:r,added:{nodes:o.addedNodes.length,edges:o.addedEdges.length},removed:{nodes:o.removedNodes.length,edges:o.removedEdges.length},changed:{nodes:o.changedNodes.length},nodesAfter:a.nodes,edgesAfter:a.edges})}catch(d){throw this.putBack(i,s),d}}redo(e,t={}){return this.undo(e,t)}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}notify(e,t){if(!(this.quiet>0)&&!(t.length===0&&cs(e)))for(let r of this.listeners)r(e,t)}rebase(e){this.stillNow();let t=new Set([...e.pending,...e.drop??[]]),r=this.log.all(),o=r.findIndex(h=>t.has(h.batch)),i=r.slice(o<0?r.length:o),s=this.log.horizon+(o<0?r.length:o),a=i.find(h=>!t.has(h.batch));if(a)throw new E(`Cannot rebase: op "${a.id}" (${a.intent}) comes after a pending batch and is neither pending nor dropped`,"While anything is pending, land the server's ops through rebase, so the log stays confirmed ops then pending ones.");let d=this.log.lastEpoch();if(d&&d.seq>s)throw new E(`Cannot rebase across an epoch: one begins at seq ${d.seq}, after pending op "${i[0].id}"`);let l=this.graph.snapshot(),u=[],p=[],c=[];this.quiet++;try{for(let x of[...i].reverse())this.graph.applyPrimitives(x.inverse,{restoring:!0,inPlace:!0});this.log.truncate(s);let h=new Set(this.log.all().map(x=>x.id));for(let x of e.confirmed){if(h.has(x.id))continue;try{this.graph.applyPrimitives(x.primitives,{restoring:x.undoes!==void 0})}catch(k){throw new en(x,k)}let b={...x,seq:this.log.length};this.log.append(b),h.add(x.id),u.push(b)}for(let x of e.pending){let b=i.filter(k=>k.batch===x);if(b.length!==0)try{p.push(...this.replay(x,b))}catch(k){c.push({batch:x,error:k})}}}catch(h){this.log.truncate(s);for(let x of i)this.log.append(x);throw this.graph.load(l),h}finally{this.quiet--}let f=Ce(l,this.graph.snapshot()),g=[...u,...p];return this.notify(f,g),{diff:f,confirmed:u,pending:p,refused:c}}adopt(e){this.stillNow();let t=new Set(e.drop??[]),r=(e.pending??[]).filter(f=>!t.has(f)),o=this.log.all(),i=this.graph.snapshot(),s={ops:[...o],epochs:[...this.log.epochs()],horizon:this.log.horizon},a=new Set(o.map(f=>f.id)),d=new Map(r.map(f=>[f,o.filter(g=>g.batch===f)]));if(e.log.length>0)this.log.replace(e.log,e.epochs,D("horizon",e.horizon));else{let f=e.horizon??0;this.log.replace([],e.epochs??[{seq:f,base:e.snapshot}],{horizon:f})}let l=[],u=[];this.quiet++;try{this.graph.load(e.snapshot),this.projected=void 0,this.countPastTheLog();for(let f of r){let g=d.get(f)??[];if(g.length!==0)try{l.push(...this.replay(f,g))}catch(h){u.push({batch:f,error:h})}}}catch(f){throw this.log.replace(s.ops,s.epochs,{horizon:s.horizon}),this.graph.load(i),this.projected=void 0,f}finally{this.quiet--}let p=this.log.all().filter(f=>!a.has(f.id)&&!l.includes(f)),c=Ce(i,this.graph.snapshot());return this.notify(c,[...p,...l]),{diff:c,adopted:p,pending:l,refused:u}}replay(e,t){let r=t[0],o={author:r.author,batch:e,...D("intent",r.batchIntent),...D("via",r.via),...D("lineage",r.lineage)};if(r.undoes!==void 0){let i=t.map(a=>this.log.get(a.undoes??"")),s=t.find((a,d)=>i[d]===void 0);if(s)throw new E(`What "${s.intent}" took back is no longer in the log`);return this.undoing([...new Set(i.map(a=>a.batch))],o).ops}return t.every(i=>i.mutation!==null)?this.applying(t.map(i=>i.mutation),o).ops:this.append(t.map(({seq:i,...s})=>s))}snapshot(){return this.graph.snapshot()}verify(){let e=this.log.lastEpoch();return Ws(this.schema,this.log.opsFrom(e?.seq??0),this.graph.snapshot(),{validate:this.validate,...e?{base:e.base}:{}})}checkpoint(e={}){let t=this.log.all(),r;if(e.seq!==void 0)r=e.seq;else{let a=this.log.length-(e.keepOps??1e3),l=Date.parse(e.now??this.now())-(e.keepDays??90)*864e5,u=t.find(c=>Date.parse(c.at)>l),p=u?u.seq:this.log.length;r=Math.min(a,p)}for(r=Math.min(Math.max(r,this.log.horizon),this.log.length);r>this.log.horizon&&r<this.log.length&&t[r-this.log.horizon].batch===t[r-1-this.log.horizon].batch;)r--;if(r<=this.log.horizon)return;let o=this.verify();if(!o.ok)throw new E(`Cannot compact a store that does not verify: ${o.reason}`);let i=this.log.checkpointAt(this.schema,r,{validate:this.validate}),s=Is(this.log,r);return Object.keys(s).length>0?{...i,creators:s}:i}compact(e){return this.stillNow(),this.log.compact(e)}};var Ra=["full","summary","glyph"],Kr=(n,e)=>n.as===e.as&&(n.over??[n.kind]).includes(e.kind),zu=n=>n.filter((e,t)=>!n.slice(0,t).some(r=>Kr(r,e)));function ue(n){return n.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function jn(n,e){return`/${ue(n.tryDefinition(e)?.plural??`${e}s`)}`}function Mu(n,e,t){return`${jn(n,e)}/${encodeURIComponent(t)}`}function Nu(n,e){return`/places/${encodeURIComponent(n)}${e?`?of=${encodeURIComponent(e)}`:""}`}function Aa(n,e){return e.some(t=>t.as===n.as&&!Kr(n,t))}function Iu(n,e,t){return Aa(n,e)?`${n.title} \xB7 ${(t.tryDefinition(n.kind)?.plural??`${n.kind}s`).toLowerCase()}`:n.title}var Oe=(n,e,t="")=>`${n}|${e.cardinality}|${e.fidelity}|${t}`;function Ur(n){switch(n){case"full":return["full","summary","glyph"];case"summary":return["summary","full","glyph"];case"glyph":return["glyph","summary","full"]}}function ju(n){let e=new Map,t=[],r=[],o,i,s={arrange(a){return a!==void 0&&(o=a),s},arrangement:()=>o,home(a){return a!==void 0&&(i=a),s},homeView:()=>i,register(a,d,l,u){let p={...u?.over?.[1]?{over:u.over}:{},...u?.hidden?{hidden:!0}:{}},c={kind:a,cardinality:d.cardinality,fidelity:d.fidelity,view:l,...u?.title?{title:u.title}:{},...u?.across?{across:u.across}:{},...u?.beside?{beside:!0}:{},...p};if(r.push(c),!u?.beside&&!p.hidden&&e.set(Oe(a,d),c),u?.title){let f=ue(u.title);e.set(Oe(a,d,f),c),d.cardinality==="many"&&!t.some(g=>g.kind===a&&g.as===f)&&t.push({kind:a,title:u.title,as:f,...u.across?{across:u.across}:{},...p})}return s},places:()=>t,forget(a,d){for(let u of Ra)e.delete(Oe(a,{cardinality:"many",fidelity:u},d));let l=t.findIndex(u=>u.kind===a&&u.as===d);return l>=0&&t.splice(l,1),s},lookup(a,d){return e.get(Oe(a,d))?.view},resolve(a,d,l){if(l)for(let u of Ur(d.fidelity)){let p=e.get(Oe(a,{cardinality:d.cardinality,fidelity:u},l));if(p)return p}for(let u of Ur(d.fidelity)){let p=e.get(Oe(a,{cardinality:d.cardinality,fidelity:u}));if(p)return p}if(d.cardinality==="one")for(let u of Ur(d.fidelity)){let p=e.get(Oe(a,{cardinality:"many",fidelity:u}));if(p)return p}},registrations:()=>r,all(){return[...e.values()]},kindsWithViews(){return[...new Set([...e.values()].map(a=>a.kind))]}};return s}var Du=["day","week","month","year","decade"];function Oa(n){let e={};n.q&&n.q.trim().length>0&&(e.query=n.q);let t=cr(n.archived);if(t&&(e.archived=t),n.sort){let[r,o]=n.sort.split(":");r&&(e.sort={by:r,direction:o==="desc"?"desc":"asc"})}if(n.filter){let r=[];for(let o of n.filter.split(",")){let i=o.indexOf(":");i<=0||r.push({key:o.slice(0,i),value:o.slice(i+1)})}r.length>0&&(e.filter=r)}if(n.group){let[r,o]=n.group.split(":");r&&(e.group={by:r,...Du.includes(o)?{bucket:o}:{}})}return e}function Vr(n){if(typeof n=="string"&&n.length>0)return{by:n,direction:"asc"};if(typeof n!="object"||n===null)return;let{by:e,direction:t}=n;if(!(typeof e!="string"||e.length===0))return{by:e,direction:t==="desc"?"desc":"asc"}}function gt(n,e,t){let r=Vr(n);if(!r)return'an order is a field, like "released", or { "by": "released", "direction": "asc" | "desc" }';let o=typeof n=="object"&&n!==null?n.direction:void 0;if(o!==void 0&&o!=="asc"&&o!=="desc")return`an order runs "asc" or "desc", not "${String(o)}"`;if(r.by!=="label"&&!e.includes(r.by))return`${t} has no field "${r.by}" to order by (it has ${e.length>0?e.map(i=>`"${i}"`).join(", "):"none"}, and "label", its name)`}function Tu(n,e,t){let r=Vr(e);if(!r)return n;let o=r.direction==="desc"?-1:1;return n.map((i,s)=>({item:i,at:s,value:t(i,r.by)})).sort((i,s)=>{let a=(i.value===void 0||i.value===null||i.value===""?1:0)-(s.value===void 0||s.value===null||s.value===""?1:0);if(a!==0)return a;if(i.value===s.value||i.value===void 0||i.value===null)return i.at-s.at;let d=typeof i.value=="number"&&typeof s.value=="number"?i.value-s.value:String(i.value).localeCompare(String(s.value),void 0,{numeric:!0});return d===0?i.at-s.at:d*o}).map(i=>i.item)}var mt={timeline:{binds:"fields",requiredRoles:["start","end"],options:["columns","extent","tick","minWindow","arranging"]},calendar:{binds:"fields",requiredRoles:["start"],options:["today","range","weekStartsOn","perCell","horizon","arranging"]},coverage:{binds:"entities",requiredRoles:["rows","columns","link"],options:["rowRef","rowGroup","groupOrder","requiredGroups","requiredVia","badge","columnGroup","sort","columnSort"]},board:{binds:"entities",requiredRoles:["slots","x","y","fill"],options:["fillFrom","slotCode","zones","aspect","emptyLabel","pickTarget","arranging","arrange"]},plan:{binds:"entities",requiredRoles:["regions","outline"],options:["hues","aspect","undrawnLabel","strayLabel","draw","place","help"]},reach:{binds:"nothing",requiredRoles:[],options:[]},blocks:{binds:"nothing",requiredRoles:[],options:["blocks"]},columns:{binds:"fields",requiredRoles:["column"],options:["sort"]}},Ea=Object.keys(mt),za=n=>Object.hasOwn(mt,n);var nn=n=>typeof n=="object"&&n!==null&&!Array.isArray(n);function Pa(n,e,t){let r=n.tryDefinition(e)?.fields.shape,o=M(r?.[t]);for(;o&&(o.type==="optional"||o.type==="default"||o.type==="nullable"||o.type==="prefault");)o=M(o.innerType);return o?.type!=="enum"?[]:(o.entries?Object.values(o.entries):o.values??[]).filter(s=>typeof s=="string")}function Fu(n){let e=[],t=[],r=[],o=new Set(n.schema.kinds),i=new Set;for(let d of o)for(let l of Object.keys(n.schema.tryDefinition(d)?.edges??{}))i.add(l);let s=d=>Object.keys(n.schema.tryDefinition(d)?.fields.shape??{}),a=new Map;return(n.lenses??[]).forEach((d,l)=>{let u=`lenses.${l}`,p=typeof d.title=="string"&&d.title.trim().length>0?d.title.trim():void 0,c=(y,S)=>{t.push({index:l,name:d.name,...p?{title:p}:{},why:y}),S&&r.push({severity:"warning",...S})};if(!za(d.name)){p?c(`"${d.name}" is not a lens this framework draws`,{code:"lens-not-shipped",path:`${u}.name`,message:`"${p}" names the lens "${d.name}", which the framework does not ship, so nothing draws it.`,fix:`Name one of ${Ea.join(", ")} \u2014 or register the view yourself and drop the title.`}):c("it is a lens this app wrote, drawn by the app's own views");return}if(!p)return c("it has no title, so it is bindings the checker holds and no place");let f=mt[d.name],g=nn(d.options)?d.options:{};if(d.options!==void 0&&!nn(d.options))return c("its options are not an object",{code:"lens-options-not-an-object",path:`${u}.options`,message:`"${p}" has options that are not an object.`,fix:'Write them as { "<option>": <value> }, or drop them.'});for(let y of Object.keys(g))f.options.includes(y)||r.push({severity:"warning",code:"lens-option-unknown",path:`${u}.options.${y}`,message:`The ${d.name} lens takes no option "${y}", so "${p}" ignores it.`,fix:f.options.length===0?`The ${d.name} lens takes no options; drop it.`:`Use one of: ${f.options.join(", ")}.`});let h={};for(let y of f.options)g[y]!==void 0&&(h[y]=g[y]);d.arrangedBy&&(h.arrangedBy=Oa(d.arrangedBy));let x=nn(d.bindings)?d.bindings:{},b=[],k,R=(y,S,v)=>c(S,{code:"lens-cannot-draw",path:y,message:`"${p}" cannot draw: ${S}.`,fix:v});if(f.binds==="fields"){let y=Object.keys(x).filter(v=>nn(x[v])),S=y.filter(v=>!o.has(v));if(y.length===0)return R(`${u}.bindings`,"it binds no kind",`Bind a kind's fields: "bindings": { "<kind>": { ${f.requiredRoles.map(v=>`"${v}": "<field>"`).join(", ")} } }.`);if(S.length>0)return;if(h.bindings=x,b=y,d.name==="timeline"){let v=g.columns;if(Array.isArray(v))h.columns=v.map($=>typeof $=="string"?{id:$,label:$}:$);else{let $=y.flatMap(z=>{let j=x[z],q=typeof j.column=="string"?j.column:typeof j.columns=="string"?j.columns:void 0;return q?Pa(n.schema,z,q):[]}),_=[...new Set($)];if(_.length===0)return R(`${u}.options.columns`,"it has no columns \u2014 no option names them and no `column` role is bound to a field of set values",'Bind "column" to a field whose values are the columns, or say "columns": ["mon", "tue", \u2026].');h.columns=_.map(z=>({id:z,label:z.toUpperCase()}))}h.extent===void 0&&(h.extent=1440)}if(d.name==="columns"){if(h.sort!==void 0){let v=y.map($=>gt(h.sort,s($),$)).find(Boolean);v&&(r.push({severity:"warning",code:"lens-sort",path:`${u}.options.sort`,message:`"${p}" cannot order its cards: ${v}.`,fix:'Write { "by": "<a field>", "direction": "asc" }, or drop it.'}),delete h.sort)}for(let v of y){let $=x[v].column;if(typeof $!="string"||!s(v).includes($))return;if(Pa(n.schema,v,$).length===0)return R(`${u}.bindings.${v}.column`,`its column field "${$}" is not a choice`,`Bind "column" to a choice field of ${v}, like a status.`)}}if(d.name==="calendar"&&h.today!==void 0&&!(typeof h.today=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(h.today)))return R(`${u}.options.today`,"its today is not a date",'Write it as "YYYY-MM-DD", or leave it out and the calendar opens on the day it is drawn.');if(d.name==="calendar"&&h.horizon!==void 0){let v=h.horizon,$=j=>j===void 0||Number.isInteger(j)&&j>=1&&j<=9999,_=typeof v=="number"?{years:v,title:"Years"}:v;nn(_)&&Number.isInteger(_.years)&&_.years>=1&&_.years<=200&&typeof _.title=="string"&&_.title.trim().length>0&&$(_.from)&&$(_.to)&&Object.keys(_).every(j=>["years","title","from","to"].includes(j))&&!(typeof _.from=="number"&&typeof _.to=="number"&&_.to<_.from)?h.horizon=_:(delete h.horizon,r.push({severity:"warning",code:"lens-horizon",path:`${u}.options.horizon`,message:`"${p}" has a horizon that is not a span of years, so it offers no span of years.`,fix:'Write { "years": 30, "title": "The career" } \u2014 "from" and "to" (years, like 1962 and 2023) only to pin its ends, which otherwise reach the first and last of its records.'}))}if(d.name==="calendar"&&h.range!==void 0&&!["day","week","month","quarter","year","years","agenda"].includes(h.range))return R(`${u}.options.range`,`its range "${String(h.range)}" is not one a calendar opens at`,"Use one of: day, week, month, quarter, year, agenda.")}else if(f.binds==="entities"){let y=$=>{let _=x[$];if(nn(_)){if(typeof _.kind=="string")return _.kind;if(typeof _.edge=="string")return _.edge;if(Array.isArray(_.path))return{path:_.path};if(typeof _.field=="string")return _.field}};for(let $ of f.requiredRoles)if(y($)===void 0)return;let S=d.name==="coverage"?"rows":d.name==="board"?"slots":"regions",v=y(S);if(!o.has(v))return;if(d.name==="coverage"){let $=y("columns");if(!o.has($))return;let _=y("link");if(typeof _=="string"&&!i.has(_))return;Object.assign(h,{rows:v,columns:$,link:_}),$!==v&&(k=$);for(let[z,j]of[["sort",v],["columnSort",$]]){if(h[z]===void 0)continue;let q=gt(h[z],s(j),j);q&&(r.push({severity:"warning",code:"lens-sort",path:`${u}.options.${z}`,message:`"${p}" cannot order its ${z==="sort"?"rows":"columns"}: ${q}.`,fix:`Write { "by": "<a field of ${j}>", "direction": "asc" }, or drop it.`}),delete h[z])}}else if(d.name==="board"){Object.assign(h,{slots:v,x:y("x"),y:y("y"),fill:y("fill")});for(let $ of["x","y"])if(!s(v).includes(h[$]))return}else{Object.assign(h,{regions:v,outline:y("outline")});for(let $ of["markers","at","within","nests","regionKind","markerKind"]){let _=y($);typeof _=="string"&&(h[$]=_)}}b=[v]}else if(d.name==="blocks"){if(!d.on)return R(`${u}.on`,"it does not say which kind it stands on",'Say "on": "<the kind it is a place of>".');if(!Array.isArray(h.blocks)||h.blocks.length===0)return R(`${u}.options.blocks`,"it has no blocks to draw",`Say "options": { "blocks": [{ "headline": "\u2026" }, { "list": "all('<kind>')", "as": "card" }] }.`)}else{let y=["user","person","member"].find(S=>o.has(S));if(!d.on&&!y)return R(`${u}.on`,"it does not say which kind it stands on",'Say "on": "<the kind whose records are the people>".');b=y?[y]:[]}if(d.on!==void 0){if(typeof d.on!="string"||!o.has(d.on))return R(`${u}.on`,`it stands on "${String(d.on)}", which is not a kind`,`Use one of: ${[...o].join(", ")}.`);if(b=[d.on],d.name==="coverage"){let y=[h.rows,h.columns].find(S=>S!==d.on);k=typeof y=="string"?y:void 0}}let m=ue(p);if(m.length===0)return R(`${u}.title`,"its title has no letters or digits to make an address of","Give it a title a person would say.");for(let y of b){let S=`${y}|${m}`;if(a.has(S))return c(`another lens on ${y} is already called "${p}"`,{code:"lens-title-taken",path:`${u}.title`,message:`"${p}" is the title of lenses.${a.get(S)} too, on the same kind, so one address would name two pictures.`,fix:"Give each its own title."})}for(let y of b)a.set(`${y}|${m}`,l);let w=d.create;w!==void 0&&typeof w!="boolean"&&r.push({severity:"warning",code:"lens-create",path:`${u}.create`,message:`"${p}" says create ${JSON.stringify(w)}, which is neither true nor false, so its page keeps the forms that begin its kind.`,fix:'Say "create": false to leave them off, or drop it.'}),e.push({index:l,lens:d.name,title:p,as:m,kinds:b,...k?{across:k}:{},options:h,...d.hidden===!0?{hidden:!0}:{},...w===!1?{create:!1}:{}})}),{drawn:e,undrawn:t,findings:r}}var Zu=6;function Lu(n,e,t=[]){let r=n.kinds,o=s=>Object.values(n.tryDefinition(s)?.edges??{}).map(a=>(a.to??[]).filter(d=>d!==s)),i=new Set(r.flatMap(s=>o(s).flat()));return new Set([...e?.hide??[],...t,...r.filter(s=>!i.has(s)&&o(s).length>0&&o(s).every(a=>a.length>=2))])}function Cu(n,e,t){if(!n?.primary)return;let r=new Set(n.primary.map(ue));return{kinds:new Set(e.kinds.filter(o=>r.has(ue(o))||r.has(jn(e,o).slice(1)))),places:new Set(t.filter(o=>r.has(o.as)||r.has(ue(o.title))).map(o=>`${o.kind}|${o.as}`))}}var Ma="overview",Gu=`/places/${Ma}`;function Bu(n){let e=n?.scene?.trim();return e||"Scene"}function Uu(n){let e=n?.pages?.trim();return e||"Pages"}function Ku(n,e){if(!e||e.length===0)return n;let t=e.filter(r=>n.includes(r));return[...new Set(t),...n.filter(r=>!t.includes(r))]}function Vu(n,e,t){if(n===void 0)return;let r=n.trim();if(r==="")return;if(r.toLowerCase()==="home"||r==="/")return{to:"home"};let o=ue(r),i=t.find(d=>d.title===r)??t.find(d=>d.as===o);if(i)return{to:"place",place:i};let s=e.kinds,a=s.find(d=>d===r)??s.find(d=>jn(e,d).slice(1)===o);return a?{to:"kind",kind:a}:void 0}function Wr(n){let e=(n??"").replace(/\/+$/,"");return e===""?"":e.startsWith("/")?e:`/${e}`}function Wu(n,e={}){let t=typeof n=="string"?n:n.address,r=Wr(e.basePath),o=t.startsWith("/")?t:`/${t}`;return r===""?o:o==="/"?r:o.startsWith("/?")||o.startsWith("/#")?`${r}${o.slice(1)}`:`${r}${o}`}function qu(n,e){let t=Wr(e);if(t==="")return n.startsWith("/")?n:`/${n}`;if(!n.toLowerCase().startsWith(t.toLowerCase()))return null;let r=n.slice(t.length);return r===""||r==="/"?"/":r.startsWith("/")?r:null}var Na=Symbol.for("@graview/core:app-link"),Hu=n=>(Object.defineProperty(M(n),Na,{value:1,enumerable:!0}),n);function Ia(n){let e=M(n);return!!e&&(e[Na]===1||Ia(e.innerType))}var Ox=()=>Hu(F().check(nr(500),gn(Hn,"another app's address")));var yt=(n,e)=>`${e.kind}\0${e.id??""}\0${n.address}\0${n.kind}\0${n.id}`;function Ju(n,e,t=()=>{}){let r=new Map,o=new Map,i=s=>{let a=yt(s,e),d=r.get(a);return d||(d=Promise.resolve().then(()=>n.resolve(s,e)).then(l=>Yu(l)?l:null,()=>null).then(l=>(r.get(a)===d&&(o.set(a,l),t(s)),l)),r.set(a,d)),d};return{read(s){let a=yt(s,e);if(o.has(a)){let d=o.get(a);return d===null?{unread:!0}:"denied"in d?{denied:!0}:{record:d}}return i(s),{unread:!0}},ask:i,answered:s=>o.get(yt(s,e)),forget(s){if(!s){r.clear(),o.clear();return}let a=yt(s,e);r.delete(a),o.delete(a)}}}function Yu(n){if(n===null)return!0;if(typeof n!="object"||n===void 0)return!1;if(n.denied===!0)return!0;let e=n;return typeof e.label=="string"&&typeof e.id=="string"&&typeof e.kind=="string"&&typeof e.fields=="object"&&e.fields!==null}var Xu=1;var bt=(n,e)=>`${n}\0${e}`;function Hr(n){return n.op==="add-node"?Object.keys(n.node).filter(e=>e!=="id"&&e!=="kind").map(e=>[n.node.id,e]):n.op==="patch-node"?Object.keys(n.after).map(e=>[n.id,e]):[]}var qr=class n{revs=new Map;static of(e){let t=new n;return t.note(e),t}note(e){for(let t of e)for(let r of t.primitives)for(let[o,i]of Hr(r)){let s=bt(o,i);(this.revs.get(s)??-1)<t.seq&&this.revs.set(s,t.seq)}}of(e,t){return this.revs.get(bt(e,t))??-1}baseFor(e,t=new Set){let r=new Set,o=new Map;for(let i of e)for(let s of i.primitives)if(s.op==="add-node"&&r.add(s.node.id),!(s.op!=="patch-node"||r.has(s.id)||t.has(s.id)))for(let a of Object.keys(s.after)){let d=bt(s.id,a);t.has(d)||o.has(d)||o.set(d,{node:s.id,field:a,rev:this.of(s.id,a)})}return[...o.values()]}stale(e){return e.filter(t=>this.of(t.node,t.field)!==t.rev)}};function Qu(n){let e=new Set;for(let t of n)for(let r of t.primitives){r.op==="add-node"&&e.add(r.node.id);for(let[o,i]of Hr(r))e.add(bt(o,i))}return e}var el=/^#([0-9a-f]{3,8})$/i,nl=/(rgba?|hsla?)\(([^)]+)\)/gi;function tl(n){let e=el.exec(n.trim());if(!e)return null;let t=e[1];if((t.length===3||t.length===4)&&(t=[...t].map(i=>i+i).join("")),t.length!==6&&t.length!==8)return null;let r=Number.parseInt(t.slice(0,6),16),o=t.length===8?Number.parseInt(t.slice(6,8),16)/255:1;return{r:r>>16&255,g:r>>8&255,b:r&255,a:o}}function rl(n){let e=n.slice(0,n.indexOf("(")).toLowerCase(),r=n.slice(n.indexOf("(")+1,n.lastIndexOf(")")).split(/[,\s/]+/).filter(Boolean).map(d=>d.endsWith("%")?Number.parseFloat(d)/100:Number.parseFloat(d));if(r.some(Number.isNaN))return null;if(e.startsWith("rgb")){let[d,l,u,p]=r;return d===void 0||l===void 0||u===void 0?null:{r:d,g:l,b:u,a:p??1}}let[o,i,s,a]=r;return o===void 0||i===void 0||s===void 0?null:{...Da(o,i>1?i/100:i,s>1?s/100:s),a:a??1}}function Yr(n){let e=n.r/255,t=n.g/255,r=n.b/255,o=Math.max(e,t,r),i=Math.min(e,t,r),s=(o+i)/2;if(o===i)return{h:0,s:0,l:s};let a=o-i,d=a/(1-Math.abs(2*s-1));return{h:((o===e?60*((t-r)/a%6):o===t?60*((r-e)/a+2):60*((e-t)/a+4))+360)%360,s:d,l:s}}function Xr(n,e,t){return{...Da(n,e,t),a:1}}function Da(n,e,t){let r=(1-Math.abs(2*t-1))*e,o=(n%360+360)%360/60,i=r*(1-Math.abs(o%2-1)),[s,a,d]=o<1?[r,i,0]:o<2?[i,r,0]:o<3?[0,r,i]:o<4?[0,i,r]:o<5?[i,0,r]:[r,0,i],l=t-r/2;return{r:Math.round((s+l)*255),g:Math.round((a+l)*255),b:Math.round((d+l)*255)}}function tn(n){let e=[];for(let t of n.matchAll(nl)){let r=rl(t[0]);r&&e.push(r)}for(let t of n.matchAll(/#[0-9a-fA-F]{3,8}\b/g)){let r=tl(t[0]);r&&e.push(r)}return e}function Qr(n,e){let t=n.a+e.a*(1-n.a);if(t===0)return{r:0,g:0,b:0,a:0};let r=(o,i)=>(o*n.a+i*e.a*(1-n.a))/t;return{r:r(n.r,e.r),g:r(n.g,e.g),b:r(n.b,e.b),a:t}}function Jr(n){let e=n/255;return e<=.03928?e/12.92:((e+.055)/1.055)**2.4}function ja(n){return .2126*Jr(n.r)+.7152*Jr(n.g)+.0722*Jr(n.b)}function rn(n,e){let[t,r]=[ja(n),ja(e)].sort((o,i)=>i-o);return(t+.05)/(r+.05)}var xt=(n,e)=>`rgba(${Math.round(n.r)}, ${Math.round(n.g)}, ${Math.round(n.b)}, ${e})`,Ta={r:0,g:0,b:0,a:1},vt={r:255,g:255,b:255,a:1};function wt(n){let e=tn(n.accent)[0];if(!e)return{ok:!1,missing:["accent"],why:`"${n.accent}" is not a color this can read. Use a hex, rgb() or hsl() value.`};let t={},r=new Set,o=[],i=Yr(e);for(let s of["dark","light"]){let a=n.base[s],d=tn(a.ground)[0]??(s==="dark"?Ta:vt),l=Qr(tn(a.panel)[0]??vt,d),u=al(i,[l,d],s,4.5);u?Math.abs(u.l-i.l)>sl&&(r.add(`accent (${s})`),o.push(`reaching 4.5:1 on the ${s} panel would move the accent's lightness by ${Math.round(Math.abs(u.l-i.l)*100)} points, which is far enough that it stops being the same color \u2014 supply one for ${s}`)):(r.add(`accent (${s})`),o.push(`no lightness of this hue clears 4.5:1 as text on the ${s} panel, so ${s} needs an accent of its own`));let p=u??i,c=Xr(p.h,p.s,p.l),f=n.accentInk?.[s]??(rn(vt,c)>=rn(Ta,c)?"#ffffff":"#000000"),g=rn(tn(f)[0]??vt,c);g+.005<4.5&&(r.add(`accentInk (${s})`),o.push(`neither black nor white clears 4.5:1 on the accent (best ${g.toFixed(2)}:1), so text on a filled button has to be given`)),t[s]={...a,accent:xt(c,1),accentDim:xt(c,s==="dark"?.35:.22),accentInk:f,glow:xt(c,s==="dark"?.28:.1),edgeBright:xt(c,ol(c,l,s==="dark"?.55:.42,3)),...n.warn?.[s]?{warn:n.warn[s]}:{}};let h=tn(t[s].warn)[0];h&&il(Yr(h).h,p.h)<25&&(r.add(`warn (${s})`),o.push(`the warning color shares the accent's hue in ${s}, so "something is broken" looks like "this is selected"`))}return r.size>0?{ok:!1,missing:[...r].sort(),why:o.join("; ")}:{ok:!0,schemes:t}}function ol(n,e,t,r){for(let o=Math.round(t*100);o<=100;o++){let i=o/100;if(rn(Qr({...n,a:i},e),e)>=r)return i}return 1}function il(n,e){let t=Math.abs(n-e)%360;return t>180?360-t:t}var sl=.3;function al(n,e,t,r){let o=t==="dark";for(let i=0;i<=100;i++){let s=o?n.l+i/100:n.l-i/100,a=o?n.l-i/100:n.l+i/100;for(let d of[s,a])if(!(d<0||d>1)&&e.every(l=>rn(Xr(n.h,n.s,d),l)>=r))return{...n,l:d}}return null}function dl(n,e){let t=e?.[n];if(t!==void 0)return(t%360+360)%360;let r=2166136261;for(let o=0;o<n.length;o++)r^=n.charCodeAt(o),r=Math.imul(r,16777619);return(r>>>0)%360}var Pe=Object.freeze({navy:"#001769",turquoise:"#00e5b9",paper:"#f7f7f2",ink:"#18213a",muted:"#586174"}),eo="Montserrat",no=Object.freeze({display:550,body:450,label:600}),to=Object.freeze({display:600,body:400,label:600}),cl="-0.025em",ul=Object.freeze({minWidth:140,clearSpace:.5,microMax:24,regularMin:32,microBelow:28});var Fa={ground:"#0a0f1f",groundDeep:"#060914",wash:"none",panel:"rgba(19, 27, 52, 0.96)",panelMuted:"rgba(14, 21, 42, 0.94)",panelWarning:"rgba(48, 33, 18, 0.95)",edge:"rgba(164, 178, 222, 0.18)",edgeBright:"rgba(154, 171, 255, 0.6)",ink:"#eef0f6",inkMuted:"#aab2c6",inkFaint:"#97a0b6",accent:"#9aabff",accentDim:"rgba(154, 171, 255, 0.32)",accentInk:Pe.navy,warn:"#f0a868",good:"#8fdcaa",bad:"#ffa3a3",glow:"rgba(154, 171, 255, 0.18)",bar:"rgba(10, 15, 31, 0.96)",float:"rgba(16, 23, 45, 0.98)",liftLow:"0 14px 36px -22px #000",liftHigh:"0 28px 64px -30px #000",tintAlpha:.2,tintLightness:52,gridAlpha:.35},Za={ground:Pe.paper,groundDeep:"#efefe8",wash:"none",panel:"#ffffff",panelMuted:"#fafaf6",panelWarning:"#fdf4ea",edge:"rgba(24, 33, 58, 0.12)",edgeBright:"rgba(0, 23, 105, 0.6)",ink:Pe.ink,inkMuted:Pe.muted,inkFaint:"#626b7d",accent:Pe.navy,accentDim:"rgba(0, 23, 105, 0.16)",accentInk:"#ffffff",warn:"#9a5312",good:"#1b6436",bad:"#a1232d",glow:"rgba(0, 23, 105, 0.08)",bar:"rgba(255, 255, 255, 0.96)",float:"#ffffff",liftLow:"0 1px 2px rgba(24,33,58,0.06), 0 8px 24px -12px rgba(24,33,58,0.16)",liftHigh:"0 2px 6px rgba(24,33,58,0.08), 0 24px 56px -24px rgba(24,33,58,0.26)",tintAlpha:.16,tintLightness:46,gridAlpha:.5},on={dark:Fa,light:Za};var ve=Object.freeze({radius:8,density:1,radiusSmall:.72,radiusSmallFloor:2,pad:15,padSmall:10,gap:7}),Ee=Object.freeze({body:`"${eo}", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif`,mono:'ui-monospace, SFMono-Regular, "SF Mono", Menlo, monospace'});function ll(n){let e=n?.shape?.radius??ve.radius,t=n?.shape?.density??ve.density;return Object.freeze({radius:e,radiusSmall:Math.max(ve.radiusSmallFloor,Math.round(e*ve.radiusSmall)),pad:Math.round(ve.pad*t),padSmall:Math.round(ve.padSmall*t),gap:Math.round(ve.gap*t)})}function fl(n){let e=n?.typography?.body??Ee.body,t=n?.typography?.display??e,o=e===Ee.body&&t===Ee.body?no:to,i=n?.typography?.weights;return Object.freeze({body:e,display:t,mono:n?.typography?.mono??Ee.mono,weights:Object.freeze({display:i?.display??o.display,body:i?.body??o.body,label:i?.label??o.label})})}var Gx=Object.freeze({light:Object.freeze({roof:Object.freeze({saturation:48,lightness:82}),right:Object.freeze({saturation:40,lightness:66}),left:Object.freeze({saturation:34,lightness:55}),roofEdge:"rgba(255,255,255,0.75)",plot:Object.freeze({saturation:45,lightness:58,alpha:.12}),plotEdge:Object.freeze({saturation:40,lightness:48,alpha:.55})}),dark:Object.freeze({roof:Object.freeze({saturation:42,lightness:32}),right:Object.freeze({saturation:40,lightness:21}),left:Object.freeze({saturation:38,lightness:13}),roofEdge:"rgba(255,255,255,0.14)",plot:Object.freeze({saturation:45,lightness:48,alpha:.2}),plotEdge:Object.freeze({saturation:40,lightness:62,alpha:.55})})});function Ca(n){return/^\s*(<\?xml[^>]*>\s*)?(<!--[\s\S]*?-->\s*)*(<!DOCTYPE svg[^>]*>\s*)?<svg[\s>/]/i.test(n)}var Ga="http://www.w3.org/2000/svg",pl=["http://www.w3.org/1999/xhtml","http://www.w3.org/1998/Math/MathML",Ga],hl=new Set("svg g defs symbol use title desc path rect circle ellipse line polyline polygon text tspan textPath linearGradient radialGradient stop pattern clipPath mask marker image filter feBlend feColorMatrix feComponentTransfer feComposite feDropShadow feFlood feFuncA feFuncB feFuncG feFuncR feGaussianBlur feMerge feMergeNode feMorphology feOffset feTile feTurbulence".split(" ")),gl=new Set(["title","desc"]),Dn="it embeds a page or media",ml={script:"it has a script in it",foreignobject:"it embeds HTML (foreignObject)",iframe:Dn,embed:Dn,object:Dn,audio:Dn,video:Dn,style:"it has a style sheet in it; a mark is styled by its attributes",a:"it links to something (an <a> element)"},yl={amp:"&",lt:"<",gt:">",quot:'"',apos:"'"};function bl(n){let e=!1,t=n.replace(/&(#x[0-9a-f]+|#[0-9]+|[a-z][a-z0-9]*);?/gi,(r,o)=>{if(o[0]==="#"){let s=o[1]==="x"||o[1]==="X"?parseInt(o.slice(2),16):parseInt(o.slice(1),10);return s>0&&s<=1114111?String.fromCodePoint(s):"\uFFFD"}let i=yl[o.toLowerCase()];return i===void 0&&(e=!0),i??""});return e?null:t}function xl(n){if(/\\|@|expression\s*\(|(?:image-set|cross-fade|image|element|src)\s*\(/i.test(n))return!1;for(let[,e]of n.matchAll(/url\s*\(\s*["']?\s*([^)]*)/gi))if(!e.startsWith("#"))return!1;return!0}function vl(n,e,t){let r=bl(t);if(r===null)return"it declares XML entities";let o=(e.includes(":")?e.slice(e.indexOf(":")+1):e).toLowerCase();if(o.startsWith("on"))return"it has an event handler (an on\u2026 attribute)";if(e==="xml:base")return"it loads or links to something outside itself";if(e==="xmlns")return r===Ga?null:"it changes what its elements are (another xmlns)";if(e.startsWith("xmlns:"))return pl.includes(r)?"it changes what its elements are (another xmlns)":null;if(o==="href"||o==="src"){let i=r.replace(/[\u0000- ]+/g,"");return i.startsWith("#")||n==="image"&&/^data:image\/(png|jpe?g|gif|webp|avif);/i.test(i)?null:"it loads or links to something outside itself"}return xl(r)?null:o==="style"?"its style loads something outside itself":"it loads or links to something outside itself"}var La=/^\s+([A-Za-z_][A-Za-z0-9_.:-]*)\s*=\s*(?:"([^"<]*)"|'([^'<]*)')/;function Ba(n){if(/<!ENTITY/i.test(n))return"it declares XML entities";if(/<!\[CDATA\[/i.test(n))return"it has a CDATA section, which the page and the picture read differently";let e=[],t=!1,r=/^\s*(<\?xml\s[^?<>]*\?>)?/.exec(n)[0].length;for(;r<n.length;){let o=n.slice(r),i=/^[^<]+/.exec(o);if(i){if(e.length===0&&i[0].trim()!=="")return"it is not one SVG: there is text outside it";r+=i[0].length;continue}if(o.startsWith("<!--")){let f=o.indexOf("-->",4);if(f<0)return"it has a comment that never ends";let g=o.slice(4,f);if(/^-?>/.test(g)||g.includes("--")||g.includes("<!")||g.endsWith("-"))return"it has a comment the page and the picture read differently";r+=f+3;continue}if(/^<!DOCTYPE/i.test(o)){let f=/^<!DOCTYPE\s+svg\b[^<>[\]]*>/i.exec(o);if(!f||e.length>0||t)return"it declares XML entities";r+=f[0].length;continue}let s=/^<\/([A-Za-z][A-Za-z0-9_.:-]*)\s*>/.exec(o);if(s){if(e.pop()!==s[1])return`it is not one SVG: </${s[1]}> closes what is not open`;e.length===0&&(t=!0),r+=s[0].length;continue}let a=/^<([A-Za-z][A-Za-z0-9_.:-]*)/.exec(o);if(!a)return"it is not one SVG: it has markup a picture cannot hold";let d=a[1],l=ml[d.toLowerCase()];if(l)return l;if(t)return`it is not one SVG: <${d}> comes after it ends`;if(e.length===0&&d!=="svg")return"it is not one SVG";if(d.includes(":"))return`it has an element of another kind (<${d}>)`;if(!hl.has(d))return`it has a <${d}> element, which a picture does not need`;let u=e[e.length-1];if(u&&gl.has(u))return`it has an element inside a <${u}>, which the page reads as HTML`;let p=a[0].length;for(let f=La.exec(o.slice(p));f;f=La.exec(o.slice(p))){let g=vl(d,f[1],f[2]??f[3]??"");if(g)return g;p+=f[0].length}let c=/^\s*(\/?)>/.exec(o.slice(p));if(!c)return/(?:^|[\s/"'])on[a-z]+\s*=/i.test(o.slice(p,p+400))?"it has an event handler (an on\u2026 attribute)":`it is not one SVG: <${d}>'s attributes are not each quoted and apart`;c[1]!=="/"?e.push(d):e.length===0&&(t=!0),r+=p+c[0].length}return e.length>0?`it is not one SVG: <${e[e.length-1]}> is never closed`:t?null:"it is not one SVG"}function Ua(n){if(n){if(!Ca(n)){if(/^\s*</.test(n))return;let e=/^\s*([a-z][a-z0-9+.-]*):/i.exec(n)?.[1]?.toLowerCase();return e===void 0||e==="http"||e==="https"||e==="data"&&/^\s*data:image\//i.test(n)?n:void 0}return Ba(n)===null?`data:image/svg+xml,${encodeURIComponent(n.trim())}`:void 0}}var kt;function wl(){if(kt===void 0)try{kt=new RegExp("^\\p{RGI_Emoji}$","v")}catch{kt=null}return kt}function kl(n){return/\p{Extended_Pictographic}|\p{Regional_Indicator}|⃣/u.test(n)}function ro(n){if(typeof n!="string"||n.trim()==="")return"it is empty; give one emoji, like \u{1F3E1}";let e=[...new Intl.Segmenter("en",{granularity:"grapheme"}).segment(n)].map(o=>o.segment),t=e.filter(kl).length;if(t===0)return"it is not an emoji; give one emoji, like \u{1F3E1}";if(e.length>1)return t===e.length?`it is ${e.length} emoji, and a mark is one`:"it has other characters beside the emoji; give the emoji alone";let r=wl();return r&&!r.test(n)?"it is not one of the standard emoji every emoji set draws":null}function oo(n){return typeof n=="object"&&n!==null&&typeof n.emoji=="string"?n.emoji:void 0}function Ka(n){return`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><text x="50" y="50" dy=".35em" font-size="88" text-anchor="middle">${n}</text></svg>`}function Sl(n){let e=n?.favicon;if(typeof e=="object"&&e!==null){let t=oo(e);return t!==void 0&&ro(t)===null?`data:image/svg+xml,${encodeURIComponent(Ka(t))}`:void 0}return Ua(e)}function $l(n){if(n?.logo)return;let e=oo(n?.favicon);return e!==void 0&&ro(e)===null?e:void 0}var Va={"system-sans":'ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif',"system-serif":'ui-serif, "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, Cambria, "Times New Roman", serif',"system-mono":Ee.mono},_l=["serif","sans-serif","monospace","cursive","fantasy","system-ui","math","emoji","-apple-system","BlinkMacSystemFont"],Wa=["Georgia","Times New Roman","Times","Iowan Old Style","Palatino","Palatino Linotype","Charter","Cambria","Baskerville","Optima","Helvetica","Helvetica Neue","Arial","Verdana","Segoe UI","Roboto","Avenir","Avenir Next","Gill Sans","Menlo","Monaco","Consolas","SF Mono","SFMono-Regular","Courier New"];var Rl=n=>new Set(n.map(e=>e.toLowerCase()));function Al(n){return Rl([..._l,...Wa]).has(n.toLowerCase())||n.toLowerCase().startsWith("ui-")}function Ol(n){return Va[n]??n}function Hx(n){let e=wt({accent:n,base:on});return e.ok||!e.missing.every(t=>t.startsWith("warn"))?e:wt({accent:n,base:on,warn:{light:on.light.bad,dark:on.dark.bad}})}function Pl(n,e,t){if(t.rows===0)return;let r=J(n,e.rows).toLowerCase(),o=J(n,e.columns).toLowerCase(),i=e.rows===e.columns,s=i?`link ${r} to each other`:`link ${r} to ${o}`;if(t.columns===0)return`No ${o} yet: ${s}.`;if(t.cells>0||typeof e.link=="object"&&e.link!==null)return;let a=Y(n.tryDefinition(e.rows),e.rows);return i?`No ${a} is linked to another yet: ${s}.`:`No ${a} is linked to ${ze(Y(n.tryDefinition(e.columns),e.columns))} yet: ${s}.`}var te={connectors:{all:{route:"curve",visible:!0},byEdge:{}},captions:{visible:!0},grid:{visible:!0,size:64},lattice:{visible:!0,size:46},tags:{visible:!0},emphasis:{rest:.34,dim:.12},marks:{flag:"\u26A0"}};function El(n){return n?{connectors:{all:{...te.connectors.all,...n.connectors?.all??{}},byEdge:{...te.connectors.byEdge,...n.connectors?.byEdge??{}}},captions:{...te.captions,...n.captions??{}},grid:{...te.grid,...n.grid??{}},lattice:{...te.lattice,...n.lattice??{}},tags:{...te.tags,...n.tags??{}},emphasis:{...te.emphasis,...n.emphasis??{}},marks:{...te.marks,...n.marks??{}}}:te}function zl(n,e){return{...n.connectors.all,...n.connectors.byEdge[e]??{}}}function Ml(n){return[` --graview-kit-grid: ${n.grid.visible?1:0};`,` --graview-kit-grid-size: ${n.grid.size}px;`,` --graview-kit-lattice: ${n.lattice.visible?1:0};`,` --graview-kit-lattice-size: ${n.lattice.size}px;`,` --graview-kit-tags: ${n.tags.visible?"inline-flex":"none"};`,` --graview-kit-captions: ${n.captions.visible?"block":"none"};`,` --graview-kit-rest: ${n.emphasis.rest};`,` --graview-kit-dim: ${n.emphasis.dim};`,` --graview-kit-flag: "${n.marks.flag.replace(/"/g,"'")}";`].join(`
5
- `)}function Nl(n,e,t){let r=new Set([e]);for(let[o,i]of t.entries()){let s=n.edge(i);if(!s)return{ok:!1,at:o};let a=s.from,d=s.to==="*"?n.kinds:s.to,l=new Set;for(let u of r){if(a.includes(u))for(let p of d)l.add(p);if(s.to==="*"||d.includes(u))for(let p of a)l.add(p)}if(l.size===0)return{ok:!1,at:o};r=l}return{ok:!0,reached:r}}function Il(n){let e=n.name??"";return e&&n.onBehalfOfName?`${e}, for ${n.onBehalfOfName}`:e}function io(n,e,t=2500){return n.held==="socket"?!0:n.until!==void 0?e<Date.parse(n.until):e-Date.parse(n.at)<t}function jl(n){return`${n.kind}:${n.id??""}:${n.session??""}`}function Dl(n,e,t,r=2500,o){let i=new Map;for(let[s,a]of n)io(a,t,r)&&i.set(s,a);for(let s of e){if(!io(s,t,r)){i.delete(s.participant);continue}let a=i.get(s.participant);(!a||Date.parse(a.at)<=Date.parse(s.at))&&i.set(s.participant,s)}return o!==void 0&&i.delete(o),i}function Tl(n,e){return!n||!e?n===e:n.participant===e.participant&&n.kind===e.kind&&n.name===e.name&&n.onBehalfOf===e.onBehalfOf&&n.onBehalfOfName===e.onBehalfOfName&&n.until===e.until&&n.held===e.held&&n.hue===e.hue&&n.stop===e.stop&&(n.over??null)===(e.over??null)&&(n.robot?.at??null)===(e.robot?.at??null)&&(n.robot?.mode??null)===(e.robot?.mode??null)}export{Ie as a,ji as b,Di as c,Ld as d,nr as e,hn as f,gn as g,F as h,Yh as i,Xh as j,Vn as k,Qh as l,eg as m,ng as n,tr as o,tg as p,je as q,Wn as r,rg as s,og as t,ig as u,Ki as v,Vi as w,de as x,qn as y,sg as z,ag as A,M as B,oc as C,lo as D,an as E,_t as F,Fl as G,dn as H,qa as I,ho as J,fe as K,Rt as L,Ha as M,re as N,Ja as O,Ya as P,Xa as Q,Qa as R,ed as S,cn as T,mo as U,td as V,Ot as W,T as X,rd as Y,C as Z,od as _,J as $,id as aa,sd as ba,Zn as ca,ze as da,Y as ea,ic as fa,Wi as ga,ir as ha,qi as ia,mn as ja,Ji as ka,dm as la,Jn as ma,Ia as na,Ox as oa,dc as pa,uc as qa,Qi as ra,lc as sa,fm as ta,yn as ua,fc as va,hc as wa,pm as xa,hm as ya,gc as za,ns as Aa,Ju as Ba,Yn as Ca,mc as Da,Te as Ea,xn as Fa,Xn as Ga,ym as Ha,Fe as Ia,De as Ja,ds as Ka,xc as La,vn as Ma,Se as Na,wm as Oa,cr as Pa,Qn as Qa,vc as Ra,O as Sa,Sn as Ta,E as Ua,G as Va,Sc as Wa,tt as Xa,Fm as Ya,$c as Za,_c as _a,Xu as $a,I as ab,B as bb,ye as cb,be as db,qm as eb,bs as fb,Be as gb,N as hb,Ue as ib,ne as jb,Ec as kb,Ve as lb,uu as mb,Mr as nb,Xs as ob,Xe as pb,Hy as qb,Nr as rb,na as sb,ta as tb,Ir as ub,zn as vb,Er as wb,Mn as xb,mu as yb,ra as zb,jr as Ab,Dr as Bb,sa as Cb,ua as Db,Re as Eb,qr as Fb,Qu as Gb,Qe as Hb,xr as Ib,Rs as Jb,Nc as Kb,jc as Lb,dl as Mb,eo as Nb,cl as Ob,on as Pb,Ee as Qb,ll as Rb,fl as Sb,Ca as Tb,Ba as Ub,Ua as Vb,Sl as Wb,$l as Xb,Al as Yb,Ol as Zb,Hx as _b,Tu as $b,Pl as ac,El as bc,zl as cc,Ml as dc,Dc as ec,Tc as fc,Fc as gc,Zc as hc,qe as ic,On as jc,ce as kc,it as lc,Je as mc,Pn as nc,_r as oc,En as pc,Lc as qc,Cc as rc,Nl as sc,Ru as tc,qs as uc,Au as vc,_a as wc,en as xc,Br as yc,Kr as zc,zu as Ac,ue as Bc,jn as Cc,Mu as Dc,Nu as Ec,Aa as Fc,Iu as Gc,ju as Hc,Oa as Ic,mt as Jc,Ea as Kc,za as Lc,Fu as Mc,Zu as Nc,Lu as Oc,Cu as Pc,Ma as Qc,Gu as Rc,Bu as Sc,Uu as Tc,Ku as Uc,Vu as Vc,Wr as Wc,Wu as Xc,qu as Yc,Il as Zc,jl as _c,Dl as $c,Tl as ad};