graview 0.1.27 → 0.1.28

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 (73) hide show
  1. package/dist/preview/{chunk.FS5K4AVA.js → chunk.22H4JXTH.js} +1 -1
  2. package/dist/preview/{chunk.7SVIRYBB.js → chunk.25OYH6MY.js} +1 -1
  3. package/dist/preview/{chunk.LHAAZQNQ.js → chunk.2GBQJXJH.js} +1 -1
  4. package/dist/preview/chunk.2VUG6EAN.js +1 -0
  5. package/dist/preview/chunk.337WDTG3.js +2 -0
  6. package/dist/preview/{chunk.UPGDSOBY.js → chunk.3HLLQ5CJ.js} +1 -1
  7. package/dist/preview/{chunk.UMMN5Z6V.js → chunk.46KUPBQC.js} +1 -1
  8. package/dist/preview/{chunk.4R7LDCDO.js → chunk.4H7CQE56.js} +1 -1
  9. package/dist/preview/{chunk.7THQFY52.js → chunk.4RO5DA22.js} +1 -1
  10. package/dist/preview/{chunk.TX2GOL65.js → chunk.4TUNX4WM.js} +1 -1
  11. package/dist/preview/{chunk.IXVSJJQH.js → chunk.5BGA2VUS.js} +2 -2
  12. package/dist/preview/{chunk.T2EZ5MTH.js → chunk.7S22MBNN.js} +1 -1
  13. package/dist/preview/{chunk.KAKX5TZN.js → chunk.A73BXXE4.js} +2 -2
  14. package/dist/preview/chunk.ARE3MEDN.js +1 -0
  15. package/dist/preview/chunk.ASFZTYFO.js +1 -0
  16. package/dist/preview/{chunk.S5JWZIVE.js → chunk.BBJZ6O7J.js} +1 -1
  17. package/dist/preview/{chunk.NQNQPPPM.js → chunk.BCBH6WJF.js} +1 -1
  18. package/dist/preview/{chunk.ZNIJONZN.js → chunk.CAZAB352.js} +1 -1
  19. package/dist/preview/chunk.CY7MDLRS.js +1 -0
  20. package/dist/preview/chunk.DAVRLRGB.js +1 -0
  21. package/dist/preview/{chunk.IZDKEFPJ.js → chunk.DCIC3YHX.js} +1 -1
  22. package/dist/preview/{chunk.DQ5OWYLQ.js → chunk.EW4JFOJY.js} +1 -1
  23. package/dist/preview/{chunk.5BN2ARQ2.js → chunk.EYF6ONTA.js} +1 -1
  24. package/dist/preview/{chunk.Q7544RCB.js → chunk.FP27W5MU.js} +1 -1
  25. package/dist/preview/{chunk.U5ZUXGWM.js → chunk.G2OOBROL.js} +1 -1
  26. package/dist/preview/{chunk.7CO6VP6F.js → chunk.GCKSQ52O.js} +1 -1
  27. package/dist/preview/{chunk.VD6FJ6KJ.js → chunk.GE5EAN36.js} +1 -1
  28. package/dist/preview/chunk.HOPIZMJR.js +2 -0
  29. package/dist/preview/{chunk.VMD4PDYJ.js → chunk.IBGO4BUF.js} +1 -1
  30. package/dist/preview/{chunk.OA5BVKJH.js → chunk.IDI2BQ7Y.js} +1 -1
  31. package/dist/preview/{chunk.MNPNW4BQ.js → chunk.IH42QTOM.js} +1 -1
  32. package/dist/preview/{chunk.CW7BMVBG.js → chunk.ISRS7GOT.js} +1 -1
  33. package/dist/preview/{chunk.AS35X6KA.js → chunk.J6CBMLGR.js} +1 -1
  34. package/dist/preview/{chunk.4JXWQO6Y.js → chunk.JRCV6HVV.js} +1 -1
  35. package/dist/preview/{chunk.ATLUMYAJ.js → chunk.KWW3YHQ4.js} +1 -1
  36. package/dist/preview/{chunk.VMEX2KZ4.js → chunk.MKNXV4TM.js} +7 -7
  37. package/dist/preview/{chunk.V57P4LIZ.js → chunk.MVNIKZIC.js} +1 -1
  38. package/dist/preview/{chunk.DG2WKNMX.js → chunk.N2WTNKEV.js} +1 -1
  39. package/dist/preview/{chunk.VFICMX5G.js → chunk.N7HCALRK.js} +1 -1
  40. package/dist/preview/{chunk.OYULDOQP.js → chunk.NRRUGG22.js} +1 -1
  41. package/dist/preview/{chunk.ZMMMKTAG.js → chunk.OGL4PHTY.js} +1 -1
  42. package/dist/preview/{chunk.FTBKJ5RZ.js → chunk.PFQFPJ5L.js} +1 -1
  43. package/dist/preview/{chunk.EVTZE2OZ.js → chunk.PN2H6X7O.js} +1 -1
  44. package/dist/preview/{chunk.7QTBDACG.js → chunk.PWHJHFC4.js} +1 -1
  45. package/dist/preview/{chunk.4W24TPMR.js → chunk.Q3HVA6L4.js} +1 -1
  46. package/dist/preview/{chunk.LQZ2VQWN.js → chunk.RZLNDVGN.js} +2 -2
  47. package/dist/preview/{chunk.HPD3DSTP.js → chunk.SBHVVJY7.js} +1 -1
  48. package/dist/preview/{chunk.QZWN46V6.js → chunk.SNBIZ3B6.js} +1 -1
  49. package/dist/preview/chunk.TBG2QBOS.js +1 -0
  50. package/dist/preview/chunk.VR735ZQL.js +1 -0
  51. package/dist/preview/{chunk.YO7UFBJP.js → chunk.VSXCXPK2.js} +1 -1
  52. package/dist/preview/{chunk.TMPV4HLQ.js → chunk.W3LDQ6B2.js} +1 -1
  53. package/dist/preview/{chunk.YV2RTNPU.js → chunk.WCNONCTL.js} +1 -1
  54. package/dist/preview/{chunk.XDHBV5K5.js → chunk.WHTNSETN.js} +1 -1
  55. package/dist/preview/{chunk.NKIFVPS3.js → chunk.XG67BWH6.js} +1 -1
  56. package/dist/preview/{chunk.DG2UE7PJ.js → chunk.XRM6WXPW.js} +1 -1
  57. package/dist/preview/chunk.Y5LPZLDE.js +1 -0
  58. package/dist/preview/{chunk.E3SZ7T75.js → chunk.YETBY2LM.js} +1 -1
  59. package/dist/preview/chunk.ZEUBAAVQ.js +1 -0
  60. package/dist/preview/{chunk.PHY3AH3L.js → chunk.ZJDRD6PO.js} +1 -1
  61. package/dist/preview/page.js +2 -2
  62. package/package.json +6 -6
  63. package/dist/preview/chunk.DY2FFBWF.js +0 -1
  64. package/dist/preview/chunk.GHMICJIB.js +0 -1
  65. package/dist/preview/chunk.HO6JR7VY.js +0 -1
  66. package/dist/preview/chunk.I5KD54S6.js +0 -1
  67. package/dist/preview/chunk.J36GTQTV.js +0 -1
  68. package/dist/preview/chunk.MHJJEGQO.js +0 -1
  69. package/dist/preview/chunk.OHGJ5BZ4.js +0 -2
  70. package/dist/preview/chunk.RUC4HFVC.js +0 -1
  71. package/dist/preview/chunk.SHDYLMZE.js +0 -2
  72. package/dist/preview/chunk.ZD5HGRPR.js +0 -1
  73. package/dist/preview/chunk.ZKM4P7US.js +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "graview",
3
- "version": "0.1.27",
3
+ "version": "0.1.28",
4
4
  "type": "module",
5
5
  "description": "The Graview command line: start a product, check its declaration, write its agent docs, serve its store, preview a document with no product and photograph its places, say whether a product is on one release, host it for an agent over MCP, apply an act to it, sync its seed, install the authoring skills. The tool; @graview/* is the framework.",
6
6
  "keywords": [
@@ -29,11 +29,11 @@
29
29
  }
30
30
  },
31
31
  "dependencies": {
32
- "@graview/core": "0.1.27",
33
- "@graview/guest": "0.1.27",
34
- "@graview/ship": "0.1.27",
35
- "@graview/skills": "0.1.27",
36
- "@graview/tools": "0.1.27"
32
+ "@graview/core": "0.1.28",
33
+ "@graview/guest": "0.1.28",
34
+ "@graview/ship": "0.1.28",
35
+ "@graview/skills": "0.1.28",
36
+ "@graview/tools": "0.1.28"
37
37
  },
