graview 0.1.32 → 0.1.34

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 (142) hide show
  1. package/dist/preview/{chunk.7GKUVQVF.js → chunk.2UPGH6FT.js} +1 -1
  2. package/dist/preview/{chunk.I6FPNX43.js → chunk.2YCFK5HU.js} +1 -1
  3. package/dist/preview/{chunk.4HZ7QTXZ.js → chunk.2YGQVI6T.js} +1 -1
  4. package/dist/preview/{chunk.3K6YSVHC.js → chunk.34CYK2DF.js} +1 -1
  5. package/dist/preview/{chunk.3TVXGJTU.js → chunk.35KI7XYV.js} +1 -1
  6. package/dist/preview/{chunk.COQKECUH.js → chunk.3C4RJIJU.js} +1 -1
  7. package/dist/preview/{chunk.TAQ764IQ.js → chunk.3H4NVUWV.js} +1 -1
  8. package/dist/preview/{chunk.K5ME5GCG.js → chunk.3MWBWSYF.js} +1 -1
  9. package/dist/preview/{chunk.MAF7C3VM.js → chunk.4K5QCJFH.js} +1 -1
  10. package/dist/preview/{chunk.ULRW47RP.js → chunk.52QAIGCD.js} +1 -1
  11. package/dist/preview/{chunk.D75KC3LL.js → chunk.577PGFUT.js} +1 -1
  12. package/dist/preview/{chunk.EBGAYL32.js → chunk.5EAQDBBE.js} +1 -1
  13. package/dist/preview/{chunk.4MERAWS2.js → chunk.6A62UVAE.js} +1 -1
  14. package/dist/preview/{chunk.7T7NZZTC.js → chunk.6FBQP336.js} +1 -1
  15. package/dist/preview/{chunk.EF3XNU4O.js → chunk.6K2HASOH.js} +1 -1
  16. package/dist/preview/chunk.6P7P2AW7.js +1 -0
  17. package/dist/preview/{chunk.LXBOVRFI.js → chunk.6VRJII5M.js} +1 -1
  18. package/dist/preview/{chunk.VG3O4LWB.js → chunk.6XO4PECH.js} +1 -1
  19. package/dist/preview/{chunk.GYICGZMG.js → chunk.7HPPJVIV.js} +2 -2
  20. package/dist/preview/{chunk.PIP6Z563.js → chunk.7JNDZWD6.js} +1 -1
  21. package/dist/preview/{chunk.6UGEYZAC.js → chunk.7MTX33WD.js} +1 -1
  22. package/dist/preview/{chunk.ASCLIM2P.js → chunk.7VUPKOKC.js} +1 -1
  23. package/dist/preview/{chunk.LLLZEGRK.js → chunk.7WHWD5YJ.js} +1 -1
  24. package/dist/preview/{chunk.NM6MZYFN.js → chunk.7X2ZO5BD.js} +1 -1
  25. package/dist/preview/{chunk.XNJEFUF7.js → chunk.AHCI7ZDO.js} +1 -1
  26. package/dist/preview/{chunk.JFAOHHJJ.js → chunk.APNN6BKF.js} +1 -1
  27. package/dist/preview/{chunk.QGTSHKJL.js → chunk.B2WRXGFI.js} +1 -1
  28. package/dist/preview/{chunk.HLTRQU4Y.js → chunk.B6VI576I.js} +1 -1
  29. package/dist/preview/{chunk.NTF7FVB2.js → chunk.BU2DSZ2L.js} +1 -1
  30. package/dist/preview/{chunk.T5VG5A6V.js → chunk.CNMITOKP.js} +1 -1
  31. package/dist/preview/chunk.CPW465TM.js +1 -0
  32. package/dist/preview/{chunk.47STJVRV.js → chunk.CZRX2FDI.js} +1 -1
  33. package/dist/preview/{chunk.GV2CQVKV.js → chunk.DMNXYMLC.js} +1 -1
  34. package/dist/preview/{chunk.F6ZK7RMB.js → chunk.DNDHDDM6.js} +2 -2
  35. package/dist/preview/{chunk.MWGGV7DE.js → chunk.DUUARGPE.js} +1 -1
  36. package/dist/preview/chunk.E7EQ2VTE.js +1 -0
  37. package/dist/preview/{chunk.UHUGOTUU.js → chunk.ETWVQ3A2.js} +1 -1
  38. package/dist/preview/{chunk.BNV77BQZ.js → chunk.F6WYSDSI.js} +3 -3
  39. package/dist/preview/{chunk.FWTIUYXH.js → chunk.FBY5IUGU.js} +1 -1
  40. package/dist/preview/{chunk.UATVTXZY.js → chunk.FCRFQ7ZW.js} +1 -1
  41. package/dist/preview/chunk.FRS3S7DN.js +1 -0
  42. package/dist/preview/{chunk.UGFJKSHU.js → chunk.FSAHO3LV.js} +1 -1
  43. package/dist/preview/{chunk.JQU5GEU3.js → chunk.FUQVNXLB.js} +1 -1
  44. package/dist/preview/{chunk.JDUJDAGA.js → chunk.G64AREGA.js} +1 -1
  45. package/dist/preview/{chunk.CN3UEF5N.js → chunk.GMOTRAKJ.js} +1 -1
  46. package/dist/preview/chunk.GNSAKLP2.js +1 -0
  47. package/dist/preview/{chunk.RCKTBOY2.js → chunk.HCDKSDIS.js} +1 -1
  48. package/dist/preview/chunk.HH6P4BLT.js +1 -0
  49. package/dist/preview/{chunk.AOSMJKLH.js → chunk.HJ56Q6WB.js} +1 -1
  50. package/dist/preview/chunk.HP3ZEDCD.js +117 -0
  51. package/dist/preview/{chunk.G5NZVPJU.js → chunk.HPD5ZDZH.js} +1 -1
  52. package/dist/preview/chunk.HPEGQN6E.js +1 -0
  53. package/dist/preview/chunk.HUKAVTMX.js +1 -0
  54. package/dist/preview/chunk.HWITWOP3.js +3 -0
  55. package/dist/preview/{chunk.3TY5NFLY.js → chunk.IHFNLKXV.js} +1 -1
  56. package/dist/preview/{chunk.2NIOHEMX.js → chunk.JQDYGI6G.js} +1 -1
  57. package/dist/preview/chunk.JZBBGY4B.js +1 -0
  58. package/dist/preview/chunk.KA3KI4UA.js +1 -0
  59. package/dist/preview/{chunk.OF34OZ4V.js → chunk.KSXB4LDF.js} +1 -1
  60. package/dist/preview/{chunk.HAIG6NVX.js → chunk.LAF6GTBN.js} +1 -1
  61. package/dist/preview/{chunk.UNL2HIF2.js → chunk.LCFDM7XY.js} +1 -1
  62. package/dist/preview/{chunk.E2YEOMPH.js → chunk.LIIC25G6.js} +1 -1
  63. package/dist/preview/chunk.M5HADQPP.js +1 -0
  64. package/dist/preview/chunk.MWJUZG3C.js +6 -0
  65. package/dist/preview/chunk.OMMKD2NU.js +2 -0
  66. package/dist/preview/{chunk.JOOQUWLT.js → chunk.PNVR3CXR.js} +2 -2
  67. package/dist/preview/{chunk.PBSMLINK.js → chunk.PPUAPAWR.js} +1 -1
  68. package/dist/preview/{chunk.SYAEBGDC.js → chunk.PW7YH6JV.js} +1 -1
  69. package/dist/preview/{chunk.OC6IWRQ3.js → chunk.Q7TP4RFE.js} +1 -1
  70. package/dist/preview/{chunk.CIPS2OGR.js → chunk.QPAUQJON.js} +1 -1
  71. package/dist/preview/{chunk.UZGRRDHD.js → chunk.QU356VB2.js} +1 -1
  72. package/dist/preview/chunk.QVKKXMNK.js +1 -0
  73. package/dist/preview/{chunk.3AGY4QVS.js → chunk.QVUL2FSI.js} +1 -1
  74. package/dist/preview/chunk.RH45AW2W.js +1 -0
  75. package/dist/preview/{chunk.6YCBYL2Y.js → chunk.RIW7SQH4.js} +1 -1
  76. package/dist/preview/{chunk.H7EPE74C.js → chunk.RN3EZVV4.js} +1 -1
  77. package/dist/preview/{chunk.3HXN4BOY.js → chunk.RYEAMM73.js} +1 -1
  78. package/dist/preview/{chunk.YIR7PPF3.js → chunk.SIH6RCAI.js} +1 -1
  79. package/dist/preview/{chunk.NRAYZY3X.js → chunk.T2L4NPSB.js} +1 -1
  80. package/dist/preview/{chunk.DHIUSUCL.js → chunk.T3M4FALL.js} +5 -5
  81. package/dist/preview/{chunk.CX3KL2C5.js → chunk.TCSZZAYB.js} +1 -1
  82. package/dist/preview/chunk.TPX6AVJL.js +1 -0
  83. package/dist/preview/{chunk.5UL7YDUD.js → chunk.U5ACEYAN.js} +1 -1
  84. package/dist/preview/{chunk.5T5XGILP.js → chunk.UA5UYINM.js} +1 -1
  85. package/dist/preview/{chunk.GO4XBWJO.js → chunk.UCIQIPBQ.js} +1 -1
  86. package/dist/preview/{chunk.EKPRNDUV.js → chunk.UHQD3NTK.js} +1 -1
  87. package/dist/preview/{chunk.RIJUCHP4.js → chunk.VKH3ZPPQ.js} +1 -1
  88. package/dist/preview/{chunk.UBFNZMUX.js → chunk.VMGWYCXU.js} +1 -1
  89. package/dist/preview/chunk.VOFUIWAX.js +27 -0
  90. package/dist/preview/{chunk.DYSPCGXX.js → chunk.VSOB2QEK.js} +1 -1
  91. package/dist/preview/{chunk.R6K6GF5R.js → chunk.VZHV25JE.js} +1 -1
  92. package/dist/preview/chunk.WAB6ZS2V.js +1 -0
  93. package/dist/preview/chunk.WLBXBNNH.js +1 -0
  94. package/dist/preview/chunk.WPCGHGDA.js +1 -0
  95. package/dist/preview/{chunk.QYZNAUIR.js → chunk.WYEYYCBH.js} +1 -1
  96. package/dist/preview/{chunk.MNP4JI33.js → chunk.X7W27IRI.js} +4 -4
  97. package/dist/preview/{chunk.J25KOSNW.js → chunk.XK4FVT2X.js} +1 -1
  98. package/dist/preview/{chunk.CWHRDBOF.js → chunk.XXMYKBLT.js} +1 -1
  99. package/dist/preview/{chunk.CDP2XL66.js → chunk.XZYJRNRY.js} +1 -1
  100. package/dist/preview/chunk.YCIX53AR.js +1 -0
  101. package/dist/preview/chunk.YEYY273R.js +1 -0
  102. package/dist/preview/{chunk.EJPI3ST6.js → chunk.YJCT3DV2.js} +1 -1
  103. package/dist/preview/chunk.YT2CYCVT.js +1 -0
  104. package/dist/preview/{chunk.B2GLDIAS.js → chunk.Z7ZCR4LN.js} +1 -1
  105. package/dist/preview/{chunk.CAVBSL27.js → chunk.ZE4CTZQ3.js} +1 -1
  106. package/dist/preview/chunk.ZFWV4JAJ.js +1 -0
  107. package/dist/preview/{chunk.5H4VXLZF.js → chunk.ZJX6ZKKM.js} +1 -1
  108. package/dist/preview/chunk.ZPQKAJRI.js +1 -0
  109. package/dist/preview/{chunk.OKRNJXTV.js → chunk.ZSW74NVJ.js} +1 -1
  110. package/dist/preview/chunk.ZTD2CNC3.js +25 -0
  111. package/dist/preview/{chunk.QVVJRSRM.js → chunk.ZTFW7RKP.js} +1 -1
  112. package/dist/preview/index.html +42 -42
  113. package/dist/preview/page.js +2 -2
  114. package/package.json +6 -6
  115. package/dist/preview/chunk.4HRAQNJO.js +0 -27
  116. package/dist/preview/chunk.52W7WYME.js +0 -1
  117. package/dist/preview/chunk.5TVB6BUY.js +0 -1
  118. package/dist/preview/chunk.63GXY2ME.js +0 -1
  119. package/dist/preview/chunk.6QWV5MVH.js +0 -25
  120. package/dist/preview/chunk.AKFKM4SW.js +0 -3
  121. package/dist/preview/chunk.BOO6WVM4.js +0 -117
  122. package/dist/preview/chunk.BQ3JHEHV.js +0 -1
  123. package/dist/preview/chunk.CJJLJ3KW.js +0 -2
  124. package/dist/preview/chunk.DAZ2VSRD.js +0 -1
  125. package/dist/preview/chunk.ERIT3R6N.js +0 -1
  126. package/dist/preview/chunk.EYTBDMTW.js +0 -1
  127. package/dist/preview/chunk.F6EH7HI2.js +0 -1
  128. package/dist/preview/chunk.FSTCX2AI.js +0 -1
  129. package/dist/preview/chunk.H7BST3XO.js +0 -1
  130. package/dist/preview/chunk.IDVAR5HM.js +0 -1
  131. package/dist/preview/chunk.K7PMDSOL.js +0 -1
  132. package/dist/preview/chunk.KSES5U5B.js +0 -1
  133. package/dist/preview/chunk.LR3VDXPI.js +0 -1
  134. package/dist/preview/chunk.N6OX4NEQ.js +0 -1
  135. package/dist/preview/chunk.PHKSMUIA.js +0 -1
  136. package/dist/preview/chunk.SHTJZ6UX.js +0 -1
  137. package/dist/preview/chunk.TCNBCTWO.js +0 -1
  138. package/dist/preview/chunk.WAZ7OGBD.js +0 -1
  139. package/dist/preview/chunk.XANVHJQ4.js +0 -1
  140. package/dist/preview/chunk.XKABS745.js +0 -1
  141. package/dist/preview/chunk.XMC7YDWT.js +0 -1
  142. package/dist/preview/chunk.Y6ZNFQK3.js +0 -6
