graview 0.1.36 → 0.1.37

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 (169) hide show
  1. package/dist/preview/{chunk.T47DLH5Z.js → chunk.24E4R4ZH.js} +1 -1
  2. package/dist/preview/{chunk.DSP62QYK.js → chunk.2JF254FO.js} +1 -1
  3. package/dist/preview/chunk.2TDB4D6Y.js +1 -0
  4. package/dist/preview/{chunk.YNE5QR7Q.js → chunk.3IVVXVG7.js} +1 -1
  5. package/dist/preview/{chunk.WJ2TWU2I.js → chunk.3KJQXYCA.js} +1 -1
  6. package/dist/preview/chunk.3V2M3S4U.js +1 -0
  7. package/dist/preview/{chunk.WHTQHU3M.js → chunk.4NCXMVPY.js} +1 -1
  8. package/dist/preview/chunk.57XTDW57.js +1 -0
  9. package/dist/preview/chunk.5CLFTXP3.js +1 -0
  10. package/dist/preview/chunk.5EXYDBAL.js +88 -0
  11. package/dist/preview/chunk.5JPRRV47.js +1 -0
  12. package/dist/preview/{chunk.ZVMIHXVK.js → chunk.67PVRVAC.js} +1 -1
  13. package/dist/preview/{chunk.FERBNBDE.js → chunk.6DYZBDWT.js} +1 -1
  14. package/dist/preview/chunk.6SK2K72G.js +1 -0
  15. package/dist/preview/{chunk.TGEF6TMM.js → chunk.74DXEKUV.js} +1 -1
  16. package/dist/preview/chunk.76QUEWYD.js +1 -0
  17. package/dist/preview/{chunk.QDHUDLJB.js → chunk.7MMNMZLF.js} +1 -1
  18. package/dist/preview/chunk.7OLVQ2FZ.js +1 -0
  19. package/dist/preview/{chunk.MXJS67W4.js → chunk.7UQOXYJX.js} +1 -1
  20. package/dist/preview/{chunk.ER5ILWKY.js → chunk.AHC4EXLW.js} +2 -2
  21. package/dist/preview/{chunk.ZWZ5SEXT.js → chunk.AWRS6TUN.js} +1 -1
  22. package/dist/preview/{chunk.H4T56OXM.js → chunk.AZ333RB3.js} +1 -1
  23. package/dist/preview/{chunk.HZPTBPJY.js → chunk.BA3REPV5.js} +1 -1
  24. package/dist/preview/{chunk.5PU3RWYY.js → chunk.BRBY5WJT.js} +2 -2
  25. package/dist/preview/{chunk.6KMXLUOS.js → chunk.BXWO6ILK.js} +1 -1
  26. package/dist/preview/chunk.CGQLE7JW.js +1 -0
  27. package/dist/preview/chunk.CV4CBHFT.js +1 -0
  28. package/dist/preview/chunk.CYPTJNES.js +1 -0
  29. package/dist/preview/{chunk.ACXA55GW.js → chunk.D2ILIAND.js} +1 -1
  30. package/dist/preview/chunk.DLCFCMKX.js +1 -0
  31. package/dist/preview/chunk.DMUUYZ37.js +1 -0
  32. package/dist/preview/chunk.DNNL7F3P.js +25 -0
  33. package/dist/preview/chunk.EHT4HBH5.js +35 -0
  34. package/dist/preview/chunk.EKUAI5YL.js +1 -0
  35. package/dist/preview/chunk.ELY2RMGE.js +19 -0
  36. package/dist/preview/{chunk.6ZZZBDEG.js → chunk.ENEOGGFM.js} +1 -1
  37. package/dist/preview/chunk.ENJKCSNX.js +1 -0
  38. package/dist/preview/chunk.FEPYKPZE.js +1 -0
  39. package/dist/preview/{chunk.ET76FISZ.js → chunk.FFW6XWHB.js} +1 -1
  40. package/dist/preview/{chunk.ZEW2OOZ5.js → chunk.FGYCYLUS.js} +1 -1
  41. package/dist/preview/{chunk.ITXIFDQ7.js → chunk.G7S7GLDK.js} +1 -1
  42. package/dist/preview/chunk.GMZAQGH7.js +1 -0
  43. package/dist/preview/chunk.GXPBRYSR.js +1 -0
  44. package/dist/preview/{chunk.42WJ6VJZ.js → chunk.H4LFJPDV.js} +1 -1
  45. package/dist/preview/chunk.HBBVVALN.js +5 -0
  46. package/dist/preview/{chunk.NWYOLGQ3.js → chunk.HCK4Y6C5.js} +1 -1
  47. package/dist/preview/chunk.HSRGYZOR.js +1 -0
  48. package/dist/preview/chunk.HYAKRLPT.js +4 -0
  49. package/dist/preview/chunk.IHBIRAC4.js +2 -0
  50. package/dist/preview/chunk.IWK5QL6P.js +1 -0
  51. package/dist/preview/{chunk.WQBDTLPZ.js → chunk.J2CR4RRH.js} +1 -1
  52. package/dist/preview/chunk.J2HQEUYA.js +1 -0
  53. package/dist/preview/{chunk.R45BF6JV.js → chunk.JBRXGPPM.js} +1 -1
  54. package/dist/preview/chunk.JDRM6XXD.js +2 -0
  55. package/dist/preview/chunk.JFLUVZNW.js +1 -0
  56. package/dist/preview/chunk.KAWP4RNR.js +1 -0
  57. package/dist/preview/{chunk.OF34OZ4V.js → chunk.KSXB4LDF.js} +1 -1
  58. package/dist/preview/{chunk.FUR4IHWG.js → chunk.LJE5J3JK.js} +1 -1
  59. package/dist/preview/chunk.LPJY6V5D.js +1 -0
  60. package/dist/preview/chunk.LVLAS5GL.js +1 -0
  61. package/dist/preview/{chunk.7CO7S6QM.js → chunk.LVNAB2BW.js} +1 -1
  62. package/dist/preview/{chunk.XRCGADKC.js → chunk.LYJXX6BU.js} +1 -1
  63. package/dist/preview/{chunk.CUCNT7MG.js → chunk.MJLUAGEV.js} +1 -1
  64. package/dist/preview/chunk.MKPJKZAP.js +1 -0
  65. package/dist/preview/chunk.MMBMVHIG.js +1 -0
  66. package/dist/preview/chunk.NNNVB6RV.js +1 -0
  67. package/dist/preview/chunk.NOZEHLWG.js +2 -0
  68. package/dist/preview/{chunk.SG23JC6D.js → chunk.NV6IZJKA.js} +1 -1
  69. package/dist/preview/{chunk.RKHEZ6KZ.js → chunk.NWHFFOXW.js} +1 -1
  70. package/dist/preview/chunk.NZJZIYDK.js +1 -0
  71. package/dist/preview/chunk.O6KNGFWH.js +1 -0
  72. package/dist/preview/chunk.PMK73A53.js +1 -0
  73. package/dist/preview/chunk.PQPZZ7ZW.js +117 -0
  74. package/dist/preview/{chunk.Y3IJDWNS.js → chunk.QJYALCIW.js} +1 -1
  75. package/dist/preview/chunk.QMZUKAPJ.js +1 -0
  76. package/dist/preview/{chunk.GUDKPK42.js → chunk.QNGFBJWP.js} +1 -1
  77. package/dist/preview/{chunk.LMVCWYYG.js → chunk.QOXTBRKE.js} +1 -1
  78. package/dist/preview/{chunk.BZ5VLPKB.js → chunk.QXARGANF.js} +6 -6
  79. package/dist/preview/{chunk.P75TPZWT.js → chunk.QYWBQ5NX.js} +1 -1
  80. package/dist/preview/{chunk.EDSPYKR4.js → chunk.RPOYSIVQ.js} +1 -1
  81. package/dist/preview/{chunk.HPX3F7XX.js → chunk.SNKOPWAD.js} +1 -1
  82. package/dist/preview/{chunk.EBLKEQ7O.js → chunk.SZMWJHU2.js} +1 -1
  83. package/dist/preview/{chunk.KU6NIMQX.js → chunk.TN4GY6LW.js} +1 -1
  84. package/dist/preview/{chunk.O3OALXCI.js → chunk.TRLVFHFT.js} +2 -2
  85. package/dist/preview/chunk.TSI4O3GH.js +1 -0
  86. package/dist/preview/chunk.TX5QIZEP.js +1 -0
  87. package/dist/preview/{chunk.UJR3Y7MP.js → chunk.TXS4I326.js} +1 -1
  88. package/dist/preview/chunk.U4URQDC5.js +1 -0
  89. package/dist/preview/chunk.UCVZG7S4.js +1 -0
  90. package/dist/preview/{chunk.LA7535VO.js → chunk.UPBUF7KR.js} +1 -1
  91. package/dist/preview/{chunk.DANDYIB5.js → chunk.UR5TT4JH.js} +1 -1
  92. package/dist/preview/{chunk.OREMUXB5.js → chunk.UV2TSAB4.js} +1 -1
  93. package/dist/preview/{chunk.IMRCAU4T.js → chunk.UVLPVHID.js} +1 -1
  94. package/dist/preview/chunk.VUKHDZNI.js +1 -0
  95. package/dist/preview/{chunk.S6GJGTJE.js → chunk.VW6WGFL6.js} +1 -1
  96. package/dist/preview/chunk.VX7MGVP5.js +1 -0
  97. package/dist/preview/{chunk.WGI5G6NM.js → chunk.WLV2QYTS.js} +1 -1
  98. package/dist/preview/{chunk.GOCUBIRW.js → chunk.WNKRXL3O.js} +1 -1
  99. package/dist/preview/chunk.WNMLA4YW.js +1 -0
  100. package/dist/preview/{chunk.T2CN7UTZ.js → chunk.WVEKYJSI.js} +2 -2
  101. package/dist/preview/{chunk.2B4WVCVV.js → chunk.X2OLXTRL.js} +1 -1
  102. package/dist/preview/{chunk.J3TEJBI5.js → chunk.XS3SAH6U.js} +1 -1
  103. package/dist/preview/chunk.XWJ2MRQF.js +1 -0
  104. package/dist/preview/{chunk.D6RDTUX3.js → chunk.Y44TR4WG.js} +1 -1
  105. package/dist/preview/{chunk.OXZRGP53.js → chunk.YAXOIJVH.js} +1 -1
  106. package/dist/preview/chunk.YFW5BF6J.js +1 -0
  107. package/dist/preview/chunk.YNJOLOFG.js +1 -0
  108. package/dist/preview/{chunk.6QDFBCV4.js → chunk.YW2BZ2LH.js} +2 -2
  109. package/dist/preview/chunk.YX354FRV.js +1 -0
  110. package/dist/preview/{chunk.QTITRX5Q.js → chunk.ZB7GV3IT.js} +1 -1
  111. package/dist/preview/{chunk.KBJG5SI2.js → chunk.ZOT4V66Q.js} +1 -1
  112. package/dist/preview/chunk.ZYPCE2LZ.js +1 -0
  113. package/dist/preview/index.html +42 -42
  114. package/dist/preview/page.js +5 -5
  115. package/package.json +6 -6
  116. package/dist/preview/chunk.272ZJXQP.js +0 -1
  117. package/dist/preview/chunk.27TLAVRR.js +0 -19
  118. package/dist/preview/chunk.2A2DLMT3.js +0 -1
  119. package/dist/preview/chunk.3PT55HXT.js +0 -1
  120. package/dist/preview/chunk.3SM2CHKF.js +0 -1
  121. package/dist/preview/chunk.3ZIOAPI5.js +0 -1
  122. package/dist/preview/chunk.4B73P2WA.js +0 -2
  123. package/dist/preview/chunk.4GXXD4NG.js +0 -1
  124. package/dist/preview/chunk.4Q56V7GS.js +0 -1
  125. package/dist/preview/chunk.4STIUIT6.js +0 -1
  126. package/dist/preview/chunk.53IKY7UP.js +0 -1
  127. package/dist/preview/chunk.56BPXB6E.js +0 -1
  128. package/dist/preview/chunk.64MJ5FRL.js +0 -1
  129. package/dist/preview/chunk.6II4BONS.js +0 -25
  130. package/dist/preview/chunk.6W7J76TK.js +0 -1
  131. package/dist/preview/chunk.7G3B5QPH.js +0 -1
  132. package/dist/preview/chunk.7TBSVQSH.js +0 -1
  133. package/dist/preview/chunk.7YQYWOZR.js +0 -1
  134. package/dist/preview/chunk.AAZFVCSP.js +0 -2
  135. package/dist/preview/chunk.ACEYGWMO.js +0 -1
  136. package/dist/preview/chunk.CE3NOADH.js +0 -1
  137. package/dist/preview/chunk.CNJENUPC.js +0 -1
  138. package/dist/preview/chunk.CRPT3ZT3.js +0 -1
  139. package/dist/preview/chunk.E77K6KBX.js +0 -1
  140. package/dist/preview/chunk.EQIGKXIG.js +0 -1
  141. package/dist/preview/chunk.F5BCCGFK.js +0 -5
  142. package/dist/preview/chunk.FQKH67BP.js +0 -1
  143. package/dist/preview/chunk.FWBQVPMI.js +0 -1
  144. package/dist/preview/chunk.GXLAZGYT.js +0 -1
  145. package/dist/preview/chunk.GZLYTPE7.js +0 -1
  146. package/dist/preview/chunk.IB32NOV5.js +0 -2
  147. package/dist/preview/chunk.JLXQ6ZLI.js +0 -1
  148. package/dist/preview/chunk.JZMA2AV7.js +0 -1
  149. package/dist/preview/chunk.K5NJTE3F.js +0 -35
  150. package/dist/preview/chunk.LNNFNJKN.js +0 -1
  151. package/dist/preview/chunk.M4FQ7SSM.js +0 -1
  152. package/dist/preview/chunk.NJ62C2GU.js +0 -1
  153. package/dist/preview/chunk.NNCTJSD3.js +0 -1
  154. package/dist/preview/chunk.O6ROFVFD.js +0 -88
  155. package/dist/preview/chunk.OFJH7LDC.js +0 -1
  156. package/dist/preview/chunk.OH5BBE2B.js +0 -1
  157. package/dist/preview/chunk.OZR5NI4J.js +0 -1
  158. package/dist/preview/chunk.PWOVXARZ.js +0 -1
  159. package/dist/preview/chunk.Q63RPNUS.js +0 -1
  160. package/dist/preview/chunk.QEALNWWL.js +0 -117
  161. package/dist/preview/chunk.QLMUGC7R.js +0 -1
  162. package/dist/preview/chunk.R7LRJS6B.js +0 -4
  163. package/dist/preview/chunk.SSRP5SBR.js +0 -1
  164. package/dist/preview/chunk.VHWUGSFW.js +0 -1
  165. package/dist/preview/chunk.W42P7NOL.js +0 -1
  166. package/dist/preview/chunk.XBTZXWJX.js +0 -1
  167. package/dist/preview/chunk.ZDNJK2SX.js +0 -1
  168. package/dist/preview/chunk.ZNS3LYJU.js +0 -1
  169. package/dist/preview/chunk.ZSSOTIFL.js +0 -1