38
38
  "engines": {
39
39
  "node": ">=22"
@@ -1 +0,0 @@
1
- import{d as R}from"./chunk.EVTZE2OZ.js";import{a as q}from"./chunk.NQNQPPPM.js";import{$ as X,O as Q,P as V,S as z,V as Y,Z as A,Za as nn,_ as D,ab as B,ka as L,la as Z}from"./chunk.VMEX2KZ4.js";var E=c=>c.filter(Boolean).join(" "),en=new Set(["tell","me","about","what","how","show","describe","the","a","an","and","please"]),an=new Set([...en,"where","is","are","was","find","any","anything","something","things","called","named","which","who","of","for","with","to","in","on","i","my","do","does","have","has","can","you","it","that","this","there","we","our","got","be"]),dn=c=>c.length<=1?A(c[0]??"something"):`${c.slice(0,-1).map(A).join(", ")} and ${A(c[c.length-1])}`;function bn(c={}){return async(t,u,g={})=>{let w=u.toLowerCase(),h=n=>V(t.schema.tryDefinition(n.kind),n),y=(await import("./chunk.GHMICJIB.js")).goingFrom(t,u,g,c.today);if(y.reply)return y.reply;let v=y.told,S=n=>y.moves?{...n,moves:y.moves}:n,p=[],C=w.split(/[^a-z0-9]+/).filter(Boolean),I=new Set;for(let n=0;n<C.length;n++){let e="";for(let s=n;s<Math.min(C.length,n+6);s++)e+=C[s],I.add(e)}let T=n=>n.toLowerCase().replace(/[^a-z0-9]+/g,""),H=[...t.graph.allNodes()].map(n=>({node:n,label:T(h(n))})).filter(({label:n})=>n.length>=2&&I.has(n)).sort((n,e)=>e.label.length-n.label.length),N=new Map;for(let{label:n}of H)N.set(n,(N.get(n)??0)+1);for(let{node:n,label:e}of H)(N.get(e)??0)>1||p.some(s=>s.id===n.id)||p.push(n);for(let n of g.selection??[]){let e=t.graph.getNode(n);e&&!p.some(s=>s.id===e.id)&&p.push(e)}let M=v&&t.graph.getNode(v);if(M){let n=p.findIndex(e=>e.id===M.id);n>=0&&p.splice(n,1),p.unshift(M)}let b=t.violations(),O=(n=b)=>ln(n);if(y.problems||!v&&/\b(wrong|broken|problem|violat|standing)\b/.test(w)){if(b.length===0)return S({say:"Nothing is wrong: every rule holds.",proposals:[],grounded:!0});let n=R(t,O().slice(0,4)),e=(i,r)=>{let d=t.allMutations().find(l=>l.name===i),a=d?q(d.input).find(l=>l.name===r):void 0;return a?.control==="node"&&!a.kinds.includes("*")?a.kinds.map(l=>D(t.schema.tryDefinition(l),l)).join(" or "):B(t.schema,d,r).label},s=[...new Set(b.flatMap(i=>i.repairs).filter(i=>(i.missing??[]).length>0).map(i=>`\u201C${i.label}\u201D (${(i.missing??[]).map(r=>e(i.mutation,r)).join(", ")})`))];return S({say:E([y.moves?.[0]?.said??"",`${Z(b)}:`,b.slice(0,4).map(i=>i.message).join("; ")+(b.length>4?"\u2026":"."),n.length>0?"The repairs below come from the rules themselves.":s.length>0?`Each way to fix ${b.length===1?"it":"these"} asks something first \u2014 ${s.slice(0,4).join(" or ")} \u2014 select the record and its own actions will ask.`:"No rule here names a way to fix it."]),proposals:n,grounded:!0})}let K=/\?\s*$/.test(u)||/^\s*(what|who|whom|whose|which|when|where|why|how|is|are|was|were|does|do|did|can|could|should|would|will|has|have)\b/.test(w),$=K?void 0:t.allMutations().find(n=>{let e=(n.title??n.name).toLowerCase();return e.length>3&&w.includes(e)});if($){let n={},e=[],s=u.slice(u.toLowerCase().indexOf(($.title??$.name).toLowerCase())+($.title??$.name).length),i=p.reduce((a,l)=>{let f=h(l).toLowerCase(),m=a.toLowerCase().indexOf(f);return m<0?a:`${a.slice(0,m)} it${a.slice(m+f.length)}`},s),r=u.match(/"([^"]+)"/)?.[1]??i.match(/^(?:\s+(?:it|this|that|them))?\s+(?:to|as)\s+(.+?)\s*[.!]?$/i)?.[1],d=[...p];for(let a of q($.input)){let l=un(a,d,r,c.today??g.today,w);if(l!==void 0){n[a.name]=l;let f=d.findIndex(m=>m.id===l);f>=0&&d.splice(f,1)}else a.optional||e.push(B(t.schema,$,a.name).label.toLowerCase())}return e.length===0?{say:"I can do that. Review it below.",proposals:R(t,[{mutation:$.name,args:n,why:"you asked in words"}])}:{say:`\u201C${$.title??z($.name)}\u201D needs ${dn(e)} \u2014 say ${e.length===1?"it":"them"} (or select ${e.length===1?"it":"them"}) and ask again.`,proposals:[]}}let tn={mon:"mon",monday:"mon",tue:"tue",tues:"tue",tuesday:"tue",wed:"wed",wednesday:"wed",thu:"thu",thur:"thu",thurs:"thu",thursday:"thu",fri:"fri",friday:"fri",sat:"sat",saturday:"sat",sun:"sun",sunday:"sun"},x=C.map(n=>tn[n]).find(Boolean),_=(n,e,s)=>{let i=t.schema.tryDefinition(n)?.display?.format?.[e];return i?i(s):String(s)},F=n=>{let e=t.schema.tryDefinition(n.kind)?.fieldRoles;if(!e?.start)return null;let s=n[e.start],i=e.end?n[e.end]:void 0,r=e.day?n[e.day]:e.days?n[e.days]:void 0;return s===void 0&&i===void 0?null:[s!==void 0?_(n.kind,e.start,s):null,i!==void 0&&e.end?`\u2013${_(n.kind,e.end,i)}`:null,Array.isArray(r)?` on ${r.join(", ")}`:r!==void 0?` on ${String(r)}`:null].filter(Boolean).join("")||null},sn=n=>{let e=[];for(let s of t.graph.allEdges()){let i=s.from===n?s.to:s.to===n?s.from:null;if(!i)continue;let r=t.graph.getNode(i);r&&!e.some(d=>d.id===r.id)&&e.push(r)}return e},G=n=>{let e=p[0];if(!e)return[];let s=[];for(let r of sn(e.id)){let d=0,a=T(h(r));for(let l of C)l.length>2&&a.includes(l)&&(d+=1);if(x){let l=t.schema.tryDefinition(r.kind)?.fieldRoles,f=l?.day?r[l.day]:void 0,m=l?.days?r[l.days]:void 0;f===x?d+=4:Array.isArray(m)&&m.includes(x)&&(d+=1)}n&&!F(r)||d>0&&s.push({node:r,score:d})}let i=s.sort((r,d)=>d.score-r.score).map(r=>r.node);return n&&F(e)?i.unshift(e):n||i.push(e),i};if(p.length>0&&/\bwhen\b/.test(w)){let n=G(!0)[0]??null,e=n?F(n):null;if(n&&e)return S({say:`${h(n)} runs ${e}.`,proposals:R(t,O(L(b,[n.id])).slice(0,3)),grounded:!0})}if(p.length>0&&/\bwho(m|se)?\b/.test(w))for(let n of G(!1)){let e=[],s=new Set;for(let i of t.schema.definitions)for(let[r,d]of Object.entries(i.edges)){let a=/\bwho\b/i.test(d.description??""),l=/\bwho\b/i.test(d.inverse??"");if(!a&&!l||s.has(r))continue;s.add(r);let f=[...t.graph.in(n.id,r),...t.graph.out(n.id,r)];if(f.length===0)continue;let m=a?d.description:d.inverse;e.push(`${m}: ${f.map(o=>h(o)).join(", ")}`)}if(e.length>0)return S({say:`${h(n)} \u2014 ${e.join("; ")}.`,proposals:R(t,O(L(b,[n.id])).slice(0,3)),grounded:!0})}if(p.length>0){let n=p[0],e=new Set(h(n).toLowerCase().split(/[^a-z0-9]+/).filter(Boolean)),s=C.every(o=>e.has(o)||en.has(o)),i=K||s,r=t.schema.tryDefinition(n.kind),d=o=>o===o.toUpperCase()?o:o.charAt(0).toLowerCase()+o.slice(1),a=X(n,r,{limit:3}).map(o=>{let k=n[o.key];return typeof k=="boolean"&&!/\s/.test(o.label)?k?d(o.label):`not ${d(o.label)}`:typeof k=="string"&&hn.test(k)?`${d(o.label)} ${pn(k)}`:o.alone.startsWith(o.label)?d(o.label)+o.alone.slice(o.label.length):`${d(o.label)} ${o.alone}`}).join(", "),l=L(b,[n.id]),f=new Map;for(let o of[...t.graph.allEdges()]){let k=o.from===n.id?"out":o.to===n.id?"in":null;if(!k)continue;let J=t.graph.getNode(k==="out"?o.to:o.from);if(!J)continue;let P=`${o.kind}|${k}`;if(!f.has(P)){let W;for(let rn of t.schema.definitions){let j=rn.edges[o.kind];if(j&&(W=k==="out"?j.description:j.inverse??j.description,W))break}f.set(P,{sentence:W??z(o.kind).toLowerCase(),names:[]})}let U=f.get(P);U.names.length<6&&U.names.push(h(J))}let m=[...f.values()].slice(0,4).map(o=>`${o.sentence.charAt(0).toUpperCase()}${o.sentence.slice(1)}: ${o.names.join(", ")}`).join(". ");return S({say:E([y.moves?.[0]?.said??"",`${h(n)} \u2014 ${A(D(t.schema.tryDefinition(n.kind),n.kind))}${a?` (${a})`:""}.`,m?`${m}.`:"Connected to nothing yet.",l.length>0?`Trouble: ${l.map(o=>o.message).join("; ")}.`:"Nothing about it is broken."]),proposals:R(t,O(l).slice(0,3)),...i||v?{grounded:!0}:{}})}{let n=w.split(/[^\p{L}\p{N}]+/u).filter(e=>e.length>0&&!an.has(e));if(n.length>0){let e=nn(t,n.join(" "),{...g.principal?{principal:g.principal}:{},...g.selection?{from:g.selection}:{},...c.today??g.today?{today:c.today??g.today}:{},limit:6}),s=e.hits.filter(i=>i.about==="node");if(s.length>0){let i=Q(s.flatMap(a=>{let l=t.graph.getNode(a.id);return l?[l]:[]}),a=>t.schema.tryDefinition(a)),r=s.map(a=>`${a.label}${i.has(a.id)?` \xB7 ${i.get(a.id)}`:""} (${D(t.schema.tryDefinition(a.kind),a.kind)}${a.why.field==="label"?"":`, ${a.why.reading.toLowerCase()}: ${a.why.fragment}`})`);return{say:`${e.total===1?"One thing is":`${gn(e.total)} things are`} called \u201C${e.words}\u201D \u2014 ${r.join("; ")}${e.total>s.length?`; and ${e.total-s.length} more`:""}.`,proposals:[],picks:s}}}}let on=t.schema.kinds.filter(n=>!t.modules.disabledKinds.has(n)).map(n=>{let e=Y(t.schema,n);return`${t.graph.nodesOfKind(n).length} ${e}`}).join(", ");return{say:E([`This graph holds ${on}.`,"Ask about anything by name, ask what's wrong, or say a change in its own words \u2014",`like "${t.allMutations()[0]?.title??"an action"}".`]),proposals:[],unsure:!0}}}function ln(c){return c.flatMap(t=>{let u=t.repairs.find(g=>!g.missing?.length);return u?[{mutation:u.mutation,args:{...u.args},why:t.message}]:[]})}var cn=["No","One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten"],gn=c=>cn[c]??String(c);function un(c,t,u,g,w=""){switch(c.control){case"node":return t.find(y=>c.kinds.includes("*")||c.kinds.includes(y.kind))?.id;case"text":return u;case"date":{let h=g??new Date().toISOString().slice(0,10);return c.time?`${h}T09:00`:h}case"choice":{let h=new Set(w.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean)),y=(c.options??[]).filter(v=>v.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean).every(S=>h.has(S)));return y.length===1?y[0]:void 0}default:return}}function $n(c){return async(t,u,g={})=>(await import("./chunk.IXVSJJQH.js")).answerWithModel(c,t,u,g)}var hn=/^\d{4}-\d{2}-\d{2}$/,fn=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function pn(c){let[t,u,g]=c.split("-").map(Number);return`${g} ${fn[u-1]??""} ${t}`}export{bn as a,ln as b,$n as c};
@@ -1 +0,0 @@
1
- import{a as ee}from"./chunk.G4JJXA63.js";import{b as nt}from"./chunk.DY2FFBWF.js";import{d as tt}from"./chunk.EVTZE2OZ.js";import"./chunk.NQNQPPPM.js";import"./chunk.QZWN46V6.js";import{$ as qe,Ga as V,Ma as fe,P as Ye,Qa as Se,Ra as Xe,V as ze,Va as G,X as Je,Z as Ae,Za as Ze,_ as F,bc as et,ka as Ve,la as Qe}from"./chunk.VMEX2KZ4.js";import"./chunk.AJZBJBMO.js";var vt="Nothing by that name here.",$=o=>o.normalize("NFD").replace(/\p{M}+/gu,"").toLowerCase().replace(/[’']/g,"'").replace(/[^\p{L}\p{N}' ]+/gu," ").replace(/\s+/g," ").trim(),At=/^(?:(?:can you |could you |please )?(?:go|take me|bring me|head|jump|navigate|switch|get me)(?: back)? to|(?:please )?(?:open|show(?: me)?|bring up|let me see|view)) (.+)$/,St=/^(?:(?:can you |could you |please )?tell me (?:about|of)|what(?: is|'s| are) (?:in |on )?|describe|explain|who(?: is|'s)) (.+)$/,Nt=/^(?:what(?: is|'s| am i looking at| do i see)(?: (?:here|this|on (?:this|the) (?:page|screen)|in view|this place|this page))?|where am i|describe (?:this|here|this place|this page)|tell me about (?:this|here|this place|this page))$/,st=new Set(["here","this","this place","this page","on this page","on the page","on this screen","in view"]),Ot=/^(?:date|day|when|on|at|the date|the day)$/,Ct=/^(?:what(?: is|'s) (?:wrong|broken|the (?:problem|matter|trouble))|what needs (?:fixing|attention|doing)|any (?:problems|issues|trouble)|(?:show(?: me)? |go to |open )?(?:the )?(?:problems|issues|trouble|standing|what's wrong)|is (?:anything|something) (?:wrong|broken)|are there (?:any )?(?:problems|issues))(?: (?:with|about|on|in) (.+))?$/,Y=o=>o.replace(/^(?:the|a|an|my|our) /,""),te=new Set(["the","a","an","my","our","all","any","of","that","which","who","are","is","be","what","whats","what's","with","me","show","list","every","there","do","i","have","we","due","for","please","were","was","by","from","in","on"]),ct=864e5,se=o=>Date.UTC(Number(o.slice(0,4)),Number(o.slice(5,7))-1,Number(o.slice(8,10))),Me=o=>new Date(o).toISOString().slice(0,10),C=(o,i)=>Me(se(o)+i*ct),jt=["sunday","monday","tuesday","wednesday","thursday","friday","saturday"],Mt=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],ut=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],Dt="(monday|tuesday|tues|wednesday|thursday|thurs|friday|saturday|sunday)",ot="(january|february|march|april|may|june|july|august|september|october|november|december|jan|feb|mar|apr|jun|jul|aug|sept|sep|oct|nov|dec)",rt="(\\d{1,2})(?:st|nd|rd|th)?",Wt=o=>jt.findIndex(i=>i.startsWith(o.slice(0,3))),it=o=>ut.findIndex(i=>o.startsWith(i.toLowerCase()));function xt(o,i){let p=new Date(se(o)),u=o.slice(0,4)===i.slice(0,4)?"":` ${o.slice(0,4)}`;return`${Mt[p.getUTCDay()]} ${p.getUTCDate()} ${ut[p.getUTCMonth()]}${u}`}function Ne(o,i,p){if(o<0||i<1||i>31)return;let u=Number(p.slice(0,4)),c=k=>{let j=Date.UTC(k,o,i);return new Date(j).getUTCMonth()===o?Me(j):void 0},y=c(u);if(y)return se(y)<se(p)-183*ct?c(u+1):y}function Oe(o,i,p){let u=new Date(se(i)).getUTCDay(),c=f=>{let N=(u-p+7)%7,w=C(i,-N+f*7);return{from:w,to:C(w,6)}},y=()=>{let f=`${i.slice(0,8)}01`,N=new Date(Date.UTC(Number(i.slice(0,4)),Number(i.slice(5,7)),1));return{from:f,to:C(Me(N.getTime()),-1)}},k=f=>f?{from:f,to:f,day:xt(f,i)}:void 0,j=(f,N)=>{let w=Wt(N);return k(f==="this"||f==="next"?C(c(f==="next"?1:0).from,(w-p+7)%7):f==="last"?C(i,-((u-w+6)%7+1)):C(i,(w-u+7)%7))},z=f=>{let N=C(i,u===0?-1:6-u);return{from:C(N,f*7),to:C(N,f*7+1)}},U="\\b(?:(?:due |for |on |by )(?:the )?)?",P=[[/\b(?:overdue|past due|late)\b/,()=>({overdue:!0,to:C(i,-1)})],[/\b(?:due |for |on )?today\b/,()=>({from:i,to:i})],[/\b(?:due |for |on )?tomorrow\b/,()=>k(C(i,1))],[/\b(?:due |for |on )?yesterday\b/,()=>k(C(i,-1))],[/\b(?:due |for |on )?this week\b/,()=>c(0)],[/\b(?:due |for |on )?next week\b/,()=>c(1)],[/\b(?:due |for |on )?(?:last|previous) week\b/,()=>c(-1)],[/\b(?:due |for |on )?next weekend\b/,()=>z(1)],[/\b(?:due |for |on )?(?:this |the )?weekend\b/,()=>z(0)],[/\b(?:due |for |on )?this month\b/,()=>y()],[new RegExp(`${U}(\\d{4}) (\\d{2}) (\\d{2})\\b`),f=>k(Ne(Number(f[2])-1,Number(f[3]),`${f[1]}-01-01`))],[new RegExp(`${U}${rt} (?:of )?${ot}\\b`),f=>k(Ne(it(f[2]),Number(f[1]),i))],[new RegExp(`${U}${ot} (?:the )?${rt}\\b`),f=>k(Ne(it(f[1]),Number(f[2]),i))],[new RegExp(`${U}(?:(this|next|last|coming) )?${Dt}\\b`),f=>j(f[1],f[2])]];for(let[f,N]of P){let w=o.match(f);if(!w)continue;let S=N(w);if(S)return{ask:{words:w[0],...S},rest:o.replace(w[0]," ").replace(/\s+/g," ").trim()}}}function ft(o,i,p={}){let u=p.principal??{kind:"human"},c=o.seenBy(u),y=c.schema,k=p.today??o.today?.()??new Date().toISOString().slice(0,10),j=p.weekStartsOn??1,z=o.kindsKeptFrom(u),U=o.modules.disabledKinds,P=y.kinds.filter(e=>!z.has(e)&&!U.has(e)),f=new Set(P),N=(p.places??[]).filter(e=>e.kind===null||f.has(e.kind)),w=c.graph,S=$(i).replace(/[?.!]+$/,"").trim();if(S.length===0)return{unresolved:!0};let D=e=>y.tryDefinition(e),T=e=>Ye(D(e.kind),e),H=e=>ze(y,e),oe=e=>N.find(t=>t.kind===e&&t.address===Se(y,e))?.address??Se(y,e),ge=e=>Xe(y,e.kind,e.id),De=e=>({to:"record",id:e.id,kind:e.kind,label:T(e),address:ge(e),said:`Went to ${T(e)}.`}),We=e=>{let t=`Went to ${e.title}.`;return e.kind===null?{to:"place",slug:e.slug,title:e.title,address:e.address,...e.slug==="overview"?{face:"scene"}:{},said:t}:e.lens||e.address.startsWith("/places/")?{to:"picture",kind:e.kind,as:e.slug,title:e.title,address:e.address,said:t}:{to:"kind",kind:e.kind,title:e.title,address:e.address,said:t}},xe=()=>({unresolved:!0,say:vt}),re=e=>{let t=D(e.kind),s=qe(e,t,{limit:3}).map(r=>r.alone.startsWith(r.label)?r.alone:`${r.label.toLowerCase()} ${r.alone}`).join(", "),n=c.violations().filter(r=>r.nodeIds.includes(e.id));return[`${T(e)} \u2014 ${Ae(F(t,e.kind))}${s?` (${s})`:""}.`,n.length>0?`Trouble: ${n.map(r=>r.message).join("; ")}.`:""].filter(Boolean).join(" ")},ie=e=>{let t=new Set([G(e),G(Y(e))]);for(let n of[" page"," view"," lens"," place"," picture"," list"])e.endsWith(n)&&(t.add(G(e.slice(0,-n.length))),t.add(G(Y(e.slice(0,-n.length)))));t.delete("");let s=n=>t.has(G(n.title))||t.has(G(Y($(n.title))))||t.has(G(n.slug));return N.find(n=>n.kind!==null&&n.address.startsWith("/places/")&&s(n))??N.find(s)},pe=e=>{let t=Ze(o,e,{principal:u,today:k,limit:6,...p.selection?{from:p.selection}:{}}),s=t.hits.filter(r=>r.about==="node"&&f.has(r.kind)&&w.getNode(r.id)!==void 0),n=s.filter(r=>r.why.field==="label"&&r.why.strength==="exact");return n.length===1?{one:w.getNode(n[0].id),picks:s}:n.length>1?{picks:n}:s.length===1&&t.total===1?{one:w.getNode(s[0].id),picks:s}:{picks:s}},Ee=e=>{let t=e.map(s=>`${s.label} (${F(D(s.kind),s.kind)})`);return`${e.length===1?"One thing matches":`${e.length} things match`}: ${t.join("; ")}.`},Re=(e,t)=>{if(st.has(e))return Le();let s=t?pe(Y(e)||e):void 0,n=s?.one&&$(T(s.one))===$(Y(e)||e)?void 0:ie(e);if(n){let l=We(n);return{about:"place",say:t?`${l.said} ${ye(n)}`:l.said,moves:[l],subject:n.slug}}let r=pe(Y(e)||e);if(r.one){let l=De(r.one);return{about:t?"describe":"record",say:t?`${l.said} ${re(r.one)}`:l.said,moves:[l],subject:r.one.id}}if(r.picks.length>0)return{about:"picks",say:Ee(r.picks),moves:[],picks:r.picks};let h=de(e);if(h)return h;let d=Pe(e);if(d){if(d.rest.split(" ").every(l=>l===""||te.has(l))){let l=H(d.kind),v={to:"kind",kind:d.kind,title:l,address:oe(d.kind),said:`Went to the ${l.toLowerCase()}.`};return{about:"kind",say:v.said,moves:[v]}}return{unresolved:!0}}return xe()},ye=e=>{if(e.kind===null){let h=P.map(l=>({kind:l,count:w.nodesOfKind(l).length})).filter(l=>l.count>0).map(l=>`${l.count} ${(l.count===1?F(D(l.kind),l.kind):H(l.kind)).toLowerCase()}`),d=c.violations().length;return[h.length>0?`It holds ${he(h)}.`:"It holds nothing yet.",d>0?`${d===1?"One problem":`${d} problems`} to see to.`:""].filter(Boolean).join(" ")}let t=w.nodesOfKind(e.kind).length,s=H(e.kind).toLowerCase(),n=new Set(c.violations().flatMap(h=>h.nodeIds)),r=w.nodesOfKind(e.kind).filter(h=>n.has(h.id)).length;return[e.lens?`It draws the ${s} as ${Ae(e.lens)}${t>0?` \u2014 ${t} of them`:""}.`:`${t===0?"No":t} ${t===1?F(D(e.kind),e.kind):s} ${t===1?"is":"are"} here.`,r>0?`${r} ${r===1?"has":"have"} a problem.`:""].filter(Boolean).join(" ")},Le=()=>{let e=(p.selection??[]).map(s=>w.getNode(s)).find(s=>s!==void 0);if(e)return{about:"here",say:re(e),moves:[],subject:e.id};let t=N.find(s=>s.slug===p.place)??N.find(s=>s.slug==="home");return t?{about:"here",say:`${t.title}. ${ye(t)}`,moves:[],subject:t.slug}:{about:"here",say:ye({slug:"home",title:"Home",kind:null,cardinality:"many",address:"/",stop:"#"}),moves:[]}},Pe=e=>{let t=P.flatMap(s=>[H(s),F(D(s),s),s].map(n=>({kind:s,name:$(n)}))).filter(s=>s.name.length>0).sort((s,n)=>n.name.length-s.name.length);for(let{kind:s,name:n}of t)if(!(` ${e} `.indexOf(` ${n} `)<0))return{kind:s,rest:` ${e} `.replace(` ${n} `," ").replace(/\s+/g," ").trim()}},ae=(e,t)=>{let s=V(y,e).filters.filter(d=>d.about==="field"&&d.type==="date");if(s.length===0)return;let n=s.find(d=>t.some(l=>$(d.key)===l||$(d.label)===l));if(n)return n;let r=D(e)?.fieldRoles??{};for(let d of["due","deadline","date","when","start","end"]){let l=r[d],v=l?s.find(M=>M.key===l):void 0;if(v)return v}return s.find(d=>["due","deadline","date","when","on","at"].includes(d.key.toLowerCase()))??(s.length===1?s[0]:void 0)},Te=e=>{let t=D(e),s=V(y,e).filters;if(t?.lifecycle)return{conditions:[{key:"is",value:"current"}],holds:d=>fe(be,d,{key:"is",value:"current"})};let r=s.find(d=>d.about==="field"&&d.type==="boolean"&&ne.has($(d.key)));if(r)return{conditions:[{key:r.key,value:"false"}],holds:d=>d[r.key]!==!0};let h=s.find(d=>d.about==="field"&&d.type==="choice"&&(d.options??[]).some(l=>ne.has($(l))));if(h){let d=new Set((h.options??[]).filter(v=>ne.has($(v)))),l=(h.options??[]).filter(v=>!d.has(v));return l.length===1?{conditions:[{key:h.key,value:l[0]}],holds:v=>v[h.key]===l[0]}:"unsayable"}return{conditions:[],holds:()=>!0}},He=(e,t)=>{let s=e.words.startsWith("due")||$(t.key)==="due",n=Ot.test($(t.label));if(e.day)return s?`due ${e.day}`:n?`on ${e.day}`:`${t.label.toLowerCase()} on ${e.day}`;let r=e.words.replace(/^(?:due|for|on|by) (?:the )?/,"");return s?`due ${r}`:n?r:`${t.label.toLowerCase()} ${r}`},me=new Set(c.violations().flatMap(e=>e.nodeIds)),be={schema:y,graph:c.graph,flagged:me,today:k},de=e=>{let t=Oe(e,k,j),s=Pe(t?.rest??e),n=s?.kind,r=(s?.rest??t?.rest??e).split(" ").filter(Boolean);if(!n&&t){let g=e.split(" "),m=P.filter(L=>ae(L,g)!==void 0),R=m.filter(L=>{let b=ae(L,g);return g.some(O=>$(b.key)===O||$(b.label)===O)}),B=m.length===1?m:R;if(B.length!==1)return;n=B[0]}if(!n)return;let h=V(y,n).filters,d=[],l=[],v=[],M=[],q=!1,le=[];for(let g=0;g<r.length;g++){let m=r[g],R=g>0&&(r[g-1]==="not"||r[g-1]==="un"),B=h.find(b=>b.about==="field"&&b.type==="choice"&&(b.options??[]).some(O=>$(O)===m));if(B&&!R){let b=(B.options??[]).find(O=>$(O)===m);d.push({key:B.key,value:b}),l.push(b);continue}let L=h.find(b=>b.about==="field"&&b.type==="boolean"&&[$(b.key),$(b.label)].some(O=>O===m||O===m.replace(/^un/,"")));if(L){let b=!R&&!(m.startsWith("un")&&!$(L.key).startsWith("un"));d.push({key:L.key,value:String(b)}),l.push(b?m:`not ${m.replace(/^un/,"")}`);continue}if(Lt.has(m)&&!R){let b=Te(n);b==="unsayable"?(q=!0,M.push(O=>!lt(y,O))):(d.push(...b.conditions),M.push(b.holds)),l.push(m);continue}m==="not"||m==="un"||t&&h.some(b=>b.type==="date"&&($(b.key)===m||$(b.label)===m))||le.push(m)}if(r=le,r.some(g=>!te.has(g))||!t&&d.length===0&&M.length===0)return;let I=H(n).toLowerCase(),Q=H(n);if(t){let g=ae(n,e.split(" "));if(!g){let m={to:"kind",kind:n,title:Q,address:oe(n),said:`Went to the ${I}.`};return{about:"kind",say:`${ee(Q)} carry no date, so I can't tell which are ${/^(?:due|for|on|overdue|past due|late)\b/.test(t.ask.words)?t.ask.words:`due ${t.ask.words}`}. ${m.said}`,moves:[m]}}if(t.ask.from&&d.push({key:g.key,value:`after:${C(t.ask.from,-1)}`}),t.ask.to&&d.push({key:g.key,value:`before:${C(t.ask.to,1)}`}),t.ask.overdue){let m=Te(n);m==="unsayable"?(q=!0,M.push(R=>!lt(y,R))):(d.push(...m.conditions),M.push(m.holds))}t.ask.overdue?l.push("overdue"):v.push(He(t.ask,g))}let E=w.nodesOfKind(n).filter(g=>d.every(m=>fe(be,g,m))&&M.every(m=>m(g))),K=[...l,...v].join(" and "),J=[...l,I,...v].join(" "),W=E.slice(0,6).map(g=>({about:"node",id:g.id,kind:n,label:T(g),why:{field:d[0]?.key??"label",reading:d[0]?.key??"Name",fragment:K,strength:"field"},current:!0,flagged:me.has(g.id),address:ge(g)})),X=E.length===0?`No ${I} are ${K}.`:`${E.length===1?`One ${F(D(n),n)} is`:`${E.length} ${I} are`} ${K}: ${he(E.slice(0,6).map(T))}${E.length>6?`, and ${E.length-6} more`:""}.`;if(q)return{about:"kind",say:X,moves:[],picks:W,offer:{draft:J,label:"Show as a view"}};let Z=d.map(g=>`${g.key}:${g.value}`).join(","),we=`${oe(n)}?${new URLSearchParams({filter:Z}).toString()}`,_={to:"kind",kind:n,title:ee(J),filter:Z,address:we,said:`Went to the ${J}.`};return{about:"kind",say:`${_.said} ${X}`,moves:[_],picks:W}},Ie=e=>D(e)?.figure==="person"?!0:[e,F(D(e),e),H(e)].some(s=>$(s).split(" ").some(n=>Et.has(n))),gt=e=>{let t=[],s=n=>D(n)?.edges??{};for(let[n,r]of Object.entries(s(e)))for(let h of r.to??[])f.has(h)&&t.push({key:n,direction:"out",far:h,words:dt(`${r.description??""} ${n}`)});for(let n of P)for(let[r,h]of Object.entries(s(n)))(h.to??[]).includes(e)&&t.push({key:r,direction:"in",far:n,words:dt(`${h.inverse??""} ${r}`)});return t},pt=e=>{let t=e.match(/^(who|which|what)\b/)?.[1];if(!t)return;let s=Oe(e,k,j);if(!s||s.ask.overdue)return;let n=s.rest.split(" ").filter(Boolean),r=P.flatMap(a=>[H(a),F(D(a),a),a].map(A=>({kind:a,name:$(A)}))).filter(a=>a.name.length>0).sort((a,A)=>A.name.length-a.name.length),h=` ${n.join(" ")} `,d=[];for(let{kind:a,name:A}of r)h.includes(` ${A} `)&&(h=h.replace(` ${A} `," "),d.includes(a)||d.push(a));let l=h.match(/\b(?:is|are|was|were)\b|'s\b/)?.[0],v=h.replace(/'s\b/g," ").split(" ").filter(a=>a.length>0&&!te.has(a)&&!Ce.has(a)),M=t==="who"?d.find(Ie):d[0];if(!M&&t!=="who")return;let q=d.find(a=>a!==M),le=v.flatMap(a=>[je(a),...at.has(je(a))?[...at]:[]]),I=P.filter(a=>q?a===q:a!==M).flatMap(a=>{let A=ae(a,e.split(" "))??V(y,a).filters.find(x=>x.about==="field"&&x.type==="date");return A?gt(a).filter(x=>(M?x.far===M:Ie(x.far))&&x.far!==a).map(x=>({kind:a,field:A,relation:x,said:v.length===0||le.some(ve=>x.words.some(wt=>Rt(wt,ve)))})):[]}).filter(a=>a.said);if(I.length===0)return;let Q=I.filter(a=>n.some(A=>$(a.field.key)===A||$(a.field.label)===A)),E=I.length===1?I[0]:Q.length===1?Q[0]:void 0;if(!E)return;let{kind:K,field:J,relation:W}=E,X=[...s.ask.from?[{key:J.key,value:`after:${C(s.ask.from,-1)}`}]:[],...s.ask.to?[{key:J.key,value:`before:${C(s.ask.to,1)}`}]:[]],Z=w.nodesOfKind(K).filter(a=>X.every(A=>fe(be,a,A))),we=a=>(W.direction==="out"?c.graph.out(a.id,W.key):c.graph.in(a.id,W.key)).filter(A=>A.kind===W.far&&f.has(W.far)),_=[],g=[];for(let a of Z){let A=we(a);A.length===0&&g.push(a);for(let x of A)_.some(ve=>ve.id===x.id)||_.push(x)}let m=He(s.ask,J),R=s.ask.day?`On ${s.ask.day}`:ee(s.ask.words.replace(/^(?:due|for|on|by) (?:the )?/,"")),B=H(K).toLowerCase(),L=X.map(a=>`${a.key}:${a.value}`).join(","),b=`${B} ${m}`,O={to:"kind",kind:K,title:ee(b),filter:L,address:`${oe(K)}?${new URLSearchParams({filter:L}).toString()}`,said:`Went to the ${b}.`};if(Z.length===0)return{about:"related",say:`No ${b}. ${O.said}`,moves:[O]};let ce=v.join(" "),yt=l==="was"||l==="were",Ge=a=>yt?a===1?"was":"were":a===1?"is":"are",ue=_.map(T),mt=ue.length>8?[...ue.slice(0,8),`${ue.length-8} more`]:ue,bt=_.length===0?`${R}: nobody ${Ge(1)}${ce?` ${ce}`:""}.`:`${R}: ${he(mt)}${ce?` ${Ge(_.length)} ${ce}`:""}.`,kt=t==="who"&&g.length>0?`${he(g.slice(0,4).map(T))}${g.length>4?` and ${g.length-4} more`:""} ${g.length===1?"has":"have"} nobody.`:"",$t=_.slice(0,8).map(a=>({about:"node",id:a.id,kind:a.kind,label:T(a),why:{field:W.key,reading:Je(y,W.direction==="out"?K:W.far,W.key,W.direction==="out"?"out":"in"),fragment:m,strength:"field"},current:!0,flagged:me.has(a.id),address:ge(a)}));return{about:"related",say:[bt,kt,O.said].filter(Boolean).join(" "),moves:[O],picks:$t}},Ke=S.match(Ct);if(Ke){let e=Ke[1];if(e&&!st.has(e)&&!/^(?:it|this|that)$/.test(e)){let n=ie(e),r=n?void 0:pe(Y(e)||e);if(r?.one){let h=De(r.one);return{about:"describe",say:`${h.said} ${re(r.one)}`,moves:[h],subject:r.one.id}}if(!n)return r&&r.picks.length>0?{about:"picks",say:Ee(r.picks),moves:[],picks:r.picks}:xe()}if(e&&/^(?:it|this|that)$|^(?:here|this place|this page)$/.test(e)){let n=(p.selection??[]).map(r=>w.getNode(r)).find(r=>r!==void 0);if(n)return{about:"describe",say:re(n),moves:[],subject:n.id}}let t=c.violations();if(t.length===0)return{about:"problems",say:"Nothing is wrong \u2014 every rule holds.",moves:[]};let s={to:"problems",address:"/problems",said:"Went to the problems."};return{about:"problems",say:`${s.said} ${Qe(t)}: ${t.slice(0,4).map(n=>n.message).join("; ")}${t.length>4?"\u2026":"."}`,moves:[s]}}if(Nt.test(S))return Le();let _e=pt(S);if(_e)return _e;let ke=Oe(S,k,j);if(ke&&!ie(Y(ke.ask.words))&&ke.rest.replace(/'s\b/g,"").split(" ").every(e=>e===""||te.has(e)||Ce.has(e))){let e=de(S);if(e)return e}if(/^open /.test(S)){let e=de(S);if(e)return e}let Fe=S.match(At)??S.match(/^(?:go|take me|head|get me)(?: back)? (home)$/);if(Fe)return Re(Fe[1].trim(),!1);let Ue=S.match(St);if(Ue){let e=Re(Ue[1].trim(),!0);return"unresolved"in e&&e.unresolved&&!/^tell me|^describe/.test(S)?{unresolved:!0}:e}let $e=ie(S);if($e){let e=We($e);return{about:"place",say:e.said,moves:[e],subject:$e.slug}}let Be=de(S);return Be||{unresolved:!0}}var Ce=new Set(["who","whom","whose","which","what","whats","what's","who's"]),Et=new Set(["person","people","user","users","member","members","volunteer","volunteers","gardener","gardeners","player","players","staff","worker","workers","employee","employees","owner","owners","assignee","assignees","helper","helpers","student","students","teacher","teachers","customer","customers","client","clients","contact","contacts","author","authors"]),at=new Set(["work","cover","staff","assign","do","run","schedul","roster","book","duty","serv","help"]);function je(o){let i=o.toLowerCase().replace(/'s$/,"");for(let p of["ing","ed","es","s"])if(i.length>p.length+2&&i.endsWith(p)){let u=i.slice(0,-p.length);return u.length>3&&u[u.length-1]===u[u.length-2]?u.slice(0,-1):u}return i}function dt(o){return o.toLowerCase().split(/[^a-z']+/).filter(i=>i.length>1&&!te.has(i)&&!Ce.has(i)&&!["it","they","them","their","its","this","here","to","at"].includes(i)).map(je)}var Rt=(o,i)=>o===i||o.length>=4&&i.length>=4&&(o.startsWith(i)||i.startsWith(o)),ne=new Set(["done","finished","complete","completed","closed","resolved","agreed","canceled","archived","shipped","delivered"]),Lt=new Set(["open","unfinished","outstanding","pending","remaining","undone","incomplete"]);function lt(o,i){return V(o,i.kind).filters.some(u=>u.about==="field"&&(u.type==="boolean"&&ne.has(u.key.toLowerCase())&&i[u.key]===!0||u.type==="choice"&&typeof i[u.key]=="string"&&ne.has(String(i[u.key]).toLowerCase())))}function he(o){return o.length<=1?o[0]??"":`${o.slice(0,-1).join(", ")} and ${o[o.length-1]}`}function _t(o,i,p={}){let u=p.scene!==void 0?{...p.pages,scene:p.scene}:p.pages;return[...et(o,i,u?{pages:u}:{})].map(({first:c,hidden:y,lens:k,...j})=>j)}function ht(o,i){return{...o.principal?{principal:o.principal}:{},...o.places?{places:o.places}:{},...o.selection?{selection:o.selection}:{},...o.place?{place:o.place}:{},...i??o.today?{today:i??o.today}:{},...o.weekStartsOn!==void 0?{weekStartsOn:o.weekStartsOn}:{}}}function Ft(o,i,p,u){let c=ft(o,i,ht(p,u));if(c.unresolved)return c.say?{reply:{say:c.say,proposals:[],grounded:!0}}:{};if(c.about==="picks")return{};let y=c.moves.length>0?{moves:c.moves}:{},k=c.subject?o.graph.getNode(c.subject):void 0;if(c.about==="problems")return{...y,problems:!0};if(k&&(c.about==="describe"||c.about==="here"))return{...y,told:k.id};let j=k?tt(o,nt(Ve(o.violations(),[k.id])).slice(0,3)):[];return{reply:{say:c.say,proposals:j,grounded:!0,...y,...c.picks&&c.picks.length>0?{picks:c.picks}:{},...c.offer?{offer:c.offer}:{}}}}function Ut(o,i,p={}){let u=ht(p),c=[];for(let y of i){let k=typeof y=="string"?y:typeof y=="object"&&y!==null&&typeof y.to=="string"?y.to:void 0;if(!k||k.trim().length===0)continue;let j=ft(o,/^(?:go|take me|open|show)\b/i.test(k.trim())?k:`go to ${k}`,u);if("moves"in j)for(let z of j.moves)c.some(U=>U.address===z.address)||c.push(z)}return c}export{vt as NOTHING_BY_THAT_NAME,ht as askContextOf,Ft as goingFrom,Ut as movesFromNames,_t as placesFromViews,ft as resolveAsk};
@@ -1 +0,0 @@
1
- import{j as n}from"./chunk.KAKX5TZN.js";import"./chunk.VFICMX5G.js";import"./chunk.XDHBV5K5.js";import"./chunk.WVUJXDXZ.js";import{e as p}from"./chunk.UMMN5Z6V.js";import"./chunk.DG2WKNMX.js";import"./chunk.HPD3DSTP.js";import"./chunk.VD6FJ6KJ.js";import"./chunk.OHGJ5BZ4.js";import"./chunk.5BN2ARQ2.js";import"./chunk.4W24TPMR.js";import"./chunk.AHDOKM4O.js";import"./chunk.6R4EI47C.js";import"./chunk.PHY3AH3L.js";import"./chunk.QZWN46V6.js";import"./chunk.6LJ66MB7.js";import"./chunk.OYULDOQP.js";import"./chunk.VMEX2KZ4.js";import{b as m}from"./chunk.MRK6QJV5.js";import{b as t}from"./chunk.AJZBJBMO.js";var i=t(m(),1),a=new WeakMap;function l(o){let e=a.get(o);if(!e){let r=p(o);e=c=>c.mode==="fullscreen"?(0,i.jsx)(n,{blocks:r,slot:"home",heading:2,firstHeading:1}):(0,i.jsx)(n,{blocks:r,slot:"home",heading:3,firstHeading:2}),a.set(o,e)}return e}export{l as homeView};
@@ -1 +0,0 @@
1
- import{Ba as j,P as E,R as N,S as z,U as V,V as Q,X as K,Y as U,Z as W,_ as F,xa as X,ya as x}from"./chunk.VMEX2KZ4.js";function Y(){return{name:"insight",derive({store:n,nodes:s,kindSelection:i}){let l=[],k=d=>E(n.schema.tryDefinition(d.kind),d);for(let d of s){if([...n.schema.edgeKinds].reduce((y,e)=>y+n.graph.out(d.id,e).length+n.graph.in(d.id,e).length,0)===0){l.push({id:`insight:island:${d.id}`,text:`${k(d)} is connected to nothing yet`,nodeIds:[d.id]});continue}for(let y of n.schema.edgeKinds){let e=n.graph.in(d.id,y).length;if(e<3)continue;let t=[...n.graph.allEdges()].filter(o=>o.kind===y),f=t.length;f>=4&&e/f>.6&&l.push({id:`insight:load:${d.id}:${y}`,text:`${k(d)} ${cn(n,t,y,e)}`,nodeIds:[d.id]})}}for(let d of i){if(n.graph.nodesOfKind(d).length>0)continue;let w=n.schema.definitions.filter(y=>y.kind!==d).filter(y=>Object.values(y.edges).some(e=>e.to!=="*"&&e.to.includes(d))).map(y=>y.plural??`${y.kind}s`);w.length>0&&l.push({id:`insight:gap:${d}`,text:`Nothing here yet, though ${w.join(" and ")} expect to connect to these`,nodeIds:[]})}return{observations:l}}}}function cn(n,s,i,l){let k=new Set(s.map(t=>n.graph.getNode(t.from)?.kind).filter(t=>t!==void 0)),d=k.size===1?[...k][0]:void 0,w=s.length,y=K(n.schema,d??[...k][0]??"",i,"in"),e=t=>d?V(n.schema,d,t):String(t);return l===w?`${y}: all ${e(l)}`:`${y}: ${l} of the ${e(w)}`}function nn(n){let s=new Map;if(n.length===0)return s;let i=n.slice(-512),l=new Set;for(let d of i)d.undoes&&l.add(d.undoes);let k=n[n.length-1].seq;for(let d of i){if(!d.mutation||l.has(d.id))continue;let w=Math.pow(.5,(k-d.seq)/64);s.set(d.mutation.name,(s.get(d.mutation.name)??0)+w)}return s}function en(n){return 8*(n/(n+1))}var un=100;function tn(){return{name:"invariant",derive({store:n,selection:s,nodes:i,violations:l}){let k=t=>E(n.schema.tryDefinition(t.kind),t),d=new Set(s),w=l.filter(t=>t.nodeIds.some(f=>d.has(f))||t.subjectId!==void 0&&d.has(t.subjectId)),y=[],e=[];w.forEach((t,f)=>{e.push({id:`violation:${t.invariant}:${f}`,text:t.message,nodeIds:t.nodeIds}),t.repairs.forEach((o,g)=>{y.push({id:`invariant:${t.invariant}:${f}:${g}`,label:o.label,provider:"invariant",mutation:o.mutation,args:o.args??{},open:(o.missing??[]).map(a=>{let c=n.allMutations().find(u=>u.name===o.mutation);if(!c)return{name:a};let m=x(c.input).find(u=>u.name===a),v=m?m.kinds.includes("*")?n.graph.allNodes().map(u=>u.id):m.kinds.flatMap(u=>n.graph.nodesOfKind(u).map(p=>p.id)):void 0;return{name:a,shape:j(c.input,a),...m?{kinds:m.kinds}:{},...v?{candidates:v}:{}}}),score:un-g-(o.missing?.length??0),why:t.message,nodeIds:t.nodeIds,...t.subjectId===void 0?{}:{subjectId:t.subjectId}})})});for(let t of i){let f=n.allInvariants().filter(o=>{if(o.scope==="graph")return!1;let g=o.scope;return g.kind!==t.kind?!1:g.match?g.match(t):!0});f.length!==0&&(w.some(o=>o.subjectId===t.id||o.nodeIds.includes(t.id))||e.push({id:`holds:${t.id}`,text:`${k(t)} holds \u2014 nothing currently breaks ${f.length===1?"it":`any of its ${f.length} rules`}`,nodeIds:[t.id]}))}return{affordances:y,observations:e}}}}var B=40;function sn(){return{name:"schema",derive({store:n,selection:s,nodes:i,kindSelection:l,edgeSelection:k}){let d=[];if(i.length===0&&k.length>0){for(let e of k){let t=n.graph.getNode(e.from),f=n.graph.getNode(e.to);if(!(!t||!f))for(let o of n.allMutations()){let g=(o.connects??[]).includes(e.kind),a=(o.severs??[]).includes(e.kind);if(!g&&!a)continue;let c={},m=[],v=x(o.input);for(let p of v){let S=p.kinds.includes("*")||p.kinds.includes(t.kind),A=p.kinds.includes("*")||p.kinds.includes(f.kind),$=S&&!v.some(h=>h!==p&&(h.kinds.includes(t.kind)||h.kinds.includes("*")));S&&!A?c[p.name]=e.from:A&&!S?c[p.name]=e.to:S&&A&&$?c[p.name]=e.from:m.push({name:p.name,kinds:p.kinds,candidates:[e.from,e.to],shape:j(o.input,p.name)})}for(let p of _(o.input,""))p in c||m.some(S=>S.name===p)||m.push({name:p,shape:j(o.input,p)});m.every(p=>p.optional===!0?!0:p.kinds!==void 0?(p.candidates?.length??0)>0:(p.candidates?.length??0)>0||p.shape!==void 0&&p.shape.type!=="unknown")&&(g&&!a&&m.length===0||d.push({id:`schema:edge:${o.name}:${e.kind}:${e.from}:${e.to}`,label:N(o),provider:"schema",mutation:o.name,args:c,open:m,...o.destructive?{destructive:!0}:{},score:(a?62:58)-m.length,why:`this line is "${K(n.schema,n.graph.getNode(e.from)?.kind??"",e.kind,"out")}"`,nodeIds:[e.from,e.to]}))}}return{affordances:d}}if(i.length===0&&l.length>0){let e=new Set(l),t=[];for(let f of n.allMutations()){if(!(f.creates??[]).some(a=>e.has(a)))continue;let o=[];for(let a of x(f.input)){let c=a.kinds.includes("*")?n.graph.allNodes().map(m=>m.id):a.kinds.flatMap(m=>n.graph.nodesOfKind(m).map(v=>v.id));o.push({name:a.name,kinds:a.kinds,candidates:c,shape:j(f.input,a.name),...a.optional?{optional:!0}:{}})}for(let a of _(f.input,""))o.some(c=>c.name===a)||o.push({name:a,shape:j(f.input,a)});if(!o.every(a=>a.optional===!0?!0:a.kinds!==void 0?(a.candidates?.length??0)>0:(a.candidates?.length??0)>0||a.shape!==void 0&&a.shape.type!=="unknown")){let a=o.filter(c=>c.optional!==!0&&c.kinds!==void 0&&!c.kinds.includes("*")&&(c.candidates?.length??0)===0);if(a.length>0){let c=[...new Set(a.flatMap(m=>m.kinds??[]))].map(m=>W(F(n.schema.tryDefinition(m),m)));t.push({id:`schema:waits:${f.name}`,text:`"${f.title??f.name}" cannot begin until there is ${c.length===1?c[0]:`${c.slice(0,-1).join(", ")} and ${c[c.length-1]}`}.`,nodeIds:[]})}continue}d.push({id:`schema:add:${f.name}`,label:N(f),provider:"schema",mutation:f.name,args:{},open:o,score:B-o.length,why:`this makes ${(f.creates??[]).filter(a=>e.has(a)).map(a=>W(F(n.schema.tryDefinition(a),a))).join(", ")}`,nodeIds:[]})}return{affordances:d,observations:t}}if(i.length===0)return{};let w=new Set(i.map(e=>e.kind)),y=(e,t,f)=>{let o=[];for(let g of n.graph.allEdges()){if(!t.includes(g.kind))continue;let a=g.from===e?g.to:g.to===e?g.from:null;if(!a)continue;let c=n.graph.getNode(a);c&&(!f.includes("*")&&!f.includes(c.kind)||o.includes(a)||o.push(a))}return o};for(let e of n.allMutations()){let t=e.subject;if(!t||!(t.kinds==="*"?!0:[...w].every(u=>t.kinds.includes(u))))continue;let o=i.length===1?i[0].id:null,g=e.severs??[],a=e.connects??[];if(o&&g.length>0&&a.length===0&&y(o,g,["*"]).length===0)continue;let c=[];for(let u of x(e.input)){if(u.name===t.arg)continue;let p=u.kinds.includes("*")?n.graph.allNodes().map(S=>S.id):u.kinds.flatMap(S=>n.graph.nodesOfKind(S).map(A=>A.id));if(o&&a.length>0){let S=new Set(y(o,a,u.kinds));p=p.filter(A=>!S.has(A))}else o&&g.length>0&&(p=y(o,g,u.kinds));c.push({name:u.name,kinds:u.kinds,candidates:p.filter(S=>!s.includes(S)),shape:j(e.input,u.name),...u.optional?{optional:!0}:{}})}for(let u of _(e.input,t.arg))c.some(p=>p.name===u)||c.push({name:u,shape:j(e.input,u)});if(c.length===0&&o){let u=fn(e.input,t.arg);if(u.length>0&&!ln(n,e.name,{[t.arg]:o}))for(let p of u){let S=x(e.input).find(A=>A.name===p);c.push({name:p,optional:!0,...S?{kinds:S.kinds}:{},shape:j(e.input,p)})}}if(!c.every(u=>u.optional===!0?!0:u.kinds!==void 0?(u.candidates?.length??0)>0:(u.candidates?.length??0)>0||u.shape!==void 0&&u.shape.type!=="unknown"))continue;let v=i.map(u=>({[t.arg]:u.id}));c.length===0&&!v.some(u=>n.wouldChange({name:e.name,args:u}))||d.push({id:`schema:${e.name}`,label:i.length>1?`${N(e)} (${i.length})`:N(e),provider:"schema",mutation:e.name,args:v[0]??{},open:c,...e.destructive?{destructive:!0}:{},...g.length>0||a.length>0?{ties:!0}:{},...i.length>1?{batch:v}:{},score:B-c.length,why:i.length>1?`all ${i.length} selected nodes are ${[...w].map(u=>Q(n.schema,u).toLowerCase()).join(" or ")}`:`this is ${W(F(n.schema.tryDefinition(i[0].kind),i[0].kind))}`,nodeIds:i.map(u=>u.id)})}if(i.length===1){let e=i[0];for(let t of n.allMutations()){let f=t.subject,o=t.severs??[],g=t.connects??[];if(!f||o.length===0&&g.length===0)continue;let a=f.kinds==="*"?"*":f.kinds;if(a==="*"||a.includes(e.kind))continue;let c=x(t.input),m=c.find(h=>h.name!==f.arg&&(h.kinds.includes("*")||h.kinds.includes(e.kind)));if(!m)continue;let v=a,u=v.includes("*")?n.graph.allNodes().map(h=>h.id):v.flatMap(h=>n.graph.nodesOfKind(h).map(O=>O.id)),p=new Set(y(e.id,g.length>0?g:o,v)),S=g.length>0?u.filter(h=>!p.has(h)):u.filter(h=>p.has(h));if(S.length===0)continue;let A=[{name:f.arg,kinds:v,candidates:S,shape:j(t.input,f.arg)}];for(let h of c){if(h.name===m.name||h.name===f.arg)continue;let O=h.kinds.includes("*")?n.graph.allNodes().map(I=>I.id):h.kinds.flatMap(I=>n.graph.nodesOfKind(I).map(R=>R.id));A.push({name:h.name,kinds:h.kinds,candidates:O,shape:j(t.input,h.name),...h.optional?{optional:!0}:{}})}for(let h of _(t.input,m.name))h===f.arg||A.some(O=>O.name===h)||A.push({name:h,shape:j(t.input,h)});A.every(h=>h.optional===!0?!0:h.kinds!==void 0?(h.candidates?.length??0)>0:(h.candidates?.length??0)>0||h.shape!==void 0&&h.shape.type!=="unknown")&&d.push({id:`schema:tie:${t.name}:${e.id}`,label:t.fromTheOtherEnd??N(t),provider:"schema",mutation:t.name,args:{[m.name]:e.id},open:A,ties:!0,...t.destructive?{destructive:!0}:{},score:B-A.length+2,why:`${o.length>0?"this one is on":"this one could join"} ${A[0].candidates.length===1?"it":"one of these"}`,nodeIds:[e.id]})}}return{affordances:d}}}}function fn(n,s){let i=n.shape;return i?Object.entries(i).filter(([l,k])=>l!==s&&k.safeParse(void 0).success).map(([l])=>l):[]}function ln(n,s,i){try{return n.preview({name:s,args:i}),!0}catch{return!1}}function _(n,s){let i=n.shape;return i?Object.entries(i).filter(([l,k])=>l!==s&&!k.safeParse(void 0).success).map(([l])=>l):[]}var hn=70,gn=80,pn=new Set(["id","kind"]);function on(){return{name:"structure",derive({store:n,nodes:s}){let i=e=>E(n.schema.tryDefinition(e.kind),e);if(s.length<2)return{};let l=[],k=[],d=s.map(e=>e.id);for(let e of n.schema.edgeKinds){let t=mn(s.map(o=>new Set([...n.graph.out(o.id,e).map(g=>g.id),...n.graph.in(o.id,e).map(g=>g.id)])));for(let o of t){let g=n.graph.getNode(o);g&&l.push({id:`shared:${e}:${o}`,text:`all ${s.length} share "${i(g)}" (${z(e).toLowerCase()})`,nodeIds:[...d,o]})}let f=new Map;for(let o of s)for(let g of[...n.graph.out(o.id,e),...n.graph.in(o.id,e)])f.set(g.id,(f.get(g.id)??0)+1);for(let[o,g]of f){if(g!==s.length-1||s.length<3)continue;let a=n.graph.getNode(o);if(!a)continue;let c=s.find(m=>![...n.graph.out(m.id,e),...n.graph.in(m.id,e)].some(v=>v.id===o));if(c){l.push({id:`near-shared:${e}:${o}`,text:`all but "${i(c)}" share "${i(a)}" (${z(e).toLowerCase()})`,nodeIds:[...d,o]});for(let m of n.allMutations()){let v=m.subject;if(!v||v.kinds!=="*"&&!v.kinds.includes(c.kind))continue;let u=kn(m.input,a.kind);u&&k.push({id:`structure:join:${m.name}:${c.id}:${o}`,label:`${N(m)}: bring "${i(c)}" in line with the others`,provider:"structure",mutation:m.name,args:{[v.arg]:c.id,[u]:o},open:[],score:hn,why:`every other selected node is connected to "${i(a)}"`,nodeIds:[c.id,o]})}}}}let w=new Set;for(let e of s)for(let t of Object.keys(e))pn.has(t)||w.add(t);let y=e=>n.schema.definitions.find(t=>t.kind===e);for(let e of[...w].sort()){let t=y(s[0].kind),f=U(t,e).toLowerCase(),o=t?.display?.format?.[e],g=$=>{if(!o)return $;try{return String(o(JSON.parse($)))}catch{return $}},a=s.map($=>$[e]),c=new Map;if(a.forEach(($,h)=>{let O=JSON.stringify($??null),I=c.get(O);I?I.push(s[h]):c.set(O,[s[h]])}),c.size===1){let $=[...c.keys()][0];if($==="null")continue;l.push({id:`agree:${e}`,text:`all ${s.length} share the ${f} ${g($)}`,nodeIds:d});continue}if(s.length<3||c.size!==2)continue;let m=[...c.entries()].sort(($,h)=>h[1].length-$[1].length),[v,u]=m[0],[,p]=m[1];if(p.length!==1||v==="null")continue;let S=p[0],A=JSON.parse(v);l.push({id:`odd-one-out:${e}`,text:`${u.length} share the ${f} ${g(v)}; "${i(S)}" does not`,nodeIds:d});for(let $ of n.allMutations()){let h=$.subject;if(!h||h.kinds!=="*"&&!h.kinds.includes(S.kind))continue;let O=rn($.input);if(!O||!(e in O))continue;let I={[h.arg]:S.id,[e]:A},R=!0;for(let[M,J]of Object.entries(O)){if(M in I||J.safeParse(void 0).success)continue;let D=S[M];if(D===void 0){R=!1;break}I[M]=D}R&&k.push({id:`structure:align:${$.name}:${e}:${S.id}`,label:`Align the ${f} of "${i(S)}" with the other ${u.length}`,provider:"structure",mutation:$.name,args:I,open:[],score:gn,why:`${u.length} of ${s.length} share the ${f} ${g(v)}`,nodeIds:d})}}return{affordances:k,observations:l}}}}function mn(n){if(n.length===0)return[];let[s,...i]=n;return[...s].filter(l=>i.every(k=>k.has(l))).sort()}function rn(n){return n.shape??null}function kn(n,s){let i=rn(n);if(!i)return null;for(let[l]of Object.entries(i)){let k=X(i[l]);if(k&&(k.includes("*")||k.includes(s)))return l}return null}function yn(){return[tn(),on(),sn(),Y()]}function Kn(n,s,i={}){let l=an(),k=i.providers??yn(),d=s.map(r=>n.graph.getNode(r)).filter(r=>r!==void 0),w={store:n,selection:s,nodes:d,kindSelection:i.kindSelection??[],edgeSelection:i.edgeSelection??[],violations:n.violations(i.context),context:i.context??{}},y=[],e=[];for(let r of k){let b=r.derive(w);y.push(...b.affordances??[]),e.push(...b.observations??[])}let t=new Set(n.allMutations().filter(r=>r.pinned).map(r=>r.name)),f=new Set(i.pins?.pinned??[]),o=new Set(i.pins?.unpinned??[]),g=r=>f.has(r.mutation)?"user":t.has(r.mutation)&&!o.has(r.mutation)?"declared":void 0,a=r=>{let b=g(r);return b?{...r,pinned:b}:r},c=new Map;for(let[r,b]of nn(n.log.all()))c.set(r,en(b));let m=r=>r.pinned==="user"?0:r.pinned==="declared"?1:2,v=r=>r.score+(c.get(r.mutation)??0),u=new Map(n.allMutations().map(r=>[r.name,r])),p=new Map,S=r=>{let b=u.get(r.mutation);if(!b)return[];let P=p.get(r.mutation);P||(P=x(b.input).map(T=>T.name),p.set(r.mutation,P));let C=[];for(let T of r.batch??[r.args])for(let H of P){let Z=T[H]??r.args[H];typeof Z=="string"&&C.push(Z)}return C},A=i.focus,$=4,h=r=>r.open.length>0?1:0,O=r=>{if(A===void 0)return $;let b=S(r);return b.length>0?b.includes(A)?I(r,0):$:r.nodeIds.includes(A)||r.subjectId===A?I(r,1):$},I=(r,b)=>r.provider==="invariant"?b:2+h(r),R=bn(y).map(a),M=new Map(R.map((r,b)=>[r,b])),J=R.sort((r,b)=>{let P=Number(r.destructive??!1)-Number(b.destructive??!1);if(P!==0)return P;let C=O(r)-O(b);return C!==0?C:O(r)<2?M.get(r)-M.get(b):+(b.provider==="invariant")-+(r.provider==="invariant")||m(r)-m(b)||v(b)-v(r)||r.id.localeCompare(b.id)}),D=i.principal??{kind:"human"},L=[],G=[];for(let r of J){let b=n.permits({name:r.mutation,args:{...r.args,...r.batch?.[0]??{}}},D);if(b.ok)L.push(r);else{let P=Sn(n,r,D);if(P==="done")continue;P?L.push(P):G.push({...r,refusal:b.refusal})}}let q=L.map((r,b)=>({...r,rank:b})),dn=G.map((r,b)=>({...r,rank:L.length+b}));return{affordances:i.limit===void 0?q:q.slice(0,i.limit),withheld:dn,observations:vn(e),ms:an()-l}}function bn(n){let s=new Map;for(let i of n){let l=[i.mutation,JSON.stringify(i.args),JSON.stringify(i.batch??null)].join("|"),k=s.get(l);(!k||i.score>k.score)&&s.set(l,i)}return[...s.values()]}function vn(n){let s=new Map;for(let i of n)s.set(i.text,i);return[...s.values()]}function an(){return typeof performance<"u"?performance.now():Date.now()}function Wn(n,s,i={},l={}){let k=(s.batch??[s.args]).map(w=>({name:s.mutation,args:{...s.args,...w,...i}})),d=n.allMutations().find(w=>w.name===s.mutation);return n.applyAll(k,{...d?.describe?{}:{intent:s.label},...l.author?{author:l.author}:{}})}function Fn(n,s,i={}){return n.preview({name:s.mutation,args:{...s.args,...i}})}function Sn(n,s,i){let l=n.allMutations().find(t=>t.name===s.mutation)?.subject,k=l!==void 0&&s.args[l.arg]===void 0,d=k?s.open.find(t=>t.name===l.arg):s.open.find(t=>t.name!==l?.arg&&t.candidates);if(!d?.candidates)return;let w=t=>n.permits({name:s.mutation,args:{...s.args,...s.batch?.[0]??{},[d.name]:t}},i).ok,y=d.candidates.filter(w),e=i.id===void 0?void 0:n.graph.getNode(i.id);if(y.length===0){let t=k?l.kinds:"*";return e!==void 0&&(t==="*"||t.includes(e.kind))&&w(e.id)?"done":void 0}return y.length===1&&y[0]===i.id?{...s,args:{...s.args,[d.name]:i.id},open:s.open.filter(t=>t!==d)}:{...s,open:s.open.map(t=>t===d?{...t,candidates:y}:t)}}export{Kn as a,Wn as b,Fn as c};
@@ -1 +0,0 @@
1
- import{c as a,l as o}from"./chunk.KAKX5TZN.js";import"./chunk.VFICMX5G.js";import"./chunk.XDHBV5K5.js";import"./chunk.WVUJXDXZ.js";import"./chunk.UMMN5Z6V.js";import"./chunk.DG2WKNMX.js";import"./chunk.HPD3DSTP.js";import"./chunk.VD6FJ6KJ.js";import"./chunk.OHGJ5BZ4.js";import"./chunk.5BN2ARQ2.js";import"./chunk.4W24TPMR.js";import"./chunk.AHDOKM4O.js";import"./chunk.6R4EI47C.js";import"./chunk.PHY3AH3L.js";import"./chunk.QZWN46V6.js";import"./chunk.6LJ66MB7.js";import{ma as n}from"./chunk.OYULDOQP.js";import"./chunk.VMEX2KZ4.js";import"./chunk.MRK6QJV5.js";import"./chunk.AJZBJBMO.js";var w=new WeakMap;function p(e,i){let t=w.get(e);t||w.set(e,t=new Map);let r=t.get(i);return r||t.set(i,r=o(a(e,n(e)),e,i)),r}export{p as frameworkViews};
@@ -1 +0,0 @@
1
- import{b as _e,c as ae,d as We,e as ne,g as he,h as He,m as Je,o as te}from"./chunk.OHGJ5BZ4.js";import{A as Me,Ab as Ze,D as me,E as Pe,L as ge,M as Te,S as Ne,Z as Fe,a as Oe,b as Re,c as xe,d as ee,da as Ce,db as Le,ea as Ve,f as pe,h as B,ha as ye,i as Ae,ia as Ie,j as je,k as se,l as Se,m as Ee,o as ze,p as De,pb as qe,q as fe,ra as Z,v as Ge,wa as Ke,x as ue,y as $e,zb as Be}from"./chunk.VMEX2KZ4.js";function un(n,l){let e=n.brand??{},o=e.accent?Ze(e.accent):void 0;o&&!o.ok&&l.push(He("brand","brand.accent",`that accent cannot make a readable brand, so the app keeps Graview's colors: ${o.why}`,"pick a color further from orange-red, or a darker one"));let g=typeof e.logo=="string"?{src:e.logo}:e.logo,c=e.name??n.name,O=e.typography?Object.fromEntries(Object.entries(e.typography).filter(([,A])=>typeof A=="string"&&!/url\(|@import|[;{}<>\\]/i.test(A)).map(([A,N])=>[A,Be(N)])):void 0;return{name:c,schemes:o?.ok?o.schemes:qe,...e.currency?{currency:e.currency}:{},...e.locale?{locale:e.locale}:{},...g?{logo:g.src,logoAlt:g.alt??c}:{},...e.favicon?{favicon:e.favicon}:{},...n.description?{subtitle:n.description}:{},...O?{typography:O}:{},...e.shape?{shape:e.shape}:{},...e.accents?{accents:e.accents}:{},...e.scheme?{scheme:e.scheme}:{}}}function Ue(n){let{currency:l,locale:e}=n.brand??{};return{...l?{currency:l}:{},...e?{locale:e}:{}}}var tn=new WeakMap;function Ye(n,l){tn.set(n,l)}var rn=[{where:"settings[]",was:"honoured",now:"honored",since:"0.1.16"},{where:"pages",was:"overview",now:"scene",since:"0.1.17"}],T=n=>typeof n=="object"&&n!==null&&!Array.isArray(n);function Qe(n,l=rn){if(!T(n))return{document:n,respelled:[]};let e=[],o=n;for(let g of l)o=we(o,g.where.split("."),g,"",e);return{document:o,respelled:e}}function we(n,l,e,o,g){if(l.length===0){if(!T(n)||!Object.hasOwn(n,e.was))return n;g.push(`${o}${e.was}`);let{[e.was]:V,...$}=n;return Object.hasOwn(n,e.now)?$:{...$,[e.now]:V}}if(!T(n))return n;let[c,...O]=l,A=c.endsWith("[]"),N=A?c.slice(0,-2):c,z=n[N],D=z;if(!A)D=we(z,O,e,`${o}${N}.`,g);else if(Array.isArray(z)){let V=z.map(($,W)=>we($,O,e,`${o}${N}.${W}.`,g));D=V.some(($,W)=>$!==z[W])?V:z}return D===z?n:{...n,[N]:D}}var Xe="graview-compiled@1",_="id",de=n=>typeof n=="string"&&/^\$[A-Za-z][A-Za-z0-9]*$/.test(n)?n.slice(1):void 0;function on(n){let l=Object.entries(n.fields);return l.find(([,e])=>e.required&&(e.type==="string"||e.type==="text"))?.[0]??l.find(([,e])=>e.type==="string")?.[0]}function en(n,l){let e;switch(n.type){case"string":e=B().check(ee(500));break;case"text":e=B().check(ee(2e4));break;case"number":case"integer":{let o=[...n.type==="integer"?[Se()]:[],...n.min===void 0?[]:[Re(n.min)],...n.max===void 0?[]:[Oe(n.max)],...n.step===void 0?[]:[xe(n.step)]];e=o.length>0?se().check(...o):se();break}case"boolean":e=Ee();break;case"date":e=B().check(pe(me,"a date like 2026-10-02"));break;case"datetime":e=B().check($e(o=>!Number.isNaN(Date.parse(o)),"a date and time like 2026-10-02T14:30:00Z"));break;case"enum":e=Ge(n.options);break;case"list":e=De(n.of==="number"?se():n.of==="date"?B().check(pe(me)):n.of==="image"||n.of==="file"?ge(n.of):B().check(ee(500))).check(ee(200));break;case"image":case"file":e=ge(n.type);break;case"url":e=je();break;case"email":e=Ae();break}return n.description&&(e=e.check(Me(n.description))),l?ue(e):e}var re=n=>{throw new Z(`there is no record "${n}"`,"invalid")},sn=n=>"field"in n?en(n.field,n.optional):"ref"in n?Ke(n.ref):ue(ze()),an=new WeakMap;var ke=(n,l)=>T(l)&&Object.keys(n??{}).length===Object.keys(l).length&&Object.keys(n??{}).every(e=>Object.hasOwn(l,e));function zn(n,l={}){let e=T(n)?n.format:void 0;if(e!==Xe)return{ok:!1,findings:[he("compiled-format","format",e===void 0?"this is not a compiled Graview app":`this compiled app is ${JSON.stringify(e)}, and this build reads ${Xe}`,"compile the document instead")]};let o=n,g=Qe(o.document).document,c=g===o.document?o:{...o,document:g},O=T(g)&&typeof g.name=="string"&&T(g.kinds)&&ke(g.kinds,c.kinds)&&ke(g.acts,c.acts)&&ke(g.rules,c.rules)&&Array.isArray(c.edges)&&Array.isArray(c.findings),A={ok:!1,findings:[he("compiled-shape","","this compiled app's parts do not match its document","compile the document instead")]};if(!O)return A;try{return dn(c,l)}catch{return A}}function dn(n,l={}){let{document:e}=n,o=l.today??Pe,g=new Map(n.edges.map(([u,t])=>[u,t])),c=new Map;for(let[u,t]of Object.entries(e.kinds)){let R=n.kinds[u]?.computed;c.set(u,{fields:new Set(Object.keys(t.fields)),edges:new Map(Object.entries(t.edges??{}).map(([b,E])=>[b,E.cardinality??"many"])),...R?{computed:new Map(R)}:{}})}n.facts&&c.set(_e,{computed:new Map(n.facts)});let O=Ue(e),A=new Map,N=Object.entries(e.kinds).map(([u,t])=>{let R={};for(let[i,h]of Object.entries(t.fields))R[i]=en(h,!h.required);let{label:b,describe:E}=n.kinds[u]??{},F=Object.entries(t.computed??{}).map(([i,h])=>[i,typeof h=="string"?{expr:h}:h]),M=Object.fromEntries([...Object.entries(t.fields).filter(([,i])=>i.label).map(([i,h])=>[i,h.label]),...F.filter(([,i])=>i.label).map(([i,h])=>[i,h.label])]),I=Object.keys(M).length>0,C=Object.fromEntries(Object.entries(t.fields).filter(([,i])=>i.default!==void 0).map(([i,h])=>[i,h.default]));A.set(u,C);let j=Object.fromEntries(Object.entries(t.edges??{}).map(([i,{renamedFrom:h,...H}])=>[i,H])),p=i=>t[i]?{[i]:t[i]}:{};return Te(u,{fields:fe(R),edges:j,...p("plural"),...p("noun"),...p("description"),...b?{label:i=>te(b,{node:i,kinds:c,today:o(),money:O})||i.id}:{},...E?{describe:i=>te(E,{node:i,kinds:c,today:o(),money:O})}:{},...p("lifecycle"),...p("figure"),...p("fieldRoles"),...p("people"),...t.computed&&Object.keys(t.computed).length>0?{computed:t.computed}:{},...I||t.glance||t.page?{display:{...I?{labels:M}:{},...t.glance?{glance:[...t.glance]}:{},...t.page?{page:t.page}:{}}}:{},...Object.keys(C).length>0?{defaults:C}:{}})}),z=Ce(N,e.computed);function D(u){return z.tryDefinition(u.kind)?.label?.(u)??u.id}let V=u=>({id:"",kind:u,...A.get(u)}),$=[];for(let[u,t]of Object.entries(e.acts??{})){let R=n.acts[u],{title:b,effects:E,guard:F,refusal:M,destructive:I,idempotent:C,creates:j,connects:p,severs:i,writes:h,writesOther:H,sets:v}=R,J=new Map(R.args),K={};for(let[a,x]of J)K[a]=sn(x);let U=[t.on??[]].flat(),oe=new Map(R.exprs),G=E.find(a=>"create"in a),L=(a,x,y,w=null)=>{if(T(a)&&"expr"in a)return ne(oe.get(a.expr),{graph:y,subject:w,kinds:c,bindings:x,today:o()});let m=de(a);return m===void 0?typeof a=="string"&&a.startsWith("$$")?a.slice(1):a:m==="now"?new Date().toISOString():m==="today"?o():x[m]},nn=(a,x)=>{if(!G)return"";let y=e.kinds[G.create].fields,w=V(G.create),m=[];for(let[k,X]of Object.entries(G.set??{})){try{w[k]=L(X,a,x)??w[k]}catch{}let Y=de(X);Y&&a[Y]!==void 0&&m.push(k)}let P=D(w).trim(),q=m.filter(k=>w[k]!==!1&&y[k].type!=="text"&&D({...w,[k]:void 0}).trim()===P).map(k=>w[k]===!0?y[k].label??Ne(k):Je(w[k],y[k].format,o(),[],O));return P&&q.length>0?`${P} (${q.join(", ")})`:P};$.push(Le(u,{input:fe(K),title:b,...t.description?{description:t.description}:{},...t.fromTheOtherEnd?{fromTheOtherEnd:t.fromTheOtherEnd}:{},...J.has(_)?{subject:{kinds:U.length>0?U:"*",arg:_}}:{},...I?{destructive:!0}:{},...C?{idempotent:!0}:{},...j.length>0?{creates:j}:{},...p.length>0?{connects:p}:{},...i.length>0?{severs:i}:{},writes:h,...Object.keys(H).length>0?{writesOther:H}:{},...Object.keys(v).length>0?{sets:v}:{},describe:(a,x)=>{let y=typeof a[_]=="string"?x.getNode(a[_]):void 0,w=y?D(y):nn(a,x);return w?`${b}: ${w}`:b},apply(a,x){let y=a.graph,w=typeof x[_]=="string"?x[_]:void 0,m=w?y.getNode(w):void 0;if(w&&!m&&re(w),m&&U.length>0&&!U.includes(m.kind))throw new Z(`"${b}" acts on ${U.join(" or ")}, not on ${Fe(m.kind)}`,"invalid");let P={};for(let[r,s]of Object.entries(x))s!==void 0&&(P[r]=s);if(F&&m){let r;try{r=ne(F,{graph:y,subject:m,kinds:c,bindings:P,today:o()})}catch(s){throw s instanceof ae?new Z(`"${b}" could not be judged: ${s.sentence}`):s}if(r!==!0)throw new Z(M?te(M,{node:m,kinds:c,graph:y,bindings:P,today:o(),money:O}):`"${b}" is not allowed for ${D(m)} right now`)}let q=new Map,k=r=>y.has(r)||[...q.values()].includes(r),X=new Set,Y=r=>{let s=Ve(r);X.has(s)||(X.add(s),a.removeEdge(r))},Q=(r,s)=>{let d=de(r);if(d==="subject")return w;if(d==="me"){let f=a.me;if(f&&e.kinds[y.getNode(f)?.kind]?.people)return f;throw new Z(`"${b}" is done as you, and you have no record here`)}if(q.has(d))return q.get(d);try{return L(r,P,y,s??m??null)}catch(f){throw f instanceof ae?new Z(`"${b}" could not work out a value: ${f.sentence}`):f}};for(let r of E)if("create"in r){let s=e.kinds[r.create],d=V(r.create);for(let[le,ie]of Object.entries(r.set??{})){let ve=Q(ie,void 0);ve!==void 0&&(d[le]=ve)}let f=on(s),S=a.freshId(String((f&&d[f])??r.create),r.create);a.addNode({...d,id:S}),r.as&&q.set(r.as,S)}else if("connect"in r||"sever"in r){let s="connect"in r?r.connect:r.sever,d=String(Q(r.from,void 0)??""),f=String(Q(r.to,void 0)??"");if(k(d)||re(d),k(f)||re(f),"connect"in r){if(g.get(s)?.cardinality==="one")for(let S of y.out(d,s))S.id!==f&&Y({kind:s,from:d,to:S.id});y.out(d,s).some(S=>S.id===f)||a.addEdge({kind:s,from:d,to:f})}else Y({kind:s,from:d,to:f})}else if("set"in r){let s=String(Q(r.target??"$subject",void 0)??""),d=y.getNode(s);!d&&!k(s)&&re(s);let f={};for(let[S,le]of Object.entries(r.set)){let ie=Q(le,d);ie!==void 0&&(f[S]=ie)}Object.keys(f).length>0&&a.patchNode(s,f)}else if("remove"in r){let s=String(Q(r.remove,void 0)??"");y.has(s)||re(s),a.removeNode(s)}else if("replace"in r&&m){let s=x.to;for(let d of r.replace){let f=g.get(d)?.from.includes(m.kind)??!0;for(let S of f?y.out(m.id,d):y.in(m.id,d))d===r.keep&&S.id===s||Y(f?{kind:d,from:m.id,to:S.id}:{kind:d,from:S.id,to:m.id})}}}}))}let W=[];for(let[u,t]of Object.entries(e.rules??{})){let{title:R,require:b,when:E,says:F}=n.rules[u],M=t.repairs??[],I=(j,p)=>{let i={graph:j,subject:p,kinds:c,today:o()},h;try{if(E&&ne(E,i)!==!0)return[];h=ne(b,i)===!0}catch(v){throw v instanceof We?new Ie(v.sentence):v instanceof ae?new Error(v.sentence):v}if(h)return[];let H=M.flatMap(v=>{let J=e.acts?.[v.act],K={};p&&(J?.on||/^(edit|remove)-/.test(v.act))&&(K[_]=p.id);for(let[G,L]of Object.entries(v.args??{}))K[G]=de(L)==="subject"?p?.id:L;let oe=(J?n.acts[v.act].args:[]).filter(([G,L])=>L.required&&K[G]===void 0).map(([G])=>G);return[{mutation:v.act,label:v.label??J?.title??v.act.replace(/-/g," "),args:K,...oe.length>0?{missing:oe}:{}}]});return[{invariant:u,...p?{subjectId:p.id}:{},label:R,message:F?te(F,{node:p,kinds:c,graph:j,today:o(),money:O}):p?`${D(p)}: ${R}`:R,nodeIds:p?[p.id]:[],repairs:H}]},C={label:R,shape:{over:t.over,require:b,when:E,says:F,declared:e.kinds,money:O,kinds:c,today:o},judgment:{require:t.require,...t.when?{when:t.when}:{},...t.says?{says:t.says}:{}},...t.description?{description:t.description}:{},...M.length>0?{repairs:M.map(j=>j.act)}:{}};W.push(t.over==="graph"?ye(u,{scope:"graph",...C,evaluate:({graph:j})=>I(j,null)}):ye(u,{scope:{kind:t.over},...C,evaluate:({graph:j,subject:p})=>I(j,p)}))}let be=e.policy&&{...e.policy,...e.roles?{roles:e.roles}:{}},ce={name:e.name,schema:z,mutations:$,invariants:W,...be?{policy:be}:{},...n.brand?{brand:n.brand}:{},...e.modules?{modules:e.modules}:{},...e.lenses?{lenses:e.lenses}:{},...e.pages?{pages:e.pages}:{},...e.settings?{settings:e.settings}:{},...n.viewSpecs?{viewSpecs:n.viewSpecs}:{},...n.home?{home:n.home}:{},version:e.version??1};return Ye(ce,e),an.set(ce,n),{ok:!0,app:ce,document:e,findings:n.findings,sights:e.policy?.sees,kinds:c}}export{Qe as a,un as b,Xe as c,_ as d,de as e,on as f,zn as g,dn as h};
@@ -1,2 +0,0 @@
1
- import{D as U,E as F,F as D,Z as _}from"./chunk.VMEX2KZ4.js";var B=1e4,g=class{constructor(i){this.nodes=i}},J="",c=class extends Error{constructor(f,l){super(f);this.sentence=f;this.at=l}},C=class extends c{},V=t=>t!==null&&typeof t=="object"&&!Array.isArray(t)&&!(t instanceof g)&&typeof t.id=="string",P=t=>{let i=new Set;return new g(t.filter(f=>!i.has(f.id)&&i.add(f.id)))},p=t=>t===null?"nothing":t instanceof g?"a set of records":Array.isArray(t)?"a list":V(t)?"a record":typeof t=="string"?"a word":typeof t;function W(t,i){let f=i.budget??B,l=(n,s)=>{if(f-=n,f<0)throw new C("this rule looks at too much of the graph to judge in one go",s)},b=i.today??F(),A=i.now??new Date().toISOString(),w=new Map,T=new Set,G=i.bindings,I=(n,s,e,o)=>{let u=`${n?.id}\0${s}`;if(w.has(u))return w.get(u);if(T.has(u))throw new c(`"${s}"${n?` of ${_(n.kind)}`:""} depends on itself`,o);T.add(u);let r=G;G=void 0;try{let a=h(e,n);return w.set(u,a),a}finally{G=r,T.delete(u)}},M=(n,s,e)=>{l(1,e);let o=i.kinds.get(n.kind),u=o?.computed?.get(s);if(u)return I(n,s,u,e);let r=Object.hasOwn(n,s);if(o?.fields.has(s)||r){let d=r?n[s]:void 0;return d===void 0?null:d}let a=o?.edges.get(s);if(a){let d=i.graph.out(n.id,s);return l(d.length,e),a==="one"?d[0]??null:new g(d)}if(s==="id")return n.id;throw new c(`${_(n.kind)} has no field or relation called "${s}"`,e)},x=(n,s,e)=>{if(n instanceof g)return n;if(n===null)return new g([]);if(V(n))return new g([n]);throw new c(`${e}(\u2026) needs a set of records, and was given ${p(n)}`,s)},k=(n,s,e)=>{if(n===null)return null;if(typeof n=="string")return n;if(typeof n=="number"||typeof n=="boolean")return String(n);throw new c(`${e}(\u2026) needs a word, and was given ${p(n)}`,s)},O=(n,s,e)=>{let o=k(n,s,e);if(o===null)return null;let u=Date.parse(o.length===10?`${o}T00:00:00Z`:o);if(Number.isNaN(u))throw new c(`${e}(\u2026) needs a date, and "${o}" is not one`,s);return u},E=(n,s)=>V(n)&&V(s)?n.id===s.id:V(n)&&typeof s=="string"?n.id===s:typeof n=="string"&&V(s)?n===s.id:Array.isArray(n)&&Array.isArray(s)?n.length===s.length&&n.every((e,o)=>E(e,s[o])):n===s,N=(n,s,e)=>{if(n===null)return!1;if(typeof n=="boolean")return n;throw new c(`${e} must be true or false, and was ${p(n)}`,s)},R=(n,s)=>h(s,n);function h(n,s){switch(l(1,n.at),n.t){case"lit":return n.value;case"list":return n.items.map(e=>h(e,s));case"ident":{let e=G&&Object.hasOwn(G,n.name)?G[n.name]:void 0;if(e!==void 0)return e;if(s)return M(s,n.name,n.at);throw new c(`"${n.name}" means nothing in a rule over the whole graph`,n.at)}case"member":{let e=h(n.object,s);if(e===null)return null;if(V(e))return M(e,n.name,n.at);throw new c(`".${n.name}" needs a record before it, and was given ${p(e)}`,n.at)}case"unary":{let e=h(n.operand,s);if(n.op==="!")return!N(e,n.at,"what follows not");if(e===null)return null;if(typeof e!="number")throw new c(`"-" needs a number, and was given ${p(e)}`,n.at);return-e}case"where":{let e=x(h(n.set,s),n.at,"where");return l(e.nodes.length,n.at),new g(e.nodes.filter(o=>N(R(o,n.filter),n.at,"a where condition")))}case"binary":return H(n,s);case"call":return Y(n,s)}}function H(n,s){if(n.op==="&&")return N(h(n.left,s),n.at,"each side of and")&&N(h(n.right,s),n.at,"each side of and");if(n.op==="||")return N(h(n.left,s),n.at,"each side of or")||N(h(n.right,s),n.at,"each side of or");let e=h(n.left,s),o=h(n.right,s);if(n.op==="&"||n.op==="|"||n.op==="-"&&(e instanceof g||o instanceof g)){let u=x(e,n.at,n.op).nodes,r=x(o,n.at,n.op).nodes;l(u.length+r.length,n.at);let a=new Set(r.map(d=>d.id));return P(n.op==="|"?[...u,...r]:u.filter(d=>a.has(d.id)===(n.op==="&")))}switch(n.op){case"==":return E(e,o);case"!=":return!E(e,o);case"in":{if(o===null)return!1;if(o instanceof g)return o.nodes.some(u=>E(e,u));if(Array.isArray(o))return o.some(u=>E(e,u));if(typeof o=="string"&&typeof e=="string")return o.includes(e);throw new c(`"in" needs a list or a set on its right, and was given ${p(o)}`,n.at)}case"<":case"<=":case">":case">=":{if(e===null||o===null)return!1;if(!(typeof e=="number"&&typeof o=="number"||typeof e=="string"&&typeof o=="string"))throw new c(`cannot compare ${p(e)} with ${p(o)}`,n.at);return n.op==="<"?e<o:n.op==="<="?e<=o:n.op===">"?e>o:e>=o}default:{if(e===null||o===null)return null;if(n.op==="+"&&(typeof e=="string"||typeof o=="string")){let u=`${k(e,n.at,"+")}${k(o,n.at,"+")}`;if(u.length>1e4)throw new c("that makes a word too long",n.at);return u}if(typeof e!="number"||typeof o!="number")throw new c(`"${n.op}" needs numbers, and was given ${p(e)} and ${p(o)}`,n.at);return(n.op==="/"||n.op==="%")&&o===0?null:n.op==="+"?e+o:n.op==="-"?e-o:n.op==="*"?e*o:n.op==="/"?e/o:e%o}}}function Y(n,s){let e=(r,a=r)=>{if(n.args.length<r||n.args.length>a)throw new c(`${n.fn}(\u2026) takes ${r===a?r:`${r} to ${a}`} argument${a===1?"":"s"}`,n.at)},o=r=>h(n.args[r],s),u=r=>{let a=o(r);if(typeof a!="string")throw new c(`${n.fn}(\u2026) needs a quoted name, like ${n.fn}('name')`,n.at);return a};switch(n.fn){case"out":case"in":{e(1,2);let r=($,m)=>n.fn==="out"?i.graph.out($,m):i.graph.in($,m);if(n.args.length===2){let $=x(o(0),n.at,n.fn).nodes,m=u(1);return P($.flatMap(y=>{let S=r(y.id,m);return l(S.length+1,n.at),S}))}let a=u(0);if(!s)throw new c(`${n.fn}('${a}') needs a record to start from`,n.at);let d=r(s.id,a);return l(d.length,n.at),new g(d)}case"all":{e(1);let r=i.graph.nodesOfKind(u(0));return l(r.length,n.at),new g(r)}case"count":return e(1),x(o(0),n.at,"count").nodes.length;case"exists":return e(1),x(o(0),n.at,"exists").nodes.length>0;case"every":case"some":{e(2);let r=x(o(0),n.at,n.fn);l(r.nodes.length,n.at);let a=d=>N(R(d,n.args[1]),n.at,`the condition in ${n.fn}(\u2026)`);return n.fn==="every"?r.nodes.every(a):r.nodes.some(a)}case"sum":case"min":case"max":{e(2);let r=x(o(0),n.at,n.fn);l(r.nodes.length,n.at);let a=n.args[1],d=a.t==="lit"&&typeof a.value=="string"?a.value:void 0,$=a.t==="ident"?`'${a.name}'`:d!==void 0?`'${d}'`:"\u2026",m=r.nodes.map(y=>a.t==="ident"?M(y,a.name,n.at):d!==void 0?M(y,d,n.at):R(y,a)).filter(y=>{if(y===null)return!1;if(typeof y!="number")throw new c(`${n.fn}(\u2026, ${$}) needs a number for each member, and found ${p(y)}`,n.at);return!0});return n.fn==="sum"?m.reduce((y,S)=>y+S,0):m.length===0?null:n.fn==="min"?Math.min(...m):Math.max(...m)}case"fact":{e(1);let r=u(0),a=i.kinds.get(J)?.computed?.get(r);if(!a)throw new c(`no fact is called "${r}"`,n.at);return I(null,r,a,n.at)}case"first":return e(1),x(o(0),n.at,"first").nodes[0]??null;case"sort":{e(2,3);let r=x(o(0),n.at,"sort"),a=n.args.length===3?o(2):"asc";if(a!=="asc"&&a!=="desc")throw new c("sort(\u2026) goes 'asc' or 'desc'",n.at);let d=r.nodes.length;l(d+d*Math.ceil(Math.log2(d+1)),n.at);let $=r.nodes.map((y,S)=>({node:y,i:S,key:R(y,n.args[1])})),m=a==="desc"?-1:1;return $.sort((y,S)=>L(y.key,S.key,m,n.at)||y.i-S.i),new g($.map(y=>y.node))}case"either":{if(n.args.length<1)throw new c("either(\u2026) takes at least one argument",n.at);for(let r=0;r<n.args.length;r++){let a=o(r);if(a!==null&&!(a instanceof g&&a.nodes.length===0))return a}return null}case"present":{e(1);let r=o(0);return r===null||r===""?!1:Array.isArray(r)?r.length>0:r instanceof g?r.nodes.length>0:!0}case"len":{e(1);let r=o(0);if(r===null)return 0;if(typeof r=="string"||Array.isArray(r))return r.length;if(r instanceof g)return r.nodes.length;throw new c(`len(\u2026) needs a word or a list, and was given ${p(r)}`,n.at)}case"contains":case"startsWith":{e(2);let r=o(0),a=o(1);if(r===null||a===null)return!1;if(n.fn==="contains"&&Array.isArray(r))return r.some(m=>E(m,a));let d=k(r,n.at,n.fn),$=k(a,n.at,n.fn);return n.fn==="contains"?d.toLowerCase().includes($.toLowerCase()):d.startsWith($)}case"lower":{e(1);let r=k(o(0),n.at,"lower");return r===null?null:r.toLowerCase()}case"today":return e(0),b;case"now":return e(0),A;case"date":{e(1);let r=O(o(0),n.at,"date");return r===null?null:new Date(r).toISOString().slice(0,10)}case"days":case"hours":{e(2);let r=O(o(0),n.at,n.fn),a=O(o(1),n.at,n.fn);if(r===null||a===null)return null;let d=(a-r)/(n.fn==="days"?864e5:36e5);return n.fn==="days"?Math.round(d):d}case"if":return e(3),N(o(0),n.at,"the condition in if(\u2026)")?o(1):o(2);default:throw new c(`"${n.fn}" is not a function the rule language knows`,n.at)}}function L(n,s,e,o){if(n===null||s===null)return n===s?0:n===null?1:-1;if(Array.isArray(n)&&Array.isArray(s)){for(let r=0;r<Math.max(n.length,s.length);r++){let a=L(n[r]??null,s[r]??null,e,o);if(a!==0)return a}return 0}let u=r=>typeof r=="number"||typeof r=="string"||typeof r=="boolean"?typeof r:p(r);if(u(n)!==u(s)||typeof n=="object"||typeof s=="object")throw new c(`sort(\u2026) cannot put ${p(n)} and ${p(s)} in order`,o);return typeof n=="string"?e*(n<s?-1:n>s?1:0):e*(Number(n)-Number(s))}return h(t,i.subject)}var rn=["out","in","all","count","exists","every","some","sum","min","max","present","len","contains","startsWith","lower","today","now","date","days","hours","if","first","sort","either","fact"];var sn=(t,i,f,l)=>({severity:"error",code:t,path:i,message:f,...l?{fix:l}:{}}),an=(t,i,f,l)=>({severity:"warning",code:t,path:i,message:f,...l?{fix:l}:{}}),ln=t=>t.some(i=>i.severity==="error");function un(t){return t.map(i=>`${i.severity==="error"?"\u2717":i.severity==="warning"?"!":"\xB7"} ${i.path||"(document)"}: ${i.message}${i.fix?` \u2014 ${i.fix}`:""}`).join(`
2
- `)}var gn=["money","percent","date","relative","upper","lower","count","words","and","plural"],Q={getNode:()=>{},allNodes:()=>[],allEdges:()=>[],nodesOfKind:()=>[],edgesOfKind:()=>[],out:()=>[],in:()=>[],neighbors:()=>[],has:()=>!1};function yn(t,i,f,l=[],b){return K(t,i,f,l,b)}function X(t,i={}){let f=Number.isInteger(t),l={maximumFractionDigits:f?0:2,minimumFractionDigits:f?0:2};try{return new Intl.NumberFormat(i.locale??"en-US",i.currency?{style:"currency",currency:i.currency,...l}:l).format(t)}catch{return t.toLocaleString("en-US",l)}}var q=["zero","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"],Z=["","","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"];function v(t){return!Number.isInteger(t)||t<0||t>99?t.toLocaleString("en-US",{maximumFractionDigits:2}):t<20?q[t]:t%10===0?Z[t/10]:`${Z[Math.floor(t/10)]}-${q[t%10]}`}function z(t){return t.length<=1?t[0]??"":`${t.slice(0,-1).join(", ")} and ${t[t.length-1]}`}function nn(t){return/[^aeiou]y$/i.test(t)?`${t.slice(0,-1)}ies`:/(s|x|z|ch|sh)$/i.test(t)?`${t}es`:`${t}s`}var j=t=>String(t.name??t.title??t.label??t.id);function K(t,i,f,l=[],b){if(i==="plural"){let A=t instanceof g?t.nodes.length:Array.isArray(t)?t.length:typeof t=="number"?t:null;return A===null||l[0]===void 0?"\u2014":A===1?l[0]:l[1]??nn(l[0])}if(t===null)return"\u2014";if(t instanceof g)return i==="count"?String(t.nodes.length):i==="and"?z(t.nodes.map(j)):t.nodes.map(j).join(", ");if(Array.isArray(t)){if(i==="count")return String(t.length);let A=t.map(w=>K(w,void 0,f,[],b));return i==="and"?z(A):A.join(", ")}if(typeof t=="object")return j(t);switch(i){case"words":return typeof t=="number"?v(t):String(t);case"money":return typeof t=="number"?X(t,b):String(t);case"percent":return typeof t=="number"?`${Math.round(t*100)}%`:String(t);case"upper":return String(t).toUpperCase();case"lower":return String(t).toLowerCase();case"date":return D(String(t).slice(0,10));case"relative":{let A=Date.parse(String(t).length===10?`${t}T00:00:00Z`:String(t));if(Number.isNaN(A))return String(t);let w=Math.round((A-Date.parse(`${f}T00:00:00Z`))/864e5);return w===0?"today":w===1?"tomorrow":w===-1?"yesterday":w>0?`in ${w} days`:`${-w} days ago`}default:return typeof t=="string"&&U.test(t)?D(t):String(t)}}function pn(t,i){let f=i.today??F();return t.map(l=>{if(l.text!==void 0)return l.text;try{let b=W(l.expr,{graph:i.graph??Q,subject:i.node,kinds:i.kinds,today:f,budget:i.budget??500,...i.bindings?{bindings:i.bindings}:{}});return K(b,l.format,f,l.formatArgs,i.money)}catch(b){if(b instanceof c)return"\u2014";throw b}}).join("")}export{g as a,J as b,c,C as d,W as e,rn as f,sn as g,an as h,ln as i,un as j,gn as k,Q as l,yn as m,X as n,pn as o};
@@ -1 +0,0 @@
1
- import{a as n}from"./chunk.LQZ2VQWN.js";import"./chunk.TX2GOL65.js";import"./chunk.T2EZ5MTH.js";import"./chunk.ONDILMIX.js";import{f as s}from"./chunk.AS35X6KA.js";import"./chunk.I5KD54S6.js";import"./chunk.NQNQPPPM.js";import"./chunk.KAKX5TZN.js";import"./chunk.VFICMX5G.js";import"./chunk.IKT7JQUW.js";import"./chunk.CW7BMVBG.js";import"./chunk.IZDKEFPJ.js";import"./chunk.XDHBV5K5.js";import"./chunk.WVUJXDXZ.js";import"./chunk.UMMN5Z6V.js";import"./chunk.DG2WKNMX.js";import"./chunk.HPD3DSTP.js";import"./chunk.VD6FJ6KJ.js";import"./chunk.OHGJ5BZ4.js";import"./chunk.7QTBDACG.js";import"./chunk.5BN2ARQ2.js";import"./chunk.4W24TPMR.js";import"./chunk.AHDOKM4O.js";import"./chunk.6R4EI47C.js";import"./chunk.LHAAZQNQ.js";import"./chunk.PHY3AH3L.js";import"./chunk.QZWN46V6.js";import"./chunk.6LJ66MB7.js";import"./chunk.OYULDOQP.js";import"./chunk.VMEX2KZ4.js";import{a as y,b as i}from"./chunk.MRK6QJV5.js";import{b as r}from"./chunk.AJZBJBMO.js";var c=r(y(),1),e=r(i(),1);function v({store:d,views:t,as:a,scope:o}){let l=(0,c.useMemo)(()=>s({scope:`.${o}`}),[o]);return(0,e.jsxs)("div",{"data-testid":"embed-picture","data-embed-content":"",tabIndex:0,"aria-label":t.places().find(m=>m.as===a)?.title??"The picture",style:{flex:"1 1 auto",minHeight:0,display:"grid",gridTemplateRows:"minmax(0, 1fr)",overflow:"auto",background:"var(--graview-ground)",color:"var(--graview-ink)",fontFamily:"var(--graview-font-body, system-ui)"},children:[(0,e.jsx)("style",{children:l}),(0,e.jsx)(n,{store:d,views:t,as:a})]})}export{v as PictureFace};
@@ -1,2 +0,0 @@
1
- import{e as ye,f as he,i as be,j as J,k as we}from"./chunk.UMMN5Z6V.js";import{f as ge}from"./chunk.VD6FJ6KJ.js";import{$ as H,B as z,E as ne,Ib as ue,N as E,P as T,Ra as ie,S as te,Sb as pe,T as re,U as X,V as oe,Y as _,_b as me,aa as se,ac as fe,gb as ae,hb as q,ib as le,ub as de,wb as ce}from"./chunk.VMEX2KZ4.js";function Re(t,r,n){let s=t.tryDefinition(r)?.fields.shape,e=z(s?.[n]),l=!1,i=!1;for(;e&&(e.type==="optional"||e.type==="default"||e.type==="nullable"||e.type==="prefault");)(e.type==="optional"||e.type==="nullable")&&(l=!0),(e.type==="default"||e.type==="prefault")&&(i=!0),e=z(e.innerType);if(e?.type!=="enum")return;let y=(e.entries?Object.values(e.entries):e.values??[]).filter(u=>typeof u=="string");return y.length>0?{values:y,empty:l&&!i}:void 0}function L(t,r,n){let s=Re(t,r,n);if(!s)return[];let e=t.tryDefinition(r),l=s.values.map(i=>({value:i,label:re(e,n,i)}));return s.empty&&l.push({value:null,label:`No ${_(e,n).toLowerCase()}`}),l}function U(t,r,n){let s=t[r];return typeof s=="string"&&n.some(e=>e.value===s)?s:null}function Q(t,r,n,s,e=L(t.schema,n.kind,s)){let l=xe(t.schema,t.allMutations(),n.kind,s,e),i=U(n,s,e),y=[];for(let{value:u,by:A,acts:O}of l)if(u!==i)for(let $ of O){let B=A==="step"?{[$.subject.arg]:n.id}:{[$.subject.arg]:n.id,[s]:u},R={name:$.name,args:B};if($.input.safeParse(B).success&&t.permits(R,r).ok){try{ae(t.graph,$,B)}catch{continue}y.push({to:u,call:R,title:$.title??$.name});break}}return y}function xe(t,r,n,s,e=L(t,n,s)){let l=ve(t,r,n,s),i=$e(t,r,n,s);return e.flatMap(y=>{if(y.value===null)return[];let u=l.filter(A=>A.sets?.[s]===y.value);return[{value:y.value,label:y.label,by:u.length>0?"step":i.length>0?"value":"none",acts:u.length>0?u:i}]})}function ve(t,r,n,s){return r.filter(e=>e.subject!==void 0&&e.derived===void 0&&typeof e.sets?.[s]=="string"&&q(t,e).includes(n))}function $e(t,r,n,s){let e=t.tryDefinition(n);return e?r.filter(l=>{if(!l.subject||!q(t,l).includes(n)||!le(l,e).includes(s))return!1;let i=l.input.shape;return i!==void 0&&s in i}).sort((l,i)=>+(l.derived!==void 0)-+(i.derived!==void 0)):[]}var Y=(t,r)=>r&&t[r]!==void 0?String(t[r]):"";function Ae(t,r,n){let s=d=>t.tryDefinition(d)?r.nodesOfKind(d).filter(k=>E(t.tryDefinition(d),k)):[],e=s(n.rows),l=s(n.columns),i=new Set(e.map(d=>d.id)),y=new Set(l.map(d=>d.id)),u=r.allEdges(),A=[],O=n.link;if(typeof O=="string"){let d=p=>t.tryDefinition(p)?.edges?.[O]?.to,k=(d(n.columns)??[]).some(p=>p===n.rows||p==="*"),w=(d(n.rows)??[]).some(p=>p===n.columns||p==="*"),D=k||!w;for(let p of u){if(p.kind!==O)continue;let m=D?p.to:p.from,o=D?p.from:p.to;i.has(m)&&y.has(o)&&A.push({rowId:m,columnId:o,via:[]})}}else{let d=new Map(O.path.map(w=>[w,new Map]));for(let w of u){let D=d.get(w.kind);if(!D)continue;let p=D.get(w.from);p?p.push(w.to):D.set(w.from,[w.to]);let m=D.get(w.to);m?m.push(w.from):D.set(w.to,[w.from])}let k=new Set;for(let w of l){let D=[{id:w.id,via:[]}];for(let p of O.path){let m=[],o=new Set;for(let f of D)for(let P of d.get(p).get(f.id)??[])o.has(`${f.id}|${P}`)||(o.add(`${f.id}|${P}`),m.push({id:P,via:[...f.via,f.id]}));D=m}for(let p of D){let m=`${p.id}|${w.id}`;!i.has(p.id)||k.has(m)||(k.add(m),A.push({rowId:p.id,columnId:w.id,via:p.via.slice(1)}))}}}let $=n.groupOrder??[],B=d=>$.indexOf(d)===-1?$.length:$.indexOf(d),R=e.map(d=>{let k=d;return{node:d,label:String(k.label??T(t.tryDefinition(d.kind),d)),group:Y(k,n.rowGroup),ref:Y(k,n.rowRef)}}).sort((d,k)=>B(d.group)-B(k.group)||(d.ref<k.ref?-1:d.ref>k.ref?1:0)),N=l.map(d=>({node:d,label:T(t.tryDefinition(d.kind),d),group:Y(d,n.columnGroup)})).sort((d,k)=>d.group<k.group?-1:d.group>k.group?1:d.node.id<k.node.id?-1:d.node.id>k.node.id?1:0);return{rows:R,columns:N,cells:A}}function ke(t,r,n){let{rows:s,columns:e,cells:l}=Ae(t,r,n),i=(o,f)=>X(t,o,f),y=o=>X(t,o,1).replace(/^1 /,""),u=o=>({id:o.id,kind:o.kind,title:T(t.tryDefinition(o.kind),o),parts:[]}),A=o=>{let f=r.getNode(o);if(!f)return null;let P=t.tryDefinition(f.kind),M=T(P,f),K=H(f,P,{limit:3,said:[M],glance:!0}).map(I=>I.alone.startsWith(I.label)?`${I.label.toLowerCase()}${I.alone.slice(I.label.length)}`:I.alone);return[M,...K].join(", ")},O=typeof n.link=="string"?[]:n.link.path.slice(0,-1).flatMap((o,f,P)=>{let M=ue(t,n.columns,P.slice(0,f+1));return M.ok?[...M.reached]:[]}),$=[{t:"text",text:`${i(n.rows,s.length)} against ${i(n.columns,e.length)}${O.length>0?`, through ${[...new Set(O)].map(o=>i(o,2).replace(/^2 /,"")).join(" and ")}`:""}${e.length>0?`: ${e.map(o=>o.label).join(", ")}`:""}.`}],B=new Map(e.map(o=>[o.node.id,o.label])),R=new Map(e.map((o,f)=>[o.node.id,f])),N=new Map,d=new Map;for(let o of l){let f=N.get(o.rowId);f?f.push(o):N.set(o.rowId,[o]);let P=d.get(o.columnId);P?P.add(o.rowId):d.set(o.columnId,new Set([o.rowId]))}for(let o of s){let P=[...N.get(o.node.id)??[]].sort((M,K)=>R.get(M.columnId)-R.get(K.columnId)).map(M=>{let K=M.via.map(A).filter(I=>I!==null);return`${B.get(M.columnId)}${K.length>0?` (${K.join("; ")})`:""}`});$.push({t:"field",label:o.label,text:P.length>0?P.join(", "):"none"})}$.push({t:"list",as:"name",columns:1,groups:e.map(o=>{let f=d.get(o.node.id)??new Set,P=s.filter(M=>f.has(M.node.id)).map(M=>u(M.node));return{heading:`${o.label} (${P.length})`,items:P}})});let k=new Set(l.map(o=>o.rowId)),w=new Set(l.map(o=>o.columnId)),D=s.filter(o=>!k.has(o.node.id)),p=e.filter(o=>!w.has(o.node.id)),m=n.rows===n.columns;return D.length>0&&$.push({t:"text",text:`${m?`${D.length} with none across`:`${i(n.rows,D.length)} with no ${y(n.columns)}`}: ${D.map(o=>o.label).join(", ")}.`}),p.length>0&&$.push({t:"text",text:`${m?`${p.length} with none down`:`${i(n.columns,p.length)} on no ${y(n.rows)}`}: ${p.map(o=>o.label).join(", ")}.`}),$}function Z(t,r,n,s={}){let{app:e,blocks:l=n?e?.viewSpecs?.[n.kind]?.[s.slot??"page"]:e?.home}=s;if(!l?.length)return[];let i=s.firstHeading??(n||s.blocks?void 0:1),y=we(t,r,n,{...s,money:s.money??e?.brand,firstHeading:i});return n&&!y.node?[]:he(typeof l[0]?.t=="string"?l:ye(l),y)}var Ce=240,Se=10,je=1160,Me=40,Oe=640,Be=3,Ie=t=>Math.max(1,Math.floor((Math.min(t,je)-Me+Se)/(Ce+Se)));function Ge(t,r,n,s){let{app:e}=s,l=s.width??1440,i=s.today??ne(),y=t.seenBy(r),u=y.schema,A=y.graph,O=fe(e),$=typeof n=="string"?n.trim():n.slug,B=typeof n=="string"?O.find(a=>a.slug===$||a.title===$||a.address===$):O.find(a=>a.slug===n.slug&&a.kind===n.kind)??n,R=!B&&typeof n=="string"?A.getNode($):void 0;if(!B&&!R)return{ok:!1,error:`"${$}" is not a place this app has, nor a record this seat can see.`,places:O.map(a=>a.slug)};let N=[],d=e.viewSpecs??{},k=Ie(l),w=(a,h)=>Z(y,null,a,{app:e,today:i,...h}),D=(a,h,b)=>{let g=u.tryDefinition(a.kind),S=T(g,a);if(h==="name")return{id:a.id,kind:a.kind,title:S,parts:[]};if(d[a.kind]?.[h]){let j=w(a,{slot:h}),[F,...v]=j,C=F?.t==="title";return{id:a.id,kind:a.kind,title:C?F.text:S,parts:p(C?v:j,b,`views.${a.kind}.${h}`,` (${a.id})`,C?1:0)}}if(h==="row")return{id:a.id,kind:a.kind,title:S,parts:[]};let c=g?.computed?J(u,A,a):a,G=H(c,g,{limit:3,said:[S],glance:!0});return{id:a.id,kind:a.kind,title:S,parts:G.map(j=>({t:"text",text:j.alone}))}};function p(a,h,b,g="",S=0){let x=[];return a.forEach((c,G)=>{let j=`${b}.${G+S}`;switch("problem"in c&&c.problem&&N.push({at:`${j}${g}`,says:c.problem}),c.t){case"title":x.push({t:"heading",level:3,text:c.text});return;case"text":x.push({t:"text",text:c.text,...c.tone?{tone:c.tone}:{}});return;case"badge":x.push({t:"badge",text:c.text});return;case"field":case"image":x.push({t:"field",label:c.label,text:c.text});return;case"progress":x.push({t:"progress",label:c.label,text:c.text});return;case"group":x.push(...p(c.blocks,h,`${j}.group`,g));return;case"when":x.push(...p(c.blocks,h,`${j}.show`,g));return;case"divider":case"figure":return;case"headline":x.push({t:"heading",level:c.level,text:c.text});return;case"number":x.push({t:"figure",text:c.text,...c.label?{label:c.label}:{}});return;case"list":{if(c.failed){x.push({t:"text",text:"\u2014"});return}if(c.members.length===0){c.empty&&x.push({t:"list",as:c.as,columns:1,groups:[],empty:c.empty});return}let F=h+1,v=F>Be?"name":c.as,C=(c.groups??[{value:null,members:c.members}]).map(W=>({..."heading"in W&&W.heading?{heading:W.heading}:{},items:W.members.map(Pe=>D(Pe,v,F))}));x.push({t:"list",as:v,columns:v==="card"?k:1,groups:C,...c.more>0?{more:c.more}:{}});return}}}),x}let m=[],o,f,P;if(R){f="record";let a=u.tryDefinition(R.kind),h=T(a,R);P={slug:R.id,title:h,kind:R.kind,address:ie(u,R.kind,R.id)},d[R.kind]?.page&&m.push(...p(w(R,{slot:"page"}),1,`views.${R.kind}.page`));let g=a?.computed?J(u,A,R):R;for(let S of se(a,H(g,a,{said:[h]}))){S.title&&m.push({t:"heading",level:2,text:S.title});for(let x of S.fields)m.push({t:"field",label:x.label,text:x.value})}}else{let a=B;P={slug:a.slug,title:a.title,kind:a.kind,address:a.address};let h=a.lens?pe(e).drawn.find(b=>b.as===a.slug&&(a.kind===null||b.kinds.includes(a.kind))):void 0;if(a.kind===null){let b=e.brand,g=b?.name??e.name,S=b?.logo&&ce(b.logo)?b.logo:void 0;if(o={name:g,...b?.subtitle?{subtitle:b.subtitle}:{},...S?{logo:{alt:b?.logoAlt??g,...de(S)?{drawn:"inline SVG"}:{drawn:"image",src:S}}}:{}},e.home)f="blocks",m=p(w(null,{}),0,"views.home");else{f="derived";let x=new Set(e.pages?.hide??[]),c=me(u.kinds,e.pages?.order).filter(G=>!x.has(G));m.push({t:"heading",level:1,text:e.name??"Home"});for(let G of c){let j=A.nodesOfKind(G).filter(F=>E(u.tryDefinition(G),F)).length;j>0&&m.push({t:"text",text:`${j} ${V(u,G,j)}`})}}}else if(h?.lens==="blocks")f="lens:blocks",m=p(w(null,{blocks:h.options.blocks??[]}),0,`lenses.${h.index}.options.blocks`);else if(h?.lens==="columns"){f="lens:columns";let b=h.options.bindings??{};for(let g of Object.keys(b)){let S=b[g]?.column;if(!S)continue;let x=L(u,g,S),c=A.nodesOfKind(g).filter(v=>E(u.tryDefinition(g),v));Object.keys(b).length>1&&m.push({t:"heading",level:2,text:V(u,g,2).replace(/^./,v=>v.toUpperCase())}),m.push({t:"text",text:`${c.length} ${V(u,g,c.length)} in columns by ${_(u.tryDefinition(g),S).toLowerCase()}.`});let G=x.map(v=>({column:v,items:c.filter(C=>U(C,S,x)===v.value).map(C=>D(C,"card",1))})).filter(({column:v,items:C})=>v.value!==null||C.length>0).map(({column:v,items:C})=>({heading:`${v.label} (${C.length})`,items:C}));m.push({t:"list",as:"card",columns:1,groups:G});let j=new Map;for(let v of c)for(let C of Q(t,r,v,S,x))j.set(C.to,(j.get(C.to)??new Set).add(`"${C.title}"`));let F=x.filter(v=>v.value!==null&&j.has(v.value)).map(v=>`to ${v.label} by ${[...j.get(v.value)].join(" or ")}`);m.push({t:"text",text:F.length>0?`Moves: ${F.join("; ")}.`:"Moves: none for this seat."})}}else if(h?.lens==="coverage")f="lens:coverage",m=ke(u,A,h.options);else if(h){f=`lens:${h.lens}`;let b=h.kinds.flatMap(g=>A.nodesOfKind(g).filter(S=>E(u.tryDefinition(g),S)));m.push({t:"text",text:`A ${h.lens} of ${b.length} ${h.kinds.map(g=>V(u,g,b.length)).join(" and ")}.`}),m.push({t:"list",as:"name",columns:1,groups:[{items:b.map(g=>D(g,"name",1))}]})}else{f="derived";let b=A.nodesOfKind(a.kind).filter(g=>E(u.tryDefinition(a.kind),g));m.push({t:"heading",level:1,text:a.title}),b.length===0?m.push({t:"list",as:"row",columns:1,groups:[],empty:`No ${V(u,a.kind,0)} yet.`}):m.push({t:"list",as:"row",columns:1,groups:[{items:b.map(g=>D(g,"row",1))}]})}}let M=r.kind==="system"?"the system":(r.roles??[]).length>0?(r.roles??[]).join(", "):r.kind,K=l<Oe?"phone":"wide",I=P.kind===null?Fe(u,A):[],ee={...o?{masthead:o}:{},...I.length>0?{facts:I}:{},place:P,seat:M,width:l,variant:K,drawnBy:f,parts:m,problems:N};return{ok:!0,description:{...ee,text:De(ee)}}}function Fe(t,r){let n=be(t,r,null),s=e=>Array.isArray(e)?e.map(s).join(", "):e===null?"nothing":typeof e=="boolean"?e?"yes":"no":typeof e=="object"?e.label:String(e);return[...ge(t)].map(([e,l])=>{let i=l.label??te(e);return Object.hasOwn(n.values,e)?{name:e,label:i,value:s(n.values[e])}:{name:e,label:i,refused:n.refused[e]??"it could not be worked out"}})}function V(t,r,n){let s=t.tryDefinition(r);if(n===1)return s?.noun??r;let e=oe(t,r);return e.charAt(0).toLowerCase()+e.slice(1)}function De(t){let r=[`${t.place.title} (${t.place.address}) \u2014 as ${t.seat}, ${t.width} wide (${t.variant}).`],n=t.masthead;n&&r.push(`Masthead: ${n.logo?`the logo ("${n.logo.alt}", ${n.logo.drawn==="image"?n.logo.src:"inline SVG"}), `:""}${n.name}${n.subtitle?` \u2014 ${n.subtitle}`:""}`);let s=(e,l)=>{for(let i of e)switch(i.t){case"heading":r.push(`${l}${"#".repeat(i.level)} ${i.text}`);break;case"text":r.push(`${l}${i.text}`);break;case"badge":r.push(`${l}[${i.text}]`);break;case"field":case"progress":r.push(`${l}${i.label}: ${i.text}`);break;case"figure":r.push(`${l}${i.text}${i.label?` \u2014 ${i.label}`:""}`);break;case"list":if(i.groups.length===0){i.empty&&r.push(`${l}(${i.empty})`);break}for(let y of i.groups){y.heading&&r.push(`${l}${y.heading}:`);for(let u of y.items)r.push(`${l}${y.heading?" ":""}- ${u.title}`),s(u.parts,`${l}${y.heading?" ":" "}`)}i.as==="card"&&i.columns>1&&r.push(`${l}(cards, ${i.columns} across)`),i.more&&r.push(`${l}and ${i.more} more`);break}};if(s(t.parts,""),t.facts){r.push("Facts of the whole graph (what fact('<name>') reads):");for(let e of t.facts)r.push(`- ${e.label} (${e.name}): ${e.value??`not worked out \u2014 ${e.refused}`}`)}if(t.problems.length>0){r.push("Problems:");for(let e of t.problems)r.push(`- ${e.at}: ${e.says}`)}return r.join(`
2
- `)}export{L as a,U as b,Q as c,xe as d,ve as e,$e as f,Z as g,Ge as h,De as i};
@@ -1 +0,0 @@
1
- import{a,b}from"./chunk.ATLUMYAJ.js";import"./chunk.FS5K4AVA.js";import"./chunk.SHDYLMZE.js";import"./chunk.DY2FFBWF.js";import"./chunk.MNPNW4BQ.js";import"./chunk.I5KD54S6.js";import"./chunk.EVTZE2OZ.js";import"./chunk.NQNQPPPM.js";import"./chunk.KAKX5TZN.js";import"./chunk.VFICMX5G.js";import"./chunk.XDHBV5K5.js";import"./chunk.WVUJXDXZ.js";import"./chunk.UMMN5Z6V.js";import"./chunk.DG2WKNMX.js";import"./chunk.HPD3DSTP.js";import"./chunk.VD6FJ6KJ.js";import"./chunk.OHGJ5BZ4.js";import"./chunk.5BN2ARQ2.js";import"./chunk.4W24TPMR.js";import"./chunk.AHDOKM4O.js";import"./chunk.6R4EI47C.js";import"./chunk.LHAAZQNQ.js";import"./chunk.PHY3AH3L.js";import"./chunk.QZWN46V6.js";import"./chunk.6LJ66MB7.js";import"./chunk.OYULDOQP.js";import"./chunk.VMEX2KZ4.js";import"./chunk.MRK6QJV5.js";import"./chunk.AJZBJBMO.js";export{b as declaredLensView,a as formatFor};
@@ -1 +0,0 @@
1
- import{a,b,c,d,e,f,g,h,i}from"./chunk.SHDYLMZE.js";import"./chunk.UMMN5Z6V.js";import"./chunk.DG2WKNMX.js";import"./chunk.HPD3DSTP.js";import"./chunk.VD6FJ6KJ.js";import"./chunk.OHGJ5BZ4.js";import"./chunk.VMEX2KZ4.js";import"./chunk.AJZBJBMO.js";export{f as columnActs,c as columnMoves,b as columnOf,d as columnReach,e as columnSteps,h as describePlace,i as placeText,g as resolveFor,a as statusColumns};