@@ -1,4 +1,4 @@
1
- import{a as k}from"./chunk.G4JJXA63.js";import{a as Q}from"./chunk.UZGRRDHD.js";import{a as Y}from"./chunk.OKRNJXTV.js";import{a as X}from"./chunk.PBSMLINK.js";import{c as _}from"./chunk.FWTIUYXH.js";import{$a as q,Hc as G,Ic as H,Jc as P,Kc as J,ab as z}from"./chunk.MNP4JI33.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.QU356VB2.js";import{a as Y}from"./chunk.ZSW74NVJ.js";import{a as X}from"./chunk.PPUAPAWR.js";import{c as _}from"./chunk.FBY5IUGU.js";import{$a as q,Ic as G,Jc as H,Kc as P,Lc as J,ab as z}from"./chunk.X7W27IRI.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,27 @@
1
+ import{a as Et,b as Mt,c as Pt,d as Tn}from"./chunk.MWJUZG3C.js";import{a as Mn,b as kt,c as Pn,d as Ct,e as Ot,f as $t}from"./chunk.F6WYSDSI.js";import{a as Rt,b as Ln,c as At}from"./chunk.PW7YH6JV.js";import{c as Lt,g as Tt,h as Nt}from"./chunk.T2L4NPSB.js";import{e as vt}from"./chunk.SIH6RCAI.js";import{m as St}from"./chunk.ETWVQ3A2.js";import{a as bt,b as xt}from"./chunk.CZRX2FDI.js";import{f as yt,h as wt}from"./chunk.5EAQDBBE.js";import{e as ht}from"./chunk.YT2CYCVT.js";import{b as mt,c as te,d as ye,e as Me}from"./chunk.34CYK2DF.js";import{d as pt}from"./chunk.52QAIGCD.js";import{l as ft,m as En}from"./chunk.WLBXBNNH.js";import{m as Rn,n as An}from"./chunk.Z7ZCR4LN.js";import{k as Ve}from"./chunk.PNVR3CXR.js";import{F as De,Q as J,R as ct,Y as X,_ as gt,m as Qe,oa as ut,pa as Je}from"./chunk.ZTD2CNC3.js";import{$ as tn,$b as dt,Bb as lt,Da as at,Ha as it,Ia as ot,Ja as st,Lb as de,O as Zn,P as et,Q as kn,R as nt,S as Ke,W as We,X as he,_ as Ie,_b as Ye,aa as tt,ca as Cn,cb as On,da as rt,ea as rn,ec as Ce,rc as $n}from"./chunk.X7W27IRI.js";import{b as _}from"./chunk.AJZBJBMO.js";var Nn=_(J(),1);function Pe(e,t,n){let r=e.nodes?.length??0;if(e.total===void 0||e.total<=r)return n;let a=e.nodes?.[0]?.kind,i=a?tn(t,a).toLowerCase():"more";return(0,Nn.jsxs)("div",{style:{display:"grid",gridTemplateRows:"minmax(0, 1fr) auto",height:"100%",minHeight:0},children:[n,(0,Nn.jsxs)("p",{"data-testid":"lens-more",style:{margin:"4px 0 0",fontSize:"0.8125rem",color:"var(--graview-ink-muted)"},children:["+",e.total-r," more ",i]})]})}var Dt=_(J(),1),Or=(e,t)=>{if(e===!1||t===!1)return!1;let n=e===void 0||e===!0?{}:e,r=t===void 0||t===!0?{}:t;return{sort:n.sort!==!1&&r.sort!==!1,filter:n.filter!==!1&&r.filter!==!1,group:n.group!==!1&&r.group!==!1}},$r=["sort","filter","group","q","archived"];function Oe(e,t={}){let{store:n}=X(),{view:r,go:a}=Je(),l=$r.some(R=>r.within?.[R]!==void 0)?bt(r):t.arrangedBy??{},m=e.nodes??[],g=t.kind??m[0]?.kind??e.node?.kind,y=l.archived!==void 0&&l.archived!==!1&&g!==void 0&&!t.subject?n.graph.nodesOfKind(g,{archived:l.archived}):m,d=t.subject??(t.only?y.filter(t.only):y),f=t.subject?[]:t.only?y.filter(R=>!t.only(R)):[],k=t.kind??d[0]?.kind,s=Or(t.allow,t.lensAllows),c=k?ht(n.schema,String(k)):void 0,S=c?yt(l,c).arrangement:{},o=wt(d,s===!1?{}:S,{schema:n.schema,graph:n.graph,flagged:new Set(e.flagged??[])}),b=e.retired!==void 0&&e.retired>0&&(m[0]?.kind??k)===k?e.retired:0,C=k&&s!==!1&&e.fidelity==="full"&&e.budget===void 0&&(d.length>1||b>0)?(0,Dt.jsx)(St,{schema:n.schema,graph:n.graph,kind:String(k),arrangement:S,allow:s,query:t.query!==!1,onChange:R=>a(xt(r,R)),kept:{shown:o.nodes.length,of:d.length},...b>0?{past:{count:b,widen:()=>a(vt(r,!0))}}:{}}):null;return{nodes:[...f,...o.nodes],arranged:o,arrangement:S,bar:C}}function He(e,t,n){let r=new Set((n??[]).map(i=>i.kind)),a=new Set((n??[]).map(i=>i.id));return e.allNodes().filter(i=>r.has(i.kind)?a.has(i.id):We(t.tryDefinition(i.kind),i))}var Le=_(De(),1);var D=_(J(),1),Rr=["slots","x","y","fill"],an=class extends Error{constructor(n,r){super(`${n}
2
+ ${r}`);this.hint=r;this.name="BoardBindingError"}},zt=e=>Math.max(0,Math.min(1,e));function Dn(e,t,n,r){let a=c=>c,i=c=>r?he(r.tryDefinition(c.kind),c):String(a(c).label??c.id);if(r&&r.tryDefinition(n.slots)===void 0)throw new an(`No kind is declared for "${n.slots}".`,'Check the lens bindings: { slots: "<kind>", x: "<field>", y: "<field>", fill: "<edge kind>" }');let l=e.filter(c=>c.kind===n.slots);if(!r&&l.length===0)throw new an(`Nothing to arrange: no "${n.slots}" nodes.`,'Check the lens bindings: { slots: "<kind>", x: "<field>", y: "<field>", fill: "<edge kind>" }');let m=t.filter(c=>c.kind===n.fill),g=new Map(e.map(c=>[c.id,c])),y=new Map(e.map((c,S)=>[c.id,S])),d=l.map(c=>{let S=a(c),o=n.fillFrom==="occupant",b=m.filter(C=>(o?C.to:C.from)===c.id).map(C=>g.get(o?C.from:C.to)).filter(C=>C!==void 0).sort((C,R)=>(y.get(C.id)??0)-(y.get(R.id)??0)).map(C=>({id:C.id,label:i(C)}));return{id:c.id,code:String(S[n.slotCode??""]??"").trim()||i(c),label:i(c),x:zt(Number(S[n.x]??.5)),y:zt(Number(S[n.y]??.5)),occupants:b}}).sort((c,S)=>c.y-S.y||c.x-S.x),f=new Set(d.flatMap(c=>c.occupants.map(S=>S.id))),k=new Set([...f].map(c=>g.get(c)?.kind).filter(c=>c!==void 0)),s=e.filter(c=>k.has(c.kind)&&!f.has(c.id)).map(c=>({id:c.id,label:i(c)})).sort((c,S)=>c.label<S.label?-1:c.label>S.label?1:0);return{slots:d,empty:d.filter(c=>c.occupants.length===0).map(c=>c.id),spare:s}}function Ar({nodes:e,occupants:t,label:n,fidelity:r,mode:a,options:i,schema:l,implicated:m=[],flagged:g=[]}){let{store:y}=X(),d=He(y.graph,y.schema,e),f=t?[...d.filter(p=>p.kind===i.slots),...t.map(p=>y.graph.getNode(p)).filter(p=>p!==void 0)]:d,k=Dn(f,y.graph.allEdges(),i,l),s=new Set(m),c=new Set(g),S=ut(),o=new Map;for(let p of S)for(let H of p.nodeIds)o.set(H,[...o.get(H)??[],p.message]);let b=p=>p?o.get(p)??[]:[];if(r==="glyph")return(0,D.jsx)(ye,{label:`${n??"Board"} \xB7 ${k.slots.length-k.empty.length}/${k.slots.length}`,hue:de("board")});if(r==="summary"){let p=k.slots.filter(H=>k.empty.includes(H.id));return(0,D.jsx)(te,{title:n??"Board",meta:`${k.slots.length-k.empty.length}/${k.slots.length}`,tone:p.length>0?"warning":"muted",fit:!0,children:p.length>0?(0,D.jsx)(Me,{pick:!0,max:5,items:p.map(H=>({id:H.id,label:H.code}))}):(0,D.jsx)("span",{style:{fontSize:"0.8125rem",color:"var(--graview-ink-faint)"},children:"Every slot filled."})})}let C=i.aspect??.68,R=(0,Le.useRef)(null),[M,w]=(0,Le.useState)(!1),[v,u]=(0,Le.useState)(null),A=160,[E,B]=(0,Le.useState)(!1);(0,Le.useEffect)(()=>{let p=R.current;if(!p||typeof ResizeObserver>"u")return;let H=new ResizeObserver(z=>{let j=z[0]?.contentRect;if(!j)return;let x=j.height<A;B(x),w(!x&&C<1&&j.width/j.height>1.3),u(x?null:j.height)});return H.observe(p),()=>H.disconnect()},[C]);let h=(p,H)=>M?{x:1-H,y:p}:{x:p,y:H},T=(()=>{let p=new Map,H=(z,j,x)=>{let O=p.get(x)??{ids:[],codes:[]};O.ids.includes(z)||(O.ids.push(z),O.codes.includes(j)||O.codes.push(j)),p.set(x,O)};for(let z of k.slots){for(let j of b(z.id))H(z.id,z.code,j);for(let j of z.occupants)for(let x of b(j.id))H(j.id,j.label,x)}return[...p.entries()].map(([z,j])=>({id:j.ids[0],code:j.codes.join(", "),text:z}))})(),P=a==="fullscreen",U=T.length===0?null:(0,D.jsxs)("ul",{"data-graview-primitive":"board-key",style:{margin:"2px 0 0",padding:0,listStyle:"none",display:"grid",gap:3,flex:"0 0 auto"},children:[T.slice(0,P?6:2).map(p=>(0,D.jsxs)("li",{"data-graview-pick":p.id,"data-graview-emphasis":s.size===0?"plain":s.has(p.id)?"lit":"dimmed",title:p.text,style:{display:P?"grid":"flex",gap:P?1:7,alignItems:P?"start":"baseline",fontSize:"0.8125rem",lineHeight:1.45,color:"var(--graview-ink-muted)",minHeight:24,width:"fit-content",maxWidth:"100%",padding:P?"2px 0":"3px 6px",marginLeft:P?0:-6,borderRadius:7,cursor:"pointer"},children:[(0,D.jsxs)("span",{style:{flex:"0 0 auto",fontWeight:600,color:"var(--graview-warn)",letterSpacing:"0.02em"},children:["\u26A0 ",p.code]}),(0,D.jsx)("span",{style:{minWidth:0,...P?{}:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},children:p.text})]},p.id)),T.length>(P?6:2)?(0,D.jsxs)("li",{style:{fontSize:"0.8125rem",color:"var(--graview-ink-faint)"},children:["+",T.length-(P?6:2)," more"]}):null]}),ne=i.arrange==="shelf",ae=k.slots.every(p=>p.code.length<=3&&!/\s/.test(p.code)),ee=(p,H)=>{let z=p.occupants.length===0,j=s.size>0&&!s.has(p.id)&&!p.occupants.some(F=>s.has(F.id)),x=c.has(p.id),O=p.occupants.some(F=>c.has(F.id)),G=x,ie=[...b(p.id),...p.occupants.flatMap(F=>b(F.id))],se=p.occupants.length===1?p.occupants[0]:null,ue=i.pickTarget==="slot"?p.id:se?se.id:p.id,K=F=>se?{}:{"data-graview-pick":F.id,"data-graview-emphasis":s.size===0?"plain":j?"dimmed":"lit"},ve=F=>c.has(F.id)?"var(--graview-warn)":"var(--graview-ink-muted)",Ue=i.emptyLabel??"empty";return(0,D.jsxs)("div",{"data-graview-pick":ue,"data-graview-slot":p.id,"data-graview-mark":ae?"disc":"token","data-graview-flagged":x&&O?"both":x?"slot":O?"occupant":void 0,"data-graview-emphasis":s.size===0?"plain":j?"dimmed":"lit",title:[z?`${p.label} \u2014 nobody in it`:`${p.occupants.map(F=>F.label).join(", ")} at ${p.label}`,...ie].join(`
3
+ `),style:{...H,display:"grid",justifyItems:ae?"center":"start",gap:3,opacity:j?.5:1,transition:"opacity 160ms ease"},children:[ae?(0,D.jsxs)("span",{style:{position:"relative",width:34,height:34,borderRadius:999,display:"grid",placeItems:"center",fontSize:"0.75rem",letterSpacing:"0.02em",border:z?"1.5px dashed var(--graview-warn)":`1px solid ${G?"var(--graview-warn)":"var(--graview-edge-bright)"}`,background:z?"transparent":G?"var(--graview-panel-warning)":"var(--graview-panel)",color:z||G?"var(--graview-warn)":"var(--graview-ink)",boxShadow:z?void 0:"var(--graview-lift-low)"},children:[p.code,x&&!z?(0,D.jsx)("span",{"aria-hidden":"true",style:{position:"absolute",top:-3,right:-3,fontSize:"0.6875rem",lineHeight:1,color:"var(--graview-warn)"},children:"\u26A0"}):null]}):(0,D.jsxs)("span",{style:{display:"grid",gap:1,minWidth:0,maxWidth:180,padding:"5px 10px 6px",borderRadius:8,border:z?"1.5px dashed var(--graview-warn)":`1px solid ${G?"var(--graview-warn)":"var(--graview-edge-bright)"}`,background:z?"transparent":G?"var(--graview-panel-warning)":"var(--graview-panel)",boxShadow:z?void 0:"var(--graview-lift-low)"},children:[(0,D.jsxs)("span",{style:{fontSize:"0.8125rem",fontWeight:550,lineHeight:1.25,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",color:z||G?"var(--graview-warn)":"var(--graview-ink)"},children:[p.code,x&&!z?" \u26A0":null]}),z?(0,D.jsx)("span",{style:{fontSize:"0.75rem",lineHeight:1.3,color:"var(--graview-warn)"},children:Ue}):(0,D.jsx)("span",{style:{display:"flex",flexWrap:"wrap",gap:"0 8px",fontSize:"0.75rem",lineHeight:1.3},children:p.occupants.map(F=>(0,D.jsxs)("span",{...K(F),style:{whiteSpace:"nowrap",color:ve(F)},children:[F.label,c.has(F.id)?" \u26A0":""]},F.id))})]}),ae?z?(0,D.jsx)("span",{style:{fontSize:"0.75rem",whiteSpace:"nowrap",color:"var(--graview-warn)"},children:Ue}):p.occupants.map(F=>(0,D.jsxs)("span",{...K(F),style:{fontSize:"0.75rem",whiteSpace:"nowrap",color:ve(F)},children:[F.label,c.has(F.id)?" \u26A0":""]},F.id)):null]},p.id)},ge=i.zones??[],pe=ge.map((p,H)=>({label:p.label,slots:k.slots.filter(z=>z.y>=p.from&&(z.y<p.to||H===ge.length-1&&z.y<=p.to))})),N=new Set(pe.flatMap(p=>p.slots.map(H=>H.id))),$=k.slots.filter(p=>!N.has(p.id));($.length>0||pe.length===0)&&pe.push({label:"",slots:$});let V={boxSizing:"border-box",borderRadius:12,border:"1px solid var(--graview-edge)",background:"linear-gradient(var(--graview-panel-muted), var(--graview-panel-muted)), var(--graview-panel)",overflow:"hidden"};return(0,D.jsxs)(te,{title:n??"Board",meta:k.slots.length===0?void 0:k.empty.length===0?`all ${k.slots.length} filled`:`${k.empty.length} unfilled`,...P?{style:{flex:"1 1 auto",minHeight:0,height:"100%"}}:{},children:[(0,D.jsxs)("div",{ref:R,style:{display:"flex",gap:28,alignItems:"stretch",justifyContent:"center",flex:"1 1 auto",minHeight:0},children:[P&&U?(0,D.jsxs)("div",{style:{width:260,flex:"0 0 auto",alignSelf:"center",display:"grid",gap:8},children:[(0,D.jsx)("span",{style:{fontSize:"0.75rem",letterSpacing:"0.14em",textTransform:"uppercase",color:"var(--graview-ink-faint)"},children:"What is marked"}),U]}):null,ne?(0,D.jsx)("div",{"data-graview-primitive":"board","data-graview-arrange":"shelf",style:{...V,overflow:"auto",flex:"1 1 auto",minWidth:0,alignSelf:"stretch",display:"grid",alignContent:"start"},children:pe.map((p,H)=>(0,D.jsxs)("section",{"data-graview-zone":p.label||void 0,style:{display:"grid",gap:8,padding:"10px 14px 14px",...H>0?{borderTop:"1px dashed var(--graview-edge)"}:{}},children:[p.label?(0,D.jsx)("span",{style:{fontSize:"0.6875rem",letterSpacing:"0.14em",textTransform:"uppercase",color:"var(--graview-ink-faint)"},children:p.label}):null,p.slots.length>0?(0,D.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:"10px 12px",alignItems:"flex-start"},children:p.slots.map(z=>ee(z,{}))}):(0,D.jsx)("span",{style:{fontSize:"0.75rem",color:"var(--graview-ink-faint)"},children:"nothing here"})]},p.label||`band-${H}`))}):(0,D.jsxs)("div",{style:{display:"flex",gap:5,alignItems:"stretch",minWidth:0,...E?{flex:"1 1 auto",alignSelf:"flex-start"}:{}},children:[!M&&ge.length>0?(0,D.jsx)("div",{"aria-hidden":"true",style:{position:"relative",width:15,flex:"0 0 auto",alignSelf:"stretch"},children:ge.map(p=>(0,D.jsx)("span",{title:p.label,style:{position:"absolute",top:`${p.from*100}%`,height:`${(p.to-p.from)*100}%`,right:0,writingMode:"vertical-rl",transform:"rotate(180deg)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"0.6875rem",letterSpacing:"0.14em",textTransform:"uppercase",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",color:"var(--graview-ink-faint)"},children:p.label},p.label))}):null,(0,D.jsxs)("div",{"data-graview-primitive":"board","data-graview-arrange":"exact",style:{...V,position:"relative",aspectRatio:`${M?1/C:C}`,...E?{width:"100%",height:"auto",flex:"1 1 auto",minWidth:0,alignSelf:"flex-start"}:{height:"100%",flex:"0 1 auto",...v!==null?{width:Math.round(v*(M?1/C:C))}:{}},maxWidth:"100%"},children:[ge.map(p=>(0,D.jsx)("div",{"aria-hidden":"true",style:{position:"absolute",...M?{top:0,bottom:0,left:`${(1-p.to)*100}%`,width:`${(p.to-p.from)*100}%`,borderLeft:"1px dashed var(--graview-edge)"}:{left:0,right:0,top:`${p.from*100}%`,height:`${(p.to-p.from)*100}%`,borderBottom:"1px dashed var(--graview-edge)"}}},p.label)),M?ge.map(p=>(0,D.jsx)("span",{"aria-hidden":"true",title:p.label,style:{position:"absolute",bottom:3,left:`${(1-p.to)*100}%`,width:`${(p.to-p.from)*100}%`,textAlign:"center",fontSize:"0.6875rem",letterSpacing:"0.14em",textTransform:"uppercase",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",color:"var(--graview-ink-faint)"},children:p.label},`label-${p.label}`)):null,k.slots.map(p=>ee(p,{position:"absolute",left:`${h(p.x,p.y).x*100}%`,top:`${h(p.x,p.y).y*100}%`,transform:"translate(-50%, -50%)",width:"max-content",maxWidth:"100%"}))]})]}),k.spare.length>0?(0,D.jsxs)("div",{style:{display:"grid",gap:6,alignContent:"start",minWidth:0},children:[(0,D.jsx)("span",{style:{fontSize:"0.75rem",letterSpacing:"0.14em",textTransform:"uppercase",color:"var(--graview-ink-faint)"},children:"Not in"}),(0,D.jsx)(Me,{pick:!0,max:10,items:k.spare.map(p=>({...p,emphasis:s.size===0?"plain":s.has(p.id)?"lit":"dimmed"}))})]}):null]}),P?null:U]})}function Bt(e){function t(n){let{store:r}=X(),a=Dn(He(r.graph,r.schema,n.nodes),r.graph.allEdges(),e,r.schema),l=[...a.slots.flatMap(d=>d.occupants.map(f=>f.id)),...a.spare.map(d=>d.id)].map(d=>r.graph.getNode(d)).filter(d=>d!==void 0),{arranged:m,bar:g}=Oe(n,{...e.arranging!==void 0?{allow:e.arranging}:{},lensAllows:{group:!1},...e.arrangedBy?{arrangedBy:e.arrangedBy}:{},subject:l}),y=(0,D.jsx)(Ar,{schema:r.schema,...n,options:e,...e.arranging===!1?{}:{occupants:m.nodes.map(d=>d.id)}});return Pe(n,r.schema,g?(0,D.jsxs)("div",{style:{display:"grid",gap:6,height:"100%",minHeight:0,gridTemplateRows:"auto 1fr"},children:[g,y]}):y)}return{name:"board",requiredRoles:[...Rr],options:e,View:t,build(n,r,a){return Dn(n,r,e,a)}}}var pn=_(De(),1);var Wt=864e5;function zn(e){if(typeof e!="string")return null;if(Rn(e))return An(e)?.day??null;let t=/^(\d{4}-\d{2}-\d{2})/.exec(e);return t?t[1]:null}function sn(e){if(typeof e!="string")return null;if(Rn(e))return An(e)?.minutes??null;let t=/^\d{4}-\d{2}-\d{2}[T ](\d{2}):(\d{2})/.exec(e);return t?Number(t[1])*60+Number(t[2]):null}var on=e=>Date.UTC(Number(e.slice(0,4)),Number(e.slice(5,7))-1,Number(e.slice(8,10))),ln=e=>new Date(e).toISOString().slice(0,10);function we(e,t){return ln(on(e)+t*Wt)}function ze(e,t){let n=Number(e.slice(0,4)),r=Number(e.slice(5,7))-1+t,a=Number(e.slice(8,10)),i=new Date(Date.UTC(n,r+1,0)).getUTCDate();return ln(Date.UTC(n,r,Math.min(a,i)))}var Bn=e=>new Date(on(e)).getUTCDay();function Ge(e,t=1){let n=(Bn(e)-t+7)%7;return we(e,-n)}var Wn=e=>`${e.slice(0,7)}-01`;function oe(e,t){return Math.round((on(t)-on(e))/Wt)}function je(e,t){return Array.from({length:t},(n,r)=>we(e,r))}var It=e=>nt(e,"short"),$e=e=>Zn(e,{weekday:"short"}),In=e=>Ke(e);function Be(e,t){let n=t?.fieldRoles?.when;return e&&!e.start&&n?{...e,start:n}:e}function Vt(e,t){return t===void 0?!1:typeof t=="string"?e[t]===!0:t.is.includes(e[t.field])}var dn=["start"],Er=["day","week","month","quarter","year","agenda"];function cn(e){return e.horizon?["day","week","month","quarter","year","years","agenda"]:Er}function Ht(e,t){return e==="years"?t?.title??"Years":`The ${e}`}function Gt(){let e=new Date;return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`}var Vn=class extends Error{constructor(n,r){super(`The calendar lens has no binding for ${r.map(a=>`"${a}"`).join(", ")} on "${n}". Bind them in the lens declaration: bindings: { ${n}: { start: "<field>" } }.`);this.kind=n;this.missing=r;this.name="CalendarBindingError"}};function gn(e,t,n){let r=Be(t[e.kind],n?.tryDefinition(e.kind));if(!r)return null;let a=e,i=n?.tryDefinition(e.kind)?.fields.shape,l=dn.filter(f=>{let k=r[f];return k?i?!(k in i):!(k in a):!0});if(l.length>0)throw new Vn(e.kind,l);let m=zn(a[r.start]);if(m===null)return null;let g=(r.end?zn(a[r.end]):null)??m,y=sn(a[r.start]),d=r.label?a[r.label]:void 0;return{id:e.id,kind:e.kind,label:typeof d=="string"&&d.length>0?d:he(n?.tryDefinition(e.kind),e),from:m,to:oe(m,g)<0?m:g,at:r.allDay&&a[r.allDay]===!0?null:y,allDay:r.allDay&&a[r.allDay]===!0||y===null,done:Vt(a,r.done)}}function jt(e,t,n,r){let a=gn(e,t,n);if(!a)return[];let i=Be(t[e.kind],n?.tryDefinition(e.kind)).start,l=e,m=l[i],g=l[at(i)];if(typeof m!="string"||!it(g))return[a];let y=oe(a.from,a.to);return("next"in r?[st(m,g,r.next)]:ot(m,g,{from:we(r.from,-y),to:r.to,limit:400})).map(f=>({...a,from:f.slice(0,10),to:we(f.slice(0,10),y),repeats:!0}))}function un(e,t){return e.filter(n=>oe(n.from,t)>=0&&oe(t,n.to)>=0).sort((n,r)=>n.allDay!==r.allDay?n.allDay?-1:1:n.at!==r.at?(n.at??0)-(r.at??0):n.label.localeCompare(r.label))}function _t(e,t,n){let r=lt(e.schema,e.allMutations()).get(t)?.get(n)??[],a=new Map(e.allMutations().map(l=>[l.name,l]));for(let l of r){let m=a.get(l),g=m?.subject;if(!m||!g)continue;let y=m.input?.shape??{};if(n in y)return{name:m.name,arg:g.arg}}let i=e.allMutations().find(l=>l.derived?.act==="edit"&&l.derived.kind===t);return i?.subject?{name:i.name,arg:i.subject.arg}:null}var Ft=(e,t)=>({from:Wn(e),to:qt(e),label:kn(e,{short:!0,year:t})});function qt(e){return ln(Date.UTC(Number(e.slice(0,4)),Number(e.slice(5,7)),0))}function Mr(e){let t=Math.floor((Number(e.slice(5,7))-1)/3);return`${e.slice(0,4)}-${String(t*3+1).padStart(2,"0")}-01`}function Ut(e,t,n={}){let r=n.weekStartsOn??1,a=(g,y)=>({from:g,to:g,label:String(Number(g.slice(8,10))),...y?{outside:!0}:{}});if(e==="day")return{title:$e(t),grain:"day",columns:1,cells:[a(t)]};if(e==="week"){let g=Ge(t,r);return{title:`${$e(g)} \u2013 ${$e(we(g,6))}`,grain:"day",columns:7,cells:je(g,7).map(y=>a(y))}}if(e==="agenda")return{title:`From ${$e(t)}`,grain:"day",columns:1,cells:je(t,42).map(g=>a(g))};if(e==="quarter"){let g=Mr(t),y=qt(ze(g,2)),d=[];for(let f=Ge(g,r);oe(f,y)>=0;f=we(f,7))d.push({from:f,to:we(f,6),label:et(f),...oe(f,g)>0&&oe(we(f,6),g)>0?{outside:!0}:{}});return{title:`Q${Math.floor((Number(t.slice(5,7))-1)/3)+1} ${t.slice(0,4)}`,grain:"week",columns:4,cells:d}}if(e==="year"){let g=t.slice(0,4);return{title:g,grain:"month",columns:4,cells:Array.from({length:12},(y,d)=>Ft(`${g}-${String(d+1).padStart(2,"0")}-01`,!1))}}if(e==="years"){let g=Number(t.slice(0,4)),y=g+Math.max(1,n.horizon?.years??1)-1,d=n.horizon?.from!==void 0||n.horizon?.to!==void 0,f=d?n.horizon?.from??g:Math.min(g,n.fit?.first??g),s=(d?Math.max(f,n.horizon?.to??f+Math.max(1,n.horizon?.years??1)-1):Math.max(y,n.fit?.last??y))-f+1,c=Array.from({length:s},(S,o)=>String(f+o));return s>Pr?{title:`${n.horizon?.title??"Years"} \xB7 ${c[0]}\u2013${c[c.length-1]}`,grain:"year",columns:5,years:c,cells:c.map(S=>({from:`${S}-01-01`,to:`${S}-12-31`,label:S}))}:{title:`${n.horizon?.title??"Years"} \xB7 ${c[0]}\u2013${c[c.length-1]}`,grain:"month",columns:4,years:c,cells:c.flatMap(S=>Array.from({length:12},(o,b)=>Ft(`${S}-${String(b+1).padStart(2,"0")}-01`,!0)))}}let i=Wn(t),l=Ge(i,r),m=t.slice(0,7);return{title:kn(t),grain:"day",columns:7,cells:je(l,42).map(g=>a(g,g.slice(0,7)!==m))}}function Kt(e,t,n){return e.filter(r=>oe(r.from,n)>=0&&oe(t,r.to)>=0).sort((r,a)=>r.allDay!==a.allDay?r.allDay?-1:1:r.from!==a.from?r.from.localeCompare(a.from):r.at!==a.at?(r.at??0)-(a.at??0):r.label.localeCompare(a.label))}var Pr=10;function Yt(e){return e==="year"?"year":e==="month"?"month":e==="week"?"week":"day"}var Qt=_(De(),1);var Q=_(J(),1);function Hn({label:e,glyph:t,onPress:n}){return(0,Q.jsx)("button",{type:"button","aria-label":e,title:e,onClick:n,style:_e,children:t})}var _e={minHeight:24,minWidth:24,padding:"2px 9px",borderRadius:6,fontSize:"0.8125rem",borderWidth:1,borderStyle:"solid",borderColor:"transparent",color:"var(--graview-ink-muted)",background:"transparent"},Jt={day:12,week:4,month:3,year:5};function Xt({span:e,weekStartsOn:t,entries:n,today:r,perCell:a,emphasisOf:i,broken:l,hue:m,onOpen:g,onMove:y}){let d=(0,Qt.useRef)(null),f=Ve(d),k=f===null?e.columns:Math.max(1,Math.floor(f/44)),s=k<e.columns,c=s?k:e.columns,S=!s&&e.grain==="day"&&e.columns===7?je(Ge(e.cells[0]?.from??r,t),7):e.grain==="day"&&e.columns===1?e.cells.map(o=>o.from):null;return s&&e.grain==="day"&&e.columns>1?(0,Q.jsx)("div",{ref:d,"data-calendar-shape":"agenda",style:{display:"grid",minHeight:0,flex:1},children:(0,Q.jsx)(mn,{days:e.cells.map(o=>o.from),entries:n,today:r,emphasisOf:i,broken:l,hue:m,onMove:(o,b)=>y(o,{from:b,to:b,label:b},"day")})}):(0,Q.jsxs)("div",{ref:d,"data-calendar-shape":s?"wrapped":"grid",style:{display:"grid",gap:4,gridTemplateRows:S?"auto 1fr":"1fr",minHeight:0,flex:1},children:[S?(0,Q.jsx)("div",{style:{display:"grid",gridTemplateColumns:`repeat(${c}, minmax(0, 1fr))`,gap:4},children:S.map(o=>(0,Q.jsx)("span",{style:{fontSize:"0.75rem",letterSpacing:"0.16em",textTransform:"uppercase",color:"var(--graview-ink-muted)",textAlign:"center"},children:e.columns===7?It(Bn(o)):$e(o)},o))}):null,(0,Q.jsx)("div",{tabIndex:0,"aria-label":`The days of ${e.title}`,style:{display:"grid",gridTemplateColumns:`repeat(${c}, minmax(0, 1fr))`,gridAutoRows:"max-content",gap:4,minHeight:0,overflow:"auto"},children:e.cells.map((o,b)=>{let C=Kt(n,o.from,o.to),R=C.slice(0,a),M=C.slice(a),w=M.filter(u=>l.has(u.id)).length,v=oe(o.from,r)>=0&&oe(r,o.to)>=0;return(0,Q.jsxs)("div",{"data-calendar-day":e.grain==="day"?o.from:void 0,"data-calendar-cell":o.from,"data-calendar-grain":e.grain,"data-calendar-count":C.length,"data-calendar-outside":o.outside||void 0,onDragOver:u=>{u.dataTransfer.types.includes("text/graview-node")&&(u.preventDefault(),u.dataTransfer.dropEffect="move")},onDrop:u=>{let A=u.dataTransfer.getData("text/graview-node");A&&(u.preventDefault(),u.stopPropagation(),y(A,o,e.grain))},style:{minHeight:62,display:"flex",flexDirection:"column",gap:2,padding:4,borderRadius:7,border:"1px solid var(--graview-edge)",background:v?"var(--graview-panel)":o.outside?"var(--graview-panel-muted)":"transparent"},children:[(0,Q.jsxs)("span",{style:{display:"flex",alignItems:"baseline",gap:4},children:[(0,Q.jsx)("span",{style:{fontSize:"0.75rem",fontVariantNumeric:"tabular-nums",color:v?"var(--graview-accent)":"var(--graview-ink-faint)"},children:o.label}),e.grain!=="day"&&C.length>0?(0,Q.jsx)("span",{style:{fontSize:"0.75rem",color:"var(--graview-ink-faint)",marginLeft:"auto"},children:C.length}):null]}),R.map(u=>(0,Q.jsx)(Zt,{entry:u,cell:o,rowStart:b%c===0,emphasis:i(u.id),flagged:l.has(u.id),hue:m(u)},`${u.id}:${u.from}:${o.from}`)),M.length>0?(0,Q.jsxs)("button",{type:"button","data-testid":`calendar-more-${o.from}`,onClick:()=>g(o),title:`Open ${o.label}`,style:{minHeight:24,padding:"1px 5px",fontSize:"0.75rem",borderRadius:5,border:"1px dashed var(--graview-edge)",background:"transparent",color:w>0?"var(--graview-warn)":"var(--graview-ink-muted)",textAlign:"left"},children:["+",M.length," more",w>0?` \xB7 ${w} flagged`:""]}):null]},o.from)})})]})}function mn({days:e,entries:t,today:n,emphasisOf:r,broken:a,hue:i,onMove:l}){let m=e.map(g=>({day:g,here:un(t,g)})).filter(({here:g})=>g.length>0);return m.length===0?(0,Q.jsx)("p",{"data-testid":"calendar-empty",style:{margin:0,fontSize:"0.875rem",color:"var(--graview-ink-muted)"},children:"Nothing is scheduled in the next six weeks."}):(0,Q.jsx)("ol",{tabIndex:0,"aria-label":"What is scheduled",style:{margin:0,padding:0,listStyle:"none",display:"grid",alignContent:"start",gap:10,overflow:"auto",minHeight:0},children:m.map(({day:g,here:y})=>(0,Q.jsxs)("li",{"data-calendar-day":g,onDragOver:d=>{d.dataTransfer.types.includes("text/graview-node")&&(d.preventDefault(),d.dataTransfer.dropEffect="move")},onDrop:d=>{let f=d.dataTransfer.getData("text/graview-node");f&&(d.preventDefault(),d.stopPropagation(),l(f,g))},style:{display:"grid",gap:4},children:[(0,Q.jsxs)("span",{style:{fontSize:"0.75rem",letterSpacing:"0.16em",textTransform:"uppercase",color:g===n?"var(--graview-accent)":"var(--graview-ink-muted)"},children:[$e(g),g===n?" \xB7 today":""]}),y.map(d=>(0,Q.jsx)(Zt,{entry:d,cell:{from:g,to:g,label:g},emphasis:r(d.id),flagged:a.has(d.id),hue:i(d)},`${d.id}:${d.from}:${g}`))]},g))})}function Zt({entry:e,cell:t,emphasis:n,flagged:r,hue:a,rowStart:i=!1}){let l=oe(t.from,e.from)>=0,m=oe(e.to,t.to)>=0,g=!(l&&m),y=e.at!==null&&l&&e.from===t.from?`${In(e.at)} ${e.label}`:e.label;return(0,Q.jsx)("span",{"data-graview-pick":e.id,"data-calendar-entry":e.id,"data-calendar-repeat":e.repeats?e.from:void 0,draggable:!e.repeats,onDragStart:d=>{d.dataTransfer.setData("text/graview-node",e.id),d.dataTransfer.effectAllowed="move"},"data-graview-emphasis":n,"data-calendar-part":g?l?"opens":m?"closes":"through":void 0,"data-calendar-in":t.from,title:g?`${e.label} \xB7 ${e.from} \u2013 ${e.to}`:`${e.label}${e.at===null?" \xB7 all day":` \xB7 ${In(e.at)}`}${e.repeats?" \xB7 repeats":""}`,style:{display:"block",minHeight:24,boxSizing:"border-box",padding:"3px 6px",fontSize:"0.75rem",lineHeight:1.35,borderRadius:g?l?"5px 0 0 5px":m?"0 5px 5px 0":0:5,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",textDecoration:e.done?"line-through":"none",opacity:n==="dimmed"?.35:e.done?.6:1,background:`color-mix(in oklab, hsl(${Math.round(a)} 70% 55%) ${n==="lit"?38:20}%, transparent)`,color:"var(--graview-ink)",...n==="lit"?{outline:"1px solid var(--graview-accent)"}:{},...r?{borderLeft:"3px solid var(--graview-warn)",paddingLeft:4}:{}},children:l||i?e.repeats?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)("span",{"aria-hidden":"true",children:"\u21BB "}),y]}):y:" "})}var q=_(J(),1);function Lr(e){let t=1/0,n=-1/0;for(let r of e)r&&(t=Math.min(t,Number(r.from.slice(0,4))),n=Math.max(n,Number(r.to.slice(0,4))));return Number.isFinite(t)&&Number.isFinite(n)?{first:t,last:n}:void 0}function er(e){let t=n=>function(a){let{store:i}=X(),{view:l}=Je(),m=n?{...e,range:n}:e,g=l.within?.range??m.range??"month",y=Object.keys(e.bindings),{nodes:d,arranged:f,arrangement:k,bar:s}=Oe(a,{...e.arranging!==void 0?{allow:e.arranging}:{},lensAllows:{sort:!1,group:g==="agenda"},...e.arrangedBy?{arrangedBy:e.arrangedBy}:{},...y[0]?{kind:(a.nodes??[]).find(C=>y.includes(String(C.kind)))?.kind??y[0]}:{}}),c=g==="agenda"&&f.grouped&&k.group?f.groups.map(C=>({label:C.label,ids:new Set(C.nodes.map(R=>R.id))})):void 0,S=new Set((a.nodes??[]).map(C=>String(C.kind))),o=y.filter(C=>!S.has(C)&&i.schema.tryDefinition(C)!==void 0).flatMap(C=>{let R=i.schema.tryDefinition(C);return i.graph.nodesOfKind(C).filter(M=>l.past===!0||We(R,M))}),b=o.length===0?d:[...d,...a.budget!==void 0?o.slice(0,a.budget):o];return Pe(a,i.schema,(0,q.jsx)(Tr,{schema:i.schema,...a,nodes:b,options:{...m,today:m.today??i.today()??Gt()},...s?{bar:s}:{},...c?{groups:c}:{}}))};return{name:"calendar",requiredRoles:[...dn],bindings:e.bindings,options:e,View:t(),at:n=>t(n),ranges:()=>cn(e).map(n=>({range:n,title:Ht(n,e.horizon)})),place:(n,r)=>n.map(a=>gn(a,e.bindings,r)).filter(a=>a!==null)}}function Tr({nodes:e,label:t,fidelity:n,mode:r,options:a,schema:i,selectedIds:l=[],implicated:m=[],flagged:g=[],bar:y,groups:d}){let{view:f,go:k}=Je(),{store:s,principal:c}=X(),S=f.within?.at??a.today,o=f.within?.range??a.range??"month",b=a.weekStartsOn??1,C=new Set([...m,...l]),R=$=>C.size===0?"plain":C.has($)?"lit":"dimmed",M=new Set(g),w=o==="years"&&f.within?.at===void 0?Lr((e??[]).map($=>gn($,a.bindings,i))):void 0,v=Ut(o,S,{weekStartsOn:b,...a.horizon?{horizon:a.horizon}:{},...w?{fit:w}:{}}),A=n==="glyph"||n==="summary"?{next:a.today}:{from:v.cells[0]?.from??S,to:v.cells[v.cells.length-1]?.to??S},E=(e??[]).flatMap($=>jt($,a.bindings,i,A)),B=a.hueOf??($=>de($.kind));if(n==="glyph")return(0,q.jsx)(ye,{label:`${t??"Calendar"} \xB7 ${E.length}`,hue:de("calendar")});if(n==="summary"){let $=un(E,a.today);return(0,q.jsx)(te,{title:t??"Calendar",meta:`${E.length} dated`,tone:"muted",children:(0,q.jsx)(Me,{max:6,items:$.length>0?$.map(V=>({id:V.id,label:V.label,hue:B(V)})):E.filter(V=>oe(a.today,V.from)>=0).sort((V,p)=>V.from.localeCompare(p.from)).slice(0,6).map(V=>({id:V.id,label:`${V.from.slice(5)} ${V.label}`,hue:B(V)}))})})}let h=r==="fullscreen",[T,P]=(0,pn.useState)(null),U=($,V,p)=>{let H=s.graph.getNode($);if(!H)return;let z=Be(a.bindings[H.kind],s.schema.tryDefinition(H.kind));if(!z)return;let j=_t(s,H.kind,z.start);if(!j){P({text:`Nothing declared writes the ${Cn(s.schema.definitions.find(K=>K.kind===H.kind),z.start).toLowerCase()}, so this cannot be moved from here.`,tone:"refused"});return}let x=V.from,O=H[z.start],ie=sn(O)===null?x:`${x}${String(O).slice(10)}`,se={name:j.name,args:{[j.arg]:$,[z.start]:ie}},ue=s.permits(se,c);if(!ue.ok){P({text:ue.refusal.message,tone:"refused"});return}try{s.apply(se,{author:c}),P(p==="day"?null:{text:`Moved to ${$e(x)} \u2014 a ${p} is coarser than the ${Cn(s.schema.definitions.find(K=>K.kind===H.kind),z.start).toLowerCase()} holds, so it takes the first day of the cell. Undo puts it back.`,tone:"rounded"})}catch(K){P({text:K instanceof Error?K.message:String(K),tone:"refused"})}},ne=$=>{let V=o==="years"?ze(`${v.years?.[0]??S.slice(0,4)}${S.slice(4)}`,$*12*Math.max(1,v.years?.length??a.horizon?.years??1)):o==="year"?ze(S,$*12):o==="quarter"?ze(S,$*3):o==="month"?ze(S,$):o==="week"?we(S,$*7):we(S,$);k(Qe(f,"at",V))},ae=($,V)=>{let p=Qe(f,"range",$);V!==void 0&&(p=Qe(p,"at",V)),k(p)},ee=(0,pn.useRef)(null),ge=Ve(ee),pe=ge!==null&&ge<420,N=$=>$==="years"?a.horizon?.title??"years":$.charAt(0).toUpperCase()+$.slice(1);return(0,q.jsx)(te,{title:t??"Calendar",meta:v.title,style:{gap:10,...h?{flex:"1 1 auto",minHeight:0,height:"100%"}:{}},children:(0,q.jsxs)("div",{ref:ee,"data-testid":"calendar","data-calendar-range":o,"data-calendar-at":S,style:{display:"flex",flexDirection:"column",height:"100%",minHeight:0,gap:8},children:[(0,q.jsxs)("div",{style:{display:"flex",alignItems:"center",flexWrap:"wrap",gap:6},children:[(0,q.jsxs)("nav",{"aria-label":"When",style:{display:"flex",gap:4},children:[(0,q.jsx)(Hn,{label:"Previous",glyph:"\u2039",onPress:()=>ne(-1)}),(0,q.jsx)("button",{type:"button","data-testid":"calendar-today",onClick:()=>k(Qe(f,"at",a.today)),style:_e,children:"Today"}),(0,q.jsx)(Hn,{label:"Next",glyph:"\u203A",onPress:()=>ne(1)})]}),pe?(0,q.jsx)("select",{"aria-label":"Range","data-testid":"calendar-ranges",value:o,onChange:$=>ae($.target.value),style:{..._e,borderRadius:999,borderColor:"var(--graview-edge)",background:void 0,backgroundColor:"transparent",marginLeft:"auto",maxWidth:"50%",paddingRight:24,appearance:"none",WebkitAppearance:"none",backgroundImage:"linear-gradient(45deg, transparent 50%, currentColor 50%), linear-gradient(135deg, currentColor 50%, transparent 50%)",backgroundPosition:"calc(100% - 13px) 55%, calc(100% - 9px) 55%",backgroundSize:"4px 4px, 4px 4px",backgroundRepeat:"no-repeat"},children:cn(a).map($=>(0,q.jsx)("option",{value:$,children:N($)},$))}):(0,q.jsx)("div",{role:"group","aria-label":"Range","data-testid":"calendar-ranges",style:{display:"flex",flexWrap:"wrap",gap:4,marginLeft:"auto"},children:cn(a).map($=>(0,q.jsx)("button",{type:"button","aria-pressed":$===o,"data-testid":`calendar-range-${$}`,onClick:()=>ae($),style:{..._e,borderRadius:999,borderColor:"var(--graview-edge)",...$==="years"?{}:{textTransform:"capitalize"},...$===o?{borderColor:"var(--graview-accent)",color:"var(--graview-accent)",background:"var(--graview-panel)"}:{}},children:$==="years"?a.horizon?.title??"years":$},$))})]}),T?(0,q.jsx)("p",{"data-testid":T.tone==="refused"?"calendar-refused":"calendar-rounded",role:"status",style:{margin:0,fontSize:"0.8125rem",color:T.tone==="refused"?"var(--graview-warn)":"var(--graview-ink-muted)"},children:T.text}):null,v.years?(0,q.jsx)("nav",{"aria-label":"Years","data-testid":"calendar-years",style:{display:"flex",flexWrap:"wrap",gap:4},children:v.years.map($=>(0,q.jsx)("button",{type:"button","data-testid":`calendar-year-${$}`,onClick:()=>ae("year",`${$}-01-01`),style:_e,children:$},$))}):null,y,o==="agenda"&&d?(0,q.jsx)("div",{"data-testid":"calendar-groups",style:{display:"grid",gap:10,minHeight:0,overflow:"auto"},children:d.map($=>(0,q.jsxs)("section",{"data-testid":"calendar-group",style:{display:"grid",gap:4},children:[(0,q.jsxs)("h3",{style:{margin:0,fontSize:"0.8125rem",letterSpacing:"0.08em",textTransform:"uppercase",color:"var(--graview-ink-muted)"},children:[$.label," ",(0,q.jsx)("span",{style:{fontWeight:400},children:$.ids.size})]}),(0,q.jsx)(mn,{days:v.cells.map(V=>V.from),entries:E.filter(V=>$.ids.has(V.id)),today:a.today,emphasisOf:R,broken:M,hue:B,onMove:(V,p)=>U(V,{from:p,to:p,label:p},"day")})]},$.label))}):o==="agenda"?(0,q.jsx)(mn,{days:v.cells.map($=>$.from),entries:E,today:a.today,emphasisOf:R,broken:M,hue:B,onMove:($,V)=>U($,{from:V,to:V,label:V},"day")}):(0,q.jsx)(Xt,{span:v,weekStartsOn:b,entries:E,today:a.today,perCell:a.perCell??Jt[v.grain],emphasisOf:R,broken:M,hue:B,onOpen:$=>ae(Yt(v.grain),$.from),onMove:U})]})})}var ce=_(De(),1);var W=_(J(),1),Nr=`
4
+ .graview-columns { display: flex; flex-wrap: wrap; gap: 10px; align-items: flex-start; }
5
+ .graview-columns-column { flex: 1 1 13rem; min-width: 0; display: flex; flex-direction: column; gap: 8px; padding: 8px; border-radius: 10px; border: 1px solid var(--graview-edge); background: color-mix(in srgb, var(--graview-panel) 60%, transparent); }
6
+ .graview-columns-column[data-droppable="true"] { border-color: var(--graview-accent); }
7
+ .graview-columns-column[data-over="true"] { background: color-mix(in srgb, var(--graview-accent) 10%, transparent); }
8
+ .graview-columns-heading { margin: 0; display: flex; align-items: baseline; justify-content: space-between; gap: 8px; font-size: 0.875rem; font-weight: 600; color: var(--graview-ink); }
9
+ .graview-columns-count { font-weight: 400; color: var(--graview-ink-muted); font-variant-numeric: tabular-nums; }
10
+ .graview-columns-cards { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
11
+ .graview-columns-empty { margin: 0; font-size: 0.8125rem; color: var(--graview-ink-muted); }
12
+ .graview-columns-card[draggable="true"] { cursor: grab; }
13
+ .graview-columns-move { position: relative; z-index: ${Ce.raised}; display: flex; justify-content: flex-end; margin-top: 4px; }
14
+ .graview-columns-move[data-open="true"] { z-index: ${Ce.over}; }
15
+ .graview-columns-move > button, .graview-columns-menu button, .graview-columns-said button { font: inherit; font-size: 0.8125rem; min-height: 28px; padding: 2px 10px; border-radius: 7px; border: 1px solid var(--graview-edge); background: var(--graview-panel); color: var(--graview-ink); cursor: pointer; }
16
+ .graview-columns-move > button:focus-visible, .graview-columns-menu button:focus-visible, .graview-columns-said button:focus-visible { outline: 2px solid var(--graview-accent); outline-offset: 2px; }
17
+ .graview-columns-menu { position: absolute; right: 0; top: calc(100% + 4px); z-index: ${Ce.over}; display: flex; flex-direction: column; gap: 4px; padding: 6px; min-width: 10rem; border-radius: 9px; border: 1px solid var(--graview-edge); background: var(--graview-panel); box-shadow: 0 6px 18px rgb(0 0 0 / 0.18); }
18
+ .graview-columns-menu button { text-align: left; }
19
+ .graview-columns-said { margin: 0 0 8px; display: flex; flex-wrap: wrap; align-items: center; gap: 8px; font-size: 0.8125rem; color: var(--graview-ink); }
20
+ .graview-columns-said[data-tone="refused"] { color: var(--graview-warn); }
21
+ .graview-columns-card[data-graview-choose] { position: relative; }
22
+ .graview-columns-card .graview-choose-at { position: absolute; top: 6px; right: 6px; z-index: ${Ce.raised}; display: flex; }
23
+ [data-graview-choosable] { outline: none; }
24
+ @media (pointer: coarse) { [data-graview-choosable]:not([data-graview-choosing]) .graview-columns-card .graview-choose-at { display: none; } }
25
+ `;function nr(e){function t(n){let{store:r}=X();gt();let a=Object.keys(e.bindings).filter(w=>r.schema.tryDefinition(w)!==void 0),i=n.nodes??[],l=new Set(i.map(w=>String(w.kind))),m=w=>r.graph.nodesOfKind(w).filter(v=>We(r.schema.tryDefinition(w),v)),g=n.total!==void 0&&n.total>i.length,y=a[0],d=y===void 0?[]:l.has(y)?i.filter(w=>w.kind===y):m(y),{arranged:f,arrangement:k,bar:s}=Oe(n,{lensAllows:{group:!1},subject:d,...y===void 0?{}:{kind:y}}),c=s?new Map(f.nodes.map((w,v)=>[w.id,v])):void 0,S=(w,v)=>{if(!c||w!==y)return v;let u=v.filter(A=>c.has(A.id));return k.sort===void 0?u:[...u].sort((A,E)=>c.get(A.id)-c.get(E.id))},o=a.map(w=>{let v=e.bindings[w].column,u=Rt(r.schema,w,v),A=(h,T)=>T==="label"?he(r.schema.tryDefinition(h.kind),h):h[T],E=S(w,Ye(l.has(w)?i.filter(h=>h.kind===w):m(w).slice(0,n.budget??1/0),e.sort,A)),B=l.has(w)&&!g?E:S(w,m(w));return{kind:w,field:v,columns:u.map(h=>({column:h,cards:E.filter(T=>Ln(T,v,u)===h.value),count:B.filter(T=>Ln(T,v,u)===h.value).length})).filter(h=>h.column.value!==null||h.count>0)}}),b=o.reduce((w,v)=>w+v.columns.reduce((u,A)=>u+A.count,0),0),C=n.label??"Board";if(n.fidelity==="glyph")return(0,W.jsx)(ye,{label:`${C} \xB7 ${b}`,hue:de("columns")});if(n.fidelity==="summary")return(0,W.jsx)(te,{title:C,meta:y?Ie(r.schema,y,b):String(b),tone:"muted",children:(0,W.jsx)("p",{style:{margin:0,fontSize:"0.8125rem",color:"var(--graview-ink-muted)"},"data-testid":"columns-summary",children:o.flatMap(w=>w.columns.map(v=>`${v.column.label} ${v.count}`)).join(" \xB7 ")})});let R=(0,W.jsx)(Dr,{boards:o,title:C}),M=s?(0,W.jsxs)("div",{style:{display:"grid",gap:6},children:[s,R]}):R;return Pe(n,r.schema,n.mode==="fullscreen"?(0,W.jsx)("div",{style:{padding:"14px 16px"},children:M}):(0,W.jsx)(te,{title:C,meta:y?Ie(r.schema,y,b):void 0,children:M}))}return{name:"columns",requiredRoles:["column"],bindings:e.bindings,View:t}}function Dr({boards:e,title:t}){let{store:n,principal:r}=X(),a=(0,ce.useRef)(null),[i,l]=(0,ce.useState)(null),[m,g]=(0,ce.useState)(null),[y,d]=(0,ce.useState)(null),[f,k]=(0,ce.useState)(null);(0,ce.useLayoutEffect)(()=>{if(!f)return;a.current?.querySelector(f)?.focus(),k(null)});let s=w=>{let v=n.graph.getNode(w);return v?he(n.schema.tryDefinition(v.kind),v):w},c=(0,ce.useMemo)(()=>e.flatMap(w=>w.columns.flatMap(v=>v.cards.map(u=>u.id))),[e]),S=Et(c),o=(0,ce.useMemo)(()=>n.permittedMutations(r).some(w=>{let v=w.subject?.kinds;return v!==void 0&&(v==="*"||e.some(u=>v.includes(u.kind)))}),[n,r,e]),b=w=>{S.choose(w),requestAnimationFrame(()=>{((w[0]===void 0?null:a.current?.querySelector(`[data-graview-choose-box="${Gn(w[0])}"]`))??a.current)?.focus({preventScroll:!0})})},C=(w,v)=>At(n,r,w,v.field,v.columns.map(u=>u.column)),R=(w,v,u,A)=>{try{let E=n.apply(v.call,{author:r});l({text:`Moved \u201C${s(w)}\u201D to ${u}.`,tone:"moved",batch:E.batch,id:w}),A==="keyboard"&&k(`[data-columns-move="${Gn(w)}"] > button`)}catch(E){l({text:E instanceof Error?E.message:String(E),tone:"refused"})}},M=()=>{if(i?.batch)try{n.undo(i.batch,{author:r}),l({text:`\u201C${s(i.id??"")}\u201D is back where it was.`,tone:"moved"}),i.id&&k(`[data-columns-move="${Gn(i.id)}"] > button`)}catch(w){l({text:w instanceof Error?w.message:String(w),tone:"refused"})}};return(0,W.jsxs)("div",{"data-testid":"columns-lens",...o?{...S.listProps,tabIndex:-1,role:"group","aria-label":S.chosen.length>0?`${t}, ${S.chosen.length} chosen`:t,"data-graview-choosable":""}:{},ref:w=>{a.current=w,S.list.current=w},children:[(0,W.jsx)("style",{children:Nr}),o?(0,W.jsx)("style",{children:Mt}):null,(0,W.jsxs)("p",{className:"graview-columns-said",role:"status","data-tone":i?.tone,"data-testid":"columns-said",style:i?void 0:{position:"absolute",width:1,height:1,overflow:"hidden",clipPath:"inset(50%)"},children:[i?(0,W.jsx)("span",{children:i.text}):null,i?.batch?(0,W.jsx)("button",{type:"button","data-testid":"columns-undo",onClick:M,children:"Undo"}):null]}),e.map(w=>(0,W.jsx)("section",{"data-columns-kind":w.kind,"aria-label":`${tt(n.schema,w.kind)} by ${w.field}`,children:(0,W.jsx)("div",{className:"graview-columns",children:w.columns.map(({column:v,cards:u,count:A})=>{let E=v.value??"",B=m!==null&&v.value!==null&&m.to.includes(v.value);return(0,W.jsxs)("section",{className:"graview-columns-column","data-graview-column":E,"data-droppable":B||void 0,"data-over":B&&y===E||void 0,"aria-label":`${t} \xB7 ${v.label}, ${A}`,"data-graview-named-by-lens":"",onDragOver:h=>{B&&(h.preventDefault(),h.dataTransfer.dropEffect="move",d(E))},onDragLeave:()=>d(h=>h===E?null:h),onDrop:h=>{let T=h.dataTransfer.getData("text/graview-node"),P=n.graph.getNode(T);if(d(null),g(null),!P||v.value===null)return;let U=C(P,w).find(ne=>ne.to===v.value);U&&(h.preventDefault(),h.stopPropagation(),R(T,U,v.label,"drag"))},children:[(0,W.jsxs)("h3",{className:"graview-columns-heading",children:[(0,W.jsx)("span",{children:v.label}),(0,W.jsx)("span",{className:"graview-columns-count","data-testid":"columns-count",children:A})]}),u.length===0?(0,W.jsx)("p",{className:"graview-columns-empty",children:"Nothing here."}):(0,W.jsx)("ul",{className:"graview-columns-cards",children:(0,W.jsx)(Lt.Provider,{value:v.value===null?null:{field:w.field,values:[v.value,v.label]},children:u.map(h=>{let T=C(h,w);return(0,W.jsx)(zr,{card:h,moves:T,...o?{choosing:S}:{},labelOf:P=>w.columns.find(U=>U.column.value===P)?.column.label??P,onMove:(P,U)=>R(h.id,P,U,"keyboard"),onDrag:P=>g(P?{id:h.id,to:T.map(U=>U.to)}:null)},h.id)})})})]},E)})})},w.kind)),o?(0,W.jsx)(Pt,{store:n,chosen:S.chosen,principal:r,anchor:()=>a.current?.closest('[data-testid="kind-stop"], [data-embed-content]')??null,of:c.length,onChooseAll:()=>S.choose(c),onClear:S.clear,onActed:b}):null]})}var Gn=e=>typeof globalThis.CSS?.escape=="function"?globalThis.CSS.escape(e):e.replace(/["\\]/g,"\\$&");function zr({card:e,moves:t,labelOf:n,onMove:r,onDrag:a,choosing:i}){let{store:l,views:m}=X(),[g,y]=(0,ce.useState)(!1),d=(0,ce.useRef)(null),f=(0,ce.useRef)(null),k=he(l.schema.tryDefinition(e.kind),e),s=m.lookup(e.kind,{cardinality:"one",fidelity:"summary"});(0,ce.useLayoutEffect)(()=>{g&&d.current?.querySelector("button")?.focus()},[g]);let c=()=>{y(!1),f.current?.focus()},S=o=>{let b=[...d.current?.querySelectorAll("button")??[]],C=b.indexOf(document.activeElement);o.key==="Escape"?(o.preventDefault(),o.stopPropagation(),c()):(o.key==="ArrowDown"||o.key==="ArrowUp")&&(o.preventDefault(),o.stopPropagation(),b[(C+(o.key==="ArrowDown"?1:b.length-1))%b.length]?.focus())};return(0,W.jsxs)("li",{className:"graview-spec-item graview-columns-card","data-graview-listed":e.id,"data-as":"card",...i?{"data-graview-choose":e.id}:{},draggable:t.length>0||void 0,onDragStart:o=>{t.length!==0&&(o.dataTransfer.setData("text/graview-node",e.id),o.dataTransfer.effectAllowed="move",a(!0))},onDragEnd:()=>a(!1),children:[(0,W.jsx)(Tt,{node:e,label:k}),s?(0,W.jsx)(ct,{mode:"scene",children:(0,W.jsx)(mt.Provider,{value:k,children:(0,W.jsx)(s,{node:e,cardinality:"one",fidelity:"summary",mode:"scene",selected:!1})})}):(0,W.jsx)("span",{className:"graview-spec-item-name","aria-hidden":"true",children:k}),i?(0,W.jsx)("span",{className:"graview-choose-at",children:(0,W.jsx)("input",{...i.boxProps(e.id,k),onPointerEnter:Tn,onFocus:Tn})}):null,t.length>0?(0,W.jsxs)("div",{className:"graview-columns-move","data-columns-move":e.id,"data-open":g||void 0,onBlur:o=>{o.currentTarget.contains(o.relatedTarget)||y(!1)},children:[(0,W.jsx)("button",{ref:f,type:"button","aria-haspopup":"menu","aria-expanded":g,"aria-label":`Move \u201C${k}\u201D to another column`,"data-testid":"columns-move",onClick:()=>y(o=>!o),children:"Move\u2026"}),g?(0,W.jsx)("div",{ref:d,role:"menu","aria-label":`Move \u201C${k}\u201D to`,className:"graview-columns-menu",onKeyDown:S,onMouseDown:o=>o.preventDefault(),children:t.map(o=>(0,W.jsx)("button",{type:"button",role:"menuitem","data-columns-to":o.to,title:o.title,onClick:()=>{y(!1),r(o,n(o.to))},children:n(o.to)},o.to))}):null]}):null]})}var be=_(De(),1);var I=_(J(),1),Br=["rows","columns","link"],Xe=class extends Error{constructor(n,r){super(`${n}
26
+ ${r}`);this.hint=r;this.name="CoverageBindingError"}},jn=(e,t)=>t&&e[t]!==void 0?String(e[t]):"",Wr=40,Ir=24;function Vr(e,t={}){let n=t.rows??Wr,r=t.columns??Ir;if(e.rows.length<=n&&e.columns.length<=r)return e;let a=new Map;for(let d of e.cells)a.set(d.rowId,(a.get(d.rowId)??0)+1),a.set(`col:${d.columnId}`,(a.get(`col:${d.columnId}`)??0)+1);let i=(d,f,k)=>{if(d.length<=f)return d;let s=new Set(d.map((c,S)=>({item:c,index:S,count:a.get(k(c))??0})).sort((c,S)=>S.count-c.count||c.index-S.index).slice(0,f).map(c=>c.item.id));return d.filter(c=>s.has(c.id))},l=i(e.rows,n,d=>d.id),m=i(e.columns,r,d=>`col:${d.id}`),g=new Set(l.map(d=>d.id)),y=new Set(m.map(d=>d.id));return{...e,rows:l,columns:m,cells:e.cells.filter(d=>g.has(d.rowId)&&y.has(d.columnId)),of:{rows:e.rows.length,columns:e.columns.length}}}function or(e,t,n,r){let a=u=>u,i=u=>r?he(r.tryDefinition(u.kind),u):String(a(u).label??u.id),l=r?[n.rows,n.columns].filter(u=>r.tryDefinition(u)===void 0):[];if(l.length>0)throw new Xe(`No kind is declared for ${l.map(u=>`"${u}"`).join(" or ")}.`,'Check the lens bindings: { rows: "<kind>", columns: "<kind>", link: "<edge kind>" }');if(r&&typeof n.link!="string"){let u=$n(r,n.columns,n.link.path);if(!u.ok||!u.reached.has(n.rows)){let A=$n(r,n.columns,[...n.link.path].reverse());throw new Xe(A.ok&&A.reached.has(n.rows)?`The path runs from the ${n.rows} to the ${n.columns}; it is walked from the columns.`:`The path [${n.link.path.join(", ")}] cannot get from a ${n.columns} to a ${n.rows}.`,`Name it column end first: link: { path: [${[...n.link.path].reverse().map(E=>JSON.stringify(E)).join(", ")}] }`)}}let m=e.filter(u=>u.kind===n.rows),g=e.filter(u=>u.kind===n.columns);if(!r&&m.length===0&&g.length===0)throw new Xe(`Nothing to lay out: no "${n.rows}" and no "${n.columns}" nodes.`,'Check the lens bindings: { rows: "<kind>", columns: "<kind>", link: "<edge kind>" }');let y=n.groupOrder??[],d=u=>{let A=y.indexOf(u);return A===-1?y.length:A},f=n.badge?t.filter(u=>u.kind===n.badge.edge):[],k=new Set(m.map(u=>u.id)),s=new Set(g.map(u=>u.id)),c=[];if(typeof n.link=="string"){let u=n.link,A=t.filter(P=>P.kind===u),E=P=>r?.tryDefinition?.(P)?.edges?.[u]?.to,B=(E(n.columns)??[]).some(P=>P===n.rows||P==="*"),h=(E(n.rows)??[]).some(P=>P===n.columns||P==="*"),T=B||!h;for(let P of A){let U=T?P.to:P.from,ne=T?P.from:P.to;k.has(U)&&s.has(ne)&&c.push({rowId:U,columnId:ne})}}else{let u=new Map;for(let E of new Set(n.link.path))u.set(E,new Map);for(let E of t){let B=u.get(E.kind);if(!B)continue;let h=B.get(E.from);h?h.push(E.to):B.set(E.from,[E.to]);let T=B.get(E.to);T?T.push(E.from):B.set(E.to,[E.from])}let A=new Set;for(let E of g){let B=[{id:E.id,via:[]}];for(let h of n.link.path){let T=[],P=new Set,U=u.get(h);for(let ne of B)for(let ae of U.get(ne.id)??[])P.has(`${ne.id}|${ae}`)||(P.add(`${ne.id}|${ae}`),T.push({id:ae,via:[...ne.via,ne.id]}));B=T}for(let h of B){if(!k.has(h.id))continue;let T=`${h.id}|${E.id}`;A.has(T)||(A.add(T),c.push({rowId:h.id,columnId:E.id,via:h.via.slice(1)}))}}}let S=new Set(n.requiredGroups??[]),o=n.requiredVia?new Set(t.filter(u=>u.kind===n.requiredVia.edge).map(u=>u.to)):null,b=new Set(c.map(u=>u.rowId)),C=new Set(c.map(u=>u.columnId)),R=new Set(f.map(u=>u.to)),M=(u,A)=>A==="label"?i(u):a(u)[A],w=Ye(m,n.sort,M).map(u=>{let A=a(u),E=jn(A,n.rowGroup);return{id:u.id,ref:jn(A,n.rowRef),label:i(u),group:E,required:o?o.has(u.id):S.size===0||S.has(E),covered:b.has(u.id),badged:R.has(u.id)}}).sort((u,A)=>d(u.group)-d(A.group)||(n.sort!==void 0?0:u.ref<A.ref?-1:u.ref>A.ref?1:0)),v=Ye(g,n.columnSort,M).map(u=>({id:u.id,label:i(u),used:C.has(u.id),group:jn(a(u),n.columnGroup)})).sort((u,A)=>u.group<A.group?-1:u.group>A.group?1:n.columnSort!==void 0?0:u.id<A.id?-1:u.id>A.id?1:0).map(({group:u,...A})=>A);return{rows:w,columns:v,cells:c,gaps:w.filter(u=>u.required&&!u.covered).map(u=>u.id),unasked:v.filter(u=>!u.used).map(u=>u.id)}}var tr=316,_n=58,Fn=176,Hr=Math.sin(_n*Math.PI/180),Gr=Math.cos(_n*Math.PI/180),jr=e=>{let t=e.reduce((r,a)=>Math.max(r,a.length),0),n=Math.min(Fn,Math.max(46,t*5.4+12));return Math.ceil(n*Hr)+8},rr=Math.ceil(Fn*Gr),ar=(e,t)=>tn(e,t).toLowerCase(),sr=(e,t)=>rn(e.tryDefinition(t),t);function _r(e,t,n){return t.rows===t.columns?`${e} with none across`:`${Ie(n,t.rows,e)} with no ${sr(n,t.columns)}`}function Fr(e,t,n){return t.rows===t.columns?`${e} with none down`:`${Ie(n,t.columns,e)} on no ${sr(n,t.rows)}`}function qr({nodes:e,label:t,fidelity:n,mode:r,options:a,schema:i,implicated:l=[],flagged:m=[],budget:g,rowsKept:y}){let{store:d}=X(),f=Xr(),k=(0,be.useRef)(null),s=Ve(k),[c,S]=(0,be.useState)(null),o=or(He(d.graph,d.schema,e).filter(h=>h.kind===a.rows||h.kind===a.columns).filter(h=>y===void 0||a.rows===a.columns||h.kind!==a.rows||y.has(h.id)),d.graph.allEdges(),a,i),b=n==="full"?Vr(o,g!==void 0?{rows:g,columns:g}:{}):o,C=typeof a.link=="string"?a.link:void 0,R=y!==void 0&&o.cells.length===0&&o.columns.length>0&&(C===void 0||d.graph.allEdges().some(h=>h.kind===C))?void 0:dt(d.schema,a,{rows:o.rows.length,columns:o.columns.length,cells:o.cells.length});if(n==="glyph")return(0,I.jsx)(ye,{label:`${t??"Coverage"} \xB7 ${R?"nothing linked":b.gaps.length===0?"complete":`${b.gaps.length} missing`}`,hue:de("coverage")});if(R)return(0,I.jsx)(te,{title:t??"Coverage",tone:"muted",fit:!0,...r==="fullscreen"?{style:{flex:"1 1 auto",minHeight:0,height:"100%"}}:{},children:(0,I.jsx)("p",{"data-coverage-unlinked":"",style:{margin:0,color:"var(--graview-ink-muted)"},children:R})});if(n==="summary"){let h=b.rows.filter(T=>b.gaps.includes(T.id));return(0,I.jsxs)(te,{title:t??"Coverage",meta:`${b.rows.length-b.gaps.length}/${b.rows.length}`,tone:b.gaps.length>0?"warning":"muted",fit:!0,children:[(0,I.jsx)(Jr,{grid:b}),h.length>0?(0,I.jsx)(Me,{pick:!0,max:4,items:h.map(T=>({id:T.id,label:T.ref||T.label}))}):null]})}let M=new Set(l),w=new Set(m),v=c!==null&&c.every(h=>M.has(h))?c:null,u=r==="fullscreen",A=jr(b.columns.map(h=>h.label)),E=s===null?tr:Math.max(96,Math.min(tr,Math.round(s*.36))),B=s!==null&&(s<420||E+b.columns.length*28+rr>s);return(0,I.jsx)(te,{title:t??"Coverage",...u?{style:{flex:"1 1 auto",minHeight:0,height:"100%"}}:{},meta:b.rows.length===0||b.columns.length===0?void 0:b.gaps.length===0&&b.unasked.length===0?"complete":[b.gaps.length>0?_r(b.gaps.length,a,d.schema):"",b.unasked.length>0?Fr(b.unasked.length,a,d.schema):""].filter(Boolean).join(" \xB7 "),selected:!1,fit:!0,children:(0,I.jsxs)("div",{ref:k,"data-coverage-shape":B?"stacked":"matrix",onClick:h=>S(ir(h.target)),onKeyDown:h=>{(h.key==="Enter"||h.key===" ")&&S(ir(h.target))},style:{position:"relative",display:"flex",flexDirection:"column",flex:"1 1 auto",minHeight:0,paddingRight:B?0:rr},children:[B?null:(0,I.jsxs)("div",{style:{display:"flex",alignItems:"flex-end",flex:"0 0 auto",position:"sticky",top:0,zIndex:Ce.over,background:"var(--graview-panel)",paddingTop:6},children:[(0,I.jsx)("div",{ref:f.corner,style:{width:E,flex:"0 0 auto",alignSelf:"stretch",position:"sticky",left:0,zIndex:Ce.raised,background:"var(--graview-panel)"}}),(0,I.jsx)("div",{ref:f.heads,style:{display:"flex",flex:1,minWidth:0,height:A},children:b.columns.map(h=>(0,I.jsx)("div",{"data-graview-pick":h.id,"data-graview-emphasis":M.size===0?"plain":M.has(h.id)?"lit":"dimmed",title:h.label,"data-graview-column":h.id,style:{flex:1,minWidth:28,boxSizing:"border-box",borderLeft:"1px solid transparent",pointerEvents:"none",position:"relative",display:"flex",alignItems:"flex-end",justifyContent:"center"},children:(0,I.jsxs)("span",{style:{position:"absolute",bottom:3,padding:"3px 0",pointerEvents:"auto",cursor:"pointer",left:"50%",visibility:f.hidden.has(h.id)?"hidden":"visible",transformOrigin:"left bottom",transform:`rotate(-${_n}deg)`,whiteSpace:"nowrap",maxWidth:Fn,overflow:"hidden",textOverflow:"ellipsis",fontSize:"0.75rem",letterSpacing:"0.005em",color:h.used?M.size>0&&!M.has(h.id)?"var(--graview-ink-faint)":"var(--graview-ink)":"var(--graview-warn)"},children:[h.used?"":"\u26A0 ",h.label]})},h.id))})]}),b.of?(0,I.jsxs)("p",{"data-testid":"coverage-more",style:{margin:"4px 0 6px",fontSize:"0.8125rem",color:"var(--graview-ink-muted)"},children:[[b.of.rows>b.rows.length?`the ${b.rows.length} most connected of ${b.of.rows} ${ar(d.schema,a.rows)}`:null,b.of.columns>b.columns.length?`${b.columns.length} of ${b.of.columns} ${ar(d.schema,a.columns)} across`:null].filter(Boolean).join(" \xB7 ").replace(/^./,h=>h.toUpperCase())," ","\u2014 what is missing is still counted over all of them."]}):null,(0,I.jsx)("div",{children:b.rows.map((h,T)=>{let P=b.rows[T-1],U=P===void 0||P.group!==h.group,ne=h.required&&!h.covered,ae=M.size>0&&!M.has(h.id);return(0,I.jsxs)("div",{children:[U&&h.group?(0,I.jsx)("div",{style:{fontSize:"0.6875rem",letterSpacing:"0.16em",textTransform:"uppercase",color:"var(--graview-ink-faint)",padding:"9px 0 3px"},children:(0,I.jsx)("span",{style:{position:"sticky",left:0,display:"inline-block",paddingRight:8,background:"var(--graview-panel)"},children:h.group})}):null,(0,I.jsxs)("div",{style:{display:"flex",flexDirection:B?"column":"row",alignItems:"stretch",borderTop:"1px solid var(--graview-edge)",opacity:ae?.72:1},children:[(0,I.jsxs)("div",{"data-graview-pick":h.id,"data-graview-emphasis":M.size===0?"plain":ae?"dimmed":"lit",title:h.label,style:{width:B?"auto":E,flex:"0 0 auto",position:B?"static":"sticky",left:0,zIndex:Ce.raised,background:"var(--graview-panel)",display:"flex",alignItems:"center",gap:7,padding:"6px 10px 6px 0",boxSizing:"border-box",fontSize:"0.8125rem",minWidth:0,color:ne||w.has(h.id)?"var(--graview-warn)":"var(--graview-ink)"},children:[h.ref?(0,I.jsx)("span",{style:{flex:"0 0 auto",fontVariantNumeric:"tabular-nums",color:"var(--graview-ink-faint)"},children:h.ref}):null,(0,I.jsx)("span",{style:{minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:h.label}),a.badge?(0,I.jsx)("span",{title:h.badged?a.badge.title:a.badge.missingTitle,style:{marginLeft:"auto",flex:"0 0 auto",fontSize:"0.75rem",color:h.badged?"var(--graview-ink-faint)":"var(--graview-warn)"},children:h.badged?a.badge.symbol:"\u25CB"}):null]}),(0,I.jsx)("div",{style:{display:"flex",flex:1,minWidth:0,...B?{flexWrap:"wrap",gap:6,padding:"0 0 8px"}:{}},children:b.columns.map(ee=>{let ge=b.cells.find(N=>N.rowId===h.id&&N.columnId===ee.id),pe=ge!==void 0;return(0,I.jsxs)("div",{"data-graview-mark":"",...pe?{"data-graview-pick":ee.id,"data-graview-emphasis":M.size===0?"plain":M.has(ee.id)&&M.has(h.id)?"lit":"dimmed","data-graview-joins":JSON.stringify(Ur(ge))}:{},title:pe?`${ee.label} answers ${h.ref||h.label}`:`${ee.label} does not answer ${h.ref||h.label}`,style:B?{flex:"0 0 auto",minHeight:24,boxSizing:"border-box",display:"inline-flex",alignItems:"center",gap:6,padding:"2px 9px 2px 7px",borderRadius:6,border:"1px solid var(--graview-edge)",fontSize:"0.75rem",color:pe?"var(--graview-ink)":"var(--graview-ink-faint)"}:{flex:1,minWidth:28,boxSizing:"border-box",display:"flex",alignItems:"center",justifyContent:"center",borderLeft:"1px solid var(--graview-edge)"},children:[(0,I.jsx)("span",{style:Qr(pe,ne,M.has(ee.id)&&M.has(h.id),M.size>0)}),B?(0,I.jsx)("span",{children:ee.label}):null]},ee.id)})})]})]},h.id)})}),v?(0,I.jsx)(Yr,{box:k,joins:v,shape:`${B?"stacked":"matrix"} ${s??""}`}):null]})})}var Ur=e=>[e.rowId,e.columnId,...e.via??[]];function ir(e){let t=e?.closest?.("[data-graview-joins]")?.getAttribute("data-graview-joins");if(!t)return null;try{let n=JSON.parse(t);return Array.isArray(n)&&n.every(r=>typeof r=="string")?n:null}catch{return null}}var fn=(e,t,n)=>Math.min(n,Math.max(t,e));function Kr(e){let t=e.getBoundingClientRect(),n=typeof document.createRange=="function"?document.createRange():null;n?.selectNodeContents(e);let r=typeof n?.getBoundingClientRect=="function"?n.getBoundingClientRect():null;return r&&r.width>0&&r.height>0?r:t}function Yr({box:e,joins:t,shape:n}){let[r,a]=(0,be.useState)([]),i=JSON.stringify(t);return(0,be.useLayoutEffect)(()=>{let l=e.current;if(!l||typeof window>"u")return;let m=()=>{let d=l.getBoundingClientRect(),f=l.offsetWidth>0&&d.width>0?d.width/l.offsetWidth:1,k=[...l.querySelectorAll("[data-graview-joins]")].find(S=>S.getAttribute("data-graview-joins")===i);if(!k){a([]);return}let s=k.getBoundingClientRect(),c=[];for(let S of JSON.parse(i)){let o=[...l.querySelectorAll("[data-graview-pick]")].find(v=>v.getAttribute("data-graview-pick")===S&&!v.closest("[data-graview-mark]"));if(!o)continue;let b=Kr(o),C=fn(s.left+s.width/2,b.left,b.right),R=fn(s.top+s.height/2,b.top,b.bottom),M=fn(C,s.left,s.right),w=fn(R,s.top,s.bottom);c.push({id:S,x1:(M-d.left)/f,y1:(w-d.top)/f,x2:(C-d.left)/f,y2:(R-d.top)/f})}a(c)};m();let g=0,y=()=>{g===0&&(g=requestAnimationFrame(()=>{g=0,m()}))};return document.addEventListener("scroll",y,{capture:!0,passive:!0}),window.addEventListener("resize",y,{passive:!0}),()=>{document.removeEventListener("scroll",y,{capture:!0}),window.removeEventListener("resize",y),g!==0&&cancelAnimationFrame(g)}},[e,i,n]),(0,I.jsx)("svg",{"aria-hidden":"true","data-coverage-join":i,style:{position:"absolute",left:0,top:0,width:"100%",height:"100%",overflow:"visible",pointerEvents:"none",zIndex:Ce.over},children:r.map(l=>(0,I.jsxs)("g",{"data-coverage-join-to":l.id,children:[(0,I.jsx)("line",{x1:l.x1,y1:l.y1,x2:l.x2,y2:l.y2,stroke:"var(--graview-accent)",strokeWidth:1.6,strokeLinecap:"round"}),(0,I.jsx)("circle",{cx:l.x2,cy:l.y2,r:2.6,fill:"var(--graview-accent)"})]},l.id))})}function Qr(e,t,n,r){return e?{width:13,height:13,borderRadius:4,background:n||!r?"var(--graview-accent)":"var(--graview-accent-dim)",boxShadow:n&&r?"0 0 12px -2px var(--graview-accent)":void 0}:{width:5,height:5,borderRadius:1,background:t?"var(--graview-warn)":"var(--graview-edge)",opacity:t?.5:1}}function Jr({grid:e}){let t=e.rows.filter(a=>a.required),n=t.filter(a=>a.covered).length,r=t.length===0?1:n/t.length;return(0,I.jsx)("div",{role:"img","aria-label":`${n} of ${t.length} covered`,style:{height:6,borderRadius:999,overflow:"hidden",background:"var(--graview-edge)"},children:(0,I.jsx)("div",{style:{width:`${Math.round(r*100)}%`,height:"100%",background:r===1?"var(--graview-accent)":"var(--graview-warn)"}})})}function lr(e){function t(n){let{store:r}=X(),a=He(r.graph,r.schema,n.nodes).filter(g=>g.kind===e.rows),{arranged:i,bar:l}=Oe(n,{lensAllows:{sort:!1,group:!1},subject:a,kind:e.rows}),m=(0,I.jsx)(qr,{schema:r.schema,...n,options:e,...l?{rowsKept:new Set(i.nodes.map(g=>g.id))}:{}});return l?(0,I.jsxs)("div",{style:{display:"grid",gap:6,height:"100%",minHeight:0,gridTemplateRows:"auto 1fr"},children:[l,m]}):m}return{name:"coverage",requiredRoles:[...Br],options:e,View:t,build(n,r,a){return or(n,r,e,a)}}}function Xr(){let e=(0,be.useRef)(null),t=(0,be.useRef)(null),[n,r]=(0,be.useState)(new Set);return(0,be.useEffect)(()=>{let a=t.current;if(!a||typeof window>"u")return;let i=a.parentElement;for(;i&&!/(auto|scroll)/.test(getComputedStyle(i).overflowX);)i=i.parentElement;if(!i)return;let l=0,m=()=>{l=0;let y=e.current?.getBoundingClientRect().right??0,d=new Set;for(let f of a.querySelectorAll("[data-graview-column]")){let k=f.getBoundingClientRect();k.left+k.width/2<y&&d.add(f.dataset.graviewColumn)}r(f=>f.size===d.size&&[...d].every(k=>f.has(k))?f:d)},g=()=>{l===0&&(l=requestAnimationFrame(m))};return m(),i.addEventListener("scroll",g,{passive:!0}),()=>{i.removeEventListener("scroll",g),l!==0&&cancelAnimationFrame(l)}},[]),{corner:e,heads:t,hidden:n}}var cr=["regions","outline"],Fe=class extends Error{constructor(n,r){super(`${n}
27
+ ${r}`);this.hint=r;this.name="PlanBindingError"}},hn='Check the lens bindings: { regions: "<kind>", outline: "<field>", markers?: "<kind>", at?: "<field>", within?: "<edge>" }',dr=e=>typeof e=="object"&&e!==null&&typeof e.x=="number"&&typeof e.y=="number";function yn(e,t,n,r){let a=o=>o,i=o=>r?he(r.tryDefinition(o.kind),o):String(a(o).label??o.id);if(r&&r.tryDefinition(n.regions)===void 0)throw new Fe(`No kind is declared for "${n.regions}".`,hn);if(n.markers&&r&&r.tryDefinition(n.markers)===void 0)throw new Fe(`No kind is declared for "${n.markers}".`,hn);let l=e.filter(o=>o.kind===n.regions);if(!r&&l.length===0)throw new Fe(`Nothing to draw: no "${n.regions}" nodes.`,hn);let g=r?.tryDefinition(n.regions)?.fields?.shape;if(g!==void 0&&!(n.outline in g))throw new Fe(`"${n.regions}" has no field called "${n.outline}".`,hn);let y=(()=>{let o=new Map;if(n.nests)for(let b of t)b.kind===n.nests&&o.set(b.from,b.to);return b=>{let C=0,R=o.get(b),M=new Set([b]);for(;R!==void 0&&!M.has(R)&&C<l.length;)M.add(R),C+=1,R=o.get(R);return C}})(),d=n.markers?e.filter(o=>o.kind===n.markers):[],f=new Map;if(n.within)for(let o of t)o.kind===n.within&&f.set(o.from,o.to);let k=[],s=new Map;for(let o of d){let b=n.at===void 0?void 0:a(o)[n.at],C=f.get(o.id);if(!dr(b)||C===void 0){k.push({id:o.id,label:i(o)});continue}let R=n.markerKind===void 0?void 0:a(o)[n.markerKind],M=s.get(C)??[];M.push({id:o.id,label:i(o),at:b,...typeof R=="string"?{what:R}:{}}),s.set(C,M)}let c=[],S=[];for(let o of l){let b=a(o)[n.outline];if(!Array.isArray(b)||b.length<3||!b.every(dr)){c.push({id:o.id,label:i(o)});continue}let C=n.regionKind===void 0?void 0:a(o)[n.regionKind];S.push({id:o.id,label:i(o),outline:b,center:Ct(b),depth:y(o.id),markers:s.get(o.id)??[],...typeof C=="string"?{what:C}:{}})}return S.sort((o,b)=>o.depth-b.depth),{regions:S,undrawn:c,strays:k}}var Te=_(De(),1);var L=_(J(),1);function gr({map:e,options:t,implicated:n,flagged:r}){return(0,L.jsxs)("ul",{style:{margin:0,padding:0,listStyle:"none",display:"grid",gap:".25rem"},children:[e.regions.map(a=>{let i=wn(a.id,n,r);return(0,L.jsxs)("li",{"data-graview-pick":a.id,...i?{"data-graview-emphasis":i}:{},style:{display:"flex",flexWrap:"wrap",gap:".5rem",justifyContent:"space-between",minWidth:0,padding:".25rem .4rem",borderRadius:".35rem",background:i==="flagged"?Un(a.what,i,t.hues):void 0},children:[(0,L.jsx)("span",{style:{minWidth:0,overflowWrap:"anywhere"},children:a.label}),(0,L.jsxs)("span",{style:{opacity:.7,whiteSpace:"nowrap"},children:[a.what?`${a.what} \xB7 `:"",a.markers.length]})]},a.id)}),e.undrawn.map(a=>(0,L.jsxs)("li",{"data-graview-pick":a.id,style:{display:"flex",gap:".5rem",opacity:.7,padding:".25rem .4rem"},children:[(0,L.jsx)("span",{style:{minWidth:0,overflowWrap:"anywhere"},children:a.label}),(0,L.jsx)("span",{style:{whiteSpace:"nowrap"},children:t.undrawnLabel??"not drawn"})]},a.id))]})}var qn=1e3,ur=.022,Ze={minHeight:"1.9rem",padding:".25rem .65rem",borderRadius:".35rem",border:"1px solid var(--graview-edge)",background:"var(--graview-panel)",color:"var(--graview-ink)",font:"inherit",fontSize:"0.9375rem",cursor:"pointer"},wn=(e,t,n)=>{if(n?.includes(e))return"flagged";if(t?.includes(e))return"implicated"},vn=(e,t)=>(e===void 0?void 0:t?.[e])??de(e??"region"),Un=(e,t,n)=>t==="flagged"?"color-mix(in oklab, var(--graview-warn) 26%, var(--graview-panel))":`color-mix(in oklab, hsl(${vn(e,n)} 52% 48%) 24%, var(--graview-panel))`,mr=(e,t,n)=>t==="flagged"?"var(--graview-warn)":`color-mix(in oklab, hsl(${vn(e,n)} 48% 42%) 78%, var(--graview-ink))`;function Zr(e){let t=e.currentTarget.getBoundingClientRect(),n=r=>Math.round(Math.max(0,Math.min(1,r))*1e3)/1e3;return{x:n(t.width===0?0:(e.clientX-t.left)/t.width),y:n(t.height===0?0:(e.clientY-t.top)/t.height)}}function pr({schema:e,options:t,nodes:n,label:r,fidelity:a,selected:i,implicated:l,flagged:m}){let{store:g}=X(),y=g.graph.allEdges(),d=g.graph.allNodes(),f=n===void 0?void 0:new Set(n.map(x=>x.id)),k=f===void 0?d:d.filter(x=>x.kind!==t.regions||f.has(x.id)),s=yn(k,y,t,e),c=s.regions.length,S=s.regions.reduce((x,O)=>x+O.markers.length,0);if(a==="glyph")return(0,L.jsx)(ye,{label:`${r??"Ground"} \xB7 ${c}`,...s.undrawn.length>0?{meta:`+${s.undrawn.length} undrawn`}:{},selected:i});if(a==="summary")return(0,L.jsx)(te,{title:r??"The plan",subtitle:`${c} drawn \xB7 ${S} standing in them`,children:(0,L.jsx)(gr,{map:s,options:t,...l?{implicated:l}:{},...m?{flagged:m}:{}})});let o=(0,Te.useMemo)(()=>{let x=1/0,O=1/0,G=-1/0,ie=-1/0,se=K=>{K.x<x&&(x=K.x),K.x>G&&(G=K.x),K.y<O&&(O=K.y),K.y>ie&&(ie=K.y)};for(let K of s.regions){for(let ve of K.outline)se(ve);for(let ve of K.markers)se(ve.at)}if(!Number.isFinite(x)||G-x<=0||ie-O<=0)return{x0:0,y0:0,x1:1,y1:1};let ue=Math.max(G-x,ie-O)*.04;return{x0:x-ue,y0:O-ue,x1:G+ue,y1:ie+ue}},[s.regions]),b=(o.x1-o.x0)/(o.y1-o.y0),C=t.aspect??Math.min(3.2,Math.max(.55,b)),R=Math.round(qn/(o.x1-o.x0)),M=Math.round(R*(o.x1-o.x0)),w=Math.round(M/C),v={x:o.x0*R,y:o.y0*R-(w-R*(o.y1-o.y0))/2,w:M,h:w},u=R,A=v.w,E=(l?.length??0)>0||(m?.length??0)>0,B=(0,Te.useRef)(null),{touchable:h,legible:T}=ft(B,{units:v.w,target:A*ur*2}),P=En("--graview-font-display","serif"),U=En("--graview-font-body","sans-serif"),{named:ne,placed:ae,tagged:ee}=(0,Te.useMemo)(()=>{let x=[],O=A*.012,G=qn*.004,ie=(le,Y)=>!x.some(fe=>fe!==Y&&$t({x0:le.x0-G,y0:le.y0-G,x1:le.x1+G,y1:le.y1+G},fe)),se=[...s.regions].sort((le,Y)=>Pn(Y.outline)-Pn(le.outline)),ue=new Map,K=new Map;for(let le of se){let Y=kt(le.outline),fe=Math.max(0,(Y.bottom-Y.top)*u*.55),Re=null;for(let ke of[.12,.26,.42,.6,.78]){let xe=Y.top+ke*(Y.bottom-Y.top),Ae=Mn(le.outline,xe),bn=Math.max(0,(Ae.x1-Ae.x0)*R-O*2),me=Ot(le.label,{room:bn,height:fe,size:A*.023,floor:A*.015,measure:P});if(me===null)continue;let Ne=Math.max(...me.lines.map(Cr=>P(Cr,me.fontSize))),Ee=me.lines.length*me.fontSize*1.15,Qn=Y.top*u+O+Ee/2,Jn=Y.bottom*u-O-Ee/2,nn=Jn<Qn?(Y.top+Y.bottom)*u/2:Math.min(Math.max(xe*u,Qn),Jn),xn=Mn(le.outline,nn/u),Sn=xn.x0*R+O;if(Ne>(xn.x1-xn.x0)*R-O*2)continue;let Xn={x0:Sn,y0:nn-Ee/2,x1:Sn+Ne,y1:nn+Ee/2};if(ie(Xn)){x.push(Xn),Re={fitted:me,x:Sn,y:nn};break}}ue.set(le.id,Re?.fitted??null),Re!==null&&K.set(le.id,{x:Re.x,y:Re.y})}let ve=A*.018,Ue=new Map,F=A*.011+A*.004,Yn=new Map;for(let le of s.regions)for(let Y of le.markers){let fe={x0:Y.at.x*R-F,y0:Y.at.y*u-F,x1:Y.at.x*R+F,y1:Y.at.y*u+F};Yn.set(Y.id,fe),x.push(fe)}for(let le of h?s.regions:[])for(let Y of le.markers){let fe=A*.018,Re=U(Y.label,ve),ke=Y.at.x*R,xe=Y.at.y*u,Ae=ve*1.15,bn=[{x:ke+fe,y:xe,anchor:"start"},{x:ke-fe,y:xe,anchor:"end"},{x:ke+fe*.7,y:xe-Ae,anchor:"start"},{x:ke-fe*.7,y:xe-Ae,anchor:"end"},{x:ke+fe*.7,y:xe+Ae,anchor:"start"},{x:ke-fe*.7,y:xe+Ae,anchor:"end"},{x:ke,y:xe-Ae*1.1,anchor:"start"},{x:ke,y:xe+Ae*1.1,anchor:"start"}];for(let me of bn){let Ne=me.anchor==="start"?me.x:me.x-Re,Ee={x0:Ne,y0:me.y-ve*.62,x1:Ne+Re,y1:me.y+ve*.62};if(!(Ne<v.x+4||Ne+Re>v.x+v.w-4)&&!(Ee.y0<v.y+2||Ee.y1>v.y+v.h-2)&&ie(Ee,Yn.get(Y.id))){x.push(Ee),Ue.set(Y.id,{at:{x:me.x,y:me.y},anchor:me.anchor,size:ve});break}}}return{named:ue,placed:K,tagged:Ue}},[s.regions,qn,u,h,P,U]),ge=(0,Te.useMemo)(()=>{let x=[];for(let O of s.regions)(ne.get(O.id)?.whole??!1)===!1&&x.push({id:O.id,label:O.label,what:O.what,round:!1});for(let O of s.regions)for(let G of O.markers)(!h||!ee.has(G.id))&&x.push({id:G.id,label:G.label,what:G.what,round:!0});return x},[s.regions,ne,ee,h]),{principal:pe}=X(),[N,$]=(0,Te.useState)(null),V=t.draw!==void 0,p=t.place!==void 0,H=x=>{if(N===null)return;x.stopPropagation();let O=Zr(x);if(N.kind==="marker"){g.apply({name:t.place.act,args:{[t.place.id]:N.id,[t.place.at]:O}},{author:pe,intent:`Placed ${N.label} on the map`}),$(null);return}$({...N,corners:[...N.corners,O]})},z=()=>{N===null||N.kind!=="region"||N.corners.length<3||(g.apply({name:t.draw.act,args:{[t.draw.id]:N.id,[t.draw.outline]:N.corners}},{author:pe,intent:`Drew ${N.label} on the map \u2014 ${N.corners.length} corners`}),$(null))},j=N===null?s.regions.length===0?"Nothing drawn yet. Choose an area below, then click its corners here.":null:N.kind==="marker"?`Click where ${N.label} stands.`:N.corners.length<3?`Click the corners of ${N.label} \u2014 ${3-N.corners.length} more to make an area.`:`${N.corners.length} corners. Keep clicking, or press Done.`;return T?(0,L.jsxs)(te,{title:r??"The plan",subtitle:`${c} drawn \xB7 ${S} standing in them`,...s.undrawn.length>0?{meta:`${s.undrawn.length} ${t.undrawnLabel??"not drawn yet"}`}:{},selected:i,fit:!0,children:[(0,L.jsx)("div",{style:{position:"relative",width:"100%",aspectRatio:`${v.w} / ${v.h}`,overflow:"hidden"},children:(0,L.jsxs)("svg",{ref:B,viewBox:`${v.x} ${v.y} ${v.w} ${v.h}`,width:"100%",height:"100%",preserveAspectRatio:"xMidYMid meet",role:N!==null?"application":h?"group":"img","aria-label":N===null?`${r??"The plan"}: ${c} drawn, ${S} standing in them`:j??"Drawing",onClick:H,"data-testid":"plan-canvas",style:{display:"block",position:"absolute",inset:0,cursor:N===null?void 0:"crosshair",border:"1px dashed color-mix(in oklab, var(--graview-edge) 80%, transparent)",borderRadius:".4rem",backgroundImage:"linear-gradient(color-mix(in oklab, var(--graview-edge) 35%, transparent) 1px, transparent 1px),linear-gradient(90deg, color-mix(in oklab, var(--graview-edge) 35%, transparent) 1px, transparent 1px)",backgroundSize:"10% 10%"},children:[(0,L.jsx)("text",{x:v.x+v.w-A*.028,y:v.y+A*.034,fontSize:A*.022,textAnchor:"middle",fill:"var(--graview-ink)",opacity:.55,children:"N"}),j!==null&&s.regions.length===0?(0,L.jsx)("text",{x:v.x+v.w/2,y:v.y+v.h/2,textAnchor:"middle",dominantBaseline:"middle",fontSize:A*.026,fill:"var(--graview-ink)",opacity:.7,style:{pointerEvents:"none",fontFamily:"var(--graview-font-body)"},children:j}):null,N!==null&&N.kind==="region"&&N.corners.length>0?(0,L.jsxs)("g",{style:{pointerEvents:"none"},children:[(0,L.jsx)("polyline",{points:N.corners.map(x=>`${x.x*R},${x.y*u}`).join(" "),fill:N.corners.length>=3?"color-mix(in oklab, var(--graview-accent) 22%, transparent)":"none",stroke:"var(--graview-accent)",strokeWidth:3,strokeDasharray:"8 6"}),N.corners.map((x,O)=>(0,L.jsx)("circle",{cx:x.x*R,cy:x.y*u,r:A*.008,fill:"var(--graview-accent)"},O))]}):null,s.regions.map(x=>{let O=wn(x.id,l,m),G=E&&O===void 0?.34:1,ie=x.outline.map(se=>`${se.x*R},${se.y*u}`).join(" ");return(0,L.jsx)("g",{"data-graview-pick":x.id,...O?{"data-graview-emphasis":O}:{},role:"button","aria-label":`${x.label}${x.what?`, ${x.what}`:""}, ${x.markers.length} standing in it`,style:{opacity:G,cursor:"pointer"},children:(0,L.jsx)("polygon",{points:ie,fill:Un(x.what,O,t.hues),stroke:mr(x.what,O,t.hues),strokeWidth:O==="flagged"?5:2.5,strokeLinejoin:"round"})},x.id)}),s.regions.flatMap(x=>x.markers.map(O=>{let G=wn(O.id,l,m),ie=E&&G===void 0?.34:1;return(0,L.jsxs)("g",{...h?{"data-graview-pick":O.id,role:"button","aria-label":`${O.label}${O.what?`, ${O.what}`:""}, in ${x.label}`}:{"aria-hidden":!0},...G?{"data-graview-emphasis":G}:{},style:{opacity:ie,cursor:h?"pointer":"default"},children:[h?(0,L.jsx)("circle",{cx:O.at.x*R,cy:O.at.y*u,r:A*ur,fill:"transparent"}):null,(0,L.jsx)("circle",{cx:O.at.x*R,cy:O.at.y*u,r:A*.011,fill:G==="flagged"?"var(--graview-warn)":`hsl(${vn(O.what,t.hues)} 55% 45%)`,stroke:"var(--graview-panel)",strokeWidth:A*.004}),ee.has(O.id)?(0,L.jsx)("text",{x:ee.get(O.id).at.x,y:ee.get(O.id).at.y,textAnchor:ee.get(O.id).anchor,dominantBaseline:"middle",fontSize:ee.get(O.id).size,fill:"var(--graview-ink)",stroke:"var(--graview-panel)",strokeWidth:Math.max(2,ee.get(O.id).size*.3),paintOrder:"stroke","data-testid":`marker-label-${O.id}`,style:{pointerEvents:"none",fontFamily:"var(--graview-font-body)"},children:O.label}):null]},O.id)})),s.regions.map(x=>{let O=ne.get(x.id),G=ae.get(x.id);if(!O||G===void 0)return null;let ie=wn(x.id,l,m);return(0,L.jsx)("text",{x:G.x,y:G.y-(O.lines.length-1)*O.fontSize*1.15/2,textAnchor:"start",dominantBaseline:"middle",fontSize:O.fontSize,fill:"var(--graview-ink)",opacity:E&&ie===void 0?.34:1,stroke:"var(--graview-panel)",strokeWidth:Math.max(2,O.fontSize*.26),paintOrder:"stroke","data-testid":`region-label-${x.id}`,style:{pointerEvents:"none",fontFamily:"var(--graview-font-display)"},children:O.lines.map((se,ue)=>(0,L.jsx)("tspan",{x:G.x,dy:ue===0?0:O.fontSize*1.15,children:se},se+String(ue)))},`label-${x.id}`)})]})}),ge.length>0?(0,L.jsx)("ul",{"data-testid":"map-key",style:{margin:".5rem 0 0",padding:0,listStyle:"none",display:"flex",flexWrap:"wrap",gap:".2rem .75rem",fontSize:"0.875rem"},children:ge.map(x=>(0,L.jsxs)("li",{"data-graview-pick":x.id,style:{display:"flex",alignItems:"center",gap:".35rem",minWidth:0,minHeight:"max(1.5rem, 24px)",padding:"0 .15rem",cursor:"pointer"},children:[(0,L.jsx)("span",{"aria-hidden":"true",style:{width:x.round?".55rem":".7rem",height:x.round?".55rem":".7rem",flex:"0 0 auto",borderRadius:x.round?"50%":".15rem",background:x.round?`hsl(${vn(x.what,t.hues)} 55% 45%)`:Un(x.what,void 0,t.hues),border:x.round?void 0:`1px solid ${mr(x.what,void 0,t.hues)}`}}),(0,L.jsx)("span",{style:{minWidth:0,overflowWrap:"anywhere"},children:x.label})]},x.id))}):null,N!==null?(0,L.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:".5rem",marginTop:".5rem",alignItems:"center"},children:[s.regions.length>0&&j!==null?(0,L.jsx)("span",{style:{fontSize:"0.9375rem",opacity:.8,flexBasis:"100%"},"aria-live":"polite",children:j}):null,N.kind==="region"?(0,L.jsxs)("button",{type:"button",onClick:z,disabled:N.corners.length<3,"data-testid":"draw-done",style:{...Ze,background:"var(--graview-accent)",color:"var(--graview-accent-ink)",borderColor:"transparent"},children:["Done \u2014 keep ",N.label]}):null,N.kind==="region"&&N.corners.length>0?(0,L.jsx)("button",{type:"button",onClick:()=>$({...N,corners:N.corners.slice(0,-1)}),style:Ze,children:"Undo a corner"}):null,(0,L.jsx)("button",{type:"button",onClick:()=>$(null),style:Ze,"data-testid":"draw-cancel",children:"Stop"})]}):(0,L.jsxs)(L.Fragment,{children:[V&&s.undrawn.length>0?(0,L.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:".4rem",marginTop:".5rem",alignItems:"center"},children:[(0,L.jsxs)("span",{style:{fontSize:"0.875rem",opacity:.75},children:[t.undrawnLabel??"Not drawn yet",":"]}),s.undrawn.map(x=>(0,L.jsxs)("button",{type:"button",style:Ze,onClick:()=>$({kind:"region",id:x.id,label:x.label,corners:[]}),"data-testid":`draw-${x.id}`,children:["Draw ",x.label]},x.id))]}):null,p&&s.strays.length>0?(0,L.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:".4rem",marginTop:".5rem",alignItems:"center"},children:[(0,L.jsxs)("span",{style:{fontSize:"0.875rem",opacity:.75},children:[t.strayLabel??"Not placed",":"]}),s.strays.map(x=>(0,L.jsxs)("button",{type:"button",style:Ze,onClick:()=>$({kind:"marker",id:x.id,label:x.label}),"data-testid":`place-${x.id}`,children:["Place ",x.label]},x.id))]}):null,t.help!==void 0&&(s.undrawn.length>0||s.strays.length>0)?(0,L.jsx)("p",{style:{margin:".5rem 0 0",fontSize:"0.875rem"},children:(0,L.jsx)("a",{href:t.help.href,"data-testid":"map-help",children:t.help.label})}):null,!V&&(s.undrawn.length>0||s.strays.length>0)?(0,L.jsxs)("p",{style:{margin:".5rem 0 0",fontSize:"0.875rem",opacity:.75},children:[s.undrawn.map(x=>x.label).join(", "),s.undrawn.length>0?` \u2014 ${t.undrawnLabel??"not drawn yet"}. `:"",s.strays.map(x=>x.label).join(", "),s.strays.length>0?` \u2014 ${t.strayLabel??"not placed"}.`:""]}):null]})]}):(0,L.jsx)(te,{title:r??"The plan",subtitle:`${c} drawn \xB7 ${S} standing in them`,selected:i,children:(0,L.jsx)(gr,{map:s,options:t,...l?{implicated:l}:{},...m?{flagged:m}:{}})})}var hr=_(J(),1);function fr(e){function t(n){let{store:r}=X();return(0,hr.jsx)(pr,{schema:r.schema,...n,options:e})}return{name:"plan",requiredRoles:[...cr],options:e,View:t,build(n,r,a){return yn(n,r,e,a)}}}var re=_(J(),1);function ea(e,t,n){let r=t.flatMap(i=>(i.subject&&i.subject.kinds!=="*"?i.subject.kinds:[null]).map(m=>({name:i.name,title:i.title??i.name,kind:m}))),a=[];for(let i of n){let l={kind:"human",id:"themselves",roles:[i]};for(let m of r){let g=m.kind??void 0,y=On(e,l,m.name,g).ok,d=!y&&On(e,l,m.name,g,void 0,"themselves").ok;a.push({role:i,act:m.name,kind:m.kind,may:y?"yes":d?"self":"no"})}}return{roles:n,acts:r,cells:a}}function na({label:e,fidelity:t,mode:n}){let{store:r}=X(),a=r.policy,i=a?.roles??[],l=r.allMutations().filter(f=>!f.derived).map(f=>({name:f.name,...f.title?{title:f.title}:{},...f.subject?{subject:f.subject}:{}})),m=ea(a,l,i),g=e??"Who may do what";if(!a||i.length===0)return(0,re.jsxs)("div",{"data-testid":"reach-lens",style:{padding:14,color:"var(--graview-ink-muted)",fontSize:"0.875rem"},children:[g,": this installation has no policy, so everyone may do everything."]});if(t==="glyph")return(0,re.jsx)(ye,{label:`${g} \xB7 ${i.length} ${i.length===1?"role":"roles"}`,hue:de("role")});let y=n==="fullscreen",d=f=>f==="yes"?"\u25CF":f==="self"?"\u25D0":"\xB7";return(0,re.jsxs)("div",{"data-testid":"reach-lens",style:{display:"grid",gap:10,padding:y?0:14,borderRadius:"var(--graview-radius, 12px)",background:y?"transparent":"var(--graview-panel)",border:y?"none":"1px solid var(--graview-edge)",color:"var(--graview-ink)",minWidth:0},children:[(0,re.jsxs)("div",{style:{display:"flex",alignItems:"baseline",gap:10},children:[(0,re.jsx)("span",{style:{fontFamily:"var(--graview-font-display)",fontSize:"1.125rem",fontWeight:600},children:g}),(0,re.jsx)("span",{style:{marginLeft:"auto",fontSize:"0.75rem",color:"var(--graview-ink-faint)"},children:"\u25CF may \xB7 \u25D0 on their own record \xB7 read from the policy"})]}),(0,re.jsx)("div",{"data-scroller":!0,style:{overflowX:"auto"},children:(0,re.jsxs)("table",{style:{borderCollapse:"collapse",fontSize:"0.875rem",minWidth:"100%"},children:[(0,re.jsx)("thead",{children:(0,re.jsxs)("tr",{children:[(0,re.jsx)("th",{scope:"col",style:{textAlign:"left",padding:"4px 10px 6px 0",fontWeight:500,color:"var(--graview-ink-faint)",fontSize:"0.75rem",letterSpacing:"0.12em",textTransform:"uppercase"},children:"Role"}),m.acts.map(f=>(0,re.jsxs)("th",{scope:"col",title:f.kind?`${f.title}, on ${rt(rn(r.schema.tryDefinition(f.kind),f.kind))}`:f.title,style:{textAlign:"left",padding:"4px 10px 6px",fontWeight:500,whiteSpace:"nowrap",color:"var(--graview-ink-muted)",fontSize:"0.8125rem"},children:[f.title,f.kind?(0,re.jsxs)("span",{style:{color:"var(--graview-ink-faint)"},children:[" \xB7 ",f.kind]}):null]},`${f.name}|${f.kind??""}`))]})}),(0,re.jsx)("tbody",{children:m.roles.map(f=>(0,re.jsxs)("tr",{children:[(0,re.jsx)("th",{scope:"row",style:{textAlign:"left",padding:"6px 10px 6px 0",fontWeight:600,whiteSpace:"nowrap",borderTop:"1px solid var(--graview-edge)"},children:f}),m.acts.map(k=>{let s=m.cells.find(c=>c.role===f&&c.act===k.name&&c.kind===k.kind);return(0,re.jsx)("td",{"data-graview-reach":s.may,title:`${f} ${s.may==="yes"?"may":s.may==="self"?"may, on their own record,":"may not"} ${k.title.toLowerCase()}`,style:{padding:"6px 10px",textAlign:"center",borderTop:"1px solid var(--graview-edge)",color:s.may==="no"?"var(--graview-ink-faint)":"var(--graview-accent)",fontSize:s.may==="no"?"0.875rem":"0.8125rem"},children:d(s.may)},`${k.name}|${k.kind??""}`)})]},f))})]})})]})}var yr={name:"reach",requiredRoles:[],View:na};var Se=_(De(),1);var Z=_(J(),1),vr=["start","end"];function ta(e,t,{pad:n=45,minimum:r=480}={}){if(e.length===0)return{start:0,end:t};let a=Math.min(...e.map(y=>y.start)),i=Math.max(...e.map(y=>y.end)),l=Math.max(0,a-n),m=Math.min(t,i+n),g=r-(m-l);return g>0&&(l=Math.max(0,l-g/2),m=Math.min(t,l+r)),{start:Math.floor(l),end:Math.ceil(m)}}function ra(e){let t=[...e].sort((i,l)=>i.start-l.start||i.end-l.end||i.id.localeCompare(l.id)),n=[],r=t.map(i=>{let l=n.findIndex(m=>m<=i.start);return l===-1?(l=n.length,n.push(i.end)):n[l]=i.end,{...i,lane:l,lanes:1}}),a=Math.max(1,n.length);return r.map(i=>({...i,lanes:a}))}var Kn=class extends Error{constructor(t,n){super(`The timeline lens needs ${n.join(" and ")} for "${t}". Add them to the lens bindings: { ${t}: { ${n.map(r=>`${r}: "<field name>"`).join(", ")} } }.`),this.name="TimelineBindingError"}};function br(e,t,n){let r=Be(t[e.kind],n?.tryDefinition(e.kind));if(!r)return null;let a=e,i=n?.tryDefinition(e.kind)?.fields.shape,l=vr.filter(d=>{let f=r[d];return f?i?!(f in i):!(f in a):!0});if(l.length>0)throw new Kn(e.kind,l);let m=Number(a[r.start]??Number.NaN),g=Number(a[r.end]??m);if(!Number.isFinite(m))return null;let y=[];if(r.columns){let d=a[r.columns];Array.isArray(d)&&y.push(...d.map(String))}if(r.column){let d=a[r.column];d!=null&&y.push(String(d))}return{id:e.id,kind:e.kind,label:he(n?.tryDefinition(e.kind),e),columnIds:y,start:m,end:Number.isFinite(g)?Math.max(g,m):m}}function aa(e,t){let n=Math.round(t),r=a=>`linear-gradient(hsl(${n} 55% var(--graview-tint-lightness) / ${a}), hsl(${n} 55% var(--graview-tint-lightness) / ${a})), var(--graview-panel)`;return e==="lit"?{border:"1px solid var(--graview-accent)",background:r("calc(var(--graview-tint-alpha) * 1.15)"),color:"var(--graview-ink)",boxShadow:"0 0 16px -4px var(--graview-accent)"}:e==="dimmed"?{border:"1px solid var(--graview-edge)",background:r("calc(var(--graview-tint-alpha) * 0.25)"),color:"var(--graview-ink-muted)"}:{border:`1px solid hsl(${n} 50% var(--graview-tint-lightness) / 0.42)`,background:r("var(--graview-tint-alpha)"),color:"var(--graview-ink)"}}var ia=.045,en=52,xr=4,oa=44,sa=240;function la({nodes:e,label:t,fidelity:n,mode:r,options:a,schema:i,selectedIds:l=[],implicated:m=[],flagged:g=[]}){let y=new Set([...m,...l]),d=w=>y.size===0?"plain":y.has(w)?"lit":"dimmed",f=new Set(g),k=(e??[]).map(w=>br(w,a.bindings,i)).filter(w=>w!==null),s=a.hueOf??(w=>de(w.kind));if(n==="glyph")return(0,Z.jsx)(ye,{label:`${t??"Timeline"} \xB7 ${k.length}`,hue:de("timeline")});if(n==="summary")return(0,Z.jsx)(te,{title:t??"Timeline",meta:`${k.length} items`,tone:"muted",children:(0,Z.jsx)(Me,{max:a.columns.length,items:a.columns.map(w=>({id:w.id,label:`${w.label} ${k.filter(v=>v.columnIds.includes(w.id)).length}`,hue:de(w.id)}))})});let c=a.format??String,S=ta(k,a.extent,{...a.minWindow===void 0?{}:{minimum:a.minWindow}}),o=S.end-S.start,b=w=>(w-S.start)/o*100,C=a.tick??Math.max(60,Math.round(o/8/60)*60),R=[];for(let w=Math.ceil(S.start/C)*C;w<=S.end;w+=C)R.push(w);let M=r==="fullscreen";return(0,Z.jsx)(te,{title:t??"Timeline",meta:`${c(S.start)} \u2013 ${c(S.end)}`,style:{gap:12,...M?{flex:"1 1 auto",minHeight:0,height:"100%"}:{}},children:(0,Z.jsxs)("div",{style:{display:"flex",flexDirection:"column",height:"100%",minHeight:0},children:[(0,Z.jsx)(ga,{columns:a.columns}),(0,Z.jsxs)("div",{"data-graview-timeline-grid":"",style:{position:"relative",flex:1,minHeight:Math.max(sa,Math.ceil(o/C)*oa)},children:[R.map((w,v)=>(0,Z.jsx)("div",{style:{position:"absolute",left:en-8,right:0,top:v===R.length-1?"calc(100% - 1px)":`${b(w)}%`,height:1,background:"var(--graview-edge)"},children:(0,Z.jsx)("span",{style:{position:"absolute",left:-(en-8),...v===R.length-1?{bottom:2}:{top:-7},width:en-16,textAlign:"right",fontSize:"0.75rem",letterSpacing:"0.06em",color:"var(--graview-ink-faint)"},children:c(w)})},w)),(0,Z.jsx)("div",{style:{position:"absolute",inset:0,left:en,display:"flex",gap:xr},children:a.columns.map(w=>(0,Z.jsx)(ua,{spans:k.filter(v=>v.columnIds.includes(w.id)),window:S,format:c,hue:s,emphasisOf:d,brokenIds:f},w.id))})]})]})})}function da(){let e=(0,Se.useRef)(null),[t,n]=(0,Se.useState)(new Set);return(0,Se.useLayoutEffect)(()=>{let r=e.current;if(!r)return;let a=[...r.querySelectorAll("[data-graview-span-name]")].filter(i=>i.scrollWidth>i.clientWidth+.5).map(i=>i.getAttribute("data-graview-span-name")).filter(i=>!t.has(i));a.length>0&&n(new Set([...t,...a]))}),(0,Se.useLayoutEffect)(()=>{let r=e.current;if(!r||typeof ResizeObserver>"u")return;let a=Math.round(r.clientWidth),i=new ResizeObserver(()=>{let l=Math.round(r.clientWidth);l!==a&&(a=l,n(new Set))});return i.observe(r),()=>i.disconnect()},[]),{column:e,oneLine:t}}var ca=(e,t)=>t===0?e:e.slice(0,t),wr=[0,3,1];function ga({columns:e}){let t=(0,Se.useRef)(null),[n,r]=(0,Se.useState)(0);(0,Se.useLayoutEffect)(()=>{let i=t.current;if(!i)return;[...i.children].some(m=>m.scrollWidth>m.clientWidth+.5)&&n<wr.length-1&&r(n+1)}),(0,Se.useLayoutEffect)(()=>{let i=t.current;if(!i||typeof ResizeObserver>"u")return;let l=i.clientWidth,m=new ResizeObserver(()=>{i.clientWidth!==l&&(l=i.clientWidth,r(0))});return m.observe(i),()=>m.disconnect()},[]);let a=wr[n];return(0,Z.jsx)("div",{ref:t,style:{display:"flex",gap:xr,paddingLeft:en,paddingBottom:10},children:e.map(i=>{let l=ca(i.label,a);return(0,Z.jsx)("div",{"data-graview-day-head":i.id,title:l===i.label?void 0:i.label,...l===i.label?{}:{"aria-label":i.label},style:{flex:1,minWidth:0,overflow:"hidden",whiteSpace:"nowrap",fontSize:"0.75rem",letterSpacing:a===1?0:"0.18em",textTransform:"uppercase",textAlign:"center",color:"var(--graview-ink-muted)"},children:l},i.id)})})}function ua({spans:e,window:t,format:n,hue:r,emphasisOf:a,brokenIds:i}){let l=t.end-t.start,m=s=>(s-t.start)/l*100,g=s=>(s.end-s.start)/l<ia,y=ra(e.filter(s=>!g(s))),d=[...e.filter(g)].sort((s,c)=>s.start-c.start),f=Math.max(1,...y.map(s=>s.lanes)),k=da();return(0,Z.jsxs)("div",{ref:k.column,"data-graview-day-column":"",style:{position:"relative",flex:1,minWidth:0},children:[y.map(s=>{let c=100/f,S=Math.max(1.6,m(s.end)-m(s.start));return(0,Z.jsx)("div",{"data-graview-span":s.id,"data-graview-pick":s.id,"data-graview-emphasis":a(s.id),"data-graview-flagged":i.has(s.id)?"":void 0,title:`${s.label} \xB7 ${n(s.start)}\u2013${n(s.end)}`,style:{position:"absolute",top:`${m(s.start)}%`,height:`${S}%`,left:`${s.lane*c}%`,width:`${c}%`,padding:"0 2px 2px 0",boxSizing:"border-box"},children:(0,Z.jsx)("div",{"data-graview-span-name":s.id,style:{height:"100%",minHeight:15,borderRadius:6,padding:"3px 6px",fontSize:"0.75rem",lineHeight:1.25,overflow:"hidden",overflowWrap:"normal",wordBreak:"normal",...k.oneLine.has(s.id)?{display:"block",whiteSpace:"nowrap",textOverflow:"ellipsis"}:{display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical"},...aa(a(s.id),r(s)),...i.has(s.id)?{borderLeft:"3px solid var(--graview-warn)",paddingLeft:4}:{}},children:S>=3.4?s.label:null})},s.id)}),d.map(s=>{let c=a(s.id);return(0,Z.jsxs)("div",{"data-graview-span":s.id,"data-graview-pick":s.id,"data-graview-emphasis":c,"data-graview-moment":"",title:`${s.label} \xB7 ${n(s.start)}`,style:{position:"absolute",top:`${m(s.start)}%`,right:0,maxWidth:"100%",boxSizing:"border-box",transform:"translateY(-50%)",display:"flex",alignItems:"center",justifyContent:"flex-end",gap:5,minHeight:24,padding:"0 4px 0 8px",borderRadius:999,background:"linear-gradient(90deg, transparent, var(--graview-ground) 35%)"},children:[(0,Z.jsx)("span",{style:{fontSize:"0.6875rem",letterSpacing:"0.04em",whiteSpace:"nowrap",color:c==="lit"?"var(--graview-accent)":"var(--graview-ink-faint)"},children:n(s.start)}),(0,Z.jsx)("span",{style:{fontSize:"0.75rem",minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",color:c==="dimmed"?"var(--graview-ink-faint)":"var(--graview-ink)"},children:s.label}),(0,Z.jsx)("span",{style:{width:7,height:7,borderRadius:999,flex:"0 0 auto",background:i.has(s.id)?"var(--graview-warn)":c==="dimmed"?"var(--graview-edge)":`hsl(${Math.round(r(s))} 60% var(--graview-tint-lightness))`,boxShadow:i.has(s.id)?"0 0 0 3px var(--graview-warn)":c==="lit"?"0 0 0 3px var(--graview-accent-dim)":c==="dimmed"?void 0:`0 0 8px hsl(${Math.round(r(s))} 60% var(--graview-tint-lightness) / 0.45)`}})]},s.id)})]})}function Sr(e){function t(n){let{store:r}=X(),a=Object.keys(e.bindings),{nodes:i,bar:l}=Oe(n,{...e.arranging!==void 0?{allow:e.arranging}:{},lensAllows:{group:!1},...e.arrangedBy?{arrangedBy:e.arrangedBy}:{},...a[0]?{kind:(n.nodes??[]).find(g=>a.includes(String(g.kind)))?.kind??a[0]}:{}}),m=(0,Z.jsx)(la,{schema:r.schema,...n,nodes:i,options:e});return Pe(n,r.schema,l?(0,Z.jsxs)("div",{style:{display:"grid",gap:6,height:"100%",minHeight:0,gridTemplateRows:"auto 1fr"},children:[l,m]}):m)}return{name:"timeline",requiredRoles:[...vr],bindings:e.bindings,options:e,View:t,place(n,r){return n.map(a=>br(a,e.bindings,r)).filter(a=>a!==null)}}}var qe=_(J(),1),kr=new WeakMap;function ma(e){return e===1440?t=>Ke(Math.floor(t/60)*60+Math.round(t%60)):e===24?t=>Ke(Math.floor(t)*60):t=>String(t)}function pa(e){let t=e.options;switch(e.lens){case"timeline":{let n=typeof t.extent=="number"?t.extent:1440;return Sr({...t,extent:n,format:ma(n)}).View}case"calendar":return er({...t,...typeof t.today=="string"?{today:t.today}:{}}).View;case"coverage":return lr(t).View;case"board":return Bt(t).View;case"plan":return fr(t).View;case"reach":return yr.View;case"columns":return nr(t).View;case"blocks":return fa(pt(Array.isArray(t.blocks)?t.blocks:[]),e.as)}}function fa(e,t){return n=>{let r=(0,qe.jsx)(Nt,{blocks:e,slot:"place",view:t,heading:n.mode==="fullscreen"?2:3});return n.fidelity==="glyph"?(0,qe.jsx)("span",{className:"graview-spec-title",children:n.label}):n.mode==="fullscreen"?(0,qe.jsx)("div",{style:{padding:"14px 16px"},children:r}):(0,qe.jsx)(te,{title:n.label??"",children:r})}}function ho(e){let t=kr.get(e);if(!t){let n=pa(e),r=a=>(0,qe.jsx)(n,{...a,label:e.title});kr.set(e,t=r)}return t}export{ma as a,ho as b};
@@ -1,4 +1,4 @@
1
- import{a as he,b as xe,c as be,d as ie,e as I}from"./chunk.XDYAG276.js";import{c as A,e as re}from"./chunk.MWGGV7DE.js";import{a as te}from"./chunk.6UGEYZAC.js";import{F as U,Q as Z,Y as ee,_ as ne}from"./chunk.6QWV5MVH.js";import{N as j,X as J,cc as Q}from"./chunk.MNP4JI33.js";import{b as C}from"./chunk.AJZBJBMO.js";var w=C(U(),1);var P=C(U(),1),ke=(e,n)=>`graview:last-visit:${n??"anyone"}:${e.join(",")}`;function Pe(e,n,r){let t=new Set;for(let i of e)if(!(i.author.id!==void 0&&i.author.id===r)&&Date.parse(i.at)>n)for(let o of i.writes)t.add(o);return t}function oe(e,n,r){let t=ke(n,r?.id),[i]=(0,P.useState)(()=>{try{let o=globalThis.localStorage?.getItem(t);return o?Number(o):null}catch{return null}});return(0,P.useEffect)(()=>{let o=()=>{if(document.visibilityState==="hidden")try{globalThis.localStorage?.setItem(t,String(Date.now()))}catch{}};return document.addEventListener("visibilitychange",o),window.addEventListener("pagehide",o),()=>{document.removeEventListener("visibilitychange",o),window.removeEventListener("pagehide",o)}},[t]),(0,P.useMemo)(()=>i===null?new Set:Pe(e,i,r?.id),[e,i,r?.id])}function ae(e,n,r){let t=new Set;if(r===void 0)return t;t.add(r);for(let i of[...e.out(r),...e.in(r)])t.add(i.id);for(let i of n)if(i.author.id===r)for(let o of i.primitives)o.op==="add-node"&&t.add(o.node.id);return t}var g=C(Z(),1);function Se(e,n,r={x:0,y:0}){let t=(i,o)=>{let c=A(i,o,n.cell,n.tilt);return{x:n.originX+r.x+c.x,y:n.originY+r.y+c.y}};return[t(e.col,e.row),t(e.col+e.side,e.row),t(e.col+e.side,e.row+e.side),t(e.col,e.row+e.side)]}var B=e=>e.map(n=>`${n.x.toFixed(1)},${n.y.toFixed(1)}`).join(" ");function Ie({frame:e,width:n,height:r,pan:t,pinned:i,close:o,today:c,swallowed:y,chosen:p=[],onFocus:f}){let{selection:u,store:d,scheme:S,principal:x}=ee(),b=ne(),a=(0,w.useMemo)(()=>d.log.all(),[d,b]),m=oe(a,d.schema.kinds,x),$=(0,w.useMemo)(()=>ae(d.graph,a,x?.id),[d,a,x?.id]),se=te(),E=e.city,D=e.nodes.filter(l=>l.plot!==void 0&&Math.round(l.plane)===2),R=E?.cell??0,F=E?.tilt??.5,K=(0,w.useRef)(f);K.current=f;let le=(0,w.useCallback)(l=>!K.current||y?.current?!1:(K.current(l),!0),[y]),X=(0,w.useRef)(new Map),M=new Map;for(let l of D){let O=l.aggregate?.memberIds??[],v=re(d.schema,l.kind),z=s=>v?d.graph.getNode(s)?.[v.field]:void 0,L=O.filter(s=>p.includes(s)),G=`${R}|${F}|${l.plot.col},${l.plot.row},${l.plot.side}|${L.join(",")}|${O.map(s=>`${s}=${String(z(s))}`).join(",")}`,T=X.current.get(l.id);if(T&&T.key===G){M.set(l.id,T);continue}let V={cell:R,originX:0,originY:0,tilt:F},q={x:0,y:0},we=d.schema.tryDefinition(l.kind),ye=s=>{let h=d.graph.getNode(s);return h?J(we,h):s},k=v?v.values.map(()=>[]):[[]],N=v?[...v.tiers]:["waiting"];for(let s of L.length>0?[...L,...O.filter(h=>!L.includes(h))]:O){let h=v?v.values.indexOf(z(s)):0;h>=0?k[h].push(s):(k.length===N.length&&(k.push([]),N.push("waiting")),k[k.length-1].push(s))}let{blocks:pe,rests:ve}=I(l.plot,k,N.map(s=>ie[s])),me=Se(l.plot,V,q),H=v?Le(d.schema,l.kind):void 0;M.set(l.id,{key:G,tile:B(me),rests:ve.map(s=>({count:s.count,at:A(s.col,s.row,R,F)})),buildings:pe.map(s=>{let W=(H?d.graph.getNode(s.id):void 0)?.[H];return{id:s.id,tier:N[s.lane],overdue:typeof W=="string"&&N[s.lane]!=="done"&&W.slice(0,10)<(c??new Date().toISOString().slice(0,10)),name:ye(s.id),width:s.footprint*R,...Ce(s,V,q)}})})}if(X.current=M,!E)return null;let de={position:"absolute",left:0,top:0,pointerEvents:"none",overflow:"visible"},ge=u.join(`
1
+ import{a as he,b as xe,c as be,d as ie,e as I}from"./chunk.XDYAG276.js";import{c as A,e as re}from"./chunk.DUUARGPE.js";import{a as te}from"./chunk.7MTX33WD.js";import{F as U,Q as Z,Y as ee,_ as ne}from"./chunk.ZTD2CNC3.js";import{N as j,X as J,dc as Q}from"./chunk.X7W27IRI.js";import{b as C}from"./chunk.AJZBJBMO.js";var w=C(U(),1);var P=C(U(),1),ke=(e,n)=>`graview:last-visit:${n??"anyone"}:${e.join(",")}`;function Pe(e,n,r){let t=new Set;for(let i of e)if(!(i.author.id!==void 0&&i.author.id===r)&&Date.parse(i.at)>n)for(let o of i.writes)t.add(o);return t}function oe(e,n,r){let t=ke(n,r?.id),[i]=(0,P.useState)(()=>{try{let o=globalThis.localStorage?.getItem(t);return o?Number(o):null}catch{return null}});return(0,P.useEffect)(()=>{let o=()=>{if(document.visibilityState==="hidden")try{globalThis.localStorage?.setItem(t,String(Date.now()))}catch{}};return document.addEventListener("visibilitychange",o),window.addEventListener("pagehide",o),()=>{document.removeEventListener("visibilitychange",o),window.removeEventListener("pagehide",o)}},[t]),(0,P.useMemo)(()=>i===null?new Set:Pe(e,i,r?.id),[e,i,r?.id])}function ae(e,n,r){let t=new Set;if(r===void 0)return t;t.add(r);for(let i of[...e.out(r),...e.in(r)])t.add(i.id);for(let i of n)if(i.author.id===r)for(let o of i.primitives)o.op==="add-node"&&t.add(o.node.id);return t}var g=C(Z(),1);function Se(e,n,r={x:0,y:0}){let t=(i,o)=>{let c=A(i,o,n.cell,n.tilt);return{x:n.originX+r.x+c.x,y:n.originY+r.y+c.y}};return[t(e.col,e.row),t(e.col+e.side,e.row),t(e.col+e.side,e.row+e.side),t(e.col,e.row+e.side)]}var B=e=>e.map(n=>`${n.x.toFixed(1)},${n.y.toFixed(1)}`).join(" ");function Ie({frame:e,width:n,height:r,pan:t,pinned:i,close:o,today:c,swallowed:y,chosen:p=[],onFocus:f}){let{selection:u,store:d,scheme:S,principal:x}=ee(),b=ne(),a=(0,w.useMemo)(()=>d.log.all(),[d,b]),m=oe(a,d.schema.kinds,x),$=(0,w.useMemo)(()=>ae(d.graph,a,x?.id),[d,a,x?.id]),se=te(),E=e.city,D=e.nodes.filter(l=>l.plot!==void 0&&Math.round(l.plane)===2),R=E?.cell??0,F=E?.tilt??.5,K=(0,w.useRef)(f);K.current=f;let le=(0,w.useCallback)(l=>!K.current||y?.current?!1:(K.current(l),!0),[y]),X=(0,w.useRef)(new Map),M=new Map;for(let l of D){let O=l.aggregate?.memberIds??[],v=re(d.schema,l.kind),z=s=>v?d.graph.getNode(s)?.[v.field]:void 0,L=O.filter(s=>p.includes(s)),G=`${R}|${F}|${l.plot.col},${l.plot.row},${l.plot.side}|${L.join(",")}|${O.map(s=>`${s}=${String(z(s))}`).join(",")}`,T=X.current.get(l.id);if(T&&T.key===G){M.set(l.id,T);continue}let V={cell:R,originX:0,originY:0,tilt:F},q={x:0,y:0},we=d.schema.tryDefinition(l.kind),ye=s=>{let h=d.graph.getNode(s);return h?J(we,h):s},k=v?v.values.map(()=>[]):[[]],N=v?[...v.tiers]:["waiting"];for(let s of L.length>0?[...L,...O.filter(h=>!L.includes(h))]:O){let h=v?v.values.indexOf(z(s)):0;h>=0?k[h].push(s):(k.length===N.length&&(k.push([]),N.push("waiting")),k[k.length-1].push(s))}let{blocks:pe,rests:ve}=I(l.plot,k,N.map(s=>ie[s])),me=Se(l.plot,V,q),H=v?Le(d.schema,l.kind):void 0;M.set(l.id,{key:G,tile:B(me),rests:ve.map(s=>({count:s.count,at:A(s.col,s.row,R,F)})),buildings:pe.map(s=>{let W=(H?d.graph.getNode(s.id):void 0)?.[H];return{id:s.id,tier:N[s.lane],overdue:typeof W=="string"&&N[s.lane]!=="done"&&W.slice(0,10)<(c??new Date().toISOString().slice(0,10)),name:ye(s.id),width:s.footprint*R,...Ce(s,V,q)}})})}if(X.current=M,!E)return null;let de={position:"absolute",left:0,top:0,pointerEvents:"none",overflow:"visible"},ge=u.join(`
2
2
  `),ce=se.join(`
3
3
  `),ue=m?[...m].join(`
4
4
  `):"",fe=$?[...$].join(`