graview 0.1.28 → 0.1.29

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 (167) hide show
  1. package/dist/preview/chunk.2643W7FT.js +1 -0
  2. package/dist/preview/chunk.2CLPRG3I.js +1 -0
  3. package/dist/preview/chunk.2IZFIORK.js +1 -0
  4. package/dist/preview/chunk.2NCTM5K2.js +2 -0
  5. package/dist/preview/{chunk.EYF6ONTA.js → chunk.3G5MQFZK.js} +1 -1
  6. package/dist/preview/chunk.3JM2TNDD.js +2 -0
  7. package/dist/preview/chunk.44FVJOK4.js +28 -0
  8. package/dist/preview/chunk.4GGAPOMK.js +2 -0
  9. package/dist/preview/chunk.5AT4O4BN.js +1 -0
  10. package/dist/preview/chunk.5JXUAMKI.js +1 -0
  11. package/dist/preview/chunk.5R66YTET.js +2 -0
  12. package/dist/preview/chunk.64P76WK4.js +1 -0
  13. package/dist/preview/chunk.7D77HEIJ.js +1 -0
  14. package/dist/preview/chunk.7DNFXJH3.js +1 -0
  15. package/dist/preview/{chunk.SBHVVJY7.js → chunk.7PRFYYVM.js} +1 -1
  16. package/dist/preview/chunk.AE5GKL4C.js +1 -0
  17. package/dist/preview/chunk.ARR75WBP.js +35 -0
  18. package/dist/preview/chunk.AVUS5LMG.js +3 -0
  19. package/dist/preview/chunk.BKPGDEES.js +1 -0
  20. package/dist/preview/chunk.BZ5OJYHU.js +1 -0
  21. package/dist/preview/chunk.CK7QWLMX.js +1 -0
  22. package/dist/preview/chunk.COTG2IG5.js +1 -0
  23. package/dist/preview/chunk.D4GOVA25.js +1 -0
  24. package/dist/preview/chunk.DAA6XWLF.js +1 -0
  25. package/dist/preview/chunk.DKTCRFMS.js +1 -0
  26. package/dist/preview/chunk.DLGTFXGM.js +1 -0
  27. package/dist/preview/chunk.DN7SN6ZR.js +1 -0
  28. package/dist/preview/chunk.G4WQGTZR.js +3 -0
  29. package/dist/preview/chunk.GDA3G4U2.js +6 -0
  30. package/dist/preview/chunk.GS4T26WW.js +328 -0
  31. package/dist/preview/chunk.GZH6PTXN.js +1 -0
  32. package/dist/preview/chunk.HFKMHLJ3.js +1 -0
  33. package/dist/preview/chunk.HGAMNIST.js +1 -0
  34. package/dist/preview/chunk.HJCQ6I3S.js +1 -0
  35. package/dist/preview/chunk.HKBKH7EK.js +1 -0
  36. package/dist/preview/chunk.HLLWKSZB.js +5 -0
  37. package/dist/preview/chunk.HONUT6OG.js +1 -0
  38. package/dist/preview/chunk.HRWLR7T4.js +1 -0
  39. package/dist/preview/chunk.HV6I74DF.js +1 -0
  40. package/dist/preview/chunk.IPBXAAQV.js +17 -0
  41. package/dist/preview/chunk.IWYUFYDJ.js +1 -0
  42. package/dist/preview/chunk.IZW7DBK4.js +1 -0
  43. package/dist/preview/chunk.J46KDTEZ.js +10 -0
  44. package/dist/preview/chunk.JNGUSAWX.js +70 -0
  45. package/dist/preview/chunk.JU2ZVKMT.js +2 -0
  46. package/dist/preview/chunk.K4ZUVH2G.js +1 -0
  47. package/dist/preview/chunk.KC6UZHBM.js +1 -0
  48. package/dist/preview/chunk.KLITC55P.js +1 -0
  49. package/dist/preview/chunk.KZ2376BD.js +19 -0
  50. package/dist/preview/chunk.LYJAVUST.js +1 -0
  51. package/dist/preview/chunk.MB7LKKUD.js +1 -0
  52. package/dist/preview/chunk.MOUGB4H6.js +1 -0
  53. package/dist/preview/chunk.MYFWM572.js +1 -0
  54. package/dist/preview/chunk.N4FBDA2W.js +1 -0
  55. package/dist/preview/chunk.O42YET3W.js +1 -0
  56. package/dist/preview/chunk.O4QPITBD.js +9 -0
  57. package/dist/preview/{chunk.5BGA2VUS.js → chunk.OGXE2RHC.js} +4 -4
  58. package/dist/preview/chunk.OHE5AMHH.js +0 -0
  59. package/dist/preview/chunk.ONGVH3ZM.js +1076 -0
  60. package/dist/preview/chunk.OQDETV4X.js +1 -0
  61. package/dist/preview/chunk.OWBEV6FR.js +1 -0
  62. package/dist/preview/chunk.OWE6OJ4P.js +1 -0
  63. package/dist/preview/chunk.OYJSFO3A.js +1 -0
  64. package/dist/preview/chunk.P62SKNJS.js +27 -0
  65. package/dist/preview/chunk.PA5HYAEO.js +1 -0
  66. package/dist/preview/{chunk.IDI2BQ7Y.js → chunk.PMEDLEZY.js} +2 -2
  67. package/dist/preview/chunk.PTXQHHKF.js +1 -0
  68. package/dist/preview/chunk.Q5WEOX3Q.js +1 -0
  69. package/dist/preview/chunk.QNHECGMH.js +1 -0
  70. package/dist/preview/chunk.QSDT2RLY.js +1 -0
  71. package/dist/preview/chunk.R2D373VG.js +1 -0
  72. package/dist/preview/chunk.RB4RTBRZ.js +1 -0
  73. package/dist/preview/chunk.RCLJ4H52.js +116 -0
  74. package/dist/preview/chunk.RKRSRKF3.js +1 -0
  75. package/dist/preview/chunk.RWGLKDWH.js +1 -0
  76. package/dist/preview/chunk.SIL4KD3K.js +1 -0
  77. package/dist/preview/chunk.SS76EIMI.js +1 -0
  78. package/dist/preview/{chunk.IKT7JQUW.js → chunk.T4LY5QXO.js} +1 -1
  79. package/dist/preview/chunk.UIIVEQAT.js +1 -0
  80. package/dist/preview/chunk.UT6642FC.js +1 -0
  81. package/dist/preview/chunk.UTHHX2TJ.js +1 -0
  82. package/dist/preview/chunk.UWNYT7PF.js +1 -0
  83. package/dist/preview/chunk.V6TK4LHW.js +6 -0
  84. package/dist/preview/chunk.VNBO2RXD.js +1 -0
  85. package/dist/preview/chunk.VPPUTA74.js +1 -0
  86. package/dist/preview/chunk.WKXNBHTL.js +4 -0
  87. package/dist/preview/chunk.WLRTPFAC.js +1 -0
  88. package/dist/preview/chunk.X53HI436.js +1 -0
  89. package/dist/preview/chunk.XAXJHEMD.js +1 -0
  90. package/dist/preview/chunk.XDYAG276.js +1 -0
  91. package/dist/preview/chunk.XDZSTIS6.js +88 -0
  92. package/dist/preview/chunk.XXHNV24G.js +1 -0
  93. package/dist/preview/chunk.YCA7P5MK.js +1 -0
  94. package/dist/preview/chunk.YRQZZH5V.js +1 -0
  95. package/dist/preview/chunk.YUWRZWGX.js +1 -0
  96. package/dist/preview/chunk.Z2RGLFLS.js +1 -0
  97. package/dist/preview/chunk.Z56B2JR2.js +25 -0
  98. package/dist/preview/chunk.Z5V23DQN.js +3 -0
  99. package/dist/preview/chunk.ZBXOX3W3.js +1 -0
  100. package/dist/preview/chunk.ZEGSQCSD.js +1 -0
  101. package/dist/preview/chunk.ZEVVWWNA.js +44 -0
  102. package/dist/preview/chunk.ZS4DJ76C.js +1 -0
  103. package/dist/preview/chunk.ZSKP6UQS.js +3 -0
  104. package/dist/preview/page.js +6 -6
  105. package/package.json +6 -6
  106. package/dist/preview/chunk.22H4JXTH.js +0 -8
  107. package/dist/preview/chunk.25OYH6MY.js +0 -1
  108. package/dist/preview/chunk.2GBQJXJH.js +0 -19
  109. package/dist/preview/chunk.2VUG6EAN.js +0 -1
  110. package/dist/preview/chunk.337WDTG3.js +0 -2
  111. package/dist/preview/chunk.3HLLQ5CJ.js +0 -1
  112. package/dist/preview/chunk.46KUPBQC.js +0 -1
  113. package/dist/preview/chunk.4H7CQE56.js +0 -1
  114. package/dist/preview/chunk.4HGBVU5B.js +0 -1
  115. package/dist/preview/chunk.4RO5DA22.js +0 -1
  116. package/dist/preview/chunk.4TUNX4WM.js +0 -29
  117. package/dist/preview/chunk.6LJ66MB7.js +0 -1
  118. package/dist/preview/chunk.6R4EI47C.js +0 -1
  119. package/dist/preview/chunk.7S22MBNN.js +0 -1
  120. package/dist/preview/chunk.A73BXXE4.js +0 -3
  121. package/dist/preview/chunk.AHDOKM4O.js +0 -1
  122. package/dist/preview/chunk.ARE3MEDN.js +0 -1
  123. package/dist/preview/chunk.ASFZTYFO.js +0 -1
  124. package/dist/preview/chunk.BBJZ6O7J.js +0 -1
  125. package/dist/preview/chunk.BCBH6WJF.js +0 -1
  126. package/dist/preview/chunk.CAZAB352.js +0 -1
  127. package/dist/preview/chunk.CY7MDLRS.js +0 -1
  128. package/dist/preview/chunk.DAVRLRGB.js +0 -1
  129. package/dist/preview/chunk.DCIC3YHX.js +0 -1
  130. package/dist/preview/chunk.EW4JFOJY.js +0 -1
  131. package/dist/preview/chunk.FP27W5MU.js +0 -1
  132. package/dist/preview/chunk.G2OOBROL.js +0 -1040
  133. package/dist/preview/chunk.GCKSQ52O.js +0 -1
  134. package/dist/preview/chunk.GE5EAN36.js +0 -2
  135. package/dist/preview/chunk.HOPIZMJR.js +0 -2
  136. package/dist/preview/chunk.IBGO4BUF.js +0 -1
  137. package/dist/preview/chunk.IH42QTOM.js +0 -1
  138. package/dist/preview/chunk.ISRS7GOT.js +0 -321
  139. package/dist/preview/chunk.J6CBMLGR.js +0 -1
  140. package/dist/preview/chunk.JRCV6HVV.js +0 -1
  141. package/dist/preview/chunk.KWW3YHQ4.js +0 -23
  142. package/dist/preview/chunk.MKNXV4TM.js +0 -8
  143. package/dist/preview/chunk.MRK6QJV5.js +0 -25
  144. package/dist/preview/chunk.MVNIKZIC.js +0 -1
  145. package/dist/preview/chunk.N2WTNKEV.js +0 -1
  146. package/dist/preview/chunk.N7HCALRK.js +0 -61
  147. package/dist/preview/chunk.NRRUGG22.js +0 -1
  148. package/dist/preview/chunk.OGL4PHTY.js +0 -1
  149. package/dist/preview/chunk.PFQFPJ5L.js +0 -16
  150. package/dist/preview/chunk.PN2H6X7O.js +0 -1
  151. package/dist/preview/chunk.PWHJHFC4.js +0 -1
  152. package/dist/preview/chunk.Q3HVA6L4.js +0 -1
  153. package/dist/preview/chunk.RZLNDVGN.js +0 -107
  154. package/dist/preview/chunk.SNBIZ3B6.js +0 -1
  155. package/dist/preview/chunk.TBG2QBOS.js +0 -1
  156. package/dist/preview/chunk.VR735ZQL.js +0 -1
  157. package/dist/preview/chunk.VSXCXPK2.js +0 -1
  158. package/dist/preview/chunk.W3LDQ6B2.js +0 -1
  159. package/dist/preview/chunk.WCNONCTL.js +0 -6
  160. package/dist/preview/chunk.WHTNSETN.js +0 -1
  161. package/dist/preview/chunk.XG67BWH6.js +0 -1
  162. package/dist/preview/chunk.XRM6WXPW.js +0 -1
  163. package/dist/preview/chunk.Y5LPZLDE.js +0 -1
  164. package/dist/preview/chunk.YETBY2LM.js +0 -1
  165. package/dist/preview/chunk.YSYT3ASK.js +0 -1
  166. package/dist/preview/chunk.ZEUBAAVQ.js +0 -1
  167. package/dist/preview/chunk.ZJDRD6PO.js +0 -1
