graview 0.1.21 → 0.1.23

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 (78) hide show
  1. package/README.md +22 -4
  2. package/dist/index.d.ts +7 -4
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +14 -4
  5. package/dist/index.js.map +1 -1
  6. package/dist/preview/chunk.2F7OKRDK.js +9 -0
  7. package/dist/preview/chunk.3HEJZPJM.js +1040 -0
  8. package/dist/preview/chunk.3MLQ3Q5X.js +1 -0
  9. package/dist/preview/chunk.4CDEIDKB.js +1 -0
  10. package/dist/preview/chunk.4HGBVU5B.js +1 -0
  11. package/dist/preview/chunk.4JSMCNF7.js +1 -0
  12. package/dist/preview/chunk.4UQLZ7VW.js +1 -0
  13. package/dist/preview/chunk.5JNXQHN4.js +1 -0
  14. package/dist/preview/chunk.5MAMCKVU.js +1 -0
  15. package/dist/preview/chunk.6C7SJJQO.js +1 -0
  16. package/dist/preview/chunk.6CLHFNDM.js +321 -0
  17. package/dist/preview/chunk.6KJSFIO7.js +1 -0
  18. package/dist/preview/chunk.75WDSWXL.js +20 -0
  19. package/dist/preview/chunk.7YC34AIK.js +1 -0
  20. package/dist/preview/chunk.7YCQZJGB.js +1 -0
  21. package/dist/preview/chunk.ACZGK7LQ.js +1 -0
  22. package/dist/preview/chunk.AHDOKM4O.js +1 -0
  23. package/dist/preview/chunk.AJZBJBMO.js +1 -0
  24. package/dist/preview/chunk.AZG6V3PF.js +1 -0
  25. package/dist/preview/chunk.AZYJTNSM.js +107 -0
  26. package/dist/preview/chunk.BQV62QEL.js +61 -0
  27. package/dist/preview/chunk.CJQL7AHT.js +3 -0
  28. package/dist/preview/chunk.DAKED3WK.js +1 -0
  29. package/dist/preview/chunk.DJ26NOOW.js +1 -0
  30. package/dist/preview/chunk.DN4D4HGX.js +1 -0
  31. package/dist/preview/chunk.DO4P2UK4.js +1 -0
  32. package/dist/preview/chunk.ELEHYYCN.js +1 -0
  33. package/dist/preview/chunk.ENMNLR73.js +2 -0
  34. package/dist/preview/chunk.EQOU4POV.js +1 -0
  35. package/dist/preview/chunk.FLDFRFDH.js +23 -0
  36. package/dist/preview/chunk.FLJP3BGP.js +1 -0
  37. package/dist/preview/chunk.G4JJXA63.js +1 -0
  38. package/dist/preview/chunk.HCK6IHGP.js +1 -0
  39. package/dist/preview/chunk.IKT7JQUW.js +14 -0
  40. package/dist/preview/chunk.JE4VH767.js +16 -0
  41. package/dist/preview/chunk.K7UJG5II.js +1 -0
  42. package/dist/preview/chunk.KFLY4MAT.js +1 -0
  43. package/dist/preview/chunk.KWYU5NPM.js +1 -0
  44. package/dist/preview/chunk.L5G5DTFX.js +1 -0
  45. package/dist/preview/chunk.LGUV2J6Q.js +1 -0
  46. package/dist/preview/chunk.LSLFKW4M.js +1 -0
  47. package/dist/preview/chunk.LZQZP2PD.js +2 -0
  48. package/dist/preview/chunk.M4XNUM2A.js +6 -0
  49. package/dist/preview/chunk.MRK6QJV5.js +25 -0
  50. package/dist/preview/chunk.NOXC454O.js +1 -0
  51. package/dist/preview/chunk.ONDILMIX.js +1 -0
  52. package/dist/preview/chunk.OR6ZWN76.js +1 -0
  53. package/dist/preview/chunk.PC6FAJF5.js +1 -0
  54. package/dist/preview/chunk.Q5WEOX3Q.js +1 -0
  55. package/dist/preview/chunk.Q7WQ5UIE.js +1 -0
  56. package/dist/preview/chunk.R5K7NK4U.js +1 -0
  57. package/dist/preview/chunk.SCLIBKLS.js +1 -0
  58. package/dist/preview/chunk.SQD7ZPEJ.js +1 -0
  59. package/dist/preview/chunk.THBP5EES.js +1 -0
  60. package/dist/preview/chunk.UNRYIETM.js +1 -0
  61. package/dist/preview/chunk.VNC6H6IM.js +1 -0
  62. package/dist/preview/chunk.VRXWNUDR.js +1 -0
  63. package/dist/preview/chunk.VVZ2Z7OS.js +29 -0
  64. package/dist/preview/chunk.WGNF4E67.js +1 -0
  65. package/dist/preview/chunk.WTF3CP76.js +1 -0
  66. package/dist/preview/chunk.WWRWXFYR.js +0 -0
  67. package/dist/preview/chunk.XEJS2VS5.js +8 -0
  68. package/dist/preview/chunk.XYZ7KAMZ.js +1 -0
  69. package/dist/preview/chunk.Y235YZSZ.js +8 -0
  70. package/dist/preview/chunk.YAONM74M.js +19 -0
  71. package/dist/preview/chunk.YSYT3ASK.js +1 -0
  72. package/dist/preview/chunk.YU64JSAL.js +1 -0
  73. package/dist/preview/chunk.ZFUQA3KT.js +1 -0
  74. package/dist/preview/chunk.ZKUXPS44.js +2 -0
  75. package/dist/preview/chunk.ZQZ557VR.js +1 -0
  76. package/dist/preview/index.html +13 -0
  77. package/dist/preview/page.js +34 -0
  78. package/package.json +7 -7
