graview 0.1.25 → 0.1.26

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 (109) hide show
  1. package/dist/preview/chunk.24X6LFD3.js +6 -0
  2. package/dist/preview/{chunk.JIXW4WIO.js → chunk.2GFB5FOK.js} +1 -1
  3. package/dist/preview/chunk.3RT463XY.js +1 -0
  4. package/dist/preview/{chunk.UOYH2DFX.js → chunk.4INXWGIT.js} +2 -2
  5. package/dist/preview/{chunk.B57EIGTS.js → chunk.4MAYBFPU.js} +1 -1
  6. package/dist/preview/chunk.4YY54TMR.js +1 -0
  7. package/dist/preview/chunk.564EIRAT.js +1 -0
  8. package/dist/preview/chunk.5CXMUC6R.js +16 -0
  9. package/dist/preview/{chunk.ORJ3T4IW.js → chunk.6GJF3F7L.js} +1 -1
  10. package/dist/preview/chunk.6LJ66MB7.js +1 -0
  11. package/dist/preview/chunk.6MZBFEXW.js +1 -0
  12. package/dist/preview/chunk.6R4EI47C.js +1 -0
  13. package/dist/preview/chunk.7OOKA2DK.js +1 -0
  14. package/dist/preview/chunk.7ZJPJARU.js +1 -0
  15. package/dist/preview/{chunk.S24R4MRK.js → chunk.AAVCTGAE.js} +3 -3
  16. package/dist/preview/chunk.AKWBAWQF.js +1 -0
  17. package/dist/preview/chunk.BK2MJOUN.js +1 -0
  18. package/dist/preview/chunk.CL7GGNEK.js +1 -0
  19. package/dist/preview/{chunk.PY42PBMB.js → chunk.D3XF643V.js} +1 -1
  20. package/dist/preview/{chunk.DEZEXD24.js → chunk.DRIWJRQW.js} +1 -1
  21. package/dist/preview/chunk.ECG7RM6L.js +1 -0
  22. package/dist/preview/chunk.ECRZZ3U4.js +1 -0
  23. package/dist/preview/chunk.HFFEOCYY.js +107 -0
  24. package/dist/preview/chunk.I5U42VDK.js +3 -0
  25. package/dist/preview/chunk.IQLDOIWD.js +1 -0
  26. package/dist/preview/{chunk.DSZ3I557.js → chunk.JIWB6VGT.js} +1 -1
  27. package/dist/preview/{chunk.YZZGD5OY.js → chunk.KSEKVHJJ.js} +1 -1
  28. package/dist/preview/chunk.KXWRS6LY.js +1 -0
  29. package/dist/preview/chunk.LCFCU3I3.js +1 -0
  30. package/dist/preview/chunk.LEVR7WLB.js +1 -0
  31. package/dist/preview/{chunk.HQX5FGYT.js → chunk.LHIYFAN5.js} +2 -2
  32. package/dist/preview/chunk.LLUZMOBZ.js +1 -0
  33. package/dist/preview/{chunk.6OBXKKB5.js → chunk.LUUT2ZWF.js} +3 -3
  34. package/dist/preview/chunk.MLQQR57X.js +1 -0
  35. package/dist/preview/chunk.NIEQZOHX.js +1 -0
  36. package/dist/preview/{chunk.JCZH55RX.js → chunk.NLFLFIDS.js} +1 -1
  37. package/dist/preview/{chunk.6DU4XN2F.js → chunk.NQP3DWME.js} +1 -1
  38. package/dist/preview/{chunk.6UL2JUEH.js → chunk.OBGG4SYF.js} +1 -1
  39. package/dist/preview/chunk.OBQ4DIFO.js +1 -0
  40. package/dist/preview/chunk.P7YN4Z3K.js +8 -0
  41. package/dist/preview/{chunk.SSOTDXRS.js → chunk.PKFL2AR4.js} +1 -1
  42. package/dist/preview/chunk.PQ2IIC27.js +1 -0
  43. package/dist/preview/chunk.QFJRXAU3.js +8 -0
  44. package/dist/preview/chunk.REODVRPZ.js +1 -0
  45. package/dist/preview/chunk.RH6VRP76.js +1 -0
  46. package/dist/preview/chunk.SVL6I37U.js +1 -0
  47. package/dist/preview/chunk.TAW67PZU.js +1 -0
  48. package/dist/preview/chunk.TUYKH4FG.js +1 -0
  49. package/dist/preview/chunk.UEEXBS2U.js +1 -0
  50. package/dist/preview/chunk.UUMXYMOX.js +19 -0
  51. package/dist/preview/chunk.VW7U4CT5.js +1 -0
  52. package/dist/preview/chunk.WWWZZAHE.js +1 -0
  53. package/dist/preview/chunk.XD4Q4FI2.js +1 -0
  54. package/dist/preview/chunk.XNYBOKLW.js +1 -0
  55. package/dist/preview/chunk.XOC5BRPU.js +1 -0
  56. package/dist/preview/chunk.XXNC2AFL.js +1 -0
  57. package/dist/preview/chunk.YIZ3DJO3.js +1 -0
  58. package/dist/preview/chunk.YOMW4MKD.js +1 -0
  59. package/dist/preview/chunk.YXQCEXZX.js +1 -0
  60. package/dist/preview/chunk.ZLPA5BAW.js +1 -0
  61. package/dist/preview/chunk.ZOWWWRYA.js +1 -0
  62. package/dist/preview/page.js +6 -6
  63. package/package.json +6 -6
  64. package/dist/preview/chunk.2AJMM7JG.js +0 -1
  65. package/dist/preview/chunk.2WFEFZAW.js +0 -1
  66. package/dist/preview/chunk.2YVXTTC2.js +0 -1
  67. package/dist/preview/chunk.6KJSFIO7.js +0 -1
  68. package/dist/preview/chunk.6WFN4C46.js +0 -107
  69. package/dist/preview/chunk.7BAUPTMY.js +0 -1
  70. package/dist/preview/chunk.A4SJ7EEY.js +0 -1
  71. package/dist/preview/chunk.ACKTGTOT.js +0 -1
  72. package/dist/preview/chunk.BJ2Y5F66.js +0 -1
  73. package/dist/preview/chunk.BYUQOV3O.js +0 -1
  74. package/dist/preview/chunk.C5N4RTPF.js +0 -1
  75. package/dist/preview/chunk.CFL2B2Z5.js +0 -1
  76. package/dist/preview/chunk.DJ72CUS7.js +0 -1
  77. package/dist/preview/chunk.EA4BZKPG.js +0 -1
  78. package/dist/preview/chunk.EKZWX6NG.js +0 -1
  79. package/dist/preview/chunk.F26676IW.js +0 -1
  80. package/dist/preview/chunk.F2KDFGHR.js +0 -1
  81. package/dist/preview/chunk.FWV4XAZA.js +0 -1
  82. package/dist/preview/chunk.G3BOZHKR.js +0 -1
  83. package/dist/preview/chunk.H4LHHT56.js +0 -8
  84. package/dist/preview/chunk.I5ELK6JF.js +0 -1
  85. package/dist/preview/chunk.I6T3FDQS.js +0 -1
  86. package/dist/preview/chunk.IB6PGEU7.js +0 -1
  87. package/dist/preview/chunk.JEMQBV6K.js +0 -1
  88. package/dist/preview/chunk.JW3E4SAC.js +0 -1
  89. package/dist/preview/chunk.KUTTVYOB.js +0 -16
  90. package/dist/preview/chunk.LHFEOEYY.js +0 -1
  91. package/dist/preview/chunk.MJ67MK4R.js +0 -1
  92. package/dist/preview/chunk.Q5WEOX3Q.js +0 -1
  93. package/dist/preview/chunk.QOYC424P.js +0 -3
  94. package/dist/preview/chunk.R6F3YMRK.js +0 -6
  95. package/dist/preview/chunk.RAE4M3KQ.js +0 -8
  96. package/dist/preview/chunk.RUFAVEXB.js +0 -1
  97. package/dist/preview/chunk.RVEMN5WU.js +0 -1
  98. package/dist/preview/chunk.S56LSUHV.js +0 -1
  99. package/dist/preview/chunk.T6KID3WO.js +0 -1
  100. package/dist/preview/chunk.TAOT74FR.js +0 -1
  101. package/dist/preview/chunk.TTODVIXW.js +0 -1
  102. package/dist/preview/chunk.U6BWYBPM.js +0 -19
  103. package/dist/preview/chunk.US4KIJSW.js +0 -1
  104. package/dist/preview/chunk.WX5CJ7PI.js +0 -1
  105. package/dist/preview/chunk.WXO3XUNW.js +0 -1
  106. package/dist/preview/chunk.ZJVIH6IF.js +0 -1
  107. package/dist/preview/chunk.ZRVDIVYY.js +0 -1
  108. package/dist/preview/chunk.ZV7ZFH2S.js +0 -1
  109. /package/dist/preview/{chunk.WWRWXFYR.js → chunk.WVUJXDXZ.js} +0 -0