@@ -1 +0,0 @@
1
- import{Da as G,Ea as F,Fa as v,Ha as q,Ia as W,Ka as T,La as A,Ma as h,Na as k,P as x,Q as R,T as O,Xa as j,Ya as B}from"./chunk.MKNXV4TM.js";function L(e,r){return e===void 0||e===!0?!0:e===!1?!1:e[r]!==!1}function V(e){let r={};return e.query&&e.query.trim().length>0&&(r.q=e.query),e.sort&&(r.sort=e.sort.direction==="desc"?`${e.sort.by}:desc`:e.sort.by),e.filter?.length&&(r.filter=e.filter.map(o=>`${o.key}:${o.value}`).join(",")),e.group&&(r.group=e.group.bucket?`${e.group.by}:${e.group.bucket}`:e.group.by),r}function Y(e,r){let o=[],i={};if(e.query&&(i.query=e.query),e.sort&&(r.sorts.some(l=>l.key===e.sort.by)?i.sort=e.sort:o.push(`sort ${e.sort.by}`)),e.filter){let l=e.filter.filter(p=>r.filters.find(a=>a.key===p.key)?!0:(o.push(`filter ${p.key}`),!1));l.length>0&&(i.filter=l)}return e.group&&(r.groups.some(l=>l.key===e.group.by)?i.group=e.group:o.push(`group ${e.group.by}`)),{arrangement:i,dropped:o}}function N(e,r){return R(e.schema.tryDefinition(r.kind),A(r))}var z=(e,r)=>e==null?r==null?0:1:r==null?-1:typeof e=="number"&&typeof r=="number"?e-r:typeof e=="boolean"&&typeof r=="boolean"?e===r?0:e?1:-1:String(e).localeCompare(String(r),void 0,{numeric:!0,sensitivity:"base"});function I(e,r,o){if(o==="label")return N(e,r);let i=e.schema.tryDefinition(r.kind);return i&&o in(i.fields.shape??{})?T(r)[o]:h(e.graph,r.id,o).map(p=>N(e,p)).sort()[0]}var P=/^(\d{4})-(\d{2})-(\d{2})/;function U(e,r){let o=P.exec(e);if(!o)return;let[,i,l,p]=o;if(r==="day")return`${i}-${l}-${p}`;if(r==="month")return`${i}-${l}-01`;if(r==="year")return`${i}-01-01`;if(r==="decade")return`${String(Number(i)-Number(i)%10).padStart(4,"0")}-01-01`;let s=new Date(Date.UTC(Number(i),Number(l)-1,Number(p))),a=(s.getUTCDay()+6)%7;return s.setUTCDate(s.getUTCDate()-a),s.toISOString().slice(0,10)}var Q=["January","February","March","April","May","June","July","August","September","October","November","December"];function _(e,r){return r==="month"?`${Q[Number(e.slice(5,7))-1]} ${e.slice(0,4)}`:r==="week"?`Week of ${e}`:r==="year"?e.slice(0,4):r==="decade"?`The ${e.slice(0,4)}s`:e}function K(e,r){let{words:o,conditions:i}=j(r);if(o.length===0&&i.length===0)return()=>!0;let l=new Map,p=s=>{let a=l.get(s);return a||(a=new Set(q(e.schema,s).filters.map(u=>u.key)),l.set(s,a)),a};return s=>{let a=p(s.kind),u=i.filter(g=>a.has(g.key));return u.every(g=>k(e,s,g))?o.length>0?B(e.schema.tryDefinition(s.kind),A(s),o)!==void 0:u.length>0:!1}}function X(e,r,o){let i=r.query?.trim(),l=i?e.filter(K(o,i)):e,p=r.filter?.length?l.filter(n=>r.filter.every(f=>k(o,n,f))):[...l],s=r.sort,a=s?p.map((n,f)=>({node:n,index:f,value:I(o,n,s.by)})).sort((n,f)=>{let t=z(n.value,f.value),d=s.direction==="desc"&&t!==0&&n.value!==void 0&&f.value!==void 0?-t:t;return d!==0?d:n.index-f.index}).map(n=>n.node):p,u=r.group;if(!u)return{nodes:a,groups:[{key:"",label:"",nodes:a}],grouped:!1};let g=new Map,c=(n,f,t)=>{let d=g.get(n)??{label:f,nodes:[]};d.nodes.push(t),g.set(n,d)},$=a[0],m=$?o.schema.tryDefinition($.kind):void 0,C=m?.fields.shape??{},E=m?G(m,u.by):O(u.by),b=u.by in C,y=b?F(C[u.by]):void 0,H=v(o.schema,$?.kind??"").find(n=>n.key===u.by)?.label,S=b?`No ${E.toLowerCase()}`:`Without ${(H??O(u.by)).toLowerCase()}`,M=b?new Map:x([...new Map(a.flatMap(n=>h(o.graph,n.id,u.by)).map(n=>[n.id,n])).values()].map(A),n=>o.schema.tryDefinition(n));for(let n of a){if(b){let t=T(n)[u.by];if(t==null||t==="")c("",S,n);else if(y==="date"){let d=u.bucket??"day",D=U(String(t),d);D?c(D,_(D,d),n):c("",S,n)}else if(y==="boolean")c(t?"1":"0",t?"Yes":"No",n);else{let d=m?.display?.format?.[u.by];c(String(t),d?d(t):String(t),n)}continue}let f=h(o.graph,n.id,u.by).map(t=>({id:t.id,label:M.has(t.id)?`${N(o,t)} \xB7 ${M.get(t.id)}`:N(o,t)})).sort((t,d)=>t.label.localeCompare(d.label));f.length===0?c("",S,n):c(f.map(t=>t.id).join(","),f.map(t=>t.label).join(", "),n)}let w=y==="choice"?W(C[u.by]):void 0,J=[...g.entries()].sort(([n,f],[t,d])=>n===""?1:t===""?-1:w?w.indexOf(n)-w.indexOf(t):y==="boolean"?t.localeCompare(n):y==="date"?n.localeCompare(t):f.label.localeCompare(d.label)).map(([n,f])=>({key:n,label:f.label,nodes:f.nodes}));return{nodes:a,groups:J,grouped:!0}}export{L as a,V as b,Y as c,X as d};
@@ -1 +0,0 @@
1
- import{$ as F,Ca as j,Q as E,S as N,T as z,V,W as Q,Y as K,Z as U,_ as W,ya as X,za as x}from"./chunk.MKNXV4TM.js";function Y(){return{name:"insight",derive({store:n,nodes:s,kindSelection:i}){let l=[],k=d=>E(n.schema.tryDefinition(d.kind),d);for(let d of s){if([...n.schema.edgeKinds].reduce((y,e)=>y+n.graph.out(d.id,e).length+n.graph.in(d.id,e).length,0)===0){l.push({id:`insight:island:${d.id}`,text:`${k(d)} is connected to nothing yet`,nodeIds:[d.id]});continue}for(let y of n.schema.edgeKinds){let e=n.graph.in(d.id,y).length;if(e<3)continue;let t=[...n.graph.allEdges()].filter(o=>o.kind===y),f=t.length;f>=4&&e/f>.6&&l.push({id:`insight:load:${d.id}:${y}`,text:`${k(d)} ${cn(n,t,y,e)}`,nodeIds:[d.id]})}}for(let d of i){if(n.graph.nodesOfKind(d).length>0)continue;let w=n.schema.definitions.filter(y=>y.kind!==d).filter(y=>Object.values(y.edges).some(e=>e.to!=="*"&&e.to.includes(d))).map(y=>y.plural??`${y.kind}s`);w.length>0&&l.push({id:`insight:gap:${d}`,text:`Nothing here yet, though ${w.join(" and ")} expect to connect to these`,nodeIds:[]})}return{observations:l}}}}function cn(n,s,i,l){let k=new Set(s.map(t=>n.graph.getNode(t.from)?.kind).filter(t=>t!==void 0)),d=k.size===1?[...k][0]:void 0,w=s.length,y=K(n.schema,d??[...k][0]??"",i,"in"),e=t=>d?V(n.schema,d,t):String(t);return l===w?`${y}: all ${e(l)}`:`${y}: ${l} of the ${e(w)}`}function nn(n){let s=new Map;if(n.length===0)return s;let i=n.slice(-512),l=new Set;for(let d of i)d.undoes&&l.add(d.undoes);let k=n[n.length-1].seq;for(let d of i){if(!d.mutation||l.has(d.id))continue;let w=Math.pow(.5,(k-d.seq)/64);s.set(d.mutation.name,(s.get(d.mutation.name)??0)+w)}return s}function en(n){return 8*(n/(n+1))}var un=100;function tn(){return{name:"invariant",derive({store:n,selection:s,nodes:i,violations:l}){let k=t=>E(n.schema.tryDefinition(t.kind),t),d=new Set(s),w=l.filter(t=>t.nodeIds.some(f=>d.has(f))||t.subjectId!==void 0&&d.has(t.subjectId)),y=[],e=[];w.forEach((t,f)=>{e.push({id:`violation:${t.invariant}:${f}`,text:t.message,nodeIds:t.nodeIds}),t.repairs.forEach((o,g)=>{y.push({id:`invariant:${t.invariant}:${f}:${g}`,label:o.label,provider:"invariant",mutation:o.mutation,args:o.args??{},open:(o.missing??[]).map(a=>{let c=n.allMutations().find(u=>u.name===o.mutation);if(!c)return{name:a};let m=x(c.input).find(u=>u.name===a),v=m?m.kinds.includes("*")?n.graph.allNodes().map(u=>u.id):m.kinds.flatMap(u=>n.graph.nodesOfKind(u).map(p=>p.id)):void 0;return{name:a,shape:j(c.input,a),...m?{kinds:m.kinds}:{},...v?{candidates:v}:{}}}),score:un-g-(o.missing?.length??0),why:t.message,nodeIds:t.nodeIds,...t.subjectId===void 0?{}:{subjectId:t.subjectId}})})});for(let t of i){let f=n.allInvariants().filter(o=>{if(o.scope==="graph")return!1;let g=o.scope;return g.kind!==t.kind?!1:g.match?g.match(t):!0});f.length!==0&&(w.some(o=>o.subjectId===t.id||o.nodeIds.includes(t.id))||e.push({id:`holds:${t.id}`,text:`${k(t)} holds \u2014 nothing currently breaks ${f.length===1?"it":`any of its ${f.length} rules`}`,nodeIds:[t.id]}))}return{affordances:y,observations:e}}}}var B=40;function sn(){return{name:"schema",derive({store:n,selection:s,nodes:i,kindSelection:l,edgeSelection:k}){let d=[];if(i.length===0&&k.length>0){for(let e of k){let t=n.graph.getNode(e.from),f=n.graph.getNode(e.to);if(!(!t||!f))for(let o of n.allMutations()){let g=(o.connects??[]).includes(e.kind),a=(o.severs??[]).includes(e.kind);if(!g&&!a)continue;let c={},m=[],v=x(o.input);for(let p of v){let S=p.kinds.includes("*")||p.kinds.includes(t.kind),A=p.kinds.includes("*")||p.kinds.includes(f.kind),$=S&&!v.some(h=>h!==p&&(h.kinds.includes(t.kind)||h.kinds.includes("*")));S&&!A?c[p.name]=e.from:A&&!S?c[p.name]=e.to:S&&A&&$?c[p.name]=e.from:m.push({name:p.name,kinds:p.kinds,candidates:[e.from,e.to],shape:j(o.input,p.name)})}for(let p of _(o.input,""))p in c||m.some(S=>S.name===p)||m.push({name:p,shape:j(o.input,p)});m.every(p=>p.optional===!0?!0:p.kinds!==void 0?(p.candidates?.length??0)>0:(p.candidates?.length??0)>0||p.shape!==void 0&&p.shape.type!=="unknown")&&(g&&!a&&m.length===0||d.push({id:`schema:edge:${o.name}:${e.kind}:${e.from}:${e.to}`,label:N(o),provider:"schema",mutation:o.name,args:c,open:m,...o.destructive?{destructive:!0}:{},score:(a?62:58)-m.length,why:`this line is "${K(n.schema,n.graph.getNode(e.from)?.kind??"",e.kind,"out")}"`,nodeIds:[e.from,e.to]}))}}return{affordances:d}}if(i.length===0&&l.length>0){let e=new Set(l),t=[];for(let f of n.allMutations()){if(!(f.creates??[]).some(a=>e.has(a)))continue;let o=[];for(let a of x(f.input)){let c=a.kinds.includes("*")?n.graph.allNodes().map(m=>m.id):a.kinds.flatMap(m=>n.graph.nodesOfKind(m).map(v=>v.id));o.push({name:a.name,kinds:a.kinds,candidates:c,shape:j(f.input,a.name),...a.optional?{optional:!0}:{}})}for(let a of _(f.input,""))o.some(c=>c.name===a)||o.push({name:a,shape:j(f.input,a)});if(!o.every(a=>a.optional===!0?!0:a.kinds!==void 0?(a.candidates?.length??0)>0:(a.candidates?.length??0)>0||a.shape!==void 0&&a.shape.type!=="unknown")){let a=o.filter(c=>c.optional!==!0&&c.kinds!==void 0&&!c.kinds.includes("*")&&(c.candidates?.length??0)===0);if(a.length>0){let c=[...new Set(a.flatMap(m=>m.kinds??[]))].map(m=>W(F(n.schema.tryDefinition(m),m)));t.push({id:`schema:waits:${f.name}`,text:`"${f.title??f.name}" cannot begin until there is ${c.length===1?c[0]:`${c.slice(0,-1).join(", ")} and ${c[c.length-1]}`}.`,nodeIds:[]})}continue}d.push({id:`schema:add:${f.name}`,label:N(f),provider:"schema",mutation:f.name,args:{},open:o,score:B-o.length,why:`this makes ${(f.creates??[]).filter(a=>e.has(a)).map(a=>W(F(n.schema.tryDefinition(a),a))).join(", ")}`,nodeIds:[]})}return{affordances:d,observations:t}}if(i.length===0)return{};let w=new Set(i.map(e=>e.kind)),y=(e,t,f)=>{let o=[];for(let g of n.graph.allEdges()){if(!t.includes(g.kind))continue;let a=g.from===e?g.to:g.to===e?g.from:null;if(!a)continue;let c=n.graph.getNode(a);c&&(!f.includes("*")&&!f.includes(c.kind)||o.includes(a)||o.push(a))}return o};for(let e of n.allMutations()){let t=e.subject;if(!t||!(t.kinds==="*"?!0:[...w].every(u=>t.kinds.includes(u))))continue;let o=i.length===1?i[0].id:null,g=e.severs??[],a=e.connects??[];if(o&&g.length>0&&a.length===0&&y(o,g,["*"]).length===0)continue;let c=[];for(let u of x(e.input)){if(u.name===t.arg)continue;let p=u.kinds.includes("*")?n.graph.allNodes().map(S=>S.id):u.kinds.flatMap(S=>n.graph.nodesOfKind(S).map(A=>A.id));if(o&&a.length>0){let S=new Set(y(o,a,u.kinds));p=p.filter(A=>!S.has(A))}else o&&g.length>0&&(p=y(o,g,u.kinds));c.push({name:u.name,kinds:u.kinds,candidates:p.filter(S=>!s.includes(S)),shape:j(e.input,u.name),...u.optional?{optional:!0}:{}})}for(let u of _(e.input,t.arg))c.some(p=>p.name===u)||c.push({name:u,shape:j(e.input,u)});if(c.length===0&&o){let u=fn(e.input,t.arg);if(u.length>0&&!ln(n,e.name,{[t.arg]:o}))for(let p of u){let S=x(e.input).find(A=>A.name===p);c.push({name:p,optional:!0,...S?{kinds:S.kinds}:{},shape:j(e.input,p)})}}if(!c.every(u=>u.optional===!0?!0:u.kinds!==void 0?(u.candidates?.length??0)>0:(u.candidates?.length??0)>0||u.shape!==void 0&&u.shape.type!=="unknown"))continue;let v=i.map(u=>({[t.arg]:u.id}));c.length===0&&!v.some(u=>n.wouldChange({name:e.name,args:u}))||d.push({id:`schema:${e.name}`,label:i.length>1?`${N(e)} (${i.length})`:N(e),provider:"schema",mutation:e.name,args:v[0]??{},open:c,...e.destructive?{destructive:!0}:{},...g.length>0||a.length>0?{ties:!0}:{},...i.length>1?{batch:v}:{},score:B-c.length,why:i.length>1?`all ${i.length} selected nodes are ${[...w].map(u=>Q(n.schema,u).toLowerCase()).join(" or ")}`:`this is ${W(F(n.schema.tryDefinition(i[0].kind),i[0].kind))}`,nodeIds:i.map(u=>u.id)})}if(i.length===1){let e=i[0];for(let t of n.allMutations()){let f=t.subject,o=t.severs??[],g=t.connects??[];if(!f||o.length===0&&g.length===0)continue;let a=f.kinds==="*"?"*":f.kinds;if(a==="*"||a.includes(e.kind))continue;let c=x(t.input),m=c.find(h=>h.name!==f.arg&&(h.kinds.includes("*")||h.kinds.includes(e.kind)));if(!m)continue;let v=a,u=v.includes("*")?n.graph.allNodes().map(h=>h.id):v.flatMap(h=>n.graph.nodesOfKind(h).map(O=>O.id)),p=new Set(y(e.id,g.length>0?g:o,v)),S=g.length>0?u.filter(h=>!p.has(h)):u.filter(h=>p.has(h));if(S.length===0)continue;let A=[{name:f.arg,kinds:v,candidates:S,shape:j(t.input,f.arg)}];for(let h of c){if(h.name===m.name||h.name===f.arg)continue;let O=h.kinds.includes("*")?n.graph.allNodes().map(I=>I.id):h.kinds.flatMap(I=>n.graph.nodesOfKind(I).map(R=>R.id));A.push({name:h.name,kinds:h.kinds,candidates:O,shape:j(t.input,h.name),...h.optional?{optional:!0}:{}})}for(let h of _(t.input,m.name))h===f.arg||A.some(O=>O.name===h)||A.push({name:h,shape:j(t.input,h)});A.every(h=>h.optional===!0?!0:h.kinds!==void 0?(h.candidates?.length??0)>0:(h.candidates?.length??0)>0||h.shape!==void 0&&h.shape.type!=="unknown")&&d.push({id:`schema:tie:${t.name}:${e.id}`,label:t.fromTheOtherEnd??N(t),provider:"schema",mutation:t.name,args:{[m.name]:e.id},open:A,ties:!0,...t.destructive?{destructive:!0}:{},score:B-A.length+2,why:`${o.length>0?"this one is on":"this one could join"} ${A[0].candidates.length===1?"it":"one of these"}`,nodeIds:[e.id]})}}return{affordances:d}}}}function fn(n,s){let i=n.shape;return i?Object.entries(i).filter(([l,k])=>l!==s&&k.safeParse(void 0).success).map(([l])=>l):[]}function ln(n,s,i){try{return n.preview({name:s,args:i}),!0}catch{return!1}}function _(n,s){let i=n.shape;return i?Object.entries(i).filter(([l,k])=>l!==s&&!k.safeParse(void 0).success).map(([l])=>l):[]}var hn=70,gn=80,pn=new Set(["id","kind"]);function on(){return{name:"structure",derive({store:n,nodes:s}){let i=e=>E(n.schema.tryDefinition(e.kind),e);if(s.length<2)return{};let l=[],k=[],d=s.map(e=>e.id);for(let e of n.schema.edgeKinds){let t=mn(s.map(o=>new Set([...n.graph.out(o.id,e).map(g=>g.id),...n.graph.in(o.id,e).map(g=>g.id)])));for(let o of t){let g=n.graph.getNode(o);g&&l.push({id:`shared:${e}:${o}`,text:`all ${s.length} share "${i(g)}" (${z(e).toLowerCase()})`,nodeIds:[...d,o]})}let f=new Map;for(let o of s)for(let g of[...n.graph.out(o.id,e),...n.graph.in(o.id,e)])f.set(g.id,(f.get(g.id)??0)+1);for(let[o,g]of f){if(g!==s.length-1||s.length<3)continue;let a=n.graph.getNode(o);if(!a)continue;let c=s.find(m=>![...n.graph.out(m.id,e),...n.graph.in(m.id,e)].some(v=>v.id===o));if(c){l.push({id:`near-shared:${e}:${o}`,text:`all but "${i(c)}" share "${i(a)}" (${z(e).toLowerCase()})`,nodeIds:[...d,o]});for(let m of n.allMutations()){let v=m.subject;if(!v||v.kinds!=="*"&&!v.kinds.includes(c.kind))continue;let u=kn(m.input,a.kind);u&&k.push({id:`structure:join:${m.name}:${c.id}:${o}`,label:`${N(m)}: bring "${i(c)}" in line with the others`,provider:"structure",mutation:m.name,args:{[v.arg]:c.id,[u]:o},open:[],score:hn,why:`every other selected node is connected to "${i(a)}"`,nodeIds:[c.id,o]})}}}}let w=new Set;for(let e of s)for(let t of Object.keys(e))pn.has(t)||w.add(t);let y=e=>n.schema.definitions.find(t=>t.kind===e);for(let e of[...w].sort()){let t=y(s[0].kind),f=U(t,e).toLowerCase(),o=t?.display?.format?.[e],g=$=>{if(!o)return $;try{return String(o(JSON.parse($)))}catch{return $}},a=s.map($=>$[e]),c=new Map;if(a.forEach(($,h)=>{let O=JSON.stringify($??null),I=c.get(O);I?I.push(s[h]):c.set(O,[s[h]])}),c.size===1){let $=[...c.keys()][0];if($==="null")continue;l.push({id:`agree:${e}`,text:`all ${s.length} share the ${f} ${g($)}`,nodeIds:d});continue}if(s.length<3||c.size!==2)continue;let m=[...c.entries()].sort(($,h)=>h[1].length-$[1].length),[v,u]=m[0],[,p]=m[1];if(p.length!==1||v==="null")continue;let S=p[0],A=JSON.parse(v);l.push({id:`odd-one-out:${e}`,text:`${u.length} share the ${f} ${g(v)}; "${i(S)}" does not`,nodeIds:d});for(let $ of n.allMutations()){let h=$.subject;if(!h||h.kinds!=="*"&&!h.kinds.includes(S.kind))continue;let O=rn($.input);if(!O||!(e in O))continue;let I={[h.arg]:S.id,[e]:A},R=!0;for(let[M,J]of Object.entries(O)){if(M in I||J.safeParse(void 0).success)continue;let D=S[M];if(D===void 0){R=!1;break}I[M]=D}R&&k.push({id:`structure:align:${$.name}:${e}:${S.id}`,label:`Align the ${f} of "${i(S)}" with the other ${u.length}`,provider:"structure",mutation:$.name,args:I,open:[],score:gn,why:`${u.length} of ${s.length} share the ${f} ${g(v)}`,nodeIds:d})}}return{affordances:k,observations:l}}}}function mn(n){if(n.length===0)return[];let[s,...i]=n;return[...s].filter(l=>i.every(k=>k.has(l))).sort()}function rn(n){return n.shape??null}function kn(n,s){let i=rn(n);if(!i)return null;for(let[l]of Object.entries(i)){let k=X(i[l]);if(k&&(k.includes("*")||k.includes(s)))return l}return null}function yn(){return[tn(),on(),sn(),Y()]}function Kn(n,s,i={}){let l=an(),k=i.providers??yn(),d=s.map(r=>n.graph.getNode(r)).filter(r=>r!==void 0),w={store:n,selection:s,nodes:d,kindSelection:i.kindSelection??[],edgeSelection:i.edgeSelection??[],violations:n.violations(i.context),context:i.context??{}},y=[],e=[];for(let r of k){let b=r.derive(w);y.push(...b.affordances??[]),e.push(...b.observations??[])}let t=new Set(n.allMutations().filter(r=>r.pinned).map(r=>r.name)),f=new Set(i.pins?.pinned??[]),o=new Set(i.pins?.unpinned??[]),g=r=>f.has(r.mutation)?"user":t.has(r.mutation)&&!o.has(r.mutation)?"declared":void 0,a=r=>{let b=g(r);return b?{...r,pinned:b}:r},c=new Map;for(let[r,b]of nn(n.log.all()))c.set(r,en(b));let m=r=>r.pinned==="user"?0:r.pinned==="declared"?1:2,v=r=>r.score+(c.get(r.mutation)??0),u=new Map(n.allMutations().map(r=>[r.name,r])),p=new Map,S=r=>{let b=u.get(r.mutation);if(!b)return[];let P=p.get(r.mutation);P||(P=x(b.input).map(T=>T.name),p.set(r.mutation,P));let C=[];for(let T of r.batch??[r.args])for(let H of P){let Z=T[H]??r.args[H];typeof Z=="string"&&C.push(Z)}return C},A=i.focus,$=4,h=r=>r.open.length>0?1:0,O=r=>{if(A===void 0)return $;let b=S(r);return b.length>0?b.includes(A)?I(r,0):$:r.nodeIds.includes(A)||r.subjectId===A?I(r,1):$},I=(r,b)=>r.provider==="invariant"?b:2+h(r),R=bn(y).map(a),M=new Map(R.map((r,b)=>[r,b])),J=R.sort((r,b)=>{let P=Number(r.destructive??!1)-Number(b.destructive??!1);if(P!==0)return P;let C=O(r)-O(b);return C!==0?C:O(r)<2?M.get(r)-M.get(b):+(b.provider==="invariant")-+(r.provider==="invariant")||m(r)-m(b)||v(b)-v(r)||r.id.localeCompare(b.id)}),D=i.principal??{kind:"human"},L=[],G=[];for(let r of J){let b=n.permits({name:r.mutation,args:{...r.args,...r.batch?.[0]??{}}},D);if(b.ok)L.push(r);else{let P=Sn(n,r,D);if(P==="done")continue;P?L.push(P):G.push({...r,refusal:b.refusal})}}let q=L.map((r,b)=>({...r,rank:b})),dn=G.map((r,b)=>({...r,rank:L.length+b}));return{affordances:i.limit===void 0?q:q.slice(0,i.limit),withheld:dn,observations:vn(e),ms:an()-l}}function bn(n){let s=new Map;for(let i of n){let l=[i.mutation,JSON.stringify(i.args),JSON.stringify(i.batch??null)].join("|"),k=s.get(l);(!k||i.score>k.score)&&s.set(l,i)}return[...s.values()]}function vn(n){let s=new Map;for(let i of n)s.set(i.text,i);return[...s.values()]}function an(){return typeof performance<"u"?performance.now():Date.now()}function Wn(n,s,i={},l={}){let k=(s.batch??[s.args]).map(w=>({name:s.mutation,args:{...s.args,...w,...i}})),d=n.allMutations().find(w=>w.name===s.mutation);return n.applyAll(k,{...d?.describe?{}:{intent:s.label},...l.author?{author:l.author}:{}})}function Fn(n,s,i={}){return n.preview({name:s.mutation,args:{...s.args,...i}})}function Sn(n,s,i){let l=n.allMutations().find(t=>t.name===s.mutation)?.subject,k=l!==void 0&&s.args[l.arg]===void 0,d=k?s.open.find(t=>t.name===l.arg):s.open.find(t=>t.name!==l?.arg&&t.candidates);if(!d?.candidates)return;let w=t=>n.permits({name:s.mutation,args:{...s.args,...s.batch?.[0]??{},[d.name]:t}},i).ok,y=d.candidates.filter(w),e=i.id===void 0?void 0:n.graph.getNode(i.id);if(y.length===0){let t=k?l.kinds:"*";return e!==void 0&&(t==="*"||t.includes(e.kind))&&w(e.id)?"done":void 0}return y.length===1&&y[0]===i.id?{...s,args:{...s.args,[d.name]:i.id},open:s.open.filter(t=>t!==d)}:{...s,open:s.open.map(t=>t===d?{...t,candidates:y}:t)}}export{Kn as a,Wn as b,Fn as c};
@@ -1 +0,0 @@
1
- import{a as n}from"./chunk.RZLNDVGN.js";import"./chunk.4TUNX4WM.js";import"./chunk.7S22MBNN.js";import"./chunk.ONDILMIX.js";import{f as s}from"./chunk.J6CBMLGR.js";import"./chunk.TBG2QBOS.js";import"./chunk.BCBH6WJF.js";import"./chunk.A73BXXE4.js";import"./chunk.N7HCALRK.js";import"./chunk.IKT7JQUW.js";import"./chunk.ISRS7GOT.js";import"./chunk.DCIC3YHX.js";import"./chunk.WHTNSETN.js";import"./chunk.WVUJXDXZ.js";import"./chunk.46KUPBQC.js";import"./chunk.N2WTNKEV.js";import"./chunk.SBHVVJY7.js";import"./chunk.GE5EAN36.js";import"./chunk.337WDTG3.js";import"./chunk.PWHJHFC4.js";import"./chunk.EYF6ONTA.js";import"./chunk.Q3HVA6L4.js";import"./chunk.AHDOKM4O.js";import"./chunk.6R4EI47C.js";import"./chunk.2GBQJXJH.js";import"./chunk.ZJDRD6PO.js";import"./chunk.SNBIZ3B6.js";import"./chunk.6LJ66MB7.js";import"./chunk.NRRUGG22.js";import"./chunk.MKNXV4TM.js";import{a as y,b as i}from"./chunk.MRK6QJV5.js";import{b as r}from"./chunk.AJZBJBMO.js";var c=r(y(),1),e=r(i(),1);function v({store:d,views:t,as:a,scope:o}){let l=(0,c.useMemo)(()=>s({scope:`.${o}`}),[o]);return(0,e.jsxs)("div",{"data-testid":"embed-picture","data-embed-content":"",tabIndex:0,"aria-label":t.places().find(m=>m.as===a)?.title??"The picture",style:{flex:"1 1 auto",minHeight:0,display:"grid",gridTemplateRows:"minmax(0, 1fr)",overflow:"auto",background:"var(--graview-ground)",color:"var(--graview-ink)",fontFamily:"var(--graview-font-body, system-ui)"},children:[(0,e.jsx)("style",{children:l}),(0,e.jsx)(n,{store:d,views:t,as:a})]})}export{v as PictureFace};
@@ -1 +0,0 @@
1
- import{d as L}from"./chunk.7S22MBNN.js";import{a as R,b as O,c as v,d as P}from"./chunk.ONDILMIX.js";import"./chunk.J6CBMLGR.js";import"./chunk.A73BXXE4.js";import"./chunk.N7HCALRK.js";import"./chunk.ISRS7GOT.js";import{a as E,b as T}from"./chunk.DCIC3YHX.js";import"./chunk.WHTNSETN.js";import"./chunk.WVUJXDXZ.js";import"./chunk.46KUPBQC.js";import"./chunk.N2WTNKEV.js";import"./chunk.SBHVVJY7.js";import"./chunk.GE5EAN36.js";import"./chunk.337WDTG3.js";import"./chunk.PWHJHFC4.js";import"./chunk.EYF6ONTA.js";import"./chunk.Q3HVA6L4.js";import"./chunk.AHDOKM4O.js";import"./chunk.6R4EI47C.js";import"./chunk.2GBQJXJH.js";import"./chunk.ZJDRD6PO.js";import"./chunk.SNBIZ3B6.js";import"./chunk.6LJ66MB7.js";import{wa as x}from"./chunk.NRRUGG22.js";import{Hb as k}from"./chunk.MKNXV4TM.js";import{a as D,b as C}from"./chunk.MRK6QJV5.js";import{b as S}from"./chunk.AJZBJBMO.js";var o=S(D(),1);var i=S(C(),1);function W(c){let e=document.activeElement;if(e!==null&&e!==document.body&&e!==document.documentElement&&e.isConnected)return;let r=c??document,a=r.querySelector("main")??r.querySelector("[data-graview-page]")??null,n=r.querySelector("[data-graview-page-title]")??a?.querySelector("h1, h2")??a;n instanceof HTMLElement&&(n.hasAttribute("tabindex")||n.setAttribute("tabindex","-1"),n.focus({preventScroll:!0}))}var H=1500;function z(c,e,r){let{store:a,principal:n}=c,u=L(a),l=(0,o.useMemo)(()=>R(a,n),[a,n,u]),b=(0,o.useRef)(r),[p,m]=(0,o.useState)(),[s,f]=(0,o.useState)("");(0,o.useEffect)(()=>{let t=O(a,n,b.current);b.current=a.batches().length,t&&(m({batch:t.batch,at:e,when:Date.now()}),f(""))},[a,n,u]),(0,o.useEffect)(()=>{m(t=>!t||t.at===e?t:Date.now()-t.when<H?{...t,at:e}:void 0)},[e]);let[g,h]=(0,o.useState)(null),y=(0,o.useCallback)(()=>{m(void 0),h(null)},[]),w=(0,o.useCallback)(()=>{h(null);try{let t=P(a,n);t&&f(`Took back \u201C${t.intent}\u201D`)}catch(t){h(t instanceof Error?t.message:String(t))}},[a,n]),d=l&&p?.batch===l.batch&&p.at===e?l:void 0;return{change:l,offered:d,close:y,takeBack:w,refused:g,said:s}}function Y({context:c,docked:e,at:r,since:a}){let{change:n,offered:u,close:l,takeBack:b,refused:p,said:m}=z(c,r,a),s=e?u:n,f=(0,o.useRef)(null),g=e&&(s!==void 0||p!==null);B(f,g),(0,o.useEffect)(()=>{if(!g)return;let d,t=()=>d=setTimeout(()=>f.current?.matches(":hover, :focus-within")?t():l(),1e4);return t(),()=>clearTimeout(d)},[g,s?.batch,p,l]);let h=m||(e&&s?v(s):""),y=e?{position:"fixed",inset:"auto",margin:0,padding:0,border:"none",background:"none",overflow:"visible",zIndex:k("toast"),width:"max-content",height:"auto",bottom:"calc(16px + env(safe-area-inset-bottom, 0px))",left:16,justifyItems:"start",color:"var(--graview-ink)",...g?{}:{display:"none"}}:{},w=s?(0,i.jsxs)("button",{type:"button","data-testid":"page-undo",title:`${v(s)} \u2014 \u2318Z or Ctrl+Z`,"aria-keyshortcuts":"Meta+Z Control+Z",onClick:d=>{let t=d.currentTarget.closest("[data-graview-face]");b(),requestAnimationFrame(()=>W(t))},style:e?I:A,children:[(0,i.jsx)("span",{"aria-hidden":"true",children:"\u21B6"}),(0,i.jsx)("span",{style:e?j:F,children:v(s)})]}):null;return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("span",{role:"status","aria-live":"polite",style:N,children:h}),(0,i.jsxs)("div",{ref:f,...e?{popover:"manual","data-graview-foot":"","data-graview-offstage":""}:{},"data-testid":e?"face-undo-dock":"page-undo-place",style:{display:"grid",justifyItems:"end",gap:4,maxWidth:"100%",minWidth:0,...y},children:[e&&s?(0,i.jsxs)("div",{"data-testid":"page-undo-notice",style:_,children:[w,(0,i.jsx)("button",{type:"button","data-testid":"page-undo-dismiss","aria-label":`Dismiss: ${v(s)}`,title:"Dismiss",onClick:d=>{let t=d.currentTarget.closest("[data-graview-face]");l(),requestAnimationFrame(()=>W(t))},style:q,children:"\xD7"})]}):w,p?(0,i.jsx)("span",{"data-testid":"page-undo-refused",role:"alert",style:{fontSize:"0.8125rem",lineHeight:1.4,color:"var(--graview-warn)",background:e?"var(--graview-float)":void 0,padding:e?"4px 8px":void 0,borderRadius:6},children:p}):null]})]})}function B(c,e){(0,o.useLayoutEffect)(()=>{let r=c.current;if(!r||!e)return;if(typeof r.showPopover=="function"&&!x(r))try{r.showPopover()}catch{}let a=()=>r.parentElement?.closest("[data-embed-content]")??null,n=()=>{T(r,a()),dispatchEvent(new Event(E))};n(),addEventListener("resize",n),addEventListener("scroll",n,!0);let u=typeof ResizeObserver=="function"?new ResizeObserver(n):null;return u?.observe(r),()=>{if(u?.disconnect(),removeEventListener("resize",n),removeEventListener("scroll",n,!0),r.isConnected&&x(r))try{r.hidePopover()}catch{}dispatchEvent(new Event(E))}},[c,e])}var A={display:"inline-flex",alignItems:"center",gap:6,minHeight:36,maxWidth:"100%",minWidth:0,padding:"0 14px",borderRadius:999,border:"1px solid var(--graview-edge)",background:"var(--graview-float)",color:"var(--graview-ink)",font:"inherit",fontSize:"0.875rem",cursor:"pointer"},I={...A,textAlign:"start",lineHeight:1.4,padding:"8px 4px 8px 14px",border:"none",background:"none",color:"inherit"},_={display:"flex",alignItems:"center",gap:2,maxWidth:"100%",minWidth:0,paddingRight:6,borderRadius:"var(--graview-radius, 12px)",border:"1px solid var(--graview-edge)",background:"var(--graview-float)",boxShadow:"var(--graview-lift-high)"},q={flex:"0 0 auto",minWidth:28,minHeight:28,padding:0,border:"none",background:"none",boxShadow:"none",color:"var(--graview-ink-muted)",font:"inherit",fontSize:"1rem",cursor:"pointer"},F={minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},j={minWidth:0,overflow:"hidden",overflowWrap:"anywhere",display:"-webkit-box",WebkitBoxOrient:"vertical",WebkitLineClamp:4},N={position:"absolute",width:1,height:1,margin:-1,padding:0,overflow:"hidden",clip:"rect(0 0 0 0)",whiteSpace:"nowrap",border:0};export{Y as TakeBack};
@@ -1 +0,0 @@
1
- import{e as B}from"./chunk.Q3HVA6L4.js";import{A as M,da as _,h as q}from"./chunk.NRRUGG22.js";import{$ as T,P as H,Q as L,T as R,Y as K,bb as j}from"./chunk.MKNXV4TM.js";import{a as J,b as G}from"./chunk.MRK6QJV5.js";import{b as $}from"./chunk.AJZBJBMO.js";var i=$(J(),1),a=$(G(),1);function ae({affordance:r,onApply:o,onCancel:u}){let{store:l}=_(),[y,m]=(0,i.useState)({}),[f,x]=(0,i.useState)(""),[A,F]=(0,i.useState)(U),W=(0,i.useId)(),O=(0,i.useRef)(null),v=r.open.filter(e=>!(e.name in y)),s=v[0];if((0,i.useEffect)(()=>x(""),[s?.name]),(0,i.useEffect)(()=>{O.current?.scrollIntoView?.({block:"nearest",inline:"nearest"})},[s?.name]),(0,i.useLayoutEffect)(()=>{let e=O.current,n=typeof document>"u"?null:document.activeElement;if(!e||n&&n!==document.body&&!e.contains(n))return;let p=e.querySelector("form input, [role=group] button:not([disabled])");p&&p!==n&&p.focus()},[s?.name]),!s)return null;let h=e=>{let n={...y,[s.name]:e};if(r.open.filter(c=>!(c.name in n)).length===0){let c=o(Object.fromEntries(Object.entries(n).filter(([,E])=>E!==void 0)));c&&c.length>0&&m(Object.fromEntries(Object.entries(n).filter(([E])=>!c.includes(E))))}else m(n)},N=s.optional?(0,a.jsx)("button",{type:"button",onClick:()=>h(void 0),style:{fontSize:"0.8125rem"},children:"Skip"}):null,t=s.shape??{type:"unknown"},d=Q(s,t),g=j(l.schema,l.allMutations().find(e=>e.name===r.mutation),s.name),[z,V]=(0,i.useState)(""),I=(0,i.useMemo)(()=>{let e=d.map(n=>l.graph.getNode(n)).filter(n=>n!==void 0);return H(e,n=>l.schema.tryDefinition(n))},[d,l]),C=e=>{let n=Z(l,t,e),p=t.type==="choice"||t.type==="several"&&t.of.type==="choice"?g.option(e):n,c=I.get(e);return c?`${p} \xB7 ${c}`:p},w=(0,i.useMemo)(()=>{let e=z.trim().toLowerCase();return e===""?d:d.filter(n=>C(n).toLowerCase().includes(e))},[d,z,l,t,I]),b=t.type==="several",P=t.type==="file"?t:t.type==="several"&&t.of.type==="file"?t.of:void 0,D=b&&d.length===0,k=s.kinds&&s.kinds.length>0&&!s.kinds.includes("*")?s.kinds.map(e=>R(T(l.schema.tryDefinition(e),e))).join(" or "):g.label,Y=r.open.length>1?`${k} \xB7 ${r.open.length-v.length+1} of ${r.open.length}`:k;return(0,a.jsxs)("div",{ref:O,"data-graview-asking":r.id,style:{display:"grid",gridTemplateColumns:"minmax(0, 1fr)",gap:4,padding:"5px 0 2px"},children:[r.open.length>1||d.length>0?(0,a.jsx)("span",{id:W,style:{fontSize:"0.75rem",color:"var(--graview-ink-faint)"},children:Y}):null,d.length>S?(0,a.jsx)("input",{type:"search",value:z,onChange:e=>V(e.target.value),placeholder:`Filter ${d.length}\u2026`,"aria-label":`Filter ${k}`,"data-testid":"ask-filter",style:{font:"inherit",fontSize:"0.8125rem",minWidth:0,padding:"3px 7px"}}):null,P?(0,a.jsxs)("div",{style:{display:"grid",gap:4},children:[(0,a.jsx)(B,{as:"control",value:void 0,onChange:h,several:b,image:P.image===!0,label:g.label}),N]}):d.length>0?(0,a.jsxs)("div",{role:"group","aria-labelledby":W,style:{display:"flex",flexWrap:"wrap",gap:4},children:[w.slice(0,S).map(e=>{let n=A.includes(e);return(0,a.jsx)("button",{type:"button","aria-label":`${k}: ${C(e)}`,...b?{"aria-pressed":n}:{},style:{padding:"3px 9px",fontSize:"0.8125rem",...n?{borderColor:"var(--graview-accent)",color:"var(--graview-accent)"}:{}},onClick:()=>b?F(p=>p.includes(e)?p.filter(c=>c!==e):[...p,e]):h(t.type==="boolean"?e==="yes":e),children:C(e)},e)}),w.length>S?(0,a.jsxs)("span",{"data-testid":"ask-more",style:{alignSelf:"center",fontSize:"0.75rem",color:"var(--graview-ink-faint)"},children:[w.length-S," more \u2014 type to narrow"]}):null,w.length===0?(0,a.jsxs)("span",{"data-testid":"ask-none",style:{alignSelf:"center",fontSize:"0.75rem",color:"var(--graview-ink-faint)"},children:["None of the ",d.length," match that."]}):null,b?(0,a.jsx)("button",{type:"button",disabled:A.length===0,style:{fontSize:"0.8125rem"},onClick:()=>{let e=A;F(U),h(e)},children:v.length>1?"Next":"Apply"}):null,N]}):(0,a.jsxs)("form",{style:{display:"flex",flexWrap:"wrap",gap:4},onSubmit:e=>{if(e.preventDefault(),D){h(f.split(/[,\n]/).map(n=>n.trim()).filter(Boolean));return}f.trim().length!==0&&h(t.type==="number"?Number(f):f)},children:[t.type==="text"&&t.long?(0,a.jsx)("textarea",{autoFocus:!0,name:s.name,"aria-label":g.label,placeholder:g.label,value:f,rows:4,onChange:e=>x(e.target.value),onKeyDown:e=>{e.key==="Escape"?u():e.key==="Enter"&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),e.currentTarget.form?.requestSubmit())},style:{flex:"1 1 100%",minWidth:0,font:"inherit",fontSize:"0.875rem",lineHeight:1.45,padding:"5px 8px",borderRadius:7,border:"1px solid var(--graview-edge)",background:"var(--graview-panel)",color:"var(--graview-ink)",resize:"vertical",fieldSizing:"content",minHeight:"5.5em",maxHeight:"40vh"}}):(0,a.jsx)("input",{autoFocus:!0,type:t.type==="date"?t.time?"datetime-local":"date":t.type==="number"?"number":"text",name:s.name,"aria-label":g.label,placeholder:D?`${g.label}, separated by commas`:g.label,value:f,...t.type==="number"&&t.min!==void 0?{min:t.min}:{},...t.type==="number"&&t.max!==void 0?{max:t.max}:{},...t.type==="number"&&t.step!==void 0?{step:t.step}:{},onChange:e=>x(e.target.value),onKeyDown:e=>{e.key==="Escape"&&u()},style:{flex:1,minWidth:0,font:"inherit",fontSize:"0.875rem",padding:"5px 8px",borderRadius:7,border:"1px solid var(--graview-edge)",background:"var(--graview-panel)",color:"var(--graview-ink)"}}),(0,a.jsx)("button",{type:"submit",disabled:!D&&f.trim().length===0,style:{fontSize:"0.8125rem"},children:v.length>1?"Next":"Apply"}),N]})]})}var U=[],S=10;function Q(r,o){return r.candidates&&r.candidates.length>0?r.candidates:o.type==="choice"?o.options:o.type==="several"&&o.of.type==="choice"?o.of.options:o.type==="boolean"?X:[]}var X=["yes","no"];function Z(r,o,u){return o.type==="boolean"||o.type==="choice"||o.type==="several"&&o.of.type==="choice"?u:ee(r,u)}function ee(r,o){let u=q(o);if(u){let m=K(r.schema,r.graph.getNode(u.from)?.kind??"",u.kind,"out");return m.charAt(0).toUpperCase()+m.slice(1)}let l=M(o);if(l.length>0)return l.map(m=>r.schema.tryDefinition(m)?.plural??`${m}s`).join(" + ");let y=r.graph.getNode(o);return y?L(r.schema.tryDefinition(y.kind),y):o}export{ae as a,ee as b};
@@ -1,6 +0,0 @@
1
- import{a as k}from"./chunk.G4JJXA63.js";import{a as Z}from"./chunk.PN2H6X7O.js";import"./chunk.BCBH6WJF.js";import"./chunk.WVUJXDXZ.js";import{a as Y}from"./chunk.46KUPBQC.js";import"./chunk.N2WTNKEV.js";import"./chunk.SBHVVJY7.js";import{c as T}from"./chunk.GE5EAN36.js";import"./chunk.337WDTG3.js";import{Qb as F,Rb as H,Sb as G,Tb as V,bc as X,oa as J,pa as U}from"./chunk.MKNXV4TM.js";import"./chunk.AJZBJBMO.js";var E=n=>"failed"in n;function fn(n,e){let r=n.schema.kinds,t=n.policy?.sees;if(!t?.length||U(e))return{kinds:r};let s=J(e).roles??[],i=new Set(t.filter(o=>o.roles==="*"||s.some(a=>o.roles.includes(a))).flatMap(o=>o.kinds));return{kinds:r.filter(o=>i.has(o))}}function j(n,e){if(!e)return n;let r=new Set(e.kinds.filter(i=>n.tryDefinition(i)!==void 0));if(r.size===n.kinds.length)return n;let t=new Map,s=i=>{if(r.has(i)){if(!t.has(i)){let o=n.tryDefinition(i),a=Object.fromEntries(Object.entries(o?.edges??{}).flatMap(([l,d])=>{if(d.to==="*")return[[l,d]];let c=d.to.filter(u=>r.has(u));return c.length>0?[[l,{...d,to:c}]]:[]}));t.set(i,{...o,edges:a})}return t.get(i)}};return{...n,definitions:n.definitions.filter(i=>r.has(i.kind)),kinds:n.kinds.filter(i=>r.has(i)),tryDefinition:s,definition:i=>{let o=s(i);if(!o)throw new Error(`Unknown node kind "${i}"`);return o}}}var gn=n=>n.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),b=n=>gn(n).replace(/[-_]+/g," ").trim();function O(n){let e=[];for(let t of n.kinds){let s=n.tryDefinition(t);if(!s)continue;let i=s.display?.labels??{},o=Object.entries(s.fields?.shape??{}).filter(([d])=>d!=="id"&&d!=="kind").map(([d,c])=>{let u=Y(c);return{name:d,type:u?.type,...u?.options?{options:u.options}:{},words:(i[d]??b(d)).toLowerCase()}}),a=Object.entries(s.edges??{}).map(([d,c])=>({name:d,from:t,to:c.to==="*"?n.kinds.filter(u=>u!==t):c.to,words:b(d)})),l=(s.plural??`${b(t)}s`).toLowerCase();e.push({kind:t,plural:l,noun:(s.noun??b(t)).toLowerCase(),fields:o,roles:s.fieldRoles??{},edges:a})}let r=new Map(e.map(t=>[t.kind,t]));return{schema:n,kinds:e,info:t=>r.get(t)}}var $=(n,e)=>e===void 0?void 0:n.fields.find(r=>r.name===e),A=n=>n?.type==="date"||n?.type==="datetime",K=n=>n?.type==="number"||n?.type==="integer",rn=n=>` ${n.toLowerCase().replace(/[“”"’‘]/g,"'").replace(/[^\p{L}\p{N}' -]+/gu," ").replace(/\s+/g," ").trim()} `,v=(n,e)=>n.includes(` ${e} `),L=n=>n.endsWith("ies")?`${n.slice(0,-3)}y`:n.endsWith("ses")?n.slice(0,-2):n.endsWith("s")?n.slice(0,-1):n;function yn(n,e){let r=[];for(let t of e.kinds){let s=new Set([t.plural,t.noun,`${t.noun}s`,b(t.kind),`${b(t.kind)}s`]),i=-1;for(let o of s){let a=n.indexOf(` ${o} `);a>=0&&(i<0||a<i)&&(i=a)}i>=0&&r.push({info:t,at:i})}return r.sort((t,s)=>t.at-s.at).map(t=>t.info)}function I(n,e,r){let t=e.trim().toLowerCase();if(t.length===0)return;let s=n.fields.filter(i=>!r||r(i));return s.find(i=>i.words===t||b(i.name)===t||i.name.toLowerCase()===t)??s.find(i=>i.words===L(t)||b(i.name)===L(t))??s.find(i=>t.split(" ").some(o=>o.length>2&&(i.words.split(" ").includes(o)||i.words.split(" ").includes(L(o)))))}function sn(n,e,r){let t=e.trim().toLowerCase();if(t.length!==0)return n.edges.find(s=>s.words===t||s.name.toLowerCase()===t)??n.edges.find(s=>s.to.some(i=>{let o=r.info(i);return o!==void 0&&(o.noun===L(t)||o.plural===t||b(i)===L(t))}))??n.edges.find(s=>t.split(" ").some(i=>i.length>2&&s.words.split(" ").includes(i)))}function W(n){return/ (?:grouped |group |split |sorted |organi[sz]ed )?by ([\p{L}\p{N}' -]+?)(?= (?:and|with|for|in|on|only|where|from|this|that|as|sorted|grouped) |\s*$)/u.exec(n)?.[1]?.trim()}var pn=/\bwho\b.*\b(covers?|cover|tends?|owns?|handles?|does|works? on|looks? after|is on|is assigned|staffs?|runs?)\b|\bcoverage\b|\bmatrix\b|\bwho covers\b/,bn=/\bcalendar\b|\bmonth\b|\bagenda\b|\bschedule\b|\bdue\b|\bdeadlines?\b|\bdates?\b|\bwhen\b/,mn=/\btimeline\b|\bover time\b|\bgantt\b|\bspans?\b|\bweek\b/,hn=/\bboard\b|\bkanban\b|\bcolumns?\b|\bpipeline\b|\bstages?\b|\bstatus\b/,wn=/\blaid out\b|\blayout\b|\bseating\b|\bwhere (?:they|it|each) (?:sits?|lies?|stands?)\b|\bfloor\b/,kn=/\bplan\b|\bmap\b|\bregions?\b/,$n=/\blist\b|\btable\b|\bgroup(?:ed)? by\b|\bsort(?:ed)? by\b|\bonly\b|\bjust the\b/;function Sn(n){let e=[];return/\blist\b|\btable\b/.test(n)&&e.push("blocks"),pn.test(n)&&e.push("coverage"),wn.test(n)&&e.push("board"),(/\bfloor plan\b/.test(n)||kn.test(n))&&e.push("plan"),mn.test(n)&&e.push("timeline"),bn.test(n)&&e.push("calendar"),hn.test(n)&&e.push("columns"),$n.test(n)&&!e.includes("blocks")&&e.push("blocks"),e.length===0&&W(n)&&e.push("columns"),e}var on=n=>{let e=r=>r?` and not ${r}`:"";if(/\boverdue\b|\blate\b|\bpast due\b/.test(n))return{cond:(r,t)=>`days(today(), ${r}) < 0${e(t)}`,says:r=>`overdue by ${r.words}`};if(/\btoday\b/.test(n))return{range:"day",cond:r=>`days(today(), ${r}) == 0`,says:r=>`with ${r.words} today`};if(/\bthis week\b|\bnext 7 days\b|\bnext week\b/.test(n))return{range:"week",cond:r=>`days(today(), ${r}) >= 0 and days(today(), ${r}) <= 6`,says:r=>`with ${r.words} in the next week`};if(/\bthis month\b|\bnext 30 days\b|\bnext month\b/.test(n))return{range:"month",cond:r=>`days(today(), ${r}) >= 0 and days(today(), ${r}) <= 30`,says:r=>`with ${r.words} in the next month`};if(/\blast month\b|\bpast month\b/.test(n))return{range:"month",cond:r=>`days(today(), ${r}) >= -30 and days(today(), ${r}) <= 0`,says:r=>`with ${r.words} in the last month`};if(/\bthis year\b/.test(n))return{range:"year",cond:r=>`days(today(), ${r}) >= 0 and days(today(), ${r}) <= 365`,says:r=>`with ${r.words} in the next year`};if(/\bquarter\b/.test(n))return{range:"quarter",cond:r=>`days(today(), ${r}) >= 0 and days(today(), ${r}) <= 91`,says:r=>`with ${r.words} in the next quarter`}},P=n=>{if(/\bagenda\b|\bin order\b/.test(n))return"agenda";if(/\btoday\b|\bday\b/.test(n))return"day";if(/\bweek\b/.test(n))return"week";if(/\bquarter\b/.test(n))return"quarter";if(/\byears\b/.test(n))return"years";if(/\byear\b/.test(n))return"year";if(/\bmonth\b/.test(n))return"month"},Q=/^(user|person|people|member|staff|gardener|volunteer|owner|agent|employee|worker|team|player|customer|client|contact|party|attendee|guest)s?$/,x=class extends Error{},m=n=>{throw new x(n)};function Dn(n,e){let r=n.fields.filter(i=>i.type==="enum");if(e){let i=I(n,e);if(i&&i.type==="enum")return i;i&&m(`${n.plural}' ${i.words} is not a choice, so it has no columns`)}let t=$(n,n.roles.status??n.roles.column);if(t?.type==="enum")return t;let s=r.find(i=>/^(status|stage|state|phase)$/.test(i.name));return s||(r[0]?r[0]:m(`${n.plural} have no choice field to put in columns`))}function nn(n,e){let r=n.fields.filter(A),t=l=>{let d=$(n,n.roles[l]);return A(d)?d:void 0},i=r.find(l=>v(e,l.words)||v(e,b(l.name)))??t("start")??r.find(l=>/^(due|date|on|at|start|starts|begins|from|sown|when)/i.test(l.name))??r[0];if(!i)return m(`no date field on ${n.plural}`);let o=t("end")??r.find(l=>l!==i&&/^(end|ends|until|to|finish|finished|harvested|due|closes|through)/i.test(l.name)),a=n.fields.find(l=>l.type==="boolean"&&/^(done|finished|complete|completed|closed)$/.test(l.name));return{start:i,...o&&o!==i?{end:o}:{},...a?{done:a}:{}}}function an(n){let e=$(n,n.roles.start),r=$(n,n.roles.end),t=$(n,n.roles.column??n.roles.day??n.roles.columns);if(K(e)&&K(r)&&t?.type==="enum")return{start:e,end:r,column:t}}function Rn(n,e,r,t){let s=[];for(let o of n.kinds)for(let a of o.edges)for(let l of a.to){let d=n.info(l);if(!d||d.kind===o.kind)continue;let c=0;e.includes(o)&&(c+=4),e.includes(d)&&(c+=4),(Q.test(d.kind)||Q.test(d.noun))&&(c+=3),t&&(a.words.includes(t)||d.noun===L(t))&&(c+=5),a.words.split(" ").some(u=>u.length>2&&r.includes(` ${u}`))&&(c+=2),s.push({rows:o,across:d,link:a,score:c})}let i=s.sort((o,a)=>a.score-o.score)[0];return i||m(e[0]?`${e[0].plural} are joined to nothing else, so there is no who-covers-what to draw`:"nothing here is joined to anything else, so there is no who-covers-what to draw")}function dn(n,e,r,t,s){let i=W(t);switch(n){case"columns":{if(i){let o=I(e,i);if(!o||o.type!=="enum"){let a=sn(e,i,r);if(a){let l=r.info(a.to[0]);return{lens:"coverage",kind:e.kind,across:l.kind,link:a.name}}}}return{lens:"columns",kind:e.kind,column:Dn(e,i).name}}case"calendar":{let o=nn(e,t),a=P(t);return{lens:"calendar",kind:e.kind,start:o.start.name,...o.end?{end:o.end.name}:{},...o.done?{done:o.done.name}:{},...a?{range:a}:{}}}case"timeline":{let o=an(e);if(o&&!/\bdates?\b|\bdue\b|\bdeadlines?\b|\bmonths?\b|\byears?\b/.test(t))return{lens:"timeline",kind:e.kind,start:o.start.name,end:o.end.name,column:o.column.name};let a=nn(e,t);return{lens:"calendar",kind:e.kind,start:a.start.name,...a.end?{end:a.end.name}:{},...a.done?{done:a.done.name}:{},range:P(t)??"quarter"}}case"coverage":{let o=Rn(r,s,t,i);return{lens:"coverage",kind:o.rows.kind,across:o.across.kind,link:o.link.name}}case"board":{let o=$(e,e.roles.x)??e.fields.find(c=>c.name==="x"),a=$(e,e.roles.y)??e.fields.find(c=>c.name==="y");if(!K(o)||!K(a))return m(`${e.plural} have no x and y to be laid out by`);let d=r.kinds.flatMap(c=>c.edges.filter(u=>u.to.includes(e.kind)&&c.kind!==e.kind))[0]??e.edges[0];return d?{lens:"board",kind:e.kind,x:o.name,y:a.name,fill:d.name,...d.from!==e.kind?{fillFrom:"occupant"}:{}}:m(`nothing is joined to ${e.plural} to fill them`)}case"plan":{let o=$(e,e.roles.outline)??e.fields.find(a=>a.name==="outline");return o?{lens:"plan",kind:e.kind,outline:o.name}:m(`${e.plural} have no outline to draw a plan from`)}case"blocks":{let o={lens:"blocks",kind:e.kind,as:/\bcards?\b/.test(t)?"card":"row"},a=/ group(?:ed)? by ([\p{L}\p{N} -]+?)(?= (?:and|only|sorted|with)|\s*$)/u.exec(t)?.[1]??(i&&!/ sort(?:ed)? by /.test(t)?i:void 0);if(a){let c=I(e,a);if(!c||c.type!=="enum")return m(c?`${e.plural}' ${c.words} is not a choice, so they cannot be grouped by it`:`${e.plural} have nothing called ${a} to group by`);o.group=c.name}let l=/ sort(?:ed)? by ([\p{L}\p{N} -]+?)(?= (?:and|only|grouped|with)|\s*$)/u.exec(t)?.[1];if(l){let c=I(e,l);if(!c)return m(`${e.plural} have nothing called ${l} to sort by`);o.sort={by:c.name,.../\b(newest|latest|desc|descending|most)\b/.test(t)?{direction:"desc"}:{}}}let d=_(e,t);return d.length>0&&(o.where=d),o}}}function _(n,e){let r=[],t=on(e);if(t){let s=n.fields.filter(A),i=$(n,n.roles.start),o=s.find(l=>v(e,l.words))??(A(i)?i:void 0)??s[0];(!o||!A(o))&&m(`no date field on ${n.plural}`);let a=n.fields.find(l=>l.type==="boolean"&&/^(done|finished|complete|completed|closed)$/.test(l.name));r.push({expr:t.cond(o.name,/\boverdue\b|\blate\b|\bpast due\b/.test(e)?a?.name:void 0),says:t.says(o)})}if(/\bonly\b|\bjust\b|\bthat are\b|\bwhich are\b/.test(e)){for(let s of n.fields){if(s.type!=="enum")continue;let i=s.options?.find(o=>v(e,o.toLowerCase())||v(e,b(o)));i&&r.push({expr:`${s.name} == '${i.replace(/'/g,"")}'`,says:`that are ${b(i)}`})}if(/\bnot done\b|\bundone\b|\bunfinished\b|\bopen ones\b|\bstill to do\b/.test(e)){let s=n.fields.find(i=>i.type==="boolean"&&/^(done|finished|complete|completed)$/.test(i.name));s&&r.push({expr:`not ${s.name}`,says:`not ${s.words}`})}}return r}var z={columns:"A board",calendar:"A calendar",timeline:"A timeline",coverage:"A grid",board:"A layout",plan:"A plan",blocks:"A list",reach:"A picture"};function An(n,e){let r=e.info(n.kind),t=s=>s?$(r,s)?.words??b(s):"";switch(n.lens){case"columns":return{title:`${k(r.plural)} by ${t(n.column)}`,detail:`of ${r.plural} by ${t(n.column)}`};case"calendar":{let s=n.range??"month";if(s==="agenda")return{title:`${k(r.plural)} in date order`,detail:`of ${r.plural} in order of ${t(n.start)}`};let i=s==="years"?"year":s;return{title:`${k(r.plural)} by ${i}`,detail:`of ${r.plural} by ${t(n.start)}, a ${i} at a time`}}case"timeline":return{title:`${k(r.plural)} over the ${t(n.column)}`,detail:`of ${r.plural} from ${t(n.start)} to ${t(n.end)}, by ${t(n.column)}`};case"coverage":{let s=e.info(n.across);return{title:`${k(r.plural)} by ${s.noun}`,detail:`of which ${s.noun} covers which ${r.noun}`}}case"board":return{title:`${k(r.plural)} where they stand`,detail:`of ${r.plural} where they stand`};case"plan":return{title:`${k(r.plural)} on a plan`,detail:`of ${r.plural}`};default:{let s=[n.where?.map(i=>i.says).join(" and "),n.group?`by ${t(n.group)}`:void 0,n.sort?`in order of ${t(n.sort.by)}`:void 0].filter(i=>!!i);return{title:[k(r.plural),...s].join(" "),detail:[`of ${r.plural}`,...s].join(" ")}}}}function vn(n,e){let r={title:e,on:n.kind};switch(n.lens){case"columns":return{name:"columns",...r,bindings:{[n.kind]:{column:n.column}}};case"calendar":return{name:"calendar",...r,bindings:{[n.kind]:{start:n.start,...n.end?{end:n.end}:{},...n.done?{done:n.done}:{}}},...n.range?{options:{range:n.range}}:{}};case"timeline":return{name:"timeline",...r,bindings:{[n.kind]:{start:n.start,end:n.end,column:n.column}}};case"coverage":return{name:"coverage",...r,bindings:{rows:{kind:n.kind},columns:{kind:n.across},link:{edge:n.link}}};case"board":return{name:"board",...r,bindings:{slots:{kind:n.kind},x:{field:n.x,on:"slots"},y:{field:n.y,on:"slots"},fill:{edge:n.fill}},...n.fillFrom?{options:{fillFrom:n.fillFrom}}:{}};case"plan":return{name:"plan",...r,bindings:{regions:{kind:n.kind},outline:{field:n.outline,on:"regions"}}};default:{let t=n.where?.length?` where ${n.where.map(i=>n.where.length>1?`(${i.expr})`:i.expr).join(" and ")}`:"",s={list:`all('${n.kind}')${t}`,as:n.as??"row"};return n.group&&(s.group=n.group),n.sort&&(s.sort=n.sort.direction?{by:n.sort.by,direction:n.sort.direction}:n.sort.by),s.empty="Nothing here yet.",{name:"blocks",...r,options:{blocks:[s]}}}}}function B(n,e){let r=s=>s.toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,""),t=new Set(["home","overview",...X(e).map(s=>s.slug),...(e.lenses??[]).flatMap(s=>s.title?[r(s.title)]:[])]);if(!t.has(r(n)))return n;for(let s=2;;s++)if(!t.has(r(`${n} ${s}`)))return`${n} ${s}`}var en={title:[],headline:[],text:["tone"],figure:["as","currency","label"],list:["sort","limit","group","empty","as"],progress:["label"],group:["direction"],when:["show"],divider:[]};function Ln(n,e){if(!Array.isArray(e)||e.length===0)return"it has no blocks to draw";if(e.length>40)return"it has more blocks than a place draws";let r=(o,a)=>{if(typeof o!="string"||o.trim()==="")return`its ${a} says nothing`;try{return T(o)}catch(l){return`its ${a} does not read: ${l instanceof Error?l.message.replace(/ \(at character.*$/,""):String(l)}`}},t=o=>{if(o.t==="where")return t(o.set);if(o.t==="call"&&o.fn==="all"){let a=o.args[0];return a?.t==="lit"&&typeof a.value=="string"?n.info(a.value)??null:void 0}},s=(o,a)=>{switch(o.t){case"lit":return;case"ident":return a&&!a.fields.some(l=>l.name===o.name)&&!a.edges.some(l=>l.name===o.name)?`${a.plural} have nothing called ${o.name}`:void 0;case"member":return s(o.object,a);case"list":return o.items.map(l=>s(l,a)).find(Boolean);case"unary":return s(o.operand,a);case"binary":return s(o.left,a)??s(o.right,a);case"where":{let l=t(o.set);return l===null?"Nothing by that name here":s(o.set,a)??s(o.filter,l??void 0)}case"call":return o.fn==="all"?t(o)===null?"Nothing by that name here":void 0:o.args.map(l=>s(l,a)).find(Boolean)}},i=(o,a)=>{if(a>4)return"its blocks nest deeper than a place draws";for(let l of o){if(!w(l))return"a block is not an object";let d=Object.keys(en).find(g=>g in l);if(!d)return`"${Object.keys(l)[0]??""}" is not a block a place draws`;let c=Object.keys(l).find(g=>g!==d&&g!=="key"&&!en[d].includes(g));if(c)return`a ${d} block takes no "${c}"`;let u=l[d];if(d==="list"||d==="figure"||d==="when"){if(d==="figure"&&u===!0)continue;let g=r(u,d);if(typeof g=="string")return g;let p=s(g,void 0);if(p)return p;if(d==="list"){let f=t(g);if(f==null)return f===null?"Nothing by that name here":"its list does not say which records it lists, like all('task')";for(let y of["group","sort"]){let h=l[y],S=typeof h=="string"?h:w(h)&&typeof h.by=="string"?h.by:void 0;if(h===void 0)continue;let D=S?f.fields.find(un=>un.name===S):void 0;if(!D)return`${f.plural} have nothing called ${String(S??h)} to ${y} by`;if(y==="group"&&D.type!=="enum")return`${f.plural}' ${D.words} is not a choice, so they cannot be grouped by it`}}if(d==="when"){let f=l.show;if(!Array.isArray(f))return"a when block shows a list of blocks";let y=i(f,a+1);if(y)return y}}else if(d==="group"){if(!Array.isArray(u))return"a group block holds a list of blocks";let g=i(u,a+1);if(g)return g}else{if(d!=="divider"&&typeof u!="string")return`a ${d} block says words`;if(typeof u=="string")for(let g of u.matchAll(/\{([^{}]*)\}/g)){let p=g[1].split(/\|(?![|])/)[0],f=r(p,`${d}'s braces`);if(typeof f=="string")return f;let y=s(f,void 0);if(y)return y}}}};return i(e,1)}function N(n,e,r){let t=j(n.schema,r),s=f=>({ok:!1,failed:`Couldn't draw that: ${f.replace(/\.$/,"")}.`});if(!G(e.name)||e.name==="reach")return s(`"${String(e.name)}" is not a picture the seat can draw; it draws ${H.filter(f=>f!=="reach").join(", ")}`);if(typeof e.title!="string"||e.title.trim().length===0||e.title.length>80)return s("it needs a title of a few words");if(typeof e.on!="string"||!t.tryDefinition(e.on))return s("Nothing by that name here");let i=F[e.name],o=e.bindings??{};if(i.binds==="fields")for(let[f,y]of Object.entries(o)){if(!t.tryDefinition(f))return s("Nothing by that name here");let h=Object.keys(t.tryDefinition(f).fields?.shape??{});for(let[S,D]of Object.entries(y??{}))if(typeof D!="string"||!h.includes(D))return s(`${b(f)} has no field "${String(D)}" for its ${S}`);for(let S of i.requiredRoles)if(!(S in(y??{})))return s(`a ${e.name} needs ${b(f)}'s ${S}`)}else if(i.binds==="entities")for(let f of i.requiredRoles){let y=o[f];if(!y)return s(`a ${e.name} needs its ${f}`);if(typeof y.kind=="string"&&!t.tryDefinition(y.kind))return s("Nothing by that name here")}let a={...n,schema:t,lenses:[...n.lenses??[],e]},l=a.lenses.length-1,d=V(a),c=`lenses.${l}`,u=d.findings.find(f=>f.path===c||f.path.startsWith(`${c}.`));if(u)return s(u.message.replace(/^"[^"]*" /,"it "));let g=d.undrawn.find(f=>f.index===l);if(g)return s(g.why);let p=d.drawn.find(f=>f.index===l);if(!p)return s("its bindings name something the app does not have");if(p.as==="overview")return s(`"${e.title}" is the scene's own address; give it another title`);if(e.name==="blocks"){let f=Ln(O(t),e.options?.blocks);if(f)return s(f)}return{ok:!0,drawn:p}}function C(n){return{op:"add-lens",title:n.title,lens:n.name,on:n.on,...n.bindings?{bindings:n.bindings}:{},...n.options?{options:n.options}:{}}}function In(n){return{op:"remove-lens",title:n.title,on:n.on}}var w=n=>typeof n=="object"&&n!==null&&!Array.isArray(n);function ln(n){let e=w(n)?n:{},r=String(e.lens??e.name??""),t=e.bindings,s=typeof e.on=="string"?e.on:w(t)&&F[r]?.binds==="fields"?Object.keys(t)[0]??"":"";return{name:r,title:typeof e.title=="string"?e.title.trim():"",on:s,...w(t)?{bindings:t}:{},...w(e.options)?{options:e.options}:{}}}function En(n){let e=s=>w(n.bindings?.[s])?n.bindings[s]:{},r=s=>typeof s=="string"?s:void 0,t=e(n.on);switch(n.name){case"columns":return r(t.column)?{lens:"columns",kind:n.on,column:t.column}:void 0;case"calendar":{let s=r(n.options?.range);return r(t.start)?{lens:"calendar",kind:n.on,start:t.start,...r(t.end)?{end:t.end}:{},...r(t.done)?{done:t.done}:{},...s?{range:s}:{}}:void 0}case"timeline":return r(t.start)&&r(t.end)&&r(t.column)?{lens:"timeline",kind:n.on,start:t.start,end:t.end,column:t.column}:void 0;case"coverage":{let s=w(n.bindings?.columns)?r(n.bindings.columns.kind):void 0,i=w(n.bindings?.link)?r(n.bindings.link.edge):void 0;return s&&i?{lens:"coverage",kind:n.on,across:s,link:i}:void 0}case"blocks":{let s=n.options?.blocks;if(!Array.isArray(s)||s.length!==1||!w(s[0]))return;let i=s[0],o=new RegExp(`^all\\('${n.on}'\\)(?: where (.+))?$`).exec(String(i.list??""));if(!o)return;let a=i.sort;return{lens:"blocks",kind:n.on,as:i.as==="card"?"card":"row",...typeof i.group=="string"?{group:i.group}:{},...typeof a=="string"?{sort:{by:a}}:w(a)&&typeof a.by=="string"?{sort:{by:a.by,...a.direction==="desc"?{direction:"desc"}:{}}}:{},...o[1]?{where:[{expr:o[1],says:"as asked"}]}:{}}}default:return}}function M(n,e,r,t,s){let i=O(j(n.schema,t)).info(e.on),o=En(e);return{title:e.title,said:`${z[e.name]??"A picture"} of ${i?.plural??b(e.on)}.`,kind:e.on,lens:e,drawn:r,edit:C(e),by:s,asks:[],...o?{recipe:o}:{}}}function tn(n){return{title:n.title,said:n.said,lens:{title:n.lens.title,lens:n.lens.name,on:n.lens.on,...n.lens.bindings?{bindings:n.lens.bindings}:{},...n.lens.options?{options:n.lens.options}:{}},edit:n.edit,by:n.by,check:"It draws, and graview check would take it."}}function q(n,e,r,t,s){let i=An(n,e),o=n.title??s??B(i.title,r.app),a=vn(n,o),l=N(r.app,a,r.sight);return l.ok?{title:o,said:`${z[n.lens]} ${i.detail}.`,kind:n.kind,lens:a,drawn:l.drawn,edit:C(a),by:"template",asks:t,recipe:n}:{failed:l.failed,...r.lastGood?{lastGood:r.lastGood}:{}}}function xn(n,e,r,t){if(r.length>0)return r;let s=o=>{switch(n){case"columns":return o.fields.some(a=>a.type==="enum");case"calendar":return o.fields.some(A);case"timeline":return an(o)!==void 0||o.fields.some(A);case"coverage":return o.edges.some(a=>a.to.some(l=>l!==o.kind));case"board":return o.fields.some(a=>a.name==="x")&&o.fields.some(a=>a.name==="y");case"plan":return o.fields.some(a=>a.name==="outline")||o.roles.outline!==void 0;default:return!0}};return[...e.kinds.filter(s)].sort((o,a)=>Number(a.fields.some(l=>v(t,l.words)))-Number(o.fields.some(l=>v(t,l.words))))}function jn(n,e){let r=O(j(e.app.schema,e.sight)),t=rn(n),s=Sn(t);if(s.length===0)return;let i=yn(t,r),o;for(let a of s){let l=a==="coverage"?[i[0]??r.kinds[0]].filter(d=>!!d):xn(a,r,i,t);for(let d of l)try{let c=dn(a,d,r,t,i),u=q(c,r,e,[n]);if(!E(u))return u;o??=u.failed}catch(c){if(!(c instanceof x))throw c;o??=`Couldn't draw that: ${c.message}.`}l.length===0&&i.length===0&&(o??=`Couldn't draw that: nothing here has what ${z[a].toLowerCase()} needs.`)}return{failed:o??"Couldn't draw that: Nothing by that name here.",...e.lastGood?{lastGood:e.lastGood}:{}}}async function On(n,e){let r=e.lastGood?{lastGood:e.lastGood}:{};if(n.trim().length===0)return{failed:"Say what you would like to see, like \u201Ca board of tasks by status\u201D.",...r};let t=jn(n,e);if(t&&!E(t))return t;if(!e.complete)return t??{failed:"Couldn't draw that: drawing freely needs AI, which isn't on here. Ask for a board, a calendar, a timeline, a list or who covers what.",...r};let s=await cn(n,e,void 0);return E(s)&&t?t:s}async function Nn(n,e,r){let t={lastGood:n},s={...r,lastGood:n},i=O(j(r.app.schema,r.sight)),o=rn(e),a=i.info(n.kind),l=[...n.asks,e];if(!a)return{failed:"Couldn't change that: Nothing by that name here.",...t};let d=n.recipe,c=/^ (?:call|name|title) (?:it|this)? ?(.+?) $/.exec(o)??/ (?:call|name) it (.+?) $/.exec(o);try{if(c){let p=e.replace(/^.*?\b(?:call|name|title)\b\s*(?:it|this)?\s*/i,"").replace(/^["“']|["”']$/g,"").trim();if(p.length===0)return{failed:"Couldn't change that: say what to call it.",...t};let f={...n.lens,title:B(p,r.app)},y=N(r.app,f,r.sight);return y.ok?{...n,title:f.title,lens:f,drawn:y.drawn,edit:C(f),asks:l,...d?{recipe:{...d,title:f.title}}:{}}:{failed:y.failed,...t}}let g=/ as (?:a |an )?(board|kanban|calendar|timeline|list|table|cards|rows|grid|plan|layout)\b/.exec(o);if(g){let p=g[1]==="board"||g[1]==="kanban"?"columns":g[1]==="calendar"?"calendar":g[1]==="timeline"?"timeline":g[1]==="grid"?"coverage":g[1]==="plan"?"plan":g[1]==="layout"?"board":"blocks",f=dn(p,a,i,o,[a]),y=g[1]==="cards"?"card":g[1]==="rows"?"row":void 0,h=p==="blocks"&&d?.lens==="blocks"?{...d,...y?{as:y}:{}}:p==="blocks"&&d?.lens==="columns"?{...f,group:d.column,...y?{as:y}:{}}:f;return q(R(h),i,s,l)}if(d){let p=Kn(d,a,i,o);if(p)return q(p,i,s,l)}}catch(g){if(!(g instanceof x))throw g;return{failed:`Couldn't change that: ${g.message}.`,...t}}if(!r.complete)return{failed:"Couldn't change that: changing it freely needs AI, which isn't on here. Try \u201Cgroup by status\u201D, \u201Conly this month\u201D or \u201Cas a calendar\u201D.",...t};let u=await cn(e,s,n);return E(u)?u:{...u,asks:l}}var R=n=>{let{title:e,...r}=n;return r};function Kn(n,e,r,t){let s=/ (?:group(?:ed)?|split|organi[sz]ed?|put them|columns) by ([\p{L}\p{N} -]+?)(?= (?:and|only|with)|\s*$)/u.exec(t)?.[1]??(/^ by /.test(t)?W(t):void 0);if(s){let d=I(e,s);if(d?.type==="enum")return n.lens==="blocks"?{...R(n),group:d.name}:{lens:"columns",kind:n.kind,column:d.name};let c=sn(e,s,r);return c?{lens:"coverage",kind:n.kind,across:c.to[0],link:c.name}:m(d?`${e.plural}' ${d.words} is not a choice, so they cannot be grouped by it`:`${e.plural} have nothing called ${s} to group by`)}let i=/ (?:sort(?:ed)?|order(?:ed)?) by ([\p{L}\p{N} -]+?)(?= (?:and|only|with)|\s*$)/u.exec(t)?.[1];if(i){let d=I(e,i);return d?{...n.lens==="blocks"?R(n):{lens:"blocks",kind:n.kind,as:"row",...n.lens==="columns"?{group:n.column}:{}},sort:{by:d.name,.../\b(newest|latest|desc|descending|most)\b/.test(t)?{direction:"desc"}:{}}}:m(`${e.plural} have nothing called ${i} to sort by`)}if(/\b(?:all of them|everything|show all|clear the filter|no filter|without the filter)\b/.test(t)){if(n.lens!=="blocks"||!n.where)return m("it already shows all of them");let{where:d,...c}=R(n);return c}let o=on(t);if(o&&n.lens==="calendar"&&o.range)return{...R(n),range:o.range};if(o&&n.lens==="calendar"&&!o.range)return{lens:"blocks",kind:n.kind,as:"row",sort:{by:n.start},where:_(e,t)};let a=_(e,t);if(a.length>0){let d=n.lens==="blocks"?R(n):{lens:"blocks",kind:n.kind,as:"row",...n.lens==="columns"?{group:n.column}:{}};return{...d,where:[...d.where??[],...a]}}let l=n.lens==="calendar"?P(t):void 0;if(l)return{...R(n),range:l}}function Cn(n){return n.kinds.map(e=>{let r=e.fields.map(i=>`${i.name} (${i.type??"value"}${i.options?`: ${i.options.join(" | ")}`:""})`).join(", "),t=e.edges.map(i=>`${i.name} \u2192 ${i.to.join(" | ")}`).join(", "),s=Object.entries(e.roles).map(([i,o])=>`${i}=${o}`).join(", ");return`- ${e.kind} ("${e.plural}"): ${r}${t?`; relations: ${t}`:""}${s?`; roles: ${s}`:""}`}).join(`
2
- `)}var Fn=['columns \u2014 a board, records in columns by one choice field: {"lens": "columns", "on": K, "bindings": {K: {"column": "<enum field>"}}}','calendar \u2014 records on a calendar by a date: {"lens": "calendar", "on": K, "bindings": {K: {"start": "<date field>", "end"?: "<date field>", "done"?: "<boolean field>"}}, "options": {"range"?: "day" | "week" | "month" | "quarter" | "year" | "agenda"}}','timeline \u2014 minutes of a day in columns: {"lens": "timeline", "on": K, "bindings": {K: {"start": "<number field>", "end": "<number field>", "column": "<enum field>"}}}','coverage \u2014 who covers what, a grid of two kinds joined by a relation: {"lens": "coverage", "on": K, "bindings": {"rows": {"kind": K}, "columns": {"kind": J}, "link": {"edge": "<relation of K to J>"}}}',`blocks \u2014 anything else, as blocks: {"lens": "blocks", "on": K, "options": {"blocks": [{"headline": "words"}, {"list": "all('K') where <condition>", "group"?: "<enum field>", "sort"?: "<field>" | {"by": "<field>", "direction": "desc"}, "as"?: "row" | "card", "empty"?: "words"}, {"figure": "count(all('K'))", "label": "words"}]}}. Conditions read a record's own fields: status == 'open', not done, days(today(), due) <= 7.`].join(`
3
- `);function Gn(n,e,r){return["You draw a view of an app's data as JSON \u2014 never code. The app's kinds, their fields (with types) and relations:",Cn(e),"","The lenses you may use (prefer the first four; use blocks only when none of them fits):",Fn,"",r?`The view on screen now:
4
- ${JSON.stringify(r.lens)}
5
- Change it as asked, and keep everything not asked about.`:"",`Asked: ${JSON.stringify(n)}`,'Answer with ONE JSON object: {"title": "<a few words, like Deliverables by status>", "lens": \u2026, "on": \u2026, "bindings"?: \u2026, "options"?: \u2026}. Name only the kinds, fields and relations listed above. If it cannot be drawn from them, answer {"failed": "<one sentence saying why>"}.'].filter(t=>t!=="").join(`
6
- `)}async function cn(n,e,r){let t=e.lastGood?{lastGood:e.lastGood}:{},s=O(j(e.app.schema,e.sight)),i;try{i=await e.complete(Gn(n,s,r))}catch{return{failed:"Couldn't draw that: the model did not answer.",...t}}let o=Z(i);if(typeof o!="object"||o===null||Array.isArray(o))return{failed:"Couldn't draw that: the model's answer was not a view.",...t};let a=o;if(typeof a.failed=="string")return{failed:`Couldn't draw that: ${a.failed.replace(/^Couldn't draw that:\s*/i,"").replace(/\.$/,"")}.`,...t};let l=ln(a);if(!G(l.name))return{failed:`Couldn't draw that: "${l.name}" is not a picture the seat can draw.`,...t};let d=l.title?l.title.slice(0,80):r?.title??k(n.trim()).slice(0,80),c={...l,title:r&&r.title===d?d:B(d,e.app)},u=N(e.app,c,e.sight);return u.ok?{...M(e.app,c,u.drawn,e.sight,"model"),asks:[n]}:{failed:u.failed,...t}}function Un(n,e,r){let t=[...n.lenses??[]];for(let s of e){let i={name:s.lens,title:s.title,on:s.on,...s.bindings?{bindings:s.bindings}:{},...s.options?{options:s.options}:{}};if(t.some(a=>a.title===i.title))continue;N({...n,lenses:t},i,r).ok&&(t=[...t,i])}return t.length===(n.lenses??[]).length?n:{...n,lenses:t}}async function Hn(n,e,r){let{app:t,drafts:s}=r,i=fn(t,r.principal),o=c=>{let u=ln(c);return{lens:u,verdict:N(t,u,i)}};if(n==="keep_lens"){let{lens:c,verdict:u}=o(e);if(!u.ok)return{ok:!1,error:u.failed,reason:"invalid"};if(!s?.keep)return{ok:!1,error:"This app's declaration cannot be written from here."};let g=C(c),p=await s.keep(g);return p.ok?{ok:!0,data:{kept:g,said:p.said??`Adds \u201C${g.title}\u201D to the places.`,undo:In(g)}}:{ok:!1,error:p.error}}if(e.lens!==void 0){let{lens:c,verdict:u}=o(e.lens);return u.ok?{ok:!0,data:tn(M(t,c,u.drawn,i,"model"))}:{ok:!1,error:u.failed,reason:"invalid"}}let a={app:t,sight:i,...s?.complete?{complete:s.complete}:{}},l=String(e.ask??""),d;if(e.current!==void 0){let{lens:c,verdict:u}=o(e.current);if(!u.ok)return{ok:!1,error:u.failed,reason:"invalid"};d=await Nn(M(t,c,u.drawn,i,"model"),l,a)}else d=await On(l,a);return E(d)?{ok:!1,error:d.failed,reason:"invalid"}:{ok:!0,data:tn(d)}}export{tn as draftAnswer,M as draftFromLens,fn as draftSight,On as draftView,E as isDraftFailure,N as judgeLens,C as lensEditOf,ln as lensFromSpec,En as recipeOfLens,Nn as refineDraft,Hn as runDraftTool,In as takeBackEditOf,jn as templateDraft,Un as withReaderLenses};
@@ -1 +0,0 @@
1
- import{e as z}from"./chunk.6R4EI47C.js";import{D as N,Q as O,c as B,ca as T,da as m,fa as b,pa as V,ra as $}from"./chunk.NRRUGG22.js";import{B as A,Ca as R,Cb as P,Db as j,jb as F,za as D}from"./chunk.MKNXV4TM.js";import{a as w,b as K}from"./chunk.MRK6QJV5.js";import{b as y}from"./chunk.AJZBJBMO.js";function G(n,e){let t=n.graph.getNode(e);if(!t)return[];let r=t.kind,i=n.schema.tryDefinition(r);if(!i)return[];let s=new Map;for(let d of n.allMutations()){let o=d.subject;if(!o||!(o.kinds==="*"||o.kinds.includes(r)))continue;let c=d.input.shape??{};for(let u of F(d,i)){let p=u in c,h=[];for(let f of Object.keys(c)){if(f===o.arg||f===u||L(c[f]))continue;let x=D(d.input).find(v=>v.name===f);h.push({name:f,...x?{kinds:x.kinds}:{},...x?{candidates:x.kinds.includes("*")?n.graph.allNodes().map(v=>v.id):x.kinds.flatMap(v=>n.graph.nodesOfKind(v).map(H=>H.id))}:{},shape:R(d.input,f)})}let E={field:u,mutation:d.name,title:d.title??d.name,shape:p?R(d.input,u):{type:"unknown"},takesValue:p,alternatives:[],open:h,call:f=>({name:d.name,args:p?{[o.arg]:e,[u]:f}:{[o.arg]:e}})};s.set(u,[...s.get(u)??[],E])}}return[...s.values()].map(d=>{let o=[...d.filter(u=>u.takesValue),...d.filter(u=>!u.takesValue)],[a,...c]=o;return{...a,alternatives:c}})}function L(n){let e=A(n)?.type;return e==="optional"||e==="default"||e==="nullable"}var k=y(w(),1);function J(n){let{store:e,principal:t}=m(),r=b(),i=(0,k.useMemo)(()=>n===null?[]:G(e,n),[e,n,r]),s=(0,k.useCallback)((d,o,a={})=>{let c=d.call(o);e.apply({name:c.name,args:{...c.args,...a}},{author:t})},[e,t]);return{fields:i,commit:s}}var I=y(w(),1);var g=y(K(),1);function Q(n){let e=n?.hint;return typeof e=="string"&&e.length>0?e:void 0}function X(n){if(n instanceof Error&&n.message)return n.message;let e=String(n);return e==="[object Object]"?"The view threw without a message.":e}var C=class extends I.Component{static contextType=V;state={};static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,t){console.error(`[graview] the ${this.props.view??"view"} of ${this.props.kind} threw while rendering`,e,t.componentStack),this.context?.(e,{module:"@graview/react"})}render(){let{error:e}=this.state;if(!e)return this.props.children;let t=Q(e);return(0,g.jsxs)("div",{role:"alert","data-graview-view-error":this.props.kind,style:{display:"flex",flexDirection:"column",gap:"0.375rem",padding:"var(--graview-pad, 12px)",height:"100%",overflow:"auto",boxSizing:"border-box",borderRadius:"var(--graview-radius-sm, 6px)",background:"var(--graview-panel-warning, #fdf3ec)",color:"var(--graview-ink, #1a1a1a)",font:"var(--graview-font-body, 13px/1.45 system-ui)",fontSize:"0.875rem",lineHeight:1.45},children:[(0,g.jsx)("strong",{style:{color:"var(--graview-warn, #b4462a)"},children:this.props.view?`${this.props.view} could not draw`:"This view could not draw"}),(0,g.jsx)("span",{style:{color:"var(--graview-ink-muted, #555)"},children:this.props.kind}),(0,g.jsx)("span",{children:X(e)}),t?(0,g.jsx)("span",{style:{color:"var(--graview-ink-muted, #555)"},children:t}):null]})}};var W=y(w(),1);function Y(){return m().activity}function Z(n){let{noteAttention:e,noteSeat:t}=m();(0,W.useEffect)(()=>n.onCall(r=>{let i=n.author??{kind:"agent"},s=r.args?.said;r.phase==="ok"&&typeof s=="string"&&s.length>0&&t({type:"said",author:i,say:s}),!(r.phase!=="ok"||!r.reads||r.reads.length===0)&&e({reads:r.reads,author:i,intent:`read ${r.name}`})}),[n,e,t])}var l=y(w(),1);function ee(n,{units:e,target:t=0,legibleAt:r=260}){let[i,s]=(0,l.useState)(e);(0,l.useEffect)(()=>{let o=n.current;if(o===null||typeof ResizeObserver>"u")return;let a=new ResizeObserver(([c])=>{let u=c?.contentRect.width??0;u>0&&s(u)});return a.observe(o),()=>a.disconnect()},[n]);let d=i/e;return{scale:d,width:i,touchable:d*t>=24,legible:i>=r}}function ne(n="--graview-font-body",e="sans-serif"){let t=(0,l.useRef)(void 0),r=(0,l.useMemo)(()=>{if(typeof getComputedStyle!="function"||typeof document>"u")return e;let i=getComputedStyle(document.documentElement).getPropertyValue(n).trim();return i.length>0?i:e},[n,e]);return(0,l.useMemo)(()=>{t.current===void 0&&(t.current=typeof document>"u"?null:document.createElement("canvas").getContext("2d")??null);let i=t.current;return i===null?O:(s,d)=>{i.font=`${d}px ${r}`;let o=i.measureText(s).width;return o>0?o:O(s,d)}},[r])}function xe(n,e,t){let[r,i]=(0,l.useState)(!1);return(0,l.useEffect)(()=>{(document.fonts?.ready??Promise.resolve()).then(()=>i(!0))},[]),(0,l.useMemo)(()=>{let s=n.current,d=r&&s?document.createElement("canvas").getContext("2d"):null;if(d)return d.font=`600 ${.8125*e}px ${getComputedStyle(s).fontFamily}`,d.measureText("M").width>0?o=>d.measureText(o).width:void 0},[r,e,t])}var te=(0,l.createContext)(void 0);function oe(){return(0,l.useContext)(te)}var S=y(w(),1);function re(){let n=$();return(0,S.useMemo)(()=>[...new Set(n.flatMap(e=>e.nodeIds))],[n])}function ie(){let n=U(),e=T();return(0,S.useMemo)(()=>{if(!e)return n;let t=e.matched;return t.length===0&&n.length===0?[q]:[...new Set([...n,...t])]},[e,n])}function U(){let{store:n,selection:e}=m(),t=b();return(0,S.useMemo)(()=>{if(e.length===0)return[];let r=new Set(e),i=new Set(r);for(let s of n.graph.allEdges())r.has(s.from)&&i.add(s.to),r.has(s.to)&&i.add(s.from);for(let s of n.violations())if(s.subjectId!==void 0&&r.has(s.subjectId))for(let d of s.nodeIds)i.add(d);return[...i]},[n,e,t])}var q="search:nothing";var _=y(w(),1);function ae(){let{brand:n}=m(),e=n?.kit;return(0,_.useMemo)(()=>P(e),[e])}function se(n,e){let t=j(n,e),r={...t.color!==void 0?{color:t.color}:{},...t.pattern!==void 0?{pattern:t.pattern}:{},...t.width!==void 0?{width:t.width}:{},...t.cap!==void 0?{cap:t.cap}:{},...t.opacity!==void 0?{opacity:t.opacity}:{}};return{connector:t,style:z(e,{[e]:r})}}var M=3;function de(n){let e=B(n),t=e.focusId;if(!t)return null;if(e.within?.view){let[i]=N(t);if(i)return{at:`screen:${i}`,audience:!0}}return{at:t,audience:!1}}function Ae(n,e,t){let r=[],i=new Map,s=new Map,d=0;for(let o of n){let a=de(o.stop),c=a?e(a.at):null;if(!a||!c){o.name&&r.push({kind:"edge",presence:o,point:{x:t-8,y:40+d++*28}});continue}if(!o.name){let f=s.get(a.at);s.set(a.at,{n:(f?.n??0)+1,box:c});continue}let u=i.get(a.at)??[];if(u.push(o),i.set(a.at,u),u.length>M)continue;let p=c,h=u.length-1,E=a.audience?{x:p.x+p.width*.5+(h-1)*26,y:p.y+Math.min(p.height,24)}:{x:p.x+p.width*.5-26-h*22,y:p.y+p.height-4};r.push({kind:"person",presence:o,point:E,at:a.at,index:h,of:u.length,audience:a.audience})}for(let[o,a]of i){if(a.length<=M)continue;let c=e(o);c&&r.push({kind:"count",at:o,point:{x:c.x+c.width*.5+2*26+18,y:c.y+c.height-4},n:a.length-M})}for(let[o,{n:a,box:c}]of s)r.push({kind:"count",at:o,point:{x:c.x+c.width*.5+40,y:c.y+c.height-4},n:a});for(let o of n)if(o.name){if(o.robot?.at&&o.robot.mode!=="docked"){let a=e(o.robot.at);a&&r.push({kind:"robot",presence:o,point:{x:a.x+a.width/2+22,y:a.y+a.height-4},mode:o.robot.mode})}if(o.over){let a=e(o.over);a&&r.push({kind:"over",presence:o,box:a})}}return r}export{Y as a,Z as b,ee as c,ne as d,xe as e,te as f,oe as g,J as h,re as i,ie as j,U as k,ae as l,se as m,Ae as n,C as o};
@@ -1 +0,0 @@
1
- import{a as U}from"./chunk.25OYH6MY.js";import{c as J}from"./chunk.OGL4PHTY.js";import{a as T,c as K,f as W,g as D,k as _,l as j,m as X}from"./chunk.ISRS7GOT.js";import{e as Q,g as Y,i as Z}from"./chunk.DCIC3YHX.js";import{c as z}from"./chunk.6LJ66MB7.js";import{da as G,fa as I,na as V,ua as q}from"./chunk.NRRUGG22.js";import{Pb as N,ob as L,yb as M,zb as O}from"./chunk.MKNXV4TM.js";import{a as ae,b as $}from"./chunk.MRK6QJV5.js";import{b as F}from"./chunk.AJZBJBMO.js";var o=F(ae(),1);function se(e){let t=[e?.typography?.body,e?.typography?.display,e?.typography?.mono],n=[];for(let a of t){let r=a?.split(",")[0]?.trim().replace(/^["']|["']$/g,"");!r||O(r)||r.toLowerCase()!==L.toLowerCase()&&(n.includes(r)||n.push(r))}return n}function ee(e){let t=se(e);return t.length===0?null:`https://fonts.googleapis.com/css2?${t.map(a=>`family=${encodeURIComponent(a).replace(/%20/g,"+")}:wght@400;500;600;700`).join("&")}&display=swap`}var u=F($(),1);function ge(e,t){let{app:n}=e;return(0,o.useMemo)(()=>{let a=Y(t(n.schema,n.viewSpecs),n),r=e.views?V(a,e.views(n.schema,a)):a;return Z(r,n.schema,Q(e.brand??n.brand,n.schema)),r},[e.views,n.schema,n.viewSpecs,n.lenses,n.pages,n.home])}function ie(e,t){return new N({schema:e.schema,mutations:e.mutations??[],invariants:e.invariants??[],...t?{snapshot:t}:{},...e.policy?{policy:e.policy}:{},...e.intelligence?{intelligence:e.intelligence}:{}})}function ne(e){if(typeof document>"u")return e==="dark"?"dark":"light";let t=document.documentElement.dataset.theme;return t==="dark"||t==="light"?t:e==="dark"||e==="light"?e:typeof matchMedia=="function"&&matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function ce(e,t){let[n,a]=(0,o.useState)(()=>ne(t));return(0,o.useEffect)(()=>{if(!e||typeof document>"u")return;let r=()=>a(ne(t));r();let i=new MutationObserver(r);i.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]});let d=typeof matchMedia=="function"?matchMedia("(prefers-color-scheme: dark)"):null;return d?.addEventListener?.("change",r),()=>{i.disconnect(),d?.removeEventListener?.("change",r)}},[e,t]),n}var A=e=>e?e.getBoundingClientRect().height:0;function be(e,t,n){let a=(0,o.useRef)(n);a.current=n;let r=n!==void 0;(0,o.useLayoutEffect)(()=>{let i=e.current;if(!i||!r)return;let d=()=>{let l=[...i.children],b=l.find(v=>v.hasAttribute("data-graview-app-bar")),p=l.find(v=>v.hasAttribute("data-embed-content")),h=p?.querySelector("[data-embed-measure]")??null,c=l.find(v=>v.hasAttribute("data-graview-place-line"));return{strip:b,line:c,content:p,measure:h}},s=-1,f=()=>{let{strip:l,line:b,content:p,measure:h}=d(),c=Math.ceil(A(l)+A(b)+A(h||p));c!==s&&(s=c,a.current?.(c))};if(f(),typeof ResizeObserver>"u")return;let m=new ResizeObserver(f),E=()=>{m.disconnect();let{strip:l,line:b,content:p,measure:h}=d();for(let c of[i,l,b,p,h])c&&m.observe(c)};E();let g=new MutationObserver(()=>{E(),f()});return g.observe(i,{childList:!0}),()=>{m.disconnect(),g.disconnect()}},[e,t,r])}var ve=480,de=0;function Se(e){let{app:t,seed:n,scheme:a="auto",brand:r=t.brand,fonts:i=!0,height:d="100%",label:s}=e,f=(0,o.useRef)(null);q(f);let m=d==="viewport"?"100dvh":d,E=z(typeof m=="string"&&/vh\b/.test(m)),g=(0,o.useMemo)(()=>`graview-embed-${++de}`,[]),l=(0,o.useMemo)(()=>e.store??e.remote?.store??ie(t,n),[e.store,e.remote,t,n]),b=e.presence??e.remote?.presence,p=e.hostContext?.theme,h=ce(a==="auto"&&p===void 0,r?.scheme),c=a==="auto"?p??h:a,v=(0,o.useMemo)(()=>T(c,r,{scope:`.${g}`}),[c,r,g]);K(e.favicon?M(r):void 0),(0,o.useEffect)(()=>{if(!i||typeof document>"u")return;let w=ee(r);if(!w||document.querySelector(`link[href="${w}"]`))return;let y=document.createElement("link");y.rel="stylesheet",y.href=w,document.head.appendChild(y)},[r,i]);let C=(0,o.useRef)(void 0);(0,o.useLayoutEffect)(()=>{let w=f.current,y=C.current;if(C.current=s,!w||!s)return;let oe=S=>{let x=S.getAttribute("aria-label")??"",R=y&&y!==s?x.startsWith(`${y} \xB7 `)?x.slice(y.length+3):x===y?"":x:x;R===s&&(S.getAttribute("role")==="region"||S.tagName==="SECTION"&&!S.hasAttribute("role"))&&S.setAttribute("role","group");let H=R.startsWith(`${s} \xB7 `)||R===s?R:R?`${s} \xB7 ${R}`:s;H!==x&&S.setAttribute("aria-label",H)},B=()=>w.querySelectorAll("aside, nav, main, header, footer, section[aria-label]:not([role]), [role=region], [role=complementary], [role=navigation], [role=search]").forEach(S=>{S.hasAttribute("data-graview-named-by-lens")||oe(S)});B();let P=new MutationObserver(B);return P.observe(w,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["aria-label"]}),()=>P.disconnect()},[s]);let re=E?`${m}`.replace(/([\d.]+)[sdl]?vh\b/g,(w,y)=>`${+y*E/100}px`):m;return{rootRef:f,scope:g,css:v,scheme:c,store:l,presence:b,brand:r,auto:d==="auto",height:re}}function we({rootRef:e,board:t}){let n=(0,o.useCallback)(()=>e.current?.querySelector("[data-embed-content]")??e.current,[e]);return(0,u.jsx)(J,{board:t,anchor:n})}function Ee(e,t,n){return{brand:n,principal:e.principal,seats:e.seats,presence:t,people:e.people,memory:e.memory,presenceTtlMs:e.presenceTtlMs,onKeepLens:e.onKeepLens,ai:e.ai,files:e.files,app:e.app}}function xe({name:e,heading:t,faces:n,at:a,without:r,home:i,reach:d,standing:s,hostActions:f,keeping:m,onFind:E,switch:g}){let{brand:l,store:b,principal:p,views:h}=G();I();let c=r?.has("places")?[]:W({store:b,principal:p,views:h}),v=U();return(0,u.jsx)(_,{brand:l,name:e,description:l?.subtitle,heading:t,faces:n,home:i,places:c,current:a===null?null:D(c,a),reach:d,onFind:E,...g?{switch:g}:{},...n?{scenePlaces:v}:{},tools:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(X,{clean:s}),(0,u.jsx)(j,{...f?{hostActions:f}:{},...m?{keeping:m}:{}})]})})}var Re=e=>e===!1?2:Math.min(e+1,6);function Ae(e){let[t,n]=(0,o.useState)(e),a=(0,o.useRef)(void 0),r=(0,o.useRef)(void 0),i=(0,o.useMemo)(()=>({go:a,at:n,pending:r}),[]),d=(0,o.useCallback)(s=>{if(a.current){a.current(s);return}r.current=s,n(s)},[]);return{at:t,setAt:n,steering:i,steer:d}}function le(e){let t=typeof e=="object"&&e!==null?e.name:void 0;return{name:typeof t=="string"&&t.length>0?t:typeof e=="object"?"Error":typeof e}}var k=()=>typeof performance<"u"?performance.now():Date.now();function Fe(e,t){let n=(0,o.useRef)({onError:e,face:t});return n.current={onError:e,face:t},(0,o.useCallback)((a,r)=>n.current.onError?.(le(a),{module:r.module,face:n.current.face}),[])}function ke(e,t){let n=(0,o.useRef)(null);n.current===null&&(n.current=k());let a=(0,o.useRef)({onReady:e,face:t});a.current={onReady:e,face:t};let r=(0,o.useRef)(!1);return(0,o.useCallback)(i=>{r.current||(r.current=!0,a.current.onReady?.({ms:Math.max(0,k()-(n.current??k())),face:i}))},[])}var te=class extends o.Component{state={failed:!1};static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(t,n){console.error(`[graview] ${this.props.module} threw while rendering`,t,n.componentStack),this.props.report(t,{module:this.props.module})}render(){return this.state.failed?(0,u.jsxs)("div",{role:"alert","data-graview-face-error":this.props.module,...this.props.content?{"data-embed-content":""}:{},style:this.props.content?{flex:"1 1 auto",display:"grid",alignContent:"center",justifyItems:"center",gap:8,padding:24,background:"var(--graview-ground)",color:"var(--graview-ink)",fontSize:"0.9375rem"}:{display:"inline-flex",alignItems:"center",gap:6,fontSize:"0.8125rem",color:"var(--graview-ink-muted)"},children:[(0,u.jsx)("span",{children:this.props.content?"This part of the app could not draw.":"Could not draw."}),(0,u.jsx)("button",{type:"button",onClick:()=>this.setState({failed:!1}),style:{padding:"3px 11px",fontSize:"0.8125rem"},children:"Try again"})]}):this.props.children}};export{ge as a,ie as b,be as c,ve as d,Se as e,we as f,Ee as g,xe as h,Re as i,Ae as j,Fe as k,ke as l,te as m};
@@ -1 +0,0 @@
1
- import{a as I,c as x}from"./chunk.GCKSQ52O.js";import"./chunk.25OYH6MY.js";import"./chunk.OGL4PHTY.js";import"./chunk.ISRS7GOT.js";import"./chunk.DCIC3YHX.js";import"./chunk.AHDOKM4O.js";import"./chunk.6LJ66MB7.js";import{B as G,b,c as A,i as v,w,y as O}from"./chunk.NRRUGG22.js";import{Ra as S,Yb as W,va as k,wa as E}from"./chunk.MKNXV4TM.js";import"./chunk.MRK6QJV5.js";import"./chunk.AJZBJBMO.js";var F=(e,i)=>S(e,i).slice(1);function j(e,i){let l=e.split("/").filter(Boolean);return l.length===i.length&&l.every((s,h)=>s.startsWith(":")||s==="*"||s===i[h])}var $=["problems","search","map","places"];function R(e,i,l,s,h=[]){let{schema:r}=i,o=r.kinds,f=t=>{if(t.startsWith(w))return(t.slice(w.length).split("|")[0]??"").split("+").every(V=>o.includes(V));let y=O(t);return y!==null?o.includes(y):t.startsWith("edge:")||l.graph.getNode(t)!==void 0},[p="/",u]=e.path.split("?"),n=p.split("/").filter(Boolean),m=u?`?${u}`:"",d=n.length>0&&!$.includes(n[0])?o.find(t=>F(r,t)===n[0]):void 0,c=e.path;if(n[0]==="places"&&n.length===2)`/places/${n[1]}`!==W&&!s.some(t=>t.as===decodeURIComponent(n[1]))&&(c="/");else if(d){let t=n[1]===void 0?void 0:decodeURIComponent(n[1]);c=`/${F(r,d)}${t!==void 0&&l.graph.getNode(t)?.kind===d?`/${n[1]}`:""}${m}`}else n.length>0&&n.length<=2&&!$.includes(n[0])&&!h.some(t=>j(t.path,n))&&(c="/");let g=A(e.stop),P=g.within?.view,U=P!==void 0&&!s.some(t=>t.as===P),a=g;if(U){let{view:t,...y}=g.within??{};a={...a,within:y}}if(g.focusId&&!f(g.focusId)){let t=e.kind&&o.includes(e.kind)?G(e.kind):null;a={...v(a,t),zoom:!1}}return a={...a,relation:a.relation&&(o.includes(a.relation)||r.edgeKinds.includes(a.relation))?a.relation:null,expanded:a.expanded.filter(f),pins:Object.fromEntries(Object.entries(a.pins).filter(([t])=>f(t))),...a.selection?{selection:a.selection.filter(f)}:{}},{face:e.face,path:c,stop:b(a),...e.kind?{kind:e.kind}:{}}}function B(e,i,l){let s=e.at,h=e.pages?.routes()??[];if(e.routing!=="address"||typeof window>"u")return R(s,e.app,i,l,h);let{pathname:r,search:o,hash:f}=window.location,p=E(r,e.basePath),u=I({routing:"address",...e.basePath===void 0?{}:{basePath:e.basePath},face:s.face}),n=u==="pages",m={...s,face:u,...p===null?{}:n?{path:p+o}:{stop:x(e.basePath)??s.stop}},d=R(m,e.app,i,l,h),c=n?d.path===m.path?null:k(d.path,e.basePath===void 0?{}:{basePath:e.basePath}):d.stop===b(A(m.stop))?null:r+o+d.stop;return p!==null&&c!==null&&c!==r+o+f&&window.history.replaceState(window.history.state,"",c),d}export{R as settle,B as settleAt};
@@ -1 +0,0 @@
1
- import{c as a,l as o}from"./chunk.A73BXXE4.js";import"./chunk.N7HCALRK.js";import"./chunk.WHTNSETN.js";import"./chunk.WVUJXDXZ.js";import"./chunk.46KUPBQC.js";import"./chunk.N2WTNKEV.js";import"./chunk.SBHVVJY7.js";import"./chunk.GE5EAN36.js";import"./chunk.337WDTG3.js";import"./chunk.EYF6ONTA.js";import"./chunk.Q3HVA6L4.js";import"./chunk.AHDOKM4O.js";import"./chunk.6R4EI47C.js";import"./chunk.ZJDRD6PO.js";import"./chunk.SNBIZ3B6.js";import"./chunk.6LJ66MB7.js";import{ma as n}from"./chunk.NRRUGG22.js";import"./chunk.MKNXV4TM.js";import"./chunk.MRK6QJV5.js";import"./chunk.AJZBJBMO.js";var w=new WeakMap;function p(e,i){let t=w.get(e);t||w.set(e,t=new Map);let r=t.get(i);return r||t.set(i,r=o(a(e,n(e)),e,i)),r}export{p as frameworkViews};
@@ -1 +0,0 @@
1
- import"./chunk.WVUJXDXZ.js";import{i as S}from"./chunk.46KUPBQC.js";import"./chunk.N2WTNKEV.js";import"./chunk.SBHVVJY7.js";import"./chunk.GE5EAN36.js";import"./chunk.337WDTG3.js";import{Q as R}from"./chunk.MKNXV4TM.js";import"./chunk.AJZBJBMO.js";var p=(n,e,t)=>({untrusted:!0,authoredBy:t.say(e),text:n});function $(n,e){let t;for(let[s,r]of Object.entries(n)){if(typeof r!="string"||s==="id"||s==="kind")continue;let o=e.fieldBy(n.id,s);o&&(t??={...n},t[s]=p(r,o,e))}return t??n}function B(n,e,t){let s=r=>{if(Array.isArray(r))return r.map(s);if(r!==null&&typeof r=="object"&&"id"in r&&"label"in r){let o=r,a=t.recordBy(o.id);return a?{...o,label:p(o.label,a,t)}:o}if(typeof r=="string"){let o=t.recordBy(n);return o?p(r,o,t):r}return r};return Object.fromEntries(Object.entries(e).map(([r,o])=>[r,s(o)]))}function N(n,e){return n.map(t=>{let s=e.recordBy(t.id);return s?{...t,label:p(t.label,s,e)}:t})}function M(n,e){return{...n,nodes:n.nodes.map(t=>$(t,e))}}var O=n=>(JSON.stringify(n)??"null").length,A=n=>typeof n=="number"&&Number.isFinite(n)&&n>0?Math.floor(n):0;function f(n,e,t,s,r,o=""){let a=n-e-t;return a>0?`and ${a} more ${r}: call ${s} with ${o}offset ${e+t} for the next page.`:void 0}var _=({line:n,...e})=>e;function j(n){let e;for(let[t,s]of Object.entries(n))typeof s!="string"||s.length<=600||(e??={...n},e[t]=`${s.slice(0,600)}\u2026 (cut at ${600} of ${s.length} characters)`);return e??n}function E(n,e,t,s){let r=Math.min(t,Math.max(0,n.length-e)),o=n.slice(e,e+r),a=s(o);for(;r>1&&O(a)>8e3;)r=Math.max(1,Math.floor(r*.75)),o=n.slice(e,e+r),a=s(o);return{page:o,answer:a}}function V(n,e){let t=JSON.stringify(e)??"null";if(t.length<=8e3)return e;let s=`This answer was ${t.length} characters, more than the ${8e3} one read answers, so it is cut. Ask ${n} for less, or use search_graph and get_node to read one thing.`;for(let r=8e3-s.length-40;;){let o={cut:s,partial:t.slice(0,r)},a=O(o)-8e3;if(a<=0)return o;r=Math.max(0,r-a-8)}}function C(n,e){let{matched:t,...s}=e,r=n.hits.filter(o=>o.about==="node").length;return n.total>r?{...s,more:`and ${n.total-r} more records match: narrow the words, or add kind:<kind>.`}:s}function I(n,e,t){let s=n.graph.snapshot(),r=A(t.offset),o=s.nodes.length,{page:a,answer:h}=E(s.nodes,r,25,d=>{let c=new Set(d.map(l=>l.id)),u=f(o,r,d.length,"get_graph","nodes");return{...M({nodes:d.map(j),edges:s.edges.filter(l=>c.has(l.from))},e),total:o,...u?{more:u}:{}}});return{data:h,reads:a.map(d=>d.id)}}function P(n,e,t,s){let r=n.graph.getNode(t),o=A(s.offset),a=n.graph.outEdges(t),h=n.graph.inEdges(t),d=a.slice(o,o+20),c=h.slice(o,o+20),u=(i,y)=>{let k=n.graph.getNode(y);return{kind:i,id:y,label:k?R(n.schema.tryDefinition(k.kind),k):y}},l=S(n.schema,n.graph,r),m=n.violations().filter(i=>i.nodeIds.includes(t)),b=[f(a.length,o,d.length,"get_node","links out",`id "${t}" and `),f(h.length,o,c.length,"get_node","links in",`id "${t}" and `),m.length>20?`and ${m.length-20} more problems: get_violations lists them.`:void 0].filter(Boolean);return{data:{node:$(j(r),e),...Object.keys(l.values).length>0?{computed:B(t,l.values,e)}:{},...Object.keys(l.refused).length>0?{uncomputed:l.refused}:{},out:N(d.map(i=>u(i.kind,i.to)),e),in:N(c.map(i=>u(i.kind,i.from)),e),violations:m.slice(0,20).map(_),...b.length>0?{more:b.join(" ")}:{}},reads:[t,...d.map(i=>i.to),...c.map(i=>i.from)]}}function U(n,e){let t=A(e.offset),{page:s,answer:r}=E(n,t,20,o=>{let a=f(n.length,t,o.length,"get_violations","problems");return{violations:o.map(_),total:n.length,...a?{more:a}:{}}});return{data:r,reads:[...new Set(s.flatMap(o=>o.nodeIds))]}}export{I as graphRead,P as nodeRead,C as searchRead,U as violationsRead,V as withinReadChars};
@@ -1 +0,0 @@
1
- import{a as r,b as m,d as k,e as h}from"./chunk.ONDILMIX.js";import"./chunk.AJZBJBMO.js";var c="way-back",g='[data-testid="notices-toasts"]';function p(n){let o=document.activeElement;o!==null&&o!==document.body&&!o.closest(g)||(n??document).querySelector('[data-graview-app-bar] [data-testid="app-home"]')?.focus({preventScroll:!0})}function E(n,o,a,d,y){let s=y?.closest("[data-graview-embed]"),i,f=e=>{if(e!==void 0&&r(n,o)?.batch!==e)return!1;try{let t=k(n,o);return t&&a?.notify({kind:"toast",id:c,sentence:`Took back \u201C${t.intent}\u201D`}),t!==void 0}catch(t){return a?.notify({kind:"toast",id:c,tone:"warn",sentence:t instanceof Error?t.message:String(t)}),!0}},u=()=>{let e=m(n,o,d);if(d=n.batches().length,e){let t=i=e.batch;a?.notify({kind:"toast",id:c,sentence:e.intent,timeout:1e4,action:{label:"Take back",onSelect:()=>(p(s),f(t))}})}else i&&r(n,o)?.batch!==i&&(i=void 0,a?.dismiss(c))},l=e=>{h(e)&&(!s||s.contains(e.target))&&f()&&e.preventDefault()};u();let b=n.subscribe(u);return document.addEventListener("keydown",l),(e=!1)=>{b(),document.removeEventListener("keydown",l),e&&i&&a?.dismiss(c)}}export{E as sceneWay};
@@ -1 +0,0 @@
1
- import{a as ee}from"./chunk.G4JJXA63.js";import{b as nt}from"./chunk.2VUG6EAN.js";import{d as tt}from"./chunk.PN2H6X7O.js";import"./chunk.BCBH6WJF.js";import"./chunk.SNBIZ3B6.js";import{$ as F,Ha as V,Na as fe,Q as Ye,Ra as Se,Sa as Xe,W as ze,Wa as G,Y as Je,_ as Ae,_a as Ze,aa as qe,cc as et,la as Ve,ma as Qe}from"./chunk.MKNXV4TM.js";import"./chunk.AJZBJBMO.js";var vt="Nothing by that name here.",$=o=>o.normalize("NFD").replace(/\p{M}+/gu,"").toLowerCase().replace(/[’']/g,"'").replace(/[^\p{L}\p{N}' ]+/gu," ").replace(/\s+/g," ").trim(),At=/^(?:(?:can you |could you |please )?(?:go|take me|bring me|head|jump|navigate|switch|get me)(?: back)? to|(?:please )?(?:open|show(?: me)?|bring up|let me see|view)) (.+)$/,St=/^(?:(?:can you |could you |please )?tell me (?:about|of)|what(?: is|'s| are) (?:in |on )?|describe|explain|who(?: is|'s)) (.+)$/,Nt=/^(?:what(?: is|'s| am i looking at| do i see)(?: (?:here|this|on (?:this|the) (?:page|screen)|in view|this place|this page))?|where am i|describe (?:this|here|this place|this page)|tell me about (?:this|here|this place|this page))$/,st=new Set(["here","this","this place","this page","on this page","on the page","on this screen","in view"]),Ot=/^(?:date|day|when|on|at|the date|the day)$/,Ct=/^(?:what(?: is|'s) (?:wrong|broken|the (?:problem|matter|trouble))|what needs (?:fixing|attention|doing)|any (?:problems|issues|trouble)|(?:show(?: me)? |go to |open )?(?:the )?(?:problems|issues|trouble|standing|what's wrong)|is (?:anything|something) (?:wrong|broken)|are there (?:any )?(?:problems|issues))(?: (?:with|about|on|in) (.+))?$/,Y=o=>o.replace(/^(?:the|a|an|my|our) /,""),te=new Set(["the","a","an","my","our","all","any","of","that","which","who","are","is","be","what","whats","what's","with","me","show","list","every","there","do","i","have","we","due","for","please","were","was","by","from","in","on"]),ct=864e5,se=o=>Date.UTC(Number(o.slice(0,4)),Number(o.slice(5,7))-1,Number(o.slice(8,10))),Me=o=>new Date(o).toISOString().slice(0,10),C=(o,i)=>Me(se(o)+i*ct),jt=["sunday","monday","tuesday","wednesday","thursday","friday","saturday"],Mt=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],ut=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],Dt="(monday|tuesday|tues|wednesday|thursday|thurs|friday|saturday|sunday)",ot="(january|february|march|april|may|june|july|august|september|october|november|december|jan|feb|mar|apr|jun|jul|aug|sept|sep|oct|nov|dec)",rt="(\\d{1,2})(?:st|nd|rd|th)?",Wt=o=>jt.findIndex(i=>i.startsWith(o.slice(0,3))),it=o=>ut.findIndex(i=>o.startsWith(i.toLowerCase()));function xt(o,i){let p=new Date(se(o)),u=o.slice(0,4)===i.slice(0,4)?"":` ${o.slice(0,4)}`;return`${Mt[p.getUTCDay()]} ${p.getUTCDate()} ${ut[p.getUTCMonth()]}${u}`}function Ne(o,i,p){if(o<0||i<1||i>31)return;let u=Number(p.slice(0,4)),c=k=>{let j=Date.UTC(k,o,i);return new Date(j).getUTCMonth()===o?Me(j):void 0},y=c(u);if(y)return se(y)<se(p)-183*ct?c(u+1):y}function Oe(o,i,p){let u=new Date(se(i)).getUTCDay(),c=f=>{let N=(u-p+7)%7,w=C(i,-N+f*7);return{from:w,to:C(w,6)}},y=()=>{let f=`${i.slice(0,8)}01`,N=new Date(Date.UTC(Number(i.slice(0,4)),Number(i.slice(5,7)),1));return{from:f,to:C(Me(N.getTime()),-1)}},k=f=>f?{from:f,to:f,day:xt(f,i)}:void 0,j=(f,N)=>{let w=Wt(N);return k(f==="this"||f==="next"?C(c(f==="next"?1:0).from,(w-p+7)%7):f==="last"?C(i,-((u-w+6)%7+1)):C(i,(w-u+7)%7))},z=f=>{let N=C(i,u===0?-1:6-u);return{from:C(N,f*7),to:C(N,f*7+1)}},U="\\b(?:(?:due |for |on |by )(?:the )?)?",P=[[/\b(?:overdue|past due|late)\b/,()=>({overdue:!0,to:C(i,-1)})],[/\b(?:due |for |on )?today\b/,()=>({from:i,to:i})],[/\b(?:due |for |on )?tomorrow\b/,()=>k(C(i,1))],[/\b(?:due |for |on )?yesterday\b/,()=>k(C(i,-1))],[/\b(?:due |for |on )?this week\b/,()=>c(0)],[/\b(?:due |for |on )?next week\b/,()=>c(1)],[/\b(?:due |for |on )?(?:last|previous) week\b/,()=>c(-1)],[/\b(?:due |for |on )?next weekend\b/,()=>z(1)],[/\b(?:due |for |on )?(?:this |the )?weekend\b/,()=>z(0)],[/\b(?:due |for |on )?this month\b/,()=>y()],[new RegExp(`${U}(\\d{4}) (\\d{2}) (\\d{2})\\b`),f=>k(Ne(Number(f[2])-1,Number(f[3]),`${f[1]}-01-01`))],[new RegExp(`${U}${rt} (?:of )?${ot}\\b`),f=>k(Ne(it(f[2]),Number(f[1]),i))],[new RegExp(`${U}${ot} (?:the )?${rt}\\b`),f=>k(Ne(it(f[1]),Number(f[2]),i))],[new RegExp(`${U}(?:(this|next|last|coming) )?${Dt}\\b`),f=>j(f[1],f[2])]];for(let[f,N]of P){let w=o.match(f);if(!w)continue;let S=N(w);if(S)return{ask:{words:w[0],...S},rest:o.replace(w[0]," ").replace(/\s+/g," ").trim()}}}function ft(o,i,p={}){let u=p.principal??{kind:"human"},c=o.seenBy(u),y=c.schema,k=p.today??o.today?.()??new Date().toISOString().slice(0,10),j=p.weekStartsOn??1,z=o.kindsKeptFrom(u),U=o.modules.disabledKinds,P=y.kinds.filter(e=>!z.has(e)&&!U.has(e)),f=new Set(P),N=(p.places??[]).filter(e=>e.kind===null||f.has(e.kind)),w=c.graph,S=$(i).replace(/[?.!]+$/,"").trim();if(S.length===0)return{unresolved:!0};let D=e=>y.tryDefinition(e),T=e=>Ye(D(e.kind),e),H=e=>ze(y,e),oe=e=>N.find(t=>t.kind===e&&t.address===Se(y,e))?.address??Se(y,e),ge=e=>Xe(y,e.kind,e.id),De=e=>({to:"record",id:e.id,kind:e.kind,label:T(e),address:ge(e),said:`Went to ${T(e)}.`}),We=e=>{let t=`Went to ${e.title}.`;return e.kind===null?{to:"place",slug:e.slug,title:e.title,address:e.address,...e.slug==="overview"?{face:"scene"}:{},said:t}:e.lens||e.address.startsWith("/places/")?{to:"picture",kind:e.kind,as:e.slug,title:e.title,address:e.address,said:t}:{to:"kind",kind:e.kind,title:e.title,address:e.address,said:t}},xe=()=>({unresolved:!0,say:vt}),re=e=>{let t=D(e.kind),s=qe(e,t,{limit:3}).map(r=>r.alone.startsWith(r.label)?r.alone:`${r.label.toLowerCase()} ${r.alone}`).join(", "),n=c.violations().filter(r=>r.nodeIds.includes(e.id));return[`${T(e)} \u2014 ${Ae(F(t,e.kind))}${s?` (${s})`:""}.`,n.length>0?`Trouble: ${n.map(r=>r.message).join("; ")}.`:""].filter(Boolean).join(" ")},ie=e=>{let t=new Set([G(e),G(Y(e))]);for(let n of[" page"," view"," lens"," place"," picture"," list"])e.endsWith(n)&&(t.add(G(e.slice(0,-n.length))),t.add(G(Y(e.slice(0,-n.length)))));t.delete("");let s=n=>t.has(G(n.title))||t.has(G(Y($(n.title))))||t.has(G(n.slug));return N.find(n=>n.kind!==null&&n.address.startsWith("/places/")&&s(n))??N.find(s)},pe=e=>{let t=Ze(o,e,{principal:u,today:k,limit:6,...p.selection?{from:p.selection}:{}}),s=t.hits.filter(r=>r.about==="node"&&f.has(r.kind)&&w.getNode(r.id)!==void 0),n=s.filter(r=>r.why.field==="label"&&r.why.strength==="exact");return n.length===1?{one:w.getNode(n[0].id),picks:s}:n.length>1?{picks:n}:s.length===1&&t.total===1?{one:w.getNode(s[0].id),picks:s}:{picks:s}},Ee=e=>{let t=e.map(s=>`${s.label} (${F(D(s.kind),s.kind)})`);return`${e.length===1?"One thing matches":`${e.length} things match`}: ${t.join("; ")}.`},Re=(e,t)=>{if(st.has(e))return Le();let s=t?pe(Y(e)||e):void 0,n=s?.one&&$(T(s.one))===$(Y(e)||e)?void 0:ie(e);if(n){let l=We(n);return{about:"place",say:t?`${l.said} ${ye(n)}`:l.said,moves:[l],subject:n.slug}}let r=pe(Y(e)||e);if(r.one){let l=De(r.one);return{about:t?"describe":"record",say:t?`${l.said} ${re(r.one)}`:l.said,moves:[l],subject:r.one.id}}if(r.picks.length>0)return{about:"picks",say:Ee(r.picks),moves:[],picks:r.picks};let h=de(e);if(h)return h;let d=Pe(e);if(d){if(d.rest.split(" ").every(l=>l===""||te.has(l))){let l=H(d.kind),v={to:"kind",kind:d.kind,title:l,address:oe(d.kind),said:`Went to the ${l.toLowerCase()}.`};return{about:"kind",say:v.said,moves:[v]}}return{unresolved:!0}}return xe()},ye=e=>{if(e.kind===null){let h=P.map(l=>({kind:l,count:w.nodesOfKind(l).length})).filter(l=>l.count>0).map(l=>`${l.count} ${(l.count===1?F(D(l.kind),l.kind):H(l.kind)).toLowerCase()}`),d=c.violations().length;return[h.length>0?`It holds ${he(h)}.`:"It holds nothing yet.",d>0?`${d===1?"One problem":`${d} problems`} to see to.`:""].filter(Boolean).join(" ")}let t=w.nodesOfKind(e.kind).length,s=H(e.kind).toLowerCase(),n=new Set(c.violations().flatMap(h=>h.nodeIds)),r=w.nodesOfKind(e.kind).filter(h=>n.has(h.id)).length;return[e.lens?`It draws the ${s} as ${Ae(e.lens)}${t>0?` \u2014 ${t} of them`:""}.`:`${t===0?"No":t} ${t===1?F(D(e.kind),e.kind):s} ${t===1?"is":"are"} here.`,r>0?`${r} ${r===1?"has":"have"} a problem.`:""].filter(Boolean).join(" ")},Le=()=>{let e=(p.selection??[]).map(s=>w.getNode(s)).find(s=>s!==void 0);if(e)return{about:"here",say:re(e),moves:[],subject:e.id};let t=N.find(s=>s.slug===p.place)??N.find(s=>s.slug==="home");return t?{about:"here",say:`${t.title}. ${ye(t)}`,moves:[],subject:t.slug}:{about:"here",say:ye({slug:"home",title:"Home",kind:null,cardinality:"many",address:"/",stop:"#"}),moves:[]}},Pe=e=>{let t=P.flatMap(s=>[H(s),F(D(s),s),s].map(n=>({kind:s,name:$(n)}))).filter(s=>s.name.length>0).sort((s,n)=>n.name.length-s.name.length);for(let{kind:s,name:n}of t)if(!(` ${e} `.indexOf(` ${n} `)<0))return{kind:s,rest:` ${e} `.replace(` ${n} `," ").replace(/\s+/g," ").trim()}},ae=(e,t)=>{let s=V(y,e).filters.filter(d=>d.about==="field"&&d.type==="date");if(s.length===0)return;let n=s.find(d=>t.some(l=>$(d.key)===l||$(d.label)===l));if(n)return n;let r=D(e)?.fieldRoles??{};for(let d of["due","deadline","date","when","start","end"]){let l=r[d],v=l?s.find(M=>M.key===l):void 0;if(v)return v}return s.find(d=>["due","deadline","date","when","on","at"].includes(d.key.toLowerCase()))??(s.length===1?s[0]:void 0)},Te=e=>{let t=D(e),s=V(y,e).filters;if(t?.lifecycle)return{conditions:[{key:"is",value:"current"}],holds:d=>fe(be,d,{key:"is",value:"current"})};let r=s.find(d=>d.about==="field"&&d.type==="boolean"&&ne.has($(d.key)));if(r)return{conditions:[{key:r.key,value:"false"}],holds:d=>d[r.key]!==!0};let h=s.find(d=>d.about==="field"&&d.type==="choice"&&(d.options??[]).some(l=>ne.has($(l))));if(h){let d=new Set((h.options??[]).filter(v=>ne.has($(v)))),l=(h.options??[]).filter(v=>!d.has(v));return l.length===1?{conditions:[{key:h.key,value:l[0]}],holds:v=>v[h.key]===l[0]}:"unsayable"}return{conditions:[],holds:()=>!0}},He=(e,t)=>{let s=e.words.startsWith("due")||$(t.key)==="due",n=Ot.test($(t.label));if(e.day)return s?`due ${e.day}`:n?`on ${e.day}`:`${t.label.toLowerCase()} on ${e.day}`;let r=e.words.replace(/^(?:due|for|on|by) (?:the )?/,"");return s?`due ${r}`:n?r:`${t.label.toLowerCase()} ${r}`},me=new Set(c.violations().flatMap(e=>e.nodeIds)),be={schema:y,graph:c.graph,flagged:me,today:k},de=e=>{let t=Oe(e,k,j),s=Pe(t?.rest??e),n=s?.kind,r=(s?.rest??t?.rest??e).split(" ").filter(Boolean);if(!n&&t){let g=e.split(" "),m=P.filter(L=>ae(L,g)!==void 0),R=m.filter(L=>{let b=ae(L,g);return g.some(O=>$(b.key)===O||$(b.label)===O)}),B=m.length===1?m:R;if(B.length!==1)return;n=B[0]}if(!n)return;let h=V(y,n).filters,d=[],l=[],v=[],M=[],q=!1,le=[];for(let g=0;g<r.length;g++){let m=r[g],R=g>0&&(r[g-1]==="not"||r[g-1]==="un"),B=h.find(b=>b.about==="field"&&b.type==="choice"&&(b.options??[]).some(O=>$(O)===m));if(B&&!R){let b=(B.options??[]).find(O=>$(O)===m);d.push({key:B.key,value:b}),l.push(b);continue}let L=h.find(b=>b.about==="field"&&b.type==="boolean"&&[$(b.key),$(b.label)].some(O=>O===m||O===m.replace(/^un/,"")));if(L){let b=!R&&!(m.startsWith("un")&&!$(L.key).startsWith("un"));d.push({key:L.key,value:String(b)}),l.push(b?m:`not ${m.replace(/^un/,"")}`);continue}if(Lt.has(m)&&!R){let b=Te(n);b==="unsayable"?(q=!0,M.push(O=>!lt(y,O))):(d.push(...b.conditions),M.push(b.holds)),l.push(m);continue}m==="not"||m==="un"||t&&h.some(b=>b.type==="date"&&($(b.key)===m||$(b.label)===m))||le.push(m)}if(r=le,r.some(g=>!te.has(g))||!t&&d.length===0&&M.length===0)return;let I=H(n).toLowerCase(),Q=H(n);if(t){let g=ae(n,e.split(" "));if(!g){let m={to:"kind",kind:n,title:Q,address:oe(n),said:`Went to the ${I}.`};return{about:"kind",say:`${ee(Q)} carry no date, so I can't tell which are ${/^(?:due|for|on|overdue|past due|late)\b/.test(t.ask.words)?t.ask.words:`due ${t.ask.words}`}. ${m.said}`,moves:[m]}}if(t.ask.from&&d.push({key:g.key,value:`after:${C(t.ask.from,-1)}`}),t.ask.to&&d.push({key:g.key,value:`before:${C(t.ask.to,1)}`}),t.ask.overdue){let m=Te(n);m==="unsayable"?(q=!0,M.push(R=>!lt(y,R))):(d.push(...m.conditions),M.push(m.holds))}t.ask.overdue?l.push("overdue"):v.push(He(t.ask,g))}let E=w.nodesOfKind(n).filter(g=>d.every(m=>fe(be,g,m))&&M.every(m=>m(g))),K=[...l,...v].join(" and "),J=[...l,I,...v].join(" "),W=E.slice(0,6).map(g=>({about:"node",id:g.id,kind:n,label:T(g),why:{field:d[0]?.key??"label",reading:d[0]?.key??"Name",fragment:K,strength:"field"},current:!0,flagged:me.has(g.id),address:ge(g)})),X=E.length===0?`No ${I} are ${K}.`:`${E.length===1?`One ${F(D(n),n)} is`:`${E.length} ${I} are`} ${K}: ${he(E.slice(0,6).map(T))}${E.length>6?`, and ${E.length-6} more`:""}.`;if(q)return{about:"kind",say:X,moves:[],picks:W,offer:{draft:J,label:"Show as a view"}};let Z=d.map(g=>`${g.key}:${g.value}`).join(","),we=`${oe(n)}?${new URLSearchParams({filter:Z}).toString()}`,_={to:"kind",kind:n,title:ee(J),filter:Z,address:we,said:`Went to the ${J}.`};return{about:"kind",say:`${_.said} ${X}`,moves:[_],picks:W}},Ie=e=>D(e)?.figure==="person"?!0:[e,F(D(e),e),H(e)].some(s=>$(s).split(" ").some(n=>Et.has(n))),gt=e=>{let t=[],s=n=>D(n)?.edges??{};for(let[n,r]of Object.entries(s(e)))for(let h of r.to??[])f.has(h)&&t.push({key:n,direction:"out",far:h,words:dt(`${r.description??""} ${n}`)});for(let n of P)for(let[r,h]of Object.entries(s(n)))(h.to??[]).includes(e)&&t.push({key:r,direction:"in",far:n,words:dt(`${h.inverse??""} ${r}`)});return t},pt=e=>{let t=e.match(/^(who|which|what)\b/)?.[1];if(!t)return;let s=Oe(e,k,j);if(!s||s.ask.overdue)return;let n=s.rest.split(" ").filter(Boolean),r=P.flatMap(a=>[H(a),F(D(a),a),a].map(A=>({kind:a,name:$(A)}))).filter(a=>a.name.length>0).sort((a,A)=>A.name.length-a.name.length),h=` ${n.join(" ")} `,d=[];for(let{kind:a,name:A}of r)h.includes(` ${A} `)&&(h=h.replace(` ${A} `," "),d.includes(a)||d.push(a));let l=h.match(/\b(?:is|are|was|were)\b|'s\b/)?.[0],v=h.replace(/'s\b/g," ").split(" ").filter(a=>a.length>0&&!te.has(a)&&!Ce.has(a)),M=t==="who"?d.find(Ie):d[0];if(!M&&t!=="who")return;let q=d.find(a=>a!==M),le=v.flatMap(a=>[je(a),...at.has(je(a))?[...at]:[]]),I=P.filter(a=>q?a===q:a!==M).flatMap(a=>{let A=ae(a,e.split(" "))??V(y,a).filters.find(x=>x.about==="field"&&x.type==="date");return A?gt(a).filter(x=>(M?x.far===M:Ie(x.far))&&x.far!==a).map(x=>({kind:a,field:A,relation:x,said:v.length===0||le.some(ve=>x.words.some(wt=>Rt(wt,ve)))})):[]}).filter(a=>a.said);if(I.length===0)return;let Q=I.filter(a=>n.some(A=>$(a.field.key)===A||$(a.field.label)===A)),E=I.length===1?I[0]:Q.length===1?Q[0]:void 0;if(!E)return;let{kind:K,field:J,relation:W}=E,X=[...s.ask.from?[{key:J.key,value:`after:${C(s.ask.from,-1)}`}]:[],...s.ask.to?[{key:J.key,value:`before:${C(s.ask.to,1)}`}]:[]],Z=w.nodesOfKind(K).filter(a=>X.every(A=>fe(be,a,A))),we=a=>(W.direction==="out"?c.graph.out(a.id,W.key):c.graph.in(a.id,W.key)).filter(A=>A.kind===W.far&&f.has(W.far)),_=[],g=[];for(let a of Z){let A=we(a);A.length===0&&g.push(a);for(let x of A)_.some(ve=>ve.id===x.id)||_.push(x)}let m=He(s.ask,J),R=s.ask.day?`On ${s.ask.day}`:ee(s.ask.words.replace(/^(?:due|for|on|by) (?:the )?/,"")),B=H(K).toLowerCase(),L=X.map(a=>`${a.key}:${a.value}`).join(","),b=`${B} ${m}`,O={to:"kind",kind:K,title:ee(b),filter:L,address:`${oe(K)}?${new URLSearchParams({filter:L}).toString()}`,said:`Went to the ${b}.`};if(Z.length===0)return{about:"related",say:`No ${b}. ${O.said}`,moves:[O]};let ce=v.join(" "),yt=l==="was"||l==="were",Ge=a=>yt?a===1?"was":"were":a===1?"is":"are",ue=_.map(T),mt=ue.length>8?[...ue.slice(0,8),`${ue.length-8} more`]:ue,bt=_.length===0?`${R}: nobody ${Ge(1)}${ce?` ${ce}`:""}.`:`${R}: ${he(mt)}${ce?` ${Ge(_.length)} ${ce}`:""}.`,kt=t==="who"&&g.length>0?`${he(g.slice(0,4).map(T))}${g.length>4?` and ${g.length-4} more`:""} ${g.length===1?"has":"have"} nobody.`:"",$t=_.slice(0,8).map(a=>({about:"node",id:a.id,kind:a.kind,label:T(a),why:{field:W.key,reading:Je(y,W.direction==="out"?K:W.far,W.key,W.direction==="out"?"out":"in"),fragment:m,strength:"field"},current:!0,flagged:me.has(a.id),address:ge(a)}));return{about:"related",say:[bt,kt,O.said].filter(Boolean).join(" "),moves:[O],picks:$t}},Ke=S.match(Ct);if(Ke){let e=Ke[1];if(e&&!st.has(e)&&!/^(?:it|this|that)$/.test(e)){let n=ie(e),r=n?void 0:pe(Y(e)||e);if(r?.one){let h=De(r.one);return{about:"describe",say:`${h.said} ${re(r.one)}`,moves:[h],subject:r.one.id}}if(!n)return r&&r.picks.length>0?{about:"picks",say:Ee(r.picks),moves:[],picks:r.picks}:xe()}if(e&&/^(?:it|this|that)$|^(?:here|this place|this page)$/.test(e)){let n=(p.selection??[]).map(r=>w.getNode(r)).find(r=>r!==void 0);if(n)return{about:"describe",say:re(n),moves:[],subject:n.id}}let t=c.violations();if(t.length===0)return{about:"problems",say:"Nothing is wrong \u2014 every rule holds.",moves:[]};let s={to:"problems",address:"/problems",said:"Went to the problems."};return{about:"problems",say:`${s.said} ${Qe(t)}: ${t.slice(0,4).map(n=>n.message).join("; ")}${t.length>4?"\u2026":"."}`,moves:[s]}}if(Nt.test(S))return Le();let _e=pt(S);if(_e)return _e;let ke=Oe(S,k,j);if(ke&&!ie(Y(ke.ask.words))&&ke.rest.replace(/'s\b/g,"").split(" ").every(e=>e===""||te.has(e)||Ce.has(e))){let e=de(S);if(e)return e}if(/^open /.test(S)){let e=de(S);if(e)return e}let Fe=S.match(At)??S.match(/^(?:go|take me|head|get me)(?: back)? (home)$/);if(Fe)return Re(Fe[1].trim(),!1);let Ue=S.match(St);if(Ue){let e=Re(Ue[1].trim(),!0);return"unresolved"in e&&e.unresolved&&!/^tell me|^describe/.test(S)?{unresolved:!0}:e}let $e=ie(S);if($e){let e=We($e);return{about:"place",say:e.said,moves:[e],subject:$e.slug}}let Be=de(S);return Be||{unresolved:!0}}var Ce=new Set(["who","whom","whose","which","what","whats","what's","who's"]),Et=new Set(["person","people","user","users","member","members","volunteer","volunteers","gardener","gardeners","player","players","staff","worker","workers","employee","employees","owner","owners","assignee","assignees","helper","helpers","student","students","teacher","teachers","customer","customers","client","clients","contact","contacts","author","authors"]),at=new Set(["work","cover","staff","assign","do","run","schedul","roster","book","duty","serv","help"]);function je(o){let i=o.toLowerCase().replace(/'s$/,"");for(let p of["ing","ed","es","s"])if(i.length>p.length+2&&i.endsWith(p)){let u=i.slice(0,-p.length);return u.length>3&&u[u.length-1]===u[u.length-2]?u.slice(0,-1):u}return i}function dt(o){return o.toLowerCase().split(/[^a-z']+/).filter(i=>i.length>1&&!te.has(i)&&!Ce.has(i)&&!["it","they","them","their","its","this","here","to","at"].includes(i)).map(je)}var Rt=(o,i)=>o===i||o.length>=4&&i.length>=4&&(o.startsWith(i)||i.startsWith(o)),ne=new Set(["done","finished","complete","completed","closed","resolved","agreed","canceled","archived","shipped","delivered"]),Lt=new Set(["open","unfinished","outstanding","pending","remaining","undone","incomplete"]);function lt(o,i){return V(o,i.kind).filters.some(u=>u.about==="field"&&(u.type==="boolean"&&ne.has(u.key.toLowerCase())&&i[u.key]===!0||u.type==="choice"&&typeof i[u.key]=="string"&&ne.has(String(i[u.key]).toLowerCase())))}function he(o){return o.length<=1?o[0]??"":`${o.slice(0,-1).join(", ")} and ${o[o.length-1]}`}function _t(o,i,p={}){let u=p.scene!==void 0?{...p.pages,scene:p.scene}:p.pages;return[...et(o,i,u?{pages:u}:{})].map(({first:c,hidden:y,lens:k,...j})=>j)}function ht(o,i){return{...o.principal?{principal:o.principal}:{},...o.places?{places:o.places}:{},...o.selection?{selection:o.selection}:{},...o.place?{place:o.place}:{},...i??o.today?{today:i??o.today}:{},...o.weekStartsOn!==void 0?{weekStartsOn:o.weekStartsOn}:{}}}function Ft(o,i,p,u){let c=ft(o,i,ht(p,u));if(c.unresolved)return c.say?{reply:{say:c.say,proposals:[],grounded:!0}}:{};if(c.about==="picks")return{};let y=c.moves.length>0?{moves:c.moves}:{},k=c.subject?o.graph.getNode(c.subject):void 0;if(c.about==="problems")return{...y,problems:!0};if(k&&(c.about==="describe"||c.about==="here"))return{...y,told:k.id};let j=k?tt(o,nt(Ve(o.violations(),[k.id])).slice(0,3)):[];return{reply:{say:c.say,proposals:j,grounded:!0,...y,...c.picks&&c.picks.length>0?{picks:c.picks}:{},...c.offer?{offer:c.offer}:{}}}}function Ut(o,i,p={}){let u=ht(p),c=[];for(let y of i){let k=typeof y=="string"?y:typeof y=="object"&&y!==null&&typeof y.to=="string"?y.to:void 0;if(!k||k.trim().length===0)continue;let j=ft(o,/^(?:go|take me|open|show)\b/i.test(k.trim())?k:`go to ${k}`,u);if("moves"in j)for(let z of j.moves)c.some(U=>U.address===z.address)||c.push(z)}return c}export{vt as NOTHING_BY_THAT_NAME,ht as askContextOf,Ft as goingFrom,Ut as movesFromNames,_t as placesFromViews,ft as resolveAsk};
@@ -1 +0,0 @@
1
- import{b as a}from"./chunk.SNBIZ3B6.js";import{k as i}from"./chunk.NRRUGG22.js";import{Ja as o}from"./chunk.MKNXV4TM.js";function p(r){let t=r.within??{};return o({...t.sort?{sort:t.sort}:{},...t.filter?{filter:t.filter}:{},...t.group?{group:t.group}:{},...t.q?{q:t.q}:{}})}function s(r,t){let m=a(t),e=r;for(let n of["sort","filter","group","q"])e=i(e,n,m[n]??null);return e}export{p as a,s as b};