@@ -0,0 +1 @@
1
+ import{d as v}from"./chunk.SQD7ZPEJ.js";import{H as G,I as Q,L,O as V,S as O,Sb as B,T as D,U as Y,Ua as nn,_ as X,ma as M,na as Z}from"./chunk.Y235YZSZ.js";var T=c=>c.filter(Boolean).join(" "),tn=new Set(["tell","me","about","what","how","show","describe","the","a","an","and","please"]),dn=new Set([...tn,"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"]),en=c=>c.length<=1?O(c[0]??"something"):`${c.slice(0,-1).map(O).join(", ")} and ${O(c[c.length-1])}`;function wn(c={}){return async(t,g,u={})=>{let w=g.toLowerCase(),h=n=>Q(t.schema.tryDefinition(n.kind),n),y=(await import("./chunk.KFLY4MAT.js")).goingFrom(t,g,u,c.today);if(y.reply)return y.reply;let C=y.told,S=n=>y.moves?{...n,moves:y.moves}:n,p=[],R=w.split(/[^a-z0-9]+/).filter(Boolean),q=new Set;for(let n=0;n<R.length;n++){let e="";for(let s=n;s<Math.min(R.length,n+6);s++)e+=R[s],q.add(e)}let I=n=>n.toLowerCase().replace(/[^a-z0-9]+/g,""),E=[...t.graph.allNodes()].map(n=>({node:n,label:I(h(n))})).filter(({label:n})=>n.length>=2&&q.has(n)).sort((n,e)=>e.label.length-n.label.length),N=new Map;for(let{label:n}of E)N.set(n,(N.get(n)??0)+1);for(let{node:n,label:e}of E)(N.get(e)??0)>1||p.some(s=>s.id===n.id)||p.push(n);for(let n of u.selection??[]){let e=t.graph.getNode(n);e&&!p.some(s=>s.id===e.id)&&p.push(e)}let F=C&&t.graph.getNode(C);if(F){let n=p.findIndex(e=>e.id===F.id);n>=0&&p.splice(n,1),p.unshift(F)}let b=t.violations(),j=(n=b)=>ln(n);if(y.problems||!C&&/\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=v(t,j().slice(0,4)),e=(a,i)=>{let d=t.allMutations().find(l=>l.name===a),r=d?B(d.input).find(l=>l.name===i):void 0;return r?.control==="node"&&!r.kinds.includes("*")?r.kinds.map(l=>D(t.schema.tryDefinition(l),l)).join(" or "):L(i).toLowerCase()},s=[...new Set(b.flatMap(a=>a.repairs).flatMap(a=>(a.missing??[]).map(i=>e(a.mutation,i))))];return S({say:T([y.moves?.[0]?.said??"",`${Z(b)}:`,b.slice(0,4).map(a=>a.message).join("; ")+(b.length>4?"\u2026":"."),n.length>0?"The repairs below come from the rules themselves.":s.length>0?`The rules name a way to fix ${b.length===1?"it":"these"}, but it needs ${en(s)} chosen \u2014 select the record and its own actions will ask.`:"No rule here names a way to fix it."]),proposals:n,grounded:!0})}let H=/\?\s*$/.test(g)||/^\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),$=H?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=g.slice(g.toLowerCase().indexOf(($.title??$.name).toLowerCase())+($.title??$.name).length),a=p.reduce((r,l)=>{let f=h(l).toLowerCase(),m=r.toLowerCase().indexOf(f);return m<0?r:`${r.slice(0,m)} it${r.slice(m+f.length)}`},s),i=g.match(/"([^"]+)"/)?.[1]??a.match(/^(?:\s+(?:it|this|that|them))?\s+(?:to|as)\s+(.+?)\s*[.!]?$/i)?.[1],d=[...p];for(let r of B($.input)){let l=gn(r,d,i,c.today??u.today,w);if(l!==void 0){n[r.name]=l;let f=d.findIndex(m=>m.id===l);f>=0&&d.splice(f,1)}else r.optional||e.push(X(t.schema,$,r.name).label.toLowerCase())}return e.length===0?{say:"I can do that. Review it below.",proposals:v(t,[{mutation:$.name,args:n,why:"you asked in words"}])}:{say:`\u201C${$.title??L($.name)}\u201D needs ${en(e)} \u2014 say ${e.length===1?"it":"them"} (or select ${e.length===1?"it":"them"}) and ask again.`,proposals:[]}}let sn={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=R.map(n=>sn[n]).find(Boolean),K=(n,e,s)=>{let a=t.schema.tryDefinition(n)?.display?.format?.[e];return a?a(s):String(s)},P=n=>{let e=t.schema.tryDefinition(n.kind)?.fieldRoles;if(!e?.start)return null;let s=n[e.start],a=e.end?n[e.end]:void 0,i=e.day?n[e.day]:e.days?n[e.days]:void 0;return s===void 0&&a===void 0?null:[s!==void 0?K(n.kind,e.start,s):null,a!==void 0&&e.end?`\u2013${K(n.kind,e.end,a)}`:null,Array.isArray(i)?` on ${i.join(", ")}`:i!==void 0?` on ${String(i)}`:null].filter(Boolean).join("")||null},on=n=>{let e=[];for(let s of t.graph.allEdges()){let a=s.from===n?s.to:s.to===n?s.from:null;if(!a)continue;let i=t.graph.getNode(a);i&&!e.some(d=>d.id===i.id)&&e.push(i)}return e},_=n=>{let e=p[0];if(!e)return[];let s=[];for(let i of on(e.id)){let d=0,r=I(h(i));for(let l of R)l.length>2&&r.includes(l)&&(d+=1);if(x){let l=t.schema.tryDefinition(i.kind)?.fieldRoles,f=l?.day?i[l.day]:void 0,m=l?.days?i[l.days]:void 0;f===x?d+=4:Array.isArray(m)&&m.includes(x)&&(d+=1)}n&&!P(i)||d>0&&s.push({node:i,score:d})}let a=s.sort((i,d)=>d.score-i.score).map(i=>i.node);return n&&P(e)?a.unshift(e):n||a.push(e),a};if(p.length>0&&/\bwhen\b/.test(w)){let n=_(!0)[0]??null,e=n?P(n):null;if(n&&e)return S({say:`${h(n)} runs ${e}.`,proposals:v(t,j(M(b,[n.id])).slice(0,3)),grounded:!0})}if(p.length>0&&/\bwho(m|se)?\b/.test(w))for(let n of _(!1)){let e=[],s=new Set;for(let a of t.schema.definitions)for(let[i,d]of Object.entries(a.edges)){let r=/\bwho\b/i.test(d.description??""),l=/\bwho\b/i.test(d.inverse??"");if(!r&&!l||s.has(i))continue;s.add(i);let f=[...t.graph.in(n.id,i),...t.graph.out(n.id,i)];if(f.length===0)continue;let m=r?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:v(t,j(M(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=R.every(o=>e.has(o)||tn.has(o)),a=H||s,i=t.schema.tryDefinition(n.kind),d=o=>o===o.toUpperCase()?o:o.charAt(0).toLowerCase()+o.slice(1),r=Y(n,i,{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=M(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 W=`${o.kind}|${k}`;if(!f.has(W)){let z;for(let an of t.schema.definitions){let A=an.edges[o.kind];if(A&&(z=k==="out"?A.description:A.inverse??A.description,z))break}f.set(W,{sentence:z??L(o.kind).toLowerCase(),names:[]})}let U=f.get(W);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:T([y.moves?.[0]?.said??"",`${h(n)} \u2014 ${O(D(t.schema.tryDefinition(n.kind),n.kind))}${r?` (${r})`:""}.`,m?`${m}.`:"Connected to nothing yet.",l.length>0?`Trouble: ${l.map(o=>o.message).join("; ")}.`:"Nothing about it is broken."]),proposals:v(t,j(l).slice(0,3)),...a||C?{grounded:!0}:{}})}{let n=w.split(/[^\p{L}\p{N}]+/u).filter(e=>e.length>0&&!dn.has(e));if(n.length>0){let e=nn(t,n.join(" "),{...u.principal?{principal:u.principal}:{},...u.selection?{from:u.selection}:{},...c.today??u.today?{today:c.today??u.today}:{},limit:6}),s=e.hits.filter(a=>a.about==="node");if(s.length>0){let a=G(s.flatMap(r=>{let l=t.graph.getNode(r.id);return l?[l]:[]}),r=>t.schema.tryDefinition(r)),i=s.map(r=>`${r.label}${a.has(r.id)?` \xB7 ${a.get(r.id)}`:""} (${D(t.schema.tryDefinition(r.kind),r.kind)}${r.why.field==="label"?"":`, ${r.why.reading.toLowerCase()}: ${r.why.fragment}`})`);return{say:`${e.total===1?"One thing is":`${un(e.total)} things are`} called \u201C${e.words}\u201D \u2014 ${i.join("; ")}${e.total>s.length?`; and ${e.total-s.length} more`:""}.`,proposals:[],picks:s}}}}let rn=t.schema.kinds.filter(n=>!t.modules.disabledKinds.has(n)).map(n=>{let e=V(t.schema,n);return`${t.graph.nodesOfKind(n).length} ${e}`}).join(", ");return{say:T([`This graph holds ${rn}.`,"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 g=t.repairs.find(u=>!u.missing?.length);return g?[{mutation:g.mutation,args:{...g.args},why:t.message}]:[]})}var cn=["No","One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten"],un=c=>cn[c]??String(c);function gn(c,t,g,u,w=""){switch(c.control){case"node":return t.find(y=>c.kinds.includes("*")||c.kinds.includes(y.kind))?.id;case"text":return g;case"date":{let h=u??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(C=>C.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean).every(S=>h.has(S)));return y.length===1?y[0]:void 0}default:return}}function bn(c){return async(t,g,u={})=>(await import("./chunk.75WDSWXL.js")).answerWithModel(c,t,g,u)}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,g,u]=c.split("-").map(Number);return`${u} ${fn[g-1]??""} ${t}`}export{wn as a,ln as b,bn as c};
@@ -0,0 +1 @@
1
+ import{a as H,b as N,c as C,d as de,e as le}from"./chunk.ENMNLR73.js";import{g as l}from"./chunk.LZQZP2PD.js";import{B as ce,a as G,b as K,d as te,e as ie,f as O,g as p,j,k as oe,l as R,m as re,n as E,o as b,q as g,r as se,s as w,t as m,u as _,v,w as i,x as F,y as ae}from"./chunk.Y235YZSZ.js";var Oe="graview-document",je=1,sn=256*1024,X=64*1024,ue=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,J=/^[a-z][A-Za-z0-9]*$/,Re=new Set(["id","kind"]),Ee=e=>e in Object.prototype,fe=F(e=>!Ee(e),"every object already has this name \u2014 choose another"),pe=(e,n)=>[...e===void 0?[]:[ie(e)],...n===void 0?[]:[te(n)]],f=(e,n)=>p().check(...pe(e,n)),h=(e,n,s)=>b(e).check(...pe(n,s)),z=e=>p().check(O(ue,`${e} names are lower-case words joined by hyphens, like "booked-vendor"`)),Ae=/^(?:[a-z][a-z0-9]*(?:-[a-z0-9]+)*|[a-z][A-Za-z0-9]*)$/,I=p().check(O(Ae,'relation names are one camelCase word, like "tendedBy"'),fe),x=p().check(O(J,'field names are one word or camelCase, like "dueDate" \u2014 rules say them bare'),F(e=>!Re.has(e),'a field cannot be called "id" or "kind" \u2014 the framework keeps those; try "type" or "category"'),fe),A=f(1,500),M=f(1,2e3),q=f(1,300),Fe=["string","text","number","integer","boolean","date","datetime","enum","list","url","email"],ge=g({type:_(Fe),required:i(R()),description:i(A),label:i(f(1,60)),options:i(h(f(1,80),1,100)),of:i(_(["string","number","date"])),default:i(E()),unit:i(f(void 0,12)),format:i(_(["money","percent","duration"])),min:i(j()),max:i(j()),step:i(j()),renamedFrom:i(p().check(O(J)))}).check(ae((e,n)=>{e.type==="enum"&&!e.options&&n.addIssue({code:"custom",message:'an enum field lists its "options"',path:["options"]}),e.type!=="enum"&&e.options&&n.addIssue({code:"custom",message:'"options" belongs only on an enum field',path:["options"]}),e.type!=="list"&&e.of&&n.addIssue({code:"custom",message:'"of" belongs only on a list field',path:["of"]})})),Ve=g({to:w([h(z("kind"),1),v("*")]),cardinality:i(_(["one","many"])),description:i(A),inverse:i(f(1,80)),appendOnly:i(R()),renamedFrom:i(p())}),ye=w([M,g({expr:M,label:i(f(1,60)),description:i(A)})]),Te=g({noun:i(f(1,40)),plural:i(f(1,40)),description:i(A),fields:m(x,ge).check(F(e=>Object.keys(e).length>0,"a kind has at least one field")),label:i(q),describe:i(q),lifecycle:i(g({field:x,retired:h(w([p(),j(),R()]),1)})),figure:i(f(void 0,2e4)),glance:i(h(x,1,20)),page:i(g({fields:i(h(x,1,40)),groups:i(h(g({title:f(1,60),fields:h(x,1,40)}),1,12))})),edges:i(m(I,Ve)),computed:i(m(p(),ye).check(F(e=>Object.keys(e).length<=20,"a kind works out at most 20 computed fields"))),fieldRoles:i(m(p(),p())),renamedFrom:i(p().check(O(ue)))}),B=w([p(),j(),R(),re(),b(E()),g({expr:M})]),D=p().check(O(/^\$[A-Za-z][A-Za-z0-9]*$/,'a reference is "$" and a name, like "$subject" or "$new"')),_e=w([g({create:z("kind"),as:i(p().check(O(J))),set:i(m(x,B))}),g({set:m(x,B),target:i(D)}),g({connect:I,from:D,to:D}),g({sever:I,from:D,to:D}),g({remove:D})]),De=g({title:i(f(1,80)),description:i(A),fromTheOtherEnd:i(f(1,80)),on:i(w([z("kind"),h(z("kind"),1)])),creates:i(z("kind")),sets:i(m(x,B)),writes:i(h(x,1)),connects:i(I),severs:i(I),setsOther:i(m(x,B)),replaces:i(w([v(!0),h(I,1,10)])),removes:i(v(!0)),args:i(m(x,ge)),effects:i(h(_e,1,20)),allowedWhen:i(M),refusal:i(q),destructive:i(R())}),Ie=g({act:z("act"),label:i(f(1,80)),args:i(m(p(),B))}),Me=g({title:i(f(1,120)),description:i(A),over:w([v("graph"),z("kind")]),when:i(M),require:M,says:i(q),repairs:i(h(Ie,void 0,10))}),Le=g({roles:w([h(z("role"),1),v("*")]),mutations:w([h(z("act"),1),v("*")]),kinds:i(w([b(z("kind")),v("*")])),describe:i(A),self:i(R())}),Ke=g({roles:w([h(z("role"),1),v("*")]),kinds:h(z("kind"),1),own:i(R())}),Be=g({grants:b(Le),sees:i(b(Ke))}),Ge=g({accent:i(p().check(O(/^#[0-9a-fA-F]{6}$/,'an accent is a color like "#c2577a"'))),name:i(f(1,60)),currency:i(p().check(O(/^[A-Z]{3}$/,'a currency is its three-letter code, like "USD" or "EUR"'))),locale:i(f(2,35)),logo:i(w([f(1,X),g({src:f(1,X),alt:i(f(1,120))})])),favicon:i(f(1,X)),typography:i(g({display:i(f(1,200)),body:i(f(1,200)),mono:i(f(1,200))})),shape:i(g({radius:i(j().check(K(0),G(32))),density:i(j().check(K(.75),G(1.5)))})),accents:i(m(p(),j().check(K(0),G(360)))),scheme:i(_(["light","dark","auto"]))}),P=m(p(),E()),Ne=g({card:i(b(E())),row:i(b(E())),page:i(b(E()))}),Ce=se({order:i(b(p())),hide:i(b(p())),first:i(p()),primary:i(h(f(1,80),void 0,40)),scene:i(f(1,40)),pages:i(f(1,40))}),an=g({$schema:i(p()),format:v(Oe),formatVersion:v(je),name:f(1,80),description:i(A),version:i(j().check(oe(),K(1))),kinds:m(z("kind"),Te).check(F(e=>Object.keys(e).length>0,"a document declares at least one kind"),F(e=>Object.keys(e).length<=40,"a document declares at most 40 kinds")),computed:i(m(p(),ye)),acts:i(m(z("act"),De)),rules:i(m(z("rule"),Me)),roles:i(b(z("role"))),policy:i(Be),modules:i(P),lenses:i(b(P)),pages:i(Ce),views:i(m(p(),w([Ne,b(E())]))),brand:i(Ge),settings:i(b(P)),migrations:i(b(P))});var W=e=>e?._zod?.def,Pe=/^\^\\d\{4\}-\\d\{2\}-\\d\{2\}\$$/;function qe(e){let n=W(e),s=!0,r;for(let t=0;n&&t<4;t++){if(n.type==="optional"||n.type==="nullable")s=!1;else if(n.type==="default")s=!1,r=n.defaultValue;else break;n=W(n.innerType)}if(!n)return{why:"it is not a zod field"};let c=ce(e),d={...s?{required:!0}:{},...r!==void 0?{default:r}:{},...c?{description:c}:{}},a=(n.checks??[]).map(t=>W(t));switch(n.type){case"string":{let t=n.format;return t==="email"?{spec:{type:"email",...d}}:t==="url"?{spec:{type:"url",...d}}:t==="date"?{spec:{type:"date",...d}}:t==="datetime"?{spec:{type:"datetime",...d}}:a.some(o=>o?.format==="regex"&&Pe.test(String(o?.pattern?.source??"")))?{spec:{type:"date",...d}}:{spec:{type:"string",...d}}}case"number":{let t={};for(let o of a){let u=o?.value;typeof u=="number"&&(o?.check==="greater_than"&&o.inclusive?t.min=Math.max(t.min??u,u):o?.check==="less_than"&&o.inclusive?t.max=Math.min(t.max??u,u):o?.check==="multiple_of"&&(t.step=u))}return{spec:{type:a.some(o=>o?.format==="safeint"||o?.format==="int")?"integer":"number",...t,...d}}}case"boolean":return{spec:{type:"boolean",...d}};case"enum":{let t=Object.keys(n.entries??{});return t.length>0?{spec:{type:"enum",options:t,...d}}:{why:"it is an enum with no options"}}case"array":{let t=W(n.element),o=t?.type==="number"?"number":t?.type==="string"?"string":void 0;return o?{spec:{type:"list",of:o,...d}}:{why:`it is a list of ${String(t?.type??"something")}, and a document lists words, numbers or dates`}}default:return{why:`it is a ${String(n.type)}, which a document has no field type for`}}}function ln(e){let n=qe(e);return"spec"in n?n.spec:void 0}var Q=["card","row","page"],ee=["good","warn","bad","neutral","accent"],me=["money","percent","date","relative","count"],he=4,U=40,be=["number","money","percent"],We=["card","row"],ze=100,Z={title:[],headline:[],list:["sort","limit","group","empty","as"],text:["tone"],badge:["tone"],field:["as","currency","label"],progress:["label"],group:["direction"],when:["show"],divider:[],figure:["as","currency","label"]},Ze=Object.keys(Z),ke=`{"title": "{name}"}, {"headline": "{count(all('offer'))} offers"}, {"figure": expr, "as"?: "number"|"money"|"percent", "currency"?, "label"?}, {"list": expr, "sort"?, "limit"?, "group"?, "empty"?, "as"?: "card"|"row"}, {"text": "\u2026", "tone"?}, {"badge": "{status}", "tone"?}, {"field": "quote", "as"?, "currency"?, "label"?}, {"progress": {"value": expr, "max": expr}, "label"?}, {"group": [blocks], "direction"?: "row"|"column"}, {"when": expr, "show": [blocks]}, {"divider": true}, {"figure": true}`;function hn(e){return Object.fromEntries(Object.entries(e.views??{}).filter(([,n])=>!Array.isArray(n)))}function bn(e){let n=e.views?.home;return Array.isArray(n)?n:void 0}var Ue={field:()=>!1,relation:()=>!1,figure:!1},Ye=e=>e.kind??"the home",V=(e,n)=>e!==void 0&&Object.hasOwn(e,n),S=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);function $e(e,n,s){let r=H(e);for(let c of r.unknownFunctions)s.findings.push(l("unknown-function",n,`"${c}" is not a function the rule language knows`,"see docs/declaration-document.md#expression-language"));for(let c of r.names){if(s.kind===null){s.findings.push(l("view-name",n,`"${c}" names nothing here: these blocks are about no one record`,"reach records with all('<kind>'), like count(all('offer')) or first(all('party') where role == 'client').name"));continue}c==="id"||s.spec.field(c)||s.spec.relation(c)||s.findings.push(l("view-name",n,`${s.kind} has no field or relation called "${c}"`))}for(let c of r.edges)s.edges.has(c)||s.findings.push(l("view-edge",n,`"${c}" is not a relation any kind declares`));for(let c of r.sweeps)s.kinds.has(c)||s.findings.push(l("view-kind",n,`"${c}" is not a kind this document declares`))}function L(e,n,s){if(typeof e!="string"||e.length===0||e.length>2e3){s.findings.push(l("view-expression",n,`an expression is a line of the rule language, like "status == 'booked'"`));return}try{$e(C(e),n,s)}catch(r){if(!(r instanceof N))throw r;s.findings.push(l("expression",n,`${r.sentence} (at character ${r.at+1})`))}}function ne(e,n,s){if(typeof e!="string"||e.length===0||e.length>300){s.findings.push(l("view-template",n,'a template is words with {field} in braces, like "{name}" or "{quote|money}", at most 300 characters'));return}let r;try{r=le(e)}catch(c){if(c instanceof de||c instanceof N){s.findings.push(l("template",n,c.sentence));return}throw c}for(let c of r)c.expr&&$e(c.expr,n,s)}function He(e,n,s){if(typeof e=="string"){ee.includes(e)||s.findings.push(l("view-tone",n,`"${e}" is not a tone`,`use one of ${ee.join(", ")}, or {"expr": "if(status == 'booked', 'good', 'neutral')"}`));return}if(S(e)&&Object.keys(e).length===1&&"expr"in e){L(e.expr,`${n}.expr`,s);return}s.findings.push(l("view-tone",n,'a tone is a word or {"expr": \u2026}',`one of ${ee.join(", ")}`))}function Y(e,n,s,r){if(!Array.isArray(e)){r.findings.push(l("view-shape",n,"a view is a list of blocks"));return}if(s>he){r.findings.push(l("view-depth",n,`blocks nest at most ${he} deep`,"flatten a group or a condition"));return}e.forEach((c,d)=>Xe(c,`${n}.${d}`,s,r))}function Xe(e,n,s,r){if(r.count++,!S(e)){r.findings.push(l("view-block",n,"a block is an object naming what it shows",`one of ${ke}`));return}let c=Object.keys(e),d=c.filter(o=>Ze.includes(o)&&!(o==="group"&&c.includes("list")));if(d.length===0){r.findings.push(l("view-block",n,`${c.length>0?c.map(o=>`"${o}"`).join(", "):"an empty object"} is not a block Graview knows`,`one of ${ke}`));return}if(d.length>1){r.findings.push(l("view-block",n,`a block is one thing, and this says ${d.map(o=>`"${o}"`).join(" and ")}`,"split it into two blocks"));return}let a=d[0];for(let o of c)o!==a&&o!="key"&&!Z[a].includes(o)&&r.findings.push(l("unknown-key",`${n}.${o}`,`"${o}" is not part of a ${a} block`,Z[a].length>0?`a ${a} block may also say ${Z[a].map(u=>`"${u}"`).join(", ")}`:`a ${a} block says nothing else`));let t=e[a];switch(a){case"title":case"headline":case"text":case"badge":ne(t,`${n}.${a}`,r),"tone"in e&&He(e.tone,`${n}.tone`,r);return;case"field":{if(typeof t!="string"||!r.spec.field(t)){let o=typeof t=="string"&&r.spec.relation(t);r.findings.push(l("view-field",`${n}.field`,`${r.kind} has no field ${typeof t=="string"?`"${t}"`:"by that name"}`,o?`"${t}" is a relation; show it with {"text": "{${t}.name}"}`:void 0))}"as"in e&&!me.includes(e.as)&&r.findings.push(l("view-format",`${n}.as`,`"${String(e.as)}" is not a way to show a field`,`use one of ${me.join(", ")}`)),Se(e,n,r,"field"),"label"in e&&nn(e.label,`${n}.label`,r);return}case"progress":{!S(t)||Object.keys(t).some(o=>o!=="value"&&o!=="max")||!("value"in t)||!("max"in t)?r.findings.push(l("view-progress",`${n}.progress`,'progress is {"value": expression, "max": expression}')):(L(t.value,`${n}.progress.value`,r),L(t.max,`${n}.progress.max`,r)),"label"in e&&ne(e.label,`${n}.label`,r);return}case"group":"direction"in e&&e.direction!=="row"&&e.direction!=="column"&&r.findings.push(l("view-direction",`${n}.direction`,`a group runs "row" or "column", not "${String(e.direction)}"`)),Y(t,`${n}.group`,s+1,r);return;case"when":L(t,`${n}.when`,r),"show"in e?Y(e.show,`${n}.show`,s+1,r):r.findings.push(l("view-when",n,'a condition says what it shows: {"when": expr, "show": [blocks]}'));return;case"figure":if(typeof t=="string")return Je(e,n,r);for(let o of["as","currency","label"])o in e&&r.findings.push(l("unknown-key",`${n}.${o}`,`"${o}" belongs to a figure that works a number out; {"figure": true} is the kind's picture`,`write {"figure": "count(all('offer'))", "as": "number"}`));t!==!0?r.findings.push(l("view-block",`${n}.figure`,`a figure is a number worked out, {"figure": "sum(all('offer'), net)", "as": "money"}, or the kind's picture, {"figure": true}`)):r.spec.figure||r.findings.push(l("view-figure",`${n}.figure`,`${Ye(r)} has no figure to show`,r.kind===null?`work a number out: {"figure": "count(all('offer'))"}`:'give the kind a "figure", or leave this block out'));return;case"list":return en(e,n,r);case"divider":t!==!0&&r.findings.push(l("view-block",`${n}.${a}`,`write {"${a}": true}`));return}}function Je(e,n,s){L(e.figure,`${n}.figure`,s),"as"in e&&!be.includes(e.as)&&s.findings.push(l("view-format",`${n}.as`,`"${String(e.as)}" is not a way to say a figure`,`use one of ${be.join(", ")}`)),Se(e,n,s,"figure"),"label"in e&&ne(e.label,`${n}.label`,s)}function Se(e,n,s,r){"currency"in e&&(typeof e.currency!="string"||!/^[A-Z]{3}$/.test(e.currency)?s.findings.push(l("view-currency",`${n}.currency`,'a currency is its three-letter code, like "USD" or "EUR"')):e.as!=="money"&&s.findings.push(l("view-currency",`${n}.currency`,`a currency belongs on a ${r} shown as money`,'add "as": "money"')))}function Qe(e,n){let s=[...n.kinds],r=(d,a)=>{let t=new Set;for(let o of d){let u=n.vocabulary.namesOf(o)?.targets?.(a);if(u==="*")return s;for(let y of u??[])t.add(y)}return t.size>0?[...t]:void 0},c=d=>{switch(d.t){case"ident":return n.kind!==null&&n.spec.relation(d.name)?r([n.kind],d.name):void 0;case"member":{let a=c(d.object);return a?r(a,d.name):void 0}case"where":return c(d.set);case"call":{let a=d.args[0],t=a?.t==="lit"&&typeof a.value=="string"?a.value:void 0;if(d.fn==="all")return t!==void 0&&n.kinds.has(t)?[t]:void 0;let o=d.args.length===2&&d.args[1]?.t==="lit"&&typeof d.args[1].value=="string"?d.args[1].value:void 0;if(d.fn==="out"&&o!==void 0){let u=c(a);return u?r(u,o):void 0}if(d.fn==="out")return t!==void 0&&n.kind!==null?r([n.kind],t):void 0;if(d.fn==="in"){let u=o??t,y=o!==void 0?c(a):n.kind!==null?[n.kind]:void 0,k=u!==void 0?n.vocabulary.sources(u).filter($=>{let T=n.vocabulary.namesOf($)?.targets?.(u);return!y||T==="*"||y.some(xe=>T?.includes(xe))}):[];return k.length>0?k:void 0}if((d.fn==="sort"||d.fn==="first")&&a)return c(a);if(d.fn==="either"){let u=d.args.map(c);return u.every(y=>y!==void 0)?[...new Set(u.flatMap(y=>y??[]))]:void 0}return}default:return}};return c(e)}function we(e,n,s,r){let c;try{c=C(e)}catch(a){if(!(a instanceof N))throw a;r.findings.push(l("expression",n,`${a.sentence} (at character ${a.at+1})`));return}let d=H(c);for(let a of d.unknownFunctions)r.findings.push(l("unknown-function",n,`"${a}" is not a function the rule language knows`,"see docs/declaration-document.md#expression-language"));for(let a of d.edges)r.edges.has(a)||r.findings.push(l("view-edge",n,`"${a}" is not a relation any kind declares`));if(s)for(let a of d.names)a==="id"||s.some(t=>r.vocabulary.namesOf(t)?.field(a)||r.vocabulary.namesOf(t)?.relation(a))||r.findings.push(l("view-name",n,`${s.join(" and ")} ${s.length===1?"has":"have"} no field or relation called "${a}"`))}function en(e,n,s){let r=e.list;L(r,`${n}.list`,s);let c;if(typeof r=="string")try{c=Qe(C(r),s)}catch{c=void 0}let d=t=>{if(!c)return[...s.kinds].map(u=>s.vocabulary.namesOf(u)?.choices?.(t)).find(u=>u!==void 0);let o=c.map(u=>s.vocabulary.namesOf(u)?.choices?.(t));return o.every(u=>u!==void 0)?[...new Set(o.flatMap(u=>u??[]))]:void 0},a=c?c.join(" and "):"any kind";if("sort"in e){let t=e.sort;if(typeof t=="string")we(t,`${n}.sort`,c,s);else if(S(t)&&typeof t.by=="string"&&Object.keys(t).every(o=>o==="by"||o==="direction")){let o=t.direction;o!==void 0&&o!=="asc"&&o!=="desc"&&o!=="choices"?s.findings.push(l("list-sort",`${n}.sort.direction`,`a list is sorted "asc", "desc" or "choices", not "${String(o)}"`,'"choices" puts a choice field in the order its choices are declared')):o==="choices"?d(t.by)===void 0&&s.findings.push(l("list-sort",`${n}.sort.by`,`"${t.by}" is not a choice field of ${a}, so it has no declared order`,'sort by a choice field, or say "asc" or "desc"')):we(t.by,`${n}.sort.by`,c,s)}else s.findings.push(l("list-sort",`${n}.sort`,'a sort is a key, like "net", or {"by": key, "direction": "asc" | "desc" | "choices"}'))}if("limit"in e){let t=e.limit;(typeof t!="number"||!Number.isInteger(t)||t<1||t>ze)&&s.findings.push(l("list-limit",`${n}.limit`,`a limit is a whole number from 1 to ${ze}`))}if("group"in e){let t=e.group,o=typeof t=="string"?t:S(t)&&typeof t.by=="string"?t.by:void 0;if(!(typeof t=="string"||S(t)&&Object.keys(t).every(y=>y==="by"||y==="headings"))||o===void 0)s.findings.push(l("list-group",`${n}.group`,'a group is a choice field, like "type", or {"by": "type", "headings": {"pain": "What hurts"}}'));else{let y=d(o);if(y===void 0&&s.findings.push(l("list-group",`${n}.group`,`"${o}" is not a choice field of ${a}, so it has no choices to group by`,"group by a field whose type is enum")),S(t)&&"headings"in t){let k=t.headings;if(!S(k)||Object.values(k).some($=>typeof $!="string"||$.length===0||$.length>80))s.findings.push(l("list-group",`${n}.group.headings`,'headings are words per choice, like {"pain": "What hurts"}, at most 80 characters each'));else if(y)for(let $ of Object.keys(k))y.includes($)||s.findings.push(l("list-group",`${n}.group.headings.${$}`,`"${$}" is not one of ${o}'s choices`,`use ${y.join(", ")}`))}}}"empty"in e&&(typeof e.empty!="string"||e.empty.length===0||e.empty.length>200)&&s.findings.push(l("list-empty",`${n}.empty`,"what an empty list says is a sentence, at most 200 characters")),"as"in e&&!We.includes(e.as)&&s.findings.push(l("list-as",`${n}.as`,`a list draws each record as its "card" or its "row", not "${String(e.as)}"`))}function nn(e,n,s){(typeof e!="string"||e.length===0||e.length>60)&&s.findings.push(l("view-label",n,"a label is a few words, at most 60 characters"))}function ve(e,n,s,r,c,d,a){let t={kind:null,spec:Ue,kinds:r,edges:c,vocabulary:s,findings:d,count:0};Array.isArray(e)&&e.length===0&&d.push(l("view-shape",n,`${a} has no blocks`,'give it one: {"headline": "\u2026"}')),Y(e,n,1,t),t.count>U&&d.push(l("view-size",n,`${a} has ${t.count} blocks; a view has at most ${U}`,"show less"))}function tn(e,n,s,r,c){Array.isArray(e)&&e.forEach((d,a)=>{if(!S(d)||d.name!=="blocks"||!S(d.options)||!("blocks"in d.options))return;let t=[];ve(d.options.blocks,`lenses.${a}.options.blocks`,n,s,r,t,`the lens "${String(d.title??a)}"`);for(let o of t)c.push({...o,severity:"warning"})})}function on(e,n,s,r,c,d,a){let t=[];if(e===void 0)return t;if(!S(e))return t.push(l("view-shape",n,'views are an object of kinds, each with a "card", a "row" or a "page"')),t;for(let[o,u]of Object.entries(e)){if(o==="home"&&Array.isArray(u)){ve(u,`${n}.home`,a,r,c,t,"the home");continue}let y=s(o);if(!y){t.push(l("view-kind",`${n}.${o}`,`"${o}" is not a kind this ${d} declares`));continue}if(!S(u)){t.push(l("view-shape",`${n}.${o}`,`a kind's views are {"card": [blocks], "row": [blocks], "page": [blocks]}`));continue}for(let k of Object.keys(u))Q.includes(k)||t.push(l("view-slot",`${n}.${o}.${k}`,`"${k}" is not a place a view is drawn`,`use ${Q.map($=>`"${$}"`).join(", ")}`));for(let k of Q){let $=u[k];if($===void 0)continue;let T={kind:o,spec:y,kinds:r,edges:c,vocabulary:a,findings:t,count:0};Y($,`${n}.${o}.${k}`,1,T),T.count>U&&t.push(l("view-size",`${n}.${o}.${k}`,`this ${k} has ${T.count} blocks; a view has at most ${U}`,"show less, or move detail to the page"))}}return t}function zn(e){let n=new Set(Object.keys(e.kinds)),s=new Set(Object.values(e.kinds).flatMap(a=>Object.keys(a.edges??{}))),r=a=>{let t=V(e.kinds,a)?e.kinds[a]:void 0;return t?{field:o=>V(t.fields,o)||V(t.computed,o),relation:o=>V(t.edges,o),figure:t.figure!==void 0,choices:o=>V(t.fields,o)&&t.fields[o].type==="enum"?t.fields[o].options:void 0,targets:o=>V(t.edges,o)?t.edges[o].to:void 0}:void 0},c={namesOf:r,sources:a=>Object.keys(e.kinds).filter(t=>V(e.kinds[t].edges,a))},d=on(e.views,"views",r,n,s,"document",c);return tn(e.lenses,c,n,s,d),d}export{Oe as a,je as b,sn as c,an as d,ln as e,ee as f,me as g,be as h,ze as i,hn as j,bn as k,zn as l};
@@ -0,0 +1 @@
1
+ import{b as m}from"./chunk.AZYJTNSM.js";import"./chunk.VVZ2Z7OS.js";import"./chunk.EQOU4POV.js";import"./chunk.ONDILMIX.js";import{f as g}from"./chunk.NOXC454O.js";import"./chunk.4UQLZ7VW.js";import"./chunk.DN4D4HGX.js";import"./chunk.DJ26NOOW.js";import"./chunk.SQD7ZPEJ.js";import"./chunk.IKT7JQUW.js";import"./chunk.6CLHFNDM.js";import"./chunk.R5K7NK4U.js";import"./chunk.HCK6IHGP.js";import"./chunk.YAONM74M.js";import"./chunk.CJQL7AHT.js";import"./chunk.BQV62QEL.js";import"./chunk.DAKED3WK.js";import"./chunk.WWRWXFYR.js";import"./chunk.ZFUQA3KT.js";import"./chunk.DO4P2UK4.js";import"./chunk.6KJSFIO7.js";import"./chunk.FLJP3BGP.js";import"./chunk.ENMNLR73.js";import"./chunk.LZQZP2PD.js";import"./chunk.SCLIBKLS.js";import"./chunk.ACZGK7LQ.js";import"./chunk.AHDOKM4O.js";import"./chunk.3MLQ3Q5X.js";import"./chunk.LGUV2J6Q.js";import"./chunk.4JSMCNF7.js";import{va as n}from"./chunk.Y235YZSZ.js";import{a as b,b as l}from"./chunk.MRK6QJV5.js";import{b as t}from"./chunk.AJZBJBMO.js";var y=t(b(),1),a=t(l(),1);function P({store:h,auto:c,brand:r,views:f,presence:i,steering:o,overview:s,scope:d,titleLevel:v=2,props:e}){let u=(0,y.useMemo)(()=>g({scope:`.${d}`}),[d]);return(0,a.jsxs)("div",{"data-embed-content":"",style:c?{flex:"0 0 auto",background:"var(--graview-ground)"}:{flex:"1 1 auto",minHeight:0,overflow:"auto",background:"var(--graview-ground)"},children:[(0,a.jsx)("style",{children:u}),(0,a.jsx)("div",{"data-embed-measure":"",style:{display:"flow-root"},children:(0,a.jsx)(m,{context:{store:h,embedded:!0,...e.bar!==!1?{barAbove:!0}:{},...s?{overview:s}:{},titleLevel:v,views:f,settings:e.app.settings??[],...i?{presence:i}:{},...r?{brand:r}:{},...e.principal?{principal:e.principal}:{},...e.seats?{seats:e.seats}:{},...e.people?{people:e.people}:{}},...e.pages?{registry:e.pages}:{},...o?{steering:o}:{},...e.routing==="address"?n(e.basePath)===""?{}:{basename:n(e.basePath)}:{initialPath:e.path??"/"},...e.path!==void 0?{path:e.path}:{},...e.onNavigate?{onNavigate:e.onNavigate}:{}})})]})}export{P as PagesContent};
@@ -0,0 +1,2 @@
1
+ import{f as O,k as b}from"./chunk.LZQZP2PD.js";function K(n,s){return s===1&&["every","some","sum","min","max","sort"].includes(n.fn)}function S(n){let s=new Set,e=new Set,r=[],i=[],o=new Set(O),a=(l,f)=>{switch(l.t){case"lit":return;case"ident":f||s.add(l.name);return;case"list":l.items.forEach(c=>a(c,f));return;case"member":a(l.object,f);return;case"unary":a(l.operand,f);return;case"binary":a(l.left,f),a(l.right,f);return;case"where":a(l.set,f),a(l.filter,!0);return;case"call":{e.add(l.fn);let c=(l.fn==="out"||l.fn==="in")&&l.args.length===2?l.args[1]:l.args[0],h=c?.t==="lit"&&typeof c.value=="string"?c.value:void 0;l.fn==="all"&&h&&r.push(h),(l.fn==="out"||l.fn==="in")&&h&&i.push(h),l.args.forEach((k,x)=>a(k,f||K(l,x)));return}}};return a(n,!1),{names:s,functions:e,unknownFunctions:[...e].filter(l=>!o.has(l)),sweeps:r,edges:i}}var p=class extends Error{constructor(e,r,i){super(`${e} (at character ${r+1} of "${i}")`);this.sentence=e;this.at=r;this.source=i}},q=["||","&&","==","!=","<=",">=","<",">","!","|","&","+","-","*","/","%","(",")","[","]",",","."],F={and:"&&",or:"||",not:"!"},M=2e3;function I(n){let s=[],e=0;for(;e<n.length;){let r=n[e];if(r===" "||r===" "||r===`
2
+ `||r==="\r"){e++;continue}if(r>="0"&&r<="9"){let o=e;for(;e<n.length&&/[0-9.]/.test(n[e]);)e++;let a=n.slice(o,e),l=Number(a);if(!Number.isFinite(l)||a.split(".").length>2)throw new p(`"${a}" is not a number`,o,n);s.push({k:"num",v:l,at:o});continue}if(r==="'"||r==='"'){let o=e++,a="";for(;e<n.length&&n[e]!==r;)n[e]==="\\"&&e+1<n.length&&e++,a+=n[e++];if(e>=n.length)throw new p("a quoted word is never closed",o,n);e++,s.push({k:"str",v:a,at:o});continue}if(/[A-Za-z_]/.test(r)){let o=e;for(;e<n.length&&/[A-Za-z0-9_]/.test(n[e]);)e++;let a=n.slice(o,e),l=Object.hasOwn(F,a)?F[a]:void 0;s.push(l?{k:"op",v:l,at:o}:{k:"id",v:a,at:o});continue}let i=q.find(o=>n.startsWith(o,e));if(!i)throw new p(`"${r}" is not part of the rule language`,e,n);s.push({k:"op",v:i,at:e}),e+=i.length}return s.push({k:"end",at:n.length}),s}function w(n){if(n.length>M)throw new p(`an expression may be at most ${M} characters`,0,n.slice(0,40));let s=I(n),e=0,r=()=>s[e],i=t=>{let d=r();return d.k==="op"&&d.v===t},o=t=>{let d=r();return d.k==="id"&&d.v===t},a=(t,d)=>{if(!i(t))throw new p(`expected ${d}`,r().at,n);e++},l=0,f=(t,d)=>{if(++l>64)throw new p("the expression nests too deeply",t,n);try{return d()}finally{l--}},c=(t,d)=>()=>{let u=d();for(;;){let y=r(),R=y.k==="op"?t.find(B=>B===y.v):y.k==="id"&&y.v==="in"&&t.includes("in")?"in":void 0;if(!R)return u;e++,u={t:"binary",op:R,left:u,right:d(),at:y.at}}},h=()=>{let t=r();if(t.k==="num")return e++,{t:"lit",value:t.v,at:t.at};if(t.k==="str")return e++,{t:"lit",value:t.v,at:t.at};if(t.k==="id"){if(e++,t.v==="true"||t.v==="false")return{t:"lit",value:t.v==="true",at:t.at};if(t.v==="null")return{t:"lit",value:null,at:t.at};if(i("(")){e++;let d=[];if(!i(")"))for(;;){if(d.push(m()),i(",")){e++;continue}break}return a(")",`")" to close ${t.v}(\u2026)`),{t:"call",fn:t.v,args:d,at:t.at}}return{t:"ident",name:t.v,at:t.at}}if(t.k==="op"&&t.v==="("){e++;let d=f(t.at,m);return a(")",'a ")"'),d}if(t.k==="op"&&t.v==="["){e++;let d=[];if(!i("]"))for(;;){if(d.push(m()),i(",")){e++;continue}break}return a("]",'a "]" to close the list'),{t:"list",items:d,at:t.at}}throw t.k==="end"?new p("the expression ends too soon",t.at,n):new p(`"${t.k==="op"?t.v:""}" cannot start a value here`,t.at,n)},k=()=>{let t=h();for(;;){if(i(".")){let d=r();e++;let u=r();if(u.k!=="id")throw new p('expected a field name after "."',u.at,n);e++,t={t:"member",object:t,name:u.v,at:d.at};continue}if(o("where")){let d=r().at;e++,t={t:"where",set:t,filter:f(d,m),at:d};continue}return t}},x=()=>{let t=r();return t.k==="op"&&(t.v==="!"||t.v==="-")?(e++,{t:"unary",op:t.v,operand:f(t.at,x),at:t.at}):k()},T=c(["*","/","%"],x),C=c(["+","-"],T),A=c(["&"],C),v=c(["|"],A),P=()=>{let t=v(),d=r(),u=d.k==="op"&&["==","!=","<","<=",">",">="].includes(d.v)?d.v:d.k==="id"&&d.v==="in"?"in":void 0;return u?(e++,{t:"binary",op:u,left:t,right:v(),at:d.at}):t},$=()=>{let t=r();return t.k==="op"&&t.v==="!"?(e++,{t:"unary",op:"!",operand:f(t.at,$),at:t.at}):P()},z=c(["&&"],$),_=c(["||"],z);function m(){return _()}let N=m();if(r().k!=="end")throw new p("there is more after the end of the expression",r().at,n);return N}function D(n){let s,e=-1,r=0;for(let i=0;i<n.length;i++){let o=n[i];if(s){o==="\\"?i++:o===s&&(s=void 0);continue}o==="'"||o==='"'?s=o:o==="("||o==="["?r++:o===")"||o==="]"?r--:o==="|"&&r===0&&(n[i+1]==="|"?i++:e=i)}return e}var E=/\s*(?:'((?:[^'\\]|\\.)*)'|"((?:[^"\\]|\\.)*)")\s*(,|$)/y;function H(n){let s=n.indexOf(":"),e=(s>=0?n.slice(0,s):n).trim();if(!b.includes(e))throw new g(`"${e}" is not a formatter; use one of ${b.join(", ")}`);let r=[];if(s>=0){let i=n.slice(s+1),o=0;for(;o<i.length;){E.lastIndex=o;let a=E.exec(i);if(!a)throw new g(`"${e}" is told quoted words, like ${e}: 'offer'`);if(r.push((a[1]??a[2]??"").replace(/\\(.)/g,"$1")),o=E.lastIndex,a[3]==="")break}}if(e==="plural"&&(r.length<1||r.length>2))throw new g("plural is told its noun, like {count | plural: 'offer'}, and its plural where English does not make it: plural: 'person', 'people'");if(e!=="plural"&&r.length>0)throw new g(`"${e}" takes nothing after it`);return{format:e,args:r}}var g=class extends Error{constructor(e){super(e);this.sentence=e}};function J(n){let s=[],e=0;for(;e<n.length;){let r=n.indexOf("{",e);if(r<0){s.push({text:n.slice(e)});break}r>e&&s.push({text:n.slice(e,r)});let i=n.indexOf("}",r);if(i<0)throw new g(`a "{" at character ${r+1} is never closed`);let o=n.slice(r+1,i),a=D(o),l=(a>=0?o.slice(0,a):o).trim(),f=a>=0?H(o.slice(a+1)):void 0;s.push({expr:w(l),source:l,...f?{format:f.format}:{},...f&&f.args.length>0?{formatArgs:f.args}:{}}),e=i+1}return s}function j(n){let s=new Map;for(let[e,r]of Object.entries(n?.computed??{}))s.set(e,typeof r=="string"?{expr:r}:r);return s}function te(n){let s=j(n);if(s.size===0)return;let e=new Map;for(let[r,i]of s)try{e.set(r,w(i.expr))}catch(o){if(!(o instanceof p))throw o}return e}function L(n,s,e=new Set){let r=j(n).get(s);if(!r||e.has(s))return!1;let i;try{i=w(r.expr)}catch{return!1}let o=S(i);if(o.edges.length>0||o.sweeps.length>0||[...o.functions].some(c=>c==="out"||c==="in"||c==="all"))return!1;let a=n.fields,l=c=>a instanceof Set?a.has(c):Object.hasOwn(a,c),f=new Set([...e,s]);return[...o.names].every(c=>l(c)||L(n,c,f))}export{S as a,p as b,w as c,g as d,J as e,j as f,te as g,L as h};
@@ -0,0 +1 @@
1
+ import{d as f}from"./chunk.6CLHFNDM.js";import{Mb as y}from"./chunk.Y235YZSZ.js";import{a as S,b as s}from"./chunk.MRK6QJV5.js";import{b as a}from"./chunk.AJZBJBMO.js";var o=a(S(),1),l=a(s(),1);function A({context:e,stop:r,title:t,style:n,className:i,children:g,...p}){let d=y(e.views?.arrangement?.()),c=g??`In ${d==="Scene"?"the scene":d.replace(/^The /,"the ")} \u2197`;if(e.overview){let h=e.overview;return(0,l.jsx)("a",{href:r,...p,...t?{title:t}:{},style:n,...i?{className:i}:{},onClick:x=>{x.preventDefault(),h(r)},children:c})}return e.embedded?null:(0,l.jsx)("a",{href:`${e.sceneHref??"/"}${r}`,...p,...t?{title:t}:{},style:n,...i?{className:i}:{},children:c})}function v(){return(0,l.jsx)("a",{href:"#fresh","data-testid":"start-fresh",title:"Forget every edit made in this browser and return to the example",onClick:e=>{e.preventDefault();let r=new URL(window.location.href);r.searchParams.set("fresh","1"),window.location.assign(r.toString())},style:{color:"inherit",display:"inline-flex",alignItems:"center",minHeight:24,minWidth:24},children:"Start fresh"})}function w(e){let r=(0,o.useRef)(0),t=(0,o.useCallback)(n=>e.subscribe(()=>{r.current+=1,n()}),[e]);return(0,o.useSyncExternalStore)(t,()=>r.current,()=>0)}var m=a(s(),1),u=f.part(e=>(0,m.jsx)(e.ActivityRail,{calls:[]}),{quiet:!0});export{A as a,v as b,w as c,u as d};
@@ -0,0 +1,23 @@
1
+ import{a as ft,b as Rn,c as ht}from"./chunk.ZKUXPS44.js";import{b as $n,c as gt,d as On,e as ut,f as mt,g as pt}from"./chunk.XEJS2VS5.js";import{f as lt}from"./chunk.YAONM74M.js";import{e as st,i as dt,j as ct}from"./chunk.CJQL7AHT.js";import{c as at,d as Cn}from"./chunk.DAKED3WK.js";import{a as rt}from"./chunk.ZFUQA3KT.js";import{i as Z,j as ue,k as Ae}from"./chunk.ACZGK7LQ.js";import{a as it,b as ot}from"./chunk.3MLQ3Q5X.js";import{c as nt,d as tt}from"./chunk.LGUV2J6Q.js";import{Y as Xn,ca as Q,ea as Zn,l as _e,qa as et,ra as Ue,za as Be}from"./chunk.4JSMCNF7.js";import{Ca as Jn,G as Ne,I as pe,N as De,O as en,P as Kn,R as xn,S as Yn,T as nn,Za as Qn,ab as ie,ra as Sn,tb as Re,wb as kn}from"./chunk.Y235YZSZ.js";import{a as ze,b as J}from"./chunk.MRK6QJV5.js";import{b as G}from"./chunk.AJZBJBMO.js";var An=G(J(),1);function Ee(e,t,n){let r=e.nodes?.length??0;if(e.total===void 0||e.total<=r)return n;let a=e.nodes?.[0]?.kind,o=a?en(t,a).toLowerCase():"more";return(0,An.jsxs)("div",{style:{display:"grid",gridTemplateRows:"minmax(0, 1fr) auto",height:"100%",minHeight:0},children:[n,(0,An.jsxs)("p",{"data-testid":"lens-more",style:{margin:"4px 0 0",fontSize:"0.8125rem",color:"var(--graview-ink-muted)"},children:["+",e.total-r," more ",o]})]})}var yt=G(J(),1),rr=(e,t)=>{if(e===!1||t===!1)return!1;let n=e===void 0||e===!0?{}:e,r=t===void 0||t===!0?{}:t;return{sort:n.sort!==!1&&r.sort!==!1,filter:n.filter!==!1&&r.filter!==!1,group:n.group!==!1&&r.group!==!1}},ar=["sort","filter","group","q"];function Ve(e,t={}){let{store:n}=Q(),{view:r,go:a}=Ue(),o=e.nodes??[],g=t.subject??(t.only?o.filter(t.only):o),y=t.subject?[]:t.only?o.filter(i=>!t.only(i)):[],c=t.kind??g[0]?.kind,v=rr(t.allow,t.lensAllows),p=ar.some(i=>r.within?.[i]!==void 0)?it(r):t.arrangedBy??{},d=c?Jn(n.schema,String(c)):void 0,m=d?nt(p,d).arrangement:{},s=tt(g,v===!1?{}:m,{schema:n.schema,graph:n.graph,flagged:new Set(e.flagged??[])}),w=c&&v!==!1&&e.fidelity==="full"&&e.budget===void 0&&g.length>1?(0,yt.jsx)(lt,{schema:n.schema,graph:n.graph,kind:String(c),arrangement:m,allow:v,query:t.query!==!1,onChange:i=>a(ot(r,i)),kept:{shown:s.nodes.length,of:g.length}}):null;return{nodes:[...y,...s.nodes],arranged:s,arrangement:m,bar:w}}function Ke(e,t,n){let r=new Set((n??[]).map(o=>o.kind)),a=new Set((n??[]).map(o=>o.id));return e.allNodes().filter(o=>r.has(o.kind)?a.has(o.id):Ne(t.tryDefinition(o.kind),o))}var Me=G(ze(),1);var T=G(J(),1),ir=["slots","x","y","fill"],tn=class extends Error{constructor(n,r){super(`${n}
2
+ ${r}`);this.hint=r;this.name="BoardBindingError"}},wt=e=>Math.max(0,Math.min(1,e));function En(e,t,n,r){let a=s=>s,o=s=>r?pe(r.tryDefinition(s.kind),s):String(a(s).label??s.id);if(r&&r.tryDefinition(n.slots)===void 0)throw new tn(`No kind is declared for "${n.slots}".`,'Check the lens bindings: { slots: "<kind>", x: "<field>", y: "<field>", fill: "<edge kind>" }');let g=e.filter(s=>s.kind===n.slots);if(!r&&g.length===0)throw new tn(`Nothing to arrange: no "${n.slots}" nodes.`,'Check the lens bindings: { slots: "<kind>", x: "<field>", y: "<field>", fill: "<edge kind>" }');let y=t.filter(s=>s.kind===n.fill),c=new Map(e.map(s=>[s.id,s])),v=new Map(e.map((s,w)=>[s.id,w])),l=g.map(s=>{let w=a(s),i=n.fillFrom==="occupant",x=y.filter(S=>(i?S.to:S.from)===s.id).map(S=>c.get(i?S.from:S.to)).filter(S=>S!==void 0).sort((S,$)=>(v.get(S.id)??0)-(v.get($.id)??0)).map(S=>({id:S.id,label:o(S)}));return{id:s.id,code:String(w[n.slotCode??""]??"").trim()||o(s),label:o(s),x:wt(Number(w[n.x]??.5)),y:wt(Number(w[n.y]??.5)),occupants:x}}).sort((s,w)=>s.y-w.y||s.x-w.x),p=new Set(l.flatMap(s=>s.occupants.map(w=>w.id))),d=new Set([...p].map(s=>c.get(s)?.kind).filter(s=>s!==void 0)),m=e.filter(s=>d.has(s.kind)&&!p.has(s.id)).map(s=>({id:s.id,label:o(s)})).sort((s,w)=>s.label<w.label?-1:s.label>w.label?1:0);return{slots:l,empty:l.filter(s=>s.occupants.length===0).map(s=>s.id),spare:m}}function or({nodes:e,occupants:t,label:n,fidelity:r,mode:a,options:o,schema:g,implicated:y=[],flagged:c=[]}){let{store:v}=Q(),l=Ke(v.graph,v.schema,e),p=t?[...l.filter(h=>h.kind===o.slots),...t.map(h=>v.graph.getNode(h)).filter(h=>h!==void 0)]:l,d=En(p,v.graph.allEdges(),o,g),m=new Set(y),s=new Set(c),w=et(),i=new Map;for(let h of w)for(let I of h.nodeIds)i.set(I,[...i.get(I)??[],h.message]);let x=h=>h?i.get(h)??[]:[];if(r==="glyph")return(0,T.jsx)(ue,{label:`${n??"Board"} \xB7 ${d.slots.length-d.empty.length}/${d.slots.length}`,hue:ie("board")});if(r==="summary"){let h=d.slots.filter(I=>d.empty.includes(I.id));return(0,T.jsx)(Z,{title:n??"Board",meta:`${d.slots.length-d.empty.length}/${d.slots.length}`,tone:h.length>0?"warning":"muted",fit:!0,children:h.length>0?(0,T.jsx)(Ae,{pick:!0,max:5,items:h.map(I=>({id:I.id,label:I.code}))}):(0,T.jsx)("span",{style:{fontSize:"0.8125rem",color:"var(--graview-ink-faint)"},children:"Every slot filled."})})}let S=o.aspect??.68,$=(0,Me.useRef)(null),[M,R]=(0,Me.useState)(!1),[u,k]=(0,Me.useState)(null),f=160,[P,B]=(0,Me.useState)(!1);(0,Me.useEffect)(()=>{let h=$.current;if(!h||typeof ResizeObserver>"u")return;let I=new ResizeObserver(D=>{let q=D[0]?.contentRect;if(!q)return;let b=q.height<f;B(b),R(!b&&S<1&&q.width/q.height>1.3),k(b?null:q.height)});return I.observe(h),()=>I.disconnect()},[S]);let W=(h,I)=>M?{x:1-I,y:h}:{x:h,y:I},H=(()=>{let h=new Map,I=(D,q,b)=>{let C=h.get(b)??{ids:[],codes:[]};C.ids.includes(D)||(C.ids.push(D),C.codes.includes(q)||C.codes.push(q)),h.set(b,C)};for(let D of d.slots){for(let q of x(D.id))I(D.id,D.code,q);for(let q of D.occupants)for(let b of x(q.id))I(q.id,q.label,b)}return[...h.entries()].map(([D,q])=>({id:q.ids[0],code:q.codes.join(", "),text:D}))})(),j=a==="fullscreen",_=H.length===0?null:(0,T.jsxs)("ul",{"data-graview-primitive":"board-key",style:{margin:"2px 0 0",padding:0,listStyle:"none",display:"grid",gap:3,flex:"0 0 auto"},children:[H.slice(0,j?6:2).map(h=>(0,T.jsxs)("li",{"data-graview-pick":h.id,"data-graview-emphasis":m.size===0?"plain":m.has(h.id)?"lit":"dimmed",title:h.text,style:{display:j?"grid":"flex",gap:j?1:7,alignItems:j?"start":"baseline",fontSize:"0.8125rem",lineHeight:1.45,color:"var(--graview-ink-muted)",minHeight:24,width:"fit-content",maxWidth:"100%",padding:j?"2px 0":"3px 6px",marginLeft:j?0:-6,borderRadius:7,cursor:"pointer"},children:[(0,T.jsxs)("span",{style:{flex:"0 0 auto",fontWeight:600,color:"var(--graview-warn)",letterSpacing:"0.02em"},children:["\u26A0 ",h.code]}),(0,T.jsx)("span",{style:{minWidth:0,...j?{}:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},children:h.text})]},h.id)),H.length>(j?6:2)?(0,T.jsxs)("li",{style:{fontSize:"0.8125rem",color:"var(--graview-ink-faint)"},children:["+",H.length-(j?6:2)," more"]}):null]}),se=o.arrange==="shelf",me=d.slots.every(h=>h.code.length<=3&&!/\s/.test(h.code)),le=(h,I)=>{let D=h.occupants.length===0,q=m.size>0&&!m.has(h.id)&&!h.occupants.some(F=>m.has(F.id)),b=s.has(h.id),C=h.occupants.some(F=>s.has(F.id)),N=b,Y=[...x(h.id),...h.occupants.flatMap(F=>x(F.id))],ce=h.occupants.length===1?h.occupants[0]:null,ye=o.pickTarget==="slot"?h.id:ce?ce.id:h.id,re=F=>ce?{}:{"data-graview-pick":F.id,"data-graview-emphasis":m.size===0?"plain":q?"dimmed":"lit"},we=F=>s.has(F.id)?"var(--graview-warn)":"var(--graview-ink-muted)",Fe=o.emptyLabel??"empty";return(0,T.jsxs)("div",{"data-graview-pick":ye,"data-graview-slot":h.id,"data-graview-mark":me?"disc":"token","data-graview-flagged":b&&C?"both":b?"slot":C?"occupant":void 0,"data-graview-emphasis":m.size===0?"plain":q?"dimmed":"lit",title:[D?`${h.label} \u2014 nobody in it`:`${h.occupants.map(F=>F.label).join(", ")} at ${h.label}`,...Y].join(`
3
+ `),style:{...I,display:"grid",justifyItems:me?"center":"start",gap:3,opacity:q?.5:1,transition:"opacity 160ms ease"},children:[me?(0,T.jsxs)("span",{style:{position:"relative",width:34,height:34,borderRadius:999,display:"grid",placeItems:"center",fontSize:"0.75rem",letterSpacing:"0.02em",border:D?"1.5px dashed var(--graview-warn)":`1px solid ${N?"var(--graview-warn)":"var(--graview-edge-bright)"}`,background:D?"transparent":N?"var(--graview-panel-warning)":"var(--graview-panel)",color:D||N?"var(--graview-warn)":"var(--graview-ink)",boxShadow:D?void 0:"var(--graview-lift-low)"},children:[h.code,b&&!D?(0,T.jsx)("span",{"aria-hidden":"true",style:{position:"absolute",top:-3,right:-3,fontSize:"0.6875rem",lineHeight:1,color:"var(--graview-warn)"},children:"\u26A0"}):null]}):(0,T.jsxs)("span",{style:{display:"grid",gap:1,minWidth:0,maxWidth:180,padding:"5px 10px 6px",borderRadius:8,border:D?"1.5px dashed var(--graview-warn)":`1px solid ${N?"var(--graview-warn)":"var(--graview-edge-bright)"}`,background:D?"transparent":N?"var(--graview-panel-warning)":"var(--graview-panel)",boxShadow:D?void 0:"var(--graview-lift-low)"},children:[(0,T.jsxs)("span",{style:{fontSize:"0.8125rem",fontWeight:550,lineHeight:1.25,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",color:D||N?"var(--graview-warn)":"var(--graview-ink)"},children:[h.code,b&&!D?" \u26A0":null]}),D?(0,T.jsx)("span",{style:{fontSize:"0.75rem",lineHeight:1.3,color:"var(--graview-warn)"},children:Fe}):(0,T.jsx)("span",{style:{display:"flex",flexWrap:"wrap",gap:"0 8px",fontSize:"0.75rem",lineHeight:1.3},children:h.occupants.map(F=>(0,T.jsxs)("span",{...re(F),style:{whiteSpace:"nowrap",color:we(F)},children:[F.label,s.has(F.id)?" \u26A0":""]},F.id))})]}),me?D?(0,T.jsx)("span",{style:{fontSize:"0.75rem",whiteSpace:"nowrap",color:"var(--graview-warn)"},children:Fe}):h.occupants.map(F=>(0,T.jsxs)("span",{...re(F),style:{fontSize:"0.75rem",whiteSpace:"nowrap",color:we(F)},children:[F.label,s.has(F.id)?" \u26A0":""]},F.id)):null]},h.id)},O=o.zones??[],L=O.map((h,I)=>({label:h.label,slots:d.slots.filter(D=>D.y>=h.from&&(D.y<h.to||I===O.length-1&&D.y<=h.to))})),A=new Set(L.flatMap(h=>h.slots.map(I=>I.id))),te=d.slots.filter(h=>!A.has(h.id));(te.length>0||L.length===0)&&L.push({label:"",slots:te});let he={boxSizing:"border-box",borderRadius:12,border:"1px solid var(--graview-edge)",background:"linear-gradient(var(--graview-panel-muted), var(--graview-panel-muted)), var(--graview-panel)",overflow:"hidden"};return(0,T.jsxs)(Z,{title:n??"Board",meta:d.slots.length===0?void 0:d.empty.length===0?`all ${d.slots.length} filled`:`${d.empty.length} unfilled`,...j?{style:{flex:"1 1 auto",minHeight:0,height:"100%"}}:{},children:[(0,T.jsxs)("div",{ref:$,style:{display:"flex",gap:28,alignItems:"stretch",justifyContent:"center",flex:"1 1 auto",minHeight:0},children:[j&&_?(0,T.jsxs)("div",{style:{width:260,flex:"0 0 auto",alignSelf:"center",display:"grid",gap:8},children:[(0,T.jsx)("span",{style:{fontSize:"0.75rem",letterSpacing:"0.14em",textTransform:"uppercase",color:"var(--graview-ink-faint)"},children:"What is marked"}),_]}):null,se?(0,T.jsx)("div",{"data-graview-primitive":"board","data-graview-arrange":"shelf",style:{...he,overflow:"auto",flex:"1 1 auto",minWidth:0,alignSelf:"stretch",display:"grid",alignContent:"start"},children:L.map((h,I)=>(0,T.jsxs)("section",{"data-graview-zone":h.label||void 0,style:{display:"grid",gap:8,padding:"10px 14px 14px",...I>0?{borderTop:"1px dashed var(--graview-edge)"}:{}},children:[h.label?(0,T.jsx)("span",{style:{fontSize:"0.6875rem",letterSpacing:"0.14em",textTransform:"uppercase",color:"var(--graview-ink-faint)"},children:h.label}):null,h.slots.length>0?(0,T.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:"10px 12px",alignItems:"flex-start"},children:h.slots.map(D=>le(D,{}))}):(0,T.jsx)("span",{style:{fontSize:"0.75rem",color:"var(--graview-ink-faint)"},children:"nothing here"})]},h.label||`band-${I}`))}):(0,T.jsxs)("div",{style:{display:"flex",gap:5,alignItems:"stretch",minWidth:0,...P?{flex:"1 1 auto",alignSelf:"flex-start"}:{}},children:[!M&&O.length>0?(0,T.jsx)("div",{"aria-hidden":"true",style:{position:"relative",width:15,flex:"0 0 auto",alignSelf:"stretch"},children:O.map(h=>(0,T.jsx)("span",{title:h.label,style:{position:"absolute",top:`${h.from*100}%`,height:`${(h.to-h.from)*100}%`,right:0,writingMode:"vertical-rl",transform:"rotate(180deg)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"0.6875rem",letterSpacing:"0.14em",textTransform:"uppercase",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",color:"var(--graview-ink-faint)"},children:h.label},h.label))}):null,(0,T.jsxs)("div",{"data-graview-primitive":"board","data-graview-arrange":"exact",style:{...he,position:"relative",aspectRatio:`${M?1/S:S}`,...P?{width:"100%",height:"auto",flex:"1 1 auto",minWidth:0,alignSelf:"flex-start"}:{height:"100%",flex:"0 1 auto",...u!==null?{width:Math.round(u*(M?1/S:S))}:{}},maxWidth:"100%"},children:[O.map(h=>(0,T.jsx)("div",{"aria-hidden":"true",style:{position:"absolute",...M?{top:0,bottom:0,left:`${(1-h.to)*100}%`,width:`${(h.to-h.from)*100}%`,borderLeft:"1px dashed var(--graview-edge)"}:{left:0,right:0,top:`${h.from*100}%`,height:`${(h.to-h.from)*100}%`,borderBottom:"1px dashed var(--graview-edge)"}}},h.label)),M?O.map(h=>(0,T.jsx)("span",{"aria-hidden":"true",title:h.label,style:{position:"absolute",bottom:3,left:`${(1-h.to)*100}%`,width:`${(h.to-h.from)*100}%`,textAlign:"center",fontSize:"0.6875rem",letterSpacing:"0.14em",textTransform:"uppercase",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",color:"var(--graview-ink-faint)"},children:h.label},`label-${h.label}`)):null,d.slots.map(h=>le(h,{position:"absolute",left:`${W(h.x,h.y).x*100}%`,top:`${W(h.x,h.y).y*100}%`,transform:"translate(-50%, -50%)",width:"max-content",maxWidth:"100%"}))]})]}),d.spare.length>0?(0,T.jsxs)("div",{style:{display:"grid",gap:6,alignContent:"start",minWidth:0},children:[(0,T.jsx)("span",{style:{fontSize:"0.75rem",letterSpacing:"0.14em",textTransform:"uppercase",color:"var(--graview-ink-faint)"},children:"Not in"}),(0,T.jsx)(Ae,{pick:!0,max:10,items:d.spare.map(h=>({...h,emphasis:m.size===0?"plain":m.has(h.id)?"lit":"dimmed"}))})]}):null]}),j?null:_]})}function vt(e){function t(n){let{store:r}=Q(),a=En(Ke(r.graph,r.schema,n.nodes),r.graph.allEdges(),e,r.schema),g=[...a.slots.flatMap(l=>l.occupants.map(p=>p.id)),...a.spare.map(l=>l.id)].map(l=>r.graph.getNode(l)).filter(l=>l!==void 0),{arranged:y,bar:c}=Ve(n,{...e.arranging!==void 0?{allow:e.arranging}:{},lensAllows:{group:!1},...e.arrangedBy?{arrangedBy:e.arrangedBy}:{},subject:g}),v=(0,T.jsx)(or,{schema:r.schema,...n,options:e,...e.arranging===!1?{}:{occupants:y.nodes.map(l=>l.id)}});return Ee(n,r.schema,c?(0,T.jsxs)("div",{style:{display:"grid",gap:6,height:"100%",minHeight:0,gridTemplateRows:"auto 1fr"},children:[c,v]}):v)}return{name:"board",requiredRoles:[...ir],options:e,View:t,build(n,r,a){return En(n,r,e,a)}}}var un=G(ze(),1);function Mn(e){if(typeof e!="string")return null;let t=/^(\d{4}-\d{2}-\d{2})/.exec(e);return t?t[1]:null}function an(e){if(typeof e!="string")return null;let t=/^\d{4}-\d{2}-\d{2}[T ](\d{2}):(\d{2})/.exec(e);return t?Number(t[1])*60+Number(t[2]):null}var rn=e=>Date.UTC(Number(e.slice(0,4)),Number(e.slice(5,7))-1,Number(e.slice(8,10))),on=e=>new Date(e).toISOString().slice(0,10);function Se(e,t){return on(rn(e)+t*864e5)}function Le(e,t){let n=Number(e.slice(0,4)),r=Number(e.slice(5,7))-1+t,a=Number(e.slice(8,10)),o=new Date(Date.UTC(n,r+1,0)).getUTCDate();return on(Date.UTC(n,r,Math.min(a,o)))}var ln=e=>new Date(rn(e)).getUTCDay();function We(e,t=1){let n=(ln(e)-t+7)%7;return Se(e,-n)}var Pn=e=>`${e.slice(0,7)}-01`;function oe(e,t){return Math.round((rn(t)-rn(e))/864e5)}function Ie(e,t){return Array.from({length:t},(n,r)=>Se(e,r))}var Ye=["January","February","March","April","May","June","July","August","September","October","November","December"],Tn=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],ke=e=>`${Tn[ln(e)]} ${Number(e.slice(8,10))} ${Ye[Number(e.slice(5,7))-1].slice(0,3)}`,Ln=e=>`${String(Math.floor(e/60)).padStart(2,"0")}:${String(e%60).padStart(2,"0")}`;function He(e,t){let n=t?.fieldRoles?.when;return e&&!e.start&&n?{...e,start:n}:e}function bt(e,t){return t===void 0?!1:typeof t=="string"?e[t]===!0:t.is.includes(e[t.field])}var sn=["start"],lr=["day","week","month","quarter","year","agenda"];function dn(e){return e.horizon?["day","week","month","quarter","year","years","agenda"]:lr}function xt(e,t){return e==="years"?t?.title??"Years":`The ${e}`}function St(){let e=new Date;return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`}var Nn=class extends Error{constructor(n,r){super(`The calendar lens has no binding for ${r.map(a=>`"${a}"`).join(", ")} on "${n}". Bind them in the lens declaration: bindings: { ${n}: { start: "<field>" } }.`);this.kind=n;this.missing=r;this.name="CalendarBindingError"}};function Dn(e,t,n){let r=He(t[e.kind],n?.tryDefinition(e.kind));if(!r)return null;let a=e,o=n?.tryDefinition(e.kind)?.fields.shape,g=sn.filter(p=>{let d=r[p];return d?o?!(d in o):!(d in a):!0});if(g.length>0)throw new Nn(e.kind,g);let y=Mn(a[r.start]);if(y===null)return null;let c=(r.end?Mn(a[r.end]):null)??y,v=an(a[r.start]),l=r.label?a[r.label]:void 0;return{id:e.id,kind:e.kind,label:typeof l=="string"&&l.length>0?l:pe(n?.tryDefinition(e.kind),e),from:y,to:oe(y,c)<0?y:c,at:r.allDay&&a[r.allDay]===!0?null:v,allDay:r.allDay&&a[r.allDay]===!0||v===null,done:bt(a,r.done)}}function cn(e,t){return e.filter(n=>oe(n.from,t)>=0&&oe(t,n.to)>=0).sort((n,r)=>n.allDay!==r.allDay?n.allDay?-1:1:n.at!==r.at?(n.at??0)-(r.at??0):n.label.localeCompare(r.label))}function kt(e,t,n){let r=Qn(e.schema,e.allMutations()).get(t)?.get(n)??[],a=new Map(e.allMutations().map(g=>[g.name,g]));for(let g of r){let y=a.get(g),c=y?.subject;if(!y||!c)continue;let v=y.input?.shape??{};if(n in v)return{name:y.name,arg:c.arg}}let o=e.allMutations().find(g=>g.derived?.act==="edit"&&g.derived.kind===t);return o?.subject?{name:o.name,arg:o.subject.arg}:null}var Ct=(e,t)=>({from:Pn(e),to:$t(e),label:`${Ye[Number(e.slice(5,7))-1].slice(0,3)}${t?` ${e.slice(2,4)}`:""}`});function $t(e){return on(Date.UTC(Number(e.slice(0,4)),Number(e.slice(5,7)),0))}function sr(e){let t=Math.floor((Number(e.slice(5,7))-1)/3);return`${e.slice(0,4)}-${String(t*3+1).padStart(2,"0")}-01`}function Ot(e,t,n={}){let r=n.weekStartsOn??1,a=(c,v)=>({from:c,to:c,label:String(Number(c.slice(8,10))),...v?{outside:!0}:{}});if(e==="day")return{title:ke(t),grain:"day",columns:1,cells:[a(t)]};if(e==="week"){let c=We(t,r);return{title:`${ke(c)} \u2013 ${ke(Se(c,6))}`,grain:"day",columns:7,cells:Ie(c,7).map(v=>a(v))}}if(e==="agenda")return{title:`From ${ke(t)}`,grain:"day",columns:1,cells:Ie(t,42).map(c=>a(c))};if(e==="quarter"){let c=sr(t),v=$t(Le(c,2)),l=[];for(let p=We(c,r);oe(p,v)>=0;p=Se(p,7))l.push({from:p,to:Se(p,6),label:`${Number(p.slice(8,10))} ${Ye[Number(p.slice(5,7))-1].slice(0,3)}`,...oe(p,c)>0&&oe(Se(p,6),c)>0?{outside:!0}:{}});return{title:`Q${Math.floor((Number(t.slice(5,7))-1)/3)+1} ${t.slice(0,4)}`,grain:"week",columns:4,cells:l}}if(e==="year"){let c=t.slice(0,4);return{title:c,grain:"month",columns:4,cells:Array.from({length:12},(v,l)=>Ct(`${c}-${String(l+1).padStart(2,"0")}-01`,!1))}}if(e==="years"){let c=Math.max(1,n.horizon?.years??1),v=Number(t.slice(0,4)),l=Array.from({length:c},(p,d)=>String(v+d));return c>dr?{title:`${n.horizon?.title??"Years"} \xB7 ${l[0]}\u2013${l[l.length-1]}`,grain:"year",columns:5,years:l,cells:l.map(p=>({from:`${p}-01-01`,to:`${p}-12-31`,label:p}))}:{title:`${n.horizon?.title??"Years"} \xB7 ${l[0]}\u2013${l[l.length-1]}`,grain:"month",columns:4,years:l,cells:l.flatMap(p=>Array.from({length:12},(d,m)=>Ct(`${p}-${String(m+1).padStart(2,"0")}-01`,!0)))}}let o=Pn(t),g=We(o,r),y=t.slice(0,7);return{title:`${Ye[Number(t.slice(5,7))-1]} ${t.slice(0,4)}`,grain:"day",columns:7,cells:Ie(g,42).map(c=>a(c,c.slice(0,7)!==y))}}function Rt(e,t,n){return e.filter(r=>oe(r.from,n)>=0&&oe(t,r.to)>=0).sort((r,a)=>r.allDay!==a.allDay?r.allDay?-1:1:r.from!==a.from?r.from.localeCompare(a.from):r.at!==a.at?(r.at??0)-(a.at??0):r.label.localeCompare(a.label))}var dr=10;function At(e){return e==="year"?"year":e==="month"?"month":e==="week"?"week":"day"}var Et=G(ze(),1);var ee=G(J(),1);function zn({label:e,glyph:t,onPress:n}){return(0,ee.jsx)("button",{type:"button","aria-label":e,title:e,onClick:n,style:Ge,children:t})}var Ge={minHeight:24,minWidth:24,padding:"2px 9px",borderRadius:6,fontSize:"0.8125rem",borderWidth:1,borderStyle:"solid",borderColor:"transparent",color:"var(--graview-ink-muted)",background:"transparent"},Mt={day:12,week:4,month:3,year:5};function Pt({span:e,weekStartsOn:t,entries:n,today:r,perCell:a,emphasisOf:o,broken:g,hue:y,onOpen:c,onMove:v}){let l=(0,Et.useRef)(null),p=Be(l),d=p===null?e.columns:Math.max(1,Math.floor(p/44)),m=d<e.columns,s=m?d:e.columns,w=!m&&e.grain==="day"&&e.columns===7?Ie(We(e.cells[0]?.from??r,t),7):e.grain==="day"&&e.columns===1?e.cells.map(i=>i.from):null;return m&&e.grain==="day"&&e.columns>1?(0,ee.jsx)("div",{ref:l,"data-calendar-shape":"agenda",style:{display:"grid",minHeight:0,flex:1},children:(0,ee.jsx)(gn,{days:e.cells.map(i=>i.from),entries:n,today:r,emphasisOf:o,broken:g,hue:y,onMove:(i,x)=>v(i,{from:x,to:x,label:x},"day")})}):(0,ee.jsxs)("div",{ref:l,"data-calendar-shape":m?"wrapped":"grid",style:{display:"grid",gap:4,gridTemplateRows:w?"auto 1fr":"1fr",minHeight:0,flex:1},children:[w?(0,ee.jsx)("div",{style:{display:"grid",gridTemplateColumns:`repeat(${s}, minmax(0, 1fr))`,gap:4},children:w.map(i=>(0,ee.jsx)("span",{style:{fontSize:"0.75rem",letterSpacing:"0.16em",textTransform:"uppercase",color:"var(--graview-ink-muted)",textAlign:"center"},children:e.columns===7?Tn[ln(i)]:ke(i)},i))}):null,(0,ee.jsx)("div",{tabIndex:0,"aria-label":`The days of ${e.title}`,style:{display:"grid",gridTemplateColumns:`repeat(${s}, minmax(0, 1fr))`,gridAutoRows:"max-content",gap:4,minHeight:0,overflow:"auto"},children:e.cells.map((i,x)=>{let S=Rt(n,i.from,i.to),$=S.slice(0,a),M=S.slice(a),R=M.filter(k=>g.has(k.id)).length,u=oe(i.from,r)>=0&&oe(r,i.to)>=0;return(0,ee.jsxs)("div",{"data-calendar-day":e.grain==="day"?i.from:void 0,"data-calendar-cell":i.from,"data-calendar-grain":e.grain,"data-calendar-count":S.length,"data-calendar-outside":i.outside||void 0,onDragOver:k=>{k.dataTransfer.types.includes("text/graview-node")&&(k.preventDefault(),k.dataTransfer.dropEffect="move")},onDrop:k=>{let f=k.dataTransfer.getData("text/graview-node");f&&(k.preventDefault(),k.stopPropagation(),v(f,i,e.grain))},style:{minHeight:62,display:"flex",flexDirection:"column",gap:2,padding:4,borderRadius:7,border:"1px solid var(--graview-edge)",background:u?"var(--graview-panel)":"transparent",opacity:i.outside?.45:1},children:[(0,ee.jsxs)("span",{style:{display:"flex",alignItems:"baseline",gap:4},children:[(0,ee.jsx)("span",{style:{fontSize:"0.75rem",fontVariantNumeric:"tabular-nums",color:u?"var(--graview-accent)":"var(--graview-ink-faint)"},children:i.label}),e.grain!=="day"&&S.length>0?(0,ee.jsx)("span",{style:{fontSize:"0.75rem",color:"var(--graview-ink-faint)",marginLeft:"auto"},children:S.length}):null]}),$.map(k=>(0,ee.jsx)(Tt,{entry:k,cell:i,rowStart:x%s===0,emphasis:o(k.id),flagged:g.has(k.id),hue:y(k)},`${k.id}:${i.from}`)),M.length>0?(0,ee.jsxs)("button",{type:"button","data-testid":`calendar-more-${i.from}`,onClick:()=>c(i),title:`Open ${i.label}`,style:{minHeight:24,padding:"1px 5px",fontSize:"0.75rem",borderRadius:5,border:"1px dashed var(--graview-edge)",background:"transparent",color:R>0?"var(--graview-warn)":"var(--graview-ink-muted)",textAlign:"left"},children:["+",M.length," more",R>0?` \xB7 ${R} flagged`:""]}):null]},i.from)})})]})}function gn({days:e,entries:t,today:n,emphasisOf:r,broken:a,hue:o,onMove:g}){let y=e.map(c=>({day:c,here:cn(t,c)})).filter(({here:c})=>c.length>0);return y.length===0?(0,ee.jsx)("p",{"data-testid":"calendar-empty",style:{margin:0,fontSize:"0.875rem",color:"var(--graview-ink-muted)"},children:"Nothing is scheduled in the next six weeks."}):(0,ee.jsx)("ol",{tabIndex:0,"aria-label":"What is scheduled",style:{margin:0,padding:0,listStyle:"none",display:"grid",alignContent:"start",gap:10,overflow:"auto",minHeight:0},children:y.map(({day:c,here:v})=>(0,ee.jsxs)("li",{"data-calendar-day":c,onDragOver:l=>{l.dataTransfer.types.includes("text/graview-node")&&(l.preventDefault(),l.dataTransfer.dropEffect="move")},onDrop:l=>{let p=l.dataTransfer.getData("text/graview-node");p&&(l.preventDefault(),l.stopPropagation(),g(p,c))},style:{display:"grid",gap:4},children:[(0,ee.jsxs)("span",{style:{fontSize:"0.75rem",letterSpacing:"0.16em",textTransform:"uppercase",color:c===n?"var(--graview-accent)":"var(--graview-ink-muted)"},children:[ke(c),c===n?" \xB7 today":""]}),v.map(l=>(0,ee.jsx)(Tt,{entry:l,cell:{from:c,to:c,label:c},emphasis:r(l.id),flagged:a.has(l.id),hue:o(l)},`${l.id}:${c}`))]},c))})}function Tt({entry:e,cell:t,emphasis:n,flagged:r,hue:a,rowStart:o=!1}){let g=oe(t.from,e.from)>=0,y=oe(e.to,t.to)>=0,c=!(g&&y),v=e.at!==null&&g&&e.from===t.from?`${Ln(e.at)} ${e.label}`:e.label;return(0,ee.jsx)("span",{"data-graview-pick":e.id,"data-calendar-entry":e.id,draggable:!0,onDragStart:l=>{l.dataTransfer.setData("text/graview-node",e.id),l.dataTransfer.effectAllowed="move"},"data-graview-emphasis":n,"data-calendar-part":c?g?"opens":y?"closes":"through":void 0,"data-calendar-in":t.from,title:c?`${e.label} \xB7 ${e.from} \u2013 ${e.to}`:`${e.label}${e.at===null?" \xB7 all day":` \xB7 ${Ln(e.at)}`}`,style:{display:"block",minHeight:24,boxSizing:"border-box",padding:"3px 6px",fontSize:"0.75rem",lineHeight:1.35,borderRadius:c?g?"5px 0 0 5px":y?"0 5px 5px 0":0:5,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",textDecoration:e.done?"line-through":"none",opacity:n==="dimmed"?.35:e.done?.6:1,background:`color-mix(in oklab, hsl(${Math.round(a)} 70% 55%) ${n==="lit"?38:20}%, transparent)`,color:"var(--graview-ink)",...n==="lit"?{outline:"1px solid var(--graview-accent)"}:{},...r?{borderLeft:"3px solid var(--graview-warn)",paddingLeft:4}:{}},children:g||o?v:" "})}var U=G(J(),1);function Lt(e){let t=n=>function(a){let{store:o}=Q(),{view:g}=Ue(),y=n?{...e,range:n}:e,c=g.within?.range??y.range??"month",v=Object.keys(e.bindings),{nodes:l,arranged:p,arrangement:d,bar:m}=Ve(a,{...e.arranging!==void 0?{allow:e.arranging}:{},lensAllows:{sort:!1,group:c==="agenda"},...e.arrangedBy?{arrangedBy:e.arrangedBy}:{},...v[0]?{kind:(a.nodes??[]).find(S=>v.includes(String(S.kind)))?.kind??v[0]}:{}}),s=c==="agenda"&&p.grouped&&d.group?p.groups.map(S=>({label:S.label,ids:new Set(S.nodes.map($=>$.id))})):void 0,w=new Set((a.nodes??[]).map(S=>String(S.kind))),i=v.filter(S=>!w.has(S)&&o.schema.tryDefinition(S)!==void 0).flatMap(S=>{let $=o.schema.tryDefinition(S);return o.graph.nodesOfKind(S).filter(M=>g.past===!0||Ne($,M))}),x=i.length===0?l:[...l,...a.budget!==void 0?i.slice(0,a.budget):i];return Ee(a,o.schema,(0,U.jsx)(cr,{schema:o.schema,...a,nodes:x,options:{...y,today:y.today??o.today()??St()},...m?{bar:m}:{},...s?{groups:s}:{}}))};return{name:"calendar",requiredRoles:[...sn],bindings:e.bindings,options:e,View:t(),at:n=>t(n),ranges:()=>dn(e).map(n=>({range:n,title:xt(n,e.horizon)})),place:(n,r)=>n.map(a=>Dn(a,e.bindings,r)).filter(a=>a!==null)}}function cr({nodes:e,label:t,fidelity:n,mode:r,options:a,schema:o,selectedIds:g=[],implicated:y=[],flagged:c=[],bar:v,groups:l}){let{view:p,go:d}=Ue(),{store:m,principal:s}=Q(),w=p.within?.at??a.today,i=p.within?.range??a.range??"month",x=a.weekStartsOn??1,S=new Set([...y,...g]),$=O=>S.size===0?"plain":S.has(O)?"lit":"dimmed",M=new Set(c),R=(e??[]).map(O=>Dn(O,a.bindings,o)).filter(O=>O!==null),u=a.hueOf??(O=>ie(O.kind));if(n==="glyph")return(0,U.jsx)(ue,{label:`${t??"Calendar"} \xB7 ${R.length}`,hue:ie("calendar")});if(n==="summary"){let O=cn(R,a.today);return(0,U.jsx)(Z,{title:t??"Calendar",meta:`${R.length} dated`,tone:"muted",children:(0,U.jsx)(Ae,{max:6,items:O.length>0?O.map(L=>({id:L.id,label:L.label,hue:u(L)})):R.filter(L=>oe(a.today,L.from)>=0).sort((L,A)=>L.from.localeCompare(A.from)).slice(0,6).map(L=>({id:L.id,label:`${L.from.slice(5)} ${L.label}`,hue:u(L)}))})})}let k=r==="fullscreen",f=Ot(i,w,{weekStartsOn:x,...a.horizon?{horizon:a.horizon}:{}}),[P,B]=(0,un.useState)(null),W=(O,L,A)=>{let te=m.graph.getNode(O);if(!te)return;let he=He(a.bindings[te.kind],m.schema.tryDefinition(te.kind));if(!he)return;let h=kt(m,te.kind,he.start);if(!h){B({text:`Nothing declared writes the ${xn(m.schema.definitions.find(Y=>Y.kind===te.kind),he.start).toLowerCase()}, so this cannot be moved from here.`,tone:"refused"});return}let I=L.from,D=te[he.start],b=an(D)===null?I:`${I}${String(D).slice(10)}`,C={name:h.name,args:{[h.arg]:O,[he.start]:b}},N=m.permits(C,s);if(!N.ok){B({text:N.refusal.message,tone:"refused"});return}try{m.apply(C,{author:s}),B(A==="day"?null:{text:`Moved to ${ke(I)} \u2014 a ${A} is coarser than the ${xn(m.schema.definitions.find(Y=>Y.kind===te.kind),he.start).toLowerCase()} holds, so it takes the first day of the cell. Undo puts it back.`,tone:"rounded"})}catch(Y){B({text:Y instanceof Error?Y.message:String(Y),tone:"refused"})}},H=O=>{let L=i==="years"?Le(w,O*12*Math.max(1,a.horizon?.years??1)):i==="year"?Le(w,O*12):i==="quarter"?Le(w,O*3):i==="month"?Le(w,O):i==="week"?Se(w,O*7):Se(w,O);d(_e(p,"at",L))},j=(O,L)=>{let A=_e(p,"range",O);L!==void 0&&(A=_e(A,"at",L)),d(A)},_=(0,un.useRef)(null),se=Be(_),me=se!==null&&se<420,le=O=>O==="years"?a.horizon?.title??"years":O.charAt(0).toUpperCase()+O.slice(1);return(0,U.jsx)(Z,{title:t??"Calendar",meta:f.title,style:{gap:10,...k?{flex:"1 1 auto",minHeight:0,height:"100%"}:{}},children:(0,U.jsxs)("div",{ref:_,"data-testid":"calendar","data-calendar-range":i,"data-calendar-at":w,style:{display:"flex",flexDirection:"column",height:"100%",minHeight:0,gap:8},children:[(0,U.jsxs)("div",{style:{display:"flex",alignItems:"center",flexWrap:"wrap",gap:6},children:[(0,U.jsxs)("nav",{"aria-label":"When",style:{display:"flex",gap:4},children:[(0,U.jsx)(zn,{label:"Previous",glyph:"\u2039",onPress:()=>H(-1)}),(0,U.jsx)("button",{type:"button","data-testid":"calendar-today",onClick:()=>d(_e(p,"at",a.today)),style:Ge,children:"Today"}),(0,U.jsx)(zn,{label:"Next",glyph:"\u203A",onPress:()=>H(1)})]}),me?(0,U.jsx)("select",{"aria-label":"Range","data-testid":"calendar-ranges",value:i,onChange:O=>j(O.target.value),style:{...Ge,borderRadius:999,borderColor:"var(--graview-edge)",background:void 0,backgroundColor:"transparent",marginLeft:"auto",maxWidth:"50%",paddingRight:24,appearance:"none",WebkitAppearance:"none",backgroundImage:"linear-gradient(45deg, transparent 50%, currentColor 50%), linear-gradient(135deg, currentColor 50%, transparent 50%)",backgroundPosition:"calc(100% - 13px) 55%, calc(100% - 9px) 55%",backgroundSize:"4px 4px, 4px 4px",backgroundRepeat:"no-repeat"},children:dn(a).map(O=>(0,U.jsx)("option",{value:O,children:le(O)},O))}):(0,U.jsx)("div",{role:"group","aria-label":"Range","data-testid":"calendar-ranges",style:{display:"flex",flexWrap:"wrap",gap:4,marginLeft:"auto"},children:dn(a).map(O=>(0,U.jsx)("button",{type:"button","aria-pressed":O===i,"data-testid":`calendar-range-${O}`,onClick:()=>j(O),style:{...Ge,borderRadius:999,borderColor:"var(--graview-edge)",...O==="years"?{}:{textTransform:"capitalize"},...O===i?{borderColor:"var(--graview-accent)",color:"var(--graview-accent)",background:"var(--graview-panel)"}:{}},children:O==="years"?a.horizon?.title??"years":O},O))})]}),P?(0,U.jsx)("p",{"data-testid":P.tone==="refused"?"calendar-refused":"calendar-rounded",role:"status",style:{margin:0,fontSize:"0.8125rem",color:P.tone==="refused"?"var(--graview-warn)":"var(--graview-ink-muted)"},children:P.text}):null,f.years?(0,U.jsx)("nav",{"aria-label":"Years","data-testid":"calendar-years",style:{display:"flex",flexWrap:"wrap",gap:4},children:f.years.map(O=>(0,U.jsx)("button",{type:"button","data-testid":`calendar-year-${O}`,onClick:()=>j("year",`${O}-01-01`),style:Ge,children:O},O))}):null,v,i==="agenda"&&l?(0,U.jsx)("div",{"data-testid":"calendar-groups",style:{display:"grid",gap:10,minHeight:0,overflow:"auto"},children:l.map(O=>(0,U.jsxs)("section",{"data-testid":"calendar-group",style:{display:"grid",gap:4},children:[(0,U.jsxs)("h3",{style:{margin:0,fontSize:"0.8125rem",letterSpacing:"0.08em",textTransform:"uppercase",color:"var(--graview-ink-muted)"},children:[O.label," ",(0,U.jsx)("span",{style:{fontWeight:400},children:O.ids.size})]}),(0,U.jsx)(gn,{days:f.cells.map(L=>L.from),entries:R.filter(L=>O.ids.has(L.id)),today:a.today,emphasisOf:$,broken:M,hue:u,onMove:(L,A)=>W(L,{from:A,to:A,label:A},"day")})]},O.label))}):i==="agenda"?(0,U.jsx)(gn,{days:f.cells.map(O=>O.from),entries:R,today:a.today,emphasisOf:$,broken:M,hue:u,onMove:(O,L)=>W(O,{from:L,to:L,label:L},"day")}):(0,U.jsx)(Pt,{span:f,weekStartsOn:x,entries:R,today:a.today,perCell:a.perCell??Mt[f.grain],emphasisOf:$,broken:M,hue:u,onOpen:O=>j(At(f.grain),O.from),onMove:W})]})})}var fe=G(ze(),1);var V=G(J(),1),gr=`
4
+ .graview-columns { display: flex; flex-wrap: wrap; gap: 10px; align-items: flex-start; }
5
+ .graview-columns-column { flex: 1 1 13rem; min-width: 0; display: flex; flex-direction: column; gap: 8px; padding: 8px; border-radius: 10px; border: 1px solid var(--graview-edge); background: color-mix(in srgb, var(--graview-panel) 60%, transparent); }
6
+ .graview-columns-column[data-droppable="true"] { border-color: var(--graview-accent); }
7
+ .graview-columns-column[data-over="true"] { background: color-mix(in srgb, var(--graview-accent) 10%, transparent); }
8
+ .graview-columns-heading { margin: 0; display: flex; align-items: baseline; justify-content: space-between; gap: 8px; font-size: 0.875rem; font-weight: 600; color: var(--graview-ink); }
9
+ .graview-columns-count { font-weight: 400; color: var(--graview-ink-muted); font-variant-numeric: tabular-nums; }
10
+ .graview-columns-cards { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
11
+ .graview-columns-empty { margin: 0; font-size: 0.8125rem; color: var(--graview-ink-muted); }
12
+ .graview-columns-card[draggable="true"] { cursor: grab; }
13
+ .graview-columns-move { position: relative; z-index: ${Re.raised}; display: flex; justify-content: flex-end; margin-top: 4px; }
14
+ .graview-columns-move[data-open="true"] { z-index: ${Re.over}; }
15
+ .graview-columns-move > button, .graview-columns-menu button, .graview-columns-said button { font: inherit; font-size: 0.8125rem; min-height: 28px; padding: 2px 10px; border-radius: 7px; border: 1px solid var(--graview-edge); background: var(--graview-panel); color: var(--graview-ink); cursor: pointer; }
16
+ .graview-columns-move > button:focus-visible, .graview-columns-menu button:focus-visible, .graview-columns-said button:focus-visible { outline: 2px solid var(--graview-accent); outline-offset: 2px; }
17
+ .graview-columns-menu { position: absolute; right: 0; top: calc(100% + 4px); z-index: ${Re.over}; display: flex; flex-direction: column; gap: 4px; padding: 6px; min-width: 10rem; border-radius: 9px; border: 1px solid var(--graview-edge); background: var(--graview-panel); box-shadow: 0 6px 18px rgb(0 0 0 / 0.18); }
18
+ .graview-columns-menu button { text-align: left; }
19
+ .graview-columns-said { margin: 0 0 8px; display: flex; flex-wrap: wrap; align-items: center; gap: 8px; font-size: 0.8125rem; color: var(--graview-ink); }
20
+ .graview-columns-said[data-tone="refused"] { color: var(--graview-warn); }
21
+ `;function Dt(e){function t(n){let{store:r}=Q();Zn();let a=Object.keys(e.bindings).filter(s=>r.schema.tryDefinition(s)!==void 0),o=n.nodes??[],g=new Set(o.map(s=>String(s.kind))),y=s=>r.graph.nodesOfKind(s).filter(w=>Ne(r.schema.tryDefinition(s),w)),c=n.total!==void 0&&n.total>o.length,v=a.map(s=>{let w=e.bindings[s].column,i=ft(r.schema,s,w),x=g.has(s)?o.filter($=>$.kind===s):y(s).slice(0,n.budget??1/0),S=g.has(s)&&!c?x:y(s);return{kind:s,field:w,columns:i.map($=>({column:$,cards:x.filter(M=>Rn(M,w,i)===$.value),count:S.filter(M=>Rn(M,w,i)===$.value).length})).filter($=>$.column.value!==null||$.count>0)}}),l=v.reduce((s,w)=>s+w.columns.reduce((i,x)=>i+x.count,0),0),p=n.label??"Board",d=a[0];if(n.fidelity==="glyph")return(0,V.jsx)(ue,{label:`${p} \xB7 ${l}`,hue:ie("columns")});if(n.fidelity==="summary")return(0,V.jsx)(Z,{title:p,meta:d?De(r.schema,d,l):String(l),tone:"muted",children:(0,V.jsx)("p",{style:{margin:0,fontSize:"0.8125rem",color:"var(--graview-ink-muted)"},"data-testid":"columns-summary",children:v.flatMap(s=>s.columns.map(w=>`${w.column.label} ${w.count}`)).join(" \xB7 ")})});let m=(0,V.jsx)(ur,{boards:v,title:p});return Ee(n,r.schema,n.mode==="fullscreen"?(0,V.jsx)("div",{style:{padding:"14px 16px"},children:m}):(0,V.jsx)(Z,{title:p,meta:d?De(r.schema,d,l):void 0,children:m}))}return{name:"columns",requiredRoles:["column"],bindings:e.bindings,View:t}}function ur({boards:e,title:t}){let{store:n,principal:r}=Q(),a=(0,fe.useRef)(null),[o,g]=(0,fe.useState)(null),[y,c]=(0,fe.useState)(null),[v,l]=(0,fe.useState)(null),[p,d]=(0,fe.useState)(null);(0,fe.useLayoutEffect)(()=>{if(!p)return;a.current?.querySelector(p)?.focus(),d(null)});let m=x=>{let S=n.graph.getNode(x);return S?pe(n.schema.tryDefinition(S.kind),S):x},s=(x,S)=>ht(n,r,x,S.field,S.columns.map($=>$.column)),w=(x,S,$,M)=>{try{let R=n.apply(S.call,{author:r});g({text:`Moved \u201C${m(x)}\u201D to ${$}.`,tone:"moved",batch:R.batch,id:x}),M==="keyboard"&&d(`[data-columns-move="${Nt(x)}"] > button`)}catch(R){g({text:R instanceof Error?R.message:String(R),tone:"refused"})}},i=()=>{if(o?.batch)try{n.undo(o.batch,{author:r}),g({text:`\u201C${m(o.id??"")}\u201D is back where it was.`,tone:"moved"}),o.id&&d(`[data-columns-move="${Nt(o.id)}"] > button`)}catch(x){g({text:x instanceof Error?x.message:String(x),tone:"refused"})}};return(0,V.jsxs)("div",{ref:a,"data-testid":"columns-lens",children:[(0,V.jsx)("style",{children:gr}),(0,V.jsxs)("p",{className:"graview-columns-said",role:"status","data-tone":o?.tone,"data-testid":"columns-said",style:o?void 0:{position:"absolute",width:1,height:1,overflow:"hidden",clipPath:"inset(50%)"},children:[o?(0,V.jsx)("span",{children:o.text}):null,o?.batch?(0,V.jsx)("button",{type:"button","data-testid":"columns-undo",onClick:i,children:"Undo"}):null]}),e.map(x=>(0,V.jsx)("section",{"data-columns-kind":x.kind,"aria-label":`${Kn(n.schema,x.kind)} by ${x.field}`,children:(0,V.jsx)("div",{className:"graview-columns",children:x.columns.map(({column:S,cards:$,count:M})=>{let R=S.value??"",u=y!==null&&S.value!==null&&y.to.includes(S.value);return(0,V.jsxs)("section",{className:"graview-columns-column","data-graview-column":R,"data-droppable":u||void 0,"data-over":u&&v===R||void 0,"aria-label":`${t} \xB7 ${S.label}, ${M}`,"data-graview-named-by-lens":"",onDragOver:k=>{u&&(k.preventDefault(),k.dataTransfer.dropEffect="move",l(R))},onDragLeave:()=>l(k=>k===R?null:k),onDrop:k=>{let f=k.dataTransfer.getData("text/graview-node"),P=n.graph.getNode(f);if(l(null),c(null),!P||S.value===null)return;let B=s(P,x).find(W=>W.to===S.value);B&&(k.preventDefault(),k.stopPropagation(),w(f,B,S.label,"drag"))},children:[(0,V.jsxs)("h3",{className:"graview-columns-heading",children:[(0,V.jsx)("span",{children:S.label}),(0,V.jsx)("span",{className:"graview-columns-count","data-testid":"columns-count",children:M})]}),$.length===0?(0,V.jsx)("p",{className:"graview-columns-empty",children:"Nothing here."}):(0,V.jsx)("ul",{className:"graview-columns-cards",children:(0,V.jsx)(st.Provider,{value:S.value===null?null:{field:x.field,values:[S.value,S.label]},children:$.map(k=>{let f=s(k,x);return(0,V.jsx)(mr,{card:k,moves:f,labelOf:P=>x.columns.find(B=>B.column.value===P)?.column.label??P,onMove:(P,B)=>w(k.id,P,B,"keyboard"),onDrag:P=>c(P?{id:k.id,to:f.map(B=>B.to)}:null)},k.id)})})})]},R)})})},x.kind))]})}var Nt=e=>typeof globalThis.CSS?.escape=="function"?globalThis.CSS.escape(e):e.replace(/["\\]/g,"\\$&");function mr({card:e,moves:t,labelOf:n,onMove:r,onDrag:a}){let{store:o,views:g}=Q(),[y,c]=(0,fe.useState)(!1),v=(0,fe.useRef)(null),l=(0,fe.useRef)(null),p=pe(o.schema.tryDefinition(e.kind),e),d=g.lookup(e.kind,{cardinality:"one",fidelity:"summary"});(0,fe.useLayoutEffect)(()=>{y&&v.current?.querySelector("button")?.focus()},[y]);let m=()=>{c(!1),l.current?.focus()},s=w=>{let i=[...v.current?.querySelectorAll("button")??[]],x=i.indexOf(document.activeElement);w.key==="Escape"?(w.preventDefault(),w.stopPropagation(),m()):(w.key==="ArrowDown"||w.key==="ArrowUp")&&(w.preventDefault(),w.stopPropagation(),i[(x+(w.key==="ArrowDown"?1:i.length-1))%i.length]?.focus())};return(0,V.jsxs)("li",{className:"graview-spec-item graview-columns-card","data-graview-listed":e.id,"data-as":"card",draggable:t.length>0||void 0,onDragStart:w=>{t.length!==0&&(w.dataTransfer.setData("text/graview-node",e.id),w.dataTransfer.effectAllowed="move",a(!0))},onDragEnd:()=>a(!1),children:[d?(0,V.jsx)(Xn,{mode:"scene",children:(0,V.jsx)(d,{node:e,cardinality:"one",fidelity:"summary",mode:"scene",selected:!1})}):(0,V.jsx)("span",{className:"graview-spec-item-name",children:p}),(0,V.jsx)(dt,{node:e,label:p}),t.length>0?(0,V.jsxs)("div",{className:"graview-columns-move","data-columns-move":e.id,"data-open":y||void 0,onBlur:w=>{w.currentTarget.contains(w.relatedTarget)||c(!1)},children:[(0,V.jsx)("button",{ref:l,type:"button","aria-haspopup":"menu","aria-expanded":y,"aria-label":`Move \u201C${p}\u201D to another column`,"data-testid":"columns-move",onClick:()=>c(w=>!w),children:"Move\u2026"}),y?(0,V.jsx)("div",{ref:v,role:"menu","aria-label":`Move \u201C${p}\u201D to`,className:"graview-columns-menu",onKeyDown:s,onMouseDown:w=>w.preventDefault(),children:t.map(w=>(0,V.jsx)("button",{type:"button",role:"menuitem","data-columns-to":w.to,title:w.title,onClick:()=>{c(!1),r(w,n(w.to))},children:n(w.to)},w.to))}):null]}):null]})}var ve=G(ze(),1);var z=G(J(),1),pr=["rows","columns","link"],Je=class extends Error{constructor(n,r){super(`${n}
22
+ ${r}`);this.hint=r;this.name="CoverageBindingError"}},Bn=(e,t)=>t&&e[t]!==void 0?String(e[t]):"",fr=40,hr=24;function yr(e,t={}){let n=t.rows??fr,r=t.columns??hr;if(e.rows.length<=n&&e.columns.length<=r)return e;let a=new Map;for(let l of e.cells)a.set(l.rowId,(a.get(l.rowId)??0)+1),a.set(`col:${l.columnId}`,(a.get(`col:${l.columnId}`)??0)+1);let o=(l,p,d)=>{if(l.length<=p)return l;let m=new Set(l.map((s,w)=>({item:s,index:w,count:a.get(d(s))??0})).sort((s,w)=>w.count-s.count||s.index-w.index).slice(0,p).map(s=>s.item.id));return l.filter(s=>m.has(s.id))},g=o(e.rows,n,l=>l.id),y=o(e.columns,r,l=>`col:${l.id}`),c=new Set(g.map(l=>l.id)),v=new Set(y.map(l=>l.id));return{...e,rows:g,columns:y,cells:e.cells.filter(l=>c.has(l.rowId)&&v.has(l.columnId)),of:{rows:e.rows.length,columns:e.columns.length}}}function It(e,t,n,r){let a=u=>u,o=u=>r?pe(r.tryDefinition(u.kind),u):String(a(u).label??u.id),g=r?[n.rows,n.columns].filter(u=>r.tryDefinition(u)===void 0):[];if(g.length>0)throw new Je(`No kind is declared for ${g.map(u=>`"${u}"`).join(" or ")}.`,'Check the lens bindings: { rows: "<kind>", columns: "<kind>", link: "<edge kind>" }');if(r&&typeof n.link!="string"){let u=kn(r,n.columns,n.link.path);if(!u.ok||!u.reached.has(n.rows)){let k=kn(r,n.columns,[...n.link.path].reverse());throw new Je(k.ok&&k.reached.has(n.rows)?`The path runs from the ${n.rows} to the ${n.columns}; it is walked from the columns.`:`The path [${n.link.path.join(", ")}] cannot get from a ${n.columns} to a ${n.rows}.`,`Name it column end first: link: { path: [${[...n.link.path].reverse().map(f=>JSON.stringify(f)).join(", ")}] }`)}}let y=e.filter(u=>u.kind===n.rows),c=e.filter(u=>u.kind===n.columns);if(!r&&y.length===0&&c.length===0)throw new Je(`Nothing to lay out: no "${n.rows}" and no "${n.columns}" nodes.`,'Check the lens bindings: { rows: "<kind>", columns: "<kind>", link: "<edge kind>" }');let v=n.groupOrder??[],l=u=>{let k=v.indexOf(u);return k===-1?v.length:k},p=n.badge?t.filter(u=>u.kind===n.badge.edge):[],d=new Set(y.map(u=>u.id)),m=new Set(c.map(u=>u.id)),s=[];if(typeof n.link=="string"){let u=n.link,k=t.filter(H=>H.kind===u),f=H=>r?.tryDefinition?.(H)?.edges?.[u]?.to,P=(f(n.columns)??[]).some(H=>H===n.rows||H==="*"),B=(f(n.rows)??[]).some(H=>H===n.columns||H==="*"),W=P||!B;for(let H of k){let j=W?H.to:H.from,_=W?H.from:H.to;d.has(j)&&m.has(_)&&s.push({rowId:j,columnId:_})}}else{let u=new Map;for(let f of new Set(n.link.path))u.set(f,new Map);for(let f of t){let P=u.get(f.kind);if(!P)continue;let B=P.get(f.from);B?B.push(f.to):P.set(f.from,[f.to]);let W=P.get(f.to);W?W.push(f.from):P.set(f.to,[f.from])}let k=new Set;for(let f of c){let P=[{id:f.id,via:[]}];for(let B of n.link.path){let W=[],H=new Set,j=u.get(B);for(let _ of P)for(let se of j.get(_.id)??[])H.has(`${_.id}|${se}`)||(H.add(`${_.id}|${se}`),W.push({id:se,via:[..._.via,_.id]}));P=W}for(let B of P){if(!d.has(B.id))continue;let W=`${B.id}|${f.id}`;k.has(W)||(k.add(W),s.push({rowId:B.id,columnId:f.id,via:B.via.slice(1)}))}}}let w=new Set(n.requiredGroups??[]),i=n.requiredVia?new Set(t.filter(u=>u.kind===n.requiredVia.edge).map(u=>u.to)):null,x=new Set(s.map(u=>u.rowId)),S=new Set(s.map(u=>u.columnId)),$=new Set(p.map(u=>u.to)),M=y.map(u=>{let k=a(u),f=Bn(k,n.rowGroup);return{id:u.id,ref:Bn(k,n.rowRef),label:String(k.label??o(u)),group:f,required:i?i.has(u.id):w.size===0||w.has(f),covered:x.has(u.id),badged:$.has(u.id)}}).sort((u,k)=>l(u.group)-l(k.group)||(u.ref<k.ref?-1:u.ref>k.ref?1:0)),R=c.map(u=>({id:u.id,label:o(u),used:S.has(u.id),group:Bn(a(u),n.columnGroup)})).sort((u,k)=>u.group<k.group?-1:u.group>k.group?1:u.id<k.id?-1:u.id>k.id?1:0).map(({group:u,...k})=>k);return{rows:M,columns:R,cells:s,gaps:M.filter(u=>u.required&&!u.covered).map(u=>u.id),unasked:R.filter(u=>!u.used).map(u=>u.id)}}var zt=316,Vn=58,Wn=176,wr=Math.sin(Vn*Math.PI/180),vr=Math.cos(Vn*Math.PI/180),br=e=>{let t=e.reduce((r,a)=>Math.max(r,a.length),0),n=Math.min(Wn,Math.max(46,t*5.4+12));return Math.ceil(n*wr)+8},Bt=Math.ceil(Wn*vr),Vt=(e,t)=>en(e,t).toLowerCase(),Ht=(e,t)=>nn(e.tryDefinition(t),t);function xr(e,t,n){return t.rows===t.columns?`${e} with none across`:`${De(n,t.rows,e)} with no ${Ht(n,t.columns)}`}function Sr(e,t,n){return t.rows===t.columns?`${e} with none down`:`${De(n,t.columns,e)} on no ${Ht(n,t.rows)}`}function kr({nodes:e,label:t,fidelity:n,mode:r,options:a,schema:o,implicated:g=[],flagged:y=[],budget:c}){let{store:v}=Q(),l=Er(),p=(0,ve.useRef)(null),d=Be(p),[m,s]=(0,ve.useState)(null),w=It(Ke(v.graph,v.schema,e).filter(f=>f.kind===a.rows||f.kind===a.columns),v.graph.allEdges(),a,o),i=n==="full"?yr(w,c!==void 0?{rows:c,columns:c}:{}):w;if(n==="glyph")return(0,z.jsx)(ue,{label:`${t??"Coverage"} \xB7 ${i.gaps.length===0?"complete":`${i.gaps.length} missing`}`,hue:ie("coverage")});if(n==="summary"){let f=i.rows.filter(P=>i.gaps.includes(P.id));return(0,z.jsxs)(Z,{title:t??"Coverage",meta:`${i.rows.length-i.gaps.length}/${i.rows.length}`,tone:i.gaps.length>0?"warning":"muted",fit:!0,children:[(0,z.jsx)(Ar,{grid:i}),f.length>0?(0,z.jsx)(Ae,{pick:!0,max:4,items:f.map(P=>({id:P.id,label:P.ref||P.label}))}):null]})}let x=new Set(g),S=new Set(y),$=m!==null&&m.every(f=>x.has(f))?m:null,M=r==="fullscreen",R=br(i.columns.map(f=>f.label)),u=d===null?zt:Math.max(96,Math.min(zt,Math.round(d*.36))),k=d!==null&&(d<420||u+i.columns.length*28+Bt>d);return(0,z.jsx)(Z,{title:t??"Coverage",...M?{style:{flex:"1 1 auto",minHeight:0,height:"100%"}}:{},meta:i.rows.length===0||i.columns.length===0?void 0:i.gaps.length===0&&i.unasked.length===0?"complete":[i.gaps.length>0?xr(i.gaps.length,a,v.schema):"",i.unasked.length>0?Sr(i.unasked.length,a,v.schema):""].filter(Boolean).join(" \xB7 "),selected:!1,fit:!0,children:(0,z.jsxs)("div",{ref:p,"data-coverage-shape":k?"stacked":"matrix",onClick:f=>s(Wt(f.target)),onKeyDown:f=>{(f.key==="Enter"||f.key===" ")&&s(Wt(f.target))},style:{position:"relative",display:"flex",flexDirection:"column",flex:"1 1 auto",minHeight:0,paddingRight:k?0:Bt},children:[k?null:(0,z.jsxs)("div",{style:{display:"flex",alignItems:"flex-end",flex:"0 0 auto",position:"sticky",top:0,zIndex:Re.over,background:"var(--graview-panel)",paddingTop:6},children:[(0,z.jsx)("div",{ref:l.corner,style:{width:u,flex:"0 0 auto",alignSelf:"stretch",position:"sticky",left:0,zIndex:Re.raised,background:"var(--graview-panel)"}}),(0,z.jsx)("div",{ref:l.heads,style:{display:"flex",flex:1,minWidth:0,height:R},children:i.columns.map(f=>(0,z.jsx)("div",{"data-graview-pick":f.id,"data-graview-emphasis":x.size===0?"plain":x.has(f.id)?"lit":"dimmed",title:f.label,"data-graview-column":f.id,style:{flex:1,minWidth:28,boxSizing:"border-box",borderLeft:"1px solid transparent",pointerEvents:"none",position:"relative",display:"flex",alignItems:"flex-end",justifyContent:"center"},children:(0,z.jsxs)("span",{style:{position:"absolute",bottom:3,padding:"3px 0",pointerEvents:"auto",cursor:"pointer",left:"50%",visibility:l.hidden.has(f.id)?"hidden":"visible",transformOrigin:"left bottom",transform:`rotate(-${Vn}deg)`,whiteSpace:"nowrap",maxWidth:Wn,overflow:"hidden",textOverflow:"ellipsis",fontSize:"0.75rem",letterSpacing:"0.005em",color:f.used?x.size>0&&!x.has(f.id)?"var(--graview-ink-faint)":"var(--graview-ink)":"var(--graview-warn)"},children:[f.used?"":"\u26A0 ",f.label]})},f.id))})]}),i.of?(0,z.jsxs)("p",{"data-testid":"coverage-more",style:{margin:"4px 0 6px",fontSize:"0.8125rem",color:"var(--graview-ink-muted)"},children:[[i.of.rows>i.rows.length?`the ${i.rows.length} most connected of ${i.of.rows} ${Vt(v.schema,a.rows)}`:null,i.of.columns>i.columns.length?`${i.columns.length} of ${i.of.columns} ${Vt(v.schema,a.columns)} across`:null].filter(Boolean).join(" \xB7 ").replace(/^./,f=>f.toUpperCase())," ","\u2014 what is missing is still counted over all of them."]}):null,(0,z.jsx)("div",{children:i.rows.map((f,P)=>{let B=i.rows[P-1],W=B===void 0||B.group!==f.group,H=f.required&&!f.covered,j=x.size>0&&!x.has(f.id);return(0,z.jsxs)("div",{children:[W&&f.group?(0,z.jsx)("div",{style:{fontSize:"0.6875rem",letterSpacing:"0.16em",textTransform:"uppercase",color:"var(--graview-ink-faint)",padding:"9px 0 3px"},children:(0,z.jsx)("span",{style:{position:"sticky",left:0,display:"inline-block",paddingRight:8,background:"var(--graview-panel)"},children:f.group})}):null,(0,z.jsxs)("div",{style:{display:"flex",flexDirection:k?"column":"row",alignItems:"stretch",borderTop:"1px solid var(--graview-edge)",opacity:j?.72:1},children:[(0,z.jsxs)("div",{"data-graview-pick":f.id,"data-graview-emphasis":x.size===0?"plain":j?"dimmed":"lit",title:f.label,style:{width:k?"auto":u,flex:"0 0 auto",position:k?"static":"sticky",left:0,zIndex:Re.raised,background:"var(--graview-panel)",display:"flex",alignItems:"center",gap:7,padding:"6px 10px 6px 0",boxSizing:"border-box",fontSize:"0.8125rem",minWidth:0,color:H||S.has(f.id)?"var(--graview-warn)":"var(--graview-ink)"},children:[f.ref?(0,z.jsx)("span",{style:{flex:"0 0 auto",fontVariantNumeric:"tabular-nums",color:"var(--graview-ink-faint)"},children:f.ref}):null,(0,z.jsx)("span",{style:{minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:f.label}),a.badge?(0,z.jsx)("span",{title:f.badged?a.badge.title:a.badge.missingTitle,style:{marginLeft:"auto",flex:"0 0 auto",fontSize:"0.75rem",color:f.badged?"var(--graview-ink-faint)":"var(--graview-warn)"},children:f.badged?a.badge.symbol:"\u25CB"}):null]}),(0,z.jsx)("div",{style:{display:"flex",flex:1,minWidth:0,...k?{flexWrap:"wrap",gap:6,padding:"0 0 8px"}:{}},children:i.columns.map(_=>{let se=i.cells.find(le=>le.rowId===f.id&&le.columnId===_.id),me=se!==void 0;return(0,z.jsxs)("div",{"data-graview-mark":"",...me?{"data-graview-pick":_.id,"data-graview-emphasis":x.size===0?"plain":x.has(_.id)&&x.has(f.id)?"lit":"dimmed","data-graview-joins":JSON.stringify(Cr(se))}:{},title:me?`${_.label} answers ${f.ref||f.label}`:`${_.label} does not answer ${f.ref||f.label}`,style:k?{flex:"0 0 auto",minHeight:24,boxSizing:"border-box",display:"inline-flex",alignItems:"center",gap:6,padding:"2px 9px 2px 7px",borderRadius:6,border:"1px solid var(--graview-edge)",fontSize:"0.75rem",color:me?"var(--graview-ink)":"var(--graview-ink-faint)"}:{flex:1,minWidth:28,boxSizing:"border-box",display:"flex",alignItems:"center",justifyContent:"center",borderLeft:"1px solid var(--graview-edge)"},children:[(0,z.jsx)("span",{style:Rr(me,H,x.has(_.id)&&x.has(f.id),x.size>0)}),k?(0,z.jsx)("span",{children:_.label}):null]},_.id)})})]})]},f.id)})}),$?(0,z.jsx)(Or,{box:p,joins:$,shape:`${k?"stacked":"matrix"} ${d??""}`}):null]})})}var Cr=e=>[e.rowId,e.columnId,...e.via??[]];function Wt(e){let t=e?.closest?.("[data-graview-joins]")?.getAttribute("data-graview-joins");if(!t)return null;try{let n=JSON.parse(t);return Array.isArray(n)&&n.every(r=>typeof r=="string")?n:null}catch{return null}}var mn=(e,t,n)=>Math.min(n,Math.max(t,e));function $r(e){let t=e.getBoundingClientRect(),n=typeof document.createRange=="function"?document.createRange():null;n?.selectNodeContents(e);let r=typeof n?.getBoundingClientRect=="function"?n.getBoundingClientRect():null;return r&&r.width>0&&r.height>0?r:t}function Or({box:e,joins:t,shape:n}){let[r,a]=(0,ve.useState)([]),o=JSON.stringify(t);return(0,ve.useLayoutEffect)(()=>{let g=e.current;if(!g||typeof window>"u")return;let y=()=>{let l=g.getBoundingClientRect(),p=g.offsetWidth>0&&l.width>0?l.width/g.offsetWidth:1,d=[...g.querySelectorAll("[data-graview-joins]")].find(w=>w.getAttribute("data-graview-joins")===o);if(!d){a([]);return}let m=d.getBoundingClientRect(),s=[];for(let w of JSON.parse(o)){let i=[...g.querySelectorAll("[data-graview-pick]")].find(u=>u.getAttribute("data-graview-pick")===w&&!u.closest("[data-graview-mark]"));if(!i)continue;let x=$r(i),S=mn(m.left+m.width/2,x.left,x.right),$=mn(m.top+m.height/2,x.top,x.bottom),M=mn(S,m.left,m.right),R=mn($,m.top,m.bottom);s.push({id:w,x1:(M-l.left)/p,y1:(R-l.top)/p,x2:(S-l.left)/p,y2:($-l.top)/p})}a(s)};y();let c=0,v=()=>{c===0&&(c=requestAnimationFrame(()=>{c=0,y()}))};return document.addEventListener("scroll",v,{capture:!0,passive:!0}),window.addEventListener("resize",v,{passive:!0}),()=>{document.removeEventListener("scroll",v,{capture:!0}),window.removeEventListener("resize",v),c!==0&&cancelAnimationFrame(c)}},[e,o,n]),(0,z.jsx)("svg",{"aria-hidden":"true","data-coverage-join":o,style:{position:"absolute",left:0,top:0,width:"100%",height:"100%",overflow:"visible",pointerEvents:"none",zIndex:Re.over},children:r.map(g=>(0,z.jsxs)("g",{"data-coverage-join-to":g.id,children:[(0,z.jsx)("line",{x1:g.x1,y1:g.y1,x2:g.x2,y2:g.y2,stroke:"var(--graview-accent)",strokeWidth:1.6,strokeLinecap:"round"}),(0,z.jsx)("circle",{cx:g.x2,cy:g.y2,r:2.6,fill:"var(--graview-accent)"})]},g.id))})}function Rr(e,t,n,r){return e?{width:13,height:13,borderRadius:4,background:n||!r?"var(--graview-accent)":"var(--graview-accent-dim)",boxShadow:n&&r?"0 0 12px -2px var(--graview-accent)":void 0}:{width:5,height:5,borderRadius:1,background:t?"var(--graview-warn)":"var(--graview-edge)",opacity:t?.5:1}}function Ar({grid:e}){let t=e.rows.filter(a=>a.required),n=t.filter(a=>a.covered).length,r=t.length===0?1:n/t.length;return(0,z.jsx)("div",{role:"img","aria-label":`${n} of ${t.length} covered`,style:{height:6,borderRadius:999,overflow:"hidden",background:"var(--graview-edge)"},children:(0,z.jsx)("div",{style:{width:`${Math.round(r*100)}%`,height:"100%",background:r===1?"var(--graview-accent)":"var(--graview-warn)"}})})}function Gt(e){function t(n){let{store:r}=Q();return(0,z.jsx)(kr,{schema:r.schema,...n,options:e})}return{name:"coverage",requiredRoles:[...pr],options:e,View:t,build(n,r,a){return It(n,r,e,a)}}}function Er(){let e=(0,ve.useRef)(null),t=(0,ve.useRef)(null),[n,r]=(0,ve.useState)(new Set);return(0,ve.useEffect)(()=>{let a=t.current;if(!a||typeof window>"u")return;let o=a.parentElement;for(;o&&!/(auto|scroll)/.test(getComputedStyle(o).overflowX);)o=o.parentElement;if(!o)return;let g=0,y=()=>{g=0;let v=e.current?.getBoundingClientRect().right??0,l=new Set;for(let p of a.querySelectorAll("[data-graview-column]")){let d=p.getBoundingClientRect();d.left+d.width/2<v&&l.add(p.dataset.graviewColumn)}r(p=>p.size===l.size&&[...l].every(d=>p.has(d))?p:l)},c=()=>{g===0&&(g=requestAnimationFrame(y))};return y(),o.addEventListener("scroll",c,{passive:!0}),()=>{o.removeEventListener("scroll",c),g!==0&&cancelAnimationFrame(g)}},[]),{corner:e,heads:t,hidden:n}}var qt=["regions","outline"],je=class extends Error{constructor(n,r){super(`${n}
23
+ ${r}`);this.hint=r;this.name="PlanBindingError"}},pn='Check the lens bindings: { regions: "<kind>", outline: "<field>", markers?: "<kind>", at?: "<field>", within?: "<edge>" }',jt=e=>typeof e=="object"&&e!==null&&typeof e.x=="number"&&typeof e.y=="number";function fn(e,t,n,r){let a=i=>i,o=i=>r?pe(r.tryDefinition(i.kind),i):String(a(i).label??i.id);if(r&&r.tryDefinition(n.regions)===void 0)throw new je(`No kind is declared for "${n.regions}".`,pn);if(n.markers&&r&&r.tryDefinition(n.markers)===void 0)throw new je(`No kind is declared for "${n.markers}".`,pn);let g=e.filter(i=>i.kind===n.regions);if(!r&&g.length===0)throw new je(`Nothing to draw: no "${n.regions}" nodes.`,pn);let c=r?.tryDefinition(n.regions)?.fields?.shape;if(c!==void 0&&!(n.outline in c))throw new je(`"${n.regions}" has no field called "${n.outline}".`,pn);let v=(()=>{let i=new Map;if(n.nests)for(let x of t)x.kind===n.nests&&i.set(x.from,x.to);return x=>{let S=0,$=i.get(x),M=new Set([x]);for(;$!==void 0&&!M.has($)&&S<g.length;)M.add($),S+=1,$=i.get($);return S}})(),l=n.markers?e.filter(i=>i.kind===n.markers):[],p=new Map;if(n.within)for(let i of t)i.kind===n.within&&p.set(i.from,i.to);let d=[],m=new Map;for(let i of l){let x=n.at===void 0?void 0:a(i)[n.at],S=p.get(i.id);if(!jt(x)||S===void 0){d.push({id:i.id,label:o(i)});continue}let $=n.markerKind===void 0?void 0:a(i)[n.markerKind],M=m.get(S)??[];M.push({id:i.id,label:o(i),at:x,...typeof $=="string"?{what:$}:{}}),m.set(S,M)}let s=[],w=[];for(let i of g){let x=a(i)[n.outline];if(!Array.isArray(x)||x.length<3||!x.every(jt)){s.push({id:i.id,label:o(i)});continue}let S=n.regionKind===void 0?void 0:a(i)[n.regionKind];w.push({id:i.id,label:o(i),outline:x,center:ut(x),depth:v(i.id),markers:m.get(i.id)??[],...typeof S=="string"?{what:S}:{}})}return w.sort((i,x)=>i.depth-x.depth),{regions:w,undrawn:s,strays:d}}var Pe=G(ze(),1);var E=G(J(),1);function Ft({map:e,options:t,implicated:n,flagged:r}){return(0,E.jsxs)("ul",{style:{margin:0,padding:0,listStyle:"none",display:"grid",gap:".25rem"},children:[e.regions.map(a=>{let o=hn(a.id,n,r);return(0,E.jsxs)("li",{"data-graview-pick":a.id,...o?{"data-graview-emphasis":o}:{},style:{display:"flex",flexWrap:"wrap",gap:".5rem",justifyContent:"space-between",minWidth:0,padding:".25rem .4rem",borderRadius:".35rem",background:o==="flagged"?Hn(a.what,o,t.hues):void 0},children:[(0,E.jsx)("span",{style:{minWidth:0,overflowWrap:"anywhere"},children:a.label}),(0,E.jsxs)("span",{style:{opacity:.7,whiteSpace:"nowrap"},children:[a.what?`${a.what} \xB7 `:"",a.markers.length]})]},a.id)}),e.undrawn.map(a=>(0,E.jsxs)("li",{"data-graview-pick":a.id,style:{display:"flex",gap:".5rem",opacity:.7,padding:".25rem .4rem"},children:[(0,E.jsx)("span",{style:{minWidth:0,overflowWrap:"anywhere"},children:a.label}),(0,E.jsx)("span",{style:{whiteSpace:"nowrap"},children:t.undrawnLabel??"not drawn"})]},a.id))]})}var In=1e3,_t=.022,Qe={minHeight:"1.9rem",padding:".25rem .65rem",borderRadius:".35rem",border:"1px solid var(--graview-edge)",background:"var(--graview-panel)",color:"var(--graview-ink)",font:"inherit",fontSize:"0.9375rem",cursor:"pointer"},hn=(e,t,n)=>{if(n?.includes(e))return"flagged";if(t?.includes(e))return"implicated"},yn=(e,t)=>(e===void 0?void 0:t?.[e])??ie(e??"region"),Hn=(e,t,n)=>t==="flagged"?"color-mix(in oklab, var(--graview-warn) 26%, var(--graview-panel))":`color-mix(in oklab, hsl(${yn(e,n)} 52% 48%) 24%, var(--graview-panel))`,Ut=(e,t,n)=>t==="flagged"?"var(--graview-warn)":`color-mix(in oklab, hsl(${yn(e,n)} 48% 42%) 78%, var(--graview-ink))`;function Mr(e){let t=e.currentTarget.getBoundingClientRect(),n=r=>Math.round(Math.max(0,Math.min(1,r))*1e3)/1e3;return{x:n(t.width===0?0:(e.clientX-t.left)/t.width),y:n(t.height===0?0:(e.clientY-t.top)/t.height)}}function Kt({schema:e,options:t,nodes:n,label:r,fidelity:a,selected:o,implicated:g,flagged:y}){let{store:c}=Q(),v=c.graph.allEdges(),l=c.graph.allNodes(),p=n===void 0?void 0:new Set(n.map(b=>b.id)),d=p===void 0?l:l.filter(b=>b.kind!==t.regions||p.has(b.id)),m=fn(d,v,t,e),s=m.regions.length,w=m.regions.reduce((b,C)=>b+C.markers.length,0);if(a==="glyph")return(0,E.jsx)(ue,{label:`${r??"Ground"} \xB7 ${s}`,...m.undrawn.length>0?{meta:`+${m.undrawn.length} undrawn`}:{},selected:o});if(a==="summary")return(0,E.jsx)(Z,{title:r??"The plan",subtitle:`${s} drawn \xB7 ${w} standing in them`,children:(0,E.jsx)(Ft,{map:m,options:t,...g?{implicated:g}:{},...y?{flagged:y}:{}})});let i=(0,Pe.useMemo)(()=>{let b=1/0,C=1/0,N=-1/0,Y=-1/0,ce=re=>{re.x<b&&(b=re.x),re.x>N&&(N=re.x),re.y<C&&(C=re.y),re.y>Y&&(Y=re.y)};for(let re of m.regions){for(let we of re.outline)ce(we);for(let we of re.markers)ce(we.at)}if(!Number.isFinite(b)||N-b<=0||Y-C<=0)return{x0:0,y0:0,x1:1,y1:1};let ye=Math.max(N-b,Y-C)*.04;return{x0:b-ye,y0:C-ye,x1:N+ye,y1:Y+ye}},[m.regions]),x=(i.x1-i.x0)/(i.y1-i.y0),S=t.aspect??Math.min(3.2,Math.max(.55,x)),$=Math.round(In/(i.x1-i.x0)),M=Math.round($*(i.x1-i.x0)),R=Math.round(M/S),u={x:i.x0*$,y:i.y0*$-(R-$*(i.y1-i.y0))/2,w:M,h:R},k=$,f=u.w,P=(g?.length??0)>0||(y?.length??0)>0,B=(0,Pe.useRef)(null),{touchable:W,legible:H}=at(B,{units:u.w,target:f*_t*2}),j=Cn("--graview-font-display","serif"),_=Cn("--graview-font-body","sans-serif"),{named:se,placed:me,tagged:le}=(0,Pe.useMemo)(()=>{let b=[],C=f*.012,N=In*.004,Y=(ae,K)=>!b.some(ge=>ge!==K&&pt({x0:ae.x0-N,y0:ae.y0-N,x1:ae.x1+N,y1:ae.y1+N},ge)),ce=[...m.regions].sort((ae,K)=>On(K.outline)-On(ae.outline)),ye=new Map,re=new Map;for(let ae of ce){let K=gt(ae.outline),ge=Math.max(0,(K.bottom-K.top)*k*.55),Ce=null;for(let xe of[.12,.26,.42,.6,.78]){let be=K.top+xe*(K.bottom-K.top),$e=$n(ae.outline,be),wn=Math.max(0,($e.x1-$e.x0)*$-C*2),de=mt(ae.label,{room:wn,height:ge,size:f*.023,floor:f*.015,measure:j});if(de===null)continue;let Te=Math.max(...de.lines.map(tr=>j(tr,de.fontSize))),Oe=de.lines.length*de.fontSize*1.15,Fn=K.top*k+C+Oe/2,_n=K.bottom*k-C-Oe/2,Ze=_n<Fn?(K.top+K.bottom)*k/2:Math.min(Math.max(be*k,Fn),_n),vn=$n(ae.outline,Ze/k),bn=vn.x0*$+C;if(Te>(vn.x1-vn.x0)*$-C*2)continue;let Un={x0:bn,y0:Ze-Oe/2,x1:bn+Te,y1:Ze+Oe/2};if(Y(Un)){b.push(Un),Ce={fitted:de,x:bn,y:Ze};break}}ye.set(ae.id,Ce?.fitted??null),Ce!==null&&re.set(ae.id,{x:Ce.x,y:Ce.y})}let we=f*.018,Fe=new Map,F=f*.011+f*.004,qn=new Map;for(let ae of m.regions)for(let K of ae.markers){let ge={x0:K.at.x*$-F,y0:K.at.y*k-F,x1:K.at.x*$+F,y1:K.at.y*k+F};qn.set(K.id,ge),b.push(ge)}for(let ae of W?m.regions:[])for(let K of ae.markers){let ge=f*.018,Ce=_(K.label,we),xe=K.at.x*$,be=K.at.y*k,$e=we*1.15,wn=[{x:xe+ge,y:be,anchor:"start"},{x:xe-ge,y:be,anchor:"end"},{x:xe+ge*.7,y:be-$e,anchor:"start"},{x:xe-ge*.7,y:be-$e,anchor:"end"},{x:xe+ge*.7,y:be+$e,anchor:"start"},{x:xe-ge*.7,y:be+$e,anchor:"end"},{x:xe,y:be-$e*1.1,anchor:"start"},{x:xe,y:be+$e*1.1,anchor:"start"}];for(let de of wn){let Te=de.anchor==="start"?de.x:de.x-Ce,Oe={x0:Te,y0:de.y-we*.62,x1:Te+Ce,y1:de.y+we*.62};if(!(Te<u.x+4||Te+Ce>u.x+u.w-4)&&!(Oe.y0<u.y+2||Oe.y1>u.y+u.h-2)&&Y(Oe,qn.get(K.id))){b.push(Oe),Fe.set(K.id,{at:{x:de.x,y:de.y},anchor:de.anchor,size:we});break}}}return{named:ye,placed:re,tagged:Fe}},[m.regions,In,k,W,j,_]),O=(0,Pe.useMemo)(()=>{let b=[];for(let C of m.regions)(se.get(C.id)?.whole??!1)===!1&&b.push({id:C.id,label:C.label,what:C.what,round:!1});for(let C of m.regions)for(let N of C.markers)(!W||!le.has(N.id))&&b.push({id:N.id,label:N.label,what:N.what,round:!0});return b},[m.regions,se,le,W]),{principal:L}=Q(),[A,te]=(0,Pe.useState)(null),he=t.draw!==void 0,h=t.place!==void 0,I=b=>{if(A===null)return;b.stopPropagation();let C=Mr(b);if(A.kind==="marker"){c.apply({name:t.place.act,args:{[t.place.id]:A.id,[t.place.at]:C}},{author:L,intent:`Placed ${A.label} on the map`}),te(null);return}te({...A,corners:[...A.corners,C]})},D=()=>{A===null||A.kind!=="region"||A.corners.length<3||(c.apply({name:t.draw.act,args:{[t.draw.id]:A.id,[t.draw.outline]:A.corners}},{author:L,intent:`Drew ${A.label} on the map \u2014 ${A.corners.length} corners`}),te(null))},q=A===null?m.regions.length===0?"Nothing drawn yet. Choose an area below, then click its corners here.":null:A.kind==="marker"?`Click where ${A.label} stands.`:A.corners.length<3?`Click the corners of ${A.label} \u2014 ${3-A.corners.length} more to make an area.`:`${A.corners.length} corners. Keep clicking, or press Done.`;return H?(0,E.jsxs)(Z,{title:r??"The plan",subtitle:`${s} drawn \xB7 ${w} standing in them`,...m.undrawn.length>0?{meta:`${m.undrawn.length} ${t.undrawnLabel??"not drawn yet"}`}:{},selected:o,fit:!0,children:[(0,E.jsx)("div",{style:{position:"relative",width:"100%",aspectRatio:`${u.w} / ${u.h}`,overflow:"hidden"},children:(0,E.jsxs)("svg",{ref:B,viewBox:`${u.x} ${u.y} ${u.w} ${u.h}`,width:"100%",height:"100%",preserveAspectRatio:"xMidYMid meet",role:A!==null?"application":W?"group":"img","aria-label":A===null?`${r??"The plan"}: ${s} drawn, ${w} standing in them`:q??"Drawing",onClick:I,"data-testid":"plan-canvas",style:{display:"block",position:"absolute",inset:0,cursor:A===null?void 0:"crosshair",border:"1px dashed color-mix(in oklab, var(--graview-edge) 80%, transparent)",borderRadius:".4rem",backgroundImage:"linear-gradient(color-mix(in oklab, var(--graview-edge) 35%, transparent) 1px, transparent 1px),linear-gradient(90deg, color-mix(in oklab, var(--graview-edge) 35%, transparent) 1px, transparent 1px)",backgroundSize:"10% 10%"},children:[(0,E.jsx)("text",{x:u.x+u.w-f*.028,y:u.y+f*.034,fontSize:f*.022,textAnchor:"middle",fill:"var(--graview-ink)",opacity:.55,children:"N"}),q!==null&&m.regions.length===0?(0,E.jsx)("text",{x:u.x+u.w/2,y:u.y+u.h/2,textAnchor:"middle",dominantBaseline:"middle",fontSize:f*.026,fill:"var(--graview-ink)",opacity:.7,style:{pointerEvents:"none",fontFamily:"var(--graview-font-body)"},children:q}):null,A!==null&&A.kind==="region"&&A.corners.length>0?(0,E.jsxs)("g",{style:{pointerEvents:"none"},children:[(0,E.jsx)("polyline",{points:A.corners.map(b=>`${b.x*$},${b.y*k}`).join(" "),fill:A.corners.length>=3?"color-mix(in oklab, var(--graview-accent) 22%, transparent)":"none",stroke:"var(--graview-accent)",strokeWidth:3,strokeDasharray:"8 6"}),A.corners.map((b,C)=>(0,E.jsx)("circle",{cx:b.x*$,cy:b.y*k,r:f*.008,fill:"var(--graview-accent)"},C))]}):null,m.regions.map(b=>{let C=hn(b.id,g,y),N=P&&C===void 0?.34:1,Y=b.outline.map(ce=>`${ce.x*$},${ce.y*k}`).join(" ");return(0,E.jsx)("g",{"data-graview-pick":b.id,...C?{"data-graview-emphasis":C}:{},role:"button","aria-label":`${b.label}${b.what?`, ${b.what}`:""}, ${b.markers.length} standing in it`,style:{opacity:N,cursor:"pointer"},children:(0,E.jsx)("polygon",{points:Y,fill:Hn(b.what,C,t.hues),stroke:Ut(b.what,C,t.hues),strokeWidth:C==="flagged"?5:2.5,strokeLinejoin:"round"})},b.id)}),m.regions.flatMap(b=>b.markers.map(C=>{let N=hn(C.id,g,y),Y=P&&N===void 0?.34:1;return(0,E.jsxs)("g",{...W?{"data-graview-pick":C.id,role:"button","aria-label":`${C.label}${C.what?`, ${C.what}`:""}, in ${b.label}`}:{"aria-hidden":!0},...N?{"data-graview-emphasis":N}:{},style:{opacity:Y,cursor:W?"pointer":"default"},children:[W?(0,E.jsx)("circle",{cx:C.at.x*$,cy:C.at.y*k,r:f*_t,fill:"transparent"}):null,(0,E.jsx)("circle",{cx:C.at.x*$,cy:C.at.y*k,r:f*.011,fill:N==="flagged"?"var(--graview-warn)":`hsl(${yn(C.what,t.hues)} 55% 45%)`,stroke:"var(--graview-panel)",strokeWidth:f*.004}),le.has(C.id)?(0,E.jsx)("text",{x:le.get(C.id).at.x,y:le.get(C.id).at.y,textAnchor:le.get(C.id).anchor,dominantBaseline:"middle",fontSize:le.get(C.id).size,fill:"var(--graview-ink)",stroke:"var(--graview-panel)",strokeWidth:Math.max(2,le.get(C.id).size*.3),paintOrder:"stroke","data-testid":`marker-label-${C.id}`,style:{pointerEvents:"none",fontFamily:"var(--graview-font-body)"},children:C.label}):null]},C.id)})),m.regions.map(b=>{let C=se.get(b.id),N=me.get(b.id);if(!C||N===void 0)return null;let Y=hn(b.id,g,y);return(0,E.jsx)("text",{x:N.x,y:N.y-(C.lines.length-1)*C.fontSize*1.15/2,textAnchor:"start",dominantBaseline:"middle",fontSize:C.fontSize,fill:"var(--graview-ink)",opacity:P&&Y===void 0?.34:1,stroke:"var(--graview-panel)",strokeWidth:Math.max(2,C.fontSize*.26),paintOrder:"stroke","data-testid":`region-label-${b.id}`,style:{pointerEvents:"none",fontFamily:"var(--graview-font-display)"},children:C.lines.map((ce,ye)=>(0,E.jsx)("tspan",{x:N.x,dy:ye===0?0:C.fontSize*1.15,children:ce},ce+String(ye)))},`label-${b.id}`)})]})}),O.length>0?(0,E.jsx)("ul",{"data-testid":"map-key",style:{margin:".5rem 0 0",padding:0,listStyle:"none",display:"flex",flexWrap:"wrap",gap:".2rem .75rem",fontSize:"0.875rem"},children:O.map(b=>(0,E.jsxs)("li",{"data-graview-pick":b.id,style:{display:"flex",alignItems:"center",gap:".35rem",minWidth:0,minHeight:"max(1.5rem, 24px)",padding:"0 .15rem",cursor:"pointer"},children:[(0,E.jsx)("span",{"aria-hidden":"true",style:{width:b.round?".55rem":".7rem",height:b.round?".55rem":".7rem",flex:"0 0 auto",borderRadius:b.round?"50%":".15rem",background:b.round?`hsl(${yn(b.what,t.hues)} 55% 45%)`:Hn(b.what,void 0,t.hues),border:b.round?void 0:`1px solid ${Ut(b.what,void 0,t.hues)}`}}),(0,E.jsx)("span",{style:{minWidth:0,overflowWrap:"anywhere"},children:b.label})]},b.id))}):null,A!==null?(0,E.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:".5rem",marginTop:".5rem",alignItems:"center"},children:[m.regions.length>0&&q!==null?(0,E.jsx)("span",{style:{fontSize:"0.9375rem",opacity:.8,flexBasis:"100%"},"aria-live":"polite",children:q}):null,A.kind==="region"?(0,E.jsxs)("button",{type:"button",onClick:D,disabled:A.corners.length<3,"data-testid":"draw-done",style:{...Qe,background:"var(--graview-accent)",color:"var(--graview-accent-ink)",borderColor:"transparent"},children:["Done \u2014 keep ",A.label]}):null,A.kind==="region"&&A.corners.length>0?(0,E.jsx)("button",{type:"button",onClick:()=>te({...A,corners:A.corners.slice(0,-1)}),style:Qe,children:"Undo a corner"}):null,(0,E.jsx)("button",{type:"button",onClick:()=>te(null),style:Qe,"data-testid":"draw-cancel",children:"Stop"})]}):(0,E.jsxs)(E.Fragment,{children:[he&&m.undrawn.length>0?(0,E.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:".4rem",marginTop:".5rem",alignItems:"center"},children:[(0,E.jsxs)("span",{style:{fontSize:"0.875rem",opacity:.75},children:[t.undrawnLabel??"Not drawn yet",":"]}),m.undrawn.map(b=>(0,E.jsxs)("button",{type:"button",style:Qe,onClick:()=>te({kind:"region",id:b.id,label:b.label,corners:[]}),"data-testid":`draw-${b.id}`,children:["Draw ",b.label]},b.id))]}):null,h&&m.strays.length>0?(0,E.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:".4rem",marginTop:".5rem",alignItems:"center"},children:[(0,E.jsxs)("span",{style:{fontSize:"0.875rem",opacity:.75},children:[t.strayLabel??"Not placed",":"]}),m.strays.map(b=>(0,E.jsxs)("button",{type:"button",style:Qe,onClick:()=>te({kind:"marker",id:b.id,label:b.label}),"data-testid":`place-${b.id}`,children:["Place ",b.label]},b.id))]}):null,t.help!==void 0&&(m.undrawn.length>0||m.strays.length>0)?(0,E.jsx)("p",{style:{margin:".5rem 0 0",fontSize:"0.875rem"},children:(0,E.jsx)("a",{href:t.help.href,"data-testid":"map-help",children:t.help.label})}):null,!he&&(m.undrawn.length>0||m.strays.length>0)?(0,E.jsxs)("p",{style:{margin:".5rem 0 0",fontSize:"0.875rem",opacity:.75},children:[m.undrawn.map(b=>b.label).join(", "),m.undrawn.length>0?` \u2014 ${t.undrawnLabel??"not drawn yet"}. `:"",m.strays.map(b=>b.label).join(", "),m.strays.length>0?` \u2014 ${t.strayLabel??"not placed"}.`:""]}):null]})]}):(0,E.jsx)(Z,{title:r??"The plan",subtitle:`${s} drawn \xB7 ${w} standing in them`,selected:o,children:(0,E.jsx)(Ft,{map:m,options:t,...g?{implicated:g}:{},...y?{flagged:y}:{}})})}var Jt=G(J(),1);function Yt(e){function t(n){let{store:r}=Q();return(0,Jt.jsx)(Kt,{schema:r.schema,...n,options:e})}return{name:"plan",requiredRoles:[...qt],options:e,View:t,build(n,r,a){return fn(n,r,e,a)}}}var ne=G(J(),1);function Pr(e,t,n){let r=t.flatMap(o=>(o.subject&&o.subject.kinds!=="*"?o.subject.kinds:[null]).map(y=>({name:o.name,title:o.title??o.name,kind:y}))),a=[];for(let o of n){let g={kind:"human",id:"themselves",roles:[o]};for(let y of r){let c=y.kind??void 0,v=Sn(e,g,y.name,c).ok,l=!v&&Sn(e,g,y.name,c,void 0,"themselves").ok;a.push({role:o,act:y.name,kind:y.kind,may:v?"yes":l?"self":"no"})}}return{roles:n,acts:r,cells:a}}function Tr({label:e,fidelity:t,mode:n}){let{store:r}=Q(),a=r.policy,o=a?.roles??[],g=r.allMutations().filter(p=>!p.derived).map(p=>({name:p.name,...p.title?{title:p.title}:{},...p.subject?{subject:p.subject}:{}})),y=Pr(a,g,o),c=e??"Who may do what";if(!a||o.length===0)return(0,ne.jsxs)("div",{"data-testid":"reach-lens",style:{padding:14,color:"var(--graview-ink-muted)",fontSize:"0.875rem"},children:[c,": this installation has no policy, so everyone may do everything."]});if(t==="glyph")return(0,ne.jsx)(ue,{label:`${c} \xB7 ${o.length} ${o.length===1?"role":"roles"}`,hue:ie("role")});let v=n==="fullscreen",l=p=>p==="yes"?"\u25CF":p==="self"?"\u25D0":"\xB7";return(0,ne.jsxs)("div",{"data-testid":"reach-lens",style:{display:"grid",gap:10,padding:v?0:14,borderRadius:"var(--graview-radius, 12px)",background:v?"transparent":"var(--graview-panel)",border:v?"none":"1px solid var(--graview-edge)",color:"var(--graview-ink)",minWidth:0},children:[(0,ne.jsxs)("div",{style:{display:"flex",alignItems:"baseline",gap:10},children:[(0,ne.jsx)("span",{style:{fontFamily:"var(--graview-font-display)",fontSize:"1.125rem",fontWeight:600},children:c}),(0,ne.jsx)("span",{style:{marginLeft:"auto",fontSize:"0.75rem",color:"var(--graview-ink-faint)"},children:"\u25CF may \xB7 \u25D0 on their own record \xB7 read from the policy"})]}),(0,ne.jsx)("div",{"data-scroller":!0,style:{overflowX:"auto"},children:(0,ne.jsxs)("table",{style:{borderCollapse:"collapse",fontSize:"0.875rem",minWidth:"100%"},children:[(0,ne.jsx)("thead",{children:(0,ne.jsxs)("tr",{children:[(0,ne.jsx)("th",{scope:"col",style:{textAlign:"left",padding:"4px 10px 6px 0",fontWeight:500,color:"var(--graview-ink-faint)",fontSize:"0.75rem",letterSpacing:"0.12em",textTransform:"uppercase"},children:"Role"}),y.acts.map(p=>(0,ne.jsxs)("th",{scope:"col",title:p.kind?`${p.title}, on ${Yn(nn(r.schema.tryDefinition(p.kind),p.kind))}`:p.title,style:{textAlign:"left",padding:"4px 10px 6px",fontWeight:500,whiteSpace:"nowrap",color:"var(--graview-ink-muted)",fontSize:"0.8125rem"},children:[p.title,p.kind?(0,ne.jsxs)("span",{style:{color:"var(--graview-ink-faint)"},children:[" \xB7 ",p.kind]}):null]},`${p.name}|${p.kind??""}`))]})}),(0,ne.jsx)("tbody",{children:y.roles.map(p=>(0,ne.jsxs)("tr",{children:[(0,ne.jsx)("th",{scope:"row",style:{textAlign:"left",padding:"6px 10px 6px 0",fontWeight:600,whiteSpace:"nowrap",borderTop:"1px solid var(--graview-edge)"},children:p}),y.acts.map(d=>{let m=y.cells.find(s=>s.role===p&&s.act===d.name&&s.kind===d.kind);return(0,ne.jsx)("td",{"data-graview-reach":m.may,title:`${p} ${m.may==="yes"?"may":m.may==="self"?"may, on their own record,":"may not"} ${d.title.toLowerCase()}`,style:{padding:"6px 10px",textAlign:"center",borderTop:"1px solid var(--graview-edge)",color:m.may==="no"?"var(--graview-ink-faint)":"var(--graview-accent)",fontSize:m.may==="no"?"0.875rem":"0.8125rem"},children:l(m.may)},`${d.name}|${d.kind??""}`)})]},p))})]})})]})}var Qt={name:"reach",requiredRoles:[],View:Tr};var X=G(J(),1),Xt=["start","end"];function Lr(e,t,{pad:n=45,minimum:r=480}={}){if(e.length===0)return{start:0,end:t};let a=Math.min(...e.map(v=>v.start)),o=Math.max(...e.map(v=>v.end)),g=Math.max(0,a-n),y=Math.min(t,o+n),c=r-(y-g);return c>0&&(g=Math.max(0,g-c/2),y=Math.min(t,g+r)),{start:Math.floor(g),end:Math.ceil(y)}}function Nr(e){let t=[...e].sort((o,g)=>o.start-g.start||o.end-g.end||o.id.localeCompare(g.id)),n=[],r=t.map(o=>{let g=n.findIndex(y=>y<=o.start);return g===-1?(g=n.length,n.push(o.end)):n[g]=o.end,{...o,lane:g,lanes:1}}),a=Math.max(1,n.length);return r.map(o=>({...o,lanes:a}))}var Gn=class extends Error{constructor(t,n){super(`The timeline lens needs ${n.join(" and ")} for "${t}". Add them to the lens bindings: { ${t}: { ${n.map(r=>`${r}: "<field name>"`).join(", ")} } }.`),this.name="TimelineBindingError"}};function Zt(e,t,n){let r=He(t[e.kind],n?.tryDefinition(e.kind));if(!r)return null;let a=e,o=n?.tryDefinition(e.kind)?.fields.shape,g=Xt.filter(l=>{let p=r[l];return p?o?!(p in o):!(p in a):!0});if(g.length>0)throw new Gn(e.kind,g);let y=Number(a[r.start]??Number.NaN),c=Number(a[r.end]??y);if(!Number.isFinite(y))return null;let v=[];if(r.columns){let l=a[r.columns];Array.isArray(l)&&v.push(...l.map(String))}if(r.column){let l=a[r.column];l!=null&&v.push(String(l))}return{id:e.id,kind:e.kind,label:pe(n?.tryDefinition(e.kind),e),columnIds:v,start:y,end:Number.isFinite(c)?Math.max(c,y):y}}function Dr(e,t){let n=Math.round(t),r=a=>`linear-gradient(hsl(${n} 55% var(--graview-tint-lightness) / ${a}), hsl(${n} 55% var(--graview-tint-lightness) / ${a})), var(--graview-panel)`;return e==="lit"?{border:"1px solid var(--graview-accent)",background:r("calc(var(--graview-tint-alpha) * 1.15)"),color:"var(--graview-ink)",boxShadow:"0 0 16px -4px var(--graview-accent)"}:e==="dimmed"?{border:"1px solid var(--graview-edge)",background:r("calc(var(--graview-tint-alpha) * 0.25)"),color:"var(--graview-ink-muted)"}:{border:`1px solid hsl(${n} 50% var(--graview-tint-lightness) / 0.42)`,background:r("var(--graview-tint-alpha)"),color:"var(--graview-ink)"}}var zr=.045,Xe=52;function Br({nodes:e,label:t,fidelity:n,mode:r,options:a,schema:o,selectedIds:g=[],implicated:y=[],flagged:c=[]}){let v=new Set([...y,...g]),l=R=>v.size===0?"plain":v.has(R)?"lit":"dimmed",p=new Set(c),d=(e??[]).map(R=>Zt(R,a.bindings,o)).filter(R=>R!==null),m=a.hueOf??(R=>ie(R.kind));if(n==="glyph")return(0,X.jsx)(ue,{label:`${t??"Timeline"} \xB7 ${d.length}`,hue:ie("timeline")});if(n==="summary")return(0,X.jsx)(Z,{title:t??"Timeline",meta:`${d.length} items`,tone:"muted",children:(0,X.jsx)(Ae,{max:a.columns.length,items:a.columns.map(R=>({id:R.id,label:`${R.label} ${d.filter(u=>u.columnIds.includes(R.id)).length}`,hue:ie(R.id)}))})});let s=a.format??String,w=Lr(d,a.extent,{...a.minWindow===void 0?{}:{minimum:a.minWindow}}),i=w.end-w.start,x=R=>(R-w.start)/i*100,S=a.tick??Math.max(60,Math.round(i/8/60)*60),$=[];for(let R=Math.ceil(w.start/S)*S;R<=w.end;R+=S)$.push(R);let M=r==="fullscreen";return(0,X.jsx)(Z,{title:t??"Timeline",meta:`${s(w.start)} \u2013 ${s(w.end)}`,style:{gap:12,...M?{flex:"1 1 auto",minHeight:0,height:"100%"}:{}},children:(0,X.jsxs)("div",{style:{display:"flex",flexDirection:"column",height:"100%",minHeight:0},children:[(0,X.jsx)("div",{style:{display:"flex",paddingLeft:Xe,paddingBottom:10},children:a.columns.map(R=>(0,X.jsx)("div",{style:{flex:1,fontSize:"0.75rem",letterSpacing:"0.18em",textTransform:"uppercase",textAlign:"center",color:"var(--graview-ink-muted)"},children:R.label},R.id))}),(0,X.jsxs)("div",{style:{position:"relative",flex:1,minHeight:0},children:[$.map((R,u)=>(0,X.jsx)("div",{style:{position:"absolute",left:Xe-8,right:0,top:u===$.length-1?"calc(100% - 1px)":`${x(R)}%`,height:1,background:"var(--graview-edge)"},children:(0,X.jsx)("span",{style:{position:"absolute",left:-(Xe-8),...u===$.length-1?{bottom:2}:{top:-7},width:Xe-16,textAlign:"right",fontSize:"0.75rem",letterSpacing:"0.06em",color:"var(--graview-ink-faint)"},children:s(R)})},R)),(0,X.jsx)("div",{style:{position:"absolute",inset:0,left:Xe,display:"flex",gap:4},children:a.columns.map(R=>(0,X.jsx)(Vr,{spans:d.filter(u=>u.columnIds.includes(R.id)),window:w,format:s,hue:m,emphasisOf:l,brokenIds:p},R.id))})]})]})})}function Vr({spans:e,window:t,format:n,hue:r,emphasisOf:a,brokenIds:o}){let g=t.end-t.start,y=d=>(d-t.start)/g*100,c=d=>(d.end-d.start)/g<zr,v=Nr(e.filter(d=>!c(d))),l=[...e.filter(c)].sort((d,m)=>d.start-m.start),p=Math.max(1,...v.map(d=>d.lanes));return(0,X.jsxs)("div",{style:{position:"relative",flex:1,minWidth:0},children:[v.map(d=>{let m=100/p,s=Math.max(1.6,y(d.end)-y(d.start));return(0,X.jsx)("div",{"data-graview-span":d.id,"data-graview-pick":d.id,"data-graview-emphasis":a(d.id),title:`${d.label} \xB7 ${n(d.start)}\u2013${n(d.end)}`,style:{position:"absolute",top:`${y(d.start)}%`,height:`${s}%`,left:`${d.lane*m}%`,width:`${m}%`,padding:"0 2px 2px 0",boxSizing:"border-box"},children:(0,X.jsx)("div",{style:{height:"100%",minHeight:15,borderRadius:6,padding:"3px 6px",fontSize:"0.75rem",lineHeight:1.25,overflow:"hidden",display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical",...Dr(a(d.id),r(d)),...o.has(d.id)?{borderLeft:"3px solid var(--graview-warn)",paddingLeft:4}:{}},children:s>=3.4?d.label:null})},d.id)}),l.map(d=>{let m=a(d.id);return(0,X.jsxs)("div",{"data-graview-span":d.id,"data-graview-pick":d.id,"data-graview-emphasis":m,"data-graview-moment":"",title:`${d.label} \xB7 ${n(d.start)}`,style:{position:"absolute",top:`${y(d.start)}%`,right:0,maxWidth:"100%",boxSizing:"border-box",transform:"translateY(-50%)",display:"flex",alignItems:"center",justifyContent:"flex-end",gap:5,minHeight:24,padding:"0 4px 0 8px",borderRadius:999,background:"linear-gradient(90deg, transparent, var(--graview-ground) 35%)"},children:[(0,X.jsx)("span",{style:{fontSize:"0.6875rem",letterSpacing:"0.04em",whiteSpace:"nowrap",color:m==="lit"?"var(--graview-accent)":"var(--graview-ink-faint)"},children:n(d.start)}),(0,X.jsx)("span",{style:{fontSize:"0.75rem",minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",color:m==="dimmed"?"var(--graview-ink-faint)":"var(--graview-ink)"},children:d.label}),(0,X.jsx)("span",{style:{width:7,height:7,borderRadius:999,flex:"0 0 auto",background:o.has(d.id)?"var(--graview-warn)":m==="dimmed"?"var(--graview-edge)":`hsl(${Math.round(r(d))} 60% var(--graview-tint-lightness))`,boxShadow:o.has(d.id)?"0 0 0 3px var(--graview-warn)":m==="lit"?"0 0 0 3px var(--graview-accent-dim)":m==="dimmed"?void 0:`0 0 8px hsl(${Math.round(r(d))} 60% var(--graview-tint-lightness) / 0.45)`}})]},d.id)})]})}function er(e){function t(n){let{store:r}=Q(),a=Object.keys(e.bindings),{nodes:o,bar:g}=Ve(n,{...e.arranging!==void 0?{allow:e.arranging}:{},lensAllows:{group:!1},...e.arrangedBy?{arrangedBy:e.arrangedBy}:{},...a[0]?{kind:(n.nodes??[]).find(c=>a.includes(String(c.kind)))?.kind??a[0]}:{}}),y=(0,X.jsx)(Br,{schema:r.schema,...n,nodes:o,options:e});return Ee(n,r.schema,g?(0,X.jsxs)("div",{style:{display:"grid",gap:6,height:"100%",minHeight:0,gridTemplateRows:"auto 1fr"},children:[g,y]}):y)}return{name:"timeline",requiredRoles:[...Xt],bindings:e.bindings,options:e,View:t,place(n,r){return n.map(a=>Zt(a,e.bindings,r)).filter(a=>a!==null)}}}var qe=G(J(),1),nr=new WeakMap,jn=e=>String(e).padStart(2,"0");function Wr(e){return e===1440?t=>`${jn(Math.floor(t/60))}:${jn(Math.round(t%60))}`:e===24?t=>`${jn(Math.floor(t))}:00`:t=>String(t)}function Ir(e){let t=e.options;switch(e.lens){case"timeline":{let n=typeof t.extent=="number"?t.extent:1440;return er({...t,extent:n,format:Wr(n)}).View}case"calendar":return Lt({...t,...typeof t.today=="string"?{today:t.today}:{}}).View;case"coverage":return Gt(t).View;case"board":return vt(t).View;case"plan":return Yt(t).View;case"reach":return Qt.View;case"columns":return Dt(t).View;case"blocks":return Hr(rt(Array.isArray(t.blocks)?t.blocks:[]))}}function Hr(e){return t=>{let n=(0,qe.jsx)(ct,{blocks:e,slot:"place",heading:t.mode==="fullscreen"?2:3});return t.fidelity==="glyph"?(0,qe.jsx)("span",{className:"graview-spec-title",children:t.label}):t.mode==="fullscreen"?(0,qe.jsx)("div",{style:{padding:"14px 16px"},children:n}):(0,qe.jsx)(Z,{title:t.label??"",children:n})}}function Mi(e){let t=nr.get(e);if(!t){let n=Ir(e),r=a=>(0,qe.jsx)(n,{...a,label:e.title});nr.set(e,t=r)}return t}export{Wr as a,Mi as b};
@@ -0,0 +1 @@
1
+ import{g as a}from"./chunk.ENMNLR73.js";import{b as s}from"./chunk.LZQZP2PD.js";function f(e){let r=new Map;for(let i of e.kinds){let n=e.tryDefinition(i),o=a(n);r.set(i,{fields:new Set(Object.keys(n?.fields?.shape??{})),edges:new Map(Object.entries(n?.edges??{}).map(([d,p])=>[d,p.cardinality??"many"])),...o?{computed:o}:{}})}let t=a(e);return t&&r.set(s,{computed:t}),r}export{f as a};
@@ -0,0 +1 @@
1
+ var r=i=>i.charAt(0).toUpperCase()+i.slice(1);export{r as a};
@@ -0,0 +1 @@
1
+ import{a as y}from"./chunk.SCLIBKLS.js";import{Aa as g,a as f,ya as m}from"./chunk.4JSMCNF7.js";import{T as p}from"./chunk.Y235YZSZ.js";import{a as R,b as c}from"./chunk.MRK6QJV5.js";import{b as u}from"./chunk.AJZBJBMO.js";var s=u(R(),1);var r=u(c(),1),S,h=()=>S??=m(f(()=>import("./chunk.5MAMCKVU.js")));function L(e){let[n,t]=(0,s.useState)(()=>h().current);return(0,s.useEffect)(()=>{if(!e||n)return;let i=!0;return h().load().then(a=>i&&t(a),()=>{}),()=>{i=!1}},[e,n]),n}function D(e,n){let t=L(n.length>0);return(0,s.useMemo)(()=>t?t.withLines(e,n):n,[t,e,n])}function I(e,n){let t=L(n.some(i=>i.shape));return(0,s.useMemo)(()=>{let i=new Map;if(!t)return i;for(let a of n){let l=t.ruleLine(a,e);l&&i.set(a.name,l)}return i},[t,e,n])}function M(e){let n=e.line;if(!(!n||e.message.endsWith(` \u2014 ${n.text}`)||e.message===b(e)))return e.message}function b(e){let n=e.line;return n?n.record!==void 0?`${n.record} \u2014 ${n.text}`:n.text:e.message}var P={name:{},op:{color:"var(--graview-ink-muted)",fontWeight:500},value:{fontWeight:600,fontVariantNumeric:"tabular-nums"},word:{color:"var(--graview-ink-muted)"},open:{color:"var(--graview-ink-faint)"},close:{color:"var(--graview-ink-faint)"}};function w({parts:e}){return(0,r.jsx)(r.Fragment,{children:e.map((n,t)=>(0,r.jsxs)("span",{children:[n.space?" ":"",(0,r.jsx)("span",{"data-graview-rule-part":n.as,style:P[n.as],children:n.text})]},t))})}function x(e,n){let t=p(e?.tryDefinition(n),n);return t.charAt(0).toUpperCase()+t.slice(1)}function C({line:e,schema:n,brand:t,lead:i=e.record===void 0?"kind":"record",stacked:a=!1,style:l}){let d=e.kind,o=i==="kind"?d?x(n,d):void 0:i==="record"?e.record:void 0,k=i==="kind"&&o?`${o}: ${e.said}`:i==="record"&&o?`${o} \u2014 ${e.said}`:e.said;return(0,r.jsxs)("span",{"data-graview-rule-line":"",style:{overflowWrap:"anywhere",...l},children:[(0,r.jsx)("span",{style:g,children:k}),(0,r.jsxs)("span",{"aria-hidden":"true",children:[i!=="none"&&d?(0,r.jsx)("span",{style:{display:"inline-flex",verticalAlign:"-0.1em",marginRight:"0.4em"},children:(0,r.jsx)(y,{kind:d,...n?{schema:n}:{},...t?{brand:t}:{},size:13})}):null,o?(0,r.jsxs)("span",{"data-graview-rule-head":"",style:{fontWeight:600,marginRight:i==="record"||a?0:"0.6em"},children:[o,i==="record"&&!a?(0,r.jsx)("span",{style:{color:"var(--graview-ink-faint)",fontWeight:400},children:" \u2014 "}):null]}):null,a&&o?(0,r.jsx)("br",{}):null,(0,r.jsx)(w,{parts:e.parts}),e.when&&e.when.length>0?(0,r.jsxs)("span",{"data-graview-rule-when":"",style:{color:"var(--graview-ink-faint)"},children:[", when ",(0,r.jsx)(w,{parts:e.when})]}):null]})]})}function z(e){return e.line?e.label&&e.label.trim().length>0?e.label:void 0:e.label&&e.label!==e.message?e.label:void 0}export{D as a,I as b,M as c,b as d,C as e,z as f};
@@ -0,0 +1,14 @@
1
+ import{a as v}from"./chunk.MRK6QJV5.js";import{a as s}from"./chunk.AJZBJBMO.js";var l=s(i=>{"use strict";var m=v();function y(r){var e="https://react.dev/errors/"+r;if(1<arguments.length){e+="?args[]="+encodeURIComponent(arguments[1]);for(var t=2;t<arguments.length;t++)e+="&args[]="+encodeURIComponent(arguments[t])}return"Minified React error #"+r+"; visit "+e+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function c(){}var n={d:{f:c,r:function(){throw Error(y(522))},D:c,C:c,L:c,m:c,X:c,S:c,M:c},p:0,findDOMNode:null},O=Symbol.for("react.portal");function S(r,e,t){var f=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:O,key:f==null?null:""+f,children:r,containerInfo:e,implementation:t}}var u=m.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function a(r,e){if(r==="font")return"";if(typeof e=="string")return e==="use-credentials"?e:""}i.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=n;i.createPortal=function(r,e){var t=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)throw Error(y(299));return S(r,e,null,t)};i.flushSync=function(r){var e=u.T,t=n.p;try{if(u.T=null,n.p=2,r)return r()}finally{u.T=e,n.p=t,n.d.f()}};i.preconnect=function(r,e){typeof r=="string"&&(e?(e=e.crossOrigin,e=typeof e=="string"?e==="use-credentials"?e:"":void 0):e=null,n.d.C(r,e))};i.prefetchDNS=function(r){typeof r=="string"&&n.d.D(r)};i.preinit=function(r,e){if(typeof r=="string"&&e&&typeof e.as=="string"){var t=e.as,f=a(t,e.crossOrigin),g=typeof e.integrity=="string"?e.integrity:void 0,d=typeof e.fetchPriority=="string"?e.fetchPriority:void 0;t==="style"?n.d.S(r,typeof e.precedence=="string"?e.precedence:void 0,{crossOrigin:f,integrity:g,fetchPriority:d}):t==="script"&&n.d.X(r,{crossOrigin:f,integrity:g,fetchPriority:d,nonce:typeof e.nonce=="string"?e.nonce:void 0})}};i.preinitModule=function(r,e){if(typeof r=="string")if(typeof e=="object"&&e!==null){if(e.as==null||e.as==="script"){var t=a(e.as,e.crossOrigin);n.d.M(r,{crossOrigin:t,integrity:typeof e.integrity=="string"?e.integrity:void 0,nonce:typeof e.nonce=="string"?e.nonce:void 0})}}else e==null&&n.d.M(r)};i.preload=function(r,e){if(typeof r=="string"&&typeof e=="object"&&e!==null&&typeof e.as=="string"){var t=e.as,f=a(t,e.crossOrigin);n.d.L(r,t,{crossOrigin:f,integrity:typeof e.integrity=="string"?e.integrity:void 0,nonce:typeof e.nonce=="string"?e.nonce:void 0,type:typeof e.type=="string"?e.type:void 0,fetchPriority:typeof e.fetchPriority=="string"?e.fetchPriority:void 0,referrerPolicy:typeof e.referrerPolicy=="string"?e.referrerPolicy:void 0,imageSrcSet:typeof e.imageSrcSet=="string"?e.imageSrcSet:void 0,imageSizes:typeof e.imageSizes=="string"?e.imageSizes:void 0,media:typeof e.media=="string"?e.media:void 0})}};i.preloadModule=function(r,e){if(typeof r=="string")if(e){var t=a(e.as,e.crossOrigin);n.d.m(r,{as:typeof e.as=="string"&&e.as!=="script"?e.as:void 0,crossOrigin:t,integrity:typeof e.integrity=="string"?e.integrity:void 0})}else n.d.m(r)};i.requestFormReset=function(r){n.d.r(r)};i.unstable_batchedUpdates=function(r,e){return r(e)};i.useFormState=function(r,e,t){return u.H.useFormState(r,e,t)};i.useFormStatus=function(){return u.H.useHostTransitionStatus()};i.version="19.2.8"});var E=s((R,_)=>{"use strict";function o(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(o)}catch(r){console.error(r)}}o(),_.exports=l()});export{E as a};
2
+ /*! Bundled license information:
3
+
4
+ react-dom/cjs/react-dom.production.js:
5
+ (**
6
+ * @license React
7
+ * react-dom.production.js
8
+ *
9
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
10
+ *
11
+ * This source code is licensed under the MIT license found in the
12
+ * LICENSE file in the root directory of this source tree.
13
+ *)
14
+ */
@@ -0,0 +1,16 @@
1
+ import{c as E,d as I}from"./chunk.YAONM74M.js";import"./chunk.3MLQ3Q5X.js";import"./chunk.LGUV2J6Q.js";import"./chunk.4JSMCNF7.js";import{I as A,M as k}from"./chunk.Y235YZSZ.js";import{a as F,b as S}from"./chunk.MRK6QJV5.js";import{b as f}from"./chunk.AJZBJBMO.js";var v=f(F(),1);var a=f(S(),1),C=40,O=60;function D(l,i,p){return l.allNodes().filter(o=>o.kind===i).map(o=>o[p])}function G(l){if(l.length<2)return[];let i=[...l].sort((n,d)=>n-d),p=i[i.length-1]-i[0];if(p<=0)return[];let o=Math.max(1,10**Math.floor(Math.log10(p/4))),e=p/4>=o*5?o*5:o,r=n=>Math.round(n/e)*e;return[...new Set([.2,.4,.6,.8].map(n=>r(i[Math.floor(n*(i.length-1))])))].filter(n=>n>0)}function T(l,i,p){let o=p.far??[],e=new Map,r=new Set(o);for(let t of i.allNodes())r.has(t.kind)&&e.set(t.id,A(l.tryDefinition(t.kind),t));let n=[...e.entries()].map(([t,g])=>({id:t,label:g}));return(n.length<=C?n:n.map(t=>({end:t,ties:i.out(t.id).length+i.in(t.id).length})).sort((t,g)=>g.ties-t.ties||t.end.label.localeCompare(g.end.label)).slice(0,C).map(t=>t.end)).sort((t,g)=>t.label.localeCompare(g.label))}function R(l,i,p){let o=[];for(let e of p.filters)if(e.about==="is")for(let r of e.options??[])o.push({value:`is:${r}`,label:r,group:e.label,condition:{key:"is",value:r}});else if(e.about==="edge"){o.push({value:`${e.key}:*`,label:"anything",group:e.label,condition:{key:e.key,value:"*"}}),o.push({value:`${e.key}:none`,label:"nothing",group:e.label,condition:{key:e.key,value:"none"}});for(let r of T(l,i,e))o.push({value:`${e.key}:${r.id}`,label:r.label,group:e.label,condition:{key:e.key,value:r.id}})}else if(e.type==="date")for(let r of["before","after","on"])o.push({value:`${e.key}:${r}`,label:`${r}\u2026`,group:e.label,ask:{key:e.key,op:r,label:e.label}});else if(e.type==="number"){let r=l.tryDefinition(p.kind),n=G(D(i,p.kind,e.key).filter(d=>typeof d=="number"));for(let d of["at-most","at-least"])for(let t of d==="at-most"?n:[...n].reverse())o.push({value:`${e.key}:${d}:${t}`,label:`${d==="at-most"?"at most":"at least"} ${k(r,e.key,t)}`,group:e.label,condition:{key:e.key,value:`${d}:${t}`}})}else if(e.type==="text"){let r=[...new Set(D(i,p.kind,e.key).filter(n=>typeof n=="string"&&n.length>0&&!n.includes(",")))].sort((n,d)=>n.localeCompare(d));if(r.length>=2&&r.length<=O)for(let n of r)o.push({value:`${e.key}:${n}`,label:n,group:e.label,condition:{key:e.key,value:n}})}else if(e.type==="boolean")o.push({value:`${e.key}:true`,label:"yes",group:e.label,condition:{key:e.key,value:"true"}}),o.push({value:`${e.key}:false`,label:"no",group:e.label,condition:{key:e.key,value:"false"}});else for(let r of e.options??[])o.push({value:`${e.key}:${r}`,label:k(l.tryDefinition(p.kind),e.key,r),group:e.label,condition:{key:e.key,value:r}});return o}var H=["day","week","month","year","decade"];function K(l){let{which:i,schema:p,graph:o,offers:e,arrangement:r,set:n,toggle:d,has:t,done:g}=l,y=l.testId,h=(0,v.useRef)(null);(0,v.useEffect)(()=>{let u=h.current?.closest("[data-graview-popover]");!u||document.activeElement!==u||(u.querySelector('[aria-pressed="true"]')??u.querySelector("button, input"))?.focus({preventScroll:!0})},[]);let L=r.sort?e.sorts.find(u=>u.key===r.sort.by):void 0,P=r.group?e.groups.find(u=>u.key===r.group.by):void 0,M=I(L),m=e.natural?e.sorts.find(u=>u.key===e.natural.by):void 0,N=i==="filter"||i==="all"&&l.parts?.filter?R(p,o,e):[],w=u=>(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("p",{children:"Sort by"}),(0,a.jsx)(c,{testId:`${y}-sort-default`,value:"",on:!r.sort,onPress:()=>(n({sort:void 0}),u()),children:m?`As declared (${E(m.label)})`:"As they were added"}),e.sorts.map(s=>(0,a.jsx)(c,{value:s.key,on:r.sort?.by===s.key,onPress:()=>(n({sort:{by:s.key,direction:r.sort?.direction??"asc"}}),u()),children:s.label},s.key)),r.sort?(0,a.jsxs)("div",{role:"group","aria-label":"Order","data-testid":`${y}-direction`,children:[(0,a.jsx)("p",{"aria-hidden":"true",children:"Order"}),["asc","desc"].map(s=>(0,a.jsx)(c,{testId:`${y}-direction-${s}`,value:s,on:r.sort.direction===s,onPress:()=>(n({sort:{by:r.sort.by,direction:s}}),u()),children:M[s]},s))]}):null]}),x=u=>(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("p",{children:"Group by"}),(0,a.jsx)(c,{testId:`${y}-group-none`,value:"",on:!r.group,onPress:()=>(n({group:void 0}),u()),children:"Not grouped"}),e.groups.map(s=>(0,a.jsx)(c,{value:s.key,on:r.group?.by===s.key,onPress:()=>(n({group:{by:s.key}}),u()),children:s.label},s.key)),r.group&&P?.buckets?(0,a.jsxs)("div",{role:"group","aria-label":"How wide a group is","data-testid":`${y}-bucket`,children:[(0,a.jsx)("p",{"aria-hidden":"true",children:"Each group"}),H.map(s=>(0,a.jsx)(c,{testId:`${y}-bucket-${s}`,value:s,on:(r.group.bucket??"day")===s,onPress:()=>(n({group:{by:r.group.by,bucket:s}}),u()),children:`A ${s}`},s))]}):null]}),$=u=>(0,a.jsx)(z,{entries:N,has:t,testId:y,onToggle:s=>(d(s),u())}),b=l.parts??{sort:!0,group:!0,filter:!0};return(0,a.jsxs)("div",{ref:h,style:{display:"contents"},children:[(0,a.jsx)("style",{children:W}),i==="sort"?w(g):i==="group"?x(g):i==="filter"?$(g):(0,a.jsxs)(a.Fragment,{children:[b.sort?(0,a.jsx)("div",{role:"group","aria-label":"Sort",children:w(g)}):null,b.group?(0,a.jsx)("div",{role:"group","aria-label":"Group",children:x(g)}):null,b.filter?(0,a.jsx)("div",{role:"group","aria-label":"Filter",children:$(g)}):null]})]})}function c({value:l,on:i,onPress:p,testId:o,children:e}){return(0,a.jsx)("button",{type:"button",className:"graview-arrange-item",value:l,"data-value":l,"aria-pressed":i,onClick:p,...o?{"data-testid":o}:{},children:e})}function z({entries:l,has:i,testId:p,onToggle:o}){let[e,r]=(0,v.useState)(null);if(e)return(0,a.jsx)(B,{ask:e,testId:p,onDay:d=>o({key:e.key,value:`${e.op}:${d}`}),onCancel:()=>r(null)});let n=[...new Set(l.map(d=>d.group))];return(0,a.jsx)(a.Fragment,{children:n.map(d=>(0,a.jsxs)("div",{role:"group","aria-label":d,children:[(0,a.jsx)("p",{"aria-hidden":"true",children:d}),l.filter(t=>t.group===d).map(t=>(0,a.jsx)(c,{value:t.value,on:t.condition?i(t.condition):!1,onPress:()=>t.condition?o(t.condition):r(t.ask),children:t.label},t.value))]},d))})}function B({ask:l,testId:i,onDay:p,onCancel:o}){let[e,r]=(0,v.useState)(""),n=/^\d{4}-\d{2}-\d{2}$/.test(e)&&Number(e.slice(0,4))>=1e3,d=()=>{n&&p(e)};return(0,a.jsxs)("div",{role:"group","aria-label":`${l.label} ${l.op} which day`,"data-testid":`${i}-ask-day`,className:"graview-arrange-ask",children:[(0,a.jsx)("p",{"aria-hidden":"true",children:`${l.label} ${l.op}`}),(0,a.jsx)("input",{type:"date","data-testid":`${i}-day`,"aria-label":`${l.label} ${l.op} which day`,autoFocus:!0,value:e,onChange:t=>r(t.target.value),onKeyDown:t=>{t.key==="Enter"?(t.preventDefault(),d()):t.key==="Escape"&&(t.preventDefault(),t.stopPropagation(),t.nativeEvent.stopImmediatePropagation(),o())}}),(0,a.jsxs)("span",{children:[(0,a.jsx)("button",{type:"button","data-testid":`${i}-day-add`,disabled:!n,onClick:d,children:"Add"}),(0,a.jsx)("button",{type:"button",onClick:o,children:"Never mind"})]})]})}var W=`
2
+ .graview-arrange-list{display:grid;align-content:start;width:min(300px,calc(100vw - 24px));height:auto;max-height:min(70vh,520px);overflow:auto;margin:0;padding:6px;border-radius:10px;border:1px solid var(--graview-edge);background:var(--graview-float);box-shadow:var(--graview-lift-high);color:var(--graview-ink);font-size:.875rem;line-height:1.3}
3
+ .graview-arrange-list [role=group]{display:grid}
4
+ .graview-arrange-list p{margin:8px 8px 2px;font-size:.6875rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--graview-ink-muted)}
5
+ .graview-arrange-item{display:flex;align-items:flex-start;gap:8px;width:100%;min-height:30px;margin:0;padding:6px 8px;border:0;border-radius:7px;background:none;font:inherit;text-align:left;color:var(--graview-ink);cursor:pointer;overflow-wrap:anywhere}
6
+ .graview-arrange-item::before{content:"";flex:0 0 12px}
7
+ .graview-arrange-item[aria-pressed=true]{font-weight:600}
8
+ .graview-arrange-item[aria-pressed=true]::before{content:"\u2713";color:var(--graview-accent)}
9
+ .graview-arrange-item:hover{background:color-mix(in srgb,var(--graview-ink) 7%,transparent)}
10
+ .graview-arrange-ask{display:grid;gap:8px;padding:0 8px 8px}
11
+ .graview-arrange-ask p{margin:8px 0 0}
12
+ .graview-arrange-ask input{box-sizing:border-box;width:100%;min-height:32px;padding:0 8px;border:1px solid var(--graview-edge);border-radius:7px;background:var(--graview-panel);font:inherit;color:var(--graview-ink)}
13
+ .graview-arrange-ask span{display:flex;gap:8px}
14
+ .graview-arrange-ask button{min-height:30px;padding:0 12px;border:1px solid var(--graview-edge);border-radius:7px;background:var(--graview-panel);font:inherit;color:var(--graview-ink);cursor:pointer}
15
+ .graview-arrange-ask button:disabled{opacity:.5;cursor:default}
16
+ `;export{K as ArrangeLists,C as FAR_ENDS,R as filterEntries,G as roundSteps};
@@ -0,0 +1 @@
1
+ import{a as We}from"./chunk.XEJS2VS5.js";import{a as Be,c as Ve,d as Fe}from"./chunk.4UQLZ7VW.js";import{d as Ge}from"./chunk.DJ26NOOW.js";import{b as je,e as G,f as ye}from"./chunk.SQD7ZPEJ.js";import{b as De}from"./chunk.WGNF4E67.js";import{d as me,e as ze,f as ge,h as Ie}from"./chunk.R5K7NK4U.js";import{a as Oe}from"./chunk.VRXWNUDR.js";import{b as qe}from"./chunk.DAKED3WK.js";import{C as Me,E as Ee,G as Ne,T as He,U as Ke,W as oe,ca as q,d as Ce,j as I,l as W,m as _,pa as re,r as j,s as Le,y as Re,z as Pe}from"./chunk.4JSMCNF7.js";import{I as xe,Ka as ne,La as fe,Na as Te,O as $e,Oa as Ae,P as te}from"./chunk.Y235YZSZ.js";import{a as U,b as ae}from"./chunk.MRK6QJV5.js";import{b as O}from"./chunk.AJZBJBMO.js";var Ue=O(U(),1);function Je(e,t){try{t.length===0?localStorage.removeItem(me(e)):localStorage.setItem(me(e),JSON.stringify(t))}catch{}}function dt(e,t){Je(e,[...ge(e).filter(r=>r.title!==t.title),t])}function ct(e,t){Je(e,ge(e).filter(r=>r.title!==t))}function pt(e,t){for(let r of e.places().filter(a=>a.title===t))e.forget?.(r.kind,r.as)}var ut=e=>e===!0?{written:!0}:typeof e=="object"&&e!==null?{written:e.kept===!0,...e.said?{said:e.said}:{}}:{written:!1},_e=e=>({title:e.title,lens:e.lens,on:e.on,...e.bindings?{bindings:e.bindings}:{},...e.options?{options:e.options}:{}});function ft(e,t){let r=a=>t.some(s=>s.title===a||s.as===ne(a));if(!r(e))return e;for(let a=2;;a++)if(!r(`${e} ${a}`))return`${e} ${a}`}function Qe(e){let{store:t,views:r,brand:a,seatTalk:s,onKeepLens:y}=q(),k=(0,Ue.useContext)(De),S=ze(a,t.schema),P=async c=>{let{edit:p}=c;if(c.written&&y)try{await y({op:"remove-lens",title:p.title,on:p.on})}catch{}ct(S,p.title),pt(r,p.title),k?.dismiss(`kept:${p.title}`),s.setTurns(g=>[...g.map(i=>i.kept&&i.kept.edit.title===p.title&&!i.kept.taken?{...i,kept:{...i.kept,taken:!0}}:i),{role:"seat",text:`Took \u201C${p.title}\u201D back out of the places.`}]);let l=te(t.schema,p.on);e({to:"kind",kind:p.on,title:l,address:fe(t.schema,p.on),said:`Went to ${l}.`})};return{keep:async c=>{let p=ft(c.edit.title,r.places()),l={...c.edit,title:p},g=!1,i;if(y)try{({written:g,said:i}=ut(await y(l)))}catch{g=!1}g||dt(S,_e(l)),Ie(r,t.schema,[_e(l)]);let f=r.places(),h=f.find(w=>w.title===p),x=i??(g?`Kept \u201C${p}\u201D as a lens: it is in the places now.`:y?`Kept \u201C${p}\u201D as your own lens. Ask the owner to keep it for everyone.`:`Kept \u201C${p}\u201D as your own lens.`),T={edit:l,written:g};s.setDraft(null),s.setTurns(w=>[...w,{role:"seat",text:x,kept:T}]),s.get().open||k?.notify({kind:"toast",id:`kept:${p}`,sentence:x,timeout:1e4,action:{label:"Take back",onSelect:()=>void P(T)}}),h&&e({to:"picture",kind:h.kind,as:h.as,title:p,address:Te(h.as,Ae(h,f)?fe(t.schema,h.kind).slice(1):void 0),said:`Went to ${p}.`})},takeBack:P}}var Ye=O(U(),1);function mt(e,t){switch(t.to){case"place":return{view:Ce("#")};case"picture":return{view:j(Ne(W(e,"filter",null),t.kind,t.as),[])};case"kind":{let r=Le(_({...I(e,Me(t.kind)),relation:null},!1),!0);return{view:j(W(W(r,"view",null),"filter",t.filter??null),[])}}case"record":return{view:j(I(_(W(W(e,"view",null),"filter",null),!1),t.id),[t.id])};case"problems":return{pane:"problems"}}}function gt(e){let t=typeof document>"u"?null:document.querySelector('[data-testid="standing"]');t&&t.getAttribute("aria-expanded")==="true"!==e&&t.click()}function Ze(){let{setView:e,seatTalk:t}=q();return(0,Ye.useCallback)(r=>{t.get().draft&&t.setDraft(null),gt(r.to==="problems"),r.to!=="problems"&&e(a=>{let s=mt(a,r);return"view"in s?s.view:a})},[e,t])}var se=O(U(),1),yt=220;function vt(e,t){if(!e||!t||typeof document>"u")return null;let r=e.getBoundingClientRect(),a=document.elementFromPoint(r.left+t.x,r.top+t.y),s=a?.closest("[data-graview-pick]")?.getAttribute("data-graview-pick");return s||(a?.closest("[data-graview-view]")?.getAttribute("data-graview-view")??null)}function Xe({hover:e=!0}={}){let{store:t,view:r,views:a,pointer:s}=q(),{selection:y}=re(),[k,S]=(0,se.useState)(null);(0,se.useEffect)(()=>{if(!e)return;let l=null,g=!1,i=()=>typeof document<"u"&&document.querySelector("[data-graview-reach]")!==null?document.querySelector("[data-graview-settled]")===null:!1,f=()=>{if(l&&clearTimeout(l),g)return;let w=s.snapshot();if(!w){S(L=>L===null?L:null);return}l=setTimeout(()=>{if(g||i()){f();return}let L=typeof document>"u"?null:document.querySelector("[data-graview-stage]"),M=vt(L,w);S(R=>R===M?R:M)},yt)},h=()=>{g=!0,l&&clearTimeout(l)},x=()=>{g=!1,f()},T=s.subscribe(f);return document.addEventListener("pointerdown",h,!0),document.addEventListener("pointerup",x,!0),document.addEventListener("pointercancel",x,!0),f(),()=>{T(),document.removeEventListener("pointerdown",h,!0),document.removeEventListener("pointerup",x,!0),document.removeEventListener("pointercancel",x,!0),l&&clearTimeout(l)}},[s,e]);let P=l=>{let g=t.graph.getNode(l);if(g)return xe(t.schema.tryDefinition(g.kind),g);let i=We(l,t.schema);if(i)return i;let f=Pe(l);if(f)return te(t.schema,f);let h=Ee(l);if(h.length>0){let x=h.map(w=>$e(t.schema,w)),T=x.length===1?x[0]:`${x.slice(0,-1).join(", ")} and ${x.at(-1)}`;return T.charAt(0).toUpperCase()+T.slice(1)}return null},E=y[y.length-1];if(E!==void 0){let l=P(E);if(l)return{id:E,name:y.length>1?`${l} and ${y.length-1} more`:l,because:"selection"}}if(k!=null){let l=P(k);if(l)return{id:k,name:l,because:"hover"}}let c=r.within?.view,p=c?a.places().find(l=>l.as===c||ne(l.title)===c):void 0;if(p)return{id:null,name:p.title,because:"place"};if(r.focusId){let l=P(r.focusId);if(l)return{id:r.focusId,name:l,because:"place"}}return{id:null,name:"the whole thing",because:"place"}}var C=O(U(),1);var D=O(U(),1),$=O(ae(),1),B=(e,t)=>`${e}:${t}`;function et({answer:e,onReply:t,talk:r}){let[a]=(0,D.useState)(()=>Ke(null)),s=r??a,{turns:y,outcomes:k,busy:S}=oe(s),P=(0,D.useCallback)((c,p)=>s.settle(c,p),[s]);return{turns:y,outcomes:k,busy:S,send:async c=>{let p=c.trim();if(!p||s.get().busy)return;s.setBusy(!0);let l=s.get();s.setTurns(f=>[...f,{role:"person",text:p}]);let g=l.turns.map((f,h)=>{let x=(f.proposals??[]).flatMap((T,w)=>{let L=l.outcomes.get(B(h,w));return L?.state==="applied"?[L.said]:[]});return{role:f.role,text:x.length>0?`${f.text} [applied: ${x.join("; ")}]`:f.text}}),i;try{i=await e(p,{history:g})}catch(f){i={say:`That couldn't be answered: ${f instanceof Error?f.message:String(f)}`,proposals:[]}}s.setTurns(f=>[...f,{role:"seat",text:i.say,proposals:i.proposals,...i.questions?{questions:i.questions}:{},...i.picks?.length?{picks:i.picks}:{},...i.moves?.length?{moves:i.moves}:{},...i.offer?{offer:i.offer}:{},...i.unsure?{unsure:!0}:{},...i.via?{via:i.via}:{}}]),t?.(i),s.setBusy(!1)},settle:P}}var ht=e=>{let t=/^([\s\S]*?)\s*(\((?:[^()]|\([^()]*\))*\))\s*$/.exec(e);return t&&t[1]?{said:t[1],aside:t[2]}:{said:e}};function tt({turns:e,outcomes:t,busy:r,testId:a,empty:s,minHeight:y=64,maxHeight:k="min(46cqh, 400px)",renderProposal:S,renderAfter:P,renderSaid:E,ready:c=()=>!0,onApplyAll:p,applyAllLabel:l="Apply all"}){let g=(0,D.useRef)(null);return(0,D.useEffect)(()=>{g.current?.scrollTo?.({top:g.current.scrollHeight})},[e]),e.length===0&&s===null&&!r?null:(0,$.jsxs)("ol",{ref:g,style:{margin:0,padding:10,listStyle:"none",display:"grid",gap:8,alignContent:"start",maxHeight:k,minHeight:y,overflowY:"auto"},children:[e.length===0?s===null?null:(0,$.jsx)("li",{style:{fontSize:"0.8125rem",color:"var(--graview-ink-muted)",lineHeight:1.5},children:s}):null,e.map((i,f)=>{let h=i.proposals??[],x=h.filter((w,L)=>{let M=B(f,L),R=t.get(M);return R?.state!=="applied"&&R?.state!=="declined"&&c(w,M)}),T=ht(i.text);return(0,$.jsxs)("li",{style:{display:"grid",gap:6,justifyItems:i.role==="person"?"end":"start"},children:[i.role==="person"?(0,$.jsx)("p",{style:{margin:0,maxWidth:"85%",padding:"6px 10px",borderRadius:"12px 12px 4px 12px",fontSize:"0.875rem",lineHeight:1.45,background:"var(--graview-panel-muted)",color:"var(--graview-ink)"},children:i.text}):(0,$.jsxs)("p",{style:{margin:0,fontSize:"0.875rem",lineHeight:1.5,color:"var(--graview-ink)"},children:[E?E(i,T.said):T.said,T.aside?(0,$.jsx)("span",{style:{display:"block",marginTop:2,fontSize:"0.75rem",color:"var(--graview-ink-faint)"},children:T.aside}):null,i.via?(0,$.jsx)("span",{"data-testid":`${a}-answered-with-ai`,style:{display:"block",marginTop:2,fontSize:"0.75rem",color:"var(--graview-ink-faint)"},children:He}):null]}),P?.(i,f),h.map((w,L)=>{let M=B(f,L),R=t.get(M);return R?.state==="applied"||R?.state==="declined"?(0,$.jsx)(ie,{outcome:R,testId:a},M):(0,$.jsxs)("span",{style:{display:"grid",gap:4,justifySelf:"stretch",justifyItems:"start"},children:[S(w,{key:M,turn:f,at:L}),R?(0,$.jsx)(ie,{outcome:R,testId:a}):null]},M)}),p&&x.length>=2?(0,$.jsxs)("button",{type:"button","data-testid":`${a}-apply-all`,onClick:()=>p(f,h),title:"Take these in order; anything still missing is asked for",style:{fontSize:"0.8125rem",justifySelf:"start",fontWeight:600},children:[l," ",x.length]}):null]},f)}),r?(0,$.jsx)("li",{style:{fontSize:"0.8125rem",color:"var(--graview-ink-faint)"},children:"thinking\u2026"}):null]})}function ie({outcome:e,testId:t}){if(e.state==="refused")return(0,$.jsxs)("span",{"data-testid":`${t}-refused`,style:{fontSize:"0.8125rem",color:"var(--graview-warn)"},children:["Refused: ",e.error]});let r=e.state==="applied";return(0,$.jsxs)("span",{"data-testid":`${t}-${e.state}`,style:{fontSize:"0.8125rem",color:r?"var(--graview-ink-muted)":"var(--graview-ink-faint)"},children:[r?(0,$.jsx)("span",{"aria-hidden":"true",style:{color:"var(--graview-accent)"},children:"\u2713 "}):null,r?e.said:(0,$.jsx)("s",{children:e.said})]})}function nt({busy:e,placeholder:t,ariaLabel:r,testId:a,onSend:s}){let[y,k]=(0,D.useState)("");return(0,$.jsxs)("form",{onSubmit:S=>{S.preventDefault(),!(e||y.trim().length===0)&&(s(y),k(""))},style:{display:"flex",gap:6,padding:8,borderTop:"1px solid var(--graview-edge)"},children:[(0,$.jsx)("input",{value:y,onChange:S=>k(S.target.value),placeholder:t,"aria-label":r,"data-testid":`${a}-draft`,style:{flex:1,minWidth:0,font:"inherit",fontSize:"0.875rem",padding:"6px 9px",borderRadius:8,border:"1px solid var(--graview-edge)",background:"var(--graview-panel)",color:"var(--graview-ink)"}}),(0,$.jsx)("button",{type:"submit","data-testid":`${a}-send`,disabled:e||y.trim().length===0,style:{fontSize:"0.875rem"},children:"Send"})]})}var v=O(ae(),1),wt=/\b(?:board|kanban|timeline|calendar|gantt|who covers|covers what|coverage|floor plan|layout|draw|chart|(?:list|table) of|as an? (?:list|table|board|calendar|timeline|grid))\b/i,bt=/\b(?:group(?:ed)? by|split by|sort(?:ed)? by|order(?:ed)? by|only|call it|name it|as an? (?:board|kanban|calendar|timeline|list|table|cards|rows|grid|plan|layout)|show all|all of them|clear the filter|no filter)\b/i,kt=e=>e.charAt(0).toLowerCase()+e.slice(1),St=e=>e.to==="record"?e.label:e.to==="problems"?"problems":e.title;function xt(e,t,r){let a=[],s=e;for(let y of t){let k=St(y),S=k?s.toLowerCase().indexOf(k.toLowerCase()):-1;S<0||(a.push(s.slice(0,S),r(y,s.slice(S,S+k.length))),s=s.slice(S+k.length))}return a.length===0?e:[...a,s]}function Jt({respond:e,onCall:t,onPick:r,testId:a="chat",empty:s,shared:y=!1,composer:k=!0,onMove:S,place:P,onDraft:E}){let{store:c,views:p,view:l,principal:g,setView:i,seatWho:f,noteSeat:h,session:x,ai:T,seatTalk:w,brand:L}=q(),M=Ze(),R=S??M,{takeBack:at}=Qe(R),{selection:le}=re(),ve=Xe(),he=f??"chat",z=(0,C.useMemo)(()=>({kind:"agent",id:he,session:x}),[he,x]),de=(0,C.useRef)(void 0),V=(0,C.useMemo)(()=>Ge(c,{author:{...z,...g.roles?{roles:g.roles}:{}},derive:()=>({pins:Be()}),places:()=>p.places(),via:()=>de.current}),[c,g,z,p]),rt=(0,C.useMemo)(()=>e??Fe(T),[e,T]);(0,C.useEffect)(()=>t?V.onCall(t):void 0,[V,t]),qe(V);let we=(0,C.useMemo)(()=>({name:L?.name??"app",schema:c.schema,...c.policy?{policy:c.policy}:{}}),[c,L]),st=async o=>{let d=w.get().draft,n=d!==null&&bt.test(o);if(!n&&!wt.test(o))return;let u=await import("./chunk.M4XNUM2A.js"),b=e?void 0:Ve(T),m={app:we,sight:u.draftSight(we,Y),...b?{complete:b}:{},...d?{lastGood:d}:{}},A=n&&d?await u.refineDraft(d,o,m):await u.draftView(o,m);if(u.isDraftFailure(A)){let K=A.lastGood??d;return K?(w.setDraft(K,A.failed),E?.(),{say:`${A.failed} The last view stays.`,proposals:[],grounded:!0}):{say:A.failed,proposals:[],grounded:!0}}return w.setDraft(A,null),E?.(),{say:`Here is ${kt(A.said)} Ask to change it, or keep it as a lens.`,proposals:[],grounded:!0}},N=et({...y?{talk:w}:{},answer:async(o,d)=>{let n=await st(o);if(n)return n;let{placesFromViews:u}=await import("./chunk.KFLY4MAT.js"),b=P??l.within?.view,m=p.arrangement?.(),A=c.today();return rt(c,o,{...d,selection:ve.id?[ve.id]:le,principal:{...z,...g.roles?{roles:g.roles}:{}},places:u(c.schema,p.places(),m?{pages:m}:{}),...b?{place:b}:{},...A?{today:A}:{}})},onReply:o=>{let d=o.moves?.[0];d&&R(d);let n=o.questions?.[0];h(n?{type:"asking",author:z,where:n.nodeId??null,say:`${n.nodeLabel?`${n.nodeLabel}: `:""}${n.asks}`,confidence:n.confidence}:{type:"said",author:z,say:o.say});let u=o.proposals.find(b=>!pe(b));if(u){let b=c.permits({name:u.mutation,args:{...u.args}},Y);b.ok||h({type:"refused",author:z,where:ke(u.mutation),say:b.refusal.message})}}}),{outcomes:Q,settle:ce}=N,be=oe(w);(0,C.useEffect)(()=>{if(!y||be.pending===null||N.busy)return;let o=w.takePending();o&&N.send(o)},[y,be.pending,N.busy]);let Y={...z,...g.roles?{roles:g.roles}:{}},pe=o=>c.permits({name:o.mutation,args:{...o.args}},Y).ok,ke=o=>{let d=c.allMutations().find(n=>n.name===o)?.subject?.kinds;return Array.isArray(d)&&d[0]?Re(d[0]):null},[H,Z]=(0,C.useState)(null),X=async(o,d)=>{let n=je(c,o),u=G(c,n),b=V.definitions.find(A=>A.act===n.mutation)?.name??n.mutation;de.current=N.turns[Number(d.split(":")[0])]?.via;let m=await V.call(b,{...n.args}).finally(()=>{de.current=void 0});return m.ok?(ce(d,{state:"applied",said:u}),!0):(ce(d,{state:"refused",error:m.error}),h({type:"refused",author:z,where:ke(n.mutation),say:m.error}),!1)},it=async(o,d)=>{for(let[n,u]of d.entries()){let b=B(o,n);if(Q.get(b)?.state==="applied"||!pe(u))continue;let m=ye(c,u);if(m.length>0){Z({proposal:u,open:m,key:b});return}if(!await X(u,b))return}},ee=(0,C.useRef)(null),ue=(0,C.useRef)(null);(0,C.useLayoutEffect)(()=>{let o=ue.current;if(!o||o.isConnected||document.activeElement!==document.body)return;ue.current=null,(ee.current?.querySelector(`[data-testid="${a}-apply"]:not([disabled])`)??ee.current?.querySelector(`[data-testid="${a}-draft"]`)??ee.current?.closest("[data-testid='seat']")?.querySelector("[data-testid='seat-field']"))?.focus()});let lt=(o,d,n,u)=>{let b=c.permits({name:n.mutation,args:{...n.args}},Y);if(!b.ok)return(0,v.jsxs)("span",{"data-testid":`${a}-withheld`,style:{fontSize:"0.8125rem",color:"var(--graview-ink-muted)"},children:[(0,v.jsx)("s",{children:G(c,n)})," \u2014 ",b.refusal.message]});let m=ye(c,n),A=(N.turns[o]?.proposals??[]).slice(0,d).filter((Se,F)=>Q.get(B(o,F))?.state!=="applied").find(Se=>m.some(F=>F.kinds&&typeof n.args[F.name]=="string"&&Se.args.label===n.args[F.name])),K=G(c,n);return(0,v.jsxs)("span",{style:{display:"flex",flexWrap:"wrap",alignItems:"baseline",gap:"4px 10px"},children:[(0,v.jsxs)("span",{style:{fontSize:"0.875rem",color:"var(--graview-ink)"},title:n.why,children:[K,m.length>0&&!A?" \u2026":""]}),(0,v.jsxs)("span",{style:{display:"inline-flex",gap:6},children:[(0,v.jsx)("button",{type:"button","data-testid":`${a}-apply`,"data-graview-asks":m.length>0?m.length:void 0,disabled:A!==void 0,"aria-label":`Do it: ${K}`,onClick:()=>m.length>0?Z({proposal:n,open:m,key:u}):void X(n,u),title:A?`After \u201C${G(c,A)}\u201D`:m.length>0?`${K} \u2014 it asks for ${m.length===1?"one more thing":`${m.length} more things`}`:K,style:J,children:"Do it"}),(0,v.jsx)("button",{type:"button","data-testid":`${a}-decline`,"aria-label":`Not now: ${K}`,onClick:()=>ce(u,{state:"declined",said:K}),style:{...J,color:"var(--graview-ink-muted)"},children:"Not now"})]})]})};return(0,v.jsxs)("div",{"data-testid":`${a}-panel`,ref:ee,onFocus:o=>{ue.current=o.target},style:{display:"grid",gridTemplateColumns:"minmax(0, 1fr)",alignContent:"start",gap:8,minWidth:0,minHeight:0},children:[N.turns.length===0?s??null:null,(0,v.jsx)(tt,{turns:N.turns,outcomes:Q,busy:N.busy,testId:a,minHeight:0,maxHeight:"none",empty:s!==void 0?null:(0,v.jsxs)(v.Fragment,{children:["Ask what's wrong, ask about anything by name, or say a change in its own words.",le.length>0?" \u201CThis\u201D means what you have selected.":""]}),renderProposal:(o,{key:d,turn:n,at:u})=>lt(n,u,o,d),ready:o=>pe(o),onApplyAll:(o,d)=>void it(o,d),applyAllLabel:"Do all",renderSaid:(o,d)=>o.moves?.length?xt(d,o.moves,(n,u)=>(0,v.jsx)("button",{type:"button","data-testid":`${a}-went`,title:`Go to ${u}`,onClick:()=>R(n),style:{...ot,fontSize:"inherit"},children:u},`${n.address}:${u}`)):d,renderAfter:(o,d)=>[...o.offer?[(0,v.jsx)("button",{type:"button","data-testid":`${a}-offer`,onClick:()=>w.ask(`a list of ${o.offer.draft}`),style:{...J,justifySelf:"start"},children:o.offer.label},`${d}:offer`)]:[],...o.kept&&!o.kept.taken?[(0,v.jsx)("button",{type:"button","data-testid":`${a}-take-back`,onClick:()=>void at(o.kept),style:{...J,justifySelf:"start"},children:"Take back"},`${d}:take-back`)]:[],...o.picks?.length?[(0,v.jsx)("p",{"data-testid":`${a}-picks`,style:{margin:0,display:"flex",flexWrap:"wrap",gap:"2px 12px"},children:o.picks.map(n=>(0,v.jsx)("button",{type:"button","data-testid":`${a}-pick`,"data-chat-pick":n.id,title:n.why.field==="label"?`Go to ${n.label}`:`${n.why.reading}: ${n.why.fragment}`,onClick:()=>r?r(n.id):i(u=>j(I(_(u,!1),n.id),[n.id])),style:ot,children:n.label},n.id))},`${d}:picks`)]:[],...(o.questions??[]).map(n=>{let u=`${d}:q:${n.id}`,b=Q.get(u);return(0,v.jsxs)("div",{"data-testid":`${a}-question`,"data-chat-question-node":n.nodeId,style:{display:"grid",gap:4,justifySelf:"start"},children:[(0,v.jsxs)("span",{style:{fontSize:"0.8125rem",color:"var(--graview-ink-muted)"},children:[n.nodeLabel?(0,v.jsxs)("strong",{children:[n.nodeLabel,": "]}):null,n.asks,n.because==="split"?" (it could be either)":" (it was not sure)"]}),(0,v.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:4},children:n.options.map(m=>(0,v.jsxs)("button",{type:"button","data-testid":`${a}-option`,disabled:!m.call,title:m.call?m.call.why??"Take this answer":"Nothing to do for this answer",onClick:()=>m.call?void X(m.call,u):void 0,style:J,children:[m.value," ",Math.round(m.probability*100),"%"]},m.value))}),b?(0,v.jsx)(ie,{outcome:b,testId:a}):null]},n.id)})]}),H?(0,v.jsx)("div",{"data-testid":`${a}-asking`,children:(0,v.jsx)(Oe,{affordance:{id:`chat:${H.proposal.mutation}`,mutation:H.proposal.mutation,label:G(c,H.proposal),provider:"llm",why:H.proposal.why??"Suggested in the conversation.",nodeIds:[],args:H.proposal.args,open:H.open,score:0},onApply:o=>{let d={...H.proposal,args:{...H.proposal.args,...o}};Z(null),X(d,H.key)},onCancel:()=>Z(null)})}):null,k?(0,v.jsx)(nt,{busy:N.busy,placeholder:le.length>0?"Ask about this\u2026":"Ask, or say a change\u2026",ariaLabel:"Ask",testId:a,onSend:o=>y?w.ask(o):void N.send(o)}):null]})}var J={font:"inherit",fontSize:"0.8125rem",minHeight:26,padding:"0 9px",borderRadius:6,border:"1px solid var(--graview-edge)",background:"var(--graview-panel)",boxShadow:"none",color:"var(--graview-ink)",cursor:"pointer"},ot={font:"inherit",fontSize:"0.875rem",minHeight:24,padding:0,border:0,borderRadius:2,background:"transparent",boxShadow:"none",color:"var(--graview-accent)",textDecoration:"underline",textUnderlineOffset:3,textAlign:"start",cursor:"pointer"};export{Qe as a,gt as b,Ze as c,Xe as d,Jt as e,J as f,ot as g};
@@ -0,0 +1 @@
1
+ import{a as ee}from"./chunk.G4JJXA63.js";import{b as tn}from"./chunk.DN4D4HGX.js";import{d as nn}from"./chunk.SQD7ZPEJ.js";import"./chunk.LGUV2J6Q.js";import{Ca as V,I as Ye,Ia as fe,La as Ne,Ma as Xe,O as ze,Q as Je,Qa as G,Rb as en,S as Ae,T as F,U as qe,Ua as Ze,ma as Ve,na as Qe}from"./chunk.Y235YZSZ.js";import"./chunk.AJZBJBMO.js";var An="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(),Nn=/^(?:(?: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)) (.+)$/,Sn=/^(?:(?:can you |could you |please )?tell me (?:about|of)|what(?: is|'s| are) (?:in |on )?|describe|explain|who(?: is|'s)) (.+)$/,On=/^(?: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))$/,sn=new Set(["here","this","this place","this page","on this page","on the page","on this screen","in view"]),Cn=/^(?:date|day|when|on|at|the date|the day)$/,jn=/^(?: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) /,""),ne=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"]),un=864e5,se=o=>Date.UTC(Number(o.slice(0,4)),Number(o.slice(5,7))-1,Number(o.slice(8,10))),De=o=>new Date(o).toISOString().slice(0,10),C=(o,i)=>De(se(o)+i*un),Dn=["sunday","monday","tuesday","wednesday","thursday","friday","saturday"],Mn=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],fn=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],Wn="(monday|tuesday|tues|wednesday|thursday|thurs|friday|saturday|sunday)",on="(january|february|march|april|may|june|july|august|september|october|november|december|jan|feb|mar|apr|jun|jul|aug|sept|sep|oct|nov|dec)",rn="(\\d{1,2})(?:st|nd|rd|th)?",xn=o=>Dn.findIndex(i=>i.startsWith(o.slice(0,3))),an=o=>fn.findIndex(i=>o.startsWith(i.toLowerCase()));function En(o,i){let p=new Date(se(o)),u=o.slice(0,4)===i.slice(0,4)?"":` ${o.slice(0,4)}`;return`${Mn[p.getUTCDay()]} ${p.getUTCDate()} ${fn[p.getUTCMonth()]}${u}`}function Se(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?De(j):void 0},y=c(u);if(y)return se(y)<se(p)-183*un?c(u+1):y}function Oe(o,i,p){let u=new Date(se(i)).getUTCDay(),c=f=>{let S=(u-p+7)%7,w=C(i,-S+f*7);return{from:w,to:C(w,6)}},y=()=>{let f=`${i.slice(0,8)}01`,S=new Date(Date.UTC(Number(i.slice(0,4)),Number(i.slice(5,7)),1));return{from:f,to:C(De(S.getTime()),-1)}},k=f=>f?{from:f,to:f,day:En(f,i)}:void 0,j=(f,S)=>{let w=xn(S);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 S=C(i,u===0?-1:6-u);return{from:C(S,f*7),to:C(S,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(Se(Number(f[2])-1,Number(f[3]),`${f[1]}-01-01`))],[new RegExp(`${U}${rn} (?:of )?${on}\\b`),f=>k(Se(an(f[2]),Number(f[1]),i))],[new RegExp(`${U}${on} (?:the )?${rn}\\b`),f=>k(Se(an(f[1]),Number(f[2]),i))],[new RegExp(`${U}(?:(this|next|last|coming) )?${Wn}\\b`),f=>j(f[1],f[2])]];for(let[f,S]of P){let w=o.match(f);if(!w)continue;let N=S(w);if(N)return{ask:{words:w[0],...N},rest:o.replace(w[0]," ").replace(/\s+/g," ").trim()}}}function hn(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),S=(p.places??[]).filter(e=>e.kind===null||f.has(e.kind)),w=c.graph,N=$(i).replace(/[?.!]+$/,"").trim();if(N.length===0)return{unresolved:!0};let M=e=>y.tryDefinition(e),T=e=>Ye(M(e.kind),e),H=e=>ze(y,e),oe=e=>S.find(n=>n.kind===e&&n.address===Ne(y,e))?.address??Ne(y,e),ge=e=>Xe(y,e.kind,e.id),Me=e=>({to:"record",id:e.id,kind:e.kind,label:T(e),address:ge(e),said:`Went to ${T(e)}.`}),We=e=>{let n=`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:n}:e.lens||e.address.startsWith("/places/")?{to:"picture",kind:e.kind,as:e.slug,title:e.title,address:e.address,said:n}:{to:"kind",kind:e.kind,title:e.title,address:e.address,said:n}},xe=()=>({unresolved:!0,say:An}),re=e=>{let n=M(e.kind),s=qe(e,n,{limit:3}).map(r=>r.alone.startsWith(r.label)?r.alone:`${r.label.toLowerCase()} ${r.alone}`).join(", "),t=c.violations().filter(r=>r.nodeIds.includes(e.id));return[`${T(e)} \u2014 ${Ae(F(n,e.kind))}${s?` (${s})`:""}.`,t.length>0?`Trouble: ${t.map(r=>r.message).join("; ")}.`:""].filter(Boolean).join(" ")},ie=e=>{let n=new Set([G(e),G(Y(e))]);for(let t of[" page"," view"," lens"," place"," picture"," list"])e.endsWith(t)&&(n.add(G(e.slice(0,-t.length))),n.add(G(Y(e.slice(0,-t.length)))));n.delete("");let s=t=>n.has(G(t.title))||n.has(G(Y($(t.title))))||n.has(G(t.slug));return S.find(t=>t.kind!==null&&t.address.startsWith("/places/")&&s(t))??S.find(s)},pe=e=>{let n=Ze(o,e,{principal:u,today:k,limit:6,...p.selection?{from:p.selection}:{}}),s=n.hits.filter(r=>r.about==="node"&&f.has(r.kind)&&w.getNode(r.id)!==void 0),t=s.filter(r=>r.why.field==="label"&&r.why.strength==="exact");return t.length===1?{one:w.getNode(t[0].id),picks:s}:t.length>1?{picks:t}:s.length===1&&n.total===1?{one:w.getNode(s[0].id),picks:s}:{picks:s}},Ee=e=>{let n=e.map(s=>`${s.label} (${F(M(s.kind),s.kind)})`);return`${e.length===1?"One thing matches":`${e.length} things match`}: ${n.join("; ")}.`},Re=(e,n)=>{if(sn.has(e))return Le();let s=n?pe(Y(e)||e):void 0,t=s?.one&&$(T(s.one))===$(Y(e)||e)?void 0:ie(e);if(t){let l=We(t);return{about:"place",say:n?`${l.said} ${ye(t)}`:l.said,moves:[l],subject:t.slug}}let r=pe(Y(e)||e);if(r.one){let l=Me(r.one);return{about:n?"describe":"record",say:n?`${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===""||ne.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(M(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 n=w.nodesOfKind(e.kind).length,s=H(e.kind).toLowerCase(),t=new Set(c.violations().flatMap(h=>h.nodeIds)),r=w.nodesOfKind(e.kind).filter(h=>t.has(h.id)).length;return[e.lens?`It draws the ${s} as ${Ae(e.lens)}${n>0?` \u2014 ${n} of them`:""}.`:`${n===0?"No":n} ${n===1?F(M(e.kind),e.kind):s} ${n===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 n=S.find(s=>s.slug===p.place)??S.find(s=>s.slug==="home");return n?{about:"here",say:`${n.title}. ${ye(n)}`,moves:[],subject:n.slug}:{about:"here",say:ye({slug:"home",title:"Home",kind:null,cardinality:"many",address:"/",stop:"#"}),moves:[]}},Pe=e=>{let n=P.flatMap(s=>[H(s),F(M(s),s),s].map(t=>({kind:s,name:$(t)}))).filter(s=>s.name.length>0).sort((s,t)=>t.name.length-s.name.length);for(let{kind:s,name:t}of n)if(!(` ${e} `.indexOf(` ${t} `)<0))return{kind:s,rest:` ${e} `.replace(` ${t} `," ").replace(/\s+/g," ").trim()}},ae=(e,n)=>{let s=V(y,e).filters.filter(d=>d.about==="field"&&d.type==="date");if(s.length===0)return;let t=s.find(d=>n.some(l=>$(d.key)===l||$(d.label)===l));if(t)return t;let r=M(e)?.fieldRoles??{};for(let d of["due","deadline","date","when","start","end"]){let l=r[d],v=l?s.find(D=>D.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 n=M(e),s=V(y,e).filters;if(n?.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"&&te.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=>te.has($(l))));if(h){let d=new Set((h.options??[]).filter(v=>te.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,n)=>{let s=e.words.startsWith("due")||$(n.key)==="due",t=Cn.test($(n.label));if(e.day)return s?`due ${e.day}`:t?`on ${e.day}`:`${n.label.toLowerCase()} on ${e.day}`;let r=e.words.replace(/^(?:due|for|on|by) (?:the )?/,"");return s?`due ${r}`:t?r:`${n.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 n=Oe(e,k,j),s=Pe(n?.rest??e),t=s?.kind,r=(s?.rest??n?.rest??e).split(" ").filter(Boolean);if(!t&&n){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;t=B[0]}if(!t)return;let h=V(y,t).filters,d=[],l=[],v=[],D=[],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(Pn.has(m)&&!R){let b=Te(t);b==="unsayable"?(q=!0,D.push(O=>!cn(y,O))):(d.push(...b.conditions),D.push(b.holds)),l.push(m);continue}m==="not"||m==="un"||n&&h.some(b=>b.type==="date"&&($(b.key)===m||$(b.label)===m))||le.push(m)}if(r=le,r.some(g=>!ne.has(g))||!n&&d.length===0&&D.length===0)return;let I=H(t).toLowerCase(),Q=H(t);if(n){let g=ae(t,e.split(" "));if(!g){let m={to:"kind",kind:t,title:Q,address:oe(t),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(n.ask.words)?n.ask.words:`due ${n.ask.words}`}. ${m.said}`,moves:[m]}}if(n.ask.from&&d.push({key:g.key,value:`after:${C(n.ask.from,-1)}`}),n.ask.to&&d.push({key:g.key,value:`before:${C(n.ask.to,1)}`}),n.ask.overdue){let m=Te(t);m==="unsayable"?(q=!0,D.push(R=>!cn(y,R))):(d.push(...m.conditions),D.push(m.holds))}n.ask.overdue?l.push("overdue"):v.push(He(n.ask,g))}let E=w.nodesOfKind(t).filter(g=>d.every(m=>fe(be,g,m))&&D.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:t,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(M(t),t)} 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(t)}?${new URLSearchParams({filter:Z}).toString()}`,_={to:"kind",kind:t,title:ee(J),filter:Z,address:we,said:`Went to the ${J}.`};return{about:"kind",say:`${_.said} ${X}`,moves:[_],picks:W}},Ie=e=>M(e)?.figure==="person"?!0:[e,F(M(e),e),H(e)].some(s=>$(s).split(" ").some(t=>Rn.has(t))),pn=e=>{let n=[],s=t=>M(t)?.edges??{};for(let[t,r]of Object.entries(s(e)))for(let h of r.to??[])f.has(h)&&n.push({key:t,direction:"out",far:h,words:ln(`${r.description??""} ${t}`)});for(let t of P)for(let[r,h]of Object.entries(s(t)))(h.to??[]).includes(e)&&n.push({key:r,direction:"in",far:t,words:ln(`${h.inverse??""} ${r}`)});return n},yn=e=>{let n=e.match(/^(who|which|what)\b/)?.[1];if(!n)return;let s=Oe(e,k,j);if(!s||s.ask.overdue)return;let t=s.rest.split(" ").filter(Boolean),r=P.flatMap(a=>[H(a),F(M(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=` ${t.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&&!ne.has(a)&&!Ce.has(a)),D=n==="who"?d.find(Ie):d[0];if(!D&&n!=="who")return;let q=d.find(a=>a!==D),le=v.flatMap(a=>[je(a),...dn.has(je(a))?[...dn]:[]]),I=P.filter(a=>q?a===q:a!==D).flatMap(a=>{let A=ae(a,e.split(" "))??V(y,a).filters.find(x=>x.about==="field"&&x.type==="date");return A?pn(a).filter(x=>(D?x.far===D:Ie(x.far))&&x.far!==a).map(x=>({kind:a,field:A,relation:x,said:v.length===0||le.some(ve=>x.words.some(vn=>Ln(vn,ve)))})):[]}).filter(a=>a.said);if(I.length===0)return;let Q=I.filter(a=>t.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(" "),mn=l==="was"||l==="were",Ge=a=>mn?a===1?"was":"were":a===1?"is":"are",ue=_.map(T),bn=ue.length>8?[...ue.slice(0,8),`${ue.length-8} more`]:ue,kn=_.length===0?`${R}: nobody ${Ge(1)}${ce?` ${ce}`:""}.`:`${R}: ${he(bn)}${ce?` ${Ge(_.length)} ${ce}`:""}.`,$n=n==="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.`:"",wn=_.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:[kn,$n,O.said].filter(Boolean).join(" "),moves:[O],picks:wn}},Ke=N.match(jn);if(Ke){let e=Ke[1];if(e&&!sn.has(e)&&!/^(?:it|this|that)$/.test(e)){let t=ie(e),r=t?void 0:pe(Y(e)||e);if(r?.one){let h=Me(r.one);return{about:"describe",say:`${h.said} ${re(r.one)}`,moves:[h],subject:r.one.id}}if(!t)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 t=(p.selection??[]).map(r=>w.getNode(r)).find(r=>r!==void 0);if(t)return{about:"describe",say:re(t),moves:[],subject:t.id}}let n=c.violations();if(n.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(n)}: ${n.slice(0,4).map(t=>t.message).join("; ")}${n.length>4?"\u2026":"."}`,moves:[s]}}if(On.test(N))return Le();let _e=yn(N);if(_e)return _e;let ke=Oe(N,k,j);if(ke&&!ie(Y(ke.ask.words))&&ke.rest.replace(/'s\b/g,"").split(" ").every(e=>e===""||ne.has(e)||Ce.has(e))){let e=de(N);if(e)return e}if(/^open /.test(N)){let e=de(N);if(e)return e}let Fe=N.match(Nn)??N.match(/^(?:go|take me|head|get me)(?: back)? (home)$/);if(Fe)return Re(Fe[1].trim(),!1);let Ue=N.match(Sn);if(Ue){let e=Re(Ue[1].trim(),!0);return"unresolved"in e&&e.unresolved&&!/^tell me|^describe/.test(N)?{unresolved:!0}:e}let $e=ie(N);if($e){let e=We($e);return{about:"place",say:e.said,moves:[e],subject:$e.slug}}let Be=de(N);return Be||{unresolved:!0}}var Ce=new Set(["who","whom","whose","which","what","whats","what's","who's"]),Rn=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"]),dn=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 ln(o){return o.toLowerCase().split(/[^a-z']+/).filter(i=>i.length>1&&!ne.has(i)&&!Ce.has(i)&&!["it","they","them","their","its","this","here","to","at"].includes(i)).map(je)}var Ln=(o,i)=>o===i||o.length>=4&&i.length>=4&&(o.startsWith(i)||i.startsWith(o)),te=new Set(["done","finished","complete","completed","closed","resolved","agreed","canceled","archived","shipped","delivered"]),Pn=new Set(["open","unfinished","outstanding","pending","remaining","undone","incomplete"]);function cn(o,i){return V(o,i.kind).filters.some(u=>u.about==="field"&&(u.type==="boolean"&&te.has(u.key.toLowerCase())&&i[u.key]===!0||u.type==="choice"&&typeof i[u.key]=="string"&&te.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 Fn(o,i,p={}){let u=p.scene!==void 0?{...p.pages,scene:p.scene}:p.pages;return[...en(o,i,u?{pages:u}:{})].map(({first:c,hidden:y,lens:k,...j})=>j)}function gn(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 Un(o,i,p,u){let c=hn(o,i,gn(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?nn(o,tn(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 Bn(o,i,p={}){let u=gn(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=hn(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{An as NOTHING_BY_THAT_NAME,gn as askContextOf,Un as goingFrom,Bn as movesFromNames,Fn as placesFromViews,hn as resolveAsk};
@@ -0,0 +1 @@
1
+ import{a as n}from"./chunk.AZYJTNSM.js";import"./chunk.VVZ2Z7OS.js";import"./chunk.EQOU4POV.js";import"./chunk.ONDILMIX.js";import{f as s}from"./chunk.NOXC454O.js";import"./chunk.4UQLZ7VW.js";import"./chunk.DN4D4HGX.js";import"./chunk.DJ26NOOW.js";import"./chunk.SQD7ZPEJ.js";import"./chunk.IKT7JQUW.js";import"./chunk.6CLHFNDM.js";import"./chunk.R5K7NK4U.js";import"./chunk.HCK6IHGP.js";import"./chunk.YAONM74M.js";import"./chunk.CJQL7AHT.js";import"./chunk.BQV62QEL.js";import"./chunk.DAKED3WK.js";import"./chunk.WWRWXFYR.js";import"./chunk.ZFUQA3KT.js";import"./chunk.DO4P2UK4.js";import"./chunk.6KJSFIO7.js";import"./chunk.FLJP3BGP.js";import"./chunk.ENMNLR73.js";import"./chunk.LZQZP2PD.js";import"./chunk.SCLIBKLS.js";import"./chunk.ACZGK7LQ.js";import"./chunk.AHDOKM4O.js";import"./chunk.3MLQ3Q5X.js";import"./chunk.LGUV2J6Q.js";import"./chunk.4JSMCNF7.js";import"./chunk.Y235YZSZ.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};