@@ -0,0 +1,6 @@
1
+ import{a as k}from"./chunk.G4JJXA63.js";import{a as Z}from"./chunk.NIEQZOHX.js";import"./chunk.XOC5BRPU.js";import"./chunk.WVUJXDXZ.js";import{a as Y}from"./chunk.TAW67PZU.js";import"./chunk.YOMW4MKD.js";import"./chunk.DRIWJRQW.js";import{c as T}from"./chunk.KSEKVHJJ.js";import"./chunk.JIWB6VGT.js";import{$b as X,Ob as F,Pb as H,Qb as G,Rb as V,ma as J,na as U}from"./chunk.P7YN4Z3K.js";import"./chunk.AJZBJBMO.js";var E=n=>"failed"in n;function fn(n,e){let r=n.schema.kinds,t=n.policy?.sees;if(!t?.length||U(e))return{kinds:r};let s=J(e).roles??[],i=new Set(t.filter(o=>o.roles==="*"||s.some(a=>o.roles.includes(a))).flatMap(o=>o.kinds));return{kinds:r.filter(o=>i.has(o))}}function j(n,e){if(!e)return n;let r=new Set(e.kinds.filter(i=>n.tryDefinition(i)!==void 0));if(r.size===n.kinds.length)return n;let t=new Map,s=i=>{if(r.has(i)){if(!t.has(i)){let o=n.tryDefinition(i),a=Object.fromEntries(Object.entries(o?.edges??{}).flatMap(([l,d])=>{if(d.to==="*")return[[l,d]];let c=d.to.filter(u=>r.has(u));return c.length>0?[[l,{...d,to:c}]]:[]}));t.set(i,{...o,edges:a})}return t.get(i)}};return{...n,definitions:n.definitions.filter(i=>r.has(i.kind)),kinds:n.kinds.filter(i=>r.has(i)),tryDefinition:s,definition:i=>{let o=s(i);if(!o)throw new Error(`Unknown node kind "${i}"`);return o}}}var gn=n=>n.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),b=n=>gn(n).replace(/[-_]+/g," ").trim();function O(n){let e=[];for(let t of n.kinds){let s=n.tryDefinition(t);if(!s)continue;let i=s.display?.labels??{},o=Object.entries(s.fields?.shape??{}).filter(([d])=>d!=="id"&&d!=="kind").map(([d,c])=>{let u=Y(c);return{name:d,type:u?.type,...u?.options?{options:u.options}:{},words:(i[d]??b(d)).toLowerCase()}}),a=Object.entries(s.edges??{}).map(([d,c])=>({name:d,from:t,to:c.to==="*"?n.kinds.filter(u=>u!==t):c.to,words:b(d)})),l=(s.plural??`${b(t)}s`).toLowerCase();e.push({kind:t,plural:l,noun:(s.noun??b(t)).toLowerCase(),fields:o,roles:s.fieldRoles??{},edges:a})}let r=new Map(e.map(t=>[t.kind,t]));return{schema:n,kinds:e,info:t=>r.get(t)}}var $=(n,e)=>e===void 0?void 0:n.fields.find(r=>r.name===e),A=n=>n?.type==="date"||n?.type==="datetime",K=n=>n?.type==="number"||n?.type==="integer",rn=n=>` ${n.toLowerCase().replace(/[“”"’‘]/g,"'").replace(/[^\p{L}\p{N}' -]+/gu," ").replace(/\s+/g," ").trim()} `,v=(n,e)=>n.includes(` ${e} `),L=n=>n.endsWith("ies")?`${n.slice(0,-3)}y`:n.endsWith("ses")?n.slice(0,-2):n.endsWith("s")?n.slice(0,-1):n;function yn(n,e){let r=[];for(let t of e.kinds){let s=new Set([t.plural,t.noun,`${t.noun}s`,b(t.kind),`${b(t.kind)}s`]),i=-1;for(let o of s){let a=n.indexOf(` ${o} `);a>=0&&(i<0||a<i)&&(i=a)}i>=0&&r.push({info:t,at:i})}return r.sort((t,s)=>t.at-s.at).map(t=>t.info)}function I(n,e,r){let t=e.trim().toLowerCase();if(t.length===0)return;let s=n.fields.filter(i=>!r||r(i));return s.find(i=>i.words===t||b(i.name)===t||i.name.toLowerCase()===t)??s.find(i=>i.words===L(t)||b(i.name)===L(t))??s.find(i=>t.split(" ").some(o=>o.length>2&&(i.words.split(" ").includes(o)||i.words.split(" ").includes(L(o)))))}function sn(n,e,r){let t=e.trim().toLowerCase();if(t.length!==0)return n.edges.find(s=>s.words===t||s.name.toLowerCase()===t)??n.edges.find(s=>s.to.some(i=>{let o=r.info(i);return o!==void 0&&(o.noun===L(t)||o.plural===t||b(i)===L(t))}))??n.edges.find(s=>t.split(" ").some(i=>i.length>2&&s.words.split(" ").includes(i)))}function W(n){return/ (?:grouped |group |split |sorted |organi[sz]ed )?by ([\p{L}\p{N}' -]+?)(?= (?:and|with|for|in|on|only|where|from|this|that|as|sorted|grouped) |\s*$)/u.exec(n)?.[1]?.trim()}var pn=/\bwho\b.*\b(covers?|cover|tends?|owns?|handles?|does|works? on|looks? after|is on|is assigned|staffs?|runs?)\b|\bcoverage\b|\bmatrix\b|\bwho covers\b/,bn=/\bcalendar\b|\bmonth\b|\bagenda\b|\bschedule\b|\bdue\b|\bdeadlines?\b|\bdates?\b|\bwhen\b/,mn=/\btimeline\b|\bover time\b|\bgantt\b|\bspans?\b|\bweek\b/,hn=/\bboard\b|\bkanban\b|\bcolumns?\b|\bpipeline\b|\bstages?\b|\bstatus\b/,wn=/\blaid out\b|\blayout\b|\bseating\b|\bwhere (?:they|it|each) (?:sits?|lies?|stands?)\b|\bfloor\b/,kn=/\bplan\b|\bmap\b|\bregions?\b/,$n=/\blist\b|\btable\b|\bgroup(?:ed)? by\b|\bsort(?:ed)? by\b|\bonly\b|\bjust the\b/;function Sn(n){let e=[];return/\blist\b|\btable\b/.test(n)&&e.push("blocks"),pn.test(n)&&e.push("coverage"),wn.test(n)&&e.push("board"),(/\bfloor plan\b/.test(n)||kn.test(n))&&e.push("plan"),mn.test(n)&&e.push("timeline"),bn.test(n)&&e.push("calendar"),hn.test(n)&&e.push("columns"),$n.test(n)&&!e.includes("blocks")&&e.push("blocks"),e.length===0&&W(n)&&e.push("columns"),e}var on=n=>{let e=r=>r?` and not ${r}`:"";if(/\boverdue\b|\blate\b|\bpast due\b/.test(n))return{cond:(r,t)=>`days(today(), ${r}) < 0${e(t)}`,says:r=>`overdue by ${r.words}`};if(/\btoday\b/.test(n))return{range:"day",cond:r=>`days(today(), ${r}) == 0`,says:r=>`with ${r.words} today`};if(/\bthis week\b|\bnext 7 days\b|\bnext week\b/.test(n))return{range:"week",cond:r=>`days(today(), ${r}) >= 0 and days(today(), ${r}) <= 6`,says:r=>`with ${r.words} in the next week`};if(/\bthis month\b|\bnext 30 days\b|\bnext month\b/.test(n))return{range:"month",cond:r=>`days(today(), ${r}) >= 0 and days(today(), ${r}) <= 30`,says:r=>`with ${r.words} in the next month`};if(/\blast month\b|\bpast month\b/.test(n))return{range:"month",cond:r=>`days(today(), ${r}) >= -30 and days(today(), ${r}) <= 0`,says:r=>`with ${r.words} in the last month`};if(/\bthis year\b/.test(n))return{range:"year",cond:r=>`days(today(), ${r}) >= 0 and days(today(), ${r}) <= 365`,says:r=>`with ${r.words} in the next year`};if(/\bquarter\b/.test(n))return{range:"quarter",cond:r=>`days(today(), ${r}) >= 0 and days(today(), ${r}) <= 91`,says:r=>`with ${r.words} in the next quarter`}},P=n=>{if(/\bagenda\b|\bin order\b/.test(n))return"agenda";if(/\btoday\b|\bday\b/.test(n))return"day";if(/\bweek\b/.test(n))return"week";if(/\bquarter\b/.test(n))return"quarter";if(/\byears\b/.test(n))return"years";if(/\byear\b/.test(n))return"year";if(/\bmonth\b/.test(n))return"month"},Q=/^(user|person|people|member|staff|gardener|volunteer|owner|agent|employee|worker|team|player|customer|client|contact|party|attendee|guest)s?$/,x=class extends Error{},m=n=>{throw new x(n)};function Dn(n,e){let r=n.fields.filter(i=>i.type==="enum");if(e){let i=I(n,e);if(i&&i.type==="enum")return i;i&&m(`${n.plural}' ${i.words} is not a choice, so it has no columns`)}let t=$(n,n.roles.status??n.roles.column);if(t?.type==="enum")return t;let s=r.find(i=>/^(status|stage|state|phase)$/.test(i.name));return s||(r[0]?r[0]:m(`${n.plural} have no choice field to put in columns`))}function nn(n,e){let r=n.fields.filter(A),t=l=>{let d=$(n,n.roles[l]);return A(d)?d:void 0},i=r.find(l=>v(e,l.words)||v(e,b(l.name)))??t("start")??r.find(l=>/^(due|date|on|at|start|starts|begins|from|sown|when)/i.test(l.name))??r[0];if(!i)return m(`no date field on ${n.plural}`);let o=t("end")??r.find(l=>l!==i&&/^(end|ends|until|to|finish|finished|harvested|due|closes|through)/i.test(l.name)),a=n.fields.find(l=>l.type==="boolean"&&/^(done|finished|complete|completed|closed)$/.test(l.name));return{start:i,...o&&o!==i?{end:o}:{},...a?{done:a}:{}}}function an(n){let e=$(n,n.roles.start),r=$(n,n.roles.end),t=$(n,n.roles.column??n.roles.day??n.roles.columns);if(K(e)&&K(r)&&t?.type==="enum")return{start:e,end:r,column:t}}function Rn(n,e,r,t){let s=[];for(let o of n.kinds)for(let a of o.edges)for(let l of a.to){let d=n.info(l);if(!d||d.kind===o.kind)continue;let c=0;e.includes(o)&&(c+=4),e.includes(d)&&(c+=4),(Q.test(d.kind)||Q.test(d.noun))&&(c+=3),t&&(a.words.includes(t)||d.noun===L(t))&&(c+=5),a.words.split(" ").some(u=>u.length>2&&r.includes(` ${u}`))&&(c+=2),s.push({rows:o,across:d,link:a,score:c})}let i=s.sort((o,a)=>a.score-o.score)[0];return i||m(e[0]?`${e[0].plural} are joined to nothing else, so there is no who-covers-what to draw`:"nothing here is joined to anything else, so there is no who-covers-what to draw")}function dn(n,e,r,t,s){let i=W(t);switch(n){case"columns":{if(i){let o=I(e,i);if(!o||o.type!=="enum"){let a=sn(e,i,r);if(a){let l=r.info(a.to[0]);return{lens:"coverage",kind:e.kind,across:l.kind,link:a.name}}}}return{lens:"columns",kind:e.kind,column:Dn(e,i).name}}case"calendar":{let o=nn(e,t),a=P(t);return{lens:"calendar",kind:e.kind,start:o.start.name,...o.end?{end:o.end.name}:{},...o.done?{done:o.done.name}:{},...a?{range:a}:{}}}case"timeline":{let o=an(e);if(o&&!/\bdates?\b|\bdue\b|\bdeadlines?\b|\bmonths?\b|\byears?\b/.test(t))return{lens:"timeline",kind:e.kind,start:o.start.name,end:o.end.name,column:o.column.name};let a=nn(e,t);return{lens:"calendar",kind:e.kind,start:a.start.name,...a.end?{end:a.end.name}:{},...a.done?{done:a.done.name}:{},range:P(t)??"quarter"}}case"coverage":{let o=Rn(r,s,t,i);return{lens:"coverage",kind:o.rows.kind,across:o.across.kind,link:o.link.name}}case"board":{let o=$(e,e.roles.x)??e.fields.find(c=>c.name==="x"),a=$(e,e.roles.y)??e.fields.find(c=>c.name==="y");if(!K(o)||!K(a))return m(`${e.plural} have no x and y to be laid out by`);let d=r.kinds.flatMap(c=>c.edges.filter(u=>u.to.includes(e.kind)&&c.kind!==e.kind))[0]??e.edges[0];return d?{lens:"board",kind:e.kind,x:o.name,y:a.name,fill:d.name,...d.from!==e.kind?{fillFrom:"occupant"}:{}}:m(`nothing is joined to ${e.plural} to fill them`)}case"plan":{let o=$(e,e.roles.outline)??e.fields.find(a=>a.name==="outline");return o?{lens:"plan",kind:e.kind,outline:o.name}:m(`${e.plural} have no outline to draw a plan from`)}case"blocks":{let o={lens:"blocks",kind:e.kind,as:/\bcards?\b/.test(t)?"card":"row"},a=/ group(?:ed)? by ([\p{L}\p{N} -]+?)(?= (?:and|only|sorted|with)|\s*$)/u.exec(t)?.[1]??(i&&!/ sort(?:ed)? by /.test(t)?i:void 0);if(a){let c=I(e,a);if(!c||c.type!=="enum")return m(c?`${e.plural}' ${c.words} is not a choice, so they cannot be grouped by it`:`${e.plural} have nothing called ${a} to group by`);o.group=c.name}let l=/ sort(?:ed)? by ([\p{L}\p{N} -]+?)(?= (?:and|only|grouped|with)|\s*$)/u.exec(t)?.[1];if(l){let c=I(e,l);if(!c)return m(`${e.plural} have nothing called ${l} to sort by`);o.sort={by:c.name,.../\b(newest|latest|desc|descending|most)\b/.test(t)?{direction:"desc"}:{}}}let d=_(e,t);return d.length>0&&(o.where=d),o}}}function _(n,e){let r=[],t=on(e);if(t){let s=n.fields.filter(A),i=$(n,n.roles.start),o=s.find(l=>v(e,l.words))??(A(i)?i:void 0)??s[0];(!o||!A(o))&&m(`no date field on ${n.plural}`);let a=n.fields.find(l=>l.type==="boolean"&&/^(done|finished|complete|completed|closed)$/.test(l.name));r.push({expr:t.cond(o.name,/\boverdue\b|\blate\b|\bpast due\b/.test(e)?a?.name:void 0),says:t.says(o)})}if(/\bonly\b|\bjust\b|\bthat are\b|\bwhich are\b/.test(e)){for(let s of n.fields){if(s.type!=="enum")continue;let i=s.options?.find(o=>v(e,o.toLowerCase())||v(e,b(o)));i&&r.push({expr:`${s.name} == '${i.replace(/'/g,"")}'`,says:`that are ${b(i)}`})}if(/\bnot done\b|\bundone\b|\bunfinished\b|\bopen ones\b|\bstill to do\b/.test(e)){let s=n.fields.find(i=>i.type==="boolean"&&/^(done|finished|complete|completed)$/.test(i.name));s&&r.push({expr:`not ${s.name}`,says:`not ${s.words}`})}}return r}var z={columns:"A board",calendar:"A calendar",timeline:"A timeline",coverage:"A grid",board:"A layout",plan:"A plan",blocks:"A list",reach:"A picture"};function An(n,e){let r=e.info(n.kind),t=s=>s?$(r,s)?.words??b(s):"";switch(n.lens){case"columns":return{title:`${k(r.plural)} by ${t(n.column)}`,detail:`of ${r.plural} by ${t(n.column)}`};case"calendar":{let s=n.range??"month";if(s==="agenda")return{title:`${k(r.plural)} in date order`,detail:`of ${r.plural} in order of ${t(n.start)}`};let i=s==="years"?"year":s;return{title:`${k(r.plural)} by ${i}`,detail:`of ${r.plural} by ${t(n.start)}, a ${i} at a time`}}case"timeline":return{title:`${k(r.plural)} over the ${t(n.column)}`,detail:`of ${r.plural} from ${t(n.start)} to ${t(n.end)}, by ${t(n.column)}`};case"coverage":{let s=e.info(n.across);return{title:`${k(r.plural)} by ${s.noun}`,detail:`of which ${s.noun} covers which ${r.noun}`}}case"board":return{title:`${k(r.plural)} where they stand`,detail:`of ${r.plural} where they stand`};case"plan":return{title:`${k(r.plural)} on a plan`,detail:`of ${r.plural}`};default:{let s=[n.where?.map(i=>i.says).join(" and "),n.group?`by ${t(n.group)}`:void 0,n.sort?`in order of ${t(n.sort.by)}`:void 0].filter(i=>!!i);return{title:[k(r.plural),...s].join(" "),detail:[`of ${r.plural}`,...s].join(" ")}}}}function vn(n,e){let r={title:e,on:n.kind};switch(n.lens){case"columns":return{name:"columns",...r,bindings:{[n.kind]:{column:n.column}}};case"calendar":return{name:"calendar",...r,bindings:{[n.kind]:{start:n.start,...n.end?{end:n.end}:{},...n.done?{done:n.done}:{}}},...n.range?{options:{range:n.range}}:{}};case"timeline":return{name:"timeline",...r,bindings:{[n.kind]:{start:n.start,end:n.end,column:n.column}}};case"coverage":return{name:"coverage",...r,bindings:{rows:{kind:n.kind},columns:{kind:n.across},link:{edge:n.link}}};case"board":return{name:"board",...r,bindings:{slots:{kind:n.kind},x:{field:n.x,on:"slots"},y:{field:n.y,on:"slots"},fill:{edge:n.fill}},...n.fillFrom?{options:{fillFrom:n.fillFrom}}:{}};case"plan":return{name:"plan",...r,bindings:{regions:{kind:n.kind},outline:{field:n.outline,on:"regions"}}};default:{let t=n.where?.length?` where ${n.where.map(i=>n.where.length>1?`(${i.expr})`:i.expr).join(" and ")}`:"",s={list:`all('${n.kind}')${t}`,as:n.as??"row"};return n.group&&(s.group=n.group),n.sort&&(s.sort=n.sort.direction?{by:n.sort.by,direction:n.sort.direction}:n.sort.by),s.empty="Nothing here yet.",{name:"blocks",...r,options:{blocks:[s]}}}}}function B(n,e){let r=s=>s.toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,""),t=new Set(["home","overview",...X(e).map(s=>s.slug),...(e.lenses??[]).flatMap(s=>s.title?[r(s.title)]:[])]);if(!t.has(r(n)))return n;for(let s=2;;s++)if(!t.has(r(`${n} ${s}`)))return`${n} ${s}`}var en={title:[],headline:[],text:["tone"],figure:["as","currency","label"],list:["sort","limit","group","empty","as"],progress:["label"],group:["direction"],when:["show"],divider:[]};function Ln(n,e){if(!Array.isArray(e)||e.length===0)return"it has no blocks to draw";if(e.length>40)return"it has more blocks than a place draws";let r=(o,a)=>{if(typeof o!="string"||o.trim()==="")return`its ${a} says nothing`;try{return T(o)}catch(l){return`its ${a} does not read: ${l instanceof Error?l.message.replace(/ \(at character.*$/,""):String(l)}`}},t=o=>{if(o.t==="where")return t(o.set);if(o.t==="call"&&o.fn==="all"){let a=o.args[0];return a?.t==="lit"&&typeof a.value=="string"?n.info(a.value)??null:void 0}},s=(o,a)=>{switch(o.t){case"lit":return;case"ident":return a&&!a.fields.some(l=>l.name===o.name)&&!a.edges.some(l=>l.name===o.name)?`${a.plural} have nothing called ${o.name}`:void 0;case"member":return s(o.object,a);case"list":return o.items.map(l=>s(l,a)).find(Boolean);case"unary":return s(o.operand,a);case"binary":return s(o.left,a)??s(o.right,a);case"where":{let l=t(o.set);return l===null?"Nothing by that name here":s(o.set,a)??s(o.filter,l??void 0)}case"call":return o.fn==="all"?t(o)===null?"Nothing by that name here":void 0:o.args.map(l=>s(l,a)).find(Boolean)}},i=(o,a)=>{if(a>4)return"its blocks nest deeper than a place draws";for(let l of o){if(!w(l))return"a block is not an object";let d=Object.keys(en).find(g=>g in l);if(!d)return`"${Object.keys(l)[0]??""}" is not a block a place draws`;let c=Object.keys(l).find(g=>g!==d&&g!=="key"&&!en[d].includes(g));if(c)return`a ${d} block takes no "${c}"`;let u=l[d];if(d==="list"||d==="figure"||d==="when"){if(d==="figure"&&u===!0)continue;let g=r(u,d);if(typeof g=="string")return g;let p=s(g,void 0);if(p)return p;if(d==="list"){let f=t(g);if(f==null)return f===null?"Nothing by that name here":"its list does not say which records it lists, like all('task')";for(let y of["group","sort"]){let h=l[y],S=typeof h=="string"?h:w(h)&&typeof h.by=="string"?h.by:void 0;if(h===void 0)continue;let D=S?f.fields.find(un=>un.name===S):void 0;if(!D)return`${f.plural} have nothing called ${String(S??h)} to ${y} by`;if(y==="group"&&D.type!=="enum")return`${f.plural}' ${D.words} is not a choice, so they cannot be grouped by it`}}if(d==="when"){let f=l.show;if(!Array.isArray(f))return"a when block shows a list of blocks";let y=i(f,a+1);if(y)return y}}else if(d==="group"){if(!Array.isArray(u))return"a group block holds a list of blocks";let g=i(u,a+1);if(g)return g}else{if(d!=="divider"&&typeof u!="string")return`a ${d} block says words`;if(typeof u=="string")for(let g of u.matchAll(/\{([^{}]*)\}/g)){let p=g[1].split(/\|(?![|])/)[0],f=r(p,`${d}'s braces`);if(typeof f=="string")return f;let y=s(f,void 0);if(y)return y}}}};return i(e,1)}function N(n,e,r){let t=j(n.schema,r),s=f=>({ok:!1,failed:`Couldn't draw that: ${f.replace(/\.$/,"")}.`});if(!G(e.name)||e.name==="reach")return s(`"${String(e.name)}" is not a picture the seat can draw; it draws ${H.filter(f=>f!=="reach").join(", ")}`);if(typeof e.title!="string"||e.title.trim().length===0||e.title.length>80)return s("it needs a title of a few words");if(typeof e.on!="string"||!t.tryDefinition(e.on))return s("Nothing by that name here");let i=F[e.name],o=e.bindings??{};if(i.binds==="fields")for(let[f,y]of Object.entries(o)){if(!t.tryDefinition(f))return s("Nothing by that name here");let h=Object.keys(t.tryDefinition(f).fields?.shape??{});for(let[S,D]of Object.entries(y??{}))if(typeof D!="string"||!h.includes(D))return s(`${b(f)} has no field "${String(D)}" for its ${S}`);for(let S of i.requiredRoles)if(!(S in(y??{})))return s(`a ${e.name} needs ${b(f)}'s ${S}`)}else if(i.binds==="entities")for(let f of i.requiredRoles){let y=o[f];if(!y)return s(`a ${e.name} needs its ${f}`);if(typeof y.kind=="string"&&!t.tryDefinition(y.kind))return s("Nothing by that name here")}let a={...n,schema:t,lenses:[...n.lenses??[],e]},l=a.lenses.length-1,d=V(a),c=`lenses.${l}`,u=d.findings.find(f=>f.path===c||f.path.startsWith(`${c}.`));if(u)return s(u.message.replace(/^"[^"]*" /,"it "));let g=d.undrawn.find(f=>f.index===l);if(g)return s(g.why);let p=d.drawn.find(f=>f.index===l);if(!p)return s("its bindings name something the app does not have");if(p.as==="overview")return s(`"${e.title}" is the scene's own address; give it another title`);if(e.name==="blocks"){let f=Ln(O(t),e.options?.blocks);if(f)return s(f)}return{ok:!0,drawn:p}}function C(n){return{op:"add-lens",title:n.title,lens:n.name,on:n.on,...n.bindings?{bindings:n.bindings}:{},...n.options?{options:n.options}:{}}}function In(n){return{op:"remove-lens",title:n.title,on:n.on}}var w=n=>typeof n=="object"&&n!==null&&!Array.isArray(n);function ln(n){let e=w(n)?n:{},r=String(e.lens??e.name??""),t=e.bindings,s=typeof e.on=="string"?e.on:w(t)&&F[r]?.binds==="fields"?Object.keys(t)[0]??"":"";return{name:r,title:typeof e.title=="string"?e.title.trim():"",on:s,...w(t)?{bindings:t}:{},...w(e.options)?{options:e.options}:{}}}function En(n){let e=s=>w(n.bindings?.[s])?n.bindings[s]:{},r=s=>typeof s=="string"?s:void 0,t=e(n.on);switch(n.name){case"columns":return r(t.column)?{lens:"columns",kind:n.on,column:t.column}:void 0;case"calendar":{let s=r(n.options?.range);return r(t.start)?{lens:"calendar",kind:n.on,start:t.start,...r(t.end)?{end:t.end}:{},...r(t.done)?{done:t.done}:{},...s?{range:s}:{}}:void 0}case"timeline":return r(t.start)&&r(t.end)&&r(t.column)?{lens:"timeline",kind:n.on,start:t.start,end:t.end,column:t.column}:void 0;case"coverage":{let s=w(n.bindings?.columns)?r(n.bindings.columns.kind):void 0,i=w(n.bindings?.link)?r(n.bindings.link.edge):void 0;return s&&i?{lens:"coverage",kind:n.on,across:s,link:i}:void 0}case"blocks":{let s=n.options?.blocks;if(!Array.isArray(s)||s.length!==1||!w(s[0]))return;let i=s[0],o=new RegExp(`^all\\('${n.on}'\\)(?: where (.+))?$`).exec(String(i.list??""));if(!o)return;let a=i.sort;return{lens:"blocks",kind:n.on,as:i.as==="card"?"card":"row",...typeof i.group=="string"?{group:i.group}:{},...typeof a=="string"?{sort:{by:a}}:w(a)&&typeof a.by=="string"?{sort:{by:a.by,...a.direction==="desc"?{direction:"desc"}:{}}}:{},...o[1]?{where:[{expr:o[1],says:"as asked"}]}:{}}}default:return}}function M(n,e,r,t,s){let i=O(j(n.schema,t)).info(e.on),o=En(e);return{title:e.title,said:`${z[e.name]??"A picture"} of ${i?.plural??b(e.on)}.`,kind:e.on,lens:e,drawn:r,edit:C(e),by:s,asks:[],...o?{recipe:o}:{}}}function tn(n){return{title:n.title,said:n.said,lens:{title:n.lens.title,lens:n.lens.name,on:n.lens.on,...n.lens.bindings?{bindings:n.lens.bindings}:{},...n.lens.options?{options:n.lens.options}:{}},edit:n.edit,by:n.by,check:"It draws, and graview check would take it."}}function q(n,e,r,t,s){let i=An(n,e),o=n.title??s??B(i.title,r.app),a=vn(n,o),l=N(r.app,a,r.sight);return l.ok?{title:o,said:`${z[n.lens]} ${i.detail}.`,kind:n.kind,lens:a,drawn:l.drawn,edit:C(a),by:"template",asks:t,recipe:n}:{failed:l.failed,...r.lastGood?{lastGood:r.lastGood}:{}}}function xn(n,e,r,t){if(r.length>0)return r;let s=o=>{switch(n){case"columns":return o.fields.some(a=>a.type==="enum");case"calendar":return o.fields.some(A);case"timeline":return an(o)!==void 0||o.fields.some(A);case"coverage":return o.edges.some(a=>a.to.some(l=>l!==o.kind));case"board":return o.fields.some(a=>a.name==="x")&&o.fields.some(a=>a.name==="y");case"plan":return o.fields.some(a=>a.name==="outline")||o.roles.outline!==void 0;default:return!0}};return[...e.kinds.filter(s)].sort((o,a)=>Number(a.fields.some(l=>v(t,l.words)))-Number(o.fields.some(l=>v(t,l.words))))}function jn(n,e){let r=O(j(e.app.schema,e.sight)),t=rn(n),s=Sn(t);if(s.length===0)return;let i=yn(t,r),o;for(let a of s){let l=a==="coverage"?[i[0]??r.kinds[0]].filter(d=>!!d):xn(a,r,i,t);for(let d of l)try{let c=dn(a,d,r,t,i),u=q(c,r,e,[n]);if(!E(u))return u;o??=u.failed}catch(c){if(!(c instanceof x))throw c;o??=`Couldn't draw that: ${c.message}.`}l.length===0&&i.length===0&&(o??=`Couldn't draw that: nothing here has what ${z[a].toLowerCase()} needs.`)}return{failed:o??"Couldn't draw that: Nothing by that name here.",...e.lastGood?{lastGood:e.lastGood}:{}}}async function On(n,e){let r=e.lastGood?{lastGood:e.lastGood}:{};if(n.trim().length===0)return{failed:"Say what you would like to see, like \u201Ca board of tasks by status\u201D.",...r};let t=jn(n,e);if(t&&!E(t))return t;if(!e.complete)return t??{failed:"Couldn't draw that: drawing freely needs AI, which isn't on here. Ask for a board, a calendar, a timeline, a list or who covers what.",...r};let s=await cn(n,e,void 0);return E(s)&&t?t:s}async function Nn(n,e,r){let t={lastGood:n},s={...r,lastGood:n},i=O(j(r.app.schema,r.sight)),o=rn(e),a=i.info(n.kind),l=[...n.asks,e];if(!a)return{failed:"Couldn't change that: Nothing by that name here.",...t};let d=n.recipe,c=/^ (?:call|name|title) (?:it|this)? ?(.+?) $/.exec(o)??/ (?:call|name) it (.+?) $/.exec(o);try{if(c){let p=e.replace(/^.*?\b(?:call|name|title)\b\s*(?:it|this)?\s*/i,"").replace(/^["“']|["”']$/g,"").trim();if(p.length===0)return{failed:"Couldn't change that: say what to call it.",...t};let f={...n.lens,title:B(p,r.app)},y=N(r.app,f,r.sight);return y.ok?{...n,title:f.title,lens:f,drawn:y.drawn,edit:C(f),asks:l,...d?{recipe:{...d,title:f.title}}:{}}:{failed:y.failed,...t}}let g=/ as (?:a |an )?(board|kanban|calendar|timeline|list|table|cards|rows|grid|plan|layout)\b/.exec(o);if(g){let p=g[1]==="board"||g[1]==="kanban"?"columns":g[1]==="calendar"?"calendar":g[1]==="timeline"?"timeline":g[1]==="grid"?"coverage":g[1]==="plan"?"plan":g[1]==="layout"?"board":"blocks",f=dn(p,a,i,o,[a]),y=g[1]==="cards"?"card":g[1]==="rows"?"row":void 0,h=p==="blocks"&&d?.lens==="blocks"?{...d,...y?{as:y}:{}}:p==="blocks"&&d?.lens==="columns"?{...f,group:d.column,...y?{as:y}:{}}:f;return q(R(h),i,s,l)}if(d){let p=Kn(d,a,i,o);if(p)return q(p,i,s,l)}}catch(g){if(!(g instanceof x))throw g;return{failed:`Couldn't change that: ${g.message}.`,...t}}if(!r.complete)return{failed:"Couldn't change that: changing it freely needs AI, which isn't on here. Try \u201Cgroup by status\u201D, \u201Conly this month\u201D or \u201Cas a calendar\u201D.",...t};let u=await cn(e,s,n);return E(u)?u:{...u,asks:l}}var R=n=>{let{title:e,...r}=n;return r};function Kn(n,e,r,t){let s=/ (?:group(?:ed)?|split|organi[sz]ed?|put them|columns) by ([\p{L}\p{N} -]+?)(?= (?:and|only|with)|\s*$)/u.exec(t)?.[1]??(/^ by /.test(t)?W(t):void 0);if(s){let d=I(e,s);if(d?.type==="enum")return n.lens==="blocks"?{...R(n),group:d.name}:{lens:"columns",kind:n.kind,column:d.name};let c=sn(e,s,r);return c?{lens:"coverage",kind:n.kind,across:c.to[0],link:c.name}:m(d?`${e.plural}' ${d.words} is not a choice, so they cannot be grouped by it`:`${e.plural} have nothing called ${s} to group by`)}let i=/ (?:sort(?:ed)?|order(?:ed)?) by ([\p{L}\p{N} -]+?)(?= (?:and|only|with)|\s*$)/u.exec(t)?.[1];if(i){let d=I(e,i);return d?{...n.lens==="blocks"?R(n):{lens:"blocks",kind:n.kind,as:"row",...n.lens==="columns"?{group:n.column}:{}},sort:{by:d.name,.../\b(newest|latest|desc|descending|most)\b/.test(t)?{direction:"desc"}:{}}}:m(`${e.plural} have nothing called ${i} to sort by`)}if(/\b(?:all of them|everything|show all|clear the filter|no filter|without the filter)\b/.test(t)){if(n.lens!=="blocks"||!n.where)return m("it already shows all of them");let{where:d,...c}=R(n);return c}let o=on(t);if(o&&n.lens==="calendar"&&o.range)return{...R(n),range:o.range};if(o&&n.lens==="calendar"&&!o.range)return{lens:"blocks",kind:n.kind,as:"row",sort:{by:n.start},where:_(e,t)};let a=_(e,t);if(a.length>0){let d=n.lens==="blocks"?R(n):{lens:"blocks",kind:n.kind,as:"row",...n.lens==="columns"?{group:n.column}:{}};return{...d,where:[...d.where??[],...a]}}let l=n.lens==="calendar"?P(t):void 0;if(l)return{...R(n),range:l}}function Cn(n){return n.kinds.map(e=>{let r=e.fields.map(i=>`${i.name} (${i.type??"value"}${i.options?`: ${i.options.join(" | ")}`:""})`).join(", "),t=e.edges.map(i=>`${i.name} \u2192 ${i.to.join(" | ")}`).join(", "),s=Object.entries(e.roles).map(([i,o])=>`${i}=${o}`).join(", ");return`- ${e.kind} ("${e.plural}"): ${r}${t?`; relations: ${t}`:""}${s?`; roles: ${s}`:""}`}).join(`
2
+ `)}var Fn=['columns \u2014 a board, records in columns by one choice field: {"lens": "columns", "on": K, "bindings": {K: {"column": "<enum field>"}}}','calendar \u2014 records on a calendar by a date: {"lens": "calendar", "on": K, "bindings": {K: {"start": "<date field>", "end"?: "<date field>", "done"?: "<boolean field>"}}, "options": {"range"?: "day" | "week" | "month" | "quarter" | "year" | "agenda"}}','timeline \u2014 minutes of a day in columns: {"lens": "timeline", "on": K, "bindings": {K: {"start": "<number field>", "end": "<number field>", "column": "<enum field>"}}}','coverage \u2014 who covers what, a grid of two kinds joined by a relation: {"lens": "coverage", "on": K, "bindings": {"rows": {"kind": K}, "columns": {"kind": J}, "link": {"edge": "<relation of K to J>"}}}',`blocks \u2014 anything else, as blocks: {"lens": "blocks", "on": K, "options": {"blocks": [{"headline": "words"}, {"list": "all('K') where <condition>", "group"?: "<enum field>", "sort"?: "<field>" | {"by": "<field>", "direction": "desc"}, "as"?: "row" | "card", "empty"?: "words"}, {"figure": "count(all('K'))", "label": "words"}]}}. Conditions read a record's own fields: status == 'open', not done, days(today(), due) <= 7.`].join(`
3
+ `);function Gn(n,e,r){return["You draw a view of an app's data as JSON \u2014 never code. The app's kinds, their fields (with types) and relations:",Cn(e),"","The lenses you may use (prefer the first four; use blocks only when none of them fits):",Fn,"",r?`The view on screen now:
4
+ ${JSON.stringify(r.lens)}
5
+ Change it as asked, and keep everything not asked about.`:"",`Asked: ${JSON.stringify(n)}`,'Answer with ONE JSON object: {"title": "<a few words, like Deliverables by status>", "lens": \u2026, "on": \u2026, "bindings"?: \u2026, "options"?: \u2026}. Name only the kinds, fields and relations listed above. If it cannot be drawn from them, answer {"failed": "<one sentence saying why>"}.'].filter(t=>t!=="").join(`
6
+ `)}async function cn(n,e,r){let t=e.lastGood?{lastGood:e.lastGood}:{},s=O(j(e.app.schema,e.sight)),i;try{i=await e.complete(Gn(n,s,r))}catch{return{failed:"Couldn't draw that: the model did not answer.",...t}}let o=Z(i);if(typeof o!="object"||o===null||Array.isArray(o))return{failed:"Couldn't draw that: the model's answer was not a view.",...t};let a=o;if(typeof a.failed=="string")return{failed:`Couldn't draw that: ${a.failed.replace(/^Couldn't draw that:\s*/i,"").replace(/\.$/,"")}.`,...t};let l=ln(a);if(!G(l.name))return{failed:`Couldn't draw that: "${l.name}" is not a picture the seat can draw.`,...t};let d=l.title?l.title.slice(0,80):r?.title??k(n.trim()).slice(0,80),c={...l,title:r&&r.title===d?d:B(d,e.app)},u=N(e.app,c,e.sight);return u.ok?{...M(e.app,c,u.drawn,e.sight,"model"),asks:[n]}:{failed:u.failed,...t}}function Un(n,e,r){let t=[...n.lenses??[]];for(let s of e){let i={name:s.lens,title:s.title,on:s.on,...s.bindings?{bindings:s.bindings}:{},...s.options?{options:s.options}:{}};if(t.some(a=>a.title===i.title))continue;N({...n,lenses:t},i,r).ok&&(t=[...t,i])}return t.length===(n.lenses??[]).length?n:{...n,lenses:t}}async function Hn(n,e,r){let{app:t,drafts:s}=r,i=fn(t,r.principal),o=c=>{let u=ln(c);return{lens:u,verdict:N(t,u,i)}};if(n==="keep_lens"){let{lens:c,verdict:u}=o(e);if(!u.ok)return{ok:!1,error:u.failed,reason:"invalid"};if(!s?.keep)return{ok:!1,error:"This app's declaration cannot be written from here."};let g=C(c),p=await s.keep(g);return p.ok?{ok:!0,data:{kept:g,said:p.said??`Adds \u201C${g.title}\u201D to the places.`,undo:In(g)}}:{ok:!1,error:p.error}}if(e.lens!==void 0){let{lens:c,verdict:u}=o(e.lens);return u.ok?{ok:!0,data:tn(M(t,c,u.drawn,i,"model"))}:{ok:!1,error:u.failed,reason:"invalid"}}let a={app:t,sight:i,...s?.complete?{complete:s.complete}:{}},l=String(e.ask??""),d;if(e.current!==void 0){let{lens:c,verdict:u}=o(e.current);if(!u.ok)return{ok:!1,error:u.failed,reason:"invalid"};d=await Nn(M(t,c,u.drawn,i,"model"),l,a)}else d=await On(l,a);return E(d)?{ok:!1,error:d.failed,reason:"invalid"}:{ok:!0,data:tn(d)}}export{tn as draftAnswer,M as draftFromLens,fn as draftSight,On as draftView,E as isDraftFailure,N as judgeLens,C as lensEditOf,ln as lensFromSpec,En as recipeOfLens,Nn as refineDraft,Hn as runDraftTool,In as takeBackEditOf,jn as templateDraft,Un as withReaderLenses};
@@ -1 +1 @@
1
- import{b as W}from"./chunk.T6KID3WO.js";import{C as R,b as A,c as T,d as v,e as f,f as x,j as I,m as b,ra as k}from"./chunk.2WFEFZAW.js";import{Qb as s,oa as y,pa as r}from"./chunk.RAE4M3KQ.js";import{a as H}from"./chunk.MRK6QJV5.js";import{b as B}from"./chunk.AJZBJBMO.js";var u=B(H(),1),L=e=>typeof e=="object"&&e!==null&&"idx"in e;function E(e){let n=r(window.location.pathname,e);return n===null?null:n!==s&&n!=="/"?"pages":n===s||window.location.href.includes("#")?f(window.location.hash).overview?"graview":"scene":L(window.history.state)?"pages":null}function J(e){let n=e.face??(e.stop&&v(e.stop).overview?"graview":"scene");return e.routing!=="address"||typeof window>"u"?n:E(e.basePath)??n}function K(e){return e.routing!=="address"||typeof window>"u"?!1:r(window.location.pathname,e.basePath)==="/"&&E(e.basePath)===null}function Q(e){if(typeof window>"u")return;let n=r(window.location.pathname,e);return n===s||n==="/"&&window.location.href.includes("#")?T(f(window.location.hash)):void 0}function X({basePath:e,pagesWere:n,shown:t,onFace:i,toggle:l,kinds:U,places:w,opens:$}){let{view:F,go:p}=k(),g=(0,u.useRef)({shown:t,view:F,onFace:i});g.current={shown:t,view:F,onFace:i};let S=(0,u.useRef)(n??"/"),M=()=>{S.current=`${r(window.location.pathname,e)??"/"}${window.location.search}`};return l.current=(o,c,a)=>{let{shown:d,view:N,onFace:V}=g.current;if(o==="pages"&&d!=="pages")window.history.pushState(null,"",y(c??S.current,{basePath:e}));else if(o!=="pages"&&d==="pages"){M();let m=a===void 0?N:j(v(a),w),h=Y(m)?q($):m,O=h!==m&&h.overview?"graview":o,P=_(O,h,U);p(P),window.history.pushState(null,"",`${y(s,{basePath:e})}${x(P)}`),V?.(O);return}V?.(o)},(0,u.useEffect)(()=>{let o=()=>{if(r(window.location.pathname,e)===null)return;let c=E(e)??"pages",{shown:a,onFace:d}=g.current;if(c==="pages"){a!=="pages"&&d?.("pages");return}a==="pages"&&(p(j(f(window.location.hash),w)),d?.(c))};return window.addEventListener("popstate",o),()=>window.removeEventListener("popstate",o)},[e,p,w]),null}function j(e,n){let t=e.within?.view,i=t!==void 0&&!e.focusId?n.find(l=>l.as===t):void 0;return i?{...e,focusId:R(i.kind)}:e}function _(e,n,t){return e==="graview"?b(n,!0):n.overview?I(b(n,!1),W(n,t)):n}function Y(e){return e.focusId===null&&e.overview!==!0}function q(e){return e??{...A,overview:!0}}export{J as a,K as b,Q as c,X as d,j as e,_ as f,Y as g,q as h};
1
+ import{b as W}from"./chunk.BK2MJOUN.js";import{B as R,a as A,b as T,c as v,d as f,e as x,i as I,l as b,sa as k}from"./chunk.SVL6I37U.js";import{Wb as s,ta as y,ua as r}from"./chunk.P7YN4Z3K.js";import{a as H}from"./chunk.MRK6QJV5.js";import{b as B}from"./chunk.AJZBJBMO.js";var u=B(H(),1),L=e=>typeof e=="object"&&e!==null&&"idx"in e;function E(e){let n=r(window.location.pathname,e);return n===null?null:n!==s&&n!=="/"?"pages":n===s||window.location.href.includes("#")?f(window.location.hash).overview?"graview":"scene":L(window.history.state)?"pages":null}function J(e){let n=e.face??(e.stop&&v(e.stop).overview?"graview":"scene");return e.routing!=="address"||typeof window>"u"?n:E(e.basePath)??n}function K(e){return e.routing!=="address"||typeof window>"u"?!1:r(window.location.pathname,e.basePath)==="/"&&E(e.basePath)===null}function Q(e){if(typeof window>"u")return;let n=r(window.location.pathname,e);return n===s||n==="/"&&window.location.href.includes("#")?T(f(window.location.hash)):void 0}function X({basePath:e,pagesWere:n,shown:t,onFace:i,toggle:l,kinds:U,places:w,opens:$}){let{view:F,go:p}=k(),g=(0,u.useRef)({shown:t,view:F,onFace:i});g.current={shown:t,view:F,onFace:i};let S=(0,u.useRef)(n??"/"),M=()=>{S.current=`${r(window.location.pathname,e)??"/"}${window.location.search}`};return l.current=(o,c,a)=>{let{shown:d,view:N,onFace:V}=g.current;if(o==="pages"&&d!=="pages")window.history.pushState(null,"",y(c??S.current,{basePath:e}));else if(o!=="pages"&&d==="pages"){M();let m=a===void 0?N:j(v(a),w),h=Y(m)?q($):m,O=h!==m&&h.overview?"graview":o,P=_(O,h,U);p(P),window.history.pushState(null,"",`${y(s,{basePath:e})}${x(P)}`),V?.(O);return}V?.(o)},(0,u.useEffect)(()=>{let o=()=>{if(r(window.location.pathname,e)===null)return;let c=E(e)??"pages",{shown:a,onFace:d}=g.current;if(c==="pages"){a!=="pages"&&d?.("pages");return}a==="pages"&&(p(j(f(window.location.hash),w)),d?.(c))};return window.addEventListener("popstate",o),()=>window.removeEventListener("popstate",o)},[e,p,w]),null}function j(e,n){let t=e.within?.view,i=t!==void 0&&!e.focusId?n.find(l=>l.as===t):void 0;return i?{...e,focusId:R(i.kind)}:e}function _(e,n,t){return e==="graview"?b(n,!0):n.overview?I(b(n,!1),W(n,t)):n}function Y(e){return e.focusId===null&&e.overview!==!0}function q(e){return e??{...A,overview:!0}}export{J as a,K as b,Q as c,X as d,j as e,_ as f,Y as g,q as h};
@@ -0,0 +1 @@
1
+ import{a as b,b as N,c as S}from"./chunk.ZOWWWRYA.js";import{d as y}from"./chunk.6LJ66MB7.js";import{wa as m,xa as w}from"./chunk.SVL6I37U.js";import{Fb as x}from"./chunk.P7YN4Z3K.js";import{a as C,b as h}from"./chunk.MRK6QJV5.js";import{b as g}from"./chunk.AJZBJBMO.js";var c=g(C(),1);var i=g(h(),1),P=6e3;function M(){let t=[],n=0,s=new Set,a=new Map,p,r=()=>{for(let e of[...s])e()},o=e=>{if(clearTimeout(a.get(e.id)),a.delete(e.id),e.kind!=="toast")return;let l=(e.actions?.length??0)+(e.action?1:0),f=e.timeout??(l>0?!1:P);f!==!1&&a.set(e.id,setTimeout(()=>p?.()?o(e):d(e.id),f))},d=e=>{clearTimeout(a.get(e)),a.delete(e),t.some(l=>l.id===e)&&(t=t.filter(l=>l.id!==e),r())},u=e=>{t=t.some(l=>l.id===e.id)?t.map(l=>l.id===e.id?e:l):[...t,e],o(e),r()};return{notify(e){let l=e.id??`notice-${++n}`;return u({...e,id:l,said:++n}),{id:l,dismiss:()=>d(l),update:f=>{let v=t.find(L=>L.id===l);v&&u({...v,...f,id:l,kind:v.kind,said:f.sentence!==void 0&&f.sentence!==v.sentence?++n:v.said})}}},dismiss:d,hold(e){p=e},list:()=>t,subscribe(e){return s.add(e),()=>s.delete(e)}}}var k={info:"var(--graview-accent)",good:"var(--graview-good)",warn:"var(--graview-warn)",bad:"var(--graview-bad)"};function T({notices:t,at:n,anchor:s,board:a}){let p=(0,c.useRef)(null),r=t.length>0;return(0,c.useLayoutEffect)(()=>{let o=p.current;if(!r||!o)return;if(typeof o.showPopover=="function"&&!m(o))try{o.showPopover()}catch{}let d=()=>(n==="top"?S:N)(o,s());d(),n==="foot"&&a.hold?.(()=>o.matches(":hover, :focus-within"));let u=w(o);addEventListener("resize",d),addEventListener("scroll",d,!0),n==="foot"&&addEventListener(b,d);let e=typeof ResizeObserver=="function"?new ResizeObserver(d):null;return e?.observe(o),()=>{if(u(),e?.disconnect(),removeEventListener("resize",d),removeEventListener("scroll",d,!0),removeEventListener(b,d),o.isConnected&&m(o))try{o.hidePopover()}catch{}}},[r,n,s,a]),r?(0,i.jsx)("div",{ref:p,popover:"manual",role:"region","aria-label":n==="top"?"Notices":"Messages","data-testid":n==="top"?"notices-banners":"notices-toasts","data-graview-offstage":"",style:{position:"fixed",inset:"auto",margin:0,padding:0,border:"none",background:"none",overflow:"visible",zIndex:x("toast"),width:"max-content",height:"auto",maxWidth:"min(560px, calc(100vw - 32px))",display:"grid",gap:8,color:"var(--graview-ink)"},children:t.map(o=>(0,i.jsx)(R,{notice:o,board:a},o.id))}):null}function R({notice:t,board:n}){let s=t.tone??"info",a=[...t.action?[t.action]:[],...t.actions??[]],p=()=>n.dismiss(t.id);return(0,i.jsxs)("div",{"data-testid":"notice","data-kind":t.kind,"data-tone":s,style:{boxSizing:"border-box",display:"flex",flexWrap:"wrap",alignItems:"center",gap:"8px 12px",padding:t.kind==="banner"?"8px 10px 8px 14px":"10px 12px 10px 14px",borderRadius:"var(--graview-radius, 12px)",borderTop:"1px solid var(--graview-edge)",borderRight:"1px solid var(--graview-edge)",borderBottom:"1px solid var(--graview-edge)",borderLeft:`3px solid ${k[s]}`,background:"var(--graview-float)",boxShadow:"var(--graview-lift-high)",fontSize:"0.875rem",lineHeight:1.45},children:[(0,i.jsx)("span",{"aria-hidden":"true",style:{width:7,height:7,borderRadius:999,flex:"0 0 auto",background:k[s]}}),(0,i.jsx)("span",{style:{flex:"1 1 16rem",minWidth:0},children:t.sentence}),a.length>0?(0,i.jsx)("span",{style:{display:"flex",flexWrap:"wrap",gap:6},children:a.map((r,o)=>r.href!==void 0?(0,i.jsx)("a",{href:r.href,...r.target?{target:r.target,rel:"noopener"}:{},"data-testid":"notice-action",onClick:()=>{r.onSelect?.(),p()},style:{...H,...o===0?E:{}},children:r.label},r.label):(0,i.jsx)("button",{type:"button","data-testid":"notice-action",onClick:()=>{p(),r.onSelect?.()},style:{...H,...o===0?E:{}},children:r.label},r.label))}):null,(0,i.jsx)("button",{type:"button","data-testid":"notice-dismiss","aria-label":`Dismiss: ${t.sentence}`,title:"Dismiss",onClick:p,style:A,children:"\xD7"})]})}var H={display:"inline-flex",alignItems:"center",minHeight:28,padding:"2px 12px",borderRadius:9,border:"1px solid var(--graview-edge)",background:"var(--graview-panel)",color:"var(--graview-ink)",font:"inherit",fontWeight:500,textDecoration:"none",cursor:"pointer"},E={background:"var(--graview-accent)",borderColor:"var(--graview-accent)",color:"var(--graview-accent-ink)"},A={minWidth:28,minHeight:28,padding:0,border:"none",background:"none",boxShadow:"none",color:"var(--graview-ink-muted)",fontSize:"1rem",cursor:"pointer"};function B({notices:t}){let n=t.reduce((d,u)=>!d||u.said>d.said?u:d,void 0),[s,a]=(0,c.useState)(""),[p,r]=(0,c.useState)(""),o=(0,c.useRef)(0);return(0,c.useEffect)(()=>{if(!n||n.said===o.current)return;o.current=n.said;let d=n.tone==="bad";(d?r:a)("");let u=setTimeout(()=>(d?r:a)(n.sentence),50);return()=>clearTimeout(u)},[n]),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("div",{role:"status","aria-live":"polite","data-testid":"notices-said",style:y,children:s}),(0,i.jsx)("div",{role:"alert","data-testid":"notices-alarm",style:y,children:p})]})}var W=(0,c.createContext)(null);function F({board:t,anchor:n}){let s=(0,c.useSyncExternalStore)(t.subscribe,t.list,t.list);return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(T,{notices:s.filter(a=>a.kind==="banner"),at:"top",anchor:n,board:t}),(0,i.jsx)(T,{notices:s.filter(a=>a.kind==="toast"),at:"foot",anchor:n,board:t}),(0,i.jsx)(B,{notices:s})]})}export{M as a,W as b,F as c};
@@ -1,4 +1,4 @@
1
- import{a as ft,b as Rn,c as ht}from"./chunk.ORJ3T4IW.js";import{b as $n,c as gt,d as On,e as ut,f as mt,g as pt}from"./chunk.H4LHHT56.js";import{f as lt}from"./chunk.U6BWYBPM.js";import{e as st,i as dt,j as ct}from"./chunk.QOYC424P.js";import{c as at,d as Cn}from"./chunk.2YVXTTC2.js";import{a as rt}from"./chunk.BJ2Y5F66.js";import{i as Z,j as ue,k as Ae}from"./chunk.ZRVDIVYY.js";import{a as it,b as ot}from"./chunk.PY42PBMB.js";import{c as nt,d as tt}from"./chunk.JCZH55RX.js";import{Y as Xn,ca as Q,ea as Zn,l as _e,qa as et,ra as Ue,za as Be}from"./chunk.2WFEFZAW.js";import{Bb as kn,H as Ne,J as pe,O as De,P as en,Q as Kn,S as xn,T as Yn,U as nn,cb as Qn,fb as ie,ja as Sn,yb as Re,za as Jn}from"./chunk.RAE4M3KQ.js";import{a as ze,b as J}from"./chunk.MRK6QJV5.js";import{b as G}from"./chunk.AJZBJBMO.js";var An=G(J(),1);function Ee(e,t,n){let r=e.nodes?.length??0;if(e.total===void 0||e.total<=r)return n;let a=e.nodes?.[0]?.kind,o=a?en(t,a).toLowerCase():"more";return(0,An.jsxs)("div",{style:{display:"grid",gridTemplateRows:"minmax(0, 1fr) auto",height:"100%",minHeight:0},children:[n,(0,An.jsxs)("p",{"data-testid":"lens-more",style:{margin:"4px 0 0",fontSize:"0.8125rem",color:"var(--graview-ink-muted)"},children:["+",e.total-r," more ",o]})]})}var yt=G(J(),1),rr=(e,t)=>{if(e===!1||t===!1)return!1;let n=e===void 0||e===!0?{}:e,r=t===void 0||t===!0?{}:t;return{sort:n.sort!==!1&&r.sort!==!1,filter:n.filter!==!1&&r.filter!==!1,group:n.group!==!1&&r.group!==!1}},ar=["sort","filter","group","q"];function Ve(e,t={}){let{store:n}=Q(),{view:r,go:a}=Ue(),o=e.nodes??[],g=t.subject??(t.only?o.filter(t.only):o),y=t.subject?[]:t.only?o.filter(i=>!t.only(i)):[],c=t.kind??g[0]?.kind,v=rr(t.allow,t.lensAllows),p=ar.some(i=>r.within?.[i]!==void 0)?it(r):t.arrangedBy??{},d=c?Jn(n.schema,String(c)):void 0,m=d?nt(p,d).arrangement:{},s=tt(g,v===!1?{}:m,{schema:n.schema,graph:n.graph,flagged:new Set(e.flagged??[])}),w=c&&v!==!1&&e.fidelity==="full"&&e.budget===void 0&&g.length>1?(0,yt.jsx)(lt,{schema:n.schema,graph:n.graph,kind:String(c),arrangement:m,allow:v,query:t.query!==!1,onChange:i=>a(ot(r,i)),kept:{shown:s.nodes.length,of:g.length}}):null;return{nodes:[...y,...s.nodes],arranged:s,arrangement:m,bar:w}}function Ke(e,t,n){let r=new Set((n??[]).map(o=>o.kind)),a=new Set((n??[]).map(o=>o.id));return e.allNodes().filter(o=>r.has(o.kind)?a.has(o.id):Ne(t.tryDefinition(o.kind),o))}var Me=G(ze(),1);var T=G(J(),1),ir=["slots","x","y","fill"],tn=class extends Error{constructor(n,r){super(`${n}
1
+ import{a as ft,b as Rn,c as ht}from"./chunk.6GJF3F7L.js";import{e as st,i as dt,j as ct}from"./chunk.I5U42VDK.js";import{b as $n,c as gt,d as On,e as ut,f as mt,g as pt}from"./chunk.QFJRXAU3.js";import{c as tt,d as Cn}from"./chunk.LEVR7WLB.js";import{e as nt}from"./chunk.TAW67PZU.js";import{a as Z,b as ue,c as Ae}from"./chunk.XNYBOKLW.js";import{f as lt}from"./chunk.UUMXYMOX.js";import{a as it,b as ot}from"./chunk.D3XF643V.js";import{c as rt,d as at}from"./chunk.NLFLFIDS.js";import{b as Be}from"./chunk.6LJ66MB7.js";import{Z as Xn,da as Q,fa as Zn,k as _e,ra as et,sa as Ue}from"./chunk.SVL6I37U.js";import{Eb as Re,Fa as Jn,Hb as kn,M as Ne,O as pe,T as De,U as en,V as Kn,X as xn,Y as Yn,Z as nn,ib as Qn,lb as ie,oa as Sn}from"./chunk.P7YN4Z3K.js";import{a as ze,b as J}from"./chunk.MRK6QJV5.js";import{b as G}from"./chunk.AJZBJBMO.js";var An=G(J(),1);function Ee(e,t,n){let r=e.nodes?.length??0;if(e.total===void 0||e.total<=r)return n;let a=e.nodes?.[0]?.kind,o=a?en(t,a).toLowerCase():"more";return(0,An.jsxs)("div",{style:{display:"grid",gridTemplateRows:"minmax(0, 1fr) auto",height:"100%",minHeight:0},children:[n,(0,An.jsxs)("p",{"data-testid":"lens-more",style:{margin:"4px 0 0",fontSize:"0.8125rem",color:"var(--graview-ink-muted)"},children:["+",e.total-r," more ",o]})]})}var yt=G(J(),1),rr=(e,t)=>{if(e===!1||t===!1)return!1;let n=e===void 0||e===!0?{}:e,r=t===void 0||t===!0?{}:t;return{sort:n.sort!==!1&&r.sort!==!1,filter:n.filter!==!1&&r.filter!==!1,group:n.group!==!1&&r.group!==!1}},ar=["sort","filter","group","q"];function Ve(e,t={}){let{store:n}=Q(),{view:r,go:a}=Ue(),o=e.nodes??[],g=t.subject??(t.only?o.filter(t.only):o),y=t.subject?[]:t.only?o.filter(i=>!t.only(i)):[],c=t.kind??g[0]?.kind,v=rr(t.allow,t.lensAllows),p=ar.some(i=>r.within?.[i]!==void 0)?it(r):t.arrangedBy??{},d=c?Jn(n.schema,String(c)):void 0,m=d?rt(p,d).arrangement:{},s=at(g,v===!1?{}:m,{schema:n.schema,graph:n.graph,flagged:new Set(e.flagged??[])}),w=c&&v!==!1&&e.fidelity==="full"&&e.budget===void 0&&g.length>1?(0,yt.jsx)(lt,{schema:n.schema,graph:n.graph,kind:String(c),arrangement:m,allow:v,query:t.query!==!1,onChange:i=>a(ot(r,i)),kept:{shown:s.nodes.length,of:g.length}}):null;return{nodes:[...y,...s.nodes],arranged:s,arrangement:m,bar:w}}function Ke(e,t,n){let r=new Set((n??[]).map(o=>o.kind)),a=new Set((n??[]).map(o=>o.id));return e.allNodes().filter(o=>r.has(o.kind)?a.has(o.id):Ne(t.tryDefinition(o.kind),o))}var Me=G(ze(),1);var T=G(J(),1),ir=["slots","x","y","fill"],tn=class extends Error{constructor(n,r){super(`${n}
2
2
  ${r}`);this.hint=r;this.name="BoardBindingError"}},wt=e=>Math.max(0,Math.min(1,e));function En(e,t,n,r){let a=s=>s,o=s=>r?pe(r.tryDefinition(s.kind),s):String(a(s).label??s.id);if(r&&r.tryDefinition(n.slots)===void 0)throw new tn(`No kind is declared for "${n.slots}".`,'Check the lens bindings: { slots: "<kind>", x: "<field>", y: "<field>", fill: "<edge kind>" }');let g=e.filter(s=>s.kind===n.slots);if(!r&&g.length===0)throw new tn(`Nothing to arrange: no "${n.slots}" nodes.`,'Check the lens bindings: { slots: "<kind>", x: "<field>", y: "<field>", fill: "<edge kind>" }');let y=t.filter(s=>s.kind===n.fill),c=new Map(e.map(s=>[s.id,s])),v=new Map(e.map((s,w)=>[s.id,w])),l=g.map(s=>{let w=a(s),i=n.fillFrom==="occupant",x=y.filter(S=>(i?S.to:S.from)===s.id).map(S=>c.get(i?S.from:S.to)).filter(S=>S!==void 0).sort((S,$)=>(v.get(S.id)??0)-(v.get($.id)??0)).map(S=>({id:S.id,label:o(S)}));return{id:s.id,code:String(w[n.slotCode??""]??"").trim()||o(s),label:o(s),x:wt(Number(w[n.x]??.5)),y:wt(Number(w[n.y]??.5)),occupants:x}}).sort((s,w)=>s.y-w.y||s.x-w.x),p=new Set(l.flatMap(s=>s.occupants.map(w=>w.id))),d=new Set([...p].map(s=>c.get(s)?.kind).filter(s=>s!==void 0)),m=e.filter(s=>d.has(s.kind)&&!p.has(s.id)).map(s=>({id:s.id,label:o(s)})).sort((s,w)=>s.label<w.label?-1:s.label>w.label?1:0);return{slots:l,empty:l.filter(s=>s.occupants.length===0).map(s=>s.id),spare:m}}function or({nodes:e,occupants:t,label:n,fidelity:r,mode:a,options:o,schema:g,implicated:y=[],flagged:c=[]}){let{store:v}=Q(),l=Ke(v.graph,v.schema,e),p=t?[...l.filter(h=>h.kind===o.slots),...t.map(h=>v.graph.getNode(h)).filter(h=>h!==void 0)]:l,d=En(p,v.graph.allEdges(),o,g),m=new Set(y),s=new Set(c),w=et(),i=new Map;for(let h of w)for(let I of h.nodeIds)i.set(I,[...i.get(I)??[],h.message]);let x=h=>h?i.get(h)??[]:[];if(r==="glyph")return(0,T.jsx)(ue,{label:`${n??"Board"} \xB7 ${d.slots.length-d.empty.length}/${d.slots.length}`,hue:ie("board")});if(r==="summary"){let h=d.slots.filter(I=>d.empty.includes(I.id));return(0,T.jsx)(Z,{title:n??"Board",meta:`${d.slots.length-d.empty.length}/${d.slots.length}`,tone:h.length>0?"warning":"muted",fit:!0,children:h.length>0?(0,T.jsx)(Ae,{pick:!0,max:5,items:h.map(I=>({id:I.id,label:I.code}))}):(0,T.jsx)("span",{style:{fontSize:"0.8125rem",color:"var(--graview-ink-faint)"},children:"Every slot filled."})})}let S=o.aspect??.68,$=(0,Me.useRef)(null),[M,R]=(0,Me.useState)(!1),[u,k]=(0,Me.useState)(null),f=160,[P,B]=(0,Me.useState)(!1);(0,Me.useEffect)(()=>{let h=$.current;if(!h||typeof ResizeObserver>"u")return;let I=new ResizeObserver(D=>{let q=D[0]?.contentRect;if(!q)return;let b=q.height<f;B(b),R(!b&&S<1&&q.width/q.height>1.3),k(b?null:q.height)});return I.observe(h),()=>I.disconnect()},[S]);let W=(h,I)=>M?{x:1-I,y:h}:{x:h,y:I},H=(()=>{let h=new Map,I=(D,q,b)=>{let C=h.get(b)??{ids:[],codes:[]};C.ids.includes(D)||(C.ids.push(D),C.codes.includes(q)||C.codes.push(q)),h.set(b,C)};for(let D of d.slots){for(let q of x(D.id))I(D.id,D.code,q);for(let q of D.occupants)for(let b of x(q.id))I(q.id,q.label,b)}return[...h.entries()].map(([D,q])=>({id:q.ids[0],code:q.codes.join(", "),text:D}))})(),j=a==="fullscreen",_=H.length===0?null:(0,T.jsxs)("ul",{"data-graview-primitive":"board-key",style:{margin:"2px 0 0",padding:0,listStyle:"none",display:"grid",gap:3,flex:"0 0 auto"},children:[H.slice(0,j?6:2).map(h=>(0,T.jsxs)("li",{"data-graview-pick":h.id,"data-graview-emphasis":m.size===0?"plain":m.has(h.id)?"lit":"dimmed",title:h.text,style:{display:j?"grid":"flex",gap:j?1:7,alignItems:j?"start":"baseline",fontSize:"0.8125rem",lineHeight:1.45,color:"var(--graview-ink-muted)",minHeight:24,width:"fit-content",maxWidth:"100%",padding:j?"2px 0":"3px 6px",marginLeft:j?0:-6,borderRadius:7,cursor:"pointer"},children:[(0,T.jsxs)("span",{style:{flex:"0 0 auto",fontWeight:600,color:"var(--graview-warn)",letterSpacing:"0.02em"},children:["\u26A0 ",h.code]}),(0,T.jsx)("span",{style:{minWidth:0,...j?{}:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},children:h.text})]},h.id)),H.length>(j?6:2)?(0,T.jsxs)("li",{style:{fontSize:"0.8125rem",color:"var(--graview-ink-faint)"},children:["+",H.length-(j?6:2)," more"]}):null]}),se=o.arrange==="shelf",me=d.slots.every(h=>h.code.length<=3&&!/\s/.test(h.code)),le=(h,I)=>{let D=h.occupants.length===0,q=m.size>0&&!m.has(h.id)&&!h.occupants.some(F=>m.has(F.id)),b=s.has(h.id),C=h.occupants.some(F=>s.has(F.id)),N=b,Y=[...x(h.id),...h.occupants.flatMap(F=>x(F.id))],ce=h.occupants.length===1?h.occupants[0]:null,ye=o.pickTarget==="slot"?h.id:ce?ce.id:h.id,re=F=>ce?{}:{"data-graview-pick":F.id,"data-graview-emphasis":m.size===0?"plain":q?"dimmed":"lit"},we=F=>s.has(F.id)?"var(--graview-warn)":"var(--graview-ink-muted)",Fe=o.emptyLabel??"empty";return(0,T.jsxs)("div",{"data-graview-pick":ye,"data-graview-slot":h.id,"data-graview-mark":me?"disc":"token","data-graview-flagged":b&&C?"both":b?"slot":C?"occupant":void 0,"data-graview-emphasis":m.size===0?"plain":q?"dimmed":"lit",title:[D?`${h.label} \u2014 nobody in it`:`${h.occupants.map(F=>F.label).join(", ")} at ${h.label}`,...Y].join(`
3
3
  `),style:{...I,display:"grid",justifyItems:me?"center":"start",gap:3,opacity:q?.5:1,transition:"opacity 160ms ease"},children:[me?(0,T.jsxs)("span",{style:{position:"relative",width:34,height:34,borderRadius:999,display:"grid",placeItems:"center",fontSize:"0.75rem",letterSpacing:"0.02em",border:D?"1.5px dashed var(--graview-warn)":`1px solid ${N?"var(--graview-warn)":"var(--graview-edge-bright)"}`,background:D?"transparent":N?"var(--graview-panel-warning)":"var(--graview-panel)",color:D||N?"var(--graview-warn)":"var(--graview-ink)",boxShadow:D?void 0:"var(--graview-lift-low)"},children:[h.code,b&&!D?(0,T.jsx)("span",{"aria-hidden":"true",style:{position:"absolute",top:-3,right:-3,fontSize:"0.6875rem",lineHeight:1,color:"var(--graview-warn)"},children:"\u26A0"}):null]}):(0,T.jsxs)("span",{style:{display:"grid",gap:1,minWidth:0,maxWidth:180,padding:"5px 10px 6px",borderRadius:8,border:D?"1.5px dashed var(--graview-warn)":`1px solid ${N?"var(--graview-warn)":"var(--graview-edge-bright)"}`,background:D?"transparent":N?"var(--graview-panel-warning)":"var(--graview-panel)",boxShadow:D?void 0:"var(--graview-lift-low)"},children:[(0,T.jsxs)("span",{style:{fontSize:"0.8125rem",fontWeight:550,lineHeight:1.25,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",color:D||N?"var(--graview-warn)":"var(--graview-ink)"},children:[h.code,b&&!D?" \u26A0":null]}),D?(0,T.jsx)("span",{style:{fontSize:"0.75rem",lineHeight:1.3,color:"var(--graview-warn)"},children:Fe}):(0,T.jsx)("span",{style:{display:"flex",flexWrap:"wrap",gap:"0 8px",fontSize:"0.75rem",lineHeight:1.3},children:h.occupants.map(F=>(0,T.jsxs)("span",{...re(F),style:{whiteSpace:"nowrap",color:we(F)},children:[F.label,s.has(F.id)?" \u26A0":""]},F.id))})]}),me?D?(0,T.jsx)("span",{style:{fontSize:"0.75rem",whiteSpace:"nowrap",color:"var(--graview-warn)"},children:Fe}):h.occupants.map(F=>(0,T.jsxs)("span",{...re(F),style:{fontSize:"0.75rem",whiteSpace:"nowrap",color:we(F)},children:[F.label,s.has(F.id)?" \u26A0":""]},F.id)):null]},h.id)},O=o.zones??[],L=O.map((h,I)=>({label:h.label,slots:d.slots.filter(D=>D.y>=h.from&&(D.y<h.to||I===O.length-1&&D.y<=h.to))})),A=new Set(L.flatMap(h=>h.slots.map(I=>I.id))),te=d.slots.filter(h=>!A.has(h.id));(te.length>0||L.length===0)&&L.push({label:"",slots:te});let he={boxSizing:"border-box",borderRadius:12,border:"1px solid var(--graview-edge)",background:"linear-gradient(var(--graview-panel-muted), var(--graview-panel-muted)), var(--graview-panel)",overflow:"hidden"};return(0,T.jsxs)(Z,{title:n??"Board",meta:d.slots.length===0?void 0:d.empty.length===0?`all ${d.slots.length} filled`:`${d.empty.length} unfilled`,...j?{style:{flex:"1 1 auto",minHeight:0,height:"100%"}}:{},children:[(0,T.jsxs)("div",{ref:$,style:{display:"flex",gap:28,alignItems:"stretch",justifyContent:"center",flex:"1 1 auto",minHeight:0},children:[j&&_?(0,T.jsxs)("div",{style:{width:260,flex:"0 0 auto",alignSelf:"center",display:"grid",gap:8},children:[(0,T.jsx)("span",{style:{fontSize:"0.75rem",letterSpacing:"0.14em",textTransform:"uppercase",color:"var(--graview-ink-faint)"},children:"What is marked"}),_]}):null,se?(0,T.jsx)("div",{"data-graview-primitive":"board","data-graview-arrange":"shelf",style:{...he,overflow:"auto",flex:"1 1 auto",minWidth:0,alignSelf:"stretch",display:"grid",alignContent:"start"},children:L.map((h,I)=>(0,T.jsxs)("section",{"data-graview-zone":h.label||void 0,style:{display:"grid",gap:8,padding:"10px 14px 14px",...I>0?{borderTop:"1px dashed var(--graview-edge)"}:{}},children:[h.label?(0,T.jsx)("span",{style:{fontSize:"0.6875rem",letterSpacing:"0.14em",textTransform:"uppercase",color:"var(--graview-ink-faint)"},children:h.label}):null,h.slots.length>0?(0,T.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:"10px 12px",alignItems:"flex-start"},children:h.slots.map(D=>le(D,{}))}):(0,T.jsx)("span",{style:{fontSize:"0.75rem",color:"var(--graview-ink-faint)"},children:"nothing here"})]},h.label||`band-${I}`))}):(0,T.jsxs)("div",{style:{display:"flex",gap:5,alignItems:"stretch",minWidth:0,...P?{flex:"1 1 auto",alignSelf:"flex-start"}:{}},children:[!M&&O.length>0?(0,T.jsx)("div",{"aria-hidden":"true",style:{position:"relative",width:15,flex:"0 0 auto",alignSelf:"stretch"},children:O.map(h=>(0,T.jsx)("span",{title:h.label,style:{position:"absolute",top:`${h.from*100}%`,height:`${(h.to-h.from)*100}%`,right:0,writingMode:"vertical-rl",transform:"rotate(180deg)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"0.6875rem",letterSpacing:"0.14em",textTransform:"uppercase",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",color:"var(--graview-ink-faint)"},children:h.label},h.label))}):null,(0,T.jsxs)("div",{"data-graview-primitive":"board","data-graview-arrange":"exact",style:{...he,position:"relative",aspectRatio:`${M?1/S:S}`,...P?{width:"100%",height:"auto",flex:"1 1 auto",minWidth:0,alignSelf:"flex-start"}:{height:"100%",flex:"0 1 auto",...u!==null?{width:Math.round(u*(M?1/S:S))}:{}},maxWidth:"100%"},children:[O.map(h=>(0,T.jsx)("div",{"aria-hidden":"true",style:{position:"absolute",...M?{top:0,bottom:0,left:`${(1-h.to)*100}%`,width:`${(h.to-h.from)*100}%`,borderLeft:"1px dashed var(--graview-edge)"}:{left:0,right:0,top:`${h.from*100}%`,height:`${(h.to-h.from)*100}%`,borderBottom:"1px dashed var(--graview-edge)"}}},h.label)),M?O.map(h=>(0,T.jsx)("span",{"aria-hidden":"true",title:h.label,style:{position:"absolute",bottom:3,left:`${(1-h.to)*100}%`,width:`${(h.to-h.from)*100}%`,textAlign:"center",fontSize:"0.6875rem",letterSpacing:"0.14em",textTransform:"uppercase",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",color:"var(--graview-ink-faint)"},children:h.label},`label-${h.label}`)):null,d.slots.map(h=>le(h,{position:"absolute",left:`${W(h.x,h.y).x*100}%`,top:`${W(h.x,h.y).y*100}%`,transform:"translate(-50%, -50%)",width:"max-content",maxWidth:"100%"}))]})]}),d.spare.length>0?(0,T.jsxs)("div",{style:{display:"grid",gap:6,alignContent:"start",minWidth:0},children:[(0,T.jsx)("span",{style:{fontSize:"0.75rem",letterSpacing:"0.14em",textTransform:"uppercase",color:"var(--graview-ink-faint)"},children:"Not in"}),(0,T.jsx)(Ae,{pick:!0,max:10,items:d.spare.map(h=>({...h,emphasis:m.size===0?"plain":m.has(h.id)?"lit":"dimmed"}))})]}):null]}),j?null:_]})}function vt(e){function t(n){let{store:r}=Q(),a=En(Ke(r.graph,r.schema,n.nodes),r.graph.allEdges(),e,r.schema),g=[...a.slots.flatMap(l=>l.occupants.map(p=>p.id)),...a.spare.map(l=>l.id)].map(l=>r.graph.getNode(l)).filter(l=>l!==void 0),{arranged:y,bar:c}=Ve(n,{...e.arranging!==void 0?{allow:e.arranging}:{},lensAllows:{group:!1},...e.arrangedBy?{arrangedBy:e.arrangedBy}:{},subject:g}),v=(0,T.jsx)(or,{schema:r.schema,...n,options:e,...e.arranging===!1?{}:{occupants:y.nodes.map(l=>l.id)}});return Ee(n,r.schema,c?(0,T.jsxs)("div",{style:{display:"grid",gap:6,height:"100%",minHeight:0,gridTemplateRows:"auto 1fr"},children:[c,v]}):v)}return{name:"board",requiredRoles:[...ir],options:e,View:t,build(n,r,a){return En(n,r,e,a)}}}var un=G(ze(),1);function Mn(e){if(typeof e!="string")return null;let t=/^(\d{4}-\d{2}-\d{2})/.exec(e);return t?t[1]:null}function an(e){if(typeof e!="string")return null;let t=/^\d{4}-\d{2}-\d{2}[T ](\d{2}):(\d{2})/.exec(e);return t?Number(t[1])*60+Number(t[2]):null}var rn=e=>Date.UTC(Number(e.slice(0,4)),Number(e.slice(5,7))-1,Number(e.slice(8,10))),on=e=>new Date(e).toISOString().slice(0,10);function Se(e,t){return on(rn(e)+t*864e5)}function Le(e,t){let n=Number(e.slice(0,4)),r=Number(e.slice(5,7))-1+t,a=Number(e.slice(8,10)),o=new Date(Date.UTC(n,r+1,0)).getUTCDate();return on(Date.UTC(n,r,Math.min(a,o)))}var ln=e=>new Date(rn(e)).getUTCDay();function We(e,t=1){let n=(ln(e)-t+7)%7;return Se(e,-n)}var Pn=e=>`${e.slice(0,7)}-01`;function oe(e,t){return Math.round((rn(t)-rn(e))/864e5)}function Ie(e,t){return Array.from({length:t},(n,r)=>Se(e,r))}var Ye=["January","February","March","April","May","June","July","August","September","October","November","December"],Tn=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],ke=e=>`${Tn[ln(e)]} ${Number(e.slice(8,10))} ${Ye[Number(e.slice(5,7))-1].slice(0,3)}`,Ln=e=>`${String(Math.floor(e/60)).padStart(2,"0")}:${String(e%60).padStart(2,"0")}`;function He(e,t){let n=t?.fieldRoles?.when;return e&&!e.start&&n?{...e,start:n}:e}function bt(e,t){return t===void 0?!1:typeof t=="string"?e[t]===!0:t.is.includes(e[t.field])}var sn=["start"],lr=["day","week","month","quarter","year","agenda"];function dn(e){return e.horizon?["day","week","month","quarter","year","years","agenda"]:lr}function xt(e,t){return e==="years"?t?.title??"Years":`The ${e}`}function St(){let e=new Date;return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`}var Nn=class extends Error{constructor(n,r){super(`The calendar lens has no binding for ${r.map(a=>`"${a}"`).join(", ")} on "${n}". Bind them in the lens declaration: bindings: { ${n}: { start: "<field>" } }.`);this.kind=n;this.missing=r;this.name="CalendarBindingError"}};function Dn(e,t,n){let r=He(t[e.kind],n?.tryDefinition(e.kind));if(!r)return null;let a=e,o=n?.tryDefinition(e.kind)?.fields.shape,g=sn.filter(p=>{let d=r[p];return d?o?!(d in o):!(d in a):!0});if(g.length>0)throw new Nn(e.kind,g);let y=Mn(a[r.start]);if(y===null)return null;let c=(r.end?Mn(a[r.end]):null)??y,v=an(a[r.start]),l=r.label?a[r.label]:void 0;return{id:e.id,kind:e.kind,label:typeof l=="string"&&l.length>0?l:pe(n?.tryDefinition(e.kind),e),from:y,to:oe(y,c)<0?y:c,at:r.allDay&&a[r.allDay]===!0?null:v,allDay:r.allDay&&a[r.allDay]===!0||v===null,done:bt(a,r.done)}}function cn(e,t){return e.filter(n=>oe(n.from,t)>=0&&oe(t,n.to)>=0).sort((n,r)=>n.allDay!==r.allDay?n.allDay?-1:1:n.at!==r.at?(n.at??0)-(r.at??0):n.label.localeCompare(r.label))}function kt(e,t,n){let r=Qn(e.schema,e.allMutations()).get(t)?.get(n)??[],a=new Map(e.allMutations().map(g=>[g.name,g]));for(let g of r){let y=a.get(g),c=y?.subject;if(!y||!c)continue;let v=y.input?.shape??{};if(n in v)return{name:y.name,arg:c.arg}}let o=e.allMutations().find(g=>g.derived?.act==="edit"&&g.derived.kind===t);return o?.subject?{name:o.name,arg:o.subject.arg}:null}var Ct=(e,t)=>({from:Pn(e),to:$t(e),label:`${Ye[Number(e.slice(5,7))-1].slice(0,3)}${t?` ${e.slice(2,4)}`:""}`});function $t(e){return on(Date.UTC(Number(e.slice(0,4)),Number(e.slice(5,7)),0))}function sr(e){let t=Math.floor((Number(e.slice(5,7))-1)/3);return`${e.slice(0,4)}-${String(t*3+1).padStart(2,"0")}-01`}function Ot(e,t,n={}){let r=n.weekStartsOn??1,a=(c,v)=>({from:c,to:c,label:String(Number(c.slice(8,10))),...v?{outside:!0}:{}});if(e==="day")return{title:ke(t),grain:"day",columns:1,cells:[a(t)]};if(e==="week"){let c=We(t,r);return{title:`${ke(c)} \u2013 ${ke(Se(c,6))}`,grain:"day",columns:7,cells:Ie(c,7).map(v=>a(v))}}if(e==="agenda")return{title:`From ${ke(t)}`,grain:"day",columns:1,cells:Ie(t,42).map(c=>a(c))};if(e==="quarter"){let c=sr(t),v=$t(Le(c,2)),l=[];for(let p=We(c,r);oe(p,v)>=0;p=Se(p,7))l.push({from:p,to:Se(p,6),label:`${Number(p.slice(8,10))} ${Ye[Number(p.slice(5,7))-1].slice(0,3)}`,...oe(p,c)>0&&oe(Se(p,6),c)>0?{outside:!0}:{}});return{title:`Q${Math.floor((Number(t.slice(5,7))-1)/3)+1} ${t.slice(0,4)}`,grain:"week",columns:4,cells:l}}if(e==="year"){let c=t.slice(0,4);return{title:c,grain:"month",columns:4,cells:Array.from({length:12},(v,l)=>Ct(`${c}-${String(l+1).padStart(2,"0")}-01`,!1))}}if(e==="years"){let c=Math.max(1,n.horizon?.years??1),v=Number(t.slice(0,4)),l=Array.from({length:c},(p,d)=>String(v+d));return c>dr?{title:`${n.horizon?.title??"Years"} \xB7 ${l[0]}\u2013${l[l.length-1]}`,grain:"year",columns:5,years:l,cells:l.map(p=>({from:`${p}-01-01`,to:`${p}-12-31`,label:p}))}:{title:`${n.horizon?.title??"Years"} \xB7 ${l[0]}\u2013${l[l.length-1]}`,grain:"month",columns:4,years:l,cells:l.flatMap(p=>Array.from({length:12},(d,m)=>Ct(`${p}-${String(m+1).padStart(2,"0")}-01`,!0)))}}let o=Pn(t),g=We(o,r),y=t.slice(0,7);return{title:`${Ye[Number(t.slice(5,7))-1]} ${t.slice(0,4)}`,grain:"day",columns:7,cells:Ie(g,42).map(c=>a(c,c.slice(0,7)!==y))}}function Rt(e,t,n){return e.filter(r=>oe(r.from,n)>=0&&oe(t,r.to)>=0).sort((r,a)=>r.allDay!==a.allDay?r.allDay?-1:1:r.from!==a.from?r.from.localeCompare(a.from):r.at!==a.at?(r.at??0)-(a.at??0):r.label.localeCompare(a.label))}var dr=10;function At(e){return e==="year"?"year":e==="month"?"month":e==="week"?"week":"day"}var Et=G(ze(),1);var ee=G(J(),1);function zn({label:e,glyph:t,onPress:n}){return(0,ee.jsx)("button",{type:"button","aria-label":e,title:e,onClick:n,style:Ge,children:t})}var Ge={minHeight:24,minWidth:24,padding:"2px 9px",borderRadius:6,fontSize:"0.8125rem",borderWidth:1,borderStyle:"solid",borderColor:"transparent",color:"var(--graview-ink-muted)",background:"transparent"},Mt={day:12,week:4,month:3,year:5};function Pt({span:e,weekStartsOn:t,entries:n,today:r,perCell:a,emphasisOf:o,broken:g,hue:y,onOpen:c,onMove:v}){let l=(0,Et.useRef)(null),p=Be(l),d=p===null?e.columns:Math.max(1,Math.floor(p/44)),m=d<e.columns,s=m?d:e.columns,w=!m&&e.grain==="day"&&e.columns===7?Ie(We(e.cells[0]?.from??r,t),7):e.grain==="day"&&e.columns===1?e.cells.map(i=>i.from):null;return m&&e.grain==="day"&&e.columns>1?(0,ee.jsx)("div",{ref:l,"data-calendar-shape":"agenda",style:{display:"grid",minHeight:0,flex:1},children:(0,ee.jsx)(gn,{days:e.cells.map(i=>i.from),entries:n,today:r,emphasisOf:o,broken:g,hue:y,onMove:(i,x)=>v(i,{from:x,to:x,label:x},"day")})}):(0,ee.jsxs)("div",{ref:l,"data-calendar-shape":m?"wrapped":"grid",style:{display:"grid",gap:4,gridTemplateRows:w?"auto 1fr":"1fr",minHeight:0,flex:1},children:[w?(0,ee.jsx)("div",{style:{display:"grid",gridTemplateColumns:`repeat(${s}, minmax(0, 1fr))`,gap:4},children:w.map(i=>(0,ee.jsx)("span",{style:{fontSize:"0.75rem",letterSpacing:"0.16em",textTransform:"uppercase",color:"var(--graview-ink-muted)",textAlign:"center"},children:e.columns===7?Tn[ln(i)]:ke(i)},i))}):null,(0,ee.jsx)("div",{tabIndex:0,"aria-label":`The days of ${e.title}`,style:{display:"grid",gridTemplateColumns:`repeat(${s}, minmax(0, 1fr))`,gridAutoRows:"max-content",gap:4,minHeight:0,overflow:"auto"},children:e.cells.map((i,x)=>{let S=Rt(n,i.from,i.to),$=S.slice(0,a),M=S.slice(a),R=M.filter(k=>g.has(k.id)).length,u=oe(i.from,r)>=0&&oe(r,i.to)>=0;return(0,ee.jsxs)("div",{"data-calendar-day":e.grain==="day"?i.from:void 0,"data-calendar-cell":i.from,"data-calendar-grain":e.grain,"data-calendar-count":S.length,"data-calendar-outside":i.outside||void 0,onDragOver:k=>{k.dataTransfer.types.includes("text/graview-node")&&(k.preventDefault(),k.dataTransfer.dropEffect="move")},onDrop:k=>{let f=k.dataTransfer.getData("text/graview-node");f&&(k.preventDefault(),k.stopPropagation(),v(f,i,e.grain))},style:{minHeight:62,display:"flex",flexDirection:"column",gap:2,padding:4,borderRadius:7,border:"1px solid var(--graview-edge)",background:u?"var(--graview-panel)":"transparent",opacity:i.outside?.45:1},children:[(0,ee.jsxs)("span",{style:{display:"flex",alignItems:"baseline",gap:4},children:[(0,ee.jsx)("span",{style:{fontSize:"0.75rem",fontVariantNumeric:"tabular-nums",color:u?"var(--graview-accent)":"var(--graview-ink-faint)"},children:i.label}),e.grain!=="day"&&S.length>0?(0,ee.jsx)("span",{style:{fontSize:"0.75rem",color:"var(--graview-ink-faint)",marginLeft:"auto"},children:S.length}):null]}),$.map(k=>(0,ee.jsx)(Tt,{entry:k,cell:i,rowStart:x%s===0,emphasis:o(k.id),flagged:g.has(k.id),hue:y(k)},`${k.id}:${i.from}`)),M.length>0?(0,ee.jsxs)("button",{type:"button","data-testid":`calendar-more-${i.from}`,onClick:()=>c(i),title:`Open ${i.label}`,style:{minHeight:24,padding:"1px 5px",fontSize:"0.75rem",borderRadius:5,border:"1px dashed var(--graview-edge)",background:"transparent",color:R>0?"var(--graview-warn)":"var(--graview-ink-muted)",textAlign:"left"},children:["+",M.length," more",R>0?` \xB7 ${R} flagged`:""]}):null]},i.from)})})]})}function gn({days:e,entries:t,today:n,emphasisOf:r,broken:a,hue:o,onMove:g}){let y=e.map(c=>({day:c,here:cn(t,c)})).filter(({here:c})=>c.length>0);return y.length===0?(0,ee.jsx)("p",{"data-testid":"calendar-empty",style:{margin:0,fontSize:"0.875rem",color:"var(--graview-ink-muted)"},children:"Nothing is scheduled in the next six weeks."}):(0,ee.jsx)("ol",{tabIndex:0,"aria-label":"What is scheduled",style:{margin:0,padding:0,listStyle:"none",display:"grid",alignContent:"start",gap:10,overflow:"auto",minHeight:0},children:y.map(({day:c,here:v})=>(0,ee.jsxs)("li",{"data-calendar-day":c,onDragOver:l=>{l.dataTransfer.types.includes("text/graview-node")&&(l.preventDefault(),l.dataTransfer.dropEffect="move")},onDrop:l=>{let p=l.dataTransfer.getData("text/graview-node");p&&(l.preventDefault(),l.stopPropagation(),g(p,c))},style:{display:"grid",gap:4},children:[(0,ee.jsxs)("span",{style:{fontSize:"0.75rem",letterSpacing:"0.16em",textTransform:"uppercase",color:c===n?"var(--graview-accent)":"var(--graview-ink-muted)"},children:[ke(c),c===n?" \xB7 today":""]}),v.map(l=>(0,ee.jsx)(Tt,{entry:l,cell:{from:c,to:c,label:c},emphasis:r(l.id),flagged:a.has(l.id),hue:o(l)},`${l.id}:${c}`))]},c))})}function Tt({entry:e,cell:t,emphasis:n,flagged:r,hue:a,rowStart:o=!1}){let g=oe(t.from,e.from)>=0,y=oe(e.to,t.to)>=0,c=!(g&&y),v=e.at!==null&&g&&e.from===t.from?`${Ln(e.at)} ${e.label}`:e.label;return(0,ee.jsx)("span",{"data-graview-pick":e.id,"data-calendar-entry":e.id,draggable:!0,onDragStart:l=>{l.dataTransfer.setData("text/graview-node",e.id),l.dataTransfer.effectAllowed="move"},"data-graview-emphasis":n,"data-calendar-part":c?g?"opens":y?"closes":"through":void 0,"data-calendar-in":t.from,title:c?`${e.label} \xB7 ${e.from} \u2013 ${e.to}`:`${e.label}${e.at===null?" \xB7 all day":` \xB7 ${Ln(e.at)}`}`,style:{display:"block",minHeight:24,boxSizing:"border-box",padding:"3px 6px",fontSize:"0.75rem",lineHeight:1.35,borderRadius:c?g?"5px 0 0 5px":y?"0 5px 5px 0":0:5,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",textDecoration:e.done?"line-through":"none",opacity:n==="dimmed"?.35:e.done?.6:1,background:`color-mix(in oklab, hsl(${Math.round(a)} 70% 55%) ${n==="lit"?38:20}%, transparent)`,color:"var(--graview-ink)",...n==="lit"?{outline:"1px solid var(--graview-accent)"}:{},...r?{borderLeft:"3px solid var(--graview-warn)",paddingLeft:4}:{}},children:g||o?v:" "})}var U=G(J(),1);function Lt(e){let t=n=>function(a){let{store:o}=Q(),{view:g}=Ue(),y=n?{...e,range:n}:e,c=g.within?.range??y.range??"month",v=Object.keys(e.bindings),{nodes:l,arranged:p,arrangement:d,bar:m}=Ve(a,{...e.arranging!==void 0?{allow:e.arranging}:{},lensAllows:{sort:!1,group:c==="agenda"},...e.arrangedBy?{arrangedBy:e.arrangedBy}:{},...v[0]?{kind:(a.nodes??[]).find(S=>v.includes(String(S.kind)))?.kind??v[0]}:{}}),s=c==="agenda"&&p.grouped&&d.group?p.groups.map(S=>({label:S.label,ids:new Set(S.nodes.map($=>$.id))})):void 0,w=new Set((a.nodes??[]).map(S=>String(S.kind))),i=v.filter(S=>!w.has(S)&&o.schema.tryDefinition(S)!==void 0).flatMap(S=>{let $=o.schema.tryDefinition(S);return o.graph.nodesOfKind(S).filter(M=>g.past===!0||Ne($,M))}),x=i.length===0?l:[...l,...a.budget!==void 0?i.slice(0,a.budget):i];return Ee(a,o.schema,(0,U.jsx)(cr,{schema:o.schema,...a,nodes:x,options:{...y,today:y.today??o.today()??St()},...m?{bar:m}:{},...s?{groups:s}:{}}))};return{name:"calendar",requiredRoles:[...sn],bindings:e.bindings,options:e,View:t(),at:n=>t(n),ranges:()=>dn(e).map(n=>({range:n,title:xt(n,e.horizon)})),place:(n,r)=>n.map(a=>Dn(a,e.bindings,r)).filter(a=>a!==null)}}function cr({nodes:e,label:t,fidelity:n,mode:r,options:a,schema:o,selectedIds:g=[],implicated:y=[],flagged:c=[],bar:v,groups:l}){let{view:p,go:d}=Ue(),{store:m,principal:s}=Q(),w=p.within?.at??a.today,i=p.within?.range??a.range??"month",x=a.weekStartsOn??1,S=new Set([...y,...g]),$=O=>S.size===0?"plain":S.has(O)?"lit":"dimmed",M=new Set(c),R=(e??[]).map(O=>Dn(O,a.bindings,o)).filter(O=>O!==null),u=a.hueOf??(O=>ie(O.kind));if(n==="glyph")return(0,U.jsx)(ue,{label:`${t??"Calendar"} \xB7 ${R.length}`,hue:ie("calendar")});if(n==="summary"){let O=cn(R,a.today);return(0,U.jsx)(Z,{title:t??"Calendar",meta:`${R.length} dated`,tone:"muted",children:(0,U.jsx)(Ae,{max:6,items:O.length>0?O.map(L=>({id:L.id,label:L.label,hue:u(L)})):R.filter(L=>oe(a.today,L.from)>=0).sort((L,A)=>L.from.localeCompare(A.from)).slice(0,6).map(L=>({id:L.id,label:`${L.from.slice(5)} ${L.label}`,hue:u(L)}))})})}let k=r==="fullscreen",f=Ot(i,w,{weekStartsOn:x,...a.horizon?{horizon:a.horizon}:{}}),[P,B]=(0,un.useState)(null),W=(O,L,A)=>{let te=m.graph.getNode(O);if(!te)return;let he=He(a.bindings[te.kind],m.schema.tryDefinition(te.kind));if(!he)return;let h=kt(m,te.kind,he.start);if(!h){B({text:`Nothing declared writes the ${xn(m.schema.definitions.find(Y=>Y.kind===te.kind),he.start).toLowerCase()}, so this cannot be moved from here.`,tone:"refused"});return}let I=L.from,D=te[he.start],b=an(D)===null?I:`${I}${String(D).slice(10)}`,C={name:h.name,args:{[h.arg]:O,[he.start]:b}},N=m.permits(C,s);if(!N.ok){B({text:N.refusal.message,tone:"refused"});return}try{m.apply(C,{author:s}),B(A==="day"?null:{text:`Moved to ${ke(I)} \u2014 a ${A} is coarser than the ${xn(m.schema.definitions.find(Y=>Y.kind===te.kind),he.start).toLowerCase()} holds, so it takes the first day of the cell. Undo puts it back.`,tone:"rounded"})}catch(Y){B({text:Y instanceof Error?Y.message:String(Y),tone:"refused"})}},H=O=>{let L=i==="years"?Le(w,O*12*Math.max(1,a.horizon?.years??1)):i==="year"?Le(w,O*12):i==="quarter"?Le(w,O*3):i==="month"?Le(w,O):i==="week"?Se(w,O*7):Se(w,O);d(_e(p,"at",L))},j=(O,L)=>{let A=_e(p,"range",O);L!==void 0&&(A=_e(A,"at",L)),d(A)},_=(0,un.useRef)(null),se=Be(_),me=se!==null&&se<420,le=O=>O==="years"?a.horizon?.title??"years":O.charAt(0).toUpperCase()+O.slice(1);return(0,U.jsx)(Z,{title:t??"Calendar",meta:f.title,style:{gap:10,...k?{flex:"1 1 auto",minHeight:0,height:"100%"}:{}},children:(0,U.jsxs)("div",{ref:_,"data-testid":"calendar","data-calendar-range":i,"data-calendar-at":w,style:{display:"flex",flexDirection:"column",height:"100%",minHeight:0,gap:8},children:[(0,U.jsxs)("div",{style:{display:"flex",alignItems:"center",flexWrap:"wrap",gap:6},children:[(0,U.jsxs)("nav",{"aria-label":"When",style:{display:"flex",gap:4},children:[(0,U.jsx)(zn,{label:"Previous",glyph:"\u2039",onPress:()=>H(-1)}),(0,U.jsx)("button",{type:"button","data-testid":"calendar-today",onClick:()=>d(_e(p,"at",a.today)),style:Ge,children:"Today"}),(0,U.jsx)(zn,{label:"Next",glyph:"\u203A",onPress:()=>H(1)})]}),me?(0,U.jsx)("select",{"aria-label":"Range","data-testid":"calendar-ranges",value:i,onChange:O=>j(O.target.value),style:{...Ge,borderRadius:999,borderColor:"var(--graview-edge)",background:void 0,backgroundColor:"transparent",marginLeft:"auto",maxWidth:"50%",paddingRight:24,appearance:"none",WebkitAppearance:"none",backgroundImage:"linear-gradient(45deg, transparent 50%, currentColor 50%), linear-gradient(135deg, currentColor 50%, transparent 50%)",backgroundPosition:"calc(100% - 13px) 55%, calc(100% - 9px) 55%",backgroundSize:"4px 4px, 4px 4px",backgroundRepeat:"no-repeat"},children:dn(a).map(O=>(0,U.jsx)("option",{value:O,children:le(O)},O))}):(0,U.jsx)("div",{role:"group","aria-label":"Range","data-testid":"calendar-ranges",style:{display:"flex",flexWrap:"wrap",gap:4,marginLeft:"auto"},children:dn(a).map(O=>(0,U.jsx)("button",{type:"button","aria-pressed":O===i,"data-testid":`calendar-range-${O}`,onClick:()=>j(O),style:{...Ge,borderRadius:999,borderColor:"var(--graview-edge)",...O==="years"?{}:{textTransform:"capitalize"},...O===i?{borderColor:"var(--graview-accent)",color:"var(--graview-accent)",background:"var(--graview-panel)"}:{}},children:O==="years"?a.horizon?.title??"years":O},O))})]}),P?(0,U.jsx)("p",{"data-testid":P.tone==="refused"?"calendar-refused":"calendar-rounded",role:"status",style:{margin:0,fontSize:"0.8125rem",color:P.tone==="refused"?"var(--graview-warn)":"var(--graview-ink-muted)"},children:P.text}):null,f.years?(0,U.jsx)("nav",{"aria-label":"Years","data-testid":"calendar-years",style:{display:"flex",flexWrap:"wrap",gap:4},children:f.years.map(O=>(0,U.jsx)("button",{type:"button","data-testid":`calendar-year-${O}`,onClick:()=>j("year",`${O}-01-01`),style:Ge,children:O},O))}):null,v,i==="agenda"&&l?(0,U.jsx)("div",{"data-testid":"calendar-groups",style:{display:"grid",gap:10,minHeight:0,overflow:"auto"},children:l.map(O=>(0,U.jsxs)("section",{"data-testid":"calendar-group",style:{display:"grid",gap:4},children:[(0,U.jsxs)("h3",{style:{margin:0,fontSize:"0.8125rem",letterSpacing:"0.08em",textTransform:"uppercase",color:"var(--graview-ink-muted)"},children:[O.label," ",(0,U.jsx)("span",{style:{fontWeight:400},children:O.ids.size})]}),(0,U.jsx)(gn,{days:f.cells.map(L=>L.from),entries:R.filter(L=>O.ids.has(L.id)),today:a.today,emphasisOf:$,broken:M,hue:u,onMove:(L,A)=>W(L,{from:A,to:A,label:A},"day")})]},O.label))}):i==="agenda"?(0,U.jsx)(gn,{days:f.cells.map(O=>O.from),entries:R,today:a.today,emphasisOf:$,broken:M,hue:u,onMove:(O,L)=>W(O,{from:L,to:L,label:L},"day")}):(0,U.jsx)(Pt,{span:f,weekStartsOn:x,entries:R,today:a.today,perCell:a.perCell??Mt[f.grain],emphasisOf:$,broken:M,hue:u,onOpen:O=>j(At(f.grain),O.from),onMove:W})]})})}var fe=G(ze(),1);var V=G(J(),1),gr=`
4
4
  .graview-columns { display: flex; flex-wrap: wrap; gap: 10px; align-items: flex-start; }
@@ -20,4 +20,4 @@ import{a as ft,b as Rn,c as ht}from"./chunk.ORJ3T4IW.js";import{b as $n,c as gt,
20
20
  .graview-columns-said[data-tone="refused"] { color: var(--graview-warn); }
21
21
  `;function Dt(e){function t(n){let{store:r}=Q();Zn();let a=Object.keys(e.bindings).filter(s=>r.schema.tryDefinition(s)!==void 0),o=n.nodes??[],g=new Set(o.map(s=>String(s.kind))),y=s=>r.graph.nodesOfKind(s).filter(w=>Ne(r.schema.tryDefinition(s),w)),c=n.total!==void 0&&n.total>o.length,v=a.map(s=>{let w=e.bindings[s].column,i=ft(r.schema,s,w),x=g.has(s)?o.filter($=>$.kind===s):y(s).slice(0,n.budget??1/0),S=g.has(s)&&!c?x:y(s);return{kind:s,field:w,columns:i.map($=>({column:$,cards:x.filter(M=>Rn(M,w,i)===$.value),count:S.filter(M=>Rn(M,w,i)===$.value).length})).filter($=>$.column.value!==null||$.count>0)}}),l=v.reduce((s,w)=>s+w.columns.reduce((i,x)=>i+x.count,0),0),p=n.label??"Board",d=a[0];if(n.fidelity==="glyph")return(0,V.jsx)(ue,{label:`${p} \xB7 ${l}`,hue:ie("columns")});if(n.fidelity==="summary")return(0,V.jsx)(Z,{title:p,meta:d?De(r.schema,d,l):String(l),tone:"muted",children:(0,V.jsx)("p",{style:{margin:0,fontSize:"0.8125rem",color:"var(--graview-ink-muted)"},"data-testid":"columns-summary",children:v.flatMap(s=>s.columns.map(w=>`${w.column.label} ${w.count}`)).join(" \xB7 ")})});let m=(0,V.jsx)(ur,{boards:v,title:p});return Ee(n,r.schema,n.mode==="fullscreen"?(0,V.jsx)("div",{style:{padding:"14px 16px"},children:m}):(0,V.jsx)(Z,{title:p,meta:d?De(r.schema,d,l):void 0,children:m}))}return{name:"columns",requiredRoles:["column"],bindings:e.bindings,View:t}}function ur({boards:e,title:t}){let{store:n,principal:r}=Q(),a=(0,fe.useRef)(null),[o,g]=(0,fe.useState)(null),[y,c]=(0,fe.useState)(null),[v,l]=(0,fe.useState)(null),[p,d]=(0,fe.useState)(null);(0,fe.useLayoutEffect)(()=>{if(!p)return;a.current?.querySelector(p)?.focus(),d(null)});let m=x=>{let S=n.graph.getNode(x);return S?pe(n.schema.tryDefinition(S.kind),S):x},s=(x,S)=>ht(n,r,x,S.field,S.columns.map($=>$.column)),w=(x,S,$,M)=>{try{let R=n.apply(S.call,{author:r});g({text:`Moved \u201C${m(x)}\u201D to ${$}.`,tone:"moved",batch:R.batch,id:x}),M==="keyboard"&&d(`[data-columns-move="${Nt(x)}"] > button`)}catch(R){g({text:R instanceof Error?R.message:String(R),tone:"refused"})}},i=()=>{if(o?.batch)try{n.undo(o.batch,{author:r}),g({text:`\u201C${m(o.id??"")}\u201D is back where it was.`,tone:"moved"}),o.id&&d(`[data-columns-move="${Nt(o.id)}"] > button`)}catch(x){g({text:x instanceof Error?x.message:String(x),tone:"refused"})}};return(0,V.jsxs)("div",{ref:a,"data-testid":"columns-lens",children:[(0,V.jsx)("style",{children:gr}),(0,V.jsxs)("p",{className:"graview-columns-said",role:"status","data-tone":o?.tone,"data-testid":"columns-said",style:o?void 0:{position:"absolute",width:1,height:1,overflow:"hidden",clipPath:"inset(50%)"},children:[o?(0,V.jsx)("span",{children:o.text}):null,o?.batch?(0,V.jsx)("button",{type:"button","data-testid":"columns-undo",onClick:i,children:"Undo"}):null]}),e.map(x=>(0,V.jsx)("section",{"data-columns-kind":x.kind,"aria-label":`${Kn(n.schema,x.kind)} by ${x.field}`,children:(0,V.jsx)("div",{className:"graview-columns",children:x.columns.map(({column:S,cards:$,count:M})=>{let R=S.value??"",u=y!==null&&S.value!==null&&y.to.includes(S.value);return(0,V.jsxs)("section",{className:"graview-columns-column","data-graview-column":R,"data-droppable":u||void 0,"data-over":u&&v===R||void 0,"aria-label":`${t} \xB7 ${S.label}, ${M}`,"data-graview-named-by-lens":"",onDragOver:k=>{u&&(k.preventDefault(),k.dataTransfer.dropEffect="move",l(R))},onDragLeave:()=>l(k=>k===R?null:k),onDrop:k=>{let f=k.dataTransfer.getData("text/graview-node"),P=n.graph.getNode(f);if(l(null),c(null),!P||S.value===null)return;let B=s(P,x).find(W=>W.to===S.value);B&&(k.preventDefault(),k.stopPropagation(),w(f,B,S.label,"drag"))},children:[(0,V.jsxs)("h3",{className:"graview-columns-heading",children:[(0,V.jsx)("span",{children:S.label}),(0,V.jsx)("span",{className:"graview-columns-count","data-testid":"columns-count",children:M})]}),$.length===0?(0,V.jsx)("p",{className:"graview-columns-empty",children:"Nothing here."}):(0,V.jsx)("ul",{className:"graview-columns-cards",children:(0,V.jsx)(st.Provider,{value:S.value===null?null:{field:x.field,values:[S.value,S.label]},children:$.map(k=>{let f=s(k,x);return(0,V.jsx)(mr,{card:k,moves:f,labelOf:P=>x.columns.find(B=>B.column.value===P)?.column.label??P,onMove:(P,B)=>w(k.id,P,B,"keyboard"),onDrag:P=>c(P?{id:k.id,to:f.map(B=>B.to)}:null)},k.id)})})})]},R)})})},x.kind))]})}var Nt=e=>typeof globalThis.CSS?.escape=="function"?globalThis.CSS.escape(e):e.replace(/["\\]/g,"\\$&");function mr({card:e,moves:t,labelOf:n,onMove:r,onDrag:a}){let{store:o,views:g}=Q(),[y,c]=(0,fe.useState)(!1),v=(0,fe.useRef)(null),l=(0,fe.useRef)(null),p=pe(o.schema.tryDefinition(e.kind),e),d=g.lookup(e.kind,{cardinality:"one",fidelity:"summary"});(0,fe.useLayoutEffect)(()=>{y&&v.current?.querySelector("button")?.focus()},[y]);let m=()=>{c(!1),l.current?.focus()},s=w=>{let i=[...v.current?.querySelectorAll("button")??[]],x=i.indexOf(document.activeElement);w.key==="Escape"?(w.preventDefault(),w.stopPropagation(),m()):(w.key==="ArrowDown"||w.key==="ArrowUp")&&(w.preventDefault(),w.stopPropagation(),i[(x+(w.key==="ArrowDown"?1:i.length-1))%i.length]?.focus())};return(0,V.jsxs)("li",{className:"graview-spec-item graview-columns-card","data-graview-listed":e.id,"data-as":"card",draggable:t.length>0||void 0,onDragStart:w=>{t.length!==0&&(w.dataTransfer.setData("text/graview-node",e.id),w.dataTransfer.effectAllowed="move",a(!0))},onDragEnd:()=>a(!1),children:[d?(0,V.jsx)(Xn,{mode:"scene",children:(0,V.jsx)(d,{node:e,cardinality:"one",fidelity:"summary",mode:"scene",selected:!1})}):(0,V.jsx)("span",{className:"graview-spec-item-name",children:p}),(0,V.jsx)(dt,{node:e,label:p}),t.length>0?(0,V.jsxs)("div",{className:"graview-columns-move","data-columns-move":e.id,"data-open":y||void 0,onBlur:w=>{w.currentTarget.contains(w.relatedTarget)||c(!1)},children:[(0,V.jsx)("button",{ref:l,type:"button","aria-haspopup":"menu","aria-expanded":y,"aria-label":`Move \u201C${p}\u201D to another column`,"data-testid":"columns-move",onClick:()=>c(w=>!w),children:"Move\u2026"}),y?(0,V.jsx)("div",{ref:v,role:"menu","aria-label":`Move \u201C${p}\u201D to`,className:"graview-columns-menu",onKeyDown:s,onMouseDown:w=>w.preventDefault(),children:t.map(w=>(0,V.jsx)("button",{type:"button",role:"menuitem","data-columns-to":w.to,title:w.title,onClick:()=>{c(!1),r(w,n(w.to))},children:n(w.to)},w.to))}):null]}):null]})}var ve=G(ze(),1);var z=G(J(),1),pr=["rows","columns","link"],Je=class extends Error{constructor(n,r){super(`${n}
22
22
  ${r}`);this.hint=r;this.name="CoverageBindingError"}},Bn=(e,t)=>t&&e[t]!==void 0?String(e[t]):"",fr=40,hr=24;function yr(e,t={}){let n=t.rows??fr,r=t.columns??hr;if(e.rows.length<=n&&e.columns.length<=r)return e;let a=new Map;for(let l of e.cells)a.set(l.rowId,(a.get(l.rowId)??0)+1),a.set(`col:${l.columnId}`,(a.get(`col:${l.columnId}`)??0)+1);let o=(l,p,d)=>{if(l.length<=p)return l;let m=new Set(l.map((s,w)=>({item:s,index:w,count:a.get(d(s))??0})).sort((s,w)=>w.count-s.count||s.index-w.index).slice(0,p).map(s=>s.item.id));return l.filter(s=>m.has(s.id))},g=o(e.rows,n,l=>l.id),y=o(e.columns,r,l=>`col:${l.id}`),c=new Set(g.map(l=>l.id)),v=new Set(y.map(l=>l.id));return{...e,rows:g,columns:y,cells:e.cells.filter(l=>c.has(l.rowId)&&v.has(l.columnId)),of:{rows:e.rows.length,columns:e.columns.length}}}function It(e,t,n,r){let a=u=>u,o=u=>r?pe(r.tryDefinition(u.kind),u):String(a(u).label??u.id),g=r?[n.rows,n.columns].filter(u=>r.tryDefinition(u)===void 0):[];if(g.length>0)throw new Je(`No kind is declared for ${g.map(u=>`"${u}"`).join(" or ")}.`,'Check the lens bindings: { rows: "<kind>", columns: "<kind>", link: "<edge kind>" }');if(r&&typeof n.link!="string"){let u=kn(r,n.columns,n.link.path);if(!u.ok||!u.reached.has(n.rows)){let k=kn(r,n.columns,[...n.link.path].reverse());throw new Je(k.ok&&k.reached.has(n.rows)?`The path runs from the ${n.rows} to the ${n.columns}; it is walked from the columns.`:`The path [${n.link.path.join(", ")}] cannot get from a ${n.columns} to a ${n.rows}.`,`Name it column end first: link: { path: [${[...n.link.path].reverse().map(f=>JSON.stringify(f)).join(", ")}] }`)}}let y=e.filter(u=>u.kind===n.rows),c=e.filter(u=>u.kind===n.columns);if(!r&&y.length===0&&c.length===0)throw new Je(`Nothing to lay out: no "${n.rows}" and no "${n.columns}" nodes.`,'Check the lens bindings: { rows: "<kind>", columns: "<kind>", link: "<edge kind>" }');let v=n.groupOrder??[],l=u=>{let k=v.indexOf(u);return k===-1?v.length:k},p=n.badge?t.filter(u=>u.kind===n.badge.edge):[],d=new Set(y.map(u=>u.id)),m=new Set(c.map(u=>u.id)),s=[];if(typeof n.link=="string"){let u=n.link,k=t.filter(H=>H.kind===u),f=H=>r?.tryDefinition?.(H)?.edges?.[u]?.to,P=(f(n.columns)??[]).some(H=>H===n.rows||H==="*"),B=(f(n.rows)??[]).some(H=>H===n.columns||H==="*"),W=P||!B;for(let H of k){let j=W?H.to:H.from,_=W?H.from:H.to;d.has(j)&&m.has(_)&&s.push({rowId:j,columnId:_})}}else{let u=new Map;for(let f of new Set(n.link.path))u.set(f,new Map);for(let f of t){let P=u.get(f.kind);if(!P)continue;let B=P.get(f.from);B?B.push(f.to):P.set(f.from,[f.to]);let W=P.get(f.to);W?W.push(f.from):P.set(f.to,[f.from])}let k=new Set;for(let f of c){let P=[{id:f.id,via:[]}];for(let B of n.link.path){let W=[],H=new Set,j=u.get(B);for(let _ of P)for(let se of j.get(_.id)??[])H.has(`${_.id}|${se}`)||(H.add(`${_.id}|${se}`),W.push({id:se,via:[..._.via,_.id]}));P=W}for(let B of P){if(!d.has(B.id))continue;let W=`${B.id}|${f.id}`;k.has(W)||(k.add(W),s.push({rowId:B.id,columnId:f.id,via:B.via.slice(1)}))}}}let w=new Set(n.requiredGroups??[]),i=n.requiredVia?new Set(t.filter(u=>u.kind===n.requiredVia.edge).map(u=>u.to)):null,x=new Set(s.map(u=>u.rowId)),S=new Set(s.map(u=>u.columnId)),$=new Set(p.map(u=>u.to)),M=y.map(u=>{let k=a(u),f=Bn(k,n.rowGroup);return{id:u.id,ref:Bn(k,n.rowRef),label:String(k.label??o(u)),group:f,required:i?i.has(u.id):w.size===0||w.has(f),covered:x.has(u.id),badged:$.has(u.id)}}).sort((u,k)=>l(u.group)-l(k.group)||(u.ref<k.ref?-1:u.ref>k.ref?1:0)),R=c.map(u=>({id:u.id,label:o(u),used:S.has(u.id),group:Bn(a(u),n.columnGroup)})).sort((u,k)=>u.group<k.group?-1:u.group>k.group?1:u.id<k.id?-1:u.id>k.id?1:0).map(({group:u,...k})=>k);return{rows:M,columns:R,cells:s,gaps:M.filter(u=>u.required&&!u.covered).map(u=>u.id),unasked:R.filter(u=>!u.used).map(u=>u.id)}}var zt=316,Vn=58,Wn=176,wr=Math.sin(Vn*Math.PI/180),vr=Math.cos(Vn*Math.PI/180),br=e=>{let t=e.reduce((r,a)=>Math.max(r,a.length),0),n=Math.min(Wn,Math.max(46,t*5.4+12));return Math.ceil(n*wr)+8},Bt=Math.ceil(Wn*vr),Vt=(e,t)=>en(e,t).toLowerCase(),Ht=(e,t)=>nn(e.tryDefinition(t),t);function xr(e,t,n){return t.rows===t.columns?`${e} with none across`:`${De(n,t.rows,e)} with no ${Ht(n,t.columns)}`}function Sr(e,t,n){return t.rows===t.columns?`${e} with none down`:`${De(n,t.columns,e)} on no ${Ht(n,t.rows)}`}function kr({nodes:e,label:t,fidelity:n,mode:r,options:a,schema:o,implicated:g=[],flagged:y=[],budget:c}){let{store:v}=Q(),l=Er(),p=(0,ve.useRef)(null),d=Be(p),[m,s]=(0,ve.useState)(null),w=It(Ke(v.graph,v.schema,e).filter(f=>f.kind===a.rows||f.kind===a.columns),v.graph.allEdges(),a,o),i=n==="full"?yr(w,c!==void 0?{rows:c,columns:c}:{}):w;if(n==="glyph")return(0,z.jsx)(ue,{label:`${t??"Coverage"} \xB7 ${i.gaps.length===0?"complete":`${i.gaps.length} missing`}`,hue:ie("coverage")});if(n==="summary"){let f=i.rows.filter(P=>i.gaps.includes(P.id));return(0,z.jsxs)(Z,{title:t??"Coverage",meta:`${i.rows.length-i.gaps.length}/${i.rows.length}`,tone:i.gaps.length>0?"warning":"muted",fit:!0,children:[(0,z.jsx)(Ar,{grid:i}),f.length>0?(0,z.jsx)(Ae,{pick:!0,max:4,items:f.map(P=>({id:P.id,label:P.ref||P.label}))}):null]})}let x=new Set(g),S=new Set(y),$=m!==null&&m.every(f=>x.has(f))?m:null,M=r==="fullscreen",R=br(i.columns.map(f=>f.label)),u=d===null?zt:Math.max(96,Math.min(zt,Math.round(d*.36))),k=d!==null&&(d<420||u+i.columns.length*28+Bt>d);return(0,z.jsx)(Z,{title:t??"Coverage",...M?{style:{flex:"1 1 auto",minHeight:0,height:"100%"}}:{},meta:i.rows.length===0||i.columns.length===0?void 0:i.gaps.length===0&&i.unasked.length===0?"complete":[i.gaps.length>0?xr(i.gaps.length,a,v.schema):"",i.unasked.length>0?Sr(i.unasked.length,a,v.schema):""].filter(Boolean).join(" \xB7 "),selected:!1,fit:!0,children:(0,z.jsxs)("div",{ref:p,"data-coverage-shape":k?"stacked":"matrix",onClick:f=>s(Wt(f.target)),onKeyDown:f=>{(f.key==="Enter"||f.key===" ")&&s(Wt(f.target))},style:{position:"relative",display:"flex",flexDirection:"column",flex:"1 1 auto",minHeight:0,paddingRight:k?0:Bt},children:[k?null:(0,z.jsxs)("div",{style:{display:"flex",alignItems:"flex-end",flex:"0 0 auto",position:"sticky",top:0,zIndex:Re.over,background:"var(--graview-panel)",paddingTop:6},children:[(0,z.jsx)("div",{ref:l.corner,style:{width:u,flex:"0 0 auto",alignSelf:"stretch",position:"sticky",left:0,zIndex:Re.raised,background:"var(--graview-panel)"}}),(0,z.jsx)("div",{ref:l.heads,style:{display:"flex",flex:1,minWidth:0,height:R},children:i.columns.map(f=>(0,z.jsx)("div",{"data-graview-pick":f.id,"data-graview-emphasis":x.size===0?"plain":x.has(f.id)?"lit":"dimmed",title:f.label,"data-graview-column":f.id,style:{flex:1,minWidth:28,boxSizing:"border-box",borderLeft:"1px solid transparent",pointerEvents:"none",position:"relative",display:"flex",alignItems:"flex-end",justifyContent:"center"},children:(0,z.jsxs)("span",{style:{position:"absolute",bottom:3,padding:"3px 0",pointerEvents:"auto",cursor:"pointer",left:"50%",visibility:l.hidden.has(f.id)?"hidden":"visible",transformOrigin:"left bottom",transform:`rotate(-${Vn}deg)`,whiteSpace:"nowrap",maxWidth:Wn,overflow:"hidden",textOverflow:"ellipsis",fontSize:"0.75rem",letterSpacing:"0.005em",color:f.used?x.size>0&&!x.has(f.id)?"var(--graview-ink-faint)":"var(--graview-ink)":"var(--graview-warn)"},children:[f.used?"":"\u26A0 ",f.label]})},f.id))})]}),i.of?(0,z.jsxs)("p",{"data-testid":"coverage-more",style:{margin:"4px 0 6px",fontSize:"0.8125rem",color:"var(--graview-ink-muted)"},children:[[i.of.rows>i.rows.length?`the ${i.rows.length} most connected of ${i.of.rows} ${Vt(v.schema,a.rows)}`:null,i.of.columns>i.columns.length?`${i.columns.length} of ${i.of.columns} ${Vt(v.schema,a.columns)} across`:null].filter(Boolean).join(" \xB7 ").replace(/^./,f=>f.toUpperCase())," ","\u2014 what is missing is still counted over all of them."]}):null,(0,z.jsx)("div",{children:i.rows.map((f,P)=>{let B=i.rows[P-1],W=B===void 0||B.group!==f.group,H=f.required&&!f.covered,j=x.size>0&&!x.has(f.id);return(0,z.jsxs)("div",{children:[W&&f.group?(0,z.jsx)("div",{style:{fontSize:"0.6875rem",letterSpacing:"0.16em",textTransform:"uppercase",color:"var(--graview-ink-faint)",padding:"9px 0 3px"},children:(0,z.jsx)("span",{style:{position:"sticky",left:0,display:"inline-block",paddingRight:8,background:"var(--graview-panel)"},children:f.group})}):null,(0,z.jsxs)("div",{style:{display:"flex",flexDirection:k?"column":"row",alignItems:"stretch",borderTop:"1px solid var(--graview-edge)",opacity:j?.72:1},children:[(0,z.jsxs)("div",{"data-graview-pick":f.id,"data-graview-emphasis":x.size===0?"plain":j?"dimmed":"lit",title:f.label,style:{width:k?"auto":u,flex:"0 0 auto",position:k?"static":"sticky",left:0,zIndex:Re.raised,background:"var(--graview-panel)",display:"flex",alignItems:"center",gap:7,padding:"6px 10px 6px 0",boxSizing:"border-box",fontSize:"0.8125rem",minWidth:0,color:H||S.has(f.id)?"var(--graview-warn)":"var(--graview-ink)"},children:[f.ref?(0,z.jsx)("span",{style:{flex:"0 0 auto",fontVariantNumeric:"tabular-nums",color:"var(--graview-ink-faint)"},children:f.ref}):null,(0,z.jsx)("span",{style:{minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:f.label}),a.badge?(0,z.jsx)("span",{title:f.badged?a.badge.title:a.badge.missingTitle,style:{marginLeft:"auto",flex:"0 0 auto",fontSize:"0.75rem",color:f.badged?"var(--graview-ink-faint)":"var(--graview-warn)"},children:f.badged?a.badge.symbol:"\u25CB"}):null]}),(0,z.jsx)("div",{style:{display:"flex",flex:1,minWidth:0,...k?{flexWrap:"wrap",gap:6,padding:"0 0 8px"}:{}},children:i.columns.map(_=>{let se=i.cells.find(le=>le.rowId===f.id&&le.columnId===_.id),me=se!==void 0;return(0,z.jsxs)("div",{"data-graview-mark":"",...me?{"data-graview-pick":_.id,"data-graview-emphasis":x.size===0?"plain":x.has(_.id)&&x.has(f.id)?"lit":"dimmed","data-graview-joins":JSON.stringify(Cr(se))}:{},title:me?`${_.label} answers ${f.ref||f.label}`:`${_.label} does not answer ${f.ref||f.label}`,style:k?{flex:"0 0 auto",minHeight:24,boxSizing:"border-box",display:"inline-flex",alignItems:"center",gap:6,padding:"2px 9px 2px 7px",borderRadius:6,border:"1px solid var(--graview-edge)",fontSize:"0.75rem",color:me?"var(--graview-ink)":"var(--graview-ink-faint)"}:{flex:1,minWidth:28,boxSizing:"border-box",display:"flex",alignItems:"center",justifyContent:"center",borderLeft:"1px solid var(--graview-edge)"},children:[(0,z.jsx)("span",{style:Rr(me,H,x.has(_.id)&&x.has(f.id),x.size>0)}),k?(0,z.jsx)("span",{children:_.label}):null]},_.id)})})]})]},f.id)})}),$?(0,z.jsx)(Or,{box:p,joins:$,shape:`${k?"stacked":"matrix"} ${d??""}`}):null]})})}var Cr=e=>[e.rowId,e.columnId,...e.via??[]];function Wt(e){let t=e?.closest?.("[data-graview-joins]")?.getAttribute("data-graview-joins");if(!t)return null;try{let n=JSON.parse(t);return Array.isArray(n)&&n.every(r=>typeof r=="string")?n:null}catch{return null}}var mn=(e,t,n)=>Math.min(n,Math.max(t,e));function $r(e){let t=e.getBoundingClientRect(),n=typeof document.createRange=="function"?document.createRange():null;n?.selectNodeContents(e);let r=typeof n?.getBoundingClientRect=="function"?n.getBoundingClientRect():null;return r&&r.width>0&&r.height>0?r:t}function Or({box:e,joins:t,shape:n}){let[r,a]=(0,ve.useState)([]),o=JSON.stringify(t);return(0,ve.useLayoutEffect)(()=>{let g=e.current;if(!g||typeof window>"u")return;let y=()=>{let l=g.getBoundingClientRect(),p=g.offsetWidth>0&&l.width>0?l.width/g.offsetWidth:1,d=[...g.querySelectorAll("[data-graview-joins]")].find(w=>w.getAttribute("data-graview-joins")===o);if(!d){a([]);return}let m=d.getBoundingClientRect(),s=[];for(let w of JSON.parse(o)){let i=[...g.querySelectorAll("[data-graview-pick]")].find(u=>u.getAttribute("data-graview-pick")===w&&!u.closest("[data-graview-mark]"));if(!i)continue;let x=$r(i),S=mn(m.left+m.width/2,x.left,x.right),$=mn(m.top+m.height/2,x.top,x.bottom),M=mn(S,m.left,m.right),R=mn($,m.top,m.bottom);s.push({id:w,x1:(M-l.left)/p,y1:(R-l.top)/p,x2:(S-l.left)/p,y2:($-l.top)/p})}a(s)};y();let c=0,v=()=>{c===0&&(c=requestAnimationFrame(()=>{c=0,y()}))};return document.addEventListener("scroll",v,{capture:!0,passive:!0}),window.addEventListener("resize",v,{passive:!0}),()=>{document.removeEventListener("scroll",v,{capture:!0}),window.removeEventListener("resize",v),c!==0&&cancelAnimationFrame(c)}},[e,o,n]),(0,z.jsx)("svg",{"aria-hidden":"true","data-coverage-join":o,style:{position:"absolute",left:0,top:0,width:"100%",height:"100%",overflow:"visible",pointerEvents:"none",zIndex:Re.over},children:r.map(g=>(0,z.jsxs)("g",{"data-coverage-join-to":g.id,children:[(0,z.jsx)("line",{x1:g.x1,y1:g.y1,x2:g.x2,y2:g.y2,stroke:"var(--graview-accent)",strokeWidth:1.6,strokeLinecap:"round"}),(0,z.jsx)("circle",{cx:g.x2,cy:g.y2,r:2.6,fill:"var(--graview-accent)"})]},g.id))})}function Rr(e,t,n,r){return e?{width:13,height:13,borderRadius:4,background:n||!r?"var(--graview-accent)":"var(--graview-accent-dim)",boxShadow:n&&r?"0 0 12px -2px var(--graview-accent)":void 0}:{width:5,height:5,borderRadius:1,background:t?"var(--graview-warn)":"var(--graview-edge)",opacity:t?.5:1}}function Ar({grid:e}){let t=e.rows.filter(a=>a.required),n=t.filter(a=>a.covered).length,r=t.length===0?1:n/t.length;return(0,z.jsx)("div",{role:"img","aria-label":`${n} of ${t.length} covered`,style:{height:6,borderRadius:999,overflow:"hidden",background:"var(--graview-edge)"},children:(0,z.jsx)("div",{style:{width:`${Math.round(r*100)}%`,height:"100%",background:r===1?"var(--graview-accent)":"var(--graview-warn)"}})})}function Gt(e){function t(n){let{store:r}=Q();return(0,z.jsx)(kr,{schema:r.schema,...n,options:e})}return{name:"coverage",requiredRoles:[...pr],options:e,View:t,build(n,r,a){return It(n,r,e,a)}}}function Er(){let e=(0,ve.useRef)(null),t=(0,ve.useRef)(null),[n,r]=(0,ve.useState)(new Set);return(0,ve.useEffect)(()=>{let a=t.current;if(!a||typeof window>"u")return;let o=a.parentElement;for(;o&&!/(auto|scroll)/.test(getComputedStyle(o).overflowX);)o=o.parentElement;if(!o)return;let g=0,y=()=>{g=0;let v=e.current?.getBoundingClientRect().right??0,l=new Set;for(let p of a.querySelectorAll("[data-graview-column]")){let d=p.getBoundingClientRect();d.left+d.width/2<v&&l.add(p.dataset.graviewColumn)}r(p=>p.size===l.size&&[...l].every(d=>p.has(d))?p:l)},c=()=>{g===0&&(g=requestAnimationFrame(y))};return y(),o.addEventListener("scroll",c,{passive:!0}),()=>{o.removeEventListener("scroll",c),g!==0&&cancelAnimationFrame(g)}},[]),{corner:e,heads:t,hidden:n}}var qt=["regions","outline"],je=class extends Error{constructor(n,r){super(`${n}
23
- ${r}`);this.hint=r;this.name="PlanBindingError"}},pn='Check the lens bindings: { regions: "<kind>", outline: "<field>", markers?: "<kind>", at?: "<field>", within?: "<edge>" }',jt=e=>typeof e=="object"&&e!==null&&typeof e.x=="number"&&typeof e.y=="number";function fn(e,t,n,r){let a=i=>i,o=i=>r?pe(r.tryDefinition(i.kind),i):String(a(i).label??i.id);if(r&&r.tryDefinition(n.regions)===void 0)throw new je(`No kind is declared for "${n.regions}".`,pn);if(n.markers&&r&&r.tryDefinition(n.markers)===void 0)throw new je(`No kind is declared for "${n.markers}".`,pn);let g=e.filter(i=>i.kind===n.regions);if(!r&&g.length===0)throw new je(`Nothing to draw: no "${n.regions}" nodes.`,pn);let c=r?.tryDefinition(n.regions)?.fields?.shape;if(c!==void 0&&!(n.outline in c))throw new je(`"${n.regions}" has no field called "${n.outline}".`,pn);let v=(()=>{let i=new Map;if(n.nests)for(let x of t)x.kind===n.nests&&i.set(x.from,x.to);return x=>{let S=0,$=i.get(x),M=new Set([x]);for(;$!==void 0&&!M.has($)&&S<g.length;)M.add($),S+=1,$=i.get($);return S}})(),l=n.markers?e.filter(i=>i.kind===n.markers):[],p=new Map;if(n.within)for(let i of t)i.kind===n.within&&p.set(i.from,i.to);let d=[],m=new Map;for(let i of l){let x=n.at===void 0?void 0:a(i)[n.at],S=p.get(i.id);if(!jt(x)||S===void 0){d.push({id:i.id,label:o(i)});continue}let $=n.markerKind===void 0?void 0:a(i)[n.markerKind],M=m.get(S)??[];M.push({id:i.id,label:o(i),at:x,...typeof $=="string"?{what:$}:{}}),m.set(S,M)}let s=[],w=[];for(let i of g){let x=a(i)[n.outline];if(!Array.isArray(x)||x.length<3||!x.every(jt)){s.push({id:i.id,label:o(i)});continue}let S=n.regionKind===void 0?void 0:a(i)[n.regionKind];w.push({id:i.id,label:o(i),outline:x,center:ut(x),depth:v(i.id),markers:m.get(i.id)??[],...typeof S=="string"?{what:S}:{}})}return w.sort((i,x)=>i.depth-x.depth),{regions:w,undrawn:s,strays:d}}var Pe=G(ze(),1);var E=G(J(),1);function Ft({map:e,options:t,implicated:n,flagged:r}){return(0,E.jsxs)("ul",{style:{margin:0,padding:0,listStyle:"none",display:"grid",gap:".25rem"},children:[e.regions.map(a=>{let o=hn(a.id,n,r);return(0,E.jsxs)("li",{"data-graview-pick":a.id,...o?{"data-graview-emphasis":o}:{},style:{display:"flex",flexWrap:"wrap",gap:".5rem",justifyContent:"space-between",minWidth:0,padding:".25rem .4rem",borderRadius:".35rem",background:o==="flagged"?Hn(a.what,o,t.hues):void 0},children:[(0,E.jsx)("span",{style:{minWidth:0,overflowWrap:"anywhere"},children:a.label}),(0,E.jsxs)("span",{style:{opacity:.7,whiteSpace:"nowrap"},children:[a.what?`${a.what} \xB7 `:"",a.markers.length]})]},a.id)}),e.undrawn.map(a=>(0,E.jsxs)("li",{"data-graview-pick":a.id,style:{display:"flex",gap:".5rem",opacity:.7,padding:".25rem .4rem"},children:[(0,E.jsx)("span",{style:{minWidth:0,overflowWrap:"anywhere"},children:a.label}),(0,E.jsx)("span",{style:{whiteSpace:"nowrap"},children:t.undrawnLabel??"not drawn"})]},a.id))]})}var In=1e3,_t=.022,Qe={minHeight:"1.9rem",padding:".25rem .65rem",borderRadius:".35rem",border:"1px solid var(--graview-edge)",background:"var(--graview-panel)",color:"var(--graview-ink)",font:"inherit",fontSize:"0.9375rem",cursor:"pointer"},hn=(e,t,n)=>{if(n?.includes(e))return"flagged";if(t?.includes(e))return"implicated"},yn=(e,t)=>(e===void 0?void 0:t?.[e])??ie(e??"region"),Hn=(e,t,n)=>t==="flagged"?"color-mix(in oklab, var(--graview-warn) 26%, var(--graview-panel))":`color-mix(in oklab, hsl(${yn(e,n)} 52% 48%) 24%, var(--graview-panel))`,Ut=(e,t,n)=>t==="flagged"?"var(--graview-warn)":`color-mix(in oklab, hsl(${yn(e,n)} 48% 42%) 78%, var(--graview-ink))`;function Mr(e){let t=e.currentTarget.getBoundingClientRect(),n=r=>Math.round(Math.max(0,Math.min(1,r))*1e3)/1e3;return{x:n(t.width===0?0:(e.clientX-t.left)/t.width),y:n(t.height===0?0:(e.clientY-t.top)/t.height)}}function Kt({schema:e,options:t,nodes:n,label:r,fidelity:a,selected:o,implicated:g,flagged:y}){let{store:c}=Q(),v=c.graph.allEdges(),l=c.graph.allNodes(),p=n===void 0?void 0:new Set(n.map(b=>b.id)),d=p===void 0?l:l.filter(b=>b.kind!==t.regions||p.has(b.id)),m=fn(d,v,t,e),s=m.regions.length,w=m.regions.reduce((b,C)=>b+C.markers.length,0);if(a==="glyph")return(0,E.jsx)(ue,{label:`${r??"Ground"} \xB7 ${s}`,...m.undrawn.length>0?{meta:`+${m.undrawn.length} undrawn`}:{},selected:o});if(a==="summary")return(0,E.jsx)(Z,{title:r??"The plan",subtitle:`${s} drawn \xB7 ${w} standing in them`,children:(0,E.jsx)(Ft,{map:m,options:t,...g?{implicated:g}:{},...y?{flagged:y}:{}})});let i=(0,Pe.useMemo)(()=>{let b=1/0,C=1/0,N=-1/0,Y=-1/0,ce=re=>{re.x<b&&(b=re.x),re.x>N&&(N=re.x),re.y<C&&(C=re.y),re.y>Y&&(Y=re.y)};for(let re of m.regions){for(let we of re.outline)ce(we);for(let we of re.markers)ce(we.at)}if(!Number.isFinite(b)||N-b<=0||Y-C<=0)return{x0:0,y0:0,x1:1,y1:1};let ye=Math.max(N-b,Y-C)*.04;return{x0:b-ye,y0:C-ye,x1:N+ye,y1:Y+ye}},[m.regions]),x=(i.x1-i.x0)/(i.y1-i.y0),S=t.aspect??Math.min(3.2,Math.max(.55,x)),$=Math.round(In/(i.x1-i.x0)),M=Math.round($*(i.x1-i.x0)),R=Math.round(M/S),u={x:i.x0*$,y:i.y0*$-(R-$*(i.y1-i.y0))/2,w:M,h:R},k=$,f=u.w,P=(g?.length??0)>0||(y?.length??0)>0,B=(0,Pe.useRef)(null),{touchable:W,legible:H}=at(B,{units:u.w,target:f*_t*2}),j=Cn("--graview-font-display","serif"),_=Cn("--graview-font-body","sans-serif"),{named:se,placed:me,tagged:le}=(0,Pe.useMemo)(()=>{let b=[],C=f*.012,N=In*.004,Y=(ae,K)=>!b.some(ge=>ge!==K&&pt({x0:ae.x0-N,y0:ae.y0-N,x1:ae.x1+N,y1:ae.y1+N},ge)),ce=[...m.regions].sort((ae,K)=>On(K.outline)-On(ae.outline)),ye=new Map,re=new Map;for(let ae of ce){let K=gt(ae.outline),ge=Math.max(0,(K.bottom-K.top)*k*.55),Ce=null;for(let xe of[.12,.26,.42,.6,.78]){let be=K.top+xe*(K.bottom-K.top),$e=$n(ae.outline,be),wn=Math.max(0,($e.x1-$e.x0)*$-C*2),de=mt(ae.label,{room:wn,height:ge,size:f*.023,floor:f*.015,measure:j});if(de===null)continue;let Te=Math.max(...de.lines.map(tr=>j(tr,de.fontSize))),Oe=de.lines.length*de.fontSize*1.15,Fn=K.top*k+C+Oe/2,_n=K.bottom*k-C-Oe/2,Ze=_n<Fn?(K.top+K.bottom)*k/2:Math.min(Math.max(be*k,Fn),_n),vn=$n(ae.outline,Ze/k),bn=vn.x0*$+C;if(Te>(vn.x1-vn.x0)*$-C*2)continue;let Un={x0:bn,y0:Ze-Oe/2,x1:bn+Te,y1:Ze+Oe/2};if(Y(Un)){b.push(Un),Ce={fitted:de,x:bn,y:Ze};break}}ye.set(ae.id,Ce?.fitted??null),Ce!==null&&re.set(ae.id,{x:Ce.x,y:Ce.y})}let we=f*.018,Fe=new Map,F=f*.011+f*.004,qn=new Map;for(let ae of m.regions)for(let K of ae.markers){let ge={x0:K.at.x*$-F,y0:K.at.y*k-F,x1:K.at.x*$+F,y1:K.at.y*k+F};qn.set(K.id,ge),b.push(ge)}for(let ae of W?m.regions:[])for(let K of ae.markers){let ge=f*.018,Ce=_(K.label,we),xe=K.at.x*$,be=K.at.y*k,$e=we*1.15,wn=[{x:xe+ge,y:be,anchor:"start"},{x:xe-ge,y:be,anchor:"end"},{x:xe+ge*.7,y:be-$e,anchor:"start"},{x:xe-ge*.7,y:be-$e,anchor:"end"},{x:xe+ge*.7,y:be+$e,anchor:"start"},{x:xe-ge*.7,y:be+$e,anchor:"end"},{x:xe,y:be-$e*1.1,anchor:"start"},{x:xe,y:be+$e*1.1,anchor:"start"}];for(let de of wn){let Te=de.anchor==="start"?de.x:de.x-Ce,Oe={x0:Te,y0:de.y-we*.62,x1:Te+Ce,y1:de.y+we*.62};if(!(Te<u.x+4||Te+Ce>u.x+u.w-4)&&!(Oe.y0<u.y+2||Oe.y1>u.y+u.h-2)&&Y(Oe,qn.get(K.id))){b.push(Oe),Fe.set(K.id,{at:{x:de.x,y:de.y},anchor:de.anchor,size:we});break}}}return{named:ye,placed:re,tagged:Fe}},[m.regions,In,k,W,j,_]),O=(0,Pe.useMemo)(()=>{let b=[];for(let C of m.regions)(se.get(C.id)?.whole??!1)===!1&&b.push({id:C.id,label:C.label,what:C.what,round:!1});for(let C of m.regions)for(let N of C.markers)(!W||!le.has(N.id))&&b.push({id:N.id,label:N.label,what:N.what,round:!0});return b},[m.regions,se,le,W]),{principal:L}=Q(),[A,te]=(0,Pe.useState)(null),he=t.draw!==void 0,h=t.place!==void 0,I=b=>{if(A===null)return;b.stopPropagation();let C=Mr(b);if(A.kind==="marker"){c.apply({name:t.place.act,args:{[t.place.id]:A.id,[t.place.at]:C}},{author:L,intent:`Placed ${A.label} on the map`}),te(null);return}te({...A,corners:[...A.corners,C]})},D=()=>{A===null||A.kind!=="region"||A.corners.length<3||(c.apply({name:t.draw.act,args:{[t.draw.id]:A.id,[t.draw.outline]:A.corners}},{author:L,intent:`Drew ${A.label} on the map \u2014 ${A.corners.length} corners`}),te(null))},q=A===null?m.regions.length===0?"Nothing drawn yet. Choose an area below, then click its corners here.":null:A.kind==="marker"?`Click where ${A.label} stands.`:A.corners.length<3?`Click the corners of ${A.label} \u2014 ${3-A.corners.length} more to make an area.`:`${A.corners.length} corners. Keep clicking, or press Done.`;return H?(0,E.jsxs)(Z,{title:r??"The plan",subtitle:`${s} drawn \xB7 ${w} standing in them`,...m.undrawn.length>0?{meta:`${m.undrawn.length} ${t.undrawnLabel??"not drawn yet"}`}:{},selected:o,fit:!0,children:[(0,E.jsx)("div",{style:{position:"relative",width:"100%",aspectRatio:`${u.w} / ${u.h}`,overflow:"hidden"},children:(0,E.jsxs)("svg",{ref:B,viewBox:`${u.x} ${u.y} ${u.w} ${u.h}`,width:"100%",height:"100%",preserveAspectRatio:"xMidYMid meet",role:A!==null?"application":W?"group":"img","aria-label":A===null?`${r??"The plan"}: ${s} drawn, ${w} standing in them`:q??"Drawing",onClick:I,"data-testid":"plan-canvas",style:{display:"block",position:"absolute",inset:0,cursor:A===null?void 0:"crosshair",border:"1px dashed color-mix(in oklab, var(--graview-edge) 80%, transparent)",borderRadius:".4rem",backgroundImage:"linear-gradient(color-mix(in oklab, var(--graview-edge) 35%, transparent) 1px, transparent 1px),linear-gradient(90deg, color-mix(in oklab, var(--graview-edge) 35%, transparent) 1px, transparent 1px)",backgroundSize:"10% 10%"},children:[(0,E.jsx)("text",{x:u.x+u.w-f*.028,y:u.y+f*.034,fontSize:f*.022,textAnchor:"middle",fill:"var(--graview-ink)",opacity:.55,children:"N"}),q!==null&&m.regions.length===0?(0,E.jsx)("text",{x:u.x+u.w/2,y:u.y+u.h/2,textAnchor:"middle",dominantBaseline:"middle",fontSize:f*.026,fill:"var(--graview-ink)",opacity:.7,style:{pointerEvents:"none",fontFamily:"var(--graview-font-body)"},children:q}):null,A!==null&&A.kind==="region"&&A.corners.length>0?(0,E.jsxs)("g",{style:{pointerEvents:"none"},children:[(0,E.jsx)("polyline",{points:A.corners.map(b=>`${b.x*$},${b.y*k}`).join(" "),fill:A.corners.length>=3?"color-mix(in oklab, var(--graview-accent) 22%, transparent)":"none",stroke:"var(--graview-accent)",strokeWidth:3,strokeDasharray:"8 6"}),A.corners.map((b,C)=>(0,E.jsx)("circle",{cx:b.x*$,cy:b.y*k,r:f*.008,fill:"var(--graview-accent)"},C))]}):null,m.regions.map(b=>{let C=hn(b.id,g,y),N=P&&C===void 0?.34:1,Y=b.outline.map(ce=>`${ce.x*$},${ce.y*k}`).join(" ");return(0,E.jsx)("g",{"data-graview-pick":b.id,...C?{"data-graview-emphasis":C}:{},role:"button","aria-label":`${b.label}${b.what?`, ${b.what}`:""}, ${b.markers.length} standing in it`,style:{opacity:N,cursor:"pointer"},children:(0,E.jsx)("polygon",{points:Y,fill:Hn(b.what,C,t.hues),stroke:Ut(b.what,C,t.hues),strokeWidth:C==="flagged"?5:2.5,strokeLinejoin:"round"})},b.id)}),m.regions.flatMap(b=>b.markers.map(C=>{let N=hn(C.id,g,y),Y=P&&N===void 0?.34:1;return(0,E.jsxs)("g",{...W?{"data-graview-pick":C.id,role:"button","aria-label":`${C.label}${C.what?`, ${C.what}`:""}, in ${b.label}`}:{"aria-hidden":!0},...N?{"data-graview-emphasis":N}:{},style:{opacity:Y,cursor:W?"pointer":"default"},children:[W?(0,E.jsx)("circle",{cx:C.at.x*$,cy:C.at.y*k,r:f*_t,fill:"transparent"}):null,(0,E.jsx)("circle",{cx:C.at.x*$,cy:C.at.y*k,r:f*.011,fill:N==="flagged"?"var(--graview-warn)":`hsl(${yn(C.what,t.hues)} 55% 45%)`,stroke:"var(--graview-panel)",strokeWidth:f*.004}),le.has(C.id)?(0,E.jsx)("text",{x:le.get(C.id).at.x,y:le.get(C.id).at.y,textAnchor:le.get(C.id).anchor,dominantBaseline:"middle",fontSize:le.get(C.id).size,fill:"var(--graview-ink)",stroke:"var(--graview-panel)",strokeWidth:Math.max(2,le.get(C.id).size*.3),paintOrder:"stroke","data-testid":`marker-label-${C.id}`,style:{pointerEvents:"none",fontFamily:"var(--graview-font-body)"},children:C.label}):null]},C.id)})),m.regions.map(b=>{let C=se.get(b.id),N=me.get(b.id);if(!C||N===void 0)return null;let Y=hn(b.id,g,y);return(0,E.jsx)("text",{x:N.x,y:N.y-(C.lines.length-1)*C.fontSize*1.15/2,textAnchor:"start",dominantBaseline:"middle",fontSize:C.fontSize,fill:"var(--graview-ink)",opacity:P&&Y===void 0?.34:1,stroke:"var(--graview-panel)",strokeWidth:Math.max(2,C.fontSize*.26),paintOrder:"stroke","data-testid":`region-label-${b.id}`,style:{pointerEvents:"none",fontFamily:"var(--graview-font-display)"},children:C.lines.map((ce,ye)=>(0,E.jsx)("tspan",{x:N.x,dy:ye===0?0:C.fontSize*1.15,children:ce},ce+String(ye)))},`label-${b.id}`)})]})}),O.length>0?(0,E.jsx)("ul",{"data-testid":"map-key",style:{margin:".5rem 0 0",padding:0,listStyle:"none",display:"flex",flexWrap:"wrap",gap:".2rem .75rem",fontSize:"0.875rem"},children:O.map(b=>(0,E.jsxs)("li",{"data-graview-pick":b.id,style:{display:"flex",alignItems:"center",gap:".35rem",minWidth:0,minHeight:"max(1.5rem, 24px)",padding:"0 .15rem",cursor:"pointer"},children:[(0,E.jsx)("span",{"aria-hidden":"true",style:{width:b.round?".55rem":".7rem",height:b.round?".55rem":".7rem",flex:"0 0 auto",borderRadius:b.round?"50%":".15rem",background:b.round?`hsl(${yn(b.what,t.hues)} 55% 45%)`:Hn(b.what,void 0,t.hues),border:b.round?void 0:`1px solid ${Ut(b.what,void 0,t.hues)}`}}),(0,E.jsx)("span",{style:{minWidth:0,overflowWrap:"anywhere"},children:b.label})]},b.id))}):null,A!==null?(0,E.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:".5rem",marginTop:".5rem",alignItems:"center"},children:[m.regions.length>0&&q!==null?(0,E.jsx)("span",{style:{fontSize:"0.9375rem",opacity:.8,flexBasis:"100%"},"aria-live":"polite",children:q}):null,A.kind==="region"?(0,E.jsxs)("button",{type:"button",onClick:D,disabled:A.corners.length<3,"data-testid":"draw-done",style:{...Qe,background:"var(--graview-accent)",color:"var(--graview-accent-ink)",borderColor:"transparent"},children:["Done \u2014 keep ",A.label]}):null,A.kind==="region"&&A.corners.length>0?(0,E.jsx)("button",{type:"button",onClick:()=>te({...A,corners:A.corners.slice(0,-1)}),style:Qe,children:"Undo a corner"}):null,(0,E.jsx)("button",{type:"button",onClick:()=>te(null),style:Qe,"data-testid":"draw-cancel",children:"Stop"})]}):(0,E.jsxs)(E.Fragment,{children:[he&&m.undrawn.length>0?(0,E.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:".4rem",marginTop:".5rem",alignItems:"center"},children:[(0,E.jsxs)("span",{style:{fontSize:"0.875rem",opacity:.75},children:[t.undrawnLabel??"Not drawn yet",":"]}),m.undrawn.map(b=>(0,E.jsxs)("button",{type:"button",style:Qe,onClick:()=>te({kind:"region",id:b.id,label:b.label,corners:[]}),"data-testid":`draw-${b.id}`,children:["Draw ",b.label]},b.id))]}):null,h&&m.strays.length>0?(0,E.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:".4rem",marginTop:".5rem",alignItems:"center"},children:[(0,E.jsxs)("span",{style:{fontSize:"0.875rem",opacity:.75},children:[t.strayLabel??"Not placed",":"]}),m.strays.map(b=>(0,E.jsxs)("button",{type:"button",style:Qe,onClick:()=>te({kind:"marker",id:b.id,label:b.label}),"data-testid":`place-${b.id}`,children:["Place ",b.label]},b.id))]}):null,t.help!==void 0&&(m.undrawn.length>0||m.strays.length>0)?(0,E.jsx)("p",{style:{margin:".5rem 0 0",fontSize:"0.875rem"},children:(0,E.jsx)("a",{href:t.help.href,"data-testid":"map-help",children:t.help.label})}):null,!he&&(m.undrawn.length>0||m.strays.length>0)?(0,E.jsxs)("p",{style:{margin:".5rem 0 0",fontSize:"0.875rem",opacity:.75},children:[m.undrawn.map(b=>b.label).join(", "),m.undrawn.length>0?` \u2014 ${t.undrawnLabel??"not drawn yet"}. `:"",m.strays.map(b=>b.label).join(", "),m.strays.length>0?` \u2014 ${t.strayLabel??"not placed"}.`:""]}):null]})]}):(0,E.jsx)(Z,{title:r??"The plan",subtitle:`${s} drawn \xB7 ${w} standing in them`,selected:o,children:(0,E.jsx)(Ft,{map:m,options:t,...g?{implicated:g}:{},...y?{flagged:y}:{}})})}var Jt=G(J(),1);function Yt(e){function t(n){let{store:r}=Q();return(0,Jt.jsx)(Kt,{schema:r.schema,...n,options:e})}return{name:"plan",requiredRoles:[...qt],options:e,View:t,build(n,r,a){return fn(n,r,e,a)}}}var ne=G(J(),1);function Pr(e,t,n){let r=t.flatMap(o=>(o.subject&&o.subject.kinds!=="*"?o.subject.kinds:[null]).map(y=>({name:o.name,title:o.title??o.name,kind:y}))),a=[];for(let o of n){let g={kind:"human",id:"themselves",roles:[o]};for(let y of r){let c=y.kind??void 0,v=Sn(e,g,y.name,c).ok,l=!v&&Sn(e,g,y.name,c,void 0,"themselves").ok;a.push({role:o,act:y.name,kind:y.kind,may:v?"yes":l?"self":"no"})}}return{roles:n,acts:r,cells:a}}function Tr({label:e,fidelity:t,mode:n}){let{store:r}=Q(),a=r.policy,o=a?.roles??[],g=r.allMutations().filter(p=>!p.derived).map(p=>({name:p.name,...p.title?{title:p.title}:{},...p.subject?{subject:p.subject}:{}})),y=Pr(a,g,o),c=e??"Who may do what";if(!a||o.length===0)return(0,ne.jsxs)("div",{"data-testid":"reach-lens",style:{padding:14,color:"var(--graview-ink-muted)",fontSize:"0.875rem"},children:[c,": this installation has no policy, so everyone may do everything."]});if(t==="glyph")return(0,ne.jsx)(ue,{label:`${c} \xB7 ${o.length} ${o.length===1?"role":"roles"}`,hue:ie("role")});let v=n==="fullscreen",l=p=>p==="yes"?"\u25CF":p==="self"?"\u25D0":"\xB7";return(0,ne.jsxs)("div",{"data-testid":"reach-lens",style:{display:"grid",gap:10,padding:v?0:14,borderRadius:"var(--graview-radius, 12px)",background:v?"transparent":"var(--graview-panel)",border:v?"none":"1px solid var(--graview-edge)",color:"var(--graview-ink)",minWidth:0},children:[(0,ne.jsxs)("div",{style:{display:"flex",alignItems:"baseline",gap:10},children:[(0,ne.jsx)("span",{style:{fontFamily:"var(--graview-font-display)",fontSize:"1.125rem",fontWeight:600},children:c}),(0,ne.jsx)("span",{style:{marginLeft:"auto",fontSize:"0.75rem",color:"var(--graview-ink-faint)"},children:"\u25CF may \xB7 \u25D0 on their own record \xB7 read from the policy"})]}),(0,ne.jsx)("div",{"data-scroller":!0,style:{overflowX:"auto"},children:(0,ne.jsxs)("table",{style:{borderCollapse:"collapse",fontSize:"0.875rem",minWidth:"100%"},children:[(0,ne.jsx)("thead",{children:(0,ne.jsxs)("tr",{children:[(0,ne.jsx)("th",{scope:"col",style:{textAlign:"left",padding:"4px 10px 6px 0",fontWeight:500,color:"var(--graview-ink-faint)",fontSize:"0.75rem",letterSpacing:"0.12em",textTransform:"uppercase"},children:"Role"}),y.acts.map(p=>(0,ne.jsxs)("th",{scope:"col",title:p.kind?`${p.title}, on ${Yn(nn(r.schema.tryDefinition(p.kind),p.kind))}`:p.title,style:{textAlign:"left",padding:"4px 10px 6px",fontWeight:500,whiteSpace:"nowrap",color:"var(--graview-ink-muted)",fontSize:"0.8125rem"},children:[p.title,p.kind?(0,ne.jsxs)("span",{style:{color:"var(--graview-ink-faint)"},children:[" \xB7 ",p.kind]}):null]},`${p.name}|${p.kind??""}`))]})}),(0,ne.jsx)("tbody",{children:y.roles.map(p=>(0,ne.jsxs)("tr",{children:[(0,ne.jsx)("th",{scope:"row",style:{textAlign:"left",padding:"6px 10px 6px 0",fontWeight:600,whiteSpace:"nowrap",borderTop:"1px solid var(--graview-edge)"},children:p}),y.acts.map(d=>{let m=y.cells.find(s=>s.role===p&&s.act===d.name&&s.kind===d.kind);return(0,ne.jsx)("td",{"data-graview-reach":m.may,title:`${p} ${m.may==="yes"?"may":m.may==="self"?"may, on their own record,":"may not"} ${d.title.toLowerCase()}`,style:{padding:"6px 10px",textAlign:"center",borderTop:"1px solid var(--graview-edge)",color:m.may==="no"?"var(--graview-ink-faint)":"var(--graview-accent)",fontSize:m.may==="no"?"0.875rem":"0.8125rem"},children:l(m.may)},`${d.name}|${d.kind??""}`)})]},p))})]})})]})}var Qt={name:"reach",requiredRoles:[],View:Tr};var X=G(J(),1),Xt=["start","end"];function Lr(e,t,{pad:n=45,minimum:r=480}={}){if(e.length===0)return{start:0,end:t};let a=Math.min(...e.map(v=>v.start)),o=Math.max(...e.map(v=>v.end)),g=Math.max(0,a-n),y=Math.min(t,o+n),c=r-(y-g);return c>0&&(g=Math.max(0,g-c/2),y=Math.min(t,g+r)),{start:Math.floor(g),end:Math.ceil(y)}}function Nr(e){let t=[...e].sort((o,g)=>o.start-g.start||o.end-g.end||o.id.localeCompare(g.id)),n=[],r=t.map(o=>{let g=n.findIndex(y=>y<=o.start);return g===-1?(g=n.length,n.push(o.end)):n[g]=o.end,{...o,lane:g,lanes:1}}),a=Math.max(1,n.length);return r.map(o=>({...o,lanes:a}))}var Gn=class extends Error{constructor(t,n){super(`The timeline lens needs ${n.join(" and ")} for "${t}". Add them to the lens bindings: { ${t}: { ${n.map(r=>`${r}: "<field name>"`).join(", ")} } }.`),this.name="TimelineBindingError"}};function Zt(e,t,n){let r=He(t[e.kind],n?.tryDefinition(e.kind));if(!r)return null;let a=e,o=n?.tryDefinition(e.kind)?.fields.shape,g=Xt.filter(l=>{let p=r[l];return p?o?!(p in o):!(p in a):!0});if(g.length>0)throw new Gn(e.kind,g);let y=Number(a[r.start]??Number.NaN),c=Number(a[r.end]??y);if(!Number.isFinite(y))return null;let v=[];if(r.columns){let l=a[r.columns];Array.isArray(l)&&v.push(...l.map(String))}if(r.column){let l=a[r.column];l!=null&&v.push(String(l))}return{id:e.id,kind:e.kind,label:pe(n?.tryDefinition(e.kind),e),columnIds:v,start:y,end:Number.isFinite(c)?Math.max(c,y):y}}function Dr(e,t){let n=Math.round(t),r=a=>`linear-gradient(hsl(${n} 55% var(--graview-tint-lightness) / ${a}), hsl(${n} 55% var(--graview-tint-lightness) / ${a})), var(--graview-panel)`;return e==="lit"?{border:"1px solid var(--graview-accent)",background:r("calc(var(--graview-tint-alpha) * 1.15)"),color:"var(--graview-ink)",boxShadow:"0 0 16px -4px var(--graview-accent)"}:e==="dimmed"?{border:"1px solid var(--graview-edge)",background:r("calc(var(--graview-tint-alpha) * 0.25)"),color:"var(--graview-ink-muted)"}:{border:`1px solid hsl(${n} 50% var(--graview-tint-lightness) / 0.42)`,background:r("var(--graview-tint-alpha)"),color:"var(--graview-ink)"}}var zr=.045,Xe=52;function Br({nodes:e,label:t,fidelity:n,mode:r,options:a,schema:o,selectedIds:g=[],implicated:y=[],flagged:c=[]}){let v=new Set([...y,...g]),l=R=>v.size===0?"plain":v.has(R)?"lit":"dimmed",p=new Set(c),d=(e??[]).map(R=>Zt(R,a.bindings,o)).filter(R=>R!==null),m=a.hueOf??(R=>ie(R.kind));if(n==="glyph")return(0,X.jsx)(ue,{label:`${t??"Timeline"} \xB7 ${d.length}`,hue:ie("timeline")});if(n==="summary")return(0,X.jsx)(Z,{title:t??"Timeline",meta:`${d.length} items`,tone:"muted",children:(0,X.jsx)(Ae,{max:a.columns.length,items:a.columns.map(R=>({id:R.id,label:`${R.label} ${d.filter(u=>u.columnIds.includes(R.id)).length}`,hue:ie(R.id)}))})});let s=a.format??String,w=Lr(d,a.extent,{...a.minWindow===void 0?{}:{minimum:a.minWindow}}),i=w.end-w.start,x=R=>(R-w.start)/i*100,S=a.tick??Math.max(60,Math.round(i/8/60)*60),$=[];for(let R=Math.ceil(w.start/S)*S;R<=w.end;R+=S)$.push(R);let M=r==="fullscreen";return(0,X.jsx)(Z,{title:t??"Timeline",meta:`${s(w.start)} \u2013 ${s(w.end)}`,style:{gap:12,...M?{flex:"1 1 auto",minHeight:0,height:"100%"}:{}},children:(0,X.jsxs)("div",{style:{display:"flex",flexDirection:"column",height:"100%",minHeight:0},children:[(0,X.jsx)("div",{style:{display:"flex",paddingLeft:Xe,paddingBottom:10},children:a.columns.map(R=>(0,X.jsx)("div",{style:{flex:1,fontSize:"0.75rem",letterSpacing:"0.18em",textTransform:"uppercase",textAlign:"center",color:"var(--graview-ink-muted)"},children:R.label},R.id))}),(0,X.jsxs)("div",{style:{position:"relative",flex:1,minHeight:0},children:[$.map((R,u)=>(0,X.jsx)("div",{style:{position:"absolute",left:Xe-8,right:0,top:u===$.length-1?"calc(100% - 1px)":`${x(R)}%`,height:1,background:"var(--graview-edge)"},children:(0,X.jsx)("span",{style:{position:"absolute",left:-(Xe-8),...u===$.length-1?{bottom:2}:{top:-7},width:Xe-16,textAlign:"right",fontSize:"0.75rem",letterSpacing:"0.06em",color:"var(--graview-ink-faint)"},children:s(R)})},R)),(0,X.jsx)("div",{style:{position:"absolute",inset:0,left:Xe,display:"flex",gap:4},children:a.columns.map(R=>(0,X.jsx)(Vr,{spans:d.filter(u=>u.columnIds.includes(R.id)),window:w,format:s,hue:m,emphasisOf:l,brokenIds:p},R.id))})]})]})})}function Vr({spans:e,window:t,format:n,hue:r,emphasisOf:a,brokenIds:o}){let g=t.end-t.start,y=d=>(d-t.start)/g*100,c=d=>(d.end-d.start)/g<zr,v=Nr(e.filter(d=>!c(d))),l=[...e.filter(c)].sort((d,m)=>d.start-m.start),p=Math.max(1,...v.map(d=>d.lanes));return(0,X.jsxs)("div",{style:{position:"relative",flex:1,minWidth:0},children:[v.map(d=>{let m=100/p,s=Math.max(1.6,y(d.end)-y(d.start));return(0,X.jsx)("div",{"data-graview-span":d.id,"data-graview-pick":d.id,"data-graview-emphasis":a(d.id),title:`${d.label} \xB7 ${n(d.start)}\u2013${n(d.end)}`,style:{position:"absolute",top:`${y(d.start)}%`,height:`${s}%`,left:`${d.lane*m}%`,width:`${m}%`,padding:"0 2px 2px 0",boxSizing:"border-box"},children:(0,X.jsx)("div",{style:{height:"100%",minHeight:15,borderRadius:6,padding:"3px 6px",fontSize:"0.75rem",lineHeight:1.25,overflow:"hidden",display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical",...Dr(a(d.id),r(d)),...o.has(d.id)?{borderLeft:"3px solid var(--graview-warn)",paddingLeft:4}:{}},children:s>=3.4?d.label:null})},d.id)}),l.map(d=>{let m=a(d.id);return(0,X.jsxs)("div",{"data-graview-span":d.id,"data-graview-pick":d.id,"data-graview-emphasis":m,"data-graview-moment":"",title:`${d.label} \xB7 ${n(d.start)}`,style:{position:"absolute",top:`${y(d.start)}%`,right:0,maxWidth:"100%",boxSizing:"border-box",transform:"translateY(-50%)",display:"flex",alignItems:"center",justifyContent:"flex-end",gap:5,minHeight:24,padding:"0 4px 0 8px",borderRadius:999,background:"linear-gradient(90deg, transparent, var(--graview-ground) 35%)"},children:[(0,X.jsx)("span",{style:{fontSize:"0.6875rem",letterSpacing:"0.04em",whiteSpace:"nowrap",color:m==="lit"?"var(--graview-accent)":"var(--graview-ink-faint)"},children:n(d.start)}),(0,X.jsx)("span",{style:{fontSize:"0.75rem",minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",color:m==="dimmed"?"var(--graview-ink-faint)":"var(--graview-ink)"},children:d.label}),(0,X.jsx)("span",{style:{width:7,height:7,borderRadius:999,flex:"0 0 auto",background:o.has(d.id)?"var(--graview-warn)":m==="dimmed"?"var(--graview-edge)":`hsl(${Math.round(r(d))} 60% var(--graview-tint-lightness))`,boxShadow:o.has(d.id)?"0 0 0 3px var(--graview-warn)":m==="lit"?"0 0 0 3px var(--graview-accent-dim)":m==="dimmed"?void 0:`0 0 8px hsl(${Math.round(r(d))} 60% var(--graview-tint-lightness) / 0.45)`}})]},d.id)})]})}function er(e){function t(n){let{store:r}=Q(),a=Object.keys(e.bindings),{nodes:o,bar:g}=Ve(n,{...e.arranging!==void 0?{allow:e.arranging}:{},lensAllows:{group:!1},...e.arrangedBy?{arrangedBy:e.arrangedBy}:{},...a[0]?{kind:(n.nodes??[]).find(c=>a.includes(String(c.kind)))?.kind??a[0]}:{}}),y=(0,X.jsx)(Br,{schema:r.schema,...n,nodes:o,options:e});return Ee(n,r.schema,g?(0,X.jsxs)("div",{style:{display:"grid",gap:6,height:"100%",minHeight:0,gridTemplateRows:"auto 1fr"},children:[g,y]}):y)}return{name:"timeline",requiredRoles:[...Xt],bindings:e.bindings,options:e,View:t,place(n,r){return n.map(a=>Zt(a,e.bindings,r)).filter(a=>a!==null)}}}var qe=G(J(),1),nr=new WeakMap,jn=e=>String(e).padStart(2,"0");function Wr(e){return e===1440?t=>`${jn(Math.floor(t/60))}:${jn(Math.round(t%60))}`:e===24?t=>`${jn(Math.floor(t))}:00`:t=>String(t)}function Ir(e){let t=e.options;switch(e.lens){case"timeline":{let n=typeof t.extent=="number"?t.extent:1440;return er({...t,extent:n,format:Wr(n)}).View}case"calendar":return Lt({...t,...typeof t.today=="string"?{today:t.today}:{}}).View;case"coverage":return Gt(t).View;case"board":return vt(t).View;case"plan":return Yt(t).View;case"reach":return Qt.View;case"columns":return Dt(t).View;case"blocks":return Hr(rt(Array.isArray(t.blocks)?t.blocks:[]),e.as)}}function Hr(e,t){return n=>{let r=(0,qe.jsx)(ct,{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)(Z,{title:n.label??"",children:r})}}function Mi(e){let t=nr.get(e);if(!t){let n=Ir(e),r=a=>(0,qe.jsx)(n,{...a,label:e.title});nr.set(e,t=r)}return t}export{Wr as a,Mi as b};
23
+ ${r}`);this.hint=r;this.name="PlanBindingError"}},pn='Check the lens bindings: { regions: "<kind>", outline: "<field>", markers?: "<kind>", at?: "<field>", within?: "<edge>" }',jt=e=>typeof e=="object"&&e!==null&&typeof e.x=="number"&&typeof e.y=="number";function fn(e,t,n,r){let a=i=>i,o=i=>r?pe(r.tryDefinition(i.kind),i):String(a(i).label??i.id);if(r&&r.tryDefinition(n.regions)===void 0)throw new je(`No kind is declared for "${n.regions}".`,pn);if(n.markers&&r&&r.tryDefinition(n.markers)===void 0)throw new je(`No kind is declared for "${n.markers}".`,pn);let g=e.filter(i=>i.kind===n.regions);if(!r&&g.length===0)throw new je(`Nothing to draw: no "${n.regions}" nodes.`,pn);let c=r?.tryDefinition(n.regions)?.fields?.shape;if(c!==void 0&&!(n.outline in c))throw new je(`"${n.regions}" has no field called "${n.outline}".`,pn);let v=(()=>{let i=new Map;if(n.nests)for(let x of t)x.kind===n.nests&&i.set(x.from,x.to);return x=>{let S=0,$=i.get(x),M=new Set([x]);for(;$!==void 0&&!M.has($)&&S<g.length;)M.add($),S+=1,$=i.get($);return S}})(),l=n.markers?e.filter(i=>i.kind===n.markers):[],p=new Map;if(n.within)for(let i of t)i.kind===n.within&&p.set(i.from,i.to);let d=[],m=new Map;for(let i of l){let x=n.at===void 0?void 0:a(i)[n.at],S=p.get(i.id);if(!jt(x)||S===void 0){d.push({id:i.id,label:o(i)});continue}let $=n.markerKind===void 0?void 0:a(i)[n.markerKind],M=m.get(S)??[];M.push({id:i.id,label:o(i),at:x,...typeof $=="string"?{what:$}:{}}),m.set(S,M)}let s=[],w=[];for(let i of g){let x=a(i)[n.outline];if(!Array.isArray(x)||x.length<3||!x.every(jt)){s.push({id:i.id,label:o(i)});continue}let S=n.regionKind===void 0?void 0:a(i)[n.regionKind];w.push({id:i.id,label:o(i),outline:x,center:ut(x),depth:v(i.id),markers:m.get(i.id)??[],...typeof S=="string"?{what:S}:{}})}return w.sort((i,x)=>i.depth-x.depth),{regions:w,undrawn:s,strays:d}}var Pe=G(ze(),1);var E=G(J(),1);function Ft({map:e,options:t,implicated:n,flagged:r}){return(0,E.jsxs)("ul",{style:{margin:0,padding:0,listStyle:"none",display:"grid",gap:".25rem"},children:[e.regions.map(a=>{let o=hn(a.id,n,r);return(0,E.jsxs)("li",{"data-graview-pick":a.id,...o?{"data-graview-emphasis":o}:{},style:{display:"flex",flexWrap:"wrap",gap:".5rem",justifyContent:"space-between",minWidth:0,padding:".25rem .4rem",borderRadius:".35rem",background:o==="flagged"?Hn(a.what,o,t.hues):void 0},children:[(0,E.jsx)("span",{style:{minWidth:0,overflowWrap:"anywhere"},children:a.label}),(0,E.jsxs)("span",{style:{opacity:.7,whiteSpace:"nowrap"},children:[a.what?`${a.what} \xB7 `:"",a.markers.length]})]},a.id)}),e.undrawn.map(a=>(0,E.jsxs)("li",{"data-graview-pick":a.id,style:{display:"flex",gap:".5rem",opacity:.7,padding:".25rem .4rem"},children:[(0,E.jsx)("span",{style:{minWidth:0,overflowWrap:"anywhere"},children:a.label}),(0,E.jsx)("span",{style:{whiteSpace:"nowrap"},children:t.undrawnLabel??"not drawn"})]},a.id))]})}var In=1e3,_t=.022,Qe={minHeight:"1.9rem",padding:".25rem .65rem",borderRadius:".35rem",border:"1px solid var(--graview-edge)",background:"var(--graview-panel)",color:"var(--graview-ink)",font:"inherit",fontSize:"0.9375rem",cursor:"pointer"},hn=(e,t,n)=>{if(n?.includes(e))return"flagged";if(t?.includes(e))return"implicated"},yn=(e,t)=>(e===void 0?void 0:t?.[e])??ie(e??"region"),Hn=(e,t,n)=>t==="flagged"?"color-mix(in oklab, var(--graview-warn) 26%, var(--graview-panel))":`color-mix(in oklab, hsl(${yn(e,n)} 52% 48%) 24%, var(--graview-panel))`,Ut=(e,t,n)=>t==="flagged"?"var(--graview-warn)":`color-mix(in oklab, hsl(${yn(e,n)} 48% 42%) 78%, var(--graview-ink))`;function Mr(e){let t=e.currentTarget.getBoundingClientRect(),n=r=>Math.round(Math.max(0,Math.min(1,r))*1e3)/1e3;return{x:n(t.width===0?0:(e.clientX-t.left)/t.width),y:n(t.height===0?0:(e.clientY-t.top)/t.height)}}function Kt({schema:e,options:t,nodes:n,label:r,fidelity:a,selected:o,implicated:g,flagged:y}){let{store:c}=Q(),v=c.graph.allEdges(),l=c.graph.allNodes(),p=n===void 0?void 0:new Set(n.map(b=>b.id)),d=p===void 0?l:l.filter(b=>b.kind!==t.regions||p.has(b.id)),m=fn(d,v,t,e),s=m.regions.length,w=m.regions.reduce((b,C)=>b+C.markers.length,0);if(a==="glyph")return(0,E.jsx)(ue,{label:`${r??"Ground"} \xB7 ${s}`,...m.undrawn.length>0?{meta:`+${m.undrawn.length} undrawn`}:{},selected:o});if(a==="summary")return(0,E.jsx)(Z,{title:r??"The plan",subtitle:`${s} drawn \xB7 ${w} standing in them`,children:(0,E.jsx)(Ft,{map:m,options:t,...g?{implicated:g}:{},...y?{flagged:y}:{}})});let i=(0,Pe.useMemo)(()=>{let b=1/0,C=1/0,N=-1/0,Y=-1/0,ce=re=>{re.x<b&&(b=re.x),re.x>N&&(N=re.x),re.y<C&&(C=re.y),re.y>Y&&(Y=re.y)};for(let re of m.regions){for(let we of re.outline)ce(we);for(let we of re.markers)ce(we.at)}if(!Number.isFinite(b)||N-b<=0||Y-C<=0)return{x0:0,y0:0,x1:1,y1:1};let ye=Math.max(N-b,Y-C)*.04;return{x0:b-ye,y0:C-ye,x1:N+ye,y1:Y+ye}},[m.regions]),x=(i.x1-i.x0)/(i.y1-i.y0),S=t.aspect??Math.min(3.2,Math.max(.55,x)),$=Math.round(In/(i.x1-i.x0)),M=Math.round($*(i.x1-i.x0)),R=Math.round(M/S),u={x:i.x0*$,y:i.y0*$-(R-$*(i.y1-i.y0))/2,w:M,h:R},k=$,f=u.w,P=(g?.length??0)>0||(y?.length??0)>0,B=(0,Pe.useRef)(null),{touchable:W,legible:H}=tt(B,{units:u.w,target:f*_t*2}),j=Cn("--graview-font-display","serif"),_=Cn("--graview-font-body","sans-serif"),{named:se,placed:me,tagged:le}=(0,Pe.useMemo)(()=>{let b=[],C=f*.012,N=In*.004,Y=(ae,K)=>!b.some(ge=>ge!==K&&pt({x0:ae.x0-N,y0:ae.y0-N,x1:ae.x1+N,y1:ae.y1+N},ge)),ce=[...m.regions].sort((ae,K)=>On(K.outline)-On(ae.outline)),ye=new Map,re=new Map;for(let ae of ce){let K=gt(ae.outline),ge=Math.max(0,(K.bottom-K.top)*k*.55),Ce=null;for(let xe of[.12,.26,.42,.6,.78]){let be=K.top+xe*(K.bottom-K.top),$e=$n(ae.outline,be),wn=Math.max(0,($e.x1-$e.x0)*$-C*2),de=mt(ae.label,{room:wn,height:ge,size:f*.023,floor:f*.015,measure:j});if(de===null)continue;let Te=Math.max(...de.lines.map(tr=>j(tr,de.fontSize))),Oe=de.lines.length*de.fontSize*1.15,Fn=K.top*k+C+Oe/2,_n=K.bottom*k-C-Oe/2,Ze=_n<Fn?(K.top+K.bottom)*k/2:Math.min(Math.max(be*k,Fn),_n),vn=$n(ae.outline,Ze/k),bn=vn.x0*$+C;if(Te>(vn.x1-vn.x0)*$-C*2)continue;let Un={x0:bn,y0:Ze-Oe/2,x1:bn+Te,y1:Ze+Oe/2};if(Y(Un)){b.push(Un),Ce={fitted:de,x:bn,y:Ze};break}}ye.set(ae.id,Ce?.fitted??null),Ce!==null&&re.set(ae.id,{x:Ce.x,y:Ce.y})}let we=f*.018,Fe=new Map,F=f*.011+f*.004,qn=new Map;for(let ae of m.regions)for(let K of ae.markers){let ge={x0:K.at.x*$-F,y0:K.at.y*k-F,x1:K.at.x*$+F,y1:K.at.y*k+F};qn.set(K.id,ge),b.push(ge)}for(let ae of W?m.regions:[])for(let K of ae.markers){let ge=f*.018,Ce=_(K.label,we),xe=K.at.x*$,be=K.at.y*k,$e=we*1.15,wn=[{x:xe+ge,y:be,anchor:"start"},{x:xe-ge,y:be,anchor:"end"},{x:xe+ge*.7,y:be-$e,anchor:"start"},{x:xe-ge*.7,y:be-$e,anchor:"end"},{x:xe+ge*.7,y:be+$e,anchor:"start"},{x:xe-ge*.7,y:be+$e,anchor:"end"},{x:xe,y:be-$e*1.1,anchor:"start"},{x:xe,y:be+$e*1.1,anchor:"start"}];for(let de of wn){let Te=de.anchor==="start"?de.x:de.x-Ce,Oe={x0:Te,y0:de.y-we*.62,x1:Te+Ce,y1:de.y+we*.62};if(!(Te<u.x+4||Te+Ce>u.x+u.w-4)&&!(Oe.y0<u.y+2||Oe.y1>u.y+u.h-2)&&Y(Oe,qn.get(K.id))){b.push(Oe),Fe.set(K.id,{at:{x:de.x,y:de.y},anchor:de.anchor,size:we});break}}}return{named:ye,placed:re,tagged:Fe}},[m.regions,In,k,W,j,_]),O=(0,Pe.useMemo)(()=>{let b=[];for(let C of m.regions)(se.get(C.id)?.whole??!1)===!1&&b.push({id:C.id,label:C.label,what:C.what,round:!1});for(let C of m.regions)for(let N of C.markers)(!W||!le.has(N.id))&&b.push({id:N.id,label:N.label,what:N.what,round:!0});return b},[m.regions,se,le,W]),{principal:L}=Q(),[A,te]=(0,Pe.useState)(null),he=t.draw!==void 0,h=t.place!==void 0,I=b=>{if(A===null)return;b.stopPropagation();let C=Mr(b);if(A.kind==="marker"){c.apply({name:t.place.act,args:{[t.place.id]:A.id,[t.place.at]:C}},{author:L,intent:`Placed ${A.label} on the map`}),te(null);return}te({...A,corners:[...A.corners,C]})},D=()=>{A===null||A.kind!=="region"||A.corners.length<3||(c.apply({name:t.draw.act,args:{[t.draw.id]:A.id,[t.draw.outline]:A.corners}},{author:L,intent:`Drew ${A.label} on the map \u2014 ${A.corners.length} corners`}),te(null))},q=A===null?m.regions.length===0?"Nothing drawn yet. Choose an area below, then click its corners here.":null:A.kind==="marker"?`Click where ${A.label} stands.`:A.corners.length<3?`Click the corners of ${A.label} \u2014 ${3-A.corners.length} more to make an area.`:`${A.corners.length} corners. Keep clicking, or press Done.`;return H?(0,E.jsxs)(Z,{title:r??"The plan",subtitle:`${s} drawn \xB7 ${w} standing in them`,...m.undrawn.length>0?{meta:`${m.undrawn.length} ${t.undrawnLabel??"not drawn yet"}`}:{},selected:o,fit:!0,children:[(0,E.jsx)("div",{style:{position:"relative",width:"100%",aspectRatio:`${u.w} / ${u.h}`,overflow:"hidden"},children:(0,E.jsxs)("svg",{ref:B,viewBox:`${u.x} ${u.y} ${u.w} ${u.h}`,width:"100%",height:"100%",preserveAspectRatio:"xMidYMid meet",role:A!==null?"application":W?"group":"img","aria-label":A===null?`${r??"The plan"}: ${s} drawn, ${w} standing in them`:q??"Drawing",onClick:I,"data-testid":"plan-canvas",style:{display:"block",position:"absolute",inset:0,cursor:A===null?void 0:"crosshair",border:"1px dashed color-mix(in oklab, var(--graview-edge) 80%, transparent)",borderRadius:".4rem",backgroundImage:"linear-gradient(color-mix(in oklab, var(--graview-edge) 35%, transparent) 1px, transparent 1px),linear-gradient(90deg, color-mix(in oklab, var(--graview-edge) 35%, transparent) 1px, transparent 1px)",backgroundSize:"10% 10%"},children:[(0,E.jsx)("text",{x:u.x+u.w-f*.028,y:u.y+f*.034,fontSize:f*.022,textAnchor:"middle",fill:"var(--graview-ink)",opacity:.55,children:"N"}),q!==null&&m.regions.length===0?(0,E.jsx)("text",{x:u.x+u.w/2,y:u.y+u.h/2,textAnchor:"middle",dominantBaseline:"middle",fontSize:f*.026,fill:"var(--graview-ink)",opacity:.7,style:{pointerEvents:"none",fontFamily:"var(--graview-font-body)"},children:q}):null,A!==null&&A.kind==="region"&&A.corners.length>0?(0,E.jsxs)("g",{style:{pointerEvents:"none"},children:[(0,E.jsx)("polyline",{points:A.corners.map(b=>`${b.x*$},${b.y*k}`).join(" "),fill:A.corners.length>=3?"color-mix(in oklab, var(--graview-accent) 22%, transparent)":"none",stroke:"var(--graview-accent)",strokeWidth:3,strokeDasharray:"8 6"}),A.corners.map((b,C)=>(0,E.jsx)("circle",{cx:b.x*$,cy:b.y*k,r:f*.008,fill:"var(--graview-accent)"},C))]}):null,m.regions.map(b=>{let C=hn(b.id,g,y),N=P&&C===void 0?.34:1,Y=b.outline.map(ce=>`${ce.x*$},${ce.y*k}`).join(" ");return(0,E.jsx)("g",{"data-graview-pick":b.id,...C?{"data-graview-emphasis":C}:{},role:"button","aria-label":`${b.label}${b.what?`, ${b.what}`:""}, ${b.markers.length} standing in it`,style:{opacity:N,cursor:"pointer"},children:(0,E.jsx)("polygon",{points:Y,fill:Hn(b.what,C,t.hues),stroke:Ut(b.what,C,t.hues),strokeWidth:C==="flagged"?5:2.5,strokeLinejoin:"round"})},b.id)}),m.regions.flatMap(b=>b.markers.map(C=>{let N=hn(C.id,g,y),Y=P&&N===void 0?.34:1;return(0,E.jsxs)("g",{...W?{"data-graview-pick":C.id,role:"button","aria-label":`${C.label}${C.what?`, ${C.what}`:""}, in ${b.label}`}:{"aria-hidden":!0},...N?{"data-graview-emphasis":N}:{},style:{opacity:Y,cursor:W?"pointer":"default"},children:[W?(0,E.jsx)("circle",{cx:C.at.x*$,cy:C.at.y*k,r:f*_t,fill:"transparent"}):null,(0,E.jsx)("circle",{cx:C.at.x*$,cy:C.at.y*k,r:f*.011,fill:N==="flagged"?"var(--graview-warn)":`hsl(${yn(C.what,t.hues)} 55% 45%)`,stroke:"var(--graview-panel)",strokeWidth:f*.004}),le.has(C.id)?(0,E.jsx)("text",{x:le.get(C.id).at.x,y:le.get(C.id).at.y,textAnchor:le.get(C.id).anchor,dominantBaseline:"middle",fontSize:le.get(C.id).size,fill:"var(--graview-ink)",stroke:"var(--graview-panel)",strokeWidth:Math.max(2,le.get(C.id).size*.3),paintOrder:"stroke","data-testid":`marker-label-${C.id}`,style:{pointerEvents:"none",fontFamily:"var(--graview-font-body)"},children:C.label}):null]},C.id)})),m.regions.map(b=>{let C=se.get(b.id),N=me.get(b.id);if(!C||N===void 0)return null;let Y=hn(b.id,g,y);return(0,E.jsx)("text",{x:N.x,y:N.y-(C.lines.length-1)*C.fontSize*1.15/2,textAnchor:"start",dominantBaseline:"middle",fontSize:C.fontSize,fill:"var(--graview-ink)",opacity:P&&Y===void 0?.34:1,stroke:"var(--graview-panel)",strokeWidth:Math.max(2,C.fontSize*.26),paintOrder:"stroke","data-testid":`region-label-${b.id}`,style:{pointerEvents:"none",fontFamily:"var(--graview-font-display)"},children:C.lines.map((ce,ye)=>(0,E.jsx)("tspan",{x:N.x,dy:ye===0?0:C.fontSize*1.15,children:ce},ce+String(ye)))},`label-${b.id}`)})]})}),O.length>0?(0,E.jsx)("ul",{"data-testid":"map-key",style:{margin:".5rem 0 0",padding:0,listStyle:"none",display:"flex",flexWrap:"wrap",gap:".2rem .75rem",fontSize:"0.875rem"},children:O.map(b=>(0,E.jsxs)("li",{"data-graview-pick":b.id,style:{display:"flex",alignItems:"center",gap:".35rem",minWidth:0,minHeight:"max(1.5rem, 24px)",padding:"0 .15rem",cursor:"pointer"},children:[(0,E.jsx)("span",{"aria-hidden":"true",style:{width:b.round?".55rem":".7rem",height:b.round?".55rem":".7rem",flex:"0 0 auto",borderRadius:b.round?"50%":".15rem",background:b.round?`hsl(${yn(b.what,t.hues)} 55% 45%)`:Hn(b.what,void 0,t.hues),border:b.round?void 0:`1px solid ${Ut(b.what,void 0,t.hues)}`}}),(0,E.jsx)("span",{style:{minWidth:0,overflowWrap:"anywhere"},children:b.label})]},b.id))}):null,A!==null?(0,E.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:".5rem",marginTop:".5rem",alignItems:"center"},children:[m.regions.length>0&&q!==null?(0,E.jsx)("span",{style:{fontSize:"0.9375rem",opacity:.8,flexBasis:"100%"},"aria-live":"polite",children:q}):null,A.kind==="region"?(0,E.jsxs)("button",{type:"button",onClick:D,disabled:A.corners.length<3,"data-testid":"draw-done",style:{...Qe,background:"var(--graview-accent)",color:"var(--graview-accent-ink)",borderColor:"transparent"},children:["Done \u2014 keep ",A.label]}):null,A.kind==="region"&&A.corners.length>0?(0,E.jsx)("button",{type:"button",onClick:()=>te({...A,corners:A.corners.slice(0,-1)}),style:Qe,children:"Undo a corner"}):null,(0,E.jsx)("button",{type:"button",onClick:()=>te(null),style:Qe,"data-testid":"draw-cancel",children:"Stop"})]}):(0,E.jsxs)(E.Fragment,{children:[he&&m.undrawn.length>0?(0,E.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:".4rem",marginTop:".5rem",alignItems:"center"},children:[(0,E.jsxs)("span",{style:{fontSize:"0.875rem",opacity:.75},children:[t.undrawnLabel??"Not drawn yet",":"]}),m.undrawn.map(b=>(0,E.jsxs)("button",{type:"button",style:Qe,onClick:()=>te({kind:"region",id:b.id,label:b.label,corners:[]}),"data-testid":`draw-${b.id}`,children:["Draw ",b.label]},b.id))]}):null,h&&m.strays.length>0?(0,E.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:".4rem",marginTop:".5rem",alignItems:"center"},children:[(0,E.jsxs)("span",{style:{fontSize:"0.875rem",opacity:.75},children:[t.strayLabel??"Not placed",":"]}),m.strays.map(b=>(0,E.jsxs)("button",{type:"button",style:Qe,onClick:()=>te({kind:"marker",id:b.id,label:b.label}),"data-testid":`place-${b.id}`,children:["Place ",b.label]},b.id))]}):null,t.help!==void 0&&(m.undrawn.length>0||m.strays.length>0)?(0,E.jsx)("p",{style:{margin:".5rem 0 0",fontSize:"0.875rem"},children:(0,E.jsx)("a",{href:t.help.href,"data-testid":"map-help",children:t.help.label})}):null,!he&&(m.undrawn.length>0||m.strays.length>0)?(0,E.jsxs)("p",{style:{margin:".5rem 0 0",fontSize:"0.875rem",opacity:.75},children:[m.undrawn.map(b=>b.label).join(", "),m.undrawn.length>0?` \u2014 ${t.undrawnLabel??"not drawn yet"}. `:"",m.strays.map(b=>b.label).join(", "),m.strays.length>0?` \u2014 ${t.strayLabel??"not placed"}.`:""]}):null]})]}):(0,E.jsx)(Z,{title:r??"The plan",subtitle:`${s} drawn \xB7 ${w} standing in them`,selected:o,children:(0,E.jsx)(Ft,{map:m,options:t,...g?{implicated:g}:{},...y?{flagged:y}:{}})})}var Jt=G(J(),1);function Yt(e){function t(n){let{store:r}=Q();return(0,Jt.jsx)(Kt,{schema:r.schema,...n,options:e})}return{name:"plan",requiredRoles:[...qt],options:e,View:t,build(n,r,a){return fn(n,r,e,a)}}}var ne=G(J(),1);function Pr(e,t,n){let r=t.flatMap(o=>(o.subject&&o.subject.kinds!=="*"?o.subject.kinds:[null]).map(y=>({name:o.name,title:o.title??o.name,kind:y}))),a=[];for(let o of n){let g={kind:"human",id:"themselves",roles:[o]};for(let y of r){let c=y.kind??void 0,v=Sn(e,g,y.name,c).ok,l=!v&&Sn(e,g,y.name,c,void 0,"themselves").ok;a.push({role:o,act:y.name,kind:y.kind,may:v?"yes":l?"self":"no"})}}return{roles:n,acts:r,cells:a}}function Tr({label:e,fidelity:t,mode:n}){let{store:r}=Q(),a=r.policy,o=a?.roles??[],g=r.allMutations().filter(p=>!p.derived).map(p=>({name:p.name,...p.title?{title:p.title}:{},...p.subject?{subject:p.subject}:{}})),y=Pr(a,g,o),c=e??"Who may do what";if(!a||o.length===0)return(0,ne.jsxs)("div",{"data-testid":"reach-lens",style:{padding:14,color:"var(--graview-ink-muted)",fontSize:"0.875rem"},children:[c,": this installation has no policy, so everyone may do everything."]});if(t==="glyph")return(0,ne.jsx)(ue,{label:`${c} \xB7 ${o.length} ${o.length===1?"role":"roles"}`,hue:ie("role")});let v=n==="fullscreen",l=p=>p==="yes"?"\u25CF":p==="self"?"\u25D0":"\xB7";return(0,ne.jsxs)("div",{"data-testid":"reach-lens",style:{display:"grid",gap:10,padding:v?0:14,borderRadius:"var(--graview-radius, 12px)",background:v?"transparent":"var(--graview-panel)",border:v?"none":"1px solid var(--graview-edge)",color:"var(--graview-ink)",minWidth:0},children:[(0,ne.jsxs)("div",{style:{display:"flex",alignItems:"baseline",gap:10},children:[(0,ne.jsx)("span",{style:{fontFamily:"var(--graview-font-display)",fontSize:"1.125rem",fontWeight:600},children:c}),(0,ne.jsx)("span",{style:{marginLeft:"auto",fontSize:"0.75rem",color:"var(--graview-ink-faint)"},children:"\u25CF may \xB7 \u25D0 on their own record \xB7 read from the policy"})]}),(0,ne.jsx)("div",{"data-scroller":!0,style:{overflowX:"auto"},children:(0,ne.jsxs)("table",{style:{borderCollapse:"collapse",fontSize:"0.875rem",minWidth:"100%"},children:[(0,ne.jsx)("thead",{children:(0,ne.jsxs)("tr",{children:[(0,ne.jsx)("th",{scope:"col",style:{textAlign:"left",padding:"4px 10px 6px 0",fontWeight:500,color:"var(--graview-ink-faint)",fontSize:"0.75rem",letterSpacing:"0.12em",textTransform:"uppercase"},children:"Role"}),y.acts.map(p=>(0,ne.jsxs)("th",{scope:"col",title:p.kind?`${p.title}, on ${Yn(nn(r.schema.tryDefinition(p.kind),p.kind))}`:p.title,style:{textAlign:"left",padding:"4px 10px 6px",fontWeight:500,whiteSpace:"nowrap",color:"var(--graview-ink-muted)",fontSize:"0.8125rem"},children:[p.title,p.kind?(0,ne.jsxs)("span",{style:{color:"var(--graview-ink-faint)"},children:[" \xB7 ",p.kind]}):null]},`${p.name}|${p.kind??""}`))]})}),(0,ne.jsx)("tbody",{children:y.roles.map(p=>(0,ne.jsxs)("tr",{children:[(0,ne.jsx)("th",{scope:"row",style:{textAlign:"left",padding:"6px 10px 6px 0",fontWeight:600,whiteSpace:"nowrap",borderTop:"1px solid var(--graview-edge)"},children:p}),y.acts.map(d=>{let m=y.cells.find(s=>s.role===p&&s.act===d.name&&s.kind===d.kind);return(0,ne.jsx)("td",{"data-graview-reach":m.may,title:`${p} ${m.may==="yes"?"may":m.may==="self"?"may, on their own record,":"may not"} ${d.title.toLowerCase()}`,style:{padding:"6px 10px",textAlign:"center",borderTop:"1px solid var(--graview-edge)",color:m.may==="no"?"var(--graview-ink-faint)":"var(--graview-accent)",fontSize:m.may==="no"?"0.875rem":"0.8125rem"},children:l(m.may)},`${d.name}|${d.kind??""}`)})]},p))})]})})]})}var Qt={name:"reach",requiredRoles:[],View:Tr};var X=G(J(),1),Xt=["start","end"];function Lr(e,t,{pad:n=45,minimum:r=480}={}){if(e.length===0)return{start:0,end:t};let a=Math.min(...e.map(v=>v.start)),o=Math.max(...e.map(v=>v.end)),g=Math.max(0,a-n),y=Math.min(t,o+n),c=r-(y-g);return c>0&&(g=Math.max(0,g-c/2),y=Math.min(t,g+r)),{start:Math.floor(g),end:Math.ceil(y)}}function Nr(e){let t=[...e].sort((o,g)=>o.start-g.start||o.end-g.end||o.id.localeCompare(g.id)),n=[],r=t.map(o=>{let g=n.findIndex(y=>y<=o.start);return g===-1?(g=n.length,n.push(o.end)):n[g]=o.end,{...o,lane:g,lanes:1}}),a=Math.max(1,n.length);return r.map(o=>({...o,lanes:a}))}var Gn=class extends Error{constructor(t,n){super(`The timeline lens needs ${n.join(" and ")} for "${t}". Add them to the lens bindings: { ${t}: { ${n.map(r=>`${r}: "<field name>"`).join(", ")} } }.`),this.name="TimelineBindingError"}};function Zt(e,t,n){let r=He(t[e.kind],n?.tryDefinition(e.kind));if(!r)return null;let a=e,o=n?.tryDefinition(e.kind)?.fields.shape,g=Xt.filter(l=>{let p=r[l];return p?o?!(p in o):!(p in a):!0});if(g.length>0)throw new Gn(e.kind,g);let y=Number(a[r.start]??Number.NaN),c=Number(a[r.end]??y);if(!Number.isFinite(y))return null;let v=[];if(r.columns){let l=a[r.columns];Array.isArray(l)&&v.push(...l.map(String))}if(r.column){let l=a[r.column];l!=null&&v.push(String(l))}return{id:e.id,kind:e.kind,label:pe(n?.tryDefinition(e.kind),e),columnIds:v,start:y,end:Number.isFinite(c)?Math.max(c,y):y}}function Dr(e,t){let n=Math.round(t),r=a=>`linear-gradient(hsl(${n} 55% var(--graview-tint-lightness) / ${a}), hsl(${n} 55% var(--graview-tint-lightness) / ${a})), var(--graview-panel)`;return e==="lit"?{border:"1px solid var(--graview-accent)",background:r("calc(var(--graview-tint-alpha) * 1.15)"),color:"var(--graview-ink)",boxShadow:"0 0 16px -4px var(--graview-accent)"}:e==="dimmed"?{border:"1px solid var(--graview-edge)",background:r("calc(var(--graview-tint-alpha) * 0.25)"),color:"var(--graview-ink-muted)"}:{border:`1px solid hsl(${n} 50% var(--graview-tint-lightness) / 0.42)`,background:r("var(--graview-tint-alpha)"),color:"var(--graview-ink)"}}var zr=.045,Xe=52;function Br({nodes:e,label:t,fidelity:n,mode:r,options:a,schema:o,selectedIds:g=[],implicated:y=[],flagged:c=[]}){let v=new Set([...y,...g]),l=R=>v.size===0?"plain":v.has(R)?"lit":"dimmed",p=new Set(c),d=(e??[]).map(R=>Zt(R,a.bindings,o)).filter(R=>R!==null),m=a.hueOf??(R=>ie(R.kind));if(n==="glyph")return(0,X.jsx)(ue,{label:`${t??"Timeline"} \xB7 ${d.length}`,hue:ie("timeline")});if(n==="summary")return(0,X.jsx)(Z,{title:t??"Timeline",meta:`${d.length} items`,tone:"muted",children:(0,X.jsx)(Ae,{max:a.columns.length,items:a.columns.map(R=>({id:R.id,label:`${R.label} ${d.filter(u=>u.columnIds.includes(R.id)).length}`,hue:ie(R.id)}))})});let s=a.format??String,w=Lr(d,a.extent,{...a.minWindow===void 0?{}:{minimum:a.minWindow}}),i=w.end-w.start,x=R=>(R-w.start)/i*100,S=a.tick??Math.max(60,Math.round(i/8/60)*60),$=[];for(let R=Math.ceil(w.start/S)*S;R<=w.end;R+=S)$.push(R);let M=r==="fullscreen";return(0,X.jsx)(Z,{title:t??"Timeline",meta:`${s(w.start)} \u2013 ${s(w.end)}`,style:{gap:12,...M?{flex:"1 1 auto",minHeight:0,height:"100%"}:{}},children:(0,X.jsxs)("div",{style:{display:"flex",flexDirection:"column",height:"100%",minHeight:0},children:[(0,X.jsx)("div",{style:{display:"flex",paddingLeft:Xe,paddingBottom:10},children:a.columns.map(R=>(0,X.jsx)("div",{style:{flex:1,fontSize:"0.75rem",letterSpacing:"0.18em",textTransform:"uppercase",textAlign:"center",color:"var(--graview-ink-muted)"},children:R.label},R.id))}),(0,X.jsxs)("div",{style:{position:"relative",flex:1,minHeight:0},children:[$.map((R,u)=>(0,X.jsx)("div",{style:{position:"absolute",left:Xe-8,right:0,top:u===$.length-1?"calc(100% - 1px)":`${x(R)}%`,height:1,background:"var(--graview-edge)"},children:(0,X.jsx)("span",{style:{position:"absolute",left:-(Xe-8),...u===$.length-1?{bottom:2}:{top:-7},width:Xe-16,textAlign:"right",fontSize:"0.75rem",letterSpacing:"0.06em",color:"var(--graview-ink-faint)"},children:s(R)})},R)),(0,X.jsx)("div",{style:{position:"absolute",inset:0,left:Xe,display:"flex",gap:4},children:a.columns.map(R=>(0,X.jsx)(Vr,{spans:d.filter(u=>u.columnIds.includes(R.id)),window:w,format:s,hue:m,emphasisOf:l,brokenIds:p},R.id))})]})]})})}function Vr({spans:e,window:t,format:n,hue:r,emphasisOf:a,brokenIds:o}){let g=t.end-t.start,y=d=>(d-t.start)/g*100,c=d=>(d.end-d.start)/g<zr,v=Nr(e.filter(d=>!c(d))),l=[...e.filter(c)].sort((d,m)=>d.start-m.start),p=Math.max(1,...v.map(d=>d.lanes));return(0,X.jsxs)("div",{style:{position:"relative",flex:1,minWidth:0},children:[v.map(d=>{let m=100/p,s=Math.max(1.6,y(d.end)-y(d.start));return(0,X.jsx)("div",{"data-graview-span":d.id,"data-graview-pick":d.id,"data-graview-emphasis":a(d.id),title:`${d.label} \xB7 ${n(d.start)}\u2013${n(d.end)}`,style:{position:"absolute",top:`${y(d.start)}%`,height:`${s}%`,left:`${d.lane*m}%`,width:`${m}%`,padding:"0 2px 2px 0",boxSizing:"border-box"},children:(0,X.jsx)("div",{style:{height:"100%",minHeight:15,borderRadius:6,padding:"3px 6px",fontSize:"0.75rem",lineHeight:1.25,overflow:"hidden",display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical",...Dr(a(d.id),r(d)),...o.has(d.id)?{borderLeft:"3px solid var(--graview-warn)",paddingLeft:4}:{}},children:s>=3.4?d.label:null})},d.id)}),l.map(d=>{let m=a(d.id);return(0,X.jsxs)("div",{"data-graview-span":d.id,"data-graview-pick":d.id,"data-graview-emphasis":m,"data-graview-moment":"",title:`${d.label} \xB7 ${n(d.start)}`,style:{position:"absolute",top:`${y(d.start)}%`,right:0,maxWidth:"100%",boxSizing:"border-box",transform:"translateY(-50%)",display:"flex",alignItems:"center",justifyContent:"flex-end",gap:5,minHeight:24,padding:"0 4px 0 8px",borderRadius:999,background:"linear-gradient(90deg, transparent, var(--graview-ground) 35%)"},children:[(0,X.jsx)("span",{style:{fontSize:"0.6875rem",letterSpacing:"0.04em",whiteSpace:"nowrap",color:m==="lit"?"var(--graview-accent)":"var(--graview-ink-faint)"},children:n(d.start)}),(0,X.jsx)("span",{style:{fontSize:"0.75rem",minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",color:m==="dimmed"?"var(--graview-ink-faint)":"var(--graview-ink)"},children:d.label}),(0,X.jsx)("span",{style:{width:7,height:7,borderRadius:999,flex:"0 0 auto",background:o.has(d.id)?"var(--graview-warn)":m==="dimmed"?"var(--graview-edge)":`hsl(${Math.round(r(d))} 60% var(--graview-tint-lightness))`,boxShadow:o.has(d.id)?"0 0 0 3px var(--graview-warn)":m==="lit"?"0 0 0 3px var(--graview-accent-dim)":m==="dimmed"?void 0:`0 0 8px hsl(${Math.round(r(d))} 60% var(--graview-tint-lightness) / 0.45)`}})]},d.id)})]})}function er(e){function t(n){let{store:r}=Q(),a=Object.keys(e.bindings),{nodes:o,bar:g}=Ve(n,{...e.arranging!==void 0?{allow:e.arranging}:{},lensAllows:{group:!1},...e.arrangedBy?{arrangedBy:e.arrangedBy}:{},...a[0]?{kind:(n.nodes??[]).find(c=>a.includes(String(c.kind)))?.kind??a[0]}:{}}),y=(0,X.jsx)(Br,{schema:r.schema,...n,nodes:o,options:e});return Ee(n,r.schema,g?(0,X.jsxs)("div",{style:{display:"grid",gap:6,height:"100%",minHeight:0,gridTemplateRows:"auto 1fr"},children:[g,y]}):y)}return{name:"timeline",requiredRoles:[...Xt],bindings:e.bindings,options:e,View:t,place(n,r){return n.map(a=>Zt(a,e.bindings,r)).filter(a=>a!==null)}}}var qe=G(J(),1),nr=new WeakMap,jn=e=>String(e).padStart(2,"0");function Wr(e){return e===1440?t=>`${jn(Math.floor(t/60))}:${jn(Math.round(t%60))}`:e===24?t=>`${jn(Math.floor(t))}:00`:t=>String(t)}function Ir(e){let t=e.options;switch(e.lens){case"timeline":{let n=typeof t.extent=="number"?t.extent:1440;return er({...t,extent:n,format:Wr(n)}).View}case"calendar":return Lt({...t,...typeof t.today=="string"?{today:t.today}:{}}).View;case"coverage":return Gt(t).View;case"board":return vt(t).View;case"plan":return Yt(t).View;case"reach":return Qt.View;case"columns":return Dt(t).View;case"blocks":return Hr(nt(Array.isArray(t.blocks)?t.blocks:[]),e.as)}}function Hr(e,t){return n=>{let r=(0,qe.jsx)(ct,{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)(Z,{title:n.label??"",children:r})}}function Mi(e){let t=nr.get(e);if(!t){let n=Ir(e),r=a=>(0,qe.jsx)(n,{...a,label:e.title});nr.set(e,t=r)}return t}export{Wr as a,Mi as b};
@@ -1,4 +1,4 @@
1
- import{yb as e}from"./chunk.RAE4M3KQ.js";var a=`
1
+ import{Eb as e}from"./chunk.P7YN4Z3K.js";var a=`
2
2
  .graview-spec { display: flex; flex-direction: column; gap: 6px; min-width: 0; color: var(--graview-ink); }
3
3
 
4
4
  .graview-spec-row { flex-direction: row; flex-wrap: wrap; align-items: center; gap: 4px 10px; box-sizing: border-box; max-width: 100%; padding: 5px 10px; border: 1px solid var(--graview-edge); border-radius: var(--graview-radius-sm, 8px); background: var(--graview-panel); font-size: 0.875rem; }
@@ -0,0 +1 @@
1
+ import{a as n}from"./chunk.HFFEOCYY.js";import"./chunk.LHIYFAN5.js";import"./chunk.ECRZZ3U4.js";import"./chunk.ONDILMIX.js";import{f as s}from"./chunk.YXQCEXZX.js";import"./chunk.I5U42VDK.js";import"./chunk.4MAYBFPU.js";import"./chunk.ZLPA5BAW.js";import"./chunk.XOC5BRPU.js";import"./chunk.IKT7JQUW.js";import"./chunk.NQP3DWME.js";import"./chunk.ZOWWWRYA.js";import"./chunk.LEVR7WLB.js";import"./chunk.WVUJXDXZ.js";import"./chunk.TAW67PZU.js";import"./chunk.YOMW4MKD.js";import"./chunk.DRIWJRQW.js";import"./chunk.KSEKVHJJ.js";import"./chunk.JIWB6VGT.js";import"./chunk.KXWRS6LY.js";import"./chunk.PKFL2AR4.js";import"./chunk.XNYBOKLW.js";import"./chunk.AHDOKM4O.js";import"./chunk.6R4EI47C.js";import"./chunk.UUMXYMOX.js";import"./chunk.D3XF643V.js";import"./chunk.NLFLFIDS.js";import"./chunk.6LJ66MB7.js";import"./chunk.SVL6I37U.js";import"./chunk.P7YN4Z3K.js";import{a as y,b as i}from"./chunk.MRK6QJV5.js";import{b as r}from"./chunk.AJZBJBMO.js";var c=r(y(),1),e=r(i(),1);function v({store:d,views:t,as:a,scope:o}){let l=(0,c.useMemo)(()=>s({scope:`.${o}`}),[o]);return(0,e.jsxs)("div",{"data-testid":"embed-picture","data-embed-content":"",tabIndex:0,"aria-label":t.places().find(m=>m.as===a)?.title??"The picture",style:{flex:"1 1 auto",minHeight:0,display:"grid",gridTemplateRows:"minmax(0, 1fr)",overflow:"auto",background:"var(--graview-ground)",color:"var(--graview-ink)",fontFamily:"var(--graview-font-body, system-ui)"},children:[(0,e.jsx)("style",{children:l}),(0,e.jsx)(n,{store:d,views:t,as:a})]})}export{v as PictureFace};
@@ -0,0 +1 @@
1
+ import{b as m}from"./chunk.7ZJPJARU.js";import{b as f}from"./chunk.XNYBOKLW.js";import{d as T}from"./chunk.6LJ66MB7.js";import{da as c,fa as b,va as L,ya as R}from"./chunk.SVL6I37U.js";import{R as A,aa as I,ba as k,pa as x}from"./chunk.P7YN4Z3K.js";import{a as W,b as C}from"./chunk.MRK6QJV5.js";import{b as w}from"./chunk.AJZBJBMO.js";var u=w(W(),1);var e=w(C(),1);function z(i=4){let{store:n}=c(),p=b();return(0,u.useMemo)(()=>[...n.batches()].reverse().slice(0,i).map(a=>({intent:a.intent,author:a.author.kind,...a.author.id?{authorId:a.author.id}:{},by:a.author,...a.ops[0]?.via?{via:a.ops[0].via}:{},touched:[...new Set(a.ops.filter(o=>!x(o)).flatMap(o=>o.writes))],batch:a.id,...a.ops.every(x)?{withheld:!0}:{}})),[n,p,i])}function H({batch:i}){let{store:n,principal:p,noteSeat:a}=c(),o=b(),[h,y]=(0,u.useState)(null),l=(0,u.useMemo)(()=>n.canUndo(i),[n,i,o]);if(!l.ok&&l.ops.length===0)return null;let s=!l.ok,g=s?l.includeBatches:[];return(0,e.jsxs)("span",{style:{marginLeft:"auto",flex:"0 0 auto",display:"grid",justifyItems:"end",gap:2},children:[(0,e.jsx)("button",{type:"button","data-testid":"undo-turn",title:s?`${l.message} \u2014 undo those too`:"Take this back, keeping everything since",onClick:()=>{y(null);try{let d=n.log.all().find(t=>t.batch===i&&t.author.kind==="agent");n.undo(s?[i,...g]:i,{author:p}),d&&a({type:"home",author:d.author})}catch(d){y(d instanceof Error?d.message:String(d))}},style:{display:"inline-flex",alignItems:"center",minHeight:24,minWidth:24,padding:"1px 8px",fontSize:"0.75rem",...s?{borderColor:"var(--graview-warn)",color:"var(--graview-warn)"}:{}},children:s?`undo +${g.length}`:"undo"}),h?(0,e.jsx)("span",{"data-testid":"undo-refused",role:"alert",style:{fontSize:"0.75rem",lineHeight:1.4,color:"var(--graview-warn)",maxWidth:260,textAlign:"right"},children:h}):null]})}function O(){let i=()=>{let n=new URL(window.location.href);return n.searchParams.set("fresh","1"),n.toString()};return(0,e.jsx)("a",{href:"#fresh","data-testid":"start-fresh",title:"Forget every edit made in this browser and return to the example",onClick:n=>{n.preventDefault(),window.location.assign(i())},style:{display:"inline-flex",alignItems:"center",minHeight:24,minWidth:24,fontSize:"0.8125rem",color:"var(--graview-ink-muted)",textDecoration:"underline",textDecorationColor:"var(--graview-edge-bright)",textUnderlineOffset:3},children:"Start fresh"})}function N({calls:i,seat:n,remembers:p=!1}){let a=z(),{store:o,principal:h,seats:y,people:l}=c(),s=i.some(t=>t.phase==="running"),g=R("activity"),d=g.open;return n===void 0&&i.length===0&&a.length===0&&!p?null:(0,e.jsxs)("div",{style:{position:"relative"},children:[(0,e.jsxs)("button",{type:"button","data-testid":"activity-button",...g.trigger,onClick:g.toggle,title:s?"An agent is working":"What has happened",style:{display:"inline-flex",alignItems:"center",gap:6,minHeight:30,padding:"0 8px",borderRadius:8,border:"1px solid transparent",background:"transparent",boxShadow:"none",fontSize:"0.875rem",whiteSpace:"nowrap",color:s?"var(--graview-accent)":"var(--graview-ink-muted)"},children:[s?(0,e.jsx)("span",{"aria-hidden":"true",style:{width:6,height:6,borderRadius:999,background:"var(--graview-accent)"}}):null,a.length>0?a.length:"",(0,e.jsxs)("svg",{className:"graview-activity-mark",width:"15",height:"15",viewBox:"0 0 16 16","aria-hidden":"true",focusable:"false",style:{display:"var(--graview-activity-mark, none)"},children:[(0,e.jsx)("circle",{cx:"8",cy:"8",r:"5.75",fill:"none",stroke:"currentColor",strokeWidth:"1.4"}),(0,e.jsx)("path",{d:"M8 4.75 V8 L10.25 9.5",fill:"none",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"})]}),(0,e.jsx)("span",{className:"graview-activity-word",children:" Activity"})]}),!d&&n!==void 0?(0,e.jsx)("div",{hidden:!0,"data-testid":"agent-seat-seated",children:n}):null,d?(0,e.jsxs)("section",{...g.pane,"aria-label":"Activity","data-testid":"activity","data-graview-offstage":"",style:{...L,width:300,maxHeight:"min(52cqh, 460px)",overflow:"auto",display:"flex",flexDirection:"column",gap:9,padding:12,borderRadius:10,border:"1px solid var(--graview-edge)",background:"var(--graview-float)",boxShadow:"var(--graview-lift-high)"},children:[(0,e.jsx)("h2",{style:{...T,margin:0},children:"Activity"}),n!==void 0?(0,e.jsxs)("div",{"data-testid":"agent-seat-row",style:{display:"grid",gap:5,paddingBottom:i.length>0||a.length>0?9:0,...i.length>0||a.length>0?{borderBottom:"1px solid var(--graview-edge)"}:{}},children:[(0,e.jsx)("span",{style:{fontSize:"0.75rem",letterSpacing:"0.14em",textTransform:"uppercase",color:"var(--graview-ink-faint)"},children:"The agent's seat"}),n]}):null,i.length>0?(0,e.jsx)("ol",{style:{margin:0,padding:0,listStyle:"none",display:"grid",gap:7},children:i.slice(0,6).map((t,v)=>(0,e.jsxs)("li",{style:{display:"grid",gap:2,fontSize:"0.8125rem",lineHeight:1.45},children:[(0,e.jsxs)("div",{style:{display:"flex",alignItems:"baseline",gap:6},children:[(0,e.jsx)("span",{"aria-hidden":"true",style:{width:6,height:6,borderRadius:999,flex:"0 0 auto",background:t.phase==="running"?"var(--graview-accent)":t.phase==="failed"?"var(--graview-warn)":"var(--graview-edge-bright)"}}),(0,e.jsxs)("span",{style:{color:"var(--graview-ink)"},children:[t.mutating?"changed":"read"," \xB7"," ",o.allMutations().find(r=>r.name===t.name)?.title??A(t.name)]})]}),!t.mutating&&t.reads&&t.reads.length>0?(0,e.jsxs)("div",{"data-testid":"activity-reads",style:{display:"flex",flexWrap:"wrap",gap:4,paddingLeft:12},children:[[...new Set(t.reads)].slice(0,3).map(r=>(0,e.jsx)(f,{label:m(o,r),pickId:r},r)),new Set(t.reads).size>3?(0,e.jsxs)("span",{style:{color:"var(--graview-ink-muted)"},children:["+",new Set(t.reads).size-3]}):null]}):Object.values(t.args).some(r=>typeof r=="string")?(0,e.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:4,paddingLeft:12},children:Object.entries(t.args).filter(r=>typeof r[1]=="string").slice(0,3).map(([r,S])=>(0,e.jsx)(f,{label:m(o,S),pickId:S},r))}):null,t.error?(0,e.jsx)("div",{style:{paddingLeft:12,color:"var(--graview-warn)"},children:t.error}):null]},`${t.at}:${v}`))}):null,a.length>0?(0,e.jsx)("ol",{"data-testid":"diff-log",style:{margin:0,padding:0,listStyle:"none",display:"grid",gap:6,fontSize:"0.8125rem"},children:a.map((t,v)=>t.withheld?(0,e.jsx)("li",{"data-testid":"withheld-change",style:{display:"grid",gap:3,lineHeight:1.45},children:(0,e.jsx)("span",{"data-touched":"",style:{color:"var(--graview-ink-muted)",fontStyle:"italic"},children:t.intent})},`change:${v}`):(0,e.jsxs)("li",{style:{display:"grid",gap:3,lineHeight:1.45},children:[(0,e.jsxs)("div",{style:{display:"flex",alignItems:"baseline",gap:6},children:[(0,e.jsxs)("span",{style:{minWidth:0},children:[(0,e.jsxs)("strong",{style:{fontWeight:600},children:[t.author==="human"&&t.by?.onBehalfOf===void 0&&(t.authorId===void 0||h.id===void 0||t.authorId===h.id)?"you":I(t.by??{kind:t.author,id:t.authorId},{graph:o.graph,schema:o.schema,seats:y,people:l}),k(t.via)?(0,e.jsxs)("span",{style:{fontWeight:400,color:"var(--graview-ink-muted)"},children:[", ",k(t.via)]}):null]})," ",(0,e.jsx)("span",{style:{color:"var(--graview-ink-muted)"},children:t.intent})]}),t.batch?(0,e.jsx)(H,{batch:t.batch}):null]}),(0,e.jsx)("div",{"data-touched":t.touched.join(" "),style:{display:"flex",flexWrap:"wrap",gap:4},children:t.touched.slice(0,4).map(r=>(0,e.jsx)(f,{label:m(o,r),pickId:r},r))})]},`change:${v}`))}):null,p?(0,e.jsxs)("div",{"data-testid":"remembered",style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",gap:10,paddingTop:8,borderTop:"1px solid var(--graview-edge)",fontSize:"0.8125rem",color:"var(--graview-ink-faint)"},children:[(0,e.jsx)("span",{children:"Remembered in this browser"}),(0,e.jsx)(O,{})]}):null]}):null]})}export{N as a};
@@ -0,0 +1,16 @@
1
+ import{c as E,d as I}from"./chunk.UUMXYMOX.js";import"./chunk.D3XF643V.js";import"./chunk.NLFLFIDS.js";import"./chunk.6LJ66MB7.js";import"./chunk.SVL6I37U.js";import{O as A,S as k}from"./chunk.P7YN4Z3K.js";import{a as F,b as S}from"./chunk.MRK6QJV5.js";import{b as f}from"./chunk.AJZBJBMO.js";var v=f(F(),1);var a=f(S(),1),C=40,O=60;function D(l,i,p){return l.allNodes().filter(o=>o.kind===i).map(o=>o[p])}function G(l){if(l.length<2)return[];let i=[...l].sort((n,d)=>n-d),p=i[i.length-1]-i[0];if(p<=0)return[];let o=Math.max(1,10**Math.floor(Math.log10(p/4))),e=p/4>=o*5?o*5:o,r=n=>Math.round(n/e)*e;return[...new Set([.2,.4,.6,.8].map(n=>r(i[Math.floor(n*(i.length-1))])))].filter(n=>n>0)}function T(l,i,p){let o=p.far??[],e=new Map,r=new Set(o);for(let t of i.allNodes())r.has(t.kind)&&e.set(t.id,A(l.tryDefinition(t.kind),t));let n=[...e.entries()].map(([t,g])=>({id:t,label:g}));return(n.length<=C?n:n.map(t=>({end:t,ties:i.out(t.id).length+i.in(t.id).length})).sort((t,g)=>g.ties-t.ties||t.end.label.localeCompare(g.end.label)).slice(0,C).map(t=>t.end)).sort((t,g)=>t.label.localeCompare(g.label))}function R(l,i,p){let o=[];for(let e of p.filters)if(e.about==="is")for(let r of e.options??[])o.push({value:`is:${r}`,label:r,group:e.label,condition:{key:"is",value:r}});else if(e.about==="edge"){o.push({value:`${e.key}:*`,label:"anything",group:e.label,condition:{key:e.key,value:"*"}}),o.push({value:`${e.key}:none`,label:"nothing",group:e.label,condition:{key:e.key,value:"none"}});for(let r of T(l,i,e))o.push({value:`${e.key}:${r.id}`,label:r.label,group:e.label,condition:{key:e.key,value:r.id}})}else if(e.type==="date")for(let r of["before","after","on"])o.push({value:`${e.key}:${r}`,label:`${r}\u2026`,group:e.label,ask:{key:e.key,op:r,label:e.label}});else if(e.type==="number"){let r=l.tryDefinition(p.kind),n=G(D(i,p.kind,e.key).filter(d=>typeof d=="number"));for(let d of["at-most","at-least"])for(let t of d==="at-most"?n:[...n].reverse())o.push({value:`${e.key}:${d}:${t}`,label:`${d==="at-most"?"at most":"at least"} ${k(r,e.key,t)}`,group:e.label,condition:{key:e.key,value:`${d}:${t}`}})}else if(e.type==="text"){let r=[...new Set(D(i,p.kind,e.key).filter(n=>typeof n=="string"&&n.length>0&&!n.includes(",")))].sort((n,d)=>n.localeCompare(d));if(r.length>=2&&r.length<=O)for(let n of r)o.push({value:`${e.key}:${n}`,label:n,group:e.label,condition:{key:e.key,value:n}})}else if(e.type==="boolean")o.push({value:`${e.key}:true`,label:"yes",group:e.label,condition:{key:e.key,value:"true"}}),o.push({value:`${e.key}:false`,label:"no",group:e.label,condition:{key:e.key,value:"false"}});else for(let r of e.options??[])o.push({value:`${e.key}:${r}`,label:k(l.tryDefinition(p.kind),e.key,r),group:e.label,condition:{key:e.key,value:r}});return o}var H=["day","week","month","year","decade"];function K(l){let{which:i,schema:p,graph:o,offers:e,arrangement:r,set:n,toggle:d,has:t,done:g}=l,y=l.testId,h=(0,v.useRef)(null);(0,v.useEffect)(()=>{let u=h.current?.closest("[data-graview-popover]");!u||document.activeElement!==u||(u.querySelector('[aria-pressed="true"]')??u.querySelector("button, input"))?.focus({preventScroll:!0})},[]);let L=r.sort?e.sorts.find(u=>u.key===r.sort.by):void 0,P=r.group?e.groups.find(u=>u.key===r.group.by):void 0,M=I(L),m=e.natural?e.sorts.find(u=>u.key===e.natural.by):void 0,N=i==="filter"||i==="all"&&l.parts?.filter?R(p,o,e):[],w=u=>(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("p",{children:"Sort by"}),(0,a.jsx)(c,{testId:`${y}-sort-default`,value:"",on:!r.sort,onPress:()=>(n({sort:void 0}),u()),children:m?`As declared (${E(m.label)})`:"As they were added"}),e.sorts.map(s=>(0,a.jsx)(c,{value:s.key,on:r.sort?.by===s.key,onPress:()=>(n({sort:{by:s.key,direction:r.sort?.direction??"asc"}}),u()),children:s.label},s.key)),r.sort?(0,a.jsxs)("div",{role:"group","aria-label":"Order","data-testid":`${y}-direction`,children:[(0,a.jsx)("p",{"aria-hidden":"true",children:"Order"}),["asc","desc"].map(s=>(0,a.jsx)(c,{testId:`${y}-direction-${s}`,value:s,on:r.sort.direction===s,onPress:()=>(n({sort:{by:r.sort.by,direction:s}}),u()),children:M[s]},s))]}):null]}),x=u=>(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("p",{children:"Group by"}),(0,a.jsx)(c,{testId:`${y}-group-none`,value:"",on:!r.group,onPress:()=>(n({group:void 0}),u()),children:"Not grouped"}),e.groups.map(s=>(0,a.jsx)(c,{value:s.key,on:r.group?.by===s.key,onPress:()=>(n({group:{by:s.key}}),u()),children:s.label},s.key)),r.group&&P?.buckets?(0,a.jsxs)("div",{role:"group","aria-label":"How wide a group is","data-testid":`${y}-bucket`,children:[(0,a.jsx)("p",{"aria-hidden":"true",children:"Each group"}),H.map(s=>(0,a.jsx)(c,{testId:`${y}-bucket-${s}`,value:s,on:(r.group.bucket??"day")===s,onPress:()=>(n({group:{by:r.group.by,bucket:s}}),u()),children:`A ${s}`},s))]}):null]}),$=u=>(0,a.jsx)(z,{entries:N,has:t,testId:y,onToggle:s=>(d(s),u())}),b=l.parts??{sort:!0,group:!0,filter:!0};return(0,a.jsxs)("div",{ref:h,style:{display:"contents"},children:[(0,a.jsx)("style",{children:W}),i==="sort"?w(g):i==="group"?x(g):i==="filter"?$(g):(0,a.jsxs)(a.Fragment,{children:[b.sort?(0,a.jsx)("div",{role:"group","aria-label":"Sort",children:w(g)}):null,b.group?(0,a.jsx)("div",{role:"group","aria-label":"Group",children:x(g)}):null,b.filter?(0,a.jsx)("div",{role:"group","aria-label":"Filter",children:$(g)}):null]})]})}function c({value:l,on:i,onPress:p,testId:o,children:e}){return(0,a.jsx)("button",{type:"button",className:"graview-arrange-item",value:l,"data-value":l,"aria-pressed":i,onClick:p,...o?{"data-testid":o}:{},children:e})}function z({entries:l,has:i,testId:p,onToggle:o}){let[e,r]=(0,v.useState)(null);if(e)return(0,a.jsx)(B,{ask:e,testId:p,onDay:d=>o({key:e.key,value:`${e.op}:${d}`}),onCancel:()=>r(null)});let n=[...new Set(l.map(d=>d.group))];return(0,a.jsx)(a.Fragment,{children:n.map(d=>(0,a.jsxs)("div",{role:"group","aria-label":d,children:[(0,a.jsx)("p",{"aria-hidden":"true",children:d}),l.filter(t=>t.group===d).map(t=>(0,a.jsx)(c,{value:t.value,on:t.condition?i(t.condition):!1,onPress:()=>t.condition?o(t.condition):r(t.ask),children:t.label},t.value))]},d))})}function B({ask:l,testId:i,onDay:p,onCancel:o}){let[e,r]=(0,v.useState)(""),n=/^\d{4}-\d{2}-\d{2}$/.test(e)&&Number(e.slice(0,4))>=1e3,d=()=>{n&&p(e)};return(0,a.jsxs)("div",{role:"group","aria-label":`${l.label} ${l.op} which day`,"data-testid":`${i}-ask-day`,className:"graview-arrange-ask",children:[(0,a.jsx)("p",{"aria-hidden":"true",children:`${l.label} ${l.op}`}),(0,a.jsx)("input",{type:"date","data-testid":`${i}-day`,"aria-label":`${l.label} ${l.op} which day`,autoFocus:!0,value:e,onChange:t=>r(t.target.value),onKeyDown:t=>{t.key==="Enter"?(t.preventDefault(),d()):t.key==="Escape"&&(t.preventDefault(),t.stopPropagation(),t.nativeEvent.stopImmediatePropagation(),o())}}),(0,a.jsxs)("span",{children:[(0,a.jsx)("button",{type:"button","data-testid":`${i}-day-add`,disabled:!n,onClick:d,children:"Add"}),(0,a.jsx)("button",{type:"button",onClick:o,children:"Never mind"})]})]})}var W=`
2
+ .graview-arrange-list{display:grid;align-content:start;width:min(300px,calc(100vw - 24px));height:auto;max-height:min(70vh,520px);overflow:auto;margin:0;padding:6px;border-radius:10px;border:1px solid var(--graview-edge);background:var(--graview-float);box-shadow:var(--graview-lift-high);color:var(--graview-ink);font-size:.875rem;line-height:1.3}
3
+ .graview-arrange-list [role=group]{display:grid}
4
+ .graview-arrange-list p{margin:8px 8px 2px;font-size:.6875rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--graview-ink-muted)}
5
+ .graview-arrange-item{display:flex;align-items:flex-start;gap:8px;width:100%;min-height:30px;margin:0;padding:6px 8px;border:0;border-radius:7px;background:none;font:inherit;text-align:left;color:var(--graview-ink);cursor:pointer;overflow-wrap:anywhere}
6
+ .graview-arrange-item::before{content:"";flex:0 0 12px}
7
+ .graview-arrange-item[aria-pressed=true]{font-weight:600}
8
+ .graview-arrange-item[aria-pressed=true]::before{content:"\u2713";color:var(--graview-accent)}
9
+ .graview-arrange-item:hover{background:color-mix(in srgb,var(--graview-ink) 7%,transparent)}
10
+ .graview-arrange-ask{display:grid;gap:8px;padding:0 8px 8px}
11
+ .graview-arrange-ask p{margin:8px 0 0}
12
+ .graview-arrange-ask input{box-sizing:border-box;width:100%;min-height:32px;padding:0 8px;border:1px solid var(--graview-edge);border-radius:7px;background:var(--graview-panel);font:inherit;color:var(--graview-ink)}
13
+ .graview-arrange-ask span{display:flex;gap:8px}
14
+ .graview-arrange-ask button{min-height:30px;padding:0 12px;border:1px solid var(--graview-edge);border-radius:7px;background:var(--graview-panel);font:inherit;color:var(--graview-ink);cursor:pointer}
15
+ .graview-arrange-ask button:disabled{opacity:.5;cursor:default}
16
+ `;export{K as ArrangeLists,C as FAR_ENDS,R as filterEntries,G as roundSteps};