@@ -1 +1 @@
1
- var __graviewPreload=(base,files)=>{if(typeof document>"u")return;const asked=globalThis.__graviewPreloaded??=new Set;for(const file of files){const href=new URL(file,base).href;if(asked.has(href))continue;asked.add(href);const link=document.createElement("link");link.rel="modulepreload";link.href=href;document.head.append(link)}};import{a as y}from"./chunk.CUCNT7MG.js";import{m as g}from"./chunk.BZ5VLPKB.js";import{F as R,Q as c,a as f,xa as m}from"./chunk.6II4BONS.js";import{ea as p}from"./chunk.F5BCCGFK.js";import{b as u}from"./chunk.AJZBJBMO.js";var o=u(R(),1);var r=u(c(),1),S,h=()=>S??=m(f(()=>(__graviewPreload(import.meta.url,["./chunk.EBLKEQ7O.js","./chunk.FUR4IHWG.js","./chunk.2B4WVCVV.js","./chunk.AAZFVCSP.js","./chunk.F5BCCGFK.js","./chunk.AJZBJBMO.js"]),import("./chunk.OH5BBE2B.js"))));function L(e){let[n,t]=(0,o.useState)(()=>h().current);return(0,o.useEffect)(()=>{if(!e||n)return;let i=!0;return h().load().then(a=>i&&t(a),()=>{}),()=>{i=!1}},[e,n]),n}function D(e,n){let t=L(n.length>0);return(0,o.useMemo)(()=>t?t.withLines(e,n):n,[t,e,n])}function I(e,n){let t=L(n.some(i=>i.shape));return(0,o.useMemo)(()=>{let i=new Map;if(!t)return i;for(let a of n){let l=t.ruleLine(a,e);l&&i.set(a.name,l)}return i},[t,e,n])}function M(e){let n=e.line;if(!(!n||e.message.endsWith(` \u2014 ${n.text}`)||e.message===b(e)))return e.message}function b(e){let n=e.line;return n?n.record!==void 0?`${n.record} \u2014 ${n.text}`:n.text:e.message}var P={name:{},op:{color:"var(--graview-ink-muted)",fontWeight:500},value:{fontWeight:600,fontVariantNumeric:"tabular-nums"},word:{color:"var(--graview-ink-muted)"},open:{color:"var(--graview-ink-faint)"},close:{color:"var(--graview-ink-faint)"}};function w({parts:e}){return(0,r.jsx)(r.Fragment,{children:e.map((n,t)=>(0,r.jsxs)("span",{children:[n.space?" ":"",(0,r.jsx)("span",{"data-graview-rule-part":n.as,style:P[n.as],children:n.text})]},t))})}function x(e,n){let t=p(e?.tryDefinition(n),n);return t.charAt(0).toUpperCase()+t.slice(1)}function C({line:e,schema:n,brand:t,lead:i=e.record===void 0?"kind":"record",stacked:a=!1,style:l}){let d=e.kind,s=i==="kind"?d?x(n,d):void 0:i==="record"?e.record:void 0,k=i==="kind"&&s?`${s}: ${e.said}`:i==="record"&&s?`${s} \u2014 ${e.said}`:e.said;return(0,r.jsxs)("span",{"data-graview-rule-line":"",style:{overflowWrap:"anywhere",...l},children:[(0,r.jsx)("span",{style:g,children:k}),(0,r.jsxs)("span",{"aria-hidden":"true",children:[i!=="none"&&d?(0,r.jsx)("span",{style:{display:"inline-flex",verticalAlign:"-0.1em",marginRight:"0.4em"},children:(0,r.jsx)(y,{kind:d,...n?{schema:n}:{},...t?{brand:t}:{},size:13})}):null,s?(0,r.jsxs)("span",{"data-graview-rule-head":"",style:{fontWeight:600,marginRight:i==="record"||a?0:"0.6em"},children:[s,i==="record"&&!a?(0,r.jsx)("span",{style:{color:"var(--graview-ink-faint)",fontWeight:400},children:" \u2014 "}):null]}):null,a&&s?(0,r.jsx)("br",{}):null,(0,r.jsx)(w,{parts:e.parts}),e.when&&e.when.length>0?(0,r.jsxs)("span",{"data-graview-rule-when":"",style:{color:"var(--graview-ink-faint)"},children:[", when ",(0,r.jsx)(w,{parts:e.when})]}):null]})]})}function z(e){return e.line?e.label&&e.label.trim().length>0?e.label:void 0:e.label&&e.label!==e.message&&!e.message.startsWith(e.label)?e.label:void 0}export{D as a,I as b,M as c,C as d,z as e};
1
+ var __graviewPreload=(base,files)=>{if(typeof document>"u")return;const asked=globalThis.__graviewPreloaded??=new Set;for(const file of files){const href=new URL(file,base).href;if(asked.has(href))continue;asked.add(href);const link=document.createElement("link");link.rel="modulepreload";link.href=href;document.head.append(link)}};import{a as y}from"./chunk.MJLUAGEV.js";import{m as g}from"./chunk.QXARGANF.js";import{F as R,Q as c,a as f,xa as m}from"./chunk.DNNL7F3P.js";import{ka as p}from"./chunk.HBBVVALN.js";import{b as u}from"./chunk.AJZBJBMO.js";var o=u(R(),1);var r=u(c(),1),S,h=()=>S??=m(f(()=>(__graviewPreload(import.meta.url,["./chunk.SZMWJHU2.js","./chunk.LJE5J3JK.js","./chunk.X2OLXTRL.js","./chunk.JDRM6XXD.js","./chunk.HBBVVALN.js","./chunk.AJZBJBMO.js"]),import("./chunk.CGQLE7JW.js"))));function L(e){let[n,t]=(0,o.useState)(()=>h().current);return(0,o.useEffect)(()=>{if(!e||n)return;let i=!0;return h().load().then(a=>i&&t(a),()=>{}),()=>{i=!1}},[e,n]),n}function D(e,n){let t=L(n.length>0);return(0,o.useMemo)(()=>t?t.withLines(e,n):n,[t,e,n])}function I(e,n){let t=L(n.some(i=>i.shape));return(0,o.useMemo)(()=>{let i=new Map;if(!t)return i;for(let a of n){let l=t.ruleLine(a,e);l&&i.set(a.name,l)}return i},[t,e,n])}function M(e){let n=e.line;if(!(!n||e.message.endsWith(` \u2014 ${n.text}`)||e.message===b(e)))return e.message}function b(e){let n=e.line;return n?n.record!==void 0?`${n.record} \u2014 ${n.text}`:n.text:e.message}var P={name:{},op:{color:"var(--graview-ink-muted)",fontWeight:500},value:{fontWeight:600,fontVariantNumeric:"tabular-nums"},word:{color:"var(--graview-ink-muted)"},open:{color:"var(--graview-ink-faint)"},close:{color:"var(--graview-ink-faint)"}};function w({parts:e}){return(0,r.jsx)(r.Fragment,{children:e.map((n,t)=>(0,r.jsxs)("span",{children:[n.space?" ":"",(0,r.jsx)("span",{"data-graview-rule-part":n.as,style:P[n.as],children:n.text})]},t))})}function x(e,n){let t=p(e?.tryDefinition(n),n);return t.charAt(0).toUpperCase()+t.slice(1)}function C({line:e,schema:n,brand:t,lead:i=e.record===void 0?"kind":"record",stacked:a=!1,style:l}){let d=e.kind,s=i==="kind"?d?x(n,d):void 0:i==="record"?e.record:void 0,k=i==="kind"&&s?`${s}: ${e.said}`:i==="record"&&s?`${s} \u2014 ${e.said}`:e.said;return(0,r.jsxs)("span",{"data-graview-rule-line":"",style:{overflowWrap:"anywhere",...l},children:[(0,r.jsx)("span",{style:g,children:k}),(0,r.jsxs)("span",{"aria-hidden":"true",children:[i!=="none"&&d?(0,r.jsx)("span",{style:{display:"inline-flex",verticalAlign:"-0.1em",marginRight:"0.4em"},children:(0,r.jsx)(y,{kind:d,...n?{schema:n}:{},...t?{brand:t}:{},size:13})}):null,s?(0,r.jsxs)("span",{"data-graview-rule-head":"",style:{fontWeight:600,marginRight:i==="record"||a?0:"0.6em"},children:[s,i==="record"&&!a?(0,r.jsx)("span",{style:{color:"var(--graview-ink-faint)",fontWeight:400},children:" \u2014 "}):null]}):null,a&&s?(0,r.jsx)("br",{}):null,(0,r.jsx)(w,{parts:e.parts}),e.when&&e.when.length>0?(0,r.jsxs)("span",{"data-graview-rule-when":"",style:{color:"var(--graview-ink-faint)"},children:[", when ",(0,r.jsx)(w,{parts:e.when})]}):null]})]})}function z(e){return e.line?e.label&&e.label.trim().length>0?e.label:void 0:e.label&&e.label!==e.message&&!e.message.startsWith(e.label)?e.label:void 0}export{D as a,I as b,M as c,C as d,z as e};
@@ -0,0 +1 @@
1
+ import{B as $,Cb as M,D as h,G as E,K as N,L as S,M as W,O as R,P as I,T as p,da as D,ia as T,sa as j,tb as v,zb as O}from"./chunk.HBBVVALN.js";function z(e,n,t){let o=[...n?.creates??[],...n?.subject&&n.subject.kinds!=="*"?n.subject.kinds:[]];for(let r of o){let i=e.tryDefinition(r),u=i?.fields?.shape??{};if(!i||!(t in u))continue;let a=i.display?.format?.[t];return{label:i.display?.labels?.[t]??T(i,t),option:d=>a?a(d):D(d)}}return{label:T(void 0,t),option:r=>D(r)}}function K(e,n,t){if(t instanceof v){let o=n.find(i=>i.name===t.mutation);return`Not yet: ${t.issues.map(i=>{let u=i.path.length>0?z(e,o,String(i.path[0])).label:void 0;return u?`${u} \u2014 ${i.message.replace(/^./,a=>a.toLowerCase())}`:i.message}).join("; ")}.`}return t instanceof Error?t.message:String(t)}var x=864e5,X=/^(\d{4})-(\d{2})-(\d{2})/,g=e=>String(e).padStart(2,"0"),_=e=>new Date(e).toISOString().slice(0,10),m=e=>Date.UTC(+e.slice(0,4),+e.slice(5,7)-1,+e.slice(8,10)),b=(e,n)=>_(m(e)+n*x),C=e=>new Date(m(e)).getUTCDay();function l(e,n,t){if(!(n>=1&&n<=12&&t>=1&&t<=31))return;let o=`${String(e).padStart(4,"0")}-${g(n)}-${g(t)}`;return _(m(o))===o?o:void 0}function L(e=new Date){let n=S();return n?R(e.getTime(),n):{day:`${e.getFullYear()}-${g(e.getMonth()+1)}-${g(e.getDate())}`,minutes:e.getHours()*60+e.getMinutes()}}var w=e=>/T\d\d:\d\d(:[\d.]+)?(Z|[+-]\d\d:?\d\d)$/.test(e);function y(e){if(typeof e!="string")return;if(w(e)){let o=new Date(e);return Number.isNaN(o.getTime())?void 0:L(o)}let n=/^(\d{4})-(\d{2})-(\d{2})(?:[T ](\d{2}):(\d{2}))?/.exec(e);if(!n||!l(Number(n[1]),Number(n[2]),Number(n[3])))return;let t=e.slice(0,10);return n[4]===void 0?{day:t}:{day:t,minutes:Number(n[4])*60+Number(n[5])}}function F(e,n){if(!n.time)return e.day;let t=e.minutes??9*60;if(!n.instant)return`${e.day}T${g(Math.floor(t/60))}:${g(t%60)}`;let o=S(),[,r,i,u]=X.exec(e.day);return(o?new Date(I(e.day,t,o)):new Date(Number(r),Number(i)-1,Number(u),Math.floor(t/60),t%60)).toISOString().replace(/\.\d{3}Z$/,"Z")}function V(e,n=new Date){let t=W(),o=t;try{o=new Intl.DateTimeFormat(e??h,{timeZoneName:"short",timeZone:t}).formatToParts(n).find(r=>r.type==="timeZoneName")?.value??t}catch{o=t}return{zone:t,short:o}}function q(e,n,t,o){let r=y(n);if(!r)return t;let i=e===void 0?void 0:y(e),u=t===void 0?void 0:y(t),a=d=>m(d.day)+(d.minutes??0)*6e4,c=(d,s)=>{let f=a(d)+s;return{day:_(f),...o.time?{minutes:Math.round(f%x/6e4)}:{}}};return i&&u?F(c(u,a(r)-a(i)),o):u&&a(u)>=a(r)?t:o.time?F(c(r,36e5),o):t}var J=/^(start|starts|startsAt|startsOn|startAt|begins|from|opens|checkIn)$/i,Q=/^(end|ends|endsAt|endsOn|endAt|until|to|finish|finishes|closes|through|checkOut)$/i;function ee(e,n={}){let t=(n.start&&e.includes(n.start)?n.start:void 0)??e.find(r=>J.test(r)),o=(n.end&&e.includes(n.end)?n.end:void 0)??e.find(r=>r!==t&&Q.test(r));return t&&o?{start:t,end:o}:void 0}var ne=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],te=["sun","mon","tue","wed","thu","fri","sat"],B="(jan(?:uary)?|feb(?:ruary)?|mar(?:ch)?|apr(?:il)?|may|june?|july?|aug(?:ust)?|sept?(?:ember)?|oct(?:ober)?|nov(?:ember)?|dec(?:ember)?)",U="(sun(?:day)?|mon(?:day)?|tue(?:s|sday)?|wed(?:nesday)?|thu(?:r|rs|rsday)?|fri(?:day)?|sat(?:urday)?)",re=e=>ne.indexOf(e.slice(0,3))+1,Y=e=>e===void 0?void 0:e.length===2?2e3+Number(e):Number(e);function oe(e){try{let n=new Intl.DateTimeFormat(e,{month:"numeric",day:"numeric"}).formatToParts(0).map(t=>t.type);return n.indexOf("month")<n.indexOf("day")}catch{return!0}}function ie(e){let n=(r,i)=>({minutes:i,rest:`${e.slice(0,r.index)} ${e.slice(r.index+r[0].length)}`}),t=/\b(noon|midday)\b/.exec(e);if(t)return n(t,12*60);if(t=/\bmidnight\b/.exec(e),t)return n(t,0);if(t=/\b(\d{1,2})(?::(\d{2}))?\s*([ap])\.?m?\.?(?=\s|$)/.exec(e),t){let r=Number(t[1]),i=Number(t[2]??0);return r<1||r>12||i>59?{rest:e,bad:!0}:n(t,(r%12+(t[3]==="p"?12:0))*60+i)}if(t=/\b(\d{1,2}):(\d{2})\b/.exec(e),t){let r=Number(t[1]),i=Number(t[2]);return r>23||i>59?{rest:e,bad:!0}:n(t,r*60+i)}if(t=/\bat\s+(\d{1,2})\b/.exec(e),t){let r=Number(t[1]);return r>23?{rest:e,bad:!0}:n(t,(r>=1&&r<=7?r+12:r)*60)}let o=/\b(morning|afternoon|evening|tonight)\b/.exec(e);return o?{minutes:{morning:9,afternoon:15,evening:18,tonight:20}[o[1]]*60,rest:o[1]==="tonight"?`${e.slice(0,o.index)} today ${e.slice(o.index+o[0].length)}`:`${e.slice(0,o.index)} ${e.slice(o.index+o[0].length)}`}:{rest:e}}function ue(e,n,t){let o=e.replace(/\b(on|at|the|of|this)\b/g," ").replace(/\s+/g," ").trim();if(o==="")return null;if(o==="today"||o==="now")return n;if(o==="tomorrow"||o==="tmrw"||o==="tmr")return b(n,1);if(o==="yesterday")return b(n,-1);if(o==="next week")return b(n,7);let r=/^in (\d{1,3}) (day|days|week|weeks)$/.exec(o);if(r)return b(n,Number(r[1])*(r[2].startsWith("week")?7:1));if(r=new RegExp(`^(next )?${U}$`).exec(o),r){let d=(te.indexOf(r[2].slice(0,3))-C(n)+7)%7;return b(n,r[1]&&d===0?7:d)}if(r=/^(\d{4})-(\d{1,2})-(\d{1,2})$/.exec(o),r)return l(Number(r[1]),Number(r[2]),Number(r[3]));let i=o.replace(new RegExp(`^${U} `),"");r=new RegExp(`^(\\d{1,2})(?:st|nd|rd|th)? ${B}(?: (\\d{4}))?$`).exec(i);let u=r?{date:r[1],month:r[2],year:r[3]}:void 0;r=new RegExp(`^${B} (\\d{1,2})(?:st|nd|rd|th)?(?: (\\d{4}))?$`).exec(i);let a=u??(r?{date:r[2],month:r[1],year:r[3]}:void 0);if(a)return Z(n,Y(a.year),re(a.month),Number(a.date));if(r=/^(\d{1,2})[/.-](\d{1,2})(?:[/.-](\d{2}|\d{4}))?$/.exec(i),r){let[c,d]=[Number(r[1]),Number(r[2])],[s,f]=oe(t)?[c,d]:[d,c];return Z(n,Y(r[3]),s,f)}}function Z(e,n,t,o){if(n!==void 0)return l(n,t,o);let r=Number(e.slice(0,4)),i=l(r,t,o);return i===void 0?l(r+1,t,o):m(e)-m(i)>183*x?l(r+1,t,o):i}function de(e,n){let t=e.trim();if(w(t)){let a=y(t);if(a)return n.time?a:{day:a.day}}let o=e.toLowerCase().replace(/,/g," ").replace(/(\d{4}-\d{2}-\d{2})t(\d\d:\d\d)(:\d\d(\.\d+)?)?/,"$1 $2").replace(/\s+/g," ").trim();if(o==="")return;let r=ie(o);if(r.bad)return;let i=ue(r.rest,n.today,n.locale??h);if(i===void 0||i===null&&r.minutes===void 0)return;let u=i??n.base?.day??n.today;return n.time?{day:u,minutes:r.minutes??n.base?.minutes??9*60}:{day:u}}var ae=e=>/^[A-Z]{3}$/.test(e??"");function P(e){let{format:n,unit:t,currency:o,locale:r}=e,i=ae(t),u=n==="money"||!n&&i,a=u?i?t:o:void 0;return{...u?{format:"money"}:n?{format:n}:{},...t&&!(u&&i)?{unit:t}:{},...a?{currency:a}:{},...r?{locale:r}:{}}}function Te(e){switch(e.format){case"money":return e.currency?`An amount of money in ${e.currency}: a plain number, 1250.5 for 1,250.50 ${e.currency}.`:"An amount of money, in no named currency: a plain number.";case"percent":return"A fraction said as a percent: 0.15 is 15%.";default:return e.unit?`A number of ${e.unit}.`:"A number."}}function H(e){let n=$(e)?.innerType;return n===void 0?e:H(n)}var se={safeint:[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]},ce=e=>(e?._zod?.def?.checks??[]).map(n=>n._zod?.def).filter(n=>n!==void 0);function k(e){let n=H(e),t=$(n),o=t?.type,r=ce(n);if(o==="enum")return{type:"choice",options:Object.keys(t?.entries??{})};let i=j(n);if(i)return i==="image"?{type:"file",image:!0}:i==="video"?{type:"file",video:!0}:{type:"file"};if(o==="boolean")return{type:"boolean"};if(o==="array"){let u=k(t?.element);return u.type==="unknown"?{type:"unknown"}:{type:"several",of:u}}if(o==="number"){let u,a,c;for(let d of r){d.check==="multiple_of"&&typeof d.value=="number"?c=d.value:d.check==="number_format"&&(d.format==="safeint"||d.format==="int32"||d.format==="uint32")&&(c??=1);let s=d.check==="number_format"&&d.format?se[d.format]:void 0,f=s?s[0]:d.check==="greater_than"&&d.inclusive&&typeof d.value=="number"?d.value:void 0,A=s?s[1]:d.check==="less_than"&&d.inclusive&&typeof d.value=="number"?d.value:void 0;f!==void 0&&(u=u===void 0?f:Math.max(u,f)),A!==void 0&&(a=a===void 0?A:Math.min(a,A))}return{type:"number",...u===void 0?{}:{min:u},...a===void 0?{}:{max:a},...c===void 0?{}:{step:c},...M(n)==="duration"?{duration:!0}:{},...O(e)?{amount:P(O(e))}:{}}}if(o==="string"){if(r.some(s=>s.fn===E||s.format==="datetime")||t?.format==="datetime")return{type:"date",time:!0,instant:!0};let a=[t?.pattern,...r.map(s=>s.pattern)].filter(s=>s instanceof RegExp).map(s=>s.source);if(a.some(s=>s.includes("\\d{4}")))return a.some(s=>s.includes("\\d{2}:\\d{2}"))?{type:"date",time:!0}:{type:"date"};let c=r.some(s=>s.check==="max_length"&&typeof s.maximum=="number"&&s.maximum>500),d=M(n);return c?{type:"text",long:!0}:d==="phone"||d==="place"?{type:"text",holds:d}:{type:"text"}}return{type:"unknown"}}function fe(e,n){let t=e?.shape;return!t||!(n in t)?{type:"unknown"}:k(t[n])}function me(e){if(e===void 0||e==="web"||e.startsWith("ai:")||e.startsWith("app:"))return;if(e==="api")return"via the API";if(e==="cli")return"via the command line";let[n,...t]=e.split(":"),o=t.join(":");return(n==="mcp"||n==="view")&&o?`via ${o}`:n==="mcp"?"via an agent's tools":`via ${e}`}var G=e=>{if(!e.currency)return{before:!0};try{let n=N(e.locale),t=new Intl.NumberFormat(n,{style:"currency",currency:e.currency}).formatToParts(1),o=t.findIndex(u=>u.type==="currency"),r=t.findIndex(u=>u.type==="integer"),i;try{i=new Intl.DisplayNames([n],{type:"currency"}).of(e.currency)}catch{}return{...o>=0?{symbol:t[o].value}:{},before:o<r,...i?{name:i}:{}}}catch{return{symbol:e.currency,before:!0}}};function le(e){let n=e.locale;if(e.format==="money"){let{symbol:t,before:o,name:r}=G(e),i=p(1250,n,{minimumFractionDigits:2,maximumFractionDigits:2});return{...t?o?{prefix:t}:{suffix:t}:{},placeholder:i,hint:r?`in ${r}`:e.currency?`in ${e.currency}`:"an amount of money"}}return e.format==="percent"?{suffix:"%",placeholder:p(15,n),hint:"as a percent"}:{...e.unit?{suffix:e.unit}:{},placeholder:"",hint:e.unit?`in ${e.unit}`:"a number"}}function pe(e,n){return e===void 0||!Number.isFinite(e)?"":n.format==="money"?p(e,n.locale,Number.isInteger(e)?{maximumFractionDigits:0}:{minimumFractionDigits:2,maximumFractionDigits:2}):n.format==="percent"?p(e*100,n.locale,{maximumFractionDigits:4}):p(e,n.locale,{maximumFractionDigits:6})}function ye(e){try{let n=new Intl.NumberFormat(N(e)).formatToParts(12345.6);return{group:n.find(t=>t.type==="group")?.value??",",decimal:n.find(t=>t.type==="decimal")?.value??"."}}catch{return{group:",",decimal:"."}}}function ge(e,n){let{group:t,decimal:o}=ye(n),r=e.replace(/[\s  ']/g,"").replace(/[−–]/g,"-");if(o!=="."&&!r.includes(o)&&/^-?\d+\.\d{1,2}$/.test(r))return Number(r);if(t&&(r=r.split(t).join("")),o!=="."&&(r=r.replace(o,".")),!/^-?(\d+\.?\d*|\.\d+)$/.test(r))return;let i=Number(r);return Number.isFinite(i)?i:void 0}function be(e,n){let t=e.trim();if(t==="")return;let o=n?.format==="money"&&n.currency?G(n).symbol:void 0,r=t;o&&(r=r.split(o).join("")),n?.currency&&(r=r.replace(new RegExp(n.currency,"gi"),"")),r=r.replace(/^[$€£¥₹]|[$€£¥₹]$/g,""),/%\s*$/.test(r)&&(r=r.replace(/%\s*$/,"")),n?.unit&&n.format!=="money"&&(r=r.replace(new RegExp(`\\s*${n.unit.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}\\s*$`),""));let u=ge(r,n?.locale);if(u!==void 0)return n?.format==="percent"?u/100:u}export{P as a,Te as b,H as c,k as d,fe as e,z as f,K as g,me as h,le as i,pe as j,be as k,L as l,w as m,y as n,F as o,V as p,q,ee as r,de as s};
@@ -1 +1 @@
1
- import{a as v,b as m,c as h}from"./chunk.MB7LKKUD.js";import"./chunk.BZ5VLPKB.js";import{F as N,Q as u,ta as p,va as b}from"./chunk.6II4BONS.js";import{gc as f}from"./chunk.F5BCCGFK.js";import{b as c}from"./chunk.AJZBJBMO.js";var l=c(N(),1);var o=c(u(),1);function z({notices:r,anchor:n,board:a}){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{notices:r.filter(i=>i.kind==="banner"),at:"top",anchor:n,board:a}),(0,o.jsx)(w,{notices:r.filter(i=>i.kind==="toast"),at:"foot",anchor:n,board:a})]})}var y={info:"var(--graview-accent)",good:"var(--graview-good)",warn:"var(--graview-warn)",bad:"var(--graview-bad)"};function w({notices:r,at:n,anchor:a,board:i}){let s=(0,l.useRef)(null),t=r.length>0;return(0,l.useLayoutEffect)(()=>{let e=s.current;if(!t||!e)return;if(typeof e.showPopover=="function"&&!p(e))try{e.showPopover()}catch{}let d=()=>(n==="top"?h:m)(e,a());d(),n==="foot"&&i.hold?.(()=>e.matches(":hover, :focus-within"));let S=b(e);addEventListener("resize",d),addEventListener("scroll",d,!0),n==="foot"&&addEventListener(v,d);let g=typeof ResizeObserver=="function"?new ResizeObserver(d):null;return g?.observe(e),()=>{if(S(),g?.disconnect(),removeEventListener("resize",d),removeEventListener("scroll",d,!0),removeEventListener(v,d),e.isConnected&&p(e))try{e.hidePopover()}catch{}}},[t,n,a,i]),t?(0,o.jsx)("div",{ref:s,popover:"manual",role:"region","aria-label":n==="top"?"Notices":"Messages","data-testid":n==="top"?"notices-banners":"notices-toasts","data-graview-offstage":"",style:{position:"fixed",inset:"auto",margin:0,padding:0,border:"none",background:"none",overflow:"visible",zIndex:f("toast"),width:"max-content",height:"auto",maxWidth:"min(560px, calc(100vw - 32px))",display:"grid",gap:8,color:"var(--graview-ink)"},children:r.map(e=>(0,o.jsx)(T,{notice:e,board:i},e.id))}):null}function T({notice:r,board:n}){let a=r.tone??"info",i=[...r.action?[r.action]:[],...r.actions??[]],s=()=>n.dismiss(r.id);return(0,o.jsxs)("div",{"data-testid":"notice","data-kind":r.kind,"data-tone":a,style:{boxSizing:"border-box",display:"flex",flexWrap:"wrap",alignItems:"center",gap:"8px 12px",padding:r.kind==="banner"?"8px 10px 8px 14px":"10px 12px 10px 14px",borderRadius:"var(--graview-radius, 12px)",borderTop:"1px solid var(--graview-edge)",borderRight:"1px solid var(--graview-edge)",borderBottom:"1px solid var(--graview-edge)",borderLeft:`3px solid ${y[a]}`,background:"var(--graview-float)",boxShadow:"var(--graview-lift-high)",fontSize:"0.875rem",lineHeight:1.45},children:[(0,o.jsx)("span",{"aria-hidden":"true",style:{width:7,height:7,borderRadius:999,flex:"0 0 auto",background:y[a]}}),(0,o.jsx)("span",{style:{flex:"1 1 16rem",minWidth:0},children:r.sentence}),i.length>0?(0,o.jsx)("span",{style:{display:"flex",flexWrap:"wrap",gap:6},children:i.map((t,e)=>t.href!==void 0?(0,o.jsx)("a",{href:t.href,...t.target?{target:t.target,rel:"noopener"}:{},"data-testid":"notice-action",onClick:()=>{t.onSelect?.(),s()},style:{...x,...e===0?k:{}},children:t.label},t.label):(0,o.jsx)("button",{type:"button","data-testid":"notice-action",onClick:()=>{s(),t.onSelect?.()},style:{...x,...e===0?k:{}},children:t.label},t.label))}):null,(0,o.jsx)("button",{type:"button","data-testid":"notice-dismiss","aria-label":`Dismiss: ${r.sentence}`,title:"Dismiss",onClick:s,style:E,children:"\xD7"})]})}var x={display:"inline-flex",alignItems:"center",minHeight:28,padding:"2px 12px",borderRadius:9,border:"1px solid var(--graview-edge)",background:"var(--graview-panel)",color:"var(--graview-ink)",font:"inherit",fontWeight:500,textDecoration:"none",cursor:"pointer"},k={background:"var(--graview-accent)",borderColor:"var(--graview-accent)",color:"var(--graview-accent-ink)"},E={minWidth:28,minHeight:28,padding:0,border:"none",background:"none",boxShadow:"none",color:"var(--graview-ink-muted)",fontSize:"1rem",cursor:"pointer"};export{z as NoticeStacks};
1
+ import{a as v,b as m,c as h}from"./chunk.MB7LKKUD.js";import"./chunk.QXARGANF.js";import{F as N,Q as u,ta as p,va as b}from"./chunk.DNNL7F3P.js";import{qc as f}from"./chunk.HBBVVALN.js";import{b as c}from"./chunk.AJZBJBMO.js";var l=c(N(),1);var o=c(u(),1);function z({notices:r,anchor:n,board:a}){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{notices:r.filter(i=>i.kind==="banner"),at:"top",anchor:n,board:a}),(0,o.jsx)(w,{notices:r.filter(i=>i.kind==="toast"),at:"foot",anchor:n,board:a})]})}var y={info:"var(--graview-accent)",good:"var(--graview-good)",warn:"var(--graview-warn)",bad:"var(--graview-bad)"};function w({notices:r,at:n,anchor:a,board:i}){let s=(0,l.useRef)(null),t=r.length>0;return(0,l.useLayoutEffect)(()=>{let e=s.current;if(!t||!e)return;if(typeof e.showPopover=="function"&&!p(e))try{e.showPopover()}catch{}let d=()=>(n==="top"?h:m)(e,a());d(),n==="foot"&&i.hold?.(()=>e.matches(":hover, :focus-within"));let S=b(e);addEventListener("resize",d),addEventListener("scroll",d,!0),n==="foot"&&addEventListener(v,d);let g=typeof ResizeObserver=="function"?new ResizeObserver(d):null;return g?.observe(e),()=>{if(S(),g?.disconnect(),removeEventListener("resize",d),removeEventListener("scroll",d,!0),removeEventListener(v,d),e.isConnected&&p(e))try{e.hidePopover()}catch{}}},[t,n,a,i]),t?(0,o.jsx)("div",{ref:s,popover:"manual",role:"region","aria-label":n==="top"?"Notices":"Messages","data-testid":n==="top"?"notices-banners":"notices-toasts","data-graview-offstage":"",style:{position:"fixed",inset:"auto",margin:0,padding:0,border:"none",background:"none",overflow:"visible",zIndex:f("toast"),width:"max-content",height:"auto",maxWidth:"min(560px, calc(100vw - 32px))",display:"grid",gap:8,color:"var(--graview-ink)"},children:r.map(e=>(0,o.jsx)(T,{notice:e,board:i},e.id))}):null}function T({notice:r,board:n}){let a=r.tone??"info",i=[...r.action?[r.action]:[],...r.actions??[]],s=()=>n.dismiss(r.id);return(0,o.jsxs)("div",{"data-testid":"notice","data-kind":r.kind,"data-tone":a,style:{boxSizing:"border-box",display:"flex",flexWrap:"wrap",alignItems:"center",gap:"8px 12px",padding:r.kind==="banner"?"8px 10px 8px 14px":"10px 12px 10px 14px",borderRadius:"var(--graview-radius, 12px)",borderTop:"1px solid var(--graview-edge)",borderRight:"1px solid var(--graview-edge)",borderBottom:"1px solid var(--graview-edge)",borderLeft:`3px solid ${y[a]}`,background:"var(--graview-float)",boxShadow:"var(--graview-lift-high)",fontSize:"0.875rem",lineHeight:1.45},children:[(0,o.jsx)("span",{"aria-hidden":"true",style:{width:7,height:7,borderRadius:999,flex:"0 0 auto",background:y[a]}}),(0,o.jsx)("span",{style:{flex:"1 1 16rem",minWidth:0},children:r.sentence}),i.length>0?(0,o.jsx)("span",{style:{display:"flex",flexWrap:"wrap",gap:6},children:i.map((t,e)=>t.href!==void 0?(0,o.jsx)("a",{href:t.href,...t.target?{target:t.target,rel:"noopener"}:{},"data-testid":"notice-action",onClick:()=>{t.onSelect?.(),s()},style:{...x,...e===0?k:{}},children:t.label},t.label):(0,o.jsx)("button",{type:"button","data-testid":"notice-action",onClick:()=>{s(),t.onSelect?.()},style:{...x,...e===0?k:{}},children:t.label},t.label))}):null,(0,o.jsx)("button",{type:"button","data-testid":"notice-dismiss","aria-label":`Dismiss: ${r.sentence}`,title:"Dismiss",onClick:s,style:E,children:"\xD7"})]})}var x={display:"inline-flex",alignItems:"center",minHeight:28,padding:"2px 12px",borderRadius:9,border:"1px solid var(--graview-edge)",background:"var(--graview-panel)",color:"var(--graview-ink)",font:"inherit",fontWeight:500,textDecoration:"none",cursor:"pointer"},k={background:"var(--graview-accent)",borderColor:"var(--graview-accent)",color:"var(--graview-accent-ink)"},E={minWidth:28,minHeight:28,padding:0,border:"none",background:"none",boxShadow:"none",color:"var(--graview-ink-muted)",fontSize:"1rem",cursor:"pointer"};export{z as NoticeStacks};
@@ -1,3 +1,3 @@
1
- var __graviewPreload=(base,files)=>{if(typeof document>"u")return;const asked=globalThis.__graviewPreloaded??=new Set;for(const file of files){const href=new URL(file,base).href;if(asked.has(href))continue;asked.add(href);const link=document.createElement("link");link.rel="modulepreload";link.href=href;document.head.append(link)}};import{a as Je}from"./chunk.7YQYWOZR.js";import{a as Ue}from"./chunk.ACEYGWMO.js";import{a as Le}from"./chunk.D6RDTUX3.js";import{a as oe}from"./chunk.TI4OSTQV.js";import{a as re}from"./chunk.P75TPZWT.js";import{e as ke}from"./chunk.BZ5VLPKB.js";import{F as sn,I as je,O as Ne,Q as De,Y as He}from"./chunk.6II4BONS.js";import{$ as _,Ab as ie,Cb as Me,X as te,Z as L,ca as Ie,ea as me,gb as ve,gc as Ee,xb as Re}from"./chunk.F5BCCGFK.js";import{b as he}from"./chunk.AJZBJBMO.js";var an=e=>/^(?:aggregate|kind):([^,]+)$/.exec(e)?.[1];function Fe(e,n){let t=e.about??[];if(e.field!==void 0&&e.on!==void 0&&n(e.on))return{on:"field",id:e.on,field:e.field};let i=t.filter(n);if(i.length>1)return{on:"selection",ids:i};if(e.on!==void 0&&n(e.on))return{on:"record",id:e.on};if(i.length===1)return{on:"record",id:i[0]};let o=[e.on,...t].map(r=>r===void 0?void 0:an(r)).find(r=>r!==void 0);return e.place!==void 0?{on:"lens",place:e.place,...o?{kind:o}:{}}:o!==void 0?{on:"list",kind:o}:{on:"place",place:"home"}}var K=e=>e.on==="record"||e.on==="field"?[e.id]:e.on==="selection"?e.ids:e.on==="act"&&e.id!==void 0?[e.id]:[],se=(e,n)=>e.tryDefinition(n)?.fields?.shape??{},G=(e,n)=>e.tryDefinition(n)?.edges??{},ae=(e,n)=>new Set(e.tryDefinition(n)?.display?.hide??[]),N=(e,n)=>te(e.tryDefinition(n.kind),n),be=(e,n,t)=>Ie(e.tryDefinition(n),t)||L(t),Ae=e=>typeof e=="boolean"?e?"yes":"no":String(e);function xe(e,n){let t=e.kindsKeptFrom(n);return new Set(e.schema.kinds.filter(i=>!t.has(i)))}function Se(e,n,t,i){if(!e.permits(n,t).ok)return!1;if(!i)return!0;try{return e.previewAll([n],{author:t}).ops.length>0}catch{return!1}}function de(e,n,t){let i=e,{principal:o}=t,r=t.each??8,l=oe(i)?.store??i,d=l.seenBy(o),a=l.schema,k=xe(l,o),c=s=>{let p=d.graph.getNode(s);return p&&k.has(p.kind)?p:void 0},f=l.allMutations(),g=new Map(f.map(s=>[s.name,s])),A=[],$=new Set,b=s=>{$.has(s.id)||($.add(s.id),A.push(s))},h=s=>s.slice(0,r),x=K(n).filter(s=>c(s)!==void 0);if(K(n).length>0&&x.length===0)return{target:n,candidates:[]};let m=x.length===1?c(x[0]):void 0,u=m?.kind??(n.on==="list"?n.kind:n.on==="lens"?n.kind??t.places?.find(s=>s.as===n.place)?.kind:void 0)??(n.on==="selection"?c(x[0])?.kind:void 0);if(u!==void 0&&!k.has(u))return{target:n,candidates:[]};let v=(s,p)=>`act:${s}${Object.keys(p).length>0?`:${Object.values(p).map(C=>String(C)).join(",")}`:""}`,P=(s,p,C,y,O)=>{s.destructive||Object.values(p).some(E=>typeof E=="string"&&l.graph.has(E)&&c(E)===void 0)||Se(l,{name:s.name,args:{...p}},o,y.length===0)&&b({type:"act",id:v(s.name,p),label:C,description:O??s.description??C,mutation:s.name,args:p,asks:y})};if(n.on!=="place"||t.acts)if(t.acts)for(let s of t.acts){let p=g.get(s.mutation);!p||s.destructive||n.on==="act"&&s.mutation!==n.act||P(p,s.args,s.label,(s.open??[]).filter(C=>!C.optional).map(C=>C.name),s.why)}else{let s=m?[m]:[];for(let p of f){if(n.on==="act"&&p.name!==n.act)continue;let C=p.input.shape??{},y=O=>Object.entries(C).filter(([E,w])=>E!==O&&w.safeParse?.(void 0).success===!1).map(([E])=>E);if(p.subject)for(let O of s)ie(a,p).includes(O.kind)&&P(p,{[p.subject.arg]:O.id},`${p.title??L(p.name)}: ${N(a,O)}`,y(p.subject.arg));else u!==void 0&&(p.creates??[]).includes(u)&&P(p,{},p.title??L(p.name),y(void 0))}}let W=A.filter(s=>s.type==="act");A.splice(0,A.length,...h(W));let q=(s,p)=>{let C=Me(a,f).get(s.kind),y=se(a,s.kind),O=ae(a,s.kind),E=[];for(let[w,j]of Object.entries(y)){if(p!==void 0?w!==p:O.has(w)||s[w]!==void 0)continue;let H=re(j),U=H?.type==="enum"?H.options??[]:H?.type==="boolean"?[!0,!1]:[];if(U.length===0)continue;let D=(C?.get(w)??[]).map(R=>g.get(R)).find(R=>R?.subject!==void 0&&Se(l,{name:R.name,args:{[R.subject.arg]:s.id,[w]:U.find(ge=>ge!==s[w])??U[0]}},o,!0));if(D?.subject)for(let R of U)s[w]!==R&&E.push({type:"fill",id:`fill:${s.id}:${w}:${Ae(R)}`,label:`${be(a,s.kind,w)}: ${Ae(R)}`,description:`Set ${be(a,s.kind,w).toLowerCase()} of ${N(a,s)} to ${Ae(R)}`,record:s.id,field:w,value:R,call:{name:D.name,args:{[D.subject.arg]:s.id,[w]:R}}})}for(let[w,j]of Object.entries(G(a,s.kind))){if(p!==void 0&&w!==p)continue;let H=j.to==="*"?[...k]:j.to.filter(I=>k.has(I)),U=new Set(d.graph.out(s.id,w).map(I=>I.id)),D=f.find(I=>(I.connects??[]).includes(w)&&I.subject!==void 0&&ie(a,I).includes(s.kind));if(!D?.subject)continue;let R=Re(D.input).find(I=>I.name!==D.subject.arg);if(!R)continue;let ge=H.flatMap(I=>R.kinds.length===0||R.kinds.includes(I)?d.graph.nodesOfKind(I):[]).filter(I=>I.id!==s.id&&!U.has(I.id)&&c(I.id)!==void 0);for(let I of h(ge)){let Pe={name:D.name,args:{[D.subject.arg]:s.id,[R.name]:I.id}};Se(l,Pe,o,!0)&&E.push({type:"fill",id:`fill:${s.id}:${w}:${I.id}`,label:`${L(w)}: ${N(a,I)}`,description:`Link ${N(a,s)} to ${N(a,I)}${j.description?` as ${j.description}`:""}`,record:s.id,field:w,value:I.id,call:Pe})}}return E};if(n.on==="field"&&m)for(let s of q(m,n.field))b(s);else if(m&&n.on==="record")for(let s of h(q(m)))b(s);let z=s=>{let p=_(a,s).toLowerCase(),C=[{type:"panel",id:`panel:${s}:list`,label:`A list of ${p}`,description:`Every ${me(a.tryDefinition(s),s).toLowerCase()} this viewer may see, as a list`,panel:{lens:"blocks",kind:s}}],y=ae(a,s);for(let[O,E]of Object.entries(se(a,s))){if(y.has(O))continue;let w=re(E),j=be(a,s,O).toLowerCase();if(w?.type==="enum")C.push({type:"panel",id:`panel:${s}:group:${O}`,label:`${F(p)} by ${j}`,description:`A list of ${p} grouped by ${j}`,panel:{lens:"blocks",kind:s,group:O}}),C.push({type:"panel",id:`panel:${s}:columns:${O}`,label:`Columns of ${p} by ${j}`,description:`${F(p)} in a column for each ${j}`,panel:{lens:"columns",kind:s,column:O}});else if(w?.type==="number"||w?.type==="integer"||w?.type==="date"||w?.type==="datetime"){let H=w.type==="date"||w.type==="datetime";C.push({type:"panel",id:`panel:${s}:sort:${O}`,label:`${F(p)} by ${j}`,description:`A list of ${p}, the ${H?"latest":"highest"} ${j} first`,panel:{lens:"blocks",kind:s,sort:{by:O,direction:"desc"}}}),H&&C.push({type:"panel",id:`panel:${s}:calendar:${O}`,label:`A calendar of ${p}`,description:`${F(p)} on a calendar by ${j}`,panel:{lens:"calendar",kind:s,start:O}})}}return C},ne=n.on==="place"?[...k]:u!==void 0?[u]:[];for(let s of ne)for(let p of h(z(s)))b(p);for(let s of h((t.places??[]).filter(p=>p.kind===void 0?n.on==="place":k.has(p.kind)&&(n.on==="place"||p.kind===u))))n.on==="lens"&&s.as===n.place||b({type:"place",id:`place:${s.as}`,label:s.title,description:`Go to ${s.title}`,place:s.as});if(m){let s=[];for(let[p,C]of Object.entries(G(a,m.kind)))for(let y of d.graph.out(m.id,p))c(y.id)&&s.push({type:"record",id:`record:${y.id}`,label:N(a,y),description:`${F(C.description??L(p))}: ${N(a,y)}`,record:y.id,relation:p});for(let p of a.kinds)for(let[C,y]of Object.entries(G(a,p)))if(!(y.to!=="*"&&!y.to.includes(m.kind)))for(let O of d.graph.in(m.id,C))O.kind===p&&c(O.id)&&s.push({type:"record",id:`record:${O.id}`,label:N(a,O),description:`${F(y.inverse??L(C))}: ${N(a,O)}`,record:O.id,relation:C});for(let p of h(s))b(p)}else if(n.on==="list"||n.on==="lens")for(let s of h(u!==void 0?d.graph.nodesOfKind(u):[]))c(s.id)&&b({type:"record",id:`record:${s.id}`,label:N(a,s),description:`Open ${N(a,s)}`,record:s.id});else if(n.on==="selection")for(let s of x){let p=c(s);b({type:"record",id:`record:${s}`,label:N(a,p),description:`Open ${N(a,p)}`,record:s})}return{target:n,candidates:A}}var F=e=>e&&`${e[0].toUpperCase()}${e.slice(1)}`,we=new WeakMap;function dn(e){let n=2166136261;for(let t=0;t<e.length;t++)n^=e.charCodeAt(t),n=Math.imul(n,16777619)>>>0;return n.toString(36)}function ln(e,n){let t=e,i=oe(t)?.store??t,o=i.schema,r=xe(i,n),d=i.allMutations().filter(b=>!b.destructive&&i.permits({name:b.name,args:{}},n).ok!==!1),a=`${[...r].join(",")}|${d.map(b=>b.name).join(",")}`,k=we.get(o)?.get(a);if(k)return k;let c=[...r].map(b=>{let h=ae(o,b),x={};for(let[u,v]of Object.entries(se(o,b))){if(h.has(u))continue;let P=re(v);P&&(x[u]=P.type==="enum"?`enum:${(P.options??[]).join("|")}`:P.type)}let m={};for(let[u,v]of Object.entries(G(o,b)))m[u]=v.to==="*"?[...r]:v.to.filter(P=>r.has(P));return{kind:b,noun:me(o.tryDefinition(b),b),plural:_(o,b),fields:x,relations:m}}),f=d.map(b=>({name:b.name,title:b.title??L(b.name),...b.subject?{on:ie(o,b).filter(h=>r.has(h))}:{}})),g={kinds:c,acts:f},A={version:dn(JSON.stringify(g)),...g},$=we.get(o)??new Map;return $.set(a,A),we.set(o,$),A}var cn=e=>e.name??e.id??e.kind;function Ge(e,n,t){let i=e,{principal:o}=t,r=oe(i)?.store??i,l=r.seenBy(o),d=r.schema,a=xe(r,o),k=m=>{let u=l.graph.getNode(m);return u&&a.has(u.kind)?u:void 0},c=m=>({id:m.id,kind:m.kind,label:N(d,m)}),f=K(n),g=f.length===1?k(f[0]):void 0,A=g?Object.fromEntries(Object.keys(se(d,g.kind)).filter(m=>!ae(d,g.kind).has(m)&&g[m]!==void 0&&m!=="label").map(m=>[m,g[m]])):{},$={on:n.on,...g?{record:{...c(g),fields:A}}:{},...n.on==="field"&&g?{field:n.field}:{},...n.on==="list"&&a.has(n.kind)?{kind:n.kind}:{},...n.on==="lens"?{place:n.place,...n.kind&&a.has(n.kind)?{kind:n.kind}:{}}:{},...n.on==="place"?{place:n.place}:{},...n.on==="act"?{act:n.act}:{}},b=[...new Set([...n.on==="selection"?n.ids:[],...t.selection??[]])].flatMap(m=>{let u=k(m);return u?[c(u)]:[]}),h=[];if(g){for(let m of Object.keys(G(d,g.kind)))for(let u of l.graph.out(g.id,m))k(u.id)&&h.push({...c(u),relation:m,direction:"out"});for(let m of d.kinds)for(let u of Object.keys(G(d,m)))for(let v of l.graph.in(g.id,u))v.kind===m&&k(v.id)&&h.push({...c(v),relation:u,direction:"in"})}let x=l.batches().filter(m=>!m.ops.every(ve)).slice(-(t.recent??6)).reverse().map(m=>({intent:m.intent,at:m.at,by:cn(m.author)}));return{...t.place!==void 0?{place:t.place}:{},target:$,selection:b,neighbors:h.slice(0,24),recent:x,schema:ln(r,o)}}function Q(e){if(!e.off)return e.fast??(e.decide?{model:e.name??"decide",decide:e.decide}:void 0)}function Be(e){return e.suggestOnOpen!==!1&&Q(e)!==void 0}function J(e){if(e.off)return;if(e.thinking)return e.thinking;let n=e.name??"model";if(e.complete){let t=e.complete;return{model:n,think:async({system:i,prompt:o})=>({text:await t(`${i}
1
+ var __graviewPreload=(base,files)=>{if(typeof document>"u")return;const asked=globalThis.__graviewPreloaded??=new Set;for(const file of files){const href=new URL(file,base).href;if(asked.has(href))continue;asked.add(href);const link=document.createElement("link");link.rel="modulepreload";link.href=href;document.head.append(link)}};import{a as Je}from"./chunk.NZJZIYDK.js";import{a as Ue}from"./chunk.3V2M3S4U.js";import{a as Le}from"./chunk.Y44TR4WG.js";import{a as oe}from"./chunk.TI4OSTQV.js";import{a as re}from"./chunk.QYWBQ5NX.js";import{e as ke}from"./chunk.QXARGANF.js";import{F as sn,I as je,O as Ne,Q as De,Y as He}from"./chunk.DNNL7F3P.js";import{Fb as Re,Kb as ie,Mb as Me,ba as te,da as L,fa as _,ia as Ie,ka as me,ob as ve,qc as Ee}from"./chunk.HBBVVALN.js";import{b as he}from"./chunk.AJZBJBMO.js";var an=e=>/^(?:aggregate|kind):([^,]+)$/.exec(e)?.[1];function Fe(e,n){let t=e.about??[];if(e.field!==void 0&&e.on!==void 0&&n(e.on))return{on:"field",id:e.on,field:e.field};let i=t.filter(n);if(i.length>1)return{on:"selection",ids:i};if(e.on!==void 0&&n(e.on))return{on:"record",id:e.on};if(i.length===1)return{on:"record",id:i[0]};let o=[e.on,...t].map(r=>r===void 0?void 0:an(r)).find(r=>r!==void 0);return e.place!==void 0?{on:"lens",place:e.place,...o?{kind:o}:{}}:o!==void 0?{on:"list",kind:o}:{on:"place",place:"home"}}var K=e=>e.on==="record"||e.on==="field"?[e.id]:e.on==="selection"?e.ids:e.on==="act"&&e.id!==void 0?[e.id]:[],se=(e,n)=>e.tryDefinition(n)?.fields?.shape??{},G=(e,n)=>e.tryDefinition(n)?.edges??{},ae=(e,n)=>new Set(e.tryDefinition(n)?.display?.hide??[]),N=(e,n)=>te(e.tryDefinition(n.kind),n),be=(e,n,t)=>Ie(e.tryDefinition(n),t)||L(t),Ae=e=>typeof e=="boolean"?e?"yes":"no":String(e);function xe(e,n){let t=e.kindsKeptFrom(n);return new Set(e.schema.kinds.filter(i=>!t.has(i)))}function Se(e,n,t,i){if(!e.permits(n,t).ok)return!1;if(!i)return!0;try{return e.previewAll([n],{author:t}).ops.length>0}catch{return!1}}function de(e,n,t){let i=e,{principal:o}=t,r=t.each??8,l=oe(i)?.store??i,d=l.seenBy(o),a=l.schema,k=xe(l,o),c=s=>{let p=d.graph.getNode(s);return p&&k.has(p.kind)?p:void 0},f=l.allMutations(),g=new Map(f.map(s=>[s.name,s])),A=[],$=new Set,b=s=>{$.has(s.id)||($.add(s.id),A.push(s))},h=s=>s.slice(0,r),x=K(n).filter(s=>c(s)!==void 0);if(K(n).length>0&&x.length===0)return{target:n,candidates:[]};let m=x.length===1?c(x[0]):void 0,u=m?.kind??(n.on==="list"?n.kind:n.on==="lens"?n.kind??t.places?.find(s=>s.as===n.place)?.kind:void 0)??(n.on==="selection"?c(x[0])?.kind:void 0);if(u!==void 0&&!k.has(u))return{target:n,candidates:[]};let v=(s,p)=>`act:${s}${Object.keys(p).length>0?`:${Object.values(p).map(C=>String(C)).join(",")}`:""}`,P=(s,p,C,y,O)=>{s.destructive||Object.values(p).some(E=>typeof E=="string"&&l.graph.has(E)&&c(E)===void 0)||Se(l,{name:s.name,args:{...p}},o,y.length===0)&&b({type:"act",id:v(s.name,p),label:C,description:O??s.description??C,mutation:s.name,args:p,asks:y})};if(n.on!=="place"||t.acts)if(t.acts)for(let s of t.acts){let p=g.get(s.mutation);!p||s.destructive||n.on==="act"&&s.mutation!==n.act||P(p,s.args,s.label,(s.open??[]).filter(C=>!C.optional).map(C=>C.name),s.why)}else{let s=m?[m]:[];for(let p of f){if(n.on==="act"&&p.name!==n.act)continue;let C=p.input.shape??{},y=O=>Object.entries(C).filter(([E,w])=>E!==O&&w.safeParse?.(void 0).success===!1).map(([E])=>E);if(p.subject)for(let O of s)ie(a,p).includes(O.kind)&&P(p,{[p.subject.arg]:O.id},`${p.title??L(p.name)}: ${N(a,O)}`,y(p.subject.arg));else u!==void 0&&(p.creates??[]).includes(u)&&P(p,{},p.title??L(p.name),y(void 0))}}let W=A.filter(s=>s.type==="act");A.splice(0,A.length,...h(W));let q=(s,p)=>{let C=Me(a,f).get(s.kind),y=se(a,s.kind),O=ae(a,s.kind),E=[];for(let[w,j]of Object.entries(y)){if(p!==void 0?w!==p:O.has(w)||s[w]!==void 0)continue;let H=re(j),U=H?.type==="enum"?H.options??[]:H?.type==="boolean"?[!0,!1]:[];if(U.length===0)continue;let D=(C?.get(w)??[]).map(R=>g.get(R)).find(R=>R?.subject!==void 0&&Se(l,{name:R.name,args:{[R.subject.arg]:s.id,[w]:U.find(ge=>ge!==s[w])??U[0]}},o,!0));if(D?.subject)for(let R of U)s[w]!==R&&E.push({type:"fill",id:`fill:${s.id}:${w}:${Ae(R)}`,label:`${be(a,s.kind,w)}: ${Ae(R)}`,description:`Set ${be(a,s.kind,w).toLowerCase()} of ${N(a,s)} to ${Ae(R)}`,record:s.id,field:w,value:R,call:{name:D.name,args:{[D.subject.arg]:s.id,[w]:R}}})}for(let[w,j]of Object.entries(G(a,s.kind))){if(p!==void 0&&w!==p)continue;let H=j.to==="*"?[...k]:j.to.filter(I=>k.has(I)),U=new Set(d.graph.out(s.id,w).map(I=>I.id)),D=f.find(I=>(I.connects??[]).includes(w)&&I.subject!==void 0&&ie(a,I).includes(s.kind));if(!D?.subject)continue;let R=Re(D.input).find(I=>I.name!==D.subject.arg);if(!R)continue;let ge=H.flatMap(I=>R.kinds.length===0||R.kinds.includes(I)?d.graph.nodesOfKind(I):[]).filter(I=>I.id!==s.id&&!U.has(I.id)&&c(I.id)!==void 0);for(let I of h(ge)){let Pe={name:D.name,args:{[D.subject.arg]:s.id,[R.name]:I.id}};Se(l,Pe,o,!0)&&E.push({type:"fill",id:`fill:${s.id}:${w}:${I.id}`,label:`${L(w)}: ${N(a,I)}`,description:`Link ${N(a,s)} to ${N(a,I)}${j.description?` as ${j.description}`:""}`,record:s.id,field:w,value:I.id,call:Pe})}}return E};if(n.on==="field"&&m)for(let s of q(m,n.field))b(s);else if(m&&n.on==="record")for(let s of h(q(m)))b(s);let z=s=>{let p=_(a,s).toLowerCase(),C=[{type:"panel",id:`panel:${s}:list`,label:`A list of ${p}`,description:`Every ${me(a.tryDefinition(s),s).toLowerCase()} this viewer may see, as a list`,panel:{lens:"blocks",kind:s}}],y=ae(a,s);for(let[O,E]of Object.entries(se(a,s))){if(y.has(O))continue;let w=re(E),j=be(a,s,O).toLowerCase();if(w?.type==="enum")C.push({type:"panel",id:`panel:${s}:group:${O}`,label:`${F(p)} by ${j}`,description:`A list of ${p} grouped by ${j}`,panel:{lens:"blocks",kind:s,group:O}}),C.push({type:"panel",id:`panel:${s}:columns:${O}`,label:`Columns of ${p} by ${j}`,description:`${F(p)} in a column for each ${j}`,panel:{lens:"columns",kind:s,column:O}});else if(w?.type==="number"||w?.type==="integer"||w?.type==="date"||w?.type==="datetime"){let H=w.type==="date"||w.type==="datetime";C.push({type:"panel",id:`panel:${s}:sort:${O}`,label:`${F(p)} by ${j}`,description:`A list of ${p}, the ${H?"latest":"highest"} ${j} first`,panel:{lens:"blocks",kind:s,sort:{by:O,direction:"desc"}}}),H&&C.push({type:"panel",id:`panel:${s}:calendar:${O}`,label:`A calendar of ${p}`,description:`${F(p)} on a calendar by ${j}`,panel:{lens:"calendar",kind:s,start:O}})}}return C},ne=n.on==="place"?[...k]:u!==void 0?[u]:[];for(let s of ne)for(let p of h(z(s)))b(p);for(let s of h((t.places??[]).filter(p=>p.kind===void 0?n.on==="place":k.has(p.kind)&&(n.on==="place"||p.kind===u))))n.on==="lens"&&s.as===n.place||b({type:"place",id:`place:${s.as}`,label:s.title,description:`Go to ${s.title}`,place:s.as});if(m){let s=[];for(let[p,C]of Object.entries(G(a,m.kind)))for(let y of d.graph.out(m.id,p))c(y.id)&&s.push({type:"record",id:`record:${y.id}`,label:N(a,y),description:`${F(C.description??L(p))}: ${N(a,y)}`,record:y.id,relation:p});for(let p of a.kinds)for(let[C,y]of Object.entries(G(a,p)))if(!(y.to!=="*"&&!y.to.includes(m.kind)))for(let O of d.graph.in(m.id,C))O.kind===p&&c(O.id)&&s.push({type:"record",id:`record:${O.id}`,label:N(a,O),description:`${F(y.inverse??L(C))}: ${N(a,O)}`,record:O.id,relation:C});for(let p of h(s))b(p)}else if(n.on==="list"||n.on==="lens")for(let s of h(u!==void 0?d.graph.nodesOfKind(u):[]))c(s.id)&&b({type:"record",id:`record:${s.id}`,label:N(a,s),description:`Open ${N(a,s)}`,record:s.id});else if(n.on==="selection")for(let s of x){let p=c(s);b({type:"record",id:`record:${s}`,label:N(a,p),description:`Open ${N(a,p)}`,record:s})}return{target:n,candidates:A}}var F=e=>e&&`${e[0].toUpperCase()}${e.slice(1)}`,we=new WeakMap;function dn(e){let n=2166136261;for(let t=0;t<e.length;t++)n^=e.charCodeAt(t),n=Math.imul(n,16777619)>>>0;return n.toString(36)}function ln(e,n){let t=e,i=oe(t)?.store??t,o=i.schema,r=xe(i,n),d=i.allMutations().filter(b=>!b.destructive&&i.permits({name:b.name,args:{}},n).ok!==!1),a=`${[...r].join(",")}|${d.map(b=>b.name).join(",")}`,k=we.get(o)?.get(a);if(k)return k;let c=[...r].map(b=>{let h=ae(o,b),x={};for(let[u,v]of Object.entries(se(o,b))){if(h.has(u))continue;let P=re(v);P&&(x[u]=P.type==="enum"?`enum:${(P.options??[]).join("|")}`:P.type)}let m={};for(let[u,v]of Object.entries(G(o,b)))m[u]=v.to==="*"?[...r]:v.to.filter(P=>r.has(P));return{kind:b,noun:me(o.tryDefinition(b),b),plural:_(o,b),fields:x,relations:m}}),f=d.map(b=>({name:b.name,title:b.title??L(b.name),...b.subject?{on:ie(o,b).filter(h=>r.has(h))}:{}})),g={kinds:c,acts:f},A={version:dn(JSON.stringify(g)),...g},$=we.get(o)??new Map;return $.set(a,A),we.set(o,$),A}var cn=e=>e.name??e.id??e.kind;function Ge(e,n,t){let i=e,{principal:o}=t,r=oe(i)?.store??i,l=r.seenBy(o),d=r.schema,a=xe(r,o),k=m=>{let u=l.graph.getNode(m);return u&&a.has(u.kind)?u:void 0},c=m=>({id:m.id,kind:m.kind,label:N(d,m)}),f=K(n),g=f.length===1?k(f[0]):void 0,A=g?Object.fromEntries(Object.keys(se(d,g.kind)).filter(m=>!ae(d,g.kind).has(m)&&g[m]!==void 0&&m!=="label").map(m=>[m,g[m]])):{},$={on:n.on,...g?{record:{...c(g),fields:A}}:{},...n.on==="field"&&g?{field:n.field}:{},...n.on==="list"&&a.has(n.kind)?{kind:n.kind}:{},...n.on==="lens"?{place:n.place,...n.kind&&a.has(n.kind)?{kind:n.kind}:{}}:{},...n.on==="place"?{place:n.place}:{},...n.on==="act"?{act:n.act}:{}},b=[...new Set([...n.on==="selection"?n.ids:[],...t.selection??[]])].flatMap(m=>{let u=k(m);return u?[c(u)]:[]}),h=[];if(g){for(let m of Object.keys(G(d,g.kind)))for(let u of l.graph.out(g.id,m))k(u.id)&&h.push({...c(u),relation:m,direction:"out"});for(let m of d.kinds)for(let u of Object.keys(G(d,m)))for(let v of l.graph.in(g.id,u))v.kind===m&&k(v.id)&&h.push({...c(v),relation:u,direction:"in"})}let x=l.batches().filter(m=>!m.ops.every(ve)).slice(-(t.recent??6)).reverse().map(m=>({intent:m.intent,at:m.at,by:cn(m.author)}));return{...t.place!==void 0?{place:t.place}:{},target:$,selection:b,neighbors:h.slice(0,24),recent:x,schema:ln(r,o)}}function Q(e){if(!e.off)return e.fast??(e.decide?{model:e.name??"decide",decide:e.decide}:void 0)}function Be(e){return e.suggestOnOpen!==!1&&Q(e)!==void 0}function J(e){if(e.off)return;if(e.thinking)return e.thinking;let n=e.name??"model";if(e.complete){let t=e.complete;return{model:n,think:async({system:i,prompt:o})=>({text:await t(`${i}
2
2
 
3
- ${o}`)})}}if(e.turn){let t=e.turn;return{model:n,think:async({system:i,prompt:o})=>({text:await t({system:i,messages:[{role:"user",content:o}],tools:[],call:async()=>({error:"No tools here."})})})}}}var Oe=(e,n,t)=>e?n/1e6*(e.inputPerMillion??0)+t/1e6*(e.outputPerMillion??0):void 0,Ce=()=>`ai-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`;function fn(e,n,t=[]){let i=o=>{let r=e.graph.getNode(o);return r?te(e.schema.tryDefinition(r.kind),r):"a record"};switch(n.on){case"record":return i(n.id);case"field":return`${i(n.id)} \xB7 ${n.field}`;case"selection":return`${n.ids.length} records`;case"list":return e.schema.tryDefinition(n.kind)?_(e.schema,n.kind):n.kind;case"lens":case"place":return t.find(o=>o.as===n.place)?.title??(n.place==="home"?"Home":n.place);case"act":return n.act}}var We=e=>e.type!=="act"||e.asks.length===0,$e=(e,n)=>({id:e.id,type:e.type,label:e.label,...n!==void 0?{confidence:n}:{}});function Y(e,n){let t=n.interaction??Ce(),i=de(n.store,n.target,{principal:n.principal,...n.acts?{acts:n.acts}:{},...n.places?{places:n.places}:{}}),o=Ge(n.store,n.target,{principal:n.principal,...n.place?{place:n.place}:{},...n.selection?{selection:n.selection}:{}}),r=[];return{id:t,catalog:i,state:o,entry:{id:t,at:new Date().toISOString(),by:n.by??n.principal,target:n.target,targetLabel:fn(n.store,n.target,n.places)},usage:r,meter:l=>{r.push(l),e.meter?.({...l,interaction:t})}}}async function ce(e,n,t,i){let o=await e.decide(n,t),{inputTokens:r,outputTokens:l}=o.usage,d=Oe(e.price,r,l);return i({tier:"fast",model:e.model,inputTokens:r,outputTokens:l,...d!==void 0?{costUsd:d}:{}}),o.answers}async function V(e,n,t,i,o){let r=await e.think({system:n,prompt:t,state:i.state,catalog:i.catalog}),l=r.usage?.inputTokens,d=r.usage?.outputTokens,a=r.usage?.costUsd??(l!==void 0?Oe(e.price,l,d??0):void 0);return o({tier:"thinking",model:e.model,...l!==void 0?{inputTokens:l}:{},...d!==void 0?{outputTokens:d}:{},...a!==void 0?{costUsd:a}:{}}),Ue(r.text)}function fe(e,n){let t=new Map(e.map((i,o)=>[`c${o+1}`,i]));return{question:{type:"choice",instructions:n,criteria:Object.fromEntries([...t].map(([i,o])=>[i,`${o.label} \u2014 ${o.description}`]))},of:i=>t.get(i)}}function ue(e,n,t){if(e?.type!=="choice")return[];let i=e,o=Object.entries(i.probabilities).sort((r,l)=>l[1]-r[1]);return o.some(([r])=>r===i.choice)||o.unshift([i.choice,i.confidence]),o.flatMap(([r,l])=>{let d=n(r);return d?[{candidate:d,confidence:l}]:[]}).slice(0,t)}var M=(e,n,t,i)=>({interaction:{...e.entry,ask:{kind:t,said:n??""},offered:[],outcome:"failed",failed:i,usage:[...e.usage]},offers:[]}),X="AI isn't on here.";async function qe(e,n,t=3){let i=Y(e,n),o=n.said??"Suggest",r=i.catalog.candidates.filter(We).slice(0,24);if(r.length===0)return{interaction:{...i.entry,ask:{kind:"suggest",said:o},offered:[],outcome:"offered",usage:[]},offers:[]};let l=Q(e),d=J(e),a=[];try{if(l){let{question:k,of:c}=fe(r,"Which of these would the person most likely want to do next, here?"),f=await ce(l,{...i.state,candidates:r.map(g=>({id:g.id,type:g.type,says:g.description}))},{next:k},i.meter);a=ue(f.next,c,t)}else if(d){let k=await V(d,'You suggest what a person most likely wants to do next in an app. Answer only JSON: {"pick": [candidate ids, best first]}. Pick only ids from the candidates.',JSON.stringify({state:i.state,candidates:r.map(f=>({id:f.id,says:f.description}))}),i,i.meter);a=(Array.isArray(k?.pick)?k.pick.filter(f=>typeof f=="string"):[]).flatMap(f=>r.filter(g=>g.id===f)).slice(0,t).map(f=>({candidate:f}))}else return M(i,o,"suggest",X)}catch(k){return M(i,o,"suggest",k instanceof Error?k.message:String(k))}return{interaction:{...i.entry,ask:{kind:"suggest",said:o},offered:a.map(({candidate:k,confidence:c})=>$e(k,c)),outcome:"offered",usage:[...i.usage]},offers:a.map(({candidate:k})=>k)}}async function ze(e,n){let t=Y(e,n),i=n.said??"Fill in",o=t.catalog.candidates.filter(f=>f.type==="fill"),r=new Map;for(let f of o)r.set(f.field,[...r.get(f.field)??[],f]);if(r.size===0)return{interaction:{...t.entry,ask:{kind:"fill",said:i},offered:[],outcome:"offered",usage:[]},offers:[]};let l=Q(e),d=J(e),a=[];try{if(l){let f=[...r].map(([A,$],b)=>({key:`f${b+1}`,field:A,...fe($,`Which value fits "${A}" best for this record?`)})),g=await ce(l,t.state,Object.fromEntries(f.map(A=>[A.key,A.question])),t.meter);for(let A of f){let $=!un(n.store,n.target,A.field)&&pn(n.store,n.target,A.field)!=="one";a.push(...ue(g[A.key],A.of,$?3:1).filter((b,h)=>h===0||b.confidence>=.4))}}else if(d){let f=await V(d,`You fill in a record's fields in an app. Answer only JSON: {"fills": [candidate ids]}, at most one per field, only ids from the candidates.`,JSON.stringify({state:t.state,candidates:o.map($=>({id:$.id,says:$.description}))}),t,t.meter),g=Array.isArray(f?.fills)?f.fills.filter($=>typeof $=="string"):[],A=new Set;for(let $ of g){let b=o.find(h=>h.id===$);b?.type==="fill"&&!A.has(b.field)&&(A.add(b.field),a.push({candidate:b}))}}else return M(t,i,"fill",X)}catch(f){return M(t,i,"fill",f instanceof Error?f.message:String(f))}let k=t.usage.at(-1)?.model,c=Z(n.store,{interaction:t.id,target:n.target,basis:i,...k?{model:k}:{},proposals:a.flatMap(({candidate:f,confidence:g})=>f.type==="fill"?[{id:f.id,label:f.label,said:f.description,call:f.call,record:f.record,field:f.field,...g!==void 0?{confidence:g}:{}}]:[])},n.principal);return{interaction:{...t.entry,ask:{kind:"fill",said:i},offered:c.proposals.map(f=>({id:f.id,type:"fill",label:f.label,...f.confidence!==void 0?{confidence:f.confidence}:{}})),outcome:"offered",usage:[...t.usage]},offers:[],...c.proposals.length>0?{ghost:c}:{}}}function un(e,n,t){let i=n.on==="record"||n.on==="field"?n.id:void 0,o=i?e.graph.getNode(i)?.kind:void 0,r=(o?e.schema.tryDefinition(o)?.fields?.shape:void 0)??{};return t in r}function pn(e,n,t){let i=n.on==="record"||n.on==="field"?n.id:void 0,o=i?e.graph.getNode(i)?.kind:void 0;return o?e.schema.tryDefinition(o)?.edges?.[t]?.cardinality:void 0}async function _e(e,n){let t=Y(e,n),i=n.said??"Add one",o=new Set(n.store.allMutations().filter(c=>(c.creates??[]).length>0).map(c=>c.name)),r=t.catalog.candidates.filter(c=>c.type==="act"&&c.asks.length>0&&o.has(c.mutation));if(r.length===0)return M(t,i,"record","Nothing here makes a record.");let l=J(e);if(!l)return M(t,i,"record",X);let d;try{let c=await V(l,'You propose one new record for an app by filling in an act. Answer only JSON: {"act": a candidate id, "args": {argument: value}}. Use only the candidates, and fill every argument the act asks for with a value that fits the state.',JSON.stringify({ask:i,state:t.state,candidates:r.map(A=>({id:A.id,says:A.description,asks:A.asks}))}),t,t.meter),f=r.find(A=>A.id===c?.act),g=typeof c?.args=="object"&&c.args!==null?c.args:{};f&&(d={act:f,args:Object.fromEntries(Object.entries(g).filter(([A])=>f.asks.includes(A)))})}catch(c){return M(t,i,"record",c instanceof Error?c.message:String(c))}if(!d)return M(t,i,"record","The model named no act this app has here.");let a=t.usage.at(-1)?.model,k=Z(n.store,{interaction:t.id,target:n.target,basis:i,...a?{model:a}:{},proposals:[{id:d.act.id,label:d.act.label,said:d.act.description,call:{name:d.act.mutation,args:{...d.act.args,...d.args}}}]},n.principal);return k.proposals.length===0?M(t,i,"record","What the model proposed could not be made here."):{interaction:{...t.entry,ask:{kind:"record",said:i},offered:k.proposals.map(c=>({id:c.id,type:"act",label:c.said})),outcome:"offered",usage:[...t.usage]},offers:[d.act],ghost:k}}async function Ke(e,n){let t=Y(e,n),i=n.said??"Make a panel",o=t.catalog.candidates.filter(c=>c.type==="panel");if(o.length===0)return M(t,i,"panel","Nothing here can be drawn as a panel.");let r=Q(e),l=J(e),d;try{if(l){let c=await V(l,'You choose a panel to draw in an app. Answer only JSON: {"panel": a candidate id, "title": a short title}. Choose only among the candidates.',JSON.stringify({ask:i,state:t.state,candidates:o.map(g=>({id:g.id,says:g.description}))}),t,t.meter),f=o.find(g=>g.id===c?.panel);f&&(d={panel:f,...typeof c?.title=="string"&&c.title.trim()?{title:c.title.trim().slice(0,60)}:{}})}else if(r){let{question:c,of:f}=fe(o,`Which panel answers this best: ${i}`),g=ue((await ce(r,t.state,{panel:c},t.meter)).panel,f,1)[0];g?.candidate.type==="panel"&&(d={panel:g.candidate,confidence:g.confidence})}else return M(t,i,"panel",X)}catch(c){return M(t,i,"panel",c instanceof Error?c.message:String(c))}if(!d)return M(t,i,"panel","The model named no panel this app can draw.");let a=d.title??d.panel.label,k={title:a,recipe:{...d.panel.panel,title:a}};return{interaction:{...t.entry,ask:{kind:"panel",said:i},offered:[$e(d.panel,d.confidence)],outcome:"drawn",panel:k,usage:[...t.usage]},offers:[d.panel],panel:k}}function yn(e){return e.off?void 0:e.answer}var gn=`You answer a person's question about what they are looking at in an app, from the state given and nothing else. Answer only JSON: {"answer": one to three short sentences, "pick": [candidate ids that act on the answer, best first, at most three]}. Pick only ids from the candidates, and none when nothing fits. Never say an id to the person.`;async function Rn(e,n){let t=Y(e,n),i=n.said.trim(),o=t.catalog.candidates.filter(h=>We(h)||h.type==="panel"||h.type==="place"||h.type==="record").slice(0,32),r=yn(e),l=J(e),d=Q(e),a="",k=[],c=h=>h.flatMap(x=>o.filter(m=>m.id===x)).slice(0,3).map(x=>({candidate:x}));try{if(r){let h=await r.answer({said:i,target:n.target,targetLabel:t.entry.targetLabel,state:t.state,catalog:{target:t.catalog.target,candidates:o},...n.follows?{follows:n.follows}:{}}),x=h.usage?.inputTokens,m=h.usage?.outputTokens,u=h.usage?.costUsd??(x!==void 0?Oe(r.price,x,m??0):void 0);t.meter({tier:"thinking",model:r.model,...x!==void 0?{inputTokens:x}:{},...m!==void 0?{outputTokens:m}:{},...u!==void 0?{costUsd:u}:{}}),a=typeof h.text=="string"?h.text.trim():"",k=c(h.pick??[])}else if(l){let h=await V(l,gn,JSON.stringify({ask:i,about:t.entry.targetLabel,...n.follows?{follows:n.follows}:{},state:t.state,candidates:o.map(x=>({id:x.id,says:x.description}))}),t,t.meter);a=typeof h?.answer=="string"?h.answer.trim():"",k=c(Array.isArray(h?.pick)?h.pick:[])}else if(d&&o.length>0){let{question:h,of:x}=fe(o,`Which of these best answers, or acts on: ${i}`),m=await ce(d,{...t.state,asked:i,candidates:o.map(u=>({id:u.id,type:u.type,says:u.description}))},{answer:h},t.meter);k=ue(m.answer,x,3),a=k.length>0?`These fit \u201C${i}\u201D.`:""}else return M(t,i,"ask",X)}catch(h){return M(t,i,"ask",h instanceof Error?h.message:String(h))}if(!a&&k.length===0)return M(t,i,"ask","The AI had no answer to that here.");let f=t.usage.at(-1)?.model,g=k.flatMap(({candidate:h,confidence:x})=>{let m=le(h);return m?[{...m,...x!==void 0?{confidence:x}:{}}]:[]}),A=g.length>0?Z(n.store,{interaction:t.id,target:n.target,basis:i,...f?{model:f}:{},proposals:g},n.principal):void 0,$=k.map(({candidate:h})=>h).filter(h=>le(h)===void 0),b=[...$.map(h=>$e(h,k.find(x=>x.candidate===h)?.confidence)),...(A?.proposals??[]).map(h=>({id:h.id,type:h.field!==void 0?"fill":"act",label:h.label,...h.confidence!==void 0?{confidence:h.confidence}:{}}))];return{interaction:{...t.entry,ask:{kind:"ask",said:i},offered:b,outcome:"offered",...a?{answer:a}:{},usage:[...t.usage]},offers:$,...A&&A.proposals.length>0?{ghost:A}:{},...a?{answer:a}:{}}}function Z(e,n,t){let i=n.proposals.flatMap(o=>{try{let r=e.previewAll([o.call],{author:t}),l=r.ops.map(d=>d.intent).join("; ");return r.ops.length>0?[{...o,said:l||o.said}]:[]}catch{return[]}});return{...n,proposals:i}}function le(e){if(e.type==="fill")return{id:e.id,label:e.label,said:e.description,call:e.call,record:e.record,field:e.field};if(e.type==="act"&&e.asks.length===0)return{id:e.id,label:e.label,said:e.description,call:{name:e.mutation,args:{...e.args}}}}function Qe(e,n,t){let i=n.proposals.filter(r=>t.ids===void 0||t.ids.includes(r.id));if(i.length===0)return{ok:!1,refused:"Nothing was chosen."};let o=i.flatMap(r=>r.confidence===void 0?[]:[r.confidence]);try{let l=e.applyAll(i.map(d=>d.call),{author:t.author,via:`ai:${n.interaction}`,intent:n.basis,lineage:{basis:`Asked \u201C${n.basis}\u201D`,...n.model?{model:n.model}:{},...o.length>0?{confidence:Math.min(...o)}:{},interaction:n.interaction}}).ops[0]?.batch;return l?{ok:!0,batch:l,accepted:i.map(d=>d.id)}:{ok:!1,refused:"That changes nothing now."}}catch(r){return{ok:!1,refused:r instanceof Error?r.message:String(r)}}}function Ye(e,n,t){let i=e.ask.kind==="suggest"?n.length>0:e.offered.length>0&&e.offered.every(o=>n.includes(o.id));return{...e,outcome:i?"accepted":"partly",accepted:n,batches:[...e.batches??[],t]}}var Ve=e=>({...e,outcome:"dismissed"});var T=he(sn(),1);var S=he(De(),1);function Ze(e,n,t){let i=n.on==="selection"?n.ids:n.on==="record"||n.on==="field"?[n.id]:[],o=i.length>0?Je(e.store,i,{principal:e.principal,...i.length===1?{focus:i[0]}:{}}).affordances.map(r=>({mutation:r.mutation,label:r.label,args:r.args,open:r.open,why:r.why,...r.destructive?{destructive:!0}:{}})):void 0;return{store:e.store,target:n,principal:e.principal,interaction:Ce(),places:e.places,selection:e.selection,...o?{acts:o}:{},...e.place?{place:e.place}:{},...t?{said:t}:{}}}async function en(e,n,t){let i=await (__graviewPreload(import.meta.url,["./chunk.6KMXLUOS.js","./chunk.G4JJXA63.js","./chunk.LA7535VO.js","./chunk.ZEW2OOZ5.js","./chunk.ACEYGWMO.js","./chunk.3PT55HXT.js","./chunk.Q5WEOX3Q.js","./chunk.CRPT3ZT3.js","./chunk.LNNFNJKN.js","./chunk.EBLKEQ7O.js","./chunk.WVUJXDXZ.js","./chunk.VHWUGSFW.js","./chunk.P75TPZWT.js","./chunk.6W7J76TK.js","./chunk.FUR4IHWG.js","./chunk.2B4WVCVV.js","./chunk.AAZFVCSP.js","./chunk.GZLYTPE7.js","./chunk.4B73P2WA.js","./chunk.IMRCAU4T.js","./chunk.F5BCCGFK.js","./chunk.AJZBJBMO.js"]),import("./chunk.7G3B5QPH.js")),o=i.recipeDraft(n.recipe,{app:e.app,sight:i.draftSight(e.app,e.principal)});if(i.isDraftFailure(o))return o.failed;t?.(),e.seatTalk.setDraft(o,null),e.goTo.draft?.(),nn()}function nn(e=180){if(typeof document>"u")return;let n=document.querySelector('[data-testid="draft-keep"]'),t=document.activeElement,i=!t||t===document.body||t.closest?.("[inert]")!==null;if(n){i&&n.focus();return}e>0&&requestAnimationFrame(()=>nn(e-1))}async function ee(e,n,t,i,o){let r=Ze(e,t,i),l=n==="suggest"?await qe(e.ai,r):n==="fill"?await ze(e.ai,r):n==="record"?await _e(e.ai,r):await Ke(e.ai,r);if(l.interaction.outcome==="failed")return n!=="suggest"&&e.desk.record(l.interaction),l;let d=a=>{let k={...l.interaction,outcome:"failed",failed:a};return e.desk.record(k),{...l,interaction:k}};if(n==="fill"||n==="record"){if(!l.ghost||l.ghost.proposals.length===0)return d("Nothing here could be filled in.");o?.(),e.desk.setGhost({ghost:l.ghost}),e.desk.record(l.interaction)}if(n==="panel"&&l.panel){let a=await en(e,l.panel,o);if(a)return d(a);e.desk.record(l.interaction)}return l}var Te=new WeakMap,hn=64,Xe=new WeakMap;function mn(e){let n=Xe.get(e);if(!n){let t=n={n:0};Xe.set(e,t),e.subscribe(()=>void(t.n+=1))}return n.n}var tn=(e,n)=>{let t=K(n);return t.length>0?t.map(i=>e.graph.getNode(i)):[mn(e)]},on=(e,n)=>JSON.stringify({target:n,seat:e.principal}),rn=(e,n,t)=>{let i=tn(e.store,n);return t.schema===e.store.schema&&t.ai===e.ai&&i.length===t.depends.length&&i.every((o,r)=>o===t.depends[r])};function kn(e,n){let t=Te.get(e.store)?.get(on(e,n));return t?.result!==void 0&&rn(e,n,t)?t.result:void 0}function bn(e,n){let t=Te.get(e.store);t||Te.set(e.store,t=new Map);let i=on(e,n),o=t.get(i);if(o&&rn(e,n,o))return o.result?Promise.resolve(o.result):o.asked;let r=ee(e,"suggest",n),l={schema:e.store.schema,ai:e.ai,depends:tn(e.store,n),asked:r};t.delete(i),t.set(i,l),t.size>hn&&t.delete(t.keys().next().value);let d=t;return r.then(a=>{a.interaction.outcome!=="failed"?l.result=a:d.get(i)===l&&d.delete(i)}),r}async function An(e,n,t,i){let o=n.interaction,r=le(t);if(r){let l=o.usage?.at(-1)?.model,d=o.offered.find(k=>k.id===t.id)?.confidence,a=Z(e.store,{interaction:o.id,target:o.target,basis:`${o.ask.said}: ${t.label}`,...l?{model:l}:{},proposals:[{...r,...d!==void 0?{confidence:d}:{}}]},e.principal);if(a.proposals.length===0){let k="That can't be done now.";return e.desk.record({...o,outcome:"failed",failed:k}),k}i?.(),e.desk.setGhost({ghost:a}),e.desk.record(o);return}if(t.type==="panel"){let l=t.label,d={title:l,recipe:{...t.panel,title:l}},a=await en(e,d,i);return e.desk.record(a?{...o,outcome:"failed",failed:a}:{...o,outcome:"drawn",accepted:[t.id],panel:d}),a}i?.(),t.type==="place"?e.goTo.place(t.place):t.type==="record"&&e.goTo.record(t.record),e.desk.record({...o,outcome:"accepted",accepted:[t.id]})}async function Fn(e,n){if(n.ask.kind==="ask")return ke(e.desk,{target:n.target,asked:n.ask.said}),null;let t=n.ask.kind==="panel"||n.ask.kind==="record"?n.ask.kind:"fill";return ee(e,t,n.target,n.ask.said)}var B={padding:"5px 10px",fontSize:"0.875rem",borderRadius:8,width:"100%",textAlign:"left",borderWidth:1,borderStyle:"solid",borderColor:"transparent",background:"none",boxShadow:"none"},pe={margin:0,padding:"4px 10px",fontSize:"0.8125rem",color:"var(--graview-ink-muted)"};function Gn({target:e,close:n}){let t=Le(),i=(0,T.useMemo)(()=>Fe(e,y=>t.store.graph.has(y)),[e,t.store]),o=(0,T.useMemo)(()=>{let y=Ze(t,i);return de(t.store,i,{principal:t.principal,places:t.places,...y.acts?{acts:y.acts}:{}})},[t,i]),r=o.candidates.some(y=>y.type==="fill"),l=o.candidates.some(y=>y.type==="panel"),d=(0,T.useMemo)(()=>new Set(t.store.allMutations().filter(y=>(y.creates??[]).length>0).map(y=>y.name)),[t.store]),a=J(t.ai)!==void 0&&o.candidates.some(y=>y.type==="act"&&y.asks.length>0&&d.has(y.mutation)),k=Be(t.ai),c=kn(t,i),f=JSON.stringify(i),[g,A]=(0,T.useState)(!1),[$,b]=(0,T.useState)(null),[h,x]=(0,T.useState)(k&&c===void 0);(0,T.useEffect)(()=>{if(c!==void 0||!(k||g))return;let y=!0;return x(!0),bn(t,i).then(O=>{y&&(b(O),x(!1))}),()=>{y=!1}},[f,g]);let m=c??$,u=m?.interaction.outcome==="failed"?m.interaction.failed??"The AI could not suggest anything here.":null,v=(0,T.useRef)(!1),P=(0,T.useRef)(null);(0,T.useLayoutEffect)(()=>{m===null||!v.current||(v.current=!1,P.current?.querySelector("button")?.focus())},[m]);let W=(0,T.useRef)(!0);(0,T.useEffect)(()=>()=>{W.current=!1},[]);let[q,z]=(0,T.useState)(!1),[ne,s]=(0,T.useState)(null),p=y=>{if(q)return;z(!0),s(null);let O=!1;y(()=>{O=!0,n()}).then(w=>{W.current&&(z(!1),w?s(w):O||n())},w=>{W.current&&(z(!1),s(w instanceof Error?w.message:String(w)))})},C=y=>y.interaction.outcome==="failed"?y.interaction.failed??"The AI could not do that here.":void 0;return(0,S.jsxs)("div",{ref:P,"data-testid":"inline-ai",style:{display:"grid",gap:2},children:[h&&!g?(0,S.jsx)("p",{role:"status","data-testid":"inline-ai-thinking",style:pe,children:"Thinking\u2026"}):q?(0,S.jsx)("p",{role:"status","data-testid":"inline-ai-asking",style:pe,children:"Asking\u2026"}):ne?(0,S.jsx)("p",{role:"alert","data-testid":"inline-ai-failed",style:{...pe,color:"var(--graview-warn)"},children:ne}):u?(0,S.jsx)("p",{role:"status",style:pe,children:u}):null,(0,S.jsxs)("ul",{style:{margin:0,padding:0,listStyle:"none",display:"flex",flexDirection:"column",gap:2},children:[(m?.offers??[]).map(y=>(0,S.jsx)("li",{children:(0,S.jsxs)("button",{type:"button","data-menu-item":`ai-offer:${y.id}`,"data-ai-offer":y.id,"data-ai-offer-type":y.type,onClick:()=>p(O=>An(t,m,y,O)),style:B,children:[y.label,(0,S.jsxs)("span",{style:{color:"var(--graview-ink-faint)"},children:[" \xB7 ",y.type==="panel"?"a panel":y.type==="place"?"go there":y.type==="record"?"open it":"suggested"]})]})},y.id)),!k&&m===null?(0,S.jsx)("li",{children:(0,S.jsx)("button",{type:"button","data-menu-item":"ai-suggest","aria-disabled":g||void 0,onClick:y=>{g||(v.current=document.activeElement===y.currentTarget,A(!0))},style:B,children:g?"Thinking\u2026":"Suggest\u2026"})}):null,r?(0,S.jsx)("li",{children:(0,S.jsx)("button",{type:"button","data-menu-item":"ai-fill",onClick:()=>p(async y=>C(await ee(t,"fill",i,"Fill in",y))),style:B,children:"Fill in with AI"})}):null,a?(0,S.jsx)("li",{children:(0,S.jsx)("button",{type:"button","data-menu-item":"ai-record",onClick:()=>p(async y=>C(await ee(t,"record",i,"Add one",y))),style:B,children:"Add one with AI"})}):null,l?(0,S.jsx)("li",{children:(0,S.jsx)("button",{type:"button","data-menu-item":"ai-panel",onClick:()=>p(async y=>C(await ee(t,"panel",i,"Draw a panel",y))),style:B,children:"Draw a panel"})}):null,(0,S.jsx)("li",{children:(0,S.jsx)("button",{type:"button","data-menu-item":"ai-ask",onClick:()=>{let y=document.activeElement;n(),ke(t.desk,{target:i,returnTo:y instanceof HTMLElement&&y!==document.body?y:null})},style:B,children:"Ask about this\u2026"})})]})]})}var ye={display:"inline-flex",alignItems:"center",minHeight:28,padding:"2px 10px",fontSize:"0.8125rem",borderRadius:8};function Bn({placement:e="picture"}){let{store:n,principal:t,aiDesk:i}=He(),o=Ne(n,t),{ghost:r,entries:l}=je(i),[d,a]=(0,T.useState)(new Set);(0,T.useEffect)(()=>a(new Set),[r?.ghost.interaction]);let k=(0,T.useRef)(null),c=(0,T.useRef)(null),f=r?.batch;if((0,T.useEffect)(()=>{f!==void 0&&c.current?.focus()},[f]),!r)return null;let{ghost:g}=r,A=l.find(u=>u.id===g.interaction),$=()=>{let u=g.target.on==="record"||g.target.on==="field"?g.target.id:void 0,v=k.current?.closest("[data-graview-face], main")?.parentElement??document,P=(u?v.querySelector(`[data-graview-view="${CSS.escape(u)}"][tabindex]`):null)??document.querySelector("[data-graview-page-title]")??k.current?.closest("main")??document.querySelector("main");P&&!P.hasAttribute("tabindex")&&P.setAttribute("tabindex","-1"),P?.focus({preventScroll:!0}),i.setGhost(null)},b=g.proposals.filter(u=>!d.has(u.id)).map(u=>u.id),h=()=>{let u=Qe(o,g,{author:t,ids:b});if(!u.ok){i.setGhost({...r,refused:u.refused});return}A&&i.record(Ye(A,u.accepted,u.batch)),i.setGhost({ghost:g,batch:u.batch,took:u.accepted.length,...r.onCard?{onCard:!0}:{}})},x=()=>{A&&r.batch===void 0&&i.record(Ve(A)),$()},m=()=>{if(r.batch!==void 0)try{o.undo(r.batch,{author:t}),$()}catch(u){i.setGhost({...r,refused:u instanceof Error?u.message:String(u)})}};return(0,S.jsxs)("section",{ref:k,"data-testid":"ai-ghost","data-interaction":g.interaction,"aria-label":"Proposed by AI",style:{...e==="card"?{position:"static"}:{position:e==="page"?"fixed":"absolute",insetInline:"max(12px, calc(50% - 220px))",bottom:"calc(var(--graview-foot-room, 0px) + 72px)",zIndex:Ee("toast"),boxShadow:"var(--graview-lift-high)"},display:"grid",gap:8,padding:12,borderRadius:12,border:"1px dashed var(--graview-accent)",background:"var(--graview-float)",fontSize:"0.875rem"},children:[(0,S.jsx)("p",{style:{margin:0,color:"var(--graview-ink-muted)"},children:r.batch!==void 0?`Done: ${r.took===1?"one change":`${r.took} changes`}, as one.`:`Proposed by AI \xB7 ${g.basis}`}),r.batch===void 0?(0,S.jsx)("ul",{style:{margin:0,padding:0,listStyle:"none",display:"grid",gap:4},children:g.proposals.map(u=>(0,S.jsx)("li",{"data-ghost-proposal":u.id,children:(0,S.jsxs)("label",{style:{display:"flex",alignItems:"baseline",gap:8,cursor:"pointer"},children:[(0,S.jsx)("input",{type:"checkbox",checked:!d.has(u.id),onChange:v=>{let P=new Set(d);v.target.checked?P.delete(u.id):P.add(u.id),a(P)}}),(0,S.jsx)("span",{style:{fontStyle:"italic",color:"var(--graview-ink)"},children:u.said}),u.confidence!==void 0?(0,S.jsxs)("span",{style:{color:"var(--graview-ink-faint)"},children:[Math.round(u.confidence*100),"% sure"]}):null]})},u.id))}):null,r.refused?(0,S.jsx)("p",{role:"alert",style:{margin:0,color:"var(--graview-warn)"},children:r.refused}):null,(0,S.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:r.batch===void 0?(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)("button",{type:"button","data-testid":"ghost-accept",disabled:b.length===0,onClick:h,style:ye,children:b.length===g.proposals.length?"Accept":`Accept ${b.length} of ${g.proposals.length}`}),(0,S.jsx)("button",{type:"button","data-testid":"ghost-dismiss",onClick:x,style:ye,children:"Dismiss"})]}):(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)("button",{type:"button",ref:c,"data-testid":"ghost-undo",onClick:m,style:ye,children:"Undo"}),(0,S.jsx)("button",{type:"button","data-testid":"ghost-close",onClick:$,style:ye,children:"Close"})]})})]})}export{Fe as a,K as b,de as c,fn as d,Rn as e,Ze as f,en as g,ee as h,kn as i,bn as j,An as k,Fn as l,Gn as m,Bn as n};
3
+ ${o}`)})}}if(e.turn){let t=e.turn;return{model:n,think:async({system:i,prompt:o})=>({text:await t({system:i,messages:[{role:"user",content:o}],tools:[],call:async()=>({error:"No tools here."})})})}}}var Oe=(e,n,t)=>e?n/1e6*(e.inputPerMillion??0)+t/1e6*(e.outputPerMillion??0):void 0,Ce=()=>`ai-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`;function fn(e,n,t=[]){let i=o=>{let r=e.graph.getNode(o);return r?te(e.schema.tryDefinition(r.kind),r):"a record"};switch(n.on){case"record":return i(n.id);case"field":return`${i(n.id)} \xB7 ${n.field}`;case"selection":return`${n.ids.length} records`;case"list":return e.schema.tryDefinition(n.kind)?_(e.schema,n.kind):n.kind;case"lens":case"place":return t.find(o=>o.as===n.place)?.title??(n.place==="home"?"Home":n.place);case"act":return n.act}}var We=e=>e.type!=="act"||e.asks.length===0,$e=(e,n)=>({id:e.id,type:e.type,label:e.label,...n!==void 0?{confidence:n}:{}});function Y(e,n){let t=n.interaction??Ce(),i=de(n.store,n.target,{principal:n.principal,...n.acts?{acts:n.acts}:{},...n.places?{places:n.places}:{}}),o=Ge(n.store,n.target,{principal:n.principal,...n.place?{place:n.place}:{},...n.selection?{selection:n.selection}:{}}),r=[];return{id:t,catalog:i,state:o,entry:{id:t,at:new Date().toISOString(),by:n.by??n.principal,target:n.target,targetLabel:fn(n.store,n.target,n.places)},usage:r,meter:l=>{r.push(l),e.meter?.({...l,interaction:t})}}}async function ce(e,n,t,i){let o=await e.decide(n,t),{inputTokens:r,outputTokens:l}=o.usage,d=Oe(e.price,r,l);return i({tier:"fast",model:e.model,inputTokens:r,outputTokens:l,...d!==void 0?{costUsd:d}:{}}),o.answers}async function V(e,n,t,i,o){let r=await e.think({system:n,prompt:t,state:i.state,catalog:i.catalog}),l=r.usage?.inputTokens,d=r.usage?.outputTokens,a=r.usage?.costUsd??(l!==void 0?Oe(e.price,l,d??0):void 0);return o({tier:"thinking",model:e.model,...l!==void 0?{inputTokens:l}:{},...d!==void 0?{outputTokens:d}:{},...a!==void 0?{costUsd:a}:{}}),Ue(r.text)}function fe(e,n){let t=new Map(e.map((i,o)=>[`c${o+1}`,i]));return{question:{type:"choice",instructions:n,criteria:Object.fromEntries([...t].map(([i,o])=>[i,`${o.label} \u2014 ${o.description}`]))},of:i=>t.get(i)}}function ue(e,n,t){if(e?.type!=="choice")return[];let i=e,o=Object.entries(i.probabilities).sort((r,l)=>l[1]-r[1]);return o.some(([r])=>r===i.choice)||o.unshift([i.choice,i.confidence]),o.flatMap(([r,l])=>{let d=n(r);return d?[{candidate:d,confidence:l}]:[]}).slice(0,t)}var M=(e,n,t,i)=>({interaction:{...e.entry,ask:{kind:t,said:n??""},offered:[],outcome:"failed",failed:i,usage:[...e.usage]},offers:[]}),X="AI isn't on here.";async function qe(e,n,t=3){let i=Y(e,n),o=n.said??"Suggest",r=i.catalog.candidates.filter(We).slice(0,24);if(r.length===0)return{interaction:{...i.entry,ask:{kind:"suggest",said:o},offered:[],outcome:"offered",usage:[]},offers:[]};let l=Q(e),d=J(e),a=[];try{if(l){let{question:k,of:c}=fe(r,"Which of these would the person most likely want to do next, here?"),f=await ce(l,{...i.state,candidates:r.map(g=>({id:g.id,type:g.type,says:g.description}))},{next:k},i.meter);a=ue(f.next,c,t)}else if(d){let k=await V(d,'You suggest what a person most likely wants to do next in an app. Answer only JSON: {"pick": [candidate ids, best first]}. Pick only ids from the candidates.',JSON.stringify({state:i.state,candidates:r.map(f=>({id:f.id,says:f.description}))}),i,i.meter);a=(Array.isArray(k?.pick)?k.pick.filter(f=>typeof f=="string"):[]).flatMap(f=>r.filter(g=>g.id===f)).slice(0,t).map(f=>({candidate:f}))}else return M(i,o,"suggest",X)}catch(k){return M(i,o,"suggest",k instanceof Error?k.message:String(k))}return{interaction:{...i.entry,ask:{kind:"suggest",said:o},offered:a.map(({candidate:k,confidence:c})=>$e(k,c)),outcome:"offered",usage:[...i.usage]},offers:a.map(({candidate:k})=>k)}}async function ze(e,n){let t=Y(e,n),i=n.said??"Fill in",o=t.catalog.candidates.filter(f=>f.type==="fill"),r=new Map;for(let f of o)r.set(f.field,[...r.get(f.field)??[],f]);if(r.size===0)return{interaction:{...t.entry,ask:{kind:"fill",said:i},offered:[],outcome:"offered",usage:[]},offers:[]};let l=Q(e),d=J(e),a=[];try{if(l){let f=[...r].map(([A,$],b)=>({key:`f${b+1}`,field:A,...fe($,`Which value fits "${A}" best for this record?`)})),g=await ce(l,t.state,Object.fromEntries(f.map(A=>[A.key,A.question])),t.meter);for(let A of f){let $=!un(n.store,n.target,A.field)&&pn(n.store,n.target,A.field)!=="one";a.push(...ue(g[A.key],A.of,$?3:1).filter((b,h)=>h===0||b.confidence>=.4))}}else if(d){let f=await V(d,`You fill in a record's fields in an app. Answer only JSON: {"fills": [candidate ids]}, at most one per field, only ids from the candidates.`,JSON.stringify({state:t.state,candidates:o.map($=>({id:$.id,says:$.description}))}),t,t.meter),g=Array.isArray(f?.fills)?f.fills.filter($=>typeof $=="string"):[],A=new Set;for(let $ of g){let b=o.find(h=>h.id===$);b?.type==="fill"&&!A.has(b.field)&&(A.add(b.field),a.push({candidate:b}))}}else return M(t,i,"fill",X)}catch(f){return M(t,i,"fill",f instanceof Error?f.message:String(f))}let k=t.usage.at(-1)?.model,c=Z(n.store,{interaction:t.id,target:n.target,basis:i,...k?{model:k}:{},proposals:a.flatMap(({candidate:f,confidence:g})=>f.type==="fill"?[{id:f.id,label:f.label,said:f.description,call:f.call,record:f.record,field:f.field,...g!==void 0?{confidence:g}:{}}]:[])},n.principal);return{interaction:{...t.entry,ask:{kind:"fill",said:i},offered:c.proposals.map(f=>({id:f.id,type:"fill",label:f.label,...f.confidence!==void 0?{confidence:f.confidence}:{}})),outcome:"offered",usage:[...t.usage]},offers:[],...c.proposals.length>0?{ghost:c}:{}}}function un(e,n,t){let i=n.on==="record"||n.on==="field"?n.id:void 0,o=i?e.graph.getNode(i)?.kind:void 0,r=(o?e.schema.tryDefinition(o)?.fields?.shape:void 0)??{};return t in r}function pn(e,n,t){let i=n.on==="record"||n.on==="field"?n.id:void 0,o=i?e.graph.getNode(i)?.kind:void 0;return o?e.schema.tryDefinition(o)?.edges?.[t]?.cardinality:void 0}async function _e(e,n){let t=Y(e,n),i=n.said??"Add one",o=new Set(n.store.allMutations().filter(c=>(c.creates??[]).length>0).map(c=>c.name)),r=t.catalog.candidates.filter(c=>c.type==="act"&&c.asks.length>0&&o.has(c.mutation));if(r.length===0)return M(t,i,"record","Nothing here makes a record.");let l=J(e);if(!l)return M(t,i,"record",X);let d;try{let c=await V(l,'You propose one new record for an app by filling in an act. Answer only JSON: {"act": a candidate id, "args": {argument: value}}. Use only the candidates, and fill every argument the act asks for with a value that fits the state.',JSON.stringify({ask:i,state:t.state,candidates:r.map(A=>({id:A.id,says:A.description,asks:A.asks}))}),t,t.meter),f=r.find(A=>A.id===c?.act),g=typeof c?.args=="object"&&c.args!==null?c.args:{};f&&(d={act:f,args:Object.fromEntries(Object.entries(g).filter(([A])=>f.asks.includes(A)))})}catch(c){return M(t,i,"record",c instanceof Error?c.message:String(c))}if(!d)return M(t,i,"record","The model named no act this app has here.");let a=t.usage.at(-1)?.model,k=Z(n.store,{interaction:t.id,target:n.target,basis:i,...a?{model:a}:{},proposals:[{id:d.act.id,label:d.act.label,said:d.act.description,call:{name:d.act.mutation,args:{...d.act.args,...d.args}}}]},n.principal);return k.proposals.length===0?M(t,i,"record","What the model proposed could not be made here."):{interaction:{...t.entry,ask:{kind:"record",said:i},offered:k.proposals.map(c=>({id:c.id,type:"act",label:c.said})),outcome:"offered",usage:[...t.usage]},offers:[d.act],ghost:k}}async function Ke(e,n){let t=Y(e,n),i=n.said??"Make a panel",o=t.catalog.candidates.filter(c=>c.type==="panel");if(o.length===0)return M(t,i,"panel","Nothing here can be drawn as a panel.");let r=Q(e),l=J(e),d;try{if(l){let c=await V(l,'You choose a panel to draw in an app. Answer only JSON: {"panel": a candidate id, "title": a short title}. Choose only among the candidates.',JSON.stringify({ask:i,state:t.state,candidates:o.map(g=>({id:g.id,says:g.description}))}),t,t.meter),f=o.find(g=>g.id===c?.panel);f&&(d={panel:f,...typeof c?.title=="string"&&c.title.trim()?{title:c.title.trim().slice(0,60)}:{}})}else if(r){let{question:c,of:f}=fe(o,`Which panel answers this best: ${i}`),g=ue((await ce(r,t.state,{panel:c},t.meter)).panel,f,1)[0];g?.candidate.type==="panel"&&(d={panel:g.candidate,confidence:g.confidence})}else return M(t,i,"panel",X)}catch(c){return M(t,i,"panel",c instanceof Error?c.message:String(c))}if(!d)return M(t,i,"panel","The model named no panel this app can draw.");let a=d.title??d.panel.label,k={title:a,recipe:{...d.panel.panel,title:a}};return{interaction:{...t.entry,ask:{kind:"panel",said:i},offered:[$e(d.panel,d.confidence)],outcome:"drawn",panel:k,usage:[...t.usage]},offers:[d.panel],panel:k}}function yn(e){return e.off?void 0:e.answer}var gn=`You answer a person's question about what they are looking at in an app, from the state given and nothing else. Answer only JSON: {"answer": one to three short sentences, "pick": [candidate ids that act on the answer, best first, at most three]}. Pick only ids from the candidates, and none when nothing fits. Never say an id to the person.`;async function Rn(e,n){let t=Y(e,n),i=n.said.trim(),o=t.catalog.candidates.filter(h=>We(h)||h.type==="panel"||h.type==="place"||h.type==="record").slice(0,32),r=yn(e),l=J(e),d=Q(e),a="",k=[],c=h=>h.flatMap(x=>o.filter(m=>m.id===x)).slice(0,3).map(x=>({candidate:x}));try{if(r){let h=await r.answer({said:i,target:n.target,targetLabel:t.entry.targetLabel,state:t.state,catalog:{target:t.catalog.target,candidates:o},...n.follows?{follows:n.follows}:{}}),x=h.usage?.inputTokens,m=h.usage?.outputTokens,u=h.usage?.costUsd??(x!==void 0?Oe(r.price,x,m??0):void 0);t.meter({tier:"thinking",model:r.model,...x!==void 0?{inputTokens:x}:{},...m!==void 0?{outputTokens:m}:{},...u!==void 0?{costUsd:u}:{}}),a=typeof h.text=="string"?h.text.trim():"",k=c(h.pick??[])}else if(l){let h=await V(l,gn,JSON.stringify({ask:i,about:t.entry.targetLabel,...n.follows?{follows:n.follows}:{},state:t.state,candidates:o.map(x=>({id:x.id,says:x.description}))}),t,t.meter);a=typeof h?.answer=="string"?h.answer.trim():"",k=c(Array.isArray(h?.pick)?h.pick:[])}else if(d&&o.length>0){let{question:h,of:x}=fe(o,`Which of these best answers, or acts on: ${i}`),m=await ce(d,{...t.state,asked:i,candidates:o.map(u=>({id:u.id,type:u.type,says:u.description}))},{answer:h},t.meter);k=ue(m.answer,x,3),a=k.length>0?`These fit \u201C${i}\u201D.`:""}else return M(t,i,"ask",X)}catch(h){return M(t,i,"ask",h instanceof Error?h.message:String(h))}if(!a&&k.length===0)return M(t,i,"ask","The AI had no answer to that here.");let f=t.usage.at(-1)?.model,g=k.flatMap(({candidate:h,confidence:x})=>{let m=le(h);return m?[{...m,...x!==void 0?{confidence:x}:{}}]:[]}),A=g.length>0?Z(n.store,{interaction:t.id,target:n.target,basis:i,...f?{model:f}:{},proposals:g},n.principal):void 0,$=k.map(({candidate:h})=>h).filter(h=>le(h)===void 0),b=[...$.map(h=>$e(h,k.find(x=>x.candidate===h)?.confidence)),...(A?.proposals??[]).map(h=>({id:h.id,type:h.field!==void 0?"fill":"act",label:h.label,...h.confidence!==void 0?{confidence:h.confidence}:{}}))];return{interaction:{...t.entry,ask:{kind:"ask",said:i},offered:b,outcome:"offered",...a?{answer:a}:{},usage:[...t.usage]},offers:$,...A&&A.proposals.length>0?{ghost:A}:{},...a?{answer:a}:{}}}function Z(e,n,t){let i=n.proposals.flatMap(o=>{try{let r=e.previewAll([o.call],{author:t}),l=r.ops.map(d=>d.intent).join("; ");return r.ops.length>0?[{...o,said:l||o.said}]:[]}catch{return[]}});return{...n,proposals:i}}function le(e){if(e.type==="fill")return{id:e.id,label:e.label,said:e.description,call:e.call,record:e.record,field:e.field};if(e.type==="act"&&e.asks.length===0)return{id:e.id,label:e.label,said:e.description,call:{name:e.mutation,args:{...e.args}}}}function Qe(e,n,t){let i=n.proposals.filter(r=>t.ids===void 0||t.ids.includes(r.id));if(i.length===0)return{ok:!1,refused:"Nothing was chosen."};let o=i.flatMap(r=>r.confidence===void 0?[]:[r.confidence]);try{let l=e.applyAll(i.map(d=>d.call),{author:t.author,via:`ai:${n.interaction}`,intent:n.basis,lineage:{basis:`Asked \u201C${n.basis}\u201D`,...n.model?{model:n.model}:{},...o.length>0?{confidence:Math.min(...o)}:{},interaction:n.interaction}}).ops[0]?.batch;return l?{ok:!0,batch:l,accepted:i.map(d=>d.id)}:{ok:!1,refused:"That changes nothing now."}}catch(r){return{ok:!1,refused:r instanceof Error?r.message:String(r)}}}function Ye(e,n,t){let i=e.ask.kind==="suggest"?n.length>0:e.offered.length>0&&e.offered.every(o=>n.includes(o.id));return{...e,outcome:i?"accepted":"partly",accepted:n,batches:[...e.batches??[],t]}}var Ve=e=>({...e,outcome:"dismissed"});var T=he(sn(),1);var S=he(De(),1);function Ze(e,n,t){let i=n.on==="selection"?n.ids:n.on==="record"||n.on==="field"?[n.id]:[],o=i.length>0?Je(e.store,i,{principal:e.principal,...i.length===1?{focus:i[0]}:{}}).affordances.map(r=>({mutation:r.mutation,label:r.label,args:r.args,open:r.open,why:r.why,...r.destructive?{destructive:!0}:{}})):void 0;return{store:e.store,target:n,principal:e.principal,interaction:Ce(),places:e.places,selection:e.selection,...o?{acts:o}:{},...e.place?{place:e.place}:{},...t?{said:t}:{}}}async function en(e,n,t){let i=await (__graviewPreload(import.meta.url,["./chunk.BXWO6ILK.js","./chunk.G4JJXA63.js","./chunk.UPBUF7KR.js","./chunk.FGYCYLUS.js","./chunk.3V2M3S4U.js","./chunk.EKUAI5YL.js","./chunk.Q5WEOX3Q.js","./chunk.TX5QIZEP.js","./chunk.TSI4O3GH.js","./chunk.SZMWJHU2.js","./chunk.WVUJXDXZ.js","./chunk.YFW5BF6J.js","./chunk.QYWBQ5NX.js","./chunk.ENJKCSNX.js","./chunk.LJE5J3JK.js","./chunk.X2OLXTRL.js","./chunk.JDRM6XXD.js","./chunk.7OLVQ2FZ.js","./chunk.NOZEHLWG.js","./chunk.UVLPVHID.js","./chunk.HBBVVALN.js","./chunk.AJZBJBMO.js"]),import("./chunk.U4URQDC5.js")),o=i.recipeDraft(n.recipe,{app:e.app,sight:i.draftSight(e.app,e.principal)});if(i.isDraftFailure(o))return o.failed;t?.(),e.seatTalk.setDraft(o,null),e.goTo.draft?.(),nn()}function nn(e=180){if(typeof document>"u")return;let n=document.querySelector('[data-testid="draft-keep"]'),t=document.activeElement,i=!t||t===document.body||t.closest?.("[inert]")!==null;if(n){i&&n.focus();return}e>0&&requestAnimationFrame(()=>nn(e-1))}async function ee(e,n,t,i,o){let r=Ze(e,t,i),l=n==="suggest"?await qe(e.ai,r):n==="fill"?await ze(e.ai,r):n==="record"?await _e(e.ai,r):await Ke(e.ai,r);if(l.interaction.outcome==="failed")return n!=="suggest"&&e.desk.record(l.interaction),l;let d=a=>{let k={...l.interaction,outcome:"failed",failed:a};return e.desk.record(k),{...l,interaction:k}};if(n==="fill"||n==="record"){if(!l.ghost||l.ghost.proposals.length===0)return d("Nothing here could be filled in.");o?.(),e.desk.setGhost({ghost:l.ghost}),e.desk.record(l.interaction)}if(n==="panel"&&l.panel){let a=await en(e,l.panel,o);if(a)return d(a);e.desk.record(l.interaction)}return l}var Te=new WeakMap,hn=64,Xe=new WeakMap;function mn(e){let n=Xe.get(e);if(!n){let t=n={n:0};Xe.set(e,t),e.subscribe(()=>void(t.n+=1))}return n.n}var tn=(e,n)=>{let t=K(n);return t.length>0?t.map(i=>e.graph.getNode(i)):[mn(e)]},on=(e,n)=>JSON.stringify({target:n,seat:e.principal}),rn=(e,n,t)=>{let i=tn(e.store,n);return t.schema===e.store.schema&&t.ai===e.ai&&i.length===t.depends.length&&i.every((o,r)=>o===t.depends[r])};function kn(e,n){let t=Te.get(e.store)?.get(on(e,n));return t?.result!==void 0&&rn(e,n,t)?t.result:void 0}function bn(e,n){let t=Te.get(e.store);t||Te.set(e.store,t=new Map);let i=on(e,n),o=t.get(i);if(o&&rn(e,n,o))return o.result?Promise.resolve(o.result):o.asked;let r=ee(e,"suggest",n),l={schema:e.store.schema,ai:e.ai,depends:tn(e.store,n),asked:r};t.delete(i),t.set(i,l),t.size>hn&&t.delete(t.keys().next().value);let d=t;return r.then(a=>{a.interaction.outcome!=="failed"?l.result=a:d.get(i)===l&&d.delete(i)}),r}async function An(e,n,t,i){let o=n.interaction,r=le(t);if(r){let l=o.usage?.at(-1)?.model,d=o.offered.find(k=>k.id===t.id)?.confidence,a=Z(e.store,{interaction:o.id,target:o.target,basis:`${o.ask.said}: ${t.label}`,...l?{model:l}:{},proposals:[{...r,...d!==void 0?{confidence:d}:{}}]},e.principal);if(a.proposals.length===0){let k="That can't be done now.";return e.desk.record({...o,outcome:"failed",failed:k}),k}i?.(),e.desk.setGhost({ghost:a}),e.desk.record(o);return}if(t.type==="panel"){let l=t.label,d={title:l,recipe:{...t.panel,title:l}},a=await en(e,d,i);return e.desk.record(a?{...o,outcome:"failed",failed:a}:{...o,outcome:"drawn",accepted:[t.id],panel:d}),a}i?.(),t.type==="place"?e.goTo.place(t.place):t.type==="record"&&e.goTo.record(t.record),e.desk.record({...o,outcome:"accepted",accepted:[t.id]})}async function Fn(e,n){if(n.ask.kind==="ask")return ke(e.desk,{target:n.target,asked:n.ask.said}),null;let t=n.ask.kind==="panel"||n.ask.kind==="record"?n.ask.kind:"fill";return ee(e,t,n.target,n.ask.said)}var B={padding:"5px 10px",fontSize:"0.875rem",borderRadius:8,width:"100%",textAlign:"left",borderWidth:1,borderStyle:"solid",borderColor:"transparent",background:"none",boxShadow:"none"},pe={margin:0,padding:"4px 10px",fontSize:"0.8125rem",color:"var(--graview-ink-muted)"};function Gn({target:e,close:n}){let t=Le(),i=(0,T.useMemo)(()=>Fe(e,y=>t.store.graph.has(y)),[e,t.store]),o=(0,T.useMemo)(()=>{let y=Ze(t,i);return de(t.store,i,{principal:t.principal,places:t.places,...y.acts?{acts:y.acts}:{}})},[t,i]),r=o.candidates.some(y=>y.type==="fill"),l=o.candidates.some(y=>y.type==="panel"),d=(0,T.useMemo)(()=>new Set(t.store.allMutations().filter(y=>(y.creates??[]).length>0).map(y=>y.name)),[t.store]),a=J(t.ai)!==void 0&&o.candidates.some(y=>y.type==="act"&&y.asks.length>0&&d.has(y.mutation)),k=Be(t.ai),c=kn(t,i),f=JSON.stringify(i),[g,A]=(0,T.useState)(!1),[$,b]=(0,T.useState)(null),[h,x]=(0,T.useState)(k&&c===void 0);(0,T.useEffect)(()=>{if(c!==void 0||!(k||g))return;let y=!0;return x(!0),bn(t,i).then(O=>{y&&(b(O),x(!1))}),()=>{y=!1}},[f,g]);let m=c??$,u=m?.interaction.outcome==="failed"?m.interaction.failed??"The AI could not suggest anything here.":null,v=(0,T.useRef)(!1),P=(0,T.useRef)(null);(0,T.useLayoutEffect)(()=>{m===null||!v.current||(v.current=!1,P.current?.querySelector("button")?.focus())},[m]);let W=(0,T.useRef)(!0);(0,T.useEffect)(()=>()=>{W.current=!1},[]);let[q,z]=(0,T.useState)(!1),[ne,s]=(0,T.useState)(null),p=y=>{if(q)return;z(!0),s(null);let O=!1;y(()=>{O=!0,n()}).then(w=>{W.current&&(z(!1),w?s(w):O||n())},w=>{W.current&&(z(!1),s(w instanceof Error?w.message:String(w)))})},C=y=>y.interaction.outcome==="failed"?y.interaction.failed??"The AI could not do that here.":void 0;return(0,S.jsxs)("div",{ref:P,"data-testid":"inline-ai",style:{display:"grid",gap:2},children:[h&&!g?(0,S.jsx)("p",{role:"status","data-testid":"inline-ai-thinking",style:pe,children:"Thinking\u2026"}):q?(0,S.jsx)("p",{role:"status","data-testid":"inline-ai-asking",style:pe,children:"Asking\u2026"}):ne?(0,S.jsx)("p",{role:"alert","data-testid":"inline-ai-failed",style:{...pe,color:"var(--graview-warn)"},children:ne}):u?(0,S.jsx)("p",{role:"status",style:pe,children:u}):null,(0,S.jsxs)("ul",{style:{margin:0,padding:0,listStyle:"none",display:"flex",flexDirection:"column",gap:2},children:[(m?.offers??[]).map(y=>(0,S.jsx)("li",{children:(0,S.jsxs)("button",{type:"button","data-menu-item":`ai-offer:${y.id}`,"data-ai-offer":y.id,"data-ai-offer-type":y.type,onClick:()=>p(O=>An(t,m,y,O)),style:B,children:[y.label,(0,S.jsxs)("span",{style:{color:"var(--graview-ink-faint)"},children:[" \xB7 ",y.type==="panel"?"a panel":y.type==="place"?"go there":y.type==="record"?"open it":"suggested"]})]})},y.id)),!k&&m===null?(0,S.jsx)("li",{children:(0,S.jsx)("button",{type:"button","data-menu-item":"ai-suggest","aria-disabled":g||void 0,onClick:y=>{g||(v.current=document.activeElement===y.currentTarget,A(!0))},style:B,children:g?"Thinking\u2026":"Suggest\u2026"})}):null,r?(0,S.jsx)("li",{children:(0,S.jsx)("button",{type:"button","data-menu-item":"ai-fill",onClick:()=>p(async y=>C(await ee(t,"fill",i,"Fill in",y))),style:B,children:"Fill in with AI"})}):null,a?(0,S.jsx)("li",{children:(0,S.jsx)("button",{type:"button","data-menu-item":"ai-record",onClick:()=>p(async y=>C(await ee(t,"record",i,"Add one",y))),style:B,children:"Add one with AI"})}):null,l?(0,S.jsx)("li",{children:(0,S.jsx)("button",{type:"button","data-menu-item":"ai-panel",onClick:()=>p(async y=>C(await ee(t,"panel",i,"Draw a panel",y))),style:B,children:"Draw a panel"})}):null,(0,S.jsx)("li",{children:(0,S.jsx)("button",{type:"button","data-menu-item":"ai-ask",onClick:()=>{let y=document.activeElement;n(),ke(t.desk,{target:i,returnTo:y instanceof HTMLElement&&y!==document.body?y:null})},style:B,children:"Ask about this\u2026"})})]})]})}var ye={display:"inline-flex",alignItems:"center",minHeight:28,padding:"2px 10px",fontSize:"0.8125rem",borderRadius:8};function Bn({placement:e="picture"}){let{store:n,principal:t,aiDesk:i}=He(),o=Ne(n,t),{ghost:r,entries:l}=je(i),[d,a]=(0,T.useState)(new Set);(0,T.useEffect)(()=>a(new Set),[r?.ghost.interaction]);let k=(0,T.useRef)(null),c=(0,T.useRef)(null),f=r?.batch;if((0,T.useEffect)(()=>{f!==void 0&&c.current?.focus()},[f]),!r)return null;let{ghost:g}=r,A=l.find(u=>u.id===g.interaction),$=()=>{let u=g.target.on==="record"||g.target.on==="field"?g.target.id:void 0,v=k.current?.closest("[data-graview-face], main")?.parentElement??document,P=(u?v.querySelector(`[data-graview-view="${CSS.escape(u)}"][tabindex]`):null)??document.querySelector("[data-graview-page-title]")??k.current?.closest("main")??document.querySelector("main");P&&!P.hasAttribute("tabindex")&&P.setAttribute("tabindex","-1"),P?.focus({preventScroll:!0}),i.setGhost(null)},b=g.proposals.filter(u=>!d.has(u.id)).map(u=>u.id),h=()=>{let u=Qe(o,g,{author:t,ids:b});if(!u.ok){i.setGhost({...r,refused:u.refused});return}A&&i.record(Ye(A,u.accepted,u.batch)),i.setGhost({ghost:g,batch:u.batch,took:u.accepted.length,...r.onCard?{onCard:!0}:{}})},x=()=>{A&&r.batch===void 0&&i.record(Ve(A)),$()},m=()=>{if(r.batch!==void 0)try{o.undo(r.batch,{author:t}),$()}catch(u){i.setGhost({...r,refused:u instanceof Error?u.message:String(u)})}};return(0,S.jsxs)("section",{ref:k,"data-testid":"ai-ghost","data-interaction":g.interaction,"aria-label":"Proposed by AI",style:{...e==="card"?{position:"static"}:{position:e==="page"?"fixed":"absolute",insetInline:"max(12px, calc(50% - 220px))",bottom:"calc(var(--graview-foot-room, 0px) + 72px)",zIndex:Ee("toast"),boxShadow:"var(--graview-lift-high)"},display:"grid",gap:8,padding:12,borderRadius:12,border:"1px dashed var(--graview-accent)",background:"var(--graview-float)",fontSize:"0.875rem"},children:[(0,S.jsx)("p",{style:{margin:0,color:"var(--graview-ink-muted)"},children:r.batch!==void 0?`Done: ${r.took===1?"one change":`${r.took} changes`}, as one.`:`Proposed by AI \xB7 ${g.basis}`}),r.batch===void 0?(0,S.jsx)("ul",{style:{margin:0,padding:0,listStyle:"none",display:"grid",gap:4},children:g.proposals.map(u=>(0,S.jsx)("li",{"data-ghost-proposal":u.id,children:(0,S.jsxs)("label",{style:{display:"flex",alignItems:"baseline",gap:8,cursor:"pointer"},children:[(0,S.jsx)("input",{type:"checkbox",checked:!d.has(u.id),onChange:v=>{let P=new Set(d);v.target.checked?P.delete(u.id):P.add(u.id),a(P)}}),(0,S.jsx)("span",{style:{fontStyle:"italic",color:"var(--graview-ink)"},children:u.said}),u.confidence!==void 0?(0,S.jsxs)("span",{style:{color:"var(--graview-ink-faint)"},children:[Math.round(u.confidence*100),"% sure"]}):null]})},u.id))}):null,r.refused?(0,S.jsx)("p",{role:"alert",style:{margin:0,color:"var(--graview-warn)"},children:r.refused}):null,(0,S.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:r.batch===void 0?(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)("button",{type:"button","data-testid":"ghost-accept",disabled:b.length===0,onClick:h,style:ye,children:b.length===g.proposals.length?"Accept":`Accept ${b.length} of ${g.proposals.length}`}),(0,S.jsx)("button",{type:"button","data-testid":"ghost-dismiss",onClick:x,style:ye,children:"Dismiss"})]}):(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)("button",{type:"button",ref:c,"data-testid":"ghost-undo",onClick:m,style:ye,children:"Undo"}),(0,S.jsx)("button",{type:"button","data-testid":"ghost-close",onClick:$,style:ye,children:"Close"})]})})]})}export{Fe as a,K as b,de as c,fn as d,Rn as e,Ze as f,en as g,ee as h,kn as i,bn as j,An as k,Fn as l,Gn as m,Bn as n};
@@ -1 +1 @@
1
- import{B as O}from"./chunk.F5BCCGFK.js";var k=3,A=k+1,P=A+1,z=(o,r)=>o<r?-1:o>r?1:0;function L(o){return(o??0)>4?k:2}function N(o,r,a){let n=[];for(let d of Object.values(o.tryDefinition(r)?.edges??{}))if(d.to!=="*")for(let i of d.to)i!==r&&a.includes(i)&&!n.includes(i)&&n.push(i);return n}function W(o,r={}){let a=[...o.kinds],n=[...(r.order??[]).filter(e=>a.includes(e)),...a.filter(e=>!(r.order??[]).includes(e)).sort(z)].filter((e,t,s)=>s.indexOf(e)===t),d=e=>n.indexOf(e),i=new Map,g=[],h=(e,t,s)=>{i.set(e,{col:t,row:s,side:L(r.counts?.[e])}),g.push({col:t,row:s})};for(let e of n){let t=o.tryDefinition(e)?.plot??r.plots?.[e];t&&h(e,t.col,t.row)}let l=new Map(n.map(e=>[e,N(o,e,a)])),b=new Set(n.filter(e=>l.get(e).length>0||n.some(t=>l.get(t).includes(e)))),v=new Map,C=new Set,D=e=>{let t=v.get(e);if(t!==void 0)return t;if(C.has(e))return-1;C.add(e);let s=0;for(let c of l.get(e))s=Math.max(s,D(c)+1);return C.delete(e),v.set(e,s),s};for(let e of n)b.has(e)&&D(e);let f=[];for(let e of n)b.has(e)&&(f[v.get(e)]??=[]).push(e);let I=new Map,T=Math.max(1,Math.ceil(Math.sqrt(f.length))),H=Math.max(1,...f.map(e=>e?.length??0)),w=Math.max(P,Math.round(r.pitch??P)),R=(e,t)=>r.upright?{col:e%T*w,row:(Math.floor(e/T)*(H+1)+t)*w}:{col:t*w,row:e===0?0:-e*w},$=e=>!g.some(t=>V(t,e)),S=(e,t,s)=>{let c=s;for(;!$(R(t,c))&&c<s+64;)c++;return i.has(e)||h(e,R(t,c).col,R(t,c).row),c},x=0;f.forEach((e=[],t)=>{let s=u=>{let m=l.get(u).map(p=>I.get(p)).filter(p=>p!==void 0);return m.length>0?m.reduce((p,q)=>p+q,0)/m.length:1/0},c=[...e].sort((u,m)=>s(u)-s(m)||d(u)-d(m)),y=0;for(let u of c)i.has(u)||(y=S(u,t,y),I.set(u,y),x=Math.max(x,y+1),y++)});let j=n.filter(e=>!b.has(e)&&!i.has(e)),M=Math.max(r.upright?x:f.length,Math.ceil(Math.sqrt(j.length*2)),1),E=b.size>0?1:0;return j.forEach((e,t)=>{r.upright?S(e,f.length+E+Math.floor(t/M),t%M):S(e,t%M,x+E+Math.floor(t/M))}),i}function V(o,r){return Math.abs(o.col-r.col)<A&&Math.abs(o.row-r.row)<A}function X(o,r,a,n=.5){return{x:(o-r)*a/2,y:(o+r)*a*n/2}}var G=1,B=/^(done|completed?|closed|finished|shipped|sent|won|lost|passed|declined|dropped|answered|resolved|fixed|archived|cancell?ed|retired|released|published|delivered|paid|merged|rejected|written[-_ ]?up|out)$/i,F=/^(doing|in[-_ ]?progress|active|building|started|working|in[-_ ]?review|review(ing)?|fixing|ongoing|underway|testing|drafting|writing|running)$/i;function _(o,r,a){let n=O(o.tryDefinition(r)?.fields.shape?.[a]);for(;n&&n.innerType!==void 0&&n.type!=="enum";)n=O(n.innerType);if(n?.type!=="enum")return;let d=(n.entries?Object.values(n.entries):n.values??[]).filter(i=>typeof i=="string");return d.length>0?d:void 0}function J(o,r){let a=o.tryDefinition(r);if(!a)return;let n=a.lifecycle,d=Object.keys(a.fields.shape??{}),i=[n?.field,...d.filter(l=>/^(status|stage|state|phase)$/i.test(l))].find(l=>l!==void 0&&_(o,r,l)!==void 0);if(!i)return;let g=_(o,r,i),h=n?.field===i&&Array.isArray(n.retired)?n.retired:[];return{field:i,values:g,tiers:g.map(l=>h.includes(l)||B.test(l)?"done":F.test(l)?"active":"waiting")}}export{P as a,W as b,X as c,G as d,J as e};
1
+ import{B as O}from"./chunk.HBBVVALN.js";var k=3,A=k+1,P=A+1,z=(o,r)=>o<r?-1:o>r?1:0;function L(o){return(o??0)>4?k:2}function N(o,r,a){let n=[];for(let d of Object.values(o.tryDefinition(r)?.edges??{}))if(d.to!=="*")for(let i of d.to)i!==r&&a.includes(i)&&!n.includes(i)&&n.push(i);return n}function W(o,r={}){let a=[...o.kinds],n=[...(r.order??[]).filter(e=>a.includes(e)),...a.filter(e=>!(r.order??[]).includes(e)).sort(z)].filter((e,t,s)=>s.indexOf(e)===t),d=e=>n.indexOf(e),i=new Map,g=[],h=(e,t,s)=>{i.set(e,{col:t,row:s,side:L(r.counts?.[e])}),g.push({col:t,row:s})};for(let e of n){let t=o.tryDefinition(e)?.plot??r.plots?.[e];t&&h(e,t.col,t.row)}let l=new Map(n.map(e=>[e,N(o,e,a)])),b=new Set(n.filter(e=>l.get(e).length>0||n.some(t=>l.get(t).includes(e)))),v=new Map,C=new Set,D=e=>{let t=v.get(e);if(t!==void 0)return t;if(C.has(e))return-1;C.add(e);let s=0;for(let c of l.get(e))s=Math.max(s,D(c)+1);return C.delete(e),v.set(e,s),s};for(let e of n)b.has(e)&&D(e);let f=[];for(let e of n)b.has(e)&&(f[v.get(e)]??=[]).push(e);let I=new Map,T=Math.max(1,Math.ceil(Math.sqrt(f.length))),H=Math.max(1,...f.map(e=>e?.length??0)),w=Math.max(P,Math.round(r.pitch??P)),R=(e,t)=>r.upright?{col:e%T*w,row:(Math.floor(e/T)*(H+1)+t)*w}:{col:t*w,row:e===0?0:-e*w},$=e=>!g.some(t=>V(t,e)),S=(e,t,s)=>{let c=s;for(;!$(R(t,c))&&c<s+64;)c++;return i.has(e)||h(e,R(t,c).col,R(t,c).row),c},x=0;f.forEach((e=[],t)=>{let s=u=>{let m=l.get(u).map(p=>I.get(p)).filter(p=>p!==void 0);return m.length>0?m.reduce((p,q)=>p+q,0)/m.length:1/0},c=[...e].sort((u,m)=>s(u)-s(m)||d(u)-d(m)),y=0;for(let u of c)i.has(u)||(y=S(u,t,y),I.set(u,y),x=Math.max(x,y+1),y++)});let j=n.filter(e=>!b.has(e)&&!i.has(e)),M=Math.max(r.upright?x:f.length,Math.ceil(Math.sqrt(j.length*2)),1),E=b.size>0?1:0;return j.forEach((e,t)=>{r.upright?S(e,f.length+E+Math.floor(t/M),t%M):S(e,t%M,x+E+Math.floor(t/M))}),i}function V(o,r){return Math.abs(o.col-r.col)<A&&Math.abs(o.row-r.row)<A}function X(o,r,a,n=.5){return{x:(o-r)*a/2,y:(o+r)*a*n/2}}var G=1,B=/^(done|completed?|closed|finished|shipped|sent|won|lost|passed|declined|dropped|answered|resolved|fixed|archived|cancell?ed|retired|released|published|delivered|paid|merged|rejected|written[-_ ]?up|out)$/i,F=/^(doing|in[-_ ]?progress|active|building|started|working|in[-_ ]?review|review(ing)?|fixing|ongoing|underway|testing|drafting|writing|running)$/i;function _(o,r,a){let n=O(o.tryDefinition(r)?.fields.shape?.[a]);for(;n&&n.innerType!==void 0&&n.type!=="enum";)n=O(n.innerType);if(n?.type!=="enum")return;let d=(n.entries?Object.values(n.entries):n.values??[]).filter(i=>typeof i=="string");return d.length>0?d:void 0}function J(o,r){let a=o.tryDefinition(r);if(!a)return;let n=a.lifecycle,d=Object.keys(a.fields.shape??{}),i=[n?.field,...d.filter(l=>/^(status|stage|state|phase)$/i.test(l))].find(l=>l!==void 0&&_(o,r,l)!==void 0);if(!i)return;let g=_(o,r,i),h=n?.field===i&&Array.isArray(n.retired)?n.retired:[];return{field:i,values:g,tiers:g.map(l=>h.includes(l)||B.test(l)?"done":F.test(l)?"active":"waiting")}}export{P as a,W as b,X as c,G as d,J as e};
@@ -1 +1 @@
1
- import{b as y}from"./chunk.5PU3RWYY.js";import"./chunk.BZ5VLPKB.js";import{F as w,Q as c}from"./chunk.6II4BONS.js";import"./chunk.F5BCCGFK.js";import{b as l}from"./chunk.AJZBJBMO.js";var r=l(w(),1);var t=l(c(),1);function x({field:d,label:p,value:m,markdown:b,onSave:n,onCancel:u}){let[a,v]=(0,r.useState)(m),[i,h]=(0,r.useState)(!1),o=(0,r.useRef)(null);return(0,r.useEffect)(()=>o.current?.focus(),[i]),(0,r.useLayoutEffect)(()=>{let e=o.current;if(!e||i||typeof CSS<"u"&&CSS.supports?.("field-sizing","content"))return;let f=()=>{e.style.height="auto";let g=getComputedStyle(e);e.style.height=`${e.scrollHeight+parseFloat(g.borderTopWidth)+parseFloat(g.borderBottomWidth)}px`};f();let S=requestAnimationFrame(f);return()=>cancelAnimationFrame(S)},[a,i]),(0,t.jsxs)("form",{style:{display:"grid",gap:8,minWidth:0},onSubmit:e=>{e.preventDefault(),n(a,!1)},children:[i?(0,t.jsx)("div",{"data-graview-preview":d,"aria-label":`${p}, as it will read`,role:"region",style:C,children:(0,t.jsx)(y,{text:a,markdown:!0})}):(0,t.jsx)("textarea",{ref:o,"aria-label":p,"data-graview-field":d,value:a,rows:3,onChange:e=>v(e.target.value),onKeyDown:e=>{e.key==="Escape"?(e.preventDefault(),u()):e.key==="Enter"&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),n(a,!1))},onBlur:e=>{e.relatedTarget instanceof Node&&e.currentTarget.form?.contains(e.relatedTarget)||n(a,!0)},style:E}),(0,t.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",alignItems:"center",gap:8},children:[(0,t.jsx)("button",{type:"submit",style:s,children:"Save"}),(0,t.jsx)("button",{type:"button",onClick:u,style:s,children:"Cancel"}),b?(0,t.jsx)("button",{type:"button","aria-pressed":i,onClick:()=>h(!i),style:s,children:i?"Write":"Preview"}):null,(0,t.jsx)("span",{style:{fontSize:"0.75rem",color:"var(--graview-ink-faint)"},children:"Ctrl or \u2318 Enter saves \xB7 Esc puts it back"})]})]})}var C={minHeight:"7.5em",padding:"8px 10px",border:"1px dashed var(--graview-edge-bright)",borderRadius:6,lineHeight:1.6,minWidth:0},s={font:"inherit",fontSize:"0.8125rem",minHeight:28,padding:"2px 12px"},E={font:"inherit",lineHeight:1.5,width:"100%",boxSizing:"border-box",minHeight:"7.5em",padding:"8px 10px",resize:"vertical",fieldSizing:"content",color:"var(--graview-ink)",background:"var(--graview-panel, transparent)",border:"1px solid var(--graview-edge-bright)",borderRadius:6};export{x as default};
1
+ import{b as y}from"./chunk.BRBY5WJT.js";import"./chunk.QXARGANF.js";import{F as w,Q as c}from"./chunk.DNNL7F3P.js";import"./chunk.HBBVVALN.js";import{b as l}from"./chunk.AJZBJBMO.js";var r=l(w(),1);var t=l(c(),1);function x({field:d,label:p,value:m,markdown:b,onSave:n,onCancel:u}){let[a,v]=(0,r.useState)(m),[i,h]=(0,r.useState)(!1),o=(0,r.useRef)(null);return(0,r.useEffect)(()=>o.current?.focus(),[i]),(0,r.useLayoutEffect)(()=>{let e=o.current;if(!e||i||typeof CSS<"u"&&CSS.supports?.("field-sizing","content"))return;let f=()=>{e.style.height="auto";let g=getComputedStyle(e);e.style.height=`${e.scrollHeight+parseFloat(g.borderTopWidth)+parseFloat(g.borderBottomWidth)}px`};f();let S=requestAnimationFrame(f);return()=>cancelAnimationFrame(S)},[a,i]),(0,t.jsxs)("form",{style:{display:"grid",gap:8,minWidth:0},onSubmit:e=>{e.preventDefault(),n(a,!1)},children:[i?(0,t.jsx)("div",{"data-graview-preview":d,"aria-label":`${p}, as it will read`,role:"region",style:C,children:(0,t.jsx)(y,{text:a,markdown:!0})}):(0,t.jsx)("textarea",{ref:o,"aria-label":p,"data-graview-field":d,value:a,rows:3,onChange:e=>v(e.target.value),onKeyDown:e=>{e.key==="Escape"?(e.preventDefault(),u()):e.key==="Enter"&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),n(a,!1))},onBlur:e=>{e.relatedTarget instanceof Node&&e.currentTarget.form?.contains(e.relatedTarget)||n(a,!0)},style:E}),(0,t.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",alignItems:"center",gap:8},children:[(0,t.jsx)("button",{type:"submit",style:s,children:"Save"}),(0,t.jsx)("button",{type:"button",onClick:u,style:s,children:"Cancel"}),b?(0,t.jsx)("button",{type:"button","aria-pressed":i,onClick:()=>h(!i),style:s,children:i?"Write":"Preview"}):null,(0,t.jsx)("span",{style:{fontSize:"0.75rem",color:"var(--graview-ink-faint)"},children:"Ctrl or \u2318 Enter saves \xB7 Esc puts it back"})]})]})}var C={minHeight:"7.5em",padding:"8px 10px",border:"1px dashed var(--graview-edge-bright)",borderRadius:6,lineHeight:1.6,minWidth:0},s={font:"inherit",fontSize:"0.8125rem",minHeight:28,padding:"2px 12px"},E={font:"inherit",lineHeight:1.5,width:"100%",boxSizing:"border-box",minHeight:"7.5em",padding:"8px 10px",resize:"vertical",fieldSizing:"content",color:"var(--graview-ink)",background:"var(--graview-panel, transparent)",border:"1px solid var(--graview-edge-bright)",borderRadius:6};export{x as default};
@@ -1,4 +1,4 @@
1
- import"./chunk.BZ5VLPKB.js";import{Q as o,Y as n}from"./chunk.6II4BONS.js";import"./chunk.F5BCCGFK.js";import{b as t}from"./chunk.AJZBJBMO.js";var a=t(o(),1),d=[["waiting","Waiting"],["active","Under way: darker and taller"],["done","Done: flat and pale"],["flagged","A problem, or past its due date"],["recent","Changed since you were last here"],["own","Yours"]],g=i=>{let e=r=>`color-mix(in oklab,var(--graview-ink) ${r}%,var(--graview-panel))`;return`.graview-map-key{display:grid;gap:4px;padding:2px 4px 8px;margin-bottom:6px;border-bottom:1px solid var(--graview-edge);font-size:.8125rem;color:var(--graview-ink-muted)}
1
+ import"./chunk.QXARGANF.js";import{Q as o,Y as n}from"./chunk.DNNL7F3P.js";import"./chunk.HBBVVALN.js";import{b as t}from"./chunk.AJZBJBMO.js";var a=t(o(),1),d=[["waiting","Waiting"],["active","Under way: darker and taller"],["done","Done: flat and pale"],["flagged","A problem, or past its due date"],["recent","Changed since you were last here"],["own","Yours"]],g=i=>{let e=r=>`color-mix(in oklab,var(--graview-ink) ${r}%,var(--graview-panel))`;return`.graview-map-key{display:grid;gap:4px;padding:2px 4px 8px;margin-bottom:6px;border-bottom:1px solid var(--graview-edge);font-size:.8125rem;color:var(--graview-ink-muted)}
2
2
  .graview-map-key>div{display:flex;align-items:center;gap:8px}
3
3
  .graview-map-key>div:first-child{color:var(--graview-ink)}
4
4
  .graview-map-key i{flex:none;width:14px;height:10px;border-radius:2px;background:${e(i?34:42)}}
@@ -1,3 +1,3 @@
1
- var __graviewPreload=(base,files)=>{if(typeof document>"u")return;const asked=globalThis.__graviewPreloaded??=new Set;for(const file of files){const href=new URL(file,base).href;if(asked.has(href))continue;asked.add(href);const link=document.createElement("link");link.rel="modulepreload";link.href=href;document.head.append(link)}};import{F as g,Q as u}from"./chunk.6II4BONS.js";import{b as m}from"./chunk.AJZBJBMO.js";var d=m(g(),1),n=m(u(),1),f=/^\s*(\d{1,6})[.)]\s+(.*)$/s,c=/^\s*[-*•]\s+(.*)$/s;function S(o){let s=[];for(let p of o.replace(/\r\n?/g,`
1
+ var __graviewPreload=(base,files)=>{if(typeof document>"u")return;const asked=globalThis.__graviewPreloaded??=new Set;for(const file of files){const href=new URL(file,base).href;if(asked.has(href))continue;asked.add(href);const link=document.createElement("link");link.rel="modulepreload";link.href=href;document.head.append(link)}};import{F as g,Q as u}from"./chunk.DNNL7F3P.js";import{b as m}from"./chunk.AJZBJBMO.js";var d=m(g(),1),n=m(u(),1),f=/^\s*(\d{1,6})[.)]\s+(.*)$/s,c=/^\s*[-*•]\s+(.*)$/s;function S(o){let s=[];for(let p of o.replace(/\r\n?/g,`
2
2
  `).split(/\n[ \t]*\n+/)){let t=null,a=()=>{t&&(t.t==="p"?t.lines.length>0:t.items.length>0)&&s.push(t),t=null};for(let e of p.split(`
3
- `)){let i=f.exec(e),l=i?null:c.exec(e);if(i)t?.t!=="ol"&&(a(),t={t:"ol",start:Number(i[1]),items:[]}),t.items.push(i[2]);else if(l)t?.t!=="ul"&&(a(),t={t:"ul",items:[]}),t.items.push(l[1]);else if(t&&t.t!=="p"&&/^\s+\S/.test(e)){let r=t.items;r[r.length-1]=`${r[r.length-1]} ${e.trim()}`}else e.trim().length>0&&(t?.t!=="p"&&(a(),t={t:"p",lines:[]}),t.lines.push(e.trim()))}a()}return s}function b(o){return/[\r\n]/.test(o)}var h={display:"grid",gap:"0.7em",minWidth:0,overflowWrap:"anywhere"},k={margin:0},y={margin:0,paddingInlineStart:"1.6em",display:"grid",gap:"0.3em"},x=(0,d.lazy)(()=>(__graviewPreload(import.meta.url,["./chunk.BZ5VLPKB.js","./chunk.6II4BONS.js","./chunk.F5BCCGFK.js","./chunk.AJZBJBMO.js"]),import("./chunk.J3TEJBI5.js")));function B({text:o,className:s,style:p,markdown:t,headingsFrom:a}){return t?(0,n.jsx)(d.Suspense,{fallback:(0,n.jsx)(B,{text:o,...s?{className:s}:{},...p?{style:p}:{}}),children:(0,n.jsx)(x,{text:o,...s?{className:s}:{},...p?{style:p}:{},...a?{headingsFrom:a}:{}})}):(0,n.jsx)("div",{"data-graview-text-body":"",...s?{className:s}:{},style:{...h,...p},children:S(o).map((e,i)=>e.t==="p"?(0,n.jsx)("p",{style:k,children:e.lines.map((l,r)=>(0,n.jsxs)("span",{children:[r>0?(0,n.jsx)("br",{}):null,l]},r))},i):e.t==="ol"?(0,n.jsx)("ol",{start:e.start,style:y,children:e.items.map((l,r)=>(0,n.jsx)("li",{children:l},r))},i):(0,n.jsx)("ul",{style:y,children:e.items.map((l,r)=>(0,n.jsx)("li",{children:l},r))},i))})}export{b as a,B as b};
3
+ `)){let i=f.exec(e),l=i?null:c.exec(e);if(i)t?.t!=="ol"&&(a(),t={t:"ol",start:Number(i[1]),items:[]}),t.items.push(i[2]);else if(l)t?.t!=="ul"&&(a(),t={t:"ul",items:[]}),t.items.push(l[1]);else if(t&&t.t!=="p"&&/^\s+\S/.test(e)){let r=t.items;r[r.length-1]=`${r[r.length-1]} ${e.trim()}`}else e.trim().length>0&&(t?.t!=="p"&&(a(),t={t:"p",lines:[]}),t.lines.push(e.trim()))}a()}return s}function b(o){return/[\r\n]/.test(o)}var h={display:"grid",gap:"0.7em",minWidth:0,overflowWrap:"anywhere"},k={margin:0},y={margin:0,paddingInlineStart:"1.6em",display:"grid",gap:"0.3em"},x=(0,d.lazy)(()=>(__graviewPreload(import.meta.url,["./chunk.QXARGANF.js","./chunk.DNNL7F3P.js","./chunk.HBBVVALN.js","./chunk.AJZBJBMO.js"]),import("./chunk.XS3SAH6U.js")));function B({text:o,className:s,style:p,markdown:t,headingsFrom:a}){return t?(0,n.jsx)(d.Suspense,{fallback:(0,n.jsx)(B,{text:o,...s?{className:s}:{},...p?{style:p}:{}}),children:(0,n.jsx)(x,{text:o,...s?{className:s}:{},...p?{style:p}:{},...a?{headingsFrom:a}:{}})}):(0,n.jsx)("div",{"data-graview-text-body":"",...s?{className:s}:{},style:{...h,...p},children:S(o).map((e,i)=>e.t==="p"?(0,n.jsx)("p",{style:k,children:e.lines.map((l,r)=>(0,n.jsxs)("span",{children:[r>0?(0,n.jsx)("br",{}):null,l]},r))},i):e.t==="ol"?(0,n.jsx)("ol",{start:e.start,style:y,children:e.items.map((l,r)=>(0,n.jsx)("li",{children:l},r))},i):(0,n.jsx)("ul",{style:y,children:e.items.map((l,r)=>(0,n.jsx)("li",{children:l},r))},i))})}export{b as a,B as b};
@@ -1,4 +1,4 @@
1
- import{a as k}from"./chunk.G4JJXA63.js";import{a as Q}from"./chunk.ZEW2OOZ5.js";import{a as Y}from"./chunk.ACEYGWMO.js";import{a as X}from"./chunk.P75TPZWT.js";import{c as _}from"./chunk.2B4WVCVV.js";import{Jc as G,Kc as H,Lc as P,Mc as J,ab as q,bb as z}from"./chunk.F5BCCGFK.js";var O=e=>"failed"in e;function ue(e,n){let r=e.schema.kinds,t=e.policy?.sees;if(!t?.length||z(n))return{kinds:r};let o=q(n).roles??[],i=new Set(t.filter(s=>s.roles==="*"||o.some(a=>s.roles.includes(a))).flatMap(s=>s.kinds));return{kinds:r.filter(s=>i.has(s))}}function L(e,n){if(!n)return e;let r=new Set(n.kinds.filter(i=>e.tryDefinition(i)!==void 0));if(r.size===e.kinds.length)return e;let t=new Map,o=i=>{if(r.has(i)){if(!t.has(i)){let s=e.tryDefinition(i),a=Object.fromEntries(Object.entries(s?.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,{...s,edges:a})}return t.get(i)}};return{...e,definitions:e.definitions.filter(i=>r.has(i.kind)),kinds:e.kinds.filter(i=>r.has(i)),tryDefinition:o,definition:i=>{let s=o(i);if(!s)throw new Error(`Unknown node kind "${i}"`);return s}}}var fe=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),y=e=>fe(e).replace(/[-_]+/g," ").trim();function I(e){let n=[];for(let t of e.kinds){let o=e.tryDefinition(t);if(!o)continue;let i=o.display?.labels??{},s=Object.entries(o.fields?.shape??{}).filter(([d])=>d!=="id"&&d!=="kind").map(([d,c])=>{let u=X(c);return{name:d,type:u?.type,...u?.options?{options:u.options}:{},words:(i[d]??y(d)).toLowerCase()}}),a=Object.entries(o.edges??{}).map(([d,c])=>({name:d,from:t,to:c.to==="*"?e.kinds.filter(u=>u!==t):c.to,words:y(d)})),l=(o.plural??`${y(t)}s`).toLowerCase();n.push({kind:t,plural:l,noun:(o.noun??y(t)).toLowerCase(),fields:s,roles:o.fieldRoles??{},edges:a})}let r=new Map(n.map(t=>[t.kind,t]));return{schema:e,kinds:n,info:t=>r.get(t)}}var $=(e,n)=>n===void 0?void 0:e.fields.find(r=>r.name===n),R=e=>e?.type==="date"||e?.type==="datetime",N=e=>e?.type==="number"||e?.type==="integer"||e?.type==="duration",re=e=>` ${e.toLowerCase().replace(/[“”"’‘]/g,"'").replace(/[^\p{L}\p{N}' -]+/gu," ").replace(/\s+/g," ").trim()} `,E=(e,n)=>e.includes(` ${n} `),x=e=>e.endsWith("ies")?`${e.slice(0,-3)}y`:e.endsWith("ses")?e.slice(0,-2):e.endsWith("s")?e.slice(0,-1):e;function pe(e,n){let r=[];for(let t of n.kinds){let o=new Set([t.plural,t.noun,`${t.noun}s`,y(t.kind),`${y(t.kind)}s`]),i=-1;for(let s of o){let a=e.indexOf(` ${s} `);a>=0&&(i<0||a<i)&&(i=a)}i>=0&&r.push({info:t,at:i})}return r.sort((t,o)=>t.at-o.at).map(t=>t.info)}function v(e,n,r){let t=n.trim().toLowerCase();if(t.length===0)return;let o=e.fields.filter(i=>!r||r(i));return o.find(i=>i.words===t||y(i.name)===t||i.name.toLowerCase()===t)??o.find(i=>i.words===x(t)||y(i.name)===x(t))??o.find(i=>t.split(" ").some(s=>s.length>2&&(i.words.split(" ").includes(s)||i.words.split(" ").includes(x(s)))))}function oe(e,n,r){let t=n.trim().toLowerCase();if(t.length!==0)return e.edges.find(o=>o.words===t||o.name.toLowerCase()===t)??e.edges.find(o=>o.to.some(i=>{let s=r.info(i);return s!==void 0&&(s.noun===x(t)||s.plural===t||y(i)===x(t))}))??e.edges.find(o=>t.split(" ").some(i=>i.length>2&&o.words.split(" ").includes(i)))}function U(e){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(e)?.[1]?.trim()}var me=/\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/,ge=/\bcalendar\b|\bmonth\b|\bagenda\b|\bschedule\b|\bdue\b|\bdeadlines?\b|\bdates?\b|\bwhen\b/,ye=/\btimeline\b|\bover time\b|\bgantt\b|\bspans?\b|\bweek\b/,he=/\bboard\b|\bkanban\b|\bcolumns?\b|\bpipeline\b|\bstages?\b|\bstatus\b/,be=/\blaid out\b|\blayout\b|\bseating\b|\bwhere (?:they|it|each) (?:sits?|lies?|stands?)\b|\bfloor\b/,we=/\bplan\b|\bmap\b|\bregions?\b/,ke=/\blist\b|\btable\b|\bgroup(?:ed)? by\b|\bsort(?:ed)? by\b|\bonly\b|\bjust the\b/;function $e(e){let n=[];return/\blist\b|\btable\b/.test(e)&&n.push("blocks"),me.test(e)&&n.push("coverage"),be.test(e)&&n.push("board"),(/\bfloor plan\b/.test(e)||we.test(e))&&n.push("plan"),ye.test(e)&&n.push("timeline"),ge.test(e)&&n.push("calendar"),he.test(e)&&n.push("columns"),ke.test(e)&&!n.includes("blocks")&&n.push("blocks"),n.length===0&&U(e)&&n.push("columns"),n}var se=e=>{let n=r=>r?` and not ${r}`:"";if(/\boverdue\b|\blate\b|\bpast due\b/.test(e))return{cond:(r,t)=>`days(today(), ${r}) < 0${n(t)}`,says:r=>`overdue by ${r.words}`};if(/\btoday\b/.test(e))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(e))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(e))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(e))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(e))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(e))return{range:"quarter",cond:r=>`days(today(), ${r}) >= 0 and days(today(), ${r}) <= 91`,says:r=>`with ${r.words} in the next quarter`}},M=e=>{if(/\bagenda\b|\bin order\b/.test(e))return"agenda";if(/\btoday\b|\bday\b/.test(e))return"day";if(/\bweek\b/.test(e))return"week";if(/\bquarter\b/.test(e))return"quarter";if(/\byears\b/.test(e))return"years";if(/\byear\b/.test(e))return"year";if(/\bmonth\b/.test(e))return"month"},Z=/^(user|person|people|member|staff|gardener|volunteer|owner|agent|employee|worker|team|player|customer|client|contact|party|attendee|guest)s?$/,j=class extends Error{},h=e=>{throw new j(e)};function Se(e,n){let r=e.fields.filter(i=>i.type==="enum");if(n){let i=v(e,n);if(i&&i.type==="enum")return i;i&&h(`${e.plural}' ${i.words} is not a choice, so it has no columns`)}let t=$(e,e.roles.status??e.roles.column);if(t?.type==="enum")return t;let o=r.find(i=>/^(status|stage|state|phase)$/.test(i.name));return o||(r[0]?r[0]:h(`${e.plural} have no choice field to put in columns`))}function ee(e,n){let r=e.fields.filter(R),t=l=>{let d=$(e,e.roles[l]);return R(d)?d:void 0},i=r.find(l=>E(n,l.words)||E(n,y(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 h(`no date field on ${e.plural}`);let s=t("end")??r.find(l=>l!==i&&/^(end|ends|until|to|finish|finished|harvested|due|closes|through)/i.test(l.name)),a=e.fields.find(l=>l.type==="boolean"&&/^(done|finished|complete|completed|closed)$/.test(l.name));return{start:i,...s&&s!==i?{end:s}:{},...a?{done:a}:{}}}function ie(e){let n=$(e,e.roles.start),r=$(e,e.roles.end),t=$(e,e.roles.column??e.roles.day??e.roles.columns);if(N(n)&&N(r)&&t?.type==="enum")return{start:n,end:r,column:t}}function De(e,n,r,t){let o=[];for(let s of e.kinds)for(let a of s.edges)for(let l of a.to){let d=e.info(l);if(!d||d.kind===s.kind)continue;let c=0;n.includes(s)&&(c+=4),n.includes(d)&&(c+=4),(Z.test(d.kind)||Z.test(d.noun))&&(c+=3),t&&(a.words.includes(t)||d.noun===x(t))&&(c+=5),a.words.split(" ").some(u=>u.length>2&&r.includes(` ${u}`))&&(c+=2),o.push({rows:s,across:d,link:a,score:c})}let i=o.sort((s,a)=>a.score-s.score)[0];return i||h(n[0]?`${n[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 ae(e,n,r,t,o){let i=U(t);switch(e){case"columns":{if(i){let s=v(n,i);if(!s||s.type!=="enum"){let a=oe(n,i,r);if(a){let l=r.info(a.to[0]);return{lens:"coverage",kind:n.kind,across:l.kind,link:a.name}}}}return{lens:"columns",kind:n.kind,column:Se(n,i).name}}case"calendar":{let s=ee(n,t),a=M(t);return{lens:"calendar",kind:n.kind,start:s.start.name,...s.end?{end:s.end.name}:{},...s.done?{done:s.done.name}:{},...a?{range:a}:{}}}case"timeline":{let s=ie(n);if(s&&!/\bdates?\b|\bdue\b|\bdeadlines?\b|\bmonths?\b|\byears?\b/.test(t))return{lens:"timeline",kind:n.kind,start:s.start.name,end:s.end.name,column:s.column.name};let a=ee(n,t);return{lens:"calendar",kind:n.kind,start:a.start.name,...a.end?{end:a.end.name}:{},...a.done?{done:a.done.name}:{},range:M(t)??"quarter"}}case"coverage":{let s=De(r,o,t,i);return{lens:"coverage",kind:s.rows.kind,across:s.across.kind,link:s.link.name}}case"board":{let s=$(n,n.roles.x)??n.fields.find(c=>c.name==="x"),a=$(n,n.roles.y)??n.fields.find(c=>c.name==="y");if(!N(s)||!N(a))return h(`${n.plural} have no x and y to be laid out by`);let d=r.kinds.flatMap(c=>c.edges.filter(u=>u.to.includes(n.kind)&&c.kind!==n.kind))[0]??n.edges[0];return d?{lens:"board",kind:n.kind,x:s.name,y:a.name,fill:d.name,...d.from!==n.kind?{fillFrom:"occupant"}:{}}:h(`nothing is joined to ${n.plural} to fill them`)}case"plan":{let s=$(n,n.roles.outline)??n.fields.find(a=>a.name==="outline");return s?{lens:"plan",kind:n.kind,outline:s.name}:h(`${n.plural} have no outline to draw a plan from`)}case"blocks":{let s={lens:"blocks",kind:n.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=v(n,a);if(!c||c.type!=="enum")return h(c?`${n.plural}' ${c.words} is not a choice, so they cannot be grouped by it`:`${n.plural} have nothing called ${a} to group by`);s.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=v(n,l);if(!c)return h(`${n.plural} have nothing called ${l} to sort by`);s.sort={by:c.name,.../\b(newest|latest|desc|descending|most)\b/.test(t)?{direction:"desc"}:{}}}let d=V(n,t);return d.length>0&&(s.where=d),s}}}function V(e,n){let r=[],t=se(n);if(t){let o=e.fields.filter(R),i=$(e,e.roles.start),s=o.find(l=>E(n,l.words))??(R(i)?i:void 0)??o[0];(!s||!R(s))&&h(`no date field on ${e.plural}`);let a=e.fields.find(l=>l.type==="boolean"&&/^(done|finished|complete|completed|closed)$/.test(l.name));r.push({expr:t.cond(s.name,/\boverdue\b|\blate\b|\bpast due\b/.test(n)?a?.name:void 0),says:t.says(s)})}if(/\bonly\b|\bjust\b|\bthat are\b|\bwhich are\b/.test(n)){for(let o of e.fields){if(o.type!=="enum")continue;let i=o.options?.find(s=>E(n,s.toLowerCase())||E(n,y(s)));i&&r.push({expr:`${o.name} == '${i.replace(/'/g,"")}'`,says:`that are ${y(i)}`})}if(/\bnot done\b|\bundone\b|\bunfinished\b|\bopen ones\b|\bstill to do\b/.test(n)){let o=e.fields.find(i=>i.type==="boolean"&&/^(done|finished|complete|completed)$/.test(i.name));o&&r.push({expr:`not ${o.name}`,says:`not ${o.words}`})}}return r}var B={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 Ae(e,n){let r=n.info(e.kind),t=o=>o?$(r,o)?.words??y(o):"";switch(e.lens){case"columns":return{title:`${k(r.plural)} by ${t(e.column)}`,detail:`of ${r.plural} by ${t(e.column)}`};case"calendar":{let o=e.range??"month";if(o==="agenda")return{title:`${k(r.plural)} in date order`,detail:`of ${r.plural} in order of ${t(e.start)}`};let i=o==="years"?"year":o;return{title:`${k(r.plural)} by ${i}`,detail:`of ${r.plural} by ${t(e.start)}, a ${i} at a time`}}case"timeline":return{title:`${k(r.plural)} over the ${t(e.column)}`,detail:`of ${r.plural} from ${t(e.start)} to ${t(e.end)}, by ${t(e.column)}`};case"coverage":{let o=n.info(e.across);return{title:`${k(r.plural)} by ${o.noun}`,detail:`of which ${o.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 o=[e.where?.map(i=>i.says).join(" and "),e.group?`by ${t(e.group)}`:void 0,e.sort?`in order of ${t(e.sort.by)}`:void 0].filter(i=>!!i);return{title:[k(r.plural),...o].join(" "),detail:[`of ${r.plural}`,...o].join(" ")}}}}function Re(e,n){let r={title:n,on:e.kind};switch(e.lens){case"columns":return{name:"columns",...r,bindings:{[e.kind]:{column:e.column}}};case"calendar":return{name:"calendar",...r,bindings:{[e.kind]:{start:e.start,...e.end?{end:e.end}:{},...e.done?{done:e.done}:{}}},...e.range?{options:{range:e.range}}:{}};case"timeline":return{name:"timeline",...r,bindings:{[e.kind]:{start:e.start,end:e.end,column:e.column}}};case"coverage":return{name:"coverage",...r,bindings:{rows:{kind:e.kind},columns:{kind:e.across},link:{edge:e.link}}};case"board":return{name:"board",...r,bindings:{slots:{kind:e.kind},x:{field:e.x,on:"slots"},y:{field:e.y,on:"slots"},fill:{edge:e.fill}},...e.fillFrom?{options:{fillFrom:e.fillFrom}}:{}};case"plan":return{name:"plan",...r,bindings:{regions:{kind:e.kind},outline:{field:e.outline,on:"regions"}}};default:{let t=e.where?.length?` where ${e.where.map(i=>e.where.length>1?`(${i.expr})`:i.expr).join(" and ")}`:"",o={list:`all('${e.kind}')${t}`,as:e.as??"row"};return e.group&&(o.group=e.group),e.sort&&(o.sort=e.sort.direction?{by:e.sort.by,direction:e.sort.direction}:e.sort.by),o.empty="Nothing here yet.",{name:"blocks",...r,options:{blocks:[o]}}}}}function C(e,n){let r=o=>o.toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,""),t=new Set(["home","overview",...Q(n).map(o=>o.slug),...(n.lenses??[]).flatMap(o=>o.title?[r(o.title)]:[])]);if(!t.has(r(e)))return e;for(let o=2;;o++)if(!t.has(r(`${e} ${o}`)))return`${e} ${o}`}var ne={title:[],headline:[],text:["tone"],figure:["as","currency","label"],list:["sort","limit","group","empty","as"],progress:["label"],group:["direction"],when:["show"],divider:[]};function Ee(e,n){if(!Array.isArray(n)||n.length===0)return"it has no blocks to draw";if(n.length>40)return"it has more blocks than a place draws";let r=(s,a)=>{if(typeof s!="string"||s.trim()==="")return`its ${a} says nothing`;try{return _(s)}catch(l){return`its ${a} does not read: ${l instanceof Error?l.message.replace(/ \(at character.*$/,""):String(l)}`}},t=s=>{if(s.t==="where")return t(s.set);if(s.t==="call"&&s.fn==="all"){let a=s.args[0];return a?.t==="lit"&&typeof a.value=="string"?e.info(a.value)??null:void 0}},o=(s,a)=>{switch(s.t){case"lit":return;case"ident":return a&&!a.fields.some(l=>l.name===s.name)&&!a.edges.some(l=>l.name===s.name)?`${a.plural} have nothing called ${s.name}`:void 0;case"member":return o(s.object,a);case"list":return s.items.map(l=>o(l,a)).find(Boolean);case"unary":return o(s.operand,a);case"binary":return o(s.left,a)??o(s.right,a);case"where":{let l=t(s.set);return l===null?"Nothing by that name here":o(s.set,a)??o(s.filter,l??void 0)}case"call":return s.fn==="all"?t(s)===null?"Nothing by that name here":void 0:s.args.map(l=>o(l,a)).find(Boolean)}},i=(s,a)=>{if(a>4)return"its blocks nest deeper than a place draws";for(let l of s){if(!w(l))return"a block is not an object";let d=Object.keys(ne).find(p=>p in l);if(!d)return`"${Object.keys(l)[0]??""}" is not a block a place draws`;let c=Object.keys(l).find(p=>p!==d&&p!=="key"&&!ne[d].includes(p));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 p=r(u,d);if(typeof p=="string")return p;let g=o(p,void 0);if(g)return g;if(d==="list"){let f=t(p);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 m of["group","sort"]){let b=l[m],S=typeof b=="string"?b:w(b)&&typeof b.by=="string"?b.by:void 0;if(b===void 0)continue;let D=S?f.fields.find(ce=>ce.name===S):void 0;if(!D)return`${f.plural} have nothing called ${String(S??b)} to ${m} by`;if(m==="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 m=i(f,a+1);if(m)return m}}else if(d==="group"){if(!Array.isArray(u))return"a group block holds a list of blocks";let p=i(u,a+1);if(p)return p}else{if(d!=="divider"&&typeof u!="string")return`a ${d} block says words`;if(typeof u=="string")for(let p of u.matchAll(/\{([^{}]*)\}/g)){let g=p[1].split(/\|(?![|])/)[0],f=r(g,`${d}'s braces`);if(typeof f=="string")return f;let m=o(f,void 0);if(m)return m}}}};return i(n,1)}function T(e,n,r){let t=L(e.schema,r),o=f=>({ok:!1,failed:`Couldn't draw that: ${f.replace(/\.$/,"")}.`});if(!P(n.name)||n.name==="reach")return o(`"${String(n.name)}" is not a picture the seat can draw; it draws ${H.filter(f=>f!=="reach").join(", ")}`);if(typeof n.title!="string"||n.title.trim().length===0||n.title.length>80)return o("it needs a title of a few words");if(typeof n.on!="string"||!t.tryDefinition(n.on))return o("Nothing by that name here");let i=G[n.name],s=n.bindings??{};if(i.binds==="fields")for(let[f,m]of Object.entries(s)){if(!t.tryDefinition(f))return o("Nothing by that name here");let b=Object.keys(t.tryDefinition(f).fields?.shape??{});for(let[S,D]of Object.entries(m??{}))if(typeof D!="string"||!b.includes(D))return o(`${y(f)} has no field "${String(D)}" for its ${S}`);for(let S of i.requiredRoles)if(!(S in(m??{})))return o(`a ${n.name} needs ${y(f)}'s ${S}`)}else if(i.binds==="entities")for(let f of i.requiredRoles){let m=s[f];if(!m)return o(`a ${n.name} needs its ${f}`);if(typeof m.kind=="string"&&!t.tryDefinition(m.kind))return o("Nothing by that name here")}let a={...e,schema:t,lenses:[...e.lenses??[],n]},l=a.lenses.length-1,d=J(a),c=`lenses.${l}`,u=d.findings.find(f=>f.path===c||f.path.startsWith(`${c}.`));if(u)return o(u.message.replace(/^"[^"]*" /,"it "));let p=d.undrawn.find(f=>f.index===l);if(p)return o(p.why);let g=d.drawn.find(f=>f.index===l);if(!g)return o("its bindings name something the app does not have");if(g.as==="overview")return o(`"${n.title}" is the scene's own address; give it another title`);if(n.name==="blocks"){let f=Ee(I(t),n.options?.blocks);if(f)return o(f)}return{ok:!0,drawn:g}}function K(e){return{op:"add-lens",title:e.title,lens:e.name,on:e.on,...e.bindings?{bindings:e.bindings}:{},...e.options?{options:e.options}:{}}}function xe(e){return{op:"remove-lens",title:e.title,on:e.on}}var w=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);function de(e){let n=w(e)?e:{},r=String(n.lens??n.name??""),t=n.bindings,o=typeof n.on=="string"?n.on:w(t)&&G[r]?.binds==="fields"?Object.keys(t)[0]??"":"";return{name:r,title:typeof n.title=="string"?n.title.trim():"",on:o,...w(t)?{bindings:t}:{},...w(n.options)?{options:n.options}:{}}}function ve(e){let n=o=>w(e.bindings?.[o])?e.bindings[o]:{},r=o=>typeof o=="string"?o:void 0,t=n(e.on);switch(e.name){case"columns":return r(t.column)?{lens:"columns",kind:e.on,column:t.column}:void 0;case"calendar":{let o=r(e.options?.range);return r(t.start)?{lens:"calendar",kind:e.on,start:t.start,...r(t.end)?{end:t.end}:{},...r(t.done)?{done:t.done}:{},...o?{range:o}:{}}:void 0}case"timeline":return r(t.start)&&r(t.end)&&r(t.column)?{lens:"timeline",kind:e.on,start:t.start,end:t.end,column:t.column}:void 0;case"coverage":{let o=w(e.bindings?.columns)?r(e.bindings.columns.kind):void 0,i=w(e.bindings?.link)?r(e.bindings.link.edge):void 0;return o&&i?{lens:"coverage",kind:e.on,across:o,link:i}:void 0}case"blocks":{let o=e.options?.blocks;if(!Array.isArray(o)||o.length!==1||!w(o[0]))return;let i=o[0],s=new RegExp(`^all\\('${e.on}'\\)(?: where (.+))?$`).exec(String(i.list??""));if(!s)return;let a=i.sort;return{lens:"blocks",kind:e.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"}:{}}}:{},...s[1]?{where:[{expr:s[1],says:"as asked"}]}:{}}}default:return}}function W(e,n,r,t,o){let i=I(L(e.schema,t)).info(n.on),s=ve(n);return{title:n.title,said:`${B[n.name]??"A picture"} of ${i?.plural??y(n.on)}.`,kind:n.on,lens:n,drawn:r,edit:K(n),by:o,asks:[],...s?{recipe:s}:{}}}function te(e){return{title:e.title,said:e.said,lens:{title:e.lens.title,lens:e.lens.name,on:e.lens.on,...e.lens.bindings?{bindings:e.lens.bindings}:{},...e.lens.options?{options:e.lens.options}:{}},edit:e.edit,by:e.by,check:"It draws, and graview check would take it."}}function F(e,n,r,t,o){let i=Ae(e,n),s=e.title??o??C(i.title,r.app),a=Re(e,s),l=T(r.app,a,r.sight);return l.ok?{title:s,said:`${B[e.lens]} ${i.detail}.`,kind:e.kind,lens:a,drawn:l.drawn,edit:K(a),by:"template",asks:t,recipe:e}:{failed:l.failed,...r.lastGood?{lastGood:r.lastGood}:{}}}function Ye(e,n){let r=I(L(n.app.schema,n.sight)),t=r.info(e.kind);if(!t)return{failed:"Couldn't draw that: Nothing by that name here."};let o=e.lens==="blocks"&&!e.group&&!e.sort&&!e.where?.length&&e.title===void 0;return F(o?{...e,title:C(`Every ${t.noun}`,n.app)}:e,r,n,[])}function Le(e,n,r,t){if(r.length>0)return r;let o=s=>{switch(e){case"columns":return s.fields.some(a=>a.type==="enum");case"calendar":return s.fields.some(R);case"timeline":return ie(s)!==void 0||s.fields.some(R);case"coverage":return s.edges.some(a=>a.to.some(l=>l!==s.kind));case"board":return s.fields.some(a=>a.name==="x")&&s.fields.some(a=>a.name==="y");case"plan":return s.fields.some(a=>a.name==="outline")||s.roles.outline!==void 0;default:return!0}};return[...n.kinds.filter(o)].sort((s,a)=>Number(a.fields.some(l=>E(t,l.words)))-Number(s.fields.some(l=>E(t,l.words))))}function Ie(e,n){let r=I(L(n.app.schema,n.sight)),t=re(e),o=$e(t);if(o.length===0)return;let i=pe(t,r),s;for(let a of o){let l=a==="coverage"?[i[0]??r.kinds[0]].filter(d=>!!d):Le(a,r,i,t);for(let d of l)try{let c=ae(a,d,r,t,i),u=F(c,r,n,[e]);if(!O(u))return u;s??=u.failed}catch(c){if(!(c instanceof j))throw c;s??=`Couldn't draw that: ${c.message}.`}l.length===0&&i.length===0&&(s??=`Couldn't draw that: nothing here has what ${B[a].toLowerCase()} needs.`)}return{failed:s??"Couldn't draw that: Nothing by that name here.",...n.lastGood?{lastGood:n.lastGood}:{}}}async function Oe(e,n){let r=n.lastGood?{lastGood:n.lastGood}:{};if(e.trim().length===0)return{failed:"Say what you would like to see, like \u201Ca board of tasks by status\u201D.",...r};let t=Ie(e,n);if(t&&!O(t))return t;if(!n.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 o=await le(e,n,void 0);return O(o)&&t?t:o}async function je(e,n,r){let t={lastGood:e},o={...r,lastGood:e},i=I(L(r.app.schema,r.sight)),s=re(n),a=i.info(e.kind),l=[...e.asks,n];if(!a)return{failed:"Couldn't change that: Nothing by that name here.",...t};let d=e.recipe,c=/^ (?:call|name|title) (?:it|this)? ?(.+?) $/.exec(s)??/ (?:call|name) it (.+?) $/.exec(s);try{if(c){let g=n.replace(/^.*?\b(?:call|name|title)\b\s*(?:it|this)?\s*/i,"").replace(/^["“']|["”']$/g,"").trim();if(g.length===0)return{failed:"Couldn't change that: say what to call it.",...t};let f={...e.lens,title:C(g,r.app)},m=T(r.app,f,r.sight);return m.ok?{...e,title:f.title,lens:f,drawn:m.drawn,edit:K(f),asks:l,...d?{recipe:{...d,title:f.title}}:{}}:{failed:m.failed,...t}}let p=/ as (?:a |an )?(board|kanban|calendar|timeline|list|table|cards|rows|grid|plan|layout)\b/.exec(s);if(p){let g=p[1]==="board"||p[1]==="kanban"?"columns":p[1]==="calendar"?"calendar":p[1]==="timeline"?"timeline":p[1]==="grid"?"coverage":p[1]==="plan"?"plan":p[1]==="layout"?"board":"blocks",f=ae(g,a,i,s,[a]),m=p[1]==="cards"?"card":p[1]==="rows"?"row":void 0,b=g==="blocks"&&d?.lens==="blocks"?{...d,...m?{as:m}:{}}:g==="blocks"&&d?.lens==="columns"?{...f,group:d.column,...m?{as:m}:{}}:f;return F(A(b),i,o,l)}if(d){let g=Te(d,a,i,s);if(g)return F(g,i,o,l)}}catch(p){if(!(p instanceof j))throw p;return{failed:`Couldn't change that: ${p.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 le(n,o,e);return O(u)?u:{...u,asks:l}}var A=e=>{let{title:n,...r}=e;return r};function Te(e,n,r,t){let o=/ (?: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)?U(t):void 0);if(o){let d=v(n,o);if(d?.type==="enum")return e.lens==="blocks"?{...A(e),group:d.name}:{lens:"columns",kind:e.kind,column:d.name};let c=oe(n,o,r);return c?{lens:"coverage",kind:e.kind,across:c.to[0],link:c.name}:h(d?`${n.plural}' ${d.words} is not a choice, so they cannot be grouped by it`:`${n.plural} have nothing called ${o} 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=v(n,i);return d?{...e.lens==="blocks"?A(e):{lens:"blocks",kind:e.kind,as:"row",...e.lens==="columns"?{group:e.column}:{}},sort:{by:d.name,.../\b(newest|latest|desc|descending|most)\b/.test(t)?{direction:"desc"}:{}}}:h(`${n.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(e.lens!=="blocks"||!e.where)return h("it already shows all of them");let{where:d,...c}=A(e);return c}let s=se(t);if(s&&e.lens==="calendar"&&s.range)return{...A(e),range:s.range};if(s&&e.lens==="calendar"&&!s.range)return{lens:"blocks",kind:e.kind,as:"row",sort:{by:e.start},where:V(n,t)};let a=V(n,t);if(a.length>0){let d=e.lens==="blocks"?A(e):{lens:"blocks",kind:e.kind,as:"row",...e.lens==="columns"?{group:e.column}:{}};return{...d,where:[...d.where??[],...a]}}let l=e.lens==="calendar"?M(t):void 0;if(l)return{...A(e),range:l}}function Ne(e){return e.kinds.map(n=>{let r=n.fields.map(i=>`${i.name} (${i.type??"value"}${i.options?`: ${i.options.join(" | ")}`:""})`).join(", "),t=n.edges.map(i=>`${i.name} \u2192 ${i.to.join(" | ")}`).join(", "),o=Object.entries(n.roles).map(([i,s])=>`${i}=${s}`).join(", ");return`- ${n.kind} ("${n.plural}"): ${r}${t?`; relations: ${t}`:""}${o?`; roles: ${o}`:""}`}).join(`
1
+ import{a as k}from"./chunk.G4JJXA63.js";import{a as Q}from"./chunk.FGYCYLUS.js";import{a as Y}from"./chunk.3V2M3S4U.js";import{a as X}from"./chunk.QYWBQ5NX.js";import{c as _}from"./chunk.X2OLXTRL.js";import{Tc as G,Uc as H,Vc as P,Wc as J,ib as q,jb as z}from"./chunk.HBBVVALN.js";var O=e=>"failed"in e;function ue(e,n){let r=e.schema.kinds,t=e.policy?.sees;if(!t?.length||z(n))return{kinds:r};let o=q(n).roles??[],i=new Set(t.filter(s=>s.roles==="*"||o.some(a=>s.roles.includes(a))).flatMap(s=>s.kinds));return{kinds:r.filter(s=>i.has(s))}}function L(e,n){if(!n)return e;let r=new Set(n.kinds.filter(i=>e.tryDefinition(i)!==void 0));if(r.size===e.kinds.length)return e;let t=new Map,o=i=>{if(r.has(i)){if(!t.has(i)){let s=e.tryDefinition(i),a=Object.fromEntries(Object.entries(s?.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,{...s,edges:a})}return t.get(i)}};return{...e,definitions:e.definitions.filter(i=>r.has(i.kind)),kinds:e.kinds.filter(i=>r.has(i)),tryDefinition:o,definition:i=>{let s=o(i);if(!s)throw new Error(`Unknown node kind "${i}"`);return s}}}var fe=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),y=e=>fe(e).replace(/[-_]+/g," ").trim();function I(e){let n=[];for(let t of e.kinds){let o=e.tryDefinition(t);if(!o)continue;let i=o.display?.labels??{},s=Object.entries(o.fields?.shape??{}).filter(([d])=>d!=="id"&&d!=="kind").map(([d,c])=>{let u=X(c);return{name:d,type:u?.type,...u?.options?{options:u.options}:{},words:(i[d]??y(d)).toLowerCase()}}),a=Object.entries(o.edges??{}).map(([d,c])=>({name:d,from:t,to:c.to==="*"?e.kinds.filter(u=>u!==t):c.to,words:y(d)})),l=(o.plural??`${y(t)}s`).toLowerCase();n.push({kind:t,plural:l,noun:(o.noun??y(t)).toLowerCase(),fields:s,roles:o.fieldRoles??{},edges:a})}let r=new Map(n.map(t=>[t.kind,t]));return{schema:e,kinds:n,info:t=>r.get(t)}}var $=(e,n)=>n===void 0?void 0:e.fields.find(r=>r.name===n),R=e=>e?.type==="date"||e?.type==="datetime",N=e=>e?.type==="number"||e?.type==="integer"||e?.type==="duration",re=e=>` ${e.toLowerCase().replace(/[“”"’‘]/g,"'").replace(/[^\p{L}\p{N}' -]+/gu," ").replace(/\s+/g," ").trim()} `,E=(e,n)=>e.includes(` ${n} `),x=e=>e.endsWith("ies")?`${e.slice(0,-3)}y`:e.endsWith("ses")?e.slice(0,-2):e.endsWith("s")?e.slice(0,-1):e;function pe(e,n){let r=[];for(let t of n.kinds){let o=new Set([t.plural,t.noun,`${t.noun}s`,y(t.kind),`${y(t.kind)}s`]),i=-1;for(let s of o){let a=e.indexOf(` ${s} `);a>=0&&(i<0||a<i)&&(i=a)}i>=0&&r.push({info:t,at:i})}return r.sort((t,o)=>t.at-o.at).map(t=>t.info)}function v(e,n,r){let t=n.trim().toLowerCase();if(t.length===0)return;let o=e.fields.filter(i=>!r||r(i));return o.find(i=>i.words===t||y(i.name)===t||i.name.toLowerCase()===t)??o.find(i=>i.words===x(t)||y(i.name)===x(t))??o.find(i=>t.split(" ").some(s=>s.length>2&&(i.words.split(" ").includes(s)||i.words.split(" ").includes(x(s)))))}function oe(e,n,r){let t=n.trim().toLowerCase();if(t.length!==0)return e.edges.find(o=>o.words===t||o.name.toLowerCase()===t)??e.edges.find(o=>o.to.some(i=>{let s=r.info(i);return s!==void 0&&(s.noun===x(t)||s.plural===t||y(i)===x(t))}))??e.edges.find(o=>t.split(" ").some(i=>i.length>2&&o.words.split(" ").includes(i)))}function U(e){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(e)?.[1]?.trim()}var me=/\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/,ge=/\bcalendar\b|\bmonth\b|\bagenda\b|\bschedule\b|\bdue\b|\bdeadlines?\b|\bdates?\b|\bwhen\b/,ye=/\btimeline\b|\bover time\b|\bgantt\b|\bspans?\b|\bweek\b/,he=/\bboard\b|\bkanban\b|\bcolumns?\b|\bpipeline\b|\bstages?\b|\bstatus\b/,be=/\blaid out\b|\blayout\b|\bseating\b|\bwhere (?:they|it|each) (?:sits?|lies?|stands?)\b|\bfloor\b/,we=/\bplan\b|\bmap\b|\bregions?\b/,ke=/\blist\b|\btable\b|\bgroup(?:ed)? by\b|\bsort(?:ed)? by\b|\bonly\b|\bjust the\b/;function $e(e){let n=[];return/\blist\b|\btable\b/.test(e)&&n.push("blocks"),me.test(e)&&n.push("coverage"),be.test(e)&&n.push("board"),(/\bfloor plan\b/.test(e)||we.test(e))&&n.push("plan"),ye.test(e)&&n.push("timeline"),ge.test(e)&&n.push("calendar"),he.test(e)&&n.push("columns"),ke.test(e)&&!n.includes("blocks")&&n.push("blocks"),n.length===0&&U(e)&&n.push("columns"),n}var se=e=>{let n=r=>r?` and not ${r}`:"";if(/\boverdue\b|\blate\b|\bpast due\b/.test(e))return{cond:(r,t)=>`days(today(), ${r}) < 0${n(t)}`,says:r=>`overdue by ${r.words}`};if(/\btoday\b/.test(e))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(e))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(e))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(e))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(e))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(e))return{range:"quarter",cond:r=>`days(today(), ${r}) >= 0 and days(today(), ${r}) <= 91`,says:r=>`with ${r.words} in the next quarter`}},M=e=>{if(/\bagenda\b|\bin order\b/.test(e))return"agenda";if(/\btoday\b|\bday\b/.test(e))return"day";if(/\bweek\b/.test(e))return"week";if(/\bquarter\b/.test(e))return"quarter";if(/\byears\b/.test(e))return"years";if(/\byear\b/.test(e))return"year";if(/\bmonth\b/.test(e))return"month"},Z=/^(user|person|people|member|staff|gardener|volunteer|owner|agent|employee|worker|team|player|customer|client|contact|party|attendee|guest)s?$/,j=class extends Error{},h=e=>{throw new j(e)};function Se(e,n){let r=e.fields.filter(i=>i.type==="enum");if(n){let i=v(e,n);if(i&&i.type==="enum")return i;i&&h(`${e.plural}' ${i.words} is not a choice, so it has no columns`)}let t=$(e,e.roles.status??e.roles.column);if(t?.type==="enum")return t;let o=r.find(i=>/^(status|stage|state|phase)$/.test(i.name));return o||(r[0]?r[0]:h(`${e.plural} have no choice field to put in columns`))}function ee(e,n){let r=e.fields.filter(R),t=l=>{let d=$(e,e.roles[l]);return R(d)?d:void 0},i=r.find(l=>E(n,l.words)||E(n,y(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 h(`no date field on ${e.plural}`);let s=t("end")??r.find(l=>l!==i&&/^(end|ends|until|to|finish|finished|harvested|due|closes|through)/i.test(l.name)),a=e.fields.find(l=>l.type==="boolean"&&/^(done|finished|complete|completed|closed)$/.test(l.name));return{start:i,...s&&s!==i?{end:s}:{},...a?{done:a}:{}}}function ie(e){let n=$(e,e.roles.start),r=$(e,e.roles.end),t=$(e,e.roles.column??e.roles.day??e.roles.columns);if(N(n)&&N(r)&&t?.type==="enum")return{start:n,end:r,column:t}}function De(e,n,r,t){let o=[];for(let s of e.kinds)for(let a of s.edges)for(let l of a.to){let d=e.info(l);if(!d||d.kind===s.kind)continue;let c=0;n.includes(s)&&(c+=4),n.includes(d)&&(c+=4),(Z.test(d.kind)||Z.test(d.noun))&&(c+=3),t&&(a.words.includes(t)||d.noun===x(t))&&(c+=5),a.words.split(" ").some(u=>u.length>2&&r.includes(` ${u}`))&&(c+=2),o.push({rows:s,across:d,link:a,score:c})}let i=o.sort((s,a)=>a.score-s.score)[0];return i||h(n[0]?`${n[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 ae(e,n,r,t,o){let i=U(t);switch(e){case"columns":{if(i){let s=v(n,i);if(!s||s.type!=="enum"){let a=oe(n,i,r);if(a){let l=r.info(a.to[0]);return{lens:"coverage",kind:n.kind,across:l.kind,link:a.name}}}}return{lens:"columns",kind:n.kind,column:Se(n,i).name}}case"calendar":{let s=ee(n,t),a=M(t);return{lens:"calendar",kind:n.kind,start:s.start.name,...s.end?{end:s.end.name}:{},...s.done?{done:s.done.name}:{},...a?{range:a}:{}}}case"timeline":{let s=ie(n);if(s&&!/\bdates?\b|\bdue\b|\bdeadlines?\b|\bmonths?\b|\byears?\b/.test(t))return{lens:"timeline",kind:n.kind,start:s.start.name,end:s.end.name,column:s.column.name};let a=ee(n,t);return{lens:"calendar",kind:n.kind,start:a.start.name,...a.end?{end:a.end.name}:{},...a.done?{done:a.done.name}:{},range:M(t)??"quarter"}}case"coverage":{let s=De(r,o,t,i);return{lens:"coverage",kind:s.rows.kind,across:s.across.kind,link:s.link.name}}case"board":{let s=$(n,n.roles.x)??n.fields.find(c=>c.name==="x"),a=$(n,n.roles.y)??n.fields.find(c=>c.name==="y");if(!N(s)||!N(a))return h(`${n.plural} have no x and y to be laid out by`);let d=r.kinds.flatMap(c=>c.edges.filter(u=>u.to.includes(n.kind)&&c.kind!==n.kind))[0]??n.edges[0];return d?{lens:"board",kind:n.kind,x:s.name,y:a.name,fill:d.name,...d.from!==n.kind?{fillFrom:"occupant"}:{}}:h(`nothing is joined to ${n.plural} to fill them`)}case"plan":{let s=$(n,n.roles.outline)??n.fields.find(a=>a.name==="outline");return s?{lens:"plan",kind:n.kind,outline:s.name}:h(`${n.plural} have no outline to draw a plan from`)}case"blocks":{let s={lens:"blocks",kind:n.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=v(n,a);if(!c||c.type!=="enum")return h(c?`${n.plural}' ${c.words} is not a choice, so they cannot be grouped by it`:`${n.plural} have nothing called ${a} to group by`);s.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=v(n,l);if(!c)return h(`${n.plural} have nothing called ${l} to sort by`);s.sort={by:c.name,.../\b(newest|latest|desc|descending|most)\b/.test(t)?{direction:"desc"}:{}}}let d=V(n,t);return d.length>0&&(s.where=d),s}}}function V(e,n){let r=[],t=se(n);if(t){let o=e.fields.filter(R),i=$(e,e.roles.start),s=o.find(l=>E(n,l.words))??(R(i)?i:void 0)??o[0];(!s||!R(s))&&h(`no date field on ${e.plural}`);let a=e.fields.find(l=>l.type==="boolean"&&/^(done|finished|complete|completed|closed)$/.test(l.name));r.push({expr:t.cond(s.name,/\boverdue\b|\blate\b|\bpast due\b/.test(n)?a?.name:void 0),says:t.says(s)})}if(/\bonly\b|\bjust\b|\bthat are\b|\bwhich are\b/.test(n)){for(let o of e.fields){if(o.type!=="enum")continue;let i=o.options?.find(s=>E(n,s.toLowerCase())||E(n,y(s)));i&&r.push({expr:`${o.name} == '${i.replace(/'/g,"")}'`,says:`that are ${y(i)}`})}if(/\bnot done\b|\bundone\b|\bunfinished\b|\bopen ones\b|\bstill to do\b/.test(n)){let o=e.fields.find(i=>i.type==="boolean"&&/^(done|finished|complete|completed)$/.test(i.name));o&&r.push({expr:`not ${o.name}`,says:`not ${o.words}`})}}return r}var B={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 Ae(e,n){let r=n.info(e.kind),t=o=>o?$(r,o)?.words??y(o):"";switch(e.lens){case"columns":return{title:`${k(r.plural)} by ${t(e.column)}`,detail:`of ${r.plural} by ${t(e.column)}`};case"calendar":{let o=e.range??"month";if(o==="agenda")return{title:`${k(r.plural)} in date order`,detail:`of ${r.plural} in order of ${t(e.start)}`};let i=o==="years"?"year":o;return{title:`${k(r.plural)} by ${i}`,detail:`of ${r.plural} by ${t(e.start)}, a ${i} at a time`}}case"timeline":return{title:`${k(r.plural)} over the ${t(e.column)}`,detail:`of ${r.plural} from ${t(e.start)} to ${t(e.end)}, by ${t(e.column)}`};case"coverage":{let o=n.info(e.across);return{title:`${k(r.plural)} by ${o.noun}`,detail:`of which ${o.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 o=[e.where?.map(i=>i.says).join(" and "),e.group?`by ${t(e.group)}`:void 0,e.sort?`in order of ${t(e.sort.by)}`:void 0].filter(i=>!!i);return{title:[k(r.plural),...o].join(" "),detail:[`of ${r.plural}`,...o].join(" ")}}}}function Re(e,n){let r={title:n,on:e.kind};switch(e.lens){case"columns":return{name:"columns",...r,bindings:{[e.kind]:{column:e.column}}};case"calendar":return{name:"calendar",...r,bindings:{[e.kind]:{start:e.start,...e.end?{end:e.end}:{},...e.done?{done:e.done}:{}}},...e.range?{options:{range:e.range}}:{}};case"timeline":return{name:"timeline",...r,bindings:{[e.kind]:{start:e.start,end:e.end,column:e.column}}};case"coverage":return{name:"coverage",...r,bindings:{rows:{kind:e.kind},columns:{kind:e.across},link:{edge:e.link}}};case"board":return{name:"board",...r,bindings:{slots:{kind:e.kind},x:{field:e.x,on:"slots"},y:{field:e.y,on:"slots"},fill:{edge:e.fill}},...e.fillFrom?{options:{fillFrom:e.fillFrom}}:{}};case"plan":return{name:"plan",...r,bindings:{regions:{kind:e.kind},outline:{field:e.outline,on:"regions"}}};default:{let t=e.where?.length?` where ${e.where.map(i=>e.where.length>1?`(${i.expr})`:i.expr).join(" and ")}`:"",o={list:`all('${e.kind}')${t}`,as:e.as??"row"};return e.group&&(o.group=e.group),e.sort&&(o.sort=e.sort.direction?{by:e.sort.by,direction:e.sort.direction}:e.sort.by),o.empty="Nothing here yet.",{name:"blocks",...r,options:{blocks:[o]}}}}}function C(e,n){let r=o=>o.toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,""),t=new Set(["home","overview",...Q(n).map(o=>o.slug),...(n.lenses??[]).flatMap(o=>o.title?[r(o.title)]:[])]);if(!t.has(r(e)))return e;for(let o=2;;o++)if(!t.has(r(`${e} ${o}`)))return`${e} ${o}`}var ne={title:[],headline:[],text:["tone"],figure:["as","currency","label"],list:["sort","limit","group","empty","as"],progress:["label"],group:["direction"],when:["show"],divider:[]};function Ee(e,n){if(!Array.isArray(n)||n.length===0)return"it has no blocks to draw";if(n.length>40)return"it has more blocks than a place draws";let r=(s,a)=>{if(typeof s!="string"||s.trim()==="")return`its ${a} says nothing`;try{return _(s)}catch(l){return`its ${a} does not read: ${l instanceof Error?l.message.replace(/ \(at character.*$/,""):String(l)}`}},t=s=>{if(s.t==="where")return t(s.set);if(s.t==="call"&&s.fn==="all"){let a=s.args[0];return a?.t==="lit"&&typeof a.value=="string"?e.info(a.value)??null:void 0}},o=(s,a)=>{switch(s.t){case"lit":return;case"ident":return a&&!a.fields.some(l=>l.name===s.name)&&!a.edges.some(l=>l.name===s.name)?`${a.plural} have nothing called ${s.name}`:void 0;case"member":return o(s.object,a);case"list":return s.items.map(l=>o(l,a)).find(Boolean);case"unary":return o(s.operand,a);case"binary":return o(s.left,a)??o(s.right,a);case"where":{let l=t(s.set);return l===null?"Nothing by that name here":o(s.set,a)??o(s.filter,l??void 0)}case"call":return s.fn==="all"?t(s)===null?"Nothing by that name here":void 0:s.args.map(l=>o(l,a)).find(Boolean)}},i=(s,a)=>{if(a>4)return"its blocks nest deeper than a place draws";for(let l of s){if(!w(l))return"a block is not an object";let d=Object.keys(ne).find(p=>p in l);if(!d)return`"${Object.keys(l)[0]??""}" is not a block a place draws`;let c=Object.keys(l).find(p=>p!==d&&p!=="key"&&!ne[d].includes(p));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 p=r(u,d);if(typeof p=="string")return p;let g=o(p,void 0);if(g)return g;if(d==="list"){let f=t(p);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 m of["group","sort"]){let b=l[m],S=typeof b=="string"?b:w(b)&&typeof b.by=="string"?b.by:void 0;if(b===void 0)continue;let D=S?f.fields.find(ce=>ce.name===S):void 0;if(!D)return`${f.plural} have nothing called ${String(S??b)} to ${m} by`;if(m==="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 m=i(f,a+1);if(m)return m}}else if(d==="group"){if(!Array.isArray(u))return"a group block holds a list of blocks";let p=i(u,a+1);if(p)return p}else{if(d!=="divider"&&typeof u!="string")return`a ${d} block says words`;if(typeof u=="string")for(let p of u.matchAll(/\{([^{}]*)\}/g)){let g=p[1].split(/\|(?![|])/)[0],f=r(g,`${d}'s braces`);if(typeof f=="string")return f;let m=o(f,void 0);if(m)return m}}}};return i(n,1)}function T(e,n,r){let t=L(e.schema,r),o=f=>({ok:!1,failed:`Couldn't draw that: ${f.replace(/\.$/,"")}.`});if(!P(n.name)||n.name==="reach")return o(`"${String(n.name)}" is not a picture the seat can draw; it draws ${H.filter(f=>f!=="reach").join(", ")}`);if(typeof n.title!="string"||n.title.trim().length===0||n.title.length>80)return o("it needs a title of a few words");if(typeof n.on!="string"||!t.tryDefinition(n.on))return o("Nothing by that name here");let i=G[n.name],s=n.bindings??{};if(i.binds==="fields")for(let[f,m]of Object.entries(s)){if(!t.tryDefinition(f))return o("Nothing by that name here");let b=Object.keys(t.tryDefinition(f).fields?.shape??{});for(let[S,D]of Object.entries(m??{}))if(typeof D!="string"||!b.includes(D))return o(`${y(f)} has no field "${String(D)}" for its ${S}`);for(let S of i.requiredRoles)if(!(S in(m??{})))return o(`a ${n.name} needs ${y(f)}'s ${S}`)}else if(i.binds==="entities")for(let f of i.requiredRoles){let m=s[f];if(!m)return o(`a ${n.name} needs its ${f}`);if(typeof m.kind=="string"&&!t.tryDefinition(m.kind))return o("Nothing by that name here")}let a={...e,schema:t,lenses:[...e.lenses??[],n]},l=a.lenses.length-1,d=J(a),c=`lenses.${l}`,u=d.findings.find(f=>f.path===c||f.path.startsWith(`${c}.`));if(u)return o(u.message.replace(/^"[^"]*" /,"it "));let p=d.undrawn.find(f=>f.index===l);if(p)return o(p.why);let g=d.drawn.find(f=>f.index===l);if(!g)return o("its bindings name something the app does not have");if(g.as==="overview")return o(`"${n.title}" is the scene's own address; give it another title`);if(n.name==="blocks"){let f=Ee(I(t),n.options?.blocks);if(f)return o(f)}return{ok:!0,drawn:g}}function K(e){return{op:"add-lens",title:e.title,lens:e.name,on:e.on,...e.bindings?{bindings:e.bindings}:{},...e.options?{options:e.options}:{}}}function xe(e){return{op:"remove-lens",title:e.title,on:e.on}}var w=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);function de(e){let n=w(e)?e:{},r=String(n.lens??n.name??""),t=n.bindings,o=typeof n.on=="string"?n.on:w(t)&&G[r]?.binds==="fields"?Object.keys(t)[0]??"":"";return{name:r,title:typeof n.title=="string"?n.title.trim():"",on:o,...w(t)?{bindings:t}:{},...w(n.options)?{options:n.options}:{}}}function ve(e){let n=o=>w(e.bindings?.[o])?e.bindings[o]:{},r=o=>typeof o=="string"?o:void 0,t=n(e.on);switch(e.name){case"columns":return r(t.column)?{lens:"columns",kind:e.on,column:t.column}:void 0;case"calendar":{let o=r(e.options?.range);return r(t.start)?{lens:"calendar",kind:e.on,start:t.start,...r(t.end)?{end:t.end}:{},...r(t.done)?{done:t.done}:{},...o?{range:o}:{}}:void 0}case"timeline":return r(t.start)&&r(t.end)&&r(t.column)?{lens:"timeline",kind:e.on,start:t.start,end:t.end,column:t.column}:void 0;case"coverage":{let o=w(e.bindings?.columns)?r(e.bindings.columns.kind):void 0,i=w(e.bindings?.link)?r(e.bindings.link.edge):void 0;return o&&i?{lens:"coverage",kind:e.on,across:o,link:i}:void 0}case"blocks":{let o=e.options?.blocks;if(!Array.isArray(o)||o.length!==1||!w(o[0]))return;let i=o[0],s=new RegExp(`^all\\('${e.on}'\\)(?: where (.+))?$`).exec(String(i.list??""));if(!s)return;let a=i.sort;return{lens:"blocks",kind:e.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"}:{}}}:{},...s[1]?{where:[{expr:s[1],says:"as asked"}]}:{}}}default:return}}function W(e,n,r,t,o){let i=I(L(e.schema,t)).info(n.on),s=ve(n);return{title:n.title,said:`${B[n.name]??"A picture"} of ${i?.plural??y(n.on)}.`,kind:n.on,lens:n,drawn:r,edit:K(n),by:o,asks:[],...s?{recipe:s}:{}}}function te(e){return{title:e.title,said:e.said,lens:{title:e.lens.title,lens:e.lens.name,on:e.lens.on,...e.lens.bindings?{bindings:e.lens.bindings}:{},...e.lens.options?{options:e.lens.options}:{}},edit:e.edit,by:e.by,check:"It draws, and graview check would take it."}}function F(e,n,r,t,o){let i=Ae(e,n),s=e.title??o??C(i.title,r.app),a=Re(e,s),l=T(r.app,a,r.sight);return l.ok?{title:s,said:`${B[e.lens]} ${i.detail}.`,kind:e.kind,lens:a,drawn:l.drawn,edit:K(a),by:"template",asks:t,recipe:e}:{failed:l.failed,...r.lastGood?{lastGood:r.lastGood}:{}}}function Ye(e,n){let r=I(L(n.app.schema,n.sight)),t=r.info(e.kind);if(!t)return{failed:"Couldn't draw that: Nothing by that name here."};let o=e.lens==="blocks"&&!e.group&&!e.sort&&!e.where?.length&&e.title===void 0;return F(o?{...e,title:C(`Every ${t.noun}`,n.app)}:e,r,n,[])}function Le(e,n,r,t){if(r.length>0)return r;let o=s=>{switch(e){case"columns":return s.fields.some(a=>a.type==="enum");case"calendar":return s.fields.some(R);case"timeline":return ie(s)!==void 0||s.fields.some(R);case"coverage":return s.edges.some(a=>a.to.some(l=>l!==s.kind));case"board":return s.fields.some(a=>a.name==="x")&&s.fields.some(a=>a.name==="y");case"plan":return s.fields.some(a=>a.name==="outline")||s.roles.outline!==void 0;default:return!0}};return[...n.kinds.filter(o)].sort((s,a)=>Number(a.fields.some(l=>E(t,l.words)))-Number(s.fields.some(l=>E(t,l.words))))}function Ie(e,n){let r=I(L(n.app.schema,n.sight)),t=re(e),o=$e(t);if(o.length===0)return;let i=pe(t,r),s;for(let a of o){let l=a==="coverage"?[i[0]??r.kinds[0]].filter(d=>!!d):Le(a,r,i,t);for(let d of l)try{let c=ae(a,d,r,t,i),u=F(c,r,n,[e]);if(!O(u))return u;s??=u.failed}catch(c){if(!(c instanceof j))throw c;s??=`Couldn't draw that: ${c.message}.`}l.length===0&&i.length===0&&(s??=`Couldn't draw that: nothing here has what ${B[a].toLowerCase()} needs.`)}return{failed:s??"Couldn't draw that: Nothing by that name here.",...n.lastGood?{lastGood:n.lastGood}:{}}}async function Oe(e,n){let r=n.lastGood?{lastGood:n.lastGood}:{};if(e.trim().length===0)return{failed:"Say what you would like to see, like \u201Ca board of tasks by status\u201D.",...r};let t=Ie(e,n);if(t&&!O(t))return t;if(!n.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 o=await le(e,n,void 0);return O(o)&&t?t:o}async function je(e,n,r){let t={lastGood:e},o={...r,lastGood:e},i=I(L(r.app.schema,r.sight)),s=re(n),a=i.info(e.kind),l=[...e.asks,n];if(!a)return{failed:"Couldn't change that: Nothing by that name here.",...t};let d=e.recipe,c=/^ (?:call|name|title) (?:it|this)? ?(.+?) $/.exec(s)??/ (?:call|name) it (.+?) $/.exec(s);try{if(c){let g=n.replace(/^.*?\b(?:call|name|title)\b\s*(?:it|this)?\s*/i,"").replace(/^["“']|["”']$/g,"").trim();if(g.length===0)return{failed:"Couldn't change that: say what to call it.",...t};let f={...e.lens,title:C(g,r.app)},m=T(r.app,f,r.sight);return m.ok?{...e,title:f.title,lens:f,drawn:m.drawn,edit:K(f),asks:l,...d?{recipe:{...d,title:f.title}}:{}}:{failed:m.failed,...t}}let p=/ as (?:a |an )?(board|kanban|calendar|timeline|list|table|cards|rows|grid|plan|layout)\b/.exec(s);if(p){let g=p[1]==="board"||p[1]==="kanban"?"columns":p[1]==="calendar"?"calendar":p[1]==="timeline"?"timeline":p[1]==="grid"?"coverage":p[1]==="plan"?"plan":p[1]==="layout"?"board":"blocks",f=ae(g,a,i,s,[a]),m=p[1]==="cards"?"card":p[1]==="rows"?"row":void 0,b=g==="blocks"&&d?.lens==="blocks"?{...d,...m?{as:m}:{}}:g==="blocks"&&d?.lens==="columns"?{...f,group:d.column,...m?{as:m}:{}}:f;return F(A(b),i,o,l)}if(d){let g=Te(d,a,i,s);if(g)return F(g,i,o,l)}}catch(p){if(!(p instanceof j))throw p;return{failed:`Couldn't change that: ${p.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 le(n,o,e);return O(u)?u:{...u,asks:l}}var A=e=>{let{title:n,...r}=e;return r};function Te(e,n,r,t){let o=/ (?: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)?U(t):void 0);if(o){let d=v(n,o);if(d?.type==="enum")return e.lens==="blocks"?{...A(e),group:d.name}:{lens:"columns",kind:e.kind,column:d.name};let c=oe(n,o,r);return c?{lens:"coverage",kind:e.kind,across:c.to[0],link:c.name}:h(d?`${n.plural}' ${d.words} is not a choice, so they cannot be grouped by it`:`${n.plural} have nothing called ${o} 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=v(n,i);return d?{...e.lens==="blocks"?A(e):{lens:"blocks",kind:e.kind,as:"row",...e.lens==="columns"?{group:e.column}:{}},sort:{by:d.name,.../\b(newest|latest|desc|descending|most)\b/.test(t)?{direction:"desc"}:{}}}:h(`${n.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(e.lens!=="blocks"||!e.where)return h("it already shows all of them");let{where:d,...c}=A(e);return c}let s=se(t);if(s&&e.lens==="calendar"&&s.range)return{...A(e),range:s.range};if(s&&e.lens==="calendar"&&!s.range)return{lens:"blocks",kind:e.kind,as:"row",sort:{by:e.start},where:V(n,t)};let a=V(n,t);if(a.length>0){let d=e.lens==="blocks"?A(e):{lens:"blocks",kind:e.kind,as:"row",...e.lens==="columns"?{group:e.column}:{}};return{...d,where:[...d.where??[],...a]}}let l=e.lens==="calendar"?M(t):void 0;if(l)return{...A(e),range:l}}function Ne(e){return e.kinds.map(n=>{let r=n.fields.map(i=>`${i.name} (${i.type??"value"}${i.options?`: ${i.options.join(" | ")}`:""})`).join(", "),t=n.edges.map(i=>`${i.name} \u2192 ${i.to.join(" | ")}`).join(", "),o=Object.entries(n.roles).map(([i,s])=>`${i}=${s}`).join(", ");return`- ${n.kind} ("${n.plural}"): ${r}${t?`; relations: ${t}`:""}${o?`; roles: ${o}`:""}`}).join(`
2
2
  `)}var Fe=['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
3
  `);function Ce(e,n,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:",Ne(n),"","The lenses you may use (prefer the first four; use blocks only when none of them fits):",Fe,"",r?`The view on screen now:
4
4
  ${JSON.stringify(r.lens)}
@@ -0,0 +1 @@
1
+ import{b as pt}from"./chunk.SZMWJHU2.js";import{a as dt}from"./chunk.LJE5J3JK.js";import{f as ct}from"./chunk.X2OLXTRL.js";import{a as C,f as q}from"./chunk.JDRM6XXD.js";import{$a as st,Bb as ut,E as Q,F as X,Gc as ft,H as k,N as G,Q as tt,S as nt,T as et,ba as _,bb as it,da as M,eb as lt,fa as rt,ia as ot,ka as at}from"./chunk.HBBVVALN.js";import"./chunk.AJZBJBMO.js";function J(t){let e=[],n=!0;for(let r of t){if(r.text.length===0)continue;let s=r.as==="close"||r.text===","||r.text===":"||r.text.startsWith("'")||n;e.push({part:r,space:!s}),n=r.as==="open"}return e}function D(t,e){return J(t).map(({part:n,space:r})=>`${r?" ":""}${e?n.said??n.text:n.text}`).join("")}function Ot(t){return D(t,!1)}function Et(t){return D(t,!0)}function mt(t,e=!1){let n=e?t.said:t.text;return t.record!==void 0?`${t.record} \u2014 ${n}`:n}function z(t){let e=u=>J(u).map(({part:o,space:a})=>({...o,space:a})),n=e(t.parts),r=t.when&&t.when.length>0?e(t.when):void 0,s=u=>`${D(n,u)}${r?`, when ${D(r,u)}`:""}`;return{...t,parts:n,...r?{when:r}:{},text:s(!1),said:s(!0)}}function Pt(t,e=!1){return t.line?mt(t.line,e):t.message}var yt=60,O=t=>({text:t,as:"name"}),c=(t,e)=>e===void 0?{text:t,as:"word"}:{text:t,as:"word",said:e},L=(t,e)=>e===void 0||e===t?{text:t,as:"value"}:{text:t,as:"value",said:e},R=(t,e)=>({text:t,as:"op",said:e}),v={text:"(",as:"open"},w={text:")",as:"close"},N={text:"\u2014",as:"value",said:"empty"},V={">=":["\u2265","at least"],"<=":["\u2264","at most"],"<":["<","less than"],">":[">","more than"],"==":["=","is"],"!=":["\u2260","is not"]},B={">=":"<","<=":">","<":">=",">":"<=","==":"!=","!=":"=="},Lt={"+":["+","plus"],"-":["\u2212","minus"],"*":["\xD7","times"],"/":["\xF7","divided by"],"%":["mod","modulo"]},ht=t=>t.t==="binary"&&t.op in V;function I(t){return t.length>1&&t[1]===t[1].toUpperCase()&&/[A-Z]/.test(t[1])?t:t.charAt(0).toLowerCase()+t.slice(1)}function bt(t){let{schema:e}=t,n=l=>l===null?void 0:e.tryDefinition(l),r=(l,m)=>{let g=n(l)?.edges;return g&&Object.hasOwn(g,m)?g[m]:void 0},s=(l,m)=>{let g=r(l,m)?.to;return Array.isArray(g)&&g.length===1?g[0]:null},u=(l,m)=>{let g=(e.edge(m)?.from??[]).filter(W=>{let K=r(W,m)?.to;return l===null||K==="*"||Array.isArray(K)&&K.includes(l)});return g.length===1?g[0]:null},o=(l,m)=>r(l,m)?M(m).toLowerCase():I(ot(n(l),m)),a=l=>I(rt(e,l)),d=l=>I(ct(e).get(l)?.label??M(l)),x=l=>I(at(n(l),l)),i=(l,m)=>{let g=l===null?void 0:t.formatOf?.(l,m);if(g?.format)return g;let W=t.said?.get(m);return W?{...g,format:W}:g},p=l=>_(e.tryDefinition(l.kind),l),h=t.money?.locale,y=(l,m)=>{if(l==null)return N;if(l instanceof C){if(l.nodes.length===0)return N;let A=l.nodes.slice(0,3).map(p),Y=l.nodes.length-A.length;return L(Y>0?`${A.join(", ")} and ${Y} more`:A.length>1?`${A.slice(0,-1).join(", ")} and ${A[A.length-1]}`:A[0])}if(Array.isArray(l))return L(`{${l.map(A=>y(A,m).text).join(", ")}}`,l.map(A=>y(A,m).text).join(" or "));if(typeof l=="object")return L(p(l));if(typeof l=="boolean")return L(l?"yes":"no");let g=m?.format??(m?i(m.kind,m.key):void 0);if(typeof l=="number")return L(g&&g.format!=="date"?ut(l,{...t.money,...g}):et(l,h));if(Q.test(l)||g?.format==="date")return L(G(nt(l,t.money?.timeZone)??l.slice(0,10),h));if(X.test(l))return L(tt(l,h,t.money?.timeZone));let W=m&&m.kind!==null?n(m.kind)?.display?.format?.[m.key]:void 0;if(W)return L(W(l));let K=l.length>yt?`${l.slice(0,yt-1).trimEnd()}\u2026`:l;return L(/^[a-z][a-z0-9]*([-_][a-z0-9]+)*$/.test(K)?K.replace(/[-_]+/g," "):K)};return{definition:n,relation:r,farOf:s,nearOf:u,fieldName:o,plural:a,noun:x,factName:d,formatOf:i,valueWords:y,locale:h}}function P(t,e,n){if(t.t==="ident")return{kind:e,key:t.name};if(t.t==="member")return{kind:E(t.object,e,n),key:t.name};if(t.t==="call"&&(t.fn==="sum"||t.fn==="min"||t.fn==="max")&&t.args.length===2){let r=E(t.args[0],e,n),s=t.args[1];if(s.t==="ident")return{kind:r,key:s.name};if(s.t==="lit"&&typeof s.value=="string")return{kind:r,key:s.value}}if(t.t==="binary"&&(t.op==="+"||t.op==="-"))return P(t.left,e,n)??P(t.right,e,n);if(t.t==="call"&&t.fn==="if"&&t.args.length===3)return P(t.args[1],e,n)??P(t.args[2],e,n)}function E(t,e,n){switch(t.t){case"ident":return n.relation(e,t.name)?n.farOf(e,t.name):null;case"member":return n.farOf(E(t.object,e,n),t.name);case"where":return E(t.set,e,n);case"binary":return t.op==="|"||t.op==="&"||t.op==="-"?E(t.left,e,n):null;case"call":{let r=s=>{let u=t.args[s];return u?.t==="lit"&&typeof u.value=="string"?u.value:void 0};return t.fn==="all"?r(0)??null:t.fn==="out"?t.args.length===2?n.farOf(E(t.args[0],e,n),r(1)??""):n.farOf(e,r(0)??""):t.fn==="in"?t.args.length===2?n.nearOf(E(t.args[0],e,n),r(1)??""):n.nearOf(e,r(0)??""):(t.fn==="first"||t.fn==="sort")&&t.args[0]?E(t.args[0],e,n):null}default:return null}}function j(t){return t.t==="binary"?t.op==="||"?U(t)?4:1:t.op==="&&"?2:t.op in V||t.op==="in"?4:t.op==="+"||t.op==="-"?5:t.op==="*"||t.op==="/"||t.op==="%"?6:4.5:t.t==="unary"&&t.op==="!"?3:t.t==="where"?3.5:9}var $=t=>t.t==="lit",b=(t,e)=>t.t==="call"&&t.fn===e;function F(t,e){return t.t==="binary"&&t.op===e?[...F(t.left,e),...F(t.right,e)]:[t]}function U(t){if(t.t!=="binary"||t.op!=="||")return;let e=[];e.push(...F(t,"||"));let n,r=[];for(let s of e){if(s.t!=="binary"||s.op!=="=="||!$(s.right)||typeof s.right.value!="string"||n&&JSON.stringify(gt(n))!==JSON.stringify(gt(s.left)))return;n=s.left,r.push(s.right)}return n?{subject:n,values:r}:void 0}var gt=t=>JSON.parse(JSON.stringify(t,(e,n)=>e==="at"?void 0:n));function f(t,e,n,r){let s=(u,o,a=e)=>j(u)<o?[v,...f(u,a,n),w]:f(u,a,n);switch(t.t){case"lit":return[n.valueWords(t.value,r)];case"list":return[n.valueWords(t.items.map(u=>u.t==="lit"?u.value:null),r)];case"ident":return[O(n.fieldName(e,t.name))];case"member":{let u=b(t.object,"first")&&t.object.args[0]&&b(t.object.args[0],"all"),o=E(t.object,e,n);if(u&&o)return e!==null&&n.fieldName(e,t.name)===n.fieldName(o,t.name)&&n.definition(e)?.fields?.shape&&Object.prototype.hasOwnProperty.call(n.definition(e).fields.shape,t.name)?[O(`${n.noun(o)}'s ${n.fieldName(o,t.name)}`)]:[O(n.fieldName(o,t.name))];let a=f(t.object,e,n),d=a[a.length-1];return a.length===1&&d?.as==="name"?[O(`${d.text}'s ${n.fieldName(o,t.name)}`)]:[...a,c("'s"),O(n.fieldName(o,t.name))]}case"unary":return t.op==="-"?[R("\u2212","minus"),...s(t.operand,7)]:T(t.operand,e,n);case"where":{let u=E(t.set,e,n),o=f(t.filter,u,n),a=o.every(d=>d.as==="name"||d.as==="word"&&d.text==="not");return[...s(t.set,4),...a?[]:[c("with")],...j(t.filter)<=2?[v,...o,w]:o]}case"binary":return xt(t,e,n);case"call":return At(t,e,n)}}function T(t,e,n){return ht(t)?xt({...t,op:B[t.op]},e,n):b(t,"present")||b(t,"exists")?[...f(t.args[0],e,n),R("=","is"),N]:t.t==="ident"?[c("not"),O(n.fieldName(e,t.name))]:[c("not"),v,...f(t,e,n),w]}function xt(t,e,n){let r=(o,a)=>j(o)<a?[v,...f(o,e,n),w]:f(o,e,n);if(t.op==="&&"||t.op==="||"){let o=U(t);if(o){let d=P(o.subject,e,n);return[...f(o.subject,e,n),R("\u2208","is one of"),n.valueWords(o.values.map(x=>x.value),d)]}let a=t.op==="&&"?2:1;return[...r(t.left,a),c(t.op==="&&"?"and":"or"),...r(t.right,a+.5)]}if(t.op in V){if($(t.right)&&typeof t.right.value=="boolean"&&(t.op==="=="||t.op==="!="))return t.op==="=="===t.right.value?f(t.left,e,n):T(t.left,e,n);let[o,a]=V[t.op],d=P(t.left,e,n),x=P(t.right,e,n);return[...S(t.left,e,n,x),R(o,a),...S(t.right,e,n,d)]}if(t.op==="in")return[...r(t.left,5),R("\u2208","is one of"),...S(t.right,e,n,P(t.left,e,n))];let s=Lt[t.op];if(s){let o=j(t);return[...r(t.left,o),R(s[0],s[1]),...r(t.right,o+.5)]}let u={"|":"or","&":"and also","-":"except"};return[...r(t.left,5),c(u[t.op]??t.op),...r(t.right,5)]}function S(t,e,n,r){return t.t==="lit"||t.t==="list"?f(t,e,n,r):j(t)<5?[v,...f(t,e,n),w]:f(t,e,n)}function At(t,e,n){let r=o=>t.args[o],s=o=>{let a=t.args[o];return a?.t==="lit"&&typeof a.value=="string"?a.value:void 0},u=o=>{let a=r(o);return j(a)<9&&a.t!=="where"?[v,...f(a,e,n),w]:f(a,e,n)};switch(t.fn){case"out":{let o=s(t.args.length-1)??"",a=O(M(o).toLowerCase());return t.args.length===2?[a,c("of"),...u(0)]:[a]}case"in":{let o=s(t.args.length-1)??"",a=t.args.length===2?n.nearOf(E(r(0),e,n),o):n.nearOf(e,o),d=O(a?n.plural(a):M(o).toLowerCase());return t.args.length===2?[d,c("of"),...u(0)]:[d]}case"all":{let o=s(0),a=t.args[1]?.t==="lit"?t.args[1].value:void 0,d=a===!0?[c("archived")]:a==="all"?[c("archived or not")]:[];return a===!0?[...d,O(o?n.plural(o):"everything")]:[O(o?n.plural(o):"everything"),...d]}case"fact":{let o=s(0);return[O(o?n.factName(o):"fact")]}case"count":return[c("number of"),...u(0)];case"exists":return[...u(0),R("\u2260","is not"),N];case"present":return[...f(r(0),e,n),R("\u2260","is not"),N];case"some":case"every":{let o=E(r(0),e,n),a=r(1);return[...t.fn==="some"?[c("some")]:[],...u(0),c(t.fn==="some"?"with":"all with"),...j(a)<=2?[v,...f(a,o,n),w]:f(a,o,n)]}case"sum":case"min":case"max":{let o=E(r(0),e,n),a=r(1),d=a.t==="lit"&&typeof a.value=="string"?[O(n.fieldName(o,a.value))]:j(a)<9?[v,...f(a,o,n),w]:f(a,o,n);return[c(t.fn==="sum"?"total":t.fn==="min"?"least":"most"),...d,c("of"),...u(0)]}case"first":{let o=r(0);if(b(o,"all")){let a=o.args[0]?.value;if(typeof a=="string")return[O(`the ${n.noun(a)}`)]}return[c("first of"),...u(0)]}case"sort":return[...u(0),c("by"),...f(r(1),E(r(0),e,n),n)];case"len":return[c("length of"),...f(r(0),e,n)];case"lower":return f(r(0),e,n);case"contains":case"startsWith":return[...f(r(0),e,n),c(t.fn==="contains"?"contains":"starts with"),...S(r(1),e,n,P(r(0),e,n))];case"today":return[L("today")];case"now":return[L("now")];case"date":return $(r(0))&&typeof r(0).value=="string"?[L(G(String(r(0).value),n.locale))]:f(r(0),e,n);case"days":case"hours":{let o=t.fn,[a,d]=[r(0),r(1)];return b(d,"today")||b(d,"now")?[c(`${o} since`),...f(a,e,n)]:b(a,"today")||b(a,"now")?[c(`${o} until`),...f(d,e,n)]:[c(`${o} from`),...f(a,e,n),c("to"),...f(d,e,n)]}case"if":return[v,...f(r(1),e,n),c("if"),...f(r(0),e,n),c(","),c("else"),...f(r(2),e,n),w];case"either":return t.args.flatMap((o,a)=>a===0?f(o,e,n):[c(","),c("else"),...f(o,e,n)]);default:return[c(t.fn),v,...t.args.flatMap((o,a)=>a===0?f(o,e,n):[c(","),...f(o,e,n)]),w]}}function Z(t,e){let n=bt(e),r=t.over==="graph"?null:t.over;return z({...r===null?{}:{kind:r},parts:f(t.require,r,n),...t.when?{when:f(t.when,r,n)}:{}})}function H(t,e,n){let r=bt(e),s=t.over==="graph"?null:t.over,u=n.subject,o=i=>{try{return q(i,{...n,budget:2e3})}catch{return}},a=(i,p)=>{let h=S(i,s,r,p);if(i.t==="lit"||i.t==="list"||b(i,"today")||b(i,"now")||b(i,"date"))return h;let y=o(i);if(y===void 0)return h;let l=P(i,s,r),m=r.valueWords(y,l?{...l,format:r.formatOf(l.kind,l.key)??(p?r.formatOf(p.kind,p.key):void 0)}:p);return y instanceof C?[...h,c(":"),m]:[...h,m]},d=i=>{if(i.t==="binary"&&i.op==="&&"){let p=[];p.push(...F(i,"&&"));let h=p.filter(y=>o(y)!==!0);return(h.length>0?h:p).flatMap((y,l)=>[...l>0?[c("and")]:[],...j(y)<=2?[v,...d(y),w]:d(y)])}if(i.t==="binary"&&i.op==="||"){let p=U(i);if(p){let y=P(p.subject,s,r);return[...a(p.subject),R("\u2209","is not one of"),r.valueWords(p.values.map(l=>l.value),y)]}let h=[];return h.push(...F(i,"||")),h.flatMap((y,l)=>[...l>0?[c("and")]:[],...j(y)<=2?[v,...d(y),w]:d(y)])}if(i.t==="binary"&&i.op in V){if($(i.right)&&typeof i.right.value=="boolean"&&(i.op==="=="||i.op==="!="))return i.op==="=="===i.right.value?T(i.left,s,r):f(i.left,s,r);let p=B[i.op],[h,y]=V[p],l=P(i.left,s,r),m=P(i.right,s,r);if($(i.right)&&i.right.value===null)return[...p==="=="?S(i.left,s,r,m):a(i.left,m),R(h,y),N];let g=p==="=="&&($(i.right)||$(i.left));return[...g?S(i.left,s,r,m):a(i.left,m),R(h,y),...g?S(i.right,s,r,l):a(i.right,l)]}if(i.t==="binary"&&i.op==="in")return[...a(i.left),R("\u2209","is not one of"),...S(i.right,s,r,P(i.left,s,r))];if(i.t==="unary"&&i.op==="!"){let p=i.operand;return ht(p)?d({...p,op:B[p.op]}):b(p,"present")||b(p,"exists")?[...a(p.args[0]),R("\u2260","is not"),N]:p.t==="ident"?f(p,s,r):[c("not"),v,...T(p,s,r),w]}if(b(i,"present")||b(i,"exists"))return[...f(i.args[0],s,r),R("=","is"),N];if(b(i,"some"))return[...f(i,s,r).slice(1),R("=","is"),N];if(b(i,"every")&&i.args.length===2){let p=o(i.args[0]);if(p instanceof C){let h=p.nodes.filter(y=>{try{return q(i.args[1],{...n,subject:y,budget:2e3})!==!0}catch{return!0}});return[...f(i,s,r),c(","),c("not"),r.valueWords(new C(h))]}}return i.t==="ident"?[c("not"),O(r.fieldName(s,i.name))]:[c("not"),v,...f(i,s,r),w]},x;try{x=d(t.require)}catch{x=[c("not"),v,...f(t.require,s,r),w]}return z({...s===null?{}:{kind:s},parts:x,...u?{record:_(e.schema.tryDefinition(u.kind),u)}:{}})}function Rt(t){let e=new Map;for(let n of t??[])n.expr?.t==="ident"&&n.format&&(n.format==="money"||n.format==="percent"||n.format==="date")&&e.set(n.expr.name,n.format);return e}function jt(t){return(e,n)=>{let r=t[e]?.fields?.[n],s=r?.format??(r?.type==="date"?"date":void 0);return s||r?.unit?{...s?{format:s}:{},...r?.unit?{unit:r.unit}:{}}:void 0}}function wt(t,e){return{schema:e,said:Rt(t.says),...t.declared?{formatOf:jt(t.declared)}:{},...t.money?{money:t.money}:{}}}function Yt(t,e){return t.shape?Z(t.shape,wt(t.shape,e)):void 0}var vt=new WeakMap;function St(t,e){let n=new Map(t.allInvariants().map(r=>[r.name,r]));return e.map(r=>{let s=Kt(r),u=n.get(s.invariant)?.shape;if(!u||s.status&&s.status!=="violated")return s;let o=s.subjectId?t.graph.getNode(s.subjectId):void 0;if(u.over!=="graph"&&!o)return s;let a=u.kinds;a||(a=vt.get(t.schema),a||vt.set(t.schema,a=dt(t.schema)));try{let d=t.today?.()??u.today?.()??k(),x=H(u,wt(u,t.schema),{graph:t.graph,subject:o??null,kinds:a,today:d});return{...s,line:x,...u.says?{}:{message:`${s.message} \u2014 ${x.text}`}}}catch{return s}})}function Nt(){lt((t,e,n,r)=>St({graph:t,schema:t.schema,allInvariants:()=>e,today:()=>r},n)),pt(Wt)}function Wt(t,e,n,r){let s=e.graph,u=it.from(t.schema,s.snapshot(),{validate:!1});for(let x of n?[...r].reverse().map(st):r)try{u.applyPrimitives([x],{restoring:!0})}catch{}let o=x=>t.violations(void 0,x),a=o(n?u:s),d=o(n?s:u);return{...ft(t.allInvariants(),a,d),violationsAfter:d}}function Kt(t){if(!t.line)return t;let{line:e,...n}=t,r=` \u2014 ${e.text}`;return n.message.endsWith(r)?{...n,message:n.message.slice(0,-r.length)}:n}Nt();export{H as brokenLineOf,Nt as judgeWithLines,Wt as judgedForASeat,Pt as problemWords,Yt as ruleLine,Z as ruleLineOf,mt as ruleLineWords,J as ruleSpacing,Et as ruleSpoken,Ot as ruleText,Kt as unlined,St as withLines};
@@ -0,0 +1 @@
1
+ import{c as m}from"./chunk.X2OLXTRL.js";import{ba as c,ca as u,da as f,fa as p,ja as h,ka as l}from"./chunk.HBBVVALN.js";function A(t,e){let n=t.schema.kinds,r="kind"in e?e.kind:void 0;if(r!==void 0&&!n.includes(r))return`There is no kind "${r}" in this app. Its kinds are: ${n.join(", ")}.`;if(e.on==="act"&&e.act!==void 0&&t.allMutations&&!t.allMutations().some(i=>i.name===e.act))return`There is no act "${e.act}" in this app.`;let o="record"in e?e.record:void 0;if(o!==void 0&&t.graph&&!t.graph.getNode(o))return`No record "${o}" is here to be told about.`;if(o!==void 0&&r!==void 0&&t.graph&&t.graph.getNode(o)?.kind!==r)return`\u201C${o}\u201D is not ${h(r)}.`;if(e.on==="changed"&&e.kind===void 0&&e.record===void 0)return"Say which kind, or which record, to be told about.";if(e.on==="reaches"){if(e.condition.trim()==="")return"Say what it should reach: a condition like done == true.";try{m(e.condition)}catch(i){return`The condition does not read: ${i instanceof Error?i.message:String(i)}.`}}}function a(t,e){let n=t.graph?.getNode(e);return n?c(t.schema.tryDefinition(n.kind),n):e}function g(t,e){let n=t.allMutations?.().find(r=>r.name===e);return n?u(n):f(e)}function M(t,e){let{when:n}=e,r=e.alsoMine?"anyone":"someone else",o=d=>l(t.schema.tryDefinition(d),d),i=d=>{let s=o(d);return`${/^[aeiou]/i.test(s)?"an":"a"} ${s}`};switch(n.on){case"act":{let d=n.act!==void 0?`\u201C${g(t,n.act)}\u201D`:"an act";return`When ${r} runs ${d}${n.record!==void 0?` on \u201C${a(t,n.record)}\u201D`:""}`}case"created":return`When ${r} adds ${i(n.kind)}`;case"changed":return n.record!==void 0?`When ${r} changes \u201C${a(t,n.record)}\u201D`:`When ${r} changes any of the ${p(t.schema,n.kind)}`;case"reaches":return`When ${n.record!==void 0?`\u201C${a(t,n.record)}\u201D`:i(n.kind)} reaches ${n.condition}${e.alsoMine?"":" (by someone else)"}`}}export{A as a,M as b};